mcp-codex-worker 0.1.11 → 0.1.13

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 (73) hide show
  1. package/dist/src/execution/base-adapter.d.ts +63 -0
  2. package/dist/src/execution/base-adapter.js +74 -0
  3. package/dist/src/execution/base-adapter.js.map +1 -0
  4. package/dist/src/execution/claude-adapter.d.ts +12 -0
  5. package/dist/src/execution/claude-adapter.js +23 -0
  6. package/dist/src/execution/claude-adapter.js.map +1 -0
  7. package/dist/src/execution/codex-adapter.d.ts +21 -0
  8. package/dist/src/execution/codex-adapter.js +35 -0
  9. package/dist/src/execution/codex-adapter.js.map +1 -0
  10. package/dist/src/execution/codex-pause-flow.d.ts +23 -0
  11. package/dist/src/execution/codex-pause-flow.js +185 -0
  12. package/dist/src/execution/codex-pause-flow.js.map +1 -0
  13. package/dist/src/execution/copilot-adapter.d.ts +12 -0
  14. package/dist/src/execution/copilot-adapter.js +23 -0
  15. package/dist/src/execution/copilot-adapter.js.map +1 -0
  16. package/dist/src/execution/provider-capabilities.d.ts +35 -0
  17. package/dist/src/execution/provider-capabilities.js +58 -0
  18. package/dist/src/execution/provider-capabilities.js.map +1 -0
  19. package/dist/src/execution/provider-registry.d.ts +37 -0
  20. package/dist/src/execution/provider-registry.js +69 -0
  21. package/dist/src/execution/provider-registry.js.map +1 -0
  22. package/dist/src/mcp/resource-renderers.d.ts +25 -0
  23. package/dist/src/mcp/resource-renderers.js +190 -0
  24. package/dist/src/mcp/resource-renderers.js.map +1 -0
  25. package/dist/src/mcp/sep1686-handlers.d.ts +56 -0
  26. package/dist/src/mcp/sep1686-handlers.js +98 -0
  27. package/dist/src/mcp/sep1686-handlers.js.map +1 -0
  28. package/dist/src/mcp/tool-definitions.d.ts +157 -0
  29. package/dist/src/mcp/tool-definitions.js +242 -0
  30. package/dist/src/mcp/tool-definitions.js.map +1 -1
  31. package/dist/src/task/fsm-transitions.d.ts +17 -0
  32. package/dist/src/task/fsm-transitions.js +66 -0
  33. package/dist/src/task/fsm-transitions.js.map +1 -0
  34. package/dist/src/task/task-handle-impl.d.ts +10 -0
  35. package/dist/src/task/task-handle-impl.js +139 -0
  36. package/dist/src/task/task-handle-impl.js.map +1 -0
  37. package/dist/src/task/task-handle.d.ts +88 -0
  38. package/dist/src/task/task-handle.js +2 -0
  39. package/dist/src/task/task-handle.js.map +1 -0
  40. package/dist/src/task/task-manager.d.ts +99 -0
  41. package/dist/src/task/task-manager.js +246 -0
  42. package/dist/src/task/task-manager.js.map +1 -0
  43. package/dist/src/task/task-persistence.d.ts +18 -0
  44. package/dist/src/task/task-persistence.js +61 -0
  45. package/dist/src/task/task-persistence.js.map +1 -0
  46. package/dist/src/task/task-state.d.ts +79 -0
  47. package/dist/src/task/task-state.js +24 -0
  48. package/dist/src/task/task-state.js.map +1 -0
  49. package/dist/src/task/task-store.d.ts +46 -0
  50. package/dist/src/task/task-store.js +104 -0
  51. package/dist/src/task/task-store.js.map +1 -0
  52. package/dist/src/task/wire-state-mapper.d.ts +21 -0
  53. package/dist/src/task/wire-state-mapper.js +63 -0
  54. package/dist/src/task/wire-state-mapper.js.map +1 -0
  55. package/package.json +2 -1
  56. package/src/execution/base-adapter.ts +133 -0
  57. package/src/execution/claude-adapter.ts +40 -0
  58. package/src/execution/codex-adapter.ts +67 -0
  59. package/src/execution/codex-pause-flow.ts +225 -0
  60. package/src/execution/copilot-adapter.ts +40 -0
  61. package/src/execution/provider-capabilities.ts +100 -0
  62. package/src/execution/provider-registry.ts +81 -0
  63. package/src/mcp/resource-renderers.ts +224 -0
  64. package/src/mcp/sep1686-handlers.ts +149 -0
  65. package/src/mcp/tool-definitions.ts +255 -0
  66. package/src/task/fsm-transitions.ts +72 -0
  67. package/src/task/task-handle-impl.ts +170 -0
  68. package/src/task/task-handle.ts +135 -0
  69. package/src/task/task-manager.ts +328 -0
  70. package/src/task/task-persistence.ts +95 -0
  71. package/src/task/task-state.ts +121 -0
  72. package/src/task/task-store.ts +121 -0
  73. package/src/task/wire-state-mapper.ts +77 -0
