@skill-map/cli 0.71.0 → 0.73.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.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]="81f53ca6-a8bf-5fc1-909d-ce926a83f056")}catch(e){}}();
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]="b28a958b-1d55-5195-b54e-2998b22e5818")}catch(e){}}();
4
4
  import { existsSync as existsSync34 } 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.71.0",
253
+ version: "0.73.0",
254
254
  description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
255
255
  license: "MIT",
256
256
  type: "module",
@@ -584,6 +584,7 @@ var CLAUDE_PLUGIN_ID = "claude";
584
584
  var CODEX_PLUGIN_ID = "codex";
585
585
  var ANTIGRAVITY_PLUGIN_ID = "antigravity";
586
586
  var AGENT_SKILLS_PLUGIN_ID = "agent-skills";
587
+ var OPENCODE_PLUGIN_ID = "opencode";
587
588
 
588
589
  // plugins/claude/providers/claude/index.ts
589
590
  var RESERVED_SLASH_NAMES = [
@@ -1185,15 +1186,17 @@ var agentSkillsProvider = {
1185
1186
  // wins when no vendor marker is present. Provider-owned.
1186
1187
  detect: { markers: [".agents"], fallback: true },
1187
1188
  // Authoring target for `sm tutorial`: the open standard discovers skills
1188
- // under `.agents/skills/<name>/SKILL.md`. `aka` lists Antigravity, which
1189
- // shares this territory AND the BASIC tutorial track (skill + markdown,
1190
- // references), so a tester on Antigravity scaffolds here. OpenAI Codex
1189
+ // under `.agents/skills/<name>/SKILL.md`. `aka` lists Antigravity and
1190
+ // OpenCode, which share this territory AND the BASIC tutorial track (skill +
1191
+ // markdown, references), so a tester on either scaffolds here. OpenCode is
1192
+ // rich-capable (`agent` + `command` kinds) but is deliberately taught on the
1193
+ // basic track via the shared open standard. OpenAI Codex
1191
1194
  // also reads `.agents/skills/`, but Codex is a RICH-track lens (it has the
1192
1195
  // `agent` kind, plus `$`-skill invocation and `@`-file references), so
1193
1196
  // advertising it under this basic row
1194
1197
  // would hand it the wrong book; Codex is surfaced once a Codex rich
1195
1198
  // scaffold target lands. `aka` is display-only, `--for` matches the id.
1196
- scaffold: { skillDir: ".agents/skills", aka: ["Google's Antigravity"] },
1199
+ scaffold: { skillDir: ".agents/skills", aka: ["Google's Antigravity", "OpenCode"] },
1197
1200
  read: COMMONS_READ,
1198
1201
  kinds: COMMONS_KINDS,
1199
1202
  resolution: COMMONS_RESOLUTION,
@@ -1559,6 +1562,186 @@ var dollarSkillExtractor = {
1559
1562
  }
1560
1563
  };
1561
1564
 
1565
+ // plugins/opencode/providers/opencode/schemas/agent.schema.json
1566
+ var agent_schema_default3 = {
1567
+ $schema: "https://json-schema.org/draft/2020-12/schema",
1568
+ $id: "https://skill-map.ai/providers/opencode/v1/frontmatter/agent.schema.json",
1569
+ title: "FrontmatterOpenCodeAgent",
1570
+ description: "Frontmatter shape for nodes classified as `agent` by the OpenCode Provider. OpenCode agents live as markdown files under `.opencode/agent/<name>.md` (https://opencode.ai/docs/agents); the markdown body is the agent prompt. There is NO `name` field, the filename stem is the handle. Field set mirrors OpenCode's documented agent frontmatter; `additionalProperties: true` lets any other inherited key flow through unchanged.",
1571
+ allOf: [
1572
+ { $ref: "https://skill-map.ai/spec/v0/frontmatter/base.schema.json" }
1573
+ ],
1574
+ type: "object",
1575
+ additionalProperties: true,
1576
+ required: ["description"],
1577
+ properties: {
1578
+ description: {
1579
+ type: "string",
1580
+ description: "What the agent does and when to use it. OpenCode surfaces this when selecting a subagent; skill-map mirrors it in the card. Required: a description-less agent cannot be meaningfully selected."
1581
+ },
1582
+ mode: {
1583
+ type: "string",
1584
+ enum: ["all", "primary", "subagent"],
1585
+ description: "How the agent runs: `primary` (a top-level agent the user can switch to), `subagent` (invoked by another agent via the `task` tool), or `all`. Inherits OpenCode's default when omitted."
1586
+ },
1587
+ model: {
1588
+ type: "string",
1589
+ description: "Model the agent runs against, in OpenCode's `provider/model` form (e.g. `anthropic/claude-opus-4-8`). Inherits the parent's model when omitted."
1590
+ },
1591
+ permission: {
1592
+ type: "object",
1593
+ additionalProperties: true,
1594
+ description: "Per-tool permission policy. Each documented tool key maps to `allow`, `ask`, or `deny`; `bash` may instead be a map of command globs to policies. Any tool omitted inherits OpenCode's default.",
1595
+ properties: {
1596
+ edit: { type: "string", enum: ["allow", "ask", "deny"] },
1597
+ bash: {
1598
+ description: "Either a blanket policy or a per-command-glob map.",
1599
+ oneOf: [
1600
+ { type: "string", enum: ["allow", "ask", "deny"] },
1601
+ {
1602
+ type: "object",
1603
+ additionalProperties: { type: "string", enum: ["allow", "ask", "deny"] }
1604
+ }
1605
+ ]
1606
+ },
1607
+ webfetch: { type: "string", enum: ["allow", "ask", "deny"] }
1608
+ }
1609
+ }
1610
+ }
1611
+ };
1612
+
1613
+ // plugins/opencode/providers/opencode/schemas/command.schema.json
1614
+ var command_schema_default2 = {
1615
+ $schema: "https://json-schema.org/draft/2020-12/schema",
1616
+ $id: "https://skill-map.ai/providers/opencode/v1/frontmatter/command.schema.json",
1617
+ title: "FrontmatterOpenCodeCommand",
1618
+ description: "Frontmatter shape for nodes classified as `command` by the OpenCode Provider. OpenCode custom commands live as markdown files under `.opencode/commands/<name>.md` (https://opencode.ai/docs/commands); the markdown body is the command template and the filename stem is the command name (invoked `/<name>`). No required fields beyond the base (OpenCode treats the frontmatter as optional metadata); `additionalProperties: true` lets inherited keys flow through unchanged.",
1619
+ allOf: [
1620
+ { $ref: "https://skill-map.ai/spec/v0/frontmatter/base.schema.json" }
1621
+ ],
1622
+ type: "object",
1623
+ additionalProperties: true,
1624
+ properties: {
1625
+ description: {
1626
+ type: "string",
1627
+ description: "Brief explanation of the command's purpose, shown in OpenCode's slash-command picker."
1628
+ },
1629
+ agent: {
1630
+ type: "string",
1631
+ description: "Optional agent this command runs under (matches an `.opencode/agent/<name>` handle)."
1632
+ },
1633
+ model: {
1634
+ type: "string",
1635
+ description: "Optional model override for this command, in OpenCode's `provider/model` form."
1636
+ }
1637
+ }
1638
+ };
1639
+
1640
+ // plugins/opencode/providers/opencode/index.ts
1641
+ var OPENCODE_RESERVED_SLASH_VERBS = [
1642
+ // Inherited open-standard base (universal cross-agent slash commands).
1643
+ ...COMMONS_RESERVED_NAMES["skill"] ?? [],
1644
+ // OpenCode-specific built-in verbs (`/help` already lives in the base).
1645
+ "init",
1646
+ "redo",
1647
+ "share",
1648
+ "undo"
1649
+ ];
1650
+ var opencodeProvider = {
1651
+ id: "opencode",
1652
+ pluginId: OPENCODE_PLUGIN_ID,
1653
+ kind: "provider",
1654
+ description: "Classifies `.opencode/agent/*.md` as OpenCode agents and `.opencode/commands/*.md` as OpenCode commands (its own kinds), and skills under `.opencode/skills/`, `.claude/skills/`, and `.agents/skills/` (the project-level homes OpenCode reads).",
1655
+ // Provider identity for the active-lens dropdown, the topbar lens chip, and
1656
+ // the per-node provider chip. OpenCode has no strong model vendor (it is
1657
+ // model-agnostic), so the label is the bare product name, NOT a possessive
1658
+ // `<Vendor>'s <product>` like the other vendor lenses. Cyan, distinct from
1659
+ // codex green, antigravity violet, and the agent-skills slate.
1660
+ presentation: {
1661
+ label: "OpenCode",
1662
+ color: "#0891b2",
1663
+ colorDark: "#22d3ee",
1664
+ // OpenCode invokes its custom commands with `/<name>`; the palette paints
1665
+ // this as the `invokes` edge glyph under the opencode lens. (Skills are
1666
+ // loaded by OpenCode's native `skill` tool, not a body sigil.)
1667
+ invocationSigil: "/"
1668
+ },
1669
+ // Auto-detect marker: a `.opencode/` directory marks an OpenCode project.
1670
+ detect: { markers: [".opencode"] },
1671
+ // Vendor lens: gated to the active lens. OpenCode only resolves its own
1672
+ // territory (plus the Claude-compat / open-standard skill homes it reads).
1673
+ // Gating keeps the walker from claiming OpenCode territory under another
1674
+ // lens, where the OpenCode runtime would never resolve it anyway, and keeps
1675
+ // the `.claude/skills/` claim here from colliding with the claude lens.
1676
+ gatedByActiveLens: true,
1677
+ // Beta: ships enabled, auto-detects `.opencode/`, selectable as the active
1678
+ // lens, with a maturity badge. Same posture as codex / antigravity, since
1679
+ // the lens is freshly landed. Promote to `stable` (drop the field) once it
1680
+ // has real-world mileage.
1681
+ stability: "beta",
1682
+ // Single read rule: all three families are `.md` + YAML frontmatter, so one
1683
+ // `COMMONS_READ` pass suffices (no multi-rule `read` like codex, which mixes
1684
+ // `.toml`). `classify()` below routes each path to its kind.
1685
+ read: COMMONS_READ,
1686
+ kinds: {
1687
+ agent: {
1688
+ schema: "./schemas/agent.schema.json",
1689
+ schemaJson: agent_schema_default3,
1690
+ ui: {
1691
+ label: "Agents",
1692
+ // Cross-provider agent vocabulary: same blue as Claude's `agent` kind,
1693
+ // so an agent paints the same regardless of which lens sourced it.
1694
+ color: "#3b82f6",
1695
+ colorDark: "#60a5fa",
1696
+ icon: { kind: "pi", id: "pi-user" }
1697
+ },
1698
+ // No `name` frontmatter field: the filename stem
1699
+ // (`.opencode/agent/<name>.md`) is the handle.
1700
+ identifiers: ["filename-basename"]
1701
+ },
1702
+ command: {
1703
+ schema: "./schemas/command.schema.json",
1704
+ schemaJson: command_schema_default2,
1705
+ ui: {
1706
+ label: "Commands",
1707
+ // Cross-provider command vocabulary: same amber (and icon) as Claude's
1708
+ // `command` kind and Antigravity's `workflow` kind.
1709
+ color: "#f59e0b",
1710
+ colorDark: "#fbbf24",
1711
+ icon: { kind: "svg", path: "M4 17 L10 11 L4 5 M12 19 L20 19" }
1712
+ },
1713
+ // The filename stem is the command name (`/<name>`); no `name` field.
1714
+ identifiers: ["filename-basename"]
1715
+ },
1716
+ // Open-standard `skill` kind, inherited from `agent-skills` by manifest
1717
+ // composition (same schema + green visuals every adopter shares).
1718
+ // `classify()` routes the three skill homes OpenCode reads into this kind.
1719
+ ...COMMONS_KINDS
1720
+ },
1721
+ // `/<name>` slash invocations resolve to commands ONLY: OpenCode reserves the
1722
+ // slash for its custom commands, and loads skills via its native `skill` tool
1723
+ // (no `/`-invocation), so `invokes` does NOT target `skill` here (unlike
1724
+ // claude). Overrides the open-standard default (`invokes: ['skill']`). The
1725
+ // `core/slash-command` extractor is authorised under the opencode lens (its
1726
+ // precondition lists `opencode`) so `/deploy` in a body emits the link.
1727
+ resolution: { invokes: ["command"] },
1728
+ // Reserved built-in slash commands, applied to the `command` kind (the only
1729
+ // `/`-invocable OpenCode kind: skills are tool-loaded, not slash-invoked, so
1730
+ // a skill named after a built-in cannot be shadowed through the slash
1731
+ // channel and is deliberately NOT reserved).
1732
+ reservedNames: {
1733
+ command: OPENCODE_RESERVED_SLASH_VERBS
1734
+ },
1735
+ classify(path) {
1736
+ const lower = path.toLowerCase();
1737
+ if (/^\.opencode\/agent\/[^/]+\.md$/.test(lower)) return "agent";
1738
+ if (/^\.opencode\/commands\/[^/]+\.md$/.test(lower)) return "command";
1739
+ if (/^\.opencode\/skills\/[^/]+\/skill\.md$/.test(lower)) return "skill";
1740
+ if (/^\.claude\/skills\/[^/]+\/skill\.md$/.test(lower)) return "skill";
1741
+ return classifyCommonsPath(path);
1742
+ }
1743
+ };
1744
+
1562
1745
  // plugins/core/providers/core-markdown/schemas/markdown.schema.json
1563
1746
  var markdown_schema_default = {
1564
1747
  $schema: "https://json-schema.org/draft/2020-12/schema",
@@ -2009,7 +2192,7 @@ var slashCommandExtractor = {
2009
2192
  id: ID9,
2010
2193
  pluginId: CORE_PLUGIN_ID,
2011
2194
  kind: "extractor",
2012
- description: "Turns `/command` invocations in a node's body into arrows that point at the resolved slash command, skill, or workflow, using the `/`-grammar shared by Claude and Antigravity. Example: `/deploy` in the body draws an arrow to the `deploy` command.",
2195
+ description: "Turns `/command` invocations in a node's body into arrows that point at the resolved slash command, skill, or workflow, using the `/`-grammar shared by Claude, Antigravity, and OpenCode. Example: `/deploy` in the body draws an arrow to the `deploy` command.",
2013
2196
  scope: "body",
2014
2197
  // Also authorised under the antigravity lens, which shares the `/command`
2015
2198
  // grammar: a workflow / skill / AGENTS.md body's `/name` tokens resolve to
@@ -2019,7 +2202,13 @@ var slashCommandExtractor = {
2019
2202
  // `/init`, ...) and invokes user skills with `$` instead (parsed by the
2020
2203
  // codex `dollar-skill` extractor). A lens that declares no `invokes`
2021
2204
  // resolution leaves the signals unresolved (no spurious edges).
2022
- precondition: { provider: ["claude", "antigravity"] },
2205
+ //
2206
+ // Also authorised under the opencode lens: OpenCode invokes its custom
2207
+ // `.opencode/commands/<name>.md` with `/<name>` (the opencode provider maps
2208
+ // `invokes: ['command']`, since OpenCode loads skills via its native `skill`
2209
+ // tool rather than the slash channel). Additive: claude / antigravity runs
2210
+ // are unchanged.
2211
+ precondition: { provider: ["claude", "antigravity", "opencode"] },
2023
2212
  extract(ctx) {
2024
2213
  const seen = /* @__PURE__ */ new Set();
2025
2214
  const body = stripCodeAndHtml(ctx.body);
@@ -4650,6 +4839,7 @@ var toolsCounterExtractor2 = { ...toolsCounterExtractor, pluginId: "claude", ver
4650
4839
  var antigravityProvider2 = { ...antigravityProvider, pluginId: "antigravity", version: VERSION };
4651
4840
  var codexProvider2 = { ...codexProvider, pluginId: "codex", version: VERSION };
4652
4841
  var dollarSkillExtractor2 = { ...dollarSkillExtractor, pluginId: "codex", version: VERSION };
4842
+ var opencodeProvider2 = { ...opencodeProvider, pluginId: "opencode", version: VERSION };
4653
4843
  var agentSkillsProvider2 = { ...agentSkillsProvider, pluginId: "agent-skills", version: VERSION };
4654
4844
  var coreMarkdownProvider2 = { ...coreMarkdownProvider, pluginId: "core", version: VERSION };
4655
4845
  var atFileExtractor2 = { ...atFileExtractor, pluginId: "core", version: VERSION };
@@ -4691,7 +4881,7 @@ var builtInPlugins = [
4691
4881
  },
4692
4882
  {
4693
4883
  id: "antigravity",
4694
- description: "Google Antigravity CLI platform integration (replaces the retired Gemini CLI). Classifies Antigravity workflows under `.agent/workflows/*.md` (its own kind) and adopts the open-standard `.agents/skills/` layout for skills; contributes the Antigravity runtime identity and reserved built-in names.",
4884
+ description: "Google Antigravity CLI platform integration (replaces the retired Gemini CLI). Classifies workflows under `.agent/workflows/`, plus the open-standard `.agents/skills/` layout.",
4695
4885
  extensions: [
4696
4886
  antigravityProvider2
4697
4887
  ]
@@ -4704,6 +4894,13 @@ var builtInPlugins = [
4704
4894
  dollarSkillExtractor2
4705
4895
  ]
4706
4896
  },
4897
+ {
4898
+ id: "opencode",
4899
+ description: "OpenCode CLI platform integration (open-source, model-agnostic terminal coding agent). Classifies agents and commands under `.opencode/`, plus the skill homes it reads.",
4900
+ extensions: [
4901
+ opencodeProvider2
4902
+ ]
4903
+ },
4707
4904
  {
4708
4905
  id: "agent-skills",
4709
4906
  description: "Open-standard Agent Skills layout. Classifies skills under the vendor-neutral path `.agents/skills/<name>/SKILL.md` (adopted by Anthropic, OpenAI, Google). See agentskills.io.",
@@ -5442,6 +5639,7 @@ var BUILT_IN_PLUGIN_IDS = /* @__PURE__ */ new Set([
5442
5639
  "claude",
5443
5640
  "antigravity",
5444
5641
  "codex",
5642
+ "opencode",
5445
5643
  "agent-skills",
5446
5644
  "core"
5447
5645
  ]);
@@ -5651,6 +5849,7 @@ var defaults_default = {
5651
5849
  schemaVersion: 1,
5652
5850
  allowEditSmFiles: false,
5653
5851
  allowSidecarWriters: true,
5852
+ tutorialReminderDismissed: false,
5654
5853
  tokenizer: "cl100k_base",
5655
5854
  roots: [],
5656
5855
  ignore: [],
@@ -5682,6 +5881,7 @@ var defaults_default = {
5682
5881
  // kernel/config/loader.ts
5683
5882
  var PROJECT_LOCAL_ONLY_KEYS = /* @__PURE__ */ new Set([
5684
5883
  "allowEditSmFiles",
5884
+ "tutorialReminderDismissed",
5685
5885
  "scan.referencePaths",
5686
5886
  "pluginTrust.projectEnabled"
5687
5887
  ]);
@@ -22181,6 +22381,7 @@ var BUILT_IN_PLUGIN_PRESENTATION_ORDER = [
22181
22381
  "claude",
22182
22382
  "antigravity",
22183
22383
  "codex",
22384
+ "opencode",
22184
22385
  "agent-skills"
22185
22386
  ];
22186
22387
  function sortPluginsForPresentation(plugins) {
@@ -26918,6 +27119,7 @@ var SERVER_TEXTS = {
26918
27119
  projectPrefsBodyEmpty: "Request body must contain `allowSidecarWriters`, a `scan` block with `referencePaths`, and/or a `pluginTrust` block with `projectEnabled`.",
26919
27120
  projectPrefsConfirmNotBoolean: "`confirm` must be a boolean.",
26920
27121
  projectPrefsSidecarWritersNotBoolean: "`allowSidecarWriters` must be a boolean.",
27122
+ projectPrefsReminderNotBoolean: "`tutorialReminderDismissed` must be a boolean.",
26921
27123
  projectPrefsTrustNotObject: '`pluginTrust` must be an object (e.g. `{"pluginTrust": {"projectEnabled": true}}`).',
26922
27124
  projectPrefsTrustEnabledNotBoolean: "`pluginTrust.projectEnabled` must be a boolean.",
26923
27125
  // Server-stderr advisory after `PATCH /api/project-preferences`
@@ -28971,7 +29173,11 @@ function buildEnvelope3(deps) {
28971
29173
  cwd,
28972
29174
  default: false
28973
29175
  }) ?? false
28974
- }
29176
+ },
29177
+ tutorialReminderDismissed: readConfigValue("tutorialReminderDismissed", {
29178
+ cwd,
29179
+ default: false
29180
+ }) ?? false
28975
29181
  };
28976
29182
  }
28977
29183
  async function applyPatch3(deps, body) {
@@ -28979,8 +29185,11 @@ async function applyPatch3(deps, body) {
28979
29185
  const policyChanged = typeof body.allowSidecarWriters === "boolean" && writeSidecarWritersPolicy(body.allowSidecarWriters, cwd);
28980
29186
  const scan = applyScanWrites(body, cwd);
28981
29187
  const trustChanged = applyTrustWrite(body, cwd);
29188
+ const reminderChanged = applyTutorialReminderWrite(body, cwd);
28982
29189
  if (policyChanged || scan.mutated) await maybeRestartWatcher2(deps);
28983
- if (policyChanged || scan.attempted || trustChanged) deps.configService.reload();
29190
+ if (policyChanged || scan.attempted || trustChanged || reminderChanged) {
29191
+ deps.configService.reload();
29192
+ }
28984
29193
  }
28985
29194
  function applyTrustWrite(body, cwd) {
28986
29195
  const next = body.pluginTrust?.projectEnabled;
@@ -29005,6 +29214,23 @@ function applyTrustWrite(body, cwd) {
29005
29214
  log.warn(tx(SERVER_TEXTS.projectPrefsTrustSet, { value: String(next) }));
29006
29215
  return true;
29007
29216
  }
29217
+ function applyTutorialReminderWrite(body, cwd) {
29218
+ const next = body.tutorialReminderDismissed;
29219
+ if (next === void 0) return false;
29220
+ const before = readConfigValue("tutorialReminderDismissed", { cwd, default: false }) ?? false;
29221
+ if (before === next) return false;
29222
+ try {
29223
+ writeConfigValue("tutorialReminderDismissed", next, { target: "project-local", cwd });
29224
+ } catch (err) {
29225
+ throw new HTTPException13(400, {
29226
+ message: tx(SERVER_TEXTS.projectPrefsPersistFailed, {
29227
+ key: "tutorialReminderDismissed",
29228
+ message: formatErrorMessage(err)
29229
+ })
29230
+ });
29231
+ }
29232
+ return true;
29233
+ }
29008
29234
  function applyScanWrites(body, cwd) {
29009
29235
  const writes = collectWrites(body);
29010
29236
  if (writes.length === 0) return { attempted: false, mutated: false };
@@ -29158,11 +29384,13 @@ var PATCH_BODY_SCHEMA3 = {
29158
29384
  anyOf: [
29159
29385
  { required: ["allowSidecarWriters"] },
29160
29386
  { required: ["scan"] },
29161
- { required: ["pluginTrust"] }
29387
+ { required: ["pluginTrust"] },
29388
+ { required: ["tutorialReminderDismissed"] }
29162
29389
  ],
29163
29390
  properties: {
29164
29391
  confirm: { type: "boolean" },
29165
29392
  allowSidecarWriters: { type: "boolean" },
29393
+ tutorialReminderDismissed: { type: "boolean" },
29166
29394
  scan: {
29167
29395
  type: "object",
29168
29396
  additionalProperties: false,
@@ -29197,6 +29425,7 @@ var parsePatchBody4 = makeBodyValidator(PATCH_BODY_SCHEMA3, {
29197
29425
  "/pluginTrust/projectEnabled:type:boolean": SERVER_TEXTS.projectPrefsTrustEnabledNotBoolean,
29198
29426
  "/confirm:type:boolean": SERVER_TEXTS.projectPrefsConfirmNotBoolean,
29199
29427
  "/allowSidecarWriters:type:boolean": SERVER_TEXTS.projectPrefsSidecarWritersNotBoolean,
29428
+ "/tutorialReminderDismissed:type:boolean": SERVER_TEXTS.projectPrefsReminderNotBoolean,
29200
29429
  "/scan/referencePaths:type:array": tx(SERVER_TEXTS.projectPrefsListNotArray, { key: "scan.referencePaths" }),
29201
29430
  "/scan/referencePaths/*:type:string": tx(SERVER_TEXTS.projectPrefsListEntryNotString, { key: "scan.referencePaths" }),
29202
29431
  "/scan/referencePaths/*:pattern": SERVER_TEXTS.projectPrefsEntryHasComma
@@ -33161,4 +33390,4 @@ function resolveBareDefault() {
33161
33390
  process.exit(ExitCode.Error);
33162
33391
  }
33163
33392
  //# sourceMappingURL=cli.js.map
33164
- //# debugId=81f53ca6-a8bf-5fc1-909d-ce926a83f056
33393
+ //# debugId=b28a958b-1d55-5195-b54e-2998b22e5818
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]="44976d76-8c48-5b39-862d-641f0e3be027")}catch(e){}}();
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]="302a8177-c654-50bd-828f-f658a568e578")}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.71.0",
105
+ version: "0.73.0",
106
106
  description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
107
107
  license: "MIT",
108
108
  type: "module",
@@ -4261,4 +4261,4 @@ export {
4261
4261
  runScanWithRenames
4262
4262
  };
4263
4263
  //# sourceMappingURL=index.js.map
4264
- //# debugId=44976d76-8c48-5b39-862d-641f0e3be027
4264
+ //# debugId=302a8177-c654-50bd-828f-f658a568e578
@@ -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]="7667ff07-bdd8-541a-b813-e01e201964f0")}catch(e){}}();
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]="4dbe72ce-1485-5a29-adf0-bfb088a9bad4")}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.71.0",
105
+ version: "0.73.0",
106
106
  description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
107
107
  license: "MIT",
108
108
  type: "module",
@@ -4261,4 +4261,4 @@ export {
4261
4261
  runScanWithRenames
4262
4262
  };
4263
4263
  //# sourceMappingURL=index.js.map
4264
- //# debugId=7667ff07-bdd8-541a-b813-e01e201964f0
4264
+ //# debugId=4dbe72ce-1485-5a29-adf0-bfb088a9bad4