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.
Files changed (309) hide show
  1. package/.dual-brain/docs/claude-code-extension-points.md +32 -0
  2. package/.dual-brain/docs/data-tools-capabilities.md +181 -0
  3. package/.dual-brain/docs/ecosystem-tools.md +91 -0
  4. package/.dual-brain/docs/panel-handoff.md +124 -0
  5. package/.dual-brain/docs/ruflo-analysis.md +48 -0
  6. package/bin/dual-brain.mjs +56 -56
  7. package/dist/mcp-server/index.d.ts +27 -0
  8. package/dist/mcp-server/index.js +359 -0
  9. package/dist/mcp-server/index.js.map +1 -0
  10. package/dist/src/agent-protocol.d.ts +163 -0
  11. package/dist/src/agent-protocol.js +368 -0
  12. package/dist/src/agent-protocol.js.map +1 -0
  13. package/dist/src/agents/registry.d.ts +52 -0
  14. package/dist/src/agents/registry.js +393 -0
  15. package/dist/src/agents/registry.js.map +1 -0
  16. package/dist/src/awareness.d.ts +93 -0
  17. package/dist/src/awareness.js +406 -0
  18. package/dist/src/awareness.js.map +1 -0
  19. package/dist/src/brief.d.ts +48 -0
  20. package/dist/src/brief.js +179 -0
  21. package/dist/src/brief.js.map +1 -0
  22. package/dist/src/calibration.d.ts +32 -0
  23. package/dist/src/calibration.js +133 -0
  24. package/dist/src/calibration.js.map +1 -0
  25. package/dist/src/checkpoint.d.ts +33 -0
  26. package/dist/src/checkpoint.js +99 -0
  27. package/dist/src/checkpoint.js.map +1 -0
  28. package/dist/src/ci-triage.d.ts +33 -0
  29. package/dist/src/ci-triage.js +193 -0
  30. package/dist/src/ci-triage.js.map +1 -0
  31. package/dist/src/cognitive-loop.d.ts +56 -0
  32. package/dist/src/cognitive-loop.js +495 -0
  33. package/dist/src/cognitive-loop.js.map +1 -0
  34. package/dist/src/collaboration.d.ts +147 -0
  35. package/dist/src/collaboration.js +438 -0
  36. package/dist/src/collaboration.js.map +1 -0
  37. package/dist/src/context-intel.d.ts +47 -0
  38. package/dist/src/context-intel.js +156 -0
  39. package/dist/src/context-intel.js.map +1 -0
  40. package/dist/src/context.d.ts +53 -0
  41. package/dist/src/context.js +332 -0
  42. package/dist/src/context.js.map +1 -0
  43. package/dist/src/continuity.d.ts +89 -0
  44. package/dist/src/continuity.js +230 -0
  45. package/dist/src/continuity.js.map +1 -0
  46. package/dist/src/cost-tracker.d.ts +47 -0
  47. package/dist/src/cost-tracker.js +170 -0
  48. package/dist/src/cost-tracker.js.map +1 -0
  49. package/dist/src/debrief.d.ts +53 -0
  50. package/dist/src/debrief.js +222 -0
  51. package/dist/src/debrief.js.map +1 -0
  52. package/dist/src/decide.d.ts +96 -0
  53. package/dist/src/decide.js +744 -0
  54. package/dist/src/decide.js.map +1 -0
  55. package/dist/src/decompose.d.ts +39 -0
  56. package/dist/src/decompose.js +218 -0
  57. package/dist/src/decompose.js.map +1 -0
  58. package/dist/src/detect.d.ts +91 -0
  59. package/dist/src/detect.js +544 -0
  60. package/dist/src/detect.js.map +1 -0
  61. package/dist/src/dispatch.d.ts +154 -0
  62. package/dist/src/dispatch.js +1306 -0
  63. package/dist/src/dispatch.js.map +1 -0
  64. package/dist/src/doctor.d.ts +421 -0
  65. package/dist/src/doctor.js +1689 -0
  66. package/dist/src/doctor.js.map +1 -0
  67. package/dist/src/engine.d.ts +70 -0
  68. package/dist/src/engine.js +155 -0
  69. package/dist/src/engine.js.map +1 -0
  70. package/dist/src/envelope.d.ts +36 -0
  71. package/dist/src/envelope.js +80 -0
  72. package/dist/src/envelope.js.map +1 -0
  73. package/dist/src/failure-memory.d.ts +55 -0
  74. package/dist/src/failure-memory.js +175 -0
  75. package/dist/src/failure-memory.js.map +1 -0
  76. package/dist/src/fx.d.ts +87 -0
  77. package/dist/src/fx.js +272 -0
  78. package/dist/src/fx.js.map +1 -0
  79. package/dist/src/governance.d.ts +93 -0
  80. package/dist/src/governance.js +261 -0
  81. package/dist/src/governance.js.map +1 -0
  82. package/dist/src/handoff.d.ts +11 -0
  83. package/dist/src/handoff.js +90 -0
  84. package/dist/src/handoff.js.map +1 -0
  85. package/dist/src/head-protocol.d.ts +76 -0
  86. package/dist/src/head-protocol.js +109 -0
  87. package/dist/src/head-protocol.js.map +1 -0
  88. package/dist/src/head.d.ts +222 -0
  89. package/dist/src/head.js +765 -0
  90. package/dist/src/head.js.map +1 -0
  91. package/dist/src/health.d.ts +132 -0
  92. package/dist/src/health.js +435 -0
  93. package/dist/src/health.js.map +1 -0
  94. package/dist/src/inbox.d.ts +70 -0
  95. package/dist/src/inbox.js +218 -0
  96. package/dist/src/inbox.js.map +1 -0
  97. package/dist/src/index.d.ts +33 -0
  98. package/dist/src/index.js +38 -0
  99. package/dist/src/index.js.map +1 -0
  100. package/dist/src/install-hooks.d.ts +13 -0
  101. package/dist/src/install-hooks.js +88 -0
  102. package/dist/src/install-hooks.js.map +1 -0
  103. package/dist/src/integrity.d.ts +59 -0
  104. package/dist/src/integrity.js +206 -0
  105. package/dist/src/integrity.js.map +1 -0
  106. package/dist/src/intelligence.d.ts +104 -0
  107. package/dist/src/intelligence.js +391 -0
  108. package/dist/src/intelligence.js.map +1 -0
  109. package/dist/src/ledger.d.ts +54 -0
  110. package/dist/src/ledger.js +179 -0
  111. package/dist/src/ledger.js.map +1 -0
  112. package/dist/src/living-docs.d.ts +14 -0
  113. package/dist/src/living-docs.js +197 -0
  114. package/dist/src/living-docs.js.map +1 -0
  115. package/dist/src/memory-tiers.d.ts +37 -0
  116. package/dist/src/memory-tiers.js +160 -0
  117. package/dist/src/memory-tiers.js.map +1 -0
  118. package/dist/src/model-profiles.d.ts +65 -0
  119. package/dist/src/model-profiles.js +568 -0
  120. package/dist/src/model-profiles.js.map +1 -0
  121. package/dist/src/models.d.ts +58 -0
  122. package/dist/src/models.js +327 -0
  123. package/dist/src/models.js.map +1 -0
  124. package/dist/src/narrative.d.ts +54 -0
  125. package/dist/src/narrative.js +163 -0
  126. package/dist/src/narrative.js.map +1 -0
  127. package/dist/src/nextstep.d.ts +16 -0
  128. package/dist/src/nextstep.js +103 -0
  129. package/dist/src/nextstep.js.map +1 -0
  130. package/dist/src/observer.d.ts +18 -0
  131. package/dist/src/observer.js +251 -0
  132. package/dist/src/observer.js.map +1 -0
  133. package/dist/src/outcome.d.ts +110 -0
  134. package/dist/src/outcome.js +377 -0
  135. package/dist/src/outcome.js.map +1 -0
  136. package/dist/src/pipeline.d.ts +167 -0
  137. package/dist/src/pipeline.js +1503 -0
  138. package/dist/src/pipeline.js.map +1 -0
  139. package/dist/src/playbook.d.ts +59 -0
  140. package/dist/src/playbook.js +238 -0
  141. package/dist/src/playbook.js.map +1 -0
  142. package/dist/src/pr-agent.d.ts +97 -0
  143. package/dist/src/pr-agent.js +195 -0
  144. package/dist/src/pr-agent.js.map +1 -0
  145. package/dist/src/predictive.d.ts +57 -0
  146. package/dist/src/predictive.js +230 -0
  147. package/dist/src/predictive.js.map +1 -0
  148. package/dist/src/profile.d.ts +294 -0
  149. package/dist/src/profile.js +1347 -0
  150. package/dist/src/profile.js.map +1 -0
  151. package/dist/src/prompt-audit.d.ts +22 -0
  152. package/dist/src/prompt-audit.js +194 -0
  153. package/dist/src/prompt-audit.js.map +1 -0
  154. package/dist/src/prompt-intel.d.ts +12 -0
  155. package/dist/src/prompt-intel.js +321 -0
  156. package/dist/src/prompt-intel.js.map +1 -0
  157. package/dist/src/provider-context.d.ts +121 -0
  158. package/dist/src/provider-context.js +222 -0
  159. package/dist/src/provider-context.js.map +1 -0
  160. package/dist/src/provider-manager.d.ts +92 -0
  161. package/dist/src/provider-manager.js +428 -0
  162. package/dist/src/provider-manager.js.map +1 -0
  163. package/dist/src/receipt.d.ts +87 -0
  164. package/dist/src/receipt.js +326 -0
  165. package/dist/src/receipt.js.map +1 -0
  166. package/dist/src/recommendations.d.ts +13 -0
  167. package/dist/src/recommendations.js +291 -0
  168. package/dist/src/recommendations.js.map +1 -0
  169. package/dist/src/redact.d.ts +15 -0
  170. package/dist/src/redact.js +129 -0
  171. package/dist/src/redact.js.map +1 -0
  172. package/dist/src/replit.d.ts +397 -0
  173. package/dist/src/replit.js +1160 -0
  174. package/dist/src/replit.js.map +1 -0
  175. package/dist/src/repo.d.ts +149 -0
  176. package/dist/src/repo.js +416 -0
  177. package/dist/src/repo.js.map +1 -0
  178. package/dist/src/revert.d.ts +30 -0
  179. package/dist/src/revert.js +166 -0
  180. package/dist/src/revert.js.map +1 -0
  181. package/dist/src/room.d.ts +102 -0
  182. package/dist/src/room.js +212 -0
  183. package/dist/src/room.js.map +1 -0
  184. package/dist/src/routing-advisor.d.ts +57 -0
  185. package/dist/src/routing-advisor.js +221 -0
  186. package/dist/src/routing-advisor.js.map +1 -0
  187. package/dist/src/self-correct.d.ts +40 -0
  188. package/dist/src/self-correct.js +137 -0
  189. package/dist/src/self-correct.js.map +1 -0
  190. package/dist/src/session-lock.d.ts +35 -0
  191. package/dist/src/session-lock.js +134 -0
  192. package/dist/src/session-lock.js.map +1 -0
  193. package/dist/src/session.d.ts +267 -0
  194. package/dist/src/session.js +1660 -0
  195. package/dist/src/session.js.map +1 -0
  196. package/dist/src/settings-tui.d.ts +5 -0
  197. package/dist/src/settings-tui.js +422 -0
  198. package/dist/src/settings-tui.js.map +1 -0
  199. package/dist/src/setup-flow.d.ts +63 -0
  200. package/dist/src/setup-flow.js +233 -0
  201. package/dist/src/setup-flow.js.map +1 -0
  202. package/dist/src/signal.d.ts +19 -0
  203. package/dist/src/signal.js +122 -0
  204. package/dist/src/signal.js.map +1 -0
  205. package/dist/src/simmer.d.ts +85 -0
  206. package/dist/src/simmer.js +224 -0
  207. package/dist/src/simmer.js.map +1 -0
  208. package/dist/src/state-export.d.ts +129 -0
  209. package/dist/src/state-export.js +233 -0
  210. package/dist/src/state-export.js.map +1 -0
  211. package/dist/src/strategy.d.ts +54 -0
  212. package/dist/src/strategy.js +95 -0
  213. package/dist/src/strategy.js.map +1 -0
  214. package/dist/src/subscription.d.ts +40 -0
  215. package/dist/src/subscription.js +189 -0
  216. package/dist/src/subscription.js.map +1 -0
  217. package/dist/src/templates.d.ts +208 -0
  218. package/dist/src/templates.js +238 -0
  219. package/dist/src/templates.js.map +1 -0
  220. package/dist/src/test.d.ts +9 -0
  221. package/dist/src/test.js +1173 -0
  222. package/dist/src/test.js.map +1 -0
  223. package/dist/src/think-engine.d.ts +67 -0
  224. package/dist/src/think-engine.js +412 -0
  225. package/dist/src/think-engine.js.map +1 -0
  226. package/dist/src/tui.d.ts +71 -0
  227. package/dist/src/tui.js +242 -0
  228. package/dist/src/tui.js.map +1 -0
  229. package/dist/src/types.d.ts +177 -0
  230. package/dist/src/types.js +6 -0
  231. package/dist/src/types.js.map +1 -0
  232. package/dist/src/update-check.d.ts +7 -0
  233. package/dist/src/update-check.js +36 -0
  234. package/dist/src/update-check.js.map +1 -0
  235. package/dist/src/wave-planner.d.ts +30 -0
  236. package/dist/src/wave-planner.js +281 -0
  237. package/dist/src/wave-planner.js.map +1 -0
  238. package/hooks/head-guard.sh +41 -0
  239. package/hooks/task-classifier.mjs +328 -0
  240. package/hooks/vibe-router.mjs +387 -0
  241. package/package.json +29 -153
  242. package/src/agents/registry.mjs +0 -405
  243. package/src/awareness.mjs +0 -425
  244. package/src/brief.mjs +0 -266
  245. package/src/calibration.mjs +0 -148
  246. package/src/checkpoint.mjs +0 -109
  247. package/src/ci-triage.mjs +0 -191
  248. package/src/cognitive-loop.mjs +0 -562
  249. package/src/collaboration.mjs +0 -545
  250. package/src/context-intel.mjs +0 -158
  251. package/src/context.mjs +0 -389
  252. package/src/continuity.mjs +0 -298
  253. package/src/cost-tracker.mjs +0 -184
  254. package/src/debrief.mjs +0 -228
  255. package/src/decide.mjs +0 -1099
  256. package/src/decompose.mjs +0 -331
  257. package/src/detect.mjs +0 -702
  258. package/src/dispatch.mjs +0 -1447
  259. package/src/doctor.mjs +0 -1607
  260. package/src/envelope.mjs +0 -139
  261. package/src/failure-memory.mjs +0 -178
  262. package/src/fx.mjs +0 -276
  263. package/src/governance.mjs +0 -279
  264. package/src/handoff.mjs +0 -87
  265. package/src/head-protocol.mjs +0 -128
  266. package/src/head.mjs +0 -952
  267. package/src/health.mjs +0 -528
  268. package/src/inbox.mjs +0 -195
  269. package/src/index.mjs +0 -44
  270. package/src/install-hooks.mjs +0 -100
  271. package/src/integrity.mjs +0 -245
  272. package/src/intelligence.mjs +0 -447
  273. package/src/ledger.mjs +0 -196
  274. package/src/living-docs.mjs +0 -210
  275. package/src/memory-tiers.mjs +0 -193
  276. package/src/models.mjs +0 -363
  277. package/src/narrative.mjs +0 -169
  278. package/src/nextstep.mjs +0 -100
  279. package/src/observer.mjs +0 -241
  280. package/src/outcome.mjs +0 -400
  281. package/src/pipeline.mjs +0 -1711
  282. package/src/playbook.mjs +0 -257
  283. package/src/pr-agent.mjs +0 -214
  284. package/src/predictive.mjs +0 -250
  285. package/src/profile.mjs +0 -1411
  286. package/src/prompt-audit.mjs +0 -231
  287. package/src/prompt-intel.mjs +0 -325
  288. package/src/provider-context.mjs +0 -257
  289. package/src/receipt.mjs +0 -344
  290. package/src/recommendations.mjs +0 -296
  291. package/src/redact.mjs +0 -192
  292. package/src/replit.mjs +0 -1210
  293. package/src/repo.mjs +0 -445
  294. package/src/revert.mjs +0 -149
  295. package/src/routing-advisor.mjs +0 -204
  296. package/src/self-correct.mjs +0 -147
  297. package/src/session-lock.mjs +0 -160
  298. package/src/session.mjs +0 -1655
  299. package/src/settings-tui.mjs +0 -373
  300. package/src/setup-flow.mjs +0 -223
  301. package/src/signal.mjs +0 -115
  302. package/src/simmer.mjs +0 -241
  303. package/src/strategy.mjs +0 -235
  304. package/src/subscription.mjs +0 -212
  305. package/src/templates.mjs +0 -260
  306. package/src/think-engine.mjs +0 -428
  307. package/src/tui.mjs +0 -276
  308. package/src/update-check.mjs +0 -35
  309. package/src/wave-planner.mjs +0 -294
@@ -0,0 +1,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":"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"}
@@ -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 {};