mcp-codex-subagent 2.0.8 → 2.0.10

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 (111) hide show
  1. package/dist/event/bus.d.ts +53 -0
  2. package/dist/event/bus.d.ts.map +1 -0
  3. package/dist/event/bus.js +94 -0
  4. package/dist/event/bus.js.map +1 -0
  5. package/dist/event/throttle.d.ts +36 -0
  6. package/dist/event/throttle.d.ts.map +1 -0
  7. package/dist/event/throttle.js +66 -0
  8. package/dist/event/throttle.js.map +1 -0
  9. package/dist/index.js +32 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/process/event-parser.d.ts +37 -0
  12. package/dist/process/event-parser.d.ts.map +1 -0
  13. package/dist/process/event-parser.js +141 -0
  14. package/dist/process/event-parser.js.map +1 -0
  15. package/dist/process/runner.d.ts +48 -0
  16. package/dist/process/runner.d.ts.map +1 -0
  17. package/dist/process/runner.js +227 -0
  18. package/dist/process/runner.js.map +1 -0
  19. package/dist/process/types.d.ts +74 -0
  20. package/dist/process/types.d.ts.map +1 -0
  21. package/dist/process/types.js +5 -0
  22. package/dist/process/types.js.map +1 -0
  23. package/dist/server.d.ts.map +1 -1
  24. package/dist/server.js +128 -36
  25. package/dist/server.js.map +1 -1
  26. package/dist/services/account-rotator.d.ts +28 -0
  27. package/dist/services/account-rotator.d.ts.map +1 -0
  28. package/dist/services/account-rotator.js +216 -0
  29. package/dist/services/account-rotator.js.map +1 -0
  30. package/dist/services/output-file.d.ts.map +1 -1
  31. package/dist/services/output-file.js +80 -36
  32. package/dist/services/output-file.js.map +1 -1
  33. package/dist/services/task-manager.d.ts +6 -0
  34. package/dist/services/task-manager.d.ts.map +1 -1
  35. package/dist/services/task-manager.js +24 -1
  36. package/dist/services/task-manager.js.map +1 -1
  37. package/dist/services/template-init.d.ts +10 -0
  38. package/dist/services/template-init.d.ts.map +1 -0
  39. package/dist/services/template-init.js +41 -0
  40. package/dist/services/template-init.js.map +1 -0
  41. package/dist/session/file-storage.d.ts +27 -0
  42. package/dist/session/file-storage.d.ts.map +1 -0
  43. package/dist/session/file-storage.js +281 -0
  44. package/dist/session/file-storage.js.map +1 -0
  45. package/dist/session/storage.js +1 -1
  46. package/dist/session/storage.js.map +1 -1
  47. package/dist/task/state-machine.d.ts +27 -0
  48. package/dist/task/state-machine.d.ts.map +1 -0
  49. package/dist/task/state-machine.js +59 -0
  50. package/dist/task/state-machine.js.map +1 -0
  51. package/dist/task/store.d.ts +91 -0
  52. package/dist/task/store.d.ts.map +1 -0
  53. package/dist/task/store.js +317 -0
  54. package/dist/task/store.js.map +1 -0
  55. package/dist/task/types.d.ts +72 -0
  56. package/dist/task/types.d.ts.map +1 -0
  57. package/dist/task/types.js +13 -0
  58. package/dist/task/types.js.map +1 -0
  59. package/dist/templates/index.d.ts +16 -0
  60. package/dist/templates/index.d.ts.map +1 -1
  61. package/dist/templates/index.js +57 -5
  62. package/dist/templates/index.js.map +1 -1
  63. package/dist/tools/definitions.d.ts +5 -1
  64. package/dist/tools/definitions.d.ts.map +1 -1
  65. package/dist/tools/definitions.js +253 -179
  66. package/dist/tools/definitions.js.map +1 -1
  67. package/dist/tools/description-builder.d.ts +18 -0
  68. package/dist/tools/description-builder.d.ts.map +1 -0
  69. package/dist/tools/description-builder.js +88 -0
  70. package/dist/tools/description-builder.js.map +1 -0
  71. package/dist/tools/handlers.d.ts +19 -17
  72. package/dist/tools/handlers.d.ts.map +1 -1
  73. package/dist/tools/handlers.js +287 -341
  74. package/dist/tools/handlers.js.map +1 -1
  75. package/dist/types.d.ts +5 -12
  76. package/dist/types.d.ts.map +1 -1
  77. package/dist/types.js +7 -10
  78. package/dist/types.js.map +1 -1
  79. package/dist/utils/ring-buffer.d.ts +41 -0
  80. package/dist/utils/ring-buffer.d.ts.map +1 -0
  81. package/dist/utils/ring-buffer.js +83 -0
  82. package/dist/utils/ring-buffer.js.map +1 -0
  83. package/dist/wave/dag.d.ts +32 -0
  84. package/dist/wave/dag.d.ts.map +1 -0
  85. package/dist/wave/dag.js +186 -0
  86. package/dist/wave/dag.js.map +1 -0
  87. package/dist/wave/git.d.ts +57 -0
  88. package/dist/wave/git.d.ts.map +1 -0
  89. package/dist/wave/git.js +227 -0
  90. package/dist/wave/git.js.map +1 -0
  91. package/dist/wave/orchestrator.d.ts +15 -0
  92. package/dist/wave/orchestrator.d.ts.map +1 -0
  93. package/dist/wave/orchestrator.js +565 -0
  94. package/dist/wave/orchestrator.js.map +1 -0
  95. package/dist/wave/progress.d.ts +51 -0
  96. package/dist/wave/progress.d.ts.map +1 -0
  97. package/dist/wave/progress.js +176 -0
  98. package/dist/wave/progress.js.map +1 -0
  99. package/dist/wave/registry.d.ts +66 -0
  100. package/dist/wave/registry.d.ts.map +1 -0
  101. package/dist/wave/registry.js +340 -0
  102. package/dist/wave/registry.js.map +1 -0
  103. package/dist/wave/semaphore.d.ts +42 -0
  104. package/dist/wave/semaphore.d.ts.map +1 -0
  105. package/dist/wave/semaphore.js +119 -0
  106. package/dist/wave/semaphore.js.map +1 -0
  107. package/dist/wave/types.d.ts +197 -0
  108. package/dist/wave/types.d.ts.map +1 -0
  109. package/dist/wave/types.js +147 -0
  110. package/dist/wave/types.js.map +1 -0
  111. package/package.json +15 -15
