attocode 0.1.9 → 0.2.1

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 (146) hide show
  1. package/CHANGELOG.md +141 -1
  2. package/dist/src/adapters.d.ts.map +1 -1
  3. package/dist/src/adapters.js +7 -0
  4. package/dist/src/adapters.js.map +1 -1
  5. package/dist/src/agent.d.ts +24 -0
  6. package/dist/src/agent.d.ts.map +1 -1
  7. package/dist/src/agent.js +539 -330
  8. package/dist/src/agent.js.map +1 -1
  9. package/dist/src/cli.d.ts +6 -0
  10. package/dist/src/cli.d.ts.map +1 -1
  11. package/dist/src/cli.js +37 -0
  12. package/dist/src/cli.js.map +1 -1
  13. package/dist/src/commands/init-commands.d.ts.map +1 -1
  14. package/dist/src/commands/init-commands.js +57 -0
  15. package/dist/src/commands/init-commands.js.map +1 -1
  16. package/dist/src/core/protocol/types.d.ts +14 -14
  17. package/dist/src/defaults.d.ts +1 -1
  18. package/dist/src/defaults.d.ts.map +1 -1
  19. package/dist/src/defaults.js +1 -0
  20. package/dist/src/defaults.js.map +1 -1
  21. package/dist/src/integrations/agent-registry.d.ts +7 -2
  22. package/dist/src/integrations/agent-registry.d.ts.map +1 -1
  23. package/dist/src/integrations/agent-registry.js +30 -4
  24. package/dist/src/integrations/agent-registry.js.map +1 -1
  25. package/dist/src/integrations/budget-pool.d.ts +13 -1
  26. package/dist/src/integrations/budget-pool.d.ts.map +1 -1
  27. package/dist/src/integrations/budget-pool.js +17 -0
  28. package/dist/src/integrations/budget-pool.js.map +1 -1
  29. package/dist/src/integrations/economics.d.ts +9 -0
  30. package/dist/src/integrations/economics.d.ts.map +1 -1
  31. package/dist/src/integrations/economics.js +25 -0
  32. package/dist/src/integrations/economics.js.map +1 -1
  33. package/dist/src/integrations/index.d.ts +2 -1
  34. package/dist/src/integrations/index.d.ts.map +1 -1
  35. package/dist/src/integrations/index.js +3 -1
  36. package/dist/src/integrations/index.js.map +1 -1
  37. package/dist/src/integrations/learning-store.d.ts.map +1 -1
  38. package/dist/src/integrations/learning-store.js +6 -0
  39. package/dist/src/integrations/learning-store.js.map +1 -1
  40. package/dist/src/integrations/routing.d.ts +2 -1
  41. package/dist/src/integrations/routing.d.ts.map +1 -1
  42. package/dist/src/integrations/routing.js.map +1 -1
  43. package/dist/src/integrations/smart-decomposer.d.ts.map +1 -1
  44. package/dist/src/integrations/smart-decomposer.js +7 -0
  45. package/dist/src/integrations/smart-decomposer.js.map +1 -1
  46. package/dist/src/integrations/swarm/index.d.ts +29 -0
  47. package/dist/src/integrations/swarm/index.d.ts.map +1 -0
  48. package/dist/src/integrations/swarm/index.js +29 -0
  49. package/dist/src/integrations/swarm/index.js.map +1 -0
  50. package/dist/src/integrations/swarm/model-selector.d.ts +55 -0
  51. package/dist/src/integrations/swarm/model-selector.d.ts.map +1 -0
  52. package/dist/src/integrations/swarm/model-selector.js +342 -0
  53. package/dist/src/integrations/swarm/model-selector.js.map +1 -0
  54. package/dist/src/integrations/swarm/request-throttle.d.ts +112 -0
  55. package/dist/src/integrations/swarm/request-throttle.d.ts.map +1 -0
  56. package/dist/src/integrations/swarm/request-throttle.js +263 -0
  57. package/dist/src/integrations/swarm/request-throttle.js.map +1 -0
  58. package/dist/src/integrations/swarm/swarm-budget.d.ts +31 -0
  59. package/dist/src/integrations/swarm/swarm-budget.d.ts.map +1 -0
  60. package/dist/src/integrations/swarm/swarm-budget.js +36 -0
  61. package/dist/src/integrations/swarm/swarm-budget.js.map +1 -0
  62. package/dist/src/integrations/swarm/swarm-config-loader.d.ts +51 -0
  63. package/dist/src/integrations/swarm/swarm-config-loader.d.ts.map +1 -0
  64. package/dist/src/integrations/swarm/swarm-config-loader.js +458 -0
  65. package/dist/src/integrations/swarm/swarm-config-loader.js.map +1 -0
  66. package/dist/src/integrations/swarm/swarm-event-bridge.d.ts +145 -0
  67. package/dist/src/integrations/swarm/swarm-event-bridge.d.ts.map +1 -0
  68. package/dist/src/integrations/swarm/swarm-event-bridge.js +443 -0
  69. package/dist/src/integrations/swarm/swarm-event-bridge.js.map +1 -0
  70. package/dist/src/integrations/swarm/swarm-events.d.ts +157 -0
  71. package/dist/src/integrations/swarm/swarm-events.d.ts.map +1 -0
  72. package/dist/src/integrations/swarm/swarm-events.js +81 -0
  73. package/dist/src/integrations/swarm/swarm-events.js.map +1 -0
  74. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts +166 -0
  75. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts.map +1 -0
  76. package/dist/src/integrations/swarm/swarm-orchestrator.js +1114 -0
  77. package/dist/src/integrations/swarm/swarm-orchestrator.js.map +1 -0
  78. package/dist/src/integrations/swarm/swarm-quality-gate.d.ts +29 -0
  79. package/dist/src/integrations/swarm/swarm-quality-gate.d.ts.map +1 -0
  80. package/dist/src/integrations/swarm/swarm-quality-gate.js +85 -0
  81. package/dist/src/integrations/swarm/swarm-quality-gate.js.map +1 -0
  82. package/dist/src/integrations/swarm/swarm-state-store.d.ts +31 -0
  83. package/dist/src/integrations/swarm/swarm-state-store.d.ts.map +1 -0
  84. package/dist/src/integrations/swarm/swarm-state-store.js +91 -0
  85. package/dist/src/integrations/swarm/swarm-state-store.js.map +1 -0
  86. package/dist/src/integrations/swarm/task-queue.d.ts +128 -0
  87. package/dist/src/integrations/swarm/task-queue.d.ts.map +1 -0
  88. package/dist/src/integrations/swarm/task-queue.js +379 -0
  89. package/dist/src/integrations/swarm/task-queue.js.map +1 -0
  90. package/dist/src/integrations/swarm/types.d.ts +425 -0
  91. package/dist/src/integrations/swarm/types.d.ts.map +1 -0
  92. package/dist/src/integrations/swarm/types.js +96 -0
  93. package/dist/src/integrations/swarm/types.js.map +1 -0
  94. package/dist/src/integrations/swarm/worker-pool.d.ts +96 -0
  95. package/dist/src/integrations/swarm/worker-pool.d.ts.map +1 -0
  96. package/dist/src/integrations/swarm/worker-pool.js +269 -0
  97. package/dist/src/integrations/swarm/worker-pool.js.map +1 -0
  98. package/dist/src/main.js +88 -0
  99. package/dist/src/main.js.map +1 -1
  100. package/dist/src/modes/repl.d.ts +1 -0
  101. package/dist/src/modes/repl.d.ts.map +1 -1
  102. package/dist/src/modes/repl.js +2 -1
  103. package/dist/src/modes/repl.js.map +1 -1
  104. package/dist/src/modes/tui.d.ts +1 -0
  105. package/dist/src/modes/tui.d.ts.map +1 -1
  106. package/dist/src/modes/tui.js +3 -1
  107. package/dist/src/modes/tui.js.map +1 -1
  108. package/dist/src/providers/adapters/anthropic.d.ts.map +1 -1
  109. package/dist/src/providers/adapters/anthropic.js +20 -3
  110. package/dist/src/providers/adapters/anthropic.js.map +1 -1
  111. package/dist/src/providers/adapters/openrouter.d.ts +14 -0
  112. package/dist/src/providers/adapters/openrouter.d.ts.map +1 -1
  113. package/dist/src/providers/adapters/openrouter.js +56 -2
  114. package/dist/src/providers/adapters/openrouter.js.map +1 -1
  115. package/dist/src/providers/resilient-fetch.d.ts +2 -0
  116. package/dist/src/providers/resilient-fetch.d.ts.map +1 -1
  117. package/dist/src/providers/resilient-fetch.js +27 -3
  118. package/dist/src/providers/resilient-fetch.js.map +1 -1
  119. package/dist/src/providers/types.d.ts +15 -0
  120. package/dist/src/providers/types.d.ts.map +1 -1
  121. package/dist/src/providers/types.js.map +1 -1
  122. package/dist/src/tools/bash.d.ts +4 -4
  123. package/dist/src/tools/bash.d.ts.map +1 -1
  124. package/dist/src/tools/bash.js +2 -1
  125. package/dist/src/tools/bash.js.map +1 -1
  126. package/dist/src/tools/coercion.d.ts +14 -0
  127. package/dist/src/tools/coercion.d.ts.map +1 -0
  128. package/dist/src/tools/coercion.js +25 -0
  129. package/dist/src/tools/coercion.js.map +1 -0
  130. package/dist/src/tools/file.d.ts +5 -5
  131. package/dist/src/tools/file.d.ts.map +1 -1
  132. package/dist/src/tools/file.js +2 -1
  133. package/dist/src/tools/file.js.map +1 -1
  134. package/dist/src/tui/app.d.ts.map +1 -1
  135. package/dist/src/tui/app.js +83 -5
  136. package/dist/src/tui/app.js.map +1 -1
  137. package/dist/src/tui/components/SwarmStatusPanel.d.ts +27 -0
  138. package/dist/src/tui/components/SwarmStatusPanel.d.ts.map +1 -0
  139. package/dist/src/tui/components/SwarmStatusPanel.js +108 -0
  140. package/dist/src/tui/components/SwarmStatusPanel.js.map +1 -0
  141. package/dist/src/tui/event-display.d.ts.map +1 -1
  142. package/dist/src/tui/event-display.js +8 -1
  143. package/dist/src/tui/event-display.js.map +1 -1
  144. package/dist/src/types.d.ts +11 -1
  145. package/dist/src/types.d.ts.map +1 -1
  146. package/package.json +1 -1
