skill-creator 2.1.0 → 2.3.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 (64) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/README.md +13 -0
  3. package/dist/cli.js +8096 -3713
  4. package/dist/cli.js.map +4 -4
  5. package/dist/daemon.js +4694 -956
  6. package/dist/daemon.js.map +4 -4
  7. package/dist/package.json +1 -1
  8. package/dist/webui/_app/immutable/assets/0.Dbnkcm0y.css +2 -0
  9. package/dist/webui/_app/immutable/assets/ProviderView.BKgtsfqs.css +1 -0
  10. package/dist/webui/_app/immutable/chunks/1aUphu7Y.js +1 -0
  11. package/dist/webui/_app/immutable/chunks/8hp3I3ac.js +1 -0
  12. package/dist/webui/_app/immutable/chunks/{K56ab8zF.js → B0-OMyfG.js} +1 -1
  13. package/dist/webui/_app/immutable/chunks/B5sWuF6v.js +1 -0
  14. package/dist/webui/_app/immutable/chunks/BOPkZ98B.js +1 -0
  15. package/dist/webui/_app/immutable/chunks/BT2vrlul.js +1 -0
  16. package/dist/webui/_app/immutable/chunks/{QU8DIUJz.js → BdXWsCWd.js} +2 -2
  17. package/dist/webui/_app/immutable/chunks/BkjUgGsE.js +1 -0
  18. package/dist/webui/_app/immutable/chunks/{D-V0xBeS.js → Bl0jjuyR.js} +1 -1
  19. package/dist/webui/_app/immutable/chunks/ByW1yjUW.js +1 -0
  20. package/dist/webui/_app/immutable/chunks/{Bos6D7ir.js → C5MrAfWf.js} +2 -2
  21. package/dist/webui/_app/immutable/chunks/CI1OXbBG.js +1 -0
  22. package/dist/webui/_app/immutable/chunks/{BKjuWHgW.js → CPbfZBJo.js} +3 -3
  23. package/dist/webui/_app/immutable/chunks/{CY3MARMs.js → CgxChsUX.js} +1 -1
  24. package/dist/webui/_app/immutable/chunks/ChvFFUWR.js +1 -0
  25. package/dist/webui/_app/immutable/chunks/CpRvgjpe.js +1 -0
  26. package/dist/webui/_app/immutable/chunks/Cr5YUwJg.js +1 -0
  27. package/dist/webui/_app/immutable/chunks/{B0yogbIO.js → D3qCeXbe.js} +1 -1
  28. package/dist/webui/_app/immutable/chunks/{0umLG1IN.js → DApmS1g_.js} +1 -1
  29. package/dist/webui/_app/immutable/chunks/DKQHhdJ1.js +1 -0
  30. package/dist/webui/_app/immutable/chunks/{DFdxGYRu.js → DKepoBN5.js} +4 -4
  31. package/dist/webui/_app/immutable/chunks/DOjT7y5f.js +1 -0
  32. package/dist/webui/_app/immutable/chunks/DXKynIUR.js +1 -0
  33. package/dist/webui/_app/immutable/chunks/DiaaOubc.js +1 -0
  34. package/dist/webui/_app/immutable/chunks/DnPeA-9c.js +1 -0
  35. package/dist/webui/_app/immutable/chunks/DwIX6ZFE.js +1 -0
  36. package/dist/webui/_app/immutable/chunks/E8LHILEh.js +1 -0
  37. package/dist/webui/_app/immutable/chunks/F_BrNiaz.js +1 -0
  38. package/dist/webui/_app/immutable/chunks/HopcQwhZ.js +1 -0
  39. package/dist/webui/_app/immutable/chunks/j76fpbnQ.js +2 -0
  40. package/dist/webui/_app/immutable/chunks/myIHotqu.js +2 -0
  41. package/dist/webui/_app/immutable/chunks/{hrRIAQd7.js → oxP0dM6z.js} +1 -1
  42. package/dist/webui/_app/immutable/chunks/{Dl8eQ129.js → p_ObVaZi.js} +1 -1
  43. package/dist/webui/_app/immutable/entry/{app.CkIQoKd-.js → app.BQ4neDVJ.js} +2 -2
  44. package/dist/webui/_app/immutable/entry/start.BqwTCU7F.js +1 -0
  45. package/dist/webui/_app/immutable/nodes/{0.DY8kli0K.js → 0.uOFdFHyI.js} +119 -119
  46. package/dist/webui/_app/immutable/nodes/{1.DxOotYUD.js → 1.BhX-6aiQ.js} +1 -1
  47. package/dist/webui/_app/immutable/nodes/{2.BhwY9m4H.js → 2.C7Br-rQ1.js} +1 -1
  48. package/dist/webui/_app/version.json +1 -1
  49. package/dist/webui/index.html +28 -22
  50. package/package.json +10 -4
  51. package/dist/webui/_app/immutable/assets/0.BfQ9GZ7H.css +0 -2
  52. package/dist/webui/_app/immutable/assets/ProviderView.DEH95hqa.css +0 -1
  53. package/dist/webui/_app/immutable/chunks/9b6xLvUw.js +0 -1
  54. package/dist/webui/_app/immutable/chunks/BDe0K-12.js +0 -1
  55. package/dist/webui/_app/immutable/chunks/CIFG41pU.js +0 -1
  56. package/dist/webui/_app/immutable/chunks/CNPsST_i.js +0 -1
  57. package/dist/webui/_app/immutable/chunks/Ckw1quWt.js +0 -1
  58. package/dist/webui/_app/immutable/chunks/D-ihBChi.js +0 -1
  59. package/dist/webui/_app/immutable/chunks/D7i1h2eW.js +0 -2
  60. package/dist/webui/_app/immutable/chunks/DFDHkP9N.js +0 -1
  61. package/dist/webui/_app/immutable/chunks/Dbn_qXWm.js +0 -1
  62. package/dist/webui/_app/immutable/chunks/NO3Cfsmo.js +0 -1
  63. package/dist/webui/_app/immutable/chunks/UsOmL8ol.js +0 -1
  64. package/dist/webui/_app/immutable/entry/start.DG-jtr9O.js +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,114 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.3.0 (2026-09-22)
