wicked-crew 0.7.6 → 0.7.8

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.
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * The `/api/v1/testing/*` surface (crew-testing) — the wire behind the studio's Testing page:
3
3
  * RUN the governance evals (does the steering corpus actually catch the behaviors it claims
4
- * to?) and IMPORT a named eval corpus for later runs.
4
+ * to?), IMPORT a named eval corpus for later runs, and TRIGGER a campaign recon
5
+ * (`POST /testing/recon` — governed runs over the operator's brief, fanned per repo by the
6
+ * multiscope wire; the evals routes stay STORE-scoped and take no repo/project fields).
5
7
  *
6
8
  * Thin by design, like `governance-steering.ts`: validation is zod (strict, unknown keys named —
7
9
  * the FINDING-031 doctrine); the evals themselves are the ENGINE's (`governanceEvals` pushes
@@ -22,6 +24,8 @@ import { z } from 'zod';
22
24
  import { type CoreAdapter } from '../core/adapter.js';
23
25
  import type { Actor } from '../core/types.js';
24
26
  import type { AuditLog } from './audit.js';
27
+ import type { ProjectBus } from '../projects/events.js';
28
+ import type { MembershipIndex } from '../projects/membership-index.js';
25
29
  export declare const RunGovernanceEvalsSchema: z.ZodObject<{
26
30
  type: z.ZodOptional<z.ZodEnum<["architecture", "development", "security", "testing", "operations", "compliance", "design-ux"]>>;
27
31
  corpus: z.ZodOptional<z.ZodString>;
@@ -107,11 +111,32 @@ export declare const ImportEvalCorpusSchema: z.ZodObject<{
107
111
  };
108
112
  }[];
109
113
  }>;
114
+ export declare const TestingReconSchema: z.ZodObject<{
115
+ problem: z.ZodString;
116
+ projectId: z.ZodOptional<z.ZodString>;
117
+ repoRefs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
118
+ }, "strict", z.ZodTypeAny, {
119
+ problem: string;
120
+ projectId?: string | undefined;
121
+ repoRefs?: string[] | undefined;
122
+ }, {
123
+ problem: string;
124
+ projectId?: string | undefined;
125
+ repoRefs?: string[] | undefined;
126
+ }>;
110
127
  export interface TestingRoutesDeps {
111
128
  audit: AuditLog;
112
129
  actorOf: (req: FastifyRequest & {
113
130
  actor?: Actor;
114
131
  }) => Actor;
132
+ /** The default council roster for the recon runs (already parsed) — the steering-author idiom. */
133
+ roster: () => unknown[];
134
+ /** The membership plumbing POST /runs uses for projectId filing (index tag + post-commit event).
135
+ * Optional so route-level unit tests can omit it; `registerRoutes` always supplies it. */
136
+ projects?: {
137
+ bus: ProjectBus | null;
138
+ index: MembershipIndex;
139
+ };
115
140
  }
116
141
  export declare function registerTestingRoutes(app: FastifyInstance, adapter: CoreAdapter, deps: TestingRoutesDeps): void;
117
142
  //# sourceMappingURL=testing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/api/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAmC,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,KAAK,EAAE,KAAK,EAAwB,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAiD3C,eAAO,MAAM,wBAAwB;;;;;;;;;EAK1B,CAAC;AAEZ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKxB,CAAC;AAEZ,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,KAAK,KAAK,CAAC;CAC7D;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,iBAAiB,GACtB,IAAI,CAyFN"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/api/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,KAAK,EAAwC,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AA+CvE,eAAO,MAAM,wBAAwB;;;;;;;;;EAK1B,CAAC;AAEZ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKxB,CAAC;AAMZ,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EASpB,CAAC;AAEZ,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,KAAK,KAAK,CAAC;IAC5D,kGAAkG;IAClG,MAAM,EAAE,MAAM,OAAO,EAAE,CAAC;IACxB;+FAC2F;IAC3F,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,eAAe,CAAA;KAAE,CAAC;CAC/D;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,iBAAiB,GACtB,IAAI,CAqNN"}
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * The `/api/v1/testing/*` surface (crew-testing) — the wire behind the studio's Testing page:
3
3
  * RUN the governance evals (does the steering corpus actually catch the behaviors it claims
4
- * to?) and IMPORT a named eval corpus for later runs.
4
+ * to?), IMPORT a named eval corpus for later runs, and TRIGGER a campaign recon
5
+ * (`POST /testing/recon` — governed runs over the operator's brief, fanned per repo by the
6
+ * multiscope wire; the evals routes stay STORE-scoped and take no repo/project fields).
5
7
  *
