@flowdesk/opencode-plugin 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/agent-task-runner.d.ts +26 -0
  2. package/dist/agent-task-runner.d.ts.map +1 -0
  3. package/dist/agent-task-runner.js +244 -0
  4. package/dist/agent-task-runner.js.map +1 -0
  5. package/dist/bootstrap-installer.d.ts +3 -0
  6. package/dist/bootstrap-installer.d.ts.map +1 -1
  7. package/dist/bootstrap-installer.js +153 -7
  8. package/dist/bootstrap-installer.js.map +1 -1
  9. package/dist/command-handlers.d.ts +3 -0
  10. package/dist/command-handlers.d.ts.map +1 -1
  11. package/dist/command-handlers.js +38 -4
  12. package/dist/command-handlers.js.map +1 -1
  13. package/dist/local-adapter.d.ts.map +1 -1
  14. package/dist/local-adapter.js +19 -0
  15. package/dist/local-adapter.js.map +1 -1
  16. package/dist/managed-dispatch-adapter.d.ts +2 -0
  17. package/dist/managed-dispatch-adapter.d.ts.map +1 -1
  18. package/dist/managed-dispatch-adapter.js +86 -1
  19. package/dist/managed-dispatch-adapter.js.map +1 -1
  20. package/dist/provider-usage-live-tool.d.ts +11 -0
  21. package/dist/provider-usage-live-tool.d.ts.map +1 -1
  22. package/dist/provider-usage-live-tool.js +86 -1
  23. package/dist/provider-usage-live-tool.js.map +1 -1
  24. package/dist/quick-reviewer-run.d.ts +13 -2
  25. package/dist/quick-reviewer-run.d.ts.map +1 -1
  26. package/dist/quick-reviewer-run.js +213 -69
  27. package/dist/quick-reviewer-run.js.map +1 -1
  28. package/dist/runtime-reviewer-execution-bridge.d.ts.map +1 -1
  29. package/dist/runtime-reviewer-execution-bridge.js +46 -1
  30. package/dist/runtime-reviewer-execution-bridge.js.map +1 -1
  31. package/dist/server.d.ts +47 -1
  32. package/dist/server.d.ts.map +1 -1
  33. package/dist/server.js +483 -59
  34. package/dist/server.js.map +1 -1
  35. package/dist/shared/with-timeout.d.ts +12 -0
  36. package/dist/shared/with-timeout.d.ts.map +1 -0
  37. package/dist/shared/with-timeout.js +31 -0
  38. package/dist/shared/with-timeout.js.map +1 -0
  39. package/dist/stall-recovery.d.ts +187 -0
  40. package/dist/stall-recovery.d.ts.map +1 -0
  41. package/dist/stall-recovery.js +962 -0
  42. package/dist/stall-recovery.js.map +1 -0
  43. package/dist/status-live-tool.d.ts +5 -0
  44. package/dist/status-live-tool.d.ts.map +1 -1
  45. package/dist/status-live-tool.js +157 -1
  46. package/dist/status-live-tool.js.map +1 -1
  47. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  import { execFileSync } from "node:child_process";
