sumulige-claude 1.0.6 → 1.0.8

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 (53) hide show
  1. package/.claude/.kickoff-hint.txt +51 -0
  2. package/.claude/ANCHORS.md +40 -0
  3. package/.claude/MEMORY.md +34 -0
  4. package/.claude/PROJECT_LOG.md +101 -0
  5. package/.claude/THINKING_CHAIN_GUIDE.md +287 -0
  6. package/.claude/commands/commit-push-pr.md +59 -0
  7. package/.claude/commands/commit.md +53 -0
  8. package/.claude/commands/pr.md +76 -0
  9. package/.claude/commands/review.md +61 -0
  10. package/.claude/commands/sessions.md +62 -0
  11. package/.claude/commands/skill-create.md +131 -0
  12. package/.claude/commands/test.md +56 -0
  13. package/.claude/commands/todos.md +99 -0
  14. package/.claude/commands/verify-work.md +63 -0
  15. package/.claude/hooks/code-formatter.cjs +187 -0
  16. package/.claude/hooks/code-tracer.cjs +331 -0
  17. package/.claude/hooks/conversation-recorder.cjs +340 -0
  18. package/.claude/hooks/decision-tracker.cjs +398 -0
  19. package/.claude/hooks/export.cjs +329 -0
  20. package/.claude/hooks/multi-session.cjs +181 -0
  21. package/.claude/hooks/privacy-filter.js +224 -0
  22. package/.claude/hooks/project-kickoff.cjs +114 -0
  23. package/.claude/hooks/rag-skill-loader.cjs +159 -0
  24. package/.claude/hooks/session-end.sh +61 -0
  25. package/.claude/hooks/sync-to-log.sh +83 -0
  26. package/.claude/hooks/thinking-silent.cjs +145 -0
  27. package/.claude/hooks/tl-summary.sh +54 -0
  28. package/.claude/hooks/todo-manager.cjs +248 -0
  29. package/.claude/hooks/verify-work.cjs +134 -0
  30. package/.claude/sessions/active-sessions.json +359 -0
  31. package/.claude/settings.local.json +43 -2
  32. package/.claude/thinking-routes/.last-sync +1 -0
  33. package/.claude/thinking-routes/QUICKREF.md +98 -0
  34. package/.claude-plugin/marketplace.json +71 -0
  35. package/.github/workflows/sync-skills.yml +74 -0
  36. package/AGENTS.md +81 -22
  37. package/DEV_TOOLS_GUIDE.md +190 -0
  38. package/PROJECT_STRUCTURE.md +10 -1
  39. package/README.md +142 -708
  40. package/cli.js +116 -822
  41. package/config/defaults.json +34 -0
  42. package/config/skill-categories.json +40 -0
  43. package/development/todos/INDEX.md +14 -58
  44. package/docs/DEVELOPMENT.md +423 -0
  45. package/docs/MARKETPLACE.md +352 -0
  46. package/lib/commands.js +698 -0
  47. package/lib/config.js +71 -0
  48. package/lib/marketplace.js +486 -0
  49. package/lib/utils.js +62 -0
  50. package/package.json +11 -5
  51. package/scripts/sync-external.mjs +298 -0
  52. package/scripts/update-registry.mjs +325 -0
  53. package/sources.yaml +83 -0
