@mmerterden/multi-agent-pipeline 12.10.0 → 13.0.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/CHANGELOG.md +179 -0
- package/README.md +24 -7
- package/index.js +5 -2
- package/install/_codex-agents.mjs +211 -0
- package/install/_codex-instructions.mjs +33 -0
- package/install/_managed-block.mjs +99 -0
- package/install/codex.mjs +478 -0
- package/install/copilot.mjs +34 -80
- package/install/index.mjs +25 -9
- package/install/templates/codex-instructions.md +45 -0
- package/package.json +5 -3
- package/pipeline/claude-md-template.md +1 -0
- package/pipeline/commands/multi-agent/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev/SKILL.md +31 -6
- package/pipeline/commands/multi-agent/finish/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/language/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/setup/SKILL.md +69 -2
- package/pipeline/commands/multi-agent/sync/SKILL.md +128 -5
- package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +219 -0
- package/pipeline/commands/multi-agent/update/SKILL.md +7 -4
- package/pipeline/multi-agent-refs/_input-parser.md +1 -1
- package/pipeline/multi-agent-refs/cross-cli-contract.md +51 -17
- package/pipeline/multi-agent-refs/features/model-fallback.md +29 -0
- package/pipeline/multi-agent-refs/features/review-multi-repo.md +1 -1
- package/pipeline/multi-agent-refs/phases/log-format.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +14 -2
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +36 -5
- package/pipeline/multi-agent-refs/progress-contract.md +1 -1
- package/pipeline/multi-agent-refs/tracker-contract.md +17 -1
- package/pipeline/schemas/prefs.schema.json +296 -62
- package/pipeline/schemas/reviewer-output.schema.json +1 -1
- package/pipeline/schemas/triage-output.schema.json +1 -1
- package/pipeline/scripts/cost-table.json +15 -1
- package/pipeline/scripts/output-quality-check.sh +34 -0
- package/pipeline/scripts/phase-tracker.sh +79 -1
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +25 -10
- package/pipeline/scripts/uninstall.mjs +105 -9
- package/pipeline/scripts/update-check.sh +2 -1
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +48 -1
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +87 -6
- package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +120 -0
|
@@ -10,11 +10,21 @@
|
|
|
10
10
|
"description": "Documentation-only blocks shipped in preferences-template.json (_figmaConfigTemplate, _derivedSkillSourcesTemplate, _devToolkitTemplate). Copy-paste examples, never read by the pipeline."
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
|
-
"required": [
|
|
13
|
+
"required": [
|
|
14
|
+
"schemaVersion",
|
|
15
|
+
"global",
|
|
16
|
+
"projects"
|
|
17
|
+
],
|
|
14
18
|
"properties": {
|
|
15
19
|
"schemaVersion": {
|
|
16
20
|
"type": "string",
|
|
17
|
-
"enum": [
|
|
21
|
+
"enum": [
|
|
22
|
+
"2.0.0",
|
|
23
|
+
"2.1.0",
|
|
24
|
+
"2.2.0",
|
|
25
|
+
"2.3.0",
|
|
26
|
+
"2.4.0"
|
|
27
|
+
],
|
|
18
28
|
"description": "v2.0.0: pre-v3.7. v2.1.0: v3.7+ adds identities[].servicePatMap, platformIdentityRouting, recentGroups, recentBranches, serviceStatus, settings, expanded keychainMapping. v2.2.0: v6.0.0 formalizes v5.7 / v5.8 additions (reportChannels, reportContent with technicalAnalysis, wikiScope, autopilotReportTimeoutSeconds) that had been running as 2.1.0 sub-migrations without a proper version bump."
|
|
19
29
|
},
|
|
20
30
|
"global": {
|
|
@@ -27,7 +37,10 @@
|
|
|
27
37
|
"items": {
|
|
28
38
|
"type": "object",
|
|
29
39
|
"additionalProperties": false,
|
|
30
|
-
"required": [
|
|
40
|
+
"required": [
|
|
41
|
+
"name",
|
|
42
|
+
"email"
|
|
43
|
+
],
|
|
31
44
|
"properties": {
|
|
32
45
|
"name": {
|
|
33
46
|
"type": "string"
|
|
@@ -96,69 +109,151 @@
|
|
|
96
109
|
"description": "Maps logical token names to actual Keychain item names. Pipeline looks up tokens via `security find-generic-password -s <mapped-name>` (or `pipeline/lib/credential-store.sh get` cross-platform). Covered keys: jira, bitbucket, bitbucket_token, bitbucket_user, github, confluence, figma, figma_pat, figma_user, figma_mcp, fortify, graylog, firebase, jenkins, npm, claude_oauth_token, claude_oauth_token_fallback.",
|
|
97
110
|
"properties": {
|
|
98
111
|
"jira": {
|
|
99
|
-
"type": [
|
|
112
|
+
"type": [
|
|
113
|
+
"string",
|
|
114
|
+
"null"
|
|
115
|
+
]
|
|
100
116
|
},
|
|
101
117
|
"bitbucket": {
|
|
102
|
-
"type": [
|
|
118
|
+
"type": [
|
|
119
|
+
"string",
|
|
120
|
+
"null"
|
|
121
|
+
],
|
|
103
122
|
"description": "Legacy alias for bitbucket_token."
|
|
104
123
|
},
|
|
105
124
|
"bitbucket_token": {
|
|
106
|
-
"type": [
|
|
125
|
+
"type": [
|
|
126
|
+
"string",
|
|
127
|
+
"null"
|
|
128
|
+
]
|
|
107
129
|
},
|
|
108
130
|
"bitbucket_user": {
|
|
109
|
-
"type": [
|
|
131
|
+
"type": [
|
|
132
|
+
"string",
|
|
133
|
+
"null"
|
|
134
|
+
]
|
|
110
135
|
},
|
|
111
136
|
"github": {
|
|
112
|
-
"type": [
|
|
137
|
+
"type": [
|
|
138
|
+
"string",
|
|
139
|
+
"null"
|
|
140
|
+
]
|
|
113
141
|
},
|
|
114
142
|
"confluence": {
|
|
115
|
-
"type": [
|
|
143
|
+
"type": [
|
|
144
|
+
"string",
|
|
145
|
+
"null"
|
|
146
|
+
]
|
|
116
147
|
},
|
|
117
148
|
"figma": {
|
|
118
|
-
"type": [
|
|
149
|
+
"type": [
|
|
150
|
+
"string",
|
|
151
|
+
"null"
|
|
152
|
+
]
|
|
119
153
|
},
|
|
120
154
|
"figma_mcp": {
|
|
121
|
-
"type": [
|
|
155
|
+
"type": [
|
|
156
|
+
"string",
|
|
157
|
+
"null"
|
|
158
|
+
]
|
|
122
159
|
},
|
|
123
160
|
"fortify": {
|
|
124
|
-
"type": [
|
|
161
|
+
"type": [
|
|
162
|
+
"string",
|
|
163
|
+
"null"
|
|
164
|
+
]
|
|
125
165
|
},
|
|
126
166
|
"graylog": {
|
|
127
|
-
"type": [
|
|
167
|
+
"type": [
|
|
168
|
+
"string",
|
|
169
|
+
"null"
|
|
170
|
+
]
|
|
128
171
|
},
|
|
129
172
|
"figma_pat": {
|
|
130
|
-
"type": [
|
|
173
|
+
"type": [
|
|
174
|
+
"string",
|
|
175
|
+
"null"
|
|
176
|
+
],
|
|
131
177
|
"description": "Figma Personal Access Token. Tier 2 of the Figma access chain (REST API) resolves this key."
|
|
132
178
|
},
|
|
133
179
|
"figma_user": {
|
|
134
|
-
"type": [
|
|
180
|
+
"type": [
|
|
181
|
+
"string",
|
|
182
|
+
"null"
|
|
183
|
+
],
|
|
135
184
|
"description": "Figma account identifier, when the REST flow needs it alongside figma_pat."
|
|
136
185
|
},
|
|
137
186
|
"claude_oauth_token": {
|
|
138
|
-
"type": [
|
|
187
|
+
"type": [
|
|
188
|
+
"string",
|
|
189
|
+
"null"
|
|
190
|
+
],
|
|
139
191
|
"description": "Claude Code OAuth token used by headless / scheduled runs."
|
|
140
192
|
},
|
|
141
193
|
"claude_oauth_token_fallback": {
|
|
142
|
-
"type": [
|
|
194
|
+
"type": [
|
|
195
|
+
"string",
|
|
196
|
+
"null"
|
|
197
|
+
],
|
|
143
198
|
"description": "Secondary OAuth token used when the primary is rate-limited or expired."
|
|
144
199
|
},
|
|
145
200
|
"firebase": {
|
|
146
|
-
"type": [
|
|
201
|
+
"type": [
|
|
202
|
+
"string",
|
|
203
|
+
"null"
|
|
204
|
+
],
|
|
147
205
|
"description": "Firebase JSON (base64-encoded). project_id is parsed from the decoded JSON."
|
|
148
206
|
},
|
|
149
207
|
"jenkins": {
|
|
150
|
-
"type": [
|
|
208
|
+
"type": [
|
|
209
|
+
"string",
|
|
210
|
+
"null"
|
|
211
|
+
]
|
|
151
212
|
},
|
|
152
213
|
"npm": {
|
|
153
|
-
"type": [
|
|
214
|
+
"type": [
|
|
215
|
+
"string",
|
|
216
|
+
"null"
|
|
217
|
+
],
|
|
154
218
|
"description": "NPM registry token (npm.pkg.github.com or npmjs.com). Used by package publish flow."
|
|
219
|
+
},
|
|
220
|
+
"appstore_connect_key_id": {
|
|
221
|
+
"type": [
|
|
222
|
+
"string",
|
|
223
|
+
"null"
|
|
224
|
+
],
|
|
225
|
+
"description": "App Store Connect API key ID. Tier 1 of the App Store Connect access chain, used by /multi-agent:testflight-validation Gate 2. An identifier rather than a secret; mapped anyway so every credential is read through the same layer. Creating an API key needs an Admin or App Manager role, which is why Tier 2 exists."
|
|
226
|
+
},
|
|
227
|
+
"appstore_connect_issuer_id": {
|
|
228
|
+
"type": [
|
|
229
|
+
"string",
|
|
230
|
+
"null"
|
|
231
|
+
],
|
|
232
|
+
"description": "App Store Connect API issuer ID. Required alongside appstore_connect_key_id; either alone leaves Tier 1 unusable and the resolver says so instead of silently dropping to Tier 2. The .p8 private key is a FILE and is never stored here - it belongs at ~/.appstoreconnect/private_keys/AuthKey_<keyId>.p8, one of the directories altool searches."
|
|
233
|
+
},
|
|
234
|
+
"appstore_connect_apple_id": {
|
|
235
|
+
"type": [
|
|
236
|
+
"string",
|
|
237
|
+
"null"
|
|
238
|
+
],
|
|
239
|
+
"description": "Apple ID for Tier 2 of the App Store Connect access chain. Usable by any Apple ID holder with no elevated role, which is the realistic path when API-key creation is not permitted on the account."
|
|
240
|
+
},
|
|
241
|
+
"appstore_connect_password_item": {
|
|
242
|
+
"type": [
|
|
243
|
+
"string",
|
|
244
|
+
"null"
|
|
245
|
+
],
|
|
246
|
+
"description": "Name of the keychain item holding the app-specific password, created by `altool --store-password-in-keychain-item`. Holds an ITEM NAME, not a password: altool reads the secret itself via `-p @keychain:<item>`, so the value never reaches an argument list or the pipeline."
|
|
155
247
|
}
|
|
156
248
|
}
|
|
157
249
|
},
|
|
158
250
|
"tokenScripts": {
|
|
159
251
|
"type": "object",
|
|
160
252
|
"additionalProperties": {
|
|
161
|
-
"type": [
|
|
253
|
+
"type": [
|
|
254
|
+
"string",
|
|
255
|
+
"null"
|
|
256
|
+
]
|
|
162
257
|
},
|
|
163
258
|
"default": {},
|
|
164
259
|
"description": "Maps service ids to user-owned token generation scripts (absolute paths, personal - never synced). Used by the Phase 0 token pre-flight: figma_mcp silent renewal reads the .figma-oauth.json next to tokenScripts.figma_mcp; the 'Regenerate now (script)' option runs the script itself."
|
|
@@ -188,7 +283,9 @@
|
|
|
188
283
|
{
|
|
189
284
|
"type": "object",
|
|
190
285
|
"additionalProperties": false,
|
|
191
|
-
"required": [
|
|
286
|
+
"required": [
|
|
287
|
+
"path"
|
|
288
|
+
],
|
|
192
289
|
"properties": {
|
|
193
290
|
"path": {
|
|
194
291
|
"type": "string"
|
|
@@ -218,7 +315,9 @@
|
|
|
218
315
|
"items": {
|
|
219
316
|
"type": "object",
|
|
220
317
|
"additionalProperties": false,
|
|
221
|
-
"required": [
|
|
318
|
+
"required": [
|
|
319
|
+
"branch"
|
|
320
|
+
],
|
|
222
321
|
"properties": {
|
|
223
322
|
"branch": {
|
|
224
323
|
"type": "string"
|
|
@@ -243,7 +342,10 @@
|
|
|
243
342
|
"items": {
|
|
244
343
|
"type": "object",
|
|
245
344
|
"additionalProperties": false,
|
|
246
|
-
"required": [
|
|
345
|
+
"required": [
|
|
346
|
+
"name",
|
|
347
|
+
"description"
|
|
348
|
+
],
|
|
247
349
|
"properties": {
|
|
248
350
|
"name": {
|
|
249
351
|
"type": "string",
|
|
@@ -264,7 +366,10 @@
|
|
|
264
366
|
"description": "Where the routine came from, e.g. a CLAUDE.md section name or 'user'."
|
|
265
367
|
},
|
|
266
368
|
"trigger": {
|
|
267
|
-
"type": [
|
|
369
|
+
"type": [
|
|
370
|
+
"string",
|
|
371
|
+
"null"
|
|
372
|
+
],
|
|
268
373
|
"description": "Optional natural-language trigger phrase the routine captures."
|
|
269
374
|
}
|
|
270
375
|
}
|
|
@@ -276,7 +381,9 @@
|
|
|
276
381
|
"items": {
|
|
277
382
|
"type": "object",
|
|
278
383
|
"additionalProperties": false,
|
|
279
|
-
"required": [
|
|
384
|
+
"required": [
|
|
385
|
+
"repos"
|
|
386
|
+
],
|
|
280
387
|
"properties": {
|
|
281
388
|
"label": {
|
|
282
389
|
"type": "string",
|
|
@@ -308,7 +415,9 @@
|
|
|
308
415
|
"items": {
|
|
309
416
|
"type": "object",
|
|
310
417
|
"additionalProperties": false,
|
|
311
|
-
"required": [
|
|
418
|
+
"required": [
|
|
419
|
+
"repoSet"
|
|
420
|
+
],
|
|
312
421
|
"properties": {
|
|
313
422
|
"repoSet": {
|
|
314
423
|
"type": "array",
|
|
@@ -328,7 +437,11 @@
|
|
|
328
437
|
},
|
|
329
438
|
"platform": {
|
|
330
439
|
"type": "string",
|
|
331
|
-
"enum": [
|
|
440
|
+
"enum": [
|
|
441
|
+
"ios",
|
|
442
|
+
"android",
|
|
443
|
+
"mixed"
|
|
444
|
+
]
|
|
332
445
|
},
|
|
333
446
|
"hostScheme": {
|
|
334
447
|
"type": "string",
|
|
@@ -360,7 +473,11 @@
|
|
|
360
473
|
},
|
|
361
474
|
"lastResult": {
|
|
362
475
|
"type": "string",
|
|
363
|
-
"enum": [
|
|
476
|
+
"enum": [
|
|
477
|
+
"success",
|
|
478
|
+
"failed",
|
|
479
|
+
"skipped"
|
|
480
|
+
]
|
|
364
481
|
}
|
|
365
482
|
}
|
|
366
483
|
},
|
|
@@ -372,7 +489,10 @@
|
|
|
372
489
|
"additionalProperties": {
|
|
373
490
|
"type": "object",
|
|
374
491
|
"additionalProperties": false,
|
|
375
|
-
"required": [
|
|
492
|
+
"required": [
|
|
493
|
+
"ok",
|
|
494
|
+
"checkedAt"
|
|
495
|
+
],
|
|
376
496
|
"properties": {
|
|
377
497
|
"ok": {
|
|
378
498
|
"type": "boolean"
|
|
@@ -446,7 +566,10 @@
|
|
|
446
566
|
}
|
|
447
567
|
},
|
|
448
568
|
"defaultJiraKey": {
|
|
449
|
-
"type": [
|
|
569
|
+
"type": [
|
|
570
|
+
"string",
|
|
571
|
+
"null"
|
|
572
|
+
],
|
|
450
573
|
"description": "Default Jira project key used for placeholder replacement. null until /multi-agent:setup onboards a Jira project."
|
|
451
574
|
},
|
|
452
575
|
"modelFallback": {
|
|
@@ -460,7 +583,10 @@
|
|
|
460
583
|
"description": "Master switch for tier fallback."
|
|
461
584
|
},
|
|
462
585
|
"premiumTierUntil": {
|
|
463
|
-
"type": [
|
|
586
|
+
"type": [
|
|
587
|
+
"string",
|
|
588
|
+
"null"
|
|
589
|
+
],
|
|
464
590
|
"description": "ISO date after which the premium tier is assumed gone. null = no expiry known."
|
|
465
591
|
},
|
|
466
592
|
"fallbackModel": {
|
|
@@ -600,14 +726,28 @@
|
|
|
600
726
|
"type": "array",
|
|
601
727
|
"items": {
|
|
602
728
|
"type": "string",
|
|
603
|
-
"enum": [
|
|
729
|
+
"enum": [
|
|
730
|
+
"main",
|
|
731
|
+
"ios",
|
|
732
|
+
"screenshots",
|
|
733
|
+
"index"
|
|
734
|
+
]
|
|
604
735
|
},
|
|
605
|
-
"default": [
|
|
736
|
+
"default": [
|
|
737
|
+
"main",
|
|
738
|
+
"ios",
|
|
739
|
+
"screenshots",
|
|
740
|
+
"index"
|
|
741
|
+
],
|
|
606
742
|
"description": "v5.7+ - Wiki Case A scope multi-select default'u. Component wiki dispatch'inde hangi artifact'lar yaz\u0131lacak: main (ana component sayfas\u0131), ios (iOS sub-page), screenshots (assets/ klas\u00f6r\u00fc), index (_Sidebar.md + ComponentImplementationStatus.md). Legacy wikiDefault=true \u2192 [main,ios,screenshots,index] migration; wikiDefault=false \u2192 [] (empty array = Wiki adapter Case B men\u00fcs\u00fcne d\u00fc\u015fer)."
|
|
607
743
|
},
|
|
608
744
|
"autoJiraFromGithubIssue": {
|
|
609
745
|
"type": "string",
|
|
610
|
-
"enum": [
|
|
746
|
+
"enum": [
|
|
747
|
+
"ask",
|
|
748
|
+
"always",
|
|
749
|
+
"never"
|
|
750
|
+
],
|
|
611
751
|
"default": "ask",
|
|
612
752
|
"description": "Policy for the GitHub-issue Jira auto-create (WS-6 triad, Phase 0 Step 1). `ask` prompts the user when a GitHub issue has no Jira ID. `always` auto-creates silently (and patches the GitHub issue body with the link). `never` skips and uses the `feature/GH{issueNo}-kebab` branch. Autopilot treats `ask` as `always` - there is no interactive fallback when running unattended."
|
|
613
753
|
},
|
|
@@ -618,19 +758,29 @@
|
|
|
618
758
|
},
|
|
619
759
|
"promptLanguage": {
|
|
620
760
|
"type": "string",
|
|
621
|
-
"enum": [
|
|
761
|
+
"enum": [
|
|
762
|
+
"en",
|
|
763
|
+
"tr"
|
|
764
|
+
],
|
|
622
765
|
"default": "en",
|
|
623
766
|
"description": "Language used for user-facing INTERACTIVE pipeline copy: pickers (account, project, dev-context, base branch, branch name, maturity ack, channels), Phase 5 test prompt, Phase 6 local-checkout prompt, Phase 6 commit/PR confirmations, TaskCreate card subjects, and phase-banner.sh headers (`PHASE_LANG` resolves from this field via the `auto` sentinel). Canonical label table lives in `pipeline/skills/shared/multi-agent/SKILL.md`. External payloads stay English regardless of this setting: reviewer/triage system prompts, commit messages, PR titles/bodies, Jira comments, wiki content, agent-log.md payloads. Set via `/multi-agent:language prompt <en|tr>` or answered on first run by `/multi-agent:setup`."
|
|
624
767
|
},
|
|
625
768
|
"outputLanguage": {
|
|
626
769
|
"type": "string",
|
|
627
|
-
"enum": [
|
|
770
|
+
"enum": [
|
|
771
|
+
"en",
|
|
772
|
+
"tr"
|
|
773
|
+
],
|
|
628
774
|
"default": "en",
|
|
629
775
|
"description": "Language used for the assistant's NON-INTERACTIVE explanations, status updates, error messages, and pipeline-generated reports rendered to the user (e.g. `/multi-agent:help` body, `/multi-agent:status` table headers, summary blocks at the end of a run). Independent of `promptLanguage` so a user can have Turkish pickers but English summaries (or vice versa). External payloads (commits, PR/Jira/wiki) and skill-picker / confirmation / error UI exposed by the CLI host stay English regardless of this setting. Set via `/multi-agent:language output <en|tr>` or answered on first run by `/multi-agent:setup`."
|
|
630
776
|
},
|
|
631
777
|
"progressVerbosity": {
|
|
632
778
|
"type": "string",
|
|
633
|
-
"enum": [
|
|
779
|
+
"enum": [
|
|
780
|
+
"quiet",
|
|
781
|
+
"normal",
|
|
782
|
+
"verbose"
|
|
783
|
+
],
|
|
634
784
|
"default": "normal",
|
|
635
785
|
"description": "Verbosity of the live progress-line contract (`refs/progress-contract.md`). `quiet` shows only phase banners and user prompts (CI-friendly). `normal` shows banners + the canonical action set per phase - recommended for interactive use. `verbose` shows sub-agent internal actions, file-level reads, schema validations, retry internals - forced automatically when `mode: autopilot` is set in agent state so the run remains audit-grade when the user isn't watching live."
|
|
636
786
|
},
|
|
@@ -653,7 +803,9 @@
|
|
|
653
803
|
},
|
|
654
804
|
"model": {
|
|
655
805
|
"type": "string",
|
|
656
|
-
"enum": [
|
|
806
|
+
"enum": [
|
|
807
|
+
"sonnet"
|
|
808
|
+
],
|
|
657
809
|
"default": "sonnet",
|
|
658
810
|
"description": "Cross-check model. Locked to Sonnet - Opus would just agree with Opus."
|
|
659
811
|
},
|
|
@@ -712,7 +864,10 @@
|
|
|
712
864
|
},
|
|
713
865
|
"model": {
|
|
714
866
|
"type": "string",
|
|
715
|
-
"enum": [
|
|
867
|
+
"enum": [
|
|
868
|
+
"sonnet",
|
|
869
|
+
"opus"
|
|
870
|
+
],
|
|
716
871
|
"default": "sonnet",
|
|
717
872
|
"description": "Verifier agent model. Writing a minimal repro test is mechanical work; Sonnet is the cost-sane default."
|
|
718
873
|
},
|
|
@@ -749,7 +904,11 @@
|
|
|
749
904
|
},
|
|
750
905
|
"mode": {
|
|
751
906
|
"type": "string",
|
|
752
|
-
"enum": [
|
|
907
|
+
"enum": [
|
|
908
|
+
"per-tool-call",
|
|
909
|
+
"per-todo-step",
|
|
910
|
+
"off"
|
|
911
|
+
],
|
|
753
912
|
"default": "per-todo-step",
|
|
754
913
|
"description": "Snapshot frequency. per-tool-call snapshots after each Edit/Write/Bash mutation; per-todo-step snapshots once per plan-todos.sh step boundary (cheaper, recommended). off is equivalent to enabled=false."
|
|
755
914
|
},
|
|
@@ -786,7 +945,10 @@
|
|
|
786
945
|
},
|
|
787
946
|
"model": {
|
|
788
947
|
"type": "string",
|
|
789
|
-
"enum": [
|
|
948
|
+
"enum": [
|
|
949
|
+
"haiku",
|
|
950
|
+
"sonnet"
|
|
951
|
+
],
|
|
790
952
|
"default": "haiku",
|
|
791
953
|
"description": "Classifier model. Haiku is the cost default; Sonnet override for regulated domains where ambiguity nuance matters."
|
|
792
954
|
},
|
|
@@ -795,7 +957,7 @@
|
|
|
795
957
|
"minimum": 0,
|
|
796
958
|
"maximum": 10,
|
|
797
959
|
"default": 6,
|
|
798
|
-
"description": "Clarity threshold. Score
|
|
960
|
+
"description": "Clarity threshold. Score \u2265 threshold \u2192 proceed silently. Below \u2192 questions fire. 6 is the borderline 'the what is clear but the how is fuzzy' line."
|
|
799
961
|
},
|
|
800
962
|
"maxQuestions": {
|
|
801
963
|
"type": "integer",
|
|
@@ -806,7 +968,11 @@
|
|
|
806
968
|
},
|
|
807
969
|
"autopilotMode": {
|
|
808
970
|
"type": "string",
|
|
809
|
-
"enum": [
|
|
971
|
+
"enum": [
|
|
972
|
+
"skip",
|
|
973
|
+
"log",
|
|
974
|
+
"abort"
|
|
975
|
+
],
|
|
810
976
|
"default": "log",
|
|
811
977
|
"description": "What to do when stopAndAsk fires in autopilot. skip = drop questions and proceed (most aggressive); log = append to agent-log.md and proceed (default, preserves signal); abort = pause Phase 0 and require multi-agent:resume."
|
|
812
978
|
}
|
|
@@ -849,13 +1015,21 @@
|
|
|
849
1015
|
},
|
|
850
1016
|
"onExceed": {
|
|
851
1017
|
"type": "string",
|
|
852
|
-
"enum": [
|
|
1018
|
+
"enum": [
|
|
1019
|
+
"warn",
|
|
1020
|
+
"halt"
|
|
1021
|
+
],
|
|
853
1022
|
"default": "warn",
|
|
854
1023
|
"description": "warn = surface the overage and continue (autopilot keeps going). halt = pause the run and require multi-agent:resume once the user accepts the cost. Interactive runs always surface the line regardless."
|
|
855
1024
|
},
|
|
856
1025
|
"pricingModel": {
|
|
857
1026
|
"type": "string",
|
|
858
|
-
"enum": [
|
|
1027
|
+
"enum": [
|
|
1028
|
+
"fable",
|
|
1029
|
+
"opus",
|
|
1030
|
+
"sonnet",
|
|
1031
|
+
"haiku"
|
|
1032
|
+
],
|
|
859
1033
|
"default": "fable",
|
|
860
1034
|
"description": "Which cost-table.json rate to price accumulated tokens at. Defaults to fable (the top tier since v10.6.0) for a deliberately conservative (upper-bound) estimate, so the ceiling trips early rather than late."
|
|
861
1035
|
}
|
|
@@ -873,7 +1047,10 @@
|
|
|
873
1047
|
},
|
|
874
1048
|
"repos": {
|
|
875
1049
|
"type": "array",
|
|
876
|
-
"items": {
|
|
1050
|
+
"items": {
|
|
1051
|
+
"type": "string",
|
|
1052
|
+
"pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$"
|
|
1053
|
+
},
|
|
877
1054
|
"default": [],
|
|
878
1055
|
"description": "owner/repo entries to watch. The watcher only considers PRs not authored by the current gh user."
|
|
879
1056
|
},
|
|
@@ -882,7 +1059,7 @@
|
|
|
882
1059
|
"minimum": 30,
|
|
883
1060
|
"maximum": 86400,
|
|
884
1061
|
"default": 300,
|
|
885
|
-
"description": "Polling interval for --watch loop. Clamped to
|
|
1062
|
+
"description": "Polling interval for --watch loop. Clamped to \u226530s to stay polite with GitHub rate limits."
|
|
886
1063
|
},
|
|
887
1064
|
"labelFilter": {
|
|
888
1065
|
"type": "string",
|
|
@@ -943,7 +1120,11 @@
|
|
|
943
1120
|
},
|
|
944
1121
|
"model": {
|
|
945
1122
|
"type": "string",
|
|
946
|
-
"enum": [
|
|
1123
|
+
"enum": [
|
|
1124
|
+
"sonnet",
|
|
1125
|
+
"opus",
|
|
1126
|
+
"haiku"
|
|
1127
|
+
],
|
|
947
1128
|
"default": "sonnet",
|
|
948
1129
|
"description": "Critic model. Sonnet is the cost/quality default. Opus override only when diff > 500 LOC or touches security-critical paths. Haiku is too brittle for checklist reasoning - use only for trivial verification tasks."
|
|
949
1130
|
},
|
|
@@ -1046,7 +1227,10 @@
|
|
|
1046
1227
|
"description": "When true, also scan the repo tree (not just the diff) for existing tests that already mention the symbol - catches gaps that are technically covered by older tests outside the current diff. Slower but more accurate. Off by default - diff-only scan is sufficient for the common case."
|
|
1047
1228
|
},
|
|
1048
1229
|
"blockingThreshold": {
|
|
1049
|
-
"type": [
|
|
1230
|
+
"type": [
|
|
1231
|
+
"integer",
|
|
1232
|
+
"null"
|
|
1233
|
+
],
|
|
1050
1234
|
"minimum": 1,
|
|
1051
1235
|
"default": null,
|
|
1052
1236
|
"description": "If set, gaps where `important + blocking` count exceeds the threshold are treated as a Phase 4 rework finding (loops back to Phase 3). null = advisory only - Phase 5 prints the report but never gates."
|
|
@@ -1085,7 +1269,12 @@
|
|
|
1085
1269
|
"items": {
|
|
1086
1270
|
"type": "object",
|
|
1087
1271
|
"additionalProperties": false,
|
|
1088
|
-
"required": [
|
|
1272
|
+
"required": [
|
|
1273
|
+
"label",
|
|
1274
|
+
"localPath",
|
|
1275
|
+
"upstreamPlugin",
|
|
1276
|
+
"derivedFromVersion"
|
|
1277
|
+
],
|
|
1089
1278
|
"properties": {
|
|
1090
1279
|
"label": {
|
|
1091
1280
|
"type": "string",
|
|
@@ -1105,7 +1294,9 @@
|
|
|
1105
1294
|
},
|
|
1106
1295
|
"upstreamSkills": {
|
|
1107
1296
|
"type": "array",
|
|
1108
|
-
"items": {
|
|
1297
|
+
"items": {
|
|
1298
|
+
"type": "string"
|
|
1299
|
+
},
|
|
1109
1300
|
"description": "The upstream skill names we took."
|
|
1110
1301
|
},
|
|
1111
1302
|
"derivedFromVersion": {
|
|
@@ -1113,7 +1304,10 @@
|
|
|
1113
1304
|
"description": "Upstream version we last synced from, read from the manifest named by `upstreamVersionSource`. Bumped after a drift port is applied."
|
|
1114
1305
|
},
|
|
1115
1306
|
"upstreamVersionSource": {
|
|
1116
|
-
"enum": [
|
|
1307
|
+
"enum": [
|
|
1308
|
+
"marketplace.json",
|
|
1309
|
+
"plugin.json"
|
|
1310
|
+
],
|
|
1117
1311
|
"default": "marketplace.json",
|
|
1118
1312
|
"description": "Which upstream manifest carries the authoritative version. Defaults to marketplace.json because that is what a marketplace consumer resolves; some upstreams keep plugin.json deliberately unused, so reading it silently records a version nobody ships. Recording from the wrong manifest is how an entry here sat at 0.7.0 while the marketplace said 0.6.0."
|
|
1119
1313
|
},
|
|
@@ -1157,7 +1351,11 @@
|
|
|
1157
1351
|
},
|
|
1158
1352
|
"registry": {
|
|
1159
1353
|
"type": "string",
|
|
1160
|
-
"enum": [
|
|
1354
|
+
"enum": [
|
|
1355
|
+
"github-packages",
|
|
1356
|
+
"npmjs",
|
|
1357
|
+
"none"
|
|
1358
|
+
],
|
|
1161
1359
|
"default": "github-packages",
|
|
1162
1360
|
"description": "Publish target for Step 3d. `none` means commit + push only, never publish. The concrete URL comes from the repo's publishConfig; the token comes from the `npm` logical Keychain key through a throwaway --userconfig."
|
|
1163
1361
|
},
|
|
@@ -1173,7 +1371,9 @@
|
|
|
1173
1371
|
"items": {
|
|
1174
1372
|
"type": "object",
|
|
1175
1373
|
"additionalProperties": false,
|
|
1176
|
-
"required": [
|
|
1374
|
+
"required": [
|
|
1375
|
+
"id"
|
|
1376
|
+
],
|
|
1177
1377
|
"properties": {
|
|
1178
1378
|
"id": {
|
|
1179
1379
|
"type": "string",
|
|
@@ -1201,7 +1401,9 @@
|
|
|
1201
1401
|
"items": {
|
|
1202
1402
|
"type": "object",
|
|
1203
1403
|
"additionalProperties": false,
|
|
1204
|
-
"required": [
|
|
1404
|
+
"required": [
|
|
1405
|
+
"id"
|
|
1406
|
+
],
|
|
1205
1407
|
"properties": {
|
|
1206
1408
|
"id": {
|
|
1207
1409
|
"type": "string",
|
|
@@ -1224,7 +1426,12 @@
|
|
|
1224
1426
|
},
|
|
1225
1427
|
"defaultProvider": {
|
|
1226
1428
|
"type": "string",
|
|
1227
|
-
"enum": [
|
|
1429
|
+
"enum": [
|
|
1430
|
+
"github",
|
|
1431
|
+
"bitbucket",
|
|
1432
|
+
"gitlab",
|
|
1433
|
+
"generic-git"
|
|
1434
|
+
]
|
|
1228
1435
|
}
|
|
1229
1436
|
}
|
|
1230
1437
|
},
|
|
@@ -1258,7 +1465,10 @@
|
|
|
1258
1465
|
},
|
|
1259
1466
|
"defaultPrMode": {
|
|
1260
1467
|
"type": "string",
|
|
1261
|
-
"enum": [
|
|
1468
|
+
"enum": [
|
|
1469
|
+
"draft",
|
|
1470
|
+
"ready"
|
|
1471
|
+
],
|
|
1262
1472
|
"description": "Last-used draft/ready choice, shown as the default on next prompt."
|
|
1263
1473
|
},
|
|
1264
1474
|
"baseBranch": {
|
|
@@ -1297,7 +1507,12 @@
|
|
|
1297
1507
|
},
|
|
1298
1508
|
"remoteType": {
|
|
1299
1509
|
"type": "string",
|
|
1300
|
-
"enum": [
|
|
1510
|
+
"enum": [
|
|
1511
|
+
"bitbucket",
|
|
1512
|
+
"github",
|
|
1513
|
+
"gitlab",
|
|
1514
|
+
"generic-git"
|
|
1515
|
+
],
|
|
1301
1516
|
"description": "Hint used when repo URL doesn't make platform obvious."
|
|
1302
1517
|
},
|
|
1303
1518
|
"taskCount": {
|
|
@@ -1324,21 +1539,40 @@
|
|
|
1324
1539
|
},
|
|
1325
1540
|
"editableRelatedRepos": {
|
|
1326
1541
|
"type": "array",
|
|
1327
|
-
"items": {
|
|
1542
|
+
"items": {
|
|
1543
|
+
"type": "string"
|
|
1544
|
+
},
|
|
1328
1545
|
"maxItems": 20,
|
|
1329
1546
|
"description": "Extra writable repos to offer in the dev-context picker beyond auto-detected submodules (iOS/Android/Backend)."
|
|
1330
1547
|
},
|
|
1331
1548
|
"frontendRepos": {
|
|
1332
1549
|
"type": "array",
|
|
1333
|
-
"items": {
|
|
1550
|
+
"items": {
|
|
1551
|
+
"type": "string"
|
|
1552
|
+
},
|
|
1334
1553
|
"maxItems": 20,
|
|
1335
1554
|
"description": "Frontend repos for this project, used by /multi-agent:analysis Step 4 (Frontend is rarely in the iOS/Android submodule tree)."
|
|
1336
1555
|
},
|
|
1337
1556
|
"frontendRoots": {
|
|
1338
1557
|
"type": "array",
|
|
1339
|
-
"items": {
|
|
1558
|
+
"items": {
|
|
1559
|
+
"type": "string"
|
|
1560
|
+
},
|
|
1340
1561
|
"maxItems": 20,
|
|
1341
1562
|
"description": "Whitelist source roots for the Frontend repo-evidence scan (overrides the default src/ app/ components/ features/ lib/)."
|
|
1563
|
+
},
|
|
1564
|
+
"appStoreConnect": {
|
|
1565
|
+
"type": "object",
|
|
1566
|
+
"description": "Per-project App Store Connect delivery settings. Per-project rather than global because a user can ship for more than one team.",
|
|
1567
|
+
"properties": {
|
|
1568
|
+
"providerPublicId": {
|
|
1569
|
+
"type": [
|
|
1570
|
+
"string",
|
|
1571
|
+
"null"
|
|
1572
|
+
],
|
|
1573
|
+
"description": "Provider (team) public ID, required by altool when the account belongs to several providers. Resolve once with ios_testflight_validate({list_providers:true}); without it altool fails opaquely."
|
|
1574
|
+
}
|
|
1575
|
+
}
|
|
1342
1576
|
}
|
|
1343
1577
|
}
|
|
1344
1578
|
}
|