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,377 @@
|
|
|
1
|
+
import { mkdirSync, appendFileSync, writeFileSync, readFileSync, existsSync, readdirSync, unlinkSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { randomUUID } from 'crypto';
|
|
4
|
+
import { execSync } from 'child_process';
|
|
5
|
+
const STOP_WORDS = new Set([
|
|
6
|
+
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'to', 'from',
|
|
7
|
+
'in', 'on', 'for', 'with', 'and', 'or', 'but', 'not', 'this', 'that', 'it',
|
|
8
|
+
]);
|
|
9
|
+
function outcomesDir(cwd) {
|
|
10
|
+
return join(cwd, '.dualbrain', 'outcomes');
|
|
11
|
+
}
|
|
12
|
+
function todayFile(cwd) {
|
|
13
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
14
|
+
return join(outcomesDir(cwd), `outcomes-${date}.jsonl`);
|
|
15
|
+
}
|
|
16
|
+
function ensureDir(cwd) {
|
|
17
|
+
mkdirSync(outcomesDir(cwd), { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
function readOutcomeFile(filePath) {
|
|
20
|
+
try {
|
|
21
|
+
return readFileSync(filePath, 'utf8')
|
|
22
|
+
.split('\n')
|
|
23
|
+
.filter(Boolean)
|
|
24
|
+
.flatMap(line => {
|
|
25
|
+
try {
|
|
26
|
+
return [JSON.parse(line)];
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function last7DaysFiles(cwd) {
|
|
38
|
+
const dir = outcomesDir(cwd);
|
|
39
|
+
const files = [];
|
|
40
|
+
for (let i = 0; i < 7; i++) {
|
|
41
|
+
const d = new Date(Date.now() - i * 86_400_000).toISOString().slice(0, 10);
|
|
42
|
+
const f = join(dir, `outcomes-${d}.jsonl`);
|
|
43
|
+
if (existsSync(f))
|
|
44
|
+
files.push(f);
|
|
45
|
+
}
|
|
46
|
+
return files;
|
|
47
|
+
}
|
|
48
|
+
const INTENT_KEYWORDS = ['implement', 'fix', 'refactor', 'review', 'search', 'test'];
|
|
49
|
+
function deriveIntent(prompt, tier) {
|
|
50
|
+
const lower = (prompt ?? '').toLowerCase();
|
|
51
|
+
for (const kw of INTENT_KEYWORDS) {
|
|
52
|
+
if (lower.includes(kw))
|
|
53
|
+
return kw;
|
|
54
|
+
}
|
|
55
|
+
return tier ?? 'execute';
|
|
56
|
+
}
|
|
57
|
+
function pruneOutcomes(cwd) {
|
|
58
|
+
const dir = join(cwd, '.dualbrain', 'outcomes');
|
|
59
|
+
try {
|
|
60
|
+
const files = readdirSync(dir).filter(f => f.startsWith('outcome_')).sort();
|
|
61
|
+
if (files.length > 500) {
|
|
62
|
+
const toDelete = files.slice(0, files.length - 400);
|
|
63
|
+
for (const f of toDelete) {
|
|
64
|
+
try {
|
|
65
|
+
unlinkSync(join(dir, f));
|
|
66
|
+
}
|
|
67
|
+
catch { }
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch { }
|
|
72
|
+
}
|
|
73
|
+
export function recordDispatchOutcome(dispatchInput, result) {
|
|
74
|
+
try {
|
|
75
|
+
const cwd = dispatchInput.cwd ?? process.cwd();
|
|
76
|
+
const decision = dispatchInput.decision ?? {};
|
|
77
|
+
ensureDir(cwd);
|
|
78
|
+
const id = `out_${Date.now().toString(36)}`;
|
|
79
|
+
const record = {
|
|
80
|
+
id,
|
|
81
|
+
timestamp: new Date().toISOString(),
|
|
82
|
+
prompt: (dispatchInput.prompt ?? '').slice(0, 200),
|
|
83
|
+
tier: decision.tier ?? result.tier ?? 'execute',
|
|
84
|
+
model: decision.model ?? result.model ?? 'unknown',
|
|
85
|
+
provider: decision.provider ?? result.provider ?? 'unknown',
|
|
86
|
+
success: result.status === 'success' || result.status === 'completed',
|
|
87
|
+
status: result.status ?? 'unknown',
|
|
88
|
+
durationMs: result.durationMs ?? 0,
|
|
89
|
+
filesChanged: result.filesChanged?.length ?? 0,
|
|
90
|
+
errors: (result.errors ?? (result.error ? [result.error] : [])).slice(0, 3),
|
|
91
|
+
lesson: '',
|
|
92
|
+
};
|
|
93
|
+
const filePath = join(outcomesDir(cwd), `outcome_${id}.json`);
|
|
94
|
+
writeFileSync(filePath, JSON.stringify(record, null, 2), 'utf8');
|
|
95
|
+
// Score the outcome for the routing advisor (non-blocking)
|
|
96
|
+
try {
|
|
97
|
+
import('./signal.js').then(({ scoreOutcome }) => import('./routing-advisor.js').then(({ recordReward }) => {
|
|
98
|
+
const scored = scoreOutcome(record);
|
|
99
|
+
const intent = deriveIntent(record.prompt, record.tier);
|
|
100
|
+
const cellKey = `${record.tier}:${intent}`;
|
|
101
|
+
// Normalize full model ID to short name for the advisor cell
|
|
102
|
+
const modelId = record.model ?? 'sonnet';
|
|
103
|
+
const shortModel = /haiku/i.test(modelId) ? 'haiku'
|
|
104
|
+
: /opus/i.test(modelId) ? 'opus'
|
|
105
|
+
: 'sonnet';
|
|
106
|
+
recordReward(cellKey, shortModel, scored.reward, cwd);
|
|
107
|
+
})).catch(() => { });
|
|
108
|
+
}
|
|
109
|
+
catch { /* non-blocking */ }
|
|
110
|
+
pruneOutcomes(cwd);
|
|
111
|
+
return record;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export function computeRoutingScore(plan, result, verification) {
|
|
118
|
+
let score = 3;
|
|
119
|
+
if (result.success && (result.duration ?? 0) < 60_000)
|
|
120
|
+
score += 1;
|
|
121
|
+
if (verification.filesVerified && verification.testsPassed === true)
|
|
122
|
+
score += 1;
|
|
123
|
+
if (result.error)
|
|
124
|
+
score -= 1;
|
|
125
|
+
if ((result.duration ?? 0) > 180_000)
|
|
126
|
+
score -= 1;
|
|
127
|
+
if ((plan.challengerPolicy === 'none' || !plan.challengerPolicy) && !result.success)
|
|
128
|
+
score -= 2;
|
|
129
|
+
return Math.max(1, Math.min(5, score));
|
|
130
|
+
}
|
|
131
|
+
export function generateLessons(plan, result, verification) {
|
|
132
|
+
const lessons = [];
|
|
133
|
+
const noChallenger = !plan.challengerPolicy || plan.challengerPolicy === 'none';
|
|
134
|
+
if (noChallenger && !result.success) {
|
|
135
|
+
lessons.push('Task failed without challenger — consider escalating similar tasks');
|
|
136
|
+
}
|
|
137
|
+
if (plan.reasoningDepth === 'ultra' &&
|
|
138
|
+
(result.duration ?? 0) < 60_000 &&
|
|
139
|
+
(plan.complexity === 'simple' || plan.complexity === 'low')) {
|
|
140
|
+
lessons.push('Ultra reasoning unnecessary — task completed quickly at low complexity');
|
|
141
|
+
}
|
|
142
|
+
if (!result.success) {
|
|
143
|
+
const keywords = (plan.prompt || '')
|
|
144
|
+
.toLowerCase()
|
|
145
|
+
.split(/\s+/)
|
|
146
|
+
.filter(w => w.length > 3 && !STOP_WORDS.has(w))
|
|
147
|
+
.slice(0, 4)
|
|
148
|
+
.join(' ');
|
|
149
|
+
if (keywords) {
|
|
150
|
+
lessons.push(`Prior failure pattern: ${keywords} on ${plan.tier}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (!noChallenger && result.success && verification.filesVerified) {
|
|
154
|
+
lessons.push(`Challenger caught issues — keep challenger policy for ${plan.risk} risk`);
|
|
155
|
+
}
|
|
156
|
+
return lessons;
|
|
157
|
+
}
|
|
158
|
+
export async function recordOutcome(plan, result, verification, cwd) {
|
|
159
|
+
try {
|
|
160
|
+
ensureDir(cwd);
|
|
161
|
+
const routingScore = computeRoutingScore(plan, result, verification);
|
|
162
|
+
const lessons = generateLessons(plan, result, verification);
|
|
163
|
+
const record = {
|
|
164
|
+
id: randomUUID(),
|
|
165
|
+
timestamp: Date.now(),
|
|
166
|
+
prompt: plan.prompt ?? '',
|
|
167
|
+
tier: plan.tier ?? '',
|
|
168
|
+
primaryModel: plan.primaryModel ?? '',
|
|
169
|
+
reasoningDepth: plan.reasoningDepth ?? '',
|
|
170
|
+
challengerPolicy: plan.challengerPolicy ?? 'none',
|
|
171
|
+
risk: plan.risk ?? '',
|
|
172
|
+
success: result.success ?? false,
|
|
173
|
+
status: result.success ? 'success' : 'failed',
|
|
174
|
+
result: {
|
|
175
|
+
success: result.success ?? false,
|
|
176
|
+
filesChanged: result.filesChanged ?? [],
|
|
177
|
+
duration: result.duration ?? 0,
|
|
178
|
+
error: result.error ?? null,
|
|
179
|
+
},
|
|
180
|
+
verification: {
|
|
181
|
+
filesVerified: verification.filesVerified ?? false,
|
|
182
|
+
testsRun: verification.testsRun ?? false,
|
|
183
|
+
testsPassed: verification.testsPassed ?? null,
|
|
184
|
+
},
|
|
185
|
+
routingScore,
|
|
186
|
+
lessons,
|
|
187
|
+
};
|
|
188
|
+
appendFileSync(todayFile(cwd), JSON.stringify(record) + '\n', 'utf8');
|
|
189
|
+
return record;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function tokenize(text) {
|
|
196
|
+
return (text || '')
|
|
197
|
+
.toLowerCase()
|
|
198
|
+
.split(/\W+/)
|
|
199
|
+
.filter(w => w.length > 3 && !STOP_WORDS.has(w));
|
|
200
|
+
}
|
|
201
|
+
function promptOverlap(a, b) {
|
|
202
|
+
const wordsA = new Set(tokenize(a));
|
|
203
|
+
const wordsB = tokenize(b);
|
|
204
|
+
return wordsB.filter(w => wordsA.has(w)).length;
|
|
205
|
+
}
|
|
206
|
+
function fileOverlap(filesA = [], filesB = []) {
|
|
207
|
+
const setA = new Set(filesA.map(f => f.split('/').pop()));
|
|
208
|
+
return filesB.map(f => f.split('/').pop()).filter(f => setA.has(f)).length;
|
|
209
|
+
}
|
|
210
|
+
export async function getRelevantOutcomes(prompt, files = [], cwd, options = {}) {
|
|
211
|
+
try {
|
|
212
|
+
const allFiles = last7DaysFiles(cwd);
|
|
213
|
+
const outcomes = allFiles.flatMap(readOutcomeFile);
|
|
214
|
+
const scored = outcomes.map(o => {
|
|
215
|
+
let score = promptOverlap(prompt, o.prompt);
|
|
216
|
+
score += fileOverlap(files, o.result?.filesChanged ?? []);
|
|
217
|
+
return { o, score };
|
|
218
|
+
});
|
|
219
|
+
return scored
|
|
220
|
+
.filter(({ score }) => score >= 2)
|
|
221
|
+
.sort((a, b) => b.score - a.score)
|
|
222
|
+
.slice(0, 5)
|
|
223
|
+
.map(({ o, score }) => ({
|
|
224
|
+
id: o.id,
|
|
225
|
+
timestamp: o.timestamp,
|
|
226
|
+
prompt: o.prompt,
|
|
227
|
+
success: o.result?.success ?? false,
|
|
228
|
+
routingScore: o.routingScore,
|
|
229
|
+
lessons: o.lessons,
|
|
230
|
+
relevanceScore: score,
|
|
231
|
+
}));
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return [];
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
export async function checkFileSurvival(cwd) {
|
|
238
|
+
try {
|
|
239
|
+
const dir = join(cwd, '.dualbrain', 'outcomes');
|
|
240
|
+
if (!existsSync(dir))
|
|
241
|
+
return [];
|
|
242
|
+
// Collect up to the last 20 individual outcome JSON files
|
|
243
|
+
let files;
|
|
244
|
+
try {
|
|
245
|
+
files = readdirSync(dir)
|
|
246
|
+
.filter(f => f.startsWith('outcome_') && f.endsWith('.json'))
|
|
247
|
+
.sort()
|
|
248
|
+
.slice(-20);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return [];
|
|
252
|
+
}
|
|
253
|
+
// Get current git-modified files (best-effort)
|
|
254
|
+
const modifiedFiles = new Set();
|
|
255
|
+
try {
|
|
256
|
+
const gitOut = execSync('git diff --name-only', { cwd, stdio: ['ignore', 'pipe', 'pipe'] }).toString();
|
|
257
|
+
for (const f of gitOut.split('\n').map(l => l.trim()).filter(Boolean)) {
|
|
258
|
+
modifiedFiles.add(f);
|
|
259
|
+
modifiedFiles.add(join(cwd, f));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
// git unavailable — proceed without modified-file check
|
|
264
|
+
}
|
|
265
|
+
const scored = [];
|
|
266
|
+
for (const fname of files) {
|
|
267
|
+
const fpath = join(dir, fname);
|
|
268
|
+
let record;
|
|
269
|
+
try {
|
|
270
|
+
record = JSON.parse(readFileSync(fpath, 'utf8'));
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
// Skip if already scored or no filesChanged list
|
|
276
|
+
if (record.survivalScore !== undefined)
|
|
277
|
+
continue;
|
|
278
|
+
const changedFiles = record.result?.filesChanged;
|
|
279
|
+
if (!Array.isArray(changedFiles) || changedFiles.length === 0)
|
|
280
|
+
continue;
|
|
281
|
+
let survived = 0;
|
|
282
|
+
for (const f of changedFiles) {
|
|
283
|
+
const absPath = f.startsWith('/') ? f : join(cwd, f);
|
|
284
|
+
const exists = existsSync(absPath);
|
|
285
|
+
const modified = modifiedFiles.has(f) || modifiedFiles.has(absPath);
|
|
286
|
+
if (exists && !modified)
|
|
287
|
+
survived++;
|
|
288
|
+
}
|
|
289
|
+
const survivalScore = survived / changedFiles.length;
|
|
290
|
+
record.survivalScore = survivalScore;
|
|
291
|
+
try {
|
|
292
|
+
writeFileSync(fpath, JSON.stringify(record, null, 2), 'utf8');
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
// write failed — skip
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
scored.push({ id: record.id, survivalScore });
|
|
299
|
+
}
|
|
300
|
+
return scored;
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
return [];
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
export async function getOutcomeStats(cwd, days = 7) {
|
|
307
|
+
try {
|
|
308
|
+
const allFiles = last7DaysFiles(cwd).slice(0, days);
|
|
309
|
+
const outcomes = allFiles.flatMap(readOutcomeFile);
|
|
310
|
+
if (outcomes.length === 0) {
|
|
311
|
+
return {
|
|
312
|
+
totalTasks: 0,
|
|
313
|
+
successRate: 0,
|
|
314
|
+
avgRoutingScore: 0,
|
|
315
|
+
avgDuration: 0,
|
|
316
|
+
challengerHelpRate: 0,
|
|
317
|
+
topLessons: [],
|
|
318
|
+
modelBreakdown: {},
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
const totalTasks = outcomes.length;
|
|
322
|
+
const successes = outcomes.filter(o => o.result?.success).length;
|
|
323
|
+
const successRate = successes / totalTasks;
|
|
324
|
+
const avgRoutingScore = outcomes.reduce((sum, o) => sum + (o.routingScore ?? 3), 0) / totalTasks;
|
|
325
|
+
const avgDuration = outcomes.reduce((sum, o) => sum + (o.result?.duration ?? 0), 0) / totalTasks;
|
|
326
|
+
const challengerUsed = outcomes.filter(o => o.challengerPolicy && o.challengerPolicy !== 'none');
|
|
327
|
+
const challengerHelped = challengerUsed.filter(o => o.result?.success);
|
|
328
|
+
const challengerHelpRate = challengerUsed.length > 0 ? challengerHelped.length / challengerUsed.length : 0;
|
|
329
|
+
const lessonCounts = {};
|
|
330
|
+
for (const o of outcomes) {
|
|
331
|
+
for (const lesson of o.lessons ?? []) {
|
|
332
|
+
lessonCounts[lesson] = (lessonCounts[lesson] ?? 0) + 1;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
const topLessons = Object.entries(lessonCounts)
|
|
336
|
+
.sort((a, b) => b[1] - a[1])
|
|
337
|
+
.slice(0, 5)
|
|
338
|
+
.map(([lesson]) => lesson);
|
|
339
|
+
const modelBreakdown = {};
|
|
340
|
+
for (const o of outcomes) {
|
|
341
|
+
const model = o.primaryModel;
|
|
342
|
+
if (!model)
|
|
343
|
+
continue;
|
|
344
|
+
if (!modelBreakdown[model])
|
|
345
|
+
modelBreakdown[model] = { count: 0, successCount: 0, successRate: 0 };
|
|
346
|
+
modelBreakdown[model].count += 1;
|
|
347
|
+
if (o.result?.success)
|
|
348
|
+
modelBreakdown[model].successCount += 1;
|
|
349
|
+
}
|
|
350
|
+
for (const model of Object.keys(modelBreakdown)) {
|
|
351
|
+
const { count, successCount } = modelBreakdown[model];
|
|
352
|
+
modelBreakdown[model].successRate = count > 0 ? (successCount ?? 0) / count : 0;
|
|
353
|
+
delete modelBreakdown[model].successCount;
|
|
354
|
+
}
|
|
355
|
+
return {
|
|
356
|
+
totalTasks,
|
|
357
|
+
successRate,
|
|
358
|
+
avgRoutingScore,
|
|
359
|
+
avgDuration,
|
|
360
|
+
challengerHelpRate,
|
|
361
|
+
topLessons,
|
|
362
|
+
modelBreakdown: modelBreakdown,
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
catch {
|
|
366
|
+
return {
|
|
367
|
+
totalTasks: 0,
|
|
368
|
+
successRate: 0,
|
|
369
|
+
avgRoutingScore: 0,
|
|
370
|
+
avgDuration: 0,
|
|
371
|
+
challengerHelpRate: 0,
|
|
372
|
+
topLessons: [],
|
|
373
|
+
modelBreakdown: {},
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
//# sourceMappingURL=outcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outcome.js","sourceRoot":"","sources":["../../src/outcome.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import type { Tier, TaskDetection } from './types.js';
|
|
3
|
+
interface GateResult {
|
|
4
|
+
passed: boolean;
|
|
5
|
+
reason: string;
|
|
6
|
+
}
|
|
7
|
+
interface ContextPack {
|
|
8
|
+
prompt: string;
|
|
9
|
+
files: {
|
|
10
|
+
explicit: string[];
|
|
11
|
+
extracted: string[];
|
|
12
|
+
};
|
|
13
|
+
detection: TaskDetection & {
|
|
14
|
+
complexity?: string;
|
|
15
|
+
designImpact?: boolean;
|
|
16
|
+
specialist?: {
|
|
17
|
+
triggers?: string[];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
profile: Record<string, unknown>;
|
|
21
|
+
priorFailures: number;
|
|
22
|
+
cwd: string;
|
|
23
|
+
sessionContext: unknown;
|
|
24
|
+
}
|
|
25
|
+
interface ExecutionPlan {
|
|
26
|
+
primaryModel: string;
|
|
27
|
+
primaryProvider: string;
|
|
28
|
+
reasoningDepth: string;
|
|
29
|
+
useChallenger: boolean;
|
|
30
|
+
challengerModel: string | null;
|
|
31
|
+
workStyle: string;
|
|
32
|
+
checkpointRequired: boolean;
|
|
33
|
+
tier: Tier;
|
|
34
|
+
verificationRequired: boolean;
|
|
35
|
+
approvalRequired: boolean;
|
|
36
|
+
explanation: string;
|
|
37
|
+
_decision: Record<string, unknown>;
|
|
38
|
+
description?: string;
|
|
39
|
+
targetFiles?: string[];
|
|
40
|
+
files?: string[];
|
|
41
|
+
assumptions?: Record<string, unknown>;
|
|
42
|
+
risk?: string;
|
|
43
|
+
complexity?: string;
|
|
44
|
+
}
|
|
45
|
+
interface VerificationResult {
|
|
46
|
+
ok: boolean;
|
|
47
|
+
notes: string[];
|
|
48
|
+
}
|
|
49
|
+
interface PipelineRun {
|
|
50
|
+
id: string;
|
|
51
|
+
startedAt: number;
|
|
52
|
+
trigger: string;
|
|
53
|
+
prompt: string;
|
|
54
|
+
projectBrief: unknown;
|
|
55
|
+
taskBrief: unknown;
|
|
56
|
+
contradictions: unknown[];
|
|
57
|
+
situationBrief: string | null;
|
|
58
|
+
context: ContextPack | null;
|
|
59
|
+
failureHistory: FailureHistory | null;
|
|
60
|
+
priorOutcomes: unknown[] | null;
|
|
61
|
+
gates: {
|
|
62
|
+
context: GateResult | null;
|
|
63
|
+
planning: GateResult | null;
|
|
64
|
+
principle: GateResult | null;
|
|
65
|
+
execution: GateResult | null;
|
|
66
|
+
outcome: GateResult | null;
|
|
67
|
+
};
|
|
68
|
+
plan: ExecutionPlan | null;
|
|
69
|
+
result: unknown;
|
|
70
|
+
verification: VerificationResult | null;
|
|
71
|
+
outcome: unknown;
|
|
72
|
+
taskId: string | null;
|
|
73
|
+
openTasks: unknown[];
|
|
74
|
+
calibration: unknown;
|
|
75
|
+
adaptation: unknown;
|
|
76
|
+
promptAnalysis: unknown;
|
|
77
|
+
enrichedPrompt: string | null;
|
|
78
|
+
environment: unknown;
|
|
79
|
+
modelSuggestion: unknown;
|
|
80
|
+
thinkResult: unknown;
|
|
81
|
+
decisionPreflight: unknown;
|
|
82
|
+
sessionContext: unknown;
|
|
83
|
+
replitEnvironment: unknown;
|
|
84
|
+
replitTools: unknown;
|
|
85
|
+
replitConfig: unknown;
|
|
86
|
+
checkpoint: unknown;
|
|
87
|
+
headJudgment: unknown;
|
|
88
|
+
collaboration: unknown;
|
|
89
|
+
completedAt: number | null;
|
|
90
|
+
_thinkRefinedPrompt?: string;
|
|
91
|
+
_thinkRefinedFiles?: string[];
|
|
92
|
+
verbose?: boolean;
|
|
93
|
+
}
|
|
94
|
+
interface FailureHistory {
|
|
95
|
+
hasPriorFailures: boolean;
|
|
96
|
+
failureCount: number;
|
|
97
|
+
lastFailure: unknown;
|
|
98
|
+
escalation: {
|
|
99
|
+
recommended: boolean;
|
|
100
|
+
toDepth?: string;
|
|
101
|
+
reason?: string;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
interface PipelineOptions {
|
|
105
|
+
files?: string[];
|
|
106
|
+
cwd?: string;
|
|
107
|
+
dryRun?: boolean;
|
|
108
|
+
verbose?: boolean;
|
|
109
|
+
forceDepth?: string;
|
|
110
|
+
forceChallenger?: boolean;
|
|
111
|
+
silent?: boolean;
|
|
112
|
+
forceDispatch?: boolean;
|
|
113
|
+
_skipPreDispatchThink?: boolean;
|
|
114
|
+
tags?: string[];
|
|
115
|
+
recentEvents?: unknown[];
|
|
116
|
+
[key: string]: unknown;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create a fresh PipelineRun object.
|
|
120
|
+
*/
|
|
121
|
+
export declare function createPipelineRun(trigger?: string, prompt?: string): PipelineRun;
|
|
122
|
+
/**
|
|
123
|
+
* Gate 1: Context gate.
|
|
124
|
+
* Passes only if failureHistory and priorOutcomes were actually queried (not null).
|
|
125
|
+
*/
|
|
126
|
+
export declare function contextGate(run: PipelineRun): GateResult;
|
|
127
|
+
/**
|
|
128
|
+
* Gate 2: Planning gate.
|
|
129
|
+
* Passes if plan exists AND the proposed approach doesn't repeat a known failure.
|
|
130
|
+
*/
|
|
131
|
+
export declare function planningGate(run: PipelineRun): GateResult;
|
|
132
|
+
/**
|
|
133
|
+
* Gate 3: Principle gate.
|
|
134
|
+
* Runs all principle predicates — any hard block fails the gate.
|
|
135
|
+
*/
|
|
136
|
+
export declare function principleGate(run: PipelineRun): GateResult;
|
|
137
|
+
/**
|
|
138
|
+
* Gate 4: Execution gate.
|
|
139
|
+
* Final "cleared to work?" check — all previous gates must have passed and plan must exist.
|
|
140
|
+
*/
|
|
141
|
+
export declare function executionGate(run: PipelineRun): GateResult;
|
|
142
|
+
/**
|
|
143
|
+
* Gate 5: Outcome gate.
|
|
144
|
+
* After execution, checks that an outcome was recorded.
|
|
145
|
+
*/
|
|
146
|
+
export declare function outcomeGate(run: PipelineRun): GateResult;
|
|
147
|
+
/**
|
|
148
|
+
* Classify reasoning depth from context pack signals.
|
|
149
|
+
*/
|
|
150
|
+
export declare function classifyReasoningDepth(contextPack: ContextPack): 'low' | 'medium' | 'high' | 'ultra';
|
|
151
|
+
/**
|
|
152
|
+
* Build an execution plan from context pack + trigger + options.
|
|
153
|
+
*/
|
|
154
|
+
export declare function buildExecutionPlan(contextPack: ContextPack, trigger: string, options?: {
|
|
155
|
+
forceDepth?: string;
|
|
156
|
+
forceChallenger?: boolean;
|
|
157
|
+
thinkResult?: unknown;
|
|
158
|
+
}): ExecutionPlan;
|
|
159
|
+
/**
|
|
160
|
+
* Return a human-readable display string for an execution plan.
|
|
161
|
+
*/
|
|
162
|
+
export declare function formatExecutionPlan(plan: ExecutionPlan): string;
|
|
163
|
+
/**
|
|
164
|
+
* Run the unified pipeline.
|
|
165
|
+
*/
|
|
166
|
+
export declare function runPipeline(trigger: string, prompt: string, options?: PipelineOptions): Promise<Record<string, unknown>>;
|
|
167
|
+
export {};
|