@@ -0,0 +1,359 @@
1
+ [
2
+ {
3
+ "id": "session-24007-21777",
4
+ "identifier": "sumulige@M3 (darwin)",
5
+ "startedAt": 1768379744003,
6
+ "lastHeartbeat": 1768379744003,
7
+ "heartbeatCount": 1,
8
+ "status": "active"
9
+ },
10
+ {
11
+ "id": "session-24243-21777",
12
+ "identifier": "sumulige@M3 (darwin)",
13
+ "startedAt": 1768380026778,
14
+ "lastHeartbeat": 1768380026778,
15
+ "heartbeatCount": 1,
16
+ "status": "active"
17
+ },
18
+ {
19
+ "id": "session-24261-21777",
20
+ "identifier": "sumulige@M3 (darwin)",
21
+ "startedAt": 1768380041012,
22
+ "lastHeartbeat": 1768380041012,
23
+ "heartbeatCount": 1,
24
+ "status": "active"
25
+ },
26
+ {
27
+ "id": "session-24296-21777",
28
+ "identifier": "sumulige@M3 (darwin)",
29
+ "startedAt": 1768380114984,
30
+ "lastHeartbeat": 1768380114984,
31
+ "heartbeatCount": 1,
32
+ "status": "active"
33
+ },
34
+ {
35
+ "id": "session-25203-21777",
36
+ "identifier": "sumulige@M3 (darwin)",
37
+ "startedAt": 1768381841359,
38
+ "lastHeartbeat": 1768381841359,
39
+ "heartbeatCount": 1,
40
+ "status": "active"
41
+ },
42
+ {
43
+ "id": "session-25223-21777",
44
+ "identifier": "sumulige@M3 (darwin)",
45
+ "startedAt": 1768381898336,
46
+ "lastHeartbeat": 1768381898336,
47
+ "heartbeatCount": 1,
48
+ "status": "active"
49
+ },
50
+ {
51
+ "id": "session-25240-21777",
52
+ "identifier": "sumulige@M3 (darwin)",
53
+ "startedAt": 1768381909390,
54
+ "lastHeartbeat": 1768381909390,
55
+ "heartbeatCount": 1,
56
+ "status": "active"
57
+ },
58
+ {
59
+ "id": "session-25263-21777",
60
+ "identifier": "sumulige@M3 (darwin)",
61
+ "startedAt": 1768381940430,
62
+ "lastHeartbeat": 1768381940430,
63
+ "heartbeatCount": 1,
64
+ "status": "active"
65
+ },
66
+ {
67
+ "id": "session-25284-21777",
68
+ "identifier": "sumulige@M3 (darwin)",
69
+ "startedAt": 1768381952270,
70
+ "lastHeartbeat": 1768381952270,
71
+ "heartbeatCount": 1,
72
+ "status": "active"
73
+ },
74
+ {
75
+ "id": "session-25364-21777",
76
+ "identifier": "sumulige@M3 (darwin)",
77
+ "startedAt": 1768381961451,
78
+ "lastHeartbeat": 1768381961451,
79
+ "heartbeatCount": 1,
80
+ "status": "active"
81
+ },
82
+ {
83
+ "id": "session-25391-21777",
84
+ "identifier": "sumulige@M3 (darwin)",
85
+ "startedAt": 1768381967921,
86
+ "lastHeartbeat": 1768381967921,
87
+ "heartbeatCount": 1,
88
+ "status": "active"
89
+ },
90
+ {
91
+ "id": "session-25407-21777",
92
+ "identifier": "sumulige@M3 (darwin)",
93
+ "startedAt": 1768381976308,
94
+ "lastHeartbeat": 1768381976308,
95
+ "heartbeatCount": 1,
96
+ "status": "active"
97
+ },
98
+ {
99
+ "id": "session-25421-21777",
100
+ "identifier": "sumulige@M3 (darwin)",
101
+ "startedAt": 1768381986295,
102
+ "lastHeartbeat": 1768381986295,
103
+ "heartbeatCount": 1,
104
+ "status": "active"
105
+ },
106
+ {
107
+ "id": "session-25434-21777",
108
+ "identifier": "sumulige@M3 (darwin)",
109
+ "startedAt": 1768381991401,
110
+ "lastHeartbeat": 1768381991401,
111
+ "heartbeatCount": 1,
112
+ "status": "active"
113
+ },
114
+ {
115
+ "id": "session-25514-21777",
116
+ "identifier": "sumulige@M3 (darwin)",
117
+ "startedAt": 1768382141338,
118
+ "lastHeartbeat": 1768382141338,
119
+ "heartbeatCount": 1,
120
+ "status": "active"
121
+ },
122
+ {
123
+ "id": "session-25564-21777",
124
+ "identifier": "sumulige@M3 (darwin)",
125
+ "startedAt": 1768382147029,
126
+ "lastHeartbeat": 1768382147029,
127
+ "heartbeatCount": 1,
128
+ "status": "active"
129
+ },
130
+ {
131
+ "id": "session-25590-21777",
132
+ "identifier": "sumulige@M3 (darwin)",
133
+ "startedAt": 1768382194722,
134
+ "lastHeartbeat": 1768382194722,
135
+ "heartbeatCount": 1,
136
+ "status": "active"
137
+ },
138
+ {
139
+ "id": "session-25605-21777",
140
+ "identifier": "sumulige@M3 (darwin)",
141
+ "startedAt": 1768382200403,
142
+ "lastHeartbeat": 1768382200403,
143
+ "heartbeatCount": 1,
144
+ "status": "active"
145
+ },
146
+ {
147
+ "id": "session-25632-21777",
148
+ "identifier": "sumulige@M3 (darwin)",
149
+ "startedAt": 1768382206644,
150
+ "lastHeartbeat": 1768382206644,
151
+ "heartbeatCount": 1,
152
+ "status": "active"
153
+ },
154
+ {
155
+ "id": "session-25652-21777",
156
+ "identifier": "sumulige@M3 (darwin)",
157
+ "startedAt": 1768382206806,
158
+ "lastHeartbeat": 1768382206806,
159
+ "heartbeatCount": 1,
160
+ "status": "active"
161
+ },
162
+ {
163
+ "id": "session-25796-21777",
164
+ "identifier": "sumulige@M3 (darwin)",
165
+ "startedAt": 1768382343851,
166
+ "lastHeartbeat": 1768382343851,
167
+ "heartbeatCount": 1,
168
+ "status": "active"
169
+ },
170
+ {
171
+ "id": "session-25814-21777",
172
+ "identifier": "sumulige@M3 (darwin)",
173
+ "startedAt": 1768382362496,
174
+ "lastHeartbeat": 1768382362496,
175
+ "heartbeatCount": 1,
176
+ "status": "active"
177
+ },
178
+ {
179
+ "id": "session-25996-21777",
180
+ "identifier": "sumulige@M3 (darwin)",
181
+ "startedAt": 1768382669972,
182
+ "lastHeartbeat": 1768382669972,
183
+ "heartbeatCount": 1,
184
+ "status": "active"
185
+ },
186
+ {
187
+ "id": "session-26003-21777",
188
+ "identifier": "sumulige@M3 (darwin)",
189
+ "startedAt": 1768382669992,
190
+ "lastHeartbeat": 1768382669992,
191
+ "heartbeatCount": 1,
192
+ "status": "active"
193
+ },
194
+ {
195
+ "id": "session-26010-21777",
196
+ "identifier": "sumulige@M3 (darwin)",
197
+ "startedAt": 1768382669998,
198
+ "lastHeartbeat": 1768382669998,
199
+ "heartbeatCount": 1,
200
+ "status": "active"
201
+ },
202
+ {
203
+ "id": "session-26110-21777",
204
+ "identifier": "sumulige@M3 (darwin)",
205
+ "startedAt": 1768382728623,
206
+ "lastHeartbeat": 1768382728623,
207
+ "heartbeatCount": 1,
208
+ "status": "active"
209
+ },
210
+ {
211
+ "id": "session-26126-21777",
212
+ "identifier": "sumulige@M3 (darwin)",
213
+ "startedAt": 1768382733375,
214
+ "lastHeartbeat": 1768382733375,
215
+ "heartbeatCount": 1,
216
+ "status": "active"
217
+ },
218
+ {
219
+ "id": "session-26140-21777",
220
+ "identifier": "sumulige@M3 (darwin)",
221
+ "startedAt": 1768382749918,
222
+ "lastHeartbeat": 1768382749918,
223
+ "heartbeatCount": 1,
224
+ "status": "active"
225
+ },
226
+ {
227
+ "id": "session-26155-21777",
228
+ "identifier": "sumulige@M3 (darwin)",
229
+ "startedAt": 1768382752479,
230
+ "lastHeartbeat": 1768382752479,
231
+ "heartbeatCount": 1,
232
+ "status": "active"
233
+ },
234
+ {
235
+ "id": "session-26181-21777",
236
+ "identifier": "sumulige@M3 (darwin)",
237
+ "startedAt": 1768382792393,
238
+ "lastHeartbeat": 1768382792393,
239
+ "heartbeatCount": 1,
240
+ "status": "active"
241
+ },
242
+ {
243
+ "id": "session-26206-21777",
244
+ "identifier": "sumulige@M3 (darwin)",
245
+ "startedAt": 1768382840410,
246
+ "lastHeartbeat": 1768382840410,
247
+ "heartbeatCount": 1,
248
+ "status": "active"
249
+ },
250
+ {
251
+ "id": "session-26220-21777",
252
+ "identifier": "sumulige@M3 (darwin)",
253
+ "startedAt": 1768382843372,
254
+ "lastHeartbeat": 1768382843372,
255
+ "heartbeatCount": 1,
256
+ "status": "active"
257
+ },
258
+ {
259
+ "id": "session-26313-21777",
260
+ "identifier": "sumulige@M3 (darwin)",
261
+ "startedAt": 1768382884460,
262
+ "lastHeartbeat": 1768382884460,
263
+ "heartbeatCount": 1,
264
+ "status": "active"
265
+ },
266
+ {
267
+ "id": "session-26327-21777",
268
+ "identifier": "sumulige@M3 (darwin)",
269
+ "startedAt": 1768382893665,
270
+ "lastHeartbeat": 1768382893665,
271
+ "heartbeatCount": 1,
272
+ "status": "active"
273
+ },
274
+ {
275
+ "id": "session-26340-21777",
276
+ "identifier": "sumulige@M3 (darwin)",
277
+ "startedAt": 1768382896611,
278
+ "lastHeartbeat": 1768382896611,
279
+ "heartbeatCount": 1,
280
+ "status": "active"
281
+ },
282
+ {
283
+ "id": "session-26349-21777",
284
+ "identifier": "sumulige@M3 (darwin)",
285
+ "startedAt": 1768382899845,
286
+ "lastHeartbeat": 1768382899845,
287
+ "heartbeatCount": 1,
288
+ "status": "active"
289
+ },
290
+ {
291
+ "id": "session-26373-21777",
292
+ "identifier": "sumulige@M3 (darwin)",
293
+ "startedAt": 1768382925824,
294
+ "lastHeartbeat": 1768382925824,
295
+ "heartbeatCount": 1,
296
+ "status": "active"
297
+ },
298
+ {
299
+ "id": "session-26390-21777",
300
+ "identifier": "sumulige@M3 (darwin)",
301
+ "startedAt": 1768382946454,
302
+ "lastHeartbeat": 1768382946454,
303
+ "heartbeatCount": 1,
304
+ "status": "active"
305
+ },
306
+ {
307
+ "id": "session-26417-21777",
308
+ "identifier": "sumulige@M3 (darwin)",
309
+ "startedAt": 1768382960687,
310
+ "lastHeartbeat": 1768382960687,
311
+ "heartbeatCount": 1,
312
+ "status": "active"
313
+ },
314
+ {
315
+ "id": "session-26737-21777",
316
+ "identifier": "sumulige@M3 (darwin)",
317
+ "startedAt": 1768383271371,
318
+ "lastHeartbeat": 1768383271371,
319
+ "heartbeatCount": 1,
320
+ "status": "active",
321
+ "number": 1
322
+ },
323
+ {
324
+ "id": "session-26751-21777",
325
+ "identifier": "sumulige@M3 (darwin)",
326
+ "startedAt": 1768383271413,
327
+ "lastHeartbeat": 1768383271413,
328
+ "heartbeatCount": 1,
329
+ "status": "active",
330
+ "number": 2
331
+ },
332
+ {
333
+ "id": "session-26758-21777",
334
+ "identifier": "sumulige@M3 (darwin)",
335
+ "startedAt": 1768383271424,
336
+ "lastHeartbeat": 1768383271424,
337
+ "heartbeatCount": 1,
338
+ "status": "active",
339
+ "number": 3
340
+ },
341
+ {
342
+ "id": "session-26744-21777",
343
+ "identifier": "sumulige@M3 (darwin)",
344
+ "startedAt": 1768383271437,
345
+ "lastHeartbeat": 1768383271437,
346
+ "heartbeatCount": 1,
347
+ "status": "active",
348
+ "number": 4
349
+ },
350
+ {
351
+ "id": "session-26781-21777",
352
+ "identifier": "sumulige@M3 (darwin)",
353
+ "startedAt": 1768383304643,
354
+ "lastHeartbeat": 1768383304643,
355
+ "heartbeatCount": 1,
356
+ "status": "active",
357
+ "number": 5
358
+ }
359
+ ]
@@ -30,7 +30,48 @@
30
30
  "Bash(npm link:*)",
