@winspan/claude-forge 8.51.0 → 8.51.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/CLAUDE.md CHANGED
@@ -245,21 +245,21 @@ npm test # 运行测试
245
245
 
246
246
  (由 daemon 自动更新,记录最近任务上下文)
247
247
 
248
- <!-- forge:resume-begin:59b0c3d6-d5a1-404a-aaca-4dba054b5ca5 -->
248
+ <!-- forge:resume-begin:c726870f-5a76-4899-aaf8-bfe21e4ab45d -->
249
249
  ```forge-resume-body
250
250
  ## 上次工作续接
251
251
 
252
252
  ⚠️ **IMPORTANT: 在开始新任务前,请先检查以下上下文**
253
253
 
254
254
  **上次在做**:
255
- - 先进行提交,升级npm版本并推送
255
+ - <task-notification>
256
256
 
257
257
  **上次活跃**: 刚刚
258
258
 
259
- **会话行为**: 工具调用 2412 次 | Agent 委托 68 次 (Explore, coder, planner) | Skill 调用 31 次
259
+ **会话行为**: 工具调用 2480 次 | Agent 委托 70 次 (Explore, coder, planner) | Skill 调用 31 次
260
260
 
261
- _生成时间: 2026-05-18T08:43:39.553Z_
261
+ _生成时间: 2026-05-18T09:01:35.482Z_
262
262
  ```
263
263
 
264
- _生成时间: 2026-05-18T08:43:39.556Z_
265
- <!-- forge:resume-end:59b0c3d6-d5a1-404a-aaca-4dba054b5ca5 -->
264
+ _生成时间: 2026-05-18T09:01:35.484Z_
265
+ <!-- forge:resume-end:c726870f-5a76-4899-aaf8-bfe21e4ab45d -->
@@ -0,0 +1,17 @@
1
+ export interface SyncResult {
2
+ copied: number;
3
+ checked: number;
4
+ skipped: number;
5
+ }
6
+ /**
7
+ * Sync hooks from the package source (dist/hooks) to ~/.claude-forge/hooks/.
8
+ * Uses SHA-256 comparison to skip identical files.
9
+ *
10
+ * Accepts optional overrides for source/target dirs — used in unit tests.
11
+ * Any failure logs a warning and continues; never throws.
12
+ */
13
+ export declare function syncHooks(opts?: {
14
+ sourceDir?: string;
15
+ targetDir?: string;
16
+ }): SyncResult;
17
+ //# sourceMappingURL=hook-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-sync.d.ts","sourceRoot":"","sources":["../../src/daemon/hook-sync.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAkDvF"}
@@ -0,0 +1,74 @@
1
+ import { existsSync, readFileSync, copyFileSync, chmodSync } from 'node:fs';
2
+ import { createHash } from 'node:crypto';
3
+ import { join, dirname } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { FORGE_PATHS } from '../core/constants.js';
6
+ import { logger } from '../core/utils/logger.js';
7
+ // All hook files to sync (5 hooks + shared lib)
8
+ const HOOK_FILES = [
9
+ 'pre-tool-use.sh',
10
+ 'post-tool-use.sh',
11
+ 'user-prompt-submit.sh',
12
+ 'notification.sh',
13
+ 'stop.sh',
14
+ 'hook-lib.sh',
15
+ ];
16
+ function sha256(content) {
17
+ return createHash('sha256').update(content).digest('hex');
18
+ }
19
+ function getSourceHooksDir() {
20
+ // Compiled: dist/daemon/hook-sync.js → dist/hooks
21
+ // Dev (vitest): src/daemon/hook-sync.ts → src/hooks
22
+ return join(dirname(fileURLToPath(import.meta.url)), '..', 'hooks');
23
+ }
24
+ /**
25
+ * Sync hooks from the package source (dist/hooks) to ~/.claude-forge/hooks/.
26
+ * Uses SHA-256 comparison to skip identical files.
27
+ *
28
+ * Accepts optional overrides for source/target dirs — used in unit tests.
29
+ * Any failure logs a warning and continues; never throws.
30
+ */
31
+ export function syncHooks(opts) {
32
+ const result = { copied: 0, checked: 0, skipped: 0 };
33
+ const sourceDir = opts?.sourceDir ?? getSourceHooksDir();
34
+ const targetDir = opts?.targetDir ?? FORGE_PATHS.hooks();
35
+ if (!existsSync(sourceDir)) {
36
+ logger.warn(`[HookSync] source hooks dir not found at ${sourceDir}, skipping`);
37
+ return result;
38
+ }
39
+ if (!existsSync(targetDir)) {
40
+ // User has not run `claude-forge init` yet — skip silently
41
+ logger.debug(`[HookSync] target dir not found: ${targetDir} (user may not have run \`claude-forge init\`)`);
42
+ return result;
43
+ }
44
+ for (const file of HOOK_FILES) {
45
+ const src = join(sourceDir, file);
46
+ const dest = join(targetDir, file);
47
+ if (!existsSync(src)) {
48
+ result.skipped++;
49
+ continue;
50
+ }
51
+ result.checked++;
52
+ try {
53
+ const srcContent = readFileSync(src);
54
+ if (existsSync(dest)) {
55
+ const destContent = readFileSync(dest);
56
+ if (sha256(srcContent) === sha256(destContent)) {
57
+ continue; // identical — no copy needed
58
+ }
59
+ }
60
+ copyFileSync(src, dest);
61
+ chmodSync(dest, 0o755);
62
+ result.copied++;
63
+ logger.info(`[HookSync] updated ${file}`);
64
+ }
65
+ catch (err) {
66
+ logger.warn(`[HookSync] failed to sync ${file}: ${err instanceof Error ? err.message : String(err)}`);
67
+ }
68
+ }
69
+ if (result.copied > 0) {
70
+ logger.info(`[HookSync] synced ${result.copied}/${result.checked} hook files`);
71
+ }
72
+ return result;
73
+ }
74
+ //# sourceMappingURL=hook-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-sync.js","sourceRoot":"","sources":["../../src/daemon/hook-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,gDAAgD;AAChD,MAAM,UAAU,GAAG;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,uBAAuB;IACvB,iBAAiB;IACjB,SAAS;IACT,aAAa;CACd,CAAC;AAEF,SAAS,MAAM,CAAC,OAAe;IAC7B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,iBAAiB;IACxB,kDAAkD;IAClD,oDAAoD;IACpD,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAiD;IACzE,MAAM,MAAM,GAAe,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,iBAAiB,EAAE,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;IAEzD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,4CAA4C,SAAS,YAAY,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,2DAA2D;QAC3D,MAAM,CAAC,KAAK,CAAC,oCAAoC,SAAS,gDAAgD,CAAC,CAAC;QAC5G,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC/C,SAAS,CAAC,6BAA6B;gBACzC,CAAC;YACH,CAAC;YAED,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxB,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACvB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,6BAA6B,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiCH,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,UAAU,GAAE,OAAe,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4OzG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkCH,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,UAAU,GAAE,OAAe,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqPzG"}
@@ -25,6 +25,7 @@ import { ConventionExtractor } from '../claudemd/convention-extractor.js';
25
25
  import { UserPromptHandler } from './handlers/user-prompt.js';