@@ -0,0 +1,458 @@
1
+ /**
2
+ * Swarm Config Loader
3
+ *
4
+ * YAML parser + config loader + merge logic for swarm.yaml files.
5
+ * Supports nested objects, block arrays, multiline strings, and type coercion.
6
+ *
7
+ * Search order:
8
+ * 1. {cwd}/.attocode/swarm.yaml
9
+ * 2. {cwd}/.attocode/swarm.yml
10
+ * 3. {cwd}/.attocode/swarm.json (fallback)
11
+ * 4. {homedir}/.attocode/swarm.yaml
12
+ * 5. null if none found
13
+ *
14
+ * Merge order: DEFAULT < yaml < CLI overrides
15
+ */
16
+ import { existsSync, readFileSync } from 'node:fs';
17
+ import { join } from 'node:path';
18
+ import { homedir } from 'node:os';
19
+ // ─── YAML Parser ────────────────────────────────────────────────────────────
20
+ /**
21
+ * Parse a simple YAML string into a nested object.
22
+ *
23
+ * Supports:
24
+ * - Key-value pairs (key: value)
25
+ * - Nested objects via indentation (2-space indent)
26
+ * - Block arrays (- item, including objects within arrays)
27
+ * - Multiline strings (| indicator)
28
+ * - Type coercion (bool, number, null)
29
+ * - Comments (# ...) and blank lines
30
+ *
31
+ * NOT a general-purpose YAML parser — handles the swarm.yaml schema.
32
+ */
33
+ export function parseSwarmYaml(content) {
34
+ const lines = content.split('\n');
35
+ const result = {};
36
+ const stack = [
37
+ { indent: -1, obj: result },
38
+ ];
39
+ let multilineKey = null;
40
+ let multilineIndent = 0;
41
+ let multilineLines = [];
42
+ let multilineTarget = result;
43
+ // State for array parsing
44
+ let arrayKey = null;
45
+ let arrayTarget = result;
46
+ let currentArrayItem = null;
47
+ let arrayItemIndent = 0;
48
+ for (let i = 0; i < lines.length; i++) {
49
+ const rawLine = lines[i];
50
+ // Handle multiline string continuation
51
+ if (multilineKey !== null) {
52
+ const stripped = rawLine.replace(/\s+$/, '');
53
+ if (stripped === '' || getIndent(rawLine) > multilineIndent) {
54
+ // Part of the multiline block
55
+ const textContent = rawLine.slice(Math.min(multilineIndent + 2, rawLine.length));
56
+ multilineLines.push(textContent);
57
+ continue;
58
+ }
59
+ else {
60
+ // End of multiline block
61
+ multilineTarget[multilineKey] = multilineLines.join('\n').replace(/\n+$/, '');
62
+ multilineKey = null;
63
+ multilineLines = [];
64
+ // Fall through to process this line normally
65
+ }
66
+ }
67
+ // Skip blank lines and comments
68
+ const trimmed = rawLine.trim();
69
+ if (trimmed === '' || trimmed.startsWith('#'))
70
+ continue;
71
+ const indent = getIndent(rawLine);
72
+ // Strip inline comments (but not inside quoted strings)
73
+ const commentFree = stripInlineComment(trimmed);
74
+ // Handle array items (- value or - key: value)
75
+ if (commentFree.startsWith('- ')) {
76
+ const itemContent = commentFree.slice(2).trim();
77
+ if (arrayKey === null) {
78
+ // Array without a preceding key — skip
79
+ continue;
80
+ }
81
+ // If itemContent contains a colon, it's an object in array
82
+ if (itemContent.includes(':')) {
83
+ // Start of new array object item
84
+ if (currentArrayItem && arrayKey) {
85
+ // Push previous item
86
+ pushToArray(arrayTarget, arrayKey, currentArrayItem);
87
+ }
88
+ currentArrayItem = {};
89
+ arrayItemIndent = indent;
90
+ const [key, val] = splitKeyValue(itemContent);
91
+ if (key) {
92
+ currentArrayItem[key] = coerceValue(val);
93
+ }
94
+ continue;
95
+ }
96
+ // Simple array item (scalar)
97
+ if (arrayKey) {
98
+ pushToArray(arrayTarget, arrayKey, coerceValue(itemContent));
99
+ continue;
100
+ }
101
+ continue;
102
+ }
103
+ // If we're in an array item and this line is indented deeper, it's a property
104
+ if (currentArrayItem && indent > arrayItemIndent) {
105
+ const [key, val] = splitKeyValue(commentFree);
106
+ if (key) {
107
+ if (val === '|') {
108
+ // Multiline string within array item
109
+ multilineKey = key;
110
+ multilineIndent = indent;
111
+ multilineLines = [];
112
+ multilineTarget = currentArrayItem;
113
+ }
114
+ else {
115
+ currentArrayItem[key] = coerceValue(val);
116
+ }
117
+ }
118
+ continue;
119
+ }
120
+ // End of array item section — flush
121
+ if (currentArrayItem && arrayKey) {
122
+ pushToArray(arrayTarget, arrayKey, currentArrayItem);
123
+ currentArrayItem = null;
124
+ }
125
+ // Regular key: value line
126
+ if (commentFree.includes(':')) {
127
+ const [key, val] = splitKeyValue(commentFree);
128
+ if (!key)
129
+ continue;
130
+ // Pop stack to find correct parent
131
+ while (stack.length > 1 && stack[stack.length - 1].indent >= indent) {
132
+ stack.pop();
133
+ }
134
+ const parent = stack[stack.length - 1].obj;
135
+ if (val === '' || val === undefined) {
136
+ // Nested object or array — check next non-blank line
137
+ const nextContent = peekNextContent(lines, i + 1);
138
+ if (nextContent && nextContent.trimmed.startsWith('- ')) {
139
+ // It's an array
140
+ parent[key] = [];
141
+ arrayKey = key;
142
+ arrayTarget = parent;
143
+ arrayItemIndent = getIndent(nextContent.raw);
144
+ }
145
+ else {
146
+ // It's a nested object
147
+ const child = {};
148
+ parent[key] = child;
149
+ stack.push({ indent, obj: child });
150
+ arrayKey = null;
151
+ }
152
+ }
153
+ else if (val === '|') {
154
+ // Multiline string
155
+ multilineKey = key;
156
+ multilineIndent = indent;
157
+ multilineLines = [];
158
+ multilineTarget = parent;
159
+ }
160
+ else {
161
+ parent[key] = coerceValue(val);
162
+ // If this is at a different scope than arrayKey, clear array tracking
163
+ if (indent <= (arrayItemIndent - 2)) {
164
+ arrayKey = null;
165
+ }
166
+ }
167
+ }
168
+ }
169
+ // Flush any remaining multiline or array state
170
+ if (multilineKey !== null) {
171
+ multilineTarget[multilineKey] = multilineLines.join('\n').replace(/\n+$/, '');
172
+ }
173
+ if (currentArrayItem && arrayKey) {
174
+ pushToArray(arrayTarget, arrayKey, currentArrayItem);
175
+ }
176
+ return result;
177
+ }
178
+ // ─── Config Loading ─────────────────────────────────────────────────────────
179
+ /**
180
+ * Load swarm config from filesystem.
181
+ * Returns null if no config file found.
182
+ */
183
+ export function loadSwarmYamlConfig(cwd) {
184
+ const workDir = cwd ?? process.cwd();
185
+ const home = homedir();
186
+ const searchPaths = [
187
+ join(workDir, '.attocode', 'swarm.yaml'),
188
+ join(workDir, '.attocode', 'swarm.yml'),
189
+ join(workDir, '.attocode', 'swarm.json'),
190
+ join(home, '.attocode', 'swarm.yaml'),
191
+ ];
192
+ for (const p of searchPaths) {
193
+ if (existsSync(p)) {
194
+ try {
195
+ const content = readFileSync(p, 'utf-8');
196
+ if (p.endsWith('.json')) {
197
+ return JSON.parse(content);
198
+ }
199
+ return parseSwarmYaml(content);
200
+ }
201
+ catch {
202
+ // Continue to next path
203
+ }
204
+ }
205
+ }
206
+ return null;
207
+ }
208
+ // ─── Config Mapping ─────────────────────────────────────────────────────────
209
+ /**
210
+ * Map parsed YAML config to SwarmConfig fields.
211
+ */
212
+ export function yamlToSwarmConfig(yaml, orchestratorModel) {
213
+ const config = {};
214
+ // models section
215
+ const models = yaml.models;
216
+ if (models) {
217
+ if (models.paidOnly !== undefined)
218
+ config.paidOnly = Boolean(models.paidOnly);
219
+ if (models.paid_only !== undefined)
220
+ config.paidOnly = Boolean(models.paid_only);
221
+ if (models.qualityGate)
222
+ config.qualityGateModel = String(models.qualityGate);
223
+ if (models.planner)
224
+ config.plannerModel = String(models.planner);
225
+ // models.orchestrator: null means use --model flag (handled by merge)
226
+ }
227
+ // throttle
228
+ if (yaml.throttle !== undefined) {
229
+ const t = yaml.throttle;
230
+ if (t === 'free' || t === 'paid' || t === false) {
231
+ config.throttle = t;
232
+ }
233
+ }
234
+ // workers
235
+ const workers = yaml.workers;
236
+ if (workers && Array.isArray(workers)) {
237
+ config.workers = workers.map(w => {
238
+ const spec = {
239
+ name: String(w.name ?? 'worker'),
240
+ model: String(w.model ?? orchestratorModel),
241
+ capabilities: (Array.isArray(w.capabilities)
242
+ ? w.capabilities.map(String)
243
+ : typeof w.capabilities === 'string'
244
+ ? w.capabilities.replace(/^\[|\]$/g, '').split(',').map((s) => s.trim()).filter(Boolean)
245
+ : ['code']),
246
+ };
247
+ if (w.contextWindow)
248
+ spec.contextWindow = Number(w.contextWindow);
249
+ if (w.persona)
250
+ spec.persona = String(w.persona);
251
+ if (w.role)
252
+ spec.role = String(w.role);
253
+ if (w.maxTokens)
254
+ spec.maxTokens = Number(w.maxTokens);
255
+ if (w.allowedTools && Array.isArray(w.allowedTools)) {
256
+ spec.allowedTools = w.allowedTools.map(String);
257
+ }
258
+ if (w.deniedTools && Array.isArray(w.deniedTools)) {
259
+ spec.deniedTools = w.deniedTools.map(String);
260
+ }
261
+ return spec;
262
+ });
263
+ }
264
+ // philosophy
265
+ if (yaml.philosophy)
266
+ config.philosophy = String(yaml.philosophy);
267
+ // communication
268
+ const comm = yaml.communication;
269
+ if (comm) {
270
+ config.communication = {
271
+ blackboard: comm.blackboard !== undefined ? Boolean(comm.blackboard) : undefined,
272
+ dependencyContextMaxLength: comm.dependencyContextMaxLength
273
+ ? Number(comm.dependencyContextMaxLength) : undefined,
274
+ includeFileList: comm.includeFileList !== undefined ? Boolean(comm.includeFileList) : undefined,
275
+ };
276
+ }
277
+ // tasks
278
+ const tasks = yaml.tasks;
279
+ if (tasks) {
280
+ if (tasks.maxSubtasks) {
281
+ // Not a direct SwarmConfig field but could be used by decomposer
282
+ }
283
+ if (tasks.priorities && Array.isArray(tasks.priorities)) {
284
+ config.decompositionPriorities = tasks.priorities.map(String);
285
+ }
286
+ if (tasks.fileConflictStrategy) {
287
+ config.fileConflictStrategy = String(tasks.fileConflictStrategy);
288
+ }
289
+ }
290
+ // budget
291
+ const budget = yaml.budget;
292
+ if (budget) {
293
+ if (budget.totalTokens || budget.total_tokens)
294
+ config.totalBudget = Number(budget.totalTokens ?? budget.total_tokens);
295
+ if (budget.maxCost || budget.max_cost)
296
+ config.maxCost = Number(budget.maxCost ?? budget.max_cost);
297
+ if (budget.maxConcurrency || budget.max_concurrency)
298
+ config.maxConcurrency = Number(budget.maxConcurrency ?? budget.max_concurrency);
299
+ if (budget.maxTokensPerWorker || budget.max_tokens_per_worker)
300
+ config.maxTokensPerWorker = Number(budget.maxTokensPerWorker ?? budget.max_tokens_per_worker);
301
+ if (budget.workerTimeout || budget.worker_timeout)
302
+ config.workerTimeout = Number(budget.workerTimeout ?? budget.worker_timeout);
303
+ if (budget.workerMaxIterations)
304
+ config.workerMaxIterations = Number(budget.workerMaxIterations);
305
+ if (budget.dispatchStaggerMs)
306
+ config.dispatchStaggerMs = Number(budget.dispatchStaggerMs);
307
+ }
308
+ // quality
309
+ const quality = yaml.quality;
310
+ if (quality) {
311
+ if (quality.enabled !== undefined)
312
+ config.qualityGates = Boolean(quality.enabled);
313
+ // minScore, skipOnRetry, skipUnderPressure not in SwarmConfig yet, but could be added
314
+ }
315
+ // resilience
316
+ const resilience = yaml.resilience;
317
+ if (resilience) {
318
+ if (resilience.workerRetries !== undefined)
319
+ config.workerRetries = Number(resilience.workerRetries);
320
+ if (resilience.rateLimitRetries !== undefined)
321
+ config.rateLimitRetries = Number(resilience.rateLimitRetries);
322
+ if (resilience.modelFailover !== undefined)
323
+ config.enableModelFailover = Boolean(resilience.modelFailover);
324
+ }
325
+ // hierarchy
326
+ const hierarchy = yaml.hierarchy;
327
+ if (hierarchy) {
328
+ config.hierarchy = {};
329
+ const manager = hierarchy.manager;
330
+ if (manager) {
331
+ config.hierarchy.manager = {
332
+ model: manager.model ? String(manager.model) : undefined,
333
+ persona: manager.persona ? String(manager.persona) : undefined,
334
+ };
335
+ }
336
+ const judge = hierarchy.judge;
337
+ if (judge) {
338
+ config.hierarchy.judge = {
339
+ model: judge.model ? String(judge.model) : undefined,
340
+ persona: judge.persona ? String(judge.persona) : undefined,
341
+ };
342
+ }
343
+ }
344
+ // features
345
+ const features = yaml.features;
346
+ if (features) {
347
+ if (features.planning !== undefined)
348
+ config.enablePlanning = Boolean(features.planning);
349
+ if (features.waveReview !== undefined)
350
+ config.enableWaveReview = Boolean(features.waveReview);
351
+ if (features.verification !== undefined)
352
+ config.enableVerification = Boolean(features.verification);
353
+ if (features.persistence !== undefined)
354
+ config.enablePersistence = Boolean(features.persistence);
355
+ }
356
+ return config;
357
+ }
358
+ // ─── Config Merge ───────────────────────────────────────────────────────────
359
+ /**
360
+ * Merge configs: DEFAULT < yaml < CLI overrides.
361
+ */
362
+ export function mergeSwarmConfigs(defaults, yamlConfig, cliOverrides) {
363
+ // Start with defaults + orchestratorModel
364
+ const merged = {
365
+ ...defaults,
366
+ orchestratorModel: cliOverrides.orchestratorModel,
367
+ workers: [],
368
+ };
369
+ // Apply YAML config
370
+ if (yamlConfig) {
371
+ for (const [key, value] of Object.entries(yamlConfig)) {
372
+ if (value !== undefined && value !== null) {
373
+ merged[key] = value;
374
+ }
375
+ }
376
+ }
377
+ // Apply CLI overrides (highest priority)
378
+ if (cliOverrides.paidOnly !== undefined) {
379
+ merged.paidOnly = cliOverrides.paidOnly;
380
+ }
381
+ if (cliOverrides.resumeSessionId) {
382
+ merged.resumeSessionId = cliOverrides.resumeSessionId;
383
+ }
384
+ // When paidOnly and no explicit throttle from yaml: default to 'paid'
385
+ if (merged.paidOnly && !yamlConfig?.throttle) {
386
+ merged.throttle = 'paid';
387
+ }
388
+ return merged;
389
+ }
390
+ // ─── Helper Functions ───────────────────────────────────────────────────────
391
+ function getIndent(line) {
392
+ const match = line.match(/^(\s*)/);
393
+ return match ? match[1].length : 0;
394
+ }
395
+ function splitKeyValue(s) {
396
+ const idx = s.indexOf(':');
397
+ if (idx === -1)
398
+ return ['', s];
399
+ const key = s.slice(0, idx).trim();
400
+ const val = s.slice(idx + 1).trim();
401
+ // Remove surrounding quotes
402
+ if ((val.startsWith("'") && val.endsWith("'")) || (val.startsWith('"') && val.endsWith('"'))) {
403
+ return [key, val.slice(1, -1)];
404
+ }
405
+ return [key, val];
406
+ }
407
+ function coerceValue(val) {
408
+ if (val === 'true')
409
+ return true;
410
+ if (val === 'false')
411
+ return false;
412
+ if (val === 'null' || val === '~')
413
+ return null;
414
+ if (val === '')
415
+ return '';
416
+ // Check for number
417
+ if (/^-?\d+(\.\d+)?$/.test(val)) {
418
+ const num = Number(val);
419
+ if (!isNaN(num))
420
+ return num;
421
+ }
422
+ // Remove surrounding quotes
423
+ if ((val.startsWith("'") && val.endsWith("'")) || (val.startsWith('"') && val.endsWith('"'))) {
424
+ return val.slice(1, -1);
425
+ }
426
+ return val;
427
+ }
428
+ function stripInlineComment(s) {
429
+ // Don't strip # inside quoted strings
430
+ let inSingle = false;
431
+ let inDouble = false;
432
+ for (let i = 0; i < s.length; i++) {
433
+ if (s[i] === "'" && !inDouble)
434
+ inSingle = !inSingle;
435
+ if (s[i] === '"' && !inSingle)
436
+ inDouble = !inDouble;
437
+ if (s[i] === '#' && !inSingle && !inDouble && i > 0 && s[i - 1] === ' ') {
438
+ return s.slice(0, i).trim();
439
+ }
440
+ }
441
+ return s;
442
+ }
443
+ function pushToArray(obj, key, value) {
444
+ if (!Array.isArray(obj[key])) {
445
+ obj[key] = [];
446
+ }
447
+ obj[key].push(value);
448
+ }
449
+ function peekNextContent(lines, from) {
450
+ for (let i = from; i < lines.length; i++) {
451
+ const trimmed = lines[i].trim();
452
+ if (trimmed !== '' && !trimmed.startsWith('#')) {
453
+ return { raw: lines[i], trimmed };
454
+ }
455
+ }
456
+ return null;
457
+ }
458
+ //# sourceMappingURL=swarm-config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm-config-loader.js","sourceRoot":"","sources":["../../../../src/integrations/swarm/swarm-config-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Swarm Event Bridge
3
+ *
4
+ * Bridges swarm events to the filesystem for the trace dashboard to consume.
5
+ * Writes events to .agent/swarm-live/events.jsonl (append-only)
6
+ * and state snapshots to .agent/swarm-live/state.json (overwritten).
7
+ */
8
+ import type { SwarmOrchestrator } from './swarm-orchestrator.js';
9
+ import type { SwarmEvent } from './swarm-events.js';
10
+ import type { SwarmStatus, SwarmTask, OrchestratorDecision, ModelHealthRecord, VerificationResult, SwarmPlan } from './types.js';
11
+ /** Timestamped event written to events.jsonl */
12
+ export interface TimestampedSwarmEvent {
13
+ ts: string;
14
+ seq: number;
15
+ event: SwarmEvent;
16
+ }
17
+ /** Full live state snapshot written to state.json */
18
+ export interface SwarmLiveState {
19
+ active: boolean;
20
+ updatedAt: string;
21
+ lastSeq: number;
22
+ status: SwarmStatus | null;
23
+ tasks: SwarmTask[];
24
+ edges: [string, string][];
25
+ config: {
26
+ maxConcurrency: number;
27
+ totalBudget: number;
28
+ maxCost: number;
29
+ workerModels: string[];
30
+ hierarchy?: {
31
+ manager?: {
32
+ model?: string;
33
+ };
34
+ judge?: {
35
+ model?: string;
36
+ };
37
+ };
38
+ };
39
+ timeline: Array<{
40
+ ts: string;
41
+ seq: number;
42
+ type: string;
43
+ tokensUsed: number;
44
+ costUsed: number;
45
+ completedCount: number;
46
+ failedCount: number;
47
+ }>;
48
+ errors: Array<{
49
+ ts: string;
50
+ taskId?: string;
51
+ phase: string;
52
+ message: string;
53
+ }>;
54
+ decisions: OrchestratorDecision[];
55
+ plan?: {
56
+ acceptanceCriteria: SwarmPlan['acceptanceCriteria'];
57
+ integrationTestPlan?: SwarmPlan['integrationTestPlan'];
58
+ };
59
+ verification?: VerificationResult;
60
+ modelHealth: ModelHealthRecord[];
61
+ workerLogFiles: string[];
62
+ }
63
+ export interface SwarmEventBridgeOptions {
64
+ /** Output directory for live files (default: '.agent/swarm-live') */
65
+ outputDir?: string;
66
+ /** Max lines before rotating events.jsonl (default: 5000) */
67
+ maxLines?: number;
68
+ /** Max state writes per second (default: 5) */
69
+ maxStateWritesPerSec?: number;
70
+ }
71
+ export declare class SwarmEventBridge {
72
+ private outputDir;
73
+ private maxLines;
74
+ private minStateIntervalMs;
75
+ private seq;
76
+ private lineCount;
77
+ private eventsStream;
78
+ private lastStateWrite;
79
+ private stateWriteTimer;
80
+ private pendingState;
81
+ private closed;
82
+ private tasks;
83
+ private edges;
84
+ private config;
85
+ private timeline;
86
+ private errors;
87
+ private lastStatus;
88
+ private decisions;
89
+ private plan?;
90
+ private verification?;
91
+ private modelHealth;
92
+ private workerLogFiles;
93
+ constructor(options?: SwarmEventBridgeOptions);
94
+ /**
95
+ * Attach to an orchestrator and subscribe to its events.
96
+ * Returns an unsubscribe function.
97
+ */
98
+ attach(orchestrator: SwarmOrchestrator): () => void;
99
+ /**
100
+ * Handle a single swarm event.
101
+ */
102
+ private handleEvent;
103
+ /**
104
+ * Update accumulated state from an event.
105
+ */
106
+ private updateAccumulatedState;
107
+ /**
108
+ * Update a task in the accumulated map (partial update).
109
+ */
110
+ private updateTask;
111
+ /**
112
+ * Build the current SwarmLiveState snapshot.
113
+ */
114
+ private buildState;
115
+ /**
116
+ * Initialize output directory and reset files.
117
+ */
118
+ private initOutputDir;
119
+ /**
120
+ * Append a timestamped event to events.jsonl.
121
+ */
122
+ private appendEvent;
123
+ /**
124
+ * Rotate events.jsonl by archiving and starting fresh.
125
+ */
126
+ private rotateEvents;
127
+ /**
128
+ * Write state.json, debounced to max N writes/sec.
129
+ */
130
+ private writeStateDebouncedOrImmediate;
131
+ /**
132
+ * Synchronously write state.json.
133
+ */
134
+ private writeStateSync;
135
+ /**
136
+ * Close the bridge, flush pending writes.
137
+ */
138
+ close(): void;
139
+ /**
140
+ * Set task list and dependency edges from the orchestrator's task queue.
141
+ * Call this after decomposition to populate the DAG.
142
+ */
143
+ setTasks(tasks: SwarmTask[]): void;
144
+ }
145
+ //# sourceMappingURL=swarm-event-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm-event-bridge.d.ts","sourceRoot":"","sources":["../../../../src/integrations/swarm/swarm-event-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIjI,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC1B,MAAM,EAAE;QACN,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,SAAS,CAAC,EAAE;YACV,OAAO,CAAC,EAAE;gBAAE,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;YAC7B,KAAK,CAAC,EAAE;gBAAE,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SAC5B,CAAC;KACH,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IAEH,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE;QAAE,kBAAkB,EAAE,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAA;KAAE,CAAC;IACvH,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAID,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,kBAAkB,CAAS;IAEnC,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,eAAe,CAA8C;IACrE,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,MAAM,CAAS;IAGvB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,MAAM,CAAmF;IACjG,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,UAAU,CAA4B;IAE9C,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAC,CAAqB;IAC1C,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,cAAc,CAAgB;gBAE1B,OAAO,GAAE,uBAA4B;IAMjD;;;OAGG;IACH,MAAM,CAAC,YAAY,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAMnD;;OAEG;IACH,OAAO,CAAC,WAAW;IA2CnB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+L9B;;OAEG;IACH,OAAO,CAAC,UAAU;IAmBlB;;OAEG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,OAAO,CAAC,8BAA8B;IA4BtC;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,KAAK,IAAI,IAAI;IAqBb;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;CAUnC"}