@dsh-enhanced/acp 0.0.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 dsh-enhanced contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # @dsh-enhanced/acp
2
+
3
+ 把 DSH 作为 [ACP](https://agentclientprotocol.com) stdio agent 使用,并保留 DSH 原生会话语义。
4
+
5
+ ## 在 dsh 中使用
6
+
7
+ ```sh
8
+ pnpm build
9
+ dsh plugin --profile acp add ./plugins/acp
10
+ dsh --profile acp --dump-config
11
+ ```
12
+
13
+ 然后让 ACP 客户端启动:
14
+
15
+ ```sh
16
+ dsh --profile acp
17
+ ```
18
+
19
+ 发布后把 `./plugins/acp` 换成 `@dsh-enhanced/acp`。使用 DSH 源码 CLI 时,在 DSH 仓库执行 `pnpm --silent dsh --profile acp`;`--silent` 可避免 pnpm 的脚本提示污染 ACP stdout。
20
+
21
+ ## 能力
22
+
23
+ - ACP 模式直接映射 DSH Agent 预设:`standard`、`code`(PTC)、`minimal`、`cordis`(创造模式)。切换会真实重组该会话的工具、提示词与能力,并记录 `agent-preset/selected`。
24
+ - 遵循 DSH 原生约束:Agent 预设只可在首个 turn 开始前切换;会话开始后保持固定,避免历史工具调用与新预设不兼容。Plan 是预设内部的独立原生能力,不作为第五个 ACP Agent 模式伪装。
25
+ - 模型与推理等级来自 DSH 实时 provider 目录;目录变化会推送新选择器。
26
+ - 切换写入 DSH 原生会话选择引用,同一对话的下一个安全组装步骤立即生效;不会把一次步骤的 prompt 与 request 切到两个模型。
27
+ - 输出文本、推理、工具调用/结果、Todo 计划、标题和 token 用量;默认还在 `_meta.dsh.event` 携带未映射的完整 DSH 持久事件。
28
+ - 沿用 DSH 的权限请求、取消、工具、沙箱、模型配置与会话日志。
29
+
30
+ 可在 profile 的 `cordis.patch.yml` 覆盖初始值:
31
+
32
+ ```yaml
33
+ - id: dsh-enhanced-acp
34
+ config:
35
+ provider: deepseek-official
36
+ model: deepseek-v4-flash
37
+ reasoningEffort: high
38
+ includeRawEvents: true
39
+ ```
40
+
41
+ `config` 是整段替换;关闭原始事件时设置 `includeRawEvents: false`。
42
+
43
+ ## 边界
44
+
45
+ ACP 占用 stdout,诊断应走 stderr;同一 profile 不要再挂载其他 ACP stdio server。输入仅支持 text 与 resource link,后者作为文本引用进入模型;会话级 MCP server 请通过 DSH 配置,不从 ACP 请求动态注入。当前仅发布四个内置预设为 ACP 模式;自定义预设将在后续扩展。
46
+
47
+ 权限与数据:插件自身不额外访问网络或凭据,但 ACP 客户端获得该 DSH profile 已组合的 agent 能力;`cordis` 创造模式还可定义并运行进程内 Host 插件代码(裸 ACP 没有 DSH 浏览器页,Client half 不可用)。stdio 可包含提示词、推理、工具参数/结果、标题、用量、workspace 路径及原始会话事件;只连接可信客户端,敏感场景可关闭 `includeRawEvents`。
@@ -0,0 +1,11 @@
1
+ - insert:
2
+ - id: dsh-enhanced-acp
3
+ name: '@dsh-enhanced/acp'
4
+ config:
5
+ includeRawEvents: true
6
+ - id: cordis-host-runner
7
+ name: '@deepseek-ai/dsh-cordis-host-runner'
8
+ - id: agent-presets
9
+ name: '@deepseek-ai/dsh-agent-presets'
10
+ config:
11
+ default: standard
package/lib/codec.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import type { SessionUpdate } from '@agentclientprotocol/sdk';
2
+ import type { SessionEvent } from '@deepseek-ai/dsh-session';
3
+ export interface SessionEventMapper {
4
+ map(event: SessionEvent): SessionUpdate[];
5
+ }
6
+ export declare function createSessionEventMapper(config: {
7
+ includeRawEvents: boolean;
8
+ }): SessionEventMapper;
9
+ //# sourceMappingURL=codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EAGd,MAAM,0BAA0B,CAAA;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAI5D,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,EAAE,CAAA;CAC1C;AA6DD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE;IAAE,gBAAgB,EAAE,OAAO,CAAA;CAAE,GACpC,kBAAkB,CAkHpB"}
package/lib/codec.js ADDED
@@ -0,0 +1,172 @@
1
+ function rawMeta(event) {
2
+ return { dsh: { event } };
3
+ }
4
+ function textContent(text) {
5
+ return { type: 'text', text };
6
+ }
7
+ function imageFallback(block) {
8
+ return {
9
+ type: 'text',
10
+ text: `[DSH image attachment ${block.attachment.attachmentId}]`,
11
+ _meta: { dsh: { attachment: block.attachment } },
12
+ };
13
+ }
14
+ function toolContent(block) {
15
+ switch (block.type) {
16
+ case 'text':
17
+ case 'reasoning':
18
+ return { type: 'content', content: textContent(block.text) };
19
+ case 'image':
20
+ return { type: 'content', content: imageFallback(block) };
21
+ case 'tool-call':
22
+ case 'tool-result':
23
+ return undefined;
24
+ default:
25
+ return undefined;
26
+ }
27
+ }
28
+ function toolKind(name) {
29
+ const normalized = name.toLowerCase();
30
+ if (/(^|_)(read|view|get|open)(_|$)/.test(normalized))
31
+ return 'read';
32
+ if (/(^|_)(write|edit|patch|replace|create)(_|$)/.test(normalized))
33
+ return 'edit';
34
+ if (/(^|_)(delete|remove)(_|$)/.test(normalized))
35
+ return 'delete';
36
+ if (/(^|_)(move|rename)(_|$)/.test(normalized))
37
+ return 'move';
38
+ if (/(^|_)(search|find|grep|glob|list)(_|$)/.test(normalized))
39
+ return 'search';
40
+ if (/(^|_)(exec|execute|shell|bash|terminal|command|run)(_|$)/.test(normalized))
41
+ return 'execute';
42
+ if (/(^|_)(fetch|web|http|download)(_|$)/.test(normalized))
43
+ return 'fetch';
44
+ if (/(^|_)(think|todo|plan)(_|$)/.test(normalized))
45
+ return 'think';
46
+ if (/(^|_)(mode|switch)(_|$)/.test(normalized))
47
+ return 'switch_mode';
48
+ return 'other';
49
+ }
50
+ function rawInput(value) {
51
+ try {
52
+ return JSON.parse(value);
53
+ }
54
+ catch {
55
+ return value;
56
+ }
57
+ }
58
+ function traceOnly(event, includeRawEvents) {
59
+ return includeRawEvents
60
+ ? [{ sessionUpdate: 'session_info_update', _meta: rawMeta(event) }]
61
+ : [];
62
+ }
63
+ export function createSessionEventMapper(config) {
64
+ let contextWindow;
65
+ return {
66
+ map(event) {
67
+ switch (event.type) {
68
+ case 'request/context':
69
+ contextWindow = event.data.contextWindow;
70
+ return traceOnly(event, config.includeRawEvents);
71
+ case 'assistant/message': {
72
+ const updates = [];
73
+ for (const block of event.data.message.content) {
74
+ if (block.type === 'text' && block.text.length > 0) {
75
+ updates.push({
76
+ sessionUpdate: 'agent_message_chunk',
77
+ content: textContent(block.text),
78
+ messageId: event.data.message.id,
79
+ _meta: rawMeta(event),
80
+ });
81
+ }
82
+ else if (block.type === 'reasoning' && block.text.length > 0) {
83
+ updates.push({
84
+ sessionUpdate: 'agent_thought_chunk',
85
+ content: textContent(block.text),
86
+ messageId: event.data.message.id,
87
+ _meta: rawMeta(event),
88
+ });
89
+ }
90
+ else if (block.type === 'image') {
91
+ updates.push({
92
+ sessionUpdate: 'agent_message_chunk',
93
+ content: imageFallback(block),
94
+ messageId: event.data.message.id,
95
+ _meta: rawMeta(event),
96
+ });
97
+ }
98
+ }
99
+ const usage = event.data.usage;
100
+ if (usage !== undefined) {
101
+ const used = usage.inputTokens
102
+ + usage.outputTokens
103
+ + (usage.cacheReadTokens ?? 0)
104
+ + (usage.cacheWriteTokens ?? 0);
105
+ updates.push({
106
+ sessionUpdate: 'usage_update',
107
+ size: Math.max(contextWindow ?? used, used),
108
+ used,
109
+ _meta: { dsh: { event, usage } },
110
+ });
111
+ }
112
+ return updates.length > 0 ? updates : traceOnly(event, config.includeRawEvents);
113
+ }
114
+ case 'tool/call':
115
+ return [{
116
+ sessionUpdate: 'tool_call',
117
+ toolCallId: event.data.callId,
118
+ title: event.data.name,
119
+ kind: toolKind(event.data.name),
120
+ status: 'in_progress',
121
+ rawInput: rawInput(event.data.arguments),
122
+ _meta: rawMeta(event),
123
+ }];
124
+ case 'tool/result': {
125
+ const result = event.data.message.content[0];
126
+ const content = result.content.flatMap((block) => {
127
+ const mapped = toolContent(block);
128
+ return mapped === undefined ? [] : [mapped];
129
+ });
130
+ return [{
131
+ sessionUpdate: 'tool_call_update',
132
+ toolCallId: result.toolCallId,
133
+ status: result.isError === true || event.data.error !== undefined ? 'failed' : 'completed',
134
+ content,
135
+ rawOutput: {
136
+ message: event.data.message,
137
+ ...(event.data.error === undefined ? {} : { error: event.data.error }),
138
+ ...(event.data.meta === undefined ? {} : { meta: event.data.meta }),
139
+ },
140
+ _meta: rawMeta(event),
141
+ }];
142
+ }
143
+ case 'todo/write':
144
+ return [{
145
+ sessionUpdate: 'plan',
146
+ entries: event.data.todos.map(todo => ({
147
+ content: todo.content,
148
+ status: todo.status,
149
+ priority: 'medium',
150
+ })),
151
+ _meta: rawMeta(event),
152
+ }];
153
+ case 'agent-preset/selected':
154
+ return [{
155
+ sessionUpdate: 'current_mode_update',
156
+ currentModeId: event.data.agentPreset,
157
+ _meta: rawMeta(event),
158
+ }];
159
+ case 'session/title':
160
+ return [{
161
+ sessionUpdate: 'session_info_update',
162
+ title: event.data.title,
163
+ updatedAt: new Date(event.time).toISOString(),
164
+ _meta: rawMeta(event),
165
+ }];
166
+ default:
167
+ return traceOnly(event, config.includeRawEvents);
168
+ }
169
+ },
170
+ };
171
+ }
172
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { SessionConfigOption, SessionModeState } from '@agentclientprotocol/sdk';
2
+ import type { Agent, ModelSelectionRef } from '@deepseek-ai/dsh-agent';
3
+ import { type LlmRuntime } from '@deepseek-ai/dsh-llm';
4
+ export declare const MODEL_CONFIG_ID = "dsh.model";
5
+ export declare const REASONING_CONFIG_ID = "dsh.reasoning_effort";
6
+ export type NativeLlmControl = Pick<LlmRuntime, 'listProviders' | 'listModels' | 'resolveModelInfo' | 'resolveCallConfig'>;
7
+ export interface NativeAgentPresetControl {
8
+ composedPreset(agentCtx: Agent['ctx']): string | undefined;
9
+ list(): Promise<ReadonlyArray<{
10
+ id: string;
11
+ name?: string;
12
+ description?: string;
13
+ }>>;
14
+ mount(agentCtx: Agent['ctx'], id?: string): Promise<{
15
+ id: string;
16
+ }>;
17
+ recompose(agentCtx: Agent['ctx'], id: string): Promise<{
18
+ id: string;
19
+ }>;
20
+ resolve(id?: string): Promise<{
21
+ id: string;
22
+ }>;
23
+ }
24
+ export interface ModelCatalogFailure {
25
+ provider: string;
26
+ name: string;
27
+ message: string;
28
+ }
29
+ export declare function modelValue(provider: string, model: string): string;
30
+ export declare function reasoningValue(effort: string | undefined): string;
31
+ export declare function buildSessionConfigOptions(llm: NativeLlmControl, selection: ModelSelectionRef): Promise<SessionConfigOption[]>;
32
+ export declare function setSessionConfigOption(llm: NativeLlmControl, selection: ModelSelectionRef, configId: string, value: string | boolean): Promise<SessionConfigOption[]>;
33
+ export declare function modeState(presets: NativeAgentPresetControl, agent: Agent): Promise<SessionModeState>;
34
+ export declare function setNativeMode(presets: NativeAgentPresetControl, agent: Agent, modeId: string): Promise<{
35
+ agentPreset: string;
36
+ }>;
37
+ //# sourceMappingURL=control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../src/control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAGnB,gBAAgB,EACjB,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,KAAK,EAAkB,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACtF,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAA;AAE7B,eAAO,MAAM,eAAe,cAAc,CAAA;AAC1C,eAAO,MAAM,mBAAmB,yBAAyB,CAAA;AAEzD,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,UAAU,EACV,eAAe,GAAG,YAAY,GAAG,kBAAkB,GAAG,mBAAmB,CAC1E,CAAA;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,SAAS,CAAA;IAC1D,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;QAC5B,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAC,CAAC,CAAA;IACH,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACnE,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC9C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAoCD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAElE;AAoBD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEjE;AA4FD,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAkEhC;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GAAG,OAAO,GACtB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA+BhC;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,gBAAgB,CAAC,CAmB3B;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAQlC"}
package/lib/control.js ADDED
@@ -0,0 +1,277 @@
1
+ import { ReasoningEffortId, } from '@deepseek-ai/dsh-llm';
2
+ export const MODEL_CONFIG_ID = 'dsh.model';
3
+ export const REASONING_CONFIG_ID = 'dsh.reasoning_effort';
4
+ const MODES = [
5
+ {
6
+ id: 'standard',
7
+ name: 'Standard',
8
+ description: 'Full DSH coding agent with native tools, skills, plans, goals, subagents and workflows.',
9
+ },
10
+ {
11
+ id: 'code',
12
+ name: 'PTC',
13
+ description: 'Standard capabilities presented through the DSH Code Mode TypeScript SDK.',
14
+ },
15
+ {
16
+ id: 'minimal',
17
+ name: 'Minimal',
18
+ description: 'Persistent bash and str_replace_editor only.',
19
+ },
20
+ {
21
+ id: 'cordis',
22
+ name: 'Creator',
23
+ description: 'Standard capabilities plus runtime inspection, plugin experiments and preset authoring.',
24
+ },
25
+ ];
26
+ const MODE_IDS = new Set(MODES.map(mode => mode.id));
27
+ function message(error) {
28
+ return error instanceof Error ? error.message : String(error);
29
+ }
30
+ function selected(selection) {
31
+ if (selection.current === undefined)
32
+ throw new Error('the DSH session has no model selection');
33
+ return selection.current;
34
+ }
35
+ export function modelValue(provider, model) {
36
+ return JSON.stringify([provider, model]);
37
+ }
38
+ function decodeModelValue(value) {
39
+ if (typeof value !== 'string')
40
+ throw new Error('model selection must be a string value');
41
+ try {
42
+ const parsed = JSON.parse(value);
43
+ if (Array.isArray(parsed)
44
+ && parsed.length === 2
45
+ && typeof parsed[0] === 'string'
46
+ && parsed[0].length > 0
47
+ && typeof parsed[1] === 'string'
48
+ && parsed[1].length > 0)
49
+ return { provider: parsed[0], model: parsed[1] };
50
+ }
51
+ catch {
52
+ // The common error below is intentionally stable for every malformed value.
53
+ }
54
+ throw new Error(`invalid DSH model selection: ${value}`);
55
+ }
56
+ export function reasoningValue(effort) {
57
+ return effort === undefined ? JSON.stringify(['default']) : JSON.stringify(['effort', effort]);
58
+ }
59
+ function decodeReasoningValue(value) {
60
+ if (typeof value !== 'string')
61
+ throw new Error('reasoning selection must be a string value');
62
+ try {
63
+ const parsed = JSON.parse(value);
64
+ if (Array.isArray(parsed) && parsed.length === 1 && parsed[0] === 'default')
65
+ return undefined;
66
+ if (Array.isArray(parsed)
67
+ && parsed.length === 2
68
+ && parsed[0] === 'effort'
69
+ && typeof parsed[1] === 'string'
70
+ && parsed[1].length > 0)
71
+ return parsed[1];
72
+ }
73
+ catch {
74
+ // The common error below is intentionally stable for every malformed value.
75
+ }
76
+ throw new Error(`invalid DSH reasoning selection: ${value}`);
77
+ }
78
+ function modelMeta(info) {
79
+ return {
80
+ dsh: {
81
+ provider: info.provider,
82
+ model: info.id,
83
+ ...(info.inputModalities === undefined ? {} : { inputModalities: [...info.inputModalities] }),
84
+ ...(info.context === undefined ? {} : { contextWindow: info.context.contextWindow }),
85
+ ...(info.defaultMaxTokens === undefined ? {} : { defaultMaxTokens: info.defaultMaxTokens }),
86
+ ...(info.reasoning === undefined
87
+ ? {}
88
+ : {
89
+ reasoning: {
90
+ efforts: info.reasoning.efforts.map(effort => ({
91
+ id: String(effort.id),
92
+ name: effort.name,
93
+ ...(effort.description === undefined ? {} : { description: effort.description }),
94
+ })),
95
+ ...(info.reasoning.defaultEffort === undefined
96
+ ? {}
97
+ : { defaultEffort: String(info.reasoning.defaultEffort) }),
98
+ },
99
+ }),
100
+ },
101
+ };
102
+ }
103
+ async function catalog(llm, current) {
104
+ const rows = await Promise.all(llm.listProviders().map(async (provider) => {
105
+ try {
106
+ const models = await llm.listModels(provider.id);
107
+ const options = await Promise.all(models.map(async (model) => {
108
+ const info = await llm.resolveModelInfo(provider.id, model.id);
109
+ return {
110
+ value: modelValue(provider.id, model.id),
111
+ name: model.name,
112
+ ...(model.description === undefined ? {} : { description: model.description }),
113
+ _meta: modelMeta(info),
114
+ };
115
+ }));
116
+ return {
117
+ kind: 'group',
118
+ group: { group: provider.id, name: provider.name, options },
119
+ };
120
+ }
121
+ catch (error) {
122
+ return {
123
+ kind: 'failure',
124
+ failure: { provider: provider.id, name: provider.name, message: message(error) },
125
+ };
126
+ }
127
+ }));
128
+ const groups = rows.flatMap(row => row.kind === 'group' && row.group.options.length > 0 ? [row.group] : []);
129
+ const failures = rows.flatMap(row => row.kind === 'failure' ? [row.failure] : []);
130
+ const currentValue = modelValue(current.provider, current.model);
131
+ if (!groups.some(group => group.options.some(option => option.value === currentValue))) {
132
+ let meta;
133
+ try {
134
+ meta = modelMeta(await llm.resolveModelInfo(current.provider, current.model));
135
+ }
136
+ catch (error) {
137
+ meta = { dsh: { provider: current.provider, model: current.model, metadataFailure: message(error) } };
138
+ }
139
+ groups.unshift({
140
+ group: '_dsh_current',
141
+ name: 'Current route',
142
+ options: [{ value: currentValue, name: current.model, _meta: meta }],
143
+ });
144
+ }
145
+ return { groups, failures };
146
+ }
147
+ export async function buildSessionConfigOptions(llm, selection) {
148
+ const current = selected(selection);
149
+ const { groups, failures } = await catalog(llm, current);
150
+ let info;
151
+ let reasoningFailure;
152
+ try {
153
+ info = await llm.resolveModelInfo(current.provider, current.model);
154
+ }
155
+ catch (error) {
156
+ reasoningFailure = message(error);
157
+ }
158
+ const efforts = info?.reasoning?.efforts ?? [];
159
+ const effortOptions = [
160
+ {
161
+ value: reasoningValue(undefined),
162
+ name: 'Provider default',
163
+ description: 'Clear an explicit effort and let the selected route apply its native default.',
164
+ },
165
+ ...efforts.map((effort) => ({
166
+ value: reasoningValue(String(effort.id)),
167
+ name: effort.name,
168
+ ...(effort.description === undefined ? {} : { description: effort.description }),
169
+ })),
170
+ ];
171
+ if (current.reasoningEffort !== undefined
172
+ && !efforts.some(effort => effort.id === current.reasoningEffort)) {
173
+ effortOptions.push({
174
+ value: reasoningValue(String(current.reasoningEffort)),
175
+ name: String(current.reasoningEffort),
176
+ description: 'Current effort is not advertised by the latest model catalog.',
177
+ });
178
+ }
179
+ return [
180
+ {
181
+ id: MODEL_CONFIG_ID,
182
+ name: 'Model',
183
+ description: 'DSH provider route and model. Changes apply to the next safely assembled step.',
184
+ category: 'model',
185
+ type: 'select',
186
+ currentValue: modelValue(current.provider, current.model),
187
+ options: groups,
188
+ _meta: { dsh: { catalogFailures: failures } },
189
+ },
190
+ {
191
+ id: REASONING_CONFIG_ID,
192
+ name: 'Reasoning effort',
193
+ description: 'Reasoning levels advertised by the exact selected DSH model.',
194
+ category: 'thought_level',
195
+ type: 'select',
196
+ currentValue: reasoningValue(current.reasoningEffort === undefined
197
+ ? undefined
198
+ : String(current.reasoningEffort)),
199
+ options: effortOptions,
200
+ _meta: {
201
+ dsh: {
202
+ ...(info?.reasoning?.defaultEffort === undefined
203
+ ? {}
204
+ : { defaultEffort: String(info.reasoning.defaultEffort) }),
205
+ ...(reasoningFailure === undefined ? {} : { catalogFailure: reasoningFailure }),
206
+ },
207
+ },
208
+ },
209
+ ];
210
+ }
211
+ export async function setSessionConfigOption(llm, selection, configId, value) {
212
+ if (configId === MODEL_CONFIG_ID) {
213
+ const route = decodeModelValue(value);
214
+ const resolved = await llm.resolveCallConfig(route);
215
+ selection.current = {
216
+ provider: resolved.provider,
217
+ model: resolved.model,
218
+ ...(resolved.reasoningEffort === undefined ? {} : { reasoningEffort: resolved.reasoningEffort }),
219
+ };
220
+ }
221
+ else if (configId === REASONING_CONFIG_ID) {
222
+ const current = selected(selection);
223
+ const effort = decodeReasoningValue(value);
224
+ if (effort === undefined) {
225
+ await llm.resolveCallConfig({ provider: current.provider, model: current.model });
226
+ selection.current = { provider: current.provider, model: current.model };
227
+ }
228
+ else {
229
+ const resolved = await llm.resolveCallConfig({
230
+ provider: current.provider,
231
+ model: current.model,
232
+ reasoningEffort: ReasoningEffortId(effort),
233
+ });
234
+ selection.current = {
235
+ provider: resolved.provider,
236
+ model: resolved.model,
237
+ ...(resolved.reasoningEffort === undefined ? {} : { reasoningEffort: resolved.reasoningEffort }),
238
+ };
239
+ }
240
+ }
241
+ else {
242
+ throw new Error(`unknown DSH session config option: ${configId}`);
243
+ }
244
+ return buildSessionConfigOptions(llm, selection);
245
+ }
246
+ export async function modeState(presets, agent) {
247
+ const currentModeId = presets.composedPreset(agent.ctx);
248
+ if (currentModeId === undefined)
249
+ throw new Error('the DSH session has no composed agent preset');
250
+ if (!MODE_IDS.has(currentModeId)) {
251
+ throw new Error(`unsupported DSH agent preset for ACP mode: ${currentModeId}`);
252
+ }
253
+ const nativeModes = new Map((await presets.list()).map(preset => [preset.id, preset]));
254
+ return {
255
+ currentModeId,
256
+ availableModes: MODES.map((mode) => {
257
+ const native = nativeModes.get(mode.id);
258
+ return {
259
+ ...mode,
260
+ ...(native?.name === undefined ? {} : { name: native.name }),
261
+ ...(native?.description === undefined ? {} : { description: native.description }),
262
+ };
263
+ }),
264
+ _meta: { dsh: { kind: 'agent-preset' } },
265
+ };
266
+ }
267
+ export async function setNativeMode(presets, agent, modeId) {
268
+ if (!MODE_IDS.has(modeId))
269
+ throw new Error(`unknown mode: ${modeId}`);
270
+ if (agent.session.events.some(event => event.type === 'turn/start')) {
271
+ throw new Error(`session "${agent.session.id}" has already started; its agent preset is fixed`);
272
+ }
273
+ const preset = await presets.recompose(agent.ctx, modeId);
274
+ agent.session.append('agent-preset/selected', { agentPreset: preset.id });
275
+ return { agentPreset: preset.id };
276
+ }
277
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../src/control.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Native-first Agent Client Protocol bridge for DeepSeek Harness.
3
+ *
4
+ * The connection and prompt lifecycle follows DSH's upstream ACP bridge while
5
+ * session controls and presentation remain wired to native DSH services and
6
+ * durable session events.
7
+ *
8
+ * @module @dsh-enhanced/acp
9
+ */
10
+ import type { Context } from '@deepseek-ai/cordis';
11
+ import Schema from '@deepseek-ai/schemastery';
12
+ import { type Stream } from '@agentclientprotocol/sdk';
13
+ export declare const name = "dsh-enhanced-acp";
14
+ export declare const inject: string[];
15
+ export interface AcpConfig {
16
+ /** Optional fixed provider route; must be paired with `model`. */
17
+ provider?: string;
18
+ /** Optional fixed initial model; must be paired with `provider`. */
19
+ model?: string;
20
+ /** Optional initial exact-model reasoning effort. */
21
+ reasoningEffort?: string;
22
+ /** Carry every otherwise-unmapped durable DSH event through ACP `_meta`. */
23
+ includeRawEvents?: boolean;
24
+ /** Runtime-only transport override used by tests and embedded hosts. */
25
+ stream?: Stream;
26
+ }
27
+ export declare const Config: Schema<AcpConfig>;
28
+ /** Mount one ACP server over the host's native DSH agent composition. */
29
+ export declare function apply(ctx: Context, config?: AcpConfig): void;
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAC7C,OAAO,EAqBL,KAAK,MAAM,EACZ,MAAM,0BAA0B,CAAA;AAqBjC,eAAO,MAAM,IAAI,qBAAqB,CAAA;AACtC,eAAO,MAAM,MAAM,UAAyD,CAAA;AAE5E,MAAM,WAAW,SAAS;IACxB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,SAAS,CAKnC,CAAA;AA6EF,yEAAyE;AACzE,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,SAAc,GAAG,IAAI,CA0VhE"}
package/lib/index.js ADDED
@@ -0,0 +1,409 @@
1
+ /**
2
+ * Native-first Agent Client Protocol bridge for DeepSeek Harness.
3
+ *
4
+ * The connection and prompt lifecycle follows DSH's upstream ACP bridge while
5
+ * session controls and presentation remain wired to native DSH services and
6
+ * durable session events.
7
+ *
8
+ * @module @dsh-enhanced/acp
9
+ */
10
+ import { randomUUID } from 'node:crypto';
11
+ import { isAbsolute } from 'node:path';
12
+ import { Readable, Writable } from 'node:stream';
13
+ import Schema from '@deepseek-ai/schemastery';
14
+ import { AgentSideConnection, ndJsonStream, PROTOCOL_VERSION, RequestError, } from '@agentclientprotocol/sdk';
15
+ import { installModelSelection, } from '@deepseek-ai/dsh-agent';
16
+ import { createUserMessage, errorChain, ReasoningEffortId } from '@deepseek-ai/dsh-llm';
17
+ import { SessionId } from '@deepseek-ai/dsh-session';
18
+ import { createSessionEventMapper } from "./codec.js";
19
+ import { buildSessionConfigOptions, modeState, setNativeMode, setSessionConfigOption, } from "./control.js";
20
+ export const name = 'dsh-enhanced-acp';
21
+ export const inject = ['agentDefaultModel', 'agentPresets', 'agents', 'llm'];
22
+ export const Config = Schema.object({
23
+ provider: Schema.string(),
24
+ model: Schema.string(),
25
+ reasoningEffort: Schema.string(),
26
+ includeRawEvents: Schema.boolean().default(true),
27
+ });
28
+ function invalidParams(detail) {
29
+ return RequestError.invalidParams(undefined, detail);
30
+ }
31
+ function internalError(detail) {
32
+ return RequestError.internalError(undefined, detail);
33
+ }
34
+ function turnEndToStopReason(reason) {
35
+ switch (reason.kind) {
36
+ case 'completed':
37
+ return 'end_turn';
38
+ case 'max-tokens':
39
+ return 'max_tokens';
40
+ case 'interrupted':
41
+ return 'cancelled';
42
+ case 'aborted':
43
+ case 'blocked':
44
+ case 'error':
45
+ default:
46
+ return 'end_turn';
47
+ }
48
+ }
49
+ function promptToText(prompt) {
50
+ return prompt.flatMap((block) => {
51
+ if (block.type === 'text')
52
+ return [block.text];
53
+ if (block.type === 'resource_link') {
54
+ return [`\n[resource_link name=${JSON.stringify(block.name)} uri=${JSON.stringify(block.uri)}]\n`];
55
+ }
56
+ return [];
57
+ }).join('');
58
+ }
59
+ function promptHasUnsupportedContent(prompt) {
60
+ return prompt.some(block => block.type !== 'text' && block.type !== 'resource_link');
61
+ }
62
+ function validateSessionParams(params) {
63
+ if (!isAbsolute(params.cwd))
64
+ throw invalidParams(`cwd must be an absolute path: ${params.cwd}`);
65
+ if (params.additionalDirectories !== undefined && params.additionalDirectories.length > 0) {
66
+ throw invalidParams('additionalDirectories is not supported');
67
+ }
68
+ if ((params.mcpServers ?? []).length > 0) {
69
+ throw invalidParams('per-session mcpServers are not supported; configure MCP through DSH');
70
+ }
71
+ }
72
+ function copySelection(selection) {
73
+ return {
74
+ provider: selection.provider,
75
+ model: selection.model,
76
+ ...(selection.reasoningEffort === undefined ? {} : { reasoningEffort: selection.reasoningEffort }),
77
+ };
78
+ }
79
+ /** Mount one ACP server over the host's native DSH agent composition. */
80
+ export function apply(ctx, config = {}) {
81
+ if ((config.provider === undefined) !== (config.model === undefined)) {
82
+ throw new Error('dsh-enhanced-acp: provider and model must be configured together');
83
+ }
84
+ const agents = ctx.agents;
85
+ const defaultModel = ctx.agentDefaultModel;
86
+ const llm = ctx.llm;
87
+ const agentPresets = ctx.agentPresets;
88
+ const logger = ctx.logger;
89
+ const includeRawEvents = config.includeRawEvents ?? true;
90
+ const sessions = new Map();
91
+ let closed = false;
92
+ let conn;
93
+ const assertOpen = () => {
94
+ if (closed)
95
+ throw internalError('the ACP bridge has been disposed');
96
+ };
97
+ const requireSession = (sessionId) => {
98
+ const record = sessions.get(sessionId);
99
+ if (record === undefined)
100
+ throw invalidParams(`unknown session: ${sessionId}`);
101
+ return record;
102
+ };
103
+ const ownedRecord = (agent) => {
104
+ const record = sessions.get(agent.session.id);
105
+ return record?.agent === agent ? record : undefined;
106
+ };
107
+ const notify = (notification) => {
108
+ void conn.sessionUpdate(notification).catch((error) => {
109
+ logger.warn(`dsh-enhanced-acp: session/update failed: ${String(error)}`);
110
+ });
111
+ };
112
+ const settlePrompt = (record, reason) => {
113
+ const inflight = record.inflight;
114
+ if (inflight === undefined)
115
+ return;
116
+ record.inflight = undefined;
117
+ inflight.resolve(reason);
118
+ };
119
+ const initialSelection = async () => {
120
+ const base = config.provider === undefined
121
+ ? defaultModel.currentSelection()
122
+ : { provider: config.provider, model: config.model };
123
+ const resolved = await llm.resolveCallConfig({
124
+ provider: base.provider,
125
+ model: base.model,
126
+ ...(config.reasoningEffort !== undefined
127
+ ? { reasoningEffort: ReasoningEffortId(config.reasoningEffort) }
128
+ : base.reasoningEffort === undefined
129
+ ? {}
130
+ : { reasoningEffort: base.reasoningEffort }),
131
+ });
132
+ return {
133
+ provider: resolved.provider,
134
+ model: resolved.model,
135
+ ...(resolved.reasoningEffort === undefined ? {} : { reasoningEffort: resolved.reasoningEffort }),
136
+ };
137
+ };
138
+ const drainAndDispose = async (records) => {
139
+ const subagents = ctx.get('subagents');
140
+ if (subagents !== undefined) {
141
+ try {
142
+ await subagents.drainContinuableDescendants(records.map(record => record.agent));
143
+ }
144
+ catch (error) {
145
+ logger.warn(`dsh-enhanced-acp: continuable subagent teardown failed: ${String(error)}`);
146
+ }
147
+ }
148
+ const outcomes = await Promise.allSettled(records.map(record => record.dispose()));
149
+ const failures = outcomes.flatMap(outcome => outcome.status === 'rejected' ? [outcome.reason] : []);
150
+ if (failures.length > 0) {
151
+ throw new AggregateError(failures, `ACP agent teardown failed for ${failures.length} session(s): ${failures.map(errorChain).join('; ')}`);
152
+ }
153
+ };
154
+ ctx.on('session/event', (session, event) => {
155
+ const record = sessions.get(session.header.id);
156
+ if (record === undefined || record.agent.session !== session)
157
+ return;
158
+ try {
159
+ for (const update of record.mapper.map(event)) {
160
+ notify({ sessionId: record.agent.session.id, update });
161
+ }
162
+ }
163
+ finally {
164
+ const inflight = record.inflight;
165
+ if (inflight !== undefined && event.type === 'turn/end' && inflight.turn === event.data.turn) {
166
+ if (event.data.reason.kind === 'error') {
167
+ record.inflight = undefined;
168
+ inflight.reject(internalError(`turn failed: ${event.data.reason.error.message}`));
169
+ }
170
+ else {
171
+ inflight.endReason = event.data.reason;
172
+ }
173
+ }
174
+ }
175
+ });
176
+ ctx.on('agent/inbox/claimed', ({ agent, message, turn }) => {
177
+ const inflight = ownedRecord(agent)?.inflight;
178
+ if (inflight !== undefined && inflight.messageId === message.id)
179
+ inflight.turn = turn;
180
+ });
181
+ ctx.on('agent/error', ({ agent, turn, error }) => {
182
+ const record = ownedRecord(agent);
183
+ const inflight = record?.inflight;
184
+ if (record === undefined || inflight === undefined || inflight.turn === turn)
185
+ return;
186
+ record.inflight = undefined;
187
+ inflight.reject(internalError(`turn failed: ${errorChain(error)}`));
188
+ });
189
+ ctx.on('approval/request', (request, next) => {
190
+ const record = ownedRecord(request.agent);
191
+ if (record === undefined || request.callId === undefined)
192
+ return next();
193
+ return conn.requestPermission({
194
+ sessionId: record.agent.session.id,
195
+ toolCall: { toolCallId: request.callId },
196
+ options: [
197
+ { optionId: 'allow-once', name: 'Allow once', kind: 'allow_once' },
198
+ { optionId: 'reject-once', name: 'Reject', kind: 'reject_once' },
199
+ ],
200
+ }).then(({ outcome }) => {
201
+ if (outcome.outcome === 'cancelled')
202
+ return 'cancelled';
203
+ return outcome.optionId === 'allow-once' ? 'allowed-once' : 'rejected';
204
+ });
205
+ });
206
+ ctx.on('llm/adapters-updated', () => {
207
+ for (const [sessionId, record] of sessions) {
208
+ void buildSessionConfigOptions(llm, record.selection).then((configOptions) => {
209
+ if (sessions.get(sessionId) !== record)
210
+ return;
211
+ notify({ sessionId, update: { sessionUpdate: 'config_option_update', configOptions } });
212
+ }).catch((error) => {
213
+ logger.warn(`dsh-enhanced-acp: failed to refresh model catalog for ${sessionId}: ${String(error)}`);
214
+ });
215
+ }
216
+ });
217
+ const makeAgent = (connection) => {
218
+ conn = connection;
219
+ return {
220
+ initialize(_params) {
221
+ return Promise.resolve({
222
+ protocolVersion: PROTOCOL_VERSION,
223
+ agentInfo: { name: 'dsh-enhanced-acp', version: '0.1.0' },
224
+ agentCapabilities: {
225
+ promptCapabilities: { image: false, audio: false, embeddedContext: false },
226
+ sessionCapabilities: { close: {} },
227
+ _meta: {
228
+ dsh: {
229
+ nativeSessionControls: true,
230
+ dynamicModelSwitching: 'next-safely-assembled-step',
231
+ rawSessionEvents: includeRawEvents,
232
+ },
233
+ },
234
+ },
235
+ authMethods: [],
236
+ });
237
+ },
238
+ authenticate(_params) {
239
+ return Promise.resolve();
240
+ },
241
+ async newSession(params) {
242
+ assertOpen();
243
+ validateSessionParams(params);
244
+ const [current, initialPreset] = await Promise.all([
245
+ initialSelection(),
246
+ agentPresets.resolve(),
247
+ ]);
248
+ const selection = { current, assembled: undefined };
249
+ const sessionId = SessionId(randomUUID());
250
+ const handle = await agents.create({
251
+ sessionId,
252
+ meta: { cwd: params.cwd, agentPreset: initialPreset.id },
253
+ agentOptions: { provider: current.provider, model: current.model },
254
+ setup: async (agentCtx) => {
255
+ installModelSelection(agentCtx, selection);
256
+ await agentPresets.mount(agentCtx, initialPreset.id);
257
+ },
258
+ });
259
+ if (closed) {
260
+ await handle.dispose();
261
+ throw internalError('connection closed during session/new');
262
+ }
263
+ const record = {
264
+ agent: handle.agent,
265
+ dispose: () => handle.dispose(),
266
+ selection,
267
+ mapper: createSessionEventMapper({ includeRawEvents }),
268
+ inflight: undefined,
269
+ modeSwitch: Promise.resolve(),
270
+ };
271
+ sessions.set(sessionId, record);
272
+ try {
273
+ return {
274
+ sessionId,
275
+ modes: await modeState(agentPresets, handle.agent),
276
+ configOptions: await buildSessionConfigOptions(llm, selection),
277
+ _meta: {
278
+ dsh: {
279
+ sessionHeader: handle.agent.session.header,
280
+ selection: copySelection(current),
281
+ },
282
+ },
283
+ };
284
+ }
285
+ catch (error) {
286
+ sessions.delete(sessionId);
287
+ await handle.dispose();
288
+ throw error;
289
+ }
290
+ },
291
+ async setSessionMode(params) {
292
+ assertOpen();
293
+ const record = requireSession(SessionId(params.sessionId));
294
+ try {
295
+ const selected = record.modeSwitch.then(() => setNativeMode(agentPresets, record.agent, params.modeId));
296
+ record.modeSwitch = selected.then(() => undefined, () => undefined);
297
+ const outcome = await selected;
298
+ return { _meta: { dsh: { outcome } } };
299
+ }
300
+ catch (error) {
301
+ throw invalidParams(error instanceof Error ? error.message : String(error));
302
+ }
303
+ },
304
+ async setSessionConfigOption(params) {
305
+ assertOpen();
306
+ const record = requireSession(SessionId(params.sessionId));
307
+ try {
308
+ const configOptions = await setSessionConfigOption(llm, record.selection, params.configId, params.value);
309
+ return {
310
+ configOptions,
311
+ _meta: { dsh: { selection: copySelection(record.selection.current) } },
312
+ };
313
+ }
314
+ catch (error) {
315
+ throw invalidParams(error instanceof Error ? error.message : String(error));
316
+ }
317
+ },
318
+ async prompt(params) {
319
+ assertOpen();
320
+ const record = requireSession(SessionId(params.sessionId));
321
+ await record.modeSwitch;
322
+ if (record.inflight !== undefined)
323
+ throw invalidParams('a prompt is already in flight for this session');
324
+ if (promptHasUnsupportedContent(params.prompt)) {
325
+ throw invalidParams('only text and resource_link prompt content is supported');
326
+ }
327
+ const text = promptToText(params.prompt);
328
+ if (text.trim().length === 0)
329
+ throw invalidParams('empty prompt');
330
+ if (ctx.agents.get(record.agent.id) !== record.agent) {
331
+ throw internalError('prompt was not queued: the agent was disposed outside the bridge');
332
+ }
333
+ const message = createUserMessage({ content: [{ type: 'text', text }], source: { kind: 'user' } });
334
+ const stopReason = await new Promise((resolve, reject) => {
335
+ const inflight = {
336
+ resolve,
337
+ reject,
338
+ messageId: message.id,
339
+ turn: undefined,
340
+ endReason: undefined,
341
+ };
342
+ record.inflight = inflight;
343
+ try {
344
+ record.agent.followup(message);
345
+ }
346
+ catch (error) {
347
+ record.inflight = undefined;
348
+ throw internalError(`prompt was not queued: ${error instanceof Error ? error.message : String(error)}`);
349
+ }
350
+ void record.agent.whenIdle().then(() => {
351
+ if (record.inflight !== inflight)
352
+ return;
353
+ record.inflight = undefined;
354
+ const end = inflight.endReason;
355
+ inflight.resolve(end === undefined
356
+ ? 'cancelled'
357
+ : end.kind === 'max-tokens'
358
+ ? 'end_turn'
359
+ : turnEndToStopReason(end));
360
+ });
361
+ });
362
+ return { stopReason };
363
+ },
364
+ cancel(params) {
365
+ const record = sessions.get(SessionId(params.sessionId));
366
+ if (record === undefined)
367
+ return Promise.resolve();
368
+ record.agent.cancel({ kind: 'user' });
369
+ settlePrompt(record, 'cancelled');
370
+ return Promise.resolve();
371
+ },
372
+ async closeSession(params) {
373
+ const sessionId = SessionId(params.sessionId);
374
+ const record = requireSession(sessionId);
375
+ sessions.delete(sessionId);
376
+ await record.modeSwitch;
377
+ record.agent.cancel({ kind: 'user' });
378
+ settlePrompt(record, 'cancelled');
379
+ await drainAndDispose([record]);
380
+ },
381
+ };
382
+ };
383
+ const stream = config.stream ?? ndJsonStream(Writable.toWeb(process.stdout), Readable.toWeb(process.stdin));
384
+ conn = new AgentSideConnection(makeAgent, stream);
385
+ let quiescing;
386
+ const quiesce = () => {
387
+ if (quiescing !== undefined)
388
+ return quiescing;
389
+ closed = true;
390
+ const records = [...sessions.values()];
391
+ sessions.clear();
392
+ for (const record of records) {
393
+ record.agent.cancel({ kind: 'user' });
394
+ settlePrompt(record, 'cancelled');
395
+ }
396
+ quiescing = drainAndDispose(records);
397
+ return quiescing;
398
+ };
399
+ void conn.closed
400
+ .catch((error) => {
401
+ logger.warn(`dsh-enhanced-acp: connection closed with an error: ${String(error)}`);
402
+ })
403
+ .then(quiesce)
404
+ .catch((error) => {
405
+ logger.warn(`dsh-enhanced-acp: connection-close teardown failed: ${String(error)}`);
406
+ });
407
+ ctx.effect(() => quiesce, 'dsh-enhanced-acp.connection');
408
+ }
409
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,82 @@
1
+ {
2
+ "name": "@dsh-enhanced/acp",
3
+ "version": "0.0.1",
4
+ "description": "Native-first Agent Client Protocol bridge for DeepSeek Harness.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./lib/index.js",
8
+ "types": "./lib/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./lib/index.d.ts",
12
+ "default": "./lib/index.js"
13
+ },
14
+ "./cordis.patch.yml": "./cordis.patch.yml",
15
+ "./package.json": "./package.json"
16
+ },
17
+ "files": [
18
+ "lib",
19
+ "cordis.patch.yml",
20
+ "README.md",
21
+ "LICENSE"
22
+ ],
23
+ "engines": {
24
+ "node": "^22.19.0 || >=24.0.0"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/22-ai-00/dsh-enhanced.git",
32
+ "directory": "plugins/acp"
33
+ },
34
+ "keywords": [
35
+ "acp",
36
+ "deepseek",
37
+ "deepseek-harness",
38
+ "dsh-plugin"
39
+ ],
40
+ "dsh": {
41
+ "bundle": {
42
+ "patch": "./cordis.patch.yml"
43
+ }
44
+ },
45
+ "dependencies": {
46
+ "@agentclientprotocol/sdk": "0.25.1",
47
+ "@deepseek-ai/dsh-agent-presets": "0.1.0-rc.6",
48
+ "@deepseek-ai/dsh-cordis-host-runner": "0.1.0-rc.6",
49
+ "@deepseek-ai/schemastery": "3.18.1",
50
+ "zod": "4.4.3"
51
+ },
52
+ "peerDependencies": {
53
+ "@deepseek-ai/cordis": "^4.0.1",
54
+ "@deepseek-ai/dsh-agent": ">=0.1.0-rc.5 <0.2.0",
55
+ "@deepseek-ai/dsh-agent-default-model": ">=0.1.0-rc.5 <0.2.0",
56
+ "@deepseek-ai/dsh-llm": ">=0.1.0-rc.5 <0.2.0",
57
+ "@deepseek-ai/dsh-session": ">=0.1.0-rc.5 <0.2.0",
58
+ "@deepseek-ai/dsh-session-title": ">=0.1.0-rc.5 <0.2.0",
59
+ "@deepseek-ai/dsh-user-approval": ">=0.1.0-rc.5 <0.2.0"
60
+ },
61
+ "devDependencies": {
62
+ "@deepseek-ai/cordis": "4.0.1",
63
+ "@deepseek-ai/dsh-agent": "0.1.0-rc.6",
64
+ "@deepseek-ai/dsh-agent-default-model": "0.1.0-rc.6",
65
+ "@deepseek-ai/dsh-agent-loop": "0.1.0-rc.6",
66
+ "@deepseek-ai/dsh-agent-loop-testkit": "0.1.0-rc.6",
67
+ "@deepseek-ai/dsh-llm": "0.1.0-rc.6",
68
+ "@deepseek-ai/dsh-session": "0.1.0-rc.6",
69
+ "@deepseek-ai/dsh-session-title": "0.1.0-rc.6",
70
+ "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.6",
71
+ "@deepseek-ai/dsh-tools": "0.1.0-rc.6",
72
+ "@deepseek-ai/dsh-user-approval": "0.1.0-rc.6",
73
+ "@types/node": "22.20.0",
74
+ "typescript": "6.0.3",
75
+ "vitest": "4.1.8"
76
+ },
77
+ "scripts": {
78
+ "build": "tsc -p tsconfig.build.json",
79
+ "test": "vitest run",
80
+ "typecheck": "tsc -p tsconfig.json --noEmit"
81
+ }
82
+ }