summer-engine 3.0.0 → 3.1.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/.factory-plugin/plugin.json +1 -1
- package/CHANGELOG.md +18 -0
- package/README.md +4 -4
- package/dist/cli/commands/setup.js +6 -19
- package/dist/cli/commands/skills.js +40 -33
- package/dist/core/capabilities/runtime-control.d.ts +4 -4
- package/dist/core/skills-registry.d.ts +9 -1
- package/dist/core/skills-registry.js +25 -2
- package/dist/installer/agent-config.d.ts +9 -4
- package/dist/installer/agent-config.js +192 -392
- package/dist/installer/agent-table.d.ts +103 -0
- package/dist/installer/agent-table.js +584 -0
- package/dist/installer/setup.js +4 -2
- package/dist/installer/skill-locations.d.ts +8 -17
- package/dist/installer/skill-locations.js +22 -101
- package/dist/installer/version-check.d.ts +5 -1
- package/dist/installer/version-check.js +38 -28
- package/gemini-extension.json +1 -1
- package/integrations/README.md +48 -19
- package/integrations/amp/README.md +12 -0
- package/integrations/amp/manifest-target.json +3 -0
- package/integrations/antigravity/README.md +12 -0
- package/integrations/antigravity/manifest-target.json +3 -0
- package/integrations/claude-desktop/README.md +12 -0
- package/integrations/claude-desktop/manifest-target.json +3 -0
- package/integrations/cline/README.md +8 -9
- package/integrations/cline-cli/README.md +12 -0
- package/integrations/cline-cli/manifest-target.json +3 -0
- package/integrations/copilot-jetbrains/README.md +12 -0
- package/integrations/copilot-jetbrains/manifest-target.json +3 -0
- package/integrations/crush/README.md +12 -0
- package/integrations/crush/manifest-target.json +3 -0
- package/integrations/github-copilot/README.md +8 -8
- package/integrations/goose/README.md +12 -0
- package/integrations/goose/manifest-target.json +3 -0
- package/integrations/grok-build/README.md +12 -0
- package/integrations/grok-build/manifest-target.json +3 -0
- package/integrations/hermes/README.md +12 -0
- package/integrations/hermes/manifest-target.json +3 -0
- package/integrations/junie/README.md +12 -0
- package/integrations/junie/manifest-target.json +3 -0
- package/integrations/kilo-code/README.md +6 -10
- package/integrations/kimi-code/README.md +12 -0
- package/integrations/kimi-code/manifest-target.json +3 -0
- package/integrations/kiro/README.md +12 -0
- package/integrations/kiro/manifest-target.json +3 -0
- package/integrations/lm-studio/README.md +8 -8
- package/integrations/mistral-vibe/README.md +12 -0
- package/integrations/mistral-vibe/manifest-target.json +3 -0
- package/integrations/opencode/README.md +9 -12
- package/integrations/qoder/README.md +12 -0
- package/integrations/qoder/manifest-target.json +3 -0
- package/integrations/qwen-code/README.md +12 -0
- package/integrations/qwen-code/manifest-target.json +3 -0
- package/integrations/roo-code/README.md +8 -7
- package/integrations/rovo-dev/README.md +12 -0
- package/integrations/rovo-dev/manifest-target.json +3 -0
- package/integrations/trae/README.md +12 -0
- package/integrations/trae/manifest-target.json +3 -0
- package/integrations/visual-studio/README.md +12 -0
- package/integrations/visual-studio/manifest-target.json +3 -0
- package/integrations/vscode-copilot/README.md +9 -9
- package/integrations/warp/README.md +12 -0
- package/integrations/warp/manifest-target.json +3 -0
- package/integrations/windsurf/README.md +8 -9
- package/integrations/zed/README.md +12 -0
- package/integrations/zed/manifest-target.json +3 -0
- package/library/skills/README.md +242 -0
- package/package.json +3 -3
- package/registry/generated/gemini-extension.json +1 -1
- package/registry/generated/marketplace.claude.json +1 -1
- package/registry/generated/plugin.claude.json +1 -1
- package/registry/generated/plugin.codex.json +1 -1
- package/registry/generated/plugin.cursor.json +1 -1
- package/registry/generated/plugin.factory.json +1 -1
- package/registry/generated/skills-index.md +242 -0
- package/registry/generated/skills-registry.json +492 -94
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
{
|
|
12
12
|
"name": "summer",
|
|
13
13
|
"source": "./",
|
|
14
|
-
"version": "3.
|
|
14
|
+
"version": "3.1.0",
|
|
15
15
|
"description": "Agent tooling for Summer Engine: game-dev skills, lifecycle hooks, and a 86-tool MCP bridge to the local desktop app.",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "Summer Engine",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"_generated": "GENERATED from integrations/claude — do not edit; npm run generate:registry",
|
|
4
4
|
"name": "summer",
|
|
5
|
-
"version": "3.
|
|
5
|
+
"version": "3.1.0",
|
|
6
6
|
"description": "Agent tooling for Summer Engine: game-dev skills, lifecycle hooks, and a 86-tool MCP bridge to the local desktop app.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Summer Engine",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "GENERATED from integrations/codex — do not edit; npm run generate:registry",
|
|
3
3
|
"name": "summer",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.1.0",
|
|
5
5
|
"description": "Agent tooling for Summer Engine: game-dev skills, lifecycle hooks, and a 86-tool MCP bridge. Build games by talking.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Summer Engine",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"_generated": "GENERATED from integrations/cursor — do not edit; npm run generate:registry",
|
|
4
4
|
"name": "summer",
|
|
5
5
|
"displayName": "Summer",
|
|
6
|
-
"version": "3.
|
|
6
|
+
"version": "3.1.0",
|
|
7
7
|
"description": "Agent tooling for Summer Engine: game-dev skills, lifecycle hooks, and a 86-tool MCP bridge to the local desktop app.",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "Summer Engine",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"_generated": "GENERATED from integrations/factory — do not edit; npm run generate:registry",
|
|
3
3
|
"name": "summer",
|
|
4
4
|
"description": "Agent tooling for Summer Engine: game-dev skills, lifecycle hooks, and a 86-tool MCP bridge to the local desktop app.",
|
|
5
|
-
"version": "3.
|
|
5
|
+
"version": "3.1.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Summer Engine",
|
|
8
8
|
"email": "founders@summerengine.com",
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to summer-engine will be documented here. Following [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and [Semantic Versioning](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## [3.1.0] - 2026-09-11
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- `summer setup` now covers every MCP-capable coding agent with a user-editable config: Claude Desktop, Antigravity, Zed, Kiro, Goose, Hermes Agent, GitHub Copilot in Visual Studio and in JetBrains IDEs, Trae, Qwen Code, Kimi Code CLI, Crush, Amp, Factory Droid, Junie, Warp, Rovo Dev CLI, Qoder CLI, Grok Build, Mistral Vibe and Cline CLI join the existing targets (31 active agents). New file shapes: Zed `context_servers`, Amp `amp.mcpServers`, Crush `mcp`, Rovo `transport: stdio`, Mistral Vibe `[[mcp_servers]]` TOML, Goose and Hermes YAML (comments preserved), typed-stdio `mcpServers`.
|
|
9
|
+
- One agent table (`src/installer/agent-table.ts`) now holds every per-agent fact: label, aliases, MCP path per scope and OS, file shape, skills home, restart hint. `integrations/<id>/` folders, `AGENT_CLIENTS`, doctor's skill-marker probes and the docs tables are checked against it by tests.
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- Cursor skills install as `~/.cursor/skills/<skill>/SKILL.md` (Cursor's skills format) instead of `.cursor/rules/*.mdc`; `--force` removes the old rule files.
|
|
13
|
+
- Devin Desktop (formerly Windsurf) skills install as `~/.codeium/windsurf/skills/<skill>/SKILL.md` instead of a `.windsurfrules` block.
|
|
14
|
+
- Cline skills install to `~/.cline/skills` (shared by the VS Code extension and the CLI) instead of `Documents/Cline/Rules` markdown.
|
|
15
|
+
- OpenCode skills install to `~/.config/opencode/skills/<skill>/SKILL.md` (OpenCode's native skills folder) instead of `agents/summer/*.md`; `--force` removes the old files.
|
|
16
|
+
- Kilo Code config moved to `~/.config/kilo/kilo.json` (`mcp` key, array command, `enabled: true`) and `./kilo.json` for project scope, matching Kilo's current CLI + extension; skills go to `~/.kilo/skills`.
|
|
17
|
+
- Claude Code and Cursor entries now carry `type: "stdio"`, which both products' docs list as required.
|
|
18
|
+
- Project requests on agents with a user-only config now warn with one shared wording ("writing user scope instead"); Trae, whose user-level servers are UI-managed, writes its project file.
|
|
19
|
+
|
|
20
|
+
### Deprecated
|
|
21
|
+
- `gemini` (Gemini CLI, retired for individual accounts 2026-06-18) and `roo-code` (shut down 2026-05-15) still work but are hidden from help and warn on use; `antigravity` is the replacement for Gemini users.
|
|
22
|
+
|
|
5
23
|
## [3.0.0] (2026-09-09): "The Library"
|
|
6
24
|
|
|
7
25
|
v3 rebuilds the package around one idea: every resource is described once (`library/<kind>/<slug>/resource.yaml`) and everything else (the searchable index, every agent manifest, the skill and template registries, counts, aliases) is generated from it, with CI failing on drift. Migrating from v2: `docs/MIGRATION-V2-V3.md`. The design contract and the verified-vs-planned status live in the repository under `docs/design/`.
|
package/README.md
CHANGED
|
@@ -93,7 +93,7 @@ The check ids are `node-version`, `cli-version`, `cli-version-current`, `skills-
|
|
|
93
93
|
npx -y summer-engine@latest setup claude-code --yes --force
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
Replace `claude-code` with the user's actual agent: `codex`, `cursor`, `windsurf`, `cline`, `
|
|
96
|
+
Replace `claude-code` with the user's actual agent: `claude-desktop`, `codex`, `cursor`, `windsurf`, `antigravity`, `cline`, `cline-cli`, `kilo-code`, `github-copilot`, `vscode-copilot`, `visual-studio`, `copilot-jetbrains`, `opencode`, `zed`, `kiro`, `goose`, `hermes`, `trae`, `qwen-code`, `kimi-code`, `crush`, `amp`, `factory`, `junie`, `warp`, `rovo-dev`, `qoder`, `grok-build`, `mistral-vibe`, `lm-studio`. Use `github-copilot` for Copilot CLI, `vscode-copilot` for GitHub Copilot Chat/Agent in VS Code, `visual-studio` for Copilot in Visual Studio, and `copilot-jetbrains` for Copilot in JetBrains IDEs. `gemini` (Gemini CLI, retired June 2026) and `roo-code` (shut down May 2026) still work but are legacy; use `antigravity` for Google's agent. This installs **every skill in the library** (`status: preview` skills included — they are labelled as preview in their guidance, and `--stable-only` skips them) to `~/.claude/skills/<slug>/SKILL.md` (or the agent's equivalent user-skill directory) AND writes the MCP server config so the agent can talk to the engine, then runs doctor and prints what it installed and where. The `--force` flag wipes any stale skill content first, so re-runs always end up with the latest copy. `--recommended` installs only the recommended subset — don't use it from this playbook.
|
|
97
97
|
|
|
98
98
|
**First-install detection:** if `~/.claude/skills/` didn't exist before this command, Claude Code wasn't watching it and won't auto-detect the new files this session. Tell the user **once**: "Skills installed - restart your agent so they load." On subsequent installs (directory already existed), skills auto-detect mid-session and no restart is needed. **You can detect first-install vs upgrade by checking if `~/.claude/skills/` existed before Step 1; record the result before running setup.**
|
|
99
99
|
|
|
@@ -186,7 +186,7 @@ Only skip brainstorm if the user explicitly said "skip brainstorm" or "just buil
|
|
|
186
186
|
- **Don't loop `summer login` if it times out at 120s.** Re-run it once and tell the user to be quicker; loop forever and the user is stuck.
|
|
187
187
|
- **Don't jump straight into `summer create` from a vague prompt.** Invoke the `brainstorm-game` skill first (Step 6). The build skills assume `.summer/GameSoul.md` exists.
|
|
188
188
|
|
|
189
|
-
**Using a different agent?** Replace `claude-code` with any supported agent in Step 1: `codex`, `cursor`, `windsurf`, `cline`, `
|
|
189
|
+
**Using a different agent?** Replace `claude-code` with any supported agent in Step 1: `claude-desktop`, `codex`, `cursor`, `windsurf`, `antigravity`, `cline`, `cline-cli`, `kilo-code`, `github-copilot`, `vscode-copilot`, `visual-studio`, `copilot-jetbrains`, `opencode`, `zed`, `kiro`, `goose`, `hermes`, `trae`, `qwen-code`, `kimi-code`, `crush`, `amp`, `factory`, `junie`, `warp`, `rovo-dev`, `qoder`, `grok-build`, `mistral-vibe`, `lm-studio`. (`devin` is also accepted as an alias for `windsurf`; `agy` for `antigravity`; `droid` for `factory`.) Skill targets vary per agent; the CLI handles the difference, and [`integrations/README.md`](integrations/README.md) documents exactly what gets written where for every client. After install, **Cline users should restart VS Code** so the extension reloads its MCP config. **VS Code Copilot users** should start the `summer-engine` MCP server from Agent mode if VS Code does not autostart it.
|
|
190
190
|
|
|
191
191
|
**Power-user note:** if the user specifically wants `summer` on their `PATH` for everyday terminal use outside the AI agent, a global npm install is still possible. The agent flow doesn't need it.
|
|
192
192
|
|
|
@@ -336,7 +336,7 @@ matchmaking are not promised by this package.
|
|
|
336
336
|
| `summer list templates` / `projects` | Browse. |
|
|
337
337
|
| `summer events [--follow] [--kinds <csv>] [--since <seq>] [--json]` | The engine events channel (engine 0.5.66+): newest events, or stream them live. |
|
|
338
338
|
| `summer debug [issue…]` | Support-ready Markdown debug report. |
|
|
339
|
-
| `summer skills list` | Show all skills. |
|
|
339
|
+
| `summer skills list` | Show all skills (`--by-domain` groups them; the same grouping is in [`library/skills/README.md`](library/skills/README.md)). |
|
|
340
340
|
| `summer skills install <name>` | Install one. |
|
|
341
341
|
| `summer skills install --all --agent <agent>` / `--recommended` [`--stable-only`] | Install every skill (preview included and labelled), or only the recommended subset; `--stable-only` skips preview skills. |
|
|
342
342
|
| `summer tool <name> --args '<json>'` | Run any Summer tool from the shell — the same implementation the MCP tool uses. `summer tool --list` prints them all. |
|
|
@@ -344,7 +344,7 @@ matchmaking are not promised by this package.
|
|
|
344
344
|
| `summer mcp setup <agent>` | Deprecated alias of `summer setup <agent>`. |
|
|
345
345
|
| `summer setup <agent> [--yes] [--force] [--recommended] [--stable-only]` | One shot: MCP config + all skills, preview included (`--recommended` for the subset, `--stable-only` to skip preview) + doctor. Idempotent. |
|
|
346
346
|
|
|
347
|
-
Agents: `claude-code`, `codex`, `cursor`, `windsurf`, `cline`, `
|
|
347
|
+
Agents: `claude-code`, `claude-desktop`, `codex`, `cursor`, `windsurf`, `antigravity`, `cline`, `cline-cli`, `kilo-code`, `github-copilot`, `vscode-copilot`, `visual-studio`, `copilot-jetbrains`, `opencode`, `zed`, `kiro`, `goose`, `hermes`, `trae`, `qwen-code`, `kimi-code`, `crush`, `amp`, `factory`, `junie`, `warp`, `rovo-dev`, `qoder`, `grok-build`, `mistral-vibe`, `lm-studio`. Legacy (still accepted, warn on use): `gemini`, `roo-code`. Aliases: `devin`/`devin-desktop` → `windsurf`, `agy` → `antigravity`, `droid` → `factory`, `copilot` → `github-copilot`, `vscode` → `vscode-copilot`, `kilo` → `kilo-code`, `qwen` → `qwen-code`, `kimi` → `kimi-code`. Scopes: `--scope user` (default), `--scope project`.
|
|
348
348
|
|
|
349
349
|
## Contributing
|
|
350
350
|
|
|
@@ -5,20 +5,7 @@ import { printDoctorResult, runDoctor } from "../../core/capabilities/doctor.js"
|
|
|
5
5
|
import { brandLine, c, sym, tildeify } from "../../core/format.js";
|
|
6
6
|
import { TOOLKIT_VERSION as cliVersion } from "../../core/version.js";
|
|
7
7
|
import { resolveDefaultChannel } from "../../installer/version-check.js";
|
|
8
|
-
|
|
9
|
-
"claude-code": "Claude Code",
|
|
10
|
-
codex: "Codex",
|
|
11
|
-
cursor: "Cursor",
|
|
12
|
-
windsurf: "Devin Desktop (Windsurf)",
|
|
13
|
-
cline: "Cline",
|
|
14
|
-
"roo-code": "Roo Code",
|
|
15
|
-
"kilo-code": "Kilo Code",
|
|
16
|
-
gemini: "Gemini CLI",
|
|
17
|
-
"github-copilot": "GitHub Copilot CLI",
|
|
18
|
-
"vscode-copilot": "GitHub Copilot in VS Code",
|
|
19
|
-
opencode: "OpenCode",
|
|
20
|
-
"lm-studio": "LM Studio",
|
|
21
|
-
};
|
|
8
|
+
import { agentLabel } from "../../installer/agent-table.js";
|
|
22
9
|
export const setupCommand = new Command("setup")
|
|
23
10
|
.description("Configure Summer Engine for an AI agent and run diagnostics")
|
|
24
11
|
.argument("[agent]", `Agent to configure: ${supportedAgents.join(", ")}`)
|
|
@@ -82,15 +69,15 @@ function printSetupResult(config, skills, doctor) {
|
|
|
82
69
|
console.log("");
|
|
83
70
|
console.log(brandLine(cliVersion));
|
|
84
71
|
console.log("");
|
|
85
|
-
const
|
|
72
|
+
const label = agentLabel(config.agent);
|
|
86
73
|
if (config.dryRun) {
|
|
87
|
-
console.log(` ${c.dim("(dry run)")} Would link to ${
|
|
74
|
+
console.log(` ${c.dim("(dry run)")} Would link to ${label} ${c.dim(tildeify(config.path))}`);
|
|
88
75
|
}
|
|
89
76
|
else if (config.wrote) {
|
|
90
|
-
console.log(` ${sym.ok()} Linked to ${c.bold(
|
|
77
|
+
console.log(` ${sym.ok()} Linked to ${c.bold(label)} ${c.dim(tildeify(config.path))}`);
|
|
91
78
|
}
|
|
92
79
|
else {
|
|
93
|
-
console.log(` ${sym.ok()} Already linked to ${c.bold(
|
|
80
|
+
console.log(` ${sym.ok()} Already linked to ${c.bold(label)} ${c.dim(tildeify(config.path))}`);
|
|
94
81
|
}
|
|
95
82
|
if (config.localDev) {
|
|
96
83
|
console.log(` ${c.dim("(local dev)")} MCP server command: ${c.dim(`${config.server.command} ${config.server.args.join(" ")}`)}`);
|
|
@@ -140,7 +127,7 @@ function printSetupResult(config, skills, doctor) {
|
|
|
140
127
|
printDoctorResult(doctor);
|
|
141
128
|
if (doctor.ok && skills.status !== "failed" && !config.dryRun) {
|
|
142
129
|
console.log("");
|
|
143
|
-
console.log(`${c.dim("Try it:")} open ${
|
|
130
|
+
console.log(`${c.dim("Try it:")} open ${label} and ask: ${c.bold("\"add a DirectionalLight3D and Camera3D to my scene\"")}`);
|
|
144
131
|
}
|
|
145
132
|
}
|
|
146
133
|
function parseInstalledSkills(stdout) {
|
|
@@ -8,6 +8,7 @@ import { writeSkillMarker } from "../../installer/version-check.js";
|
|
|
8
8
|
import { pruneRetiredSkills } from "../../installer/legacy-skills.js";
|
|
9
9
|
import { resolveInstallLocation, resolveSkillAgent, resolveSkillScope, } from "../../installer/skill-locations.js";
|
|
10
10
|
import { PACKAGE_ROOT } from "../../core/package-root.js";
|
|
11
|
+
import { agentLabel as tableAgentLabel, agentSpec, defaultPathContext, legacyRuleFiles } from "../../installer/agent-table.js";
|
|
11
12
|
import { TOOLKIT_VERSION as cliVersion } from "../../core/version.js";
|
|
12
13
|
// Skill files live in library/skills/<slug>/ and are resolved through the
|
|
13
14
|
// generated registry (registry/generated/skills-registry.json).
|
|
@@ -52,32 +53,7 @@ function orDie(parse) {
|
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
function agentLabel(agent) {
|
|
55
|
-
|
|
56
|
-
case "claude-code":
|
|
57
|
-
return "Claude Code";
|
|
58
|
-
case "codex":
|
|
59
|
-
return "Codex";
|
|
60
|
-
case "cursor":
|
|
61
|
-
return "Cursor";
|
|
62
|
-
case "windsurf":
|
|
63
|
-
return "Devin Desktop (Windsurf)";
|
|
64
|
-
case "cline":
|
|
65
|
-
return "Cline";
|
|
66
|
-
case "roo-code":
|
|
67
|
-
return "Roo Code";
|
|
68
|
-
case "kilo-code":
|
|
69
|
-
return "Kilo Code";
|
|
70
|
-
case "gemini":
|
|
71
|
-
return "Gemini CLI";
|
|
72
|
-
case "github-copilot":
|
|
73
|
-
return "GitHub Copilot CLI";
|
|
74
|
-
case "vscode-copilot":
|
|
75
|
-
return "GitHub Copilot in VS Code";
|
|
76
|
-
case "opencode":
|
|
77
|
-
return "OpenCode";
|
|
78
|
-
case "summer":
|
|
79
|
-
return "Summer";
|
|
80
|
-
}
|
|
56
|
+
return agent === "summer" ? "Summer" : tableAgentLabel(agent);
|
|
81
57
|
}
|
|
82
58
|
function previewSkippedLine(count) {
|
|
83
59
|
return ` Skipped ${count} preview skill${count === 1 ? "" : "s"} (--stable-only).`;
|
|
@@ -219,11 +195,11 @@ function printInstallSummary(count, agent, scope, location) {
|
|
|
219
195
|
const label = agentLabel(agent);
|
|
220
196
|
const tildeified = tildeify(location.path);
|
|
221
197
|
console.log(`\n${count} skill${count === 1 ? "" : "s"} ready for ${label} (${scope} scope).`);
|
|
198
|
+
const reloadHint = agent === "summer" ? undefined : agentSpec(agent).skills?.reloadHint;
|
|
222
199
|
if (location.kind === "skill-dir") {
|
|
223
200
|
console.log(`${label} can read skills from ${tildeified}/<skill>/SKILL.md`);
|
|
224
|
-
if (
|
|
225
|
-
console.log(
|
|
226
|
-
}
|
|
201
|
+
if (reloadHint)
|
|
202
|
+
console.log(reloadHint);
|
|
227
203
|
}
|
|
228
204
|
else if (location.kind === "cursor-rule-dir") {
|
|
229
205
|
console.log(`Cursor rules are in ${tildeified}/summer-<skill>.mdc`);
|
|
@@ -248,17 +224,36 @@ export const skillsCommand = new Command("skills")
|
|
|
248
224
|
skillsCommand
|
|
249
225
|
.command("list")
|
|
250
226
|
.description("List available skills")
|
|
251
|
-
.
|
|
227
|
+
.option("--by-domain", "Group skills by their primary domain (same grouping as library/skills/README.md)")
|
|
228
|
+
.action((opts) => {
|
|
252
229
|
const skills = getBuiltinSkills();
|
|
253
230
|
if (skills.length === 0) {
|
|
254
231
|
console.log("No skills found.");
|
|
255
232
|
return;
|
|
256
233
|
}
|
|
257
|
-
|
|
258
|
-
for (const s of skills) {
|
|
234
|
+
const line = (s) => {
|
|
259
235
|
const badge = s.recommended ? "recommended" : "optional";
|
|
260
236
|
const tag = s.status === "preview" ? "[preview] " : "";
|
|
261
|
-
|
|
237
|
+
return ` ${s.name.padEnd(24)} ${badge.padEnd(11)} ${tag}${s.description}`;
|
|
238
|
+
};
|
|
239
|
+
if (opts.byDomain) {
|
|
240
|
+
const groups = new Map();
|
|
241
|
+
for (const s of skills) {
|
|
242
|
+
const primary = s.domains[0] ?? "uncategorised";
|
|
243
|
+
groups.set(primary, [...(groups.get(primary) ?? []), s]);
|
|
244
|
+
}
|
|
245
|
+
console.log(`${skills.length} skills by primary domain (full index: library/skills/README.md):`);
|
|
246
|
+
for (const domain of [...groups.keys()].sort()) {
|
|
247
|
+
const group = groups.get(domain);
|
|
248
|
+
console.log(`\n${domain} (${group.length})`);
|
|
249
|
+
for (const s of group)
|
|
250
|
+
console.log(line(s));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
console.log("Available public skills:\n");
|
|
255
|
+
for (const s of skills)
|
|
256
|
+
console.log(line(s));
|
|
262
257
|
}
|
|
263
258
|
const previewCount = skills.filter((s) => s.status === "preview").length;
|
|
264
259
|
if (previewCount > 0) {
|
|
@@ -307,6 +302,18 @@ skillsCommand
|
|
|
307
302
|
for (const pruned of pruneRetiredSkills(location.path, getSkillRegistry().map((entry) => entry.name))) {
|
|
308
303
|
console.log(` Removed ${pruned.name} -> ${pruned.path} (retired in 3.0.0)`);
|
|
309
304
|
}
|
|
305
|
+
// Agents that moved from generated rule files to SKILL.md skills in 3.1
|
|
306
|
+
// (Cursor, OpenCode): drop the rule files 3.0 wrote so the agent does not
|
|
307
|
+
// load both for the same slug. Only files with Summer's own naming go.
|
|
308
|
+
if (agent !== "summer" && !process.env.SUMMER_SKILLS_DIR) {
|
|
309
|
+
const legacy = legacyRuleFiles(agentSpec(agent), scope, defaultPathContext(), skills.map((skill) => skill.name)) ?? [];
|
|
310
|
+
for (const file of legacy) {
|
|
311
|
+
if (!existsSync(file))
|
|
312
|
+
continue;
|
|
313
|
+
rmSync(file, { force: true });
|
|
314
|
+
console.log(` Removed ${tildeify(file)} (rule file from Summer 3.0; now a skill)`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
310
317
|
}
|
|
311
318
|
if (name && skills[0]?.status === "preview") {
|
|
312
319
|
console.log(` Note: ${name} is a preview skill — not yet exercised in-engine by the Summer team; its guidance says so.`);
|
|
@@ -186,18 +186,18 @@ export declare const runtimeAnimateArgsSchema: z.ZodObject<{
|
|
|
186
186
|
instance?: string | undefined;
|
|
187
187
|
name?: string | undefined;
|
|
188
188
|
value?: string | number | boolean | undefined;
|
|
189
|
+
space?: "local" | "global" | "both" | undefined;
|
|
190
|
+
cmd?: "pause" | "play" | "stop" | "state" | "seek" | "speed" | "travel" | "start" | "set_param" | "get_param" | undefined;
|
|
189
191
|
blend?: number | undefined;
|
|
190
192
|
state?: string | undefined;
|
|
191
193
|
position?: number | undefined;
|
|
192
194
|
speed?: number | undefined;
|
|
193
195
|
bones?: string[] | undefined;
|
|
194
|
-
cmd?: "pause" | "play" | "stop" | "state" | "seek" | "speed" | "travel" | "start" | "set_param" | "get_param" | undefined;
|
|
195
196
|
from_end?: boolean | undefined;
|
|
196
197
|
update?: boolean | undefined;
|
|
197
198
|
reset?: boolean | undefined;
|
|
198
199
|
param?: string | undefined;
|
|
199
200
|
playback_path?: string | undefined;
|
|
200
|
-
space?: "local" | "global" | "both" | undefined;
|
|
201
201
|
include_rest?: boolean | undefined;
|
|
202
202
|
}, {
|
|
203
203
|
path: string;
|
|
@@ -205,18 +205,18 @@ export declare const runtimeAnimateArgsSchema: z.ZodObject<{
|
|
|
205
205
|
instance?: string | undefined;
|
|
206
206
|
name?: string | undefined;
|
|
207
207
|
value?: string | number | boolean | undefined;
|
|
208
|
+
space?: "local" | "global" | "both" | undefined;
|
|
209
|
+
cmd?: "pause" | "play" | "stop" | "state" | "seek" | "speed" | "travel" | "start" | "set_param" | "get_param" | undefined;
|
|
208
210
|
blend?: number | undefined;
|
|
209
211
|
state?: string | undefined;
|
|
210
212
|
position?: number | undefined;
|
|
211
213
|
speed?: number | undefined;
|
|
212
214
|
bones?: string[] | undefined;
|
|
213
|
-
cmd?: "pause" | "play" | "stop" | "state" | "seek" | "speed" | "travel" | "start" | "set_param" | "get_param" | undefined;
|
|
214
215
|
from_end?: boolean | undefined;
|
|
215
216
|
update?: boolean | undefined;
|
|
216
217
|
reset?: boolean | undefined;
|
|
217
218
|
param?: string | undefined;
|
|
218
219
|
playback_path?: string | undefined;
|
|
219
|
-
space?: "local" | "global" | "both" | undefined;
|
|
220
220
|
include_rest?: boolean | undefined;
|
|
221
221
|
}>;
|
|
222
222
|
export type RuntimeAnimateArgs = z.infer<typeof runtimeAnimateArgsSchema>;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Clients `summer skills install --agent` accepts: "summer" (the toolkit's
|
|
3
|
+
* own ~/.summer/skills) plus every agent in the installer's agent table that
|
|
4
|
+
* has a skills or rules folder. core/ cannot import installer/, so this list
|
|
5
|
+
* is written out; agent-table.test.ts fails if the two drift.
|
|
6
|
+
*/
|
|
7
|
+
export declare const AGENT_CLIENTS: readonly ["summer", "claude-code", "codex", "cursor", "windsurf", "antigravity", "gemini", "cline", "cline-cli", "roo-code", "kilo-code", "github-copilot", "vscode-copilot", "opencode", "zed", "kiro", "goose", "hermes", "qwen-code", "kimi-code", "crush", "amp", "factory", "warp", "rovo-dev", "qoder", "grok-build", "mistral-vibe"];
|
|
2
8
|
export type AgentClient = (typeof AGENT_CLIENTS)[number];
|
|
3
9
|
/** resource.yaml `status` (registry/schemas/skill.schema.json). */
|
|
4
10
|
export type SkillStatus = "stable" | "preview" | "deprecated";
|
|
@@ -17,6 +23,8 @@ export interface SkillRegistryEntry {
|
|
|
17
23
|
status: SkillStatus;
|
|
18
24
|
/** Package-root-relative skill dir, e.g. "library/skills/3d-lighting/". */
|
|
19
25
|
path: string;
|
|
26
|
+
/** facets.domains from resource.yaml; the first is the primary domain. Empty on old registries. */
|
|
27
|
+
domains: string[];
|
|
20
28
|
}
|
|
21
29
|
/**
|
|
22
30
|
* Load the generated skill registry (cached after first read).
|
|
@@ -11,19 +11,41 @@
|
|
|
11
11
|
import { readFileSync } from "node:fs";
|
|
12
12
|
import { join } from "node:path";
|
|
13
13
|
import { PACKAGE_ROOT } from "./package-root.js";
|
|
14
|
+
/**
|
|
15
|
+
* Clients `summer skills install --agent` accepts: "summer" (the toolkit's
|
|
16
|
+
* own ~/.summer/skills) plus every agent in the installer's agent table that
|
|
17
|
+
* has a skills or rules folder. core/ cannot import installer/, so this list
|
|
18
|
+
* is written out; agent-table.test.ts fails if the two drift.
|
|
19
|
+
*/
|
|
14
20
|
export const AGENT_CLIENTS = [
|
|
15
21
|
"summer",
|
|
16
|
-
"codex",
|
|
17
22
|
"claude-code",
|
|
23
|
+
"codex",
|
|
18
24
|
"cursor",
|
|
19
25
|
"windsurf",
|
|
26
|
+
"antigravity",
|
|
27
|
+
"gemini",
|
|
20
28
|
"cline",
|
|
29
|
+
"cline-cli",
|
|
21
30
|
"roo-code",
|
|
22
31
|
"kilo-code",
|
|
23
|
-
"gemini",
|
|
24
32
|
"github-copilot",
|
|
25
33
|
"vscode-copilot",
|
|
26
34
|
"opencode",
|
|
35
|
+
"zed",
|
|
36
|
+
"kiro",
|
|
37
|
+
"goose",
|
|
38
|
+
"hermes",
|
|
39
|
+
"qwen-code",
|
|
40
|
+
"kimi-code",
|
|
41
|
+
"crush",
|
|
42
|
+
"amp",
|
|
43
|
+
"factory",
|
|
44
|
+
"warp",
|
|
45
|
+
"rovo-dev",
|
|
46
|
+
"qoder",
|
|
47
|
+
"grok-build",
|
|
48
|
+
"mistral-vibe",
|
|
27
49
|
];
|
|
28
50
|
const packageRoot = PACKAGE_ROOT;
|
|
29
51
|
const REGISTRY_RELPATH = join("registry", "generated", "skills-registry.json");
|
|
@@ -55,6 +77,7 @@ export function parseSkillRegistry(json) {
|
|
|
55
77
|
recommended: s.recommended === true,
|
|
56
78
|
status: s.status === "preview" || s.status === "deprecated" ? s.status : "stable",
|
|
57
79
|
path: s.path,
|
|
80
|
+
domains: Array.isArray(s.domains) ? s.domains.filter((d) => typeof d === "string") : [],
|
|
58
81
|
}));
|
|
59
82
|
}
|
|
60
83
|
/**
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
+
import { type ConfigScope, type McpFormat, type SupportedAgent } from "./agent-table.js";
|
|
2
|
+
export { supportedAgents, type ConfigScope, type SupportedAgent } from "./agent-table.js";
|
|
1
3
|
export declare const SUMMER_MCP_SERVER_NAME = "summer-engine";
|
|
2
|
-
export declare const supportedAgents: readonly ["codex", "claude-code", "cursor", "windsurf", "cline", "roo-code", "kilo-code", "gemini", "github-copilot", "vscode-copilot", "opencode", "lm-studio"];
|
|
3
|
-
export type SupportedAgent = (typeof supportedAgents)[number];
|
|
4
|
-
export type ConfigScope = "user" | "project";
|
|
5
4
|
export interface StdioMcpServerConfig {
|
|
6
5
|
command: string;
|
|
7
6
|
args: string[];
|
|
@@ -25,7 +24,7 @@ export interface AgentConfigResult {
|
|
|
25
24
|
path: string;
|
|
26
25
|
serverName: string;
|
|
27
26
|
server: StdioMcpServerConfig;
|
|
28
|
-
format:
|
|
27
|
+
format: McpFormat;
|
|
29
28
|
snippet: string;
|
|
30
29
|
changed: boolean;
|
|
31
30
|
wrote: boolean;
|
|
@@ -37,6 +36,7 @@ export interface AgentConfigResult {
|
|
|
37
36
|
warnings: string[];
|
|
38
37
|
nextSteps: string[];
|
|
39
38
|
}
|
|
39
|
+
type JsonObject = Record<string, unknown>;
|
|
40
40
|
export declare function parseAgent(value: string | undefined): SupportedAgent | null;
|
|
41
41
|
export declare function parseScope(value: string | undefined): ConfigScope | null;
|
|
42
42
|
/** `summer setup [agent] --agent <agent>`: positional and option must agree;
|
|
@@ -52,7 +52,12 @@ export declare const DEFAULT_CHANNEL = "latest";
|
|
|
52
52
|
export declare function normalizeChannel(channel: string | undefined): string;
|
|
53
53
|
export declare function createSummerMcpServerConfig(localDev: boolean, platform?: NodeJS.Platform, channel?: string): StdioMcpServerConfig;
|
|
54
54
|
export declare function renderConfigSnippet(agent: SupportedAgent, server: StdioMcpServerConfig): string;
|
|
55
|
+
/** The key under which the file lists MCP servers (see McpFormat in agent-table.ts). */
|
|
56
|
+
export declare function topLevelKey(format: McpFormat): string;
|
|
57
|
+
/** One server entry in the shape the agent's file expects. */
|
|
58
|
+
export declare function mcpEntry(format: McpFormat, server: StdioMcpServerConfig): JsonObject;
|
|
55
59
|
/** Installed package root (dist/ and src/ alike). */
|
|
56
60
|
export declare function resolvePackageRoot(): string;
|
|
57
61
|
/** Directory name Gemini expects the extension under; the manifest `name` must match it. */
|
|
58
62
|
export declare const GEMINI_EXTENSION_DIR_NAME = "summer-engine";
|
|
63
|
+
export declare function upsertTomlArrayBlock(content: string, block: string): string;
|