@skill-map/cli 0.61.3 → 0.61.5
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/fixtures-data/sets/portfolio/en/__PROVIDER__/agents/content-editor.md +1 -1
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/es/__PROVIDER__/agents/content-editor.md +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +2 -7
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +1 -2
- package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +6 -0
- package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +40 -34
- package/dist/cli.js +64 -27
- package/dist/index.js +3 -3
- package/dist/kernel/index.js +3 -3
- package/dist/ui/chunk-6NYH7LND.js +3 -0
- package/dist/ui/{chunk-6WSKVPDL.js → chunk-UTGLW5ON.js} +10 -10
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-CDGL35UC.js → main-OTDMPZHD.js} +2 -2
- package/package.json +1 -1
- package/dist/ui/chunk-66JAVSK5.js +0 -3
|
@@ -18,4 +18,4 @@ Turns a short brief into a finished portfolio page.
|
|
|
18
18
|
4. Use one `<h1>`, group sections under `<h2>`, and reuse the shared header, nav, and footer so every page matches.
|
|
19
19
|
5. Add a link back to Home, and link the new page from the home nav.
|
|
20
20
|
|
|
21
|
-
Rules: plain static HTML, no framework, no client JS, one page per file.
|
|
21
|
+
Rules: plain static HTML, no framework, no client JS, one page per file. If a page needs an image, use a free placeholder from https://placekittens.com/ (e.g. `https://placekittens.com/400/300`) so the `<img>` never points at a missing file.
|
|
@@ -18,4 +18,4 @@ Convierte un brief corto en una página de portfolio terminada.
|
|
|
18
18
|
4. Usa un solo `<h1>`, agrupa las secciones bajo `<h2>` y reutiliza el header, la nav y el footer compartidos para que todas las páginas coincidan.
|
|
19
19
|
5. Agrega un enlace de vuelta a Home, y enlaza la nueva página desde la nav de inicio.
|
|
20
20
|
|
|
21
|
-
Reglas: HTML estático plano, sin framework, sin JS de cliente, una página por archivo.
|
|
21
|
+
Reglas: HTML estático plano, sin framework, sin JS de cliente, una página por archivo. Si una página necesita una imagen, usa un placeholder gratuito de https://placekittens.com/ (por ejemplo `https://placekittens.com/400/300`) para que el `<img>` nunca apunte a un archivo inexistente.
|
|
@@ -128,13 +128,8 @@
|
|
|
128
128
|
"chapters": [
|
|
129
129
|
{
|
|
130
130
|
"id": "setup",
|
|
131
|
-
"title": "Make it yours
|
|
132
|
-
"est_min":
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
"id": "preview",
|
|
136
|
-
"title": "Bring it up and see your site",
|
|
137
|
-
"est_min": 2
|
|
131
|
+
"title": "Make it yours and bring it up",
|
|
132
|
+
"est_min": 5
|
|
138
133
|
},
|
|
139
134
|
{
|
|
140
135
|
"id": "add-page",
|
|
@@ -143,8 +143,7 @@ parts:
|
|
|
143
143
|
fixture: portfolio # reuses the wired harness; lays the pretty site (style.css + pages) as taught steps
|
|
144
144
|
status: active
|
|
145
145
|
chapters:
|
|
146
|
-
- id: setup ; title: "Make it yours
|
|
147
|
-
- id: preview ; title: "Bring it up and see your site" ; est_min: 2
|
|
146
|
+
- id: setup ; title: "Make it yours and bring it up" ; est_min: 5
|
|
148
147
|
- id: add-page ; title: "Add a page with your agent" ; est_min: 4
|
|
149
148
|
- id: broken-ref ; title: "A rename breaks a link" ; est_min: 4
|
|
150
149
|
- id: reserved ; title: "A reserved name collides" ; est_min: 2
|
|
@@ -162,6 +162,12 @@ Tell the tester:
|
|
|
162
162
|
> daily-loop part. The opacity on the canvas is just that number drawn
|
|
163
163
|
> as transparency.
|
|
164
164
|
>
|
|
165
|
+
> **Note:** why does confidence matter? It mirrors how the runtime itself
|
|
166
|
+
> resolves a reference: a deterministic name-and-path lookup, no guessing
|
|
167
|
+
> and no scanning the tree for a file under some other extension. That is
|
|
168
|
+
> cheaper and it does not fail, so the agent spends fewer tokens and less
|
|
169
|
+
> time, the same reason a clean, well-named harness is worth keeping.
|
|
170
|
+
>
|
|
165
171
|
> Do you see every badge reading 1.00 in the Inspector?
|
|
166
172
|
|
|
167
173
|
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).
|
|
@@ -45,14 +45,16 @@ broken-reference markers, and confidence live.
|
|
|
45
45
|
|
|
46
46
|
**Act A - Add**
|
|
47
47
|
|
|
48
|
-
## Chapter `setup` - Make it yours
|
|
48
|
+
## Chapter `setup` - Make it yours and bring it up (~5 min)
|
|
49
49
|
|
|
50
50
|
**Context**: the harness is wired (you built it in the earlier parts). Now you
|
|
51
51
|
put it to work on a real day. First, make the site yours and give it a look you
|
|
52
|
-
would not be embarrassed to share
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
would not be embarrassed to share, then serve it and open it in the browser, the
|
|
53
|
+
early payoff before the daily loop fills it with pages. The honest beat: the HTML
|
|
54
|
+
and CSS are Layer 2 (the harness's output); skill-map maps the harness (Layer 1,
|
|
55
|
+
the `.md` files), so the site landing on disk does NOT move the graph, and that
|
|
56
|
+
is correct, not a bug. The tester runs the serve commands themselves (one of the
|
|
57
|
+
few non-`sm` beats); guide them, do not run them.
|
|
56
58
|
|
|
57
59
|
**Preparation**:
|
|
58
60
|
|
|
@@ -169,31 +171,25 @@ footer.site { border-top: 1px solid var(--border); padding: 2rem 0; color: var(-
|
|
|
169
171
|
</html>
|
|
170
172
|
```
|
|
171
173
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
> **About** page, named after you. These are Layer 2 (the harness's output), so
|
|
176
|
-
> the **Map** did not move, and that is correct: skill-map maps the harness (the
|
|
177
|
-
> `.md` files, Layer 1), not the HTML it produces. Next we bring it up so you
|
|
178
|
-
> can see it.
|
|
179
|
-
|
|
180
|
-
Mark `setup`: done. Auto-advance to `preview`.
|
|
181
|
-
|
|
182
|
-
## Chapter `preview` - Bring it up and see your site (~2 min)
|
|
183
|
-
|
|
184
|
-
**Context**: the first look. The site is styled but the tester has only seen it
|
|
185
|
-
as files; now serve it and open it in the browser, the early payoff before the
|
|
186
|
-
daily loop fills it with pages. The tester runs the commands themselves (one of
|
|
187
|
-
the few non-`sm` beats); guide them, do not run them.
|
|
174
|
+
The site is styled now, so bring it up in the same beat (the tester runs the
|
|
175
|
+
serve commands themselves). `sm` is still running in their second terminal, so
|
|
176
|
+
the server needs a **third terminal** anchored to the same project folder:
|
|
188
177
|
|
|
189
178
|
```bash
|
|
190
179
|
npm install
|
|
191
180
|
node server.js
|
|
192
181
|
```
|
|
193
182
|
|
|
194
|
-
>
|
|
195
|
-
>
|
|
196
|
-
>
|
|
183
|
+
> **Note:** I gave your site a face: a shared stylesheet plus a styled **Home**
|
|
184
|
+
> and **About** page, named after you. These are Layer 2 (the harness's output),
|
|
185
|
+
> so the **Map** did not move, and that is correct: skill-map maps the harness
|
|
186
|
+
> (the `.md` files, Layer 1), not the HTML it produces.
|
|
187
|
+
>
|
|
188
|
+
> Now bring your site up. `sm` is still running in your second terminal, so open
|
|
189
|
+
> a **third terminal** in this same project folder and run the two commands
|
|
190
|
+
> there. `npm install` pulls the one small library the server needs (Express, on
|
|
191
|
+
> the Node you already have), and `node server.js` starts it and prints a line
|
|
192
|
+
> like `Listening on http://localhost:3000`.
|
|
197
193
|
>
|
|
198
194
|
> Open `http://localhost:3000`: there is your site, named after you, with a
|
|
199
195
|
> clean layout. Click **About** and back to **Home**.
|
|
@@ -209,7 +205,7 @@ node server.js
|
|
|
209
205
|
Wait for confirmation. If `node server.js` reports `Cannot find module
|
|
210
206
|
'express'`, `npm install` did not run first, run it (it reads `package.json` and
|
|
211
207
|
pulls Express), then retry; if `npm install` itself fails, check they are in the
|
|
212
|
-
project root and Node is on PATH. Mark `
|
|
208
|
+
project root and Node is on PATH. Mark `setup`: done. Auto-advance to
|
|
213
209
|
`add-page`.
|
|
214
210
|
|
|
215
211
|
## Chapter `add-page` - Add a page with your agent (~4 min)
|
|
@@ -335,10 +331,11 @@ The watcher picks up the new command. Tell the tester:
|
|
|
335
331
|
> `/help`, `/clear`, `/config`), so the runtime would silently ignore your file,
|
|
336
332
|
> it never runs. The fix is a name the runtime does not own.
|
|
337
333
|
>
|
|
338
|
-
> Rename it to `new-page`: rename the file `.claude/commands/init.md` to
|
|
339
|
-
> `.claude/commands/new-page.md
|
|
340
|
-
>
|
|
341
|
-
> `#
|
|
334
|
+
> Rename it to `new-page`: first rename the file `.claude/commands/init.md` to
|
|
335
|
+
> `.claude/commands/new-page.md`. Then open it in your text editor / IDE and, at
|
|
336
|
+
> the top, where the frontmatter says `name: init`, change it to
|
|
337
|
+
> `name: new-page`; also change the H1 to `# new-page` (a command's H1 stays a
|
|
338
|
+
> plain title, never `# /new-page`). Save.
|
|
342
339
|
>
|
|
343
340
|
> Watch the **Map** again: the warning clears and the node is now `new-page`,
|
|
344
341
|
> all live. Notice what cleared it: changing the **name** (`frontmatter.name`),
|
|
@@ -396,7 +393,9 @@ conditional on the real result):
|
|
|
396
393
|
> And the Map did not move while the pipeline ran: the pages are Layer 2 output;
|
|
397
394
|
> the harness on the canvas is Layer 1, and that is what skill-map maps.
|
|
398
395
|
>
|
|
399
|
-
>
|
|
396
|
+
> As you saw in the lines just above, I did not report anything odd: the link
|
|
397
|
+
> check came back clean and `/publish` is wired correctly across your pages.
|
|
398
|
+
> Shall we continue?
|
|
400
399
|
|
|
401
400
|
Wait for confirmation. Mark `publish`: done. Auto-advance to `stability`.
|
|
402
401
|
|
|
@@ -472,7 +471,14 @@ Wait for confirmation. The tester runs the commands; do not run them. If
|
|
|
472
471
|
server with Ctrl+C and apply the ports edge case.
|
|
473
472
|
|
|
474
473
|
This is the campaign finale. Congratulate them plainly: they went from an empty
|
|
475
|
-
directory to a real, running portfolio plus a complete map of its harness.
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
474
|
+
directory to a real, running portfolio plus a complete map of its harness. Then
|
|
475
|
+
invite them to keep going on their own:
|
|
476
|
+
|
|
477
|
+
> And this site is yours to keep playing with: add more pages, refine the style
|
|
478
|
+
> guide, wire a new command, then watch the map react. Creating and maintaining a
|
|
479
|
+
> small site like this, by hand, is the best practice there is for getting a feel
|
|
480
|
+
> for how to build a harness.
|
|
481
|
+
|
|
482
|
+
Mark `golive`: done. Last chapter of the part: apply §Closing a part (name the
|
|
483
|
+
part by its title); since this closes the campaign spine, if every active part is
|
|
484
|
+
now done route to the §Final wrap-up instead of the menu.
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// cli/entry.ts
|
|
2
2
|
|
|
3
|
-
!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]="
|
|
3
|
+
!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]="971924c5-3da8-5670-8c42-6f13b41acfa0")}catch(e){}}();
|
|
4
4
|
import { existsSync as existsSync33 } from "fs";
|
|
5
5
|
import { Builtins, Cli as Cli2 } from "clipanion";
|
|
6
6
|
|
|
@@ -250,7 +250,7 @@ function bucketByKind(kind, instance, bag) {
|
|
|
250
250
|
// package.json
|
|
251
251
|
var package_default = {
|
|
252
252
|
name: "@skill-map/cli",
|
|
253
|
-
version: "0.61.
|
|
253
|
+
version: "0.61.5",
|
|
254
254
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
255
255
|
license: "MIT",
|
|
256
256
|
type: "module",
|
|
@@ -30561,8 +30561,14 @@ var TUTORIAL_TEXTS = {
|
|
|
30561
30561
|
// default).
|
|
30562
30562
|
promptHeader: "{{glyph}} Which agent should host the tutorial skill?",
|
|
30563
30563
|
promptOption: " {{index}}) {{label}}: {{skillDir}}{{marker}}",
|
|
30564
|
+
// Coming-soon Providers are listed for visibility but cannot be picked
|
|
30565
|
+
// (no skillDir, a `(coming soon)` tag instead of a target path).
|
|
30566
|
+
promptOptionComingSoon: " {{index}}) {{label}} (coming soon)",
|
|
30564
30567
|
promptDefaultMarker: " (default)",
|
|
30565
30568
|
promptInput: " Enter the number or provider id [default {{index}}]: ",
|
|
30569
|
+
// Shown (and the prompt re-asked) when the tester picks a coming-soon
|
|
30570
|
+
// entry: it is visible but not selectable yet.
|
|
30571
|
+
promptComingSoonNotice: " {{label}} is coming soon, not selectable yet. Pick {{defaultLabel}}.",
|
|
30566
30572
|
// Prompt answer matched neither an index nor an id. Goes to stderr,
|
|
30567
30573
|
// exit code 2. Mirrors the error shape: glyph + headline + dim hint.
|
|
30568
30574
|
promptInvalid: "{{glyph}} sm tutorial: that is not one of the listed providers\n {{hint}}\n",
|
|
@@ -30629,7 +30635,7 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30629
30635
|
// the skill is materialised under, skipping the interactive prompt.
|
|
30630
30636
|
forProvider = Option36.String("--for", {
|
|
30631
30637
|
required: false,
|
|
30632
|
-
description: "Destination provider id (e.g. claude
|
|
30638
|
+
description: "Destination provider id (e.g. claude). Skips the prompt."
|
|
30633
30639
|
});
|
|
30634
30640
|
force = Option36.Boolean("--force", false, {
|
|
30635
30641
|
description: "Overwrite an existing target directory without prompting."
|
|
@@ -30662,6 +30668,10 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30662
30668
|
const targets = listScaffoldTargets();
|
|
30663
30669
|
const target = await this.resolveScaffoldTarget(targets, stderrAnsi, errGlyph);
|
|
30664
30670
|
if (target === null) return ExitCode.Error;
|
|
30671
|
+
if (target.skillDir === void 0) {
|
|
30672
|
+
this.printer.error(tx(TUTORIAL_TEXTS.noTargets, { glyph: errGlyph }));
|
|
30673
|
+
return ExitCode.Error;
|
|
30674
|
+
}
|
|
30665
30675
|
const targetDir = join21(ctx.cwd, target.skillDir, SKILL_SLUG);
|
|
30666
30676
|
const targetDisplay = `${target.skillDir}/${SKILL_SLUG}/`;
|
|
30667
30677
|
let sourceDir;
|
|
@@ -30725,20 +30735,21 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30725
30735
|
* Returns `null` after printing an error (caller exits non-zero).
|
|
30726
30736
|
*/
|
|
30727
30737
|
async resolveScaffoldTarget(targets, stderrAnsi, errGlyph) {
|
|
30728
|
-
|
|
30738
|
+
const selectable = selectableTargets(targets);
|
|
30739
|
+
if (selectable.length === 0) {
|
|
30729
30740
|
this.printer.error(tx(TUTORIAL_TEXTS.noTargets, { glyph: errGlyph }));
|
|
30730
30741
|
return null;
|
|
30731
30742
|
}
|
|
30732
30743
|
const requested = this.forProvider;
|
|
30733
30744
|
if (requested !== void 0) {
|
|
30734
|
-
const found =
|
|
30745
|
+
const found = selectable.find((t) => t.id === requested);
|
|
30735
30746
|
if (found === void 0) {
|
|
30736
30747
|
this.printer.error(
|
|
30737
30748
|
tx(TUTORIAL_TEXTS.forUnknown, {
|
|
30738
30749
|
glyph: errGlyph,
|
|
30739
30750
|
provider: requested,
|
|
30740
30751
|
hint: stderrAnsi.dim(
|
|
30741
|
-
tx(TUTORIAL_TEXTS.forUnknownHint, { ids:
|
|
30752
|
+
tx(TUTORIAL_TEXTS.forUnknownHint, { ids: selectable.map((t) => t.id).join(", ") })
|
|
30742
30753
|
)
|
|
30743
30754
|
})
|
|
30744
30755
|
);
|
|
@@ -30746,14 +30757,13 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30746
30757
|
}
|
|
30747
30758
|
return found;
|
|
30748
30759
|
}
|
|
30749
|
-
const
|
|
30750
|
-
const def = targets[defaultIndex];
|
|
30760
|
+
const def = selectable[0];
|
|
30751
30761
|
const stdin = this.context.stdin;
|
|
30752
|
-
if (
|
|
30762
|
+
if (stdin.isTTY !== true) return def;
|
|
30753
30763
|
const stderr = this.context.stderr;
|
|
30754
30764
|
const picked = await promptForTarget(
|
|
30755
30765
|
targets,
|
|
30756
|
-
|
|
30766
|
+
def,
|
|
30757
30767
|
stdin,
|
|
30758
30768
|
stderr,
|
|
30759
30769
|
stderrAnsi.yellow("?")
|
|
@@ -30763,7 +30773,7 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30763
30773
|
tx(TUTORIAL_TEXTS.promptInvalid, {
|
|
30764
30774
|
glyph: errGlyph,
|
|
30765
30775
|
hint: stderrAnsi.dim(
|
|
30766
|
-
tx(TUTORIAL_TEXTS.forUnknownHint, { ids:
|
|
30776
|
+
tx(TUTORIAL_TEXTS.forUnknownHint, { ids: selectable.map((t) => t.id).join(", ") })
|
|
30767
30777
|
)
|
|
30768
30778
|
})
|
|
30769
30779
|
);
|
|
@@ -30773,13 +30783,23 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30773
30783
|
}
|
|
30774
30784
|
};
|
|
30775
30785
|
function toScaffoldTarget(provider) {
|
|
30786
|
+
const comingSoon = provider.presentation.comingSoon === true;
|
|
30787
|
+
if (comingSoon) {
|
|
30788
|
+
return {
|
|
30789
|
+
id: provider.id,
|
|
30790
|
+
label: provider.presentation.label,
|
|
30791
|
+
aka: provider.scaffold?.aka ?? [],
|
|
30792
|
+
comingSoon: true
|
|
30793
|
+
};
|
|
30794
|
+
}
|
|
30776
30795
|
const scaffold = provider.scaffold;
|
|
30777
30796
|
if (!scaffold || !scaffold.skillDir) return null;
|
|
30778
30797
|
return {
|
|
30779
30798
|
id: provider.id,
|
|
30780
30799
|
label: provider.presentation.label,
|
|
30781
30800
|
skillDir: scaffold.skillDir,
|
|
30782
|
-
aka: scaffold.aka ?? []
|
|
30801
|
+
aka: scaffold.aka ?? [],
|
|
30802
|
+
comingSoon: false
|
|
30783
30803
|
};
|
|
30784
30804
|
}
|
|
30785
30805
|
function listScaffoldTargets() {
|
|
@@ -30790,36 +30810,53 @@ function listScaffoldTargets() {
|
|
|
30790
30810
|
}
|
|
30791
30811
|
return out;
|
|
30792
30812
|
}
|
|
30813
|
+
function selectableTargets(targets) {
|
|
30814
|
+
return targets.filter((t) => !t.comingSoon);
|
|
30815
|
+
}
|
|
30793
30816
|
function labelWithAka(target) {
|
|
30794
30817
|
return target.aka.length > 0 ? `${target.label} (${target.aka.join(", ")})` : target.label;
|
|
30795
30818
|
}
|
|
30796
|
-
|
|
30819
|
+
function renderTargetLines(targets, def, glyph) {
|
|
30797
30820
|
const lines = [tx(TUTORIAL_TEXTS.promptHeader, { glyph })];
|
|
30798
30821
|
for (let i = 0; i < targets.length; i += 1) {
|
|
30799
30822
|
const t = targets[i];
|
|
30800
30823
|
lines.push(
|
|
30801
|
-
tx(TUTORIAL_TEXTS.promptOption, {
|
|
30824
|
+
t.comingSoon ? tx(TUTORIAL_TEXTS.promptOptionComingSoon, { index: i + 1, label: t.label }) : tx(TUTORIAL_TEXTS.promptOption, {
|
|
30802
30825
|
index: i + 1,
|
|
30803
30826
|
label: labelWithAka(t),
|
|
30804
30827
|
skillDir: `${t.skillDir}/`,
|
|
30805
|
-
marker:
|
|
30828
|
+
marker: t.id === def.id ? TUTORIAL_TEXTS.promptDefaultMarker : ""
|
|
30806
30829
|
})
|
|
30807
30830
|
);
|
|
30808
30831
|
}
|
|
30809
|
-
|
|
30832
|
+
return lines.join("\n");
|
|
30833
|
+
}
|
|
30834
|
+
function classifyAnswer(trimmed, targets, def) {
|
|
30835
|
+
if (trimmed === "") return def;
|
|
30836
|
+
const asNumber = Number.parseInt(trimmed, 10);
|
|
30837
|
+
const byIndex = !Number.isNaN(asNumber) && asNumber >= 1 && asNumber <= targets.length ? targets[asNumber - 1] : void 0;
|
|
30838
|
+
return byIndex ?? targets.find((t) => t.id.toLowerCase() === trimmed.toLowerCase()) ?? null;
|
|
30839
|
+
}
|
|
30840
|
+
async function promptForTarget(targets, def, stdin, stderr, glyph) {
|
|
30841
|
+
stderr.write(renderTargetLines(targets, def, glyph) + "\n");
|
|
30842
|
+
const defIndex = targets.findIndex((t) => t.id === def.id);
|
|
30810
30843
|
const rl = createInterface5({ input: stdin, output: stderr });
|
|
30811
30844
|
try {
|
|
30812
|
-
|
|
30813
|
-
|
|
30814
|
-
|
|
30815
|
-
|
|
30816
|
-
|
|
30817
|
-
|
|
30818
|
-
|
|
30819
|
-
|
|
30845
|
+
for (let attempt = 0; attempt < 5; attempt += 1) {
|
|
30846
|
+
const answer = await new Promise(
|
|
30847
|
+
(resolveP) => rl.question(tx(TUTORIAL_TEXTS.promptInput, { index: defIndex + 1 }), resolveP)
|
|
30848
|
+
);
|
|
30849
|
+
const result = classifyAnswer(answer.trim(), targets, def);
|
|
30850
|
+
if (result === null) continue;
|
|
30851
|
+
if (!result.comingSoon) return result;
|
|
30852
|
+
stderr.write(
|
|
30853
|
+
tx(TUTORIAL_TEXTS.promptComingSoonNotice, {
|
|
30854
|
+
label: result.label,
|
|
30855
|
+
defaultLabel: def.label
|
|
30856
|
+
}) + "\n"
|
|
30857
|
+
);
|
|
30820
30858
|
}
|
|
30821
|
-
|
|
30822
|
-
return byId ?? null;
|
|
30859
|
+
return null;
|
|
30823
30860
|
} finally {
|
|
30824
30861
|
rl.close();
|
|
30825
30862
|
}
|
|
@@ -31073,4 +31110,4 @@ function resolveBareDefault() {
|
|
|
31073
31110
|
process.exit(ExitCode.Error);
|
|
31074
31111
|
}
|
|
31075
31112
|
//# sourceMappingURL=cli.js.map
|
|
31076
|
-
//# debugId=
|
|
31113
|
+
//# debugId=971924c5-3da8-5670-8c42-6f13b41acfa0
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// kernel/i18n/registry.texts.ts
|
|
2
2
|
|
|
3
|
-
!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]="
|
|
3
|
+
!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]="b1dadbaf-2a39-57c7-80df-bbba973403c5")}catch(e){}}();
|
|
4
4
|
var REGISTRY_TEXTS = {
|
|
5
5
|
duplicateExtension: "Extension already registered: {{kind}}:{{qualifiedId}}",
|
|
6
6
|
unknownKind: "Unknown extension kind: {{kind}}",
|
|
@@ -102,7 +102,7 @@ import { Tiktoken as Tiktoken2 } from "js-tiktoken/lite";
|
|
|
102
102
|
// package.json
|
|
103
103
|
var package_default = {
|
|
104
104
|
name: "@skill-map/cli",
|
|
105
|
-
version: "0.61.
|
|
105
|
+
version: "0.61.5",
|
|
106
106
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
107
107
|
license: "MIT",
|
|
108
108
|
type: "module",
|
|
@@ -3851,4 +3851,4 @@ export {
|
|
|
3851
3851
|
runScanWithRenames
|
|
3852
3852
|
};
|
|
3853
3853
|
//# sourceMappingURL=index.js.map
|
|
3854
|
-
//# debugId=
|
|
3854
|
+
//# debugId=b1dadbaf-2a39-57c7-80df-bbba973403c5
|
package/dist/kernel/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// kernel/i18n/registry.texts.ts
|
|
2
2
|
|
|
3
|
-
!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]="
|
|
3
|
+
!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]="5077263a-bf07-58af-b37d-ea6ab8f9a27c")}catch(e){}}();
|
|
4
4
|
var REGISTRY_TEXTS = {
|
|
5
5
|
duplicateExtension: "Extension already registered: {{kind}}:{{qualifiedId}}",
|
|
6
6
|
unknownKind: "Unknown extension kind: {{kind}}",
|
|
@@ -102,7 +102,7 @@ import { Tiktoken as Tiktoken2 } from "js-tiktoken/lite";
|
|
|
102
102
|
// package.json
|
|
103
103
|
var package_default = {
|
|
104
104
|
name: "@skill-map/cli",
|
|
105
|
-
version: "0.61.
|
|
105
|
+
version: "0.61.5",
|
|
106
106
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
107
107
|
license: "MIT",
|
|
108
108
|
type: "module",
|
|
@@ -3851,4 +3851,4 @@ export {
|
|
|
3851
3851
|
runScanWithRenames
|
|
3852
3852
|
};
|
|
3853
3853
|
//# sourceMappingURL=index.js.map
|
|
3854
|
-
//# debugId=
|
|
3854
|
+
//# debugId=5077263a-bf07-58af-b37d-ea6ab8f9a27c
|