gsd-opencode 1.10.2 → 1.20.1
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/agents/gsd-codebase-mapper.md +29 -3
- package/agents/gsd-debugger.md +19 -21
- package/agents/gsd-executor.md +213 -528
- package/agents/gsd-integration-checker.md +20 -0
- package/agents/gsd-phase-researcher.md +189 -267
- package/agents/gsd-plan-checker.md +278 -279
- package/agents/gsd-planner.md +299 -490
- package/agents/gsd-project-researcher.md +103 -345
- package/agents/gsd-research-synthesizer.md +5 -22
- package/agents/gsd-roadmapper.md +43 -6
- package/agents/gsd-verifier.md +158 -377
- package/{lib → bin/dm/lib}/constants.js +10 -3
- package/{src → bin/dm/src}/commands/install.js +5 -4
- package/{src → bin/dm/src}/commands/uninstall.js +3 -1
- package/{src → bin/dm/src}/services/backup-manager.js +1 -1
- package/{src → bin/dm/src}/services/config.js +1 -1
- package/{src → bin/dm/src}/services/file-ops.js +20 -4
- package/{src → bin/dm/src}/services/health-checker.js +3 -1
- package/{src → bin/dm/src}/services/repair-service.js +3 -1
- package/{src → bin/dm/src}/services/settings.js +1 -1
- package/{src → bin/dm/src}/services/update-service.js +2 -2
- package/bin/gsd-install.js +0 -0
- package/bin/gsd.js +9 -9
- package/commands/gsd/gsd-add-phase.md +43 -0
- package/commands/gsd/gsd-add-todo.md +47 -0
- package/commands/gsd/gsd-audit-milestone.md +36 -0
- package/commands/gsd/gsd-check-todos.md +45 -0
- package/commands/gsd/gsd-cleanup.md +18 -0
- package/commands/gsd/{complete-milestone.md → gsd-complete-milestone.md} +1 -1
- package/commands/gsd/{debug.md → gsd-debug.md} +16 -21
- package/commands/gsd/{discuss-phase.md → gsd-discuss-phase.md} +6 -9
- package/commands/gsd/gsd-execute-phase.md +41 -0
- package/commands/gsd/gsd-health.md +22 -0
- package/commands/gsd/gsd-help.md +22 -0
- package/commands/gsd/gsd-insert-phase.md +32 -0
- package/commands/gsd/gsd-join-discord.md +18 -0
- package/commands/gsd/{list-phase-assumptions.md → gsd-list-phase-assumptions.md} +3 -7
- package/commands/gsd/{map-codebase.md → gsd-map-codebase.md} +3 -3
- package/commands/gsd/gsd-new-milestone.md +44 -0
- package/commands/gsd/gsd-new-project.md +42 -0
- package/commands/gsd/gsd-pause-work.md +38 -0
- package/commands/gsd/gsd-plan-milestone-gaps.md +34 -0
- package/commands/gsd/gsd-plan-phase.md +44 -0
- package/commands/gsd/gsd-progress.md +24 -0
- package/commands/gsd/gsd-quick.md +41 -0
- package/commands/gsd/gsd-reapply-patches.md +119 -0
- package/commands/gsd/gsd-remove-phase.md +31 -0
- package/commands/gsd/{research-phase.md → gsd-research-phase.md} +38 -49
- package/commands/gsd/{resume-work.md → gsd-resume-work.md} +2 -2
- package/commands/gsd/gsd-set-profile.md +34 -0
- package/commands/gsd/gsd-settings.md +36 -0
- package/commands/gsd/gsd-update.md +37 -0
- package/commands/gsd/gsd-verify-work.md +38 -0
- package/get-shit-done/bin/gsd-tools.cjs +553 -0
- package/get-shit-done/bin/gsd-tools.test.cjs +2346 -0
- package/get-shit-done/bin/lib/commands.cjs +556 -0
- package/get-shit-done/bin/lib/config.cjs +162 -0
- package/get-shit-done/bin/lib/core.cjs +377 -0
- package/get-shit-done/bin/lib/frontmatter.cjs +299 -0
- package/get-shit-done/bin/lib/init.cjs +694 -0
- package/get-shit-done/bin/lib/milestone.cjs +215 -0
- package/get-shit-done/bin/lib/phase.cjs +877 -0
- package/get-shit-done/bin/lib/roadmap.cjs +298 -0
- package/get-shit-done/bin/lib/state.cjs +490 -0
- package/get-shit-done/bin/lib/template.cjs +222 -0
- package/get-shit-done/bin/lib/verify.cjs +772 -0
- package/get-shit-done/references/checkpoints.md +62 -364
- package/get-shit-done/references/decimal-phase-calculation.md +65 -0
- package/get-shit-done/references/git-integration.md +10 -16
- package/get-shit-done/references/git-planning-commit.md +38 -0
- package/get-shit-done/references/model-profile-resolution.md +34 -0
- package/get-shit-done/references/model-profiles.md +54 -66
- package/get-shit-done/references/phase-argument-parsing.md +61 -0
- package/get-shit-done/references/planning-config.md +112 -10
- package/get-shit-done/references/questioning.md +4 -0
- package/get-shit-done/references/ui-brand.md +1 -1
- package/get-shit-done/templates/UAT.md +1 -1
- package/get-shit-done/templates/VALIDATION.md +104 -0
- package/get-shit-done/templates/codebase/structure.md +6 -6
- package/get-shit-done/templates/config.json +37 -0
- package/get-shit-done/templates/context.md +2 -10
- package/get-shit-done/templates/continue-here.md +6 -6
- package/get-shit-done/templates/debug-subagent-prompt.md +2 -2
- package/get-shit-done/templates/discovery.md +6 -6
- package/get-shit-done/templates/milestone-archive.md +3 -3
- package/get-shit-done/templates/phase-prompt.md +9 -7
- package/get-shit-done/templates/planner-subagent-prompt.md +6 -6
- package/get-shit-done/templates/research-project/ARCHITECTURE.md +1 -1
- package/get-shit-done/templates/research.md +29 -6
- package/get-shit-done/templates/roadmap.md +1 -1
- package/get-shit-done/templates/state.md +0 -30
- package/get-shit-done/templates/summary-complex.md +59 -0
- package/get-shit-done/templates/summary-minimal.md +41 -0
- package/get-shit-done/templates/summary-standard.md +48 -0
- package/get-shit-done/templates/summary.md +16 -37
- package/get-shit-done/templates/user-setup.md +1 -13
- package/get-shit-done/templates/verification-report.md +5 -5
- package/get-shit-done/workflows/add-phase.md +111 -0
- package/{commands/gsd → get-shit-done/workflows}/add-todo.md +24 -60
- package/{commands/gsd → get-shit-done/workflows}/audit-milestone.md +83 -63
- package/{commands/gsd → get-shit-done/workflows}/check-todos.md +21 -73
- package/get-shit-done/workflows/cleanup.md +152 -0
- package/get-shit-done/workflows/complete-milestone.md +251 -312
- package/get-shit-done/workflows/diagnose-issues.md +6 -31
- package/get-shit-done/workflows/discovery-phase.md +11 -11
- package/get-shit-done/workflows/discuss-phase.md +156 -49
- package/get-shit-done/workflows/execute-phase.md +238 -396
- package/get-shit-done/workflows/execute-plan.md +180 -1609
- package/get-shit-done/workflows/health.md +156 -0
- package/{commands/gsd → get-shit-done/workflows}/help.md +33 -35
- package/get-shit-done/workflows/insert-phase.md +129 -0
- package/get-shit-done/workflows/list-phase-assumptions.md +3 -3
- package/get-shit-done/workflows/map-codebase.md +73 -80
- package/get-shit-done/workflows/new-milestone.md +382 -0
- package/{commands/gsd → get-shit-done/workflows}/new-project.md +281 -234
- package/get-shit-done/workflows/oc-set-profile.md +320 -0
- package/{commands/gsd → get-shit-done/workflows}/pause-work.md +31 -43
- package/{commands/gsd → get-shit-done/workflows}/plan-milestone-gaps.md +29 -50
- package/get-shit-done/workflows/plan-phase.md +478 -0
- package/{commands/gsd → get-shit-done/workflows}/progress.md +64 -47
- package/get-shit-done/workflows/quick.md +453 -0
- package/get-shit-done/workflows/remove-phase.md +154 -0
- package/get-shit-done/workflows/research-phase.md +73 -0
- package/get-shit-done/workflows/resume-project.md +17 -26
- package/get-shit-done/workflows/set-profile.md +80 -0
- package/get-shit-done/workflows/settings.md +213 -0
- package/get-shit-done/workflows/transition.md +84 -104
- package/{commands/gsd → get-shit-done/workflows}/update.md +70 -28
- package/get-shit-done/workflows/verify-phase.md +106 -492
- package/get-shit-done/workflows/verify-work.md +26 -53
- package/package.json +7 -4
- package/rules/gsd-oc-work-hard.md +36 -0
- package/skills/gsd-oc-select-model/SKILL.md +348 -0
- package/skills/gsd-oc-select-model/scripts/select-models.cjs +268 -0
- package/agents/gsd-set-model.md +0 -287
- package/agents/gsd-set-profile.md +0 -239
- package/agents/gsd-settings.md +0 -749
- package/bin/install.js +0 -323
- package/commands/gsd/add-phase.md +0 -207
- package/commands/gsd/execute-phase.md +0 -339
- package/commands/gsd/insert-phase.md +0 -227
- package/commands/gsd/new-milestone.md +0 -721
- package/commands/gsd/plan-phase.md +0 -525
- package/commands/gsd/quick.md +0 -309
- package/commands/gsd/remove-phase.md +0 -349
- package/commands/gsd/set-model.md +0 -77
- package/commands/gsd/set-profile.md +0 -46
- package/commands/gsd/settings.md +0 -33
- package/commands/gsd/verify-work.md +0 -219
- package/commands/gsd/whats-new.md +0 -124
- /package/{src → bin/dm/src}/commands/check.js +0 -0
- /package/{src → bin/dm/src}/commands/config.js +0 -0
- /package/{src → bin/dm/src}/commands/list.js +0 -0
- /package/{src → bin/dm/src}/commands/repair.js +0 -0
- /package/{src → bin/dm/src}/commands/update.js +0 -0
- /package/{src → bin/dm/src}/services/manifest-manager.js +0 -0
- /package/{src → bin/dm/src}/services/migration-service.js +0 -0
- /package/{src → bin/dm/src}/services/scope-manager.js +0 -0
- /package/{src → bin/dm/src}/services/structure-detector.js +0 -0
- /package/{src → bin/dm/src}/utils/hash.js +0 -0
- /package/{src → bin/dm/src}/utils/interactive.js +0 -0
- /package/{src → bin/dm/src}/utils/logger.js +0 -0
- /package/{src → bin/dm/src}/utils/npm-registry.js +0 -0
- /package/{src → bin/dm/src}/utils/path-resolver.js +0 -0
package/agents/gsd-settings.md
DELETED
|
@@ -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>
|