opencode-orchestrator 0.8.19 → 0.8.21

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 (103) hide show
  1. package/README.md +12 -0
  2. package/dist/agents/commander.d.ts +1 -1
  3. package/dist/agents/definitions.d.ts +1 -1
  4. package/dist/agents/subagents/planner.d.ts +1 -1
  5. package/dist/agents/subagents/reviewer.d.ts +1 -1
  6. package/dist/agents/subagents/worker.d.ts +1 -1
  7. package/dist/core/agents/config.d.ts +1 -1
  8. package/dist/core/cache/constants.d.ts +2 -0
  9. package/dist/core/orchestrator/state.d.ts +2 -2
  10. package/dist/core/orchestrator/types/task-status.d.ts +2 -1
  11. package/dist/core/recovery/constants.d.ts +6 -3
  12. package/dist/core/task/interfaces/index.d.ts +1 -1
  13. package/dist/core/task/interfaces/task-node.d.ts +1 -1
  14. package/dist/index.js +317 -173
  15. package/dist/shared/agent/constants/agent-tokens.d.ts +11 -0
  16. package/dist/shared/agent/constants/index.d.ts +7 -0
  17. package/dist/shared/agent/{names.d.ts → constants/names.d.ts} +1 -2
  18. package/dist/shared/agent/index.d.ts +4 -4
  19. package/dist/shared/agent/{definition.d.ts → interfaces/agent-definition.d.ts} +1 -1
  20. package/dist/shared/agent/interfaces/concurrency-config.d.ts +9 -0
  21. package/dist/shared/agent/interfaces/index.d.ts +5 -0
  22. package/dist/shared/agent/types/agent-name.d.ts +5 -0
  23. package/dist/shared/agent/types/index.d.ts +4 -0
  24. package/dist/shared/cache/constants/cache.d.ts +11 -0
  25. package/dist/shared/cache/constants/index.d.ts +8 -0
  26. package/dist/shared/cache/index.d.ts +4 -0
  27. package/dist/shared/command/index.d.ts +5 -0
  28. package/dist/shared/command/interfaces/background-task.d.ts +20 -0
  29. package/dist/shared/command/interfaces/index.d.ts +5 -0
  30. package/dist/shared/command/interfaces/run-background-options.d.ts +9 -0
  31. package/dist/shared/command/types/background-task-status.d.ts +4 -0
  32. package/dist/shared/command/types/index.d.ts +4 -0
  33. package/dist/shared/core/constants/index.d.ts +7 -0
  34. package/dist/shared/core/index.d.ts +4 -0
  35. package/dist/shared/errors/index.d.ts +1 -1
  36. package/dist/shared/errors/patterns.d.ts +13 -0
  37. package/dist/shared/errors/retry.d.ts +1 -1
  38. package/dist/shared/index.d.ts +30 -0
  39. package/dist/shared/loop/constants/index.d.ts +5 -0
  40. package/dist/shared/loop/constants/loop.d.ts +17 -0
  41. package/dist/shared/loop/index.d.ts +6 -0
  42. package/dist/shared/loop/interfaces/index.d.ts +5 -0
  43. package/dist/shared/loop/interfaces/todo-stats.d.ts +11 -0
  44. package/dist/shared/loop/interfaces/todo.d.ts +13 -0
  45. package/dist/shared/loop/types/index.d.ts +5 -0
  46. package/dist/shared/loop/types/todo-priority.d.ts +4 -0
  47. package/dist/shared/loop/types/todo-status.d.ts +4 -0
  48. package/dist/shared/message/constants/index.d.ts +6 -0
  49. package/dist/shared/message/index.d.ts +4 -0
  50. package/dist/shared/notification/constants/index.d.ts +5 -0
  51. package/dist/shared/notification/constants/toast-duration.d.ts +19 -0
  52. package/dist/shared/notification/index.d.ts +6 -0
  53. package/dist/shared/notification/interfaces/index.d.ts +5 -0
  54. package/dist/shared/notification/interfaces/toast-message.d.ts +13 -0
  55. package/dist/shared/notification/interfaces/toast-options.d.ts +10 -0
  56. package/dist/shared/notification/types/index.d.ts +4 -0
  57. package/dist/shared/notification/types/toast-variant.d.ts +4 -0
  58. package/dist/shared/recovery/constants/history.d.ts +11 -0
  59. package/dist/shared/recovery/constants/index.d.ts +5 -0
  60. package/dist/shared/recovery/constants/recovery.d.ts +13 -0
  61. package/dist/shared/recovery/index.d.ts +6 -0
  62. package/dist/shared/recovery/interfaces/error-context.d.ts +11 -0
  63. package/dist/shared/recovery/interfaces/index.d.ts +5 -0
  64. package/dist/shared/recovery/interfaces/recovery-record.d.ts +10 -0
  65. package/dist/shared/recovery/types/index.d.ts +4 -0
  66. package/dist/shared/recovery/types/recovery-action.d.ts +4 -0
  67. package/dist/shared/session/constants/index.d.ts +7 -0
  68. package/dist/shared/session/constants/session-events.d.ts +10 -0
  69. package/dist/shared/session/index.d.ts +4 -0
  70. package/dist/shared/{constants → task/constants}/background-task.d.ts +3 -0
  71. package/dist/shared/task/constants/index.d.ts +7 -0
  72. package/dist/shared/{constants → task/constants}/parallel-task.d.ts +7 -4
  73. package/dist/shared/task/index.d.ts +6 -0
  74. package/dist/shared/task/interfaces/index.d.ts +7 -0
  75. package/dist/shared/task/interfaces/launch-input.d.ts +11 -0
  76. package/dist/shared/task/interfaces/parallel-task.d.ts +26 -0
  77. package/dist/shared/task/interfaces/resume-input.d.ts +16 -0
  78. package/dist/shared/task/interfaces/task-progress.d.ts +9 -0
  79. package/dist/shared/task/types/index.d.ts +4 -0
  80. package/dist/shared/task/types/parallel-task-status.d.ts +4 -0
  81. package/dist/shared/tool/constants/index.d.ts +5 -0
  82. package/dist/shared/tool/constants/tool-output.d.ts +9 -0
  83. package/dist/shared/tool/index.d.ts +4 -0
  84. package/package.json +1 -1
  85. package/dist/shared/agent.d.ts +0 -6
  86. package/dist/shared/constants/index.d.ts +0 -28
  87. package/dist/shared/constants.d.ts +0 -7
  88. package/dist/shared/error-patterns.d.ts +0 -6
  89. /package/dist/shared/{constants → agent/constants}/status.d.ts +0 -0
  90. /package/dist/shared/{constants → cache/constants}/cache-actions.d.ts +0 -0
  91. /package/dist/shared/{constants → cache/constants}/filter-status.d.ts +0 -0
  92. /package/dist/shared/{constants → core/constants}/id-prefix.d.ts +0 -0
  93. /package/dist/shared/{constants → core/constants}/memory-limits.d.ts +0 -0
  94. /package/dist/shared/{constants → core/constants}/paths.d.ts +0 -0
  95. /package/dist/shared/{constants → core/constants}/time.d.ts +0 -0
  96. /package/dist/shared/{constants → loop/constants}/mission-seal.d.ts +0 -0
  97. /package/dist/shared/{constants → message/constants}/part-types.d.ts +0 -0
  98. /package/dist/shared/{constants → message/constants}/prompts.d.ts +0 -0
  99. /package/dist/shared/{constants → message/constants}/slash-commands.d.ts +0 -0
  100. /package/dist/shared/{constants → notification/constants}/toast-variants.d.ts +0 -0
  101. /package/dist/shared/{event-types.d.ts → session/constants/event-types.d.ts} +0 -0
  102. /package/dist/shared/{constants → task/constants}/background-status.d.ts +0 -0
  103. /package/dist/shared/{constants → tool/constants}/tool-names.d.ts +0 -0
