gsd-opencode 1.10.2 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/agents/gsd-codebase-mapper.md +29 -3
  2. package/agents/gsd-debugger.md +19 -21
  3. package/agents/gsd-executor.md +213 -528
  4. package/agents/gsd-integration-checker.md +20 -0
  5. package/agents/gsd-phase-researcher.md +189 -267
  6. package/agents/gsd-plan-checker.md +278 -279
  7. package/agents/gsd-planner.md +299 -490
  8. package/agents/gsd-project-researcher.md +103 -345
  9. package/agents/gsd-research-synthesizer.md +5 -22
  10. package/agents/gsd-roadmapper.md +43 -6
  11. package/agents/gsd-verifier.md +158 -377
  12. package/{lib → bin/dm/lib}/constants.js +10 -3
  13. package/{src → bin/dm/src}/commands/install.js +5 -4
  14. package/{src → bin/dm/src}/commands/uninstall.js +3 -1
  15. package/{src → bin/dm/src}/services/backup-manager.js +1 -1
  16. package/{src → bin/dm/src}/services/config.js +1 -1
  17. package/{src → bin/dm/src}/services/file-ops.js +20 -4
  18. package/{src → bin/dm/src}/services/health-checker.js +3 -1
  19. package/{src → bin/dm/src}/services/repair-service.js +3 -1
  20. package/{src → bin/dm/src}/services/settings.js +1 -1
  21. package/{src → bin/dm/src}/services/update-service.js +2 -2
  22. package/bin/gsd-install.js +0 -0
  23. package/bin/gsd.js +9 -9
  24. package/commands/gsd/gsd-add-phase.md +43 -0
  25. package/commands/gsd/gsd-add-todo.md +47 -0
  26. package/commands/gsd/gsd-audit-milestone.md +36 -0
  27. package/commands/gsd/gsd-check-todos.md +45 -0
  28. package/commands/gsd/gsd-cleanup.md +18 -0
  29. package/commands/gsd/{complete-milestone.md → gsd-complete-milestone.md} +1 -1
  30. package/commands/gsd/{debug.md → gsd-debug.md} +16 -21
  31. package/commands/gsd/{discuss-phase.md → gsd-discuss-phase.md} +6 -9
  32. package/commands/gsd/gsd-execute-phase.md +41 -0
  33. package/commands/gsd/gsd-health.md +22 -0
  34. package/commands/gsd/gsd-help.md +22 -0
  35. package/commands/gsd/gsd-insert-phase.md +32 -0
  36. package/commands/gsd/gsd-join-discord.md +18 -0
  37. package/commands/gsd/{list-phase-assumptions.md → gsd-list-phase-assumptions.md} +3 -7
  38. package/commands/gsd/{map-codebase.md → gsd-map-codebase.md} +3 -3
  39. package/commands/gsd/gsd-new-milestone.md +44 -0
  40. package/commands/gsd/gsd-new-project.md +42 -0
  41. package/commands/gsd/gsd-pause-work.md +38 -0
  42. package/commands/gsd/gsd-plan-milestone-gaps.md +34 -0
  43. package/commands/gsd/gsd-plan-phase.md +44 -0
  44. package/commands/gsd/gsd-progress.md +24 -0
  45. package/commands/gsd/gsd-quick.md +41 -0
  46. package/commands/gsd/gsd-reapply-patches.md +119 -0
  47. package/commands/gsd/gsd-remove-phase.md +31 -0
  48. package/commands/gsd/{research-phase.md → gsd-research-phase.md} +38 -49
  49. package/commands/gsd/{resume-work.md → gsd-resume-work.md} +2 -2
  50. package/commands/gsd/gsd-set-profile.md +34 -0
  51. package/commands/gsd/gsd-settings.md +36 -0
  52. package/commands/gsd/gsd-update.md +37 -0
  53. package/commands/gsd/gsd-verify-work.md +38 -0
  54. package/get-shit-done/bin/gsd-tools.cjs +553 -0
  55. package/get-shit-done/bin/gsd-tools.test.cjs +2346 -0
  56. package/get-shit-done/bin/lib/commands.cjs +556 -0
  57. package/get-shit-done/bin/lib/config.cjs +162 -0
  58. package/get-shit-done/bin/lib/core.cjs +377 -0
  59. package/get-shit-done/bin/lib/frontmatter.cjs +299 -0
  60. package/get-shit-done/bin/lib/init.cjs +694 -0
  61. package/get-shit-done/bin/lib/milestone.cjs +215 -0
  62. package/get-shit-done/bin/lib/phase.cjs +877 -0
  63. package/get-shit-done/bin/lib/roadmap.cjs +298 -0
  64. package/get-shit-done/bin/lib/state.cjs +490 -0
  65. package/get-shit-done/bin/lib/template.cjs +222 -0
  66. package/get-shit-done/bin/lib/verify.cjs +772 -0
  67. package/get-shit-done/references/checkpoints.md +62 -364
  68. package/get-shit-done/references/decimal-phase-calculation.md +65 -0
  69. package/get-shit-done/references/git-integration.md +10 -16
  70. package/get-shit-done/references/git-planning-commit.md +38 -0
  71. package/get-shit-done/references/model-profile-resolution.md +34 -0
  72. package/get-shit-done/references/model-profiles.md +54 -66
  73. package/get-shit-done/references/phase-argument-parsing.md +61 -0
  74. package/get-shit-done/references/planning-config.md +112 -10
  75. package/get-shit-done/references/questioning.md +4 -0
  76. package/get-shit-done/references/ui-brand.md +1 -1
  77. package/get-shit-done/templates/UAT.md +1 -1
  78. package/get-shit-done/templates/VALIDATION.md +104 -0
  79. package/get-shit-done/templates/codebase/structure.md +6 -6
  80. package/get-shit-done/templates/config.json +37 -0
  81. package/get-shit-done/templates/context.md +2 -10
  82. package/get-shit-done/templates/continue-here.md +6 -6
  83. package/get-shit-done/templates/debug-subagent-prompt.md +2 -2
  84. package/get-shit-done/templates/discovery.md +6 -6
  85. package/get-shit-done/templates/milestone-archive.md +3 -3
  86. package/get-shit-done/templates/phase-prompt.md +9 -7
  87. package/get-shit-done/templates/planner-subagent-prompt.md +6 -6
  88. package/get-shit-done/templates/research-project/ARCHITECTURE.md +1 -1
  89. package/get-shit-done/templates/research.md +29 -6
  90. package/get-shit-done/templates/roadmap.md +1 -1
  91. package/get-shit-done/templates/state.md +0 -30
  92. package/get-shit-done/templates/summary-complex.md +59 -0
  93. package/get-shit-done/templates/summary-minimal.md +41 -0
  94. package/get-shit-done/templates/summary-standard.md +48 -0
  95. package/get-shit-done/templates/summary.md +16 -37
  96. package/get-shit-done/templates/user-setup.md +1 -13
  97. package/get-shit-done/templates/verification-report.md +5 -5
  98. package/get-shit-done/workflows/add-phase.md +111 -0
  99. package/{commands/gsd → get-shit-done/workflows}/add-todo.md +24 -60
  100. package/{commands/gsd → get-shit-done/workflows}/audit-milestone.md +83 -63
  101. package/{commands/gsd → get-shit-done/workflows}/check-todos.md +21 -73
  102. package/get-shit-done/workflows/cleanup.md +152 -0
  103. package/get-shit-done/workflows/complete-milestone.md +251 -312
  104. package/get-shit-done/workflows/diagnose-issues.md +6 -31
  105. package/get-shit-done/workflows/discovery-phase.md +11 -11
  106. package/get-shit-done/workflows/discuss-phase.md +156 -49
  107. package/get-shit-done/workflows/execute-phase.md +238 -396
  108. package/get-shit-done/workflows/execute-plan.md +180 -1609
  109. package/get-shit-done/workflows/health.md +156 -0
  110. package/{commands/gsd → get-shit-done/workflows}/help.md +33 -35
  111. package/get-shit-done/workflows/insert-phase.md +129 -0
  112. package/get-shit-done/workflows/list-phase-assumptions.md +3 -3
  113. package/get-shit-done/workflows/map-codebase.md +73 -80
  114. package/get-shit-done/workflows/new-milestone.md +382 -0
  115. package/{commands/gsd → get-shit-done/workflows}/new-project.md +281 -234
  116. package/get-shit-done/workflows/oc-set-profile.md +320 -0
  117. package/{commands/gsd → get-shit-done/workflows}/pause-work.md +31 -43
  118. package/{commands/gsd → get-shit-done/workflows}/plan-milestone-gaps.md +29 -50
  119. package/get-shit-done/workflows/plan-phase.md +478 -0
  120. package/{commands/gsd → get-shit-done/workflows}/progress.md +64 -47
  121. package/get-shit-done/workflows/quick.md +453 -0
  122. package/get-shit-done/workflows/remove-phase.md +154 -0
  123. package/get-shit-done/workflows/research-phase.md +73 -0
  124. package/get-shit-done/workflows/resume-project.md +17 -26
  125. package/get-shit-done/workflows/set-profile.md +80 -0
  126. package/get-shit-done/workflows/settings.md +213 -0
  127. package/get-shit-done/workflows/transition.md +84 -104
  128. package/{commands/gsd → get-shit-done/workflows}/update.md +70 -28
  129. package/get-shit-done/workflows/verify-phase.md +106 -492
  130. package/get-shit-done/workflows/verify-work.md +26 -53
  131. package/package.json +7 -4
  132. package/rules/gsd-oc-work-hard.md +36 -0
  133. package/skills/gsd-oc-select-model/SKILL.md +348 -0
  134. package/skills/gsd-oc-select-model/scripts/select-models.cjs +268 -0
  135. package/agents/gsd-set-model.md +0 -287
  136. package/agents/gsd-set-profile.md +0 -239
  137. package/agents/gsd-settings.md +0 -749
  138. package/bin/install.js +0 -323
  139. package/commands/gsd/add-phase.md +0 -207
  140. package/commands/gsd/execute-phase.md +0 -339
  141. package/commands/gsd/insert-phase.md +0 -227
  142. package/commands/gsd/new-milestone.md +0 -721
  143. package/commands/gsd/plan-phase.md +0 -525
  144. package/commands/gsd/quick.md +0 -309
  145. package/commands/gsd/remove-phase.md +0 -349
  146. package/commands/gsd/set-model.md +0 -77
  147. package/commands/gsd/set-profile.md +0 -46
  148. package/commands/gsd/settings.md +0 -33
  149. package/commands/gsd/verify-work.md +0 -219
  150. package/commands/gsd/whats-new.md +0 -124
  151. /package/{src → bin/dm/src}/commands/check.js +0 -0
  152. /package/{src → bin/dm/src}/commands/config.js +0 -0
  153. /package/{src → bin/dm/src}/commands/list.js +0 -0
  154. /package/{src → bin/dm/src}/commands/repair.js +0 -0
  155. /package/{src → bin/dm/src}/commands/update.js +0 -0
  156. /package/{src → bin/dm/src}/services/manifest-manager.js +0 -0
  157. /package/{src → bin/dm/src}/services/migration-service.js +0 -0
  158. /package/{src → bin/dm/src}/services/scope-manager.js +0 -0
  159. /package/{src → bin/dm/src}/services/structure-detector.js +0 -0
  160. /package/{src → bin/dm/src}/utils/hash.js +0 -0
  161. /package/{src → bin/dm/src}/utils/interactive.js +0 -0
  162. /package/{src → bin/dm/src}/utils/logger.js +0 -0
  163. /package/{src → bin/dm/src}/utils/npm-registry.js +0 -0
  164. /package/{src → bin/dm/src}/utils/path-resolver.js +0 -0