@@ -0,0 +1,317 @@
1
+ /**
2
+ * TaskStore — single authoritative source for task state.
3
+ *
4
+ * Module-level singleton that replaces the old task-manager.ts.
5
+ * Uses explicit state machine, ring buffer for output, and
6
+ * deterministic cleanup on terminal transitions.
7
+ */
8
+ import { generateTaskId, normalizeTaskId } from '../utils/task-id-generator.js';
9
+ import { RingBuffer } from '../utils/ring-buffer.js';
10
+ import { createOutputFile, appendToOutputFile, finalizeOutputFile, } from '../services/output-file.js';
11
+ import { isValidTransition, isTerminalState } from './state-machine.js';
12
+ // --- Configuration (env-driven with defaults) ---
13
+ function envInt(name, fallback) {
14
+ const raw = process.env[name];
15
+ if (!raw)
16
+ return fallback;
17
+ const parsed = parseInt(raw, 10);
18
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
19
+ }
20
+ const MAX_TASKS = envInt('CODEX_MAX_TASKS', 100);
21
+ const MAX_OUTPUT_LINES = envInt('CODEX_MAX_OUTPUT_LINES', 2000);
22
+ const STALL_THRESHOLD_MS = 10 * 60 * 1000; // 10 minutes
23
+ const FORCE_KILL_GRACE_MS = 5000;
24
+ // --- TaskStore Class ---
25
+ export class TaskStore {
26
+ tasks = new Map();
27
+ maxTasks;
28
+ maxOutputLines;
29
+ constructor(maxTasks = MAX_TASKS, maxOutputLines = MAX_OUTPUT_LINES) {
30
+ this.maxTasks = maxTasks;
31
+ this.maxOutputLines = maxOutputLines;
32
+ }
33
+ // --- Task Creation ---
34
+ /**
35
+ * Create a new task. Returns the task record.
36
+ * Task starts in 'created' state.
37
+ */
38
+ async createTask(opts) {
39
+ this.evictIfNeeded();
40
+ const id = this.generateUniqueId();
41
+ const outputFilePath = await createOutputFile(opts.cwd, id);
42
+ const task = {
43
+ id,
44
+ state: 'created',
45
+ prompt: opts.prompt.length > 200
46
+ ? opts.prompt.slice(0, 200) + '...'
47
+ : opts.prompt,
48
+ role: opts.role,
49
+ specialization: opts.specialization,
50
+ model: opts.model,
51
+ cwd: opts.cwd,
52
+ startTime: new Date().toISOString(),
53
+ outputFilePath: outputFilePath ?? undefined,
54
+ output: new RingBuffer(this.maxOutputLines),
55
+ outputLines: 0,
56
+ };
57
+ this.tasks.set(normalizeTaskId(id), task);
58
+ return task;
59
+ }
60
+ // --- State Transitions ---
61
+ /**
62
+ * Transition a task to a new state.
63
+ * Returns true on success, false if the transition is invalid.
64
+ *
65
+ * On terminal transitions, runs the cleanup procedure.
66
+ */
67
+ async transitionTo(id, newState, options) {
68
+ const key = normalizeTaskId(id);
69
+ const task = this.tasks.get(key);
70
+ if (!task)
71
+ return false;
72
+ if (!isValidTransition(task.state, newState))
73
+ return false;
74
+ task.state = newState;
75
+ if (options?.error) {
76
+ task.error = options.error;
77
+ }
78
+ if (options?.metadata) {
79
+ task.metadata = { ...task.metadata, ...options.metadata };
80
+ }
81
+ if (isTerminalState(newState)) {
82
+ task.endTime = new Date().toISOString();
83
+ await this.cleanupTerminal(task);
84
+ }
85
+ return true;
86
+ }
87
+ // --- Process Management ---
88
+ /**
89
+ * Set the process reference and PID on a task.
90
+ */
91
+ setProcess(id, proc) {
92
+ const key = normalizeTaskId(id);
93
+ const task = this.tasks.get(key);
94
+ if (!task)
95
+ return;
96
+ task.process = proc;
97
+ if (proc.pid) {
98
+ task.pid = proc.pid;
99
+ }
100
+ }
101
+ /**
102
+ * Get the process reference for a task.
103
+ */
104
+ getProcess(id) {
105
+ const key = normalizeTaskId(id);
106
+ return this.tasks.get(key)?.process;
107
+ }
108
+ // --- Output ---
109
+ /**
110
+ * Append an output line to a task's ring buffer and output file.
111
+ */
112
+ async appendOutput(id, line) {
113
+ const key = normalizeTaskId(id);
114
+ const task = this.tasks.get(key);
115
+ if (!task)
116
+ return;
117
+ task.output.push(line);
118
+ task.outputLines++;
119
+ if (task.outputFilePath) {
120
+ await appendToOutputFile(task.cwd, task.id, line);
121
+ }
122
+ }
123
+ // --- Queries ---
124
+ /**
125
+ * Get a task by ID.
126
+ */
127
+ getTask(id) {
128
+ return this.tasks.get(normalizeTaskId(id));
129
+ }
130
+ /**
131
+ * Get all tasks.
132
+ */
133
+ getAllTasks() {
134
+ return [...this.tasks.values()];
135
+ }
136
+ /**
137
+ * Get task counts by state.
138
+ */
139
+ getTaskCounts() {
140
+ const counts = {
141
+ created: 0,
142
+ running: 0,
143
+ completed: 0,
144
+ failed: 0,
145
+ cancelled: 0,
146
+ timed_out: 0,
147
+ total: 0,
148
+ };
149
+ for (const task of this.tasks.values()) {
150
+ counts[task.state] = (counts[task.state] || 0) + 1;
151
+ counts.total++;
152
+ }
153
+ return counts;
154
+ }
155
+ /**
156
+ * Convert a TaskRecord to a TaskSummary (for external APIs).
157
+ * Maps the new state field to the legacy 'status' field.
158
+ */
159
+ toSummary(task) {
160
+ // Map new states to legacy status names for backward compat
161
+ const statusMap = {
162
+ created: 'pending',
163
+ running: 'running',
164
+ completed: 'completed',
165
+ failed: 'failed',
166
+ cancelled: 'failed', // Map to 'failed' for backward compat
167
+ timed_out: 'failed', // Map to 'failed' for backward compat
168
+ };
169
+ return {
170
+ id: task.id,
171
+ status: statusMap[task.state],
172
+ prompt: task.prompt,
173
+ role: task.role,
174
+ specialization: task.specialization,
175
+ model: task.model,
176
+ cwd: task.cwd,
177
+ startTime: task.startTime,
178
+ endTime: task.endTime,
179
+ outputFilePath: task.outputFilePath,
180
+ outputLines: task.outputLines,
181
+ output: task.output.toArray(),
182
+ error: task.error,
183
+ metadata: task.metadata,
184
+ pid: task.pid,
185
+ };
186
+ }
187
+ // --- Cancellation ---
188
+ /**
189
+ * Cancel a single running task.
190
+ * Returns true if the task was successfully cancelled.
191
+ */
192
+ async cancelTask(id) {
193
+ return this.transitionTo(id, 'cancelled', {
194
+ error: 'Task cancelled',
195
+ });
196
+ }
197
+ /**
198
+ * Cancel all running tasks (for shutdown).
199
+ * Returns the number of tasks cancelled.
200
+ */
201
+ async cancelAll() {
202
+ let count = 0;
203
+ const promises = [];
204
+ for (const task of this.tasks.values()) {
205
+ if (task.state === 'running' || task.state === 'created') {
206
+ promises.push(this.cancelTask(task.id));
207
+ count++;
208
+ }
209
+ }
210
+ await Promise.allSettled(promises);
211
+ return count;
212
+ }
213
+ // --- Stall Detection ---
214
+ /**
215
+ * Get stall warning for a running task.
216
+ */
217
+ getStallWarning(task) {
218
+ if (task.state !== 'running')
219
+ return null;
220
+ const elapsed = Date.now() - new Date(task.startTime).getTime();
221
+ if (elapsed < STALL_THRESHOLD_MS)
222
+ return null;
223
+ const minutes = Math.floor(elapsed / 60000);
224
+ if (task.pid) {
225
+ return `Task running for >${minutes} min. If stalled, kill it: \`kill -9 ${task.pid}\``;
226
+ }
227
+ return `Task running for >${minutes} min and may be stalled.`;
228
+ }
229
+ // --- Testing ---
230
+ /**
231
+ * Reset all state (for testing only).
232
+ */
233
+ resetForTesting() {
234
+ // Clear timeout timers
235
+ for (const task of this.tasks.values()) {
236
+ if (task.timeoutTimer) {
237
+ clearTimeout(task.timeoutTimer);
238
+ }
239
+ }
240
+ this.tasks.clear();
241
+ }
242
+ // --- Private helpers ---
243
+ /**
244
+ * Cleanup procedure for terminal transitions.
245
+ */
246
+ async cleanupTerminal(task) {
247
+ // 1. Kill process if alive
248
+ if (task.process && task.process.exitCode === null) {
249
+ const proc = task.process;
250
+ try {
251
+ proc.kill('SIGTERM');
252
+ }
253
+ catch {
254
+ // May already be dead
255
+ }
256
+ // If graceful termination stalls, force-kill after a short grace period.
257
+ const timer = setTimeout(() => {
258
+ if (proc.exitCode === null) {
259
+ try {
260
+ proc.kill('SIGKILL');
261
+ }
262
+ catch {
263
+ // May already be dead
264
+ }
265
+ }
266
+ }, FORCE_KILL_GRACE_MS);
267
+ if (typeof timer.unref === 'function') {
268
+ timer.unref();
269
+ }
270
+ }
271
+ // 2. Clear timeout timer
272
+ if (task.timeoutTimer) {
273
+ clearTimeout(task.timeoutTimer);
274
+ task.timeoutTimer = undefined;
275
+ }
276
+ // 3. Finalize output file
277
+ if (task.outputFilePath) {
278
+ const status = task.state === 'completed' ? 'completed' : 'failed';
279
+ await finalizeOutputFile(task.cwd, task.id, status, task.error);
280
+ }
281
+ // 4. Clear process reference
282
+ task.process = undefined;
283
+ }
284
+ /**
285
+ * Generate a collision-free task ID.
286
+ */
287
+ generateUniqueId() {
288
+ let id = generateTaskId();
289
+ let attempts = 0;
290
+ while (this.tasks.has(normalizeTaskId(id)) && attempts < 20) {
291
+ id = generateTaskId();
292
+ attempts++;
293
+ }
294
+ if (this.tasks.has(normalizeTaskId(id))) {
295
+ id = `task-${Date.now()}-${Math.floor(Math.random() * 1000)}`;
296
+ }
297
+ return id;
298
+ }
299
+ /**
300
+ * Evict oldest terminal tasks if at capacity.
301
+ */
302
+ evictIfNeeded() {
303
+ if (this.tasks.size < this.maxTasks)
304
+ return;
305
+ const terminal = [...this.tasks.values()]
306
+ .filter((t) => isTerminalState(t.state))
307
+ .sort((a, b) => a.startTime.localeCompare(b.startTime));
308
+ for (const task of terminal) {
309
+ if (this.tasks.size < this.maxTasks)
310
+ break;
311
+ this.tasks.delete(normalizeTaskId(task.id));
312
+ }
313
+ }
314
+ }
315
+ // --- Module-level singleton ---
316
+ export const taskStore = new TaskStore();
317
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/task/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Types for the task management module.
3
+ */
4
+ import type { ChildProcess } from 'child_process';
5
+ import type { RingBuffer } from '../utils/ring-buffer.js';
6
+ /**
7
+ * Task states. Terminal states: completed, failed, cancelled, timed_out.
8
+ * Pre-spawn failures/timeouts may transition directly from 'created' to terminal.
9
+ */
10
+ export type TaskState = 'created' | 'running' | 'completed' | 'failed' | 'cancelled' | 'timed_out';
11
+ /**
12
+ * Terminal states — no further transitions allowed.
13
+ */
14
+ export declare const TERMINAL_STATES: ReadonlySet<TaskState>;
15
+ /**
16
+ * A task record in the store.
17
+ */
18
+ export interface TaskRecord {
19
+ id: string;
20
+ state: TaskState;
21
+ prompt: string;
22
+ role?: string;
23
+ specialization?: string;
24
+ model: string;
25
+ cwd: string;
26
+ startTime: string;
27
+ endTime?: string;
28
+ outputFilePath?: string;
29
+ /** Ring buffer for output lines (bounded, no garbage) */
30
+ output: RingBuffer<string>;
31
+ /** Total number of output lines received (including evicted) */
32
+ outputLines: number;
33
+ error?: string;
34
+ metadata?: Record<string, unknown>;
35
+ pid?: number;
36
+ /** Process reference (not serialized) */
37
+ process?: ChildProcess;
38
+ /** Timeout timer handle (cleared on terminal transition) */
39
+ timeoutTimer?: ReturnType<typeof setTimeout>;
40
+ }
41
+ /**
42
+ * Options for creating a new task.
43
+ */
44
+ export interface CreateTaskOptions {
45
+ prompt: string;
46
+ role?: string;
47
+ specialization?: string;
48
+ model: string;
49
+ cwd: string;
50
+ }
51
+ /**
52
+ * Lightweight task summary for external APIs.
53
+ * Mirrors the shape expected by existing MCP resource endpoints.
54
+ */
55
+ export interface TaskSummary {
56
+ id: string;
57
+ status: string;
58
+ prompt: string;
59
+ role?: string;
60
+ specialization?: string;
61
+ model: string;
62
+ cwd: string;
63
+ startTime: string;
64
+ endTime?: string;
65
+ outputFilePath?: string;
66
+ outputLines: number;
67
+ output: string[];
68
+ error?: string;
69
+ metadata?: Record<string, unknown>;
70
+ pid?: number;
71
+ }
72
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/task/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,WAAW,GACX,WAAW,CAAC;AAEhB;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,SAAS,CAKjD,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3B,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Types for the task management module.
3
+ */
4
+ /**
5
+ * Terminal states — no further transitions allowed.
6
+ */
7
+ export const TERMINAL_STATES = new Set([
8
+ 'completed',
9
+ 'failed',
10
+ 'cancelled',
11
+ 'timed_out',
12
+ ]);
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/task/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA2B,IAAI,GAAG,CAAC;IAC7D,WAAW;IACX,QAAQ;IACR,WAAW;IACX,WAAW;CACZ,CAAC,CAAC"}
@@ -6,6 +6,13 @@ export declare const TASK_TYPES: {
6
6
  };
