claude-brain 0.14.0 → 0.14.1
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/VERSION +1 -1
- package/package.json +1 -1
- package/src/config/defaults.ts +1 -1
- package/src/config/schema.ts +1 -1
- package/src/hooks/installer.ts +27 -17
- package/src/hooks/queue.ts +10 -3
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.14.
|
|
1
|
+
0.14.1
|
package/package.json
CHANGED
package/src/config/defaults.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { PartialConfig } from './schema'
|
|
|
3
3
|
/** Default configuration values for Claude Brain */
|
|
4
4
|
export const defaultConfig: PartialConfig = {
|
|
5
5
|
serverName: 'claude-brain',
|
|
6
|
-
serverVersion: '0.14.
|
|
6
|
+
serverVersion: '0.14.1',
|
|
7
7
|
logLevel: 'info',
|
|
8
8
|
logFilePath: './logs/claude-brain.log',
|
|
9
9
|
dbPath: './data/memory.db',
|
package/src/config/schema.ts
CHANGED
|
@@ -284,7 +284,7 @@ export const ConfigSchema = z.object({
|
|
|
284
284
|
serverName: z.string().default('claude-brain'),
|
|
285
285
|
|
|
286
286
|
/** Server version in semver format */
|
|
287
|
-
serverVersion: z.string().regex(/^\d+\.\d+\.\d+$/, 'Version must be semver format').default('0.14.
|
|
287
|
+
serverVersion: z.string().regex(/^\d+\.\d+\.\d+$/, 'Version must be semver format').default('0.14.1'),
|
|
288
288
|
|
|
289
289
|
/** Logging level */
|
|
290
290
|
logLevel: LogLevelSchema.default('info'),
|
package/src/hooks/installer.ts
CHANGED
|
@@ -152,30 +152,40 @@ function isOurHookEntry(entry: any): boolean {
|
|
|
152
152
|
)
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
/**
|
|
155
|
+
/** All files needed by brain-hook.ts at runtime */
|
|
156
|
+
const HOOK_FILES = [
|
|
157
|
+
'brain-hook.ts',
|
|
158
|
+
'capture.ts',
|
|
159
|
+
'queue.ts',
|
|
160
|
+
'types.ts',
|
|
161
|
+
'passive-classifier.ts',
|
|
162
|
+
]
|
|
163
|
+
|
|
164
|
+
/** Copy the hook script and all its dependencies to the install location */
|
|
156
165
|
function copyHookScript(): void {
|
|
157
|
-
const
|
|
158
|
-
const destDir = dirname(destPath)
|
|
166
|
+
const destDir = dirname(getHookScriptPath())
|
|
159
167
|
|
|
160
168
|
if (!existsSync(destDir)) {
|
|
161
169
|
mkdirSync(destDir, { recursive: true })
|
|
162
170
|
}
|
|
163
171
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
} else {
|
|
173
|
-
// Try .js extension for compiled version
|
|
174
|
-
const jsSrcPath = srcPath.replace('.ts', '.js')
|
|
175
|
-
if (existsSync(jsSrcPath)) {
|
|
176
|
-
const content = readFileSync(jsSrcPath, 'utf-8')
|
|
172
|
+
const srcDir = dirname(new URL(import.meta.url).pathname)
|
|
173
|
+
|
|
174
|
+
for (const file of HOOK_FILES) {
|
|
175
|
+
const srcPath = join(srcDir, file)
|
|
176
|
+
const destPath = join(destDir, file)
|
|
177
|
+
|
|
178
|
+
if (existsSync(srcPath)) {
|
|
179
|
+
const content = readFileSync(srcPath, 'utf-8')
|
|
177
180
|
writeFileSync(destPath, content, 'utf-8')
|
|
181
|
+
} else {
|
|
182
|
+
// Try .js extension for compiled version
|
|
183
|
+
const jsSrcPath = srcPath.replace('.ts', '.js')
|
|
184
|
+
const jsDestPath = destPath.replace('.ts', '.js')
|
|
185
|
+
if (existsSync(jsSrcPath)) {
|
|
186
|
+
const content = readFileSync(jsSrcPath, 'utf-8')
|
|
187
|
+
writeFileSync(jsDestPath, content, 'utf-8')
|
|
188
|
+
}
|
|
178
189
|
}
|
|
179
|
-
// If neither exists, the hook script will need to be installed separately
|
|
180
190
|
}
|
|
181
191
|
}
|
package/src/hooks/queue.ts
CHANGED
|
@@ -5,13 +5,20 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { appendFileSync, readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs'
|
|
8
|
-
import { dirname, join } from 'node:path'
|
|
9
|
-
import {
|
|
8
|
+
import { dirname, join, resolve } from 'node:path'
|
|
9
|
+
import { homedir } from 'node:os'
|
|
10
10
|
import type { CapturedKnowledge } from './types'
|
|
11
11
|
|
|
12
|
+
/** Inline home path resolution — avoids @/config/home dependency for <200ms hook context */
|
|
13
|
+
function getHookDataDir(): string {
|
|
14
|
+
const envHome = process.env.CLAUDE_BRAIN_HOME
|
|
15
|
+
const root = envHome ? resolve(envHome) : join(homedir(), '.claude-brain')
|
|
16
|
+
return join(root, 'data')
|
|
17
|
+
}
|
|
18
|
+
|
|
12
19
|
/** Get the queue file path */
|
|
13
20
|
export function getQueuePath(): string {
|
|
14
|
-
return join(
|
|
21
|
+
return join(getHookDataDir(), 'hook-queue.jsonl')
|
|
15
22
|
}
|
|
16
23
|
|
|
17
24
|
/**
|