6
8
  * Thin by design, like `governance-steering.ts`: validation is zod (strict, unknown keys named —
7
9
  * the FINDING-031 doctrine); the evals themselves are the ENGINE's (`governanceEvals` pushes
@@ -17,10 +19,14 @@
17
19
  * 0.7.5 carries them, 0.7.4 does not), never 400 ("fix your request") — and never a crash: this
18
20
  * daemon must serve both routes honestly against the released 0.7.4 addon.
19
21
  */
22
+ import { randomUUID } from 'node:crypto';
20
23
  import { z } from 'zod';
21
- import { GovernanceEvalsUnsupportedError } from '../core/adapter.js';
24
+ import { GovernanceEvalsUnsupportedError, ProjectsUnsupportedError, } from '../core/adapter.js';
22
25
  import { API_PREFIX } from './api-prefix.js';
23
26
  import { STEERING_TYPE_VALUES } from './governance-steering.js';
27
+ import { resolveScopeRepos } from './multiscope.js';
28
+ import { resolveProjectGraphBinding } from '../projects/graph.js';
29
+ import { MEMBERSHIP_ATTACHED, membershipAttachedKey } from '../projects/events.js';
24
30
  const V = API_PREFIX;
25
31
  function message(err) {
26
32
  return err instanceof Error ? err.message : String(err);
@@ -70,6 +76,20 @@ export const ImportEvalCorpusSchema = z
70
76
  samples: z.array(EvalSampleSchema).min(1),
71
77
  })
72
78
  .strict();
79
+ // The recon trigger's body (the pinned multiscope wire — see api/multiscope.ts): the operator's
80
+ // brief verbatim (`problem` — studio composes its own recon framing, this route never rewrites
81
+ // caller text) plus the two optional scope fields. Strict: a misspelled scope field must 400 by
82
+ // name, never launch an unscoped recon the caller believed was scoped (FINDING-031).
83
+ export const TestingReconSchema = z
84
+ .object({
85
+ problem: z.string().min(1),
86
+ projectId: z.string().min(1).optional(),
87
+ repoRefs: z
88
+ .array(z.string().min(1))
89
+ .min(1, 'repoRefs must name at least one registered repo — omit the field to scope by project alone')
90
+ .optional(),
91
+ })
92
+ .strict();
73
93
  export function registerTestingRoutes(app, adapter, deps) {
74
94
  const { audit, actorOf } = deps;
75
95
  // ── Run the governance evals (the Testing page's Run action) ─────────────────
@@ -148,5 +168,120 @@ export function registerTestingRoutes(app, adapter, deps) {
148
168
  return reply.code(500).send({ error: message(err) });
149
169
  }
150
170
  });
