dsh-super-code 0.3.7 → 0.3.9
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.en.md +144 -0
- package/README.md +89 -180
- package/client/index.js +1022 -181
- package/cordis.patch.yml +1 -1
- package/docs/Acknowledgements.md +38 -67
- package/docs/Changelog.md +160 -79
- package/docs/Compatibility.md +98 -248
- package/docs/EvaluationResults.md +165 -155
- package/docs/UsageGuide.md +210 -172
- package/docs/en/Acknowledgements.md +76 -0
- package/docs/en/Changelog.md +160 -0
- package/docs/en/Compatibility.md +146 -0
- package/docs/en/EvaluationResults.md +224 -0
- package/docs/en/UsageGuide.md +304 -0
- package/docs/images/agent-tree-preview.png +0 -0
- package/docs/images/agent-tree.png +0 -0
- package/docs/images/install-tgz-preview.png +0 -0
- package/docs/images/install-tgz.png +0 -0
- package/docs/images/preset-settings-preview.png +0 -0
- package/docs/images/preset-settings.png +0 -0
- package/docs/images/task-status-preview.png +0 -0
- package/docs/images/task-status.png +0 -0
- package/lib/connection/approvals.d.ts +21 -0
- package/lib/connection/approvals.d.ts.map +1 -0
- package/lib/connection/approvals.js +83 -0
- package/lib/connection/approvals.js.map +1 -0
- package/lib/connection/client.d.ts +8 -0
- package/lib/connection/client.d.ts.map +1 -0
- package/lib/connection/client.js +34 -0
- package/lib/connection/client.js.map +1 -0
- package/lib/connection/directories.d.ts +30 -0
- package/lib/connection/directories.d.ts.map +1 -0
- package/lib/connection/directories.js +82 -0
- package/lib/connection/directories.js.map +1 -0
- package/lib/connection/git.d.ts +5 -0
- package/lib/connection/git.d.ts.map +1 -0
- package/lib/connection/git.js +86 -0
- package/lib/connection/git.js.map +1 -0
- package/lib/connection/guidance.d.ts +10 -0
- package/lib/connection/guidance.d.ts.map +1 -0
- package/lib/connection/guidance.js +27 -0
- package/lib/connection/guidance.js.map +1 -0
- package/lib/connection/http.d.ts +38 -0
- package/lib/connection/http.d.ts.map +1 -0
- package/lib/connection/http.js +342 -0
- package/lib/connection/http.js.map +1 -0
- package/lib/connection/service.d.ts +59 -0
- package/lib/connection/service.d.ts.map +1 -0
- package/lib/connection/service.js +176 -0
- package/lib/connection/service.js.map +1 -0
- package/lib/connection/store.d.ts +21 -0
- package/lib/connection/store.d.ts.map +1 -0
- package/lib/connection/store.js +141 -0
- package/lib/connection/store.js.map +1 -0
- package/lib/connection/tasks.d.ts +124 -0
- package/lib/connection/tasks.d.ts.map +1 -0
- package/lib/connection/tasks.js +393 -0
- package/lib/connection/tasks.js.map +1 -0
- package/lib/connection/types.d.ts +159 -0
- package/lib/connection/types.d.ts.map +1 -0
- package/lib/connection/types.js +23 -0
- package/lib/connection/types.js.map +1 -0
- package/lib/connection-cli.d.ts +3 -0
- package/lib/connection-cli.d.ts.map +1 -0
- package/lib/connection-cli.js +40 -0
- package/lib/connection-cli.js.map +1 -0
- package/lib/dsh/connection-approval.d.ts +5 -0
- package/lib/dsh/connection-approval.d.ts.map +1 -0
- package/lib/dsh/connection-approval.js +72 -0
- package/lib/dsh/connection-approval.js.map +1 -0
- package/lib/dsh/connection-history.d.ts +6 -0
- package/lib/dsh/connection-history.d.ts.map +1 -0
- package/lib/dsh/connection-history.js +52 -0
- package/lib/dsh/connection-history.js.map +1 -0
- package/lib/dsh/connection-host.d.ts +114 -0
- package/lib/dsh/connection-host.d.ts.map +1 -0
- package/lib/dsh/connection-host.js +208 -0
- package/lib/dsh/connection-host.js.map +1 -0
- package/lib/dsh/connection.d.ts +72 -0
- package/lib/dsh/connection.d.ts.map +1 -0
- package/lib/dsh/connection.js +186 -0
- package/lib/dsh/connection.js.map +1 -0
- package/lib/dsh/index.d.ts.map +1 -1
- package/lib/dsh/index.js +2 -0
- package/lib/dsh/index.js.map +1 -1
- package/package.json +14 -6
- package/presets/super-code/agent.cordis.yml +1 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { invokeConnectionTool } from './connection/client.js';
|
|
3
|
+
/** Credentials come from private environment variables, never arguments or profile discovery. */
|
|
4
|
+
async function main() {
|
|
5
|
+
const tool = process.argv[2];
|
|
6
|
+
if (process.argv.length !== 3 || !tool)
|
|
7
|
+
throw new Error('usage');
|
|
8
|
+
const token = process.env.DSH_MCP_TOKEN ?? '', url = process.env.DSH_MCP_URL ?? 'http://127.0.0.1:23457/mcp';
|
|
9
|
+
const chunks = [];
|
|
10
|
+
let bytes = 0;
|
|
11
|
+
if (!process.stdin.isTTY)
|
|
12
|
+
for await (const chunk of process.stdin) {
|
|
13
|
+
bytes += chunk.length;
|
|
14
|
+
if (bytes > 131072)
|
|
15
|
+
throw new Error('input-too-large');
|
|
16
|
+
chunks.push(Buffer.from(chunk));
|
|
17
|
+
}
|
|
18
|
+
const content = Buffer.concat(chunks).toString('utf8').trim(), args = content ? JSON.parse(content) : {};
|
|
19
|
+
if (!args || typeof args !== 'object' || Array.isArray(args))
|
|
20
|
+
throw new Error('invalid-input');
|
|
21
|
+
const controller = new AbortController(), abort = () => controller.abort();
|
|
22
|
+
process.once('SIGINT', abort);
|
|
23
|
+
process.once('SIGTERM', abort);
|
|
24
|
+
try {
|
|
25
|
+
const result = await invokeConnectionTool({ tool, token, url, arguments: args }, controller.signal);
|
|
26
|
+
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
27
|
+
if (result.isError)
|
|
28
|
+
process.exitCode = 1;
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
process.removeListener('SIGINT', abort);
|
|
32
|
+
process.removeListener('SIGTERM', abort);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
void main().catch(() => {
|
|
36
|
+
// Remote error text may include authentication details; retain only safe, actionable guidance.
|
|
37
|
+
process.stderr.write('MCP call failed. Usage: super-code-mcp <dsh_tool|tools>, JSON arguments on stdin; configure DSH_MCP_TOKEN and optional DSH_MCP_URL privately. A transport failure may follow admission: recover the existing task or retry with the same requestId and input; do not control the serving DSH app.\n');
|
|
38
|
+
process.exitCode = 2;
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=connection-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-cli.js","sourceRoot":"","sources":["../src/connection-cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,iGAAiG;AACjG,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5B,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;IAChE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,4BAA4B,CAAA;IAC5G,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAA;YACrB,IAAI,KAAK,GAAG,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;YACtD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACjC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,GAAY,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACjH,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;IAC9F,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,EAAE,KAAK,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;IAChF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,IAA+B,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;QAC9H,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACnD,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IAC1C,CAAC;YAAS,CAAC;QAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAAC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IAAC,CAAC;AACjG,CAAC;AACD,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;IACrB,+FAA+F;IAC/F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qSAAqS,CAAC,CAAA;IAC3T,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;AACtB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Optional public answerer seam; host policy and durable approval audit stay authoritative. */
|
|
2
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
3
|
+
import type { ConnectionService } from '../connection/service.js';
|
|
4
|
+
export declare function applyConnectionApproval(ctx: Context, current: () => ConnectionService | false): void;
|
|
5
|
+
//# sourceMappingURL=connection-approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-approval.d.ts","sourceRoot":"","sources":["../../src/dsh/connection-approval.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAajE,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,GAAG,KAAK,GAAG,IAAI,CA2CpG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { scopeChainOf } from '@deepseek-ai/dsh-scope';
|
|
2
|
+
function serializedArguments(value) {
|
|
3
|
+
try {
|
|
4
|
+
const text = JSON.stringify(value);
|
|
5
|
+
return typeof text === 'string' && text.length <= 16000 ? text : false;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function applyConnectionApproval(ctx, current) {
|
|
12
|
+
const active = new WeakMap();
|
|
13
|
+
ctx.inject(['tools'], owner => {
|
|
14
|
+
owner.on('tools/execute', async (exec, next) => {
|
|
15
|
+
if (!exec.agent)
|
|
16
|
+
return next();
|
|
17
|
+
const agent = exec.agent, calls = active.get(agent) ?? new Set();
|
|
18
|
+
const call = { callId: exec.callId, toolName: exec.name, arguments: serializedArguments(exec.arguments) };
|
|
19
|
+
active.set(agent, calls);
|
|
20
|
+
calls.add(call);
|
|
21
|
+
try {
|
|
22
|
+
return await next();
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
calls.delete(call);
|
|
26
|
+
if (!calls.size)
|
|
27
|
+
active.delete(agent);
|
|
28
|
+
}
|
|
29
|
+
}, { prepend: true });
|
|
30
|
+
});
|
|
31
|
+
ctx.on('approval/request', async (request, next) => {
|
|
32
|
+
const service = current();
|
|
33
|
+
if (!service || !service.read().configuration.allowCallerApproval)
|
|
34
|
+
return next();
|
|
35
|
+
const roots = scopeChainOf(request.agent).flatMap(key => {
|
|
36
|
+
const id = key.session?.id;
|
|
37
|
+
return typeof id === 'string' ? [id] : [];
|
|
38
|
+
});
|
|
39
|
+
// A seed parentSession alone does not authorize a fork. Only the live scope ancestry counts.
|
|
40
|
+
let argumentsText = '';
|
|
41
|
+
if (request.callId) {
|
|
42
|
+
// PTC sub-calls have no native tool/call event. Bind the actual live
|
|
43
|
+
// execution instead of relying on a journal version or an ID prefix.
|
|
44
|
+
const calls = [...active.get(request.agent) ?? []].filter(call => call.callId === request.callId && call.toolName === request.toolName);
|
|
45
|
+
if (calls.length) {
|
|
46
|
+
if (calls.length !== 1 || calls[0].arguments === false)
|
|
47
|
+
return next();
|
|
48
|
+
argumentsText = calls[0].arguments;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const events = request.agent.session.ownEvents();
|
|
52
|
+
let found = false;
|
|
53
|
+
for (let index = events.length - 1; index >= 0; index--) {
|
|
54
|
+
const event = events[index];
|
|
55
|
+
if (event.type === 'tool/call' && event.data.callId === request.callId && event.data.name === request.toolName) {
|
|
56
|
+
argumentsText = event.data.arguments;
|
|
57
|
+
found = true;
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (!found)
|
|
62
|
+
return next();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const answer = await service.requestApproval({ sessionId: request.agent.session.id, toolName: request.toolName,
|
|
66
|
+
...(request.callId ? { callId: request.callId } : {}), reason: request.reason ?? '', arguments: argumentsText }, roots, request.signal);
|
|
67
|
+
if (request.signal?.aborted)
|
|
68
|
+
return 'cancelled';
|
|
69
|
+
return answer === 'host' ? next() : answer;
|
|
70
|
+
}, { prepend: true });
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=connection-approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-approval.js","sourceRoot":"","sources":["../../src/dsh/connection-approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Bounded public journal reads. Never return streams, reasoning, headers or host configuration. */
|
|
2
|
+
import type { SessionEvent } from '@deepseek-ai/dsh-session';
|
|
3
|
+
import type { HistoryCursor, HistoryPage } from '../connection/types.js';
|
|
4
|
+
export declare function publicMessageText(content: unknown): string;
|
|
5
|
+
export declare function connectionHistoryPage(events: readonly SessionEvent[], cursor: HistoryCursor, limit: number): HistoryPage;
|
|
6
|
+
//# sourceMappingURL=connection-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-history.d.ts","sourceRoot":"","sources":["../../src/dsh/connection-history.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAExE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAE1D;AAiBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAuBxH"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { recordedToolResult } from '../core/host-messages.js';
|
|
2
|
+
import { ConnectionError } from '../connection/types.js';
|
|
3
|
+
export function publicMessageText(content) {
|
|
4
|
+
return Array.isArray(content) ? content.filter(block => block?.type === 'text' && typeof block.text === 'string').map(block => block.text).join('\n') : '';
|
|
5
|
+
}
|
|
6
|
+
function publicEvent(event) {
|
|
7
|
+
const data = event.data, type = event.type;
|
|
8
|
+
switch (type) {
|
|
9
|
+
case 'assistant/message': return { text: publicMessageText(data.message?.content ?? data.content) };
|
|
10
|
+
case 'user/message': return { text: publicMessageText(data.content ?? data.message?.content) };
|
|
11
|
+
case 'tool/call': return { text: `${data.name ?? 'tool'}\n${typeof data.arguments === 'string' ? data.arguments : ''}` };
|
|
12
|
+
case 'tool/result': {
|
|
13
|
+
const result = recordedToolResult(data.message);
|
|
14
|
+
return result.kind === 'record' ? { text: result.texts.join('\n'), isError: result.isError } : { text: '[Tool result layout unavailable]' };
|
|
15
|
+
}
|
|
16
|
+
case 'turn/end': return { text: JSON.stringify({ reason: data.reason?.kind ?? 'unknown', ...(typeof data.reason?.error?.code === 'string' ? { errorCode: data.reason.error.code.slice(0, 128) } : {}) }) };
|
|
17
|
+
case 'approval/asked': return { text: 'User confirmation required in DSH.' };
|
|
18
|
+
case 'approval/decided': return { text: 'DSH confirmation resolved.' };
|
|
19
|
+
default: return { text: '' };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function connectionHistoryPage(events, cursor, limit) {
|
|
23
|
+
if (!Number.isSafeInteger(cursor.seq) || cursor.seq < 0 || !Number.isSafeInteger(cursor.offset) || cursor.offset < 0 || !Number.isInteger(limit) || limit < 1 || limit > 20)
|
|
24
|
+
throw new ConnectionError('invalid-history-cursor');
|
|
25
|
+
const entries = [];
|
|
26
|
+
let index = events.findIndex(event => event.seq >= cursor.seq), nextCursor = { ...cursor }, chars = 0, scanned = 0;
|
|
27
|
+
if (index < 0) {
|
|
28
|
+
if (cursor.offset)
|
|
29
|
+
throw new ConnectionError('invalid-history-cursor');
|
|
30
|
+
return { entries, nextCursor, hasMore: false, scope: 'own-public-events' };
|
|
31
|
+
}
|
|
32
|
+
if (cursor.offset && events[index].seq !== cursor.seq)
|
|
33
|
+
throw new ConnectionError('invalid-history-cursor');
|
|
34
|
+
while (index < events.length && entries.length < limit && chars < 16000 && scanned++ < 2000) {
|
|
35
|
+
const event = events[index], content = publicEvent(event), offset = event.seq === cursor.seq ? cursor.offset : 0;
|
|
36
|
+
if (offset > content.text.length || offset > 0 && /[\uD800-\uDBFF]/.test(content.text[offset - 1]) && /[\uDC00-\uDFFF]/.test(content.text[offset]))
|
|
37
|
+
throw new ConnectionError('invalid-history-cursor');
|
|
38
|
+
let end = Math.min(content.text.length, offset + Math.min(4000, 16000 - chars));
|
|
39
|
+
if (end < content.text.length && /[\uD800-\uDBFF]/.test(content.text[end - 1]))
|
|
40
|
+
end--;
|
|
41
|
+
if (content.text.length > offset) {
|
|
42
|
+
entries.push({ seq: event.seq, type: event.type, offset, totalChars: content.text.length, text: content.text.slice(offset, end), ...(content.isError === undefined ? {} : { isError: content.isError }) });
|
|
43
|
+
chars += end - offset;
|
|
44
|
+
}
|
|
45
|
+
nextCursor = end < content.text.length ? { seq: event.seq, offset: end } : { seq: event.seq + 1, offset: 0 };
|
|
46
|
+
if (end < content.text.length)
|
|
47
|
+
break;
|
|
48
|
+
index++;
|
|
49
|
+
}
|
|
50
|
+
return { entries, nextCursor, hasMore: index < events.length, scope: 'own-public-events' };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=connection-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-history.js","sourceRoot":"","sources":["../../src/dsh/connection-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/** Structural adapter over public host services, shared by supported v3/v4 journals. */
|
|
2
|
+
import type { SessionEvent } from '@deepseek-ai/dsh-session';
|
|
3
|
+
import type { DelegationHost, HostObservation, ModelSelection, ObservationDetails, HistoryCursor, HistoryPage } from '../connection/types.js';
|
|
4
|
+
import type { PresetInstallationStatus } from './preset-installation.js';
|
|
5
|
+
interface HostAgent {
|
|
6
|
+
status: string;
|
|
7
|
+
cancel(cause: {
|
|
8
|
+
kind: 'user';
|
|
9
|
+
}, options: {
|
|
10
|
+
keepInbox: boolean;
|
|
11
|
+
}): void;
|
|
12
|
+
}
|
|
13
|
+
interface SessionCut extends Disposable {
|
|
14
|
+
events: readonly SessionEvent[];
|
|
15
|
+
inheritedEventCount: number;
|
|
16
|
+
}
|
|
17
|
+
interface Descendant {
|
|
18
|
+
id: string;
|
|
19
|
+
parentId: string;
|
|
20
|
+
kind: string;
|
|
21
|
+
mode?: string;
|
|
22
|
+
activity?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ConnectionHostServices {
|
|
25
|
+
presets: {
|
|
26
|
+
status(): Promise<PresetInstallationStatus>;
|
|
27
|
+
};
|
|
28
|
+
controller: {
|
|
29
|
+
create(request: {
|
|
30
|
+
sessionId: string;
|
|
31
|
+
cwd?: string;
|
|
32
|
+
workspaceId?: string;
|
|
33
|
+
agentPreset: string;
|
|
34
|
+
}): Promise<{
|
|
35
|
+
sessionId: string;
|
|
36
|
+
agentPreset?: string;
|
|
37
|
+
}>;
|
|
38
|
+
rename?(request: {
|
|
39
|
+
sessionId: string;
|
|
40
|
+
title: string;
|
|
41
|
+
}): Promise<{
|
|
42
|
+
title: string;
|
|
43
|
+
seq: number;
|
|
44
|
+
}>;
|
|
45
|
+
prompt(request: {
|
|
46
|
+
sessionId: string;
|
|
47
|
+
requestId: string;
|
|
48
|
+
mode: 'queue';
|
|
49
|
+
content: {
|
|
50
|
+
type: 'text';
|
|
51
|
+
text: string;
|
|
52
|
+
}[];
|
|
53
|
+
}, signal: AbortSignal): Promise<unknown>;
|
|
54
|
+
modelCatalog?(): Promise<unknown>;
|
|
55
|
+
selectModel?(request: {
|
|
56
|
+
sessionId: string;
|
|
57
|
+
provider: string;
|
|
58
|
+
model: string;
|
|
59
|
+
reasoningEffort?: string;
|
|
60
|
+
}): Promise<{
|
|
61
|
+
selected: ModelSelection;
|
|
62
|
+
}>;
|
|
63
|
+
};
|
|
64
|
+
workspaceRegistry?: {
|
|
65
|
+
list(): readonly {
|
|
66
|
+
id: string;
|
|
67
|
+
path: string;
|
|
68
|
+
title: string;
|
|
69
|
+
}[];
|
|
70
|
+
create?(path: string, title?: string): Promise<{
|
|
71
|
+
id: string;
|
|
72
|
+
path: string;
|
|
73
|
+
title: string;
|
|
74
|
+
}>;
|
|
75
|
+
};
|
|
76
|
+
agents: {
|
|
77
|
+
get(id: string): HostAgent | undefined;
|
|
78
|
+
};
|
|
79
|
+
query: {
|
|
80
|
+
observeSession(id: string, options: {
|
|
81
|
+
projectionMode: 'none';
|
|
82
|
+
signal: AbortSignal;
|
|
83
|
+
}): Promise<SessionCut>;
|
|
84
|
+
};
|
|
85
|
+
subagents: {
|
|
86
|
+
listDescendants(id: string, signal?: AbortSignal): Promise<Descendant[]>;
|
|
87
|
+
interrupt(id: string, authority: {
|
|
88
|
+
kind: 'user';
|
|
89
|
+
parentSessionId: string;
|
|
90
|
+
}): Promise<unknown>;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
interface SessionFacts {
|
|
94
|
+
status: HostObservation['status'];
|
|
95
|
+
output: string;
|
|
96
|
+
observation: ObservationDetails;
|
|
97
|
+
}
|
|
98
|
+
/** Own events only; idle without a settled, admitted request is not a completed task. */
|
|
99
|
+
export declare function connectionSessionFacts(events: readonly SessionEvent[], agentStatus: string, requestId: string, cancelling?: boolean): SessionFacts;
|
|
100
|
+
export declare class ConnectionHost implements DelegationHost {
|
|
101
|
+
private readonly services;
|
|
102
|
+
constructor(services: ConnectionHostServices);
|
|
103
|
+
preset(): Promise<string>;
|
|
104
|
+
create(sessionId: string, cwd: string, preset: string, title?: string): Promise<void>;
|
|
105
|
+
models(): Promise<unknown>;
|
|
106
|
+
history(sessionId: string, cursor: HistoryCursor, limit: number, descendantId?: string): Promise<HistoryPage>;
|
|
107
|
+
selectModel(sessionId: string, selection: ModelSelection): Promise<ModelSelection>;
|
|
108
|
+
prompt(sessionId: string, requestId: string, prompt: string): Promise<void>;
|
|
109
|
+
private facts;
|
|
110
|
+
observe(sessionId: string, requestId: string, cancelling?: boolean): Promise<HostObservation>;
|
|
111
|
+
cancel(sessionId: string): Promise<void>;
|
|
112
|
+
}
|
|
113
|
+
export {};
|
|
114
|
+
//# sourceMappingURL=connection-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-host.d.ts","sourceRoot":"","sources":["../../src/dsh/connection-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { realpath } from 'node:fs/promises';
|
|
2
|
+
import { basename } from 'node:path';
|
|
3
|
+
import { ConnectionError } from '../connection/types.js';
|
|
4
|
+
import { connectionHistoryPage, publicMessageText } from './connection-history.js';
|
|
5
|
+
function record(value) { return value && typeof value === 'object' ? value : {}; }
|
|
6
|
+
/** Own events only; idle without a settled, admitted request is not a completed task. */
|
|
7
|
+
export function connectionSessionFacts(events, agentStatus, requestId, cancelling = false) {
|
|
8
|
+
let admitted = requestId === '', requestSeq = -1, endSeq = -1, reason = '', output = '', outputTruncated = false, errorCode = '';
|
|
9
|
+
let lastEventSeq = -1, lastEventType = '';
|
|
10
|
+
const approvals = new Set(), external = new Set();
|
|
11
|
+
for (const event of events) {
|
|
12
|
+
const data = record(event.data), type = event.type;
|
|
13
|
+
if (type === 'user/message' && data.source?.rpcId === requestId) {
|
|
14
|
+
admitted = true;
|
|
15
|
+
requestSeq = event.seq;
|
|
16
|
+
output = '';
|
|
17
|
+
outputTruncated = false;
|
|
18
|
+
errorCode = '';
|
|
19
|
+
}
|
|
20
|
+
if (admitted && ['user/message', 'assistant/message', 'tool/call', 'tool/result', 'tool/ptc-dispatch', 'step/start', 'turn/end', 'approval/asked', 'approval/decided', 'llm/retry'].includes(type)) {
|
|
21
|
+
lastEventSeq = event.seq;
|
|
22
|
+
lastEventType = type;
|
|
23
|
+
}
|
|
24
|
+
if (type === 'turn/start') {
|
|
25
|
+
reason = '';
|
|
26
|
+
errorCode = '';
|
|
27
|
+
approvals.clear();
|
|
28
|
+
}
|
|
29
|
+
if (type === 'turn/end') {
|
|
30
|
+
endSeq = event.seq;
|
|
31
|
+
reason = data.reason?.kind ?? '';
|
|
32
|
+
errorCode = typeof data.reason?.error?.code === 'string' ? data.reason.error.code.slice(0, 128) : '';
|
|
33
|
+
approvals.clear();
|
|
34
|
+
}
|
|
35
|
+
if (type === 'approval/asked' && typeof data.id === 'string')
|
|
36
|
+
approvals.add(data.id);
|
|
37
|
+
if (type === 'approval/decided')
|
|
38
|
+
approvals.delete(data.id);
|
|
39
|
+
if (type === 'subagent/start' && data.runId)
|
|
40
|
+
external.add(data.runId);
|
|
41
|
+
if (type === 'subagent/end')
|
|
42
|
+
external.delete(data.runId);
|
|
43
|
+
if (type === 'assistant/message' && admitted && event.seq > requestSeq) {
|
|
44
|
+
const text = publicMessageText(data.message?.content ?? data.content);
|
|
45
|
+
if (text) {
|
|
46
|
+
let start = Math.max(0, text.length - 12000);
|
|
47
|
+
if (start > 0 && /[\uDC00-\uDFFF]/.test(text[start]) && /[\uD800-\uDBFF]/.test(text[start - 1]))
|
|
48
|
+
start++;
|
|
49
|
+
output = text.slice(start);
|
|
50
|
+
outputTruncated = start > 0;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const observation = { lastEventSeq, lastEventType, outputTruncated, ...(errorCode ? { errorCode } : {}) };
|
|
55
|
+
const result = (status) => ({ status, output, observation });
|
|
56
|
+
if (approvals.size)
|
|
57
|
+
return result('waiting_confirmation');
|
|
58
|
+
if (agentStatus === 'running' || external.size)
|
|
59
|
+
return result(agentStatus === 'missing' ? 'unavailable' : 'running');
|
|
60
|
+
if (cancelling && agentStatus === 'idle')
|
|
61
|
+
return result('interrupted');
|
|
62
|
+
if (!admitted || endSeq <= requestSeq || !reason)
|
|
63
|
+
return result(agentStatus === 'missing' ? 'unavailable' : 'running');
|
|
64
|
+
if (reason === 'error' || reason === 'max-tokens')
|
|
65
|
+
return result('failed');
|
|
66
|
+
if (['aborted', 'interrupted', 'forked'].includes(reason))
|
|
67
|
+
return result('interrupted');
|
|
68
|
+
if (reason === 'blocked')
|
|
69
|
+
return result('waiting_confirmation');
|
|
70
|
+
return result(reason === 'completed' ? 'finished' : 'unavailable');
|
|
71
|
+
}
|
|
72
|
+
export class ConnectionHost {
|
|
73
|
+
services;
|
|
74
|
+
constructor(services) {
|
|
75
|
+
this.services = services;
|
|
76
|
+
}
|
|
77
|
+
async preset() {
|
|
78
|
+
const preset = await this.services.presets.status();
|
|
79
|
+
if (!['available', 'installed'].includes(preset.state))
|
|
80
|
+
throw new ConnectionError('super-code-preset-unavailable');
|
|
81
|
+
return preset.id;
|
|
82
|
+
}
|
|
83
|
+
async create(sessionId, cwd, preset, title = `[MCP] ${basename(cwd) || 'conversation'}`) {
|
|
84
|
+
const rows = this.services.workspaceRegistry?.list() ?? [];
|
|
85
|
+
let workspace;
|
|
86
|
+
for (const row of rows) {
|
|
87
|
+
try {
|
|
88
|
+
if (await realpath(row.path) === cwd) {
|
|
89
|
+
workspace = row;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch { /* An unavailable workspace cannot own a new session. */ }
|
|
94
|
+
}
|
|
95
|
+
if (!workspace && this.services.workspaceRegistry?.create) {
|
|
96
|
+
workspace = await this.services.workspaceRegistry.create(cwd);
|
|
97
|
+
}
|
|
98
|
+
const request = workspace
|
|
99
|
+
? { sessionId, workspaceId: workspace.id, agentPreset: preset }
|
|
100
|
+
: { sessionId, cwd, agentPreset: preset };
|
|
101
|
+
const created = await this.services.controller.create(request);
|
|
102
|
+
if (created.sessionId !== sessionId || created.agentPreset !== undefined && created.agentPreset !== preset)
|
|
103
|
+
throw new ConnectionError('session-identity-mismatch');
|
|
104
|
+
if (this.services.controller.rename) {
|
|
105
|
+
try {
|
|
106
|
+
await this.services.controller.rename({ sessionId, title });
|
|
107
|
+
}
|
|
108
|
+
catch { /* Older hosts may mount no session-title service; execution remains usable. */ }
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async models() {
|
|
112
|
+
if (!this.services.controller.modelCatalog)
|
|
113
|
+
throw new ConnectionError('model-catalog-unavailable');
|
|
114
|
+
return this.services.controller.modelCatalog();
|
|
115
|
+
}
|
|
116
|
+
async history(sessionId, cursor, limit, descendantId = sessionId) {
|
|
117
|
+
const descendants = await this.services.subagents.listDescendants(sessionId, AbortSignal.timeout(5000)).catch(() => []);
|
|
118
|
+
if (descendantId !== sessionId && !descendants.some(child => child.id === descendantId))
|
|
119
|
+
throw new ConnectionError('history-session-not-owned');
|
|
120
|
+
const cut = await this.services.query.observeSession(descendantId, { projectionMode: 'none', signal: AbortSignal.timeout(5000) });
|
|
121
|
+
try {
|
|
122
|
+
return { ...connectionHistoryPage(cut.events.slice(cut.inheritedEventCount), cursor, limit), sessionId: descendantId,
|
|
123
|
+
descendants: descendants.slice(0, 100).map(child => ({ sessionId: child.id, kind: child.kind })), descendantsTruncated: descendants.length > 100 };
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
cut[Symbol.dispose]();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async selectModel(sessionId, selection) {
|
|
130
|
+
if (!this.services.controller.selectModel)
|
|
131
|
+
throw new ConnectionError('model-selection-unavailable');
|
|
132
|
+
const result = await this.services.controller.selectModel({ sessionId, ...selection });
|
|
133
|
+
const selected = result.selected;
|
|
134
|
+
return { provider: selected.provider, model: selected.model,
|
|
135
|
+
...(selected.reasoningEffort ? { reasoningEffort: selected.reasoningEffort } : {}) };
|
|
136
|
+
}
|
|
137
|
+
async prompt(sessionId, requestId, prompt) {
|
|
138
|
+
await this.services.controller.prompt({ sessionId, requestId, mode: 'queue', content: [{ type: 'text', text: prompt }] }, new AbortController().signal);
|
|
139
|
+
}
|
|
140
|
+
async facts(id, requestId, cancelling = false) {
|
|
141
|
+
const cut = await this.services.query.observeSession(id, { projectionMode: 'none', signal: AbortSignal.timeout(5000) });
|
|
142
|
+
try {
|
|
143
|
+
const events = cut.events.slice(cut.inheritedEventCount);
|
|
144
|
+
let requestAt = 0, endedAt = 0;
|
|
145
|
+
for (const event of events) {
|
|
146
|
+
if (event.type === 'user/message' && record(event.data).source?.rpcId === requestId)
|
|
147
|
+
requestAt = event.time;
|
|
148
|
+
if (event.type === 'turn/end')
|
|
149
|
+
endedAt = event.time;
|
|
150
|
+
}
|
|
151
|
+
return { ...connectionSessionFacts(events, this.services.agents.get(id)?.status ?? 'missing', requestId, cancelling), requestAt, endedAt };
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
cut[Symbol.dispose]();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
async observe(sessionId, requestId, cancelling = false) {
|
|
158
|
+
try {
|
|
159
|
+
const root = await this.facts(sessionId, requestId, cancelling);
|
|
160
|
+
const children = await this.services.subagents.listDescendants(sessionId, AbortSignal.timeout(5000));
|
|
161
|
+
let status = root.status;
|
|
162
|
+
for (const child of children) {
|
|
163
|
+
if (child.kind === 'diagnostic') {
|
|
164
|
+
status = 'unavailable';
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
if (child.mode === 'external')
|
|
168
|
+
continue; // Root start/end run facts track these activations.
|
|
169
|
+
const facts = await this.facts(child.id, '', cancelling);
|
|
170
|
+
if (facts.status === 'waiting_confirmation') {
|
|
171
|
+
status = 'waiting_confirmation';
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
if (facts.status === 'unavailable') {
|
|
175
|
+
status = 'unavailable';
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
if (facts.status === 'running' && status !== 'waiting_confirmation')
|
|
179
|
+
status = 'running';
|
|
180
|
+
// Catalogs retain old children. A settled failure from before this request must not fail every later continuation.
|
|
181
|
+
if (['failed', 'interrupted'].includes(facts.status) && status === 'finished'
|
|
182
|
+
&& (!root.requestAt || !facts.endedAt || facts.endedAt >= root.requestAt))
|
|
183
|
+
status = 'failed';
|
|
184
|
+
}
|
|
185
|
+
return { status, output: root.output, observation: root.observation, detail: status === 'finished' ? 'Root and managed descendants settled. Acceptance has not been verified.'
|
|
186
|
+
: status === 'failed' ? `DSH task tree failed${root.observation.errorCode ? ` (${root.observation.errorCode})` : ''}; inspect public history with dsh_read. No automatic retry.`
|
|
187
|
+
: status === 'waiting_confirmation' ? 'A permission request or blocked turn is pending. Check dsh_wait.callerApproval for the authorized approval path; otherwise resolve it in DSH.' : `DSH task tree: ${status}.` };
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return { status: 'unavailable', output: '', detail: 'Could not observe the complete DSH task tree. No request was replayed.' };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
async cancel(sessionId) {
|
|
194
|
+
// Clear queued follow-ups as well as aborting the root, so cancellation cannot wake another turn.
|
|
195
|
+
this.services.agents.get(sessionId)?.cancel({ kind: 'user' }, { keepInbox: false });
|
|
196
|
+
const children = await this.services.subagents.listDescendants(sessionId, AbortSignal.timeout(5000));
|
|
197
|
+
for (const child of [...children].reverse()) {
|
|
198
|
+
if (child.kind === 'diagnostic')
|
|
199
|
+
throw new ConnectionError('cancellation-unconfirmed');
|
|
200
|
+
const agent = this.services.agents.get(child.id);
|
|
201
|
+
agent?.cancel({ kind: 'user' }, { keepInbox: false });
|
|
202
|
+
if (child.mode === 'external' || agent?.status === 'running') {
|
|
203
|
+
await this.services.subagents.interrupt(child.id, { kind: 'user', parentSessionId: child.parentId });
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=connection-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-host.js","sourceRoot":"","sources":["../../src/dsh/connection-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
3
|
+
import { ConnectionService } from '../connection/service.js';
|
|
4
|
+
import type { ConnectionSaveResult, ConnectionSnapshot } from '../connection/service.js';
|
|
5
|
+
interface DirectoryListing {
|
|
6
|
+
path: string;
|
|
7
|
+
home: string;
|
|
8
|
+
crumbs: {
|
|
9
|
+
name: string;
|
|
10
|
+
path: string;
|
|
11
|
+
hidden: boolean;
|
|
12
|
+
}[];
|
|
13
|
+
entries: {
|
|
14
|
+
name: string;
|
|
15
|
+
path: string;
|
|
16
|
+
hidden: boolean;
|
|
17
|
+
}[];
|
|
18
|
+
truncated: boolean;
|
|
19
|
+
}
|
|
20
|
+
interface SettingsEnvironment {
|
|
21
|
+
workspaces: false | {
|
|
22
|
+
list(): {
|
|
23
|
+
path: string;
|
|
24
|
+
title: string;
|
|
25
|
+
}[];
|
|
26
|
+
};
|
|
27
|
+
picker: false | {
|
|
28
|
+
capability(): {
|
|
29
|
+
kind: string;
|
|
30
|
+
pick?(signal: AbortSignal): Promise<string | null>;
|
|
31
|
+
list?(path?: string, signal?: AbortSignal): Promise<DirectoryListing>;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export declare class SuperCodeConnection extends TypertRemoteService {
|
|
36
|
+
private readonly current;
|
|
37
|
+
private readonly environment;
|
|
38
|
+
constructor(ctx: Context, current: () => ConnectionService | false, environment?: SettingsEnvironment);
|
|
39
|
+
private service;
|
|
40
|
+
readConfig(): ConnectionSnapshot;
|
|
41
|
+
saveConfig(content: string, expected: string): Promise<ConnectionSaveResult>;
|
|
42
|
+
revealToken(): {
|
|
43
|
+
token: string;
|
|
44
|
+
};
|
|
45
|
+
rotateToken(expected: string): Promise<ConnectionSaveResult>;
|
|
46
|
+
overview(): ReturnType<ConnectionService['overview']>;
|
|
47
|
+
disconnectClient(id: string): Promise<{
|
|
48
|
+
disconnected: true;
|
|
49
|
+
}>;
|
|
50
|
+
pendingDirectories(): ReturnType<ConnectionService['pendingDirectories']>;
|
|
51
|
+
resolveDirectory(id: string, decision: string): ReturnType<ConnectionService['resolveDirectory']>;
|
|
52
|
+
directories(): Promise<{
|
|
53
|
+
items: {
|
|
54
|
+
path: string;
|
|
55
|
+
title: string;
|
|
56
|
+
available: boolean;
|
|
57
|
+
workspace: boolean;
|
|
58
|
+
}[];
|
|
59
|
+
picker: string;
|
|
60
|
+
available: boolean;
|
|
61
|
+
}>;
|
|
62
|
+
pickDirectory(signal: AbortSignal): Promise<{
|
|
63
|
+
kind: 'selected';
|
|
64
|
+
path: string;
|
|
65
|
+
} | {
|
|
66
|
+
kind: 'cancelled';
|
|
67
|
+
}>;
|
|
68
|
+
browseDirectory(path: string, signal: AbortSignal): Promise<DirectoryListing>;
|
|
69
|
+
}
|
|
70
|
+
export declare function applyConnection(ctx: Context): void;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=connection.d.ts.map
|