@skill-map/cli 0.53.4 → 0.53.6
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/tutorial/sm-tutorial/SKILL.md +23 -12
- package/dist/cli/tutorial/sm-tutorial/references/_core.md +35 -9
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +10 -10
- package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +9 -25
- package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +2 -2
- package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +10 -34
- package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +30 -30
- package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +89 -74
- package/dist/cli/tutorial/sm-tutorial/references/part-live-site.md +5 -5
- package/dist/cli/tutorial/sm-tutorial/references/part-maintain.md +35 -52
- package/dist/cli/tutorial/sm-tutorial/references/part-mcp.md +6 -6
- package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +11 -9
- package/dist/cli/tutorial/sm-tutorial/references/part-run-harness.md +34 -8
- package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +2 -2
- package/dist/cli.js +33 -7
- package/dist/index.js +3 -3
- package/dist/kernel/index.js +3 -3
- package/dist/ui/{chunk-R2IJXS47.js → chunk-7OJPO3XD.js} +6 -6
- package/dist/ui/{chunk-JQE4N6JU.js → chunk-PRP3JSUU.js} +1 -1
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-ZXOCLPLS.js → main-O4DGYJ62.js} +2 -2
- package/package.json +1 -1
|
@@ -42,8 +42,10 @@ prefix when a part spans several files: `settings-*` →
|
|
|
42
42
|
`part-authoring.md`).
|
|
43
43
|
|
|
44
44
|
> For the tester this is a single guided session, never a course
|
|
45
|
-
> catalogue.
|
|
46
|
-
>
|
|
45
|
+
> catalogue. Refer to a chapter by its tester-facing `section.chapter`
|
|
46
|
+
> number plus its friendly title (`_core.md` §Numbering); never expose
|
|
47
|
+
> the internal `order` index ("Part 6", off by one from the menu), a
|
|
48
|
+
> raw "chapter id", or tour jargon ("the settings tour").
|
|
47
49
|
|
|
48
50
|
## Pre-flight (run once, silent on success)
|
|
49
51
|
|
|
@@ -145,7 +147,7 @@ every other `<cwd>` mention.
|
|
|
145
147
|
> output, and I verify.
|
|
146
148
|
> 2. **A second terminal**: open it now (new window or tab), then run
|
|
147
149
|
> the command below so it's anchored **exactly to this folder**.
|
|
148
|
-
> That's where you copy and paste every
|
|
150
|
+
> That's where you copy and paste every command I give you to run.
|
|
149
151
|
|
|
150
152
|
```bash
|
|
151
153
|
cd <cwd>
|
|
@@ -195,12 +197,13 @@ the files the prologue's own chapters lay as taught steps, exactly this
|
|
|
195
197
|
set: `<provider_dir>/agents/demo-agent.md`,
|
|
196
198
|
`<provider_dir>/skills/demo-skill/`,
|
|
197
199
|
`<provider_dir>/commands/demo-command.md`, `notes/todo.md`,
|
|
198
|
-
`notes/demo-guideline.md`, `notes/
|
|
200
|
+
`notes/demo-guideline.md`, `notes/demo-guideline2.md`,
|
|
201
|
+
`notes/private-credentials.md`. This is the
|
|
199
202
|
single source for that list. Four entry points delete exactly this set
|
|
200
203
|
when the prologue ran first in the dir: `portfolio-init`, the campaign
|
|
201
|
-
`seed` fast-forward, and `backstage-init` (Part
|
|
204
|
+
`seed` fast-forward, and `backstage-init` (Part 6), each so the part's
|
|
202
205
|
own fixture starts from a clean slate, plus start-over (§Menu, resume,
|
|
203
|
-
wrap-up). Part
|
|
206
|
+
wrap-up). Part 7 `cli` is the inverse
|
|
204
207
|
consumer: its `prologue-built` seed *lays* this fixture (the
|
|
205
208
|
connector-chapter subset, without `notes/private-credentials.md`)
|
|
206
209
|
instead of deleting it, see `fixtures.md` §Seed snapshots. Keep the list
|
|
@@ -332,7 +335,7 @@ When a part begins, honour its `preflight` from the manifest:
|
|
|
332
335
|
`preflight: seed` to fast-forward into them directly, see the `seed`
|
|
333
336
|
case below; `portfolio-init` is just Part 1's flavour of that,
|
|
334
337
|
handling the Part 0 to Part 1 transition.)
|
|
335
|
-
- **`backstage-init`** (Part
|
|
338
|
+
- **`backstage-init`** (Part 6 `extend`): the part teaches plugins on
|
|
336
339
|
its own **master fixture**, distinct from both the demo and the
|
|
337
340
|
portfolio, so on entry make the master fixture the only one on disk.
|
|
338
341
|
Silently, with no narration: (1) clear whatever prior-part fixture is
|
|
@@ -352,10 +355,10 @@ When a part begins, honour its `preflight` from the manifest:
|
|
|
352
355
|
`Write` the part's fixture (read `references/fixtures.md` for the
|
|
353
356
|
verbatim `master-agent` / `master-skill` / `notes/ideas` files; skip
|
|
354
357
|
kinds the provider doesn't claim). If nothing needed clearing and the
|
|
355
|
-
dir was already initialised with the master fixture in place (Part
|
|
358
|
+
dir was already initialised with the master fixture in place (Part 6
|
|
356
359
|
re-entry), that is fine: skip the init and just ensure the fixture
|
|
357
360
|
files are present.
|
|
358
|
-
- **`seed: prologue-built`** (Part
|
|
361
|
+
- **`seed: prologue-built`** (Part 7 `cli`): the part reads the **Part 0
|
|
359
362
|
demo fixture**, NOT the cumulative portfolio, so on entry make that
|
|
360
363
|
fixture the one on disk. Read the state, then:
|
|
361
364
|
- Demo fixture already present (the tester came straight from the
|
|
@@ -374,7 +377,15 @@ When a part begins, honour its `preflight` from the manifest:
|
|
|
374
377
|
On entry, read the state file:
|
|
375
378
|
- If every predecessor campaign part up the `prereq` chain is `done`
|
|
376
379
|
→ reuse the accumulated state; an `sm scan` to refresh is enough,
|
|
377
|
-
nothing to lay.
|
|
380
|
+
nothing to lay. **`mcp` is the exception**: it is ordered last,
|
|
381
|
+
after `extend` (Part 6) and `cli` (Part 7), which both replace the
|
|
382
|
+
portfolio on disk with their own master / demo fixture, so its
|
|
383
|
+
accumulated state cannot be trusted to still be the portfolio.
|
|
384
|
+
`mcp` therefore ALWAYS re-lays its `harness-connected` snapshot on
|
|
385
|
+
entry (clearing a master / demo fixture first if one is present,
|
|
386
|
+
the same clears the `backstage-init` and `prologue-built` cases
|
|
387
|
+
do), then `sm init` if `.skill-map/` is missing and `sm scan`,
|
|
388
|
+
exactly like the fast-forward branch below.
|
|
378
389
|
- Else → **fast-forward, silently** (backstage, do not narrate the
|
|
379
390
|
plumbing): first, if the prologue ran first in this dir, clear the
|
|
380
391
|
full Part 0 demo fixture set (§Fixture and state templates) so the
|
|
@@ -413,7 +424,7 @@ All three are specified in `_core.md`:
|
|
|
413
424
|
the **numbered start menu** (Part 0 is option 1, the recommended
|
|
414
425
|
first pick); the menu (the ToC from `_manifest.yml`, numbered,
|
|
415
426
|
completed parts ticked, `planned` parts hidden, `prereq` gating only
|
|
416
|
-
seedless parts, none today since Part
|
|
427
|
+
seedless parts, none today since Part 7 `cli` now self-seeds) is the
|
|
417
428
|
entry point on the first
|
|
418
429
|
invocation and after every part closes / on resume. Render it with
|
|
419
430
|
the format in `_core.md` §Menu format.
|
|
@@ -421,7 +432,7 @@ All three are specified in `_core.md`:
|
|
|
421
432
|
wipe list is whatever the tester's parts actually created:
|
|
422
433
|
`tutorial-state.yml`, `findings.md`, `.skillmapignore`,
|
|
423
434
|
`.skill-map/`, the full Part 0 demo fixture set (§Fixture and state
|
|
424
|
-
templates), the Part
|
|
435
|
+
templates), the Part 6 fixture if `extend` ran
|
|
425
436
|
(`<provider_dir>/agents/master-agent.md`,
|
|
426
437
|
`<provider_dir>/skills/master-skill/`, `notes/ideas.md`,
|
|
427
438
|
`.skill-map/plugins/`), `link-validation/` if the CLI part ran,
|
|
@@ -8,9 +8,32 @@ library assumes it. Do NOT restate these rules inside a part file.
|
|
|
8
8
|
The tutorial is **one book**: an ordered sequence of **chapters
|
|
9
9
|
grouped in parts**, listed in `_manifest.yml`. A chapter is the
|
|
10
10
|
minimal unit (1 to a few steps). For the tester it is a single
|
|
11
|
-
guided session, never a "course catalogue"
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
guided session, never a "course catalogue": refer to a chapter by its
|
|
12
|
+
tester-facing `section.chapter` number (§Numbering) plus its friendly
|
|
13
|
+
title, never by a raw "chapter id" or tour jargon ("the settings
|
|
14
|
+
tour"). The menu uses friendly titles; once they pick, you just walk
|
|
15
|
+
that path.
|
|
16
|
+
|
|
17
|
+
## Numbering (the `section.chapter` scheme)
|
|
18
|
+
|
|
19
|
+
Two numbering systems coexist; keep them apart:
|
|
20
|
+
|
|
21
|
+
- **Internal (authoring only)**: the `order` field in `_manifest.yml`
|
|
22
|
+
and the `# Part N` file headers, 0-based (Part 0 the prologue …
|
|
23
|
+
Part 8 the MCP appendix). Use it in `**Context**:` blocks and author
|
|
24
|
+
notes; NEVER say it to the tester, it is off by one from what they
|
|
25
|
+
see.
|
|
26
|
+
- **Tester-facing (`S.N`)**: every part is a **section** numbered by
|
|
27
|
+
its 1-based position in the menu (section `1` is the prologue), and
|
|
28
|
+
every chapter inside it carries a `section.chapter` number like a
|
|
29
|
+
semver minor, resetting per section: section `5`'s chapters are
|
|
30
|
+
`5.1`, `5.2`, … This `S.N` form is the ONLY number you say out loud;
|
|
31
|
+
it matches the menu number the tester picked.
|
|
32
|
+
|
|
33
|
+
So the third chapter of section 5 announces as `5.3`, and the
|
|
34
|
+
prologue's first chapter is `1.1`. The numbers are derived at render
|
|
35
|
+
time from the menu order and the chapter's position in its part,
|
|
36
|
+
nothing is stored in the manifest.
|
|
14
37
|
|
|
15
38
|
## Tone
|
|
16
39
|
|
|
@@ -263,10 +286,12 @@ Never call `TaskCreate` / `TaskUpdate` (Inviolable rule #4).
|
|
|
263
286
|
|
|
264
287
|
For every chapter:
|
|
265
288
|
|
|
266
|
-
1. **Announcement**: "Capítulo N: `<title>`. ~M min." then a blank
|
|
289
|
+
1. **Announcement**: "Capítulo S.N: `<title>`. ~M min." then a blank
|
|
267
290
|
line, then (optionally) one sentence of context on its own
|
|
268
|
-
paragraph. `
|
|
269
|
-
|
|
291
|
+
paragraph. `S` is the section number (the part's 1-based menu
|
|
292
|
+
position) and `N` is the 1-based index of the chapter inside that
|
|
293
|
+
part, resetting per part (§Numbering), so section 5's third chapter
|
|
294
|
+
announces as `Capítulo 5.3`. The context paragraph renders ONLY when
|
|
270
295
|
the source has a `**Context**:` field; if omitted, announce the
|
|
271
296
|
title alone. The title comes from the chapter's `title` in
|
|
272
297
|
`_manifest.yml` (translated per §Tone), not the internal id.
|
|
@@ -293,11 +318,11 @@ For every chapter:
|
|
|
293
318
|
§Menu format).
|
|
294
319
|
- **Which parts to list**: parts in `order`, `status: active` only
|
|
295
320
|
(`planned` parts are hidden). A part with a `seed` (the campaign
|
|
296
|
-
parts plus Part
|
|
321
|
+
parts plus Part 7 `cli`) is always shown, even out of order, its
|
|
297
322
|
`preflight: seed` fast-forwards the project into it (SKILL.md
|
|
298
323
|
§Entering a part). A part with a `prereq` but NO `seed` would be
|
|
299
324
|
shown only once its `prereq` is `done`; no active part is in that
|
|
300
|
-
state today (Part
|
|
325
|
+
state today (Part 7 `cli` used to be, now it self-seeds).
|
|
301
326
|
- **After the tester picks**: walk that part; when it ends, run
|
|
302
327
|
§Closing a part (a tester-facing close, then this menu).
|
|
303
328
|
- **Adding content** is data-only: a new chapter in a part (or a new
|
|
@@ -339,7 +364,8 @@ and go straight to §Final wrap-up.
|
|
|
339
364
|
|
|
340
365
|
Render the menu numbered and formatted (NOT a bare list), translated
|
|
341
366
|
to the tester's language. A one-line intro, then per part a **bold
|
|
342
|
-
numbered title line** (number + title + `(~M min)
|
|
367
|
+
numbered title line** (the section number + title + `(~M min)`, that
|
|
368
|
+
number is the `S` major in the chapter `S.N` scheme, §Numbering) as plain prose,
|
|
343
369
|
immediately followed by a single-level `> ` blockquote one-line
|
|
344
370
|
description (what the part covers, derived from its title + chapters).
|
|
345
371
|
A **completed part** keeps its plain title (NO `✓` on the title line)
|
|
@@ -51,7 +51,7 @@ parts:
|
|
|
51
51
|
- id: ignore ; title: "Silence a file via .skillmapignore" ; est_min: 2
|
|
52
52
|
|
|
53
53
|
- id: extend
|
|
54
|
-
order:
|
|
54
|
+
order: 6
|
|
55
55
|
title: "Extend skill-map for the site"
|
|
56
56
|
# Spans three chapter libraries; dispatch by chapter-id prefix:
|
|
57
57
|
# settings-* -> part-settings.md
|
|
@@ -81,7 +81,7 @@ parts:
|
|
|
81
81
|
- id: authoring-6-upgrade ; title: "Try `sm plugins upgrade`" ; est_min: 2
|
|
82
82
|
|
|
83
83
|
- id: cli
|
|
84
|
-
order:
|
|
84
|
+
order: 7
|
|
85
85
|
title: "The CLI in depth"
|
|
86
86
|
step_file: part-cli.md
|
|
87
87
|
pace: auto-advance
|
|
@@ -142,12 +142,13 @@ parts:
|
|
|
142
142
|
prereq: connect-harness
|
|
143
143
|
status: active
|
|
144
144
|
chapters:
|
|
145
|
-
- id: generate
|
|
146
|
-
- id: serve
|
|
145
|
+
- id: generate ; title: "The agent generates the HTML in public/" ; est_min: 3
|
|
146
|
+
- id: serve ; title: "node server.js: your portfolio, live next to the graph" ; est_min: 3
|
|
147
|
+
- id: editor-live ; title: "Let the content-editor agent write a posts page (optional)" ; est_min: 3
|
|
147
148
|
|
|
148
149
|
- id: maintain
|
|
149
150
|
order: 4
|
|
150
|
-
title: "Maintain the
|
|
151
|
+
title: "Maintain the harness"
|
|
151
152
|
step_file: part-maintain.md
|
|
152
153
|
pace: auto-advance
|
|
153
154
|
preflight: seed
|
|
@@ -157,14 +158,13 @@ parts:
|
|
|
157
158
|
chapters:
|
|
158
159
|
- id: broken-ref ; title: "A ref breaks (you rename DEPLOY.md)" ; est_min: 3
|
|
159
160
|
- id: analyzers ; title: "The analyzer catalogue (what sm check catches)" ; est_min: 3
|
|
160
|
-
- id: orphans ; title: "Orphans (
|
|
161
|
+
- id: orphans ; title: "Orphans (a page nobody links to)" ; est_min: 2
|
|
161
162
|
- id: reserved ; title: "Reserved names" ; est_min: 2
|
|
162
163
|
- id: sidecar ; title: "Annotations .sm and consent" ; est_min: 3
|
|
163
|
-
- id: versions ; title: "Versions: sm bump and history" ; est_min: 2
|
|
164
164
|
|
|
165
165
|
- id: mcp
|
|
166
|
-
order:
|
|
167
|
-
title: "MCP" #
|
|
166
|
+
order: 8
|
|
167
|
+
title: "MCP" # standalone appendix, ordered last; ALWAYS re-seeds harness-connected (extend/cli wipe the portfolio before it)
|
|
168
168
|
step_file: part-mcp.md
|
|
169
169
|
pace: auto-advance
|
|
170
170
|
preflight: seed
|
|
@@ -175,7 +175,7 @@ parts:
|
|
|
175
175
|
- id: mcp-node ; title: "content-editor declares an MCP tool; the mcp:// node appears" ; est_min: 3
|
|
176
176
|
|
|
177
177
|
- id: live-site
|
|
178
|
-
order:
|
|
178
|
+
order: 5
|
|
179
179
|
title: "Ship the site (the full publish pipeline)" # the finale / climax
|
|
180
180
|
step_file: part-live-site.md
|
|
181
181
|
pace: auto-advance
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Fixture templates
|
|
2
2
|
|
|
3
3
|
Fixtures the orchestrator lays for the auto-fixtured parts. Two full
|
|
4
|
-
templates live here: the **master fixture** (Part
|
|
4
|
+
templates live here: the **master fixture** (Part 6, "Extend
|
|
5
5
|
skill-map", `backstage-init`) right below, and the **portfolio
|
|
6
6
|
fixture** (Part 1, "The project from zero", `portfolio-init`) at the
|
|
7
7
|
end of this file. The **Part 0 demo fixture** is not templated here:
|
|
@@ -18,7 +18,7 @@ context for. Holds for every command fixture wherever it is defined
|
|
|
18
18
|
(today: the prologue `demo-command`, the `publish` command, and the
|
|
19
19
|
`reserved` chapter's `init`).
|
|
20
20
|
|
|
21
|
-
## Master fixture (Part
|
|
21
|
+
## Master fixture (Part 6): layout (per provider)
|
|
22
22
|
|
|
23
23
|
Per §Provider detection in `SKILL.md`, the `<provider_dir>`
|
|
24
24
|
placeholder resolves to `.claude/` or `.agents/skills/` depending
|
|
@@ -62,8 +62,6 @@ description: |
|
|
|
62
62
|
tools so the `core/tools-counter` extractor emits a count.
|
|
63
63
|
tools: [Read, Bash, Edit]
|
|
64
64
|
model: sonnet
|
|
65
|
-
metadata:
|
|
66
|
-
version: "1.0.0"
|
|
67
65
|
---
|
|
68
66
|
|
|
69
67
|
# master-agent
|
|
@@ -82,17 +80,6 @@ description: |
|
|
|
82
80
|
Example skill paired with the master-agent for the advanced
|
|
83
81
|
tutorial. Links to the agent so extractors and analyzers have
|
|
84
82
|
something to chew on.
|
|
85
|
-
inputs:
|
|
86
|
-
- name: target
|
|
87
|
-
type: path
|
|
88
|
-
description: File to process.
|
|
89
|
-
required: true
|
|
90
|
-
outputs:
|
|
91
|
-
- name: report
|
|
92
|
-
type: string
|
|
93
|
-
description: Markdown summary.
|
|
94
|
-
metadata:
|
|
95
|
-
version: "1.0.0"
|
|
96
83
|
---
|
|
97
84
|
|
|
98
85
|
# master-skill
|
|
@@ -115,9 +102,6 @@ name: Ideas backlog
|
|
|
115
102
|
description: |
|
|
116
103
|
Free-form notes for the advanced tutorial. Demonstrates the
|
|
117
104
|
catch-all markdown kind alongside the agent and skill.
|
|
118
|
-
tags: [notes, master]
|
|
119
|
-
metadata:
|
|
120
|
-
version: "1.0.0"
|
|
121
105
|
---
|
|
122
106
|
|
|
123
107
|
# Ideas
|
|
@@ -146,7 +130,7 @@ Per finding:
|
|
|
146
130
|
Laid backstage before the tester's `sm init` in Part 1. The Express
|
|
147
131
|
skeleton (`server.js`, `package.json`, `public/index.html`) is plain
|
|
148
132
|
scaffolding, not `.md`, so the scan ignores it; it makes the project
|
|
149
|
-
real and runnable (Part 3 runs it, Part
|
|
133
|
+
real and runnable (Part 3 runs it, Part 5 ships it). The one boot node is the
|
|
150
134
|
handbook `AGENTS.md`. On `agent-skills` / Antigravity (no `agent`
|
|
151
135
|
kind) the harness still works: the agent member is created as a skill
|
|
152
136
|
in a later chapter.
|
|
@@ -224,7 +208,7 @@ Append to the universal `.skillmapignore` (written in pre-flight, see
|
|
|
224
208
|
## Seed snapshots (for `preflight: seed`)
|
|
225
209
|
|
|
226
210
|
When the orchestrator enters a seedable part out of order (the campaign
|
|
227
|
-
parts when their predecessors are not `done`, or Part
|
|
211
|
+
parts when their predecessors are not `done`, or Part 7 `cli` when the
|
|
228
212
|
demo fixture is not the one on disk), it fast-forwards the project by
|
|
229
213
|
laying the snapshot below, then `sm init` (if `.skill-map/` is missing) +
|
|
230
214
|
`sm scan`. These are **checklists, not content**: each row names a file
|
|
@@ -259,16 +243,16 @@ Everything in `harness-built`, PLUS the Part 2 wiring:
|
|
|
259
243
|
After laying a campaign snapshot the map matches the state a tester would
|
|
260
244
|
have at the END of the part just before the one being entered.
|
|
261
245
|
|
|
262
|
-
### Seed snapshot: `prologue-built` (Part
|
|
246
|
+
### Seed snapshot: `prologue-built` (Part 7 `cli`)
|
|
263
247
|
|
|
264
248
|
NOT cumulative and NOT the portfolio: this is the **Part 0 demo
|
|
265
|
-
fixture**, the
|
|
249
|
+
fixture**, the six standalone demo nodes with `notes/todo` wired as the
|
|
266
250
|
hub, the clean state (`✓ No issues`) at the end of the prologue's
|
|
267
|
-
connector chapters. Part
|
|
251
|
+
connector chapters. Part 7 only reads it. Because it is a different
|
|
268
252
|
fixture from the portfolio, entry first resets any portfolio on disk
|
|
269
253
|
(see SKILL.md §Entering a part, the `cli` case).
|
|
270
254
|
|
|
271
255
|
1. `<provider_dir>/agents/demo-agent.md` <- SKILL.md §Fixture and state templates. (The `.skillmapignore` is universal, already on disk from pre-flight; the snapshot does not lay it.)
|
|
272
|
-
2. `<provider_dir>/skills/demo-skill/SKILL.md`, `<provider_dir>/commands/demo-command.md`, `notes/todo.md`, `notes/demo-guideline.md` <- part-fundamentals.md, chapter `kinds`.
|
|
273
|
-
3. EDIT `notes/todo.md`: wire the hub bullets pointing at the
|
|
256
|
+
2. `<provider_dir>/skills/demo-skill/SKILL.md`, `<provider_dir>/commands/demo-command.md`, `notes/todo.md`, `notes/demo-guideline.md`, `notes/demo-guideline2.md` <- part-fundamentals.md, chapter `kinds`.
|
|
257
|
+
3. EDIT `notes/todo.md`: wire the hub bullets pointing at the five other nodes <- part-fundamentals.md, chapter `connectors`.
|
|
274
258
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Part
|
|
1
|
+
# Part 6 (c): Extend skill-map - build plugins (step library, `authoring-*` ids)
|
|
2
2
|
|
|
3
|
-
Step bodies for the plugin-authoring chapters of Part
|
|
3
|
+
Step bodies for the plugin-authoring chapters of Part 6.
|
|
4
4
|
The SKILL.md orchestrator dispatches each `authoring-*` chapter id
|
|
5
5
|
here; `settings-*` ids it dispatches to `part-settings.md`.
|
|
6
6
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Part
|
|
1
|
+
# Part 7: The CLI in depth - step library
|
|
2
2
|
|
|
3
3
|
The deep-dive into the rest of the CLI: browsing verbs, ASCII graph + export, broken-ref issues, the `.sm` annotation consent prompt, and validating links to folders outside the scan scope. `pace: auto-advance` (walk straight into the next chapter's Announcement once one is marked done) and `preflight: seed` with the `prologue-built` snapshot: it self-seeds its own copy of the Part 0 demo fixture, so it works even if the campaign already replaced that fixture with the portfolio (see SKILL.md §Entering a part, the `cli` case). Shared conventions (tone, provider detection / substitution, the `> ` rendering rule, the per-step cycle) live in `_core.md`; do not restate them here.
|
|
4
4
|
|
|
@@ -13,7 +13,7 @@ sm show .claude/skills/demo-skill/SKILL.md
|
|
|
13
13
|
sm check
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Expected: you see the
|
|
16
|
+
Expected: you see the 6 fixture nodes listed with their kind: `demo-skill` (skill), `demo-agent` (agent), `demo-command` (command), `notes/todo` (`markdown`, the catch-all per the `kinds` chapter), and the two guideline notes `notes/demo-guideline` and `notes/demo-guideline2` (both `markdown`, the hub's confidence pair: a faint `mentions` at 0.50 and a resolved `references` at 1.00). `check` reads the persisted `scan_issues` table, it does NOT re-walk the filesystem. The fixture is clean (the connector / inspector chapters captured the latest state before Ctrl+C), so the verb prints `✓ No issues`. We will plant one in the `issues` chapter and watch the rule catch it after a fresh `sm scan`.
|
|
17
17
|
|
|
18
18
|
Mark `browse`: done.
|
|
19
19
|
|
|
@@ -63,50 +63,28 @@ sm check --json
|
|
|
63
63
|
|
|
64
64
|
Expected: the error surfaces the dangling link from `notes/todo.md` to the non-existent `missing-page.md`. The `--analyzers` filter lets you focus on a single issue type; `--json` emits the structured payload (useful for CI / scripting). When done, the tester can leave the bullet in place or delete it, the rest of the deep-dive doesn't depend on it.
|
|
65
65
|
|
|
66
|
-
If the tester asks about `sm orphans` vs `sm check`:
|
|
67
|
-
|
|
68
|
-
- `sm check` reports broken-refs and other rule-driven issues
|
|
69
|
-
(the deterministic catalog).
|
|
70
|
-
- `sm orphans` is a **different scope**: auto-rename / orphan-node
|
|
71
|
-
detection (a node whose file disappeared, or a candidate rename
|
|
72
|
-
the kernel is still unsure about). Our fixture doesn't produce
|
|
73
|
-
orphans of that kind, so `sm orphans` will print "No orphan /
|
|
74
|
-
auto-rename issues", that's expected, not a bug.
|
|
75
|
-
|
|
76
66
|
Mark `issues`: done.
|
|
77
67
|
|
|
78
68
|
## Chapter `annotations` - Annotations and the .sm consent prompt (~3 min)
|
|
79
69
|
|
|
80
|
-
**Context**:
|
|
70
|
+
**Context**: skill-map keeps each tracked `.md`'s metadata (version, history, tags, annotations) in a sibling **`.sm` companion file** so the `.md` stays clean, and the first time it writes one in a project it asks for consent (remembered in the gitignored `settings.local.json`). The Maintain part walks that consent flow in full; this chapter does not re-teach it. The CLI focus here is what Maintain does not cover: the **three sidecar verbs** and the `--yes` non-interactive switch. A tester who jumped straight here gets a one-line refresher in the demo below.
|
|
81
71
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
We'll demonstrate by creating an empty annotation scaffold for `notes/todo.md`. **Reset any prior consent state first** so the prompt actually appears (an earlier step may have flipped the flag without you noticing, in which case `sm sidecar annotate` would skip straight past the prompt and the lesson would not land):
|
|
72
|
+
Create a scaffold for `notes/todo.md` so there is a `.sm` on disk to talk about. **Reset any prior consent state first** so the prompt appears (an earlier step may have flipped the flag, in which case the verb skips straight past it):
|
|
85
73
|
|
|
86
74
|
```bash
|
|
87
75
|
rm -f notes/todo.sm .skill-map/settings.local.json
|
|
88
76
|
sm sidecar annotate notes/todo.md
|
|
89
77
|
```
|
|
90
78
|
|
|
91
|
-
Expected: a short explanation
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
cat notes/todo.sm
|
|
95
|
-
cat .skill-map/settings.local.json
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
**Why the prompt?** The choice is **per-user, per-project**: stored in the gitignored `settings.local.json` so each contributor consents independently and nothing about the choice travels via the repo. Once accepted, the flag stays set and skill-map will never ask again on this checkout (the next `sm sidecar annotate` or `sm bump` goes through silently). On a CI / non-interactive session, pass `--yes` to grant up-front.
|
|
79
|
+
Expected: a short explanation, then a `[Y/n]` prompt (capital Y = default Yes, just hit Enter). After accepting, `notes/todo.sm` appears with an `identity:` block plus an empty `annotations: {}`, and `.skill-map/settings.local.json` records `{ "allowEditSmFiles": true }` so it never asks again on this checkout (the choice is per-user, per-project, gitignored).
|
|
99
80
|
|
|
100
|
-
|
|
81
|
+
The part the CLI adds on top, the three sidecar verbs (all share that same consent gate):
|
|
101
82
|
|
|
102
|
-
- `sm sidecar annotate
|
|
103
|
-
|
|
104
|
-
- `sm
|
|
105
|
-
sidecar's version and refreshes its hashes, same consent gate.
|
|
106
|
-
- `sm sidecar refresh <node>` is the hash-only update (no version
|
|
107
|
-
bump).
|
|
83
|
+
- `sm sidecar annotate <node>` is the scaffold verb you just ran (creates a fresh `.sm`).
|
|
84
|
+
- `sm bump <node>` is the day-to-day verb: it increments the sidecar's version and refreshes its hashes.
|
|
85
|
+
- `sm sidecar refresh <node>` is the hash-only update (no version bump).
|
|
108
86
|
|
|
109
|
-
|
|
87
|
+
And for automation: a CI / non-interactive session has no one to answer the `[Y/n]`, so pass `--yes` to grant consent up front (`sm sidecar annotate <node> --yes`).
|
|
110
88
|
|
|
111
89
|
Mark `annotations`: done.
|
|
112
90
|
|
|
@@ -131,7 +109,6 @@ name: note-with-external-link
|
|
|
131
109
|
description: |
|
|
132
110
|
Demo note that links out to a sibling project (hijoB) sitting
|
|
133
111
|
next to this one. Used to teach scan.referencePaths.
|
|
134
|
-
tags: [demo, link-validation]
|
|
135
112
|
---
|
|
136
113
|
|
|
137
114
|
# Note with external link
|
|
@@ -147,7 +124,6 @@ description: |
|
|
|
147
124
|
Target of the cross-folder link. Lives outside hijoA's scan
|
|
148
125
|
scope on purpose: that is precisely what scan.referencePaths
|
|
149
126
|
is designed to bridge.
|
|
150
|
-
tags: [demo, link-validation]
|
|
151
127
|
---
|
|
152
128
|
|
|
153
129
|
# External spec
|
|
@@ -14,15 +14,6 @@ name: check-links
|
|
|
14
14
|
description: |
|
|
15
15
|
Validates the portfolio's internal links before publishing. Walks
|
|
16
16
|
every generated page and reports any link whose target is missing.
|
|
17
|
-
inputs:
|
|
18
|
-
- name: root
|
|
19
|
-
type: path
|
|
20
|
-
description: Folder of generated pages to check.
|
|
21
|
-
required: true
|
|
22
|
-
outputs:
|
|
23
|
-
- name: report
|
|
24
|
-
type: string
|
|
25
|
-
description: List of broken links, empty when all resolve.
|
|
26
17
|
---
|
|
27
18
|
|
|
28
19
|
# check-links
|
|
@@ -55,9 +46,9 @@ Wait for confirmation. Mark `check-links`: done.
|
|
|
55
46
|
|
|
56
47
|
On `agent-skills` / Antigravity there is no `command` kind, so skip this whole chapter and fold its purpose into the prose of the next one.
|
|
57
48
|
|
|
58
|
-
Tell the tester to create the file themselves (it is their project's file, Inviolable rule #2). Substitute `<provider_dir>` per `_core.md` in the path you give them:
|
|
49
|
+
Tell the tester to create the file themselves (it is their project's file, Inviolable rule #2). Substitute `<provider_dir>` per `_core.md` in the path you give them. The frontmatter fence (`---`) MUST sit on column 0 with no leading spaces: present the block below exactly as written, and if the tester pastes it indented, have them strip the leading whitespace. An indented `---` does not parse as YAML, so the `publish` node would land without its `name` or `description`.
|
|
59
50
|
|
|
60
|
-
> Create `.claude/commands/publish.md` with exactly this content:
|
|
51
|
+
> Create `.claude/commands/publish.md` with exactly this content (the first line is `---`, nothing before it):
|
|
61
52
|
|
|
62
53
|
```markdown
|
|
63
54
|
---
|
|
@@ -65,12 +56,6 @@ name: publish
|
|
|
65
56
|
description: |
|
|
66
57
|
Publishes the portfolio: runs the link check, hands off to the
|
|
67
58
|
content editor for any last fixes, then follows the deploy runbook.
|
|
68
|
-
shortcut: "ctrl+alt+p"
|
|
69
|
-
args:
|
|
70
|
-
- name: root
|
|
71
|
-
type: path
|
|
72
|
-
description: Folder of generated pages to publish.
|
|
73
|
-
required: true
|
|
74
59
|
---
|
|
75
60
|
|
|
76
61
|
# publish
|
|
@@ -99,6 +84,12 @@ Continue the tester message:
|
|
|
99
84
|
> One node, three connectors, three link kinds. The harness is
|
|
100
85
|
> starting to look like a real graph.
|
|
101
86
|
>
|
|
87
|
+
> 💡 Tip: to tidy every node into a clean layout, click the
|
|
88
|
+
> **Re-arrange layout** button in the map toolbar (tooltip
|
|
89
|
+
> "Re-arrange the visible nodes"). Handy whenever the graph starts to
|
|
90
|
+
> look crowded. If you've dragged nodes by hand it asks for
|
|
91
|
+
> confirmation first, otherwise it just re-arranges.
|
|
92
|
+
>
|
|
102
93
|
> Did the three arrows appear?
|
|
103
94
|
|
|
104
95
|
Wait for confirmation. You MAY use `Read` on the file afterwards to verify it landed. Mark `publish`: done.
|
|
@@ -150,34 +141,43 @@ Wait for confirmation. You MAY use `Read` on the two files afterwards to verify
|
|
|
150
141
|
|
|
151
142
|
## Chapter `confidence` - How sure is each link (~3 min)
|
|
152
143
|
|
|
153
|
-
**Context**:
|
|
144
|
+
**Context**: skill-map estimates how sure it is of every connection and shows that as opacity. In this harness every link resolves to a real node, so they all read solid (1.00); the faint, low-confidence case is the one the tester met in the prologue (the bare `@demo-guideline` mention that had nothing to resolve to). Here we open the Inspector on a real harness node, read the all-solid numbers, and point back to that prologue contrast. Mirrors the prologue's connectors beat on the portfolio.
|
|
154
145
|
|
|
155
146
|
No file edits in this chapter, pure observation on the graph the tester just built.
|
|
156
147
|
|
|
157
148
|
Tell the tester:
|
|
158
149
|
|
|
159
150
|
> Last beat of this part: how sure is skill-map about each connection?
|
|
160
|
-
>
|
|
161
|
-
>
|
|
162
|
-
>
|
|
151
|
+
> It estimates a **confidence** for every link and draws it as opacity:
|
|
152
|
+
> the surer a connection is real, the more solid the arrow; the less
|
|
153
|
+
> sure, the more translucent.
|
|
163
154
|
>
|
|
164
155
|
> Open the Inspector for the `publish` node (click it on the **Map**).
|
|
165
156
|
> Scroll down to the **Connections** panel and read the **Outgoing**
|
|
166
|
-
> rows. Each row shows the link kind and a confidence badge
|
|
157
|
+
> rows. Each row shows the link kind and a confidence badge, and here
|
|
158
|
+
> every one reads **1.00**:
|
|
159
|
+
>
|
|
160
|
+
> - `publish -> docs/DEPLOY.md` (`references`) is a markdown link to a
|
|
161
|
+
> file that exists on disk, so skill-map is certain.
|
|
162
|
+
> - `publish -> content-editor` (`mentions`) resolves to the real
|
|
163
|
+
> content-editor agent, and `publish -> check-links` (`invokes`)
|
|
164
|
+
> resolves to the real check-links skill, so both are certain too.
|
|
167
165
|
>
|
|
168
|
-
>
|
|
169
|
-
>
|
|
170
|
-
>
|
|
171
|
-
> -
|
|
172
|
-
>
|
|
173
|
-
>
|
|
174
|
-
>
|
|
166
|
+
> Your whole harness reads solid because every link lands on a real
|
|
167
|
+
> node, that is what a clean, fully wired graph looks like. So what
|
|
168
|
+
> does a *low*-confidence connector look like? You saw one back in the
|
|
169
|
+
> prologue: `@demo-guideline` was a bare `@`-mention pointing at a
|
|
170
|
+
> note, and a bare `@handle` only firmly resolves to an agent, so it
|
|
171
|
+
> had nothing to land on and stayed a soft guess at **0.50**, drawn
|
|
172
|
+
> translucent. The fix there was one character: `@demo-guideline2.md`,
|
|
173
|
+
> the same handle plus a `.md`, resolved to the real file and jumped to
|
|
174
|
+
> **1.00**.
|
|
175
175
|
>
|
|
176
176
|
> The number is the certainty, and the opacity on the canvas is just
|
|
177
177
|
> that number drawn as transparency: a glance at the **Map** tells you
|
|
178
178
|
> which connections are rock solid and which are skill-map's best
|
|
179
179
|
> guess.
|
|
180
180
|
>
|
|
181
|
-
> Do you see
|
|
181
|
+
> Do you see every badge reading 1.00 in the Inspector?
|
|
182
182
|
|
|
183
183
|
Wait for confirmation. Mark `confidence`: done. Last chapter of the part: apply §Closing a part (the close names the part by its title and routes back to the menu; do NOT lead into the next part from here).
|