@skill-map/cli 0.68.0 → 0.69.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/tutorial/sm-tutorial/SKILL.md +14 -15
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/manifest.json +0 -3
- package/dist/cli/tutorial/sm-tutorial/references/_core.md +15 -6
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +93 -119
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +46 -70
- package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +5 -6
- package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +23 -6
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-daily.md +98 -76
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-fundamentals.md +21 -20
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-kickoff.md +151 -6
- package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +114 -100
- package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +27 -31
- package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +171 -14
- package/dist/cli/tutorial/sm-tutorial/scripts/state.js +4 -4
- package/dist/cli.js +708 -334
- package/dist/conformance/index.js +3 -3
- package/dist/index.js +11 -10
- package/dist/kernel/index.d.ts +27 -17
- package/dist/kernel/index.js +11 -10
- package/dist/migrations/001_initial.sql +7 -3
- package/dist/ui/chunk-E7GLGHVY.js +1 -0
- package/dist/ui/chunk-RLRSNHYG.js +3 -0
- package/dist/ui/{chunk-4F53HBGG.js → chunk-RRRXQNG6.js} +1 -1
- package/dist/ui/{chunk-3GDWM5VM.js → chunk-SI4MGFOW.js} +1 -1
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-ZYRIR6DB.js → main-23NGLEUB.js} +3 -3
- package/migrations/001_initial.sql +7 -3
- package/package.json +2 -2
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-connect.md +0 -166
- package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +0 -175
- package/dist/ui/chunk-BJUBDHJR.js +0 -3
- package/dist/ui/chunk-PU5OP5RN.js +0 -1
- /package/dist/ui/{chunk-KMHXNOFZ.js → chunk-SXSNTF26.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
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]="b6a1c282-9829-57e4-bf63-a527fcb3c207")}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";
|
|
@@ -215,7 +215,7 @@ function grantFixturePluginTrust(scope, binary, env) {
|
|
|
215
215
|
const db = new DatabaseSync(dbPath);
|
|
216
216
|
try {
|
|
217
217
|
const stmt = db.prepare(
|
|
218
|
-
"INSERT INTO config_plugins (plugin_id,
|
|
218
|
+
"INSERT INTO config_plugins (plugin_id, trusted, updated_at) VALUES (?, 1, 0) ON CONFLICT(plugin_id) DO UPDATE SET trusted = 1"
|
|
219
219
|
);
|
|
220
220
|
for (const id of ids) stmt.run(id);
|
|
221
221
|
} finally {
|
|
@@ -453,4 +453,4 @@ export {
|
|
|
453
453
|
runConformanceCase
|
|
454
454
|
};
|
|
455
455
|
//# sourceMappingURL=index.js.map
|
|
456
|
-
//# debugId=
|
|
456
|
+
//# debugId=b6a1c282-9829-57e4-bf63-a527fcb3c207
|
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]="8412e979-4214-5385-b673-277f1b8e6e02")}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.69.0",
|
|
106
106
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
107
107
|
license: "MIT",
|
|
108
108
|
type: "module",
|
|
@@ -256,21 +256,22 @@ var PLUGIN_LOADER_TEXTS = {
|
|
|
256
256
|
// schema. Both are GitHub blob URLs.
|
|
257
257
|
invalidManifestExtensionShape: "{{relEntry}}: {{errors}}. See {{docUrl}}.",
|
|
258
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.).",
|
|
259
|
-
disabledByConfig: "disabled by
|
|
259
|
+
disabledByConfig: "disabled by settings.json (plugins.<id>.enabled)",
|
|
260
260
|
/**
|
|
261
261
|
* Reason stamped on a project-local disk plugin discovered but not
|
|
262
|
-
* imported because the operator never granted local trust.
|
|
263
|
-
* from `disabledByConfig` (an explicit toggle-off
|
|
264
|
-
*
|
|
265
|
-
* `
|
|
262
|
+
* imported because the operator never granted local import trust.
|
|
263
|
+
* Distinct from `disabledByConfig` (an explicit operational toggle-off
|
|
264
|
+
* in the config layers): this id is enabled but carries no
|
|
265
|
+
* `config_plugins` trust grant, so its code stays unexecuted until
|
|
266
|
+
* `sm plugins trust` records local consent.
|
|
266
267
|
*/
|
|
267
|
-
untrustedNotLoaded: "not loaded: project-local plugin is
|
|
268
|
+
untrustedNotLoaded: "not loaded: project-local plugin is enabled but not trusted on this machine. Run `sm plugins trust {{pluginId}}` to load it.",
|
|
268
269
|
/**
|
|
269
270
|
* One-time aggregate notice the runtime emits when project-local
|
|
270
271
|
* plugins were found on disk but left unloaded for lack of trust. The
|
|
271
272
|
* `{{count}}` plugins ride the scan without executing any code.
|
|
272
273
|
*/
|
|
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
|
|
274
|
+
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 trust any you vetted with `sm plugins trust <id>`.",
|
|
274
275
|
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.",
|
|
275
276
|
idCollision: "Plugin '{{id}}' at {{pathA}} collides with the plugin at {{pathB}}. Rename one and rerun.",
|
|
276
277
|
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.",
|
|
@@ -4163,4 +4164,4 @@ export {
|
|
|
4163
4164
|
runScanWithRenames
|
|
4164
4165
|
};
|
|
4165
4166
|
//# sourceMappingURL=index.js.map
|
|
4166
|
-
//# debugId=
|
|
4167
|
+
//# debugId=8412e979-4214-5385-b673-277f1b8e6e02
|
package/dist/kernel/index.d.ts
CHANGED
|
@@ -486,7 +486,7 @@ type TSettingValue = string | string[] | boolean | number | ISetting_KeyValueLis
|
|
|
486
486
|
* to DISABLED, so the extension does not load (does not run, does not
|
|
487
487
|
* register) unless the operator opts in (`sm plugins enable
|
|
488
488
|
* <plugin>/<ext>`, the Settings toggle, or a `settings.json` /
|
|
489
|
-
* `
|
|
489
|
+
* `settings.local.json` override). The opt-in is a plain enable override,
|
|
490
490
|
* once set it wins over the installed default exactly like any other
|
|
491
491
|
* extension (so a deprecated extension can still be kept running during
|
|
492
492
|
* a migration). The remaining values are presentation-only and default
|
|
@@ -2061,11 +2061,15 @@ interface IMigrateNodeFksReport {
|
|
|
2061
2061
|
keys: Record<string, string>;
|
|
2062
2062
|
}>;
|
|
2063
2063
|
}
|
|
2064
|
-
/**
|
|
2065
|
-
|
|
2064
|
+
/**
|
|
2065
|
+
* A single `config_plugins` trust row as the kernel sees it. The table
|
|
2066
|
+
* is the per-machine import-trust store (the SECURITY axis); the
|
|
2067
|
+
* operational enable/disable toggle lives in the config layers, not
|
|
2068
|
+
* here. Keyed by the bare plugin id.
|
|
2069
|
+
*/
|
|
2070
|
+
interface IPluginTrustRow {
|
|
2066
2071
|
pluginId: string;
|
|
2067
|
-
|
|
2068
|
-
configJson: string | null;
|
|
2072
|
+
trusted: boolean;
|
|
2069
2073
|
updatedAt: number;
|
|
2070
2074
|
}
|
|
2071
2075
|
/** Discovered kernel migration file (one of `NNN_snake_case.sql`). */
|
|
@@ -4977,24 +4981,30 @@ interface StoragePort {
|
|
|
4977
4981
|
*/
|
|
4978
4982
|
findActive(predicate: (issue: Issue) => boolean): Promise<IIssueRow[]>;
|
|
4979
4983
|
};
|
|
4980
|
-
|
|
4984
|
+
/**
|
|
4985
|
+
* Per-machine plugin import-trust store (`config_plugins`, the SECURITY
|
|
4986
|
+
* axis). Keyed by bare plugin id. Written by `sm plugins trust /
|
|
4987
|
+
* untrust` and `PATCH /api/plugins/:id/trust`. The operational
|
|
4988
|
+
* enable/disable toggle lives in the config layers, NOT here.
|
|
4989
|
+
*/
|
|
4990
|
+
trust: {
|
|
4981
4991
|
/**
|
|
4982
|
-
* Upsert the per-plugin
|
|
4983
|
-
*
|
|
4992
|
+
* Upsert the per-plugin trust grant into `config_plugins`. Caller is
|
|
4993
|
+
* `sm plugins trust / untrust` (and the BFF trust route).
|
|
4984
4994
|
*/
|
|
4985
|
-
set(pluginId: string,
|
|
4986
|
-
/** Read a single
|
|
4995
|
+
set(pluginId: string, trusted: boolean): Promise<void>;
|
|
4996
|
+
/** Read a single trust grant; `undefined` when no row exists. */
|
|
4987
4997
|
get(pluginId: string): Promise<boolean | undefined>;
|
|
4988
|
-
/** Every
|
|
4989
|
-
list(): Promise<
|
|
4990
|
-
/** Drop a single
|
|
4998
|
+
/** Every trust row, sorted by `pluginId` for stable rendering. */
|
|
4999
|
+
list(): Promise<IPluginTrustRow[]>;
|
|
5000
|
+
/** Drop a single trust row (no-op when absent). */
|
|
4991
5001
|
delete(pluginId: string): Promise<void>;
|
|
4992
5002
|
/**
|
|
4993
|
-
* Load every
|
|
4994
|
-
* `loadPluginRuntime` to
|
|
4995
|
-
*
|
|
5003
|
+
* Load every trust grant into a map for quick lookup by bare plugin
|
|
5004
|
+
* id. Used by `loadPluginRuntime` to feed the import-trust gate at
|
|
5005
|
+
* scan boot.
|
|
4996
5006
|
*/
|
|
4997
|
-
|
|
5007
|
+
loadTrustMap(): Promise<Map<string, boolean>>;
|
|
4998
5008
|
};
|
|
4999
5009
|
jobs: {
|
|
5000
5010
|
/**
|
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]="c7e7d754-73eb-5f99-8e19-732a9f84a4c8")}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.69.0",
|
|
106
106
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
107
107
|
license: "MIT",
|
|
108
108
|
type: "module",
|
|
@@ -256,21 +256,22 @@ var PLUGIN_LOADER_TEXTS = {
|
|
|
256
256
|
// schema. Both are GitHub blob URLs.
|
|
257
257
|
invalidManifestExtensionShape: "{{relEntry}}: {{errors}}. See {{docUrl}}.",
|
|
258
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.).",
|
|
259
|
-
disabledByConfig: "disabled by
|
|
259
|
+
disabledByConfig: "disabled by settings.json (plugins.<id>.enabled)",
|
|
260
260
|
/**
|
|
261
261
|
* Reason stamped on a project-local disk plugin discovered but not
|
|
262
|
-
* imported because the operator never granted local trust.
|
|
263
|
-
* from `disabledByConfig` (an explicit toggle-off
|
|
264
|
-
*
|
|
265
|
-
* `
|
|
262
|
+
* imported because the operator never granted local import trust.
|
|
263
|
+
* Distinct from `disabledByConfig` (an explicit operational toggle-off
|
|
264
|
+
* in the config layers): this id is enabled but carries no
|
|
265
|
+
* `config_plugins` trust grant, so its code stays unexecuted until
|
|
266
|
+
* `sm plugins trust` records local consent.
|
|
266
267
|
*/
|
|
267
|
-
untrustedNotLoaded: "not loaded: project-local plugin is
|
|
268
|
+
untrustedNotLoaded: "not loaded: project-local plugin is enabled but not trusted on this machine. Run `sm plugins trust {{pluginId}}` to load it.",
|
|
268
269
|
/**
|
|
269
270
|
* One-time aggregate notice the runtime emits when project-local
|
|
270
271
|
* plugins were found on disk but left unloaded for lack of trust. The
|
|
271
272
|
* `{{count}}` plugins ride the scan without executing any code.
|
|
272
273
|
*/
|
|
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
|
|
274
|
+
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 trust any you vetted with `sm plugins trust <id>`.",
|
|
274
275
|
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.",
|
|
275
276
|
idCollision: "Plugin '{{id}}' at {{pathA}} collides with the plugin at {{pathB}}. Rename one and rerun.",
|
|
276
277
|
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.",
|
|
@@ -4163,4 +4164,4 @@ export {
|
|
|
4163
4164
|
runScanWithRenames
|
|
4164
4165
|
};
|
|
4165
4166
|
//# sourceMappingURL=index.js.map
|
|
4166
|
-
//# debugId=
|
|
4167
|
+
//# debugId=c7e7d754-73eb-5f99-8e19-732a9f84a4c8
|
|
@@ -241,12 +241,16 @@ CREATE TABLE state_node_favorites (
|
|
|
241
241
|
|
|
242
242
|
-- --- Config zone -----------------------------------------------------------
|
|
243
243
|
|
|
244
|
+
-- Per-machine plugin import-trust store (the SECURITY axis). The
|
|
245
|
+
-- operational enable/disable toggle lives in the config layers
|
|
246
|
+
-- (settings.json / settings.local.json), NOT here. Keyed by bare plugin
|
|
247
|
+
-- id. Redefined inline (greenfield, no migration file, no user_version
|
|
248
|
+
-- bump): the scan_meta.schema_fingerprint drift path rebuilds the cache.
|
|
244
249
|
CREATE TABLE config_plugins (
|
|
245
250
|
plugin_id TEXT PRIMARY KEY,
|
|
246
|
-
|
|
247
|
-
config_json TEXT,
|
|
251
|
+
trusted INTEGER NOT NULL DEFAULT 0,
|
|
248
252
|
updated_at INTEGER NOT NULL,
|
|
249
|
-
CONSTRAINT
|
|
253
|
+
CONSTRAINT ck_config_plugins_trusted CHECK (trusted IN (0,1))
|
|
250
254
|
);
|
|
251
255
|
|
|
252
256
|
CREATE TABLE config_preferences (
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as l,d as c,i as d}from"./chunk-SXSNTF26.js";import{K as a,P as o,ga as r,wc as s}from"./chunk-EJVWTBMV.js";var h={triggerLabel:"Settings",triggerTooltip:"Settings",modalTitle:"Settings",closeLabel:"Close",sections:{plugins:"Plugins",general:"General",project:"Project",changelog:"Changelog",about:"About"},general:{heading:"General",intro:"Per-machine preferences.",loadErrorPrefix:"Could not load preferences:",saveErrorPrefix:"Could not save preferences:",toggles:{"updateCheck.enabled":{label:"Check for updates",description:"Check npm for newer @skill-map/cli releases."},telemetry:{label:"Send anonymous error & usage reports",description:"Report crashes and which features you use. No file contents or paths.",hint:"Restart sm for this to take effect."}},extraTheme:{label:"Theme",description:"Pick a specialty theme.",options:{none:{label:"None",description:"Use the topbar dark/light toggle."}}},storageHintLabel:"Settings are stored in:",storageHintPath:"~/.skill-map/settings.json"},project:{heading:"Project",introPrefix:"These settings apply only to this project and are saved in",introPath:".skill-map/settings.local.json",introSuffix:".",loadErrorPrefix:"Could not load project settings:",saveErrorPrefix:"Could not save project settings:",sidecarWritersLabel:"Allow sidecar writers",sidecarWritersDescription:"Let actions write `.sm` files (version, tags, stability) next to your notes. Turn this off on a shared project to keep them out of the repo: the setting is committed, so it applies to the whole team.",pluginTrustLabel:"Trust plugins this project enables (this machine only)",pluginTrustDescription:"Run any plugin under .skill-map/plugins/ that the project enables, without trusting each one by hand. This applies only to your machine and is never committed. Turn it off to require per-plugin trust again.",pluginTrustConfirmHeader:"Trust every plugin this project enables?",pluginTrustConfirmIntro:"This lets any plugin the project enables run its code on this machine, including ones you have not reviewed. It applies only to your machine and is never committed.",pluginTrustConfirmAccept:"Trust project plugins",pluginTrustConfirmReject:"Cancel",referencePathsLabel:"Folders for link validation",referencePathsDescription:"If your notes link to files outside this project, list those folders here. Skill-map checks them only to confirm the links work, nothing from these folders shows up in the map.",referencePathsPlaceholder:"~/Documents/research",referencePathsInputAriaLabel:"New folder path",commaForbidden:"Add one path at a time, without commas.",addPathLabel:"Add path",removePathLabel:"Remove",confirmDialogHeader:"Allow access to folders outside this project?",confirmDialogIntro:"This change lets the scan read files in:",confirmDialogAccept:"Allow access",confirmDialogReject:"Cancel",ignorePatternsLabel:"Ignored patterns",ignorePatternsDescriptionPrefix:"Patterns that exclude files and folders from the scan, stored in",ignorePatternsDescriptionFile:".skillmapignore",ignorePatternsDescriptionMiddle:"at the project root. Same syntax as",ignorePatternsDescriptionGitignore:".gitignore",ignorePatternsDescriptionSuffix:"(one pattern per line).",ignorePatternsPlaceholder:"secrets.md",ignorePatternsInputAriaLabel:"New ignore pattern",ignorePatternEmpty:"Pattern cannot be empty or whitespace-only.",ignorePatternHasControlChar:"Pattern must be a single line without control characters.",ignorePatternDuplicate:"This pattern is already in the list.",addIgnorePatternLabel:"Add pattern",removeIgnorePatternLabel:"Remove",activeProviderLabel:"Active provider",activeProviderDescription:"Selects which provider sees this project. The map reflects how the chosen provider interprets your files.",activeProviderSourceAutodetect:"Auto-detected from your files (no value saved yet).",activeProviderSourceDefault:"No provider marker detected. Showing the universal Markdown view (nothing saved).",activeProviderDetectedPrefix:"Detected:",activeProviderDisabledSuffix:"(disabled)",activeProviderConfirmHeader:"Switch the active provider?",activeProviderConfirmIntro:"Switching will clear the persisted scan (nodes, links, issues). Jobs and history are kept. You will need to run `sm scan` after the switch.",activeProviderConfirmAccept:"Switch and clear scan",activeProviderConfirmReject:"Cancel",activeProviderSwitchedPrefix:"Lens switched. Cleared",activeProviderSwitchedSuffix:"scan table(s). Run `sm scan` to repopulate.",activeProviderSwitchedNoDb:"Lens switched. Run `sm scan` to populate the map under the new lens."},changelogHeading:"Changelog",changelogIntro:"What's new in skill-map. Each entry covers a release of @skill-map/cli (the CLI + bundled UI) and lists the user-facing changes plus the workspace(s) each one affects.",changelogEmpty:"No release notes yet. Future releases will populate this list automatically from the changesets shipped in each PR.",changelogInternalRelease:"Internal release. Focus on stability, infra, and refactors. No user-facing changes this time.",changelogAffectedPackages:"Affected packages",changelogFooterText:"Want the full changelog?",changelogFooterLinkLabel:"See it on GitHub \u2192",changelogFooterUrl:"https://github.com/crystian/skill-map/blob/main/src/CHANGELOG.md",aboutHeading:"About",aboutIntro:"Version information for the running CLI / server.",aboutCliLabel:"skill-map CLI",aboutSpecLabel:"Spec version",aboutSchemaLabel:"Schema version",aboutFolderLabel:"Project folder",aboutDbLabel:"Project DB",aboutDbValue:(e,i)=>e==="present"?i:`${e} \xB7 ${i}`,aboutLoading:"Loading\u2026",aboutUnknown:"-",aboutErrorPrefix:"Could not read health endpoint:",aboutLinksHeading:"Links",aboutWebsiteLabel:"Website",aboutGithubLabel:"GitHub",aboutWebsiteUrl:"https://skill-map.ai/",aboutGithubUrl:"https://github.com/crystian/skill-map",aboutStarHeading:"Enjoying skill-map?",aboutStarBody:"If it's useful to you, drop us a star on GitHub, it helps a lot and keeps the project alive.",aboutStarCta:"Star on GitHub",aboutStarA11y:"Open the skill-map repository on GitHub to give it a star",pluginsHeading:"Plugins",pluginsIntro:"Enable or disable installed plugins.",pluginsSearchPlaceholder:"Filter by name\u2026",pluginsSearchA11y:"Filter plugins by name",pluginsSearchEmpty:e=>`No plugins match "${e}".`,pluginsKindFilterAll:"All",pluginsKindFilterOptionA11y:(e,i)=>i?`Show only ${e} extensions`:"Show all kinds",pluginsSourceFilterOptionA11y:(e,i)=>i?`Show only ${e} plugins`:"Show all sources",pluginsFilterA11y:"Filter plugins by source and kind",pluginsFilterAllA11y:"Show every plugin (clear the source and kind filters)",pluginsProjectEmpty:"No project plugins yet. Drop one under .skill-map/plugins/ or create it with sm plugins create <id>.",unsavedChangesMessage:e=>e===1?'1 unsaved change. Click "Apply" to persist it.':`${e} unsaved changes. Click "Apply" to persist them.`,startsAsDisabledRowHint:"This plugin started disabled and is not loaded in memory. Restart `sm serve` for the change to take effect.",startsAsDisabledFooterHint:"Some plugins were disabled when the server started. Consider restarting `sm serve` so they take effect.",discardChanges:"Discard",applyAndClose:"Apply",discardA11y:"Discard pending changes",applyA11y:"Apply pending changes and refresh the map",applyErrorPrefix:"Could not apply changes:",confirmCloseTitle:"Apply pending changes?",confirmCloseBody:e=>e===1?"You have 1 unsaved change.":`You have ${e} unsaved changes.`,keepEditing:"Keep editing",sourceBuiltIn:"Built-in",sourceProject:"Project",enabledLabel:"Enabled",disabledLabel:"Disabled",lockedLabel:"Locked",lockedTooltip:"Locked by the host (cannot be toggled).",expandLabel:"Show extensions",collapseLabel:"Hide extensions",stability:{experimental:"experimental",beta:"beta",deprecated:"deprecated",tooltip:"Lifecycle stage declared by the extension manifest."},runtimeErrors:{badge:e=>e===1?"1 runtime error":`${e} runtime errors`,badgeTooltip:"This plugin loaded fine, but some of its contributions were rejected during the last scan. Expand for details.",expandLabel:"Show runtime errors",collapseLabel:"Hide runtime errors",extensionPrefix:"Extension:",slotPrefix:"Slot:",contributionPrefix:"Contribution:",a11y:{toggle:(e,i)=>`Runtime errors for plugin ${e} (${i})`}},trust:{trustLabel:"Trust",untrustLabel:"Untrust",trustedBadge:"Trusted",trustedTooltip:"You trusted this plugin to run on this machine.",trustTooltip:"Allow this plugin to run on this machine. Local only, never committed.",untrustedReason:"Enabled but not trusted on this machine, so its code does not run.",trustRestartLoad:"Restart the server to load it.",trustRestartUnload:"Restart the server to unload it.",a11y:{trust:e=>`Trust plugin ${e} to run on this machine`,untrust:e=>`Stop trusting plugin ${e}`}},pluginSection:{navLabel:e=>e,intro:"Configure this plugin's options. Changes apply when you click Apply.",formA11y:e=>`Settings for ${e}`,sectionA11y:e=>`Settings for plugin ${e}`},statusFailure:{"incompatible-spec":"Incompatible spec version","invalid-manifest":"Invalid manifest","load-error":"Failed to load","id-collision":"Plugin id collision"},loading:"Loading plugins\u2026",empty:"No plugins installed.",errorPrefix:"Could not load plugins:",toggleErrorPrefix:"Toggle failed:",a11y:{triggerLabel:"Open settings",pluginToggle:(e,i)=>i?`Enable plugin ${e}`:`Disable plugin ${e}`,extensionToggle:(e,i)=>i?`Enable ${e}`:`Disable ${e}`,pluginRow:e=>`Plugin ${e} row`,extensionRow:e=>`Extension ${e} row`}};var p={available:"Update available",copiedLabel:"Copied!",tooltip:e=>`v${e} is available. Click to copy the install command.`,copyCommand:"npm i -g @skill-map/cli@latest",copiedTooltip:"Copied! Paste it in your terminal.",npmLinkUrl:"https://www.npmjs.com/package/@skill-map/cli",npmLinkTooltip:"Open on npm",npmLinkA11y:"Open the @skill-map/cli package page on npm",a11yLabel:e=>`Update available: version ${e}, click to copy the install command`,versionLabel:e=>`v${e}`,versionTooltip:e=>`skill-map CLI v${e}`,versionA11yLabel:e=>`Running version ${e}`,fetchFailed:e=>`UpdateCheckService: fetch failed (${e})`};var S=(()=>{class e{dataSource=o(l);status=r(null);isOutdated=s(()=>this.status()?.isOutdated===!0);latest=s(()=>this.status()?.latest??null);current=s(()=>this.status()?.current??null);async load(){try{let t=await this.dataSource.getUpdateStatus();this.status.set(t)}catch(t){let n=t instanceof Error?t.message:String(t);console.warn(p.fetchFailed(n))}}static \u0275fac=function(n){return new(n||e)};static \u0275prov=a({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var u={scanFailed:e=>`scan-trigger failed: ${e}`};var x=(()=>{class e{dataSource=o(l);loader=o(d);scanning=r(!1);scanError=r(null);async run(){if(!this.scanning()){this.scanning.set(!0),this.scanError.set(null);try{await this.dataSource.runScan(),await this.loader.load()}catch(t){let n=t instanceof c||t instanceof Error?t.message:String(t);this.scanError.set(n),console.warn(u.scanFailed(n))}finally{this.scanning.set(!1)}}}static \u0275fac=function(n){return new(n||e)};static \u0275prov=a({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();export{p as a,S as b,h as c,x as d};
|