network-ai 4.15.3 → 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 +266 -4
  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,229 @@
1
+ "use strict";
2
+ /**
3
+ * OrchestratorEventBus — Central event stream for replay & time-travel debugging.
4
+ *
5
+ * Collects events from all orchestrator subsystems (blackboard, auth, adapters,
6
+ * topology, decisions) into a single monotonically-sequenced stream with periodic
7
+ * state snapshots for efficient point-in-time reconstruction.
8
+ *
9
+ * @module EventBus
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.OrchestratorEventBus = void 0;
13
+ const events_1 = require("events");
14
+ // Severity ordering for filtering
15
+ const SEVERITY_ORDER = {
16
+ trace: 0,
17
+ info: 1,
18
+ warn: 2,
19
+ error: 3,
20
+ };
21
+ // ============================================================================
22
+ // EVENT BUS
23
+ // ============================================================================
24
+ /**
25
+ * Central event bus for the orchestrator.
26
+ *
27
+ * Provides:
28
+ * - Unified monotonic event stream from all subsystems
29
+ * - Periodic state snapshots for O(1) point-in-time reconstruction
30
+ * - Replay with filtering (source, agent, severity, correlation)
31
+ * - Configurable retention (max events, max snapshots)
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const bus = new OrchestratorEventBus();
36
+ * bus.publish('blackboard', 'write', 'info', { key: 'x', value: 42 }, 'agent-1');
37
+ * bus.snapshot({ blackboard: bb.getSnapshot(), agents: {} });
38
+ * const replay = bus.replay({ fromSeq: 0, toSeq: 100 });
39
+ * ```
40
+ */
41
+ class OrchestratorEventBus extends events_1.EventEmitter {
42
+ events = [];
43
+ snapshots = [];
44
+ seq = 0;
45
+ maxEvents;
46
+ maxSnapshots;
47
+ snapshotInterval;
48
+ eventsSinceSnapshot = 0;
49
+ constructor(options) {
50
+ super();
51
+ this.maxEvents = options?.maxEvents ?? 50_000;
52
+ this.maxSnapshots = options?.maxSnapshots ?? 100;
53
+ this.snapshotInterval = options?.snapshotInterval ?? 0;
54
+ }
55
+ /**
56
+ * Publish an event to the bus.
57
+ * Returns the assigned sequence number.
58
+ */
59
+ publish(source, type, severity, data, agentId, correlationId) {
60
+ const event = {
61
+ seq: this.seq++,
62
+ timestamp: new Date().toISOString(),
63
+ source,
64
+ type,
65
+ severity,
66
+ agentId,
67
+ correlationId,
68
+ data,
69
+ };
70
+ this.events.push(event);
71
+ this.eventsSinceSnapshot++;
72
+ // Evict oldest
73
+ if (this.events.length > this.maxEvents) {
74
+ this.events.splice(0, this.events.length - this.maxEvents);
75
+ }
76
+ this.emit('event', event);
77
+ return event.seq;
78
+ }
79
+ /**
80
+ * Take a state snapshot at the current sequence position.
81
+ */
82
+ snapshot(state) {
83
+ const snap = {
84
+ atSeq: this.seq - 1,
85
+ timestamp: new Date().toISOString(),
86
+ blackboard: state.blackboard,
87
+ agents: state.agents,
88
+ budget: state.budget,
89
+ metadata: state.metadata,
90
+ };
91
+ this.snapshots.push(snap);
92
+ this.eventsSinceSnapshot = 0;
93
+ // Evict oldest snapshots
94
+ if (this.snapshots.length > this.maxSnapshots) {
95
+ this.snapshots.splice(0, this.snapshots.length - this.maxSnapshots);
96
+ }
97
+ this.emit('snapshot', snap);
98
+ return snap;
99
+ }
100
+ /**
101
+ * Check if an automatic snapshot should be taken (called internally after publish).
102
+ * Returns true if a snapshot is due. Callers must provide state via `snapshot()`.
103
+ */
104
+ isSnapshotDue() {
105
+ return this.snapshotInterval > 0 && this.eventsSinceSnapshot >= this.snapshotInterval;
106
+ }
107
+ /**
108
+ * Replay events with optional filtering.
109
+ * Returns the nearest base snapshot + matching events.
110
+ */
111
+ replay(options) {
112
+ const fromSeq = options?.fromSeq ?? 0;
113
+ const toSeq = options?.toSeq ?? this.seq;
114
+ const minSev = options?.minSeverity ? SEVERITY_ORDER[options.minSeverity] : 0;
115
+ // Find nearest snapshot at or before fromSeq
116
+ let baseSnapshot = null;
117
+ for (let i = this.snapshots.length - 1; i >= 0; i--) {
118
+ if (this.snapshots[i].atSeq <= fromSeq) {
119
+ baseSnapshot = this.snapshots[i];
120
+ break;
121
+ }
122
+ }
123
+ // Filter events
124
+ const filtered = this.events.filter((e) => {
125
+ if (e.seq < fromSeq || e.seq > toSeq)
126
+ return false;
127
+ if (options?.sources && !options.sources.includes(e.source))
128
+ return false;
129
+ if (options?.agentId && e.agentId !== options.agentId)
130
+ return false;
131
+ if (options?.correlationId && e.correlationId !== options.correlationId)
132
+ return false;
133
+ if (SEVERITY_ORDER[e.severity] < minSev)
134
+ return false;
135
+ return true;
136
+ });
137
+ return {
138
+ baseSnapshot,
139
+ events: filtered,
140
+ totalEvents: this.events.length,
141
+ };
142
+ }
143
+ /**
144
+ * Get the event at a specific sequence number.
145
+ */
146
+ getEvent(seq) {
147
+ return this.events.find((e) => e.seq === seq);
148
+ }
149
+ /**
150
+ * Get the most recent N events.
151
+ */
152
+ recent(count) {
153
+ return this.events.slice(-count);
154
+ }
155
+ /**
156
+ * Get all snapshots.
157
+ */
158
+ getSnapshots() {
159
+ return [...this.snapshots];
160
+ }
161
+ /**
162
+ * Find the nearest snapshot at or before a given sequence.
163
+ */
164
+ snapshotAt(seq) {
165
+ for (let i = this.snapshots.length - 1; i >= 0; i--) {
166
+ if (this.snapshots[i].atSeq <= seq) {
167
+ return this.snapshots[i];
168
+ }
169
+ }
170
+ return null;
171
+ }
172
+ /** Current sequence counter value (next event will get this seq). */
173
+ get currentSeq() {
174
+ return this.seq;
175
+ }
176
+ /** Total stored events. */
177
+ get size() {
178
+ return this.events.length;
179
+ }
180
+ /** Total stored snapshots. */
181
+ get snapshotCount() {
182
+ return this.snapshots.length;
183
+ }
184
+ /** Clear all events and snapshots, reset sequence. */
185
+ clear() {
186
+ this.events.length = 0;
187
+ this.snapshots.length = 0;
188
+ this.seq = 0;
189
+ this.eventsSinceSnapshot = 0;
190
+ }
191
+ /**
192
+ * Export the full stream (events + snapshots) as a serializable object.
193
+ */
194
+ export() {
195
+ return {
196
+ events: [...this.events],
197
+ snapshots: [...this.snapshots],
198
+ };
199
+ }
200
+ /**
201
+ * Import a previously exported stream, merging into current state.
202
+ */
203
+ import(data) {
204
+ if (!Array.isArray(data.events) || !Array.isArray(data.snapshots)) {
205
+ throw new Error('Invalid import data: expected { events: [], snapshots: [] }');
206
+ }
207
+ for (const e of data.events) {
208
+ this.events.push(e);
209
+ if (e.seq >= this.seq) {
210
+ this.seq = e.seq + 1;
211
+ }
212
+ }
213
+ for (const s of data.snapshots) {
214
+ this.snapshots.push(s);
215
+ }
216
+ // Sort by sequence
217
+ this.events.sort((a, b) => a.seq - b.seq);
218
+ this.snapshots.sort((a, b) => a.atSeq - b.atSeq);
219
+ // Enforce limits
220
+ if (this.events.length > this.maxEvents) {
221
+ this.events.splice(0, this.events.length - this.maxEvents);
222
+ }
223
+ if (this.snapshots.length > this.maxSnapshots) {
224
+ this.snapshots.splice(0, this.snapshots.length - this.maxSnapshots);
225
+ }
226
+ }
227
+ }
228
+ exports.OrchestratorEventBus = OrchestratorEventBus;
229
+ //# sourceMappingURL=event-bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../lib/event-bus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * ExplainabilityTracer — structured decision cards for agent actions.
3
+ *
4
+ * Records every significant decision made during task orchestration so that
5
+ * operators can audit *why* a particular outcome was produced.
6
+ *
7
+ * @module explainability
8
+ */
9
+ /** A single factor that influenced a decision. */
10
+ export interface DecisionFactor {
11
+ name: string;
12
+ value: unknown;
13
+ weight?: number;
14
+ description?: string;
15
+ }
16
+ /** Structured record of one orchestrator decision. */
17
+ export interface DecisionCard {
18
+ /** Unique trace id */
19
+ traceId: string;
20
+ /** ISO timestamp */
21
+ timestamp: string;
22
+ /** Which component made the decision */
23
+ source: string;
24
+ /** Short label for the decision type */
25
+ decision: string;
26
+ /** The outcome chosen */
27
+ outcome: string;
28
+ /** Factors that contributed */
29
+ factors: DecisionFactor[];
30
+ /** Parent trace (e.g. the delegation that spawned this) */
31
+ parentTraceId?: string;
32
+ /** Agent involved, if any */
33
+ agentId?: string;
34
+ /** Arbitrary metadata */
35
+ metadata?: Record<string, unknown>;
36
+ }
37
+ /**
38
+ * Collects decision cards during a session.
39
+ *
40
+ * Usage:
41
+ * ```ts
42
+ * const tracer = new ExplainabilityTracer();
43
+ * tracer.record({
44
+ * source: 'AuthGuardian',
45
+ * decision: 'permission_check',
46
+ * outcome: 'granted',
47
+ * factors: [{ name: 'trust_level', value: 0.8 }],
48
+ * });
49
+ * const cards = tracer.getTrace(traceId);
50
+ * ```
51
+ */
52
+ export declare class ExplainabilityTracer {
53
+ private cards;
54
+ private maxCards;
55
+ constructor(options?: {
56
+ maxCards?: number;
57
+ });
58
+ /**
59
+ * Record a decision card. Returns the generated traceId.
60
+ */
61
+ record(card: Omit<DecisionCard, 'traceId' | 'timestamp'> & {
62
+ traceId?: string;
63
+ timestamp?: string;
64
+ }): string;
65
+ /** Get a single card by traceId. */
66
+ getCard(traceId: string): DecisionCard | undefined;
67
+ /** Get all cards sharing a parentTraceId — i.e. the full trace tree for a delegation. */
68
+ getTrace(parentTraceId: string): DecisionCard[];
69
+ /** Get cards filtered by source, decision type, agent, or time range. */
70
+ query(filter: {
71
+ source?: string;
72
+ decision?: string;
73
+ agentId?: string;
74
+ since?: string;
75
+ until?: string;
76
+ }): DecisionCard[];
77
+ /** Total number of recorded cards. */
78
+ get size(): number;
79
+ /** Clear all recorded cards. */
80
+ clear(): void;
81
+ /** Export all cards as a JSON-serializable array. */
82
+ export(): DecisionCard[];
83
+ private generateId;
84
+ }
85
+ //# sourceMappingURL=explainability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainability.d.ts","sourceRoot":"","sources":["../../lib/explainability.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kDAAkD;AAClD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAI3C;;OAEG;IACH,MAAM,CACJ,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,WAAW,CAAC,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3F,MAAM;IAqBT,oCAAoC;IACpC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIlD,yFAAyF;IACzF,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,EAAE;IAM/C,yEAAyE;IACzE,KAAK,CAAC,MAAM,EAAE;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,YAAY,EAAE;IAWlB,sCAAsC;IACtC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,gCAAgC;IAChC,KAAK,IAAI,IAAI;IAIb,qDAAqD;IACrD,MAAM,IAAI,YAAY,EAAE;IAIxB,OAAO,CAAC,UAAU;CAQnB"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ /**
3
+ * ExplainabilityTracer — structured decision cards for agent actions.
4
+ *
5
+ * Records every significant decision made during task orchestration so that
6
+ * operators can audit *why* a particular outcome was produced.
7
+ *
8
+ * @module explainability
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.ExplainabilityTracer = void 0;
12
+ /**
13
+ * Collects decision cards during a session.
14
+ *
15
+ * Usage:
16
+ * ```ts
17
+ * const tracer = new ExplainabilityTracer();
18
+ * tracer.record({
19
+ * source: 'AuthGuardian',
20
+ * decision: 'permission_check',
21
+ * outcome: 'granted',
22
+ * factors: [{ name: 'trust_level', value: 0.8 }],
23
+ * });
24
+ * const cards = tracer.getTrace(traceId);
25
+ * ```
26
+ */
27
+ class ExplainabilityTracer {
28
+ cards = [];
29
+ maxCards;
30
+ constructor(options) {
31
+ this.maxCards = options?.maxCards ?? 10_000;
32
+ }
33
+ /**
34
+ * Record a decision card. Returns the generated traceId.
35
+ */
36
+ record(card) {
37
+ const traceId = card.traceId ?? this.generateId();
38
+ const full = {
39
+ traceId,
40
+ timestamp: card.timestamp ?? new Date().toISOString(),
41
+ source: card.source,
42
+ decision: card.decision,
43
+ outcome: card.outcome,
44
+ factors: card.factors,
45
+ parentTraceId: card.parentTraceId,
46
+ agentId: card.agentId,
47
+ metadata: card.metadata,
48
+ };
49
+ this.cards.push(full);
50
+ // Evict oldest when over limit
51
+ if (this.cards.length > this.maxCards) {
52
+ this.cards.splice(0, this.cards.length - this.maxCards);
53
+ }
54
+ return traceId;
55
+ }
56
+ /** Get a single card by traceId. */
57
+ getCard(traceId) {
58
+ return this.cards.find((c) => c.traceId === traceId);
59
+ }
60
+ /** Get all cards sharing a parentTraceId — i.e. the full trace tree for a delegation. */
61
+ getTrace(parentTraceId) {
62
+ return this.cards.filter((c) => c.traceId === parentTraceId || c.parentTraceId === parentTraceId);
63
+ }
64
+ /** Get cards filtered by source, decision type, agent, or time range. */
65
+ query(filter) {
66
+ return this.cards.filter((c) => {
67
+ if (filter.source && c.source !== filter.source)
68
+ return false;
69
+ if (filter.decision && c.decision !== filter.decision)
70
+ return false;
71
+ if (filter.agentId && c.agentId !== filter.agentId)
72
+ return false;
73
+ if (filter.since && c.timestamp < filter.since)
74
+ return false;
75
+ if (filter.until && c.timestamp > filter.until)
76
+ return false;
77
+ return true;
78
+ });
79
+ }
80
+ /** Total number of recorded cards. */
81
+ get size() {
82
+ return this.cards.length;
83
+ }
84
+ /** Clear all recorded cards. */
85
+ clear() {
86
+ this.cards.length = 0;
87
+ }
88
+ /** Export all cards as a JSON-serializable array. */
89
+ export() {
90
+ return [...this.cards];
91
+ }
92
+ generateId() {
93
+ // Simple random hex id (no crypto dependency needed for trace ids)
94
+ const bytes = new Uint8Array(12);
95
+ for (let i = 0; i < bytes.length; i++) {
96
+ bytes[i] = Math.floor(Math.random() * 256);
97
+ }
98
+ return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
99
+ }
100
+ }
101
+ exports.ExplainabilityTracer = ExplainabilityTracer;
102
+ //# sourceMappingURL=explainability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainability.js","sourceRoot":"","sources":["../../lib/explainability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Goal DSL — Schema-driven goal definitions for swarm orchestration
3
+ *
4
+ * Provides a declarative way to define multi-agent goals with constraints,
5
+ * dependencies, and validation rules. Goals can be defined in TypeScript
6
+ * objects or parsed from YAML/JSON strings.
7
+ *
8
+ * Features:
9
+ * - Typed GoalDefinition with tasks, constraints, and outputs
10
+ * - Dependency graph validation (cycle detection, missing refs)
11
+ * - Constraint checking (budget, timeout, required agents)
12
+ * - YAML/JSON parsing (YAML via simple built-in parser, no deps)
13
+ * - Goal compilation to executable task DAGs
14
+ *
15
+ * Usage:
16
+ * const goal = parseGoal(`
17
+ * name: research-and-summarize
18
+ * tasks:
19
+ * - id: research
20
+ * agent: researcher
21
+ * action: search
22
+ * - id: summarize
23
+ * agent: writer
24
+ * action: summarize
25
+ * depends: [research]
26
+ * `);
27
+ * const plan = compileGoal(goal);
28
+ *
29
+ * @module GoalDSL
30
+ * @version 1.0.0
31
+ */
32
+ /** A single task within a goal */
33
+ export interface GoalTask {
34
+ /** Unique task ID within this goal */
35
+ id: string;
36
+ /** Agent or adapter:agent to execute this task */
37
+ agent: string;
38
+ /** Action/instruction for the agent */
39
+ action: string;
40
+ /** Task IDs this depends on (must complete before this starts) */
41
+ depends?: string[];
42
+ /** Parameters to pass to the agent */
43
+ params?: Record<string, unknown>;
44
+ /** Per-task timeout in ms */
45
+ timeoutMs?: number;
46
+ /** Whether failure of this task fails the entire goal (default: true) */
47
+ critical?: boolean;
48
+ /** Retry count (default: 0) */
49
+ retries?: number;
50
+ /** Output key — result stored under this key for downstream tasks */
51
+ outputKey?: string;
52
+ }
53
+ /** Constraints on goal execution */
54
+ export interface GoalConstraints {
55
+ /** Maximum total budget */
56
+ maxBudget?: number;
57
+ /** Maximum total time in ms */
58
+ maxTimeMs?: number;
59
+ /** Required agent capabilities */
60
+ requiredCapabilities?: string[];
61
+ /** Maximum parallel tasks */
62
+ maxParallelism?: number;
63
+ /** Minimum confidence threshold for results */
64
+ minConfidence?: number;
65
+ }
66
+ /** Expected output definition */
67
+ export interface GoalOutput {
68
+ /** Output key name */
69
+ key: string;
70
+ /** Expected type ('string' | 'number' | 'object' | 'array' | 'boolean') */
71
+ type?: string;
72
+ /** Whether this output is required (default: true) */
73
+ required?: boolean;
74
+ /** Description of the output */
75
+ description?: string;
76
+ }
77
+ /** Complete goal definition */
78
+ export interface GoalDefinition {
79
+ /** Goal name */
80
+ name: string;
81
+ /** Goal description */
82
+ description?: string;
83
+ /** Version */
84
+ version?: string;
85
+ /** Tasks to execute */
86
+ tasks: GoalTask[];
87
+ /** Execution constraints */
88
+ constraints?: GoalConstraints;
89
+ /** Expected outputs */
90
+ outputs?: GoalOutput[];
91
+ /** Metadata */
92
+ metadata?: Record<string, unknown>;
93
+ }
94
+ /** Validation error */
95
+ export interface GoalValidationError {
96
+ /** Error type */
97
+ type: 'missing_dependency' | 'cycle' | 'duplicate_id' | 'empty_tasks' | 'invalid_field' | 'missing_agent';
98
+ /** Human-readable message */
99
+ message: string;
100
+ /** Related task ID */
101
+ taskId?: string;
102
+ }
103
+ /** Validation result */
104
+ export interface GoalValidationResult {
105
+ /** Whether the goal is valid */
106
+ valid: boolean;
107
+ /** Validation errors */
108
+ errors: GoalValidationError[];
109
+ }
110
+ /** Compiled execution layer (tasks that can run in parallel) */
111
+ export interface ExecutionLayer {
112
+ /** Layer index (0 = first) */
113
+ index: number;
114
+ /** Task IDs in this layer */
115
+ taskIds: string[];
116
+ }
117
+ /** Compiled goal — ready for execution */
118
+ export interface CompiledGoal {
119
+ /** Original goal definition */
120
+ definition: GoalDefinition;
121
+ /** Execution layers (topologically sorted) */
122
+ layers: ExecutionLayer[];
123
+ /** Total parallel depth */
124
+ depth: number;
125
+ /** Maximum width (max tasks in a single layer) */
126
+ maxWidth: number;
127
+ /** All task IDs in execution order */
128
+ taskOrder: string[];
129
+ /** Dependency adjacency map */
130
+ adjacency: Map<string, string[]>;
131
+ }
132
+ /**
133
+ * Parse a goal from a YAML-like or JSON string.
134
+ *
135
+ * Supports a simple YAML subset (no anchors, tags, or multi-doc):
136
+ * - Key: value pairs
137
+ * - Lists with `- item` syntax
138
+ * - Inline arrays `[a, b, c]`
139
+ * - Nested indentation
140
+ * - JSON input (auto-detected)
141
+ */
142
+ export declare function parseGoal(input: string): GoalDefinition;
143
+ /** Parse from a plain object (e.g. loaded from file) */
144
+ export declare function goalFromObject(obj: Record<string, unknown>): GoalDefinition;
145
+ /**
146
+ * Validate a goal definition for correctness.
147
+ * Checks for cycles, missing dependencies, duplicate IDs, and required fields.
148
+ */
149
+ export declare function validateGoal(goal: GoalDefinition): GoalValidationResult;
150
+ /**
151
+ * Compile a validated goal into an executable plan with layered parallelism.
152
+ * Performs topological sort to determine execution layers.
153
+ *
154
+ * @throws If the goal is invalid.
155
+ */
156
+ export declare function compileGoal(goal: GoalDefinition): CompiledGoal;
157
+ //# sourceMappingURL=goal-dsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-dsl.d.ts","sourceRoot":"","sources":["../../lib/goal-dsl.ts"],"names":[],"mappings":"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"}