@@ -0,0 +1,69 @@
1
+ // ---------------------------------------------------------------------------
2
+ // ProviderRegistry — routes task types to provider adapters
3
+ // Spec reference: §3.4
4
+ // ---------------------------------------------------------------------------
5
+ /**
6
+ * Central registry for provider adapters.
7
+ *
8
+ * Supports:
9
+ * - Registration by provider ID
10
+ * - Default fallback provider
11
+ * - Per-task-type routing overrides
12
+ * - Bulk shutdown
13
+ */
14
+ export class ProviderRegistry {
15
+ adapters = new Map();
16
+ defaultProvider;
17
+ taskTypeRoutes = new Map();
18
+ /** Register an adapter. Keyed by its `id` property. */
19
+ register(adapter) {
20
+ this.adapters.set(adapter.id, adapter);
21
+ }
22
+ /** Set the fallback provider used when no task-type route matches. */
23
+ setDefault(provider) {
24
+ this.defaultProvider = provider;
25
+ }
26
+ /** Override routing for a specific task type. */
27
+ setTaskTypeRoute(taskType, provider) {
28
+ this.taskTypeRoutes.set(taskType, provider);
29
+ }
30
+ /** Look up an adapter by provider ID. */
31
+ getAdapter(provider) {
32
+ return this.adapters.get(provider);
33
+ }
34
+ /**
35
+ * Select the best adapter for a given task type.
36
+ *
37
+ * Resolution order:
38
+ * 1. Explicit task-type route
39
+ * 2. Default provider
40
+ * 3. First registered adapter (arbitrary but deterministic)
41
+ */
42
+ selectForTaskType(taskType) {
43
+ // 1. Check explicit route
44
+ const routed = this.taskTypeRoutes.get(taskType);
45
+ if (routed !== undefined) {
46
+ const adapter = this.adapters.get(routed);
47
+ if (adapter)
48
+ return adapter;
49
+ }
50
+ // 2. Check default
51
+ if (this.defaultProvider !== undefined) {
52
+ const adapter = this.adapters.get(this.defaultProvider);
53
+ if (adapter)
54
+ return adapter;
55
+ }
56
+ // 3. Fall back to first registered
57
+ const all = Array.from(this.adapters.values());
58
+ return all.length > 0 ? all[0] : undefined;
59
+ }
60
+ /** Return all registered adapters. */
61
+ getAllAdapters() {
62
+ return Array.from(this.adapters.values());
63
+ }
64
+ /** Shut down all registered adapters in parallel. */
65
+ async shutdownAll() {
66
+ await Promise.all(Array.from(this.adapters.values()).map((a) => a.shutdown()));
67
+ }
68
+ }
69
+ //# sourceMappingURL=provider-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../../src/execution/provider-registry.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,4DAA4D;AAC5D,uBAAuB;AACvB,8EAA8E;AAK9E;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAgB;IACV,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC7D,eAAe,CAAuB;IAC7B,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEpE,uDAAuD;IACvD,QAAQ,CAAC,OAA4B;QACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,sEAAsE;IACtE,UAAU,CAAC,QAAkB;QAC3B,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;IAClC,CAAC;IAED,iDAAiD;IACjD,gBAAgB,CAAC,QAAsB,EAAE,QAAkB;QACzD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,yCAAyC;IACzC,UAAU,CAAC,QAAkB;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;OAOG;IACH,iBAAiB,CAAC,QAAsB;QACtC,0BAA0B;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC;QAC9B,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACxD,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC;QAC9B,CAAC;QAED,mCAAmC;QACnC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7C,CAAC;IAED,sCAAsC;IACtC,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,WAAW;QACf,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAC5D,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { TaskState } from '../task/task-state.js';
2
+ /**
3
+ * Compact all-tasks view.
4
+ *
5
+ * Resource URI: `task:///all`
6
+ */
7
+ export declare function renderScoreboard(tasks: TaskState[]): string;
8
+ /**
9
+ * Full task detail view as markdown.
10
+ *
11
+ * Resource URI: `task:///{id}`
12
+ */
13
+ export declare function renderTaskDetail(task: TaskState): string;
14
+ /**
15
+ * Last 20 lines from task.output.
16
+ *
17
+ * Resource URI: `task:///{id}/log`
18
+ */
19
+ export declare function renderSummaryLog(task: TaskState): string;
20
+ /**
21
+ * All lines from task.output (no truncation).
22
+ *
23
+ * Resource URI: `task:///{id}/log.verbose`
24
+ */
25
+ export declare function renderVerboseLog(task: TaskState): string;
@@ -0,0 +1,190 @@
1
+ import { TaskStatus } from '../task/task-state.js';
2
+ import { mapToDisplay } from '../task/wire-state-mapper.js';
3
+ // ---------------------------------------------------------------------------
4
+ // Constants
5
+ // ---------------------------------------------------------------------------
6
+ const PROMPT_MAX_LEN = 50;
7
+ const SUMMARY_LOG_LINES = 20;
8
+ const DETAIL_OUTPUT_LINES = 10;
9
+ // ---------------------------------------------------------------------------
10
+ // Sorting helpers
11
+ // ---------------------------------------------------------------------------
12
+ /** Active statuses that should appear first on the scoreboard. */
13
+ const ACTIVE_STATUSES = new Set([
14
+ TaskStatus.RUNNING,
15
+ TaskStatus.WAITING_ANSWER,
16
+ TaskStatus.RATE_LIMITED,
17
+ ]);
18
+ /** Pending statuses that appear between active and terminal. */
19
+ const PENDING_STATUSES = new Set([
20
+ TaskStatus.WAITING,
21
+ TaskStatus.PENDING,
22
+ ]);
23
+ function sortPriority(status) {
24
+ if (ACTIVE_STATUSES.has(status))
25
+ return 0;
26
+ if (PENDING_STATUSES.has(status))
27
+ return 1;
28
+ return 2; // terminal
29
+ }
30
+ // ---------------------------------------------------------------------------
31
+ // Formatting helpers
32
+ // ---------------------------------------------------------------------------
33
+ function truncatePrompt(prompt, maxLen = PROMPT_MAX_LEN) {
34
+ if (prompt.length <= maxLen)
35
+ return prompt;
36
+ return prompt.slice(0, maxLen - 3) + '...';
37
+ }
38
+ function formatElapsed(createdAt, updatedAt) {
39
+ const start = new Date(createdAt).getTime();
40
+ const end = new Date(updatedAt).getTime();
41
+ const diffMs = Math.max(0, end - start);
42
+ const totalSec = Math.floor(diffMs / 1000);
43
+ const min = Math.floor(totalSec / 60);
44
+ const sec = totalSec % 60;
45
+ if (min > 0) {
46
+ return `${min}m ${sec}s`;
47
+ }
48
+ return `${sec}s`;
49
+ }
50
+ /**
51
+ * Build a status-count summary string like "3 done, 1 busy, 1 wait".
52
+ * Uses the display badge labels (without brackets) as category names.
53
+ */
54
+ function statusSummary(tasks) {
55
+ const counts = new Map();
56
+ for (const t of tasks) {
57
+ const badge = mapToDisplay(t.status);
58
+ // Strip brackets: "[busy]" → "busy"
59
+ const label = badge.slice(1, -1);
60
+ counts.set(label, (counts.get(label) ?? 0) + 1);
61
+ }
62
+ return Array.from(counts.entries())
63
+ .map(([label, count]) => `${count} ${label}`)
64
+ .join(', ');
65
+ }
66
+ // ---------------------------------------------------------------------------
67
+ // renderScoreboard
68
+ // ---------------------------------------------------------------------------
69
+ /**
70
+ * Compact all-tasks view.
71
+ *
72
+ * Resource URI: `task:///all`
73
+ */
74
+ export function renderScoreboard(tasks) {
75
+ const sorted = [...tasks].sort((a, b) => sortPriority(a.status) - sortPriority(b.status));
76
+ const summary = tasks.length > 0 ? ` (${statusSummary(tasks)})` : '';
77
+ const header = `tasks -- ${tasks.length} total${summary}`;
78
+ const lines = [header, ''];
79
+ for (const task of sorted) {
80
+ const badge = mapToDisplay(task.status);
81
+ const prompt = truncatePrompt(task.prompt);
82
+ const elapsed = formatElapsed(task.createdAt, task.updatedAt);
83
+ lines.push(`${badge} ${task.id} -- "${prompt}" (${elapsed})`);
84
+ }
85
+ return lines.join('\n');
86
+ }
87
+ // ---------------------------------------------------------------------------
88
+ // renderTaskDetail
89
+ // ---------------------------------------------------------------------------
90
+ /**
91
+ * Full task detail view as markdown.
92
+ *
93
+ * Resource URI: `task:///{id}`
94
+ */
95
+ export function renderTaskDetail(task) {
96
+ const badge = mapToDisplay(task.status);
97
+ const lines = [
98
+ `# Task: ${task.id} -- ${truncatePrompt(task.prompt)}`,
99
+ '',
100
+ '| Field | Value |',
101
+ '|---|---|',
102
+ `| **Status** | ${badge} \`${task.status}\` |`,
103
+ `| **Provider** | ${task.provider} |`,
104
+ ];
105
+ if (task.sessionId) {
106
+ lines.push(`| **Session ID** | \`${task.sessionId}\` |`);
107
+ }
108
+ if (task.model) {
109
+ lines.push(`| **Model** | \`${task.model}\` |`);
110
+ }
111
+ lines.push(`| **Task type** | ${task.taskType} |`);
112
+ lines.push(`| **CWD** | \`${task.cwd}\` |`);
113
+ lines.push(`| **Created** | ${task.createdAt} |`);
114
+ if (task.startedAt) {
115
+ lines.push(`| **Started** | ${task.startedAt} |`);
116
+ }
117
+ if (task.completedAt) {
118
+ lines.push(`| **Completed** | ${task.completedAt} |`);
119
+ }
120
+ lines.push(`| **Updated** | ${task.updatedAt} |`);
121
+ lines.push('');
122
+ // Pending questions
123
+ if (task.pendingQuestions.length > 0) {
124
+ lines.push('## Pending Question', '');
125
+ for (const q of task.pendingQuestions) {
126
+ lines.push(formatPendingQuestion(q));
127
+ }
128
+ lines.push('');
129
+ }
130
+ // Error
131
+ if (task.error) {
132
+ lines.push('## Error', '', `\`\`\`\n${task.error}\n\`\`\``, '');
133
+ }
134
+ // Last N output lines
135
+ if (task.output.length > 0) {
136
+ const tail = task.output.slice(-DETAIL_OUTPUT_LINES);
137
+ lines.push('## Recent Output', '');
138
+ for (const line of tail) {
139
+ lines.push(line);
140
+ }
141
+ lines.push('');
142
+ }
143
+ return lines.join('\n');
144
+ }
145
+ function formatPendingQuestion(q) {
146
+ switch (q.type) {
147
+ case 'user_input':
148
+ return q.questions.map((iq) => `- **${iq.text}**${iq.options ? ` (options: ${iq.options.join(', ')})` : ''}`).join('\n');
149
+ case 'command_approval':
150
+ return `- **Command approval**: \`${q.command}\``;
151
+ case 'file_approval':
152
+ return `- **File approval**: ${q.fileChanges.map((f) => f.path).join(', ')}`;
153
+ case 'elicitation':
154
+ return `- **Elicitation**: ${q.message}`;
155
+ case 'dynamic_tool':
156
+ return `- **Dynamic tool**: \`${q.toolName}\``;
157
+ }
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // renderSummaryLog
161
+ // ---------------------------------------------------------------------------
162
+ /**
163
+ * Last 20 lines from task.output.
164
+ *
165
+ * Resource URI: `task:///{id}/log`
166
+ */
167
+ export function renderSummaryLog(task) {
168
+ if (task.output.length === 0) {
169
+ return `# Log: ${task.id}\n\nNo output yet.`;
170
+ }
171
+ const tail = task.output.slice(-SUMMARY_LOG_LINES);
172
+ const header = `# Log: ${task.id} (last ${tail.length} of ${task.output.length} lines)`;
173
+ return [header, '', ...tail].join('\n');
174
+ }
175
+ // ---------------------------------------------------------------------------
176
+ // renderVerboseLog
177
+ // ---------------------------------------------------------------------------
178
+ /**
179
+ * All lines from task.output (no truncation).
180
+ *
181
+ * Resource URI: `task:///{id}/log.verbose`
182
+ */
183
+ export function renderVerboseLog(task) {
184
+ if (task.output.length === 0) {
185
+ return `# Verbose Log: ${task.id}\n\nNo output yet.`;
186
+ }
187
+ const header = `# Verbose Log: ${task.id} (${task.output.length} lines)`;
188
+ return [header, '', ...task.output].join('\n');
189
+ }
190
+ //# sourceMappingURL=resource-renderers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-renderers.js","sourceRoot":"","sources":["../../../src/mcp/resource-renderers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { TaskState, PendingQuestion } from '../task/task-state.js';
2
+ import type { WireState } from '../task/wire-state-mapper.js';
3
+ /**
4
+ * Response shape for `tasks/get` — a single task's status snapshot.
5
+ */
6
+ export interface TasksGetResponse {
7
+ taskId: string;
8
+ status: WireState;
9
+ pollFrequency: number;
10
+ keepAlive?: number;
11
+ metadata?: {
12
+ pendingQuestion?: PendingQuestion;
13
+ };
14
+ error?: string;
15
+ }
16
+ /**
17
+ * List item shape for `tasks/list` — lightweight summary per task.
18
+ */
19
+ export interface TasksListItem {
20
+ taskId: string;
21
+ status: WireState;
22
+ pollFrequency: number;
23
+ createdAt: string;
24
+ lastUpdatedAt: string;
25
+ }
26
+ /**
27
+ * Returns the recommended poll interval in milliseconds based on task status.
28
+ *
29
+ * - WAITING_ANSWER → 2 000 ms (client should check frequently for input-required)
30
+ * - PENDING, RUNNING → 5 000 ms
31
+ * - All others (WAITING, RATE_LIMITED, terminal) → 30 000 ms
32
+ */
33
+ export declare function computePollFrequency(task: TaskState): number;
34
+ /**
35
+ * Builds a SEP-1686 `tasks/get` response from internal TaskState.
36
+ *
37
+ * - Maps internal status to wire state via `mapToWireState`
38
+ * - Computes poll frequency via `computePollFrequency`
39
+ * - Includes `keepAlive` from task if present
40
+ * - Includes first pending question in metadata when status is
41
+ * WAITING_ANSWER and the queue is non-empty
42
+ * - Includes error string if present
43
+ */
44
+ export declare function buildTasksGetResponse(task: TaskState): TasksGetResponse;
45
+ /**
46
+ * Builds a SEP-1686 `tasks/list` response.
47
+ *
48
+ * - Filters by wire status if `statusFilter` is provided
49
+ * - Sorts by `createdAt` descending (newest first)
50
+ * - Paginates with page size 50; cursor is a string-encoded start index
51
+ * - Returns `nextCursor` if more pages exist
52
+ */
53
+ export declare function buildTasksListResponse(tasks: TaskState[], cursor?: string, statusFilter?: WireState): {
54
+ tasks: TasksListItem[];
55
+ nextCursor?: string;
56
+ };
@@ -0,0 +1,98 @@
1
+ import { TaskStatus } from '../task/task-state.js';
2
+ import { mapToWireState } from '../task/wire-state-mapper.js';
3
+ // ---------------------------------------------------------------------------
4
+ // Poll frequency computation
5
+ // ---------------------------------------------------------------------------
6
+ /**
7
+ * Returns the recommended poll interval in milliseconds based on task status.
8
+ *
9
+ * - WAITING_ANSWER → 2 000 ms (client should check frequently for input-required)
10
+ * - PENDING, RUNNING → 5 000 ms
11
+ * - All others (WAITING, RATE_LIMITED, terminal) → 30 000 ms
12
+ */
13
+ export function computePollFrequency(task) {
14
+ switch (task.status) {
15
+ case TaskStatus.WAITING_ANSWER:
16
+ return 2000;
17
+ case TaskStatus.PENDING:
18
+ case TaskStatus.RUNNING:
19
+ return 5000;
20
+ default:
21
+ return 30000;
22
+ }
23
+ }
24
+ // ---------------------------------------------------------------------------
25
+ // tasks/get response builder
26
+ // ---------------------------------------------------------------------------
27
+ /**
28
+ * Builds a SEP-1686 `tasks/get` response from internal TaskState.
29
+ *
30
+ * - Maps internal status to wire state via `mapToWireState`
31
+ * - Computes poll frequency via `computePollFrequency`
32
+ * - Includes `keepAlive` from task if present
33
+ * - Includes first pending question in metadata when status is
34
+ * WAITING_ANSWER and the queue is non-empty
35
+ * - Includes error string if present
36
+ */
37
+ export function buildTasksGetResponse(task) {
38
+ const status = mapToWireState(task.status);
39
+ const pollFrequency = computePollFrequency(task);
40
+ const hasPendingQuestion = task.status === TaskStatus.WAITING_ANSWER &&
41
+ task.pendingQuestions.length > 0;
42
+ const response = {
43
+ taskId: task.id,
44
+ status,
45
+ pollFrequency,
46
+ };
47
+ if (task.keepAlive !== undefined) {
48
+ response.keepAlive = task.keepAlive;
49
+ }
50
+ if (hasPendingQuestion) {
51
+ const firstQuestion = task.pendingQuestions[0];
52
+ if (firstQuestion !== undefined) {
53
+ response.metadata = { pendingQuestion: firstQuestion };
54
+ }
55
+ }
56
+ if (task.error !== undefined) {
57
+ response.error = task.error;
58
+ }
59
+ return response;
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // tasks/list response builder
63
+ // ---------------------------------------------------------------------------
64
+ const PAGE_SIZE = 50;
65
+ /**
66
+ * Builds a SEP-1686 `tasks/list` response.
67
+ *
68
+ * - Filters by wire status if `statusFilter` is provided
69
+ * - Sorts by `createdAt` descending (newest first)
70
+ * - Paginates with page size 50; cursor is a string-encoded start index
71
+ * - Returns `nextCursor` if more pages exist
72
+ */
73
+ export function buildTasksListResponse(tasks, cursor, statusFilter) {
74
+ // 1. Filter by wire status if requested
75
+ const filtered = statusFilter
76
+ ? tasks.filter(t => mapToWireState(t.status) === statusFilter)
77
+ : [...tasks];
78
+ // 2. Sort by createdAt descending
79
+ filtered.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
80
+ // 3. Paginate
81
+ const start = cursor ? parseInt(cursor, 10) : 0;
82
+ const page = filtered.slice(start, start + PAGE_SIZE);
83
+ const nextStart = start + PAGE_SIZE;
84
+ // 4. Map to list items
85
+ const items = page.map(t => ({
86
+ taskId: t.id,
87
+ status: mapToWireState(t.status),
88
+ pollFrequency: computePollFrequency(t),
89
+ createdAt: t.createdAt,
90
+ lastUpdatedAt: t.updatedAt,
91
+ }));
92
+ const result = { tasks: items };
93
+ if (nextStart < filtered.length) {
94
+ result.nextCursor = String(nextStart);
95
+ }
96
+ return result;
97
+ }
98
+ //# sourceMappingURL=sep1686-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sep1686-handlers.js","sourceRoot":"","sources":["../../../src/mcp/sep1686-handlers.ts"],"names":[],"mappings":"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"}
@@ -148,6 +148,158 @@ declare const waitSchema: z.ZodObject<{
148
148
  timeout_ms?: number | undefined;
149
149
  poll_interval_ms?: number | undefined;
150
150
  }>;
151
+ declare const spawnTaskSchema: z.ZodObject<{
152
+ prompt: z.ZodString;
153
+ task_type: z.ZodDefault<z.ZodEnum<["coder", "planner", "tester", "researcher", "general"]>>;
154
+ provider: z.ZodOptional<z.ZodEnum<["codex", "copilot", "claude-cli"]>>;
155
+ model: z.ZodOptional<z.ZodString>;
156
+ cwd: z.ZodOptional<z.ZodString>;
157
+ timeout_ms: z.ZodOptional<z.ZodNumber>;
158
+ keep_alive: z.ZodOptional<z.ZodNumber>;
159
+ labels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
160
+ depends_on: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
161
+ developer_instructions: z.ZodOptional<z.ZodString>;
162
+ context_files: z.ZodOptional<z.ZodArray<z.ZodObject<{
163
+ path: z.ZodString;
164
+ description: z.ZodOptional<z.ZodString>;
165
+ }, "strip", z.ZodTypeAny, {
166
+ path: string;
167
+ description?: string | undefined;
168
+ }, {
169
+ path: string;
170
+ description?: string | undefined;
171
+ }>, "many">>;
172
+ }, "strip", z.ZodTypeAny, {
173
+ prompt: string;
174
+ task_type: "coder" | "planner" | "tester" | "researcher" | "general";
175
+ model?: string | undefined;
176
+ cwd?: string | undefined;
177
+ developer_instructions?: string | undefined;
178
+ timeout_ms?: number | undefined;
179
+ provider?: "codex" | "copilot" | "claude-cli" | undefined;
180
+ keep_alive?: number | undefined;
181
+ labels?: string[] | undefined;
182
+ depends_on?: string[] | undefined;
183
+ context_files?: {
184
+ path: string;
185
+ description?: string | undefined;
186
+ }[] | undefined;
187
+ }, {
188
+ prompt: string;
189
+ model?: string | undefined;
190
+ cwd?: string | undefined;
191
+ developer_instructions?: string | undefined;
192
+ timeout_ms?: number | undefined;
193
+ task_type?: "coder" | "planner" | "tester" | "researcher" | "general" | undefined;
194
+ provider?: "codex" | "copilot" | "claude-cli" | undefined;
195
+ keep_alive?: number | undefined;
196
+ labels?: string[] | undefined;
197
+ depends_on?: string[] | undefined;
198
+ context_files?: {
199
+ path: string;
200
+ description?: string | undefined;
201
+ }[] | undefined;
202
+ }>;
203
+ declare const waitTaskSchema: z.ZodObject<{
204
+ task_id: z.ZodString;
205
+ timeout_ms: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
206
+ poll_interval_ms: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
207
+ }, "strip", z.ZodTypeAny, {
208
+ task_id: string;
209
+ timeout_ms?: number | undefined;
210
+ poll_interval_ms?: number | undefined;
211
+ }, {
212
+ task_id: string;
213
+ timeout_ms?: number | undefined;
214
+ poll_interval_ms?: number | undefined;
215
+ }>;
216
+ declare const respondTaskSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
217
+ task_id: z.ZodString;
218
+ type: z.ZodLiteral<"user_input">;
219
+ answers: z.ZodRecord<z.ZodString, z.ZodString>;
220
+ }, "strip", z.ZodTypeAny, {
221
+ type: "user_input";
222
+ answers: Record<string, string>;
223
+ task_id: string;
224
+ }, {
225
+ type: "user_input";
226
+ answers: Record<string, string>;
227
+ task_id: string;
228
+ }>, z.ZodObject<{
229
+ task_id: z.ZodString;
230
+ type: z.ZodLiteral<"command_approval">;
231
+ decision: z.ZodEnum<["accept", "reject"]>;
232
+ }, "strip", z.ZodTypeAny, {
233
+ type: "command_approval";
234
+ decision: "accept" | "reject";
235
+ task_id: string;
236
+ }, {
237
+ type: "command_approval";
238
+ decision: "accept" | "reject";
239
+ task_id: string;
240
+ }>, z.ZodObject<{
241
+ task_id: z.ZodString;
242
+ type: z.ZodLiteral<"file_approval">;
243
+ decision: z.ZodEnum<["accept", "reject"]>;
244
+ }, "strip", z.ZodTypeAny, {
245
+ type: "file_approval";
246
+ decision: "accept" | "reject";
247
+ task_id: string;
248
+ }, {
249
+ type: "file_approval";
250
+ decision: "accept" | "reject";
251
+ task_id: string;
252
+ }>, z.ZodObject<{
253
+ task_id: z.ZodString;
254
+ type: z.ZodLiteral<"elicitation">;
255
+ action: z.ZodEnum<["accept", "decline"]>;
256
+ content: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
257
+ }, "strip", z.ZodTypeAny, {
258
+ type: "elicitation";
259
+ action: "accept" | "decline";
260
+ task_id: string;
261
+ content?: Record<string, unknown> | undefined;
262
+ }, {
263
+ type: "elicitation";
264
+ action: "accept" | "decline";
265
+ task_id: string;
266
+ content?: Record<string, unknown> | undefined;
267
+ }>, z.ZodObject<{
268
+ task_id: z.ZodString;
269
+ type: z.ZodLiteral<"dynamic_tool">;
270
+ result: z.ZodOptional<z.ZodString>;
271
+ error: z.ZodOptional<z.ZodString>;
272
+ }, "strip", z.ZodTypeAny, {
273
+ type: "dynamic_tool";
274
+ task_id: string;
275
+ result?: string | undefined;
276
+ error?: string | undefined;
277
+ }, {
278
+ type: "dynamic_tool";
279
+ task_id: string;
280
+ result?: string | undefined;
281
+ error?: string | undefined;
282
+ }>]>;
283
+ declare const messageTaskSchema: z.ZodObject<{
284
+ task_id: z.ZodString;
285
+ message: z.ZodString;
286
+ model: z.ZodOptional<z.ZodString>;
287
+ }, "strip", z.ZodTypeAny, {
288
+ message: string;
289
+ task_id: string;
290
+ model?: string | undefined;
291
+ }, {
292
+ message: string;
293
+ task_id: string;
294
+ model?: string | undefined;
295
+ }>;
296
+ declare const cancelTaskSchema: z.ZodObject<{
297
+ task_id: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>;
298
+ }, "strip", z.ZodTypeAny, {
299
+ task_id: string | string[];
300
+ }, {
301
+ task_id: string | string[];
302
+ }>;
151
303
  export interface ToolDefinition {
152
304
  name: string;
153
305
  description: string;
@@ -174,4 +326,9 @@ export type TurnInterruptInput = z.infer<typeof turnInterruptSchema>;
174
326
  export type RequestListInput = z.infer<typeof requestListSchema>;
175
327
  export type RequestRespondInput = z.infer<typeof requestRespondSchema>;
176
328
  export type WaitInput = z.infer<typeof waitSchema>;
329
+ export type SpawnTaskInput = z.infer<typeof spawnTaskSchema>;
330
+ export type WaitTaskInput = z.infer<typeof waitTaskSchema>;
331
+ export type RespondTaskInput = z.infer<typeof respondTaskSchema>;
332
+ export type MessageTaskInput = z.infer<typeof messageTaskSchema>;
333
+ export type CancelTaskInput = z.infer<typeof cancelTaskSchema>;
177
334
  export {};