skill-creator 2.1.0 → 2.2.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 (62) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +13 -0
  3. package/dist/cli.js +5373 -3653
  4. package/dist/cli.js.map +4 -4
  5. package/dist/daemon.js +2373 -828
  6. package/dist/daemon.js.map +4 -4
  7. package/dist/package.json +1 -1
  8. package/dist/webui/_app/immutable/assets/0.CT0Z92yp.css +2 -0
  9. package/dist/webui/_app/immutable/assets/ProviderView.BKgtsfqs.css +1 -0
  10. package/dist/webui/_app/immutable/chunks/0k4S-8Dm.js +1 -0
  11. package/dist/webui/_app/immutable/chunks/{NO3Cfsmo.js → BD8KMBgQ.js} +1 -1
  12. package/dist/webui/_app/immutable/chunks/{Dbn_qXWm.js → BLKqTz4e.js} +1 -1
  13. package/dist/webui/_app/immutable/chunks/BTdzDCtA.js +1 -0
  14. package/dist/webui/_app/immutable/chunks/{Bs27XW8_.js → BXwUnloU.js} +1 -1
  15. package/dist/webui/_app/immutable/chunks/BZOx0Qre.js +1 -0
  16. package/dist/webui/_app/immutable/chunks/BfKHhAfw.js +1 -0
  17. package/dist/webui/_app/immutable/chunks/Bm81ovyU.js +8 -0
  18. package/dist/webui/_app/immutable/chunks/{BKjuWHgW.js → BpM7GQdD.js} +3 -3
  19. package/dist/webui/_app/immutable/chunks/{CeR4do8T.js → BpPdtmVY.js} +1 -1
  20. package/dist/webui/_app/immutable/chunks/{BEPs9Z9s.js → C4d-joyd.js} +1 -1
  21. package/dist/webui/_app/immutable/chunks/{K56ab8zF.js → CRrxCnau.js} +1 -1
  22. package/dist/webui/_app/immutable/chunks/CUkgSGd5.js +1 -0
  23. package/dist/webui/_app/immutable/chunks/{hrRIAQd7.js → CX1CHr5A.js} +1 -1
  24. package/dist/webui/_app/immutable/chunks/CaRy05kX.js +1 -0
  25. package/dist/webui/_app/immutable/chunks/{UeEccMjN.js → CmWHiR19.js} +1 -1
  26. package/dist/webui/_app/immutable/chunks/CokLx9SK.js +3 -0
  27. package/dist/webui/_app/immutable/chunks/D-GGMKF5.js +1 -0
  28. package/dist/webui/_app/immutable/chunks/D00gXCrF.js +2 -0
  29. package/dist/webui/_app/immutable/chunks/{BIfnT_mK.js → DAvb_BTz.js} +1 -1
  30. package/dist/webui/_app/immutable/chunks/{CY3MARMs.js → DYphEAOV.js} +1 -1
  31. package/dist/webui/_app/immutable/chunks/{0umLG1IN.js → DlRJa6Rp.js} +1 -1
  32. package/dist/webui/_app/immutable/chunks/{D-V0xBeS.js → DsOfMPqr.js} +1 -1
  33. package/dist/webui/_app/immutable/chunks/DxUS3G9A.js +1 -0
  34. package/dist/webui/_app/immutable/chunks/{CQD9uzpA.js → LKyxHDTu.js} +1 -1
  35. package/dist/webui/_app/immutable/chunks/{Dl8eQ129.js → WSgbVOcX.js} +1 -1
  36. package/dist/webui/_app/immutable/chunks/{Bos6D7ir.js → b00Wice3.js} +2 -2
  37. package/dist/webui/_app/immutable/chunks/{Ckw1quWt.js → n3HFLfXO.js} +1 -1
  38. package/dist/webui/_app/immutable/chunks/{B0yogbIO.js → xHmEZGe9.js} +1 -1
  39. package/dist/webui/_app/immutable/chunks/{D8Der6oM.js → y5ROg0gY.js} +1 -1
  40. package/dist/webui/_app/immutable/entry/{app.CkIQoKd-.js → app.wmUVPoAL.js} +2 -2
  41. package/dist/webui/_app/immutable/entry/start.DeqHj237.js +1 -0
  42. package/dist/webui/_app/immutable/nodes/0.B1MRgs82.js +234 -0
  43. package/dist/webui/_app/immutable/nodes/{1.DxOotYUD.js → 1.DmFrzXB8.js} +1 -1
  44. package/dist/webui/_app/immutable/nodes/{2.BhwY9m4H.js → 2.C5_mWJeB.js} +1 -1
  45. package/dist/webui/_app/version.json +1 -1
  46. package/dist/webui/index.html +27 -27
  47. package/package.json +7 -4
  48. package/dist/webui/_app/immutable/assets/0.BfQ9GZ7H.css +0 -2
  49. package/dist/webui/_app/immutable/assets/ProviderView.DEH95hqa.css +0 -1
  50. package/dist/webui/_app/immutable/chunks/9b6xLvUw.js +0 -1
  51. package/dist/webui/_app/immutable/chunks/BDe0K-12.js +0 -1
  52. package/dist/webui/_app/immutable/chunks/BkEnd9_Z.js +0 -1
  53. package/dist/webui/_app/immutable/chunks/CIFG41pU.js +0 -1
  54. package/dist/webui/_app/immutable/chunks/CNPsST_i.js +0 -1
  55. package/dist/webui/_app/immutable/chunks/D-ihBChi.js +0 -1
  56. package/dist/webui/_app/immutable/chunks/D7i1h2eW.js +0 -2
  57. package/dist/webui/_app/immutable/chunks/DFDHkP9N.js +0 -1
  58. package/dist/webui/_app/immutable/chunks/DFdxGYRu.js +0 -8
  59. package/dist/webui/_app/immutable/chunks/QU8DIUJz.js +0 -3
  60. package/dist/webui/_app/immutable/chunks/UsOmL8ol.js +0 -1
  61. package/dist/webui/_app/immutable/entry/start.DG-jtr9O.js +0 -1
  62. package/dist/webui/_app/immutable/nodes/0.DY8kli0K.js +0 -234
