@skill-map/cli 0.62.2 → 0.64.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 (34) hide show
  1. package/dist/cli/example/.claude/agents/content-editor.md +22 -0
  2. package/dist/cli/example/.claude/agents/content-editor.sm +17 -0
  3. package/dist/cli/example/.claude/commands/init.md +9 -0
  4. package/dist/cli/example/.claude/commands/publish.md +15 -0
  5. package/dist/cli/example/.claude/commands/publish.sm +9 -0
  6. package/dist/cli/example/.claude/skills/check-links/SKILL.md +16 -0
  7. package/dist/cli/example/.claude/skills/check-links/SKILL.sm +9 -0
  8. package/dist/cli/example/.skillmapignore +30 -0
  9. package/dist/cli/example/AGENTS.md +10 -0
  10. package/dist/cli/example/AGENTS.sm +8 -0
  11. package/dist/cli/example/docs/DEPLOY.md +11 -0
  12. package/dist/cli/example/docs/STYLE.md +20 -0
  13. package/dist/cli/example/package.json +6 -0
  14. package/dist/cli/example/public/index.html +5 -0
  15. package/dist/cli/example/server.js +11 -0
  16. package/dist/cli/tutorial/sm-tutorial/SKILL.md +1 -1
  17. package/dist/cli/tutorial/sm-tutorial/references/_core.md +8 -8
  18. package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +22 -11
  19. package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +2 -2
  20. package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +2 -2
  21. package/dist/cli.js +1032 -807
  22. package/dist/index.js +20 -13
  23. package/dist/kernel/index.d.ts +10 -18
  24. package/dist/kernel/index.js +20 -13
  25. package/dist/ui/chunk-53FVREFR.js +3 -0
  26. package/dist/ui/{chunk-ECKRC6XD.js → chunk-JEWVC3KW.js} +1 -1
  27. package/dist/ui/chunk-PEBQMYAG.js +1 -0
  28. package/dist/ui/{chunk-CM4YB7L4.js → chunk-SR2EXRNN.js} +1 -1
  29. package/dist/ui/index.html +1 -1
  30. package/dist/ui/{main-FUEU25PM.js → main-VSGHRLCJ.js} +4 -4
  31. package/package.json +2 -2
  32. package/dist/ui/chunk-NC3HOVDG.js +0 -1
  33. package/dist/ui/chunk-RXGORKP5.js +0 -3
  34. /package/dist/ui/{chunk-IYC5ZW4L.js → chunk-WDCUTF3U.js} +0 -0
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: content-editor
3
+ description: |
4
+ Writes and edits the portfolio's pages. Reads a brief, follows the
5
+ style guide, and emits the HTML into public/.
6
+ tools: [Read, Write]
7
+ model: sonnet
8
+ ---
9
+
10
+ # content-editor
11
+
12
+ Turns a short brief into a finished portfolio page.
13
+
14
+ ## How to write a page
15
+ 1. Read the style guide and the shared stylesheet in public/.
16
+ 2. Write one HTML file under public/, named after the page (a projects page becomes `public/projects.html`).
17
+ 3. Start from `<!doctype html>`, link the stylesheet with `<link rel="stylesheet" href="/style.css">`, and set a `<title>`.
18
+ 4. Use one `<h1>`, group sections under `<h2>`, and reuse the shared header, nav, and footer so every page matches.
19
+ 5. Add a link back to Home, and link the new page from the home nav.
20
+
21
+ Rules: plain static HTML, no framework, no client JS, one page per file.
22
+ Every page follows the [style guide](../../docs/STYLE.md).
@@ -0,0 +1,17 @@
1
+ identity:
2
+ path: .claude/agents/content-editor.md
3
+ bodyHash: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
4
+ frontmatterHash: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
5
+ annotations:
6
+ version: 2
7
+ stability: stable
8
+ tags:
9
+ - harness
10
+ - content
11
+ - frontend
12
+ settings: {}
13
+ audit:
14
+ createdAt: '2026-02-20T09:00:00.000Z'
15
+ createdBy: cli
16
+ lastBumpedAt: '2026-04-30T15:00:00.000Z'
17
+ lastBumpedBy: cli
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: init
3
+ description: |
4
+ Scaffolds a new empty page in public/ from the shared template.
5
+ ---
6
+
7
+ # init
8
+
9
+ Creates a blank page so you can start writing.
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: publish
3
+ description: |
4
+ Publishes the portfolio: runs the link check, hands off to the
5
+ content editor for any last fixes, then follows the deploy runbook.
6
+ ---
7
+
8
+ # publish
9
+
10
+ The one command you run when the site is ready to go out.
11
+
12
+ ## Steps
13
+ 1. Run /check-links on the pages in public/. If it reports broken links, stop and fix them first.
14
+ 2. If a page needs a content fix, brief @content-editor with the change.
15
+ 3. Follow the [deploy runbook](../../docs/DEPLOY.md): regenerate pages, run the link check, start the server.
@@ -0,0 +1,9 @@
1
+ annotations:
2
+ tags:
3
+ - harness
4
+ - deploy
5
+ - ci
6
+ identity:
7
+ bodyHash: 24a1903e0f76651ad6e177ad5c7481b7ae451d9d72ac9b2fb2d860ca961cdc6d
8
+ frontmatterHash: 3fa592383d48d96218979ae6786a03a3bada12153ca29678b71b91eea502695b
9
+ path: .claude/commands/publish.md
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: check-links
3
+ description: |
4
+ Validates the portfolio's internal links before publishing. Walks
5
+ every generated page and reports any link whose target is missing.
6
+ ---
7
+
8
+ # check-links
9
+
10
+ The last gate before the site goes out. Link targets resolve per the [WHATWG URL standard](https://url.spec.whatwg.org/).
11
+
12
+ ## Steps
13
+ 1. List every HTML file under `public/`.
14
+ 2. For each page, collect its internal links (every `href` to `/` or to a `.html` file).
15
+ 3. Check the target exists under `public/` (treat `/` as `public/index.html`).
16
+ 4. Report any link whose target is missing; if none, report "0 broken links".
@@ -0,0 +1,9 @@
1
+ annotations:
2
+ tags:
3
+ - harness
4
+ - links
5
+ - quality
6
+ identity:
7
+ bodyHash: a1b36960a6214519ef8f72d32ea296c07e17e4b1d06a3efc326066895537134b
8
+ frontmatterHash: 220822c755b2e7aadf653de25ffab6b0acb86ca198513100642da15ced531e1e
9
+ path: .claude/skills/check-links/SKILL.md
@@ -0,0 +1,30 @@
1
+ # Default `.skill-mapignore` shipped by `sm init`. Anything matching is
2
+ # skipped during `sm scan`. Same syntax as `.gitignore` (kaelzhang/ignore).
3
+ # Edit freely after `sm init`; the file is owned by the user from then on.
4
+
5
+ # Version-control + dependency dirs
6
+ .git/
7
+ node_modules/
8
+
9
+ # Build output
10
+ dist/
11
+ build/
12
+ out/
13
+ .next/
14
+ .cache/
15
+
16
+ # Project-local transient artifacts
17
+ .tmp/
18
+ .skill-map/
19
+
20
+ # OS / editor noise
21
+ .DS_Store
22
+ Thumbs.db
23
+ *.swp
24
+ *~
25
+
26
+ # Logs
27
+ *.log
28
+
29
+ # Portfolio: generated HTML lives here (not part of the harness graph)
30
+ public/
@@ -0,0 +1,10 @@
1
+ # Portfolio handbook
2
+
3
+ A small static portfolio site, served by Express (`server.js`). The
4
+ `.claude/` harness maintains it: an agent writes the pages, a skill
5
+ checks the links, a command publishes. The conventions live in the
6
+ style guide; the deploy steps in the deploy runbook. The pages still to
7
+ build are tracked in [the backlog](./docs/BACKLOG.md).
8
+
9
+ - When a page needs writing or fixing, brief @content-editor.
10
+ - When the site is ready to go out, run /publish.
@@ -0,0 +1,8 @@
1
+ annotations:
2
+ tags:
3
+ - handbook
4
+ - portfolio
5
+ identity:
6
+ bodyHash: 253817d64ad1b6544ff431250e5150ca7ee193b39c22746d8d426add618e5103
7
+ frontmatterHash: ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356
8
+ path: AGENTS.md
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: deploy-runbook
3
+ description: |
4
+ How the portfolio gets published once the pages are written.
5
+ ---
6
+
7
+ # Deploy runbook
8
+
9
+ 1. Generate or update the pages in public/.
10
+ 2. Run the link check and fix anything it reports.
11
+ 3. Start the server with `node server.js`, then open the site in your browser.
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: style-guide
3
+ description: |
4
+ Writing and markup conventions every portfolio page follows.
5
+ ---
6
+
7
+ # Style guide
8
+
9
+ ## Voice
10
+ - Short, plain sentences. No marketing fluff.
11
+
12
+ ## Structure
13
+ - One H1 per page; sections under H2.
14
+ - Every page shares the same header, nav, and footer.
15
+ - Every page links back to Home.
16
+
17
+ ## Markup
18
+ - Plain static HTML: no framework, no client JS.
19
+ - Link the shared stylesheet `/style.css` in every page head.
20
+ - Use semantic tags: header, nav, main, footer.
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "my-portfolio",
3
+ "private": true,
4
+ "scripts": { "start": "node server.js" },
5
+ "dependencies": { "express": "4.21.2" }
6
+ }
@@ -0,0 +1,5 @@
1
+ <!doctype html>
2
+ <meta charset="utf-8">
3
+ <title>My portfolio</title>
4
+ <h1>My portfolio</h1>
5
+ <p>Pages land here once the content-editor generates them.</p>
@@ -0,0 +1,11 @@
1
+ // Minimal static server for the portfolio. No framework, one dep.
2
+ const express = require('express');
3
+ const path = require('node:path');
4
+
5
+ const app = express();
6
+ app.use(express.static(path.join(__dirname, 'public')));
7
+
8
+ const port = process.env.PORT || 3000;
9
+ app.listen(port, () => console.log(`Portfolio live at http://localhost:${port}`));
10
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a63b424c-683d-508e-b627-27d46322d194")}catch(e){}}();
11
+ //# debugId=a63b424c-683d-508e-b627-27d46322d194
@@ -306,7 +306,7 @@ the `__PROVIDER__` token and skip kinds the provider does not claim.
306
306
  `daily-loop`).
