sumulige-claude 1.3.1 → 1.3.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.
Files changed (38) hide show
  1. package/.claude/MEMORY.md +9 -0
  2. package/.claude/handoffs/INDEX.md +21 -0
  3. package/.claude/handoffs/LATEST.md +76 -0
  4. package/.claude/handoffs/handoff_2026-01-22T13-07-04-757Z.md +76 -0
  5. package/.claude/hooks/auto-handoff.cjs +353 -0
  6. package/.claude/hooks/memory-loader.cjs +208 -0
  7. package/.claude/hooks/memory-saver.cjs +268 -0
  8. package/.claude/sessions/session_2026-01-22T13-07-26-625Z.json +23 -0
  9. package/.claude/settings.json +40 -0
  10. package/.claude/settings.local.json +5 -1
  11. package/.claude/skills/api-tester/SKILL.md +61 -0
  12. package/.claude/skills/api-tester/examples/basic.md +3 -0
  13. package/.claude/skills/api-tester/metadata.yaml +30 -0
  14. package/.claude/skills/api-tester/templates/default.md +3 -0
  15. package/.claude/skills/code-reviewer-123/SKILL.md +61 -0
  16. package/.claude/skills/code-reviewer-123/examples/basic.md +3 -0
  17. package/.claude/skills/code-reviewer-123/metadata.yaml +30 -0
  18. package/.claude/skills/code-reviewer-123/templates/default.md +3 -0
  19. package/.claude/skills/my-skill/SKILL.md +61 -0
  20. package/.claude/skills/my-skill/examples/basic.md +3 -0
  21. package/.claude/skills/my-skill/metadata.yaml +30 -0
  22. package/.claude/skills/my-skill/templates/default.md +3 -0
  23. package/.claude/skills/template/SKILL.md +6 -0
  24. package/.claude/skills/template/metadata.yaml +30 -0
  25. package/.claude/skills/test-skill-name/SKILL.md +61 -0
  26. package/.claude/skills/test-skill-name/examples/basic.md +3 -0
  27. package/.claude/skills/test-skill-name/metadata.yaml +30 -0
  28. package/.claude/skills/test-skill-name/templates/default.md +3 -0
  29. package/CHANGELOG.md +35 -0
  30. package/README.md +62 -0
  31. package/cli.js +1 -1
  32. package/development/todos/.state.json +3 -1
  33. package/lib/commands.js +83 -0
  34. package/package.json +1 -1
  35. package/template/.claude/hooks/auto-handoff.cjs +353 -0
  36. package/template/.claude/hooks/memory-loader.cjs +208 -0
  37. package/template/.claude/hooks/memory-saver.cjs +268 -0
  38. package/template/.claude/settings.json +40 -0