171
+ // ── The recon trigger (the Testing page's "run a campaign recon" action) ─────
172
+ // REUSES crew's run machinery end to end (the steering-author precedent): each launch is a
173
+ // plain governed run over the caller's problem statement — free-text planning, standard gates,
174
+ // standard /ws frames. What THIS route adds is the pinned multiscope wire: `repoRefs` and/or
175
+ // `projectId` resolve (fail-closed, api/multiscope.ts) to registered repos, and because one
176
+ // engine run carries ONE repo (`LaunchOptions.repoRef` — wicked-core#179), a multi-repo recon
177
+ // FANS one run per repo under one shared campaign label. Neither field ⇒ one unscoped run —
178
+ // exactly the launch the studio ReconPanel sends today, kept backward compatible.
179
+ app.post(`${V}/testing/recon`, {
180
+ config: {
181
+ manifest: {
182
+ requestType: 'TestingReconBody',
183
+ responseType: 'TestingReconResponse',
184
+ // 404: unknown projectId; 409: archived project / engine busy; 500: a launch failed
185
+ // AFTER earlier fanned runs started (the body names them — nothing is hidden);
186
+ // 501: projectId on an addon without the project bindings.
187
+ statusCodes: [201, 400, 404, 409, 500, 501],
188
+ },
189
+ },
190
+ }, async (req, reply) => {
191
+ const parsed = TestingReconSchema.safeParse(req.body);
192
+ if (!parsed.success) {
193
+ return reply.code(400).send(invalidBody(parsed.error, 'Invalid recon body'));
194
+ }
195
+ const b = parsed.data;
196
+ let scope;
197
+ try {
198
+ scope = await resolveScopeRepos(adapter, {
199
+ projectId: b.projectId,
200
+ repoRefs: b.repoRefs,
201
+ });
202
+ }
203
+ catch (err) {
204
+ if (err instanceof ProjectsUnsupportedError) {
205
+ return reply.code(501).send({ error: err.message });
206
+ }
207
+ return reply.code(500).send({ error: message(err) });
208
+ }
209
+ if (!scope.ok) {
210
+ return reply.code(scope.status).send({ error: scope.error });
211
+ }
212
+ // The shared campaign label every fanned run files under (audit detail + response) — the
213
+ // grouping handle the scoreboard and the run list can fold siblings by.
214
+ const campaign = `recon-${Date.now().toString(36)}-${randomUUID().slice(0, 8)}`;
215
+ // No scope fields ⇒ one unscoped run (today's recon), spelled as a single null target.
216
+ const targets = scope.repos.length > 0 ? scope.repos : [null];
217
+ const runIds = [];
218
+ for (const target of targets) {
219
+ const runId = randomUUID();
220
+ const input = {
221
+ problem: b.problem,
222
+ sessionId: runId,
223
+ clisJson: JSON.stringify(deps.roster()),
224
+ };
225
+ if (target !== null)
226
+ input.repoRef = target.id;
227
+ if (b.projectId !== undefined) {
228
+ // Same filing semantics as POST /runs (DES-PROJECT-001 §2.2): the engine attaches the
229
+ // crew.run membership atomically with the launch; the project graph binding is resolved
230
+ // — never refreshed — per run, and the decision is logged either way.
231
+ input.projectId = b.projectId;
232
+ const decision = await resolveProjectGraphBinding(adapter, b.projectId, target?.id);
233
+ if (decision.binding !== null)
234
+ input.projectGraph = decision.binding;
235
+ req.log.info({ runId, projectId: b.projectId, repoRef: target?.id ?? null }, `run ${runId}: ${decision.reason}`);
236
+ }
237
+ try {
238
+ await adapter.launchRun(input);
239
+ }
240
+ catch (err) {
241
+ const msg = message(err);
242
+ if (runIds.length > 0) {
243
+ // Mid-fan failure: earlier runs are LIVE — answering 4xx would tell the caller
244
+ // nothing happened. Name what launched, what failed, and on which repo.
245
+ return reply.code(500).send({
246
+ error: `recon fan-out failed on repo '${target?.id ?? '(unscoped)'}' after ` +
247
+ `${runIds.length} run(s) launched: ${msg}`,
248
+ runIds,
249
+ campaign,
250
+ });
251
+ }
252
+ if (err instanceof ProjectsUnsupportedError) {
253
+ return reply.code(501).send({ error: msg });
254
+ }
255
+ const busy = /busy|in flight|already/i.test(msg);
256
+ return reply.code(busy ? 409 : 400).send({ error: msg });
257
+ }
258
+ // The same trail entry POST /runs writes — this IS a run launch, findable by the same
259
+ // `?action=run.launched` query — plus the shared campaign label the fan is grouped by.
260
+ audit.record('run.launched', actorOf(req), {
261
+ runId,
262
+ detail: {
263
+ campaign,
264
+ recon: true,
265
+ ...(target !== null ? { repoRef: target.id } : {}),
266
+ ...(b.projectId !== undefined ? { projectId: b.projectId } : {}),
267
+ },
268
+ });
269
+ if (b.projectId !== undefined && deps.projects !== undefined) {
270
+ // The post-commit half of the §2.2 filing (the POST /runs idiom): tag future /ws
271
+ // frames and emit the membership event with the AUTHENTICATED actor id.
272
+ deps.projects.index.set(runId, b.projectId);
273
+ deps.projects.bus?.emit(MEMBERSHIP_ATTACHED, {
274
+ project_id: b.projectId,
275
+ member: { kind: 'crew.run', ref: runId },
276
+ actor: actorOf(req).id,
277
+ }, membershipAttachedKey(b.projectId, 'crew.run', runId, Date.now()));
278
+ }
279
+ runIds.push(runId);
280
+ }
281
+ // `runId` (first) is the single-run spelling the ReconPanel's launch already reads;
282
+ // `runIds` is the source of truth (length ≥ 1 always — one entry per fanned repo, in the
283
+ // caller's resolved order; one entry for an unscoped recon).
284
+ return reply.code(201).send({ runId: runIds[0], runIds, campaign });
285
+ });
151
286
  }
