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
package/bin/dual-brain.mjs
CHANGED
|
@@ -16,9 +16,9 @@ import {
|
|
|
16
16
|
saveSubscription, listSubscriptions,
|
|
17
17
|
autoSetup,
|
|
18
18
|
loadCredentials, saveCredentials, getCredentialSummary, detectCredentials, addCredential, removeCredential, checkCredentialHealth,
|
|
19
|
-
} from '../src/profile.
|
|
19
|
+
} from '../dist/src/profile.js';
|
|
20
20
|
|
|
21
|
-
import { detectTask, primeAgentRegistry } from '../src/detect.
|
|
21
|
+
import { detectTask, primeAgentRegistry } from '../dist/src/detect.js';
|
|
22
22
|
|
|
23
23
|
// ─── Claude launch helper ────────────────────────────────────────────────────
|
|
24
24
|
// Builds launch args respecting user's bypass preference from profile.
|
|
@@ -46,7 +46,7 @@ let _cachedSkillToTaskBrief = null;
|
|
|
46
46
|
|
|
47
47
|
async function _primeRegistryCache() {
|
|
48
48
|
try {
|
|
49
|
-
const reg = await import('../src/agents/registry.
|
|
49
|
+
const reg = await import('../dist/src/agents/registry.js');
|
|
50
50
|
_cachedMatchSkill = reg.matchSkill;
|
|
51
51
|
_cachedSkillToTaskBrief = reg.skillToTaskBrief;
|
|
52
52
|
} catch {}
|
|
@@ -54,28 +54,28 @@ async function _primeRegistryCache() {
|
|
|
54
54
|
|
|
55
55
|
import {
|
|
56
56
|
decideRoute, getAvailableModels,
|
|
57
|
-
} from '../src/decide.
|
|
57
|
+
} from '../dist/src/decide.js';
|
|
58
58
|
|
|
59
59
|
import {
|
|
60
60
|
getHealth, markHot, markHealthy, remainingCooldownMinutes, getSessionStats,
|
|
61
|
-
} from '../src/health.
|
|
61
|
+
} from '../dist/src/health.js';
|
|
62
62
|
|
|
63
|
-
import { dispatch, detectRuntime, dispatchDualBrain } from '../src/dispatch.
|
|
63
|
+
import { dispatch, detectRuntime, dispatchDualBrain } from '../dist/src/dispatch.js';
|
|
64
64
|
|
|
65
|
-
import { runPipeline, buildExecutionPlan, formatExecutionPlan } from '../src/pipeline.
|
|
65
|
+
import { runPipeline, buildExecutionPlan, formatExecutionPlan } from '../dist/src/pipeline.js';
|
|
66
66
|
|
|
67
|
-
import { loadRepoCache } from '../src/repo.
|
|
68
|
-
import { loadSession, saveSession, formatSessionCard, importReplitSessions, getSessionMeta, saveSessionMeta, renameSession, pinSession, unpinSession, categorizeSession, enrichSessions, archiveSession, getArchivedSessions } from '../src/session.
|
|
67
|
+
import { loadRepoCache } from '../dist/src/repo.js';
|
|
68
|
+
import { loadSession, saveSession, formatSessionCard, importReplitSessions, getSessionMeta, saveSessionMeta, renameSession, pinSession, unpinSession, categorizeSession, enrichSessions, archiveSession, getArchivedSessions } from '../dist/src/session.js';
|
|
69
69
|
|
|
70
|
-
import { box, bar, badge, menu, separator, panel, divider, statusChip, headerBar, prompt as tuiPrompt, signalLine } from '../src/tui.
|
|
71
|
-
import { checkBudget } from '../src/governance.
|
|
70
|
+
import { box, bar, badge, menu, separator, panel, divider, statusChip, headerBar, prompt as tuiPrompt, signalLine } from '../dist/src/tui.js';
|
|
71
|
+
import { checkBudget } from '../dist/src/governance.js';
|
|
72
72
|
|
|
73
73
|
// ─── Dynamic imports for receipts + failure memory ───────────────────────────
|
|
74
74
|
|
|
75
75
|
let _receipt = null;
|
|
76
76
|
async function getReceipt() {
|
|
77
77
|
if (!_receipt) {
|
|
78
|
-
try { _receipt = await import('../src/receipt.
|
|
78
|
+
try { _receipt = await import('../dist/src/receipt.js'); } catch { _receipt = {}; }
|
|
79
79
|
}
|
|
80
80
|
return _receipt;
|
|
81
81
|
}
|
|
@@ -83,7 +83,7 @@ async function getReceipt() {
|
|
|
83
83
|
let _failureMem = null;
|
|
84
84
|
async function getFailureMem() {
|
|
85
85
|
if (!_failureMem) {
|
|
86
|
-
try { _failureMem = await import('../src/failure-memory.
|
|
86
|
+
try { _failureMem = await import('../dist/src/failure-memory.js'); } catch { _failureMem = {}; }
|
|
87
87
|
}
|
|
88
88
|
return _failureMem;
|
|
89
89
|
}
|
|
@@ -91,7 +91,7 @@ async function getFailureMem() {
|
|
|
91
91
|
let _livingDocs = null;
|
|
92
92
|
async function getLivingDocs() {
|
|
93
93
|
if (!_livingDocs) {
|
|
94
|
-
try { _livingDocs = await import('../src/living-docs.
|
|
94
|
+
try { _livingDocs = await import('../dist/src/living-docs.js'); } catch { _livingDocs = {}; }
|
|
95
95
|
}
|
|
96
96
|
return _livingDocs;
|
|
97
97
|
}
|
|
@@ -100,7 +100,7 @@ let _cognitiveLoopCache = null;
|
|
|
100
100
|
async function _getCognitiveLoop() {
|
|
101
101
|
if (!_cognitiveLoopCache) {
|
|
102
102
|
try {
|
|
103
|
-
_cognitiveLoopCache = await import('../src/cognitive-loop.
|
|
103
|
+
_cognitiveLoopCache = await import('../dist/src/cognitive-loop.js');
|
|
104
104
|
} catch {
|
|
105
105
|
_cognitiveLoopCache = null;
|
|
106
106
|
}
|
|
@@ -112,7 +112,7 @@ let _fx = null;
|
|
|
112
112
|
async function getFx() {
|
|
113
113
|
if (_fx !== null) return _fx;
|
|
114
114
|
try {
|
|
115
|
-
_fx = await import('../src/fx.
|
|
115
|
+
_fx = await import('../dist/src/fx.js');
|
|
116
116
|
} catch {
|
|
117
117
|
// Fallback stubs when fx.mjs is not yet present
|
|
118
118
|
const _noop = () => {};
|
|
@@ -658,7 +658,7 @@ async function cmdGo(args, opts = {}) {
|
|
|
658
658
|
|
|
659
659
|
// ── Next steps suggestions (dual-brain consensus path) ──────────────────
|
|
660
660
|
try {
|
|
661
|
-
const { suggestNextSteps, formatNextSteps } = await import('../src/nextstep.
|
|
661
|
+
const { suggestNextSteps, formatNextSteps } = await import('../dist/src/nextstep.js');
|
|
662
662
|
const steps = await suggestNextSteps(
|
|
663
663
|
{ prompt, tier: plan?._decision?.tier ?? 'think', files, trigger: 'go' },
|
|
664
664
|
{ success: true, filesChanged: files, error: null, duration: null },
|
|
@@ -735,7 +735,7 @@ async function cmdGo(args, opts = {}) {
|
|
|
735
735
|
await offerAutoCommit(cwd);
|
|
736
736
|
// ── Next steps suggestions ──────────────────────────────────────────────
|
|
737
737
|
try {
|
|
738
|
-
const { suggestNextSteps, formatNextSteps } = await import('../src/nextstep.
|
|
738
|
+
const { suggestNextSteps, formatNextSteps } = await import('../dist/src/nextstep.js');
|
|
739
739
|
const steps = await suggestNextSteps(
|
|
740
740
|
{
|
|
741
741
|
prompt,
|
|
@@ -1061,7 +1061,7 @@ async function cmdStatus(args = []) {
|
|
|
1061
1061
|
|
|
1062
1062
|
// Replit section
|
|
1063
1063
|
try {
|
|
1064
|
-
const replit = await import('../src/replit.
|
|
1064
|
+
const replit = await import('../dist/src/replit.js');
|
|
1065
1065
|
const env = replit.detectReplitEnvironment(cwd);
|
|
1066
1066
|
if (env.isReplit) {
|
|
1067
1067
|
console.log('\nReplit:');
|
|
@@ -1097,7 +1097,7 @@ async function cmdStatus(args = []) {
|
|
|
1097
1097
|
|
|
1098
1098
|
// Show top recommendation if available
|
|
1099
1099
|
try {
|
|
1100
|
-
const { getTopRecommendation } = await import('../src/recommendations.
|
|
1100
|
+
const { getTopRecommendation } = await import('../dist/src/recommendations.js');
|
|
1101
1101
|
const rec = getTopRecommendation(process.cwd());
|
|
1102
1102
|
if (rec) {
|
|
1103
1103
|
console.log('');
|
|
@@ -1109,8 +1109,8 @@ async function cmdStatus(args = []) {
|
|
|
1109
1109
|
|
|
1110
1110
|
// Intelligence layer status
|
|
1111
1111
|
try {
|
|
1112
|
-
const { getRoutingStats } = await import('../src/routing-advisor.
|
|
1113
|
-
const { getThinkingStats } = await import('../src/think-engine.
|
|
1112
|
+
const { getRoutingStats } = await import('../dist/src/routing-advisor.js');
|
|
1113
|
+
const { getThinkingStats } = await import('../dist/src/think-engine.js');
|
|
1114
1114
|
const stats = getRoutingStats(cwd);
|
|
1115
1115
|
const thinkStats = getThinkingStats(cwd);
|
|
1116
1116
|
|
|
@@ -1167,7 +1167,7 @@ async function cmdInstall(cwd) {
|
|
|
1167
1167
|
if (result.status !== 0) { process.exit(result.status || 1); }
|
|
1168
1168
|
|
|
1169
1169
|
// Additionally merge enforcement hooks into .claude/settings.json
|
|
1170
|
-
const { installHooks } = await import('../src/install-hooks.
|
|
1170
|
+
const { installHooks } = await import('../dist/src/install-hooks.js');
|
|
1171
1171
|
const { installed, skipped } = installHooks(cwd);
|
|
1172
1172
|
|
|
1173
1173
|
if (installed.length > 0) {
|
|
@@ -1403,7 +1403,7 @@ async function cmdPR(args) {
|
|
|
1403
1403
|
// Lazy import — only loaded when 'pr' is invoked
|
|
1404
1404
|
let prAgent;
|
|
1405
1405
|
try {
|
|
1406
|
-
prAgent = await import('../src/pr-agent.
|
|
1406
|
+
prAgent = await import('../dist/src/pr-agent.js');
|
|
1407
1407
|
} catch (e) {
|
|
1408
1408
|
console.error('pr-agent module not available:', e.message);
|
|
1409
1409
|
process.exit(1);
|
|
@@ -1775,7 +1775,7 @@ async function welcomeScreen(rl, ask) {
|
|
|
1775
1775
|
saveProfile(existing, { cwd });
|
|
1776
1776
|
}
|
|
1777
1777
|
try {
|
|
1778
|
-
const { ensurePersistence } = await import('../src/session.
|
|
1778
|
+
const { ensurePersistence } = await import('../dist/src/session.js');
|
|
1779
1779
|
const persisted = ensurePersistence(cwd);
|
|
1780
1780
|
if (persisted.length > 0) {
|
|
1781
1781
|
persisted.forEach(msg => console.log(` ✅ ${msg}`));
|
|
@@ -2207,7 +2207,7 @@ let _headModuleCache = null;
|
|
|
2207
2207
|
async function _getHeadModule() {
|
|
2208
2208
|
if (!_headModuleCache) {
|
|
2209
2209
|
try {
|
|
2210
|
-
_headModuleCache = await import('../src/head.
|
|
2210
|
+
_headModuleCache = await import('../dist/src/head.js');
|
|
2211
2211
|
} catch {
|
|
2212
2212
|
_headModuleCache = null;
|
|
2213
2213
|
}
|
|
@@ -2398,7 +2398,7 @@ async function detectResumeState(cwd) {
|
|
|
2398
2398
|
|
|
2399
2399
|
// Check for recent receipt (< 24h)
|
|
2400
2400
|
try {
|
|
2401
|
-
const { getLatestReceipt } = await import('../src/receipt.
|
|
2401
|
+
const { getLatestReceipt } = await import('../dist/src/receipt.js');
|
|
2402
2402
|
const receipt = getLatestReceipt(cwd);
|
|
2403
2403
|
if (receipt) {
|
|
2404
2404
|
const ageMs = Date.now() - Date.parse(receipt.timestamp);
|
|
@@ -2423,7 +2423,7 @@ async function detectResumeState(cwd) {
|
|
|
2423
2423
|
|
|
2424
2424
|
// Check for open tasks in ledger
|
|
2425
2425
|
try {
|
|
2426
|
-
const { getOpenTasks } = await import('../src/ledger.
|
|
2426
|
+
const { getOpenTasks } = await import('../dist/src/ledger.js');
|
|
2427
2427
|
const open = getOpenTasks(cwd);
|
|
2428
2428
|
if (open.length > 0) {
|
|
2429
2429
|
result.type = 'resumable';
|
|
@@ -2498,13 +2498,13 @@ async function mainScreen(rl, ask) {
|
|
|
2498
2498
|
|
|
2499
2499
|
// Silent OAuth token auto-refresh (3s timeout — never block dashboard)
|
|
2500
2500
|
try {
|
|
2501
|
-
const { autoRefreshToken } = await import('../src/profile.
|
|
2501
|
+
const { autoRefreshToken } = await import('../dist/src/profile.js');
|
|
2502
2502
|
await Promise.race([autoRefreshToken(cwd), new Promise(r => setTimeout(r, 3000))]);
|
|
2503
2503
|
} catch {}
|
|
2504
2504
|
|
|
2505
2505
|
// Append-only session archive sync
|
|
2506
2506
|
try {
|
|
2507
|
-
const { syncSessionMirror } = await import('../src/session.
|
|
2507
|
+
const { syncSessionMirror } = await import('../dist/src/session.js');
|
|
2508
2508
|
syncSessionMirror(cwd);
|
|
2509
2509
|
} catch {}
|
|
2510
2510
|
|
|
@@ -2526,7 +2526,7 @@ async function mainScreen(rl, ask) {
|
|
|
2526
2526
|
|
|
2527
2527
|
// Build session index in background (powers search + smart resume)
|
|
2528
2528
|
try {
|
|
2529
|
-
const { buildSessionIndex } = await import('../src/session.
|
|
2529
|
+
const { buildSessionIndex } = await import('../dist/src/session.js');
|
|
2530
2530
|
buildSessionIndex(cwd);
|
|
2531
2531
|
} catch {}
|
|
2532
2532
|
|
|
@@ -2627,7 +2627,7 @@ async function mainScreen(rl, ask) {
|
|
|
2627
2627
|
// ── Environment awareness (powers Box 1 dots + Box 3) ────────────────────
|
|
2628
2628
|
let envReport = null;
|
|
2629
2629
|
try {
|
|
2630
|
-
const { scanEnvironment } = await import('../src/awareness.
|
|
2630
|
+
const { scanEnvironment } = await import('../dist/src/awareness.js');
|
|
2631
2631
|
envReport = scanEnvironment(cwd);
|
|
2632
2632
|
} catch { /* non-fatal */ }
|
|
2633
2633
|
|
|
@@ -2693,7 +2693,7 @@ async function mainScreen(rl, ask) {
|
|
|
2693
2693
|
// Line 1: observer data first; fall back to envReport-derived observations
|
|
2694
2694
|
let quickObservations = [];
|
|
2695
2695
|
try {
|
|
2696
|
-
const observerMod = await import('../src/observer.
|
|
2696
|
+
const observerMod = await import('../dist/src/observer.js');
|
|
2697
2697
|
const quickState = await observerMod.getQuickState(cwd);
|
|
2698
2698
|
if (quickState?.observations?.length > 0) {
|
|
2699
2699
|
const PRIO = { high: 0, medium: 1, low: 2 };
|
|
@@ -2750,7 +2750,7 @@ async function mainScreen(rl, ask) {
|
|
|
2750
2750
|
|
|
2751
2751
|
if (awarenessLine2 === '\x1b[2m📋 No roadmap yet\x1b[0m') {
|
|
2752
2752
|
try {
|
|
2753
|
-
const { getOpenTasks } = await import('../src/ledger.
|
|
2753
|
+
const { getOpenTasks } = await import('../dist/src/ledger.js');
|
|
2754
2754
|
const open = getOpenTasks(cwd);
|
|
2755
2755
|
if (open.length > 0) {
|
|
2756
2756
|
awarenessLine2 = '📋 Next: ' + open[0].intent.slice(0, 45);
|
|
@@ -2760,7 +2760,7 @@ async function mainScreen(rl, ask) {
|
|
|
2760
2760
|
|
|
2761
2761
|
// Line 3: model registry age warning
|
|
2762
2762
|
try {
|
|
2763
|
-
const { getRegistryAge } = await import('../src/models.
|
|
2763
|
+
const { getRegistryAge } = await import('../dist/src/models.js');
|
|
2764
2764
|
const age = getRegistryAge();
|
|
2765
2765
|
if (age > 30 && awarenessLine3 === '\x1b[32m✓\x1b[0m No risk flags') {
|
|
2766
2766
|
awarenessLine3 = `\x1b[33m⚠\x1b[0m Model registry ${age} days old`;
|
|
@@ -2770,7 +2770,7 @@ async function mainScreen(rl, ask) {
|
|
|
2770
2770
|
// Replit awareness rows (shown only when running in Replit, max 2-3 lines)
|
|
2771
2771
|
const replitAwarenessRows = [];
|
|
2772
2772
|
try {
|
|
2773
|
-
const replitMod = await import('../src/replit.
|
|
2773
|
+
const replitMod = await import('../dist/src/replit.js');
|
|
2774
2774
|
const replitEnv = replitMod.detectReplitEnvironment(cwd);
|
|
2775
2775
|
if (replitEnv.isReplit) {
|
|
2776
2776
|
const rtInfo = replitMod.inspectReplitTools(cwd);
|
|
@@ -2886,7 +2886,7 @@ async function mainScreen(rl, ask) {
|
|
|
2886
2886
|
} else if (isReturning) {
|
|
2887
2887
|
const openTasks = [];
|
|
2888
2888
|
try {
|
|
2889
|
-
const { getOpenTasks } = await import('../src/ledger.
|
|
2889
|
+
const { getOpenTasks } = await import('../dist/src/ledger.js');
|
|
2890
2890
|
const open = getOpenTasks(cwd);
|
|
2891
2891
|
if (open.length > 0) openTasks.push(`continue: ${open[0].intent.slice(0, 30)}`);
|
|
2892
2892
|
} catch {}
|
|
@@ -3243,7 +3243,7 @@ async function mainScreen(rl, ask) {
|
|
|
3243
3243
|
if (!q2) return { next: 'main' };
|
|
3244
3244
|
args.push(q2);
|
|
3245
3245
|
}
|
|
3246
|
-
const { searchSessions, buildSessionIndex } = await import('../src/session.
|
|
3246
|
+
const { searchSessions, buildSessionIndex } = await import('../dist/src/session.js');
|
|
3247
3247
|
try { buildSessionIndex(cwd); } catch {}
|
|
3248
3248
|
const results = searchSessions(args.join(' '), cwd);
|
|
3249
3249
|
if (results.length === 0) {
|
|
@@ -3418,7 +3418,7 @@ async function mainScreen(rl, ask) {
|
|
|
3418
3418
|
if (!isNaN(numChoice) && numChoice >= 1 && numChoice <= recentSessions.length) {
|
|
3419
3419
|
const sess = recentSessions[numChoice - 1];
|
|
3420
3420
|
try {
|
|
3421
|
-
const { getSessionContext } = await import('../src/session.
|
|
3421
|
+
const { getSessionContext } = await import('../dist/src/session.js');
|
|
3422
3422
|
const ctx = getSessionContext(sess.id, cwd);
|
|
3423
3423
|
if (ctx) {
|
|
3424
3424
|
if (ctx.lastPrompt) process.stdout.write(`\n Last working on: ${ctx.lastPrompt}\n`);
|
|
@@ -3440,7 +3440,7 @@ async function mainScreen(rl, ask) {
|
|
|
3440
3440
|
const query = (await ask(' Search: ')).trim();
|
|
3441
3441
|
if (!query) return { next: 'main' };
|
|
3442
3442
|
|
|
3443
|
-
const { searchSessions, buildSessionIndex } = await import('../src/session.
|
|
3443
|
+
const { searchSessions, buildSessionIndex } = await import('../dist/src/session.js');
|
|
3444
3444
|
try { buildSessionIndex(cwd); } catch {}
|
|
3445
3445
|
|
|
3446
3446
|
const results = searchSessions(query, cwd);
|
|
@@ -4253,7 +4253,7 @@ async function settingsScreen(rl, ask) {
|
|
|
4253
4253
|
// Intelligence settings (routing, think, strategies)
|
|
4254
4254
|
if (choice === 'i') {
|
|
4255
4255
|
try {
|
|
4256
|
-
const { runSettings } = await import('../src/settings-tui.
|
|
4256
|
+
const { runSettings } = await import('../dist/src/settings-tui.js');
|
|
4257
4257
|
await runSettings(cwd);
|
|
4258
4258
|
} catch (e) {
|
|
4259
4259
|
process.stdout.write(` Intelligence settings unavailable: ${e.message}\n`);
|
|
@@ -4265,7 +4265,7 @@ async function settingsScreen(rl, ask) {
|
|
|
4265
4265
|
// Revert recent changes
|
|
4266
4266
|
if (choice === 'u') {
|
|
4267
4267
|
try {
|
|
4268
|
-
const { runRevert } = await import('../src/revert.
|
|
4268
|
+
const { runRevert } = await import('../dist/src/revert.js');
|
|
4269
4269
|
await runRevert(cwd);
|
|
4270
4270
|
} catch (e) {
|
|
4271
4271
|
process.stdout.write(` Revert unavailable: ${e.message}\n`);
|
|
@@ -4299,7 +4299,7 @@ async function teamScreen(rl, ask) {
|
|
|
4299
4299
|
let sharedSessions = 0;
|
|
4300
4300
|
let teamDecisions = 0;
|
|
4301
4301
|
try {
|
|
4302
|
-
const _tmLd = await import('../src/living-docs.
|
|
4302
|
+
const _tmLd = await import('../dist/src/living-docs.js');
|
|
4303
4303
|
const _tmPs = _tmLd.getProjectState(cwd);
|
|
4304
4304
|
if (Array.isArray(_tmPs?.project?.team)) {
|
|
4305
4305
|
team = _tmPs.project.team;
|
|
@@ -4356,7 +4356,7 @@ async function teamScreen(rl, ask) {
|
|
|
4356
4356
|
const name = (await ask(' Member name: ')).trim();
|
|
4357
4357
|
if (name) {
|
|
4358
4358
|
try {
|
|
4359
|
-
const _tmLdAdd = await import('../src/living-docs.
|
|
4359
|
+
const _tmLdAdd = await import('../dist/src/living-docs.js');
|
|
4360
4360
|
const _tmCur = _tmLdAdd.getProjectState(cwd);
|
|
4361
4361
|
const _tmTeam = Array.isArray(_tmCur?.project?.team) ? [..._tmCur.project.team] : [];
|
|
4362
4362
|
_tmTeam.push({ name, role: 'member', addedAt: new Date().toISOString() });
|
|
@@ -6034,7 +6034,7 @@ async function runScreens(startScreen = 'dashboard') {
|
|
|
6034
6034
|
if (ctx.model === 'haiku') {
|
|
6035
6035
|
process.stdout.write('\n');
|
|
6036
6036
|
try {
|
|
6037
|
-
const { runPipeline: rp } = await import('../src/pipeline.
|
|
6037
|
+
const { runPipeline: rp } = await import('../dist/src/pipeline.js');
|
|
6038
6038
|
const { result } = await rp('go', prompt, { cwd: process.cwd(), dryRun, forceDepth: 'shallow' });
|
|
6039
6039
|
if (result?.output) process.stdout.write('\n' + String(result.output).trim() + '\n\n');
|
|
6040
6040
|
else process.stdout.write(' (no output)\n\n');
|
|
@@ -6535,7 +6535,7 @@ async function main() {
|
|
|
6535
6535
|
|
|
6536
6536
|
// Session start marker — feeds routing advisor with cross-session timing signals
|
|
6537
6537
|
try {
|
|
6538
|
-
const { markSessionStart } = await import('../src/routing-advisor.
|
|
6538
|
+
const { markSessionStart } = await import('../dist/src/routing-advisor.js');
|
|
6539
6539
|
markSessionStart(process.cwd());
|
|
6540
6540
|
} catch { /* non-blocking */ }
|
|
6541
6541
|
|
|
@@ -6600,7 +6600,7 @@ async function main() {
|
|
|
6600
6600
|
// init --reconfigure: run setup-flow reconfiguration
|
|
6601
6601
|
if (args.includes('--reconfigure')) {
|
|
6602
6602
|
try {
|
|
6603
|
-
const { runSetup } = await import('../src/setup-flow.
|
|
6603
|
+
const { runSetup } = await import('../dist/src/setup-flow.js');
|
|
6604
6604
|
await runSetup(process.cwd(), { reconfigure: true });
|
|
6605
6605
|
} catch (e) {
|
|
6606
6606
|
console.error('setup-flow.mjs not available — skipping reconfigure');
|
|
@@ -6638,7 +6638,7 @@ async function main() {
|
|
|
6638
6638
|
const cwd = process.cwd();
|
|
6639
6639
|
const dryRun = args.includes('--dry-run');
|
|
6640
6640
|
try {
|
|
6641
|
-
const replit = await import('../src/replit.
|
|
6641
|
+
const replit = await import('../dist/src/replit.js');
|
|
6642
6642
|
const report = await replit.initReplitIntegration({ dryRun, cwd });
|
|
6643
6643
|
console.log(replit.formatReplitReport(report));
|
|
6644
6644
|
} catch (e) {
|
|
@@ -6671,19 +6671,19 @@ async function main() {
|
|
|
6671
6671
|
}
|
|
6672
6672
|
|
|
6673
6673
|
if (cmd === 'setup') {
|
|
6674
|
-
const { runSetup } = await import('../src/setup-flow.
|
|
6674
|
+
const { runSetup } = await import('../dist/src/setup-flow.js');
|
|
6675
6675
|
await runSetup(process.cwd(), { reconfigure: args.includes('--reconfigure') });
|
|
6676
6676
|
return;
|
|
6677
6677
|
}
|
|
6678
6678
|
|
|
6679
6679
|
if (cmd === 'advice' || cmd === 'recommend') {
|
|
6680
|
-
const { generateRecommendations, formatRecommendations } = await import('../src/recommendations.
|
|
6680
|
+
const { generateRecommendations, formatRecommendations } = await import('../dist/src/recommendations.js');
|
|
6681
6681
|
const recs = generateRecommendations(process.cwd());
|
|
6682
6682
|
if (recs.length === 0) {
|
|
6683
6683
|
console.log('');
|
|
6684
6684
|
console.log(' \x1b[2m─── HEAD Analysis ───\x1b[0m');
|
|
6685
6685
|
console.log('');
|
|
6686
|
-
const { getRoutingStats } = await import('../src/routing-advisor.
|
|
6686
|
+
const { getRoutingStats } = await import('../dist/src/routing-advisor.js');
|
|
6687
6687
|
const stats = getRoutingStats(process.cwd());
|
|
6688
6688
|
if (stats.totalObservations < 20) {
|
|
6689
6689
|
console.log(` Need more data: ${stats.totalObservations}/20 observations before recommendations.`);
|
|
@@ -6699,8 +6699,8 @@ async function main() {
|
|
|
6699
6699
|
}
|
|
6700
6700
|
|
|
6701
6701
|
if (cmd === 'stats' || cmd === 'intelligence') {
|
|
6702
|
-
const { getRoutingStats } = await import('../src/routing-advisor.
|
|
6703
|
-
const { getThinkingStats } = await import('../src/think-engine.
|
|
6702
|
+
const { getRoutingStats } = await import('../dist/src/routing-advisor.js');
|
|
6703
|
+
const { getThinkingStats } = await import('../dist/src/think-engine.js');
|
|
6704
6704
|
const stats = getRoutingStats(process.cwd());
|
|
6705
6705
|
const thinkStats = getThinkingStats(process.cwd());
|
|
6706
6706
|
|
|
@@ -6730,13 +6730,13 @@ async function main() {
|
|
|
6730
6730
|
}
|
|
6731
6731
|
|
|
6732
6732
|
if (cmd === 'revert' || cmd === 'undo') {
|
|
6733
|
-
const { runRevert } = await import('../src/revert.
|
|
6733
|
+
const { runRevert } = await import('../dist/src/revert.js');
|
|
6734
6734
|
await runRevert(process.cwd());
|
|
6735
6735
|
return;
|
|
6736
6736
|
}
|
|
6737
6737
|
|
|
6738
6738
|
if (cmd === 'strategies') {
|
|
6739
|
-
const { listStrategies } = await import('../src/strategy.
|
|
6739
|
+
const { listStrategies } = await import('../dist/src/strategy.js');
|
|
6740
6740
|
const strats = listStrategies();
|
|
6741
6741
|
console.log('\n Available dispatch strategies:\n');
|
|
6742
6742
|
for (const s of strats) {
|
|
@@ -6787,7 +6787,7 @@ async function main() {
|
|
|
6787
6787
|
process.exit(1);
|
|
6788
6788
|
}
|
|
6789
6789
|
|
|
6790
|
-
const { searchSessions, buildSessionIndex } = await import('../src/session.
|
|
6790
|
+
const { searchSessions, buildSessionIndex } = await import('../dist/src/session.js');
|
|
6791
6791
|
const cwd = process.cwd();
|
|
6792
6792
|
try { buildSessionIndex(cwd); } catch {}
|
|
6793
6793
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* mcp-server/index.ts — TypeScript MCP server for dual-brain orchestration.
|
|
4
|
+
*
|
|
5
|
+
* Exposes dual-brain orchestration as tools via JSON-RPC 2.0 over stdio
|
|
6
|
+
* using the MCP protocol (Content-Length framing).
|
|
7
|
+
*
|
|
8
|
+
* Tools:
|
|
9
|
+
* dual_brain_status — Provider health, routing stats, active rooms
|
|
10
|
+
* dual_brain_dispatch — Route a prompt to best provider/model/tier
|
|
11
|
+
* dual_brain_history — Recent routing decisions and outcomes
|
|
12
|
+
* dual_brain_health — Per-provider health scores and cooldown status
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* node dist/mcp-server/index.js
|
|
16
|
+
*
|
|
17
|
+
* MCP client config:
|
|
18
|
+
* {
|
|
19
|
+
* "mcpServers": {
|
|
20
|
+
* "dual-brain": {
|
|
21
|
+
* "command": "node",
|
|
22
|
+
* "args": ["node_modules/dual-brain/mcp-server/index.mjs"]
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
*/
|
|
27
|
+
export {};
|