reasonix 0.46.1 → 0.47.1
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 +62 -13
- package/README.zh-CN.md +52 -10
- package/dashboard/dist/app.js +217 -60
- package/dashboard/dist/app.js.map +1 -1
- package/dist/cli/{acp-LKJU5DZX.js → acp-GEOAKSTU.js} +26 -54
- package/dist/cli/acp-GEOAKSTU.js.map +1 -0
- package/dist/cli/chat-YTPATMMG.js +51 -0
- package/dist/cli/{chunk-R2ASNSEO.js → chunk-2XY77LW7.js} +8 -8
- package/dist/cli/{chunk-SE7C5ZSI.js → chunk-4MFCAZ2W.js} +3 -3
- package/dist/cli/{chunk-DGA5QYFM.js → chunk-6CRPCJAU.js} +55 -13
- package/dist/cli/chunk-6CRPCJAU.js.map +1 -0
- package/dist/cli/{chunk-TDSBASOF.js → chunk-6QC5RQLE.js} +2 -2
- package/dist/cli/chunk-BQ6HC66J.js +530 -0
- package/dist/cli/chunk-BQ6HC66J.js.map +1 -0
- package/dist/cli/{chunk-7SGGXNB2.js → chunk-CCJAP7G3.js} +2 -2
- package/dist/cli/{chunk-3AAG2CUT.js → chunk-CNG32VAB.js} +2 -2
- package/dist/cli/{chunk-WRONKNIH.js → chunk-DN4B5S6Y.js} +2 -2
- package/dist/cli/{chunk-NCBP5D6E.js → chunk-DQ6K5ZQ7.js} +2 -2
- package/dist/cli/{chunk-MIIZJD5O.js → chunk-DWPAKZTY.js} +14 -3
- package/dist/cli/chunk-DWPAKZTY.js.map +1 -0
- package/dist/cli/{chunk-IYQ325V7.js → chunk-E5WCLUIU.js} +2 -2
- package/dist/cli/{chunk-YRLC2EDF.js → chunk-EQATK2L2.js} +2 -2
- package/dist/cli/{chunk-TEUDEGX2.js → chunk-FY4S7TJZ.js} +19 -5
- package/dist/cli/chunk-FY4S7TJZ.js.map +1 -0
- package/dist/cli/{chunk-C72TNHDE.js → chunk-GH7DC2Y5.js} +2 -2
- package/dist/cli/{chunk-WQ6ZRDQM.js → chunk-HIYTRCSW.js} +16 -12
- package/dist/cli/chunk-HIYTRCSW.js.map +1 -0
- package/dist/cli/{chunk-EAOL43HB.js → chunk-HUILPCYX.js} +3 -3
- package/dist/cli/{chunk-ZOQHVQON.js → chunk-JBH5RM7X.js} +473 -87
- package/dist/cli/chunk-JBH5RM7X.js.map +1 -0
- package/dist/cli/{chunk-XPAUNFOL.js → chunk-KVZZ5U75.js} +3 -2
- package/dist/cli/chunk-KVZZ5U75.js.map +1 -0
- package/dist/cli/{chunk-2AASOSD5.js → chunk-KYQVQ5X4.js} +85 -10
- package/dist/cli/chunk-KYQVQ5X4.js.map +1 -0
- package/dist/cli/{chunk-2425HK6U.js → chunk-LGEKVMMV.js} +7 -2
- package/dist/cli/{chunk-2425HK6U.js.map → chunk-LGEKVMMV.js.map} +1 -1
- package/dist/cli/{chunk-6VANO7KB.js → chunk-NRQ5UP5T.js} +165 -24
- package/dist/cli/chunk-NRQ5UP5T.js.map +1 -0
- package/dist/cli/{chunk-M4E5JK6S.js → chunk-QCFLPSPH.js} +2 -2
- package/dist/cli/{chunk-E7TAHQ4A.js → chunk-RRXUIPWG.js} +19 -18
- package/dist/cli/chunk-RRXUIPWG.js.map +1 -0
- package/dist/cli/{chunk-JLQDNLZF.js → chunk-T5A7EY6B.js} +26 -14
- package/dist/cli/chunk-T5A7EY6B.js.map +1 -0
- package/dist/cli/{chunk-7LOJS3LV.js → chunk-TDHXB2ER.js} +2 -2
- package/dist/cli/{chunk-CXVWUPA3.js → chunk-TKVXTQ3T.js} +26 -26
- package/dist/cli/chunk-TKVXTQ3T.js.map +1 -0
- package/dist/cli/{chunk-JVFEJAJX.js → chunk-TRSAHHCL.js} +107 -11
- package/dist/cli/chunk-TRSAHHCL.js.map +1 -0
- package/dist/cli/{chunk-K3AIFMI6.js → chunk-TRWHTFG7.js} +2 -2
- package/dist/cli/{chunk-7YW6TPXK.js → chunk-XD6P7AFH.js} +28 -31
- package/dist/cli/chunk-XD6P7AFH.js.map +1 -0
- package/dist/cli/{chunk-SPXN5JIT.js → chunk-XMHP7BEE.js} +1787 -1081
- package/dist/cli/chunk-XMHP7BEE.js.map +1 -0
- package/dist/cli/{chunk-JVQT5IYP.js → chunk-YFP3MYMY.js} +19 -9
- package/dist/cli/chunk-YFP3MYMY.js.map +1 -0
- package/dist/cli/{chunk-HNXDZGC6.js → chunk-ZXSCAODE.js} +9 -9
- package/dist/cli/{chunk-HNXDZGC6.js.map → chunk-ZXSCAODE.js.map} +1 -1
- package/dist/cli/{code-2JIHL5M2.js → code-Q4NRVEDG.js} +42 -35
- package/dist/cli/code-Q4NRVEDG.js.map +1 -0
- package/dist/cli/{commands-OPT5AJNH.js → commands-4CDI4GFM.js} +4 -4
- package/dist/cli/{commit-KA37H6GM.js → commit-GW7LDQP5.js} +3 -3
- package/dist/cli/{desktop-5ONTRU3C.js → desktop-EG6P5SF2.js} +321 -36
- package/dist/cli/desktop-EG6P5SF2.js.map +1 -0
- package/dist/cli/{diff-SOIA7AKH.js → diff-VI2YX4FN.js} +8 -8
- package/dist/cli/{doctor-RCUP4XRV.js → doctor-CQTTZP27.js} +9 -9
- package/dist/cli/{events-6KHITNX4.js → events-VRYXOSKI.js} +3 -3
- package/dist/cli/index.js +94 -45
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/{mcp-JP5OWD6R.js → mcp-J2UCD4RZ.js} +2 -2
- package/dist/cli/{mcp-browse-ONCJJPJN.js → mcp-browse-GSX34JEK.js} +2 -2
- package/dist/cli/{mcp-inspect-TPLHW5JA.js → mcp-inspect-RRFYF4ZV.js} +4 -4
- package/dist/cli/{prompt-RJDNCQAP.js → prompt-5TQPIVHV.js} +4 -4
- package/dist/cli/{prune-sessions-MKEATRVL.js → prune-sessions-SEWX7GP6.js} +2 -2
- package/dist/cli/{replay-4NILJG4U.js → replay-MJCEMODU.js} +9 -9
- package/dist/cli/{run-WFGXB4SB.js → run-P4D5VDYE.js} +17 -17
- package/dist/cli/{server-5VFQP3PV.js → server-C25JNNZV.js} +82 -34
- package/dist/cli/server-C25JNNZV.js.map +1 -0
- package/dist/cli/{sessions-5XDJDALO.js → sessions-QIONZJQ6.js} +15 -15
- package/dist/cli/{setup-F6XSWLRA.js → setup-NLQ6G5G4.js} +7 -7
- package/dist/cli/setup-NLQ6G5G4.js.map +1 -0
- package/dist/cli/{stats-ALHBZICE.js → stats-DFZEXHP4.js} +6 -6
- package/dist/cli/{version-JVRAHBMM.js → version-GR3X3MPI.js} +15 -15
- package/dist/index.d.ts +69 -56
- package/dist/index.js +791 -303
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
- package/dist/cli/acp-LKJU5DZX.js.map +0 -1
- package/dist/cli/chat-W7LAWEN6.js +0 -51
- package/dist/cli/chunk-2AASOSD5.js.map +0 -1
- package/dist/cli/chunk-6VANO7KB.js.map +0 -1
- package/dist/cli/chunk-7YW6TPXK.js.map +0 -1
- package/dist/cli/chunk-CXVWUPA3.js.map +0 -1
- package/dist/cli/chunk-DGA5QYFM.js.map +0 -1
- package/dist/cli/chunk-DHRVZJ2D.js +0 -642
- package/dist/cli/chunk-DHRVZJ2D.js.map +0 -1
- package/dist/cli/chunk-E7TAHQ4A.js.map +0 -1
- package/dist/cli/chunk-JLQDNLZF.js.map +0 -1
- package/dist/cli/chunk-JVFEJAJX.js.map +0 -1
- package/dist/cli/chunk-JVQT5IYP.js.map +0 -1
- package/dist/cli/chunk-MIIZJD5O.js.map +0 -1
- package/dist/cli/chunk-SPXN5JIT.js.map +0 -1
- package/dist/cli/chunk-TEUDEGX2.js.map +0 -1
- package/dist/cli/chunk-WQ6ZRDQM.js.map +0 -1
- package/dist/cli/chunk-XPAUNFOL.js.map +0 -1
- package/dist/cli/chunk-ZOQHVQON.js.map +0 -1
- package/dist/cli/code-2JIHL5M2.js.map +0 -1
- package/dist/cli/desktop-5ONTRU3C.js.map +0 -1
- package/dist/cli/server-5VFQP3PV.js.map +0 -1
- package/dist/cli/setup-F6XSWLRA.js.map +0 -1
- /package/dist/cli/{chat-W7LAWEN6.js.map → chat-YTPATMMG.js.map} +0 -0
- /package/dist/cli/{chunk-R2ASNSEO.js.map → chunk-2XY77LW7.js.map} +0 -0
- /package/dist/cli/{chunk-SE7C5ZSI.js.map → chunk-4MFCAZ2W.js.map} +0 -0
- /package/dist/cli/{chunk-TDSBASOF.js.map → chunk-6QC5RQLE.js.map} +0 -0
- /package/dist/cli/{chunk-7SGGXNB2.js.map → chunk-CCJAP7G3.js.map} +0 -0
- /package/dist/cli/{chunk-3AAG2CUT.js.map → chunk-CNG32VAB.js.map} +0 -0
- /package/dist/cli/{chunk-WRONKNIH.js.map → chunk-DN4B5S6Y.js.map} +0 -0
- /package/dist/cli/{chunk-NCBP5D6E.js.map → chunk-DQ6K5ZQ7.js.map} +0 -0
- /package/dist/cli/{chunk-IYQ325V7.js.map → chunk-E5WCLUIU.js.map} +0 -0
- /package/dist/cli/{chunk-YRLC2EDF.js.map → chunk-EQATK2L2.js.map} +0 -0
- /package/dist/cli/{chunk-C72TNHDE.js.map → chunk-GH7DC2Y5.js.map} +0 -0
- /package/dist/cli/{chunk-EAOL43HB.js.map → chunk-HUILPCYX.js.map} +0 -0
- /package/dist/cli/{chunk-M4E5JK6S.js.map → chunk-QCFLPSPH.js.map} +0 -0
- /package/dist/cli/{chunk-7LOJS3LV.js.map → chunk-TDHXB2ER.js.map} +0 -0
- /package/dist/cli/{chunk-K3AIFMI6.js.map → chunk-TRWHTFG7.js.map} +0 -0
- /package/dist/cli/{commands-OPT5AJNH.js.map → commands-4CDI4GFM.js.map} +0 -0
- /package/dist/cli/{commit-KA37H6GM.js.map → commit-GW7LDQP5.js.map} +0 -0
- /package/dist/cli/{diff-SOIA7AKH.js.map → diff-VI2YX4FN.js.map} +0 -0
- /package/dist/cli/{doctor-RCUP4XRV.js.map → doctor-CQTTZP27.js.map} +0 -0
- /package/dist/cli/{events-6KHITNX4.js.map → events-VRYXOSKI.js.map} +0 -0
- /package/dist/cli/{mcp-JP5OWD6R.js.map → mcp-J2UCD4RZ.js.map} +0 -0
- /package/dist/cli/{mcp-browse-ONCJJPJN.js.map → mcp-browse-GSX34JEK.js.map} +0 -0
- /package/dist/cli/{mcp-inspect-TPLHW5JA.js.map → mcp-inspect-RRFYF4ZV.js.map} +0 -0
- /package/dist/cli/{prompt-RJDNCQAP.js.map → prompt-5TQPIVHV.js.map} +0 -0
- /package/dist/cli/{prune-sessions-MKEATRVL.js.map → prune-sessions-SEWX7GP6.js.map} +0 -0
- /package/dist/cli/{replay-4NILJG4U.js.map → replay-MJCEMODU.js.map} +0 -0
- /package/dist/cli/{run-WFGXB4SB.js.map → run-P4D5VDYE.js.map} +0 -0
- /package/dist/cli/{sessions-5XDJDALO.js.map → sessions-QIONZJQ6.js.map} +0 -0
- /package/dist/cli/{stats-ALHBZICE.js.map → stats-DFZEXHP4.js.map} +0 -0
- /package/dist/cli/{version-JVRAHBMM.js.map → version-GR3X3MPI.js.map} +0 -0
|
@@ -2,65 +2,67 @@
|
|
|
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
|
buildCodeToolset
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-XD6P7AFH.js";
|
|
6
6
|
import {
|
|
7
7
|
Eventizer,
|
|
8
8
|
autoResolveVerdict
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-ZXSCAODE.js";
|
|
10
10
|
import {
|
|
11
11
|
formatMcpLifecycleEvent,
|
|
12
12
|
formatMcpSlowToast
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-DQ6K5ZQ7.js";
|
|
14
14
|
import {
|
|
15
15
|
buildTransportFromSpec,
|
|
16
16
|
preflightStdioSpec
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-EQATK2L2.js";
|
|
18
18
|
import {
|
|
19
19
|
CacheFirstLoop,
|
|
20
20
|
ImmutablePrefix,
|
|
21
21
|
bridgeMcpTools
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import "./chunk-
|
|
22
|
+
} from "./chunk-JBH5RM7X.js";
|
|
23
|
+
import "./chunk-6QC5RQLE.js";
|
|
24
24
|
import {
|
|
25
25
|
openTranscriptFile,
|
|
26
26
|
recordFromLoopEvent,
|
|
27
27
|
writeRecord
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-HUILPCYX.js";
|
|
29
29
|
import {
|
|
30
30
|
McpClient
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-HIYTRCSW.js";
|
|
32
32
|
import {
|
|
33
33
|
codeSystemPrompt
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-BQ6HC66J.js";
|
|
35
35
|
import {
|
|
36
36
|
canonicalPresetName,
|
|
37
37
|
resolvePreset
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-LGEKVMMV.js";
|
|
39
39
|
import "./chunk-6OWJV3YW.js";
|
|
40
40
|
import {
|
|
41
41
|
DeepSeekClient
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-DWPAKZTY.js";
|
|
43
43
|
import "./chunk-25T6CVUP.js";
|
|
44
44
|
import {
|
|
45
45
|
loadDotenv
|
|
46
46
|
} from "./chunk-2UQP6H6T.js";
|
|
47
|
-
import "./chunk-
|
|
47
|
+
import "./chunk-KVZZ5U75.js";
|
|
48
48
|
import {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
derivePrefix,
|
|
50
|
+
pauseGate,
|
|
51
|
+
toolKindFor
|
|
52
|
+
} from "./chunk-TRSAHHCL.js";
|
|
53
|
+
import "./chunk-FY4S7TJZ.js";
|
|
52
54
|
import "./chunk-PLHAZOLZ.js";
|
|
53
|
-
import "./chunk-
|
|
54
|
-
import "./chunk-
|
|
55
|
+
import "./chunk-T5A7EY6B.js";
|
|
56
|
+
import "./chunk-GH7DC2Y5.js";
|
|
55
57
|
import "./chunk-S4XVGLRW.js";
|
|
56
58
|
import {
|
|
57
59
|
timestampSuffix
|
|
58
|
-
} from "./chunk-
|
|
59
|
-
import "./chunk-
|
|
60
|
-
import "./chunk-
|
|
60
|
+
} from "./chunk-RRXUIPWG.js";
|
|
61
|
+
import "./chunk-DN4B5S6Y.js";
|
|
62
|
+
import "./chunk-QCFLPSPH.js";
|
|
61
63
|
import {
|
|
62
64
|
t
|
|
63
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-NRQ5UP5T.js";
|
|
64
66
|
import {
|
|
65
67
|
loadApiKey,
|
|
66
68
|
loadBaseUrl,
|
|
@@ -69,7 +71,7 @@ import {
|
|
|
69
71
|
loadReasoningEffort,
|
|
70
72
|
normalizeMcpConfig,
|
|
71
73
|
readConfig
|
|
72
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-6CRPCJAU.js";
|
|
73
75
|
import {
|
|
74
76
|
VERSION
|
|
75
77
|
} from "./chunk-XXC2BYTV.js";
|
|
@@ -81,32 +83,6 @@ import { existsSync, statSync } from "fs";
|
|
|
81
83
|
import { resolve } from "path";
|
|
82
84
|
|
|
83
85
|
// src/acp/dispatch.ts
|
|
84
|
-
var READ_TOOLS = /* @__PURE__ */ new Set([
|
|
85
|
-
"read_file",
|
|
86
|
-
"list_directory",
|
|
87
|
-
"directory_tree",
|
|
88
|
-
"get_file_info",
|
|
89
|
-
"glob"
|
|
90
|
-
]);
|
|
91
|
-
var EDIT_TOOLS = /* @__PURE__ */ new Set([
|
|
92
|
-
"write_file",
|
|
93
|
-
"edit_file",
|
|
94
|
-
"multi_edit",
|
|
95
|
-
"create_directory",
|
|
96
|
-
"delete_file",
|
|
97
|
-
"delete_directory",
|
|
98
|
-
"move_file",
|
|
99
|
-
"copy_file"
|
|
100
|
-
]);
|
|
101
|
-
var SEARCH_TOOLS = /* @__PURE__ */ new Set(["search_content", "search_files"]);
|
|
102
|
-
var EXECUTE_TOOLS = /* @__PURE__ */ new Set(["run_command", "run_background"]);
|
|
103
|
-
function toolKindFor(name) {
|
|
104
|
-
if (READ_TOOLS.has(name)) return "read";
|
|
105
|
-
if (EDIT_TOOLS.has(name)) return "edit";
|
|
106
|
-
if (SEARCH_TOOLS.has(name)) return "search";
|
|
107
|
-
if (EXECUTE_TOOLS.has(name)) return "execute";
|
|
108
|
-
return "other";
|
|
109
|
-
}
|
|
110
86
|
function tryParseJson(raw) {
|
|
111
87
|
if (!raw) return void 0;
|
|
112
88
|
try {
|
|
@@ -243,10 +219,6 @@ function permissionOptionsFor(req) {
|
|
|
243
219
|
}
|
|
244
220
|
}
|
|
245
221
|
}
|
|
246
|
-
function commandPrefix(command) {
|
|
247
|
-
const first = command.trim().split(/\s+/)[0] ?? command.trim();
|
|
248
|
-
return `${first} *`;
|
|
249
|
-
}
|
|
250
222
|
function pathPrefix(p) {
|
|
251
223
|
return p;
|
|
252
224
|
}
|
|
@@ -259,7 +231,7 @@ function verdictFor(req, result) {
|
|
|
259
231
|
if (cancelled || optionId === ID_REJECT) return { type: "deny" };
|
|
260
232
|
if (optionId === ID_ALLOW_ALWAYS) {
|
|
261
233
|
const payload = req.payload;
|
|
262
|
-
return { type: "always_allow", prefix:
|
|
234
|
+
return { type: "always_allow", prefix: derivePrefix(payload.command ?? "") };
|
|
263
235
|
}
|
|
264
236
|
return { type: "run_once" };
|
|
265
237
|
}
|
|
@@ -708,4 +680,4 @@ export {
|
|
|
708
680
|
acpCommand,
|
|
709
681
|
loadMcpServers
|
|
710
682
|
};
|
|
711
|
-
//# sourceMappingURL=acp-
|
|
683
|
+
//# sourceMappingURL=acp-GEOAKSTU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/acp.ts","../../src/acp/dispatch.ts","../../src/acp/gates.ts","../../src/acp/protocol.ts","../../src/acp/server.ts"],"sourcesContent":["/** ACP (Agent Client Protocol) agent — drives the cache-first loop over stdio NDJSON JSON-RPC. */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { type WriteStream, existsSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { dispatchKernelEvent } from \"../../acp/dispatch.js\";\nimport { requestPermissionForGate } from \"../../acp/gates.js\";\nimport {\n ACP_PROTOCOL_VERSION,\n type ContentBlock,\n ERR_INVALID_PARAMS,\n type InitializeParams,\n type InitializeResult,\n type SessionCancelParams,\n type SessionNewParams,\n type SessionNewResult,\n type SessionPromptParams,\n type SessionPromptResult,\n type SessionUpdateParams,\n type StopReason,\n flattenPrompt,\n} from \"../../acp/protocol.js\";\nimport { AcpServer } from \"../../acp/server.js\";\nimport { codeSystemPrompt } from \"../../code/prompt.js\";\nimport { buildCodeToolset } from \"../../code/setup.js\";\nimport {\n loadApiKey,\n loadBaseUrl,\n loadPreset,\n loadReasoningEffort,\n normalizeMcpConfig,\n readConfig,\n} from \"../../config.js\";\nimport { loadEditMode } from \"../../config.js\";\nimport { Eventizer } from \"../../core/eventize.js\";\nimport { pauseGate } from \"../../core/pause-gate.js\";\nimport { autoResolveVerdict } from \"../../core/pause-policy.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 { timestampSuffix } from \"../../memory/session.js\";\nimport { openTranscriptFile, recordFromLoopEvent, writeRecord } from \"../../transcript/log.js\";\nimport { VERSION } from \"../../version.js\";\nimport { formatMcpLifecycleEvent } from \"../ui/mcp-lifecycle.js\";\nimport { formatMcpSlowToast } from \"../ui/mcp-toast.js\";\nimport { canonicalPresetName, resolvePreset } from \"../ui/presets.js\";\n\nexport interface AcpOptions {\n model?: string;\n dir?: string;\n budgetUsd?: number;\n transcript?: string;\n yolo?: boolean;\n /** Zero or more MCP server specs. Each: `\"name=cmd args...\"` or `\"cmd args...\"`. */\n mcpSpecs?: string[];\n /** Global prefix — only honored when a single anonymous server is given. */\n mcpPrefix?: string;\n}\n\ninterface Session {\n id: string;\n rootDir: string;\n model: string;\n toolset: Awaited<ReturnType<typeof buildCodeToolset>>;\n mcpClients: McpClient[];\n loop: CacheFirstLoop;\n eventizer: Eventizer;\n ctx: { model: string; prefixHash: string; reasoningEffort: \"high\" | \"max\" };\n aborter: AbortController | null;\n}\n\nfunction resolveMcpPrefix(\n specName: string | null | undefined,\n specCount: number,\n globalPrefix: string | undefined,\n): string {\n if (specName) return `${specName}_`;\n if (specCount === 1 && globalPrefix) return globalPrefix;\n return \"\";\n}\n\n// Mirrors run.ts:81-142.\nexport async function loadMcpServers(\n tools: import(\"../../tools.js\").ToolRegistry,\n specs: string[],\n globalPrefix: string | undefined,\n): Promise<McpClient[]> {\n const clients: McpClient[] = [];\n if (specs.length === 0) return clients;\n const cfg = readConfig();\n const normalizedSpecs = normalizeMcpConfig(cfg, specs);\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 = resolveMcpPrefix(spec.name, normalizedSpecs.length, globalPrefix);\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 } catch (err) {\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 return clients;\n}\n\nfunction resolveDir(raw: string | undefined, fallback: string): string {\n if (!raw) return fallback;\n const abs = resolve(raw);\n if (!existsSync(abs) || !statSync(abs).isDirectory()) {\n throw new Error(`workspace directory not found: ${abs}`);\n }\n return abs;\n}\n\nasync function buildSession(opts: {\n rootDir: string;\n modelOverride?: string;\n budgetUsd?: number;\n mcpSpecs?: string[];\n mcpPrefix?: string;\n}): Promise<Session> {\n const preset = canonicalPresetName(loadPreset());\n const resolved = resolvePreset(preset);\n const model = opts.modelOverride || resolved.model;\n const toolset = await buildCodeToolset({ rootDir: opts.rootDir });\n // Bridge MCP tools BEFORE building the prefix so their specs make it into the cache key.\n const mcpClients = await loadMcpServers(toolset.tools, opts.mcpSpecs ?? [], opts.mcpPrefix);\n const system = codeSystemPrompt(opts.rootDir, {\n hasSemanticSearch: toolset.semantic.enabled,\n modelId: model,\n });\n const client = new DeepSeekClient({ baseUrl: loadBaseUrl() });\n const prefix = new ImmutablePrefix({ system, toolSpecs: toolset.tools.specs() });\n const loop = new CacheFirstLoop({\n client,\n prefix,\n tools: toolset.tools,\n model,\n budgetUsd: opts.budgetUsd,\n session: `acp-${timestampSuffix()}`,\n });\n return {\n id: `sess_${timestampSuffix()}-${Math.random().toString(36).slice(2, 8)}`,\n rootDir: opts.rootDir,\n model,\n toolset,\n mcpClients,\n loop,\n eventizer: new Eventizer(),\n ctx: {\n model,\n prefixHash: prefix.fingerprint,\n reasoningEffort: loadReasoningEffort(),\n },\n aborter: null,\n };\n}\n\nexport async function acpCommand(opts: AcpOptions): Promise<void> {\n loadDotenv();\n if (loadApiKey()) {\n process.env.DEEPSEEK_API_KEY = loadApiKey();\n }\n\n const defaultDir = resolveDir(opts.dir, process.cwd());\n const sessions = new Map<string, Session>();\n const sessionContext = new AsyncLocalStorage<string>();\n const server = new AcpServer();\n\n let transcriptStream: WriteStream | null = null;\n if (opts.transcript) {\n const defaultModel = opts.model || resolvePreset(canonicalPresetName(loadPreset())).model;\n transcriptStream = openTranscriptFile(opts.transcript, {\n version: 1,\n source: \"reasonix acp\",\n model: defaultModel,\n startedAt: new Date().toISOString(),\n });\n }\n\n pauseGate.on((req) => {\n const editMode = opts.yolo ? \"yolo\" : loadEditMode();\n const auto = autoResolveVerdict(req, editMode);\n if (auto !== null) {\n pauseGate.resolve(req.id, auto);\n return;\n }\n const activeSessionId = sessionContext.getStore();\n if (!activeSessionId || !sessions.has(activeSessionId)) {\n pauseGate.cancel(req.id);\n return;\n }\n void (async () => {\n const verdict = await requestPermissionForGate(server, activeSessionId, req);\n pauseGate.resolve(req.id, verdict);\n })();\n });\n\n server.onRequest<InitializeParams, InitializeResult>(\"initialize\", (params) => {\n if (!params || typeof params !== \"object\") {\n throw Object.assign(new Error(\"initialize: missing params\"), { code: ERR_INVALID_PARAMS });\n }\n return {\n protocolVersion: ACP_PROTOCOL_VERSION,\n agentCapabilities: {\n loadSession: false,\n promptCapabilities: { image: false, audio: false, embeddedContext: true },\n mcpCapabilities: { http: false, sse: false },\n },\n agentInfo: { name: \"reasonix\", title: \"Reasonix\", version: VERSION },\n authMethods: [],\n };\n });\n\n server.onRequest<SessionNewParams, SessionNewResult>(\"session/new\", async (params) => {\n const rootDir = resolveDir(params?.cwd, defaultDir);\n const session = await buildSession({\n rootDir,\n modelOverride: opts.model,\n budgetUsd: opts.budgetUsd,\n mcpSpecs: opts.mcpSpecs,\n mcpPrefix: opts.mcpPrefix,\n });\n sessions.set(session.id, session);\n return { sessionId: session.id };\n });\n\n server.onRequest<SessionPromptParams, SessionPromptResult>(\"session/prompt\", async (params) => {\n if (!params?.sessionId) {\n throw Object.assign(new Error(\"session/prompt: missing sessionId\"), {\n code: ERR_INVALID_PARAMS,\n });\n }\n const session = sessions.get(params.sessionId);\n if (!session) {\n throw Object.assign(new Error(`session/prompt: unknown session ${params.sessionId}`), {\n code: ERR_INVALID_PARAMS,\n });\n }\n const text = flattenPrompt(params.prompt as ContentBlock[]);\n if (!text) {\n throw Object.assign(new Error(\"session/prompt: empty prompt\"), { code: ERR_INVALID_PARAMS });\n }\n session.aborter = new AbortController();\n let stopReason: StopReason = \"end_turn\";\n try {\n await sessionContext.run(session.id, async () => {\n for await (const ev of session.loop.step(text)) {\n if (session.aborter?.signal.aborted) {\n stopReason = \"cancelled\";\n break;\n }\n // transcript needs raw LoopEvent (usage/cost/stats); kernel events lose those fields\n if (transcriptStream) {\n writeRecord(\n transcriptStream,\n recordFromLoopEvent(ev, {\n model: session.ctx.model,\n prefixHash: session.ctx.prefixHash,\n }),\n );\n }\n for (const kev of session.eventizer.consume(ev, session.ctx)) {\n dispatchKernelEvent(server, session.id, kev);\n if (kev.type === \"error\") stopReason = \"error\";\n }\n }\n });\n } catch (err) {\n const message = (err as Error).message;\n server.sendNotification(\"session/update\", {\n sessionId: session.id,\n update: {\n sessionUpdate: \"agent_message_chunk\",\n content: { type: \"text\", text: `\\n\\n[error] ${message}` },\n },\n } satisfies SessionUpdateParams);\n stopReason = \"error\";\n } finally {\n session.aborter = null;\n }\n return { stopReason };\n });\n\n server.onNotification<SessionCancelParams>(\"session/cancel\", (params) => {\n const session = params?.sessionId ? sessions.get(params.sessionId) : undefined;\n session?.aborter?.abort();\n });\n\n try {\n await server.done();\n } finally {\n transcriptStream?.end();\n // Tear down MCP children so spawned servers don't outlive the agent.\n const closes: Promise<unknown>[] = [];\n for (const session of sessions.values()) {\n for (const mcp of session.mcpClients) {\n closes.push(mcp.close().catch(() => undefined));\n }\n }\n await Promise.all(closes);\n }\n}\n","/** Map kernel events (model.delta / tool.preparing|intent|result) to ACP session/update notifications. */\n\nimport { toolKindFor } from \"@reasonix/core-utils\";\nimport type { Event as KernelEvent } from \"../core/events.js\";\nimport type { SessionUpdateParams } from \"./protocol.js\";\nimport type { AcpServer } from \"./server.js\";\nexport { toolKindFor } from \"@reasonix/core-utils\";\nexport type { AcpToolKind } from \"@reasonix/core-utils\";\n\nfunction tryParseJson(raw: string): unknown {\n if (!raw) return undefined;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n}\n\n/** Stateless mapping from one kernel event to (zero or more) ACP session/update notifications. */\nexport function dispatchKernelEvent(server: AcpServer, sessionId: string, ev: KernelEvent): void {\n switch (ev.type) {\n case \"model.delta\": {\n if (!ev.text) return;\n const variant = ev.channel === \"reasoning\" ? \"agent_thought_chunk\" : \"agent_message_chunk\";\n emit(server, {\n sessionId,\n update: { sessionUpdate: variant, content: { type: \"text\", text: ev.text } },\n });\n return;\n }\n case \"tool.preparing\": {\n emit(server, {\n sessionId,\n update: {\n sessionUpdate: \"tool_call\",\n toolCallId: ev.callId,\n title: ev.name,\n kind: toolKindFor(ev.name),\n status: \"pending\",\n },\n });\n return;\n }\n case \"tool.intent\": {\n emit(server, {\n sessionId,\n update: {\n sessionUpdate: \"tool_call_update\",\n toolCallId: ev.callId,\n status: \"in_progress\",\n },\n });\n const rawInput = tryParseJson(ev.args);\n if (rawInput !== undefined) {\n emit(server, {\n sessionId,\n update: {\n sessionUpdate: \"tool_call\",\n toolCallId: ev.callId,\n title: ev.name,\n kind: toolKindFor(ev.name),\n status: \"in_progress\",\n rawInput,\n },\n });\n }\n return;\n }\n case \"tool.result\": {\n emit(server, {\n sessionId,\n update: {\n sessionUpdate: \"tool_call_update\",\n toolCallId: ev.callId,\n status: ev.ok ? \"completed\" : \"failed\",\n content: [\n {\n type: \"content\",\n content: { type: \"text\", text: clip(ev.output) },\n },\n ],\n },\n });\n return;\n }\n default:\n return;\n }\n}\n\nconst MAX_RESULT_CHARS = 8000;\nfunction clip(text: string): string {\n if (text.length <= MAX_RESULT_CHARS) return text;\n return `${text.slice(0, MAX_RESULT_CHARS)}\\n…(${text.length - MAX_RESULT_CHARS} more chars truncated)`;\n}\n\nfunction emit(server: AcpServer, params: SessionUpdateParams): void {\n server.sendNotification(\"session/update\", params);\n}\n","/** Bridges Reasonix's internal `PauseGate` requests onto ACP `session/request_permission` round-trips. */\n\nimport type {\n CheckpointVerdict,\n ChoiceVerdict,\n ConfirmationChoice,\n PlanVerdict,\n RevisionVerdict,\n} from \"@reasonix/core-utils\";\nimport { derivePrefix } from \"@reasonix/core-utils\";\nimport type { PauseRequest } from \"../core/pause-gate.js\";\nimport type {\n PermissionOption,\n PermissionRequestParams,\n PermissionRequestResult,\n} from \"./protocol.js\";\nimport type { AcpServer } from \"./server.js\";\n\nconst ID_ALLOW_ONCE = \"allow_once\";\nconst ID_ALLOW_ALWAYS = \"allow_always\";\nconst ID_REJECT = \"reject\";\nconst ID_REFINE = \"refine\";\nconst ID_REVISE = \"revise\";\nconst ID_STOP = \"stop\";\nconst ID_CANCEL = \"cancel\";\nconst ID_ACCEPT = \"accept\";\n\n/** Build the `options` list shown to the host for a given gate kind. The IDs are what the host echoes back in the response. */\nexport function permissionOptionsFor(req: PauseRequest): PermissionOption[] {\n switch (req.kind) {\n case \"run_command\":\n case \"run_background\":\n case \"path_access\":\n return [\n { optionId: ID_ALLOW_ONCE, name: \"Allow once\", kind: \"allow_once\" },\n { optionId: ID_ALLOW_ALWAYS, name: \"Allow always\", kind: \"allow_always\" },\n { optionId: ID_REJECT, name: \"Reject\", kind: \"reject_once\" },\n ];\n case \"plan_proposed\":\n return [\n { optionId: ID_ALLOW_ONCE, name: \"Approve plan\", kind: \"allow_once\" },\n { optionId: ID_REFINE, name: \"Refine\", kind: \"allow_once\" },\n { optionId: ID_CANCEL, name: \"Cancel\", kind: \"reject_once\" },\n ];\n case \"plan_checkpoint\":\n return [\n { optionId: ID_ALLOW_ONCE, name: \"Continue\", kind: \"allow_once\" },\n { optionId: ID_REVISE, name: \"Revise\", kind: \"allow_once\" },\n { optionId: ID_STOP, name: \"Stop\", kind: \"reject_once\" },\n ];\n case \"plan_revision\":\n return [\n { optionId: ID_ACCEPT, name: \"Accept revision\", kind: \"allow_once\" },\n { optionId: ID_REJECT, name: \"Keep original plan\", kind: \"reject_once\" },\n ];\n case \"choice\": {\n const payload = req.payload as { options: { id: string; title?: string }[] };\n const opts: PermissionOption[] = (payload.options ?? []).map((o) => ({\n optionId: o.id,\n name: o.title ?? o.id,\n kind: \"allow_once\",\n }));\n opts.push({ optionId: ID_CANCEL, name: \"Cancel\", kind: \"reject_once\" });\n return opts;\n }\n }\n}\n\nfunction pathPrefix(p: string): string {\n return p;\n}\n\n/** Map an ACP permission response back into the internal verdict shape PauseGate.resolve expects. */\nexport function verdictFor(\n req: PauseRequest,\n result: PermissionRequestResult,\n): ConfirmationChoice | PlanVerdict | CheckpointVerdict | RevisionVerdict | ChoiceVerdict {\n const cancelled = result.outcome.outcome === \"cancelled\";\n const optionId = result.outcome.outcome === \"selected\" ? result.outcome.optionId : null;\n switch (req.kind) {\n case \"run_command\":\n case \"run_background\": {\n if (cancelled || optionId === ID_REJECT) return { type: \"deny\" };\n if (optionId === ID_ALLOW_ALWAYS) {\n const payload = req.payload as { command?: string };\n return { type: \"always_allow\", prefix: derivePrefix(payload.command ?? \"\") };\n }\n return { type: \"run_once\" };\n }\n case \"path_access\": {\n if (cancelled || optionId === ID_REJECT) return { type: \"deny\" };\n if (optionId === ID_ALLOW_ALWAYS) {\n const payload = req.payload as { allowPrefix: string };\n return { type: \"always_allow\", prefix: pathPrefix(payload.allowPrefix) };\n }\n return { type: \"run_once\" };\n }\n case \"plan_proposed\": {\n if (cancelled || optionId === ID_CANCEL) return { type: \"cancel\" };\n if (optionId === ID_REFINE) return { type: \"refine\" };\n return { type: \"approve\" };\n }\n case \"plan_checkpoint\": {\n if (cancelled || optionId === ID_STOP) return { type: \"stop\" };\n if (optionId === ID_REVISE) return { type: \"revise\" };\n return { type: \"continue\" };\n }\n case \"plan_revision\": {\n if (cancelled) return { type: \"cancelled\" };\n if (optionId === ID_ACCEPT) return { type: \"accepted\" };\n return { type: \"rejected\" };\n }\n case \"choice\": {\n if (cancelled || optionId === ID_CANCEL || !optionId) return { type: \"cancel\" };\n return { type: \"pick\", optionId };\n }\n }\n}\n\nfunction permissionTitleFor(req: PauseRequest): string {\n switch (req.kind) {\n case \"run_command\":\n case \"run_background\":\n return `Run command — ${((req.payload as { command?: string }).command ?? \"\").slice(0, 80)}`;\n case \"path_access\":\n return `Access path — ${(req.payload as { path: string }).path}`;\n case \"plan_proposed\":\n return \"Approve plan\";\n case \"plan_checkpoint\":\n return `Checkpoint — ${(req.payload as { title?: string }).title ?? \"step complete\"}`;\n case \"plan_revision\":\n return \"Approve plan revision\";\n case \"choice\":\n return (req.payload as { question?: string }).question ?? \"Choose an option\";\n }\n}\n\nfunction permissionKindFor(req: PauseRequest): \"execute\" | \"edit\" | \"other\" {\n if (req.kind === \"run_command\" || req.kind === \"run_background\") return \"execute\";\n if (req.kind === \"path_access\") {\n return (req.payload as { intent?: string }).intent === \"write\" ? \"edit\" : \"other\";\n }\n return \"other\";\n}\n\n/** Forward a PauseGate request as an ACP session/request_permission outbound call. Returns the verdict to pass into pauseGate.resolve. */\nexport async function requestPermissionForGate(\n server: AcpServer,\n sessionId: string,\n req: PauseRequest,\n): Promise<ConfirmationChoice | PlanVerdict | CheckpointVerdict | RevisionVerdict | ChoiceVerdict> {\n const params: PermissionRequestParams = {\n sessionId,\n toolCall: {\n toolCallId: `gate-${req.id}`,\n title: permissionTitleFor(req),\n kind: permissionKindFor(req),\n status: \"pending\",\n rawInput: req.payload,\n },\n options: permissionOptionsFor(req),\n };\n let result: PermissionRequestResult;\n try {\n result = await server.sendRequest<PermissionRequestResult>(\n \"session/request_permission\",\n params,\n );\n } catch {\n result = { outcome: { outcome: \"cancelled\" } };\n }\n return verdictFor(req, result);\n}\n","/** Wire types for the Agent Client Protocol — https://agentclientprotocol.com */\n\nexport const ACP_PROTOCOL_VERSION = 1;\n\nexport type JsonRpcId = string | number;\n\nexport interface JsonRpcRequest<P = unknown> {\n jsonrpc: \"2.0\";\n id: JsonRpcId;\n method: string;\n params?: P;\n}\n\nexport interface JsonRpcNotification<P = unknown> {\n jsonrpc: \"2.0\";\n method: string;\n params?: P;\n}\n\nexport interface JsonRpcError {\n code: number;\n message: string;\n data?: unknown;\n}\n\nexport interface JsonRpcResponse<R = unknown> {\n jsonrpc: \"2.0\";\n id: JsonRpcId | null;\n result?: R;\n error?: JsonRpcError;\n}\n\nexport interface InitializeParams {\n protocolVersion: number;\n clientCapabilities?: {\n fs?: { readTextFile?: boolean; writeTextFile?: boolean };\n terminal?: boolean;\n };\n clientInfo?: { name: string; title?: string; version?: string };\n}\n\nexport interface InitializeResult {\n protocolVersion: number;\n agentCapabilities: {\n loadSession?: boolean;\n promptCapabilities?: { image?: boolean; audio?: boolean; embeddedContext?: boolean };\n mcpCapabilities?: { http?: boolean; sse?: boolean };\n };\n agentInfo: { name: string; title?: string; version: string };\n authMethods: never[];\n}\n\nexport interface SessionNewParams {\n cwd?: string;\n mcpServers?: Array<{\n name: string;\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n }>;\n}\n\nexport interface SessionNewResult {\n sessionId: string;\n}\n\nexport type ContentBlock =\n | { type: \"text\"; text: string }\n | { type: \"resource\"; resource: { uri: string; mimeType?: string; text?: string } }\n | { type: \"image\"; mimeType: string; data: string }\n | { type: \"audio\"; mimeType: string; data: string };\n\nexport interface SessionPromptParams {\n sessionId: string;\n prompt: ContentBlock[];\n}\n\nexport type StopReason = \"end_turn\" | \"tool_use_complete\" | \"cancelled\" | \"error\";\n\nexport interface SessionPromptResult {\n stopReason: StopReason;\n}\n\nexport type SessionUpdate =\n | {\n sessionUpdate: \"agent_message_chunk\";\n content: { type: \"text\"; text: string };\n }\n | {\n sessionUpdate: \"agent_thought_chunk\";\n content: { type: \"text\"; text: string };\n }\n | {\n sessionUpdate: \"tool_call\";\n toolCallId: string;\n title?: string;\n kind?: \"read\" | \"edit\" | \"search\" | \"execute\" | \"other\";\n status?: \"pending\" | \"in_progress\" | \"completed\" | \"failed\";\n rawInput?: unknown;\n }\n | {\n sessionUpdate: \"tool_call_update\";\n toolCallId: string;\n status?: \"pending\" | \"in_progress\" | \"completed\" | \"failed\";\n content?: Array<{ type: \"content\"; content: { type: \"text\"; text: string } }>;\n }\n | {\n sessionUpdate: \"plan\";\n entries: Array<{\n content: string;\n priority: \"high\" | \"medium\" | \"low\";\n status: \"pending\" | \"in_progress\" | \"completed\";\n }>;\n };\n\nexport interface SessionUpdateParams {\n sessionId: string;\n update: SessionUpdate;\n}\n\nexport interface SessionCancelParams {\n sessionId: string;\n}\n\nexport type PermissionOptionKind = \"allow_once\" | \"allow_always\" | \"reject_once\" | \"reject_always\";\n\nexport interface PermissionOption {\n optionId: string;\n name: string;\n kind: PermissionOptionKind;\n}\n\nexport interface PermissionRequestParams {\n sessionId: string;\n toolCall: {\n toolCallId: string;\n title?: string;\n kind?: \"read\" | \"edit\" | \"search\" | \"execute\" | \"other\";\n status?: \"pending\";\n rawInput?: unknown;\n };\n options: PermissionOption[];\n}\n\nexport type PermissionOutcome =\n | { outcome: \"selected\"; optionId: string }\n | { outcome: \"cancelled\" };\n\nexport interface PermissionRequestResult {\n outcome: PermissionOutcome;\n}\n\nexport const ERR_PARSE = -32700;\nexport const ERR_INVALID_REQUEST = -32600;\nexport const ERR_METHOD_NOT_FOUND = -32601;\nexport const ERR_INVALID_PARAMS = -32602;\nexport const ERR_INTERNAL = -32603;\n\n/** Extract the user prompt text out of ACP content blocks. Resource blocks contribute their inline `text` if present. */\nexport function flattenPrompt(blocks: ContentBlock[]): string {\n const parts: string[] = [];\n for (const b of blocks) {\n if (b.type === \"text\") parts.push(b.text);\n else if (b.type === \"resource\" && b.resource.text) parts.push(b.resource.text);\n }\n return parts.join(\"\\n\\n\").trim();\n}\n","/** NDJSON JSON-RPC 2.0 server — per the ACP transport spec, one JSON object per line, no embedded newlines. */\n\nimport { type Interface, createInterface } from \"node:readline\";\nimport type { Readable, Writable } from \"node:stream\";\nimport {\n ERR_INTERNAL,\n ERR_METHOD_NOT_FOUND,\n ERR_PARSE,\n type JsonRpcId,\n type JsonRpcNotification,\n type JsonRpcRequest,\n type JsonRpcResponse,\n} from \"./protocol.js\";\n\nexport type RequestHandler<P = unknown, R = unknown> = (params: P) => Promise<R> | R;\nexport type NotificationHandler<P = unknown> = (params: P) => Promise<void> | void;\n\nexport interface AcpServerOptions {\n input?: Readable;\n output?: Writable;\n}\n\ninterface PendingOutbound {\n resolve: (value: unknown) => void;\n reject: (err: Error) => void;\n}\n\nexport class AcpServer {\n private requestHandlers = new Map<string, RequestHandler>();\n private notificationHandlers = new Map<string, NotificationHandler>();\n private pending = new Map<JsonRpcId, PendingOutbound>();\n private nextOutboundId = 1;\n private readonly output: Writable;\n private readonly rl: Interface;\n private closed = false;\n\n constructor(opts: AcpServerOptions = {}) {\n this.output = opts.output ?? process.stdout;\n const input = opts.input ?? process.stdin;\n this.rl = createInterface({ input });\n this.rl.on(\"line\", (line) => {\n void this.handleLine(line);\n });\n }\n\n onRequest<P, R>(method: string, handler: RequestHandler<P, R>): void {\n this.requestHandlers.set(method, handler as RequestHandler);\n }\n\n onNotification<P>(method: string, handler: NotificationHandler<P>): void {\n this.notificationHandlers.set(method, handler as NotificationHandler);\n }\n\n sendNotification(method: string, params: unknown): void {\n this.write({ jsonrpc: \"2.0\", method, params });\n }\n\n /** Send an outbound JSON-RPC request and resolve when the peer responds. */\n sendRequest<R = unknown>(method: string, params: unknown): Promise<R> {\n const id = this.nextOutboundId++;\n return new Promise<R>((resolve, reject) => {\n this.pending.set(id, {\n resolve: resolve as (v: unknown) => void,\n reject,\n });\n this.write({ jsonrpc: \"2.0\", id, method, params });\n });\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n for (const p of this.pending.values()) p.reject(new Error(\"server closed\"));\n this.pending.clear();\n this.rl.close();\n }\n\n /** Wait for the input stream to end. */\n done(): Promise<void> {\n return new Promise((resolve) => this.rl.once(\"close\", () => resolve()));\n }\n\n private write(msg: JsonRpcRequest | JsonRpcNotification | JsonRpcResponse): void {\n this.output.write(`${JSON.stringify(msg)}\\n`);\n }\n\n private writeError(id: JsonRpcId | null, code: number, message: string): void {\n this.write({ jsonrpc: \"2.0\", id, error: { code, message } });\n }\n\n private async handleLine(raw: string): Promise<void> {\n const line = raw.trim();\n if (!line) return;\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n this.writeError(null, ERR_PARSE, \"parse error\");\n return;\n }\n if (!parsed || typeof parsed !== \"object\") {\n this.writeError(null, ERR_PARSE, \"expected JSON object\");\n return;\n }\n const msg = parsed as Partial<JsonRpcRequest>;\n if (typeof msg.method === \"string\" && msg.id !== undefined) {\n const id = msg.id as JsonRpcId;\n const handler = this.requestHandlers.get(msg.method);\n if (!handler) {\n this.writeError(id, ERR_METHOD_NOT_FOUND, `method not found: ${msg.method}`);\n return;\n }\n try {\n const result = await handler(msg.params);\n this.write({ jsonrpc: \"2.0\", id, result });\n } catch (err) {\n this.writeError(id, ERR_INTERNAL, (err as Error).message);\n }\n return;\n }\n if (typeof msg.method === \"string\" && msg.id === undefined) {\n const handler = this.notificationHandlers.get(msg.method);\n if (!handler) return;\n try {\n await handler(msg.params);\n } catch {\n // notifications can't be replied to — log channel would help, but stderr would pollute the wire\n }\n return;\n }\n if (msg.id !== undefined && msg.method === undefined) {\n const response = parsed as JsonRpcResponse;\n const pending = this.pending.get(response.id as JsonRpcId);\n if (!pending) return;\n this.pending.delete(response.id as JsonRpcId);\n if (response.error) {\n pending.reject(new Error(response.error.message));\n } else {\n pending.resolve(response.result);\n }\n }\n }\n}\n"],"mappings":"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","names":["resolve"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
|
|
3
|
+
import {
|
|
4
|
+
chatCommand
|
|
5
|
+
} from "./chunk-XMHP7BEE.js";
|
|
6
|
+
import "./chunk-TKVXTQ3T.js";
|
|
7
|
+
import "./chunk-JMBMLOBP.js";
|
|
8
|
+
import "./chunk-YFP3MYMY.js";
|
|
9
|
+
import "./chunk-ZXSCAODE.js";
|
|
10
|
+
import "./chunk-DQ6K5ZQ7.js";
|
|
11
|
+
import "./chunk-EQATK2L2.js";
|
|
12
|
+
import "./chunk-ZZM6QJ4W.js";
|
|
13
|
+
import "./chunk-JBH5RM7X.js";
|
|
14
|
+
import "./chunk-6QC5RQLE.js";
|
|
15
|
+
import "./chunk-HUILPCYX.js";
|
|
16
|
+
import "./chunk-HIYTRCSW.js";
|
|
17
|
+
import "./chunk-BQ6HC66J.js";
|
|
18
|
+
import "./chunk-FEZK652I.js";
|
|
19
|
+
import "./chunk-TRWHTFG7.js";
|
|
20
|
+
import "./chunk-CCJAP7G3.js";
|
|
21
|
+
import "./chunk-X53B3JIX.js";
|
|
22
|
+
import "./chunk-LGEKVMMV.js";
|
|
23
|
+
import "./chunk-2XY77LW7.js";
|
|
24
|
+
import "./chunk-5QCB62C4.js";
|
|
25
|
+
import "./chunk-6OWJV3YW.js";
|
|
26
|
+
import "./chunk-DWPAKZTY.js";
|
|
27
|
+
import "./chunk-25T6CVUP.js";
|
|
28
|
+
import "./chunk-2UQP6H6T.js";
|
|
29
|
+
import "./chunk-4MFCAZ2W.js";
|
|
30
|
+
import "./chunk-SZ5XES2N.js";
|
|
31
|
+
import "./chunk-KYQVQ5X4.js";
|
|
32
|
+
import "./chunk-E5WCLUIU.js";
|
|
33
|
+
import "./chunk-XJXDHAES.js";
|
|
34
|
+
import "./chunk-TRSAHHCL.js";
|
|
35
|
+
import "./chunk-FY4S7TJZ.js";
|
|
36
|
+
import "./chunk-PLHAZOLZ.js";
|
|
37
|
+
import "./chunk-TDHXB2ER.js";
|
|
38
|
+
import "./chunk-T5A7EY6B.js";
|
|
39
|
+
import "./chunk-GH7DC2Y5.js";
|
|
40
|
+
import "./chunk-S4XVGLRW.js";
|
|
41
|
+
import "./chunk-RRXUIPWG.js";
|
|
42
|
+
import "./chunk-DN4B5S6Y.js";
|
|
43
|
+
import "./chunk-QCFLPSPH.js";
|
|
44
|
+
import "./chunk-NRQ5UP5T.js";
|
|
45
|
+
import "./chunk-6CRPCJAU.js";
|
|
46
|
+
import "./chunk-XXC2BYTV.js";
|
|
47
|
+
import "./chunk-TUK7OWJA.js";
|
|
48
|
+
export {
|
|
49
|
+
chatCommand
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=chat-YTPATMMG.js.map
|
|
@@ -9,31 +9,31 @@ import {
|
|
|
9
9
|
import {
|
|
10
10
|
DeepSeekClient,
|
|
11
11
|
pickPrimaryBalance
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-DWPAKZTY.js";
|
|
13
13
|
import {
|
|
14
14
|
loadDotenv
|
|
15
15
|
} from "./chunk-2UQP6H6T.js";
|
|
16
16
|
import {
|
|
17
17
|
checkOllamaStatus
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-TDHXB2ER.js";
|
|
19
19
|
import {
|
|
20
20
|
indexExists
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-T5A7EY6B.js";
|
|
22
22
|
import {
|
|
23
23
|
loadHooks
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-GH7DC2Y5.js";
|
|
25
25
|
import {
|
|
26
26
|
listSessions
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-RRXUIPWG.js";
|
|
28
28
|
import {
|
|
29
29
|
t
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-NRQ5UP5T.js";
|
|
31
31
|
import {
|
|
32
32
|
defaultConfigPath,
|
|
33
33
|
loadBaseUrl,
|
|
34
34
|
readConfig,
|
|
35
35
|
resolveSemanticEmbeddingConfig
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-6CRPCJAU.js";
|
|
37
37
|
import {
|
|
38
38
|
VERSION
|
|
39
39
|
} from "./chunk-XXC2BYTV.js";
|
|
@@ -449,4 +449,4 @@ export {
|
|
|
449
449
|
formatDoctorJson,
|
|
450
450
|
doctorCommand
|
|
451
451
|
};
|
|
452
|
-
//# sourceMappingURL=chunk-
|
|
452
|
+
//# sourceMappingURL=chunk-2XY77LW7.js.map
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
defaultUsageLogPath,
|
|
8
8
|
formatLogSize,
|
|
9
9
|
readUsageLog
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-DN4B5S6Y.js";
|
|
11
11
|
import {
|
|
12
12
|
t
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-NRQ5UP5T.js";
|
|
14
14
|
|
|
15
15
|
// src/cli/commands/stats.ts
|
|
16
16
|
import { existsSync, readFileSync } from "fs";
|
|
@@ -150,4 +150,4 @@ export {
|
|
|
150
150
|
statsCommand,
|
|
151
151
|
renderDashboard
|
|
152
152
|
};
|
|
153
|
-
//# sourceMappingURL=chunk-
|
|
153
|
+
//# sourceMappingURL=chunk-4MFCAZ2W.js.map
|
|
@@ -2397,9 +2397,16 @@ function loadMetasoApiKey(path = defaultConfigPath()) {
|
|
|
2397
2397
|
if (cfg && typeof cfg === "string" && cfg.trim()) return cfg.trim();
|
|
2398
2398
|
return DEFAULT_METASO_API_KEY;
|
|
2399
2399
|
}
|
|
2400
|
+
function loadTavilyApiKey(path = defaultConfigPath()) {
|
|
2401
|
+
if (process.env.TAVILY_API_KEY) return process.env.TAVILY_API_KEY.trim();
|
|
2402
|
+
const cfg = readConfig(path).tavilyApiKey;
|
|
2403
|
+
if (cfg && typeof cfg === "string" && cfg.trim()) return cfg.trim();
|
|
2404
|
+
return void 0;
|
|
2405
|
+
}
|
|
2400
2406
|
var DEFAULT_OLLAMA_URL = "http://localhost:11434";
|
|
2401
2407
|
var DEFAULT_EMBED_MODEL = "nomic-embed-text";
|
|
2402
2408
|
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
2409
|
+
var DEFAULT_BATCH_SIZE = 10;
|
|
2403
2410
|
function defaultConfigPath() {
|
|
2404
2411
|
return join(homedir(), ".reasonix", "config.json");
|
|
2405
2412
|
}
|
|
@@ -2424,7 +2431,9 @@ function loadLanguage(path = defaultConfigPath()) {
|
|
|
2424
2431
|
return readConfig(path).lang;
|
|
2425
2432
|
}
|
|
2426
2433
|
function inferMcpTransport(cfg) {
|
|
2427
|
-
|
|
2434
|
+
const declared = cfg.transport ?? cfg.type;
|
|
2435
|
+
if (declared === "http") return "streamable-http";
|
|
2436
|
+
if (declared) return declared;
|
|
2428
2437
|
const url = cfg.url?.trim() ?? "";
|
|
2429
2438
|
if (/^streamable\+https?:\/\//i.test(url)) return "streamable-http";
|
|
2430
2439
|
if (/^https?:\/\//i.test(url)) return "sse";
|
|
@@ -2664,6 +2673,7 @@ function webSearchEngine(path = defaultConfigPath()) {
|
|
|
2664
2673
|
const cfg = readConfig(path).webSearchEngine;
|
|
2665
2674
|
if (cfg === "searxng") return "searxng";
|
|
2666
2675
|
if (cfg === "metaso") return "metaso";
|
|
2676
|
+
if (cfg === "tavily") return "tavily";
|
|
2667
2677
|
return "mojeek";
|
|
2668
2678
|
}
|
|
2669
2679
|
function webSearchEndpoint(path = defaultConfigPath()) {
|
|
@@ -2760,6 +2770,16 @@ function saveEditMode(mode, path = defaultConfigPath()) {
|
|
|
2760
2770
|
cfg.editMode = mode;
|
|
2761
2771
|
writeConfig(cfg, path);
|
|
2762
2772
|
}
|
|
2773
|
+
function loadEngineeringLifecycleMode(path = defaultConfigPath()) {
|
|
2774
|
+
const v = readConfig(path).engineeringLifecycle?.mode;
|
|
2775
|
+
if (v === "off" || v === "strict") return v;
|
|
2776
|
+
return "off";
|
|
2777
|
+
}
|
|
2778
|
+
function loadFilesystemOutlineThresholdBytes(path = defaultConfigPath()) {
|
|
2779
|
+
const v = readConfig(path).filesystem?.outlineThresholdBytes;
|
|
2780
|
+
if (typeof v !== "number" || !Number.isFinite(v) || v <= 0) return void 0;
|
|
2781
|
+
return Math.floor(v);
|
|
2782
|
+
}
|
|
2763
2783
|
function editModeHintShown(path = defaultConfigPath()) {
|
|
2764
2784
|
return readConfig(path).editModeHintShown === true;
|
|
2765
2785
|
}
|
|
@@ -2828,16 +2848,27 @@ function pushRecentWorkspace(dir, path = defaultConfigPath()) {
|
|
|
2828
2848
|
}
|
|
2829
2849
|
function loadDesktopOpenTabs(path = defaultConfigPath()) {
|
|
2830
2850
|
const v = readConfig(path).desktopOpenTabs;
|
|
2831
|
-
|
|
2851
|
+
if (!Array.isArray(v)) return [];
|
|
2852
|
+
const out = [];
|
|
2853
|
+
for (const entry of v) {
|
|
2854
|
+
if (typeof entry === "string") {
|
|
2855
|
+
if (entry) out.push({ dir: entry });
|
|
2856
|
+
} else if (entry && typeof entry === "object" && typeof entry.dir === "string" && entry.dir.length > 0) {
|
|
2857
|
+
const e = entry;
|
|
2858
|
+
out.push({ dir: e.dir, session: e.session, active: e.active });
|
|
2859
|
+
}
|
|
2860
|
+
}
|
|
2861
|
+
return out;
|
|
2832
2862
|
}
|
|
2833
|
-
function saveDesktopOpenTabs(
|
|
2863
|
+
function saveDesktopOpenTabs(tabs, path = defaultConfigPath()) {
|
|
2834
2864
|
const cfg = readConfig(path);
|
|
2835
|
-
const cleaned =
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
}
|
|
2865
|
+
const cleaned = tabs.filter((t) => t && typeof t.dir === "string" && t.dir.length > 0).map((t) => {
|
|
2866
|
+
const e = { dir: t.dir };
|
|
2867
|
+
if (t.session) e.session = t.session;
|
|
2868
|
+
if (t.active) e.active = true;
|
|
2869
|
+
return e;
|
|
2870
|
+
});
|
|
2871
|
+
cfg.desktopOpenTabs = cleaned.length === 0 ? void 0 : cleaned;
|
|
2841
2872
|
writeConfig(cfg, path);
|
|
2842
2873
|
}
|
|
2843
2874
|
function loadPreset(path = defaultConfigPath()) {
|
|
@@ -2879,7 +2910,8 @@ function resolveSemanticEmbeddingConfig(path = defaultConfigPath()) {
|
|
|
2879
2910
|
apiKey,
|
|
2880
2911
|
model,
|
|
2881
2912
|
extraBody: normalizeExtraBody(user.openaiCompat?.extraBody),
|
|
2882
|
-
timeoutMs: DEFAULT_TIMEOUT_MS
|
|
2913
|
+
timeoutMs: DEFAULT_TIMEOUT_MS,
|
|
2914
|
+
batchSize: user.openaiCompat?.batchSize ?? DEFAULT_BATCH_SIZE
|
|
2883
2915
|
};
|
|
2884
2916
|
}
|
|
2885
2917
|
return {
|
|
@@ -2902,7 +2934,8 @@ function redactSemanticEmbeddingConfig(user) {
|
|
|
2902
2934
|
apiKey: normalized.openaiCompat?.apiKey ? redactKey(normalized.openaiCompat.apiKey) : "",
|
|
2903
2935
|
apiKeySet: Boolean(normalized.openaiCompat?.apiKey?.trim()),
|
|
2904
2936
|
model: normalized.openaiCompat?.model?.trim() ?? "",
|
|
2905
|
-
extraBody: normalizeExtraBody(normalized.openaiCompat?.extraBody)
|
|
2937
|
+
extraBody: normalizeExtraBody(normalized.openaiCompat?.extraBody),
|
|
2938
|
+
batchSize: normalized.openaiCompat?.batchSize ?? DEFAULT_BATCH_SIZE
|
|
2906
2939
|
}
|
|
2907
2940
|
};
|
|
2908
2941
|
}
|
|
@@ -2939,7 +2972,8 @@ function normalizeSemanticEmbeddingUserConfig(cfg) {
|
|
|
2939
2972
|
baseUrl: normalizeOptionalString(cfg?.openaiCompat?.baseUrl),
|
|
2940
2973
|
apiKey: normalizeOptionalString(cfg?.openaiCompat?.apiKey),
|
|
2941
2974
|
model: normalizeOptionalString(cfg?.openaiCompat?.model),
|
|
2942
|
-
extraBody: normalizeExtraBody(cfg?.openaiCompat?.extraBody)
|
|
2975
|
+
extraBody: normalizeExtraBody(cfg?.openaiCompat?.extraBody),
|
|
2976
|
+
batchSize: normalizePositiveInt(cfg?.openaiCompat?.batchSize)
|
|
2943
2977
|
}
|
|
2944
2978
|
};
|
|
2945
2979
|
}
|
|
@@ -2947,6 +2981,9 @@ function normalizeOptionalString(value) {
|
|
|
2947
2981
|
const trimmed = value?.trim();
|
|
2948
2982
|
return trimmed ? trimmed : void 0;
|
|
2949
2983
|
}
|
|
2984
|
+
function normalizePositiveInt(value) {
|
|
2985
|
+
return value !== void 0 && Number.isInteger(value) && value > 0 ? value : void 0;
|
|
2986
|
+
}
|
|
2950
2987
|
function normalizeExtraBody(value) {
|
|
2951
2988
|
if (value === void 0) return {};
|
|
2952
2989
|
if (!isPlainObject(value)) {
|
|
@@ -3030,12 +3067,15 @@ export {
|
|
|
3030
3067
|
overlayMatchedSpec,
|
|
3031
3068
|
specToRaw,
|
|
3032
3069
|
parseMcpSpec,
|
|
3070
|
+
normalizeQQOpenId,
|
|
3071
|
+
normalizeQQAllowlist,
|
|
3033
3072
|
redactQQOpenId,
|
|
3034
3073
|
decideQQAccess,
|
|
3035
3074
|
describeQQAccess,
|
|
3036
3075
|
loadMemoryTypeRegistry,
|
|
3037
3076
|
memoryTypeDefaults,
|
|
3038
3077
|
loadMetasoApiKey,
|
|
3078
|
+
loadTavilyApiKey,
|
|
3039
3079
|
defaultConfigPath,
|
|
3040
3080
|
readConfig,
|
|
3041
3081
|
writeConfig,
|
|
@@ -3066,6 +3106,8 @@ export {
|
|
|
3066
3106
|
addProjectPathAllowed,
|
|
3067
3107
|
loadEditMode,
|
|
3068
3108
|
saveEditMode,
|
|
3109
|
+
loadEngineeringLifecycleMode,
|
|
3110
|
+
loadFilesystemOutlineThresholdBytes,
|
|
3069
3111
|
editModeHintShown,
|
|
3070
3112
|
mouseClipboardHintShown,
|
|
3071
3113
|
loadReasoningEffort,
|
|
@@ -3096,4 +3138,4 @@ export {
|
|
|
3096
3138
|
loadQQConfig,
|
|
3097
3139
|
saveQQConfig
|
|
3098
3140
|
};
|
|
3099
|
-
//# sourceMappingURL=chunk-
|
|
3141
|
+
//# sourceMappingURL=chunk-6CRPCJAU.js.map
|