dual-brain 0.2.29 → 0.3.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 (309) hide show
  1. package/.dual-brain/docs/claude-code-extension-points.md +32 -0
  2. package/.dual-brain/docs/data-tools-capabilities.md +181 -0
  3. package/.dual-brain/docs/ecosystem-tools.md +91 -0
  4. package/.dual-brain/docs/panel-handoff.md +124 -0
  5. package/.dual-brain/docs/ruflo-analysis.md +48 -0
  6. package/bin/dual-brain.mjs +122 -51
  7. package/dist/mcp-server/index.d.ts +27 -0
  8. package/dist/mcp-server/index.js +359 -0
  9. package/dist/mcp-server/index.js.map +1 -0
  10. package/dist/src/agent-protocol.d.ts +163 -0
  11. package/dist/src/agent-protocol.js +368 -0
  12. package/dist/src/agent-protocol.js.map +1 -0
  13. package/dist/src/agents/registry.d.ts +52 -0
  14. package/dist/src/agents/registry.js +393 -0
  15. package/dist/src/agents/registry.js.map +1 -0
  16. package/dist/src/awareness.d.ts +93 -0
  17. package/dist/src/awareness.js +406 -0
  18. package/dist/src/awareness.js.map +1 -0
  19. package/dist/src/brief.d.ts +48 -0
  20. package/dist/src/brief.js +179 -0
  21. package/dist/src/brief.js.map +1 -0
  22. package/dist/src/calibration.d.ts +32 -0
  23. package/dist/src/calibration.js +133 -0
  24. package/dist/src/calibration.js.map +1 -0
  25. package/dist/src/checkpoint.d.ts +33 -0
  26. package/dist/src/checkpoint.js +99 -0
  27. package/dist/src/checkpoint.js.map +1 -0
  28. package/dist/src/ci-triage.d.ts +33 -0
  29. package/dist/src/ci-triage.js +193 -0
  30. package/dist/src/ci-triage.js.map +1 -0
  31. package/dist/src/cognitive-loop.d.ts +56 -0
  32. package/dist/src/cognitive-loop.js +495 -0
  33. package/dist/src/cognitive-loop.js.map +1 -0
  34. package/dist/src/collaboration.d.ts +147 -0
  35. package/dist/src/collaboration.js +438 -0
  36. package/dist/src/collaboration.js.map +1 -0
  37. package/dist/src/context-intel.d.ts +47 -0
  38. package/dist/src/context-intel.js +156 -0
  39. package/dist/src/context-intel.js.map +1 -0
  40. package/dist/src/context.d.ts +53 -0
  41. package/dist/src/context.js +332 -0
  42. package/dist/src/context.js.map +1 -0
  43. package/dist/src/continuity.d.ts +89 -0
  44. package/dist/src/continuity.js +230 -0
  45. package/dist/src/continuity.js.map +1 -0
  46. package/dist/src/cost-tracker.d.ts +47 -0
  47. package/dist/src/cost-tracker.js +170 -0
  48. package/dist/src/cost-tracker.js.map +1 -0
  49. package/dist/src/debrief.d.ts +53 -0
  50. package/dist/src/debrief.js +222 -0
  51. package/dist/src/debrief.js.map +1 -0
  52. package/dist/src/decide.d.ts +96 -0
  53. package/dist/src/decide.js +744 -0
  54. package/dist/src/decide.js.map +1 -0
  55. package/dist/src/decompose.d.ts +39 -0
  56. package/dist/src/decompose.js +218 -0
  57. package/dist/src/decompose.js.map +1 -0
  58. package/dist/src/detect.d.ts +91 -0
  59. package/dist/src/detect.js +544 -0
  60. package/dist/src/detect.js.map +1 -0
  61. package/dist/src/dispatch.d.ts +154 -0
  62. package/dist/src/dispatch.js +1306 -0
  63. package/dist/src/dispatch.js.map +1 -0
  64. package/dist/src/doctor.d.ts +421 -0
  65. package/dist/src/doctor.js +1689 -0
  66. package/dist/src/doctor.js.map +1 -0
  67. package/dist/src/engine.d.ts +70 -0
  68. package/dist/src/engine.js +155 -0
  69. package/dist/src/engine.js.map +1 -0
  70. package/dist/src/envelope.d.ts +36 -0
  71. package/dist/src/envelope.js +80 -0
  72. package/dist/src/envelope.js.map +1 -0
  73. package/dist/src/failure-memory.d.ts +55 -0
  74. package/dist/src/failure-memory.js +175 -0
  75. package/dist/src/failure-memory.js.map +1 -0
  76. package/dist/src/fx.d.ts +87 -0
  77. package/dist/src/fx.js +272 -0
  78. package/dist/src/fx.js.map +1 -0
  79. package/dist/src/governance.d.ts +93 -0
  80. package/dist/src/governance.js +261 -0
  81. package/dist/src/governance.js.map +1 -0
  82. package/dist/src/handoff.d.ts +11 -0
  83. package/dist/src/handoff.js +90 -0
  84. package/dist/src/handoff.js.map +1 -0
  85. package/dist/src/head-protocol.d.ts +76 -0
  86. package/dist/src/head-protocol.js +109 -0
  87. package/dist/src/head-protocol.js.map +1 -0
  88. package/dist/src/head.d.ts +222 -0
  89. package/dist/src/head.js +765 -0
  90. package/dist/src/head.js.map +1 -0
  91. package/dist/src/health.d.ts +132 -0
  92. package/dist/src/health.js +435 -0
  93. package/dist/src/health.js.map +1 -0
  94. package/dist/src/inbox.d.ts +70 -0
  95. package/dist/src/inbox.js +218 -0
  96. package/dist/src/inbox.js.map +1 -0
  97. package/dist/src/index.d.ts +33 -0
  98. package/dist/src/index.js +38 -0
  99. package/dist/src/index.js.map +1 -0
  100. package/dist/src/install-hooks.d.ts +13 -0
  101. package/dist/src/install-hooks.js +88 -0
  102. package/dist/src/install-hooks.js.map +1 -0
  103. package/dist/src/integrity.d.ts +59 -0
  104. package/dist/src/integrity.js +206 -0
  105. package/dist/src/integrity.js.map +1 -0
  106. package/dist/src/intelligence.d.ts +104 -0
  107. package/dist/src/intelligence.js +391 -0
  108. package/dist/src/intelligence.js.map +1 -0
  109. package/dist/src/ledger.d.ts +54 -0
  110. package/dist/src/ledger.js +179 -0
  111. package/dist/src/ledger.js.map +1 -0
  112. package/dist/src/living-docs.d.ts +14 -0
  113. package/dist/src/living-docs.js +197 -0
  114. package/dist/src/living-docs.js.map +1 -0
  115. package/dist/src/memory-tiers.d.ts +37 -0
  116. package/dist/src/memory-tiers.js +160 -0
  117. package/dist/src/memory-tiers.js.map +1 -0
  118. package/dist/src/model-profiles.d.ts +65 -0
  119. package/dist/src/model-profiles.js +568 -0
  120. package/dist/src/model-profiles.js.map +1 -0
  121. package/dist/src/models.d.ts +58 -0
  122. package/dist/src/models.js +327 -0
  123. package/dist/src/models.js.map +1 -0
  124. package/dist/src/narrative.d.ts +54 -0
  125. package/dist/src/narrative.js +163 -0
  126. package/dist/src/narrative.js.map +1 -0
  127. package/dist/src/nextstep.d.ts +16 -0
  128. package/dist/src/nextstep.js +103 -0
  129. package/dist/src/nextstep.js.map +1 -0
  130. package/dist/src/observer.d.ts +18 -0
  131. package/dist/src/observer.js +251 -0
  132. package/dist/src/observer.js.map +1 -0
  133. package/dist/src/outcome.d.ts +110 -0
  134. package/dist/src/outcome.js +377 -0
  135. package/dist/src/outcome.js.map +1 -0
  136. package/dist/src/pipeline.d.ts +167 -0
  137. package/dist/src/pipeline.js +1503 -0
  138. package/dist/src/pipeline.js.map +1 -0
  139. package/dist/src/playbook.d.ts +59 -0
  140. package/dist/src/playbook.js +238 -0
  141. package/dist/src/playbook.js.map +1 -0
  142. package/dist/src/pr-agent.d.ts +97 -0
  143. package/dist/src/pr-agent.js +195 -0
  144. package/dist/src/pr-agent.js.map +1 -0
  145. package/dist/src/predictive.d.ts +57 -0
  146. package/dist/src/predictive.js +230 -0
  147. package/dist/src/predictive.js.map +1 -0
  148. package/dist/src/profile.d.ts +294 -0
  149. package/dist/src/profile.js +1347 -0
  150. package/dist/src/profile.js.map +1 -0
  151. package/dist/src/prompt-audit.d.ts +22 -0
  152. package/dist/src/prompt-audit.js +194 -0
  153. package/dist/src/prompt-audit.js.map +1 -0
  154. package/dist/src/prompt-intel.d.ts +12 -0
  155. package/dist/src/prompt-intel.js +321 -0
  156. package/dist/src/prompt-intel.js.map +1 -0
  157. package/dist/src/provider-context.d.ts +121 -0
  158. package/dist/src/provider-context.js +222 -0
  159. package/dist/src/provider-context.js.map +1 -0
  160. package/dist/src/provider-manager.d.ts +92 -0
  161. package/dist/src/provider-manager.js +428 -0
  162. package/dist/src/provider-manager.js.map +1 -0
  163. package/dist/src/receipt.d.ts +87 -0
  164. package/dist/src/receipt.js +326 -0
  165. package/dist/src/receipt.js.map +1 -0
  166. package/dist/src/recommendations.d.ts +13 -0
  167. package/dist/src/recommendations.js +291 -0
  168. package/dist/src/recommendations.js.map +1 -0
  169. package/dist/src/redact.d.ts +15 -0
  170. package/dist/src/redact.js +129 -0
  171. package/dist/src/redact.js.map +1 -0
  172. package/dist/src/replit.d.ts +397 -0
  173. package/dist/src/replit.js +1160 -0
  174. package/dist/src/replit.js.map +1 -0
  175. package/dist/src/repo.d.ts +149 -0
  176. package/dist/src/repo.js +416 -0
  177. package/dist/src/repo.js.map +1 -0
  178. package/dist/src/revert.d.ts +30 -0
  179. package/dist/src/revert.js +166 -0
  180. package/dist/src/revert.js.map +1 -0
  181. package/dist/src/room.d.ts +102 -0
  182. package/dist/src/room.js +212 -0
  183. package/dist/src/room.js.map +1 -0
  184. package/dist/src/routing-advisor.d.ts +57 -0
  185. package/dist/src/routing-advisor.js +221 -0
  186. package/dist/src/routing-advisor.js.map +1 -0
  187. package/dist/src/self-correct.d.ts +40 -0
  188. package/dist/src/self-correct.js +137 -0
  189. package/dist/src/self-correct.js.map +1 -0
  190. package/dist/src/session-lock.d.ts +35 -0
  191. package/dist/src/session-lock.js +134 -0
  192. package/dist/src/session-lock.js.map +1 -0
  193. package/dist/src/session.d.ts +267 -0
  194. package/dist/src/session.js +1660 -0
  195. package/dist/src/session.js.map +1 -0
  196. package/dist/src/settings-tui.d.ts +5 -0
  197. package/dist/src/settings-tui.js +422 -0
  198. package/dist/src/settings-tui.js.map +1 -0
  199. package/dist/src/setup-flow.d.ts +63 -0
  200. package/dist/src/setup-flow.js +233 -0
  201. package/dist/src/setup-flow.js.map +1 -0
  202. package/dist/src/signal.d.ts +19 -0
  203. package/dist/src/signal.js +122 -0
  204. package/dist/src/signal.js.map +1 -0
  205. package/dist/src/simmer.d.ts +85 -0
  206. package/dist/src/simmer.js +224 -0
  207. package/dist/src/simmer.js.map +1 -0
  208. package/dist/src/state-export.d.ts +129 -0
  209. package/dist/src/state-export.js +233 -0
  210. package/dist/src/state-export.js.map +1 -0
  211. package/dist/src/strategy.d.ts +54 -0
  212. package/dist/src/strategy.js +95 -0
  213. package/dist/src/strategy.js.map +1 -0
  214. package/dist/src/subscription.d.ts +40 -0
  215. package/dist/src/subscription.js +189 -0
  216. package/dist/src/subscription.js.map +1 -0
  217. package/dist/src/templates.d.ts +208 -0
  218. package/dist/src/templates.js +238 -0
  219. package/dist/src/templates.js.map +1 -0
  220. package/dist/src/test.d.ts +9 -0
  221. package/dist/src/test.js +1173 -0
  222. package/dist/src/test.js.map +1 -0
  223. package/dist/src/think-engine.d.ts +67 -0
  224. package/dist/src/think-engine.js +412 -0
  225. package/dist/src/think-engine.js.map +1 -0
  226. package/dist/src/tui.d.ts +71 -0
  227. package/dist/src/tui.js +242 -0
  228. package/dist/src/tui.js.map +1 -0
  229. package/dist/src/types.d.ts +177 -0
  230. package/dist/src/types.js +6 -0
  231. package/dist/src/types.js.map +1 -0
  232. package/dist/src/update-check.d.ts +7 -0
  233. package/dist/src/update-check.js +36 -0
  234. package/dist/src/update-check.js.map +1 -0
  235. package/dist/src/wave-planner.d.ts +30 -0
  236. package/dist/src/wave-planner.js +281 -0
  237. package/dist/src/wave-planner.js.map +1 -0
  238. package/hooks/head-guard.sh +41 -0
  239. package/hooks/task-classifier.mjs +328 -0
  240. package/hooks/vibe-router.mjs +387 -0
  241. package/package.json +29 -153
  242. package/src/agents/registry.mjs +0 -405
  243. package/src/awareness.mjs +0 -425
  244. package/src/brief.mjs +0 -266
  245. package/src/calibration.mjs +0 -148
  246. package/src/checkpoint.mjs +0 -109
  247. package/src/ci-triage.mjs +0 -191
  248. package/src/cognitive-loop.mjs +0 -562
  249. package/src/collaboration.mjs +0 -545
  250. package/src/context-intel.mjs +0 -158
  251. package/src/context.mjs +0 -389
  252. package/src/continuity.mjs +0 -298
  253. package/src/cost-tracker.mjs +0 -184
  254. package/src/debrief.mjs +0 -228
  255. package/src/decide.mjs +0 -1099
  256. package/src/decompose.mjs +0 -331
  257. package/src/detect.mjs +0 -702
  258. package/src/dispatch.mjs +0 -1447
  259. package/src/doctor.mjs +0 -1607
  260. package/src/envelope.mjs +0 -139
  261. package/src/failure-memory.mjs +0 -178
  262. package/src/fx.mjs +0 -276
  263. package/src/governance.mjs +0 -279
  264. package/src/handoff.mjs +0 -85
  265. package/src/head-protocol.mjs +0 -128
  266. package/src/head.mjs +0 -952
  267. package/src/health.mjs +0 -528
  268. package/src/inbox.mjs +0 -195
  269. package/src/index.mjs +0 -44
  270. package/src/install-hooks.mjs +0 -100
  271. package/src/integrity.mjs +0 -245
  272. package/src/intelligence.mjs +0 -447
  273. package/src/ledger.mjs +0 -196
  274. package/src/living-docs.mjs +0 -210
  275. package/src/memory-tiers.mjs +0 -193
  276. package/src/models.mjs +0 -363
  277. package/src/narrative.mjs +0 -169
  278. package/src/nextstep.mjs +0 -100
  279. package/src/observer.mjs +0 -241
  280. package/src/outcome.mjs +0 -386
  281. package/src/pipeline.mjs +0 -1689
  282. package/src/playbook.mjs +0 -257
  283. package/src/pr-agent.mjs +0 -214
  284. package/src/predictive.mjs +0 -250
  285. package/src/profile.mjs +0 -1411
  286. package/src/prompt-audit.mjs +0 -231
  287. package/src/prompt-intel.mjs +0 -325
  288. package/src/provider-context.mjs +0 -257
  289. package/src/receipt.mjs +0 -344
  290. package/src/recommendations.mjs +0 -291
  291. package/src/redact.mjs +0 -192
  292. package/src/replit.mjs +0 -1210
  293. package/src/repo.mjs +0 -445
  294. package/src/revert.mjs +0 -149
  295. package/src/routing-advisor.mjs +0 -200
  296. package/src/self-correct.mjs +0 -146
  297. package/src/session-lock.mjs +0 -160
  298. package/src/session.mjs +0 -1655
  299. package/src/settings-tui.mjs +0 -373
  300. package/src/setup-flow.mjs +0 -215
  301. package/src/signal.mjs +0 -114
  302. package/src/simmer.mjs +0 -241
  303. package/src/strategy.mjs +0 -235
  304. package/src/subscription.mjs +0 -212
  305. package/src/templates.mjs +0 -260
  306. package/src/think-engine.mjs +0 -428
  307. package/src/tui.mjs +0 -276
  308. package/src/update-check.mjs +0 -35
  309. package/src/wave-planner.mjs +0 -294
