@skill-map/cli 0.61.2 → 0.61.4
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 +5 -6
- package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +11 -15
- package/dist/cli.js +86 -33
- package/dist/index.js +10 -6
- package/dist/kernel/index.d.ts +11 -0
- package/dist/kernel/index.js +10 -6
- package/dist/ui/chunk-4VAXWCM2.js +3 -0
- package/dist/ui/chunk-I52OQIZQ.js +1 -0
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-H6ARR2AP.js → main-36BUYCEI.js} +2 -2
- package/package.json +2 -2
- package/dist/ui/chunk-FVCFBXFY.js +0 -3
- package/dist/ui/chunk-OGXBHDY4.js +0 -1
|
@@ -304,12 +304,11 @@ the `__PROVIDER__` token and skip kinds the provider does not claim.
|
|
|
304
304
|
2. Seed: `fixtures.js seed <harness-built|harness-connected> --provider <provider> --lang <lang>`
|
|
305
305
|
(`harness-built` for `connect-harness`, `harness-connected` for
|
|
306
306
|
`daily-loop`).
|
|
307
|
-
3. Provision
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
`.skill-map/` already exists, just `sm scan`.)
|
|
307
|
+
3. Provision the lens: the seeded portfolio has a root `AGENTS.md`
|
|
308
|
+
(the `openai`/Codex marker) next to `.claude/`, but `openai` is
|
|
309
|
+
coming soon, so auto-detect ignores it and a plain `sm init`
|
|
310
|
+
resolves the `claude` lens with no prompt. Run `sm init`, then
|
|
311
|
+
`sm scan`. (If `.skill-map/` already exists, just `sm scan`.)
|
|
313
312
|
4. Mark the skipped predecessors: `state.js set-part <predecessor> skipped`
|
|
314
313
|
for each (they stay in the menu). Then emit exactly ONE
|
|
315
314
|
tester-facing line:
|
|
@@ -28,18 +28,14 @@ disk. The orchestrator's `portfolio-init` already cleared it during
|
|
|
28
28
|
pre-flight, so the tester sees only the portfolio. If anything demo
|
|
29
29
|
lingers, mention it once and move on.
|
|
30
30
|
|
|
31
|
-
**Context (agent, do not narrate the plumbing): the lens
|
|
32
|
-
|
|
33
|
-
`claude`
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
the other options the prompt lists (`openai`/Codex and friends) are
|
|
40
|
-
coming soon in the tutorial and we do not walk them. The prompt is
|
|
41
|
-
expected, blessed behaviour; the tester just needs to know which
|
|
42
|
-
option to pick, so the message below previews it.
|
|
31
|
+
**Context (agent, do not narrate the plumbing): the lens.** This
|
|
32
|
+
project has a root `AGENTS.md` (the `openai`/Codex marker) sitting next
|
|
33
|
+
to the `.claude/` folder (the `claude` marker, where the tutorial skill
|
|
34
|
+
itself lives). `openai` is **coming soon**, though, so auto-detect
|
|
35
|
+
ignores its marker and `sm init` resolves the lens to `claude`
|
|
36
|
+
silently, exactly like the prologue: only `claude` is selectable today,
|
|
37
|
+
so there is no ambiguity and no prompt. Do not promise the tester a
|
|
38
|
+
lens prompt here.
|
|
43
39
|
|
|
44
40
|
```bash
|
|
45
41
|
sm init
|
|
@@ -53,9 +49,9 @@ Tell the tester:
|
|
|
53
49
|
> `.claude/` folder is the **harness** (the helpers that maintain the
|
|
54
50
|
> site). skill-map maps that harness.
|
|
55
51
|
>
|
|
56
|
-
> Run `sm init
|
|
57
|
-
>
|
|
58
|
-
>
|
|
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
|
|
54
|
+
> live UI.
|
|
59
55
|
>
|
|
60
56
|
> Open the URL `sm` printed. You'll see **one node**: `AGENTS.md`,
|
|
61
57
|
> the project's handbook (the operating manual for the site).
|
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]="d6e5d903-0942-5718-94b3-53a96de15b21")}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.4",
|
|
254
254
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
255
255
|
license: "MIT",
|
|
256
256
|
type: "module",
|
|
@@ -1071,7 +1071,10 @@ var antigravityProvider = {
|
|
|
1071
1071
|
presentation: {
|
|
1072
1072
|
label: "Antigravity",
|
|
1073
1073
|
color: "#7c3aed",
|
|
1074
|
-
colorDark: "#a78bfa"
|
|
1074
|
+
colorDark: "#a78bfa",
|
|
1075
|
+
// Registered but not yet selectable as the active lens; the UI greys
|
|
1076
|
+
// it with a `(coming soon)` suffix.
|
|
1077
|
+
comingSoon: true
|
|
1075
1078
|
},
|
|
1076
1079
|
// No `detect` block: Antigravity has no vendor-specific workspace marker
|
|
1077
1080
|
// (it adopted the open-standard `.agents/`, owned by `agent-skills`), so
|
|
@@ -1233,7 +1236,10 @@ var openaiProvider = {
|
|
|
1233
1236
|
presentation: {
|
|
1234
1237
|
label: "OpenAI Codex",
|
|
1235
1238
|
color: "#22c55e",
|
|
1236
|
-
colorDark: "#4ade80"
|
|
1239
|
+
colorDark: "#4ade80",
|
|
1240
|
+
// Registered but not yet selectable as the active lens; auto-detect
|
|
1241
|
+
// skips its markers and the UI greys it with a `(coming soon)` suffix.
|
|
1242
|
+
comingSoon: true
|
|
1237
1243
|
},
|
|
1238
1244
|
// Auto-detect markers: a `.codex/` directory or a root `AGENTS.md` marks
|
|
1239
1245
|
// a Codex CLI project. Provider-owned (replaces the old central
|
|
@@ -1322,7 +1328,11 @@ var agentSkillsProvider = {
|
|
|
1322
1328
|
presentation: {
|
|
1323
1329
|
label: "Open Skills",
|
|
1324
1330
|
color: "#64748b",
|
|
1325
|
-
colorDark: "#94a3b8"
|
|
1331
|
+
colorDark: "#94a3b8",
|
|
1332
|
+
// Registered but not yet selectable as the active lens; auto-detect
|
|
1333
|
+
// skips its `.agents/` marker and the UI greys it with a
|
|
1334
|
+
// `(coming soon)` suffix.
|
|
1335
|
+
comingSoon: true
|
|
1326
1336
|
},
|
|
1327
1337
|
// Auto-detect marker: a `.agents/` directory marks an open-standard
|
|
1328
1338
|
// project. This is also the marker a Google/Antigravity project carries
|
|
@@ -11559,14 +11569,18 @@ function detectProvidersFromFilesystem(cwd, providers) {
|
|
|
11559
11569
|
const out = [];
|
|
11560
11570
|
for (const provider of providers) {
|
|
11561
11571
|
if (seen.has(provider.id)) continue;
|
|
11562
|
-
|
|
11563
|
-
if (!markers || markers.length === 0) continue;
|
|
11564
|
-
if (!markers.some((marker) => existsSync15(join10(cwd, marker)))) continue;
|
|
11572
|
+
if (!isDetectableUnderCwd(cwd, provider)) continue;
|
|
11565
11573
|
seen.add(provider.id);
|
|
11566
11574
|
out.push(provider.id);
|
|
11567
11575
|
}
|
|
11568
11576
|
return out;
|
|
11569
11577
|
}
|
|
11578
|
+
function isDetectableUnderCwd(cwd, provider) {
|
|
11579
|
+
if (provider.presentation?.comingSoon === true) return false;
|
|
11580
|
+
const markers = provider.detect?.markers;
|
|
11581
|
+
if (!markers || markers.length === 0) return false;
|
|
11582
|
+
return markers.some((marker) => existsSync15(join10(cwd, marker)));
|
|
11583
|
+
}
|
|
11570
11584
|
|
|
11571
11585
|
// core/config/active-provider.ts
|
|
11572
11586
|
function resolveActiveProvider(cwd, providers = []) {
|
|
@@ -27232,6 +27246,7 @@ async function resolveSelectableProviders(deps) {
|
|
|
27232
27246
|
});
|
|
27233
27247
|
const selectable = /* @__PURE__ */ new Set();
|
|
27234
27248
|
for (const provider of deps.providers) {
|
|
27249
|
+
if (provider.presentation?.comingSoon === true) continue;
|
|
27235
27250
|
if (isPluginExtensionEnabled(provider, resolveEnabled)) {
|
|
27236
27251
|
selectable.add(provider.id);
|
|
27237
27252
|
}
|
|
@@ -28442,6 +28457,7 @@ function buildProviderRegistry(providers) {
|
|
|
28442
28457
|
if (ui.emoji !== void 0) entry.emoji = ui.emoji;
|
|
28443
28458
|
if (ui.icon !== void 0) entry.icon = ui.icon;
|
|
28444
28459
|
if (ui.hideChip !== void 0) entry.hideChip = ui.hideChip;
|
|
28460
|
+
if (ui.comingSoon !== void 0) entry.comingSoon = ui.comingSoon;
|
|
28445
28461
|
registry[provider.id] = entry;
|
|
28446
28462
|
}
|
|
28447
28463
|
return registry;
|
|
@@ -30545,8 +30561,14 @@ var TUTORIAL_TEXTS = {
|
|
|
30545
30561
|
// default).
|
|
30546
30562
|
promptHeader: "{{glyph}} Which agent should host the tutorial skill?",
|
|
30547
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)",
|
|
30548
30567
|
promptDefaultMarker: " (default)",
|
|
30549
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}}.",
|
|
30550
30572
|
// Prompt answer matched neither an index nor an id. Goes to stderr,
|
|
30551
30573
|
// exit code 2. Mirrors the error shape: glyph + headline + dim hint.
|
|
30552
30574
|
promptInvalid: "{{glyph}} sm tutorial: that is not one of the listed providers\n {{hint}}\n",
|
|
@@ -30613,7 +30635,7 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30613
30635
|
// the skill is materialised under, skipping the interactive prompt.
|
|
30614
30636
|
forProvider = Option36.String("--for", {
|
|
30615
30637
|
required: false,
|
|
30616
|
-
description: "Destination provider id (e.g. claude
|
|
30638
|
+
description: "Destination provider id (e.g. claude). Skips the prompt."
|
|
30617
30639
|
});
|
|
30618
30640
|
force = Option36.Boolean("--force", false, {
|
|
30619
30641
|
description: "Overwrite an existing target directory without prompting."
|
|
@@ -30646,6 +30668,10 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30646
30668
|
const targets = listScaffoldTargets();
|
|
30647
30669
|
const target = await this.resolveScaffoldTarget(targets, stderrAnsi, errGlyph);
|
|
30648
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
|
+
}
|
|
30649
30675
|
const targetDir = join21(ctx.cwd, target.skillDir, SKILL_SLUG);
|
|
30650
30676
|
const targetDisplay = `${target.skillDir}/${SKILL_SLUG}/`;
|
|
30651
30677
|
let sourceDir;
|
|
@@ -30709,20 +30735,21 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30709
30735
|
* Returns `null` after printing an error (caller exits non-zero).
|
|
30710
30736
|
*/
|
|
30711
30737
|
async resolveScaffoldTarget(targets, stderrAnsi, errGlyph) {
|
|
30712
|
-
|
|
30738
|
+
const selectable = selectableTargets(targets);
|
|
30739
|
+
if (selectable.length === 0) {
|
|
30713
30740
|
this.printer.error(tx(TUTORIAL_TEXTS.noTargets, { glyph: errGlyph }));
|
|
30714
30741
|
return null;
|
|
30715
30742
|
}
|
|
30716
30743
|
const requested = this.forProvider;
|
|
30717
30744
|
if (requested !== void 0) {
|
|
30718
|
-
const found =
|
|
30745
|
+
const found = selectable.find((t) => t.id === requested);
|
|
30719
30746
|
if (found === void 0) {
|
|
30720
30747
|
this.printer.error(
|
|
30721
30748
|
tx(TUTORIAL_TEXTS.forUnknown, {
|
|
30722
30749
|
glyph: errGlyph,
|
|
30723
30750
|
provider: requested,
|
|
30724
30751
|
hint: stderrAnsi.dim(
|
|
30725
|
-
tx(TUTORIAL_TEXTS.forUnknownHint, { ids:
|
|
30752
|
+
tx(TUTORIAL_TEXTS.forUnknownHint, { ids: selectable.map((t) => t.id).join(", ") })
|
|
30726
30753
|
)
|
|
30727
30754
|
})
|
|
30728
30755
|
);
|
|
@@ -30730,14 +30757,13 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30730
30757
|
}
|
|
30731
30758
|
return found;
|
|
30732
30759
|
}
|
|
30733
|
-
const
|
|
30734
|
-
const def = targets[defaultIndex];
|
|
30760
|
+
const def = selectable[0];
|
|
30735
30761
|
const stdin = this.context.stdin;
|
|
30736
|
-
if (
|
|
30762
|
+
if (stdin.isTTY !== true) return def;
|
|
30737
30763
|
const stderr = this.context.stderr;
|
|
30738
30764
|
const picked = await promptForTarget(
|
|
30739
30765
|
targets,
|
|
30740
|
-
|
|
30766
|
+
def,
|
|
30741
30767
|
stdin,
|
|
30742
30768
|
stderr,
|
|
30743
30769
|
stderrAnsi.yellow("?")
|
|
@@ -30747,7 +30773,7 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30747
30773
|
tx(TUTORIAL_TEXTS.promptInvalid, {
|
|
30748
30774
|
glyph: errGlyph,
|
|
30749
30775
|
hint: stderrAnsi.dim(
|
|
30750
|
-
tx(TUTORIAL_TEXTS.forUnknownHint, { ids:
|
|
30776
|
+
tx(TUTORIAL_TEXTS.forUnknownHint, { ids: selectable.map((t) => t.id).join(", ") })
|
|
30751
30777
|
)
|
|
30752
30778
|
})
|
|
30753
30779
|
);
|
|
@@ -30757,13 +30783,23 @@ var TutorialCommand = class extends SmCommand {
|
|
|
30757
30783
|
}
|
|
30758
30784
|
};
|
|
30759
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
|
+
}
|
|
30760
30795
|
const scaffold = provider.scaffold;
|
|
30761
30796
|
if (!scaffold || !scaffold.skillDir) return null;
|
|
30762
30797
|
return {
|
|
30763
30798
|
id: provider.id,
|
|
30764
30799
|
label: provider.presentation.label,
|
|
30765
30800
|
skillDir: scaffold.skillDir,
|
|
30766
|
-
aka: scaffold.aka ?? []
|
|
30801
|
+
aka: scaffold.aka ?? [],
|
|
30802
|
+
comingSoon: false
|
|
30767
30803
|
};
|
|
30768
30804
|
}
|
|
30769
30805
|
function listScaffoldTargets() {
|
|
@@ -30774,36 +30810,53 @@ function listScaffoldTargets() {
|
|
|
30774
30810
|
}
|
|
30775
30811
|
return out;
|
|
30776
30812
|
}
|
|
30813
|
+
function selectableTargets(targets) {
|
|
30814
|
+
return targets.filter((t) => !t.comingSoon);
|
|
30815
|
+
}
|
|
30777
30816
|
function labelWithAka(target) {
|
|
30778
30817
|
return target.aka.length > 0 ? `${target.label} (${target.aka.join(", ")})` : target.label;
|
|
30779
30818
|
}
|
|
30780
|
-
|
|
30819
|
+
function renderTargetLines(targets, def, glyph) {
|
|
30781
30820
|
const lines = [tx(TUTORIAL_TEXTS.promptHeader, { glyph })];
|
|
30782
30821
|
for (let i = 0; i < targets.length; i += 1) {
|
|
30783
30822
|
const t = targets[i];
|
|
30784
30823
|
lines.push(
|
|
30785
|
-
tx(TUTORIAL_TEXTS.promptOption, {
|
|
30824
|
+
t.comingSoon ? tx(TUTORIAL_TEXTS.promptOptionComingSoon, { index: i + 1, label: t.label }) : tx(TUTORIAL_TEXTS.promptOption, {
|
|
30786
30825
|
index: i + 1,
|
|
30787
30826
|
label: labelWithAka(t),
|
|
30788
30827
|
skillDir: `${t.skillDir}/`,
|
|
30789
|
-
marker:
|
|
30828
|
+
marker: t.id === def.id ? TUTORIAL_TEXTS.promptDefaultMarker : ""
|
|
30790
30829
|
})
|
|
30791
30830
|
);
|
|
30792
30831
|
}
|
|
30793
|
-
|
|
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);
|
|
30794
30843
|
const rl = createInterface5({ input: stdin, output: stderr });
|
|
30795
30844
|
try {
|
|
30796
|
-
|
|
30797
|
-
|
|
30798
|
-
|
|
30799
|
-
|
|
30800
|
-
|
|
30801
|
-
|
|
30802
|
-
|
|
30803
|
-
|
|
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
|
+
);
|
|
30804
30858
|
}
|
|
30805
|
-
|
|
30806
|
-
return byId ?? null;
|
|
30859
|
+
return null;
|
|
30807
30860
|
} finally {
|
|
30808
30861
|
rl.close();
|
|
30809
30862
|
}
|
|
@@ -31057,4 +31110,4 @@ function resolveBareDefault() {
|
|
|
31057
31110
|
process.exit(ExitCode.Error);
|
|
31058
31111
|
}
|
|
31059
31112
|
//# sourceMappingURL=cli.js.map
|
|
31060
|
-
//# debugId=
|
|
31113
|
+
//# debugId=d6e5d903-0942-5718-94b3-53a96de15b21
|
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]="ff44c503-9fc8-5d12-a12c-7d02344be603")}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.4",
|
|
106
106
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
107
107
|
license: "MIT",
|
|
108
108
|
type: "module",
|
|
@@ -792,14 +792,18 @@ function detectProvidersFromFilesystem(cwd, providers) {
|
|
|
792
792
|
const out = [];
|
|
793
793
|
for (const provider of providers) {
|
|
794
794
|
if (seen.has(provider.id)) continue;
|
|
795
|
-
|
|
796
|
-
if (!markers || markers.length === 0) continue;
|
|
797
|
-
if (!markers.some((marker) => existsSync3(join3(cwd, marker)))) continue;
|
|
795
|
+
if (!isDetectableUnderCwd(cwd, provider)) continue;
|
|
798
796
|
seen.add(provider.id);
|
|
799
797
|
out.push(provider.id);
|
|
800
798
|
}
|
|
801
799
|
return out;
|
|
802
800
|
}
|
|
801
|
+
function isDetectableUnderCwd(cwd, provider) {
|
|
802
|
+
if (provider.presentation?.comingSoon === true) return false;
|
|
803
|
+
const markers = provider.detect?.markers;
|
|
804
|
+
if (!markers || markers.length === 0) return false;
|
|
805
|
+
return markers.some((marker) => existsSync3(join3(cwd, marker)));
|
|
806
|
+
}
|
|
803
807
|
|
|
804
808
|
// kernel/types.ts
|
|
805
809
|
var ConfidenceTier = Object.freeze({
|
|
@@ -3847,4 +3851,4 @@ export {
|
|
|
3847
3851
|
runScanWithRenames
|
|
3848
3852
|
};
|
|
3849
3853
|
//# sourceMappingURL=index.js.map
|
|
3850
|
-
//# debugId=
|
|
3854
|
+
//# debugId=ff44c503-9fc8-5d12-a12c-7d02344be603
|
package/dist/kernel/index.d.ts
CHANGED
|
@@ -2471,6 +2471,17 @@ interface IProviderUi {
|
|
|
2471
2471
|
* topbar lens chip; only the per-card badge is suppressed.
|
|
2472
2472
|
*/
|
|
2473
2473
|
hideChip?: boolean;
|
|
2474
|
+
/**
|
|
2475
|
+
* When `true`, this Provider is registered but NOT yet selectable as
|
|
2476
|
+
* the active lens. Auto-detect skips it (`detectProvidersFromFilesystem`),
|
|
2477
|
+
* the BFF drops it from the `selectable` set, and the UI greys it with
|
|
2478
|
+
* a `(coming soon)` suffix. It still ships in `providerRegistry` so
|
|
2479
|
+
* node chips render. Mirrors
|
|
2480
|
+
* `spec/schemas/extensions/provider.schema.json#/properties/presentation/properties/comingSoon`.
|
|
2481
|
+
* Distinct from `hideChip` and from the operator toggle
|
|
2482
|
+
* `plugins[<id>].enabled = false`. Defaults to `false` (selectable).
|
|
2483
|
+
*/
|
|
2484
|
+
comingSoon?: boolean;
|
|
2474
2485
|
}
|
|
2475
2486
|
/**
|
|
2476
2487
|
* Auto-detection markers for the active-provider lens. The lens resolver
|
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]="6c0e0b1c-ef76-52e7-a1d9-09240ef98ada")}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.4",
|
|
106
106
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
107
107
|
license: "MIT",
|
|
108
108
|
type: "module",
|
|
@@ -792,14 +792,18 @@ function detectProvidersFromFilesystem(cwd, providers) {
|
|
|
792
792
|
const out = [];
|
|
793
793
|
for (const provider of providers) {
|
|
794
794
|
if (seen.has(provider.id)) continue;
|
|
795
|
-
|
|
796
|
-
if (!markers || markers.length === 0) continue;
|
|
797
|
-
if (!markers.some((marker) => existsSync3(join3(cwd, marker)))) continue;
|
|
795
|
+
if (!isDetectableUnderCwd(cwd, provider)) continue;
|
|
798
796
|
seen.add(provider.id);
|
|
799
797
|
out.push(provider.id);
|
|
800
798
|
}
|
|
801
799
|
return out;
|
|
802
800
|
}
|
|
801
|
+
function isDetectableUnderCwd(cwd, provider) {
|
|
802
|
+
if (provider.presentation?.comingSoon === true) return false;
|
|
803
|
+
const markers = provider.detect?.markers;
|
|
804
|
+
if (!markers || markers.length === 0) return false;
|
|
805
|
+
return markers.some((marker) => existsSync3(join3(cwd, marker)));
|
|
806
|
+
}
|
|
803
807
|
|
|
804
808
|
// kernel/types.ts
|
|
805
809
|
var ConfidenceTier = Object.freeze({
|
|
@@ -3847,4 +3851,4 @@ export {
|
|
|
3847
3851
|
runScanWithRenames
|
|
3848
3852
|
};
|
|
3849
3853
|
//# sourceMappingURL=index.js.map
|
|
3850
|
-
//# debugId=
|
|
3854
|
+
//# debugId=6c0e0b1c-ef76-52e7-a1d9-09240ef98ada
|