31
31
  "Bash(omc:*)",
32
32
  "Bash(gh pr:*)",
33
- "Bash(git pull:*)"
33
+ "Bash(git pull:*)",
34
+ "Skill(sessions)",
35
+ "Skill(todos)",
36
+ "Bash(.claude/hooks/tl-summary.sh)",
37
+ "Skill(theme-factory)",
38
+ "Bash(node .claude/hooks/*:*)",
39
+ "Bash(git remote set-url:*)",
40
+ "Bash(npm whoami)",
41
+ "Bash(npm adduser:*)",
42
+ "Bash(npm config set:*)",
43
+ "Bash(npm publish:*)",
44
+ "Bash(open:*)",
45
+ "Bash(tree:*)",
46
+ "Bash(npm run sync:all:*)",
47
+ "Bash(gh repo view:*)",
48
+ "Bash(npm config get:*)",
49
+ "Bash(npm version:*)",
50
+ "Bash(git restore:*)"
51
+ ]
52
+ },
53
+ "hooks": {
54
+ "UserPromptSubmit": [
55
+ {
56
+ "matcher": "",
57
+ "hooks": [
58
+ {
59
+ "type": "command",
60
+ "command": "node .claude/hooks/conversation-recorder.cjs user \"$ARGUMENTS\""
61
+ }
62
+ ]
63
+ }
64
+ ],
65
+ "SessionEnd": [
66
+ {
67
+ "matcher": "",
68
+ "hooks": [
69
+ {
70
+ "type": "command",
71
+ "command": "node .claude/hooks/conversation-recorder.cjs today"
72
+ }
73
+ ]
74
+ }
34
75
  ]
35
76
  }