@@ -1,749 +0,0 @@
1
- ---
2
- name: gsd-settings
3
- description: Interactive settings for model profiles, per-stage overrides, and workflow settings
4
- tools:
5
- read: true
6
- write: true
7
- bash: true
8
- question: true
9
- ---
10
-
11
- <role>
12
- You are executing the `/gsd-settings` command. Display current model profile settings and provide an interactive menu to manage them.
13
-
14
- Files managed:
15
-
16
- - `.planning/config.json` — profile state and workflow toggles (source of truth)
17
- - `opencode.json` — agent model assignments (derived from config.json)
18
-
19
- Do NOT modify agent .md files.
20
- </role>
21
-
22
- <context>
23
- **Stage-to-agent mapping:**
24
-
25
- - **Planning:** gsd-planner, gsd-plan-checker, gsd-phase-researcher, gsd-roadmapper, gsd-project-researcher, gsd-research-synthesizer, gsd-codebase-mapper
26
- - **Execution:** gsd-executor, gsd-debugger
27
- - **Verification:** gsd-verifier, gsd-integration-checker, gsd-set-profile, gsd-settings, gsd-set-model
28
-
29
- **Model discovery:** Presets are user-defined, not hardcoded. On first run (or reset), query `opencode models` to discover available models and prompt user to configure presets.
30
-
31
- **Model ID structure:** Models use 2-level (provider/model) or 3-level (provider/subprovider/model) format:
32
- - 2-level: `opencode/glm-4.7-free`, `xai/grok-3`
33
- - 3-level: `openrouter/anthropic/claude-3.5-haiku`, `synthetic/hf:deepseek-ai/DeepSeek-R1`
34
-
35
- **Provider hierarchy:** Some providers (openrouter, synthetic) have subproviders; others (opencode, xai) are flat. Always use hierarchical selection: provider → subprovider (if applicable) → model.
36
- </context>
37
-
38
- <rules>
39
- **UI Rules (apply throughout):**
40
-
41
- - Always use the Question tool for user input — never print menus as text
42
- - Custom/freeform answers are not allowed; re-prompt on invalid selection
43
- - Apply changes immediately without extra confirmation prompts
44
- - After any action except Exit, return to the main menu (Step 3 → Step 4)
45
-
46
- **Config Rules:**
47
-
48
- - Never overwrite existing presets — only create defaults for new/migrated projects
49
- - Keep `model_profile` in sync with `profiles.active_profile`
50
- - Merge into existing `opencode.json` (preserve non-agent keys)
51
- </rules>
52
-
53
- <behavior>
54
-
55
- ## Helper Discovery Functions
56
-
57
- These bash commands use the cached MODELS_DATA for hierarchical model discovery:
58
-
59
- ```bash
60
- # Initialize cache at wizard start (run once)
61
- MODELS_DATA=$(opencode models 2>/dev/null)
62
-
63
- # Get all unique providers (from cache)
64
- echo "$MODELS_DATA" | cut -d'/' -f1 | sort -u
65
-
66
- # Get model count for a provider (from cache)
67
- echo "$MODELS_DATA" | grep "^${provider}/" | wc -l
68
-
69
- # Check if provider has subproviders (returns "true" or "false", from cache)
70
- echo "$MODELS_DATA" | grep "^${provider}/" | awk -F'/' '{print NF}' | head -1 | grep -q '^3$' && echo "true" || echo "false"
71
-
72
- # Get unique subproviders for a provider (from cache)
73
- echo "$MODELS_DATA" | grep "^${provider}/" | cut -d'/' -f2 | sort -u
74
-
75
- # Get model count for a subprovider (from cache)
76
- echo "$MODELS_DATA" | grep "^${provider}/${subprovider}/" | wc -l
77
-
78
- # Get models for provider/subprovider (3-level, from cache)
79
- echo "$MODELS_DATA" | grep "^${provider}/${subprovider}/" | cut -d'/' -f3- | sort
80
-
81
- # Get models for 2-level provider (from cache)
82
- echo "$MODELS_DATA" | grep "^${provider}/" | cut -d'/' -f2- | sort
83
-
84
- # Verify a model ID exists (from cache)
85
- echo "$MODELS_DATA" | grep -q "^${model_id}$" && echo "valid" || echo "invalid"
86
- ```
87
-
88
- ## Step 1: Load Config
89
-
90
- ```bash
91
- ls .planning/ 2>/dev/null
92
- ```
93
-
94
- If `.planning/` not found: print `Error: No GSD project found. Run /gsd-new-project first.` and stop.
95
-
96
- ```bash
97
- cat .planning/config.json 2>/dev/null
98
- ```
99
-
100
- Handle config state:
101
-
102
- - **Missing/invalid:** Run **Preset Setup Wizard** (see below), then continue
103
- - **Legacy (no `profiles` key):** Run **Preset Setup Wizard**, preserve other existing keys
104
- - **Current:** Use as-is
105
-
106
- Ensure `workflow` section exists (defaults: `research: true`, `plan_check: true`, `verifier: true`).
107
-
108
- ### Preset Setup Wizard
109
-
110
- This wizard runs on first use or when "Reset presets" is selected. It queries available models and lets the user configure all three profiles using hierarchical selection (provider → subprovider → model).
111
-
112
- **Step W1: Discover models and initialize cache**
113
-
114
- ```bash
115
- MODELS_DATA=$(opencode models 2>/dev/null)
116
- ```
117
-
118
- Cache the models output in `MODELS_DATA` variable. All subsequent operations use this cache instead of calling `opencode models` repeatedly.
119
-
120
- If command fails or returns no models, print `Error: Could not fetch available models. Check your OpenCode installation.` and stop.
121
-
122
- **Cache Statistics (for internal use):**
123
- ```bash
124
- # Pre-compute provider counts for all menus
125
- PROVIDER_COUNTS=$(echo "$MODELS_DATA" | awk -F'/' '{count[$1]++} END {for(p in count) print p ":" count[p]}')
126
-
127
- # Pre-compute subprovider structure for 3-level providers
128
- SUBPROVIDER_MAP=$(echo "$MODELS_DATA" | awk -F'/' 'NF==3 {print $1 "/" $2}' | sort -u)
129
- ```
130
-
131
- **Step W2: Configure Quality Profile**
132
-
133
- Configure all 3 stages for the quality profile with full hierarchical selection.
134
-
135
- **W2.1: Quality Profile - Planning Stage**
136
-
137
- 1. **Build Provider Menu (using cached data)**
138
-
139
- ```bash
140
- # Get providers with counts from cache
141
- echo "$PROVIDER_COUNTS" | while IFS=':' read -r provider count; do
142
- echo "- label: \"$provider\""
143
- echo " description: \"$count models\""
144
- done
145
- ```
146
-
147
- Use Question tool:
148
-
149
- ```
150
- header: "Quality Profile - Planning"
151
- question: "Which provider for planning agents (Quality profile)?"
152
- options:
153
- [providers from above with counts]
154
- ```
155
-
156
- Store selected provider as `quality_planning_provider`.
157
-
158
- 2. **Check for Subproviders (using cache)**
159
-
160
- ```bash
161
- # Check if provider has subproviders using cached data
162
- HAS_SUBPROVIDERS=$(echo "$MODELS_DATA" | grep "^${quality_planning_provider}/" | awk -F'/' '{print NF}' | head -1 | grep -q '^3$' && echo "true" || echo "false")
163
- ```
164
-
165
- If result is "true" (provider has subproviders):
166
-
167
- **Build Subprovider Menu (lazy-load examples only when selected):**
168
-
169
- ```bash
170
- # Get subproviders with counts from cache
171
- echo "$MODELS_DATA" | grep "^${quality_planning_provider}/" | awk -F'/' '{print $2}' | sort | uniq -c | while read count subprovider; do
172
- echo "- label: \"$subprovider\""
173
- echo " description: \"$count models\""
174
- done
175
- ```
176
-
177
- Use Question tool:
178
-
179
- ```
180
- header: "Quality Profile - {quality_planning_provider} Subprovider (Planning Stage)"
181
- question: "Which subprovider for planning agents?"
182
- options:
183
- - label: "{subprovider1}"
184
- description: "{model_count} models (e.g., {model1}, {model2}, {model3}, ...)"
185
- - label: "{subprovider2}"
186
- description: "{model_count} models (e.g., {model1}, {model2}, {model3}, ...)"
187
- [all unique subproviders for this provider with 3 example models each]
188
- ```
189
-
190
- Store selected subprovider as `quality_planning_subprovider`.
191
-
192
- 3. **Choose Model (using cache)**
193
-
194
- For 3-level structure (provider/subprovider/model):
195
- ```bash
196
- MODELS=$(echo "$MODELS_DATA" | grep "^${quality_planning_provider}/${quality_planning_subprovider}/" | cut -d'/' -f3- | sort)
197
- ```
198
-
199
- For 2-level structure (provider/model):
200
- ```bash
201
- MODELS=$(echo "$MODELS_DATA" | grep "^${quality_planning_provider}/" | cut -d'/' -f2- | sort)
202
- ```
203
-
204
- Use Question tool:
205
-
206
- ```
207
- header: "{quality_planning_provider} {quality_planning_subprovider} Models"
208
- question: "Which model for planning?"
209
- options:
210
- [models from filtered list]
211
- ```
212
-
213
- Store full model ID as `quality_planning_model`.
214
-
215
- **W2.2: Quality Profile - Execution Stage**
216
-
217
- 1. **Choose Provider (using cached data)**
218
-
219
- Use Question tool with smart proposal:
220
-
221
- ```
222
- header: "Quality Profile - Execution"
223
- question: "Which provider for execution agents (Quality profile)?"
224
- options:
225
- - label: "Same as planning"
226
- description: "Use {quality_planning_model}"
227
- [providers from cache with counts]
228
- ```
229
-
230
- If "Same as planning" selected: Set `quality_execution_model = quality_planning_model`, skip to W2.3.
231
-
232
- Otherwise: Repeat W2.1 steps 2-3 (subprovider → model) for execution, store as `quality_execution_model`.
233
-
234
- **W2.3: Quality Profile - Verification Stage**
235
-
236
- Use Question tool with smart proposals (using cached data):
237
-
238
- ```
239
- header: "Quality Profile - Verification"
240
- question: "Which provider for verification agents (Quality profile)?"
241
- options:
242
- - label: "Same as planning"
243
- description: "Use {quality_planning_model}"
244
- - label: "Same as execution"
245
- description: "Use {quality_execution_model}"
246
- [providers from cache with counts]
247
- ```
248
-
249
- If "Same as planning" selected: Set `quality_verification_model = quality_planning_model`, skip to W2.4.
250
-
251
- If "Same as execution" selected: Set `quality_verification_model = quality_execution_model`, skip to W2.4.
252
-
253
- Otherwise: Repeat W2.1 steps 2-3 (subprovider → model) for verification, store as `quality_verification_model`.
254
-
255
- **Step W3: Configure Balanced Profile**
256
-
257
- Configure all 3 stages for balanced profile with smart proposals from quality profile.
258
-
259
- **W3.1: Balanced Profile - Planning**
260
-
261
- Use Question tool (using cached data):
262
-
263
- ```
264
- header: "Balanced Profile - Planning"
265
- question: "Which provider for planning agents (Balanced profile)?"
266
- options:
267
- - label: "Same as quality profile"
268
- description: "Use {quality_planning_model}"
269
- [providers from cache with counts]
270
- ```
271
-
272
- If "Same as quality profile" selected: Set `balanced_planning_model = quality_planning_model`, skip to W3.2.
273
-
274
- Otherwise: Repeat hierarchical selection (provider → subprovider → model), store as `balanced_planning_model`.
275
-
276
- **W3.2: Balanced Profile - Execution**
277
-
278
- Use Question tool (using cached data):
279
-
280
- ```
281
- header: "Balanced Profile - Execution"
282
- question: "Which provider for execution agents (Balanced profile)?"
283
- options:
284
- - label: "Same as planning"
285
- description: "Use {balanced_planning_model}"
286
- - label: "Same as quality execution"
287
- description: "Use {quality_execution_model}"
288
- [providers from cache with counts]
289
- ```
290
-
291
- If "Same as planning" selected: Set `balanced_execution_model = balanced_planning_model`, skip to W3.3.
292
-
293
- If "Same as quality execution" selected: Set `balanced_execution_model = quality_execution_model`, skip to W3.3.
294
-
295
- Otherwise: Repeat hierarchical selection, store as `balanced_execution_model`.
296
-
297
- **W3.3: Balanced Profile - Verification**
298
-
299
- Use Question tool (using cached data):
300
-
301
- ```
302
- header: "Balanced Profile - Verification"
303
- question: "Which provider for verification agents (Balanced profile)?"
304
- options:
305
- - label: "Same as planning"
306
- description: "Use {balanced_planning_model}"
307
- - label: "Same as quality verification"
308
- description: "Use {quality_verification_model}"
309
- [providers from cache with counts]
310
- ```
311
-
312
- If "Same as planning" selected: Set `balanced_verification_model = balanced_planning_model`, skip to W4.
313
-
314
- If "Same as quality verification" selected: Set `balanced_verification_model = quality_verification_model`, skip to W4.
315
-
316
- Otherwise: Repeat hierarchical selection, store as `balanced_verification_model`.
317
-
318
- **Step W4: Configure Budget Profile**
319
-
320
- Configure all 3 stages for budget profile with smart proposals from balanced and quality profiles.
321
-
322
- **W4.1: Budget Profile - Planning**
323
-
324
- Use Question tool (using cached data):
325
-
326
- ```
327
- header: "Budget Profile - Planning"
328
- question: "Which provider for planning agents (Budget profile)?"
329
- options:
330
- - label: "Same as balanced profile"
331
- description: "Use {balanced_planning_model}"
332
- - label: "Same as quality profile"
333
- description: "Use {quality_planning_model}"
334
- [providers from cache with counts]
335
- ```
336
-
337
- If "Same as balanced profile" selected: Set `budget_planning_model = balanced_planning_model`, skip to W4.2.
338
-
339
- If "Same as quality profile" selected: Set `budget_planning_model = quality_planning_model`, skip to W4.2.
340
-
341
- Otherwise: Repeat hierarchical selection, store as `budget_planning_model`.
342
-
343
- **W4.2: Budget Profile - Execution**
344
-
345
- Use Question tool (using cached data):
346
-
347
- ```
348
- header: "Budget Profile - Execution"
349
- question: "Which provider for execution agents (Budget profile)?"
350
- options:
351
- - label: "Same as planning"
352
- description: "Use {budget_planning_model}"
353
- - label: "Same as balanced execution"
354
- description: "Use {balanced_execution_model}"
355
- - label: "Same as quality execution"
356
- description: "Use {quality_execution_model}"
357
- [providers from cache with counts]
358
- ```
359
-
360
- If "Same as planning" selected: Set `budget_execution_model = budget_planning_model`, skip to W4.3.
361
-
362
- Otherwise if other "Same as" option selected: Set accordingly and skip to W4.3.
363
-
364
- Otherwise: Repeat hierarchical selection, store as `budget_execution_model`.
365
-
366
- **W4.3: Budget Profile - Verification**
367
-
368
- Use Question tool (using cached data):
369
-
370
- ```
371
- header: "Budget Profile - Verification"
372
- question: "Which provider for verification agents (Budget profile)?"
373
- options:
374
- - label: "Same as planning"
375
- description: "Use {budget_planning_model}"
376
- - label: "Same as balanced verification"
377
- description: "Use {balanced_verification_model}"
378
- - label: "Same as quality verification"
379
- description: "Use {quality_verification_model}"
380
- [providers from cache with counts]
381
- ```
382
-
383
- If "Same as planning" selected: Set `budget_verification_model = budget_planning_model`, skip to W5.
384
-
385
- Otherwise if other "Same as" option selected: Set accordingly and skip to W5.
386
-
387
- Otherwise: Repeat hierarchical selection, store as `budget_verification_model`.
388
-
389
- **Step W5: Save config**
390
-
391
- Create config with user selections:
392
-
393
- ```json
394
- {
395
- "profiles": {
396
- "active_profile": "balanced",
397
- "presets": {
398
- "quality": {
399
- "planning": "{user_selection}",
400
- "execution": "{user_selection}",
401
- "verification": "{user_selection}"
402
- },
403
- "balanced": {
404
- "planning": "{user_selection}",
405
- "execution": "{user_selection}",
406
- "verification": "{user_selection}"
407
- },
408
- "budget": {
409
- "planning": "{user_selection}",
410
- "execution": "{user_selection}",
411
- "verification": "{user_selection}"
412
- }
413
- },
414
- "custom_overrides": { "quality": {}, "balanced": {}, "budget": {} }
415
- },
416
- "workflow": { "research": true, "plan_check": true, "verifier": true }
417
- }
418
- ```
419
-
420
- Print:
421
-
422
- ```text
423
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
424
- GSD ► PRESETS CONFIGURED
425
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
426
-
427
- Your model presets have been saved. Use "Reset presets"
428
- from the settings menu if available models change.
429
-
430
- Note: Quit and relaunch OpenCode to apply model changes.
431
- ```
432
-
433
- ## Step 2: Compute Effective Models
434
-
435
- ```text
436
- activeProfile = config.profiles.active_profile
437
- preset = config.profiles.presets[activeProfile]
438
- overrides = config.profiles.custom_overrides[activeProfile] || {}
439
-
440
- effective.planning = overrides.planning || preset.planning
441
- effective.execution = overrides.execution || preset.execution
442
- effective.verification = overrides.verification || preset.verification
443
- ```
444
-
445
- A stage is "overridden" if `overrides[stage]` exists and differs from `preset[stage]`.
446
-
447
- ## Step 3: Display State
448
-
449
- **Print this as text output (do NOT use Question tool here):**
450
-
451
- ```text
452
- Active profile: {activeProfile}
453
-
454
- | Stage | Model |
455
- |--------------|------------------------------------------|
456
- | planning | {effective.planning}{* if overridden} |
457
- | execution | {effective.execution}{* if overridden} |
458
- | verification | {effective.verification}{* if overridden}|
459
-
460
- {if any overridden: "* = overridden" else: "No overrides"}
461
-
462
- Workflow:
463
- | Toggle | Value |
464
- |------------|------------------------|
465
- | research | {workflow.research} |
466
- | plan_check | {workflow.plan_check} |
467
- | verifier | {workflow.verifier} |
468
- ```
469
-
470
- ## Step 4: Show Menu
471
-
472
- Use Question tool (single prompt, not multi-question):
473
-
474
- ```
475
- header: "GSD Settings"
476
- question: "Choose an action"
477
- options:
478
- - label: "Quick settings"
479
- description: "Update profile and workflow toggles"
480
- - label: "Set stage override"
481
- description: "Set a per-stage model override for the active profile"
482
- - label: "Clear stage override"
483
- description: "Remove a per-stage override for the active profile"
484
- - label: "Reset presets"
485
- description: "Re-run model discovery and reconfigure all presets (clears overrides)"
486
- - label: "Exit"
487
- description: "Save and quit"
488
- ```
489
-
490
- ## Step 5: Handle Actions
491
-
492
- ### Quick settings
493
-
494
- Use multi-question call with pre-selected current values:
495
-
496
- ```json
497
- [
498
- {
499
- "header": "Model",
500
- "question": "Which model profile?",
501
- "options": ["Quality", "Balanced", "Budget"]
502
- },
503
- {
504
- "header": "Research",
505
- "question": "Spawn Plan Researcher?",
506
- "options": ["Yes", "No"]
507
- },
508
- {
509
- "header": "Plan Check",
510
- "question": "Spawn Plan Checker?",
511
- "options": ["Yes", "No"]
512
- },
513
- {
514
- "header": "Verifier",
515
- "question": "Spawn Execution Verifier?",
516
- "options": ["Yes", "No"]
517
- }
518
- ]
519
- ```
520
-
521
- On selection:
522
-
523
- - Map: Quality→`quality`, Balanced→`balanced`, Budget→`budget`
524
- - Set `profiles.active_profile`, `model_profile`, and `workflow.*` accordingly
525
- - Quick settings does NOT modify `presets` or `custom_overrides`
526
- - If nothing changed, print `No changes.` and return to menu
527
- - Otherwise save and print confirmation banner:
528
-
529
- ```text
530
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
531
- GSD ► SETTINGS UPDATED
532
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
533
-
534
- | Setting | Value |
535
- |--------------------|---------------------------|
536
- | Model Profile | {quality|balanced|budget} |
537
- | Plan Researcher | {On/Off} |
538
- | Plan Checker | {On/Off} |
539
- | Execution Verifier | {On/Off} |
540
-
541
- Note: Quit and relaunch OpenCode to apply model changes.
542
-
543
- Quick commands:
544
- - /gsd-set-profile <profile>
545
- - /gsd-plan-phase --research | --skip-research | --skip-verify
546
- ```
547
-
548
- ### Set stage override
549
-
550
- 1. **Pick stage**
551
-
552
- Use Question tool:
553
-
554
- ```
555
- header: "Select Stage"
556
- question: "Which stage to override?"
557
- options:
558
- - label: "Planning"
559
- description: "Override planning model"
560
- - label: "Execution"
561
- description: "Override execution model"
562
- - label: "Verification"
563
- description: "Override verification model"
564
- - label: "Cancel"
565
- description: "Return to menu"
566
- ```
567
-
568
- If Cancel selected, return to menu.
569
-
570
- Store selected stage as `targetStage`.
571
-
572
- 2. **Choose Provider (using cache)**
573
-
574
- Initialize cache if not already available:
575
- ```bash
576
- [ -z "$MODELS_DATA" ] && MODELS_DATA=$(opencode models 2>/dev/null)
577
- PROVIDER_COUNTS=$(echo "$MODELS_DATA" | awk -F'/' '{count[$1]++} END {for(p in count) print p ":" count[p]}')
578
- ```
579
-
580
- Build provider menu from cache:
581
- ```bash
582
- echo "$PROVIDER_COUNTS" | while IFS=':' read -r provider count; do
583
- echo "- label: \"$provider\""
584
- echo " description: \"$count models\""
585
- done
586
- ```
587
-
588
- Use Question tool:
589
-
590
- ```
591
- header: "Choose LLM Provider ({activeProfile} profile)"
592
- question: "Which provider for {targetStage} stage?"
593
- options:
594
- [providers from cache with counts]
595
- - label: "Cancel"
596
- description: "Return to menu"
597
- ```
598
-
599
- If Cancel selected, return to menu.
600
-
601
- Store selected provider as `overrideProvider`.
602
-
603
- 3. **Check for Subproviders (using cache)**
604
-
605
- ```bash
606
- HAS_SUBPROVIDERS=$(echo "$MODELS_DATA" | grep "^${overrideProvider}/" | awk -F'/' '{print NF}' | head -1 | grep -q '^3$' && echo "true" || echo "false")
607
- ```
608
-
609
- If result is "true" (provider has subproviders):
610
-
611
- Build subprovider menu from cache:
612
- ```bash
613
- echo "$MODELS_DATA" | grep "^${overrideProvider}/" | awk -F'/' '{print $2}' | sort | uniq -c | while read count subprovider; do
614
- echo "- label: \"$subprovider\""
615
- echo " description: \"$count models\""
616
- done
617
- ```
618
-
619
- Use Question tool:
620
-
621
- ```
622
- header: "{activeProfile} Profile - {overrideProvider} Subprovider ({targetStage} Stage)"
623
- question: "Which subprovider for {targetStage}?"
624
- options:
625
- [subproviders from cache with counts]
626
- - label: "Cancel"
627
- description: "Back to provider selection"
628
- ```
629
-
630
- If Cancel selected, return to step 2.
631
-
632
- Store selected subprovider as `overrideSubprovider`.
633
-
634
- 4. **Choose Model**
635
-
636
- For 3-level structure (provider/subprovider/model):
637
- ```bash
638
- MODELS=$(echo "$MODELS_DATA" | grep "^${overrideProvider}/${overrideSubprovider}/" | cut -d'/' -f3- | sort)
639
- ```
640
-
641
- For 2-level structure (provider/model):
642
- ```bash
643
- MODELS=$(echo "$MODELS_DATA" | grep "^${overrideProvider}/" | cut -d'/' -f2- | sort)
644
- ```
645
-
646
- Use Question tool:
647
-
648
- ```
649
- header: "{overrideProvider} {overrideSubprovider} Models"
650
- question: "Which model for {targetStage} stage?"
651
- options:
652
- [models from cache]
653
- - label: "Cancel"
654
- description: "Back to provider selection"
655
- ```
656
-
657
- If Cancel selected, return to step 2.
658
-
659
- Store selected model and construct full model ID:
660
- - 3-level: `{overrideProvider}/{overrideSubprovider}/{model}`
661
- - 2-level: `{overrideProvider}/{model}`
662
-
663
- 5. **Save Override**
664
-
665
- Set `config.profiles.custom_overrides[activeProfile][targetStage] = model_id`
666
-
667
- 6. **Save and Return**
668
-
669
- Save both files and print: `Saved {targetStage} override: {model_id}`
670
-
671
- Return to main menu (Step 4).
672
-
673
- ### Clear stage override
674
-
675
- If no overrides exist for current profile, print `No overrides set for {activeProfile} profile.` and return to menu immediately.
676
-
677
- Otherwise:
678
-
679
- 1. Print current overrides:
680
-
681
- ```text
682
- Current overrides for {activeProfile} profile:
683
- - planning: {model} (or omit if not overridden)
684
- - execution: {model} (or omit if not overridden)
685
- - verification: {model} (or omit if not overridden)
686
- ```
687
-
688
- 2. Pick stage: Planning / Execution / Verification / Cancel (only show stages that have overrides)
689
- 3. If Cancel, return to menu
690
- 4. Delete `custom_overrides[activeProfile][stage]`
691
- 5. Save, print "Cleared {stage} override.", return to menu
692
-
693
- ### Reset presets
694
-
695
- Run the **Preset Setup Wizard** (see Step 1, W1-W5). This re-queries available models and lets the user reconfigure all three profiles from scratch using hierarchical selection. Existing `custom_overrides` are cleared. After completion, return to menu.
696
-
697
- ### Exit
698
-
699
- Print "Settings saved." and stop.
700
-
701
- ## Save Changes
702
-
703
- After any change, use the **write tool directly** to update both files. Do NOT use bash, python, or other scripts—use native file writing.
704
-
705
- 1. Read existing `opencode.json` (if it exists) to preserve non-agent keys
706
- 2. Write `.planning/config.json` with updated config
707
- 3. Write `opencode.json` with merged agent mappings:
708
-
709
- ```json
710
- {
711
- "$schema": "https://opencode.ai/config.json",
712
- "agent": {
713
- "gsd-planner": { "model": "{effective.planning}" },
714
- "gsd-plan-checker": { "model": "{effective.planning}" },
715
- "gsd-phase-researcher": { "model": "{effective.planning}" },
716
- "gsd-roadmapper": { "model": "{effective.planning}" },
717
- "gsd-project-researcher": { "model": "{effective.planning}" },
718
- "gsd-research-synthesizer": { "model": "{effective.planning}" },
719
- "gsd-codebase-mapper": { "model": "{effective.planning}" },
720
- "gsd-executor": { "model": "{effective.execution}" },
721
- "gsd-debugger": { "model": "{effective.execution}" },
722
- "gsd-verifier": { "model": "{effective.verification}" },
723
- "gsd-integration-checker": { "model": "{effective.verification}" },
724
- "gsd-set-profile": { "model": "{effective.verification}" },
725
- "gsd-settings": { "model": "{effective.verification}" },
726
- "gsd-set-model": { "model": "{effective.verification}" }
727
- }
728
- }
729
- ```
730
-
731
- Preserve existing non-agent keys in `opencode.json`.
732
-
733
- </behavior>
734
-
735
- <notes>
736
-
737
- - Menu loop until Exit — always return to Step 3 after actions
738
- - Overrides are profile-scoped: `custom_overrides.{profile}.{stage}`
739
- - Source of truth: `config.json`; `opencode.json` is derived
740
- - OpenCode does not hot-reload model assignments; user must quit and relaunch to apply changes
741
- - Model IDs support 2-level (provider/model) and 3-level (provider/subprovider/model) structures
742
- - Hierarchical selection is used by default: provider → subprovider (if applicable) → model
743
- - Providers with subproviders: openrouter (anthropic, meta-llama, google, etc.), synthetic (hf:deepseek-ai, hf:meta-llama, etc.)
744
- - Providers without subproviders: opencode, xai, back, ollama, kimi-for-coding, zai-coding-plan
745
- - Smart proposals allow reusing previous selections across profiles and stages to reduce user input
746
- - All model selections are validated against `opencode models` output
747
- - **Performance Optimization:** All model discovery uses a single cached `MODELS_DATA` variable instead of repeated `opencode models` calls. Provider counts are pre-computed with awk for O(n) efficiency. Lazy loading: model examples are not fetched until user selects a subprovider.
748
-
749
- </notes>