reasonix 0.34.1 → 0.36.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/dashboard/app.css +16 -14
- package/dashboard/dist/app.js +77 -18
- package/dashboard/dist/app.js.map +1 -1
- package/dist/cli/{chat-TD6GR3QK.js → chat-RGMYAOY2.js} +18 -17
- package/dist/cli/{chunk-SA4UGZPG.js → chunk-2MCYGFLK.js} +15 -10
- package/dist/cli/chunk-2MCYGFLK.js.map +1 -0
- package/dist/cli/{chunk-SW3CCXEV.js → chunk-4Q3GRJIU.js} +2 -2
- package/dist/cli/{chunk-5JXXEPDM.js → chunk-BHLHOS5Y.js} +8 -2
- package/dist/cli/chunk-BHLHOS5Y.js.map +1 -0
- package/dist/cli/{chunk-F3ILWP2L.js → chunk-BJ376EN3.js} +9 -8
- package/dist/cli/chunk-BJ376EN3.js.map +1 -0
- package/dist/cli/{chunk-2AWTGJ2C.js → chunk-CRPQUBP6.js} +26 -9
- package/dist/cli/{chunk-2AWTGJ2C.js.map → chunk-CRPQUBP6.js.map} +1 -1
- package/dist/cli/{chunk-EINEIIIW.js → chunk-EN4LAZW5.js} +563 -250
- package/dist/cli/chunk-EN4LAZW5.js.map +1 -0
- package/dist/cli/{chunk-OERAGRJX.js → chunk-IPCPEZWQ.js} +2 -2
- package/dist/cli/{chunk-U3V2ZQ5J.js → chunk-KJQIA4US.js} +6 -2
- package/dist/cli/chunk-KJQIA4US.js.map +1 -0
- package/dist/cli/{chunk-Q36KBLSU.js → chunk-MLXUGPJE.js} +292 -35
- package/dist/cli/chunk-MLXUGPJE.js.map +1 -0
- package/dist/cli/{chunk-SX6L4HZZ.js → chunk-QPNZWUZF.js} +53 -6
- package/dist/cli/chunk-QPNZWUZF.js.map +1 -0
- package/dist/cli/{chunk-LNTORE5K.js → chunk-QRUQ2BFT.js} +159 -40
- package/dist/cli/chunk-QRUQ2BFT.js.map +1 -0
- package/dist/cli/{chunk-KZHMKOJH.js → chunk-T52GAWPP.js} +25 -3
- package/dist/cli/chunk-T52GAWPP.js.map +1 -0
- package/dist/cli/{chunk-I6YIAK6C.js → chunk-UNMYFZPZ.js} +2 -2
- package/dist/cli/{update-4TJWRUIN.js → chunk-WJ3YX4PZ.js} +51 -12
- package/dist/cli/chunk-WJ3YX4PZ.js.map +1 -0
- package/dist/cli/{chunk-RXGEGA7K.js → chunk-XQIFIB3U.js} +18 -7
- package/dist/cli/{chunk-RXGEGA7K.js.map → chunk-XQIFIB3U.js.map} +1 -1
- package/dist/cli/{chunk-2EBODRRO.js → chunk-ZJR4QLXB.js} +5 -1
- package/dist/cli/{chunk-2EBODRRO.js.map → chunk-ZJR4QLXB.js.map} +1 -1
- package/dist/cli/{chunk-6TMHAK5D.js → chunk-ZU45XW3P.js} +2 -2
- package/dist/cli/code-KJB3WDU6.js +435 -0
- package/dist/cli/code-KJB3WDU6.js.map +1 -0
- package/dist/cli/{commands-MEZPSEHV.js → commands-FE2UDFBC.js} +3 -3
- package/dist/cli/{commit-CE4EFTUQ.js → commit-3IAGB22T.js} +5 -4
- package/dist/cli/commit-3IAGB22T.js.map +1 -0
- package/dist/cli/{doctor-YASM64X6.js → doctor-DKD34EFD.js} +7 -7
- package/dist/cli/index.js +35 -33
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/{mcp-LDFK5QJI.js → mcp-2RDEQST6.js} +2 -2
- package/dist/cli/{mcp-browse-FYHEITCM.js → mcp-browse-VM5GLRBQ.js} +2 -2
- package/dist/cli/{mcp-inspect-T2HBR22P.js → mcp-inspect-CWSVCZUQ.js} +3 -3
- package/dist/cli/{prompt-V47QKSAR.js → prompt-YEKXMNNV.js} +3 -3
- package/dist/cli/{replay-JEDLU7F2.js → replay-D7RT2DR7.js} +3 -3
- package/dist/cli/replay-D7RT2DR7.js.map +1 -0
- package/dist/cli/{run-NHD2RSTD.js → run-FK5UBIIM.js} +13 -12
- package/dist/cli/run-FK5UBIIM.js.map +1 -0
- package/dist/cli/{server-MC4A4WAJ.js → server-W4XJK4GX.js} +17 -17
- package/dist/cli/{server-MC4A4WAJ.js.map → server-W4XJK4GX.js.map} +1 -1
- package/dist/cli/{sessions-ZHWJEW4L.js → sessions-YZXWMIWW.js} +10 -10
- package/dist/cli/{setup-DK43MT47.js → setup-IIAJXHP4.js} +196 -130
- package/dist/cli/setup-IIAJXHP4.js.map +1 -0
- package/dist/cli/update-GUCWB4UN.js +13 -0
- package/dist/cli/update-GUCWB4UN.js.map +1 -0
- package/dist/cli/{version-O362UKPM.js → version-DWD6RLIU.js} +12 -12
- package/dist/index.d.ts +19 -2
- package/dist/index.js +543 -78
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/chunk-5JXXEPDM.js.map +0 -1
- package/dist/cli/chunk-EINEIIIW.js.map +0 -1
- package/dist/cli/chunk-F3ILWP2L.js.map +0 -1
- package/dist/cli/chunk-KZHMKOJH.js.map +0 -1
- package/dist/cli/chunk-LNTORE5K.js.map +0 -1
- package/dist/cli/chunk-Q36KBLSU.js.map +0 -1
- package/dist/cli/chunk-SA4UGZPG.js.map +0 -1
- package/dist/cli/chunk-SX6L4HZZ.js.map +0 -1
- package/dist/cli/chunk-U3V2ZQ5J.js.map +0 -1
- package/dist/cli/code-TGUOQBRJ.js +0 -153
- package/dist/cli/code-TGUOQBRJ.js.map +0 -1
- package/dist/cli/commit-CE4EFTUQ.js.map +0 -1
- package/dist/cli/replay-JEDLU7F2.js.map +0 -1
- package/dist/cli/run-NHD2RSTD.js.map +0 -1
- package/dist/cli/setup-DK43MT47.js.map +0 -1
- package/dist/cli/update-4TJWRUIN.js.map +0 -1
- /package/dist/cli/{chat-TD6GR3QK.js.map → chat-RGMYAOY2.js.map} +0 -0
- /package/dist/cli/{chunk-SW3CCXEV.js.map → chunk-4Q3GRJIU.js.map} +0 -0
- /package/dist/cli/{chunk-OERAGRJX.js.map → chunk-IPCPEZWQ.js.map} +0 -0
- /package/dist/cli/{chunk-I6YIAK6C.js.map → chunk-UNMYFZPZ.js.map} +0 -0
- /package/dist/cli/{chunk-6TMHAK5D.js.map → chunk-ZU45XW3P.js.map} +0 -0
- /package/dist/cli/{commands-MEZPSEHV.js.map → commands-FE2UDFBC.js.map} +0 -0
- /package/dist/cli/{doctor-YASM64X6.js.map → doctor-DKD34EFD.js.map} +0 -0
- /package/dist/cli/{mcp-LDFK5QJI.js.map → mcp-2RDEQST6.js.map} +0 -0
- /package/dist/cli/{mcp-browse-FYHEITCM.js.map → mcp-browse-VM5GLRBQ.js.map} +0 -0
- /package/dist/cli/{mcp-inspect-T2HBR22P.js.map → mcp-inspect-CWSVCZUQ.js.map} +0 -0
- /package/dist/cli/{prompt-V47QKSAR.js.map → prompt-YEKXMNNV.js.map} +0 -0
- /package/dist/cli/{sessions-ZHWJEW4L.js.map → sessions-YZXWMIWW.js.map} +0 -0
- /package/dist/cli/{version-O362UKPM.js.map → version-DWD6RLIU.js.map} +0 -0
package/dist/cli/index.js
CHANGED
|
@@ -2,40 +2,40 @@
|
|
|
2
2
|
import {
|
|
3
3
|
markPhase
|
|
4
4
|
} from "./chunk-CPOV2O73.js";
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
import "./chunk-QRUQ2BFT.js";
|
|
6
|
+
import "./chunk-UNMYFZPZ.js";
|
|
7
7
|
import "./chunk-XJLZ4HKU.js";
|
|
8
8
|
import "./chunk-XHQIK7B6.js";
|
|
9
9
|
import {
|
|
10
10
|
applyMemoryStack
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-ZU45XW3P.js";
|
|
12
12
|
import {
|
|
13
13
|
resolvePreset
|
|
14
14
|
} from "./chunk-MHDNZXJJ.js";
|
|
15
15
|
import "./chunk-DAEAAVDF.js";
|
|
16
16
|
import "./chunk-KMWKGPFZ.js";
|
|
17
17
|
import "./chunk-3Q3C4W66.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-QPNZWUZF.js";
|
|
19
19
|
import {
|
|
20
20
|
ESCALATION_CONTRACT
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import {
|
|
24
|
-
VERSION
|
|
25
|
-
} from "./chunk-2AWTGJ2C.js";
|
|
21
|
+
} from "./chunk-KJQIA4US.js";
|
|
22
|
+
import "./chunk-IPCPEZWQ.js";
|
|
26
23
|
import "./chunk-5X7LZJDE.js";
|
|
27
24
|
import {
|
|
28
25
|
listSessions
|
|
29
26
|
} from "./chunk-DFP4YSVM.js";
|
|
30
27
|
import {
|
|
31
28
|
t
|
|
32
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-MLXUGPJE.js";
|
|
33
30
|
import {
|
|
34
31
|
readConfig
|
|
35
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-BHLHOS5Y.js";
|
|
36
33
|
import "./chunk-WUI3P4RA.js";
|
|
37
34
|
import "./chunk-ZTLZO42A.js";
|
|
38
35
|
import "./chunk-ORM6PK57.js";
|
|
36
|
+
import {
|
|
37
|
+
VERSION
|
|
38
|
+
} from "./chunk-CRPQUBP6.js";
|
|
39
39
|
|
|
40
40
|
// src/cli/index.ts
|
|
41
41
|
import { Command } from "commander";
|
|
@@ -118,7 +118,7 @@ program.name("reasonix").description(t("cli.description")).version(VERSION).opti
|
|
|
118
118
|
program.action(async (opts) => {
|
|
119
119
|
const cfg = readConfig();
|
|
120
120
|
if (!cfg.setupCompleted) {
|
|
121
|
-
const { setupCommand } = await import("./setup-
|
|
121
|
+
const { setupCommand } = await import("./setup-IIAJXHP4.js");
|
|
122
122
|
await setupCommand({});
|
|
123
123
|
return;
|
|
124
124
|
}
|
|
@@ -130,7 +130,7 @@ program.action(async (opts) => {
|
|
|
130
130
|
(msg) => process.stderr.write(`${msg}
|
|
131
131
|
`)
|
|
132
132
|
);
|
|
133
|
-
const { chatCommand } = await import("./chat-
|
|
133
|
+
const { chatCommand } = await import("./chat-RGMYAOY2.js");
|
|
134
134
|
await chatCommand({
|
|
135
135
|
model: defaults.model,
|
|
136
136
|
system: applyMemoryStack(DEFAULT_SYSTEM, process.cwd()),
|
|
@@ -140,11 +140,11 @@ program.action(async (opts) => {
|
|
|
140
140
|
});
|
|
141
141
|
});
|
|
142
142
|
program.command("setup").description(t("cli.setup")).action(async () => {
|
|
143
|
-
const { setupCommand } = await import("./setup-
|
|
143
|
+
const { setupCommand } = await import("./setup-IIAJXHP4.js");
|
|
144
144
|
await setupCommand({});
|
|
145
145
|
});
|
|
146
|
-
program.command("code [dir]").description(t("cli.code")).option("-m, --model <id>", t("ui.modelOverride")).option("--no-session", t("ui.noSession")).option("-r, --resume", t("ui.resumeHint")).option("-n, --new", t("ui.newHint")).option("--transcript <path>", t("ui.transcriptHint")).option("--budget <usd>", t("ui.budgetHint"), (v) => Number.parseFloat(v)).option("--no-dashboard", t("ui.noDashboard")).option("--no-alt-screen", "keep chat output in shell scrollback (legacy mode, ghost-prone)").option("--system-append <prompt>", t("ui.systemAppendHint")).option("--system-append-file <path>", t("ui.systemAppendFileHint")).action(async (dir, opts) => {
|
|
147
|
-
const { codeCommand } = await import("./code-
|
|
146
|
+
program.command("code [dir]").description(t("cli.code")).option("-m, --model <id>", t("ui.modelOverride")).option("--no-session", t("ui.noSession")).option("-r, --resume", t("ui.resumeHint")).option("-n, --new", t("ui.newHint")).option("--transcript <path>", t("ui.transcriptHint")).option("--budget <usd>", t("ui.budgetHint"), (v) => Number.parseFloat(v)).option("--no-dashboard", t("ui.noDashboard")).option("--no-alt-screen", "keep chat output in shell scrollback (legacy mode, ghost-prone)").option("--no-mouse", "disable SGR mouse tracking (keeps drag-select 100% native)").option("--system-append <prompt>", t("ui.systemAppendHint")).option("--system-append-file <path>", t("ui.systemAppendFileHint")).action(async (dir, opts) => {
|
|
147
|
+
const { codeCommand } = await import("./code-KJB3WDU6.js");
|
|
148
148
|
await codeCommand({
|
|
149
149
|
dir,
|
|
150
150
|
model: opts.model,
|
|
@@ -156,7 +156,8 @@ program.command("code [dir]").description(t("cli.code")).option("-m, --model <id
|
|
|
156
156
|
noDashboard: opts.dashboard === false,
|
|
157
157
|
systemAppend: opts.systemAppend,
|
|
158
158
|
systemAppendFile: opts.systemAppendFile,
|
|
159
|
-
altScreen: opts.altScreen !== false
|
|
159
|
+
altScreen: opts.altScreen !== false,
|
|
160
|
+
mouse: opts.mouse !== false
|
|
160
161
|
});
|
|
161
162
|
});
|
|
162
163
|
program.command("chat").description(t("cli.chat")).option("-m, --model <id>", t("ui.modelIdHint")).option("-s, --system <prompt>", t("ui.systemPromptHint"), DEFAULT_SYSTEM).option("--transcript <path>", t("ui.transcriptHint")).option("--preset <name>", t("ui.presetHint")).option("--budget <usd>", t("ui.budgetHint"), (v) => Number.parseFloat(v)).option("--session <name>", t("ui.sessionNameHint")).option("--no-session", t("ui.ephemeralHint")).option("-r, --resume", t("ui.resumeHint")).option("-c, --continue", t("cli.continue")).option("-n, --new", t("ui.newHint")).option(
|
|
@@ -164,7 +165,7 @@ program.command("chat").description(t("cli.chat")).option("-m, --model <id>", t(
|
|
|
164
165
|
t("ui.mcpSpecHint"),
|
|
165
166
|
(value, previous = []) => [...previous, value],
|
|
166
167
|
[]
|
|
167
|
-
).option("--mcp-prefix <str>", t("ui.mcpPrefixHint")).option("--no-config", t("ui.noConfigHint")).option("--no-dashboard", t("ui.noDashboard")).option("--no-alt-screen", "keep chat output in shell scrollback (legacy mode, ghost-prone)").action(async (opts) => {
|
|
168
|
+
).option("--mcp-prefix <str>", t("ui.mcpPrefixHint")).option("--no-config", t("ui.noConfigHint")).option("--no-dashboard", t("ui.noDashboard")).option("--no-alt-screen", "keep chat output in shell scrollback (legacy mode, ghost-prone)").option("--no-mouse", "disable SGR mouse tracking (keeps drag-select 100% native)").action(async (opts) => {
|
|
168
169
|
const defaults = resolveDefaults({
|
|
169
170
|
model: opts.model,
|
|
170
171
|
mcp: opts.mcp,
|
|
@@ -179,7 +180,7 @@ program.command("chat").description(t("cli.chat")).option("-m, --model <id>", t(
|
|
|
179
180
|
(msg) => process.stderr.write(`${msg}
|
|
180
181
|
`)
|
|
181
182
|
);
|
|
182
|
-
const { chatCommand } = await import("./chat-
|
|
183
|
+
const { chatCommand } = await import("./chat-RGMYAOY2.js");
|
|
183
184
|
await chatCommand({
|
|
184
185
|
model: defaults.model,
|
|
185
186
|
system: applyMemoryStack(opts.system, process.cwd()),
|
|
@@ -191,7 +192,8 @@ program.command("chat").description(t("cli.chat")).option("-m, --model <id>", t(
|
|
|
191
192
|
forceResume: continueOpts.forceResume,
|
|
192
193
|
forceNew: !!opts.new,
|
|
193
194
|
noDashboard: opts.dashboard === false,
|
|
194
|
-
altScreen: opts.altScreen !== false
|
|
195
|
+
altScreen: opts.altScreen !== false,
|
|
196
|
+
mouse: opts.mouse !== false
|
|
195
197
|
});
|
|
196
198
|
});
|
|
197
199
|
program.command("run <task>").description(t("cli.run")).option("-m, --model <id>", t("ui.modelIdHint")).option("-s, --system <prompt>", t("ui.systemPromptHint"), DEFAULT_SYSTEM).option("--preset <name>", t("ui.presetHintShort")).option("--budget <usd>", t("ui.budgetHintShort"), (v) => Number.parseFloat(v)).option("--transcript <path>", t("ui.transcriptHintShort")).option(
|
|
@@ -206,7 +208,7 @@ program.command("run <task>").description(t("cli.run")).option("-m, --model <id>
|
|
|
206
208
|
preset: opts.preset,
|
|
207
209
|
noConfig: opts.config === false
|
|
208
210
|
});
|
|
209
|
-
const { runCommand } = await import("./run-
|
|
211
|
+
const { runCommand } = await import("./run-FK5UBIIM.js");
|
|
210
212
|
await runCommand({
|
|
211
213
|
task,
|
|
212
214
|
model: defaults.model,
|
|
@@ -222,15 +224,15 @@ program.command("stats [transcript]").description(t("cli.stats")).action(async (
|
|
|
222
224
|
statsCommand({ transcript });
|
|
223
225
|
});
|
|
224
226
|
program.command("doctor").description(t("cli.doctor")).action(async () => {
|
|
225
|
-
const { doctorCommand } = await import("./doctor-
|
|
227
|
+
const { doctorCommand } = await import("./doctor-DKD34EFD.js");
|
|
226
228
|
await doctorCommand();
|
|
227
229
|
});
|
|
228
230
|
program.command("commit").description(t("cli.commit")).option("-m, --model <id>", t("ui.modelOverrideFlash")).option("-y, --yes", t("ui.skipConfirmHint")).action(async (opts) => {
|
|
229
|
-
const { commitCommand } = await import("./commit-
|
|
231
|
+
const { commitCommand } = await import("./commit-3IAGB22T.js");
|
|
230
232
|
await commitCommand({ model: opts.model, yes: !!opts.yes });
|
|
231
233
|
});
|
|
232
234
|
program.command("sessions [name]").description(t("cli.sessions")).option("-v, --verbose", t("ui.verboseHint")).action(async (name, opts) => {
|
|
233
|
-
const { sessionsCommand } = await import("./sessions-
|
|
235
|
+
const { sessionsCommand } = await import("./sessions-YZXWMIWW.js");
|
|
234
236
|
sessionsCommand({ name, verbose: !!opts.verbose });
|
|
235
237
|
});
|
|
236
238
|
program.command("prune-sessions").description(t("cli.pruneSessions")).option("--days <n>", t("ui.pruneDaysHint"), (v) => Number.parseInt(v, 10)).option("--dry-run", t("ui.pruneDryRunHint")).action(async (opts) => {
|
|
@@ -249,7 +251,7 @@ program.command("events <name>").description(t("cli.events")).option("--type <ty
|
|
|
249
251
|
});
|
|
250
252
|
});
|
|
251
253
|
program.command("replay <transcript>").description(t("cli.replay")).option("--print", t("ui.printHint")).option("--head <n>", t("ui.headHint"), (v) => Number.parseInt(v, 10)).option("--tail <n>", t("ui.tailHint"), (v) => Number.parseInt(v, 10)).action(async (transcript, opts) => {
|
|
252
|
-
const { replayCommand } = await import("./replay-
|
|
254
|
+
const { replayCommand } = await import("./replay-D7RT2DR7.js");
|
|
253
255
|
await replayCommand({
|
|
254
256
|
path: transcript,
|
|
255
257
|
print: !!opts.print,
|
|
@@ -272,7 +274,7 @@ program.command("diff <a> <b>").description(t("cli.diff")).option("--md <path>",
|
|
|
272
274
|
var mcp = program.command("mcp").description(t("cli.mcp"));
|
|
273
275
|
mcp.command("list").description(t("ui.mcpListDescription")).option("--json", t("ui.jsonHintCatalog")).option("--local", t("ui.mcpLocalHint")).option("--refresh", t("ui.mcpRefreshHint")).option("--limit <n>", t("ui.mcpLimitHint"), (v) => Number.parseInt(v, 10)).option("--pages <n>", t("ui.mcpPagesHint"), (v) => Number.parseInt(v, 10)).option("--all", t("ui.mcpAllHint")).action(async (opts) => {
|
|
274
276
|
try {
|
|
275
|
-
const { mcpListCommand } = await import("./mcp-
|
|
277
|
+
const { mcpListCommand } = await import("./mcp-2RDEQST6.js");
|
|
276
278
|
await mcpListCommand({
|
|
277
279
|
json: !!opts.json,
|
|
278
280
|
local: !!opts.local,
|
|
@@ -289,7 +291,7 @@ mcp.command("list").description(t("ui.mcpListDescription")).option("--json", t("
|
|
|
289
291
|
});
|
|
290
292
|
mcp.command("search <query>").description(t("ui.mcpSearchDescription")).option("--json", t("ui.jsonHintCatalog")).option("--refresh", t("ui.mcpRefreshHint")).option("--limit <n>", t("ui.mcpLimitHint"), (v) => Number.parseInt(v, 10)).option("--max-pages <n>", t("ui.mcpMaxPagesHint"), (v) => Number.parseInt(v, 10)).action(async (query, opts) => {
|
|
291
293
|
try {
|
|
292
|
-
const { mcpSearchCommand } = await import("./mcp-
|
|
294
|
+
const { mcpSearchCommand } = await import("./mcp-2RDEQST6.js");
|
|
293
295
|
await mcpSearchCommand(query, {
|
|
294
296
|
json: !!opts.json,
|
|
295
297
|
refresh: !!opts.refresh,
|
|
@@ -304,7 +306,7 @@ mcp.command("search <query>").description(t("ui.mcpSearchDescription")).option("
|
|
|
304
306
|
});
|
|
305
307
|
mcp.command("install <name>").description(t("ui.mcpInstallDescription")).option("--refresh", t("ui.mcpRefreshHint")).option("--max-pages <n>", t("ui.mcpMaxPagesHint"), (v) => Number.parseInt(v, 10)).action(async (name, opts) => {
|
|
306
308
|
try {
|
|
307
|
-
const { mcpInstallCommand } = await import("./mcp-
|
|
309
|
+
const { mcpInstallCommand } = await import("./mcp-2RDEQST6.js");
|
|
308
310
|
await mcpInstallCommand(name, {
|
|
309
311
|
refresh: !!opts.refresh,
|
|
310
312
|
maxPages: typeof opts.maxPages === "number" && opts.maxPages > 0 ? opts.maxPages : void 0
|
|
@@ -317,7 +319,7 @@ mcp.command("install <name>").description(t("ui.mcpInstallDescription")).option(
|
|
|
317
319
|
});
|
|
318
320
|
mcp.command("browse").description(t("ui.mcpBrowseDescription")).action(async () => {
|
|
319
321
|
try {
|
|
320
|
-
const { mcpBrowseCommand } = await import("./mcp-browse-
|
|
322
|
+
const { mcpBrowseCommand } = await import("./mcp-browse-VM5GLRBQ.js");
|
|
321
323
|
await mcpBrowseCommand();
|
|
322
324
|
} catch (err) {
|
|
323
325
|
process.stderr.write(`mcp browse failed: ${err.message}
|
|
@@ -326,7 +328,7 @@ mcp.command("browse").description(t("ui.mcpBrowseDescription")).action(async ()
|
|
|
326
328
|
}
|
|
327
329
|
});
|
|
328
330
|
mcp.command("inspect <spec>").description(t("ui.mcpInspectDescription")).option("--json", t("ui.jsonHintReport")).action(async (spec, opts) => {
|
|
329
|
-
const { formatMcpInspectFailure, mcpInspectCommand } = await import("./mcp-inspect-
|
|
331
|
+
const { formatMcpInspectFailure, mcpInspectCommand } = await import("./mcp-inspect-CWSVCZUQ.js");
|
|
330
332
|
try {
|
|
331
333
|
await mcpInspectCommand({ spec, json: !!opts.json });
|
|
332
334
|
} catch (err) {
|
|
@@ -336,16 +338,16 @@ mcp.command("inspect <spec>").description(t("ui.mcpInspectDescription")).option(
|
|
|
336
338
|
}
|
|
337
339
|
});
|
|
338
340
|
program.command("version").description(t("cli.version")).action(async () => {
|
|
339
|
-
const { versionCommand } = await import("./version-
|
|
341
|
+
const { versionCommand } = await import("./version-DWD6RLIU.js");
|
|
340
342
|
versionCommand();
|
|
341
343
|
});
|
|
342
344
|
program.command("update").description(t("cli.update")).option("--dry-run", t("ui.dryRunHint")).action(async (opts) => {
|
|
343
|
-
const { updateCommand } = await import("./update-
|
|
345
|
+
const { updateCommand } = await import("./update-GUCWB4UN.js");
|
|
344
346
|
await updateCommand({ dryRun: !!opts.dryRun });
|
|
345
347
|
});
|
|
346
348
|
program.command("index").description(t("cli.index")).option("--rebuild", t("ui.rebuildHint")).option("--model <name>", t("ui.embedModelHint")).option("--dir <path>", t("ui.projectDirHint")).option("--ollama-url <url>", t("ui.ollamaUrlHint")).option("-y, --yes", t("ui.skipPromptsHint")).action(
|
|
347
349
|
async (opts) => {
|
|
348
|
-
const { indexCommand } = await import("./commands-
|
|
350
|
+
const { indexCommand } = await import("./commands-FE2UDFBC.js");
|
|
349
351
|
await indexCommand(opts);
|
|
350
352
|
}
|
|
351
353
|
);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/index.ts","../../src/cli/resolve.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { readConfig } from \"../config.js\";\nimport { t } from \"../i18n/index.js\";\nimport { VERSION } from \"../index.js\";\nimport { listSessions } from \"../memory/session.js\";\nimport { applyMemoryStack } from \"../memory/user.js\";\nimport { ESCALATION_CONTRACT } from \"../prompt-fragments.js\";\nimport { resolveContinueFlag, resolveDefaults } from \"./resolve.js\";\nimport { markPhase } from \"./startup-profile.js\";\n\nmarkPhase(\"cli_module_loaded\");\n\nconst DEFAULT_SYSTEM = `You are Reasonix, a helpful DeepSeek-powered assistant. Be concise and accurate. Use tools when available.\n\n# Cite or shut up — non-negotiable\n\nEvery factual claim about a codebase must be backed by evidence. Reasonix VALIDATES your citations — broken paths render in **red strikethrough with ❌** in front of the user.\n\n**Positive claims** — append a markdown link:\n- ✅ \\`The MCP client supports listResources [listResources](src/mcp/client.ts:142).\\`\n- ❌ \\`The MCP client supports listResources.\\` ← unverifiable, do not write.\n\n**Negative claims** (\"X is missing\", \"Y isn't implemented\", \"lacks Z\") are the #1 hallucination shape. STOP before writing them. If you have a search tool, call it first; if the search returns nothing, cite the search itself as evidence (\\`No matches for \"foo\" in src/\\`). If you have no tool, qualify hard: \"I haven't verified — this is a guess.\"\n\nAsserting absence without checking is how evaluative answers go wrong. Treat the urge to write \"missing\" as a red flag in your own reasoning.\n\n# Don't invent what changes — search instead\n\nYour training data has a cutoff. When an answer's correctness depends on something that changes over time (the user is asking what's happening, not what's true) and a search tool is available, search first. Inventing currently-correct values from training memory is the most common way these answers go wrong, and the user usually can't tell until much later.\n\nThe signal isn't a topic list — it's: \"if I'm wrong about this, is it because reality moved on?\". If yes, ground the answer in fresh evidence; if no (definitions, mechanisms, well-established APIs), answer from memory.\n\n${ESCALATION_CONTRACT}`;\n\n/** Lenient: malformed → undefined (no cap) so a bad flag doesn't abort launch. */\nfunction parseBudgetFlag(raw: number | undefined): number | undefined {\n if (raw === undefined) return undefined;\n if (!Number.isFinite(raw) || raw <= 0) {\n process.stderr.write(\n `▲ ignoring --budget=${raw} (must be a positive number) — running with no cap\\n`,\n );\n return undefined;\n }\n return raw;\n}\n\nconst program = new Command();\nprogram\n .name(\"reasonix\")\n .description(t(\"cli.description\"))\n .version(VERSION)\n .option(\"-c, --continue\", t(\"cli.continue\"));\n\n// `reasonix` with no subcommand → launch the friendliest flow.\n// First run (no config yet) → interactive setup wizard.\n// Otherwise → chat with saved defaults. This is the \"one command to\n// rule them all\" entry for non-power-users: they don't need to learn\n// `chat` / `setup` / `--mcp` — just type `reasonix`.\nprogram.action(async (opts: { continue?: boolean }) => {\n const cfg = readConfig();\n if (!cfg.setupCompleted) {\n const { setupCommand } = await import(\"./commands/setup.js\");\n await setupCommand({});\n return;\n }\n const defaults = resolveDefaults({});\n const continueOpts = resolveContinueFlag(\n opts.continue,\n defaults.session,\n () => listSessions()[0],\n (msg) => process.stderr.write(`${msg}\\n`),\n );\n const { chatCommand } = await import(\"./commands/chat.js\");\n await chatCommand({\n model: defaults.model,\n system: applyMemoryStack(DEFAULT_SYSTEM, process.cwd()),\n session: continueOpts.session,\n mcp: defaults.mcp,\n forceResume: continueOpts.forceResume,\n });\n});\n\nprogram\n .command(\"setup\")\n .description(t(\"cli.setup\"))\n .action(async () => {\n const { setupCommand } = await import(\"./commands/setup.js\");\n await setupCommand({});\n });\n\nprogram\n .command(\"code [dir]\")\n .description(t(\"cli.code\"))\n .option(\"-m, --model <id>\", t(\"ui.modelOverride\"))\n .option(\"--no-session\", t(\"ui.noSession\"))\n .option(\"-r, --resume\", t(\"ui.resumeHint\"))\n .option(\"-n, --new\", t(\"ui.newHint\"))\n .option(\"--transcript <path>\", t(\"ui.transcriptHint\"))\n .option(\"--budget <usd>\", t(\"ui.budgetHint\"), (v) => Number.parseFloat(v))\n .option(\"--no-dashboard\", t(\"ui.noDashboard\"))\n .option(\"--no-alt-screen\", \"keep chat output in shell scrollback (legacy mode, ghost-prone)\")\n .option(\"--system-append <prompt>\", t(\"ui.systemAppendHint\"))\n .option(\"--system-append-file <path>\", t(\"ui.systemAppendFileHint\"))\n .action(async (dir: string | undefined, opts) => {\n const { codeCommand } = await import(\"./commands/code.js\");\n await codeCommand({\n dir,\n model: opts.model,\n noSession: opts.session === false,\n transcript: opts.transcript,\n forceResume: !!opts.resume,\n forceNew: !!opts.new,\n budgetUsd: parseBudgetFlag(opts.budget),\n noDashboard: opts.dashboard === false,\n systemAppend: opts.systemAppend,\n systemAppendFile: opts.systemAppendFile,\n altScreen: opts.altScreen !== false,\n });\n });\n\nprogram\n .command(\"chat\")\n .description(t(\"cli.chat\"))\n .option(\"-m, --model <id>\", t(\"ui.modelIdHint\"))\n .option(\"-s, --system <prompt>\", t(\"ui.systemPromptHint\"), DEFAULT_SYSTEM)\n .option(\"--transcript <path>\", t(\"ui.transcriptHint\"))\n .option(\"--preset <name>\", t(\"ui.presetHint\"))\n .option(\"--budget <usd>\", t(\"ui.budgetHint\"), (v) => Number.parseFloat(v))\n .option(\"--session <name>\", t(\"ui.sessionNameHint\"))\n .option(\"--no-session\", t(\"ui.ephemeralHint\"))\n .option(\"-r, --resume\", t(\"ui.resumeHint\"))\n .option(\"-c, --continue\", t(\"cli.continue\"))\n .option(\"-n, --new\", t(\"ui.newHint\"))\n .option(\n \"--mcp <spec>\",\n t(\"ui.mcpSpecHint\"),\n (value: string, previous: string[] = []) => [...previous, value],\n [] as string[],\n )\n .option(\"--mcp-prefix <str>\", t(\"ui.mcpPrefixHint\"))\n .option(\"--no-config\", t(\"ui.noConfigHint\"))\n .option(\"--no-dashboard\", t(\"ui.noDashboard\"))\n .option(\"--no-alt-screen\", \"keep chat output in shell scrollback (legacy mode, ghost-prone)\")\n .action(async (opts) => {\n const defaults = resolveDefaults({\n model: opts.model,\n mcp: opts.mcp as string[],\n session: opts.session,\n preset: opts.preset,\n noConfig: opts.config === false,\n });\n // `-c` is \"newest-touched session\" + auto-resume; `-r` is \"this\n // session's prior messages, even if you also passed --session\".\n // When both are set we prefer the explicit `--session` + `-r`\n // (more specific input wins). `-c` only kicks in if `-r` wasn't.\n const continueOpts = opts.resume\n ? { session: defaults.session, forceResume: true }\n : resolveContinueFlag(\n opts.continue,\n defaults.session,\n () => listSessions()[0],\n (msg) => process.stderr.write(`${msg}\\n`),\n );\n const { chatCommand } = await import(\"./commands/chat.js\");\n await chatCommand({\n model: defaults.model,\n system: applyMemoryStack(opts.system, process.cwd()),\n transcript: opts.transcript,\n budgetUsd: parseBudgetFlag(opts.budget),\n session: continueOpts.session,\n mcp: defaults.mcp,\n mcpPrefix: opts.mcpPrefix,\n forceResume: continueOpts.forceResume,\n forceNew: !!opts.new,\n noDashboard: opts.dashboard === false,\n altScreen: opts.altScreen !== false,\n });\n });\n\nprogram\n .command(\"run <task>\")\n .description(t(\"cli.run\"))\n .option(\"-m, --model <id>\", t(\"ui.modelIdHint\"))\n .option(\"-s, --system <prompt>\", t(\"ui.systemPromptHint\"), DEFAULT_SYSTEM)\n .option(\"--preset <name>\", t(\"ui.presetHintShort\"))\n .option(\"--budget <usd>\", t(\"ui.budgetHintShort\"), (v) => Number.parseFloat(v))\n .option(\"--transcript <path>\", t(\"ui.transcriptHintShort\"))\n .option(\n \"--mcp <spec>\",\n t(\"ui.mcpSpecHintShort\"),\n (value: string, previous: string[] = []) => [...previous, value],\n [] as string[],\n )\n .option(\"--mcp-prefix <str>\", t(\"ui.mcpPrefixHintShort\"))\n .option(\"--no-config\", t(\"ui.noConfigHint\"))\n .action(async (task: string, opts) => {\n const defaults = resolveDefaults({\n model: opts.model,\n mcp: opts.mcp as string[],\n preset: opts.preset,\n noConfig: opts.config === false,\n });\n const { runCommand } = await import(\"./commands/run.js\");\n await runCommand({\n task,\n model: defaults.model,\n system: applyMemoryStack(opts.system, process.cwd()),\n budgetUsd: parseBudgetFlag(opts.budget),\n transcript: opts.transcript,\n mcp: defaults.mcp,\n mcpPrefix: opts.mcpPrefix,\n });\n });\n\nprogram\n .command(\"stats [transcript]\")\n .description(t(\"cli.stats\"))\n .action(async (transcript: string | undefined) => {\n const { statsCommand } = await import(\"./commands/stats.js\");\n statsCommand({ transcript });\n });\n\nprogram\n .command(\"doctor\")\n .description(t(\"cli.doctor\"))\n .action(async () => {\n const { doctorCommand } = await import(\"./commands/doctor.js\");\n await doctorCommand();\n });\n\nprogram\n .command(\"commit\")\n .description(t(\"cli.commit\"))\n .option(\"-m, --model <id>\", t(\"ui.modelOverrideFlash\"))\n .option(\"-y, --yes\", t(\"ui.skipConfirmHint\"))\n .action(async (opts) => {\n const { commitCommand } = await import(\"./commands/commit.js\");\n await commitCommand({ model: opts.model, yes: !!opts.yes });\n });\n\nprogram\n .command(\"sessions [name]\")\n .description(t(\"cli.sessions\"))\n .option(\"-v, --verbose\", t(\"ui.verboseHint\"))\n .action(async (name: string | undefined, opts) => {\n const { sessionsCommand } = await import(\"./commands/sessions.js\");\n sessionsCommand({ name, verbose: !!opts.verbose });\n });\n\nprogram\n .command(\"prune-sessions\")\n .description(t(\"cli.pruneSessions\"))\n .option(\"--days <n>\", t(\"ui.pruneDaysHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--dry-run\", t(\"ui.pruneDryRunHint\"))\n .action(async (opts) => {\n const { pruneSessionsCommand } = await import(\"./commands/prune-sessions.js\");\n pruneSessionsCommand({ days: opts.days, dryRun: !!opts.dryRun });\n });\n\nprogram\n .command(\"events <name>\")\n .description(t(\"cli.events\"))\n .option(\"--type <type>\", t(\"ui.eventTypeHint\"))\n .option(\"--since <id>\", t(\"ui.eventSinceHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--tail <n>\", t(\"ui.eventTailHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--json\", t(\"ui.jsonHint\"))\n .option(\"--projection\", t(\"ui.projectionHint\"))\n .action(async (name: string, opts) => {\n const { eventsCommand } = await import(\"./commands/events.js\");\n eventsCommand({\n name,\n type: opts.type,\n since: Number.isFinite(opts.since) ? opts.since : undefined,\n tail: Number.isFinite(opts.tail) ? opts.tail : undefined,\n json: !!opts.json,\n projection: !!opts.projection,\n });\n });\n\nprogram\n .command(\"replay <transcript>\")\n .description(t(\"cli.replay\"))\n .option(\"--print\", t(\"ui.printHint\"))\n .option(\"--head <n>\", t(\"ui.headHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--tail <n>\", t(\"ui.tailHint\"), (v) => Number.parseInt(v, 10))\n .action(async (transcript: string, opts) => {\n const { replayCommand } = await import(\"./commands/replay.js\");\n await replayCommand({\n path: transcript,\n print: !!opts.print,\n head: Number.isFinite(opts.head) ? opts.head : undefined,\n tail: Number.isFinite(opts.tail) ? opts.tail : undefined,\n });\n });\n\nprogram\n .command(\"diff <a> <b>\")\n .description(t(\"cli.diff\"))\n .option(\"--md <path>\", t(\"ui.mdReportHint\"))\n .option(\"--print\", t(\"ui.printHintTable\"))\n .option(\"--tui\", t(\"ui.tuiHint\"))\n .option(\"--label-a <label>\", t(\"ui.labelAHint\"))\n .option(\"--label-b <label>\", t(\"ui.labelBHint\"))\n .action(async (a: string, b: string, opts) => {\n const { diffCommand } = await import(\"./commands/diff.js\");\n await diffCommand({\n a,\n b,\n mdPath: opts.md,\n labelA: opts.labelA,\n labelB: opts.labelB,\n print: !!opts.print,\n tui: !!opts.tui,\n });\n });\n\nconst mcp = program.command(\"mcp\").description(t(\"cli.mcp\"));\n\nmcp\n .command(\"list\")\n .description(t(\"ui.mcpListDescription\"))\n .option(\"--json\", t(\"ui.jsonHintCatalog\"))\n .option(\"--local\", t(\"ui.mcpLocalHint\"))\n .option(\"--refresh\", t(\"ui.mcpRefreshHint\"))\n .option(\"--limit <n>\", t(\"ui.mcpLimitHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--pages <n>\", t(\"ui.mcpPagesHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--all\", t(\"ui.mcpAllHint\"))\n .action(async (opts) => {\n try {\n const { mcpListCommand } = await import(\"./commands/mcp.js\");\n await mcpListCommand({\n json: !!opts.json,\n local: !!opts.local,\n refresh: !!opts.refresh,\n limit: typeof opts.limit === \"number\" && opts.limit > 0 ? opts.limit : undefined,\n pages: typeof opts.pages === \"number\" && opts.pages > 0 ? opts.pages : undefined,\n all: !!opts.all,\n });\n } catch (err) {\n process.stderr.write(`mcp list failed: ${(err as Error).message}\\n`);\n process.exit(1);\n }\n });\n\nmcp\n .command(\"search <query>\")\n .description(t(\"ui.mcpSearchDescription\"))\n .option(\"--json\", t(\"ui.jsonHintCatalog\"))\n .option(\"--refresh\", t(\"ui.mcpRefreshHint\"))\n .option(\"--limit <n>\", t(\"ui.mcpLimitHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--max-pages <n>\", t(\"ui.mcpMaxPagesHint\"), (v) => Number.parseInt(v, 10))\n .action(async (query: string, opts) => {\n try {\n const { mcpSearchCommand } = await import(\"./commands/mcp.js\");\n await mcpSearchCommand(query, {\n json: !!opts.json,\n refresh: !!opts.refresh,\n limit: typeof opts.limit === \"number\" && opts.limit > 0 ? opts.limit : undefined,\n maxPages:\n typeof opts.maxPages === \"number\" && opts.maxPages > 0 ? opts.maxPages : undefined,\n });\n } catch (err) {\n process.stderr.write(`mcp search failed: ${(err as Error).message}\\n`);\n process.exit(1);\n }\n });\n\nmcp\n .command(\"install <name>\")\n .description(t(\"ui.mcpInstallDescription\"))\n .option(\"--refresh\", t(\"ui.mcpRefreshHint\"))\n .option(\"--max-pages <n>\", t(\"ui.mcpMaxPagesHint\"), (v) => Number.parseInt(v, 10))\n .action(async (name: string, opts) => {\n try {\n const { mcpInstallCommand } = await import(\"./commands/mcp.js\");\n await mcpInstallCommand(name, {\n refresh: !!opts.refresh,\n maxPages:\n typeof opts.maxPages === \"number\" && opts.maxPages > 0 ? opts.maxPages : undefined,\n });\n } catch (err) {\n process.stderr.write(`mcp install failed: ${(err as Error).message}\\n`);\n process.exit(1);\n }\n });\n\nmcp\n .command(\"browse\")\n .description(t(\"ui.mcpBrowseDescription\"))\n .action(async () => {\n try {\n const { mcpBrowseCommand } = await import(\"./commands/mcp-browse.js\");\n await mcpBrowseCommand();\n } catch (err) {\n process.stderr.write(`mcp browse failed: ${(err as Error).message}\\n`);\n process.exit(1);\n }\n });\n\nmcp\n .command(\"inspect <spec>\")\n .description(t(\"ui.mcpInspectDescription\"))\n .option(\"--json\", t(\"ui.jsonHintReport\"))\n .action(async (spec: string, opts) => {\n const { formatMcpInspectFailure, mcpInspectCommand } = await import(\n \"./commands/mcp-inspect.js\"\n );\n try {\n await mcpInspectCommand({ spec, json: !!opts.json });\n } catch (err) {\n process.stderr.write(`mcp inspect failed: ${formatMcpInspectFailure(err)}\\n`);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"version\")\n .description(t(\"cli.version\"))\n .action(async () => {\n const { versionCommand } = await import(\"./commands/version.js\");\n versionCommand();\n });\n\nprogram\n .command(\"update\")\n .description(t(\"cli.update\"))\n .option(\"--dry-run\", t(\"ui.dryRunHint\"))\n .action(async (opts: { dryRun?: boolean }) => {\n const { updateCommand } = await import(\"./commands/update.js\");\n await updateCommand({ dryRun: !!opts.dryRun });\n });\n\nprogram\n .command(\"index\")\n .description(t(\"cli.index\"))\n .option(\"--rebuild\", t(\"ui.rebuildHint\"))\n .option(\"--model <name>\", t(\"ui.embedModelHint\"))\n .option(\"--dir <path>\", t(\"ui.projectDirHint\"))\n .option(\"--ollama-url <url>\", t(\"ui.ollamaUrlHint\"))\n .option(\"-y, --yes\", t(\"ui.skipPromptsHint\"))\n .action(\n async (opts: {\n rebuild?: boolean;\n model?: string;\n dir?: string;\n ollamaUrl?: string;\n yes?: boolean;\n }) => {\n const { indexCommand } = await import(\"./commands/index.js\");\n await indexCommand(opts);\n },\n );\n\nprogram.parseAsync(process.argv).catch((err) => {\n console.error(err);\n process.exit(1);\n});\n","/** Precedence: per-setting flag > --preset > config.preset > \"auto\" defaults. */\n\nimport { type PresetName, type ReasonixConfig, readConfig } from \"../config.js\";\nimport { resolvePreset } from \"./ui/presets.js\";\n\nexport interface ResolvedDefaults {\n model: string;\n reasoningEffort: \"high\" | \"max\";\n mcp: string[];\n session: string | undefined;\n}\n\nexport interface RawCliFlags {\n model?: string;\n mcp?: string[];\n /** Commander's `--no-session` surfaces as `false`; `--session X` as a string. */\n session?: string | false;\n /** `--preset <name>`. */\n preset?: string;\n /** When true, ignore config entirely (power-user escape hatch). */\n noConfig?: boolean;\n}\n\nexport function resolveDefaults(flags: RawCliFlags): ResolvedDefaults {\n const cfg: ReasonixConfig = flags.noConfig ? {} : readConfig();\n const preset = pickPreset(flags.preset, cfg.preset);\n const presetSettings = resolvePreset(preset);\n\n const model = flags.model ?? presetSettings.model;\n const reasoningEffort = presetSettings.reasoningEffort;\n\n // `--mcp` accumulator is [] when absent. Treat empty from flags as\n // \"user didn't pass\" → fall through to config. Users who explicitly\n // want zero MCP servers can pass `--no-config` or edit the file.\n const mcp = flags.mcp && flags.mcp.length > 0 ? flags.mcp : (cfg.mcp ?? []);\n\n const session = resolveSession(flags.session, cfg.session);\n\n return { model, reasoningEffort, mcp, session };\n}\n\nfunction pickPreset(\n flagPreset: string | undefined,\n configPreset: PresetName | undefined,\n): PresetName {\n if (flagPreset && isPresetName(flagPreset)) return flagPreset;\n if (configPreset) return configPreset;\n return \"auto\";\n}\n\nfunction isPresetName(s: string): s is PresetName {\n return (\n s === \"auto\" ||\n s === \"flash\" ||\n s === \"pro\" ||\n // Legacy names — kept callable so old `--preset smart` invocations\n // and stale config.json entries don't error out.\n s === \"fast\" ||\n s === \"smart\" ||\n s === \"max\"\n );\n}\n\nfunction resolveSession(\n flag: string | false | undefined,\n configSession: string | null | undefined,\n): string | undefined {\n if (flag === false) return undefined; // --no-session\n if (typeof flag === \"string\" && flag.length > 0) return flag;\n if (configSession === null) return undefined; // config opted out\n if (typeof configSession === \"string\" && configSession.length > 0) return configSession;\n return \"default\";\n}\n\nexport function resolveContinueFlag(\n flag: boolean | undefined,\n fallbackSession: string | undefined,\n getLatestSession: () => { name: string } | undefined,\n warn: (msg: string) => void = () => {},\n): { session: string | undefined; forceResume: boolean } {\n if (!flag) return { session: fallbackSession, forceResume: false };\n const latest = getLatestSession();\n if (!latest) {\n warn(\"▸ -c/--continue: no saved sessions yet — starting a fresh one.\");\n return { session: fallbackSession, forceResume: false };\n }\n return { session: latest.name, forceResume: true };\n}\n"],"mappings":"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","names":["mcp"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts","../../src/cli/resolve.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { readConfig } from \"../config.js\";\nimport { t } from \"../i18n/index.js\";\nimport { VERSION } from \"../index.js\";\nimport { listSessions } from \"../memory/session.js\";\nimport { applyMemoryStack } from \"../memory/user.js\";\nimport { ESCALATION_CONTRACT } from \"../prompt-fragments.js\";\nimport { resolveContinueFlag, resolveDefaults } from \"./resolve.js\";\nimport { markPhase } from \"./startup-profile.js\";\n\nmarkPhase(\"cli_module_loaded\");\n\nconst DEFAULT_SYSTEM = `You are Reasonix, a helpful DeepSeek-powered assistant. Be concise and accurate. Use tools when available.\n\n# Cite or shut up — non-negotiable\n\nEvery factual claim about a codebase must be backed by evidence. Reasonix VALIDATES your citations — broken paths render in **red strikethrough with ❌** in front of the user.\n\n**Positive claims** — append a markdown link:\n- ✅ \\`The MCP client supports listResources [listResources](src/mcp/client.ts:142).\\`\n- ❌ \\`The MCP client supports listResources.\\` ← unverifiable, do not write.\n\n**Negative claims** (\"X is missing\", \"Y isn't implemented\", \"lacks Z\") are the #1 hallucination shape. STOP before writing them. If you have a search tool, call it first; if the search returns nothing, cite the search itself as evidence (\\`No matches for \"foo\" in src/\\`). If you have no tool, qualify hard: \"I haven't verified — this is a guess.\"\n\nAsserting absence without checking is how evaluative answers go wrong. Treat the urge to write \"missing\" as a red flag in your own reasoning.\n\n# Don't invent what changes — search instead\n\nYour training data has a cutoff. When an answer's correctness depends on something that changes over time (the user is asking what's happening, not what's true) and a search tool is available, search first. Inventing currently-correct values from training memory is the most common way these answers go wrong, and the user usually can't tell until much later.\n\nThe signal isn't a topic list — it's: \"if I'm wrong about this, is it because reality moved on?\". If yes, ground the answer in fresh evidence; if no (definitions, mechanisms, well-established APIs), answer from memory.\n\n${ESCALATION_CONTRACT}`;\n\n/** Lenient: malformed → undefined (no cap) so a bad flag doesn't abort launch. */\nfunction parseBudgetFlag(raw: number | undefined): number | undefined {\n if (raw === undefined) return undefined;\n if (!Number.isFinite(raw) || raw <= 0) {\n process.stderr.write(\n `▲ ignoring --budget=${raw} (must be a positive number) — running with no cap\\n`,\n );\n return undefined;\n }\n return raw;\n}\n\nconst program = new Command();\nprogram\n .name(\"reasonix\")\n .description(t(\"cli.description\"))\n .version(VERSION)\n .option(\"-c, --continue\", t(\"cli.continue\"));\n\n// `reasonix` with no subcommand → launch the friendliest flow.\n// First run (no config yet) → interactive setup wizard.\n// Otherwise → chat with saved defaults. This is the \"one command to\n// rule them all\" entry for non-power-users: they don't need to learn\n// `chat` / `setup` / `--mcp` — just type `reasonix`.\nprogram.action(async (opts: { continue?: boolean }) => {\n const cfg = readConfig();\n if (!cfg.setupCompleted) {\n const { setupCommand } = await import(\"./commands/setup.js\");\n await setupCommand({});\n return;\n }\n const defaults = resolveDefaults({});\n const continueOpts = resolveContinueFlag(\n opts.continue,\n defaults.session,\n () => listSessions()[0],\n (msg) => process.stderr.write(`${msg}\\n`),\n );\n const { chatCommand } = await import(\"./commands/chat.js\");\n await chatCommand({\n model: defaults.model,\n system: applyMemoryStack(DEFAULT_SYSTEM, process.cwd()),\n session: continueOpts.session,\n mcp: defaults.mcp,\n forceResume: continueOpts.forceResume,\n });\n});\n\nprogram\n .command(\"setup\")\n .description(t(\"cli.setup\"))\n .action(async () => {\n const { setupCommand } = await import(\"./commands/setup.js\");\n await setupCommand({});\n });\n\nprogram\n .command(\"code [dir]\")\n .description(t(\"cli.code\"))\n .option(\"-m, --model <id>\", t(\"ui.modelOverride\"))\n .option(\"--no-session\", t(\"ui.noSession\"))\n .option(\"-r, --resume\", t(\"ui.resumeHint\"))\n .option(\"-n, --new\", t(\"ui.newHint\"))\n .option(\"--transcript <path>\", t(\"ui.transcriptHint\"))\n .option(\"--budget <usd>\", t(\"ui.budgetHint\"), (v) => Number.parseFloat(v))\n .option(\"--no-dashboard\", t(\"ui.noDashboard\"))\n .option(\"--no-alt-screen\", \"keep chat output in shell scrollback (legacy mode, ghost-prone)\")\n .option(\"--no-mouse\", \"disable SGR mouse tracking (keeps drag-select 100% native)\")\n .option(\"--system-append <prompt>\", t(\"ui.systemAppendHint\"))\n .option(\"--system-append-file <path>\", t(\"ui.systemAppendFileHint\"))\n .action(async (dir: string | undefined, opts) => {\n const { codeCommand } = await import(\"./commands/code.js\");\n await codeCommand({\n dir,\n model: opts.model,\n noSession: opts.session === false,\n transcript: opts.transcript,\n forceResume: !!opts.resume,\n forceNew: !!opts.new,\n budgetUsd: parseBudgetFlag(opts.budget),\n noDashboard: opts.dashboard === false,\n systemAppend: opts.systemAppend,\n systemAppendFile: opts.systemAppendFile,\n altScreen: opts.altScreen !== false,\n mouse: opts.mouse !== false,\n });\n });\n\nprogram\n .command(\"chat\")\n .description(t(\"cli.chat\"))\n .option(\"-m, --model <id>\", t(\"ui.modelIdHint\"))\n .option(\"-s, --system <prompt>\", t(\"ui.systemPromptHint\"), DEFAULT_SYSTEM)\n .option(\"--transcript <path>\", t(\"ui.transcriptHint\"))\n .option(\"--preset <name>\", t(\"ui.presetHint\"))\n .option(\"--budget <usd>\", t(\"ui.budgetHint\"), (v) => Number.parseFloat(v))\n .option(\"--session <name>\", t(\"ui.sessionNameHint\"))\n .option(\"--no-session\", t(\"ui.ephemeralHint\"))\n .option(\"-r, --resume\", t(\"ui.resumeHint\"))\n .option(\"-c, --continue\", t(\"cli.continue\"))\n .option(\"-n, --new\", t(\"ui.newHint\"))\n .option(\n \"--mcp <spec>\",\n t(\"ui.mcpSpecHint\"),\n (value: string, previous: string[] = []) => [...previous, value],\n [] as string[],\n )\n .option(\"--mcp-prefix <str>\", t(\"ui.mcpPrefixHint\"))\n .option(\"--no-config\", t(\"ui.noConfigHint\"))\n .option(\"--no-dashboard\", t(\"ui.noDashboard\"))\n .option(\"--no-alt-screen\", \"keep chat output in shell scrollback (legacy mode, ghost-prone)\")\n .option(\"--no-mouse\", \"disable SGR mouse tracking (keeps drag-select 100% native)\")\n .action(async (opts) => {\n const defaults = resolveDefaults({\n model: opts.model,\n mcp: opts.mcp as string[],\n session: opts.session,\n preset: opts.preset,\n noConfig: opts.config === false,\n });\n // `-c` is \"newest-touched session\" + auto-resume; `-r` is \"this\n // session's prior messages, even if you also passed --session\".\n // When both are set we prefer the explicit `--session` + `-r`\n // (more specific input wins). `-c` only kicks in if `-r` wasn't.\n const continueOpts = opts.resume\n ? { session: defaults.session, forceResume: true }\n : resolveContinueFlag(\n opts.continue,\n defaults.session,\n () => listSessions()[0],\n (msg) => process.stderr.write(`${msg}\\n`),\n );\n const { chatCommand } = await import(\"./commands/chat.js\");\n await chatCommand({\n model: defaults.model,\n system: applyMemoryStack(opts.system, process.cwd()),\n transcript: opts.transcript,\n budgetUsd: parseBudgetFlag(opts.budget),\n session: continueOpts.session,\n mcp: defaults.mcp,\n mcpPrefix: opts.mcpPrefix,\n forceResume: continueOpts.forceResume,\n forceNew: !!opts.new,\n noDashboard: opts.dashboard === false,\n altScreen: opts.altScreen !== false,\n mouse: opts.mouse !== false,\n });\n });\n\nprogram\n .command(\"run <task>\")\n .description(t(\"cli.run\"))\n .option(\"-m, --model <id>\", t(\"ui.modelIdHint\"))\n .option(\"-s, --system <prompt>\", t(\"ui.systemPromptHint\"), DEFAULT_SYSTEM)\n .option(\"--preset <name>\", t(\"ui.presetHintShort\"))\n .option(\"--budget <usd>\", t(\"ui.budgetHintShort\"), (v) => Number.parseFloat(v))\n .option(\"--transcript <path>\", t(\"ui.transcriptHintShort\"))\n .option(\n \"--mcp <spec>\",\n t(\"ui.mcpSpecHintShort\"),\n (value: string, previous: string[] = []) => [...previous, value],\n [] as string[],\n )\n .option(\"--mcp-prefix <str>\", t(\"ui.mcpPrefixHintShort\"))\n .option(\"--no-config\", t(\"ui.noConfigHint\"))\n .action(async (task: string, opts) => {\n const defaults = resolveDefaults({\n model: opts.model,\n mcp: opts.mcp as string[],\n preset: opts.preset,\n noConfig: opts.config === false,\n });\n const { runCommand } = await import(\"./commands/run.js\");\n await runCommand({\n task,\n model: defaults.model,\n system: applyMemoryStack(opts.system, process.cwd()),\n budgetUsd: parseBudgetFlag(opts.budget),\n transcript: opts.transcript,\n mcp: defaults.mcp,\n mcpPrefix: opts.mcpPrefix,\n });\n });\n\nprogram\n .command(\"stats [transcript]\")\n .description(t(\"cli.stats\"))\n .action(async (transcript: string | undefined) => {\n const { statsCommand } = await import(\"./commands/stats.js\");\n statsCommand({ transcript });\n });\n\nprogram\n .command(\"doctor\")\n .description(t(\"cli.doctor\"))\n .action(async () => {\n const { doctorCommand } = await import(\"./commands/doctor.js\");\n await doctorCommand();\n });\n\nprogram\n .command(\"commit\")\n .description(t(\"cli.commit\"))\n .option(\"-m, --model <id>\", t(\"ui.modelOverrideFlash\"))\n .option(\"-y, --yes\", t(\"ui.skipConfirmHint\"))\n .action(async (opts) => {\n const { commitCommand } = await import(\"./commands/commit.js\");\n await commitCommand({ model: opts.model, yes: !!opts.yes });\n });\n\nprogram\n .command(\"sessions [name]\")\n .description(t(\"cli.sessions\"))\n .option(\"-v, --verbose\", t(\"ui.verboseHint\"))\n .action(async (name: string | undefined, opts) => {\n const { sessionsCommand } = await import(\"./commands/sessions.js\");\n sessionsCommand({ name, verbose: !!opts.verbose });\n });\n\nprogram\n .command(\"prune-sessions\")\n .description(t(\"cli.pruneSessions\"))\n .option(\"--days <n>\", t(\"ui.pruneDaysHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--dry-run\", t(\"ui.pruneDryRunHint\"))\n .action(async (opts) => {\n const { pruneSessionsCommand } = await import(\"./commands/prune-sessions.js\");\n pruneSessionsCommand({ days: opts.days, dryRun: !!opts.dryRun });\n });\n\nprogram\n .command(\"events <name>\")\n .description(t(\"cli.events\"))\n .option(\"--type <type>\", t(\"ui.eventTypeHint\"))\n .option(\"--since <id>\", t(\"ui.eventSinceHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--tail <n>\", t(\"ui.eventTailHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--json\", t(\"ui.jsonHint\"))\n .option(\"--projection\", t(\"ui.projectionHint\"))\n .action(async (name: string, opts) => {\n const { eventsCommand } = await import(\"./commands/events.js\");\n eventsCommand({\n name,\n type: opts.type,\n since: Number.isFinite(opts.since) ? opts.since : undefined,\n tail: Number.isFinite(opts.tail) ? opts.tail : undefined,\n json: !!opts.json,\n projection: !!opts.projection,\n });\n });\n\nprogram\n .command(\"replay <transcript>\")\n .description(t(\"cli.replay\"))\n .option(\"--print\", t(\"ui.printHint\"))\n .option(\"--head <n>\", t(\"ui.headHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--tail <n>\", t(\"ui.tailHint\"), (v) => Number.parseInt(v, 10))\n .action(async (transcript: string, opts) => {\n const { replayCommand } = await import(\"./commands/replay.js\");\n await replayCommand({\n path: transcript,\n print: !!opts.print,\n head: Number.isFinite(opts.head) ? opts.head : undefined,\n tail: Number.isFinite(opts.tail) ? opts.tail : undefined,\n });\n });\n\nprogram\n .command(\"diff <a> <b>\")\n .description(t(\"cli.diff\"))\n .option(\"--md <path>\", t(\"ui.mdReportHint\"))\n .option(\"--print\", t(\"ui.printHintTable\"))\n .option(\"--tui\", t(\"ui.tuiHint\"))\n .option(\"--label-a <label>\", t(\"ui.labelAHint\"))\n .option(\"--label-b <label>\", t(\"ui.labelBHint\"))\n .action(async (a: string, b: string, opts) => {\n const { diffCommand } = await import(\"./commands/diff.js\");\n await diffCommand({\n a,\n b,\n mdPath: opts.md,\n labelA: opts.labelA,\n labelB: opts.labelB,\n print: !!opts.print,\n tui: !!opts.tui,\n });\n });\n\nconst mcp = program.command(\"mcp\").description(t(\"cli.mcp\"));\n\nmcp\n .command(\"list\")\n .description(t(\"ui.mcpListDescription\"))\n .option(\"--json\", t(\"ui.jsonHintCatalog\"))\n .option(\"--local\", t(\"ui.mcpLocalHint\"))\n .option(\"--refresh\", t(\"ui.mcpRefreshHint\"))\n .option(\"--limit <n>\", t(\"ui.mcpLimitHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--pages <n>\", t(\"ui.mcpPagesHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--all\", t(\"ui.mcpAllHint\"))\n .action(async (opts) => {\n try {\n const { mcpListCommand } = await import(\"./commands/mcp.js\");\n await mcpListCommand({\n json: !!opts.json,\n local: !!opts.local,\n refresh: !!opts.refresh,\n limit: typeof opts.limit === \"number\" && opts.limit > 0 ? opts.limit : undefined,\n pages: typeof opts.pages === \"number\" && opts.pages > 0 ? opts.pages : undefined,\n all: !!opts.all,\n });\n } catch (err) {\n process.stderr.write(`mcp list failed: ${(err as Error).message}\\n`);\n process.exit(1);\n }\n });\n\nmcp\n .command(\"search <query>\")\n .description(t(\"ui.mcpSearchDescription\"))\n .option(\"--json\", t(\"ui.jsonHintCatalog\"))\n .option(\"--refresh\", t(\"ui.mcpRefreshHint\"))\n .option(\"--limit <n>\", t(\"ui.mcpLimitHint\"), (v) => Number.parseInt(v, 10))\n .option(\"--max-pages <n>\", t(\"ui.mcpMaxPagesHint\"), (v) => Number.parseInt(v, 10))\n .action(async (query: string, opts) => {\n try {\n const { mcpSearchCommand } = await import(\"./commands/mcp.js\");\n await mcpSearchCommand(query, {\n json: !!opts.json,\n refresh: !!opts.refresh,\n limit: typeof opts.limit === \"number\" && opts.limit > 0 ? opts.limit : undefined,\n maxPages:\n typeof opts.maxPages === \"number\" && opts.maxPages > 0 ? opts.maxPages : undefined,\n });\n } catch (err) {\n process.stderr.write(`mcp search failed: ${(err as Error).message}\\n`);\n process.exit(1);\n }\n });\n\nmcp\n .command(\"install <name>\")\n .description(t(\"ui.mcpInstallDescription\"))\n .option(\"--refresh\", t(\"ui.mcpRefreshHint\"))\n .option(\"--max-pages <n>\", t(\"ui.mcpMaxPagesHint\"), (v) => Number.parseInt(v, 10))\n .action(async (name: string, opts) => {\n try {\n const { mcpInstallCommand } = await import(\"./commands/mcp.js\");\n await mcpInstallCommand(name, {\n refresh: !!opts.refresh,\n maxPages:\n typeof opts.maxPages === \"number\" && opts.maxPages > 0 ? opts.maxPages : undefined,\n });\n } catch (err) {\n process.stderr.write(`mcp install failed: ${(err as Error).message}\\n`);\n process.exit(1);\n }\n });\n\nmcp\n .command(\"browse\")\n .description(t(\"ui.mcpBrowseDescription\"))\n .action(async () => {\n try {\n const { mcpBrowseCommand } = await import(\"./commands/mcp-browse.js\");\n await mcpBrowseCommand();\n } catch (err) {\n process.stderr.write(`mcp browse failed: ${(err as Error).message}\\n`);\n process.exit(1);\n }\n });\n\nmcp\n .command(\"inspect <spec>\")\n .description(t(\"ui.mcpInspectDescription\"))\n .option(\"--json\", t(\"ui.jsonHintReport\"))\n .action(async (spec: string, opts) => {\n const { formatMcpInspectFailure, mcpInspectCommand } = await import(\n \"./commands/mcp-inspect.js\"\n );\n try {\n await mcpInspectCommand({ spec, json: !!opts.json });\n } catch (err) {\n process.stderr.write(`mcp inspect failed: ${formatMcpInspectFailure(err)}\\n`);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"version\")\n .description(t(\"cli.version\"))\n .action(async () => {\n const { versionCommand } = await import(\"./commands/version.js\");\n versionCommand();\n });\n\nprogram\n .command(\"update\")\n .description(t(\"cli.update\"))\n .option(\"--dry-run\", t(\"ui.dryRunHint\"))\n .action(async (opts: { dryRun?: boolean }) => {\n const { updateCommand } = await import(\"./commands/update.js\");\n await updateCommand({ dryRun: !!opts.dryRun });\n });\n\nprogram\n .command(\"index\")\n .description(t(\"cli.index\"))\n .option(\"--rebuild\", t(\"ui.rebuildHint\"))\n .option(\"--model <name>\", t(\"ui.embedModelHint\"))\n .option(\"--dir <path>\", t(\"ui.projectDirHint\"))\n .option(\"--ollama-url <url>\", t(\"ui.ollamaUrlHint\"))\n .option(\"-y, --yes\", t(\"ui.skipPromptsHint\"))\n .action(\n async (opts: {\n rebuild?: boolean;\n model?: string;\n dir?: string;\n ollamaUrl?: string;\n yes?: boolean;\n }) => {\n const { indexCommand } = await import(\"./commands/index.js\");\n await indexCommand(opts);\n },\n );\n\nprogram.parseAsync(process.argv).catch((err) => {\n console.error(err);\n process.exit(1);\n});\n","/** Precedence: per-setting flag > --preset > config.preset > \"auto\" defaults. */\n\nimport { type PresetName, type ReasonixConfig, readConfig } from \"../config.js\";\nimport { resolvePreset } from \"./ui/presets.js\";\n\nexport interface ResolvedDefaults {\n model: string;\n reasoningEffort: \"high\" | \"max\";\n mcp: string[];\n session: string | undefined;\n}\n\nexport interface RawCliFlags {\n model?: string;\n mcp?: string[];\n /** Commander's `--no-session` surfaces as `false`; `--session X` as a string. */\n session?: string | false;\n /** `--preset <name>`. */\n preset?: string;\n /** When true, ignore config entirely (power-user escape hatch). */\n noConfig?: boolean;\n}\n\nexport function resolveDefaults(flags: RawCliFlags): ResolvedDefaults {\n const cfg: ReasonixConfig = flags.noConfig ? {} : readConfig();\n const preset = pickPreset(flags.preset, cfg.preset);\n const presetSettings = resolvePreset(preset);\n\n const model = flags.model ?? presetSettings.model;\n const reasoningEffort = presetSettings.reasoningEffort;\n\n // `--mcp` accumulator is [] when absent. Treat empty from flags as\n // \"user didn't pass\" → fall through to config. Users who explicitly\n // want zero MCP servers can pass `--no-config` or edit the file.\n const mcp = flags.mcp && flags.mcp.length > 0 ? flags.mcp : (cfg.mcp ?? []);\n\n const session = resolveSession(flags.session, cfg.session);\n\n return { model, reasoningEffort, mcp, session };\n}\n\nfunction pickPreset(\n flagPreset: string | undefined,\n configPreset: PresetName | undefined,\n): PresetName {\n if (flagPreset && isPresetName(flagPreset)) return flagPreset;\n if (configPreset) return configPreset;\n return \"auto\";\n}\n\nfunction isPresetName(s: string): s is PresetName {\n return (\n s === \"auto\" ||\n s === \"flash\" ||\n s === \"pro\" ||\n // Legacy names — kept callable so old `--preset smart` invocations\n // and stale config.json entries don't error out.\n s === \"fast\" ||\n s === \"smart\" ||\n s === \"max\"\n );\n}\n\nfunction resolveSession(\n flag: string | false | undefined,\n configSession: string | null | undefined,\n): string | undefined {\n if (flag === false) return undefined; // --no-session\n if (typeof flag === \"string\" && flag.length > 0) return flag;\n if (configSession === null) return undefined; // config opted out\n if (typeof configSession === \"string\" && configSession.length > 0) return configSession;\n return \"default\";\n}\n\nexport function resolveContinueFlag(\n flag: boolean | undefined,\n fallbackSession: string | undefined,\n getLatestSession: () => { name: string } | undefined,\n warn: (msg: string) => void = () => {},\n): { session: string | undefined; forceResume: boolean } {\n if (!flag) return { session: fallbackSession, forceResume: false };\n const latest = getLatestSession();\n if (!latest) {\n warn(\"▸ -c/--continue: no saved sessions yet — starting a fresh one.\");\n return { session: fallbackSession, forceResume: false };\n }\n return { session: latest.name, forceResume: true };\n}\n"],"mappings":"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","names":["mcp"]}
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
readConfig,
|
|
15
15
|
writeConfig
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-BHLHOS5Y.js";
|
|
17
17
|
import "./chunk-WUI3P4RA.js";
|
|
18
18
|
|
|
19
19
|
// src/cli/commands/mcp.ts
|
|
@@ -264,4 +264,4 @@ export {
|
|
|
264
264
|
mcpListCommand,
|
|
265
265
|
mcpSearchCommand
|
|
266
266
|
};
|
|
267
|
-
//# sourceMappingURL=mcp-
|
|
267
|
+
//# sourceMappingURL=mcp-2RDEQST6.js.map
|
|
@@ -11,7 +11,7 @@ import "./chunk-FM57FNPJ.js";
|
|
|
11
11
|
import {
|
|
12
12
|
readConfig,
|
|
13
13
|
writeConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-BHLHOS5Y.js";
|
|
15
15
|
import "./chunk-WUI3P4RA.js";
|
|
16
16
|
|
|
17
17
|
// src/cli/commands/mcp-browse.tsx
|
|
@@ -161,4 +161,4 @@ async function mcpBrowseCommand(_opts = {}) {
|
|
|
161
161
|
export {
|
|
162
162
|
mcpBrowseCommand
|
|
163
163
|
};
|
|
164
|
-
//# sourceMappingURL=mcp-browse-
|
|
164
|
+
//# sourceMappingURL=mcp-browse-VM5GLRBQ.js.map
|
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
StreamableHttpTransport,
|
|
10
10
|
inspectMcpServer,
|
|
11
11
|
parseMcpSpec
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-UNMYFZPZ.js";
|
|
13
|
+
import "./chunk-CRPQUBP6.js";
|
|
14
14
|
|
|
15
15
|
// src/cli/commands/mcp-inspect.ts
|
|
16
16
|
async function mcpInspectCommand(opts) {
|
|
@@ -100,4 +100,4 @@ export {
|
|
|
100
100
|
formatMcpInspectFailure,
|
|
101
101
|
mcpInspectCommand
|
|
102
102
|
};
|
|
103
|
-
//# sourceMappingURL=mcp-inspect-
|
|
103
|
+
//# sourceMappingURL=mcp-inspect-CWSVCZUQ.js.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
CODE_SYSTEM_PROMPT,
|
|
4
4
|
codeSystemPrompt
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-ZU45XW3P.js";
|
|
6
|
+
import "./chunk-KJQIA4US.js";
|
|
7
7
|
export {
|
|
8
8
|
CODE_SYSTEM_PROMPT,
|
|
9
9
|
codeSystemPrompt
|
|
10
10
|
};
|
|
11
|
-
//# sourceMappingURL=prompt-
|
|
11
|
+
//# sourceMappingURL=prompt-YEKXMNNV.js.map
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
import {
|
|
15
15
|
COLOR,
|
|
16
16
|
GRADIENT
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-ZJR4QLXB.js";
|
|
18
18
|
import "./chunk-KMWKGPFZ.js";
|
|
19
19
|
import {
|
|
20
20
|
formatBalance,
|
|
@@ -80,7 +80,7 @@ function ChromeRow({
|
|
|
80
80
|
const modePill = pickModePill(planMode, editMode);
|
|
81
81
|
const proPill = escalated ? { label: "\u21E7 pro", color: COLOR.err } : proArmed ? { label: "\u21E7 pro", color: COLOR.warn } : null;
|
|
82
82
|
const projectName = rootDir ? basename(rootDir) : null;
|
|
83
|
-
const cachePct =
|
|
83
|
+
const cachePct = (summary.cacheHitRatio * 100).toFixed(1);
|
|
84
84
|
const cacheColor = summary.cacheHitRatio >= 0.7 ? COLOR.ok : summary.cacheHitRatio >= 0.4 ? COLOR.warn : COLOR.err;
|
|
85
85
|
const balanceLabel = balance ? `[${formatBalance(balance.total, balance.currency, { label: true })}]` : "";
|
|
86
86
|
const costLabel = `[${formatCost(summary.totalCostUsd, balance?.currency)}]`;
|
|
@@ -272,4 +272,4 @@ function oneLine(s, max = 200) {
|
|
|
272
272
|
export {
|
|
273
273
|
replayCommand
|
|
274
274
|
};
|
|
275
|
-
//# sourceMappingURL=replay-
|
|
275
|
+
//# sourceMappingURL=replay-D7RT2DR7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/replay.ts","../../src/cli/ui/ReplayApp.tsx","../../src/cli/ui/StatsPanel.tsx"],"sourcesContent":["import { render } from \"ink\";\nimport React from \"react\";\nimport type { TranscriptRecord } from \"../../transcript/log.js\";\nimport { groupRecordsByTurn, replayFromFile } from \"../../transcript/replay.js\";\nimport { ReplayApp } from \"../ui/ReplayApp.js\";\n\nexport interface ReplayOptions {\n path: string;\n head?: number;\n tail?: number;\n /** Force stdout pretty-print mode (no Ink TUI). Also auto-enabled when stdout is not a TTY. */\n print?: boolean;\n}\n\nexport async function replayCommand(opts: ReplayOptions): Promise<void> {\n const wantPrint =\n opts.print || !process.stdout.isTTY || opts.head !== undefined || opts.tail !== undefined;\n if (wantPrint) {\n printReplay(opts);\n return;\n }\n\n const { parsed } = replayFromFile(opts.path);\n const pages = groupRecordsByTurn(parsed.records);\n const { waitUntilExit } = render(React.createElement(ReplayApp, { meta: parsed.meta, pages }), {\n exitOnCtrlC: true,\n patchConsole: false,\n });\n await waitUntilExit();\n}\n\n// stdout pretty-print path (original behavior, preserved for piping / CI)\n\nfunction printReplay(opts: ReplayOptions): void {\n const { parsed, stats } = replayFromFile(opts.path);\n\n if (parsed.meta) {\n const m = parsed.meta;\n const bits: string[] = [`source=${m.source}`];\n if (m.model) bits.push(`model=${m.model}`);\n if (m.task) bits.push(`task=${m.task}`);\n if (m.mode) bits.push(`mode=${m.mode}`);\n if (m.repeat !== undefined) bits.push(`repeat=${m.repeat}`);\n bits.push(`started=${m.startedAt}`);\n console.log(`[meta] ${bits.join(\" \")}`);\n console.log(\"\");\n }\n\n const records = sliceRecords(parsed.records, opts);\n for (const rec of records) {\n renderRecord(rec);\n }\n\n console.log(\"\");\n console.log(\"── summary ─────────────────────────────────────────\");\n console.log(`model calls: ${stats.turns}`);\n console.log(`user turns: ${stats.userTurns}`);\n console.log(`tool calls: ${stats.toolCalls}`);\n console.log(`cache hit: ${(stats.cacheHitRatio * 100).toFixed(1)}%`);\n console.log(`cost: $${stats.totalCostUsd.toFixed(6)}`);\n console.log(`claude equivalent: $${stats.claudeEquivalentUsd.toFixed(6)}`);\n console.log(`savings vs claude: ${stats.savingsVsClaudePct.toFixed(1)}%`);\n console.log(`models: ${stats.models.join(\", \") || \"—\"}`);\n console.log(`prefix hashes: ${stats.prefixHashes.length} distinct`);\n if (stats.prefixHashes.length === 1) {\n console.log(` (byte-stable prefix: ${stats.prefixHashes[0]?.slice(0, 16)}…)`);\n } else if (stats.prefixHashes.length > 1) {\n console.log(\" (prefix churned — cache-hostile session)\");\n }\n}\n\nfunction sliceRecords(records: TranscriptRecord[], opts: ReplayOptions): TranscriptRecord[] {\n if (opts.head !== undefined && opts.head > 0) return records.slice(0, opts.head);\n if (opts.tail !== undefined && opts.tail > 0) return records.slice(-opts.tail);\n return records;\n}\n\nfunction renderRecord(rec: TranscriptRecord): void {\n const turn = `[t${rec.turn}]`;\n if (rec.role === \"user\") {\n console.log(`${turn} USER: ${oneLine(rec.content)}`);\n } else if (rec.role === \"assistant_final\") {\n const cost = rec.cost !== undefined ? ` $${rec.cost.toFixed(6)}` : \"\";\n const cache =\n rec.usage &&\n (rec.usage.prompt_cache_hit_tokens !== undefined ||\n rec.usage.prompt_cache_miss_tokens !== undefined)\n ? (() => {\n const hit = rec.usage!.prompt_cache_hit_tokens ?? 0;\n const miss = rec.usage!.prompt_cache_miss_tokens ?? 0;\n const total = hit + miss;\n return total > 0 ? ` cache=${((hit / total) * 100).toFixed(1)}%` : \"\";\n })()\n : \"\";\n console.log(`${turn} AGENT:${cost}${cache} ${oneLine(rec.content)}`);\n } else if (rec.role === \"tool\") {\n const args = rec.args ? ` args=${oneLine(rec.args, 80)}` : \"\";\n console.log(`${turn} TOOL ${rec.tool ?? \"?\"}:${args} → ${oneLine(rec.content, 120)}`);\n } else if (rec.role === \"error\") {\n console.log(`${turn} ERROR: ${rec.error ?? rec.content}`);\n } else if (rec.role === \"done\") {\n // Suppress — visually noisy, not informative in replay.\n } else {\n console.log(`${turn} ${rec.role}: ${oneLine(rec.content)}`);\n }\n}\n\nfunction oneLine(s: string, max = 200): string {\n const collapsed = s.replace(/\\s+/g, \" \").trim();\n return collapsed.length > max ? `${collapsed.slice(0, max)}…` : collapsed;\n}\n","/**\n * Ink TUI for `reasonix replay`. Read-only: no input box, no loop.\n * j/k navigation across turn-pages, cumulative stats sidebar updates\n * as you move through time.\n *\n * The navigation logic (grouping records into pages, computing cumulative\n * stats) lives in src/replay.ts as pure functions; this file is just\n * presentation + key bindings.\n */\n\nimport { Box, Static, Text, useApp, useInput } from \"ink\";\nimport React, { useMemo, useState } from \"react\";\nimport type { TranscriptMeta } from \"../../transcript/log.js\";\nimport { type TurnPage, computeCumulativeStats } from \"../../transcript/replay.js\";\nimport { RecordView } from \"./RecordView.js\";\nimport { StatsPanel } from \"./StatsPanel.js\";\n\nexport interface ReplayAppProps {\n meta: TranscriptMeta | null;\n pages: TurnPage[];\n}\n\nexport function ReplayApp({ meta, pages }: ReplayAppProps) {\n const { exit } = useApp();\n const maxIdx = Math.max(0, pages.length - 1);\n // Start at the last page — more useful than \"start from the beginning\"\n // in practice: users mostly want to see the summary + last turn first.\n const [idx, setIdx] = useState(maxIdx);\n\n useInput((input, key) => {\n if (input === \"q\" || (key.ctrl && input === \"c\")) {\n exit();\n return;\n }\n if (input === \"j\" || key.downArrow || input === \" \" || key.return) {\n setIdx((i) => Math.min(maxIdx, i + 1));\n } else if (input === \"k\" || key.upArrow) {\n setIdx((i) => Math.max(0, i - 1));\n } else if (input === \"g\") {\n setIdx(0);\n } else if (input === \"G\") {\n setIdx(maxIdx);\n } else if (input === \"h\" || key.leftArrow) {\n setIdx(0);\n } else if (input === \"l\" || key.rightArrow) {\n setIdx(maxIdx);\n }\n });\n\n const cumStats = useMemo(() => computeCumulativeStats(pages, idx), [pages, idx]);\n\n const summary = {\n turns: cumStats.turns,\n totalCostUsd: cumStats.totalCostUsd,\n totalInputCostUsd: cumStats.totalInputCostUsd,\n totalOutputCostUsd: cumStats.totalOutputCostUsd,\n claudeEquivalentUsd: cumStats.claudeEquivalentUsd,\n savingsVsClaudePct: cumStats.savingsVsClaudePct,\n cacheHitRatio: cumStats.cacheHitRatio,\n // Replay is read-only — no live last-turn prompt tokens to show.\n lastPromptTokens: 0,\n lastTurnCostUsd: 0,\n };\n\n const prefixHash =\n cumStats.prefixHashes.length === 1\n ? cumStats.prefixHashes[0]!.slice(0, 16)\n : cumStats.prefixHashes.length === 0\n ? \"(untracked)\"\n : `(churned ×${cumStats.prefixHashes.length})`;\n\n const currentPage = pages[idx];\n const progressLabel =\n pages.length === 0 ? \"empty transcript\" : `turn ${idx + 1} / ${pages.length}`;\n\n return (\n <Box flexDirection=\"column\">\n <StatsPanel summary={summary} />\n\n <Box flexDirection=\"column\" marginTop={1} paddingX={1}>\n <Box justifyContent=\"space-between\">\n <Text color=\"cyan\" bold>\n {progressLabel}\n </Text>\n {meta ? (\n <Text dimColor>\n {meta.source}\n {meta.task ? ` · ${meta.task}` : \"\"}\n {meta.mode ? ` · ${meta.mode}` : \"\"}\n </Text>\n ) : null}\n </Box>\n\n {currentPage ? (\n <Static items={currentPage.records.map((rec, i) => ({ key: `${idx}-${i}`, rec }))}>\n {({ key, rec }) => <RecordView key={key} rec={rec} />}\n </Static>\n ) : (\n <Text dimColor italic>\n no records\n </Text>\n )}\n </Box>\n\n <Box marginTop={1} paddingX={1} borderStyle=\"single\" borderColor=\"gray\">\n <Text dimColor>\n <Text bold>j</Text>/<Text bold>↓</Text>/<Text bold>space</Text> next · <Text bold>k</Text>\n /<Text bold>↑</Text> prev · <Text bold>g</Text> first · <Text bold>G</Text> last ·{\" \"}\n <Text bold>q</Text> quit\n </Text>\n </Box>\n </Box>\n );\n}\n","import { basename } from \"node:path\";\nimport { Box, Text, useStdout } from \"ink\";\nimport React from \"react\";\nimport stringWidth from \"string-width\";\nimport type { EditMode } from \"../../config.js\";\nimport type { SessionSummary } from \"../../telemetry/stats.js\";\nimport { Bar, ChromeRule } from \"./primitives.js\";\nimport { COLOR, GRADIENT } from \"./theme.js\";\nimport { formatBalance, formatCost } from \"./theme/tokens.js\";\n\nconst COLD_START_TURNS = 3;\n\nexport interface StatsPanelProps {\n summary: SessionSummary;\n planMode?: boolean;\n editMode?: EditMode;\n balance?: { currency: string; total: number } | null;\n updateAvailable?: string | null;\n proArmed?: boolean;\n escalated?: boolean;\n budgetUsd?: number | null;\n rootDir?: string;\n sessionName?: string | null;\n}\n\nexport function StatsPanel({\n summary,\n planMode,\n editMode,\n balance,\n updateAvailable,\n proArmed,\n escalated,\n budgetUsd,\n rootDir,\n sessionName,\n}: StatsPanelProps) {\n const coldStart = summary.turns <= COLD_START_TURNS;\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <ChromeRow\n editMode={editMode}\n planMode={planMode}\n proArmed={proArmed ?? false}\n escalated={escalated ?? false}\n summary={summary}\n coldStart={coldStart}\n rootDir={rootDir}\n sessionName={sessionName ?? null}\n updateAvailable={updateAvailable}\n balance={balance ?? null}\n />\n <ChromeRule />\n {budgetUsd !== null && budgetUsd !== undefined ? (\n <BudgetRow spent={summary.totalCostUsd} cap={budgetUsd} />\n ) : null}\n </Box>\n );\n}\n\nfunction ChromeRow({\n editMode,\n planMode,\n proArmed,\n escalated,\n summary,\n coldStart,\n rootDir,\n sessionName,\n updateAvailable,\n balance,\n}: {\n editMode?: EditMode;\n planMode?: boolean;\n proArmed: boolean;\n escalated: boolean;\n summary: SessionSummary;\n coldStart: boolean;\n rootDir?: string;\n sessionName?: string | null;\n updateAvailable?: string | null;\n balance?: { currency: string; total: number } | null;\n}) {\n const modePill = pickModePill(planMode, editMode);\n const proPill = escalated\n ? { label: \"⇧ pro\", color: COLOR.err }\n : proArmed\n ? { label: \"⇧ pro\", color: COLOR.warn }\n : null;\n const projectName = rootDir ? basename(rootDir) : null;\n const cachePct = (summary.cacheHitRatio * 100).toFixed(1);\n const cacheColor =\n summary.cacheHitRatio >= 0.7 ? COLOR.ok : summary.cacheHitRatio >= 0.4 ? COLOR.warn : COLOR.err;\n const balanceLabel = balance\n ? `[${formatBalance(balance.total, balance.currency, { label: true })}]`\n : \"\";\n const costLabel = `[${formatCost(summary.totalCostUsd, balance?.currency)}]`;\n const cacheLabel = \"[c ▰▰▰▰▰▰ 100%]\";\n const updateLabel = updateAvailable ? `↑ ${updateAvailable}` : \"\";\n\n // Greedy width-aware fit. Layout (every gap = 2 cells, applied as suffix\n // to update/mode/pro and as prefix to balance/cache):\n // [brand][·project][›session]<spacer>[update][mode][pro][cost][balance][cache]\n // Always shown: brand, project (if rootDir), mode (if set), pro (if armed),\n // cost. These carve fixedLeft / fixedRight first.\n // Optional, dropped greedy by priority: balance > cache > session > update.\n // The flexbox spacer can shrink to 0, so no minimum reserve.\n const { stdout } = useStdout();\n const cols = (stdout?.columns ?? 80) - 2; // subtract paddingX={1} on both sides\n const SEP_DOT = stringWidth(\" · \");\n const SEP_ARROW = stringWidth(\" › \");\n const GAP = 2;\n\n const fixedLeft =\n stringWidth(\"◈ reasonix\") + (projectName ? SEP_DOT + stringWidth(projectName) : 0);\n const modeW = modePill ? GAP + stringWidth(`[${modePill.label}]`) : 0;\n const proW = proPill ? GAP + stringWidth(`[${proPill.label}]`) : 0;\n const fixedRight = modeW + proW + stringWidth(costLabel);\n let budget = cols - fixedLeft - fixedRight;\n\n const balW = balance ? GAP + stringWidth(balanceLabel) : 0;\n const cacheW = GAP + stringWidth(cacheLabel);\n const sessionW = sessionName ? SEP_ARROW + stringWidth(sessionName) : 0;\n const updateW = updateLabel ? GAP + stringWidth(updateLabel) : 0;\n\n const showBalance = balW > 0 && budget >= balW;\n if (showBalance) budget -= balW;\n const showCache = budget >= cacheW;\n if (showCache) budget -= cacheW;\n const showSession = sessionW > 0 && budget >= sessionW;\n if (showSession) budget -= sessionW;\n const showUpdate = updateW > 0 && budget >= updateW;\n if (showUpdate) budget -= updateW;\n\n return (\n <Box>\n <Text bold color={GRADIENT[0]}>\n {\"◈ \"}\n </Text>\n <Text color={COLOR.brand} bold>\n reasonix\n </Text>\n {projectName ? (\n <>\n <Text color={COLOR.info} dimColor>\n {\" · \"}\n </Text>\n <Text>{projectName}</Text>\n {showSession && sessionName ? (\n <>\n <Text color={COLOR.info} dimColor>\n {\" › \"}\n </Text>\n <Text color={COLOR.info}>{sessionName}</Text>\n </>\n ) : null}\n </>\n ) : null}\n\n <Box flexGrow={1} />\n\n {showUpdate ? (\n <>\n <Text color={COLOR.warn} bold>\n {updateLabel}\n </Text>\n <Text>{\" \"}</Text>\n </>\n ) : null}\n {modePill ? (\n <>\n <Text color={modePill.color} bold>\n {`[${modePill.label}]`}\n </Text>\n <Text>{\" \"}</Text>\n </>\n ) : null}\n {proPill ? (\n <>\n <Text color={proPill.color} bold>\n {`[${proPill.label}]`}\n </Text>\n <Text>{\" \"}</Text>\n </>\n ) : null}\n <Text\n color={\n summary.turns === 0 || coldStart ? COLOR.info : sessionCostColor(summary.totalCostUsd)\n }\n bold={summary.turns > 0 && !coldStart}\n dimColor={summary.turns === 0 || coldStart}\n >\n {costLabel}\n </Text>\n {showBalance && balance ? (\n <>\n <Text>{\" \"}</Text>\n <Text color={balance.total < 1 ? COLOR.err : balance.total < 5 ? COLOR.warn : COLOR.ok}>\n {balanceLabel}\n </Text>\n </>\n ) : null}\n {showCache ? (\n <>\n <Text>{\" \"}</Text>\n <Text dimColor>{\"[\"}</Text>\n <Text dimColor>{\"c \"}</Text>\n <Bar\n ratio={summary.cacheHitRatio}\n color={coldStart ? COLOR.info : cacheColor}\n cells={6}\n dim={coldStart}\n />\n <Text> </Text>\n <Text color={coldStart ? undefined : cacheColor} dimColor={coldStart}>\n {coldStart && summary.turns === 0 ? \"—\" : `${cachePct}%`}\n </Text>\n <Text dimColor>{\"]\"}</Text>\n </>\n ) : null}\n </Box>\n );\n}\n\nfunction pickModePill(\n planMode: boolean | undefined,\n editMode: EditMode | undefined,\n): { label: string; color: string } | null {\n if (planMode) return { label: \"PLAN\", color: COLOR.err };\n if (editMode === \"yolo\") return { label: \"yolo\", color: COLOR.err };\n if (editMode === \"auto\") return { label: \"auto\", color: COLOR.primary };\n if (editMode === \"review\") return { label: \"review\", color: COLOR.info };\n return null;\n}\n\nfunction BudgetRow({ spent, cap }: { spent: number; cap: number }) {\n const pct = Math.max(0, (spent / cap) * 100);\n const color = pct >= 100 ? \"#f87171\" : pct >= 80 ? \"#fbbf24\" : \"#94a3b8\";\n return (\n <Box>\n <Text dimColor>{\" budget \"}</Text>\n <Text color={color}>\n {`$${spent.toFixed(4)} / $${cap.toFixed(2)}`}\n <Text dimColor>{` (${pct.toFixed(0)}%)`}</Text>\n </Text>\n </Box>\n );\n}\n\nfunction sessionCostColor(cost: number): string | undefined {\n if (cost <= 0) return undefined;\n if (cost >= 5) return COLOR.err;\n if (cost >= 0.5) return COLOR.warn;\n return COLOR.ok;\n}\n"],"mappings":"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","names":["React","Box","Text","React","React","Box","Text","React"]}
|