@skill-map/cli 0.67.0 → 0.68.1
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 +30 -23
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/providers/agent-skills/en/agents-hub.md +2 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/providers/agent-skills/es/agents-hub.md +2 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/content-editor-style/providers/agent-skills/en/content-editor-style.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/content-editor-style/providers/agent-skills/es/content-editor-style.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/en/todo-bullet-guideline.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/en/todo-bullet-guideline2.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/en/todo-bullet-skill.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/es/todo-bullet-guideline.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/es/todo-bullet-guideline2.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/providers/agent-skills/es/todo-bullet-skill.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/manifest.json +9 -4
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/agent-skills/en/__PROVIDER__/skills/publish/SKILL.md +15 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/agent-skills/es/__PROVIDER__/skills/publish/SKILL.md +16 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/codex/en/__PROVIDER__/skills/publish/SKILL.md +15 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/providers/codex/es/__PROVIDER__/skills/publish/SKILL.md +16 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/agent-skills/en/__PROVIDER__/skills/master-agent/SKILL.md +13 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/agent-skills/es/__PROVIDER__/skills/master-agent/SKILL.md +14 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/codex/en/.codex/agents/master-agent.toml +10 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/providers/codex/es/.codex/agents/master-agent.toml +10 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/en/AGENTS.md +7 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/en/__PROVIDER__/skills/content-editor/SKILL.md +20 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/es/AGENTS.md +7 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/es/__PROVIDER__/skills/content-editor/SKILL.md +20 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/shared/CLAUDE.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/codex/en/.codex/agents/content-editor.toml +19 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/codex/es/.codex/agents/content-editor.toml +19 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/en/.codex/agents/demo-agent.toml +13 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/en/__PROVIDER__/skills/demo-command/SKILL.md +11 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/es/.codex/agents/demo-agent.toml +13 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/providers/codex/es/__PROVIDER__/skills/demo-command/SKILL.md +12 -0
- package/dist/cli/tutorial/sm-tutorial/references/_core.md +102 -49
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +168 -20
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +85 -19
- package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +6 -7
- package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +2 -2
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-daily.md +241 -0
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-fundamentals.md +351 -0
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-kickoff.md +285 -0
- package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +62 -99
- package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +35 -34
- package/dist/cli/tutorial/sm-tutorial/references/part-mcp.md +3 -6
- package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +198 -26
- package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +19 -15
- package/dist/cli/tutorial/sm-tutorial/scripts/fixtures.js +85 -22
- package/dist/cli/tutorial/sm-tutorial/scripts/lib/paths.js +74 -4
- package/dist/cli/tutorial/sm-tutorial/scripts/state.js +22 -6
- package/dist/cli.js +409 -168
- package/dist/conformance/index.js +42 -2
- package/dist/index.js +43 -30
- package/dist/kernel/index.d.ts +28 -5
- package/dist/kernel/index.js +43 -30
- package/dist/ui/chunk-22EQLC23.js +1845 -0
- package/dist/ui/chunk-3ANNEMV4.js +499 -0
- package/dist/ui/{chunk-5BJGO7GH.js → chunk-3U4QZKU2.js} +4 -4
- package/dist/ui/chunk-3ZAHOYQ7.js +1 -0
- package/dist/ui/{chunk-56CBK7LB.js → chunk-6FGV5O5J.js} +1 -1
- package/dist/ui/chunk-7WMT2LX4.js +1 -0
- package/dist/ui/{chunk-276RLZR4.js → chunk-BSIR3ADF.js} +14 -14
- package/dist/ui/{chunk-FC22ZJQZ.js → chunk-CG25RHMO.js} +1 -1
- package/dist/ui/chunk-EFSC6SOL.js +3 -0
- package/dist/ui/chunk-EJVWTBMV.js +4 -0
- package/dist/ui/chunk-EZI3BXQN.js +1 -0
- package/dist/ui/{chunk-JZ2YF7EL.js → chunk-GUPPOK7U.js} +8 -8
- package/dist/ui/{chunk-CJURGJTN.js → chunk-HLALESGR.js} +1 -1
- package/dist/ui/chunk-I3I4KHR5.js +2 -0
- package/dist/ui/{chunk-BOVJVOLH.js → chunk-I6ED2OW7.js} +1 -1
- package/dist/ui/chunk-JKPG5PO7.js +375 -0
- package/dist/ui/chunk-K3ZRQNN5.js +2 -0
- package/dist/ui/chunk-KHDWXSGR.js +1 -0
- package/dist/ui/{chunk-HEK4PH5A.js → chunk-KMHXNOFZ.js} +1 -1
- package/dist/ui/chunk-KWT7E2RJ.js +16 -0
- package/dist/ui/{chunk-WHZVGOS3.js → chunk-MQSU6EFZ.js} +1 -1
- package/dist/ui/{chunk-43S72FTV.js → chunk-OGEE252A.js} +1 -1
- package/dist/ui/{chunk-J4J42HJ4.js → chunk-PU5OP5RN.js} +1 -1
- package/dist/ui/{chunk-UTRZTB6V.js → chunk-QVG7J2MP.js} +1 -1
- package/dist/ui/chunk-TLMV4LOQ.js +3 -0
- package/dist/ui/chunk-TQBXK5JN.js +1 -0
- package/dist/ui/chunk-Z7SOKILO.js +2 -0
- package/dist/ui/{chunk-WCABR6TI.js → chunk-ZRJ5ZCFR.js} +1 -1
- package/dist/ui/index.html +2 -2
- package/dist/ui/main-R7BIU4HU.js +4 -0
- package/dist/ui/styles-VEGETYWD.css +1 -0
- package/package.json +17 -18
- package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +0 -173
- package/dist/ui/chunk-34ZZDYNQ.js +0 -1
- package/dist/ui/chunk-444BFYGR.js +0 -3
- package/dist/ui/chunk-44VNNUSQ.js +0 -2
- package/dist/ui/chunk-4SG4352Z.js +0 -7
- package/dist/ui/chunk-5ITZXW3A.js +0 -1
- package/dist/ui/chunk-7ANZW2OI.js +0 -499
- package/dist/ui/chunk-BJ6X6WBO.js +0 -4
- package/dist/ui/chunk-CZSLV6YD.js +0 -1
- package/dist/ui/chunk-DLYJHLJX.js +0 -2
- package/dist/ui/chunk-LGFABCIA.js +0 -16
- package/dist/ui/chunk-LPDD2DHE.js +0 -369
- package/dist/ui/chunk-P3SNMV4X.js +0 -2
- package/dist/ui/chunk-S4S5ZMXJ.js +0 -3
- package/dist/ui/chunk-VHEFRMK3.js +0 -1
- package/dist/ui/chunk-X6TRIDBI.js +0 -1845
- package/dist/ui/main-V77F2KZX.js +0 -4
- package/dist/ui/styles-I4ULXD3V.css +0 -1
- /package/dist/ui/{chunk-Y2Z26SRI.js → chunk-5RNLC6V4.js} +0 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
// conformance/index.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]="47b9c38a-6cac-52c4-9dce-13fbbd5b35ec")}catch(e){}}();
|
|
4
4
|
import { spawnSync } from "child_process";
|
|
5
5
|
import { cpSync, existsSync, mkdtempSync, readdirSync, readFileSync, rmSync, statSync } from "fs";
|
|
6
6
|
import { tmpdir } from "os";
|
|
7
7
|
import { isAbsolute, join as join2, relative, resolve as resolve2 } from "path";
|
|
8
|
+
import { DatabaseSync } from "node:sqlite";
|
|
8
9
|
|
|
9
10
|
// kernel/util/format-error.ts
|
|
10
11
|
function formatErrorMessage(err) {
|
|
@@ -125,6 +126,11 @@ function runConformanceCase(options) {
|
|
|
125
126
|
if (c.fixture) {
|
|
126
127
|
replaceFixture(scope, fixturesRoot, c.fixture);
|
|
127
128
|
}
|
|
129
|
+
grantFixturePluginTrust(scope, options.binary, {
|
|
130
|
+
...pickSafeEnv(process.env),
|
|
131
|
+
...options.env,
|
|
132
|
+
...setupEnv
|
|
133
|
+
});
|
|
128
134
|
const argv = [c.invoke.verb];
|
|
129
135
|
if (c.invoke.sub) argv.push(c.invoke.sub);
|
|
130
136
|
if (c.invoke.args) argv.push(...c.invoke.args);
|
|
@@ -194,6 +200,40 @@ function replaceFixture(scope, fixturesRoot, fixture) {
|
|
|
194
200
|
const src = join2(fixturesRoot, fixture);
|
|
195
201
|
cpSync(src, scope, { recursive: true });
|
|
196
202
|
}
|
|
203
|
+
function grantFixturePluginTrust(scope, binary, env) {
|
|
204
|
+
const pluginsDir = join2(scope, KERNEL_SKILL_MAP_DIR, "plugins");
|
|
205
|
+
if (!existsSync(pluginsDir)) return;
|
|
206
|
+
const ids = readdirSync(pluginsDir, { withFileTypes: true }).filter((e) => e.isDirectory() && existsSync(join2(pluginsDir, e.name, "plugin.json"))).map((e) => e.name);
|
|
207
|
+
if (ids.length === 0) return;
|
|
208
|
+
const dbPath = join2(scope, KERNEL_SKILL_MAP_DIR, "skill-map.db");
|
|
209
|
+
if (!existsSync(dbPath)) {
|
|
210
|
+
spawnSync(process.execPath, [binary, "init", "--no-scan"], { cwd: scope, env, encoding: "utf8" });
|
|
211
|
+
}
|
|
212
|
+
if (!hasConfigPluginsTable(dbPath)) {
|
|
213
|
+
spawnSync(process.execPath, [binary, "scan"], { cwd: scope, env, encoding: "utf8" });
|
|
214
|
+
}
|
|
215
|
+
const db = new DatabaseSync(dbPath);
|
|
216
|
+
try {
|
|
217
|
+
const stmt = db.prepare(
|
|
218
|
+
"INSERT INTO config_plugins (plugin_id, enabled, updated_at) VALUES (?, 1, 0) ON CONFLICT(plugin_id) DO UPDATE SET enabled = 1"
|
|
219
|
+
);
|
|
220
|
+
for (const id of ids) stmt.run(id);
|
|
221
|
+
} finally {
|
|
222
|
+
db.close();
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function hasConfigPluginsTable(dbPath) {
|
|
226
|
+
if (!existsSync(dbPath)) return false;
|
|
227
|
+
const db = new DatabaseSync(dbPath, { readOnly: true });
|
|
228
|
+
try {
|
|
229
|
+
const row = db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'config_plugins'").get();
|
|
230
|
+
return row !== void 0;
|
|
231
|
+
} catch {
|
|
232
|
+
return false;
|
|
233
|
+
} finally {
|
|
234
|
+
db.close();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
197
237
|
function assertContained(root, rel, label) {
|
|
198
238
|
if (isAbsolute(rel)) {
|
|
199
239
|
throw new Error(
|
|
@@ -413,4 +453,4 @@ export {
|
|
|
413
453
|
runConformanceCase
|
|
414
454
|
};
|
|
415
455
|
//# sourceMappingURL=index.js.map
|
|
416
|
-
//# debugId=
|
|
456
|
+
//# debugId=47b9c38a-6cac-52c4-9dce-13fbbd5b35ec
|
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]="f0a24ed1-f91a-59a8-b2b9-db8168690990")}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.
|
|
105
|
+
version: "0.68.1",
|
|
106
106
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
107
107
|
license: "MIT",
|
|
108
108
|
type: "module",
|
|
@@ -175,39 +175,38 @@ var package_default = {
|
|
|
175
175
|
clean: "rm -rf dist coverage"
|
|
176
176
|
},
|
|
177
177
|
dependencies: {
|
|
178
|
-
"@hono/node-server": "2.0.
|
|
179
|
-
"@sentry/node": "10.
|
|
178
|
+
"@hono/node-server": "2.0.6",
|
|
179
|
+
"@sentry/node": "10.61.0",
|
|
180
180
|
"@skill-map/spec": "workspace:*",
|
|
181
|
-
ajv: "8.
|
|
181
|
+
ajv: "8.20.0",
|
|
182
182
|
"ajv-formats": "3.0.1",
|
|
183
183
|
chokidar: "5.0.0",
|
|
184
184
|
clipanion: "4.0.0-rc.4",
|
|
185
|
-
hono: "4.12.
|
|
185
|
+
hono: "4.12.27",
|
|
186
186
|
ignore: "7.0.5",
|
|
187
187
|
"js-tiktoken": "1.0.21",
|
|
188
|
-
"js-yaml": "
|
|
189
|
-
kysely: "0.
|
|
190
|
-
"posthog-node": "5.
|
|
191
|
-
semver: "7.
|
|
192
|
-
"smol-toml": "1.
|
|
188
|
+
"js-yaml": "5.1.0",
|
|
189
|
+
kysely: "0.29.2",
|
|
190
|
+
"posthog-node": "5.38.5",
|
|
191
|
+
semver: "7.8.5",
|
|
192
|
+
"smol-toml": "1.7.0",
|
|
193
193
|
typanion: "3.14.0",
|
|
194
194
|
ws: "8.21.0"
|
|
195
195
|
},
|
|
196
196
|
devDependencies: {
|
|
197
197
|
"@eslint/js": "10.0.1",
|
|
198
198
|
"@stylistic/eslint-plugin": "5.10.0",
|
|
199
|
-
"@types/
|
|
200
|
-
"@types/node": "24.12.2",
|
|
199
|
+
"@types/node": "26.0.1",
|
|
201
200
|
"@types/semver": "7.7.1",
|
|
202
201
|
"@types/ws": "8.18.1",
|
|
203
202
|
c8: "11.0.0",
|
|
204
|
-
eslint: "10.
|
|
205
|
-
"eslint-plugin-import-x": "4.
|
|
203
|
+
eslint: "10.5.0",
|
|
204
|
+
"eslint-plugin-import-x": "4.17.0",
|
|
206
205
|
"json-schema-to-typescript": "15.0.4",
|
|
207
206
|
tsup: "8.5.1",
|
|
208
|
-
tsx: "4.22.
|
|
209
|
-
typescript: "
|
|
210
|
-
"typescript-eslint": "8.
|
|
207
|
+
tsx: "4.22.4",
|
|
208
|
+
typescript: "6.0.3",
|
|
209
|
+
"typescript-eslint": "8.62.0"
|
|
211
210
|
},
|
|
212
211
|
engines: {
|
|
213
212
|
node: ">=24.0"
|
|
@@ -258,6 +257,20 @@ var PLUGIN_LOADER_TEXTS = {
|
|
|
258
257
|
invalidManifestExtensionShape: "{{relEntry}}: {{errors}}. See {{docUrl}}.",
|
|
259
258
|
importExceededTimeout: "import exceeded {{timeoutMs}}ms; likely a top-level side effect (network call, infinite loop, large blocking work). Move side effects into the runtime methods (`detect` / `evaluate` / `render` / etc.).",
|
|
260
259
|
disabledByConfig: "disabled by config_plugins or settings.json",
|
|
260
|
+
/**
|
|
261
|
+
* Reason stamped on a project-local disk plugin discovered but not
|
|
262
|
+
* imported because the operator never granted local trust. Distinct
|
|
263
|
+
* from `disabledByConfig` (an explicit toggle-off): this id has no
|
|
264
|
+
* `config_plugins` override at all, so its code stays unexecuted until
|
|
265
|
+
* `sm plugins enable` records local intent.
|
|
266
|
+
*/
|
|
267
|
+
untrustedNotLoaded: "not loaded: project-local plugin is untrusted until enabled. Run `sm plugins enable {{pluginId}}` to load it.",
|
|
268
|
+
/**
|
|
269
|
+
* One-time aggregate notice the runtime emits when project-local
|
|
270
|
+
* plugins were found on disk but left unloaded for lack of trust. The
|
|
271
|
+
* `{{count}}` plugins ride the scan without executing any code.
|
|
272
|
+
*/
|
|
273
|
+
untrustedPluginsFoundNotice: "{{count}} project-local plugin(s) found in .skill-map/plugins/ but not loaded (untrusted). Their code did NOT run. Review with `sm plugins list`, then enable any you trust with `sm plugins enable <id>`.",
|
|
261
274
|
invalidManifestDirMismatch: "directory name '{{dirName}}' does not match manifest id '{{manifestId}}'. Rename the directory to match the id, or update the manifest id to match the directory.",
|
|
262
275
|
idCollision: "Plugin '{{id}}' at {{pathA}} collides with the plugin at {{pathB}}. Rename one and rerun.",
|
|
263
276
|
loadErrorPluginIdMismatch: "{{relEntry}}: extension declares pluginId '{{declared}}' but its plugin.json declares id '{{manifestId}}'. Remove the explicit pluginId from the extension; the loader injects it from plugin.json#/id.",
|
|
@@ -2226,7 +2239,7 @@ function readDefaultsFromDisk() {
|
|
|
2226
2239
|
}
|
|
2227
2240
|
|
|
2228
2241
|
// plugins/core/parsers/frontmatter-yaml/index.ts
|
|
2229
|
-
import
|
|
2242
|
+
import { load as yamlLoad, JSON_SCHEMA } from "js-yaml";
|
|
2230
2243
|
|
|
2231
2244
|
// kernel/util/strip-prototype-pollution.ts
|
|
2232
2245
|
var FORBIDDEN_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -2261,7 +2274,7 @@ var frontmatterYamlParser = {
|
|
|
2261
2274
|
let parsed = {};
|
|
2262
2275
|
const issues = [];
|
|
2263
2276
|
try {
|
|
2264
|
-
const doc =
|
|
2277
|
+
const doc = yamlLoad(frontmatterRaw, { schema: JSON_SCHEMA });
|
|
2265
2278
|
if (doc && typeof doc === "object" && !Array.isArray(doc)) {
|
|
2266
2279
|
parsed = stripPrototypePollution(doc);
|
|
2267
2280
|
}
|
|
@@ -2559,7 +2572,7 @@ import { existsSync as existsSync5, readFileSync as readFileSync6 } from "fs";
|
|
|
2559
2572
|
import { dirname as dirname4, resolve as resolve8 } from "path";
|
|
2560
2573
|
import { createRequire as createRequire3 } from "module";
|
|
2561
2574
|
import { Ajv2020 as Ajv20204 } from "ajv/dist/2020.js";
|
|
2562
|
-
import
|
|
2575
|
+
import { load as yamlLoad2, JSON_SCHEMA as JSON_SCHEMA2 } from "js-yaml";
|
|
2563
2576
|
function readSidecarFor(mdAbsolutePath) {
|
|
2564
2577
|
const sidecarPath = sidecarPathFor(mdAbsolutePath);
|
|
2565
2578
|
if (!existsSync5(sidecarPath)) {
|
|
@@ -2577,7 +2590,7 @@ function readSidecarFor(mdAbsolutePath) {
|
|
|
2577
2590
|
}
|
|
2578
2591
|
let parsedYaml;
|
|
2579
2592
|
try {
|
|
2580
|
-
parsedYaml =
|
|
2593
|
+
parsedYaml = yamlLoad2(raw, { schema: JSON_SCHEMA2 });
|
|
2581
2594
|
} catch (err) {
|
|
2582
2595
|
return {
|
|
2583
2596
|
parsed: null,
|
|
@@ -2712,7 +2725,7 @@ import { existsSync as existsSync8, readFileSync as readFileSync8 } from "fs";
|
|
|
2712
2725
|
import { dirname as dirname6, resolve as resolve9 } from "path";
|
|
2713
2726
|
import { createRequire as createRequire4 } from "module";
|
|
2714
2727
|
import { Ajv2020 as Ajv20205 } from "ajv/dist/2020.js";
|
|
2715
|
-
import
|
|
2728
|
+
import { dump as yamlDump, load as yamlLoad3, CORE_SCHEMA, JSON_SCHEMA as JSON_SCHEMA3 } from "js-yaml";
|
|
2716
2729
|
|
|
2717
2730
|
// kernel/util/atomic-write.ts
|
|
2718
2731
|
import {
|
|
@@ -2734,7 +2747,7 @@ import { createHash } from "crypto";
|
|
|
2734
2747
|
import { existsSync as existsSync9 } from "fs";
|
|
2735
2748
|
import { isAbsolute as isAbsolute3, resolve as resolvePath } from "path";
|
|
2736
2749
|
import "js-tiktoken/lite";
|
|
2737
|
-
import
|
|
2750
|
+
import { dump as yamlDump2, CORE_SCHEMA as CORE_SCHEMA2 } from "js-yaml";
|
|
2738
2751
|
|
|
2739
2752
|
// kernel/orchestrator/frontmatter.ts
|
|
2740
2753
|
function validateFrontmatter(providerFrontmatter, provider, kind, frontmatter, path, strict) {
|
|
@@ -2827,22 +2840,22 @@ function canonicalFrontmatter(parsed, raw) {
|
|
|
2827
2840
|
if (!hasParsedKeys && hasRawText) {
|
|
2828
2841
|
return raw;
|
|
2829
2842
|
}
|
|
2830
|
-
return
|
|
2843
|
+
return yamlDump2(parsed, {
|
|
2831
2844
|
sortKeys: true,
|
|
2832
2845
|
lineWidth: -1,
|
|
2833
2846
|
noRefs: true,
|
|
2834
|
-
|
|
2847
|
+
schema: CORE_SCHEMA2
|
|
2835
2848
|
});
|
|
2836
2849
|
}
|
|
2837
2850
|
function canonicalSidecarAnnotations(annotations) {
|
|
2838
2851
|
if (!annotations || typeof annotations !== "object" || Array.isArray(annotations)) {
|
|
2839
|
-
return
|
|
2852
|
+
return yamlDump2({}, { sortKeys: true, lineWidth: -1, noRefs: true, schema: CORE_SCHEMA2 });
|
|
2840
2853
|
}
|
|
2841
|
-
return
|
|
2854
|
+
return yamlDump2(annotations, {
|
|
2842
2855
|
sortKeys: true,
|
|
2843
2856
|
lineWidth: -1,
|
|
2844
2857
|
noRefs: true,
|
|
2845
|
-
|
|
2858
|
+
schema: CORE_SCHEMA2
|
|
2846
2859
|
});
|
|
2847
2860
|
}
|
|
2848
2861
|
function resolveSidecarOverlay(relativePath, nodePathForIssue, roots, liveBodyHash, liveFrontmatterHash) {
|
|
@@ -4150,4 +4163,4 @@ export {
|
|
|
4150
4163
|
runScanWithRenames
|
|
4151
4164
|
};
|
|
4152
4165
|
//# sourceMappingURL=index.js.map
|
|
4153
|
-
//# debugId=
|
|
4166
|
+
//# debugId=f0a24ed1-f91a-59a8-b2b9-db8168690990
|
package/dist/kernel/index.d.ts
CHANGED
|
@@ -1574,6 +1574,19 @@ interface IDiscoveredPlugin {
|
|
|
1574
1574
|
storageSchemas?: Record<string, IPluginStorageSchema>;
|
|
1575
1575
|
/** Human-readable diagnostic shown by `sm plugins list/show`. */
|
|
1576
1576
|
reason?: string;
|
|
1577
|
+
/**
|
|
1578
|
+
* Runtime-only, never persisted, never spec-modeled.
|
|
1579
|
+
*
|
|
1580
|
+
* Set by the loader when a project-local disk plugin was discovered
|
|
1581
|
+
* (manifest parsed + surfaced) but its extension code was NOT imported
|
|
1582
|
+
* because the operator never granted local trust (no `config_plugins`
|
|
1583
|
+
* override enables the plugin or any of its extensions). The plugin
|
|
1584
|
+
* still rides as `status: 'disabled'` (extensions absent), this flag
|
|
1585
|
+
* lets the runtime distinguish "not yet trusted" from an explicit
|
|
1586
|
+
* `sm plugins disable`, so it can emit a one-time "found but not
|
|
1587
|
+
* loaded, run `sm plugins enable`" notice. See spec § Plugin trust.
|
|
1588
|
+
*/
|
|
1589
|
+
untrusted?: boolean;
|
|
1577
1590
|
}
|
|
1578
1591
|
/**
|
|
1579
1592
|
* Runtime-only, a single AJV-compiled storage schema attached to a
|
|
@@ -1720,7 +1733,7 @@ declare function makePluginStore(opts: {
|
|
|
1720
1733
|
* a single `set` simply replaces the base.
|
|
1721
1734
|
* 3. `delta`: additive (may be negative), summed.
|
|
1722
1735
|
* 4. `floor`: raise to at least the value (`max`).
|
|
1723
|
-
* 5. `ceil`: lower to at most the value (`min`)
|
|
1736
|
+
* 5. `ceil`: lower to at most the value (`min`), today's broken cap.
|
|
1724
1737
|
* Applied AFTER floor so a cap dominates a floor/ceil collision.
|
|
1725
1738
|
* 6. clamp to [0,1] ONCE at the end, so opposing deltas round-trip
|
|
1726
1739
|
* (e.g. `-0.4` then `+0.4` returns to base, never clipped midway).
|
|
@@ -2598,12 +2611,22 @@ interface IProviderScaffold {
|
|
|
2598
2611
|
* traversal; the consuming verb joins it onto the cwd.
|
|
2599
2612
|
*/
|
|
2600
2613
|
skillDir: string;
|
|
2614
|
+
/**
|
|
2615
|
+
* Optional directory the materialising verb creates so the active-lens
|
|
2616
|
+
* resolver picks THIS Provider when its `skillDir` is shared with another
|
|
2617
|
+
* lens. The open `.agents/skills` territory is read by several lenses
|
|
2618
|
+
* (`agent-skills`, `antigravity`, `codex`); a Provider whose skillDir is
|
|
2619
|
+
* that shared territory but whose lens needs a distinct marker (Codex's
|
|
2620
|
+
* `.codex`) declares it here, and `sm tutorial --for <id>` drops the marker
|
|
2621
|
+
* alongside the skill. Omitted when the skillDir's parent IS the marker.
|
|
2622
|
+
*/
|
|
2623
|
+
marker?: string;
|
|
2601
2624
|
/**
|
|
2602
2625
|
* Display-only hints naming the agents that consume this scaffold
|
|
2603
|
-
* territory, rendered in parentheses next to
|
|
2604
|
-
* `sm tutorial` destination prompt
|
|
2605
|
-
*
|
|
2606
|
-
*
|
|
2626
|
+
* territory AND share its tutorial track, rendered in parentheses next to
|
|
2627
|
+
* the Provider label in the `sm tutorial` destination prompt. Purely
|
|
2628
|
+
* presentational: NOT matched by `--for` (only registered Provider ids
|
|
2629
|
+
* are) and has no runtime effect.
|
|
2607
2630
|
*/
|
|
2608
2631
|
aka?: readonly string[];
|
|
2609
2632
|
}
|
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]="7dc46367-403b-5856-87b8-23673c2d3f6c")}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.
|
|
105
|
+
version: "0.68.1",
|
|
106
106
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
107
107
|
license: "MIT",
|
|
108
108
|
type: "module",
|
|
@@ -175,39 +175,38 @@ var package_default = {
|
|
|
175
175
|
clean: "rm -rf dist coverage"
|
|
176
176
|
},
|
|
177
177
|
dependencies: {
|
|
178
|
-
"@hono/node-server": "2.0.
|
|
179
|
-
"@sentry/node": "10.
|
|
178
|
+
"@hono/node-server": "2.0.6",
|
|
179
|
+
"@sentry/node": "10.61.0",
|
|
180
180
|
"@skill-map/spec": "workspace:*",
|
|
181
|
-
ajv: "8.
|
|
181
|
+
ajv: "8.20.0",
|
|
182
182
|
"ajv-formats": "3.0.1",
|
|
183
183
|
chokidar: "5.0.0",
|
|
184
184
|
clipanion: "4.0.0-rc.4",
|
|
185
|
-
hono: "4.12.
|
|
185
|
+
hono: "4.12.27",
|
|
186
186
|
ignore: "7.0.5",
|
|
187
187
|
"js-tiktoken": "1.0.21",
|
|
188
|
-
"js-yaml": "
|
|
189
|
-
kysely: "0.
|
|
190
|
-
"posthog-node": "5.
|
|
191
|
-
semver: "7.
|
|
192
|
-
"smol-toml": "1.
|
|
188
|
+
"js-yaml": "5.1.0",
|
|
189
|
+
kysely: "0.29.2",
|
|
190
|
+
"posthog-node": "5.38.5",
|
|
191
|
+
semver: "7.8.5",
|
|
192
|
+
"smol-toml": "1.7.0",
|
|
193
193
|
typanion: "3.14.0",
|
|
194
194
|
ws: "8.21.0"
|
|
195
195
|
},
|
|
196
196
|
devDependencies: {
|
|
197
197
|
"@eslint/js": "10.0.1",
|
|
198
198
|
"@stylistic/eslint-plugin": "5.10.0",
|
|
199
|
-
"@types/
|
|
200
|
-
"@types/node": "24.12.2",
|
|
199
|
+
"@types/node": "26.0.1",
|
|
201
200
|
"@types/semver": "7.7.1",
|
|
202
201
|
"@types/ws": "8.18.1",
|
|
203
202
|
c8: "11.0.0",
|
|
204
|
-
eslint: "10.
|
|
205
|
-
"eslint-plugin-import-x": "4.
|
|
203
|
+
eslint: "10.5.0",
|
|
204
|
+
"eslint-plugin-import-x": "4.17.0",
|
|
206
205
|
"json-schema-to-typescript": "15.0.4",
|
|
207
206
|
tsup: "8.5.1",
|
|
208
|
-
tsx: "4.22.
|
|
209
|
-
typescript: "
|
|
210
|
-
"typescript-eslint": "8.
|
|
207
|
+
tsx: "4.22.4",
|
|
208
|
+
typescript: "6.0.3",
|
|
209
|
+
"typescript-eslint": "8.62.0"
|
|
211
210
|
},
|
|
212
211
|
engines: {
|
|
213
212
|
node: ">=24.0"
|
|
@@ -258,6 +257,20 @@ var PLUGIN_LOADER_TEXTS = {
|
|
|
258
257
|
invalidManifestExtensionShape: "{{relEntry}}: {{errors}}. See {{docUrl}}.",
|
|
259
258
|
importExceededTimeout: "import exceeded {{timeoutMs}}ms; likely a top-level side effect (network call, infinite loop, large blocking work). Move side effects into the runtime methods (`detect` / `evaluate` / `render` / etc.).",
|
|
260
259
|
disabledByConfig: "disabled by config_plugins or settings.json",
|
|
260
|
+
/**
|
|
261
|
+
* Reason stamped on a project-local disk plugin discovered but not
|
|
262
|
+
* imported because the operator never granted local trust. Distinct
|
|
263
|
+
* from `disabledByConfig` (an explicit toggle-off): this id has no
|
|
264
|
+
* `config_plugins` override at all, so its code stays unexecuted until
|
|
265
|
+
* `sm plugins enable` records local intent.
|
|
266
|
+
*/
|
|
267
|
+
untrustedNotLoaded: "not loaded: project-local plugin is untrusted until enabled. Run `sm plugins enable {{pluginId}}` to load it.",
|
|
268
|
+
/**
|
|
269
|
+
* One-time aggregate notice the runtime emits when project-local
|
|
270
|
+
* plugins were found on disk but left unloaded for lack of trust. The
|
|
271
|
+
* `{{count}}` plugins ride the scan without executing any code.
|
|
272
|
+
*/
|
|
273
|
+
untrustedPluginsFoundNotice: "{{count}} project-local plugin(s) found in .skill-map/plugins/ but not loaded (untrusted). Their code did NOT run. Review with `sm plugins list`, then enable any you trust with `sm plugins enable <id>`.",
|
|
261
274
|
invalidManifestDirMismatch: "directory name '{{dirName}}' does not match manifest id '{{manifestId}}'. Rename the directory to match the id, or update the manifest id to match the directory.",
|
|
262
275
|
idCollision: "Plugin '{{id}}' at {{pathA}} collides with the plugin at {{pathB}}. Rename one and rerun.",
|
|
263
276
|
loadErrorPluginIdMismatch: "{{relEntry}}: extension declares pluginId '{{declared}}' but its plugin.json declares id '{{manifestId}}'. Remove the explicit pluginId from the extension; the loader injects it from plugin.json#/id.",
|
|
@@ -2226,7 +2239,7 @@ function readDefaultsFromDisk() {
|
|
|
2226
2239
|
}
|
|
2227
2240
|
|
|
2228
2241
|
// plugins/core/parsers/frontmatter-yaml/index.ts
|
|
2229
|
-
import
|
|
2242
|
+
import { load as yamlLoad, JSON_SCHEMA } from "js-yaml";
|
|
2230
2243
|
|
|
2231
2244
|
// kernel/util/strip-prototype-pollution.ts
|
|
2232
2245
|
var FORBIDDEN_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -2261,7 +2274,7 @@ var frontmatterYamlParser = {
|
|
|
2261
2274
|
let parsed = {};
|
|
2262
2275
|
const issues = [];
|
|
2263
2276
|
try {
|
|
2264
|
-
const doc =
|
|
2277
|
+
const doc = yamlLoad(frontmatterRaw, { schema: JSON_SCHEMA });
|
|
2265
2278
|
if (doc && typeof doc === "object" && !Array.isArray(doc)) {
|
|
2266
2279
|
parsed = stripPrototypePollution(doc);
|
|
2267
2280
|
}
|
|
@@ -2559,7 +2572,7 @@ import { existsSync as existsSync5, readFileSync as readFileSync6 } from "fs";
|
|
|
2559
2572
|
import { dirname as dirname4, resolve as resolve8 } from "path";
|
|
2560
2573
|
import { createRequire as createRequire3 } from "module";
|
|
2561
2574
|
import { Ajv2020 as Ajv20204 } from "ajv/dist/2020.js";
|
|
2562
|
-
import
|
|
2575
|
+
import { load as yamlLoad2, JSON_SCHEMA as JSON_SCHEMA2 } from "js-yaml";
|
|
2563
2576
|
function readSidecarFor(mdAbsolutePath) {
|
|
2564
2577
|
const sidecarPath = sidecarPathFor(mdAbsolutePath);
|
|
2565
2578
|
if (!existsSync5(sidecarPath)) {
|
|
@@ -2577,7 +2590,7 @@ function readSidecarFor(mdAbsolutePath) {
|
|
|
2577
2590
|
}
|
|
2578
2591
|
let parsedYaml;
|
|
2579
2592
|
try {
|
|
2580
|
-
parsedYaml =
|
|
2593
|
+
parsedYaml = yamlLoad2(raw, { schema: JSON_SCHEMA2 });
|
|
2581
2594
|
} catch (err) {
|
|
2582
2595
|
return {
|
|
2583
2596
|
parsed: null,
|
|
@@ -2712,7 +2725,7 @@ import { existsSync as existsSync8, readFileSync as readFileSync8 } from "fs";
|
|
|
2712
2725
|
import { dirname as dirname6, resolve as resolve9 } from "path";
|
|
2713
2726
|
import { createRequire as createRequire4 } from "module";
|
|
2714
2727
|
import { Ajv2020 as Ajv20205 } from "ajv/dist/2020.js";
|
|
2715
|
-
import
|
|
2728
|
+
import { dump as yamlDump, load as yamlLoad3, CORE_SCHEMA, JSON_SCHEMA as JSON_SCHEMA3 } from "js-yaml";
|
|
2716
2729
|
|
|
2717
2730
|
// kernel/util/atomic-write.ts
|
|
2718
2731
|
import {
|
|
@@ -2734,7 +2747,7 @@ import { createHash } from "crypto";
|
|
|
2734
2747
|
import { existsSync as existsSync9 } from "fs";
|
|
2735
2748
|
import { isAbsolute as isAbsolute3, resolve as resolvePath } from "path";
|
|
2736
2749
|
import "js-tiktoken/lite";
|
|
2737
|
-
import
|
|
2750
|
+
import { dump as yamlDump2, CORE_SCHEMA as CORE_SCHEMA2 } from "js-yaml";
|
|
2738
2751
|
|
|
2739
2752
|
// kernel/orchestrator/frontmatter.ts
|
|
2740
2753
|
function validateFrontmatter(providerFrontmatter, provider, kind, frontmatter, path, strict) {
|
|
@@ -2827,22 +2840,22 @@ function canonicalFrontmatter(parsed, raw) {
|
|
|
2827
2840
|
if (!hasParsedKeys && hasRawText) {
|
|
2828
2841
|
return raw;
|
|
2829
2842
|
}
|
|
2830
|
-
return
|
|
2843
|
+
return yamlDump2(parsed, {
|
|
2831
2844
|
sortKeys: true,
|
|
2832
2845
|
lineWidth: -1,
|
|
2833
2846
|
noRefs: true,
|
|
2834
|
-
|
|
2847
|
+
schema: CORE_SCHEMA2
|
|
2835
2848
|
});
|
|
2836
2849
|
}
|
|
2837
2850
|
function canonicalSidecarAnnotations(annotations) {
|
|
2838
2851
|
if (!annotations || typeof annotations !== "object" || Array.isArray(annotations)) {
|
|
2839
|
-
return
|
|
2852
|
+
return yamlDump2({}, { sortKeys: true, lineWidth: -1, noRefs: true, schema: CORE_SCHEMA2 });
|
|
2840
2853
|
}
|
|
2841
|
-
return
|
|
2854
|
+
return yamlDump2(annotations, {
|
|
2842
2855
|
sortKeys: true,
|
|
2843
2856
|
lineWidth: -1,
|
|
2844
2857
|
noRefs: true,
|
|
2845
|
-
|
|
2858
|
+
schema: CORE_SCHEMA2
|
|
2846
2859
|
});
|
|
2847
2860
|
}
|
|
2848
2861
|
function resolveSidecarOverlay(relativePath, nodePathForIssue, roots, liveBodyHash, liveFrontmatterHash) {
|
|
@@ -4150,4 +4163,4 @@ export {
|
|
|
4150
4163
|
runScanWithRenames
|
|
4151
4164
|
};
|
|
4152
4165
|
//# sourceMappingURL=index.js.map
|
|
4153
|
-
//# debugId=
|
|
4166
|
+
//# debugId=7dc46367-403b-5856-87b8-23673c2d3f6c
|