@carboncode/cli 0.1.0 → 0.1.2
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 +15 -24
- package/README.zh-CN.md +13 -11
- package/dist/cli/{acp-35C4ME6Y.js → acp-6J54TVVC.js} +17 -16
- package/dist/cli/acp-6J54TVVC.js.map +1 -0
- package/dist/cli/{chat-A6UJDPGV.js → chat-636MFZ7W.js} +21 -21
- package/dist/cli/{chunk-JKGYMRX5.js → chunk-3N7FTZVE.js} +2 -2
- package/dist/cli/{chunk-4TVNJWMA.js → chunk-ACHQFKW2.js} +178 -18
- package/dist/cli/chunk-ACHQFKW2.js.map +1 -0
- package/dist/cli/{chunk-7L2WTRNU.js → chunk-ANVEA3RU.js} +2 -2
- package/dist/cli/{chunk-QVC75MR3.js → chunk-BXMMGFAL.js} +2 -2
- package/dist/cli/{chunk-UI66BH6D.js → chunk-COTWTQQZ.js} +2 -2
- package/dist/cli/{chunk-J5BYPUB5.js → chunk-CZCPIK5K.js} +1508 -1176
- package/dist/cli/chunk-CZCPIK5K.js.map +1 -0
- package/dist/cli/{chunk-XJ5SRLKK.js → chunk-D3ACJ6D5.js} +2 -2
- package/dist/cli/{chunk-WRN65TRD.js → chunk-DSQNSP7F.js} +2 -2
- package/dist/cli/{chunk-QJG7OF27.js → chunk-FKSYTVWZ.js} +27 -10
- package/dist/cli/chunk-FKSYTVWZ.js.map +1 -0
- package/dist/cli/{chunk-BSINVTTL.js → chunk-FXG7CSGY.js} +7 -7
- package/dist/cli/{chunk-4MQ3VURH.js → chunk-K43DXH3G.js} +52 -83
- package/dist/cli/chunk-K43DXH3G.js.map +1 -0
- package/dist/cli/{chunk-BSGCXZQN.js → chunk-LNU3CR7X.js} +2 -2
- package/dist/cli/{chunk-TH756VLN.js → chunk-MXUSER5C.js} +240 -191
- package/dist/cli/chunk-MXUSER5C.js.map +1 -0
- package/dist/cli/{chunk-3T6VBZCL.js → chunk-NQJYZKEU.js} +2 -2
- package/dist/cli/{chunk-IX6XI2RG.js → chunk-OB5XR5HG.js} +2 -2
- package/dist/cli/{chunk-ILJOIQ5W.js → chunk-OY5GGU6D.js} +2 -2
- package/dist/cli/{chunk-IAUOP25G.js → chunk-R677DIFU.js} +38 -22
- package/dist/cli/chunk-R677DIFU.js.map +1 -0
- package/dist/cli/{chunk-CPKCNHRR.js → chunk-RSQMO6CF.js} +5 -5
- package/dist/cli/{chunk-3OAR6NVL.js → chunk-RUPXIRNL.js} +2 -2
- package/dist/cli/{chunk-S2KIUQKQ.js → chunk-S4YD3N3X.js} +7 -6
- package/dist/cli/{chunk-S2KIUQKQ.js.map → chunk-S4YD3N3X.js.map} +1 -1
- package/dist/cli/{chunk-4IBIPQVB.js → chunk-T6SBUSG2.js} +3 -3
- package/dist/cli/{chunk-D5NFKRGO.js → chunk-UGPC4LPM.js} +2 -2
- package/dist/cli/{chunk-T5TQ4NDT.js → chunk-X4UJ6Q6M.js} +3 -3
- package/dist/cli/{code-4TUTAGO5.js → code-TBC3K5AZ.js} +24 -33
- package/dist/cli/code-TBC3K5AZ.js.map +1 -0
- package/dist/cli/{commands-KMOZEYCF.js → commands-HMQPRVNT.js} +4 -4
- package/dist/cli/{commit-DTFA56VQ.js → commit-WIY4B3X4.js} +3 -3
- package/dist/cli/{desktop-7N3MHNBD.js → desktop-MGOG3AWV.js} +17 -17
- package/dist/cli/{diff-E5OWTF4C.js → diff-57LRKCB7.js} +8 -8
- package/dist/cli/{doctor-IEJQRJMN.js → doctor-5FDRBIXE.js} +8 -8
- package/dist/cli/index.js +32 -32
- package/dist/cli/{mcp-PDI2PDLG.js → mcp-HJHTNRZF.js} +2 -2
- package/dist/cli/{mcp-browse-OSPXOFPZ.js → mcp-browse-C2PJRQBO.js} +2 -2
- package/dist/cli/{mcp-inspect-QRFVTHMF.js → mcp-inspect-JBFXV2II.js} +2 -2
- package/dist/cli/{prompt-3CDII3UO.js → prompt-U62OVZNY.js} +3 -3
- package/dist/cli/{replay-HYOSRQIV.js → replay-M3YKBVAM.js} +8 -8
- package/dist/cli/{run-2ZHADOUP.js → run-V6X5GXCR.js} +13 -13
- package/dist/cli/{server-X75PAZG5.js → server-5WVJQUOR.js} +10 -10
- package/dist/cli/{sessions-POOZA5CQ.js → sessions-B266WVM3.js} +12 -12
- package/dist/cli/{setup-YLPFI3OH.js → setup-SWX5E3W2.js} +5 -5
- package/dist/cli/{stats-NXJ3TO2D.js → stats-VPPKS6UF.js} +6 -6
- package/dist/cli/{version-NXXWE3WN.js → version-TVHAEHWY.js} +12 -12
- package/dist/index.d.ts +17 -2
- package/dist/index.js +360 -150
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/cli/acp-35C4ME6Y.js.map +0 -1
- package/dist/cli/chunk-4MQ3VURH.js.map +0 -1
- package/dist/cli/chunk-4TVNJWMA.js.map +0 -1
- package/dist/cli/chunk-IAUOP25G.js.map +0 -1
- package/dist/cli/chunk-J5BYPUB5.js.map +0 -1
- package/dist/cli/chunk-QJG7OF27.js.map +0 -1
- package/dist/cli/chunk-TH756VLN.js.map +0 -1
- package/dist/cli/code-4TUTAGO5.js.map +0 -1
- /package/dist/cli/{chat-A6UJDPGV.js.map → chat-636MFZ7W.js.map} +0 -0
- /package/dist/cli/{chunk-JKGYMRX5.js.map → chunk-3N7FTZVE.js.map} +0 -0
- /package/dist/cli/{chunk-7L2WTRNU.js.map → chunk-ANVEA3RU.js.map} +0 -0
- /package/dist/cli/{chunk-QVC75MR3.js.map → chunk-BXMMGFAL.js.map} +0 -0
- /package/dist/cli/{chunk-UI66BH6D.js.map → chunk-COTWTQQZ.js.map} +0 -0
- /package/dist/cli/{chunk-XJ5SRLKK.js.map → chunk-D3ACJ6D5.js.map} +0 -0
- /package/dist/cli/{chunk-WRN65TRD.js.map → chunk-DSQNSP7F.js.map} +0 -0
- /package/dist/cli/{chunk-BSINVTTL.js.map → chunk-FXG7CSGY.js.map} +0 -0
- /package/dist/cli/{chunk-BSGCXZQN.js.map → chunk-LNU3CR7X.js.map} +0 -0
- /package/dist/cli/{chunk-3T6VBZCL.js.map → chunk-NQJYZKEU.js.map} +0 -0
- /package/dist/cli/{chunk-IX6XI2RG.js.map → chunk-OB5XR5HG.js.map} +0 -0
- /package/dist/cli/{chunk-ILJOIQ5W.js.map → chunk-OY5GGU6D.js.map} +0 -0
- /package/dist/cli/{chunk-CPKCNHRR.js.map → chunk-RSQMO6CF.js.map} +0 -0
- /package/dist/cli/{chunk-3OAR6NVL.js.map → chunk-RUPXIRNL.js.map} +0 -0
- /package/dist/cli/{chunk-4IBIPQVB.js.map → chunk-T6SBUSG2.js.map} +0 -0
- /package/dist/cli/{chunk-D5NFKRGO.js.map → chunk-UGPC4LPM.js.map} +0 -0
- /package/dist/cli/{chunk-T5TQ4NDT.js.map → chunk-X4UJ6Q6M.js.map} +0 -0
- /package/dist/cli/{commands-KMOZEYCF.js.map → commands-HMQPRVNT.js.map} +0 -0
- /package/dist/cli/{commit-DTFA56VQ.js.map → commit-WIY4B3X4.js.map} +0 -0
- /package/dist/cli/{desktop-7N3MHNBD.js.map → desktop-MGOG3AWV.js.map} +0 -0
- /package/dist/cli/{diff-E5OWTF4C.js.map → diff-57LRKCB7.js.map} +0 -0
- /package/dist/cli/{doctor-IEJQRJMN.js.map → doctor-5FDRBIXE.js.map} +0 -0
- /package/dist/cli/{mcp-PDI2PDLG.js.map → mcp-HJHTNRZF.js.map} +0 -0
- /package/dist/cli/{mcp-browse-OSPXOFPZ.js.map → mcp-browse-C2PJRQBO.js.map} +0 -0
- /package/dist/cli/{mcp-inspect-QRFVTHMF.js.map → mcp-inspect-JBFXV2II.js.map} +0 -0
- /package/dist/cli/{prompt-3CDII3UO.js.map → prompt-U62OVZNY.js.map} +0 -0
- /package/dist/cli/{replay-HYOSRQIV.js.map → replay-M3YKBVAM.js.map} +0 -0
- /package/dist/cli/{run-2ZHADOUP.js.map → run-V6X5GXCR.js.map} +0 -0
- /package/dist/cli/{server-X75PAZG5.js.map → server-5WVJQUOR.js.map} +0 -0
- /package/dist/cli/{sessions-POOZA5CQ.js.map → sessions-B266WVM3.js.map} +0 -0
- /package/dist/cli/{setup-YLPFI3OH.js.map → setup-SWX5E3W2.js.map} +0 -0
- /package/dist/cli/{stats-NXJ3TO2D.js.map → stats-VPPKS6UF.js.map} +0 -0
- /package/dist/cli/{version-NXXWE3WN.js.map → version-TVHAEHWY.js.map} +0 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Carbon Code
|
|
2
2
|
|
|
3
|
-
Chinese-first, DeepSeek-powered terminal coding agent
|
|
4
|
-
|
|
3
|
+
Chinese-first, DeepSeek-powered terminal coding agent for personal developer
|
|
4
|
+
workflows.
|
|
5
5
|
|
|
6
6
|
Carbon Code is aimed at personal developer workflows: open a repository, let the
|
|
7
7
|
agent read and search the codebase, review planned edits, approve shell commands,
|
|
@@ -64,20 +64,13 @@ with one-turn Pro escalation for harder turns.
|
|
|
64
64
|
|
|
65
65
|
## Release
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
npm publishing is tag-driven through GitHub Actions after the package is
|
|
68
|
+
configured for Trusted Publishing on npmjs.com. In the npm package settings, add
|
|
69
|
+
a GitHub Actions trusted publisher with repository `Yapie0/carboncode`, workflow
|
|
70
|
+
file `publish.yml`, and environment `npm`.
|
|
69
71
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
npm publish --dry-run --access public
|
|
73
|
-
npm publish --access public
|
|
74
|
-
npm install -g npm@^11.10.0
|
|
75
|
-
npm trust github @carboncode/cli --repo Yapie0/carboncode --file publish.yml --env npm
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
After trusted publishing is configured, releases are tag-driven through GitHub
|
|
79
|
-
Actions. Update `package.json`, commit the release, then push a matching semver
|
|
80
|
-
tag:
|
|
72
|
+
To release, update `package.json`, commit the release, then push a matching
|
|
73
|
+
semver tag:
|
|
81
74
|
|
|
82
75
|
```bash
|
|
83
76
|
git tag v0.1.0
|
|
@@ -91,19 +84,17 @@ tag as an idempotent release marker and skips the publish step.
|
|
|
91
84
|
|
|
92
85
|
## Current Scope
|
|
93
86
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
publishing, and license attribution.
|
|
87
|
+
Carbon Code is currently early-stage and focused on the personal CLI workflow:
|
|
88
|
+
package identity, command names, Carbon config paths, update/install commands,
|
|
89
|
+
Chinese-first CLI copy, npm publishing, and license compliance.
|
|
98
90
|
|
|
99
91
|
## License And Attribution
|
|
100
92
|
|
|
101
|
-
Carbon Code is MIT licensed.
|
|
102
|
-
MIT licensed.
|
|
93
|
+
Carbon Code is MIT licensed.
|
|
103
94
|
|
|
104
|
-
|
|
95
|
+
Third-party MIT notices are preserved in:
|
|
105
96
|
|
|
106
97
|
- `THIRD_PARTY_NOTICES.md`
|
|
107
|
-
- `LICENSES
|
|
98
|
+
- `LICENSES/`
|
|
108
99
|
|
|
109
|
-
Do not remove
|
|
100
|
+
Do not remove copyright or MIT notices from derived files.
|
package/README.zh-CN.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# Carbon Code
|
|
2
2
|
|
|
3
|
-
中文优先、DeepSeek
|
|
4
|
-
Carbon Code 产品化。
|
|
3
|
+
中文优先、DeepSeek 驱动的个人开发者终端代码智能体。
|
|
5
4
|
|
|
6
5
|
Carbon Code 面向个人开发者工作流:进入一个仓库,让智能体读取和搜索代码、规划
|
|
7
6
|
修改、展示 diff、在执行 shell 命令前请求确认、按需运行验证,并输出简洁结果。
|
|
@@ -62,8 +61,11 @@ export DEEPSEEK_API_KEY=sk-...
|
|
|
62
61
|
|
|
63
62
|
## 发布
|
|
64
63
|
|
|
65
|
-
npm 发布由 GitHub Actions 的 tag
|
|
66
|
-
|
|
64
|
+
npm 发布由 GitHub Actions 的 tag 流程触发。需要先在 npmjs.com 的 package
|
|
65
|
+
settings 里配置 Trusted Publishing:选择 GitHub Actions,仓库填
|
|
66
|
+
`Yapie0/carboncode`,workflow 文件填 `publish.yml`,environment 填 `npm`。
|
|
67
|
+
|
|
68
|
+
发布时先更新 `package.json`,提交发布版本,再推送匹配的 semver tag:
|
|
67
69
|
|
|
68
70
|
```bash
|
|
69
71
|
git tag v0.1.0
|
|
@@ -75,17 +77,17 @@ git push origin main --tags
|
|
|
75
77
|
|
|
76
78
|
## 当前范围
|
|
77
79
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
Carbon Code 目前处于早期阶段,重点是个人开发者 CLI 工作流。当前产品化覆盖包名、
|
|
81
|
+
命令名、Carbon 配置目录、更新/安装命令、中文优先 CLI 文案、npm 发布流程和开源
|
|
82
|
+
许可合规。
|
|
81
83
|
|
|
82
84
|
## 许可与归因
|
|
83
85
|
|
|
84
|
-
Carbon Code 使用 MIT
|
|
86
|
+
Carbon Code 使用 MIT 许可证。
|
|
85
87
|
|
|
86
|
-
|
|
88
|
+
第三方 MIT 声明保留在:
|
|
87
89
|
|
|
88
90
|
- `THIRD_PARTY_NOTICES.md`
|
|
89
|
-
- `LICENSES
|
|
91
|
+
- `LICENSES/`
|
|
90
92
|
|
|
91
|
-
|
|
93
|
+
不要移除派生源码中的 copyright 或 MIT notice。
|
|
@@ -2,7 +2,7 @@
|
|
|
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-S4YD3N3X.js";
|
|
6
6
|
import {
|
|
7
7
|
Eventizer,
|
|
8
8
|
autoResolveVerdict
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
formatMcpLifecycleEvent,
|
|
12
12
|
formatMcpSlowToast
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-D3ACJ6D5.js";
|
|
14
14
|
import {
|
|
15
15
|
buildTransportFromSpec,
|
|
16
16
|
preflightStdioSpec
|
|
@@ -19,19 +19,19 @@ import {
|
|
|
19
19
|
CacheFirstLoop,
|
|
20
20
|
ImmutablePrefix,
|
|
21
21
|
bridgeMcpTools
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import "./chunk-
|
|
22
|
+
} from "./chunk-ACHQFKW2.js";
|
|
23
|
+
import "./chunk-ANVEA3RU.js";
|
|
24
24
|
import {
|
|
25
25
|
openTranscriptFile,
|
|
26
26
|
recordFromLoopEvent,
|
|
27
27
|
writeRecord
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-X4UJ6Q6M.js";
|
|
29
29
|
import {
|
|
30
30
|
McpClient
|
|
31
31
|
} from "./chunk-GALC45Q2.js";
|
|
32
32
|
import {
|
|
33
33
|
codeSystemPrompt
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-FKSYTVWZ.js";
|
|
35
35
|
import {
|
|
36
36
|
canonicalPresetName,
|
|
37
37
|
resolvePreset
|
|
@@ -39,28 +39,28 @@ import {
|
|
|
39
39
|
import "./chunk-6OWJV3YW.js";
|
|
40
40
|
import {
|
|
41
41
|
DeepSeekClient
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-LNU3CR7X.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-RUPXIRNL.js";
|
|
48
48
|
import {
|
|
49
49
|
pauseGate
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-MXUSER5C.js";
|
|
51
51
|
import "./chunk-M2UFZUX3.js";
|
|
52
52
|
import "./chunk-BHTZFEYE.js";
|
|
53
|
-
import "./chunk-
|
|
54
|
-
import "./chunk-
|
|
53
|
+
import "./chunk-DSQNSP7F.js";
|
|
54
|
+
import "./chunk-OB5XR5HG.js";
|
|
55
55
|
import "./chunk-S4XVGLRW.js";
|
|
56
56
|
import {
|
|
57
57
|
timestampSuffix
|
|
58
58
|
} from "./chunk-U4IJVG32.js";
|
|
59
|
-
import "./chunk-
|
|
60
|
-
import "./chunk-
|
|
59
|
+
import "./chunk-BXMMGFAL.js";
|
|
60
|
+
import "./chunk-OY5GGU6D.js";
|
|
61
61
|
import {
|
|
62
62
|
t
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-R677DIFU.js";
|
|
64
64
|
import {
|
|
65
65
|
loadApiKey,
|
|
66
66
|
loadBaseUrl,
|
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
loadReasoningEffort,
|
|
70
70
|
normalizeMcpConfig,
|
|
71
71
|
readConfig
|
|
72
|
-
} from "./chunk-
|
|
72
|
+
} from "./chunk-K43DXH3G.js";
|
|
73
73
|
import {
|
|
74
74
|
VERSION
|
|
75
75
|
} from "./chunk-LN3B5PMX.js";
|
|
@@ -92,6 +92,7 @@ var EDIT_TOOLS = /* @__PURE__ */ new Set([
|
|
|
92
92
|
"write_file",
|
|
93
93
|
"edit_file",
|
|
94
94
|
"multi_edit",
|
|
95
|
+
"apply_patch",
|
|
95
96
|
"create_directory",
|
|
96
97
|
"delete_file",
|
|
97
98
|
"delete_directory",
|
|
@@ -708,4 +709,4 @@ export {
|
|
|
708
709
|
acpCommand,
|
|
709
710
|
loadMcpServers
|
|
710
711
|
};
|
|
711
|
-
//# sourceMappingURL=acp-
|
|
712
|
+
//# sourceMappingURL=acp-6J54TVVC.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: \"carboncode 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: \"carboncode\", title: \"Carbon Code\", 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 type { Event as KernelEvent } from \"../core/events.js\";\nimport type { SessionUpdateParams } from \"./protocol.js\";\nimport type { AcpServer } from \"./server.js\";\n\nconst READ_TOOLS = new Set([\n \"read_file\",\n \"list_directory\",\n \"directory_tree\",\n \"get_file_info\",\n \"glob\",\n]);\nconst EDIT_TOOLS = new Set([\n \"write_file\",\n \"edit_file\",\n \"multi_edit\",\n \"apply_patch\",\n \"create_directory\",\n \"delete_file\",\n \"delete_directory\",\n \"move_file\",\n \"copy_file\",\n]);\nconst SEARCH_TOOLS = new Set([\"search_content\", \"search_files\"]);\nconst EXECUTE_TOOLS = new Set([\"run_command\", \"run_background\"]);\n\nexport type AcpToolKind = \"read\" | \"edit\" | \"search\" | \"execute\" | \"other\";\n\nexport function toolKindFor(name: string): AcpToolKind {\n if (READ_TOOLS.has(name)) return \"read\";\n if (EDIT_TOOLS.has(name)) return \"edit\";\n if (SEARCH_TOOLS.has(name)) return \"search\";\n if (EXECUTE_TOOLS.has(name)) return \"execute\";\n return \"other\";\n}\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 PauseRequest,\n PlanVerdict,\n RevisionVerdict,\n} 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 commandPrefix(command: string): string {\n const first = command.trim().split(/\\s+/)[0] ?? command.trim();\n return `${first} *`;\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: commandPrefix(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"]}
|
|
@@ -2,50 +2,50 @@
|
|
|
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
|
chatCommand
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-CZCPIK5K.js";
|
|
6
6
|
import "./chunk-CXVWUPA3.js";
|
|
7
7
|
import "./chunk-JMBMLOBP.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-RSQMO6CF.js";
|
|
9
9
|
import "./chunk-WLHH3OSR.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-D3ACJ6D5.js";
|
|
11
11
|
import "./chunk-VPMBGAND.js";
|
|
12
12
|
import "./chunk-ECHSFYOY.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-ACHQFKW2.js";
|
|
14
|
+
import "./chunk-ANVEA3RU.js";
|
|
15
|
+
import "./chunk-X4UJ6Q6M.js";
|
|
16
16
|
import "./chunk-GALC45Q2.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-FKSYTVWZ.js";
|
|
18
18
|
import "./chunk-FEZK652I.js";
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-COTWTQQZ.js";
|
|
20
|
+
import "./chunk-UGPC4LPM.js";
|
|
21
21
|
import "./chunk-X53B3JIX.js";
|
|
22
22
|
import "./chunk-2425HK6U.js";
|
|
23
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-FXG7CSGY.js";
|
|
24
24
|
import "./chunk-5QCB62C4.js";
|
|
25
25
|
import "./chunk-6OWJV3YW.js";
|
|
26
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-LNU3CR7X.js";
|
|
27
27
|
import "./chunk-25T6CVUP.js";
|
|
28
28
|
import "./chunk-2UQP6H6T.js";
|
|
29
|
-
import "./chunk-
|
|
29
|
+
import "./chunk-T6SBUSG2.js";
|
|
30
30
|
import "./chunk-7EO27TB3.js";
|
|
31
31
|
import "./chunk-PJS34556.js";
|
|
32
32
|
import "./chunk-YZSXRGFH.js";
|
|
33
33
|
import "./chunk-4VR6XF4P.js";
|
|
34
|
-
import "./chunk-
|
|
34
|
+
import "./chunk-MXUSER5C.js";
|
|
35
35
|
import "./chunk-M2UFZUX3.js";
|
|
36
36
|
import "./chunk-BHTZFEYE.js";
|
|
37
|
-
import "./chunk-
|
|
38
|
-
import "./chunk-
|
|
39
|
-
import "./chunk-
|
|
37
|
+
import "./chunk-3N7FTZVE.js";
|
|
38
|
+
import "./chunk-DSQNSP7F.js";
|
|
39
|
+
import "./chunk-OB5XR5HG.js";
|
|
40
40
|
import "./chunk-S4XVGLRW.js";
|
|
41
41
|
import "./chunk-U4IJVG32.js";
|
|
42
|
-
import "./chunk-
|
|
43
|
-
import "./chunk-
|
|
44
|
-
import "./chunk-
|
|
45
|
-
import "./chunk-
|
|
42
|
+
import "./chunk-BXMMGFAL.js";
|
|
43
|
+
import "./chunk-OY5GGU6D.js";
|
|
44
|
+
import "./chunk-R677DIFU.js";
|
|
45
|
+
import "./chunk-K43DXH3G.js";
|
|
46
46
|
import "./chunk-LN3B5PMX.js";
|
|
47
47
|
import "./chunk-TUK7OWJA.js";
|
|
48
48
|
export {
|
|
49
49
|
chatCommand
|
|
50
50
|
};
|
|
51
|
-
//# sourceMappingURL=chat-
|
|
51
|
+
//# sourceMappingURL=chat-636MFZ7W.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
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
|
probeOllama
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-DSQNSP7F.js";
|
|
6
6
|
|
|
7
7
|
// src/index/semantic/ollama-launcher.ts
|
|
8
8
|
import { spawn, spawnSync } from "child_process";
|
|
@@ -98,4 +98,4 @@ export {
|
|
|
98
98
|
startOllamaDaemon,
|
|
99
99
|
pullOllamaModel
|
|
100
100
|
};
|
|
101
|
-
//# sourceMappingURL=chunk-
|
|
101
|
+
//# sourceMappingURL=chunk-3N7FTZVE.js.map
|