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,393 @@
1
+ import { readFileSync, readdirSync, existsSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ const __dirname = dirname(fileURLToPath(import.meta.url));
5
+ const AGENTS_DIR = __dirname;
6
+ const SKILLS_DIR = join(AGENTS_DIR, '..', '..', 'skills');
7
+ let _agents = null;
8
+ let _skills = null;
9
+ export function getAgents() {
10
+ if (_agents)
11
+ return _agents;
12
+ _agents = new Map();
13
+ // Load built-in agents
14
+ for (const agent of BUILT_IN_AGENTS) {
15
+ _agents.set(agent.id, agent);
16
+ }
17
+ // Load custom agents from .claude/agents/ if they exist
18
+ const customDir = join(AGENTS_DIR, '..', '..', '.claude', 'agents');
19
+ if (existsSync(customDir)) {
20
+ for (const file of readdirSync(customDir).filter(f => f.endsWith('.md'))) {
21
+ try {
22
+ const content = readFileSync(join(customDir, file), 'utf8');
23
+ const parsed = parseAgentMd(content);
24
+ if (parsed)
25
+ _agents.set(parsed.id, parsed);
26
+ }
27
+ catch { }
28
+ }
29
+ }
30
+ return _agents;
31
+ }
32
+ export function getSkills() {
33
+ if (_skills)
34
+ return _skills;
35
+ _skills = new Map();
36
+ for (const skill of BUILT_IN_SKILLS) {
37
+ _skills.set(skill.command, skill);
38
+ }
39
+ return _skills;
40
+ }
41
+ export function matchAgent(intent, risk, taskType) {
42
+ const agents = getAgents();
43
+ const matches = [];
44
+ for (const [id, agent] of agents) {
45
+ let score = 0;
46
+ if (agent.intents && agent.intents.includes(intent))
47
+ score += 10;
48
+ if (agent.taskTypes && agent.taskTypes.some((t) => taskType.includes(t)))
49
+ score += 5;
50
+ if (agent.minRisk && riskLevel(risk) >= riskLevel(agent.minRisk))
51
+ score += 3;
52
+ if (score > 0)
53
+ matches.push({ ...agent, score });
54
+ }
55
+ return matches.sort((a, b) => b.score - a.score);
56
+ }
57
+ export function matchSkill(command) {
58
+ const skills = getSkills();
59
+ const cmd = command.replace(/^\//, '').split(' ')[0].toLowerCase();
60
+ return skills.get(cmd) || null;
61
+ }
62
+ export function skillToTaskBrief(command, args) {
63
+ const skill = matchSkill(command);
64
+ if (!skill)
65
+ return null;
66
+ return {
67
+ objective: skill.objective(args),
68
+ scope: skill.scope || [],
69
+ tier: skill.tier,
70
+ model: skill.model,
71
+ risk: skill.risk || 'low',
72
+ acceptanceCriteria: skill.acceptanceCriteria || [],
73
+ agentId: skill.agent,
74
+ cost: skill.cost,
75
+ };
76
+ }
77
+ function riskLevel(r) {
78
+ return { low: 1, medium: 2, high: 3, critical: 4 }[r] || 0;
79
+ }
80
+ function parseAgentMd(content) {
81
+ // Parse YAML frontmatter from .claude/agents/*.md
82
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
83
+ if (!match)
84
+ return null;
85
+ const meta = {};
86
+ for (const line of match[1].split('\n')) {
87
+ const [key, ...rest] = line.split(':');
88
+ if (key && rest.length)
89
+ meta[key.trim()] = rest.join(':').trim();
90
+ }
91
+ return {
92
+ id: meta.name || 'unknown',
93
+ name: meta.name || 'Unknown Agent',
94
+ tier: meta.tier || 'execute',
95
+ model: meta.model || 'sonnet',
96
+ intents: (meta.intents || '').split(',').map((s) => s.trim()),
97
+ taskTypes: (meta.taskTypes || '').split(',').map((s) => s.trim()),
98
+ prompt: content.replace(/^---[\s\S]*?---\n/, ''),
99
+ };
100
+ }
101
+ // ── Built-in Agents ──────────────────────────────────────────────────────
102
+ const BUILT_IN_AGENTS = [
103
+ {
104
+ id: 'reviewer',
105
+ name: 'Code Reviewer',
106
+ tier: 'execute',
107
+ model: 'sonnet',
108
+ cost: 'cheap',
109
+ intents: ['review', 'audit', 'check'],
110
+ taskTypes: ['code-review', 'pr-review', 'diff-review'],
111
+ contract: {
112
+ inputs: ['diff', 'base_branch', 'focus_areas'],
113
+ outputs: ['findings', 'severity', 'suggestions', 'verdict'],
114
+ },
115
+ prompt: `You are a code reviewer. Review the provided diff for: correctness, security issues, performance problems, code style, and test coverage gaps. For each finding, provide: severity (critical/high/medium/low), file and line, description, and suggested fix. Return structured JSON: { "verdict": "approve|request_changes|comment", "findings": [...], "summary": "..." }`,
116
+ },
117
+ {
118
+ id: 'debugger',
119
+ name: 'Debugger',
120
+ tier: 'execute',
121
+ model: 'sonnet',
122
+ cost: 'cheap',
123
+ intents: ['debug', 'fix', 'investigate', 'error'],
124
+ taskTypes: ['bug-fix', 'error-investigation', 'crash-analysis'],
125
+ contract: {
126
+ inputs: ['error_message', 'stack_trace', 'reproduction_steps', 'relevant_files'],
127
+ outputs: ['root_cause', 'patch', 'tests', 'confidence'],
128
+ },
129
+ prompt: `You are a debugger. Given an error, stack trace, or bug description: 1) Reproduce or trace the issue, 2) Identify root cause, 3) Implement the fix, 4) Add a regression test. Return: { "root_cause": "...", "files_changed": [...], "tests_added": [...], "confidence": "high|medium|low" }`,
130
+ },
131
+ {
132
+ id: 'test-writer',
133
+ name: 'Test Writer',
134
+ tier: 'execute',
135
+ model: 'sonnet',
136
+ cost: 'cheap',
137
+ intents: ['test', 'coverage', 'spec'],
138
+ taskTypes: ['test-generation', 'test-coverage', 'fixture-creation'],
139
+ contract: {
140
+ inputs: ['target_file', 'test_framework', 'existing_tests'],
141
+ outputs: ['test_file', 'test_count', 'coverage_areas', 'edge_cases'],
142
+ },
143
+ prompt: `You are a test writer. Given a source file, generate comprehensive tests covering: happy path, edge cases, error conditions, and boundary values. Match the existing test framework and style. Return: { "test_file": "...", "tests": [...], "edge_cases_covered": [...] }`,
144
+ },
145
+ {
146
+ id: 'architect',
147
+ name: 'Architect',
148
+ tier: 'think',
149
+ model: 'opus',
150
+ cost: 'full',
151
+ intents: ['design', 'architect', 'plan', 'structure'],
152
+ taskTypes: ['architecture', 'system-design', 'api-design', 'module-design'],
153
+ contract: {
154
+ inputs: ['goal', 'constraints', 'existing_architecture', 'scale_requirements'],
155
+ outputs: ['design', 'modules', 'interfaces', 'tradeoffs', 'risks'],
156
+ },
157
+ prompt: `You are a software architect. Design the system or module with: clear module boundaries, well-defined interfaces, explicit tradeoffs, and identified risks. Return: { "design": "...", "modules": [...], "interfaces": [...], "tradeoffs": [...], "risks": [...] }`,
158
+ },
159
+ {
160
+ id: 'security',
161
+ name: 'Security Auditor',
162
+ tier: 'execute',
163
+ model: 'sonnet',
164
+ cost: 'full',
165
+ intents: ['security', 'vulnerability', 'owasp', 'secrets'],
166
+ taskTypes: ['security-audit', 'vulnerability-scan', 'secret-detection', 'auth-review'],
167
+ minRisk: 'medium',
168
+ contract: {
169
+ inputs: ['scope', 'diff', 'dependencies', 'config_files'],
170
+ outputs: ['vulnerabilities', 'severity', 'remediation', 'compliance'],
171
+ },
172
+ prompt: `You are a security auditor. Scan for: OWASP Top 10 vulnerabilities, hardcoded secrets, insecure dependencies, auth/authz issues, injection vectors, and data exposure. Return: { "vulnerabilities": [{ "type": "...", "severity": "critical|high|medium|low", "file": "...", "line": N, "remediation": "..." }], "clean": true/false }`,
173
+ },
174
+ {
175
+ id: 'refactor',
176
+ name: 'Refactorer',
177
+ tier: 'execute',
178
+ model: 'sonnet',
179
+ cost: 'cheap',
180
+ intents: ['refactor', 'cleanup', 'simplify', 'extract'],
181
+ taskTypes: ['refactoring', 'code-cleanup', 'extraction', 'rename'],
182
+ contract: {
183
+ inputs: ['target', 'goal', 'constraints', 'preserve_behavior'],
184
+ outputs: ['patch', 'behavior_preserved', 'tests_updated'],
185
+ },
186
+ prompt: `You are a refactoring specialist. Improve code structure while preserving behavior. Verify with existing tests. Return: { "changes": [...], "behavior_preserved": true, "tests_passing": true }`,
187
+ },
188
+ {
189
+ id: 'docs',
190
+ name: 'Documentation Writer',
191
+ tier: 'execute',
192
+ model: 'sonnet',
193
+ cost: 'cheap',
194
+ intents: ['document', 'readme', 'api-doc', 'explain'],
195
+ taskTypes: ['documentation', 'readme-update', 'api-docs', 'changelog'],
196
+ contract: {
197
+ inputs: ['files', 'audience', 'format', 'existing_docs'],
198
+ outputs: ['docs_patch', 'sections_updated'],
199
+ },
200
+ prompt: `You are a documentation writer. Generate clear, concise documentation for the specified code. Match existing doc style. Return: { "docs": "...", "sections": [...] }`,
201
+ },
202
+ {
203
+ id: 'researcher',
204
+ name: 'Research Agent',
205
+ tier: 'search',
206
+ model: 'haiku',
207
+ cost: 'cheap',
208
+ intents: ['research', 'lookup', 'find', 'search', 'explore'],
209
+ taskTypes: ['web-search', 'docs-lookup', 'api-exploration', 'codebase-search'],
210
+ contract: {
211
+ inputs: ['query', 'domains', 'freshness_requirement'],
212
+ outputs: ['sources', 'summary', 'references', 'confidence'],
213
+ },
214
+ prompt: `You are a research agent. Find accurate, current information. Cite sources. Distinguish facts from opinions. Return: { "answer": "...", "sources": [...], "confidence": "high|medium|low" }`,
215
+ },
216
+ {
217
+ id: 'performance',
218
+ name: 'Performance Optimizer',
219
+ tier: 'execute',
220
+ model: 'sonnet',
221
+ cost: 'cheap',
222
+ intents: ['optimize', 'performance', 'speed', 'profile', 'bottleneck'],
223
+ taskTypes: ['performance-optimization', 'profiling', 'bottleneck-detection'],
224
+ contract: {
225
+ inputs: ['hot_path', 'metrics', 'budget_ms'],
226
+ outputs: ['bottlenecks', 'optimizations', 'patch', 'expected_improvement'],
227
+ },
228
+ prompt: `You are a performance specialist. Profile, identify bottlenecks, and optimize. Measure before/after. Return: { "bottlenecks": [...], "optimizations": [...], "expected_speedup": "..." }`,
229
+ },
230
+ {
231
+ id: 'devops',
232
+ name: 'DevOps Engineer',
233
+ tier: 'execute',
234
+ model: 'sonnet',
235
+ cost: 'full',
236
+ intents: ['deploy', 'ci', 'docker', 'infrastructure', 'pipeline'],
237
+ taskTypes: ['deployment', 'ci-cd', 'docker', 'infrastructure', 'monitoring'],
238
+ minRisk: 'medium',
239
+ contract: {
240
+ inputs: ['goal', 'environment', 'constraints', 'current_config'],
241
+ outputs: ['config', 'commands', 'risks', 'rollback_plan'],
242
+ },
243
+ prompt: `You are a DevOps engineer. Configure infrastructure, CI/CD, and deployment with: security best practices, rollback plans, and monitoring. Return: { "config_changes": [...], "commands": [...], "risks": [...], "rollback": "..." }`,
244
+ },
245
+ ];
246
+ // ── Built-in Skills ──────────────────────────────────────────────────────
247
+ const BUILT_IN_SKILLS = [
248
+ {
249
+ command: 'review',
250
+ agent: 'reviewer',
251
+ tier: 'execute',
252
+ model: 'sonnet',
253
+ cost: 'cheap',
254
+ description: 'Review current changes or a specific file',
255
+ objective: (args) => args ? `Review changes in ${args}` : 'Review all uncommitted changes',
256
+ acceptanceCriteria: ['All findings include severity and file location', 'Verdict is clear'],
257
+ },
258
+ {
259
+ command: 'debug',
260
+ agent: 'debugger',
261
+ tier: 'execute',
262
+ model: 'sonnet',
263
+ cost: 'cheap',
264
+ description: 'Investigate and fix an error',
265
+ objective: (args) => `Debug: ${args || 'investigate recent error'}`,
266
+ acceptanceCriteria: ['Root cause identified', 'Fix implemented', 'Regression test added'],
267
+ },
268
+ {
269
+ command: 'test',
270
+ agent: 'test-writer',
271
+ tier: 'execute',
272
+ model: 'sonnet',
273
+ cost: 'cheap',
274
+ description: 'Generate tests for a file',
275
+ objective: (args) => `Generate comprehensive tests for ${args || 'changed files'}`,
276
+ acceptanceCriteria: ['Tests cover happy path and edge cases', 'Tests pass'],
277
+ },
278
+ {
279
+ command: 'plan',
280
+ agent: 'architect',
281
+ tier: 'think',
282
+ model: 'opus',
283
+ cost: 'full',
284
+ description: 'Create an execution plan for a task',
285
+ objective: (args) => `Create execution plan: ${args || 'current task'}`,
286
+ acceptanceCriteria: ['Steps are concrete and ordered', 'Risks identified', 'Acceptance criteria per step'],
287
+ },
288
+ {
289
+ command: 'audit',
290
+ agent: 'security',
291
+ tier: 'execute',
292
+ model: 'sonnet',
293
+ cost: 'cheap',
294
+ description: 'Run a security, quality, or dependency audit',
295
+ objective: (args) => `Audit: ${args || 'security scan of current changes'}`,
296
+ acceptanceCriteria: ['All findings include severity', 'Remediation steps provided'],
297
+ },
298
+ {
299
+ command: 'fix',
300
+ agent: 'debugger',
301
+ tier: 'execute',
302
+ model: 'sonnet',
303
+ cost: 'cheap',
304
+ description: 'Fix a specific issue',
305
+ objective: (args) => `Fix: ${args}`,
306
+ acceptanceCriteria: ['Issue resolved', 'Tests pass', 'No regressions'],
307
+ },
308
+ {
309
+ command: 'explain',
310
+ agent: 'researcher',
311
+ tier: 'search',
312
+ model: 'haiku',
313
+ cost: 'cheap',
314
+ description: 'Explain how code works',
315
+ objective: (args) => `Explain: ${args || 'current file'}`,
316
+ },
317
+ {
318
+ command: 'refactor',
319
+ agent: 'refactor',
320
+ tier: 'execute',
321
+ model: 'sonnet',
322
+ cost: 'cheap',
323
+ description: 'Refactor code for clarity or performance',
324
+ objective: (args) => `Refactor: ${args || 'current file'}`,
325
+ acceptanceCriteria: ['Behavior preserved', 'Tests still pass'],
326
+ },
327
+ {
328
+ command: 'doc',
329
+ agent: 'docs',
330
+ tier: 'execute',
331
+ model: 'sonnet',
332
+ cost: 'cheap',
333
+ description: 'Generate or update documentation',
334
+ objective: (args) => `Document: ${args || 'changed files'}`,
335
+ },
336
+ {
337
+ command: 'brainstorm',
338
+ agent: 'architect',
339
+ tier: 'think',
340
+ model: 'sonnet',
341
+ cost: 'cheap',
342
+ description: 'Generate ideas and explore options',
343
+ objective: (args) => `Brainstorm: ${args || 'current challenge'}`,
344
+ },
345
+ {
346
+ command: 'search',
347
+ agent: 'researcher',
348
+ tier: 'search',
349
+ model: 'haiku',
350
+ cost: 'cheap',
351
+ description: 'Search web, docs, or codebase',
352
+ objective: (args) => `Search: ${args}`,
353
+ },
354
+ {
355
+ command: 'status',
356
+ agent: null, // deterministic, no agent needed
357
+ tier: 'free',
358
+ cost: 'free',
359
+ description: 'Show system health and status',
360
+ objective: () => 'Display system status',
361
+ },
362
+ {
363
+ command: 'deploy',
364
+ agent: 'devops',
365
+ tier: 'execute',
366
+ model: 'sonnet',
367
+ cost: 'full',
368
+ risk: 'high',
369
+ description: 'Run deployment workflow',
370
+ objective: (args) => `Deploy: ${args || 'production'}`,
371
+ acceptanceCriteria: ['Deployment successful', 'Health check passes', 'Rollback plan documented'],
372
+ },
373
+ {
374
+ command: 'perf',
375
+ agent: 'performance',
376
+ tier: 'execute',
377
+ model: 'sonnet',
378
+ cost: 'cheap',
379
+ description: 'Profile and optimize performance',
380
+ objective: (args) => `Optimize performance: ${args || 'hot paths'}`,
381
+ },
382
+ {
383
+ command: 'release',
384
+ agent: 'docs',
385
+ tier: 'execute',
386
+ model: 'sonnet',
387
+ cost: 'cheap',
388
+ description: 'Generate changelog and release checklist',
389
+ objective: (args) => `Prepare release: ${args || 'current version'}`,
390
+ acceptanceCriteria: ['Changelog generated', 'Version bumped', 'Doctor passes'],
391
+ },
392
+ ];
393
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agents/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * awareness.ts — Environment awareness layer for dual-brain.
3
+ * Scans runtime environment once on startup and caches results with TTL.
4
+ */
5
+ interface ToolInfo {
6
+ available: boolean;
7
+ version?: string | null;
8
+ }
9
+ interface ContainerInfo {
10
+ type: string;
11
+ hostname: string;
12
+ nodeVersion: string;
13
+ platform: string;
14
+ arch: string;
15
+ }
16
+ interface ReplitToolsInfo {
17
+ installed: boolean;
18
+ version: string | null;
19
+ sessionArchivePath: string | null;
20
+ capabilities: string[];
21
+ }
22
+ interface ReplitInfo {
23
+ isReplit: boolean;
24
+ replId: string | null;
25
+ replSlug: string | null;
26
+ hasDatabase: boolean;
27
+ hasKV: boolean;
28
+ hasObjectStorage: boolean;
29
+ hasAuth: boolean;
30
+ hasDeployments: boolean;
31
+ }
32
+ interface ClaudeCodeInfo {
33
+ isInsideClaude: boolean;
34
+ hooksDir: string | null;
35
+ mcpConfigured: boolean;
36
+ settingsPath: string | null;
37
+ }
38
+ interface DualBrainInfo {
39
+ version: string;
40
+ livingDocsInit: boolean;
41
+ sessionCount: number;
42
+ hasLedger: boolean;
43
+ hasFailureMemory: boolean;
44
+ }
45
+ export interface EnvironmentReport {
46
+ scannedAt: number;
47
+ ttl: number;
48
+ container: ContainerInfo;
49
+ tools: Record<string, ToolInfo>;
50
+ secrets: Record<string, boolean>;
51
+ replitTools: ReplitToolsInfo;
52
+ replit: ReplitInfo;
53
+ claudeCode: ClaudeCodeInfo;
54
+ dualBrain: DualBrainInfo;
55
+ }
56
+ interface ScanOptions {
57
+ ttl?: number;
58
+ force?: boolean;
59
+ }
60
+ interface AmbiguityResult {
61
+ isAmbiguous: boolean;
62
+ reason: string | null;
63
+ }
64
+ interface AmbiguousResult {
65
+ ambiguous: boolean;
66
+ reason: string | null;
67
+ confidence: number;
68
+ }
69
+ export declare function scanEnvironment(cwd: string | undefined, options?: ScanOptions): EnvironmentReport;
70
+ export declare function formatEnvironment(report: EnvironmentReport): string;
71
+ export declare function getCapabilitySummary(report: EnvironmentReport): string[];
72
+ export declare function invalidateCache(): void;
73
+ /**
74
+ * Detect whether a prompt is ambiguous and needs clarification before dispatch.
75
+ *
76
+ * A prompt is considered ambiguous when ALL of the following are true:
77
+ * 1. It is very short (under 4 words)
78
+ * 2. No file context is provided
79
+ * 3. It lacks specific technical terms that narrow the intent
80
+ */
81
+ export declare function detectAmbiguity(prompt: unknown, context?: {
82
+ files?: string[];
83
+ }): AmbiguityResult;
84
+ /**
85
+ * Detect whether a user prompt is too vague to act on confidently.
86
+ *
87
+ * Checks for:
88
+ * - Very short prompts (under 10 chars)
89
+ * - No file paths, function names, or specific identifiers
90
+ * - Pronoun-only references without antecedents ("fix that thing", "change it")
91
+ */
92
+ export declare function isAmbiguous(prompt: unknown): AmbiguousResult;
93
+ export {};