4
+
5
+ Wikis move in with their workspaces, a fourth top-level Wiki panel, a
6
+ `skill-creator wiki` subcommand, and the search engine swap that retires
7
+ MiniSearch.
8
+
9
+ ### Added
10
+
11
+ - **Wiki directory-mapping standard** — a workspace's wiki now lives at
12
+ `<workspace>/.agents/skill-wiki/` (a `.git/`-style directory property), and
13
+ global lives at `~/.agents/skill-wiki` (`SKILL_WIKI_HOME` overrides). Scope
14
+ is decided by the path itself: the slug registry, the central root, and the
15
+ `~/.skill-creator/wiki` sidecar are retired, and a one-shot migration script
16
+ carries existing data over (conflicts are refused conservatively). Project
17
+ wikis need no registry at all.
18
+ - **Fourth top-level Wiki panel** — `/wiki` lists every scope (global card plus
19
+ each registered workspace, with read-only counts, latest update, and honest
20
+ "Not initialized" empty states); `/wiki/:wsId` is the per-scope fragment list
21
+ with filter, append form, similarity warning, and draft-preserving
22
+ disconnects. The legacy view under Workspaces is gone and its entries point
23
+ at the new panel.
24
+ - **`wiki.scopes` RPC** — global is always listed, uninitialized scopes are
25
+ never lazily created by a read, and counts share one read-only membership
26
+ rule with the list view (illegal file names and malformed frontmatter are
27
+ dropped in both places).
28
+ - **`skill-creator wiki` subcommand** — assembled in-process from the new
29
+ skill-wiki cli-kit (`createWikiCli` host slots: resolveScope, commandPrefix,
30
+ extraCommands). `--workspace` accepts a registry label, a `ws_*` id, a path,
31
+ `~`, or `./` (default); `wiki scopes` gives the global overview with
32
+ `--json`.
33
+
34
+ ### Changed
35
+
36
+ - **@jixoai/search replaces MiniSearch** — the org-level package keeps recall
37
+ and persistence in pluggable backends (sqlite FTS5 by default, Tantivy in
38
+ single-process deployments) with BM25 scoring frozen in a shared JS layer;
39
+ the daemon/CLI default is sqlite because Tantivy's directory lock is
40
+ single-writer (`SKILL_CREATOR_SEARCH_BACKEND` switches).
41
+
42
+ ### Fixed
43
+
44
+ - **Search-engine handles now close** — the persistent index exposes `close()`
45
+ and daemon teardown awaits it, so stopping or restarting no longer leaks the
46
+ sqlite handle (on Windows this made every later index-directory delete fail
47
+ with EPERM). Cross-platform validation on a real Windows host covered the
48
+ packages, the search/wiki surfaces, and CLI smoke runs; 63 pre-existing
49
+ Windows-only failures outside these areas are catalogued in
50
+ `docs/search-design.md` §17 for a follow-up change.
51
+
52
+ ## 2.2.0 (2026-09-20)
53
+
54
+ A local BM25 skill-search index under the whole product, a first screen that
55
+ loads in ~1s instead of ~7s, and native OS pickers for choosing directories.
56
+
57
+ ### Added
58
+
59
+ - **Local skill search everywhere** — a daemon-owned search index (canonical
60
+ `realpath` dedup, CJK-aware frozen tokenizer, MiniSearch BM25 with frozen
61
+ rerank weights, persisted under a versioned envelope with per-file stat
62
+ freshness and event-driven watching) now backs four faces: `skill-creator
63
+ search` on the CLI, `skills.search` / `skills.duplicates` over RPC, the
64
+ `skills_search` / `skills_duplicates` MCP tools, and three GUI entry points
65
+ — the ProviderView filter box (URL-`q` truth), the ⌘K command palette, and
66
+ the composer `$` menu. Exclusion dirs are tunable via a `search-config.toml`
67
+ written next to the index, with an in-UI shortcut to open it in your editor.
68
+ - **Same-content badges on skill rows** — skills whose indexed bytes are
69
+ identical across installations show a Finder-style link badge (`↗N`,
70
+ "Same content as N other installations") in list and search rows, replacing
71
+ the old full-screen duplicate-groups block on the Workspaces home (owner
72
+ ruling: a badge is the honest signal, a wall of groups is noise).
73
+ - **Native directory picker for workspace import** — the Import dialog's new
74
+ Browse… button routes through `@opentray/ext-dialog` (upgraded the opentray
75
+ family to 0.32.0, whose osascript bridge made real-host dialogs clickable —
76
+ two upstream bugs found and fixed along the way, jixoai/opentray#8 and #10).
77
+ Unsupported platforms or headless daemons hide the button; a picked
78
+ directory backfills the path and seeds the display name.
79
+ - **Attachment pickers show loading** — the composer's image and document
80
+ buttons now spin their own icon while the native file-picker is up (each
81
+ target separately), matching the import Browse feedback.
82
+
83
+ ### Fixed
84
+
85
+ - **Search returned nothing on real libraries** — the ranking pool folded
86
+ duplicate content _after_ the top-40 cut, so 30+ byte-identical copies of
87
+ one skill drowned every other result, and the surviving representative only
88
+ carried its own installation scope, which made provider-filtered views match
89
+ nothing. Folding now happens before the pool (one representative per content
90
+ hash) and the primary merges the group's full installation list.
91
+ - **First screen took 5–7 seconds** — `workspace.list` ran two full discovery
92
+ sweeps over ~50 agent roots per call and the WebUI fired it 3–4× per load;
93
+ the registry now scans each `(provider, root)` exactly once (counts and
94
+ dedup keys from the same pass, Claude-plugin side effects skipped for
95
+ non-claude roots), the WebUI shares one in-flight request per connection
96
+ generation, the `npx skills` provenance probe warms in the background
97
+ instead of blocking the first `skills.list`, and same-target reads share
98
+ one in-flight discovery with explicit invalidation after every disk write.
99
+ Measured cold first paint: ~5–7s → ~1.07s; opening a skill: 27–156ms → 40ms.
100
+ - Search-row clicks opened "Skill not found" — the global canonical id was
101
+ passed to the provider-scoped detail RPC; the row now resolves the local
102
+ skill by name.
103
+
104
+ ### Changed
105
+
106
+ - **Visual polish pass over Workspaces** — a two-round reviewed rework: 22rem
107
+ list column with a width-capped centered detail pane, a 12px text floor,
108
+ unified hover/nesting card language, icon-only header actions, neutralized
109
+ row icons, an icon-rail active state, and layered not-found messaging that
110
+ keeps the opaque id out of the headline.
111
+
3
112
  ## 2.1.0 (2026-09-16)
4
113
 
5
114
  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.