opencode-skill-autodiscovery 1.3.0 → 1.4.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/README.md +74 -99
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +124 -1
- package/dist/agents.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,53 +1,22 @@
|
|
|
1
1
|
# opencode-skill-autodiscovery
|
|
2
2
|
|
|
3
|
-
An [opencode](https://opencode.ai) plugin that auto-discovers skills installed by
|
|
4
|
-
VS Code agent plugins, Claude Code plugins, and [Agent Plugins
|
|
5
|
-
1.0.0](https://agent-plugins.org) conformant packages on the current machine,
|
|
6
|
-
and registers them with opencode's `skills.paths` so they appear in every
|
|
7
|
-
session. Each discovered skill is also exposed as a `/skill-name` slash command
|
|
8
|
-
that loads the skill and routes the rest of your message through it.
|
|
3
|
+
An [opencode](https://opencode.ai) plugin that auto-discovers skills, agents, and MCP servers installed by VS Code agent plugins, Claude Code plugins, and [Agent Plugins 1.0.0](https://agent-plugins.org) conformant packages on the current machine, and registers them with opencode so they appear in every session. Discovered skills are registered with opencode's `skills.paths` and also exposed as `/skill-name` slash commands that load the skill and route the rest of your message through it. Discovered agents are registered as `config.agent.<name>` (opt-in), and discovered MCP servers are mapped onto `config.mcp` (opt-in). Works with both `opencode.json` and `opencode.jsonc` config files.
|
|
9
4
|
|
|
10
5
|
## Why
|
|
11
6
|
|
|
12
|
-
Skills live in different places depending on the tool, OS, and local vs remote
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- VS Code agent plugins, local client
|
|
16
|
-
older builds), `~/.config/Code/agentPlugins` (Linux),
|
|
17
|
-
`~/Library/Application Support/Code/agentPlugins` (macOS), and
|
|
18
|
-
`%APPDATA%\Code\agentPlugins` (Windows), plus `Code - Insiders` variants.
|
|
19
|
-
The install layout is `{host}/{org}/{repo}`, with optional `installed.json`
|
|
20
|
-
and `cache.json` manifests alongside.
|
|
21
|
-
- VS Code agent plugins on a remote host (Remote-SSH, Codespaces, Dev
|
|
22
|
-
Containers, WSL): `~/.vscode-server/data/agentPlugins`. VS Code syncs the
|
|
23
|
-
enabled skills from your local client into a synthetic "VS Code Synced
|
|
24
|
-
Data" plugin materialized at
|
|
25
|
-
`~/.vscode-server/data/agentPlugins/{sanitizedUri}/{nonce}/skills/...`, and
|
|
26
|
-
records each synced bundle in `~/.vscode-server/data/agentPlugins/cache.json`.
|
|
7
|
+
Skills live in different places depending on the tool, OS, and local vs remote setup:
|
|
8
|
+
|
|
9
|
+
- VS Code agent plugins, local client: `~/.vscode/agent-plugins` (Windows / older builds), `~/.config/Code/agentPlugins` (Linux), `~/Library/Application Support/Code/agentPlugins` (macOS), and `%APPDATA%\Code\agentPlugins` (Windows), plus `Code - Insiders` variants. The install layout is `{host}/{org}/{repo}`, with optional `installed.json` and `cache.json` manifests alongside.
|
|
10
|
+
- VS Code agent plugins on a remote host (Remote-SSH, Codespaces, Dev Containers, WSL): `~/.vscode-server/data/agentPlugins`. VS Code syncs the enabled skills from your local client into a synthetic "VS Code Synced Data" plugin materialized at `~/.vscode-server/data/agentPlugins/{sanitizedUri}/{nonce}/skills/...`, and records each synced bundle in `~/.vscode-server/data/agentPlugins/cache.json`.
|
|
27
11
|
- Claude Code plugins: `~/.claude/plugins/installed_plugins.json`
|
|
28
|
-
- Claude Code plugins on a remote host (SSH/remote sessions):
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
project's `node_modules`, and a `skills.paths` entry relative to the project
|
|
33
|
-
dir silently resolves to nothing. This plugin scans both the opencode plugin
|
|
34
|
-
cache and the project's `node_modules` for packages carrying a root
|
|
35
|
-
`plugin.json` whose `$schema` is `https://agent-plugins.org/schemas/...`,
|
|
36
|
-
and registers their `skills/` with **absolute** paths — so an npm-distributed
|
|
37
|
-
Agent Plugins package (e.g. `@dodopayments/opencode-plugin`) just works with
|
|
38
|
-
`"plugin": ["opencode-skill-autodiscovery"]` and nothing else.
|
|
39
|
-
|
|
40
|
-
Each points at plugin directories that contain `SKILL.md` files. This plugin
|
|
41
|
-
reads the manifests (including the remote `cache.json` LRU), resolves each
|
|
42
|
-
entry to its on-disk skill directories, and registers them with opencode.
|
|
43
|
-
When a discovered package carries a conformant root `plugin.json`, that manifest
|
|
44
|
-
is preferred (its `skills/` children are registered as-is); otherwise the plugin
|
|
45
|
-
falls back to a tree walk so legacy layouts keep working.
|
|
12
|
+
- Claude Code plugins on a remote host (SSH/remote sessions): `~/.claude/remote/plugins/installed_plugins.json`
|
|
13
|
+
- **Agent Plugins 1.0.0 packages** distributed via npm. opencode installs npm plugins into its own cache (`~/.cache/opencode/packages/...`), not the project's `node_modules`, and a `skills.paths` entry relative to the project dir silently resolves to nothing. This plugin scans both the opencode plugin cache and the project's `node_modules` for packages carrying a root `plugin.json` whose `$schema` is `https://agent-plugins.org/schemas/...`, and registers their `skills/` with **absolute** paths — so an npm-distributed Agent Plugins package (e.g. `@dodopayments/opencode-plugin`) just works with `"plugin": ["opencode-skill-autodiscovery"]` and nothing else.
|
|
14
|
+
|
|
15
|
+
Each points at plugin directories that contain `SKILL.md` files. This plugin reads the manifests (including the remote `cache.json` LRU), resolves each entry to its on-disk skill directories, and registers them with opencode. When a discovered package carries a conformant root `plugin.json`, that manifest is preferred (its `skills/` children are registered as-is); otherwise the plugin falls back to a tree walk so legacy layouts keep working.
|
|
46
16
|
|
|
47
17
|
### MCP servers (opt-in)
|
|
48
18
|
|
|
49
|
-
With the `mcp` option, the plugin also reads each discovered package's `mcp.json`
|
|
50
|
-
and maps it onto opencode's `config.mcp`:
|
|
19
|
+
With the `mcp` option, the plugin also reads each discovered package's `mcp.json` and maps it onto opencode's `config.mcp`:
|
|
51
20
|
|
|
52
21
|
| Agent Plugins server | opencode entry |
|
|
53
22
|
|---|---|
|
|
@@ -55,56 +24,39 @@ and maps it onto opencode's `config.mcp`:
|
|
|
55
24
|
| `{ "type": "streamable-http", "url" }` | `{ "type": "remote", "url" }` |
|
|
56
25
|
| `{ "type": "sse" }` | skipped (opencode has no SSE transport) |
|
|
57
26
|
|
|
58
|
-
`${PLUGIN_ROOT}` and `${PLUGIN_DATA}` placeholders are expanded in `args`/`env`,
|
|
59
|
-
and both variables are injected into each stdio server's environment
|
|
60
|
-
(`PLUGIN_DATA` points at
|
|
61
|
-
`{opencode state}/plugin-data/{packageName}`). Invalid entries are skipped
|
|
62
|
-
per-entry, never fatally. `sse` servers and stdio `cwd` (which opencode cannot
|
|
63
|
-
represent) are dropped with a log line.
|
|
27
|
+
`${PLUGIN_ROOT}` and `${PLUGIN_DATA}` placeholders are expanded in `args`/`env`, and both variables are injected into each stdio server's environment (`PLUGIN_DATA` points at `{opencode state}/plugin-data/{packageName}`). Invalid entries are skipped per-entry, never fatally. `sse` servers and stdio `cwd` (which opencode cannot represent) are dropped with a log line.
|
|
64
28
|
|
|
65
29
|
### Agents (opt-in)
|
|
66
30
|
|
|
67
|
-
Agent Plugins 1.0.0 has no portable "agents" component type (only skills and
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
31
|
+
Agent Plugins 1.0.0 has no portable "agents" component type (only skills and MCP servers), so agents are contributed through the spec's client-extension mechanism. With the `agents` option, the plugin reads agents from four sources, in order:
|
|
32
|
+
|
|
33
|
+
1. `plugin.json` → `extensions["dev.opencode"].agents` (a map of agent name → opencode `agent` config).
|
|
34
|
+
2. A `dev.opencode/agents/<name>.json` extension directory (one opencode agent config per file).
|
|
35
|
+
3. A legacy Claude Code plugin shim: `.claude-plugin/plugin.json` `agents`, mapping `description` and `systemPrompt` (or the `agents/<name>/AGENTS.md` body) onto an opencode agent.
|
|
36
|
+
4. Flat `agents/<name>.md` files (the agency-agents layout) — one agent per file, keyed by filename, with `description`/`color` from frontmatter and the markdown body as the prompt.
|
|
71
37
|
|
|
72
|
-
|
|
73
|
-
opencode `agent` config).
|
|
74
|
-
2. A `dev.opencode/agents/<name>.json` extension directory (one opencode agent
|
|
75
|
-
config per file).
|
|
76
|
-
3. A legacy Claude Code plugin shim: `.claude-plugin/plugin.json` `agents`,
|
|
77
|
-
mapping `description` and `systemPrompt` (or the `agents/<name>/AGENTS.md`
|
|
78
|
-
body) onto an opencode agent.
|
|
38
|
+
Agents discovered without an explicit `mode` default to opencode's `all`, so they are both Tab-selectable and spawnable as subagents.
|
|
79
39
|
|
|
80
|
-
Discovered agents are registered as `config.agent.<name>` with the same rules
|
|
81
|
-
as commands: user-defined agents are never overwritten, same-source mirrors are
|
|
82
|
-
collapsed, and cross-source collisions become `<package>-<agent>`.
|
|
40
|
+
Discovered agents are registered as `config.agent.<name>` with the same rules as commands: user-defined agents are never overwritten, same-source mirrors are collapsed, and cross-source collisions become `<package>-<agent>`.
|
|
83
41
|
|
|
84
|
-
**Trust note:** a package-supplied `permission` block is always dropped — agent
|
|
85
|
-
|
|
86
|
-
|
|
42
|
+
**Trust note:** a package-supplied `permission` block is always dropped — agent permissions are too powerful to inherit from a package by default. If you need one, define the agent yourself in `opencode.json` (which always wins).
|
|
43
|
+
|
|
44
|
+
Agent `color` values are normalized: bare CSS names (e.g. `orange`, `purple`) are mapped to the `#RRGGBB` hex literals opencode accepts, hex shorthand (`#0f8`) is expanded, and anything else is dropped rather than risk rejecting the whole config.
|
|
87
45
|
|
|
88
46
|
### Slash commands
|
|
89
47
|
|
|
90
|
-
opencode treats skills and slash commands as separate mechanisms: skills are
|
|
91
|
-
only loaded on demand via the `skill` tool. To make a discovered skill
|
|
92
|
-
invocable as `/name`, the plugin also registers a command for it (via
|
|
93
|
-
`config.command`) whose template loads the skill and forwards your arguments:
|
|
48
|
+
opencode treats skills and slash commands as separate mechanisms: skills are only loaded on demand via the `skill` tool. To make a discovered skill invocable as `/name`, the plugin also registers a command for it (via `config.command`) whose template loads the skill and forwards your arguments:
|
|
94
49
|
|
|
95
50
|
```markdown
|
|
96
51
|
Load the `spec` skill and follow its instructions.
|
|
97
52
|
Context: $ARGUMENTS
|
|
98
53
|
```
|
|
99
54
|
|
|
100
|
-
So `/spec plan the migration` loads the `spec` skill and runs it against
|
|
101
|
-
`plan the migration`. The command's description is taken from the skill's
|
|
102
|
-
frontmatter; existing commands with the same name are never overwritten (a
|
|
103
|
-
colliding skill from a different source is registered as `/package-skill`).
|
|
55
|
+
So `/spec plan the migration` loads the `spec` skill and runs it against `plan the migration`. The command's description is taken from the skill's frontmatter; existing commands with the same name are never overwritten (a colliding skill from a different source is registered as `/package-skill`).
|
|
104
56
|
|
|
105
57
|
## Install
|
|
106
58
|
|
|
107
|
-
Add the package name to the `plugin` array in your `opencode.json
|
|
59
|
+
Add the package name to the `plugin` array in your `opencode.json` (or `opencode.jsonc` — both are supported):
|
|
108
60
|
|
|
109
61
|
```json
|
|
110
62
|
{
|
|
@@ -139,34 +91,56 @@ Use the tuple form to configure options:
|
|
|
139
91
|
| `mcp` | `false` | Also register MCP servers from discovered packages' `mcp.json`. |
|
|
140
92
|
| `agents` | `false` | Also register agents from packages (see "Agents" above). |
|
|
141
93
|
|
|
94
|
+
## VPS / remote hosts (SSH sessions)
|
|
95
|
+
|
|
96
|
+
Discovery is **machine-local**: a remote session only sees the skills, agents, and packages installed **on that host**. So opencode (and this plugin) must be installed on each remote machine, and you run opencode inside the SSH session — not from a local client terminal.
|
|
97
|
+
|
|
98
|
+
**On each remote host:**
|
|
99
|
+
|
|
100
|
+
```sh
|
|
101
|
+
# 1. Install opencode if it isn't there yet
|
|
102
|
+
npm install -g opencode-ai
|
|
103
|
+
|
|
104
|
+
# 2. Install this plugin globally. The -g flag targets the machine-wide config;
|
|
105
|
+
# without it, opencode writes a project-scoped .opencode/opencode.json
|
|
106
|
+
# instead (easy to miss, because the plugin looks installed but only for
|
|
107
|
+
# that one directory).
|
|
108
|
+
opencode plugin opencode-skill-autodiscovery -g
|
|
109
|
+
|
|
110
|
+
# 3. Restart opencode. It fetches the latest published version into the
|
|
111
|
+
# remote's own cache.
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Or hand-edit the remote's global config (`~/.config/opencode/opencode.json`):
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"plugin": [["opencode-skill-autodiscovery", { "mcp": true, "agents": true }]]
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**What a remote session discovers** (that host's own installs):
|
|
123
|
+
- VS Code Remote-SSH synced skills from `~/.vscode-server/data/agentPlugins/` (read via the `cache.json` LRU).
|
|
124
|
+
- Claude Code remote plugins from `~/.claude/remote/plugins/`.
|
|
125
|
+
- Agent Plugins packages in the remote's opencode cache (`~/.cache/opencode/packages/*`) and the project's `node_modules`.
|
|
126
|
+
|
|
127
|
+
**Caveats:**
|
|
128
|
+
- Run opencode **on the remote**. A local client terminal reads the local machine's manifests, not the remote's.
|
|
129
|
+
- VS Code only syncs **enabled** skills to the server as a flattened "VS Code Synced Data" bundle; marketplace clones (including their `agents/*.md` files) are generally not copied. Install the pack on the remote too if you want its agents there.
|
|
130
|
+
- To force a re-fetch of a new release on a remote, clear the cached copy and restart (opencode re-downloads the latest):
|
|
131
|
+
```sh
|
|
132
|
+
rm -rf ~/.cache/opencode/packages/opencode-skill-autodiscovery*
|
|
133
|
+
```
|
|
134
|
+
|
|
142
135
|
## Notes
|
|
143
136
|
|
|
144
|
-
- Discovery is inherently **machine-local**: it reads manifests from the home
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
original `{org}/{repo}` layout on the remote — the skill directories are
|
|
152
|
-
named after the skills instead. This plugin reads `cache.json` to locate
|
|
153
|
-
those materialized bundles.
|
|
154
|
-
- Newer VS Code layouts have no `installed.json` at all; marketplaces are
|
|
155
|
-
cloned directly under the agent plugin dir. The plugin falls back to a tree
|
|
156
|
-
walk only when no manifest is present, so it never surfaces skills from
|
|
157
|
-
cloned-but-uninstalled marketplaces on setups that do have a manifest.
|
|
158
|
-
- VS Code account sync only syncs your marketplace extension list; each machine
|
|
159
|
-
still has its own `installed.json`/`cache.json` that this plugin reads.
|
|
160
|
-
- A package is only treated as an Agent Plugins package when its root
|
|
161
|
-
`plugin.json` declares a `$schema` under `https://agent-plugins.org/schemas/`.
|
|
162
|
-
Everything else is ignored by the cache/node_modules scanners and falls back
|
|
163
|
-
to the tree walk elsewhere.
|
|
164
|
-
- The same plugin can be materialised in several VS Code layouts at once
|
|
165
|
-
(local clone + synced bundle + marketplace clone). `skills.paths` keeps all
|
|
166
|
-
paths; slash commands and MCP servers are de-duplicated so mirrors don't
|
|
167
|
-
create a wall of `/mirror-of-...` junk.
|
|
168
|
-
- The plugin is a no-op when no manifests or conformant packages exist, or when
|
|
169
|
-
they contain no skills.
|
|
137
|
+
- Discovery is inherently **machine-local**: it reads manifests from the home directory of the machine opencode is running on. Remote sessions on a different machine will discover that machine's skills.
|
|
138
|
+
- On a remote host, VS Code does **not** copy your marketplace plugins over. It syncs only the enabled skills/agents/etc. from your client as a single flattened "VS Code Synced Data" bundle under `~/.vscode-server/data/agentPlugins/`. That is why you won't see the original `{org}/{repo}` layout on the remote — the skill directories are named after the skills instead. This plugin reads `cache.json` to locate those materialized bundles.
|
|
139
|
+
- Newer VS Code layouts have no `installed.json` at all; marketplaces are cloned directly under the agent plugin dir. The plugin falls back to a tree walk only when no manifest is present, so it never surfaces skills from cloned-but-uninstalled marketplaces on setups that do have a manifest.
|
|
140
|
+
- VS Code account sync only syncs your marketplace extension list; each machine still has its own `installed.json`/`cache.json` that this plugin reads.
|
|
141
|
+
- A package is only treated as an Agent Plugins package when its root `plugin.json` declares a `$schema` under `https://agent-plugins.org/schemas/`. Everything else is ignored by the cache/node_modules scanners and falls back to the tree walk elsewhere.
|
|
142
|
+
- The same plugin can be materialised in several VS Code layouts at once (local clone + synced bundle + marketplace clone). `skills.paths` keeps all paths; slash commands and MCP servers are de-duplicated so mirrors don't create a wall of `/mirror-of-...` junk.
|
|
143
|
+
- The plugin is a no-op when no manifests or conformant packages exist, or when they contain no skills.
|
|
170
144
|
|
|
171
145
|
## Development
|
|
172
146
|
|
|
@@ -179,5 +153,6 @@ npm test # build + node --test (fixture-based unit tests)
|
|
|
179
153
|
Publish:
|
|
180
154
|
|
|
181
155
|
```sh
|
|
156
|
+
npm pack # local tarball (no publish needed for testing)
|
|
182
157
|
npm publish --access public
|
|
183
158
|
```
|
package/dist/agents.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAmJF,wBAAgB,UAAU,CACxB,GAAG,EAAE,aAAa,GACjB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,CAuF7C"}
|
package/dist/agents.js
CHANGED
|
@@ -5,6 +5,78 @@ import { log } from "./log.js";
|
|
|
5
5
|
// client-specific manifest data and extension directories (Agent Plugins 5.6/8).
|
|
6
6
|
const OPENCODE_NS = "dev.opencode";
|
|
7
7
|
const MODES = new Set(["subagent", "primary", "all"]);
|
|
8
|
+
// opencode accepts a `#RRGGBB` literal or one of its theme tokens; anything else
|
|
9
|
+
// makes the whole config fail to load. Claude Code agent frontmatter, however,
|
|
10
|
+
// uses bare CSS colour names, so translate the ones it emits and drop the rest.
|
|
11
|
+
const COLOR_TOKENS = new Set([
|
|
12
|
+
"primary",
|
|
13
|
+
"secondary",
|
|
14
|
+
"accent",
|
|
15
|
+
"success",
|
|
16
|
+
"warning",
|
|
17
|
+
"error",
|
|
18
|
+
"info",
|
|
19
|
+
]);
|
|
20
|
+
// CSS named colours where one exists, Tailwind's 500 shade for the names CSS
|
|
21
|
+
// does not define (amber, slate, rose). Covers every bare name observed across
|
|
22
|
+
// shipped Claude Code / Agent Plugins agent frontmatter.
|
|
23
|
+
const COLOR_NAMES = {
|
|
24
|
+
red: "#FF0000",
|
|
25
|
+
orange: "#FFA500",
|
|
26
|
+
amber: "#F59E0B",
|
|
27
|
+
gold: "#FFD700",
|
|
28
|
+
yellow: "#FFFF00",
|
|
29
|
+
olive: "#808000",
|
|
30
|
+
lime: "#00FF00",
|
|
31
|
+
green: "#008000",
|
|
32
|
+
teal: "#008080",
|
|
33
|
+
turquoise: "#40E0D0",
|
|
34
|
+
aqua: "#00FFFF",
|
|
35
|
+
cyan: "#00FFFF",
|
|
36
|
+
"neon-cyan": "#00FFFF",
|
|
37
|
+
"neon-green": "#39FF14",
|
|
38
|
+
blue: "#0000FF",
|
|
39
|
+
navy: "#000080",
|
|
40
|
+
"metallic-blue": "#4682B4",
|
|
41
|
+
indigo: "#4B0082",
|
|
42
|
+
violet: "#EE82EE",
|
|
43
|
+
purple: "#800080",
|
|
44
|
+
magenta: "#FF00FF",
|
|
45
|
+
fuchsia: "#FF00FF",
|
|
46
|
+
pink: "#FFC0CB",
|
|
47
|
+
rose: "#F43F5E",
|
|
48
|
+
crimson: "#DC143C",
|
|
49
|
+
maroon: "#800000",
|
|
50
|
+
brown: "#A52A2A",
|
|
51
|
+
slate: "#64748B",
|
|
52
|
+
silver: "#C0C0C0",
|
|
53
|
+
white: "#FFFFFF",
|
|
54
|
+
gray: "#808080",
|
|
55
|
+
grey: "#808080",
|
|
56
|
+
black: "#000000",
|
|
57
|
+
};
|
|
58
|
+
// Returns a value opencode's config schema will accept, or undefined when the
|
|
59
|
+
// colour is unusable. Never let an unrecognised value through: a single bad
|
|
60
|
+
// colour rejects the entire merged config.
|
|
61
|
+
function normalizeColor(raw) {
|
|
62
|
+
if (!raw)
|
|
63
|
+
return undefined;
|
|
64
|
+
const value = raw.trim();
|
|
65
|
+
if (/^#[0-9a-fA-F]{6}$/.test(value))
|
|
66
|
+
return value;
|
|
67
|
+
// `#RGB` shorthand is valid CSS but not accepted by opencode; expand it.
|
|
68
|
+
if (/^#[0-9a-fA-F]{3}$/.test(value)) {
|
|
69
|
+
return `#${value.slice(1).split("").map((c) => c + c).join("")}`;
|
|
70
|
+
}
|
|
71
|
+
const lower = value.toLowerCase();
|
|
72
|
+
if (COLOR_TOKENS.has(lower))
|
|
73
|
+
return lower;
|
|
74
|
+
const mapped = COLOR_NAMES[lower];
|
|
75
|
+
if (mapped)
|
|
76
|
+
return mapped;
|
|
77
|
+
log(`dropping unsupported agent color ${JSON.stringify(value)}`);
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
8
80
|
function asRecord(value) {
|
|
9
81
|
return typeof value === "object" && value !== null
|
|
10
82
|
? value
|
|
@@ -33,7 +105,7 @@ function toAgentConfig(raw) {
|
|
|
33
105
|
const model = stringValue("model");
|
|
34
106
|
const prompt = stringValue("prompt");
|
|
35
107
|
const description = stringValue("description");
|
|
36
|
-
const color = stringValue("color");
|
|
108
|
+
const color = normalizeColor(stringValue("color"));
|
|
37
109
|
const temperature = numberValue("temperature");
|
|
38
110
|
const topP = numberValue("top_p");
|
|
39
111
|
const maxSteps = numberValue("maxSteps");
|
|
@@ -138,6 +210,57 @@ export function readAgents(pkg) {
|
|
|
138
210
|
out.set(name, agent);
|
|
139
211
|
}
|
|
140
212
|
}
|
|
213
|
+
// Legacy flat agent files: agents/<name>.md. Used by packs (e.g.
|
|
214
|
+
// agency-agents) that ship one markdown file per specialist without
|
|
215
|
+
// declaring an `agents` field in their .claude-plugin manifest.
|
|
216
|
+
const flatAgentsDir = join(pkg.root, "agents");
|
|
217
|
+
let flatEntries;
|
|
218
|
+
try {
|
|
219
|
+
flatEntries = readdirSync(flatAgentsDir);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
flatEntries = [];
|
|
223
|
+
}
|
|
224
|
+
for (const entry of flatEntries) {
|
|
225
|
+
if (!entry.endsWith(".md"))
|
|
226
|
+
continue;
|
|
227
|
+
const name = entry.slice(0, -".md".length);
|
|
228
|
+
if (out.has(name))
|
|
229
|
+
continue;
|
|
230
|
+
let content;
|
|
231
|
+
try {
|
|
232
|
+
content = readFileSync(join(flatAgentsDir, entry), "utf8");
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const { description, color, body } = parseAgentMarkdown(content);
|
|
238
|
+
if (!description && !body)
|
|
239
|
+
continue;
|
|
240
|
+
const agent = {};
|
|
241
|
+
if (description)
|
|
242
|
+
agent.description = description;
|
|
243
|
+
if (color)
|
|
244
|
+
agent.color = color;
|
|
245
|
+
if (body)
|
|
246
|
+
agent.prompt = body;
|
|
247
|
+
out.set(name, agent);
|
|
248
|
+
}
|
|
141
249
|
return [...out.entries()].map(([name, agent]) => ({ name, agent }));
|
|
142
250
|
}
|
|
251
|
+
// Extracts frontmatter fields (description, color) and the markdown body from
|
|
252
|
+
// a flat agent file. The body becomes the agent's system prompt.
|
|
253
|
+
function parseAgentMarkdown(content) {
|
|
254
|
+
const m = /^---\s*\n([\s\S]*?)\n---/.exec(content);
|
|
255
|
+
if (!m)
|
|
256
|
+
return { body: content };
|
|
257
|
+
const field = (key) => {
|
|
258
|
+
const fm = new RegExp(`^${key}:[ \\t]*(.*)$`, "m").exec(m[1]);
|
|
259
|
+
return fm ? fm[1].trim().replace(/^["']|["']$/g, "") : undefined;
|
|
260
|
+
};
|
|
261
|
+
const description = field("description");
|
|
262
|
+
const color = normalizeColor(field("color"));
|
|
263
|
+
const body = content.slice(m[0].length).trim();
|
|
264
|
+
return { description: description || undefined, color, body };
|
|
265
|
+
}
|
|
143
266
|
//# sourceMappingURL=agents.js.map
|
package/dist/agents.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAkB/B,2EAA2E;AAC3E,iFAAiF;AACjF,MAAM,WAAW,GAAG,cAAc,CAAC;AAEnC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AAEtD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAChD,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;AAC/E,SAAS,aAAa,CAAC,GAAY;IACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,KAAK,GAAgB,EAAE,CAAC;IAE9B,MAAM,WAAW,GAAG,CAAC,GAAiD,EAAsB,EAAE,CAC5F,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,GAAG,CAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,MAAM,WAAW,GAAG,CAAC,GAAyC,EAAsB,EAAE,CACpF,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAW,CAAC;QACjE,CAAC,CAAE,GAAG,CAAC,GAAG,CAAY;QACtB,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-skill-autodiscovery",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "OpenCode plugin that auto-discovers skills installed by VS Code agent plugins, Claude Code plugins, and Agent Plugins 1.0.0 packages, and registers them with the local opencode config.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|