skillcaddy 0.27.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.
Files changed (99) hide show
  1. package/CHANGELOG.md +497 -0
  2. package/CONTEXT.md +149 -0
  3. package/LICENSE +21 -0
  4. package/README.md +499 -0
  5. package/README_CN.md +482 -0
  6. package/collection-metadata/github/mattpocock.json +16 -0
  7. package/lib/canonicalJson.js +11 -0
  8. package/lib/claudeStore.js +135 -0
  9. package/lib/collectionEnablement.js +115 -0
  10. package/lib/collectionSetup.js +199 -0
  11. package/lib/enablePlan.js +116 -0
  12. package/lib/enablementScope.js +8 -0
  13. package/lib/hermesStore.js +21 -0
  14. package/lib/libraryImage.js +1785 -0
  15. package/lib/managerInstall.js +109 -0
  16. package/lib/managerSourceWorkflow.js +234 -0
  17. package/lib/projectActions.js +24 -0
  18. package/lib/projectPath.js +51 -0
  19. package/lib/roots.js +99 -0
  20. package/lib/skillLinkStore.js +68 -0
  21. package/lib/skillMetadata.js +191 -0
  22. package/lib/skillStore.js +541 -0
  23. package/lib/sourceAcquisition.js +475 -0
  24. package/lib/sourceAcquisitionAdapter.js +47 -0
  25. package/lib/sourceAcquisitionError.js +18 -0
  26. package/lib/sourceAcquisitionPolicy.js +139 -0
  27. package/lib/sourceArchive.js +363 -0
  28. package/lib/sourceArchiveWorkspace.js +36 -0
  29. package/lib/sourceGit.js +95 -0
  30. package/lib/sourceGitAcquisitionAdapter.js +145 -0
  31. package/lib/sourceGitBatchUpdate.js +168 -0
  32. package/lib/sourceGitRepair.js +227 -0
  33. package/lib/sourceGitStaging.js +139 -0
  34. package/lib/sourceGitUpgradeAdapter.js +583 -0
  35. package/lib/sourceGitUrl.js +170 -0
  36. package/lib/sourceHttp.js +302 -0
  37. package/lib/sourceLocal.js +200 -0
  38. package/lib/sourceLocalAcquisitionAdapter.js +107 -0
  39. package/lib/sourceManager.js +242 -0
  40. package/lib/sourceMigration.js +172 -0
  41. package/lib/sourceMigrationIssue.js +6 -0
  42. package/lib/sourcePath.js +6 -0
  43. package/lib/sourcePolicy.js +53 -0
  44. package/lib/sourceRecord.js +295 -0
  45. package/lib/sourceRegistry.js +155 -0
  46. package/lib/sourceRemoteArchiveAcquisitionAdapter.js +147 -0
  47. package/lib/sourceRemoteFileAcquisitionAdapter.js +95 -0
  48. package/lib/sourceRemoteFilePolicy.js +62 -0
  49. package/lib/sourceRemoteFileWorkspace.js +55 -0
  50. package/lib/sourceSkillDiscovery.js +117 -0
  51. package/lib/sourceTree.js +185 -0
  52. package/lib/sourceUpgrade.js +596 -0
  53. package/lib/sourceUpgradeAdapter.js +41 -0
  54. package/lib/sourceUpgradePolicy.js +170 -0
  55. package/lib/sourceUpgradeTransaction.js +202 -0
  56. package/lib/sourceValidation.js +120 -0
  57. package/lib/sourceWorkspace.js +37 -0
  58. package/lib/specGate.js +235 -0
  59. package/lib/tuiActions.js +169 -0
  60. package/lib/tuiInstall.js +133 -0
  61. package/lib/tuiLayout.js +94 -0
  62. package/lib/version.js +17 -0
  63. package/lib/webManager.js +370 -0
  64. package/package.json +74 -0
  65. package/public/agentsUi.js +138 -0
  66. package/public/app.js +1431 -0
  67. package/public/claude.css +2 -0
  68. package/public/claudeUi.js +119 -0
  69. package/public/emptyState.js +12 -0
  70. package/public/enabled.css +303 -0
  71. package/public/favicon.svg +5 -0
  72. package/public/index.html +199 -0
  73. package/public/skillcaddy_CN.png +0 -0
  74. package/public/skillcaddy_EN.png +0 -0
  75. package/public/styles.css +1611 -0
  76. package/scripts/cli.js +647 -0
  77. package/scripts/cron-sync-update-git.sh +128 -0
  78. package/scripts/pull-github.sh +22 -0
  79. package/scripts/source.js +638 -0
  80. package/scripts/tui.js +1058 -0
  81. package/server.js +196 -0
  82. package/skills/skillcaddy-manager/SKILL.md +93 -0
  83. package/skills/skillcaddy-manager/agents/openai.yaml +7 -0
  84. package/skills/skillcaddy-manager/references/METADATA.md +75 -0
  85. package/skills/skillcaddy-manager/references/OPERATIONS.md +315 -0
  86. package/skills/skillcaddy-manager/references/RECOMMENDATION_GUIDE.md +51 -0
  87. package/skills/skillcaddy-manager/references/featured-skills.json +564 -0
  88. package/skills/skillcaddy-manager/references/skill-platforms.json +48 -0
  89. package/skills/skillcaddy-manager/scripts/check-conflicts.cjs +117 -0
  90. package/skills/skillcaddy-manager/scripts/check-global-skills.cjs +169 -0
  91. package/skills/skillcaddy-manager/scripts/translate-skill-notes.cjs +297 -0
  92. package/skills/skillcaddy-manager/scripts/version-manager.cjs +146 -0
  93. package/skills/skillcaddy-manager/scripts/view-recommendations.cjs +279 -0
  94. package/skills/skillcaddy-manager/skillcaddy.json +9 -0
  95. package/skills/spec-pipeline/spec-direction-gate/SKILL.md +119 -0
  96. package/skills/spec-pipeline/spec-direction-gate/check-approval.py +110 -0
  97. package/skills/spec-pipeline/spec-draft-intake/SKILL.md +116 -0
  98. package/skills/spec-pipeline/spec-role-contract/SKILL.md +113 -0
  99. package/skills/spec-pipeline/spec-role-contract/check-roles.py +108 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,497 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.27.0] - 2026-10-23