@@ -0,0 +1,368 @@
1
+ /**
2
+ * agent-protocol.ts — Typed contract system for the dual-brain agent hierarchy.
3
+ *
4
+ * Defines how HEAD, Managers, Supervisors, and Workers communicate:
5
+ * what they receive, what they produce, how they escalate, and how they report.
6
+ *
7
+ * Hierarchy:
8
+ * HEAD (user's session, lightest context)
9
+ * → Manager (project-level, persistent across sessions)
10
+ * → Supervisor (wave-level, deploys and monitors workers)
11
+ * → Worker (task-level, executes and reports)
12
+ */
13
+ import { listRooms, readInsights, readPlan, readDecision, readWorkerAssignment, readWorkerResult, getWorkerStatuses, readUserInput, getRoom, } from './room.js';
14
+ // ─── Depth Classification ─────────────────────────────────────────────────
15
+ const WORKER_KEYWORDS = [
16
+ 'fix typo', 'rename', 'update version', 'bump', 'add comment',
17
+ 'format', 'lint', 'delete', 'remove unused', 'change string',
18
+ 'update import', 'toggle', 'flip', 'swap',
19
+ ];
20
+ const SUPERVISOR_KEYWORDS = [
21
+ 'implement', 'add feature', 'create', 'build', 'write',
22
+ 'refactor', 'test', 'migrate', 'convert', 'extract',
23
+ 'move', 'split', 'merge files', 'update module',
24
+ ];
25
+ const MANAGER_KEYWORDS = [
26
+ 'architect', 'redesign', 'overhaul', 'rewrite', 'multi-module',
27
+ 'cross-cutting', 'system', 'platform', 'framework', 'migration plan',
28
+ 'full rewrite', 'new system', 'integrate', 'multi-service',
29
+ ];
30
+ /**
31
+ * Determine how deep the hierarchy should go for this task.
32
+ * Simple tasks return 'worker' (HEAD dispatches directly).
33
+ * Medium returns 'supervisor'. Complex returns 'manager'.
34
+ */
35
+ export function classifyDepth(taskDescription, complexity) {
36
+ const lower = taskDescription.toLowerCase();
37
+ // If explicit complexity score is provided, use thresholds
38
+ if (complexity !== undefined) {
39
+ if (complexity <= 0.2)
40
+ return 'worker';
41
+ if (complexity <= 0.5)
42
+ return 'supervisor';
43
+ return 'manager';
44
+ }
45
+ // Keyword matching — check from most complex to simplest
46
+ for (const kw of MANAGER_KEYWORDS) {
47
+ if (lower.includes(kw))
48
+ return 'manager';
49
+ }
50
+ for (const kw of SUPERVISOR_KEYWORDS) {
51
+ if (lower.includes(kw))
52
+ return 'supervisor';
53
+ }
54
+ for (const kw of WORKER_KEYWORDS) {
55
+ if (lower.includes(kw))
56
+ return 'worker';
57
+ }
58
+ // Heuristic: longer descriptions tend to be more complex
59
+ const wordCount = taskDescription.trim().split(/\s+/).length;
60
+ if (wordCount <= 8)
61
+ return 'worker';
62
+ if (wordCount <= 30)
63
+ return 'supervisor';
64
+ return 'manager';
65
+ }
66
+ // ─── Build Functions ──────────────────────────────────────────────────────
67
+ /**
68
+ * Assemble HEAD's input from room files and provider state.
69
+ */
70
+ export function buildHeadInput(cwd) {
71
+ const roomSummaries = listRooms(cwd);
72
+ // Gather recent insights from all active rooms
73
+ const recentInsights = [];
74
+ for (const room of roomSummaries) {
75
+ if (room.status !== 'active')
76
+ continue;
77
+ const insights = readInsights(room.id, cwd);
78
+ recentInsights.push(...insights);
79
+ }
80
+ // Sort insights by timestamp descending, keep most recent
81
+ recentInsights.sort((a, b) => {
82
+ return new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime();
83
+ });
84
+ const trimmedInsights = recentInsights.slice(0, 10);
85
+ return {
86
+ userMessage: '', // Caller fills this in
87
+ roomSummaries,
88
+ providerHealth: [], // Caller fills from health module
89
+ recentInsights: trimmedInsights,
90
+ };
91
+ }
92
+ /**
93
+ * Assemble Manager's input from room files.
94
+ */
95
+ export function buildManagerInput(roomId, cwd) {
96
+ const room = getRoom(roomId, cwd);
97
+ const taskDescription = room?.meta?.taskDescription || '';
98
+ // Gather user inputs
99
+ const userInput = readUserInput(roomId, cwd);
100
+ const userInputs = userInput ? [userInput] : [];
101
+ // Gather decisions
102
+ const decision = readDecision(roomId, cwd);
103
+ const decisions = decision ? [decision] : [];
104
+ // Gather wave results from completed workers
105
+ const plan = readPlan(roomId, cwd);
106
+ const waveResults = [];
107
+ if (plan?.waves) {
108
+ for (const wave of plan.waves) {
109
+ if (wave.status !== 'completed' && wave.status !== 'failed')
110
+ continue;
111
+ const workerStatuses = getWorkerStatuses(roomId, cwd);
112
+ const workerResults = [];
113
+ for (const [workerId, status] of Object.entries(workerStatuses)) {
114
+ if (status === 'completed' || status === 'failed') {
115
+ const result = readWorkerResult(roomId, workerId, cwd);
116
+ if (result)
117
+ workerResults.push(result);
118
+ }
119
+ }
120
+ const successCount = workerResults.filter(r => r.status === 'success').length;
121
+ const qualityScore = workerResults.length > 0
122
+ ? successCount / workerResults.length
123
+ : 0;
124
+ waveResults.push({
125
+ waveId: wave.id,
126
+ status: wave.status === 'completed' ? 'completed'
127
+ : successCount > 0 ? 'partial' : 'failed',
128
+ workerResults,
129
+ qualityScore,
130
+ });
131
+ }
132
+ }
133
+ return {
134
+ roomId,
135
+ taskDescription,
136
+ userInputs,
137
+ decisions,
138
+ waveResults,
139
+ modelProfiles: [], // Caller fills from model-profiles module
140
+ providerHealth: [], // Caller fills from health module
141
+ };
142
+ }
143
+ /**
144
+ * Assemble Supervisor's input for a specific wave.
145
+ */
146
+ export function buildSupervisorInput(roomId, waveId, cwd) {
147
+ const plan = readPlan(roomId, cwd);
148
+ let tasks = [];
149
+ if (plan?.waves) {
150
+ const wave = plan.waves.find(w => w.id === waveId);
151
+ if (wave) {
152
+ tasks = wave.tasks;
153
+ }
154
+ }
155
+ return {
156
+ roomId,
157
+ waveId,
158
+ tasks,
159
+ modelProfiles: [], // Caller fills
160
+ budget: buildBudget('balanced', tasks.length),
161
+ providerHealth: [], // Caller fills
162
+ };
163
+ }
164
+ /**
165
+ * Assemble Worker's input with file contents.
166
+ */
167
+ export function buildWorkerInput(roomId, taskId, cwd) {
168
+ // Try to find the worker assignment by scanning workers
169
+ const workerStatuses = getWorkerStatuses(roomId, cwd);
170
+ let assignment = null;
171
+ for (const workerId of Object.keys(workerStatuses)) {
172
+ const wa = readWorkerAssignment(roomId, workerId, cwd);
173
+ if (wa && wa.taskId === taskId) {
174
+ assignment = wa;
175
+ break;
176
+ }
177
+ }
178
+ // Fallback: build a minimal assignment from the plan
179
+ if (!assignment) {
180
+ const plan = readPlan(roomId, cwd);
181
+ if (plan?.waves) {
182
+ for (const wave of plan.waves) {
183
+ const task = wave.tasks.find(t => t.id === taskId);
184
+ if (task) {
185
+ assignment = {
186
+ taskId: task.id,
187
+ description: task.description,
188
+ model: task.assignedModel || '',
189
+ tier: task.tier,
190
+ files: task.files,
191
+ acceptanceCriteria: [],
192
+ constraints: [],
193
+ };
194
+ break;
195
+ }
196
+ }
197
+ }
198
+ }
199
+ if (!assignment) {
200
+ assignment = {
201
+ taskId,
202
+ description: '',
203
+ model: '',
204
+ tier: 1,
205
+ files: [],
206
+ acceptanceCriteria: [],
207
+ constraints: [],
208
+ };
209
+ }
210
+ // Read file contents for context — actual I/O delegated to caller
211
+ // We provide the structure; caller populates contextFiles with real content
212
+ const contextFiles = {};
213
+ return {
214
+ roomId,
215
+ taskId,
216
+ assignment,
217
+ contextFiles,
218
+ };
219
+ }
220
+ // ─── Validation ───────────────────────────────────────────────────────────
221
+ /**
222
+ * Type-check agent output before accepting.
223
+ * Returns true if the output matches the expected shape for the given level.
224
+ */
225
+ export function validateOutput(level, output) {
226
+ if (!output || typeof output !== 'object')
227
+ return false;
228
+ const o = output;
229
+ switch (level) {
230
+ case 'head':
231
+ return (typeof o.userResponse === 'string' &&
232
+ Array.isArray(o.roomActions) &&
233
+ typeof o.escalationNeeded === 'boolean');
234
+ case 'manager':
235
+ return (Array.isArray(o.insights) &&
236
+ Array.isArray(o.supervisorDeployments) &&
237
+ typeof o.status === 'string' &&
238
+ ['planning', 'executing', 'reviewing', 'completed', 'blocked'].includes(o.status));
239
+ case 'supervisor':
240
+ return (Array.isArray(o.workerDeployments) &&
241
+ Array.isArray(o.qualityChecks) &&
242
+ typeof o.waveStatus === 'string' &&
243
+ ['running', 'completed', 'failed', 'needs-replan'].includes(o.waveStatus));
244
+ case 'worker':
245
+ return (o.result !== null &&
246
+ typeof o.result === 'object' &&
247
+ typeof o.selfAssessment === 'number' &&
248
+ o.selfAssessment >= 0 && o.selfAssessment <= 1 &&
249
+ Array.isArray(o.issues));
250
+ default:
251
+ return false;
252
+ }
253
+ }
254
+ // ─── Cost Estimation ──────────────────────────────────────────────────────
255
+ // Average tokens per tier (rough heuristic)
256
+ const TIER_TOKEN_ESTIMATES = {
257
+ 1: 5000, // search/simple
258
+ 2: 15000, // moderate
259
+ 3: 30000, // complex/think
260
+ };
261
+ /**
262
+ * Estimate token cost for a set of worker deployments.
263
+ * Returns estimated total tokens.
264
+ */
265
+ export function estimateCost(deployments, profiles) {
266
+ let total = 0;
267
+ for (const dep of deployments) {
268
+ const profile = profiles.find(p => p.id === dep.model);
269
+ const tier = profile?.tier || 2;
270
+ const baseTokens = TIER_TOKEN_ESTIMATES[tier] || 15000;
271
+ // Adjust by file count in assignment
272
+ const fileMultiplier = Math.max(1, dep.assignment.files.length * 0.5);
273
+ total += Math.round(baseTokens * fileMultiplier);
274
+ }
275
+ return total;
276
+ }
277
+ // ─── Model Selection ──────────────────────────────────────────────────────
278
+ /**
279
+ * Pick the best available model for a task given budget constraints.
280
+ * Matches task tier to model tier, filtered by availability and budget.
281
+ */
282
+ export function selectModel(task, profiles, budget) {
283
+ // Filter to available models only
284
+ const available = profiles.filter(p => p.available);
285
+ if (available.length === 0) {
286
+ // Fallback: return first profile regardless of availability
287
+ return profiles.length > 0 ? profiles[0].id : '';
288
+ }
289
+ // Determine max tier based on budget
290
+ const maxTier = budget.costTier === 'frugal' ? 1
291
+ : budget.costTier === 'balanced' ? 2
292
+ : budget.costTier === 'quality' ? 3
293
+ : 4; // maximum
294
+ // Filter by budget tier constraint
295
+ const withinBudget = available.filter(p => p.tier <= maxTier);
296
+ const candidates = withinBudget.length > 0 ? withinBudget : available;
297
+ // Score candidates: prefer tier closest to task tier
298
+ const taskTier = task.tier;
299
+ const scored = candidates.map(p => ({
300
+ profile: p,
301
+ distance: Math.abs(p.tier - taskTier),
302
+ }));
303
+ // Sort by distance (closest tier match), then by tier descending (prefer stronger)
304
+ scored.sort((a, b) => {
305
+ if (a.distance !== b.distance)
306
+ return a.distance - b.distance;
307
+ return b.profile.tier - a.profile.tier;
308
+ });
309
+ return scored[0].profile.id;
310
+ }
311
+ // ─── Escalation ───────────────────────────────────────────────────────────
312
+ /**
313
+ * Determine if results are bad enough to escalate to a higher level.
314
+ * Checks failure rate and quality against threshold.
315
+ */
316
+ export function shouldEscalate(results, qualityThreshold = 0.6) {
317
+ if (results.length === 0)
318
+ return false;
319
+ const successCount = results.filter(r => r.status === 'success').length;
320
+ const successRate = successCount / results.length;
321
+ // Escalate if more than half failed
322
+ if (successRate < qualityThreshold)
323
+ return true;
324
+ // Escalate if all results are partial (none fully succeeded)
325
+ if (successCount === 0 && results.some(r => r.status === 'partial'))
326
+ return true;
327
+ return false;
328
+ }
329
+ // ─── Budget Builder ───────────────────────────────────────────────────────
330
+ const BUDGET_PRESETS = {
331
+ frugal: {
332
+ maxTotalTokens: 50_000,
333
+ maxRetries: 1,
334
+ costTier: 'frugal',
335
+ },
336
+ balanced: {
337
+ maxTotalTokens: 200_000,
338
+ maxRetries: 2,
339
+ costTier: 'balanced',
340
+ },
341
+ quality: {
342
+ maxTotalTokens: 500_000,
343
+ maxRetries: 3,
344
+ costTier: 'quality',
345
+ },
346
+ maximum: {
347
+ maxTotalTokens: 1_000_000,
348
+ maxRetries: 5,
349
+ costTier: 'maximum',
350
+ },
351
+ };
352
+ /**
353
+ * Create budget constraints from the user's dial setting and task count.
354
+ */
355
+ export function buildBudget(costTier, taskCount) {
356
+ const preset = BUDGET_PRESETS[costTier] || BUDGET_PRESETS.balanced;
357
+ const maxWorkers = costTier === 'frugal' ? Math.min(taskCount, 2)
358
+ : costTier === 'balanced' ? Math.min(taskCount, 4)
359
+ : costTier === 'quality' ? Math.min(taskCount, 6)
360
+ : Math.min(taskCount, 10);
361
+ return {
362
+ maxWorkers: Math.max(1, maxWorkers),
363
+ maxTotalTokens: preset.maxTotalTokens,
364
+ maxRetries: preset.maxRetries,
365
+ costTier: preset.costTier,
366
+ };
367
+ }
368
+ //# sourceMappingURL=agent-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-protocol.js","sourceRoot":"","sources":["../../src/agent-protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ interface AgentDef {
2
+ id: string;
3
+ name: string;
4
+ tier: string;
5
+ model: string;
6
+ cost?: string;
7
+ intents?: string[];
8
+ taskTypes?: string[];
9
+ minRisk?: string;
10
+ contract?: Record<string, unknown>;
11
+ prompt: string;
12
+ score?: number;
13
+ }
14
+ interface SkillDef {
15
+ command: string;
16
+ agent: string | null;
17
+ tier: string;
18
+ model?: string;
19
+ cost?: string;
20
+ risk?: string;
21
+ description: string;
22
+ objective: (args: string) => string;
23
+ acceptanceCriteria?: string[];
24
+ scope?: string[];
25
+ }
26
+ export declare function getAgents(): Map<string, AgentDef>;
27
+ export declare function getSkills(): Map<string, SkillDef>;
28
+ export declare function matchAgent(intent: string, risk: string, taskType: string): {
29
+ score: number;
30
+ id: string;
31
+ name: string;
32
+ tier: string;
33
+ model: string;
34
+ cost?: string;
35
+ intents?: string[];
36
+ taskTypes?: string[];
37
+ minRisk?: string;
38
+ contract?: Record<string, unknown>;
39
+ prompt: string;
40
+ }[];
41
+ export declare function matchSkill(command: string): SkillDef | null;
42
+ export declare function skillToTaskBrief(command: string, args: string): {
43
+ objective: string;
44
+ scope: string[];
45
+ tier: string;
46
+ model: string | undefined;
47
+ risk: string;
48
+ acceptanceCriteria: string[];
49
+ agentId: string | null;
50
+ cost: string | undefined;
51
+ } | null;
52
+ export {};