@opengsd/gsd-core 1.7.0-rc.2 → 1.7.0-rc.4
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/GEMINI.md +25 -23
- package/README.ja-JP.md +4 -3
- package/README.ko-KR.md +4 -3
- package/README.md +7 -6
- package/README.pt-BR.md +4 -3
- package/README.zh-CN.md +4 -3
- package/agents/gsd-advisor-researcher.md +1 -1
- package/agents/gsd-ai-researcher.md +1 -1
- package/agents/gsd-code-fixer.md +1 -1
- package/agents/gsd-debug-session-manager.md +1 -1
- package/agents/gsd-debugger.md +1 -1
- package/agents/gsd-domain-researcher.md +1 -1
- package/agents/gsd-eval-auditor.md +1 -1
- package/agents/gsd-executor.md +4 -4
- package/agents/gsd-intel-updater.md +1 -1
- package/agents/gsd-mempalace-curator.md +1 -1
- package/agents/gsd-phase-researcher.md +2 -2
- package/agents/gsd-plan-checker.md +1 -1
- package/agents/gsd-planner.md +2 -2
- package/agents/gsd-project-researcher.md +2 -2
- package/agents/gsd-research-synthesizer.md +1 -1
- package/agents/gsd-ui-researcher.md +2 -2
- package/agents/gsd-verifier.md +2 -2
- package/bin/install.js +132 -464
- package/commands/gsd/map-codebase.md +4 -4
- package/commands/gsd/mempalace-capture.md +1 -1
- package/commands/gsd/mempalace-recall.md +9 -5
- package/commands/gsd/next.md +29 -0
- package/commands/gsd/ns-project.md +2 -1
- package/commands/gsd/ns-workflow.md +5 -2
- package/commands/gsd/onboard.md +46 -0
- package/gsd-core/bin/ensure-runtime-build.cjs +246 -0
- package/gsd-core/bin/gsd-tools.cjs +72 -3
- package/gsd-core/bin/lib/capability-registry.cjs +684 -264
- package/gsd-core/bin/lib/capability-state.cjs +117 -18
- package/gsd-core/bin/lib/capability-writer.cjs +11 -1
- package/gsd-core/bin/lib/check-command-router.cjs +111 -1
- package/gsd-core/bin/lib/claude-orchestration-command-router.cjs +136 -0
- package/gsd-core/bin/lib/claude-orchestration.cjs +404 -0
- package/gsd-core/bin/lib/clusters.cjs +2 -0
- package/gsd-core/bin/lib/command-aliases.cjs +8 -0
- package/gsd-core/bin/lib/config.cjs +19 -1
- package/gsd-core/bin/lib/core-utils.cjs +41 -0
- package/gsd-core/bin/lib/external-job.cjs +287 -0
- package/gsd-core/bin/lib/gate-predicate-evaluator.cjs +151 -0
- package/gsd-core/bin/lib/graphify.cjs +41 -9
- package/gsd-core/bin/lib/init-command-router.cjs +4 -0
- package/gsd-core/bin/lib/init.cjs +25 -69
- package/gsd-core/bin/lib/install-engine.cjs +8 -5
- package/gsd-core/bin/lib/install-profiles.cjs +2 -0
- package/gsd-core/bin/lib/loop-resolver.cjs +7 -1
- package/gsd-core/bin/lib/milestone.cjs +7 -1
- package/gsd-core/bin/lib/model-resolver.cjs +69 -4
- package/gsd-core/bin/lib/onboard-projection.cjs +309 -0
- package/gsd-core/bin/lib/phase.cjs +14 -2
- package/gsd-core/bin/lib/plan-scan.cjs +9 -1
- package/gsd-core/bin/lib/profile-output.cjs +1 -1
- package/gsd-core/bin/lib/prohibition-enforcement.cjs +21 -19
- package/gsd-core/bin/lib/roadmap.cjs +17 -2
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +18 -13
- package/gsd-core/bin/lib/runtime-name-policy.cjs +11 -11
- package/gsd-core/bin/lib/shell-command-projection.cjs +12 -8
- package/gsd-core/bin/lib/smart-entry.cjs +521 -0
- package/gsd-core/bin/lib/surface.cjs +63 -33
- package/gsd-core/bin/lib/update-context.cjs +0 -5
- package/gsd-core/bin/shared/config-schema.manifest.json +1 -0
- package/gsd-core/bin/shared/model-catalog.json +5 -5
- package/gsd-core/bin/shared/runtime-aliases.manifest.json +0 -5
- package/gsd-core/references/gates.md +1 -1
- package/gsd-core/references/gsd-run-resolver.md +8 -0
- package/gsd-core/references/planning-config.md +1 -1
- package/gsd-core/templates/project.md +1 -1
- package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -1
- package/gsd-core/workflows/add-backlog.md +1 -1
- package/gsd-core/workflows/add-phase.md +1 -1
- package/gsd-core/workflows/add-tests.md +1 -1
- package/gsd-core/workflows/add-todo.md +1 -1
- package/gsd-core/workflows/ai-integration-phase.md +1 -1
- package/gsd-core/workflows/audit-fix.md +1 -1
- package/gsd-core/workflows/audit-milestone.md +1 -1
- package/gsd-core/workflows/audit-uat.md +1 -1
- package/gsd-core/workflows/autonomous.md +1 -1
- package/gsd-core/workflows/check-todos.md +1 -1
- package/gsd-core/workflows/cleanup.md +1 -1
- package/gsd-core/workflows/code-review-fix.md +1 -1
- package/gsd-core/workflows/code-review.md +1 -1
- package/gsd-core/workflows/complete-milestone.md +1 -1
- package/gsd-core/workflows/debug.md +1 -1
- package/gsd-core/workflows/diagnose-issues.md +1 -1
- package/gsd-core/workflows/discuss-phase/modes/advisor.md +1 -1
- package/gsd-core/workflows/discuss-phase/modes/auto.md +1 -1
- package/gsd-core/workflows/discuss-phase/modes/chain.md +1 -1
- package/gsd-core/workflows/discuss-phase-assumptions.md +1 -1
- package/gsd-core/workflows/discuss-phase.md +2 -2
- package/gsd-core/workflows/do.md +5 -4
- package/gsd-core/workflows/docs-update.md +1 -1
- package/gsd-core/workflows/edit-phase.md +1 -1
- package/gsd-core/workflows/eval-review.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +1 -1
- package/gsd-core/workflows/execute-phase.md +4 -5
- package/gsd-core/workflows/execute-plan.md +1 -1
- package/gsd-core/workflows/explore.md +1 -1
- package/gsd-core/workflows/extract-learnings.md +1 -1
- package/gsd-core/workflows/forensics.md +1 -1
- package/gsd-core/workflows/graduation.md +1 -1
- package/gsd-core/workflows/health.md +1 -1
- package/gsd-core/workflows/help/modes/brief.md +2 -1
- package/gsd-core/workflows/help/modes/default.md +2 -1
- package/gsd-core/workflows/help/modes/full.md +25 -1
- package/gsd-core/workflows/help/modes/topic.md +2 -1
- package/gsd-core/workflows/import.md +1 -1
- package/gsd-core/workflows/ingest-docs.md +1 -1
- package/gsd-core/workflows/insert-phase.md +1 -1
- package/gsd-core/workflows/list-seeds.md +1 -1
- package/gsd-core/workflows/list-workspaces.md +1 -1
- package/gsd-core/workflows/manager.md +1 -1
- package/gsd-core/workflows/map-codebase.md +1 -1
- package/gsd-core/workflows/milestone-summary.md +1 -1
- package/gsd-core/workflows/mvp-phase.md +1 -1
- package/gsd-core/workflows/new-milestone.md +1 -1
- package/gsd-core/workflows/new-project.md +1 -1
- package/gsd-core/workflows/new-workspace.md +1 -1
- package/gsd-core/workflows/next.md +1 -1
- package/gsd-core/workflows/onboard.md +277 -0
- package/gsd-core/workflows/pause-work.md +1 -1
- package/gsd-core/workflows/plan-milestone-gaps.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/prd-express-path.md +1 -1
- package/gsd-core/workflows/plan-phase.md +9 -2
- package/gsd-core/workflows/plan-review-convergence.md +1 -1
- package/gsd-core/workflows/plant-seed.md +1 -1
- package/gsd-core/workflows/pr-branch.md +1 -1
- package/gsd-core/workflows/profile-user.md +1 -1
- package/gsd-core/workflows/progress.md +1 -1
- package/gsd-core/workflows/quick.md +21 -1
- package/gsd-core/workflows/reapply-patches.md +1 -1
- package/gsd-core/workflows/remove-phase.md +1 -1
- package/gsd-core/workflows/remove-workspace.md +1 -1
- package/gsd-core/workflows/resume-project.md +1 -1
- package/gsd-core/workflows/review.md +43 -7
- package/gsd-core/workflows/scan.md +1 -1
- package/gsd-core/workflows/secure-phase.md +1 -1
- package/gsd-core/workflows/settings-advanced.md +3 -1
- package/gsd-core/workflows/settings-integrations.md +1 -1
- package/gsd-core/workflows/settings.md +1 -1
- package/gsd-core/workflows/ship.md +1 -1
- package/gsd-core/workflows/sketch-wrap-up.md +1 -1
- package/gsd-core/workflows/sketch.md +1 -1
- package/gsd-core/workflows/smart-entry.md +120 -0
- package/gsd-core/workflows/spec-phase.md +8 -6
- package/gsd-core/workflows/spike-wrap-up.md +1 -1
- package/gsd-core/workflows/spike.md +1 -1
- package/gsd-core/workflows/stats.md +1 -1
- package/gsd-core/workflows/thread.md +1 -1
- package/gsd-core/workflows/transition.md +1 -1
- package/gsd-core/workflows/ui-phase.md +1 -1
- package/gsd-core/workflows/ui-review.md +1 -1
- package/gsd-core/workflows/ultraplan-phase.md +1 -1
- package/gsd-core/workflows/update.md +3 -6
- package/gsd-core/workflows/validate-phase.md +1 -1
- package/gsd-core/workflows/verify-phase.md +1 -1
- package/gsd-core/workflows/verify-work.md +62 -4
- package/package.json +3 -5
- package/scripts/ci-test-scope.cjs +19 -1
- package/scripts/gen-golden-install-parity-zcode.cjs +77 -0
- package/scripts/generate-package-identity.cjs +27 -2
- package/scripts/lint-allow-test-rule-refs.allowlist.json +0 -148
- package/scripts/lint-regression-test-names.allowlist.json +1 -273
- package/scripts/lint-test-file-count.allowlist.json +7 -91
- package/scripts/research-profiles.cjs +6 -6
- package/scripts/run-tests.cjs +18 -3
- package/scripts/slurm-adapter.cjs +269 -0
- package/scripts/sync-manifest-versions.cjs +3 -2
- package/scripts/sync-runtime-launcher.cjs +20 -2
- package/skills/gsd-map-codebase/SKILL.md +3 -3
- package/skills/gsd-mempalace-capture/SKILL.md +1 -1
- package/skills/gsd-mempalace-recall/SKILL.md +9 -5
- package/skills/gsd-next/SKILL.md +30 -0
- package/skills/gsd-ns-project/SKILL.md +1 -0
- package/skills/gsd-ns-workflow/SKILL.md +4 -1
- package/skills/gsd-onboard/SKILL.md +46 -0
- package/gemini-extension.json +0 -6
|
@@ -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.4",
|
|
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",
|
|
@@ -63,7 +63,7 @@ const capabilities = {
|
|
|
63
63
|
"antigravity": {
|
|
64
64
|
"id": "antigravity",
|
|
65
65
|
"role": "runtime",
|
|
66
|
-
"version": "1.7.0-rc.
|
|
66
|
+
"version": "1.7.0-rc.4",
|
|
67
67
|
"title": "Antigravity",
|
|
68
68
|
"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
69
|
"tier": "core",
|
|
@@ -97,6 +97,14 @@ const capabilities = {
|
|
|
97
97
|
"nesting": "flat",
|
|
98
98
|
"recursive": false,
|
|
99
99
|
"converter": "convertClaudeCommandToAntigravitySkill"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"kind": "agents",
|
|
103
|
+
"destSubpath": "agents",
|
|
104
|
+
"prefix": "gsd-",
|
|
105
|
+
"nesting": "flat",
|
|
106
|
+
"recursive": false,
|
|
107
|
+
"converter": "convertClaudeAgentToAntigravityAgent"
|
|
100
108
|
}
|
|
101
109
|
],
|
|
102
110
|
"local": [
|
|
@@ -107,6 +115,14 @@ const capabilities = {
|
|
|
107
115
|
"nesting": "flat",
|
|
108
116
|
"recursive": false,
|
|
109
117
|
"converter": "convertClaudeCommandToAntigravitySkill"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"kind": "agents",
|
|
121
|
+
"destSubpath": "agents",
|
|
122
|
+
"prefix": "gsd-",
|
|
123
|
+
"nesting": "flat",
|
|
124
|
+
"recursive": false,
|
|
125
|
+
"converter": "convertClaudeAgentToAntigravityAgent"
|
|
110
126
|
}
|
|
111
127
|
]
|
|
112
128
|
},
|
|
@@ -141,7 +157,7 @@ const capabilities = {
|
|
|
141
157
|
"assumption-delta": {
|
|
142
158
|
"id": "assumption-delta",
|
|
143
159
|
"role": "feature",
|
|
144
|
-
"version": "1.7.0-rc.
|
|
160
|
+
"version": "1.7.0-rc.4",
|
|
145
161
|
"title": "Assumption-delta architecture checkpoint",
|
|
146
162
|
"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.",
|
|
147
163
|
"tier": "full",
|
|
@@ -187,7 +203,7 @@ const capabilities = {
|
|
|
187
203
|
"audit": {
|
|
188
204
|
"id": "audit",
|
|
189
205
|
"role": "feature",
|
|
190
|
-
"version": "1.7.0-rc.
|
|
206
|
+
"version": "1.7.0-rc.4",
|
|
191
207
|
"title": "Audit",
|
|
192
208
|
"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).",
|
|
193
209
|
"tier": "full",
|
|
@@ -224,7 +240,7 @@ const capabilities = {
|
|
|
224
240
|
"augment": {
|
|
225
241
|
"id": "augment",
|
|
226
242
|
"role": "runtime",
|
|
227
|
-
"version": "1.7.0-rc.
|
|
243
|
+
"version": "1.7.0-rc.4",
|
|
228
244
|
"title": "Augment Code",
|
|
229
245
|
"description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
230
246
|
"tier": "core",
|
|
@@ -327,7 +343,7 @@ const capabilities = {
|
|
|
327
343
|
"claude": {
|
|
328
344
|
"id": "claude",
|
|
329
345
|
"role": "runtime",
|
|
330
|
-
"version": "1.7.0-rc.
|
|
346
|
+
"version": "1.7.0-rc.4",
|
|
331
347
|
"title": "Claude Code",
|
|
332
348
|
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
|
|
333
349
|
"tier": "core",
|
|
@@ -408,10 +424,97 @@ const capabilities = {
|
|
|
408
424
|
}
|
|
409
425
|
}
|
|
410
426
|
},
|
|
427
|
+
"claude-orchestration": {
|
|
428
|
+
"id": "claude-orchestration",
|
|
429
|
+
"role": "feature",
|
|
430
|
+
"version": "1.7.0-rc.4",
|
|
431
|
+
"title": "Claude orchestration (Workflow backend)",
|
|
432
|
+
"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
|
+
"tier": "full",
|
|
434
|
+
"requires": [],
|
|
435
|
+
"engines": {
|
|
436
|
+
"gsd": ">=1.7.0"
|
|
437
|
+
},
|
|
438
|
+
"runtimeCompat": {
|
|
439
|
+
"supported": [
|
|
440
|
+
"claude"
|
|
441
|
+
],
|
|
442
|
+
"unsupported": []
|
|
443
|
+
},
|
|
444
|
+
"skills": [],
|
|
445
|
+
"agents": [],
|
|
446
|
+
"hooks": [],
|
|
447
|
+
"commands": [
|
|
448
|
+
{
|
|
449
|
+
"family": "claude-orchestration",
|
|
450
|
+
"module": "claude-orchestration-command-router.cjs",
|
|
451
|
+
"router": "routeClaudeOrchestrationCommand",
|
|
452
|
+
"subcommands": [
|
|
453
|
+
"detect-backend",
|
|
454
|
+
"emit-workflow"
|
|
455
|
+
]
|
|
456
|
+
}
|
|
457
|
+
],
|
|
458
|
+
"activationKey": "claude_orchestration.enabled",
|
|
459
|
+
"config": {
|
|
460
|
+
"claude_orchestration.enabled": {
|
|
461
|
+
"type": "boolean",
|
|
462
|
+
"default": false,
|
|
463
|
+
"description": "Master toggle for the Claude orchestration capability. Default-off + BETA: the Workflow-tool execution backend and the ultraplan plan-offload surface are inert unless this is true. When false, loop behaviour is byte-identical to a non-Claude runtime (inline/manual dispatch)."
|
|
464
|
+
},
|
|
465
|
+
"claude_orchestration.execution_backend": {
|
|
466
|
+
"type": "enum",
|
|
467
|
+
"values": [
|
|
468
|
+
"auto",
|
|
469
|
+
"workflow",
|
|
470
|
+
"inline"
|
|
471
|
+
],
|
|
472
|
+
"default": "auto",
|
|
473
|
+
"description": "Which execute-phase dispatch backend to use when the capability is enabled. 'auto' (default) activates the Workflow backend only when the runtime is Claude AND the Workflow tool is detected AND the Agent SDK meets claude_orchestration.min_agent_sdk_version; otherwise it falls back to inline. 'workflow' forces the Workflow backend when the tool is present AND the Agent SDK meets the floor (still fails closed to inline if the tool is absent or the SDK is too old — the floor applies in both modes). 'inline' forces today's manual one-agent-per-message dispatch regardless of tool availability."
|
|
474
|
+
},
|
|
475
|
+
"claude_orchestration.min_agent_sdk_version": {
|
|
476
|
+
"type": "string",
|
|
477
|
+
"default": "0.3.149",
|
|
478
|
+
"description": "Minimum Agent SDK version required to activate the Workflow backend under execution_backend='auto'. Defaults to 0.3.149 (the release that introduced the Workflow tool). Raise to pin a higher floor; the detection seam fails closed to inline for any runtime reporting an older or unknown version."
|
|
479
|
+
}
|
|
480
|
+
},
|
|
481
|
+
"steps": [],
|
|
482
|
+
"contributions": [
|
|
483
|
+
{
|
|
484
|
+
"point": "execute:wave:post",
|
|
485
|
+
"into": "executor",
|
|
486
|
+
"fragment": {
|
|
487
|
+
"path": "fragments/execute-wave-post.md",
|
|
488
|
+
"inline": "# Claude orchestration — Workflow execution backend (BETA)\n\n> Injected at `execute:wave:post` `into: executor` only when\n> `claude_orchestration.enabled` is true. Default-off; `onError: skip`.\n\n## When this contribution is active\n\nThe Claude orchestration capability is **default-off and BETA**. It activates only\nwhen ALL of the following hold:\n\n1. `claude_orchestration.enabled` is `true` in `.planning/config.json`, AND\n2. the active runtime is **Claude Code** (the Workflow tool is Claude / Agent\n SDK-specific), AND\n3. `claude_orchestration.execution_backend` resolves to `workflow` — either\n explicitly, or via `auto` — **and** the Agent SDK version is\n `>= claude_orchestration.min_agent_sdk_version` (default `0.3.149`). The SDK\n floor applies in both `auto` and `workflow` modes (fail-closed: a pre-release\n or older SDK never activates the preview backend).\n\nDetection is fail-closed: any miss degrades to **inline, manual, one-agent-per-\nmessage dispatch** — exactly today's behaviour. On a non-Claude runtime this\ncontribution is a no-op.\n\n## What the executor does when the Workflow backend is active\n\nInstead of the orchestrator fanning out one `Agent(subagent_type=gsd-executor,\nisolation=worktree, run_in_background=true)` per message (which on Claude Code\ncannot nest further subagents — #853 — and so degrades to sequential inline\nexecution), execute-phase **emits a generated Workflow script** and lets the main\nloop orchestrate it:\n\n- **waves → one or more sequential `parallel()` barriers** — each wave is a\n barrier group; when plans within a wave share `files_modified`, they are split\n into separate sequential stages within that wave's barrier (the next wave\n still waits for the previous wave to complete).\n- **plans → `agent(brief, { agentType: 'gsd-executor', isolation: 'worktree' })`**\n — the SAME executor agent and worktree isolation the inline path uses, so the\n produced `SUMMARY.md` and commits are identical.\n- **`files_modified` overlap → separate sequential stages** — two plans that\n touch the same file are placed in different stages within the wave (the same\n overlap rule execute-phase already applies inline).\n- **`resumeFromRunId`** — wired to the phase run id, so an interrupted phase\n resumes without re-running completed plans.\n- **`budget(tokens)`** — a shared token pool across the whole phase when the\n orchestrator passes a `budgetTokens` value to `emitWorkflowScript` (it is a\n function parameter, not a config key; the orchestrator decides the budget).\n\nThe emitter is a pure function exposed through the capability command surface:\n`gsd-tools claude-orchestration emit-workflow --waves <manifest.json> --run-id <id>\n[--phase-dir <dir>] [--budget <n>]` (or `require('gsd-core/bin/lib/claude-orchestration.cjs').emitWorkflowScript`\ndirectly). It maps the phase's wave/plan manifest to the Workflow script string\nand never invokes the Workflow tool itself; the orchestrator runs the emitted\nscript. Detection is resolved by the orchestrator calling the pure\n`detectWorkflowBackend` with the LIVE host descriptor (the CLI\n`gsd-tools claude-orchestration detect-backend` is a simulation harness that\nassumes a capable host unless `--no-nested-dispatch` is passed — it does not probe\nthe real runtime; the orchestrator supplies the real descriptor).\n\n## Fallback contract\n\nIf detection resolves to `inline` (tool absent, SDK too old, runtime not Claude,\nor the capability disabled), execute-phase MUST proceed with the standard inline\nwave dispatch. The executor MUST NOT assume parallelism, a shared budget, or\nresume-from-run-id semantics in that mode.\n"
|
|
489
|
+
},
|
|
490
|
+
"produces": [],
|
|
491
|
+
"consumes": [
|
|
492
|
+
"PLAN.md"
|
|
493
|
+
],
|
|
494
|
+
"when": "claude_orchestration.enabled",
|
|
495
|
+
"onError": "skip"
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
"point": "plan:post",
|
|
499
|
+
"into": "planner",
|
|
500
|
+
"fragment": {
|
|
501
|
+
"path": "fragments/plan-post.md",
|
|
502
|
+
"inline": "# Claude orchestration — ultraplan plan-offload ownership (BETA)\n\n> Injected at `plan:post` `into: planner` only when\n> `claude_orchestration.enabled` is true. Default-off; `onError: skip`.\n\n## Ownership declaration\n\nThe `gsd-ultraplan-phase` plan-offload surface (offloading GSD's plan phase to\nClaude Code's ultraplan cloud) is **owned by this capability**, not by a\nstandalone BETA skill. Both surfaces share one runtime gate\n(`claude_orchestration.enabled`), one BETA boundary, and one Claude-Code-only\ndetection seam.\n\n## When the planner should consider ultraplan offload\n\nWhen this contribution is active (capability enabled, Claude Code runtime), the\nplanner MAY offer the `/gsd-ultraplan-phase` path as an alternative to local\n`/gsd-plan-phase` for phases where cloud-assisted planning adds value. This is\nadvisory, not mandatory — the stable local planner remains the default.\n\n## Fallback contract\n\nIf the capability is disabled, or the runtime is not Claude Code, ultraplan\noffload is **not surfaced** and the planner proceeds with the standard local\n`/gsd-plan-phase`. The `gsd-ultraplan-phase` command itself remains installed\n(its own runtime gate already no-ops on non-Claude runtimes); this contribution\nonly governs whether the capability manifest advertises it as part of the\norchestration surface.\n"
|
|
503
|
+
},
|
|
504
|
+
"produces": [],
|
|
505
|
+
"consumes": [
|
|
506
|
+
"CONTEXT.md"
|
|
507
|
+
],
|
|
508
|
+
"when": "claude_orchestration.enabled",
|
|
509
|
+
"onError": "skip"
|
|
510
|
+
}
|
|
511
|
+
],
|
|
512
|
+
"gates": []
|
|
513
|
+
},
|
|
411
514
|
"cline": {
|
|
412
515
|
"id": "cline",
|
|
413
516
|
"role": "runtime",
|
|
414
|
-
"version": "1.7.0-rc.
|
|
517
|
+
"version": "1.7.0-rc.4",
|
|
415
518
|
"title": "Cline",
|
|
416
519
|
"description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
|
|
417
520
|
"tier": "core",
|
|
@@ -472,7 +575,7 @@ const capabilities = {
|
|
|
472
575
|
"code-review": {
|
|
473
576
|
"id": "code-review",
|
|
474
577
|
"role": "feature",
|
|
475
|
-
"version": "1.7.0-rc.
|
|
578
|
+
"version": "1.7.0-rc.4",
|
|
476
579
|
"title": "Code review",
|
|
477
580
|
"description": "Source-file code review and review-fix workflow support for completed execution work.",
|
|
478
581
|
"tier": "full",
|
|
@@ -533,7 +636,7 @@ const capabilities = {
|
|
|
533
636
|
"codebuddy": {
|
|
534
637
|
"id": "codebuddy",
|
|
535
638
|
"role": "runtime",
|
|
536
|
-
"version": "1.7.0-rc.
|
|
639
|
+
"version": "1.7.0-rc.4",
|
|
537
640
|
"title": "CodeBuddy",
|
|
538
641
|
"description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
539
642
|
"tier": "core",
|
|
@@ -636,7 +739,7 @@ const capabilities = {
|
|
|
636
739
|
"codex": {
|
|
637
740
|
"id": "codex",
|
|
638
741
|
"role": "runtime",
|
|
639
|
-
"version": "1.7.0-rc.
|
|
742
|
+
"version": "1.7.0-rc.4",
|
|
640
743
|
"title": "OpenAI Codex CLI",
|
|
641
744
|
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
|
|
642
745
|
"tier": "core",
|
|
@@ -707,7 +810,7 @@ const capabilities = {
|
|
|
707
810
|
"copilot": {
|
|
708
811
|
"id": "copilot",
|
|
709
812
|
"role": "runtime",
|
|
710
|
-
"version": "1.7.0-rc.
|
|
813
|
+
"version": "1.7.0-rc.4",
|
|
711
814
|
"title": "GitHub Copilot",
|
|
712
815
|
"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.",
|
|
713
816
|
"tier": "core",
|
|
@@ -735,6 +838,14 @@ const capabilities = {
|
|
|
735
838
|
"nesting": "flat",
|
|
736
839
|
"recursive": false,
|
|
737
840
|
"converter": "convertClaudeCommandToCopilotSkill"
|
|
841
|
+
},
|
|
842
|
+
{
|
|
843
|
+
"kind": "agents",
|
|
844
|
+
"destSubpath": "agents",
|
|
845
|
+
"prefix": "gsd-",
|
|
846
|
+
"nesting": "flat",
|
|
847
|
+
"recursive": false,
|
|
848
|
+
"converter": "convertClaudeAgentToCopilotAgent"
|
|
738
849
|
}
|
|
739
850
|
],
|
|
740
851
|
"local": [
|
|
@@ -745,6 +856,14 @@ const capabilities = {
|
|
|
745
856
|
"nesting": "flat",
|
|
746
857
|
"recursive": false,
|
|
747
858
|
"converter": "convertClaudeCommandToCopilotSkill"
|
|
859
|
+
},
|
|
860
|
+
{
|
|
861
|
+
"kind": "agents",
|
|
862
|
+
"destSubpath": "agents",
|
|
863
|
+
"prefix": "gsd-",
|
|
864
|
+
"nesting": "flat",
|
|
865
|
+
"recursive": false,
|
|
866
|
+
"converter": "convertClaudeAgentToCopilotAgent"
|
|
748
867
|
}
|
|
749
868
|
]
|
|
750
869
|
},
|
|
@@ -778,7 +897,7 @@ const capabilities = {
|
|
|
778
897
|
"cursor": {
|
|
779
898
|
"id": "cursor",
|
|
780
899
|
"role": "runtime",
|
|
781
|
-
"version": "1.7.0-rc.
|
|
900
|
+
"version": "1.7.0-rc.4",
|
|
782
901
|
"title": "Cursor",
|
|
783
902
|
"description": "Cursor IDE — skills + converted commands artifact layout; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
|
|
784
903
|
"tier": "core",
|
|
@@ -881,7 +1000,7 @@ const capabilities = {
|
|
|
881
1000
|
"drift": {
|
|
882
1001
|
"id": "drift",
|
|
883
1002
|
"role": "feature",
|
|
884
|
-
"version": "1.7.0-rc.
|
|
1003
|
+
"version": "1.7.0-rc.4",
|
|
885
1004
|
"title": "Drift detection gates",
|
|
886
1005
|
"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.",
|
|
887
1006
|
"tier": "full",
|
|
@@ -956,10 +1075,93 @@ const capabilities = {
|
|
|
956
1075
|
}
|
|
957
1076
|
]
|
|
958
1077
|
},
|
|
1078
|
+
"external-job": {
|
|
1079
|
+
"id": "external-job",
|
|
1080
|
+
"role": "feature",
|
|
1081
|
+
"version": "1.7.0-rc.4",
|
|
1082
|
+
"title": "Async external-job scheduler adapter",
|
|
1083
|
+
"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
|
+
"tier": "full",
|
|
1085
|
+
"requires": [],
|
|
1086
|
+
"engines": {
|
|
1087
|
+
"gsd": ">=1.7.0"
|
|
1088
|
+
},
|
|
1089
|
+
"runtimeCompat": {
|
|
1090
|
+
"supported": [
|
|
1091
|
+
"*"
|
|
1092
|
+
],
|
|
1093
|
+
"unsupported": []
|
|
1094
|
+
},
|
|
1095
|
+
"skills": [],
|
|
1096
|
+
"agents": [],
|
|
1097
|
+
"hooks": [],
|
|
1098
|
+
"config": {
|
|
1099
|
+
"external_job.enabled": {
|
|
1100
|
+
"type": "boolean",
|
|
1101
|
+
"default": false,
|
|
1102
|
+
"description": "Master toggle for the async external-job producer capability. Default-off: the core loop consumes manifests whether or not this is on, but no manifest is ever written unless an executor opts in here."
|
|
1103
|
+
},
|
|
1104
|
+
"external_job.backend": {
|
|
1105
|
+
"type": "enum",
|
|
1106
|
+
"values": [
|
|
1107
|
+
"slurm"
|
|
1108
|
+
],
|
|
1109
|
+
"default": "slurm",
|
|
1110
|
+
"description": "Scheduler backend. SLURM is the first adapter; the field is the pluggability seam for future backends (LSF, PBS, Kubernetes batch). Core never interprets this value."
|
|
1111
|
+
},
|
|
1112
|
+
"external_job.artifact_dir": {
|
|
1113
|
+
"type": "string",
|
|
1114
|
+
"default": "Artifacts/jobs",
|
|
1115
|
+
"description": "Root for per-job artifact directories (e.g. Artifacts/jobs/<jobid>/). Avoids fixed log paths and hardcoding a cluster/project layout. Surfaced by the adapter (`slurm-adapter.cjs submit` prints the resolved value); override via GSD_EXTERNAL_JOB_ARTIFACT_DIR."
|
|
1116
|
+
},
|
|
1117
|
+
"external_job.submit_timeout_ms": {
|
|
1118
|
+
"type": "number",
|
|
1119
|
+
"default": 30000,
|
|
1120
|
+
"description": "Hard timeout (ms) for the scheduler submit subprocess (e.g. sbatch). Bounded per CLAUDE.md unbounded-subprocess policy. Read by the adapter (env GSD_SLURM_SUBMIT_TIMEOUT_MS overrides)."
|
|
1121
|
+
},
|
|
1122
|
+
"external_job.poll_timeout_ms": {
|
|
1123
|
+
"type": "number",
|
|
1124
|
+
"default": 15000,
|
|
1125
|
+
"description": "Hard timeout (ms) for the scheduler poll subprocess (squeue, with sacct fallback). Read by the adapter (env GSD_SLURM_POLL_TIMEOUT_MS overrides)."
|
|
1126
|
+
}
|
|
1127
|
+
},
|
|
1128
|
+
"steps": [],
|
|
1129
|
+
"contributions": [
|
|
1130
|
+
{
|
|
1131
|
+
"point": "execute:wave:post",
|
|
1132
|
+
"into": "executor",
|
|
1133
|
+
"fragment": {
|
|
1134
|
+
"path": "fragments/execute-wave-post.md",
|
|
1135
|
+
"inline": "<!-- external-job capability — execute:wave:post fragment, injected into the executor (#1164).\n\n Why wave:post, not wave:pre (#1164 refinement A): execute-phase.md only\n dispatches execute:wave:post today — wave:pre is declared in the loop host\n contract but not rendered. Wiring wave:pre dispatch is a core-loop change\n #1164 puts out of scope. The executor therefore honors this classification\n guidance BEFORE running any task tagged <runtime_budget>long_compute</runtime_budget>,\n whether in the current or a subsequent wave, and externalizes rather than\n blocking the turn. -->\n\n## Externalize long-running compute (async external job)\n\nIf the current plan's task is tagged `<runtime_budget>long_compute</runtime_budget>`\n(see the plan-phase fragment), do **not** run it in the foreground — it would\nblock the agent turn for hours. Instead externalize it and record a durable\nhalf-state:\n\n1. **Classify the runtime.** `quick` (<2 min) and `medium` (<~30 min) run\n normally. `unknown` requires a first-health check and a soft-review deadline\n before consuming the child timeout. `long_compute` (>30–60 min) is\n externalized.\n2. **Submit via the scheduler adapter** (default `external_job.backend: slurm`):\n ```bash\n node scripts/slurm-adapter.cjs submit \\\n --plan <plan_id> --phase <phase> -- sbatch --parsable \\\n --output=Artifacts/jobs/%j/out.log ./run.sh\n ```\n The helper writes `.planning/async-jobs/<job>.json` (the versioned stability\n contract — `docs/reference/planning-artifacts.md`) and refuses to create a\n second non-terminal manifest for a `plan_id` that already has one\n (duplicate-execution guard).\n3. **Commit the manifest + a handoff**, then return **`external_job_waiting`**\n and stop. Do **not** write `SUMMARY.md` — SUMMARY is deferred until the job\n reaches a terminal state and its `expected_artifacts` are verified.\n4. **Resume path.** `execute-phase` safe-resume, `resume-project`, and\n `pause-work` reconcile against the manifest and never re-dispatch the plan.\n When the job is `completed-unverified`, run `verification_command` (surface\n it; it is untrusted — confirm before executing), then write `SUMMARY.md` and\n close the plan.\n\nManifest commands cross a trust seam: a Capability (or anything that can write\n`.planning/`) produces them; the core loop consumes them. Never auto-run\n`submit_command` / `verification_command` / `resume_command` — surface the exact\ncommand and require explicit confirmation first.\n"
|
|
1136
|
+
},
|
|
1137
|
+
"produces": [
|
|
1138
|
+
".planning/async-jobs/<job>.json"
|
|
1139
|
+
],
|
|
1140
|
+
"consumes": [
|
|
1141
|
+
"PLAN.md"
|
|
1142
|
+
],
|
|
1143
|
+
"when": "external_job.enabled",
|
|
1144
|
+
"onError": "skip"
|
|
1145
|
+
},
|
|
1146
|
+
{
|
|
1147
|
+
"point": "plan:post",
|
|
1148
|
+
"into": "planner",
|
|
1149
|
+
"fragment": {
|
|
1150
|
+
"path": "fragments/plan-post.md",
|
|
1151
|
+
"inline": "<!-- external-job capability — plan:post fragment, injected into the planner (#1164). -->\n\n## Tag runtime budgets on long tasks\n\nFor every `<task>` likely to exceed ~2 minutes of real compute, emit a\n`<runtime_budget>` child element so execute can classify it:\n\n- `<runtime_budget>quick</runtime_budget>` — under ~2 min; runs normally.\n- `<runtime_budget>medium</runtime_budget>` — ~2–30 min; foreground, but with\n progress expectations.\n- `<runtime_budget>unknown</runtime_budget>` — runtime not yet characterized;\n execute must run a first-health check and set a soft-review deadline before\n trusting the child timeout. Define a progress signal and an abort condition.\n- `<runtime_budget>long_compute</runtime_budget>` — legitimately over ~30–60 min\n (HPC solver, model training, large simulations). Execute must **externalize**\n this as an async external job (see the execute:wave:post fragment) rather than\n blocking the agent turn.\n\nFor any `long_compute` task, also declare the async contract the executor will\nneed: the `submit_command`, the `expected_artifacts` the job must produce, and\nthe `verification_command` that proves the output before the plan can close.\nDo not hardcode a cluster account, partition, or project path — the planner\nnever knows the scheduler layout; it declares the contract, the executor's\nadapter fills the backend specifics.\n"
|
|
1152
|
+
},
|
|
1153
|
+
"produces": [],
|
|
1154
|
+
"consumes": [],
|
|
1155
|
+
"when": "external_job.enabled",
|
|
1156
|
+
"onError": "skip"
|
|
1157
|
+
}
|
|
1158
|
+
],
|
|
1159
|
+
"gates": []
|
|
1160
|
+
},
|
|
959
1161
|
"gap-analysis": {
|
|
960
1162
|
"id": "gap-analysis",
|
|
961
1163
|
"role": "feature",
|
|
962
|
-
"version": "1.7.0-rc.
|
|
1164
|
+
"version": "1.7.0-rc.4",
|
|
963
1165
|
"title": "Post-planning gap analysis",
|
|
964
1166
|
"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.",
|
|
965
1167
|
"tier": "standard",
|
|
@@ -997,85 +1199,10 @@ const capabilities = {
|
|
|
997
1199
|
}
|
|
998
1200
|
]
|
|
999
1201
|
},
|
|
1000
|
-
"gemini": {
|
|
1001
|
-
"id": "gemini",
|
|
1002
|
-
"role": "runtime",
|
|
1003
|
-
"version": "1.7.0-rc.2",
|
|
1004
|
-
"title": "Gemini CLI",
|
|
1005
|
-
"description": "Google Gemini CLI — commands-only artifact layout (TOML); Gemini hook event dialect; settings-json hook surface; tier-2 support.",
|
|
1006
|
-
"tier": "core",
|
|
1007
|
-
"requires": [],
|
|
1008
|
-
"engines": {
|
|
1009
|
-
"gsd": ">=1.6.0"
|
|
1010
|
-
},
|
|
1011
|
-
"runtime": {
|
|
1012
|
-
"configHome": {
|
|
1013
|
-
"kind": "dot-home",
|
|
1014
|
-
"name": ".gemini",
|
|
1015
|
-
"env": [
|
|
1016
|
-
"GEMINI_CONFIG_DIR"
|
|
1017
|
-
]
|
|
1018
|
-
},
|
|
1019
|
-
"localConfigDir": ".gemini",
|
|
1020
|
-
"configFormat": "settings-json",
|
|
1021
|
-
"artifactLayout": {
|
|
1022
|
-
"global": [
|
|
1023
|
-
{
|
|
1024
|
-
"kind": "commands",
|
|
1025
|
-
"destSubpath": "commands/gsd",
|
|
1026
|
-
"prefix": "gsd-",
|
|
1027
|
-
"nesting": "flat",
|
|
1028
|
-
"recursive": false,
|
|
1029
|
-
"converter": null
|
|
1030
|
-
}
|
|
1031
|
-
],
|
|
1032
|
-
"local": [
|
|
1033
|
-
{
|
|
1034
|
-
"kind": "commands",
|
|
1035
|
-
"destSubpath": "commands/gsd",
|
|
1036
|
-
"prefix": "gsd-",
|
|
1037
|
-
"nesting": "flat",
|
|
1038
|
-
"recursive": false,
|
|
1039
|
-
"converter": null
|
|
1040
|
-
}
|
|
1041
|
-
]
|
|
1042
|
-
},
|
|
1043
|
-
"commandStyle": "slash-hyphen",
|
|
1044
|
-
"hooksSurface": "settings-json",
|
|
1045
|
-
"hookEvents": "gemini",
|
|
1046
|
-
"sandboxTier": "none",
|
|
1047
|
-
"supportTier": 2,
|
|
1048
|
-
"installSurface": "settings-json",
|
|
1049
|
-
"writesSharedSettings": true,
|
|
1050
|
-
"permissionWriter": null,
|
|
1051
|
-
"extendedHookEvents": [
|
|
1052
|
-
"BeforeAgent",
|
|
1053
|
-
"AfterAgent",
|
|
1054
|
-
"BeforeModel"
|
|
1055
|
-
],
|
|
1056
|
-
"hostIntegration": {
|
|
1057
|
-
"embeddingMode": "declarative",
|
|
1058
|
-
"commandSurface": "slash-toml",
|
|
1059
|
-
"dispatch": {
|
|
1060
|
-
"namedDispatch": true,
|
|
1061
|
-
"nested": false,
|
|
1062
|
-
"maxDepth": 1,
|
|
1063
|
-
"background": "undocumented",
|
|
1064
|
-
"subagentToolkit": "undocumented",
|
|
1065
|
-
"backgroundDispatch": false
|
|
1066
|
-
},
|
|
1067
|
-
"modelMode": "passive",
|
|
1068
|
-
"hookBus": "host",
|
|
1069
|
-
"stateIO": "filesystem",
|
|
1070
|
-
"transport": "mcp",
|
|
1071
|
-
"runtime": "node"
|
|
1072
|
-
}
|
|
1073
|
-
}
|
|
1074
|
-
},
|
|
1075
1202
|
"graphify": {
|
|
1076
1203
|
"id": "graphify",
|
|
1077
1204
|
"role": "feature",
|
|
1078
|
-
"version": "1.7.0-rc.
|
|
1205
|
+
"version": "1.7.0-rc.4",
|
|
1079
1206
|
"title": "Knowledge graph",
|
|
1080
1207
|
"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.",
|
|
1081
1208
|
"tier": "full",
|
|
@@ -1116,7 +1243,7 @@ const capabilities = {
|
|
|
1116
1243
|
"hermes": {
|
|
1117
1244
|
"id": "hermes",
|
|
1118
1245
|
"role": "runtime",
|
|
1119
|
-
"version": "1.7.0-rc.
|
|
1246
|
+
"version": "1.7.0-rc.4",
|
|
1120
1247
|
"title": "Hermes Agent",
|
|
1121
1248
|
"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.",
|
|
1122
1249
|
"tier": "core",
|
|
@@ -1187,7 +1314,7 @@ const capabilities = {
|
|
|
1187
1314
|
"intel": {
|
|
1188
1315
|
"id": "intel",
|
|
1189
1316
|
"role": "feature",
|
|
1190
|
-
"version": "1.7.0-rc.
|
|
1317
|
+
"version": "1.7.0-rc.4",
|
|
1191
1318
|
"title": "Codebase intelligence",
|
|
1192
1319
|
"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`.",
|
|
1193
1320
|
"tier": "full",
|
|
@@ -1239,7 +1366,7 @@ const capabilities = {
|
|
|
1239
1366
|
"kilo": {
|
|
1240
1367
|
"id": "kilo",
|
|
1241
1368
|
"role": "runtime",
|
|
1242
|
-
"version": "1.7.0-rc.
|
|
1369
|
+
"version": "1.7.0-rc.4",
|
|
1243
1370
|
"title": "Kilo Code",
|
|
1244
1371
|
"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.",
|
|
1245
1372
|
"tier": "core",
|
|
@@ -1332,7 +1459,7 @@ const capabilities = {
|
|
|
1332
1459
|
"kimi": {
|
|
1333
1460
|
"id": "kimi",
|
|
1334
1461
|
"role": "runtime",
|
|
1335
|
-
"version": "1.7.0-rc.
|
|
1462
|
+
"version": "1.7.0-rc.4",
|
|
1336
1463
|
"title": "Kimi CLI",
|
|
1337
1464
|
"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.",
|
|
1338
1465
|
"tier": "core",
|
|
@@ -1406,7 +1533,7 @@ const capabilities = {
|
|
|
1406
1533
|
"mempalace": {
|
|
1407
1534
|
"id": "mempalace",
|
|
1408
1535
|
"role": "feature",
|
|
1409
|
-
"version": "1.7.0-rc.
|
|
1536
|
+
"version": "1.7.0-rc.4",
|
|
1410
1537
|
"title": "MemPalace memory",
|
|
1411
1538
|
"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.",
|
|
1412
1539
|
"tier": "full",
|
|
@@ -1442,7 +1569,7 @@ const capabilities = {
|
|
|
1442
1569
|
"replace"
|
|
1443
1570
|
],
|
|
1444
1571
|
"default": "augment",
|
|
1445
|
-
"description": "How MemPalace relates to GSD native memory.
|
|
1572
|
+
"description": "How MemPalace relates to GSD native memory during recall/capture. 'augment' (default): the palace is an additive layer alongside .planning/graphs/ — native memory stays authoritative. 'kg_backend': knowledge-graph queries resolve against the palace's temporal KG as the primary source, with .planning/graphs/ as fallback. 'replace': recall resolves through the palace as the source of truth, native memory as fallback. Every mode stays onError:skip and default-resilient — an unreachable palace degrades to native memory, and GSD keeps writing .planning/graphs/ so no memory is lost. Cross-mode migration of existing .planning/graphs/ into the palace is a separate, not-yet-implemented concern."
|
|
1446
1573
|
},
|
|
1447
1574
|
"mempalace.wing": {
|
|
1448
1575
|
"type": "string",
|
|
@@ -1555,7 +1682,7 @@ const capabilities = {
|
|
|
1555
1682
|
"into": "orchestrator",
|
|
1556
1683
|
"fragment": {
|
|
1557
1684
|
"path": "fragments/recall-discuss.md",
|
|
1558
|
-
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the discuss:pre orchestrator prompt when `mempalace.recall_on_discuss` is true.\n Contributes DATA (recall instructions), not control flow. onError: skip — never blocks discussion.\n-->\n### Memory recall (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.recall_on_discuss` is `false`, **skip this entire section** and continue the discussion unchanged. (This contribution is only injected when the capability is enabled; the `recall_on_discuss` check lets you turn discuss-time recall off without disabling the rest of the capability.)\n\nOtherwise — before gathering new context, surface what you already know. This is read-only and side-effect-free; if MemPalace is unreachable, note \"memory unavailable\" and continue — recall never blocks discussion.\n\n1. **Resolve the wing.** Use `mempalace.wing` if set; otherwise derive it from `project_code` (fall back to the project directory name).\n2. **Wake up (cheap, ~600–900 tokens).**\n - Interactive run → call `mempalace_search` after a wake-up read of the wing.\n - Headless/cron run (no MCP server) → run `mempalace wake-up --wing <wing>` via the CLI.\n3. **Targeted recall.** Search the palace for prior work on this phase's topic:\n - Interactive → `mempalace_search(query=<phase topic>, wing=<wing>)` and, when `mempalace.mirror_kg` is on, `mempalace_kg_query` / `mempalace_kg_timeline` for decision facts and their validity windows.\n - Headless → `mempalace search \"<phase topic>\" --wing <wing>`.\n4. **Mode awareness
|
|
1685
|
+
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the discuss:pre orchestrator prompt when `mempalace.recall_on_discuss` is true.\n Contributes DATA (recall instructions), not control flow. onError: skip — never blocks discussion.\n-->\n### Memory recall (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.recall_on_discuss` is `false`, **skip this entire section** and continue the discussion unchanged. (This contribution is only injected when the capability is enabled; the `recall_on_discuss` check lets you turn discuss-time recall off without disabling the rest of the capability.)\n\nOtherwise — before gathering new context, surface what you already know. This is read-only and side-effect-free; if MemPalace is unreachable, note \"memory unavailable\" and continue — recall never blocks discussion.\n\n1. **Resolve the wing.** Use `mempalace.wing` if set; otherwise derive it from `project_code` (fall back to the project directory name).\n2. **Wake up (cheap, ~600–900 tokens).**\n - Interactive run → call `mempalace_search` after a wake-up read of the wing.\n - Headless/cron run (no MCP server) → run `mempalace wake-up --wing <wing>` via the CLI.\n3. **Targeted recall.** Search the palace for prior work on this phase's topic:\n - Interactive → `mempalace_search(query=<phase topic>, wing=<wing>)` and, when `mempalace.mirror_kg` is on, `mempalace_kg_query` / `mempalace_kg_timeline` for decision facts and their validity windows.\n - Headless → `mempalace search \"<phase topic>\" --wing <wing>`.\n4. **Mode awareness** (`mempalace.memory_mode`). `augment` (default): the palace is an *additional* layer — never skip `.planning/graphs/` or STATE. `kg_backend`: query the palace's temporal KG as the *primary* graph source, with `.planning/graphs/` as fallback. `replace`: resolve recall *through the palace as the source of truth*, native memory as fallback. In every mode an unreachable palace falls back to native memory — recall never blocks.\n5. **Surface, don't dump.** Fold the top relevant drawers, decisions, patterns, and *surprises* into the discussion as prior context — cite drawer/fact provenance. Do not paste raw search output.\n\nIf any MemPalace call errors or times out, skip the rest of recall and proceed with discussion as normal.\n"
|
|
1559
1686
|
},
|
|
1560
1687
|
"produces": [],
|
|
1561
1688
|
"consumes": [],
|
|
@@ -1567,7 +1694,7 @@ const capabilities = {
|
|
|
1567
1694
|
"into": "verifier",
|
|
1568
1695
|
"fragment": {
|
|
1569
1696
|
"path": "fragments/capture-problems.md",
|
|
1570
|
-
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the execute:wave:post verifier prompt when `mempalace.capture_artifacts` is true.\n Contributes DATA (capture instructions), not control flow. onError: skip — never fails a wave.\n-->\n### Capture problems → fixes (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.capture_artifacts` is `false`, **skip this entire section** and let the wave complete unchanged. (This contribution is only injected when the capability is enabled; the `capture_artifacts` check lets you turn capture off without disabling the rest of the capability.)\n\nOtherwise — after verifying this wave, persist any *confirmed* problem→fix pairs into the palace so they are recalled in future phases. This is best-effort; if MemPalace is unreachable, skip silently — capture never fails a wave.\n\nFor each confirmed bug/issue resolved in this wave:\n\n1. **Resolve the wing** (`mempalace.wing`, else `project_code`, else project dir) and target `room: problems`.\n2. **Dedupe first.** Call `mempalace_check_duplicate` (interactive) before filing so re-runs don't create duplicate drawers.\n3. **File the drawer verbatim.** Store the problem statement and its fix as a drawer in `room: problems` — interactive: `mempalace_add_drawer`; headless: `mempalace mine` / `mempalace hook run`. Include provenance (`source_file`, phase id).\n4. **Mirror the KG fact** when `mempalace.mirror_kg` is on: add `(<bug>, fixed_by, <fix>)` with `valid_from` = the phase date via `mempalace_kg_add`.\n5. **Mode awareness
|
|
1697
|
+
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the execute:wave:post verifier prompt when `mempalace.capture_artifacts` is true.\n Contributes DATA (capture instructions), not control flow. onError: skip — never fails a wave.\n-->\n### Capture problems → fixes (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.capture_artifacts` is `false`, **skip this entire section** and let the wave complete unchanged. (This contribution is only injected when the capability is enabled; the `capture_artifacts` check lets you turn capture off without disabling the rest of the capability.)\n\nOtherwise — after verifying this wave, persist any *confirmed* problem→fix pairs into the palace so they are recalled in future phases. This is best-effort; if MemPalace is unreachable, skip silently — capture never fails a wave.\n\nFor each confirmed bug/issue resolved in this wave:\n\n1. **Resolve the wing** (`mempalace.wing`, else `project_code`, else project dir) and target `room: problems`.\n2. **Dedupe first.** Call `mempalace_check_duplicate` (interactive) before filing so re-runs don't create duplicate drawers.\n3. **File the drawer verbatim.** Store the problem statement and its fix as a drawer in `room: problems` — interactive: `mempalace_add_drawer`; headless: `mempalace mine` / `mempalace hook run`. Include provenance (`source_file`, phase id).\n4. **Mirror the KG fact** when `mempalace.mirror_kg` is on: add `(<bug>, fixed_by, <fix>)` with `valid_from` = the phase date via `mempalace_kg_add`.\n5. **Mode awareness** (`mempalace.memory_mode`). Under `augment` the fact is an *additive* mirror alongside `.planning/graphs/`. Under `kg_backend`/`replace` the palace is the *authoritative* store for the fact; GSD still writes `.planning/graphs/` through its normal graphify, so an unreachable palace never loses it.\n\nCaptures are idempotent: deterministic drawer IDs + `check_duplicate` mean re-running the wave re-files the same content without duplication. On any error, skip and let the wave complete normally.\n"
|
|
1571
1698
|
},
|
|
1572
1699
|
"produces": [],
|
|
1573
1700
|
"consumes": [],
|
|
@@ -1580,7 +1707,7 @@ const capabilities = {
|
|
|
1580
1707
|
"nyquist": {
|
|
1581
1708
|
"id": "nyquist",
|
|
1582
1709
|
"role": "feature",
|
|
1583
|
-
"version": "1.7.0-rc.
|
|
1710
|
+
"version": "1.7.0-rc.4",
|
|
1584
1711
|
"title": "Nyquist validation",
|
|
1585
1712
|
"description": "Validation coverage audit that maps executed work back to tests and manual-only evidence.",
|
|
1586
1713
|
"tier": "full",
|
|
@@ -1630,7 +1757,7 @@ const capabilities = {
|
|
|
1630
1757
|
"opencode": {
|
|
1631
1758
|
"id": "opencode",
|
|
1632
1759
|
"role": "runtime",
|
|
1633
|
-
"version": "1.7.0-rc.
|
|
1760
|
+
"version": "1.7.0-rc.4",
|
|
1634
1761
|
"title": "OpenCode",
|
|
1635
1762
|
"description": "OpenCode — XDG-based config dir; flat command/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
|
|
1636
1763
|
"tier": "core",
|
|
@@ -1719,7 +1846,7 @@ const capabilities = {
|
|
|
1719
1846
|
"pattern-mapper": {
|
|
1720
1847
|
"id": "pattern-mapper",
|
|
1721
1848
|
"role": "feature",
|
|
1722
|
-
"version": "1.7.0-rc.
|
|
1849
|
+
"version": "1.7.0-rc.4",
|
|
1723
1850
|
"title": "Pattern mapping",
|
|
1724
1851
|
"description": "Optional codebase-pattern mapping before planning; owns the pattern mapper agent and workflow.pattern_mapper activation key.",
|
|
1725
1852
|
"tier": "full",
|
|
@@ -1773,7 +1900,7 @@ const capabilities = {
|
|
|
1773
1900
|
"profile-pipeline": {
|
|
1774
1901
|
"id": "profile-pipeline",
|
|
1775
1902
|
"role": "feature",
|
|
1776
|
-
"version": "1.7.0-rc.
|
|
1903
|
+
"version": "1.7.0-rc.4",
|
|
1777
1904
|
"title": "Developer profiling pipeline",
|
|
1778
1905
|
"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.",
|
|
1779
1906
|
"tier": "full",
|
|
@@ -1850,7 +1977,7 @@ const capabilities = {
|
|
|
1850
1977
|
"qwen": {
|
|
1851
1978
|
"id": "qwen",
|
|
1852
1979
|
"role": "runtime",
|
|
1853
|
-
"version": "1.7.0-rc.
|
|
1980
|
+
"version": "1.7.0-rc.4",
|
|
1854
1981
|
"title": "Qwen Code",
|
|
1855
1982
|
"description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
1856
1983
|
"tier": "core",
|
|
@@ -1925,7 +2052,7 @@ const capabilities = {
|
|
|
1925
2052
|
"research": {
|
|
1926
2053
|
"id": "research",
|
|
1927
2054
|
"role": "feature",
|
|
1928
|
-
"version": "1.7.0-rc.
|
|
2055
|
+
"version": "1.7.0-rc.4",
|
|
1929
2056
|
"title": "Phase research",
|
|
1930
2057
|
"description": "Optional phase research before planning; owns the phase researcher agent and workflow.research activation key.",
|
|
1931
2058
|
"tier": "standard",
|
|
@@ -1977,7 +2104,7 @@ const capabilities = {
|
|
|
1977
2104
|
"schema-gate": {
|
|
1978
2105
|
"id": "schema-gate",
|
|
1979
2106
|
"role": "feature",
|
|
1980
|
-
"version": "1.7.0-rc.
|
|
2107
|
+
"version": "1.7.0-rc.4",
|
|
1981
2108
|
"title": "Schema push detection gate",
|
|
1982
2109
|
"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.",
|
|
1983
2110
|
"tier": "full",
|
|
@@ -2023,7 +2150,7 @@ const capabilities = {
|
|
|
2023
2150
|
"security": {
|
|
2024
2151
|
"id": "security",
|
|
2025
2152
|
"role": "feature",
|
|
2026
|
-
"version": "1.7.0-rc.
|
|
2153
|
+
"version": "1.7.0-rc.4",
|
|
2027
2154
|
"title": "Security enforcement",
|
|
2028
2155
|
"description": "Threat mitigation verification and ship-time security blocking for phases with security enforcement enabled.",
|
|
2029
2156
|
"tier": "full",
|
|
@@ -2122,7 +2249,7 @@ const capabilities = {
|
|
|
2122
2249
|
"tdd": {
|
|
2123
2250
|
"id": "tdd",
|
|
2124
2251
|
"role": "feature",
|
|
2125
|
-
"version": "1.7.0-rc.
|
|
2252
|
+
"version": "1.7.0-rc.4",
|
|
2126
2253
|
"title": "Test-driven development",
|
|
2127
2254
|
"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.",
|
|
2128
2255
|
"tier": "full",
|
|
@@ -2175,7 +2302,7 @@ const capabilities = {
|
|
|
2175
2302
|
"trae": {
|
|
2176
2303
|
"id": "trae",
|
|
2177
2304
|
"role": "runtime",
|
|
2178
|
-
"version": "1.7.0-rc.
|
|
2305
|
+
"version": "1.7.0-rc.4",
|
|
2179
2306
|
"title": "Trae IDE",
|
|
2180
2307
|
"description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
|
|
2181
2308
|
"tier": "core",
|
|
@@ -2261,7 +2388,7 @@ const capabilities = {
|
|
|
2261
2388
|
"ui": {
|
|
2262
2389
|
"id": "ui",
|
|
2263
2390
|
"role": "feature",
|
|
2264
|
-
"version": "1.7.0-rc.
|
|
2391
|
+
"version": "1.7.0-rc.4",
|
|
2265
2392
|
"title": "UI design contracts",
|
|
2266
2393
|
"description": "UI-SPEC design contract + retrospective UI audit for frontend phases.",
|
|
2267
2394
|
"tier": "full",
|
|
@@ -2356,7 +2483,7 @@ const capabilities = {
|
|
|
2356
2483
|
"windsurf": {
|
|
2357
2484
|
"id": "windsurf",
|
|
2358
2485
|
"role": "runtime",
|
|
2359
|
-
"version": "1.7.0-rc.
|
|
2486
|
+
"version": "1.7.0-rc.4",
|
|
2360
2487
|
"title": "Windsurf",
|
|
2361
2488
|
"description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; no hook surface; no hook events; tier-2 support.",
|
|
2362
2489
|
"tier": "core",
|
|
@@ -2431,66 +2558,168 @@ const capabilities = {
|
|
|
2431
2558
|
"runtime": "undocumented"
|
|
2432
2559
|
}
|
|
2433
2560
|
}
|
|
2434
|
-
}
|
|
2435
|
-
};
|
|
2436
|
-
|
|
2437
|
-
const bySkill = {
|
|
2438
|
-
"ai-integration-phase": "ai-integration",
|
|
2439
|
-
"code-review": "code-review",
|
|
2440
|
-
"graphify": "graphify",
|
|
2441
|
-
"mempalace-recall": "mempalace",
|
|
2442
|
-
"mempalace-capture": "mempalace",
|
|
2443
|
-
"validate-phase": "nyquist",
|
|
2444
|
-
"profile-user": "profile-pipeline",
|
|
2445
|
-
"secure-phase": "security",
|
|
2446
|
-
"ui-phase": "ui",
|
|
2447
|
-
"ui-review": "ui"
|
|
2448
|
-
};
|
|
2449
|
-
|
|
2450
|
-
const byAgent = {
|
|
2451
|
-
"gsd-framework-selector": "ai-integration",
|
|
2452
|
-
"gsd-ai-researcher": "ai-integration",
|
|
2453
|
-
"gsd-domain-researcher": "ai-integration",
|
|
2454
|
-
"gsd-eval-planner": "ai-integration",
|
|
2455
|
-
"gsd-code-reviewer": "code-review",
|
|
2456
|
-
"gsd-code-fixer": "code-review",
|
|
2457
|
-
"gsd-mempalace-curator": "mempalace",
|
|
2458
|
-
"gsd-nyquist-auditor": "nyquist",
|
|
2459
|
-
"gsd-pattern-mapper": "pattern-mapper",
|
|
2460
|
-
"gsd-user-profiler": "profile-pipeline",
|
|
2461
|
-
"gsd-phase-researcher": "research",
|
|
2462
|
-
"gsd-security-auditor": "security",
|
|
2463
|
-
"gsd-ui-checker": "ui",
|
|
2464
|
-
"gsd-ui-auditor": "ui"
|
|
2465
|
-
};
|
|
2466
|
-
|
|
2467
|
-
const byLoopPoint = {
|
|
2468
|
-
"discuss:pre": {
|
|
2469
|
-
"steps": [],
|
|
2470
|
-
"contributions": [
|
|
2471
|
-
{
|
|
2472
|
-
"capId": "mempalace",
|
|
2473
|
-
"point": "discuss:pre",
|
|
2474
|
-
"into": "orchestrator",
|
|
2475
|
-
"fragment": {
|
|
2476
|
-
"path": "fragments/recall-discuss.md",
|
|
2477
|
-
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the discuss:pre orchestrator prompt when `mempalace.recall_on_discuss` is true.\n Contributes DATA (recall instructions), not control flow. onError: skip — never blocks discussion.\n-->\n### Memory recall (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.recall_on_discuss` is `false`, **skip this entire section** and continue the discussion unchanged. (This contribution is only injected when the capability is enabled; the `recall_on_discuss` check lets you turn discuss-time recall off without disabling the rest of the capability.)\n\nOtherwise — before gathering new context, surface what you already know. This is read-only and side-effect-free; if MemPalace is unreachable, note \"memory unavailable\" and continue — recall never blocks discussion.\n\n1. **Resolve the wing.** Use `mempalace.wing` if set; otherwise derive it from `project_code` (fall back to the project directory name).\n2. **Wake up (cheap, ~600–900 tokens).**\n - Interactive run → call `mempalace_search` after a wake-up read of the wing.\n - Headless/cron run (no MCP server) → run `mempalace wake-up --wing <wing>` via the CLI.\n3. **Targeted recall.** Search the palace for prior work on this phase's topic:\n - Interactive → `mempalace_search(query=<phase topic>, wing=<wing>)` and, when `mempalace.mirror_kg` is on, `mempalace_kg_query` / `mempalace_kg_timeline` for decision facts and their validity windows.\n - Headless → `mempalace search \"<phase topic>\" --wing <wing>`.\n4. **Mode awareness.** Only `augment` is currently wired: always treat the palace as an *additional* recall layer on top of GSD's native memory — never skip `.planning/graphs/` or STATE. `kg_backend`/`replace` are forward-declared and behave as `augment` today.\n5. **Surface, don't dump.** Fold the top relevant drawers, decisions, patterns, and *surprises* into the discussion as prior context — cite drawer/fact provenance. Do not paste raw search output.\n\nIf any MemPalace call errors or times out, skip the rest of recall and proceed with discussion as normal.\n"
|
|
2478
|
-
},
|
|
2479
|
-
"produces": [],
|
|
2480
|
-
"consumes": [],
|
|
2481
|
-
"when": "mempalace.enabled",
|
|
2482
|
-
"onError": "skip"
|
|
2483
|
-
}
|
|
2484
|
-
],
|
|
2485
|
-
"gates": []
|
|
2486
2561
|
},
|
|
2487
|
-
"
|
|
2488
|
-
"
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2562
|
+
"zcode": {
|
|
2563
|
+
"id": "zcode",
|
|
2564
|
+
"role": "runtime",
|
|
2565
|
+
"version": "1.7.0-rc.4",
|
|
2566
|
+
"title": "ZCode",
|
|
2567
|
+
"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
|
+
"tier": "core",
|
|
2569
|
+
"requires": [],
|
|
2570
|
+
"engines": {
|
|
2571
|
+
"gsd": ">=1.6.0"
|
|
2572
|
+
},
|
|
2573
|
+
"runtime": {
|
|
2574
|
+
"configHome": {
|
|
2575
|
+
"kind": "dot-home",
|
|
2576
|
+
"name": ".zcode",
|
|
2577
|
+
"env": [
|
|
2578
|
+
"ZCODE_CONFIG_DIR"
|
|
2579
|
+
]
|
|
2580
|
+
},
|
|
2581
|
+
"localConfigDir": ".zcode",
|
|
2582
|
+
"configFormat": "none",
|
|
2583
|
+
"artifactLayout": {
|
|
2584
|
+
"global": [
|
|
2585
|
+
{
|
|
2586
|
+
"kind": "skills",
|
|
2587
|
+
"destSubpath": "skills",
|
|
2588
|
+
"prefix": "gsd-",
|
|
2589
|
+
"nesting": "nested",
|
|
2590
|
+
"recursive": false,
|
|
2591
|
+
"converter": "convertClaudeCommandToClaudeSkill"
|
|
2592
|
+
},
|
|
2593
|
+
{
|
|
2594
|
+
"kind": "commands",
|
|
2595
|
+
"destSubpath": "commands",
|
|
2596
|
+
"prefix": "gsd-",
|
|
2597
|
+
"nesting": "flat",
|
|
2598
|
+
"recursive": false,
|
|
2599
|
+
"converter": null
|
|
2600
|
+
},
|
|
2601
|
+
{
|
|
2602
|
+
"kind": "agents",
|
|
2603
|
+
"destSubpath": "agents",
|
|
2604
|
+
"prefix": "gsd-",
|
|
2605
|
+
"nesting": "flat",
|
|
2606
|
+
"recursive": false,
|
|
2607
|
+
"converter": null
|
|
2608
|
+
}
|
|
2609
|
+
],
|
|
2610
|
+
"local": [
|
|
2611
|
+
{
|
|
2612
|
+
"kind": "skills",
|
|
2613
|
+
"destSubpath": "skills",
|
|
2614
|
+
"prefix": "gsd-",
|
|
2615
|
+
"nesting": "nested",
|
|
2616
|
+
"recursive": false,
|
|
2617
|
+
"converter": "convertClaudeCommandToClaudeSkill"
|
|
2618
|
+
},
|
|
2619
|
+
{
|
|
2620
|
+
"kind": "commands",
|
|
2621
|
+
"destSubpath": "commands",
|
|
2622
|
+
"prefix": "gsd-",
|
|
2623
|
+
"nesting": "flat",
|
|
2624
|
+
"recursive": false,
|
|
2625
|
+
"converter": null
|
|
2626
|
+
},
|
|
2627
|
+
{
|
|
2628
|
+
"kind": "agents",
|
|
2629
|
+
"destSubpath": "agents",
|
|
2630
|
+
"prefix": "gsd-",
|
|
2631
|
+
"nesting": "flat",
|
|
2632
|
+
"recursive": false,
|
|
2633
|
+
"converter": null
|
|
2634
|
+
}
|
|
2635
|
+
]
|
|
2636
|
+
},
|
|
2637
|
+
"commandStyle": "slash-hyphen",
|
|
2638
|
+
"hooksSurface": "none",
|
|
2639
|
+
"sandboxTier": "none",
|
|
2640
|
+
"supportTier": 2,
|
|
2641
|
+
"installSurface": "profile-marker-only",
|
|
2642
|
+
"writesSharedSettings": false,
|
|
2643
|
+
"permissionWriter": null,
|
|
2644
|
+
"extendedHookEvents": [],
|
|
2645
|
+
"hostIntegration": {
|
|
2646
|
+
"embeddingMode": "declarative",
|
|
2647
|
+
"commandSurface": "slash-file",
|
|
2648
|
+
"dispatch": {
|
|
2649
|
+
"namedDispatch": true,
|
|
2650
|
+
"nested": "undocumented",
|
|
2651
|
+
"maxDepth": "undocumented",
|
|
2652
|
+
"background": false,
|
|
2653
|
+
"subagentToolkit": "full",
|
|
2654
|
+
"backgroundDispatch": false
|
|
2655
|
+
},
|
|
2656
|
+
"modelMode": "passive",
|
|
2657
|
+
"hookBus": "host",
|
|
2658
|
+
"stateIO": "filesystem",
|
|
2659
|
+
"transport": "mcp",
|
|
2660
|
+
"runtime": "electron"
|
|
2661
|
+
}
|
|
2662
|
+
}
|
|
2663
|
+
}
|
|
2664
|
+
};
|
|
2665
|
+
|
|
2666
|
+
const bySkill = {
|
|
2667
|
+
"ai-integration-phase": "ai-integration",
|
|
2668
|
+
"code-review": "code-review",
|
|
2669
|
+
"graphify": "graphify",
|
|
2670
|
+
"mempalace-recall": "mempalace",
|
|
2671
|
+
"mempalace-capture": "mempalace",
|
|
2672
|
+
"validate-phase": "nyquist",
|
|
2673
|
+
"profile-user": "profile-pipeline",
|
|
2674
|
+
"secure-phase": "security",
|
|
2675
|
+
"ui-phase": "ui",
|
|
2676
|
+
"ui-review": "ui"
|
|
2677
|
+
};
|
|
2678
|
+
|
|
2679
|
+
const byAgent = {
|
|
2680
|
+
"gsd-framework-selector": "ai-integration",
|
|
2681
|
+
"gsd-ai-researcher": "ai-integration",
|
|
2682
|
+
"gsd-domain-researcher": "ai-integration",
|
|
2683
|
+
"gsd-eval-planner": "ai-integration",
|
|
2684
|
+
"gsd-code-reviewer": "code-review",
|
|
2685
|
+
"gsd-code-fixer": "code-review",
|
|
2686
|
+
"gsd-mempalace-curator": "mempalace",
|
|
2687
|
+
"gsd-nyquist-auditor": "nyquist",
|
|
2688
|
+
"gsd-pattern-mapper": "pattern-mapper",
|
|
2689
|
+
"gsd-user-profiler": "profile-pipeline",
|
|
2690
|
+
"gsd-phase-researcher": "research",
|
|
2691
|
+
"gsd-security-auditor": "security",
|
|
2692
|
+
"gsd-ui-checker": "ui",
|
|
2693
|
+
"gsd-ui-auditor": "ui"
|
|
2694
|
+
};
|
|
2695
|
+
|
|
2696
|
+
const byLoopPoint = {
|
|
2697
|
+
"discuss:pre": {
|
|
2698
|
+
"steps": [],
|
|
2699
|
+
"contributions": [
|
|
2700
|
+
{
|
|
2701
|
+
"capId": "mempalace",
|
|
2702
|
+
"point": "discuss:pre",
|
|
2703
|
+
"into": "orchestrator",
|
|
2704
|
+
"fragment": {
|
|
2705
|
+
"path": "fragments/recall-discuss.md",
|
|
2706
|
+
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the discuss:pre orchestrator prompt when `mempalace.recall_on_discuss` is true.\n Contributes DATA (recall instructions), not control flow. onError: skip — never blocks discussion.\n-->\n### Memory recall (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.recall_on_discuss` is `false`, **skip this entire section** and continue the discussion unchanged. (This contribution is only injected when the capability is enabled; the `recall_on_discuss` check lets you turn discuss-time recall off without disabling the rest of the capability.)\n\nOtherwise — before gathering new context, surface what you already know. This is read-only and side-effect-free; if MemPalace is unreachable, note \"memory unavailable\" and continue — recall never blocks discussion.\n\n1. **Resolve the wing.** Use `mempalace.wing` if set; otherwise derive it from `project_code` (fall back to the project directory name).\n2. **Wake up (cheap, ~600–900 tokens).**\n - Interactive run → call `mempalace_search` after a wake-up read of the wing.\n - Headless/cron run (no MCP server) → run `mempalace wake-up --wing <wing>` via the CLI.\n3. **Targeted recall.** Search the palace for prior work on this phase's topic:\n - Interactive → `mempalace_search(query=<phase topic>, wing=<wing>)` and, when `mempalace.mirror_kg` is on, `mempalace_kg_query` / `mempalace_kg_timeline` for decision facts and their validity windows.\n - Headless → `mempalace search \"<phase topic>\" --wing <wing>`.\n4. **Mode awareness** (`mempalace.memory_mode`). `augment` (default): the palace is an *additional* layer — never skip `.planning/graphs/` or STATE. `kg_backend`: query the palace's temporal KG as the *primary* graph source, with `.planning/graphs/` as fallback. `replace`: resolve recall *through the palace as the source of truth*, native memory as fallback. In every mode an unreachable palace falls back to native memory — recall never blocks.\n5. **Surface, don't dump.** Fold the top relevant drawers, decisions, patterns, and *surprises* into the discussion as prior context — cite drawer/fact provenance. Do not paste raw search output.\n\nIf any MemPalace call errors or times out, skip the rest of recall and proceed with discussion as normal.\n"
|
|
2707
|
+
},
|
|
2708
|
+
"produces": [],
|
|
2709
|
+
"consumes": [],
|
|
2710
|
+
"when": "mempalace.enabled",
|
|
2711
|
+
"onError": "skip"
|
|
2712
|
+
}
|
|
2713
|
+
],
|
|
2714
|
+
"gates": []
|
|
2715
|
+
},
|
|
2716
|
+
"discuss:post": {
|
|
2717
|
+
"steps": [
|
|
2718
|
+
{
|
|
2719
|
+
"capId": "mempalace",
|
|
2720
|
+
"point": "discuss:post",
|
|
2721
|
+
"ref": {
|
|
2722
|
+
"skill": "mempalace-capture"
|
|
2494
2723
|
},
|
|
2495
2724
|
"produces": [],
|
|
2496
2725
|
"consumes": [
|
|
@@ -2702,7 +2931,36 @@ const byLoopPoint = {
|
|
|
2702
2931
|
"onError": "skip"
|
|
2703
2932
|
}
|
|
2704
2933
|
],
|
|
2705
|
-
"contributions": [
|
|
2934
|
+
"contributions": [
|
|
2935
|
+
{
|
|
2936
|
+
"capId": "claude-orchestration",
|
|
2937
|
+
"point": "plan:post",
|
|
2938
|
+
"into": "planner",
|
|
2939
|
+
"fragment": {
|
|
2940
|
+
"path": "fragments/plan-post.md",
|
|
2941
|
+
"inline": "# Claude orchestration — ultraplan plan-offload ownership (BETA)\n\n> Injected at `plan:post` `into: planner` only when\n> `claude_orchestration.enabled` is true. Default-off; `onError: skip`.\n\n## Ownership declaration\n\nThe `gsd-ultraplan-phase` plan-offload surface (offloading GSD's plan phase to\nClaude Code's ultraplan cloud) is **owned by this capability**, not by a\nstandalone BETA skill. Both surfaces share one runtime gate\n(`claude_orchestration.enabled`), one BETA boundary, and one Claude-Code-only\ndetection seam.\n\n## When the planner should consider ultraplan offload\n\nWhen this contribution is active (capability enabled, Claude Code runtime), the\nplanner MAY offer the `/gsd-ultraplan-phase` path as an alternative to local\n`/gsd-plan-phase` for phases where cloud-assisted planning adds value. This is\nadvisory, not mandatory — the stable local planner remains the default.\n\n## Fallback contract\n\nIf the capability is disabled, or the runtime is not Claude Code, ultraplan\noffload is **not surfaced** and the planner proceeds with the standard local\n`/gsd-plan-phase`. The `gsd-ultraplan-phase` command itself remains installed\n(its own runtime gate already no-ops on non-Claude runtimes); this contribution\nonly governs whether the capability manifest advertises it as part of the\norchestration surface.\n"
|
|
2942
|
+
},
|
|
2943
|
+
"produces": [],
|
|
2944
|
+
"consumes": [
|
|
2945
|
+
"CONTEXT.md"
|
|
2946
|
+
],
|
|
2947
|
+
"when": "claude_orchestration.enabled",
|
|
2948
|
+
"onError": "skip"
|
|
2949
|
+
},
|
|
2950
|
+
{
|
|
2951
|
+
"capId": "external-job",
|
|
2952
|
+
"point": "plan:post",
|
|
2953
|
+
"into": "planner",
|
|
2954
|
+
"fragment": {
|
|
2955
|
+
"path": "fragments/plan-post.md",
|
|
2956
|
+
"inline": "<!-- external-job capability — plan:post fragment, injected into the planner (#1164). -->\n\n## Tag runtime budgets on long tasks\n\nFor every `<task>` likely to exceed ~2 minutes of real compute, emit a\n`<runtime_budget>` child element so execute can classify it:\n\n- `<runtime_budget>quick</runtime_budget>` — under ~2 min; runs normally.\n- `<runtime_budget>medium</runtime_budget>` — ~2–30 min; foreground, but with\n progress expectations.\n- `<runtime_budget>unknown</runtime_budget>` — runtime not yet characterized;\n execute must run a first-health check and set a soft-review deadline before\n trusting the child timeout. Define a progress signal and an abort condition.\n- `<runtime_budget>long_compute</runtime_budget>` — legitimately over ~30–60 min\n (HPC solver, model training, large simulations). Execute must **externalize**\n this as an async external job (see the execute:wave:post fragment) rather than\n blocking the agent turn.\n\nFor any `long_compute` task, also declare the async contract the executor will\nneed: the `submit_command`, the `expected_artifacts` the job must produce, and\nthe `verification_command` that proves the output before the plan can close.\nDo not hardcode a cluster account, partition, or project path — the planner\nnever knows the scheduler layout; it declares the contract, the executor's\nadapter fills the backend specifics.\n"
|
|
2957
|
+
},
|
|
2958
|
+
"produces": [],
|
|
2959
|
+
"consumes": [],
|
|
2960
|
+
"when": "external_job.enabled",
|
|
2961
|
+
"onError": "skip"
|
|
2962
|
+
}
|
|
2963
|
+
],
|
|
2706
2964
|
"gates": [
|
|
2707
2965
|
{
|
|
2708
2966
|
"capId": "gap-analysis",
|
|
@@ -2729,13 +2987,45 @@ const byLoopPoint = {
|
|
|
2729
2987
|
"execute:wave:post": {
|
|
2730
2988
|
"steps": [],
|
|
2731
2989
|
"contributions": [
|
|
2990
|
+
{
|
|
2991
|
+
"capId": "claude-orchestration",
|
|
2992
|
+
"point": "execute:wave:post",
|
|
2993
|
+
"into": "executor",
|
|
2994
|
+
"fragment": {
|
|
2995
|
+
"path": "fragments/execute-wave-post.md",
|
|
2996
|
+
"inline": "# Claude orchestration — Workflow execution backend (BETA)\n\n> Injected at `execute:wave:post` `into: executor` only when\n> `claude_orchestration.enabled` is true. Default-off; `onError: skip`.\n\n## When this contribution is active\n\nThe Claude orchestration capability is **default-off and BETA**. It activates only\nwhen ALL of the following hold:\n\n1. `claude_orchestration.enabled` is `true` in `.planning/config.json`, AND\n2. the active runtime is **Claude Code** (the Workflow tool is Claude / Agent\n SDK-specific), AND\n3. `claude_orchestration.execution_backend` resolves to `workflow` — either\n explicitly, or via `auto` — **and** the Agent SDK version is\n `>= claude_orchestration.min_agent_sdk_version` (default `0.3.149`). The SDK\n floor applies in both `auto` and `workflow` modes (fail-closed: a pre-release\n or older SDK never activates the preview backend).\n\nDetection is fail-closed: any miss degrades to **inline, manual, one-agent-per-\nmessage dispatch** — exactly today's behaviour. On a non-Claude runtime this\ncontribution is a no-op.\n\n## What the executor does when the Workflow backend is active\n\nInstead of the orchestrator fanning out one `Agent(subagent_type=gsd-executor,\nisolation=worktree, run_in_background=true)` per message (which on Claude Code\ncannot nest further subagents — #853 — and so degrades to sequential inline\nexecution), execute-phase **emits a generated Workflow script** and lets the main\nloop orchestrate it:\n\n- **waves → one or more sequential `parallel()` barriers** — each wave is a\n barrier group; when plans within a wave share `files_modified`, they are split\n into separate sequential stages within that wave's barrier (the next wave\n still waits for the previous wave to complete).\n- **plans → `agent(brief, { agentType: 'gsd-executor', isolation: 'worktree' })`**\n — the SAME executor agent and worktree isolation the inline path uses, so the\n produced `SUMMARY.md` and commits are identical.\n- **`files_modified` overlap → separate sequential stages** — two plans that\n touch the same file are placed in different stages within the wave (the same\n overlap rule execute-phase already applies inline).\n- **`resumeFromRunId`** — wired to the phase run id, so an interrupted phase\n resumes without re-running completed plans.\n- **`budget(tokens)`** — a shared token pool across the whole phase when the\n orchestrator passes a `budgetTokens` value to `emitWorkflowScript` (it is a\n function parameter, not a config key; the orchestrator decides the budget).\n\nThe emitter is a pure function exposed through the capability command surface:\n`gsd-tools claude-orchestration emit-workflow --waves <manifest.json> --run-id <id>\n[--phase-dir <dir>] [--budget <n>]` (or `require('gsd-core/bin/lib/claude-orchestration.cjs').emitWorkflowScript`\ndirectly). It maps the phase's wave/plan manifest to the Workflow script string\nand never invokes the Workflow tool itself; the orchestrator runs the emitted\nscript. Detection is resolved by the orchestrator calling the pure\n`detectWorkflowBackend` with the LIVE host descriptor (the CLI\n`gsd-tools claude-orchestration detect-backend` is a simulation harness that\nassumes a capable host unless `--no-nested-dispatch` is passed — it does not probe\nthe real runtime; the orchestrator supplies the real descriptor).\n\n## Fallback contract\n\nIf detection resolves to `inline` (tool absent, SDK too old, runtime not Claude,\nor the capability disabled), execute-phase MUST proceed with the standard inline\nwave dispatch. The executor MUST NOT assume parallelism, a shared budget, or\nresume-from-run-id semantics in that mode.\n"
|
|
2997
|
+
},
|
|
2998
|
+
"produces": [],
|
|
2999
|
+
"consumes": [
|
|
3000
|
+
"PLAN.md"
|
|
3001
|
+
],
|
|
3002
|
+
"when": "claude_orchestration.enabled",
|
|
3003
|
+
"onError": "skip"
|
|
3004
|
+
},
|
|
3005
|
+
{
|
|
3006
|
+
"capId": "external-job",
|
|
3007
|
+
"point": "execute:wave:post",
|
|
3008
|
+
"into": "executor",
|
|
3009
|
+
"fragment": {
|
|
3010
|
+
"path": "fragments/execute-wave-post.md",
|
|
3011
|
+
"inline": "<!-- external-job capability — execute:wave:post fragment, injected into the executor (#1164).\n\n Why wave:post, not wave:pre (#1164 refinement A): execute-phase.md only\n dispatches execute:wave:post today — wave:pre is declared in the loop host\n contract but not rendered. Wiring wave:pre dispatch is a core-loop change\n #1164 puts out of scope. The executor therefore honors this classification\n guidance BEFORE running any task tagged <runtime_budget>long_compute</runtime_budget>,\n whether in the current or a subsequent wave, and externalizes rather than\n blocking the turn. -->\n\n## Externalize long-running compute (async external job)\n\nIf the current plan's task is tagged `<runtime_budget>long_compute</runtime_budget>`\n(see the plan-phase fragment), do **not** run it in the foreground — it would\nblock the agent turn for hours. Instead externalize it and record a durable\nhalf-state:\n\n1. **Classify the runtime.** `quick` (<2 min) and `medium` (<~30 min) run\n normally. `unknown` requires a first-health check and a soft-review deadline\n before consuming the child timeout. `long_compute` (>30–60 min) is\n externalized.\n2. **Submit via the scheduler adapter** (default `external_job.backend: slurm`):\n ```bash\n node scripts/slurm-adapter.cjs submit \\\n --plan <plan_id> --phase <phase> -- sbatch --parsable \\\n --output=Artifacts/jobs/%j/out.log ./run.sh\n ```\n The helper writes `.planning/async-jobs/<job>.json` (the versioned stability\n contract — `docs/reference/planning-artifacts.md`) and refuses to create a\n second non-terminal manifest for a `plan_id` that already has one\n (duplicate-execution guard).\n3. **Commit the manifest + a handoff**, then return **`external_job_waiting`**\n and stop. Do **not** write `SUMMARY.md` — SUMMARY is deferred until the job\n reaches a terminal state and its `expected_artifacts` are verified.\n4. **Resume path.** `execute-phase` safe-resume, `resume-project`, and\n `pause-work` reconcile against the manifest and never re-dispatch the plan.\n When the job is `completed-unverified`, run `verification_command` (surface\n it; it is untrusted — confirm before executing), then write `SUMMARY.md` and\n close the plan.\n\nManifest commands cross a trust seam: a Capability (or anything that can write\n`.planning/`) produces them; the core loop consumes them. Never auto-run\n`submit_command` / `verification_command` / `resume_command` — surface the exact\ncommand and require explicit confirmation first.\n"
|
|
3012
|
+
},
|
|
3013
|
+
"produces": [
|
|
3014
|
+
".planning/async-jobs/<job>.json"
|
|
3015
|
+
],
|
|
3016
|
+
"consumes": [
|
|
3017
|
+
"PLAN.md"
|
|
3018
|
+
],
|
|
3019
|
+
"when": "external_job.enabled",
|
|
3020
|
+
"onError": "skip"
|
|
3021
|
+
},
|
|
2732
3022
|
{
|
|
2733
3023
|
"capId": "mempalace",
|
|
2734
3024
|
"point": "execute:wave:post",
|
|
2735
3025
|
"into": "verifier",
|
|
2736
3026
|
"fragment": {
|
|
2737
3027
|
"path": "fragments/capture-problems.md",
|
|
2738
|
-
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the execute:wave:post verifier prompt when `mempalace.capture_artifacts` is true.\n Contributes DATA (capture instructions), not control flow. onError: skip — never fails a wave.\n-->\n### Capture problems → fixes (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.capture_artifacts` is `false`, **skip this entire section** and let the wave complete unchanged. (This contribution is only injected when the capability is enabled; the `capture_artifacts` check lets you turn capture off without disabling the rest of the capability.)\n\nOtherwise — after verifying this wave, persist any *confirmed* problem→fix pairs into the palace so they are recalled in future phases. This is best-effort; if MemPalace is unreachable, skip silently — capture never fails a wave.\n\nFor each confirmed bug/issue resolved in this wave:\n\n1. **Resolve the wing** (`mempalace.wing`, else `project_code`, else project dir) and target `room: problems`.\n2. **Dedupe first.** Call `mempalace_check_duplicate` (interactive) before filing so re-runs don't create duplicate drawers.\n3. **File the drawer verbatim.** Store the problem statement and its fix as a drawer in `room: problems` — interactive: `mempalace_add_drawer`; headless: `mempalace mine` / `mempalace hook run`. Include provenance (`source_file`, phase id).\n4. **Mirror the KG fact** when `mempalace.mirror_kg` is on: add `(<bug>, fixed_by, <fix>)` with `valid_from` = the phase date via `mempalace_kg_add`.\n5. **Mode awareness
|
|
3028
|
+
"inline": "<!--\n MemPalace capability — contribution fragment.\n Rendered into the execute:wave:post verifier prompt when `mempalace.capture_artifacts` is true.\n Contributes DATA (capture instructions), not control flow. onError: skip — never fails a wave.\n-->\n### Capture problems → fixes (MemPalace)\n\n**Gate first.** Read `.planning/config.json`. If `mempalace.enabled` is not `true`, or `mempalace.capture_artifacts` is `false`, **skip this entire section** and let the wave complete unchanged. (This contribution is only injected when the capability is enabled; the `capture_artifacts` check lets you turn capture off without disabling the rest of the capability.)\n\nOtherwise — after verifying this wave, persist any *confirmed* problem→fix pairs into the palace so they are recalled in future phases. This is best-effort; if MemPalace is unreachable, skip silently — capture never fails a wave.\n\nFor each confirmed bug/issue resolved in this wave:\n\n1. **Resolve the wing** (`mempalace.wing`, else `project_code`, else project dir) and target `room: problems`.\n2. **Dedupe first.** Call `mempalace_check_duplicate` (interactive) before filing so re-runs don't create duplicate drawers.\n3. **File the drawer verbatim.** Store the problem statement and its fix as a drawer in `room: problems` — interactive: `mempalace_add_drawer`; headless: `mempalace mine` / `mempalace hook run`. Include provenance (`source_file`, phase id).\n4. **Mirror the KG fact** when `mempalace.mirror_kg` is on: add `(<bug>, fixed_by, <fix>)` with `valid_from` = the phase date via `mempalace_kg_add`.\n5. **Mode awareness** (`mempalace.memory_mode`). Under `augment` the fact is an *additive* mirror alongside `.planning/graphs/`. Under `kg_backend`/`replace` the palace is the *authoritative* store for the fact; GSD still writes `.planning/graphs/` through its normal graphify, so an unreachable palace never loses it.\n\nCaptures are idempotent: deterministic drawer IDs + `check_duplicate` mean re-running the wave re-files the same content without duplication. On any error, skip and let the wave complete normally.\n"
|
|
2739
3029
|
},
|
|
2740
3030
|
"produces": [],
|
|
2741
3031
|
"consumes": [],
|
|
@@ -2922,12 +3212,20 @@ const byLoopPoint = {
|
|
|
2922
3212
|
const configKeys = {
|
|
2923
3213
|
"workflow.ai_integration_phase": "ai-integration",
|
|
2924
3214
|
"workflow.assumption_delta": "assumption-delta",
|
|
3215
|
+
"claude_orchestration.enabled": "claude-orchestration",
|
|
3216
|
+
"claude_orchestration.execution_backend": "claude-orchestration",
|
|
3217
|
+
"claude_orchestration.min_agent_sdk_version": "claude-orchestration",
|
|
2925
3218
|
"workflow.code_review": "code-review",
|
|
2926
3219
|
"workflow.code_review_depth": "code-review",
|
|
2927
3220
|
"workflow.drift_threshold": "drift",
|
|
2928
3221
|
"workflow.drift_action": "drift",
|
|
2929
3222
|
"workflow.schema_drift_gate": "drift",
|
|
2930
3223
|
"workflow.plan_drift_precheck": "drift",
|
|
3224
|
+
"external_job.enabled": "external-job",
|
|
3225
|
+
"external_job.backend": "external-job",
|
|
3226
|
+
"external_job.artifact_dir": "external-job",
|
|
3227
|
+
"external_job.submit_timeout_ms": "external-job",
|
|
3228
|
+
"external_job.poll_timeout_ms": "external-job",
|
|
2931
3229
|
"workflow.post_planning_gaps": "gap-analysis",
|
|
2932
3230
|
"graphify.enabled": "graphify",
|
|
2933
3231
|
"intel.enabled": "intel",
|
|
@@ -2968,6 +3266,29 @@ const configSchema = {
|
|
|
2968
3266
|
"default": true,
|
|
2969
3267
|
"description": "Enable the assumption-delta architecture checkpoint during planning. When a pluralization/optional/chosen signal is detected in the phase scope, the planner is prompted to re-ask whether the primary key / identity model still names the right thing. Advisory (non-blocking)."
|
|
2970
3268
|
},
|
|
3269
|
+
"claude_orchestration.enabled": {
|
|
3270
|
+
"owner": "claude-orchestration",
|
|
3271
|
+
"type": "boolean",
|
|
3272
|
+
"default": false,
|
|
3273
|
+
"description": "Master toggle for the Claude orchestration capability. Default-off + BETA: the Workflow-tool execution backend and the ultraplan plan-offload surface are inert unless this is true. When false, loop behaviour is byte-identical to a non-Claude runtime (inline/manual dispatch)."
|
|
3274
|
+
},
|
|
3275
|
+
"claude_orchestration.execution_backend": {
|
|
3276
|
+
"owner": "claude-orchestration",
|
|
3277
|
+
"type": "enum",
|
|
3278
|
+
"default": "auto",
|
|
3279
|
+
"description": "Which execute-phase dispatch backend to use when the capability is enabled. 'auto' (default) activates the Workflow backend only when the runtime is Claude AND the Workflow tool is detected AND the Agent SDK meets claude_orchestration.min_agent_sdk_version; otherwise it falls back to inline. 'workflow' forces the Workflow backend when the tool is present AND the Agent SDK meets the floor (still fails closed to inline if the tool is absent or the SDK is too old — the floor applies in both modes). 'inline' forces today's manual one-agent-per-message dispatch regardless of tool availability.",
|
|
3280
|
+
"values": [
|
|
3281
|
+
"auto",
|
|
3282
|
+
"workflow",
|
|
3283
|
+
"inline"
|
|
3284
|
+
]
|
|
3285
|
+
},
|
|
3286
|
+
"claude_orchestration.min_agent_sdk_version": {
|
|
3287
|
+
"owner": "claude-orchestration",
|
|
3288
|
+
"type": "string",
|
|
3289
|
+
"default": "0.3.149",
|
|
3290
|
+
"description": "Minimum Agent SDK version required to activate the Workflow backend under execution_backend='auto'. Defaults to 0.3.149 (the release that introduced the Workflow tool). Raise to pin a higher floor; the detection seam fails closed to inline for any runtime reporting an older or unknown version."
|
|
3291
|
+
},
|
|
2971
3292
|
"workflow.code_review": {
|
|
2972
3293
|
"owner": "code-review",
|
|
2973
3294
|
"type": "boolean",
|
|
@@ -3013,6 +3334,39 @@ const configSchema = {
|
|
|
3013
3334
|
"default": true,
|
|
3014
3335
|
"description": "Enable the non-blocking codebase drift pre-check at plan:pre, before /gsd:plan-phase spawns the planner. When enabled, a stale STRUCTURE.md (structural additions exceeding drift_threshold) is surfaced up front as a warn-only advisory pointing to /gsd:map-codebase; it never blocks planning and never spawns the mapper agent. Separate from schema_drift_gate so autonomous/CI runs can silence the plan-time advisory while keeping the execute:wave:post gates enabled."
|
|
3015
3336
|
},
|
|
3337
|
+
"external_job.enabled": {
|
|
3338
|
+
"owner": "external-job",
|
|
3339
|
+
"type": "boolean",
|
|
3340
|
+
"default": false,
|
|
3341
|
+
"description": "Master toggle for the async external-job producer capability. Default-off: the core loop consumes manifests whether or not this is on, but no manifest is ever written unless an executor opts in here."
|
|
3342
|
+
},
|
|
3343
|
+
"external_job.backend": {
|
|
3344
|
+
"owner": "external-job",
|
|
3345
|
+
"type": "enum",
|
|
3346
|
+
"default": "slurm",
|
|
3347
|
+
"description": "Scheduler backend. SLURM is the first adapter; the field is the pluggability seam for future backends (LSF, PBS, Kubernetes batch). Core never interprets this value.",
|
|
3348
|
+
"values": [
|
|
3349
|
+
"slurm"
|
|
3350
|
+
]
|
|
3351
|
+
},
|
|
3352
|
+
"external_job.artifact_dir": {
|
|
3353
|
+
"owner": "external-job",
|
|
3354
|
+
"type": "string",
|
|
3355
|
+
"default": "Artifacts/jobs",
|
|
3356
|
+
"description": "Root for per-job artifact directories (e.g. Artifacts/jobs/<jobid>/). Avoids fixed log paths and hardcoding a cluster/project layout. Surfaced by the adapter (`slurm-adapter.cjs submit` prints the resolved value); override via GSD_EXTERNAL_JOB_ARTIFACT_DIR."
|
|
3357
|
+
},
|
|
3358
|
+
"external_job.submit_timeout_ms": {
|
|
3359
|
+
"owner": "external-job",
|
|
3360
|
+
"type": "number",
|
|
3361
|
+
"default": 30000,
|
|
3362
|
+
"description": "Hard timeout (ms) for the scheduler submit subprocess (e.g. sbatch). Bounded per CLAUDE.md unbounded-subprocess policy. Read by the adapter (env GSD_SLURM_SUBMIT_TIMEOUT_MS overrides)."
|
|
3363
|
+
},
|
|
3364
|
+
"external_job.poll_timeout_ms": {
|
|
3365
|
+
"owner": "external-job",
|
|
3366
|
+
"type": "number",
|
|
3367
|
+
"default": 15000,
|
|
3368
|
+
"description": "Hard timeout (ms) for the scheduler poll subprocess (squeue, with sacct fallback). Read by the adapter (env GSD_SLURM_POLL_TIMEOUT_MS overrides)."
|
|
3369
|
+
},
|
|
3016
3370
|
"workflow.post_planning_gaps": {
|
|
3017
3371
|
"owner": "gap-analysis",
|
|
3018
3372
|
"type": "boolean",
|
|
@@ -3041,7 +3395,7 @@ const configSchema = {
|
|
|
3041
3395
|
"owner": "mempalace",
|
|
3042
3396
|
"type": "enum",
|
|
3043
3397
|
"default": "augment",
|
|
3044
|
-
"description": "How MemPalace relates to GSD native memory.
|
|
3398
|
+
"description": "How MemPalace relates to GSD native memory during recall/capture. 'augment' (default): the palace is an additive layer alongside .planning/graphs/ — native memory stays authoritative. 'kg_backend': knowledge-graph queries resolve against the palace's temporal KG as the primary source, with .planning/graphs/ as fallback. 'replace': recall resolves through the palace as the source of truth, native memory as fallback. Every mode stays onError:skip and default-resilient — an unreachable palace degrades to native memory, and GSD keeps writing .planning/graphs/ so no memory is lost. Cross-mode migration of existing .planning/graphs/ into the palace is a separate, not-yet-implemented concern.",
|
|
3045
3399
|
"values": [
|
|
3046
3400
|
"augment",
|
|
3047
3401
|
"kg_backend",
|
|
@@ -3181,7 +3535,7 @@ const runtimes = {
|
|
|
3181
3535
|
"antigravity": {
|
|
3182
3536
|
"id": "antigravity",
|
|
3183
3537
|
"role": "runtime",
|
|
3184
|
-
"version": "1.7.0-rc.
|
|
3538
|
+
"version": "1.7.0-rc.4",
|
|
3185
3539
|
"title": "Antigravity",
|
|
3186
3540
|
"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.",
|
|
3187
3541
|
"tier": "core",
|
|
@@ -3215,6 +3569,14 @@ const runtimes = {
|
|
|
3215
3569
|
"nesting": "flat",
|
|
3216
3570
|
"recursive": false,
|
|
3217
3571
|
"converter": "convertClaudeCommandToAntigravitySkill"
|
|
3572
|
+
},
|
|
3573
|
+
{
|
|
3574
|
+
"kind": "agents",
|
|
3575
|
+
"destSubpath": "agents",
|
|
3576
|
+
"prefix": "gsd-",
|
|
3577
|
+
"nesting": "flat",
|
|
3578
|
+
"recursive": false,
|
|
3579
|
+
"converter": "convertClaudeAgentToAntigravityAgent"
|
|
3218
3580
|
}
|
|
3219
3581
|
],
|
|
3220
3582
|
"local": [
|
|
@@ -3225,6 +3587,14 @@ const runtimes = {
|
|
|
3225
3587
|
"nesting": "flat",
|
|
3226
3588
|
"recursive": false,
|
|
3227
3589
|
"converter": "convertClaudeCommandToAntigravitySkill"
|
|
3590
|
+
},
|
|
3591
|
+
{
|
|
3592
|
+
"kind": "agents",
|
|
3593
|
+
"destSubpath": "agents",
|
|
3594
|
+
"prefix": "gsd-",
|
|
3595
|
+
"nesting": "flat",
|
|
3596
|
+
"recursive": false,
|
|
3597
|
+
"converter": "convertClaudeAgentToAntigravityAgent"
|
|
3228
3598
|
}
|
|
3229
3599
|
]
|
|
3230
3600
|
},
|
|
@@ -3259,7 +3629,7 @@ const runtimes = {
|
|
|
3259
3629
|
"augment": {
|
|
3260
3630
|
"id": "augment",
|
|
3261
3631
|
"role": "runtime",
|
|
3262
|
-
"version": "1.7.0-rc.
|
|
3632
|
+
"version": "1.7.0-rc.4",
|
|
3263
3633
|
"title": "Augment Code",
|
|
3264
3634
|
"description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
3265
3635
|
"tier": "core",
|
|
@@ -3362,7 +3732,7 @@ const runtimes = {
|
|
|
3362
3732
|
"claude": {
|
|
3363
3733
|
"id": "claude",
|
|
3364
3734
|
"role": "runtime",
|
|
3365
|
-
"version": "1.7.0-rc.
|
|
3735
|
+
"version": "1.7.0-rc.4",
|
|
3366
3736
|
"title": "Claude Code",
|
|
3367
3737
|
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
|
|
3368
3738
|
"tier": "core",
|
|
@@ -3446,7 +3816,7 @@ const runtimes = {
|
|
|
3446
3816
|
"cline": {
|
|
3447
3817
|
"id": "cline",
|
|
3448
3818
|
"role": "runtime",
|
|
3449
|
-
"version": "1.7.0-rc.
|
|
3819
|
+
"version": "1.7.0-rc.4",
|
|
3450
3820
|
"title": "Cline",
|
|
3451
3821
|
"description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
|
|
3452
3822
|
"tier": "core",
|
|
@@ -3507,7 +3877,7 @@ const runtimes = {
|
|
|
3507
3877
|
"codebuddy": {
|
|
3508
3878
|
"id": "codebuddy",
|
|
3509
3879
|
"role": "runtime",
|
|
3510
|
-
"version": "1.7.0-rc.
|
|
3880
|
+
"version": "1.7.0-rc.4",
|
|
3511
3881
|
"title": "CodeBuddy",
|
|
3512
3882
|
"description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
3513
3883
|
"tier": "core",
|
|
@@ -3610,7 +3980,7 @@ const runtimes = {
|
|
|
3610
3980
|
"codex": {
|
|
3611
3981
|
"id": "codex",
|
|
3612
3982
|
"role": "runtime",
|
|
3613
|
-
"version": "1.7.0-rc.
|
|
3983
|
+
"version": "1.7.0-rc.4",
|
|
3614
3984
|
"title": "OpenAI Codex CLI",
|
|
3615
3985
|
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
|
|
3616
3986
|
"tier": "core",
|
|
@@ -3681,7 +4051,7 @@ const runtimes = {
|
|
|
3681
4051
|
"copilot": {
|
|
3682
4052
|
"id": "copilot",
|
|
3683
4053
|
"role": "runtime",
|
|
3684
|
-
"version": "1.7.0-rc.
|
|
4054
|
+
"version": "1.7.0-rc.4",
|
|
3685
4055
|
"title": "GitHub Copilot",
|
|
3686
4056
|
"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.",
|
|
3687
4057
|
"tier": "core",
|
|
@@ -3709,6 +4079,14 @@ const runtimes = {
|
|
|
3709
4079
|
"nesting": "flat",
|
|
3710
4080
|
"recursive": false,
|
|
3711
4081
|
"converter": "convertClaudeCommandToCopilotSkill"
|
|
4082
|
+
},
|
|
4083
|
+
{
|
|
4084
|
+
"kind": "agents",
|
|
4085
|
+
"destSubpath": "agents",
|
|
4086
|
+
"prefix": "gsd-",
|
|
4087
|
+
"nesting": "flat",
|
|
4088
|
+
"recursive": false,
|
|
4089
|
+
"converter": "convertClaudeAgentToCopilotAgent"
|
|
3712
4090
|
}
|
|
3713
4091
|
],
|
|
3714
4092
|
"local": [
|
|
@@ -3719,6 +4097,14 @@ const runtimes = {
|
|
|
3719
4097
|
"nesting": "flat",
|
|
3720
4098
|
"recursive": false,
|
|
3721
4099
|
"converter": "convertClaudeCommandToCopilotSkill"
|
|
4100
|
+
},
|
|
4101
|
+
{
|
|
4102
|
+
"kind": "agents",
|
|
4103
|
+
"destSubpath": "agents",
|
|
4104
|
+
"prefix": "gsd-",
|
|
4105
|
+
"nesting": "flat",
|
|
4106
|
+
"recursive": false,
|
|
4107
|
+
"converter": "convertClaudeAgentToCopilotAgent"
|
|
3722
4108
|
}
|
|
3723
4109
|
]
|
|
3724
4110
|
},
|
|
@@ -3752,7 +4138,7 @@ const runtimes = {
|
|
|
3752
4138
|
"cursor": {
|
|
3753
4139
|
"id": "cursor",
|
|
3754
4140
|
"role": "runtime",
|
|
3755
|
-
"version": "1.7.0-rc.
|
|
4141
|
+
"version": "1.7.0-rc.4",
|
|
3756
4142
|
"title": "Cursor",
|
|
3757
4143
|
"description": "Cursor IDE — skills + converted commands artifact layout; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
|
|
3758
4144
|
"tier": "core",
|
|
@@ -3852,85 +4238,10 @@ const runtimes = {
|
|
|
3852
4238
|
}
|
|
3853
4239
|
}
|
|
3854
4240
|
},
|
|
3855
|
-
"gemini": {
|
|
3856
|
-
"id": "gemini",
|
|
3857
|
-
"role": "runtime",
|
|
3858
|
-
"version": "1.7.0-rc.2",
|
|
3859
|
-
"title": "Gemini CLI",
|
|
3860
|
-
"description": "Google Gemini CLI — commands-only artifact layout (TOML); Gemini hook event dialect; settings-json hook surface; tier-2 support.",
|
|
3861
|
-
"tier": "core",
|
|
3862
|
-
"requires": [],
|
|
3863
|
-
"engines": {
|
|
3864
|
-
"gsd": ">=1.6.0"
|
|
3865
|
-
},
|
|
3866
|
-
"runtime": {
|
|
3867
|
-
"configHome": {
|
|
3868
|
-
"kind": "dot-home",
|
|
3869
|
-
"name": ".gemini",
|
|
3870
|
-
"env": [
|
|
3871
|
-
"GEMINI_CONFIG_DIR"
|
|
3872
|
-
]
|
|
3873
|
-
},
|
|
3874
|
-
"localConfigDir": ".gemini",
|
|
3875
|
-
"configFormat": "settings-json",
|
|
3876
|
-
"artifactLayout": {
|
|
3877
|
-
"global": [
|
|
3878
|
-
{
|
|
3879
|
-
"kind": "commands",
|
|
3880
|
-
"destSubpath": "commands/gsd",
|
|
3881
|
-
"prefix": "gsd-",
|
|
3882
|
-
"nesting": "flat",
|
|
3883
|
-
"recursive": false,
|
|
3884
|
-
"converter": null
|
|
3885
|
-
}
|
|
3886
|
-
],
|
|
3887
|
-
"local": [
|
|
3888
|
-
{
|
|
3889
|
-
"kind": "commands",
|
|
3890
|
-
"destSubpath": "commands/gsd",
|
|
3891
|
-
"prefix": "gsd-",
|
|
3892
|
-
"nesting": "flat",
|
|
3893
|
-
"recursive": false,
|
|
3894
|
-
"converter": null
|
|
3895
|
-
}
|
|
3896
|
-
]
|
|
3897
|
-
},
|
|
3898
|
-
"commandStyle": "slash-hyphen",
|
|
3899
|
-
"hooksSurface": "settings-json",
|
|
3900
|
-
"hookEvents": "gemini",
|
|
3901
|
-
"sandboxTier": "none",
|
|
3902
|
-
"supportTier": 2,
|
|
3903
|
-
"installSurface": "settings-json",
|
|
3904
|
-
"writesSharedSettings": true,
|
|
3905
|
-
"permissionWriter": null,
|
|
3906
|
-
"extendedHookEvents": [
|
|
3907
|
-
"BeforeAgent",
|
|
3908
|
-
"AfterAgent",
|
|
3909
|
-
"BeforeModel"
|
|
3910
|
-
],
|
|
3911
|
-
"hostIntegration": {
|
|
3912
|
-
"embeddingMode": "declarative",
|
|
3913
|
-
"commandSurface": "slash-toml",
|
|
3914
|
-
"dispatch": {
|
|
3915
|
-
"namedDispatch": true,
|
|
3916
|
-
"nested": false,
|
|
3917
|
-
"maxDepth": 1,
|
|
3918
|
-
"background": "undocumented",
|
|
3919
|
-
"subagentToolkit": "undocumented",
|
|
3920
|
-
"backgroundDispatch": false
|
|
3921
|
-
},
|
|
3922
|
-
"modelMode": "passive",
|
|
3923
|
-
"hookBus": "host",
|
|
3924
|
-
"stateIO": "filesystem",
|
|
3925
|
-
"transport": "mcp",
|
|
3926
|
-
"runtime": "node"
|
|
3927
|
-
}
|
|
3928
|
-
}
|
|
3929
|
-
},
|
|
3930
4241
|
"hermes": {
|
|
3931
4242
|
"id": "hermes",
|
|
3932
4243
|
"role": "runtime",
|
|
3933
|
-
"version": "1.7.0-rc.
|
|
4244
|
+
"version": "1.7.0-rc.4",
|
|
3934
4245
|
"title": "Hermes Agent",
|
|
3935
4246
|
"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.",
|
|
3936
4247
|
"tier": "core",
|
|
@@ -4001,7 +4312,7 @@ const runtimes = {
|
|
|
4001
4312
|
"kilo": {
|
|
4002
4313
|
"id": "kilo",
|
|
4003
4314
|
"role": "runtime",
|
|
4004
|
-
"version": "1.7.0-rc.
|
|
4315
|
+
"version": "1.7.0-rc.4",
|
|
4005
4316
|
"title": "Kilo Code",
|
|
4006
4317
|
"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.",
|
|
4007
4318
|
"tier": "core",
|
|
@@ -4094,7 +4405,7 @@ const runtimes = {
|
|
|
4094
4405
|
"kimi": {
|
|
4095
4406
|
"id": "kimi",
|
|
4096
4407
|
"role": "runtime",
|
|
4097
|
-
"version": "1.7.0-rc.
|
|
4408
|
+
"version": "1.7.0-rc.4",
|
|
4098
4409
|
"title": "Kimi CLI",
|
|
4099
4410
|
"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.",
|
|
4100
4411
|
"tier": "core",
|
|
@@ -4168,7 +4479,7 @@ const runtimes = {
|
|
|
4168
4479
|
"opencode": {
|
|
4169
4480
|
"id": "opencode",
|
|
4170
4481
|
"role": "runtime",
|
|
4171
|
-
"version": "1.7.0-rc.
|
|
4482
|
+
"version": "1.7.0-rc.4",
|
|
4172
4483
|
"title": "OpenCode",
|
|
4173
4484
|
"description": "OpenCode — XDG-based config dir; flat command/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
|
|
4174
4485
|
"tier": "core",
|
|
@@ -4257,7 +4568,7 @@ const runtimes = {
|
|
|
4257
4568
|
"qwen": {
|
|
4258
4569
|
"id": "qwen",
|
|
4259
4570
|
"role": "runtime",
|
|
4260
|
-
"version": "1.7.0-rc.
|
|
4571
|
+
"version": "1.7.0-rc.4",
|
|
4261
4572
|
"title": "Qwen Code",
|
|
4262
4573
|
"description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
4263
4574
|
"tier": "core",
|
|
@@ -4332,7 +4643,7 @@ const runtimes = {
|
|
|
4332
4643
|
"trae": {
|
|
4333
4644
|
"id": "trae",
|
|
4334
4645
|
"role": "runtime",
|
|
4335
|
-
"version": "1.7.0-rc.
|
|
4646
|
+
"version": "1.7.0-rc.4",
|
|
4336
4647
|
"title": "Trae IDE",
|
|
4337
4648
|
"description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
|
|
4338
4649
|
"tier": "core",
|
|
@@ -4418,7 +4729,7 @@ const runtimes = {
|
|
|
4418
4729
|
"windsurf": {
|
|
4419
4730
|
"id": "windsurf",
|
|
4420
4731
|
"role": "runtime",
|
|
4421
|
-
"version": "1.7.0-rc.
|
|
4732
|
+
"version": "1.7.0-rc.4",
|
|
4422
4733
|
"title": "Windsurf",
|
|
4423
4734
|
"description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; no hook surface; no hook events; tier-2 support.",
|
|
4424
4735
|
"tier": "core",
|
|
@@ -4493,6 +4804,108 @@ const runtimes = {
|
|
|
4493
4804
|
"runtime": "undocumented"
|
|
4494
4805
|
}
|
|
4495
4806
|
}
|
|
4807
|
+
},
|
|
4808
|
+
"zcode": {
|
|
4809
|
+
"id": "zcode",
|
|
4810
|
+
"role": "runtime",
|
|
4811
|
+
"version": "1.7.0-rc.4",
|
|
4812
|
+
"title": "ZCode",
|
|
4813
|
+
"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
|
+
"tier": "core",
|
|
4815
|
+
"requires": [],
|
|
4816
|
+
"engines": {
|
|
4817
|
+
"gsd": ">=1.6.0"
|
|
4818
|
+
},
|
|
4819
|
+
"runtime": {
|
|
4820
|
+
"configHome": {
|
|
4821
|
+
"kind": "dot-home",
|
|
4822
|
+
"name": ".zcode",
|
|
4823
|
+
"env": [
|
|
4824
|
+
"ZCODE_CONFIG_DIR"
|
|
4825
|
+
]
|
|
4826
|
+
},
|
|
4827
|
+
"localConfigDir": ".zcode",
|
|
4828
|
+
"configFormat": "none",
|
|
4829
|
+
"artifactLayout": {
|
|
4830
|
+
"global": [
|
|
4831
|
+
{
|
|
4832
|
+
"kind": "skills",
|
|
4833
|
+
"destSubpath": "skills",
|
|
4834
|
+
"prefix": "gsd-",
|
|
4835
|
+
"nesting": "nested",
|
|
4836
|
+
"recursive": false,
|
|
4837
|
+
"converter": "convertClaudeCommandToClaudeSkill"
|
|
4838
|
+
},
|
|
4839
|
+
{
|
|
4840
|
+
"kind": "commands",
|
|
4841
|
+
"destSubpath": "commands",
|
|
4842
|
+
"prefix": "gsd-",
|
|
4843
|
+
"nesting": "flat",
|
|
4844
|
+
"recursive": false,
|
|
4845
|
+
"converter": null
|
|
4846
|
+
},
|
|
4847
|
+
{
|
|
4848
|
+
"kind": "agents",
|
|
4849
|
+
"destSubpath": "agents",
|
|
4850
|
+
"prefix": "gsd-",
|
|
4851
|
+
"nesting": "flat",
|
|
4852
|
+
"recursive": false,
|
|
4853
|
+
"converter": null
|
|
4854
|
+
}
|
|
4855
|
+
],
|
|
4856
|
+
"local": [
|
|
4857
|
+
{
|
|
4858
|
+
"kind": "skills",
|
|
4859
|
+
"destSubpath": "skills",
|
|
4860
|
+
"prefix": "gsd-",
|
|
4861
|
+
"nesting": "nested",
|
|
4862
|
+
"recursive": false,
|
|
4863
|
+
"converter": "convertClaudeCommandToClaudeSkill"
|
|
4864
|
+
},
|
|
4865
|
+
{
|
|
4866
|
+
"kind": "commands",
|
|
4867
|
+
"destSubpath": "commands",
|
|
4868
|
+
"prefix": "gsd-",
|
|
4869
|
+
"nesting": "flat",
|
|
4870
|
+
"recursive": false,
|
|
4871
|
+
"converter": null
|
|
4872
|
+
},
|
|
4873
|
+
{
|
|
4874
|
+
"kind": "agents",
|
|
4875
|
+
"destSubpath": "agents",
|
|
4876
|
+
"prefix": "gsd-",
|
|
4877
|
+
"nesting": "flat",
|
|
4878
|
+
"recursive": false,
|
|
4879
|
+
"converter": null
|
|
4880
|
+
}
|
|
4881
|
+
]
|
|
4882
|
+
},
|
|
4883
|
+
"commandStyle": "slash-hyphen",
|
|
4884
|
+
"hooksSurface": "none",
|
|
4885
|
+
"sandboxTier": "none",
|
|
4886
|
+
"supportTier": 2,
|
|
4887
|
+
"installSurface": "profile-marker-only",
|
|
4888
|
+
"writesSharedSettings": false,
|
|
4889
|
+
"permissionWriter": null,
|
|
4890
|
+
"extendedHookEvents": [],
|
|
4891
|
+
"hostIntegration": {
|
|
4892
|
+
"embeddingMode": "declarative",
|
|
4893
|
+
"commandSurface": "slash-file",
|
|
4894
|
+
"dispatch": {
|
|
4895
|
+
"namedDispatch": true,
|
|
4896
|
+
"nested": "undocumented",
|
|
4897
|
+
"maxDepth": "undocumented",
|
|
4898
|
+
"background": false,
|
|
4899
|
+
"subagentToolkit": "full",
|
|
4900
|
+
"backgroundDispatch": false
|
|
4901
|
+
},
|
|
4902
|
+
"modelMode": "passive",
|
|
4903
|
+
"hookBus": "host",
|
|
4904
|
+
"stateIO": "filesystem",
|
|
4905
|
+
"transport": "mcp",
|
|
4906
|
+
"runtime": "electron"
|
|
4907
|
+
}
|
|
4908
|
+
}
|
|
4496
4909
|
}
|
|
4497
4910
|
};
|
|
4498
4911
|
|
|
@@ -4507,6 +4920,11 @@ const commandFamilies = {
|
|
|
4507
4920
|
"module": "audit-command-router.cjs",
|
|
4508
4921
|
"router": "routeAuditUat"
|
|
4509
4922
|
},
|
|
4923
|
+
"claude-orchestration": {
|
|
4924
|
+
"capId": "claude-orchestration",
|
|
4925
|
+
"module": "claude-orchestration-command-router.cjs",
|
|
4926
|
+
"router": "routeClaudeOrchestrationCommand"
|
|
4927
|
+
},
|
|
4510
4928
|
"extract-messages": {
|
|
4511
4929
|
"capId": "profile-pipeline",
|
|
4512
4930
|
"module": "profile-pipeline-command-router.cjs",
|
|
@@ -4646,6 +5064,7 @@ const _requiresGraph = {
|
|
|
4646
5064
|
"audit": [],
|
|
4647
5065
|
"augment": [],
|
|
4648
5066
|
"claude": [],
|
|
5067
|
+
"claude-orchestration": [],
|
|
4649
5068
|
"cline": [],
|
|
4650
5069
|
"code-review": [],
|
|
4651
5070
|
"codebuddy": [],
|
|
@@ -4653,8 +5072,8 @@ const _requiresGraph = {
|
|
|
4653
5072
|
"copilot": [],
|
|
4654
5073
|
"cursor": [],
|
|
4655
5074
|
"drift": [],
|
|
5075
|
+
"external-job": [],
|
|
4656
5076
|
"gap-analysis": [],
|
|
4657
|
-
"gemini": [],
|
|
4658
5077
|
"graphify": [],
|
|
4659
5078
|
"hermes": [],
|
|
4660
5079
|
"intel": [],
|
|
@@ -4674,7 +5093,8 @@ const _requiresGraph = {
|
|
|
4674
5093
|
"tdd": [],
|
|
4675
5094
|
"trae": [],
|
|
4676
5095
|
"ui": [],
|
|
4677
|
-
"windsurf": []
|
|
5096
|
+
"windsurf": [],
|
|
5097
|
+
"zcode": []
|
|
4678
5098
|
};
|
|
4679
5099
|
|
|
4680
5100
|
function requiresClosure(id) {
|