@@ -0,0 +1,61 @@
1
+ # Code Reviewer 123
2
+
3
+ > 简短描述这个技能的作用(一句话)
4
+
5
+ **版本**: 1.0.0
6
+ **作者**: @username
7
+ **标签**: [category1, category2]
8
+ **难度**: 初级/中级/高级
9
+
10
+ ---
11
+
12
+ ## 概述
13
+
14
+ 详细描述这个技能的功能和用途。
15
+
16
+ ## 适用场景
17
+
18
+ - 场景 1
19
+ - 场景 2
20
+ - 场景 3
21
+
22
+ ## 触发关键词
23
+
24
+ ```
25
+ keyword1, keyword2, "exact phrase"
26
+ ```
27
+
28
+ ## 使用方法
29
+
30
+ ### 基础用法
31
+
32
+ ```bash
33
+ # 示例命令
34
+ your-command-here
35
+ ```
36
+
37
+ ### 高级用法
38
+
39
+ ```yaml
40
+ # 配置示例
41
+ key: value
42
+ ```
43
+
44
+ ## 输出格式
45
+
46
+ 描述这个技能的输出结果格式。
47
+
48
+ ## 注意事项
49
+
50
+ - 注意事项 1
51
+ - 注意事项 2
52
+
53
+ ## 相关技能
54
+
55
+ - [related-skill](../related-skill/)
56
+ - [another-skill](../another-skill/)
57
+
58
+ ## 更新日志
59
+
60
+ ### 1.0.0 (YYYY-MM-DD)
61
+ - 初始版本
@@ -0,0 +1,3 @@
1
+ # Basic Example for code-reviewer-123
2
+
3
+ Replace this with your actual example.
@@ -0,0 +1,30 @@
1
+ # Skill Metadata
2
+ # 这个文件定义技能的基本信息,用于自动发现和索引
3
+
4
+ name: code-reviewer-123
5
+ version: 1.0.0
6
+ author: @username
7
+ description: 简短描述技能功能
8
+
9
+ tags:
10
+ - category1
11
+ - category2
12
+
13
+ triggers:
14
+ - keyword1
15
+ - keyword2
16
+ - "exact phrase"
17
+
18
+ dependencies: [] # 依赖的其他技能
19
+
20
+ difficulty: beginner # beginner | intermediate | advanced
21
+
22
+ # 模板文件
23
+ templates:
24
+ - name: default
25
+ file: templates/default.md
26
+
27
+ # 示例文件
28
+ examples:
29
+ - name: basic
30
+ file: examples/basic.md
@@ -0,0 +1,3 @@
1
+ # Default Template for code-reviewer-123
2
+
3
+ Replace this with your actual template.
@@ -0,0 +1,61 @@
1
+ # My Skill
2
+
3
+ > 简短描述这个技能的作用(一句话)
4
+
5
+ **版本**: 1.0.0
6
+ **作者**: @username
7
+ **标签**: [category1, category2]
8
+ **难度**: 初级/中级/高级
9
+
10
+ ---
11
+
12
+ ## 概述
13
+
14
+ 详细描述这个技能的功能和用途。
15
+
16
+ ## 适用场景
17
+
18
+ - 场景 1
19
+ - 场景 2
20
+ - 场景 3
21
+
22
+ ## 触发关键词
23
+
24
+ ```
25
+ keyword1, keyword2, "exact phrase"
26
+ ```
27
+
28
+ ## 使用方法
29
+
30
+ ### 基础用法
31
+
32
+ ```bash
33
+ # 示例命令
34
+ your-command-here
35
+ ```
36
+
37
+ ### 高级用法
38
+
39
+ ```yaml
40
+ # 配置示例
41
+ key: value
42
+ ```
43
+
44
+ ## 输出格式
45
+
46
+ 描述这个技能的输出结果格式。
47
+
48
+ ## 注意事项
49
+
50
+ - 注意事项 1
51
+ - 注意事项 2
52
+
53
+ ## 相关技能
54
+
55
+ - [related-skill](../related-skill/)
56
+ - [another-skill](../another-skill/)
57
+
58
+ ## 更新日志
59
+
60
+ ### 1.0.0 (YYYY-MM-DD)
61
+ - 初始版本
@@ -0,0 +1,3 @@
1
+ # Basic Example for my-skill
2
+
3
+ Replace this with your actual example.
@@ -0,0 +1,30 @@
1
+ # Skill Metadata
2
+ # 这个文件定义技能的基本信息,用于自动发现和索引
3
+
4
+ name: my-skill
5
+ version: 1.0.0
6
+ author: @username
7
+ description: 简短描述技能功能
8
+
9
+ tags:
10
+ - category1
11
+ - category2
12
+
13
+ triggers:
14
+ - keyword1
15
+ - keyword2
16
+ - "exact phrase"
17
+
18
+ dependencies: [] # 依赖的其他技能
19
+
20
+ difficulty: beginner # beginner | intermediate | advanced
21
+
22
+ # 模板文件
23
+ templates:
24
+ - name: default
25
+ file: templates/default.md
26
+
27
+ # 示例文件
28
+ examples:
29
+ - name: basic
30
+ file: examples/basic.md
@@ -0,0 +1,3 @@
1
+ # Default Template for my-skill
2
+
3
+ Replace this with your actual template.
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: template-skill
3
+ description: Replace with description of the skill and when Claude should use it.
4
+ ---
5
+
6
+ # Insert instructions below
@@ -0,0 +1,30 @@
1
+ # Skill Metadata
2
+ # 这个文件定义技能的基本信息,用于自动发现和索引
3
+
4
+ name: skill-name
5
+ version: 1.0.0
6
+ author: @username
7
+ description: 简短描述技能功能
8
+
9
+ tags:
10
+ - category1
11
+ - category2
12
+
13
+ triggers:
14
+ - keyword1
15
+ - keyword2
16
+ - "exact phrase"
17
+
18
+ dependencies: [] # 依赖的其他技能
19
+
20
+ difficulty: beginner # beginner | intermediate | advanced
21
+
22
+ # 模板文件
23
+ templates:
24
+ - name: default
25
+ file: templates/default.md
26
+
27
+ # 示例文件
28
+ examples:
29
+ - name: basic
30
+ file: examples/basic.md
@@ -0,0 +1,61 @@
1
+ # Test Skill Name
2
+
3
+ > 简短描述这个技能的作用(一句话)
4
+
5
+ **版本**: 1.0.0
6
+ **作者**: @username
7
+ **标签**: [category1, category2]
8
+ **难度**: 初级/中级/高级
9
+
10
+ ---
11
+
12
+ ## 概述
13
+
14
+ 详细描述这个技能的功能和用途。
15
+
16
+ ## 适用场景
17
+
18
+ - 场景 1
19
+ - 场景 2
20
+ - 场景 3
21
+
22
+ ## 触发关键词
23
+
24
+ ```
25
+ keyword1, keyword2, "exact phrase"
26
+ ```
27
+
28
+ ## 使用方法
29
+
30
+ ### 基础用法
31
+
32
+ ```bash
33
+ # 示例命令
34
+ your-command-here
35
+ ```
36
+
37
+ ### 高级用法
38
+
39
+ ```yaml
40
+ # 配置示例
41
+ key: value
42
+ ```
43
+
44
+ ## 输出格式
45
+
46
+ 描述这个技能的输出结果格式。
47
+
48
+ ## 注意事项
49
+
50
+ - 注意事项 1
51
+ - 注意事项 2
52
+
53
+ ## 相关技能
54
+
55
+ - [related-skill](../related-skill/)
56
+ - [another-skill](../another-skill/)
57
+
58
+ ## 更新日志
59
+
60
+ ### 1.0.0 (YYYY-MM-DD)
61
+ - 初始版本
@@ -0,0 +1,3 @@
1
+ # Basic Example for test-skill-name
2
+
3
+ Replace this with your actual example.
@@ -0,0 +1,30 @@
1
+ # Skill Metadata
2
+ # 这个文件定义技能的基本信息,用于自动发现和索引
3
+
4
+ name: test-skill-name
5
+ version: 1.0.0
6
+ author: @username
7
+ description: 简短描述技能功能
8
+
9
+ tags:
10
+ - category1
11
+ - category2
12
+
13
+ triggers:
14
+ - keyword1
15
+ - keyword2
16
+ - "exact phrase"
17
+
18
+ dependencies: [] # 依赖的其他技能
19
+
20
+ difficulty: beginner # beginner | intermediate | advanced
21
+
22
+ # 模板文件
23
+ templates:
24
+ - name: default
25
+ file: templates/default.md
26
+
27
+ # 示例文件
28
+ examples:
29
+ - name: basic
30
+ file: examples/basic.md
@@ -0,0 +1,3 @@
1
+ # Default Template for test-skill-name
2
+
3
+ Replace this with your actual template.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,38 @@
1
+ ## [1.3.3](https://github.com/sumulige/sumulige-claude/compare/v1.3.2...v1.3.3) (2026-01-22)
2
+
3
+ ### ✨ New Features
4
+
5
+ - **`smc sync --hooks`**: Incremental hooks update for existing projects
6
+ - Adds new lifecycle hooks without overwriting customizations
7
+ - Merges SessionStart/SessionEnd/PreCompact into existing settings.json
8
+
9
+ ### 📝 Documentation
10
+
11
+ - Add Layer 7: Lifecycle Hooks section to README
12
+ - Document update methods for other projects
13
+
14
+ ---
15
+
16
+ ## [1.3.2](https://github.com/sumulige/sumulige-claude/compare/v1.3.1...v1.3.2) (2026-01-22)
17
+
18
+ ### ✨ New Features
19
+
20
+ - **Official Hooks Integration**: Claude Code lifecycle auto-sync
21
+ - `SessionStart` → `memory-loader.cjs`: Auto-load MEMORY.md, ANCHORS.md, restore TODO state
22
+ - `SessionEnd` → `memory-saver.cjs`: Auto-save session summary, archive session, sync TODO
23
+ - `PreCompact` → `auto-handoff.cjs`: Auto-generate handoff before context compression
24
+ - **Context Preservation**: Automatic handoff documents in `.claude/handoffs/`
25
+ - Includes active TODOs, recently modified files, recovery commands
26
+ - `LATEST.md` always points to most recent handoff
27
+
28
+ ### 🔧 Improvements
29
+
30
+ - Session state tracking via `.session-state.json`
31
+ - Automatic session archiving to `.claude/sessions/`
32
+ - Memory entries kept for 7 days with auto-cleanup
33
+
34
+ ---
35
+
1
36
  ## [1.3.1](https://github.com/sumulige/sumulige-claude/compare/v1.3.0...v1.3.1) (2026-01-22)