package/dist/index.js CHANGED
@@ -7,33 +7,72 @@ var __export = (target, all) => {
7
7
  // src/index.ts
8
8
  import { createRequire } from "node:module";
9
9
 
10
- // src/shared/constants/time.ts
10
+ // src/shared/agent/constants/names.ts
11
+ var AGENT_NAMES = {
12
+ COMMANDER: "Commander",
13
+ PLANNER: "Planner",
14
+ WORKER: "Worker",
15
+ REVIEWER: "Reviewer"
16
+ };
17
+
18
+ // src/shared/agent/constants/agent-tokens.ts
19
+ var AGENT_TOKENS = {
20
+ /** Primary agent (Commander) max tokens */
21
+ PRIMARY_MAX_TOKENS: 64e3,
22
+ /** Primary agent thinking budget */
23
+ PRIMARY_THINKING_BUDGET: 32e3,
24
+ /** Subagent max tokens */
25
+ SUBAGENT_MAX_TOKENS: 32e3
26
+ };
27
+
28
+ // src/shared/agent/constants/status.ts
29
+ var AGENT_EMOJI = {
30
+ Commander: "C",
31
+ Planner: "P",
32
+ Worker: "W",
33
+ Reviewer: "R"
34
+ };
35
+ var STATUS_EMOJI = {
36
+ pending: "...",
37
+ running: "RUN",
38
+ completed: "OK",
39
+ done: "OK",
40
+ error: "ERR",
41
+ timeout: "TIM",
42
+ cancelled: "CAN"
43
+ };
44
+ function getStatusEmoji(status) {
45
+ return STATUS_EMOJI[status] ?? "?";
46
+ }
47
+
48
+ // src/shared/core/constants/time.ts
11
49
  var TIME = {
12
50
  SECOND: 1e3,
13
51
  MINUTE: 60 * 1e3,
14
52
  HOUR: 60 * 60 * 1e3
15
53
  };
16
54
 
17
- // src/shared/constants/id-prefix.ts
55
+ // src/shared/core/constants/id-prefix.ts
18
56
  var ID_PREFIX = {
19
57
  TASK: "task_",
20
58
  JOB: "job_",
21
59
  SESSION: "session_"
22
60
  };
23
61
 
24
- // src/shared/constants/parallel-task.ts
25
- var PARALLEL_TASK = {
26
- TTL_MS: 60 * TIME.MINUTE,
27
- CLEANUP_DELAY_MS: 10 * TIME.MINUTE,
28
- MIN_STABILITY_MS: 3 * TIME.SECOND,
29
- POLL_INTERVAL_MS: 1e3,
30
- DEFAULT_CONCURRENCY: 3,
31
- MAX_CONCURRENCY: 50,
32
- SYNC_TIMEOUT_MS: 10 * TIME.MINUTE,
33
- MAX_DEPTH: 3
62
+ // src/shared/core/constants/paths.ts
63
+ var PATHS = {
64
+ OPENCODE: ".opencode",
65
+ DOCS: ".opencode/docs",
66
+ ARCHIVE: ".opencode/archive",
67
+ TASK_ARCHIVE: ".opencode/archive/tasks",
68
+ DOC_ARCHIVE: ".opencode/archive/docs",
69
+ TODO: ".opencode/todo.md",
70
+ CONTEXT: ".opencode/context.md",
71
+ SUMMARY: ".opencode/summary.md",
72
+ DOC_METADATA: ".opencode/docs/_metadata.json"
34
73
  };
35
74
 
36
- // src/shared/constants/memory-limits.ts
75
+ // src/shared/core/constants/memory-limits.ts
37
76
  var MEMORY_LIMITS = {
38
77
  MAX_TASKS_IN_MEMORY: 1e3,
39
78
  MAX_NOTIFICATIONS_PER_PARENT: 100,
@@ -44,26 +83,186 @@ var MEMORY_LIMITS = {
44
83
  ERROR_CLEANUP_AGE_MS: 10 * TIME.MINUTE
45
84
  };
46
85
 
47
- // src/shared/constants/paths.ts
48
- var PATHS = {
49
- OPENCODE: ".opencode",
50
- DOCS: ".opencode/docs",
51
- ARCHIVE: ".opencode/archive",
52
- TASK_ARCHIVE: ".opencode/archive/tasks",
53
- DOC_ARCHIVE: ".opencode/archive/docs",
54
- TODO: ".opencode/todo.md",
55
- CONTEXT: ".opencode/context.md",
56
- SUMMARY: ".opencode/summary.md",
57
- DOC_METADATA: ".opencode/docs/_metadata.json"
86
+ // src/shared/task/constants/parallel-task.ts
87
+ var PARALLEL_TASK = {
88
+ // Task lifecycle (24 hours for long tasks)
89
+ TTL_MS: 24 * TIME.HOUR,
90
+ CLEANUP_DELAY_MS: 10 * TIME.MINUTE,
91
+ MAX_DEPTH: 3,
92
+ // Concurrency limits (safe for most APIs)
93
+ DEFAULT_CONCURRENCY: 3,
94
+ MAX_CONCURRENCY: 10,
95
+ // Sync polling (for delegate_task sync mode)
96
+ SYNC_TIMEOUT_MS: 5 * TIME.MINUTE,
97
+ POLL_INTERVAL_MS: 500,
98
+ MIN_IDLE_TIME_MS: 5 * TIME.SECOND,
99
+ MIN_STABILITY_MS: 3 * TIME.SECOND,
100
+ STABLE_POLLS_REQUIRED: 3,
101
+ MAX_POLL_COUNT: 600
58
102
  };
59
103
 
60
- // src/shared/constants/background-task.ts
104
+ // src/shared/task/constants/background-task.ts
61
105
  var BACKGROUND_TASK = {
62
106
  DEFAULT_TIMEOUT_MS: 5 * TIME.MINUTE,
63
- MAX_OUTPUT_LENGTH: 1e4
107
+ MAX_OUTPUT_LENGTH: 1e4,
108
+ MAX_CONCURRENT: 5,
109
+ POLL_INTERVAL_MS: 500,
110
+ RETRY_COOLDOWN_MS: 30 * TIME.SECOND
111
+ };
112
+
113
+ // src/shared/task/constants/background-status.ts
114
+ var BACKGROUND_STATUS = {
115
+ RUNNING: "running",
116
+ DONE: "done",
117
+ ERROR: "error",
118
+ TIMEOUT: "timeout"
119
+ };
120
+
121
+ // src/shared/loop/constants/loop.ts
122
+ var LOOP = {
123
+ /** Countdown seconds before auto-continuation */
124
+ COUNTDOWN_SECONDS: 3,
125
+ /** Minimum time between continuation checks */
126
+ MIN_TIME_BETWEEN_CHECKS_MS: 3 * TIME.SECOND,
127
+ /** Grace period after countdown starts (ignore messages) */
128
+ COUNTDOWN_GRACE_PERIOD_MS: 500,
129
+ /** Window to consider abort as recent */
130
+ ABORT_WINDOW_MS: 3 * TIME.SECOND,
131
+ /** Maximum iterations for mission loop */
132
+ DEFAULT_MAX_ITERATIONS: 1e3,
133
+ /** Rust tool timeout */
134
+ RUST_TOOL_TIMEOUT_MS: 60 * TIME.SECOND
135
+ };
136
+
137
+ // src/shared/loop/constants/mission-seal.ts
138
+ var MISSION_SEAL = {
139
+ TAG: "mission_seal",
140
+ CONFIRMATION: "SEALED",
141
+ PATTERN: "<mission_seal>SEALED</mission_seal>",
142
+ DEFAULT_MAX_ITERATIONS: 20,
143
+ DEFAULT_COUNTDOWN_SECONDS: 3,
144
+ STATE_FILE: "loop-state.json",
145
+ STOP_COMMAND: "/stop",
146
+ CANCEL_COMMAND: "/cancel"
147
+ };
148
+ var MISSION = MISSION_SEAL;
149
+
150
+ // src/shared/notification/constants/toast-duration.ts
151
+ var TOAST_DURATION = {
152
+ /** Extra short: 1.5 seconds */
153
+ EXTRA_SHORT: 1500,
154
+ /** Short: 2 seconds */
155
+ SHORT: 2 * TIME.SECOND,
156
+ /** Medium: 3 seconds */
157
+ MEDIUM: 3 * TIME.SECOND,
158
+ /** Default: 4 seconds */
159
+ DEFAULT: 4 * TIME.SECOND,
160
+ /** Long: 5 seconds */
161
+ LONG: 5 * TIME.SECOND,
162
+ /** Extended: 7 seconds */
163
+ EXTENDED: 7 * TIME.SECOND,
164
+ /** Persistent: 0 (stays until dismissed) */
165
+ PERSISTENT: 0
166
+ };
167
+
168
+ // src/shared/recovery/constants/recovery.ts
169
+ var RECOVERY = {
170
+ /** Maximum recovery attempts per session */
171
+ MAX_ATTEMPTS: 3,
172
+ /** Minimum time between recovery attempts */
173
+ MIN_INTERVAL_MS: 30 * TIME.SECOND,
174
+ /** Base delay for retry backoff calculation */
175
+ BASE_DELAY_MS: 1 * TIME.SECOND,
176
+ /** Maximum retry multiplier */
177
+ MAX_RETRY_MULTIPLIER: 5
178
+ };
179
+
180
+ // src/shared/recovery/constants/history.ts
181
+ var HISTORY = {
182
+ /** Recovery history max entries */
183
+ MAX_RECOVERY: 100,
184
+ /** Toast history max entries */
185
+ MAX_TOAST: 50,
186
+ /** Progress store max entries */
187
+ MAX_PROGRESS: 100
188
+ };
189
+
190
+ // src/shared/cache/constants/cache.ts
191
+ var CACHE = {
192
+ /** Default cache TTL (24 hours) */
193
+ DEFAULT_TTL_MS: 24 * TIME.HOUR,
194
+ /** Maximum cache entries */
195
+ MAX_ENTRIES: 100,
196
+ /** Session TTL (24 hours for long tasks) */
197
+ SESSION_TTL_MS: 24 * TIME.HOUR
198
+ };
199
+
200
+ // src/shared/cache/constants/cache-actions.ts
201
+ var CACHE_ACTIONS = {
202
+ LIST: "list",
203
+ GET: "get",
204
+ CLEAR: "clear",
205
+ STATS: "stats"
206
+ };
207
+
208
+ // src/shared/cache/constants/filter-status.ts
209
+ var FILTER_STATUS = {
210
+ ALL: "all",
211
+ RUNNING: "running",
212
+ DONE: "done",
213
+ COMPLETED: "completed",
214
+ ERROR: "error",
215
+ PENDING: "pending"
216
+ };
217
+
218
+ // src/shared/session/constants/session-events.ts
219
+ var SESSION_EVENTS = {
220
+ IDLE: "session.idle",
221
+ DELETED: "session.deleted",
222
+ CREATED: "session.created",
223
+ ERROR: "session.error"
224
+ };
225
+
226
+ // src/shared/session/constants/event-types.ts
227
+ var TASK_EVENTS = {
228
+ STARTED: "task.started",
229
+ COMPLETED: "task.completed",
230
+ FAILED: "task.failed",
231
+ CANCELLED: "task.cancelled"
232
+ };
233
+ var TODO_EVENTS = {
234
+ CREATED: "todo.created",
235
+ UPDATED: "todo.updated",
236
+ COMPLETED: "todo.completed"
237
+ };
238
+ var SESSION_EVENTS2 = {
239
+ IDLE: "session.idle",
240
+ BUSY: "session.busy",
241
+ ERROR: "session.error",
242
+ DELETED: "session.deleted"
243
+ };
244
+ var DOCUMENT_EVENTS = {
245
+ CACHED: "document.cached",
246
+ EXPIRED: "document.expired"
247
+ };
248
+ var MISSION_EVENTS = {
249
+ COMPLETE: "mission.complete",
250
+ FAILED: "mission.failed",
251
+ ALL_TASKS_COMPLETE: "all_tasks.complete"
252
+ };
253
+ var SPECIAL_EVENTS = {
254
+ WILDCARD: "*"
255
+ };
256
+ var EVENT_TYPES = {
257
+ ...TASK_EVENTS,
258
+ ...TODO_EVENTS,
259
+ ...SESSION_EVENTS2,
260
+ ...DOCUMENT_EVENTS,
261
+ ...MISSION_EVENTS,
262
+ ...SPECIAL_EVENTS
64
263
  };
65
264
 
66
- // src/shared/constants/tool-names.ts
265
+ // src/shared/tool/constants/tool-names.ts
67
266
  var TOOL_NAMES = {
68
267
  // Parallel task tools
69
268
  DELEGATE_TASK: "delegate_task",
@@ -89,40 +288,15 @@ var TOOL_NAMES = {
89
288
  SLASHCOMMAND: "slashcommand"
90
289
  };
91
290
 
92
- // src/shared/constants/mission-seal.ts
93
- var MISSION_SEAL = {
94
- TAG: "mission_seal",
95
- CONFIRMATION: "SEALED",
96
- PATTERN: "<mission_seal>SEALED</mission_seal>",
97
- DEFAULT_MAX_ITERATIONS: 20,
98
- DEFAULT_COUNTDOWN_SECONDS: 3,
99
- STATE_FILE: "loop-state.json",
100
- STOP_COMMAND: "/stop",
101
- CANCEL_COMMAND: "/cancel"
102
- };
103
- var MISSION = MISSION_SEAL;
104
-
105
- // src/shared/constants/status.ts
106
- var AGENT_EMOJI = {
107
- Commander: "C",
108
- Planner: "P",
109
- Worker: "W",
110
- Reviewer: "R"
111
- };
112
- var STATUS_EMOJI = {
113
- pending: "...",
114
- running: "RUN",
115
- completed: "OK",
116
- done: "OK",
117
- error: "ERR",
118
- timeout: "TIM",
119
- cancelled: "CAN"
291
+ // src/shared/tool/constants/tool-output.ts
292
+ var TOOL_OUTPUT = {
293
+ /** Maximum length for healthy output capture */
294
+ MAX_HEALTHY_OUTPUT_LENGTH: 1e3,
295
+ /** Threshold for considering output small enough to capture */
296
+ SMALL_OUTPUT_THRESHOLD: 5e3
120
297
  };
121
- function getStatusEmoji(status) {
122
- return STATUS_EMOJI[status] ?? "?";
123
- }
124
298
 
125
- // src/shared/constants/part-types.ts
299
+ // src/shared/message/constants/part-types.ts
126
300
  var PART_TYPES = {
127
301
  TEXT: "text",
128
302
  REASONING: "reasoning",
@@ -130,46 +304,45 @@ var PART_TYPES = {
130
304
  TOOL_RESULT: "tool_result"
131
305
  };
132
306
 
133
- // src/shared/constants/prompts.ts
307
+ // src/shared/message/constants/prompts.ts
134
308
  var PROMPTS = {
135
309
  CONTINUE: "continue",
136
310
  CONTINUE_PREVIOUS: "continue previous work",
137
311
  CONTINUE_DEFAULT: "continue from where we left off"
138
312
  };
139
313
 
140
- // src/shared/constants/cache-actions.ts
141
- var CACHE_ACTIONS = {
142
- LIST: "list",
143
- GET: "get",
144
- CLEAR: "clear",
145
- STATS: "stats"
146
- };
147
-
148
- // src/shared/constants/background-status.ts
149
- var BACKGROUND_STATUS = {
150
- RUNNING: "running",
151
- DONE: "done",
152
- ERROR: "error",
153
- TIMEOUT: "timeout"
314
+ // src/shared/errors/patterns.ts
315
+ var ERROR_PATTERNS = {
316
+ TOOL_RESULT_MISSING: /tool_result_missing|tool result.*missing/i,
317
+ THINKING_BLOCK_ORDER: /thinking.*block.*order|thinking_block_order/i,
318
+ THINKING_DISABLED: /thinking.*disabled|thinking_disabled_violation/i,
319
+ RATE_LIMIT: /rate.?limit|too.?many.?requests|429/i,
320
+ CONTEXT_OVERFLOW: /context.?length|token.?limit|maximum.?context/i,
321
+ MESSAGE_ABORTED: /MessageAbortedError|AbortError/i,
322
+ NETWORK_ERROR: /network|ECONNREFUSED|ETIMEDOUT|fetch failed/i,
323
+ AUTH_ERROR: /unauthorized|401|403|invalid.*token/i
154
324
  };
155
-
156
- // src/shared/constants/filter-status.ts
157
- var FILTER_STATUS = {
158
- ALL: "all",
159
- RUNNING: "running",
160
- DONE: "done",
161
- COMPLETED: "completed",
162
- ERROR: "error",
163
- PENDING: "pending"
325
+ var ERROR_TYPE = {
326
+ TOOL_RESULT_MISSING: "TOOL_RESULT_MISSING",
327
+ THINKING_BLOCK_ORDER: "THINKING_BLOCK_ORDER",
328
+ THINKING_DISABLED: "THINKING_DISABLED",
329
+ RATE_LIMIT: "RATE_LIMIT",
330
+ CONTEXT_OVERFLOW: "CONTEXT_OVERFLOW",
331
+ MESSAGE_ABORTED: "MESSAGE_ABORTED",
332
+ NETWORK_ERROR: "NETWORK_ERROR",
333
+ AUTH_ERROR: "AUTH_ERROR"
164
334
  };
165
335
 
166
- // src/shared/agent/names.ts
167
- var AGENT_NAMES = {
168
- COMMANDER: "Commander",
169
- PLANNER: "Planner",
170
- WORKER: "Worker",
171
- REVIEWER: "Reviewer"
172
- };
336
+ // src/shared/errors/detection.ts
337
+ function detectErrorType(error45) {
338
+ const errorStr = typeof error45 === "string" ? error45 : error45?.message || error45?.name || String(error45);
339
+ for (const [type, pattern] of Object.entries(ERROR_PATTERNS)) {
340
+ if (pattern.test(errorStr)) {
341
+ return type;
342
+ }
343
+ }
344
+ return null;
345
+ }
173
346
 
174
347
  // src/core/agents/consts/task-status.const.ts
175
348
  var TASK_STATUS = {
@@ -191,8 +364,8 @@ var TODO_STATUS = {
191
364
  // src/core/orchestrator/state.ts
192
365
  var state = {
193
366
  missionActive: false,
194
- maxIterations: 1e3,
195
- maxRetries: 3,
367
+ maxIterations: LOOP.DEFAULT_MAX_ITERATIONS,
368
+ maxRetries: RECOVERY.MAX_ATTEMPTS,
196
369
  sessions: /* @__PURE__ */ new Map()
197
370
  };
198
371
 
@@ -13787,7 +13960,7 @@ Use check_background to get results.
13787
13960
  args: {
13788
13961
  command: tool.schema.string().describe("Shell command to execute"),
13789
13962
  cwd: tool.schema.string().optional().describe("Working directory"),
13790
- timeout: tool.schema.number().optional().describe("Timeout in ms (default: 300000)"),
13963
+ timeout: tool.schema.number().optional().describe(`Timeout in ms (default: ${BACKGROUND_TASK.DEFAULT_TIMEOUT_MS})`),
13791
13964
  label: tool.schema.string().optional().describe("Task label")
13792
13965
  },
13793
13966
  async execute(args) {
@@ -13795,7 +13968,7 @@ Use check_background to get results.
13795
13968
  const task = backgroundTaskManager.run({
13796
13969
  command,
13797
13970
  cwd: cwd || process.cwd(),
13798
- timeout: timeout || 3e5,
13971
+ timeout: timeout || BACKGROUND_TASK.DEFAULT_TIMEOUT_MS,
13799
13972
  label
13800
13973
  });
13801
13974
  const displayLabel = label ? ` (${label})` : "";
@@ -14263,7 +14436,6 @@ function initToastClient(client) {
14263
14436
  tuiClient = client;
14264
14437
  }
14265
14438
  var toasts = [];
14266
- var MAX_HISTORY = 50;
14267
14439
  var handlers = [];
14268
14440
  function show(options) {
14269
14441
  const toast = {
@@ -14276,7 +14448,7 @@ function show(options) {
14276
14448
  dismissed: false
14277
14449
  };
14278
14450
  toasts.push(toast);
14279
- if (toasts.length > MAX_HISTORY) {
14451
+ if (toasts.length > HISTORY.MAX_TOAST) {
14280
14452
  toasts.shift();
14281
14453
  }
14282
14454
  for (const handler of handlers) {
@@ -14333,19 +14505,19 @@ var sessionCreated = (sessionId, agent) => show({
14333
14505
  title: "Session Created",
14334
14506
  message: `${agent} - ${sessionId.slice(0, 12)}...`,
14335
14507
  variant: "info",
14336
- duration: 2e3
14508
+ duration: TOAST_DURATION.SHORT
14337
14509
  });
14338
14510
  var sessionResumed = (sessionId, agent) => show({
14339
14511
  title: "Session Resumed",
14340
14512
  message: `${agent} - ${sessionId.slice(0, 12)}...`,
14341
14513
  variant: "info",
14342
- duration: 2e3
14514
+ duration: TOAST_DURATION.SHORT
14343
14515
  });
14344
14516
  var sessionCompleted = (sessionId, duration3) => show({
14345
14517
  title: "Session Completed",
14346
14518
  message: `${sessionId.slice(0, 12)}... (${duration3})`,
14347
14519
  variant: "success",
14348
- duration: 3e3
14520
+ duration: TOAST_DURATION.MEDIUM
14349
14521
  });
14350
14522
 
14351
14523
  // src/core/notification/presets/parallel.ts
@@ -14353,19 +14525,19 @@ var parallelTasksLaunched = (count, agents) => show({
14353
14525
  title: "Parallel Tasks Launched",
14354
14526
  message: `${count} tasks: ${agents.join(", ")}`,
14355
14527
  variant: "info",
14356
- duration: 4e3
14528
+ duration: TOAST_DURATION.DEFAULT
14357
14529
  });
14358
14530
  var concurrencyAcquired = (agent, slot) => show({
14359
14531
  title: "Concurrency Slot",
14360
14532
  message: `${agent} acquired ${slot}`,
14361
14533
  variant: "info",
14362
- duration: 2e3
14534
+ duration: TOAST_DURATION.SHORT
14363
14535
  });
14364
14536
  var concurrencyReleased = (agent) => show({
14365
14537
  title: "Slot Released",
14366
14538
  message: agent,
14367
14539
  variant: "info",
14368
- duration: 1500
14540
+ duration: TOAST_DURATION.EXTRA_SHORT
14369
14541
  });
14370
14542
 
14371
14543
  // src/core/notification/presets/mission.ts
@@ -14387,19 +14559,19 @@ var toolExecuted = (toolName, target) => show({
14387
14559
  title: toolName,
14388
14560
  message: target.slice(0, 80),
14389
14561
  variant: "info",
14390
- duration: 2e3
14562
+ duration: TOAST_DURATION.SHORT
14391
14563
  });
14392
14564
  var documentCached = (filename) => show({
14393
14565
  title: "Document Cached",
14394
14566
  message: `${PATHS.DOCS}/${filename}`,
14395
14567
  variant: "info",
14396
- duration: 2e3
14568
+ duration: TOAST_DURATION.SHORT
14397
14569
  });
14398
14570
  var researchStarted = (topic) => show({
14399
14571
  title: "Research Started",
14400
14572
  message: topic,
14401
14573
  variant: "info",
14402
- duration: 3e3
14574
+ duration: TOAST_DURATION.MEDIUM
14403
14575
  });
14404
14576
 
14405
14577
  // src/core/notification/presets/warnings.ts
@@ -14407,25 +14579,25 @@ var warningRateLimited = () => show({
14407
14579
  title: "Rate Limited",
14408
14580
  message: "Waiting before retry...",
14409
14581
  variant: "warning",
14410
- duration: 5e3
14582
+ duration: TOAST_DURATION.LONG
14411
14583
  });
14412
14584
  var errorRecovery = (action) => show({
14413
14585
  title: "Error Recovery",
14414
14586
  message: `Attempting: ${action}`,
14415
14587
  variant: "warning",
14416
- duration: 3e3
14588
+ duration: TOAST_DURATION.MEDIUM
14417
14589
  });
14418
14590
  var warningMaxDepth = (depth) => show({
14419
14591
  title: "Max Depth Reached",
14420
14592
  message: `Recursion blocked at depth ${depth}`,
14421
14593
  variant: "warning",
14422
- duration: 5e3
14594
+ duration: TOAST_DURATION.LONG
14423
14595
  });
14424
14596
  var warningMaxRetries = () => show({
14425
14597
  title: "Max Retries Exceeded",
14426
14598
  message: "Automatic recovery has stopped. Manual intervention may be needed.",
14427
14599
  variant: "error",
14428
- duration: 0
14600
+ duration: TOAST_DURATION.PERSISTENT
14429
14601
  });
14430
14602
 
14431
14603
  // src/core/notification/presets.ts
@@ -15044,10 +15216,6 @@ You will be notified when ALL tasks complete. Continue productive work.`;
15044
15216
  };
15045
15217
 
15046
15218
  // src/core/agents/manager/event-handler.ts
15047
- var SESSION_EVENTS = {
15048
- IDLE: "session.idle",
15049
- DELETED: "session.deleted"
15050
- };
15051
15219
  var EventHandler = class {
15052
15220
  constructor(client, store, concurrency, findBySession, notifyParentIfAllComplete, scheduleCleanup, validateSessionHasOutput2) {
15053
15221
  this.client = client;
@@ -15284,11 +15452,11 @@ var parallelAgentManager = {
15284
15452
  };
15285
15453
 
15286
15454
  // src/tools/parallel/delegate-task.ts
15287
- var MIN_IDLE_TIME_MS = 5e3;
15288
- var POLL_INTERVAL_MS = 500;
15289
- var SYNC_TIMEOUT_MS = 5 * 60 * 1e3;
15290
- var MAX_POLL_COUNT = 600;
15291
- var STABLE_POLLS_REQUIRED = 3;
15455
+ var MIN_IDLE_TIME_MS = PARALLEL_TASK.MIN_IDLE_TIME_MS;
15456
+ var POLL_INTERVAL_MS = PARALLEL_TASK.POLL_INTERVAL_MS;
15457
+ var SYNC_TIMEOUT_MS = PARALLEL_TASK.SYNC_TIMEOUT_MS;
15458
+ var MAX_POLL_COUNT = PARALLEL_TASK.MAX_POLL_COUNT;
15459
+ var STABLE_POLLS_REQUIRED = PARALLEL_TASK.STABLE_POLLS_REQUIRED;
15292
15460
  async function validateSessionHasOutput(session, sessionID) {
15293
15461
  try {
15294
15462
  const response = await session.messages({ path: { id: sessionID } });
@@ -15603,7 +15771,7 @@ function createAsyncAgentTools(manager, client) {
15603
15771
  // src/core/cache/constants.ts
15604
15772
  var CACHE_DIR = PATHS.DOCS;
15605
15773
  var METADATA_FILE = PATHS.DOC_METADATA;
15606
- var DEFAULT_TTL_MS = 24 * 60 * 60 * 1e3;
15774
+ var DEFAULT_TTL_MS = CACHE.DEFAULT_TTL_MS;
15607
15775
 
15608
15776
  // src/core/cache/operations.ts
15609
15777
  import * as fs4 from "node:fs/promises";
@@ -16386,7 +16554,6 @@ ${r.content}
16386
16554
  // src/core/progress/store.ts
16387
16555
  var progressHistory = /* @__PURE__ */ new Map();
16388
16556
  var sessionStartTimes = /* @__PURE__ */ new Map();
16389
- var MAX_HISTORY2 = 100;
16390
16557
  function startSession(sessionId) {
16391
16558
  sessionStartTimes.set(sessionId, /* @__PURE__ */ new Date());
16392
16559
  progressHistory.set(sessionId, []);
@@ -16419,7 +16586,7 @@ function recordSnapshot(sessionId, data) {
16419
16586
  };
16420
16587
  const history = progressHistory.get(sessionId) || [];
16421
16588
  history.push(snapshot);
16422
- if (history.length > MAX_HISTORY2) {
16589
+ if (history.length > HISTORY.MAX_PROGRESS) {
16423
16590
  history.shift();
16424
16591
  }
16425
16592
  progressHistory.set(sessionId, history);
@@ -16466,33 +16633,10 @@ function formatCompact2(sessionId) {
16466
16633
  return formatCompact(snapshot);
16467
16634
  }
16468
16635
 
16469
- // src/shared/errors/patterns.ts
16470
- var ERROR_PATTERNS = {
16471
- TOOL_RESULT_MISSING: /tool_result_missing|tool result.*missing/i,
16472
- THINKING_BLOCK_ORDER: /thinking.*block.*order|thinking_block_order/i,
16473
- THINKING_DISABLED: /thinking.*disabled|thinking_disabled_violation/i,
16474
- RATE_LIMIT: /rate.?limit|too.?many.?requests|429/i,
16475
- CONTEXT_OVERFLOW: /context.?length|token.?limit|maximum.?context/i,
16476
- MESSAGE_ABORTED: /MessageAbortedError|AbortError/i,
16477
- NETWORK_ERROR: /network|ECONNREFUSED|ETIMEDOUT|fetch failed/i,
16478
- AUTH_ERROR: /unauthorized|401|403|invalid.*token/i
16479
- };
16480
-
16481
- // src/shared/errors/detection.ts
16482
- function detectErrorType(error45) {
16483
- const errorStr = typeof error45 === "string" ? error45 : error45?.message || error45?.name || String(error45);
16484
- for (const [type, pattern] of Object.entries(ERROR_PATTERNS)) {
16485
- if (pattern.test(errorStr)) {
16486
- return type;
16487
- }
16488
- }
16489
- return null;
16490
- }
16491
-
16492
16636
  // src/core/recovery/constants.ts
16493
- var MAX_RETRIES = 3;
16494
- var BASE_DELAY = 1e3;
16495
- var MAX_HISTORY3 = 100;
16637
+ var MAX_RETRIES = RECOVERY.MAX_ATTEMPTS;
16638
+ var BASE_DELAY = RECOVERY.BASE_DELAY_MS;
16639
+ var MAX_HISTORY = HISTORY.MAX_RECOVERY;
16496
16640
 
16497
16641
  // src/core/recovery/patterns.ts
16498
16642
  var errorPatterns = [
@@ -16577,7 +16721,7 @@ function handleError(context) {
16577
16721
  action,
16578
16722
  timestamp: /* @__PURE__ */ new Date()
16579
16723
  });
16580
- if (recoveryHistory.length > MAX_HISTORY3) {
16724
+ if (recoveryHistory.length > MAX_HISTORY) {
16581
16725
  recoveryHistory.shift();
16582
16726
  }
16583
16727
  return action;
@@ -16631,7 +16775,7 @@ async function handleSessionError(client, sessionID, error45, properties) {
16631
16775
  return false;
16632
16776
  }
16633
16777
  const now = Date.now();
16634
- if (now - state2.lastErrorTime < 5e3) {
16778
+ if (now - state2.lastErrorTime < BACKGROUND_TASK.RETRY_COOLDOWN_MS) {
16635
16779
  log2("[session-recovery] Too soon since last error, skipping", { sessionID });
16636
16780
  return false;
16637
16781
  }
@@ -16643,7 +16787,7 @@ async function handleSessionError(client, sessionID, error45, properties) {
16643
16787
  return false;
16644
16788
  }
16645
16789
  log2("[session-recovery] Detected error type", { sessionID, errorType, errorCount: state2.errorCount });
16646
- if (state2.errorCount > 3) {
16790
+ if (state2.errorCount > RECOVERY.MAX_ATTEMPTS) {
16647
16791
  log2("[session-recovery] Max recovery attempts exceeded", { sessionID });
16648
16792
  presets.warningMaxRetries();
16649
16793
  return false;
@@ -16653,16 +16797,16 @@ async function handleSessionError(client, sessionID, error45, properties) {
16653
16797
  let recoveryPrompt = null;
16654
16798
  let toastMessage = null;
16655
16799
  switch (errorType) {
16656
- case "TOOL_RESULT_MISSING":
16800
+ case ERROR_TYPE.TOOL_RESULT_MISSING:
16657
16801
  recoveryPrompt = TOOL_CRASH_RECOVERY_PROMPT;
16658
16802
  toastMessage = "Tool Crash Recovery";
16659
16803
  break;
16660
- case "THINKING_BLOCK_ORDER":
16661
- case "THINKING_DISABLED":
16804
+ case ERROR_TYPE.THINKING_BLOCK_ORDER:
16805
+ case ERROR_TYPE.THINKING_DISABLED:
16662
16806
  recoveryPrompt = THINKING_RECOVERY_PROMPT;
16663
16807
  toastMessage = "Thinking Block Recovery";
16664
16808
  break;
16665
- case "RATE_LIMIT":
16809
+ case ERROR_TYPE.RATE_LIMIT:
16666
16810
  const ctx = {
16667
16811
  sessionId: sessionID,
16668
16812
  error: error45 instanceof Error ? error45 : new Error(String(error45)),
@@ -16676,11 +16820,11 @@ async function handleSessionError(client, sessionID, error45, properties) {
16676
16820
  }
16677
16821
  state2.isRecovering = false;
16678
16822
  return true;
16679
- case "CONTEXT_OVERFLOW":
16823
+ case ERROR_TYPE.CONTEXT_OVERFLOW:
16680
16824
  toastMessage = "Context Overflow - Consider compaction";
16681
16825
  state2.isRecovering = false;
16682
16826
  return false;
16683
- case "MESSAGE_ABORTED":
16827
+ case ERROR_TYPE.MESSAGE_ABORTED:
16684
16828
  log2("[session-recovery] Message aborted by user, not recovering", { sessionID });
16685
16829
  state2.isRecovering = false;
16686
16830
  return false;
@@ -16825,10 +16969,10 @@ After launching, use list_tasks to monitor progress.
16825
16969
  // src/core/loop/todo-continuation.ts
16826
16970
  var sessionStates = /* @__PURE__ */ new Map();
16827
16971
  var COUNTDOWN_SECONDS = 2;
16828
- var TOAST_DURATION_MS = 1500;
16829
- var MIN_TIME_BETWEEN_CONTINUATIONS_MS = 3e3;
16830
- var COUNTDOWN_GRACE_PERIOD_MS = 500;
16831
- var ABORT_WINDOW_MS = 3e3;
16972
+ var TOAST_DURATION_MS = TOAST_DURATION.EXTRA_SHORT;
16973
+ var MIN_TIME_BETWEEN_CONTINUATIONS_MS = LOOP.MIN_TIME_BETWEEN_CHECKS_MS;
16974
+ var COUNTDOWN_GRACE_PERIOD_MS = LOOP.COUNTDOWN_GRACE_PERIOD_MS;
16975
+ var ABORT_WINDOW_MS = LOOP.ABORT_WINDOW_MS;
16832
16976
  function getState2(sessionID) {
16833
16977
  let state2 = sessionStates.get(sessionID);
16834
16978
  if (!state2) {
@@ -16981,7 +17125,7 @@ async function handleSessionIdle(client, sessionID, mainSessionID) {
16981
17125
  } catch {
16982
17126
  log2("[todo-continuation] Failed to re-fetch todos for continuation", { sessionID });
16983
17127
  }
16984
- }, COUNTDOWN_SECONDS * 1e3);
17128
+ }, COUNTDOWN_SECONDS * TIME.SECOND);
16985
17129
  }
16986
17130
  function handleUserMessage(sessionID) {
16987
17131
  const state2 = getState2(sessionID);
@@ -17160,9 +17304,9 @@ ${state2.prompt}
17160
17304
  }
17161
17305
 
17162
17306
  // src/core/loop/mission-seal-handler.ts
17163
- var COUNTDOWN_SECONDS2 = 3;
17164
- var TOAST_DURATION_MS2 = 1500;
17165
- var MIN_TIME_BETWEEN_CHECKS_MS = 3e3;
17307
+ var COUNTDOWN_SECONDS2 = LOOP.COUNTDOWN_SECONDS;
17308
+ var TOAST_DURATION_MS2 = TOAST_DURATION.EXTRA_SHORT;
17309
+ var MIN_TIME_BETWEEN_CHECKS_MS = LOOP.MIN_TIME_BETWEEN_CHECKS_MS;
17166
17310
  var sessionStates2 = /* @__PURE__ */ new Map();
17167
17311
  function getState3(sessionID) {
17168
17312
  let state2 = sessionStates2.get(sessionID);
@@ -17213,7 +17357,7 @@ async function showSealedToast(client, state2) {
17213
17357
  title: "\u{1F396}\uFE0F Mission Sealed!",
17214
17358
  message: `Completed after ${state2.iteration} iteration(s)`,
17215
17359
  variant: "success",
17216
- duration: 5e3
17360
+ duration: TOAST_DURATION.LONG
17217
17361
  }
17218
17362
  });
17219
17363
  }
@@ -17229,7 +17373,7 @@ async function showMaxIterationsToast(client, state2) {
17229
17373
  title: "\u26A0\uFE0F Mission Loop Stopped",
17230
17374
  message: `Max iterations (${state2.maxIterations}) reached`,
17231
17375
  variant: "warning",
17232
- duration: 5e3
17376
+ duration: TOAST_DURATION.LONG
17233
17377
  }
17234
17378
  });
17235
17379
  }
@@ -17478,8 +17622,8 @@ function createConfigHandler() {
17478
17622
  description: "Autonomous orchestrator - executes until mission complete",
17479
17623
  mode: "primary",
17480
17624
  prompt: commanderPrompt,
17481
- maxTokens: 64e3,
17482
- thinking: { type: "enabled", budgetTokens: 32e3 },
17625
+ maxTokens: AGENT_TOKENS.PRIMARY_MAX_TOKENS,
17626
+ thinking: { type: "enabled", budgetTokens: AGENT_TOKENS.PRIMARY_THINKING_BUDGET },
17483
17627
  color: "#FF6B6B"
17484
17628
  },
17485
17629
  // Consolidated subagents (4 agents instead of 6)
@@ -17488,7 +17632,7 @@ function createConfigHandler() {
17488
17632
  mode: "subagent",
17489
17633
  hidden: true,
17490
17634
  prompt: AGENTS[AGENT_NAMES.PLANNER]?.systemPrompt || "",
17491
- maxTokens: 32e3,
17635
+ maxTokens: AGENT_TOKENS.SUBAGENT_MAX_TOKENS,
17492
17636
  color: "#9B59B6"
17493
17637
  },
17494
17638
  [AGENT_NAMES.WORKER]: {
@@ -17496,7 +17640,7 @@ function createConfigHandler() {
17496
17640
  mode: "subagent",
17497
17641
  hidden: true,
17498
17642
  prompt: AGENTS[AGENT_NAMES.WORKER]?.systemPrompt || "",
17499
- maxTokens: 32e3,
17643
+ maxTokens: AGENT_TOKENS.SUBAGENT_MAX_TOKENS,
17500
17644
  color: "#E67E22"
17501
17645
  },
17502
17646
  [AGENT_NAMES.REVIEWER]: {
@@ -17504,7 +17648,7 @@ function createConfigHandler() {
17504
17648
  mode: "subagent",
17505
17649
  hidden: true,
17506
17650
  prompt: AGENTS[AGENT_NAMES.REVIEWER]?.systemPrompt || "",
17507
- maxTokens: 32e3,
17651
+ maxTokens: AGENT_TOKENS.SUBAGENT_MAX_TOKENS,
17508
17652
  color: "#27AE60"
17509
17653
  }
17510
17654
  };
@@ -17761,8 +17905,8 @@ Anomaly count: ${stateSession.anomalyCount}
17761
17905
  if (stateSession.anomalyCount > 0) {
17762
17906
  stateSession.anomalyCount = 0;
17763
17907
  }
17764
- if (toolOutput.output.length < 5e3) {
17765
- stateSession.lastHealthyOutput = toolOutput.output.substring(0, 1e3);
17908
+ if (toolOutput.output.length < TOOL_OUTPUT.SMALL_OUTPUT_THRESHOLD) {
17909
+ stateSession.lastHealthyOutput = toolOutput.output.substring(0, TOOL_OUTPUT.MAX_HEALTHY_OUTPUT_LENGTH);
17766
17910
  }
17767
17911
  }
17768
17912
  }