7
7
  export type TaskType = keyof typeof TASK_TYPES;
8
8
  export declare const TASK_TYPE_IDS: TaskType[];
9
+ /**
10
+ * Filter TOOLKIT table rows based on MCP_ENABLED_TOOLS.
11
+ * Matches tool names in backticks at the start of table cells: | `tool_name` |
12
+ * Always keeps the header row and separator row.
13
+ * Also keeps non-table content untouched.
14
+ */
15
+ export declare function filterToolkitSection(content: string, enabledTools: Set<string>): string;
9
16
  export declare function isValidTaskType(type: string): type is TaskType;
10
17
  /**
11
18
  * Matryoshka template resolution:
@@ -19,4 +26,13 @@ export declare function isValidTaskType(type: string): type is TaskType;
19
26
  * When MCP_ENABLED_TOOLS is set, TOOLKIT table rows are filtered to only show enabled tools.
20
27
  */
21
28
  export declare function applyTemplate(taskType: TaskType, userPrompt: string, specialization?: string): string;
29
+ /**
30
+ * Discover available templates by scanning the templates directory.
31
+ * Returns roles and their available specializations.
32
+ * Adding a custom overlay file (e.g. coder-elixir.mdx) automatically appears here.
33
+ */
34
+ export declare function discoverAvailableTemplates(): {
35
+ roles: string[];
36
+ specializations: Record<string, string[]>;
37
+ };
22
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,UAAU,CAAC;AAC/C,eAAO,MAAM,aAAa,EAA8B,QAAQ,EAAE,CAAC;AAmGnE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,QAAQ,CAE9D;AAaD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CA6CR"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,UAAU,CAAC;AAC/C,eAAO,MAAM,aAAa,EAA8B,QAAQ,EAAE,CAAC;AAqBnE;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,MAAM,CAmER;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,QAAQ,CAE9D;AAaD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CA6CR;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI;IAC5C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC3C,CAiDA"}
@@ -1,7 +1,7 @@
1
- import { readFileSync } from 'fs';
2
- import { fileURLToPath } from 'url';
3
- import { dirname, join } from 'path';
4
- const templateDir = dirname(fileURLToPath(import.meta.url));
1
+ import { readFileSync, readdirSync, existsSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { CONFIG_HOME } from '../types.js';
4
+ const templateDir = join(CONFIG_HOME, 'templates');
5
5
  export const TASK_TYPES = {
6
6
  'super-coder': 'super coder for all coding tasks',
7
7
  'super-planner': 'super planner for all planning tasks',
@@ -31,7 +31,7 @@ function getEnabledTools() {
31
31
  * Always keeps the header row and separator row.
32
32
  * Also keeps non-table content untouched.
33
33
  */
34
- function filterToolkitSection(content, enabledTools) {
34
+ export function filterToolkitSection(content, enabledTools) {
35
35
  const lines = content.split('\n');
36
36
  const result = [];
37
37
  let inToolkitTable = false;
@@ -150,4 +150,56 @@ export function applyTemplate(taskType, userPrompt, specialization) {
150
150
  ? combined.replace('{{user_prompt}}', userPrompt)
151
151
  : `${combined}\n\n---\n\n${userPrompt}`;
152
152
  }
153
+ /**
154
+ * Discover available templates by scanning the templates directory.
155
+ * Returns roles and their available specializations.
156
+ * Adding a custom overlay file (e.g. coder-elixir.mdx) automatically appears here.
157
+ */
158
+ export function discoverAvailableTemplates() {
159
+ const roles = [];
160
+ const specializations = {};
161
+ if (!existsSync(templateDir)) {
162
+ return { roles, specializations };
163
+ }
164
+ // Scan for base role templates: super-*.mdx
165
+ try {
166
+ const files = readdirSync(templateDir);
167
+ for (const file of files) {
168
+ const match = file.match(/^super-(\w+)\.mdx$/);
169
+ if (match) {
170
+ roles.push(match[1]);
171
+ specializations[match[1]] = [];
172
+ }
173
+ }
174
+ }
175
+ catch {
176
+ // Directory may not exist yet
177
+ }
178
+ // Scan for overlay specializations: overlays/{role}-{spec}.mdx
179
+ const overlaysDir = join(templateDir, 'overlays');
180
+ if (existsSync(overlaysDir)) {
181
+ try {
182
+ const files = readdirSync(overlaysDir);
183
+ for (const file of files) {
184
+ const match = file.match(/^(\w+)-(\w+)\.mdx$/);
185
+ if (match) {
186
+ const role = match[1];
187
+ const spec = match[2];
188
+ if (specializations[role]) {
189
+ specializations[role].push(spec);
190
+ }
191
+ }
192
+ }
193
+ }
194
+ catch {
195
+ // Overlays dir may not exist
196
+ }
197
+ }
198
+ // Sort for deterministic output
199
+ roles.sort();
200
+ for (const role of Object.keys(specializations)) {
201
+ specializations[role].sort();
202
+ }
203
+ return { roles, specializations };
204
+ }
153
205
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
1
  import { type ToolDefinition } from '../types.js';
2
- export declare const toolDefinitions: ToolDefinition[];
2
+ /**
3
+ * Build tool definitions dynamically.
4
+ * Called after template init so discoverAvailableTemplates() can scan disk.
5
+ */
6
+ export declare function getToolDefinitions(): ToolDefinition[];
3
7
  //# sourceMappingURL=definitions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,eAAe,EAAE,cAAc,EA8M3C,CAAC"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAOzD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,EAAE,CAiSrD"}