dual-brain 0.2.30 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dual-brain/docs/claude-code-extension-points.md +32 -0
- package/.dual-brain/docs/data-tools-capabilities.md +181 -0
- package/.dual-brain/docs/ecosystem-tools.md +91 -0
- package/.dual-brain/docs/panel-handoff.md +124 -0
- package/.dual-brain/docs/ruflo-analysis.md +48 -0
- package/bin/dual-brain.mjs +56 -56
- package/dist/mcp-server/index.d.ts +27 -0
- package/dist/mcp-server/index.js +359 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/src/agent-protocol.d.ts +163 -0
- package/dist/src/agent-protocol.js +368 -0
- package/dist/src/agent-protocol.js.map +1 -0
- package/dist/src/agents/registry.d.ts +52 -0
- package/dist/src/agents/registry.js +393 -0
- package/dist/src/agents/registry.js.map +1 -0
- package/dist/src/awareness.d.ts +93 -0
- package/dist/src/awareness.js +406 -0
- package/dist/src/awareness.js.map +1 -0
- package/dist/src/brief.d.ts +48 -0
- package/dist/src/brief.js +179 -0
- package/dist/src/brief.js.map +1 -0
- package/dist/src/calibration.d.ts +32 -0
- package/dist/src/calibration.js +133 -0
- package/dist/src/calibration.js.map +1 -0
- package/dist/src/checkpoint.d.ts +33 -0
- package/dist/src/checkpoint.js +99 -0
- package/dist/src/checkpoint.js.map +1 -0
- package/dist/src/ci-triage.d.ts +33 -0
- package/dist/src/ci-triage.js +193 -0
- package/dist/src/ci-triage.js.map +1 -0
- package/dist/src/cognitive-loop.d.ts +56 -0
- package/dist/src/cognitive-loop.js +495 -0
- package/dist/src/cognitive-loop.js.map +1 -0
- package/dist/src/collaboration.d.ts +147 -0
- package/dist/src/collaboration.js +438 -0
- package/dist/src/collaboration.js.map +1 -0
- package/dist/src/context-intel.d.ts +47 -0
- package/dist/src/context-intel.js +156 -0
- package/dist/src/context-intel.js.map +1 -0
- package/dist/src/context.d.ts +53 -0
- package/dist/src/context.js +332 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/continuity.d.ts +89 -0
- package/dist/src/continuity.js +230 -0
- package/dist/src/continuity.js.map +1 -0
- package/dist/src/cost-tracker.d.ts +47 -0
- package/dist/src/cost-tracker.js +170 -0
- package/dist/src/cost-tracker.js.map +1 -0
- package/dist/src/debrief.d.ts +53 -0
- package/dist/src/debrief.js +222 -0
- package/dist/src/debrief.js.map +1 -0
- package/dist/src/decide.d.ts +96 -0
- package/dist/src/decide.js +744 -0
- package/dist/src/decide.js.map +1 -0
- package/dist/src/decompose.d.ts +39 -0
- package/dist/src/decompose.js +218 -0
- package/dist/src/decompose.js.map +1 -0
- package/dist/src/detect.d.ts +91 -0
- package/dist/src/detect.js +544 -0
- package/dist/src/detect.js.map +1 -0
- package/dist/src/dispatch.d.ts +154 -0
- package/dist/src/dispatch.js +1306 -0
- package/dist/src/dispatch.js.map +1 -0
- package/dist/src/doctor.d.ts +421 -0
- package/dist/src/doctor.js +1689 -0
- package/dist/src/doctor.js.map +1 -0
- package/dist/src/engine.d.ts +70 -0
- package/dist/src/engine.js +155 -0
- package/dist/src/engine.js.map +1 -0
- package/dist/src/envelope.d.ts +36 -0
- package/dist/src/envelope.js +80 -0
- package/dist/src/envelope.js.map +1 -0
- package/dist/src/failure-memory.d.ts +55 -0
- package/dist/src/failure-memory.js +175 -0
- package/dist/src/failure-memory.js.map +1 -0
- package/dist/src/fx.d.ts +87 -0
- package/dist/src/fx.js +272 -0
- package/dist/src/fx.js.map +1 -0
- package/dist/src/governance.d.ts +93 -0
- package/dist/src/governance.js +261 -0
- package/dist/src/governance.js.map +1 -0
- package/dist/src/handoff.d.ts +11 -0
- package/dist/src/handoff.js +90 -0
- package/dist/src/handoff.js.map +1 -0
- package/dist/src/head-protocol.d.ts +76 -0
- package/dist/src/head-protocol.js +109 -0
- package/dist/src/head-protocol.js.map +1 -0
- package/dist/src/head.d.ts +222 -0
- package/dist/src/head.js +765 -0
- package/dist/src/head.js.map +1 -0
- package/dist/src/health.d.ts +132 -0
- package/dist/src/health.js +435 -0
- package/dist/src/health.js.map +1 -0
- package/dist/src/inbox.d.ts +70 -0
- package/dist/src/inbox.js +218 -0
- package/dist/src/inbox.js.map +1 -0
- package/dist/src/index.d.ts +33 -0
- package/dist/src/index.js +38 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/install-hooks.d.ts +13 -0
- package/dist/src/install-hooks.js +88 -0
- package/dist/src/install-hooks.js.map +1 -0
- package/dist/src/integrity.d.ts +59 -0
- package/dist/src/integrity.js +206 -0
- package/dist/src/integrity.js.map +1 -0
- package/dist/src/intelligence.d.ts +104 -0
- package/dist/src/intelligence.js +391 -0
- package/dist/src/intelligence.js.map +1 -0
- package/dist/src/ledger.d.ts +54 -0
- package/dist/src/ledger.js +179 -0
- package/dist/src/ledger.js.map +1 -0
- package/dist/src/living-docs.d.ts +14 -0
- package/dist/src/living-docs.js +197 -0
- package/dist/src/living-docs.js.map +1 -0
- package/dist/src/memory-tiers.d.ts +37 -0
- package/dist/src/memory-tiers.js +160 -0
- package/dist/src/memory-tiers.js.map +1 -0
- package/dist/src/model-profiles.d.ts +65 -0
- package/dist/src/model-profiles.js +568 -0
- package/dist/src/model-profiles.js.map +1 -0
- package/dist/src/models.d.ts +58 -0
- package/dist/src/models.js +327 -0
- package/dist/src/models.js.map +1 -0
- package/dist/src/narrative.d.ts +54 -0
- package/dist/src/narrative.js +163 -0
- package/dist/src/narrative.js.map +1 -0
- package/dist/src/nextstep.d.ts +16 -0
- package/dist/src/nextstep.js +103 -0
- package/dist/src/nextstep.js.map +1 -0
- package/dist/src/observer.d.ts +18 -0
- package/dist/src/observer.js +251 -0
- package/dist/src/observer.js.map +1 -0
- package/dist/src/outcome.d.ts +110 -0
- package/dist/src/outcome.js +377 -0
- package/dist/src/outcome.js.map +1 -0
- package/dist/src/pipeline.d.ts +167 -0
- package/dist/src/pipeline.js +1503 -0
- package/dist/src/pipeline.js.map +1 -0
- package/dist/src/playbook.d.ts +59 -0
- package/dist/src/playbook.js +238 -0
- package/dist/src/playbook.js.map +1 -0
- package/dist/src/pr-agent.d.ts +97 -0
- package/dist/src/pr-agent.js +195 -0
- package/dist/src/pr-agent.js.map +1 -0
- package/dist/src/predictive.d.ts +57 -0
- package/dist/src/predictive.js +230 -0
- package/dist/src/predictive.js.map +1 -0
- package/dist/src/profile.d.ts +294 -0
- package/dist/src/profile.js +1347 -0
- package/dist/src/profile.js.map +1 -0
- package/dist/src/prompt-audit.d.ts +22 -0
- package/dist/src/prompt-audit.js +194 -0
- package/dist/src/prompt-audit.js.map +1 -0
- package/dist/src/prompt-intel.d.ts +12 -0
- package/dist/src/prompt-intel.js +321 -0
- package/dist/src/prompt-intel.js.map +1 -0
- package/dist/src/provider-context.d.ts +121 -0
- package/dist/src/provider-context.js +222 -0
- package/dist/src/provider-context.js.map +1 -0
- package/dist/src/provider-manager.d.ts +92 -0
- package/dist/src/provider-manager.js +428 -0
- package/dist/src/provider-manager.js.map +1 -0
- package/dist/src/receipt.d.ts +87 -0
- package/dist/src/receipt.js +326 -0
- package/dist/src/receipt.js.map +1 -0
- package/dist/src/recommendations.d.ts +13 -0
- package/dist/src/recommendations.js +291 -0
- package/dist/src/recommendations.js.map +1 -0
- package/dist/src/redact.d.ts +15 -0
- package/dist/src/redact.js +129 -0
- package/dist/src/redact.js.map +1 -0
- package/dist/src/replit.d.ts +397 -0
- package/dist/src/replit.js +1160 -0
- package/dist/src/replit.js.map +1 -0
- package/dist/src/repo.d.ts +149 -0
- package/dist/src/repo.js +416 -0
- package/dist/src/repo.js.map +1 -0
- package/dist/src/revert.d.ts +30 -0
- package/dist/src/revert.js +166 -0
- package/dist/src/revert.js.map +1 -0
- package/dist/src/room.d.ts +102 -0
- package/dist/src/room.js +212 -0
- package/dist/src/room.js.map +1 -0
- package/dist/src/routing-advisor.d.ts +57 -0
- package/dist/src/routing-advisor.js +221 -0
- package/dist/src/routing-advisor.js.map +1 -0
- package/dist/src/self-correct.d.ts +40 -0
- package/dist/src/self-correct.js +137 -0
- package/dist/src/self-correct.js.map +1 -0
- package/dist/src/session-lock.d.ts +35 -0
- package/dist/src/session-lock.js +134 -0
- package/dist/src/session-lock.js.map +1 -0
- package/dist/src/session.d.ts +267 -0
- package/dist/src/session.js +1660 -0
- package/dist/src/session.js.map +1 -0
- package/dist/src/settings-tui.d.ts +5 -0
- package/dist/src/settings-tui.js +422 -0
- package/dist/src/settings-tui.js.map +1 -0
- package/dist/src/setup-flow.d.ts +63 -0
- package/dist/src/setup-flow.js +233 -0
- package/dist/src/setup-flow.js.map +1 -0
- package/dist/src/signal.d.ts +19 -0
- package/dist/src/signal.js +122 -0
- package/dist/src/signal.js.map +1 -0
- package/dist/src/simmer.d.ts +85 -0
- package/dist/src/simmer.js +224 -0
- package/dist/src/simmer.js.map +1 -0
- package/dist/src/state-export.d.ts +129 -0
- package/dist/src/state-export.js +233 -0
- package/dist/src/state-export.js.map +1 -0
- package/dist/src/strategy.d.ts +54 -0
- package/dist/src/strategy.js +95 -0
- package/dist/src/strategy.js.map +1 -0
- package/dist/src/subscription.d.ts +40 -0
- package/dist/src/subscription.js +189 -0
- package/dist/src/subscription.js.map +1 -0
- package/dist/src/templates.d.ts +208 -0
- package/dist/src/templates.js +238 -0
- package/dist/src/templates.js.map +1 -0
- package/dist/src/test.d.ts +9 -0
- package/dist/src/test.js +1173 -0
- package/dist/src/test.js.map +1 -0
- package/dist/src/think-engine.d.ts +67 -0
- package/dist/src/think-engine.js +412 -0
- package/dist/src/think-engine.js.map +1 -0
- package/dist/src/tui.d.ts +71 -0
- package/dist/src/tui.js +242 -0
- package/dist/src/tui.js.map +1 -0
- package/dist/src/types.d.ts +177 -0
- package/dist/src/types.js +6 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/update-check.d.ts +7 -0
- package/dist/src/update-check.js +36 -0
- package/dist/src/update-check.js.map +1 -0
- package/dist/src/wave-planner.d.ts +30 -0
- package/dist/src/wave-planner.js +281 -0
- package/dist/src/wave-planner.js.map +1 -0
- package/hooks/head-guard.sh +41 -0
- package/hooks/precompact.mjs +3 -3
- package/hooks/session-end.mjs +3 -3
- package/hooks/task-classifier.mjs +328 -0
- package/hooks/vibe-router.mjs +387 -0
- package/install.mjs +2 -2
- package/package.json +29 -153
- package/src/agents/registry.mjs +0 -405
- package/src/awareness.mjs +0 -425
- package/src/brief.mjs +0 -266
- package/src/calibration.mjs +0 -148
- package/src/checkpoint.mjs +0 -109
- package/src/ci-triage.mjs +0 -191
- package/src/cognitive-loop.mjs +0 -562
- package/src/collaboration.mjs +0 -545
- package/src/context-intel.mjs +0 -158
- package/src/context.mjs +0 -389
- package/src/continuity.mjs +0 -298
- package/src/cost-tracker.mjs +0 -184
- package/src/debrief.mjs +0 -228
- package/src/decide.mjs +0 -1099
- package/src/decompose.mjs +0 -331
- package/src/detect.mjs +0 -702
- package/src/dispatch.mjs +0 -1447
- package/src/doctor.mjs +0 -1607
- package/src/envelope.mjs +0 -139
- package/src/failure-memory.mjs +0 -178
- package/src/fx.mjs +0 -276
- package/src/governance.mjs +0 -279
- package/src/handoff.mjs +0 -87
- package/src/head-protocol.mjs +0 -128
- package/src/head.mjs +0 -952
- package/src/health.mjs +0 -528
- package/src/inbox.mjs +0 -195
- package/src/index.mjs +0 -44
- package/src/install-hooks.mjs +0 -100
- package/src/integrity.mjs +0 -245
- package/src/intelligence.mjs +0 -447
- package/src/ledger.mjs +0 -196
- package/src/living-docs.mjs +0 -210
- package/src/memory-tiers.mjs +0 -193
- package/src/models.mjs +0 -363
- package/src/narrative.mjs +0 -169
- package/src/nextstep.mjs +0 -100
- package/src/observer.mjs +0 -241
- package/src/outcome.mjs +0 -400
- package/src/pipeline.mjs +0 -1711
- package/src/playbook.mjs +0 -257
- package/src/pr-agent.mjs +0 -214
- package/src/predictive.mjs +0 -250
- package/src/profile.mjs +0 -1411
- package/src/prompt-audit.mjs +0 -231
- package/src/prompt-intel.mjs +0 -325
- package/src/provider-context.mjs +0 -257
- package/src/receipt.mjs +0 -344
- package/src/recommendations.mjs +0 -296
- package/src/redact.mjs +0 -192
- package/src/replit.mjs +0 -1210
- package/src/repo.mjs +0 -445
- package/src/revert.mjs +0 -149
- package/src/routing-advisor.mjs +0 -204
- package/src/self-correct.mjs +0 -147
- package/src/session-lock.mjs +0 -160
- package/src/session.mjs +0 -1655
- package/src/settings-tui.mjs +0 -373
- package/src/setup-flow.mjs +0 -223
- package/src/signal.mjs +0 -115
- package/src/simmer.mjs +0 -241
- package/src/strategy.mjs +0 -235
- package/src/subscription.mjs +0 -212
- package/src/templates.mjs +0 -260
- package/src/think-engine.mjs +0 -428
- package/src/tui.mjs +0 -276
- package/src/update-check.mjs +0 -35
- 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 {};
|