152
287
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/api/testing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/api/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,GAEzB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAInF,MAAM,CAAC,GAAG,UAAU,CAAC;AAErB,SAAS,OAAO,CAAC,GAAY;IAC3B,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;2FAC2F;AAC3F,SAAS,WAAW,CAAC,GAAe,EAAE,IAAY;IAChD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1F,MAAM,KAAK,GACT,OAAO,CAAC,MAAM,GAAG,CAAC;QAChB,CAAC,CAAC,GAAG,IAAI,kBAAkB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO;aAC9D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aACtB,IAAI,CAAC,IAAI,CAAC,oCACX,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAChC,kBAAkB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,8CAA8C;QACpG,CAAC,CAAC,IAAI,CAAC;IACX,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AACxC,CAAC;AAED,2FAA2F;AAC3F,uFAAuF;AACvF,+FAA+F;AAC/F,2FAA2F;AAC3F,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,OAAO,EAAE,iBAAiB;CAC3B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACrC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1C,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,gGAAgG;AAChG,+FAA+F;AAC/F,gGAAgG;AAChG,qFAAqF;AACrF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvC,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,GAAG,CAAC,CAAC,EAAE,4FAA4F,CAAC;SACpG,QAAQ,EAAE;CACd,CAAC;KACD,MAAM,EAAE,CAAC;AAYZ,MAAM,UAAU,qBAAqB,CACnC,GAAoB,EACpB,OAAoB,EACpB,IAAuB;IAEvB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEhC,gFAAgF;IAChF,4FAA4F;IAC5F,oFAAoF;IACpF,oFAAoF;IACpF,GAAG,CAAC,IAAI,CACN,GAAG,CAAC,oBAAoB,EACxB;QACE,MAAM,EAAE;YACN,QAAQ,EAAE;gBACR,WAAW,EAAE,wBAAwB;gBACrC,YAAY,EAAE,sBAAsB;gBACpC,uFAAuF;gBACvF,yDAAyD;gBACzD,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;aAClC;SACF;KACF,EACD,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,wEAAwE;QACxE,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,CAAC;YACH,oFAAoF;YACpF,oFAAoF;YACpF,wFAAwF;YACxF,OAAO,MAAM,OAAO,CAAC,kBAAkB,CAAC;gBACtC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,+BAA+B,EAAE,CAAC;gBACnD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,kFAAkF;YAClF,4BAA4B;YAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gFAAgF;IAChF,0FAA0F;IAC1F,yFAAyF;IACzF,uDAAuD;IACvD,GAAG,CAAC,IAAI,CACN,GAAG,CAAC,yBAAyB,EAC7B;QACE,MAAM,EAAE;YACN,QAAQ,EAAE;gBACR,WAAW,EAAE,sBAAsB;gBACnC,YAAY,EAAE,0BAA0B;gBACxC,iFAAiF;gBACjF,oFAAoF;gBACpF,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;aAClC;SACF;KACF,EACD,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,sBAAsB,CACjD,MAAM,CAAC,IAAI,CAAC,IAAI,EAChB,MAAM,CAAC,IAAI,CAAC,OAAiC,CAC9C,CAAC;YACF,KAAK,CAAC,MAAM,CAAC,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;gBACpD,MAAM,EAAE;oBACN,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;oBACtB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;oBACnC,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B;aACF,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,+BAA+B,EAAE,CAAC;gBACnD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gFAAgF;IAChF,2FAA2F;IAC3F,+FAA+F;IAC/F,6FAA6F;IAC7F,4FAA4F;IAC5F,8FAA8F;IAC9F,4FAA4F;IAC5F,kFAAkF;IAClF,GAAG,CAAC,IAAI,CACN,GAAG,CAAC,gBAAgB,EACpB;QACE,MAAM,EAAE;YACN,QAAQ,EAAE;gBACR,WAAW,EAAE,kBAAkB;gBAC/B,YAAY,EAAE,sBAAsB;gBACpC,oFAAoF;gBACpF,+EAA+E;gBAC/E,2DAA2D;gBAC3D,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;aAC5C;SACF;KACF,EACD,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;QACtB,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE;gBACvC,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACrB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,wBAAwB,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,yFAAyF;QACzF,wEAAwE;QACxE,MAAM,QAAQ,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAChF,uFAAuF;QACvF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAmB;gBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,SAAS,EAAE,KAAK;gBAChB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aACxC,CAAC;YACF,IAAI,MAAM,KAAK,IAAI;gBAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC9B,sFAAsF;gBACtF,wFAAwF;gBACxF,sEAAsE;gBACtE,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;gBAC9B,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;gBACpF,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI;oBAAE,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC;gBACrE,GAAG,CAAC,GAAG,CAAC,IAAI,CACV,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,EAAE,EAC9D,OAAO,KAAK,KAAK,QAAQ,CAAC,MAAM,EAAE,CACnC,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,+EAA+E;oBAC/E,wEAAwE;oBACxE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAC1B,KAAK,EACH,iCAAiC,MAAM,EAAE,EAAE,IAAI,YAAY,UAAU;4BACrE,GAAG,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE;wBAC5C,MAAM;wBACN,QAAQ;qBACT,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,GAAG,YAAY,wBAAwB,EAAE,CAAC;oBAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC9C,CAAC;gBACD,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,sFAAsF;YACtF,uFAAuF;YACvF,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzC,KAAK;gBACL,MAAM,EAAE;oBACN,QAAQ;oBACR,KAAK,EAAE,IAAI;oBACX,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClD,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjE;aACF,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC7D,iFAAiF;gBACjF,wEAAwE;gBACxE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CACrB,mBAAmB,EACnB;oBACE,UAAU,EAAE,CAAC,CAAC,SAAS;oBACvB,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE;oBACxC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;iBACvB,EACD,qBAAqB,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAClE,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,oFAAoF;QACpF,yFAAyF;QACzF,6DAA6D;QAC7D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvE,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -26,7 +26,7 @@
26
26
  * a single line of at most {@link MAX_INLINE_BYTES} bytes. The fix is always the same and the
