dual-brain 0.2.30 → 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.
- 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/task-classifier.mjs +328 -0
- package/hooks/vibe-router.mjs +387 -0
- 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,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* failure-memory.ts — Track task failures and enable automatic escalation.
|
|
3
|
+
*
|
|
4
|
+
* Exports: recordFailure, checkFailureHistory, formatEscalation,
|
|
5
|
+
* clearFailures, getFailureStats
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, appendFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { randomUUID } from 'crypto';
|
|
10
|
+
const STOP_WORDS = new Set(['the', 'a', 'an', 'is', 'in', 'on', 'at', 'to', 'for', 'of', 'and', 'or', 'with', 'this', 'that', 'it', 'be', 'was', 'are', 'were', 'has', 'have', 'had', 'do', 'does', 'did', 'not', 'from', 'by', 'as', 'if', 'but', 'we', 'i', 'you']);
|
|
11
|
+
const WINDOW_48H = 48 * 60 * 60 * 1000;
|
|
12
|
+
const DEPTH_ORDER = ['low', 'medium', 'high', 'ultra'];
|
|
13
|
+
const MODEL_ORDER = ['haiku', 'sonnet', 'opus'];
|
|
14
|
+
function failuresPath(cwd) {
|
|
15
|
+
const dir = join(cwd, '.dualbrain');
|
|
16
|
+
if (!existsSync(dir))
|
|
17
|
+
mkdirSync(dir, { recursive: true });
|
|
18
|
+
return join(dir, 'failures.jsonl');
|
|
19
|
+
}
|
|
20
|
+
function categorizeError(error = '') {
|
|
21
|
+
const e = error.toLowerCase();
|
|
22
|
+
if (/test|assert|expect/.test(e))
|
|
23
|
+
return 'test-failure';
|
|
24
|
+
if (/timeout|timed out/.test(e))
|
|
25
|
+
return 'timeout';
|
|
26
|
+
if (/syntax|parse|unexpected token/.test(e))
|
|
27
|
+
return 'syntax-error';
|
|
28
|
+
if (/permission|eacces/.test(e))
|
|
29
|
+
return 'permission-error';
|
|
30
|
+
if (/not found|enoent/.test(e))
|
|
31
|
+
return 'not-found';
|
|
32
|
+
return 'unknown';
|
|
33
|
+
}
|
|
34
|
+
function tokenize(text = '') {
|
|
35
|
+
return text.toLowerCase().split(/\W+/).filter(w => w.length > 2 && !STOP_WORDS.has(w));
|
|
36
|
+
}
|
|
37
|
+
function similarity(promptA, promptB, filesA = [], filesB = []) {
|
|
38
|
+
const wordsA = new Set(tokenize(promptA));
|
|
39
|
+
const wordsB = new Set(tokenize(promptB));
|
|
40
|
+
if (!wordsA.size && !wordsB.size)
|
|
41
|
+
return 0;
|
|
42
|
+
const shared = [...wordsA].filter(w => wordsB.has(w)).length;
|
|
43
|
+
const wordScore = shared / Math.max(wordsA.size, wordsB.size);
|
|
44
|
+
const sharedFiles = filesA.some(f => filesB.includes(f));
|
|
45
|
+
return sharedFiles ? Math.max(wordScore, 0.5) : wordScore;
|
|
46
|
+
}
|
|
47
|
+
function readFailures(cwd) {
|
|
48
|
+
const path = failuresPath(cwd);
|
|
49
|
+
if (!existsSync(path))
|
|
50
|
+
return [];
|
|
51
|
+
return readFileSync(path, 'utf8')
|
|
52
|
+
.split('\n')
|
|
53
|
+
.filter(Boolean)
|
|
54
|
+
.map(line => { try {
|
|
55
|
+
return JSON.parse(line);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
} })
|
|
60
|
+
.filter((r) => r !== null);
|
|
61
|
+
}
|
|
62
|
+
function writeAll(cwd, records) {
|
|
63
|
+
writeFileSync(failuresPath(cwd), records.map(r => JSON.stringify(r)).join('\n') + '\n');
|
|
64
|
+
}
|
|
65
|
+
function bumpDepth(depth) {
|
|
66
|
+
const idx = DEPTH_ORDER.indexOf(depth ?? '');
|
|
67
|
+
return idx === -1 || idx >= DEPTH_ORDER.length - 1 ? 'ultra' : DEPTH_ORDER[idx + 1];
|
|
68
|
+
}
|
|
69
|
+
function bumpModel(model = '') {
|
|
70
|
+
const m = model.toLowerCase();
|
|
71
|
+
const match = MODEL_ORDER.find(k => m.includes(k)) ?? 'sonnet';
|
|
72
|
+
const idx = MODEL_ORDER.indexOf(match);
|
|
73
|
+
return idx >= MODEL_ORDER.length - 1 ? `claude-opus-4-5` : `claude-${MODEL_ORDER[idx + 1]}-4-5`;
|
|
74
|
+
}
|
|
75
|
+
// --- Exports ---
|
|
76
|
+
export async function recordFailure(prompt, plan = {}, error = '', cwd = process.cwd()) {
|
|
77
|
+
const record = {
|
|
78
|
+
id: randomUUID(),
|
|
79
|
+
timestamp: Date.now(),
|
|
80
|
+
prompt,
|
|
81
|
+
promptWords: tokenize(prompt),
|
|
82
|
+
model: plan.model ?? null,
|
|
83
|
+
reasoningDepth: plan.reasoningDepth ?? null,
|
|
84
|
+
tier: plan.tier ?? null,
|
|
85
|
+
error: String(error),
|
|
86
|
+
errorCategory: categorizeError(error),
|
|
87
|
+
files: plan.files ?? [],
|
|
88
|
+
escalatedFrom: plan.escalatedFrom ?? null,
|
|
89
|
+
resolved: false,
|
|
90
|
+
};
|
|
91
|
+
appendFileSync(failuresPath(cwd), JSON.stringify(record) + '\n');
|
|
92
|
+
return record;
|
|
93
|
+
}
|
|
94
|
+
export async function checkFailureHistory(prompt, files = [], cwd = process.cwd()) {
|
|
95
|
+
const cutoff = Date.now() - WINDOW_48H;
|
|
96
|
+
const all = readFailures(cwd);
|
|
97
|
+
const recent = all.filter(r => !r.resolved && r.timestamp >= cutoff);
|
|
98
|
+
const matches = recent
|
|
99
|
+
.map(r => ({ r, score: similarity(prompt, r.prompt, files, r.files ?? []) }))
|
|
100
|
+
.filter(({ score }) => score >= 0.4)
|
|
101
|
+
.sort((a, b) => b.r.timestamp - a.r.timestamp);
|
|
102
|
+
const count = matches.length;
|
|
103
|
+
const last = matches[0]?.r ?? null;
|
|
104
|
+
const escalation = { recommended: false, fromModel: null, toModel: null, fromDepth: null, toDepth: null, useChallenger: false, reason: '' };
|
|
105
|
+
if (count >= 1) {
|
|
106
|
+
escalation.recommended = true;
|
|
107
|
+
escalation.fromModel = last.model;
|
|
108
|
+
escalation.fromDepth = last.reasoningDepth;
|
|
109
|
+
if (count === 1) {
|
|
110
|
+
escalation.toDepth = bumpDepth(last.reasoningDepth ?? 'medium');
|
|
111
|
+
escalation.toModel = last.model;
|
|
112
|
+
escalation.useChallenger = false;
|
|
113
|
+
escalation.reason = `1 prior failure on similar task, bumping depth to ${escalation.toDepth}`;
|
|
114
|
+
}
|
|
115
|
+
else if (count === 2) {
|
|
116
|
+
escalation.toDepth = 'ultra';
|
|
117
|
+
escalation.toModel = last.model?.includes('opus') ? last.model : bumpModel(last.model ?? '');
|
|
118
|
+
escalation.useChallenger = false;
|
|
119
|
+
escalation.reason = `2 prior failures on similar task, escalating to Opus + ultrathink`;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
escalation.toDepth = 'ultra';
|
|
123
|
+
escalation.toModel = last.model?.includes('opus') ? last.model : bumpModel(last.model ?? '');
|
|
124
|
+
escalation.useChallenger = true;
|
|
125
|
+
escalation.reason = `${count} prior failures on similar task, forcing dual-brain`;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return { hasPriorFailures: count > 0, failureCount: count, lastFailure: last, escalation };
|
|
129
|
+
}
|
|
130
|
+
export function formatEscalation(escalation) {
|
|
131
|
+
if (!escalation?.recommended)
|
|
132
|
+
return '';
|
|
133
|
+
const prev = [escalation.fromModel, escalation.fromDepth].filter(Boolean).join(', ') || 'unknown';
|
|
134
|
+
const next = [escalation.toModel, escalation.toDepth, escalation.useChallenger ? 'GPT challenger' : null].filter(Boolean).join(' + ');
|
|
135
|
+
return `⚡ Strategy changed\n Previous: failed (${prev})\n Escalated: ${next}\n Reason: ${escalation.reason}`;
|
|
136
|
+
}
|
|
137
|
+
export async function clearFailures(prompt, cwd = process.cwd()) {
|
|
138
|
+
const all = readFailures(cwd);
|
|
139
|
+
const promptWords = tokenize(prompt);
|
|
140
|
+
const fakePrompt = promptWords.join(' ');
|
|
141
|
+
let changed = false;
|
|
142
|
+
const updated = all.map(r => {
|
|
143
|
+
if (!r.resolved && similarity(fakePrompt, r.prompt) >= 0.4) {
|
|
144
|
+
changed = true;
|
|
145
|
+
return { ...r, resolved: true };
|
|
146
|
+
}
|
|
147
|
+
return r;
|
|
148
|
+
});
|
|
149
|
+
if (changed)
|
|
150
|
+
writeAll(cwd, updated);
|
|
151
|
+
}
|
|
152
|
+
export async function getFailureStats(cwd = process.cwd()) {
|
|
153
|
+
const all = readFailures(cwd);
|
|
154
|
+
const byCategory = {};
|
|
155
|
+
let resolved = 0;
|
|
156
|
+
let escalationSum = 0;
|
|
157
|
+
let escalationCount = 0;
|
|
158
|
+
for (const r of all) {
|
|
159
|
+
if (r.resolved)
|
|
160
|
+
resolved++;
|
|
161
|
+
byCategory[r.errorCategory] = (byCategory[r.errorCategory] ?? 0) + 1;
|
|
162
|
+
if (r.escalatedFrom) {
|
|
163
|
+
escalationSum++;
|
|
164
|
+
escalationCount++;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
total: all.length,
|
|
169
|
+
resolved,
|
|
170
|
+
unresolved: all.length - resolved,
|
|
171
|
+
byCategory,
|
|
172
|
+
avgEscalationsToResolve: escalationCount ? +(escalationSum / escalationCount).toFixed(2) : 0,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=failure-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-memory.js","sourceRoot":"","sources":["../../src/failure-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,GAAG,EAAC,KAAK,CAAC,CAAC,CAAC;AACpO,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvC,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAkDhD,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE;IACzC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAc,OAAO,cAAc,CAAC;IACpE,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAe,OAAO,SAAS,CAAC;IAC/D,IAAI,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC;QAAG,OAAO,cAAc,CAAC;IACpE,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAe,OAAO,kBAAkB,CAAC;IACxE,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAgB,OAAO,WAAW,CAAC;IACjE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe,EAAE;IACjC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,OAAe,EAAE,SAAmB,EAAE,EAAE,SAAmB,EAAE;IAChG,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;SAC9B,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC;SACzF,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,OAAwB;IACrD,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,SAAS,CAAC,KAAoB;IACrC,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7C,OAAO,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE;IACnC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC/D,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;AAClG,CAAC;AAED,kBAAkB;AAElB,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,OAAoB,EAAE,EAAE,QAAgB,EAAE,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IACzH,MAAM,MAAM,GAAkB;QAC5B,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,MAAM;QACN,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC;QAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;QACzB,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;QAC3C,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;QACpB,aAAa,EAAE,eAAe,CAAC,KAAK,CAAC;QACrC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACvB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI;QACzC,QAAQ,EAAE,KAAK;KAChB,CAAC;IACF,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAc,EAAE,QAAkB,EAAE,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IACzG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IACvC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,MAAM;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;SAC5E,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,GAAG,CAAC;SACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IAEnC,MAAM,UAAU,GAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAExJ,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;QAC9B,UAAU,CAAC,SAAS,GAAG,IAAK,CAAC,KAAK,CAAC;QACnC,UAAU,CAAC,SAAS,GAAG,IAAK,CAAC,cAAc,CAAC;QAE5C,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC,IAAK,CAAC,cAAc,IAAI,QAAQ,CAAC,CAAC;YACjE,UAAU,CAAC,OAAO,GAAG,IAAK,CAAC,KAAK,CAAC;YACjC,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC;YACjC,UAAU,CAAC,MAAM,GAAG,qDAAqD,UAAU,CAAC,OAAO,EAAE,CAAC;QAChG,CAAC;aAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACvB,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;YAC7B,UAAU,CAAC,OAAO,GAAG,IAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAChG,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC;YACjC,UAAU,CAAC,MAAM,GAAG,mEAAmE,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;YAC7B,UAAU,CAAC,OAAO,GAAG,IAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAChG,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;YAChC,UAAU,CAAC,MAAM,GAAG,GAAG,KAAK,qDAAqD,CAAC;QACpF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,gBAAgB,EAAE,KAAK,GAAG,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAAkC;IACjE,IAAI,CAAC,UAAU,EAAE,WAAW;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;IAClG,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtI,OAAO,2CAA2C,IAAI,mBAAmB,IAAI,eAAe,UAAU,CAAC,MAAM,EAAE,CAAC;AAClH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IAC7E,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC1B,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YAC3D,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IACH,IAAI,OAAO;QAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC/D,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,QAAQ;YAAE,QAAQ,EAAE,CAAC;QAC3B,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;YAAC,aAAa,EAAE,CAAC;YAAC,eAAe,EAAE,CAAC;QAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,QAAQ;QACR,UAAU,EAAE,GAAG,CAAC,MAAM,GAAG,QAAQ;QACjC,UAAU;QACV,uBAAuB,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7F,CAAC;AACJ,CAAC"}
|
package/dist/src/fx.d.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
declare const c: {
|
|
2
|
+
readonly reset: "\u001B[0m";
|
|
3
|
+
readonly bold: "\u001B[1m";
|
|
4
|
+
readonly dim: "\u001B[2m";
|
|
5
|
+
readonly green: "\u001B[32m";
|
|
6
|
+
readonly red: "\u001B[31m";
|
|
7
|
+
readonly yellow: "\u001B[33m";
|
|
8
|
+
readonly blue: "\u001B[34m";
|
|
9
|
+
readonly magenta: "\u001B[35m";
|
|
10
|
+
readonly cyan: "\u001B[36m";
|
|
11
|
+
readonly white: "\u001B[37m";
|
|
12
|
+
readonly gray: "\u001B[90m";
|
|
13
|
+
readonly bgGreen: "\u001B[42m";
|
|
14
|
+
readonly bgRed: "\u001B[41m";
|
|
15
|
+
readonly bgYellow: "\u001B[43m";
|
|
16
|
+
readonly bgBlue: "\u001B[44m";
|
|
17
|
+
readonly bgMagenta: "\u001B[45m";
|
|
18
|
+
readonly clearLine: "\u001B[2K";
|
|
19
|
+
readonly cursorUp: "\u001B[1A";
|
|
20
|
+
readonly cursorHide: "\u001B[?25l";
|
|
21
|
+
readonly cursorShow: "\u001B[?25h";
|
|
22
|
+
readonly saveCursor: "\u001B[s";
|
|
23
|
+
readonly restoreCursor: "\u001B[u";
|
|
24
|
+
};
|
|
25
|
+
export declare const colors: {
|
|
26
|
+
readonly reset: "\u001B[0m";
|
|
27
|
+
readonly bold: "\u001B[1m";
|
|
28
|
+
readonly dim: "\u001B[2m";
|
|
29
|
+
readonly green: "\u001B[32m";
|
|
30
|
+
readonly red: "\u001B[31m";
|
|
31
|
+
readonly yellow: "\u001B[33m";
|
|
32
|
+
readonly blue: "\u001B[34m";
|
|
33
|
+
readonly magenta: "\u001B[35m";
|
|
34
|
+
readonly cyan: "\u001B[36m";
|
|
35
|
+
readonly white: "\u001B[37m";
|
|
36
|
+
readonly gray: "\u001B[90m";
|
|
37
|
+
readonly bgGreen: "\u001B[42m";
|
|
38
|
+
readonly bgRed: "\u001B[41m";
|
|
39
|
+
readonly bgYellow: "\u001B[43m";
|
|
40
|
+
readonly bgBlue: "\u001B[44m";
|
|
41
|
+
readonly bgMagenta: "\u001B[45m";
|
|
42
|
+
readonly clearLine: "\u001B[2K";
|
|
43
|
+
readonly cursorUp: "\u001B[1A";
|
|
44
|
+
readonly cursorHide: "\u001B[?25l";
|
|
45
|
+
readonly cursorShow: "\u001B[?25h";
|
|
46
|
+
readonly saveCursor: "\u001B[s";
|
|
47
|
+
readonly restoreCursor: "\u001B[u";
|
|
48
|
+
};
|
|
49
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
50
|
+
export declare function clearScreen(): void;
|
|
51
|
+
export declare function nl(n?: number): void;
|
|
52
|
+
export type FxMode = 'ci' | 'plain' | 'subtle' | 'full';
|
|
53
|
+
export declare function getMode(): FxMode;
|
|
54
|
+
export interface Spinner {
|
|
55
|
+
start(): Spinner;
|
|
56
|
+
update(newText: string): Spinner;
|
|
57
|
+
succeed(msg?: string): Spinner;
|
|
58
|
+
fail(msg?: string): Spinner;
|
|
59
|
+
warn(msg?: string): Spinner;
|
|
60
|
+
stop(): Spinner;
|
|
61
|
+
}
|
|
62
|
+
export declare function spinner(text: string): Spinner;
|
|
63
|
+
export declare function progress(current: number, total: number, label?: string, width?: number): void;
|
|
64
|
+
export declare function success(text: string): void;
|
|
65
|
+
export declare function error(text: string): void;
|
|
66
|
+
export declare function warn(text: string): void;
|
|
67
|
+
export declare function info(text: string): void;
|
|
68
|
+
export declare function dim(text: string): void;
|
|
69
|
+
export declare function step(current: number, total: number, text: string): void;
|
|
70
|
+
export declare function banner(text: string): void;
|
|
71
|
+
export interface BoxOptions {
|
|
72
|
+
color?: keyof typeof c;
|
|
73
|
+
padding?: number;
|
|
74
|
+
title?: string;
|
|
75
|
+
}
|
|
76
|
+
export declare function box(content: string | string[], options?: BoxOptions): void;
|
|
77
|
+
export declare function gradient(text: string, fromColor?: number, toColor?: number): void;
|
|
78
|
+
export declare function celebrate(text: string): Promise<void>;
|
|
79
|
+
export interface LoadingStep {
|
|
80
|
+
text: string;
|
|
81
|
+
duration?: number;
|
|
82
|
+
successText?: string;
|
|
83
|
+
}
|
|
84
|
+
export declare function loadingSequence(steps: LoadingStep[]): Promise<void>;
|
|
85
|
+
export declare function agentDispatch(model: string, task: string): Promise<void>;
|
|
86
|
+
export declare function thinkRound(round: number, provider: string, question: string): Promise<void>;
|
|
87
|
+
export {};
|
package/dist/src/fx.js
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
// fx.ts — zero-dependency animated shell effects for dual-brain CLI
|
|
2
|
+
const isTTY = process.stdout.isTTY && !process.env.CI;
|
|
3
|
+
const hasColor = isTTY && !process.env.NO_COLOR;
|
|
4
|
+
const isUnicode = process.platform !== 'win32' || !!process.env.WT_SESSION;
|
|
5
|
+
const c = {
|
|
6
|
+
reset: '\x1b[0m',
|
|
7
|
+
bold: '\x1b[1m',
|
|
8
|
+
dim: '\x1b[2m',
|
|
9
|
+
green: '\x1b[32m',
|
|
10
|
+
red: '\x1b[31m',
|
|
11
|
+
yellow: '\x1b[33m',
|
|
12
|
+
blue: '\x1b[34m',
|
|
13
|
+
magenta: '\x1b[35m',
|
|
14
|
+
cyan: '\x1b[36m',
|
|
15
|
+
white: '\x1b[37m',
|
|
16
|
+
gray: '\x1b[90m',
|
|
17
|
+
bgGreen: '\x1b[42m',
|
|
18
|
+
bgRed: '\x1b[41m',
|
|
19
|
+
bgYellow: '\x1b[43m',
|
|
20
|
+
bgBlue: '\x1b[44m',
|
|
21
|
+
bgMagenta: '\x1b[45m',
|
|
22
|
+
clearLine: '\x1b[2K',
|
|
23
|
+
cursorUp: '\x1b[1A',
|
|
24
|
+
cursorHide: '\x1b[?25l',
|
|
25
|
+
cursorShow: '\x1b[?25h',
|
|
26
|
+
saveCursor: '\x1b[s',
|
|
27
|
+
restoreCursor: '\x1b[u'
|
|
28
|
+
};
|
|
29
|
+
function color(text, ...styles) {
|
|
30
|
+
if (!hasColor)
|
|
31
|
+
return text;
|
|
32
|
+
return styles.join('') + text + c.reset;
|
|
33
|
+
}
|
|
34
|
+
export const colors = c;
|
|
35
|
+
export function sleep(ms) {
|
|
36
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
37
|
+
}
|
|
38
|
+
export function clearScreen() {
|
|
39
|
+
if (isTTY)
|
|
40
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
41
|
+
}
|
|
42
|
+
export function nl(n = 1) {
|
|
43
|
+
process.stdout.write('\n'.repeat(n));
|
|
44
|
+
}
|
|
45
|
+
export function getMode() {
|
|
46
|
+
if (process.env.CI)
|
|
47
|
+
return 'ci';
|
|
48
|
+
if (!process.stdout.isTTY)
|
|
49
|
+
return 'plain';
|
|
50
|
+
if (process.env.DUAL_BRAIN_FX === 'subtle')
|
|
51
|
+
return 'subtle';
|
|
52
|
+
return 'full';
|
|
53
|
+
}
|
|
54
|
+
export function spinner(text) {
|
|
55
|
+
const frames = isUnicode ? ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'] : ['|', '/', '-', '\\'];
|
|
56
|
+
let i = 0;
|
|
57
|
+
let interval = null;
|
|
58
|
+
let currentText = text;
|
|
59
|
+
return {
|
|
60
|
+
start() {
|
|
61
|
+
if (!isTTY) {
|
|
62
|
+
process.stdout.write(currentText + '\n');
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
process.stdout.write(c.cursorHide);
|
|
66
|
+
interval = setInterval(() => {
|
|
67
|
+
process.stdout.write(`\r${c.clearLine} ${color(frames[i % frames.length], c.cyan)} ${currentText}`);
|
|
68
|
+
i++;
|
|
69
|
+
}, 80);
|
|
70
|
+
return this;
|
|
71
|
+
},
|
|
72
|
+
update(newText) { currentText = newText; return this; },
|
|
73
|
+
succeed(msg) {
|
|
74
|
+
if (interval)
|
|
75
|
+
clearInterval(interval);
|
|
76
|
+
const sym = isUnicode ? '✓' : '+';
|
|
77
|
+
process.stdout.write(`\r${c.clearLine} ${color(sym, c.green)} ${msg || currentText}\n`);
|
|
78
|
+
if (isTTY)
|
|
79
|
+
process.stdout.write(c.cursorShow);
|
|
80
|
+
return this;
|
|
81
|
+
},
|
|
82
|
+
fail(msg) {
|
|
83
|
+
if (interval)
|
|
84
|
+
clearInterval(interval);
|
|
85
|
+
const sym = isUnicode ? '✗' : 'x';
|
|
86
|
+
process.stdout.write(`\r${c.clearLine} ${color(sym, c.red)} ${msg || currentText}\n`);
|
|
87
|
+
if (isTTY)
|
|
88
|
+
process.stdout.write(c.cursorShow);
|
|
89
|
+
return this;
|
|
90
|
+
},
|
|
91
|
+
warn(msg) {
|
|
92
|
+
if (interval)
|
|
93
|
+
clearInterval(interval);
|
|
94
|
+
const sym = isUnicode ? '⚠' : '!';
|
|
95
|
+
process.stdout.write(`\r${c.clearLine} ${color(sym, c.yellow)} ${msg || currentText}\n`);
|
|
96
|
+
if (isTTY)
|
|
97
|
+
process.stdout.write(c.cursorShow);
|
|
98
|
+
return this;
|
|
99
|
+
},
|
|
100
|
+
stop() {
|
|
101
|
+
if (interval)
|
|
102
|
+
clearInterval(interval);
|
|
103
|
+
process.stdout.write(`\r${c.clearLine}`);
|
|
104
|
+
if (isTTY)
|
|
105
|
+
process.stdout.write(c.cursorShow);
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export function progress(current, total, label = '', width = 30) {
|
|
111
|
+
const pct = Math.min(1, current / total);
|
|
112
|
+
if (!isTTY) {
|
|
113
|
+
process.stdout.write(`${Math.round(pct * 100)}% ${label}\n`);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const filled = Math.round(pct * width);
|
|
117
|
+
const empty = width - filled;
|
|
118
|
+
const bar = isUnicode
|
|
119
|
+
? color('█'.repeat(filled) + '░'.repeat(empty), c.cyan)
|
|
120
|
+
: color('#'.repeat(filled) + '-'.repeat(empty), c.cyan);
|
|
121
|
+
const pctStr = String(Math.round(pct * 100)).padStart(3) + '%';
|
|
122
|
+
process.stdout.write(`\r${c.clearLine} ${bar} ${color(pctStr, c.bold)} ${label}`);
|
|
123
|
+
if (current >= total)
|
|
124
|
+
process.stdout.write('\n');
|
|
125
|
+
}
|
|
126
|
+
export function success(text) {
|
|
127
|
+
const sym = isUnicode ? '✓' : '+';
|
|
128
|
+
process.stdout.write(` ${color(sym, c.green)} ${text}\n`);
|
|
129
|
+
}
|
|
130
|
+
export function error(text) {
|
|
131
|
+
const sym = isUnicode ? '✗' : 'x';
|
|
132
|
+
process.stdout.write(` ${color(sym, c.red)} ${text}\n`);
|
|
133
|
+
}
|
|
134
|
+
export function warn(text) {
|
|
135
|
+
const sym = isUnicode ? '⚠' : '!';
|
|
136
|
+
process.stdout.write(` ${color(sym, c.yellow)} ${text}\n`);
|
|
137
|
+
}
|
|
138
|
+
export function info(text) {
|
|
139
|
+
const sym = isUnicode ? 'ℹ' : 'i';
|
|
140
|
+
process.stdout.write(` ${color(sym, c.blue)} ${text}\n`);
|
|
141
|
+
}
|
|
142
|
+
export function dim(text) {
|
|
143
|
+
process.stdout.write(`${color(text, c.gray)}\n`);
|
|
144
|
+
}
|
|
145
|
+
export function step(current, total, text) {
|
|
146
|
+
if (!isUnicode) {
|
|
147
|
+
process.stdout.write(` [${current}/${total}] ${text}\n`);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const dots = [];
|
|
151
|
+
for (let i = 1; i <= total; i++) {
|
|
152
|
+
if (i < current)
|
|
153
|
+
dots.push(color('●', c.green));
|
|
154
|
+
else if (i === current)
|
|
155
|
+
dots.push(color('●', c.cyan));
|
|
156
|
+
else
|
|
157
|
+
dots.push(color('○', c.gray));
|
|
158
|
+
}
|
|
159
|
+
process.stdout.write(` ${dots.join(' ')} ${color(`Step ${current} of ${total}`, c.bold)} · ${text}\n`);
|
|
160
|
+
}
|
|
161
|
+
export function banner(text) {
|
|
162
|
+
const pkg = 'DUAL-BRAIN';
|
|
163
|
+
const inner = ` ${isUnicode ? '🧠' : '**'} ${pkg} ${text} `;
|
|
164
|
+
const width = inner.length + 2;
|
|
165
|
+
if (!isUnicode || !hasColor) {
|
|
166
|
+
process.stdout.write(`\n +${'='.repeat(width - 2)}+\n | ${inner} |\n +${'='.repeat(width - 2)}+\n\n`);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const top = ` ╔${'═'.repeat(width)}╗`;
|
|
170
|
+
const mid = ` ║${inner}║`;
|
|
171
|
+
const bot = ` ╚${'═'.repeat(width)}╝`;
|
|
172
|
+
process.stdout.write(`\n${color(top, c.cyan, c.bold)}\n${color(mid, c.cyan, c.bold)}\n${color(bot, c.cyan, c.bold)}\n\n`);
|
|
173
|
+
}
|
|
174
|
+
export function box(content, options = {}) {
|
|
175
|
+
const { color: colorName = 'cyan', padding = 1, title = '' } = options;
|
|
176
|
+
const ansiColor = c[colorName] || c.cyan;
|
|
177
|
+
const lines = Array.isArray(content) ? content : content.split('\n');
|
|
178
|
+
const innerWidth = Math.max(...lines.map(l => stripAnsi(l).length), title ? stripAnsi(title).length : 0) + padding * 2;
|
|
179
|
+
function draw(text, ansi) {
|
|
180
|
+
if (!hasColor)
|
|
181
|
+
return text;
|
|
182
|
+
return ansi + text + c.reset;
|
|
183
|
+
}
|
|
184
|
+
const titleStr = title ? ` ${title} ` : '';
|
|
185
|
+
const topFill = '─'.repeat(Math.max(0, innerWidth - stripAnsi(titleStr).length));
|
|
186
|
+
const top = isUnicode
|
|
187
|
+
? draw(`┌${titleStr}${'─'.repeat(Math.floor(topFill.length / 2))}${'─'.repeat(Math.ceil(topFill.length / 2))}┐`, ansiColor)
|
|
188
|
+
: draw(`+${titleStr}${'-'.repeat(topFill.length)}+`, ansiColor);
|
|
189
|
+
const bot = isUnicode
|
|
190
|
+
? draw(`└${'─'.repeat(innerWidth)}┘`, ansiColor)
|
|
191
|
+
: draw(`+${'-'.repeat(innerWidth)}+`, ansiColor);
|
|
192
|
+
process.stdout.write(` ${top}\n`);
|
|
193
|
+
for (const line of lines) {
|
|
194
|
+
const pad = ' '.repeat(padding);
|
|
195
|
+
const visible = stripAnsi(line).length;
|
|
196
|
+
const right = ' '.repeat(Math.max(0, innerWidth - padding - visible));
|
|
197
|
+
const border = isUnicode ? draw('│', ansiColor) : draw('|', ansiColor);
|
|
198
|
+
process.stdout.write(` ${border}${pad}${line}${right}${border}\n`);
|
|
199
|
+
}
|
|
200
|
+
process.stdout.write(` ${bot}\n`);
|
|
201
|
+
}
|
|
202
|
+
function stripAnsi(str) {
|
|
203
|
+
return str.replace(/\x1b\[[0-9;]*m/g, '');
|
|
204
|
+
}
|
|
205
|
+
export function gradient(text, fromColor = 196, toColor = 226) {
|
|
206
|
+
if (!hasColor) {
|
|
207
|
+
process.stdout.write(text + '\n');
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const chars = [...text];
|
|
211
|
+
const result = chars.map((ch, i) => {
|
|
212
|
+
const t = chars.length <= 1 ? 0 : i / (chars.length - 1);
|
|
213
|
+
const colorIdx = Math.round(fromColor + t * (toColor - fromColor));
|
|
214
|
+
return `\x1b[38;5;${colorIdx}m${ch}`;
|
|
215
|
+
}).join('') + c.reset;
|
|
216
|
+
process.stdout.write(result + '\n');
|
|
217
|
+
}
|
|
218
|
+
export async function celebrate(text) {
|
|
219
|
+
const sym = isUnicode ? '✨' : '*';
|
|
220
|
+
if (!isTTY || getMode() === 'ci' || getMode() === 'plain') {
|
|
221
|
+
process.stdout.write(` ${sym} ${text} ${sym}\n`);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
process.stdout.write(`\r${c.clearLine} ${color(`${sym} ${text} ${sym}`, c.bgGreen, c.bold)}`);
|
|
225
|
+
await sleep(100);
|
|
226
|
+
process.stdout.write(`\r${c.clearLine} ${color(`${sym} ${text} ${sym}`, c.green, c.bold)}\n`);
|
|
227
|
+
}
|
|
228
|
+
export async function loadingSequence(steps) {
|
|
229
|
+
for (const s of steps) {
|
|
230
|
+
const sp = spinner(s.text).start();
|
|
231
|
+
await sleep(s.duration || 800);
|
|
232
|
+
sp.succeed(s.successText || s.text);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
export async function agentDispatch(model, task) {
|
|
236
|
+
const mode = getMode();
|
|
237
|
+
if (mode === 'ci' || mode === 'plain') {
|
|
238
|
+
process.stdout.write(`Dispatching ${model}...\n`);
|
|
239
|
+
process.stdout.write(`Agent dispatched: ${task}\n`);
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const sp = spinner(`Dispatching ${color(model, c.cyan)}...`).start();
|
|
243
|
+
await sleep(mode === 'subtle' ? 0 : 600);
|
|
244
|
+
sp.succeed(`Agent dispatched: ${task}`);
|
|
245
|
+
}
|
|
246
|
+
export async function thinkRound(round, provider, question) {
|
|
247
|
+
const mode = getMode();
|
|
248
|
+
const providerLabel = color(provider, c.magenta);
|
|
249
|
+
const roundLabel = color(`Round ${round}`, c.bold);
|
|
250
|
+
if (mode === 'ci' || mode === 'plain') {
|
|
251
|
+
process.stdout.write(`Dual-Brain Think · ${roundLabel} · ${provider} analyzing: ${question}\n`);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
const title = `Dual-Brain Think · ${roundLabel}`;
|
|
255
|
+
const titleVisible = stripAnsi(title);
|
|
256
|
+
const width = Math.max(titleVisible.length + 4, question.length + 4, 36);
|
|
257
|
+
const topFill = '─'.repeat(Math.max(0, width - titleVisible.length - 2));
|
|
258
|
+
if (isUnicode && hasColor) {
|
|
259
|
+
process.stdout.write(` ${color(`╭─ ${title} ${'─'.repeat(topFill.length)}╮`, c.cyan)}\n`);
|
|
260
|
+
process.stdout.write(` ${color('│', c.cyan)} ${isUnicode ? '🤖' : '>>'} ${providerLabel} analyzing...${' '.repeat(Math.max(0, width - 4 - stripAnsi(provider).length - 13))}${color('│', c.cyan)}\n`);
|
|
261
|
+
process.stdout.write(` ${color(`╰${'─'.repeat(width)}╯`, c.cyan)}\n`);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
process.stdout.write(` +-- ${title} --+\n`);
|
|
265
|
+
process.stdout.write(` | ${provider} analyzing: ${question}\n`);
|
|
266
|
+
process.stdout.write(` +${'─'.repeat(width + 2)}+\n`);
|
|
267
|
+
}
|
|
268
|
+
const sp = spinner(`${provider} thinking on: ${question}`).start();
|
|
269
|
+
await sleep(mode === 'subtle' ? 0 : 900);
|
|
270
|
+
sp.succeed(`${provider} analysis complete`);
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=fx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fx.js","sourceRoot":"","sources":["../../src/fx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export interface TierDefinition {
|
|
2
|
+
label: string;
|
|
3
|
+
models: string[];
|
|
4
|
+
autoApprove: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const MODEL_TIERS: Readonly<Record<number, TierDefinition>>;
|
|
7
|
+
export declare function getModelTier(modelId: string | null | undefined): number;
|
|
8
|
+
export interface TaskScores {
|
|
9
|
+
complexity: number;
|
|
10
|
+
risk: number;
|
|
11
|
+
creativity: number;
|
|
12
|
+
precision: number;
|
|
13
|
+
contextVolume: number;
|
|
14
|
+
}
|
|
15
|
+
export interface Detection {
|
|
16
|
+
files?: string[];
|
|
17
|
+
scope?: {
|
|
18
|
+
fileCount?: number;
|
|
19
|
+
};
|
|
20
|
+
risk?: string;
|
|
21
|
+
riskLevel?: string;
|
|
22
|
+
objective?: string;
|
|
23
|
+
intent?: string;
|
|
24
|
+
type?: string;
|
|
25
|
+
contextTokens?: number;
|
|
26
|
+
estimatedContext?: number;
|
|
27
|
+
ambiguity?: string;
|
|
28
|
+
novelty?: string;
|
|
29
|
+
confidence?: number;
|
|
30
|
+
}
|
|
31
|
+
export declare function scoreTask(detection: Detection | null | undefined): TaskScores;
|
|
32
|
+
export declare function computeRequiredTier(scores: TaskScores): number;
|
|
33
|
+
type Permission = 'auto' | 'ask' | 'deny';
|
|
34
|
+
export interface GovernanceAssessment {
|
|
35
|
+
requestedTier: number;
|
|
36
|
+
requiredTier: number;
|
|
37
|
+
overProvisioned: boolean;
|
|
38
|
+
underProvisioned: boolean;
|
|
39
|
+
permission: Permission;
|
|
40
|
+
estimatedCost: number;
|
|
41
|
+
scores: TaskScores;
|
|
42
|
+
justification: string;
|
|
43
|
+
}
|
|
44
|
+
interface Profile {
|
|
45
|
+
workStyle?: string;
|
|
46
|
+
name?: string;
|
|
47
|
+
providers?: {
|
|
48
|
+
claude?: {
|
|
49
|
+
enabled?: boolean;
|
|
50
|
+
};
|
|
51
|
+
openai?: {
|
|
52
|
+
enabled?: boolean;
|
|
53
|
+
plan?: string;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export declare function assessGovernance(model: string, detection: Detection | null | undefined, profile: Profile | null | undefined): GovernanceAssessment;
|
|
58
|
+
export interface CollaborationAssessment {
|
|
59
|
+
collaborate: boolean;
|
|
60
|
+
triggers?: string[];
|
|
61
|
+
pattern?: string | null;
|
|
62
|
+
estimatedOverhead?: number;
|
|
63
|
+
}
|
|
64
|
+
export declare function shouldCollaborate(detection: Detection | null | undefined, governance: GovernanceAssessment, profile: Profile | null | undefined): CollaborationAssessment;
|
|
65
|
+
interface GovernanceState {
|
|
66
|
+
sessionStartedAt: string;
|
|
67
|
+
dispatches: Array<{
|
|
68
|
+
tier: number;
|
|
69
|
+
model: string;
|
|
70
|
+
estimatedCost: number;
|
|
71
|
+
approved: boolean;
|
|
72
|
+
ts: string;
|
|
73
|
+
}>;
|
|
74
|
+
totalEstimatedCost: number;
|
|
75
|
+
tierCounts: Record<number, number>;
|
|
76
|
+
}
|
|
77
|
+
export declare function loadGovernanceState(cwd: string): GovernanceState;
|
|
78
|
+
export declare function recordDispatch(cwd: string, tier: number, model: string, estimatedCost: number, approved?: boolean): GovernanceState;
|
|
79
|
+
export interface BudgetCheck {
|
|
80
|
+
spent: number;
|
|
81
|
+
remaining: number;
|
|
82
|
+
limit: number;
|
|
83
|
+
warning: boolean;
|
|
84
|
+
blocked: boolean;
|
|
85
|
+
tierCounts: Record<number, number>;
|
|
86
|
+
}
|
|
87
|
+
export declare function checkBudget(cwd: string, orchestratorConfig: {
|
|
88
|
+
budgets?: {
|
|
89
|
+
session_limit_usd?: number;
|
|
90
|
+
};
|
|
91
|
+
} | null | undefined): BudgetCheck;
|
|
92
|
+
export declare function formatGovernancePrompt(governance: GovernanceAssessment, collaboration: CollaborationAssessment | null | undefined): string;
|
|
93
|
+
export {};
|