@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.
- package/dist/cli/example/.claude/agents/content-editor.md +22 -0
- package/dist/cli/example/.claude/agents/content-editor.sm +17 -0
- package/dist/cli/example/.claude/commands/init.md +9 -0
- package/dist/cli/example/.claude/commands/publish.md +15 -0
- package/dist/cli/example/.claude/commands/publish.sm +9 -0
- package/dist/cli/example/.claude/skills/check-links/SKILL.md +16 -0
- package/dist/cli/example/.claude/skills/check-links/SKILL.sm +9 -0
- package/dist/cli/example/.skillmapignore +30 -0
- package/dist/cli/example/AGENTS.md +10 -0
- package/dist/cli/example/AGENTS.sm +8 -0
- package/dist/cli/example/docs/DEPLOY.md +11 -0
- package/dist/cli/example/docs/STYLE.md +20 -0
- package/dist/cli/example/package.json +6 -0
- package/dist/cli/example/public/index.html +5 -0
- package/dist/cli/example/server.js +11 -0
- package/dist/cli/tutorial/sm-tutorial/SKILL.md +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/_core.md +8 -8
- package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +22 -11
- package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +2 -2
- package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +2 -2
- package/dist/cli.js +1032 -807
- package/dist/index.js +20 -13
- package/dist/kernel/index.d.ts +10 -18
- package/dist/kernel/index.js +20 -13
- package/dist/ui/chunk-53FVREFR.js +3 -0
- package/dist/ui/{chunk-ECKRC6XD.js → chunk-JEWVC3KW.js} +1 -1
- package/dist/ui/chunk-PEBQMYAG.js +1 -0
- package/dist/ui/{chunk-CM4YB7L4.js → chunk-SR2EXRNN.js} +1 -1
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-FUEU25PM.js → main-VSGHRLCJ.js} +4 -4
- package/package.json +2 -2
- package/dist/ui/chunk-NC3HOVDG.js +0 -1
- package/dist/ui/chunk-RXGORKP5.js +0 -3
- /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,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,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,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,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
|
-
|
|
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` (
|
|
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
|
|
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) |
|
|
263
|
-
| `openai` | `.codex/` | `agent` (`.codex/agents/*.toml`) |
|
|
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 **
|
|
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
|
|
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
|
|
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
|
|
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
|
|
156
|
+
sm
|
|
153
157
|
```
|
|
154
158
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
|
|
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
|
|
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 **
|
|
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
|
|
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 **
|
|
151
|
-
>
|
|
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
|