picocode 0.9.196 → 0.9.198

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/daemon.js ADDED
@@ -0,0 +1,141 @@
1
+ // src/daemon.js
2
+ import { dirname } from "node:path";
3
+ import { serveDaemon, daemonPaths } from "picocode-core/daemon-transport.js";
4
+
5
+ // src/daemon-session.js
6
+ import { buildProjectBoot } from "picocode-core/boot.js";
7
+ import { createController } from "picocode-core/controller.js";
8
+ import { createShellManager } from "picocode-core/shells.js";
9
+ import { createWakeupManager } from "picocode-core/wakeups.js";
10
+ import { createGitService } from "picocode-core/git.js";
11
+ import { readConfig } from "picocode-core/config.js";
12
+ import { defaultModel as defaultModel2 } from "picocode-core/models.js";
13
+
14
+ // src/model-runtime.js
15
+ import { discoverKeys, applyKeys, keyHint } from "picocode-core/keys.js";
16
+ import { loadCatalog, extractModels, adhocModel } from "picocode-core/catalog.js";
17
+ import { loadCodexModels } from "picocode-core/codex-models.js";
18
+ import { loadOpenRouterModels } from "picocode-core/openrouter-models.js";
19
+ import { openaiConnected, openaiCredentials } from "picocode-core/openai-auth.js";
20
+ import { defaultModel } from "picocode-core/models.js";
21
+ import { fuzzyScore } from "picocode-core/fuzzy.js";
22
+ var CATALOG_PROVIDERS = ["google", "anthropic", "openai", "xai"];
23
+ function codexContext(catalogData, model) {
24
+ const entry = catalogData.openai?.models?.[model.name.split("/")[1]];
25
+ return model.context ?? entry?.limit?.input ?? entry?.limit?.context ?? null;
26
+ }
27
+ async function buildModels({ providers, force }) {
28
+ const has = (provider) => providers.includes(provider);
29
+ const codexCredentials = has("codex") ? await openaiCredentials().catch(() => null) : null;
30
+ const [catalogData, codex, openrouter] = await Promise.all([
31
+ loadCatalog({ force }),
32
+ loadCodexModels(codexCredentials, { force }),
33
+ has("openrouter") ? loadOpenRouterModels({ force }) : []
34
+ ]);
35
+ return [
36
+ ...extractModels(catalogData, CATALOG_PROVIDERS).map((model) => ({
37
+ ...model,
38
+ available: has(model.provider),
39
+ keyHint: keyHint(model.provider)
40
+ })),
41
+ ...codex.map((model) => ({
42
+ ...model,
43
+ context: codexContext(catalogData, model),
44
+ available: has("codex"),
45
+ keyHint: "/connect"
46
+ })),
47
+ ...openrouter.map((model) => ({ ...model, available: true, keyHint: keyHint("openrouter") }))
48
+ ];
49
+ }
50
+ async function loadModelRuntime() {
51
+ const chatgpt = await openaiConnected();
52
+ const providers = [...applyKeys(discoverKeys()), ...chatgpt ? ["codex"] : []];
53
+ const codexCredentials = chatgpt ? await openaiCredentials().catch(() => null) : null;
54
+ const loadModels = ({ force = false } = {}) => buildModels({ providers, force });
55
+ return { providers, models: await loadModels(), codexCredentials, loadModels };
56
+ }
57
+
58
+ // src/daemon-session.js
59
+ async function createDaemonSession({ cwd = process.cwd(), version, theme, detectedTheme, themePref } = {}) {
60
+ const { models, providers, loadModels } = await loadModelRuntime();
61
+ if (!providers.length) throw new Error("no model credentials found");
62
+ const config = await readConfig();
63
+ const notify = {};
64
+ const shells = createShellManager({ onChange: () => notify.shells?.(), onExit: (shell) => notify.shellExit?.(shell) });
65
+ const wakeups = createWakeupManager({ onChange: () => notify.wakeups?.(), onFire: (wakeup) => notify.wakeupFire?.(wakeup) });
66
+ const git = createGitService({ onChange: () => notify.git?.() });
67
+ const rebuild = (cwd2) => buildProjectBoot(cwd2, { onMcpChange: () => notify.mcp?.() });
68
+ let boot;
69
+ try {
70
+ boot = {
71
+ ...await rebuild(cwd),
72
+ version,
73
+ theme,
74
+ detectedTheme,
75
+ themePref,
76
+ models,
77
+ providers,
78
+ initialModel: models.find((m) => m.name === config.defaultModel && m.available !== false) || defaultModel2(models),
79
+ researchModel: config.models?.researchWorker || null,
80
+ shellModel: config.models?.shell || null,
81
+ participantAModel: config.models?.participantA || null,
82
+ participantBModel: config.models?.participantB || null,
83
+ deliberationModel: config.models?.deliberation || config.models?.researchWorker || null,
84
+ researchAgentLimit: Number.isInteger(config.research?.agentLimit) && config.research.agentLimit >= 1 && config.research.agentLimit <= 100 ? config.research.agentLimit : 10,
85
+ initialEffort: ["low", "medium", "high", "max"].includes(config.defaultEffort) ? config.defaultEffort : null,
86
+ speedDefaults: config.speedDefaults,
87
+ autoCompact: config.autoCompact !== false,
88
+ clouds: config.animation?.clouds === true,
89
+ compactToolHistory: config.display?.compactToolHistory === true,
90
+ gitFooter: config.display?.gitStatus !== false,
91
+ wideSidebar: config.display?.wideSidebar !== false,
92
+ refs: {},
93
+ shells,
94
+ wakeups,
95
+ git,
96
+ rebuild,
97
+ refreshModels: () => loadModels({ force: true }),
98
+ setMcpNotify: (fn) => {
99
+ notify.mcp = fn;
100
+ },
101
+ setGitNotify: (fn) => {
102
+ notify.git = fn;
103
+ },
104
+ setShellsNotify: (fn) => {
105
+ notify.shells = fn;
106
+ },
107
+ setShellsExit: (fn) => {
108
+ notify.shellExit = fn;
109
+ },
110
+ setWakeupsNotify: (fn) => {
111
+ notify.wakeups = fn;
112
+ },
113
+ setWakeupsFire: (fn) => {
114
+ notify.wakeupFire = fn;
115
+ }
116
+ };
117
+ git.retarget(boot.root);
118
+ git.setEnabled(boot.gitFooter);
119
+ const controller = createController({ boot });
120
+ boot.mcp.connectAll();
121
+ return { controller, dispose: () => {
122
+ git.dispose();
123
+ wakeups.cancelAll();
124
+ shells.killAll();
125
+ } };
126
+ } catch (error) {
127
+ git.dispose();
128
+ shells.killAll();
129
+ boot?.mcp.terminateAll();
130
+ throw error;
131
+ }
132
+ }
133
+
134
+ // src/daemon.js
135
+ var socket = process.argv[process.argv.indexOf("--socket") + 1];
136
+ var paths = process.argv.includes("--socket") ? { socket, directory: dirname(socket) } : daemonPaths();
137
+ var daemon = await serveDaemon({ paths, createSession: createDaemonSession, onClose: () => process.exit(0) });
138
+ for (const signal of ["SIGTERM", "SIGINT", "SIGHUP"]) process.on(signal, () => daemon.close().catch(() => process.exit(1)));
139
+ process.on("uncaughtException", () => daemon.close().finally(() => process.exit(1)));
140
+ process.on("unhandledRejection", () => daemon.close().finally(() => process.exit(1)));
141
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2RhZW1vbi5qcyIsICIuLi9zcmMvZGFlbW9uLXNlc3Npb24uanMiLCAiLi4vc3JjL21vZGVsLXJ1bnRpbWUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBzZXJ2ZURhZW1vbiwgZGFlbW9uUGF0aHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2RhZW1vbi10cmFuc3BvcnQuanMnXG5pbXBvcnQgeyBjcmVhdGVEYWVtb25TZXNzaW9uIH0gZnJvbSAnLi9kYWVtb24tc2Vzc2lvbi5qcydcblxuY29uc3Qgc29ja2V0ID0gcHJvY2Vzcy5hcmd2W3Byb2Nlc3MuYXJndi5pbmRleE9mKCctLXNvY2tldCcpICsgMV1cbmNvbnN0IHBhdGhzID0gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLXNvY2tldCcpID8geyBzb2NrZXQsIGRpcmVjdG9yeTogZGlybmFtZShzb2NrZXQpIH0gOiBkYWVtb25QYXRocygpXG5jb25zdCBkYWVtb24gPSBhd2FpdCBzZXJ2ZURhZW1vbih7IHBhdGhzLCBjcmVhdGVTZXNzaW9uOiBjcmVhdGVEYWVtb25TZXNzaW9uLCBvbkNsb3NlOiAoKSA9PiBwcm9jZXNzLmV4aXQoMCkgfSlcbmZvciAoY29uc3Qgc2lnbmFsIG9mIFsnU0lHVEVSTScsICdTSUdJTlQnLCAnU0lHSFVQJ10pIHByb2Nlc3Mub24oc2lnbmFsLCAoKSA9PiBkYWVtb24uY2xvc2UoKS5jYXRjaCgoKSA9PiBwcm9jZXNzLmV4aXQoMSkpKVxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoKSA9PiBkYWVtb24uY2xvc2UoKS5maW5hbGx5KCgpID0+IHByb2Nlc3MuZXhpdCgxKSkpXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCAoKSA9PiBkYWVtb24uY2xvc2UoKS5maW5hbGx5KCgpID0+IHByb2Nlc3MuZXhpdCgxKSkpXG4iLCAiaW1wb3J0IHsgYnVpbGRQcm9qZWN0Qm9vdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYm9vdC5qcydcbmltcG9ydCB7IGNyZWF0ZUNvbnRyb2xsZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbnRyb2xsZXIuanMnXG5pbXBvcnQgeyBjcmVhdGVTaGVsbE1hbmFnZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3NoZWxscy5qcydcbmltcG9ydCB7IGNyZWF0ZVdha2V1cE1hbmFnZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3dha2V1cHMuanMnXG5pbXBvcnQgeyBjcmVhdGVHaXRTZXJ2aWNlIH0gZnJvbSAncGljb2NvZGUtY29yZS9naXQuanMnXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBkZWZhdWx0TW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL21vZGVscy5qcydcbmltcG9ydCB7IGxvYWRNb2RlbFJ1bnRpbWUgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVEYWVtb25TZXNzaW9uKHsgY3dkID0gcHJvY2Vzcy5jd2QoKSwgdmVyc2lvbiwgdGhlbWUsIGRldGVjdGVkVGhlbWUsIHRoZW1lUHJlZiB9ID0ge30pIHtcbiAgY29uc3QgeyBtb2RlbHMsIHByb3ZpZGVycywgbG9hZE1vZGVscyB9ID0gYXdhaXQgbG9hZE1vZGVsUnVudGltZSgpXG4gIGlmICghcHJvdmlkZXJzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdubyBtb2RlbCBjcmVkZW50aWFscyBmb3VuZCcpXG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKVxuICBjb25zdCBub3RpZnkgPSB7fVxuICBjb25zdCBzaGVsbHMgPSBjcmVhdGVTaGVsbE1hbmFnZXIoeyBvbkNoYW5nZTogKCkgPT4gbm90aWZ5LnNoZWxscz8uKCksIG9uRXhpdDogc2hlbGwgPT4gbm90aWZ5LnNoZWxsRXhpdD8uKHNoZWxsKSB9KVxuICBjb25zdCB3YWtldXBzID0gY3JlYXRlV2FrZXVwTWFuYWdlcih7IG9uQ2hhbmdlOiAoKSA9PiBub3RpZnkud2FrZXVwcz8uKCksIG9uRmlyZTogd2FrZXVwID0+IG5vdGlmeS53YWtldXBGaXJlPy4od2FrZXVwKSB9KVxuICBjb25zdCBnaXQgPSBjcmVhdGVHaXRTZXJ2aWNlKHsgb25DaGFuZ2U6ICgpID0+IG5vdGlmeS5naXQ/LigpIH0pXG4gIGNvbnN0IHJlYnVpbGQgPSBjd2QgPT4gYnVpbGRQcm9qZWN0Qm9vdChjd2QsIHsgb25NY3BDaGFuZ2U6ICgpID0+IG5vdGlmeS5tY3A/LigpIH0pXG4gIGxldCBib290XG4gIHRyeSB7XG4gICAgYm9vdCA9IHtcbiAgICAgIC4uLmF3YWl0IHJlYnVpbGQoY3dkKSwgdmVyc2lvbiwgdGhlbWUsIGRldGVjdGVkVGhlbWUsIHRoZW1lUHJlZixcbiAgICAgIG1vZGVscywgcHJvdmlkZXJzLCBpbml0aWFsTW9kZWw6IG1vZGVscy5maW5kKG0gPT4gbS5uYW1lID09PSBjb25maWcuZGVmYXVsdE1vZGVsICYmIG0uYXZhaWxhYmxlICE9PSBmYWxzZSkgfHwgZGVmYXVsdE1vZGVsKG1vZGVscyksXG4gICAgICByZXNlYXJjaE1vZGVsOiBjb25maWcubW9kZWxzPy5yZXNlYXJjaFdvcmtlciB8fCBudWxsLCBzaGVsbE1vZGVsOiBjb25maWcubW9kZWxzPy5zaGVsbCB8fCBudWxsLFxuICAgICAgcGFydGljaXBhbnRBTW9kZWw6IGNvbmZpZy5tb2RlbHM/LnBhcnRpY2lwYW50QSB8fCBudWxsLCBwYXJ0aWNpcGFudEJNb2RlbDogY29uZmlnLm1vZGVscz8ucGFydGljaXBhbnRCIHx8IG51bGwsXG4gICAgICBkZWxpYmVyYXRpb25Nb2RlbDogY29uZmlnLm1vZGVscz8uZGVsaWJlcmF0aW9uIHx8IGNvbmZpZy5tb2RlbHM/LnJlc2VhcmNoV29ya2VyIHx8IG51bGwsXG4gICAgICByZXNlYXJjaEFnZW50TGltaXQ6IE51bWJlci5pc0ludGVnZXIoY29uZmlnLnJlc2VhcmNoPy5hZ2VudExpbWl0KSAmJiBjb25maWcucmVzZWFyY2guYWdlbnRMaW1pdCA+PSAxICYmIGNvbmZpZy5yZXNlYXJjaC5hZ2VudExpbWl0IDw9IDEwMCA/IGNvbmZpZy5yZXNlYXJjaC5hZ2VudExpbWl0IDogMTAsXG4gICAgICBpbml0aWFsRWZmb3J0OiBbJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXS5pbmNsdWRlcyhjb25maWcuZGVmYXVsdEVmZm9ydCkgPyBjb25maWcuZGVmYXVsdEVmZm9ydCA6IG51bGwsIHNwZWVkRGVmYXVsdHM6IGNvbmZpZy5zcGVlZERlZmF1bHRzLFxuICAgICAgYXV0b0NvbXBhY3Q6IGNvbmZpZy5hdXRvQ29tcGFjdCAhPT0gZmFsc2UsIGNsb3VkczogY29uZmlnLmFuaW1hdGlvbj8uY2xvdWRzID09PSB0cnVlLFxuICAgICAgY29tcGFjdFRvb2xIaXN0b3J5OiBjb25maWcuZGlzcGxheT8uY29tcGFjdFRvb2xIaXN0b3J5ID09PSB0cnVlLCBnaXRGb290ZXI6IGNvbmZpZy5kaXNwbGF5Py5naXRTdGF0dXMgIT09IGZhbHNlLFxuICAgICAgd2lkZVNpZGViYXI6IGNvbmZpZy5kaXNwbGF5Py53aWRlU2lkZWJhciAhPT0gZmFsc2UsIHJlZnM6IHt9LCBzaGVsbHMsIHdha2V1cHMsIGdpdCwgcmVidWlsZCxcbiAgICAgIHJlZnJlc2hNb2RlbHM6ICgpID0+IGxvYWRNb2RlbHMoeyBmb3JjZTogdHJ1ZSB9KSxcbiAgICAgIHNldE1jcE5vdGlmeTogZm4gPT4geyBub3RpZnkubWNwID0gZm4gfSwgc2V0R2l0Tm90aWZ5OiBmbiA9PiB7IG5vdGlmeS5naXQgPSBmbiB9LFxuICAgICAgc2V0U2hlbGxzTm90aWZ5OiBmbiA9PiB7IG5vdGlmeS5zaGVsbHMgPSBmbiB9LCBzZXRTaGVsbHNFeGl0OiBmbiA9PiB7IG5vdGlmeS5zaGVsbEV4aXQgPSBmbiB9LFxuICAgICAgc2V0V2FrZXVwc05vdGlmeTogZm4gPT4geyBub3RpZnkud2FrZXVwcyA9IGZuIH0sIHNldFdha2V1cHNGaXJlOiBmbiA9PiB7IG5vdGlmeS53YWtldXBGaXJlID0gZm4gfSxcbiAgICB9XG4gICAgZ2l0LnJldGFyZ2V0KGJvb3Qucm9vdClcbiAgICBnaXQuc2V0RW5hYmxlZChib290LmdpdEZvb3RlcilcbiAgICBjb25zdCBjb250cm9sbGVyID0gY3JlYXRlQ29udHJvbGxlcih7IGJvb3QgfSlcbiAgICBib290Lm1jcC5jb25uZWN0QWxsKClcbiAgICByZXR1cm4geyBjb250cm9sbGVyLCBkaXNwb3NlOiAoKSA9PiB7IGdpdC5kaXNwb3NlKCk7IHdha2V1cHMuY2FuY2VsQWxsKCk7IHNoZWxscy5raWxsQWxsKCkgfSB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7IGdpdC5kaXNwb3NlKCk7IHNoZWxscy5raWxsQWxsKCk7IGJvb3Q/Lm1jcC50ZXJtaW5hdGVBbGwoKTsgdGhyb3cgZXJyb3IgfVxufVxuIiwgImltcG9ydCB7IGRpc2NvdmVyS2V5cywgYXBwbHlLZXlzLCBrZXlIaW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9rZXlzLmpzJ1xuaW1wb3J0IHsgbG9hZENhdGFsb2csIGV4dHJhY3RNb2RlbHMsIGFkaG9jTW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NhdGFsb2cuanMnXG5pbXBvcnQgeyBsb2FkQ29kZXhNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvZGV4LW1vZGVscy5qcydcbmltcG9ydCB7IGxvYWRPcGVuUm91dGVyTW9kZWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVucm91dGVyLW1vZGVscy5qcydcbmltcG9ydCB7IG9wZW5haUNvbm5lY3RlZCwgb3BlbmFpQ3JlZGVudGlhbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgZGVmYXVsdE1vZGVsIH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcblxuY29uc3QgQ0FUQUxPR19QUk9WSURFUlMgPSBbJ2dvb2dsZScsICdhbnRocm9waWMnLCAnb3BlbmFpJywgJ3hhaSddXG5cbmZ1bmN0aW9uIGNvZGV4Q29udGV4dChjYXRhbG9nRGF0YSwgbW9kZWwpIHtcbiAgY29uc3QgZW50cnkgPSBjYXRhbG9nRGF0YS5vcGVuYWk/Lm1vZGVscz8uW21vZGVsLm5hbWUuc3BsaXQoJy8nKVsxXV1cbiAgcmV0dXJuIG1vZGVsLmNvbnRleHQgPz8gZW50cnk/LmxpbWl0Py5pbnB1dCA/PyBlbnRyeT8ubGltaXQ/LmNvbnRleHQgPz8gbnVsbFxufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZE1vZGVscyh7IHByb3ZpZGVycywgZm9yY2UgfSkge1xuICBjb25zdCBoYXMgPSAocHJvdmlkZXIpID0+IHByb3ZpZGVycy5pbmNsdWRlcyhwcm92aWRlcilcbiAgY29uc3QgY29kZXhDcmVkZW50aWFscyA9IGhhcygnY29kZXgnKSA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IFtjYXRhbG9nRGF0YSwgY29kZXgsIG9wZW5yb3V0ZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGxvYWRDYXRhbG9nKHsgZm9yY2UgfSksXG4gICAgbG9hZENvZGV4TW9kZWxzKGNvZGV4Q3JlZGVudGlhbHMsIHsgZm9yY2UgfSksXG4gICAgaGFzKCdvcGVucm91dGVyJykgPyBsb2FkT3BlblJvdXRlck1vZGVscyh7IGZvcmNlIH0pIDogW10sXG4gIF0pXG4gIHJldHVybiBbXG4gICAgLi4uZXh0cmFjdE1vZGVscyhjYXRhbG9nRGF0YSwgQ0FUQUxPR19QUk9WSURFUlMpLm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGF2YWlsYWJsZTogaGFzKG1vZGVsLnByb3ZpZGVyKSxcbiAgICAgIGtleUhpbnQ6IGtleUhpbnQobW9kZWwucHJvdmlkZXIpLFxuICAgIH0pKSxcbiAgICAuLi5jb2RleC5tYXAoKG1vZGVsKSA9PiAoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICBjb250ZXh0OiBjb2RleENvbnRleHQoY2F0YWxvZ0RhdGEsIG1vZGVsKSxcbiAgICAgIGF2YWlsYWJsZTogaGFzKCdjb2RleCcpLFxuICAgICAga2V5SGludDogJy9jb25uZWN0JyxcbiAgICB9KSksXG4gICAgLi4ub3BlbnJvdXRlci5tYXAoKG1vZGVsKSA9PiAoeyAuLi5tb2RlbCwgYXZhaWxhYmxlOiB0cnVlLCBrZXlIaW50OiBrZXlIaW50KCdvcGVucm91dGVyJykgfSkpLFxuICBdXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxSdW50aW1lKCkge1xuICBjb25zdCBjaGF0Z3B0ID0gYXdhaXQgb3BlbmFpQ29ubmVjdGVkKClcbiAgY29uc3QgcHJvdmlkZXJzID0gWy4uLmFwcGx5S2V5cyhkaXNjb3ZlcktleXMoKSksIC4uLihjaGF0Z3B0ID8gWydjb2RleCddIDogW10pXVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gY2hhdGdwdCA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IGxvYWRNb2RlbHMgPSAoeyBmb3JjZSA9IGZhbHNlIH0gPSB7fSkgPT4gYnVpbGRNb2RlbHMoeyBwcm92aWRlcnMsIGZvcmNlIH0pXG4gIHJldHVybiB7IHByb3ZpZGVycywgbW9kZWxzOiBhd2FpdCBsb2FkTW9kZWxzKCksIGNvZGV4Q3JlZGVudGlhbHMsIGxvYWRNb2RlbHMgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKG1vZGVscywgcHJvdmlkZXJzLCBuYW1lKSB7XG4gIGlmICghbmFtZSkgcmV0dXJuIG51bGxcbiAgY29uc3QgZXhhY3QgPSBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IG5hbWUpXG4gIGlmIChleGFjdCkgcmV0dXJuIGV4YWN0XG4gIGlmIChuYW1lLmluY2x1ZGVzKCcvJykpIHJldHVybiBhZGhvY01vZGVsKG5hbWUsIHByb3ZpZGVycylcbiAgY29uc3QgYXZhaWxhYmxlID0gbW9kZWxzLmZpbHRlcigobW9kZWwpID0+IG1vZGVsLmF2YWlsYWJsZSAhPT0gZmFsc2UpXG4gIHJldHVybiBhdmFpbGFibGVcbiAgICAgIC5tYXAoKG1vZGVsKSA9PiBbZnV6enlTY29yZShuYW1lLCBtb2RlbC5uYW1lKSwgbW9kZWxdKVxuICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSlbMF0/LlsxXVxuICAgIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZCwgY29uZmlndXJlZCB9KSB7XG4gIHJldHVybiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZClcbiAgICB8fCAoY29uZmlndXJlZCAmJiBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IGNvbmZpZ3VyZWQgJiYgbW9kZWwuYXZhaWxhYmxlKSlcbiAgICB8fCBkZWZhdWx0TW9kZWwobW9kZWxzKVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMsZUFBZTtBQUN4QixTQUFTLGFBQWEsbUJBQW1COzs7QUNEekMsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyx3QkFBd0I7QUFDakMsU0FBUywwQkFBMEI7QUFDbkMsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxnQkFBQUEscUJBQW9COzs7QUNON0IsU0FBUyxjQUFjLFdBQVcsZUFBZTtBQUNqRCxTQUFTLGFBQWEsZUFBZSxrQkFBa0I7QUFDdkQsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyw0QkFBNEI7QUFDckMsU0FBUyxpQkFBaUIseUJBQXlCO0FBQ25ELFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsa0JBQWtCO0FBRTNCLElBQU0sb0JBQW9CLENBQUMsVUFBVSxhQUFhLFVBQVUsS0FBSztBQUVqRSxTQUFTLGFBQWEsYUFBYSxPQUFPO0FBQ3hDLFFBQU0sUUFBUSxZQUFZLFFBQVEsU0FBUyxNQUFNLEtBQUssTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLFNBQU8sTUFBTSxXQUFXLE9BQU8sT0FBTyxTQUFTLE9BQU8sT0FBTyxXQUFXO0FBQzFFO0FBRUEsZUFBZSxZQUFZLEVBQUUsV0FBVyxNQUFNLEdBQUc7QUFDL0MsUUFBTSxNQUFNLENBQUMsYUFBYSxVQUFVLFNBQVMsUUFBUTtBQUNyRCxRQUFNLG1CQUFtQixJQUFJLE9BQU8sSUFBSSxNQUFNLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUk7QUFDdEYsUUFBTSxDQUFDLGFBQWEsT0FBTyxVQUFVLElBQUksTUFBTSxRQUFRLElBQUk7QUFBQSxJQUN6RCxZQUFZLEVBQUUsTUFBTSxDQUFDO0FBQUEsSUFDckIsZ0JBQWdCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQztBQUFBLElBQzNDLElBQUksWUFBWSxJQUFJLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFBQSxFQUN6RCxDQUFDO0FBQ0QsU0FBTztBQUFBLElBQ0wsR0FBRyxjQUFjLGFBQWEsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFdBQVc7QUFBQSxNQUMvRCxHQUFHO0FBQUEsTUFDSCxXQUFXLElBQUksTUFBTSxRQUFRO0FBQUEsTUFDN0IsU0FBUyxRQUFRLE1BQU0sUUFBUTtBQUFBLElBQ2pDLEVBQUU7QUFBQSxJQUNGLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVztBQUFBLE1BQ3ZCLEdBQUc7QUFBQSxNQUNILFNBQVMsYUFBYSxhQUFhLEtBQUs7QUFBQSxNQUN4QyxXQUFXLElBQUksT0FBTztBQUFBLE1BQ3RCLFNBQVM7QUFBQSxJQUNYLEVBQUU7QUFBQSxJQUNGLEdBQUcsV0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsT0FBTyxXQUFXLE1BQU0sU0FBUyxRQUFRLFlBQVksRUFBRSxFQUFFO0FBQUEsRUFDOUY7QUFDRjtBQUVBLGVBQXNCLG1CQUFtQjtBQUN2QyxRQUFNLFVBQVUsTUFBTSxnQkFBZ0I7QUFDdEMsUUFBTSxZQUFZLENBQUMsR0FBRyxVQUFVLGFBQWEsQ0FBQyxHQUFHLEdBQUksVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUU7QUFDOUUsUUFBTSxtQkFBbUIsVUFBVSxNQUFNLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUk7QUFDakYsUUFBTSxhQUFhLENBQUMsRUFBRSxRQUFRLE1BQU0sSUFBSSxDQUFDLE1BQU0sWUFBWSxFQUFFLFdBQVcsTUFBTSxDQUFDO0FBQy9FLFNBQU8sRUFBRSxXQUFXLFFBQVEsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLFdBQVc7QUFDL0U7OztBRHBDQSxlQUFzQixvQkFBb0IsRUFBRSxNQUFNLFFBQVEsSUFBSSxHQUFHLFNBQVMsT0FBTyxlQUFlLFVBQVUsSUFBSSxDQUFDLEdBQUc7QUFDaEgsUUFBTSxFQUFFLFFBQVEsV0FBVyxXQUFXLElBQUksTUFBTSxpQkFBaUI7QUFDakUsTUFBSSxDQUFDLFVBQVUsT0FBUSxPQUFNLElBQUksTUFBTSw0QkFBNEI7QUFDbkUsUUFBTSxTQUFTLE1BQU0sV0FBVztBQUNoQyxRQUFNLFNBQVMsQ0FBQztBQUNoQixRQUFNLFNBQVMsbUJBQW1CLEVBQUUsVUFBVSxNQUFNLE9BQU8sU0FBUyxHQUFHLFFBQVEsV0FBUyxPQUFPLFlBQVksS0FBSyxFQUFFLENBQUM7QUFDbkgsUUFBTSxVQUFVLG9CQUFvQixFQUFFLFVBQVUsTUFBTSxPQUFPLFVBQVUsR0FBRyxRQUFRLFlBQVUsT0FBTyxhQUFhLE1BQU0sRUFBRSxDQUFDO0FBQ3pILFFBQU0sTUFBTSxpQkFBaUIsRUFBRSxVQUFVLE1BQU0sT0FBTyxNQUFNLEVBQUUsQ0FBQztBQUMvRCxRQUFNLFVBQVUsQ0FBQUMsU0FBTyxpQkFBaUJBLE1BQUssRUFBRSxhQUFhLE1BQU0sT0FBTyxNQUFNLEVBQUUsQ0FBQztBQUNsRixNQUFJO0FBQ0osTUFBSTtBQUNGLFdBQU87QUFBQSxNQUNMLEdBQUcsTUFBTSxRQUFRLEdBQUc7QUFBQSxNQUFHO0FBQUEsTUFBUztBQUFBLE1BQU87QUFBQSxNQUFlO0FBQUEsTUFDdEQ7QUFBQSxNQUFRO0FBQUEsTUFBVyxjQUFjLE9BQU8sS0FBSyxPQUFLLEVBQUUsU0FBUyxPQUFPLGdCQUFnQixFQUFFLGNBQWMsS0FBSyxLQUFLQyxjQUFhLE1BQU07QUFBQSxNQUNqSSxlQUFlLE9BQU8sUUFBUSxrQkFBa0I7QUFBQSxNQUFNLFlBQVksT0FBTyxRQUFRLFNBQVM7QUFBQSxNQUMxRixtQkFBbUIsT0FBTyxRQUFRLGdCQUFnQjtBQUFBLE1BQU0sbUJBQW1CLE9BQU8sUUFBUSxnQkFBZ0I7QUFBQSxNQUMxRyxtQkFBbUIsT0FBTyxRQUFRLGdCQUFnQixPQUFPLFFBQVEsa0JBQWtCO0FBQUEsTUFDbkYsb0JBQW9CLE9BQU8sVUFBVSxPQUFPLFVBQVUsVUFBVSxLQUFLLE9BQU8sU0FBUyxjQUFjLEtBQUssT0FBTyxTQUFTLGNBQWMsTUFBTSxPQUFPLFNBQVMsYUFBYTtBQUFBLE1BQ3pLLGVBQWUsQ0FBQyxPQUFPLFVBQVUsUUFBUSxLQUFLLEVBQUUsU0FBUyxPQUFPLGFBQWEsSUFBSSxPQUFPLGdCQUFnQjtBQUFBLE1BQU0sZUFBZSxPQUFPO0FBQUEsTUFDcEksYUFBYSxPQUFPLGdCQUFnQjtBQUFBLE1BQU8sUUFBUSxPQUFPLFdBQVcsV0FBVztBQUFBLE1BQ2hGLG9CQUFvQixPQUFPLFNBQVMsdUJBQXVCO0FBQUEsTUFBTSxXQUFXLE9BQU8sU0FBUyxjQUFjO0FBQUEsTUFDMUcsYUFBYSxPQUFPLFNBQVMsZ0JBQWdCO0FBQUEsTUFBTyxNQUFNLENBQUM7QUFBQSxNQUFHO0FBQUEsTUFBUTtBQUFBLE1BQVM7QUFBQSxNQUFLO0FBQUEsTUFDcEYsZUFBZSxNQUFNLFdBQVcsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLE1BQy9DLGNBQWMsUUFBTTtBQUFFLGVBQU8sTUFBTTtBQUFBLE1BQUc7QUFBQSxNQUFHLGNBQWMsUUFBTTtBQUFFLGVBQU8sTUFBTTtBQUFBLE1BQUc7QUFBQSxNQUMvRSxpQkFBaUIsUUFBTTtBQUFFLGVBQU8sU0FBUztBQUFBLE1BQUc7QUFBQSxNQUFHLGVBQWUsUUFBTTtBQUFFLGVBQU8sWUFBWTtBQUFBLE1BQUc7QUFBQSxNQUM1RixrQkFBa0IsUUFBTTtBQUFFLGVBQU8sVUFBVTtBQUFBLE1BQUc7QUFBQSxNQUFHLGdCQUFnQixRQUFNO0FBQUUsZUFBTyxhQUFhO0FBQUEsTUFBRztBQUFBLElBQ2xHO0FBQ0EsUUFBSSxTQUFTLEtBQUssSUFBSTtBQUN0QixRQUFJLFdBQVcsS0FBSyxTQUFTO0FBQzdCLFVBQU0sYUFBYSxpQkFBaUIsRUFBRSxLQUFLLENBQUM7QUFDNUMsU0FBSyxJQUFJLFdBQVc7QUFDcEIsV0FBTyxFQUFFLFlBQVksU0FBUyxNQUFNO0FBQUUsVUFBSSxRQUFRO0FBQUcsY0FBUSxVQUFVO0FBQUcsYUFBTyxRQUFRO0FBQUEsSUFBRSxFQUFFO0FBQUEsRUFDL0YsU0FBUyxPQUFPO0FBQUUsUUFBSSxRQUFRO0FBQUcsV0FBTyxRQUFRO0FBQUcsVUFBTSxJQUFJLGFBQWE7QUFBRyxVQUFNO0FBQUEsRUFBTTtBQUMzRjs7O0FEdENBLElBQU0sU0FBUyxRQUFRLEtBQUssUUFBUSxLQUFLLFFBQVEsVUFBVSxJQUFJLENBQUM7QUFDaEUsSUFBTSxRQUFRLFFBQVEsS0FBSyxTQUFTLFVBQVUsSUFBSSxFQUFFLFFBQVEsV0FBVyxRQUFRLE1BQU0sRUFBRSxJQUFJLFlBQVk7QUFDdkcsSUFBTSxTQUFTLE1BQU0sWUFBWSxFQUFFLE9BQU8sZUFBZSxxQkFBcUIsU0FBUyxNQUFNLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUM5RyxXQUFXLFVBQVUsQ0FBQyxXQUFXLFVBQVUsUUFBUSxFQUFHLFNBQVEsR0FBRyxRQUFRLE1BQU0sT0FBTyxNQUFNLEVBQUUsTUFBTSxNQUFNLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMxSCxRQUFRLEdBQUcscUJBQXFCLE1BQU0sT0FBTyxNQUFNLEVBQUUsUUFBUSxNQUFNLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuRixRQUFRLEdBQUcsc0JBQXNCLE1BQU0sT0FBTyxNQUFNLEVBQUUsUUFBUSxNQUFNLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQzsiLAogICJuYW1lcyI6IFsiZGVmYXVsdE1vZGVsIiwgImN3ZCIsICJkZWZhdWx0TW9kZWwiXQp9Cg==
package/dist/pico-dictate CHANGED
Binary file