nexus-agents 8.57.0 → 8.58.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/{chunk-H3PRTTXF.js → chunk-CFQWCVDI.js} +2 -2
  2. package/dist/{chunk-W6VHVDZM.js → chunk-EQDO4IGT.js} +89 -73
  3. package/dist/{chunk-W6VHVDZM.js.map → chunk-EQDO4IGT.js.map} +1 -1
  4. package/dist/{chunk-VCLNGU3S.js → chunk-L2BSHP47.js} +2 -2
  5. package/dist/{chunk-XU72ZQ5Z.js → chunk-QRTJ7AAM.js} +454 -375
  6. package/dist/chunk-QRTJ7AAM.js.map +1 -0
  7. package/dist/{chunk-3KOCMFOK.js → chunk-T4SXP67G.js} +2 -2
  8. package/dist/{chunk-IJMAA7MV.js → chunk-YWG3G4OH.js} +3 -3
  9. package/dist/cli.d.ts +1 -1
  10. package/dist/cli.js +17 -11
  11. package/dist/cli.js.map +1 -1
  12. package/dist/{consensus-vote-ITVEKN2M.js → consensus-vote-XXT4XWAS.js} +4 -4
  13. package/dist/{consensus-vote-types-cDFfyFTQ.d.ts → consensus-vote-types-ClG_UKij.d.ts} +48 -18
  14. package/dist/{improvement-review-TTJVCUXN.js → improvement-review-XNB74NNC.js} +4 -4
  15. package/dist/index.d.ts +22 -76
  16. package/dist/index.js +6 -6
  17. package/dist/{setup-data-dir-3JC2SSZ4.js → setup-data-dir-YCNQMKID.js} +3 -3
  18. package/package.json +1 -1
  19. package/dist/chunk-XU72ZQ5Z.js.map +0 -1
  20. /package/dist/{chunk-H3PRTTXF.js.map → chunk-CFQWCVDI.js.map} +0 -0
  21. /package/dist/{chunk-VCLNGU3S.js.map → chunk-L2BSHP47.js.map} +0 -0
  22. /package/dist/{chunk-3KOCMFOK.js.map → chunk-T4SXP67G.js.map} +0 -0
  23. /package/dist/{chunk-IJMAA7MV.js.map → chunk-YWG3G4OH.js.map} +0 -0
  24. /package/dist/{consensus-vote-ITVEKN2M.js.map → consensus-vote-XXT4XWAS.js.map} +0 -0
  25. /package/dist/{improvement-review-TTJVCUXN.js.map → improvement-review-XNB74NNC.js.map} +0 -0
  26. /package/dist/{setup-data-dir-3JC2SSZ4.js.map → setup-data-dir-YCNQMKID.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  // src/version.ts
2
2
  import semver from "semver";
3
- var VERSION = true ? "8.57.0" : "dev";
3
+ var VERSION = true ? "8.58.1" : "dev";
4
4
  var NODE_ENGINE_RANGE = ">=22.5.0";
5
5
  function isNodeVersionSupported(version) {
6
6
  return semver.satisfies(version, NODE_ENGINE_RANGE);
@@ -11,4 +11,4 @@ export {
11
11
  NODE_ENGINE_RANGE,
12
12
  isNodeVersionSupported
13
13
  };
14
- //# sourceMappingURL=chunk-H3PRTTXF.js.map
14
+ //# sourceMappingURL=chunk-CFQWCVDI.js.map
@@ -21,11 +21,12 @@ import {
21
21
  import {
22
22
  DEFAULT_TASK_TTL_MS,
23
23
  clampTaskTtl
24
- } from "./chunk-IJMAA7MV.js";
24
+ } from "./chunk-YWG3G4OH.js";
25
25
  import {
26
26
  executeExpert
27
27
  } from "./chunk-QMGMD6JB.js";
28
28
  import {
29
+ DEPRECATED_MODE_ALIAS_INPUT,
29
30
  JobStatusSchema,
30
31
  VOTER_ROLES,
31
32
  VoterProjectInputSchema,
@@ -35,12 +36,16 @@ import {
35
36
  appendResult,
36
37
  assertNotSourceCheckoutWrite,
37
38
  assignPanelSeats,
39
+ asyncDispatchInput,
40
+ asyncDispatchInputDefaultSync,
38
41
  checkSimulationAllowed,
39
42
  collectRealVotes,
40
43
  defaultBusyEnvelope,
41
44
  defaultCollisionEnvelope,
42
45
  defaultPendingEnvelope,
43
46
  defaultReplayEnvelope,
47
+ deprecatedModeWarning,
48
+ dispatchFieldDefaultSync,
44
49
  initTaskState,
45
50
  isAbandonedJob,
46
51
  isAbsentSeat,
@@ -48,12 +53,15 @@ import {
48
53
  isRateLimitError,
49
54
  listJobsWithDiagnostics,
50
55
  listTaskStateIds,
56
+ modeEnumErrorNamingDispatch,
51
57
  readJobResult,
52
58
  readTaskState,
53
59
  recordDecisionCost,
60
+ refineDispatchModeAgreement,
54
61
  registerIdempotentJob,
55
62
  resolveAdapter,
56
63
  resolveAndLogVoterProject,
64
+ resolveDispatch,
57
65
  resolveIdempotency,
58
66
  runAsJob,
59
67
  runConsensusForGoal,
@@ -61,8 +69,9 @@ import {
61
69
  simulationDeniedResult,
62
70
  toJobSummary,
63
71
  updateStage,
72
+ withWarnings,
64
73
  writeJobCancelled
65
- } from "./chunk-XU72ZQ5Z.js";
74
+ } from "./chunk-QRTJ7AAM.js";
66
75
  import {
67
76
  allOf,
68
77
  anyOf
@@ -82,7 +91,7 @@ import {
82
91
  } from "./chunk-RNWUIQTZ.js";
83
92
  import {
84
93
  withPrerequisite
85
- } from "./chunk-3KOCMFOK.js";
94
+ } from "./chunk-T4SXP67G.js";
86
95
  import {
87
96
  NOOP_NOTIFIER,
88
97
  RateLimiter,
@@ -107,7 +116,7 @@ import {
107
116
  withAuditTrail,
108
117
  withProgressHeartbeat,
109
118
  wrapToolWithTimeout
110
- } from "./chunk-VCLNGU3S.js";
119
+ } from "./chunk-L2BSHP47.js";
111
120
  import {
112
121
  createAuditTrail,
113
122
  createGraphAuditBridge,
@@ -29169,11 +29178,14 @@ var RunWorkflowInputSchema = z57.object({
29169
29178
  * cap is enforced in-process via NEXUS_JOB_MAX_CONCURRENT_RUN_WORKFLOW;
29170
29179
  * over-cap returns `{ status: 'busy', retryAfterMs }` synchronously.
29171
29180
  *
29172
- * Kept optional (no `.default()`) so the inferred type doesn't force
29173
- * `mode: 'sync'` on every existing call site / test fixture. The
29174
- * handler treats `undefined` as `'sync'`.
29181
+ * The key is `dispatch` (#4968); `mode` is the deprecated alias this tool
29182
+ * used to spell it with, resolved as `dispatch ?? mode` by the handler and
29183
+ * rejected when the two disagree (the `superRefine` below). Both optional
29184
+ * (no `.default()`) so the inferred type doesn't force a value onto every
29185
+ * existing call site / test fixture; the handler treats `undefined` as
29186
+ * `'sync'`.
29175
29187
  */
29176
- mode: z57.enum(["sync", "async"]).optional().describe('Dispatch mode (default: sync). Use "async" for long-running workflows.'),
29188
+ ...DEPRECATED_MODE_ALIAS_INPUT,
29177
29189
  /**
29178
29190
  * Idempotency key for async-mode replay-safety (#3042 Stage 1c / epic
29179
29191
  * #2631). When set: identical (key, inputs) returns the existing job;
@@ -29183,7 +29195,8 @@ var RunWorkflowInputSchema = z57.object({
29183
29195
  idempotencyKey: z57.string().min(1).max(256).optional().describe(
29184
29196
  "Replay-safe key for async-mode dispatch (#3042 Stage 1c). Same (key, inputs) returns existing jobId."
29185
29197
  )
29186
- });
29198
+ // #4968: `dispatch` and the deprecated `mode` alias must agree when both are sent.
29199
+ }).superRefine(refineDispatchModeAgreement);
29187
29200
 
29188
29201
  // src/mcp/tools/run-workflow-helpers.ts
29189
29202
  import { resolve as resolve5, sep as sep2 } from "node:path";
@@ -29563,7 +29576,7 @@ function dispatchAsyncRunWorkflow(deps, args) {
29563
29576
  busy: (retryAfterMs) => successResponse({
29564
29577
  status: "busy",
29565
29578
  retryAfterMs,
29566
- note: 'Async-mode concurrency cap reached for run_workflow. Retry later or use mode: "sync".'
29579
+ note: 'Async-mode concurrency cap reached for run_workflow. Retry later or use dispatch: "sync".'
29567
29580
  }),
29568
29581
  replay: buildRunWorkflowReplayEnvelope,
29569
29582
  collision: buildRunWorkflowCollisionEnvelope
@@ -29579,22 +29592,24 @@ function createRunWorkflowHandler(deps) {
29579
29592
  const errorMessage2 = validated.error.issues.map((e) => `${e.path.join(".")}: ${e.message}`).join(", ");
29580
29593
  return errorResponse(`Validation error: ${errorMessage2}`);
29581
29594
  }
29595
+ const dispatch = resolveDispatch(validated.data);
29596
+ const modeWarning = deprecatedModeWarning(validated.data);
29582
29597
  ctx.logger.debug("Running workflow", {
29583
29598
  template: validated.data.template,
29584
29599
  dryRun: validated.data.dryRun,
29585
- ...validated.data.mode !== void 0 ? { mode: validated.data.mode } : {}
29600
+ ...dispatch !== void 0 ? { dispatch } : {}
29586
29601
  });
29587
29602
  notifier.info("run_workflow", { event: "workflow_start", template: validated.data.template });
29588
29603
  const startMs = getTimeProvider().now();
29589
- if (validated.data.mode === "async" && !validated.data.dryRun) {
29604
+ if (dispatch === "async" && !validated.data.dryRun) {
29590
29605
  const asyncResult = dispatchAsyncRunWorkflow(deps, validated.data);
29591
29606
  notifier.info("run_workflow", {
29592
29607
  event: "workflow_dispatched_async",
29593
29608
  template: validated.data.template
29594
29609
  });
29595
- return asyncResult;
29610
+ return withWarnings(asyncResult, [modeWarning]);
29596
29611
  }
29597
- const result = await handleRunWorkflow(deps, validated.data);
29612
+ const result = withWarnings(await handleRunWorkflow(deps, validated.data), [modeWarning]);
29598
29613
  if (result.isError !== true) {
29599
29614
  notifier.info("run_workflow", {
29600
29615
  event: "workflow_complete",
@@ -29619,7 +29634,7 @@ function registerRunWorkflowTool(server, deps) {
29619
29634
  server.registerTool(
29620
29635
  "run_workflow",
29621
29636
  {
29622
- description: "Run a LINEAR (single-path) workflow template by name with typed inputs. For DAG-shaped workflows with branching, checkpoints, or rollback, use `run_graph_workflow` instead. Supports mode: 'async' (non-dryRun runs) \u2014 returns a jobId immediately; poll get_job_result.",
29637
+ description: "Run a LINEAR (single-path) workflow template by name with typed inputs. For DAG-shaped workflows with branching, checkpoints, or rollback, use `run_graph_workflow` instead. Supports dispatch: 'async' (non-dryRun runs; `mode` is a deprecated alias) \u2014 returns a jobId immediately; poll get_job_result.",
29623
29638
  inputSchema: toolInputSchema,
29624
29639
  annotations: getToolAnnotations("run_workflow")
29625
29640
  },
@@ -32965,11 +32980,14 @@ var OrchestrateInputSchema = z61.object({
32965
32980
  * orchestrations (#2631 evidence: 28.6% timeout-shaped errors on
32966
32981
  * `run_workflow` at the gate-firing measurement).
32967
32982
  *
32968
- * Kept optional (no `.default()`) so the inferred type doesn't force
32969
- * `mode: 'sync'` on every existing call site / test fixture. The
32970
- * handler treats `undefined` as `'sync'`.
32983
+ * The key is `dispatch` (#4968); `mode` is the deprecated alias this tool
32984
+ * used to spell it with, resolved as `dispatch ?? mode` by the handler and
32985
+ * rejected when the two disagree (the `superRefine` below). Both optional
32986
+ * (no `.default()`) so the inferred type doesn't force a value onto every
32987
+ * existing call site / test fixture; the handler treats `undefined` as
32988
+ * `'sync'`.
32971
32989
  */
32972
- mode: z61.enum(["sync", "async"]).optional().describe('Dispatch mode (default: sync). Use "async" for long-running orchestrations.'),
32990
+ ...DEPRECATED_MODE_ALIAS_INPUT,
32973
32991
  /**
32974
32992
  * Idempotency key for async-mode replay-safety (#3042 Stage 1c / epic
32975
32993
  * #2631). When set: identical (key, inputs) returns the existing job;
@@ -32981,7 +32999,8 @@ var OrchestrateInputSchema = z61.object({
32981
32999
  idempotencyKey: z61.string().min(1).max(256).optional().describe(
32982
33000
  "Replay-safe key for async-mode dispatch (#3042 Stage 1c). Same (key, inputs) returns existing jobId; same key + different inputs fails closed."
32983
33001
  )
32984
- });
33002
+ // #4968: `dispatch` and the deprecated `mode` alias must agree when both are sent.
33003
+ }).superRefine(refineDispatchModeAgreement);
32985
33004
  var OrchestrateOutputSchema = z61.object({
32986
33005
  taskId: z61.string().describe("Unique execution ID"),
32987
33006
  analysis: z61.object({
@@ -33037,9 +33056,9 @@ var ORCHESTRATE_TOOL_SCHEMA = {
33037
33056
  context: z61.record(z61.string(), z61.unknown()).optional().describe("Additional context for the task"),
33038
33057
  maxIterations: z61.number().min(1).max(50).optional().describe("Maximum iterations for orchestration (default: 10)"),
33039
33058
  timeout: z61.number().min(1e3).max(6e5).optional().describe("Timeout in milliseconds for orchestration (default: 300000)"),
33040
- mode: z61.enum(["sync", "async"]).optional().describe(
33041
- 'Dispatch mode (default: sync). "async" returns { jobId } immediately; poll via get_job_result.'
33042
- ),
33059
+ // #4968: the same fragment the internal schema composes, so the advertised
33060
+ // shape cannot omit `dispatch` (the SDK strips what is not advertised).
33061
+ ...DEPRECATED_MODE_ALIAS_INPUT,
33043
33062
  idempotencyKey: z61.string().min(1).max(256).optional().describe(
33044
33063
  "Replay-safe key for async-mode dispatch (#3042 Stage 1c). Same (key, inputs) returns existing jobId."
33045
33064
  )
@@ -37235,17 +37254,22 @@ function createOrchestrateHandler(deps) {
37235
37254
  message: `Validation error: ${formatZodError(validated.error)}`
37236
37255
  });
37237
37256
  }
37238
- if (validated.data.mode === "async") {
37239
- return dispatchAsyncOrchestrate({
37240
- input: validated.data,
37241
- deps,
37242
- notifier,
37243
- logger: ctx.logger,
37244
- trustTier: ctx.requestContext.trustTier
37245
- });
37257
+ const dispatch = resolveDispatch(validated.data);
37258
+ const modeWarning = deprecatedModeWarning(validated.data);
37259
+ if (dispatch === "async") {
37260
+ return withWarnings(
37261
+ dispatchAsyncOrchestrate({
37262
+ input: validated.data,
37263
+ deps,
37264
+ notifier,
37265
+ logger: ctx.logger,
37266
+ trustTier: ctx.requestContext.trustTier
37267
+ }),
37268
+ [modeWarning]
37269
+ );
37246
37270
  }
37247
37271
  try {
37248
- return await withDepthGuard(
37272
+ const result = await withDepthGuard(
37249
37273
  "orchestrate",
37250
37274
  () => runOrchestratePipeline({
37251
37275
  input: validated.data,
@@ -37256,6 +37280,7 @@ function createOrchestrateHandler(deps) {
37256
37280
  trustTier: ctx.requestContext.trustTier
37257
37281
  })
37258
37282
  );
37283
+ return withWarnings(result, [modeWarning]);
37259
37284
  } catch (depthError) {
37260
37285
  const msg = depthError instanceof Error ? depthError.message : String(depthError);
37261
37286
  ctx.logger.warn("Orchestration depth guard triggered", { error: msg });
@@ -41441,9 +41466,7 @@ var RunGraphWorkflowInputSchema = z80.object({
41441
41466
  * envelope immediately and runs in the background; poll
41442
41467
  * `get_job_result({ jobId })` for the result. Ignored for the `list` sentinel.
41443
41468
  */
41444
- dispatch: z80.enum(["sync", "async"]).optional().default("sync").describe(
41445
- "Dispatch mode (#3732). 'sync' (default): run inline. 'async': return a jobId immediately + run in background (poll get_job_result)."
41446
- )
41469
+ ...asyncDispatchInputDefaultSync("Ignored for the `list` sentinel.")
41447
41470
  });
41448
41471
  function resolveGraph(workflow, startTime) {
41449
41472
  const registry = getGraphRegistry();
@@ -41536,9 +41559,9 @@ var GRAPH_WORKFLOW_SCHEMA = {
41536
41559
  inputs: z80.record(z80.string(), z80.unknown()).optional().describe("Input values for the workflow"),
41537
41560
  enableCheckpointing: z80.boolean().optional().describe("Enable checkpoint saving"),
41538
41561
  enableAuditTrail: z80.boolean().optional().describe("Enable audit trail logging"),
41539
- dispatch: z80.enum(["sync", "async"]).optional().describe(
41540
- "Dispatch mode (#3732). 'sync' (default): run inline. 'async': return a jobId immediately + run in background (poll get_job_result)."
41541
- )
41562
+ // #4968: the same fragment the internal schema composes — the advertised
41563
+ // shape is what the SDK parses, so the wrong-key trap must be here too.
41564
+ ...asyncDispatchInput("Ignored for the `list` sentinel.")
41542
41565
  };
41543
41566
  async function executeGraphWorkflowBody(input, logger57, notifier, auditLogger) {
41544
41567
  const result = await handleRunGraphWorkflow(input, logger57, auditLogger);
@@ -42150,9 +42173,7 @@ var ExecuteSpecInputSchema = z81.object({
42150
42173
  * background; poll `get_job_result({ jobId })` for the result. Ignored when
42151
42174
  * `dryRun` is true (parse+decompose completes fast, so dry runs stay sync).
42152
42175
  */
42153
- dispatch: z81.enum(["sync", "async"]).default("sync").describe(
42154
- "Dispatch mode (#3732). 'sync' (default): run inline. 'async': return a jobId immediately + run in background (poll get_job_result). Ignored for dryRun."
42155
- )
42176
+ ...asyncDispatchInputDefaultSync("Ignored for dryRun.")
42156
42177
  });
42157
42178
  var DRY_RUN_MODE = "dry_run";
42158
42179
  function createDryRunResponse(input, logger57) {
@@ -42256,9 +42277,9 @@ function registerExecuteSpecTool(server, deps) {
42256
42277
  'Markdown specification to execute. Must contain "## Requirements" and "## Acceptance Criteria" sections.'
42257
42278
  ),
42258
42279
  dryRun: z81.boolean().optional().describe("Parse and decompose only (no execution)"),
42259
- dispatch: z81.enum(["sync", "async"]).optional().describe(
42260
- "Dispatch mode (#3732). 'sync' (default): run inline. 'async': return a jobId immediately + run in background (poll get_job_result). Ignored for dryRun."
42261
- )
42280
+ // #4968: the same fragment the internal schema composes — the advertised
42281
+ // shape is what the SDK parses, so the wrong-key trap must be here too.
42282
+ ...asyncDispatchInput("Ignored for dryRun.")
42262
42283
  };
42263
42284
  const description = "Execute a markdown specification through the full pipeline: parse, decompose into task DAG, compile to graph, execute, validate against acceptance criteria, and analyze failures. Without a configured handler factory, execute mode runs placeholder handlers and reports mode 'dry_run'.";
42264
42285
  server.registerTool(
@@ -43980,7 +44001,7 @@ function resolveJobListing(customDir) {
43980
44001
 
43981
44002
  // src/mcp/tools/get-job-result-tool.ts
43982
44003
  var GetJobResultInputSchema = z96.object({
43983
- jobId: z96.string().min(1).max(128).describe('Job ID returned by orchestrate({ mode: "async" })')
44004
+ jobId: z96.string().min(1).max(128).describe('Job ID returned by any tool called with dispatch: "async" (e.g. orchestrate)')
43984
44005
  });
43985
44006
  function getJobResultHandler(args) {
43986
44007
  const parsed = GetJobResultInputSchema.safeParse(args);
@@ -44019,7 +44040,7 @@ function getJobResultHandler(args) {
44019
44040
  function registerGetJobResultTool(server, deps) {
44020
44041
  const logger57 = deps.logger ?? createLogger({ tool: "get_job_result" });
44021
44042
  const toolSchema = {
44022
- jobId: z96.string().min(1).max(128).describe('Job ID returned by orchestrate({ mode: "async" })')
44043
+ jobId: z96.string().min(1).max(128).describe('Job ID returned by any tool called with dispatch: "async" (e.g. orchestrate)')
44023
44044
  };
44024
44045
  const description = `Read the result of an async-mode tool invocation by jobId. Returns the structured record (status, result | error, timestamps, producerVersion) plus producerVersionMeasured \u2014 false when the producer was a dev build or the record predates the field, so its version must not be compared to this server's _meta build stamp \u2014 and producerVersionSource (sidecar | task_state; a task_state record never carries a version). Poll until status !== "pending". Stage-1 of epic #2631 \u2014 Stage 2 will fold this into query_task_state once StructuredTaskState gains the result field.`;
44025
44046
  const secureHandler = createSecureHandler(getJobResultHandler, {
@@ -46182,7 +46203,7 @@ function buildVotingInput(plan, config) {
46182
46203
  }
46183
46204
  async function executeSingleVote(plan, config, log) {
46184
46205
  try {
46185
- const { executeVoting } = await import("./consensus-vote-ITVEKN2M.js");
46206
+ const { executeVoting } = await import("./consensus-vote-XXT4XWAS.js");
46186
46207
  const input = buildVotingInput(plan, config);
46187
46208
  const result = await executeVoting(input, log);
46188
46209
  return parseVotingResult(result);
@@ -47980,7 +48001,7 @@ ${contextBlock}`;
47980
48001
  const strategy = config.votingStrategy ?? "higher_order";
47981
48002
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
47982
48003
  try {
47983
- const { executeVoting } = await import("./consensus-vote-ITVEKN2M.js");
48004
+ const { executeVoting } = await import("./consensus-vote-XXT4XWAS.js");
47984
48005
  const votingResult = await executeVoting(
47985
48006
  {
47986
48007
  proposal: buildVoteProposal(plan, research),
@@ -49745,9 +49766,7 @@ var PrReviewInputSchema = z104.object({
49745
49766
  * runs the panel in the background; poll `get_job_result({ jobId })` for the
49746
49767
  * result.
49747
49768
  */
49748
- dispatch: z104.enum(["sync", "async"]).default("sync").describe(
49749
- "Dispatch mode (#3731). 'sync' (default): run inline. 'async': return a jobId immediately + run the panel in background (poll get_job_result)."
49750
- )
49769
+ ...asyncDispatchInputDefaultSync()
49751
49770
  });
49752
49771
  function mapVoteDecisionToPrDecision(voteDecision) {
49753
49772
  if (voteDecision === "reject") return "request_changes";
@@ -52343,21 +52362,24 @@ var DevPipelineInputSchema = z116.object({
52343
52362
  quickMode: z116.boolean().default(false).describe("Use 3 agents instead of 6 for faster consensus voting"),
52344
52363
  /** Maximum execution time per stage in milliseconds (min 30s, max 600s). */
52345
52364
  timeoutMs: z116.number().int().min(3e4).max(6e5).optional().describe("Max time per stage in ms (30000-600000). Default: varies by stage complexity"),
52346
- /** Pipeline execution mode. */
52347
- mode: z116.enum(["autonomous", "harness"]).default("autonomous").describe(
52348
- "'autonomous': full pipeline. 'harness': stops after decompose, returns tasks for caller to implement."
52349
- ),
52350
52365
  /**
52351
- * Dispatch mode (#3726). `sync` (default) runs the pipeline inline and
52352
- * returns the result — but a real autonomous run can exceed the 900s MCP
52353
- * request timeout. `async` returns a `{ status: 'pending', jobId }`
52354
- * envelope immediately and runs the pipeline in the background; poll
52355
- * `get_job_result({ jobId })` for the result. Ignored when `dryRun` is
52356
- * true (plan+vote completes fast, so dry runs always stay sync).
52366
+ * Pipeline execution mode — a REAL field on this tool, unrelated to async
52367
+ * dispatch. A caller who learned `mode: 'async'` elsewhere gets an error
52368
+ * naming `dispatch` rather than the bare enum message (#4968).
52357
52369
  */
52358
- dispatch: z116.enum(["sync", "async"]).default("sync").describe(
52359
- "Dispatch mode (#3726). 'sync' (default): run inline. 'async': return a jobId immediately + run in background (poll get_job_result). Ignored for dryRun."
52370
+ mode: z116.enum(["autonomous", "harness"], { error: modeEnumErrorNamingDispatch }).default("autonomous").describe(
52371
+ "'autonomous': full pipeline. 'harness': stops after decompose, returns tasks for caller to implement. (Not the async switch \u2014 that is `dispatch`.)"
52360
52372
  ),
52373
+ /**
52374
+ * Async dispatch (#3726, canonical key per #4968). `sync` (default) runs the
52375
+ * pipeline inline and returns the result — but a real autonomous run can
52376
+ * exceed the 900s MCP request timeout. `async` returns a
52377
+ * `{ status: 'pending', jobId }` envelope immediately and runs the pipeline
52378
+ * in the background; poll `get_job_result({ jobId })` for the result.
52379
+ * Ignored when `dryRun` is true (plan+vote completes fast, so dry runs
52380
+ * always stay sync).
52381
+ */
52382
+ dispatch: dispatchFieldDefaultSync("Ignored for dryRun."),
52361
52383
  /** Local pre-ship quality gate (typecheck/lint/tests) mode (#3356). */
52362
52384
  qualityGate: z116.enum(["off", "advisory", "blocking"]).default("off").describe(
52363
52385
  "Pre-ship local quality gate. 'off' (default): skip. 'advisory': run + record feedback, never fail. 'blocking': a red gate fails the pipeline."
@@ -52624,9 +52646,7 @@ var PipelineInputSchema = z117.object({
52624
52646
  * `get_job_result({ jobId })` for the result. Ignored when `dryRun` is true
52625
52647
  * (plan+vote completes fast, so dry runs always stay sync).
52626
52648
  */
52627
- dispatch: z117.enum(["sync", "async"]).default("sync").describe(
52628
- "Dispatch mode (#3730). 'sync' (default): run inline. 'async': return a jobId immediately + run in background (poll get_job_result). Ignored for dryRun."
52629
- ),
52649
+ ...asyncDispatchInputDefaultSync("Ignored for dryRun."),
52630
52650
  /** TESTS ONLY — random output, must not be used for real decisions. (#2319) */
52631
52651
  simulateVotes: z117.boolean().default(false).describe("TESTS ONLY \u2014 random output, must not be used for real decisions (#2319)")
52632
52652
  });
@@ -52842,9 +52862,7 @@ var RunInputSchema = z118.object({
52842
52862
  * envelope immediately and runs in the background; poll
52843
52863
  * `get_job_result({ jobId })`. Ignored for read-only routing (execute:false).
52844
52864
  */
52845
- dispatch: z118.enum(["sync", "async"]).optional().describe(
52846
- "Dispatch mode (#3732). 'sync' (default): run inline. 'async' (only with execute:true): return a jobId immediately + run in background (poll get_job_result)."
52847
- )
52865
+ ...asyncDispatchInput("Only with execute:true.")
52848
52866
  });
52849
52867
  var NOTE = "Routing decision only (read-only). Invoke the recommendedTool to execute, or re-run with execute: true for inline execution. The other pipeline tools remain available as advanced force-strategy paths.";
52850
52868
  function toMetaInput(input, mode) {
@@ -53247,9 +53265,7 @@ var SupplyChainTradeoffPanelInputSchema = z121.object({
53247
53265
  * immediately and runs the panel in the background; poll
53248
53266
  * `get_job_result({ jobId })` for the result.
53249
53267
  */
53250
- dispatch: z121.enum(["sync", "async"]).default("sync").describe(
53251
- "Dispatch mode (#3731). 'sync' (default): run inline. 'async': return a jobId immediately + run the panel in background (poll get_job_result)."
53252
- )
53268
+ ...asyncDispatchInputDefaultSync()
53253
53269
  });
53254
53270
  function buildTradeoffProposal(input) {
53255
53271
  const axes = input.axes ?? DEFAULT_AXES;
@@ -57179,4 +57195,4 @@ export {
57179
57195
  startPipelineEventBridge,
57180
57196
  shutdownPipelineEventBridge
57181
57197
  };
57182
- //# sourceMappingURL=chunk-W6VHVDZM.js.map
57198
+ //# sourceMappingURL=chunk-EQDO4IGT.js.map