2
- import { collectManagedDispatchBetaUsageEvidenceV1, } from "@flowdesk/core";
2
+ import { applyFlowDeskSessionEvidenceWriteIntentsV1, collectManagedDispatchBetaUsageEvidenceV1, prepareFlowDeskSessionEvidenceWriteIntentV1, } from "@flowdesk/core";
3
3
  const defaultExecFile = (file, args) => execFileSync(file, args, {
4
4
  encoding: "utf-8",
5
5
  stdio: ["ignore", "pipe", "ignore"],
@@ -200,6 +200,7 @@ export async function executeFlowDeskProviderUsageLiveV1(input) {
200
200
  const anyAcquired = providers.some((row) => row.usageAuthorityAcquired);
201
201
  const worstAlertLevel = computeWorstAlertLevel(providers);
202
202
  const overallRecommendation = composeOverallRecommendation(providers, worstAlertLevel);
203
+ const snapshotPersistence = persistProviderUsageSnapshots(input.config, collectorResults, observedAt);
203
204
  return {
204
205
  status: "provider_usage_live_collected",
205
206
  observedAt,
@@ -208,6 +209,9 @@ export async function executeFlowDeskProviderUsageLiveV1(input) {
208
209
  providers,
209
210
  worstAlertLevel,
210
211
  overallRecommendation,
212
+ ...(snapshotPersistence !== undefined
213
+ ? { snapshotPersistence }
214
+ : {}),
211
215
  safeNextActions: safeNextActions(),
212
216
  authority: {
213
217
  realOpenCodeDispatch: false,
@@ -221,6 +225,87 @@ export async function executeFlowDeskProviderUsageLiveV1(input) {
221
225
  },
222
226
  };
223
227
  }
228
+ function persistProviderUsageSnapshots(config, collectorResults, observedAt) {
229
+ if (config.persistSnapshots !== true)
230
+ return undefined;
231
+ const skippedReasons = [];
232
+ if (typeof config.durableStateRootDir !== "string" ||
233
+ config.durableStateRootDir.trim().length === 0) {
234
+ return {
235
+ requested: true,
236
+ durableStateRootConfigured: false,
237
+ persistedEvidenceIds: [],
238
+ skippedReasons: [
239
+ "providerUsageLive.persistSnapshots=true but no durable state root configured (set providerUsageLive.durableStateRootDir or top-level durableStateRoot)",
240
+ ],
241
+ };
242
+ }
243
+ const workflowId = sanitizePersistWorkflowId(config.persistWorkflowId);
244
+ const persistedIds = [];
245
+ const stamp = observedAt.replaceAll(/[-:.]/g, "").replace("Z", "Z");
246
+ const intents = [];
247
+ for (const { family, result } of collectorResults) {
248
+ if (result === undefined) {
249
+ skippedReasons.push(`${family}: collector result missing`);
250
+ continue;
251
+ }
252
+ if (result.usageAuthorityEvidence?.usage_acquired !== true) {
253
+ skippedReasons.push(`${family}: usage authority not acquired`);
254
+ continue;
255
+ }
256
+ const evidenceId = `provider-usage-snapshot-${family}-${stamp}`;
257
+ const prep = prepareFlowDeskSessionEvidenceWriteIntentV1({
258
+ workflowId,
259
+ evidenceId,
260
+ record: result.usageSnapshot,
261
+ });
262
+ if (!prep.ok || prep.writeIntent === undefined) {
263
+ skippedReasons.push(`${family}: snapshot prepare failed (${prep.errors.join("; ")})`);
264
+ continue;
265
+ }
266
+ intents.push(prep.writeIntent);
267
+ persistedIds.push(evidenceId);
268
+ }
269
+ if (intents.length === 0) {
270
+ return {
271
+ requested: true,
272
+ durableStateRootConfigured: true,
273
+ workflowId,
274
+ persistedEvidenceIds: [],
275
+ skippedReasons,
276
+ };
277
+ }
278
+ const filteredIntents = intents.filter((intent) => intent !== undefined);
279
+ const applied = applyFlowDeskSessionEvidenceWriteIntentsV1(config.durableStateRootDir, filteredIntents);
280
+ if (!applied.ok) {
281
+ return {
282
+ requested: true,
283
+ durableStateRootConfigured: true,
284
+ workflowId,
285
+ persistedEvidenceIds: [],
286
+ skippedReasons: [
287
+ ...skippedReasons,
288
+ `apply failed: ${applied.errors.join("; ")}`,
289
+ ],
290
+ };
291
+ }
292
+ return {
293
+ requested: true,
294
+ durableStateRootConfigured: true,
295
+ workflowId,
296
+ persistedEvidenceIds: persistedIds,
297
+ skippedReasons,
298
+ };
299
+ }
300
+ function sanitizePersistWorkflowId(value) {
301
+ if (typeof value === "string" &&
302
+ value.length > 0 &&
303
+ /^[A-Za-z0-9_-]+$/.test(value) &&
304
+ !value.startsWith("-") &&
305
+ !value.endsWith("-"))
306
+ return value;
307
+ return "workflow-provider-usage-live";
308
+ }
224
309
  const alertSeverityRank = {
225
310
  ok: 0,
226
311
  stale: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"provider-usage-live-tool.js","sourceRoot":"","sources":["../src/provider-usage-live-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-usage-live-tool.js","sourceRoot":"","sources":["../src/provider-usage-live-tool.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,9 @@ import type { FlowDeskManagedDispatchBetaOpenCodeClientV1 } from "./managed-disp
3
3
  export interface FlowDeskQuickReviewerRunRequestV1 {
4
4
  client: FlowDeskManagedDispatchBetaOpenCodeClientV1;
5
5
  prompt: string;
6
- providerQualifiedModelId: string;
7
- runtimeAgent: string;
6
+ providerQualifiedModelId?: string;
7
+ runtimeAgent?: string;
8
+ bindings?: readonly FlowDeskQuickReviewerRunBindingV1[];
8
9
  allowProviderCall: boolean;
9
10
  developerModeAcknowledged: boolean;
10
11
  perspectives?: readonly FlowDeskTopTierReviewPerspective[];
@@ -16,15 +17,24 @@ export interface FlowDeskQuickReviewerRunRequestV1 {
16
17
  sourceLabel?: string;
17
18
  title?: string;
18
19
  }
20
+ export interface FlowDeskQuickReviewerRunBindingV1 {
21
+ perspective: FlowDeskTopTierReviewPerspective;
22
+ providerQualifiedModelId: string;
23
+ runtimeAgent: string;
24
+ sourceLabel?: string;
25
+ }
19
26
  export interface FlowDeskQuickReviewerRunLaneSummaryV1 {
20
27
  perspective: string;
21
28
  launchPlanEvidenceId: string;
29
+ providerQualifiedModelId?: string;
30
+ runtimeAgent?: string;
22
31
  verdictId?: string;
23
32
  launchStatus?: string;
24
33
  runningLifecycle?: string;
25
34
  completeLifecycle?: string;
26
35
  observationStatus?: string;
27
36
  verdictMaterializationStatus?: string;
37
+ redactedObservationErrors?: string[];
28
38
  }
29
39
  export interface FlowDeskQuickReviewerRunResultV1 {
30
40
  adapterProfile: "quick_reviewer_run_helper";
@@ -43,6 +53,7 @@ export interface FlowDeskQuickReviewerRunResultV1 {
43
53
  linkedLifecycleCount?: number;
44
54
  acceptedPerspectives?: readonly string[];
45
55
  redactedBlockReason?: string;
56
+ summaryForUser?: string;
46
57
  safeNextActions: ["/flowdesk-status"] | ["/flowdesk-status", "/flowdesk-export-debug"];
47
58
  authority: {
48
59
  realOpenCodeDispatch: false;
@@ -1 +1 @@
1
- {"version":3,"file":"quick-reviewer-run.d.ts","sourceRoot":"","sources":["../src/quick-reviewer-run.ts"],"names":[],"mappings":"AAGA,OAAO,EAIN,KAAK,gCAAgC,EAKrC,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,2CAA2C,EAAE,MAAM,+BAA+B,CAAC;AAGjG,MAAM,WAAW,iCAAiC;IACjD,MAAM,EAAE,2CAA2C,CAAC;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB,EAAE,MAAM,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,yBAAyB,EAAE,OAAO,CAAC;IACnC,YAAY,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qCAAqC;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,gCAAgC;IAChD,cAAc,EAAE,2BAA2B,CAAC;IAC5C,MAAM,EACH,8BAA8B,GAC9B,+BAA+B,GAC/B,mCAAmC,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB,EAAE,MAAM,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,qCAAqC,EAAE,CAAC;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC;IACvF,SAAS,EAAE;QACV,oBAAoB,EAAE,KAAK,CAAC;QAC5B,iBAAiB,EAAE,KAAK,CAAC;QACzB,4BAA4B,EAAE,KAAK,CAAC;QACpC,aAAa,EAAE,KAAK,CAAC;QACrB,YAAY,EAAE,OAAO,CAAC;QACtB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,gBAAgB,EAAE,OAAO,CAAC;QAC1B,wBAAwB,EAAE,KAAK,CAAC;QAChC,yBAAyB,EAAE,OAAO,CAAC;QACnC,wBAAwB,EAAE,OAAO,CAAC;KAClC,CAAC;CACF;AAiMD,wBAAsB,iCAAiC,CACtD,KAAK,EAAE,iCAAiC,GACtC,OAAO,CAAC,gCAAgC,CAAC,CA0Q3C"}
1
+ {"version":3,"file":"quick-reviewer-run.d.ts","sourceRoot":"","sources":["../src/quick-reviewer-run.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,47 @@ import { tmpdir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import { FLOWDESK_TOP_TIER_REVIEW_PERSPECTIVES, applyFlowDeskSessionEvidenceWriteIntentsV1, consumeFlowDeskProductionApprovalSourceV1, prepareFlowDeskSessionEvidenceWriteIntentV1, } from "@flowdesk/core";
5
5
  import { executeFlowDeskRuntimeReviewerExecutionBridgeV1 } from "./runtime-reviewer-execution-bridge.js";
6
+ function buildQuickReviewerSummaryForUser(input) {
7
+ const acceptedCount = input.acceptedPerspectives?.length ?? 0;
8
+ const total = input.laneCount;
9
+ if (input.status === "blocked_before_quick_reviewer_run") {
10
+ const reason = input.redactedBlockReason ?? "blocked before reviewer launch";
11
+ return `FlowDesk quick reviewer blocked before launch: ${reason}. Safe next actions: ${input.safeNextActions.join(", ")}.`;
12
+ }
13
+ if (input.status === "quick_reviewer_run_completed") {
14
+ const linked = input.linkedVerdictCount ?? acceptedCount;
15
+ const bindingText = input.bindingSummary ?? `${input.runtimeAgent} on ${input.providerQualifiedModelId}`;
16
+ const perspectiveLabel = acceptedCount > 0 && input.acceptedPerspectives !== undefined
17
+ ? input.acceptedPerspectives.join(", ")
18
+ : "(none)";
19
+ return `FlowDesk quick reviewer completed: ${acceptedCount}/${total} perspectives accepted (${perspectiveLabel}) via ${bindingText}; ${linked} typed verdicts linked to durable evidence.`;
20
+ }
21
+ const blockReason = input.redactedBlockReason ?? "see lanes[].observationStatus";
22
+ const bindingText = input.bindingSummary ?? `${input.runtimeAgent} on ${input.providerQualifiedModelId}`;
23
+ return `FlowDesk quick reviewer incomplete: ${acceptedCount}/${total} perspectives accepted via ${bindingText}. Blocker: ${blockReason}. Safe next actions: ${input.safeNextActions.join(", ")}.`;
24
+ }
6
25
  const DEFAULT_TITLE = "FlowDesk quick reviewer run";
7
26
  const DEFAULT_SOURCE_LABEL = "gpt_frontier";
27
+ function defaultSourceLabelForReviewer(input) {
28
+ const binding = `${input.runtimeAgent} ${input.providerQualifiedModelId}`.toLowerCase();
29
+ if (binding.includes("claude") || binding.includes("opus"))
30
+ return "claude_opus";
31
+ if (binding.includes("gemini"))
32
+ return "gemini_pro";
33
+ if (binding.includes("gpt") || binding.includes("openai"))
34
+ return "gpt_frontier";
35
+ return DEFAULT_SOURCE_LABEL;
36
+ }
8
37
  function blocked(input) {
38
+ const safeNextActions = ["/flowdesk-status"];
39
+ const summaryForUser = buildQuickReviewerSummaryForUser({
40
+ status: "blocked_before_quick_reviewer_run",
41
+ providerQualifiedModelId: input.providerQualifiedModelId,
42
+ runtimeAgent: input.runtimeAgent,
43
+ laneCount: 0,
44
+ redactedBlockReason: input.reason,
45
+ safeNextActions,
46
+ });
9
47
  return {
10
48
  adapterProfile: "quick_reviewer_run_helper",
11
49
  status: "blocked_before_quick_reviewer_run",
@@ -16,7 +54,8 @@ function blocked(input) {
16
54
  laneCount: 0,
17
55
  lanes: [],
18
56
  redactedBlockReason: input.reason,
19
- safeNextActions: ["/flowdesk-status"],
57
+ summaryForUser,
58
+ safeNextActions,
20
59
  authority: {
21
60
  realOpenCodeDispatch: false,
22
61
  fallbackAuthority: false,
@@ -62,6 +101,49 @@ function quickReviewerLaunchPlan(input) {
62
101
  runtimeExecution: false,
63
102
  };
64
103
  }
104
+ function concreteBindingOk(binding) {
105
+ return (typeof binding.providerQualifiedModelId === "string" &&
106
+ binding.providerQualifiedModelId.includes("/") &&
107
+ typeof binding.runtimeAgent === "string" &&
108
+ binding.runtimeAgent.trim().length > 0);
109
+ }
110
+ function resolveQuickReviewerBindings(input) {
111
+ const explicitBindings = Array.isArray(input.bindings) ? input.bindings : [];
112
+ const bindings = [];
113
+ for (const perspective of input.perspectives) {
114
+ const explicit = explicitBindings.find((binding) => binding.perspective === perspective);
115
+ const providerQualifiedModelId = explicit?.providerQualifiedModelId ?? input.providerQualifiedModelId;
116
+ const runtimeAgent = explicit?.runtimeAgent ?? input.runtimeAgent;
117
+ const sourceLabel = explicit?.sourceLabel ?? input.sourceLabel;
118
+ const resolved = {
119
+ providerQualifiedModelId,
120
+ runtimeAgent,
121
+ };
122
+ if (!concreteBindingOk(resolved)) {
123
+ return { ok: false, reason: `missing concrete reviewer binding for ${perspective}` };
124
+ }
125
+ bindings.push({
126
+ perspective,
127
+ providerQualifiedModelId: providerQualifiedModelId,
128
+ runtimeAgent: runtimeAgent,
129
+ sourceLabel: sourceLabel ??
130
+ defaultSourceLabelForReviewer({
131
+ providerQualifiedModelId: providerQualifiedModelId,
132
+ runtimeAgent: runtimeAgent,
133
+ }),
134
+ });
135
+ }
136
+ return {
137
+ ok: true,
138
+ bindings,
139
+ };
140
+ }
141
+ function bindingSummary(bindings) {
142
+ const distinct = [...new Set(bindings.map((binding) => `${binding.runtimeAgent} on ${binding.providerQualifiedModelId}`))];
143
+ if (distinct.length === 1)
144
+ return distinct[0] ?? "(none)";
145
+ return `${distinct.length} reviewer bindings (${distinct.join("; ")})`;
146
+ }
65
147
  function quickReviewerPrompt(input) {
66
148
  const expected = {
67
149
  schema_version: "flowdesk.top_tier_review_verdict.v1",
@@ -75,9 +157,12 @@ function quickReviewerPrompt(input) {
75
157
  redaction_version: "redaction-v1",
76
158
  findings: [
77
159
  {
160
+ finding_id: `finding-${input.perspective}-1`,
78
161
  severity: "info",
79
- category: "verification",
80
- summary: "Replace this placeholder with the most important review finding, or remove it if there are no findings.",
162
+ category: "conformance",
163
+ summary_label: "Replace this placeholder with the most important review finding, or remove this finding if there are no findings.",
164
+ evidence_refs: [input.evidenceRef],
165
+ required_fix_label: "Replace this placeholder with the required fix, or remove this finding if no fix is required.",
81
166
  },
82
167
  ],
83
168
  evidence_refs: [input.evidenceRef],
@@ -158,8 +243,9 @@ function sessionIdFromResponse(value) {
158
243
  return undefined;
159
244
  }
160
245
  export async function executeFlowDeskQuickReviewerRunV1(input) {
161
- const providerQualifiedModelId = input.providerQualifiedModelId;
162
- const runtimeAgent = input.runtimeAgent;
246
+ const firstBinding = Array.isArray(input.bindings) ? input.bindings[0] : undefined;
247
+ const providerQualifiedModelId = input.providerQualifiedModelId ?? firstBinding?.providerQualifiedModelId ?? "";
248
+ const runtimeAgent = input.runtimeAgent ?? firstBinding?.runtimeAgent ?? "";
163
249
  if (input.developerModeAcknowledged !== true)
164
250
  return blocked({
165
251
  reason: "developerModeAcknowledged=true is required for quick reviewer run",
@@ -178,19 +264,20 @@ export async function executeFlowDeskQuickReviewerRunV1(input) {
178
264
  providerQualifiedModelId,
179
265
  runtimeAgent,
180
266
  });
181
- if (typeof providerQualifiedModelId !== "string" ||
182
- !providerQualifiedModelId.includes("/"))
183
- return blocked({
184
- reason: "providerQualifiedModelId must be a concrete provider/model id",
185
- providerQualifiedModelId,
186
- runtimeAgent,
187
- });
188
- if (typeof runtimeAgent !== "string" || runtimeAgent.trim().length === 0)
189
- return blocked({
190
- reason: "runtimeAgent is required",
191
- providerQualifiedModelId,
192
- runtimeAgent,
193
- });
267
+ if (!Array.isArray(input.bindings)) {
268
+ if (!providerQualifiedModelId.includes("/"))
269
+ return blocked({
270
+ reason: "providerQualifiedModelId must be a concrete provider/model id",
271
+ providerQualifiedModelId,
272
+ runtimeAgent,
273
+ });
274
+ if (runtimeAgent.trim().length === 0)
275
+ return blocked({
276
+ reason: "runtimeAgent is required",
277
+ providerQualifiedModelId,
278
+ runtimeAgent,
279
+ });
280
+ }
194
281
  const observedAtMs = Date.now();
195
282
  const token = timestampToken(observedAtMs);
196
283
  const observedAt = input.observedAt ?? new Date(observedAtMs).toISOString();
@@ -205,7 +292,23 @@ export async function executeFlowDeskQuickReviewerRunV1(input) {
205
292
  workflowId,
206
293
  attemptId,
207
294
  });
208
- const sourceLabel = input.sourceLabel ?? DEFAULT_SOURCE_LABEL;
295
+ const resolvedBindings = resolveQuickReviewerBindings({
296
+ perspectives,
297
+ providerQualifiedModelId: input.providerQualifiedModelId,
298
+ runtimeAgent: input.runtimeAgent,
299
+ sourceLabel: input.sourceLabel,
300
+ bindings: input.bindings,
301
+ });
302
+ if (!resolvedBindings.ok)
303
+ return blocked({
304
+ reason: resolvedBindings.reason,
305
+ providerQualifiedModelId,
306
+ runtimeAgent,
307
+ workflowId,
308
+ attemptId,
309
+ });
310
+ const bindings = resolvedBindings.bindings;
311
+ const summaryBindingText = bindingSummary(bindings);
209
312
  let parentSessionId = input.parentSessionId;
210
313
  if (parentSessionId === undefined) {
211
314
  const create = input.client.session.create;
@@ -241,16 +344,16 @@ export async function executeFlowDeskQuickReviewerRunV1(input) {
241
344
  attemptId,
242
345
  });
243
346
  const rootDir = input.rootDir ?? mkdtempSync(join(tmpdir(), "flowdesk-quick-reviewer-"));
244
- const launchPlans = perspectives.map((perspective) => quickReviewerLaunchPlan({
347
+ const launchPlans = bindings.map((binding) => quickReviewerLaunchPlan({
245
348
  workflowId,
246
349
  attemptId,
247
350
  parentSessionId,
248
- providerQualifiedModelId,
249
- runtimeAgent,
250
- perspective,
351
+ providerQualifiedModelId: binding.providerQualifiedModelId,
352
+ runtimeAgent: binding.runtimeAgent,
353
+ perspective: binding.perspective,
251
354
  token,
252
355
  }));
253
- const launchPlanEvidenceIds = perspectives.map((perspective) => `launch-plan-quick-${perspective}-${token}`);
356
+ const launchPlanEvidenceIds = bindings.map((binding) => `launch-plan-quick-${binding.perspective}-${token}`);
254
357
  const writeIntents = [];
255
358
  for (const [index, plan] of launchPlans.entries()) {
256
359
  const prepared = prepareFlowDeskSessionEvidenceWriteIntentV1({
@@ -286,29 +389,29 @@ export async function executeFlowDeskQuickReviewerRunV1(input) {
286
389
  observedAtMs,
287
390
  token,
288
391
  });
289
- const verdictExpectations = perspectives.map((perspective) => ({
290
- launchPlanEvidenceId: `launch-plan-quick-${perspective}-${token}`,
291
- lanePlanRef: `lane-plan-quick-${perspective}-${token}`,
292
- bindingRef: `binding-quick-${perspective}-${token}`,
293
- perspective,
392
+ const verdictExpectations = bindings.map((binding) => ({
393
+ launchPlanEvidenceId: `launch-plan-quick-${binding.perspective}-${token}`,
394
+ lanePlanRef: `lane-plan-quick-${binding.perspective}-${token}`,
395
+ bindingRef: `binding-quick-${binding.perspective}-${token}`,
396
+ perspective: binding.perspective,
294
397
  promptText: quickReviewerPrompt({
295
398
  prompt: input.prompt,
296
399
  workflowId,
297
- perspective,
298
- lanePlanRef: `lane-plan-quick-${perspective}-${token}`,
299
- bindingRef: `binding-quick-${perspective}-${token}`,
300
- verdictId: `verdict-quick-${perspective}-${token}`,
301
- evidenceRef: `evidence-quick-${perspective}-${token}`,
400
+ perspective: binding.perspective,
401
+ lanePlanRef: `lane-plan-quick-${binding.perspective}-${token}`,
402
+ bindingRef: `binding-quick-${binding.perspective}-${token}`,
403
+ verdictId: `verdict-quick-${binding.perspective}-${token}`,
404
+ evidenceRef: `evidence-quick-${binding.perspective}-${token}`,
302
405
  observedAt,
303
- sourceLabel,
406
+ sourceLabel: binding.sourceLabel,
304
407
  }),
305
- runningLifecycleEvidenceId: `lifecycle-running-quick-${perspective}-${token}`,
306
- completeLifecycleEvidenceId: `lifecycle-complete-quick-${perspective}-${token}`,
307
- reviewerVerdictEvidenceId: `reviewer-verdict-quick-${perspective}-${token}`,
308
- outputRef: `output-quick-${perspective}-${token}`,
309
- runtimeEchoRef: `runtime-echo-quick-${perspective}-${token}`,
310
- telemetryRef: `telemetry-quick-${perspective}-${token}`,
311
- title: `${input.title ?? DEFAULT_TITLE} ${perspective}`.slice(0, 120),
408
+ runningLifecycleEvidenceId: `lifecycle-running-quick-${binding.perspective}-${token}`,
409
+ completeLifecycleEvidenceId: `lifecycle-complete-quick-${binding.perspective}-${token}`,
410
+ reviewerVerdictEvidenceId: `reviewer-verdict-quick-${binding.perspective}-${token}`,
411
+ outputRef: `output-quick-${binding.perspective}-${token}`,
412
+ runtimeEchoRef: `runtime-echo-quick-${binding.perspective}-${token}`,
413
+ telemetryRef: `telemetry-quick-${binding.perspective}-${token}`,
414
+ title: `${input.title ?? DEFAULT_TITLE} ${binding.perspective}`.slice(0, 120),
312
415
  }));
313
416
  const bridgeResult = await executeFlowDeskRuntimeReviewerExecutionBridgeV1({
314
417
  client: input.client,
@@ -324,33 +427,75 @@ export async function executeFlowDeskQuickReviewerRunV1(input) {
324
427
  },
325
428
  });
326
429
  const lanes = Array.isArray(bridgeResult.lanes)
327
- ? bridgeResult.lanes.map((lane) => ({
328
- perspective: String(lane.perspective ?? ""),
329
- launchPlanEvidenceId: String(lane.launchPlanEvidenceId ?? ""),
330
- ...(lane.verdictId === undefined
331
- ? {}
332
- : { verdictId: String(lane.verdictId) }),
333
- ...(lane.launchStatus === undefined
334
- ? {}
335
- : { launchStatus: String(lane.launchStatus) }),
336
- ...(lane.runningLifecycle === undefined
337
- ? {}
338
- : { runningLifecycle: String(lane.runningLifecycle) }),
339
- ...(lane.completeLifecycle === undefined
340
- ? {}
341
- : { completeLifecycle: String(lane.completeLifecycle) }),
342
- ...(lane.observationStatus === undefined
343
- ? {}
344
- : { observationStatus: String(lane.observationStatus) }),
345
- ...(lane.verdictMaterializationStatus === undefined
346
- ? {}
347
- : {
348
- verdictMaterializationStatus: String(lane.verdictMaterializationStatus),
349
- }),
350
- }))
430
+ ? bridgeResult.lanes.map((lane) => {
431
+ const perspective = String(lane.perspective ?? "");
432
+ const binding = bindings.find((item) => item.perspective === perspective);
433
+ return {
434
+ perspective,
435
+ launchPlanEvidenceId: String(lane.launchPlanEvidenceId ?? ""),
436
+ ...(binding === undefined
437
+ ? {}
438
+ : {
439
+ providerQualifiedModelId: binding.providerQualifiedModelId,
440
+ runtimeAgent: binding.runtimeAgent,
441
+ }),
442
+ ...(lane.verdictId === undefined
443
+ ? {}
444
+ : { verdictId: String(lane.verdictId) }),
445
+ ...(lane.launchStatus === undefined
446
+ ? {}
447
+ : { launchStatus: String(lane.launchStatus) }),
448
+ ...(lane.runningLifecycle === undefined
449
+ ? {}
450
+ : { runningLifecycle: String(lane.runningLifecycle) }),
451
+ ...(lane.completeLifecycle === undefined
452
+ ? {}
453
+ : { completeLifecycle: String(lane.completeLifecycle) }),
454
+ ...(lane.observationStatus === undefined
455
+ ? {}
456
+ : { observationStatus: String(lane.observationStatus) }),
457
+ ...(lane.verdictMaterializationStatus === undefined
458
+ ? {}
459
+ : {
460
+ verdictMaterializationStatus: String(lane.verdictMaterializationStatus),
461
+ }),
462
+ ...(Array.isArray(lane.redactedObservationErrors)
463
+ ? {
464
+ redactedObservationErrors: lane.redactedObservationErrors
465
+ .filter((error) => typeof error === "string")
466
+ .slice(0, 8),
467
+ }
468
+ : {}),
469
+ };
470
+ })
351
471
  : [];
352
472
  const completed = bridgeResult.status === "runtime_reviewer_execution_completed" &&
353
473
  bridgeResult.durableLinkageStatus === "durable_verdicts_accepted";
474
+ const acceptedPerspectives = Array.isArray(bridgeResult.acceptedPerspectives)
475
+ ? bridgeResult.acceptedPerspectives
476
+ : undefined;
477
+ const linkedVerdictCount = typeof bridgeResult.linkedVerdictCount === "number"
478
+ ? bridgeResult.linkedVerdictCount
479
+ : undefined;
480
+ const redactedBlockReason = typeof bridgeResult.redactedBlockReason === "string"
481
+ ? bridgeResult.redactedBlockReason
482
+ : undefined;
483
+ const safeNextActions = completed
484
+ ? ["/flowdesk-status"]
485
+ : ["/flowdesk-status", "/flowdesk-export-debug"];
486
+ const summaryForUser = buildQuickReviewerSummaryForUser({
487
+ status: completed
488
+ ? "quick_reviewer_run_completed"
489
+ : "quick_reviewer_run_incomplete",
490
+ providerQualifiedModelId,
491
+ runtimeAgent,
492
+ bindingSummary: summaryBindingText,
493
+ laneCount: lanes.length,
494
+ acceptedPerspectives,
495
+ linkedVerdictCount,
496
+ redactedBlockReason,
497
+ safeNextActions,
498
+ });
354
499
  return {
355
500
  adapterProfile: "quick_reviewer_run_helper",
356
501
  status: completed
@@ -364,6 +509,7 @@ export async function executeFlowDeskQuickReviewerRunV1(input) {
364
509
  runtimeAgent,
365
510
  laneCount: lanes.length,
366
511
  lanes,
512
+ summaryForUser,
367
513
  ...(typeof bridgeResult.acceptanceStatus === "string"
368
514
  ? { acceptanceStatus: bridgeResult.acceptanceStatus }
369
515
  : {}),
@@ -384,9 +530,7 @@ export async function executeFlowDeskQuickReviewerRunV1(input) {
384
530
  ...(typeof bridgeResult.redactedBlockReason === "string"
385
531
  ? { redactedBlockReason: bridgeResult.redactedBlockReason }
386
532
  : {}),
387
- safeNextActions: completed
388
- ? ["/flowdesk-status"]
389
- : ["/flowdesk-status", "/flowdesk-export-debug"],
533
+ safeNextActions,
390
534
  authority: {
391
535
  realOpenCodeDispatch: false,
392
536
  fallbackAuthority: false,