27
27
  * error says it: persist the content as a file and pass its path.
28
28
  */
29
- import type { CampaignDef, LaunchCampaignBody, WorkflowDef } from '../core/types.js';
29
+ import type { CampaignDef, CampaignScenario, LaunchCampaignBody, WorkflowDef } from '../core/types.js';
30
30
  /**
31
31
  * Byte ceiling for a single inline string handed to a node (a Tool argv token, an agent
32
32
  * problem). 1022 is the PTY canonical-line limit — the longest line a worker's stdin
@@ -47,6 +47,37 @@ export interface BuiltCampaign {
47
47
  def: CampaignDef;
48
48
  workflows: WorkflowDef[];
49
49
  }
50
+ /** A resolved repo the fan targets — `id` rides `run_spec.repo_ref`, `name` labels titles. */
51
+ export interface FanRepo {
52
+ id: string;
53
+ name: string;
54
+ }
55
+ /** The fanned scenario list plus the node-id order the route's `runIds` answer follows. */
56
+ export interface FannedScenarios {
57
+ scenarios: CampaignScenario[];
58
+ /**
59
+ * Node ids in the PINNED `runIds` order: repo-major over the fanned scenarios (repos in the
60
+ * caller's resolved order, scenarios in input order within each repo), then the scenarios
61
+ * that pinned their own `repoRef` (never fanned — an explicit per-scenario pin wins over the
62
+ * launch-level scope) in input order. Empty exactly when `repos` was empty (legacy launch).
63
+ */
64
+ runOrder: string[];
65
+ }
66
+ /**
67
+ * Fan a scenario batch across the launch's resolved repos (multiscope `projectId`/`repoRefs`).
68
+ *
69
+ * - `repos` empty ⇒ the batch is returned untouched (`runOrder: []`) — the legacy launch.
70
+ * - one repo ⇒ no copies: scenarios without their own `repoRef` are assigned it, ids
71
+ * unchanged (a single-codebase launch must look exactly like today's per-scenario spelling).
72
+ * - several repos ⇒ each unpinned scenario becomes one copy per repo (`<id>--r<n>`, titled
73
+ * `<label> [<repo name>]`), with dep edges rewritten to stay INSIDE a repo lane: a dep on a
74
+ * fanned sibling follows the lane, a dep on a pinned scenario points at its single node,
75
+ * and a pinned scenario depending on a fanned one waits for EVERY lane's copy.
76
+ *
77
+ * Throws a plain `Error` (the route answers 400 with the message) when a fanned id would break
78
+ * the {@link MAX_SCENARIO_ID} cap or collide with an id the caller already used.
79
+ */
80
+ export declare function fanScenarios(scenarios: CampaignScenario[], repos: FanRepo[]): FannedScenarios;
50
81
  /**
51
82
  * Map a `POST /campaigns` body onto the engine's `CampaignDef` + the per-node workflows to arm.
52
83
  *
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/campaigns/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACV,WAAW,EAIX,kBAAkB,EAElB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AASrC;;qEAEqE;AACrE,eAAO,MAAM,wBAAwB,cAAc,CAAC;AAEpD,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;gEACgE;AAChE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,WAAW,CAAC;IACjB,SAAS,EAAE,WAAW,EAAE,CAAC;CAC1B;AAiDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,aAAa,CAwD7F"}
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/campaigns/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACV,WAAW,EAGX,gBAAgB,EAChB,kBAAkB,EAElB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AASrC;;qEAEqE;AACrE,eAAO,MAAM,wBAAwB,cAAc,CAAC;AAEpD,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;gEACgE;AAChE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,WAAW,CAAC;IACjB,SAAS,EAAE,WAAW,EAAE,CAAC;CAC1B;AAWD,8FAA8F;AAC9F,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2FAA2F;AAC3F,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAOD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,eAAe,CA+E7F;AAiDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,aAAa,CAwD7F"}
@@ -48,6 +48,92 @@ export const CAMPAIGN_WORKFLOW_PREFIX = 'campaign-';
48
48
  export function scenarioWorkflowId(campaignId, scenarioId) {
49
49
  return `${CAMPAIGN_WORKFLOW_PREFIX}${campaignId}-${scenarioId}`;
50
50
  }
51
+ /** The lane suffix a fanned copy carries: `<scenario>--r<1-based repo index>`. */
52
+ function laneId(scenarioId, repoIndex) {
53
+ return `${scenarioId}--r${repoIndex + 1}`;
54
+ }
55
+ /**
56
+ * Fan a scenario batch across the launch's resolved repos (multiscope `projectId`/`repoRefs`).
57
+ *
58
+ * - `repos` empty ⇒ the batch is returned untouched (`runOrder: []`) — the legacy launch.
59
+ * - one repo ⇒ no copies: scenarios without their own `repoRef` are assigned it, ids
60
+ * unchanged (a single-codebase launch must look exactly like today's per-scenario spelling).
61
+ * - several repos ⇒ each unpinned scenario becomes one copy per repo (`<id>--r<n>`, titled
62
+ * `<label> [<repo name>]`), with dep edges rewritten to stay INSIDE a repo lane: a dep on a
63
+ * fanned sibling follows the lane, a dep on a pinned scenario points at its single node,
64
+ * and a pinned scenario depending on a fanned one waits for EVERY lane's copy.
65
+ *
66
+ * Throws a plain `Error` (the route answers 400 with the message) when a fanned id would break
67
+ * the {@link MAX_SCENARIO_ID} cap or collide with an id the caller already used.
68
+ */
69
+ export function fanScenarios(scenarios, repos) {
70
+ if (repos.length === 0) {
71
+ return { scenarios, runOrder: [] };
72
+ }
73
+ const fanned = scenarios.filter((s) => s.repoRef === undefined);
74
+ const pinnedIds = new Set(scenarios.filter((s) => s.repoRef !== undefined).map((s) => s.id));
75
+ if (repos.length === 1) {
76
+ const repo = repos[0];
77
+ return {
78
+ scenarios: scenarios.map((s) => s.repoRef === undefined ? { ...s, repoRef: repo.id } : s),
79
+ // The SAME documented order the multi-repo fan answers with — fanned scenarios first
80
+ // (one repo ⇒ repo-major degenerates to input order), then the pinned ones — so a
81
+ // consumer mapping `runIds` to lanes never needs a repo-count special case.
82
+ runOrder: [...fanned.map((s) => s.id), ...scenarios.filter((s) => pinnedIds.has(s.id)).map((s) => s.id)],
83
+ };
84
+ }
85
+ const fannedIds = new Set(fanned.map((s) => s.id));
86
+ const inputIds = new Set(scenarios.map((s) => s.id));
87
+ for (const s of fanned) {
88
+ const widest = laneId(s.id, repos.length - 1);
89
+ if (widest.length > MAX_SCENARIO_ID) {
90
+ throw new Error(`scenario id '${s.id}' is too long to fan across ${repos.length} repos — the fanned ` +
91
+ `id '${widest}' exceeds ${MAX_SCENARIO_ID} chars; shorten the scenario id to at ` +
92
+ `most ${MAX_SCENARIO_ID - (widest.length - s.id.length)} chars`);
93
+ }
94
+ for (let i = 0; i < repos.length; i++) {
95
+ if (inputIds.has(laneId(s.id, i))) {
96
+ throw new Error(`scenario id '${laneId(s.id, i)}' collides with the fanned copies of '${s.id}' — ` +
97
+ `rename one of them`);
98
+ }
99
+ }
100
+ }
101
+ /** Rewrite one dep for the lane a copy lives in (pinned deps keep their single node). */
102
+ const laneDep = (dep, repoIndex) => fannedIds.has(dep) ? laneId(dep, repoIndex) : dep;
103
+ const out = [];
104
+ for (const s of scenarios) {
105
+ if (s.repoRef !== undefined) {
106
+ // Pinned: one node, but a dep on a fanned sibling must wait for EVERY lane's copy —
107
+ // dropping lanes silently would let this node run over half-checked ground.
108
+ const deps = (s.deps ?? []).flatMap((d) => fannedIds.has(d) ? repos.map((_r, i) => laneId(d, i)) : [d]);
109
+ out.push({ ...s, ...(s.deps !== undefined ? { deps } : {}) });
110
+ continue;
111
+ }
112
+ for (let i = 0; i < repos.length; i++) {
113
+ const repo = repos[i];
114
+ const copy = {
115
+ ...s,
116
+ id: laneId(s.id, i),
117
+ title: `${s.title ?? s.id} [${repo.name}]`,
118
+ repoRef: repo.id,
119
+ };
120
+ if (s.deps !== undefined)
121
+ copy.deps = s.deps.map((d) => laneDep(d, i));
122
+ out.push(copy);
123
+ }
124
+ }
125
+ // The pinned runIds order: repo-major over the fanned scenarios, then the pinned ones.
126
+ const runOrder = [];
127
+ for (let i = 0; i < repos.length; i++) {
128
+ for (const s of fanned)
129
+ runOrder.push(laneId(s.id, i));
130
+ }
131
+ for (const s of scenarios) {
132
+ if (pinnedIds.has(s.id))
133
+ runOrder.push(s.id);
134
+ }
135
+ return { scenarios: out, runOrder };
136
+ }
51
137
  /** Throw with the scenario + token named when an inline string breaks the single-line /
52
138
  * byte-ceiling rule. One spelling of the rule for both scenario shapes. */
