@emiliosp/pi-maestro 0.13.0 → 0.14.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.
- package/ADR.md +59 -2
- package/CHANGELOG.md +11 -0
- package/README.md +3 -2
- package/ROADMAP.md +415 -0
- package/docs/configuration.md +11 -7
- package/package.json +2 -1
- package/src/config/assertConfiguration.ts +1 -1
- package/src/config/schema.ts +2 -4
- package/src/maestro/checks/assertEnvironment.ts +1 -3
package/ADR.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
An Architecture Decision Record (ADR) explains an important architectural choice, its context, and its consequences. This file contains one numbered record per decision.
|
|
4
4
|
|
|
5
|
-
Requirements and routine project rules belong in the [roadmap](
|
|
5
|
+
Requirements and routine project rules belong in the [roadmap](ROADMAP.md) or other relevant documentation.
|
|
6
6
|
|
|
7
7
|
When a new decision replaces an accepted decision, add a new record, mark the earlier record as superseded, and link both records.
|
|
8
8
|
|
|
@@ -168,7 +168,7 @@ approval.
|
|
|
168
168
|
|
|
169
169
|
### Status
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
Superseded by [ADR-007](#adr-007-maintain-the-roadmap-in-the-repository).
|
|
172
172
|
|
|
173
173
|
### Context
|
|
174
174
|
|
|
@@ -190,3 +190,60 @@ commit-pinned links to repository evidence. Removing the local roadmap also remo
|
|
|
190
190
|
### Evidence
|
|
191
191
|
|
|
192
192
|
[Linear roadmap](https://linear.app/emilio-spatola/team/MAESTRO/overview) and [repository instructions](AGENTS.md).
|
|
193
|
+
|
|
194
|
+
## ADR-007: Maintain the roadmap in the repository
|
|
195
|
+
|
|
196
|
+
### Status
|
|
197
|
+
|
|
198
|
+
Accepted. Supersedes [ADR-006](#adr-006-maintain-the-roadmap-in-linear).
|
|
199
|
+
|
|
200
|
+
### Context
|
|
201
|
+
|
|
202
|
+
The `owner` reported excessive token use when accessing Linear and requested restoration of the Markdown roadmap. The `owner` also explicitly prohibited changes to the
|
|
203
|
+
Linear project.
|
|
204
|
+
|
|
205
|
+
### Decision
|
|
206
|
+
|
|
207
|
+
Maintain the roadmap in `ROADMAP.md` as the source of truth. Restore project items from Linear through read-only access, preserving existing `MAESTRO` identifiers, scope,
|
|
208
|
+
and evidence. Do not transfer Linear onboarding or test issues.
|
|
209
|
+
|
|
210
|
+
Keep Linear unchanged as historical reference. Routine roadmap reading and maintenance use local files, not MCP.
|
|
211
|
+
|
|
212
|
+
### Consequences
|
|
213
|
+
|
|
214
|
+
Planning no longer requires Linear access. Repository instructions, documentation audit guidance, links, and published package contents refer to the local roadmap. Later
|
|
215
|
+
roadmap changes do not need synchronization with Linear.
|
|
216
|
+
|
|
217
|
+
Conflicting imported status and acceptance evidence remain explicit rather than being treated as proof of final `owner` acceptance.
|
|
218
|
+
|
|
219
|
+
### Evidence
|
|
220
|
+
|
|
221
|
+
[Roadmap](ROADMAP.md) and [repository instructions](AGENTS.md).
|
|
222
|
+
|
|
223
|
+
## ADR-008: Use Pi's registry for model availability
|
|
224
|
+
|
|
225
|
+
### Status
|
|
226
|
+
|
|
227
|
+
Accepted. Implemented.
|
|
228
|
+
|
|
229
|
+
### Context
|
|
230
|
+
|
|
231
|
+
Maestro's model format regex rejected OpenRouter IDs containing additional slashes. The `owner` selected Pi as the source of truth for models and explicitly retained the
|
|
232
|
+
activation availability check because it uses Pi's registry.
|
|
233
|
+
|
|
234
|
+
### Decision
|
|
235
|
+
|
|
236
|
+
Treat configured models as strings without a separate format regex. During activation, match each complete `provider/model` identifier against
|
|
237
|
+
`context.modelRegistry.getAvailable()`, preserving slashes inside model IDs. Pass the configured identifier unchanged through `pi-subagents`.
|
|
238
|
+
|
|
239
|
+
Keep Maestro's configuration structure, version, path, thinking-level, and timeout validation.
|
|
240
|
+
|
|
241
|
+
### Consequences
|
|
242
|
+
|
|
243
|
+
A model absent from Pi's available registry prevents activation. `Maestro` maintains no separate model catalog or authentication check. Provider or authentication
|
|
244
|
+
failures during delegation still use the existing `run` failure path. Workflow recovery and phase transitions remain unchanged.
|
|
245
|
+
|
|
246
|
+
### Evidence
|
|
247
|
+
|
|
248
|
+
[Configuration](docs/configuration.md#model-access), [activation checks](src/maestro/checks/assertEnvironment.ts), and
|
|
249
|
+
[delegation](src/tools/utils/pi-subagent-delegation.ts).
|
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
This file summarizes meaningful changes to the codebase, including behavior, data formats, architecture, and development tools. Git tags identify version boundaries;
|
|
4
4
|
GitHub Releases are not required.
|
|
5
5
|
|
|
6
|
+
## 0.14.0
|
|
7
|
+
|
|
8
|
+
1. Removed Maestro's model format regex while retaining activation checks against Pi's available model registry. Complete identifiers, including
|
|
9
|
+
`openrouter/~openai/gpt-mini-latest`, are matched without truncation and passed unchanged to `pi-subagents`. Maestro's other configuration validation remains
|
|
10
|
+
unchanged.
|
|
11
|
+
|
|
12
|
+
## 0.13.1
|
|
13
|
+
|
|
14
|
+
1. Restored `ROADMAP.md` as the planning source of truth from the current Linear issues, retaining their identifiers and recorded evidence. Updated repository guidance,
|
|
15
|
+
documentation links, and package contents so roadmap maintenance no longer requires Linear. Linear data remains unchanged.
|
|
16
|
+
|
|
6
17
|
## 0.13.0
|
|
7
18
|
|
|
8
19
|
1. Automatically turn off `Maestro` after successfully delivering the final summary of a completed workflow, including when Git is unavailable and simplification is
|
package/README.md
CHANGED
|
@@ -101,7 +101,8 @@ Activate `Maestro`:
|
|
|
101
101
|
/maestro
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
-
During activation, `Maestro` checks project trust, configuration, models, and agent availability.
|
|
104
|
+
During activation, `Maestro` checks project trust, configuration, models, and agent availability. Model availability comes from Pi's model registry. If a check fails,
|
|
105
|
+
`Maestro` stays disabled and reports the problem.
|
|
105
106
|
|
|
106
107
|
The `owner` follows this workflow:
|
|
107
108
|
|
|
@@ -153,6 +154,6 @@ The reading order is:
|
|
|
153
154
|
|
|
154
155
|
1. [Mission](MISSION.md): purpose, scope, and `owner` responsibilities.
|
|
155
156
|
2. [Tech stack](TECH_STACK.md): runtime technologies and development tools.
|
|
156
|
-
3. [Roadmap](
|
|
157
|
+
3. [Roadmap](ROADMAP.md): completed outcomes and planned work maintained in the repository.
|
|
157
158
|
4. [Changelog](CHANGELOG.md): meaningful codebase changes and breaking changes.
|
|
158
159
|
5. [Architecture decision records](ADR.md): architectural choices, context, consequences, and evidence.
|
package/ROADMAP.md
ADDED
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
This file is the source of truth for planned outcomes and recorded completion. Roadmap entries are not permission to implement them. The `owner` selects work and approves
|
|
4
|
+
its `specification` before implementation starts. Detailed requirements, technical decisions, and `acceptance criteria` belong in that `specification`.
|
|
5
|
+
|
|
6
|
+
Backlog items have no agreed order or date. The `owner` approves priority and scope changes.
|
|
7
|
+
|
|
8
|
+
Completed entries preserve recorded outcomes and evidence, which may describe behavior later changed. Completion requires `owner` acceptance, not only passing checks or
|
|
9
|
+
reaching `candidate-ready`. Linear onboarding and test issues are not project roadmap items and are omitted.
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
| ID | Item | Status |
|
|
14
|
+
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- |
|
|
15
|
+
| MAESTRO-6 | [Display specs in a browser](#maestro-6-display-specs-in-a-browser) | Backlog |
|
|
16
|
+
| MAESTRO-7 | [Route builder failures through owner escalations](#maestro-7-route-builder-failures-through-owner-escalations) | Completed |
|
|
17
|
+
| MAESTRO-8 | [Store escalations and owner decisions in builder handoffs](#maestro-8-store-escalations-and-owner-decisions-in-builder-handoffs) | Completed |
|
|
18
|
+
| MAESTRO-9 | [Format glossary terms consistently](#maestro-9-format-glossary-terms-consistently) | Completed |
|
|
19
|
+
| MAESTRO-10 | [Improve status presentation and activation feedback](#maestro-10-improve-status-presentation-and-activation-feedback) | Completed |
|
|
20
|
+
| MAESTRO-11 | [Introduce Maestro at activation](#maestro-11-introduce-maestro-at-activation) | Completed |
|
|
21
|
+
| MAESTRO-12 | [Verify code quality against AGENTS.md instructions](#maestro-12-verify-code-quality-against-agentsmd-instructions) | Completed |
|
|
22
|
+
| MAESTRO-13 | [Check subagent extensions at activation](#maestro-13-check-subagent-extensions-at-activation) | Completed |
|
|
23
|
+
| MAESTRO-14 | [Rename the test support directory](#maestro-14-rename-the-test-support-directory) | Completed |
|
|
24
|
+
| MAESTRO-15 | [Match handoff criteria to the approved spec](#maestro-15-match-handoff-criteria-to-the-approved-spec) | Completed |
|
|
25
|
+
| MAESTRO-16 | [Route finding-driven spec revisions through drafting-spec](#maestro-16-route-finding-driven-spec-revisions-through-drafting-spec) | Completed |
|
|
26
|
+
| MAESTRO-17 | [Keep acceptance criterion numbering continuous](#maestro-17-keep-acceptance-criterion-numbering-continuous) | Completed |
|
|
27
|
+
| MAESTRO-18 | [Record escalation resolutions when the spec changes](#maestro-18-record-escalation-resolutions-when-the-spec-changes) | Completed |
|
|
28
|
+
| MAESTRO-19 | [Guide initial configuration](#maestro-19-guide-initial-configuration) | Backlog |
|
|
29
|
+
| MAESTRO-20 | [Rename the npm package](#maestro-20-rename-the-npm-package) | Backlog |
|
|
30
|
+
| MAESTRO-21 | [Label acceptance criterion coverage](#maestro-21-label-acceptance-criterion-coverage) | Completed |
|
|
31
|
+
| MAESTRO-22 | [Avoid acceptance criteria already covered by tests](#maestro-22-avoid-acceptance-criteria-already-covered-by-tests) | Completed |
|
|
32
|
+
| MAESTRO-23 | [Change agent models before a builder run](#maestro-23-change-agent-models-before-a-builder-run) | Backlog |
|
|
33
|
+
| MAESTRO-24 | [Add a simplifier with one clear purpose per agent](#maestro-24-add-a-simplifier-with-one-clear-purpose-per-agent) | Completed |
|
|
34
|
+
| MAESTRO-25 | [Define workflow reconciliation](#maestro-25-define-workflow-reconciliation) | Backlog |
|
|
35
|
+
| MAESTRO-26 | [Exit Maestro mode automatically at workflow completion](#maestro-26-exit-maestro-mode-automatically-at-workflow-completion) | Implemented, acceptance not confirmed |
|
|
36
|
+
| MAESTRO-27 | [Make verifier and simplifier phases optional](#maestro-27-make-verifier-and-simplifier-phases-optional) | Backlog |
|
|
37
|
+
|
|
38
|
+
## Backlog
|
|
39
|
+
|
|
40
|
+
### MAESTRO-6: Display specs in a browser
|
|
41
|
+
|
|
42
|
+
#### Objective
|
|
43
|
+
|
|
44
|
+
Display the `spec` documents in a browser to improve readability and help the `owner` understand the proposed change, requirements, and `acceptance criteria`.
|
|
45
|
+
|
|
46
|
+
#### Completed when
|
|
47
|
+
|
|
48
|
+
The `owner` can read the `spec` documents in a browser with formatting designed for human comprehension.
|
|
49
|
+
|
|
50
|
+
### MAESTRO-19: Guide initial configuration
|
|
51
|
+
|
|
52
|
+
#### Objective
|
|
53
|
+
|
|
54
|
+
Help the `owner` create `Maestro` configuration through an interview. `Maestro` asks questions and writes the agreed configuration.
|
|
55
|
+
|
|
56
|
+
#### Completed when
|
|
57
|
+
|
|
58
|
+
The `owner` can create a valid project configuration without writing the file manually.
|
|
59
|
+
|
|
60
|
+
### MAESTRO-20: Rename the npm package
|
|
61
|
+
|
|
62
|
+
#### Objective
|
|
63
|
+
|
|
64
|
+
Rename `@emiliosp/pi-maestro` to `pi-maestro-sdd`. The `owner` installs the package under the new name. This item changes the package identity, not the development
|
|
65
|
+
workflow.
|
|
66
|
+
|
|
67
|
+
Compatibility with installations under the old name must be decided in the `specification`. No `specification` is approved yet.
|
|
68
|
+
|
|
69
|
+
#### Completed when
|
|
70
|
+
|
|
71
|
+
Package metadata and installation documentation use the new name. The package is available under that name.
|
|
72
|
+
|
|
73
|
+
### MAESTRO-23: Change agent models before a builder run
|
|
74
|
+
|
|
75
|
+
#### Objective
|
|
76
|
+
|
|
77
|
+
Let the `owner` change the `builder` and `verifier` models during `spec` preparation and the `ready-for-builder` phase. The selected models apply to subsequent `runs`.
|
|
78
|
+
|
|
79
|
+
#### Completed when
|
|
80
|
+
|
|
81
|
+
The `owner` can select available models in those phases. `Maestro` uses the selections.
|
|
82
|
+
|
|
83
|
+
### MAESTRO-25: Define workflow reconciliation
|
|
84
|
+
|
|
85
|
+
#### Objective
|
|
86
|
+
|
|
87
|
+
Explore how `Maestro` can reconcile saved `artifacts` and workflow state. The recovery scope is not yet defined.
|
|
88
|
+
|
|
89
|
+
#### Completed when
|
|
90
|
+
|
|
91
|
+
Not yet defined. The `owner` must define the intended outcome, recovery boundaries, and completion condition before this item can move forward.
|
|
92
|
+
|
|
93
|
+
### MAESTRO-27: Make verifier and simplifier phases optional
|
|
94
|
+
|
|
95
|
+
#### Objective
|
|
96
|
+
|
|
97
|
+
Make the `builder` the only required agent phase. Let the `owner` independently enable or disable the `verifier` and `simplifier` phases.
|
|
98
|
+
|
|
99
|
+
This request concerns agent execution phases, not removal of `spec` preparation or approval.
|
|
100
|
+
|
|
101
|
+
#### Completed when
|
|
102
|
+
|
|
103
|
+
1. The `builder` remains mandatory.
|
|
104
|
+
2. The `owner` can select any of these combinations: `builder` only; `builder` and `verifier`; `builder` and `simplifier`; or all three.
|
|
105
|
+
3. Disabled phases are not delegated and do not block workflow completion.
|
|
106
|
+
4. The workflow reaches `candidate-ready` after the selected phases complete and any required `owner` decisions are resolved.
|
|
107
|
+
5. The final summary clearly identifies skipped phases and does not describe skipped verification as passed.
|
|
108
|
+
|
|
109
|
+
#### Decisions to define in the spec
|
|
110
|
+
|
|
111
|
+
1. Where and when phase selection is configured.
|
|
112
|
+
2. Default selections.
|
|
113
|
+
3. Whether selections can change after a workflow starts.
|
|
114
|
+
|
|
115
|
+
#### Context
|
|
116
|
+
|
|
117
|
+
[MAESTRO-24](#maestro-24-add-a-simplifier-with-one-clear-purpose-per-agent) introduced the `simplifier`. Its existing Git-unavailable skip is not an explicit `owner`
|
|
118
|
+
choice. This issue adds independent optionality for both post-`builder` agent phases.
|
|
119
|
+
|
|
120
|
+
## Implemented, acceptance not confirmed
|
|
121
|
+
|
|
122
|
+
### MAESTRO-26: Exit Maestro mode automatically at workflow completion
|
|
123
|
+
|
|
124
|
+
Implemented in `0.13.0`. `Maestro` automatically turns off after successfully delivering the final summary of a completed workflow, including when Git is unavailable and
|
|
125
|
+
simplification is skipped. Live tools, status, instructions, and active `spec` selection are cleared; saved workflow files and other extensions remain unchanged.
|
|
126
|
+
Intermediate phases and interrupted workflows do not trigger automatic exit.
|
|
127
|
+
|
|
128
|
+
Linear marks this item Done, but its description still says final `owner` acceptance is pending. Acceptance is not inferred from that status or the release.
|
|
129
|
+
|
|
130
|
+
#### Evidence
|
|
131
|
+
|
|
132
|
+
[Changelog](CHANGELOG.md#0130), [merged PR #43](https://github.com/emilioSp/pi-maestro/pull/43),
|
|
133
|
+
[specification](.specs/20261030-145712-automatically-exit-maestro-mode-at-workflow-completion/spec.md), and
|
|
134
|
+
[original issue](https://linear.app/emilio-spatola/issue/MAESTRO-26/feat-exit-maestro-mode-automatically-at-workflow-completion).
|
|
135
|
+
|
|
136
|
+
## Completed
|
|
137
|
+
|
|
138
|
+
These entries were recorded as Done in Linear. Their historical verification evidence does not independently establish final `owner` acceptance.
|
|
139
|
+
|
|
140
|
+
### MAESTRO-7: Route builder failures through owner escalations
|
|
141
|
+
|
|
142
|
+
Route reportable `builder` problems through `owner` `escalations` instead of a terminal failure phase.
|
|
143
|
+
|
|
144
|
+
Released in `0.9.0`. The `builder` reports only `done` or `escalation`. Reportable technical problems use the existing `owner` `escalation` process. Individual `probe`
|
|
145
|
+
results retain `failed`. Execution errors and missing or invalid saved results still stop the workflow without automatic recovery.
|
|
146
|
+
|
|
147
|
+
All 8 `acceptance criteria` passed with no `verifier` `findings`. The saved workflow reached `candidate-ready`.
|
|
148
|
+
|
|
149
|
+
#### Evidence
|
|
150
|
+
|
|
151
|
+
[Specification](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-101454-route-builder-failures-through-owner-escalations/spec.md),
|
|
152
|
+
[verifier report](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-101454-route-builder-failures-through-owner-escalations/handoffs/verifier/V1.json),
|
|
153
|
+
and [merged PR #32](https://github.com/emilioSp/pi-maestro/pull/32).
|
|
154
|
+
|
|
155
|
+
### MAESTRO-8: Store escalations and owner decisions in builder handoffs
|
|
156
|
+
|
|
157
|
+
Keep `escalation` questions and `owner` answers together in numbered `builder` `handoffs`.
|
|
158
|
+
|
|
159
|
+
Numbered `builder` `handoffs` contain multiple `escalation` questions and their `owner` resolutions. The `owner` resolves all current questions in one batch. Earlier
|
|
160
|
+
`handoffs` remain available as history. All 10 `acceptance criteria` passed with no `verifier` `findings`. The saved workflow reached `candidate-ready`.
|
|
161
|
+
|
|
162
|
+
#### Evidence
|
|
163
|
+
|
|
164
|
+
[Specification](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261008-132344-store-escalations-in-builder-handoffs/spec.md),
|
|
165
|
+
[verifier report](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261008-132344-store-escalations-in-builder-handoffs/handoffs/verifier/V1.json),
|
|
166
|
+
and [merged PR #27](https://github.com/emilioSp/pi-maestro/pull/27).
|
|
167
|
+
|
|
168
|
+
### MAESTRO-9: Format glossary terms consistently
|
|
169
|
+
|
|
170
|
+
Apply glossary formatting across documentation and record its exclusions.
|
|
171
|
+
|
|
172
|
+
Applied glossary formatting across the documentation and recorded its exclusions in `AGENTS.md` and the documentation audit skill. The approved change document uses the
|
|
173
|
+
term `spec`. The `owner` confirmed completion.
|
|
174
|
+
|
|
175
|
+
#### Evidence
|
|
176
|
+
|
|
177
|
+
[Glossary](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/docs/glossary.md) and
|
|
178
|
+
[workflow documentation](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/docs/workflow.md).
|
|
179
|
+
|
|
180
|
+
### MAESTRO-10: Improve status presentation and activation feedback
|
|
181
|
+
|
|
182
|
+
Show clearer status and configured agent details without adding model context.
|
|
183
|
+
|
|
184
|
+
The status bar uses phase icons, theme colors, and shortened `spec` IDs. Successful activation shows the configured `builder` and `verifier` settings without adding the
|
|
185
|
+
notice to session history or model context. All 12 `acceptance criteria` passed with no `verifier` `findings`. The saved workflow reached `candidate-ready`.
|
|
186
|
+
|
|
187
|
+
#### Evidence
|
|
188
|
+
|
|
189
|
+
[Specification](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261007-170438-update-maestro-status-bar-with-agent-models-theme-colors-and-phase-icons/spec.md),
|
|
190
|
+
[verifier report](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261007-170438-update-maestro-status-bar-with-agent-models-theme-colors-and-phase-icons/handoffs/verifier/V1.json),
|
|
191
|
+
and [merged PR #26](https://github.com/emilioSp/pi-maestro/pull/26).
|
|
192
|
+
|
|
193
|
+
### MAESTRO-11: Introduce Maestro at activation
|
|
194
|
+
|
|
195
|
+
Introduce `Maestro` at activation and load relevant documentation only when needed.
|
|
196
|
+
|
|
197
|
+
Implemented in `0.9.1`. Successful activation introduces `Maestro` and invites the `owner` to ask how it works. The UI-only notice retains the configured agent details
|
|
198
|
+
and does not add session history or start a model request.
|
|
199
|
+
|
|
200
|
+
Active instructions identify absolute paths to the installed README and documentation directory. `Maestro` reads relevant documentation on demand without automatically
|
|
201
|
+
loading its contents.
|
|
202
|
+
|
|
203
|
+
All 6 `acceptance criteria` passed with no `verifier` `findings`. The saved workflow reached `candidate-ready`.
|
|
204
|
+
|
|
205
|
+
#### Evidence
|
|
206
|
+
|
|
207
|
+
[Specification](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-171954-introduce-maestro-at-activation/spec.md),
|
|
208
|
+
[verifier report](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-171954-introduce-maestro-at-activation/handoffs/verifier/V1.json),
|
|
209
|
+
and [merged PR #33](https://github.com/emilioSp/pi-maestro/pull/33).
|
|
210
|
+
|
|
211
|
+
### MAESTRO-12: Verify code quality against AGENTS.md instructions
|
|
212
|
+
|
|
213
|
+
Historical outcome: the extra review described below was removed by [MAESTRO-24](#maestro-24-add-a-simplifier-with-one-clear-purpose-per-agent) in `0.11.0`.
|
|
214
|
+
|
|
215
|
+
Require the `verifier` to review affected code against applicable `AGENTS.md` code-quality directives.
|
|
216
|
+
|
|
217
|
+
Implemented in `0.9.2`. `Verifier` guidance now requires code-quality review only for code affected by the approved change when applicable `AGENTS.md` directives exist.
|
|
218
|
+
All existing duties remain unchanged, including independent verification of every `acceptance criterion`.
|
|
219
|
+
|
|
220
|
+
Instruction-violation `findings` identify the instruction file, quote the rule, and explain the violating code through existing evidence fields. Missing files or
|
|
221
|
+
code-quality directives cause only the added review to be skipped. Personal style preferences are not requirements.
|
|
222
|
+
|
|
223
|
+
All 5 `acceptance criteria` passed through independent inspection of the written guidance, with no `verifier` `findings`. No additional model trials were performed. The
|
|
224
|
+
saved workflow reached `candidate-ready`.
|
|
225
|
+
|
|
226
|
+
#### Evidence
|
|
227
|
+
|
|
228
|
+
[Specification](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-185941-verify-code-quality-against-agents-md-instructions/spec.md),
|
|
229
|
+
[verifier report](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-185941-verify-code-quality-against-agents-md-instructions/handoffs/verifier/V1.json),
|
|
230
|
+
and [merged PR #34](https://github.com/emilioSp/pi-maestro/pull/34).
|
|
231
|
+
|
|
232
|
+
### MAESTRO-13: Check subagent extensions at activation
|
|
233
|
+
|
|
234
|
+
Require a successful parent `pi-subagents` availability reply before activation.
|
|
235
|
+
|
|
236
|
+
Implemented in `0.9.3`. Activation requires a matching successful version 1 `ping` reply from the parent `pi-subagents` extension within 2000 ms. A failed or invalid
|
|
237
|
+
reply, emission error, or timeout prevents activation and reports the installation requirement. The check starts no agent and makes no model request. It confirms parent
|
|
238
|
+
extension availability, not child execution readiness.
|
|
239
|
+
|
|
240
|
+
All 7 `acceptance criteria` passed using controlled replies and code inspection, with no `verifier` `findings`. The saved workflow reached `candidate-ready`.
|
|
241
|
+
|
|
242
|
+
A later integration test requested by the `owner` directly checks the environment check's failed-reply error. This test addition is outside the completed independent
|
|
243
|
+
verification.
|
|
244
|
+
|
|
245
|
+
#### Evidence
|
|
246
|
+
|
|
247
|
+
[Specification](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-194407-check-pi-subagents-availability-with-ping-at-activation/spec.md),
|
|
248
|
+
[verifier report](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-194407-check-pi-subagents-availability-with-ping-at-activation/handoffs/verifier/V1.json),
|
|
249
|
+
and [merged PR #35](https://github.com/emilioSp/pi-maestro/pull/35).
|
|
250
|
+
|
|
251
|
+
### MAESTRO-14: Rename the test support directory
|
|
252
|
+
|
|
253
|
+
Rename `test/` to `tests/` and update affected references.
|
|
254
|
+
|
|
255
|
+
Renamed `test/` to `tests/` at the owner's request. Updated imports, fixture paths, lint configuration, and project instructions. This follows the global instruction to
|
|
256
|
+
keep fixtures under `tests/fixtures`. Source tests remain next to their source files. Historical `handoffs` retain their recorded paths.
|
|
257
|
+
|
|
258
|
+
#### Evidence
|
|
259
|
+
|
|
260
|
+
[Test support](https://github.com/emilioSp/pi-maestro/tree/839ab9eb9753df22804d750657a616a9959c2c47/tests/support/),
|
|
261
|
+
[fixtures](https://github.com/emilioSp/pi-maestro/tree/839ab9eb9753df22804d750657a616a9959c2c47/tests/fixtures/), and
|
|
262
|
+
[lint configuration](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.oxlintrc.json).
|
|
263
|
+
|
|
264
|
+
### MAESTRO-15: Match handoff criteria to the approved spec
|
|
265
|
+
|
|
266
|
+
Require every approved `spec` criterion ID in each submitted `builder` and `verifier` `handoff`.
|
|
267
|
+
|
|
268
|
+
Implemented in `0.9.5` with the narrower scope approved by the `owner`. Both `handoff` submissions require every `acceptance criterion` ID from the approved `spec` before
|
|
269
|
+
saving a report or changing phase. Extra report IDs remain allowed. Existing report validation is unchanged, and no new check rejects duplicate `spec` IDs.
|
|
270
|
+
|
|
271
|
+
Both `acceptance criteria` passed independent verification with no `findings`. The saved workflow reached `candidate-ready`.
|
|
272
|
+
|
|
273
|
+
Later changes requested by the `owner` extracted the shared check and replaced repeated integration scenarios with unit tests. One missing-ID integration test remains per
|
|
274
|
+
role. These changes are outside the completed independent verification. The final `npm run check` passed all 227 tests and coverage thresholds.
|
|
275
|
+
|
|
276
|
+
#### Evidence
|
|
277
|
+
|
|
278
|
+
[Specification](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-211629-match-handoff-criteria-to-the-approved-spec/spec.md),
|
|
279
|
+
[verifier report](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-211629-match-handoff-criteria-to-the-approved-spec/handoffs/verifier/V1.json),
|
|
280
|
+
and [merged PR #37](https://github.com/emilioSp/pi-maestro/pull/37).
|
|
281
|
+
|
|
282
|
+
### MAESTRO-16: Route finding-driven spec revisions through drafting-spec
|
|
283
|
+
|
|
284
|
+
Record `finding` decisions before `spec` revision and require renewed `GREEN FLAG` before another `builder` `run`.
|
|
285
|
+
|
|
286
|
+
Implemented the approved revision route. `Maestro` records every current `finding` decision before returning to `drafting-spec` when revision is required. The `owner`
|
|
287
|
+
reviews the same revised `spec` and gives renewed `GREEN FLAG` before separate approval and another `builder` `run`. Revision takes priority in mixed batches. Direct
|
|
288
|
+
approval from `finding-decisions` is rejected.
|
|
289
|
+
|
|
290
|
+
Later event naming cleanup identifies `builder` and `owner` actions explicitly. Both revision routes use `OWNER_REQUEST_SPEC_REVISION` without changing the phase flow.
|
|
291
|
+
Batch resolution uses `RESOLVE_ESCALATIONS`, and the status label refers to `escalations` in the plural. The saved decision phases are named `escalation-decisions` and
|
|
292
|
+
`finding-decisions`.
|
|
293
|
+
|
|
294
|
+
#### Evidence
|
|
295
|
+
|
|
296
|
+
[Specification](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261015-154812-route-finding-driven-spec-revisions-through-drafting-spec/spec.md)
|
|
297
|
+
and
|
|
298
|
+
[resolution integration tests](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/src/tools/main/resolve-findings.integration.test.ts).
|
|
299
|
+
|
|
300
|
+
### MAESTRO-17: Keep acceptance criterion numbering continuous
|
|
301
|
+
|
|
302
|
+
Reject gaps in `acceptance criterion` numbering before approving a `spec`.
|
|
303
|
+
|
|
304
|
+
Implemented in `0.9.4`. `Spec` approval rejects numbered `acceptance criterion` headings that do not start at `AC1` and continue without gaps. Rejection leaves saved
|
|
305
|
+
files unchanged.
|
|
306
|
+
|
|
307
|
+
`Maestro` corrects numbering and affected references without changing criterion order or requirements, then retries with the existing `GREEN FLAG`. No additional `owner`
|
|
308
|
+
approval is required.
|
|
309
|
+
|
|
310
|
+
All 3 `acceptance criteria` passed with no `verifier` `findings`. The saved workflow reached `candidate-ready`.
|
|
311
|
+
|
|
312
|
+
#### Evidence
|
|
313
|
+
|
|
314
|
+
[Specification](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-202811-check-acceptance-criterion-numbering-before-builder-execution/spec.md),
|
|
315
|
+
[verifier report](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261013-202811-check-acceptance-criterion-numbering-before-builder-execution/handoffs/verifier/V1.json),
|
|
316
|
+
and [merged PR #36](https://github.com/emilioSp/pi-maestro/pull/36).
|
|
317
|
+
|
|
318
|
+
### MAESTRO-18: Record escalation resolutions when the spec changes
|
|
319
|
+
|
|
320
|
+
#### Objective
|
|
321
|
+
|
|
322
|
+
Save every current `escalation` answer in the original `builder` `handoff`, whether the `spec` stays unchanged or requires revision. Each `resolution` records the owner's
|
|
323
|
+
chosen solution and reason. A decision requiring revision also identifies the `escalation` and describes the agreed `spec` change.
|
|
324
|
+
|
|
325
|
+
#### Agreed flow
|
|
326
|
+
|
|
327
|
+
`Maestro` records the complete decision batch through `maestro_resolve_escalations` before changing phase.
|
|
328
|
+
|
|
329
|
+
| Decision | Next phase and action |
|
|
330
|
+
| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
331
|
+
| No `spec` change | `escalation-decisions` → `ready-for-builder`. The `builder` continues under the approved `spec`, without renewed approval. |
|
|
332
|
+
| `Spec` change required | `escalation-decisions` → `drafting-spec`. The `owner` and `Maestro` revise and review the same `spec`. |
|
|
333
|
+
| Revised `spec` receives renewed `GREEN FLAG` | `drafting-spec` → `ready-for-builder` through separate `maestro_mark_spec_ready` approval. |
|
|
334
|
+
|
|
335
|
+
Direct `spec` approval from `escalation-decisions` is rejected. Recording answers does not move to `ready-for-verifier`; that phase requires a completed `builder` `pass`.
|
|
336
|
+
|
|
337
|
+
#### Implementation boundaries
|
|
338
|
+
|
|
339
|
+
Reuse the existing resolution operation and `handoff` fields. Do not add a parallel decision store, tool, or workflow phase. Define both resolution transitions explicitly
|
|
340
|
+
in `src/workflow/transitions.ts` and apply them through `transitionWorkflow`. Direct phase assignment elsewhere is banned. Preserve initial `spec` approval, `verifier`
|
|
341
|
+
`finding` decisions, existing batch validation, and historical `handoffs`.
|
|
342
|
+
|
|
343
|
+
#### Completed when
|
|
344
|
+
|
|
345
|
+
Saved `resolutions`, workflow phases, tool results, agent instructions, and human documentation follow the agreed flow. Verification checks both observable behavior and
|
|
346
|
+
use of the central transition definitions for each resolution branch. Passing behavior tests alone is not enough. The new `spec` includes coverage labels and omits
|
|
347
|
+
`acceptance criteria` already covered by tests of the same scenario.
|
|
348
|
+
|
|
349
|
+
### MAESTRO-21: Label acceptance criterion coverage
|
|
350
|
+
|
|
351
|
+
Historical outcome: the `Coverage` field described below was removed in `0.12.0`. See [changelog](CHANGELOG.md#0120).
|
|
352
|
+
|
|
353
|
+
Label each `acceptance criterion` as success, failure, or unchanged behavior.
|
|
354
|
+
|
|
355
|
+
Implemented with [MAESTRO-22](#maestro-22-avoid-acceptance-criteria-already-covered-by-tests) as one task, as selected by the `owner`. The `spec` template and `Maestro`
|
|
356
|
+
guidance require one `Coverage` label per `acceptance criterion`:
|
|
357
|
+
|
|
358
|
+
| Label | Purpose |
|
|
359
|
+
| ----------- | -------------------------------------------- |
|
|
360
|
+
| `success` | A valid action produces the required result. |
|
|
361
|
+
| `failure` | An invalid action is correctly rejected. |
|
|
362
|
+
| `unchanged` | The change preserves existing behavior. |
|
|
363
|
+
|
|
364
|
+
Use `unchanged` when the criterion explicitly checks behavior that the change must preserve. Labels describe scenarios, not test outcomes. A `failure` scenario passes
|
|
365
|
+
when the invalid action is correctly rejected. A `spec` does not need all three categories. `Maestro` includes labels when presenting criteria to the `owner` and checks
|
|
366
|
+
them against scenarios and `expected results` during review. Approval validation and `handoff` formats remain unchanged.
|
|
367
|
+
|
|
368
|
+
The existing creation integration test now checks that the generated `spec` includes the coverage field. The final `npm run check` passed all 238 tests and coverage
|
|
369
|
+
thresholds. No model trials were performed.
|
|
370
|
+
|
|
371
|
+
#### Evidence
|
|
372
|
+
|
|
373
|
+
[Spec template](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/templates/spec.md),
|
|
374
|
+
[Maestro guidance](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/src/maestro/instructions/getMaestroInstructions.ts),
|
|
375
|
+
[creation integration test](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/src/specs/create.integration.test.ts), and
|
|
376
|
+
[workflow documentation](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/docs/workflow.md#acceptance-criteria).
|
|
377
|
+
|
|
378
|
+
### MAESTRO-22: Avoid acceptance criteria already covered by tests
|
|
379
|
+
|
|
380
|
+
Omit `acceptance criteria` whose exact scenarios already have test coverage.
|
|
381
|
+
|
|
382
|
+
Implemented with [MAESTRO-21](#maestro-21-label-acceptance-criterion-coverage). `Maestro` inspects existing tests before writing `acceptance criteria`. It omits a
|
|
383
|
+
criterion only when a test covers the same starting conditions, action, and `expected result`. Partial or uncertain coverage does not justify omission. Similar tests do
|
|
384
|
+
not count.
|
|
385
|
+
|
|
386
|
+
During `spec` review, `Maestro` removes criteria whose exact scenarios already have test coverage. It keeps numbering continuous from `AC1` and updates affected
|
|
387
|
+
references. Required behavior remains documented in the requirements and constraints. The same rules apply during `spec` revisions. No automatic approval check was added.
|
|
388
|
+
|
|
389
|
+
Verification consisted of inspecting the written guidance and running `npm run check`. No model trials were performed.
|
|
390
|
+
|
|
391
|
+
#### Evidence
|
|
392
|
+
|
|
393
|
+
[Maestro guidance](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/src/maestro/instructions/getMaestroInstructions.ts),
|
|
394
|
+
[spec template](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/templates/spec.md), and
|
|
395
|
+
[workflow documentation](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/docs/workflow.md#acceptance-criteria).
|
|
396
|
+
|
|
397
|
+
### MAESTRO-24: Add a simplifier with one clear purpose per agent
|
|
398
|
+
|
|
399
|
+
Run the `simplifier` after accepted verification, with a Git-only file scope and separate report.
|
|
400
|
+
|
|
401
|
+
Completed under the
|
|
402
|
+
[specification](https://github.com/emilioSp/pi-maestro/blob/839ab9eb9753df22804d750657a616a9959c2c47/.specs/20261016-090319-add-a-dedicated-simplifier-after-verification/spec.md).
|
|
403
|
+
The `owner` confirmed completion. The `builder` implements the approved `spec`. The `verifier` checks its `acceptance criteria`. The `simplifier` refactors accepted code
|
|
404
|
+
for clarity. The extra code-quality review introduced in [MAESTRO-12](#maestro-12-verify-code-quality-against-agentsmd-instructions) is removed from the verifier's
|
|
405
|
+
instructions.
|
|
406
|
+
|
|
407
|
+
Successful verification and rejection of all current `findings` save `simplifier-running`. `Maestro` calls `maestro_run_simplifier` without another approval or
|
|
408
|
+
verification cycle. Only that tool checks Git readiness. If Git is unavailable, it warns and saves `candidate-ready` without delegation or a `simplifier` `handoff`.
|
|
409
|
+
|
|
410
|
+
The `simplifier` selects all uncommitted code changes, including pre-existing staged, unstaged, and untracked files. It preserves observable behavior and the accepted
|
|
411
|
+
check baseline. Rejected `findings` remain rejected, not passed. Required caller updates can include initially unchanged files. Unrelated refactoring, index changes, and
|
|
412
|
+
automatic commits are excluded.
|
|
413
|
+
|
|
414
|
+
A completed `pass` saves the fixed, unnumbered `handoffs/simplifier/S.json`, then saves `candidate-ready`. The report contains refactored files, a summary, and notes. No
|
|
415
|
+
refactoring is required when selected code is already clear. Maestro's final summary separates this report from independent `verifier` evidence.
|
package/docs/configuration.md
CHANGED
|
@@ -39,19 +39,22 @@ For example, if Pi starts in `/work/app/src`, `Maestro` reads `/work/app/src/.pi
|
|
|
39
39
|
| `version` | Yes, when the file exists | `1.0.0` | Configuration format version. Only `1.0.0` is supported. |
|
|
40
40
|
| `specDirectory` | No | `.specs` | Relative path below the project root. |
|
|
41
41
|
| `builder` | No | `Builder` defaults | Overrides supported `builder` fields. |
|
|
42
|
-
| `builder.model` | No | `openai-codex/gpt-5.6-luna` |
|
|
42
|
+
| `builder.model` | No | `openai-codex/gpt-5.6-luna` | Model string passed unchanged to Pi. |
|
|
43
43
|
| `builder.thinking` | No | `max` | One supported thinking level. |
|
|
44
44
|
| `builder.timeoutMinutes` | No | `60` | Integer from `1` to `1440`. Applies to each `builder` `run`. |
|
|
45
45
|
| `verifier` | No | `Verifier` defaults | Overrides supported `verifier` fields. |
|
|
46
|
-
| `verifier.model` | No | `openai-codex/gpt-6.1-sol` |
|
|
46
|
+
| `verifier.model` | No | `openai-codex/gpt-6.1-sol` | Model string passed unchanged to Pi. |
|
|
47
47
|
| `verifier.thinking` | No | `high` | One supported thinking level. |
|
|
48
48
|
| `verifier.timeoutMinutes` | No | `60` | Integer from `1` to `1440`. Applies to each `verifier` `run`. |
|
|
49
49
|
| `simplifier` | No | `Simplifier` defaults | Overrides supported `simplifier` fields. |
|
|
50
|
-
| `simplifier.model` | No | `openai-codex/gpt-6.1-sol` |
|
|
50
|
+
| `simplifier.model` | No | `openai-codex/gpt-6.1-sol` | Model string passed unchanged to Pi. |
|
|
51
51
|
| `simplifier.thinking` | No | `high` | One supported thinking level. |
|
|
52
52
|
| `simplifier.timeoutMinutes` | No | `60` | Integer from `1` to `1440`. Applies to each `simplifier` `run`. |
|
|
53
53
|
|
|
54
|
-
Model
|
|
54
|
+
Model values use the full `provider/model` identifier supplied by Pi's model registry, such as `openrouter/~openai/gpt-mini-latest`. Model IDs may contain additional
|
|
55
|
+
slashes. `Maestro` does not apply a separate format rule; it matches the complete identifier against Pi's available models and passes it unchanged through `pi-subagents`.
|
|
56
|
+
|
|
57
|
+
`Maestro` accepts these thinking levels:
|
|
55
58
|
|
|
56
59
|
```text
|
|
57
60
|
off
|
|
@@ -95,7 +98,8 @@ For example, `specDirectory: "planning/specs"` places `specs` in `<project-root>
|
|
|
95
98
|
|
|
96
99
|
## Model access
|
|
97
100
|
|
|
98
|
-
`Maestro` checks all three configured models
|
|
101
|
+
During activation, `Maestro` checks all three configured models against `context.modelRegistry.getAvailable()`. Pi's registry is the source of truth for model
|
|
102
|
+
availability; `Maestro` does not maintain a separate model list or authentication check. A missing model stops activation and identifies the full configured identifier.
|
|
99
103
|
|
|
100
|
-
|
|
101
|
-
Agent names and context are described in [Subagent integration](subagent-integration.md#roles-and-context).
|
|
104
|
+
The `owner` can correct the identifier or authenticate the provider in Pi, then retry `/maestro`. Authentication or provider errors during delegation still appear as
|
|
105
|
+
`run` failures. Agent names and context are described in [Subagent integration](subagent-integration.md#roles-and-context).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@emiliosp/pi-maestro",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "A spec-driven multiagent development workflow for Pi.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"orchestration",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"docs/",
|
|
29
29
|
"MISSION.md",
|
|
30
30
|
"TECH_STACK.md",
|
|
31
|
+
"ROADMAP.md",
|
|
31
32
|
"CHANGELOG.md",
|
|
32
33
|
"ADR.md",
|
|
33
34
|
"README.md",
|
|
@@ -39,7 +39,7 @@ const formatError = (error: SchemaValidationError): string => {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
if (path.endsWith('model')) {
|
|
42
|
-
return `Invalid model
|
|
42
|
+
return `Invalid model at "${path}": expected a string.`;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
if (path === 'builder' || path === 'verifier' || path === 'simplifier') {
|
package/src/config/schema.ts
CHANGED
|
@@ -23,8 +23,6 @@ export const THINKING_LEVELS = {
|
|
|
23
23
|
|
|
24
24
|
export type ThinkingLevel = (typeof THINKING_LEVELS)[keyof typeof THINKING_LEVELS];
|
|
25
25
|
|
|
26
|
-
export const MODEL_PATTERN = '^[^/\\s]+/[^/\\s]+$';
|
|
27
|
-
|
|
28
26
|
export const SUPPORTED_CONFIG_VERSION = '1.0.0';
|
|
29
27
|
|
|
30
28
|
export const MIN_TIMEOUT_MINUTES = 1;
|
|
@@ -43,7 +41,7 @@ export const ThinkingSchema = Type.Union([
|
|
|
43
41
|
|
|
44
42
|
export const PartialAgentConfigSchema = Type.Object(
|
|
45
43
|
{
|
|
46
|
-
model: Type.Optional(Type.String(
|
|
44
|
+
model: Type.Optional(Type.String()),
|
|
47
45
|
thinking: Type.Optional(ThinkingSchema),
|
|
48
46
|
timeoutMinutes: Type.Optional(
|
|
49
47
|
Type.Integer({
|
|
@@ -68,7 +66,7 @@ export const MaestroConfigInputSchema = Type.Object(
|
|
|
68
66
|
|
|
69
67
|
export const ResolvedAgentConfigSchema = Type.Object(
|
|
70
68
|
{
|
|
71
|
-
model: Type.String(
|
|
69
|
+
model: Type.String(),
|
|
72
70
|
thinking: ThinkingSchema,
|
|
73
71
|
timeoutMinutes: Type.Integer({
|
|
74
72
|
minimum: MIN_TIMEOUT_MINUTES,
|
|
@@ -57,9 +57,7 @@ function assertModelsAvailable({ context, config }: AssertModelsAvailableInput):
|
|
|
57
57
|
const availableModels = context.modelRegistry.getAvailable();
|
|
58
58
|
|
|
59
59
|
for (const model of [config.builder.model, config.verifier.model, config.simplifier.model]) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (!availableModels.some((entry) => entry.provider === provider && entry.id === id)) {
|
|
60
|
+
if (!availableModels.some((entry) => `${entry.provider}/${entry.id}` === model)) {
|
|
63
61
|
throw new Error(`Configured model is not available: "${model}".`);
|
|
64
62
|
}
|
|
65
63
|
}
|