Ample Copilot

name

Ample Copilot

description

Next-gen AI plugin with chat ui and natural language searching.

icon

chat

instructions

The plugin brings powerful AI features to Amplenote, including the ability to query all your notes for answers and insights, and to interactively edit or rewrite them with AI chat.



Features:
- Chat UI with support for tool calling
- Support for multiple embeddings & llm providers: OpenAI (recommended), Google AI Studio (free), FireWorks (free $1), Ollama and Groq.
- Natural language search support
- Support for quick plugin actions: Continue, Generate Text & Image, Summarize, Rewrite, etc.
- A lot more. Too many to list here!

🧠 Chat Documentation:
Q) How to set up LLM API (mandatory)?
Q) How to use tools?
Q) How to use custom prompts?

ℹ️ For amplenote / plugin related questions, you can type @help <your question> in chat.

🔍 Natural Language Search Documentation:
Q) How does natural language search work?
Q) How to use sync notes to LocalVecDB?
Q) How to use natural language search?
Q) How to set up embedding API (recommended)?

ℹ️ For bigger vaults, it is highly recommended to provide embedding api url and key.

-----
💡 This plugin is currently in its beta stage. If you encounter any issues, please report them.

setting

LLM API URL

setting

LLM API Key

setting

LLM Model

setting

LLM Max Tokens (Default: 8192)

setting

Custom LLM Instruction (Optional)

setting

Custom LLM Avatar (Optional)

setting

Embedding API URL (Optional)

setting

Embedding API Key (Optional)

setting

User Prompt List (DO NOT CHANGE MANUALLY)


linkAmple Copilot (v0.4.0)


linkCode

/***
* Source Code: https://github.com/debanjandhar12/my-amplenote-plugins-v2
* Author: debajandhar12
* Build: production
* Character Count: 529009 (0.53 M)
* Target Folder: src-copilot
***/
(() => {
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value;
var __require = /* @__PURE__ */ ((x) => typeof require != "undefined" ? require : typeof Proxy != "undefined" ? new Proxy(x, {
get: (a, b) => (typeof require != "undefined" ? require : a)[b]
}) : x)(function(x) {
if (typeof require != "undefined") return require.apply(this, arguments);
throw Error('Dynamic require of "' + x + '" is not supported');
});
var __esm = (fn, res) => function() {
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
};
var __commonJS = (cb, mod) => function() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from == "object" || typeof from == "function")
for (let key of __getOwnPropNames(from))
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
mod
));
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key != "symbol" ? key + "" : key, value);
 
// node_modules/esbuild-plugins-node-modules-polyfill/globals/process.js
var init_process = __esm({
"node_modules/esbuild-plugins-node-modules-polyfill/globals/process.js"() {
}
});
 
// node_modules/easy-web-worker/bundle.js
var require_bundle = __commonJS({
"node_modules/easy-web-worker/bundle.js"(exports2, module2) {
init_process();
(function(e, r) {
typeof exports2 == "object" && typeof module2 == "object" ? module2.exports = r() : typeof define == "function" && define.amd ? define([], r) : typeof exports2 == "object" ? exports2["easy-web-worker"] = r() : e["easy-web-worker"] = r();
})(exports2, () => (() => {
var e = { 382: (e2, r2, t2) => {
"use strict";
function n2(e3) {
return n2 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e4) {
return typeof e4;
} : function(e4) {
return e4 && typeof Symbol == "function" && e4.constructor === Symbol && e4 !== Symbol.prototype ? "symbol" : typeof e4;
}, n2(e3);
}
function o(e3) {
return function(e4) {
if (Array.isArray(e4)) return c(e4);
}(e3) || function(e4) {
if (typeof Symbol != "undefined" && e4[Symbol.iterator] != null || e4["@@iterator"] != null) return Array.from(e4);
}(e3) || i(e3) || function() {
throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);
}();
}
function a(e3, r3) {
return function(e4) {
if (Array.isArray(e4)) return e4;
}(e3) || function(e4, r4) {
var t3 = e4 == null ? null : typeof Symbol != "undefined" && e4[Symbol.iterator] || e4["@@iterator"];
if (t3 != null) {
var n3, o2, a2, i2, c2 = [], l2 = !0, s2 = !1;
try {
if (a2 = (t3 = t3.call(e4)).next, r4 === 0) {
if (Object(t3) !== t3) return;
l2 = !1;
} else for (; !(l2 = (n3 = a2.call(t3)).done) && (c2.push(n3.value), c2.length !== r4); l2 = !0) ;
} catch (e5) {
s2 = !0, o2 = e5;
} finally {
try {
if (!l2 && t3.return != null && (i2 = t3.return(), Object(i2) !== i2)) return;
} finally {
if (s2) throw o2;
}
}
return c2;
}
}(e3, r3) || i(e3, r3) || function() {
throw new TypeError(`Invalid attempt to destructure non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);
}();
}
function i(e3, r3) {
if (e3) {
if (typeof e3 == "string") return c(e3, r3);
var t3 = {}.toString.call(e3).slice(8, -1);
return t3 === "Object" && e3.constructor && (t3 = e3.constructor.name), t3 === "Map" || t3 === "Set" ? Array.from(e3) : t3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t3) ? c(e3, r3) : void 0;
}
}
function c(e3, r3) {
(r3 == null || r3 > e3.length) && (r3 = e3.length);
for (var t3 = 0, n3 = Array(r3); t3 < r3; t3++) n3[t3] = e3[t3];
return n3;
}
function l() {
l = function() {
return r3;
};
var e3, r3 = {}, t3 = Object.prototype, o2 = t3.hasOwnProperty, a2 = Object.defineProperty || function(e4, r4, t4) {
e4[r4] = t4.value;
}, i2 = typeof Symbol == "function" ? Symbol : {}, c2 = i2.iterator || "@@iterator", s2 = i2.asyncIterator || "@@asyncIterator", u2 = i2.toStringTag || "@@toStringTag";
function f2(e4, r4, t4) {
return Object.defineProperty(e4, r4, { value: t4, enumerable: !0, configurable: !0, writable: !0 }), e4[r4];
}
try {
f2({}, "");
} catch {
f2 = function(e5, r4, t4) {
return e5[r4] = t4;
};
}
function p2(e4, r4, t4, n3) {
var o3 = r4 && r4.prototype instanceof g ? r4 : g, i3 = Object.create(o3.prototype), c3 = new M(n3 || []);
return a2(i3, "_invoke", { value: S(e4, t4, c3) }), i3;
}
function d2(e4, r4, t4) {
try {
return { type: "normal", arg: e4.call(r4, t4) };
} catch (e5) {
return { type: "throw", arg: e5 };
}
}
r3.wrap = p2;
var v2 = "suspendedStart", h2 = "suspendedYield", y2 = "executing", b2 = "completed", m = {};
function g() {
}
function w() {
}
function k() {
}
var P = {};
f2(P, c2, function() {
return this;
});
var C = Object.getPrototypeOf, j = C && C(C(R([])));
j && j !== t3 && o2.call(j, c2) && (P = j);
var _ = k.prototype = g.prototype = Object.create(P);
function O(e4) {
["next", "throw", "return"].forEach(function(r4) {
f2(e4, r4, function(e5) {
return this._invoke(r4, e5);
});
});
}
function E(e4, r4) {
function t4(a3, i4, c3, l2) {
var s3 = d2(e4[a3], e4, i4);
if (s3.type !== "throw") {
var u3 = s3.arg, f3 = u3.value;
return f3 && n2(f3) == "object" && o2.call(f3, "__await") ? r4.resolve(f3.__await).then(function(e5) {
t4("next", e5, c3, l2);
}, function(e5) {
t4("throw", e5, c3, l2);
}) : r4.resolve(f3).then(function(e5) {
u3.value = e5, c3(u3);
}, function(e5) {
return t4("throw", e5, c3, l2);
});
}
l2(s3.arg);
}
var i3;
a2(this, "_invoke", { value: function(e5, n3) {
function o3() {
return new r4(function(r5, o4) {
t4(e5, n3, r5, o4);
});
}
return i3 = i3 ? i3.then(o3, o3) : o3();
} });
}
function S(r4, t4, n3) {
var o3 = v2;
return function(a3, i3) {
if (o3 === y2) throw Error("Generator is already running");
if (o3 === b2) {
if (a3 === "throw") throw i3;
return { value: e3, done: !0 };
}
for (n3.method = a3, n3.arg = i3; ; ) {
var c3 = n3.delegate;
if (c3) {
var l2 = W(c3, n3);
if (l2) {
if (l2 === m) continue;
return l2;
}
}
if (n3.method === "next") n3.sent = n3._sent = n3.arg;
else if (n3.method === "throw") {
if (o3 === v2) throw o3 = b2, n3.arg;
n3.dispatchException(n3.arg);
} else n3.method === "return" && n3.abrupt("return", n3.arg);
o3 = y2;
var s3 = d2(r4, t4, n3);
if (s3.type === "normal") {
if (o3 = n3.done ? b2 : h2, s3.arg === m) continue;
return { value: s3.arg, done: n3.done };
}
s3.type === "throw" && (o3 = b2, n3.method = "throw", n3.arg = s3.arg);
}
};
}
function W(r4, t4) {
var n3 = t4.method, o3 = r4.iterator[n3];
if (o3 === e3) return t4.delegate = null, n3 === "throw" && r4.iterator.return && (t4.method = "return", t4.arg = e3, W(r4, t4), t4.method === "throw") || n3 !== "return" && (t4.method = "throw", t4.arg = new TypeError("The iterator does not provide a '" + n3 + "' method")), m;
var a3 = d2(o3, r4.iterator, t4.arg);
if (a3.type === "throw") return t4.method = "throw", t4.arg = a3.arg, t4.delegate = null, m;
var i3 = a3.arg;
return i3 ? i3.done ? (t4[r4.resultName] = i3.value, t4.next = r4.nextLoc, t4.method !== "return" && (t4.method = "next", t4.arg = e3), t4.delegate = null, m) : i3 : (t4.method = "throw", t4.arg = new TypeError("iterator result is not an object"), t4.delegate = null, m);
}
function x(e4) {
var r4 = { tryLoc: e4[0] };
1 in e4 && (r4.catchLoc = e4[1]), 2 in e4 && (r4.finallyLoc = e4[2], r4.afterLoc = e4[3]), this.tryEntries.push(r4);
}
function A(e4) {
var r4 = e4.completion || {};
r4.type = "normal", delete r4.arg, e4.completion = r4;
}
function M(e4) {
this.tryEntries = [{ tryLoc: "root" }], e4.forEach(x, this), this.reset(!0);
}
function R(r4) {
if (r4 || r4 === "") {
var t4 = r4[c2];
if (t4) return t4.call(r4);
if (typeof r4.next == "function") return r4;
if (!isNaN(r4.length)) {
var a3 = -1, i3 = function t5() {
for (; ++a3 < r4.length; ) if (o2.call(r4, a3)) return t5.value = r4[a3], t5.done = !1, t5;
return t5.value = e3, t5.done = !0, t5;
};
return i3.next = i3;
}
}
throw new TypeError(n2(r4) + " is not iterable");
}
return w.prototype = k, a2(_, "constructor", { value: k, configurable: !0 }), a2(k, "constructor", { value: w, configurable: !0 }), w.displayName = f2(k, u2, "GeneratorFunction"), r3.isGeneratorFunction = function(e4) {
var r4 = typeof e4 == "function" && e4.constructor;
return !!r4 && (r4 === w || (r4.displayName || r4.name) === "GeneratorFunction");
}, r3.mark = function(e4) {
return Object.setPrototypeOf ? Object.setPrototypeOf(e4, k) : (e4.__proto__ = k, f2(e4, u2, "GeneratorFunction")), e4.prototype = Object.create(_), e4;
}, r3.awrap = function(e4) {
return { __await: e4 };
}, O(E.prototype), f2(E.prototype, s2, function() {
return this;
}), r3.AsyncIterator = E, r3.async = function(e4, t4, n3, o3, a3) {
a3 === void 0 && (a3 = Promise);
var i3 = new E(p2(e4, t4, n3, o3), a3);
return r3.isGeneratorFunction(t4) ? i3 : i3.next().then(function(e5) {
return e5.done ? e5.value : i3.next();
});
}, O(_), f2(_, u2, "Generator"), f2(_, c2, function() {
return this;
}), f2(_, "toString", function() {
return "[object Generator]";
}), r3.keys = function(e4) {
var r4 = Object(e4), t4 = [];
for (var n3 in r4) t4.push(n3);
return t4.reverse(), function e5() {
for (; t4.length; ) {
var n4 = t4.pop();
if (n4 in r4) return e5.value = n4, e5.done = !1, e5;
}
return e5.done = !0, e5;
};
}, r3.values = R, M.prototype = { constructor: M, reset: function(r4) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = e3, this.done = !1, this.delegate = null, this.method = "next", this.arg = e3, this.tryEntries.forEach(A), !r4) for (var t4 in this) t4.charAt(0) === "t" && o2.call(this, t4) && !isNaN(+t4.slice(1)) && (this[t4] = e3);
}, stop: function() {
this.done = !0;
var e4 = this.tryEntries[0].completion;
if (e4.type === "throw") throw e4.arg;
return this.rval;
}, dispatchException: function(r4) {
if (this.done) throw r4;
var t4 = this;
function n3(n4, o3) {
return c3.type = "throw", c3.arg = r4, t4.next = n4, o3 && (t4.method = "next", t4.arg = e3), !!o3;
}
for (var a3 = this.tryEntries.length - 1; a3 >= 0; --a3) {
var i3 = this.tryEntries[a3], c3 = i3.completion;
if (i3.tryLoc === "root") return n3("end");
if (i3.tryLoc <= this.prev) {
var l2 = o2.call(i3, "catchLoc"), s3 = o2.call(i3, "finallyLoc");
if (l2 && s3) {
if (this.prev < i3.catchLoc) return n3(i3.catchLoc, !0);
if (this.prev < i3.finallyLoc) return n3(i3.finallyLoc);
} else if (l2) {
if (this.prev < i3.catchLoc) return n3(i3.catchLoc, !0);
} else {
if (!s3) throw Error("try statement without catch or finally");
if (this.prev < i3.finallyLoc) return n3(i3.finallyLoc);
}
}
}
}, abrupt: function(e4, r4) {
for (var t4 = this.tryEntries.length - 1; t4 >= 0; --t4) {
var n3 = this.tryEntries[t4];
if (n3.tryLoc <= this.prev && o2.call(n3, "finallyLoc") && this.prev < n3.finallyLoc) {
var a3 = n3;
break;
}
}
a3 && (e4 === "break" || e4 === "continue") && a3.tryLoc <= r4 && r4 <= a3.finallyLoc && (a3 = null);
var i3 = a3 ? a3.completion : {};
return i3.type = e4, i3.arg = r4, a3 ? (this.method = "next", this.next = a3.finallyLoc, m) : this.complete(i3);
}, complete: function(e4, r4) {
if (e4.type === "throw") throw e4.arg;
return e4.type === "break" || e4.type === "continue" ? this.next = e4.arg : e4.type === "return" ? (this.rval = this.arg = e4.arg, this.method = "return", this.next = "end") : e4.type === "normal" && r4 && (this.next = r4), m;
}, finish: function(e4) {
for (var r4 = this.tryEntries.length - 1; r4 >= 0; --r4) {
var t4 = this.tryEntries[r4];
if (t4.finallyLoc === e4) return this.complete(t4.completion, t4.afterLoc), A(t4), m;
}
}, catch: function(e4) {
for (var r4 = this.tryEntries.length - 1; r4 >= 0; --r4) {
var t4 = this.tryEntries[r4];
if (t4.tryLoc === e4) {
var n3 = t4.completion;
if (n3.type === "throw") {
var o3 = n3.arg;
A(t4);
}
return o3;
}
}
throw Error("illegal catch attempt");
}, delegateYield: function(r4, t4, n3) {
return this.delegate = { iterator: R(r4), resultName: t4, nextLoc: n3 }, this.method === "next" && (this.arg = e3), m;
} }, r3;
}
function s(e3, r3) {
for (var t3 = 0; t3 < r3.length; t3++) {
var n3 = r3[t3];
n3.enumerable = n3.enumerable || !1, n3.configurable = !0, "value" in n3 && (n3.writable = !0), Object.defineProperty(e3, u(n3.key), n3);
}
}
function u(e3) {
var r3 = function(e4, r4) {
if (n2(e4) != "object" || !e4) return e4;
var t3 = e4[Symbol.toPrimitive];
if (t3 !== void 0) {
var o2 = t3.call(e4, r4 || "default");
if (n2(o2) != "object") return o2;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return (r4 === "string" ? String : Number)(e4);
}(e3, "string");
return n2(r3) == "symbol" ? r3 : r3 + "";
}
var f = function(e3, r3, t3, n3) {
return new (t3 || (t3 = Promise))(function(o2, a2) {
function i2(e4) {
try {
l2(n3.next(e4));
} catch (e5) {
a2(e5);
}
}
function c2(e4) {
try {
l2(n3.throw(e4));
} catch (e5) {
a2(e5);
}
}
function l2(e4) {
var r4;
e4.done ? o2(e4.value) : (r4 = e4.value, r4 instanceof t3 ? r4 : new t3(function(e5) {
e5(r4);
})).then(i2, c2);
}
l2((n3 = n3.apply(e3, r3 || [])).next());
});
};
Object.defineProperty(r2, "__esModule", { value: !0 }), r2.EasyWebWorker = void 0;
var p = t2(911), d = t2(180), v = t2(655), h = t2(416), y = t2(111), b = function() {
return e3 = function e4(r4) {
var t4 = this, n3 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
(function(e5, r5) {
if (!(e5 instanceof r5)) throw new TypeError("Cannot call a class as a function");
})(this, e4), this.source = r4, this.workerUrl = null, this.config = null, this.maxWorkers = 1, this.workers = [], this.keepAlive = !0, this.warmUpWorkers = !1, this.terminationDelay = 1e3, this.primitiveParameters = [], this.messagesQueue = /* @__PURE__ */ new Map(), this.scripts = [], this.warmUp = function() {
var e5 = t4.config, r5 = e5.warmUpWorkers, n4 = e5.maxWorkers;
r5 && new Array(n4).fill(null).forEach(function() {
return t4.getWorkerFromPool();
});
}, this.fillWorkerMethods = function(e5) {
return e5.onmessage = function(e6) {
t4.executeMessageCallback(e6);
}, e5.onerror = function(e6) {
var r5 = t4.config.onWorkerError;
if (!r5) throw e6;
r5(e6);
}, e5;
}, this.createNewWorker = function() {
var e5, r5 = t4.workerUrl, n4 = t4.config.workerOptions;
n4.name = (e5 = t4.workers.length) === 0 ? n4.name : "".concat(n4.name, "-").concat(e5);
var o3 = new Worker(r5, n4);
return t4.fillWorkerMethods(o3);
}, this.getWorkerFromPool = function() {
var e5 = t4.config, r5 = e5.maxWorkers, n4 = e5.warmUpWorkers, o3 = t4.messagesQueue.size;
if (!t4.workers.length || t4.workers.length < r5 && (o3 || n4)) {
var a2 = t4.createNewWorker();
return t4.workers.push(a2), a2;
}
var i3 = t4.workers.shift();
return t4.workers.push(i3), i3;
}, this.computeWorkerBaseSource = function() {
var e5 = function() {
var e6, r6;
if (t4.source instanceof Worker) return t4.workers = [t4.fillWorkerMethods(t4.source)], { isArrayOfWebWorkers: !1, workerUrl: null };
var n5 = typeof t4.source == "string" || t4.source instanceof URL, o3 = typeof t4.source == "function";
if (n5 || o3) return { isArrayOfWebWorkers: !1, workerUrl: (e6 = t4.workerUrl) !== null && e6 !== void 0 ? e6 : t4.getWorkerUrl() };
var a2 = Array.isArray(t4.source);
if (a2 && typeof t4.source[0] == "function") return { isArrayOfWebWorkers: !1, workerUrl: (r6 = t4.workerUrl) !== null && r6 !== void 0 ? r6 : t4.getWorkerUrl() };
var i3 = a2 && t4.source[0] instanceof Worker;
return i3 ? (t4.workers = t4.source.map(t4.fillWorkerMethods), { isArrayOfWebWorkers: i3, workerUrl: null }) : { isArrayOfWebWorkers: !1, workerUrl: null };
}(), r5 = e5.workerUrl, n4 = e5.isArrayOfWebWorkers;
return t4.workerUrl = r5, t4.config.maxWorkers = n4 ? t4.workers.length : t4.config.maxWorkers, { isArrayOfWebWorkers: n4 };
}, this.send = function(e5, r5) {
return t4.sendToWorker({ payload: e5 }, r5);
}, this.sendToWorker = function(e5, r5) {
var n4, o3, a2 = e5.payload, i3 = e5.method, c3 = new v.EasyWebWorkerMessage(), l2 = c3.messageId, s3 = c3.decoupledPromise, u3 = t4.getWorkerFromPool();
s3.promise.cancel = function(e6) {
s3.promise.cancel = s3._cancel;
var n5 = { messageId: l2, __is_easy_web_worker_message__: !0, method: i3, cancelation: { reason: e6 } };
return t4.workers.length ? (u3.postMessage(n5, r5), s3.promise) : s3.cancel(e6);
}, t4.config.keepAlive || (o3 = (n4 = s3.promise) === null || n4 === void 0 ? void 0 : n4.finally) === null || o3 === void 0 || o3.call(n4, function() {
setTimeout(function() {
t4.messagesQueue.size || (t4.workers.forEach(function(e6) {
return e6.terminate();
}), t4.workers = []);
}, t4.config.terminationDelay);
}), t4.addMessageToQueue(c3);
var f2 = { messageId: l2, __is_easy_web_worker_message__: !0, method: i3, execution: { payload: a2 } };
return u3.postMessage(f2, r5), s3.promise;
}, this.override = function() {
for (var e5 = arguments.length, r5 = new Array(e5), n4 = 0; n4 < e5; n4++) r5[n4] = arguments[n4];
var o3 = r5[0], a2 = r5[1], i3 = r5[2];
return new p.CancelablePromise(function(e6, r6, n5) {
return f(t4, [e6, r6, n5], void 0, function(e7, r7, t5) {
var n6 = this, c3 = t5.onCancel;
return l().mark(function r8() {
var t6, s3;
return l().wrap(function(r9) {
for (; ; ) switch (r9.prev = r9.next) {
case 0:
return t6 = n6.cancelAll(a2, i3), s3 = c3(function() {
t6.cancel();
}), r9.next = 4, t6;
case 4:
s3(), e7(n6.send.apply(n6, [o3]));
case 6:
case "end":
return r9.stop();
}
}, r8);
})();
});
});
}, this.overrideAfterCurrent = function() {
for (var e5 = arguments.length, r5 = new Array(e5), n4 = 0; n4 < e5; n4++) r5[n4] = arguments[n4];
var o3 = r5[0], i3 = r5[1], c3 = r5[2];
return new p.CancelablePromise(function(e6, r6, n5) {
return f(t4, [e6, r6, n5], void 0, function(e7, r7, t5) {
var n6 = this, s3 = t5.onCancel, u3 = t5.reportProgress;
return l().mark(function r8() {
var t6, f2, p2, d3, v2, h2;
return l().wrap(function(r9) {
for (; ; ) switch (r9.prev = r9.next) {
case 0:
if (!n6.messagesQueue.size) {
r9.next = 10;
break;
}
return t6 = a(n6.messagesQueue, 1), f2 = t6[0], p2 = a(f2, 2), d3 = p2[1], n6.RemoveMessageFromQueue(d3.messageId), v2 = n6.cancelAll(i3, c3).onProgress(u3), h2 = s3(function() {
v2.cancel();
}), n6.addMessageToQueue(d3), r9.next = 9, v2;
case 9:
h2();
case 10:
e7(n6.send.apply(n6, [o3]));
case 11:
case "end":
return r9.stop();
}
}, r8);
})();
});
});
}, this.workerUrl = typeof r4 == "string" || r4 instanceof URL ? r4 : null;
var o2 = n3 != null ? n3 : {}, i2 = o2.scripts, c2 = i2 === void 0 ? [] : i2, s2 = o2.name, u2 = o2.onWorkerError, d2 = u2 === void 0 ? null : u2, y2 = o2.maxWorkers, b2 = y2 === void 0 ? 1 : y2, m = o2.terminationDelay, g = m === void 0 ? 1e3 : m, w = o2.primitiveParameters, k = o2.workerOptions, P = k === void 0 ? {} : k, C = typeof (n3 == null ? void 0 : n3.warmUpWorkers) == "boolean" ? n3.warmUpWorkers : b2 === 1, j = typeof (n3 == null ? void 0 : n3.keepAlive) == "boolean" ? n3.keepAlive : C;
this.config = { scripts: c2 != null ? c2 : [], name: s2, maxWorkers: b2, keepAlive: j, warmUpWorkers: C, workerOptions: Object.assign(Object.assign({}, P != null ? P : {}), { name: P.name || (0, h.uniqueId)("wk:") }), onWorkerError: d2, terminationDelay: g, primitiveParameters: w }, this.workerOptions = this.config.workerOptions, this.name = this.workerOptions.name, this.scripts = c2, this.onWorkerError = d2, this.maxWorkers = b2, this.terminationDelay = g, this.warmUpWorkers = C, this.primitiveParameters = w != null ? w : [], j = !!this.computeWorkerBaseSource().isArrayOfWebWorkers || j, this.keepAlive = j, this.config.keepAlive = j, this.warmUp();
}, r3 = [{ key: "worker", get: function() {
return this.workers.length > 1 ? null : this.workers[0];
} }, { key: "isExternalWorkerFile", get: function() {
return typeof this.source == "string" || this.source instanceof URL;
} }, { key: "RemoveMessageFromQueue", value: function(e4) {
this.messagesQueue.delete(e4);
} }, { key: "executeMessageCallback", value: function(e4) {
var r4, t4 = (r4 = this.messagesQueue.get(e4.data.messageId)) !== null && r4 !== void 0 ? r4 : null;
if (t4) {
var n3 = e4.data.progress;
if (this.workers.length) {
var a2 = t4.decoupledPromise;
if (n3) {
var i2 = n3.percentage, c2 = n3.payload;
a2.reportProgress(i2, c2);
} else {
this.RemoveMessageFromQueue(t4.messageId);
var l2 = e4.data.worker_cancelation;
if (l2) {
var s2 = l2.reason;
a2._cancel(s2);
} else {
var u2 = e4.data.rejected;
if (u2) {
var f2 = u2.reason;
a2.reject(f2);
} else {
var p2 = e4.data.resolved.payload;
a2.resolve.apply(a2, o(p2 != null ? p2 : []));
}
}
}
} else this.RemoveMessageFromQueue(t4.messageId);
}
} }, { key: "getWorkerUrl", value: function() {
if (this.isExternalWorkerFile) return this.source;
var e4 = this.config, r4 = e4.primitiveParameters, t4 = e4.scripts;
return (0, y.createBlobWorker)(this.source, t4, { primitiveParameters: r4 });
} }, { key: "cancelAll", value: function(e4) {
var r4 = this, t4 = (arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}).force, n3 = t4 !== void 0 && t4;
return new p.CancelablePromise(function(t5, o2, a2) {
return f(r4, [t5, o2, a2], void 0, function(r5, t6, o3) {
var a3 = this, i2 = o3.onCancel, c2 = o3.reportProgress;
return l().mark(function t7() {
var o4, s2, u2, f2, p2, v2;
return l().wrap(function(t8) {
for (; ; ) switch (t8.prev = t8.next) {
case 0:
if (u2 = Array.from((s2 = (o4 = a3.messagesQueue) === null || o4 === void 0 ? void 0 : o4.values()) !== null && s2 !== void 0 ? s2 : []), f2 = u2.length, p2 = 100 / f2, !n3) {
t8.next = 5;
break;
}
return t8.abrupt("return", r5(a3.reboot(e4)));
case 5:
v2 = (0, d.groupAsCancelablePromise)(u2.map(function(r6) {
return r6.decoupledPromise.promise.cancel(e4).catch(function(e5) {
return c2(p2, e5), e5;
});
})), i2(function() {
v2.cancel();
}), r5(v2);
case 8:
case "end":
return t8.stop();
}
}, t7);
})();
});
});
} }, { key: "addMessageToQueue", value: function(e4) {
this.messagesQueue.set(e4.messageId, e4);
} }, { key: "sendToMethod", value: function(e4, r4, t4) {
return this.sendToWorker({ method: e4, payload: r4 }, t4);
} }, { key: "reboot", value: function() {
var e4 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "Worker was rebooted";
if (!this.workerUrl) throw new Error("You can not reboot a worker that was created from a Worker Instance");
this.workers.forEach(function(e5) {
return e5.terminate();
}), this.workers = [];
var r4 = this.cancelAll(e4);
return this.warmUp(), r4;
} }, { key: "dispose", value: function() {
return f(this, void 0, void 0, l().mark(function e4() {
return l().wrap(function(e5) {
for (; ; ) switch (e5.prev = e5.next) {
case 0:
return e5.next = 2, this.cancelAll(null);
case 2:
this.workerUrl && (window.URL || window.webkitURL).revokeObjectURL(typeof this.workerUrl == "string" ? this.workerUrl : this.workerUrl.href), this.workers.forEach(function(e6) {
return e6.terminate();
}), this.workers = [];
case 5:
case "end":
return e5.stop();
}
}, e4, this);
}));
} }], r3 && s(e3.prototype, r3), t3 && s(e3, t3), Object.defineProperty(e3, "prototype", { writable: !1 }), e3;
var e3, r3, t3;
}();
r2.EasyWebWorker = b;
}, 655: (e2, r2, t2) => {
"use strict";
function n2(e3) {
return n2 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e4) {
return typeof e4;
} : function(e4) {
return e4 && typeof Symbol == "function" && e4.constructor === Symbol && e4 !== Symbol.prototype ? "symbol" : typeof e4;
}, n2(e3);
}
function o(e3, r3) {
for (var t3 = 0; t3 < r3.length; t3++) {
var n3 = r3[t3];
n3.enumerable = n3.enumerable || !1, n3.configurable = !0, "value" in n3 && (n3.writable = !0), Object.defineProperty(e3, i(n3.key), n3);
}
}
function a(e3, r3, t3) {
return r3 && o(e3.prototype, r3), t3 && o(e3, t3), Object.defineProperty(e3, "prototype", { writable: !1 }), e3;
}
function i(e3) {
var r3 = function(e4, r4) {
if (n2(e4) != "object" || !e4) return e4;
var t3 = e4[Symbol.toPrimitive];
if (t3 !== void 0) {
var o2 = t3.call(e4, r4 || "default");
if (n2(o2) != "object") return o2;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return (r4 === "string" ? String : Number)(e4);
}(e3, "string");
return n2(r3) == "symbol" ? r3 : r3 + "";
}
Object.defineProperty(r2, "__esModule", { value: !0 }), r2.EasyWebWorkerMessage = void 0;
var c = t2(816), l = t2(416), s = a(function e3() {
(function(e4, r3) {
if (!(e4 instanceof r3)) throw new TypeError("Cannot call a class as a function");
})(this, e3), this.messageId = (0, l.uniqueId)("ms:"), this.decoupledPromise = (0, c.createDecoupledPromise)(), this.decoupledPromise._cancel = this.decoupledPromise.promise.cancel;
});
r2.EasyWebWorkerMessage = s;
}, 600: (e2, r2) => {
"use strict";
function t2(e3) {
return function(e4) {
if (Array.isArray(e4)) return n2(e4);
}(e3) || function(e4) {
if (typeof Symbol != "undefined" && e4[Symbol.iterator] != null || e4["@@iterator"] != null) return Array.from(e4);
}(e3) || function(e4, r3) {
if (e4) {
if (typeof e4 == "string") return n2(e4, r3);
var t3 = {}.toString.call(e4).slice(8, -1);
return t3 === "Object" && e4.constructor && (t3 = e4.constructor.name), t3 === "Map" || t3 === "Set" ? Array.from(e4) : t3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t3) ? n2(e4, r3) : void 0;
}
}(e3) || function() {
throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);
}();
}
function n2(e3, r3) {
(r3 == null || r3 > e3.length) && (r3 = e3.length);
for (var t3 = 0, n3 = Array(r3); t3 < r3; t3++) n3[t3] = e3[t3];
return n3;
}
Object.defineProperty(r2, "__esModule", { value: !0 }), r2.StaticEasyWebWorker = void 0, r2.StaticEasyWebWorker = function(e3) {
var r3 = function() {
var e4 = /* @__PURE__ */ new Map(), r4 = /* @__PURE__ */ new Map([["", function() {
throw "you didn't defined a message-callback, please assign a callback by calling easyWorker.onMessage";
}]]);
return self.onmessage = function(t3) {
var n4, o2, a2, i, c = (n4 = t3 == null ? void 0 : t3.data) === null || n4 === void 0 ? void 0 : n4.messageId, l = (a2 = (o2 = t3 == null ? void 0 : t3.data) === null || o2 === void 0 ? void 0 : o2.__is_easy_web_worker_message__) !== null && a2 !== void 0 && a2;
if (c && l) try {
var s = t3.data.cancelation;
if (s) {
var u = s.reason;
return void e4.get(c).cancel(u);
}
var f = t3.data, p = f.method, d = function(r5) {
var t4 = r5.messageId, n5 = r5.payload, o3 = r5.method, a3 = "pending", i2 = /* @__PURE__ */ new Map(), c2 = function(r6, n6) {
var c3, l3 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [], s2 = a3, u2 = r6 === "progress" ? "pending" : r6;
if (e4.has(t4)) {
var f2 = { resolved: "onResolve", rejected: "onReject", canceled: "onCancel", worker_cancelation: "onCancel", pending: "onProgress" }[u2], p2 = i2.get(f2), d2 = !n6.progress;
try {
p2 == null || p2.forEach(function(e5) {
return e5(n6, l3);
}), d2 && ((c3 = i2.get("onFinalize")) === null || c3 === void 0 || c3.forEach(function(e5) {
return e5(n6, l3);
}));
} catch (o4) {
throw e4.delete(t4), { message: "Error while processing message id: " + t4, error: o4, messageData: n6, messageType: r6, when: f2 };
} finally {
d2 && e4.delete(t4);
}
self.postMessage(Object.assign({ messageId: t4 }, n6), l3), a3 = u2;
} else {
var v = "%c#" + t4 + " Message Not Found: %cThis means that the message was already resolved | rejected | canceled. To avoid this error, please make sure that you are not resolving | rejecting | canceling the same message twice. Also make sure that you are not reporting progress after the message was processed. Remember each message can handle his one cancelation by adding a handler with the %cmessage.onCancel%c method. To now more about this method, please check the documentation at: %chttps://www.npmjs.com/package/easy-web-worker#ieasywebworkermessageipayload--null-iresult--void %cTrying to process message:";
console.error(v, "color: darkorange; font-size: 12px; font-weight: bold;", "font-weight: normal;", "font-weight: bold;", "font-weight: normal;", "color: lightblue; font-size: 10px; font-weight: bold;", "font-weight: bold; color: darkorange;", { messageId: t4, status: { current: s2, target: u2 }, method: o3, action: n6 });
}
}, l2 = function(e5) {
return function(r6) {
i2.has(e5) || i2.set(e5, /* @__PURE__ */ new Set());
var t5 = i2.get(e5);
return t5.add(r6), function() {
return t5.delete(r6);
};
};
};
return { messageId: t4, method: o3, payload: n5, getStatus: function() {
return a3;
}, isPending: function() {
return a3 === "pending";
}, resolve: function(e5) {
return c2("resolved", { resolved: { payload: e5 === void 0 ? [] : [e5] } }, arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : []);
}, reject: function(e5) {
c2("rejected", { rejected: { reason: e5 } }, arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : []);
}, cancel: function(e5) {
return c2("worker_cancelation", { worker_cancelation: { reason: e5 } }, arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : []);
}, reportProgress: function(e5, r6) {
c2("progress", { progress: { percentage: e5, payload: r6 } }, arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : []);
}, onResolve: l2("onResolve"), onReject: l2("onReject"), onCancel: l2("onCancel"), onProgress: l2("onProgress"), onFinalize: l2("onFinalize") };
}({ method: p, messageId: c, payload: f.execution.payload });
e4.set(c, d), r4.get(p || "")(d, t3);
} catch {
throw e4.delete((i = t3.data) === null || i === void 0 ? void 0 : i.messageId), { message: "Error while processing message id: " + c, event: t3 };
}
}, { onMessage: function() {
for (var e5 = arguments.length, t3 = new Array(e5), n4 = 0; n4 < e5; n4++) t3[n4] = arguments[n4];
var o2 = t3[0], a2 = t3[1];
if (typeof o2 == "string") {
var i = o2, c = a2;
r4.set(i, c);
} else {
var l = o2;
r4.set("", l);
}
}, close: function() {
t2(e4.values()).forEach(function(e5) {
return e5.reject(new Error("worker closed"));
}), self.close();
}, importScripts: function() {
var e5;
(e5 = self).importScripts.apply(e5, arguments);
} };
}(), n3 = r3.close, o = r3.onMessage, a = r3.importScripts;
this.close = n3, this.onMessage = o, this.importScripts = a, e3 && o(e3);
};
}, 111: (e2, r2, t2) => {
"use strict";
Object.defineProperty(r2, "__esModule", { value: !0 }), r2.createBlobWorker = void 0;
var n2 = t2(216);
r2.createBlobWorker = function(e3) {
var r3 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [], t3 = (arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}).primitiveParameters, o = t3 === void 0 ? [] : t3, a = Array.isArray(e3) ? e3 : [e3], i = "".concat(function() {
var e4 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
return e4.length ? 'self.importScripts(["'.concat(e4.join('","'), '"]);') : "";
}(r3), "self.primitiveParameters=JSON.parse(`").concat(JSON.stringify(o != null ? o : []), "`);let ew$=").concat((0, n2.getWorkerTemplate)(), ";let cn$=self;").concat(a.map(function(e4) {
return `
(`.concat(e4 == null ? void 0 : e4.toString().trim(), ")(ew$,cn$);");
}).join(""));
return (window.URL || window.webkitURL).createObjectURL(new Blob([i], { type: "application/javascript" }));
};
}, 134: (e2, r2, t2) => {
"use strict";
Object.defineProperty(r2, "__esModule", { value: !0 }), r2.createEasyWebWorker = void 0;
var n2 = t2(382);
r2.createEasyWebWorker = function(e3) {
var r3 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
return new n2.EasyWebWorker(e3, r3);
};
}, 952: (e2, r2, t2) => {
"use strict";
Object.defineProperty(r2, "__esModule", { value: !0 }), r2.createStaticEasyWebWorker = void 0;
var n2 = t2(600);
r2.createStaticEasyWebWorker = function(e3) {
return new n2.StaticEasyWebWorker(e3);
};
}, 216: (e2, r2) => {
"use strict";
Object.defineProperty(r2, "__esModule", { value: !0 }), r2.getWorkerTemplate = void 0, r2.getWorkerTemplate = function() {
return `(()=>{let e=new Map,o=new Map([["",()=>{throw"you didn't defined a message-callback, please assign a callback by calling easyWorker.onMessage"},],]),t=({messageId:o,payload:t,method:a})=>{let s="pending",n=new Map,r=(t,r,l=[])=>{var i;let c=s,d="progress"===t?"pending":t;if(!e.has(o)){let g="%c#"+o+" Message Not Found: %cThis means that the message was already resolved | rejected | canceled. To avoid this error, please make sure that you are not resolving | rejecting | canceling the same message twice. Also make sure that you are not reporting progress after the message was processed. Remember each message can handle his one cancelation by adding a handler with the %cmessage.onCancel%c method. To now more about this method, please check the documentation at: %chttps://www.npmjs.com/package/easy-web-worker#ieasywebworkermessageipayload--null-iresult--void %cTrying to process message:";console.error(g,"color: darkorange; font-size: 12px; font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;","color: lightblue; font-size: 10px; font-weight: bold;","font-weight: bold; color: darkorange;",{messageId:o,status:{current:c,target:d},method:a,action:r});return}let h={resolved:"onResolve",rejected:"onReject",canceled:"onCancel",worker_cancelation:"onCancel",pending:"onProgress"}[d],w=n.get(h),m=!r.progress;try{null==w||w.forEach(e=>e(r,l)),m&&(null===(i=n.get("onFinalize"))||void 0===i||i.forEach(e=>e(r,l)))}catch(u){throw e.delete(o),{message:"Error while processing message id: "+o,error:u,messageData:r,messageType:t,when:h}}finally{m&&e.delete(o)}self.postMessage(Object.assign({messageId:o},r),l),s=d},l=(e,o=[])=>r("resolved",{resolved:{payload:void 0===e?[]:[e]}},o),i=(e,o=[])=>{r("rejected",{rejected:{reason:e}},o)},c=(e,o=[])=>r("worker_cancelation",{worker_cancelation:{reason:e}},o),d=(e,o,t=[])=>{r("progress",{progress:{percentage:e,payload:o}},t)},g=e=>o=>{n.has(e)||n.set(e,new Set);let t=n.get(e);return t.add(o),()=>t.delete(o)};return{messageId:o,method:a,payload:t,getStatus:()=>s,isPending:()=>"pending"===s,resolve:l,reject:i,cancel:c,reportProgress:d,onResolve:g("onResolve"),onReject:g("onReject"),onCancel:g("onCancel"),onProgress:g("onProgress"),onFinalize:g("onFinalize")}},a=(...e)=>{let[t,a]=e,s="string"==typeof t;if(s){let n=t,r=a;o.set(n,r);return}let l=t;o.set("",l)},s=()=>{let o=[...e.values()];o.forEach(e=>e.reject(Error("worker closed"))),self.close()};self.onmessage=a=>{var s,n,r,l;let i=null===(s=null==a?void 0:a.data)||void 0===s?void 0:s.messageId,c=null!==(r=null===(n=null==a?void 0:a.data)||void 0===n?void 0:n.__is_easy_web_worker_message__)&&void 0!==r&&r,d=i&&c;if(d)try{let{data:g}=a,{cancelation:h}=g;if(h){let{reason:w}=h,m=e.get(i);m.cancel(w);return}let{method:u,execution:p}=a.data,{payload:v}=p,f=t({method:u,messageId:i,payload:v});e.set(i,f);let y=o.get(u||"");y(f,a)}catch(k){throw e.delete(null===(l=a.data)||void 0===l?void 0:l.messageId),{message:"Error while processing message id: "+i,event:a}}};let n=(...e)=>{self.importScripts(...e)};return{onMessage:a,close:s,importScripts:n}})();`;
};
}, 416: (e2, r2) => {
"use strict";
var t2;
Object.defineProperty(r2, "__esModule", { value: !0 }), r2.uniqueId = void 0, r2.uniqueId = (t2 = 0, function() {
var e3 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "";
return t2 === Number.MAX_SAFE_INTEGER && (t2 = 0), e3 + Date.now().toString(36) + (t2++).toString(36);
});
}, 911: function(e2) {
var r2;
r2 = () => (() => {
"use strict";
var e3 = { 836: (e4, r4) => {
Object.defineProperty(r4, "__esModule", { value: !0 }), r4.isCancelableAbortSignal = void 0, r4.isCancelableAbortSignal = function(e5) {
return !!(e5 != null && e5.__is_cancelable_abort_signal);
};
}, 216: (e4, r4) => {
Object.defineProperty(r4, "__esModule", { value: !0 }), r4.promise_identifier = r4.isCancelablePromise = void 0;
var t3 = Symbol("promise_identifier");
r4.promise_identifier = t3, r4.isCancelablePromise = function(e5) {
return !!(e5 != null && e5[t3]);
};
}, 790: (e4, r4) => {
Object.defineProperty(r4, "__esModule", { value: !0 }), r4.isPromise = void 0, r4.isPromise = function(e5) {
return Promise.resolve(e5) === e5;
};
} }, r3 = {};
function t2(n3) {
var o = r3[n3];
if (o !== void 0) return o.exports;
var a = r3[n3] = { exports: {} };
return e3[n3](a, a.exports, t2), a.exports;
}
var n2 = {};
return (() => {
var e4 = n2;
function r4(e5) {
return r4 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e6) {
return typeof e6;
} : function(e6) {
return e6 && typeof Symbol == "function" && e6.constructor === Symbol && e6 !== Symbol.prototype ? "symbol" : typeof e6;
}, r4(e5);
}
Object.defineProperty(e4, "__esModule", { value: !0 }), e4.toCancelablePromise = e4.CancelablePromise = void 0;
var o, a = t2(836), i = t2(216), c = t2(790);
function l(e5, t3) {
for (var n3 = 0; n3 < t3.length; n3++) {
var o2 = t3[n3];
o2.enumerable = o2.enumerable || !1, o2.configurable = !0, "value" in o2 && (o2.writable = !0), Object.defineProperty(e5, (a2 = function(e6) {
if (r4(e6) !== "object" || e6 === null) return e6;
var t4 = e6[Symbol.toPrimitive];
if (t4 !== void 0) {
var n4 = t4.call(e6, "string");
if (r4(n4) !== "object") return n4;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return String(e6);
}(o2.key), r4(a2) === "symbol" ? a2 : String(a2)), o2);
}
var a2;
}
function s(e5) {
var t3 = v();
return function() {
var n3, o2 = y(e5);
if (t3) {
var a2 = y(this).constructor;
n3 = Reflect.construct(o2, arguments, a2);
} else n3 = o2.apply(this, arguments);
return function(e6, t4) {
if (t4 && (r4(t4) === "object" || typeof t4 == "function")) return t4;
if (t4 !== void 0) throw new TypeError("Derived constructors may only return object or undefined");
return u(e6);
}(this, n3);
};
}
function u(e5) {
if (e5 === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return e5;
}
function f() {
return f = typeof Reflect != "undefined" && Reflect.get ? Reflect.get.bind() : function(e5, r5, t3) {
var n3 = function(e6, r6) {
for (; !Object.prototype.hasOwnProperty.call(e6, r6) && (e6 = y(e6)) !== null; ) ;
return e6;
}(e5, r5);
if (n3) {
var o2 = Object.getOwnPropertyDescriptor(n3, r5);
return o2.get ? o2.get.call(arguments.length < 3 ? e5 : t3) : o2.value;
}
}, f.apply(this, arguments);
}
function p(e5) {
var r5 = typeof Map == "function" ? /* @__PURE__ */ new Map() : void 0;
return p = function(e6) {
if (e6 === null || (t3 = e6, Function.toString.call(t3).indexOf("[native code]") === -1)) return e6;
var t3;
if (typeof e6 != "function") throw new TypeError("Super expression must either be null or a function");
if (r5 !== void 0) {
if (r5.has(e6)) return r5.get(e6);
r5.set(e6, n3);
}
function n3() {
return d(e6, arguments, y(this).constructor);
}
return n3.prototype = Object.create(e6.prototype, { constructor: { value: n3, enumerable: !1, writable: !0, configurable: !0 } }), h(n3, e6);
}, p(e5);
}
function d(e5, r5, t3) {
return d = v() ? Reflect.construct.bind() : function(e6, r6, t4) {
var n3 = [null];
n3.push.apply(n3, r6);
var o2 = new (Function.bind.apply(e6, n3))();
return t4 && h(o2, t4.prototype), o2;
}, d.apply(null, arguments);
}
function v() {
if (typeof Reflect == "undefined" || !Reflect.construct || Reflect.construct.sham) return !1;
if (typeof Proxy == "function") return !0;
try {
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {
})), !0;
} catch {
return !1;
}
}
function h(e5, r5) {
return h = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(e6, r6) {
return e6.__proto__ = r6, e6;
}, h(e5, r5);
}
function y(e5) {
return y = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e6) {
return e6.__proto__ || Object.getPrototypeOf(e6);
}, y(e5);
}
var b = function(e5) {
(function(e6, r6) {
if (typeof r6 != "function" && r6 !== null) throw new TypeError("Super expression must either be null or a function");
e6.prototype = Object.create(r6 && r6.prototype, { constructor: { value: e6, writable: !0, configurable: !0 } }), Object.defineProperty(e6, "prototype", { writable: !1 }), r6 && h(e6, r6);
})(i2, e5);
var r5, t3, n3 = s(i2);
function i2(e6) {
var r6, t4, c2, l2, s2, p2;
return function(e7, r7) {
if (!(e7 instanceof r7)) throw new TypeError("Cannot call a class as a function");
}(this, i2), (l2 = n3.call(this, function(e7, r7) {
s2 = e7, p2 = r7;
}))[o] = !0, l2.status = "pending", l2.cancelCallbacks = /* @__PURE__ */ new Set(), l2.ownCancelCallbacks = /* @__PURE__ */ new Set(), l2.onProgressCallbacks = /* @__PURE__ */ new Set(), l2.disposeCallbacks = function() {
l2.cancelCallbacks = /* @__PURE__ */ new Set(), l2.ownCancelCallbacks = /* @__PURE__ */ new Set(), l2.onProgressCallbacks = /* @__PURE__ */ new Set();
}, l2.subscribeToOwnCancelEvent = function(e7) {
return l2.ownCancelCallbacks.add(e7), function() {
l2.ownCancelCallbacks.delete(e7);
};
}, l2.cancel = function(e7) {
if (l2.status !== "pending") return u(l2);
l2.status = "canceled";
var r7 = e7 === void 0 ? new Error("Promise canceled") : e7;
return l2.ownCancelCallbacks.forEach(function(e8) {
return e8(r7);
}), l2.cancelCallbacks.forEach(function(e8) {
return e8(r7);
}), l2._reject(r7), l2.disposeCallbacks(), u(l2);
}, l2.onCancel = function(e7) {
var r7 = (arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}).signal;
return l2.cancelCallbacks.add(e7), (0, a.isCancelableAbortSignal)(r7) ? r7.subscribe(function() {
l2.cancelCallbacks.delete(e7);
}) : r7 == null || r7.addEventListener("abort", function() {
l2.cancelCallbacks.delete(e7);
}), u(l2);
}, l2.onProgress = function(e7) {
var r7 = (arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}).signal;
return l2.onProgressCallbacks.add(e7), (0, a.isCancelableAbortSignal)(r7) ? r7.subscribe(function() {
l2.onProgressCallbacks.delete(e7);
}) : r7 == null || r7.addEventListener("abort", function() {
l2.onProgressCallbacks.delete(e7);
}), u(l2);
}, l2.reportProgress = function(e7, r7) {
return l2.onProgressCallbacks.forEach(function(t5) {
return t5(e7, r7);
}), u(l2);
}, l2.createChildPromise = function() {
var e7, r7, t5 = new i2(function(t6, n4, o2) {
e7 = t6, r7 = n4;
});
return t5.onProgressCallbacks = l2.onProgressCallbacks, t5.onCancel(function(e8) {
l2.cancel(e8);
}), { promise: t5, resolve: e7, reject: r7 };
}, l2._resolve = s2, l2._reject = p2, e6(function(e7) {
l2.status = "resolved", l2.disposeCallbacks(), l2._resolve(e7);
}, function(e7) {
l2.status = "rejected", l2.disposeCallbacks(), l2._reject(e7);
}, { cancel: function(e7) {
return l2.cancel(e7);
}, onCancel: function(e7) {
return l2.subscribeToOwnCancelEvent(e7);
}, onProgress: function(e7) {
return l2.onProgress(e7), function() {
l2.onProgressCallbacks.delete(e7);
};
}, reportProgress: function(e7, r7) {
l2.reportProgress(e7, r7);
} }), l2.then = function(e7, t5) {
var n4 = l2.createChildPromise(), o2 = n4.promise, a2 = n4.resolve, c3 = n4.reject;
return f((r6 = u(l2), y(i2.prototype)), "then", r6).call(r6, e7, t5).then(a2, c3), o2;
}, l2.catch = function(e7) {
var r7 = l2.createChildPromise(), n4 = r7.promise, o2 = r7.resolve, a2 = r7.reject;
return f((t4 = u(l2), y(i2.prototype)), "catch", t4).call(t4, e7).then(o2, a2), n4;
}, l2.finally = function(e7) {
var r7 = l2.createChildPromise(), t5 = r7.promise, n4 = r7.resolve, o2 = r7.reject;
return f((c2 = u(l2), y(i2.prototype)), "finally", c2).call(c2, e7).then(n4, o2), t5;
}, l2;
}
return r5 = i2, t3 = [{ key: "resolve", value: function(e6) {
return new i2(function(r6) {
return r6(e6);
});
} }], t3 && l(r5, t3), Object.defineProperty(r5, "prototype", { writable: !1 }), i2;
}(p(Promise));
e4.CancelablePromise = b, o = i.promise_identifier, b.reject = function(e5) {
return new b(function(r5, t3) {
return t3(e5);
});
}, b.canceled = function(e5) {
return new b(function(r5, t3, n3) {
return (0, n3.cancel)(e5);
});
}, b.race = function(e5) {
return new b(function(r5, t3, n3) {
var o2 = n3.onCancel, a2 = n3.cancel;
e5.forEach(function(e6) {
var n4 = m(e6);
o2(function(e7) {
n4.cancel(e7);
}), n4.then(r5, function(e7) {
n4.status !== "canceled" ? t3(e7) : a2(e7);
});
});
});
}, b.all = function(e5) {
return new b(function(r5, t3, n3) {
var o2 = n3.onCancel, a2 = n3.cancel, i2 = /* @__PURE__ */ new Map(), c2 = e5.length, l2 = 0;
e5.forEach(function(e6) {
var n4 = m(e6);
i2.set(n4, null), o2(function(e7) {
n4.cancel(e7);
}), n4.then(function(e7) {
l2++, i2.set(n4, e7), l2 === c2 && r5(Array.from(i2.values()));
}, function(e7) {
n4.status !== "canceled" ? t3(e7) : a2(e7);
});
});
});
}, b.allSettled = function(e5) {
return new b(function(r5, t3, n3) {
var o2 = n3.onCancel, a2 = /* @__PURE__ */ new Map(), i2 = e5.length, c2 = 0;
e5.forEach(function(e6) {
var t4 = m(e6);
a2.set(t4, null), o2(function(e7) {
t4.cancel(e7);
}), t4.then(function(e7) {
a2.set(t4, { status: "fulfilled", value: e7 });
}, function(e7) {
a2.set(t4, { status: t4.status === "canceled" ? "canceled" : "rejected", reason: e7 });
}).finally(function() {
++c2 === i2 && r5(Array.from(a2.values()));
});
});
});
}, b.prototype.constructor = Promise;
var m = function e5(r5) {
if ((0, i.isCancelablePromise)(r5)) return r5;
if (typeof r5 == "function") return e5(r5());
if (!(0, c.isPromise)(r5)) return new b(function(e6) {
return e6(r5);
});
var t3, n3, o2 = new b(function(e6, o3, a2) {
t3 = e6, n3 = o3, r5.then(t3, n3);
});
return o2.onCancel(function(e6) {
n3(e6);
}), o2;
};
e4.toCancelablePromise = m;
})(), n2;
})(), e2.exports = r2();
}, 816: function(e2) {
var r2;
r2 = () => (() => {
"use strict";
var e3 = { 0: (e4, r4, t3) => {
function n3(e5) {
return n3 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e6) {
return typeof e6;
} : function(e6) {
return e6 && typeof Symbol == "function" && e6.constructor === Symbol && e6 !== Symbol.prototype ? "symbol" : typeof e6;
}, n3(e5);
}
Object.defineProperty(r4, "__esModule", { value: !0 }), r4.toCancelablePromise = r4.CancelablePromise = void 0;
var o, a = t3(836), i = t3(216), c = t3(790);
function l(e5, r5) {
for (var t4 = 0; t4 < r5.length; t4++) {
var o2 = r5[t4];
o2.enumerable = o2.enumerable || !1, o2.configurable = !0, "value" in o2 && (o2.writable = !0), Object.defineProperty(e5, (a2 = function(e6) {
if (n3(e6) !== "object" || e6 === null) return e6;
var r6 = e6[Symbol.toPrimitive];
if (r6 !== void 0) {
var t5 = r6.call(e6, "string");
if (n3(t5) !== "object") return t5;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return String(e6);
}(o2.key), n3(a2) === "symbol" ? a2 : String(a2)), o2);
}
var a2;
}
function s(e5) {
var r5 = v();
return function() {
var t4, o2 = y(e5);
if (r5) {
var a2 = y(this).constructor;
t4 = Reflect.construct(o2, arguments, a2);
} else t4 = o2.apply(this, arguments);
return function(e6, r6) {
if (r6 && (n3(r6) === "object" || typeof r6 == "function")) return r6;
if (r6 !== void 0) throw new TypeError("Derived constructors may only return object or undefined");
return u(e6);
}(this, t4);
};
}
function u(e5) {
if (e5 === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return e5;
}
function f() {
return f = typeof Reflect != "undefined" && Reflect.get ? Reflect.get.bind() : function(e5, r5, t4) {
var n4 = function(e6, r6) {
for (; !Object.prototype.hasOwnProperty.call(e6, r6) && (e6 = y(e6)) !== null; ) ;
return e6;
}(e5, r5);
if (n4) {
var o2 = Object.getOwnPropertyDescriptor(n4, r5);
return o2.get ? o2.get.call(arguments.length < 3 ? e5 : t4) : o2.value;
}
}, f.apply(this, arguments);
}
function p(e5) {
var r5 = typeof Map == "function" ? /* @__PURE__ */ new Map() : void 0;
return p = function(e6) {
if (e6 === null || (t4 = e6, Function.toString.call(t4).indexOf("[native code]") === -1)) return e6;
var t4;
if (typeof e6 != "function") throw new TypeError("Super expression must either be null or a function");
if (r5 !== void 0) {
if (r5.has(e6)) return r5.get(e6);
r5.set(e6, n4);
}
function n4() {
return d(e6, arguments, y(this).constructor);
}
return n4.prototype = Object.create(e6.prototype, { constructor: { value: n4, enumerable: !1, writable: !0, configurable: !0 } }), h(n4, e6);
}, p(e5);
}
function d(e5, r5, t4) {
return d = v() ? Reflect.construct.bind() : function(e6, r6, t5) {
var n4 = [null];
n4.push.apply(n4, r6);
var o2 = new (Function.bind.apply(e6, n4))();
return t5 && h(o2, t5.prototype), o2;
}, d.apply(null, arguments);
}
function v() {
if (typeof Reflect == "undefined" || !Reflect.construct || Reflect.construct.sham) return !1;
if (typeof Proxy == "function") return !0;
try {
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {
})), !0;
} catch {
return !1;
}
}
function h(e5, r5) {
return h = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(e6, r6) {
return e6.__proto__ = r6, e6;
}, h(e5, r5);
}
function y(e5) {
return y = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e6) {
return e6.__proto__ || Object.getPrototypeOf(e6);
}, y(e5);
}
var b = function(e5) {
(function(e6, r6) {
if (typeof r6 != "function" && r6 !== null) throw new TypeError("Super expression must either be null or a function");
e6.prototype = Object.create(r6 && r6.prototype, { constructor: { value: e6, writable: !0, configurable: !0 } }), Object.defineProperty(e6, "prototype", { writable: !1 }), r6 && h(e6, r6);
})(i2, e5);
var r5, t4, n4 = s(i2);
function i2(e6) {
var r6, t5, c2, l2, s2, p2;
return function(e7, r7) {
if (!(e7 instanceof r7)) throw new TypeError("Cannot call a class as a function");
}(this, i2), (l2 = n4.call(this, function(e7, r7) {
s2 = e7, p2 = r7;
}))[o] = !0, l2.status = "pending", l2.cancelCallbacks = /* @__PURE__ */ new Set(), l2.ownCancelCallbacks = /* @__PURE__ */ new Set(), l2.onProgressCallbacks = /* @__PURE__ */ new Set(), l2.disposeCallbacks = function() {
l2.cancelCallbacks = /* @__PURE__ */ new Set(), l2.ownCancelCallbacks = /* @__PURE__ */ new Set(), l2.onProgressCallbacks = /* @__PURE__ */ new Set();
}, l2.subscribeToOwnCancelEvent = function(e7) {
return l2.ownCancelCallbacks.add(e7), function() {
l2.ownCancelCallbacks.delete(e7);
};
}, l2.cancel = function(e7) {
if (l2.status !== "pending") return u(l2);
l2.status = "canceled";
var r7 = e7 === void 0 ? new Error("Promise canceled") : e7;
return l2.ownCancelCallbacks.forEach(function(e8) {
return e8(r7);
}), l2.cancelCallbacks.forEach(function(e8) {
return e8(r7);
}), l2._reject(r7), l2.disposeCallbacks(), u(l2);
}, l2.onCancel = function(e7) {
var r7 = (arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}).signal;
return l2.cancelCallbacks.add(e7), (0, a.isCancelableAbortSignal)(r7) ? r7.subscribe(function() {
l2.cancelCallbacks.delete(e7);
}) : r7 == null || r7.addEventListener("abort", function() {
l2.cancelCallbacks.delete(e7);
}), u(l2);
}, l2.onProgress = function(e7) {
var r7 = (arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}).signal;
return l2.onProgressCallbacks.add(e7), (0, a.isCancelableAbortSignal)(r7) ? r7.subscribe(function() {
l2.onProgressCallbacks.delete(e7);
}) : r7 == null || r7.addEventListener("abort", function() {
l2.onProgressCallbacks.delete(e7);
}), u(l2);
}, l2.reportProgress = function(e7, r7) {
return l2.onProgressCallbacks.forEach(function(t6) {
return t6(e7, r7);
}), u(l2);
}, l2.createChildPromise = function() {
var e7, r7, t6 = new i2(function(t7, n5, o2) {
e7 = t7, r7 = n5;
});
return t6.onProgressCallbacks = l2.onProgressCallbacks, t6.onCancel(function(e8) {
l2.cancel(e8);
}), { promise: t6, resolve: e7, reject: r7 };
}, l2._resolve = s2, l2._reject = p2, e6(function(e7) {
l2.status = "resolved", l2.disposeCallbacks(), l2._resolve(e7);
}, function(e7) {
l2.status = "rejected", l2.disposeCallbacks(), l2._reject(e7);
}, { cancel: function(e7) {
return l2.cancel(e7);
}, onCancel: function(e7) {
return l2.subscribeToOwnCancelEvent(e7);
}, onProgress: function(e7) {
return l2.onProgress(e7), function() {
l2.onProgressCallbacks.delete(e7);
};
}, reportProgress: function(e7, r7) {
l2.reportProgress(e7, r7);
} }), l2.then = function(e7, t6) {
var n5 = l2.createChildPromise(), o2 = n5.promise, a2 = n5.resolve, c3 = n5.reject;
return f((r6 = u(l2), y(i2.prototype)), "then", r6).call(r6, e7, t6).then(a2, c3), o2;
}, l2.catch = function(e7) {
var r7 = l2.createChildPromise(), n5 = r7.promise, o2 = r7.resolve, a2 = r7.reject;
return f((t5 = u(l2), y(i2.prototype)), "catch", t5).call(t5, e7).then(o2, a2), n5;
}, l2.finally = function(e7) {
var r7 = l2.createChildPromise(), t6 = r7.promise, n5 = r7.resolve, o2 = r7.reject;
return f((c2 = u(l2), y(i2.prototype)), "finally", c2).call(c2, e7).then(n5, o2), t6;
}, l2;
}
return r5 = i2, t4 = [{ key: "resolve", value: function(e6) {
return new i2(function(r6) {
return r6(e6);
});
} }], t4 && l(r5, t4), Object.defineProperty(r5, "prototype", { writable: !1 }), i2;
}(p(Promise));
r4.CancelablePromise = b, o = i.promise_identifier, b.reject = function(e5) {
return new b(function(r5, t4) {
return t4(e5);
});
}, b.canceled = function(e5) {
return new b(function(r5, t4, n4) {
return (0, n4.cancel)(e5);
});
}, b.race = function(e5) {
return new b(function(r5, t4, n4) {
var o2 = n4.onCancel, a2 = n4.cancel;
e5.forEach(function(e6) {
var n5 = m(e6);
o2(function(e7) {
n5.cancel(e7);
}), n5.then(r5, function(e7) {
n5.status !== "canceled" ? t4(e7) : a2(e7);
});
});
});
}, b.all = function(e5) {
return new b(function(r5, t4, n4) {
var o2 = n4.onCancel, a2 = n4.cancel, i2 = /* @__PURE__ */ new Map(), c2 = e5.length, l2 = 0;
e5.forEach(function(e6) {
var n5 = m(e6);
i2.set(n5, null), o2(function(e7) {
n5.cancel(e7);
}), n5.then(function(e7) {
l2++, i2.set(n5, e7), l2 === c2 && r5(Array.from(i2.values()));
}, function(e7) {
n5.status !== "canceled" ? t4(e7) : a2(e7);
});
});
});
}, b.allSettled = function(e5) {
return new b(function(r5, t4, n4) {
var o2 = n4.onCancel, a2 = /* @__PURE__ */ new Map(), i2 = e5.length, c2 = 0;
e5.forEach(function(e6) {
var t5 = m(e6);
a2.set(t5, null), o2(function(e7) {
t5.cancel(e7);
}), t5.then(function(e7) {
a2.set(t5, { status: "fulfilled", value: e7 });
}, function(e7) {
a2.set(t5, { status: t5.status === "canceled" ? "canceled" : "rejected", reason: e7 });
}).finally(function() {
++c2 === i2 && r5(Array.from(a2.values()));
});
});
});
}, b.prototype.constructor = Promise;
var m = function e5(r5) {
if ((0, i.isCancelablePromise)(r5)) return r5;
if (typeof r5 == "function") return e5(r5());
if (!(0, c.isPromise)(r5)) return new b(function(e6) {
return e6(r5);
});
var t4, n4, o2 = new b(function(e6, o3, a2) {
t4 = e6, n4 = o3, r5.then(t4, n4);
});
return o2.onCancel(function(e6) {
n4(e6);
}), o2;
};
r4.toCancelablePromise = m;
}, 836: (e4, r4) => {
Object.defineProperty(r4, "__esModule", { value: !0 }), r4.isCancelableAbortSignal = void 0, r4.isCancelableAbortSignal = function(e5) {
return !!(e5 != null && e5.__is_cancelable_abort_signal);
};
}, 216: (e4, r4) => {
Object.defineProperty(r4, "__esModule", { value: !0 }), r4.promise_identifier = r4.isCancelablePromise = void 0;
var t3 = Symbol("promise_identifier");
r4.promise_identifier = t3, r4.isCancelablePromise = function(e5) {
return !!(e5 != null && e5[t3]);
};
}, 790: (e4, r4) => {
Object.defineProperty(r4, "__esModule", { value: !0 }), r4.isPromise = void 0, r4.isPromise = function(e5) {
return Promise.resolve(e5) === e5;
};
} }, r3 = {};
function t2(n3) {
var o = r3[n3];
if (o !== void 0) return o.exports;
var a = r3[n3] = { exports: {} };
return e3[n3](a, a.exports, t2), a.exports;
}
var n2 = {};
return (() => {
var e4 = n2;
Object.defineProperty(e4, "__esModule", { value: !0 }), e4.createDecoupledPromise = void 0;
var r4 = t2(0);
e4.createDecoupledPromise = function() {
var e5, t3, n3, o = new r4.CancelablePromise(function(r5, o2, a) {
e5 = r5, t3 = o2, n3 = a;
});
return Object.assign(Object.assign({ resolve: e5, reject: t3 }, n3), { promise: o });
};
})(), n2;
})(), e2.exports = r2();
}, 180: function(e2) {
var r2;
r2 = () => (() => {
"use strict";
var e3 = { 0: (e4, r4, t3) => {
function n3(e5) {
return n3 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e6) {
return typeof e6;
} : function(e6) {
return e6 && typeof Symbol == "function" && e6.constructor === Symbol && e6 !== Symbol.prototype ? "symbol" : typeof e6;
}, n3(e5);
}
Object.defineProperty(r4, "__esModule", { value: !0 }), r4.toCancelablePromise = r4.CancelablePromise = void 0;
var o, a = t3(836), i = t3(216), c = t3(790);
function l(e5, r5) {
for (var t4 = 0; t4 < r5.length; t4++) {
var o2 = r5[t4];
o2.enumerable = o2.enumerable || !1, o2.configurable = !0, "value" in o2 && (o2.writable = !0), Object.defineProperty(e5, (a2 = function(e6) {
if (n3(e6) !== "object" || e6 === null) return e6;
var r6 = e6[Symbol.toPrimitive];
if (r6 !== void 0) {
var t5 = r6.call(e6, "string");
if (n3(t5) !== "object") return t5;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return String(e6);
}(o2.key), n3(a2) === "symbol" ? a2 : String(a2)), o2);
}
var a2;
}
function s(e5) {
var r5 = v();
return function() {
var t4, o2 = y(e5);
if (r5) {
var a2 = y(this).constructor;
t4 = Reflect.construct(o2, arguments, a2);
} else t4 = o2.apply(this, arguments);
return function(e6, r6) {
if (r6 && (n3(r6) === "object" || typeof r6 == "function")) return r6;
if (r6 !== void 0) throw new TypeError("Derived constructors may only return object or undefined");
return u(e6);
}(this, t4);
};
}
function u(e5) {
if (e5 === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return e5;
}
function f() {
return f = typeof Reflect != "undefined" && Reflect.get ? Reflect.get.bind() : function(e5, r5, t4) {
var n4 = function(e6, r6) {
for (; !Object.prototype.hasOwnProperty.call(e6, r6) && (e6 = y(e6)) !== null; ) ;
return e6;
}(e5, r5);
if (n4) {
var o2 = Object.getOwnPropertyDescriptor(n4, r5);
return o2.get ? o2.get.call(arguments.length < 3 ? e5 : t4) : o2.value;
}
}, f.apply(this, arguments);
}
function p(e5) {
var r5 = typeof Map == "function" ? /* @__PURE__ */ new Map() : void 0;
return p = function(e6) {
if (e6 === null || (t4 = e6, Function.toString.call(t4).indexOf("[native code]") === -1)) return e6;
var t4;
if (typeof e6 != "function") throw new TypeError("Super expression must either be null or a function");
if (r5 !== void 0) {
if (r5.has(e6)) return r5.get(e6);
r5.set(e6, n4);
}
function n4() {
return d(e6, arguments, y(this).constructor);
}
return n4.prototype = Object.create(e6.prototype, { constructor: { value: n4, enumerable: !1, writable: !0, configurable: !0 } }), h(n4, e6);
}, p(e5);
}
function d(e5, r5, t4) {
return d = v() ? Reflect.construct.bind() : function(e6, r6, t5) {
var n4 = [null];
n4.push.apply(n4, r6);
var o2 = new (Function.bind.apply(e6, n4))();
return t5 && h(o2, t5.prototype), o2;
}, d.apply(null, arguments);
}
function v() {
if (typeof Reflect == "undefined" || !Reflect.construct || Reflect.construct.sham) return !1;
if (typeof Proxy == "function") return !0;
try {
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {
})), !0;
} catch {
return !1;
}
}
function h(e5, r5) {
return h = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(e6, r6) {
return e6.__proto__ = r6, e6;
}, h(e5, r5);
}
function y(e5) {
return y = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e6) {
return e6.__proto__ || Object.getPrototypeOf(e6);
}, y(e5);
}
var b = function(e5) {
(function(e6, r6) {
if (typeof r6 != "function" && r6 !== null) throw new TypeError("Super expression must either be null or a function");
e6.prototype = Object.create(r6 && r6.prototype, { constructor: { value: e6, writable: !0, configurable: !0 } }), Object.defineProperty(e6, "prototype", { writable: !1 }), r6 && h(e6, r6);
})(i2, e5);
var r5, t4, n4 = s(i2);
function i2(e6) {
var r6, t5, c2, l2, s2, p2;
return function(e7, r7) {
if (!(e7 instanceof r7)) throw new TypeError("Cannot call a class as a function");
}(this, i2), (l2 = n4.call(this, function(e7, r7) {
s2 = e7, p2 = r7;
}))[o] = !0, l2.status = "pending", l2.cancelCallbacks = /* @__PURE__ */ new Set(), l2.ownCancelCallbacks = /* @__PURE__ */ new Set(), l2.onProgressCallbacks = /* @__PURE__ */ new Set(), l2.disposeCallbacks = function() {
l2.cancelCallbacks = /* @__PURE__ */ new Set(), l2.ownCancelCallbacks = /* @__PURE__ */ new Set(), l2.onProgressCallbacks = /* @__PURE__ */ new Set();
}, l2.subscribeToOwnCancelEvent = function(e7) {
return l2.ownCancelCallbacks.add(e7), function() {
l2.ownCancelCallbacks.delete(e7);
};
}, l2.cancel = function(e7) {
if (l2.status !== "pending") return u(l2);
l2.status = "canceled";
var r7 = e7 === void 0 ? new Error("Promise canceled") : e7;
return l2.ownCancelCallbacks.forEach(function(e8) {
return e8(r7);
}), l2.cancelCallbacks.forEach(function(e8) {
return e8(r7);
}), l2._reject(r7), l2.disposeCallbacks(), u(l2);
}, l2.onCancel = function(e7) {
var r7 = (arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}).signal;
return l2.cancelCallbacks.add(e7), (0, a.isCancelableAbortSignal)(r7) ? r7.subscribe(function() {
l2.cancelCallbacks.delete(e7);
}) : r7 == null || r7.addEventListener("abort", function() {
l2.cancelCallbacks.delete(e7);
}), u(l2);
}, l2.onProgress = function(e7) {
var r7 = (arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}).signal;
return l2.onProgressCallbacks.add(e7), (0, a.isCancelableAbortSignal)(r7) ? r7.subscribe(function() {
l2.onProgressCallbacks.delete(e7);
}) : r7 == null || r7.addEventListener("abort", function() {
l2.onProgressCallbacks.delete(e7);
}), u(l2);
}, l2.reportProgress = function(e7, r7) {
return l2.onProgressCallbacks.forEach(function(t6) {
return t6(e7, r7);
}), u(l2);
}, l2.createChildPromise = function() {
var e7, r7, t6 = new i2(function(t7, n5, o2) {
e7 = t7, r7 = n5;
});
return t6.onProgressCallbacks = l2.onProgressCallbacks, t6.onCancel(function(e8) {
l2.cancel(e8);
}), { promise: t6, resolve: e7, reject: r7 };
}, l2._resolve = s2, l2._reject = p2, e6(function(e7) {
l2.status = "resolved", l2.disposeCallbacks(), l2._resolve(e7);
}, function(e7) {
l2.status = "rejected", l2.disposeCallbacks(), l2._reject(e7);
}, { cancel: function(e7) {
return l2.cancel(e7);
}, onCancel: function(e7) {
return l2.subscribeToOwnCancelEvent(e7);
}, onProgress: function(e7) {
return l2.onProgress(e7), function() {
l2.onProgressCallbacks.delete(e7);
};
}, reportProgress: function(e7, r7) {
l2.reportProgress(e7, r7);
} }), l2.then = function(e7, t6) {
var n5 = l2.createChildPromise(), o2 = n5.promise, a2 = n5.resolve, c3 = n5.reject;
return f((r6 = u(l2), y(i2.prototype)), "then", r6).call(r6, e7, t6).then(a2, c3), o2;
}, l2.catch = function(e7) {
var r7 = l2.createChildPromise(), n5 = r7.promise, o2 = r7.resolve, a2 = r7.reject;
return f((t5 = u(l2), y(i2.prototype)), "catch", t5).call(t5, e7).then(o2, a2), n5;
}, l2.finally = function(e7) {
var r7 = l2.createChildPromise(), t6 = r7.promise, n5 = r7.resolve, o2 = r7.reject;
return f((c2 = u(l2), y(i2.prototype)), "finally", c2).call(c2, e7).then(n5, o2), t6;
}, l2;
}
return r5 = i2, t4 = [{ key: "resolve", value: function(e6) {
return new i2(function(r6) {
return r6(e6);
});
} }], t4 && l(r5, t4), Object.defineProperty(r5, "prototype", { writable: !1 }), i2;
}(p(Promise));
r4.CancelablePromise = b, o = i.promise_identifier, b.reject = function(e5) {
return new b(function(r5, t4) {
return t4(e5);
});
}, b.canceled = function(e5) {
return new b(function(r5, t4, n4) {
return (0, n4.cancel)(e5);
});
}, b.race = function(e5) {
return new b(function(r5, t4, n4) {
var o2 = n4.onCancel, a2 = n4.cancel;
e5.forEach(function(e6) {
var n5 = m(e6);
o2(function(e7) {
n5.cancel(e7);
}), n5.then(r5, function(e7) {
n5.status !== "canceled" ? t4(e7) : a2(e7);
});
});
});
}, b.all = function(e5) {
return new b(function(r5, t4, n4) {
var o2 = n4.onCancel, a2 = n4.cancel, i2 = /* @__PURE__ */ new Map(), c2 = e5.length, l2 = 0;
e5.forEach(function(e6) {
var n5 = m(e6);
i2.set(n5, null), o2(function(e7) {
n5.cancel(e7);
}), n5.then(function(e7) {
l2++, i2.set(n5, e7), l2 === c2 && r5(Array.from(i2.values()));
}, function(e7) {
n5.status !== "canceled" ? t4(e7) : a2(e7);
});
});
});
}, b.allSettled = function(e5) {
return new b(function(r5, t4, n4) {
var o2 = n4.onCancel, a2 = /* @__PURE__ */ new Map(), i2 = e5.length, c2 = 0;
e5.forEach(function(e6) {
var t5 = m(e6);
a2.set(t5, null), o2(function(e7) {
t5.cancel(e7);
}), t5.then(function(e7) {
a2.set(t5, { status: "fulfilled", value: e7 });
}, function(e7) {
a2.set(t5, { status: t5.status === "canceled" ? "canceled" : "rejected", reason: e7 });
}).finally(function() {
++c2 === i2 && r5(Array.from(a2.values()));
});
});
});
}, b.prototype.constructor = Promise;
var m = function e5(r5) {
if ((0, i.isCancelablePromise)(r5)) return r5;
if (typeof r5 == "function") return e5(r5());
if (!(0, c.isPromise)(r5)) return new b(function(e6) {
return e6(r5);
});
var t4, n4, o2 = new b(function(e6, o3, a2) {
t4 = e6, n4 = o3, r5.then(t4, n4);
});
return o2.onCancel(function(e6) {
n4(e6);
}), o2;
};
r4.toCancelablePromise = m;
}, 836: (e4, r4) => {
Object.defineProperty(r4, "__esModule", { value: !0 }), r4.isCancelableAbortSignal = void 0, r4.isCancelableAbortSignal = function(e5) {
return !!(e5 != null && e5.__is_cancelable_abort_signal);
};
}, 216: (e4, r4) => {
Object.defineProperty(r4, "__esModule", { value: !0 }), r4.promise_identifier = r4.isCancelablePromise = void 0;
var t3 = Symbol("promise_identifier");
r4.promise_identifier = t3, r4.isCancelablePromise = function(e5) {
return !!(e5 != null && e5[t3]);
};
}, 790: (e4, r4) => {
Object.defineProperty(r4, "__esModule", { value: !0 }), r4.isPromise = void 0, r4.isPromise = function(e5) {
return Promise.resolve(e5) === e5;
};
}, 710: (e4, r4, t3) => {
Object.defineProperty(r4, "__esModule", { value: !0 }), Object.defineProperty(r4, "toCancelablePromise", { enumerable: !0, get: function() {
return n3.toCancelablePromise;
} });
var n3 = t3(0);
} }, r3 = {};
function t2(n3) {
var o = r3[n3];
if (o !== void 0) return o.exports;
var a = r3[n3] = { exports: {} };
return e3[n3](a, a.exports, t2), a.exports;
}
var n2 = {};
return (() => {
var e4 = n2;
Object.defineProperty(e4, "__esModule", { value: !0 }), e4.groupAsCancelablePromise = void 0;
var r4 = t2(710), o = t2(0);
function a(e5) {
return function(e6) {
if (Array.isArray(e6)) return i(e6);
}(e5) || function(e6) {
if (typeof Symbol != "undefined" && e6[Symbol.iterator] != null || e6["@@iterator"] != null) return Array.from(e6);
}(e5) || function(e6, r5) {
if (e6) {
if (typeof e6 == "string") return i(e6, r5);
var t3 = Object.prototype.toString.call(e6).slice(8, -1);
return t3 === "Object" && e6.constructor && (t3 = e6.constructor.name), t3 === "Map" || t3 === "Set" ? Array.from(e6) : t3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t3) ? i(e6, r5) : void 0;
}
}(e5) || function() {
throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);
}();
}
function i(e5, r5) {
(r5 == null || r5 > e5.length) && (r5 = e5.length);
for (var t3 = 0, n3 = new Array(r5); t3 < r5; t3++) n3[t3] = e5[t3];
return n3;
}
e4.groupAsCancelablePromise = function(e5) {
var t3 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
if (!e5.length) return null;
var n3 = t3.maxConcurrent, i2 = n3 === void 0 ? 8 : n3, c = t3.executeInOrder, l = c !== void 0 && c, s = t3.beforeEachCallback, u = s === void 0 ? null : s, f = t3.afterEachCallback, p = f === void 0 ? null : f, d = t3.onQueueEmptyCallback, v = d === void 0 ? null : d, h = a(e5), y = [];
return new o.CancelablePromise(function(t4, n4, o2) {
(function t5() {
if (h.length) {
var n5 = h.splice(0, i2).map(function(t6) {
var n6 = typeof t6 == "function" ? t6() : t6;
u == null || u();
var a2 = (0, r4.toCancelablePromise)(n6), i3 = o2.onCancel(function(e6) {
a2.cancel(e6);
});
return a2.then(function(r5) {
var t7, n7;
i3(), y.push(r5), p == null || p(r5), o2.reportProgress(((t7 = y.length) !== null && t7 !== void 0 ? t7 : 1) / ((n7 = e5.length) !== null && n7 !== void 0 ? n7 : 1) * 100);
}), l ? a2.then(function(e6) {
return e6;
}) : a2;
});
return Promise.all(n5).then(function() {
return t5();
});
}
})().then(function() {
v == null || v(y), t4(y);
});
});
};
})(), n2;
})(), e2.exports = r2();
} }, r = {};
function t(n2) {
var o = r[n2];
if (o !== void 0) return o.exports;
var a = r[n2] = { exports: {} };
return e[n2].call(a.exports, a, a.exports, t), a.exports;
}
var n = {};
return (() => {
"use strict";
var e2 = n;
Object.defineProperty(e2, "__esModule", { value: !0 }), e2.createStaticEasyWebWorker = e2.createEasyWebWorker = e2.StaticEasyWebWorker = e2.EasyWebWorker = e2.default = void 0;
var r2 = t(382);
Object.defineProperty(e2, "default", { enumerable: !0, get: function() {
return r2.EasyWebWorker;
} });
var o = t(382);
Object.defineProperty(e2, "EasyWebWorker", { enumerable: !0, get: function() {
return o.EasyWebWorker;
} });
var a = t(600);
Object.defineProperty(e2, "StaticEasyWebWorker", { enumerable: !0, get: function() {
return a.StaticEasyWebWorker;
} });
var i = t(134);
Object.defineProperty(e2, "createEasyWebWorker", { enumerable: !0, get: function() {
return i.createEasyWebWorker;
} });
var c = t(952);
Object.defineProperty(e2, "createStaticEasyWebWorker", { enumerable: !0, get: function() {
return c.createStaticEasyWebWorker;
} });
})(), n;
})());
}
});
 
// src-copilot/plugin.js
init_process();
 
// inline-html:/home/deban/Documents/Projects/my-amplenote-plugins-v2/src-copilot/embed/chat.html
var chat_default = `<html lang="en">
<head>
<title>Copilot Chat</title>
</head>
<body>
<div class="app-container"></div>
<script>(() => {
var __defProp = Object.defineProperty;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value;
var __esm = (fn, res) => function() {
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
};
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key != "symbol" ? key + "" : key, value);
 
// node_modules/esbuild-plugins-node-modules-polyfill/globals/process.js
var init_process = __esm({
"node_modules/esbuild-plugins-node-modules-polyfill/globals/process.js"() {
}
});
 
// src-copilot/embed/chat.jsx
init_process();
 
// common-utils/dynamic-import-esm.js
init_process();
 
// package.json
var package_default = {
name: "amplenote-plugin-dev-env",
author: "debajandhar12",
version: "1.0.0",
type: "module",
repository: "https://github.com/debanjandhar12/my-amplenote-plugins-v2",
dependencies: {
"@debanjandhar12/markmap-lib": "0.17.0-mod.3",
"@debanjandhar12/markmap-toolbar": "0.17.0-mod.3",
"@debanjandhar12/markmap-view": "0.17.0-mod.3",
"date-fns": "^3.6.0",
"lodash-es": "^4.17.21",
luxon: "^3.4.4",
"@yiuayiu/telegram-markdown-escape": "^0.0.2-1",
"@omnivore-app/api": "^1.0.4",
"markdown-it": "^14.1.0",
"remark-gfm": "4.0.0",
"remark-parse": "11.0.0",
"remark-frontmatter": "5.0.0",
unified: "11.0.0",
"unist-util-visit": "5.0.0",
"unist-util-visit-parents": "6.0.1",
"mdast-util-to-string": "4.0.0",
"d3-svg-to-png": "^0.3.1",
"chart.js": "^4.4.3",
fparser: "^3.1.0",
nanoid: "^5.0.7",
zod: "3.23.8",
react: "18.2.0",
"react-dom": "18.2.0",
"react-window": "1.8.11",
"@assistant-ui/react-markdown": "0.7.16",
"emoji-mart": "^5.6.0",
"@emoji-mart/data": "^1.2.1",
"@emoji-mart/react": "^1.1.1",
"@pinecone-database/pinecone": "4.1.0",
"react-string-diff": "0.2.0",
"@radix-ui/themes": "3.2.0",
"@assistant-ui/react": "0.7.65",
"@radix-ui/react-icons": "1.3.2",
tributejs: "5.1.3",
ai: "4.2.8",
"@ai-sdk/groq": "1.2.1",
"@ai-sdk/anthropic": "1.2.2",
"@ai-sdk/openai": "1.3.4",
"@ai-sdk/google": "1.2.3",
"@ai-sdk/fireworks": "0.2.2",
"ollama-ai-provider": "1.2.0",
"easy-web-worker": "7.0.2",
"fuse.js": "7.0.0",
"react-virtuoso": "4.12.5",
"async-mutex": "0.5.0",
"@huggingface/transformers": "3.2.4",
fflate: "0.8.2",
dayjs: "1.11.13",
"react-error-boundary": "5.0.0",
"scheduler-polyfill": "^1.3.0",
"my-ample-plugin-external": "1.0.21"
},
devDependencies: {
"@types/jest": "^29.5.0",
cors: "^2.8.5",
"cross-fetch": "^4.0.0",
dotenv: "^16.0.3",
esbuild: "0.25.0",
"esbuild-jest2": "0.6.7",
"esbuild-plugins-node-modules-polyfill": "1.7.0",
express: "^5.0.1",
"isomorphic-fetch": "^3.0.0",
jest: "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
jsdom: "^24.1.0",
"make-synchronous": "^1.0.0",
playwright: "^1.49.1",
"@playwright/test": "^1.49.1",
"core-js": "^3.38.1",
"@testing-library/react": "^16.0.1",
"@testing-library/jest-dom": "^6.5.0",
"esbuild-plugin-external-global": "^1.0.1",
"@huggingface/transformers": "3.2.4",
"node-fetch": "^3.3.2",
idb: "^8.0.1",
"p-retry": "^6.2.1"
},
scripts: {
test: "jest --testPathPattern=src-copilot",
"test:watch": "jest --testPathPattern=src-copilot --watch",
"build:prod": "NODE_ENV=production node esbuild.js $(pwd)/src-copilot",
"build:dev": "node esbuild.js $(pwd)/src-copilot --watch --server"
}
};
 
// common-utils/dynamic-import-esm.js
var dynamicImportExternalPluginBundle = async (fileName, { isESM = !0 } = {}) => {
let url = new URL(\`https://esm.sh/my-ample-plugin-external@\${package_default.dependencies["my-ample-plugin-external"]}/bundles/\${fileName}\`);
if (!isESM)
return fetch(url.toString()).then((res) => res.arrayBuffer()).then((buffer) => new Uint8Array(buffer));
url.searchParams.set("bundle", !0);
let module2 = await import(url.toString());
if (Object.keys(module2.versions).length !== module2.default.length)
throw new Error(\`Failed to import module: \${fileName}. Expected module count mismatch (expected: \${module2.default.length}, actual: \${Object.keys(module2.versions).length}). Possibly due to my-ample-plugin-external version mismatch.\`);
for (let [key, value] of Object.entries(module2.versions))
if (value !== package_default.dependencies[key])
throw new Error(\`Failed to import module: \${fileName}. Version mismatch for \${key} (expected: \${package_default.dependencies[key]}, actual: \${value})\`);
if (module2.default)
return console.log(\`Imported module: \${fileName} from \${url.toString()}\`, module2.versions), module2.default;
throw new Error(\`Failed to import module: \${fileName}\`);
};
var dynamicImportESM = async (pkg, pkgVersion = null) => {
let cdnList = ["https://esm.sh/", "https://legacy.esm.sh/", "https://esm.run/"], resolvedVersion = resolvePackageVersion(pkg, pkgVersion), importCompleted = !1, importPromises = cdnList.map(async (cdn) => {
let url = buildCDNUrl(cdn, pkg, resolvedVersion);
if (cdn !== "https://esm.sh/" && await new Promise((resolve) => setTimeout(resolve, 600)), importCompleted)
throw new Error(\`Terminating as \${pkg} has already been imported\`);
return import(url).then((module2) => ({ module: module2, url })).catch((e) => {
throw console.warn(\`Failed to import \${pkg} from \${cdn}: \${e.message}\`), e;
});
});
try {
let result = await Promise.any(importPromises);
return importCompleted = !0, console.log(\`Imported \${pkg}@\${resolvedVersion} from \${result.url}\`), result.module;
} catch {
throw new Error(\`Failed to import \${pkg} from all available CDNs\`);
}
throw new Error(\`Failed to import \${pkg} from all available CDNs\`);
};
function getBasePackage(pkg) {
if (pkg.startsWith("@")) {
let [scope, name] = pkg.split("/");
return \`\${scope}/\${name}\`;
}
return pkg.split("/")[0];
}
function resolvePackageVersion(pkg, pkgVersion) {
let basePkg = getBasePackage(pkg), version = pkgVersion || package_default.dependencies[basePkg] || package_default.devDependencies[basePkg] || "latest";
return version.startsWith("^") || version.startsWith("~") ? version.substring(1) : version;
}
function getPackageFolderString(pkg) {
let folders = [];
return pkg.startsWith("@") ? [, , ...folders] = pkg.split("/") : [, ...folders] = pkg.split("/"), folders && folders.length > 0 ? \`/\${folders.join("/")}\` : "";
}
function buildCDNUrl(cdn, pkg, version) {
let basePkg = getBasePackage(pkg), versionString = version !== "latest" ? \`@\${version}\` : "", folderString = getPackageFolderString(pkg), url = new URL(\`\${cdn}\${basePkg}\${versionString}\${folderString}\`);
if (cdn !== "https://esm.sh/" && (basePkg.includes("react") || basePkg.includes("radix")))
throw new Error(\`React based packages is not supported in \${cdn}\`);
if (cdn !== "https://legacy.esm.sh/" && basePkg.includes("build"))
throw new Error(\`Build API package is not supported in \${cdn}\`);
return cdn === "https://esm.sh/" && (basePkg !== "react-dom" && basePkg !== "react" && url.searchParams.set("bundle-deps", !1), !pkg.endsWith(".css") && pkg !== "build" && url.searchParams.set("deps", \`react@\${package_default.dependencies.react},react-dom@\${package_default.dependencies["react-dom"]}\`)), url.toString();
}
var dynamicImportCSS = async (pkg, pkgVersion = null) => {
let resolvedVersion = resolvePackageVersion(pkg, pkgVersion), url = buildCDNUrl("https://esm.sh/", pkg, resolvedVersion), link = document.createElement("link");
return link.rel = "stylesheet", link.href = url, document.head.appendChild(link), new Promise((resolve) => link.onload = resolve);
}, dynamic_import_esm_default = dynamicImportESM;
 
// src-copilot/backend/getLLMModel.js
init_process();
 
// src-copilot/constants.js
init_process();
var LLM_API_URL_SETTING = "LLM API URL", LLM_API_KEY_SETTING = "LLM API Key", LLM_MODEL_SETTING = "LLM Model", LLM_MAX_TOKENS_SETTING = "LLM Max Tokens (Default: 8192)", CUSTOM_LLM_INSTRUCTION_SETTING = "Custom LLM Instruction (Optional)", CUSTOM_LLM_AVATAR_SETTING = "Custom LLM Avatar (Optional)", USER_PROMPT_LIST_SETTING = "User Prompt List (DO NOT CHANGE MANUALLY)";
 
// src-copilot/backend/getLLMModel.js
async function getLLMModel(appSettings2) {
let apiUrl = appSettings2[LLM_API_URL_SETTING], model = appSettings2[LLM_MODEL_SETTING], apiKey = appSettings2[LLM_API_KEY_SETTING];
if (!apiUrl || !apiUrl.trim()) throw new Error("API URL is not provided. Please check plugin settings.");
if (!model || !model.trim()) throw new Error("Model is not provided. Please check plugin settings.");
if (apiUrl = apiUrl.toLowerCase(), model = model.toLowerCase(), apiUrl.includes("groq")) {
let { createGroq } = await dynamic_import_esm_default("@ai-sdk/groq");
return createGroq({
apiKey,
baseURL: apiUrl
// Default: https://api.groq.com/openai/v1
}).languageModel(model);
} else if (apiUrl.includes("localhost")) {
let { createOllama } = await dynamic_import_esm_default("ollama-ai-provider");
return createOllama({
apiKey,
baseURL: apiUrl
// Default: http://localhost:11434/api
}).languageModel(model);
} else if (apiUrl.includes("googleapis")) {
let { createGoogleGenerativeAI } = await dynamic_import_esm_default("@ai-sdk/google");
return createGoogleGenerativeAI({
apiKey,
baseURL: apiUrl
// Default: https://generativelanguage.googleapis.com/v1beta
}).languageModel(model);
} else if (apiUrl.includes("anthropic")) {
let { createAnthropic } = await dynamic_import_esm_default("@ai-sdk/anthropic");
return createAnthropic({
apiKey,
baseURL: apiUrl,
headers: { "anthropic-dangerous-direct-browser-access": "true" }
}).languageModel(model);
} else if (apiUrl.includes("openai") || apiUrl.includes("openrouter")) {
let { createOpenAI } = await dynamic_import_esm_default("@ai-sdk/openai");
return createOpenAI({
apiKey,
baseURL: apiUrl
// Default: https://api.openai.com/v1
}).languageModel(model);
} else if (apiUrl.includes("fireworks")) {
let { createFireworks } = await dynamic_import_esm_default("@ai-sdk/fireworks");
return createFireworks({
apiKey,
baseURL: apiUrl
}).languageModel(model.startsWith("accounts/fireworks/models/") ? model : \`accounts/fireworks/models/\${model}\`);
} else throw new Error("It is likely that incorrect LLM API URL is provided. Please check plugin settings.");
}
 
// common-utils/embed-comunication.js
init_process();
function createCallAmplenotePluginMock(embedCommandsMock) {
return async (commandName, ...args) => {
if (commandName in embedCommandsMock)
return await embedCommandsMock[commandName](...args);
throw new Error(\`Unknown command: \${commandName}\`);
};
}
function deserializeWithFunctions(str) {
return JSON.parse(str, (key, value) => {
if (typeof value == "string" && value.startsWith("__FUNCTION:")) {
let functionBody = value.slice(11);
return new Function(\`return \${functionBody}\`)();
}
return value;
});
}
 
// src-copilot/test/chat/chat.testdata.js
init_process();
 
// common-utils/dynamic-import-env.js
init_process();
 
// common-utils/embed-ui.js
init_process();
function showEmbedLoader() {
window.LoadingStartTime = performance.now();
let overlay = document.createElement("div");
overlay.id = "embed-loader-overlay", overlay.style.cssText = \`
position: fixed;
top: 0;
left: 0;
width: 100%;
/*height: 100%;*/
background-color: rgba(0, 0, 0, 0.5);
z-index: 9998;
animation: fadeIn 0.3s ease-in-out;
\`;
let loader = document.createElement("div");
loader.id = "embed-loader", loader.style.cssText = \`
position: fixed;
left: 50%;
transform: translate(-50%, 0%);
width: 50px;
height: 50px;
border: 5px solid #f3f3f3;
border-top: 5px solid #3498db;
border-radius: 50%;
animation: spin 1s linear infinite;
z-index: 9999;
\`;
let keyframes = document.createElement("style");
keyframes.textContent = \`
@keyframes spin {
0% { transform: translate(-50%, -50%) rotate(0deg); }
100% { transform: translate(-50%, -50%) rotate(360deg); }
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
\`, document.head.appendChild(keyframes), document.body.appendChild(overlay), document.body.appendChild(loader), overlay.style.display = "none", loader.style.display = "none", setTimeout(() => {
document.getElementById("embed-loader") && (loader.style.display = "block"), document.getElementById("embed-loader-overlay") && (overlay.style.display = "block");
}, 240);
}
function hideEmbedLoader() {
window.LoadingEndTime = performance.now(), console.log("Loading time:", window.LoadingEndTime - window.LoadingStartTime);
let loader = document.getElementById("embed-loader"), overlay = document.getElementById("embed-loader-overlay");
loader && loader.remove(), overlay && overlay.remove();
}
 
// src-copilot/frontend-chat/overwriteWithAmplenoteStyle.js
init_process();
var overwriteWithAmplenoteStyle = () => {
let body2 = document.body, styleEl = document.createElement("style");
styleEl.innerText = \`
.dark, .dark-theme, :is(.dark, .dark-theme) :where(.radix-themes:not(.light, .light-theme)) {
--color-background: #272f35;
}
.dark, .dark-theme {
--gray-1: #292f33;
--gray-2: #2f3539;
--gray-3: #343c43;
--gray-4: #36414b;
--gray-5: #3a4651;
--gray-6: #3e4d5a;
--gray-7: #455968;
--gray-8: #577084;
--gray-9: #617b8f;
--gray-10: #6d8599;
--gray-11: #a7bac9;
--gray-12: #eaeff3;
 
--gray-a1: #d12f0003;
--gray-a2: #f4c99b0a;
--gray-a3: #e0e8fc12;
--gray-a4: #b0d3fe1c;
--gray-a5: #aed2fb24;
--gray-a6: #a4d2fe2f;
--gray-a7: #9dd4fe41;
--gray-a8: #a1d4ff64;
--gray-a9: #a8d9ff72;
--gray-a10: #b3dbfd7f;
--gray-a11: #d6ecffbb;
--gray-a12: #f7fbfff0;
 
--gray-contrast: #FFFFFF;
--gray-surface: rgba(0, 0, 0, 0.05);
--gray-indicator: #617b8f;
--gray-track: #617b8f;
}
@supports (color: color(display-p3 1 1 1)) {
@media (color-gamut: p3) {
.dark, .dark-theme {
--gray-1: oklch(30% 0.0115 242.8);
--gray-2: oklch(32.3% 0.0119 242.8);
--gray-3: oklch(35.3% 0.0166 242.8);
--gray-4: oklch(37.1% 0.0213 242.8);
--gray-5: oklch(38.8% 0.024 242.8);
--gray-6: oklch(41.2% 0.0288 242.8);
--gray-7: oklch(45.3% 0.035 242.8);
--gray-8: oklch(53.4% 0.0433 242.8);
--gray-9: oklch(57% 0.0433 242.8);
--gray-10: oklch(60.5% 0.0412 242.8);
--gray-11: oklch(77.9% 0.0302 242.8);
--gray-12: oklch(94.9% 0.0081 242.8);
 
--gray-a1: color(display-p3 0.9451 0.1843 0 / 0.005);
--gray-a2: color(display-p3 0.9961 0.898 0.8 / 0.033);
--gray-a3: color(display-p3 0.902 0.9255 1 / 0.069);
--gray-a4: color(display-p3 0.698 0.8353 0.9961 / 0.109);
--gray-a5: color(display-p3 0.702 0.8353 1 / 0.138);
--gray-a6: color(display-p3 0.6784 0.8275 1 / 0.183);
--gray-a7: color(display-p3 0.6588 0.8235 1 / 0.252);
--gray-a8: color(display-p3 0.6824 0.8392 1 / 0.385);
--gray-a9: color(display-p3 0.7059 0.8549 1 / 0.439);
--gray-a10: color(display-p3 0.749 0.8706 1 / 0.488);
--gray-a11: color(display-p3 0.8667 0.9294 1 / 0.725);
--gray-a12: color(display-p3 0.9725 0.9843 1 / 0.941);
 
--gray-contrast: #FFFFFF;
--gray-surface: color(display-p3 0 0 0 / 5%);
--gray-indicator: oklch(57% 0.0433 242.8);
--gray-track: oklch(57% 0.0433 242.8);
}
}
}
.dark, .dark-theme {
--accent-1: #252f3c;
--accent-2: #253141;
--accent-3: #223e64;
--accent-4: #1a467f;
--accent-5: #1e508f;
--accent-6: #275b9e;
--accent-7: #2e68b2;
--accent-8: #3277cf;
--accent-9: #0080ff;
--accent-10: #3378d0;
--accent-11: #7cbaff;
--accent-12: #cbe3ff;
 
--accent-a1: #002ffc09;
--accent-a2: #084ff510;
--accent-a3: #126ffc3c;
--accent-a4: #046dfe5e;
--accent-a5: #1379ff72;
--accent-a6: #2784ff85;
--accent-a7: #328bff9e;
--accent-a8: #368dffc3;
--accent-a9: #0080ff;
--accent-a10: #378effc4;
--accent-a11: #7cbaff;
--accent-a12: #cbe3ff;
 
--accent-contrast: #fff;
--accent-surface: #24334d80;
--accent-indicator: #0080ff;
--accent-track: #0080ff;
}
 
@supports (color: color(display-p3 1 1 1)) {
@media (color-gamut: p3) {
.dark, .dark-theme {
--accent-1: oklch(30% 0.0278 256.1);
--accent-2: oklch(31% 0.0325 256.1);
--accent-3: oklch(36.2% 0.074 256.1);
--accent-4: oklch(39.6% 0.1073 256.1);
--accent-5: oklch(43.2% 0.1173 256.1);
--accent-6: oklch(47.1% 0.1224 256.1);
--accent-7: oklch(51.7% 0.1323 256.1);
--accent-8: oklch(57% 0.1522 256.1);
--accent-9: oklch(61.5% 0.2108 256.1);
--accent-10: oklch(57.3% 0.1522 256.1);
--accent-11: oklch(78% 0.1427 256.1);
--accent-12: oklch(90.8% 0.0525 256.1);
 
--accent-a1: color(display-p3 0 0.1882 0.9882 / 0.035);
--accent-a2: color(display-p3 0.0314 0.3176 0.9922 / 0.06);
--accent-a3: color(display-p3 0.1608 0.4314 1 / 0.222);
--accent-a4: color(display-p3 0.1294 0.4275 1 / 0.35);
--accent-a5: color(display-p3 0.1882 0.4824 1 / 0.424);
--accent-a6: color(display-p3 0.2549 0.5216 1 / 0.498);
--accent-a7: color(display-p3 0.2902 0.5529 1 / 0.597);
--accent-a8: color(display-p3 0.3098 0.5569 1 / 0.734);
--accent-a9: color(display-p3 0.2157 0.5059 1 / 0.961);
--accent-a10: color(display-p3 0.3137 0.5647 1 / 0.739);
--accent-a11: color(display-p3 0.5529 0.7373 0.9961 / 0.971);
--accent-a12: color(display-p3 0.8235 0.8941 1 / 0.986);
 
--accent-contrast: #fff;
--accent-surface: color(display-p3 0.1529 0.1961 0.2902 / 0.5);
--accent-indicator: oklch(61.5% 0.2108 256.1);
--accent-track: oklch(61.5% 0.2108 256.1);
}
}
}\`.replace(/\\s+/g, " ").trim(), styleEl.innerText += \`
.app-container .radix-themes {
--default-font-size: 15px;
}
\`.replace(/\\s+/g, " ").trim(), body2.appendChild(styleEl);
let styleEl2 = document.createElement("style");
styleEl2.innerText = \`
.dark {
--aui-background: 210, 10%, 18%;
--aui-foreground: 210, 10%, 94%;
--aui-card: 210, 10%, 20%;
--aui-card-foreground: 210, 10%, 94%;
--aui-popover: 210, 10%, 22%;
--aui-popover-foreground: 210, 10%, 94%;
--aui-border: 210, 10%, 50%;
--aui-input: 210, 10%, 50%;
--aui-ring: 210, 10%, 18%;
 
--aui-primary: 205 80% 50%;
--aui-primary-foreground: 0, 0%, 100%;
--aui-secondary: 205, 10%, 94%;
--aui-secondary-foreground: 205, 10%, 18%;
 
--aui-muted-foreground: 205, 10%, 50%;
--aui-accent: 205, 100%, 50%;
--aui-accent-foreground: 0, 0%, 100%;
 
--aui-destructive: 0, 84%, 60%;
--aui-destructive-foreground: 0, 0%, 98%;
 
--aui-radius: 0.3rem;
}\`.replace(/\\s+/g, " ").trim(), body2.appendChild(styleEl2);
let styleEl3 = document.createElement("style");
styleEl3.innerText = \`
.tool_category_mention {
background-color: var(--accent-a3);
border-radius: var(--aui-radius);
}
div.aui-user-message-content {
border-radius: 1.25rem;
}
\`.replace(/\\s+/g, " ").trim(), body2.appendChild(styleEl3);
};
 
// src-copilot/frontend-chat/ChatApp.jsx
init_process();
 
// src-copilot/frontend-chat/ChatAppWindow.jsx
init_process();
 
// src-copilot/frontend-chat/hooks/useChatSuggestions.jsx
init_process();
var useChatSuggestions = (count = 2) => {
let [suggestions, setSuggestions] = React.useState([]), threadId = AssistantUI.useThreadListItemRuntime().getState().id;
return React.useEffect(() => {
try {
setSuggestions(getRandomSuggestions(count));
} catch (e) {
console.error(e);
}
}, [threadId]), suggestions;
}, allSuggestions = [
{
prompt: "@tasks Add shopping for groceries at evening today",
displayCondition: () => !0
},
{
prompt: "@tasks Summarize tasks for today",
displayCondition: () => !0
},
{
prompt: "@web Search for best song of current year",
displayCondition: () => !0
},
{
prompt: "@notes Provide summary of current note",
displayCondition: () => window.userData.currentNoteUUID !== null
},
{
prompt: "@notes Analyze & add appropriate tags to current note",
displayCondition: () => window.userData.currentNoteUUID !== null
},
{
prompt: "@help What are task domains?",
displayCondition: () => !0
}
], getRandomSuggestions = (count) => {
let validSuggestions = allSuggestions.filter((suggestion) => suggestion.displayCondition()), selectedIndices = [], result = [];
for (; selectedIndices.length < count && selectedIndices.length < validSuggestions.length; ) {
let randomIndex = Math.floor(Math.random() * validSuggestions.length);
selectedIndices.includes(randomIndex) || (selectedIndices.push(randomIndex), result.push(validSuggestions[randomIndex]));
}
return result.sort(
(a, b) => (
// Sort based on original index to maintain order
validSuggestions.indexOf(a) - validSuggestions.indexOf(b)
)
);
};
 
// src-copilot/frontend-chat/components/CustomComposer.jsx
init_process();
 
// src-copilot/frontend-chat/hooks/useTributeSetup.jsx
init_process();
var useTributeSetup = (textareaRef, toolCategoryNames) => {
let composerRuntime = AssistantUI.useComposerRuntime();
React.useEffect(() => {
if (!textareaRef.current) return;
let style = document.createElement("style");
style.textContent = \`
.tribute-container > ul {
background-color: #434A54;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
color: #FFFFFF;
margin: 10px;
padding: 0;
list-style: none;
}
.tribute-item {
padding: 8px;
cursor: pointer;
border-bottom: 1px solid #333333;
}
.tribute-item:hover {
background-color: #2d4759;
}
.tribute-item-selected {
background-color: #2d4759;
color: #FFFFFF;
}
\`, document.body.append(style);
let tribute = new window.Tribute({
trigger: "@",
values: toolCategoryNames.map((toolCategory) => ({
key: toolCategory,
value: toolCategory
})),
noMatchTemplate: null,
containerClass: "tribute-container",
itemClass: "tribute-item",
selectClass: "tribute-item-selected",
allowSpaces: !1,
menuItemLimit: 4,
replaceTextSuffix: " "
});
tribute.attach(textareaRef.current);
let tributeOnReplace = (event) => {
let currentValue = textareaRef.current.value;
composerRuntime.setText(currentValue);
};
return textareaRef.current.addEventListener("tribute-replaced", tributeOnReplace), () => {
textareaRef.current && (tribute.detach(textareaRef.current), textareaRef.current.removeEventListener("tribute-replaced", tributeOnReplace));
};
}, [textareaRef]);
};
 
// src-copilot/frontend-chat/tools-core/registry/ToolCategoryRegistry.js
init_process();
 
// src-copilot/frontend-chat/tools-core/registry/ToolRegistry.js
init_process();
 
// src-copilot/frontend-chat/tools/DeleteUserNotes.jsx
init_process();
 
// src-copilot/frontend-chat/components/tools-ui/ToolCardContainer.jsx
init_process();
var ToolCardContainer = ({ children }) => {
let { Card } = window.RadixUI;
return /* @__PURE__ */ React.createElement("div", { style: { height: "fit-content", marginBottom: "2px" } }, /* @__PURE__ */ React.createElement(Card, null, children));
};
 
// src-copilot/frontend-chat/components/tools-ui/ItemSelectionTable.jsx
init_process();
 
// node_modules/lodash-es/lodash.js
init_process();
 
// node_modules/lodash-es/isSymbol.js
init_process();
 
// node_modules/lodash-es/_baseGetTag.js
init_process();
 
// node_modules/lodash-es/_Symbol.js
init_process();
 
// node_modules/lodash-es/_root.js
init_process();
 
// node_modules/lodash-es/_freeGlobal.js
init_process();
var freeGlobal = typeof globalThis == "object" && globalThis && globalThis.Object === Object && globalThis, freeGlobal_default = freeGlobal;
 
// node_modules/lodash-es/_root.js
var freeSelf = typeof self == "object" && self && self.Object === Object && self, root = freeGlobal_default || freeSelf || Function("return this")(), root_default = root;
 
// node_modules/lodash-es/_Symbol.js
var Symbol2 = root_default.Symbol, Symbol_default = Symbol2;
 
// node_modules/lodash-es/_getRawTag.js
init_process();
var objectProto = Object.prototype, hasOwnProperty = objectProto.hasOwnProperty, nativeObjectToString = objectProto.toString, symToStringTag = Symbol_default ? Symbol_default.toStringTag : void 0;
function getRawTag(value) {
var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
try {
value[symToStringTag] = void 0;
var unmasked = !0;
} catch {
}
var result = nativeObjectToString.call(value);
return unmasked && (isOwn ? value[symToStringTag] = tag : delete value[symToStringTag]), result;
}
var getRawTag_default = getRawTag;
 
// node_modules/lodash-es/_objectToString.js
init_process();
var objectProto2 = Object.prototype, nativeObjectToString2 = objectProto2.toString;
function objectToString(value) {
return nativeObjectToString2.call(value);
}
var objectToString_default = objectToString;
 
// node_modules/lodash-es/_baseGetTag.js
var nullTag = "[object Null]", undefinedTag = "[object Undefined]", symToStringTag2 = Symbol_default ? Symbol_default.toStringTag : void 0;
function baseGetTag(value) {
return value == null ? value === void 0 ? undefinedTag : nullTag : symToStringTag2 && symToStringTag2 in Object(value) ? getRawTag_default(value) : objectToString_default(value);
}
var baseGetTag_default = baseGetTag;
 
// node_modules/lodash-es/isObjectLike.js
init_process();
function isObjectLike(value) {
return value != null && typeof value == "object";
}
var isObjectLike_default = isObjectLike;
 
// node_modules/lodash-es/isSymbol.js
var symbolTag = "[object Symbol]";
function isSymbol(value) {
return typeof value == "symbol" || isObjectLike_default(value) && baseGetTag_default(value) == symbolTag;
}
var isSymbol_default = isSymbol;
 
// node_modules/lodash-es/_baseToString.js
init_process();
 
// node_modules/lodash-es/_arrayMap.js
init_process();
function arrayMap(array, iteratee) {
for (var index = -1, length = array == null ? 0 : array.length, result = Array(length); ++index < length; )
result[index] = iteratee(array[index], index, array);
return result;
}
var arrayMap_default = arrayMap;
 
// node_modules/lodash-es/isArray.js
init_process();
var isArray = Array.isArray, isArray_default = isArray;
 
// node_modules/lodash-es/_baseToString.js
var INFINITY = 1 / 0, symbolProto = Symbol_default ? Symbol_default.prototype : void 0, symbolToString = symbolProto ? symbolProto.toString : void 0;
function baseToString(value) {
if (typeof value == "string")
return value;
if (isArray_default(value))
return arrayMap_default(value, baseToString) + "";
if (isSymbol_default(value))
return symbolToString ? symbolToString.call(value) : "";
var result = value + "";
return result == "0" && 1 / value == -INFINITY ? "-0" : result;
}
var baseToString_default = baseToString;
 
// node_modules/lodash-es/toInteger.js
init_process();
 
// node_modules/lodash-es/toFinite.js
init_process();
 
// node_modules/lodash-es/toNumber.js
init_process();
 
// node_modules/lodash-es/_baseTrim.js
init_process();
 
// node_modules/lodash-es/_trimmedEndIndex.js
init_process();
var reWhitespace = /\\s/;
function trimmedEndIndex(string) {
for (var index = string.length; index-- && reWhitespace.test(string.charAt(index)); )
;
return index;
}
var trimmedEndIndex_default = trimmedEndIndex;
 
// node_modules/lodash-es/_baseTrim.js
var reTrimStart = /^\\s+/;
function baseTrim(string) {
return string && string.slice(0, trimmedEndIndex_default(string) + 1).replace(reTrimStart, "");
}
var baseTrim_default = baseTrim;
 
// node_modules/lodash-es/isObject.js
init_process();
function isObject(value) {
var type = typeof value;
return value != null && (type == "object" || type == "function");
}
var isObject_default = isObject;
 
// node_modules/lodash-es/toNumber.js
var NAN = NaN, reIsBadHex = /^[-+]0x[0-9a-f]+$/i, reIsBinary = /^0b[01]+$/i, reIsOctal = /^0o[0-7]+$/i, freeParseInt = parseInt;
function toNumber(value) {
if (typeof value == "number")
return value;
if (isSymbol_default(value))
return NAN;
if (isObject_default(value)) {
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
value = isObject_default(other) ? other + "" : other;
}
if (typeof value != "string")
return value === 0 ? value : +value;
value = baseTrim_default(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
var toNumber_default = toNumber;
 
// node_modules/lodash-es/toFinite.js
var INFINITY2 = 1 / 0, MAX_INTEGER = 17976931348623157e292;
function toFinite(value) {
if (!value)
return value === 0 ? value : 0;
if (value = toNumber_default(value), value === INFINITY2 || value === -INFINITY2) {
var sign = value < 0 ? -1 : 1;
return sign * MAX_INTEGER;
}
return value === value ? value : 0;
}
var toFinite_default = toFinite;
 
// node_modules/lodash-es/toInteger.js
function toInteger(value) {
var result = toFinite_default(value), remainder = result % 1;
return result === result ? remainder ? result - remainder : result : 0;
}
var toInteger_default = toInteger;
 
// node_modules/lodash-es/identity.js
init_process();
function identity(value) {
return value;
}
var identity_default = identity;
 
// node_modules/lodash-es/_WeakMap.js
init_process();
 
// node_modules/lodash-es/_getNative.js
init_process();
 
// node_modules/lodash-es/_baseIsNative.js
init_process();
 
// node_modules/lodash-es/isFunction.js
init_process();
var asyncTag = "[object AsyncFunction]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
function isFunction(value) {
if (!isObject_default(value))
return !1;
var tag = baseGetTag_default(value);
return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}
var isFunction_default = isFunction;
 
// node_modules/lodash-es/_isMasked.js
init_process();
 
// node_modules/lodash-es/_coreJsData.js
init_process();
var coreJsData = root_default["__core-js_shared__"], coreJsData_default = coreJsData;
 
// node_modules/lodash-es/_isMasked.js
var maskSrcKey = function() {
var uid = /[^.]+$/.exec(coreJsData_default && coreJsData_default.keys && coreJsData_default.keys.IE_PROTO || "");
return uid ? "Symbol(src)_1." + uid : "";
}();
function isMasked(func) {
return !!maskSrcKey && maskSrcKey in func;
}
var isMasked_default = isMasked;
 
// node_modules/lodash-es/_toSource.js
init_process();
var funcProto = Function.prototype, funcToString = funcProto.toString;
function toSource(func) {
if (func != null) {
try {
return funcToString.call(func);
} catch {
}
try {
return func + "";
} catch {
}
}
return "";
}
var toSource_default = toSource;
 
// node_modules/lodash-es/_baseIsNative.js
var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g, reIsHostCtor = /^\\[object .+?Constructor\\]$/, funcProto2 = Function.prototype, objectProto3 = Object.prototype, funcToString2 = funcProto2.toString, hasOwnProperty2 = objectProto3.hasOwnProperty, reIsNative = RegExp(
"^" + funcToString2.call(hasOwnProperty2).replace(reRegExpChar, "\\\\$&").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, "$1.*?") + "$"
);
function baseIsNative(value) {
if (!isObject_default(value) || isMasked_default(value))
return !1;
var pattern = isFunction_default(value) ? reIsNative : reIsHostCtor;
return pattern.test(toSource_default(value));
}
var baseIsNative_default = baseIsNative;
 
// node_modules/lodash-es/_getValue.js
init_process();
function getValue(object, key) {
return object == null ? void 0 : object[key];
}
var getValue_default = getValue;
 
// node_modules/lodash-es/_getNative.js
function getNative(object, key) {
var value = getValue_default(object, key);
return baseIsNative_default(value) ? value : void 0;
}
var getNative_default = getNative;
 
// node_modules/lodash-es/_WeakMap.js
var WeakMap2 = getNative_default(root_default, "WeakMap"), WeakMap_default = WeakMap2;
 
// node_modules/lodash-es/noop.js
init_process();
function noop() {
}
var noop_default = noop;
 
// node_modules/lodash-es/_defineProperty.js
init_process();
var defineProperty = function() {
try {
var func = getNative_default(Object, "defineProperty");
return func({}, "", {}), func;
} catch {
}
}(), defineProperty_default = defineProperty;
 
// node_modules/lodash-es/_arrayIncludes.js
init_process();
 
// node_modules/lodash-es/_baseIndexOf.js
init_process();
 
// node_modules/lodash-es/_baseFindIndex.js
init_process();
function baseFindIndex(array, predicate, fromIndex, fromRight) {
for (var length = array.length, index = fromIndex + (fromRight ? 1 : -1); fromRight ? index-- : ++index < length; )
if (predicate(array[index], index, array))
return index;
return -1;
}
var baseFindIndex_default = baseFindIndex;
 
// node_modules/lodash-es/_baseIsNaN.js
init_process();
function baseIsNaN(value) {
return value !== value;
}
var baseIsNaN_default = baseIsNaN;
 
// node_modules/lodash-es/_strictIndexOf.js
init_process();
function strictIndexOf(array, value, fromIndex) {
for (var index = fromIndex - 1, length = array.length; ++index < length; )
if (array[index] === value)
return index;
return -1;
}
var strictIndexOf_default = strictIndexOf;
 
// node_modules/lodash-es/_baseIndexOf.js
function baseIndexOf(array, value, fromIndex) {
return value === value ? strictIndexOf_default(array, value, fromIndex) : baseFindIndex_default(array, baseIsNaN_default, fromIndex);
}
var baseIndexOf_default = baseIndexOf;
 
// node_modules/lodash-es/_arrayIncludes.js
function arrayIncludes(array, value) {
var length = array == null ? 0 : array.length;
return !!length && baseIndexOf_default(array, value, 0) > -1;
}
var arrayIncludes_default = arrayIncludes;
 
// node_modules/lodash-es/_isIndex.js
init_process();
var MAX_SAFE_INTEGER = 9007199254740991, reIsUint = /^(?:0|[1-9]\\d*)$/;
function isIndex(value, length) {
var type = typeof value;
return length = length == null ? MAX_SAFE_INTEGER : length, !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;
}
var isIndex_default = isIndex;
 
// node_modules/lodash-es/_assignValue.js
init_process();
 
// node_modules/lodash-es/_baseAssignValue.js
init_process();
function baseAssignValue(object, key, value) {
key == "__proto__" && defineProperty_default ? defineProperty_default(object, key, {
configurable: !0,
enumerable: !0,
value,
writable: !0
}) : object[key] = value;
}
var baseAssignValue_default = baseAssignValue;
 
// node_modules/lodash-es/eq.js
init_process();
function eq(value, other) {
return value === other || value !== value && other !== other;
}
var eq_default = eq;
 
// node_modules/lodash-es/_assignValue.js
var objectProto4 = Object.prototype, hasOwnProperty3 = objectProto4.hasOwnProperty;
function assignValue(object, key, value) {
var objValue = object[key];
(!(hasOwnProperty3.call(object, key) && eq_default(objValue, value)) || value === void 0 && !(key in object)) && baseAssignValue_default(object, key, value);
}
var assignValue_default = assignValue;
 
// node_modules/lodash-es/isArrayLike.js
init_process();
 
// node_modules/lodash-es/isLength.js
init_process();
var MAX_SAFE_INTEGER2 = 9007199254740991;
function isLength(value) {
return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2;
}
var isLength_default = isLength;
 
// node_modules/lodash-es/isArrayLike.js
function isArrayLike(value) {
return value != null && isLength_default(value.length) && !isFunction_default(value);
}
var isArrayLike_default = isArrayLike;
 
// node_modules/lodash-es/_isPrototype.js
init_process();
var objectProto5 = Object.prototype;
function isPrototype(value) {
var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto5;
return value === proto;
}
var isPrototype_default = isPrototype;
 
// node_modules/lodash-es/keys.js
init_process();
 
// node_modules/lodash-es/_arrayLikeKeys.js
init_process();
 
// node_modules/lodash-es/_baseTimes.js
init_process();
function baseTimes(n, iteratee) {
for (var index = -1, result = Array(n); ++index < n; )
result[index] = iteratee(index);
return result;
}
var baseTimes_default = baseTimes;
 
// node_modules/lodash-es/isArguments.js
init_process();
 
// node_modules/lodash-es/_baseIsArguments.js
init_process();
var argsTag = "[object Arguments]";
function baseIsArguments(value) {
return isObjectLike_default(value) && baseGetTag_default(value) == argsTag;
}
var baseIsArguments_default = baseIsArguments;
 
// node_modules/lodash-es/isArguments.js
var objectProto6 = Object.prototype, hasOwnProperty4 = objectProto6.hasOwnProperty, propertyIsEnumerable = objectProto6.propertyIsEnumerable, isArguments = baseIsArguments_default(/* @__PURE__ */ function() {
return arguments;
}()) ? baseIsArguments_default : function(value) {
return isObjectLike_default(value) && hasOwnProperty4.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
}, isArguments_default = isArguments;
 
// node_modules/lodash-es/isBuffer.js
init_process();
 
// node_modules/lodash-es/stubFalse.js
init_process();
function stubFalse() {
return !1;
}
var stubFalse_default = stubFalse;
 
// node_modules/lodash-es/isBuffer.js
var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports, freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module, moduleExports = freeModule && freeModule.exports === freeExports, Buffer2 = moduleExports ? root_default.Buffer : void 0, nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0, isBuffer = nativeIsBuffer || stubFalse_default, isBuffer_default = isBuffer;
 
// node_modules/lodash-es/isTypedArray.js
init_process();
 
// node_modules/lodash-es/_baseIsTypedArray.js
init_process();
var argsTag2 = "[object Arguments]", arrayTag = "[object Array]", boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", funcTag2 = "[object Function]", mapTag = "[object Map]", numberTag = "[object Number]", objectTag = "[object Object]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", weakMapTag = "[object WeakMap]", arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]", typedArrayTags = {};
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = !0;
typedArrayTags[argsTag2] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag2] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = !1;
function baseIsTypedArray(value) {
return isObjectLike_default(value) && isLength_default(value.length) && !!typedArrayTags[baseGetTag_default(value)];
}
var baseIsTypedArray_default = baseIsTypedArray;
 
// node_modules/lodash-es/_baseUnary.js
init_process();
function baseUnary(func) {
return function(value) {
return func(value);
};
}
var baseUnary_default = baseUnary;
 
// node_modules/lodash-es/_nodeUtil.js
init_process();
var freeExports2 = typeof exports == "object" && exports && !exports.nodeType && exports, freeModule2 = freeExports2 && typeof module == "object" && module && !module.nodeType && module, moduleExports2 = freeModule2 && freeModule2.exports === freeExports2, freeProcess = moduleExports2 && freeGlobal_default.process, nodeUtil = function() {
try {
var types = freeModule2 && freeModule2.require && freeModule2.require("util").types;
return types || freeProcess && freeProcess.binding && freeProcess.binding("util");
} catch {
}
}(), nodeUtil_default = nodeUtil;
 
// node_modules/lodash-es/isTypedArray.js
var nodeIsTypedArray = nodeUtil_default && nodeUtil_default.isTypedArray, isTypedArray = nodeIsTypedArray ? baseUnary_default(nodeIsTypedArray) : baseIsTypedArray_default, isTypedArray_default = isTypedArray;
 
// node_modules/lodash-es/_arrayLikeKeys.js
var objectProto7 = Object.prototype, hasOwnProperty5 = objectProto7.hasOwnProperty;
function arrayLikeKeys(value, inherited) {
var isArr = isArray_default(value), isArg = !isArr && isArguments_default(value), isBuff = !isArr && !isArg && isBuffer_default(value), isType = !isArr && !isArg && !isBuff && isTypedArray_default(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes_default(value.length, String) : [], length = result.length;
for (var key in value)
(inherited || hasOwnProperty5.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable \`arguments.length\` in strict mode.
(key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
isIndex_default(key, length))) && result.push(key);
return result;
}
var arrayLikeKeys_default = arrayLikeKeys;
 
// node_modules/lodash-es/_baseKeys.js
init_process();
 
// node_modules/lodash-es/_nativeKeys.js
init_process();
 
// node_modules/lodash-es/_overArg.js
init_process();
function overArg(func, transform) {
return function(arg) {
return func(transform(arg));
};
}
var overArg_default = overArg;
 
// node_modules/lodash-es/_nativeKeys.js
var nativeKeys = overArg_default(Object.keys, Object), nativeKeys_default = nativeKeys;
 
// node_modules/lodash-es/_baseKeys.js
var objectProto8 = Object.prototype, hasOwnProperty6 = objectProto8.hasOwnProperty;
function baseKeys(object) {
if (!isPrototype_default(object))
return nativeKeys_default(object);
var result = [];
for (var key in Object(object))
hasOwnProperty6.call(object, key) && key != "constructor" && result.push(key);
return result;
}
var baseKeys_default = baseKeys;
 
// node_modules/lodash-es/keys.js
function keys(object) {
return isArrayLike_default(object) ? arrayLikeKeys_default(object) : baseKeys_default(object);
}
var keys_default = keys;
 
// node_modules/lodash-es/get.js
init_process();
 
// node_modules/lodash-es/_baseGet.js
init_process();
 
// node_modules/lodash-es/_castPath.js
init_process();
 
// node_modules/lodash-es/_isKey.js
init_process();
var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|(["'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/, reIsPlainProp = /^\\w*$/;
function isKey(value, object) {
if (isArray_default(value))
return !1;
var type = typeof value;
return type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol_default(value) ? !0 : reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
}
var isKey_default = isKey;
 
// node_modules/lodash-es/_stringToPath.js
init_process();
 
// node_modules/lodash-es/_memoizeCapped.js
init_process();
 
// node_modules/lodash-es/memoize.js
init_process();
 
// node_modules/lodash-es/_MapCache.js
init_process();
 
// node_modules/lodash-es/_mapCacheClear.js
init_process();
 
// node_modules/lodash-es/_Hash.js
init_process();
 
// node_modules/lodash-es/_hashClear.js
init_process();
 
// node_modules/lodash-es/_nativeCreate.js
init_process();
var nativeCreate = getNative_default(Object, "create"), nativeCreate_default = nativeCreate;
 
// node_modules/lodash-es/_hashClear.js
function hashClear() {
this.__data__ = nativeCreate_default ? nativeCreate_default(null) : {}, this.size = 0;
}
var hashClear_default = hashClear;
 
// node_modules/lodash-es/_hashDelete.js
init_process();
function hashDelete(key) {
var result = this.has(key) && delete this.__data__[key];
return this.size -= result ? 1 : 0, result;
}
var hashDelete_default = hashDelete;
 
// node_modules/lodash-es/_hashGet.js
init_process();
var HASH_UNDEFINED = "__lodash_hash_undefined__", objectProto9 = Object.prototype, hasOwnProperty7 = objectProto9.hasOwnProperty;
function hashGet(key) {
var data = this.__data__;
if (nativeCreate_default) {
var result = data[key];
return result === HASH_UNDEFINED ? void 0 : result;
}
return hasOwnProperty7.call(data, key) ? data[key] : void 0;
}
var hashGet_default = hashGet;
 
// node_modules/lodash-es/_hashHas.js
init_process();
var objectProto10 = Object.prototype, hasOwnProperty8 = objectProto10.hasOwnProperty;
function hashHas(key) {
var data = this.__data__;
return nativeCreate_default ? data[key] !== void 0 : hasOwnProperty8.call(data, key);
}
var hashHas_default = hashHas;
 
// node_modules/lodash-es/_hashSet.js
init_process();
var HASH_UNDEFINED2 = "__lodash_hash_undefined__";
function hashSet(key, value) {
var data = this.__data__;
return this.size += this.has(key) ? 0 : 1, data[key] = nativeCreate_default && value === void 0 ? HASH_UNDEFINED2 : value, this;
}
var hashSet_default = hashSet;
 
// node_modules/lodash-es/_Hash.js
function Hash(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
for (this.clear(); ++index < length; ) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
Hash.prototype.clear = hashClear_default;
Hash.prototype.delete = hashDelete_default;
Hash.prototype.get = hashGet_default;
Hash.prototype.has = hashHas_default;
Hash.prototype.set = hashSet_default;
var Hash_default = Hash;
 
// node_modules/lodash-es/_ListCache.js
init_process();
 
// node_modules/lodash-es/_listCacheClear.js
init_process();
function listCacheClear() {
this.__data__ = [], this.size = 0;
}
var listCacheClear_default = listCacheClear;
 
// node_modules/lodash-es/_listCacheDelete.js
init_process();
 
// node_modules/lodash-es/_assocIndexOf.js
init_process();
function assocIndexOf(array, key) {
for (var length = array.length; length--; )
if (eq_default(array[length][0], key))
return length;
return -1;
}
var assocIndexOf_default = assocIndexOf;
 
// node_modules/lodash-es/_listCacheDelete.js
var arrayProto = Array.prototype, splice = arrayProto.splice;
function listCacheDelete(key) {
var data = this.__data__, index = assocIndexOf_default(data, key);
if (index < 0)
return !1;
var lastIndex = data.length - 1;
return index == lastIndex ? data.pop() : splice.call(data, index, 1), --this.size, !0;
}
var listCacheDelete_default = listCacheDelete;
 
// node_modules/lodash-es/_listCacheGet.js
init_process();
function listCacheGet(key) {
var data = this.__data__, index = assocIndexOf_default(data, key);
return index < 0 ? void 0 : data[index][1];
}
var listCacheGet_default = listCacheGet;
 
// node_modules/lodash-es/_listCacheHas.js
init_process();
function listCacheHas(key) {
return assocIndexOf_default(this.__data__, key) > -1;
}
var listCacheHas_default = listCacheHas;
 
// node_modules/lodash-es/_listCacheSet.js
init_process();
function listCacheSet(key, value) {
var data = this.__data__, index = assocIndexOf_default(data, key);
return index < 0 ? (++this.size, data.push([key, value])) : data[index][1] = value, this;
}
var listCacheSet_default = listCacheSet;
 
// node_modules/lodash-es/_ListCache.js
function ListCache(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
for (this.clear(); ++index < length; ) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
ListCache.prototype.clear = listCacheClear_default;
ListCache.prototype.delete = listCacheDelete_default;
ListCache.prototype.get = listCacheGet_default;
ListCache.prototype.has = listCacheHas_default;
ListCache.prototype.set = listCacheSet_default;
var ListCache_default = ListCache;
 
// node_modules/lodash-es/_Map.js
init_process();
var Map2 = getNative_default(root_default, "Map"), Map_default = Map2;
 
// node_modules/lodash-es/_mapCacheClear.js
function mapCacheClear() {
this.size = 0, this.__data__ = {
hash: new Hash_default(),
map: new (Map_default || ListCache_default)(),
string: new Hash_default()
};
}
var mapCacheClear_default = mapCacheClear;
 
// node_modules/lodash-es/_mapCacheDelete.js
init_process();
 
// node_modules/lodash-es/_getMapData.js
init_process();
 
// node_modules/lodash-es/_isKeyable.js
init_process();
function isKeyable(value) {
var type = typeof value;
return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
}
var isKeyable_default = isKeyable;
 
// node_modules/lodash-es/_getMapData.js
function getMapData(map, key) {
var data = map.__data__;
return isKeyable_default(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
}
var getMapData_default = getMapData;
 
// node_modules/lodash-es/_mapCacheDelete.js
function mapCacheDelete(key) {
var result = getMapData_default(this, key).delete(key);
return this.size -= result ? 1 : 0, result;
}
var mapCacheDelete_default = mapCacheDelete;
 
// node_modules/lodash-es/_mapCacheGet.js
init_process();
function mapCacheGet(key) {
return getMapData_default(this, key).get(key);
}
var mapCacheGet_default = mapCacheGet;
 
// node_modules/lodash-es/_mapCacheHas.js
init_process();
function mapCacheHas(key) {
return getMapData_default(this, key).has(key);
}
var mapCacheHas_default = mapCacheHas;
 
// node_modules/lodash-es/_mapCacheSet.js
init_process();
function mapCacheSet(key, value) {
var data = getMapData_default(this, key), size = data.size;
return data.set(key, value), this.size += data.size == size ? 0 : 1, this;
}
var mapCacheSet_default = mapCacheSet;
 
// node_modules/lodash-es/_MapCache.js
function MapCache(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
for (this.clear(); ++index < length; ) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
MapCache.prototype.clear = mapCacheClear_default;
MapCache.prototype.delete = mapCacheDelete_default;
MapCache.prototype.get = mapCacheGet_default;
MapCache.prototype.has = mapCacheHas_default;
MapCache.prototype.set = mapCacheSet_default;
var MapCache_default = MapCache;
 
// node_modules/lodash-es/memoize.js
var FUNC_ERROR_TEXT = "Expected a function";
function memoize(func, resolver) {
if (typeof func != "function" || resolver != null && typeof resolver != "function")
throw new TypeError(FUNC_ERROR_TEXT);
var memoized = function() {
var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
if (cache.has(key))
return cache.get(key);
var result = func.apply(this, args);
return memoized.cache = cache.set(key, result) || cache, result;
};
return memoized.cache = new (memoize.Cache || MapCache_default)(), memoized;
}
memoize.Cache = MapCache_default;
var memoize_default = memoize;
 
// node_modules/lodash-es/_memoizeCapped.js
var MAX_MEMOIZE_SIZE = 500;
function memoizeCapped(func) {
var result = memoize_default(func, function(key) {
return cache.size === MAX_MEMOIZE_SIZE && cache.clear(), key;
}), cache = result.cache;
return result;
}
var memoizeCapped_default = memoizeCapped;
 
// node_modules/lodash-es/_stringToPath.js
var rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|(["'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g, reEscapeChar = /\\\\(\\\\)?/g, stringToPath = memoizeCapped_default(function(string) {
var result = [];
return string.charCodeAt(0) === 46 && result.push(""), string.replace(rePropName, function(match, number, quote, subString) {
result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match);
}), result;
}), stringToPath_default = stringToPath;
 
// node_modules/lodash-es/toString.js
init_process();
function toString(value) {
return value == null ? "" : baseToString_default(value);
}
var toString_default = toString;
 
// node_modules/lodash-es/_castPath.js
function castPath(value, object) {
return isArray_default(value) ? value : isKey_default(value, object) ? [value] : stringToPath_default(toString_default(value));
}
var castPath_default = castPath;
 
// node_modules/lodash-es/_toKey.js
init_process();
var INFINITY3 = 1 / 0;
function toKey(value) {
if (typeof value == "string" || isSymbol_default(value))
return value;
var result = value + "";
return result == "0" && 1 / value == -INFINITY3 ? "-0" : result;
}
var toKey_default = toKey;
 
// node_modules/lodash-es/_baseGet.js
function baseGet(object, path) {
path = castPath_default(path, object);
for (var index = 0, length = path.length; object != null && index < length; )
object = object[toKey_default(path[index++])];
return index && index == length ? object : void 0;
}
var baseGet_default = baseGet;
 
// node_modules/lodash-es/get.js
function get(object, path, defaultValue) {
var result = object == null ? void 0 : baseGet_default(object, path);
return result === void 0 ? defaultValue : result;
}
var get_default = get;
 
// node_modules/lodash-es/_arrayPush.js
init_process();
function arrayPush(array, values) {
for (var index = -1, length = values.length, offset = array.length; ++index < length; )
array[offset + index] = values[index];
return array;
}
var arrayPush_default = arrayPush;
 
// node_modules/lodash-es/capitalize.js
init_process();
 
// node_modules/lodash-es/upperFirst.js
init_process();
 
// node_modules/lodash-es/_createCaseFirst.js
init_process();
 
// node_modules/lodash-es/_castSlice.js
init_process();
 
// node_modules/lodash-es/_baseSlice.js
init_process();
function baseSlice(array, start, end) {
var index = -1, length = array.length;
start < 0 && (start = -start > length ? 0 : length + start), end = end > length ? length : end, end < 0 && (end += length), length = start > end ? 0 : end - start >>> 0, start >>>= 0;
for (var result = Array(length); ++index < length; )
result[index] = array[index + start];
return result;
}
var baseSlice_default = baseSlice;
 
// node_modules/lodash-es/_castSlice.js
function castSlice(array, start, end) {
var length = array.length;
return end = end === void 0 ? length : end, !start && end >= length ? array : baseSlice_default(array, start, end);
}
var castSlice_default = castSlice;
 
// node_modules/lodash-es/_hasUnicode.js
init_process();
var rsAstralRange = "\\\\ud800-\\\\udfff", rsComboMarksRange = "\\\\u0300-\\\\u036f", reComboHalfMarksRange = "\\\\ufe20-\\\\ufe2f", rsComboSymbolsRange = "\\\\u20d0-\\\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = "\\\\ufe0e\\\\ufe0f", rsZWJ = "\\\\u200d", reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]");
function hasUnicode(string) {
return reHasUnicode.test(string);
}
var hasUnicode_default = hasUnicode;
 
// node_modules/lodash-es/_stringToArray.js
init_process();
 
// node_modules/lodash-es/_asciiToArray.js
init_process();
function asciiToArray(string) {
return string.split("");
}
var asciiToArray_default = asciiToArray;
 
// node_modules/lodash-es/_unicodeToArray.js
init_process();
var rsAstralRange2 = "\\\\ud800-\\\\udfff", rsComboMarksRange2 = "\\\\u0300-\\\\u036f", reComboHalfMarksRange2 = "\\\\ufe20-\\\\ufe2f", rsComboSymbolsRange2 = "\\\\u20d0-\\\\u20ff", rsComboRange2 = rsComboMarksRange2 + reComboHalfMarksRange2 + rsComboSymbolsRange2, rsVarRange2 = "\\\\ufe0e\\\\ufe0f", rsAstral = "[" + rsAstralRange2 + "]", rsCombo = "[" + rsComboRange2 + "]", rsFitz = "\\\\ud83c[\\\\udffb-\\\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange2 + "]", rsRegional = "(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}", rsSurrPair = "[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]", rsZWJ2 = "\\\\u200d", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange2 + "]?", rsOptJoin = "(?:" + rsZWJ2 + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")", reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
function unicodeToArray(string) {
return string.match(reUnicode) || [];
}
var unicodeToArray_default = unicodeToArray;
 
// node_modules/lodash-es/_stringToArray.js
function stringToArray(string) {
return hasUnicode_default(string) ? unicodeToArray_default(string) : asciiToArray_default(string);
}
var stringToArray_default = stringToArray;
 
// node_modules/lodash-es/_createCaseFirst.js
function createCaseFirst(methodName) {
return function(string) {
string = toString_default(string);
var strSymbols = hasUnicode_default(string) ? stringToArray_default(string) : void 0, chr = strSymbols ? strSymbols[0] : string.charAt(0), trailing = strSymbols ? castSlice_default(strSymbols, 1).join("") : string.slice(1);
return chr[methodName]() + trailing;
};
}
var createCaseFirst_default = createCaseFirst;
 
// node_modules/lodash-es/upperFirst.js
var upperFirst = createCaseFirst_default("toUpperCase"), upperFirst_default = upperFirst;
 
// node_modules/lodash-es/capitalize.js
function capitalize(string) {
return upperFirst_default(toString_default(string).toLowerCase());
}
var capitalize_default = capitalize;
 
// node_modules/lodash-es/_Stack.js
init_process();
 
// node_modules/lodash-es/_stackClear.js
init_process();
function stackClear() {
this.__data__ = new ListCache_default(), this.size = 0;
}
var stackClear_default = stackClear;
 
// node_modules/lodash-es/_stackDelete.js
init_process();
function stackDelete(key) {
var data = this.__data__, result = data.delete(key);
return this.size = data.size, result;
}
var stackDelete_default = stackDelete;
 
// node_modules/lodash-es/_stackGet.js
init_process();
function stackGet(key) {
return this.__data__.get(key);
}
var stackGet_default = stackGet;
 
// node_modules/lodash-es/_stackHas.js
init_process();
function stackHas(key) {
return this.__data__.has(key);
}
var stackHas_default = stackHas;
 
// node_modules/lodash-es/_stackSet.js
init_process();
var LARGE_ARRAY_SIZE = 200;
function stackSet(key, value) {
var data = this.__data__;
if (data instanceof ListCache_default) {
var pairs = data.__data__;
if (!Map_default || pairs.length < LARGE_ARRAY_SIZE - 1)
return pairs.push([key, value]), this.size = ++data.size, this;
data = this.__data__ = new MapCache_default(pairs);
}
return data.set(key, value), this.size = data.size, this;
}
var stackSet_default = stackSet;
 
// node_modules/lodash-es/_Stack.js
function Stack(entries) {
var data = this.__data__ = new ListCache_default(entries);
this.size = data.size;
}
Stack.prototype.clear = stackClear_default;
Stack.prototype.delete = stackDelete_default;
Stack.prototype.get = stackGet_default;
Stack.prototype.has = stackHas_default;
Stack.prototype.set = stackSet_default;
var Stack_default = Stack;
 
// node_modules/lodash-es/_getSymbols.js
init_process();
 
// node_modules/lodash-es/_arrayFilter.js
init_process();
function arrayFilter(array, predicate) {
for (var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; ++index < length; ) {
var value = array[index];
predicate(value, index, array) && (result[resIndex++] = value);
}
return result;
}
var arrayFilter_default = arrayFilter;
 
// node_modules/lodash-es/stubArray.js
init_process();
function stubArray() {
return [];
}
var stubArray_default = stubArray;
 
// node_modules/lodash-es/_getSymbols.js
var objectProto11 = Object.prototype, propertyIsEnumerable2 = objectProto11.propertyIsEnumerable, nativeGetSymbols = Object.getOwnPropertySymbols, getSymbols = nativeGetSymbols ? function(object) {
return object == null ? [] : (object = Object(object), arrayFilter_default(nativeGetSymbols(object), function(symbol) {
return propertyIsEnumerable2.call(object, symbol);
}));
} : stubArray_default, getSymbols_default = getSymbols;
 
// node_modules/lodash-es/_getAllKeys.js
init_process();
 
// node_modules/lodash-es/_baseGetAllKeys.js
init_process();
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
var result = keysFunc(object);
return isArray_default(object) ? result : arrayPush_default(result, symbolsFunc(object));
}
var baseGetAllKeys_default = baseGetAllKeys;
 
// node_modules/lodash-es/_getAllKeys.js
function getAllKeys(object) {
return baseGetAllKeys_default(object, keys_default, getSymbols_default);
}
var getAllKeys_default = getAllKeys;
 
// node_modules/lodash-es/_getTag.js
init_process();
 
// node_modules/lodash-es/_DataView.js
init_process();
var DataView = getNative_default(root_default, "DataView"), DataView_default = DataView;
 
// node_modules/lodash-es/_Promise.js
init_process();
var Promise2 = getNative_default(root_default, "Promise"), Promise_default = Promise2;
 
// node_modules/lodash-es/_Set.js
init_process();
var Set2 = getNative_default(root_default, "Set"), Set_default = Set2;
 
// node_modules/lodash-es/_getTag.js
var mapTag2 = "[object Map]", objectTag2 = "[object Object]", promiseTag = "[object Promise]", setTag2 = "[object Set]", weakMapTag2 = "[object WeakMap]", dataViewTag2 = "[object DataView]", dataViewCtorString = toSource_default(DataView_default), mapCtorString = toSource_default(Map_default), promiseCtorString = toSource_default(Promise_default), setCtorString = toSource_default(Set_default), weakMapCtorString = toSource_default(WeakMap_default), getTag = baseGetTag_default;
(DataView_default && getTag(new DataView_default(new ArrayBuffer(1))) != dataViewTag2 || Map_default && getTag(new Map_default()) != mapTag2 || Promise_default && getTag(Promise_default.resolve()) != promiseTag || Set_default && getTag(new Set_default()) != setTag2 || WeakMap_default && getTag(new WeakMap_default()) != weakMapTag2) && (getTag = function(value) {
var result = baseGetTag_default(value), Ctor = result == objectTag2 ? value.constructor : void 0, ctorString = Ctor ? toSource_default(Ctor) : "";
if (ctorString)
switch (ctorString) {
case dataViewCtorString:
return dataViewTag2;
case mapCtorString:
return mapTag2;
case promiseCtorString:
return promiseTag;
case setCtorString:
return setTag2;
case weakMapCtorString:
return weakMapTag2;
}
return result;
});
var getTag_default = getTag;
 
// node_modules/lodash-es/_Uint8Array.js
init_process();
var Uint8Array2 = root_default.Uint8Array, Uint8Array_default = Uint8Array2;
 
// node_modules/lodash-es/_baseIteratee.js
init_process();
 
// node_modules/lodash-es/_baseMatches.js
init_process();
 
// node_modules/lodash-es/_baseIsMatch.js
init_process();
 
// node_modules/lodash-es/_baseIsEqual.js
init_process();
 
// node_modules/lodash-es/_baseIsEqualDeep.js
init_process();
 
// node_modules/lodash-es/_equalArrays.js
init_process();
 
// node_modules/lodash-es/_SetCache.js
init_process();
 
// node_modules/lodash-es/_setCacheAdd.js
init_process();
var HASH_UNDEFINED3 = "__lodash_hash_undefined__";
function setCacheAdd(value) {
return this.__data__.set(value, HASH_UNDEFINED3), this;
}
var setCacheAdd_default = setCacheAdd;
 
// node_modules/lodash-es/_setCacheHas.js
init_process();
function setCacheHas(value) {
return this.__data__.has(value);
}
var setCacheHas_default = setCacheHas;
 
// node_modules/lodash-es/_SetCache.js
function SetCache(values) {
var index = -1, length = values == null ? 0 : values.length;
for (this.__data__ = new MapCache_default(); ++index < length; )
this.add(values[index]);
}
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd_default;
SetCache.prototype.has = setCacheHas_default;
var SetCache_default = SetCache;
 
// node_modules/lodash-es/_arraySome.js
init_process();
function arraySome(array, predicate) {
for (var index = -1, length = array == null ? 0 : array.length; ++index < length; )
if (predicate(array[index], index, array))
return !0;
return !1;
}
var arraySome_default = arraySome;
 
// node_modules/lodash-es/_cacheHas.js
init_process();
function cacheHas(cache, key) {
return cache.has(key);
}
var cacheHas_default = cacheHas;
 
// node_modules/lodash-es/_equalArrays.js
var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2;
function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length;
if (arrLength != othLength && !(isPartial && othLength > arrLength))
return !1;
var arrStacked = stack.get(array), othStacked = stack.get(other);
if (arrStacked && othStacked)
return arrStacked == other && othStacked == array;
var index = -1, result = !0, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache_default() : void 0;
for (stack.set(array, other), stack.set(other, array); ++index < arrLength; ) {
var arrValue = array[index], othValue = other[index];
if (customizer)
var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
if (compared !== void 0) {
if (compared)
continue;
result = !1;
break;
}
if (seen) {
if (!arraySome_default(other, function(othValue2, othIndex) {
if (!cacheHas_default(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack)))
return seen.push(othIndex);
})) {
result = !1;
break;
}
} else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
result = !1;
break;
}
}
return stack.delete(array), stack.delete(other), result;
}
var equalArrays_default = equalArrays;
 
// node_modules/lodash-es/_equalByTag.js
init_process();
 
// node_modules/lodash-es/_mapToArray.js
init_process();
function mapToArray(map) {
var index = -1, result = Array(map.size);
return map.forEach(function(value, key) {
result[++index] = [key, value];
}), result;
}
var mapToArray_default = mapToArray;
 
// node_modules/lodash-es/_setToArray.js
init_process();
function setToArray(set2) {
var index = -1, result = Array(set2.size);
return set2.forEach(function(value) {
result[++index] = value;
}), result;
}
var setToArray_default = setToArray;
 
// node_modules/lodash-es/_equalByTag.js
var COMPARE_PARTIAL_FLAG2 = 1, COMPARE_UNORDERED_FLAG2 = 2, boolTag2 = "[object Boolean]", dateTag2 = "[object Date]", errorTag2 = "[object Error]", mapTag3 = "[object Map]", numberTag2 = "[object Number]", regexpTag2 = "[object RegExp]", setTag3 = "[object Set]", stringTag2 = "[object String]", symbolTag2 = "[object Symbol]", arrayBufferTag2 = "[object ArrayBuffer]", dataViewTag3 = "[object DataView]", symbolProto2 = Symbol_default ? Symbol_default.prototype : void 0, symbolValueOf = symbolProto2 ? symbolProto2.valueOf : void 0;
function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
switch (tag) {
case dataViewTag3:
if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset)
return !1;
object = object.buffer, other = other.buffer;
case arrayBufferTag2:
return !(object.byteLength != other.byteLength || !equalFunc(new Uint8Array_default(object), new Uint8Array_default(other)));
case boolTag2:
case dateTag2:
case numberTag2:
return eq_default(+object, +other);
case errorTag2:
return object.name == other.name && object.message == other.message;
case regexpTag2:
case stringTag2:
return object == other + "";
case mapTag3:
var convert2 = mapToArray_default;
case setTag3:
var isPartial = bitmask & COMPARE_PARTIAL_FLAG2;
if (convert2 || (convert2 = setToArray_default), object.size != other.size && !isPartial)
return !1;
var stacked = stack.get(object);
if (stacked)
return stacked == other;
bitmask |= COMPARE_UNORDERED_FLAG2, stack.set(object, other);
var result = equalArrays_default(convert2(object), convert2(other), bitmask, customizer, equalFunc, stack);
return stack.delete(object), result;
case symbolTag2:
if (symbolValueOf)
return symbolValueOf.call(object) == symbolValueOf.call(other);
}
return !1;
}
var equalByTag_default = equalByTag;
 
// node_modules/lodash-es/_equalObjects.js
init_process();
var COMPARE_PARTIAL_FLAG3 = 1, objectProto12 = Object.prototype, hasOwnProperty9 = objectProto12.hasOwnProperty;
function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG3, objProps = getAllKeys_default(object), objLength = objProps.length, othProps = getAllKeys_default(other), othLength = othProps.length;
if (objLength != othLength && !isPartial)
return !1;
for (var index = objLength; index--; ) {
var key = objProps[index];
if (!(isPartial ? key in other : hasOwnProperty9.call(other, key)))
return !1;
}
var objStacked = stack.get(object), othStacked = stack.get(other);
if (objStacked && othStacked)
return objStacked == other && othStacked == object;
var result = !0;
stack.set(object, other), stack.set(other, object);
for (var skipCtor = isPartial; ++index < objLength; ) {
key = objProps[index];
var objValue = object[key], othValue = other[key];
if (customizer)
var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
result = !1;
break;
}
skipCtor || (skipCtor = key == "constructor");
}
if (result && !skipCtor) {
var objCtor = object.constructor, othCtor = other.constructor;
objCtor != othCtor && "constructor" in object && "constructor" in other && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor) && (result = !1);
}
return stack.delete(object), stack.delete(other), result;
}
var equalObjects_default = equalObjects;
 
// node_modules/lodash-es/_baseIsEqualDeep.js
var COMPARE_PARTIAL_FLAG4 = 1, argsTag3 = "[object Arguments]", arrayTag2 = "[object Array]", objectTag3 = "[object Object]", objectProto13 = Object.prototype, hasOwnProperty10 = objectProto13.hasOwnProperty;
function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
var objIsArr = isArray_default(object), othIsArr = isArray_default(other), objTag = objIsArr ? arrayTag2 : getTag_default(object), othTag = othIsArr ? arrayTag2 : getTag_default(other);
objTag = objTag == argsTag3 ? objectTag3 : objTag, othTag = othTag == argsTag3 ? objectTag3 : othTag;
var objIsObj = objTag == objectTag3, othIsObj = othTag == objectTag3, isSameTag = objTag == othTag;
if (isSameTag && isBuffer_default(object)) {
if (!isBuffer_default(other))
return !1;
objIsArr = !0, objIsObj = !1;
}
if (isSameTag && !objIsObj)
return stack || (stack = new Stack_default()), objIsArr || isTypedArray_default(object) ? equalArrays_default(object, other, bitmask, customizer, equalFunc, stack) : equalByTag_default(object, other, objTag, bitmask, customizer, equalFunc, stack);
if (!(bitmask & COMPARE_PARTIAL_FLAG4)) {
var objIsWrapped = objIsObj && hasOwnProperty10.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty10.call(other, "__wrapped__");
if (objIsWrapped || othIsWrapped) {
var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
return stack || (stack = new Stack_default()), equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
}
}
return isSameTag ? (stack || (stack = new Stack_default()), equalObjects_default(object, other, bitmask, customizer, equalFunc, stack)) : !1;
}
var baseIsEqualDeep_default = baseIsEqualDeep;
 
// node_modules/lodash-es/_baseIsEqual.js
function baseIsEqual(value, other, bitmask, customizer, stack) {
return value === other ? !0 : value == null || other == null || !isObjectLike_default(value) && !isObjectLike_default(other) ? value !== value && other !== other : baseIsEqualDeep_default(value, other, bitmask, customizer, baseIsEqual, stack);
}
var baseIsEqual_default = baseIsEqual;
 
// node_modules/lodash-es/_baseIsMatch.js
var COMPARE_PARTIAL_FLAG5 = 1, COMPARE_UNORDERED_FLAG3 = 2;
function baseIsMatch(object, source, matchData, customizer) {
var index = matchData.length, length = index, noCustomizer = !customizer;
if (object == null)
return !length;
for (object = Object(object); index--; ) {
var data = matchData[index];
if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object))
return !1;
}
for (; ++index < length; ) {
data = matchData[index];
var key = data[0], objValue = object[key], srcValue = data[1];
if (noCustomizer && data[2]) {
if (objValue === void 0 && !(key in object))
return !1;
} else {
var stack = new Stack_default();
if (customizer)
var result = customizer(objValue, srcValue, key, object, source, stack);
if (!(result === void 0 ? baseIsEqual_default(srcValue, objValue, COMPARE_PARTIAL_FLAG5 | COMPARE_UNORDERED_FLAG3, customizer, stack) : result))
return !1;
}
}
return !0;
}
var baseIsMatch_default = baseIsMatch;
 
// node_modules/lodash-es/_getMatchData.js
init_process();
 
// node_modules/lodash-es/_isStrictComparable.js
init_process();
function isStrictComparable(value) {
return value === value && !isObject_default(value);
}
var isStrictComparable_default = isStrictComparable;
 
// node_modules/lodash-es/_getMatchData.js
function getMatchData(object) {
for (var result = keys_default(object), length = result.length; length--; ) {
var key = result[length], value = object[key];
result[length] = [key, value, isStrictComparable_default(value)];
}
return result;
}
var getMatchData_default = getMatchData;
 
// node_modules/lodash-es/_matchesStrictComparable.js
init_process();
function matchesStrictComparable(key, srcValue) {
return function(object) {
return object == null ? !1 : object[key] === srcValue && (srcValue !== void 0 || key in Object(object));
};
}
var matchesStrictComparable_default = matchesStrictComparable;
 
// node_modules/lodash-es/_baseMatches.js
function baseMatches(source) {
var matchData = getMatchData_default(source);
return matchData.length == 1 && matchData[0][2] ? matchesStrictComparable_default(matchData[0][0], matchData[0][1]) : function(object) {
return object === source || baseIsMatch_default(object, source, matchData);
};
}
var baseMatches_default = baseMatches;
 
// node_modules/lodash-es/_baseMatchesProperty.js
init_process();
 
// node_modules/lodash-es/hasIn.js
init_process();
 
// node_modules/lodash-es/_baseHasIn.js
init_process();
function baseHasIn(object, key) {
return object != null && key in Object(object);
}
var baseHasIn_default = baseHasIn;
 
// node_modules/lodash-es/_hasPath.js
init_process();
function hasPath(object, path, hasFunc) {
path = castPath_default(path, object);
for (var index = -1, length = path.length, result = !1; ++index < length; ) {
var key = toKey_default(path[index]);
if (!(result = object != null && hasFunc(object, key)))
break;
object = object[key];
}
return result || ++index != length ? result : (length = object == null ? 0 : object.length, !!length && isLength_default(length) && isIndex_default(key, length) && (isArray_default(object) || isArguments_default(object)));
}
var hasPath_default = hasPath;
 
// node_modules/lodash-es/hasIn.js
function hasIn(object, path) {
return object != null && hasPath_default(object, path, baseHasIn_default);
}
var hasIn_default = hasIn;
 
// node_modules/lodash-es/_baseMatchesProperty.js
var COMPARE_PARTIAL_FLAG6 = 1, COMPARE_UNORDERED_FLAG4 = 2;
function baseMatchesProperty(path, srcValue) {
return isKey_default(path) && isStrictComparable_default(srcValue) ? matchesStrictComparable_default(toKey_default(path), srcValue) : function(object) {
var objValue = get_default(object, path);
return objValue === void 0 && objValue === srcValue ? hasIn_default(object, path) : baseIsEqual_default(srcValue, objValue, COMPARE_PARTIAL_FLAG6 | COMPARE_UNORDERED_FLAG4);
};
}
var baseMatchesProperty_default = baseMatchesProperty;
 
// node_modules/lodash-es/property.js
init_process();
 
// node_modules/lodash-es/_baseProperty.js
init_process();
function baseProperty(key) {
return function(object) {
return object == null ? void 0 : object[key];
};
}
var baseProperty_default = baseProperty;
 
// node_modules/lodash-es/_basePropertyDeep.js
init_process();
function basePropertyDeep(path) {
return function(object) {
return baseGet_default(object, path);
};
}
var basePropertyDeep_default = basePropertyDeep;
 
// node_modules/lodash-es/property.js
function property(path) {
return isKey_default(path) ? baseProperty_default(toKey_default(path)) : basePropertyDeep_default(path);
}
var property_default = property;
 
// node_modules/lodash-es/_baseIteratee.js
function baseIteratee(value) {
return typeof value == "function" ? value : value == null ? identity_default : typeof value == "object" ? isArray_default(value) ? baseMatchesProperty_default(value[0], value[1]) : baseMatches_default(value) : property_default(value);
}
var baseIteratee_default = baseIteratee;
 
// node_modules/lodash-es/_arrayIncludesWith.js
init_process();
function arrayIncludesWith(array, value, comparator) {
for (var index = -1, length = array == null ? 0 : array.length; ++index < length; )
if (comparator(value, array[index]))
return !0;
return !1;
}
var arrayIncludesWith_default = arrayIncludesWith;
 
// node_modules/lodash-es/isEqual.js
init_process();
function isEqual(value, other) {
return baseIsEqual_default(value, other);
}
var isEqual_default = isEqual;
 
// node_modules/lodash-es/isRegExp.js
init_process();
 
// node_modules/lodash-es/_baseIsRegExp.js
init_process();
var regexpTag3 = "[object RegExp]";
function baseIsRegExp(value) {
return isObjectLike_default(value) && baseGetTag_default(value) == regexpTag3;
}
var baseIsRegExp_default = baseIsRegExp;
 
// node_modules/lodash-es/isRegExp.js
var nodeIsRegExp = nodeUtil_default && nodeUtil_default.isRegExp, isRegExp = nodeIsRegExp ? baseUnary_default(nodeIsRegExp) : baseIsRegExp_default, isRegExp_default = isRegExp;
 
// node_modules/lodash-es/_baseSet.js
init_process();
function baseSet(object, path, value, customizer) {
if (!isObject_default(object))
return object;
path = castPath_default(path, object);
for (var index = -1, length = path.length, lastIndex = length - 1, nested = object; nested != null && ++index < length; ) {
var key = toKey_default(path[index]), newValue = value;
if (key === "__proto__" || key === "constructor" || key === "prototype")
return object;
if (index != lastIndex) {
var objValue = nested[key];
newValue = customizer ? customizer(objValue, key, nested) : void 0, newValue === void 0 && (newValue = isObject_default(objValue) ? objValue : isIndex_default(path[index + 1]) ? [] : {});
}
assignValue_default(nested, key, newValue), nested = nested[key];
}
return object;
}
var baseSet_default = baseSet;
 
// node_modules/lodash-es/_stringSize.js
init_process();
 
// node_modules/lodash-es/_asciiSize.js
init_process();
var asciiSize = baseProperty_default("length"), asciiSize_default = asciiSize;
 
// node_modules/lodash-es/_unicodeSize.js
init_process();
var rsAstralRange3 = "\\\\ud800-\\\\udfff", rsComboMarksRange3 = "\\\\u0300-\\\\u036f", reComboHalfMarksRange3 = "\\\\ufe20-\\\\ufe2f", rsComboSymbolsRange3 = "\\\\u20d0-\\\\u20ff", rsComboRange3 = rsComboMarksRange3 + reComboHalfMarksRange3 + rsComboSymbolsRange3, rsVarRange3 = "\\\\ufe0e\\\\ufe0f", rsAstral2 = "[" + rsAstralRange3 + "]", rsCombo2 = "[" + rsComboRange3 + "]", rsFitz2 = "\\\\ud83c[\\\\udffb-\\\\udfff]", rsModifier2 = "(?:" + rsCombo2 + "|" + rsFitz2 + ")", rsNonAstral2 = "[^" + rsAstralRange3 + "]", rsRegional2 = "(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}", rsSurrPair2 = "[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]", rsZWJ3 = "\\\\u200d", reOptMod2 = rsModifier2 + "?", rsOptVar2 = "[" + rsVarRange3 + "]?", rsOptJoin2 = "(?:" + rsZWJ3 + "(?:" + [rsNonAstral2, rsRegional2, rsSurrPair2].join("|") + ")" + rsOptVar2 + reOptMod2 + ")*", rsSeq2 = rsOptVar2 + reOptMod2 + rsOptJoin2, rsSymbol2 = "(?:" + [rsNonAstral2 + rsCombo2 + "?", rsCombo2, rsRegional2, rsSurrPair2, rsAstral2].join("|") + ")", reUnicode2 = RegExp(rsFitz2 + "(?=" + rsFitz2 + ")|" + rsSymbol2 + rsSeq2, "g");
function unicodeSize(string) {
for (var result = reUnicode2.lastIndex = 0; reUnicode2.test(string); )
++result;
return result;
}
var unicodeSize_default = unicodeSize;
 
// node_modules/lodash-es/_stringSize.js
function stringSize(string) {
return hasUnicode_default(string) ? unicodeSize_default(string) : asciiSize_default(string);
}
var stringSize_default = stringSize;
 
// node_modules/lodash-es/set.js
init_process();
function set(object, path, value) {
return object == null ? object : baseSet_default(object, path, value);
}
var set_default = set;
 
// node_modules/lodash-es/truncate.js
init_process();
var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "...", reFlags = /\\w*$/;
function truncate(string, options) {
var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION;
if (isObject_default(options)) {
var separator = "separator" in options ? options.separator : separator;
length = "length" in options ? toInteger_default(options.length) : length, omission = "omission" in options ? baseToString_default(options.omission) : omission;
}
string = toString_default(string);
var strLength = string.length;
if (hasUnicode_default(string)) {
var strSymbols = stringToArray_default(string);
strLength = strSymbols.length;
}
if (length >= strLength)
return string;
var end = length - stringSize_default(omission);
if (end < 1)
return omission;
var result = strSymbols ? castSlice_default(strSymbols, 0, end).join("") : string.slice(0, end);
if (separator === void 0)
return result + omission;
if (strSymbols && (end += result.length - end), isRegExp_default(separator)) {
if (string.slice(end).search(separator)) {
var match, substring = result;
for (separator.global || (separator = RegExp(separator.source, toString_default(reFlags.exec(separator)) + "g")), separator.lastIndex = 0; match = separator.exec(substring); )
var newEnd = match.index;
result = result.slice(0, newEnd === void 0 ? end : newEnd);
}
} else if (string.indexOf(baseToString_default(separator), end) != end) {
var index = result.lastIndexOf(separator);
index > -1 && (result = result.slice(0, index));
}
return result + omission;
}
var truncate_default = truncate;
 
// node_modules/lodash-es/_baseUniq.js
init_process();
 
// node_modules/lodash-es/_createSet.js
init_process();
var INFINITY4 = 1 / 0, createSet = Set_default && 1 / setToArray_default(new Set_default([, -0]))[1] == INFINITY4 ? function(values) {
return new Set_default(values);
} : noop_default, createSet_default = createSet;
 
// node_modules/lodash-es/_baseUniq.js
var LARGE_ARRAY_SIZE2 = 200;
function baseUniq(array, iteratee, comparator) {
var index = -1, includes = arrayIncludes_default, length = array.length, isCommon = !0, result = [], seen = result;
if (comparator)
isCommon = !1, includes = arrayIncludesWith_default;
else if (length >= LARGE_ARRAY_SIZE2) {
var set2 = iteratee ? null : createSet_default(array);
if (set2)
return setToArray_default(set2);
isCommon = !1, includes = cacheHas_default, seen = new SetCache_default();
} else
seen = iteratee ? [] : result;
outer:
for (; ++index < length; ) {
var value = array[index], computed = iteratee ? iteratee(value) : value;
if (value = comparator || value !== 0 ? value : 0, isCommon && computed === computed) {
for (var seenIndex = seen.length; seenIndex--; )
if (seen[seenIndex] === computed)
continue outer;
iteratee && seen.push(computed), result.push(value);
} else includes(seen, computed, comparator) || (seen !== result && seen.push(computed), result.push(value));
}
return result;
}
var baseUniq_default = baseUniq;
 
// node_modules/lodash-es/uniqBy.js
init_process();
function uniqBy(array, iteratee) {
return array && array.length ? baseUniq_default(array, baseIteratee_default(iteratee, 2)) : [];
}
var uniqBy_default = uniqBy;
 
// src-copilot/frontend-chat/components/tools-ui/ItemSelectionTable.jsx
var ItemSelectionTable = ({
status,
itemContainerList,
setItemContainerList,
oldItemContainerList
}) => {
let isThisToolMessageLast = AssistantUI.useMessage((m) => m.isLast), isDiffView = !!oldItemContainerList, itemsToIterate = itemContainerList, allItemKeys = itemsToIterate.reduce((keys2, itemContainer) => (Object.keys(itemContainer.item).forEach((key) => {
!keys2.includes(key) && itemContainer.item[key] && keys2.push(key);
}), keys2), []), formatStringValue = (value, key) => {
if (value == null) return "";
try {
if (isNaN(value) && typeof value == "string" && isNaN(Number(value))) {
let date = new Date(value);
if (isNaN(date.getTime())) throw new Error("Invalid date");
return date.toLocaleString();
}
} catch {
}
return typeof value == "object" ? JSON.stringify(value) : value.toString();
}, handleCheckedChange = (checked, index) => {
let newList = [...itemContainerList];
newList[index].checked = checked, setItemContainerList(newList);
}, renderCell = (itemContainer, index, key) => {
if (isDiffView && oldItemContainerList[index].item[key] !== itemContainer.item[key]) {
let StringDiff = window.StringDiff;
return /* @__PURE__ */ React.createElement(
StringDiff,
{
method: "diffSentences",
styles: {
added: {
backgroundColor: "#0bbf7d"
},
removed: {
backgroundColor: "#ff6b6b"
}
},
oldValue: formatStringValue(oldItemContainerList[index].item[key]),
newValue: formatStringValue(itemContainer.item[key]),
showDiff: !0
}
);
} else if (key.toLowerCase().includes("uuid"))
return /* @__PURE__ */ React.createElement(TruncatedUUID, { value: itemContainer.item[key] });
return formatStringValue(itemContainer.item[key]);
}, { Table, Checkbox } = window.RadixUI, { CheckIcon, InfoCircledIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(Table.Root, null, /* @__PURE__ */ React.createElement(Table.Header, null, /* @__PURE__ */ React.createElement(Table.Row, null, /* @__PURE__ */ React.createElement(Table.ColumnHeaderCell, { style: { verticalAlign: "middle" } }, /* @__PURE__ */ React.createElement(CheckIcon, null)), allItemKeys.map((key) => /* @__PURE__ */ React.createElement(Table.ColumnHeaderCell, { key }, key)))), /* @__PURE__ */ React.createElement(Table.Body, null, itemsToIterate.map((itemContainer, index) => /* @__PURE__ */ React.createElement(Table.Row, { key: index }, /* @__PURE__ */ React.createElement(Table.RowHeaderCell, null, /* @__PURE__ */ React.createElement(
Checkbox,
{
checked: itemContainer.checked,
disabled: status === "requires-action" || !isThisToolMessageLast,
onCheckedChange: (checked) => handleCheckedChange(checked, index)
}
)), allItemKeys.map((key) => /* @__PURE__ */ React.createElement(Table.Cell, { key }, renderCell(itemContainer, index, key)))))));
}, TruncatedUUID = ({ value }) => {
let truncated = truncate_default(value, { length: 5, omission: "..." }), { InfoCircledIcon } = window.RadixIcons, { Flex, Tooltip } = window.RadixUI;
return /* @__PURE__ */ React.createElement(Flex, { align: "center", gap: "2" }, /* @__PURE__ */ React.createElement("span", null, truncated), /* @__PURE__ */ React.createElement(Flex, { align: "center", css: { cursor: "help" } }, /* @__PURE__ */ React.createElement(Tooltip, { content: value }, /* @__PURE__ */ React.createElement(InfoCircledIcon, null))));
};
 
// src-copilot/frontend-chat/components/tools-ui/ToolFooter.jsx
init_process();
var ToolFooter = ({
submitButtonText = "Submit",
cancelButtonText = "Cancel",
status,
setFormState,
shouldDisplayNoteSelector = !1,
noteSelectionArr,
currentNoteSelectionUUID,
setCurrentNoteSelectionUUID,
disableNoteSelector = !1
}) => {
let isThisToolMessageLast = AssistantUI.useMessage((m) => m.isLast), isActionDestructive = submitButtonText.toLowerCase().includes("delete") || submitButtonText.toLowerCase().includes("remove"), { Flex, Button } = window.RadixUI;
return /* @__PURE__ */ React.createElement(Flex, { gap: "10px", justify: "between", style: { marginTop: "10px" } }, shouldDisplayNoteSelector ? /* @__PURE__ */ React.createElement(
NoteSelector,
{
noteSelectionArr,
currentNoteSelectionUUID,
setCurrentNoteSelectionUUID,
disableNoteSelector,
status
}
) : /* @__PURE__ */ React.createElement("span", null), /* @__PURE__ */ React.createElement(Flex, { justify: "end", align: "center" }, /* @__PURE__ */ React.createElement(
Button,
{
variant: "ghost",
color: "red",
highContrast: !0,
disabled: status === "requires-action" || !isThisToolMessageLast,
onClick: () => {
setFormState("canceled");
},
style: { marginRight: "10px" }
},
cancelButtonText
), /* @__PURE__ */ React.createElement(
Button,
{
color: isActionDestructive ? "red" : "primary",
disabled: status === "requires-action" || !isThisToolMessageLast,
onClick: () => {
setFormState("submitted");
}
},
submitButtonText
)));
}, NoteSelector = ({
noteSelectionArr = [],
currentNoteSelectionUUID,
setCurrentNoteSelectionUUID,
status,
disableNoteSelector
}) => {
let isThisToolMessageLast = AssistantUI.useMessage((m) => m.isLast), currentNote = noteSelectionArr.find((note) => note.uuid === currentNoteSelectionUUID), displayTitle = currentNote != null && currentNote.title ? truncate_default(currentNote.title, { length: 12 }) : "Select Note", { Select } = window.RadixUI, { FileTextIcon } = window.RadixIcons, isDisabled = status === "requires-action" || !isThisToolMessageLast || disableNoteSelector, [open, setOpen] = React.useState(!1), selectRef = React.useRef(null);
return React.useEffect(() => {
let handleClickOutside = (event) => {
selectRef.current && !selectRef.current.contains(event.target) && setOpen(!1);
};
return open && document.addEventListener("mousedown", handleClickOutside), () => {
document.removeEventListener("mousedown", handleClickOutside);
};
}, [open]), /* @__PURE__ */ React.createElement(
Select.Root,
{
open,
disabled: isDisabled,
value: currentNoteSelectionUUID,
onValueChange: (value) => {
console.log(value), setCurrentNoteSelectionUUID(value), setOpen(!1);
},
className: "note-selector"
},
/* @__PURE__ */ React.createElement(
Select.Trigger,
{
onClick: (e) => {
isDisabled || setOpen(!open);
}
},
/* @__PURE__ */ React.createElement(
FileTextIcon,
{
style: {
display: "inline-block",
marginRight: "5px",
marginTop: "-4px"
}
}
),
displayTitle
),
/* @__PURE__ */ React.createElement(Select.Content, { position: "popper", sideOffset: 5, ref: selectRef }, noteSelectionArr.map((note) => /* @__PURE__ */ React.createElement(Select.Item, { key: note.uuid, value: note.uuid, className: "select-item" }, /* @__PURE__ */ React.createElement("span", null, note.title), /* @__PURE__ */ React.createElement("span", { style: { fontSize: "8px", display: "block", lineHeight: "1" } }, note.uuid))))
);
};
 
// src-copilot/frontend-chat/components/tools-ui/ToolCardResultMessage.jsx
init_process();
var ToolCardResultMessage = ({ children, icon, text, result, input, toolName, color = !1 }) => {
let [isCollapsed, setIsCollapsed] = React.useState(!0), [resolvedIcon, setResolvedIcon] = React.useState(icon), toggleCollapse = () => {
setIsCollapsed(!isCollapsed);
};
React.useEffect(() => {
if (window.RadixIcons && !icon) {
let { CheckCircledIcon } = window.RadixIcons;
setResolvedIcon(/* @__PURE__ */ React.createElement(CheckCircledIcon, null));
}
}, [icon]);
let { Text, Button, ChevronDownIcon, ScrollArea, Code, Flex, Separator } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardContainer, null, /* @__PURE__ */ React.createElement(Flex, { justify: "between", align: "center" }, !children && /* @__PURE__ */ React.createElement(Flex, { align: "center", gap: "2" }, resolvedIcon, text && (typeof text == "string" ? /* @__PURE__ */ React.createElement(Text, { color }, text) : text)), children, /* @__PURE__ */ React.createElement(Button, { onClick: toggleCollapse, size: "1", variant: "soft" }, /* @__PURE__ */ React.createElement(ChevronDownIcon, { style: { transform: isCollapsed ? "rotate(0deg)" : "rotate(180deg)" } }))), !isCollapsed && /* @__PURE__ */ React.createElement("div", { style: { marginTop: "6px", position: "relative" } }, /* @__PURE__ */ React.createElement(ScrollArea, { scrollbars: "horizontal", style: { paddingBottom: "6px" } }, toolName && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { size: "1", style: { color: "var(--gray-11)", marginBottom: "4px", display: "block" } }, "Tool ID:"), /* @__PURE__ */ React.createElement(Text, null, toolName), /* @__PURE__ */ React.createElement(Separator, { size: "4", style: { margin: "8px 0" } })), input && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { size: "1", style: { color: "var(--gray-11)", marginBottom: "4px", display: "block" } }, "Input:"), /* @__PURE__ */ React.createElement(Code, { highContrast: !0, wrap: "nowrap" }, typeof input == "string" ? input : JSON.stringify(input)), /* @__PURE__ */ React.createElement(Separator, { size: "4", style: { margin: "8px 0" } })), /* @__PURE__ */ React.createElement(Text, { size: "1", style: { color: "var(--gray-11)", marginBottom: "4px", display: "block" } }, "Output:"), /* @__PURE__ */ React.createElement(Code, { highContrast: !0, wrap: "nowrap" }, typeof result == "string" ? result : JSON.stringify(result)))));
};
 
// src-copilot/frontend-chat/tools-core/base/createGenericCUDTool.jsx
init_process();
 
// src-copilot/frontend-chat/components/tools-ui/ToolCardMessage.jsx
init_process();
var ToolCardMessage = ({ icon, text, color = !1 }) => {
let { Text, Flex } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardContainer, null, /* @__PURE__ */ React.createElement(Flex, { align: "center", gap: "2" }, icon && icon, /* @__PURE__ */ React.createElement(Text, { color }, text)));
};
 
// src-copilot/frontend-chat/hooks/useGenericToolFormState.jsx
init_process();
 
// src-copilot/frontend-chat/tools-core/utils/errorToString.js
init_process();
var errorToString = (error) => error instanceof Error ? error.message : typeof error == "string" ? error : JSON.stringify(error);
 
// src-copilot/frontend-chat/components/tools-ui/ToolCardErrorMessage.jsx
init_process();
var ToolCardErrorMessage = ({ icon, text, toolName, input }) => {
let [isCollapsed, setIsCollapsed] = React.useState(!0), [resolvedIcon, setResolvedIcon] = React.useState(icon), toggleCollapse = () => {
setIsCollapsed(!isCollapsed);
};
React.useEffect(() => {
if (window.RadixIcons && !icon) {
let { ExclamationTriangleIcon } = window.RadixIcons;
setResolvedIcon(/* @__PURE__ */ React.createElement(ExclamationTriangleIcon, null));
}
}, [icon]);
let { Text, Button, ChevronDownIcon, ScrollArea, Code, Flex, Separator } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardContainer, null, /* @__PURE__ */ React.createElement(Flex, { justify: "between", align: "center" }, /* @__PURE__ */ React.createElement(Flex, { align: "center", gap: "2" }, resolvedIcon && resolvedIcon, text && /* @__PURE__ */ React.createElement(Text, { style: { color: "var(--red-9)" } }, text)), /* @__PURE__ */ React.createElement(Button, { onClick: toggleCollapse, size: "1", variant: "soft" }, /* @__PURE__ */ React.createElement(ChevronDownIcon, { style: { transform: isCollapsed ? "rotate(0deg)" : "rotate(180deg)" } }))), !isCollapsed && /* @__PURE__ */ React.createElement("div", { style: { marginTop: "6px", position: "relative" } }, /* @__PURE__ */ React.createElement(ScrollArea, { scrollbars: "horizontal", style: { paddingBottom: "6px" } }, toolName && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { size: "1", style: { color: "var(--gray-11)", marginBottom: "4px", display: "block" } }, "Tool Name:"), /* @__PURE__ */ React.createElement(Text, null, toolName), /* @__PURE__ */ React.createElement(Separator, { size: "4", style: { margin: "8px 0" } })), input && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { size: "1", style: { color: "var(--gray-11)", marginBottom: "4px", display: "block" } }, "Input:"), /* @__PURE__ */ React.createElement(Code, { highContrast: !0, wrap: "nowrap" }, typeof input == "string" ? input : JSON.stringify(input, null, 2))))));
};
 
// src-copilot/frontend-chat/hooks/useGenericToolFormState.jsx
var useGenericToolFormState = (states, params = {}) => {
let [formState, setFormState] = React.useState(), render = (props) => {
var _a;
let { ErrorBoundary } = window.ReactErrorBoundary, originalRender = ((_a = states[formState]) == null ? void 0 : _a.renderer) || (() => null);
return /* @__PURE__ */ React.createElement(ErrorBoundary, { fallbackRender: (e) => /* @__PURE__ */ React.createElement(
ToolCardErrorMessage,
{
toolName: params.toolName,
input: params.args,
text: "Unhandled Error occurred: " + errorToString(e),
color: "red"
}
) }, originalRender ? React.createElement(originalRender, props) : null);
}, toolCallId = params.toolCallId, message = AssistantUI.useMessage();
React.useEffect(() => {
if (formState || params.status.type === "running") return;
let toolStateInChatHistory = get_default(message, \`metadata.custom.toolStateStorage.\${toolCallId}\`);
toolStateInChatHistory && toolStateInChatHistory.formState ? (setFormState(toolStateInChatHistory.formState), params.setFormData(toolStateInChatHistory.formData), params.setFormError(toolStateInChatHistory.formError)) : setFormState(Object.keys(states)[0]);
}, [params.args, params.status]);
let { formData, formError } = params;
return React.useEffect(() => {
formState && set_default(message, \`metadata.custom.toolStateStorage.\${toolCallId}\`, {
formState,
formData,
formError
});
}, [formState, formData, formError]), React.useEffect(() => {
formState && !params.result && states[formState].eventHandler && (async () => {
try {
window.dispatchEvent(new CustomEvent("onToolStateChange", { detail: formState })), console.log("onToolStateChange", formState), await states[formState].eventHandler({ ...params, formState, setFormState });
} catch (e) {
console.error(e), params.setFormError(e);
}
})();
}, [formState]), React.useEffect(() => {
params.formError && states.error && setFormState("error");
}, [params.formError]), [formState, setFormState, render];
};
 
// src-copilot/frontend-chat/hooks/useGenericToolParameters.jsx
init_process();
var useGenericToolParameters = ({
toolName,
toolCallId,
description,
parameters,
args,
status,
result,
addResult
}) => {
let [formData, setFormData] = React.useState({}), [formError, setFormError] = React.useState(null), threadRuntime = AssistantUI.useThreadRuntime(), cancelFurtherLLMReply = () => {
threadRuntime.cancelRun();
}, abortControllerRef = React.useRef(new AbortController());
return React.useEffect(() => {
(status == null ? void 0 : status.type) === "ended" && (abortControllerRef.current.abort(), abortControllerRef.current = new AbortController());
}, [status == null ? void 0 : status.type]), {
toolName,
toolCallId,
description,
parameters,
args,
status,
result,
addResult: (input) => {
if (typeof input == "string")
return addResult(truncate_default(input, { length: 16e3, omission: "[truncated tool output]" }));
if (typeof input == "object") {
let inputJSON = JSON.stringify(input);
if (inputJSON.length > 16e3)
return addResult(truncate_default(inputJSON, { length: 16e3, omission: "[truncated tool output]" }));
}
return addResult(input);
},
formError,
setFormError,
formData,
setFormData,
threadRuntime,
cancelFurtherLLMReply,
signal: abortControllerRef.current.signal
};
};
 
// src-copilot/frontend-chat/components/tools-ui/ToolCardCanceledMessage.jsx
init_process();
var ToolCardCanceledMessage = ({ icon, text, toolName, input }) => {
let [isCollapsed, setIsCollapsed] = React.useState(!0), [resolvedIcon, setResolvedIcon] = React.useState(icon), toggleCollapse = () => {
setIsCollapsed(!isCollapsed);
};
React.useEffect(() => {
if (window.RadixIcons && !icon) {
let { MinusCircledIcon } = window.RadixIcons;
setResolvedIcon(/* @__PURE__ */ React.createElement(MinusCircledIcon, null));
}
}, [icon]);
let { Text, Button, ChevronDownIcon, ScrollArea, Code, Flex, Separator } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardContainer, null, /* @__PURE__ */ React.createElement(Flex, { justify: "between", align: "center" }, /* @__PURE__ */ React.createElement(Flex, { align: "center", gap: "2" }, resolvedIcon && resolvedIcon, text && /* @__PURE__ */ React.createElement(Text, null, text)), /* @__PURE__ */ React.createElement(Button, { onClick: toggleCollapse, size: "1", variant: "soft" }, /* @__PURE__ */ React.createElement(ChevronDownIcon, { style: { transform: isCollapsed ? "rotate(0deg)" : "rotate(180deg)" } }))), !isCollapsed && /* @__PURE__ */ React.createElement("div", { style: { marginTop: "6px", position: "relative" } }, /* @__PURE__ */ React.createElement(ScrollArea, { scrollbars: "horizontal", style: { paddingBottom: "6px" } }, toolName && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { size: "1", style: { color: "var(--gray-11)", marginBottom: "4px", display: "block" } }, "Tool Name:"), /* @__PURE__ */ React.createElement(Text, null, toolName), /* @__PURE__ */ React.createElement(Separator, { size: "4", style: { margin: "8px 0" } })), input && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { size: "1", style: { color: "var(--gray-11)", marginBottom: "4px", display: "block" } }, "Input (canceled):"), /* @__PURE__ */ React.createElement(Code, null, JSON.stringify(input, null, 2))))));
};
 
// src-copilot/frontend-chat/tools-core/base/createGenericCUDTool.jsx
var createGenericCUDTool = ({
toolName,
description,
parameters,
triggerCondition,
onInit = ({ setFormState }) => {
},
onCompleted = () => {
},
onSubmitted = () => {
},
onCanceled = ({ addResult, args, cancelFurtherLLMReply }) => {
addResult(\`Tool invocation canceled by user. No operation was performed.
Input (canceled): \${JSON.stringify(args)}\`), cancelFurtherLLMReply();
},
onError = ({ formError, addResult }) => {
addResult(\`Error: \${errorToString(formError)}. Tool invocation failed.\`);
},
renderWaitingForUserInput = () => {
},
renderInit = () => {
let { Spinner } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardMessage, { text: "Initializing...", icon: /* @__PURE__ */ React.createElement(Spinner, null) });
},
renderSubmitting = () => {
let { Spinner } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardMessage, { text: "Processing...", icon: /* @__PURE__ */ React.createElement(Spinner, null) });
},
renderCanceled = ({ args }) => /* @__PURE__ */ React.createElement(
ToolCardCanceledMessage,
{
text: \`\${toolName} tool invocation canceled.\`,
toolName,
input: args
}
),
renderCompleted = () => {
},
renderError = ({ formError, toolName: toolName2, args }) => /* @__PURE__ */ React.createElement(
ToolCardErrorMessage,
{
toolName: toolName2,
input: args,
text: "Error: " + errorToString(formError),
color: "red"
}
)
}) => AssistantUI.makeAssistantToolUI({
toolName,
description,
parameters,
triggerCondition,
render: ({ args, status, result, addResult, toolCallId }) => {
let allParameters = useGenericToolParameters({
toolName,
toolCallId,
description,
parameters,
args,
status,
result,
addResult
}), [formState, setFormState, formRender] = useGenericToolFormState({
init: {
eventHandler: onInit,
renderer: renderInit
},
waitingForUserInput: {
eventHandler: null,
renderer: renderWaitingForUserInput
},
submitted: {
eventHandler: onSubmitted,
renderer: renderSubmitting
},
completed: {
eventHandler: onCompleted,
renderer: renderCompleted
},
canceled: {
eventHandler: onCanceled,
renderer: renderCanceled
},
error: {
eventHandler: onError,
renderer: renderError
}
}, allParameters);
return formRender ? formRender({ ...allParameters, formState, setFormState }) : null;
}
});
 
// src-copilot/frontend-chat/tools/DeleteUserNotes.jsx
var DeleteUserNotes = () => createGenericCUDTool({
toolName: "DeleteUserNotes",
description: "Delete user notes",
parameters: {
type: "object",
properties: {
notes: {
type: "array",
minItems: window.appSettings[LLM_API_URL_SETTING].includes("googleapis") ? "1" : 1,
items: {
type: "object",
properties: {
noteUUID: {
type: "string",
description: "36 digit UUID of the note to delete"
}
},
required: ["noteUUID"]
}
}
}
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@notes") || JSON.stringify(allUserMessages).includes("@all-tools"),
onInit: async ({ setFormState, formData, setFormData, args }) => {
let notesContainerList = [];
for (let noteItem of args.notes) {
let noteUUID = noteItem.noteUUID, noteTitle = await appConnector.getNoteTitleByUUID(noteUUID);
if (!noteTitle) throw new Error(\`Note \${noteUUID} not found.\`);
let noteTags = await appConnector.getNoteTagsByUUID({ uuid: noteUUID });
notesContainerList.push({
item: {
uuid: noteUUID,
title: noteTitle,
tags: noteTags
},
checked: !0
});
}
setFormData({ ...formData, notesContainerList }), setFormState("waitingForUserInput");
},
renderWaitingForUserInput: ({ formData, setFormData, status, setFormState }) => {
let setNotesContainerList = (notesContainerList) => {
setFormData({ ...formData, notesContainerList });
}, { Text } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardContainer, null, /* @__PURE__ */ React.createElement(Text, null, "Select notes to delete:"), /* @__PURE__ */ React.createElement(
ItemSelectionTable,
{
itemContainerList: formData.notesContainerList,
setItemContainerList: setNotesContainerList,
status
}
), /* @__PURE__ */ React.createElement(
ToolFooter,
{
submitButtonText: "Delete Notes",
cancelButtonText: "Cancel",
status,
setFormState
}
));
},
onSubmitted: async ({ formData, setFormData, setFormError, setFormState, addResult, result }) => {
let lastError = null, selectedItemContainerList = formData.notesContainerList.filter((item) => item.checked), successfulDeletedItems = [], failedItems = [];
for (let selectedItemContainer of selectedItemContainerList)
try {
let result2 = await deleteNote({
noteUUID: selectedItemContainer.item.uuid
}) || selectedItemContainer.item;
successfulDeletedItems.push(result2);
} catch (e) {
failedItems.push(selectedItemContainer.item), lastError = e, console.error(e);
}
if (failedItems.length === selectedItemContainerList.length)
throw "Failed to delete all of the selected notes. Sample error: " + errorToString(lastError);
setFormData({ ...formData, successfulDeletedItems, failedItems, lastError }), setFormState("completed");
},
onCompleted: ({ formData, addResult }) => {
let { successfulDeletedItems, failedItems } = formData, lastError = formData.lastError;
failedItems.length === 0 ? addResult({
resultSummary: \`\${successfulDeletedItems.length} notes deleted successfully.\`,
resultDetail: successfulDeletedItems
}) : addResult({
resultSummary: \`\${successfulDeletedItems.length} notes deleted successfully. \${failedItems.length} notes failed to delete. Error sample: \${errorToString(lastError)}\`,
resultDetail: successfulDeletedItems,
failedResultDetail: failedItems
});
},
renderCompleted: ({ formData, toolName, args }) => {
let { FileTextIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: JSON.stringify(formData.successfulDeletedItems),
text: \`\${formData.successfulDeletedItems.length} notes deleted successfully.\` + (formData.failedItems.length > 0 ? \`
\${formData.failedItems.length} notes failed to delete.\` : ""),
icon: /* @__PURE__ */ React.createElement(FileTextIcon, null),
toolName,
input: args
}
);
}
}), deleteNote = async ({ noteUUID }) => await appConnector.deleteNote({ uuid: noteUUID });
 
// src-copilot/frontend-chat/tools/DeleteTasks.jsx
init_process();
 
// src-copilot/frontend-chat/tools/EditNoteContent.jsx
init_process();
 
// src-copilot/frontend-chat/hooks/useNoteSelector.jsx
init_process();
var useNoteSelector = ({ args, setFormData, formData }) => {
let [noteSelectionArr, setNoteSelectionArr] = React.useState([]), currentNoteSelectionUUID = formData.currentNoteSelectionUUID || null, setCurrentNoteSelectionUUID = (value) => {
setFormData({ ...formData, currentNoteSelectionUUID: value });
};
return React.useEffect(() => {
(async () => {
var _a;
let noteArray = [];
if (args.noteUUID) {
let noteTitle = await appConnector.getNoteTitleByUUID(args.noteUUID);
noteArray.push({
uuid: args.noteUUID,
selected: !0,
title: noteTitle
});
}
addIfNotPresent(noteArray, userData.currentNoteUUID, userData.currentNoteName), addIfNotPresent(noteArray, userData.dailyJotNoteUUID, userData.dailyJotNoteName), setCurrentNoteSelectionUUID(args.noteUUID || ((_a = noteArray[0]) == null ? void 0 : _a.uuid)), setNoteSelectionArr(noteArray);
})();
}, [args]), [noteSelectionArr, setNoteSelectionArr, currentNoteSelectionUUID, setCurrentNoteSelectionUUID];
}, addIfNotPresent = (noteInfo, uuid, title) => {
uuid && !noteInfo.some((note) => note.uuid === uuid) && noteInfo.push({
uuid,
selected: noteInfo.length === 0,
title
});
};
 
// src-copilot/backend/generateText.js
init_process();
async function generateText(model, prompt) {
let { generateText: generateText2 } = await dynamic_import_esm_default("ai");
return await generateText2({
model,
prompt
});
}
 
// node_modules/@assistant-ui/react/dist/runtimes/edge/converters/index.mjs
init_process();
 
// node_modules/@assistant-ui/react/dist/runtimes/edge/converters/toCoreMessages.mjs
init_process();
var toCoreMessages = (messages, options = {}) => messages.map((message) => toCoreMessage(message, options)), toCoreMessage = (message, options = {}) => {
var _a;
let includeId = (_a = options.unstable_includeId) != null ? _a : !1, role = message.role;
switch (role) {
case "assistant":
return {
role,
content: message.content.map((part) => {
if (part.type === "ui") throw new Error("UI parts are not supported");
if (part.type === "tool-call") {
let { argsText, ...rest } = part;
return rest;
}
return part;
}),
...includeId ? { unstable_id: message.id } : {}
};
case "user":
return {
role,
content: [
...message.content.map((part) => {
if (part.type === "ui")
throw new Error("UI parts are not supported");
return part;
}),
...message.attachments.map((a) => a.content).flat()
],
...includeId ? { unstable_id: message.id } : {}
};
case "system":
return {
role,
content: message.content,
...includeId ? { unstable_id: message.id } : {}
};
default: {
let unsupportedRole = role;
throw new Error(\`Unknown message role: \${unsupportedRole}\`);
}
}
};
 
// src-copilot/frontend-chat/components/tools-ui/ExpandableScrollArea.jsx
init_process();
var ExpandableScrollArea = ({ children, style = {}, scrollAreaProps = {} }) => {
let [isExpanded, setIsExpanded] = window.React.useState(!1), { ScrollArea } = window.RadixUI, { EnterFullScreenIcon, ExitFullScreenIcon } = window.RadixIcons, ReactDOM = window.ReactDOM || window.React.ReactDOM, toggleExpand = () => {
setIsExpanded(!isExpanded);
}, expandedStyle = {
...style,
position: "fixed",
top: "0",
left: "0",
width: "100%",
height: "100%",
maxHeight: "100%",
maxWidth: "100%",
minWidth: "100%",
minHeight: "100%",
zIndex: 9999,
background: "#393a3a",
borderRadius: "0",
border: "1px solid #ccc",
padding: "0",
margin: "0",
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.15)"
}, normalStyle = {
...style,
position: "relative"
}, iconContainerStyle = {
position: "absolute",
top: "16px",
right: "16px",
zIndex: 1e4,
// Higher than the expanded area's z-index
cursor: "pointer",
background: "var(--white-a6)",
borderRadius: "4px",
padding: "2px",
display: "flex",
alignItems: "center",
justifyContent: "center",
width: "24px",
height: "24px"
}, normalContent = /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(
"div",
{
style: iconContainerStyle,
onClick: toggleExpand,
title: "View full page"
},
/* @__PURE__ */ React.createElement(EnterFullScreenIcon, { width: 16, height: 16 })
), /* @__PURE__ */ React.createElement(
ScrollArea,
{
style: normalStyle,
type: "auto",
...scrollAreaProps
},
children
)), expandedContent = /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(
ScrollArea,
{
style: expandedStyle,
type: "auto",
...scrollAreaProps
},
children
), /* @__PURE__ */ React.createElement(
"div",
{
style: {
...iconContainerStyle,
position: "fixed",
top: "15px",
right: "15px",
zIndex: 10001
},
onClick: toggleExpand,
title: "Exit full page"
},
/* @__PURE__ */ React.createElement(ExitFullScreenIcon, { width: 16, height: 16 })
));
return console.log("isExpanded", window.ReactDOM), isExpanded ? window.ReactDOM.createPortal(expandedContent, document.body) : normalContent;
};
 
// src-copilot/frontend-chat/tools/EditNoteContent.jsx
var EditNoteContent = () => createGenericCUDTool({
toolName: "EditNoteContent",
description: \`Prefer this over UpdateUserNotes when only editing content is required. Do not this tool unless user has specifically asked to modify / edit note content.
For instance, DO NOT call this tool if user is asking to summarize note content. Summarization doesn't mean editing note content.\`,
parameters: {
type: "object",
properties: {
noteUUID: {
type: "string",
description: "36 digit UUID of note"
},
editInstruction: {
type: "string",
description: "Very short instruction on how to modify content."
}
},
required: ["noteUUID"]
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@notes") || JSON.stringify(allUserMessages).includes("@all-tools"),
renderInit: () => {
let { Spinner } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardMessage, { text: "Generating content...", icon: /* @__PURE__ */ React.createElement(Spinner, null) });
},
onInit: async ({ setFormState, formData, setFormData, args, threadRuntime }) => {
let noteUUID = args.noteUUID, editInstruction = args.editInstruction, currentContent = await appConnector.getNoteContentByUUID(noteUUID), previousConversationJSON = JSON.stringify(toCoreMessages(threadRuntime.getState().messages)), previousConversationString = previousConversationJSON.length > 16e3 ? previousConversationJSON.substring(previousConversationJSON.length - 16e3) : previousConversationJSON, model = await getLLMModel(appSettings), newContent = currentContent;
try {
currentContent.trim() === "" ? newContent = (await generateText(
model,
\`<|im_start|>
Previous conversation history for reference:
\` + previousConversationString + \`<|im_end|>
<|im_start|>
You are a AI content generator tool. You can use markdown. DO NOT reply anything other than the generated text on provided topic. Instructions:
\` + editInstruction
)).text : newContent = (await generateText(
model,
\`<|im_start|>
Previous conversation history for reference:
\` + previousConversationString + \`<|im_end|>
<|im_start|>
You are a AI content editor tool. You take markdown content as input and return modified content.Rules you should to follow for modification:
- You MUST write the entire content including both modified and unmodified bits.
- Output the original bits as is if modification is not required in those parts.
- Follow the instruction as provided. DO not talk about the instruction.
- Do not output anything other than page content.
 
- The input starts after text "Input:". ONLY treat everything after "Input:" as input content. Do not include earlier text in your output.
EXAMPLE:
Input: Pikachu is an electric-type Pok\\xE9mon. On other hand, bulbasaur is a water-type Pok\\xE9mon.
Instruction: Change Pikachu to Charmander.Output: Charmander is an fire-type Pok\\xE9mon. On other hand, bulbasaur is a water-type Pok\\xE9mon.
 
<|im_end|>
<|im_start|>
Instruction:
\` + editInstruction + \`Input:
\` + currentContent + \`
<|im_end|>\`
)).text.replaceAll("<|im_start|>", "").replaceAll("<|im_end|>", "");
} catch (e) {
throw console.error(e), "Failed to generate content";
}
setFormData({ ...formData, noteUUID, editInstruction, newContent, currentContent }), setFormState("waitingForUserInput");
},
renderWaitingForUserInput: ({ args, formData, setFormData, status, setFormState }) => {
let [noteSelectionArr, setNoteSelectionArr, currentNoteSelectionUUID, setCurrentNoteSelectionUUID] = useNoteSelector({ args, setFormData, formData }), { Text } = window.RadixUI, StringDiff = window.StringDiff;
return /* @__PURE__ */ React.createElement(ToolCardContainer, null, /* @__PURE__ */ React.createElement(Text, null, "Update note content:"), /* @__PURE__ */ React.createElement(
ExpandableScrollArea,
{
style: {
background: "var(--gray-a2)",
width: "100%",
borderRadius: "8px",
minHeight: "100px",
maxHeight: "100px",
marginTop: "10px",
border: "1px solid #ccc",
padding: "5px",
whiteSpace: "pre-wrap"
}
},
/* @__PURE__ */ React.createElement(
StringDiff,
{
method: "diffWords",
styles: {
added: {
backgroundColor: "#0bbf7d"
},
removed: {
backgroundColor: "#ff6b6b"
}
},
oldValue: formData.currentContent,
newValue: formData.newContent,
showDiff: !0
}
)
), /* @__PURE__ */ React.createElement(
ToolFooter,
{
submitButtonText: "Update Content",
cancelButtonText: "Cancel",
status,
setFormState,
shouldDisplayNoteSelector: !0,
disableNoteSelector: !0,
noteSelectionArr,
currentNoteSelectionUUID,
setCurrentNoteSelectionUUID
}
));
},
onSubmitted: async ({ formData, setFormData, setFormState }) => {
let selectedNoteUUID = formData.currentNoteSelectionUUID;
await appConnector.replaceNoteContent({ uuid: selectedNoteUUID }, formData.newContent), setFormState("completed");
},
onCompleted: async ({ formData, addResult, setFormData }) => {
let noteTitle = await appConnector.getNoteTitleByUUID(formData.currentNoteSelectionUUID);
setFormData({ ...formData, noteTitle }), addResult({ resultSummary: \`\${noteTitle} note content updated.\`, newContent: formData.newContent });
},
renderCompleted: ({ formData, toolName, args }) => {
let { FileTextIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: formData.newContent,
text: \`\${formData.noteTitle} note content updated.\`,
icon: /* @__PURE__ */ React.createElement(FileTextIcon, null),
toolName,
input: args
}
);
},
renderCanceled: ({ formData, toolName, args }) => /* @__PURE__ */ React.createElement(
ToolCardCanceledMessage,
{
text: \`\${toolName} tool invocation canceled.\`,
toolName,
input: { note: args.noteUUID, newContent: formData.newContent }
}
),
onCanceled: ({ addResult, args, formData, cancelFurtherLLMReply }) => {
addResult(\`Tool invocation canceled by user. No operation was performed.
Input (canceled): \${JSON.stringify({ noteUUID: args.noteUUID, suggestedContent: formData.newContent })}\`), cancelFurtherLLMReply();
}
});
 
// src-copilot/frontend-chat/tools/UpdateUserTasks.jsx
init_process();
var UpdateUserTasks = () => createGenericCUDTool({
toolName: "UpdateUserTasks",
description: "Update user tasks",
parameters: {
type: "object",
properties: {
tasks: {
type: "array",
minItems: window.appSettings[LLM_API_URL_SETTING].includes("googleapis") ? "1" : 1,
items: {
type: "object",
properties: {
taskUUID: {
type: "string",
description: "UUID of the task to update"
},
taskContent: {
type: "string",
description: "Short task content"
},
taskStartAt: {
type: "string",
description: "ISO format start date and time of the task"
},
taskEndAt: {
type: "string",
description: "ISO format end date and time of the task"
},
completedAt: {
type: "string",
description: "ISO format completed date and time of the task.Set to current time to toogle task as completed and null to toggle as uncompleted."
},
dismissedAt: {
type: "string",
description: "ISO format dismissed date and time of the task.Set to current time to toogle task as dismissed and null to toggle as undismissed."
},
hideUntil: {
type: "string",
description: "ISO format hide until date and time of the task."
},
taskScore: {
type: "number"
},
important: {
type: "boolean"
},
urgent: {
type: "boolean"
}
},
required: ["taskUUID"]
}
}
}
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@tasks") || JSON.stringify(allUserMessages).includes("@all-tools"),
onInit: async ({ setFormState, formData, setFormData, args }) => {
let tasksContainerList = [];
for (let taskItem of args.tasks) {
let taskUUID = taskItem.taskUUID, taskContent = taskItem.taskContent, taskStartAt = taskItem.taskStartAt, taskEndAt = taskItem.taskEndAt, completedAt = taskItem.completedAt, dismissedAt = taskItem.dismissedAt, hideUntil = taskItem.hideUntil, taskScore = taskItem.taskScore, important = taskItem.important, urgent = taskItem.urgent;
tasksContainerList.push({
item: {
uuid: taskUUID,
content: taskContent,
startAt: taskStartAt,
endAt: taskEndAt,
completedAt,
dismissedAt,
hideUntil,
score: taskScore,
important,
urgent
},
checked: !0
});
}
let oldTasksContainerList = [];
for (let taskItem of args.tasks) {
let taskUUID = taskItem.taskUUID, task = await appConnector.getTask(taskUUID);
if (!task) throw new Error(\`Task \${taskUUID} not found.\`);
oldTasksContainerList.push({
item: {
uuid: taskUUID,
content: task.content,
startAt: task.startAt,
endAt: task.endAt,
completedAt: task.completedAt,
dismissedAt: task.dismissedAt,
hideUntil: task.hideUntil,
score: task.score,
important: task.important,
urgent: task.urgent
}
});
}
setFormData({ ...formData, tasksContainerList, oldTasksContainerList }), setFormState("waitingForUserInput");
},
renderWaitingForUserInput: ({ formData, setFormData, status, setFormState }) => {
let setTasksContainerList = (tasksContainerList) => {
setFormData({ ...formData, tasksContainerList });
}, { Text } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardContainer, null, /* @__PURE__ */ React.createElement(Text, null, "Select tasks to update:"), /* @__PURE__ */ React.createElement(
ItemSelectionTable,
{
itemContainerList: formData.tasksContainerList,
setItemContainerList: setTasksContainerList,
oldItemContainerList: formData.oldTasksContainerList,
status
}
), /* @__PURE__ */ React.createElement(
ToolFooter,
{
submitButtonText: "Update Tasks",
cancelButtonText: "Cancel",
status,
setFormState
}
));
},
onSubmitted: async ({ formData, setFormData, setFormError, setFormState, addResult, result }) => {
let lastError = null, selectedItemContainerList = formData.tasksContainerList.filter((item) => item.checked), successfulUpdatedItems = [], failedItems = [];
for (let selectedItemContainer of selectedItemContainerList)
try {
let result2 = await updateTask({
item: selectedItemContainer.item
}) || selectedItemContainer.item;
successfulUpdatedItems.push(result2);
} catch (e) {
failedItems.push(selectedItemContainer.item), lastError = e, console.error(e);
}
if (failedItems.length === selectedItemContainerList.length)
throw "Failed to update all of the selected tasks. Sample error: " + errorToString(lastError);
setFormData({ ...formData, successfulUpdatedItems, failedItems, lastError }), setFormState("completed");
},
onCompleted: ({ formData, addResult }) => {
let { successfulUpdatedItems, failedItems } = formData, lastError = formData.lastError;
failedItems.length === 0 ? addResult({
resultSummary: \`\${successfulUpdatedItems.length} tasks updated successfully.\`,
resultDetail: successfulUpdatedItems
}) : addResult({
resultSummary: \`\${successfulUpdatedItems.length} tasks updated successfully. \${failedItems.length} tasks failed to update. Error sample: \${errorToString(lastError)}\`,
resultDetail: successfulUpdatedItems,
failedResultDetail: failedItems
});
},
renderCompleted: ({ formData, toolName, args }) => {
let { CheckboxIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: JSON.stringify(formData.successfulUpdatedItems),
text: \`\${formData.successfulUpdatedItems.length} tasks updated successfully.\` + (formData.failedItems.length > 0 ? \`
\${formData.failedItems.length} tasks failed to update.\` : ""),
icon: /* @__PURE__ */ React.createElement(CheckboxIcon, null),
toolName,
input: args
}
);
}
}), updateTask = async ({ item }) => {
let oldTaskContent = await appConnector.getTask(item.uuid).then((task) => task.content);
item.taskContent && item.taskContent !== oldTaskContent && await appConnector.updateTask(item.uuid, {
content: item.taskContent
}), item.taskStartAt && await appConnector.updateTask(item.uuid, {
startAt: Date.parse(item.taskStartAt) / 1e3
// convert to timestamp
}), item.taskEndAt && await appConnector.updateTask(item.uuid, {
endAt: Date.parse(item.taskEndAt) / 1e3
// convert to timestamp
}), item.completedAt && await appConnector.updateTask(item.uuid, {
completedAt: Date.parse(item.completedAt) / 1e3
// convert to timestamp
}), item.dismissedAt && await appConnector.updateTask(item.uuid, {
dismissedAt: Date.parse(item.dismissedAt) / 1e3
// convert to timestamp
}), item.hideUntil && await appConnector.updateTask(item.uuid, {
hideUntil: Date.parse(item.hideUntil) / 1e3
// convert to timestamp
}), item.taskScore && await appConnector.updateTask(item.uuid, {
score: item.taskScore
}), item.important && await appConnector.updateTask(item.uuid, {
important: item.important
}), item.urgent && await appConnector.updateTask(item.uuid, {
urgent: item.urgent
});
};
 
// src-copilot/frontend-chat/tools/UpdateUserNotes.jsx
init_process();
var UpdateUserNotes = () => createGenericCUDTool({
toolName: "UpdateUserNotes",
description: "Update user notes",
parameters: {
type: "object",
properties: {
notes: {
type: "array",
minItems: window.appSettings[LLM_API_URL_SETTING].includes("googleapis") ? "1" : 1,
items: {
type: "object",
properties: {
noteUUID: {
type: "string",
description: "36 digit UUID of the note to update"
},
noteTitle: {
type: "string",
description: "New title"
},
noteContent: {
type: "string",
description: "New content"
},
tags: {
type: "array",
items: {
type: "string"
},
description: "New tag list (all old tags will be removed - set null to keep old tags)"
}
},
required: ["noteUUID"]
}
}
}
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@notes") || JSON.stringify(allUserMessages).includes("@all-tools"),
onInit: async ({ setFormState, formData, setFormData, args }) => {
let notesContainerList = [];
for (let noteItem of args.notes) {
let noteUUID = noteItem.noteUUID, noteTitle = noteItem.noteTitle || await appConnector.getNoteTitleByUUID(noteUUID), noteTags = noteItem.tags, noteContent = noteItem.noteContent;
notesContainerList.push({
item: {
uuid: noteUUID,
title: noteTitle,
tags: noteTags,
content: noteContent
},
checked: !0
});
}
let oldNotesContainerList = [];
for (let noteItem of args.notes) {
let noteUUID = noteItem.noteUUID, noteTitle = await appConnector.getNoteTitleByUUID(noteUUID), noteTags = await appConnector.getNoteTagsByUUID({ uuid: noteUUID }), noteContent = await appConnector.getNoteContentByUUID(noteUUID);
if (!noteTitle) throw new Error(\`Note \${noteUUID} not found.\`);
oldNotesContainerList.push({
item: {
uuid: noteUUID,
title: noteTitle,
tags: noteTags,
content: noteContent
}
});
}
setFormData({ ...formData, notesContainerList, oldNotesContainerList }), setFormState("waitingForUserInput");
},
renderWaitingForUserInput: ({ formData, setFormData, status, setFormState }) => {
let setNotesContainerList = (notesContainerList) => {
setFormData({ ...formData, notesContainerList });
}, { Text } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardContainer, null, /* @__PURE__ */ React.createElement(Text, null, "Select notes to update:"), /* @__PURE__ */ React.createElement(
ItemSelectionTable,
{
itemContainerList: formData.notesContainerList,
setItemContainerList: setNotesContainerList,
oldItemContainerList: formData.oldNotesContainerList,
status
}
), /* @__PURE__ */ React.createElement(
ToolFooter,
{
submitButtonText: "Update Notes",
cancelButtonText: "Cancel",
status,
setFormState
}
));
},
onSubmitted: async ({ formData, setFormData, setFormError, setFormState, addResult, result }) => {
let lastError = null, selectedItemContainerList = formData.notesContainerList.filter((item) => item.checked), successfulUpdatedItems = [], failedItems = [];
for (let selectedItemContainer of selectedItemContainerList)
try {
let result2 = await updateNote({
item: selectedItemContainer.item
}) || selectedItemContainer.item;
successfulUpdatedItems.push(result2);
} catch (e) {
failedItems.push(selectedItemContainer.item), lastError = e, console.error(e);
}
if (failedItems.length === selectedItemContainerList.length)
throw "Failed to update all of the selected notes. Sample error: " + errorToString(lastError);
setFormData({ ...formData, successfulUpdatedItems, failedItems, lastError }), setFormState("completed");
},
onCompleted: ({ formData, addResult }) => {
let { successfulUpdatedItems, failedItems } = formData, lastError = formData.lastError;
failedItems.length === 0 ? addResult({
resultSummary: \`\${successfulUpdatedItems.length} notes updated successfully.\`,
resultDetail: successfulUpdatedItems
}) : addResult({
resultSummary: \`\${successfulUpdatedItems.length} notes updated successfully. \${failedItems.length} notes failed to update. Error sample: \${errorToString(lastError)}\`,
resultDetail: successfulUpdatedItems,
failedResultDetail: failedItems
});
},
renderCompleted: ({ formData, toolName, args }) => {
let { FileTextIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: JSON.stringify(formData.successfulUpdatedItems),
text: \`\${formData.successfulUpdatedItems.length} notes updated successfully.\` + (formData.failedItems.length > 0 ? \`
\${formData.failedItems.length} notes failed to update.\` : ""),
icon: /* @__PURE__ */ React.createElement(FileTextIcon, null),
toolName,
input: args
}
);
}
}), updateNote = async ({ item }) => {
let oldNoteTitle = await appConnector.getNoteTitleByUUID(item.uuid);
if (item.title && item.title !== oldNoteTitle && await appConnector.setNoteName({ uuid: item.uuid }, item.title), item.content && await appConnector.replaceNoteContent({ uuid: item.uuid }, item.content), item.tags) {
let oldTags = await appConnector.getNoteTagsByUUID({ uuid: item.uuid });
for (let tag of item.tags)
oldTags.includes(tag) || await appConnector.addNoteTag({ uuid: item.uuid }, tag);
for (let tag of oldTags)
item.tags.includes(tag) || await appConnector.removeNoteTag({ uuid: item.uuid }, tag);
}
};
 
// src-copilot/frontend-chat/tools/CreateNewNotes.jsx
init_process();
var CreateNewNotes = () => createGenericCUDTool({
toolName: "CreateNewNotes",
description: "Create new notes in amplenote",
parameters: {
type: "object",
properties: {
notes: {
type: "array",
minItems: window.appSettings[LLM_API_URL_SETTING].includes("googleapis") ? "1" : 1,
items: {
type: "object",
properties: {
noteName: {
type: "string"
},
noteTags: {
type: "array",
items: {
type: "string"
}
},
noteContent: {
type: "string"
}
},
required: ["noteName"]
}
}
}
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@notes") || JSON.stringify(allUserMessages).includes("@all-tools"),
onInit: ({ setFormState, formData, setFormData, args }) => {
setFormData({ ...formData, notesContainerList: args.notes.map((note) => ({
item: note,
checked: !0
})) }), setFormState("waitingForUserInput");
},
renderWaitingForUserInput: ({ args, formData, setFormData, status, setFormState }) => {
let setNotesContainerList = (notesContainerList) => {
setFormData({ ...formData, notesContainerList });
}, { Text } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardContainer, null, /* @__PURE__ */ React.createElement(Text, null, "Select notes to create:"), /* @__PURE__ */ React.createElement(
ItemSelectionTable,
{
itemContainerList: formData.notesContainerList,
setItemContainerList: setNotesContainerList,
status
}
), /* @__PURE__ */ React.createElement(
ToolFooter,
{
submitButtonText: "Create Notes",
cancelButtonText: "Cancel",
status,
setFormState
}
));
},
onSubmitted: async ({ formData, setFormData, setFormError, setFormState, addResult, result }) => {
let lastError = null, selectedItemContainerList = formData.notesContainerList.filter((item) => item.checked), successfulCreatedItems = [], failedItems = [];
for (let selectedItemContainer of selectedItemContainerList)
try {
let result2 = await createNote({
item: selectedItemContainer.item
}) || selectedItemContainer.item;
successfulCreatedItems.push(result2);
} catch (e) {
failedItems.push(selectedItemContainer.item), lastError = e, console.error(e);
}
if (failedItems.length === selectedItemContainerList.length)
throw "Failed to create all items. Sample error: " + errorToString(lastError);
setFormData({ ...formData, successfulCreatedItems, failedItems, lastError }), setFormState("completed");
},
onCompleted: ({ formData, addResult }) => {
let { successfulCreatedItems, failedItems } = formData, lastError = formData.lastError;
failedItems.length === 0 ? addResult({
resultSummary: \`\${successfulCreatedItems.length} notes created successfully.\`,
resultDetail: successfulCreatedItems
}) : addResult({
resultSummary: \`\${successfulCreatedItems.length} notes created successfully. \${failedItems.length} notes failed to create. Error sample: \${errorToString(lastError)}\`,
resultDetail: successfulCreatedItems,
failedResultDetail: failedItems
});
},
renderCompleted: ({ formData, toolName, args }) => {
let { FileTextIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: JSON.stringify(formData.successfulCreatedItems),
text: \`\${formData.successfulCreatedItems.length} notes created successfully.\` + (formData.failedItems.length > 0 ? \`
\${formData.failedItems.length} notes failed to create.\` : ""),
icon: /* @__PURE__ */ React.createElement(FileTextIcon, null),
toolName,
input: args
}
);
}
}), createNote = async ({ item }) => {
let noteUUID = await appConnector.createNote(item.noteName, item.noteTags || []);
if (!noteUUID) throw new Error("Failed to create note");
return item.noteContent && await appConnector.insertNoteContent({ uuid: noteUUID }, item.noteContent), {
...item,
noteUUID
};
};
 
// src-copilot/frontend-chat/tools/FetchNoteDetailByNoteUUID.jsx
init_process();
 
// src-copilot/frontend-chat/tools-core/base/createGenericReadTool.jsx
init_process();
var createGenericReadTool = ({
toolName,
description,
parameters,
triggerCondition,
onInit = ({ setFormState }) => {
},
onCompleted = () => {
},
onError = ({ formError, addResult, args }) => {
addResult(\`Error: \${errorToString(formError)}. Tool invocation failed. Input: \${JSON.stringify(args)}\`);
},
renderInit = () => {
let { Spinner } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardMessage, { text: "Processing...", icon: /* @__PURE__ */ React.createElement(Spinner, null) });
},
renderCompleted = () => {
},
renderError = ({ formError, toolName: toolName2, args }) => /* @__PURE__ */ React.createElement(
ToolCardErrorMessage,
{
toolName: toolName2,
input: args,
text: "Error: " + errorToString(formError),
color: "red"
}
)
}) => AssistantUI.makeAssistantToolUI({
toolName,
description,
parameters,
triggerCondition,
render: ({ args, result, addResult, status, toolCallId }) => {
let allParameters = useGenericToolParameters({
toolName,
toolCallId,
description,
parameters,
args,
status,
result,
addResult
}), [formState, setFormState, formRender] = useGenericToolFormState({
init: {
eventHandler: onInit,
renderer: renderInit
},
completed: {
eventHandler: onCompleted,
renderer: renderCompleted
},
error: {
eventHandler: onError,
renderer: renderError
}
}, allParameters);
return formRender ? formRender({ ...allParameters, formState, setFormState }) : null;
}
});
 
// src-copilot/frontend-chat/tools/FetchNoteDetailByNoteUUID.jsx
var FetchNoteDetailByNoteUUID = () => createGenericReadTool({
toolName: "FetchNoteDetailByNoteUUID",
description: "Get title, backlinks, tags and full content of notes.",
parameters: {
type: "object",
properties: {
noteUUIDList: {
type: "array",
items: {
type: "string",
description: "36 digit UUID of note"
}
},
includeContent: {
type: "boolean",
description: "set true if full content is needed"
}
},
required: ["noteUUIDList"]
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@notes") || JSON.stringify(allUserMessages).includes("@all-tools"),
onInit: async ({ args, formData, setFormData, setFormState }) => {
let noteUUIDList = args.noteUUIDList, noteInfoList = [];
for (let noteUUID of noteUUIDList) {
let noteTitle = await appConnector.getNoteTitleByUUID(noteUUID);
if (!noteTitle) {
noteInfoList.push({ error: \`Note \${noteUUID} not found.\` });
continue;
}
let noteContent = null;
args.includeContent && (noteContent = await appConnector.getNoteContentByUUID(noteUUID), noteContent.length > 8e3 && (noteContent = noteContent.trim().substring(0, 8e3) + "<<too long to display>>..."));
let backlinks = await appConnector.getNoteBacklinksByUUID({ uuid: noteUUID }), tags = await appConnector.getNoteTagsByUUID({ uuid: noteUUID }), noteInfo = { noteUUID, noteTitle, tags, backlinks };
noteContent !== null && (noteInfo.noteContent = noteContent), noteInfoList.push(noteInfo);
}
if (noteInfoList.every((noteInfo) => noteInfo.error))
throw new Error("Failed to fetch all notes. Sample error: " + noteInfoList[0].error);
setFormData({ ...formData, noteInfoList }), setFormState("completed");
},
onCompleted: ({ addResult, formData }) => {
let { noteInfoList } = formData;
addResult({ resultSummary: "Note info fetched successfully.", resultDetail: noteInfoList });
},
renderInit: ({ args }) => {
let { Spinner } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardMessage, { text: "Fetching note details...", icon: /* @__PURE__ */ React.createElement(Spinner, null) });
},
renderCompleted: ({ formData, toolName, args }) => {
let { FileTextIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: JSON.stringify(formData.noteInfoList),
text: "Note info fetched successfully.",
icon: /* @__PURE__ */ React.createElement(FileTextIcon, null),
toolName,
input: args
}
);
}
});
 
// src-copilot/frontend-chat/tools/SearchNotesByTitleTagsContent.jsx
init_process();
 
// src-copilot/markdown/stripYAMLFromMarkdown.js
init_process();
 
// src-copilot/markdown/markdown-parser.js
init_process();
var remarkGfm, unified, remarkFrontmatter, remarkParse, pipe, pipeWithYaml;
async function parse(markdownText, { yaml = !1 } = {}) {
return (!remarkGfm || !unified || !remarkFrontmatter || !remarkParse) && ([remarkGfm, unified, remarkFrontmatter, remarkParse] = await dynamicImportExternalPluginBundle("remarkBundle.js"), unified = unified.unified, remarkGfm = remarkGfm.default, remarkFrontmatter = remarkFrontmatter.default, remarkParse = remarkParse.default), !pipe && !yaml && (pipe = unified().use(remarkParse).use(remarkGfm)), !pipeWithYaml && yaml && (pipeWithYaml = unified().use(remarkParse).use(remarkGfm).use(remarkFrontmatter, ["yaml"])), await (yaml ? pipeWithYaml : pipe).parse(markdownText);
}
 
// node_modules/unist-util-visit/index.js
init_process();
 
// node_modules/unist-util-visit/lib/index.js
init_process();
 
// node_modules/unist-util-visit-parents/index.js
init_process();
 
// node_modules/unist-util-visit-parents/lib/index.js
init_process();
 
// node_modules/unist-util-is/index.js
init_process();
 
// node_modules/unist-util-is/lib/index.js
init_process();
var convert = (
// Note: overloads in JSDoc can\u2019t yet use different \`@template\`s.
/**
* @type {(
* (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &
* (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &
* (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &
* ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &
* ((test?: Test) => Check)
* )}
*/
/**
* @param {Test} [test]
* @returns {Check}
*/
function(test) {
if (test == null)
return ok;
if (typeof test == "function")
return castFactory(test);
if (typeof test == "object")
return Array.isArray(test) ? anyFactory(test) : propsFactory(test);
if (typeof test == "string")
return typeFactory(test);
throw new Error("Expected function, string, or object as test");
}
);
function anyFactory(tests) {
let checks = [], index = -1;
for (; ++index < tests.length; )
checks[index] = convert(tests[index]);
return castFactory(any);
function any(...parameters) {
let index2 = -1;
for (; ++index2 < checks.length; )
if (checks[index2].apply(this, parameters)) return !0;
return !1;
}
}
function propsFactory(check) {
let checkAsRecord = (
/** @type {Record<string, unknown>} */
check
);
return castFactory(all2);
function all2(node2) {
let nodeAsRecord = (
/** @type {Record<string, unknown>} */
/** @type {unknown} */
node2
), key;
for (key in check)
if (nodeAsRecord[key] !== checkAsRecord[key]) return !1;
return !0;
}
}
function typeFactory(check) {
return castFactory(type);
function type(node2) {
return node2 && node2.type === check;
}
}
function castFactory(testFunction) {
return check;
function check(value, index, parent) {
return !!(looksLikeANode(value) && testFunction.call(
this,
value,
typeof index == "number" ? index : void 0,
parent || void 0
));
}
}
function ok() {
return !0;
}
function looksLikeANode(value) {
return value !== null && typeof value == "object" && "type" in value;
}
 
// node_modules/unist-util-visit-parents/lib/index.js
var empty = [], CONTINUE = !0, EXIT = !1, SKIP = "skip";
function visitParents(tree, test, visitor, reverse) {
let check;
typeof test == "function" && typeof visitor != "function" ? (reverse = visitor, visitor = test) : check = test;
let is2 = convert(check), step = reverse ? -1 : 1;
factory(tree, void 0, [])();
function factory(node2, index, parents) {
let value = (
/** @type {Record<string, unknown>} */
node2 && typeof node2 == "object" ? node2 : {}
);
if (typeof value.type == "string") {
let name = (
// \`hast\`
typeof value.tagName == "string" ? value.tagName : (
// \`xast\`
typeof value.name == "string" ? value.name : void 0
)
);
Object.defineProperty(visit2, "name", {
value: "node (" + (node2.type + (name ? "<" + name + ">" : "")) + ")"
});
}
return visit2;
function visit2() {
let result = empty, subresult, offset, grandparents;
if ((!test || is2(node2, index, parents[parents.length - 1] || void 0)) && (result = toResult(visitor(node2, parents)), result[0] === EXIT))
return result;
if ("children" in node2 && node2.children) {
let nodeAsParent = (
/** @type {UnistParent} */
node2
);
if (nodeAsParent.children && result[0] !== SKIP)
for (offset = (reverse ? nodeAsParent.children.length : -1) + step, grandparents = parents.concat(nodeAsParent); offset > -1 && offset < nodeAsParent.children.length; ) {
let child = nodeAsParent.children[offset];
if (subresult = factory(child, offset, grandparents)(), subresult[0] === EXIT)
return subresult;
offset = typeof subresult[1] == "number" ? subresult[1] : offset + step;
}
}
return result;
}
}
}
function toResult(value) {
return Array.isArray(value) ? value : typeof value == "number" ? [CONTINUE, value] : value == null ? empty : [value];
}
 
// node_modules/unist-util-visit/lib/index.js
function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {
let reverse, test, visitor;
typeof testOrVisitor == "function" && typeof visitorOrReverse != "function" ? (test = void 0, visitor = testOrVisitor, reverse = visitorOrReverse) : (test = testOrVisitor, visitor = visitorOrReverse, reverse = maybeReverse), visitParents(tree, test, overload, reverse);
function overload(node2, parents) {
let parent = parents[parents.length - 1], index = parent ? parent.children.indexOf(node2) : void 0;
return visitor(node2, index, parent);
}
}
 
// node_modules/mdast-util-to-string/index.js
init_process();
 
// node_modules/mdast-util-to-string/lib/index.js
init_process();
var emptyOptions = {};
function toString2(value, options) {
let settings = options || emptyOptions, includeImageAlt = typeof settings.includeImageAlt == "boolean" ? settings.includeImageAlt : !0, includeHtml = typeof settings.includeHtml == "boolean" ? settings.includeHtml : !0;
return one(value, includeImageAlt, includeHtml);
}
function one(value, includeImageAlt, includeHtml) {
if (node(value)) {
if ("value" in value)
return value.type === "html" && !includeHtml ? "" : value.value;
if (includeImageAlt && "alt" in value && value.alt)
return value.alt;
if ("children" in value)
return all(value.children, includeImageAlt, includeHtml);
}
return Array.isArray(value) ? all(value, includeImageAlt, includeHtml) : "";
}
function all(values, includeImageAlt, includeHtml) {
let result = [], index = -1;
for (; ++index < values.length; )
result[index] = one(values[index], includeImageAlt, includeHtml);
return result.join("");
}
function node(value) {
return !!(value && typeof value == "object");
}
 
// src-copilot/markdown/stripYAMLFromMarkdown.js
var stripYAMLFromMarkdown = async (markdownText) => {
let root2 = await parse(markdownText, { yaml: !0 }), textContent = "";
return visit(root2, (node2) => {
if (node2.type === "yaml")
return "skip";
if (node2.type === "root" || node2.type === "paragraph")
return "continue";
if (node2.type === "image")
textContent += \`![](\${node2.url})
\`;
else {
let nodeValue = node2.position ? markdownText.substring(node2.position.start.offset, node2.position.end.offset) : toString2(node2);
return textContent += nodeValue + \`
\`, "skip";
}
}), textContent.trim();
};
 
// src-copilot/frontend-chat/helpers/processAndMergeLocalVecDBResults.js
init_process();
var processAndMergeLocalVecDBResults = async (results, thresholdScore = 0.15) => {
let filteredResults = results.filter((result) => result.score >= thresholdScore).sort((a, b) => a.id.localeCompare(b.id)), mergedResults = [], currentResult = filteredResults[0];
for (let i = 1; i < filteredResults.length; i++) {
let nextResult = filteredResults[i];
if (currentResult.metadata.noteUUID === nextResult.metadata.noteUUID) {
currentResult.score = Math.max(currentResult.score, nextResult.score), currentResult.metadata.noteContentPart = await stripYAMLFromMarkdown(currentResult.metadata.noteContentPart);
try {
nextResult.id !== currentResult.id.split("##")[0] + "##" + (parseInt(currentResult.id.split("##")[1]) + 1) && (currentResult.metadata.noteContentPart += \`
<<Redacted>>\`);
} catch {
}
currentResult.metadata.noteContentPart += \`
\` + await stripYAMLFromMarkdown(nextResult.metadata.noteContentPart);
} else
mergedResults.push(currentResult), currentResult = nextResult;
}
return mergedResults.push(currentResult), mergedResults.map((result) => ({
noteTitle: result.metadata.noteTitle,
noteUUID: result.metadata.noteUUID,
noteContentPart: result.metadata.noteContentPart,
tags: result.metadata.noteTags ? result.metadata.noteTags : []
}));
};
 
// src-copilot/frontend-chat/tools/SearchNotesByTitleTagsContent.jsx
var SearchNotesByTitleTagsContent = () => createGenericReadTool({
toolName: "SearchNotesByTitleTagsContent",
description: "Use to get noteUUID from title / tags OR search note content. Only provide required parameters. Returns list of note uuids.",
parameters: {
type: "object",
properties: {
noteContent: {
type: "string",
description: "Search string"
},
noteTitle: {
type: "string",
description: "Title to filter by"
},
tags: {
type: "array",
items: {
type: "string"
},
description: "Tags to filter notes by"
},
isArchived: {
type: "boolean",
description: "When true, only search archived notes (Default: null)"
},
isSharedByMe: {
type: "boolean",
description: "When true, only search notes shared by user (Default: null)"
},
isSharedWithMe: {
type: "boolean",
description: "When true, only search notes shared with user (Default: null)"
},
strictSearch: {
type: "boolean",
description: "When true, strictly match tags and title"
},
limitSearchResults: {
type: "number",
description: "Search result limit (Default: 10)"
}
}
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@notes") || JSON.stringify(allUserMessages).includes("@all-tools"),
renderInit: ({ args, formData }) => {
let { localVecDBSearchError } = formData, { Flex, Text, Spinner } = window.RadixUI, { ExclamationTriangleIcon } = window.RadixIcons;
return localVecDBSearchError ? /* @__PURE__ */ React.createElement(ToolCardContainer, null, /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "2" }, /* @__PURE__ */ React.createElement(Flex, { style: { alignItems: "center", gap: "8px", padding: "8px", backgroundColor: "rgba(0, 0, 0, 0.05)", borderRadius: "4px" } }, /* @__PURE__ */ React.createElement(ExclamationTriangleIcon, null), /* @__PURE__ */ React.createElement(Text, { style: { color: "crimson" } }, "LocalVecDB search failed: ", errorToString(formData.localVecDBSearchError))), /* @__PURE__ */ React.createElement(Flex, { style: { alignItems: "center", gap: "8px" } }, /* @__PURE__ */ React.createElement(Spinner, null), /* @__PURE__ */ React.createElement(Text, null, "Searching user notes using fallback amplenote built-in search...")))) : /* @__PURE__ */ React.createElement(
ToolCardMessage,
{
text: "Searching user notes using LocalVecDB...",
icon: /* @__PURE__ */ React.createElement(Spinner, null)
}
);
},
onInit: async ({ args, formData, setFormData, setFormState, signal }) => {
let localVecDBSearchError = null, searchResults0 = [];
try {
if (args.noteContent && args.noteContent.trim() !== "") {
args.limitSearchResults = args.limitSearchResults || 10;
let results = await appConnector.searchNotesInLocalVecDB(args.noteContent, {
limit: Math.floor(args.limitSearchResults * 3 / 2),
isArchived: args.isArchived,
isSharedByMe: args.isSharedByMe,
isSharedWithMe: args.isSharedWithMe
});
searchResults0.push(...await processAndMergeLocalVecDBResults(results));
}
} catch (e) {
localVecDBSearchError = e, setFormData({ ...formData, localVecDBSearchError }), console.error(localVecDBSearchError);
}
let groups = [];
args.isArchived === !0 && groups.push("archived"), args.isSharedByMe === !0 && groups.push("shared"), args.isSharedWithMe === !0 && groups.push("shareReceived");
let searchResults1 = args.noteTitle ? [await appConnector.findNote({
name: args.noteTitle
})] : [], searchResults2 = args.noteTitle ? await appConnector.filterNotes({
query: args.noteTitle,
...groups.length > 0 && { group: groups.join(",") }
}) : [], searchResults3 = args.noteContent ? await appConnector.filterNotes({
query: args.noteContent,
...groups.length > 0 && { group: groups.join(",") }
}) : [], searchResults4 = args.tags ? await appConnector.filterNotes({
tag: args.tags.join(","),
...groups.length > 0 && { group: groups.join(",") }
}) : [], searchResults5 = !args.noteTitle && !args.noteContent && groups.length > 0 ? await appConnector.filterNotes({
group: groups.join(",")
}) : [], amplenoteSearchResults = [...searchResults1, ...searchResults2, ...searchResults3, ...searchResults4, ...searchResults5];
for (let result of amplenoteSearchResults) {
if (!args.noteContent || args.noteContent.trim() === "") continue;
let matchedParts = await appConnector.getMatchedPartWithFuzzySearch(result.noteUUID || result.uuid, args.noteContent.trim());
matchedParts.length > 0 && (result.noteContentPart = await stripYAMLFromMarkdown(matchedParts[0]));
}
let uuidCounts = {}, allSearchResults = [...searchResults0, ...amplenoteSearchResults].filter((x) => x && (x.uuid || x.noteUUID)), allSearchResultsFilteredByGroup = await Promise.all(allSearchResults.filter(async (result) => {
let satisfiesGroup = !0;
if (groups.includes("archived")) {
let isArchived = await appConnector.filterNotes({
group: "archived",
query: result.uuid
});
satisfiesGroup = satisfiesGroup && isArchived && isArchived.length > 0;
}
if (groups.includes("shared")) {
let isShared = await appConnector.filterNotes({
group: "shared",
query: result.uuid
});
satisfiesGroup = satisfiesGroup && isShared && isShared.length > 0;
}
if (groups.includes("shareReceived")) {
let isShareReceived = await appConnector.filterNotes({
group: "shareReceived",
query: result.uuid
});
satisfiesGroup = satisfiesGroup && isShareReceived && isShareReceived.length > 0;
}
return satisfiesGroup;
}));
allSearchResultsFilteredByGroup.forEach((result) => {
uuidCounts[result.uuid] = (uuidCounts[result.uuid] || 0) + 1;
});
let uniqueResultsSortedByCount = uniqBy_default(allSearchResultsFilteredByGroup, "uuid").sort((a, b) => uuidCounts[b.uuid] !== uuidCounts[a.uuid] ? uuidCounts[b.uuid] - uuidCounts[a.uuid] : a.uuid.localeCompare(b.uuid)), searchResultsMapped = Array.from(uniqueResultsSortedByCount).map((note) => ({
uuid: note.uuid || note.noteUUID,
title: note.name || note.title || note.noteTitle,
tags: args.tags && note.tags && typeof note.tags == "string" ? note.tags.split(",") : note.tags,
...note.noteContentPart && { noteContentPart: note.noteContentPart }
}));
args.strictSearch && (searchResultsMapped = searchResultsMapped.filter((note) => {
let matchesTitle = !0, matchesTags = !0;
return args.noteTitle && (note.title = note.title || "Untitled Note", matchesTitle = note.title.toLowerCase().includes(args.noteTitle.toLowerCase())), args.tags && args.tags.length > 0 && (note.tags = note.tags || [], matchesTags = args.tags.every(
(tag) => note.tags && note.tags.some(
(noteTag) => noteTag.toLowerCase() === tag.toLowerCase()
)
)), matchesTitle && matchesTags;
})), args.limitSearchResults = args.limitSearchResults || 10, args.limitSearchResults && (searchResultsMapped = searchResultsMapped.slice(0, args.limitSearchResults)), setFormData({
...formData,
searchResults: searchResultsMapped,
localVecDBSearchError
}), setFormState("completed");
},
onCompleted: ({ addResult, formData }) => {
let { searchResults } = formData;
addResult({ resultSummary: "Search completed.", searchResults });
},
renderCompleted: ({ formData, toolName, args }) => {
let { Flex, Text } = window.RadixUI, { MagnifyingGlassIcon, ExclamationTriangleIcon } = window.RadixIcons;
return formData.localVecDBSearchError ? /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: JSON.stringify(formData.searchResults),
toolName,
input: args
},
/* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "2" }, /* @__PURE__ */ React.createElement(Flex, { style: { alignItems: "center", gap: "8px", padding: "8px", backgroundColor: "rgba(0, 0, 0, 0.05)", borderRadius: "4px" } }, /* @__PURE__ */ React.createElement(ExclamationTriangleIcon, null), /* @__PURE__ */ React.createElement(Text, { style: { color: "crimson" } }, "LocalVecDB search failed: ", errorToString(formData.localVecDBSearchError))), /* @__PURE__ */ React.createElement(Flex, { style: { alignItems: "center", gap: "8px" } }, /* @__PURE__ */ React.createElement(MagnifyingGlassIcon, null), /* @__PURE__ */ React.createElement(Text, null, "Search completed using fallback amplenote built-in search. ", formData.searchResults.length, " results fetched.")))
) : /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: JSON.stringify(formData.searchResults),
icon: /* @__PURE__ */ React.createElement(MagnifyingGlassIcon, null),
toolName,
text: \`Search completed! \${formData.searchResults.length} results fetched.\`,
input: args
}
);
}
});
 
// src-copilot/frontend-chat/tools/WebBrowser.jsx
init_process();
var WebBrowser = () => createGenericReadTool({
toolName: "WebBrowser",
description: "Read entire webpage content. Don't call this again if page content is already fetched.",
parameters: {
type: "object",
properties: {
url: {
type: "string"
}
},
required: ["url"]
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@web") || JSON.stringify(allUserMessages).includes("@all-tools"),
onInit: async ({ args, formData, setFormData, setFormState, signal }) => {
let url = args.url, pageContent = await getWebPageContent(url, signal);
setFormData({ ...formData, pageContent }), setFormState("completed");
},
onCompleted: ({ addResult, formData }) => {
let { pageContent } = formData;
addResult({ resultSummary: "Page content fetched successfully.", pageContent });
},
renderInit: ({ args }) => {
let { Spinner } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardMessage, { text: \`Fetching page content for \${args.url}...\`, icon: /* @__PURE__ */ React.createElement(Spinner, null) });
},
renderCompleted: ({ formData, toolName, args }) => {
let { GlobeIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: formData.pageContent,
text: "Page content fetched successfully.",
icon: /* @__PURE__ */ React.createElement(GlobeIcon, null),
toolName,
input: args
}
);
}
}), getWebPageContent = async (url, signal) => {
let response = await fetch(\`https://r.jina.ai/\${url.trim()}\`, {
signal
});
if (response.status !== 200)
throw new Error("Failed to fetch web page content");
return await response.text();
};
 
// src-copilot/frontend-chat/tools/WebSearch.jsx
init_process();
 
// common-utils/cors-helpers.js
init_process();
function getCorsBypassUrl(url) {
let proxyURL = new URL("https://plugins.amplenote.com/cors-proxy");
return proxyURL.searchParams.set("apiurl", url), proxyURL;
}
var isUrlNotWorkingMap = /* @__PURE__ */ new Map();
async function fetchWithFallback(urls, options, retryInvalidUrls = !0) {
var _a;
for (let i = 0; i < urls.length; i++) {
let url = urls[i], baseUrl;
try {
if (baseUrl = (_a = url.match(/^https?:\\/\\/[^#?\\/]+/)) == null ? void 0 : _a[0], !retryInvalidUrls && isUrlNotWorkingMap.has(baseUrl))
throw isUrlNotWorkingMap.get(baseUrl);
return await fetch(url, options);
} catch (e) {
if (isUrlNotWorkingMap.set(baseUrl, e), i === urls.length - 1 || !String(e.message).includes("CORS"))
throw e;
}
}
}
 
// src-copilot/frontend-chat/tools/WebSearch.jsx
var WebSearch = () => createGenericReadTool({
toolName: "WebSearch",
description: "Search web for information. Use only when asked to search or to answer questions about current events.",
parameters: {
type: "object",
properties: {
query: {
type: "string",
description: "Search string"
}
},
required: ["query"]
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@web") || JSON.stringify(allUserMessages).includes("@all-tools"),
onInit: async ({ args, formData, setFormData, setFormState, signal }) => {
let searchResults = await search(args.query, signal);
setFormData({ ...formData, searchResults }), setFormState("completed");
},
onCompleted: ({ addResult, formData }) => {
let { searchResults } = formData;
addResult({ resultSummary: "Search completed.", searchResults });
},
renderInit: ({ args }) => {
let { Spinner } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardMessage, { text: \`Searching web for \${args.query}...\`, icon: /* @__PURE__ */ React.createElement(Spinner, null) });
},
renderCompleted: ({ formData, toolName, args }) => {
let { GlobeIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: JSON.stringify(formData.searchResults),
text: "Search completed!",
icon: /* @__PURE__ */ React.createElement(GlobeIcon, null),
toolName,
input: args
}
);
}
}), search = async (query, signal) => {
let response = await fetchWithFallback([
\`https://actions.sider.ai/googleGPT/search_with_rerank?query=\${encodeURIComponent(query)}\`,
getCorsBypassUrl(\`https://search.projectsegfau.lt/search?q=\${encodeURIComponent(query)}&format=json\`),
\`https://api.duckduckgo.com/?q=\${encodeURIComponent(query)}&format=json\`
]);
if (response.status !== 200)
throw new Error("Failed to fetch web search results");
return await response.json();
};
 
// src-copilot/frontend-chat/tools/FetchUserTasks.jsx
init_process();
var FetchUserTasks = () => createGenericReadTool({
toolName: "FetchUserTasks",
description: "Query to fetch information about existing tasks.",
parameters: {
type: "object",
properties: {
query: {
type: "string",
// Does not work with OpenAI when set to "object"
description: \`MongoDB like query object as string to find tasks.
Available fields: completedAt, dismissedAt, endAt, hideUntil, startAt (date)
content, noteUUID, taskUUID, taskDomainUUID, taskDomainName (string)
urgent, important (boolean)
score (number)
Examples:
Find tasks for 25th december: {"startAt": {"$gte": "2024-12-25 00:00:00", "$lte": "2024-12-25 23:59:59"}};
Find tasks in note: {"noteUUID": "note-uuid"};
Find task with content: {"content": {"$regex":"groceries","$options":"i"}};
\`
}
},
required: ["query"]
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@tasks") || JSON.stringify(allUserMessages).includes("@all-tools"),
onInit: async ({ args, formData, setFormData, setFormState }) => {
let Loki = (await dynamic_import_esm_default("lokijs")).default, tasksCollection = new Loki("tasks.db").addCollection("tasks"), allTasks = [], taskDomains = await appConnector.getTaskDomains();
for (let taskDomain of taskDomains) {
let tasks = await appConnector.getTaskDomainTasks(taskDomain.uuid);
for (let task of tasks)
allTasks = [...allTasks, {
completedAt: new Date(task.completedAt * 1e3),
content: task.content,
dismissedAt: new Date(task.dismissedAt * 1e3),
endAt: new Date(task.endAt),
hideUntil: new Date(task.hideUntil * 1e3),
important: task.important,
noteUUID: task.noteUUID,
score: task.score,
startAt: new Date(task.startAt * 1e3),
urgent: task.urgent,
taskUUID: task.uuid,
taskDomainUUID: taskDomain.uuid,
taskDomainName: taskDomain.name
}];
}
tasksCollection.insert(allTasks), window.tasksCollection = tasksCollection;
let queryObj = processQuery(args.query), results = tasksCollection.find(queryObj);
setFormData({ ...formData, queryResult: results }), setFormState("completed");
},
onCompleted: ({ addResult, formData }) => {
let { queryResult } = formData;
addResult({ resultSummary: \`Query completed. Fetched \${queryResult.length} tasks.\`, resultDetail: queryResult });
},
renderInit: ({ args }) => {
let { Spinner } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardMessage, { text: "Searching for tasks...", icon: /* @__PURE__ */ React.createElement(Spinner, null) });
},
renderCompleted: ({ formData, toolName, args }) => {
let { CheckboxIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: JSON.stringify(formData.queryResult),
text: \`\${formData.queryResult.length} tasks fetched successfully.\`,
icon: /* @__PURE__ */ React.createElement(CheckboxIcon, null),
toolName,
input: args
}
);
}
}), processQuery = (query) => {
if (!query) throw new Error("Provided query cannot be empty");
let queryObj = typeof query == "object" ? query : JSON.parse(query);
for (let key in queryObj)
queryObj[key].hasOwnProperty("$gte") && (queryObj[key].$gte = new Date(queryObj[key].$gte)), queryObj[key].hasOwnProperty("$lte") && (queryObj[key].$lte = new Date(queryObj[key].$lte));
for (let key in queryObj)
queryObj[key].hasOwnProperty("$eq") && (queryObj[key].$aeq = queryObj[key].$eq, delete queryObj[key].$eq), queryObj[key].hasOwnProperty("$gt") && (queryObj[key].$jgt = queryObj[key].$gt, delete queryObj[key].$gt), queryObj[key].hasOwnProperty("$gte") && (queryObj[key].$jgte = queryObj[key].$gte, delete queryObj[key].$gte), queryObj[key].hasOwnProperty("$lt") && (queryObj[key].$jlt = queryObj[key].$lt, delete queryObj[key].$lt), queryObj[key].hasOwnProperty("$lte") && (queryObj[key].$jlte = queryObj[key].$lte, delete queryObj[key].$lte), queryObj[key].hasOwnProperty("$between") && (queryObj[key].$jbetween = queryObj[key].$between, delete queryObj[key].$between);
return queryObj;
};
 
// src-copilot/frontend-chat/tools/InsertTasksToNote.jsx
init_process();
var InsertTasksToNote = () => createGenericCUDTool({
toolName: "InsertTasksToNote",
description: "Create tasks and insert them to note",
parameters: {
type: "object",
properties: {
tasks: {
type: "array",
minItems: window.appSettings[LLM_API_URL_SETTING].includes("googleapis") ? "1" : 1,
items: {
type: "object",
properties: {
taskContent: {
type: "string",
description: "Short description of task"
},
taskStartAt: {
type: "string",
description: "Start date and time of the task in ISO format"
},
taskEndAt: {
type: "string",
description: "End date and time of the task in ISO format (Optional)"
},
taskScore: {
type: "number",
description: "Optional score"
}
},
required: ["taskContent"]
}
},
noteUUID: {
type: "string",
description: "36 digit UUID of note to insert the task into."
}
},
required: ["tasks", "noteUUID"]
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@tasks") || JSON.stringify(allUserMessages).includes("@all-tools"),
onInit: ({ setFormState, formData, setFormData, args }) => {
setFormData({ ...formData, tasksContainerList: args.tasks.map((task) => ({
item: task,
checked: !0
})) }), setFormState("waitingForUserInput");
},
renderWaitingForUserInput: ({ args, formData, setFormData, status, setFormState }) => {
let setTasksContainerList = (tasksContainerList) => {
setFormData({ ...formData, tasksContainerList });
}, [noteSelectionArr, setNoteSelectionArr, currentNoteSelectionUUID, setCurrentNoteSelectionUUID] = useNoteSelector({ args, setFormData, formData }), { Text } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardContainer, null, /* @__PURE__ */ React.createElement(Text, null, "Select tasks to insert into note:"), /* @__PURE__ */ React.createElement(
ItemSelectionTable,
{
itemContainerList: formData.tasksContainerList,
setItemContainerList: setTasksContainerList,
status
}
), /* @__PURE__ */ React.createElement(
ToolFooter,
{
submitButtonText: "Insert Tasks",
cancelButtonText: "Cancel",
status,
setFormState,
shouldDisplayNoteSelector: !0,
noteSelectionArr,
currentNoteSelectionUUID,
setCurrentNoteSelectionUUID
}
));
},
onSubmitted: async ({ formData, setFormData, setFormState, addResult, result }) => {
let lastError = null, selectedItemContainerList = formData.tasksContainerList.filter((item) => item.checked), selectedNoteUUID = formData.currentNoteSelectionUUID, successfulInsertedItems = [], failedItems = [];
for (let selectedItemContainer of selectedItemContainerList)
try {
let result2 = await insertTasksToNote({
selectedNoteUUID,
item: selectedItemContainer.item
}) || selectedItemContainer.item;
successfulInsertedItems.push(result2);
} catch (e) {
failedItems.push(selectedItemContainer.item), lastError = e, console.error(e);
}
if (failedItems.length === selectedItemContainerList.length) {
let lastErrorMessage = lastError.message || lastError;
throw "Failed to insert all of the selected tasks. Sample error: " + errorToString(lastErrorMessage);
}
setFormData({ ...formData, successfulInsertedItems, failedItems, lastError }), setFormState("completed");
},
onCompleted: async ({ formData, addResult, setFormData }) => {
let { successfulInsertedItems, failedItems } = formData, lastError = formData.lastError, selectedNoteUUID = formData.currentNoteSelectionUUID, selectedNoteTitle = await appConnector.getNoteTitleByUUID(selectedNoteUUID);
setFormData({ ...formData, selectedNoteTitle }), failedItems.length === 0 ? addResult({
resultSummary: \`\${successfulInsertedItems.length} tasks inserted successfully into note \${selectedNoteTitle} (uuid: \${selectedNoteUUID}).\`,
resultDetails: successfulInsertedItems
}) : addResult({
resultSummary: \`\${successfulInsertedItems.length} tasks inserted successfully into note \${selectedNoteTitle} (uuid: \${selectedNoteUUID}).\${failedItems.length} tasks failed to insert into note.Error sample: \${errorToString(lastError)}\`,
resultDetails: successfulInsertedItems,
failedResultDetails: failedItems
});
},
renderCompleted: ({ formData, args, toolName }) => {
let { CheckboxIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: JSON.stringify(formData.successfulInsertedItems),
text: \`\${formData.successfulInsertedItems.length} tasks inserted successfully into note \${formData.selectedNoteTitle}.\` + (formData.failedItems.length > 0 ? \`
\${formData.failedItems.length} tasks failed to insert.\` : ""),
icon: /* @__PURE__ */ React.createElement(CheckboxIcon, null),
toolName,
input: args
}
);
}
}), insertTasksToNote = async ({ selectedNoteUUID, item }) => {
let taskUUID = await appConnector.insertTask({ uuid: selectedNoteUUID }, {
content: item.taskContent
});
if (!taskUUID) throw new Error("Failed to insert task");
return item.taskStartAt && await appConnector.updateTask(taskUUID, {
startAt: Date.parse(item.taskStartAt) / 1e3
// convert to timestamp
}), item.taskEndAt && await appConnector.updateTask(taskUUID, {
endAt: Date.parse(item.taskEndAt) / 1e3
// convert to timestamp
}), item.taskScore && await appConnector.updateTask(taskUUID, {
score: item.taskScore
}), {
...item,
taskUUID
};
};
 
// src-copilot/frontend-chat/tools/SearchHelpCenter.jsx
init_process();
var SearchHelpCenter = () => createGenericReadTool({
toolName: "SearchHelpCenter",
description: "Search help center",
parameters: {
type: "object",
properties: {
query: {
type: "string",
description: "Search string"
}
},
required: ["query"]
},
triggerCondition: ({ allUserMessages }) => JSON.stringify(allUserMessages).includes("@help") || JSON.stringify(allUserMessages).includes("@all-tools"),
onInit: async ({ args, formData, setFormData, setFormState, signal }) => {
let results = await appConnector.searchHelpCenter(args.query, {
limit: 15
}), searchResults = await processAndMergeLocalVecDBResults(results);
setFormData({ ...formData, searchResults }), setFormState("completed");
},
onCompleted: ({ addResult, formData }) => {
let { searchResults } = formData;
addResult({ resultSummary: "Help Center search completed.", searchResults });
},
renderInit: () => {
let { Spinner } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ToolCardMessage, { text: "Searching help center...", icon: /* @__PURE__ */ React.createElement(Spinner, null) });
},
renderCompleted: ({ formData, toolName, args }) => {
let { QuestionMarkCircledIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
ToolCardResultMessage,
{
result: JSON.stringify(formData.searchResults),
text: \`Help Center search completed! Found \${formData.searchResults.length} pages.\`,
icon: /* @__PURE__ */ React.createElement(QuestionMarkCircledIcon, null),
toolName,
input: args
}
);
}
});
 
// src-copilot/frontend-chat/tools-core/registry/ToolRegistry.js
var _ToolRegistry = class _ToolRegistry {
static registerAllTools() {
_ToolRegistry.tools = [
InsertTasksToNote(),
FetchUserTasks(),
WebSearch(),
WebBrowser(),
CreateNewNotes(),
FetchNoteDetailByNoteUUID(),
SearchNotesByTitleTagsContent(),
UpdateUserNotes(),
UpdateUserTasks(),
EditNoteContent(),
// DeleteTasks(), // No api support for deleting task yet
DeleteUserNotes(),
SearchHelpCenter()
];
}
static getTool(toolName) {
return _ToolRegistry.tools.find((tool) => tool.toolName === toolName);
}
static getToolsByCategory(categoryName) {
let messageWithCategoryName = {
message: "@" + categoryName
};
return Object.values(_ToolRegistry.tools).filter((tool) => tool.unstable_tool.triggerCondition({
lastUserMessage: messageWithCategoryName,
allUserMessages: messageWithCategoryName
}));
}
static getAllTools() {
return _ToolRegistry.tools;
}
};
__publicField(_ToolRegistry, "tools", []);
var ToolRegistry = _ToolRegistry;
 
// src-copilot/frontend-chat/tools-core/registry/ToolCategoryRegistry.js
var _ToolCategoryRegistry = class _ToolCategoryRegistry {
static registerAllCategory() {
_ToolCategoryRegistry.categories.push({
name: "tasks",
description: "<b>Enables tools for amplenote tasks:</b><br />" + ToolRegistry.getToolsByCategory("tasks").map((tool) => tool.unstable_tool.toolName).join("<br />").trim()
}), _ToolCategoryRegistry.categories.push({
name: "notes",
description: "<b>Enables tools for amplenote notes:</b><br />" + ToolRegistry.getToolsByCategory("notes").map((tool) => tool.unstable_tool.toolName).join("<br />").trim()
}), _ToolCategoryRegistry.categories.push({
name: "web",
description: "<b>Enables tools for searching the web:</b><br />" + ToolRegistry.getToolsByCategory("web").map((tool) => tool.unstable_tool.toolName).join("<br />").trim()
}), _ToolCategoryRegistry.categories.push({
name: "help",
description: "<b>Enables tools for the help center:</b><br />" + ToolRegistry.getToolsByCategory("help").map((tool) => tool.unstable_tool.toolName).join("<br />").trim()
});
}
static getCategory(categoryName) {
return _ToolCategoryRegistry.categories.find((category) => category.name === categoryName);
}
static getAllCategoriesNames() {
return _ToolCategoryRegistry.categories.map((category) => category.name);
}
};
__publicField(_ToolCategoryRegistry, "categories", []);
var ToolCategoryRegistry = _ToolCategoryRegistry;
 
// src-copilot/frontend-chat/context/ChatAppContext.jsx
init_process();
var getChatAppContext = () => (window.ChatAppContext || (window.ChatAppContext = React.createContext({})), window.ChatAppContext), ChatAppContextProvider = ({ children }) => {
let ChatAppContext = getChatAppContext(), [threadNewMsgComposerRef, setThreadNewMsgComposerRef] = React.useState(null), [remoteThreadLoaded, setRemoteThreadLoaded] = React.useState(!1), [chatHistoryLoaded, setChatHistoryLoaded] = React.useState(!1), [isChatHistoryOverlayOpen, setIsChatHistoryOverlayOpen] = React.useState(!1);
return /* @__PURE__ */ React.createElement(ChatAppContext.Provider, { value: {
threadNewMsgComposerRef,
setThreadNewMsgComposerRef,
remoteThreadLoaded,
setRemoteThreadLoaded,
chatHistoryLoaded,
setChatHistoryLoaded,
isChatHistoryOverlayOpen,
setIsChatHistoryOverlayOpen
} }, children);
};
 
// src-copilot/frontend-chat/components/FileAttachmentDisplay.jsx
init_process();
var FileAttachmentDisplay = (args) => {
let canRemove = AssistantUI.useAttachment((a) => a.source !== "message"), attachmentFile = AssistantUI.useAttachment((a) => a.file), { FileIcon, FileTextIcon, CheckboxIcon, CursorTextIcon } = window.RadixIcons, fileTypeName = null, fileIcon = null;
switch (attachmentFile.type) {
case "text/amplenote-task":
fileTypeName = "Amplenote Task", fileIcon = /* @__PURE__ */ React.createElement(CheckboxIcon, null);
break;
case "text/amplenote-note":
fileTypeName = "Amplenote Note", fileIcon = /* @__PURE__ */ React.createElement(FileTextIcon, null);
break;
case "text/amplenote-selection":
fileTypeName = "Current Selection", fileIcon = /* @__PURE__ */ React.createElement(CursorTextIcon, null);
break;
default:
fileTypeName = "File", fileIcon = /* @__PURE__ */ React.createElement(FileIcon, null);
break;
}
let { AttachmentUI, AttachmentPrimitive } = window.AssistantUI;
return /* @__PURE__ */ React.createElement(AttachmentUI.Root, null, /* @__PURE__ */ React.createElement("div", { className: "aui-attachment-content" }, /* @__PURE__ */ React.createElement("span", { className: "aui-avatar-root aui-attachment-thumb" }, /* @__PURE__ */ React.createElement("span", null, fileIcon)), /* @__PURE__ */ React.createElement("div", { className: "aui-attachment-text" }, /* @__PURE__ */ React.createElement("p", { className: "aui-attachment-name" }, /* @__PURE__ */ React.createElement(AttachmentPrimitive.Name, null)), /* @__PURE__ */ React.createElement("p", { className: "aui-attachment-type" }, fileTypeName))), canRemove && /* @__PURE__ */ React.createElement(AttachmentUI.Remove, null));
};
 
// src-copilot/frontend-chat/components/CustomComposer.jsx
var CustomComposer = () => {
let allowAttachments = useAllowAttachments(), threadRuntime = AssistantUI.useThreadRuntime(), textareaRef = React.useRef(null);
useTributeSetup(textareaRef, ToolCategoryRegistry.getAllCategoriesNames()), React.useEffect(() => {
textareaRef.current && textareaRef.current.addEventListener("keydown", (e) => {
let isTributeDisplayed = document.querySelector(".tribute-container");
isTributeDisplayed = isTributeDisplayed && isTributeDisplayed.style.display !== "none", e.key === "Enter" && !e.shiftKey && !isTributeDisplayed && threadRuntime.composer.getState().text.trim() && (e.preventDefault(), e.stopPropagation(), threadRuntime.composer.send());
});
}, [threadRuntime, textareaRef]);
let { setThreadNewMsgComposerRef } = React.useContext(getChatAppContext());
React.useEffect(() => {
setThreadNewMsgComposerRef(textareaRef);
}, [textareaRef, setThreadNewMsgComposerRef]);
let { Composer } = window.AssistantUI;
return /* @__PURE__ */ React.createElement(Composer.Root, null, allowAttachments && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
Composer.Attachments,
{
components: {
File: FileAttachmentDisplay
}
}
), /* @__PURE__ */ React.createElement(Composer.AddAttachment, null)), /* @__PURE__ */ React.createElement(Composer.Input, { ref: textareaRef }), /* @__PURE__ */ React.createElement(Composer.Send, null));
}, useAllowAttachments = () => AssistantUI.useThreadRuntime().getState().capabilities.attachments;
 
// src-copilot/frontend-chat/ChatAppHeader.jsx
init_process();
 
// src-copilot/markdown/replaceParagraphTextInMarkdown.jsx
init_process();
var replaceParagraphTextInMarkdown = async (markdownText, replaceFunc) => {
let ast = await parse(markdownText), result = markdownText, textNodes = [];
return visitParents(ast, (node2, ancestors) => {
node2.type === "text" && ancestors.some((parent) => parent.type === "paragraph") && textNodes.push(node2);
}), textNodes.sort((a, b) => b.position.start.offset - a.position.start.offset), textNodes.forEach((node2) => {
let { start, end } = node2.position, startIndex = start.offset, endIndex = end.offset;
result = result.slice(0, startIndex) + replaceFunc(node2.value) + result.slice(endIndex);
}), result;
};
 
// src-copilot/frontend-chat/ChatAppHeader.jsx
var ChatAppHeader = () => {
let runtime = AssistantUI.useAssistantRuntime(), onClickNewChat = React.useCallback(() => runtime.threads.switchToNewThread(), [runtime]), { Box, Tooltip, Button, Popover } = window.RadixUI, { PlusIcon, MagicWandIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(Box, { style: {
display: "flex",
justifyContent: "flex-end",
paddingRight: "4px",
position: "sticky",
top: 0,
zIndex: "1000",
backgroundColor: "var(--color-background)"
} }, /* @__PURE__ */ React.createElement(Popover.Root, null, /* @__PURE__ */ React.createElement(Tooltip, { content: "Prompt Library", style: { padding: "2px" } }, /* @__PURE__ */ React.createElement(Popover.Trigger, { asChild: !0 }, /* @__PURE__ */ React.createElement(Button, { variant: "ghost", size: "1", style: { margin: "2px", paddingTop: "5px" }, className: "user-prompt-library-button" }, /* @__PURE__ */ React.createElement(MagicWandIcon, { width: "13", height: "13" })))), /* @__PURE__ */ React.createElement(Popover.Content, { style: { width: "360px" } }, /* @__PURE__ */ React.createElement(UserPromptLibrary, null))), /* @__PURE__ */ React.createElement(ChatInterfaceMenu, null), /* @__PURE__ */ React.createElement(Tooltip, { content: "New chat" }, /* @__PURE__ */ React.createElement(
Button,
{
variant: "ghost",
size: "1",
style: { marginRight: "4px", margin: "2px" },
onClick: onClickNewChat
},
/* @__PURE__ */ React.createElement(PlusIcon, null)
)));
}, ChatInterfaceMenu = () => {
let threadRuntime = AssistantUI.useThreadRuntime(), [threadMessages, setThreadMessages] = React.useState([]);
threadRuntime.subscribe(() => {
setThreadMessages(threadRuntime.getState().messages || []);
});
let threadMessagesLength = threadMessages == null ? void 0 : threadMessages.length, threadId = AssistantUI.useThreadListItemRuntime().getState().id, [exportNoteExists, setExportNoteExists] = React.useState(!1), [exportNoteName, setExportNoteName] = React.useState(\`Copilot chat - \${threadId}\`), { setIsChatHistoryOverlayOpen } = React.useContext(getChatAppContext());
React.useEffect(() => {
setExportNoteName(\`Copilot chat - \${threadId}\`);
}, [threadId]), React.useEffect(() => {
(async () => {
try {
let note = await window.appConnector.findNote({ name: exportNoteName });
setExportNoteExists(!!note);
} catch {
}
})();
}, [exportNoteName]);
let handleExportAsNote = React.useCallback(async () => {
let noteContent = "";
for (let message of threadMessages) {
noteContent += \`<mark style="color:undefined;">**\${capitalize_default(message.role)}**<!-- {"cycleColor":"\${message.role === "assistant" ? "59" : "57"}"} --></mark>
\`;
for (let contentPart of message.content)
if (contentPart.type === "text") {
let tempText = contentPart.text;
for (let categoryName of ToolCategoryRegistry.getAllCategoriesNames()) {
let toolCategory = ToolCategoryRegistry.getCategory(categoryName);
tempText = await replaceParagraphTextInMarkdown(tempText, (oldVal) => oldVal.replaceAll("@" + categoryName, "\`@" + toolCategory.name + "\`"));
}
noteContent += tempText + \`
\`;
} else contentPart.type === "tool-call" && (noteContent += \`\\xABTool call: \${contentPart.toolName}\\xBB
\`);
}
let note = await appConnector.findNote({ name: exportNoteName });
if (!note && (note = await appConnector.createNote(exportNoteName, []), note = await appConnector.findNote({ name: exportNoteName }), !note || !note.uuid))
throw new Error(\`Failed to create note: \${exportNoteName}\`);
setExportNoteExists(!0), await appConnector.replaceNoteContent({ uuid: note.uuid }, noteContent), await appConnector.navigate(\`https://www.amplenote.com/notes/\${note.uuid}\`), await appConnector.alert(\`Chat exported to note: \${exportNoteName}\`);
}, [threadMessages, threadId, setExportNoteExists, exportNoteName]), handleExportAsJSON = React.useCallback(async () => {
let jsonContent = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(threadMessages, null, 2));
await appConnector.saveFile({ data: jsonContent, name: threadId + ".json" });
}, [threadMessages, threadId, exportNoteName]), { Flex, Text, Box, Popover, DropdownMenu, Button } = window.RadixUI, { DropdownMenuIcon, CodeIcon, Share2Icon, FilePlusIcon, CounterClockwiseClockIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(DropdownMenu.Root, null, /* @__PURE__ */ React.createElement(DropdownMenu.Trigger, null, /* @__PURE__ */ React.createElement(Button, { variant: "ghost", size: "1", style: { margin: "2px" } }, /* @__PURE__ */ React.createElement(DropdownMenuIcon, null))), /* @__PURE__ */ React.createElement(DropdownMenu.Content, null, /* @__PURE__ */ React.createElement(DropdownMenu.Item, { onClick: () => setIsChatHistoryOverlayOpen(!0) }, /* @__PURE__ */ React.createElement(CounterClockwiseClockIcon, null), " Chat History"), /* @__PURE__ */ React.createElement(DropdownMenu.Sub, null, /* @__PURE__ */ React.createElement(DropdownMenu.SubTrigger, { disabled: threadMessagesLength === 0 }, /* @__PURE__ */ React.createElement(Share2Icon, null), " Export chat as"), /* @__PURE__ */ React.createElement(DropdownMenu.SubContent, null, /* @__PURE__ */ React.createElement(DropdownMenu.Item, { onClick: handleExportAsNote }, /* @__PURE__ */ React.createElement(Flex, { style: { alignItems: "center" } }, /* @__PURE__ */ React.createElement(FilePlusIcon, null), /* @__PURE__ */ React.createElement(Flex, { style: { flexDirection: "column", marginLeft: "8px" } }, /* @__PURE__ */ React.createElement(Flex, { style: { alignItems: "center" } }, exportNoteExists ? "Update Note" : "New Note"), /* @__PURE__ */ React.createElement(Text, { size: "1", style: { color: "var(--gray-11)" } }, exportNoteName)))), /* @__PURE__ */ React.createElement(DropdownMenu.Separator, null), /* @__PURE__ */ React.createElement(DropdownMenu.Item, { onClick: handleExportAsJSON }, /* @__PURE__ */ React.createElement(Flex, { style: { alignItems: "center" } }, /* @__PURE__ */ React.createElement(CodeIcon, null), /* @__PURE__ */ React.createElement(Text, { style: { marginLeft: "8px" } }, "Download JSON"))))))));
}, UserPromptLibrary = () => {
let composer = AssistantUI.useComposerRuntime(), [userPromptList, setUserPromptList] = React.useState(null), { threadNewMsgComposerRef } = React.useContext(getChatAppContext());
React.useEffect(() => {
(async () => {
try {
let settings = await window.appConnector.getSettings();
setUserPromptList(JSON.parse(settings[USER_PROMPT_LIST_SETTING]).sort((a, b) => b.usageCount - a.usageCount));
} catch (e) {
setUserPromptList([]), console.error(e);
}
})();
}, []);
let handleInsertPrompt = React.useCallback((prompt) => {
composer.setText(prompt.message), threadNewMsgComposerRef.current.focus();
let newPromptList = userPromptList.map((prompt2) => prompt2.uuid === prompt.uuid ? { ...prompt, usageCount: prompt.usageCount + 1 } : prompt2);
setUserPromptList(newPromptList), window.appConnector.setSetting(USER_PROMPT_LIST_SETTING, JSON.stringify(newPromptList));
}, [composer, userPromptList]), handleAddPrompt = React.useCallback(async () => {
let promptText = await window.appConnector.prompt("Enter prompt:", {
inputs: [
{ label: "Enter custom prompt:", type: "text", value: "" }
]
});
if (!promptText) return;
let promptObject = {
uuid: Math.random().toString(36).substring(7),
message: promptText.trim(),
usageCount: 0
};
await window.appConnector.setSetting(USER_PROMPT_LIST_SETTING, JSON.stringify([...userPromptList, promptObject])), setUserPromptList([...userPromptList, promptObject]);
}, [userPromptList]), handleDeletePrompt = React.useCallback(async (e, prompt) => {
e.stopPropagation(), await window.appConnector.prompt("Are you sure you want to delete this prompt?", {
inputs: [{
label: "Yes, delete this prompt",
type: "checkbox",
value: !0
}]
}) && (await window.appConnector.setSetting(USER_PROMPT_LIST_SETTING, JSON.stringify(userPromptList.filter((p) => p.uuid !== prompt.uuid))), setUserPromptList(userPromptList.filter((p) => p.uuid !== prompt.uuid)));
}, [userPromptList]);
if (!userPromptList) return null;
let { Button, Tooltip, ScrollArea, Text, Box, Card, Flex, IconButton } = window.RadixUI, { TrashIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ScrollArea, { style: { maxHeight: "320px" }, type: "auto" }, /* @__PURE__ */ React.createElement(Box, { style: { padding: "8px" } }, userPromptList.map((prompt) => /* @__PURE__ */ React.createElement(Card, { asChild: !0, key: prompt.uuid, style: { padding: "8px", margin: "6px" }, className: "user-prompt-card" }, /* @__PURE__ */ React.createElement("a", { href: "#", onClick: () => handleInsertPrompt(prompt) }, /* @__PURE__ */ React.createElement(Flex, { justify: "between", align: "start", style: { padding: "2px", minHeight: "33px" } }, /* @__PURE__ */ React.createElement(Text, { style: { fontSize: "11px", display: "-webkit-box", WebkitLineClamp: 2, WebkitBoxOrient: "vertical", overflow: "hidden", textOverflow: "ellipsis", flex: 1 } }, prompt.message), /* @__PURE__ */ React.createElement(
IconButton,
{
variant: "ghost",
color: "red",
size: "1",
style: { alignSelf: "center" },
onClick: (e) => handleDeletePrompt(e, prompt)
},
/* @__PURE__ */ React.createElement(TrashIcon, null)
))))), userPromptList.length === 0 && /* @__PURE__ */ React.createElement(Text, { style: { textAlign: "center", color: "var(--color-text-muted)" } }, "No saved prompts yet"))), /* @__PURE__ */ React.createElement(Box, { style: { marginTop: "16px" } }, /* @__PURE__ */ React.createElement(
Button,
{
className: "user-prompt-library-add-button",
onClick: handleAddPrompt,
variant: "soft",
size: "1",
style: { width: "100%" }
},
"Add New Prompt"
)));
};
 
// src-copilot/frontend-chat/hooks/useAssistantAvatar.jsx
init_process();
var useAssistantAvatar = () => {
let [assistantAvatar, setAssistantAvatar] = React.useState({ fallback: "" });
return React.useEffect(() => {
(async () => {
let assistantAvatarSrc = window.appSettings[CUSTOM_LLM_AVATAR_SETTING];
assistantAvatarSrc ? await isValidImageUrl(assistantAvatarSrc) ? setAssistantAvatar({ src: assistantAvatarSrc }) : (setAssistantAvatar({ fallback: "A" }), console.error(\`Invalid image URL: \${assistantAvatarSrc}\`)) : setAssistantAvatar({ fallback: "A" });
})();
}, []), assistantAvatar;
}, isValidImageUrl = async (url) => !url || url.trim() === "" ? !1 : new Promise((resolve) => {
let img = new Image();
img.onload = () => resolve(!0), img.onerror = () => resolve(!1), img.src = url;
});
 
// src-copilot/frontend-chat/hooks/useModelContext.jsx
init_process();
 
// src-copilot/backend/utils/convertUIToolsToDummyServerTools.js
init_process();
var convertUIToolsToDummyServerTools = (tools) => tools.reduce((acc, tool) => (acc[tool.unstable_tool.toolName] = {
description: tool.unstable_tool.description,
parameters: tool.unstable_tool.parameters
}, acc), {});
 
// src-copilot/frontend-chat/helpers/getSystemMessage.js
init_process();
function getSystemMessage(currentMessages, toolsToAdd) {
let messagesContainImageAttachments = currentMessages.some(
(message) => message.attachments && message.attachments.length > 0 && message.attachments.some((attachment) => attachment.type === "image")
), messageContainsAttachments = currentMessages.some(
(message) => message.attachments && message.attachments.length > 0
), lastMessage = currentMessages[currentMessages.length - 1] || null, lastLastMessage = currentMessages[currentMessages.length - 2] || null, allUserMessages = [...currentMessages].filter((message) => message.role === "user"), tasksWordMentioned = JSON.stringify(allUserMessages).includes("task"), notesWordMentioned = JSON.stringify(allUserMessages).includes("note") || JSON.stringify(allUserMessages).includes("page"), atTheRateLetterMentioned = JSON.stringify(allUserMessages).includes("@"), jotWordMentioned = JSON.stringify(allUserMessages).includes("jot");
if (messagesContainImageAttachments)
return null;
function getToolUsageMessage() {
if (!(notesWordMentioned || tasksWordMentioned || atTheRateLetterMentioned))
return "";
if (toolsToAdd.length === 0)
return 'To interact with Amplenote, call tools. If tools are very much required but cannot be called, ask the user to type @tool_name to enable them. If tool prepended with @ is typed by user, it is already enabled. Only "@tasks", "@notes", "@help" and "@web" are possible.';
let toolUsageMessage = "NEVER call multiple tools in parallel as tool result needs to be awaited.";
lastMessage && (lastMessage.role === "user" || lastMessage.role === "assistant" && lastMessage.content.length <= 1) ? (toolUsageMessage += "To interact with Amplenote, call tools. If tools are required, think a step-by-step plan ensuring to fetch required parameters first.", toolUsageMessage += window.appSettings[LLM_API_URL_SETTING].includes("googleapis") ? "When calling tools, make reasonable assumptions for missing parameters as after tool call user confirmations will be required. DO NOT ask for confirmation separately." : "", toolUsageMessage += window.appSettings[LLM_API_URL_SETTING].includes("googleapis") && notesWordMentioned ? "When using SearchNotesByTitleTagsContent, search by content unless specifically mentioned otherwise." : "") : toolUsageMessage += "To interact with Amplenote, call tools. " + toolUsageMessage;
let resultInstruction = "";
if (lastMessage || lastLastMessage) {
let lastContentContainsWebSearch = lastMessage && lastMessage.content.some((obj) => obj.toolName === "WebSearch"), lastContentContainsSearchNote = lastMessage && lastMessage.content.some((obj) => obj.toolName === "SearchNotesByTitleTagsContent"), lastContentContainsSearchHelpCenter = lastMessage && lastMessage.content.some((obj) => obj.toolName === "SearchHelpCenter"), lastLastContentContainsWebSearch = lastLastMessage && lastLastMessage.content.some((obj) => obj.toolName === "WebSearch"), lastLastContentContainsSearchNote = lastLastMessage && lastLastMessage.content.some((obj) => obj.toolName === "SearchNotesByTitleTagsContent"), lastLastContentContainsSearchHelpCenter = lastLastMessage && lastLastMessage.content.some((obj) => obj.toolName === "SearchHelpCenter");
(lastContentContainsWebSearch || lastLastContentContainsWebSearch) && (resultInstruction = \`If the user is asking a question, provide comprehensive answer using information from search results.
Additionally, cite source links in markdown at end.\`), (lastContentContainsSearchNote || lastLastContentContainsSearchNote) && (resultInstruction = \`If the user is asking a question, provide comprehensive answer using information from search results.
Additionally, cite source note links in markdown at end. To link to a note, use syntax: [Page Title](https://www.amplenote.com/notes/{noteUUID}).\`), (lastContentContainsSearchHelpCenter || lastLastContentContainsSearchHelpCenter) && (resultInstruction = \`If the user is asking a question, provide comprehensive answer using information from search results.
Use markdown image syntax to include images in your answer when relevant.
Additionally, cite source note links in markdown at end.
To link to a note, use syntax: [Page Title](https://www.amplenote.com/help/{noteUUID}).\`);
}
return resultInstruction.trim() !== "" ? toolUsageMessage + " " + resultInstruction : toolUsageMessage;
}
let terminology = [
tasksWordMentioned || notesWordMentioned ? "Daily Jot: Daily note for storing thoughts and tasks." : "",
notesWordMentioned ? "Note / Page: Markdown notes in amplenote." : "",
notesWordMentioned ? "Note UUID: 36 character internal id. User does not understand this. Get this by calling Search note with note name if required." : "",
tasksWordMentioned ? \`Task: Stored in notes, viewable in Agenda and Calendar views.
Task Domain: Organizational containers for tasks, pulling in tasks from external calendars and Amplenote. All tasks belong to a domain.\` : ""
].filter(Boolean).join(\`
\`).trim(), userInfo = [
window.userData.dailyJotNoteUUID && (tasksWordMentioned || jotWordMentioned) ? \`Today's daily jot note UUID: \${window.userData.dailyJotNoteUUID}\` : "",
window.userData.currentNoteUUID && notesWordMentioned ? \`Current Note UUID: \${window.userData.currentNoteUUID}\` : "",
messageContainsAttachments && window.userData.currentNoteUUID && notesWordMentioned ? "Prefer attached note over current note unless specified otherwise." : ""
].filter(Boolean).join(\`
\`).trim();
return \`
You are Ample Copilot, an ai assistant inside a note-taking app called Amplenote. You help users improve productivity and provide accurate information.
\${getToolUsageMessage()}
 
\${terminology ? \`Terminology:-
\${terminology}\` : ""}
 
\${userInfo ? \`User info:-
\${userInfo}\` : ""}
Current time: \${window.dayjs().format()}
\${Intl.DateTimeFormat().resolvedOptions().timeZone ? \`Timezone: \${Intl.DateTimeFormat().resolvedOptions().timeZone}
\` : ""}
\${window.appSettings[CUSTOM_LLM_INSTRUCTION_SETTING] && window.appSettings[CUSTOM_LLM_INSTRUCTION_SETTING].trim() !== "" ? \`Additional Instruction from user:-
\` + window.appSettings[CUSTOM_LLM_INSTRUCTION_SETTING].trim().replaceAll(/\\s+/gm, " ").trim() : ""}
\`.trim().replaceAll(/^[ \\t]+/gm, "").trim();
}
 
// src-copilot/frontend-chat/hooks/useModelContext.jsx
function useModelContext() {
let runtime = AssistantUI.useAssistantRuntime();
React.useEffect(() => {
let removeLastRegisteredModelContextProvider = () => {
};
return runtime.thread.subscribe(() => {
let currentMessages = runtime.thread.getState().messages, lastUserMessage = [...currentMessages].reverse().find((message) => message.role === "user"), allUserMessages = [...currentMessages].filter((message) => message.role === "user");
removeLastRegisteredModelContextProvider();
let toolsToAdd = ToolRegistry.getAllTools().filter((tool) => tool.unstable_tool.triggerCondition({
lastUserMessage,
allUserMessages
}));
removeLastRegisteredModelContextProvider = runtime.registerModelContextProvider({
getModelContext: () => {
let systemMsg = getSystemMessage(currentMessages, toolsToAdd);
return {
tools: convertUIToolsToDummyServerTools([...toolsToAdd]),
system: systemMsg
};
}
});
}), () => {
removeLastRegisteredModelContextProvider();
};
}, [runtime]);
}
 
// src-copilot/frontend-chat/components/UserMessage.jsx
init_process();
 
// src-copilot/frontend-chat/components/makeCustomMarkdownText.jsx
init_process();
var makeCustomMarkdownText = ({ overrideComponents, ...rest } = {}) => {
let { makeMarkdownText } = window.AssistantUIMarkdown;
return makeMarkdownText({
components: {
SyntaxHighlighter: ({ code, components, language }) => {
let { Pre, Code } = components, [HighlightJS, setHighlightJS] = React.useState(null);
return React.useEffect(() => {
(async () => {
if (!HighlightJS)
if (window.HighlightJS)
setHighlightJS(window.HighlightJS);
else {
await dynamicImportCSS("highlight.js/styles/github.css");
let hljs = await dynamic_import_esm_default("highlight.js");
setHighlightJS(hljs.default), window.HighlightJS = hljs.default;
}
})();
}, [HighlightJS]), /* @__PURE__ */ React.createElement(Pre, null, HighlightJS === null ? /* @__PURE__ */ React.createElement(Code, null, code) : /* @__PURE__ */ React.createElement(Code, { dangerouslySetInnerHTML: { __html: HighlightJS.highlight(code, {
language: HighlightJS.getLanguage(language) ? language : "plaintext"
}).value } }));
},
p: ({ node: node2, children, ...props }) => {
let processToolCategoryMentionTags = (text) => text.split(" ").map((part, i) => {
for (let categoryName of ToolCategoryRegistry.getAllCategoriesNames()) {
let toolCategory = ToolCategoryRegistry.getCategory(categoryName);
if (toolCategory && part === \`@\${toolCategory.name}\`)
return /* @__PURE__ */ React.createElement("span", { key: i }, i === 0 ? "" : " ", /* @__PURE__ */ React.createElement(ToolCategoryMentionComponent, { ...toolCategory }, toolCategory.name));
}
return i === 0 ? part : " " + part;
});
return children = Array.isArray(children) ? children.map((child) => typeof child != "string" ? child : processToolCategoryMentionTags(child)) : typeof children == "string" ? processToolCategoryMentionTags(children) : children, /* @__PURE__ */ React.createElement("div", { className: "aui-md-p", ...props }, children);
},
a: ({ node: node2, children, href, ...props }) => /* @__PURE__ */ React.createElement(
"a",
{
className: "aui-md-a",
...props,
href,
onClick: async (e) => {
e.preventDefault();
let isOpenSuccess = await appConnector.navigate(href);
console.log("isOpenSuccess", isOpenSuccess), isOpenSuccess || appConnector.alert(\`Failed to open link due to amplenote restrictions: \${href}
 
Please right click on the link and select "Open link in new tab".\`);
}
},
children
),
CodeHeader: ({ ...args }) => /* @__PURE__ */ React.createElement(AssistantUIMarkdown.CodeHeader, { ...args }),
...overrideComponents
},
rehypePlugins: [rehypeCompressTextNodes],
...rest
});
}, rehypeCompressTextNodes = () => {
let isOfTypeText = (node2) => node2.type === "text" || node2.type === "raw";
return (tree) => {
visit(tree, "element", (node2) => {
if (!node2.children) return;
let compressedChildren = [];
for (let child of node2.children) {
let lastChild = compressedChildren.slice(-1)[0];
lastChild && isOfTypeText(lastChild) && isOfTypeText(child) ? (lastChild.value += child.value, lastChild.position = null, lastChild.type = "text") : compressedChildren.push(child);
}
node2.children = compressedChildren;
});
};
}, ToolCategoryMentionComponent = ({ children, description }) => {
let { Text, Tooltip, Popover } = window.RadixUI;
return /* @__PURE__ */ React.createElement(Popover.Root, null, /* @__PURE__ */ React.createElement(Tooltip, { content: "Click to open tool category documentation" }, /* @__PURE__ */ React.createElement(Popover.Trigger, { asChild: !0 }, /* @__PURE__ */ React.createElement(Text, { as: "a", className: "tool_category_mention", style: { cursor: "pointer" } }, "@", children))), /* @__PURE__ */ React.createElement(Popover.Content, { size: "1", style: { maxHeight: "140px", overflowY: "auto", maxWidth: "260px" } }, /* @__PURE__ */ React.createElement(Text, { size: "1", style: { whiteSpace: "pre-wrap" }, asChild: !0 }, /* @__PURE__ */ React.createElement("span", { dangerouslySetInnerHTML: { __html: description } }))));
};
 
// src-copilot/frontend-chat/components/UserMessage.jsx
var UserMessage = () => {
let { UserMessage: UserMessage2, MessagePrimitive, UserActionBar, BranchPicker } = window.AssistantUI;
return /* @__PURE__ */ React.createElement(UserMessage2.Root, null, /* @__PURE__ */ React.createElement(UserMessage2.Attachments, { components: { File: FileAttachmentDisplay } }), /* @__PURE__ */ React.createElement(MessagePrimitive.If, { hasContent: !0 }, /* @__PURE__ */ React.createElement(UserActionBar, null), /* @__PURE__ */ React.createElement(UserMessageContent, null)), /* @__PURE__ */ React.createElement(BranchPicker, null));
}, UserMessageContentWrapper = ({ children, ...props }) => /* @__PURE__ */ React.createElement("div", { className: "aui-user-message-content", ...props }, children), UserMessageContent = (props) => {
let { MessagePrimitive, ContentPart } = window.AssistantUI;
return /* @__PURE__ */ React.createElement(UserMessageContentWrapper, { ...props }, /* @__PURE__ */ React.createElement(
MessagePrimitive.Content,
{
components: {
Text: UserMessageText
}
}
));
}, UserMessageText = ({ text }) => {
let [children, setChildren] = React.useState(null);
return React.useEffect(() => {
(async () => {
let tempText = text;
for (let categoryName of ToolCategoryRegistry.getAllCategoriesNames()) {
let toolCategory = ToolCategoryRegistry.getCategory(categoryName);
tempText = await replaceParagraphTextInMarkdown(tempText, (oldVal) => oldVal.replace(new RegExp("@" + categoryName + "(\\\\s|$)", "g"), "<toolcategorymention123XG>@" + categoryName + "</toolcategorymention123XG>$1"));
}
let tempChildren = tempText.split(" ").map((part, i) => {
if (part.startsWith("<toolcategorymention123XG>") && part.endsWith("</toolcategorymention123XG>")) {
let toolCategory = ToolCategoryRegistry.getCategory(part.substring(part.indexOf(">@") + 2, part.lastIndexOf("<")));
return /* @__PURE__ */ React.createElement("span", { key: i }, i === 0 ? "" : " ", /* @__PURE__ */ React.createElement(ToolCategoryMentionComponent, { ...toolCategory }, part.substring(part.indexOf(">@") + 2, part.lastIndexOf("<"))));
}
return i === 0 ? part : " " + part;
});
setChildren(tempChildren);
})();
}, [text]), /* @__PURE__ */ React.createElement("div", { className: "aui-md-p" }, children);
};
 
// src-copilot/frontend-chat/hooks/useAmplenoteAttachments.jsx
init_process();
var useAmplenoteAttachments = () => {
let threadRuntime = AssistantUI.useThreadRuntime(), composer = AssistantUI.useComposer(), assistantRuntime = AssistantUI.useAssistantRuntime(), { chatHistoryLoaded } = React.useContext(getChatAppContext());
React.useEffect(() => {
let processAttachments = async () => {
let attachment = await window.appConnector.receiveMessageFromPlugin("attachments");
if (!attachment) return;
let attachmentExists = (attachmentId) => composer.attachments.some((attachment2) => attachment2.id === attachmentId), addAttachmentIfNotExists = async (file) => {
attachment && (attachmentExists(file.name) || await threadRuntime.composer.addAttachment(file));
};
if (attachment.type === "image") {
if (!attachment.src) return;
let response;
try {
response = await fetch(attachment.src);
} catch {
if (response = await fetch(getCorsBypassUrl(attachment.src)), !response.ok)
throw new Error("Both initial and bypass fetch failed");
}
let blob = await response.blob(), fileName = attachment.src.split("/").pop(), file = new File([blob], fileName, { type: "image/jpeg" });
await addAttachmentIfNotExists(file);
} else if (attachment.type === "note") {
let noteUUID = attachment.noteUUID, noteName = attachment.noteTitle || "Untitled Note", noteContent = attachment.noteContent, file = new File([
\`@notes
Attached note title: \${noteName}
Attached note UUID: \${noteUUID}
Attached note content: \${noteContent.length > 8e3 ? "Content too long. Use note detail tool to get full content if required." : noteContent}\`
], noteName, { type: "text/amplenote-note" });
await addAttachmentIfNotExists(file);
} else if (attachment.type === "selection") {
let noteUUID = attachment.noteUUID, selectionContent = attachment.selectionContent, file = new File([
\`@notes
Selection made in note with UUID: \${noteUUID}
Selected text: \${selectionContent}\`
], selectionContent, { type: "text/amplenote-selection" });
await addAttachmentIfNotExists(file);
} else if (attachment.type === "task") {
let taskUUID = attachment.taskUUID, file = new File([
\`@tasks
Attached task UUID: \${taskUUID}\` + (attachment.taskContent ? \`
Task content: \${attachment.taskContent}\` : "") + (attachment.taskStartAt ? \`
Task start at: \${attachment.taskStartAt}\` : "") + (attachment.taskEndAt ? \`
Task end at: \${attachment.taskEndAt}\` : "") + (attachment.completedAt ? \`
Task completed at: \${attachment.completedAt}\` : "") + (attachment.dismissedAt ? \`
Task dismissed at: \${attachment.dismissedAt}\` : "") + (attachment.hideUntil ? \`
Task hide until: \${attachment.hideUntil}\` : "") + (attachment.taskScore ? \`
Task score: \${attachment.taskScore}\` : "") + (attachment.important ? \`
Task important: \${attachment.important}\` : "") + (attachment.urgent ? \`
Task urgent: \${attachment.urgent}\` : "")
], taskUUID, { type: "text/amplenote-task" });
await addAttachmentIfNotExists(file);
} else if (attachment.type === "new-chat") {
let message = attachment.message || [];
await assistantRuntime.threads.switchToNewThread(), await threadRuntime.import({ messages: message });
let composerText = message.composerText;
composerText && await composer.setText(composerText);
}
};
chatHistoryLoaded && processAttachments();
let intervalId = setInterval(processAttachments, 300);
return () => clearInterval(intervalId);
}, [composer, chatHistoryLoaded]);
};
 
// src-copilot/frontend-chat/hooks/useUserDataPolling.jsx
init_process();
function useUserDataPolling() {
let runtime = AssistantUI.useAssistantRuntime();
React.useEffect(() => {
let updateUserData = async () => {
window.appConnector.getUserCurrentNoteData().then(async (userData2) => {
window.userData = { ...window.userData, ...userData2 };
}), window.appConnector.getUserDailyJotNote().then(async (userData2) => {
window.userData = { ...window.userData, ...userData2 };
});
};
updateUserData();
let intervalId = setInterval(() => updateUserData(), 4e3), unsubscribe = runtime.thread.subscribe(() => updateUserData());
return () => {
clearInterval(intervalId), unsubscribe();
};
}, [runtime]);
}
 
// src-copilot/frontend-chat/hooks/useIntervalPingPlugin.jsx
init_process();
function useIntervalPingPlugin() {
React.useEffect(() => {
let intervalId = setInterval(() => {
window.appConnector.ping();
}, 300);
return window.appConnector.ping(), () => clearInterval(intervalId);
}, []);
}
 
// src-copilot/frontend-chat/ChatHistoryOverlay.jsx
init_process();
 
// src-copilot/frontend-chat/components/ThreadCard.jsx
init_process();
function ThreadCard({ thread, onDelete, onClick, isCurrentThread }) {
var _a;
let { Card, Flex, Text, IconButton, Separator, Code } = window.RadixUI, { TrashIcon, Pencil1Icon, PlusIcon, ChatBubbleIcon } = window.RadixIcons, firstMessage = getThreadContent(thread), handleClick = (e) => {
e.preventDefault(), !isCurrentThread && (onClick == null || onClick(thread.id));
}, handleDelete = (e) => {
e.preventDefault(), !isCurrentThread && (onDelete == null || onDelete(thread.id));
};
return /* @__PURE__ */ React.createElement(
Card,
{
style: {
padding: "12px",
marginBottom: "4px",
minHeight: "120px",
maxHeight: "120px",
maxWidth: "100%",
display: "flex",
flexDirection: "column",
cursor: isCurrentThread ? "not-allowed" : "pointer"
},
disabled: isCurrentThread,
asChild: !0
},
/* @__PURE__ */ React.createElement("a", { href: "#", onClick: handleClick, className: "thread-card" }, /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "2", style: { flex: 1 } }, /* @__PURE__ */ React.createElement(Flex, { justify: "between", align: "center", style: { marginBottom: "4px" } }, /* @__PURE__ */ React.createElement(
Text,
{
size: "4",
weight: "bold",
trim: "both",
style: { flex: 1, marginRight: "12px" },
color: isCurrentThread ? "green" : !1,
truncate: !0
},
/* @__PURE__ */ React.createElement(ChatBubbleIcon, { style: { marginRight: "4px" } }),
((_a = thread.title) == null ? void 0 : _a.trim()) || "Untitled Thread"
), /* @__PURE__ */ React.createElement(Flex, { gap: "3", align: "center" }, /* @__PURE__ */ React.createElement(Text, { size: "1", color: "gray", style: { display: "flex", alignItems: "center" } }, /* @__PURE__ */ React.createElement(PlusIcon, { width: 14, height: 14, style: { marginRight: "2px" } }), new Date(thread.created).toLocaleDateString(), " ", new Date(thread.created).toLocaleTimeString()), /* @__PURE__ */ React.createElement(Separator, { orientation: "vertical" }), /* @__PURE__ */ React.createElement(Text, { size: "1", color: "gray", style: { display: "flex", alignItems: "center" } }, /* @__PURE__ */ React.createElement(Pencil1Icon, { width: 14, height: 14, style: { marginRight: "2px" } }), new Date(thread.updated).toLocaleDateString(), " ", new Date(thread.updated).toLocaleTimeString()), isCurrentThread ? /* @__PURE__ */ React.createElement(Code, { size: "1", color: "green", variant: "solid" }, "CURRENT") : /* @__PURE__ */ React.createElement(
IconButton,
{
onClick: handleDelete,
variant: "solid",
size: "1",
color: "red"
},
/* @__PURE__ */ React.createElement(TrashIcon, { width: 14, height: 14 })
))), /* @__PURE__ */ React.createElement("p", { style: { margin: 0, color: "#666", fontSize: "14px", whiteSpace: "pre-wrap", overflow: "hidden" } }, firstMessage)))
);
}
var getThreadContent = (thread) => {
if (!thread.messages || thread.messages.length === 0) return "No messages";
let content = "";
for (let message of thread.messages.messages)
console.log(message), content += \`\${message.message.role}: \${message.message.content.map((contentPart) => contentPart.text).join("")}
\`;
return content;
};
 
// src-copilot/frontend-chat/helpers/CopilotChatHistoryDB.js
init_process();
 
// node_modules/idb/build/index.js
init_process();
var instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c), idbProxyableTypes, cursorAdvanceMethods;
function getIdbProxyableTypes() {
return idbProxyableTypes || (idbProxyableTypes = [
IDBDatabase,
IDBObjectStore,
IDBIndex,
IDBCursor,
IDBTransaction
]);
}
function getCursorAdvanceMethods() {
return cursorAdvanceMethods || (cursorAdvanceMethods = [
IDBCursor.prototype.advance,
IDBCursor.prototype.continue,
IDBCursor.prototype.continuePrimaryKey
]);
}
var transactionDoneMap = /* @__PURE__ */ new WeakMap(), transformCache = /* @__PURE__ */ new WeakMap(), reverseTransformCache = /* @__PURE__ */ new WeakMap();
function promisifyRequest(request) {
let promise = new Promise((resolve, reject) => {
let unlisten = () => {
request.removeEventListener("success", success), request.removeEventListener("error", error);
}, success = () => {
resolve(wrap(request.result)), unlisten();
}, error = () => {
reject(request.error), unlisten();
};
request.addEventListener("success", success), request.addEventListener("error", error);
});
return reverseTransformCache.set(promise, request), promise;
}
function cacheDonePromiseForTransaction(tx) {
if (transactionDoneMap.has(tx))
return;
let done = new Promise((resolve, reject) => {
let unlisten = () => {
tx.removeEventListener("complete", complete), tx.removeEventListener("error", error), tx.removeEventListener("abort", error);
}, complete = () => {
resolve(), unlisten();
}, error = () => {
reject(tx.error || new DOMException("AbortError", "AbortError")), unlisten();
};
tx.addEventListener("complete", complete), tx.addEventListener("error", error), tx.addEventListener("abort", error);
});
transactionDoneMap.set(tx, done);
}
var idbProxyTraps = {
get(target, prop, receiver) {
if (target instanceof IDBTransaction) {
if (prop === "done")
return transactionDoneMap.get(target);
if (prop === "store")
return receiver.objectStoreNames[1] ? void 0 : receiver.objectStore(receiver.objectStoreNames[0]);
}
return wrap(target[prop]);
},
set(target, prop, value) {
return target[prop] = value, !0;
},
has(target, prop) {
return target instanceof IDBTransaction && (prop === "done" || prop === "store") ? !0 : prop in target;
}
};
function replaceTraps(callback) {
idbProxyTraps = callback(idbProxyTraps);
}
function wrapFunction(func) {
return getCursorAdvanceMethods().includes(func) ? function(...args) {
return func.apply(unwrap(this), args), wrap(this.request);
} : function(...args) {
return wrap(func.apply(unwrap(this), args));
};
}
function transformCachableValue(value) {
return typeof value == "function" ? wrapFunction(value) : (value instanceof IDBTransaction && cacheDonePromiseForTransaction(value), instanceOfAny(value, getIdbProxyableTypes()) ? new Proxy(value, idbProxyTraps) : value);
}
function wrap(value) {
if (value instanceof IDBRequest)
return promisifyRequest(value);
if (transformCache.has(value))
return transformCache.get(value);
let newValue = transformCachableValue(value);
return newValue !== value && (transformCache.set(value, newValue), reverseTransformCache.set(newValue, value)), newValue;
}
var unwrap = (value) => reverseTransformCache.get(value);
function openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {
let request = indexedDB.open(name, version), openPromise = wrap(request);
return upgrade && request.addEventListener("upgradeneeded", (event) => {
upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);
}), blocked && request.addEventListener("blocked", (event) => blocked(
// Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405
event.oldVersion,
event.newVersion,
event
)), openPromise.then((db) => {
terminated && db.addEventListener("close", () => terminated()), blocking && db.addEventListener("versionchange", (event) => blocking(event.oldVersion, event.newVersion, event));
}).catch(() => {
}), openPromise;
}
var readMethods = ["get", "getKey", "getAll", "getAllKeys", "count"], writeMethods = ["put", "add", "delete", "clear"], cachedMethods = /* @__PURE__ */ new Map();
function getMethod(target, prop) {
if (!(target instanceof IDBDatabase && !(prop in target) && typeof prop == "string"))
return;
if (cachedMethods.get(prop))
return cachedMethods.get(prop);
let targetFuncName = prop.replace(/FromIndex$/, ""), useIndex = prop !== targetFuncName, isWrite = writeMethods.includes(targetFuncName);
if (
// Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.
!(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) || !(isWrite || readMethods.includes(targetFuncName))
)
return;
let method = async function(storeName, ...args) {
let tx = this.transaction(storeName, isWrite ? "readwrite" : "readonly"), target2 = tx.store;
return useIndex && (target2 = target2.index(args.shift())), (await Promise.all([
target2[targetFuncName](...args),
isWrite && tx.done
]))[0];
};
return cachedMethods.set(prop, method), method;
}
replaceTraps((oldTraps) => ({
...oldTraps,
get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),
has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop)
}));
var advanceMethodProps = ["continue", "continuePrimaryKey", "advance"], methodMap = {}, advanceResults = /* @__PURE__ */ new WeakMap(), ittrProxiedCursorToOriginalProxy = /* @__PURE__ */ new WeakMap(), cursorIteratorTraps = {
get(target, prop) {
if (!advanceMethodProps.includes(prop))
return target[prop];
let cachedFunc = methodMap[prop];
return cachedFunc || (cachedFunc = methodMap[prop] = function(...args) {
advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args));
}), cachedFunc;
}
};
async function* iterate(...args) {
let cursor = this;
if (cursor instanceof IDBCursor || (cursor = await cursor.openCursor(...args)), !cursor)
return;
cursor = cursor;
let proxiedCursor = new Proxy(cursor, cursorIteratorTraps);
for (ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor), reverseTransformCache.set(proxiedCursor, unwrap(cursor)); cursor; )
yield proxiedCursor, cursor = await (advanceResults.get(proxiedCursor) || cursor.continue()), advanceResults.delete(proxiedCursor);
}
function isIteratorProp(target, prop) {
return prop === Symbol.asyncIterator && instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor]) || prop === "iterate" && instanceOfAny(target, [IDBIndex, IDBObjectStore]);
}
replaceTraps((oldTraps) => ({
...oldTraps,
get(target, prop, receiver) {
return isIteratorProp(target, prop) ? iterate : oldTraps.get(target, prop, receiver);
},
has(target, prop) {
return isIteratorProp(target, prop) || oldTraps.has(target, prop);
}
}));
 
// src-copilot/frontend-chat/helpers/CopilotChatHistoryDB.js
var CopilotChatHistoryDB = class {
async init() {
this.db || (this.db = await openDB("CopilotChatHistoryDB", 5, {
upgrade(db, oldVersion) {
db.objectStoreNames.contains("threads") && db.deleteObjectStore("threads"), db.createObjectStore("threads", { keyPath: "remoteId" });
}
}));
}
async getAllThreads() {
return await this.init(), (await this.db.transaction("threads").objectStore("threads").getAll()).sort((a, b) => new Date(b.updated) - new Date(a.updated));
}
async deleteThread(threadId) {
await this.init();
let tx = this.db.transaction("threads", "readwrite"), store = tx.objectStore("threads");
if (!threadId) return !1;
try {
return await store.delete(threadId), await tx.done, !0;
} catch (e) {
return console.error("Failed to delete thread:", e), !1;
}
}
async getThread(threadId) {
await this.init();
let store = this.db.transaction("threads").objectStore("threads");
if (!threadId) return null;
let thread = await store.get(threadId);
return thread || null;
}
async putThread(thread) {
await this.init();
let tx = this.db.transaction("threads", "readwrite"), store = tx.objectStore("threads");
this._validateThread(thread), await store.put({
remoteId: thread.remoteId,
name: thread.name,
created: thread.created,
updated: thread.updated,
status: thread.status,
messages: thread.messages
}), await tx.done;
}
async getLastUpdatedThread() {
let threads = await this.getAllThreads();
return console.log("getLastUpdatedThread", threads), threads.sort((a, b) => new Date(b.updated) - new Date(a.updated))[0] || null;
}
_validateThread(thread) {
if (!thread.remoteId || !thread.name || !thread.created || !thread.updated || !thread.status)
throw new Error("Invalid thread object");
if (!Date.parse(thread.created) || !Date.parse(thread.updated))
throw new Error("Invalid date format for created or updated");
return !0;
}
};
 
// src-copilot/frontend-chat/ChatHistoryOverlay.jsx
function ChatHistoryOverlay() {
let assistantRuntime = AssistantUI.useAssistantRuntime(), chatHistoryDB = new CopilotChatHistoryDB(), [allRemoteThreads, setAllRemoteThreads] = React.useState([]), [searchTerm, setSearchTerm] = React.useState(""), [filteredThreads, setFilteredThreads] = React.useState([]), { setIsChatHistoryOverlayOpen } = React.useContext(getChatAppContext());
React.useEffect(() => {
(async () => {
try {
let allRemoteThreads2 = await chatHistoryDB.getAllThreads();
setAllRemoteThreads(allRemoteThreads2);
} catch (e) {
console.error(e);
}
})();
}, []), React.useEffect(() => {
(async () => {
if (!searchTerm || searchTerm.trim() === "")
return setFilteredThreads(allRemoteThreads);
let fuse = window.fusejs || (await dynamic_import_esm_default("fuse.js")).default;
window.fusejs = fuse;
let fuseObj = new fuse(allRemoteThreads, { keys: ["messages.messages.message.content.text"], threshold: 0.4 });
setFilteredThreads(fuseObj.search(searchTerm, { limit: 10 }).map((result) => result.item));
})();
}, [allRemoteThreads, searchTerm]);
let handleDeleteThread = async (threadId) => {
await assistantRuntime.threads.getItemById(threadId).delete();
let allRemoteThreads2 = await chatHistoryDB.getAllThreads();
setAllRemoteThreads(allRemoteThreads2);
}, handleSwitchToThread = async (threadId) => {
await assistantRuntime.threads.switchToThread(threadId), setIsChatHistoryOverlayOpen(!1);
}, { Box, Flex, TextField, IconButton } = window.RadixUI, { MagnifyingGlassIcon, Cross2Icon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("style", null, \`
@keyframes slideIn {
from {
transform: translateX(100%);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
.slide-in {
animation: slideIn 0.12s ease-out;
}
\`), /* @__PURE__ */ React.createElement(
Box,
{
className: "slide-in",
style: {
position: "fixed",
top: 0,
left: 0,
right: 0,
bottom: 0,
backgroundColor: "rgba(39, 47, 53,0.95)",
zIndex: 2e3
}
},
/* @__PURE__ */ React.createElement(Box, { style: {
width: "100%",
height: "100%",
display: "flex",
flexDirection: "column"
} }, /* @__PURE__ */ React.createElement(Flex, { align: "center", gap: "2", style: {
padding: "16px",
borderBottom: "1px solid #e5e7eb"
} }, /* @__PURE__ */ React.createElement(
IconButton,
{
variant: "soft",
onClick: () => setIsChatHistoryOverlayOpen(!1),
style: { padding: "6px", marginRight: "4px" }
},
/* @__PURE__ */ React.createElement(Cross2Icon, { width: 20, height: 20 })
), /* @__PURE__ */ React.createElement(
TextField.Root,
{
placeholder: "Search chat history...",
variant: "soft",
value: searchTerm,
onChange: (e) => setSearchTerm(e.target.value),
style: {
width: "100%",
padding: "8px 12px",
fontSize: "16px",
flex: 1
},
className: "search-input",
autoFocus: !0
},
/* @__PURE__ */ React.createElement(TextField.Slot, { style: { paddingLeft: "2px" } }, /* @__PURE__ */ React.createElement(MagnifyingGlassIcon, { height: "16", width: "16" })),
searchTerm && /* @__PURE__ */ React.createElement(TextField.Slot, { style: { paddingRight: "0px" } }, /* @__PURE__ */ React.createElement(
Cross2Icon,
{
height: "16",
width: "16",
style: {
cursor: "pointer",
opacity: 0.7
},
onClick: () => setSearchTerm("")
}
))
)), /* @__PURE__ */ React.createElement(Box, { style: {
flex: 1,
overflowY: "auto",
padding: "16px"
} }, /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "2" }, filteredThreads.map((thread) => /* @__PURE__ */ React.createElement(
ThreadCard,
{
key: thread.remoteId,
thread,
isCurrentThread: thread.remoteId === assistantRuntime.threads.mainItem.getState().remoteId,
onClick: () => handleSwitchToThread(thread.remoteId),
onDelete: () => handleDeleteThread(thread.remoteId)
}
)))))
));
}
 
// src-copilot/frontend-chat/hooks/useCustomChatHistoryManager.jsx
init_process();
var useCustomChatHistoryManager = () => {
let assistantRuntime = AssistantUI.useAssistantRuntime(), threadRuntime = AssistantUI.useThreadRuntime(), threadListItemRuntime = AssistantUI.useThreadListItemRuntime(), copilotChatHistoryDB = new CopilotChatHistoryDB(), { remoteThreadLoaded, setChatHistoryLoaded } = React.useContext(getChatAppContext());
React.useEffect(() => {
remoteThreadLoaded && (async () => {
let lastThread = await copilotChatHistoryDB.getLastUpdatedThread();
lastThread ? await assistantRuntime.threads.switchToThread(lastThread.remoteId) : setChatHistoryLoaded(!0);
})();
}, [assistantRuntime, remoteThreadLoaded]);
let updateRemoteThreadMessages = async () => {
try {
let remoteThread = await copilotChatHistoryDB.getThread(threadListItemRuntime.getState().remoteId);
if (remoteThread) {
let exportMessages = threadRuntime.export();
if (exportMessages.messages.length < 1 || remoteThread.messages && exportMessages.messages[0].message.id !== remoteThread.messages.messages[0].message.id || isEqual_default(remoteThread.messages, exportMessages)) return;
remoteThread.messages = exportMessages, remoteThread.updated = (/* @__PURE__ */ new Date()).toISOString(), await copilotChatHistoryDB.putThread(remoteThread);
}
} catch (e) {
console.error("Error persisting thread to CopilotChatHistoryDB:", e);
}
};
threadRuntime.subscribe(async () => {
await updateRemoteThreadMessages();
}), threadListItemRuntime.subscribe(async () => {
try {
if (!threadListItemRuntime.getState().remoteId) return;
let remoteThread = await copilotChatHistoryDB.getThread(threadListItemRuntime.getState().remoteId);
remoteThread && remoteThread.messages && threadRuntime.import(remoteThread.messages), setChatHistoryLoaded(!0);
} catch (e) {
console.error("Error loading thread from CopilotChatHistoryDB:", e);
}
});
};
 
// src-copilot/frontend-chat/components/CustomEditComposer.jsx
init_process();
var CustomEditComposer = () => {
let textareaRef = React.useRef(null);
return useTributeSetup(textareaRef, ToolCategoryRegistry.getAllCategoriesNames()), /* @__PURE__ */ React.createElement(AssistantUI.EditComposer.Root, null, /* @__PURE__ */ React.createElement(AssistantUI.EditComposer.Input, { ref: textareaRef }), /* @__PURE__ */ React.createElement(AssistantUI.EditComposer.Footer, null, /* @__PURE__ */ React.createElement(AssistantUI.EditComposer.Send, null), /* @__PURE__ */ React.createElement(AssistantUI.EditComposer.Cancel, null)));
};
 
// src-copilot/frontend-chat/ChatAppWindow.jsx
var ChatAppWindow = () => {
let assistantAvatar = useAssistantAvatar(), suggestions = useChatSuggestions(), { chatHistoryLoaded, isChatHistoryOverlayOpen } = React.useContext(getChatAppContext());
useModelContext(), useAmplenoteAttachments(), useCustomChatHistoryManager(), useUserDataPolling(), useIntervalPingPlugin();
let { Thread } = window.AssistantUI;
return /* @__PURE__ */ React.createElement("div", { style: { display: "flex", flexDirection: "column" } }, chatHistoryLoaded && isChatHistoryOverlayOpen && /* @__PURE__ */ React.createElement(ChatHistoryOverlay, null), /* @__PURE__ */ React.createElement(ChatAppHeader, null), chatHistoryLoaded && /* @__PURE__ */ React.createElement(
Thread,
{
welcome: {
suggestions
},
assistantMessage: { components: { Text: AssistantUIMarkdownComponent } },
assistantAvatar,
tools: ToolRegistry.getAllTools(),
components: {
Composer: CustomComposer,
UserMessage,
EditComposer: CustomEditComposer
}
}
));
};
 
// src-copilot/frontend-chat/components/RemoteAssistantRuntimeProvider.jsx
init_process();
 
// src-copilot/frontend-chat/hooks/useInnerRuntime.jsx
init_process();
 
// src-copilot/frontend-chat/hooks/useCustomDangerousInBrowserRuntime.jsx
init_process();
var useCustomDangerousInBrowserRuntime = (options) => {
let { localRuntimeOptions, otherOptions } = AssistantUIUtils.splitLocalRuntimeOptions(options), [adapter] = React.useState(() => {
let adapter2 = new AssistantUIUtils.DangerousInBrowserAdapter(otherOptions), originalRun = adapter2.run;
return adapter2.run = async function* (...args) {
var _a;
try {
for await (let chunk of originalRun.call(this, ...args))
yield chunk;
} catch (e) {
throw e.name !== "AbortError" && (console.log(e), (_a = options.onError) == null || _a.call(options, e)), e;
}
}, adapter2;
});
return AssistantUI.useLocalRuntime(adapter, localRuntimeOptions);
};
 
// src-copilot/frontend-chat/components/AmplenoteAttachmentAdapter.jsx
init_process();
var AmplenoteAttachmentAdapter = class {
constructor() {
__publicField(this, "accept", "text/amplenote-note,text/amplenote-selection,text/amplenote-task");
}
async add(state) {
return {
id: state.file.name,
type: "file",
name: state.file.name,
contentType: state.file.type,
file: state.file,
status: { type: "requires-action", reason: "composer-send" }
};
}
async send(attachment) {
let contentText = await getFileText(attachment.file);
return {
...attachment,
status: { type: "complete" },
content: [
{
type: "text",
text: contentText
}
]
};
}
async remove() {
}
}, getFileText = (file) => new Promise((resolve, reject) => {
let reader = new FileReader();
reader.onload = () => resolve(reader.result), reader.onerror = (error) => reject(error), reader.readAsText(file);
});
 
// src-copilot/frontend-chat/hooks/useInnerRuntime.jsx
var useInnerRuntime = () => useCustomDangerousInBrowserRuntime({
model: window.LLM_MODEL,
maxSteps: 4,
maxTokens: appSettings[LLM_MAX_TOKENS_SETTING] || 8192,
adapters: {
attachments: new AssistantUI.CompositeAttachmentAdapter([
new AssistantUI.SimpleImageAttachmentAdapter(),
new AssistantUI.SimpleTextAttachmentAdapter(),
new AmplenoteAttachmentAdapter()
])
},
onFinish: async (result) => {
window.dispatchEvent(new CustomEvent("onLLMCallFinish", { detail: result })), console.log("onLLMCallFinish", result);
},
onError: async (error) => {
appConnector.alert(\`Error: \${errorToString(error)}\`);
}
});
 
// src-copilot/frontend-chat/components/RemoteAssistantRuntimeProvider.jsx
var RemoteAssistantRuntimeProvider = ({ children }) => {
let innerRuntimeHook = React.useCallback(useInnerRuntime, []), copilotChatHistoryDB = React.useMemo(() => new CopilotChatHistoryDB(), []), callbacksRef = React.useRef(/* @__PURE__ */ new Set()), { setRemoteThreadLoaded } = React.useContext(getChatAppContext()), runtime = AssistantUI.unstable_useRemoteThreadListRuntime({
runtimeHook: innerRuntimeHook,
list: async () => {
let remoteThreads = await copilotChatHistoryDB.getAllThreads();
return setRemoteThreadLoaded(!0), {
threads: remoteThreads
};
},
delete: async (threadId) => {
await copilotChatHistoryDB.deleteThread(threadId);
},
// TODO: Implement rename, archive, unarchive
subscribe: (handler) => (callbacksRef.current.add(handler), () => callbacksRef.current.delete(handler)),
initialize: async (threadId) => {
if (await copilotChatHistoryDB.getThread(threadId))
throw "Thread already exists in remote storage. Cannot initialize as new thread.";
let thread = {
id: threadId,
remoteId: threadId,
name: \`Copilot Chat - \${threadId}\`,
created: (/* @__PURE__ */ new Date()).toISOString(),
updated: (/* @__PURE__ */ new Date()).toISOString(),
status: "regular"
};
return await copilotChatHistoryDB.putThread(thread), thread;
}
}), { AssistantRuntimeProvider } = window.AssistantUI;
return /* @__PURE__ */ React.createElement(AssistantRuntimeProvider, { runtime }, children);
};
 
// src-copilot/frontend-chat/ChatApp.jsx
var ChatApp = () => {
let { Theme } = window.RadixUI;
return /* @__PURE__ */ React.createElement(ChatAppContextProvider, null, /* @__PURE__ */ React.createElement(Theme, { appearance: "dark", accentColor: "blue" }, /* @__PURE__ */ React.createElement(RemoteAssistantRuntimeProvider, null, /* @__PURE__ */ React.createElement(ChatAppWindow, null))));
};
 
// src-copilot/embed/chat.jsx
window.INJECTED_EMBED_COMMANDS_MOCK && (window.callAmplenotePlugin = createCallAmplenotePluginMock(deserializeWithFunctions(window.INJECTED_EMBED_COMMANDS_MOCK)));
window.appConnector = new Proxy({}, {
get: function(target, prop, receiver) {
return prop in target ? target[prop] : async function(...args) {
return ["getUserCurrentNoteData", "getUserDailyJotNote", "receiveMessageFromPlugin", "ping"].includes(prop) || window.dispatchEvent(new CustomEvent("callAmplenotePlugin", { detail: [prop, ...args] })), await window.callAmplenotePlugin(prop, ...args);
};
}
});
window.appSettings = window.appSettings || {};
window.userData = window.userData || {};
var body = document.body, html = document.documentElement;
window.addEventListener("resize", function() {
let iframeHeight = Math.min(html.clientHeight, html.scrollHeight);
Object.assign(body.style, {
margin: "0"
});
let appInnerContainer = document.querySelector(".app-container > div > div");
appInnerContainer && Object.assign(appInnerContainer.style, {
height: \`\${iframeHeight}px\`,
overflow: "hidden"
});
});
setInterval(() => window.dispatchEvent(new Event("resize")), 100);
(async () => {
try {
showEmbedLoader(), overwriteWithAmplenoteStyle();
let cssLoaded = Promise.all([
dynamicImportCSS("@assistant-ui/react/dist/styles/index.css"),
dynamicImportCSS("@radix-ui/themes/styles.css"),
dynamicImportCSS("@assistant-ui/react-markdown/dist/styles/markdown.css")
]), [
React2,
ReactDOM,
AssistantUI2,
RadixUI,
AssistantUIMarkdown2,
RadixIcons,
StringDiffModule,
dayjs,
tributejs,
ReactErrorBoundary
] = await dynamicImportExternalPluginBundle("assistantUIBundle.js");
if (window.AssistantUIMarkdown = AssistantUIMarkdown2, window.AssistantUIMarkdownComponent = makeCustomMarkdownText(), window.React = React2, window.ReactDOM = ReactDOM, window.AssistantUI = AssistantUI2, window.RadixUI = RadixUI, window.AssistantUIUtils = {}, window.AssistantUIUtils.DangerousInBrowserAdapter = (await dynamic_import_esm_default("@assistant-ui/react/src/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.ts")).DangerousInBrowserAdapter, window.AssistantUIUtils.splitLocalRuntimeOptions = (await dynamic_import_esm_default("@assistant-ui/react/src/runtimes/local/LocalRuntimeOptions.tsx")).splitLocalRuntimeOptions, window.RadixIcons = RadixIcons, window.StringDiff = StringDiffModule.StringDiff, window.dayjs = dayjs.default, window.Tribute = tributejs.default, window.ReactErrorBoundary = ReactErrorBoundary, console.log("Loaded ReactErrorBoundary", ReactErrorBoundary), await parse(""), window.appSettings = await appConnector.getSettings(), window.LLM_MODEL = await getLLMModel(window.appSettings), hideEmbedLoader(), ToolRegistry.registerAllTools(), ToolCategoryRegistry.registerAllCategory(), !React2 || !window.ReactDOM)
throw new Error("Failed to load React or ReactDOM");
document.querySelector(".app-container") && window.ReactDOM.createRoot(document.querySelector(".app-container")).render(/* @__PURE__ */ React2.createElement(ChatApp, null));
} catch (e) {
window.document.body.innerHTML = '<div class="error" style="color: red; font-size: 20px; padding: 20px;">Error during init: ' + e.message + "</div>", console.error(e);
} finally {
await new Promise((resolve) => setTimeout(resolve, 1600)), window.dispatchEvent(new CustomEvent("appLoaded"));
}
})();
return plugin;
})()
<\/script>
</body>
</html>`;
 
// inline-html:/home/deban/Documents/Projects/my-amplenote-plugins-v2/src-copilot/embed/search.html
var search_default = `<html lang="en">
<head>
<title>Copilot Search</title>
<link href="https://cdn.jsdelivr.net/npm/@radix-ui/themes@3.1.6/styles.min.css" rel="stylesheet">
</head>
<body>
<div class="app-container"></div>
<script>(() => {
// common-utils/embed-comunication.js
function createCallAmplenotePluginMock(embedCommandsMock) {
return async (commandName, ...args) => {
if (commandName in embedCommandsMock)
return await embedCommandsMock[commandName](...args);
throw new Error(\`Unknown command: \${commandName}\`);
};
}
function deserializeWithFunctions(str) {
return JSON.parse(str, (key, value) => {
if (typeof value == "string" && value.startsWith("__FUNCTION:")) {
let functionBody = value.slice(11);
return new Function(\`return \${functionBody}\`)();
}
return value;
});
}
 
// package.json
var package_default = {
name: "amplenote-plugin-dev-env",
author: "debajandhar12",
version: "1.0.0",
type: "module",
repository: "https://github.com/debanjandhar12/my-amplenote-plugins-v2",
dependencies: {
"@debanjandhar12/markmap-lib": "0.17.0-mod.3",
"@debanjandhar12/markmap-toolbar": "0.17.0-mod.3",
"@debanjandhar12/markmap-view": "0.17.0-mod.3",
"date-fns": "^3.6.0",
"lodash-es": "^4.17.21",
luxon: "^3.4.4",
"@yiuayiu/telegram-markdown-escape": "^0.0.2-1",
"@omnivore-app/api": "^1.0.4",
"markdown-it": "^14.1.0",
"remark-gfm": "4.0.0",
"remark-parse": "11.0.0",
"remark-frontmatter": "5.0.0",
unified: "11.0.0",
"unist-util-visit": "5.0.0",
"unist-util-visit-parents": "6.0.1",
"mdast-util-to-string": "4.0.0",
"d3-svg-to-png": "^0.3.1",
"chart.js": "^4.4.3",
fparser: "^3.1.0",
nanoid: "^5.0.7",
zod: "3.23.8",
react: "18.2.0",
"react-dom": "18.2.0",
"react-window": "1.8.11",
"@assistant-ui/react-markdown": "0.7.16",
"emoji-mart": "^5.6.0",
"@emoji-mart/data": "^1.2.1",
"@emoji-mart/react": "^1.1.1",
"@pinecone-database/pinecone": "4.1.0",
"react-string-diff": "0.2.0",
"@radix-ui/themes": "3.2.0",
"@assistant-ui/react": "0.7.65",
"@radix-ui/react-icons": "1.3.2",
tributejs: "5.1.3",
ai: "4.2.8",
"@ai-sdk/groq": "1.2.1",
"@ai-sdk/anthropic": "1.2.2",
"@ai-sdk/openai": "1.3.4",
"@ai-sdk/google": "1.2.3",
"@ai-sdk/fireworks": "0.2.2",
"ollama-ai-provider": "1.2.0",
"easy-web-worker": "7.0.2",
"fuse.js": "7.0.0",
"react-virtuoso": "4.12.5",
"async-mutex": "0.5.0",
"@huggingface/transformers": "3.2.4",
fflate: "0.8.2",
dayjs: "1.11.13",
"react-error-boundary": "5.0.0",
"scheduler-polyfill": "^1.3.0",
"my-ample-plugin-external": "1.0.21"
},
devDependencies: {
"@types/jest": "^29.5.0",
cors: "^2.8.5",
"cross-fetch": "^4.0.0",
dotenv: "^16.0.3",
esbuild: "0.25.0",
"esbuild-jest2": "0.6.7",
"esbuild-plugins-node-modules-polyfill": "1.7.0",
express: "^5.0.1",
"isomorphic-fetch": "^3.0.0",
jest: "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
jsdom: "^24.1.0",
"make-synchronous": "^1.0.0",
playwright: "^1.49.1",
"@playwright/test": "^1.49.1",
"core-js": "^3.38.1",
"@testing-library/react": "^16.0.1",
"@testing-library/jest-dom": "^6.5.0",
"esbuild-plugin-external-global": "^1.0.1",
"@huggingface/transformers": "3.2.4",
"node-fetch": "^3.3.2",
idb: "^8.0.1",
"p-retry": "^6.2.1"
},
scripts: {
test: "jest --testPathPattern=src-copilot",
"test:watch": "jest --testPathPattern=src-copilot --watch",
"build:prod": "NODE_ENV=production node esbuild.js $(pwd)/src-copilot",
"build:dev": "node esbuild.js $(pwd)/src-copilot --watch --server"
}
};
 
// common-utils/dynamic-import-esm.js
var dynamicImportExternalPluginBundle = async (fileName, { isESM = !0 } = {}) => {
let url = new URL(\`https://esm.sh/my-ample-plugin-external@\${package_default.dependencies["my-ample-plugin-external"]}/bundles/\${fileName}\`);
if (!isESM)
return fetch(url.toString()).then((res) => res.arrayBuffer()).then((buffer) => new Uint8Array(buffer));
url.searchParams.set("bundle", !0);
let module = await import(url.toString());
if (Object.keys(module.versions).length !== module.default.length)
throw new Error(\`Failed to import module: \${fileName}. Expected module count mismatch (expected: \${module.default.length}, actual: \${Object.keys(module.versions).length}). Possibly due to my-ample-plugin-external version mismatch.\`);
for (let [key, value] of Object.entries(module.versions))
if (value !== package_default.dependencies[key])
throw new Error(\`Failed to import module: \${fileName}. Version mismatch for \${key} (expected: \${package_default.dependencies[key]}, actual: \${value})\`);
if (module.default)
return console.log(\`Imported module: \${fileName} from \${url.toString()}\`, module.versions), module.default;
throw new Error(\`Failed to import module: \${fileName}\`);
};
function getBasePackage(pkg) {
if (pkg.startsWith("@")) {
let [scope, name] = pkg.split("/");
return \`\${scope}/\${name}\`;
}
return pkg.split("/")[0];
}
function resolvePackageVersion(pkg, pkgVersion) {
let basePkg = getBasePackage(pkg), version = pkgVersion || package_default.dependencies[basePkg] || package_default.devDependencies[basePkg] || "latest";
return version.startsWith("^") || version.startsWith("~") ? version.substring(1) : version;
}
function getPackageFolderString(pkg) {
let folders = [];
return pkg.startsWith("@") ? [, , ...folders] = pkg.split("/") : [, ...folders] = pkg.split("/"), folders && folders.length > 0 ? \`/\${folders.join("/")}\` : "";
}
function buildCDNUrl(cdn, pkg, version) {
let basePkg = getBasePackage(pkg), versionString = version !== "latest" ? \`@\${version}\` : "", folderString = getPackageFolderString(pkg), url = new URL(\`\${cdn}\${basePkg}\${versionString}\${folderString}\`);
if (cdn !== "https://esm.sh/" && (basePkg.includes("react") || basePkg.includes("radix")))
throw new Error(\`React based packages is not supported in \${cdn}\`);
if (cdn !== "https://legacy.esm.sh/" && basePkg.includes("build"))
throw new Error(\`Build API package is not supported in \${cdn}\`);
return cdn === "https://esm.sh/" && (basePkg !== "react-dom" && basePkg !== "react" && url.searchParams.set("bundle-deps", !1), !pkg.endsWith(".css") && pkg !== "build" && url.searchParams.set("deps", \`react@\${package_default.dependencies.react},react-dom@\${package_default.dependencies["react-dom"]}\`)), url.toString();
}
var dynamicImportCSS = async (pkg, pkgVersion = null) => {
let resolvedVersion = resolvePackageVersion(pkg, pkgVersion), url = buildCDNUrl("https://esm.sh/", pkg, resolvedVersion), link = document.createElement("link");
return link.rel = "stylesheet", link.href = url, document.head.appendChild(link), new Promise((resolve) => link.onload = resolve);
};
 
// src-copilot/frontend-chat/overwriteWithAmplenoteStyle.js
var overwriteWithAmplenoteStyle = () => {
let body2 = document.body, styleEl = document.createElement("style");
styleEl.innerText = \`
.dark, .dark-theme, :is(.dark, .dark-theme) :where(.radix-themes:not(.light, .light-theme)) {
--color-background: #272f35;
}
.dark, .dark-theme {
--gray-1: #292f33;
--gray-2: #2f3539;
--gray-3: #343c43;
--gray-4: #36414b;
--gray-5: #3a4651;
--gray-6: #3e4d5a;
--gray-7: #455968;
--gray-8: #577084;
--gray-9: #617b8f;
--gray-10: #6d8599;
--gray-11: #a7bac9;
--gray-12: #eaeff3;
 
--gray-a1: #d12f0003;
--gray-a2: #f4c99b0a;
--gray-a3: #e0e8fc12;
--gray-a4: #b0d3fe1c;
--gray-a5: #aed2fb24;
--gray-a6: #a4d2fe2f;
--gray-a7: #9dd4fe41;
--gray-a8: #a1d4ff64;
--gray-a9: #a8d9ff72;
--gray-a10: #b3dbfd7f;
--gray-a11: #d6ecffbb;
--gray-a12: #f7fbfff0;
 
--gray-contrast: #FFFFFF;
--gray-surface: rgba(0, 0, 0, 0.05);
--gray-indicator: #617b8f;
--gray-track: #617b8f;
}
@supports (color: color(display-p3 1 1 1)) {
@media (color-gamut: p3) {
.dark, .dark-theme {
--gray-1: oklch(30% 0.0115 242.8);
--gray-2: oklch(32.3% 0.0119 242.8);
--gray-3: oklch(35.3% 0.0166 242.8);
--gray-4: oklch(37.1% 0.0213 242.8);
--gray-5: oklch(38.8% 0.024 242.8);
--gray-6: oklch(41.2% 0.0288 242.8);
--gray-7: oklch(45.3% 0.035 242.8);
--gray-8: oklch(53.4% 0.0433 242.8);
--gray-9: oklch(57% 0.0433 242.8);
--gray-10: oklch(60.5% 0.0412 242.8);
--gray-11: oklch(77.9% 0.0302 242.8);
--gray-12: oklch(94.9% 0.0081 242.8);
 
--gray-a1: color(display-p3 0.9451 0.1843 0 / 0.005);
--gray-a2: color(display-p3 0.9961 0.898 0.8 / 0.033);
--gray-a3: color(display-p3 0.902 0.9255 1 / 0.069);
--gray-a4: color(display-p3 0.698 0.8353 0.9961 / 0.109);
--gray-a5: color(display-p3 0.702 0.8353 1 / 0.138);
--gray-a6: color(display-p3 0.6784 0.8275 1 / 0.183);
--gray-a7: color(display-p3 0.6588 0.8235 1 / 0.252);
--gray-a8: color(display-p3 0.6824 0.8392 1 / 0.385);
--gray-a9: color(display-p3 0.7059 0.8549 1 / 0.439);
--gray-a10: color(display-p3 0.749 0.8706 1 / 0.488);
--gray-a11: color(display-p3 0.8667 0.9294 1 / 0.725);
--gray-a12: color(display-p3 0.9725 0.9843 1 / 0.941);
 
--gray-contrast: #FFFFFF;
--gray-surface: color(display-p3 0 0 0 / 5%);
--gray-indicator: oklch(57% 0.0433 242.8);
--gray-track: oklch(57% 0.0433 242.8);
}
}
}
.dark, .dark-theme {
--accent-1: #252f3c;
--accent-2: #253141;
--accent-3: #223e64;
--accent-4: #1a467f;
--accent-5: #1e508f;
--accent-6: #275b9e;
--accent-7: #2e68b2;
--accent-8: #3277cf;
--accent-9: #0080ff;
--accent-10: #3378d0;
--accent-11: #7cbaff;
--accent-12: #cbe3ff;
 
--accent-a1: #002ffc09;
--accent-a2: #084ff510;
--accent-a3: #126ffc3c;
--accent-a4: #046dfe5e;
--accent-a5: #1379ff72;
--accent-a6: #2784ff85;
--accent-a7: #328bff9e;
--accent-a8: #368dffc3;
--accent-a9: #0080ff;
--accent-a10: #378effc4;
--accent-a11: #7cbaff;
--accent-a12: #cbe3ff;
 
--accent-contrast: #fff;
--accent-surface: #24334d80;
--accent-indicator: #0080ff;
--accent-track: #0080ff;
}
 
@supports (color: color(display-p3 1 1 1)) {
@media (color-gamut: p3) {
.dark, .dark-theme {
--accent-1: oklch(30% 0.0278 256.1);
--accent-2: oklch(31% 0.0325 256.1);
--accent-3: oklch(36.2% 0.074 256.1);
--accent-4: oklch(39.6% 0.1073 256.1);
--accent-5: oklch(43.2% 0.1173 256.1);
--accent-6: oklch(47.1% 0.1224 256.1);
--accent-7: oklch(51.7% 0.1323 256.1);
--accent-8: oklch(57% 0.1522 256.1);
--accent-9: oklch(61.5% 0.2108 256.1);
--accent-10: oklch(57.3% 0.1522 256.1);
--accent-11: oklch(78% 0.1427 256.1);
--accent-12: oklch(90.8% 0.0525 256.1);
 
--accent-a1: color(display-p3 0 0.1882 0.9882 / 0.035);
--accent-a2: color(display-p3 0.0314 0.3176 0.9922 / 0.06);
--accent-a3: color(display-p3 0.1608 0.4314 1 / 0.222);
--accent-a4: color(display-p3 0.1294 0.4275 1 / 0.35);
--accent-a5: color(display-p3 0.1882 0.4824 1 / 0.424);
--accent-a6: color(display-p3 0.2549 0.5216 1 / 0.498);
--accent-a7: color(display-p3 0.2902 0.5529 1 / 0.597);
--accent-a8: color(display-p3 0.3098 0.5569 1 / 0.734);
--accent-a9: color(display-p3 0.2157 0.5059 1 / 0.961);
--accent-a10: color(display-p3 0.3137 0.5647 1 / 0.739);
--accent-a11: color(display-p3 0.5529 0.7373 0.9961 / 0.971);
--accent-a12: color(display-p3 0.8235 0.8941 1 / 0.986);
 
--accent-contrast: #fff;
--accent-surface: color(display-p3 0.1529 0.1961 0.2902 / 0.5);
--accent-indicator: oklch(61.5% 0.2108 256.1);
--accent-track: oklch(61.5% 0.2108 256.1);
}
}
}\`.replace(/\\s+/g, " ").trim(), styleEl.innerText += \`
.app-container .radix-themes {
--default-font-size: 15px;
}
\`.replace(/\\s+/g, " ").trim(), body2.appendChild(styleEl);
let styleEl2 = document.createElement("style");
styleEl2.innerText = \`
.dark {
--aui-background: 210, 10%, 18%;
--aui-foreground: 210, 10%, 94%;
--aui-card: 210, 10%, 20%;
--aui-card-foreground: 210, 10%, 94%;
--aui-popover: 210, 10%, 22%;
--aui-popover-foreground: 210, 10%, 94%;
--aui-border: 210, 10%, 50%;
--aui-input: 210, 10%, 50%;
--aui-ring: 210, 10%, 18%;
 
--aui-primary: 205 80% 50%;
--aui-primary-foreground: 0, 0%, 100%;
--aui-secondary: 205, 10%, 94%;
--aui-secondary-foreground: 205, 10%, 18%;
 
--aui-muted-foreground: 205, 10%, 50%;
--aui-accent: 205, 100%, 50%;
--aui-accent-foreground: 0, 0%, 100%;
 
--aui-destructive: 0, 84%, 60%;
--aui-destructive-foreground: 0, 0%, 98%;
 
--aui-radius: 0.3rem;
}\`.replace(/\\s+/g, " ").trim(), body2.appendChild(styleEl2);
let styleEl3 = document.createElement("style");
styleEl3.innerText = \`
.tool_category_mention {
background-color: var(--accent-a3);
border-radius: var(--aui-radius);
}
div.aui-user-message-content {
border-radius: 1.25rem;
}
\`.replace(/\\s+/g, " ").trim(), body2.appendChild(styleEl3);
};
 
// common-utils/embed-ui.js
function showEmbedLoader() {
window.LoadingStartTime = performance.now();
let overlay = document.createElement("div");
overlay.id = "embed-loader-overlay", overlay.style.cssText = \`
position: fixed;
top: 0;
left: 0;
width: 100%;
/*height: 100%;*/
background-color: rgba(0, 0, 0, 0.5);
z-index: 9998;
animation: fadeIn 0.3s ease-in-out;
\`;
let loader = document.createElement("div");
loader.id = "embed-loader", loader.style.cssText = \`
position: fixed;
left: 50%;
transform: translate(-50%, 0%);
width: 50px;
height: 50px;
border: 5px solid #f3f3f3;
border-top: 5px solid #3498db;
border-radius: 50%;
animation: spin 1s linear infinite;
z-index: 9999;
\`;
let keyframes = document.createElement("style");
keyframes.textContent = \`
@keyframes spin {
0% { transform: translate(-50%, -50%) rotate(0deg); }
100% { transform: translate(-50%, -50%) rotate(360deg); }
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
\`, document.head.appendChild(keyframes), document.body.appendChild(overlay), document.body.appendChild(loader), overlay.style.display = "none", loader.style.display = "none", setTimeout(() => {
document.getElementById("embed-loader") && (loader.style.display = "block"), document.getElementById("embed-loader-overlay") && (overlay.style.display = "block");
}, 240);
}
function hideEmbedLoader() {
window.LoadingEndTime = performance.now(), console.log("Loading time:", window.LoadingEndTime - window.LoadingStartTime);
let loader = document.getElementById("embed-loader"), overlay = document.getElementById("embed-loader-overlay");
loader && loader.remove(), overlay && overlay.remove();
}
 
// src-copilot/frontend-search/components/EndlessScroll.jsx
var EndlessScroll = ({ data, iterationCnt, itemContent }) => {
let { ScrollArea, Flex, Spinner } = window.RadixUI, { Virtuoso } = window.ReactVirtuoso, [currentMultiplier, setCurrentMultiplier] = React.useState(1);
return console.log(data, data.slice(0, iterationCnt * currentMultiplier), currentMultiplier), /* @__PURE__ */ React.createElement(ScrollArea, null, /* @__PURE__ */ React.createElement(
Virtuoso,
{
data: data.slice(0, iterationCnt * currentMultiplier),
useWindowScroll: !0,
itemContent,
endReached: () => {
setTimeout(() => {
data.length > iterationCnt * currentMultiplier && setCurrentMultiplier(currentMultiplier + 1);
}, 1e3);
},
components: {
Footer: () => data.length > iterationCnt * currentMultiplier && /* @__PURE__ */ React.createElement(Flex, { direction: "column", align: "center", justify: "center" }, /* @__PURE__ */ React.createElement(Spinner, { size: "3" }))
},
style: { height: "100%" }
}
));
};
 
// node_modules/lodash-es/_freeGlobal.js
var freeGlobal = typeof globalThis == "object" && globalThis && globalThis.Object === Object && globalThis, freeGlobal_default = freeGlobal;
 
// node_modules/lodash-es/_root.js
var freeSelf = typeof self == "object" && self && self.Object === Object && self, root = freeGlobal_default || freeSelf || Function("return this")(), root_default = root;
 
// node_modules/lodash-es/_Symbol.js
var Symbol2 = root_default.Symbol, Symbol_default = Symbol2;
 
// node_modules/lodash-es/_getRawTag.js
var objectProto = Object.prototype, hasOwnProperty = objectProto.hasOwnProperty, nativeObjectToString = objectProto.toString, symToStringTag = Symbol_default ? Symbol_default.toStringTag : void 0;
function getRawTag(value) {
var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
try {
value[symToStringTag] = void 0;
var unmasked = !0;
} catch {
}
var result = nativeObjectToString.call(value);
return unmasked && (isOwn ? value[symToStringTag] = tag : delete value[symToStringTag]), result;
}
var getRawTag_default = getRawTag;
 
// node_modules/lodash-es/_objectToString.js
var objectProto2 = Object.prototype, nativeObjectToString2 = objectProto2.toString;
function objectToString(value) {
return nativeObjectToString2.call(value);
}
var objectToString_default = objectToString;
 
// node_modules/lodash-es/_baseGetTag.js
var nullTag = "[object Null]", undefinedTag = "[object Undefined]", symToStringTag2 = Symbol_default ? Symbol_default.toStringTag : void 0;
function baseGetTag(value) {
return value == null ? value === void 0 ? undefinedTag : nullTag : symToStringTag2 && symToStringTag2 in Object(value) ? getRawTag_default(value) : objectToString_default(value);
}
var baseGetTag_default = baseGetTag;
 
// node_modules/lodash-es/isObjectLike.js
function isObjectLike(value) {
return value != null && typeof value == "object";
}
var isObjectLike_default = isObjectLike;
 
// node_modules/lodash-es/isSymbol.js
var symbolTag = "[object Symbol]";
function isSymbol(value) {
return typeof value == "symbol" || isObjectLike_default(value) && baseGetTag_default(value) == symbolTag;
}
var isSymbol_default = isSymbol;
 
// node_modules/lodash-es/_trimmedEndIndex.js
var reWhitespace = /\\s/;
function trimmedEndIndex(string) {
for (var index = string.length; index-- && reWhitespace.test(string.charAt(index)); )
;
return index;
}
var trimmedEndIndex_default = trimmedEndIndex;
 
// node_modules/lodash-es/_baseTrim.js
var reTrimStart = /^\\s+/;
function baseTrim(string) {
return string && string.slice(0, trimmedEndIndex_default(string) + 1).replace(reTrimStart, "");
}
var baseTrim_default = baseTrim;
 
// node_modules/lodash-es/isObject.js
function isObject(value) {
var type = typeof value;
return value != null && (type == "object" || type == "function");
}
var isObject_default = isObject;
 
// node_modules/lodash-es/toNumber.js
var NAN = NaN, reIsBadHex = /^[-+]0x[0-9a-f]+$/i, reIsBinary = /^0b[01]+$/i, reIsOctal = /^0o[0-7]+$/i, freeParseInt = parseInt;
function toNumber(value) {
if (typeof value == "number")
return value;
if (isSymbol_default(value))
return NAN;
if (isObject_default(value)) {
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
value = isObject_default(other) ? other + "" : other;
}
if (typeof value != "string")
return value === 0 ? value : +value;
value = baseTrim_default(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
var toNumber_default = toNumber;
 
// node_modules/lodash-es/now.js
var now = function() {
return root_default.Date.now();
}, now_default = now;
 
// node_modules/lodash-es/debounce.js
var FUNC_ERROR_TEXT = "Expected a function", nativeMax = Math.max, nativeMin = Math.min;
function debounce(func, wait, options) {
var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = !1, maxing = !1, trailing = !0;
if (typeof func != "function")
throw new TypeError(FUNC_ERROR_TEXT);
wait = toNumber_default(wait) || 0, isObject_default(options) && (leading = !!options.leading, maxing = "maxWait" in options, maxWait = maxing ? nativeMax(toNumber_default(options.maxWait) || 0, wait) : maxWait, trailing = "trailing" in options ? !!options.trailing : trailing);
function invokeFunc(time) {
var args = lastArgs, thisArg = lastThis;
return lastArgs = lastThis = void 0, lastInvokeTime = time, result = func.apply(thisArg, args), result;
}
function leadingEdge(time) {
return lastInvokeTime = time, timerId = setTimeout(timerExpired, wait), leading ? invokeFunc(time) : result;
}
function remainingWait(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
}
function shouldInvoke(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
}
function timerExpired() {
var time = now_default();
if (shouldInvoke(time))
return trailingEdge(time);
timerId = setTimeout(timerExpired, remainingWait(time));
}
function trailingEdge(time) {
return timerId = void 0, trailing && lastArgs ? invokeFunc(time) : (lastArgs = lastThis = void 0, result);
}
function cancel() {
timerId !== void 0 && clearTimeout(timerId), lastInvokeTime = 0, lastArgs = lastCallTime = lastThis = timerId = void 0;
}
function flush() {
return timerId === void 0 ? result : trailingEdge(now_default());
}
function debounced() {
var time = now_default(), isInvoking = shouldInvoke(time);
if (lastArgs = arguments, lastThis = this, lastCallTime = time, isInvoking) {
if (timerId === void 0)
return leadingEdge(lastCallTime);
if (maxing)
return clearTimeout(timerId), timerId = setTimeout(timerExpired, wait), invokeFunc(lastCallTime);
}
return timerId === void 0 && (timerId = setTimeout(timerExpired, wait)), result;
}
return debounced.cancel = cancel, debounced.flush = flush, debounced;
}
var debounce_default = debounce;
 
// src-copilot/frontend-search/components/NoteCard.jsx
var NoteCard = ({ title, noteContentPart, noteUUID, headingAnchor }) => {
let { Card, Flex, Text } = window.RadixUI, { FileTextIcon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(
Card,
{
style: { padding: "12px", marginBottom: "4px", minHeight: "120px", maxHeight: "160px", maxWidth: "100%" },
asChild: !0
},
/* @__PURE__ */ React.createElement("a", { href: "#", onClick: (e) => {
e.preventDefault(), window.appConnector.navigate(\`https://www.amplenote.com/notes/\${noteUUID}\` + (headingAnchor ? \`#\${encodeURIComponent(headingAnchor)}\` : ""));
}, className: "note-card" }, /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "2" }, /* @__PURE__ */ React.createElement(Text, { size: "4", weight: "bold", trim: "both", style: { marginBottom: "4px" }, truncate: !0 }, /* @__PURE__ */ React.createElement(FileTextIcon, { style: { marginRight: "4px" } }), (title == null ? void 0 : title.trim()) || "Untitled Note"), /* @__PURE__ */ React.createElement("p", { style: { margin: 0, color: "#666", fontSize: "14px", whiteSpace: "pre-wrap" } }, noteContentPart)))
);
};
 
// src-copilot/markdown/markdown-parser.js
var remarkGfm, unified, remarkFrontmatter, remarkParse, pipe, pipeWithYaml;
async function parse(markdownText, { yaml = !1 } = {}) {
return (!remarkGfm || !unified || !remarkFrontmatter || !remarkParse) && ([remarkGfm, unified, remarkFrontmatter, remarkParse] = await dynamicImportExternalPluginBundle("remarkBundle.js"), unified = unified.unified, remarkGfm = remarkGfm.default, remarkFrontmatter = remarkFrontmatter.default, remarkParse = remarkParse.default), !pipe && !yaml && (pipe = unified().use(remarkParse).use(remarkGfm)), !pipeWithYaml && yaml && (pipeWithYaml = unified().use(remarkParse).use(remarkGfm).use(remarkFrontmatter, ["yaml"])), await (yaml ? pipeWithYaml : pipe).parse(markdownText);
}
 
// node_modules/unist-util-is/lib/index.js
var convert = (
// Note: overloads in JSDoc can\u2019t yet use different \`@template\`s.
/**
* @type {(
* (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &
* (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &
* (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &
* ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &
* ((test?: Test) => Check)
* )}
*/
/**
* @param {Test} [test]
* @returns {Check}
*/
function(test) {
if (test == null)
return ok;
if (typeof test == "function")
return castFactory(test);
if (typeof test == "object")
return Array.isArray(test) ? anyFactory(test) : propsFactory(test);
if (typeof test == "string")
return typeFactory(test);
throw new Error("Expected function, string, or object as test");
}
);
function anyFactory(tests) {
let checks = [], index = -1;
for (; ++index < tests.length; )
checks[index] = convert(tests[index]);
return castFactory(any);
function any(...parameters) {
let index2 = -1;
for (; ++index2 < checks.length; )
if (checks[index2].apply(this, parameters)) return !0;
return !1;
}
}
function propsFactory(check) {
let checkAsRecord = (
/** @type {Record<string, unknown>} */
check
);
return castFactory(all2);
function all2(node2) {
let nodeAsRecord = (
/** @type {Record<string, unknown>} */
/** @type {unknown} */
node2
), key;
for (key in check)
if (nodeAsRecord[key] !== checkAsRecord[key]) return !1;
return !0;
}
}
function typeFactory(check) {
return castFactory(type);
function type(node2) {
return node2 && node2.type === check;
}
}
function castFactory(testFunction) {
return check;
function check(value, index, parent) {
return !!(looksLikeANode(value) && testFunction.call(
this,
value,
typeof index == "number" ? index : void 0,
parent || void 0
));
}
}
function ok() {
return !0;
}
function looksLikeANode(value) {
return value !== null && typeof value == "object" && "type" in value;
}
 
// node_modules/unist-util-visit-parents/lib/index.js
var empty = [], CONTINUE = !0, EXIT = !1, SKIP = "skip";
function visitParents(tree, test, visitor, reverse) {
let check;
typeof test == "function" && typeof visitor != "function" ? (reverse = visitor, visitor = test) : check = test;
let is2 = convert(check), step = reverse ? -1 : 1;
factory(tree, void 0, [])();
function factory(node2, index, parents) {
let value = (
/** @type {Record<string, unknown>} */
node2 && typeof node2 == "object" ? node2 : {}
);
if (typeof value.type == "string") {
let name = (
// \`hast\`
typeof value.tagName == "string" ? value.tagName : (
// \`xast\`
typeof value.name == "string" ? value.name : void 0
)
);
Object.defineProperty(visit2, "name", {
value: "node (" + (node2.type + (name ? "<" + name + ">" : "")) + ")"
});
}
return visit2;
function visit2() {
let result = empty, subresult, offset, grandparents;
if ((!test || is2(node2, index, parents[parents.length - 1] || void 0)) && (result = toResult(visitor(node2, parents)), result[0] === EXIT))
return result;
if ("children" in node2 && node2.children) {
let nodeAsParent = (
/** @type {UnistParent} */
node2
);
if (nodeAsParent.children && result[0] !== SKIP)
for (offset = (reverse ? nodeAsParent.children.length : -1) + step, grandparents = parents.concat(nodeAsParent); offset > -1 && offset < nodeAsParent.children.length; ) {
let child = nodeAsParent.children[offset];
if (subresult = factory(child, offset, grandparents)(), subresult[0] === EXIT)
return subresult;
offset = typeof subresult[1] == "number" ? subresult[1] : offset + step;
}
}
return result;
}
}
}
function toResult(value) {
return Array.isArray(value) ? value : typeof value == "number" ? [CONTINUE, value] : value == null ? empty : [value];
}
 
// node_modules/unist-util-visit/lib/index.js
function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {
let reverse, test, visitor;
typeof testOrVisitor == "function" && typeof visitorOrReverse != "function" ? (test = void 0, visitor = testOrVisitor, reverse = visitorOrReverse) : (test = testOrVisitor, visitor = visitorOrReverse, reverse = maybeReverse), visitParents(tree, test, overload, reverse);
function overload(node2, parents) {
let parent = parents[parents.length - 1], index = parent ? parent.children.indexOf(node2) : void 0;
return visitor(node2, index, parent);
}
}
 
// node_modules/mdast-util-to-string/lib/index.js
var emptyOptions = {};
function toString(value, options) {
let settings = options || emptyOptions, includeImageAlt = typeof settings.includeImageAlt == "boolean" ? settings.includeImageAlt : !0, includeHtml = typeof settings.includeHtml == "boolean" ? settings.includeHtml : !0;
return one(value, includeImageAlt, includeHtml);
}
function one(value, includeImageAlt, includeHtml) {
if (node(value)) {
if ("value" in value)
return value.type === "html" && !includeHtml ? "" : value.value;
if (includeImageAlt && "alt" in value && value.alt)
return value.alt;
if ("children" in value)
return all(value.children, includeImageAlt, includeHtml);
}
return Array.isArray(value) ? all(value, includeImageAlt, includeHtml) : "";
}
function all(values, includeImageAlt, includeHtml) {
let result = [], index = -1;
for (; ++index < values.length; )
result[index] = one(values[index], includeImageAlt, includeHtml);
return result.join("");
}
function node(value) {
return !!(value && typeof value == "object");
}
 
// src-copilot/markdown/stripYAMLFromMarkdown.js
var stripYAMLFromMarkdown = async (markdownText) => {
let root2 = await parse(markdownText, { yaml: !0 }), textContent = "";
return visit(root2, (node2) => {
if (node2.type === "yaml")
return "skip";
if (node2.type === "root" || node2.type === "paragraph")
return "continue";
if (node2.type === "image")
textContent += \`![](\${node2.url})
\`;
else {
let nodeValue = node2.position ? markdownText.substring(node2.position.start.offset, node2.position.end.offset) : toString(node2);
return textContent += nodeValue + \`
\`, "skip";
}
}), textContent.trim();
};
 
// src-copilot/frontend-search/hooks/processLocalVecDBResults.js
var processLocalVecDBResults = async (results, thresholdScore = 0.15) => {
let filteredResults = results.filter((result) => result.score >= thresholdScore).reduce((acc, result) => {
let uuid = result.metadata.noteUUID;
return (!acc[uuid] || acc[uuid].score < result.score) && (acc[uuid] = result), acc;
}, {}), uniqueResults = Object.values(filteredResults).sort((a, b) => b.score - a.score);
return Promise.all(
uniqueResults.map(async (result) => ({
noteTitle: result.metadata.noteTitle,
noteContentPart: await stripYAMLFromMarkdown(result.metadata.noteContentPart),
noteUUID: result.metadata.noteUUID,
tags: result.metadata.noteTags ? result.metadata.noteTags : [],
headingAnchor: result.metadata.headingAnchor
}))
);
};
 
// src-copilot/frontend-search/hooks/useSearch.jsx
var useSearch = () => {
let [searchText, setSearchText] = React.useState(""), [searchResults, setSearchResults] = React.useState([]), [isLoading, setIsLoading] = React.useState(!1), [error, setError] = React.useState(null), [isSyncing, setIsSyncing] = React.useState(!1), [syncProgressText, setSyncProgressText] = React.useState(""), [syncError, setSyncError] = React.useState(null), [searchOpts, setSearchOpts] = React.useState({
isArchived: null,
isSharedByMe: null,
isSharedWithMe: null,
isTaskListNote: null,
isPublished: null
}), [syncStatus, setSyncStatus] = React.useState(""), updateSyncStatus = async () => {
try {
let status = await window.appConnector.getLocalVecDBSyncState();
setSyncStatus(status);
} catch {
setSyncStatus("Error");
}
};
React.useEffect(() => {
updateSyncStatus();
}, []), React.useEffect(() => {
(async () => {
let searchTextMsg = await window.appConnector.receiveMessageFromPlugin("searchForTextInSearchInterface");
searchTextMsg !== null && setSearchText(searchTextMsg), await window.appConnector.receiveMessageFromPlugin("startSyncToLocalVecDBInSearchInterface") === !0 && handleSync();
})();
}, []);
let performSearch = async (query, searchOpts2 = {}) => {
let results = await window.appConnector.searchNotesInLocalVecDB(query, searchOpts2);
return await processLocalVecDBResults(results);
}, debouncedSearch = React.useMemo(
() => debounce_default(async () => {
setIsLoading(!0), setError(null);
try {
let results, isSpecialSearchText = searchText.match(/^<<Related:\\s*([a-zA-Z0-9-]+)>>$/);
if (isSpecialSearchText) {
let noteUUID = isSpecialSearchText[1], noteTitle = await window.appConnector.getNoteTitleByUUID(noteUUID), noteContent = await window.appConnector.getNoteContentByUUID(noteUUID), noteTags = await window.appConnector.getNoteTagsByUUID({ uuid: noteUUID });
if (!noteContent && !noteTitle && !noteTags)
throw new Error("Could not find note with UUID: " + noteUUID);
results = await performSearch(\`---
title: \${noteTitle || "Untitled Note"}
tags: \${noteTags.join(", ")}
---
\` + noteContent, searchOpts), results = results.filter((result) => result.noteUUID !== noteUUID);
} else
results = await performSearch(searchText, searchOpts);
setSearchResults(results);
} catch (error2) {
console.error(error2), setError((typeof error2 == "string" ? error2 : error2.message) || "An error occurred while searching");
} finally {
setIsLoading(!1);
}
}, 800),
[searchText, searchOpts]
), handleSearch = React.useCallback(() => {
searchText.trim() === "" ? (setSearchResults([]), setError(null)) : (setIsLoading(!0), debouncedSearch());
}, [debouncedSearch, searchText, searchOpts]), handleSync = async () => {
for (setIsSyncing(!0), setSyncError(null), setSyncProgressText(null); await window.appConnector.receiveMessageFromPlugin("syncNotesProgress") != null; )
;
let syncProgressListenerIntervalId = setInterval(async () => {
let lastSyncProgressText = null;
for (; ; ) {
let syncProgressText2 = await window.appConnector.receiveMessageFromPlugin("syncNotesProgress");
if (syncProgressText2 === null) break;
lastSyncProgressText = syncProgressText2;
}
lastSyncProgressText && setSyncProgressText(lastSyncProgressText);
}, 1e3);
try {
await window.appConnector.syncNotesWithLocalVecDB(), searchText.trim() && await handleSearch();
} catch (error2) {
console.error("Sync error:", error2), setSyncError("Failed to sync notes: " + (error2.message || error2));
} finally {
setIsSyncing(!1), updateSyncStatus(), clearInterval(syncProgressListenerIntervalId);
}
};
return React.useEffect(() => (handleSearch(), () => debouncedSearch.cancel()), [searchText, handleSearch, searchOpts]), {
searchText,
setSearchText,
searchResults,
isLoading,
error,
isSyncing,
syncError,
syncProgressText,
handleSync,
searchOpts,
setSearchOpts,
syncStatus
};
};
 
// src-copilot/frontend-search/SearchApp.jsx
var SearchStatus = ({ isLoading, error, isSyncing, syncError, syncProgressText, searchText, searchResults }) => {
let { Flex, Box, Spinner, Text } = window.RadixUI;
return isSyncing ? /* @__PURE__ */ React.createElement(Box, { style: { padding: "20px", textAlign: "center", backgroundColor: "#0ea5e9", color: "white", borderRadius: "6px" } }, "Syncing notes with LocalVecDB...", syncProgressText && /* @__PURE__ */ React.createElement(Box, { style: { marginTop: "4px", backgroundColor: "#0369a1", color: "white", borderRadius: "4px", padding: "10px" } }, /* @__PURE__ */ React.createElement(Text, { size: "1", dangerouslySetInnerHTML: { __html: syncProgressText } }))) : syncError ? /* @__PURE__ */ React.createElement(Box, { style: { padding: "20px", textAlign: "center", color: "#e11d48", backgroundColor: "#ffe4e6", borderRadius: "6px" } }, syncError) : isLoading ? /* @__PURE__ */ React.createElement(Box, { style: { padding: "20px", textAlign: "center" } }, /* @__PURE__ */ React.createElement(Flex, { direction: "column", align: "center", justify: "center" }, /* @__PURE__ */ React.createElement(Spinner, { size: "3" }), /* @__PURE__ */ React.createElement(Text, { color: "gray", size: "2" }, "Searching"))) : error ? /* @__PURE__ */ React.createElement(Box, { style: { padding: "20px", textAlign: "center", color: "#e11d48", backgroundColor: "#ffe4e6", borderRadius: "6px" } }, error) : searchResults.length === 0 ? /* @__PURE__ */ React.createElement(Box, { style: { padding: "20px", textAlign: "center", color: "#666" } }, searchText.trim() ? "No results found" : "Start typing to search your notes") : null;
}, FilterRow = ({ label, isEnabled, value, onChange }) => {
let { Tooltip, Switch, IconButton, Flex } = window.RadixUI, { EyeOpenIcon, EyeClosedIcon } = window.RadixIcons, handleSwitchChange = (checked) => {
onChange(checked ? !0 : null);
}, handleIconClick = () => {
isEnabled && onChange(value !== !0);
};
return /* @__PURE__ */ React.createElement(Flex, { align: "center", justify: "between", style: { width: "100%", padding: "12px", fontSize: "14px", paddingTop: "4px", paddingBottom: "4px" } }, label, /* @__PURE__ */ React.createElement(Flex, { align: "center", gap: "2" }, /* @__PURE__ */ React.createElement(
Switch,
{
size: "1",
checked: isEnabled,
onCheckedChange: handleSwitchChange
}
), value === null ? /* @__PURE__ */ React.createElement(
IconButton,
{
variant: "soft",
size: "1",
disabled: !0,
onClick: handleIconClick
},
/* @__PURE__ */ React.createElement(EyeOpenIcon, null)
) : /* @__PURE__ */ React.createElement(Tooltip, { content: value === !0 ? "Included" : "Excluded" }, /* @__PURE__ */ React.createElement(
IconButton,
{
variant: "soft",
size: "1",
onClick: handleIconClick
},
/* @__PURE__ */ React.createElement(value === !0 ? EyeOpenIcon : EyeClosedIcon, null)
))));
}, SearchMenu = ({ onSync, isSyncing, searchOpts, setSearchOpts, syncStatus }) => {
let { Text, IconButton, DropdownMenu } = window.RadixUI, { DotsHorizontalIcon } = window.RadixIcons, getSyncStatusColor = (status) => {
switch (status) {
case "Fully Synced":
return "green";
case "Partially synced":
return "yellow";
default:
return "red";
}
}, handleFilterChange = (key, value) => {
setSearchOpts((prev) => ({ ...prev, [key]: value }));
};
return /* @__PURE__ */ React.createElement(DropdownMenu.Root, null, /* @__PURE__ */ React.createElement(DropdownMenu.Trigger, { asChild: !0 }, /* @__PURE__ */ React.createElement(IconButton, { variant: "ghost", style: { padding: "8px" }, className: "search-menu-button" }, /* @__PURE__ */ React.createElement(DotsHorizontalIcon, null))), /* @__PURE__ */ React.createElement(DropdownMenu.Content, { className: "search-menu-content" }, /* @__PURE__ */ React.createElement(Text, { style: { fontSize: "14px", padding: "4px" }, color: "gray" }, "DB Status: ", /* @__PURE__ */ React.createElement(Text, { color: getSyncStatusColor(syncStatus) }, syncStatus)), /* @__PURE__ */ React.createElement(
DropdownMenu.Item,
{
onSelect: onSync,
disabled: isSyncing
},
isSyncing ? "Syncing..." : "Sync notes with LocalVecDB"
), /* @__PURE__ */ React.createElement(DropdownMenu.Separator, null), /* @__PURE__ */ React.createElement(Text, { color: "gray", style: { fontSize: "14px", padding: "4px" } }, "Search Options"), /* @__PURE__ */ React.createElement(
FilterRow,
{
label: "Archived",
isEnabled: searchOpts.isArchived !== null,
value: searchOpts.isArchived,
onChange: (value) => handleFilterChange("isArchived", value)
}
), /* @__PURE__ */ React.createElement(
FilterRow,
{
label: "Task List",
isEnabled: searchOpts.isTaskListNote !== null,
value: searchOpts.isTaskListNote,
onChange: (value) => handleFilterChange("isTaskListNote", value)
}
), /* @__PURE__ */ React.createElement(
FilterRow,
{
label: "Published",
isEnabled: searchOpts.isPublished !== null,
value: searchOpts.isPublished,
onChange: (value) => handleFilterChange("isPublished", value)
}
), /* @__PURE__ */ React.createElement(
FilterRow,
{
label: "Shared by Me",
isEnabled: searchOpts.isSharedByMe !== null,
value: searchOpts.isSharedByMe,
onChange: (value) => handleFilterChange("isSharedByMe", value)
}
), /* @__PURE__ */ React.createElement(
FilterRow,
{
label: "Shared with Me",
isEnabled: searchOpts.isSharedWithMe !== null,
value: searchOpts.isSharedWithMe,
onChange: (value) => handleFilterChange("isSharedWithMe", value)
}
)));
}, SearchApp = () => {
let {
searchText,
setSearchText,
searchResults,
isLoading,
error,
isSyncing,
syncError,
syncProgressText,
handleSync,
searchOpts,
setSearchOpts,
syncStatus
} = useSearch(), { Theme, Flex, TextField } = window.RadixUI, { MagnifyingGlassIcon, Cross2Icon } = window.RadixIcons;
return /* @__PURE__ */ React.createElement(Theme, { appearance: "dark", accentColor: "blue" }, /* @__PURE__ */ React.createElement(Flex, { direction: "column", gap: "3", style: { height: "100vh", padding: "16px" } }, /* @__PURE__ */ React.createElement(Flex, { align: "center", gap: "2" }, /* @__PURE__ */ React.createElement(
TextField.Root,
{
placeholder: "Search notes...",
variant: "soft",
value: searchText,
onChange: (e) => setSearchText(e.target.value),
style: {
width: "100%",
padding: "8px 12px",
fontSize: "16px",
flex: 1
},
className: "search-input",
autoFocus: !0
},
/* @__PURE__ */ React.createElement(TextField.Slot, { style: { paddingLeft: "2px" } }, /* @__PURE__ */ React.createElement(MagnifyingGlassIcon, { height: "16", width: "16" })),
searchText && /* @__PURE__ */ React.createElement(TextField.Slot, { style: { paddingRight: "0px" } }, /* @__PURE__ */ React.createElement(
Cross2Icon,
{
height: "16",
width: "16",
style: {
cursor: "pointer",
opacity: 0.7
},
onClick: () => setSearchText("")
}
))
), /* @__PURE__ */ React.createElement(
SearchMenu,
{
onSync: handleSync,
isSyncing,
searchOpts,
setSearchOpts,
syncStatus
}
)), /* @__PURE__ */ React.createElement(
SearchStatus,
{
isLoading,
error,
isSyncing,
syncProgressText,
syncError,
searchText,
searchResults
}
), !isLoading && !isSyncing && !error && !syncError && searchResults && searchResults.length > 0 && /* @__PURE__ */ React.createElement(
EndlessScroll,
{
iterationCnt: 6,
itemContent: (index) => /* @__PURE__ */ React.createElement(
NoteCard,
{
title: searchResults[index].noteTitle,
noteContentPart: searchResults[index].noteContentPart,
noteUUID: searchResults[index].noteUUID,
headingAnchor: searchResults[index].headingAnchor
}
),
data: searchResults
}
)));
};
 
// src-copilot/embed/search.jsx
window.INJECTED_EMBED_COMMANDS_MOCK && (window.callAmplenotePlugin = createCallAmplenotePluginMock(deserializeWithFunctions(window.INJECTED_EMBED_COMMANDS_MOCK)));
window.appConnector = new Proxy({}, {
get: function(target, prop, receiver) {
return prop in target ? target[prop] : async function(...args) {
return window.dispatchEvent(new CustomEvent("callAmplenotePlugin", [prop, ...args])), await window.callAmplenotePlugin(prop, ...args);
};
}
});
window.appSettings = window.appSettings || {};
var body = document.body, html = document.documentElement;
window.addEventListener("resize", function() {
let iframeHeight = Math.min(html.clientHeight, html.scrollHeight);
Object.assign(body.style, {
margin: "0"
});
let appInnerContainer = document.querySelector(".app-container > div > div");
appInnerContainer && Object.assign(appInnerContainer.style, {
height: \`\${iframeHeight - 24}px\`,
overflow: "hidden"
});
});
setInterval(() => window.dispatchEvent(new Event("resize")), 100);
(async () => {
try {
showEmbedLoader(), overwriteWithAmplenoteStyle();
let cssLoaded = dynamicImportCSS("@radix-ui/themes/styles.css"), [React2, ReactDOM, RadixUI, RadixIcons, ReactVirtuoso] = await dynamicImportExternalPluginBundle("searchUIBundle.js");
if (window.React = React2, window.ReactDOM = ReactDOM, window.RadixUI = RadixUI, window.RadixIcons = RadixIcons, window.ReactVirtuoso = ReactVirtuoso, window.appSettings = await appConnector.getSettings(), parse(""), hideEmbedLoader(), !React2 || !window.ReactDOM)
throw new Error("Failed to load React or ReactDOM");
document.querySelector(".app-container") && window.ReactDOM.createRoot(document.querySelector(".app-container")).render(/* @__PURE__ */ React2.createElement(SearchApp, null));
} catch (e) {
window.document.body.innerHTML = '<div style="color: red; font-size: 20px; padding: 20px;">Error during init: ' + e.message + "</div>", console.error(e);
} finally {
await new Promise((resolve) => setTimeout(resolve, 1600)), window.dispatchEvent(new CustomEvent("appLoaded"));
}
})();
return plugin;
})()
<\/script>
</body>
</html>`;
 
// common-utils/embed-comunication.js
init_process();
var COMMON_EMBED_COMMANDS = {
navigate: async (app, url) => {
if (await app.navigate(url)) return !0;
try {
return window.open(url, "_blank") != null;
} catch {
return !1;
}
},
prompt: async (app, ...args) => await app.prompt(...args),
alert: async (app, ...args) => await app.alert(...args),
getSettings: async (app) => app.settings,
setSetting: async (app, key, value) => app.setSetting(key, value),
getNoteTitleByUUID: async (app, noteUUID) => {
var _a;
return (_a = await app.notes.find(noteUUID)) == null ? void 0 : _a.name;
},
getNoteContentByUUID: async (app, noteUUID) => await app.notes.find(noteUUID) ? await app.getNoteContent({ uuid: noteUUID }) : null,
getNoteBacklinksByUUID: async (app, noteUUID) => {
var _a;
return await ((_a = await app.notes.find(noteUUID)) == null ? void 0 : _a.backlinks());
},
getNoteTagsByUUID: async (app, noteUUID) => {
var _a;
return (_a = await app.notes.find(noteUUID)) == null ? void 0 : _a.tags;
},
getNoteSections: async (app, ...args) => await app.getNoteSections(...args),
insertTask: async (app, ...args) => await app.insertTask(...args),
updateTask: async (app, ...args) => await app.updateTask(...args),
createNote: async (app, ...args) => await app.createNote(...args),
deleteNote: async (app, ...args) => await app.deleteNote(...args),
replaceNoteContent: async (app, ...args) => await app.replaceNoteContent(...args),
setNoteName: async (app, ...args) => await app.setNoteName(...args),
addNoteTag: async (app, ...args) => await app.addNoteTag(...args),
removeNoteTag: async (app, ...args) => await app.removeNoteTag(...args),
insertNoteContent: async (app, ...args) => await app.insertNoteContent(...args),
getTaskDomains: async (app) => await app.getTaskDomains(),
getTaskDomainTasks: async (app, ...args) => await app.getTaskDomainTasks(...args),
getTask: async (app, ...args) => await app.getTask(...args),
findNote: async (app, ...args) => await app.findNote(...args),
filterNotes: async (app, ...args) => await app.filterNotes(...args),
saveFile: async (app, ...args) => {
try {
let { name, data } = args[0];
return data.startsWith("data:") && (data = await (await fetch(data)).blob()), await app.saveFile(data, name);
} catch (e) {
throw e.message;
}
}
};
function createOnEmbedCallHandler(embedCommands = {}, logBlacklistedCommands = []) {
return async function(app, commandName, ...args) {
try {
if (commandName in embedCommands) {
let result = await embedCommands[commandName](app, ...args);
return logBlacklistedCommands.includes(commandName) || console.log("onEmbedCall:", commandName, args, result), result;
}
} catch (e) {
throw app.alert("Error:", e.message || e), console.error("onEmbedCall:", commandName, args, e), e;
}
throw new Error(`Unknown command: ${commandName}`);
};
}
 
// src-copilot/backend/generateText.js
init_process();
 
// common-utils/dynamic-import-esm.js
init_process();
 
// package.json
var package_default = {
name: "amplenote-plugin-dev-env",
author: "debajandhar12",
version: "1.0.0",
type: "module",
repository: "https://github.com/debanjandhar12/my-amplenote-plugins-v2",
dependencies: {
"@debanjandhar12/markmap-lib": "0.17.0-mod.3",
"@debanjandhar12/markmap-toolbar": "0.17.0-mod.3",
"@debanjandhar12/markmap-view": "0.17.0-mod.3",
"date-fns": "^3.6.0",
"lodash-es": "^4.17.21",
luxon: "^3.4.4",
"@yiuayiu/telegram-markdown-escape": "^0.0.2-1",
"@omnivore-app/api": "^1.0.4",
"markdown-it": "^14.1.0",
"remark-gfm": "4.0.0",
"remark-parse": "11.0.0",
"remark-frontmatter": "5.0.0",
unified: "11.0.0",
"unist-util-visit": "5.0.0",
"unist-util-visit-parents": "6.0.1",
"mdast-util-to-string": "4.0.0",
"d3-svg-to-png": "^0.3.1",
"chart.js": "^4.4.3",
fparser: "^3.1.0",
nanoid: "^5.0.7",
zod: "3.23.8",
react: "18.2.0",
"react-dom": "18.2.0",
"react-window": "1.8.11",
"@assistant-ui/react-markdown": "0.7.16",
"emoji-mart": "^5.6.0",
"@emoji-mart/data": "^1.2.1",
"@emoji-mart/react": "^1.1.1",
"@pinecone-database/pinecone": "4.1.0",
"react-string-diff": "0.2.0",
"@radix-ui/themes": "3.2.0",
"@assistant-ui/react": "0.7.65",
"@radix-ui/react-icons": "1.3.2",
tributejs: "5.1.3",
ai: "4.2.8",
"@ai-sdk/groq": "1.2.1",
"@ai-sdk/anthropic": "1.2.2",
"@ai-sdk/openai": "1.3.4",
"@ai-sdk/google": "1.2.3",
"@ai-sdk/fireworks": "0.2.2",
"ollama-ai-provider": "1.2.0",
"easy-web-worker": "7.0.2",
"fuse.js": "7.0.0",
"react-virtuoso": "4.12.5",
"async-mutex": "0.5.0",
"@huggingface/transformers": "3.2.4",
fflate: "0.8.2",
dayjs: "1.11.13",
"react-error-boundary": "5.0.0",
"scheduler-polyfill": "^1.3.0",
"my-ample-plugin-external": "1.0.21"
},
devDependencies: {
"@types/jest": "^29.5.0",
cors: "^2.8.5",
"cross-fetch": "^4.0.0",
dotenv: "^16.0.3",
esbuild: "0.25.0",
"esbuild-jest2": "0.6.7",
"esbuild-plugins-node-modules-polyfill": "1.7.0",
express: "^5.0.1",
"isomorphic-fetch": "^3.0.0",
jest: "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
jsdom: "^24.1.0",
"make-synchronous": "^1.0.0",
playwright: "^1.49.1",
"@playwright/test": "^1.49.1",
"core-js": "^3.38.1",
"@testing-library/react": "^16.0.1",
"@testing-library/jest-dom": "^6.5.0",
"esbuild-plugin-external-global": "^1.0.1",
"@huggingface/transformers": "3.2.4",
"node-fetch": "^3.3.2",
idb: "^8.0.1",
"p-retry": "^6.2.1"
},
scripts: {
test: "jest --testPathPattern=src-copilot",
"test:watch": "jest --testPathPattern=src-copilot --watch",
"build:prod": "NODE_ENV=production node esbuild.js $(pwd)/src-copilot",
"build:dev": "node esbuild.js $(pwd)/src-copilot --watch --server"
}
};
 
// common-utils/dynamic-import-esm.js
var dynamicImportExternalPluginBundle = async (fileName, { isESM = !0 } = {}) => {
let url = new URL(`https://esm.sh/my-ample-plugin-external@${package_default.dependencies["my-ample-plugin-external"]}/bundles/${fileName}`);
if (!isESM)
return fetch(url.toString()).then((res) => res.arrayBuffer()).then((buffer) => new Uint8Array(buffer));
url.searchParams.set("bundle", !0);
let module2 = await import(url.toString());
if (Object.keys(module2.versions).length !== module2.default.length)
throw new Error(`Failed to import module: ${fileName}. Expected module count mismatch (expected: ${module2.default.length}, actual: ${Object.keys(module2.versions).length}). Possibly due to my-ample-plugin-external version mismatch.`);
for (let [key, value] of Object.entries(module2.versions))
if (value !== package_default.dependencies[key])
throw new Error(`Failed to import module: ${fileName}. Version mismatch for ${key} (expected: ${package_default.dependencies[key]}, actual: ${value})`);
if (module2.default)
return console.log(`Imported module: ${fileName} from ${url.toString()}`, module2.versions), module2.default;
throw new Error(`Failed to import module: ${fileName}`);
};
var dynamicImportESM = async (pkg, pkgVersion = null) => {
let cdnList = ["https://esm.sh/", "https://legacy.esm.sh/", "https://esm.run/"], resolvedVersion = resolvePackageVersion(pkg, pkgVersion), importCompleted = !1, importPromises = cdnList.map(async (cdn) => {
let url = buildCDNUrl(cdn, pkg, resolvedVersion);
if (cdn !== "https://esm.sh/" && await new Promise((resolve) => setTimeout(resolve, 600)), importCompleted)
throw new Error(`Terminating as ${pkg} has already been imported`);
return import(url).then((module2) => ({ module: module2, url })).catch((e) => {
throw console.warn(`Failed to import ${pkg} from ${cdn}: ${e.message}`), e;
});
});
try {
let result = await Promise.any(importPromises);
return importCompleted = !0, console.log(`Imported ${pkg}@${resolvedVersion} from ${result.url}`), result.module;
} catch {
throw new Error(`Failed to import ${pkg} from all available CDNs`);
}
throw new Error(`Failed to import ${pkg} from all available CDNs`);
};
function getBasePackage(pkg) {
if (pkg.startsWith("@")) {
let [scope, name] = pkg.split("/");
return `${scope}/${name}`;
}
return pkg.split("/")[0];
}
function resolvePackageVersion(pkg, pkgVersion) {
let basePkg = getBasePackage(pkg), version = pkgVersion || package_default.dependencies[basePkg] || package_default.devDependencies[basePkg] || "latest";
return version.startsWith("^") || version.startsWith("~") ? version.substring(1) : version;
}
function getPackageFolderString(pkg) {
let folders = [];
return pkg.startsWith("@") ? [, , ...folders] = pkg.split("/") : [, ...folders] = pkg.split("/"), folders && folders.length > 0 ? `/${folders.join("/")}` : "";
}
function buildCDNUrl(cdn, pkg, version) {
let basePkg = getBasePackage(pkg), versionString = version !== "latest" ? `@${version}` : "", folderString = getPackageFolderString(pkg), url = new URL(`${cdn}${basePkg}${versionString}${folderString}`);
if (cdn !== "https://esm.sh/" && (basePkg.includes("react") || basePkg.includes("radix")))
throw new Error(`React based packages is not supported in ${cdn}`);
if (cdn !== "https://legacy.esm.sh/" && basePkg.includes("build"))
throw new Error(`Build API package is not supported in ${cdn}`);
return cdn === "https://esm.sh/" && (basePkg !== "react-dom" && basePkg !== "react" && url.searchParams.set("bundle-deps", !1), !pkg.endsWith(".css") && pkg !== "build" && url.searchParams.set("deps", `react@${package_default.dependencies.react},react-dom@${package_default.dependencies["react-dom"]}`)), url.toString();
}
var dynamic_import_esm_default = dynamicImportESM;
 
// src-copilot/backend/generateText.js
async function generateText(model, prompt) {
let { generateText: generateText2 } = await dynamic_import_esm_default("ai");
return await generateText2({
model,
prompt
});
}
 
// src-copilot/backend/getLLMModel.js
init_process();
 
// src-copilot/constants.js
init_process();
var LLM_API_URL_SETTING = "LLM API URL", LLM_API_KEY_SETTING = "LLM API Key", LLM_MODEL_SETTING = "LLM Model";
var EMBEDDING_API_URL_SETTING = "Embedding API URL (Optional)", EMBEDDING_API_KEY_SETTING = "Embedding API Key (Optional)", PINECONE_API_KEY_SETTING = "Pinecone API Key (Optional)";
 
// src-copilot/backend/getLLMModel.js
async function getLLMModel(appSettings) {
let apiUrl = appSettings[LLM_API_URL_SETTING], model = appSettings[LLM_MODEL_SETTING], apiKey = appSettings[LLM_API_KEY_SETTING];
if (!apiUrl || !apiUrl.trim()) throw new Error("API URL is not provided. Please check plugin settings.");
if (!model || !model.trim()) throw new Error("Model is not provided. Please check plugin settings.");
if (apiUrl = apiUrl.toLowerCase(), model = model.toLowerCase(), apiUrl.includes("groq")) {
let { createGroq } = await dynamic_import_esm_default("@ai-sdk/groq");
return createGroq({
apiKey,
baseURL: apiUrl
// Default: https://api.groq.com/openai/v1
}).languageModel(model);
} else if (apiUrl.includes("localhost")) {
let { createOllama } = await dynamic_import_esm_default("ollama-ai-provider");
return createOllama({
apiKey,
baseURL: apiUrl
// Default: http://localhost:11434/api
}).languageModel(model);
} else if (apiUrl.includes("googleapis")) {
let { createGoogleGenerativeAI: createGoogleGenerativeAI2 } = await dynamic_import_esm_default("@ai-sdk/google");
return createGoogleGenerativeAI2({
apiKey,
baseURL: apiUrl
// Default: https://generativelanguage.googleapis.com/v1beta
}).languageModel(model);
} else if (apiUrl.includes("anthropic")) {
let { createAnthropic } = await dynamic_import_esm_default("@ai-sdk/anthropic");
return createAnthropic({
apiKey,
baseURL: apiUrl,
headers: { "anthropic-dangerous-direct-browser-access": "true" }
}).languageModel(model);
} else if (apiUrl.includes("openai") || apiUrl.includes("openrouter")) {
let { createOpenAI: createOpenAI2 } = await dynamic_import_esm_default("@ai-sdk/openai");
return createOpenAI2({
apiKey,
baseURL: apiUrl
// Default: https://api.openai.com/v1
}).languageModel(model);
} else if (apiUrl.includes("fireworks")) {
let { createFireworks: createFireworks2 } = await dynamic_import_esm_default("@ai-sdk/fireworks");
return createFireworks2({
apiKey,
baseURL: apiUrl
}).languageModel(model.startsWith("accounts/fireworks/models/") ? model : `accounts/fireworks/models/${model}`);
} else throw new Error("It is likely that incorrect LLM API URL is provided. Please check plugin settings.");
}
 
// src-copilot/backend/getImageModel.js
init_process();
 
// src-copilot/backend/utils/GoogleImageModel.js
init_process();
function createGoogleImageModel(apiKey, modelId = "imagen-3.0-generate-002", maxImagesPerCall = 4) {
return {
specificationVersion: "v1",
provider: "google",
modelId,
maxImagesPerCall,
async doGenerate(options) {
var _a, _b, _c, _d;
let { prompt, size } = options, parameters = {
sampleCount: this.maxImagesPerCall
};
if (size) {
let [width, height] = size.split("x").map(Number);
if (width && height)
if (width === height)
parameters.aspectRatio = "1:1";
else if (width > height) {
let ratio = width / height;
ratio >= 1.7 && ratio <= 1.8 ? parameters.aspectRatio = "16:9" : ratio >= 1.3 && ratio <= 1.4 && (parameters.aspectRatio = "4:3");
} else {
let ratio = height / width;
ratio >= 1.7 && ratio <= 1.8 ? parameters.aspectRatio = "9:16" : ratio >= 1.3 && ratio <= 1.4 && (parameters.aspectRatio = "3:4");
}
}
let response = await fetch(
`https://generativelanguage.googleapis.com/v1beta/models/${this.modelId}:predict?key=${apiKey}`,
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
instances: [
{
prompt
}
],
parameters
})
}
);
if (!response.ok) {
let errorData = await response.json();
throw new Error(`Google API error: ${((_a = errorData.error) == null ? void 0 : _a.message) || response.statusText}`);
}
return {
images: ((_d = (_c = (_b = (await response.json()).predictions) == null ? void 0 : _b[0]) == null ? void 0 : _c.candidates) == null ? void 0 : _d.map(
(candidate) => candidate.output
)) || [],
warnings: [],
response: {
timestamp: /* @__PURE__ */ new Date(),
modelId: this.modelId,
headers: Object.fromEntries(response.headers)
}
};
}
};
}
 
// src-copilot/backend/getImageModel.js
async function getImageModel(appSettings) {
let apiUrl = appSettings[LLM_API_URL_SETTING];
if (!apiUrl) throw new Error("LLM API URL is not provided. Please check and configure plugin settings.");
if (apiUrl.includes("api.openai.com")) {
let { createOpenAI: createOpenAI2 } = await dynamic_import_esm_default("@ai-sdk/openai");
return createOpenAI2({
apiKey: appSettings[LLM_API_KEY_SETTING]
}).image("dall-e-2", { maxImagesPerCall: 1 });
} else {
if (apiUrl.includes("googleapis"))
return createGoogleImageModel(
appSettings[LLM_API_KEY_SETTING],
"imagen-3.0-generate-002",
1
);
if (apiUrl.includes("fireworks")) {
let { createFireworks: createFireworks2 } = await dynamic_import_esm_default("@ai-sdk/fireworks");
return createFireworks2({
apiKey: appSettings[LLM_API_KEY_SETTING]
}).image("accounts/fireworks/models/flux-1-schnell-fp8");
}
}
return !1;
}
 
// src-copilot/backend/generateImage.js
init_process();
async function generateImage(model, prompt, size = 512) {
let { experimental_generateImage } = await dynamic_import_esm_default("ai");
return await experimental_generateImage({
model,
prompt,
n: 1,
size: `${size}x${size}`
});
}
 
// src-copilot/LocalVecDB/LocalVecDB.js
init_process();
 
// src-copilot/LocalVecDB/syncNotes.js
init_process();
 
// src-copilot/LocalVecDB/IndexedDBManager.js
init_process();
 
// node_modules/idb/build/index.js
init_process();
var instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c), idbProxyableTypes, cursorAdvanceMethods;
function getIdbProxyableTypes() {
return idbProxyableTypes || (idbProxyableTypes = [
IDBDatabase,
IDBObjectStore,
IDBIndex,
IDBCursor,
IDBTransaction
]);
}
function getCursorAdvanceMethods() {
return cursorAdvanceMethods || (cursorAdvanceMethods = [
IDBCursor.prototype.advance,
IDBCursor.prototype.continue,
IDBCursor.prototype.continuePrimaryKey
]);
}
var transactionDoneMap = /* @__PURE__ */ new WeakMap(), transformCache = /* @__PURE__ */ new WeakMap(), reverseTransformCache = /* @__PURE__ */ new WeakMap();
function promisifyRequest(request) {
let promise = new Promise((resolve, reject) => {
let unlisten = () => {
request.removeEventListener("success", success), request.removeEventListener("error", error);
}, success = () => {
resolve(wrap(request.result)), unlisten();
}, error = () => {
reject(request.error), unlisten();
};
request.addEventListener("success", success), request.addEventListener("error", error);
});
return reverseTransformCache.set(promise, request), promise;
}
function cacheDonePromiseForTransaction(tx) {
if (transactionDoneMap.has(tx))
return;
let done = new Promise((resolve, reject) => {
let unlisten = () => {
tx.removeEventListener("complete", complete), tx.removeEventListener("error", error), tx.removeEventListener("abort", error);
}, complete = () => {
resolve(), unlisten();
}, error = () => {
reject(tx.error || new DOMException("AbortError", "AbortError")), unlisten();
};
tx.addEventListener("complete", complete), tx.addEventListener("error", error), tx.addEventListener("abort", error);
});
transactionDoneMap.set(tx, done);
}
var idbProxyTraps = {
get(target, prop, receiver) {
if (target instanceof IDBTransaction) {
if (prop === "done")
return transactionDoneMap.get(target);
if (prop === "store")
return receiver.objectStoreNames[1] ? void 0 : receiver.objectStore(receiver.objectStoreNames[0]);
}
return wrap(target[prop]);
},
set(target, prop, value) {
return target[prop] = value, !0;
},
has(target, prop) {
return target instanceof IDBTransaction && (prop === "done" || prop === "store") ? !0 : prop in target;
}
};
function replaceTraps(callback) {
idbProxyTraps = callback(idbProxyTraps);
}
function wrapFunction(func) {
return getCursorAdvanceMethods().includes(func) ? function(...args) {
return func.apply(unwrap(this), args), wrap(this.request);
} : function(...args) {
return wrap(func.apply(unwrap(this), args));
};
}
function transformCachableValue(value) {
return typeof value == "function" ? wrapFunction(value) : (value instanceof IDBTransaction && cacheDonePromiseForTransaction(value), instanceOfAny(value, getIdbProxyableTypes()) ? new Proxy(value, idbProxyTraps) : value);
}
function wrap(value) {
if (value instanceof IDBRequest)
return promisifyRequest(value);
if (transformCache.has(value))
return transformCache.get(value);
let newValue = transformCachableValue(value);
return newValue !== value && (transformCache.set(value, newValue), reverseTransformCache.set(newValue, value)), newValue;
}
var unwrap = (value) => reverseTransformCache.get(value);
function openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {
let request = indexedDB.open(name, version), openPromise = wrap(request);
return upgrade && request.addEventListener("upgradeneeded", (event) => {
upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);
}), blocked && request.addEventListener("blocked", (event) => blocked(
// Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405
event.oldVersion,
event.newVersion,
event
)), openPromise.then((db) => {
terminated && db.addEventListener("close", () => terminated()), blocking && db.addEventListener("versionchange", (event) => blocking(event.oldVersion, event.newVersion, event));
}).catch(() => {
}), openPromise;
}
var readMethods = ["get", "getKey", "getAll", "getAllKeys", "count"], writeMethods = ["put", "add", "delete", "clear"], cachedMethods = /* @__PURE__ */ new Map();
function getMethod(target, prop) {
if (!(target instanceof IDBDatabase && !(prop in target) && typeof prop == "string"))
return;
if (cachedMethods.get(prop))
return cachedMethods.get(prop);
let targetFuncName = prop.replace(/FromIndex$/, ""), useIndex = prop !== targetFuncName, isWrite = writeMethods.includes(targetFuncName);
if (
// Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.
!(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) || !(isWrite || readMethods.includes(targetFuncName))
)
return;
let method = async function(storeName, ...args) {
let tx = this.transaction(storeName, isWrite ? "readwrite" : "readonly"), target2 = tx.store;
return useIndex && (target2 = target2.index(args.shift())), (await Promise.all([
target2[targetFuncName](...args),
isWrite && tx.done
]))[0];
};
return cachedMethods.set(prop, method), method;
}
replaceTraps((oldTraps) => ({
...oldTraps,
get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),
has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop)
}));
var advanceMethodProps = ["continue", "continuePrimaryKey", "advance"], methodMap = {}, advanceResults = /* @__PURE__ */ new WeakMap(), ittrProxiedCursorToOriginalProxy = /* @__PURE__ */ new WeakMap(), cursorIteratorTraps = {
get(target, prop) {
if (!advanceMethodProps.includes(prop))
return target[prop];
let cachedFunc = methodMap[prop];
return cachedFunc || (cachedFunc = methodMap[prop] = function(...args) {
advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args));
}), cachedFunc;
}
};
async function* iterate(...args) {
let cursor = this;
if (cursor instanceof IDBCursor || (cursor = await cursor.openCursor(...args)), !cursor)
return;
cursor = cursor;
let proxiedCursor = new Proxy(cursor, cursorIteratorTraps);
for (ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor), reverseTransformCache.set(proxiedCursor, unwrap(cursor)); cursor; )
yield proxiedCursor, cursor = await (advanceResults.get(proxiedCursor) || cursor.continue()), advanceResults.delete(proxiedCursor);
}
function isIteratorProp(target, prop) {
return prop === Symbol.asyncIterator && instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor]) || prop === "iterate" && instanceOfAny(target, [IDBIndex, IDBObjectStore]);
}
replaceTraps((oldTraps) => ({
...oldTraps,
get(target, prop, receiver) {
return isIteratorProp(target, prop) ? iterate : oldTraps.get(target, prop, receiver);
},
has(target, prop) {
return isIteratorProp(target, prop) || oldTraps.has(target, prop);
}
}));
 
// src-copilot/LocalVecDB/IndexedDBManager.js
var IndexedDBManager = class _IndexedDBManager {
async init() {
if (!this.db)
try {
this.db = await openDB("LocalVecDB", 12, {
async upgrade(db, oldVersion, newVersion, transaction) {
oldVersion !== newVersion && await new _IndexedDBManager().resetDB(db);
},
blocking() {
console.warn("This connection is blocking another connection"), this.db && this.db.close();
}
});
} catch (e) {
throw console.error("IndexedDBManager init error:", e), e;
}
}
/**
* Closes the database connection.
* This should be called when the database is no longer needed to free up resources.
* @returns {Promise<void>}
*/
async closeDB() {
this.db && (this.db.close(), this.db = null);
}
/**
* Reset the database to its initial state.
* @param db - Pass the database object if you are doing a version upgrade. Else, don't pass anything.
* @returns {Promise<void>}
*/
async resetDB(db) {
if (db) {
for (let storeName of db.objectStoreNames)
db.deleteObjectStore(storeName);
db.createObjectStore("notes", { keyPath: "id", autoIncrement: !1 }).createIndex("metadata.noteUUID", "metadata.noteUUID", { unique: !1 }), db.createObjectStore("helpCenter", { keyPath: "id", autoIncrement: !1 }).createIndex("metadata.noteUUID", "metadata.noteUUID", { unique: !1 }), db.createObjectStore("config", { keyPath: "key" });
} else {
await this.init();
let tx = this.db.transaction(this.db.objectStoreNames, "readwrite");
for (let storeName of this.db.objectStoreNames)
await tx.objectStore(storeName).clear();
await tx.done;
}
console.log("LocalVecDB resetDB");
}
// --------------------------------------------
// -------------- NOTE EMBEDDINGS --------------
// --------------------------------------------
async getAllNotesEmbeddings() {
return await this.init(), this.db.transaction("notes").objectStore("notes").getAll();
}
async getUniqueNoteUUIDsInNoteEmbeddings() {
await this.init();
let index = this.db.transaction("notes").objectStore("notes").index("metadata.noteUUID"), uniqueUUIDs = /* @__PURE__ */ new Set(), cursor = await index.openCursor();
for (; cursor; )
uniqueUUIDs.add(cursor.value.metadata.noteUUID), cursor = await cursor.continue();
return uniqueUUIDs;
}
/**
* Inserts / Updates a note embedding in the notes object store.
* @param noteEmbeddingObjArr
* @returns {Promise<void>}
*/
async putMultipleNoteEmbedding(noteEmbeddingObjArr) {
await this.init();
let tx = this.db.transaction("notes", "readwrite"), notesObjectStore = tx.objectStore("notes");
for (let noteEmbeddingObj of noteEmbeddingObjArr) {
if (!noteEmbeddingObj.id)
throw new Error('Each note embedding object must have an "id" property.');
await notesObjectStore.put(noteEmbeddingObj);
}
await tx.done;
}
/**
* Deletes all note embedding chunks that have given note UUID.
* @param {string} noteUUIDArr - Array of note UUIDs to delete.
* @returns {Promise<void>}
*/
async deleteNoteEmbeddingByNoteUUIDList(noteUUIDArr) {
await this.init();
let tx = this.db.transaction("notes", "readwrite"), index = tx.objectStore("notes").index("metadata.noteUUID");
for (let noteUUID of noteUUIDArr) {
let cursor = await index.openCursor(IDBKeyRange.only(noteUUID));
for (; cursor; )
await cursor.delete(), cursor = await cursor.continue();
}
await tx.done;
}
// --------------------------------------------
// -------------- HELP CENTER EMBEDDING ----------------------
// --------------------------------------------
async getAllHelpCenterEmbeddings() {
return await this.init(), this.db.transaction("helpCenter").objectStore("helpCenter").getAll();
}
async putMultipleHelpCenterEmbeddings(helpCenterEmbeddingObjArr) {
await this.init();
let tx = this.db.transaction("helpCenter", "readwrite"), helpCenterObjectStore = tx.objectStore("helpCenter");
for (let helpCenterEmbeddingObj of helpCenterEmbeddingObjArr) {
if (!helpCenterEmbeddingObj.id)
throw new Error('Each note embedding object must have an "id" property.');
await helpCenterObjectStore.put(helpCenterEmbeddingObj);
}
await tx.done;
}
async clearHelpCenterEmbeddings() {
await this.init();
let tx = this.db.transaction("helpCenter", "readwrite");
await tx.objectStore("helpCenter").clear(), await tx.done;
}
// --------------------------------------------
// -------------- CONFIG ----------------------
// --------------------------------------------
async getConfigValue(key) {
var _a;
await this.init();
let tx = this.db.transaction("config"), value = (_a = await tx.objectStore("config").get(key)) == null ? void 0 : _a.value;
return await tx.done, value;
}
async setConfigValue(key, value) {
await this.init();
let tx = this.db.transaction("config", "readwrite");
await tx.objectStore("config").put({ key, value }), await tx.done;
}
};
 
// src-copilot/LocalVecDB/splitter/Splitter.js
init_process();
 
// src-copilot/markdown/markdown-parser.js
init_process();
var remarkGfm, unified, remarkFrontmatter, remarkParse, pipe, pipeWithYaml;
async function parse(markdownText, { yaml = !1 } = {}) {
return (!remarkGfm || !unified || !remarkFrontmatter || !remarkParse) && ([remarkGfm, unified, remarkFrontmatter, remarkParse] = await dynamicImportExternalPluginBundle("remarkBundle.js"), unified = unified.unified, remarkGfm = remarkGfm.default, remarkFrontmatter = remarkFrontmatter.default, remarkParse = remarkParse.default), !pipe && !yaml && (pipe = unified().use(remarkParse).use(remarkGfm)), !pipeWithYaml && yaml && (pipeWithYaml = unified().use(remarkParse).use(remarkGfm).use(remarkFrontmatter, ["yaml"])), await (yaml ? pipeWithYaml : pipe).parse(markdownText);
}
 
// node_modules/unist-util-visit/index.js
init_process();
 
// node_modules/unist-util-visit/lib/index.js
init_process();
 
// node_modules/unist-util-visit-parents/index.js
init_process();
 
// node_modules/unist-util-visit-parents/lib/index.js
init_process();
 
// node_modules/unist-util-is/index.js
init_process();
 
// node_modules/unist-util-is/lib/index.js
init_process();
var convert = (
// Note: overloads in JSDoc can’t yet use different `@template`s.
/**
* @type {(
* (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &
* (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &
* (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &
* ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &
* ((test?: Test) => Check)
* )}
*/
/**
* @param {Test} [test]
* @returns {Check}
*/
function(test) {
if (test == null)
return ok;
if (typeof test == "function")
return castFactory(test);
if (typeof test == "object")
return Array.isArray(test) ? anyFactory(test) : propsFactory(test);
if (typeof test == "string")
return typeFactory(test);
throw new Error("Expected function, string, or object as test");
}
);
function anyFactory(tests) {
let checks = [], index = -1;
for (; ++index < tests.length; )
checks[index] = convert(tests[index]);
return castFactory(any);
function any(...parameters) {
let index2 = -1;
for (; ++index2 < checks.length; )
if (checks[index2].apply(this, parameters)) return !0;
return !1;
}
}
function propsFactory(check) {
let checkAsRecord = (
/** @type {Record<string, unknown>} */
check
);
return castFactory(all2);
function all2(node2) {
let nodeAsRecord = (
/** @type {Record<string, unknown>} */
/** @type {unknown} */
node2
), key;
for (key in check)
if (nodeAsRecord[key] !== checkAsRecord[key]) return !1;
return !0;
}
}
function typeFactory(check) {
return castFactory(type);
function type(node2) {
return node2 && node2.type === check;
}
}
function castFactory(testFunction) {
return check;
function check(value, index, parent) {
return !!(looksLikeANode(value) && testFunction.call(
this,
value,
typeof index == "number" ? index : void 0,
parent || void 0
));
}
}
function ok() {
return !0;
}
function looksLikeANode(value) {
return value !== null && typeof value == "object" && "type" in value;
}
 
// node_modules/unist-util-visit-parents/lib/index.js
var empty = [], CONTINUE = !0, EXIT = !1, SKIP = "skip";
function visitParents(tree, test, visitor, reverse) {
let check;
typeof test == "function" && typeof visitor != "function" ? (reverse = visitor, visitor = test) : check = test;
let is2 = convert(check), step = reverse ? -1 : 1;
factory(tree, void 0, [])();
function factory(node2, index, parents) {
let value = (
/** @type {Record<string, unknown>} */
node2 && typeof node2 == "object" ? node2 : {}
);
if (typeof value.type == "string") {
let name = (
// `hast`
typeof value.tagName == "string" ? value.tagName : (
// `xast`
typeof value.name == "string" ? value.name : void 0
)
);
Object.defineProperty(visit2, "name", {
value: "node (" + (node2.type + (name ? "<" + name + ">" : "")) + ")"
});
}
return visit2;
function visit2() {
let result = empty, subresult, offset, grandparents;
if ((!test || is2(node2, index, parents[parents.length - 1] || void 0)) && (result = toResult(visitor(node2, parents)), result[0] === EXIT))
return result;
if ("children" in node2 && node2.children) {
let nodeAsParent = (
/** @type {UnistParent} */
node2
);
if (nodeAsParent.children && result[0] !== SKIP)
for (offset = (reverse ? nodeAsParent.children.length : -1) + step, grandparents = parents.concat(nodeAsParent); offset > -1 && offset < nodeAsParent.children.length; ) {
let child = nodeAsParent.children[offset];
if (subresult = factory(child, offset, grandparents)(), subresult[0] === EXIT)
return subresult;
offset = typeof subresult[1] == "number" ? subresult[1] : offset + step;
}
}
return result;
}
}
}
function toResult(value) {
return Array.isArray(value) ? value : typeof value == "number" ? [CONTINUE, value] : value == null ? empty : [value];
}
 
// node_modules/unist-util-visit/lib/index.js
function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {
let reverse, test, visitor;
typeof testOrVisitor == "function" && typeof visitorOrReverse != "function" ? (test = void 0, visitor = testOrVisitor, reverse = visitorOrReverse) : (test = testOrVisitor, visitor = visitorOrReverse, reverse = maybeReverse), visitParents(tree, test, overload, reverse);
function overload(node2, parents) {
let parent = parents[parents.length - 1], index = parent ? parent.children.indexOf(node2) : void 0;
return visitor(node2, index, parent);
}
}
 
// node_modules/mdast-util-to-string/index.js
init_process();
 
// node_modules/mdast-util-to-string/lib/index.js
init_process();
var emptyOptions = {};
function toString(value, options) {
let settings = options || emptyOptions, includeImageAlt = typeof settings.includeImageAlt == "boolean" ? settings.includeImageAlt : !0, includeHtml = typeof settings.includeHtml == "boolean" ? settings.includeHtml : !0;
return one(value, includeImageAlt, includeHtml);
}
function one(value, includeImageAlt, includeHtml) {
if (node(value)) {
if ("value" in value)
return value.type === "html" && !includeHtml ? "" : value.value;
if (includeImageAlt && "alt" in value && value.alt)
return value.alt;
if ("children" in value)
return all(value.children, includeImageAlt, includeHtml);
}
return Array.isArray(value) ? all(value, includeImageAlt, includeHtml) : "";
}
function all(values, includeImageAlt, includeHtml) {
let result = [], index = -1;
for (; ++index < values.length; )
result[index] = one(values[index], includeImageAlt, includeHtml);
return result.join("");
}
function node(value) {
return !!(value && typeof value == "object");
}
 
// node_modules/lodash-es/lodash.js
init_process();
 
// node_modules/lodash-es/isSymbol.js
init_process();
 
// node_modules/lodash-es/_baseGetTag.js
init_process();
 
// node_modules/lodash-es/_Symbol.js
init_process();
 
// node_modules/lodash-es/_root.js
init_process();
 
// node_modules/lodash-es/_freeGlobal.js
init_process();
var freeGlobal = typeof globalThis == "object" && globalThis && globalThis.Object === Object && globalThis, freeGlobal_default = freeGlobal;
 
// node_modules/lodash-es/_root.js
var freeSelf = typeof self == "object" && self && self.Object === Object && self, root = freeGlobal_default || freeSelf || Function("return this")(), root_default = root;
 
// node_modules/lodash-es/_Symbol.js
var Symbol2 = root_default.Symbol, Symbol_default = Symbol2;
 
// node_modules/lodash-es/_getRawTag.js
init_process();
var objectProto = Object.prototype, hasOwnProperty = objectProto.hasOwnProperty, nativeObjectToString = objectProto.toString, symToStringTag = Symbol_default ? Symbol_default.toStringTag : void 0;
function getRawTag(value) {
var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
try {
value[symToStringTag] = void 0;
var unmasked = !0;
} catch {
}
var result = nativeObjectToString.call(value);
return unmasked && (isOwn ? value[symToStringTag] = tag : delete value[symToStringTag]), result;
}
var getRawTag_default = getRawTag;
 
// node_modules/lodash-es/_objectToString.js
init_process();
var objectProto2 = Object.prototype, nativeObjectToString2 = objectProto2.toString;
function objectToString(value) {
return nativeObjectToString2.call(value);
}
var objectToString_default = objectToString;
 
// node_modules/lodash-es/_baseGetTag.js
var nullTag = "[object Null]", undefinedTag = "[object Undefined]", symToStringTag2 = Symbol_default ? Symbol_default.toStringTag : void 0;
function baseGetTag(value) {
return value == null ? value === void 0 ? undefinedTag : nullTag : symToStringTag2 && symToStringTag2 in Object(value) ? getRawTag_default(value) : objectToString_default(value);
}
var baseGetTag_default = baseGetTag;
 
// node_modules/lodash-es/isObjectLike.js
init_process();
function isObjectLike(value) {
return value != null && typeof value == "object";
}
var isObjectLike_default = isObjectLike;
 
// node_modules/lodash-es/isSymbol.js
var symbolTag = "[object Symbol]";
function isSymbol(value) {
return typeof value == "symbol" || isObjectLike_default(value) && baseGetTag_default(value) == symbolTag;
}
var isSymbol_default = isSymbol;
 
// node_modules/lodash-es/_baseToString.js
init_process();
 
// node_modules/lodash-es/_arrayMap.js
init_process();
function arrayMap(array, iteratee) {
for (var index = -1, length = array == null ? 0 : array.length, result = Array(length); ++index < length; )
result[index] = iteratee(array[index], index, array);
return result;
}
var arrayMap_default = arrayMap;
 
// node_modules/lodash-es/isArray.js
init_process();
var isArray = Array.isArray, isArray_default = isArray;
 
// node_modules/lodash-es/_baseToString.js
var INFINITY = 1 / 0, symbolProto = Symbol_default ? Symbol_default.prototype : void 0, symbolToString = symbolProto ? symbolProto.toString : void 0;
function baseToString(value) {
if (typeof value == "string")
return value;
if (isArray_default(value))
return arrayMap_default(value, baseToString) + "";
if (isSymbol_default(value))
return symbolToString ? symbolToString.call(value) : "";
var result = value + "";
return result == "0" && 1 / value == -INFINITY ? "-0" : result;
}
var baseToString_default = baseToString;
 
// node_modules/lodash-es/toInteger.js
init_process();
 
// node_modules/lodash-es/toFinite.js
init_process();
 
// node_modules/lodash-es/toNumber.js
init_process();
 
// node_modules/lodash-es/_baseTrim.js
init_process();
 
// node_modules/lodash-es/_trimmedEndIndex.js
init_process();
var reWhitespace = /\s/;
function trimmedEndIndex(string) {
for (var index = string.length; index-- && reWhitespace.test(string.charAt(index)); )
;
return index;
}
var trimmedEndIndex_default = trimmedEndIndex;
 
// node_modules/lodash-es/_baseTrim.js
var reTrimStart = /^\s+/;
function baseTrim(string) {
return string && string.slice(0, trimmedEndIndex_default(string) + 1).replace(reTrimStart, "");
}
var baseTrim_default = baseTrim;
 
// node_modules/lodash-es/isObject.js
init_process();
function isObject(value) {
var type = typeof value;
return value != null && (type == "object" || type == "function");
}
var isObject_default = isObject;
 
// node_modules/lodash-es/toNumber.js
var NAN = NaN, reIsBadHex = /^[-+]0x[0-9a-f]+$/i, reIsBinary = /^0b[01]+$/i, reIsOctal = /^0o[0-7]+$/i, freeParseInt = parseInt;
function toNumber(value) {
if (typeof value == "number")
return value;
if (isSymbol_default(value))
return NAN;
if (isObject_default(value)) {
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
value = isObject_default(other) ? other + "" : other;
}
if (typeof value != "string")
return value === 0 ? value : +value;
value = baseTrim_default(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
var toNumber_default = toNumber;
 
// node_modules/lodash-es/toFinite.js
var INFINITY2 = 1 / 0, MAX_INTEGER = 17976931348623157e292;
function toFinite(value) {
if (!value)
return value === 0 ? value : 0;
if (value = toNumber_default(value), value === INFINITY2 || value === -INFINITY2) {
var sign = value < 0 ? -1 : 1;
return sign * MAX_INTEGER;
}
return value === value ? value : 0;
}
var toFinite_default = toFinite;
 
// node_modules/lodash-es/toInteger.js
function toInteger(value) {
var result = toFinite_default(value), remainder = result % 1;
return result === result ? remainder ? result - remainder : result : 0;
}
var toInteger_default = toInteger;
 
// node_modules/lodash-es/isFunction.js
init_process();
var asyncTag = "[object AsyncFunction]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
function isFunction(value) {
if (!isObject_default(value))
return !1;
var tag = baseGetTag_default(value);
return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}
var isFunction_default = isFunction;
 
// node_modules/lodash-es/_isIndex.js
init_process();
var MAX_SAFE_INTEGER = 9007199254740991, reIsUint = /^(?:0|[1-9]\d*)$/;
function isIndex(value, length) {
var type = typeof value;
return length = length == null ? MAX_SAFE_INTEGER : length, !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;
}
var isIndex_default = isIndex;
 
// node_modules/lodash-es/eq.js
init_process();
function eq(value, other) {
return value === other || value !== value && other !== other;
}
var eq_default = eq;
 
// node_modules/lodash-es/_isIterateeCall.js
init_process();
 
// node_modules/lodash-es/isArrayLike.js
init_process();
 
// node_modules/lodash-es/isLength.js
init_process();
var MAX_SAFE_INTEGER2 = 9007199254740991;
function isLength(value) {
return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2;
}
var isLength_default = isLength;
 
// node_modules/lodash-es/isArrayLike.js
function isArrayLike(value) {
return value != null && isLength_default(value.length) && !isFunction_default(value);
}
var isArrayLike_default = isArrayLike;
 
// node_modules/lodash-es/_isIterateeCall.js
function isIterateeCall(value, index, object) {
if (!isObject_default(object))
return !1;
var type = typeof index;
return (type == "number" ? isArrayLike_default(object) && isIndex_default(index, object.length) : type == "string" && index in object) ? eq_default(object[index], value) : !1;
}
var isIterateeCall_default = isIterateeCall;
 
// node_modules/lodash-es/_baseUnary.js
init_process();
function baseUnary(func) {
return function(value) {
return func(value);
};
}
var baseUnary_default = baseUnary;
 
// node_modules/lodash-es/_nodeUtil.js
init_process();
var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports, freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module, moduleExports = freeModule && freeModule.exports === freeExports, freeProcess = moduleExports && freeGlobal_default.process, nodeUtil = function() {
try {
var types = freeModule && freeModule.require && freeModule.require("util").types;
return types || freeProcess && freeProcess.binding && freeProcess.binding("util");
} catch {
}
}(), nodeUtil_default = nodeUtil;
 
// node_modules/lodash-es/toString.js
init_process();
function toString2(value) {
return value == null ? "" : baseToString_default(value);
}
var toString_default = toString2;
 
// node_modules/lodash-es/_castSlice.js
init_process();
 
// node_modules/lodash-es/_baseSlice.js
init_process();
function baseSlice(array, start, end) {
var index = -1, length = array.length;
start < 0 && (start = -start > length ? 0 : length + start), end = end > length ? length : end, end < 0 && (end += length), length = start > end ? 0 : end - start >>> 0, start >>>= 0;
for (var result = Array(length); ++index < length; )
result[index] = array[index + start];
return result;
}
var baseSlice_default = baseSlice;
 
// node_modules/lodash-es/_castSlice.js
function castSlice(array, start, end) {
var length = array.length;
return end = end === void 0 ? length : end, !start && end >= length ? array : baseSlice_default(array, start, end);
}
var castSlice_default = castSlice;
 
// node_modules/lodash-es/_hasUnicode.js
init_process();
var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = "\\ufe0e\\ufe0f", rsZWJ = "\\u200d", reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]");
function hasUnicode(string) {
return reHasUnicode.test(string);
}
var hasUnicode_default = hasUnicode;
 
// node_modules/lodash-es/_stringToArray.js
init_process();
 
// node_modules/lodash-es/_asciiToArray.js
init_process();
function asciiToArray(string) {
return string.split("");
}
var asciiToArray_default = asciiToArray;
 
// node_modules/lodash-es/_unicodeToArray.js
init_process();
var rsAstralRange2 = "\\ud800-\\udfff", rsComboMarksRange2 = "\\u0300-\\u036f", reComboHalfMarksRange2 = "\\ufe20-\\ufe2f", rsComboSymbolsRange2 = "\\u20d0-\\u20ff", rsComboRange2 = rsComboMarksRange2 + reComboHalfMarksRange2 + rsComboSymbolsRange2, rsVarRange2 = "\\ufe0e\\ufe0f", rsAstral = "[" + rsAstralRange2 + "]", rsCombo = "[" + rsComboRange2 + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange2 + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsZWJ2 = "\\u200d", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange2 + "]?", rsOptJoin = "(?:" + rsZWJ2 + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")", reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
function unicodeToArray(string) {
return string.match(reUnicode) || [];
}
var unicodeToArray_default = unicodeToArray;
 
// node_modules/lodash-es/_stringToArray.js
function stringToArray(string) {
return hasUnicode_default(string) ? unicodeToArray_default(string) : asciiToArray_default(string);
}
var stringToArray_default = stringToArray;
 
// node_modules/lodash-es/chunk.js
init_process();
var nativeCeil = Math.ceil, nativeMax = Math.max;
function chunk(array, size, guard) {
(guard ? isIterateeCall_default(array, size, guard) : size === void 0) ? size = 1 : size = nativeMax(toInteger_default(size), 0);
var length = array == null ? 0 : array.length;
if (!length || size < 1)
return [];
for (var index = 0, resIndex = 0, result = Array(nativeCeil(length / size)); index < length; )
result[resIndex++] = baseSlice_default(array, index, index += size);
return result;
}
var chunk_default = chunk;
 
// node_modules/lodash-es/_baseProperty.js
init_process();
function baseProperty(key) {
return function(object) {
return object == null ? void 0 : object[key];
};
}
var baseProperty_default = baseProperty;
 
// node_modules/lodash-es/isRegExp.js
init_process();
 
// node_modules/lodash-es/_baseIsRegExp.js
init_process();
var regexpTag = "[object RegExp]";
function baseIsRegExp(value) {
return isObjectLike_default(value) && baseGetTag_default(value) == regexpTag;
}
var baseIsRegExp_default = baseIsRegExp;
 
// node_modules/lodash-es/isRegExp.js
var nodeIsRegExp = nodeUtil_default && nodeUtil_default.isRegExp, isRegExp = nodeIsRegExp ? baseUnary_default(nodeIsRegExp) : baseIsRegExp_default, isRegExp_default = isRegExp;
 
// node_modules/lodash-es/_stringSize.js
init_process();
 
// node_modules/lodash-es/_asciiSize.js
init_process();
var asciiSize = baseProperty_default("length"), asciiSize_default = asciiSize;
 
// node_modules/lodash-es/_unicodeSize.js
init_process();
var rsAstralRange3 = "\\ud800-\\udfff", rsComboMarksRange3 = "\\u0300-\\u036f", reComboHalfMarksRange3 = "\\ufe20-\\ufe2f", rsComboSymbolsRange3 = "\\u20d0-\\u20ff", rsComboRange3 = rsComboMarksRange3 + reComboHalfMarksRange3 + rsComboSymbolsRange3, rsVarRange3 = "\\ufe0e\\ufe0f", rsAstral2 = "[" + rsAstralRange3 + "]", rsCombo2 = "[" + rsComboRange3 + "]", rsFitz2 = "\\ud83c[\\udffb-\\udfff]", rsModifier2 = "(?:" + rsCombo2 + "|" + rsFitz2 + ")", rsNonAstral2 = "[^" + rsAstralRange3 + "]", rsRegional2 = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair2 = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsZWJ3 = "\\u200d", reOptMod2 = rsModifier2 + "?", rsOptVar2 = "[" + rsVarRange3 + "]?", rsOptJoin2 = "(?:" + rsZWJ3 + "(?:" + [rsNonAstral2, rsRegional2, rsSurrPair2].join("|") + ")" + rsOptVar2 + reOptMod2 + ")*", rsSeq2 = rsOptVar2 + reOptMod2 + rsOptJoin2, rsSymbol2 = "(?:" + [rsNonAstral2 + rsCombo2 + "?", rsCombo2, rsRegional2, rsSurrPair2, rsAstral2].join("|") + ")", reUnicode2 = RegExp(rsFitz2 + "(?=" + rsFitz2 + ")|" + rsSymbol2 + rsSeq2, "g");
function unicodeSize(string) {
for (var result = reUnicode2.lastIndex = 0; reUnicode2.test(string); )
++result;
return result;
}
var unicodeSize_default = unicodeSize;
 
// node_modules/lodash-es/_stringSize.js
function stringSize(string) {
return hasUnicode_default(string) ? unicodeSize_default(string) : asciiSize_default(string);
}
var stringSize_default = stringSize;
 
// node_modules/lodash-es/truncate.js
init_process();
var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "...", reFlags = /\w*$/;
function truncate(string, options) {
var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION;
if (isObject_default(options)) {
var separator = "separator" in options ? options.separator : separator;
length = "length" in options ? toInteger_default(options.length) : length, omission = "omission" in options ? baseToString_default(options.omission) : omission;
}
string = toString_default(string);
var strLength = string.length;
if (hasUnicode_default(string)) {
var strSymbols = stringToArray_default(string);
strLength = strSymbols.length;
}
if (length >= strLength)
return string;
var end = length - stringSize_default(omission);
if (end < 1)
return omission;
var result = strSymbols ? castSlice_default(strSymbols, 0, end).join("") : string.slice(0, end);
if (separator === void 0)
return result + omission;
if (strSymbols && (end += result.length - end), isRegExp_default(separator)) {
if (string.slice(end).search(separator)) {
var match, substring = result;
for (separator.global || (separator = RegExp(separator.source, toString_default(reFlags.exec(separator)) + "g")), separator.lastIndex = 0; match = separator.exec(substring); )
var newEnd = match.index;
result = result.slice(0, newEnd === void 0 ? end : newEnd);
}
} else if (string.indexOf(baseToString_default(separator), end) != end) {
var index = result.lastIndexOf(separator);
index > -1 && (result = result.slice(0, index));
}
return result + omission;
}
var truncate_default = truncate;
 
// src-copilot/LocalVecDB/utils/getExtendedNoteHandleProperties.js
init_process();
var searchResultCache = null;
async function getExtendedNoteHandleProperties(app, note) {
if (!searchResultCache) {
searchResultCache = {};
let isArchivedSearch = await app.filterNotes({ group: "archived" });
isArchivedSearch && (searchResultCache.isArchivedNoteUUIDs = new Set(isArchivedSearch.map((note2) => note2.uuid)));
let isTaskListNoteSearch = await app.filterNotes({ group: "taskList" });
isTaskListNoteSearch && (searchResultCache.isTaskListNoteUUIDs = new Set(isTaskListNoteSearch.map((note2) => note2.uuid)));
let isSharedByMeSearch = await app.filterNotes({ group: "shared" });
isSharedByMeSearch && (searchResultCache.isSharedByMeNoteUUIDs = new Set(isSharedByMeSearch.map((note2) => note2.uuid)));
let isSharedWithMeSearch = await app.filterNotes({ group: "shareReceived" });
isSharedWithMeSearch && (searchResultCache.isSharedWithMeNoteUUIDs = new Set(isSharedWithMeSearch.map((note2) => note2.uuid))), setTimeout(() => {
searchResultCache = null;
}, 1e3 * 60);
}
return {
isArchived: searchResultCache.isArchivedNoteUUIDs.has(note.uuid),
isTaskListNote: searchResultCache.isTaskListNoteUUIDs.has(note.uuid),
isSharedByMe: searchResultCache.isSharedByMeNoteUUIDs.has(note.uuid),
isSharedWithMe: searchResultCache.isSharedWithMeNoteUUIDs.has(note.uuid),
isPublished: note.published || !1
};
}
 
// src-copilot/LocalVecDB/splitter/Splitter.js
var Splitter = class {
constructor(maxTokens) {
this.maxTokens = maxTokens, this.splitRecordList = [], this.noteContent = "", this.noteProperties = {}, this.noteImages = [];
}
_addSplitRecord(note, headers, isFirstSplit = !1) {
let lastHeader = headers[headers.length - 1], lastHeaderText = toString(lastHeader);
this.splitRecordList.push({
id: note.uuid + "##" + this.splitRecordList.length,
metadata: {
noteContentPart: "",
noteUUID: note.uuid,
noteTitle: note.name || note.title || "Untitled Note",
noteTags: note.tags || [],
headingAnchor: lastHeaderText ? lastHeaderText.trim().replaceAll(" ", "_") : null,
...this.noteProperties
},
tempData: {
isFirstSplit,
headers,
addedTokenCount: 0
}
});
}
_getFrontMatter(splitRecord) {
let headerHierarchy = splitRecord.tempData.headers && splitRecord.tempData.headers.length > 0 ? splitRecord.tempData.headers.map((header) => `${"#".repeat(header.depth)} ${this.noteContent.substring(header.position.start.offset, header.position.end.offset).trim().replaceAll(`
`, "")}`).join("> ") : "";
return `---
title: ${truncate_default(splitRecord.metadata.noteTitle, { length: 50 })}
` + (splitRecord.tempData.isFirstSplit && splitRecord.metadata.noteTags && isArray_default(splitRecord.metadata.noteTags) ? `tags: ${splitRecord.metadata.noteTags.slice(0, 4).filter((x) => x.length < 10).join(", ")}
` : "") + (headerHierarchy && headerHierarchy.length < 120 ? `headers: ${headerHierarchy}
` : "") + `---
`;
}
async _collectNoteInfo(app, note) {
this.noteContent = await app.getNoteContent({ uuid: note.uuid }), this.noteProperties = await getExtendedNoteHandleProperties(app, note), this.noteImages = await app.getNoteImages({ uuid: note.uuid });
}
_rebalanceChunks(rebalanceChunksThreshold) {
if (rebalanceChunksThreshold < 0 || rebalanceChunksThreshold > 1) throw new Error("rebalanceChunksThreshold must be between 0 and 1");
let rebalancedChunks = [], currentChunk = null;
for (let chunk2 of this.splitRecordList) {
if (!currentChunk) {
currentChunk = { ...chunk2 };
continue;
}
if (currentChunk.tempData.addedTokenCount + chunk2.tempData.addedTokenCount > rebalanceChunksThreshold * this.maxTokens) {
rebalancedChunks.push(currentChunk), currentChunk = { ...chunk2 };
continue;
}
currentChunk.tempData.headers.length === 0 && chunk2.tempData.headers.length > 0 && currentChunk.tempData.addedTokenCount === 0 && (currentChunk.metadata.headingAnchor = chunk2.metadata.headingAnchor, currentChunk.tempData.headers = chunk2.tempData.headers), currentChunk.metadata.noteContentPart += `
` + chunk2.metadata.noteContentPart, currentChunk.tempData.addedTokenCount += 1 + chunk2.tempData.addedTokenCount;
}
currentChunk && rebalancedChunks.push(currentChunk), this.splitRecordList = rebalancedChunks;
}
_enrichChunks() {
this.splitRecordList = this.splitRecordList.filter((result) => result.tempData.addedTokenCount > 0);
for (let chunk2 of this.splitRecordList)
chunk2.metadata.noteContentPart = this._getFrontMatter(chunk2) + chunk2.metadata.noteContentPart, delete chunk2.tempData;
}
_processTokens(nodeTokens, note, headers) {
if (nodeTokens.length > this.maxTokens * 1e3)
return "skip";
for (; nodeTokens.length > 0; ) {
let remainingSpace = this.maxTokens - this.splitRecordList[this.splitRecordList.length - 1].tempData.addedTokenCount;
remainingSpace === 0 && this._addSplitRecord(note, headers);
let addedTokenCount = nodeTokens.slice(0, remainingSpace).length;
this.splitRecordList[this.splitRecordList.length - 1].metadata.noteContentPart += nodeTokens.slice(0, remainingSpace).join(""), nodeTokens = nodeTokens.slice(remainingSpace), this.splitRecordList[this.splitRecordList.length - 1].tempData.addedTokenCount += addedTokenCount;
}
return "skip";
}
async splitNote(app, note, rebalanceChunksThreshold = 0.7) {
if (note && note.vault) return [];
if (note && note.uuid && note.uuid.startsWith("local-")) return [];
this.splitRecordList = [], await this._collectNoteInfo(app, note);
let root2 = await parse(this.noteContent), headers = [];
return this._addSplitRecord(note, headers, !0), visit(root2, (node2) => {
if (node2.type === "heading") {
headers = headers.filter((header) => header.depth < node2.depth), headers.push(node2), this._addSplitRecord(note, headers);
let headerText = this.noteContent.substring(node2.position.start.offset, node2.position.end.offset);
return this.splitRecordList[this.splitRecordList.length - 1].metadata.noteContentPart += headerText + `
`, this.splitRecordList[this.splitRecordList.length - 1].tempData.addedTokenCount += this.tokenize(headerText).length + 1, "skip";
} else {
if (node2.type === "root" || node2.type === "paragraph")
return "continue";
if (node2.type === "code" && node2.position && node2.position.end.offset - node2.position.start.offset > this.maxTokens * 3)
return console.log("Skipping code block due to length", node2), "skip";
if (node2.type === "image" && node2.position) {
let imageObjFromAmplenote = this.noteImages.find((image) => image.src.trim() === node2.url.trim()), alt = "";
imageObjFromAmplenote && imageObjFromAmplenote.text && (alt = imageObjFromAmplenote.text.replaceAll(`
`, " "));
let nodeValue = `![${alt.substring(0, 4e3)}](${node2.url})`, nodeTokens = this.tokenize(nodeValue);
return this._processTokens(nodeTokens, note, headers);
} else {
let nodeValue = node2.position ? this.noteContent.substring(node2.position.start.offset, node2.position.end.offset) : toString(node2), nodeTokens = this.tokenize(nodeValue);
return this._processTokens(nodeTokens, note, headers);
}
}
}), this._rebalanceChunks(rebalanceChunksThreshold), this._enrichChunks(), this.splitRecordList;
}
tokenize(content) {
return (content.match(/\S+|\s+/g) || []).flatMap((token) => {
if (token.length <= 12) return [token];
let chunks = [];
for (let i = 0; i < token.length; i += 12)
chunks.push(token.slice(i, Math.min(i + 12, token.length)));
return chunks;
});
}
};
 
// src-copilot/LocalVecDB/embeddings/getEmbeddingProviderName.js
init_process();
function getEmbeddingProviderName(app) {
if (!app) throw new Error("app object must be passed to this function");
try {
app.settings[PINECONE_API_KEY_SETTING] && app.settings[PINECONE_API_KEY_SETTING].trim() !== "" && (app.setSetting(EMBEDDING_API_URL_SETTING, "https://api.pinecone.io/embed"), app.settings[EMBEDDING_API_URL_SETTING] = "https://api.pinecone.io/embed", app.setSetting(EMBEDDING_API_KEY_SETTING, app.settings[PINECONE_API_KEY_SETTING]), app.settings[EMBEDDING_API_KEY_SETTING] = app.settings[PINECONE_API_KEY_SETTING], app.setSetting(PINECONE_API_KEY_SETTING, ""));
} catch (e) {
console.error(e);
}
let embedApiUrl = app.settings[EMBEDDING_API_URL_SETTING] || "";
if (embedApiUrl.includes("api.openai.com"))
return "openai";
if (embedApiUrl.includes("googleapis"))
return "google";
if (embedApiUrl.includes("localhost"))
return "ollama";
if (embedApiUrl.includes("fireworks"))
return "fireworks";
if (embedApiUrl.includes("pinecone"))
return "pinecone";
if (embedApiUrl.trim() === "" || embedApiUrl.trim() === "local")
return "local";
throw new Error(`Embedding provider ${embedApiUrl} not supported. Please set correct API URL or keep it empty to use in-browser local embedding model.`);
}
 
// node_modules/scheduler-polyfill/dist/scheduler-polyfill.js
init_process();
(function() {
var t = ["user-blocking", "user-visible", "background"];
class i {
constructor() {
this.t = new MessageChannel(), this.i = this.t.port2, this.l = {}, this.o = 1, this.t.port1.onmessage = (t2) => this.h(t2);
}
u(t2) {
var i2 = this.o++;
return this.l[i2] = t2, this.i.postMessage(i2), i2;
}
p(t2) {
delete this.l[t2];
}
h(t2) {
var i2 = t2.data;
if (i2 in this.l) {
var r2 = this.l[i2];
delete this.l[i2], r2();
}
}
}
function r() {
return r.v || (r.v = new i()), r.v;
}
class s {
constructor(t2, i2, r2) {
r2 === void 0 && (r2 = 0), this.k = t2, this.T = null, this.C = null, this.m = !1, this._(i2, r2);
}
isIdleCallback() {
return this.T === 0;
}
I() {
return this.T === 2;
}
cancel() {
if (!this.m) switch (this.m = !0, this.T) {
case 0:
cancelIdleCallback(this.C);
break;
case 1:
clearTimeout(this.C);
break;
case 2:
r().p(this.C);
break;
default:
throw new TypeError("Unknown CallbackType");
}
}
_(i2, s2) {
if (s2 && s2 > 0) return this.T = 1, void (this.C = setTimeout(() => {
this.P();
}, s2));
if (!t.includes(i2)) throw new TypeError("Invalid task priority : " + i2);
return i2 === "background" && typeof requestIdleCallback == "function" ? (this.T = 0, void (this.C = requestIdleCallback(() => {
this.P();
}))) : typeof MessageChannel == "function" ? (this.T = 2, void (this.C = r().u(() => {
this.P();
}))) : (this.T = 1, void (this.C = setTimeout(() => {
this.P();
})));
}
P() {
this.m || this.k();
}
}
var e = 0;
class n {
constructor() {
this.j = null, this.M = null;
}
isEmpty() {
return this.j == null;
}
push(t2) {
if (typeof t2 != "object") throw new TypeError("Task must be an Object");
t2.A = e++, this.isEmpty() ? (t2.N = null, this.j = t2) : (t2.N = this.M, this.M.O = t2), t2.O = null, this.M = t2;
}
takeNextTask() {
if (this.isEmpty()) return null;
var t2 = this.j;
return this.q(t2), t2;
}
merge(t2, i2) {
if (typeof i2 != "function") throw new TypeError("Must provide a selector function.");
if (t2 == null) throw new Error("sourceQueue cannot be null");
for (var r2 = this.j, s2 = null, e2 = t2.j; e2; ) {
var n2 = e2;
if (e2 = e2.O, i2(n2)) {
for (t2.q(n2); r2 && r2.A < n2.A; ) s2 = r2, r2 = r2.O;
this.D(n2, s2), s2 = n2;
}
}
}
D(t2, i2) {
if (i2 != this.M) {
var r2 = i2 ? i2.O : this.j;
t2.O = r2, r2.N = t2, t2.N = i2, i2 != null ? i2.O = t2 : this.j = t2;
} else this.push(t2);
}
q(t2) {
if (t2 == null) throw new Error("Expected task to be non-null");
t2 === this.j && (this.j = t2.O), t2 === this.M && (this.M = this.M.N), t2.O && (t2.O.N = t2.N), t2.N && (t2.N.O = t2.O);
}
}
class l extends Event {
constructor(i2, r2) {
if (!r2 || !t.includes(r2.previousPriority)) throw new TypeError("Invalid task priority: '" + r2.previousPriority + "'");
super(i2), this.previousPriority = r2.previousPriority;
}
}
class o extends AbortController {
constructor(i2) {
if (i2 === void 0 && (i2 = {}), super(), i2 == null && (i2 = {}), typeof i2 != "object") throw new TypeError("'init' is not an object");
var r2, s2, e2 = i2.priority === void 0 ? "user-visible" : i2.priority;
if (!t.includes(e2)) throw new TypeError("Invalid task priority: '" + e2 + "'");
this.H = e2, this.R = !1, s2 = (r2 = this).signal, Object.defineProperties(s2, { priority: { get: function() {
return r2.H;
}, enumerable: !0 }, onprioritychange: { value: null, writable: !0, enumerable: !0 } }), s2.addEventListener("prioritychange", (t2) => {
s2.onprioritychange && s2.onprioritychange(t2);
});
}
setPriority(i2) {
if (!t.includes(i2)) throw new TypeError("Invalid task priority: " + i2);
if (this.R) throw new DOMException("", "NotAllowedError");
if (this.signal.priority !== i2) {
this.R = !0;
var r2 = this.H;
this.H = i2;
var s2 = new l("prioritychange", { previousPriority: r2 });
this.signal.dispatchEvent(s2), this.R = !1;
}
}
}
self.scheduler === void 0 ? (self.scheduler = new class {
constructor() {
this.S = {}, t.forEach((t2) => {
this.S[t2] = [new n(), new n()];
}), this.U = null, this.W = /* @__PURE__ */ new WeakMap();
}
yield() {
return this.B(() => {
}, { priority: "user-visible" }, !0);
}
postTask(t2, i2) {
return this.B(t2, i2, !1);
}
B(i2, r2, s2) {
if ((r2 = Object.assign({}, r2)).signal !== void 0) {
if (r2.signal === null || !("aborted" in r2.signal) || typeof r2.signal.addEventListener != "function") return Promise.reject(new TypeError("'signal' is not a valid 'AbortSignal'"));
if (r2.signal && r2.signal.priority && !t.includes(r2.signal.priority)) return Promise.reject(new TypeError("Invalid task priority: '" + r2.signal.priority + "'"));
}
if (r2.priority !== void 0 && (r2.priority === null || !t.includes(r2.priority))) return Promise.reject(new TypeError("Invalid task priority: '" + r2.priority + "'"));
if (r2.delay === void 0 && (r2.delay = 0), r2.delay = Number(r2.delay), r2.delay < 0) return Promise.reject(new TypeError("'delay' must be a positive number."));
var e2 = { callback: i2, options: r2, resolve: null, reject: null, hostCallback: null, abortCallback: null, onTaskCompleted: function() {
this.options.signal && this.abortCallback && (this.options.signal.removeEventListener("abort", this.abortCallback), this.abortCallback = null);
}, onTaskAborted: function() {
this.hostCallback && (this.hostCallback.cancel(), this.hostCallback = null), this.options.signal.removeEventListener("abort", this.abortCallback), this.abortCallback = null, this.reject(this.options.signal.reason);
}, isAborted: function() {
return this.options.signal && this.options.signal.aborted;
}, isContinuation: s2 }, n2 = new Promise((t2, i3) => {
e2.resolve = t2, e2.reject = i3;
});
return this._(e2), n2;
}
_(t2) {
var i2 = t2.options.signal;
if (i2) {
if (i2.aborted) return void t2.reject(i2.reason);
t2.abortCallback = () => {
t2.onTaskAborted();
}, i2.addEventListener("abort", t2.abortCallback);
}
t2.options.delay > 0 ? t2.hostCallback = new s(() => {
t2.hostCallback = null, this.F(t2);
}, null, t2.options.delay) : (this.G(t2), this.J());
}
F(t2) {
this.G(t2), this.U && (this.U.cancel(), this.U = null), this.K();
}
L(t2) {
var i2 = this.W.get(t2);
if (i2 === void 0) throw new Error("Attempting to change priority on an unregistered signal");
if (i2 !== t2.priority) {
for (var r2 = 0; r2 < 2; r2++) this.S[t2.priority][r2].merge(this.S[i2][r2], (i3) => i3.options.signal === t2);
this.W.set(t2, t2.priority);
}
}
K() {
this.U = null, this.V(), this.J();
}
J() {
var { priority: t2 } = this.X();
t2 != null && (t2 !== "background" && this.U && this.U.isIdleCallback() && (this.U.cancel(), this.U = null), this.U || (this.U = new s(() => {
this.K();
}, t2, 0)));
}
G(i2) {
var r2;
if (!t.includes(r2 = i2.options.priority ? i2.options.priority : i2.options.signal && i2.options.signal.priority ? i2.options.signal.priority : "user-visible")) throw new TypeError("Invalid task priority: " + r2);
if (i2.options.signal && i2.options.signal.priority) {
var s2 = i2.options.signal;
this.W.has(s2) || (s2.addEventListener("prioritychange", () => {
this.L(s2);
}), this.W.set(s2, s2.priority));
}
this.S[r2][i2.isContinuation ? 0 : 1].push(i2);
}
V() {
var t2 = null;
do {
var { priority: i2, type: r2 } = this.X();
if (i2 == null) return;
t2 = this.S[i2][r2].takeNextTask();
} while (t2.isAborted());
try {
var s2 = t2.callback();
t2.resolve(s2);
} catch (i3) {
t2.reject(i3);
} finally {
t2.onTaskCompleted();
}
}
X() {
for (var i2 = 0; i2 < t.length; i2++) for (var r2 = t[i2], s2 = 0; s2 < 2; s2++) if (!this.S[r2][s2].isEmpty()) return { priority: r2, type: s2 };
return { priority: null, type: 0 };
}
}(), self.TaskController = o, self.TaskPriorityChangeEvent = l) : self.scheduler.yield || (self.scheduler.yield = function() {
return self.scheduler.postTask(() => {
}, { priority: "user-blocking" });
});
})();
 
// src-copilot/LocalVecDB/embeddings/EmbeddingGeneratorFactory.js
init_process();
 
// src-copilot/LocalVecDB/embeddings/OpenAIEmbeddingGenerator.js
init_process();
 
// src-copilot/LocalVecDB/embeddings/EmbeddingGeneratorBase.js
init_process();
var EmbeddingGeneratorBase = class {
constructor(modelName, costPerMillionToken, maxConcurrency = 1) {
__publicField(this, "COST_PER_MILLION_TOKEN", null);
__publicField(this, "MODEL_NAME", null);
__publicField(this, "MAX_CONCURRENCY", null);
this.COST_PER_MILLION_TOKEN = costPerMillionToken, this.MODEL_NAME = modelName, this.MAX_CONCURRENCY = maxConcurrency;
}
async generateEmbedding(app, textArray, inputType) {
throw new Error("Not implemented");
}
async getEmbeddingCost(app, textArrayCount) {
if (this.COST_PER_MILLION_TOKEN === null)
throw new Error("Cost per million tokens not set");
return textArrayCount * 512 / 1e6 * this.COST_PER_MILLION_TOKEN;
}
getProcessedTextArray(textArray, inputType, prefixForPassage, prefixForQuery) {
if (typeof textArray == "string" && (textArray = [textArray]), inputType.toLowerCase() === "passage")
textArray = textArray.map((text) => prefixForPassage + text);
else if (inputType.toLowerCase() === "query")
textArray = textArray.map((text) => prefixForQuery + text);
else
throw new Error("Invalid input type");
return textArray;
}
};
 
// src-copilot/LocalVecDB/embeddings/OpenAIEmbeddingGenerator.js
var createOpenAI, embedMany, OpenAIEmbeddingGenerator = class extends EmbeddingGeneratorBase {
constructor() {
super("text-embedding-3-small", 0.02, 64);
}
async generateEmbedding(app, textArray, inputType) {
createOpenAI || (createOpenAI = (await dynamic_import_esm_default("@ai-sdk/openai")).createOpenAI), embedMany || (embedMany = (await dynamic_import_esm_default("ai")).embedMany), textArray = this.getProcessedTextArray(
textArray,
inputType,
"",
""
);
let { embeddings } = await embedMany({
model: createOpenAI({
apiKey: app.settings[EMBEDDING_API_KEY_SETTING]
}).embedding(this.MODEL_NAME),
values: textArray
});
return embeddings;
}
};
 
// src-copilot/LocalVecDB/embeddings/LocalEmbeddingGenerator.js
init_process();
var import_easy_web_worker = __toESM(require_bundle(), 1);
var LocalEmbeddingGenerator = class extends EmbeddingGeneratorBase {
constructor() {
super("Snowflake/snowflake-arctic-embed-s", 0, 1);
}
async generateEmbedding(app, textArray, inputType) {
let embeddings;
return await scheduler.postTask(async () => {
await LocalEmbeddingGeneratorInner.initLocalEmbeddingWorker(), textArray = this.getProcessedTextArray(
textArray,
inputType,
"",
"Represent this sentence for searching relevant passages: "
), embeddings = await Promise.all(textArray.map((text) => LocalEmbeddingGeneratorInner.generateEmbeddingUsingLocal(text, inputType)));
}, { priority: "user-visible" }), embeddings;
}
async isWebGpuAvailable() {
try {
window.gpuAdapter == null && navigator.gpu && (window.gpuAdapter = await navigator.gpu.requestAdapter() || !1);
} catch {
}
return window.gpuAdapter !== !1 && window.gpuAdapter !== null && window.gpuAdapter !== void 0 && window.gpuAdapter.features.has("shader-f16");
}
}, _LocalEmbeddingGeneratorInner = class _LocalEmbeddingGeneratorInner {
static async initLocalEmbeddingWorker() {
if (window.Worker && !_LocalEmbeddingGeneratorInner.generateEmbeddingWorker) {
let embeddingGenerator = new LocalEmbeddingGenerator();
_LocalEmbeddingGeneratorInner.generateEmbeddingWorker = await (0, import_easy_web_worker.createEasyWebWorker)(generateEmbeddingWorkerSource, {
keepAlive: !1,
maxWorkers: embeddingGenerator.MAX_CONCURRENCY,
terminationDelay: 3e4
}), await _LocalEmbeddingGeneratorInner.generateEmbeddingUsingLocal("test", "query");
}
}
static async generateEmbeddingUsingLocal(text, inputType) {
let inputText = inputType === "query" ? "Represent this sentence for searching relevant passages: " + text : text, embeddingGenerator = new LocalEmbeddingGenerator();
return window.Worker ? (_LocalEmbeddingGeneratorInner.generateEmbeddingWorker || await _LocalEmbeddingGeneratorInner.initLocalEmbeddingWorker(), await _LocalEmbeddingGeneratorInner.generateEmbeddingWorker.send({ inputText, model: embeddingGenerator.MODEL_NAME, webGpuAvailable: await embeddingGenerator.isWebGpuAvailable() })) : new Promise((resolve, reject) => {
generateEmbeddingWorkerSource({ onMessage: async (onMessageHandler) => {
onMessageHandler({
payload: { inputText, model: embeddingGenerator.MODEL_NAME },
reject,
resolve
});
} });
});
}
};
__publicField(_LocalEmbeddingGeneratorInner, "generateEmbeddingWorker", null);
var LocalEmbeddingGeneratorInner = _LocalEmbeddingGeneratorInner, generateEmbeddingWorkerSource = ({ onMessage }) => {
let pipeline, embeddingPipe, mutex, tid, generateEmbedding = async (inputText, opts) => {
tid || (tid = Math.random().toString(36).substring(7)), mutex || (mutex = new (await import("https://cdn.jsdelivr.net/npm/async-mutex@0.5.0/+esm")).Mutex());
let release = await mutex.acquire();
pipeline || (pipeline = (await import("https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.4.0/+esm")).pipeline), embeddingPipe || (opts.webGpuAvailable ? embeddingPipe = await pipeline("feature-extraction", opts.model, {
dtype: "fp16",
device: "webgpu"
}) : embeddingPipe = await pipeline("feature-extraction", opts.model, {
dtype: "q8",
device: "wasm"
}));
let output = await embeddingPipe(inputText, {
pooling: "cls",
normalize: !0
});
return release(), Array.from(output.data);
};
onMessage(async (message) => {
let { payload } = message, { inputText, model, webGpuAvailable } = payload;
try {
let result = await generateEmbedding(inputText, { model, webGpuAvailable });
message.resolve(result);
} catch (e) {
message.reject(e);
}
});
};
 
// src-copilot/LocalVecDB/embeddings/FireworksEmbeddingGenerator.js
init_process();
var createFireworks, embedMany2, FireworksEmbeddingGenerator = class extends EmbeddingGeneratorBase {
constructor() {
super("nomic-ai/nomic-embed-text-v1.5", 8e-3, 64);
}
async generateEmbedding(app, textArray, inputType) {
createFireworks || (createFireworks = (await dynamic_import_esm_default("@ai-sdk/fireworks")).createFireworks), embedMany2 || (embedMany2 = (await dynamic_import_esm_default("ai")).embedMany), textArray = this.getProcessedTextArray(
textArray,
inputType,
"search_query: ",
"search_query: "
);
let { embeddings } = await embedMany2({
model: createFireworks({
apiKey: app.settings[EMBEDDING_API_KEY_SETTING]
}).textEmbeddingModel(this.MODEL_NAME),
values: textArray
});
return embeddings;
}
};
 
// src-copilot/LocalVecDB/embeddings/OllamaEmbeddingGenerator.js
init_process();
var OllamaEmbeddingGenerator = class extends EmbeddingGeneratorBase {
constructor() {
super("Snowflake/snowflake-arctic-embed-s", 0, 1);
}
async generateEmbedding(app, textArray, inputType) {
let textArrayMod = this.getProcessedTextArray(
textArray,
inputType,
"",
"Represent this sentence for searching relevant passages: "
), { createOllama } = await dynamic_import_esm_default("ollama-ai-provider"), embeddingModel = createOllama({
basePath: app.settings[EMBEDDING_API_URL_SETTING]
}).embedding("snowflake-arctic-embed:33m-s-fp16", { truncate: !0 }), embeddings = [];
for (let i = 0; i < textArrayMod.length; i++) {
let originalText = textArrayMod[i];
for (let attempts = 1; ; attempts++)
try {
embeddings.push((await embeddingModel.doEmbed({
values: [textArrayMod[i]]
})).embeddings[0]);
break;
} catch (e) {
if (attempts === 6) throw e;
attempts >= 3 && console.log("Failed to embed text, retrying...", originalText);
let currentLength = textArrayMod[i].length;
textArrayMod[i] = textArrayMod[i].substring(0, Math.floor(currentLength * 0.75));
}
}
return embeddings;
}
};
 
// src-copilot/LocalVecDB/embeddings/PineconeEmbeddingGenerator.js
init_process();
var PineconeEmbeddingGenerator = class extends EmbeddingGeneratorBase {
constructor() {
super("multilingual-e5-large", 0, 64);
}
async generateEmbedding(app, textArray, inputType) {
return textArray = this.getProcessedTextArray(textArray, inputType, "", ""), (await this._fetchWithRetry(app, textArray, inputType)).map((embedding) => embedding.values);
}
async _fetchWithRetry(app, textArray, inputType) {
var _a, _b;
try {
return await this._fetchEmbedding(app, textArray, inputType);
} catch (e) {
if ((_a = e.message) != null && _a.includes("rate limit") || (_b = e.message) != null && _b.includes("failed to reach Pinecone"))
return console.warn("Pinecone embedding rate limit error detected. Waiting for 60 seconds...", e), await this._handleRateLimit(), await this._fetchEmbedding(app, textArray, inputType);
throw e;
}
}
async _fetchEmbedding(app, textArray, inputType) {
let res = await fetch("https://api.pinecone.io/embed", {
headers: {
accept: "*/*",
"api-key": app.settings[EMBEDDING_API_KEY_SETTING],
"content-type": "application/json",
"x-pinecone-api-version": "2024-10"
},
body: JSON.stringify({
model: this.MODEL_NAME,
inputs: textArray.map((input) => ({ text: input })),
parameters: {
input_type: inputType.toLowerCase(),
truncate: "END"
}
}),
method: "POST"
});
if (!res.ok) {
let text = await res.text();
throw new Error(text);
}
return (await res.json()).data;
}
async _handleRateLimit() {
await new Promise((resolve) => setTimeout(resolve, 6e4));
}
};
 
// src-copilot/LocalVecDB/embeddings/GoogleEmbeddingGenerator.js
init_process();
var createGoogleGenerativeAI, embedMany3, GoogleEmbeddingGenerator = class extends EmbeddingGeneratorBase {
constructor() {
super("text-embedding-004", 0, 64);
}
async generateEmbedding(app, textArray, inputType) {
createGoogleGenerativeAI || (createGoogleGenerativeAI = (await dynamic_import_esm_default("@ai-sdk/google")).createGoogleGenerativeAI), embedMany3 || (embedMany3 = (await dynamic_import_esm_default("ai")).embedMany), textArray = this.getProcessedTextArray(
textArray,
inputType,
"",
""
);
let { embeddings } = await embedMany3({
model: createGoogleGenerativeAI({
apiKey: app.settings[EMBEDDING_API_KEY_SETTING]
}).textEmbeddingModel(this.MODEL_NAME),
values: textArray
});
return embeddings;
}
};
 
// src-copilot/LocalVecDB/embeddings/EmbeddingGeneratorFactory.js
var EmbeddingGeneratorFactory = class {
static async create(app) {
let embeddingProviderName = getEmbeddingProviderName(app);
switch (embeddingProviderName) {
case "openai":
return new OpenAIEmbeddingGenerator();
case "fireworks":
return new FireworksEmbeddingGenerator();
case "ollama":
return new OllamaEmbeddingGenerator();
case "pinecone":
return new PineconeEmbeddingGenerator();
case "google":
return new GoogleEmbeddingGenerator();
case "local":
return new LocalEmbeddingGenerator();
}
throw new Error(`Embedding provider ${embeddingProviderName} not supported.`);
}
};
 
// src-copilot/LocalVecDB/syncNotes.js
var syncNotes = async (app, sendMessageToEmbed) => {
let performanceStartTime = performance.now(), indexedDBManager = new IndexedDBManager(), embeddingProviderName = getEmbeddingProviderName(app), embeddingGenerator = await EmbeddingGeneratorFactory.create(app), lastSyncTime = await indexedDBManager.getConfigValue("lastSyncTime") || (/* @__PURE__ */ new Date(0)).toISOString(), lastPluginUUID = await indexedDBManager.getConfigValue("lastPluginUUID"), lastEmbeddingModel = await indexedDBManager.getConfigValue("lastEmbeddingModel");
lastPluginUUID !== app.context.pluginUUID && (await indexedDBManager.resetDB(), lastSyncTime = (/* @__PURE__ */ new Date(0)).toISOString()), lastEmbeddingModel !== embeddingGenerator.MODEL_NAME && (await indexedDBManager.resetDB(), lastSyncTime = (/* @__PURE__ */ new Date(0)).toISOString());
let targetNotes = (await app.filterNotes({})).filter((note) => {
try {
let parsedCreatedAt = new Date(note.created || note.createdAt), parsedUpdatedAt = new Date(note.updated || note.updatedAt), parsedLastSyncTime = new Date(lastSyncTime);
return parsedCreatedAt == null || parsedUpdatedAt == null ? !0 : parsedUpdatedAt > parsedLastSyncTime || parsedCreatedAt > parsedLastSyncTime;
} catch {
return !0;
}
}).sort((a, b) => {
try {
let aParsedUpdatedAt = new Date(a.updated || a.updatedAt), bParsedUpdatedAt = new Date(b.updated || b.updatedAt);
return aParsedUpdatedAt.toISOString() !== bParsedUpdatedAt.toISOString() ? aParsedUpdatedAt - bParsedUpdatedAt : a.uuid.localeCompare(b.uuid);
} catch {
return -1;
}
}), records = [];
await scheduler.postTask(async () => {
for (let [index, note] of targetNotes.entries()) {
(index % 20 === 0 || index === targetNotes.length - 1) && sendMessageToEmbed(app, "syncNotesProgress", `Scanning notes to sync: ${index}/${targetNotes.length}`), index !== 0 && index % 100 === 0 && await new Promise((resolve) => setTimeout(resolve, 2e3));
let splitResultForNote = await new Splitter(507).splitNote(app, note);
records.push(...splitResultForNote);
}
}, { priority: "user-visible" }), await new Promise((resolve) => setTimeout(resolve, 120));
let cost = await embeddingGenerator.getEmbeddingCost(app, records.length);
if (cost > 0 && (sendMessageToEmbed(app, "syncNotesProgress", "Waiting for user confirmation..."), !await app.prompt(`The sync operation will cost $${cost} approximately. Do you want to continue?`, {
inputs: []
})))
return !1;
await indexedDBManager.deleteNoteEmbeddingByNoteUUIDList(records.map((record) => record.metadata.noteUUID));
let chunkSize = embeddingGenerator.MAX_CONCURRENCY, recordsChunks = chunk_default(records, chunkSize);
for (let recordChunk of recordsChunks) {
let currentChunkIndex = recordsChunks.findIndex((chunk2) => chunk2 === recordChunk), remainingChunks = recordsChunks.slice(currentChunkIndex), remainingNotes = new Set(
remainingChunks.flatMap(
(chunk2) => chunk2.map((record) => record.metadata.noteUUID)
)
).size, totalNotes = new Set(records.map((record) => record.metadata.noteUUID)).size, embedMessage = `Using ${embeddingProviderName} embedding${embeddingProviderName === "local" ? ` with ${await embeddingGenerator.isWebGpuAvailable() ? "gpu" : "cpu"}` : ""}: ${totalNotes - remainingNotes} / ${totalNotes}`;
sendMessageToEmbed(app, "syncNotesProgress", embedMessage + (embeddingProviderName === "local" ? '<br /><small style="opacity: 0.8;">(\u{1F4A1} Enter embedding api url and key in plugin settings for faster sync)</small>' : "")), (await embeddingGenerator.generateEmbedding(
app,
recordChunk.map((record) => record.metadata.noteContentPart),
"passage"
)).forEach((embedding, index) => {
recordChunk[index].values = embedding;
}), await indexedDBManager.putMultipleNoteEmbedding(recordChunk);
try {
let note = targetNotes[targetNotes.findIndex((n) => n.uuid === recordChunk[recordChunk.length - 1].metadata.noteUUID)], parsedUpdatedAt = new Date(note.updated || note.updatedAt);
parsedUpdatedAt.setSeconds(parsedUpdatedAt.getSeconds() - 1), await indexedDBManager.setConfigValue("lastSyncTime", parsedUpdatedAt.toISOString());
} catch {
}
await indexedDBManager.setConfigValue("lastPluginUUID", app.context.pluginUUID), await indexedDBManager.setConfigValue("lastEmbeddingModel", embeddingGenerator.MODEL_NAME);
}
return await indexedDBManager.setConfigValue("lastSyncTime", (/* @__PURE__ */ new Date()).toISOString()), await indexedDBManager.setConfigValue("lastPluginUUID", app.context.pluginUUID), await indexedDBManager.setConfigValue("lastEmbeddingModel", embeddingGenerator.MODEL_NAME), await indexedDBManager.closeDB(), console.log("syncNotes perf:", performance.now() - performanceStartTime, ", note count:", records.length), app.alert("Sync completed!"), !0;
};
 
// src-copilot/LocalVecDB/searchNotes.js
init_process();
 
// src-copilot/LocalVecDB/getSyncState.js
init_process();
var getSyncState = async (app) => {
let indexedDBManager = new IndexedDBManager(), lastPluginUUID = await indexedDBManager.getConfigValue("lastPluginUUID"), lastEmbeddingModel = await indexedDBManager.getConfigValue("lastEmbeddingModel"), embeddingGenerator = await EmbeddingGeneratorFactory.create(app);
if (lastPluginUUID !== app.context.pluginUUID || lastEmbeddingModel !== embeddingGenerator.MODEL_NAME)
return await indexedDBManager.closeDB(), "Not synced";
if ((await indexedDBManager.getUniqueNoteUUIDsInNoteEmbeddings()).size === 0)
return await indexedDBManager.closeDB(), "Not synced";
let allNotes = await app.filterNotes({}), lastSyncTime = await indexedDBManager.getConfigValue("lastSyncTime") || (/* @__PURE__ */ new Date(0)).toISOString(), targetNotes = allNotes.filter((note) => {
try {
let parsedCreatedAt = new Date(note.created || note.createdAt), parsedUpdatedAt = new Date(note.updated || note.updatedAt), parsedLastSyncTime = new Date(lastSyncTime);
return parsedCreatedAt == null || parsedUpdatedAt == null ? !0 : parsedUpdatedAt > parsedLastSyncTime || parsedCreatedAt > parsedLastSyncTime;
} catch {
return !0;
}
});
return await indexedDBManager.closeDB(), targetNotes.length >= allNotes.length / 4 ? "Not synced" : targetNotes.length === 0 ? "Fully Synced" : "Partially synced";
};
 
// src-copilot/LocalVecDB/utils/getCosineSimilarity.js
init_process();
var getCosineSimilarity = (vecA, vecB) => {
if (vecA.length !== vecB.length)
throw new Error("Cannot calculated cosine similarity as vector are of different size");
let dotProduct = vecA.reduce((sum, val, index) => sum + val * vecB[index], 0), magnitudeA = Math.sqrt(vecA.reduce((sum, val) => sum + val * val, 0)), magnitudeB = Math.sqrt(vecB.reduce((sum, val) => sum + val * val, 0)), denominator = magnitudeA * magnitudeB;
return denominator === 0 ? 0 : dotProduct / denominator;
};
 
// src-copilot/LocalVecDB/searchNotes.js
var searchNotes = async (app, queryText, {
limit = 256,
isArchived = null,
isSharedByMe = null,
isSharedWithMe = null,
isTaskListNote = null
}) => {
if (await getSyncState(app) === "Not synced")
throw new Error("No syncing has been performed, or the last sync is outdated. Please sync your notes with LocalVecDB.");
if (!queryText || !queryText.trim()) return [];
let indexedDBManager = new IndexedDBManager();
try {
let queryVector = (await (await EmbeddingGeneratorFactory.create(app)).generateEmbedding(app, queryText, "query"))[0], similarities = (await indexedDBManager.getAllNotesEmbeddings()).filter((entry) => !(isArchived !== null && !entry.metadata.isArchived === isArchived || isSharedByMe !== null && !entry.metadata.isSharedByMe === isSharedByMe || isSharedWithMe !== null && !entry.metadata.isSharedWithMe === isSharedWithMe || isTaskListNote !== null && !entry.metadata.isTaskListNote === isTaskListNote)).map((entry) => {
let score = getCosineSimilarity(queryVector, entry.values);
return { ...entry, score };
});
return similarities.sort((a, b) => b.score - a.score), await indexedDBManager.closeDB(), similarities.slice(0, limit);
} catch (e) {
throw new Error(`Error querying vectors: ${e}`);
}
};
 
// src-copilot/LocalVecDB/searchHelpCenter.js
init_process();
var searchHelpCenter = async (app, queryText, { limit = 256 }) => {
if (!queryText || !queryText.trim()) return [];
let indexedDBManager = new IndexedDBManager();
try {
let queryVector = (await (await EmbeddingGeneratorFactory.create(app)).generateEmbedding(app, queryText, "query"))[0], similarities = (await indexedDBManager.getAllHelpCenterEmbeddings()).map((entry) => {
let score = getCosineSimilarity(queryVector, entry.values);
return { ...entry, score };
});
return similarities.sort((a, b) => b.score - a.score), await indexedDBManager.closeDB(), similarities.slice(0, limit);
} catch (e) {
throw new Error(`Error querying vectors: ${e}`);
}
};
 
// src-copilot/LocalVecDB/loadHelpCenterEmbeddings.js
init_process();
var loadHelpCenterEmbeddings = async (app) => {
let embeddingProviderName = getEmbeddingProviderName(app), indexedDBManager = new IndexedDBManager(), allHelpCenterEmbeddings = await indexedDBManager.getAllHelpCenterEmbeddings(), lastLoadHelpCenterEmbeddingProvider = await indexedDBManager.getConfigValue("lastLoadHelpCenterEmbeddingProvider");
if (lastLoadHelpCenterEmbeddingProvider && lastLoadHelpCenterEmbeddingProvider === embeddingProviderName && allHelpCenterEmbeddings.length > 0)
return;
let jsonFileName;
if (embeddingProviderName === "local" || embeddingProviderName === "ollama")
jsonFileName = "localHelpCenterEmbeddings.json.gz";
else if (embeddingProviderName === "openai")
jsonFileName = "openaiHelpCenterEmbeddings.json.gz";
else if (embeddingProviderName === "google")
jsonFileName = "googleHelpCenterEmbeddings.json.gz";
else if (embeddingProviderName === "fireworks")
jsonFileName = "fireworksHelpCenterEmbeddings.json.gz";
else if (embeddingProviderName === "pinecone")
jsonFileName = "pineconeHelpCenterEmbeddings.json.gz";
else throw new Error(`Embedding provider ${embeddingProviderName} not supported`);
let file = await dynamicImportExternalPluginBundle(jsonFileName, { isESM: !1 }), fflate = await dynamic_import_esm_default("fflate"), fileContent = new TextDecoder().decode(fflate.decompressSync(file)), helpCenterEmbeddings = JSON.parse(fileContent);
await indexedDBManager.clearHelpCenterEmbeddings(), await indexedDBManager.putMultipleHelpCenterEmbeddings(helpCenterEmbeddings), await indexedDBManager.setConfigValue("lastLoadHelpCenterEmbeddingProvider", embeddingProviderName), await indexedDBManager.closeDB();
};
 
// src-copilot/LocalVecDB/LocalVecDB.js
var LocalVecDB = class {
async searchNotes(app, query, opts) {
return await searchNotes(app, query, opts);
}
async syncNotes(app, sendMessageToEmbed) {
await syncNotes(app, sendMessageToEmbed);
}
async getSyncState(app) {
return await getSyncState(app);
}
async searchHelpCenter(app, query, opts) {
return await searchHelpCenter(app, query, opts);
}
async loadHelpCenterEmbeddings(app) {
return await loadHelpCenterEmbeddings(app);
}
};
 
// src-copilot/utils/getMatchedPartWithFuzzySearch.jsx
init_process();
var getMatchedPartWithFuzzySearch = async (app, noteUUID, searchText, limit = 1) => {
let Fuse = (await dynamic_import_esm_default("fuse.js")).default, splitter = new Splitter(507), note = await app.findNote({ uuid: noteUUID }), splitResult = await splitter.splitNote(app, note, !0);
return new Fuse(splitResult, { keys: ["metadata.noteContentPart"], threshold: 0.4 }).search(searchText, { limit }).map((result) => result.item.metadata.noteContentPart);
};
 
// src-copilot/validatePluginSettings.js
init_process();
async function validatePluginSettings(app) {
let errors = [], settings = app.settings;
settings[LLM_API_URL_SETTING] || errors.push("LLM API URL must be provided.");
let isLLMApiUrlValid = !1;
try {
new URL(settings[LLM_API_URL_SETTING]), isLLMApiUrlValid = !0;
} catch {
errors.push("LLM API URL provided is not a valid URL.");
}
!settings[LLM_API_KEY_SETTING] && !settings[LLM_API_URL_SETTING].includes("localhost") && errors.push("LLM API Key must be provided."), settings[LLM_API_URL_SETTING].trim() || errors.push("LLM API URL cannot be empty.");
try {
isLLMApiUrlValid && await getLLMModel(app.settings);
} catch (e) {
errors.push(e.message);
}
if (settings[EMBEDDING_API_URL_SETTING].trim()) {
let isEmbeddingUrlValid = !1;
try {
new URL(settings[EMBEDDING_API_URL_SETTING]), isEmbeddingUrlValid = !0;
} catch {
errors.push("Embedding API URL provided is not a valid URL.");
}
!settings[EMBEDDING_API_KEY_SETTING] && !settings[EMBEDDING_API_URL_SETTING].includes("localhost") && errors.push("Embedding API Key must be provided when Embedding API URL is provided.");
try {
isEmbeddingUrlValid && await EmbeddingGeneratorFactory.create(app);
} catch (e) {
errors.push(e.message);
}
}
return settings[EMBEDDING_API_KEY_SETTING].trim() && !settings[EMBEDDING_API_URL_SETTING].trim() && errors.push("Embedding API URL cannot be empty when Embedding API Key is provided."), errors;
}
 
// src-copilot/plugin.js
var plugin = {
currentNoteUUID: null,
validateSettings: async function(app) {
try {
return await validatePluginSettings(app);
} catch (e) {
console.error(e);
}
},
insertText: {
Continue: async function(app) {
try {
let randomUUID = Math.random().toString(36).substring(7);
await app.context.replaceSelection(`${randomUUID}`);
let noteContent = `----
note-title: ${(await app.notes.find(app.context.noteUUID)).name}
----
 
` + await app.getNoteContent({ uuid: app.context.noteUUID }), nearbyContent = noteContent.substring(noteContent.indexOf(randomUUID) - 800, noteContent.indexOf(randomUUID) + 800);
await app.context.replaceSelection("Generating...");
let prompt = `I want you to act as a fill in the mask tool. You take markdown input text and complete it factually. Only reply with words that should replace [MASK]. NEVER repeat input.
Additional instruction: If the surrounding text is in between a sentence, complete the entire sentence. Otherwise, complete the paragraph. DO NOT repeat the input text.
Examples:
Input:The [MASK] jumps over the lazy dog.
Output:quick brown fox
Input:The quick brown fox jumps[MASK]
Output: over the lazy dog.
Input:On the way, we caught sight of the famous waterfall. [MASK]
Output:A rainbow formed in the mist as we stood there. The sight was truly captivating.
---------------------
Input:
` + nearbyContent.replaceAll(randomUUID, "[MASK]"), response = await generateText(await getLLMModel(app.settings), prompt);
if (response.text) {
let responseText = response.text;
responseText.startsWith("Output:") && !(nearbyContent.toLowerCase().includes("input") || nearbyContent.toLowerCase().includes("output")) && (responseText = responseText.substring(6));
let lastCharInOriginalContent = nearbyContent.substring(noteContent.indexOf(randomUUID) - 1), firstCharInResponse = responseText.substring(0, 1);
lastCharInOriginalContent === firstCharInResponse && firstCharInResponse === " " && (responseText = responseText.substring(1)), await app.context.replaceSelection(responseText);
} else
throw new Error("LLM response is empty");
} catch (e) {
console.error(e), await app.alert(e);
}
},
"Generate text": async function(app) {
try {
let instructions = await app.prompt("Enter text generation instructions:");
if (!instructions) return;
let prompt = `I want you to generate markdown text based on the following instructions. Do not reply anything other than the generated text on provided topic. Instructions:
` + instructions.trim() + `
`, response = await generateText(await getLLMModel(app.settings), prompt);
if (response.text)
await app.context.replaceSelection(response.text);
else
throw new Error("LLM response is empty");
} catch (e) {
console.error(e), await app.alert(e);
}
},
"Generate image": {
check: async function(app, image) {
try {
if (app.settings[LLM_API_URL_SETTING].trim() !== "")
return !!await getImageModel(app.settings);
} catch (e) {
console.error(e);
}
return !1;
},
run: async function(app) {
try {
let imageModel = await getImageModel(app.settings), [prompt, size] = await app.prompt("", {
inputs: [
{ label: "Image generation instructions:", type: "text", value: "" },
{ label: "Image size:", type: "select", options: [
{ label: "512x512", value: "512" },
{ label: "1024x1024", value: "1024" }
], value: "512" }
]
}), response = await generateImage(imageModel, prompt, size);
if (console.log("response", response), response.image) {
let imgUrl = await app.attachNoteMedia({ uuid: app.context.noteUUID }, "data:image/webp;base64," + response.image.base64);
await app.context.replaceSelection(`![](${imgUrl})`);
} else
throw new Error("LLM response is empty");
} catch (e) {
console.error(e), await app.alert(e);
}
}
}
},
appOption: {
"Search notes using natural language": async function(app) {
try {
await app.openSidebarEmbed(1, { trigger: "appOption", openSearch: !0 });
} catch (e) {
console.error(e), await app.alert(e);
}
},
"Sync notes with LocalVecDB": async function(app) {
try {
await plugin.sendMessageToEmbed(app, "startSyncToLocalVecDBInSearchInterface", !0), await app.openSidebarEmbed(1, { trigger: "appOption", openSearch: !0 });
} catch (e) {
console.error(e), await app.alert(e);
}
},
"Chat with Copilot": async function(app) {
try {
await app.openSidebarEmbed(1, { trigger: "appOption", openChat: !0 });
} catch (e) {
console.error(e), await app.alert(e);
}
}
},
replaceText: {
Edit: async function(app, selectionContent) {
try {
let instructions = await app.prompt("Enter edit instructions:");
if (!instructions) return;
let prompt = `I want you to edit the following text based on the following instructions. You can use markdown. DO not reply anything other than the edited text. Instructions:
` + instructions.trim() + `
---------------------
Input:
` + selectionContent.trim(), response = await generateText(await getLLMModel(app.settings), prompt);
if (response.text)
await app.context.replaceSelection(response.text);
else
throw new Error("LLM response is empty");
} catch (e) {
console.error(e), await app.alert(e);
}
},
"Chat with selection": {
check: async function(app, selectionContent) {
return !await plugin.isEmbedOpen(app);
},
run: async function(app, selectionContent) {
var _a;
await app.openSidebarEmbed(1, { openChat: !0 }), await plugin.sendMessageToEmbed(
app,
"attachments",
{ type: "selection", noteUUID: (_a = app == null ? void 0 : app.context) == null ? void 0 : _a.noteUUID, selectionContent }
);
}
},
"Add selection to chat": {
check: async function(app, selectionContent) {
return await plugin.isEmbedOpen(app);
},
run: async function(app, selectionContent) {
var _a;
await plugin.sendMessageToEmbed(
app,
"attachments",
{ type: "selection", noteUUID: (_a = app == null ? void 0 : app.context) == null ? void 0 : _a.noteUUID, selectionContent }
);
}
},
"Refine selection": async function(app, selectionContent) {
try {
let promptPrefix = await app.prompt("", {
inputs: [
{ label: "Enter prompt type:", type: "select", options: [
{ icon: "summarize", label: "Rephrase", value: "Rephrase the following selected text:" },
{ icon: "unfold_more", label: "Shorten", value: "Shorten the following selected text:" },
{ icon: "unfold_less", label: "Elaborate", value: "Elaborate the following selected text:" },
{ icon: "work", label: "More formal", value: "Make the following selected text more formal:" },
{ icon: "beach_access", label: "More casual", value: "Make the following selected text more casual:" },
{ icon: "healing", label: "Fix grammar", value: "Rectify grammar and spelling in the following selected text:" },
{ icon: "edit", label: "Custom", value: "Custom" }
], value: "Rephrase the following selected text:" }
]
});
if (!promptPrefix || promptPrefix === "Custom" && (promptPrefix = await app.prompt("Enter custom prompt:"), promptPrefix += `
Selected text`, !promptPrefix))
return;
let prompt = `Only respond with the text that should replace the selection. Do not reply anything other than the edited text.
${promptPrefix}:
` + selectionContent, response = await generateText(await getLLMModel(app.settings), prompt);
if (response.text)
await app.alert(response.text, {
preface: "Copilot response:",
actions: [
{ label: "Replace", value: "replace", icon: "edit" }
]
}) === "replace" && await app.replaceNoteContent({ uuid: app.context.noteUUID }, response.text);
else
throw new Error("LLM response is empty");
} catch (e) {
console.error(e), await app.alert(e);
}
}
},
noteOption: {
Chat: {
check: async function(app) {
return !await plugin.isEmbedOpen(app);
},
run: async function(app) {
await app.openSidebarEmbed(1, { openChat: !0 });
}
},
"Chat with note": {
check: async function(app, noteUUID) {
return !await plugin.isEmbedOpen(app);
},
run: async function(app, noteUUID) {
await app.openSidebarEmbed(1, { openChat: !0 });
let note = await app.findNote({ uuid: noteUUID }), noteContent = await app.getNoteContent({ uuid: noteUUID });
await plugin.sendMessageToEmbed(
app,
"attachments",
{ type: "new-chat", message: [] }
), await plugin.sendMessageToEmbed(
app,
"attachments",
{ type: "note", noteUUID, noteTitle: note.name, noteContent }
);
}
},
"Add note to chat": {
check: async function(app, noteUUID) {
return await plugin.isEmbedOpen(app);
},
run: async function(app, noteUUID) {
let note = await app.findNote({ uuid: noteUUID }), noteContent = await app.getNoteContent({ uuid: noteUUID });
await plugin.sendMessageToEmbed(
app,
"attachments",
{ type: "note", noteUUID, noteTitle: note.name, noteContent }
);
}
},
"Related notes": async function(app, noteUUID) {
try {
plugin.sendMessageToEmbed(app, "searchForTextInSearchInterface", `<<Related: ${noteUUID}>>`), await app.openSidebarEmbed(1, { trigger: "appOption", openSearch: !0 });
} catch (e) {
console.error(e), await app.alert(e);
}
}
},
taskOption: {
"Chat with task": {
check: async function(app, taskObj) {
return !await plugin.isEmbedOpen(app);
},
run: async function(app, taskObj) {
await app.openSidebarEmbed(1, { openChat: !0 }), await plugin.sendMessageToEmbed(
app,
"attachments",
{ type: "new-chat", message: [] }
), await plugin.sendMessageToEmbed(
app,
"attachments",
{ type: "task", taskUUID: taskObj.uuid }
);
}
},
"Add task to chat": {
check: async function(app, taskObj) {
return await plugin.isEmbedOpen(app);
},
run: async function(app, taskObj) {
await plugin.sendMessageToEmbed(
app,
"attachments",
{
type: "task",
taskUUID: taskObj.uuid,
taskContent: taskObj.content,
taskStartAt: taskObj.startAt,
taskEndAt: taskObj.endAt,
completedAt: taskObj.completedAt,
dismissedAt: taskObj.dismissedAt,
hideUntil: taskObj.hideUntil,
taskScore: taskObj.score,
important: taskObj.important,
urgent: taskObj.urgent
}
);
}
}
},
imageOption: {
"Chat with image": {
check: async function(app, image) {
return !await plugin.isEmbedOpen(app);
},
run: async function(app, image) {
await app.openSidebarEmbed(1, { openChat: !0 }), await plugin.sendMessageToEmbed(
app,
"attachments",
{ type: "new-chat", message: [] }
), await plugin.sendMessageToEmbed(
app,
"attachments",
{ type: "image", src: image.src }
);
}
},
"Add image to chat": {
check: async function(app, image) {
return await plugin.isEmbedOpen(app);
},
run: async function(app, image) {
await plugin.sendMessageToEmbed(
app,
"attachments",
{ type: "image", src: image.src }
);
}
}
},
renderEmbed: async function(app, args, source = "embed") {
if (args.openChat)
return chat_default;
if (args.openSearch)
return search_default;
},
sendMessageToEmbed: async function(app, channel, message) {
window.messageQueue || (window.messageQueue = {}), window.messageQueue[channel] = window.messageQueue[channel] || [], window.messageQueue[channel].push(message);
},
isEmbedOpen: async function(app) {
return window.lastHeartbeatFromChatEmbed && window.lastHeartbeatFromChatEmbed > Date.now() - 600;
},
onEmbedCall: createOnEmbedCallHandler({
...COMMON_EMBED_COMMANDS,
ping: async function(app) {
return window.lastHeartbeatFromChatEmbed = Date.now(), !0;
},
receiveMessageFromPlugin: async function(app, channel) {
return window.messageQueue && window.messageQueue[channel] && window.messageQueue[channel].length > 0 ? window.messageQueue[channel].shift() : null;
},
getUserCurrentNoteData: async (app) => {
try {
let currentNoteUUID = app.context.noteUUID;
if (!currentNoteUUID) {
let currentURL = app.context.url, regex = /amplenote\.com\/notes\/([a-f0-9-]+)/, matches = currentURL.match(regex);
matches && matches.length > 1 && (currentNoteUUID = matches[1]);
}
if (!currentNoteUUID) return { currentNoteUUID: null };
let currentNote = await app.findNote({ uuid: currentNoteUUID });
return currentNote ? { currentNoteUUID: currentNote.uuid, currentNoteName: currentNote.name } : { currentNoteUUID: null };
} catch (e) {
throw "Failed getUserCurrentNoteData - " + e;
}
},
getUserDailyJotNote: async function(app) {
try {
let dailyJotNote = await app.notes.dailyJot(Math.floor(Date.now() / 1e3));
return {
dailyJotNoteUUID: (await dailyJotNote.url()).split("/").pop(),
dailyJotNoteName: dailyJotNote.name
};
} catch (e) {
throw "Failed getUserDailyJotNote - " + e;
}
},
getLocalVecDBSyncState: async function(app) {
return await new LocalVecDB().getSyncState(app);
},
syncNotesWithLocalVecDB: async function(app) {
await new LocalVecDB().syncNotes(app, plugin.sendMessageToEmbed);
},
searchNotesInLocalVecDB: async function(app, queryText, opts) {
return await new LocalVecDB().searchNotes(app, queryText, opts);
},
searchHelpCenter: async function(app, queryText, opts) {
return await new LocalVecDB().loadHelpCenterEmbeddings(app), await new LocalVecDB().searchHelpCenter(app, queryText, opts);
},
getMatchedPartWithFuzzySearch: async function(app, noteUUID, searchText, limit) {
return await getMatchedPartWithFuzzySearch(app, noteUUID, searchText, limit);
}
}, [
"getUserCurrentNoteData",
"getUserDailyJotNote",
"receiveMessageFromPlugin",
"ping"
])
}, plugin_default = plugin;
return plugin;
})()
//# sourceMappingURL=plugin.js.map
 

linkChangelog

30/10/2024: Alpha v0.0.1 release

27/12/2024: Beta v0.1.0 release

27/12/2024: Beta v0.1.1 release

10/01/2024: Beta v0.2.0 release

03/03/2025: Beta v0.3.0 release

12/04/2025: Beta v0.4.0 release