2
37
 
3
38
  ### ✨ New Features
package/README.md CHANGED
@@ -400,6 +400,68 @@ smc skill:create my-skill
400
400
 
401
401
  ---
402
402
 
403
+ ## Layer 7: Lifecycle Hooks / 第七层:生命周期钩子
404
+
405
+ ### Auto-Sync System / 自动同步系统
406
+
407
+ > v1.3.2: 利用 Claude Code 官方 Hook 事件实现记忆自动同步
408
+
409
+ ```
410
+ ┌─────────────────────────────────────────────────────────────┐
411
+ │ SessionStart ──► memory-loader.cjs │
412
+ │ └─ 自动加载 MEMORY.md, ANCHORS.md, TODO 状态 │
413
+ │ │
414
+ │ PreCompact ──► auto-handoff.cjs │
415
+ │ └─ 上下文压缩前自动生成 handoff 文档 │
416
+ │ │
417
+ │ SessionEnd ──► memory-saver.cjs │
418
+ │ └─ 会话结束自动保存摘要到 MEMORY.md │
419
+ └─────────────────────────────────────────────────────────────┘
420
+ ```
421
+
422
+ ### Hook Files / 钩子文件
423
+
424
+ | Hook | 文件 | 触发时机 | 功能 |
425
+ |------|------|----------|------|
426
+ | `SessionStart` | `memory-loader.cjs` | 会话开始 | 加载记忆、锚点、TODO |
427
+ | `SessionEnd` | `memory-saver.cjs` | 会话结束 | 保存摘要、归档会话 |
428
+ | `PreCompact` | `auto-handoff.cjs` | 上下文压缩前 | 生成 handoff 保护上下文 |
429
+
430
+ ### Handoff Documents / 交接文档
431
+
432
+ 当上下文即将被压缩时,自动生成交接文档:
433
+
434
+ ```
435
+ .claude/handoffs/
436
+ ├── LATEST.md # 最新交接文档
437
+ ├── INDEX.md # 交接文档索引
438
+ └── handoff_*.md # 历史交接文档
439
+ ```
440
+
441
+ 每个交接文档包含:
442
+ - 会话信息(项目、版本、开始时间)
443
+ - 活跃 TODOs 列表
444
+ - 最近修改的文件
445
+ - 恢复命令
446
+
447
+ ### Update Hooks / 更新钩子
448
+
449
+ 其他项目如何获取新 hooks:
450
+
451
+ ```bash
452
+ # 方式 1: 完整更新(推荐)
453
+ smc template --force
454
+
455
+ # 方式 2: 增量同步(仅更新 hooks)
456
+ smc sync --hooks
457
+
458
+ # 方式 3: 手动安装
459
+ npm update -g sumulige-claude
460
+ smc template
461
+ ```
462
+
463
+ ---
464
+
403
465
  ## Documentation / 文档