package/CHANGELOG.md CHANGED
@@ -1,5 +1,65 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.2.0 (2026-09-20)
4
+
5
+ A local BM25 skill-search index under the whole product, a first screen that
6
+ loads in ~1s instead of ~7s, and native OS pickers for choosing directories.
7
+
8
+ ### Added
9
+
10
+ - **Local skill search everywhere** — a daemon-owned search index (canonical
11
+ `realpath` dedup, CJK-aware frozen tokenizer, MiniSearch BM25 with frozen
12
+ rerank weights, persisted under a versioned envelope with per-file stat
13
+ freshness and event-driven watching) now backs four faces: `skill-creator
14
+ search` on the CLI, `skills.search` / `skills.duplicates` over RPC, the
15
+ `skills_search` / `skills_duplicates` MCP tools, and three GUI entry points
16
+ — the ProviderView filter box (URL-`q` truth), the ⌘K command palette, and
17
+ the composer `$` menu. Exclusion dirs are tunable via a `search-config.toml`
18
+ written next to the index, with an in-UI shortcut to open it in your editor.
19
+ - **Same-content badges on skill rows** — skills whose indexed bytes are
20
+ identical across installations show a Finder-style link badge (`↗N`,
21
+ "Same content as N other installations") in list and search rows, replacing
22
+ the old full-screen duplicate-groups block on the Workspaces home (owner
23
+ ruling: a badge is the honest signal, a wall of groups is noise).
24
+ - **Native directory picker for workspace import** — the Import dialog's new
25
+ Browse… button routes through `@opentray/ext-dialog` (upgraded the opentray
26
+ family to 0.32.0, whose osascript bridge made real-host dialogs clickable —
27
+ two upstream bugs found and fixed along the way, jixoai/opentray#8 and #10).
28
+ Unsupported platforms or headless daemons hide the button; a picked
29
+ directory backfills the path and seeds the display name.
30
+ - **Attachment pickers show loading** — the composer's image and document
31
+ buttons now spin their own icon while the native file-picker is up (each
32
+ target separately), matching the import Browse feedback.
33
+
34
+ ### Fixed
35
+
36
+ - **Search returned nothing on real libraries** — the ranking pool folded
37
+ duplicate content *after* the top-40 cut, so 30+ byte-identical copies of
38
+ one skill drowned every other result, and the surviving representative only
39
+ carried its own installation scope, which made provider-filtered views match
40
+ nothing. Folding now happens before the pool (one representative per content
41
+ hash) and the primary merges the group's full installation list.
42
+ - **First screen took 5–7 seconds** — `workspace.list` ran two full discovery
43
+ sweeps over ~50 agent roots per call and the WebUI fired it 3–4× per load;
44
+ the registry now scans each `(provider, root)` exactly once (counts and
45
+ dedup keys from the same pass, Claude-plugin side effects skipped for
46
+ non-claude roots), the WebUI shares one in-flight request per connection
47
+ generation, the `npx skills` provenance probe warms in the background
48
+ instead of blocking the first `skills.list`, and same-target reads share
49
+ one in-flight discovery with explicit invalidation after every disk write.
50
+ Measured cold first paint: ~5–7s → ~1.07s; opening a skill: 27–156ms → 40ms.
51
+ - Search-row clicks opened "Skill not found" — the global canonical id was
52
+ passed to the provider-scoped detail RPC; the row now resolves the local
53
+ skill by name.
54
+
55
+ ### Changed
56
+
57
+ - **Visual polish pass over Workspaces** — a two-round reviewed rework: 22rem
58
+ list column with a width-capped centered detail pane, a 12px text floor,
59
+ unified hover/nesting card language, icon-only header actions, neutralized
60
+ row icons, an icon-rail active state, and layered not-found messaging that
61
+ keeps the opaque id out of the headline.
62
+
3
63
  ## 2.1.0 (2026-09-16)
4
64
 
5
65
  The `$` skill-reference composer surface, the dual-era MCP fix that revives the
package/README.md CHANGED
@@ -123,6 +123,7 @@ Inside the repository use `pnpm skill-creator <command>` after building; as an i
123
123
  | `openinbrowser` | Explicitly open the current daemon's tokened WebUI URL in the system browser |
124
124
  | `status` | Print PID, version, HTTP port, tray state (mounted/web/headless), and any tray error |
125
125
  | `stop` | Stop the production daemon; if the production endpoint is gone, discover and stop the dev daemon, waiting for endpoint release |
126
+ | `search` | Search local skills in-process (BM25 + skill tokenizer, no daemon required); see [Skill search](#skill-search) |
126
127
  | `version` | Print the package version |
127
128
  | `help` | Print command help |
128
129
 
@@ -138,6 +139,18 @@ pnpm skill-creator stop
138
139
 
139
140
  The commands above were exercised against the built output (`dist/`, identical to the published package): headless `start` prints the recovery hint and exits 0; `status` prints pid/version/port/tray state, the DSH host health line (`--json` prints the full state), and the tokened WebUI URL; `open` is unavailable headless and hints `openinbrowser`; `openinbrowser` prints and invokes the system browser; after `stop` the HTTP endpoint releases immediately and `status` reports ENOENT with the `start` recovery entry. The published package was black-box tested the same way (start/status/stop/restart) after `npm install <tarball>` in an empty directory outside the repo (ccski is bundled into the output, no `link:` dependency; reproduce with `bun scripts/clean-install-check.sh.ts`, evidence in `docs/release/skill-steward.md`). Runtime requires Node `>=24.0.0` (kernel persistence uses `node:zlib`'s zstd; the `node:module` `stripTypeScriptTypes` that DSH code-runtime needs requires `>=22.13`, already covered by 24).
140
141
 
142
+ ## Skill search
143
+
144
+ `skill-creator search <query...>` searches every local skill — all Global Workspace provider roots plus every Imported Workspace — in-process, without the daemon:
145
+
146
+ ```bash
147
+ skill-creator search "React组件设计" # human-readable output
148
+ skill-creator search react component --json # machine-readable: { "results": [...] }
149
+ skill-creator search http3 --limit 20 # limit 1..50, default 10
150
+ ```
151
+
152
+ Results are canonical: multiple installations of the same skill (symlinks included) collapse into one entry with an `installations` list, and byte-identical copies fold into `duplicates`. Ranking is field-weighted BM25+ (name ×10 … body ×1) plus a frozen rerank pass, with prefix and fuzzy (typo) matching; ordering is deterministic and replayable. The first run builds a persistent index under `~/.skill-creator/search-index.json`; later runs refresh it incrementally via stat checks (mtime/size/inode/ctime), so unchanged corpora are not re-read. Exit codes: `0` on a successful query (including zero results), `1` for an empty query, a bad flag, or an index I/O failure. Design, frozen tokenizer/ranking contracts, and benchmark methodology: [docs/search-design.md](docs/search-design.md).
153
+
141
154
  ## Skill Steward
142
155
 
143
156
  The skill steward is a Manager-owned maintenance workflow: choose a task and scope → run → review evidence → human approval → apply → roll back if needed. The entry point is the **Workflow** tab in the Workspaces provider view.