claude-brain 0.30.2 → 0.30.3
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/README.md +241 -191
- package/VERSION +1 -1
- package/assets/CLAUDE-unified.md +11 -11
- package/assets/CLAUDE.md +29 -29
- package/package.json +7 -3
- package/packs/backend/node.json +173 -173
- package/packs/core/javascript.json +176 -176
- package/packs/core/typescript.json +222 -222
- package/packs/frontend/react.json +254 -254
- package/packs/meta/testing.json +172 -172
- package/scripts/postinstall.mjs +531 -531
- package/src/automation/decision-detector.ts +452 -452
- package/src/automation/phase12-manager.ts +456 -456
- package/src/automation/proactive-recall.ts +373 -373
- package/src/automation/project-detector.ts +310 -310
- package/src/automation/repo-scanner.ts +210 -205
- package/src/cli/auto-setup.ts +75 -75
- package/src/cli/auto-start.ts +266 -266
- package/src/cli/bin.ts +264 -264
- package/src/cli/commands/autostart.ts +90 -90
- package/src/cli/commands/chroma.ts +578 -577
- package/src/cli/commands/export-training.ts +70 -70
- package/src/cli/commands/export.ts +130 -130
- package/src/cli/commands/git-hook.ts +183 -183
- package/src/cli/commands/hooks.ts +217 -217
- package/src/cli/commands/init.ts +123 -123
- package/src/cli/commands/install-mcp.ts +122 -111
- package/src/cli/commands/models.ts +979 -979
- package/src/cli/commands/pack.ts +200 -200
- package/src/cli/commands/refresh.ts +344 -339
- package/src/cli/commands/reindex.ts +120 -120
- package/src/cli/commands/serve.ts +466 -463
- package/src/cli/commands/start.ts +44 -44
- package/src/cli/commands/status.ts +220 -203
- package/src/cli/commands/uninstall-mcp.ts +45 -41
- package/src/cli/commands/update.ts +130 -124
- package/src/cli/migrate-chroma.ts +106 -106
- package/src/cli/ui/animations.ts +80 -80
- package/src/cli/ui/components.ts +82 -82
- package/src/cli/ui/index.ts +4 -4
- package/src/cli/ui/logo.ts +36 -36
- package/src/cli/ui/theme.ts +55 -55
- package/src/code-intelligence/indexer.ts +352 -352
- package/src/code-intelligence/linker.ts +178 -178
- package/src/code-intelligence/parser.ts +484 -484
- package/src/code-intelligence/query.ts +291 -291
- package/src/code-intelligence/schema.ts +83 -83
- package/src/code-intelligence/types.ts +95 -95
- package/src/config/defaults.ts +52 -52
- package/src/config/home.ts +56 -56
- package/src/config/index.ts +5 -5
- package/src/config/loader.ts +192 -192
- package/src/config/schema.ts +446 -415
- package/src/config/validator.ts +182 -182
- package/src/context/assembler.ts +407 -400
- package/src/context/index.ts +79 -79
- package/src/context/progress-tracker.ts +174 -174
- package/src/context/standards-manager.ts +287 -287
- package/src/context/validator.ts +58 -58
- package/src/diagnostics/index.ts +122 -121
- package/src/health/index.ts +233 -232
- package/src/hooks/brain-hook.ts +134 -131
- package/src/hooks/capture.ts +168 -168
- package/src/hooks/claude-code-mastery.md +112 -112
- package/src/hooks/context-hook.ts +260 -245
- package/src/hooks/deduplicator.ts +72 -72
- package/src/hooks/git-capture.ts +109 -109
- package/src/hooks/git-hook-installer.ts +211 -207
- package/src/hooks/index.ts +20 -20
- package/src/hooks/installer.ts +306 -288
- package/src/hooks/interceptor-hook.ts +204 -201
- package/src/hooks/passive-classifier.ts +397 -397
- package/src/hooks/queue.ts +160 -129
- package/src/hooks/session-tracker.ts +312 -312
- package/src/hooks/types.ts +52 -52
- package/src/index.ts +7 -7
- package/src/intelligence/cross-project/generalizer.ts +283 -283
- package/src/intelligence/cross-project/index.ts +7 -7
- package/src/intelligence/hf-downloader.ts +222 -222
- package/src/intelligence/hf-manifest.json +78 -78
- package/src/intelligence/index.ts +24 -24
- package/src/intelligence/inference-router.ts +762 -762
- package/src/intelligence/model-manager.ts +263 -245
- package/src/intelligence/optimization/index.ts +10 -10
- package/src/intelligence/optimization/precompute.ts +202 -202
- package/src/intelligence/optimization/semantic-cache.ts +213 -207
- package/src/intelligence/prediction/index.ts +7 -7
- package/src/intelligence/prediction/recommender.ts +276 -268
- package/src/intelligence/reasoning/chain-retrieval.ts +243 -247
- package/src/intelligence/reasoning/index.ts +7 -7
- package/src/intelligence/temporal/evolution.ts +193 -197
- package/src/intelligence/temporal/index.ts +16 -16
- package/src/intelligence/temporal/query-processor.ts +190 -190
- package/src/intelligence/temporal/timeline.ts +272 -259
- package/src/intelligence/temporal/trends.ts +263 -263
- package/src/intelligence/tokenizer.ts +118 -118
- package/src/knowledge/entity-extractor.ts +447 -443
- package/src/knowledge/graph/builder.ts +185 -185
- package/src/knowledge/graph/linker.ts +201 -201
- package/src/knowledge/graph/memory-graph.ts +359 -359
- package/src/knowledge/graph/schema.ts +99 -99
- package/src/knowledge/graph/search.ts +166 -166
- package/src/knowledge/relationship-extractor.ts +108 -108
- package/src/memory/chroma/client.ts +211 -192
- package/src/memory/chroma/collection-manager.ts +92 -92
- package/src/memory/chroma/config.ts +57 -57
- package/src/memory/chroma/embeddings.ts +177 -175
- package/src/memory/chroma/index.ts +82 -82
- package/src/memory/chroma/migration.ts +270 -270
- package/src/memory/chroma/schemas.ts +69 -69
- package/src/memory/chroma/search.ts +319 -315
- package/src/memory/chroma/store.ts +755 -747
- package/src/memory/compression.ts +121 -121
- package/src/memory/consolidation/archiver.ts +162 -165
- package/src/memory/consolidation/merger.ts +182 -186
- package/src/memory/consolidation/scorer.ts +136 -136
- package/src/memory/database.ts +9 -0
- package/src/memory/dual-write.ts +145 -0
- package/src/memory/embeddings.ts +226 -226
- package/src/memory/episodic/detector.ts +108 -108
- package/src/memory/episodic/manager.ts +347 -351
- package/src/memory/episodic/summarizer.ts +179 -179
- package/src/memory/episodic/types.ts +52 -52
- package/src/memory/fts5-search.ts +692 -633
- package/src/memory/index.ts +943 -1060
- package/src/memory/migrations/add-fts5.ts +118 -108
- package/src/memory/patterns.ts +438 -438
- package/src/memory/pruning.ts +60 -60
- package/src/memory/schema.ts +88 -88
- package/src/memory/store.ts +911 -787
- package/src/orchestrator/handlers/decision-handler.ts +204 -204
- package/src/packs/index.ts +9 -9
- package/src/packs/loader.ts +134 -134
- package/src/packs/manager.ts +204 -204
- package/src/packs/ranker.ts +78 -78
- package/src/packs/types.ts +81 -81
- package/src/phase12/index.ts +5 -5
- package/src/retrieval/bm25/index.ts +300 -297
- package/src/retrieval/bm25/tokenizer.ts +184 -184
- package/src/retrieval/feedback/adaptive.ts +221 -221
- package/src/retrieval/feedback/index.ts +16 -16
- package/src/retrieval/feedback/metrics.ts +221 -221
- package/src/retrieval/feedback/store.ts +283 -283
- package/src/retrieval/fusion/index.ts +194 -194
- package/src/retrieval/fusion/rrf.ts +165 -165
- package/src/retrieval/index.ts +12 -12
- package/src/retrieval/pipeline.ts +375 -375
- package/src/retrieval/query/expander.ts +203 -203
- package/src/retrieval/query/index.ts +27 -27
- package/src/retrieval/query/intent-classifier.ts +252 -252
- package/src/retrieval/query/temporal-parser.ts +295 -295
- package/src/retrieval/reranker/index.ts +189 -188
- package/src/retrieval/reranker/model.ts +99 -95
- package/src/retrieval/service.ts +125 -125
- package/src/retrieval/types.ts +162 -162
- package/src/routing/entity-extractor.ts +454 -454
- package/src/routing/handlers/exploration-handler.ts +369 -0
- package/src/routing/handlers/index.ts +19 -0
- package/src/routing/handlers/memory-handler.ts +273 -0
- package/src/routing/handlers/mutation-handler.ts +241 -0
- package/src/routing/handlers/recall-handler.ts +642 -0
- package/src/routing/handlers/shared.ts +515 -0
- package/src/routing/handlers/types.ts +48 -0
- package/src/routing/intent-classifier.ts +552 -552
- package/src/routing/response-filter.ts +399 -391
- package/src/routing/router.ts +245 -2193
- package/src/routing/search-engine.ts +521 -514
- package/src/routing/types.ts +104 -94
- package/src/scripts/health-check.ts +118 -118
- package/src/scripts/setup.ts +122 -122
- package/src/server/auto-updater.ts +283 -276
- package/src/server/handlers/call-tool.ts +159 -159
- package/src/server/handlers/list-tools.ts +35 -35
- package/src/server/handlers/tools/auto-remember.ts +165 -165
- package/src/server/handlers/tools/brain.ts +86 -86
- package/src/server/handlers/tools/create-project.ts +135 -135
- package/src/server/handlers/tools/get-code-standards.ts +123 -123
- package/src/server/handlers/tools/get-corrections.ts +152 -152
- package/src/server/handlers/tools/get-patterns.ts +156 -156
- package/src/server/handlers/tools/get-project-context.ts +75 -75
- package/src/server/handlers/tools/index.ts +30 -30
- package/src/server/handlers/tools/init-project.ts +756 -756
- package/src/server/handlers/tools/list-projects.ts +126 -126
- package/src/server/handlers/tools/recall-similar.ts +87 -87
- package/src/server/handlers/tools/recognize-pattern.ts +132 -132
- package/src/server/handlers/tools/record-correction.ts +131 -131
- package/src/server/handlers/tools/remember-decision.ts +168 -168
- package/src/server/handlers/tools/schemas.ts +179 -179
- package/src/server/handlers/tools/search-code.ts +122 -122
- package/src/server/handlers/tools/smart-context.ts +146 -146
- package/src/server/handlers/tools/update-progress.ts +131 -131
- package/src/server/http-api.ts +215 -1229
- package/src/server/mcp-proxy.ts +85 -84
- package/src/server/mcp-server.ts +285 -284
- package/src/server/middleware/auth.ts +39 -0
- package/src/server/middleware/error-handler.ts +37 -0
- package/src/server/middleware/rate-limit.ts +53 -0
- package/src/server/middleware/validate.ts +42 -0
- package/src/server/pid-manager.ts +137 -136
- package/src/server/providers/resources.ts +581 -581
- package/src/server/routes/code.ts +228 -0
- package/src/server/routes/context.ts +26 -0
- package/src/server/routes/health.ts +19 -0
- package/src/server/routes/helpers.ts +100 -0
- package/src/server/routes/hooks.ts +197 -0
- package/src/server/routes/mcp.ts +47 -0
- package/src/server/routes/memory.ts +397 -0
- package/src/server/routes/models.ts +96 -0
- package/src/server/routes/projects.ts +89 -0
- package/src/server/routes/types.ts +21 -0
- package/src/server/schemas/api-schemas.ts +202 -0
- package/src/server/services.ts +720 -720
- package/src/server/utils/memory-indicator.ts +84 -84
- package/src/server/utils/response-formatter.ts +129 -129
- package/src/server/web-viewer.ts +1145 -1115
- package/src/setup/index.ts +38 -38
- package/src/tools/registry.ts +115 -115
- package/src/tools/schemas.ts +666 -666
- package/src/tools/types.ts +412 -412
- package/src/training/data-store.ts +320 -298
- package/src/training/retrain-pipeline.ts +399 -394
- package/src/utils/error-handler.ts +136 -136
- package/src/utils/index.ts +58 -58
- package/src/utils/kill-port.ts +55 -53
- package/src/utils/phase12-helper.ts +56 -56
- package/src/utils/safe-path.ts +43 -0
- package/src/utils/timing.ts +47 -47
- package/src/utils/transaction.ts +63 -63
- package/src/vault/index.ts +4 -3
- package/src/vault/paths.ts +106 -106
- package/src/vault/query.ts +4 -1
- package/src/vault/reader.ts +44 -1
- package/src/vault/watcher.ts +24 -1
- package/src/vault/writer.ts +487 -413
- package/skills/persistent-memory/SKILL.md +0 -148
- package/skills/persistent-memory/references/tool-reference.md +0 -90
package/src/cli/bin.ts
CHANGED
|
@@ -1,264 +1,264 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { readFileSync } from 'node:fs'
|
|
4
|
-
import { resolve, dirname } from 'node:path'
|
|
5
|
-
import { fileURLToPath } from 'node:url'
|
|
6
|
-
import { parseArgs } from 'citty'
|
|
7
|
-
import { renderLogo, theme, dimText, box, errorText } from '@/cli/ui/index.js'
|
|
8
|
-
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url)
|
|
10
|
-
const __dirname = dirname(__filename)
|
|
11
|
-
const PACKAGE_ROOT = resolve(__dirname, '..', '..')
|
|
12
|
-
|
|
13
|
-
function getVersion(): string {
|
|
14
|
-
try {
|
|
15
|
-
const pkg = JSON.parse(readFileSync(resolve(PACKAGE_ROOT, 'package.json'), 'utf-8'))
|
|
16
|
-
return pkg.version || 'unknown'
|
|
17
|
-
} catch {
|
|
18
|
-
return 'unknown'
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function printHelp() {
|
|
23
|
-
const version = getVersion()
|
|
24
|
-
|
|
25
|
-
console.log()
|
|
26
|
-
console.log(renderLogo())
|
|
27
|
-
console.log()
|
|
28
|
-
|
|
29
|
-
const commands = [
|
|
30
|
-
['start', 'Start ChromaDB + MCP server'],
|
|
31
|
-
['serve', 'Start the MCP server (default)'],
|
|
32
|
-
['setup', 'Ensure home directory and config exist'],
|
|
33
|
-
['install', 'Register as MCP server in Claude Code'],
|
|
34
|
-
['uninstall', 'Remove MCP server from Claude Code'],
|
|
35
|
-
['update', 'Update package and refresh CLAUDE.md'],
|
|
36
|
-
['refresh', 'Kill all, update to latest, and setup everything'],
|
|
37
|
-
['autostart', 'Manage auto-start on terminal open (install/uninstall/status)'],
|
|
38
|
-
['chroma', 'Manage ChromaDB server (start/stop/status)'],
|
|
39
|
-
['hooks', 'Manage passive learning hooks (install/uninstall/status)'],
|
|
40
|
-
['git-hook', 'Manage git post-commit hook (install/uninstall/status)'],
|
|
41
|
-
['init', 'Scan a repo and store initial project context'],
|
|
42
|
-
['capture', 'Capture a hook event (used by Claude Code hooks)'],
|
|
43
|
-
['pack', 'Manage knowledge packs (list/status/reload)'],
|
|
44
|
-
['status', 'Show system overview'],
|
|
45
|
-
['reindex', 'Rebuild code intelligence index'],
|
|
46
|
-
['export', 'Export observations (--project, --format md|json)'],
|
|
47
|
-
['export-training', 'Export SLM training data (intent|entity|query|knowledge|compress|pattern)'],
|
|
48
|
-
['models', 'Manage SLM models (list/download/enable/disable/benchmark/stats)'],
|
|
49
|
-
['health', 'Run health checks'],
|
|
50
|
-
['diagnose', 'Run diagnostics'],
|
|
51
|
-
['version', 'Show version'],
|
|
52
|
-
['help', 'Show this help message'],
|
|
53
|
-
]
|
|
54
|
-
|
|
55
|
-
const cmdLines = commands
|
|
56
|
-
.map(([cmd, desc]) => ` ${theme.primary(cmd!.padEnd(12))} ${dimText(desc!)}`)
|
|
57
|
-
.join('\n')
|
|
58
|
-
|
|
59
|
-
const content = [
|
|
60
|
-
`${dimText('v' + version)} ${dimText('Local Development Assistant with Memory')}`,
|
|
61
|
-
'',
|
|
62
|
-
`${theme.bold('Usage:')} ${dimText('claude-brain [command]')}`,
|
|
63
|
-
'',
|
|
64
|
-
theme.bold('Commands:'),
|
|
65
|
-
cmdLines,
|
|
66
|
-
'',
|
|
67
|
-
theme.bold('Options:'),
|
|
68
|
-
` ${theme.primary('-v'.padEnd(12))} ${dimText('Show version')}`,
|
|
69
|
-
` ${theme.primary('-h'.padEnd(12))} ${dimText('Show help')}`,
|
|
70
|
-
'',
|
|
71
|
-
theme.bold('Examples:'),
|
|
72
|
-
` ${dimText('claude-brain start')} ${dimText('Start ChromaDB + MCP server')}`,
|
|
73
|
-
` ${dimText('claude-brain start --chroma-only')} ${dimText('Start only ChromaDB')}`,
|
|
74
|
-
` ${dimText('claude-brain setup')} ${dimText('Initialize data directory')}`,
|
|
75
|
-
` ${dimText('claude-brain install')} ${dimText('Register with Claude Code')}`,
|
|
76
|
-
` ${dimText('claude-brain health')} ${dimText('Check system health')}`,
|
|
77
|
-
'',
|
|
78
|
-
theme.bold('Environment:'),
|
|
79
|
-
` ${theme.primary('CLAUDE_BRAIN_HOME')} ${dimText('Override home directory (default: ~/.claude-brain/')}`,
|
|
80
|
-
].join('\n')
|
|
81
|
-
|
|
82
|
-
console.log(content)
|
|
83
|
-
console.log()
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
async function main() {
|
|
87
|
-
const args = parseArgs(process.argv.slice(2), {
|
|
88
|
-
command: { type: 'positional', required: false, description: 'Command to run' },
|
|
89
|
-
version: { type: 'boolean', alias: ['v'], description: 'Show version' },
|
|
90
|
-
help: { type: 'boolean', alias: ['h'], description: 'Show help' },
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
if (args.version) {
|
|
94
|
-
console.log(getVersion())
|
|
95
|
-
return
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (args.help) {
|
|
99
|
-
printHelp()
|
|
100
|
-
return
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const command: string = args.command ?? 'serve'
|
|
104
|
-
|
|
105
|
-
switch (command) {
|
|
106
|
-
case 'start': {
|
|
107
|
-
const { runStart } = await import('./commands/start')
|
|
108
|
-
await runStart()
|
|
109
|
-
break
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
case 'serve': {
|
|
113
|
-
const { runServe } = await import('./commands/serve')
|
|
114
|
-
await runServe()
|
|
115
|
-
break
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
case 'setup': {
|
|
119
|
-
const { runSetup } = await import('@/setup')
|
|
120
|
-
await runSetup()
|
|
121
|
-
break
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
case 'install': {
|
|
125
|
-
const { runInstall } = await import('./commands/install-mcp')
|
|
126
|
-
await runInstall()
|
|
127
|
-
break
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
case 'uninstall': {
|
|
131
|
-
const { runUninstall } = await import('./commands/uninstall-mcp')
|
|
132
|
-
await runUninstall()
|
|
133
|
-
break
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
case 'update': {
|
|
137
|
-
const { runUpdate } = await import('./commands/update')
|
|
138
|
-
await runUpdate()
|
|
139
|
-
break
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
case 'refresh': {
|
|
143
|
-
const { runRefresh } = await import('./commands/refresh')
|
|
144
|
-
await runRefresh()
|
|
145
|
-
break
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
case 'autostart': {
|
|
149
|
-
const { runAutoStart } = await import('./commands/autostart')
|
|
150
|
-
await runAutoStart()
|
|
151
|
-
break
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
case 'chroma': {
|
|
155
|
-
const { runChroma } = await import('./commands/chroma')
|
|
156
|
-
await runChroma()
|
|
157
|
-
break
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
case 'hooks': {
|
|
161
|
-
const { runHooks } = await import('./commands/hooks')
|
|
162
|
-
await runHooks()
|
|
163
|
-
break
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
case 'init': {
|
|
167
|
-
const { runInit } = await import('./commands/init')
|
|
168
|
-
await runInit()
|
|
169
|
-
break
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
case 'capture': {
|
|
173
|
-
// Phase 20: Direct capture command for Claude Code hooks
|
|
174
|
-
// Usage: claude-brain capture --event=tool_use < /dev/stdin
|
|
175
|
-
// This is the lightweight path called by the hook script
|
|
176
|
-
const { main: runCapture } = await import('../hooks/brain-hook')
|
|
177
|
-
await runCapture()
|
|
178
|
-
break
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
case 'git-hook': {
|
|
182
|
-
const { runGitHook } = await import('./commands/git-hook')
|
|
183
|
-
await runGitHook()
|
|
184
|
-
break
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
case 'git-capture': {
|
|
188
|
-
const { handleGitCapture } = await import('../hooks/git-capture')
|
|
189
|
-
await handleGitCapture()
|
|
190
|
-
break
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
case 'pack': {
|
|
194
|
-
const { runPack } = await import('./commands/pack')
|
|
195
|
-
await runPack()
|
|
196
|
-
break
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
case 'status': {
|
|
200
|
-
const { runStatus } = await import('./commands/status')
|
|
201
|
-
await runStatus()
|
|
202
|
-
break
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
case 'reindex': {
|
|
206
|
-
const { runReindex } = await import('./commands/reindex')
|
|
207
|
-
await runReindex()
|
|
208
|
-
break
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
case 'export': {
|
|
212
|
-
const { runExport } = await import('./commands/export')
|
|
213
|
-
await runExport()
|
|
214
|
-
break
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
case 'export-training': {
|
|
218
|
-
const { runExportTraining } = await import('./commands/export-training')
|
|
219
|
-
await runExportTraining()
|
|
220
|
-
break
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
case 'models': {
|
|
224
|
-
const { runModels } = await import('./commands/models')
|
|
225
|
-
await runModels()
|
|
226
|
-
break
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
case 'health': {
|
|
230
|
-
const { runHealthCheck } = await import('@/health')
|
|
231
|
-
await runHealthCheck()
|
|
232
|
-
break
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
case 'diagnose': {
|
|
236
|
-
const { runDiagnostics } = await import('@/diagnostics')
|
|
237
|
-
await runDiagnostics()
|
|
238
|
-
break
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
case 'version': {
|
|
242
|
-
console.log(getVersion())
|
|
243
|
-
break
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
case 'help': {
|
|
247
|
-
printHelp()
|
|
248
|
-
break
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
default: {
|
|
252
|
-
console.log()
|
|
253
|
-
console.log(errorText(`Unknown command: ${command}`))
|
|
254
|
-
printHelp()
|
|
255
|
-
process.exit(1)
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
main().catch((error) => {
|
|
261
|
-
console.log()
|
|
262
|
-
console.log(box(errorText(`Fatal error: ${error instanceof Error ? error.message : String(error)}`), 'Error'))
|
|
263
|
-
process.exit(1)
|
|
264
|
-
})
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
import { readFileSync } from 'node:fs'
|
|
4
|
+
import { resolve, dirname } from 'node:path'
|
|
5
|
+
import { fileURLToPath } from 'node:url'
|
|
6
|
+
import { parseArgs } from 'citty'
|
|
7
|
+
import { renderLogo, theme, dimText, box, errorText } from '@/cli/ui/index.js'
|
|
8
|
+
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
10
|
+
const __dirname = dirname(__filename)
|
|
11
|
+
const PACKAGE_ROOT = resolve(__dirname, '..', '..')
|
|
12
|
+
|
|
13
|
+
function getVersion(): string {
|
|
14
|
+
try {
|
|
15
|
+
const pkg = JSON.parse(readFileSync(resolve(PACKAGE_ROOT, 'package.json'), 'utf-8'))
|
|
16
|
+
return pkg.version || 'unknown'
|
|
17
|
+
} catch {
|
|
18
|
+
return 'unknown'
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function printHelp() {
|
|
23
|
+
const version = getVersion()
|
|
24
|
+
|
|
25
|
+
console.log()
|
|
26
|
+
console.log(renderLogo())
|
|
27
|
+
console.log()
|
|
28
|
+
|
|
29
|
+
const commands = [
|
|
30
|
+
['start', 'Start ChromaDB + MCP server'],
|
|
31
|
+
['serve', 'Start the MCP server (default)'],
|
|
32
|
+
['setup', 'Ensure home directory and config exist'],
|
|
33
|
+
['install', 'Register as MCP server in Claude Code'],
|
|
34
|
+
['uninstall', 'Remove MCP server from Claude Code'],
|
|
35
|
+
['update', 'Update package and refresh CLAUDE.md'],
|
|
36
|
+
['refresh', 'Kill all, update to latest, and setup everything'],
|
|
37
|
+
['autostart', 'Manage auto-start on terminal open (install/uninstall/status)'],
|
|
38
|
+
['chroma', 'Manage ChromaDB server (start/stop/status)'],
|
|
39
|
+
['hooks', 'Manage passive learning hooks (install/uninstall/status)'],
|
|
40
|
+
['git-hook', 'Manage git post-commit hook (install/uninstall/status)'],
|
|
41
|
+
['init', 'Scan a repo and store initial project context'],
|
|
42
|
+
['capture', 'Capture a hook event (used by Claude Code hooks)'],
|
|
43
|
+
['pack', 'Manage knowledge packs (list/status/reload)'],
|
|
44
|
+
['status', 'Show system overview'],
|
|
45
|
+
['reindex', 'Rebuild code intelligence index'],
|
|
46
|
+
['export', 'Export observations (--project, --format md|json)'],
|
|
47
|
+
['export-training', 'Export SLM training data (intent|entity|query|knowledge|compress|pattern)'],
|
|
48
|
+
['models', 'Manage SLM models (list/download/enable/disable/benchmark/stats)'],
|
|
49
|
+
['health', 'Run health checks'],
|
|
50
|
+
['diagnose', 'Run diagnostics'],
|
|
51
|
+
['version', 'Show version'],
|
|
52
|
+
['help', 'Show this help message'],
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
const cmdLines = commands
|
|
56
|
+
.map(([cmd, desc]) => ` ${theme.primary(cmd!.padEnd(12))} ${dimText(desc!)}`)
|
|
57
|
+
.join('\n')
|
|
58
|
+
|
|
59
|
+
const content = [
|
|
60
|
+
`${dimText('v' + version)} ${dimText('Local Development Assistant with Memory')}`,
|
|
61
|
+
'',
|
|
62
|
+
`${theme.bold('Usage:')} ${dimText('claude-brain [command]')}`,
|
|
63
|
+
'',
|
|
64
|
+
theme.bold('Commands:'),
|
|
65
|
+
cmdLines,
|
|
66
|
+
'',
|
|
67
|
+
theme.bold('Options:'),
|
|
68
|
+
` ${theme.primary('-v'.padEnd(12))} ${dimText('Show version')}`,
|
|
69
|
+
` ${theme.primary('-h'.padEnd(12))} ${dimText('Show help')}`,
|
|
70
|
+
'',
|
|
71
|
+
theme.bold('Examples:'),
|
|
72
|
+
` ${dimText('claude-brain start')} ${dimText('Start ChromaDB + MCP server')}`,
|
|
73
|
+
` ${dimText('claude-brain start --chroma-only')} ${dimText('Start only ChromaDB')}`,
|
|
74
|
+
` ${dimText('claude-brain setup')} ${dimText('Initialize data directory')}`,
|
|
75
|
+
` ${dimText('claude-brain install')} ${dimText('Register with Claude Code')}`,
|
|
76
|
+
` ${dimText('claude-brain health')} ${dimText('Check system health')}`,
|
|
77
|
+
'',
|
|
78
|
+
theme.bold('Environment:'),
|
|
79
|
+
` ${theme.primary('CLAUDE_BRAIN_HOME')} ${dimText('Override home directory (default: ~/.claude-brain/')}`,
|
|
80
|
+
].join('\n')
|
|
81
|
+
|
|
82
|
+
console.log(content)
|
|
83
|
+
console.log()
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function main() {
|
|
87
|
+
const args = parseArgs(process.argv.slice(2), {
|
|
88
|
+
command: { type: 'positional', required: false, description: 'Command to run' },
|
|
89
|
+
version: { type: 'boolean', alias: ['v'], description: 'Show version' },
|
|
90
|
+
help: { type: 'boolean', alias: ['h'], description: 'Show help' },
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
if (args.version) {
|
|
94
|
+
console.log(getVersion())
|
|
95
|
+
return
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (args.help) {
|
|
99
|
+
printHelp()
|
|
100
|
+
return
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const command: string = args.command ?? 'serve'
|
|
104
|
+
|
|
105
|
+
switch (command) {
|
|
106
|
+
case 'start': {
|
|
107
|
+
const { runStart } = await import('./commands/start')
|
|
108
|
+
await runStart()
|
|
109
|
+
break
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
case 'serve': {
|
|
113
|
+
const { runServe } = await import('./commands/serve')
|
|
114
|
+
await runServe()
|
|
115
|
+
break
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
case 'setup': {
|
|
119
|
+
const { runSetup } = await import('@/setup')
|
|
120
|
+
await runSetup()
|
|
121
|
+
break
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
case 'install': {
|
|
125
|
+
const { runInstall } = await import('./commands/install-mcp')
|
|
126
|
+
await runInstall()
|
|
127
|
+
break
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
case 'uninstall': {
|
|
131
|
+
const { runUninstall } = await import('./commands/uninstall-mcp')
|
|
132
|
+
await runUninstall()
|
|
133
|
+
break
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
case 'update': {
|
|
137
|
+
const { runUpdate } = await import('./commands/update')
|
|
138
|
+
await runUpdate()
|
|
139
|
+
break
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
case 'refresh': {
|
|
143
|
+
const { runRefresh } = await import('./commands/refresh')
|
|
144
|
+
await runRefresh()
|
|
145
|
+
break
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
case 'autostart': {
|
|
149
|
+
const { runAutoStart } = await import('./commands/autostart')
|
|
150
|
+
await runAutoStart()
|
|
151
|
+
break
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
case 'chroma': {
|
|
155
|
+
const { runChroma } = await import('./commands/chroma')
|
|
156
|
+
await runChroma()
|
|
157
|
+
break
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
case 'hooks': {
|
|
161
|
+
const { runHooks } = await import('./commands/hooks')
|
|
162
|
+
await runHooks()
|
|
163
|
+
break
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
case 'init': {
|
|
167
|
+
const { runInit } = await import('./commands/init')
|
|
168
|
+
await runInit()
|
|
169
|
+
break
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
case 'capture': {
|
|
173
|
+
// Phase 20: Direct capture command for Claude Code hooks
|
|
174
|
+
// Usage: claude-brain capture --event=tool_use < /dev/stdin
|
|
175
|
+
// This is the lightweight path called by the hook script
|
|
176
|
+
const { main: runCapture } = await import('../hooks/brain-hook')
|
|
177
|
+
await runCapture()
|
|
178
|
+
break
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
case 'git-hook': {
|
|
182
|
+
const { runGitHook } = await import('./commands/git-hook')
|
|
183
|
+
await runGitHook()
|
|
184
|
+
break
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
case 'git-capture': {
|
|
188
|
+
const { handleGitCapture } = await import('../hooks/git-capture')
|
|
189
|
+
await handleGitCapture()
|
|
190
|
+
break
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
case 'pack': {
|
|
194
|
+
const { runPack } = await import('./commands/pack')
|
|
195
|
+
await runPack()
|
|
196
|
+
break
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
case 'status': {
|
|
200
|
+
const { runStatus } = await import('./commands/status')
|
|
201
|
+
await runStatus()
|
|
202
|
+
break
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
case 'reindex': {
|
|
206
|
+
const { runReindex } = await import('./commands/reindex')
|
|
207
|
+
await runReindex()
|
|
208
|
+
break
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
case 'export': {
|
|
212
|
+
const { runExport } = await import('./commands/export')
|
|
213
|
+
await runExport()
|
|
214
|
+
break
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
case 'export-training': {
|
|
218
|
+
const { runExportTraining } = await import('./commands/export-training')
|
|
219
|
+
await runExportTraining()
|
|
220
|
+
break
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
case 'models': {
|
|
224
|
+
const { runModels } = await import('./commands/models')
|
|
225
|
+
await runModels()
|
|
226
|
+
break
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
case 'health': {
|
|
230
|
+
const { runHealthCheck } = await import('@/health')
|
|
231
|
+
await runHealthCheck()
|
|
232
|
+
break
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
case 'diagnose': {
|
|
236
|
+
const { runDiagnostics } = await import('@/diagnostics')
|
|
237
|
+
await runDiagnostics()
|
|
238
|
+
break
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
case 'version': {
|
|
242
|
+
console.log(getVersion())
|
|
243
|
+
break
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
case 'help': {
|
|
247
|
+
printHelp()
|
|
248
|
+
break
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
default: {
|
|
252
|
+
console.log()
|
|
253
|
+
console.log(errorText(`Unknown command: ${command}`))
|
|
254
|
+
printHelp()
|
|
255
|
+
process.exit(1)
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
main().catch((error) => {
|
|
261
|
+
console.log()
|
|
262
|
+
console.log(box(errorText(`Fatal error: ${error instanceof Error ? error.message : String(error)}`), 'Error'))
|
|
263
|
+
process.exit(1)
|
|
264
|
+
})
|