53
139
  function assertInline(scenarioId, what, value) {
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/campaigns/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/campaigns/plan.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,113 @@
13
13
  * 400 ("fix your request").
14
14
  */
15
15
  import type { FastifyInstance, FastifyRequest } from 'fastify';
16
+ import { z } from 'zod';
16
17
  import { type CoreAdapter } from '../core/adapter.js';
17
18
  import type { Actor } from '../core/types.js';
18
19
  import type { AuditLog } from '../api/audit.js';
20
+ export declare const LaunchCampaignSchema: z.ZodObject<{
21
+ id: z.ZodOptional<z.ZodString>;
22
+ name: z.ZodOptional<z.ZodString>;
23
+ scenarios: z.ZodArray<z.ZodObject<{
24
+ id: z.ZodString;
25
+ title: z.ZodOptional<z.ZodString>;
26
+ deps: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
27
+ depsCondition: z.ZodOptional<z.ZodEnum<["on_success", "on_terminal"]>>;
28
+ tool: z.ZodOptional<z.ZodObject<{
29
+ cmd: z.ZodArray<z.ZodString, "many">;
30
+ }, "strict", z.ZodTypeAny, {
31
+ cmd: string[];
32
+ }, {
33
+ cmd: string[];
34
+ }>>;
35
+ agent: z.ZodOptional<z.ZodObject<{
36
+ problem: z.ZodString;
37
+ workflow: z.ZodOptional<z.ZodString>;
38
+ }, "strict", z.ZodTypeAny, {
39
+ problem: string;
40
+ workflow?: string | undefined;
41
+ }, {
42
+ problem: string;
43
+ workflow?: string | undefined;
44
+ }>>;
45
+ repoRef: z.ZodOptional<z.ZodString>;
46
+ }, "strict", z.ZodTypeAny, {
47
+ id: string;
48
+ agent?: {
49
+ problem: string;
50
+ workflow?: string | undefined;
51
+ } | undefined;
52
+ tool?: {
53
+ cmd: string[];
54
+ } | undefined;
55
+ deps?: string[] | undefined;
56
+ title?: string | undefined;
57
+ depsCondition?: "on_success" | "on_terminal" | undefined;
58
+ repoRef?: string | undefined;
59
+ }, {
60
+ id: string;
61
+ agent?: {
62
+ problem: string;
63
+ workflow?: string | undefined;
64
+ } | undefined;
65
+ tool?: {
66
+ cmd: string[];
67
+ } | undefined;
68
+ deps?: string[] | undefined;
69
+ title?: string | undefined;
70
+ depsCondition?: "on_success" | "on_terminal" | undefined;
71
+ repoRef?: string | undefined;
72
+ }>, "many">;
73
+ policy: z.ZodOptional<z.ZodEnum<["fail_fast", "continue_independent", "human_gate_on_failure"]>>;
74
+ maxConcurrency: z.ZodOptional<z.ZodNumber>;
75
+ clisJson: z.ZodOptional<z.ZodString>;
76
+ projectId: z.ZodOptional<z.ZodString>;
77
+ repoRefs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
78
+ }, "strict", z.ZodTypeAny, {
79
+ scenarios: {
80
+ id: string;
81
+ agent?: {
82
+ problem: string;
83
+ workflow?: string | undefined;
84
+ } | undefined;
85
+ tool?: {
86
+ cmd: string[];
87
+ } | undefined;
88
+ deps?: string[] | undefined;
89
+ title?: string | undefined;
90
+ depsCondition?: "on_success" | "on_terminal" | undefined;
91
+ repoRef?: string | undefined;
92
+ }[];
93
+ id?: string | undefined;
94
+ name?: string | undefined;
95
+ projectId?: string | undefined;
96
+ repoRefs?: string[] | undefined;
97
+ policy?: "fail_fast" | "continue_independent" | "human_gate_on_failure" | undefined;
98
+ maxConcurrency?: number | undefined;
99
+ clisJson?: string | undefined;
100
+ }, {
101
+ scenarios: {
102
+ id: string;
103
+ agent?: {
104
+ problem: string;
105
+ workflow?: string | undefined;
106
+ } | undefined;
107
+ tool?: {
108
+ cmd: string[];
109
+ } | undefined;
110
+ deps?: string[] | undefined;
111
+ title?: string | undefined;
112
+ depsCondition?: "on_success" | "on_terminal" | undefined;
113
+ repoRef?: string | undefined;
114
+ }[];
115
+ id?: string | undefined;
116
+ name?: string | undefined;
117
+ projectId?: string | undefined;
118
+ repoRefs?: string[] | undefined;
119
+ policy?: "fail_fast" | "continue_independent" | "human_gate_on_failure" | undefined;
120
+ maxConcurrency?: number | undefined;
121
+ clisJson?: string | undefined;
122
+ }>;
19
123
  export interface CampaignRoutesDeps {
20
124
  audit: AuditLog;
21
125
  actorOf: (req: FastifyRequest & {
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/campaigns/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG/D,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,KAAK,EAAsB,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAmDhD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,KAAK,KAAK,CAAC;IAC5D,uEAAuE;IACvE,MAAM,EAAE,MAAM,OAAO,EAAE,CAAC;CACzB;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,kBAAkB,GACvB,IAAI,CAyIN"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/campaigns/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,KAAK,EAAsB,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AA0ChD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBtB,CAAC;AAEZ,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,KAAK,KAAK,CAAC;IAC5D,uEAAuE;IACvE,MAAM,EAAE,MAAM,OAAO,EAAE,CAAC;CACzB;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,kBAAkB,GACvB,IAAI,CAiKN"}