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,41 @@
1
+ /**
2
+ * Template initialization — copies bundled templates to ~/.mcp-codex-subagent/templates/
3
+ * on first run. Skips if destination already exists (preserves user customizations).
4
+ */
5
+ import { existsSync, cpSync, mkdirSync } from 'fs';
6
+ import { join, dirname } from 'path';
7
+ import { fileURLToPath } from 'url';
8
+ import { CONFIG_HOME } from '../types.js';
9
+ const TEMPLATES_DEST = join(CONFIG_HOME, 'templates');
10
+ /**
11
+ * Resolve the path to bundled templates.
12
+ * Works for both dist/ (compiled) and src/ (tsx dev mode).
13
+ */
14
+ function getBundledTemplatesDir() {
15
+ const thisFile = fileURLToPath(import.meta.url);
16
+ const thisDir = dirname(thisFile);
17
+ // In dist/: thisDir = dist/services/ → templates at dist/templates/
18
+ // In src/: thisDir = src/services/ → templates at src/templates/
19
+ const parentDir = dirname(thisDir);
20
+ return join(parentDir, 'templates');
21
+ }
22
+ /**
23
+ * Initialize templates directory at ~/.mcp-codex-subagent/templates/.
24
+ * Copies bundled templates on first run only.
25
+ */
26
+ export async function initTemplates() {
27
+ if (existsSync(TEMPLATES_DEST)) {
28
+ return; // Already initialized — preserve user customizations
29
+ }
30
+ const bundledDir = getBundledTemplatesDir();
31
+ if (!existsSync(bundledDir)) {
32
+ console.error(`[template-init] Warning: bundled templates not found at ${bundledDir}`);
33
+ return;
34
+ }
35
+ // Ensure parent directory exists
36
+ mkdirSync(CONFIG_HOME, { recursive: true });
37
+ // Recursive copy
38
+ cpSync(bundledDir, TEMPLATES_DEST, { recursive: true });
39
+ console.error(`[template-init] Templates initialized at ${TEMPLATES_DEST}`);
40
+ }
41
+ //# sourceMappingURL=template-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-init.js","sourceRoot":"","sources":["../../src/services/template-init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAEtD;;;GAGG;AACH,SAAS,sBAAsB;IAC7B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAElC,oEAAoE;IACpE,mEAAmE;IACnE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,qDAAqD;IAC/D,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,EAAE,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CACX,2DAA2D,UAAU,EAAE,CACxE,CAAC;QACF,OAAO;IACT,CAAC;IAED,iCAAiC;IACjC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,iBAAiB;IACjB,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExD,OAAO,CAAC,KAAK,CAAC,4CAA4C,cAAc,EAAE,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * JSONL-based persistent session storage.
3
+ *
4
+ * Layout: ~/.mcp-codex-subagent/sessions/{sanitized-cwd}/{session-id}.jsonl
5
+ *
6
+ * JSONL format:
7
+ * Line 1: {"type":"meta","id":"...","createdAt":"...","codexConversationId":"..."}
8
+ * Line N: {"type":"turn","prompt":"...","response":"...","timestamp":"..."}
9
+ */
10
+ import type { SessionStorage, SessionData, ConversationTurn } from './storage.js';
11
+ export declare class FileSessionStorage implements SessionStorage {
12
+ private readonly maxSessionIdLength;
13
+ private readonly sessionIdPattern;
14
+ createSession(): string;
15
+ ensureSession(sessionId: string): void;
16
+ getSession(sessionId: string): SessionData | undefined;
17
+ updateSession(sessionId: string, data: Partial<SessionData>): void;
18
+ deleteSession(sessionId: string): boolean;
19
+ listSessions(): SessionData[];
20
+ addTurn(sessionId: string, turn: ConversationTurn): void;
21
+ resetSession(sessionId: string): void;
22
+ setCodexConversationId(sessionId: string, conversationId: string): void;
23
+ getCodexConversationId(sessionId: string): string | undefined;
24
+ private cleanupExpired;
25
+ private enforceMaxSessions;
26
+ }
27
+ //# sourceMappingURL=file-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-storage.d.ts","sourceRoot":"","sources":["../../src/session/file-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiBH,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,EACjB,MAAM,cAAc,CAAC;AA6GtB,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAO;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsB;IAEvD,aAAa,IAAI,MAAM;IAgBvB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA0BtC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAgBtD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAalE,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAOzC,YAAY,IAAI,WAAW,EAAE;IAqC7B,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAcxD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAerC,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IASvE,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAM7D,OAAO,CAAC,cAAc;IAuCtB,OAAO,CAAC,kBAAkB;CAU3B"}
@@ -0,0 +1,281 @@
1
+ /**
2
+ * JSONL-based persistent session storage.
3
+ *
4
+ * Layout: ~/.mcp-codex-subagent/sessions/{sanitized-cwd}/{session-id}.jsonl
5
+ *
6
+ * JSONL format:
7
+ * Line 1: {"type":"meta","id":"...","createdAt":"...","codexConversationId":"..."}
8
+ * Line N: {"type":"turn","prompt":"...","response":"...","timestamp":"..."}
9
+ */
10
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, appendFileSync, readdirSync, unlinkSync, statSync, rmSync, } from 'fs';
11
+ import { join } from 'path';
12
+ import { CONFIG_HOME } from '../types.js';
13
+ import { TOOLS } from '../types.js';
14
+ import { ValidationError } from '../errors.js';
15
+ const SESSIONS_ROOT = join(CONFIG_HOME, 'sessions');
16
+ const SESSION_TTL_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
17
+ const MAX_SESSIONS = 200;
18
+ // --- Path helpers ---
19
+ function sanitizeCwd(cwd) {
20
+ // /Users/foo/project → Users_foo_project
21
+ return cwd
22
+ .replace(/^\//, '')
23
+ .replace(/[/\\:]/g, '_')
24
+ .replace(/_{2,}/g, '_');
25
+ }
26
+ function getSessionDir(cwd) {
27
+ const sanitized = sanitizeCwd(cwd || process.cwd());
28
+ return join(SESSIONS_ROOT, sanitized);
29
+ }
30
+ function getSessionFilePath(sessionId, cwd) {
31
+ return join(getSessionDir(cwd), `${sessionId}.jsonl`);
32
+ }
33
+ // --- JSONL parsing ---
34
+ function parseSessionFile(filePath) {
35
+ if (!existsSync(filePath))
36
+ return null;
37
+ try {
38
+ const content = readFileSync(filePath, 'utf-8');
39
+ const lines = content.trim().split('\n').filter(Boolean);
40
+ if (lines.length === 0)
41
+ return null;
42
+ const meta = JSON.parse(lines[0]);
43
+ if (meta.type !== 'meta')
44
+ return null;
45
+ const turns = [];
46
+ for (let i = 1; i < lines.length; i++) {
47
+ try {
48
+ const line = JSON.parse(lines[i]);
49
+ if (line.type === 'turn') {
50
+ turns.push({
51
+ prompt: line.prompt,
52
+ response: line.response,
53
+ timestamp: new Date(line.timestamp),
54
+ });
55
+ }
56
+ }
57
+ catch {
58
+ // Skip malformed lines
59
+ }
60
+ }
61
+ return { meta, turns };
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ function writeMetaLine(filePath, meta) {
68
+ const dir = join(filePath, '..');
69
+ mkdirSync(dir, { recursive: true });
70
+ writeFileSync(filePath, JSON.stringify(meta) + '\n', 'utf-8');
71
+ }
72
+ function appendTurnLine(filePath, turn) {
73
+ appendFileSync(filePath, JSON.stringify(turn) + '\n', 'utf-8');
74
+ }
75
+ /**
76
+ * Rewrite the meta line in a session file (e.g. when codexConversationId changes).
77
+ */
78
+ function rewriteMeta(filePath, meta) {
79
+ if (!existsSync(filePath)) {
80
+ writeMetaLine(filePath, meta);
81
+ return;
82
+ }
83
+ const content = readFileSync(filePath, 'utf-8');
84
+ const lines = content.split('\n');
85
+ // Replace first line (meta) and keep rest
86
+ lines[0] = JSON.stringify(meta);
87
+ writeFileSync(filePath, lines.join('\n'), 'utf-8');
88
+ }
89
+ // --- FileSessionStorage ---
90
+ export class FileSessionStorage {
91
+ maxSessionIdLength = 256;
92
+ sessionIdPattern = /^[a-zA-Z0-9_-]+$/;
93
+ createSession() {
94
+ const sessionId = crypto.randomUUID();
95
+ const filePath = getSessionFilePath(sessionId);
96
+ const now = new Date().toISOString();
97
+ const meta = {
98
+ type: 'meta',
99
+ id: sessionId,
100
+ createdAt: now,
101
+ };
102
+ writeMetaLine(filePath, meta);
103
+ this.enforceMaxSessions();
104
+ return sessionId;
105
+ }
106
+ ensureSession(sessionId) {
107
+ if (!sessionId ||
108
+ sessionId.length > this.maxSessionIdLength ||
109
+ !this.sessionIdPattern.test(sessionId)) {
110
+ throw new ValidationError(TOOLS.SPAWN_SUBAGENT, 'Session ID must be 1-256 characters and contain only letters, numbers, hyphens, and underscores');
111
+ }
112
+ const filePath = getSessionFilePath(sessionId);
113
+ if (existsSync(filePath))
114
+ return;
115
+ const now = new Date().toISOString();
116
+ const meta = {
117
+ type: 'meta',
118
+ id: sessionId,
119
+ createdAt: now,
120
+ };
121
+ writeMetaLine(filePath, meta);
122
+ this.enforceMaxSessions();
123
+ }
124
+ getSession(sessionId) {
125
+ const filePath = getSessionFilePath(sessionId);
126
+ const parsed = parseSessionFile(filePath);
127
+ if (!parsed)
128
+ return undefined;
129
+ const stat = statSync(filePath);
130
+ return {
131
+ id: parsed.meta.id,
132
+ createdAt: new Date(parsed.meta.createdAt),
133
+ lastAccessedAt: stat.mtime,
134
+ turns: parsed.turns,
135
+ codexConversationId: parsed.meta.codexConversationId,
136
+ };
137
+ }
138
+ updateSession(sessionId, data) {
139
+ const filePath = getSessionFilePath(sessionId);
140
+ if (!existsSync(filePath))
141
+ return;
142
+ if (data.codexConversationId !== undefined) {
143
+ const parsed = parseSessionFile(filePath);
144
+ if (parsed) {
145
+ parsed.meta.codexConversationId = data.codexConversationId;
146
+ rewriteMeta(filePath, parsed.meta);
147
+ }
148
+ }
149
+ }
150
+ deleteSession(sessionId) {
151
+ const filePath = getSessionFilePath(sessionId);
152
+ if (!existsSync(filePath))
153
+ return false;
154
+ unlinkSync(filePath);
155
+ return true;
156
+ }
157
+ listSessions() {
158
+ this.cleanupExpired();
159
+ const sessions = [];
160
+ if (!existsSync(SESSIONS_ROOT))
161
+ return sessions;
162
+ for (const cwdDir of readdirSync(SESSIONS_ROOT)) {
163
+ const cwdPath = join(SESSIONS_ROOT, cwdDir);
164
+ try {
165
+ const stat = statSync(cwdPath);
166
+ if (!stat.isDirectory())
167
+ continue;
168
+ }
169
+ catch {
170
+ continue;
171
+ }
172
+ for (const file of readdirSync(cwdPath)) {
173
+ if (!file.endsWith('.jsonl'))
174
+ continue;
175
+ const filePath = join(cwdPath, file);
176
+ const parsed = parseSessionFile(filePath);
177
+ if (!parsed)
178
+ continue;
179
+ const fstat = statSync(filePath);
180
+ sessions.push({
181
+ id: parsed.meta.id,
182
+ createdAt: new Date(parsed.meta.createdAt),
183
+ lastAccessedAt: fstat.mtime,
184
+ turns: parsed.turns,
185
+ codexConversationId: parsed.meta.codexConversationId,
186
+ });
187
+ }
188
+ }
189
+ return sessions.sort((a, b) => b.lastAccessedAt.getTime() - a.lastAccessedAt.getTime());
190
+ }
191
+ addTurn(sessionId, turn) {
192
+ const filePath = getSessionFilePath(sessionId);
193
+ if (!existsSync(filePath))
194
+ return;
195
+ const turnLine = {
196
+ type: 'turn',
197
+ prompt: turn.prompt,
198
+ response: turn.response,
199
+ timestamp: turn.timestamp.toISOString(),
200
+ };
201
+ appendTurnLine(filePath, turnLine);
202
+ }
203
+ resetSession(sessionId) {
204
+ const filePath = getSessionFilePath(sessionId);
205
+ const parsed = parseSessionFile(filePath);
206
+ if (!parsed)
207
+ return;
208
+ // Rewrite file with just the meta line (clear conversation ID too)
209
+ const meta = {
210
+ type: 'meta',
211
+ id: parsed.meta.id,
212
+ createdAt: parsed.meta.createdAt,
213
+ };
214
+ writeMetaLine(filePath, meta);
215
+ }
216
+ setCodexConversationId(sessionId, conversationId) {
217
+ const filePath = getSessionFilePath(sessionId);
218
+ const parsed = parseSessionFile(filePath);
219
+ if (!parsed)
220
+ return;
221
+ parsed.meta.codexConversationId = conversationId;
222
+ rewriteMeta(filePath, parsed.meta);
223
+ }
224
+ getCodexConversationId(sessionId) {
225
+ const filePath = getSessionFilePath(sessionId);
226
+ const parsed = parseSessionFile(filePath);
227
+ return parsed?.meta.codexConversationId;
228
+ }
229
+ cleanupExpired() {
230
+ if (!existsSync(SESSIONS_ROOT))
231
+ return;
232
+ const now = Date.now();
233
+ for (const cwdDir of readdirSync(SESSIONS_ROOT)) {
234
+ const cwdPath = join(SESSIONS_ROOT, cwdDir);
235
+ try {
236
+ const stat = statSync(cwdPath);
237
+ if (!stat.isDirectory())
238
+ continue;
239
+ }
240
+ catch {
241
+ continue;
242
+ }
243
+ const files = readdirSync(cwdPath);
244
+ for (const file of files) {
245
+ if (!file.endsWith('.jsonl'))
246
+ continue;
247
+ const filePath = join(cwdPath, file);
248
+ try {
249
+ const fstat = statSync(filePath);
250
+ if (now - fstat.mtimeMs > SESSION_TTL_MS) {
251
+ unlinkSync(filePath);
252
+ }
253
+ }
254
+ catch {
255
+ // Ignore stat/unlink errors
256
+ }
257
+ }
258
+ // Remove empty directories
259
+ try {
260
+ const remaining = readdirSync(cwdPath);
261
+ if (remaining.length === 0) {
262
+ rmSync(cwdPath, { recursive: true, force: true });
263
+ }
264
+ }
265
+ catch {
266
+ // Ignore
267
+ }
268
+ }
269
+ }
270
+ enforceMaxSessions() {
271
+ const sessions = this.listSessions();
272
+ if (sessions.length <= MAX_SESSIONS)
273
+ return;
274
+ // Delete oldest sessions beyond limit
275
+ const toDelete = sessions.slice(MAX_SESSIONS);
276
+ for (const session of toDelete) {
277
+ this.deleteSession(session.id);
278
+ }
279
+ }
280
+ }
281
+ //# sourceMappingURL=file-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-storage.js","sourceRoot":"","sources":["../../src/session/file-storage.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ export class InMemorySessionStorage {
25
25
  if (!sessionId ||
26
26
  sessionId.length > this.maxSessionIdLength ||
27
27
  !this.sessionIdPattern.test(sessionId)) {
28
- throw new ValidationError(TOOLS.CODEX, 'Session ID must be 1-256 characters and contain only letters, numbers, hyphens, and underscores');
28
+ throw new ValidationError(TOOLS.SPAWN_SUBAGENT, 'Session ID must be 1-256 characters and contain only letters, numbers, hyphens, and underscores');
29
29
  }
30
30
  const existing = this.sessions.get(sessionId);
31
31
  if (existing) {
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/session/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AA6B/C,MAAM,OAAO,sBAAsB;IACzB,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IACjC,WAAW,GAAG,GAAG,CAAC;IAClB,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;IAC7C,kBAAkB,GAAG,GAAG,CAAC;IACzB,gBAAgB,GAAG,kBAAkB,CAAC;IAEvD,aAAa;QACX,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE;YAC3B,EAAE,EAAE,SAAS;YACb,SAAS,EAAE,GAAG;YACd,cAAc,EAAE,GAAG;YACnB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,IACE,CAAC,SAAS;YACV,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB;YAC1C,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EACtC,CAAC;YACD,MAAM,IAAI,eAAe,CACvB,KAAK,CAAC,KAAK,EACX,iGAAiG,CAClG,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE;YAC3B,EAAE,EAAE,SAAS;YACb,SAAS,EAAE,GAAG;YACd,cAAc,EAAE,GAAG;YACnB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa,CAAC,SAAiB,EAAE,IAA0B;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC7B,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,YAAY;QACV,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC5C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,CAClE,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,SAAiB,EAAE,IAAsB;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,yCAAyC;YACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;YACxC,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,sBAAsB,CAAC,SAAiB,EAAE,cAAsB;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,mBAAmB,GAAG,cAAc,CAAC;YAC7C,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,sBAAsB,CAAC,SAAiB;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,OAAO,EAAE,mBAAmB,CAAC;IACtC,CAAC;IAEO,sBAAsB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjD,IAAI,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE1D,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/session/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AA6B/C,MAAM,OAAO,sBAAsB;IACzB,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IACjC,WAAW,GAAG,GAAG,CAAC;IAClB,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;IAC7C,kBAAkB,GAAG,GAAG,CAAC;IACzB,gBAAgB,GAAG,kBAAkB,CAAC;IAEvD,aAAa;QACX,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE;YAC3B,EAAE,EAAE,SAAS;YACb,SAAS,EAAE,GAAG;YACd,cAAc,EAAE,GAAG;YACnB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,IACE,CAAC,SAAS;YACV,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB;YAC1C,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EACtC,CAAC;YACD,MAAM,IAAI,eAAe,CACvB,KAAK,CAAC,cAAc,EACpB,iGAAiG,CAClG,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE;YAC3B,EAAE,EAAE,SAAS;YACb,SAAS,EAAE,GAAG;YACd,cAAc,EAAE,GAAG;YACnB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa,CAAC,SAAiB,EAAE,IAA0B;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC7B,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,YAAY;QACV,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC5C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,CAClE,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,SAAiB,EAAE,IAAsB;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,yCAAyC;YACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;YACxC,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,sBAAsB,CAAC,SAAiB,EAAE,cAAsB;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,mBAAmB,GAAG,cAAc,CAAC;YAC7C,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,sBAAsB,CAAC,SAAiB;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,OAAO,EAAE,mBAAmB,CAAC;IACtC,CAAC;IAEO,sBAAsB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjD,IAAI,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE1D,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Task state machine — defines valid transitions and guards.
3
+ *
4
+ * States: created → running | failed | cancelled | timed_out
5
+ * running → completed | failed | cancelled | timed_out
6
+ *
7
+ * Terminal states reject all further transitions (first-writer-wins).
8
+ */
9
+ import { type TaskState } from './types.js';
10
+ /**
11
+ * Check whether a state transition is valid.
12
+ */
13
+ export declare function isValidTransition(from: TaskState, to: TaskState): boolean;
14
+ /**
15
+ * Check whether a state is terminal (no further transitions).
16
+ */
17
+ export declare function isTerminalState(state: TaskState): boolean;
18
+ /**
19
+ * Attempt a state transition. Returns the new state on success,
20
+ * or null if the transition is invalid.
21
+ */
22
+ export declare function transition(from: TaskState, to: TaskState): TaskState | null;
23
+ /**
24
+ * Map from terminal state to a human-readable reason.
25
+ */
26
+ export declare const TERMINAL_REASONS: Record<string, string>;
27
+ //# sourceMappingURL=state-machine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../../src/task/state-machine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,YAAY,CAAC;AAsB7D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAIzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEzD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CAG3E;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKnD,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Task state machine — defines valid transitions and guards.
3
+ *
4
+ * States: created → running | failed | cancelled | timed_out
5
+ * running → completed | failed | cancelled | timed_out
6
+ *
7
+ * Terminal states reject all further transitions (first-writer-wins).
8
+ */
9
+ import { TERMINAL_STATES } from './types.js';
10
+ /**
11
+ * Valid state transitions.
12
+ * Key = from state, Value = set of allowed target states.
13
+ */
14
+ const VALID_TRANSITIONS = new Map([
15
+ ['created', new Set(['running', 'failed', 'cancelled', 'timed_out'])],
16
+ [
17
+ 'running',
18
+ new Set(['completed', 'failed', 'cancelled', 'timed_out']),
19
+ ],
20
+ // Terminal states have no valid transitions
21
+ ['completed', new Set()],
22
+ ['failed', new Set()],
23
+ ['cancelled', new Set()],
24
+ ['timed_out', new Set()],
25
+ ]);
26
+ /**
27
+ * Check whether a state transition is valid.
28
+ */
29
+ export function isValidTransition(from, to) {
30
+ const allowed = VALID_TRANSITIONS.get(from);
31
+ if (!allowed)
32
+ return false;
33
+ return allowed.has(to);
34
+ }
35
+ /**
36
+ * Check whether a state is terminal (no further transitions).
37
+ */
38
+ export function isTerminalState(state) {
39
+ return TERMINAL_STATES.has(state);
40
+ }
41
+ /**
42
+ * Attempt a state transition. Returns the new state on success,
43
+ * or null if the transition is invalid.
44
+ */
45
+ export function transition(from, to) {
46
+ if (!isValidTransition(from, to))
47
+ return null;
48
+ return to;
49
+ }
50
+ /**
51
+ * Map from terminal state to a human-readable reason.
52
+ */
53
+ export const TERMINAL_REASONS = {
54
+ completed: 'Task completed successfully',
55
+ failed: 'Task failed',
56
+ cancelled: 'Task was cancelled',
57
+ timed_out: 'Task exceeded timeout',
58
+ };
59
+ //# sourceMappingURL=state-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../src/task/state-machine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAkB,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7D;;;GAGG;AACH,MAAM,iBAAiB,GAGnB,IAAI,GAAG,CAAC;IACV,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAgB,CAAC,CAAC;IACpF;QACE,SAAS;QACT,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAgB,CAAC;KAC1E;IACD,4CAA4C;IAC5C,CAAC,WAAW,EAAE,IAAI,GAAG,EAAa,CAAC;IACnC,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAa,CAAC;IAChC,CAAC,WAAW,EAAE,IAAI,GAAG,EAAa,CAAC;IACnC,CAAC,WAAW,EAAE,IAAI,GAAG,EAAa,CAAC;CACpC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAe,EAAE,EAAa;IAC9D,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAgB;IAC9C,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAe,EAAE,EAAa;IACvD,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,SAAS,EAAE,6BAA6B;IACxC,MAAM,EAAE,aAAa;IACrB,SAAS,EAAE,oBAAoB;IAC/B,SAAS,EAAE,uBAAuB;CACnC,CAAC"}
@@ -0,0 +1,91 @@
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 type { ChildProcess } from 'child_process';
9
+ import { type TaskState, type TaskRecord, type TaskSummary, type CreateTaskOptions } from './types.js';
10
+ export declare class TaskStore {
11
+ private readonly tasks;
12
+ private readonly maxTasks;
13
+ private readonly maxOutputLines;
14
+ constructor(maxTasks?: number, maxOutputLines?: number);
15
+ /**
16
+ * Create a new task. Returns the task record.
17
+ * Task starts in 'created' state.
18
+ */
19
+ createTask(opts: CreateTaskOptions): Promise<TaskRecord>;
20
+ /**
21
+ * Transition a task to a new state.
22
+ * Returns true on success, false if the transition is invalid.
23
+ *
24
+ * On terminal transitions, runs the cleanup procedure.
25
+ */
26
+ transitionTo(id: string, newState: TaskState, options?: {
27
+ error?: string;
28
+ metadata?: Record<string, unknown>;
29
+ }): Promise<boolean>;
30
+ /**
31
+ * Set the process reference and PID on a task.
32
+ */
33
+ setProcess(id: string, proc: ChildProcess): void;
34
+ /**
35
+ * Get the process reference for a task.
36
+ */
37
+ getProcess(id: string): ChildProcess | undefined;
38
+ /**
39
+ * Append an output line to a task's ring buffer and output file.
40
+ */
41
+ appendOutput(id: string, line: string): Promise<void>;
42
+ /**
43
+ * Get a task by ID.
44
+ */
45
+ getTask(id: string): TaskRecord | undefined;
46
+ /**
47
+ * Get all tasks.
48
+ */
49
+ getAllTasks(): TaskRecord[];
50
+ /**
51
+ * Get task counts by state.
52
+ */
53
+ getTaskCounts(): Record<string, number>;
54
+ /**
55
+ * Convert a TaskRecord to a TaskSummary (for external APIs).
56
+ * Maps the new state field to the legacy 'status' field.
57
+ */
58
+ toSummary(task: TaskRecord): TaskSummary;
59
+ /**
60
+ * Cancel a single running task.
61
+ * Returns true if the task was successfully cancelled.
62
+ */
63
+ cancelTask(id: string): Promise<boolean>;
64
+ /**
65
+ * Cancel all running tasks (for shutdown).
66
+ * Returns the number of tasks cancelled.
67
+ */
68
+ cancelAll(): Promise<number>;
69
+ /**
70
+ * Get stall warning for a running task.
71
+ */
72
+ getStallWarning(task: TaskRecord): string | null;
73
+ /**
74
+ * Reset all state (for testing only).
75
+ */
76
+ resetForTesting(): void;
77
+ /**
78
+ * Cleanup procedure for terminal transitions.
79
+ */
80
+ private cleanupTerminal;
81
+ /**
82
+ * Generate a collision-free task ID.
83
+ */
84
+ private generateUniqueId;
85
+ /**
86
+ * Evict oldest terminal tasks if at capacity.
87
+ */
88
+ private evictIfNeeded;
89
+ }
90
+ export declare const taskStore: TaskStore;
91
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/task/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AASlD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAkBpB,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAGtC,QAAQ,GAAE,MAAkB,EAC5B,cAAc,GAAE,MAAyB;IAQ3C;;;OAGG;IACG,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IA6B9D;;;;;OAKG;IACG,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,SAAS,EACnB,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GACA,OAAO,CAAC,OAAO,CAAC;IA0BnB;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI;IAUhD;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAOhD;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3D;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI3C;;OAEG;IACH,WAAW,IAAI,UAAU,EAAE;IAI3B;;OAEG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAmBvC;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW;IAgCxC;;;OAGG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM9C;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAiBlC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAchD;;OAEG;IACH,eAAe,IAAI,IAAI;IAYvB;;OAEG;YACW,eAAe;IAyC7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,aAAa;CAYtB;AAID,eAAO,MAAM,SAAS,WAAkB,CAAC"}