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.
Files changed (87) hide show
  1. package/README.en.md +144 -0
  2. package/README.md +89 -180
  3. package/client/index.js +1022 -181
  4. package/cordis.patch.yml +1 -1
  5. package/docs/Acknowledgements.md +38 -67
  6. package/docs/Changelog.md +160 -79
  7. package/docs/Compatibility.md +98 -248
  8. package/docs/EvaluationResults.md +165 -155
  9. package/docs/UsageGuide.md +210 -172
  10. package/docs/en/Acknowledgements.md +76 -0
  11. package/docs/en/Changelog.md +160 -0
  12. package/docs/en/Compatibility.md +146 -0
  13. package/docs/en/EvaluationResults.md +224 -0
  14. package/docs/en/UsageGuide.md +304 -0
  15. package/docs/images/agent-tree-preview.png +0 -0
  16. package/docs/images/agent-tree.png +0 -0
  17. package/docs/images/install-tgz-preview.png +0 -0
  18. package/docs/images/install-tgz.png +0 -0
  19. package/docs/images/preset-settings-preview.png +0 -0
  20. package/docs/images/preset-settings.png +0 -0
  21. package/docs/images/task-status-preview.png +0 -0
  22. package/docs/images/task-status.png +0 -0
  23. package/lib/connection/approvals.d.ts +21 -0
  24. package/lib/connection/approvals.d.ts.map +1 -0
  25. package/lib/connection/approvals.js +83 -0
  26. package/lib/connection/approvals.js.map +1 -0
  27. package/lib/connection/client.d.ts +8 -0
  28. package/lib/connection/client.d.ts.map +1 -0
  29. package/lib/connection/client.js +34 -0
  30. package/lib/connection/client.js.map +1 -0
  31. package/lib/connection/directories.d.ts +30 -0
  32. package/lib/connection/directories.d.ts.map +1 -0
  33. package/lib/connection/directories.js +82 -0
  34. package/lib/connection/directories.js.map +1 -0
  35. package/lib/connection/git.d.ts +5 -0
  36. package/lib/connection/git.d.ts.map +1 -0
  37. package/lib/connection/git.js +86 -0
  38. package/lib/connection/git.js.map +1 -0
  39. package/lib/connection/guidance.d.ts +10 -0
  40. package/lib/connection/guidance.d.ts.map +1 -0
  41. package/lib/connection/guidance.js +27 -0
  42. package/lib/connection/guidance.js.map +1 -0
  43. package/lib/connection/http.d.ts +38 -0
  44. package/lib/connection/http.d.ts.map +1 -0
  45. package/lib/connection/http.js +342 -0
  46. package/lib/connection/http.js.map +1 -0
  47. package/lib/connection/service.d.ts +59 -0
  48. package/lib/connection/service.d.ts.map +1 -0
  49. package/lib/connection/service.js +176 -0
  50. package/lib/connection/service.js.map +1 -0
  51. package/lib/connection/store.d.ts +21 -0
  52. package/lib/connection/store.d.ts.map +1 -0
  53. package/lib/connection/store.js +141 -0
  54. package/lib/connection/store.js.map +1 -0
  55. package/lib/connection/tasks.d.ts +124 -0
  56. package/lib/connection/tasks.d.ts.map +1 -0
  57. package/lib/connection/tasks.js +393 -0
  58. package/lib/connection/tasks.js.map +1 -0
  59. package/lib/connection/types.d.ts +159 -0
  60. package/lib/connection/types.d.ts.map +1 -0
  61. package/lib/connection/types.js +23 -0
  62. package/lib/connection/types.js.map +1 -0
  63. package/lib/connection-cli.d.ts +3 -0
  64. package/lib/connection-cli.d.ts.map +1 -0
  65. package/lib/connection-cli.js +40 -0
  66. package/lib/connection-cli.js.map +1 -0
  67. package/lib/dsh/connection-approval.d.ts +5 -0
  68. package/lib/dsh/connection-approval.d.ts.map +1 -0
  69. package/lib/dsh/connection-approval.js +72 -0
  70. package/lib/dsh/connection-approval.js.map +1 -0
  71. package/lib/dsh/connection-history.d.ts +6 -0
  72. package/lib/dsh/connection-history.d.ts.map +1 -0
  73. package/lib/dsh/connection-history.js +52 -0
  74. package/lib/dsh/connection-history.js.map +1 -0
  75. package/lib/dsh/connection-host.d.ts +114 -0
  76. package/lib/dsh/connection-host.d.ts.map +1 -0
  77. package/lib/dsh/connection-host.js +208 -0
  78. package/lib/dsh/connection-host.js.map +1 -0
  79. package/lib/dsh/connection.d.ts +72 -0
  80. package/lib/dsh/connection.d.ts.map +1 -0
  81. package/lib/dsh/connection.js +186 -0
  82. package/lib/dsh/connection.js.map +1 -0
  83. package/lib/dsh/index.d.ts.map +1 -1
  84. package/lib/dsh/index.js +2 -0
  85. package/lib/dsh/index.js.map +1 -1
  86. package/package.json +14 -6
  87. 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