@opengsd/gsd-core 1.7.0-rc.4 → 1.7.0-rc.5
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/.opencode/plugins/gsd-core.js +20 -0
- package/agents/gsd-doc-classifier.md +105 -0
- package/agents/gsd-doc-synthesizer.md +61 -0
- package/agents/gsd-ui-checker.md +28 -0
- package/bin/install.js +624 -456
- package/gsd-core/bin/gsd-tools.cjs +40 -1
- package/gsd-core/bin/lib/api-coverage.cjs +466 -0
- package/gsd-core/bin/lib/audit.cjs +6 -3
- package/gsd-core/bin/lib/capability-loader.cjs +11 -9
- package/gsd-core/bin/lib/capability-registry.cjs +325 -64
- package/gsd-core/bin/lib/capability-validator.cjs +1 -1
- package/gsd-core/bin/lib/capability-writer.cjs +10 -1
- package/gsd-core/bin/lib/check-command-router.cjs +242 -3
- package/gsd-core/bin/lib/commands.cjs +7 -5
- package/gsd-core/bin/lib/config-loader.cjs +1 -0
- package/gsd-core/bin/lib/config.cjs +96 -0
- package/gsd-core/bin/lib/core-utils.cjs +4 -1
- package/gsd-core/bin/lib/host-integration-adapters/cline-sdk-binding.cjs +234 -0
- package/gsd-core/bin/lib/host-integration-adapters/imperative-hook-bus.cjs +145 -0
- package/gsd-core/bin/lib/host-integration.cjs +16 -0
- package/gsd-core/bin/lib/init.cjs +74 -30
- package/gsd-core/bin/lib/install-effort-resolver.cjs +213 -0
- package/gsd-core/bin/lib/install-engine.cjs +151 -11
- package/gsd-core/bin/lib/installer-migration-report.cjs +4 -0
- package/gsd-core/bin/lib/loop-resolver.cjs +68 -17
- package/gsd-core/bin/lib/markdown-sectionizer.cjs +50 -11
- package/gsd-core/bin/lib/milestone.cjs +3 -3
- package/gsd-core/bin/lib/normalize-test-command.cjs +187 -0
- package/gsd-core/bin/lib/phase-id.cjs +132 -3
- package/gsd-core/bin/lib/phase.cjs +78 -16
- package/gsd-core/bin/lib/planning-workspace.cjs +17 -0
- package/gsd-core/bin/lib/roadmap-command-router.cjs +5 -4
- package/gsd-core/bin/lib/roadmap-parser.cjs +21 -30
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +9 -9
- package/gsd-core/bin/lib/roadmap.cjs +42 -56
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +13 -6
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +2 -2
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +17 -10
- package/gsd-core/bin/lib/runtime-homes.cjs +8 -0
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +33 -25
- package/gsd-core/bin/lib/spec-section.cjs +111 -0
- package/gsd-core/bin/lib/state-transition.cjs +1 -1
- package/gsd-core/bin/lib/state.cjs +24 -24
- package/gsd-core/bin/lib/surface.cjs +30 -0
- package/gsd-core/bin/lib/uat.cjs +4 -1
- package/gsd-core/bin/lib/validate.cjs +15 -6
- package/gsd-core/bin/lib/verify.cjs +33 -37
- package/gsd-core/bin/shared/config-schema.manifest.json +2 -0
- package/gsd-core/bin/shared/model-catalog.json +6 -6
- package/gsd-core/references/api-coverage.md +104 -0
- package/gsd-core/references/model-profiles.md +2 -2
- package/gsd-core/references/planning-config.md +2 -0
- package/gsd-core/references/specless-probe-fallback.md +172 -0
- package/gsd-core/templates/config.json +2 -1
- package/gsd-core/workflows/audit-fix.md +9 -1
- package/gsd-core/workflows/code-review-fix.md +7 -3
- package/gsd-core/workflows/code-review.md +4 -1
- package/gsd-core/workflows/discuss-phase-assumptions.md +4 -1
- package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +8 -4
- package/gsd-core/workflows/execute-phase/steps/regression-gate.md +42 -0
- package/gsd-core/workflows/execute-phase.md +1 -25
- package/gsd-core/workflows/plan-phase.md +31 -2
- package/gsd-core/workflows/quick.md +2 -2
- package/gsd-core/workflows/review.md +59 -13
- package/gsd-core/workflows/settings-advanced.md +5 -5
- package/gsd-core/workflows/settings.md +2 -2
- package/gsd-core/workflows/verify-phase.md +3 -2
- package/gsd-core/workflows/verify-work.md +38 -0
- package/hooks/dist/gsd-cursor-pre-tool.js +76 -0
- package/hooks/dist/gsd-cursor-stop.js +48 -0
- package/hooks/dist/gsd-cursor-subagent-start.js +50 -0
- package/hooks/dist/gsd-cursor-subagent-stop.js +40 -0
- package/hooks/dist/managed-hooks-registry.cjs +4 -0
- package/hooks/gsd-cursor-pre-tool.js +76 -0
- package/hooks/gsd-cursor-stop.js +48 -0
- package/hooks/gsd-cursor-subagent-start.js +50 -0
- package/hooks/gsd-cursor-subagent-stop.js +40 -0
- package/hooks/managed-hooks-registry.cjs +4 -0
- package/package.json +2 -1
- package/scripts/build-hooks.js +5 -1
- package/scripts/lint-phase-id-drift.cjs +150 -0
- package/scripts/run-tests.cjs +21 -1
|
@@ -10,7 +10,7 @@ const capabilities = {
|
|
|
10
10
|
"ai-integration": {
|
|
11
11
|
"id": "ai-integration",
|
|
12
12
|
"role": "feature",
|
|
13
|
-
"version": "1.7.0-rc.
|
|
13
|
+
"version": "1.7.0-rc.5",
|
|
14
14
|
"title": "AI design contract",
|
|
15
15
|
"description": "AI-SPEC design contract workflow for phases that build AI systems; owns the AI integration command, agents, and workflow.ai_integration_phase activation key.",
|
|
16
16
|
"tier": "full",
|
|
@@ -39,6 +39,11 @@ const capabilities = {
|
|
|
39
39
|
"type": "boolean",
|
|
40
40
|
"default": true,
|
|
41
41
|
"description": "Prompt for an AI-SPEC design contract before planning phases that involve AI systems."
|
|
42
|
+
},
|
|
43
|
+
"workflow.api_coverage_gate": {
|
|
44
|
+
"type": "boolean",
|
|
45
|
+
"default": true,
|
|
46
|
+
"description": "Require an explicit API-coverage decision (full-by-default, opt-out-not-opt-in) before a phase that integrates an external API/SDK/service can seal. At plan:pre the planner is prompted to enumerate the API surface into COVERAGE.md; at verify:pre a blocking gate fails the seal unless the matrix exists with every non-integrated capability an explicit, reasoned opt-out. Independent of ai_integration_phase (applies to any external-API integration, not only AI)."
|
|
42
47
|
}
|
|
43
48
|
},
|
|
44
49
|
"steps": [
|
|
@@ -57,13 +62,40 @@ const capabilities = {
|
|
|
57
62
|
"onError": "skip"
|
|
58
63
|
}
|
|
59
64
|
],
|
|
60
|
-
"contributions": [
|
|
61
|
-
|
|
65
|
+
"contributions": [
|
|
66
|
+
{
|
|
67
|
+
"point": "plan:pre",
|
|
68
|
+
"into": "planner",
|
|
69
|
+
"fragment": {
|
|
70
|
+
"path": "fragments/api-coverage-plan-pre.md",
|
|
71
|
+
"inline": "# API Coverage Decision Checkpoint\n\n> Full API Coverage by Default — Opt Out, Never Opt In. Fires when a phase\n> integrates an external API / SDK / service. Most non-API phases will not fire\n> it — that is the point.\n\n## Why this exists\n\n\"We integrated the API\" too often silently means \"we integrated whatever the\nfirst use case exercised.\" Every un-built capability is then an invisible hole,\ndiscovered later by a user who reasonably expected it to work. The phase sealed\ngreen because its tasks completed; nobody decided the gaps were acceptable,\nbecause nobody enumerated them. This checkpoint makes the surface **visible and\ndecided** before the phase can seal.\n\n## Detect whether this phase integrates an external API\n\nThe detector is a deterministic scan over the phase scope. It strips fenced\ncode blocks first, so a trigger term inside a code snippet does not fire. It\nreturns a typed result: `{ detected, signals[], terms }`. Run it on the phase\nscope (the concatenation of this phase's ROADMAP section + the PLAN body):\n\n```bash\nSCOPE=\"$(cat \"${PHASE_DIR}\"/*-PLAN.md 2>/dev/null) $(gsd_run query roadmap.get-phase \"${PHASE}\" 2>/dev/null || true)\"\nAPI_COVERAGE_JSON=$(printf '%s' \"$SCOPE\" | node gsd-core/bin/lib/api-coverage.cjs --json 2>/dev/null || echo '{\"detected\":false,\"signals\":[]}')\n```\n\nRead `API_COVERAGE_JSON.detected`. Act on it only — do **not** pattern-match the\nprose yourself.\n\n**If `detected` is `false`:** this phase does not integrate an external API. Skip\nthe checkpoint entirely and continue planning. Do not raise it with the user.\n\n**If `detected` is `true`:** an external-API integration is in scope. You MUST\nproduce a **coverage matrix** before the plan is finalized.\n\n## Produce the coverage matrix\n\nEnumerate the external API's full **capability surface** — the verb/endpoint/method\nlist (e.g. for a music service: `search`, `play`, `pause`, `skip`, `set_volume`,\n`get_playlist`, `create_playlist`, `add_to_playlist`, …). For each capability\nrecord a decision, starting from **full coverage** as the default:\n\n| capability | decision | reason |\n|---|---|---|\n| `<capability-id>` | `INTEGRATE` \\| `OPT-OUT` | `<one-line reason if OPT-OUT>` |\n\nRules:\n\n- **`INTEGRATE` is the default.** Every capability starts as INTEGRATE; the\n matrix is the *subtraction record*.\n- **Every `OPT-OUT` MUST carry a one-line reason** (`not needed`, `not needed\n yet`, `explicitly out of scope`, …). An opt-out without a reason is an\n un-decided hole — the exact failure mode this gate exists to close.\n- **A second integration against the same need** (e.g. a second platform for the\n same capability) starts from the **same full-coverage baseline** as the first.\n Do not carry over the first integration's opt-outs silently — re-decide each\n capability for the new surface, so a first-class/fallback asymmetry cannot\n accumulate.\n\nWrite the matrix to `${PHASE_DIR}/COVERAGE.md` (canonical markdown-table form):\n\n```markdown\n# API Coverage — <service>\n\n> Full coverage by default. Opt-outs are explicit, reasoned decisions.\n\n| capability | decision | reason |\n|---|---|---|\n| search | INTEGRATE | |\n| playlists | INTEGRATE | |\n| skip | OPT-OUT | not needed yet — tracked for follow-up phase |\n```\n\nA fenced ` ```coverage ` JSON block is also accepted for machine-generated\nmatrices; the markdown table is preferred (human-editable, diff-friendly).\n\n## The seal-time gate\n\nThis checkpoint is enforced. At `verify:pre` the `api-coverage.verify-pre` gate\nruns `check api-coverage.verify-pre <phase-dir>`:\n\n- If `COVERAGE.md` exists, it is validated — every row needs a valid decision and\n every `OPT-OUT` a reason. A malformed/partial matrix **blocks the seal**.\n- If `COVERAGE.md` is absent, the detector runs again over the phase scope. If a\n strong external-API-integration signal is found, the seal is **blocked** until a\n matrix is produced. If no signal is found, the phase is treated as a non-API\n phase and the seal proceeds.\n\nSo: an API-integrating phase cannot seal without a decided matrix. Produce it at\nplan time; do not leave it for seal time.\n\n## Tuning the vocabulary (optional)\n\nThe trigger vocabulary is a curated, additive-only set in\n`gsd-core/bin/lib/api-coverage.cjs` (`DEFAULT_API_COVERAGE_TERMS`). To widen it\nfor a project, override at the call site:\n\n```bash\nprintf '%s' \"$SCOPE\" | node gsd-core/bin/lib/api-coverage.cjs --json \\\n --verbs integrate,wrap,connect,embed --nouns api,sdk,rest,grpc,webhook,plugin\n```\n\nThe whole checkpoint is toggleable via `workflow.api_coverage_gate` in\n`.planning/config.json`.\n"
|
|
72
|
+
},
|
|
73
|
+
"produces": [
|
|
74
|
+
"COVERAGE.md"
|
|
75
|
+
],
|
|
76
|
+
"consumes": [
|
|
77
|
+
"CONTEXT.md"
|
|
78
|
+
],
|
|
79
|
+
"when": "workflow.api_coverage_gate",
|
|
80
|
+
"onError": "skip"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"gates": [
|
|
84
|
+
{
|
|
85
|
+
"point": "verify:pre",
|
|
86
|
+
"check": {
|
|
87
|
+
"query": "api-coverage.verify-pre"
|
|
88
|
+
},
|
|
89
|
+
"when": "workflow.api_coverage_gate",
|
|
90
|
+
"blocking": true,
|
|
91
|
+
"onError": "halt"
|
|
92
|
+
}
|
|
93
|
+
]
|
|
62
94
|
},
|
|
63
95
|
"antigravity": {
|
|
64
96
|
"id": "antigravity",
|
|
65
97
|
"role": "runtime",
|
|
66
|
-
"version": "1.7.0-rc.
|
|
98
|
+
"version": "1.7.0-rc.5",
|
|
67
99
|
"title": "Antigravity",
|
|
68
100
|
"description": "Google Antigravity IDE — nested under ~/.gemini/antigravity; probed across 1.x and 2.x layouts; Gemini hook event dialect; flat skill layout; tier-1 support.",
|
|
69
101
|
"tier": "core",
|
|
@@ -157,7 +189,7 @@ const capabilities = {
|
|
|
157
189
|
"assumption-delta": {
|
|
158
190
|
"id": "assumption-delta",
|
|
159
191
|
"role": "feature",
|
|
160
|
-
"version": "1.7.0-rc.
|
|
192
|
+
"version": "1.7.0-rc.5",
|
|
161
193
|
"title": "Assumption-delta architecture checkpoint",
|
|
162
194
|
"description": "Rarely-firing advisory checkpoint that triggers when a phase makes something plural, optional, or chosen that used to be singular, required, or derived. Surfaces one identity-model question (promote the new general representation to primary, or add it alongside?) so a silent primary-key drift does not accumulate into a later user-facing bug. Non-blocking; fires only on a detected signal.",
|
|
163
195
|
"tier": "full",
|
|
@@ -203,7 +235,7 @@ const capabilities = {
|
|
|
203
235
|
"audit": {
|
|
204
236
|
"id": "audit",
|
|
205
237
|
"role": "feature",
|
|
206
|
-
"version": "1.7.0-rc.
|
|
238
|
+
"version": "1.7.0-rc.5",
|
|
207
239
|
"title": "Audit",
|
|
208
240
|
"description": "Open-artifact audit and UAT-gap audit for milestone close gates; exposes `gsd-tools audit-uat` (cross-phase UAT outstanding items) and `gsd-tools audit-open` (structured open-artifact scan across debug, tasks, threads, todos, seeds, UAT, verification, context-questions).",
|
|
209
241
|
"tier": "full",
|
|
@@ -240,7 +272,7 @@ const capabilities = {
|
|
|
240
272
|
"augment": {
|
|
241
273
|
"id": "augment",
|
|
242
274
|
"role": "runtime",
|
|
243
|
-
"version": "1.7.0-rc.
|
|
275
|
+
"version": "1.7.0-rc.5",
|
|
244
276
|
"title": "Augment Code",
|
|
245
277
|
"description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
246
278
|
"tier": "core",
|
|
@@ -343,7 +375,7 @@ const capabilities = {
|
|
|
343
375
|
"claude": {
|
|
344
376
|
"id": "claude",
|
|
345
377
|
"role": "runtime",
|
|
346
|
-
"version": "1.7.0-rc.
|
|
378
|
+
"version": "1.7.0-rc.5",
|
|
347
379
|
"title": "Claude Code",
|
|
348
380
|
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
|
|
349
381
|
"tier": "core",
|
|
@@ -421,13 +453,30 @@ const capabilities = {
|
|
|
421
453
|
"stateIO": "filesystem",
|
|
422
454
|
"transport": "mcp",
|
|
423
455
|
"runtime": "node"
|
|
456
|
+
},
|
|
457
|
+
"hostBehaviors": {
|
|
458
|
+
"attributionSource": "settings-json-commit",
|
|
459
|
+
"authorsCanonicalWorkflow": true,
|
|
460
|
+
"localInstallStyle": "legacy-flat",
|
|
461
|
+
"permissionsSchema": "claude",
|
|
462
|
+
"settingsFileByScope": {
|
|
463
|
+
"local": "settings.local.json",
|
|
464
|
+
"global": "settings.json"
|
|
465
|
+
},
|
|
466
|
+
"sourceMarkerFile": ".gsd-source",
|
|
467
|
+
"agentFrontmatterExtensions": [
|
|
468
|
+
"effort"
|
|
469
|
+
],
|
|
470
|
+
"ownsClaudePaths": true,
|
|
471
|
+
"nativeModelAliases": true,
|
|
472
|
+
"skillsGlobalOnboarding": true
|
|
424
473
|
}
|
|
425
474
|
}
|
|
426
475
|
},
|
|
427
476
|
"claude-orchestration": {
|
|
428
477
|
"id": "claude-orchestration",
|
|
429
478
|
"role": "feature",
|
|
430
|
-
"version": "1.7.0-rc.
|
|
479
|
+
"version": "1.7.0-rc.5",
|
|
431
480
|
"title": "Claude orchestration (Workflow backend)",
|
|
432
481
|
"description": "Default-off, BETA, claude-only capability that adopts Claude Code's Workflow tool (the engine behind /effort ultracode) as an optional parallel-execution backend for the GSD loop. When the runtime exposes the Workflow tool and claude_orchestration.execution_backend resolves to 'workflow', execute-phase emits a generated Workflow script (waves -> parallel() barriers, plans -> agent({ agentType: 'gsd-executor', isolation: 'worktree' }), files_modified overlap -> separate sequential stages, resumeFromRunId wired to the phase run id, shared token budget) that composes the SAME gsd-executor agent and worktree isolation the inline path uses, restoring the wave parallelism the #853 backgrounded-agent nesting limitation forces inline on Claude Code. (The plan-checker and verifier remain inline until separately wired — this capability delivers the parallel-execution backend, not those gates.) Also folds the ultraplan plan-offload under one runtime gate (plan:* surface). On any runtime lacking the Workflow tool, or when the capability is disabled, behaviour is byte-identical to today (inline/manual dispatch). Detection + emission live in gsd-core/bin/lib/claude-orchestration.cjs (pure, fail-closed). Mirrors the existing gsd-ultraplan-phase BETA-isolation posture.",
|
|
433
482
|
"tier": "full",
|
|
@@ -514,7 +563,7 @@ const capabilities = {
|
|
|
514
563
|
"cline": {
|
|
515
564
|
"id": "cline",
|
|
516
565
|
"role": "runtime",
|
|
517
|
-
"version": "1.7.0-rc.
|
|
566
|
+
"version": "1.7.0-rc.5",
|
|
518
567
|
"title": "Cline",
|
|
519
568
|
"description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
|
|
520
569
|
"tier": "core",
|
|
@@ -569,13 +618,21 @@ const capabilities = {
|
|
|
569
618
|
"stateIO": "filesystem",
|
|
570
619
|
"transport": "mcp",
|
|
571
620
|
"runtime": "node"
|
|
621
|
+
},
|
|
622
|
+
"hostBehaviors": {
|
|
623
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
624
|
+
"frontmatterDialect": "cline",
|
|
625
|
+
"skipSharedHooksInstall": true,
|
|
626
|
+
"localTargetIsProjectRoot": true,
|
|
627
|
+
"clineRulesSurface": true,
|
|
628
|
+
"localCommandsViaRules": true
|
|
572
629
|
}
|
|
573
630
|
}
|
|
574
631
|
},
|
|
575
632
|
"code-review": {
|
|
576
633
|
"id": "code-review",
|
|
577
634
|
"role": "feature",
|
|
578
|
-
"version": "1.7.0-rc.
|
|
635
|
+
"version": "1.7.0-rc.5",
|
|
579
636
|
"title": "Code review",
|
|
580
637
|
"description": "Source-file code review and review-fix workflow support for completed execution work.",
|
|
581
638
|
"tier": "full",
|
|
@@ -636,7 +693,7 @@ const capabilities = {
|
|
|
636
693
|
"codebuddy": {
|
|
637
694
|
"id": "codebuddy",
|
|
638
695
|
"role": "runtime",
|
|
639
|
-
"version": "1.7.0-rc.
|
|
696
|
+
"version": "1.7.0-rc.5",
|
|
640
697
|
"title": "CodeBuddy",
|
|
641
698
|
"description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
642
699
|
"tier": "core",
|
|
@@ -739,7 +796,7 @@ const capabilities = {
|
|
|
739
796
|
"codex": {
|
|
740
797
|
"id": "codex",
|
|
741
798
|
"role": "runtime",
|
|
742
|
-
"version": "1.7.0-rc.
|
|
799
|
+
"version": "1.7.0-rc.5",
|
|
743
800
|
"title": "OpenAI Codex CLI",
|
|
744
801
|
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
|
|
745
802
|
"tier": "core",
|
|
@@ -765,7 +822,8 @@ const capabilities = {
|
|
|
765
822
|
"prefix": "gsd-",
|
|
766
823
|
"nesting": "flat",
|
|
767
824
|
"recursive": false,
|
|
768
|
-
"converter": "convertClaudeCommandToCodexSkill"
|
|
825
|
+
"converter": "convertClaudeCommandToCodexSkill",
|
|
826
|
+
"home": ".agents"
|
|
769
827
|
}
|
|
770
828
|
],
|
|
771
829
|
"local": [
|
|
@@ -775,7 +833,8 @@ const capabilities = {
|
|
|
775
833
|
"prefix": "gsd-",
|
|
776
834
|
"nesting": "flat",
|
|
777
835
|
"recursive": false,
|
|
778
|
-
"converter": "convertClaudeCommandToCodexSkill"
|
|
836
|
+
"converter": "convertClaudeCommandToCodexSkill",
|
|
837
|
+
"home": ".agents"
|
|
779
838
|
}
|
|
780
839
|
]
|
|
781
840
|
},
|
|
@@ -787,7 +846,11 @@ const capabilities = {
|
|
|
787
846
|
"installSurface": "codex-toml",
|
|
788
847
|
"writesSharedSettings": false,
|
|
789
848
|
"permissionWriter": null,
|
|
790
|
-
"extendedHookEvents": [
|
|
849
|
+
"extendedHookEvents": [
|
|
850
|
+
"SubagentStop",
|
|
851
|
+
"Stop",
|
|
852
|
+
"PreCompact"
|
|
853
|
+
],
|
|
791
854
|
"hostIntegration": {
|
|
792
855
|
"embeddingMode": "declarative",
|
|
793
856
|
"commandSurface": "slash-file",
|
|
@@ -804,13 +867,20 @@ const capabilities = {
|
|
|
804
867
|
"stateIO": "filesystem",
|
|
805
868
|
"transport": "mcp",
|
|
806
869
|
"runtime": "node"
|
|
870
|
+
},
|
|
871
|
+
"hostBehaviors": {
|
|
872
|
+
"reapplyCommand": "$gsd-update --reapply",
|
|
873
|
+
"tomlConfigInstall": true,
|
|
874
|
+
"cleanupSkillSidecars": true,
|
|
875
|
+
"agentTomlFiles": true,
|
|
876
|
+
"frontmatterDialect": "codex"
|
|
807
877
|
}
|
|
808
878
|
}
|
|
809
879
|
},
|
|
810
880
|
"copilot": {
|
|
811
881
|
"id": "copilot",
|
|
812
882
|
"role": "runtime",
|
|
813
|
-
"version": "1.7.0-rc.
|
|
883
|
+
"version": "1.7.0-rc.5",
|
|
814
884
|
"title": "GitHub Copilot",
|
|
815
885
|
"description": "GitHub Copilot (VS Code) — markdown config format; copilot-inline hook surface; no hook events emitted; flat skill nesting (unconfirmed recursive loader); tier-2 support.",
|
|
816
886
|
"tier": "core",
|
|
@@ -891,13 +961,16 @@ const capabilities = {
|
|
|
891
961
|
"stateIO": "filesystem",
|
|
892
962
|
"transport": "mcp",
|
|
893
963
|
"runtime": "undocumented"
|
|
964
|
+
},
|
|
965
|
+
"hostBehaviors": {
|
|
966
|
+
"reapplyCommand": "/gsd-update --reapply"
|
|
894
967
|
}
|
|
895
968
|
}
|
|
896
969
|
},
|
|
897
970
|
"cursor": {
|
|
898
971
|
"id": "cursor",
|
|
899
972
|
"role": "runtime",
|
|
900
|
-
"version": "1.7.0-rc.
|
|
973
|
+
"version": "1.7.0-rc.5",
|
|
901
974
|
"title": "Cursor",
|
|
902
975
|
"description": "Cursor IDE — skills + converted commands artifact layout; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
|
|
903
976
|
"tier": "core",
|
|
@@ -994,13 +1067,30 @@ const capabilities = {
|
|
|
994
1067
|
"stateIO": "filesystem",
|
|
995
1068
|
"transport": "mcp",
|
|
996
1069
|
"runtime": "node"
|
|
1070
|
+
},
|
|
1071
|
+
"hostBehaviors": {
|
|
1072
|
+
"reapplyCommand": "gsd-update --reapply (mention the skill name)",
|
|
1073
|
+
"frontmatterDialect": "cursor",
|
|
1074
|
+
"hooksJsonSurface": true,
|
|
1075
|
+
"skipSharedHooksInstall": true,
|
|
1076
|
+
"reportCommandsDir": true,
|
|
1077
|
+
"skipUpdateBannerCommand": true,
|
|
1078
|
+
"skipSettingsUi": true,
|
|
1079
|
+
"managedHookEvents": [
|
|
1080
|
+
"sessionStart",
|
|
1081
|
+
"postToolUse",
|
|
1082
|
+
"preToolUse",
|
|
1083
|
+
"stop",
|
|
1084
|
+
"subagentStart",
|
|
1085
|
+
"subagentStop"
|
|
1086
|
+
]
|
|
997
1087
|
}
|
|
998
1088
|
}
|
|
999
1089
|
},
|
|
1000
1090
|
"drift": {
|
|
1001
1091
|
"id": "drift",
|
|
1002
1092
|
"role": "feature",
|
|
1003
|
-
"version": "1.7.0-rc.
|
|
1093
|
+
"version": "1.7.0-rc.5",
|
|
1004
1094
|
"title": "Drift detection gates",
|
|
1005
1095
|
"description": "Drift detection gates for the planning loop. At execute:wave:post: a blocking schema drift gate (detects schema files changed without a database push) and a non-blocking codebase drift gate (detects structural additions not reflected in STRUCTURE.md). At plan:pre: a non-blocking, warn-only codebase drift gate (gated on workflow.plan_drift_precheck) that flags a stale codebase map before planning, so plans are authored against a fresh STRUCTURE.md instead of discovering drift mid-execution.",
|
|
1006
1096
|
"tier": "full",
|
|
@@ -1078,7 +1168,7 @@ const capabilities = {
|
|
|
1078
1168
|
"external-job": {
|
|
1079
1169
|
"id": "external-job",
|
|
1080
1170
|
"role": "feature",
|
|
1081
|
-
"version": "1.7.0-rc.
|
|
1171
|
+
"version": "1.7.0-rc.5",
|
|
1082
1172
|
"title": "Async external-job scheduler adapter",
|
|
1083
1173
|
"description": "Default-off producer of the async external-job manifest (#1164). At execute:wave:post an executor can externalize long-running compute (SLURM first, scheduler-pluggable), commit a .planning/async-jobs/<job>.json manifest, defer SUMMARY.md, and return external_job_waiting. The core loop (#1165) consumes the manifest; this capability is the only thing that writes it. NOTE on contribution point: #1164 specifies execute:wave:pre, but execute-phase.md only dispatches execute:wave:post today (wave:pre is declared in the loop host contract but not rendered); wiring wave:pre dispatch is a core-loop change #1164 explicitly puts out of scope, so this capability registers at wave:post and the executor honors the runtime_budget classification guidance before running any tagged task. The adapter (scripts/slurm-adapter.cjs) reads external_job.submit_timeout_ms / poll_timeout_ms / artifact_dir through the canonical capability-config seam (env override > config > registry default).",
|
|
1084
1174
|
"tier": "full",
|
|
@@ -1161,7 +1251,7 @@ const capabilities = {
|
|
|
1161
1251
|
"gap-analysis": {
|
|
1162
1252
|
"id": "gap-analysis",
|
|
1163
1253
|
"role": "feature",
|
|
1164
|
-
"version": "1.7.0-rc.
|
|
1254
|
+
"version": "1.7.0-rc.5",
|
|
1165
1255
|
"title": "Post-planning gap analysis",
|
|
1166
1256
|
"description": "Proactive, non-blocking post-planning coverage report. After all PLAN.md files are generated, cross-references every REQ-ID and D-ID from REQUIREMENTS.md and CONTEXT.md against plan bodies. Emits a Source | Item | Status table. Does not block phase advancement.",
|
|
1167
1257
|
"tier": "standard",
|
|
@@ -1202,7 +1292,7 @@ const capabilities = {
|
|
|
1202
1292
|
"graphify": {
|
|
1203
1293
|
"id": "graphify",
|
|
1204
1294
|
"role": "feature",
|
|
1205
|
-
"version": "1.7.0-rc.
|
|
1295
|
+
"version": "1.7.0-rc.5",
|
|
1206
1296
|
"title": "Knowledge graph",
|
|
1207
1297
|
"description": "Build, query, and inspect the project knowledge graph in `.planning/graphs/`; exposes graphify CLI subcommands (build, query, status, diff) and the /gsd-graphify skill.",
|
|
1208
1298
|
"tier": "full",
|
|
@@ -1243,7 +1333,7 @@ const capabilities = {
|
|
|
1243
1333
|
"hermes": {
|
|
1244
1334
|
"id": "hermes",
|
|
1245
1335
|
"role": "runtime",
|
|
1246
|
-
"version": "1.7.0-rc.
|
|
1336
|
+
"version": "1.7.0-rc.5",
|
|
1247
1337
|
"title": "Hermes Agent",
|
|
1248
1338
|
"description": "Hermes Agent (NousResearch) — skills nest under skills/gsd/ category bucket; nested skill layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
1249
1339
|
"tier": "core",
|
|
@@ -1292,6 +1382,21 @@ const capabilities = {
|
|
|
1292
1382
|
"writesSharedSettings": true,
|
|
1293
1383
|
"permissionWriter": null,
|
|
1294
1384
|
"extendedHookEvents": [],
|
|
1385
|
+
"extensionEvents": "hermes",
|
|
1386
|
+
"hostBehaviors": {
|
|
1387
|
+
"skillFrontmatterVersion": true,
|
|
1388
|
+
"skillsManifestPrefix": "skills/gsd/",
|
|
1389
|
+
"trackCategoryDescription": true,
|
|
1390
|
+
"writeCategoryDescription": true,
|
|
1391
|
+
"reportSkillsCount": true,
|
|
1392
|
+
"legacyCommandsGsdCleanup": true,
|
|
1393
|
+
"brandingRewrites": {
|
|
1394
|
+
"CLAUDE.md": "HERMES.md",
|
|
1395
|
+
"Claude Code": "Hermes Agent",
|
|
1396
|
+
".claude/": ".hermes/"
|
|
1397
|
+
},
|
|
1398
|
+
"reapplyCommand": "gsd-update --reapply (mention the skill name)"
|
|
1399
|
+
},
|
|
1295
1400
|
"hostIntegration": {
|
|
1296
1401
|
"embeddingMode": "imperative",
|
|
1297
1402
|
"commandSurface": "slash-programmatic",
|
|
@@ -1314,7 +1419,7 @@ const capabilities = {
|
|
|
1314
1419
|
"intel": {
|
|
1315
1420
|
"id": "intel",
|
|
1316
1421
|
"role": "feature",
|
|
1317
|
-
"version": "1.7.0-rc.
|
|
1422
|
+
"version": "1.7.0-rc.5",
|
|
1318
1423
|
"title": "Codebase intelligence",
|
|
1319
1424
|
"description": "Code-intelligence store for codebase querying, diff, snapshot, and API-surface extraction; exposes `gsd-tools intel` subcommands (query, status, update, diff, snapshot, patch-meta, validate, extract-exports, api-surface) and backs `/gsd-map-codebase` and `gsd-intel-updater`.",
|
|
1320
1425
|
"tier": "full",
|
|
@@ -1366,7 +1471,7 @@ const capabilities = {
|
|
|
1366
1471
|
"kilo": {
|
|
1367
1472
|
"id": "kilo",
|
|
1368
1473
|
"role": "runtime",
|
|
1369
|
-
"version": "1.7.0-rc.
|
|
1474
|
+
"version": "1.7.0-rc.5",
|
|
1370
1475
|
"title": "Kilo Code",
|
|
1371
1476
|
"description": "Kilo Code — XDG-based config dir; global skills at ~/.kilo/skills (separate from XDG config); flat command/ + skills artifact layout; no lifecycle hook registration; tier-2 support.",
|
|
1372
1477
|
"tier": "core",
|
|
@@ -1453,13 +1558,21 @@ const capabilities = {
|
|
|
1453
1558
|
"stateIO": "filesystem",
|
|
1454
1559
|
"transport": "mcp",
|
|
1455
1560
|
"runtime": "bun"
|
|
1561
|
+
},
|
|
1562
|
+
"hostBehaviors": {
|
|
1563
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
1564
|
+
"attributionConfigResolver": "kilo",
|
|
1565
|
+
"flatCommandDir": "command",
|
|
1566
|
+
"combinedFamilyInstall": true,
|
|
1567
|
+
"frontmatterDialect": "kilo",
|
|
1568
|
+
"skipUpdateBannerCommand": true
|
|
1456
1569
|
}
|
|
1457
1570
|
}
|
|
1458
1571
|
},
|
|
1459
1572
|
"kimi": {
|
|
1460
1573
|
"id": "kimi",
|
|
1461
1574
|
"role": "runtime",
|
|
1462
|
-
"version": "1.7.0-rc.
|
|
1575
|
+
"version": "1.7.0-rc.5",
|
|
1463
1576
|
"title": "Kimi CLI",
|
|
1464
1577
|
"description": "Kimi CLI (Moonshot AI) — generic agents root at ~/.config/agents; skills + kimi-agents artifact layout; no hook surface; no hook events; tier-2 support.",
|
|
1465
1578
|
"tier": "core",
|
|
@@ -1533,7 +1646,7 @@ const capabilities = {
|
|
|
1533
1646
|
"mempalace": {
|
|
1534
1647
|
"id": "mempalace",
|
|
1535
1648
|
"role": "feature",
|
|
1536
|
-
"version": "1.7.0-rc.
|
|
1649
|
+
"version": "1.7.0-rc.5",
|
|
1537
1650
|
"title": "MemPalace memory",
|
|
1538
1651
|
"description": "Cross-session, cross-project memory: deliberate recall before discuss/plan and verbatim capture + temporal-KG sync at phase boundaries, via the MemPalace MCP server and CLI.",
|
|
1539
1652
|
"tier": "full",
|
|
@@ -1707,7 +1820,7 @@ const capabilities = {
|
|
|
1707
1820
|
"nyquist": {
|
|
1708
1821
|
"id": "nyquist",
|
|
1709
1822
|
"role": "feature",
|
|
1710
|
-
"version": "1.7.0-rc.
|
|
1823
|
+
"version": "1.7.0-rc.5",
|
|
1711
1824
|
"title": "Nyquist validation",
|
|
1712
1825
|
"description": "Validation coverage audit that maps executed work back to tests and manual-only evidence.",
|
|
1713
1826
|
"tier": "full",
|
|
@@ -1757,7 +1870,7 @@ const capabilities = {
|
|
|
1757
1870
|
"opencode": {
|
|
1758
1871
|
"id": "opencode",
|
|
1759
1872
|
"role": "runtime",
|
|
1760
|
-
"version": "1.7.0-rc.
|
|
1873
|
+
"version": "1.7.0-rc.5",
|
|
1761
1874
|
"title": "OpenCode",
|
|
1762
1875
|
"description": "OpenCode — XDG-based config dir; flat command/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
|
|
1763
1876
|
"tier": "core",
|
|
@@ -1831,22 +1944,38 @@ const capabilities = {
|
|
|
1831
1944
|
"namedDispatch": true,
|
|
1832
1945
|
"nested": "undocumented",
|
|
1833
1946
|
"maxDepth": "undocumented",
|
|
1834
|
-
"background":
|
|
1947
|
+
"background": true,
|
|
1835
1948
|
"subagentToolkit": "full",
|
|
1836
|
-
"backgroundDispatch":
|
|
1949
|
+
"backgroundDispatch": true
|
|
1837
1950
|
},
|
|
1838
1951
|
"modelMode": "active",
|
|
1839
1952
|
"hookBus": "host",
|
|
1840
1953
|
"stateIO": "filesystem",
|
|
1841
1954
|
"transport": "mcp",
|
|
1842
1955
|
"runtime": "bun"
|
|
1956
|
+
},
|
|
1957
|
+
"hostBehaviors": {
|
|
1958
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
1959
|
+
"attributionConfigResolver": "opencode",
|
|
1960
|
+
"flatCommandDir": "command",
|
|
1961
|
+
"combinedFamilyInstall": true,
|
|
1962
|
+
"frontmatterDialect": "opencode",
|
|
1963
|
+
"nativePlugin": {
|
|
1964
|
+
"dir": "plugins",
|
|
1965
|
+
"file": "gsd-core.js",
|
|
1966
|
+
"source": ".opencode/plugins/gsd-core.js"
|
|
1967
|
+
},
|
|
1968
|
+
"skipHomePrefixSubstitution": true,
|
|
1969
|
+
"skipSettingsUi": true,
|
|
1970
|
+
"skipUpdateBannerCommand": true,
|
|
1971
|
+
"skipCodexSkillsManifest": true
|
|
1843
1972
|
}
|
|
1844
1973
|
}
|
|
1845
1974
|
},
|
|
1846
1975
|
"pattern-mapper": {
|
|
1847
1976
|
"id": "pattern-mapper",
|
|
1848
1977
|
"role": "feature",
|
|
1849
|
-
"version": "1.7.0-rc.
|
|
1978
|
+
"version": "1.7.0-rc.5",
|
|
1850
1979
|
"title": "Pattern mapping",
|
|
1851
1980
|
"description": "Optional codebase-pattern mapping before planning; owns the pattern mapper agent and workflow.pattern_mapper activation key.",
|
|
1852
1981
|
"tier": "full",
|
|
@@ -1900,7 +2029,7 @@ const capabilities = {
|
|
|
1900
2029
|
"profile-pipeline": {
|
|
1901
2030
|
"id": "profile-pipeline",
|
|
1902
2031
|
"role": "feature",
|
|
1903
|
-
"version": "1.7.0-rc.
|
|
2032
|
+
"version": "1.7.0-rc.5",
|
|
1904
2033
|
"title": "Developer profiling pipeline",
|
|
1905
2034
|
"description": "Developer behavioral profiling from Claude Code session history; scans session JSONL files, extracts and samples user messages, and generates profile artifacts (USER-PROFILE.md, dev-preferences.md, CLAUDE.md sections). Exposes eight `gsd-tools` commands: scan-sessions, extract-messages, profile-sample (pipeline phase) and write-profile, profile-questionnaire, generate-dev-preferences, generate-claude-profile, generate-claude-md (output phase). Backs the /gsd-profile-user skill and gsd-user-profiler agent.",
|
|
1906
2035
|
"tier": "full",
|
|
@@ -1977,7 +2106,7 @@ const capabilities = {
|
|
|
1977
2106
|
"qwen": {
|
|
1978
2107
|
"id": "qwen",
|
|
1979
2108
|
"role": "runtime",
|
|
1980
|
-
"version": "1.7.0-rc.
|
|
2109
|
+
"version": "1.7.0-rc.5",
|
|
1981
2110
|
"title": "Qwen Code",
|
|
1982
2111
|
"description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
1983
2112
|
"tier": "core",
|
|
@@ -2052,7 +2181,7 @@ const capabilities = {
|
|
|
2052
2181
|
"research": {
|
|
2053
2182
|
"id": "research",
|
|
2054
2183
|
"role": "feature",
|
|
2055
|
-
"version": "1.7.0-rc.
|
|
2184
|
+
"version": "1.7.0-rc.5",
|
|
2056
2185
|
"title": "Phase research",
|
|
2057
2186
|
"description": "Optional phase research before planning; owns the phase researcher agent and workflow.research activation key.",
|
|
2058
2187
|
"tier": "standard",
|
|
@@ -2104,7 +2233,7 @@ const capabilities = {
|
|
|
2104
2233
|
"schema-gate": {
|
|
2105
2234
|
"id": "schema-gate",
|
|
2106
2235
|
"role": "feature",
|
|
2107
|
-
"version": "1.7.0-rc.
|
|
2236
|
+
"version": "1.7.0-rc.5",
|
|
2108
2237
|
"title": "Schema push detection gate",
|
|
2109
2238
|
"description": "Detects ORM schema-relevant files in the phase scope during planning and injects a mandatory [BLOCKING] schema push task into the plan. Prevents false-positive verification where build/types pass because TypeScript types come from config, not the live database.",
|
|
2110
2239
|
"tier": "full",
|
|
@@ -2150,7 +2279,7 @@ const capabilities = {
|
|
|
2150
2279
|
"security": {
|
|
2151
2280
|
"id": "security",
|
|
2152
2281
|
"role": "feature",
|
|
2153
|
-
"version": "1.7.0-rc.
|
|
2282
|
+
"version": "1.7.0-rc.5",
|
|
2154
2283
|
"title": "Security enforcement",
|
|
2155
2284
|
"description": "Threat mitigation verification and ship-time security blocking for phases with security enforcement enabled.",
|
|
2156
2285
|
"tier": "full",
|
|
@@ -2249,7 +2378,7 @@ const capabilities = {
|
|
|
2249
2378
|
"tdd": {
|
|
2250
2379
|
"id": "tdd",
|
|
2251
2380
|
"role": "feature",
|
|
2252
|
-
"version": "1.7.0-rc.
|
|
2381
|
+
"version": "1.7.0-rc.5",
|
|
2253
2382
|
"title": "Test-driven development",
|
|
2254
2383
|
"description": "Injects TDD heuristics into the planner and enforces RED/GREEN gate compliance on type:tdd plans after execution. Owns workflow.tdd_mode; the --tdd CLI flag is the ephemeral override.",
|
|
2255
2384
|
"tier": "full",
|
|
@@ -2302,7 +2431,7 @@ const capabilities = {
|
|
|
2302
2431
|
"trae": {
|
|
2303
2432
|
"id": "trae",
|
|
2304
2433
|
"role": "runtime",
|
|
2305
|
-
"version": "1.7.0-rc.
|
|
2434
|
+
"version": "1.7.0-rc.5",
|
|
2306
2435
|
"title": "Trae IDE",
|
|
2307
2436
|
"description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
|
|
2308
2437
|
"tier": "core",
|
|
@@ -2388,7 +2517,7 @@ const capabilities = {
|
|
|
2388
2517
|
"ui": {
|
|
2389
2518
|
"id": "ui",
|
|
2390
2519
|
"role": "feature",
|
|
2391
|
-
"version": "1.7.0-rc.
|
|
2520
|
+
"version": "1.7.0-rc.5",
|
|
2392
2521
|
"title": "UI design contracts",
|
|
2393
2522
|
"description": "UI-SPEC design contract + retrospective UI audit for frontend phases.",
|
|
2394
2523
|
"tier": "full",
|
|
@@ -2483,7 +2612,7 @@ const capabilities = {
|
|
|
2483
2612
|
"windsurf": {
|
|
2484
2613
|
"id": "windsurf",
|
|
2485
2614
|
"role": "runtime",
|
|
2486
|
-
"version": "1.7.0-rc.
|
|
2615
|
+
"version": "1.7.0-rc.5",
|
|
2487
2616
|
"title": "Windsurf",
|
|
2488
2617
|
"description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; no hook surface; no hook events; tier-2 support.",
|
|
2489
2618
|
"tier": "core",
|
|
@@ -2562,7 +2691,7 @@ const capabilities = {
|
|
|
2562
2691
|
"zcode": {
|
|
2563
2692
|
"id": "zcode",
|
|
2564
2693
|
"role": "runtime",
|
|
2565
|
-
"version": "1.7.0-rc.
|
|
2694
|
+
"version": "1.7.0-rc.5",
|
|
2566
2695
|
"title": "ZCode",
|
|
2567
2696
|
"description": "ZCode (Z.ai) — desktop Agentic Development Environment for GLM-5.2; Claude-shaped nested skills at ~/.zcode/skills/<name>/SKILL.md, slash commands, named subagents, native MCP; declarative plugin surface; profile-marker install; tier-2 community support.",
|
|
2568
2697
|
"tier": "core",
|
|
@@ -2832,6 +2961,23 @@ const byLoopPoint = {
|
|
|
2832
2961
|
}
|
|
2833
2962
|
],
|
|
2834
2963
|
"contributions": [
|
|
2964
|
+
{
|
|
2965
|
+
"capId": "ai-integration",
|
|
2966
|
+
"point": "plan:pre",
|
|
2967
|
+
"into": "planner",
|
|
2968
|
+
"fragment": {
|
|
2969
|
+
"path": "fragments/api-coverage-plan-pre.md",
|
|
2970
|
+
"inline": "# API Coverage Decision Checkpoint\n\n> Full API Coverage by Default — Opt Out, Never Opt In. Fires when a phase\n> integrates an external API / SDK / service. Most non-API phases will not fire\n> it — that is the point.\n\n## Why this exists\n\n\"We integrated the API\" too often silently means \"we integrated whatever the\nfirst use case exercised.\" Every un-built capability is then an invisible hole,\ndiscovered later by a user who reasonably expected it to work. The phase sealed\ngreen because its tasks completed; nobody decided the gaps were acceptable,\nbecause nobody enumerated them. This checkpoint makes the surface **visible and\ndecided** before the phase can seal.\n\n## Detect whether this phase integrates an external API\n\nThe detector is a deterministic scan over the phase scope. It strips fenced\ncode blocks first, so a trigger term inside a code snippet does not fire. It\nreturns a typed result: `{ detected, signals[], terms }`. Run it on the phase\nscope (the concatenation of this phase's ROADMAP section + the PLAN body):\n\n```bash\nSCOPE=\"$(cat \"${PHASE_DIR}\"/*-PLAN.md 2>/dev/null) $(gsd_run query roadmap.get-phase \"${PHASE}\" 2>/dev/null || true)\"\nAPI_COVERAGE_JSON=$(printf '%s' \"$SCOPE\" | node gsd-core/bin/lib/api-coverage.cjs --json 2>/dev/null || echo '{\"detected\":false,\"signals\":[]}')\n```\n\nRead `API_COVERAGE_JSON.detected`. Act on it only — do **not** pattern-match the\nprose yourself.\n\n**If `detected` is `false`:** this phase does not integrate an external API. Skip\nthe checkpoint entirely and continue planning. Do not raise it with the user.\n\n**If `detected` is `true`:** an external-API integration is in scope. You MUST\nproduce a **coverage matrix** before the plan is finalized.\n\n## Produce the coverage matrix\n\nEnumerate the external API's full **capability surface** — the verb/endpoint/method\nlist (e.g. for a music service: `search`, `play`, `pause`, `skip`, `set_volume`,\n`get_playlist`, `create_playlist`, `add_to_playlist`, …). For each capability\nrecord a decision, starting from **full coverage** as the default:\n\n| capability | decision | reason |\n|---|---|---|\n| `<capability-id>` | `INTEGRATE` \\| `OPT-OUT` | `<one-line reason if OPT-OUT>` |\n\nRules:\n\n- **`INTEGRATE` is the default.** Every capability starts as INTEGRATE; the\n matrix is the *subtraction record*.\n- **Every `OPT-OUT` MUST carry a one-line reason** (`not needed`, `not needed\n yet`, `explicitly out of scope`, …). An opt-out without a reason is an\n un-decided hole — the exact failure mode this gate exists to close.\n- **A second integration against the same need** (e.g. a second platform for the\n same capability) starts from the **same full-coverage baseline** as the first.\n Do not carry over the first integration's opt-outs silently — re-decide each\n capability for the new surface, so a first-class/fallback asymmetry cannot\n accumulate.\n\nWrite the matrix to `${PHASE_DIR}/COVERAGE.md` (canonical markdown-table form):\n\n```markdown\n# API Coverage — <service>\n\n> Full coverage by default. Opt-outs are explicit, reasoned decisions.\n\n| capability | decision | reason |\n|---|---|---|\n| search | INTEGRATE | |\n| playlists | INTEGRATE | |\n| skip | OPT-OUT | not needed yet — tracked for follow-up phase |\n```\n\nA fenced ` ```coverage ` JSON block is also accepted for machine-generated\nmatrices; the markdown table is preferred (human-editable, diff-friendly).\n\n## The seal-time gate\n\nThis checkpoint is enforced. At `verify:pre` the `api-coverage.verify-pre` gate\nruns `check api-coverage.verify-pre <phase-dir>`:\n\n- If `COVERAGE.md` exists, it is validated — every row needs a valid decision and\n every `OPT-OUT` a reason. A malformed/partial matrix **blocks the seal**.\n- If `COVERAGE.md` is absent, the detector runs again over the phase scope. If a\n strong external-API-integration signal is found, the seal is **blocked** until a\n matrix is produced. If no signal is found, the phase is treated as a non-API\n phase and the seal proceeds.\n\nSo: an API-integrating phase cannot seal without a decided matrix. Produce it at\nplan time; do not leave it for seal time.\n\n## Tuning the vocabulary (optional)\n\nThe trigger vocabulary is a curated, additive-only set in\n`gsd-core/bin/lib/api-coverage.cjs` (`DEFAULT_API_COVERAGE_TERMS`). To widen it\nfor a project, override at the call site:\n\n```bash\nprintf '%s' \"$SCOPE\" | node gsd-core/bin/lib/api-coverage.cjs --json \\\n --verbs integrate,wrap,connect,embed --nouns api,sdk,rest,grpc,webhook,plugin\n```\n\nThe whole checkpoint is toggleable via `workflow.api_coverage_gate` in\n`.planning/config.json`.\n"
|
|
2971
|
+
},
|
|
2972
|
+
"produces": [
|
|
2973
|
+
"COVERAGE.md"
|
|
2974
|
+
],
|
|
2975
|
+
"consumes": [
|
|
2976
|
+
"CONTEXT.md"
|
|
2977
|
+
],
|
|
2978
|
+
"when": "workflow.api_coverage_gate",
|
|
2979
|
+
"onError": "skip"
|
|
2980
|
+
},
|
|
2835
2981
|
{
|
|
2836
2982
|
"capId": "assumption-delta",
|
|
2837
2983
|
"point": "plan:pre",
|
|
@@ -3101,7 +3247,18 @@ const byLoopPoint = {
|
|
|
3101
3247
|
"verify:pre": {
|
|
3102
3248
|
"steps": [],
|
|
3103
3249
|
"contributions": [],
|
|
3104
|
-
"gates": [
|
|
3250
|
+
"gates": [
|
|
3251
|
+
{
|
|
3252
|
+
"capId": "ai-integration",
|
|
3253
|
+
"point": "verify:pre",
|
|
3254
|
+
"check": {
|
|
3255
|
+
"query": "api-coverage.verify-pre"
|
|
3256
|
+
},
|
|
3257
|
+
"when": "workflow.api_coverage_gate",
|
|
3258
|
+
"blocking": true,
|
|
3259
|
+
"onError": "halt"
|
|
3260
|
+
}
|
|
3261
|
+
]
|
|
3105
3262
|
},
|
|
3106
3263
|
"verify:post": {
|
|
3107
3264
|
"steps": [
|
|
@@ -3211,6 +3368,7 @@ const byLoopPoint = {
|
|
|
3211
3368
|
|
|
3212
3369
|
const configKeys = {
|
|
3213
3370
|
"workflow.ai_integration_phase": "ai-integration",
|
|
3371
|
+
"workflow.api_coverage_gate": "ai-integration",
|
|
3214
3372
|
"workflow.assumption_delta": "assumption-delta",
|
|
3215
3373
|
"claude_orchestration.enabled": "claude-orchestration",
|
|
3216
3374
|
"claude_orchestration.execution_backend": "claude-orchestration",
|
|
@@ -3260,6 +3418,12 @@ const configSchema = {
|
|
|
3260
3418
|
"default": true,
|
|
3261
3419
|
"description": "Prompt for an AI-SPEC design contract before planning phases that involve AI systems."
|
|
3262
3420
|
},
|
|
3421
|
+
"workflow.api_coverage_gate": {
|
|
3422
|
+
"owner": "ai-integration",
|
|
3423
|
+
"type": "boolean",
|
|
3424
|
+
"default": true,
|
|
3425
|
+
"description": "Require an explicit API-coverage decision (full-by-default, opt-out-not-opt-in) before a phase that integrates an external API/SDK/service can seal. At plan:pre the planner is prompted to enumerate the API surface into COVERAGE.md; at verify:pre a blocking gate fails the seal unless the matrix exists with every non-integrated capability an explicit, reasoned opt-out. Independent of ai_integration_phase (applies to any external-API integration, not only AI)."
|
|
3426
|
+
},
|
|
3263
3427
|
"workflow.assumption_delta": {
|
|
3264
3428
|
"owner": "assumption-delta",
|
|
3265
3429
|
"type": "boolean",
|
|
@@ -3535,7 +3699,7 @@ const runtimes = {
|
|
|
3535
3699
|
"antigravity": {
|
|
3536
3700
|
"id": "antigravity",
|
|
3537
3701
|
"role": "runtime",
|
|
3538
|
-
"version": "1.7.0-rc.
|
|
3702
|
+
"version": "1.7.0-rc.5",
|
|
3539
3703
|
"title": "Antigravity",
|
|
3540
3704
|
"description": "Google Antigravity IDE — nested under ~/.gemini/antigravity; probed across 1.x and 2.x layouts; Gemini hook event dialect; flat skill layout; tier-1 support.",
|
|
3541
3705
|
"tier": "core",
|
|
@@ -3629,7 +3793,7 @@ const runtimes = {
|
|
|
3629
3793
|
"augment": {
|
|
3630
3794
|
"id": "augment",
|
|
3631
3795
|
"role": "runtime",
|
|
3632
|
-
"version": "1.7.0-rc.
|
|
3796
|
+
"version": "1.7.0-rc.5",
|
|
3633
3797
|
"title": "Augment Code",
|
|
3634
3798
|
"description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
3635
3799
|
"tier": "core",
|
|
@@ -3732,7 +3896,7 @@ const runtimes = {
|
|
|
3732
3896
|
"claude": {
|
|
3733
3897
|
"id": "claude",
|
|
3734
3898
|
"role": "runtime",
|
|
3735
|
-
"version": "1.7.0-rc.
|
|
3899
|
+
"version": "1.7.0-rc.5",
|
|
3736
3900
|
"title": "Claude Code",
|
|
3737
3901
|
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
|
|
3738
3902
|
"tier": "core",
|
|
@@ -3810,13 +3974,30 @@ const runtimes = {
|
|
|
3810
3974
|
"stateIO": "filesystem",
|
|
3811
3975
|
"transport": "mcp",
|
|
3812
3976
|
"runtime": "node"
|
|
3977
|
+
},
|
|
3978
|
+
"hostBehaviors": {
|
|
3979
|
+
"attributionSource": "settings-json-commit",
|
|
3980
|
+
"authorsCanonicalWorkflow": true,
|
|
3981
|
+
"localInstallStyle": "legacy-flat",
|
|
3982
|
+
"permissionsSchema": "claude",
|
|
3983
|
+
"settingsFileByScope": {
|
|
3984
|
+
"local": "settings.local.json",
|
|
3985
|
+
"global": "settings.json"
|
|
3986
|
+
},
|
|
3987
|
+
"sourceMarkerFile": ".gsd-source",
|
|
3988
|
+
"agentFrontmatterExtensions": [
|
|
3989
|
+
"effort"
|
|
3990
|
+
],
|
|
3991
|
+
"ownsClaudePaths": true,
|
|
3992
|
+
"nativeModelAliases": true,
|
|
3993
|
+
"skillsGlobalOnboarding": true
|
|
3813
3994
|
}
|
|
3814
3995
|
}
|
|
3815
3996
|
},
|
|
3816
3997
|
"cline": {
|
|
3817
3998
|
"id": "cline",
|
|
3818
3999
|
"role": "runtime",
|
|
3819
|
-
"version": "1.7.0-rc.
|
|
4000
|
+
"version": "1.7.0-rc.5",
|
|
3820
4001
|
"title": "Cline",
|
|
3821
4002
|
"description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
|
|
3822
4003
|
"tier": "core",
|
|
@@ -3871,13 +4052,21 @@ const runtimes = {
|
|
|
3871
4052
|
"stateIO": "filesystem",
|
|
3872
4053
|
"transport": "mcp",
|
|
3873
4054
|
"runtime": "node"
|
|
4055
|
+
},
|
|
4056
|
+
"hostBehaviors": {
|
|
4057
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
4058
|
+
"frontmatterDialect": "cline",
|
|
4059
|
+
"skipSharedHooksInstall": true,
|
|
4060
|
+
"localTargetIsProjectRoot": true,
|
|
4061
|
+
"clineRulesSurface": true,
|
|
4062
|
+
"localCommandsViaRules": true
|
|
3874
4063
|
}
|
|
3875
4064
|
}
|
|
3876
4065
|
},
|
|
3877
4066
|
"codebuddy": {
|
|
3878
4067
|
"id": "codebuddy",
|
|
3879
4068
|
"role": "runtime",
|
|
3880
|
-
"version": "1.7.0-rc.
|
|
4069
|
+
"version": "1.7.0-rc.5",
|
|
3881
4070
|
"title": "CodeBuddy",
|
|
3882
4071
|
"description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
3883
4072
|
"tier": "core",
|
|
@@ -3980,7 +4169,7 @@ const runtimes = {
|
|
|
3980
4169
|
"codex": {
|
|
3981
4170
|
"id": "codex",
|
|
3982
4171
|
"role": "runtime",
|
|
3983
|
-
"version": "1.7.0-rc.
|
|
4172
|
+
"version": "1.7.0-rc.5",
|
|
3984
4173
|
"title": "OpenAI Codex CLI",
|
|
3985
4174
|
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
|
|
3986
4175
|
"tier": "core",
|
|
@@ -4006,7 +4195,8 @@ const runtimes = {
|
|
|
4006
4195
|
"prefix": "gsd-",
|
|
4007
4196
|
"nesting": "flat",
|
|
4008
4197
|
"recursive": false,
|
|
4009
|
-
"converter": "convertClaudeCommandToCodexSkill"
|
|
4198
|
+
"converter": "convertClaudeCommandToCodexSkill",
|
|
4199
|
+
"home": ".agents"
|
|
4010
4200
|
}
|
|
4011
4201
|
],
|
|
4012
4202
|
"local": [
|
|
@@ -4016,7 +4206,8 @@ const runtimes = {
|
|
|
4016
4206
|
"prefix": "gsd-",
|
|
4017
4207
|
"nesting": "flat",
|
|
4018
4208
|
"recursive": false,
|
|
4019
|
-
"converter": "convertClaudeCommandToCodexSkill"
|
|
4209
|
+
"converter": "convertClaudeCommandToCodexSkill",
|
|
4210
|
+
"home": ".agents"
|
|
4020
4211
|
}
|
|
4021
4212
|
]
|
|
4022
4213
|
},
|
|
@@ -4028,7 +4219,11 @@ const runtimes = {
|
|
|
4028
4219
|
"installSurface": "codex-toml",
|
|
4029
4220
|
"writesSharedSettings": false,
|
|
4030
4221
|
"permissionWriter": null,
|
|
4031
|
-
"extendedHookEvents": [
|
|
4222
|
+
"extendedHookEvents": [
|
|
4223
|
+
"SubagentStop",
|
|
4224
|
+
"Stop",
|
|
4225
|
+
"PreCompact"
|
|
4226
|
+
],
|
|
4032
4227
|
"hostIntegration": {
|
|
4033
4228
|
"embeddingMode": "declarative",
|
|
4034
4229
|
"commandSurface": "slash-file",
|
|
@@ -4045,13 +4240,20 @@ const runtimes = {
|
|
|
4045
4240
|
"stateIO": "filesystem",
|
|
4046
4241
|
"transport": "mcp",
|
|
4047
4242
|
"runtime": "node"
|
|
4243
|
+
},
|
|
4244
|
+
"hostBehaviors": {
|
|
4245
|
+
"reapplyCommand": "$gsd-update --reapply",
|
|
4246
|
+
"tomlConfigInstall": true,
|
|
4247
|
+
"cleanupSkillSidecars": true,
|
|
4248
|
+
"agentTomlFiles": true,
|
|
4249
|
+
"frontmatterDialect": "codex"
|
|
4048
4250
|
}
|
|
4049
4251
|
}
|
|
4050
4252
|
},
|
|
4051
4253
|
"copilot": {
|
|
4052
4254
|
"id": "copilot",
|
|
4053
4255
|
"role": "runtime",
|
|
4054
|
-
"version": "1.7.0-rc.
|
|
4256
|
+
"version": "1.7.0-rc.5",
|
|
4055
4257
|
"title": "GitHub Copilot",
|
|
4056
4258
|
"description": "GitHub Copilot (VS Code) — markdown config format; copilot-inline hook surface; no hook events emitted; flat skill nesting (unconfirmed recursive loader); tier-2 support.",
|
|
4057
4259
|
"tier": "core",
|
|
@@ -4132,13 +4334,16 @@ const runtimes = {
|
|
|
4132
4334
|
"stateIO": "filesystem",
|
|
4133
4335
|
"transport": "mcp",
|
|
4134
4336
|
"runtime": "undocumented"
|
|
4337
|
+
},
|
|
4338
|
+
"hostBehaviors": {
|
|
4339
|
+
"reapplyCommand": "/gsd-update --reapply"
|
|
4135
4340
|
}
|
|
4136
4341
|
}
|
|
4137
4342
|
},
|
|
4138
4343
|
"cursor": {
|
|
4139
4344
|
"id": "cursor",
|
|
4140
4345
|
"role": "runtime",
|
|
4141
|
-
"version": "1.7.0-rc.
|
|
4346
|
+
"version": "1.7.0-rc.5",
|
|
4142
4347
|
"title": "Cursor",
|
|
4143
4348
|
"description": "Cursor IDE — skills + converted commands artifact layout; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
|
|
4144
4349
|
"tier": "core",
|
|
@@ -4235,13 +4440,30 @@ const runtimes = {
|
|
|
4235
4440
|
"stateIO": "filesystem",
|
|
4236
4441
|
"transport": "mcp",
|
|
4237
4442
|
"runtime": "node"
|
|
4443
|
+
},
|
|
4444
|
+
"hostBehaviors": {
|
|
4445
|
+
"reapplyCommand": "gsd-update --reapply (mention the skill name)",
|
|
4446
|
+
"frontmatterDialect": "cursor",
|
|
4447
|
+
"hooksJsonSurface": true,
|
|
4448
|
+
"skipSharedHooksInstall": true,
|
|
4449
|
+
"reportCommandsDir": true,
|
|
4450
|
+
"skipUpdateBannerCommand": true,
|
|
4451
|
+
"skipSettingsUi": true,
|
|
4452
|
+
"managedHookEvents": [
|
|
4453
|
+
"sessionStart",
|
|
4454
|
+
"postToolUse",
|
|
4455
|
+
"preToolUse",
|
|
4456
|
+
"stop",
|
|
4457
|
+
"subagentStart",
|
|
4458
|
+
"subagentStop"
|
|
4459
|
+
]
|
|
4238
4460
|
}
|
|
4239
4461
|
}
|
|
4240
4462
|
},
|
|
4241
4463
|
"hermes": {
|
|
4242
4464
|
"id": "hermes",
|
|
4243
4465
|
"role": "runtime",
|
|
4244
|
-
"version": "1.7.0-rc.
|
|
4466
|
+
"version": "1.7.0-rc.5",
|
|
4245
4467
|
"title": "Hermes Agent",
|
|
4246
4468
|
"description": "Hermes Agent (NousResearch) — skills nest under skills/gsd/ category bucket; nested skill layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
4247
4469
|
"tier": "core",
|
|
@@ -4290,6 +4512,21 @@ const runtimes = {
|
|
|
4290
4512
|
"writesSharedSettings": true,
|
|
4291
4513
|
"permissionWriter": null,
|
|
4292
4514
|
"extendedHookEvents": [],
|
|
4515
|
+
"extensionEvents": "hermes",
|
|
4516
|
+
"hostBehaviors": {
|
|
4517
|
+
"skillFrontmatterVersion": true,
|
|
4518
|
+
"skillsManifestPrefix": "skills/gsd/",
|
|
4519
|
+
"trackCategoryDescription": true,
|
|
4520
|
+
"writeCategoryDescription": true,
|
|
4521
|
+
"reportSkillsCount": true,
|
|
4522
|
+
"legacyCommandsGsdCleanup": true,
|
|
4523
|
+
"brandingRewrites": {
|
|
4524
|
+
"CLAUDE.md": "HERMES.md",
|
|
4525
|
+
"Claude Code": "Hermes Agent",
|
|
4526
|
+
".claude/": ".hermes/"
|
|
4527
|
+
},
|
|
4528
|
+
"reapplyCommand": "gsd-update --reapply (mention the skill name)"
|
|
4529
|
+
},
|
|
4293
4530
|
"hostIntegration": {
|
|
4294
4531
|
"embeddingMode": "imperative",
|
|
4295
4532
|
"commandSurface": "slash-programmatic",
|
|
@@ -4312,7 +4549,7 @@ const runtimes = {
|
|
|
4312
4549
|
"kilo": {
|
|
4313
4550
|
"id": "kilo",
|
|
4314
4551
|
"role": "runtime",
|
|
4315
|
-
"version": "1.7.0-rc.
|
|
4552
|
+
"version": "1.7.0-rc.5",
|
|
4316
4553
|
"title": "Kilo Code",
|
|
4317
4554
|
"description": "Kilo Code — XDG-based config dir; global skills at ~/.kilo/skills (separate from XDG config); flat command/ + skills artifact layout; no lifecycle hook registration; tier-2 support.",
|
|
4318
4555
|
"tier": "core",
|
|
@@ -4399,13 +4636,21 @@ const runtimes = {
|
|
|
4399
4636
|
"stateIO": "filesystem",
|
|
4400
4637
|
"transport": "mcp",
|
|
4401
4638
|
"runtime": "bun"
|
|
4639
|
+
},
|
|
4640
|
+
"hostBehaviors": {
|
|
4641
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
4642
|
+
"attributionConfigResolver": "kilo",
|
|
4643
|
+
"flatCommandDir": "command",
|
|
4644
|
+
"combinedFamilyInstall": true,
|
|
4645
|
+
"frontmatterDialect": "kilo",
|
|
4646
|
+
"skipUpdateBannerCommand": true
|
|
4402
4647
|
}
|
|
4403
4648
|
}
|
|
4404
4649
|
},
|
|
4405
4650
|
"kimi": {
|
|
4406
4651
|
"id": "kimi",
|
|
4407
4652
|
"role": "runtime",
|
|
4408
|
-
"version": "1.7.0-rc.
|
|
4653
|
+
"version": "1.7.0-rc.5",
|
|
4409
4654
|
"title": "Kimi CLI",
|
|
4410
4655
|
"description": "Kimi CLI (Moonshot AI) — generic agents root at ~/.config/agents; skills + kimi-agents artifact layout; no hook surface; no hook events; tier-2 support.",
|
|
4411
4656
|
"tier": "core",
|
|
@@ -4479,7 +4724,7 @@ const runtimes = {
|
|
|
4479
4724
|
"opencode": {
|
|
4480
4725
|
"id": "opencode",
|
|
4481
4726
|
"role": "runtime",
|
|
4482
|
-
"version": "1.7.0-rc.
|
|
4727
|
+
"version": "1.7.0-rc.5",
|
|
4483
4728
|
"title": "OpenCode",
|
|
4484
4729
|
"description": "OpenCode — XDG-based config dir; flat command/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
|
|
4485
4730
|
"tier": "core",
|
|
@@ -4553,22 +4798,38 @@ const runtimes = {
|
|
|
4553
4798
|
"namedDispatch": true,
|
|
4554
4799
|
"nested": "undocumented",
|
|
4555
4800
|
"maxDepth": "undocumented",
|
|
4556
|
-
"background":
|
|
4801
|
+
"background": true,
|
|
4557
4802
|
"subagentToolkit": "full",
|
|
4558
|
-
"backgroundDispatch":
|
|
4803
|
+
"backgroundDispatch": true
|
|
4559
4804
|
},
|
|
4560
4805
|
"modelMode": "active",
|
|
4561
4806
|
"hookBus": "host",
|
|
4562
4807
|
"stateIO": "filesystem",
|
|
4563
4808
|
"transport": "mcp",
|
|
4564
4809
|
"runtime": "bun"
|
|
4810
|
+
},
|
|
4811
|
+
"hostBehaviors": {
|
|
4812
|
+
"reapplyCommand": "/gsd-update --reapply",
|
|
4813
|
+
"attributionConfigResolver": "opencode",
|
|
4814
|
+
"flatCommandDir": "command",
|
|
4815
|
+
"combinedFamilyInstall": true,
|
|
4816
|
+
"frontmatterDialect": "opencode",
|
|
4817
|
+
"nativePlugin": {
|
|
4818
|
+
"dir": "plugins",
|
|
4819
|
+
"file": "gsd-core.js",
|
|
4820
|
+
"source": ".opencode/plugins/gsd-core.js"
|
|
4821
|
+
},
|
|
4822
|
+
"skipHomePrefixSubstitution": true,
|
|
4823
|
+
"skipSettingsUi": true,
|
|
4824
|
+
"skipUpdateBannerCommand": true,
|
|
4825
|
+
"skipCodexSkillsManifest": true
|
|
4565
4826
|
}
|
|
4566
4827
|
}
|
|
4567
4828
|
},
|
|
4568
4829
|
"qwen": {
|
|
4569
4830
|
"id": "qwen",
|
|
4570
4831
|
"role": "runtime",
|
|
4571
|
-
"version": "1.7.0-rc.
|
|
4832
|
+
"version": "1.7.0-rc.5",
|
|
4572
4833
|
"title": "Qwen Code",
|
|
4573
4834
|
"description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
4574
4835
|
"tier": "core",
|
|
@@ -4643,7 +4904,7 @@ const runtimes = {
|
|
|
4643
4904
|
"trae": {
|
|
4644
4905
|
"id": "trae",
|
|
4645
4906
|
"role": "runtime",
|
|
4646
|
-
"version": "1.7.0-rc.
|
|
4907
|
+
"version": "1.7.0-rc.5",
|
|
4647
4908
|
"title": "Trae IDE",
|
|
4648
4909
|
"description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
|
|
4649
4910
|
"tier": "core",
|
|
@@ -4729,7 +4990,7 @@ const runtimes = {
|
|
|
4729
4990
|
"windsurf": {
|
|
4730
4991
|
"id": "windsurf",
|
|
4731
4992
|
"role": "runtime",
|
|
4732
|
-
"version": "1.7.0-rc.
|
|
4993
|
+
"version": "1.7.0-rc.5",
|
|
4733
4994
|
"title": "Windsurf",
|
|
4734
4995
|
"description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; no hook surface; no hook events; tier-2 support.",
|
|
4735
4996
|
"tier": "core",
|
|
@@ -4808,7 +5069,7 @@ const runtimes = {
|
|
|
4808
5069
|
"zcode": {
|
|
4809
5070
|
"id": "zcode",
|
|
4810
5071
|
"role": "runtime",
|
|
4811
|
-
"version": "1.7.0-rc.
|
|
5072
|
+
"version": "1.7.0-rc.5",
|
|
4812
5073
|
"title": "ZCode",
|
|
4813
5074
|
"description": "ZCode (Z.ai) — desktop Agentic Development Environment for GLM-5.2; Claude-shaped nested skills at ~/.zcode/skills/<name>/SKILL.md, slash commands, named subagents, native MCP; declarative plugin surface; profile-marker install; tier-2 community support.",
|
|
4814
5075
|
"tier": "core",
|