11
+
12
+ ### Added
13
+ - The code root and the library root are now separate concepts (ADR 0012). A clone keeps the library inside the clone exactly as before; every packaged install (`npx`, `npm i -g`, `brew`) keeps the library in `~/.skillcaddy/library`, so reinstalling or upgrading the program never touches installed skills. `SKILLCADDY_ROOT` (already used by `scripts/pull-github.sh`) and `--root` select any other library root; `skillcaddy -a` reports both roots.
14
+ - `lib/roots.js` — the single place that resolves the code root, the library root, and the legacy single-root call shape.
15
+ - `scripts/install.sh` — one-command installer (`curl … | bash`) for the global command, with `--prefix` and `--version` options and a Node.js >= 20 pre-check.
16
+ - `Formula/skillcaddy.rb` — Homebrew formula installing the published npm tarball, plus `scripts/update-homebrew-formula.sh` to refresh its version and checksum after each publish.
17
+ - The package is publishable: `files` restricts the tarball to the runtime (100 files, ~1.4 MB) so the local library is never packaged, `bin` exposes the `skillcaddy` command, and `repository`/`homepage`/`bugs`/`license`/`keywords` are declared.
18
+ - `skills/spec-pipeline/`: three skills implementing the direction-confirmation gap identified in `docs/research/0037`. `spec-direction-gate` (B, rejects rather than advises, records approval in the spec's `## Approval` section), `spec-draft-intake` (F, treats an external draft as untrusted input and reconciles it against the repository), `spec-role-contract` (cross-cutting author/implementer/verifier positions). Design in `docs/research/0037-spec-doc-pipeline-gaps-improvement-plan.md`.
19
+ - `npm run check:specs` — walks `specs/*/TECH.md` and `specs/*/ROLE.md` and exits non-zero when a document fails its gate. Wired into `npm test`. A repository with no `specs/` directory passes; `--strict` inverts that.
20
+ - `npm run enable:spec-pipeline` — recreates the project enablement links for the three skills. They are deliberately absent from the library image (ADR 0011 Decision 4), so this is a once-per-checkout step. Idempotent; `--dry-run`, `--uninstall`, and `--global` are available.
21
+ - CI (`.github/workflows/ci.yml`): `npm ci && npm test` on Node 20 and 22, on pushes to `main` and on pull requests.
22
+
23
+ ### Changed
24
+ - `--root` now selects the library root for every command, including `start`/`stop`/`restart`. Previously Web lifecycle commands rejected a custom root and always used the clone that provided the executable; the Web process still runs that code root, and the resolved library root reaches it through `SKILLCADDY_ROOT`. ADR 0007 is amended accordingly (see `docs/adr/0012-decoupled-code-root-and-library-root.md`).
25
+ - The library image manifest's `producer` object gained an explicit `mode`: `repository` (the library root is a git repository) or `no-repository` (it is a plain directory, with `commit` and `branch` set to `null`). Export no longer refuses to produce an archive when the library root is not a git repository; the repository-state check is skipped with a reported warning instead. Archive format, member list, and `schemaVersion: 1` are unchanged.
26
+ - The bundled `skills/` bucket is scanned from the code root, and its metadata sidecars are stored in the library root, so notes and tags survive a reinstall of the program.
27
+ - `package.json` is no longer `private`. The package is published to the npm registry as `skillcaddy`; this is its first registry release, and `npx skillcaddy` / `npm i -g skillcaddy` work from it.
28
+
29
+ ### Fixed
30
+ - Library image scope-change detection no longer depends on `dev:ino` alone. On Linux, removing and recreating a directory at the same path returns the identical inode, so a scope directory replaced between planning and confirmation passed the stale-plan check undetected. The snapshot now also compares the directory's entry set. macOS increments inodes, which is why this was invisible there.
31
+ - Library image import no longer fails on an NFD-named source under Linux. Staged path names were normalized to NFC *before* the integrity check, and on Linux that rename actually happens (on APFS the NFC spelling already resolves to the same inode, so the name is kept). The directory's plain checksum therefore became the normalized one, matching neither form of the NFD baseline. Verification now runs first and normalization second. ADR 0011 Decision 7 is unchanged — the receiving library still ends up in NFC form. Diagnosis in `docs/research/0038-library-image-nfd-export-failure.md`.
32
+
33
+ ### Notes
34
+ - The 0.26.4 entry below describes the plain-or-normalized tolerance as a fix it shipped. That tolerance has been present since the workflow was first implemented (`2d89f62`), and the v0.26.4 release commit touches no library-image file. It was also not sufficient on Linux, for the ordering reason described above.
35
+
36
+ ## [0.26.4] - 2026-09-21
37
+
38
+ ### Fixed
39
+ - Library image import no longer reports a spurious checksum mismatch for NFD-named sources: the Phase-1 gate fails only when both the plain and the NFC-normalized checksums differ from the baseline, keeping SPEC:127 like-for-like comparison and the ADR 0011 cross-platform promise. *(No library-image change shipped in this release; the tolerance described here has been present since `2d89f62`.)*
40
+
41
+ ## [0.26.3] - 2026-09-21
42
+
43
+ ### Fixed
44
+ - Web manager: the project Agents bulk-clear button now passes an explicit `project` scope instead of the click event, so all selected skills are removed and the confirmation no longer reports `[object PointerEvent]`; `disableAgents` also falls back to `project` for any non-string scope.
45
+
46
+ ## [0.26.2] - 2026-09-09
47
+
48
+ ### Added
49
+ - Web manager: the top bar now links directly to the Skillcaddy GitHub repository beside the version badge, with a compact icon-only layout on narrow screens.
50
+
51
+ ### Fixed
52
+ - Web manager: source-library skill cards now expose the same note-first hover text as Agents and Claude Code enabled cards, falling back to the source description when no note exists.
53
+
54
+ ## [0.26.1] - 2026-09-08
55
+
56
+ ### Added
57
+ - Web manager: Hermes section is now a topbar toggle (off by default), so day-to-day work shows project + Claude Code + global only; opening the switch re-exposes Hermes, the Hermes bulk actions, and the per-skill Hermes enable button.
58
+ - Web manager: library advice (collection/duplicate/setup hints) collapses into an info icon with a count badge in the library panel title; clicking opens a popover with the full list.
59
+ - Web manager: added one shared enabled-skill search across project Agents, Claude Code, global Agents, and Hermes, with per-channel match counts and clear no-match states.
60
+
61
+ ### Changed
62
+ - Web manager: the four enabled scopes now use channel slots: project Agents and Claude Code stay side by side, while global Agents and Hermes each get a full-width slot with an explicit purpose line and bottom-aligned bulk actions.
63
+ - Web manager: Claude Code rows reuse the same source-pill and remove affordance as the agents skills column instead of a separate `.claude-skill` component, so the two project scopes no longer drift visually.
64
+ - Web manager: `claude.css` is now a compatibility placeholder; column and row styles are consolidated in `enabled.css`.
65
+
66
+ ## [0.26.0] - 2026-09-08
67
+
68
+ ### Added
69
+ - Added library image export/import with a self-contained manifest, safe tar unpacking, atomic `0600` archives, resumable source submission, and global/Hermes enablement restoration.
70
+ - Added the fifth `image` acquisition input type, cross-platform fidelity verification, and adversarial unpacking fixtures.
71
+
72
+ ## [0.25.1] - 2026-08-17
73
+
74
+ ### Added
75
+ - Added an independent Hermes enablement scope across the API, CLI, TUI, Web manager, collection flow, and Manager workflow.
76
+ - Added Hermes source-update and Git registry-repair protection for affected links.
77
+
78
+ ### Changed
79
+ - Hermes now accepts `official`, `github`, and `personal` sources while keeping project/global enablement and Claude synchronization independent.
80
+ - Added Hermes state, diagnostics, safe ownership checks, and direct links under `~/.hermes/skills/`.
81
+
82
+ ### Fixed
83
+ - Web startup cleanup now tolerates a child process that exits before its termination signal is delivered.
84
+
85
+ ## [0.25.0] - 2026-08-13
86
+
87
+ ### Changed
88
+ - Refined the Web manager around a compact returning-user status band, persistent error feedback, timed success toasts, clearer busy states, keyboard shortcuts, and visible focus treatment.
89
+ - Replaced abbreviated global action symbols with explicit project/global scope labels while preserving independent controls: a globally enabled skill can still be added to the current project for project setup, Claude synchronization, and project-level precedence.
90
+ - Global collection enable buttons now mirror project buttons by showing enabled progress and retaining the completed success state.
91
+ - Search results now expand matching collections automatically, while source and tag filters keep collections collapsed for easier scanning.
92
+
93
+ ### Fixed
94
+ - Bulk enable and cleanup feedback now reports progress and actionable failures instead of leaving long-running operations visually idle.
95
+ - Archived-skill actions, enabled states, advice severity, and scope actions now expose clearer accessible names and explanations.
96
+
97
+ ## [0.24.1] - 2026-08-12
98
+
99
+ ### Added
100
+ - Added a cron-oriented Git source sync helper that reports unresolved failures through its exit status.
101
+
102
+ ### Changed
103
+ - Registered Git source fetches now retry transient network failures twice, retain sanitized transport diagnostics, and stop contacting additional sources after three consecutive exhausted network failures.
104
+
105
+ ### Fixed
106
+ - Automated cron repair now runs only for source-record collisions, never authorizes breaking repairs implicitly, and reruns the batch only after a repair succeeds.
107
+ - Source-record collisions now remain actionable when a simultaneous fetch failure would otherwise hide the registry mismatch.
108
+
109
+ ## [0.24.0] - 2026-08-12
110
+
111
+ ### Added
112
+ - Added explicit project and global skill enablement across the shared API, CLI, TUI, and Web manager.
113
+ - Added global collection enablement that writes only `~/.agents/skills/` and safely distinguishes links owned by the current Skillcaddy library.
114
+ - Added project/global coexistence, global-link collision protection, and global-link source update and registry repair checks.
115
+
116
+ ### Changed
117
+ - Source update and repair output now reports affected project and global links separately; authorized breaking updates leave affected links in place.
118
+ - Web library actions now separate project controls (`+`, `×`) from global controls (`G+`, `G×`) with a visual divider.
119
+ - Updated the domain model, ADR-0009, Manager skill documentation, README files, and API contracts for scoped enablement.
120
+
121
+ ### Fixed
122
+ - Global collection completion now uses the same green success state as project collection completion.
123
+
124
+ ## [0.23.0] - 2026-08-12
125
+
126
+ ### Added
127
+ - Added TUI option 12 for central-library-only acquisition of complete HTTPS/SSH/SCP Git repositories, public HTTP(S) ZIP archives, and stable direct HTTP(S) `/SKILL.md` files.
128
+ - Added GitHub tree focus handling, required names for Remote file sources, cancellation, idempotency, destination collision, error reporting, and TUI state refresh for source acquisition.
129
+
130
+ ### Changed
131
+ - Aligned the English and Chinese README files, source acquisition implementation plan, ADR-0007/0008, and Manager operations documentation with the new TUI acquisition boundary while keeping Web acquisition out of scope.
132
+
133
+ ## [0.22.0] - 2026-08-07
134
+
135
+ ### Added
136
+ - Added Git source update summaries that distinguish newly added, edited, and deleted skills.
137
+ - Added `--verbose` output for the source CLI and global `skillcaddy -u` command to list affected skill paths.
138
+
139
+ ### Changed
140
+ - Git update summaries now include the old and new commit IDs while remaining transient command output; registry metadata and source content are not polluted with update descriptions.
141
+
142
+ ## [0.21.0] - 2026-08-07
143
+
144
+ ### Added
145
+ - Added an explicit Git source registry repair flow for clean checkouts advanced manually with `git pull`, including fast-forward and current-project link checks.
146
+ - Added ADR-0008 documenting registry-only adoption of externally advanced Git sources.
147
+
148
+ ### Changed
149
+ - Batch Git update output now includes failure categories and reasons, and dirty sources now emit a non-mutating reminder.
150
+ - Dirty Git worktrees remain untouched; repair never pulls, resets, stashes, or overwrites source content.
151
+
152
+ ## [0.20.0] - 2026-08-07
153
+
154
+ ### Added
155
+ - Added a unified clone-backed `skillcaddy` CLI for Web `start`, `stop`, and `restart`, version/help output, safe registered-Git updates with `-u`, and read-only project analysis with `-a`.
156
+ - Added verified Web process ownership and PID lifecycle handling; external services occupying the Web port are never stopped or replaced.
157
+ - Added explicit global CLI/TUI bootstrap commands: `npm run install:cli` / `npm run check:cli`, with `install:tui` / `check:tui` compatibility aliases.
158
+ - Added affected project-link reporting for blocked Git source updates and an explicit `--project` path for the source CLI.
159
+
160
+ ### Changed
161
+ - Made `-a` analysis read-only and made batch Git updates reject a missing current-project context instead of silently skipping link protection.
162
+ - Clarified that `--root` is for source/analysis operations and that Web shutdown fails closed when process ownership cannot be verified.
163
+ - Recorded the clone-backed CLI and local Web lifecycle boundary in ADR-0007 while preserving source-manager and enablement boundaries.
164
+
165
+ ## [0.19.1] - 2026-08-06
166
+
167
+ ### Changed
168
+ - Web 管理器左侧 Agents / Claude Code 已启用列表隐藏路径信息,让列表更紧凑并保留 skill 名称与操作入口。
169
+
170
+ ## [0.19.0] - 2026-07-30
171
+
172
+ ### Changed
173
+ - Centralized Source acquisition behind one shared lifecycle that owns plan retention, re-planning, stale-plan enforcement, installed-state and destination collision checks, publication rollback, result projection, and workspace cleanup.
174
+ - Introduced internal preparation adapter seam for source-specific input parsing, identity selection, content inspection, Source registry projection, and active-content verification.
175
+ - Removed legacy `sourceAdd.js`, `sourceArchiveAdd.js`, `sourceGitAdd.js`, and `sourceRemoteFileAdd.js` modules in favor of the unified acquisition lifecycle.
176
+
177
+ ### Added
178
+ - Added `lib/sourceAcquisition.js` as the core lifecycle orchestrator.
179
+ - Added `lib/sourceAcquisitionAdapter.js` base class and source-specific adapters for Git, Local, Remote Archive, and Remote File inputs.
180
+ - Added `lib/sourceAcquisitionExecution.js` for publication and rollback logic.
181
+ - Added `lib/sourceAcquisitionPolicy.js` for plan fingerprinting, collision checks, and status resolution.
182
+ - Added `test/sourceAcquisitionContract.test.js` covering lifecycle invariants and adapter conformance.
183
+
184
+ ## [0.18.0] - 2026-07-30
185
+
186
+ ### Added
187
+ - Added `POST /api/enable-collection` as the shared execution boundary for Collection enablement.
188
+
189
+ ### Changed
190
+ - Centralized Collection enablement execution behind one shared Web/TUI lifecycle that applies project links, classifies enabled/unchanged/skipped/failed outcomes, and refreshes non-blocking setup reminders without executing setup skills.
191
+ - Reduced Web and TUI adapters to user confirmation and result presentation while preserving partial successes and explicit per-skill failures.
192
+
193
+ ## [0.17.1] - 2026-07-30
194
+
195
+ ### Changed
196
+ - Centralized Local input, Remote Archive, Remote file, single Git, and Git batch Source upgrades behind one shared lifecycle while preserving the established `sourceManager` plans, results, errors, CLI behavior, and Git safety semantics.
197
+ - Removed the remaining legacy Source upgrade path and tightened import boundaries around lifecycle policy, preparation adapters, and the distinct directory and Git publishers.
198
+
199
+ ## [0.17.0] - 2026-07-29
200
+
201
+ ### Added
202
+ - 新增 clone-backed TUI 安装流程:`npm run install:tui` 通过本地 `npm link` 暴露全局 `skillcaddy` 命令,`npm run check:tui` 验证链接仍指向当前原件库 clone;安装前拒绝覆盖由其它 clone 占用的全局 package link。
203
+
204
+ ## [0.16.1] - 2026-07-29
205
+
206
+ ### Fixed
207
+ - TUI 按 Ctrl+C 不再抛出 `AbortError` 堆栈,改为静默退出并输出 `byebye 👋`。
208
+ - TUI 主菜单输入 `q` 退出时同样输出 `byebye 👋`。
209
+
210
+ ## [0.16.0] - 2026-07-29
211
+
212
+ ### Added
213
+ - Web 全局搜索框:在 Library 区域顶部新增搜索输入框,支持按 skill 名称、描述、标签实时过滤。
214
+ - Web 库级状态 tooltip:鼠标悬停在状态 badge("待配置"/"配置不完整"/"已就绪")上时显示解释文字。
215
+ - Web 版本展示:库路径后展示 Git commit hash(前 7 位)或 Archive integrity hash(前 12 位),数据来源于 source registry。
216
+ - Web 启用列描述 tooltip:左侧 Agents / Claude Code 已启用列表的每个 skill 条目增加鼠标悬停描述,优先显示中文备注(`note`),无则显示英文描述(`description`)。
217
+
218
+ ### Changed
219
+ - `/api/state` 返回值新增 `sources` 数组,包含每个源的版本信息(Git commit 或 integrity hash)。
220
+ - `renderAgentsSkills` / `renderClaudeStatus` 增加 `skills` 参数用于匹配源 skill 信息。
221
+
222
+ ### Active deprecations
223
+
224
+ | Legacy feature | Replacement | Deprecated | Runtime support ended | Migration code removed |
225
+ | --- | --- | --- | --- | --- |
226
+ | `<skill-dir>/skillcaddy.json` | `.skillcaddy/metadata/<source>/<relative-path>/skillcaddy.json` | v0.14.0 | v0.15.0 | v0.16.0 |
227
+
228
+ ## [0.15.1] - 2026-07-28
229
+
230
+ ### Added
231
+ - Added managed Remote file sources for stable direct HTTP(S) `/SKILL.md` URLs, including explicit `official/<name>` identities, bounded validation, sanitized reusable origins, SHA-256 integrity, and transactional per-source updates.
232
+
233
+ ### Changed
234
+ - Source discovery now recognizes root `SKILL.md`, bounded `skills/**/SKILL.md` and `skill/**/SKILL.md` layouts, and direct-child `<name>/SKILL.md` layouts while keeping populated `skills/` collections authoritative and excluding support directories.
235
+
236
+ ## [0.15.0] - 2026-07-26
237
+
238
+ ### Added
239
+ - Added a sidecar source registry with stable identities, sanitized provenance, integrity data, physical install paths, and discovered skill paths.
240
+ - Added dry-run adoption for existing Git and Local sources without moving their current directories.
241
+ - Added managed acquisition for local directories, local ZIP files, complete Git repositories, GitHub tree URLs, and public HTTP(S) ZIP files.
242
+ - Added transactional Local and Archive replacement with validation, rollback, download and extraction limits, and current-project link protection.
243
+ - Registered Git source updates now fetch the tracked ref, validate incoming skill paths, advance only by fast-forward, and expose stable `updated`, `current`, `dirty`, `breaking`, and `failed` outcomes.
244
+ - Manager source workflows now infer updates only from registered identities, keep acquisition and enablement separate, and rescan through shared enablement preflight before enabling one explicitly selected acquired skill.
245
+
246
+ ### Changed
247
+ - `npm run pull:github` now delegates to the unified source-management updater instead of maintaining a parallel Git pull implementation.
248
+ - English, Chinese, and Manager documentation now cover the repository-local source commands, migration and recovery, setup boundaries, and deferred first-release capabilities.
249
+
250
+ ### Removed
251
+ - Runtime scanning no longer reads legacy `<skill-dir>/skillcaddy.json` metadata. `npm run migrate:metadata` continues to discover and migrate those files explicitly through v0.15.x.
252
+
253
+ ## [0.14.3] - 2026-07-22
254
+
255
+ ### Fixed
256
+ - Web UI 库级启用按钮现在显示启用数量(如 "2/5"),全部启用时显示绿色背景,更清晰地表达库级启用状态。
257
+ - 单个 skill 启用按钮:已启用状态显示绿色边框 + 绿色文字 + 灰色背景,避免与未启用混淆。
258
+ - 库级启用按钮字体缩小至 13px,确保两位数能正常显示在按钮背景内。
259
+
260
+ ### Changed
261
+ - `skillcaddy-manager` SKILL.md 的 `description` 精简为更短且聚焦的触发词清单(discovery、enable/disable、audits、maintenance、bootstrap、Web/TUI access),降低触发歧义。
262
+
263
+ ## [0.14.2] - 2026-07-20
264
+
265
+ ### Added
266
+ - 新增 tracked collection setup contract:`collection-metadata/<source>/<collection>.json`,声明交互式 setup skill、适用 skills 和项目内就绪产物,不写入第三方 GitHub clone。
267
+ - `/api/state` 新增 `setups`,区分 `missing`、`partial`、`ready`、`invalid`;新增 `collection-setup-required/recommended/invalid` advice。
268
+ - 新增 `POST /api/enable-plan`,为 Web 和 TUI 提供统一库级预检,并在必要时自动把 setup skill 纳入启用计划。
269
+ - 为 `github/mattpocock` 登记首个 setup contract,检测 issue tracker 与 domain docs 配置。
270
+
271
+ ### Changed
272
+ - Web/TUI 库级启用现在会在变更前提示 setup 状态,启用后持续显示“待配置/配置不完整/已就绪”以及明确的 Agent 配置指引。
273
+ - `skillcaddy-manager` 将“已启用”和“已就绪”分开处理;交互式 setup 必须获得用户确认,不会静默执行。
274
+
275
+ ## [0.14.1] - 2026-07-17
276
+
277
+ ### Changed
278
+ - **skillcaddy-manager 重构**:按 writing-great-skills 原则精简结构,引入 Core Loop (`state → route → preflight → act → verify`) 作为 leading concept,信息分层到 `OPERATIONS.md`、`RECOMMENDATION_GUIDE.md`、`METADATA.md`。
279
+ - description 从 107 词压缩到 32 词,删除重复内容(3 处重复的冲突检测逻辑合并为单一引用)。
280
+ - 每个步骤添加明确的 "Complete when" 完成标准。
281
+ - 删除冗余的 `references/README.md` 和 `references/SUMMARY.md`。
282
+
283
+ ## [0.14.0] - 2026-07-14
284
+
285
+ ### Added
286
+ - 新增 `npm run migrate:metadata`:默认仅预检 legacy metadata;确认后使用 `npm run migrate:metadata -- --yes` 写入 sidecar。该命令补充 v0.11.0 的 metadata 存储迁移,并计划在 v0.16.0 删除。
287
+ - `library-duplicate-name` advice 现在返回每个冲突 skill 的稳定建议 alias 和结构化 `enable-with-alias` 动作。
288
+ - TUI skill 详情新增“使用其他名称启用”,将重复名诊断从仅警告扩展为可执行修复,同时不重命名原件库目录。
289
+
290
+ ### Changed
291
+ - `/api/state` 中的 skill 现在返回 `metadataStorage`;检测到 legacy metadata 时会生成带迁移命令的 warning advice。
292
+
293
+ ### Deprecated
294
+ - Legacy `<skill-dir>/skillcaddy.json` 运行时读取已弃用:v0.15.0 将停止 fallback 读取;迁移命令会保留至 v0.15.x,并在 v0.16.0 删除。新写入继续统一使用 sidecar 路径。
295
+
296
+ ## [0.13.1] - 2026-07-13
297
+
298
+ ### Fixed
299
+ - TUI 紧凑表格:当 skill 名过长时正确截断,确保状态标签(可添加/已启用)始终可见。
300
+ - TUI 已启用 skill 列表统一使用紧凑表格样式,与搜索结果保持一致。
301
+
302
+ ## [0.13.0] - 2026-07-13
303
+
304
+ ### Added
305
+ - **TUI 批量生成中文 note**:新增菜单选项 10,交互式流程为仅有英文 `description`、缺少中文 `note` 的 skill 补全中文介绍,支持分批(5/10/全部)处理与跳过。
306
+ - **TUI 库浏览分页**:库详情改为紧凑表格展示,支持 `n`/`p` 翻页、`a` 一键加入该库。
307
+ - 新增 `lib/tuiLayout.js`:TUI 展示排版与紧凑表格格式化(叶子模块,无 store 依赖)。
308
+ - 新增 `skills/skillcaddy-manager/scripts/translate-skill-notes.cjs`:批量中文 note 生成辅助脚本,支持 `list` / `apply`(默认 dry-run,需 `--yes` 才写入),保护已有 note 并校验 manifest 来源。
309
+ - `skills/skillcaddy-manager/SKILL.md` 补充 Batch Chinese Note Generation 用法与规则。
310
+
311
+ ### Changed
312
+ - TUI 中 skill 介绍优先使用 metadata `note`,回退到 `description`,最后回退到路径(`.import-rules.json` 为 `lib/tuiLayout.js` 新增导入规则)。
313
+ - `.import-rules.json` 新增 `lib/tuiLayout.js` 导入规则。
314
+ - README / README_CN 补充 TUI 分页与批量中文 note 说明。
315
+
316
+ ## [0.12.0] - 2026-07-02
317
+
318
+ ### Added
319
+ - **TUI 终端管理器**:`npm run tui -- /path/to/project` 启动交互式终端界面,无需浏览器即可管理 skills。
320
+ - 查看已启用 skill(Agents + Claude Code 双列展示)
321
+ - 浏览/搜索 skill 库,支持关键词搜索和来源过滤
322
+ - 启用 skill 到 Agents 并自动同步 Claude Code
323
+ - 清理已启用的项目 skill
324
+ - 同步 Claude Code skills
325
+ - 编辑 skill metadata(备注、tags、一键加入开关)
326
+ - 查看项目诊断建议(advice)
327
+ - 刷新项目状态、切换项目
328
+ - 更新 GitHub skill 库(调用 `pull-github.sh`)
329
+ - 新增 `scripts/tui.js`:TUI 主入口,实现完整的交互式菜单导航。
330
+ - 新增 `lib/tuiActions.js`:TUI 核心操作逻辑,复用 Web 管理器相同的数据层和动作。
331
+ - 新增 `test/tuiActions.test.js`:TUI 操作逻辑测试覆盖。
332
+
333
+ ### Changed
334
+ - README / README_CN 补充 TUI 启动方式和功能说明。
335
+ - `.import-rules.json` 新增 `lib/tuiActions.js` 导入规则。
336
+
337
+ ## [0.11.0] - 2026-07-01
338
+
339
+ ### Added
340
+ - 新增 `npm run install:manager`:将仓库自带的 `skills/skillcaddy-manager` 以受控软链接安装到 `~/.agents/skills/skillcaddy-manager`,方便 AI Agent 在任意项目中发现 Skillcaddy 管理能力。
341
+ - 新增 `npm run check:manager`:检查全局 `skillcaddy-manager` 是否已安装、是否断链或是否指向其它位置。
342
+ - 新增 `lib/managerInstall.js`:封装 manager skill 安装与检查逻辑。
343
+
344
+ ### Changed
345
+ - **Metadata 存储位置重构**:`skillcaddy.json` 从每个 skill 目录内迁移到集中存储目录 `.skillcaddy/metadata/<source>/<relative-path>/skillcaddy.json`,不再污染上游 SKILL.md,gitignore 更友好。
346
+ - `readSkillMetadata()` 现在优先读取 sidecar metadata,回退到 legacy(skill 目录内)并标记 `metadataStorage: 'legacy'`。
347
+ - `updateSkillMetadata()` 统一写入 sidecar 位置。
348
+ - `lib/sourcePolicy.js` 新增 `resolveAllowedSkillSource()`:返回来源目录与相对路径信息,供 sidecar 路径计算使用。
349
+ - README / README_CN 补充首次安装 `skillcaddy-manager` 的 bootstrap 说明,并明确不会覆盖已有非受控目标。
350
+
351
+ ## [0.10.0] - 2026-06-30
352
+
353
+ ### Added
354
+ - 历史项目列表支持单独移除:每个项目 chip 右侧新增 `×` 删除按钮,hover 时显示移除提示。
355
+ - 项目路径输入框新增 placeholder 示例和字段提示文案"请输入项目路径添加",引导用户操作。
356
+
357
+ ### Changed
358
+ - 重构项目历史 chip 样式:改用 grid 布局分离路径按钮与删除按钮,增强交互独立性。
359
+ - 删除按钮 hover 状态:深色背景 + 白色图标,视觉反馈更明确。
360
+ - 禁用项目(当前已加载)的路径按钮改为灰色不可点击样式,避免混淆。
361
+
362
+ ## [0.7.0] - 2026-06-29
363
+
364
+ ### Added
365
+ - 新增 `skillcaddy.json` skill 管理元数据:支持为每个 skill 保存人可读 `note` 和 `tags`,不污染上游 `SKILL.md`。
366
+ - `/api/state` 现在会返回每个 skill 的 `note`、`tags`、`autoEnable`、`metadataPath`、`hasMetadata`。
367
+ - 新增 `POST /api/skill-metadata`,用于安全写入 skill 目录内的 `skillcaddy.json`。
368
+ - Web UI 新增 tag tabs 过滤、tag pill 展示、备注展示、内联编辑表单、单 skill 是否参与库级一键加入开关,以及库级一键清理 Agents / Claude Code 已启用 skills。
369
+ - `skillcaddy-manager` 增加 metadata 自动维护规则,指导 Agent 根据 `SKILL.md` 内容生成或更新 `skillcaddy.json`。
370
+
371
+ ### Changed
372
+ - 导入边界规则新增 `lib/sourcePolicy.js` 和 `lib/skillMetadata.js`,复用来源边界检查,避免 metadata 写入绕过 Skillcaddy 来源目录。
373
+
374
+ ## [0.6.0] - 2026-06-29
375
+
376
+ ### Added
377
+ - Web 管理器支持通过 `?projectPath=<encoded-project-path>` 直接打开指定项目,并在切换项目后同步 URL。
378
+ - 项目路径输入区新增本地历史项目记录和"添加项目"入口,方便在多个项目之间切换。
379
+ - Skill 原件库的每个库标题旁新增 `+` 批量启用入口,可一次启用该库内尚未启用且非 archived 的 skills。
380
+ - `skillcaddy-manager` skill 新增"打开 Web 管理器"工作流,指导 Agent 使用 URL 传递项目路径。
381
+
382
+ ### Changed
383
+ - Web 管理器默认固定使用 `http://127.0.0.1:4173`;仅在端口冲突或显式指定时通过 `PORT=<other-port>` 临时覆盖。
384
+ - 首页统计文案统一为 `Agents 启用`、`Claude Code 启用`。
385
+ - 禁用按钮和不可操作控件的鼠标样式改为 `not-allowed`,避免误导成加载状态。
386
+ - README / README_CN 补充固定端口、项目路径 URL 传参、历史项目和批量启用说明。
387
+
388
+ ## [0.5.0] - 2026-06-29
389
+
390
+ ### Added
391
+ - 导入依赖规则系统:`.import-rules.json` 配置 + `scripts/check-imports.js` 检查脚本,强制模块依赖分层
392
+ - 全局技能检测:自动扫描 `~/.agents/skills` 和 `~/.claude/skills`,返回 `global` 数组
393
+ - 技能建议系统:`buildSkillAdvice()` 提供"重复名 / 未启用推荐 / 已启用但来源变化"等管理建议
394
+ - 导入检查测试:`test/check-imports.test.js` 覆盖规则解析、glob 匹配、违规检测
395
+
396
+ ### Changed
397
+ - `npm test` 现在包含导入检查(`npm run lint:imports`),破坏性变更:不合规导入会导致测试失败
398
+ - `lib/skillStore.js`:
399
+ - `getState()` 返回值新增 `global` 和 `advice` 字段
400
+ - 新增 `scanGlobalSkills()`:扫描用户级全局技能目录
401
+ - 新增 `scanSkillLinks(skillsDir)`:提取公共软链接扫描逻辑,供项目级与全局级复用
402
+ - 新增 `buildSkillAdvice(rootDir, { skills, enabled, global })`:生成管理建议
403
+ - `public/app.js`:适配新的 `global` / `advice` 字段(UI 准备)
404
+ - `skills/skillcaddy-manager/SKILL.md`:增补导入规则、全局技能、建议系统的使用说明
405
+
406
+ ## [0.4.1] - 2026-06-28
407
+
408
+ ### Changed
409
+ - README 双语化
410
+ - 新增 `README.md`(English,canonical),顶部加 `[English](README.md) · [中文](README_CN.md)` 语言切换
411
+ - 中文版迁到 `README_CN.md`,顶部同步加语言切换链接
412
+ - 两份内容 1:1 对应;ASCII 架构图、命令、表格结构保留
413
+ - 新增 "Why Skillcaddy?" / "为什么是 Skillcaddy?" 段(双语):痛点列表(5 条多项目 / 多 Agent 场景)+ 能力清单(6 条:单一事实来源 / 零项目污染 / 多 Agent 友好 / 独立管理 / 安全默认 / 便于贡献)+ 收尾点题(个人 / 团队 / 作者三类读者);放置在标题下方、Installation 之前
414
+
415
+ ## [0.4.0] - 2026-06-28
416
+
417
+ ### Added
418
+ - 新源 `skills/`:仓库自带的 skill 视作 `source: 'local'`、`id: 'local/<name>'`,与 `official/github/personal/archived` 一同被扫描
419
+ - 新 skill `skills/skillcaddy-manager/`:教 Agent 如何使用 Skillcaddy 自身
420
+ - `SKILL.md`:列出 / 启用 / 禁用 / 同步 / 更新 / 健康检查 / 冲突检测的工作流;强制 dry-run 摘要 + 多种确认门(重复名 / 别名占用 / 非 symlink 占用 / GitHub 本地脏 / 动 archived / 删中央原件)
421
+ - `agents/openai.yaml`:interface 元数据,`allow_implicit_invocation: true`
422
+ - 新工具脚本 `scripts/pull-github.sh` + `npm run pull:github`:批量 fast-forward pull `github/` 下所有仓库,脏工作树跳过,失败汇总退出码
423
+ - 测试新增 `scans repository-provided root skills`:覆盖 `skills/<name>/` 扫描 + 启用路径
424
+
425
+ ### Changed
426
+ - `lib/skillStore.js`:
427
+ - `ensureSourceFolders` 同时创建 `skills/`
428
+ - `scanSkills` 增加 `scanRepositorySkills`,先扫仓库自带再扫外部源
429
+ - `scanSourceFolder(rootDir, sourceFolder, source = sourceFolder)` 增加可选第三参支持自定义 source label(向后兼容:默认仍等于目录名)
430
+ - `assertInsideSources` 接受 `skills/`,错误信息更新为"来源目录或仓库 skills 目录内"
431
+
432
+ ## [0.3.0] - 2026-06-28
433
+
434
+ ### Added
435
+ - 新模块 `lib/projectPath.js`:集中 `projectPath` 校验
436
+ - `normalizeProjectPath(value)`:拒绝系统目录(`/`、`/Applications`、`/Library`、`/System`、`/bin`、`/etc`、`/opt`、`/private`、`/sbin`、`/tmp`、`/usr`、`/var`)、用户主目录 `$HOME`、以及 `$HOME` 的祖先目录;`path.resolve` 后返回
437
+ - `requirePath(value, label)`:从 `claudeStore.js` 抽出的非空 + 类型校验,供 `projectPath.js` 与 `skillStore.js` 复用
438
+ - 新模块 `lib/projectActions.js`:`enableProjectSkill(rootDir, input)` 包装 `enableSkill`,启用后 best-effort 调用 `syncClaudeSkills`,结果合并为 `{ ...enableResult, claudeSync: { ok: true, ... } | { ok: false, error } }`,Claude 同步失败不会抛出
439
+ - 测试新增 `project enable syncs Claude skills best-effort`:覆盖 `enableProjectSkill` 正常路径(claude 同步成功 + agents 启用都生效)
440
+
441
+ ### Changed
442
+ - `lib/claudeStore.js`、`lib/skillStore.js`:所有接受 `projectPath` 的入口(`syncClaudeSkills` / `getClaudeStatus` / `unlinkClaudeSkill` / `getAgentsSkillsDir` / `getClaudeSkillsPath` / `scanEnabledSkills` / `getState`)改为先调用 `normalizeProjectPath`,删除 `claudeStore.js` 内本地 `requirePath`
443
+ - `server.js`:`/api/enable` 路由从 `enableSkill` 切到 `enableProjectSkill`,响应体新增 `claudeSync` 字段(向后兼容,原有字段保留)
444
+ - `public/app.js`:新增 `enableMessage(name, result)`,根据 `claudeSync` 给出三种 UI 文案——默认"已启用 X";`claudeSync.ok=true` 时"已启用 X,并同步 Claude Code";`claudeSync.ok=false` 时"已启用 X;Claude Code 自动同步失败:<error>"
445
+
446
+ ### Security
447
+ - `projectPath` 服务端校验前置到 `normalizeProjectPath`,早于任何文件系统操作;不合法路径直接拒绝(防止误把 `/`、`/Users` 等作为目标执行 symlink / readdir)
448
+
449
+ ## [0.2.1] - 2026-06-27
450
+
451
+ ### Fixed
452
+ - Skill 原件库分组标题箭头 `▾` 与文字水平对齐:把 `.chevron` 移进 `<h3>` 内部,h3 改为 flex 容器(`align-items: center` + `gap: 8px`),箭头自身改为 `inline-flex` + `height: 1em`,按字形而非行盒做垂直居中,修复此前箭头视觉上偏低的问题
453
+ - 箭头加 `aria-hidden="true"`,避免屏幕阅读器重复读出
454
+
455
+ ### Changed
456
+ - `app.js`:`groupElement.querySelector('h3')` 改为 `groupElement.querySelector('h3 .title')`,标题文本写入新增的 `.title` span,避免 `textContent` 把箭头字符冲掉
457
+
458
+ ## [0.2.0] - 2026-06-27
459
+
460
+ ### Changed
461
+ - 品牌重命名:标题、`<h1>`、启动日志从 "AI Skills Manager" 改为 "Skillcaddy"
462
+ - `.claude/skills` 不再是 `.agents/skills` 的目录级软链接,改为真实目录 + 每个 skill 一条独立软链接
463
+ - agents 列禁用某个 skill 不再连带清除 Claude Code 列的同条目(断链显示而非消失)
464
+ - Claude Code 列清理某个 skill 不再连带影响 agents 列
465
+ - 旧版 layout(`.claude/skills -> ../.agents/skills`)会在下次 `syncClaudeSkills()` 时自动迁移
466
+ - Claude Code 列卡片去掉"查看"按钮与对应的 SKILL.md 预览面板,操作只剩"清理"
467
+ - 删除顶部"原件 / 已启用 / 可用"汇总栏(信息冗余)
468
+ - agents skill 卡片从 grid 垂直布局改为 flex 横向布局,与 Claude Code 列对齐
469
+ - agents skill 名在是软链接时前缀 `🔗` 图标,按钮文字"禁用"→"清理"
470
+ - 启用 / 清理按钮统一使用 `secondary danger`(白底红字)样式
471
+ - 两列条目按 alias 字母序排序(agents 在 `lib/skillStore.js`;Claude 在 `lib/claudeStore.js`)
472
+ - 启动日志 `Skillcaddy: http://127.0.0.1:4173`
473
+
474
+ ### Added
475
+ - 标题处版本号徽章(`/api/version` 端点 + 启动时缓存 `package.json`)
476
+ - agents 列、Claude Code 列、Skill 原件库面板标题加 `count` 计数徽章
477
+ - `.gitignore` 排除 `.agents/`、`.claude/`(防止本机状态入库)
478
+ - 字体 / 颜色 token 化(`styles.css` 顶部 CSS 变量)
479
+ - 4 个新测试:per-skill 软链接布局、agents/Claude 列表独立性、旧版 layout 自动迁移、两列按字母排序
480
+
481
+ ### Removed
482
+ - Claude Code 状态行("软链接 /path -> /target · N 个 skill")——诊断信息泄露路径
483
+ - `/api/read-claude-skill` 端点、`lib/claudeStore.js` 的 `readClaudeSkill`、前端 `readClaudeSkill` 函数、`<section id="claudeSkillContent">` 节点、相关 CSS(`.skill-content` / `.content-head` / `.skill-content pre`)
484
+ - `agentsUi.js` 旧版 grid 布局、`.enabled-head` CSS、text badge `link`/`file`
485
+
486
+ ## [0.1.0] - 2026-06-27
487
+
488
+ ### Added
489
+ - 初始版本
490
+ - 本地 skill 原件库扫描(official / github / personal / archived 四个来源)
491
+ - 按项目软链接启用 skill 到 `.agents/skills/<alias>`
492
+ - 可选同步 Claude Code 入口(创建 `.claude/skills` 指向 `.agents/skills`)
493
+ - 一键启用 / 禁用 agents skills
494
+ - 一键加入 / 清理 Claude Code skills
495
+ - 单个 Claude skill 读取、禁用
496
+ - Web UI(`public/`)展示原件库、已启用列表、Claude skill 状态
497
+ - 基础测试覆盖(`node --test test/*.test.js`)