* feat(#2454): PR 2 — kimi-code Agent Skills converter + install layout PR 1 registered the kimi-code EoS descriptor with empty artifactLayout (SKIP_INSTALL_CONTRACT excluded it from the end-to-end install test). PR 2 fills in the install surface: - src/runtime-artifact-conversion.cts: new convertClaudeCommandToKimiCodeSkill function. Today it delegates to convertClaudeCommandToKimiSkill (Python kimi-cli) because Kimi Code uses the same Agent Skills format + /skill: invocation per official docs. The distinct function name lets a future divergence land cleanly if Kimi Code's skill format evolves independently. - gsd-core/bin/lib/capability-validator.cjs: add to ALLOWED_SKILLS_CONVERTERS. - capabilities/kimi-code/capability.json: artifactLayout.global now declares the skills kind with converter='convertClaudeCommandToKimiCodeSkill' + home='.kimi-code' (auto-discovered at ~/.kimi-code/skills/ per Kimi Code docs: merge_all_available_skills = true default). - tests/installer-migration-install.integration.test.cjs: REMOVE the SKIP_INSTALL_CONTRACT exclusion — kimi-code now has a full install surface. - Regenerated capability-registry + capability-matrix + golden install parity + install tree fixtures for kimi-code. * fix(#2454): wire kimi-code converter into SKILLS_CONVERTER_REGISTRY + count bump - src/install-engine.cts: add convertClaudeCommandToKimiCodeSkill to SKILLS_CONVERTER_REGISTRY so the layout-driven skills install path can dispatch off the descriptor's converter string. - tests/capability-registry.test.cjs: bump VALID_CONVERTER_NAMES count 26 → 27 (added convertClaudeCommandToKimiCodeSkill). * fix(#2454): remove home override from kimi-code skills (inherit configDir) The home:'.kimi-code' override made the install plan resolve skills dest to ~/.kimi-code/skills instead of <configDir>/skills, causing the test's temp configDir to miss the install. Removing it lets skills inherit configDir like most runtimes. * fix(#2454): kimi-code install contract surface is flat-skills (no agents) Kimi Code has NO custom named subagents (per official docs: 3 built-in coder/explore/plan only). The kimi-skills-agents surface expects agents/ gsd.yaml + subagents/*.yaml which kimi-code does not produce. Changed to flat-skills which only checks for skills/gsd-* dirs. * docs(changeset): Phase 2 kimi-code install layout Added (#2509) * docs(changeset): backfill PR #2520 for Phase 2 (#2509)
This commit is contained in:
5
.changeset/2505-2-kimi-code-install-layout.md
Normal file
5
.changeset/2505-2-kimi-code-install-layout.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
type: Added
|
||||
pr: 2520
|
||||
---
|
||||
**`--kimi-code --global` now installs a working Agent Skills surface at `~/.kimi-code/skills/gsd-*/SKILL.md`** — previously the kimi-code descriptor (Phase 1) carried an empty `artifactLayout`, so the install produced zero skills and Kimi Code's `merge_all_available_skills = true` auto-discovery found nothing. Phase 2 adds the `convertClaudeCommandToKimiCodeSkill` converter, fills the descriptor's `artifactLayout.global` with the skills kind entry, and removes the Phase 1 `SKIP_INSTALL_CONTRACT` skip by setting the install contract surface to `flat-skills` (NOT `kimi-skills-agents` — Kimi Code has no custom agents). Kimi Code auto-discovers the skills on next launch; no `agents/gsd.yaml` or `subagents/*.yaml` installed. (#2509)
|
||||
@@ -24,7 +24,16 @@
|
||||
"localConfigDir": ".kimi-code",
|
||||
"configFormat": "none",
|
||||
"artifactLayout": {
|
||||
"global": [],
|
||||
"global": [
|
||||
{
|
||||
"kind": "skills",
|
||||
"destSubpath": "skills",
|
||||
"prefix": "gsd-",
|
||||
"nesting": "flat",
|
||||
"recursive": false,
|
||||
"converter": "convertClaudeCommandToKimiCodeSkill"
|
||||
}
|
||||
],
|
||||
"local": []
|
||||
},
|
||||
"commandStyle": "slash-hyphen",
|
||||
|
||||
@@ -1778,7 +1778,16 @@ const capabilities = {
|
||||
"localConfigDir": ".kimi-code",
|
||||
"configFormat": "none",
|
||||
"artifactLayout": {
|
||||
"global": [],
|
||||
"global": [
|
||||
{
|
||||
"kind": "skills",
|
||||
"destSubpath": "skills",
|
||||
"prefix": "gsd-",
|
||||
"nesting": "flat",
|
||||
"recursive": false,
|
||||
"converter": "convertClaudeCommandToKimiCodeSkill"
|
||||
}
|
||||
],
|
||||
"local": []
|
||||
},
|
||||
"commandStyle": "slash-hyphen",
|
||||
@@ -5179,7 +5188,16 @@ const runtimes = {
|
||||
"localConfigDir": ".kimi-code",
|
||||
"configFormat": "none",
|
||||
"artifactLayout": {
|
||||
"global": [],
|
||||
"global": [
|
||||
{
|
||||
"kind": "skills",
|
||||
"destSubpath": "skills",
|
||||
"prefix": "gsd-",
|
||||
"nesting": "flat",
|
||||
"recursive": false,
|
||||
"converter": "convertClaudeCommandToKimiCodeSkill"
|
||||
}
|
||||
],
|
||||
"local": []
|
||||
},
|
||||
"commandStyle": "slash-hyphen",
|
||||
|
||||
@@ -683,6 +683,7 @@ const VALID_CONVERTER_NAMES = new Set([
|
||||
'convertClaudeCommandToCursorSkill',
|
||||
'convertClaudeCommandToKiloSkill',
|
||||
'convertClaudeCommandToKimiSkill',
|
||||
'convertClaudeCommandToKimiCodeSkill',
|
||||
'convertClaudeCommandToOpencodeSkill',
|
||||
'convertClaudeCommandToTraeSkill',
|
||||
'convertClaudeCommandToWindsurfSkill',
|
||||
|
||||
@@ -135,6 +135,7 @@ function convertClaudeCommandToKiloSkill(content: string, skillName: string): st
|
||||
const SKILLS_CONVERTER_REGISTRY: Record<string, (content: string, skillName: string) => string> = {
|
||||
convertClaudeCommandToOpencodeSkill,
|
||||
convertClaudeCommandToKiloSkill,
|
||||
convertClaudeCommandToKimiCodeSkill: runtimeArtifactConversion.convertClaudeCommandToKimiCodeSkill,
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
@@ -544,6 +544,29 @@ function convertClaudeCommandToKimiSkill(content, skillName, _runtime = null, cm
|
||||
return `---\nname: ${kimiSkillName}\ndescription: ${yamlQuote(toSingleLine(description))}\n---\nInvoke this Kimi skill with \`/skill:${kimiSkillName}\`.\n\n${normalizedBody}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a Claude command-markdown source into a Kimi Code Agent Skill.
|
||||
*
|
||||
* Kimi Code (Moonshot's Node CLI) uses the standard Agent Skills format —
|
||||
* a directory containing SKILL.md with frontmatter (name/description) and
|
||||
* body — auto-discovered from `~/.kimi-code/skills/` (per Kimi Code docs:
|
||||
* "Agent Skills is an open format for adding specialized knowledge and
|
||||
* workflows to AI agents"). The invocation prefix is `/skill:<name>`,
|
||||
* identical to Python kimi-cli.
|
||||
*
|
||||
* Today the output is byte-identical to `convertClaudeCommandToKimiSkill`
|
||||
* (the Python kimi-cli converter) because both products consume the same
|
||||
* Agent Skills format + `/skill:` invocation. The distinct function name
|
||||
* lets a future divergence land cleanly if Kimi Code's skill format evolves
|
||||
* independently of Python kimi-cli.
|
||||
*
|
||||
* Registered as `convertClaudeCommandToKimiCodeSkill` in the capabilities/
|
||||
* kimi-code/capability.json `artifactLayout` `converter` field (#2454 PR 2).
|
||||
*/
|
||||
function convertClaudeCommandToKimiCodeSkill(content, skillName, _runtime = null, cmdNames = null) {
|
||||
return convertClaudeCommandToKimiSkill(content, skillName, _runtime, cmdNames);
|
||||
}
|
||||
|
||||
const KIMI_CANONICAL_GSD_AGENT_RE = /^gsd-[a-z0-9-]+$/;
|
||||
|
||||
function parseKimiAgentSource(source) {
|
||||
@@ -2854,6 +2877,7 @@ export = {
|
||||
convertClaudeCommandToAntigravitySkill,
|
||||
convertClaudeCommandToClaudeSkill,
|
||||
convertClaudeCommandToKimiSkill,
|
||||
convertClaudeCommandToKimiCodeSkill,
|
||||
buildKimiAgentArtifacts,
|
||||
convertClaudeToCursorMarkdown,
|
||||
convertClaudeCommandToCursorSkill,
|
||||
|
||||
@@ -4021,9 +4021,9 @@ describe('ADR-1016 phase 5a: closed-vocab set exports', () => {
|
||||
// ─── 25. ADR-857 phase 5e: closed ConverterName enum (Part B) ─────────────────
|
||||
|
||||
describe('ADR-857 phase 5e: VALID_CONVERTER_NAMES closed enum', () => {
|
||||
test('VALID_CONVERTER_NAMES has exactly 26 entries (16 command/skill/workflow + 10 agent converters)', () => {
|
||||
test('VALID_CONVERTER_NAMES has exactly 27 entries (17 command/skill/workflow + 10 agent converters)', () => {
|
||||
assert.ok(VALID_CONVERTER_NAMES instanceof Set, 'VALID_CONVERTER_NAMES must be a Set');
|
||||
assert.strictEqual(VALID_CONVERTER_NAMES.size, 26, 'VALID_CONVERTER_NAMES must have exactly 26 entries, got: ' + VALID_CONVERTER_NAMES.size);
|
||||
assert.strictEqual(VALID_CONVERTER_NAMES.size, 27, 'VALID_CONVERTER_NAMES must have exactly 27 entries, got: ' + VALID_CONVERTER_NAMES.size);
|
||||
});
|
||||
|
||||
test('VALID_CONVERTER_NAMES contains all expected converter names', () => {
|
||||
|
||||
144
tests/fixtures/golden-install-parity/kimi-code.json
vendored
144
tests/fixtures/golden-install-parity/kimi-code.json
vendored
@@ -63,77 +63,6 @@
|
||||
"agents/gsd-ui-researcher.md": "0e8ec8509d476904",
|
||||
"agents/gsd-user-profiler.md": "ca3bf75581f211a0",
|
||||
"agents/gsd-verifier.md": "cd5bea62bf704829",
|
||||
"commands/gsd-add-tests.md": "51542808862d4aa7",
|
||||
"commands/gsd-ai-integration-phase.md": "a693c0ade172bc3d",
|
||||
"commands/gsd-audit-fix.md": "24d7e5478c271584",
|
||||
"commands/gsd-audit-milestone.md": "192c2d4979ef6a5e",
|
||||
"commands/gsd-audit-uat.md": "a7ce7c63bf2db68e",
|
||||
"commands/gsd-autonomous.md": "35ccce06299833cf",
|
||||
"commands/gsd-capture.md": "b8494f0d0b1aff6a",
|
||||
"commands/gsd-cleanup.md": "e7b7644ddcefdf01",
|
||||
"commands/gsd-code-review.md": "1687eabcdf03f643",
|
||||
"commands/gsd-complete-milestone.md": "0b9066c97cf17898",
|
||||
"commands/gsd-config.md": "f6532a6cff144abe",
|
||||
"commands/gsd-debug.md": "9b42a48f5ae6836a",
|
||||
"commands/gsd-discuss-phase.md": "5a29df7d87aeb5cc",
|
||||
"commands/gsd-docs-update.md": "4992630ef84a9bfe",
|
||||
"commands/gsd-eval-review.md": "56a5842110d51254",
|
||||
"commands/gsd-execute-phase.md": "6bc473253c54343c",
|
||||
"commands/gsd-explore.md": "99d92deebce81126",
|
||||
"commands/gsd-extract-learnings.md": "b74c866e71283e49",
|
||||
"commands/gsd-fast.md": "5ac666f183c840ae",
|
||||
"commands/gsd-forensics.md": "fd672efe51d65a1a",
|
||||
"commands/gsd-graphify.md": "43e6dc6f9a38a043",
|
||||
"commands/gsd-health.md": "5339a925c497c35b",
|
||||
"commands/gsd-help.md": "9101ee73c245037e",
|
||||
"commands/gsd-import.md": "8a81293674937978",
|
||||
"commands/gsd-inbox.md": "da55c1408a6ee6cc",
|
||||
"commands/gsd-ingest-docs.md": "7a3c21ae5d5d133a",
|
||||
"commands/gsd-manager.md": "9f54653a7c589b00",
|
||||
"commands/gsd-map-codebase.md": "709e9572953accc6",
|
||||
"commands/gsd-mempalace-capture.md": "c0892e814b04350a",
|
||||
"commands/gsd-mempalace-recall.md": "5ac67fa4b7f2b03b",
|
||||
"commands/gsd-milestone-summary.md": "f8fa9c357c08b74b",
|
||||
"commands/gsd-mvp-phase.md": "cba67bcb55250e5f",
|
||||
"commands/gsd-new-milestone.md": "8d52385b21cadd20",
|
||||
"commands/gsd-new-project.md": "952d7601b800ad8d",
|
||||
"commands/gsd-next.md": "7d3a2cb0bd12043a",
|
||||
"commands/gsd-ns-context.md": "011c44e7aa46e64a",
|
||||
"commands/gsd-ns-ideate.md": "edc5e543512dd48a",
|
||||
"commands/gsd-ns-manage.md": "0409d810e499357f",
|
||||
"commands/gsd-ns-project.md": "ff67e85bc6f7fc5a",
|
||||
"commands/gsd-ns-review.md": "3766ed10827882a0",
|
||||
"commands/gsd-ns-workflow.md": "c3b3c046a74ec0ee",
|
||||
"commands/gsd-onboard.md": "a35340ce39334fc7",
|
||||
"commands/gsd-pause-work.md": "40a953fcddbedb5d",
|
||||
"commands/gsd-phase.md": "5dd3d40e3461a973",
|
||||
"commands/gsd-plan-phase.md": "8ab637314511ea88",
|
||||
"commands/gsd-plan-review-convergence.md": "f3aab422e0708dae",
|
||||
"commands/gsd-pr-branch.md": "ab1fcffe92129061",
|
||||
"commands/gsd-profile-user.md": "37c9ef202669bfd3",
|
||||
"commands/gsd-progress.md": "13d7e5ba8acc2605",
|
||||
"commands/gsd-quick.md": "3b9762ba2616ac69",
|
||||
"commands/gsd-resume-work.md": "ece9c3a5f64e21a6",
|
||||
"commands/gsd-review-backlog.md": "c5b557d4cb1b223d",
|
||||
"commands/gsd-review.md": "3e8908603a3c2b28",
|
||||
"commands/gsd-secure-phase.md": "34f8fb0720708cd1",
|
||||
"commands/gsd-settings.md": "6f95c7d98a02f13a",
|
||||
"commands/gsd-ship.md": "141c690957330961",
|
||||
"commands/gsd-sketch.md": "770df13e2f848d0e",
|
||||
"commands/gsd-spec-phase.md": "c0e592ef19cc6721",
|
||||
"commands/gsd-spike.md": "5c85bade6e6b804f",
|
||||
"commands/gsd-stats.md": "bea8a4f0e6f2ddf3",
|
||||
"commands/gsd-surface.md": "0317dc3b56ffcce6",
|
||||
"commands/gsd-thread.md": "56036040a95fc60b",
|
||||
"commands/gsd-ui-phase.md": "b48b780198ec7a2e",
|
||||
"commands/gsd-ui-review.md": "2ed61b5729f6e492",
|
||||
"commands/gsd-ultraplan-phase.md": "08e75b083f5fe3f2",
|
||||
"commands/gsd-undo.md": "479c579d2bb7c141",
|
||||
"commands/gsd-update.md": "6f59562ac2d6bee5",
|
||||
"commands/gsd-validate-phase.md": "22ad3181017f1b0e",
|
||||
"commands/gsd-verify-work.md": "71aad09ecfd3f844",
|
||||
"commands/gsd-workspace.md": "611002e4941d5654",
|
||||
"commands/gsd-workstreams.md": "57a8ef0af8c085d7",
|
||||
"gsd-core/.gsd-runtime": "9d2afd32abbcfa97",
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
@@ -435,5 +364,76 @@
|
||||
"scripts/gen-capability-registry.cjs": "c52201ff4d1c2cd7",
|
||||
"scripts/gen-loop-host-contract.cjs": "c7f15237234811a0",
|
||||
"scripts/lib/allowlist-ratchet.cjs": "ffaceaac3efc2660",
|
||||
"scripts/lib/cli-exit.cjs": "612d0c372c75b7e7"
|
||||
"scripts/lib/cli-exit.cjs": "612d0c372c75b7e7",
|
||||
"skills/gsd-add-tests/SKILL.md": "9ca6e30d5db6a6ad",
|
||||
"skills/gsd-ai-integration-phase/SKILL.md": "da4ae7d9a40e8cf1",
|
||||
"skills/gsd-audit-fix/SKILL.md": "237d305c47306488",
|
||||
"skills/gsd-audit-milestone/SKILL.md": "98a151b178864aa5",
|
||||
"skills/gsd-audit-uat/SKILL.md": "2a8bd6b7f04812a7",
|
||||
"skills/gsd-autonomous/SKILL.md": "935ac2fcb4761b82",
|
||||
"skills/gsd-capture/SKILL.md": "240f21aa797cdf6b",
|
||||
"skills/gsd-cleanup/SKILL.md": "13db60637c9eb3df",
|
||||
"skills/gsd-code-review/SKILL.md": "70e97fb3c1bc3481",
|
||||
"skills/gsd-complete-milestone/SKILL.md": "d848ff449f33913b",
|
||||
"skills/gsd-config/SKILL.md": "c4fe0acbcc31ce80",
|
||||
"skills/gsd-debug/SKILL.md": "52128dc1598d50bd",
|
||||
"skills/gsd-discuss-phase/SKILL.md": "4b0144358b18d76e",
|
||||
"skills/gsd-docs-update/SKILL.md": "7f055c7670d76ddc",
|
||||
"skills/gsd-eval-review/SKILL.md": "211ea8dac477167e",
|
||||
"skills/gsd-execute-phase/SKILL.md": "b8bb25d57570d784",
|
||||
"skills/gsd-explore/SKILL.md": "782f037fe0729c2e",
|
||||
"skills/gsd-extract-learnings/SKILL.md": "837e58da3df453e8",
|
||||
"skills/gsd-fast/SKILL.md": "77bd35a9d540054e",
|
||||
"skills/gsd-forensics/SKILL.md": "a367f70c3fc92f37",
|
||||
"skills/gsd-graphify/SKILL.md": "186094e3fb368335",
|
||||
"skills/gsd-health/SKILL.md": "741a7c6e887a232f",
|
||||
"skills/gsd-help/SKILL.md": "eb28c85cfdcc16bd",
|
||||
"skills/gsd-import/SKILL.md": "766932cce8d8a17e",
|
||||
"skills/gsd-inbox/SKILL.md": "3bf4e410df04cb77",
|
||||
"skills/gsd-ingest-docs/SKILL.md": "6139d3e98a634745",
|
||||
"skills/gsd-manager/SKILL.md": "4f02cf2b27d360f8",
|
||||
"skills/gsd-map-codebase/SKILL.md": "49c49fc4ff88b8c1",
|
||||
"skills/gsd-mempalace-capture/SKILL.md": "aeb01fa8be356ba8",
|
||||
"skills/gsd-mempalace-recall/SKILL.md": "c6e0195e55cd934c",
|
||||
"skills/gsd-milestone-summary/SKILL.md": "d2f96bb139402a7a",
|
||||
"skills/gsd-mvp-phase/SKILL.md": "fe7e70a5296c10dc",
|
||||
"skills/gsd-new-milestone/SKILL.md": "729100f0360f3cc0",
|
||||
"skills/gsd-new-project/SKILL.md": "7ef91103638c4736",
|
||||
"skills/gsd-next/SKILL.md": "bd417a9df6d0b2fb",
|
||||
"skills/gsd-ns-context/SKILL.md": "89f5bffe6702c0c5",
|
||||
"skills/gsd-ns-ideate/SKILL.md": "e0c0420f6878906a",
|
||||
"skills/gsd-ns-manage/SKILL.md": "b7fbe29e45e75f54",
|
||||
"skills/gsd-ns-project/SKILL.md": "fcb8a93ade9ecc72",
|
||||
"skills/gsd-ns-review/SKILL.md": "2ff62330379f947f",
|
||||
"skills/gsd-ns-workflow/SKILL.md": "86272fd655c206bc",
|
||||
"skills/gsd-onboard/SKILL.md": "814509644f2dd7da",
|
||||
"skills/gsd-pause-work/SKILL.md": "86886de012e27314",
|
||||
"skills/gsd-phase/SKILL.md": "7692fa5a0821e51e",
|
||||
"skills/gsd-plan-phase/SKILL.md": "8038d698f8de6aad",
|
||||
"skills/gsd-plan-review-convergence/SKILL.md": "28dc35da86b93b10",
|
||||
"skills/gsd-pr-branch/SKILL.md": "b51ca03728fd5e79",
|
||||
"skills/gsd-profile-user/SKILL.md": "4a53d59bc19e3f17",
|
||||
"skills/gsd-progress/SKILL.md": "b0a206e0ad93bf60",
|
||||
"skills/gsd-quick/SKILL.md": "faf4f26a707fe212",
|
||||
"skills/gsd-resume-work/SKILL.md": "78a048666a26016a",
|
||||
"skills/gsd-review-backlog/SKILL.md": "ffc6216cfb6c3002",
|
||||
"skills/gsd-review/SKILL.md": "6d1bbc8a6184b78a",
|
||||
"skills/gsd-secure-phase/SKILL.md": "3dc6088c9889d5bb",
|
||||
"skills/gsd-settings/SKILL.md": "4615c7f527403f9c",
|
||||
"skills/gsd-ship/SKILL.md": "993a34f93d7bda8c",
|
||||
"skills/gsd-sketch/SKILL.md": "87f28aee46e5d06e",
|
||||
"skills/gsd-spec-phase/SKILL.md": "443faa42c1c8cd8c",
|
||||
"skills/gsd-spike/SKILL.md": "558c0149816f111a",
|
||||
"skills/gsd-stats/SKILL.md": "1ecd859ba893f7b9",
|
||||
"skills/gsd-surface/SKILL.md": "68d58321293942f0",
|
||||
"skills/gsd-thread/SKILL.md": "78e6f1c56c629942",
|
||||
"skills/gsd-ui-phase/SKILL.md": "cc63649847cc2e50",
|
||||
"skills/gsd-ui-review/SKILL.md": "18ab050b4723f9a7",
|
||||
"skills/gsd-ultraplan-phase/SKILL.md": "fb49cef690fb4673",
|
||||
"skills/gsd-undo/SKILL.md": "a1ab63a1e875ef24",
|
||||
"skills/gsd-update/SKILL.md": "6ef33a94caa8f63e",
|
||||
"skills/gsd-validate-phase/SKILL.md": "d502ca602526ceab",
|
||||
"skills/gsd-verify-work/SKILL.md": "136debbb14db2086",
|
||||
"skills/gsd-workspace/SKILL.md": "9951bff5391884f8",
|
||||
"skills/gsd-workstreams/SKILL.md": "cd2ed0019f00302a"
|
||||
}
|
||||
|
||||
144
tests/fixtures/install-tree/kimi-code.json
vendored
144
tests/fixtures/install-tree/kimi-code.json
vendored
@@ -63,77 +63,6 @@
|
||||
"agents/gsd-ui-researcher.md",
|
||||
"agents/gsd-user-profiler.md",
|
||||
"agents/gsd-verifier.md",
|
||||
"commands/gsd-add-tests.md",
|
||||
"commands/gsd-ai-integration-phase.md",
|
||||
"commands/gsd-audit-fix.md",
|
||||
"commands/gsd-audit-milestone.md",
|
||||
"commands/gsd-audit-uat.md",
|
||||
"commands/gsd-autonomous.md",
|
||||
"commands/gsd-capture.md",
|
||||
"commands/gsd-cleanup.md",
|
||||
"commands/gsd-code-review.md",
|
||||
"commands/gsd-complete-milestone.md",
|
||||
"commands/gsd-config.md",
|
||||
"commands/gsd-debug.md",
|
||||
"commands/gsd-discuss-phase.md",
|
||||
"commands/gsd-docs-update.md",
|
||||
"commands/gsd-eval-review.md",
|
||||
"commands/gsd-execute-phase.md",
|
||||
"commands/gsd-explore.md",
|
||||
"commands/gsd-extract-learnings.md",
|
||||
"commands/gsd-fast.md",
|
||||
"commands/gsd-forensics.md",
|
||||
"commands/gsd-graphify.md",
|
||||
"commands/gsd-health.md",
|
||||
"commands/gsd-help.md",
|
||||
"commands/gsd-import.md",
|
||||
"commands/gsd-inbox.md",
|
||||
"commands/gsd-ingest-docs.md",
|
||||
"commands/gsd-manager.md",
|
||||
"commands/gsd-map-codebase.md",
|
||||
"commands/gsd-mempalace-capture.md",
|
||||
"commands/gsd-mempalace-recall.md",
|
||||
"commands/gsd-milestone-summary.md",
|
||||
"commands/gsd-mvp-phase.md",
|
||||
"commands/gsd-new-milestone.md",
|
||||
"commands/gsd-new-project.md",
|
||||
"commands/gsd-next.md",
|
||||
"commands/gsd-ns-context.md",
|
||||
"commands/gsd-ns-ideate.md",
|
||||
"commands/gsd-ns-manage.md",
|
||||
"commands/gsd-ns-project.md",
|
||||
"commands/gsd-ns-review.md",
|
||||
"commands/gsd-ns-workflow.md",
|
||||
"commands/gsd-onboard.md",
|
||||
"commands/gsd-pause-work.md",
|
||||
"commands/gsd-phase.md",
|
||||
"commands/gsd-plan-phase.md",
|
||||
"commands/gsd-plan-review-convergence.md",
|
||||
"commands/gsd-pr-branch.md",
|
||||
"commands/gsd-profile-user.md",
|
||||
"commands/gsd-progress.md",
|
||||
"commands/gsd-quick.md",
|
||||
"commands/gsd-resume-work.md",
|
||||
"commands/gsd-review-backlog.md",
|
||||
"commands/gsd-review.md",
|
||||
"commands/gsd-secure-phase.md",
|
||||
"commands/gsd-settings.md",
|
||||
"commands/gsd-ship.md",
|
||||
"commands/gsd-sketch.md",
|
||||
"commands/gsd-spec-phase.md",
|
||||
"commands/gsd-spike.md",
|
||||
"commands/gsd-stats.md",
|
||||
"commands/gsd-surface.md",
|
||||
"commands/gsd-thread.md",
|
||||
"commands/gsd-ui-phase.md",
|
||||
"commands/gsd-ui-review.md",
|
||||
"commands/gsd-ultraplan-phase.md",
|
||||
"commands/gsd-undo.md",
|
||||
"commands/gsd-update.md",
|
||||
"commands/gsd-validate-phase.md",
|
||||
"commands/gsd-verify-work.md",
|
||||
"commands/gsd-workspace.md",
|
||||
"commands/gsd-workstreams.md",
|
||||
"gsd-core/.gsd-runtime",
|
||||
"gsd-core/VERSION",
|
||||
"gsd-core/bin/check-latest-version.cjs",
|
||||
@@ -435,5 +364,76 @@
|
||||
"scripts/gen-capability-registry.cjs",
|
||||
"scripts/gen-loop-host-contract.cjs",
|
||||
"scripts/lib/allowlist-ratchet.cjs",
|
||||
"scripts/lib/cli-exit.cjs"
|
||||
"scripts/lib/cli-exit.cjs",
|
||||
"skills/gsd-add-tests/SKILL.md",
|
||||
"skills/gsd-ai-integration-phase/SKILL.md",
|
||||
"skills/gsd-audit-fix/SKILL.md",
|
||||
"skills/gsd-audit-milestone/SKILL.md",
|
||||
"skills/gsd-audit-uat/SKILL.md",
|
||||
"skills/gsd-autonomous/SKILL.md",
|
||||
"skills/gsd-capture/SKILL.md",
|
||||
"skills/gsd-cleanup/SKILL.md",
|
||||
"skills/gsd-code-review/SKILL.md",
|
||||
"skills/gsd-complete-milestone/SKILL.md",
|
||||
"skills/gsd-config/SKILL.md",
|
||||
"skills/gsd-debug/SKILL.md",
|
||||
"skills/gsd-discuss-phase/SKILL.md",
|
||||
"skills/gsd-docs-update/SKILL.md",
|
||||
"skills/gsd-eval-review/SKILL.md",
|
||||
"skills/gsd-execute-phase/SKILL.md",
|
||||
"skills/gsd-explore/SKILL.md",
|
||||
"skills/gsd-extract-learnings/SKILL.md",
|
||||
"skills/gsd-fast/SKILL.md",
|
||||
"skills/gsd-forensics/SKILL.md",
|
||||
"skills/gsd-graphify/SKILL.md",
|
||||
"skills/gsd-health/SKILL.md",
|
||||
"skills/gsd-help/SKILL.md",
|
||||
"skills/gsd-import/SKILL.md",
|
||||
"skills/gsd-inbox/SKILL.md",
|
||||
"skills/gsd-ingest-docs/SKILL.md",
|
||||
"skills/gsd-manager/SKILL.md",
|
||||
"skills/gsd-map-codebase/SKILL.md",
|
||||
"skills/gsd-mempalace-capture/SKILL.md",
|
||||
"skills/gsd-mempalace-recall/SKILL.md",
|
||||
"skills/gsd-milestone-summary/SKILL.md",
|
||||
"skills/gsd-mvp-phase/SKILL.md",
|
||||
"skills/gsd-new-milestone/SKILL.md",
|
||||
"skills/gsd-new-project/SKILL.md",
|
||||
"skills/gsd-next/SKILL.md",
|
||||
"skills/gsd-ns-context/SKILL.md",
|
||||
"skills/gsd-ns-ideate/SKILL.md",
|
||||
"skills/gsd-ns-manage/SKILL.md",
|
||||
"skills/gsd-ns-project/SKILL.md",
|
||||
"skills/gsd-ns-review/SKILL.md",
|
||||
"skills/gsd-ns-workflow/SKILL.md",
|
||||
"skills/gsd-onboard/SKILL.md",
|
||||
"skills/gsd-pause-work/SKILL.md",
|
||||
"skills/gsd-phase/SKILL.md",
|
||||
"skills/gsd-plan-phase/SKILL.md",
|
||||
"skills/gsd-plan-review-convergence/SKILL.md",
|
||||
"skills/gsd-pr-branch/SKILL.md",
|
||||
"skills/gsd-profile-user/SKILL.md",
|
||||
"skills/gsd-progress/SKILL.md",
|
||||
"skills/gsd-quick/SKILL.md",
|
||||
"skills/gsd-resume-work/SKILL.md",
|
||||
"skills/gsd-review-backlog/SKILL.md",
|
||||
"skills/gsd-review/SKILL.md",
|
||||
"skills/gsd-secure-phase/SKILL.md",
|
||||
"skills/gsd-settings/SKILL.md",
|
||||
"skills/gsd-ship/SKILL.md",
|
||||
"skills/gsd-sketch/SKILL.md",
|
||||
"skills/gsd-spec-phase/SKILL.md",
|
||||
"skills/gsd-spike/SKILL.md",
|
||||
"skills/gsd-stats/SKILL.md",
|
||||
"skills/gsd-surface/SKILL.md",
|
||||
"skills/gsd-thread/SKILL.md",
|
||||
"skills/gsd-ui-phase/SKILL.md",
|
||||
"skills/gsd-ui-review/SKILL.md",
|
||||
"skills/gsd-ultraplan-phase/SKILL.md",
|
||||
"skills/gsd-undo/SKILL.md",
|
||||
"skills/gsd-update/SKILL.md",
|
||||
"skills/gsd-validate-phase/SKILL.md",
|
||||
"skills/gsd-verify-work/SKILL.md",
|
||||
"skills/gsd-workspace/SKILL.md",
|
||||
"skills/gsd-workstreams/SKILL.md"
|
||||
]
|
||||
|
||||
@@ -35,10 +35,10 @@ const RUNTIME_INSTALL_CONTRACTS = {
|
||||
gemini: { surface: 'commands-gsd', settings: true, packageJson: true },
|
||||
hermes: { surface: 'hermes-skills', settings: true, packageJson: true },
|
||||
kimi: { surface: 'kimi-skills-agents', settings: false, packageJson: false },
|
||||
// #2454 PR 1: Kimi Code (Node CLI) registers the same install shape as Kimi
|
||||
// for now — Agent Skills + the standard gsd-core layout. PR 2 will specialize
|
||||
// this once the kimi-code Agent Skills converter lands.
|
||||
'kimi-code': { surface: 'kimi-skills-agents', settings: false, packageJson: false },
|
||||
// #2454: Kimi Code (Node CLI) has NO custom named subagents (per official
|
||||
// docs), so its install surface is skills-only (flat-skills), NOT
|
||||
// kimi-skills-agents. The kimi-agents YAML layout is Python kimi-cli only.
|
||||
'kimi-code': { surface: 'flat-skills', settings: false, packageJson: false },
|
||||
// #2305: Kilo's native plugin spawns the staged guard hooks, so it receives
|
||||
// the shared hooks bundle + the CommonJS package.json marker, like OpenCode.
|
||||
// (#1821 excluded Kilo on the false premise that it had no plugin surface.)
|
||||
@@ -550,13 +550,7 @@ describe('installer migration install integration', { concurrency: false }, () =
|
||||
assert.equal(fs.existsSync(path.join(codexHome, 'gsd-install-state.json')), false);
|
||||
});
|
||||
|
||||
// #2454 PR 1: kimi-code is registered as a runtime (descriptor + flags +
|
||||
// capability-registry) but its install layout (Agent Skills converter +
|
||||
// global AGENTS.md) lands in PR 2 of the sequence. Excluded from the
|
||||
// end-to-end install contract loop until PR 2 ships the install surface.
|
||||
const SKIP_INSTALL_CONTRACT = new Set(['kimi-code']);
|
||||
for (const runtime of SUPPORTED_RUNTIMES) {
|
||||
if (SKIP_INSTALL_CONTRACT.has(runtime)) continue;
|
||||
test(`runs a full end-to-end install for ${runtime}`, () => {
|
||||
const targetDir = path.join(tmpRoot, `.${runtime}-full-install`);
|
||||
fs.mkdirSync(targetDir, { recursive: true });
|
||||
|
||||
Reference in New Issue
Block a user