reasonix 0.48.0 → 0.49.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 +9 -0
- package/dashboard/dist/app.js +123 -16
- package/dashboard/dist/app.js.map +1 -1
- package/dist/cli/{acp-4ROCGYNH.js → acp-WFQIC6SO.js} +52 -135
- package/dist/cli/acp-WFQIC6SO.js.map +1 -0
- package/dist/cli/chat-D32JGNVH.js +51 -0
- package/dist/cli/{chunk-S2RMQULY.js → chunk-23ZPCIPR.js} +12 -9
- package/dist/cli/chunk-23ZPCIPR.js.map +1 -0
- package/dist/cli/{chunk-TKVXTQ3T.js → chunk-3ZZXQ3CZ.js} +27 -27
- package/dist/cli/chunk-3ZZXQ3CZ.js.map +1 -0
- package/dist/cli/{chunk-5OHHAQ4W.js → chunk-7AST3QQ3.js} +2 -2
- package/dist/cli/{chunk-MRZG4GBF.js → chunk-7JTKBJ2G.js} +3 -3
- package/dist/cli/{chunk-X53B3JIX.js → chunk-7X4JJOO7.js} +2 -61
- package/dist/cli/{chunk-X53B3JIX.js.map → chunk-7X4JJOO7.js.map} +1 -1
- package/dist/cli/{chunk-MOJYKO2A.js → chunk-ASOLXV67.js} +3 -3
- package/dist/cli/{chunk-7M4YYMKW.js → chunk-AWEULQG6.js} +49 -56
- package/dist/cli/{chunk-7M4YYMKW.js.map → chunk-AWEULQG6.js.map} +1 -1
- package/dist/cli/{chunk-HR5NBKEM.js → chunk-DFX5ZH5L.js} +2 -2
- package/dist/cli/{chunk-3WGTGXO4.js → chunk-GNS7BAT2.js} +4 -4
- package/dist/cli/chunk-GNS7BAT2.js.map +1 -0
- package/dist/cli/{chunk-TE5UIIFL.js → chunk-J2IHQGPQ.js} +12 -6
- package/dist/cli/chunk-J2IHQGPQ.js.map +1 -0
- package/dist/cli/{chunk-I4M5QJNL.js → chunk-JGTX4RRQ.js} +3 -3
- package/dist/cli/{chunk-FY4S7TJZ.js → chunk-JNTMOX7G.js} +10 -2
- package/dist/cli/chunk-JNTMOX7G.js.map +1 -0
- package/dist/cli/{chunk-OB4BUJBL.js → chunk-MGTBP7GG.js} +5 -2
- package/dist/cli/chunk-MGTBP7GG.js.map +1 -0
- package/dist/cli/{chunk-OPYALNTT.js → chunk-MQWO32ZD.js} +387 -184
- package/dist/cli/chunk-MQWO32ZD.js.map +1 -0
- package/dist/cli/{chunk-2QSTA2QV.js → chunk-O5LIHAMP.js} +8 -4
- package/dist/cli/chunk-O5LIHAMP.js.map +1 -0
- package/dist/cli/{chunk-NMQSUNLB.js → chunk-PB3MAFEI.js} +6 -3
- package/dist/cli/chunk-PB3MAFEI.js.map +1 -0
- package/dist/cli/{chunk-H4CCXMDD.js → chunk-PEMG6CUB.js} +2 -2
- package/dist/cli/{chunk-RUDBUHO4.js → chunk-PXBQ6IZ7.js} +3 -3
- package/dist/cli/{chunk-J2TQAWOM.js → chunk-Q46B3Z7H.js} +25 -10
- package/dist/cli/{chunk-J2TQAWOM.js.map → chunk-Q46B3Z7H.js.map} +1 -1
- package/dist/cli/{chunk-6MZTZO7A.js → chunk-QF32ROX2.js} +2152 -2613
- package/dist/cli/chunk-QF32ROX2.js.map +1 -0
- package/dist/cli/{chunk-OG5JANQ4.js → chunk-QX5TWXRZ.js} +2 -2
- package/dist/cli/{chunk-V4Y732RQ.js → chunk-TAIKVL35.js} +2 -2
- package/dist/cli/{chunk-B5CZL2SE.js → chunk-TEDWJKEI.js} +4 -9
- package/dist/cli/chunk-TEDWJKEI.js.map +1 -0
- package/dist/cli/{chunk-EMMENC4O.js → chunk-U5XQDCK7.js} +5 -5
- package/dist/cli/{chunk-DOWEOA6E.js → chunk-W46ZMNKO.js} +3 -3
- package/dist/cli/{chunk-CDVSFSAK.js → chunk-WMTMMSXU.js} +184 -8
- package/dist/cli/chunk-WMTMMSXU.js.map +1 -0
- package/dist/cli/{chunk-YW63N3ZR.js → chunk-YEF7C4XI.js} +270 -96
- package/dist/cli/chunk-YEF7C4XI.js.map +1 -0
- package/dist/cli/{chunk-JMDE6IO3.js → chunk-ZAEJWKXB.js} +2 -2
- package/dist/cli/chunk-ZWHSHFDP.js +6173 -0
- package/dist/cli/chunk-ZWHSHFDP.js.map +1 -0
- package/dist/cli/{code-PMPJWXEO.js → code-R4IHI7SR.js} +30 -30
- package/dist/cli/{commands-QS6TG4G3.js → commands-DRHFCYMO.js} +4 -4
- package/dist/cli/{commit-XPRSKUBF.js → commit-AG5KB4YP.js} +3 -3
- package/dist/cli/{desktop-562OPWIU.js → desktop-JGL6GORA.js} +60 -23
- package/dist/cli/desktop-JGL6GORA.js.map +1 -0
- package/dist/cli/{diff-I6W4AUWJ.js → diff-4Z7ETWZO.js} +9 -9
- package/dist/cli/{doctor-6XVZKT4U.js → doctor-VA3RHQLB.js} +9 -9
- package/dist/cli/index.js +37 -36
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/{mcp-7W7ANO2Y.js → mcp-LZO4HXFA.js} +34 -23
- package/dist/cli/mcp-LZO4HXFA.js.map +1 -0
- package/dist/cli/{mcp-browse-LA4I4YIZ.js → mcp-browse-C3GXVMYZ.js} +3 -3
- package/dist/cli/{mcp-inspect-LWXXU7BY.js → mcp-inspect-ZMYUNFDS.js} +2 -2
- package/dist/cli/{prompt-RKZD4X6Y.js → prompt-MC3U5KRP.js} +5 -4
- package/dist/cli/{prune-sessions-SEWX7GP6.js → prune-sessions-OEPFH4N6.js} +11 -7
- package/dist/cli/prune-sessions-OEPFH4N6.js.map +1 -0
- package/dist/cli/{replay-2X7MVXOI.js → replay-4TP7ZUMZ.js} +10 -10
- package/dist/cli/{run-TPKXIJ27.js → run-6MXQYBOE.js} +16 -15
- package/dist/cli/run-6MXQYBOE.js.map +1 -0
- package/dist/cli/{server-NHQ3QXOZ.js → server-Z3IMJNNI.js} +65 -12
- package/dist/cli/server-Z3IMJNNI.js.map +1 -0
- package/dist/cli/{sessions-2A4DGSHA.js → sessions-NXQ5SAV7.js} +18 -18
- package/dist/cli/sessions-NXQ5SAV7.js.map +1 -0
- package/dist/cli/{setup-GOLP7J4C.js → setup-LHZELI6I.js} +6 -6
- package/dist/cli/{stats-CGDAFDKI.js → stats-SUIJ3QWY.js} +6 -6
- package/dist/cli/{version-FIL4ZFOS.js → version-BIFONEUB.js} +13 -13
- package/dist/index.d.ts +71 -17
- package/dist/index.js +1040 -391
- package/dist/index.js.map +1 -1
- package/package.json +6 -2
- package/dist/cli/acp-4ROCGYNH.js.map +0 -1
- package/dist/cli/chat-GZNB5625.js +0 -51
- package/dist/cli/chunk-2QSTA2QV.js.map +0 -1
- package/dist/cli/chunk-3WGTGXO4.js.map +0 -1
- package/dist/cli/chunk-6MZTZO7A.js.map +0 -1
- package/dist/cli/chunk-B5CZL2SE.js.map +0 -1
- package/dist/cli/chunk-CDVSFSAK.js.map +0 -1
- package/dist/cli/chunk-FY4S7TJZ.js.map +0 -1
- package/dist/cli/chunk-NMQSUNLB.js.map +0 -1
- package/dist/cli/chunk-OB4BUJBL.js.map +0 -1
- package/dist/cli/chunk-OPYALNTT.js.map +0 -1
- package/dist/cli/chunk-S2RMQULY.js.map +0 -1
- package/dist/cli/chunk-TE5UIIFL.js.map +0 -1
- package/dist/cli/chunk-TKVXTQ3T.js.map +0 -1
- package/dist/cli/chunk-WZGNXR6E.js +0 -2020
- package/dist/cli/chunk-WZGNXR6E.js.map +0 -1
- package/dist/cli/chunk-YW63N3ZR.js.map +0 -1
- package/dist/cli/desktop-562OPWIU.js.map +0 -1
- package/dist/cli/mcp-7W7ANO2Y.js.map +0 -1
- package/dist/cli/prune-sessions-SEWX7GP6.js.map +0 -1
- package/dist/cli/run-TPKXIJ27.js.map +0 -1
- package/dist/cli/server-NHQ3QXOZ.js.map +0 -1
- package/dist/cli/sessions-2A4DGSHA.js.map +0 -1
- /package/dist/cli/{chat-GZNB5625.js.map → chat-D32JGNVH.js.map} +0 -0
- /package/dist/cli/{chunk-5OHHAQ4W.js.map → chunk-7AST3QQ3.js.map} +0 -0
- /package/dist/cli/{chunk-MRZG4GBF.js.map → chunk-7JTKBJ2G.js.map} +0 -0
- /package/dist/cli/{chunk-MOJYKO2A.js.map → chunk-ASOLXV67.js.map} +0 -0
- /package/dist/cli/{chunk-HR5NBKEM.js.map → chunk-DFX5ZH5L.js.map} +0 -0
- /package/dist/cli/{chunk-I4M5QJNL.js.map → chunk-JGTX4RRQ.js.map} +0 -0
- /package/dist/cli/{chunk-H4CCXMDD.js.map → chunk-PEMG6CUB.js.map} +0 -0
- /package/dist/cli/{chunk-RUDBUHO4.js.map → chunk-PXBQ6IZ7.js.map} +0 -0
- /package/dist/cli/{chunk-OG5JANQ4.js.map → chunk-QX5TWXRZ.js.map} +0 -0
- /package/dist/cli/{chunk-V4Y732RQ.js.map → chunk-TAIKVL35.js.map} +0 -0
- /package/dist/cli/{chunk-EMMENC4O.js.map → chunk-U5XQDCK7.js.map} +0 -0
- /package/dist/cli/{chunk-DOWEOA6E.js.map → chunk-W46ZMNKO.js.map} +0 -0
- /package/dist/cli/{chunk-JMDE6IO3.js.map → chunk-ZAEJWKXB.js.map} +0 -0
- /package/dist/cli/{code-PMPJWXEO.js.map → code-R4IHI7SR.js.map} +0 -0
- /package/dist/cli/{commands-QS6TG4G3.js.map → commands-DRHFCYMO.js.map} +0 -0
- /package/dist/cli/{commit-XPRSKUBF.js.map → commit-AG5KB4YP.js.map} +0 -0
- /package/dist/cli/{diff-I6W4AUWJ.js.map → diff-4Z7ETWZO.js.map} +0 -0
- /package/dist/cli/{doctor-6XVZKT4U.js.map → doctor-VA3RHQLB.js.map} +0 -0
- /package/dist/cli/{mcp-browse-LA4I4YIZ.js.map → mcp-browse-C3GXVMYZ.js.map} +0 -0
- /package/dist/cli/{mcp-inspect-LWXXU7BY.js.map → mcp-inspect-ZMYUNFDS.js.map} +0 -0
- /package/dist/cli/{prompt-RKZD4X6Y.js.map → prompt-MC3U5KRP.js.map} +0 -0
- /package/dist/cli/{replay-2X7MVXOI.js.map → replay-4TP7ZUMZ.js.map} +0 -0
- /package/dist/cli/{setup-GOLP7J4C.js.map → setup-LHZELI6I.js.map} +0 -0
- /package/dist/cli/{stats-CGDAFDKI.js.map → stats-SUIJ3QWY.js.map} +0 -0
- /package/dist/cli/{version-FIL4ZFOS.js.map → version-BIFONEUB.js.map} +0 -0
|
@@ -11,11 +11,14 @@ import {
|
|
|
11
11
|
MCP_CATALOG,
|
|
12
12
|
mcpCommandFor
|
|
13
13
|
} from "./chunk-PLHAZOLZ.js";
|
|
14
|
+
import {
|
|
15
|
+
t
|
|
16
|
+
} from "./chunk-YEF7C4XI.js";
|
|
14
17
|
import {
|
|
15
18
|
defaultConfigPath,
|
|
16
19
|
readConfig,
|
|
17
20
|
writeConfig
|
|
18
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-WMTMMSXU.js";
|
|
19
22
|
import "./chunk-TUK7OWJA.js";
|
|
20
23
|
|
|
21
24
|
// src/cli/commands/mcp.ts
|
|
@@ -66,7 +69,7 @@ async function mcpListCommand(opts = {}) {
|
|
|
66
69
|
console.log(JSON.stringify(MCP_CATALOG, null, 2));
|
|
67
70
|
return;
|
|
68
71
|
}
|
|
69
|
-
console.log(
|
|
72
|
+
console.log(t("mcpCli.bundledCatalog"));
|
|
70
73
|
console.log("");
|
|
71
74
|
for (const entry of MCP_CATALOG) {
|
|
72
75
|
console.log(` ${pad(entry.name, 12)} ${entry.summary}`);
|
|
@@ -107,8 +110,8 @@ async function mcpListCommand(opts = {}) {
|
|
|
107
110
|
);
|
|
108
111
|
return;
|
|
109
112
|
}
|
|
110
|
-
const ageStr = result.fromCache ?
|
|
111
|
-
const moreStr = result.hasMore ? "
|
|
113
|
+
const ageStr = result.fromCache ? t("mcpCli.cachedAge", { age: fmtAge(Date.now() - result.fetchedAt) }) : t("mcpCli.justFetched");
|
|
114
|
+
const moreStr = result.hasMore ? t("mcpCli.moreAvailable") : t("mcpCli.allLoaded");
|
|
112
115
|
console.log(
|
|
113
116
|
`MCP servers from ${result.source} registry (${result.entries.length} loaded, ${moreStr}, ${ageStr}):`
|
|
114
117
|
);
|
|
@@ -118,15 +121,13 @@ async function mcpListCommand(opts = {}) {
|
|
|
118
121
|
console.log("");
|
|
119
122
|
for (const e of shown) printEntry(e);
|
|
120
123
|
if (ranked.length > limit) {
|
|
121
|
-
console.log(
|
|
122
|
-
` \u2026 ${ranked.length - limit} more loaded \u2014 use \`reasonix mcp search <query>\` to filter`
|
|
123
|
-
);
|
|
124
|
+
console.log(t("mcpCli.moreLoaded", { count: ranked.length - limit }));
|
|
124
125
|
}
|
|
125
126
|
if (result.hasMore) {
|
|
126
|
-
console.log("
|
|
127
|
+
console.log(t("mcpCli.morePagesAvailable"));
|
|
127
128
|
}
|
|
128
129
|
console.log("");
|
|
129
|
-
console.log("
|
|
130
|
+
console.log(t("mcpCli.installHint"));
|
|
130
131
|
}
|
|
131
132
|
function matchFilter(query) {
|
|
132
133
|
const q = query.toLowerCase();
|
|
@@ -135,7 +136,7 @@ function matchFilter(query) {
|
|
|
135
136
|
async function mcpSearchCommand(query, opts = {}) {
|
|
136
137
|
const q = query.trim();
|
|
137
138
|
if (!q) {
|
|
138
|
-
console.error("
|
|
139
|
+
console.error(t("mcpCli.usageSearch"));
|
|
139
140
|
process.exit(1);
|
|
140
141
|
}
|
|
141
142
|
const handle = await openRegistry({ noCache: opts.refresh, onProgress: progressToStderr });
|
|
@@ -171,16 +172,22 @@ async function mcpSearchCommand(query, opts = {}) {
|
|
|
171
172
|
}
|
|
172
173
|
if (shown.length === 0) {
|
|
173
174
|
console.log(
|
|
174
|
-
|
|
175
|
+
t("mcpCli.noMatchesFor", { q, count: result.entries.length, source: result.source })
|
|
175
176
|
);
|
|
176
177
|
return;
|
|
177
178
|
}
|
|
178
179
|
console.log(
|
|
179
|
-
|
|
180
|
+
t("mcpCli.matchCount", {
|
|
181
|
+
count: matches.length,
|
|
182
|
+
q,
|
|
183
|
+
source: result.source,
|
|
184
|
+
loaded: result.entries.length
|
|
185
|
+
})
|
|
180
186
|
);
|
|
181
187
|
console.log("");
|
|
182
188
|
for (const e of shown) printEntry(e);
|
|
183
|
-
if (matches.length > limit)
|
|
189
|
+
if (matches.length > limit)
|
|
190
|
+
console.log(t("mcpCli.moreMatches", { count: matches.length - limit }));
|
|
184
191
|
}
|
|
185
192
|
function findEntry(entries, name) {
|
|
186
193
|
const exact = entries.find((e) => e.name === name);
|
|
@@ -195,7 +202,7 @@ function findEntry(entries, name) {
|
|
|
195
202
|
async function mcpInstallCommand(name, opts = {}) {
|
|
196
203
|
const target = name.trim();
|
|
197
204
|
if (!target) {
|
|
198
|
-
console.error("
|
|
205
|
+
console.error(t("mcpCli.usageInstall"));
|
|
199
206
|
process.exit(1);
|
|
200
207
|
}
|
|
201
208
|
const handle = await openRegistry({ noCache: opts.refresh, onProgress: progressToStderr });
|
|
@@ -215,10 +222,14 @@ async function mcpInstallCommand(name, opts = {}) {
|
|
|
215
222
|
const entry = findEntry(handle.cache.entries, target);
|
|
216
223
|
if (!entry) {
|
|
217
224
|
console.error(
|
|
218
|
-
|
|
225
|
+
t("mcpCli.noServerFound", {
|
|
226
|
+
target,
|
|
227
|
+
pages: handle.cache.pagination.pagesLoaded,
|
|
228
|
+
source: handle.source
|
|
229
|
+
})
|
|
219
230
|
);
|
|
220
231
|
if (handle.cache.pagination.nextCursor !== null) {
|
|
221
|
-
console.error(
|
|
232
|
+
console.error(t("mcpCli.noServerTryMore", { target }));
|
|
222
233
|
}
|
|
223
234
|
process.exit(1);
|
|
224
235
|
}
|
|
@@ -229,27 +240,27 @@ async function mcpInstallCommand(name, opts = {}) {
|
|
|
229
240
|
if (fetched) entry.install = fetched;
|
|
230
241
|
}
|
|
231
242
|
if (!entry.install) {
|
|
232
|
-
console.error(
|
|
233
|
-
`Could not derive install metadata for "${entry.name}" \u2014 try \`npx -y @smithery/cli install ${entry.name}\` directly.`
|
|
234
|
-
);
|
|
243
|
+
console.error(t("mcpCli.noInstallMeta", { name: entry.name }));
|
|
235
244
|
process.exit(1);
|
|
236
245
|
}
|
|
237
246
|
let spec;
|
|
238
247
|
try {
|
|
239
248
|
spec = specStringFor(entry.name, entry.install);
|
|
240
249
|
} catch (err) {
|
|
241
|
-
console.error(
|
|
250
|
+
console.error(
|
|
251
|
+
t("mcpCli.buildSpecFailed", { name: entry.name, message: err.message })
|
|
252
|
+
);
|
|
242
253
|
process.exit(1);
|
|
243
254
|
}
|
|
244
255
|
const cfg = readConfig();
|
|
245
256
|
const existing = cfg.mcp ?? [];
|
|
246
257
|
if (existing.includes(spec)) {
|
|
247
|
-
console.log(
|
|
258
|
+
console.log(t("mcpCli.alreadyInstalled", { spec }));
|
|
248
259
|
return;
|
|
249
260
|
}
|
|
250
261
|
const next = { ...cfg, mcp: [...existing, spec] };
|
|
251
262
|
writeConfig(next);
|
|
252
|
-
console.log(
|
|
263
|
+
console.log(t("mcpCli.installed", { spec: entry.name }));
|
|
253
264
|
console.log(` spec: ${spec}`);
|
|
254
265
|
const installedName = parseInstalledName(spec);
|
|
255
266
|
if (entry.install.requiredEnv?.length) {
|
|
@@ -274,4 +285,4 @@ export {
|
|
|
274
285
|
mcpListCommand,
|
|
275
286
|
mcpSearchCommand
|
|
276
287
|
};
|
|
277
|
-
//# sourceMappingURL=mcp-
|
|
288
|
+
//# sourceMappingURL=mcp-LZO4HXFA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/mcp.ts"],"sourcesContent":["import { defaultConfigPath, readConfig, writeConfig } from \"../../config.js\";\nimport { t } from \"../../i18n/index.js\";\nimport { MCP_CATALOG, mcpCommandFor } from \"../../mcp/catalog.js\";\nimport {\n type FetchProgress,\n fetchSmitheryDetail,\n handleToFetchResult,\n loadMorePages,\n openRegistry,\n specStringFor,\n} from \"../../mcp/registry-fetch.js\";\nimport type { RegistryEntry } from \"../../mcp/registry-types.js\";\n\nconst DEFAULT_LIST_LIMIT = 30;\n/** Soft cap on how far `search` walks the registry on first run. */\nconst SEARCH_PAGE_CAP = 20;\n/** Soft cap on how far `install` walks looking for a name. */\nconst INSTALL_PAGE_CAP = 30;\n\nconst progressToStderr: FetchProgress = ({ source, page, entries }) => {\n if (page === 1 || page % 5 === 0) {\n process.stderr.write(`\\r▸ fetching ${source} registry · page ${page} · ${entries} entries`);\n }\n};\n\nfunction finishProgressLine(): void {\n if (process.stderr.isTTY) process.stderr.write(\"\\r\\x1b[K\");\n else process.stderr.write(\"\\n\");\n}\n\nexport interface McpListOptions {\n json?: boolean;\n /** Skip network — only show the bundled MCP_CATALOG entries. */\n local?: boolean;\n /** Bypass cache TTL. */\n refresh?: boolean;\n /** How many entries to show. Default 30. */\n limit?: number;\n /** Eagerly load this many pages before showing. Default 1. */\n pages?: number;\n /** Walk all pages of the registry (slow on first run). */\n all?: boolean;\n}\n\nexport interface McpSearchOptions {\n json?: boolean;\n refresh?: boolean;\n limit?: number;\n /** Cap how many pages to walk while searching. Default 20. */\n maxPages?: number;\n}\n\nexport interface McpInstallOptions {\n refresh?: boolean;\n /** Cap how many pages to walk while looking for the name. Default 30. */\n maxPages?: number;\n}\n\nfunction rankEntries(entries: RegistryEntry[]): RegistryEntry[] {\n return [...entries].sort((a, b) => {\n const ap = a.popularity ?? -1;\n const bp = b.popularity ?? -1;\n if (ap !== bp) return bp - ap;\n return a.name.localeCompare(b.name);\n });\n}\n\nfunction pad(s: string, width: number): string {\n return s.length >= width ? s : s + \" \".repeat(width - s.length);\n}\n\nfunction fmtAge(ms: number): string {\n const sec = Math.floor(ms / 1000);\n if (sec < 60) return `${sec}s ago`;\n if (sec < 3600) return `${Math.floor(sec / 60)}m ago`;\n if (sec < 86400) return `${Math.floor(sec / 3600)}h ago`;\n return `${Math.floor(sec / 86400)}d ago`;\n}\n\nfunction printEntry(e: RegistryEntry, indent = \" \"): void {\n const tag =\n e.source === \"official\" ? \"[official]\" : e.source === \"smithery\" ? \"[smithery]\" : \"[local]\";\n const pop = e.popularity !== undefined ? ` · ${e.popularity.toLocaleString()} uses` : \"\";\n console.log(`${indent}${pad(e.name, 36)} ${tag}${pop}`);\n if (e.description) console.log(`${indent} ${e.description}`);\n if (e.install?.requiredEnv?.length) {\n console.log(`${indent} needs: ${e.install.requiredEnv.join(\", \")}`);\n } else if (!e.install) {\n console.log(`${indent} (smithery listing — install detail fetched lazily on install)`);\n }\n}\n\nexport async function mcpListCommand(opts: McpListOptions = {}): Promise<void> {\n if (opts.local) {\n if (opts.json) {\n console.log(JSON.stringify(MCP_CATALOG, null, 2));\n return;\n }\n console.log(t(\"mcpCli.bundledCatalog\"));\n console.log(\"\");\n for (const entry of MCP_CATALOG) {\n console.log(` ${pad(entry.name, 12)} ${entry.summary}`);\n console.log(` ${mcpCommandFor(entry)}`);\n if (entry.note) console.log(` · ${entry.note}`);\n console.log(\"\");\n }\n return;\n }\n\n const handle = await openRegistry({ noCache: opts.refresh, onProgress: progressToStderr });\n const wantedPages = opts.all ? Number.POSITIVE_INFINITY : (opts.pages ?? 1);\n const additional = Math.max(0, wantedPages - handle.cache.pagination.pagesLoaded);\n if (additional > 0) {\n await loadMorePages(handle, {\n pages: additional,\n onProgress: progressToStderr,\n });\n }\n finishProgressLine();\n\n const result = handleToFetchResult(handle);\n const ranked = rankEntries(result.entries);\n const limit = opts.limit ?? DEFAULT_LIST_LIMIT;\n const shown = ranked.slice(0, limit);\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n source: result.source,\n fromCache: result.fromCache,\n fetchedAt: result.fetchedAt,\n loaded: result.entries.length,\n hasMore: result.hasMore,\n entries: shown,\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n const ageStr = result.fromCache\n ? t(\"mcpCli.cachedAge\", { age: fmtAge(Date.now() - result.fetchedAt) })\n : t(\"mcpCli.justFetched\");\n const moreStr = result.hasMore ? t(\"mcpCli.moreAvailable\") : t(\"mcpCli.allLoaded\");\n console.log(\n `MCP servers from ${result.source} registry (${result.entries.length} loaded, ${moreStr}, ${ageStr}):`,\n );\n if (result.errors.length > 0) {\n for (const e of result.errors) console.error(` warn: ${e}`);\n }\n console.log(\"\");\n for (const e of shown) printEntry(e);\n if (ranked.length > limit) {\n console.log(t(\"mcpCli.moreLoaded\", { count: ranked.length - limit }));\n }\n if (result.hasMore) {\n console.log(t(\"mcpCli.morePagesAvailable\"));\n }\n console.log(\"\");\n console.log(t(\"mcpCli.installHint\"));\n}\n\nfunction matchFilter(query: string): (e: RegistryEntry) => boolean {\n const q = query.toLowerCase();\n return (e) => `${e.name} ${e.title} ${e.description}`.toLowerCase().includes(q);\n}\n\nexport async function mcpSearchCommand(query: string, opts: McpSearchOptions = {}): Promise<void> {\n const q = query.trim();\n if (!q) {\n console.error(t(\"mcpCli.usageSearch\"));\n process.exit(1);\n }\n const handle = await openRegistry({ noCache: opts.refresh, onProgress: progressToStderr });\n const filter = matchFilter(q);\n const limit = opts.limit ?? DEFAULT_LIST_LIMIT;\n const cap = opts.maxPages ?? SEARCH_PAGE_CAP;\n\n await loadMorePages(handle, {\n pages: Math.max(0, cap - handle.cache.pagination.pagesLoaded),\n matchTarget: limit,\n filter,\n onProgress: progressToStderr,\n });\n finishProgressLine();\n\n const result = handleToFetchResult(handle);\n const matches = rankEntries(result.entries.filter(filter));\n const shown = matches.slice(0, limit);\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n query: q,\n source: result.source,\n loaded: result.entries.length,\n hasMore: result.hasMore,\n matches: matches.length,\n entries: shown,\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n if (shown.length === 0) {\n console.log(\n t(\"mcpCli.noMatchesFor\", { q, count: result.entries.length, source: result.source }),\n );\n return;\n }\n console.log(\n t(\"mcpCli.matchCount\", {\n count: matches.length,\n q,\n source: result.source,\n loaded: result.entries.length,\n }),\n );\n console.log(\"\");\n for (const e of shown) printEntry(e);\n if (matches.length > limit)\n console.log(t(\"mcpCli.moreMatches\", { count: matches.length - limit }));\n}\n\nfunction findEntry(entries: RegistryEntry[], name: string): RegistryEntry | null {\n const exact = entries.find((e) => e.name === name);\n if (exact) return exact;\n const lower = name.toLowerCase();\n const ci = entries.find((e) => e.name.toLowerCase() === lower);\n if (ci) return ci;\n const tail = entries.find((e) => e.name.toLowerCase().endsWith(`/${lower}`));\n if (tail) return tail;\n return null;\n}\n\nexport async function mcpInstallCommand(name: string, opts: McpInstallOptions = {}): Promise<void> {\n const target = name.trim();\n if (!target) {\n console.error(t(\"mcpCli.usageInstall\"));\n process.exit(1);\n }\n\n const handle = await openRegistry({ noCache: opts.refresh, onProgress: progressToStderr });\n const lower = target.toLowerCase();\n const filter = (e: RegistryEntry): boolean => {\n const n = e.name.toLowerCase();\n return n === lower || n.endsWith(`/${lower}`) || n.includes(lower);\n };\n const cap = opts.maxPages ?? INSTALL_PAGE_CAP;\n\n await loadMorePages(handle, {\n pages: Math.max(0, cap - handle.cache.pagination.pagesLoaded),\n matchTarget: 1,\n filter,\n onProgress: progressToStderr,\n });\n finishProgressLine();\n\n const entry = findEntry(handle.cache.entries, target);\n if (!entry) {\n console.error(\n t(\"mcpCli.noServerFound\", {\n target,\n pages: handle.cache.pagination.pagesLoaded,\n source: handle.source,\n }),\n );\n if (handle.cache.pagination.nextCursor !== null) {\n console.error(t(\"mcpCli.noServerTryMore\", { target }));\n }\n process.exit(1);\n }\n\n if (!entry.install && entry.source === \"smithery\") {\n process.stderr.write(`▸ fetching smithery install detail for ${entry.name}…\\n`);\n const fetched = await fetchSmitheryDetail(entry.name);\n if (fetched) entry.install = fetched;\n }\n\n if (!entry.install) {\n console.error(t(\"mcpCli.noInstallMeta\", { name: entry.name }));\n process.exit(1);\n }\n\n let spec: string;\n try {\n spec = specStringFor(entry.name, entry.install);\n } catch (err) {\n console.error(\n t(\"mcpCli.buildSpecFailed\", { name: entry.name, message: (err as Error).message }),\n );\n process.exit(1);\n }\n\n const cfg = readConfig();\n const existing = cfg.mcp ?? [];\n if (existing.includes(spec)) {\n console.log(t(\"mcpCli.alreadyInstalled\", { spec }));\n return;\n }\n const next = { ...cfg, mcp: [...existing, spec] };\n writeConfig(next);\n\n console.log(t(\"mcpCli.installed\", { spec: entry.name }));\n console.log(` spec: ${spec}`);\n const installedName = parseInstalledName(spec);\n if (entry.install.requiredEnv?.length) {\n console.log(` needs: ${entry.install.requiredEnv.join(\", \")}`);\n console.log(\" Either export these before launching, or add them to config:\");\n console.log(` mcpEnv.${installedName ?? entry.name} = { ... }`);\n console.log(\n ` (edit ${defaultConfigPath()} — values merge over process.env at spawn)`,\n );\n }\n console.log(\"\");\n console.log(\n \"Use it: reasonix chat (or `reasonix code`) — the server will be bridged automatically.\",\n );\n}\n\nfunction parseInstalledName(spec: string): string | null {\n const match = /^([a-zA-Z_][a-zA-Z0-9_-]*)=/.exec(spec);\n return match ? match[1]! : null;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
require_react,
|
|
11
11
|
use_app_default,
|
|
12
12
|
use_input_default
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-7X4JJOO7.js";
|
|
14
14
|
import {
|
|
15
15
|
loadDotenv
|
|
16
16
|
} from "./chunk-2UQP6H6T.js";
|
|
@@ -23,7 +23,7 @@ import "./chunk-PLHAZOLZ.js";
|
|
|
23
23
|
import {
|
|
24
24
|
readConfig,
|
|
25
25
|
writeConfig
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-WMTMMSXU.js";
|
|
27
27
|
import {
|
|
28
28
|
__toESM
|
|
29
29
|
} from "./chunk-TUK7OWJA.js";
|
|
@@ -175,4 +175,4 @@ async function mcpBrowseCommand(_opts = {}) {
|
|
|
175
175
|
export {
|
|
176
176
|
mcpBrowseCommand
|
|
177
177
|
};
|
|
178
|
-
//# sourceMappingURL=mcp-browse-
|
|
178
|
+
//# sourceMappingURL=mcp-browse-C3GXVMYZ.js.map
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
overlayMatchedSpec,
|
|
15
15
|
parseMcpSpec,
|
|
16
16
|
readConfig
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-WMTMMSXU.js";
|
|
18
18
|
import "./chunk-XXC2BYTV.js";
|
|
19
19
|
import "./chunk-TUK7OWJA.js";
|
|
20
20
|
|
|
@@ -145,4 +145,4 @@ export {
|
|
|
145
145
|
formatMcpInspectFailure,
|
|
146
146
|
mcpInspectCommand
|
|
147
147
|
};
|
|
148
|
-
//# sourceMappingURL=mcp-inspect-
|
|
148
|
+
//# sourceMappingURL=mcp-inspect-ZMYUNFDS.js.map
|
|
@@ -4,13 +4,14 @@ import {
|
|
|
4
4
|
CODE_SYSTEM_PROMPT,
|
|
5
5
|
codeSystemBase,
|
|
6
6
|
codeSystemPrompt
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-O5LIHAMP.js";
|
|
8
|
+
import "./chunk-JNTMOX7G.js";
|
|
9
|
+
import "./chunk-YEF7C4XI.js";
|
|
10
|
+
import "./chunk-WMTMMSXU.js";
|
|
10
11
|
import "./chunk-TUK7OWJA.js";
|
|
11
12
|
export {
|
|
12
13
|
CODE_SYSTEM_PROMPT,
|
|
13
14
|
codeSystemBase,
|
|
14
15
|
codeSystemPrompt
|
|
15
16
|
};
|
|
16
|
-
//# sourceMappingURL=prompt-
|
|
17
|
+
//# sourceMappingURL=prompt-MC3U5KRP.js.map
|
|
@@ -4,36 +4,40 @@ import {
|
|
|
4
4
|
listSessions,
|
|
5
5
|
pruneStaleSessions
|
|
6
6
|
} from "./chunk-RRXUIPWG.js";
|
|
7
|
+
import {
|
|
8
|
+
t
|
|
9
|
+
} from "./chunk-YEF7C4XI.js";
|
|
10
|
+
import "./chunk-WMTMMSXU.js";
|
|
7
11
|
import "./chunk-TUK7OWJA.js";
|
|
8
12
|
|
|
9
13
|
// src/cli/commands/prune-sessions.ts
|
|
10
14
|
function pruneSessionsCommand(opts) {
|
|
11
15
|
const days = opts.days ?? 90;
|
|
12
16
|
if (!Number.isFinite(days) || days < 1) {
|
|
13
|
-
console.error(
|
|
17
|
+
console.error(t("sessions.daysInvalid", { days }));
|
|
14
18
|
process.exit(1);
|
|
15
19
|
}
|
|
16
20
|
if (opts.dryRun) {
|
|
17
21
|
const cutoff = Date.now() - days * 24 * 60 * 60 * 1e3;
|
|
18
22
|
const stale = listSessions().filter((s) => s.mtime.getTime() < cutoff);
|
|
19
23
|
if (stale.length === 0) {
|
|
20
|
-
console.log(
|
|
24
|
+
console.log(t("sessions.noIdleSessions", { days }));
|
|
21
25
|
return;
|
|
22
26
|
}
|
|
23
|
-
console.log(
|
|
27
|
+
console.log(t("sessions.wouldPrune", { count: stale.length, days }));
|
|
24
28
|
for (const s of stale) {
|
|
25
29
|
console.log(` ${s.name}`);
|
|
26
30
|
}
|
|
27
31
|
console.log("");
|
|
28
|
-
console.log("
|
|
32
|
+
console.log(t("sessions.dryRunHint"));
|
|
29
33
|
return;
|
|
30
34
|
}
|
|
31
35
|
const removed = pruneStaleSessions(days);
|
|
32
36
|
if (removed.length === 0) {
|
|
33
|
-
console.log(
|
|
37
|
+
console.log(t("sessions.noIdleSessions", { days }));
|
|
34
38
|
return;
|
|
35
39
|
}
|
|
36
|
-
console.log(
|
|
40
|
+
console.log(t("sessions.prunedCount", { count: removed.length, days }));
|
|
37
41
|
for (const name of removed) {
|
|
38
42
|
console.log(` ${name}`);
|
|
39
43
|
}
|
|
@@ -41,4 +45,4 @@ function pruneSessionsCommand(opts) {
|
|
|
41
45
|
export {
|
|
42
46
|
pruneSessionsCommand
|
|
43
47
|
};
|
|
44
|
-
//# sourceMappingURL=prune-sessions-
|
|
48
|
+
//# sourceMappingURL=prune-sessions-OEPFH4N6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/prune-sessions.ts"],"sourcesContent":["import { t } from \"../../i18n/index.js\";\nimport { listSessions, pruneStaleSessions } from \"../../memory/session.js\";\n\nexport interface PruneSessionsOptions {\n days?: number;\n dryRun?: boolean;\n}\n\nexport function pruneSessionsCommand(opts: PruneSessionsOptions): void {\n const days = opts.days ?? 90;\n if (!Number.isFinite(days) || days < 1) {\n console.error(t(\"sessions.daysInvalid\", { days }));\n process.exit(1);\n }\n if (opts.dryRun) {\n const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;\n const stale = listSessions().filter((s) => s.mtime.getTime() < cutoff);\n if (stale.length === 0) {\n console.log(t(\"sessions.noIdleSessions\", { days }));\n return;\n }\n console.log(t(\"sessions.wouldPrune\", { count: stale.length, days }));\n for (const s of stale) {\n console.log(` ${s.name}`);\n }\n console.log(\"\");\n console.log(t(\"sessions.dryRunHint\"));\n return;\n }\n const removed = pruneStaleSessions(days);\n if (removed.length === 0) {\n console.log(t(\"sessions.noIdleSessions\", { days }));\n return;\n }\n console.log(t(\"sessions.prunedCount\", { count: removed.length, days }));\n for (const name of removed) {\n console.log(` ${name}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAQO,SAAS,qBAAqB,MAAkC;AACrE,QAAM,OAAO,KAAK,QAAQ;AAC1B,MAAI,CAAC,OAAO,SAAS,IAAI,KAAK,OAAO,GAAG;AACtC,YAAQ,MAAM,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;AACjD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,MAAI,KAAK,QAAQ;AACf,UAAM,SAAS,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,KAAK;AAClD,UAAM,QAAQ,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,QAAQ,IAAI,MAAM;AACrE,QAAI,MAAM,WAAW,GAAG;AACtB,cAAQ,IAAI,EAAE,2BAA2B,EAAE,KAAK,CAAC,CAAC;AAClD;AAAA,IACF;AACA,YAAQ,IAAI,EAAE,uBAAuB,EAAE,OAAO,MAAM,QAAQ,KAAK,CAAC,CAAC;AACnE,eAAW,KAAK,OAAO;AACrB,cAAQ,IAAI,KAAK,EAAE,IAAI,EAAE;AAAA,IAC3B;AACA,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,EAAE,qBAAqB,CAAC;AACpC;AAAA,EACF;AACA,QAAM,UAAU,mBAAmB,IAAI;AACvC,MAAI,QAAQ,WAAW,GAAG;AACxB,YAAQ,IAAI,EAAE,2BAA2B,EAAE,KAAK,CAAC,CAAC;AAClD;AAAA,EACF;AACA,UAAQ,IAAI,EAAE,wBAAwB,EAAE,OAAO,QAAQ,QAAQ,KAAK,CAAC,CAAC;AACtE,aAAW,QAAQ,SAAS;AAC1B,YAAQ,IAAI,KAAK,IAAI,EAAE;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
|
|
3
3
|
import {
|
|
4
4
|
RecordView
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-JGTX4RRQ.js";
|
|
6
6
|
import {
|
|
7
7
|
Bar,
|
|
8
8
|
ChromeRule,
|
|
9
9
|
stringWidth
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-3ZZXQ3CZ.js";
|
|
11
11
|
import {
|
|
12
12
|
computeCumulativeStats,
|
|
13
13
|
groupRecordsByTurn,
|
|
14
14
|
replayFromFile
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-7JTKBJ2G.js";
|
|
16
16
|
import {
|
|
17
17
|
COLOR,
|
|
18
18
|
GRADIENT
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-PXBQ6IZ7.js";
|
|
20
20
|
import {
|
|
21
21
|
Box_default,
|
|
22
22
|
Static,
|
|
@@ -26,17 +26,17 @@ import {
|
|
|
26
26
|
use_app_default,
|
|
27
27
|
use_input_default,
|
|
28
28
|
use_stdout_default
|
|
29
|
-
} from "./chunk-
|
|
30
|
-
import "./chunk-
|
|
29
|
+
} from "./chunk-7X4JJOO7.js";
|
|
30
|
+
import "./chunk-J2IHQGPQ.js";
|
|
31
31
|
import "./chunk-25T6CVUP.js";
|
|
32
|
-
import "./chunk-
|
|
32
|
+
import "./chunk-QX5TWXRZ.js";
|
|
33
33
|
import {
|
|
34
34
|
t
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-YEF7C4XI.js";
|
|
36
36
|
import {
|
|
37
37
|
formatBalance,
|
|
38
38
|
formatCost
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-WMTMMSXU.js";
|
|
40
40
|
import {
|
|
41
41
|
__toESM
|
|
42
42
|
} from "./chunk-TUK7OWJA.js";
|
|
@@ -288,4 +288,4 @@ function oneLine(s, max = 200) {
|
|
|
288
288
|
export {
|
|
289
289
|
replayCommand
|
|
290
290
|
};
|
|
291
|
-
//# sourceMappingURL=replay-
|
|
291
|
+
//# sourceMappingURL=replay-4TP7ZUMZ.js.map
|
|
@@ -3,7 +3,7 @@ import { createRequire as __cr } from 'node:module'; if (typeof globalThis.requi
|
|
|
3
3
|
import {
|
|
4
4
|
formatMcpLifecycleEvent,
|
|
5
5
|
formatMcpSlowToast
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-GNS7BAT2.js";
|
|
7
7
|
import {
|
|
8
8
|
buildTransportFromSpec,
|
|
9
9
|
preflightStdioSpec
|
|
@@ -13,46 +13,47 @@ import {
|
|
|
13
13
|
ImmutablePrefix,
|
|
14
14
|
ToolRegistry,
|
|
15
15
|
bridgeMcpTools
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
16
|
+
} from "./chunk-MQWO32ZD.js";
|
|
17
|
+
import "./chunk-7AST3QQ3.js";
|
|
18
18
|
import {
|
|
19
19
|
openTranscriptFile,
|
|
20
20
|
recordFromLoopEvent,
|
|
21
21
|
writeRecord
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-7JTKBJ2G.js";
|
|
23
23
|
import {
|
|
24
24
|
McpClient
|
|
25
25
|
} from "./chunk-HIYTRCSW.js";
|
|
26
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-O5LIHAMP.js";
|
|
27
27
|
import "./chunk-6OWJV3YW.js";
|
|
28
28
|
import {
|
|
29
29
|
DeepSeekClient
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-J2IHQGPQ.js";
|
|
31
31
|
import "./chunk-25T6CVUP.js";
|
|
32
32
|
import {
|
|
33
33
|
loadDotenv
|
|
34
34
|
} from "./chunk-2UQP6H6T.js";
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
37
|
-
import "./chunk-
|
|
35
|
+
import "./chunk-ZWHSHFDP.js";
|
|
36
|
+
import "./chunk-JNTMOX7G.js";
|
|
37
|
+
import "./chunk-PB3MAFEI.js";
|
|
38
38
|
import "./chunk-S4XVGLRW.js";
|
|
39
39
|
import "./chunk-RRXUIPWG.js";
|
|
40
40
|
import {
|
|
41
41
|
appendUsage
|
|
42
|
-
} from "./chunk-
|
|
43
|
-
import "./chunk-
|
|
42
|
+
} from "./chunk-ZAEJWKXB.js";
|
|
43
|
+
import "./chunk-QX5TWXRZ.js";
|
|
44
44
|
import {
|
|
45
45
|
t
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-YEF7C4XI.js";
|
|
47
47
|
import {
|
|
48
48
|
defaultConfigPath,
|
|
49
49
|
isPlausibleKey,
|
|
50
50
|
loadApiKey,
|
|
51
51
|
loadBaseUrl,
|
|
52
|
+
loadToolRateLimit,
|
|
52
53
|
normalizeMcpConfig,
|
|
53
54
|
readConfig,
|
|
54
55
|
saveApiKey
|
|
55
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-WMTMMSXU.js";
|
|
56
57
|
import "./chunk-XXC2BYTV.js";
|
|
57
58
|
import "./chunk-TUK7OWJA.js";
|
|
58
59
|
|
|
@@ -101,7 +102,7 @@ async function runCommand(opts) {
|
|
|
101
102
|
let tools;
|
|
102
103
|
let successCount = 0;
|
|
103
104
|
if (normalizedSpecs.length > 0) {
|
|
104
|
-
tools = new ToolRegistry();
|
|
105
|
+
tools = new ToolRegistry({ rateLimit: loadToolRateLimit() });
|
|
105
106
|
for (const spec of normalizedSpecs) {
|
|
106
107
|
let label = "anon";
|
|
107
108
|
let mcp;
|
|
@@ -217,4 +218,4 @@ transcript: ${opts.transcript}
|
|
|
217
218
|
export {
|
|
218
219
|
runCommand
|
|
219
220
|
};
|
|
220
|
-
//# sourceMappingURL=run-
|
|
221
|
+
//# sourceMappingURL=run-6MXQYBOE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/run.ts"],"sourcesContent":["import type { WriteStream } from \"node:fs\";\nimport { stdin, stdout } from \"node:process\";\nimport { createInterface } from \"node:readline/promises\";\nimport {\n defaultConfigPath,\n isPlausibleKey,\n loadApiKey,\n loadBaseUrl,\n loadToolRateLimit,\n normalizeMcpConfig,\n readConfig,\n saveApiKey,\n} from \"../../config.js\";\nimport { loadDotenv } from \"../../env.js\";\nimport { t } from \"../../i18n/index.js\";\nimport { CacheFirstLoop, DeepSeekClient, ImmutablePrefix } from \"../../index.js\";\nimport { McpClient } from \"../../mcp/client.js\";\nimport { preflightStdioSpec } from \"../../mcp/preflight.js\";\nimport { bridgeMcpTools } from \"../../mcp/registry.js\";\nimport { buildTransportFromSpec } from \"../../mcp/transport-from-spec.js\";\nimport { appendUsage } from \"../../telemetry/usage.js\";\nimport { ToolRegistry } from \"../../tools.js\";\nimport { openTranscriptFile, recordFromLoopEvent, writeRecord } from \"../../transcript/log.js\";\nimport { formatMcpLifecycleEvent } from \"../ui/mcp-lifecycle.js\";\nimport { formatMcpSlowToast } from \"../ui/mcp-toast.js\";\n\nexport interface RunOptions {\n task: string;\n model: string;\n system: string;\n budgetUsd?: number;\n /** JSONL transcript path — lets `reasonix replay` / `diff` audit this run. */\n transcript?: string;\n /** Zero or more MCP server specs. Each: `\"name=cmd args...\"` or `\"cmd args...\"`. */\n mcp?: string[];\n /** Global prefix — only honored when a single anonymous server is given. */\n mcpPrefix?: string;\n}\n\nasync function ensureApiKey(): Promise<string> {\n const existing = loadApiKey();\n if (existing) return existing;\n\n if (!stdin.isTTY) {\n process.stderr.write(t(\"run.missingApiKey\"));\n process.exit(1);\n }\n\n process.stdout.write(\n \"DeepSeek API key not configured.\\nGet one at https://platform.deepseek.com/api_keys\\n\",\n );\n const rl = createInterface({ input: stdin, output: stdout });\n try {\n while (true) {\n const answer = (await rl.question(\"API key › \")).trim();\n if (!answer) continue;\n if (!isPlausibleKey(answer)) {\n process.stdout.write(\"Key looks too short. Paste the full token (16+ chars, no spaces).\\n\");\n continue;\n }\n saveApiKey(answer);\n process.stdout.write(`Saved to ${defaultConfigPath()}\\n\\n`);\n return answer;\n }\n } finally {\n rl.close();\n }\n}\n\nexport async function runCommand(opts: RunOptions): Promise<void> {\n loadDotenv();\n const apiKey = await ensureApiKey();\n process.env.DEEPSEEK_API_KEY = apiKey;\n\n // Optional MCP setup — mirrors chat's flow. Must happen before loop\n // construction so the tools make it into the prefix.\n const cfg = readConfig();\n const normalizedSpecs = normalizeMcpConfig(\n cfg,\n opts.mcp && opts.mcp.length > 0 ? opts.mcp : undefined,\n );\n const clients: McpClient[] = [];\n let tools: ToolRegistry | undefined;\n let successCount = 0;\n if (normalizedSpecs.length > 0) {\n tools = new ToolRegistry({ rateLimit: loadToolRateLimit() });\n for (const spec of normalizedSpecs) {\n let label = \"anon\";\n let mcp: McpClient | undefined;\n try {\n label = spec.name ?? \"anon\";\n if (spec.disabled) {\n process.stderr.write(`${formatMcpLifecycleEvent({ state: \"disabled\", name: label })}\\n`);\n continue;\n }\n process.stderr.write(`${formatMcpLifecycleEvent({ state: \"handshake\", name: label })}\\n`);\n const t0 = Date.now();\n const prefix = spec.name\n ? `${spec.name}_`\n : normalizedSpecs.length === 1 && opts.mcpPrefix\n ? opts.mcpPrefix\n : \"\";\n if (spec.transport === \"stdio\") preflightStdioSpec(spec);\n const transport = buildTransportFromSpec(spec);\n mcp = new McpClient({ transport });\n await mcp.initialize();\n const bridge = await bridgeMcpTools(mcp, {\n registry: tools,\n namePrefix: prefix,\n serverName: label,\n onSlow: (info) =>\n process.stderr.write(\n `${formatMcpSlowToast({ name: info.serverName, p95Ms: info.p95Ms, sampleSize: info.sampleSize })}\\n`,\n ),\n });\n process.stderr.write(\n `${formatMcpLifecycleEvent({\n state: \"connected\",\n name: label,\n tools: bridge.registeredNames.length,\n ms: Date.now() - t0,\n })}\\n`,\n );\n clients.push(mcp);\n successCount++;\n } catch (err) {\n // Non-fatal — skip and continue, same as `reasonix chat`. A\n // one-shot `run` invocation with a broken MCP server otherwise\n // fails the whole run over a side-concern tool the task might\n // not even touch.\n await mcp?.close().catch(() => undefined);\n process.stderr.write(\n `${formatMcpLifecycleEvent({ state: \"failed\", name: label, reason: (err as Error).message })}\\n ${t(\"mcpLifecycle.failedSetupConfigHint\")}\\n`,\n );\n }\n }\n if (successCount === 0) tools = undefined;\n }\n\n const client = new DeepSeekClient({ baseUrl: loadBaseUrl() });\n const prefix = new ImmutablePrefix({\n system: opts.system,\n toolSpecs: tools?.specs(),\n });\n const loop = new CacheFirstLoop({\n client,\n prefix,\n tools,\n model: opts.model,\n budgetUsd: opts.budgetUsd,\n });\n const prefixHash = prefix.fingerprint;\n\n let transcriptStream: WriteStream | null = null;\n if (opts.transcript) {\n transcriptStream = openTranscriptFile(opts.transcript, {\n version: 1,\n source: \"reasonix run\",\n model: opts.model,\n startedAt: new Date().toISOString(),\n });\n // Also persist the user turn itself (the loop's event stream starts with\n // assistant output, not the prompt we're about to send).\n writeRecord(transcriptStream, {\n ts: new Date().toISOString(),\n turn: 1,\n role: \"user\",\n content: opts.task,\n });\n }\n\n try {\n for await (const ev of loop.step(opts.task)) {\n if (ev.role === \"assistant_delta\" && ev.content) process.stdout.write(ev.content);\n if (ev.role === \"tool\") process.stdout.write(`\\n[tool ${ev.toolName}] ${ev.content}\\n`);\n if (ev.role === \"error\") process.stderr.write(`\\n[error] ${ev.error}\\n`);\n if (ev.role === \"done\") process.stdout.write(\"\\n\");\n if (ev.role === \"assistant_final\" && ev.stats?.usage) {\n // `reasonix run` is often used in CI / scripting — we want\n // those turns to show up in `reasonix stats` too so the\n // dashboard reflects all DeepSeek spend, not just TUI sessions.\n appendUsage({ session: null, model: ev.stats.model, usage: ev.stats.usage });\n }\n // Persist every non-streaming event — deltas would flood the file and\n // aren't useful for replay (replay renders final content, not keystrokes).\n if (transcriptStream && ev.role !== \"assistant_delta\") {\n writeRecord(transcriptStream, recordFromLoopEvent(ev, { model: opts.model, prefixHash }));\n }\n }\n } finally {\n transcriptStream?.end();\n }\n\n const s = loop.stats.summary();\n process.stdout.write(\n `\\n— turns:${s.turns} cache:${(s.cacheHitRatio * 100).toFixed(1)}% ` +\n `cost:$${s.totalCostUsd.toFixed(6)} save-vs-claude:${s.savingsVsClaudePct.toFixed(1)}%\\n`,\n );\n if (opts.transcript) {\n process.stdout.write(`\\ntranscript: ${opts.transcript}\\n`);\n process.stdout.write(` → npx reasonix replay ${opts.transcript}\\n`);\n }\n\n for (const c of clients) await c.close();\n}\n"],"mappings":"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","names":["prefix"]}
|