@wirecat/zoom-cli 0.56.0 → 0.58.0
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/README.md +1 -1
- package/dist/bin/zm.js +35 -5
- package/dist/bundle/all-profiles-RS5IWIGR.js +25 -0
- package/dist/bundle/answer-policy-R7VZMCGE.js +96 -0
- package/dist/bundle/anthropic-5QHQR4WF.js +70 -0
- package/dist/bundle/app-server-7LANSZGE.js +232 -0
- package/dist/bundle/bun-O6RL6LRQ.js +169 -0
- package/dist/bundle/bun-sqlite-PEJM6CS4.js +69 -0
- package/dist/bundle/chunk-24DLFGES.js +97 -0
- package/dist/bundle/chunk-27P22POE.js +1109 -0
- package/dist/bundle/chunk-3SCTDFNO.js +3398 -0
- package/dist/bundle/chunk-3SERIWJD.js +36139 -0
- package/dist/bundle/chunk-4AURKUDZ.js +60 -0
- package/dist/bundle/chunk-4NGLRHWO.js +24 -0
- package/dist/bundle/chunk-5D4AEUVA.js +24783 -0
- package/dist/bundle/chunk-5DVW77VC.js +789 -0
- package/dist/bundle/chunk-6CYLVFXM.js +9 -0
- package/dist/bundle/chunk-6FL25KC5.js +264 -0
- package/dist/bundle/chunk-7D2CD3E3.js +193 -0
- package/dist/bundle/chunk-7GVNQOV6.js +17 -0
- package/dist/bundle/chunk-7H3ZRDLW.js +630 -0
- package/dist/bundle/chunk-7Z4ANTAK.js +1095 -0
- package/dist/bundle/chunk-A6323R5P.js +22 -0
- package/dist/bundle/chunk-ADLS6FVG.js +24600 -0
- package/dist/bundle/chunk-AIXLOMH4.js +63 -0
- package/dist/bundle/chunk-AQDWGJZT.js +188 -0
- package/dist/bundle/chunk-B32SF7J3.js +18 -0
- package/dist/bundle/chunk-BAQLQIMI.js +1938 -0
- package/dist/bundle/chunk-BGILD4CI.js +1109 -0
- package/dist/bundle/chunk-BXZ6WSVF.js +100 -0
- package/dist/bundle/chunk-CTGI4ES2.js +138 -0
- package/dist/bundle/chunk-CVIKKIGE.js +76 -0
- package/dist/bundle/chunk-DDYR6DYL.js +78 -0
- package/dist/bundle/chunk-DFDN6AUB.js +21 -0
- package/dist/bundle/chunk-DP5DX45H.js +151 -0
- package/dist/bundle/chunk-DXKVEOSS.js +53 -0
- package/dist/bundle/chunk-DXZTLB24.js +120 -0
- package/dist/bundle/chunk-G27MRA24.js +82 -0
- package/dist/bundle/chunk-HTQTIKWP.js +928 -0
- package/dist/bundle/chunk-IYAGQXED.js +433 -0
- package/dist/bundle/chunk-K76WFW4I.js +124 -0
- package/dist/bundle/chunk-KVHRHBLY.js +884 -0
- package/dist/bundle/chunk-L2UIJDWB.js +31 -0
- package/dist/bundle/chunk-L3VS3H34.js +482 -0
- package/dist/bundle/chunk-MBT7GP7K.js +1970 -0
- package/dist/bundle/chunk-MFS52LTZ.js +570 -0
- package/dist/bundle/chunk-MMT46EN4.js +29 -0
- package/dist/bundle/chunk-MNUTWGSA.js +6094 -0
- package/dist/bundle/chunk-N7GAQ27N.js +82 -0
- package/dist/bundle/chunk-NDXAZB5Z.js +409 -0
- package/dist/bundle/chunk-NOKFJJPA.js +1028 -0
- package/dist/bundle/chunk-NW7IMGRR.js +6848 -0
- package/dist/bundle/chunk-O5EHUB2V.js +2 -0
- package/dist/bundle/chunk-OBZWUNO4.js +160 -0
- package/dist/bundle/chunk-PACC5N6T.js +240 -0
- package/dist/bundle/chunk-PF25S7L4.js +422 -0
- package/dist/bundle/chunk-PKTFZAXG.js +48 -0
- package/dist/bundle/chunk-PNBEREOU.js +35626 -0
- package/dist/bundle/chunk-POOGFSRA.js +385 -0
- package/dist/bundle/chunk-PP3JGQQE.js +3517 -0
- package/dist/bundle/chunk-Q2Z3VCM4.js +2 -0
- package/dist/bundle/chunk-QCFHL4ES.js +45 -0
- package/dist/bundle/chunk-QFGBMS67.js +492 -0
- package/dist/bundle/chunk-RUP467ZX.js +948 -0
- package/dist/bundle/chunk-RXDIG23Z.js +166 -0
- package/dist/bundle/chunk-SIA7HJE2.js +8192 -0
- package/dist/bundle/chunk-SL3SXQZ5.js +100 -0
- package/dist/bundle/chunk-SV5L36WK.js +19 -0
- package/dist/bundle/chunk-T6AAM7UT.js +846 -0
- package/dist/bundle/chunk-U6QW67SU.js +18673 -0
- package/dist/bundle/chunk-UKR7KH3H.js +288 -0
- package/dist/bundle/chunk-UOFOMU3T.js +836 -0
- package/dist/bundle/chunk-URO44C5T.js +3570 -0
- package/dist/bundle/chunk-UXM7I35J.js +281 -0
- package/dist/bundle/chunk-UYJUTZTT.js +73 -0
- package/dist/bundle/chunk-VOAVOK4I.js +1146 -0
- package/dist/bundle/chunk-VSUY7PDW.js +192 -0
- package/dist/bundle/chunk-VYUSEJE4.js +98 -0
- package/dist/bundle/chunk-XFCSPOLZ.js +25 -0
- package/dist/bundle/chunk-XT7XVPEM.js +538 -0
- package/dist/bundle/chunk-Y5E2WNWB.js +35 -0
- package/dist/bundle/chunk-YIFIY7ZE.js +58 -0
- package/dist/bundle/chunk-YIMI6O7R.js +5292 -0
- package/dist/bundle/chunk-YJRMMZI5.js +275 -0
- package/dist/bundle/chunk-YSHSCBPM.js +2315 -0
- package/dist/bundle/chunk-ZC5UXEIH.js +215 -0
- package/dist/bundle/chunk-ZHXIXDH5.js +161 -0
- package/dist/bundle/chunk-ZTOAAYFV.js +122 -0
- package/dist/bundle/chunk-ZVVMGPBJ.js +50 -0
- package/dist/bundle/cli-IQTASP44.js +831 -0
- package/dist/bundle/command-contract-WHZPF7NA.js +38 -0
- package/dist/bundle/config-IP5SGHKN.js +79 -0
- package/dist/bundle/dist-WT73DF46.js +136 -0
- package/dist/bundle/dist-XUFQCJXW.js +7577 -0
- package/dist/bundle/echarts-LD3AI55P.js +42501 -0
- package/dist/bundle/embed-XEMH4LNX.js +35 -0
- package/dist/bundle/embedder-ZCYKSKAE.js +108 -0
- package/dist/bundle/first-run-LGYDLIUM.js +23 -0
- package/dist/bundle/first-screen-LYQKPNF4.js +36 -0
- package/dist/bundle/folders-5ZBUQHAM.js +13 -0
- package/dist/bundle/instructions-RZMSW3OC.js +11 -0
- package/dist/bundle/main-NKY3JGXY.js +130 -0
- package/dist/bundle/mcp-7OXUHLTO.js +189 -0
- package/dist/bundle/mcp-OQBZXELQ.js +165 -0
- package/dist/bundle/mcp-VISEXTVC.js +92 -0
- package/dist/bundle/meetings-XPBHVZAU.js +215 -0
- package/dist/bundle/node-P4E63KXA.js +2340 -0
- package/dist/bundle/node-TLZSIHIJ.js +21 -0
- package/dist/bundle/node-ZRLYQL7J.js +176 -0
- package/dist/bundle/node-sqlite-BBEDYBWO.js +45 -0
- package/dist/bundle/oauth-UHVRGKZU.js +17 -0
- package/dist/bundle/open-J4FCAUAJ.js +19 -0
- package/dist/bundle/output-file-SXV2ANW7.js +63 -0
- package/dist/bundle/process-LL77573L.js +91 -0
- package/dist/bundle/program-EPMIJCGA.js +5845 -0
- package/dist/bundle/prompt-LUUMQTMY.js +12 -0
- package/dist/bundle/recognize-EMHQX4XF.js +190 -0
- package/dist/bundle/remote-ZXS6D7VB.js +26 -0
- package/dist/bundle/rerank-WP7RKZNB.js +49 -0
- package/dist/bundle/run-log-GS2L66G6.js +111 -0
- package/dist/bundle/serve-L6KLLXK2.js +19 -0
- package/dist/bundle/server-NOFYENP5.js +53 -0
- package/dist/bundle/server-P5TXAPBY.js +66 -0
- package/dist/bundle/services-SPOEWVK3.js +330 -0
- package/dist/bundle/speech-6OBAKMND.js +44 -0
- package/dist/bundle/state-HN5EJKXQ.js +33 -0
- package/dist/bundle/store-LEU3M6IN.js +124 -0
- package/dist/bundle/store-ZP2URKET.js +141 -0
- package/dist/bundle/store-connection-I53XZ2TS.js +76 -0
- package/dist/bundle/store-maintenance-command-PSCHEHHY.js +54 -0
- package/dist/bundle/streaming-AK6Q2ZGQ.js +15 -0
- package/dist/bundle/tokens-CCM3D4ZT.js +17 -0
- package/dist/bundle/zm.js +8 -0
- package/dist/contract-overrides.d.ts.map +1 -1
- package/dist/contract-overrides.js +29 -17
- package/dist/contract-overrides.js.map +1 -1
- package/dist/mcp-command.d.ts +3 -2
- package/dist/mcp-command.d.ts.map +1 -1
- package/dist/mcp-command.js +62 -10
- package/dist/mcp-command.js.map +1 -1
- package/dist/program-bindings.d.ts.map +1 -1
- package/dist/program-bindings.js +1 -0
- package/dist/program-bindings.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -5
- package/skills/zoom-cli/SKILL.md +2 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { createRequire as __bundleRequire } from "node:module";
|
|
2
|
+
const require = __bundleRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
installerOf,
|
|
5
|
+
updateCommand
|
|
6
|
+
} from "./chunk-DP5DX45H.js";
|
|
7
|
+
import {
|
|
8
|
+
QUESTIONS,
|
|
9
|
+
readSetupAnswers,
|
|
10
|
+
unanswered,
|
|
11
|
+
writeSetupAnswers
|
|
12
|
+
} from "./chunk-4AURKUDZ.js";
|
|
13
|
+
import {
|
|
14
|
+
DEFAULT_STEMMERS,
|
|
15
|
+
LANGUAGES
|
|
16
|
+
} from "./chunk-YSHSCBPM.js";
|
|
17
|
+
import {
|
|
18
|
+
sharedConfigPath
|
|
19
|
+
} from "./chunk-KVHRHBLY.js";
|
|
20
|
+
import {
|
|
21
|
+
storePath
|
|
22
|
+
} from "./chunk-B32SF7J3.js";
|
|
23
|
+
import {
|
|
24
|
+
__name
|
|
25
|
+
} from "./chunk-ZVVMGPBJ.js";
|
|
26
|
+
|
|
27
|
+
// node_modules/.pnpm/@wirecat+cli-core@0.473.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_39633e3162553a2c86dde989a9811fcb/node_modules/@wirecat/cli-core/dist/cli/first-run.js
|
|
28
|
+
import { spawnSync } from "node:child_process";
|
|
29
|
+
import { accessSync, constants, realpathSync } from "node:fs";
|
|
30
|
+
import { delimiter, join } from "node:path";
|
|
31
|
+
var SKIPPED = /* @__PURE__ */ new Set(["help", "guide", "completion", "mcp", "serve", "server", "update", "store"]);
|
|
32
|
+
var asksAtStart = /* @__PURE__ */ __name((start) => !start.headless && start.terminal && !start.env.AI_AGENT && !start.env.CLAUDECODE && start.readOnlyLock === void 0 && !SKIPPED.has(start.path[0] ?? ""), "asksAtStart");
|
|
33
|
+
var systemLanguage = /* @__PURE__ */ __name((env) => {
|
|
34
|
+
const named = [env.LC_ALL, env.LC_MESSAGES, env.LANG, ...(env.LANGUAGE ?? "").split(":")].map((value) => value?.trim()).find((value) => value && value !== "C" && value !== "POSIX" && !value.startsWith("C."));
|
|
35
|
+
return (named ?? Intl.DateTimeFormat().resolvedOptions().locale).slice(0, 2).toLowerCase();
|
|
36
|
+
}, "systemLanguage");
|
|
37
|
+
var stemmersOf = /* @__PURE__ */ __name((languages) => {
|
|
38
|
+
const latin = LANGUAGES.filter(({ name, script }) => script === "latin" && languages.includes(name));
|
|
39
|
+
return {
|
|
40
|
+
cyrillic: languages.includes("russian") ? "russian" : "none",
|
|
41
|
+
latin: latin.length ? latin.map(({ name }) => name).join(",") : "none"
|
|
42
|
+
};
|
|
43
|
+
}, "stemmersOf");
|
|
44
|
+
var languagesOf = /* @__PURE__ */ __name((stemmers) => LANGUAGES.filter(({ name }) => stemmers.cyrillic === name || stemmers.latin.split(",").includes(name)).map(({ name }) => name), "languagesOf");
|
|
45
|
+
var choose = /* @__PURE__ */ __name(async (io, prompt, count, chosen) => {
|
|
46
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
47
|
+
const answer = (await io.ask(prompt)).trim();
|
|
48
|
+
if (!answer)
|
|
49
|
+
return chosen;
|
|
50
|
+
if (/^(none|-)$/i.test(answer))
|
|
51
|
+
return [];
|
|
52
|
+
const numbers = answer.split(/[\s,]+/).filter(Boolean).map(Number);
|
|
53
|
+
if (numbers.every((number) => Number.isInteger(number) && number >= 1 && number <= count))
|
|
54
|
+
return [...new Set(numbers)].sort((a, b) => a - b);
|
|
55
|
+
io.say(`Choose numbers from 1 to ${count}, separated by commas.`);
|
|
56
|
+
}
|
|
57
|
+
return chosen;
|
|
58
|
+
}, "choose");
|
|
59
|
+
var yes = /* @__PURE__ */ __name(async (io, prompt) => /^y(es)?$/i.test((await io.ask(prompt)).trim()), "yes");
|
|
60
|
+
var onPath = /* @__PURE__ */ __name((command, env) => {
|
|
61
|
+
const names = process.platform === "win32" ? [".cmd", ".exe", ""].map((ending) => command + ending) : [command];
|
|
62
|
+
return (env.PATH ?? env.Path ?? "").split(delimiter).some((folder) => names.some((name) => {
|
|
63
|
+
try {
|
|
64
|
+
accessSync(join(folder, name), process.platform === "win32" ? constants.F_OK : constants.X_OK);
|
|
65
|
+
return true;
|
|
66
|
+
} catch {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}));
|
|
70
|
+
}, "onPath");
|
|
71
|
+
var installWith = /* @__PURE__ */ __name((argv) => spawnSync(argv[0], argv.slice(1), { stdio: ["inherit", 2, 2] }).status === 0, "installWith");
|
|
72
|
+
var installerHere = /* @__PURE__ */ __name(() => {
|
|
73
|
+
try {
|
|
74
|
+
return installerOf(realpathSync(process.argv[1] ?? ""));
|
|
75
|
+
} catch {
|
|
76
|
+
return "unknown";
|
|
77
|
+
}
|
|
78
|
+
}, "installerHere");
|
|
79
|
+
var suggested = /* @__PURE__ */ __name((env, contentLanguages) => {
|
|
80
|
+
const own = LANGUAGES.filter(({ code }) => contentLanguages?.includes(code));
|
|
81
|
+
const system = systemLanguage(env);
|
|
82
|
+
return (own.length ? own : LANGUAGES.filter(({ code }) => code === "en" || code === system)).map(({ name }) => name);
|
|
83
|
+
}, "suggested");
|
|
84
|
+
var askLanguages = /* @__PURE__ */ __name(async ({ command, env, io, contentLanguages }) => {
|
|
85
|
+
const { openStore } = await import("./store-LEU3M6IN.js");
|
|
86
|
+
const store = await openStore({ env });
|
|
87
|
+
let rebuild = false;
|
|
88
|
+
try {
|
|
89
|
+
const saved = await store.searchIndex.stemmers() ?? void 0;
|
|
90
|
+
const inUse = saved !== void 0 || (await store.accounts.accounts()).length > 0;
|
|
91
|
+
const ticked = inUse ? languagesOf(saved ?? DEFAULT_STEMMERS) : suggested(env, contentLanguages);
|
|
92
|
+
const numbers = ticked.map((name) => LANGUAGES.findIndex((one) => one.name === name) + 1);
|
|
93
|
+
io.say("Languages you write and speak \u2014 search finds every form of their words, and spellings speech mangles:");
|
|
94
|
+
LANGUAGES.forEach(({ name, label }, at) => {
|
|
95
|
+
io.say(` ${at + 1}. ${label}${ticked.includes(name) ? " \u2713" : ""}`);
|
|
96
|
+
});
|
|
97
|
+
const chosen = await choose(io, `Numbers (${numbers.join(",")}): `, LANGUAGES.length, numbers);
|
|
98
|
+
const next = stemmersOf(chosen.map((number) => LANGUAGES[number - 1].name));
|
|
99
|
+
const before = saved ?? DEFAULT_STEMMERS;
|
|
100
|
+
if (inUse && before.cyrillic === next.cyrillic && before.latin === next.latin)
|
|
101
|
+
return;
|
|
102
|
+
if (inUse && !await yes(io, "Rebuild the word forms of every stored message now? Word search waits for it; a large store takes minutes. [y/N] ")) {
|
|
103
|
+
io.say(`Languages kept as they were; \`${command} setup\` asks again.`);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
await store.searchIndex.saveStemmers(next);
|
|
107
|
+
rebuild = inUse;
|
|
108
|
+
} finally {
|
|
109
|
+
await store.close();
|
|
110
|
+
}
|
|
111
|
+
if (!rebuild)
|
|
112
|
+
return;
|
|
113
|
+
const [{ openCache }, { buildStems }] = await Promise.all([
|
|
114
|
+
import("./open-J4FCAUAJ.js"),
|
|
115
|
+
import("./store-maintenance-command-PSCHEHHY.js")
|
|
116
|
+
]);
|
|
117
|
+
const database = await openCache(storePath(env));
|
|
118
|
+
try {
|
|
119
|
+
buildStems(database, (note) => io.say(` ${note}`), { force: true });
|
|
120
|
+
} finally {
|
|
121
|
+
database.close();
|
|
122
|
+
}
|
|
123
|
+
}, "askLanguages");
|
|
124
|
+
var askTools = /* @__PURE__ */ __name(async (run) => {
|
|
125
|
+
const { command, env, io } = run;
|
|
126
|
+
const installed = run.installed ?? ((name) => onPath(name, env));
|
|
127
|
+
const { WIRECAT_TOOLS } = await import("./first-screen-LYQKPNF4.js");
|
|
128
|
+
const others = WIRECAT_TOOLS.filter((tool) => tool.command !== command);
|
|
129
|
+
const missing = others.filter((tool) => !installed(tool.command));
|
|
130
|
+
io.say("Other WireCat tools \u2014 they share this store, so one search finds everything:");
|
|
131
|
+
for (const tool of others) {
|
|
132
|
+
const at = missing.indexOf(tool);
|
|
133
|
+
io.say(` ${at < 0 ? "\u2713 " : `${at + 1}.`} ${tool.command} \u2014 ${tool.does}`);
|
|
134
|
+
}
|
|
135
|
+
if (!missing.length)
|
|
136
|
+
return;
|
|
137
|
+
const chosen = await choose(io, "Numbers to install (none): ", missing.length, []);
|
|
138
|
+
const installer = run.installer ?? installerHere();
|
|
139
|
+
for (const number of chosen) {
|
|
140
|
+
const tool = missing[number - 1];
|
|
141
|
+
const argv = updateCommand(installer, tool.package);
|
|
142
|
+
if (!argv) {
|
|
143
|
+
io.say(`Install ${tool.command} with \`npm install -g ${tool.package}\`.`);
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
io.say(`Installing ${tool.command}: ${argv.join(" ")}`);
|
|
147
|
+
if (!(run.install ?? installWith)(argv))
|
|
148
|
+
io.say(`${tool.command} was not installed; run \`${argv.join(" ")}\`.`);
|
|
149
|
+
}
|
|
150
|
+
}, "askTools");
|
|
151
|
+
var PERMISSION_CHOICES = [
|
|
152
|
+
{ answer: "readonly", text: "read only \u2014 search and read; nothing sends or changes" },
|
|
153
|
+
{ answer: "allow", text: "read and write \u2014 as each profile's permissions allow" }
|
|
154
|
+
];
|
|
155
|
+
var askPermissions = /* @__PURE__ */ __name(async ({ io }, answers) => {
|
|
156
|
+
const now = answers.permissions ?? "allow";
|
|
157
|
+
const current = Math.max(1, PERMISSION_CHOICES.findIndex(({ answer }) => answer === now) + 1);
|
|
158
|
+
io.say("Read only, or read and write? The same for you, scripts and agents over MCP, in every WireCat tool:");
|
|
159
|
+
PERMISSION_CHOICES.forEach(({ text }, at) => {
|
|
160
|
+
io.say(` ${at + 1}. ${text}`);
|
|
161
|
+
});
|
|
162
|
+
const [chosen = current] = await choose(io, `Number (${current}): `, PERMISSION_CHOICES.length, [current]);
|
|
163
|
+
return PERMISSION_CHOICES[chosen - 1].answer;
|
|
164
|
+
}, "askPermissions");
|
|
165
|
+
var answersAt = /* @__PURE__ */ __name((path) => {
|
|
166
|
+
try {
|
|
167
|
+
return readSetupAnswers(path);
|
|
168
|
+
} catch {
|
|
169
|
+
return {};
|
|
170
|
+
}
|
|
171
|
+
}, "answersAt");
|
|
172
|
+
var askSetupQuestions = /* @__PURE__ */ __name(async (run) => {
|
|
173
|
+
const path = sharedConfigPath(storePath(run.env), run.env);
|
|
174
|
+
const answers = answersAt(path);
|
|
175
|
+
const asking = run.all ? [...QUESTIONS] : unanswered(answers);
|
|
176
|
+
for (const question of asking) {
|
|
177
|
+
run.io.say("");
|
|
178
|
+
if (question === "languages") {
|
|
179
|
+
await askLanguages(run);
|
|
180
|
+
writeSetupAnswers(path, { languages: true });
|
|
181
|
+
} else if (question === "tools") {
|
|
182
|
+
await askTools(run);
|
|
183
|
+
writeSetupAnswers(path, { tools: true });
|
|
184
|
+
} else
|
|
185
|
+
writeSetupAnswers(path, { permissions: await askPermissions(run, answers) });
|
|
186
|
+
}
|
|
187
|
+
return asking;
|
|
188
|
+
}, "askSetupQuestions");
|
|
189
|
+
var setupAtStart = /* @__PURE__ */ __name(async (start) => {
|
|
190
|
+
const input = start.input ?? process.stdin;
|
|
191
|
+
const terminal = start.terminal ?? (input.isTTY === true && process.stderr.isTTY === true);
|
|
192
|
+
if (!asksAtStart({ ...start, terminal, readOnlyLock: start.readOnlyLock }))
|
|
193
|
+
return;
|
|
194
|
+
await askSetupQuestions({
|
|
195
|
+
command: start.command,
|
|
196
|
+
env: start.env,
|
|
197
|
+
contentLanguages: start.contentLanguages,
|
|
198
|
+
all: start.path[0] === "setup",
|
|
199
|
+
io: {
|
|
200
|
+
ask: /* @__PURE__ */ __name(async (prompt) => (await import("./prompt-LUUMQTMY.js")).readSecret(prompt, { input, echo: true }), "ask"),
|
|
201
|
+
say: /* @__PURE__ */ __name((text) => process.stderr.write(`${text}
|
|
202
|
+
`), "say")
|
|
203
|
+
}
|
|
204
|
+
}).catch((error) => {
|
|
205
|
+
process.stderr.write(`setup questions skipped: ${error instanceof Error ? error.message : String(error)} \u2014 \`${start.command} setup\` asks them again
|
|
206
|
+
`);
|
|
207
|
+
});
|
|
208
|
+
}, "setupAtStart");
|
|
209
|
+
|
|
210
|
+
export {
|
|
211
|
+
asksAtStart,
|
|
212
|
+
systemLanguage,
|
|
213
|
+
askSetupQuestions,
|
|
214
|
+
setupAtStart
|
|
215
|
+
};
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { createRequire as __bundleRequire } from "node:module";
|
|
2
|
+
const require = __bundleRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
holdLock,
|
|
5
|
+
readLock,
|
|
6
|
+
releaseLock,
|
|
7
|
+
takeLock
|
|
8
|
+
} from "./chunk-UYJUTZTT.js";
|
|
9
|
+
import {
|
|
10
|
+
__name
|
|
11
|
+
} from "./chunk-ZVVMGPBJ.js";
|
|
12
|
+
|
|
13
|
+
// node_modules/.pnpm/@wirecat+cli-core@0.473.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_39633e3162553a2c86dde989a9811fcb/node_modules/@wirecat/cli-core/dist/mcp/http/state.js
|
|
14
|
+
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "node:fs";
|
|
15
|
+
|
|
16
|
+
// node_modules/.pnpm/@wirecat+cli-core@0.473.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_39633e3162553a2c86dde989a9811fcb/node_modules/@wirecat/cli-core/dist/mcp/http/activity.js
|
|
17
|
+
import { randomBytes } from "node:crypto";
|
|
18
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
19
|
+
import { dirname } from "node:path";
|
|
20
|
+
var WRITE_EVERY_MS = 2e3;
|
|
21
|
+
var TOOL_NAME = /^[A-Za-z0-9_.-]{1,64}$/;
|
|
22
|
+
var httpActivityFile = /* @__PURE__ */ __name((tokenFile) => `${tokenFile.replace(/\.json$/, "")}.activity.json`, "httpActivityFile");
|
|
23
|
+
var localDay = /* @__PURE__ */ __name((ms) => {
|
|
24
|
+
const d = new Date(ms);
|
|
25
|
+
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
|
|
26
|
+
}, "localDay");
|
|
27
|
+
var readActivity = /* @__PURE__ */ __name((path) => {
|
|
28
|
+
if (!existsSync(path))
|
|
29
|
+
return {};
|
|
30
|
+
try {
|
|
31
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
32
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
|
|
33
|
+
} catch {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
}, "readActivity");
|
|
37
|
+
var calledTools = /* @__PURE__ */ __name((body) => (Array.isArray(body) ? body : [body]).flatMap((message) => {
|
|
38
|
+
if (!message || typeof message !== "object")
|
|
39
|
+
return [];
|
|
40
|
+
const { method, params } = message;
|
|
41
|
+
const name = params?.name;
|
|
42
|
+
return method === "tools/call" && typeof name === "string" && TOOL_NAME.test(name) ? [name] : [];
|
|
43
|
+
}), "calledTools");
|
|
44
|
+
var activityRecorder = /* @__PURE__ */ __name((path, now = Date.now) => {
|
|
45
|
+
const activity = readActivity(path);
|
|
46
|
+
let timer;
|
|
47
|
+
const write = /* @__PURE__ */ __name(() => {
|
|
48
|
+
timer = void 0;
|
|
49
|
+
try {
|
|
50
|
+
mkdirSync(dirname(path), { recursive: true, mode: 448 });
|
|
51
|
+
const temporary = `${path}.${randomBytes(8).toString("hex")}.tmp`;
|
|
52
|
+
writeFileSync(temporary, JSON.stringify(activity), { mode: 384, flag: "wx" });
|
|
53
|
+
chmodSync(temporary, 384);
|
|
54
|
+
renameSync(temporary, path);
|
|
55
|
+
} catch {
|
|
56
|
+
}
|
|
57
|
+
}, "write");
|
|
58
|
+
return {
|
|
59
|
+
record: /* @__PURE__ */ __name((clientId, tools) => {
|
|
60
|
+
const at = now();
|
|
61
|
+
const iso = new Date(at).toISOString();
|
|
62
|
+
const day = localDay(at);
|
|
63
|
+
const before = activity[clientId];
|
|
64
|
+
const counted = before?.day === day ? before.toolCalls : 0;
|
|
65
|
+
const last = tools.at(-1);
|
|
66
|
+
activity[clientId] = {
|
|
67
|
+
lastRequestAt: iso,
|
|
68
|
+
day,
|
|
69
|
+
toolCalls: counted + tools.length,
|
|
70
|
+
...last ? { lastTool: last, lastToolAt: iso } : before?.lastTool ? { lastTool: before.lastTool, ...before.lastToolAt ? { lastToolAt: before.lastToolAt } : {} } : {}
|
|
71
|
+
};
|
|
72
|
+
if (last) {
|
|
73
|
+
clearTimeout(timer);
|
|
74
|
+
write();
|
|
75
|
+
} else if (!timer) {
|
|
76
|
+
timer = setTimeout(write, WRITE_EVERY_MS);
|
|
77
|
+
timer.unref();
|
|
78
|
+
}
|
|
79
|
+
}, "record"),
|
|
80
|
+
flush: /* @__PURE__ */ __name(() => {
|
|
81
|
+
if (!timer)
|
|
82
|
+
return;
|
|
83
|
+
clearTimeout(timer);
|
|
84
|
+
write();
|
|
85
|
+
}, "flush")
|
|
86
|
+
};
|
|
87
|
+
}, "activityRecorder");
|
|
88
|
+
|
|
89
|
+
// node_modules/.pnpm/@wirecat+cli-core@0.473.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_39633e3162553a2c86dde989a9811fcb/node_modules/@wirecat/cli-core/dist/mcp/http/state.js
|
|
90
|
+
var ACCESS_SECONDS = 60 * 60;
|
|
91
|
+
var REFRESH_SECONDS = 30 * 24 * 60 * 60;
|
|
92
|
+
var readStored = /* @__PURE__ */ __name((path) => existsSync2(path) ? JSON.parse(readFileSync2(path, "utf8")) : { clients: [], tokens: [] }, "readStored");
|
|
93
|
+
var mcpHttpMarker = /* @__PURE__ */ __name((envPrefix) => `${envPrefix}_MCP_HTTP`, "mcpHttpMarker");
|
|
94
|
+
var httpLogFile = /* @__PURE__ */ __name((tokenFile) => `${tokenFile.replace(/\.json$/, "")}.log`, "httpLogFile");
|
|
95
|
+
var httpLockFile = /* @__PURE__ */ __name((tokenFile) => `${tokenFile.replace(/\.json$/, "")}.lock`, "httpLockFile");
|
|
96
|
+
var httpLaunchFile = /* @__PURE__ */ __name((lockFile) => `${lockFile.replace(/\.lock$/, "")}.launch.json`, "httpLaunchFile");
|
|
97
|
+
var readHttpLaunch = /* @__PURE__ */ __name((path) => {
|
|
98
|
+
try {
|
|
99
|
+
const launch = JSON.parse(readFileSync2(path, "utf8"));
|
|
100
|
+
return typeof launch.invocation === "string" && Array.isArray(launch.argv) && launch.argv.every((word) => typeof word === "string") && typeof launch.env === "object" && launch.env !== null ? launch : void 0;
|
|
101
|
+
} catch {
|
|
102
|
+
return void 0;
|
|
103
|
+
}
|
|
104
|
+
}, "readHttpLaunch");
|
|
105
|
+
var readHttpLock = /* @__PURE__ */ __name((path) => {
|
|
106
|
+
const lock = readLock(path);
|
|
107
|
+
return lock && typeof lock.port === "number" && typeof lock.publicUrl === "string" ? lock : void 0;
|
|
108
|
+
}, "readHttpLock");
|
|
109
|
+
var httpLock = /* @__PURE__ */ __name((path, first) => {
|
|
110
|
+
let current = first;
|
|
111
|
+
const held = takeLock(path, current);
|
|
112
|
+
return {
|
|
113
|
+
held,
|
|
114
|
+
update: /* @__PURE__ */ __name((change) => {
|
|
115
|
+
current = { ...current, ...change };
|
|
116
|
+
holdLock(path, current);
|
|
117
|
+
}, "update"),
|
|
118
|
+
release: /* @__PURE__ */ __name(() => releaseLock(path), "release")
|
|
119
|
+
};
|
|
120
|
+
}, "httpLock");
|
|
121
|
+
var signedInClients = /* @__PURE__ */ __name((tokenFile, now = Date.now()) => {
|
|
122
|
+
const seconds = Math.floor(now / 1e3);
|
|
123
|
+
const { clients, tokens } = readStored(tokenFile);
|
|
124
|
+
const activity = readActivity(httpActivityFile(tokenFile));
|
|
125
|
+
const today = localDay(now);
|
|
126
|
+
const last = /* @__PURE__ */ new Map();
|
|
127
|
+
for (const token of tokens) {
|
|
128
|
+
if (token.expiresAt <= seconds)
|
|
129
|
+
continue;
|
|
130
|
+
const issued = token.expiresAt - (token.kind === "access" ? ACCESS_SECONDS : REFRESH_SECONDS);
|
|
131
|
+
last.set(token.clientId, Math.max(last.get(token.clientId) ?? 0, issued));
|
|
132
|
+
}
|
|
133
|
+
return clients.filter((client) => last.has(client.id)).map((client) => {
|
|
134
|
+
const did = activity[client.id];
|
|
135
|
+
return {
|
|
136
|
+
claimedName: client.name ?? null,
|
|
137
|
+
lastLoginAt: new Date((last.get(client.id) ?? 0) * 1e3).toISOString(),
|
|
138
|
+
lastRequestAt: did?.lastRequestAt ?? null,
|
|
139
|
+
lastTool: did?.lastTool ?? null,
|
|
140
|
+
lastToolAt: did?.lastToolAt ?? null,
|
|
141
|
+
toolCallsToday: did?.day === today ? did.toolCalls : 0
|
|
142
|
+
};
|
|
143
|
+
}).sort((a, b) => b.lastLoginAt.localeCompare(a.lastLoginAt));
|
|
144
|
+
}, "signedInClients");
|
|
145
|
+
|
|
146
|
+
export {
|
|
147
|
+
httpActivityFile,
|
|
148
|
+
calledTools,
|
|
149
|
+
activityRecorder,
|
|
150
|
+
ACCESS_SECONDS,
|
|
151
|
+
REFRESH_SECONDS,
|
|
152
|
+
readStored,
|
|
153
|
+
mcpHttpMarker,
|
|
154
|
+
httpLogFile,
|
|
155
|
+
httpLockFile,
|
|
156
|
+
httpLaunchFile,
|
|
157
|
+
readHttpLaunch,
|
|
158
|
+
readHttpLock,
|
|
159
|
+
httpLock,
|
|
160
|
+
signedInClients
|
|
161
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { createRequire as __bundleRequire } from "node:module";
|
|
2
|
+
const require = __bundleRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
unit
|
|
5
|
+
} from "./chunk-NOKFJJPA.js";
|
|
6
|
+
import {
|
|
7
|
+
CliError
|
|
8
|
+
} from "./chunk-YIMI6O7R.js";
|
|
9
|
+
import {
|
|
10
|
+
__name
|
|
11
|
+
} from "./chunk-ZVVMGPBJ.js";
|
|
12
|
+
|
|
13
|
+
// node_modules/.pnpm/@wirecat+cli-core@0.473.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_39633e3162553a2c86dde989a9811fcb/node_modules/@wirecat/cli-core/dist/embeddings/remote.js
|
|
14
|
+
import { setTimeout } from "node:timers/promises";
|
|
15
|
+
var OPENAI_URL = "https://api.openai.com/v1";
|
|
16
|
+
var OPENAI_MODELS = {
|
|
17
|
+
"text-embedding-3-small": { dims: 1536, perMillion: 0.02 },
|
|
18
|
+
"text-embedding-3-large": { dims: 3072, perMillion: 0.13 }
|
|
19
|
+
};
|
|
20
|
+
var DEFAULT_OPENAI_MODEL = "text-embedding-3-small";
|
|
21
|
+
var PER_REQUEST = 256;
|
|
22
|
+
var LOCAL = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "[::1]", "::1"]);
|
|
23
|
+
var isLocal = /* @__PURE__ */ __name((baseUrl) => LOCAL.has(new URL(baseUrl).hostname), "isLocal");
|
|
24
|
+
var remoteModel = /* @__PURE__ */ __name(({ model = DEFAULT_OPENAI_MODEL, baseUrl, dims }) => {
|
|
25
|
+
const known = baseUrl === void 0 ? OPENAI_MODELS[model] : void 0;
|
|
26
|
+
if (baseUrl === void 0 && !known) {
|
|
27
|
+
throw new CliError("validation_error", `OpenAI has no embedding model ${model} here \u2014 one of: ${Object.keys(OPENAI_MODELS).join(", ")}; another server takes --base-url`);
|
|
28
|
+
}
|
|
29
|
+
const size = dims ?? known?.dims;
|
|
30
|
+
if (size === void 0)
|
|
31
|
+
throw new CliError("validation_error", "with --base-url, say the vector size with --dims");
|
|
32
|
+
return {
|
|
33
|
+
provider: baseUrl === void 0 ? "openai" : `url:${new URL(baseUrl).host}`,
|
|
34
|
+
model,
|
|
35
|
+
dims: size,
|
|
36
|
+
baseUrl: baseUrl ?? OPENAI_URL,
|
|
37
|
+
shorten: known !== void 0 && size !== known.dims,
|
|
38
|
+
...known ? { price: { perMillion: known.perMillion, read: "2026-10-02" } } : {}
|
|
39
|
+
};
|
|
40
|
+
}, "remoteModel");
|
|
41
|
+
var remoteKey = /* @__PURE__ */ __name(({ provider, model, dims }) => `${provider}:${model}:${dims}`, "remoteKey");
|
|
42
|
+
var openRemote = /* @__PURE__ */ __name((remote, apiKey, { concurrency = 4, fetch: post = fetch, tries = 5 } = {}) => {
|
|
43
|
+
const request = /* @__PURE__ */ __name(async (input) => {
|
|
44
|
+
for (let attempt = 1; ; attempt++) {
|
|
45
|
+
let response;
|
|
46
|
+
try {
|
|
47
|
+
response = await post(`${remote.baseUrl.replace(/\/$/, "")}/embeddings`, {
|
|
48
|
+
method: "POST",
|
|
49
|
+
headers: {
|
|
50
|
+
"content-type": "application/json",
|
|
51
|
+
...apiKey ? { authorization: `Bearer ${apiKey}` } : {}
|
|
52
|
+
},
|
|
53
|
+
body: JSON.stringify({
|
|
54
|
+
model: remote.model,
|
|
55
|
+
input,
|
|
56
|
+
encoding_format: "float",
|
|
57
|
+
...remote.shorten ? { dimensions: remote.dims } : {}
|
|
58
|
+
})
|
|
59
|
+
});
|
|
60
|
+
} catch {
|
|
61
|
+
if (attempt >= tries)
|
|
62
|
+
throw new CliError("network_error", `${remote.provider} could not be reached`);
|
|
63
|
+
await setTimeout(1e3 * attempt);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (response.ok) {
|
|
67
|
+
const body = await response.json();
|
|
68
|
+
const data = [...body.data ?? []].sort((a, b) => a.index - b.index);
|
|
69
|
+
if (data.length !== input.length || data.some(({ embedding }) => embedding.length !== remote.dims)) {
|
|
70
|
+
throw new CliError("invalid_response", `${remote.provider} answered with vectors of another number or size than ${input.length} \xD7 ${remote.dims}`);
|
|
71
|
+
}
|
|
72
|
+
return data.map(({ embedding }) => unit(Float32Array.from(embedding)));
|
|
73
|
+
}
|
|
74
|
+
const code = await errorCode(response);
|
|
75
|
+
if (response.status === 401 || response.status === 403) {
|
|
76
|
+
throw new CliError("authentication_error", `${remote.provider} refused the key (HTTP ${response.status}${code}) \u2014 set it again with \`models keys set\``);
|
|
77
|
+
}
|
|
78
|
+
const again = response.status === 429 || response.status >= 500;
|
|
79
|
+
if (!again || attempt >= tries) {
|
|
80
|
+
throw new CliError(response.status === 429 ? "rate_limited" : "provider_error", `${remote.provider} answered HTTP ${response.status}${code}`);
|
|
81
|
+
}
|
|
82
|
+
const wait = Number(response.headers.get("retry-after"));
|
|
83
|
+
await setTimeout(Number.isFinite(wait) && wait > 0 ? wait * 1e3 : 1e3 * 2 ** attempt);
|
|
84
|
+
}
|
|
85
|
+
}, "request");
|
|
86
|
+
return {
|
|
87
|
+
model: { id: remote.model, dims: remote.dims },
|
|
88
|
+
embed: /* @__PURE__ */ __name(async (texts) => {
|
|
89
|
+
const parts = [];
|
|
90
|
+
for (let start = 0; start < texts.length; start += PER_REQUEST)
|
|
91
|
+
parts.push(texts.slice(start, start + PER_REQUEST));
|
|
92
|
+
const results = new Array(parts.length);
|
|
93
|
+
let next = 0;
|
|
94
|
+
await Promise.all(Array.from({ length: Math.min(concurrency, parts.length) }, async () => {
|
|
95
|
+
for (let index = next++; index < parts.length; index = next++)
|
|
96
|
+
results[index] = await request(parts[index]);
|
|
97
|
+
}));
|
|
98
|
+
return results.flat();
|
|
99
|
+
}, "embed"),
|
|
100
|
+
close: /* @__PURE__ */ __name(async () => {
|
|
101
|
+
}, "close")
|
|
102
|
+
};
|
|
103
|
+
}, "openRemote");
|
|
104
|
+
var errorCode = /* @__PURE__ */ __name(async (response) => {
|
|
105
|
+
try {
|
|
106
|
+
const body = await response.json();
|
|
107
|
+
const code = body.error?.code ?? body.error?.type;
|
|
108
|
+
return typeof code === "string" && /^[\w.-]{1,64}$/.test(code) ? `, ${code}` : "";
|
|
109
|
+
} catch {
|
|
110
|
+
return "";
|
|
111
|
+
}
|
|
112
|
+
}, "errorCode");
|
|
113
|
+
|
|
114
|
+
export {
|
|
115
|
+
OPENAI_URL,
|
|
116
|
+
OPENAI_MODELS,
|
|
117
|
+
DEFAULT_OPENAI_MODEL,
|
|
118
|
+
isLocal,
|
|
119
|
+
remoteModel,
|
|
120
|
+
remoteKey,
|
|
121
|
+
openRemote
|
|
122
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createRequire as __bundleRequire } from "node:module";
|
|
2
|
+
const require = __bundleRequire(import.meta.url);
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
10
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
11
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
12
|
+
}) : x)(function(x) {
|
|
13
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
14
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
15
|
+
});
|
|
16
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
17
|
+
try {
|
|
18
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
19
|
+
} catch (e) {
|
|
20
|
+
throw mod = 0, e;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
var __export = (target, all) => {
|
|
24
|
+
for (var name in all)
|
|
25
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
26
|
+
};
|
|
27
|
+
var __copyProps = (to, from, except, desc) => {
|
|
28
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
29
|
+
for (let key of __getOwnPropNames(from))
|
|
30
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
31
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
32
|
+
}
|
|
33
|
+
return to;
|
|
34
|
+
};
|
|
35
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
36
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
37
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
38
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
39
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
40
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
41
|
+
mod
|
|
42
|
+
));
|
|
43
|
+
|
|
44
|
+
export {
|
|
45
|
+
__name,
|
|
46
|
+
__require,
|
|
47
|
+
__commonJS,
|
|
48
|
+
__export,
|
|
49
|
+
__toESM
|
|
50
|
+
};
|