network-ai 4.15.3 → 5.1.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 (282) hide show
  1. package/INTEGRATION_GUIDE.md +12 -5
  2. package/QUICKSTART.md +32 -5
  3. package/README.md +42 -17
  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/custom-adapter.d.ts +1 -1
  23. package/dist/adapters/custom-adapter.js +1 -1
  24. package/dist/adapters/index.d.ts +17 -1
  25. package/dist/adapters/index.d.ts.map +1 -1
  26. package/dist/adapters/index.js +25 -1
  27. package/dist/adapters/index.js.map +1 -1
  28. package/dist/adapters/langchain-adapter.js +1 -1
  29. package/dist/adapters/langchain-adapter.js.map +1 -1
  30. package/dist/adapters/langgraph-adapter.d.ts +70 -0
  31. package/dist/adapters/langgraph-adapter.d.ts.map +1 -0
  32. package/dist/adapters/langgraph-adapter.js +119 -0
  33. package/dist/adapters/langgraph-adapter.js.map +1 -0
  34. package/dist/adapters/mcp-adapter.d.ts +1 -1
  35. package/dist/adapters/mcp-adapter.js +3 -3
  36. package/dist/adapters/mcp-adapter.js.map +1 -1
  37. package/dist/adapters/openai-agents-adapter.d.ts +100 -0
  38. package/dist/adapters/openai-agents-adapter.d.ts.map +1 -0
  39. package/dist/adapters/openai-agents-adapter.js +118 -0
  40. package/dist/adapters/openai-agents-adapter.js.map +1 -0
  41. package/dist/adapters/openclaw-adapter.d.ts +1 -1
  42. package/dist/adapters/openclaw-adapter.js +3 -3
  43. package/dist/adapters/openclaw-adapter.js.map +1 -1
  44. package/dist/adapters/orchestrator-adapter.d.ts +118 -0
  45. package/dist/adapters/orchestrator-adapter.d.ts.map +1 -0
  46. package/dist/adapters/orchestrator-adapter.js +219 -0
  47. package/dist/adapters/orchestrator-adapter.js.map +1 -0
  48. package/dist/adapters/pydantic-ai-adapter.d.ts +104 -0
  49. package/dist/adapters/pydantic-ai-adapter.d.ts.map +1 -0
  50. package/dist/adapters/pydantic-ai-adapter.js +163 -0
  51. package/dist/adapters/pydantic-ai-adapter.js.map +1 -0
  52. package/dist/adapters/vertex-ai-adapter.d.ts +122 -0
  53. package/dist/adapters/vertex-ai-adapter.d.ts.map +1 -0
  54. package/dist/adapters/vertex-ai-adapter.js +166 -0
  55. package/dist/adapters/vertex-ai-adapter.js.map +1 -0
  56. package/dist/bin/dashboard.d.ts +11 -0
  57. package/dist/bin/dashboard.d.ts.map +1 -0
  58. package/dist/bin/dashboard.js +135 -0
  59. package/dist/bin/dashboard.js.map +1 -0
  60. package/dist/bin/mcp-server.js +3 -2
  61. package/dist/bin/mcp-server.js.map +1 -1
  62. package/dist/demo-control-plane.d.ts +12 -0
  63. package/dist/demo-control-plane.d.ts.map +1 -0
  64. package/dist/demo-control-plane.js +147 -0
  65. package/dist/demo-control-plane.js.map +1 -0
  66. package/dist/demo-worktree-dashboard.d.ts +2 -0
  67. package/dist/demo-worktree-dashboard.d.ts.map +1 -0
  68. package/dist/demo-worktree-dashboard.js +131 -0
  69. package/dist/demo-worktree-dashboard.js.map +1 -0
  70. package/dist/examples/01-hello-swarm.d.ts +13 -0
  71. package/dist/examples/01-hello-swarm.d.ts.map +1 -0
  72. package/dist/examples/01-hello-swarm.js +165 -0
  73. package/dist/examples/01-hello-swarm.js.map +1 -0
  74. package/dist/examples/02-fsm-pipeline.d.ts +20 -0
  75. package/dist/examples/02-fsm-pipeline.d.ts.map +1 -0
  76. package/dist/examples/02-fsm-pipeline.js +189 -0
  77. package/dist/examples/02-fsm-pipeline.js.map +1 -0
  78. package/dist/examples/03-parallel-agents.d.ts +21 -0
  79. package/dist/examples/03-parallel-agents.d.ts.map +1 -0
  80. package/dist/examples/03-parallel-agents.js +192 -0
  81. package/dist/examples/03-parallel-agents.js.map +1 -0
  82. package/dist/examples/05-code-review-swarm.d.ts +21 -0
  83. package/dist/examples/05-code-review-swarm.d.ts.map +1 -0
  84. package/dist/examples/05-code-review-swarm.js +1177 -0
  85. package/dist/examples/05-code-review-swarm.js.map +1 -0
  86. package/dist/examples/06-ai-pipeline-demo.d.ts +24 -0
  87. package/dist/examples/06-ai-pipeline-demo.d.ts.map +1 -0
  88. package/dist/examples/06-ai-pipeline-demo.js +263 -0
  89. package/dist/examples/06-ai-pipeline-demo.js.map +1 -0
  90. package/dist/examples/07-full-showcase.d.ts +27 -0
  91. package/dist/examples/07-full-showcase.d.ts.map +1 -0
  92. package/dist/examples/07-full-showcase.js +946 -0
  93. package/dist/examples/07-full-showcase.js.map +1 -0
  94. package/dist/examples/08-control-plane-stress-demo.d.ts +19 -0
  95. package/dist/examples/08-control-plane-stress-demo.d.ts.map +1 -0
  96. package/dist/examples/08-control-plane-stress-demo.js +186 -0
  97. package/dist/examples/08-control-plane-stress-demo.js.map +1 -0
  98. package/dist/examples/09-real-langchain.d.ts +19 -0
  99. package/dist/examples/09-real-langchain.d.ts.map +1 -0
  100. package/dist/examples/09-real-langchain.js +231 -0
  101. package/dist/examples/09-real-langchain.js.map +1 -0
  102. package/dist/examples/10-nemoclaw-sandbox-swarm.d.ts +16 -0
  103. package/dist/examples/10-nemoclaw-sandbox-swarm.d.ts.map +1 -0
  104. package/dist/examples/10-nemoclaw-sandbox-swarm.js +270 -0
  105. package/dist/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
  106. package/dist/examples/demo-runner.d.ts +2 -0
  107. package/dist/examples/demo-runner.d.ts.map +1 -0
  108. package/dist/examples/demo-runner.js +119 -0
  109. package/dist/examples/demo-runner.js.map +1 -0
  110. package/dist/index.d.ts +113 -559
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +310 -1074
  113. package/dist/index.js.map +1 -1
  114. package/dist/lib/adapter-test-harness.d.ts +88 -0
  115. package/dist/lib/adapter-test-harness.d.ts.map +1 -0
  116. package/dist/lib/adapter-test-harness.js +118 -0
  117. package/dist/lib/adapter-test-harness.js.map +1 -0
  118. package/dist/lib/agent-conversation.d.ts +115 -0
  119. package/dist/lib/agent-conversation.d.ts.map +1 -0
  120. package/dist/lib/agent-conversation.js +155 -0
  121. package/dist/lib/agent-conversation.js.map +1 -0
  122. package/dist/lib/agent-debate.d.ts +115 -0
  123. package/dist/lib/agent-debate.d.ts.map +1 -0
  124. package/dist/lib/agent-debate.js +146 -0
  125. package/dist/lib/agent-debate.js.map +1 -0
  126. package/dist/lib/agent-memory.d.ts +157 -0
  127. package/dist/lib/agent-memory.d.ts.map +1 -0
  128. package/dist/lib/agent-memory.js +336 -0
  129. package/dist/lib/agent-memory.js.map +1 -0
  130. package/dist/lib/agent-vcr.d.ts +133 -0
  131. package/dist/lib/agent-vcr.d.ts.map +1 -0
  132. package/dist/lib/agent-vcr.js +218 -0
  133. package/dist/lib/agent-vcr.js.map +1 -0
  134. package/dist/lib/anomaly-detector.d.ts +112 -0
  135. package/dist/lib/anomaly-detector.d.ts.map +1 -0
  136. package/dist/lib/anomaly-detector.js +178 -0
  137. package/dist/lib/anomaly-detector.js.map +1 -0
  138. package/dist/lib/approval-inbox.d.ts +147 -0
  139. package/dist/lib/approval-inbox.d.ts.map +1 -0
  140. package/dist/lib/approval-inbox.js +385 -0
  141. package/dist/lib/approval-inbox.js.map +1 -0
  142. package/dist/lib/auth-guardian.d.ts +170 -0
  143. package/dist/lib/auth-guardian.d.ts.map +1 -0
  144. package/dist/lib/auth-guardian.js +604 -0
  145. package/dist/lib/auth-guardian.js.map +1 -0
  146. package/dist/lib/auth-validator.d.ts +70 -0
  147. package/dist/lib/auth-validator.d.ts.map +1 -0
  148. package/dist/lib/auth-validator.js +32 -0
  149. package/dist/lib/auth-validator.js.map +1 -0
  150. package/dist/lib/blackboard-validator.d.ts +56 -0
  151. package/dist/lib/blackboard-validator.d.ts.map +1 -1
  152. package/dist/lib/blackboard-validator.js +181 -4
  153. package/dist/lib/blackboard-validator.js.map +1 -1
  154. package/dist/lib/comparison-runner.d.ts +99 -0
  155. package/dist/lib/comparison-runner.d.ts.map +1 -0
  156. package/dist/lib/comparison-runner.js +138 -0
  157. package/dist/lib/comparison-runner.js.map +1 -0
  158. package/dist/lib/config-watcher.d.ts +109 -0
  159. package/dist/lib/config-watcher.d.ts.map +1 -0
  160. package/dist/lib/config-watcher.js +215 -0
  161. package/dist/lib/config-watcher.js.map +1 -0
  162. package/dist/lib/control-plane.d.ts +128 -0
  163. package/dist/lib/control-plane.d.ts.map +1 -0
  164. package/dist/lib/control-plane.js +527 -0
  165. package/dist/lib/control-plane.js.map +1 -0
  166. package/dist/lib/cost-governor.d.ts +105 -0
  167. package/dist/lib/cost-governor.d.ts.map +1 -0
  168. package/dist/lib/cost-governor.js +128 -0
  169. package/dist/lib/cost-governor.js.map +1 -0
  170. package/dist/lib/cost-heatmap.d.ts +104 -0
  171. package/dist/lib/cost-heatmap.d.ts.map +1 -0
  172. package/dist/lib/cost-heatmap.js +161 -0
  173. package/dist/lib/cost-heatmap.js.map +1 -0
  174. package/dist/lib/coverage-reporter.d.ts +92 -0
  175. package/dist/lib/coverage-reporter.d.ts.map +1 -0
  176. package/dist/lib/coverage-reporter.js +177 -0
  177. package/dist/lib/coverage-reporter.js.map +1 -0
  178. package/dist/lib/dashboard-server.d.ts +71 -0
  179. package/dist/lib/dashboard-server.d.ts.map +1 -0
  180. package/dist/lib/dashboard-server.js +403 -0
  181. package/dist/lib/dashboard-server.js.map +1 -0
  182. package/dist/lib/dry-run.d.ts +73 -0
  183. package/dist/lib/dry-run.d.ts.map +1 -0
  184. package/dist/lib/dry-run.js +130 -0
  185. package/dist/lib/dry-run.js.map +1 -0
  186. package/dist/lib/errors.d.ts +15 -0
  187. package/dist/lib/errors.d.ts.map +1 -1
  188. package/dist/lib/errors.js +38 -0
  189. package/dist/lib/errors.js.map +1 -1
  190. package/dist/lib/event-bus.d.ts +167 -0
  191. package/dist/lib/event-bus.d.ts.map +1 -0
  192. package/dist/lib/event-bus.js +229 -0
  193. package/dist/lib/event-bus.js.map +1 -0
  194. package/dist/lib/explainability.d.ts +85 -0
  195. package/dist/lib/explainability.d.ts.map +1 -0
  196. package/dist/lib/explainability.js +102 -0
  197. package/dist/lib/explainability.js.map +1 -0
  198. package/dist/lib/goal-dsl.d.ts +157 -0
  199. package/dist/lib/goal-dsl.d.ts.map +1 -0
  200. package/dist/lib/goal-dsl.js +391 -0
  201. package/dist/lib/goal-dsl.js.map +1 -0
  202. package/dist/lib/job-queue.d.ts +183 -0
  203. package/dist/lib/job-queue.d.ts.map +1 -0
  204. package/dist/lib/job-queue.js +310 -0
  205. package/dist/lib/job-queue.js.map +1 -0
  206. package/dist/lib/learning-loop.d.ts +113 -0
  207. package/dist/lib/learning-loop.d.ts.map +1 -0
  208. package/dist/lib/learning-loop.js +181 -0
  209. package/dist/lib/learning-loop.js.map +1 -0
  210. package/dist/lib/lifecycle-hooks.d.ts +116 -0
  211. package/dist/lib/lifecycle-hooks.d.ts.map +1 -0
  212. package/dist/lib/lifecycle-hooks.js +148 -0
  213. package/dist/lib/lifecycle-hooks.js.map +1 -0
  214. package/dist/lib/locked-blackboard.d.ts.map +1 -1
  215. package/dist/lib/locked-blackboard.js +9 -5
  216. package/dist/lib/locked-blackboard.js.map +1 -1
  217. package/dist/lib/mcp-tool-consumer.d.ts +153 -0
  218. package/dist/lib/mcp-tool-consumer.d.ts.map +1 -0
  219. package/dist/lib/mcp-tool-consumer.js +320 -0
  220. package/dist/lib/mcp-tool-consumer.js.map +1 -0
  221. package/dist/lib/metrics.d.ts +119 -0
  222. package/dist/lib/metrics.d.ts.map +1 -0
  223. package/dist/lib/metrics.js +284 -0
  224. package/dist/lib/metrics.js.map +1 -0
  225. package/dist/lib/orchestrator-types.d.ts +309 -0
  226. package/dist/lib/orchestrator-types.d.ts.map +1 -0
  227. package/dist/lib/orchestrator-types.js +61 -0
  228. package/dist/lib/orchestrator-types.js.map +1 -0
  229. package/dist/lib/otel-bridge.d.ts +74 -0
  230. package/dist/lib/otel-bridge.d.ts.map +1 -0
  231. package/dist/lib/otel-bridge.js +167 -0
  232. package/dist/lib/otel-bridge.js.map +1 -0
  233. package/dist/lib/playground.d.ts +76 -0
  234. package/dist/lib/playground.d.ts.map +1 -0
  235. package/dist/lib/playground.js +224 -0
  236. package/dist/lib/playground.js.map +1 -0
  237. package/dist/lib/quadtree.d.ts +114 -0
  238. package/dist/lib/quadtree.d.ts.map +1 -0
  239. package/dist/lib/quadtree.js +259 -0
  240. package/dist/lib/quadtree.js.map +1 -0
  241. package/dist/lib/shared-blackboard.d.ts +101 -0
  242. package/dist/lib/shared-blackboard.d.ts.map +1 -0
  243. package/dist/lib/shared-blackboard.js +249 -0
  244. package/dist/lib/shared-blackboard.js.map +1 -0
  245. package/dist/lib/speculative-executor.d.ts +89 -0
  246. package/dist/lib/speculative-executor.d.ts.map +1 -0
  247. package/dist/lib/speculative-executor.js +107 -0
  248. package/dist/lib/speculative-executor.js.map +1 -0
  249. package/dist/lib/swarm-transport.d.ts +150 -0
  250. package/dist/lib/swarm-transport.d.ts.map +1 -0
  251. package/dist/lib/swarm-transport.js +307 -0
  252. package/dist/lib/swarm-transport.js.map +1 -0
  253. package/dist/lib/task-decomposer.d.ts +41 -0
  254. package/dist/lib/task-decomposer.d.ts.map +1 -0
  255. package/dist/lib/task-decomposer.js +272 -0
  256. package/dist/lib/task-decomposer.js.map +1 -0
  257. package/dist/lib/timeline-scrubber.d.ts +84 -0
  258. package/dist/lib/timeline-scrubber.d.ts.map +1 -0
  259. package/dist/lib/timeline-scrubber.js +173 -0
  260. package/dist/lib/timeline-scrubber.js.map +1 -0
  261. package/dist/lib/topology.d.ts +361 -0
  262. package/dist/lib/topology.d.ts.map +1 -0
  263. package/dist/lib/topology.js +591 -0
  264. package/dist/lib/topology.js.map +1 -0
  265. package/dist/lib/work-tree-dashboard.d.ts +130 -0
  266. package/dist/lib/work-tree-dashboard.d.ts.map +1 -0
  267. package/dist/lib/work-tree-dashboard.js +583 -0
  268. package/dist/lib/work-tree-dashboard.js.map +1 -0
  269. package/dist/lib/work-tree-ui.d.ts +107 -0
  270. package/dist/lib/work-tree-ui.d.ts.map +1 -0
  271. package/dist/lib/work-tree-ui.js +333 -0
  272. package/dist/lib/work-tree-ui.js.map +1 -0
  273. package/dist/lib/work-tree.d.ts +184 -0
  274. package/dist/lib/work-tree.d.ts.map +1 -0
  275. package/dist/lib/work-tree.js +480 -0
  276. package/dist/lib/work-tree.js.map +1 -0
  277. package/dist/security.d.ts +95 -0
  278. package/dist/security.d.ts.map +1 -1
  279. package/dist/security.js +267 -4
  280. package/dist/security.js.map +1 -1
  281. package/package.json +8 -6
  282. package/types/agent-adapter.d.ts +5 -0
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ /**
3
+ * AgentConversationLog — Per-agent execution & dialogue history.
4
+ *
5
+ * Tracks every task execution, tool invocation, and token usage for each agent
6
+ * so operators can click an agent in the topology and inspect its full history.
7
+ *
8
+ * @module AgentConversation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.AgentConversationLog = void 0;
12
+ // ============================================================================
13
+ // CONVERSATION LOG
14
+ // ============================================================================
15
+ /**
16
+ * Collects per-agent execution history.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const log = new AgentConversationLog();
21
+ * log.recordTurn('agent-1', {
22
+ * instruction: 'Summarize the document',
23
+ * success: true,
24
+ * tokensUsed: 450,
25
+ * executionTimeMs: 1200,
26
+ * });
27
+ * const conv = log.getConversation('agent-1');
28
+ * // conv.turns.length === 1
29
+ * // conv.stats.totalTokensUsed === 450
30
+ * ```
31
+ */
32
+ class AgentConversationLog {
33
+ conversations = new Map();
34
+ maxTurnsPerAgent;
35
+ constructor(options) {
36
+ this.maxTurnsPerAgent = options?.maxTurnsPerAgent ?? 500;
37
+ }
38
+ /**
39
+ * Record a turn for an agent. Returns the assigned turn number.
40
+ */
41
+ recordTurn(agentId, turn) {
42
+ let record = this.conversations.get(agentId);
43
+ if (!record) {
44
+ record = { turns: [], turnCounter: 0 };
45
+ this.conversations.set(agentId, record);
46
+ }
47
+ const turnNumber = ++record.turnCounter;
48
+ const full = {
49
+ turnNumber,
50
+ timestamp: turn.timestamp ?? new Date().toISOString(),
51
+ instruction: turn.instruction,
52
+ result: turn.result,
53
+ success: turn.success,
54
+ errorCode: turn.errorCode,
55
+ tokensUsed: turn.tokensUsed,
56
+ executionTimeMs: turn.executionTimeMs,
57
+ retryAttempts: turn.retryAttempts,
58
+ adapter: turn.adapter,
59
+ qualityDecision: turn.qualityDecision,
60
+ correlationId: turn.correlationId,
61
+ sourceAgent: turn.sourceAgent,
62
+ metadata: turn.metadata,
63
+ };
64
+ record.turns.push(full);
65
+ // Evict oldest
66
+ if (record.turns.length > this.maxTurnsPerAgent) {
67
+ record.turns.splice(0, record.turns.length - this.maxTurnsPerAgent);
68
+ }
69
+ return turnNumber;
70
+ }
71
+ /**
72
+ * Get the full conversation for an agent.
73
+ */
74
+ getConversation(agentId) {
75
+ const record = this.conversations.get(agentId);
76
+ if (!record)
77
+ return null;
78
+ return {
79
+ agentId,
80
+ turns: [...record.turns],
81
+ stats: this.computeStats(record.turns),
82
+ };
83
+ }
84
+ /**
85
+ * Get stats for an agent without copying all turns.
86
+ */
87
+ getStats(agentId) {
88
+ const record = this.conversations.get(agentId);
89
+ if (!record)
90
+ return null;
91
+ return this.computeStats(record.turns);
92
+ }
93
+ /**
94
+ * Get the most recent N turns for an agent.
95
+ */
96
+ getRecentTurns(agentId, count) {
97
+ const record = this.conversations.get(agentId);
98
+ if (!record)
99
+ return [];
100
+ return record.turns.slice(-count);
101
+ }
102
+ /**
103
+ * List all agent IDs that have recorded turns.
104
+ */
105
+ listAgents() {
106
+ return [...this.conversations.keys()];
107
+ }
108
+ /**
109
+ * Clear the conversation history for a specific agent.
110
+ */
111
+ clearAgent(agentId) {
112
+ this.conversations.delete(agentId);
113
+ }
114
+ /**
115
+ * Clear all conversations.
116
+ */
117
+ clear() {
118
+ this.conversations.clear();
119
+ }
120
+ /**
121
+ * Total number of turns across all agents.
122
+ */
123
+ get totalTurns() {
124
+ let sum = 0;
125
+ for (const record of this.conversations.values()) {
126
+ sum += record.turns.length;
127
+ }
128
+ return sum;
129
+ }
130
+ computeStats(turns) {
131
+ let successCount = 0;
132
+ let failureCount = 0;
133
+ let totalTokensUsed = 0;
134
+ let totalExecutionTimeMs = 0;
135
+ for (const t of turns) {
136
+ if (t.success)
137
+ successCount++;
138
+ else
139
+ failureCount++;
140
+ totalTokensUsed += t.tokensUsed ?? 0;
141
+ totalExecutionTimeMs += t.executionTimeMs ?? 0;
142
+ }
143
+ return {
144
+ totalTurns: turns.length,
145
+ successCount,
146
+ failureCount,
147
+ totalTokensUsed,
148
+ totalExecutionTimeMs,
149
+ averageExecutionTimeMs: turns.length > 0 ? totalExecutionTimeMs / turns.length : 0,
150
+ lastActivityAt: turns.length > 0 ? turns[turns.length - 1].timestamp : null,
151
+ };
152
+ }
153
+ }
154
+ exports.AgentConversationLog = AgentConversationLog;
155
+ //# sourceMappingURL=agent-conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-conversation.js","sourceRoot":"","sources":["../../lib/agent-conversation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * AgentDebate — Adversarial multi-agent debate and self-critique.
3
+ *
4
+ * A proposer agent generates a proposal, then one or more critic agents
5
+ * challenge it across configurable rounds. The debate continues until
6
+ * consensus, a round limit, or a confidence threshold is met.
7
+ *
8
+ * @module AgentDebate
9
+ */
10
+ /** A single turn in a debate */
11
+ export interface DebateTurn {
12
+ round: number;
13
+ role: 'proposer' | 'critic';
14
+ agentId: string;
15
+ content: string;
16
+ confidence: number;
17
+ timestamp: number;
18
+ }
19
+ /** Configuration for a debate session */
20
+ export interface DebateConfig {
21
+ /** Maximum number of debate rounds (default 3) */
22
+ maxRounds?: number;
23
+ /** Confidence threshold to accept a proposal without further critique (0-100, default 85) */
24
+ acceptanceThreshold?: number;
25
+ /** Minimum confidence from all critics to reach consensus (0-100, default 70) */
26
+ consensusThreshold?: number;
27
+ /** Timeout per turn in ms (default 30000) */
28
+ turnTimeoutMs?: number;
29
+ }
30
+ /** Final outcome of a debate */
31
+ export interface DebateOutcome {
32
+ /** Whether the proposal was accepted */
33
+ accepted: boolean;
34
+ /** Reason for acceptance or rejection */
35
+ reason: 'consensus' | 'threshold' | 'max_rounds' | 'proposer_withdrew';
36
+ /** The final (possibly revised) proposal */
37
+ finalProposal: string;
38
+ /** Confidence of the final proposal */
39
+ finalConfidence: number;
40
+ /** Full debate transcript */
41
+ transcript: DebateTurn[];
42
+ /** Number of rounds conducted */
43
+ rounds: number;
44
+ /** Total duration in ms */
45
+ durationMs: number;
46
+ }
47
+ /** Critique result from a critic agent */
48
+ export interface CritiqueResult {
49
+ /** The critique text */
50
+ critique: string;
51
+ /** Critic's confidence in the proposal (0-100, higher = more approving) */
52
+ confidence: number;
53
+ /** Whether the critic approves the proposal as-is */
54
+ approves: boolean;
55
+ }
56
+ /** Revised proposal from the proposer after critique */
57
+ export interface RevisionResult {
58
+ /** The revised proposal */
59
+ proposal: string;
60
+ /** Proposer's confidence in the revised version */
61
+ confidence: number;
62
+ /** Whether the proposer wants to withdraw (give up) */
63
+ withdrawn: boolean;
64
+ }
65
+ /**
66
+ * Function that a proposer calls to generate or revise a proposal.
67
+ * Round 0 = initial proposal. Round > 0 = revision after critique.
68
+ */
69
+ export type ProposerFn = (instruction: string, previousCritiques: DebateTurn[], round: number) => Promise<RevisionResult>;
70
+ /**
71
+ * Function that a critic calls to evaluate a proposal.
72
+ */
73
+ export type CriticFn = (proposal: string, instruction: string, round: number) => Promise<CritiqueResult>;
74
+ /**
75
+ * Orchestrate a multi-round adversarial debate.
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * const debate = new AgentDebate({
80
+ * proposer: { agentId: 'writer', fn: writerFn },
81
+ * critics: [
82
+ * { agentId: 'reviewer', fn: reviewerFn },
83
+ * { agentId: 'security-checker', fn: securityFn },
84
+ * ],
85
+ * config: { maxRounds: 3, acceptanceThreshold: 90 },
86
+ * });
87
+ *
88
+ * const outcome = await debate.run('Write a secure login handler');
89
+ * if (outcome.accepted) {
90
+ * console.log('Final proposal:', outcome.finalProposal);
91
+ * }
92
+ * ```
93
+ */
94
+ export declare class AgentDebate {
95
+ private proposer;
96
+ private critics;
97
+ private config;
98
+ constructor(options: {
99
+ proposer: {
100
+ agentId: string;
101
+ fn: ProposerFn;
102
+ };
103
+ critics: Array<{
104
+ agentId: string;
105
+ fn: CriticFn;
106
+ }>;
107
+ config?: DebateConfig;
108
+ });
109
+ /**
110
+ * Run the full debate for a given instruction.
111
+ */
112
+ run(instruction: string): Promise<DebateOutcome>;
113
+ private withTimeout;
114
+ }
115
+ //# sourceMappingURL=agent-debate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-debate.d.ts","sourceRoot":"","sources":["../../lib/agent-debate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,gCAAgC;AAChC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,yCAAyC;IACzC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,mBAAmB,CAAC;IACvE,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,UAAU,EAAE,EAC/B,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7B;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CACrB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,cAAc,CAAC,CAAC;AAM7B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,MAAM,CAAyB;gBAE3B,OAAO,EAAE;QACnB,QAAQ,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,UAAU,CAAA;SAAE,CAAC;QAC9C,OAAO,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,QAAQ,CAAA;SAAE,CAAC,CAAC;QAClD,MAAM,CAAC,EAAE,YAAY,CAAC;KACvB;IAWD;;OAEG;IACG,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;YA2GxC,WAAW;CAM1B"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /**
3
+ * AgentDebate — Adversarial multi-agent debate and self-critique.
4
+ *
5
+ * A proposer agent generates a proposal, then one or more critic agents
6
+ * challenge it across configurable rounds. The debate continues until
7
+ * consensus, a round limit, or a confidence threshold is met.
8
+ *
9
+ * @module AgentDebate
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AgentDebate = void 0;
13
+ // ============================================================================
14
+ // AGENT DEBATE
15
+ // ============================================================================
16
+ /**
17
+ * Orchestrate a multi-round adversarial debate.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const debate = new AgentDebate({
22
+ * proposer: { agentId: 'writer', fn: writerFn },
23
+ * critics: [
24
+ * { agentId: 'reviewer', fn: reviewerFn },
25
+ * { agentId: 'security-checker', fn: securityFn },
26
+ * ],
27
+ * config: { maxRounds: 3, acceptanceThreshold: 90 },
28
+ * });
29
+ *
30
+ * const outcome = await debate.run('Write a secure login handler');
31
+ * if (outcome.accepted) {
32
+ * console.log('Final proposal:', outcome.finalProposal);
33
+ * }
34
+ * ```
35
+ */
36
+ class AgentDebate {
37
+ proposer;
38
+ critics;
39
+ config;
40
+ constructor(options) {
41
+ this.proposer = options.proposer;
42
+ this.critics = options.critics;
43
+ this.config = {
44
+ maxRounds: options.config?.maxRounds ?? 3,
45
+ acceptanceThreshold: options.config?.acceptanceThreshold ?? 85,
46
+ consensusThreshold: options.config?.consensusThreshold ?? 70,
47
+ turnTimeoutMs: options.config?.turnTimeoutMs ?? 30_000,
48
+ };
49
+ }
50
+ /**
51
+ * Run the full debate for a given instruction.
52
+ */
53
+ async run(instruction) {
54
+ const startMs = Date.now();
55
+ const transcript = [];
56
+ let currentProposal = '';
57
+ let proposalConfidence = 0;
58
+ for (let round = 0; round < this.config.maxRounds; round++) {
59
+ // --- Proposer turn ---
60
+ const previousCritiques = transcript.filter(t => t.role === 'critic');
61
+ const revision = await this.withTimeout(this.proposer.fn(instruction, previousCritiques, round), this.config.turnTimeoutMs, { proposal: currentProposal || '(timeout)', confidence: 0, withdrawn: true });
62
+ if (revision.withdrawn) {
63
+ return {
64
+ accepted: false,
65
+ reason: 'proposer_withdrew',
66
+ finalProposal: currentProposal,
67
+ finalConfidence: proposalConfidence,
68
+ transcript,
69
+ rounds: round + 1,
70
+ durationMs: Date.now() - startMs,
71
+ };
72
+ }
73
+ currentProposal = revision.proposal;
74
+ proposalConfidence = revision.confidence;
75
+ transcript.push({
76
+ round,
77
+ role: 'proposer',
78
+ agentId: this.proposer.agentId,
79
+ content: currentProposal,
80
+ confidence: proposalConfidence,
81
+ timestamp: Date.now(),
82
+ });
83
+ // Early accept if proposer confidence exceeds threshold
84
+ if (proposalConfidence >= this.config.acceptanceThreshold) {
85
+ return {
86
+ accepted: true,
87
+ reason: 'threshold',
88
+ finalProposal: currentProposal,
89
+ finalConfidence: proposalConfidence,
90
+ transcript,
91
+ rounds: round + 1,
92
+ durationMs: Date.now() - startMs,
93
+ };
94
+ }
95
+ // --- Critic turns ---
96
+ const critiqueResults = [];
97
+ for (const critic of this.critics) {
98
+ const critique = await this.withTimeout(critic.fn(currentProposal, instruction, round), this.config.turnTimeoutMs, { critique: '(timeout)', confidence: 0, approves: false });
99
+ critiqueResults.push(critique);
100
+ transcript.push({
101
+ round,
102
+ role: 'critic',
103
+ agentId: critic.agentId,
104
+ content: critique.critique,
105
+ confidence: critique.confidence,
106
+ timestamp: Date.now(),
107
+ });
108
+ }
109
+ // Check consensus — all critics approve with sufficient confidence
110
+ const allApprove = critiqueResults.every(c => c.approves);
111
+ const minCriticConfidence = critiqueResults.length > 0
112
+ ? Math.min(...critiqueResults.map(c => c.confidence))
113
+ : 0;
114
+ if (allApprove && minCriticConfidence >= this.config.consensusThreshold) {
115
+ return {
116
+ accepted: true,
117
+ reason: 'consensus',
118
+ finalProposal: currentProposal,
119
+ finalConfidence: Math.min(proposalConfidence, minCriticConfidence),
120
+ transcript,
121
+ rounds: round + 1,
122
+ durationMs: Date.now() - startMs,
123
+ };
124
+ }
125
+ }
126
+ // Max rounds reached — return the latest proposal
127
+ return {
128
+ accepted: false,
129
+ reason: 'max_rounds',
130
+ finalProposal: currentProposal,
131
+ finalConfidence: proposalConfidence,
132
+ transcript,
133
+ rounds: this.config.maxRounds,
134
+ durationMs: Date.now() - startMs,
135
+ };
136
+ }
137
+ // --------------------------------------------------------------------------
138
+ // INTERNAL
139
+ // --------------------------------------------------------------------------
140
+ async withTimeout(promise, timeoutMs, fallback) {
141
+ const timer = new Promise((resolve) => setTimeout(() => resolve(fallback), timeoutMs));
142
+ return Promise.race([promise, timer]);
143
+ }
144
+ }
145
+ exports.AgentDebate = AgentDebate;
146
+ //# sourceMappingURL=agent-debate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-debate.js","sourceRoot":"","sources":["../../lib/agent-debate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * AgentMemory — Multi-layer memory system for agents.
3
+ *
4
+ * Three memory layers:
5
+ * - **Episodic**: per-run short-term memory with time-based decay
6
+ * - **Procedural**: persistent skill/chain patterns (e.g. SkillComposer recipes)
7
+ * - **Shared long-term**: cross-agent knowledge base with relevance scoring
8
+ *
9
+ * @module AgentMemory
10
+ */
11
+ /** A single memory entry */
12
+ export interface MemoryEntry {
13
+ id: string;
14
+ content: string;
15
+ tags: string[];
16
+ createdAt: number;
17
+ lastAccessed: number;
18
+ accessCount: number;
19
+ score: number;
20
+ metadata: Record<string, unknown>;
21
+ }
22
+ /** Episodic memory entry — decays over time */
23
+ export interface EpisodicEntry extends MemoryEntry {
24
+ /** Decay half-life in milliseconds */
25
+ halfLifeMs: number;
26
+ }
27
+ /** Procedural memory entry — persistent skill/pattern */
28
+ export interface ProceduralEntry extends MemoryEntry {
29
+ /** The pattern type (chain, batch, loop, etc.) */
30
+ patternType: string;
31
+ /** Number of times this pattern succeeded */
32
+ successCount: number;
33
+ /** Number of times this pattern failed */
34
+ failureCount: number;
35
+ }
36
+ /** Shared long-term entry — cross-agent knowledge */
37
+ export interface SharedEntry extends MemoryEntry {
38
+ /** Agent that contributed this knowledge */
39
+ sourceAgent: string;
40
+ /** Agents that have accessed this entry */
41
+ accessedBy: Set<string>;
42
+ }
43
+ /** Query options for memory recall */
44
+ export interface RecallOptions {
45
+ tags?: string[];
46
+ maxResults?: number;
47
+ minScore?: number;
48
+ /** Only entries newer than this timestamp */
49
+ since?: number;
50
+ }
51
+ /**
52
+ * Short-term, per-run memory with exponential time decay.
53
+ * Entries lose relevance over time; stale entries are pruned.
54
+ */
55
+ export declare class EpisodicMemory {
56
+ private entries;
57
+ private maxEntries;
58
+ private defaultHalfLifeMs;
59
+ constructor(options?: {
60
+ maxEntries?: number;
61
+ defaultHalfLifeMs?: number;
62
+ });
63
+ /** Store a new episodic memory */
64
+ store(content: string, tags?: string[], metadata?: Record<string, unknown>, halfLifeMs?: number): string;
65
+ /** Recall entries matching criteria, scored by recency and decay */
66
+ recall(options?: RecallOptions): EpisodicEntry[];
67
+ /** Remove a specific entry */
68
+ remove(id: string): boolean;
69
+ /** Clear all entries */
70
+ clear(): void;
71
+ /** Number of stored entries */
72
+ size(): number;
73
+ /** Prune entries below a score threshold */
74
+ prune(minScore?: number): number;
75
+ private evict;
76
+ }
77
+ /**
78
+ * Persistent memory for successful skill/chain patterns.
79
+ * Agents learn which patterns work and prefer them in future.
80
+ */
81
+ export declare class ProceduralMemory {
82
+ private entries;
83
+ private maxEntries;
84
+ constructor(options?: {
85
+ maxEntries?: number;
86
+ });
87
+ /** Register a pattern (chain/batch/loop/verify) */
88
+ register(id: string, content: string, patternType: string, tags?: string[], metadata?: Record<string, unknown>): ProceduralEntry;
89
+ /** Record success for a pattern — increases its score */
90
+ recordSuccess(id: string): void;
91
+ /** Record failure for a pattern — decreases its score */
92
+ recordFailure(id: string): void;
93
+ /** Recall top-scoring patterns matching criteria */
94
+ recall(options?: RecallOptions & {
95
+ patternType?: string;
96
+ }): ProceduralEntry[];
97
+ /** Get a specific pattern by ID */
98
+ get(id: string): ProceduralEntry | undefined;
99
+ /** Number of stored patterns */
100
+ size(): number;
101
+ /** Clear all patterns */
102
+ clear(): void;
103
+ private evict;
104
+ }
105
+ /**
106
+ * Cross-agent shared knowledge base.
107
+ * Any agent can contribute; all agents can query.
108
+ * Relevance scored by tag overlap and access frequency.
109
+ */
110
+ export declare class SharedLongTermMemory {
111
+ private entries;
112
+ private maxEntries;
113
+ constructor(options?: {
114
+ maxEntries?: number;
115
+ });
116
+ /** Contribute knowledge to the shared store */
117
+ contribute(sourceAgent: string, content: string, tags?: string[], metadata?: Record<string, unknown>): string;
118
+ /** Query shared memory, scored by tag overlap and recency */
119
+ query(agentId: string, options?: RecallOptions): SharedEntry[];
120
+ /** Get all entries contributed by a specific agent */
121
+ getByAgent(sourceAgent: string): SharedEntry[];
122
+ /** Number of stored entries */
123
+ size(): number;
124
+ /** Clear all entries */
125
+ clear(): void;
126
+ private evict;
127
+ }
128
+ /**
129
+ * Unified memory system combining all three layers.
130
+ * Instantiate per-agent for episodic, share ProceduralMemory and
131
+ * SharedLongTermMemory across agents.
132
+ *
133
+ * @example
134
+ * ```ts
135
+ * const procedural = new ProceduralMemory();
136
+ * const shared = new SharedLongTermMemory();
137
+ *
138
+ * const agentMemory = new AgentMemory('agent-1', { procedural, shared });
139
+ * agentMemory.episodic.store('Completed code review', ['review', 'code']);
140
+ * agentMemory.procedural.recordSuccess('chain-review-fix');
141
+ * agentMemory.shared.contribute('agent-1', 'Auth service uses JWT', ['auth']);
142
+ * ```
143
+ */
144
+ export declare class AgentMemory {
145
+ readonly agentId: string;
146
+ readonly episodic: EpisodicMemory;
147
+ readonly procedural: ProceduralMemory;
148
+ readonly shared: SharedLongTermMemory;
149
+ constructor(agentId: string, options?: {
150
+ episodic?: EpisodicMemory;
151
+ procedural?: ProceduralMemory;
152
+ shared?: SharedLongTermMemory;
153
+ });
154
+ /** Recall across all layers, merged and ranked by score */
155
+ recallAll(options?: RecallOptions): MemoryEntry[];
156
+ }
157
+ //# sourceMappingURL=agent-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-memory.d.ts","sourceRoot":"","sources":["../../lib/agent-memory.ts"],"names":[],"mappings":"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"}