307
307
  3. Provision the lens: the seeded portfolio has a root `AGENTS.md`
308
308
  (the `openai`/Codex marker) next to `.claude/`, but `openai` is
309
- coming soon, so auto-detect ignores it and a plain `sm init`
309
+ experimental (ships disabled), so auto-detect ignores it and a plain `sm init`
310
310
  resolves the `claude` lens with no prompt. Run `sm init`, then
311
311
  `sm scan`. (If `.skill-map/` already exists, just `sm scan`.)
312
312
  4. Mark the skipped predecessors: `state.js set-part <predecessor> skipped`
@@ -133,10 +133,10 @@ element. Decide with §Provider detection:
133
133
  left bar): emit tester-facing messages with `> ` on every line,
134
134
  including blank lines inside a multi-paragraph block. This is the
135
135
  only active path today.
136
- - `provider != claude` (coming soon: Antigravity CLI, agent-skills,
136
+ - `provider != claude` (experimental: Antigravity CLI, agent-skills,
137
137
  any other host where most non-Claude renderers show `>` as a
138
138
  literal character): emit **plain prose**, NO `> ` prefix anywhere.
139
- Kept as the wiring for the coming-soon providers; not exercised
139
+ Kept as the wiring for the experimental providers; not exercised
140
140
  while the tutorial demos `claude` only.
141
141
 
142
142
  Sample messages throughout the part files are written in the Claude
@@ -259,24 +259,24 @@ on-disk convention:
259
259
  | Provider | Base dir | Kinds it claims | Detect via env var(s) |
260
260
  |----------------|-------------------|-----------------------------|--------------------------------------------------------|
261
261
  | `claude` | `.claude/` | `agent`, `command`, `skill` | `CLAUDECODE=1` OR `AI_AGENT` starts with `claude-code` |
262
- | `agent-skills` | `.agents/skills/` | `skill` only (vendor-neutral; also the on-disk home for Google's Antigravity CLI, which replaced the Gemini CLI on 2026-05-19 and adopted this open standard) | coming soon (not selectable in the tutorial yet) |
263
- | `openai` | `.codex/` | `agent` (`.codex/agents/*.toml`) | coming soon (not selectable in the tutorial yet) |
262
+ | `agent-skills` | `.agents/skills/` | `skill` only (vendor-neutral; also the on-disk home for Google's Antigravity CLI, which replaced the Gemini CLI on 2026-05-19 and adopted this open standard) | experimental (ships disabled; `sm tutorial --experimental` to offer it) |
263
+ | `openai` | `.codex/` | `agent` (`.codex/agents/*.toml`) | experimental (ships disabled by default) |
264
264
 
265
265
  **Decision logic, applied silently during pre-flight**: the tutorial
266
266
  demonstrates the `claude` provider only. `agent-skills` and `openai`
267
- are **coming soon** and are not selectable here, so there is no
268
- runtime to detect or opt into.
267
+ are **experimental** (ship disabled by default) and are not selectable
268
+ here, so there is no runtime to detect or opt into.
269
269
 
270
270
  1. `provider = claude`, `<provider_dir> = .claude`, kinds =
271
271
  `{agent, command, skill}`. Always.
272
272
  2. Do NOT offer Antigravity / agent-skills / openai as an alternative,
273
273
  and do NOT ask the tester which runtime hosts them. If a tester
274
274
  says they use another runtime, acknowledge it briefly and explain
275
- that those providers are coming soon, the tutorial demos `claude`
275
+ that those providers are experimental, the tutorial demos `claude`
276
276
  (`.claude/`) today:
277
277
 
278
278
  > Heads up: skill-map also reads Antigravity, agent-skills and
279
- > Codex projects, but those providers are coming soon in this
279
+ > Codex projects, but those providers are experimental in this
280
280
  > tutorial. We'll demo skill-map's Claude provider (`.claude/`)
281
281
  > today.
282
282
 
@@ -146,16 +146,27 @@ content, not configuration). Append at the end:
146
146
  - [ ] XXX revisit naming.
147
147
  ```
148
148
 
149
- Now re-scan so the extractor re-reads its settings and re-counts:
149
+ Now restart `sm` so it re-reads the plugin. `sm` loads the plugin
150
+ (its settings, its slot, the contribution itself) **once, at
151
+ boot**, so a server left running from an earlier chapter froze that
152
+ view at startup and will not see the new `XXX` keyword. Stop it
153
+ with Ctrl+C and run it again (or just run it, if it is not up):
150
154
 
151
155
  ```bash
152
- sm scan
156
+ sm
153
157
  ```
154
158
 
155
- The scan re-emits the contribution with the new count. To see it,
156
- run `sm`, open the browser, click `notes/ideas`, and find the chip
157
- in the card's **left footer** (it also shows in the inspector). It
158
- reads `🔍 kw 3`, one match per keyword.
159
+ Booting runs a fresh scan, so the extractor re-reads
160
+ `ctx.settings.keywords` (now including `XXX`) and re-counts. Open
161
+ the browser, click `notes/ideas`, and find the chip in the card's
162
+ **left footer** (it also shows in the inspector). It reads
163
+ `🔍 kw 3`, one match per keyword.
164
+
165
+ > Heads up: editing only the fixture (`notes/ideas.md`) updates
166
+ > live through the watcher, but it recounts with the OLD keyword
167
+ > set, so the chip would read `🔍 kw 2`. The new `XXX` keyword
168
+ > lives in the plugin, and the plugin is read at boot, that is why
169
+ > restarting `sm` is the step that takes the count to 3.
159
170
 
160
171
  > Three matches. The setting flowed from the extension's `settings`
161
172
  > through `ctx.settings.keywords` into the extractor, the extractor
@@ -175,15 +186,15 @@ The tester edits the extractor source:
175
186
  > Find the `slot` line in the `count` contribution. Change
176
187
  > `'card.footer.left'` to `'card.footer.right'`. Save.
177
188
 
178
- Re-scan:
189
+ The slot is part of the plugin's definition, and `sm` reads that
190
+ **once, at boot**. The watcher re-counts content on the fly, but it
191
+ does not reload a plugin, so the slot move is not live. Restart
192
+ `sm` to pick it up (Ctrl+C, then `sm` again):
179
193
 
180
194
  ```bash
181
- sm scan
195
+ sm
182
196
  ```
183
197
 
184
- If `sm` is still running, the watcher picks up the file change
185
- and re-emits contributions live. If not, run the scan manually.
186
-
187
198
  Refresh the UI, the chip should now appear in the **right footer**
188
199
  of the node card instead of the left.
189
200
 
@@ -31,7 +31,7 @@ lingers, mention it once and move on.
31
31
  **Context (agent, do not narrate the plumbing): the lens.** This
32
32
  project has a root `AGENTS.md` (the `openai`/Codex marker) sitting next
33
33
  to the `.claude/` folder (the `claude` marker, where the tutorial skill
34
- itself lives). `openai` is **coming soon**, though, so auto-detect
34
+ itself lives). `openai` is **experimental** (ships disabled), though, so auto-detect
35
35
  ignores its marker and `sm init` resolves the lens to `claude`
36
36
  silently, exactly like the prologue: only `claude` is selectable today,
37
37
  so there is no ambiguity and no prompt. Do not promise the tester a
@@ -50,7 +50,7 @@ Tell the tester:
50
50
  > site). skill-map maps that harness.
51
51
  >
52
52
  > Run `sm init`, it auto-detects the `claude` lens (this is a Claude
53
- > project; the other lenses are coming soon). Then run `sm` to boot the
53
+ > project; the other lenses are experimental). Then run `sm` to boot the
54
54
  > live UI.
55
55
  >
56
56
  > Open the URL `sm` printed. You'll see **one node**: `AGENTS.md`,
@@ -147,8 +147,8 @@ Expected: the scan prints a line like `Auto-detected activeProvider
147
147
  is just a key in `settings.json`, persisted like any other setting.
148
148
 
149
149
  > Other lenses exist in the engine (`openai` for Codex,
150
- > `agent-skills`, `antigravity`), but they are **coming soon** in the
151
- > tutorial: today we demo the `claude` lens only. The idea to keep is
150
+ > `agent-skills`, `antigravity`), but they are **experimental** (ship
151
+ > disabled by default): today we demo the `claude` lens only. The idea to keep is
152
152
  > the one above, one project reads through exactly one provider at a
153
153
  > time, chosen by `activeProvider`. The lens is cheap to change later
154
154
  > because the graph is always rebuilt from your files, never the