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/commands/pack.ts
CHANGED
|
@@ -1,200 +1,200 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Phase 18: CLI Pack Command
|
|
3
|
-
* Manages knowledge packs (list/status/reload)
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { parseArgs } from 'citty'
|
|
7
|
-
import {
|
|
8
|
-
renderLogo, theme, heading, successText, warningText, errorText, dimText,
|
|
9
|
-
box, summaryPanel, withSpinner,
|
|
10
|
-
} from '@/cli/ui/index.js'
|
|
11
|
-
import { resolve, dirname, join } from 'node:path'
|
|
12
|
-
import { fileURLToPath } from 'node:url'
|
|
13
|
-
import { PackManager } from '@/packs/manager'
|
|
14
|
-
|
|
15
|
-
const __filename = fileURLToPath(import.meta.url)
|
|
16
|
-
const __dirname = dirname(__filename)
|
|
17
|
-
const PACKAGE_ROOT = resolve(__dirname, '..', '..', '..')
|
|
18
|
-
|
|
19
|
-
function getDataDir(): string {
|
|
20
|
-
return join(
|
|
21
|
-
process.env.CLAUDE_BRAIN_HOME || join(process.env.HOME || '~', '.claude-brain'),
|
|
22
|
-
'data'
|
|
23
|
-
)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function getDefaultConfig() {
|
|
27
|
-
return {
|
|
28
|
-
enabled: true,
|
|
29
|
-
packsDir: 'packs',
|
|
30
|
-
alwaysLoadCore: true,
|
|
31
|
-
alwaysLoadMeta: true,
|
|
32
|
-
communityConfidenceMultiplier: 0.8,
|
|
33
|
-
personalBoost: 1.2,
|
|
34
|
-
projectBoost: 1.15
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function createPackManager(): PackManager {
|
|
39
|
-
// Lightweight logger for CLI
|
|
40
|
-
const logger = {
|
|
41
|
-
child: () => logger,
|
|
42
|
-
debug: () => {},
|
|
43
|
-
info: () => {},
|
|
44
|
-
warn: () => {},
|
|
45
|
-
error: () => {},
|
|
46
|
-
} as any
|
|
47
|
-
|
|
48
|
-
return new PackManager(logger, getDefaultConfig(), PACKAGE_ROOT, getDataDir())
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export async function runPack() {
|
|
52
|
-
const args = parseArgs(process.argv.slice(3), {
|
|
53
|
-
subcommand: { type: 'positional', required: false, description: 'list|status|reload' },
|
|
54
|
-
project: { type: 'positional', required: false, description: 'Project name' },
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
const subcommand: string = args.subcommand ?? 'list'
|
|
58
|
-
|
|
59
|
-
switch (subcommand) {
|
|
60
|
-
case 'list':
|
|
61
|
-
await handleList()
|
|
62
|
-
break
|
|
63
|
-
case 'status':
|
|
64
|
-
await handleStatus(args.project)
|
|
65
|
-
break
|
|
66
|
-
case 'reload':
|
|
67
|
-
await handleReload(args.project)
|
|
68
|
-
break
|
|
69
|
-
default:
|
|
70
|
-
console.log()
|
|
71
|
-
console.log(errorText(`Unknown pack subcommand: ${subcommand}`))
|
|
72
|
-
printPackHelp()
|
|
73
|
-
process.exit(1)
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
async function handleList() {
|
|
78
|
-
console.log()
|
|
79
|
-
console.log(renderLogo())
|
|
80
|
-
console.log()
|
|
81
|
-
console.log(heading('Available Knowledge Packs'))
|
|
82
|
-
console.log()
|
|
83
|
-
|
|
84
|
-
const manager = createPackManager()
|
|
85
|
-
|
|
86
|
-
let packs: Array<{ id: string; name: string; description: string; entries: number; version: string }> = []
|
|
87
|
-
await withSpinner('Scanning packs directory', async () => {
|
|
88
|
-
packs = await manager.listAvailablePacks()
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
if (packs.length === 0) {
|
|
92
|
-
console.log(warningText(' No packs found in packs/ directory'))
|
|
93
|
-
console.log()
|
|
94
|
-
return
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
console.log()
|
|
98
|
-
for (const pack of packs) {
|
|
99
|
-
console.log(` ${theme.primary(pack.id.padEnd(24))} ${theme.bold(pack.name)}`)
|
|
100
|
-
console.log(` ${''.padEnd(24)} ${dimText(pack.description)}`)
|
|
101
|
-
console.log(` ${''.padEnd(24)} ${dimText(`v${pack.version} - ${pack.entries} entries`)}`)
|
|
102
|
-
console.log()
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const totalEntries = packs.reduce((sum, p) => sum + p.entries, 0)
|
|
106
|
-
console.log(dimText(` Total: ${packs.length} packs, ${totalEntries} entries`))
|
|
107
|
-
console.log()
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
async function handleStatus(project?: string) {
|
|
111
|
-
console.log()
|
|
112
|
-
console.log(renderLogo())
|
|
113
|
-
console.log()
|
|
114
|
-
console.log(heading('Pack Status'))
|
|
115
|
-
console.log()
|
|
116
|
-
|
|
117
|
-
if (!project) {
|
|
118
|
-
console.log(warningText(' Usage: claude-brain pack status <project-name>'))
|
|
119
|
-
console.log(dimText(' Example: claude-brain pack status my-app'))
|
|
120
|
-
console.log()
|
|
121
|
-
return
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const manager = createPackManager()
|
|
125
|
-
const manifest = await manager.getManifest(project)
|
|
126
|
-
|
|
127
|
-
if (manifest.packs.length === 0) {
|
|
128
|
-
console.log(dimText(` No packs loaded for project "${project}"`))
|
|
129
|
-
console.log(dimText(' Packs are loaded automatically when you run init_project'))
|
|
130
|
-
console.log()
|
|
131
|
-
return
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
const items = manifest.packs.map(p => ({
|
|
135
|
-
label: p.packId,
|
|
136
|
-
value: `v${p.version} (${p.entriesLoaded} entries, ${new Date(p.loadedAt).toLocaleDateString()})`,
|
|
137
|
-
status: 'success' as const
|
|
138
|
-
}))
|
|
139
|
-
|
|
140
|
-
console.log(summaryPanel(`Packs for ${project}`, items))
|
|
141
|
-
console.log()
|
|
142
|
-
console.log(dimText(` Last updated: ${manifest.lastUpdated}`))
|
|
143
|
-
console.log()
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
async function handleReload(project?: string) {
|
|
147
|
-
console.log()
|
|
148
|
-
console.log(renderLogo())
|
|
149
|
-
console.log()
|
|
150
|
-
console.log(heading('Reload Knowledge Packs'))
|
|
151
|
-
console.log()
|
|
152
|
-
|
|
153
|
-
if (!project) {
|
|
154
|
-
console.log(warningText(' Usage: claude-brain pack reload <project-name>'))
|
|
155
|
-
console.log(dimText(' This clears the manifest so packs are re-loaded on next init_project'))
|
|
156
|
-
console.log()
|
|
157
|
-
return
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
const manager = createPackManager()
|
|
161
|
-
|
|
162
|
-
await withSpinner(`Clearing manifest for "${project}"`, async () => {
|
|
163
|
-
await manager.deleteManifest(project)
|
|
164
|
-
})
|
|
165
|
-
|
|
166
|
-
console.log()
|
|
167
|
-
console.log(box([
|
|
168
|
-
successText(`Manifest cleared for "${project}"`),
|
|
169
|
-
'',
|
|
170
|
-
dimText('Packs will be re-loaded on the next init_project call.'),
|
|
171
|
-
dimText('Or use the init_project MCP tool to reload now.'),
|
|
172
|
-
].join('\n'), 'Reload'))
|
|
173
|
-
console.log()
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
function printPackHelp() {
|
|
177
|
-
console.log()
|
|
178
|
-
const commands = [
|
|
179
|
-
['list', 'Show all available knowledge packs'],
|
|
180
|
-
['status', 'Show loaded packs for a project'],
|
|
181
|
-
['reload', 'Clear manifest to force pack reload'],
|
|
182
|
-
]
|
|
183
|
-
|
|
184
|
-
const cmdLines = commands
|
|
185
|
-
.map(([cmd, desc]) => ` ${theme.primary(cmd!.padEnd(14))} ${dimText(desc!)}`)
|
|
186
|
-
.join('\n')
|
|
187
|
-
|
|
188
|
-
console.log(box([
|
|
189
|
-
theme.bold('Usage:') + ' ' + dimText('claude-brain pack [subcommand]'),
|
|
190
|
-
'',
|
|
191
|
-
theme.bold('Subcommands:'),
|
|
192
|
-
cmdLines,
|
|
193
|
-
'',
|
|
194
|
-
theme.bold('Examples:'),
|
|
195
|
-
` ${dimText('claude-brain pack list')}`,
|
|
196
|
-
` ${dimText('claude-brain pack status my-project')}`,
|
|
197
|
-
` ${dimText('claude-brain pack reload my-project')}`,
|
|
198
|
-
].join('\n'), 'Pack Help'))
|
|
199
|
-
console.log()
|
|
200
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Phase 18: CLI Pack Command
|
|
3
|
+
* Manages knowledge packs (list/status/reload)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { parseArgs } from 'citty'
|
|
7
|
+
import {
|
|
8
|
+
renderLogo, theme, heading, successText, warningText, errorText, dimText,
|
|
9
|
+
box, summaryPanel, withSpinner,
|
|
10
|
+
} from '@/cli/ui/index.js'
|
|
11
|
+
import { resolve, dirname, join } from 'node:path'
|
|
12
|
+
import { fileURLToPath } from 'node:url'
|
|
13
|
+
import { PackManager } from '@/packs/manager'
|
|
14
|
+
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
16
|
+
const __dirname = dirname(__filename)
|
|
17
|
+
const PACKAGE_ROOT = resolve(__dirname, '..', '..', '..')
|
|
18
|
+
|
|
19
|
+
function getDataDir(): string {
|
|
20
|
+
return join(
|
|
21
|
+
process.env.CLAUDE_BRAIN_HOME || join(process.env.HOME || '~', '.claude-brain'),
|
|
22
|
+
'data'
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function getDefaultConfig() {
|
|
27
|
+
return {
|
|
28
|
+
enabled: true,
|
|
29
|
+
packsDir: 'packs',
|
|
30
|
+
alwaysLoadCore: true,
|
|
31
|
+
alwaysLoadMeta: true,
|
|
32
|
+
communityConfidenceMultiplier: 0.8,
|
|
33
|
+
personalBoost: 1.2,
|
|
34
|
+
projectBoost: 1.15
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function createPackManager(): PackManager {
|
|
39
|
+
// Lightweight logger for CLI
|
|
40
|
+
const logger = {
|
|
41
|
+
child: () => logger,
|
|
42
|
+
debug: () => {},
|
|
43
|
+
info: () => {},
|
|
44
|
+
warn: () => {},
|
|
45
|
+
error: () => {},
|
|
46
|
+
} as any
|
|
47
|
+
|
|
48
|
+
return new PackManager(logger, getDefaultConfig(), PACKAGE_ROOT, getDataDir())
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export async function runPack() {
|
|
52
|
+
const args = parseArgs(process.argv.slice(3), {
|
|
53
|
+
subcommand: { type: 'positional', required: false, description: 'list|status|reload' },
|
|
54
|
+
project: { type: 'positional', required: false, description: 'Project name' },
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
const subcommand: string = args.subcommand ?? 'list'
|
|
58
|
+
|
|
59
|
+
switch (subcommand) {
|
|
60
|
+
case 'list':
|
|
61
|
+
await handleList()
|
|
62
|
+
break
|
|
63
|
+
case 'status':
|
|
64
|
+
await handleStatus(args.project)
|
|
65
|
+
break
|
|
66
|
+
case 'reload':
|
|
67
|
+
await handleReload(args.project)
|
|
68
|
+
break
|
|
69
|
+
default:
|
|
70
|
+
console.log()
|
|
71
|
+
console.log(errorText(`Unknown pack subcommand: ${subcommand}`))
|
|
72
|
+
printPackHelp()
|
|
73
|
+
process.exit(1)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function handleList() {
|
|
78
|
+
console.log()
|
|
79
|
+
console.log(renderLogo())
|
|
80
|
+
console.log()
|
|
81
|
+
console.log(heading('Available Knowledge Packs'))
|
|
82
|
+
console.log()
|
|
83
|
+
|
|
84
|
+
const manager = createPackManager()
|
|
85
|
+
|
|
86
|
+
let packs: Array<{ id: string; name: string; description: string; entries: number; version: string }> = []
|
|
87
|
+
await withSpinner('Scanning packs directory', async () => {
|
|
88
|
+
packs = await manager.listAvailablePacks()
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
if (packs.length === 0) {
|
|
92
|
+
console.log(warningText(' No packs found in packs/ directory'))
|
|
93
|
+
console.log()
|
|
94
|
+
return
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
console.log()
|
|
98
|
+
for (const pack of packs) {
|
|
99
|
+
console.log(` ${theme.primary(pack.id.padEnd(24))} ${theme.bold(pack.name)}`)
|
|
100
|
+
console.log(` ${''.padEnd(24)} ${dimText(pack.description)}`)
|
|
101
|
+
console.log(` ${''.padEnd(24)} ${dimText(`v${pack.version} - ${pack.entries} entries`)}`)
|
|
102
|
+
console.log()
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const totalEntries = packs.reduce((sum, p) => sum + p.entries, 0)
|
|
106
|
+
console.log(dimText(` Total: ${packs.length} packs, ${totalEntries} entries`))
|
|
107
|
+
console.log()
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async function handleStatus(project?: string) {
|
|
111
|
+
console.log()
|
|
112
|
+
console.log(renderLogo())
|
|
113
|
+
console.log()
|
|
114
|
+
console.log(heading('Pack Status'))
|
|
115
|
+
console.log()
|
|
116
|
+
|
|
117
|
+
if (!project) {
|
|
118
|
+
console.log(warningText(' Usage: claude-brain pack status <project-name>'))
|
|
119
|
+
console.log(dimText(' Example: claude-brain pack status my-app'))
|
|
120
|
+
console.log()
|
|
121
|
+
return
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const manager = createPackManager()
|
|
125
|
+
const manifest = await manager.getManifest(project)
|
|
126
|
+
|
|
127
|
+
if (manifest.packs.length === 0) {
|
|
128
|
+
console.log(dimText(` No packs loaded for project "${project}"`))
|
|
129
|
+
console.log(dimText(' Packs are loaded automatically when you run init_project'))
|
|
130
|
+
console.log()
|
|
131
|
+
return
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const items = manifest.packs.map(p => ({
|
|
135
|
+
label: p.packId,
|
|
136
|
+
value: `v${p.version} (${p.entriesLoaded} entries, ${new Date(p.loadedAt).toLocaleDateString()})`,
|
|
137
|
+
status: 'success' as const
|
|
138
|
+
}))
|
|
139
|
+
|
|
140
|
+
console.log(summaryPanel(`Packs for ${project}`, items))
|
|
141
|
+
console.log()
|
|
142
|
+
console.log(dimText(` Last updated: ${manifest.lastUpdated}`))
|
|
143
|
+
console.log()
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
async function handleReload(project?: string) {
|
|
147
|
+
console.log()
|
|
148
|
+
console.log(renderLogo())
|
|
149
|
+
console.log()
|
|
150
|
+
console.log(heading('Reload Knowledge Packs'))
|
|
151
|
+
console.log()
|
|
152
|
+
|
|
153
|
+
if (!project) {
|
|
154
|
+
console.log(warningText(' Usage: claude-brain pack reload <project-name>'))
|
|
155
|
+
console.log(dimText(' This clears the manifest so packs are re-loaded on next init_project'))
|
|
156
|
+
console.log()
|
|
157
|
+
return
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const manager = createPackManager()
|
|
161
|
+
|
|
162
|
+
await withSpinner(`Clearing manifest for "${project}"`, async () => {
|
|
163
|
+
await manager.deleteManifest(project)
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
console.log()
|
|
167
|
+
console.log(box([
|
|
168
|
+
successText(`Manifest cleared for "${project}"`),
|
|
169
|
+
'',
|
|
170
|
+
dimText('Packs will be re-loaded on the next init_project call.'),
|
|
171
|
+
dimText('Or use the init_project MCP tool to reload now.'),
|
|
172
|
+
].join('\n'), 'Reload'))
|
|
173
|
+
console.log()
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function printPackHelp() {
|
|
177
|
+
console.log()
|
|
178
|
+
const commands = [
|
|
179
|
+
['list', 'Show all available knowledge packs'],
|
|
180
|
+
['status', 'Show loaded packs for a project'],
|
|
181
|
+
['reload', 'Clear manifest to force pack reload'],
|
|
182
|
+
]
|
|
183
|
+
|
|
184
|
+
const cmdLines = commands
|
|
185
|
+
.map(([cmd, desc]) => ` ${theme.primary(cmd!.padEnd(14))} ${dimText(desc!)}`)
|
|
186
|
+
.join('\n')
|
|
187
|
+
|
|
188
|
+
console.log(box([
|
|
189
|
+
theme.bold('Usage:') + ' ' + dimText('claude-brain pack [subcommand]'),
|
|
190
|
+
'',
|
|
191
|
+
theme.bold('Subcommands:'),
|
|
192
|
+
cmdLines,
|
|
193
|
+
'',
|
|
194
|
+
theme.bold('Examples:'),
|
|
195
|
+
` ${dimText('claude-brain pack list')}`,
|
|
196
|
+
` ${dimText('claude-brain pack status my-project')}`,
|
|
197
|
+
` ${dimText('claude-brain pack reload my-project')}`,
|
|
198
|
+
].join('\n'), 'Pack Help'))
|
|
199
|
+
console.log()
|
|
200
|
+
}
|