36
- }
77
+ }
@@ -0,0 +1 @@
1
+ 100
@@ -0,0 +1,98 @@
1
+ # 对话历史速查卡
2
+
3
+ > 快速找到你的对话记录
4
+
5
+ ---
6
+
7
+ ## 🚀 最常用
8
+
9
+ | 命令 | 效果 |
10
+ |------|------|
11
+ | `tl` | 查看今日对话摘要 |
12
+ | `log` | 查看项目完整日志 |
13
+ | `memory` | 查看最近变更 |
14
+
15
+ ---
16
+
17
+ ## 📂 数据位置
18
+
19
+ ```
20
+ .claude/
21
+ ├── thinking-routes/
22
+ │ └── .conversation-flow.json ← 对话流数据
23
+ ├── MEMORY.md ← 增量记忆
24
+ ├── PROJECT_LOG.md ← 完整日志
25
+ └── ANCHORS.md ← 快速索引
26
+ ```
27
+
28
+ ---
29
+
30
+ ## 🔍 查找方式
31
+
32
+ ### 按时间查找
33
+ ```bash
34
+ # 最近对话摘要
35
+ .claude/hooks/tl-summary.sh
36
+
37
+ # 完整项目日志(按时间顺序)
38
+ cat .claude/PROJECT_LOG.md | grep "2026-01-11"
39
+ ```
40
+
41
+ ### 按关键词查找
42
+ ```bash
43
+ # 搜索思维节点
44
+ npx -p tsx tsx .claude/thinking-routes/index.ts search "数据分析"
45
+
46
+ # 在日志中搜索
47
+ cat .claude/PROJECT_LOG.md | grep -i "API"
48
+ ```
49
+
50
+ ### 按类型查找
51
+ ```bash
52
+ # 查看所有决策
53
+ cat .claude/PROJECT_LOG.md | grep "决策"
54
+
55
+ # 查看所有变更
56
+ cat .claude/MEMORY.md | grep "新增"
57
+ ```
58
+
59
+ ---
60
+
61
+ ## ⚡ 快捷别名
62
+
63
+ 添加到 `~/.zshrc` 或 `~/.bashrc`:
64
+
65
+ ```bash
66
+ # 对话历史
67
+ alias tl='.claude/hooks/tl-summary.sh'
68
+ alias log='less .claude/PROJECT_LOG.md'
69
+ alias memory='cat .claude/MEMORY.md'
70
+
71
+ # 思维节点
72
+ alias tl-recent='npx -p tsx tsx .claude/thinking-routes/index.ts recent'
73
+ alias tl-graph='npx -p tsx tsx .claude/thinking-routes/index.ts log --graph'
74
+ alias tl-search='npx -p tsx tsx .claude/thinking-routes/index.ts search'
75
+ ```
76
+
77
+ ---
78
+
79
+ ## 📱 Claude Code 内置
80
+
81
+ ```bash
82
+ # 查看对话历史列表
83
+ claude-code history
84
+
85
+ # 恢复某个对话
86
+ claude-code resume <conversation-id>
87
+ ```
88
+
89
+ ---
90
+
91
+ ## 💡 使用建议
92
+
93
+ | 场景 | 使用 |
94
+ |------|------|
95
+ | 每天回顾 | `tl` |
96
+ | 找决策理由 | `tl-search "关键词"` |
97
+ | 了解项目全貌 | `log` |
98
+ | 查看最近变更 | `memory` |
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "smc-skills",
3
+ "description": "Sumulige Claude Agent Harness - Curated skill collection for AI coding agents",
4
+ "homepage": "https://github.com/sumulige/sumulige-claude",
5
+ "owner": {
6
+ "name": "sumulige",
7
+ "email": "sumulige@example.com"
8
+ },
9
+ "plugins": [
10
+ {
11
+ "name": "smc-skills",
12
+ "description": "Multi-agent orchestration harness with curated skills. Includes Conductor, Architect, Builder, Reviewer, Librarian agents plus RAG-based skill discovery system.",
13
+ "source": "./",
14
+ "skills": [
15
+ "./../template/.claude/skills/manus-kickoff"
16
+ ],
17
+ "strict": false,
18
+ "skill_list": [
19
+ {
20
+ "name": "manus-kickoff",
21
+ "description": "Manus 风格项目启动流程 - AI 2.0 开发范式",
22
+ "path": "./../template/.claude/skills/manus-kickoff",
23
+ "category": "tools",
24
+ "external": false
25
+ }
26
+ ]
27
+ }
28
+ ],
29
+ "metadata": {
30
+ "version": "1.0.7",
31
+ "generated_at": "2026-01-14T12:21:55.220Z",
32
+ "skill_count": 1,
33
+ "categories": {
34
+ "tools": {
35
+ "name": "CLI 工具",
36
+ "description": "命令行工具和实用程序",
37
+ "icon": "🔧"
38
+ },
39
+ "development": {
40
+ "name": "开发辅助",
41
+ "description": "语言特定的开发辅助工具",
42
+ "icon": "💻"
43
+ },
44
+ "productivity": {
45
+ "name": "效率工具",
46
+ "description": "工作流自动化和效率提升",
47
+ "icon": "⚡"
48
+ },
49
+ "automation": {
50
+ "name": "自动化",
51
+ "description": "浏览器、CI/CD、系统自动化",
52
+ "icon": "🤖"
53
+ },
54
+ "data": {
55
+ "name": "数据处理",
56
+ "description": "数据库、数据处理和分析",
57
+ "icon": "📊"
58
+ },
59
+ "documentation": {
60
+ "name": "文档",
61
+ "description": "文档、图表、规范生成",
62
+ "icon": "📚"
63
+ },
64
+ "workflow": {
65
+ "name": "工作流编排",
66
+ "description": "多代理编排和协调",
67
+ "icon": "🎼"
68
+ }
69
+ }
70
+ }
71
+ }
@@ -0,0 +1,74 @@
1
+ # Sync External Skills
2
+ #
3
+ # This workflow automatically syncs skills from external repositories
4
+ # defined in sources.yaml. It runs daily and can be triggered manually.
5
+
6
+ name: Sync External Skills
7
+
8
+ on:
9
+ # Run daily at midnight UTC
10
+ schedule:
11
+ - cron: '0 0 * * *'
12
+
13
+ # Allow manual trigger
14
+ workflow_dispatch:
15
+
16
+ # Run on changes to sources.yaml
17
+ push:
18
+ paths:
19
+ - 'sources.yaml'
20
+ - '.github/workflows/sync-skills.yml'
21
+ branches:
22
+ - main
23
+
24
+ jobs:
25
+ sync:
26
+ name: Sync Skills
27
+ runs-on: ubuntu-latest
28
+
29
+ permissions:
30
+ contents: write
31
+
32
+ steps:
33
+ - name: Checkout repository
34
+ uses: actions/checkout@v4
35
+
36
+ - name: Setup Node.js
37
+ uses: actions/setup-node@v4
38
+ with:
39
+ node-version: '20'
40
+ cache: 'npm'
41
+
42
+ - name: Install dependencies
43
+ run: npm ci
44
+
45
+ - name: Sync external skills
46
+ run: npm run sync
47
+
48
+ - name: Update marketplace registry
49
+ run: npm run update-registry
50
+
51
+ - name: Check for changes
52
+ id: git-check
53
+ run: |
54
+ git diff --quiet || echo "changed=true" >> $GITHUB_OUTPUT
55
+
56
+ - name: Commit changes
57
+ if: steps.git-check.outputs.changed == 'true'
58
+ run: |
59
+ git config --local user.email "github-actions[bot]@users.noreply.github.com"
60
+ git config --local user.name "github-actions[bot]"
61
+ git add -A
62
+ git commit -m "chore: sync external skills [skip ci]"
63
+ git push
64
+
65
+ - name: Summary
66
+ if: always()
67
+ run: |
68
+ echo "## Sync Summary" >> $GITHUB_STEP_SUMMARY
69
+ echo "" >> $GITHUB_STEP_SUMMARY
70
+ if [ "${{ steps.git-check.outputs.changed }}" == "true" ]; then
71
+ echo "✅ Skills were synced and changes committed" >> $GITHUB_STEP_SUMMARY
72
+ else
73
+ echo "ℹ️ No changes detected - skills are up to date" >> $GITHUB_STEP_SUMMARY
74
+ fi