26
26
  import { PostToolUseHandler } from './handlers/post-tool-use.js';
27
27
  import { StopHandler } from './handlers/stop.js';
28
+ import { syncHooks } from './hook-sync.js';
28
29
  import { replayQueue } from '../core/queue/index.js';
29
30
  import { DEFAULTS } from '../core/constants.js';
30
31
  import { getUserPrompt } from '../core/event-fields.js';
@@ -52,6 +53,15 @@ export async function startDaemon(foreground = false, options = {}) {
52
53
  const dbPath = expandPath(config.storage.path);
53
54
  const storage = new SQLiteStorage(dbPath);
54
55
  logger.info(`Storage initialized: ${dbPath}`);
56
+ // ── 3.5. Auto-sync hooks ────────────────────────────────────────────────
57
+ // npm upgrade 不会自动更新 ~/.claude-forge/hooks/,每次 daemon 启动
58
+ // 用 SHA-256 比对源 dist/hooks 与本地副本,不一致则覆盖。
59
+ try {
60
+ syncHooks();
61
+ }
62
+ catch (err) {
63
+ logger.warn(`[HookSync] unexpected error: ${err}`);
64
+ }
55
65
  // ── 4. AI Provider ─────────────────────────────────────────────────────────
56
66
  const apiKey = config.ai.api_key || process.env.ANTHROPIC_API_KEY || '';
57
67
  if (!apiKey) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winspan/claude-forge",
3
- "version": "8.51.0",
3
+ "version": "8.51.1",
4
4
  "description": "SDLC intelligent orchestration engine for Claude Code",
5
5
  "main": "dist/cli/index.js",
6
6
  "type": "module",
@@ -0,0 +1,91 @@
1
+ import { existsSync, readFileSync, copyFileSync, chmodSync } from 'node:fs';
2
+ import { createHash } from 'node:crypto';
3
+ import { join, dirname } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { FORGE_PATHS } from '../core/constants.js';
6
+ import { logger } from '../core/utils/logger.js';
7
+
8
+ // All hook files to sync (5 hooks + shared lib)
9
+ const HOOK_FILES = [
10
+ 'pre-tool-use.sh',
11
+ 'post-tool-use.sh',
12
+ 'user-prompt-submit.sh',
13
+ 'notification.sh',
14
+ 'stop.sh',
15
+ 'hook-lib.sh',
16
+ ];
17
+
18
+ function sha256(content: Buffer): string {
19
+ return createHash('sha256').update(content).digest('hex');
20
+ }
21
+
22
+ function getSourceHooksDir(): string {
23
+ // Compiled: dist/daemon/hook-sync.js → dist/hooks
24
+ // Dev (vitest): src/daemon/hook-sync.ts → src/hooks
25
+ return join(dirname(fileURLToPath(import.meta.url)), '..', 'hooks');
26
+ }
27
+
28
+ export interface SyncResult {
29
+ copied: number;
30
+ checked: number;
31
+ skipped: number;
32
+ }
33
+
34
+ /**
35
+ * Sync hooks from the package source (dist/hooks) to ~/.claude-forge/hooks/.
36
+ * Uses SHA-256 comparison to skip identical files.
37
+ *
38
+ * Accepts optional overrides for source/target dirs — used in unit tests.
39
+ * Any failure logs a warning and continues; never throws.
40
+ */
41
+ export function syncHooks(opts?: { sourceDir?: string; targetDir?: string }): SyncResult {
42
+ const result: SyncResult = { copied: 0, checked: 0, skipped: 0 };
43
+ const sourceDir = opts?.sourceDir ?? getSourceHooksDir();
44
+ const targetDir = opts?.targetDir ?? FORGE_PATHS.hooks();
45
+
46
+ if (!existsSync(sourceDir)) {
47
+ logger.warn(`[HookSync] source hooks dir not found at ${sourceDir}, skipping`);
48
+ return result;
49
+ }
50
+
51
+ if (!existsSync(targetDir)) {
52
+ // User has not run `claude-forge init` yet — skip silently
53
+ logger.debug(`[HookSync] target dir not found: ${targetDir} (user may not have run \`claude-forge init\`)`);
54
+ return result;
55
+ }
56
+
57
+ for (const file of HOOK_FILES) {
58
+ const src = join(sourceDir, file);
59
+ const dest = join(targetDir, file);
60
+
61
+ if (!existsSync(src)) {
62
+ result.skipped++;
63
+ continue;
64
+ }
65
+
66
+ result.checked++;
67
+
68
+ try {
69
+ const srcContent = readFileSync(src);
70
+ if (existsSync(dest)) {
71
+ const destContent = readFileSync(dest);
72
+ if (sha256(srcContent) === sha256(destContent)) {
73
+ continue; // identical — no copy needed
74
+ }
75
+ }
76
+
77
+ copyFileSync(src, dest);
78
+ chmodSync(dest, 0o755);
79
+ result.copied++;
80
+ logger.info(`[HookSync] updated ${file}`);
81
+ } catch (err) {
82
+ logger.warn(`[HookSync] failed to sync ${file}: ${err instanceof Error ? err.message : String(err)}`);
83
+ }
84
+ }
85
+
86
+ if (result.copied > 0) {
87
+ logger.info(`[HookSync] synced ${result.copied}/${result.checked} hook files`);
88
+ }
89
+
90
+ return result;
91
+ }
@@ -34,6 +34,7 @@ import { ConventionExtractor } from '../claudemd/convention-extractor.js';
34
34
  import { UserPromptHandler } from './handlers/user-prompt.js';
35
35
  import { PostToolUseHandler } from './handlers/post-tool-use.js';
36
36
  import { StopHandler } from './handlers/stop.js';
37
+ import { syncHooks } from './hook-sync.js';
37
38
  import { replayQueue } from '../core/queue/index.js';
38
39
  import { DEFAULTS } from '../core/constants.js';
39
40
  import type { ForgeEvent } from '../core/types.js';
@@ -74,6 +75,15 @@ export async function startDaemon(foreground: boolean = false, options: DaemonOp
74
75
  const storage = new SQLiteStorage(dbPath);
75
76
  logger.info(`Storage initialized: ${dbPath}`);
76
77
 
78
+ // ── 3.5. Auto-sync hooks ────────────────────────────────────────────────
79
+ // npm upgrade 不会自动更新 ~/.claude-forge/hooks/,每次 daemon 启动
80
+ // 用 SHA-256 比对源 dist/hooks 与本地副本,不一致则覆盖。
81
+ try {
82
+ syncHooks();
83
+ } catch (err) {
84
+ logger.warn(`[HookSync] unexpected error: ${err}`);
85
+ }
86
+
77
87
  // ── 4. AI Provider ─────────────────────────────────────────────────────────
78
88
  const apiKey = config.ai.api_key || process.env.ANTHROPIC_API_KEY || '';
79
89
  if (!apiKey) {
@@ -0,0 +1,71 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdtempSync, mkdirSync, writeFileSync, rmSync, existsSync, readFileSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { syncHooks } from '../../../src/daemon/hook-sync.js';
6
+
7
+ describe('syncHooks', () => {
8
+ let tmpRoot: string;
9
+ let sourceDir: string;
10
+ let targetDir: string;
11
+
12
+ beforeEach(() => {
13
+ tmpRoot = mkdtempSync(join(tmpdir(), 'forge-hook-sync-'));
14
+ sourceDir = join(tmpRoot, 'src-hooks');
15
+ targetDir = join(tmpRoot, 'target-hooks');
16
+ mkdirSync(sourceDir, { recursive: true });
17
+ });
18
+
19
+ afterEach(() => {
20
+ rmSync(tmpRoot, { recursive: true, force: true });
21
+ });
22
+
23
+ it('target dir not exist → returns zero counts (user did not init)', () => {
24
+ writeFileSync(join(sourceDir, 'pre-tool-use.sh'), '#!/bin/bash\necho "new"\n');
25
+ const result = syncHooks({ sourceDir, targetDir });
26
+ expect(result.copied).toBe(0);
27
+ expect(result.checked).toBe(0);
28
+ });
29
+
30
+ it('source and target identical → no copy', () => {
31
+ mkdirSync(targetDir, { recursive: true });
32
+ const content = '#!/bin/bash\necho "same"\n';
33
+ writeFileSync(join(sourceDir, 'pre-tool-use.sh'), content);
34
+ writeFileSync(join(targetDir, 'pre-tool-use.sh'), content);
35
+
36
+ const result = syncHooks({ sourceDir, targetDir });
37
+ expect(result.copied).toBe(0);
38
+ expect(result.checked).toBe(1);
39
+ });
40
+
41
+ it('source and target differ → copies new content', () => {
42
+ mkdirSync(targetDir, { recursive: true });
43
+ writeFileSync(join(sourceDir, 'pre-tool-use.sh'), '#!/bin/bash\necho "NEW"\n');
44
+ writeFileSync(join(targetDir, 'pre-tool-use.sh'), '#!/bin/bash\necho "old"\n');
45
+
46
+ const result = syncHooks({ sourceDir, targetDir });
47
+ expect(result.copied).toBe(1);
48
+ expect(result.checked).toBe(1);
49
+ expect(readFileSync(join(targetDir, 'pre-tool-use.sh'), 'utf-8')).toContain('NEW');
50
+ });
51
+
52
+ it('target missing file but exists in source → copies it', () => {
53
+ mkdirSync(targetDir, { recursive: true });
54
+ writeFileSync(join(sourceDir, 'hook-lib.sh'), '# lib\n');
55
+ // target has no hook-lib.sh
56
+
57
+ const result = syncHooks({ sourceDir, targetDir });
58
+ expect(result.copied).toBe(1);
59
+ expect(existsSync(join(targetDir, 'hook-lib.sh'))).toBe(true);
60
+ });
61
+
62
+ it('source missing some files → skips them silently', () => {
63
+ mkdirSync(targetDir, { recursive: true });
64
+ // Only one source file out of 6
65
+ writeFileSync(join(sourceDir, 'pre-tool-use.sh'), '#!/bin/bash\necho "x"\n');
66
+
67
+ const result = syncHooks({ sourceDir, targetDir });
68
+ expect(result.checked).toBe(1);
69
+ expect(result.skipped).toBe(5);
70
+ });
71
+ });