404
466
 
405
467
  - **[Development Guide / 开发指南](docs/DEVELOPMENT.md)** - Architecture, adding skills / 架构、添加技能
package/cli.js CHANGED
@@ -30,7 +30,7 @@ const COMMANDS = {
30
30
  },
31
31
  sync: {
32
32
  help: 'Sync to current project (auto-migrates old format)',
33
- args: '[--check-update]'
33
+ args: '[--check-update] [--hooks]'
34
34
  },
35
35
  migrate: {
36
36
  help: 'Migrate old hooks format to new',
@@ -13,5 +13,7 @@
13
13
  "notified": true
14
14
  }
15
15
  },
16
- "transitions": []
16
+ "transitions": [],
17
+ "lastSynced": "2026-01-22T13:07:26.625Z",
18
+ "sessionId": "unknown"
17
19
  }
package/lib/commands.js CHANGED
@@ -335,6 +335,7 @@ const commands = {
335
335
  // -------------------------------------------------------------------------
336
336
  sync: async (...args) => {
337
337
  const forceCheckUpdate = args.includes("--check-update");
338
+ const syncHooks = args.includes("--hooks");
338
339
 
339
340
  console.log("🔄 Syncing Sumulige Claude to current project...");
340
341
  console.log("");
@@ -387,6 +388,88 @@ const commands = {
387
388
  }
388
389
  }
389
390
 
391
+ // Sync hooks if --hooks flag is provided
392
+ if (syncHooks) {
393
+ const templateHooksDir = path.join(TEMPLATE_DIR, ".claude", "hooks");
394
+ const projectHooksDir = path.join(projectConfigDir, "hooks");
395
+ const templateSettingsFile = path.join(
396
+ TEMPLATE_DIR,
397
+ ".claude",
398
+ "settings.json",
399
+ );
400
+ const projectSettingsFile = path.join(projectConfigDir, "settings.json");
401
+
402
+ if (fs.existsSync(templateHooksDir)) {
403
+ ensureDir(projectHooksDir);
404
+
405
+ // Sync hook files (only add new ones, don't overwrite)
406
+ const hookFiles = fs
407
+ .readdirSync(templateHooksDir)
408
+ .filter((f) => f.endsWith(".cjs"));
409
+ let syncedCount = 0;
410
+
411
+ hookFiles.forEach((hookFile) => {
412
+ const src = path.join(templateHooksDir, hookFile);
413
+ const dest = path.join(projectHooksDir, hookFile);
414
+
415
+ if (!fs.existsSync(dest)) {
416
+ fs.copyFileSync(src, dest);
417
+ setExecutablePermission(dest);
418
+ syncedCount++;
419
+ console.log(` ✅ Added ${hookFile}`);
420
+ }
421
+ });
422
+
423
+ if (syncedCount > 0) {
424
+ console.log(`✅ Synced ${syncedCount} new hook(s)`);
425
+ } else {
426
+ console.log("✅ Hooks up to date");
427
+ }
428
+ }
429
+
430
+ // Sync settings.json (merge new lifecycle hooks)
431
+ if (
432
+ fs.existsSync(templateSettingsFile) &&
433
+ fs.existsSync(projectSettingsFile)
434
+ ) {
435
+ try {
436
+ const templateSettings = JSON.parse(
437
+ fs.readFileSync(templateSettingsFile, "utf-8"),
438
+ );
439
+ const projectSettings = JSON.parse(
440
+ fs.readFileSync(projectSettingsFile, "utf-8"),
441
+ );
442
+
443
+ // Merge new lifecycle hooks
444
+ const lifecycleHooks = [
445
+ "SessionStart",
446
+ "SessionEnd",
447
+ "PreCompact",
448
+ "env",
449
+ ];
450
+ let updated = false;
451
+
452
+ lifecycleHooks.forEach((hook) => {
453
+ if (templateSettings[hook] && !projectSettings[hook]) {
454
+ projectSettings[hook] = templateSettings[hook];
455
+ updated = true;
456
+ console.log(` ✅ Added ${hook} hook`);
457
+ }
458
+ });
459
+
460
+ if (updated) {
461
+ fs.writeFileSync(
462
+ projectSettingsFile,
463
+ JSON.stringify(projectSettings, null, 2),
464
+ );
465
+ console.log("✅ Updated settings.json");
466
+ }
467
+ } catch (e) {
468
+ console.log("⚠️ Failed to merge settings.json");
469
+ }
470
+ }
471
+ }
472
+
390
473
  // Sync todos directory structure
391
474
  const todosTemplateDir = path.join(TEMPLATE_DIR, "development", "todos");
392
475
  const todosProjectDir = path.join(projectDir, "development", "todos");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sumulige-claude",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "The Best Agent Harness for Claude Code",
5
5
  "main": "cli.js",
6
6
  "bin": {