network-ai 4.15.2 → 5.0.0

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 (204) hide show
  1. package/INTEGRATION_GUIDE.md +11 -4
  2. package/QUICKSTART.md +31 -4
  3. package/README.md +37 -15
  4. package/bin/dashboard.ts +146 -0
  5. package/bin/mcp-server.ts +3 -2
  6. package/dist/adapters/adapter-registry.d.ts +33 -1
  7. package/dist/adapters/adapter-registry.d.ts.map +1 -1
  8. package/dist/adapters/adapter-registry.js +49 -0
  9. package/dist/adapters/adapter-registry.js.map +1 -1
  10. package/dist/adapters/anthropic-computer-use-adapter.d.ts +132 -0
  11. package/dist/adapters/anthropic-computer-use-adapter.d.ts.map +1 -0
  12. package/dist/adapters/anthropic-computer-use-adapter.js +180 -0
  13. package/dist/adapters/anthropic-computer-use-adapter.js.map +1 -0
  14. package/dist/adapters/browser-agent-adapter.d.ts +121 -0
  15. package/dist/adapters/browser-agent-adapter.d.ts.map +1 -0
  16. package/dist/adapters/browser-agent-adapter.js +219 -0
  17. package/dist/adapters/browser-agent-adapter.js.map +1 -0
  18. package/dist/adapters/copilot-adapter.d.ts +59 -0
  19. package/dist/adapters/copilot-adapter.d.ts.map +1 -0
  20. package/dist/adapters/copilot-adapter.js +132 -0
  21. package/dist/adapters/copilot-adapter.js.map +1 -0
  22. package/dist/adapters/index.d.ts +15 -1
  23. package/dist/adapters/index.d.ts.map +1 -1
  24. package/dist/adapters/index.js +22 -1
  25. package/dist/adapters/index.js.map +1 -1
  26. package/dist/adapters/langgraph-adapter.d.ts +70 -0
  27. package/dist/adapters/langgraph-adapter.d.ts.map +1 -0
  28. package/dist/adapters/langgraph-adapter.js +119 -0
  29. package/dist/adapters/langgraph-adapter.js.map +1 -0
  30. package/dist/adapters/openai-agents-adapter.d.ts +100 -0
  31. package/dist/adapters/openai-agents-adapter.d.ts.map +1 -0
  32. package/dist/adapters/openai-agents-adapter.js +118 -0
  33. package/dist/adapters/openai-agents-adapter.js.map +1 -0
  34. package/dist/adapters/pydantic-ai-adapter.d.ts +104 -0
  35. package/dist/adapters/pydantic-ai-adapter.d.ts.map +1 -0
  36. package/dist/adapters/pydantic-ai-adapter.js +163 -0
  37. package/dist/adapters/pydantic-ai-adapter.js.map +1 -0
  38. package/dist/adapters/vertex-ai-adapter.d.ts +122 -0
  39. package/dist/adapters/vertex-ai-adapter.d.ts.map +1 -0
  40. package/dist/adapters/vertex-ai-adapter.js +166 -0
  41. package/dist/adapters/vertex-ai-adapter.js.map +1 -0
  42. package/dist/bin/dashboard.d.ts +11 -0
  43. package/dist/bin/dashboard.d.ts.map +1 -0
  44. package/dist/bin/dashboard.js +135 -0
  45. package/dist/bin/dashboard.js.map +1 -0
  46. package/dist/bin/mcp-server.js +3 -2
  47. package/dist/bin/mcp-server.js.map +1 -1
  48. package/dist/index.d.ts +103 -559
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +295 -1074
  51. package/dist/index.js.map +1 -1
  52. package/dist/lib/adapter-test-harness.d.ts +88 -0
  53. package/dist/lib/adapter-test-harness.d.ts.map +1 -0
  54. package/dist/lib/adapter-test-harness.js +118 -0
  55. package/dist/lib/adapter-test-harness.js.map +1 -0
  56. package/dist/lib/agent-conversation.d.ts +115 -0
  57. package/dist/lib/agent-conversation.d.ts.map +1 -0
  58. package/dist/lib/agent-conversation.js +155 -0
  59. package/dist/lib/agent-conversation.js.map +1 -0
  60. package/dist/lib/agent-debate.d.ts +115 -0
  61. package/dist/lib/agent-debate.d.ts.map +1 -0
  62. package/dist/lib/agent-debate.js +146 -0
  63. package/dist/lib/agent-debate.js.map +1 -0
  64. package/dist/lib/agent-memory.d.ts +157 -0
  65. package/dist/lib/agent-memory.d.ts.map +1 -0
  66. package/dist/lib/agent-memory.js +336 -0
  67. package/dist/lib/agent-memory.js.map +1 -0
  68. package/dist/lib/agent-vcr.d.ts +133 -0
  69. package/dist/lib/agent-vcr.d.ts.map +1 -0
  70. package/dist/lib/agent-vcr.js +218 -0
  71. package/dist/lib/agent-vcr.js.map +1 -0
  72. package/dist/lib/anomaly-detector.d.ts +112 -0
  73. package/dist/lib/anomaly-detector.d.ts.map +1 -0
  74. package/dist/lib/anomaly-detector.js +178 -0
  75. package/dist/lib/anomaly-detector.js.map +1 -0
  76. package/dist/lib/approval-inbox.d.ts +147 -0
  77. package/dist/lib/approval-inbox.d.ts.map +1 -0
  78. package/dist/lib/approval-inbox.js +385 -0
  79. package/dist/lib/approval-inbox.js.map +1 -0
  80. package/dist/lib/auth-guardian.d.ts +170 -0
  81. package/dist/lib/auth-guardian.d.ts.map +1 -0
  82. package/dist/lib/auth-guardian.js +604 -0
  83. package/dist/lib/auth-guardian.js.map +1 -0
  84. package/dist/lib/auth-validator.d.ts +70 -0
  85. package/dist/lib/auth-validator.d.ts.map +1 -0
  86. package/dist/lib/auth-validator.js +32 -0
  87. package/dist/lib/auth-validator.js.map +1 -0
  88. package/dist/lib/blackboard-validator.d.ts +56 -0
  89. package/dist/lib/blackboard-validator.d.ts.map +1 -1
  90. package/dist/lib/blackboard-validator.js +181 -4
  91. package/dist/lib/blackboard-validator.js.map +1 -1
  92. package/dist/lib/comparison-runner.d.ts +99 -0
  93. package/dist/lib/comparison-runner.d.ts.map +1 -0
  94. package/dist/lib/comparison-runner.js +138 -0
  95. package/dist/lib/comparison-runner.js.map +1 -0
  96. package/dist/lib/config-watcher.d.ts +109 -0
  97. package/dist/lib/config-watcher.d.ts.map +1 -0
  98. package/dist/lib/config-watcher.js +215 -0
  99. package/dist/lib/config-watcher.js.map +1 -0
  100. package/dist/lib/cost-governor.d.ts +105 -0
  101. package/dist/lib/cost-governor.d.ts.map +1 -0
  102. package/dist/lib/cost-governor.js +128 -0
  103. package/dist/lib/cost-governor.js.map +1 -0
  104. package/dist/lib/cost-heatmap.d.ts +104 -0
  105. package/dist/lib/cost-heatmap.d.ts.map +1 -0
  106. package/dist/lib/cost-heatmap.js +161 -0
  107. package/dist/lib/cost-heatmap.js.map +1 -0
  108. package/dist/lib/coverage-reporter.d.ts +92 -0
  109. package/dist/lib/coverage-reporter.d.ts.map +1 -0
  110. package/dist/lib/coverage-reporter.js +177 -0
  111. package/dist/lib/coverage-reporter.js.map +1 -0
  112. package/dist/lib/dashboard-server.d.ts +71 -0
  113. package/dist/lib/dashboard-server.d.ts.map +1 -0
  114. package/dist/lib/dashboard-server.js +403 -0
  115. package/dist/lib/dashboard-server.js.map +1 -0
  116. package/dist/lib/dry-run.d.ts +73 -0
  117. package/dist/lib/dry-run.d.ts.map +1 -0
  118. package/dist/lib/dry-run.js +130 -0
  119. package/dist/lib/dry-run.js.map +1 -0
  120. package/dist/lib/errors.d.ts +15 -0
  121. package/dist/lib/errors.d.ts.map +1 -1
  122. package/dist/lib/errors.js +38 -0
  123. package/dist/lib/errors.js.map +1 -1
  124. package/dist/lib/event-bus.d.ts +167 -0
  125. package/dist/lib/event-bus.d.ts.map +1 -0
  126. package/dist/lib/event-bus.js +229 -0
  127. package/dist/lib/event-bus.js.map +1 -0
  128. package/dist/lib/explainability.d.ts +85 -0
  129. package/dist/lib/explainability.d.ts.map +1 -0
  130. package/dist/lib/explainability.js +102 -0
  131. package/dist/lib/explainability.js.map +1 -0
  132. package/dist/lib/goal-dsl.d.ts +157 -0
  133. package/dist/lib/goal-dsl.d.ts.map +1 -0
  134. package/dist/lib/goal-dsl.js +392 -0
  135. package/dist/lib/goal-dsl.js.map +1 -0
  136. package/dist/lib/job-queue.d.ts +183 -0
  137. package/dist/lib/job-queue.d.ts.map +1 -0
  138. package/dist/lib/job-queue.js +310 -0
  139. package/dist/lib/job-queue.js.map +1 -0
  140. package/dist/lib/learning-loop.d.ts +113 -0
  141. package/dist/lib/learning-loop.d.ts.map +1 -0
  142. package/dist/lib/learning-loop.js +181 -0
  143. package/dist/lib/learning-loop.js.map +1 -0
  144. package/dist/lib/lifecycle-hooks.d.ts +116 -0
  145. package/dist/lib/lifecycle-hooks.d.ts.map +1 -0
  146. package/dist/lib/lifecycle-hooks.js +148 -0
  147. package/dist/lib/lifecycle-hooks.js.map +1 -0
  148. package/dist/lib/locked-blackboard.d.ts.map +1 -1
  149. package/dist/lib/locked-blackboard.js +9 -5
  150. package/dist/lib/locked-blackboard.js.map +1 -1
  151. package/dist/lib/mcp-tool-consumer.d.ts +153 -0
  152. package/dist/lib/mcp-tool-consumer.d.ts.map +1 -0
  153. package/dist/lib/mcp-tool-consumer.js +320 -0
  154. package/dist/lib/mcp-tool-consumer.js.map +1 -0
  155. package/dist/lib/metrics.d.ts +119 -0
  156. package/dist/lib/metrics.d.ts.map +1 -0
  157. package/dist/lib/metrics.js +284 -0
  158. package/dist/lib/metrics.js.map +1 -0
  159. package/dist/lib/orchestrator-types.d.ts +309 -0
  160. package/dist/lib/orchestrator-types.d.ts.map +1 -0
  161. package/dist/lib/orchestrator-types.js +61 -0
  162. package/dist/lib/orchestrator-types.js.map +1 -0
  163. package/dist/lib/otel-bridge.d.ts +74 -0
  164. package/dist/lib/otel-bridge.d.ts.map +1 -0
  165. package/dist/lib/otel-bridge.js +167 -0
  166. package/dist/lib/otel-bridge.js.map +1 -0
  167. package/dist/lib/playground.d.ts +76 -0
  168. package/dist/lib/playground.d.ts.map +1 -0
  169. package/dist/lib/playground.js +224 -0
  170. package/dist/lib/playground.js.map +1 -0
  171. package/dist/lib/quadtree.d.ts +114 -0
  172. package/dist/lib/quadtree.d.ts.map +1 -0
  173. package/dist/lib/quadtree.js +259 -0
  174. package/dist/lib/quadtree.js.map +1 -0
  175. package/dist/lib/shared-blackboard.d.ts +101 -0
  176. package/dist/lib/shared-blackboard.d.ts.map +1 -0
  177. package/dist/lib/shared-blackboard.js +249 -0
  178. package/dist/lib/shared-blackboard.js.map +1 -0
  179. package/dist/lib/speculative-executor.d.ts +89 -0
  180. package/dist/lib/speculative-executor.d.ts.map +1 -0
  181. package/dist/lib/speculative-executor.js +107 -0
  182. package/dist/lib/speculative-executor.js.map +1 -0
  183. package/dist/lib/swarm-transport.d.ts +150 -0
  184. package/dist/lib/swarm-transport.d.ts.map +1 -0
  185. package/dist/lib/swarm-transport.js +307 -0
  186. package/dist/lib/swarm-transport.js.map +1 -0
  187. package/dist/lib/task-decomposer.d.ts +41 -0
  188. package/dist/lib/task-decomposer.d.ts.map +1 -0
  189. package/dist/lib/task-decomposer.js +272 -0
  190. package/dist/lib/task-decomposer.js.map +1 -0
  191. package/dist/lib/timeline-scrubber.d.ts +84 -0
  192. package/dist/lib/timeline-scrubber.d.ts.map +1 -0
  193. package/dist/lib/timeline-scrubber.js +173 -0
  194. package/dist/lib/timeline-scrubber.js.map +1 -0
  195. package/dist/lib/topology.d.ts +361 -0
  196. package/dist/lib/topology.d.ts.map +1 -0
  197. package/dist/lib/topology.js +591 -0
  198. package/dist/lib/topology.js.map +1 -0
  199. package/dist/security.d.ts +95 -0
  200. package/dist/security.d.ts.map +1 -1
  201. package/dist/security.js +267 -5
  202. package/dist/security.js.map +1 -1
  203. package/package.json +7 -5
  204. package/types/agent-adapter.d.ts +5 -0
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ /**
3
+ * Goal DSL — Schema-driven goal definitions for swarm orchestration
4
+ *
5
+ * Provides a declarative way to define multi-agent goals with constraints,
6
+ * dependencies, and validation rules. Goals can be defined in TypeScript
7
+ * objects or parsed from YAML/JSON strings.
8
+ *
9
+ * Features:
10
+ * - Typed GoalDefinition with tasks, constraints, and outputs
11
+ * - Dependency graph validation (cycle detection, missing refs)
12
+ * - Constraint checking (budget, timeout, required agents)
13
+ * - YAML/JSON parsing (YAML via simple built-in parser, no deps)
14
+ * - Goal compilation to executable task DAGs
15
+ *
16
+ * Usage:
17
+ * const goal = parseGoal(`
18
+ * name: research-and-summarize
19
+ * tasks:
20
+ * - id: research
21
+ * agent: researcher
22
+ * action: search
23
+ * - id: summarize
24
+ * agent: writer
25
+ * action: summarize
26
+ * depends: [research]
27
+ * `);
28
+ * const plan = compileGoal(goal);
29
+ *
30
+ * @module GoalDSL
31
+ * @version 1.0.0
32
+ */
33
+ Object.defineProperty(exports, "__esModule", { value: true });
34
+ exports.parseGoal = parseGoal;
35
+ exports.goalFromObject = goalFromObject;
36
+ exports.validateGoal = validateGoal;
37
+ exports.compileGoal = compileGoal;
38
+ // ============================================================================
39
+ // PARSER
40
+ // ============================================================================
41
+ /**
42
+ * Parse a goal from a YAML-like or JSON string.
43
+ *
44
+ * Supports a simple YAML subset (no anchors, tags, or multi-doc):
45
+ * - Key: value pairs
46
+ * - Lists with `- item` syntax
47
+ * - Inline arrays `[a, b, c]`
48
+ * - Nested indentation
49
+ * - JSON input (auto-detected)
50
+ */
51
+ function parseGoal(input) {
52
+ const trimmed = input.trim();
53
+ // Try JSON first
54
+ if (trimmed.startsWith('{')) {
55
+ const parsed = JSON.parse(trimmed);
56
+ return normalizeGoal(parsed);
57
+ }
58
+ // Simple YAML-like parser
59
+ return parseSimpleYaml(trimmed);
60
+ }
61
+ /** Parse from a plain object (e.g. loaded from file) */
62
+ function goalFromObject(obj) {
63
+ return normalizeGoal(obj);
64
+ }
65
+ // ============================================================================
66
+ // VALIDATOR
67
+ // ============================================================================
68
+ /**
69
+ * Validate a goal definition for correctness.
70
+ * Checks for cycles, missing dependencies, duplicate IDs, and required fields.
71
+ */
72
+ function validateGoal(goal) {
73
+ const errors = [];
74
+ // Empty tasks
75
+ if (!goal.tasks || goal.tasks.length === 0) {
76
+ errors.push({ type: 'empty_tasks', message: 'Goal must have at least one task' });
77
+ return { valid: false, errors };
78
+ }
79
+ // Duplicate IDs
80
+ const idSet = new Set();
81
+ for (const task of goal.tasks) {
82
+ if (idSet.has(task.id)) {
83
+ errors.push({ type: 'duplicate_id', message: `Duplicate task ID: '${task.id}'`, taskId: task.id });
84
+ }
85
+ idSet.add(task.id);
86
+ }
87
+ // Required fields
88
+ for (const task of goal.tasks) {
89
+ if (!task.id || typeof task.id !== 'string') {
90
+ errors.push({ type: 'invalid_field', message: 'Task missing required field: id', taskId: task.id });
91
+ }
92
+ if (!task.agent || typeof task.agent !== 'string') {
93
+ errors.push({ type: 'missing_agent', message: `Task '${task.id}' missing required field: agent`, taskId: task.id });
94
+ }
95
+ if (!task.action || typeof task.action !== 'string') {
96
+ errors.push({ type: 'invalid_field', message: `Task '${task.id}' missing required field: action`, taskId: task.id });
97
+ }
98
+ }
99
+ // Missing dependencies
100
+ for (const task of goal.tasks) {
101
+ if (task.depends) {
102
+ for (const dep of task.depends) {
103
+ if (!idSet.has(dep)) {
104
+ errors.push({
105
+ type: 'missing_dependency',
106
+ message: `Task '${task.id}' depends on unknown task '${dep}'`,
107
+ taskId: task.id,
108
+ });
109
+ }
110
+ }
111
+ }
112
+ }
113
+ // Cycle detection (Kahn's algorithm)
114
+ if (errors.length === 0) {
115
+ const hasCycle = detectCycle(goal.tasks);
116
+ if (hasCycle) {
117
+ errors.push({ type: 'cycle', message: 'Goal task graph contains a cycle' });
118
+ }
119
+ }
120
+ return { valid: errors.length === 0, errors };
121
+ }
122
+ // ============================================================================
123
+ // COMPILER
124
+ // ============================================================================
125
+ /**
126
+ * Compile a validated goal into an executable plan with layered parallelism.
127
+ * Performs topological sort to determine execution layers.
128
+ *
129
+ * @throws If the goal is invalid.
130
+ */
131
+ function compileGoal(goal) {
132
+ const validation = validateGoal(goal);
133
+ if (!validation.valid) {
134
+ throw new Error(`Invalid goal: ${validation.errors.map((e) => e.message).join('; ')}`);
135
+ }
136
+ const taskMap = new Map(goal.tasks.map((t) => [t.id, t]));
137
+ const adjacency = new Map();
138
+ // Build adjacency (task → dependents)
139
+ for (const task of goal.tasks) {
140
+ if (!adjacency.has(task.id))
141
+ adjacency.set(task.id, []);
142
+ if (task.depends) {
143
+ for (const dep of task.depends) {
144
+ const deps = adjacency.get(dep) ?? [];
145
+ deps.push(task.id);
146
+ adjacency.set(dep, deps);
147
+ }
148
+ }
149
+ }
150
+ // Topological sort into layers
151
+ const inDegree = new Map();
152
+ for (const task of goal.tasks) {
153
+ inDegree.set(task.id, task.depends?.length ?? 0);
154
+ }
155
+ const layers = [];
156
+ const taskOrder = [];
157
+ const remaining = new Set(goal.tasks.map((t) => t.id));
158
+ let layerIndex = 0;
159
+ while (remaining.size > 0) {
160
+ const ready = [];
161
+ for (const id of remaining) {
162
+ if ((inDegree.get(id) ?? 0) <= 0) {
163
+ ready.push(id);
164
+ }
165
+ }
166
+ if (ready.length === 0)
167
+ break; // Safety: shouldn't happen after validation
168
+ layers.push({ index: layerIndex++, taskIds: ready });
169
+ taskOrder.push(...ready);
170
+ for (const id of ready) {
171
+ remaining.delete(id);
172
+ const dependents = adjacency.get(id) ?? [];
173
+ for (const dep of dependents) {
174
+ inDegree.set(dep, (inDegree.get(dep) ?? 1) - 1);
175
+ }
176
+ }
177
+ }
178
+ const maxWidth = Math.max(...layers.map((l) => l.taskIds.length), 0);
179
+ return {
180
+ definition: goal,
181
+ layers,
182
+ depth: layers.length,
183
+ maxWidth,
184
+ taskOrder,
185
+ adjacency,
186
+ };
187
+ }
188
+ // ============================================================================
189
+ // INTERNAL HELPERS
190
+ // ============================================================================
191
+ function detectCycle(tasks) {
192
+ const inDegree = new Map();
193
+ const adj = new Map();
194
+ for (const task of tasks) {
195
+ inDegree.set(task.id, 0);
196
+ adj.set(task.id, []);
197
+ }
198
+ for (const task of tasks) {
199
+ if (task.depends) {
200
+ for (const dep of task.depends) {
201
+ adj.get(dep)?.push(task.id);
202
+ inDegree.set(task.id, (inDegree.get(task.id) ?? 0) + 1);
203
+ }
204
+ }
205
+ }
206
+ const queue = [];
207
+ for (const [id, deg] of inDegree) {
208
+ if (deg === 0)
209
+ queue.push(id);
210
+ }
211
+ let visited = 0;
212
+ while (queue.length > 0) {
213
+ const node = queue.shift();
214
+ visited++;
215
+ for (const next of adj.get(node) ?? []) {
216
+ const newDeg = (inDegree.get(next) ?? 1) - 1;
217
+ inDegree.set(next, newDeg);
218
+ if (newDeg === 0)
219
+ queue.push(next);
220
+ }
221
+ }
222
+ return visited !== tasks.length;
223
+ }
224
+ function normalizeGoal(raw) {
225
+ return {
226
+ name: raw.name ?? 'unnamed',
227
+ description: raw.description,
228
+ version: raw.version,
229
+ tasks: (raw.tasks ?? []).map((t) => ({
230
+ id: t.id,
231
+ agent: t.agent,
232
+ action: t.action,
233
+ depends: t.depends,
234
+ params: t.params,
235
+ timeoutMs: t.timeoutMs,
236
+ critical: t.critical ?? true,
237
+ retries: t.retries ?? 0,
238
+ outputKey: t.outputKey,
239
+ })),
240
+ constraints: raw.constraints,
241
+ outputs: raw.outputs,
242
+ metadata: raw.metadata,
243
+ };
244
+ }
245
+ function parseSimpleYaml(input) {
246
+ const lines = input.split('\n');
247
+ const result = {};
248
+ let currentTasks = [];
249
+ let currentTask = null;
250
+ let currentOutputs = [];
251
+ let currentOutput = null;
252
+ let section = 'root';
253
+ let constraints = {};
254
+ for (const rawLine of lines) {
255
+ const line = rawLine.replace(/\r$/, '');
256
+ const trimmedLine = line.trimStart();
257
+ if (trimmedLine === '' || trimmedLine.startsWith('#'))
258
+ continue;
259
+ const indent = line.length - trimmedLine.length;
260
+ // Top-level keys
261
+ if (indent === 0 && trimmedLine.includes(':')) {
262
+ // Save previous state
263
+ if (currentTask) {
264
+ currentTasks.push(currentTask);
265
+ currentTask = null;
266
+ }
267
+ if (currentOutput) {
268
+ currentOutputs.push(currentOutput);
269
+ currentOutput = null;
270
+ }
271
+ const [key, ...valParts] = trimmedLine.split(':');
272
+ const val = valParts.join(':').trim();
273
+ if (key.trim() === 'tasks') {
274
+ section = 'tasks';
275
+ continue;
276
+ }
277
+ if (key.trim() === 'constraints') {
278
+ section = 'constraints';
279
+ continue;
280
+ }
281
+ if (key.trim() === 'outputs') {
282
+ section = 'outputs';
283
+ continue;
284
+ }
285
+ result[key.trim()] = parseYamlValue(val);
286
+ section = 'root';
287
+ continue;
288
+ }
289
+ // Task list items
290
+ if (section === 'tasks' || section === 'task') {
291
+ if (trimmedLine.startsWith('- ')) {
292
+ if (currentTask)
293
+ currentTasks.push(currentTask);
294
+ currentTask = {};
295
+ section = 'task';
296
+ // Parse inline key:value after -
297
+ const afterDash = trimmedLine.slice(2).trim();
298
+ if (afterDash.includes(':')) {
299
+ const [k, ...vParts] = afterDash.split(':');
300
+ currentTask[k.trim()] = parseYamlValue(vParts.join(':').trim());
301
+ }
302
+ continue;
303
+ }
304
+ if (currentTask && trimmedLine.includes(':')) {
305
+ const [k, ...vParts] = trimmedLine.split(':');
306
+ currentTask[k.trim()] = parseYamlValue(vParts.join(':').trim());
307
+ continue;
308
+ }
309
+ }
310
+ // Constraints
311
+ if (section === 'constraints' && trimmedLine.includes(':')) {
312
+ const [k, ...vParts] = trimmedLine.split(':');
313
+ constraints[k.trim()] = parseYamlValue(vParts.join(':').trim());
314
+ continue;
315
+ }
316
+ // Outputs
317
+ if (section === 'outputs' || section === 'output') {
318
+ if (trimmedLine.startsWith('- ')) {
319
+ if (currentOutput)
320
+ currentOutputs.push(currentOutput);
321
+ currentOutput = {};
322
+ section = 'output';
323
+ const afterDash = trimmedLine.slice(2).trim();
324
+ if (afterDash.includes(':')) {
325
+ const [k, ...vParts] = afterDash.split(':');
326
+ currentOutput[k.trim()] = parseYamlValue(vParts.join(':').trim());
327
+ }
328
+ continue;
329
+ }
330
+ if (currentOutput && trimmedLine.includes(':')) {
331
+ const [k, ...vParts] = trimmedLine.split(':');
332
+ currentOutput[k.trim()] = parseYamlValue(vParts.join(':').trim());
333
+ continue;
334
+ }
335
+ }
336
+ }
337
+ // Flush remaining
338
+ if (currentTask)
339
+ currentTasks.push(currentTask);
340
+ if (currentOutput)
341
+ currentOutputs.push(currentOutput);
342
+ const goal = {
343
+ name: result['name'] ?? 'unnamed',
344
+ description: result['description'],
345
+ version: result['version'],
346
+ tasks: currentTasks.map((t) => ({
347
+ id: t['id'] ?? '',
348
+ agent: t['agent'] ?? '',
349
+ action: t['action'] ?? '',
350
+ depends: t['depends'],
351
+ params: t['params'],
352
+ timeoutMs: t['timeoutMs'],
353
+ critical: t['critical'],
354
+ retries: t['retries'],
355
+ outputKey: t['outputKey'],
356
+ })),
357
+ constraints: Object.keys(constraints).length > 0 ? constraints : undefined,
358
+ outputs: currentOutputs.length > 0 ? currentOutputs.map((o) => ({
359
+ key: o['key'] ?? '',
360
+ type: o['type'],
361
+ required: o['required'],
362
+ description: o['description'],
363
+ })) : undefined,
364
+ metadata: result['metadata'],
365
+ };
366
+ return normalizeGoal(goal);
367
+ }
368
+ function parseYamlValue(val) {
369
+ if (val === '' || val === undefined)
370
+ return undefined;
371
+ if (val === 'true')
372
+ return true;
373
+ if (val === 'false')
374
+ return false;
375
+ if (val === 'null')
376
+ return null;
377
+ // Inline array [a, b, c]
378
+ if (val.startsWith('[') && val.endsWith(']')) {
379
+ const inner = val.slice(1, -1);
380
+ return inner.split(',').map((s) => parseYamlValue(s.trim()));
381
+ }
382
+ // Number
383
+ const num = Number(val);
384
+ if (!isNaN(num) && val !== '')
385
+ return num;
386
+ // Strip quotes
387
+ if ((val.startsWith('"') && val.endsWith('"')) || (val.startsWith("'") && val.endsWith("'"))) {
388
+ return val.slice(1, -1);
389
+ }
390
+ return val;
391
+ }
392
+ //# sourceMappingURL=goal-dsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-dsl.js","sourceRoot":"","sources":["../../lib/goal-dsl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Persistent Job Queue — Resumable task orchestration with durable storage
3
+ *
4
+ * Provides a job queue that persists jobs to disk (JSON files) with support
5
+ * for status tracking, retries, priority ordering, and crash recovery.
6
+ * Designed for long-running swarm orchestration tasks that must survive
7
+ * process restarts.
8
+ *
9
+ * Backends:
10
+ * - FileJobStore (built-in) — JSON files in a directory
11
+ * - IJobStore interface — implement for SQLite, Postgres, etc.
12
+ *
13
+ * Features:
14
+ * - Priority-based FIFO queue
15
+ * - Configurable retries with exponential backoff
16
+ * - Job timeout enforcement
17
+ * - Crash recovery: stale "running" jobs are re-queued on startup
18
+ * - Pluggable storage backends
19
+ *
20
+ * Usage:
21
+ * const queue = new JobQueue({ store: new FileJobStore('./data/jobs') });
22
+ * await queue.start();
23
+ * await queue.enqueue({ type: 'delegateTask', payload: { agentId: 'analyzer', ... } });
24
+ *
25
+ * @module JobQueue
26
+ * @version 1.0.0
27
+ */
28
+ import { EventEmitter } from 'events';
29
+ /** Job status */
30
+ export type JobStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
31
+ /** Priority level (lower = higher priority) */
32
+ export type JobPriority = 0 | 1 | 2 | 3 | 4 | 5;
33
+ /** A persistent job record */
34
+ export interface JobRecord {
35
+ /** Unique job ID */
36
+ id: string;
37
+ /** Job type (e.g. 'delegateTask', 'batchProcess') */
38
+ type: string;
39
+ /** Job payload — any serializable data */
40
+ payload: Record<string, unknown>;
41
+ /** Current status */
42
+ status: JobStatus;
43
+ /** Priority (0 = highest, 5 = lowest; default: 2) */
44
+ priority: JobPriority;
45
+ /** Number of attempts so far */
46
+ attempts: number;
47
+ /** Maximum attempts (default: 3) */
48
+ maxAttempts: number;
49
+ /** When the job was created */
50
+ createdAt: number;
51
+ /** When the job was last updated */
52
+ updatedAt: number;
53
+ /** When the job started running */
54
+ startedAt?: number;
55
+ /** When the job completed or failed */
56
+ completedAt?: number;
57
+ /** Result data (on success) */
58
+ result?: unknown;
59
+ /** Error message (on failure) */
60
+ error?: string;
61
+ /** Job timeout in ms (default: 300000 = 5 min) */
62
+ timeoutMs: number;
63
+ /** Metadata for tracking */
64
+ metadata?: Record<string, unknown>;
65
+ }
66
+ /** Options for creating a new job */
67
+ export interface JobCreateOptions {
68
+ /** Job type */
69
+ type: string;
70
+ /** Job payload */
71
+ payload: Record<string, unknown>;
72
+ /** Priority (default: 2) */
73
+ priority?: JobPriority;
74
+ /** Max attempts (default: 3) */
75
+ maxAttempts?: number;
76
+ /** Timeout in ms (default: 300000) */
77
+ timeoutMs?: number;
78
+ /** Additional metadata */
79
+ metadata?: Record<string, unknown>;
80
+ }
81
+ /**
82
+ * Job handler function — processes a single job.
83
+ * Return a result on success, or throw to fail.
84
+ */
85
+ export type JobHandler = (job: JobRecord) => Promise<unknown>;
86
+ /** Job queue configuration */
87
+ export interface JobQueueConfig {
88
+ /** Storage backend */
89
+ store: IJobStore;
90
+ /** Polling interval in ms (default: 1000) */
91
+ pollIntervalMs?: number;
92
+ /** Maximum concurrent jobs (default: 5) */
93
+ concurrency?: number;
94
+ /** Base retry delay in ms (default: 1000) */
95
+ retryBaseDelayMs?: number;
96
+ /** Maximum retry delay in ms (default: 60000) */
97
+ retryMaxDelayMs?: number;
98
+ /** Stale job threshold in ms — re-queue "running" jobs older than this (default: 600000 = 10 min) */
99
+ staleThresholdMs?: number;
100
+ }
101
+ /** Stats snapshot */
102
+ export interface JobQueueStats {
103
+ pending: number;
104
+ running: number;
105
+ completed: number;
106
+ failed: number;
107
+ cancelled: number;
108
+ total: number;
109
+ }
110
+ /**
111
+ * Pluggable storage backend for the job queue.
112
+ * Implement this for SQLite, Postgres, Redis, etc.
113
+ */
114
+ export interface IJobStore {
115
+ /** Initialize the store (create tables/dirs) */
116
+ init(): Promise<void>;
117
+ /** Save or update a job */
118
+ save(job: JobRecord): Promise<void>;
119
+ /** Get a job by ID */
120
+ get(id: string): Promise<JobRecord | null>;
121
+ /** Delete a job by ID */
122
+ delete(id: string): Promise<void>;
123
+ /** List jobs by status, ordered by priority ASC then createdAt ASC */
124
+ listByStatus(status: JobStatus, limit?: number): Promise<JobRecord[]>;
125
+ /** Count jobs by status */
126
+ countByStatus(status: JobStatus): Promise<number>;
127
+ /** Find stale running jobs (startedAt < threshold) */
128
+ findStale(thresholdMs: number): Promise<JobRecord[]>;
129
+ }
130
+ /**
131
+ * File-system job store — persists jobs as individual JSON files.
132
+ * Simple and dependency-free. Suitable for single-node deployments.
133
+ */
134
+ export declare class FileJobStore implements IJobStore {
135
+ private readonly dir;
136
+ constructor(dir: string);
137
+ init(): Promise<void>;
138
+ save(job: JobRecord): Promise<void>;
139
+ get(id: string): Promise<JobRecord | null>;
140
+ delete(id: string): Promise<void>;
141
+ listByStatus(status: JobStatus, limit?: number): Promise<JobRecord[]>;
142
+ countByStatus(status: JobStatus): Promise<number>;
143
+ findStale(thresholdMs: number): Promise<JobRecord[]>;
144
+ }
145
+ /**
146
+ * Persistent job queue with priority ordering, retries, and crash recovery.
147
+ *
148
+ * Register handlers for job types, then start the queue. Jobs are
149
+ * persisted to the configured store and survive process restarts.
150
+ */
151
+ export declare class JobQueue extends EventEmitter {
152
+ private handlers;
153
+ private activeJobs;
154
+ private pollTimer;
155
+ private running;
156
+ private readonly store;
157
+ private readonly pollIntervalMs;
158
+ private readonly concurrency;
159
+ private readonly retryBaseDelayMs;
160
+ private readonly retryMaxDelayMs;
161
+ private readonly staleThresholdMs;
162
+ constructor(config: JobQueueConfig);
163
+ /** Register a handler for a job type */
164
+ handle(type: string, handler: JobHandler): void;
165
+ /** Start the queue: init store, recover stale jobs, begin polling */
166
+ start(): Promise<void>;
167
+ /** Stop the queue (active jobs continue but no new ones are dequeued) */
168
+ stop(): Promise<void>;
169
+ /** Enqueue a new job */
170
+ enqueue(options: JobCreateOptions): Promise<JobRecord>;
171
+ /** Cancel a pending or running job */
172
+ cancel(jobId: string): Promise<JobRecord | null>;
173
+ /** Get a job by ID */
174
+ getJob(jobId: string): Promise<JobRecord | null>;
175
+ /** Get queue stats */
176
+ stats(): Promise<JobQueueStats>;
177
+ /** Whether the queue is running */
178
+ get isRunning(): boolean;
179
+ private poll;
180
+ private processJob;
181
+ private recoverStaleJobs;
182
+ }
183
+ //# sourceMappingURL=job-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-queue.d.ts","sourceRoot":"","sources":["../../lib/job-queue.ts"],"names":[],"mappings":"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"}