@skill-map/cli 0.71.0 → 0.72.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 +2 -2
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/manifest.json +1 -0
- package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/codex/shared/CLAUDE.md +1 -0
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +4 -1
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-daily.md +46 -2
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-fundamentals.md +2 -2
- package/dist/cli/tutorial/sm-tutorial/references/part-basic-kickoff.md +7 -7
- package/dist/cli/tutorial/sm-tutorial/scripts/fixtures.js +6 -3
- package/dist/cli.js +202 -5
- package/dist/index.js +3 -3
- package/dist/kernel/index.js +3 -3
- package/dist/ui/chunk-GKN3HN4R.js +3 -0
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-GY4PAVQW.js → main-Z2OYMXNS.js} +1 -1
- package/package.json +2 -2
- package/dist/ui/chunk-CK4C2IIP.js +0 -3
- /package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/agent-skills/shared/{CLAUDE.md → README.md} +0 -0
- /package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/{shared → providers/claude/shared}/CLAUDE.md +0 -0
|
@@ -276,8 +276,8 @@ the `__PROVIDER__` token and skip kinds the provider does not claim.
|
|
|
276
276
|
`rm -rf .skill-map`.
|
|
277
277
|
2. Lay the portfolio boot (Express skeleton + handbook):
|
|
278
278
|
`fixtures.js lay portfolio --only "AGENTS.md,server.js,package.json,public/index.html" --provider <provider> --lang <lang>`.
|
|
279
|
-
The harness members (
|
|
280
|
-
laid by their own chapters.
|
|
279
|
+
The harness members (the entry pointer, `content-editor`, the docs)
|
|
280
|
+
are laid by their own chapters.
|
|
281
281
|
|
|
282
282
|
The tester runs `sm init` in the first chapter. (Later campaign
|
|
283
283
|
parts use `preflight: seed`; `portfolio-init` is Part 1's flavour,
|
package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/providers/codex/shared/CLAUDE.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -209,7 +209,7 @@ parts:
|
|
|
209
209
|
- id: setup ; title: "Make it yours and bring it up" ; est_min: 4
|
|
210
210
|
- id: add-page ; title: "Add a page with your skill" ; est_min: 3
|
|
211
211
|
- id: broken-ref ; title: "A rename breaks a link" ; est_min: 3
|
|
212
|
-
- id: reserved ; title: "A reserved name collides" ; est_min:
|
|
212
|
+
- id: reserved ; title: "A reserved name collides" ; est_min: 4
|
|
213
213
|
- id: publish ; title: "Ship it: run the publish skill for real" ; est_min: 3
|
|
214
214
|
- id: stability ; title: "Set a node's stability (and the `.sm` sidecar)" ; est_min: 3
|
|
215
215
|
- id: golive ; title: "Your website, live next to the graph" ; est_min: 3
|
|
@@ -12,8 +12,11 @@ model; the per-chapter invocations live in each `part-*.md`.
|
|
|
12
12
|
fixtures-data/
|
|
13
13
|
manifest.json sets, footprints, edits, seeds, providerToken, langs
|
|
14
14
|
sets/<set>/
|
|
15
|
-
shared/ lang-invariant files (code: server.js, package.json
|
|
15
|
+
shared/ lang-invariant files (code: server.js, package.json)
|
|
16
16
|
en/ es/ one tree per language (files with translatable prose)
|
|
17
|
+
providers/<provider>/ per-lens overlay (shared/ + en/ es/); e.g. the root
|
|
18
|
+
entry pointer is CLAUDE.md on claude/codex,
|
|
19
|
+
README.md on agent-skills/antigravity
|
|
17
20
|
edits/<edit-id>/
|
|
18
21
|
en/ es/ append fragments (one file per fragment)
|
|
19
22
|
```
|
|
@@ -138,7 +138,7 @@ mv docs/DEPLOY.md docs/DEPLOYMENT.md
|
|
|
138
138
|
Wait for confirmation. The harness MUST be clean again before Act C. Mark
|
|
139
139
|
`broken-ref`: done. Auto-advance to `reserved`.
|
|
140
140
|
|
|
141
|
-
## Chapter `reserved` - A reserved name collides (~
|
|
141
|
+
## Chapter `reserved` - A reserved name collides (~4 min)
|
|
142
142
|
|
|
143
143
|
**Preparation**: `Write` `<provider_dir>/model/SKILL.md`:
|
|
144
144
|
```markdown
|
|
@@ -169,7 +169,51 @@ The watcher picks up the new skill. Tell the tester:
|
|
|
169
169
|
>
|
|
170
170
|
> See the `model` node land clean, with no warning?
|
|
171
171
|
|
|
172
|
-
Wait for confirmation.
|
|
172
|
+
Wait for confirmation.
|
|
173
|
+
|
|
174
|
+
**Beat 2, prove the vendor exception by switching the lens (hands-on).** First
|
|
175
|
+
`Write` `<provider_dir>/goal/SKILL.md` (a skill named after the Antigravity
|
|
176
|
+
built-in verb `goal`):
|
|
177
|
+
|
|
178
|
+
```markdown
|
|
179
|
+
---
|
|
180
|
+
name: goal
|
|
181
|
+
description: |
|
|
182
|
+
Captures a goal for the site and tracks it to done.
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
# goal
|
|
186
|
+
|
|
187
|
+
Notes a goal and checks it off when shipped.
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
The watcher adds it clean (on your open-standard lens `goal` is just a name). The
|
|
191
|
+
agent does NOT touch settings (Inviolable rule #2); the tester drives the
|
|
192
|
+
Settings UI. Tell the tester:
|
|
193
|
+
|
|
194
|
+
> Now let's make that warning real by switching the lens. I added one more skill,
|
|
195
|
+
> `goal`, an Antigravity built-in verb. On your open standard it landed clean,
|
|
196
|
+
> same as `model`.
|
|
197
|
+
>
|
|
198
|
+
> Open **Settings** (the sliders icon, top right) and the **Project** tab. Find
|
|
199
|
+
> **Active provider** and switch it from the open standard to **Google's
|
|
200
|
+
> Antigravity**, then confirm. skill-map clears the old lens's scan, so the Map
|
|
201
|
+
> goes quiet; click the **refresh** button (the sync icon in the topbar) to
|
|
202
|
+
> re-scan under the new lens.
|
|
203
|
+
>
|
|
204
|
+
> Watch the Map: `goal` now wears a **`name-reserved`** warning (under Antigravity
|
|
205
|
+
> `/goal` is a built-in command, so your skill would be shadowed), while `model`
|
|
206
|
+
> stays clean (it is not one of Antigravity's verbs). Same files, different lens:
|
|
207
|
+
> the lens decides what is reserved.
|
|
208
|
+
>
|
|
209
|
+
> Now switch **Active provider** back to the open standard, confirm, and click
|
|
210
|
+
> refresh once more. The warning on `goal` clears, you are back on the neutral
|
|
211
|
+
> standard that reserves nothing.
|
|
212
|
+
>
|
|
213
|
+
> Did the warning appear under Antigravity and clear when you switched back?
|
|
214
|
+
|
|
215
|
+
Wait for confirmation. The lens MUST be back on the open standard before
|
|
216
|
+
continuing. Mark `reserved`: done. Auto-advance to `publish`.
|
|
173
217
|
|
|
174
218
|
---
|
|
175
219
|
|
|
@@ -128,8 +128,8 @@ You edit `notes/todo.md` so it becomes the **hub** that points to the other
|
|
|
128
128
|
nodes. On this lens there is exactly one connector: the **markdown reference**.
|
|
129
129
|
A bullet links to another file with `[label](relative/path)`; skill-map reads
|
|
130
130
|
that as a `references` link and draws an arrow when the target resolves to a
|
|
131
|
-
real file. (
|
|
132
|
-
|
|
131
|
+
real file. (Wiring everything with file links keeps the harness portable: a
|
|
132
|
+
reference resolves the same way on any runtime that speaks the open standard.)
|
|
133
133
|
|
|
134
134
|
Apply the hub bullets (content lives in `fixtures-data/`). The edit appends
|
|
135
135
|
three bullets after the `# Pending` heading. Backstage (silent):
|
|
@@ -60,13 +60,13 @@ Wait for confirmation. Mark `kickoff`: done.
|
|
|
60
60
|
Tell the tester to create the file themselves (their project's file, Inviolable
|
|
61
61
|
rule #2):
|
|
62
62
|
|
|
63
|
-
> Create a file called `
|
|
63
|
+
> Create a file called `README.md` at the project root with exactly this content:
|
|
64
64
|
>
|
|
65
65
|
> ```markdown
|
|
66
66
|
> See the [handbook](AGENTS.md).
|
|
67
67
|
> ```
|
|
68
68
|
>
|
|
69
|
-
> Save it. Watch the map: a new `
|
|
69
|
+
> Save it. Watch the map: a new `README.md` node appears with a `references`
|
|
70
70
|
> connector pointing at `AGENTS.md`, solid at 1.00. The markdown link
|
|
71
71
|
> `[handbook](AGENTS.md)` is a file pointer (the same kind of reference you met
|
|
72
72
|
> in the prologue), and since the handbook is right there the link resolves with
|
|
@@ -117,7 +117,7 @@ Tell the tester:
|
|
|
117
117
|
> front of you:
|
|
118
118
|
>
|
|
119
119
|
> - **skill**: `content-editor` (does work on your behalf).
|
|
120
|
-
> - **markdown**: `AGENTS.md`, `
|
|
120
|
+
> - **markdown**: `AGENTS.md`, `README.md`, the two docs (plain notes and
|
|
121
121
|
> manuals).
|
|
122
122
|
>
|
|
123
123
|
> Your lens authors exactly these two; Claude and Codex projects add `agent` and
|
|
@@ -188,10 +188,10 @@ Continue the tester message:
|
|
|
188
188
|
> - `publish -> content-editor` (the `[content-editor](../content-editor/SKILL.md)` link)
|
|
189
189
|
> - `publish -> docs/DEPLOY.md` (the `[deploy runbook](../../../docs/DEPLOY.md)` link)
|
|
190
190
|
>
|
|
191
|
-
> One node, three connectors, all references.
|
|
192
|
-
>
|
|
193
|
-
>
|
|
194
|
-
>
|
|
191
|
+
> One node, three connectors, all references. Wiring the whole harness with
|
|
192
|
+
> markdown file links keeps it portable: each reference resolves the same way on
|
|
193
|
+
> any runtime that speaks the open standard. The harness is starting to look
|
|
194
|
+
> like a real graph.
|
|
195
195
|
>
|
|
196
196
|
> 💡 Tip: to tidy the layout, click **Re-arrange layout** in the map toolbar.
|
|
197
197
|
>
|
|
@@ -78,7 +78,10 @@ function writeFileEnsuring(abs, content) {
|
|
|
78
78
|
* tier, then the per-provider overlay (`providers/<provider>/{shared,<lang>}/`).
|
|
79
79
|
* The overlay carries the skill-shaped variants of nodes a lens renders
|
|
80
80
|
* differently (e.g. the `content-editor` agent becomes a skill on
|
|
81
|
-
* agent-skills)
|
|
81
|
+
* agent-skills). claude is mostly the base shape, but it still carries a tiny
|
|
82
|
+
* overlay for the entry-pointer file: the portfolio root pointer is `CLAUDE.md`
|
|
83
|
+
* (claude/codex overlays) vs `README.md` (agent-skills / antigravity), so it
|
|
84
|
+
* cannot live in the universal base `shared/` tier.
|
|
82
85
|
*/
|
|
83
86
|
function laySet(manifest, set, o, only = null) {
|
|
84
87
|
const { kinds } = pdirAndKinds(o);
|
|
@@ -297,5 +300,5 @@ function main() {
|
|
|
297
300
|
}
|
|
298
301
|
|
|
299
302
|
main();
|
|
300
|
-
!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]="
|
|
301
|
-
//# debugId=
|
|
303
|
+
!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]="b7c7dad8-e6ce-5918-a25b-41b4e2d13a4c")}catch(e){}}();
|
|
304
|
+
//# debugId=b7c7dad8-e6ce-5918-a25b-41b4e2d13a4c
|
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]="2c7d4927-4422-59d2-a37a-59fed3a2ec80")}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.
|
|
253
|
+
version: "0.72.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 = [
|
|
@@ -1559,6 +1560,186 @@ var dollarSkillExtractor = {
|
|
|
1559
1560
|
}
|
|
1560
1561
|
};
|
|
1561
1562
|
|
|
1563
|
+
// plugins/opencode/providers/opencode/schemas/agent.schema.json
|
|
1564
|
+
var agent_schema_default3 = {
|
|
1565
|
+
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
1566
|
+
$id: "https://skill-map.ai/providers/opencode/v1/frontmatter/agent.schema.json",
|
|
1567
|
+
title: "FrontmatterOpenCodeAgent",
|
|
1568
|
+
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.",
|
|
1569
|
+
allOf: [
|
|
1570
|
+
{ $ref: "https://skill-map.ai/spec/v0/frontmatter/base.schema.json" }
|
|
1571
|
+
],
|
|
1572
|
+
type: "object",
|
|
1573
|
+
additionalProperties: true,
|
|
1574
|
+
required: ["description"],
|
|
1575
|
+
properties: {
|
|
1576
|
+
description: {
|
|
1577
|
+
type: "string",
|
|
1578
|
+
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."
|
|
1579
|
+
},
|
|
1580
|
+
mode: {
|
|
1581
|
+
type: "string",
|
|
1582
|
+
enum: ["all", "primary", "subagent"],
|
|
1583
|
+
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."
|
|
1584
|
+
},
|
|
1585
|
+
model: {
|
|
1586
|
+
type: "string",
|
|
1587
|
+
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."
|
|
1588
|
+
},
|
|
1589
|
+
permission: {
|
|
1590
|
+
type: "object",
|
|
1591
|
+
additionalProperties: true,
|
|
1592
|
+
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.",
|
|
1593
|
+
properties: {
|
|
1594
|
+
edit: { type: "string", enum: ["allow", "ask", "deny"] },
|
|
1595
|
+
bash: {
|
|
1596
|
+
description: "Either a blanket policy or a per-command-glob map.",
|
|
1597
|
+
oneOf: [
|
|
1598
|
+
{ type: "string", enum: ["allow", "ask", "deny"] },
|
|
1599
|
+
{
|
|
1600
|
+
type: "object",
|
|
1601
|
+
additionalProperties: { type: "string", enum: ["allow", "ask", "deny"] }
|
|
1602
|
+
}
|
|
1603
|
+
]
|
|
1604
|
+
},
|
|
1605
|
+
webfetch: { type: "string", enum: ["allow", "ask", "deny"] }
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1609
|
+
};
|
|
1610
|
+
|
|
1611
|
+
// plugins/opencode/providers/opencode/schemas/command.schema.json
|
|
1612
|
+
var command_schema_default2 = {
|
|
1613
|
+
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
1614
|
+
$id: "https://skill-map.ai/providers/opencode/v1/frontmatter/command.schema.json",
|
|
1615
|
+
title: "FrontmatterOpenCodeCommand",
|
|
1616
|
+
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.",
|
|
1617
|
+
allOf: [
|
|
1618
|
+
{ $ref: "https://skill-map.ai/spec/v0/frontmatter/base.schema.json" }
|
|
1619
|
+
],
|
|
1620
|
+
type: "object",
|
|
1621
|
+
additionalProperties: true,
|
|
1622
|
+
properties: {
|
|
1623
|
+
description: {
|
|
1624
|
+
type: "string",
|
|
1625
|
+
description: "Brief explanation of the command's purpose, shown in OpenCode's slash-command picker."
|
|
1626
|
+
},
|
|
1627
|
+
agent: {
|
|
1628
|
+
type: "string",
|
|
1629
|
+
description: "Optional agent this command runs under (matches an `.opencode/agent/<name>` handle)."
|
|
1630
|
+
},
|
|
1631
|
+
model: {
|
|
1632
|
+
type: "string",
|
|
1633
|
+
description: "Optional model override for this command, in OpenCode's `provider/model` form."
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
};
|
|
1637
|
+
|
|
1638
|
+
// plugins/opencode/providers/opencode/index.ts
|
|
1639
|
+
var OPENCODE_RESERVED_SLASH_VERBS = [
|
|
1640
|
+
// Inherited open-standard base (universal cross-agent slash commands).
|
|
1641
|
+
...COMMONS_RESERVED_NAMES["skill"] ?? [],
|
|
1642
|
+
// OpenCode-specific built-in verbs (`/help` already lives in the base).
|
|
1643
|
+
"init",
|
|
1644
|
+
"redo",
|
|
1645
|
+
"share",
|
|
1646
|
+
"undo"
|
|
1647
|
+
];
|
|
1648
|
+
var opencodeProvider = {
|
|
1649
|
+
id: "opencode",
|
|
1650
|
+
pluginId: OPENCODE_PLUGIN_ID,
|
|
1651
|
+
kind: "provider",
|
|
1652
|
+
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).",
|
|
1653
|
+
// Provider identity for the active-lens dropdown, the topbar lens chip, and
|
|
1654
|
+
// the per-node provider chip. OpenCode has no strong model vendor (it is
|
|
1655
|
+
// model-agnostic), so the label is the bare product name, NOT a possessive
|
|
1656
|
+
// `<Vendor>'s <product>` like the other vendor lenses. Cyan, distinct from
|
|
1657
|
+
// codex green, antigravity violet, and the agent-skills slate.
|
|
1658
|
+
presentation: {
|
|
1659
|
+
label: "OpenCode",
|
|
1660
|
+
color: "#0891b2",
|
|
1661
|
+
colorDark: "#22d3ee",
|
|
1662
|
+
// OpenCode invokes its custom commands with `/<name>`; the palette paints
|
|
1663
|
+
// this as the `invokes` edge glyph under the opencode lens. (Skills are
|
|
1664
|
+
// loaded by OpenCode's native `skill` tool, not a body sigil.)
|
|
1665
|
+
invocationSigil: "/"
|
|
1666
|
+
},
|
|
1667
|
+
// Auto-detect marker: a `.opencode/` directory marks an OpenCode project.
|
|
1668
|
+
detect: { markers: [".opencode"] },
|
|
1669
|
+
// Vendor lens: gated to the active lens. OpenCode only resolves its own
|
|
1670
|
+
// territory (plus the Claude-compat / open-standard skill homes it reads).
|
|
1671
|
+
// Gating keeps the walker from claiming OpenCode territory under another
|
|
1672
|
+
// lens, where the OpenCode runtime would never resolve it anyway, and keeps
|
|
1673
|
+
// the `.claude/skills/` claim here from colliding with the claude lens.
|
|
1674
|
+
gatedByActiveLens: true,
|
|
1675
|
+
// Beta: ships enabled, auto-detects `.opencode/`, selectable as the active
|
|
1676
|
+
// lens, with a maturity badge. Same posture as codex / antigravity, since
|
|
1677
|
+
// the lens is freshly landed. Promote to `stable` (drop the field) once it
|
|
1678
|
+
// has real-world mileage.
|
|
1679
|
+
stability: "beta",
|
|
1680
|
+
// Single read rule: all three families are `.md` + YAML frontmatter, so one
|
|
1681
|
+
// `COMMONS_READ` pass suffices (no multi-rule `read` like codex, which mixes
|
|
1682
|
+
// `.toml`). `classify()` below routes each path to its kind.
|
|
1683
|
+
read: COMMONS_READ,
|
|
1684
|
+
kinds: {
|
|
1685
|
+
agent: {
|
|
1686
|
+
schema: "./schemas/agent.schema.json",
|
|
1687
|
+
schemaJson: agent_schema_default3,
|
|
1688
|
+
ui: {
|
|
1689
|
+
label: "Agents",
|
|
1690
|
+
// Cross-provider agent vocabulary: same blue as Claude's `agent` kind,
|
|
1691
|
+
// so an agent paints the same regardless of which lens sourced it.
|
|
1692
|
+
color: "#3b82f6",
|
|
1693
|
+
colorDark: "#60a5fa",
|
|
1694
|
+
icon: { kind: "pi", id: "pi-user" }
|
|
1695
|
+
},
|
|
1696
|
+
// No `name` frontmatter field: the filename stem
|
|
1697
|
+
// (`.opencode/agent/<name>.md`) is the handle.
|
|
1698
|
+
identifiers: ["filename-basename"]
|
|
1699
|
+
},
|
|
1700
|
+
command: {
|
|
1701
|
+
schema: "./schemas/command.schema.json",
|
|
1702
|
+
schemaJson: command_schema_default2,
|
|
1703
|
+
ui: {
|
|
1704
|
+
label: "Commands",
|
|
1705
|
+
// Cross-provider command vocabulary: same amber (and icon) as Claude's
|
|
1706
|
+
// `command` kind and Antigravity's `workflow` kind.
|
|
1707
|
+
color: "#f59e0b",
|
|
1708
|
+
colorDark: "#fbbf24",
|
|
1709
|
+
icon: { kind: "svg", path: "M4 17 L10 11 L4 5 M12 19 L20 19" }
|
|
1710
|
+
},
|
|
1711
|
+
// The filename stem is the command name (`/<name>`); no `name` field.
|
|
1712
|
+
identifiers: ["filename-basename"]
|
|
1713
|
+
},
|
|
1714
|
+
// Open-standard `skill` kind, inherited from `agent-skills` by manifest
|
|
1715
|
+
// composition (same schema + green visuals every adopter shares).
|
|
1716
|
+
// `classify()` routes the three skill homes OpenCode reads into this kind.
|
|
1717
|
+
...COMMONS_KINDS
|
|
1718
|
+
},
|
|
1719
|
+
// `/<name>` slash invocations resolve to commands ONLY: OpenCode reserves the
|
|
1720
|
+
// slash for its custom commands, and loads skills via its native `skill` tool
|
|
1721
|
+
// (no `/`-invocation), so `invokes` does NOT target `skill` here (unlike
|
|
1722
|
+
// claude). Overrides the open-standard default (`invokes: ['skill']`). The
|
|
1723
|
+
// `core/slash-command` extractor is authorised under the opencode lens (its
|
|
1724
|
+
// precondition lists `opencode`) so `/deploy` in a body emits the link.
|
|
1725
|
+
resolution: { invokes: ["command"] },
|
|
1726
|
+
// Reserved built-in slash commands, applied to the `command` kind (the only
|
|
1727
|
+
// `/`-invocable OpenCode kind: skills are tool-loaded, not slash-invoked, so
|
|
1728
|
+
// a skill named after a built-in cannot be shadowed through the slash
|
|
1729
|
+
// channel and is deliberately NOT reserved).
|
|
1730
|
+
reservedNames: {
|
|
1731
|
+
command: OPENCODE_RESERVED_SLASH_VERBS
|
|
1732
|
+
},
|
|
1733
|
+
classify(path) {
|
|
1734
|
+
const lower = path.toLowerCase();
|
|
1735
|
+
if (/^\.opencode\/agent\/[^/]+\.md$/.test(lower)) return "agent";
|
|
1736
|
+
if (/^\.opencode\/commands\/[^/]+\.md$/.test(lower)) return "command";
|
|
1737
|
+
if (/^\.opencode\/skills\/[^/]+\/skill\.md$/.test(lower)) return "skill";
|
|
1738
|
+
if (/^\.claude\/skills\/[^/]+\/skill\.md$/.test(lower)) return "skill";
|
|
1739
|
+
return classifyCommonsPath(path);
|
|
1740
|
+
}
|
|
1741
|
+
};
|
|
1742
|
+
|
|
1562
1743
|
// plugins/core/providers/core-markdown/schemas/markdown.schema.json
|
|
1563
1744
|
var markdown_schema_default = {
|
|
1564
1745
|
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
@@ -2009,7 +2190,7 @@ var slashCommandExtractor = {
|
|
|
2009
2190
|
id: ID9,
|
|
2010
2191
|
pluginId: CORE_PLUGIN_ID,
|
|
2011
2192
|
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
|
|
2193
|
+
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
2194
|
scope: "body",
|
|
2014
2195
|
// Also authorised under the antigravity lens, which shares the `/command`
|
|
2015
2196
|
// grammar: a workflow / skill / AGENTS.md body's `/name` tokens resolve to
|
|
@@ -2019,7 +2200,13 @@ var slashCommandExtractor = {
|
|
|
2019
2200
|
// `/init`, ...) and invokes user skills with `$` instead (parsed by the
|
|
2020
2201
|
// codex `dollar-skill` extractor). A lens that declares no `invokes`
|
|
2021
2202
|
// resolution leaves the signals unresolved (no spurious edges).
|
|
2022
|
-
|
|
2203
|
+
//
|
|
2204
|
+
// Also authorised under the opencode lens: OpenCode invokes its custom
|
|
2205
|
+
// `.opencode/commands/<name>.md` with `/<name>` (the opencode provider maps
|
|
2206
|
+
// `invokes: ['command']`, since OpenCode loads skills via its native `skill`
|
|
2207
|
+
// tool rather than the slash channel). Additive: claude / antigravity runs
|
|
2208
|
+
// are unchanged.
|
|
2209
|
+
precondition: { provider: ["claude", "antigravity", "opencode"] },
|
|
2023
2210
|
extract(ctx) {
|
|
2024
2211
|
const seen = /* @__PURE__ */ new Set();
|
|
2025
2212
|
const body = stripCodeAndHtml(ctx.body);
|
|
@@ -4650,6 +4837,7 @@ var toolsCounterExtractor2 = { ...toolsCounterExtractor, pluginId: "claude", ver
|
|
|
4650
4837
|
var antigravityProvider2 = { ...antigravityProvider, pluginId: "antigravity", version: VERSION };
|
|
4651
4838
|
var codexProvider2 = { ...codexProvider, pluginId: "codex", version: VERSION };
|
|
4652
4839
|
var dollarSkillExtractor2 = { ...dollarSkillExtractor, pluginId: "codex", version: VERSION };
|
|
4840
|
+
var opencodeProvider2 = { ...opencodeProvider, pluginId: "opencode", version: VERSION };
|
|
4653
4841
|
var agentSkillsProvider2 = { ...agentSkillsProvider, pluginId: "agent-skills", version: VERSION };
|
|
4654
4842
|
var coreMarkdownProvider2 = { ...coreMarkdownProvider, pluginId: "core", version: VERSION };
|
|
4655
4843
|
var atFileExtractor2 = { ...atFileExtractor, pluginId: "core", version: VERSION };
|
|
@@ -4704,6 +4892,13 @@ var builtInPlugins = [
|
|
|
4704
4892
|
dollarSkillExtractor2
|
|
4705
4893
|
]
|
|
4706
4894
|
},
|
|
4895
|
+
{
|
|
4896
|
+
id: "opencode",
|
|
4897
|
+
description: "OpenCode CLI platform integration (open-source, model-agnostic terminal coding agent). Classifies OpenCode agents under `.opencode/agent/*.md` and commands under `.opencode/commands/*.md` (its own kinds), and adopts the skill homes OpenCode reads (`.opencode/skills/`, `.claude/skills/`, `.agents/skills/`); contributes the OpenCode runtime identity and reserved built-in names.",
|
|
4898
|
+
extensions: [
|
|
4899
|
+
opencodeProvider2
|
|
4900
|
+
]
|
|
4901
|
+
},
|
|
4707
4902
|
{
|
|
4708
4903
|
id: "agent-skills",
|
|
4709
4904
|
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 +5637,7 @@ var BUILT_IN_PLUGIN_IDS = /* @__PURE__ */ new Set([
|
|
|
5442
5637
|
"claude",
|
|
5443
5638
|
"antigravity",
|
|
5444
5639
|
"codex",
|
|
5640
|
+
"opencode",
|
|
5445
5641
|
"agent-skills",
|
|
5446
5642
|
"core"
|
|
5447
5643
|
]);
|
|
@@ -22181,6 +22377,7 @@ var BUILT_IN_PLUGIN_PRESENTATION_ORDER = [
|
|
|
22181
22377
|
"claude",
|
|
22182
22378
|
"antigravity",
|
|
22183
22379
|
"codex",
|
|
22380
|
+
"opencode",
|
|
22184
22381
|
"agent-skills"
|
|
22185
22382
|
];
|
|
22186
22383
|
function sortPluginsForPresentation(plugins) {
|
|
@@ -33161,4 +33358,4 @@ function resolveBareDefault() {
|
|
|
33161
33358
|
process.exit(ExitCode.Error);
|
|
33162
33359
|
}
|
|
33163
33360
|
//# sourceMappingURL=cli.js.map
|
|
33164
|
-
//# debugId=
|
|
33361
|
+
//# debugId=2c7d4927-4422-59d2-a37a-59fed3a2ec80
|
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]="36d7449f-872d-54bb-bf4a-a57a0865bea9")}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.72.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=
|
|
4264
|
+
//# debugId=36d7449f-872d-54bb-bf4a-a57a0865bea9
|
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]="0cf98661-b345-5259-9225-d50ee3f837db")}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.72.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=
|
|
4264
|
+
//# debugId=0cf98661-b345-5259-9225-d50ee3f837db
|