claude-brain 0.15.2 → 0.17.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/README.md +191 -191
- package/VERSION +1 -1
- package/assets/CLAUDE-unified.md +11 -11
- package/assets/CLAUDE.md +29 -11
- package/bunfig.toml +8 -8
- package/package.json +82 -82
- 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 +341 -341
- package/src/automation/auto-context.ts +240 -240
- package/src/automation/decision-detector.ts +452 -452
- package/src/automation/index.ts +11 -11
- 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 +205 -205
- package/src/cli/auto-setup.ts +82 -82
- package/src/cli/bin.ts +209 -202
- package/src/cli/commands/chroma.ts +573 -573
- package/src/cli/commands/git-hook.ts +189 -189
- package/src/cli/commands/hooks.ts +213 -213
- package/src/cli/commands/init.ts +122 -122
- package/src/cli/commands/install-mcp.ts +92 -92
- package/src/cli/commands/pack.ts +197 -197
- package/src/cli/commands/refresh.ts +323 -0
- package/src/cli/commands/serve.ts +167 -173
- package/src/cli/commands/start.ts +42 -42
- package/src/cli/commands/uninstall-mcp.ts +41 -41
- package/src/cli/commands/update.ts +124 -121
- package/src/cli/diagnose.ts +4 -4
- package/src/cli/health-check.ts +4 -4
- package/src/cli/migrate-chroma.ts +106 -106
- package/src/cli/setup.ts +4 -4
- 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/config/defaults.ts +50 -50
- package/src/config/home.ts +55 -55
- package/src/config/index.ts +7 -7
- package/src/config/loader.ts +166 -166
- package/src/config/migration.ts +76 -76
- package/src/config/schema.ts +360 -360
- package/src/config/validator.ts +184 -184
- package/src/config/watcher.ts +86 -86
- package/src/context/assembler.ts +398 -398
- package/src/context/cache-manager.ts +101 -101
- package/src/context/formatter.ts +84 -84
- package/src/context/hierarchy.ts +85 -85
- package/src/context/index.ts +83 -83
- package/src/context/progress-tracker.ts +174 -174
- package/src/context/standards-manager.ts +287 -287
- package/src/context/types.ts +252 -252
- package/src/context/validator.ts +58 -58
- package/src/diagnostics/index.ts +123 -123
- package/src/health/index.ts +229 -229
- package/src/hooks/brain-hook.ts +128 -112
- package/src/hooks/capture.ts +168 -205
- package/src/hooks/context-hook.ts +137 -0
- package/src/hooks/deduplicator.ts +72 -72
- package/src/hooks/git-capture.ts +109 -109
- package/src/hooks/git-hook-installer.ts +207 -207
- package/src/hooks/index.ts +20 -20
- package/src/hooks/installer.ts +244 -194
- package/src/hooks/passive-classifier.ts +404 -723
- package/src/hooks/queue.ts +129 -129
- package/src/hooks/session-tracker.ts +312 -275
- package/src/hooks/types.ts +52 -47
- package/src/index.ts +7 -7
- package/src/intelligence/cross-project/affinity.ts +162 -162
- package/src/intelligence/cross-project/generalizer.ts +283 -283
- package/src/intelligence/cross-project/index.ts +13 -13
- package/src/intelligence/cross-project/transfer.ts +201 -201
- package/src/intelligence/index.ts +24 -24
- package/src/intelligence/optimization/index.ts +10 -10
- package/src/intelligence/optimization/precompute.ts +202 -202
- package/src/intelligence/optimization/semantic-cache.ts +207 -207
- package/src/intelligence/prediction/context-anticipator.ts +198 -198
- package/src/intelligence/prediction/decision-predictor.ts +184 -184
- package/src/intelligence/prediction/index.ts +13 -13
- package/src/intelligence/prediction/recommender.ts +268 -268
- package/src/intelligence/reasoning/chain-retrieval.ts +247 -247
- package/src/intelligence/reasoning/counterfactual.ts +248 -248
- package/src/intelligence/reasoning/index.ts +13 -13
- package/src/intelligence/reasoning/synthesizer.ts +169 -169
- package/src/intelligence/temporal/evolution.ts +197 -197
- package/src/intelligence/temporal/index.ts +16 -16
- package/src/intelligence/temporal/query-processor.ts +190 -190
- package/src/intelligence/temporal/timeline.ts +259 -259
- package/src/intelligence/temporal/trends.ts +263 -263
- package/src/knowledge/entity-extractor.ts +416 -416
- 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 +168 -168
- package/src/knowledge/relationship-extractor.ts +108 -108
- package/src/memory/chroma/client.ts +174 -174
- package/src/memory/chroma/collection-manager.ts +94 -94
- package/src/memory/chroma/config.ts +57 -57
- package/src/memory/chroma/embeddings.ts +155 -155
- 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 +315 -315
- package/src/memory/chroma/store.ts +741 -741
- package/src/memory/consolidation/archiver.ts +164 -164
- package/src/memory/consolidation/merger.ts +186 -186
- package/src/memory/consolidation/scorer.ts +138 -138
- package/src/memory/context-builder.ts +236 -236
- package/src/memory/database.ts +169 -169
- package/src/memory/embedding-utils.ts +156 -156
- package/src/memory/embeddings.ts +226 -226
- package/src/memory/episodic/detector.ts +108 -108
- package/src/memory/episodic/manager.ts +351 -351
- package/src/memory/episodic/summarizer.ts +179 -179
- package/src/memory/episodic/types.ts +52 -52
- package/src/memory/index.ts +582 -582
- package/src/memory/knowledge-extractor.ts +455 -455
- package/src/memory/learning.ts +378 -378
- package/src/memory/patterns.ts +396 -396
- package/src/memory/schema.ts +88 -88
- package/src/memory/search.ts +309 -309
- package/src/memory/store.ts +787 -787
- package/src/memory/types.ts +121 -121
- package/src/orchestrator/coordinator.ts +272 -272
- package/src/orchestrator/decision-logger.ts +228 -228
- package/src/orchestrator/event-emitter.ts +198 -198
- package/src/orchestrator/event-queue.ts +184 -184
- package/src/orchestrator/handlers/base-handler.ts +70 -70
- package/src/orchestrator/handlers/context-handler.ts +73 -73
- package/src/orchestrator/handlers/decision-handler.ts +204 -204
- package/src/orchestrator/handlers/index.ts +10 -10
- package/src/orchestrator/handlers/status-handler.ts +131 -131
- package/src/orchestrator/handlers/task-handler.ts +171 -171
- package/src/orchestrator/index.ts +275 -275
- package/src/orchestrator/task-parser.ts +284 -284
- package/src/orchestrator/types.ts +98 -98
- 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 -300
- package/src/retrieval/bm25/tokenizer.ts +184 -184
- package/src/retrieval/feedback/adaptive.ts +223 -223
- package/src/retrieval/feedback/index.ts +16 -16
- package/src/retrieval/feedback/metrics.ts +223 -223
- package/src/retrieval/feedback/store.ts +283 -283
- package/src/retrieval/fusion/index.ts +194 -194
- package/src/retrieval/fusion/rrf.ts +163 -163
- package/src/retrieval/index.ts +12 -12
- package/src/retrieval/pipeline.ts +375 -375
- package/src/retrieval/query/expander.ts +198 -198
- package/src/retrieval/query/index.ts +27 -27
- package/src/retrieval/query/intent-classifier.ts +236 -236
- package/src/retrieval/query/temporal-parser.ts +295 -295
- package/src/retrieval/reranker/index.ts +188 -188
- package/src/retrieval/reranker/model.ts +95 -95
- package/src/retrieval/service.ts +125 -125
- package/src/retrieval/types.ts +162 -162
- package/src/routing/entity-extractor.ts +428 -428
- package/src/routing/intent-classifier.ts +450 -436
- package/src/routing/response-filter.ts +261 -258
- package/src/routing/router.ts +1441 -1322
- package/src/routing/search-engine.ts +515 -475
- package/src/routing/types.ts +94 -94
- package/src/scripts/health-check.ts +118 -118
- package/src/scripts/setup.ts +122 -122
- package/src/server/handlers/call-tool.ts +156 -156
- package/src/server/handlers/index.ts +9 -9
- package/src/server/handlers/list-tools.ts +35 -35
- package/src/server/handlers/tools/analyze-decision-evolution.ts +151 -151
- package/src/server/handlers/tools/auto-remember.ts +200 -200
- package/src/server/handlers/tools/brain.ts +85 -85
- package/src/server/handlers/tools/create-project.ts +135 -135
- package/src/server/handlers/tools/detect-trends.ts +144 -144
- package/src/server/handlers/tools/find-cross-project-patterns.ts +168 -168
- package/src/server/handlers/tools/get-activity-log.ts +194 -194
- package/src/server/handlers/tools/get-code-standards.ts +124 -124
- package/src/server/handlers/tools/get-corrections.ts +154 -154
- package/src/server/handlers/tools/get-decision-timeline.ts +172 -172
- package/src/server/handlers/tools/get-episode.ts +103 -103
- package/src/server/handlers/tools/get-patterns.ts +158 -158
- package/src/server/handlers/tools/get-phase12-status.ts +63 -63
- package/src/server/handlers/tools/get-project-context.ts +75 -75
- package/src/server/handlers/tools/get-recommendations.ts +145 -145
- package/src/server/handlers/tools/index.ts +31 -31
- package/src/server/handlers/tools/init-project.ts +757 -757
- package/src/server/handlers/tools/list-episodes.ts +90 -90
- package/src/server/handlers/tools/list-projects.ts +125 -125
- package/src/server/handlers/tools/rate-memory.ts +101 -101
- package/src/server/handlers/tools/recall-similar.ts +87 -87
- package/src/server/handlers/tools/recognize-pattern.ts +126 -126
- package/src/server/handlers/tools/record-correction.ts +125 -125
- package/src/server/handlers/tools/remember-decision.ts +153 -153
- package/src/server/handlers/tools/schemas.ts +253 -253
- package/src/server/handlers/tools/search-knowledge-graph.ts +102 -102
- package/src/server/handlers/tools/smart-context.ts +146 -146
- package/src/server/handlers/tools/update-progress.ts +131 -131
- package/src/server/handlers/tools/what-if-analysis.ts +135 -135
- package/src/server/http-api.ts +761 -693
- package/src/server/index.ts +40 -40
- package/src/server/mcp-server.ts +283 -283
- package/src/server/providers/index.ts +7 -7
- package/src/server/providers/prompts.ts +327 -327
- package/src/server/providers/resources.ts +622 -622
- package/src/server/services.ts +468 -468
- package/src/server/types.ts +39 -39
- package/src/server/utils/error-handler.ts +155 -155
- package/src/server/utils/index.ts +13 -13
- package/src/server/utils/memory-indicator.ts +83 -83
- package/src/server/utils/request-context.ts +122 -122
- package/src/server/utils/response-formatter.ts +129 -129
- package/src/server/utils/validators.ts +210 -210
- package/src/setup/index.ts +48 -48
- package/src/setup/wizard.ts +461 -461
- package/src/tools/index.ts +24 -24
- package/src/tools/registry.ts +115 -115
- package/src/tools/schemas.test.ts +30 -30
- package/src/tools/schemas.ts +617 -617
- package/src/tools/types.ts +412 -412
- package/src/utils/circuit-breaker.ts +130 -130
- package/src/utils/cleanup.ts +34 -34
- package/src/utils/error-handler.ts +132 -132
- package/src/utils/error-messages.ts +60 -60
- package/src/utils/fallback.ts +45 -45
- package/src/utils/index.ts +54 -54
- package/src/utils/logger-utils.ts +80 -80
- package/src/utils/logger.ts +88 -88
- package/src/utils/phase12-helper.ts +56 -56
- package/src/utils/retry.ts +94 -94
- package/src/utils/timing.ts +47 -47
- package/src/utils/transaction.ts +63 -63
- package/src/vault/frontmatter.ts +264 -264
- package/src/vault/index.ts +318 -318
- package/src/vault/paths.ts +106 -106
- package/src/vault/query.ts +422 -422
- package/src/vault/reader.ts +264 -264
- package/src/vault/templates.ts +186 -186
- package/src/vault/types.ts +73 -73
- package/src/vault/watcher.ts +277 -277
- package/src/vault/writer.ts +413 -413
- package/tsconfig.json +30 -30
- package/src/cli/auto-update.ts +0 -157
|
@@ -1,210 +1,210 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool Validators
|
|
3
|
-
* Utilities for validating tool arguments
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'
|
|
7
|
-
import { z } from 'zod'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* ToolValidator provides methods for validating tool inputs
|
|
11
|
-
*/
|
|
12
|
-
export class ToolValidator {
|
|
13
|
-
/**
|
|
14
|
-
* Validate tool arguments against a Zod schema
|
|
15
|
-
* @param args - Arguments to validate
|
|
16
|
-
* @param schema - Zod schema to validate against
|
|
17
|
-
* @returns Parsed and validated arguments
|
|
18
|
-
* @throws McpError if validation fails
|
|
19
|
-
*/
|
|
20
|
-
static validate<T>(args: unknown, schema: z.ZodSchema<T>): T {
|
|
21
|
-
try {
|
|
22
|
-
return schema.parse(args)
|
|
23
|
-
} catch (error) {
|
|
24
|
-
if (error instanceof z.ZodError) {
|
|
25
|
-
const issues = error.issues
|
|
26
|
-
.map(issue => `${issue.path.join('.')}: ${issue.message}`)
|
|
27
|
-
.join(', ')
|
|
28
|
-
throw new McpError(
|
|
29
|
-
ErrorCode.InvalidParams,
|
|
30
|
-
`Invalid parameters: ${issues}`
|
|
31
|
-
)
|
|
32
|
-
}
|
|
33
|
-
throw error
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Validate and return a required string parameter
|
|
39
|
-
* @param value - Value to validate
|
|
40
|
-
* @param name - Parameter name for error messages
|
|
41
|
-
* @returns Validated string
|
|
42
|
-
* @throws McpError if validation fails
|
|
43
|
-
*/
|
|
44
|
-
static requireString(value: unknown, name: string): string {
|
|
45
|
-
if (typeof value !== 'string') {
|
|
46
|
-
throw new McpError(
|
|
47
|
-
ErrorCode.InvalidParams,
|
|
48
|
-
`${name} is required and must be a string`
|
|
49
|
-
)
|
|
50
|
-
}
|
|
51
|
-
if (value.trim() === '') {
|
|
52
|
-
throw new McpError(
|
|
53
|
-
ErrorCode.InvalidParams,
|
|
54
|
-
`${name} cannot be empty`
|
|
55
|
-
)
|
|
56
|
-
}
|
|
57
|
-
return value
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Get an optional string parameter with default
|
|
62
|
-
* @param value - Value to check
|
|
63
|
-
* @param defaultValue - Default value if not provided
|
|
64
|
-
* @returns String value or default
|
|
65
|
-
* @throws McpError if value is present but not a string
|
|
66
|
-
*/
|
|
67
|
-
static optionalString(value: unknown, defaultValue: string = ''): string {
|
|
68
|
-
if (value === undefined || value === null) {
|
|
69
|
-
return defaultValue
|
|
70
|
-
}
|
|
71
|
-
if (typeof value !== 'string') {
|
|
72
|
-
throw new McpError(
|
|
73
|
-
ErrorCode.InvalidParams,
|
|
74
|
-
'Parameter must be a string'
|
|
75
|
-
)
|
|
76
|
-
}
|
|
77
|
-
return value
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Validate and return a required number parameter
|
|
82
|
-
* @param value - Value to validate
|
|
83
|
-
* @param name - Parameter name for error messages
|
|
84
|
-
* @returns Validated number
|
|
85
|
-
* @throws McpError if validation fails
|
|
86
|
-
*/
|
|
87
|
-
static requireNumber(value: unknown, name: string): number {
|
|
88
|
-
if (typeof value !== 'number' || isNaN(value)) {
|
|
89
|
-
throw new McpError(
|
|
90
|
-
ErrorCode.InvalidParams,
|
|
91
|
-
`${name} is required and must be a number`
|
|
92
|
-
)
|
|
93
|
-
}
|
|
94
|
-
return value
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Get an optional number parameter with default
|
|
99
|
-
* @param value - Value to check
|
|
100
|
-
* @param defaultValue - Default value if not provided
|
|
101
|
-
* @returns Number value or default
|
|
102
|
-
* @throws McpError if value is present but not a number
|
|
103
|
-
*/
|
|
104
|
-
static optionalNumber(value: unknown, defaultValue: number): number {
|
|
105
|
-
if (value === undefined || value === null) {
|
|
106
|
-
return defaultValue
|
|
107
|
-
}
|
|
108
|
-
if (typeof value !== 'number' || isNaN(value)) {
|
|
109
|
-
throw new McpError(
|
|
110
|
-
ErrorCode.InvalidParams,
|
|
111
|
-
'Parameter must be a number'
|
|
112
|
-
)
|
|
113
|
-
}
|
|
114
|
-
return value
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Validate and return a required boolean parameter
|
|
119
|
-
* @param value - Value to validate
|
|
120
|
-
* @param name - Parameter name for error messages
|
|
121
|
-
* @returns Validated boolean
|
|
122
|
-
* @throws McpError if validation fails
|
|
123
|
-
*/
|
|
124
|
-
static requireBoolean(value: unknown, name: string): boolean {
|
|
125
|
-
if (typeof value !== 'boolean') {
|
|
126
|
-
throw new McpError(
|
|
127
|
-
ErrorCode.InvalidParams,
|
|
128
|
-
`${name} is required and must be a boolean`
|
|
129
|
-
)
|
|
130
|
-
}
|
|
131
|
-
return value
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Get an optional boolean parameter with default
|
|
136
|
-
* @param value - Value to check
|
|
137
|
-
* @param defaultValue - Default value if not provided
|
|
138
|
-
* @returns Boolean value or default
|
|
139
|
-
*/
|
|
140
|
-
static optionalBoolean(value: unknown, defaultValue: boolean): boolean {
|
|
141
|
-
if (value === undefined || value === null) {
|
|
142
|
-
return defaultValue
|
|
143
|
-
}
|
|
144
|
-
if (typeof value !== 'boolean') {
|
|
145
|
-
throw new McpError(
|
|
146
|
-
ErrorCode.InvalidParams,
|
|
147
|
-
'Parameter must be a boolean'
|
|
148
|
-
)
|
|
149
|
-
}
|
|
150
|
-
return value
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Validate and return a required array parameter
|
|
155
|
-
* @param value - Value to validate
|
|
156
|
-
* @param name - Parameter name for error messages
|
|
157
|
-
* @returns Validated array
|
|
158
|
-
* @throws McpError if validation fails
|
|
159
|
-
*/
|
|
160
|
-
static requireArray<T>(value: unknown, name: string): T[] {
|
|
161
|
-
if (!Array.isArray(value)) {
|
|
162
|
-
throw new McpError(
|
|
163
|
-
ErrorCode.InvalidParams,
|
|
164
|
-
`${name} is required and must be an array`
|
|
165
|
-
)
|
|
166
|
-
}
|
|
167
|
-
return value as T[]
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Get an optional array parameter with default
|
|
172
|
-
* @param value - Value to check
|
|
173
|
-
* @param defaultValue - Default value if not provided
|
|
174
|
-
* @returns Array value or default
|
|
175
|
-
*/
|
|
176
|
-
static optionalArray<T>(value: unknown, defaultValue: T[] = []): T[] {
|
|
177
|
-
if (value === undefined || value === null) {
|
|
178
|
-
return defaultValue
|
|
179
|
-
}
|
|
180
|
-
if (!Array.isArray(value)) {
|
|
181
|
-
throw new McpError(
|
|
182
|
-
ErrorCode.InvalidParams,
|
|
183
|
-
'Parameter must be an array'
|
|
184
|
-
)
|
|
185
|
-
}
|
|
186
|
-
return value as T[]
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Validate value is one of allowed enum values
|
|
191
|
-
* @param value - Value to validate
|
|
192
|
-
* @param allowed - Array of allowed values
|
|
193
|
-
* @param name - Parameter name for error messages
|
|
194
|
-
* @returns Validated value
|
|
195
|
-
* @throws McpError if validation fails
|
|
196
|
-
*/
|
|
197
|
-
static requireEnum<T extends string>(
|
|
198
|
-
value: unknown,
|
|
199
|
-
allowed: readonly T[],
|
|
200
|
-
name: string
|
|
201
|
-
): T {
|
|
202
|
-
if (typeof value !== 'string' || !allowed.includes(value as T)) {
|
|
203
|
-
throw new McpError(
|
|
204
|
-
ErrorCode.InvalidParams,
|
|
205
|
-
`${name} must be one of: ${allowed.join(', ')}`
|
|
206
|
-
)
|
|
207
|
-
}
|
|
208
|
-
return value as T
|
|
209
|
-
}
|
|
210
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Tool Validators
|
|
3
|
+
* Utilities for validating tool arguments
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'
|
|
7
|
+
import { z } from 'zod'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* ToolValidator provides methods for validating tool inputs
|
|
11
|
+
*/
|
|
12
|
+
export class ToolValidator {
|
|
13
|
+
/**
|
|
14
|
+
* Validate tool arguments against a Zod schema
|
|
15
|
+
* @param args - Arguments to validate
|
|
16
|
+
* @param schema - Zod schema to validate against
|
|
17
|
+
* @returns Parsed and validated arguments
|
|
18
|
+
* @throws McpError if validation fails
|
|
19
|
+
*/
|
|
20
|
+
static validate<T>(args: unknown, schema: z.ZodSchema<T>): T {
|
|
21
|
+
try {
|
|
22
|
+
return schema.parse(args)
|
|
23
|
+
} catch (error) {
|
|
24
|
+
if (error instanceof z.ZodError) {
|
|
25
|
+
const issues = error.issues
|
|
26
|
+
.map(issue => `${issue.path.join('.')}: ${issue.message}`)
|
|
27
|
+
.join(', ')
|
|
28
|
+
throw new McpError(
|
|
29
|
+
ErrorCode.InvalidParams,
|
|
30
|
+
`Invalid parameters: ${issues}`
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
throw error
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Validate and return a required string parameter
|
|
39
|
+
* @param value - Value to validate
|
|
40
|
+
* @param name - Parameter name for error messages
|
|
41
|
+
* @returns Validated string
|
|
42
|
+
* @throws McpError if validation fails
|
|
43
|
+
*/
|
|
44
|
+
static requireString(value: unknown, name: string): string {
|
|
45
|
+
if (typeof value !== 'string') {
|
|
46
|
+
throw new McpError(
|
|
47
|
+
ErrorCode.InvalidParams,
|
|
48
|
+
`${name} is required and must be a string`
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
if (value.trim() === '') {
|
|
52
|
+
throw new McpError(
|
|
53
|
+
ErrorCode.InvalidParams,
|
|
54
|
+
`${name} cannot be empty`
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
return value
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Get an optional string parameter with default
|
|
62
|
+
* @param value - Value to check
|
|
63
|
+
* @param defaultValue - Default value if not provided
|
|
64
|
+
* @returns String value or default
|
|
65
|
+
* @throws McpError if value is present but not a string
|
|
66
|
+
*/
|
|
67
|
+
static optionalString(value: unknown, defaultValue: string = ''): string {
|
|
68
|
+
if (value === undefined || value === null) {
|
|
69
|
+
return defaultValue
|
|
70
|
+
}
|
|
71
|
+
if (typeof value !== 'string') {
|
|
72
|
+
throw new McpError(
|
|
73
|
+
ErrorCode.InvalidParams,
|
|
74
|
+
'Parameter must be a string'
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
return value
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Validate and return a required number parameter
|
|
82
|
+
* @param value - Value to validate
|
|
83
|
+
* @param name - Parameter name for error messages
|
|
84
|
+
* @returns Validated number
|
|
85
|
+
* @throws McpError if validation fails
|
|
86
|
+
*/
|
|
87
|
+
static requireNumber(value: unknown, name: string): number {
|
|
88
|
+
if (typeof value !== 'number' || isNaN(value)) {
|
|
89
|
+
throw new McpError(
|
|
90
|
+
ErrorCode.InvalidParams,
|
|
91
|
+
`${name} is required and must be a number`
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
return value
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Get an optional number parameter with default
|
|
99
|
+
* @param value - Value to check
|
|
100
|
+
* @param defaultValue - Default value if not provided
|
|
101
|
+
* @returns Number value or default
|
|
102
|
+
* @throws McpError if value is present but not a number
|
|
103
|
+
*/
|
|
104
|
+
static optionalNumber(value: unknown, defaultValue: number): number {
|
|
105
|
+
if (value === undefined || value === null) {
|
|
106
|
+
return defaultValue
|
|
107
|
+
}
|
|
108
|
+
if (typeof value !== 'number' || isNaN(value)) {
|
|
109
|
+
throw new McpError(
|
|
110
|
+
ErrorCode.InvalidParams,
|
|
111
|
+
'Parameter must be a number'
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
return value
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Validate and return a required boolean parameter
|
|
119
|
+
* @param value - Value to validate
|
|
120
|
+
* @param name - Parameter name for error messages
|
|
121
|
+
* @returns Validated boolean
|
|
122
|
+
* @throws McpError if validation fails
|
|
123
|
+
*/
|
|
124
|
+
static requireBoolean(value: unknown, name: string): boolean {
|
|
125
|
+
if (typeof value !== 'boolean') {
|
|
126
|
+
throw new McpError(
|
|
127
|
+
ErrorCode.InvalidParams,
|
|
128
|
+
`${name} is required and must be a boolean`
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
return value
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Get an optional boolean parameter with default
|
|
136
|
+
* @param value - Value to check
|
|
137
|
+
* @param defaultValue - Default value if not provided
|
|
138
|
+
* @returns Boolean value or default
|
|
139
|
+
*/
|
|
140
|
+
static optionalBoolean(value: unknown, defaultValue: boolean): boolean {
|
|
141
|
+
if (value === undefined || value === null) {
|
|
142
|
+
return defaultValue
|
|
143
|
+
}
|
|
144
|
+
if (typeof value !== 'boolean') {
|
|
145
|
+
throw new McpError(
|
|
146
|
+
ErrorCode.InvalidParams,
|
|
147
|
+
'Parameter must be a boolean'
|
|
148
|
+
)
|
|
149
|
+
}
|
|
150
|
+
return value
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Validate and return a required array parameter
|
|
155
|
+
* @param value - Value to validate
|
|
156
|
+
* @param name - Parameter name for error messages
|
|
157
|
+
* @returns Validated array
|
|
158
|
+
* @throws McpError if validation fails
|
|
159
|
+
*/
|
|
160
|
+
static requireArray<T>(value: unknown, name: string): T[] {
|
|
161
|
+
if (!Array.isArray(value)) {
|
|
162
|
+
throw new McpError(
|
|
163
|
+
ErrorCode.InvalidParams,
|
|
164
|
+
`${name} is required and must be an array`
|
|
165
|
+
)
|
|
166
|
+
}
|
|
167
|
+
return value as T[]
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Get an optional array parameter with default
|
|
172
|
+
* @param value - Value to check
|
|
173
|
+
* @param defaultValue - Default value if not provided
|
|
174
|
+
* @returns Array value or default
|
|
175
|
+
*/
|
|
176
|
+
static optionalArray<T>(value: unknown, defaultValue: T[] = []): T[] {
|
|
177
|
+
if (value === undefined || value === null) {
|
|
178
|
+
return defaultValue
|
|
179
|
+
}
|
|
180
|
+
if (!Array.isArray(value)) {
|
|
181
|
+
throw new McpError(
|
|
182
|
+
ErrorCode.InvalidParams,
|
|
183
|
+
'Parameter must be an array'
|
|
184
|
+
)
|
|
185
|
+
}
|
|
186
|
+
return value as T[]
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Validate value is one of allowed enum values
|
|
191
|
+
* @param value - Value to validate
|
|
192
|
+
* @param allowed - Array of allowed values
|
|
193
|
+
* @param name - Parameter name for error messages
|
|
194
|
+
* @returns Validated value
|
|
195
|
+
* @throws McpError if validation fails
|
|
196
|
+
*/
|
|
197
|
+
static requireEnum<T extends string>(
|
|
198
|
+
value: unknown,
|
|
199
|
+
allowed: readonly T[],
|
|
200
|
+
name: string
|
|
201
|
+
): T {
|
|
202
|
+
if (typeof value !== 'string' || !allowed.includes(value as T)) {
|
|
203
|
+
throw new McpError(
|
|
204
|
+
ErrorCode.InvalidParams,
|
|
205
|
+
`${name} must be one of: ${allowed.join(', ')}`
|
|
206
|
+
)
|
|
207
|
+
}
|
|
208
|
+
return value as T
|
|
209
|
+
}
|
|
210
|
+
}
|
package/src/setup/index.ts
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { createLogger } from '@/utils/logger'
|
|
2
|
-
import { resolveHomePath } from '@/config/home'
|
|
3
|
-
import { ensureHomeDirectory } from '@/cli/auto-setup'
|
|
4
|
-
import { SetupWizard } from './wizard'
|
|
5
|
-
import { renderBanner, typewrite, transition, box, errorText, theme } from '@/cli/ui/index.js'
|
|
6
|
-
import { readFileSync } from 'node:fs'
|
|
7
|
-
import { resolve, dirname } from 'node:path'
|
|
8
|
-
import { fileURLToPath } from 'node:url'
|
|
9
|
-
|
|
10
|
-
export * from './wizard'
|
|
11
|
-
|
|
12
|
-
const __filename = fileURLToPath(import.meta.url)
|
|
13
|
-
const __dirname = dirname(__filename)
|
|
14
|
-
const PACKAGE_ROOT = resolve(__dirname, '..', '..')
|
|
15
|
-
|
|
16
|
-
function getVersion(): string {
|
|
17
|
-
try {
|
|
18
|
-
const pkg = JSON.parse(readFileSync(resolve(PACKAGE_ROOT, 'package.json'), 'utf-8'))
|
|
19
|
-
return pkg.version || 'unknown'
|
|
20
|
-
} catch {
|
|
21
|
-
return 'unknown'
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export async function runSetup() {
|
|
26
|
-
ensureHomeDirectory()
|
|
27
|
-
|
|
28
|
-
const version = getVersion()
|
|
29
|
-
console.log()
|
|
30
|
-
console.log(renderBanner(version))
|
|
31
|
-
console.log()
|
|
32
|
-
|
|
33
|
-
await typewrite(theme.dim('Welcome! Let\'s configure Claude Brain for your system.'))
|
|
34
|
-
await transition(400)
|
|
35
|
-
|
|
36
|
-
const logger = createLogger('info', resolveHomePath('./logs/setup.log'))
|
|
37
|
-
|
|
38
|
-
try {
|
|
39
|
-
const wizard = new SetupWizard(logger)
|
|
40
|
-
const answers = await wizard.run()
|
|
41
|
-
await wizard.applyConfiguration(answers)
|
|
42
|
-
|
|
43
|
-
} catch (error) {
|
|
44
|
-
console.log()
|
|
45
|
-
console.log(box(errorText(`Setup failed: ${error instanceof Error ? error.message : String(error)}`), 'Error'))
|
|
46
|
-
process.exit(1)
|
|
47
|
-
}
|
|
48
|
-
}
|
|
1
|
+
import { createLogger } from '@/utils/logger'
|
|
2
|
+
import { resolveHomePath } from '@/config/home'
|
|
3
|
+
import { ensureHomeDirectory } from '@/cli/auto-setup'
|
|
4
|
+
import { SetupWizard } from './wizard'
|
|
5
|
+
import { renderBanner, typewrite, transition, box, errorText, theme } from '@/cli/ui/index.js'
|
|
6
|
+
import { readFileSync } from 'node:fs'
|
|
7
|
+
import { resolve, dirname } from 'node:path'
|
|
8
|
+
import { fileURLToPath } from 'node:url'
|
|
9
|
+
|
|
10
|
+
export * from './wizard'
|
|
11
|
+
|
|
12
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
13
|
+
const __dirname = dirname(__filename)
|
|
14
|
+
const PACKAGE_ROOT = resolve(__dirname, '..', '..')
|
|
15
|
+
|
|
16
|
+
function getVersion(): string {
|
|
17
|
+
try {
|
|
18
|
+
const pkg = JSON.parse(readFileSync(resolve(PACKAGE_ROOT, 'package.json'), 'utf-8'))
|
|
19
|
+
return pkg.version || 'unknown'
|
|
20
|
+
} catch {
|
|
21
|
+
return 'unknown'
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export async function runSetup() {
|
|
26
|
+
ensureHomeDirectory()
|
|
27
|
+
|
|
28
|
+
const version = getVersion()
|
|
29
|
+
console.log()
|
|
30
|
+
console.log(renderBanner(version))
|
|
31
|
+
console.log()
|
|
32
|
+
|
|
33
|
+
await typewrite(theme.dim('Welcome! Let\'s configure Claude Brain for your system.'))
|
|
34
|
+
await transition(400)
|
|
35
|
+
|
|
36
|
+
const logger = createLogger('info', resolveHomePath('./logs/setup.log'))
|
|
37
|
+
|
|
38
|
+
try {
|
|
39
|
+
const wizard = new SetupWizard(logger)
|
|
40
|
+
const answers = await wizard.run()
|
|
41
|
+
await wizard.applyConfiguration(answers)
|
|
42
|
+
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.log()
|
|
45
|
+
console.log(box(errorText(`Setup failed: ${error instanceof Error ? error.message : String(error)}`), 'Error'))
|
|
46
|
+
process.exit(1)
|
|
47
|
+
}
|
|
48
|
+
}
|