@akon-labs/nexus-cli 0.1.10 → 0.1.11-rc.2

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 (83) hide show
  1. package/dist/cli/require-login.d.ts.map +1 -1
  2. package/dist/cli/require-login.js +2 -2
  3. package/dist/cli/require-login.js.map +1 -1
  4. package/dist/cli.js +1919 -1040
  5. package/dist/core/agent-session.d.ts +3 -1
  6. package/dist/core/agent-session.d.ts.map +1 -1
  7. package/dist/core/agent-session.js +4 -0
  8. package/dist/core/agent-session.js.map +1 -1
  9. package/dist/core/extensions/index.d.ts +1 -1
  10. package/dist/core/extensions/index.d.ts.map +1 -1
  11. package/dist/core/extensions/index.js.map +1 -1
  12. package/dist/core/extensions/loader.d.ts.map +1 -1
  13. package/dist/core/extensions/loader.js +6 -0
  14. package/dist/core/extensions/loader.js.map +1 -1
  15. package/dist/core/extensions/runner.d.ts +7 -1
  16. package/dist/core/extensions/runner.d.ts.map +1 -1
  17. package/dist/core/extensions/runner.js +14 -0
  18. package/dist/core/extensions/runner.js.map +1 -1
  19. package/dist/core/extensions/types.d.ts +18 -0
  20. package/dist/core/extensions/types.d.ts.map +1 -1
  21. package/dist/core/extensions/types.js.map +1 -1
  22. package/dist/core/tools/find.d.ts.map +1 -1
  23. package/dist/core/tools/find.js +1 -1
  24. package/dist/core/tools/find.js.map +1 -1
  25. package/dist/core/tools/grep.d.ts.map +1 -1
  26. package/dist/core/tools/grep.js +1 -1
  27. package/dist/core/tools/grep.js.map +1 -1
  28. package/dist/extensions/gitnexus/config.d.ts +15 -1
  29. package/dist/extensions/gitnexus/config.d.ts.map +1 -1
  30. package/dist/extensions/gitnexus/config.js +86 -2
  31. package/dist/extensions/gitnexus/config.js.map +1 -1
  32. package/dist/extensions/gitnexus/index.d.ts.map +1 -1
  33. package/dist/extensions/gitnexus/index.js +2 -2
  34. package/dist/extensions/gitnexus/index.js.map +1 -1
  35. package/dist/extensions/gitnexus/observatory.d.ts.map +1 -1
  36. package/dist/extensions/gitnexus/observatory.js +2 -2
  37. package/dist/extensions/gitnexus/observatory.js.map +1 -1
  38. package/dist/extensions/index.d.ts.map +1 -1
  39. package/dist/extensions/index.js +3 -0
  40. package/dist/extensions/index.js.map +1 -1
  41. package/dist/extensions/mcp/commands.d.ts +22 -2
  42. package/dist/extensions/mcp/commands.d.ts.map +1 -1
  43. package/dist/extensions/mcp/commands.js +201 -9
  44. package/dist/extensions/mcp/commands.js.map +1 -1
  45. package/dist/extensions/mcp/config.d.ts +2 -0
  46. package/dist/extensions/mcp/config.d.ts.map +1 -1
  47. package/dist/extensions/mcp/config.js +6 -1
  48. package/dist/extensions/mcp/config.js.map +1 -1
  49. package/dist/extensions/mcp/index.d.ts.map +1 -1
  50. package/dist/extensions/mcp/index.js +54 -5
  51. package/dist/extensions/mcp/index.js.map +1 -1
  52. package/dist/extensions/mcp/mcp-setup-panel.d.ts +63 -2
  53. package/dist/extensions/mcp/mcp-setup-panel.d.ts.map +1 -1
  54. package/dist/extensions/mcp/mcp-setup-panel.js +563 -77
  55. package/dist/extensions/mcp/mcp-setup-panel.js.map +1 -1
  56. package/dist/extensions/subagent/index.d.ts +2 -1
  57. package/dist/extensions/subagent/index.d.ts.map +1 -1
  58. package/dist/extensions/subagent/index.js +19 -6
  59. package/dist/extensions/subagent/index.js.map +1 -1
  60. package/dist/extensions/subagent-render.d.ts +3 -0
  61. package/dist/extensions/subagent-render.d.ts.map +1 -0
  62. package/dist/extensions/subagent-render.js +39 -0
  63. package/dist/extensions/subagent-render.js.map +1 -0
  64. package/dist/index.js +1951 -1072
  65. package/dist/modes/interactive/components/tool-execution.d.ts +3 -2
  66. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  67. package/dist/modes/interactive/components/tool-execution.js +12 -2
  68. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  69. package/dist/modes/interactive/interactive-mode.d.ts +2 -0
  70. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  71. package/dist/modes/interactive/interactive-mode.js +7 -3
  72. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  73. package/dist/rpc-entry.js +1919 -1040
  74. package/dist/utils/hidden-spawn.d.ts +29 -0
  75. package/dist/utils/hidden-spawn.d.ts.map +1 -0
  76. package/dist/utils/hidden-spawn.js +101 -0
  77. package/dist/utils/hidden-spawn.js.map +1 -0
  78. package/dist/vendor/ai.js +233 -233
  79. package/native/win32/build.mjs +95 -0
  80. package/native/win32/prebuilds/win32-x64/hidden-spawn.exe +0 -0
  81. package/native/win32/src/hidden-spawn.c +157 -0
  82. package/npm-shrinkwrap.json +2 -37
  83. package/package.json +7 -3
@@ -6,7 +6,7 @@
6
6
  * extension calls registerDelegateTaskTool(). The CLI owns process isolation
7
7
  * and streaming UX; the Hub owns one-time worker authorization and routing.
8
8
  */
9
- import { execFile, spawn } from "node:child_process";
9
+ import { execFile } from "node:child_process";
10
10
  import { randomUUID } from "node:crypto";
11
11
  import * as fs from "node:fs";
12
12
  import * as os from "node:os";
@@ -15,6 +15,7 @@ import { Text } from "@earendil-works/pi-tui";
15
15
  import { Type } from "typebox";
16
16
  import { AUTO_MODEL_ID, AUTO_PROVIDER_ID, isAutoModel } from "../../core/auto-model.js";
17
17
  import { withFileMutationQueue } from "../../core/tools/index.js";
18
+ import { applyHiddenChildLaunch, spawnWithoutConsole } from "../../utils/hidden-spawn.js";
18
19
  import { resolveGitNexusConfig } from "../gitnexus/config.js";
19
20
  import { hubApiBase } from "../gitnexus/device-auth.js";
20
21
  export const DELEGATE_TASK_TOOL_NAME = "delegate_task";
@@ -286,9 +287,14 @@ export function resolveBundledChildBinary(argv1 = process.argv[1], execPath = pr
286
287
  return undefined;
287
288
  }
288
289
  }
289
- export function applyBundledChildBinaryDefault(env = process.env, resolved = resolveBundledChildBinary()) {
290
+ export function applyBundledChildBinaryDefault(env = process.env, resolved = resolveBundledChildBinary(), options = {}) {
290
291
  if (env[PI_SUBAGENT_BINARY_ENV]?.trim() || !resolved)
291
292
  return;
293
+ // On Windows the helper is a GUI-subsystem exe. pi-subagents spawns that,
294
+ // and the helper starts this CLI with CREATE_NO_WINDOW, so the child
295
+ // console is never created.
296
+ if (applyHiddenChildLaunch(env, resolved, PI_SUBAGENT_BINARY_ENV, options))
297
+ return;
292
298
  env[PI_SUBAGENT_BINARY_ENV] = resolved;
293
299
  }
294
300
  export const BLOCKED_ORCHESTRATOR_TOOLS = new Set(["bash", "write", "edit", DELEGATE_TASK_TOOL_NAME]);
@@ -400,8 +406,10 @@ export async function runDelegatedWorker(options) {
400
406
  try {
401
407
  const exitCode = await new Promise((resolve) => {
402
408
  const invocation = getNexusInvocation(args);
403
- const child = spawn(invocation.command, invocation.args, {
409
+ const child = spawnWithoutConsole(invocation.command, invocation.args, {
404
410
  cwd: options.cwd,
411
+ // Unix uses a new process group so the tree can be signalled.
412
+ // On Windows detached allocates a console and ignores CREATE_NO_WINDOW.
405
413
  detached: true,
406
414
  env: {
407
415
  ...process.env,
@@ -414,7 +422,6 @@ export async function runDelegatedWorker(options) {
414
422
  },
415
423
  shell: false,
416
424
  stdio: ["ignore", "pipe", "pipe"],
417
- windowsHide: true,
418
425
  });
419
426
  let buffer = "";
420
427
  let settled = false;
@@ -473,7 +480,13 @@ export async function runDelegatedWorker(options) {
473
480
  };
474
481
  const abortHandler = () => stop("aborted");
475
482
  const timeoutTimer = setTimeout(() => stop("timeout"), Math.min(Math.max(1_000, options.timeoutMs ?? DELEGATED_WORKER_TIMEOUT_MS), DELEGATED_WORKER_TIMEOUT_MS));
476
- child.stdout.on("data", (chunk) => {
483
+ const stdout = child.stdout;
484
+ const stderr = child.stderr;
485
+ if (!stdout || !stderr) {
486
+ finish(1);
487
+ return;
488
+ }
489
+ stdout.on("data", (chunk) => {
477
490
  eventBytes += Buffer.byteLength(chunk);
478
491
  if (eventBytes > DELEGATED_EVENT_CAP_BYTES) {
479
492
  assistantFailed = true;
@@ -493,7 +506,7 @@ export async function runDelegatedWorker(options) {
493
506
  });
494
507
  // Consume stderr so a noisy child cannot block. Raw provider/process output
495
508
  // is intentionally not retained or exposed to the orchestrator or user.
496
- child.stderr.on("data", () => undefined);
509
+ stderr.on("data", () => undefined);
497
510
  child.on("close", (code) => {
498
511
  if (buffer.trim())
499
512
  processLine(buffer);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/subagent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAExF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AACvD,MAAM,CAAC,MAAM,0BAA0B,GAAG,iCAAiC,CAAC;AAC5E,MAAM,CAAC,MAAM,2BAA2B,GAAG,kCAAkC,CAAC;AAC9E,MAAM,CAAC,MAAM,wBAAwB,GAAG,+BAA+B,CAAC;AACxE,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AACtE,MAAM,CAAC,MAAM,gCAAgC,GAAG,uCAAuC,CAAC;AACxF,MAAM,CAAC,MAAM,kCAAkC,GAAG,yCAAyC,CAAC;AAC5F,MAAM,CAAC,MAAM,4BAA4B,GAAG,sBAAsB,CAAC;AACnE,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAChE,MAAM,CAAC,MAAM,wBAAwB,GAAG,2BAA2B,CAAC;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AACtC,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACzD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAC;AACpD,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,IAAI,CAAC;AACrD,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,CAAC;AAElD,MAAM,uBAAuB,GAAG,MAAM,CAAC;AACvC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAC3C,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACrC,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,MAAM;IACN,OAAO;IACP,MAAM;IACN,YAAY;IACZ,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB;IACjB,yBAAyB;IACzB,iBAAiB;IACjB,qBAAqB;CACZ,CAAC;AAEX,MAAM,oBAAoB,GAAG;;;;;;;8BAOC,CAAC;AAiF/B,SAAS,QAAQ,CAAC,KAAc,EAAoC;IACnE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AAAA,CACnD;AAED,SAAS,sBAAsB,CAAC,KAAc,EAAiC;IAC9E,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IACtG,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO;SACxB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;SACvE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAc,CAAC;SAClC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO;QACN,IAAI;QACJ,GAAG,CAAC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjF,CAAC;AAAA,CACF;AAED,MAAM,UAAU,oBAAoB,CACnC,IAAY,EACZ,kBAAqC,EACrC,aAAgC,EACvB;IACT,MAAM,QAAQ,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,kBAAkB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9G,CAAC;IACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,oBAAoB,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAAA,CAC7B;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,UAAkB,EAAY;IACpF,OAAO;QACN,QAAQ;QACR,MAAM;QACN,IAAI;QACJ,cAAc;QACd,SAAS;QACT,GAAG,gBAAgB,IAAI,aAAa,EAAE;QACtC,SAAS;QACT,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC,iBAAiB;QACjB,GAAG,uBAAuB,WAAW;QACrC,wBAAwB;QACxB,UAAU;QACV,IAAI;KACJ,CAAC;AAAA,CACF;AAED,SAAS,kBAAkB,CAAC,IAAc,EAAuC;IAChF,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,kBAAkB,GAAG,aAAa,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACtE,IAAI,aAAa,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1E,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/D,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/D,OAAO,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;AAAA,CAC3F;AAED,KAAK,UAAU,iBAAiB,GAA+C;IAC9E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC7C,MAAM,qBAAqB,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAAA,CAC/F,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,CACzB;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,GAAW,EAAyC;IACxF,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAChF,MAAM,MAAM,GAAG,wBAAwB,CAAC;IACxC,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACrF,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,MAAM,EAAE,EAAE,MAAM,CAAC,GAAG,GAAG;QAAE,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpG,OAAO,EAAE,KAAK,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAAA,CAC3D;AAED,MAAM,UAAU,6BAA6B,CAC5C,MAAsB,EACtB,OAAO,GAAqD,EAAE,EACvC;IACvB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC7C,OAAO;QACN,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE;YAChC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;gBAAE,UAAU,CAAC,KAAK,EAAE,CAAC;;gBAC3C,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,SAAS,IAAI,uBAAuB,CAAC,CAAC;YACnG,IAAI,CAAC;gBACJ,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE;oBAClF,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACR,cAAc,EAAE,kBAAkB;wBAClC,MAAM,EAAE,kBAAkB;wBAC1B,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;wBACvC,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,KAAK;wBAC9B,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS;wBACtC,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC,aAAa;wBAC/C,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC,eAAe;wBACnD,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,MAAM;wBACtC,CAAC,oBAAoB,CAAC,EAAE,QAAQ;wBAChC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzF,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACpE;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC9E,MAAM,EAAE,UAAU,CAAC,MAAM;iBACzB,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAClB,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;oBAC9C,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBACrD,CAAC;gBACD,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC5C,IACC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACf,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;oBAC9B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBAClB,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;oBAClC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;oBACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAC3C,CAAC;oBACF,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC1D,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;YACzD,CAAC;oBAAS,CAAC;gBACV,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC;QAAA,CACD;KACD,CAAC;AAAA,CACF;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAW;IACvF,OAAO,GAAG,CAAC,0BAA0B,CAAC,KAAK,GAAG,CAAC;AAAA,CAC/C;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AACrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC7D,MAAM,CAAC,MAAM,2BAA2B,GAAG,yBAAyB,CAAC;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAC9D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,QAAQ,CAAU,CAAC;AAE5D,kFAAkF;AAClF,MAAM,UAAU,yBAAyB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAW;IACxF,MAAM,KAAK,GAAG,GAAG,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC;AAAA,CAChE;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAW;IACvF,MAAM,IAAI,GAAG,GAAG,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5D,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,yBAAyB,CAAC,GAAG,CAAC,CAAC;AAAA,CACtC;AAED,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAe;IACjF,MAAM,GAAG,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACtC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAChE,OAAO,IAAI,GAAG,CACb,GAAG;SACD,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CACjB,CAAC;AAAA,CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,+BAA+B,CAC9C,GAAG,GAAsB,OAAO,CAAC,GAAG,EACpC,IAAI,GAAiB,UAAU,EACrB;IACV,MAAM,KAAK,GAAG,GAAG,CAAC,2BAA2B,CAAC,EAAE,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,WAAW,GAAG;QACnB,2BAA2B;QAC3B,wBAAwB;QACxB,uBAAuB;QACvB,gCAAgC;QAChC,kCAAkC;KAClC,CAAC;IACF,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IACvE,IAAI,QAAQ,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,WAAW;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC;IACd,CAAC;IACD,GAAG,CAAC,0BAA0B,CAAC,GAAG,GAAG,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,WAAW;QAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;IACjD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACxC,KAAK,GAAuB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAC3C,QAAQ,GAAW,OAAO,CAAC,QAAQ,EACnC,MAAM,GAAiE,EAAE,EACpD;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACvD,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AAAA,CACD;AAED,MAAM,UAAU,8BAA8B,CAC7C,GAAG,GAAsB,OAAO,CAAC,GAAG,EACpC,QAAQ,GAAuB,yBAAyB,EAAE,EACnD;IACP,IAAI,GAAG,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ;QAAE,OAAO;IAC7D,GAAG,CAAC,sBAAsB,CAAC,GAAG,QAAQ,CAAC;AAAA,CACvC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;AAEtG,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACpC,gFAAgF;IAChF,8EAA8E;IAC9E,0EAA0E;IAC1E,gFAAgF;IAChF,iFAAiF;IACjF,8EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,6EAA6E;IAC7E,2EAA2E;IAC3E,4CAA4C;CAC5C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,MAAM,UAAU,4BAA4B,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAW;IAC3F,OAAO,CACN,GAAG,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK;QACtD,GAAG,CAAC,0BAA0B,CAAC,KAAK,GAAG;QACvC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,IAAI,EAAE,CAAC,CACjD,CAAC;AAAA,CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAgB,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAQ;IACxG,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QAC3C,IAAI,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QACzE,OAAO,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,YAAY,OAAO,qBAAqB,EAAE,EAAE,CAAC;IAAA,CAC7E,CAAC,CAAC;IACH,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QAClC,IAAI,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QACzE,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,OAAO;QAC5D,OAAO;YACN,KAAK,EAAE,IAAI;YACX,MAAM,EACL,0FAA0F;gBAC1F,kGAAkG;SACnG,CAAC;IAAA,CACF,CAAC,CAAC;AAAA,CACH;AAED;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAQ;IACxF,MAAM,MAAM,GAAG,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,EAAE,CAAC;QAClD,GAAG,CAAC,qBAAqB,GAAG,MAAM,CAAC;IACpC,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,GAAG,KAAK,uBAAuB;YAAE,SAAS;QACpF,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;YAAE,SAAS;QAC7B,MAAM,MAAM,GAAG,eAAe,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE;YAAE,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;IAC/C,CAAC;AAAA,CACD;AAED,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAA6B;IACrG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACrD,MAAM,SAAS,GAAG,GAAG,CAAC,2BAA2B,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,MAAM,GAAG,GAAG,CAAC,wBAAwB,CAAC,EAAE,IAAI,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,GAAG,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,CAAC;IACnD,MAAM,aAAa,GAAG,GAAG,CAAC,gCAAgC,CAAC,EAAE,IAAI,EAAE,CAAC;IACpE,MAAM,eAAe,GAAG,GAAG,CAAC,kCAAkC,CAAC,EAAE,IAAI,EAAE,CAAC;IACxE,OAAO,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC7C,OAAO,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,IAAI,CAAC,eAAe;QAAE,OAAO,SAAS,CAAC;IAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC;AAAA,CACpE;AAED,SAAS,eAAe,CAAC,GAAuB,EAAE,MAAsB,EAAQ;IAC/E,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO;IAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzE,OAAO;IACR,CAAC;IACD,IAAI,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACR,sDAAsD;IACvD,CAAC;AAAA,CACD;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA+B,EAAkC;IACzG,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACnG,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,cAAyF,CAAC;IAC9F,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE;gBACxD,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,IAAI;gBACd,GAAG,EAAE;oBACJ,GAAG,OAAO,CAAC,GAAG;oBACd,CAAC,0BAA0B,CAAC,EAAE,GAAG;oBACjC,CAAC,2BAA2B,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,SAAS;oBAC9D,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,MAAM;oBACxD,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK;oBACtD,CAAC,gCAAgC,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,aAAa;oBACvE,CAAC,kCAAkC,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,eAAe;iBAC3E;gBACD,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,WAAW,EAAE,IAAI;aACjB,CAAC,CAAC;YACH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,cAA0C,CAAC;YAE/C,MAAM,MAAM,GAAG,CAAC,IAAY,EAAQ,EAAE,CAAC;gBACtC,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC3B,YAAY,CAAC,cAAc,CAAC,CAAC;gBAC7B,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,CAAC;YAAA,CACd,CAAC;YAEF,MAAM,IAAI,GAAG,CAAC,MAA4D,EAAQ,EAAE,CAAC;gBACpF,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,cAAc,GAAG,MAAM,CAAC;gBACxB,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACtC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;oBACjC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;wBAAE,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBACxE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAAA,CACV,EAAE,IAAI,CAAC,CAAC;YAAA,CACT,CAAC;YAEF,MAAM,YAAY,GAAG,GAAS,EAAE,CAAC;gBAChC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAClB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC;oBACnE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE;iBACrC,CAAC,CAAC;YAAA,CACH,CAAC;YAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAQ,EAAE,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,OAAO;gBACzB,IAAI,MAAe,CAAC;gBACpB,IAAI,CAAC;oBACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;gBAAC,MAAM,CAAC;oBACR,OAAO;gBACR,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;oBAAE,OAAO;gBAC/D,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACxD,IAAI,CAAC,QAAQ;oBAAE,OAAO;gBACtB,KAAK,IAAI,CAAC,CAAC;gBACX,IAAI,QAAQ,CAAC,IAAI;oBAAE,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAC1C,IAAI,QAAQ,CAAC,UAAU,KAAK,OAAO,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS;oBAAE,eAAe,GAAG,IAAI,CAAC;gBACjG,YAAY,EAAE,CAAC;gBACf,IAAI,KAAK,IAAI,mBAAmB,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS;oBAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAAA,CAC1F,CAAC;YAEF,MAAM,YAAY,GAAG,GAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,UAAU,CAC9B,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,IAAI,2BAA2B,CAAC,EAAE,2BAA2B,CAAC,CACxG,CAAC;YACF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE,CAAC;gBACnD,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,UAAU,GAAG,yBAAyB,EAAE,CAAC;oBAC5C,eAAe,GAAG,IAAI,CAAC;oBACvB,IAAI,CAAC,aAAa,CAAC,CAAC;oBACpB,OAAO;gBACR,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,yBAAyB,EAAE,CAAC;oBACnE,MAAM,GAAG,EAAE,CAAC;oBACZ,eAAe,GAAG,IAAI,CAAC;oBACvB,OAAO;gBACR,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC3B,KAAK,MAAM,IAAI,IAAI,KAAK;oBAAE,WAAW,CAAC,IAAI,CAAC,CAAC;YAAA,CAC5C,CAAC,CAAC;YACH,4EAA4E;YAC5E,wEAAwE;YACxE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACzC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,IAAI,EAAE;oBAAE,WAAW,CAAC,MAAM,CAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAA,CACzC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;gBAAE,YAAY,EAAE,CAAC;;gBACvC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAAA,CAC7E,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,cAAc,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/F,OAAO;YACN,MAAM;YACN,KAAK;YACL,QAAQ;YACR,MAAM,EAAE,aAAa,CAAC,KAAK;YAC3B,eAAe,EAAE,aAAa,CAAC,SAAS;SACxC,CAAC;IACH,CAAC;YAAS,CAAC;QACV,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;AAAA,CACD;AAED,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACvG,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACjG,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;CAC5F,CAAC,CAAC;AAEH,SAAS,aAAa,CAAC,MAA6B,EAAU;IAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,gCAAgC,CAAC;IACxE,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,gCAAgC,MAAM,EAAE,CAAC;IACnF,OAAO,oCAAoC,MAAM,CAAC,MAAM,0BAA0B,MAAM,EAAE,CAAC;AAAA,CAC3F;AAED,6EAA6E;AAC7E,MAAM,UAAU,wBAAwB,CAAC,EAAgB,EAAE,UAAgC,EAAQ;IAClG,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAC1G,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EACvD,2BAA2B,CAC3B,CAAC;IACF,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,IAAI,aAAiC,CAAC;IACtC,IAAI,mBAAuC,CAAC;IAC5C,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QACpC,OAAO;YACN,YAAY,EAAE,GAAG,KAAK,CAAC,YAAY,ycAAyc;SAC5e,CAAC;IAAA,CACF,CAAC,CAAC;IACH,EAAE,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,wBAAwB,EAAE;YAAE,OAAO;QAClE,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAC/B,aAAa,KAAK,SAAS,CAAC;QAC5B,mBAAmB,GAAG,SAAS,CAAC;QAChC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;QACrC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;QAC7C,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,GAAG,aAAa,CAAC;QACtD,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC;IAAA,CAC7C,CAAC,CAAC;IACH,EAAE,CAAC,YAAY,CAAC;QACf,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,MAAM;QACb,WAAW,EACV,yIAAyI;QAC1I,UAAU,EAAE,sBAAsB;QAClC,aAAa,EAAE,YAAY;QAC3B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE;YACzD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oDAAoD,EAAE,CAAC;oBACvF,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAA8B;iBACnE,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC;gBAC7B,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4CAA4C,EAAE,CAAC;oBAC/E,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAA8B;iBACnE,CAAC;YACH,CAAC;YACD,IAAI,aAAa,IAAI,6BAA6B,EAAE,CAAC;gBACpD,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yDAAyD,EAAE,CAAC;oBAC5F,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAA8B;iBACnE,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAsB;gBAClC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,EAAE;gBACnD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;gBACzC,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,MAAM;aACN,CAAC;YACF,IACC,MAAM,CAAC,UAAU,CAChB,oBAAoB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,aAAa,CAAC,EACrF,MAAM,CACN,GAAG,YAAY,EACf,CAAC;gBACF,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mDAAmD,EAAE,CAAC;oBACtF,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAA8B;iBACnE,CAAC;YACH,CAAC;YAED,aAAa,IAAI,CAAC,CAAC;YACnB,IAAI,CAAC;gBACJ,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;gBAClC,aAAa,KAAK,UAAU,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;oBACvC,GAAG,OAAO;oBACV,aAAa,EAAE;wBACd,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE;wBAC5C,MAAM,EAAE,YAAY;wBACpB,KAAK;wBACL,aAAa;wBACb,eAAe,EAAE,mBAAmB,IAAI,aAAa;qBACrD;oBACD,SAAS,EAAE,eAAe;oBAC1B,QAAQ;iBACR,CAAC,CAAC;gBACH,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxD,OAAO,EAAE;wBACR,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,eAAe,EAAE,MAAM,CAAC,eAAe;qBACX;iBAC7B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sCAAsC,EAAE,CAAC;oBACzE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAA8B;iBACnE,CAAC;YACH,CAAC;oBAAS,CAAC;gBACV,aAAa,IAAI,CAAC,CAAC;YACpB,CAAC;QAAA,CACD;QACD,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE;YACxB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,YAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAAA,CACrE;QACD,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;YACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAwC,CAAC;YAChE,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS;gBAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,YAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxF,IAAI,OAAO,EAAE,MAAM,KAAK,WAAW;gBAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClG,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAAA,CACjE;KACD,CAAC,CAAC;AAAA,CACH;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACzC,EAAgB,EAChB,aAA4B,EAC5B,UAA4C,EACrC;IACP,EAAE,CAAC,EAAE,CAAC,yBAAyB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO;QACR,CAAC;QAED,2EAA2E;QAC3E,yEAAyE;QACzE,6CAA6C;QAC7C,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAC/B,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,GAAG,oBAAoB,CAAC;QACnE,KAAK,CAAC,OAAO,CAAC,2BAA2B,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC;QAClE,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC;QACjE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC;QACnD,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;QAC7C,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC;QACpE,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,aAAa,CAAC,eAAe,CAAC;QACxE,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC;QAC3D,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CAAC;QAC/C,IAAI,CAAC,UAAU;YAAE,OAAO;QAExB,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,iBAAiB,CAAC;YAChD,GAAG,aAAa;YAChB,SAAS;YACT,MAAM,EAAE,GAAG,CAAC,MAAM;SAClB,CAAC,CAAC;QACH,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAAA,CAC1D,CAAC,CAAC;AAAA,CACH;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAAgB,EAAQ;IACtE,4BAA4B,EAAE,CAAC;IAC/B,IAAI,yBAAyB,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,GAAG,CAAC;IAC1E,+BAA+B,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,IAAI,wBAAwB,EAAE,EAAE,CAAC;YAChC,8BAA8B,EAAE,CAAC;YACjC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,OAAO;IACR,CAAC;IACD,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;IACvC,MAAM,iBAAiB,GAAkB;QACxC,SAAS,EAAE,aAAa;QACxB,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,aAAa;QACpB,aAAa,EAAE,aAAa;QAC5B,eAAe,EAAE,aAAa;KAC9B,CAAC;IACF,0BAA0B,CACzB,EAAE,EACF,aAAa,IAAI,iBAAiB,EAClC,aAAa,IAAI,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAC3E,CAAC;AAAA,CACF","sourcesContent":["/**\n * Internal delegated-worker runtime.\n *\n * This file deliberately does not register a user-facing tool by default. The\n * authenticated Hub policy must advertise delegation before the GitNexus\n * extension calls registerDelegateTaskTool(). The CLI owns process isolation\n * and streaming UX; the Hub owns one-time worker authorization and routing.\n */\n\nimport { execFile, spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport { Type } from \"typebox\";\nimport { AUTO_MODEL_ID, AUTO_PROVIDER_ID, isAutoModel } from \"../../core/auto-model.ts\";\nimport type { ExtensionAPI } from \"../../core/extensions/types.ts\";\nimport { withFileMutationQueue } from \"../../core/tools/index.ts\";\nimport type { GitNexusConfig } from \"../gitnexus/config.ts\";\nimport { resolveGitNexusConfig } from \"../gitnexus/config.ts\";\nimport { hubApiBase } from \"../gitnexus/device-auth.ts\";\n\nexport const DELEGATE_TASK_TOOL_NAME = \"delegate_task\";\nexport const INTERNAL_WORKER_MARKER_ENV = \"NEXUS_INTERNAL_DELEGATED_WORKER\";\nexport const INTERNAL_WORKER_SESSION_ENV = \"NEXUS_INTERNAL_WORKER_SESSION_ID\";\nexport const INTERNAL_WORKER_TASK_ENV = \"NEXUS_INTERNAL_WORKER_TASK_ID\";\nexport const INTERNAL_WORKER_RUN_ENV = \"NEXUS_INTERNAL_WORKER_RUN_ID\";\nexport const INTERNAL_WORKER_ROOT_REQUEST_ENV = \"NEXUS_INTERNAL_WORKER_ROOT_REQUEST_ID\";\nexport const INTERNAL_WORKER_PARENT_REQUEST_ENV = \"NEXUS_INTERNAL_WORKER_PARENT_REQUEST_ID\";\nexport const INTERNAL_WORKER_GRANT_HEADER = \"x-nexus-worker-grant\";\nexport const INTERNAL_WORKER_TASK_HEADER = \"x-nexus-worker-task-id\";\nexport const SESSION_AFFINITY_HEADER = \"x-session-affinity\";\nexport const RUN_ID_HEADER = \"x-nexus-run-id\";\nexport const REQUEST_ID_HEADER = \"x-nexus-request-id\";\nexport const ROOT_REQUEST_ID_HEADER = \"x-nexus-root-request-id\";\nexport const PARENT_REQUEST_ID_HEADER = \"x-nexus-parent-request-id\";\nexport const DELEGATION_ID_HEADER = \"x-nexus-delegation-id\";\nexport const REQUEST_SCOPE_HEADER = \"x-nexus-request-scope\";\nexport const MAX_DELEGATED_TURNS = 50;\nexport const DELEGATED_WORKER_TIMEOUT_MS = 5 * 60 * 1000;\nexport const DELEGATED_OUTPUT_CAP_BYTES = 32 * 1024;\nexport const DELEGATED_EVENT_CAP_BYTES = 1024 * 1024;\nexport const MAX_DELEGATED_TASK_BYTES = 32 * 1024;\n\nconst WORKER_GRANT_TIMEOUT_MS = 10_000;\nconst INVALID_WORKER_GRANT = \"unavailable\";\nconst MAX_PARALLEL_MUTATING_WORKERS = 1;\n\nexport const DELEGATED_WORKER_TOOLS = [\n\t\"read\",\n\t\"grep\",\n\t\"find\",\n\t\"ls\",\n\t\"bash\",\n\t\"write\",\n\t\"edit\",\n\t\"web_search\",\n\t\"gitnexus_query\",\n\t\"gitnexus_context\",\n\t\"gitnexus_impact\",\n\t\"gitnexus_detect_changes\",\n\t\"gitnexus_cypher\",\n\t\"gitnexus_list_repos\",\n] as const;\n\nconst WORKER_SYSTEM_PROMPT = `You are an internal delegated worker for Nexus Agent.\n\nComplete only the self-contained task you were delegated. Investigate before editing, follow local instructions, and verify any changed behavior. Do not delegate work or broaden scope. Do not discuss model names, providers, routing, credits, or internal architecture.\n\nFinish with a concise report containing:\n- work completed or findings\n- verification performed and results\n- blockers or remaining risks`;\n\nexport type DelegationStatus =\n\t| \"running\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"aborted\"\n\t| \"timeout\"\n\t| \"turn_limit\"\n\t| \"event_limit\";\n\nexport interface DelegationDetails {\n\tstatus: DelegationStatus;\n\tturns: number;\n\texitCode?: number;\n\toutputTruncated?: boolean;\n}\n\nexport interface WorkerGrant {\n\t/** Opaque, short-lived grant minted by the Hub for one worker completion. */\n\ttoken: string;\n\texpiresAt: string;\n}\n\nexport interface DelegationCapability {\n\tenabled: true;\n\tversion: 1;\n\tmaxParallel: number;\n\tmaxTaskBytes: number;\n\tworkerTimeoutMs: number;\n}\n\nexport interface WorkerGrantRequest {\n\tsessionId: string;\n\ttaskId: string;\n\trunId: string;\n\trootRequestId: string;\n\tparentRequestId: string;\n\trequestId: string;\n\tsignal: AbortSignal | undefined;\n}\n\nexport interface DelegationController {\n\tcreateWorkerGrant(request: WorkerGrantRequest): Promise<WorkerGrant>;\n}\n\nexport interface DelegationRequest {\n\ttask: string;\n\tacceptanceCriteria: string[];\n\trelevantPaths: string[];\n\tcwd: string;\n\tsignal: AbortSignal | undefined;\n}\n\nexport interface WorkerContext {\n\tsessionId: string;\n\ttaskId: string;\n\trunId: string;\n\trootRequestId: string;\n\tparentRequestId: string;\n}\n\nexport interface DelegatedWorkerOptions extends DelegationRequest {\n\tworkerContext: WorkerContext;\n\ttimeoutMs?: number;\n\tonUpdate?: (result: AgentToolResult<DelegationDetails>) => void;\n}\n\nexport interface DelegatedWorkerResult {\n\tstatus: Exclude<DelegationStatus, \"running\">;\n\tturns: number;\n\texitCode: number;\n\toutput: string;\n\toutputTruncated: boolean;\n}\n\ninterface AssistantSnapshot {\n\ttext: string;\n\tstopReason?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction parseAssistantSnapshot(value: unknown): AssistantSnapshot | undefined {\n\tif (!isRecord(value) || value.role !== \"assistant\" || !Array.isArray(value.content)) return undefined;\n\tconst text = value.content\n\t\t.filter(isRecord)\n\t\t.filter((part) => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text as string)\n\t\t.join(\"\\n\");\n\treturn {\n\t\ttext,\n\t\t...(typeof value.stopReason === \"string\" ? { stopReason: value.stopReason } : {}),\n\t};\n}\n\nexport function composeDelegatedTask(\n\ttask: string,\n\tacceptanceCriteria: readonly string[],\n\trelevantPaths: readonly string[],\n): string {\n\tconst sections = [`Task:\\n${task.trim()}`];\n\tif (acceptanceCriteria.length > 0) {\n\t\tsections.push(`Acceptance criteria:\\n${acceptanceCriteria.map((criterion) => `- ${criterion}`).join(\"\\n\")}`);\n\t}\n\tif (relevantPaths.length > 0) {\n\t\tsections.push(`Relevant paths:\\n${relevantPaths.map((filePath) => `- ${filePath}`).join(\"\\n\")}`);\n\t}\n\treturn sections.join(\"\\n\\n\");\n}\n\nexport function buildDelegatedWorkerArgs(task: string, promptPath: string): string[] {\n\treturn [\n\t\t\"--mode\",\n\t\t\"json\",\n\t\t\"-p\",\n\t\t\"--no-session\",\n\t\t\"--model\",\n\t\t`${AUTO_PROVIDER_ID}/${AUTO_MODEL_ID}`,\n\t\t\"--tools\",\n\t\tDELEGATED_WORKER_TOOLS.join(\",\"),\n\t\t\"--exclude-tools\",\n\t\t`${DELEGATE_TASK_TOOL_NAME},subagent`,\n\t\t\"--append-system-prompt\",\n\t\tpromptPath,\n\t\ttask,\n\t];\n}\n\nfunction getNexusInvocation(args: string[]): { command: string; args: string[] } {\n\tconst currentScript = process.argv[1];\n\tconst isBunVirtualScript = currentScript?.startsWith(\"/$bunfs/root/\");\n\tif (currentScript && !isBunVirtualScript && fs.existsSync(currentScript)) {\n\t\treturn { command: process.execPath, args: [currentScript, ...args] };\n\t}\n\n\tconst execName = path.basename(process.execPath).toLowerCase();\n\tconst isGenericRuntime = /^(node|bun)(\\.exe)?$/.test(execName);\n\treturn isGenericRuntime ? { command: \"nexus\", args } : { command: process.execPath, args };\n}\n\nasync function writeWorkerPrompt(): Promise<{ dir: string; filePath: string }> {\n\tconst dir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"nexus-worker-\"));\n\tconst filePath = path.join(dir, \"system.md\");\n\tawait withFileMutationQueue(filePath, async () => {\n\t\tawait fs.promises.writeFile(filePath, WORKER_SYSTEM_PROMPT, { encoding: \"utf8\", mode: 0o600 });\n\t});\n\treturn { dir, filePath };\n}\n\nfunction truncateUtf8(value: string, cap: number): { value: string; truncated: boolean } {\n\tif (Buffer.byteLength(value, \"utf8\") <= cap) return { value, truncated: false };\n\tconst suffix = \"\\n\\n[Report truncated]\";\n\tlet truncated = value.slice(0, Math.max(0, cap - Buffer.byteLength(suffix, \"utf8\")));\n\twhile (Buffer.byteLength(`${truncated}${suffix}`, \"utf8\") > cap) truncated = truncated.slice(0, -1);\n\treturn { value: `${truncated}${suffix}`, truncated: true };\n}\n\nexport function createHubDelegationController(\n\tconfig: GitNexusConfig,\n\toptions: { fetchImpl?: typeof fetch; timeoutMs?: number } = {},\n): DelegationController {\n\tconst fetchImpl = options.fetchImpl ?? fetch;\n\treturn {\n\t\tasync createWorkerGrant(request) {\n\t\t\tconst controller = new AbortController();\n\t\t\tconst onAbort = (): void => controller.abort();\n\t\t\tif (request.signal?.aborted) controller.abort();\n\t\t\telse request.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\tconst timeout = setTimeout(() => controller.abort(), options.timeoutMs ?? WORKER_GRANT_TIMEOUT_MS);\n\t\t\ttry {\n\t\t\t\tconst response = await fetchImpl(`${hubApiBase(config.hubUrl)}/llm/worker-grants`, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"content-type\": \"application/json\",\n\t\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\tauthorization: `Bearer ${config.token}`,\n\t\t\t\t\t\t[RUN_ID_HEADER]: request.runId,\n\t\t\t\t\t\t[REQUEST_ID_HEADER]: request.requestId,\n\t\t\t\t\t\t[ROOT_REQUEST_ID_HEADER]: request.rootRequestId,\n\t\t\t\t\t\t[PARENT_REQUEST_ID_HEADER]: request.parentRequestId,\n\t\t\t\t\t\t[DELEGATION_ID_HEADER]: request.taskId,\n\t\t\t\t\t\t[REQUEST_SCOPE_HEADER]: \"worker\",\n\t\t\t\t\t\t...(config.deviceFingerprint ? { \"x-device-fingerprint\": config.deviceFingerprint } : {}),\n\t\t\t\t\t\t...(config.deviceName ? { \"x-device-name\": config.deviceName } : {}),\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify({ sessionId: request.sessionId, taskId: request.taskId }),\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t});\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tawait response.body?.cancel().catch(() => {});\n\t\t\t\t\tthrow new Error(\"Worker authorization unavailable\");\n\t\t\t\t}\n\t\t\t\tconst body: unknown = await response.json();\n\t\t\t\tif (\n\t\t\t\t\t!isRecord(body) ||\n\t\t\t\t\ttypeof body.grant !== \"string\" ||\n\t\t\t\t\t!body.grant.trim() ||\n\t\t\t\t\ttypeof body.expiresAt !== \"string\" ||\n\t\t\t\t\t!body.expiresAt.trim() ||\n\t\t\t\t\t!Number.isFinite(Date.parse(body.expiresAt))\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\"Invalid worker authorization response\");\n\t\t\t\t}\n\t\t\t\treturn { token: body.grant, expiresAt: body.expiresAt };\n\t\t\t} finally {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\trequest.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function isDelegatedWorkerProcess(env: NodeJS.ProcessEnv = process.env): boolean {\n\treturn env[INTERNAL_WORKER_MARKER_ENV] === \"1\";\n}\n\nexport const DELEGATION_MODE_ENV = \"NEXUS_DELEGATION_MODE\";\n\n/**\n * `NEXUS_DELEGATION_MODE=external` hands delegation to an external\n * orchestrator (e.g. the pi-subagents package): delegate_task is not\n * registered, so the model sees exactly one delegation surface. Worker-scope\n * billing still works — children marked via the nexus-subagent-worker wrapper\n * self-mint grants exactly like delegate_task workers do.\n */\nexport const BIG_MODEL_AGENTS_ENV = \"NEXUS_BIG_MODEL_AGENTS\";\nexport const WORKER_SCOPE_ENV = \"NEXUS_WORKER_SCOPE\";\nexport const PARENT_POLICY_ENV = \"NEXUS_PARENT_POLICY\";\nexport const BUNDLED_SUBAGENTS_ENV = \"NEXUS_BUNDLED_SUBAGENTS\";\nexport const BUNDLED_PACKAGES_ENV = \"NEXUS_BUNDLED_PACKAGES\";\nexport const PI_SUBAGENT_CHILD_AGENT_ENV = \"PI_SUBAGENT_CHILD_AGENT\";\nexport const PI_SUBAGENT_BINARY_ENV = \"PI_SUBAGENT_PI_BINARY\";\nexport const DEFAULT_BIG_MODEL_AGENTS = [\"oracle\"] as const;\n\n/** pi-subagents ships inside the CLI unless bundled packages are switched off. */\nexport function bundledSubagentsAvailable(env: NodeJS.ProcessEnv = process.env): boolean {\n\tconst value = env[BUNDLED_PACKAGES_ENV]?.trim().toLowerCase();\n\treturn !(value === \"off\" || value === \"0\" || value === \"false\");\n}\n\n/**\n * Delegation runs through the bundled pi-subagents tool by default; the\n * legacy delegate_task worker is opt-in via NEXUS_DELEGATION_MODE=internal.\n */\nexport function isExternalDelegationMode(env: NodeJS.ProcessEnv = process.env): boolean {\n\tconst mode = env[DELEGATION_MODE_ENV]?.trim().toLowerCase();\n\tif (mode === \"internal\") return false;\n\tif (mode === \"external\") return true;\n\treturn bundledSubagentsAvailable(env);\n}\n\n/** Agents that keep billing the orchestrator deployment (big model). */\nexport function bigModelAgents(env: NodeJS.ProcessEnv = process.env): Set<string> {\n\tconst raw = env[BIG_MODEL_AGENTS_ENV];\n\tif (raw === undefined) return new Set(DEFAULT_BIG_MODEL_AGENTS);\n\treturn new Set(\n\t\traw\n\t\t\t.split(\",\")\n\t\t\t.map((name) => name.trim())\n\t\t\t.filter(Boolean),\n\t);\n}\n\n/**\n * A process spawned by pi-subagents announces its agent in PI_SUBAGENT_CHILD_AGENT.\n * Mark it as a delegated worker so every model turn self-mints a worker grant\n * and bills the worker deployment. Big-model agents are explicitly unmarked,\n * even when a marker was inherited from a worker parent (nested fan-out).\n * Context is always regenerated: a worker deletes its own context before\n * spawning tools, so nothing inherited is trustworthy.\n */\nexport function applyPiSubagentChildWorkerScope(\n\tenv: NodeJS.ProcessEnv = process.env,\n\tuuid: () => string = randomUUID,\n): boolean {\n\tconst agent = env[PI_SUBAGENT_CHILD_AGENT_ENV]?.trim();\n\tif (!agent) return false;\n\tconst contextKeys = [\n\t\tINTERNAL_WORKER_SESSION_ENV,\n\t\tINTERNAL_WORKER_TASK_ENV,\n\t\tINTERNAL_WORKER_RUN_ENV,\n\t\tINTERNAL_WORKER_ROOT_REQUEST_ENV,\n\t\tINTERNAL_WORKER_PARENT_REQUEST_ENV,\n\t];\n\tconst scopeOff = env[WORKER_SCOPE_ENV]?.trim().toLowerCase() === \"off\";\n\tif (scopeOff || bigModelAgents(env).has(agent)) {\n\t\tdelete env[INTERNAL_WORKER_MARKER_ENV];\n\t\tfor (const key of contextKeys) delete env[key];\n\t\treturn false;\n\t}\n\tenv[INTERNAL_WORKER_MARKER_ENV] = \"1\";\n\tfor (const key of contextKeys) env[key] = uuid();\n\treturn true;\n}\n\n/**\n * The executable pi-subagents should spawn for children: this CLI itself.\n * A compiled standalone binary is its own executable; under node/bun the\n * built cli.js carries a shebang and the executable bit from the build.\n */\nexport function resolveBundledChildBinary(\n\targv1: string | undefined = process.argv[1],\n\texecPath: string = process.execPath,\n\tfsImpl: Pick<typeof fs, \"realpathSync\" | \"accessSync\" | \"constants\"> = fs,\n): string | undefined {\n\tconst execName = path.basename(execPath).toLowerCase();\n\tif (!/^(node|bun)(\\.exe)?$/.test(execName)) return execPath;\n\tif (!argv1) return undefined;\n\ttry {\n\t\tconst real = fsImpl.realpathSync(argv1);\n\t\tif (!/cli\\.(js|mjs|cjs)$/.test(real)) return undefined;\n\t\tfsImpl.accessSync(real, fsImpl.constants.X_OK);\n\t\treturn real;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function applyBundledChildBinaryDefault(\n\tenv: NodeJS.ProcessEnv = process.env,\n\tresolved: string | undefined = resolveBundledChildBinary(),\n): void {\n\tif (env[PI_SUBAGENT_BINARY_ENV]?.trim() || !resolved) return;\n\tenv[PI_SUBAGENT_BINARY_ENV] = resolved;\n}\n\nexport const BLOCKED_ORCHESTRATOR_TOOLS = new Set([\"bash\", \"write\", \"edit\", DELEGATE_TASK_TOOL_NAME]);\n\nexport const ORCHESTRATOR_GUIDANCE = [\n\t\"Delegation policy: you are the orchestrator. Perform implementation, mutation,\",\n\t\"shell commands, tests, and long repetitive tool loops through the `subagent`\",\n\t\"tool (worker for implementation, reviewer for checks, scout for codebase\",\n\t\"exploration, researcher for web research). Direct bash/write/edit are disabled\",\n\t\"in this session. Reading files and querying the GitNexus graph directly is fine\",\n\t\"and unlimited — prefer gitnexus_query/context/impact to locate code before\",\n\t\"delegating. For broad or multi-source research, fan out scout or researcher\",\n\t\"subagents (or use /parallel-research) and run long investigations in the\",\n\t\"background (async) instead of one long foreground run. Give each subagent a\",\n\t\"narrow, self-contained task rather than one sprawling one. Keep planning,\",\n\t\"user communication, and final review here.\",\n].join(\" \");\n\nexport function isOrchestratorPolicyDisabled(env: NodeJS.ProcessEnv = process.env): boolean {\n\treturn (\n\t\tenv[PARENT_POLICY_ENV]?.trim().toLowerCase() === \"off\" ||\n\t\tenv[INTERNAL_WORKER_MARKER_ENV] === \"1\" ||\n\t\tBoolean(env[PI_SUBAGENT_CHILD_AGENT_ENV]?.trim())\n\t);\n}\n\n/**\n * Orchestrator-side policy for bundled subagents: hard-block mutating tools\n * (the cost guarantee — implementation always bills the worker deployment)\n * and steer everything else by prompt. No read budget: reads and graph calls\n * are cheap on cached input and capping them measurably hurt output quality.\n */\nexport function registerOrchestratorPolicy(pi: ExtensionAPI, env: NodeJS.ProcessEnv = process.env): void {\n\tpi.on(\"before_agent_start\", (event, ctx) => {\n\t\tif (isOrchestratorPolicyDisabled(env) || !isAutoModel(ctx.model)) return;\n\t\treturn { systemPrompt: `${event.systemPrompt}\\n\\n${ORCHESTRATOR_GUIDANCE}` };\n\t});\n\tpi.on(\"tool_call\", (event, ctx) => {\n\t\tif (isOrchestratorPolicyDisabled(env) || !isAutoModel(ctx.model)) return;\n\t\tif (!BLOCKED_ORCHESTRATOR_TOOLS.has(event.toolName)) return;\n\t\treturn {\n\t\t\tblock: true,\n\t\t\treason:\n\t\t\t\t\"This orchestrator session does not run mutating tools directly. Use the `subagent` tool \" +\n\t\t\t\t\"(worker for implementation, reviewer for checks, scout for exploration), then review its report.\",\n\t\t};\n\t});\n}\n\n/**\n * Nexus-branded aliases for the upstream pi-subagents env knobs: users set\n * NEXUS_SUBAGENT_*, we copy onto the PI_SUBAGENT_* names the package reads.\n * NEXUS_SUBAGENT_BINARY maps to PI_SUBAGENT_PI_BINARY (the child-spawn\n * wrapper hook); every other NEXUS_SUBAGENT_X maps to PI_SUBAGENT_X.\n * Explicit PI_* values always win — aliases never overwrite them.\n */\nexport function applyNexusSubagentEnvAliases(env: NodeJS.ProcessEnv = process.env): void {\n\tconst binary = env.NEXUS_SUBAGENT_BINARY?.trim();\n\tif (binary && !env.PI_SUBAGENT_PI_BINARY?.trim()) {\n\t\tenv.PI_SUBAGENT_PI_BINARY = binary;\n\t}\n\tfor (const [key, value] of Object.entries(env)) {\n\t\tif (!key.startsWith(\"NEXUS_SUBAGENT_\") || key === \"NEXUS_SUBAGENT_BINARY\") continue;\n\t\tif (!value?.trim()) continue;\n\t\tconst target = `PI_SUBAGENT_${key.slice(\"NEXUS_SUBAGENT_\".length)}`;\n\t\tif (!env[target]?.trim()) env[target] = value;\n\t}\n}\n\n/** Capture task routing once, then remove it before worker tools can inherit it. */\nexport function consumeWorkerContext(env: NodeJS.ProcessEnv = process.env): WorkerContext | undefined {\n\tif (!isDelegatedWorkerProcess(env)) return undefined;\n\tconst sessionId = env[INTERNAL_WORKER_SESSION_ENV]?.trim();\n\tconst taskId = env[INTERNAL_WORKER_TASK_ENV]?.trim();\n\tconst runId = env[INTERNAL_WORKER_RUN_ENV]?.trim();\n\tconst rootRequestId = env[INTERNAL_WORKER_ROOT_REQUEST_ENV]?.trim();\n\tconst parentRequestId = env[INTERNAL_WORKER_PARENT_REQUEST_ENV]?.trim();\n\tdelete env[INTERNAL_WORKER_SESSION_ENV];\n\tdelete env[INTERNAL_WORKER_TASK_ENV];\n\tdelete env[INTERNAL_WORKER_RUN_ENV];\n\tdelete env[INTERNAL_WORKER_ROOT_REQUEST_ENV];\n\tdelete env[INTERNAL_WORKER_PARENT_REQUEST_ENV];\n\tif (!sessionId || !taskId || !runId || !rootRequestId || !parentRequestId) return undefined;\n\treturn { sessionId, taskId, runId, rootRequestId, parentRequestId };\n}\n\nfunction killProcessTree(pid: number | undefined, signal: NodeJS.Signals): void {\n\tif (pid === undefined) return;\n\tif (process.platform === \"win32\") {\n\t\texecFile(\"taskkill\", [\"/T\", \"/F\", \"/PID\", String(pid)], () => undefined);\n\t\treturn;\n\t}\n\ttry {\n\t\tprocess.kill(-pid, signal);\n\t} catch {\n\t\t// The detached process group may already have exited.\n\t}\n}\n\nexport async function runDelegatedWorker(options: DelegatedWorkerOptions): Promise<DelegatedWorkerResult> {\n\tconst prompt = await writeWorkerPrompt();\n\tconst task = composeDelegatedTask(options.task, options.acceptanceCriteria, options.relevantPaths);\n\tconst args = buildDelegatedWorkerArgs(task, prompt.filePath);\n\tlet output = \"\";\n\tlet turns = 0;\n\tlet terminalStatus: Exclude<DelegationStatus, \"running\" | \"completed\" | \"failed\"> | undefined;\n\tlet assistantFailed = false;\n\tlet eventBytes = 0;\n\n\ttry {\n\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\tconst invocation = getNexusInvocation(args);\n\t\t\tconst child = spawn(invocation.command, invocation.args, {\n\t\t\t\tcwd: options.cwd,\n\t\t\t\tdetached: true,\n\t\t\t\tenv: {\n\t\t\t\t\t...process.env,\n\t\t\t\t\t[INTERNAL_WORKER_MARKER_ENV]: \"1\",\n\t\t\t\t\t[INTERNAL_WORKER_SESSION_ENV]: options.workerContext.sessionId,\n\t\t\t\t\t[INTERNAL_WORKER_TASK_ENV]: options.workerContext.taskId,\n\t\t\t\t\t[INTERNAL_WORKER_RUN_ENV]: options.workerContext.runId,\n\t\t\t\t\t[INTERNAL_WORKER_ROOT_REQUEST_ENV]: options.workerContext.rootRequestId,\n\t\t\t\t\t[INTERNAL_WORKER_PARENT_REQUEST_ENV]: options.workerContext.parentRequestId,\n\t\t\t\t},\n\t\t\t\tshell: false,\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\twindowsHide: true,\n\t\t\t});\n\t\t\tlet buffer = \"\";\n\t\t\tlet settled = false;\n\t\t\tlet stopped = false;\n\t\t\tlet forceKillTimer: NodeJS.Timeout | undefined;\n\n\t\t\tconst finish = (code: number): void => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tclearTimeout(timeoutTimer);\n\t\t\t\tclearTimeout(forceKillTimer);\n\t\t\t\toptions.signal?.removeEventListener(\"abort\", abortHandler);\n\t\t\t\tresolve(code);\n\t\t\t};\n\n\t\t\tconst stop = (status: \"aborted\" | \"timeout\" | \"turn_limit\" | \"event_limit\"): void => {\n\t\t\t\tif (stopped) return;\n\t\t\t\tstopped = true;\n\t\t\t\tterminalStatus = status;\n\t\t\t\tkillProcessTree(child.pid, \"SIGTERM\");\n\t\t\t\tforceKillTimer = setTimeout(() => {\n\t\t\t\t\tif (process.platform !== \"win32\") killProcessTree(child.pid, \"SIGKILL\");\n\t\t\t\t\tfinish(1);\n\t\t\t\t}, 5000);\n\t\t\t};\n\n\t\t\tconst emitProgress = (): void => {\n\t\t\t\toptions.onUpdate?.({\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work is in progress.\" }],\n\t\t\t\t\tdetails: { status: \"running\", turns },\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst processLine = (line: string): void => {\n\t\t\t\tif (!line.trim()) return;\n\t\t\t\tlet parsed: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tparsed = JSON.parse(line);\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!isRecord(parsed) || parsed.type !== \"message_end\") return;\n\t\t\t\tconst snapshot = parseAssistantSnapshot(parsed.message);\n\t\t\t\tif (!snapshot) return;\n\t\t\t\tturns += 1;\n\t\t\t\tif (snapshot.text) output = snapshot.text;\n\t\t\t\tif (snapshot.stopReason === \"error\" || snapshot.stopReason === \"aborted\") assistantFailed = true;\n\t\t\t\temitProgress();\n\t\t\t\tif (turns >= MAX_DELEGATED_TURNS && snapshot.stopReason === \"toolUse\") stop(\"turn_limit\");\n\t\t\t};\n\n\t\t\tconst abortHandler = (): void => stop(\"aborted\");\n\t\t\tconst timeoutTimer = setTimeout(\n\t\t\t\t() => stop(\"timeout\"),\n\t\t\t\tMath.min(Math.max(1_000, options.timeoutMs ?? DELEGATED_WORKER_TIMEOUT_MS), DELEGATED_WORKER_TIMEOUT_MS),\n\t\t\t);\n\t\t\tchild.stdout.on(\"data\", (chunk: Buffer | string) => {\n\t\t\t\teventBytes += Buffer.byteLength(chunk);\n\t\t\t\tif (eventBytes > DELEGATED_EVENT_CAP_BYTES) {\n\t\t\t\t\tassistantFailed = true;\n\t\t\t\t\tstop(\"event_limit\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbuffer += chunk.toString();\n\t\t\t\tif (Buffer.byteLength(buffer, \"utf8\") > DELEGATED_EVENT_CAP_BYTES) {\n\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\tassistantFailed = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\t\tbuffer = lines.pop() ?? \"\";\n\t\t\t\tfor (const line of lines) processLine(line);\n\t\t\t});\n\t\t\t// Consume stderr so a noisy child cannot block. Raw provider/process output\n\t\t\t// is intentionally not retained or exposed to the orchestrator or user.\n\t\t\tchild.stderr.on(\"data\", () => undefined);\n\t\t\tchild.on(\"close\", (code) => {\n\t\t\t\tif (buffer.trim()) processLine(buffer);\n\t\t\t\tfinish(code ?? (terminalStatus ? 1 : 0));\n\t\t\t});\n\t\t\tchild.on(\"error\", () => finish(1));\n\t\t\tif (options.signal?.aborted) abortHandler();\n\t\t\telse options.signal?.addEventListener(\"abort\", abortHandler, { once: true });\n\t\t});\n\n\t\tconst limitedOutput = truncateUtf8(output, DELEGATED_OUTPUT_CAP_BYTES);\n\t\tconst status = terminalStatus ?? (exitCode === 0 && !assistantFailed ? \"completed\" : \"failed\");\n\t\treturn {\n\t\t\tstatus,\n\t\t\tturns,\n\t\t\texitCode,\n\t\t\toutput: limitedOutput.value,\n\t\t\toutputTruncated: limitedOutput.truncated,\n\t\t};\n\t} finally {\n\t\tawait fs.promises.rm(prompt.dir, { recursive: true, force: true });\n\t}\n}\n\nconst DelegateTaskParameters = Type.Object({\n\ttask: Type.String({ description: \"A self-contained task with explicit boundaries\", maxLength: 32_768 }),\n\tacceptanceCriteria: Type.Optional(Type.Array(Type.String({ maxLength: 2000 }), { maxItems: 10 })),\n\trelevantPaths: Type.Optional(Type.Array(Type.String({ maxLength: 1000 }), { maxItems: 20 })),\n});\n\nfunction resultContent(result: DelegatedWorkerResult): string {\n\tconst report = result.output.trim() || \"No worker report was returned.\";\n\tif (result.status === \"completed\") return `Delegated work completed.\\n\\n${report}`;\n\treturn `Delegated work did not complete (${result.status}).\\n\\nPartial report:\\n${report}`;\n}\n\n/** Register the tool only after the Hub explicitly advertises delegation. */\nexport function registerDelegateTaskTool(pi: ExtensionAPI, capability: DelegationCapability): void {\n\tconst maxTaskBytes = Math.min(Math.max(1, Math.floor(capability.maxTaskBytes)), MAX_DELEGATED_TASK_BYTES);\n\tconst workerTimeoutMs = Math.min(\n\t\tMath.max(1_000, Math.floor(capability.workerTimeoutMs)),\n\t\tDELEGATED_WORKER_TIMEOUT_MS,\n\t);\n\tconst runId = randomUUID();\n\tlet rootRequestId: string | undefined;\n\tlet latestRootRequestId: string | undefined;\n\tlet activeWorkers = 0;\n\tpi.on(\"before_agent_start\", (event, ctx) => {\n\t\tif (!isAutoModel(ctx.model)) return;\n\t\treturn {\n\t\t\tsystemPrompt: `${event.systemPrompt}\\n\\nDelegation guidance: prioritize delegate_task for self-contained, context-heavy investigation, broad searches, audits, repeated tool loops, or substantial implementation so the main conversation stays focused and efficient. Use your own tools directly when the work is small, depends on context already established in this conversation, requires direct verification, or delegation fails or reaches a limit. You remain responsible for the final result.`,\n\t\t};\n\t});\n\tpi.on(\"before_provider_headers\", (event, ctx) => {\n\t\tif (!isAutoModel(ctx.model) || isDelegatedWorkerProcess()) return;\n\t\tconst requestId = randomUUID();\n\t\trootRequestId ??= requestId;\n\t\tlatestRootRequestId = requestId;\n\t\tevent.headers[RUN_ID_HEADER] = runId;\n\t\tevent.headers[REQUEST_ID_HEADER] = requestId;\n\t\tevent.headers[ROOT_REQUEST_ID_HEADER] = rootRequestId;\n\t\tevent.headers[REQUEST_SCOPE_HEADER] = \"root\";\n\t});\n\tpi.registerTool({\n\t\tname: DELEGATE_TASK_TOOL_NAME,\n\t\tlabel: \"Work\",\n\t\tdescription:\n\t\t\t\"Delegate one self-contained task to an isolated internal worker. Keep user communication and final responsibility in this conversation.\",\n\t\tparameters: DelegateTaskParameters,\n\t\texecutionMode: \"sequential\",\n\t\tasync execute(_toolCallId, params, signal, onUpdate, ctx) {\n\t\t\tif (!isAutoModel(ctx.model)) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work is unavailable for the active mode.\" }],\n\t\t\t\t\tdetails: { status: \"failed\", turns: 0 } satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (!ctx.isProjectTrusted()) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work requires a trusted project.\" }],\n\t\t\t\t\tdetails: { status: \"failed\", turns: 0 } satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (activeWorkers >= MAX_PARALLEL_MUTATING_WORKERS) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work is temporarily unavailable for this run.\" }],\n\t\t\t\t\tdetails: { status: \"failed\", turns: 0 } satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst request: DelegationRequest = {\n\t\t\t\ttask: params.task,\n\t\t\t\tacceptanceCriteria: params.acceptanceCriteria ?? [],\n\t\t\t\trelevantPaths: params.relevantPaths ?? [],\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t\tsignal,\n\t\t\t};\n\t\t\tif (\n\t\t\t\tBuffer.byteLength(\n\t\t\t\t\tcomposeDelegatedTask(request.task, request.acceptanceCriteria, request.relevantPaths),\n\t\t\t\t\t\"utf8\",\n\t\t\t\t) > maxTaskBytes\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work is too large for one bounded task.\" }],\n\t\t\t\t\tdetails: { status: \"failed\", turns: 0 } satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tactiveWorkers += 1;\n\t\t\ttry {\n\t\t\t\tconst delegationId = randomUUID();\n\t\t\t\trootRequestId ??= randomUUID();\n\t\t\t\tconst result = await runDelegatedWorker({\n\t\t\t\t\t...request,\n\t\t\t\t\tworkerContext: {\n\t\t\t\t\t\tsessionId: ctx.sessionManager.getSessionId(),\n\t\t\t\t\t\ttaskId: delegationId,\n\t\t\t\t\t\trunId,\n\t\t\t\t\t\trootRequestId,\n\t\t\t\t\t\tparentRequestId: latestRootRequestId ?? rootRequestId,\n\t\t\t\t\t},\n\t\t\t\t\ttimeoutMs: workerTimeoutMs,\n\t\t\t\t\tonUpdate,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: resultContent(result) }],\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstatus: result.status,\n\t\t\t\t\t\tturns: result.turns,\n\t\t\t\t\t\texitCode: result.exitCode,\n\t\t\t\t\t\toutputTruncated: result.outputTruncated,\n\t\t\t\t\t} satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t} catch {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work could not be started.\" }],\n\t\t\t\t\tdetails: { status: \"failed\", turns: 0 } satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t} finally {\n\t\t\t\tactiveWorkers -= 1;\n\t\t\t}\n\t\t},\n\t\trenderCall(_args, theme) {\n\t\t\treturn new Text(theme.fg(\"toolTitle\", theme.bold(\"Working…\")), 0, 0);\n\t\t},\n\t\trenderResult(result, _options, theme) {\n\t\t\tconst details = result.details as DelegationDetails | undefined;\n\t\t\tif (details?.status === \"running\") return new Text(theme.fg(\"muted\", \"Working…\"), 0, 0);\n\t\t\tif (details?.status === \"completed\") return new Text(theme.fg(\"success\", \"Work completed\"), 0, 0);\n\t\t\treturn new Text(theme.fg(\"error\", \"Work needs attention\"), 0, 0);\n\t\t},\n\t});\n}\n\n/**\n * Install a fail-closed header hook for one worker task. A fresh one-time grant\n * is minted for each model turn; no grant is inherited by worker tools.\n */\nexport function registerWorkerGrantHeaders(\n\tpi: ExtensionAPI,\n\tworkerContext: WorkerContext,\n\tcontroller: DelegationController | undefined,\n): void {\n\tpi.on(\"before_provider_headers\", async (event, ctx) => {\n\t\tif (!isAutoModel(ctx.model)) {\n\t\t\tctx.abort();\n\t\t\treturn;\n\t\t}\n\n\t\t// Set an invalid sentinel first. Extension handler errors are reported and\n\t\t// swallowed by the runner, so this prevents a mint failure from silently\n\t\t// falling back to an ungranted root request.\n\t\tconst requestId = randomUUID();\n\t\tevent.headers[INTERNAL_WORKER_GRANT_HEADER] = INVALID_WORKER_GRANT;\n\t\tevent.headers[INTERNAL_WORKER_TASK_HEADER] = workerContext.taskId;\n\t\tevent.headers[SESSION_AFFINITY_HEADER] = workerContext.sessionId;\n\t\tevent.headers[RUN_ID_HEADER] = workerContext.runId;\n\t\tevent.headers[REQUEST_ID_HEADER] = requestId;\n\t\tevent.headers[ROOT_REQUEST_ID_HEADER] = workerContext.rootRequestId;\n\t\tevent.headers[PARENT_REQUEST_ID_HEADER] = workerContext.parentRequestId;\n\t\tevent.headers[DELEGATION_ID_HEADER] = workerContext.taskId;\n\t\tevent.headers[REQUEST_SCOPE_HEADER] = \"worker\";\n\t\tif (!controller) return;\n\n\t\tconst grant = await controller.createWorkerGrant({\n\t\t\t...workerContext,\n\t\t\trequestId,\n\t\t\tsignal: ctx.signal,\n\t\t});\n\t\tevent.headers[INTERNAL_WORKER_GRANT_HEADER] = grant.token;\n\t});\n}\n\nexport default function delegatedWorkerRuntime(pi: ExtensionAPI): void {\n\tapplyNexusSubagentEnvAliases();\n\tif (bundledSubagentsAvailable()) process.env[BUNDLED_SUBAGENTS_ENV] = \"1\";\n\tapplyPiSubagentChildWorkerScope();\n\tconst isWorker = isDelegatedWorkerProcess();\n\tconst workerContext = consumeWorkerContext();\n\tif (!isWorker) {\n\t\tif (isExternalDelegationMode()) {\n\t\t\tapplyBundledChildBinaryDefault();\n\t\t\tregisterOrchestratorPolicy(pi);\n\t\t}\n\t\treturn;\n\t}\n\tconst config = resolveGitNexusConfig();\n\tconst failClosedContext: WorkerContext = {\n\t\tsessionId: \"unavailable\",\n\t\ttaskId: \"unavailable\",\n\t\trunId: \"unavailable\",\n\t\trootRequestId: \"unavailable\",\n\t\tparentRequestId: \"unavailable\",\n\t};\n\tregisterWorkerGrantHeaders(\n\t\tpi,\n\t\tworkerContext ?? failClosedContext,\n\t\tworkerContext && config ? createHubDelegationController(config) : undefined,\n\t);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/subagent/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Internal delegated-worker runtime.\n *\n * This file deliberately does not register a user-facing tool by default. The\n * authenticated Hub policy must advertise delegation before the GitNexus\n * extension calls registerDelegateTaskTool(). The CLI owns process isolation\n * and streaming UX; the Hub owns one-time worker authorization and routing.\n */\n\nimport { execFile } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport { Type } from \"typebox\";\nimport { AUTO_MODEL_ID, AUTO_PROVIDER_ID, isAutoModel } from \"../../core/auto-model.ts\";\nimport type { ExtensionAPI } from \"../../core/extensions/types.ts\";\nimport { withFileMutationQueue } from \"../../core/tools/index.ts\";\nimport { applyHiddenChildLaunch, type HiddenSpawnOptions, spawnWithoutConsole } from \"../../utils/hidden-spawn.ts\";\nimport type { GitNexusConfig } from \"../gitnexus/config.ts\";\nimport { resolveGitNexusConfig } from \"../gitnexus/config.ts\";\nimport { hubApiBase } from \"../gitnexus/device-auth.ts\";\n\nexport const DELEGATE_TASK_TOOL_NAME = \"delegate_task\";\nexport const INTERNAL_WORKER_MARKER_ENV = \"NEXUS_INTERNAL_DELEGATED_WORKER\";\nexport const INTERNAL_WORKER_SESSION_ENV = \"NEXUS_INTERNAL_WORKER_SESSION_ID\";\nexport const INTERNAL_WORKER_TASK_ENV = \"NEXUS_INTERNAL_WORKER_TASK_ID\";\nexport const INTERNAL_WORKER_RUN_ENV = \"NEXUS_INTERNAL_WORKER_RUN_ID\";\nexport const INTERNAL_WORKER_ROOT_REQUEST_ENV = \"NEXUS_INTERNAL_WORKER_ROOT_REQUEST_ID\";\nexport const INTERNAL_WORKER_PARENT_REQUEST_ENV = \"NEXUS_INTERNAL_WORKER_PARENT_REQUEST_ID\";\nexport const INTERNAL_WORKER_GRANT_HEADER = \"x-nexus-worker-grant\";\nexport const INTERNAL_WORKER_TASK_HEADER = \"x-nexus-worker-task-id\";\nexport const SESSION_AFFINITY_HEADER = \"x-session-affinity\";\nexport const RUN_ID_HEADER = \"x-nexus-run-id\";\nexport const REQUEST_ID_HEADER = \"x-nexus-request-id\";\nexport const ROOT_REQUEST_ID_HEADER = \"x-nexus-root-request-id\";\nexport const PARENT_REQUEST_ID_HEADER = \"x-nexus-parent-request-id\";\nexport const DELEGATION_ID_HEADER = \"x-nexus-delegation-id\";\nexport const REQUEST_SCOPE_HEADER = \"x-nexus-request-scope\";\nexport const MAX_DELEGATED_TURNS = 50;\nexport const DELEGATED_WORKER_TIMEOUT_MS = 5 * 60 * 1000;\nexport const DELEGATED_OUTPUT_CAP_BYTES = 32 * 1024;\nexport const DELEGATED_EVENT_CAP_BYTES = 1024 * 1024;\nexport const MAX_DELEGATED_TASK_BYTES = 32 * 1024;\n\nconst WORKER_GRANT_TIMEOUT_MS = 10_000;\nconst INVALID_WORKER_GRANT = \"unavailable\";\nconst MAX_PARALLEL_MUTATING_WORKERS = 1;\n\nexport const DELEGATED_WORKER_TOOLS = [\n\t\"read\",\n\t\"grep\",\n\t\"find\",\n\t\"ls\",\n\t\"bash\",\n\t\"write\",\n\t\"edit\",\n\t\"web_search\",\n\t\"gitnexus_query\",\n\t\"gitnexus_context\",\n\t\"gitnexus_impact\",\n\t\"gitnexus_detect_changes\",\n\t\"gitnexus_cypher\",\n\t\"gitnexus_list_repos\",\n] as const;\n\nconst WORKER_SYSTEM_PROMPT = `You are an internal delegated worker for Nexus Agent.\n\nComplete only the self-contained task you were delegated. Investigate before editing, follow local instructions, and verify any changed behavior. Do not delegate work or broaden scope. Do not discuss model names, providers, routing, credits, or internal architecture.\n\nFinish with a concise report containing:\n- work completed or findings\n- verification performed and results\n- blockers or remaining risks`;\n\nexport type DelegationStatus =\n\t| \"running\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"aborted\"\n\t| \"timeout\"\n\t| \"turn_limit\"\n\t| \"event_limit\";\n\nexport interface DelegationDetails {\n\tstatus: DelegationStatus;\n\tturns: number;\n\texitCode?: number;\n\toutputTruncated?: boolean;\n}\n\nexport interface WorkerGrant {\n\t/** Opaque, short-lived grant minted by the Hub for one worker completion. */\n\ttoken: string;\n\texpiresAt: string;\n}\n\nexport interface DelegationCapability {\n\tenabled: true;\n\tversion: 1;\n\tmaxParallel: number;\n\tmaxTaskBytes: number;\n\tworkerTimeoutMs: number;\n}\n\nexport interface WorkerGrantRequest {\n\tsessionId: string;\n\ttaskId: string;\n\trunId: string;\n\trootRequestId: string;\n\tparentRequestId: string;\n\trequestId: string;\n\tsignal: AbortSignal | undefined;\n}\n\nexport interface DelegationController {\n\tcreateWorkerGrant(request: WorkerGrantRequest): Promise<WorkerGrant>;\n}\n\nexport interface DelegationRequest {\n\ttask: string;\n\tacceptanceCriteria: string[];\n\trelevantPaths: string[];\n\tcwd: string;\n\tsignal: AbortSignal | undefined;\n}\n\nexport interface WorkerContext {\n\tsessionId: string;\n\ttaskId: string;\n\trunId: string;\n\trootRequestId: string;\n\tparentRequestId: string;\n}\n\nexport interface DelegatedWorkerOptions extends DelegationRequest {\n\tworkerContext: WorkerContext;\n\ttimeoutMs?: number;\n\tonUpdate?: (result: AgentToolResult<DelegationDetails>) => void;\n}\n\nexport interface DelegatedWorkerResult {\n\tstatus: Exclude<DelegationStatus, \"running\">;\n\tturns: number;\n\texitCode: number;\n\toutput: string;\n\toutputTruncated: boolean;\n}\n\ninterface AssistantSnapshot {\n\ttext: string;\n\tstopReason?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction parseAssistantSnapshot(value: unknown): AssistantSnapshot | undefined {\n\tif (!isRecord(value) || value.role !== \"assistant\" || !Array.isArray(value.content)) return undefined;\n\tconst text = value.content\n\t\t.filter(isRecord)\n\t\t.filter((part) => part.type === \"text\" && typeof part.text === \"string\")\n\t\t.map((part) => part.text as string)\n\t\t.join(\"\\n\");\n\treturn {\n\t\ttext,\n\t\t...(typeof value.stopReason === \"string\" ? { stopReason: value.stopReason } : {}),\n\t};\n}\n\nexport function composeDelegatedTask(\n\ttask: string,\n\tacceptanceCriteria: readonly string[],\n\trelevantPaths: readonly string[],\n): string {\n\tconst sections = [`Task:\\n${task.trim()}`];\n\tif (acceptanceCriteria.length > 0) {\n\t\tsections.push(`Acceptance criteria:\\n${acceptanceCriteria.map((criterion) => `- ${criterion}`).join(\"\\n\")}`);\n\t}\n\tif (relevantPaths.length > 0) {\n\t\tsections.push(`Relevant paths:\\n${relevantPaths.map((filePath) => `- ${filePath}`).join(\"\\n\")}`);\n\t}\n\treturn sections.join(\"\\n\\n\");\n}\n\nexport function buildDelegatedWorkerArgs(task: string, promptPath: string): string[] {\n\treturn [\n\t\t\"--mode\",\n\t\t\"json\",\n\t\t\"-p\",\n\t\t\"--no-session\",\n\t\t\"--model\",\n\t\t`${AUTO_PROVIDER_ID}/${AUTO_MODEL_ID}`,\n\t\t\"--tools\",\n\t\tDELEGATED_WORKER_TOOLS.join(\",\"),\n\t\t\"--exclude-tools\",\n\t\t`${DELEGATE_TASK_TOOL_NAME},subagent`,\n\t\t\"--append-system-prompt\",\n\t\tpromptPath,\n\t\ttask,\n\t];\n}\n\nfunction getNexusInvocation(args: string[]): { command: string; args: string[] } {\n\tconst currentScript = process.argv[1];\n\tconst isBunVirtualScript = currentScript?.startsWith(\"/$bunfs/root/\");\n\tif (currentScript && !isBunVirtualScript && fs.existsSync(currentScript)) {\n\t\treturn { command: process.execPath, args: [currentScript, ...args] };\n\t}\n\n\tconst execName = path.basename(process.execPath).toLowerCase();\n\tconst isGenericRuntime = /^(node|bun)(\\.exe)?$/.test(execName);\n\treturn isGenericRuntime ? { command: \"nexus\", args } : { command: process.execPath, args };\n}\n\nasync function writeWorkerPrompt(): Promise<{ dir: string; filePath: string }> {\n\tconst dir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"nexus-worker-\"));\n\tconst filePath = path.join(dir, \"system.md\");\n\tawait withFileMutationQueue(filePath, async () => {\n\t\tawait fs.promises.writeFile(filePath, WORKER_SYSTEM_PROMPT, { encoding: \"utf8\", mode: 0o600 });\n\t});\n\treturn { dir, filePath };\n}\n\nfunction truncateUtf8(value: string, cap: number): { value: string; truncated: boolean } {\n\tif (Buffer.byteLength(value, \"utf8\") <= cap) return { value, truncated: false };\n\tconst suffix = \"\\n\\n[Report truncated]\";\n\tlet truncated = value.slice(0, Math.max(0, cap - Buffer.byteLength(suffix, \"utf8\")));\n\twhile (Buffer.byteLength(`${truncated}${suffix}`, \"utf8\") > cap) truncated = truncated.slice(0, -1);\n\treturn { value: `${truncated}${suffix}`, truncated: true };\n}\n\nexport function createHubDelegationController(\n\tconfig: GitNexusConfig,\n\toptions: { fetchImpl?: typeof fetch; timeoutMs?: number } = {},\n): DelegationController {\n\tconst fetchImpl = options.fetchImpl ?? fetch;\n\treturn {\n\t\tasync createWorkerGrant(request) {\n\t\t\tconst controller = new AbortController();\n\t\t\tconst onAbort = (): void => controller.abort();\n\t\t\tif (request.signal?.aborted) controller.abort();\n\t\t\telse request.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\tconst timeout = setTimeout(() => controller.abort(), options.timeoutMs ?? WORKER_GRANT_TIMEOUT_MS);\n\t\t\ttry {\n\t\t\t\tconst response = await fetchImpl(`${hubApiBase(config.hubUrl)}/llm/worker-grants`, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"content-type\": \"application/json\",\n\t\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\tauthorization: `Bearer ${config.token}`,\n\t\t\t\t\t\t[RUN_ID_HEADER]: request.runId,\n\t\t\t\t\t\t[REQUEST_ID_HEADER]: request.requestId,\n\t\t\t\t\t\t[ROOT_REQUEST_ID_HEADER]: request.rootRequestId,\n\t\t\t\t\t\t[PARENT_REQUEST_ID_HEADER]: request.parentRequestId,\n\t\t\t\t\t\t[DELEGATION_ID_HEADER]: request.taskId,\n\t\t\t\t\t\t[REQUEST_SCOPE_HEADER]: \"worker\",\n\t\t\t\t\t\t...(config.deviceFingerprint ? { \"x-device-fingerprint\": config.deviceFingerprint } : {}),\n\t\t\t\t\t\t...(config.deviceName ? { \"x-device-name\": config.deviceName } : {}),\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify({ sessionId: request.sessionId, taskId: request.taskId }),\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t});\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tawait response.body?.cancel().catch(() => {});\n\t\t\t\t\tthrow new Error(\"Worker authorization unavailable\");\n\t\t\t\t}\n\t\t\t\tconst body: unknown = await response.json();\n\t\t\t\tif (\n\t\t\t\t\t!isRecord(body) ||\n\t\t\t\t\ttypeof body.grant !== \"string\" ||\n\t\t\t\t\t!body.grant.trim() ||\n\t\t\t\t\ttypeof body.expiresAt !== \"string\" ||\n\t\t\t\t\t!body.expiresAt.trim() ||\n\t\t\t\t\t!Number.isFinite(Date.parse(body.expiresAt))\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\"Invalid worker authorization response\");\n\t\t\t\t}\n\t\t\t\treturn { token: body.grant, expiresAt: body.expiresAt };\n\t\t\t} finally {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\trequest.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function isDelegatedWorkerProcess(env: NodeJS.ProcessEnv = process.env): boolean {\n\treturn env[INTERNAL_WORKER_MARKER_ENV] === \"1\";\n}\n\nexport const DELEGATION_MODE_ENV = \"NEXUS_DELEGATION_MODE\";\n\n/**\n * `NEXUS_DELEGATION_MODE=external` hands delegation to an external\n * orchestrator (e.g. the pi-subagents package): delegate_task is not\n * registered, so the model sees exactly one delegation surface. Worker-scope\n * billing still works — children marked via the nexus-subagent-worker wrapper\n * self-mint grants exactly like delegate_task workers do.\n */\nexport const BIG_MODEL_AGENTS_ENV = \"NEXUS_BIG_MODEL_AGENTS\";\nexport const WORKER_SCOPE_ENV = \"NEXUS_WORKER_SCOPE\";\nexport const PARENT_POLICY_ENV = \"NEXUS_PARENT_POLICY\";\nexport const BUNDLED_SUBAGENTS_ENV = \"NEXUS_BUNDLED_SUBAGENTS\";\nexport const BUNDLED_PACKAGES_ENV = \"NEXUS_BUNDLED_PACKAGES\";\nexport const PI_SUBAGENT_CHILD_AGENT_ENV = \"PI_SUBAGENT_CHILD_AGENT\";\nexport const PI_SUBAGENT_BINARY_ENV = \"PI_SUBAGENT_PI_BINARY\";\nexport const DEFAULT_BIG_MODEL_AGENTS = [\"oracle\"] as const;\n\n/** pi-subagents ships inside the CLI unless bundled packages are switched off. */\nexport function bundledSubagentsAvailable(env: NodeJS.ProcessEnv = process.env): boolean {\n\tconst value = env[BUNDLED_PACKAGES_ENV]?.trim().toLowerCase();\n\treturn !(value === \"off\" || value === \"0\" || value === \"false\");\n}\n\n/**\n * Delegation runs through the bundled pi-subagents tool by default; the\n * legacy delegate_task worker is opt-in via NEXUS_DELEGATION_MODE=internal.\n */\nexport function isExternalDelegationMode(env: NodeJS.ProcessEnv = process.env): boolean {\n\tconst mode = env[DELEGATION_MODE_ENV]?.trim().toLowerCase();\n\tif (mode === \"internal\") return false;\n\tif (mode === \"external\") return true;\n\treturn bundledSubagentsAvailable(env);\n}\n\n/** Agents that keep billing the orchestrator deployment (big model). */\nexport function bigModelAgents(env: NodeJS.ProcessEnv = process.env): Set<string> {\n\tconst raw = env[BIG_MODEL_AGENTS_ENV];\n\tif (raw === undefined) return new Set(DEFAULT_BIG_MODEL_AGENTS);\n\treturn new Set(\n\t\traw\n\t\t\t.split(\",\")\n\t\t\t.map((name) => name.trim())\n\t\t\t.filter(Boolean),\n\t);\n}\n\n/**\n * A process spawned by pi-subagents announces its agent in PI_SUBAGENT_CHILD_AGENT.\n * Mark it as a delegated worker so every model turn self-mints a worker grant\n * and bills the worker deployment. Big-model agents are explicitly unmarked,\n * even when a marker was inherited from a worker parent (nested fan-out).\n * Context is always regenerated: a worker deletes its own context before\n * spawning tools, so nothing inherited is trustworthy.\n */\nexport function applyPiSubagentChildWorkerScope(\n\tenv: NodeJS.ProcessEnv = process.env,\n\tuuid: () => string = randomUUID,\n): boolean {\n\tconst agent = env[PI_SUBAGENT_CHILD_AGENT_ENV]?.trim();\n\tif (!agent) return false;\n\tconst contextKeys = [\n\t\tINTERNAL_WORKER_SESSION_ENV,\n\t\tINTERNAL_WORKER_TASK_ENV,\n\t\tINTERNAL_WORKER_RUN_ENV,\n\t\tINTERNAL_WORKER_ROOT_REQUEST_ENV,\n\t\tINTERNAL_WORKER_PARENT_REQUEST_ENV,\n\t];\n\tconst scopeOff = env[WORKER_SCOPE_ENV]?.trim().toLowerCase() === \"off\";\n\tif (scopeOff || bigModelAgents(env).has(agent)) {\n\t\tdelete env[INTERNAL_WORKER_MARKER_ENV];\n\t\tfor (const key of contextKeys) delete env[key];\n\t\treturn false;\n\t}\n\tenv[INTERNAL_WORKER_MARKER_ENV] = \"1\";\n\tfor (const key of contextKeys) env[key] = uuid();\n\treturn true;\n}\n\n/**\n * The executable pi-subagents should spawn for children: this CLI itself.\n * A compiled standalone binary is its own executable; under node/bun the\n * built cli.js carries a shebang and the executable bit from the build.\n */\nexport function resolveBundledChildBinary(\n\targv1: string | undefined = process.argv[1],\n\texecPath: string = process.execPath,\n\tfsImpl: Pick<typeof fs, \"realpathSync\" | \"accessSync\" | \"constants\"> = fs,\n): string | undefined {\n\tconst execName = path.basename(execPath).toLowerCase();\n\tif (!/^(node|bun)(\\.exe)?$/.test(execName)) return execPath;\n\tif (!argv1) return undefined;\n\ttry {\n\t\tconst real = fsImpl.realpathSync(argv1);\n\t\tif (!/cli\\.(js|mjs|cjs)$/.test(real)) return undefined;\n\t\tfsImpl.accessSync(real, fsImpl.constants.X_OK);\n\t\treturn real;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function applyBundledChildBinaryDefault(\n\tenv: NodeJS.ProcessEnv = process.env,\n\tresolved: string | undefined = resolveBundledChildBinary(),\n\toptions: HiddenSpawnOptions = {},\n): void {\n\tif (env[PI_SUBAGENT_BINARY_ENV]?.trim() || !resolved) return;\n\t// On Windows the helper is a GUI-subsystem exe. pi-subagents spawns that,\n\t// and the helper starts this CLI with CREATE_NO_WINDOW, so the child\n\t// console is never created.\n\tif (applyHiddenChildLaunch(env, resolved, PI_SUBAGENT_BINARY_ENV, options)) return;\n\tenv[PI_SUBAGENT_BINARY_ENV] = resolved;\n}\n\nexport const BLOCKED_ORCHESTRATOR_TOOLS = new Set([\"bash\", \"write\", \"edit\", DELEGATE_TASK_TOOL_NAME]);\n\nexport const ORCHESTRATOR_GUIDANCE = [\n\t\"Delegation policy: you are the orchestrator. Perform implementation, mutation,\",\n\t\"shell commands, tests, and long repetitive tool loops through the `subagent`\",\n\t\"tool (worker for implementation, reviewer for checks, scout for codebase\",\n\t\"exploration, researcher for web research). Direct bash/write/edit are disabled\",\n\t\"in this session. Reading files and querying the GitNexus graph directly is fine\",\n\t\"and unlimited — prefer gitnexus_query/context/impact to locate code before\",\n\t\"delegating. For broad or multi-source research, fan out scout or researcher\",\n\t\"subagents (or use /parallel-research) and run long investigations in the\",\n\t\"background (async) instead of one long foreground run. Give each subagent a\",\n\t\"narrow, self-contained task rather than one sprawling one. Keep planning,\",\n\t\"user communication, and final review here.\",\n].join(\" \");\n\nexport function isOrchestratorPolicyDisabled(env: NodeJS.ProcessEnv = process.env): boolean {\n\treturn (\n\t\tenv[PARENT_POLICY_ENV]?.trim().toLowerCase() === \"off\" ||\n\t\tenv[INTERNAL_WORKER_MARKER_ENV] === \"1\" ||\n\t\tBoolean(env[PI_SUBAGENT_CHILD_AGENT_ENV]?.trim())\n\t);\n}\n\n/**\n * Orchestrator-side policy for bundled subagents: hard-block mutating tools\n * (the cost guarantee — implementation always bills the worker deployment)\n * and steer everything else by prompt. No read budget: reads and graph calls\n * are cheap on cached input and capping them measurably hurt output quality.\n */\nexport function registerOrchestratorPolicy(pi: ExtensionAPI, env: NodeJS.ProcessEnv = process.env): void {\n\tpi.on(\"before_agent_start\", (event, ctx) => {\n\t\tif (isOrchestratorPolicyDisabled(env) || !isAutoModel(ctx.model)) return;\n\t\treturn { systemPrompt: `${event.systemPrompt}\\n\\n${ORCHESTRATOR_GUIDANCE}` };\n\t});\n\tpi.on(\"tool_call\", (event, ctx) => {\n\t\tif (isOrchestratorPolicyDisabled(env) || !isAutoModel(ctx.model)) return;\n\t\tif (!BLOCKED_ORCHESTRATOR_TOOLS.has(event.toolName)) return;\n\t\treturn {\n\t\t\tblock: true,\n\t\t\treason:\n\t\t\t\t\"This orchestrator session does not run mutating tools directly. Use the `subagent` tool \" +\n\t\t\t\t\"(worker for implementation, reviewer for checks, scout for exploration), then review its report.\",\n\t\t};\n\t});\n}\n\n/**\n * Nexus-branded aliases for the upstream pi-subagents env knobs: users set\n * NEXUS_SUBAGENT_*, we copy onto the PI_SUBAGENT_* names the package reads.\n * NEXUS_SUBAGENT_BINARY maps to PI_SUBAGENT_PI_BINARY (the child-spawn\n * wrapper hook); every other NEXUS_SUBAGENT_X maps to PI_SUBAGENT_X.\n * Explicit PI_* values always win — aliases never overwrite them.\n */\nexport function applyNexusSubagentEnvAliases(env: NodeJS.ProcessEnv = process.env): void {\n\tconst binary = env.NEXUS_SUBAGENT_BINARY?.trim();\n\tif (binary && !env.PI_SUBAGENT_PI_BINARY?.trim()) {\n\t\tenv.PI_SUBAGENT_PI_BINARY = binary;\n\t}\n\tfor (const [key, value] of Object.entries(env)) {\n\t\tif (!key.startsWith(\"NEXUS_SUBAGENT_\") || key === \"NEXUS_SUBAGENT_BINARY\") continue;\n\t\tif (!value?.trim()) continue;\n\t\tconst target = `PI_SUBAGENT_${key.slice(\"NEXUS_SUBAGENT_\".length)}`;\n\t\tif (!env[target]?.trim()) env[target] = value;\n\t}\n}\n\n/** Capture task routing once, then remove it before worker tools can inherit it. */\nexport function consumeWorkerContext(env: NodeJS.ProcessEnv = process.env): WorkerContext | undefined {\n\tif (!isDelegatedWorkerProcess(env)) return undefined;\n\tconst sessionId = env[INTERNAL_WORKER_SESSION_ENV]?.trim();\n\tconst taskId = env[INTERNAL_WORKER_TASK_ENV]?.trim();\n\tconst runId = env[INTERNAL_WORKER_RUN_ENV]?.trim();\n\tconst rootRequestId = env[INTERNAL_WORKER_ROOT_REQUEST_ENV]?.trim();\n\tconst parentRequestId = env[INTERNAL_WORKER_PARENT_REQUEST_ENV]?.trim();\n\tdelete env[INTERNAL_WORKER_SESSION_ENV];\n\tdelete env[INTERNAL_WORKER_TASK_ENV];\n\tdelete env[INTERNAL_WORKER_RUN_ENV];\n\tdelete env[INTERNAL_WORKER_ROOT_REQUEST_ENV];\n\tdelete env[INTERNAL_WORKER_PARENT_REQUEST_ENV];\n\tif (!sessionId || !taskId || !runId || !rootRequestId || !parentRequestId) return undefined;\n\treturn { sessionId, taskId, runId, rootRequestId, parentRequestId };\n}\n\nfunction killProcessTree(pid: number | undefined, signal: NodeJS.Signals): void {\n\tif (pid === undefined) return;\n\tif (process.platform === \"win32\") {\n\t\texecFile(\"taskkill\", [\"/T\", \"/F\", \"/PID\", String(pid)], () => undefined);\n\t\treturn;\n\t}\n\ttry {\n\t\tprocess.kill(-pid, signal);\n\t} catch {\n\t\t// The detached process group may already have exited.\n\t}\n}\n\nexport async function runDelegatedWorker(options: DelegatedWorkerOptions): Promise<DelegatedWorkerResult> {\n\tconst prompt = await writeWorkerPrompt();\n\tconst task = composeDelegatedTask(options.task, options.acceptanceCriteria, options.relevantPaths);\n\tconst args = buildDelegatedWorkerArgs(task, prompt.filePath);\n\tlet output = \"\";\n\tlet turns = 0;\n\tlet terminalStatus: Exclude<DelegationStatus, \"running\" | \"completed\" | \"failed\"> | undefined;\n\tlet assistantFailed = false;\n\tlet eventBytes = 0;\n\n\ttry {\n\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\tconst invocation = getNexusInvocation(args);\n\t\t\tconst child = spawnWithoutConsole(invocation.command, invocation.args, {\n\t\t\t\tcwd: options.cwd,\n\t\t\t\t// Unix uses a new process group so the tree can be signalled.\n\t\t\t\t// On Windows detached allocates a console and ignores CREATE_NO_WINDOW.\n\t\t\t\tdetached: true,\n\t\t\t\tenv: {\n\t\t\t\t\t...process.env,\n\t\t\t\t\t[INTERNAL_WORKER_MARKER_ENV]: \"1\",\n\t\t\t\t\t[INTERNAL_WORKER_SESSION_ENV]: options.workerContext.sessionId,\n\t\t\t\t\t[INTERNAL_WORKER_TASK_ENV]: options.workerContext.taskId,\n\t\t\t\t\t[INTERNAL_WORKER_RUN_ENV]: options.workerContext.runId,\n\t\t\t\t\t[INTERNAL_WORKER_ROOT_REQUEST_ENV]: options.workerContext.rootRequestId,\n\t\t\t\t\t[INTERNAL_WORKER_PARENT_REQUEST_ENV]: options.workerContext.parentRequestId,\n\t\t\t\t},\n\t\t\t\tshell: false,\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t});\n\t\t\tlet buffer = \"\";\n\t\t\tlet settled = false;\n\t\t\tlet stopped = false;\n\t\t\tlet forceKillTimer: NodeJS.Timeout | undefined;\n\n\t\t\tconst finish = (code: number): void => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tclearTimeout(timeoutTimer);\n\t\t\t\tclearTimeout(forceKillTimer);\n\t\t\t\toptions.signal?.removeEventListener(\"abort\", abortHandler);\n\t\t\t\tresolve(code);\n\t\t\t};\n\n\t\t\tconst stop = (status: \"aborted\" | \"timeout\" | \"turn_limit\" | \"event_limit\"): void => {\n\t\t\t\tif (stopped) return;\n\t\t\t\tstopped = true;\n\t\t\t\tterminalStatus = status;\n\t\t\t\tkillProcessTree(child.pid, \"SIGTERM\");\n\t\t\t\tforceKillTimer = setTimeout(() => {\n\t\t\t\t\tif (process.platform !== \"win32\") killProcessTree(child.pid, \"SIGKILL\");\n\t\t\t\t\tfinish(1);\n\t\t\t\t}, 5000);\n\t\t\t};\n\n\t\t\tconst emitProgress = (): void => {\n\t\t\t\toptions.onUpdate?.({\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work is in progress.\" }],\n\t\t\t\t\tdetails: { status: \"running\", turns },\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst processLine = (line: string): void => {\n\t\t\t\tif (!line.trim()) return;\n\t\t\t\tlet parsed: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tparsed = JSON.parse(line);\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!isRecord(parsed) || parsed.type !== \"message_end\") return;\n\t\t\t\tconst snapshot = parseAssistantSnapshot(parsed.message);\n\t\t\t\tif (!snapshot) return;\n\t\t\t\tturns += 1;\n\t\t\t\tif (snapshot.text) output = snapshot.text;\n\t\t\t\tif (snapshot.stopReason === \"error\" || snapshot.stopReason === \"aborted\") assistantFailed = true;\n\t\t\t\temitProgress();\n\t\t\t\tif (turns >= MAX_DELEGATED_TURNS && snapshot.stopReason === \"toolUse\") stop(\"turn_limit\");\n\t\t\t};\n\n\t\t\tconst abortHandler = (): void => stop(\"aborted\");\n\t\t\tconst timeoutTimer = setTimeout(\n\t\t\t\t() => stop(\"timeout\"),\n\t\t\t\tMath.min(Math.max(1_000, options.timeoutMs ?? DELEGATED_WORKER_TIMEOUT_MS), DELEGATED_WORKER_TIMEOUT_MS),\n\t\t\t);\n\t\t\tconst stdout = child.stdout;\n\t\t\tconst stderr = child.stderr;\n\t\t\tif (!stdout || !stderr) {\n\t\t\t\tfinish(1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tstdout.on(\"data\", (chunk: Buffer | string) => {\n\t\t\t\teventBytes += Buffer.byteLength(chunk);\n\t\t\t\tif (eventBytes > DELEGATED_EVENT_CAP_BYTES) {\n\t\t\t\t\tassistantFailed = true;\n\t\t\t\t\tstop(\"event_limit\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbuffer += chunk.toString();\n\t\t\t\tif (Buffer.byteLength(buffer, \"utf8\") > DELEGATED_EVENT_CAP_BYTES) {\n\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\tassistantFailed = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\t\tbuffer = lines.pop() ?? \"\";\n\t\t\t\tfor (const line of lines) processLine(line);\n\t\t\t});\n\t\t\t// Consume stderr so a noisy child cannot block. Raw provider/process output\n\t\t\t// is intentionally not retained or exposed to the orchestrator or user.\n\t\t\tstderr.on(\"data\", () => undefined);\n\t\t\tchild.on(\"close\", (code) => {\n\t\t\t\tif (buffer.trim()) processLine(buffer);\n\t\t\t\tfinish(code ?? (terminalStatus ? 1 : 0));\n\t\t\t});\n\t\t\tchild.on(\"error\", () => finish(1));\n\t\t\tif (options.signal?.aborted) abortHandler();\n\t\t\telse options.signal?.addEventListener(\"abort\", abortHandler, { once: true });\n\t\t});\n\n\t\tconst limitedOutput = truncateUtf8(output, DELEGATED_OUTPUT_CAP_BYTES);\n\t\tconst status = terminalStatus ?? (exitCode === 0 && !assistantFailed ? \"completed\" : \"failed\");\n\t\treturn {\n\t\t\tstatus,\n\t\t\tturns,\n\t\t\texitCode,\n\t\t\toutput: limitedOutput.value,\n\t\t\toutputTruncated: limitedOutput.truncated,\n\t\t};\n\t} finally {\n\t\tawait fs.promises.rm(prompt.dir, { recursive: true, force: true });\n\t}\n}\n\nconst DelegateTaskParameters = Type.Object({\n\ttask: Type.String({ description: \"A self-contained task with explicit boundaries\", maxLength: 32_768 }),\n\tacceptanceCriteria: Type.Optional(Type.Array(Type.String({ maxLength: 2000 }), { maxItems: 10 })),\n\trelevantPaths: Type.Optional(Type.Array(Type.String({ maxLength: 1000 }), { maxItems: 20 })),\n});\n\nfunction resultContent(result: DelegatedWorkerResult): string {\n\tconst report = result.output.trim() || \"No worker report was returned.\";\n\tif (result.status === \"completed\") return `Delegated work completed.\\n\\n${report}`;\n\treturn `Delegated work did not complete (${result.status}).\\n\\nPartial report:\\n${report}`;\n}\n\n/** Register the tool only after the Hub explicitly advertises delegation. */\nexport function registerDelegateTaskTool(pi: ExtensionAPI, capability: DelegationCapability): void {\n\tconst maxTaskBytes = Math.min(Math.max(1, Math.floor(capability.maxTaskBytes)), MAX_DELEGATED_TASK_BYTES);\n\tconst workerTimeoutMs = Math.min(\n\t\tMath.max(1_000, Math.floor(capability.workerTimeoutMs)),\n\t\tDELEGATED_WORKER_TIMEOUT_MS,\n\t);\n\tconst runId = randomUUID();\n\tlet rootRequestId: string | undefined;\n\tlet latestRootRequestId: string | undefined;\n\tlet activeWorkers = 0;\n\tpi.on(\"before_agent_start\", (event, ctx) => {\n\t\tif (!isAutoModel(ctx.model)) return;\n\t\treturn {\n\t\t\tsystemPrompt: `${event.systemPrompt}\\n\\nDelegation guidance: prioritize delegate_task for self-contained, context-heavy investigation, broad searches, audits, repeated tool loops, or substantial implementation so the main conversation stays focused and efficient. Use your own tools directly when the work is small, depends on context already established in this conversation, requires direct verification, or delegation fails or reaches a limit. You remain responsible for the final result.`,\n\t\t};\n\t});\n\tpi.on(\"before_provider_headers\", (event, ctx) => {\n\t\tif (!isAutoModel(ctx.model) || isDelegatedWorkerProcess()) return;\n\t\tconst requestId = randomUUID();\n\t\trootRequestId ??= requestId;\n\t\tlatestRootRequestId = requestId;\n\t\tevent.headers[RUN_ID_HEADER] = runId;\n\t\tevent.headers[REQUEST_ID_HEADER] = requestId;\n\t\tevent.headers[ROOT_REQUEST_ID_HEADER] = rootRequestId;\n\t\tevent.headers[REQUEST_SCOPE_HEADER] = \"root\";\n\t});\n\tpi.registerTool({\n\t\tname: DELEGATE_TASK_TOOL_NAME,\n\t\tlabel: \"Work\",\n\t\tdescription:\n\t\t\t\"Delegate one self-contained task to an isolated internal worker. Keep user communication and final responsibility in this conversation.\",\n\t\tparameters: DelegateTaskParameters,\n\t\texecutionMode: \"sequential\",\n\t\tasync execute(_toolCallId, params, signal, onUpdate, ctx) {\n\t\t\tif (!isAutoModel(ctx.model)) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work is unavailable for the active mode.\" }],\n\t\t\t\t\tdetails: { status: \"failed\", turns: 0 } satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (!ctx.isProjectTrusted()) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work requires a trusted project.\" }],\n\t\t\t\t\tdetails: { status: \"failed\", turns: 0 } satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (activeWorkers >= MAX_PARALLEL_MUTATING_WORKERS) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work is temporarily unavailable for this run.\" }],\n\t\t\t\t\tdetails: { status: \"failed\", turns: 0 } satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst request: DelegationRequest = {\n\t\t\t\ttask: params.task,\n\t\t\t\tacceptanceCriteria: params.acceptanceCriteria ?? [],\n\t\t\t\trelevantPaths: params.relevantPaths ?? [],\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t\tsignal,\n\t\t\t};\n\t\t\tif (\n\t\t\t\tBuffer.byteLength(\n\t\t\t\t\tcomposeDelegatedTask(request.task, request.acceptanceCriteria, request.relevantPaths),\n\t\t\t\t\t\"utf8\",\n\t\t\t\t) > maxTaskBytes\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work is too large for one bounded task.\" }],\n\t\t\t\t\tdetails: { status: \"failed\", turns: 0 } satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tactiveWorkers += 1;\n\t\t\ttry {\n\t\t\t\tconst delegationId = randomUUID();\n\t\t\t\trootRequestId ??= randomUUID();\n\t\t\t\tconst result = await runDelegatedWorker({\n\t\t\t\t\t...request,\n\t\t\t\t\tworkerContext: {\n\t\t\t\t\t\tsessionId: ctx.sessionManager.getSessionId(),\n\t\t\t\t\t\ttaskId: delegationId,\n\t\t\t\t\t\trunId,\n\t\t\t\t\t\trootRequestId,\n\t\t\t\t\t\tparentRequestId: latestRootRequestId ?? rootRequestId,\n\t\t\t\t\t},\n\t\t\t\t\ttimeoutMs: workerTimeoutMs,\n\t\t\t\t\tonUpdate,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: resultContent(result) }],\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstatus: result.status,\n\t\t\t\t\t\tturns: result.turns,\n\t\t\t\t\t\texitCode: result.exitCode,\n\t\t\t\t\t\toutputTruncated: result.outputTruncated,\n\t\t\t\t\t} satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t} catch {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Delegated work could not be started.\" }],\n\t\t\t\t\tdetails: { status: \"failed\", turns: 0 } satisfies DelegationDetails,\n\t\t\t\t};\n\t\t\t} finally {\n\t\t\t\tactiveWorkers -= 1;\n\t\t\t}\n\t\t},\n\t\trenderCall(_args, theme) {\n\t\t\treturn new Text(theme.fg(\"toolTitle\", theme.bold(\"Working…\")), 0, 0);\n\t\t},\n\t\trenderResult(result, _options, theme) {\n\t\t\tconst details = result.details as DelegationDetails | undefined;\n\t\t\tif (details?.status === \"running\") return new Text(theme.fg(\"muted\", \"Working…\"), 0, 0);\n\t\t\tif (details?.status === \"completed\") return new Text(theme.fg(\"success\", \"Work completed\"), 0, 0);\n\t\t\treturn new Text(theme.fg(\"error\", \"Work needs attention\"), 0, 0);\n\t\t},\n\t});\n}\n\n/**\n * Install a fail-closed header hook for one worker task. A fresh one-time grant\n * is minted for each model turn; no grant is inherited by worker tools.\n */\nexport function registerWorkerGrantHeaders(\n\tpi: ExtensionAPI,\n\tworkerContext: WorkerContext,\n\tcontroller: DelegationController | undefined,\n): void {\n\tpi.on(\"before_provider_headers\", async (event, ctx) => {\n\t\tif (!isAutoModel(ctx.model)) {\n\t\t\tctx.abort();\n\t\t\treturn;\n\t\t}\n\n\t\t// Set an invalid sentinel first. Extension handler errors are reported and\n\t\t// swallowed by the runner, so this prevents a mint failure from silently\n\t\t// falling back to an ungranted root request.\n\t\tconst requestId = randomUUID();\n\t\tevent.headers[INTERNAL_WORKER_GRANT_HEADER] = INVALID_WORKER_GRANT;\n\t\tevent.headers[INTERNAL_WORKER_TASK_HEADER] = workerContext.taskId;\n\t\tevent.headers[SESSION_AFFINITY_HEADER] = workerContext.sessionId;\n\t\tevent.headers[RUN_ID_HEADER] = workerContext.runId;\n\t\tevent.headers[REQUEST_ID_HEADER] = requestId;\n\t\tevent.headers[ROOT_REQUEST_ID_HEADER] = workerContext.rootRequestId;\n\t\tevent.headers[PARENT_REQUEST_ID_HEADER] = workerContext.parentRequestId;\n\t\tevent.headers[DELEGATION_ID_HEADER] = workerContext.taskId;\n\t\tevent.headers[REQUEST_SCOPE_HEADER] = \"worker\";\n\t\tif (!controller) return;\n\n\t\tconst grant = await controller.createWorkerGrant({\n\t\t\t...workerContext,\n\t\t\trequestId,\n\t\t\tsignal: ctx.signal,\n\t\t});\n\t\tevent.headers[INTERNAL_WORKER_GRANT_HEADER] = grant.token;\n\t});\n}\n\nexport default function delegatedWorkerRuntime(pi: ExtensionAPI): void {\n\tapplyNexusSubagentEnvAliases();\n\tif (bundledSubagentsAvailable()) process.env[BUNDLED_SUBAGENTS_ENV] = \"1\";\n\tapplyPiSubagentChildWorkerScope();\n\tconst isWorker = isDelegatedWorkerProcess();\n\tconst workerContext = consumeWorkerContext();\n\tif (!isWorker) {\n\t\tif (isExternalDelegationMode()) {\n\t\t\tapplyBundledChildBinaryDefault();\n\t\t\tregisterOrchestratorPolicy(pi);\n\t\t}\n\t\treturn;\n\t}\n\tconst config = resolveGitNexusConfig();\n\tconst failClosedContext: WorkerContext = {\n\t\tsessionId: \"unavailable\",\n\t\ttaskId: \"unavailable\",\n\t\trunId: \"unavailable\",\n\t\trootRequestId: \"unavailable\",\n\t\tparentRequestId: \"unavailable\",\n\t};\n\tregisterWorkerGrantHeaders(\n\t\tpi,\n\t\tworkerContext ?? failClosedContext,\n\t\tworkerContext && config ? createHubDelegationController(config) : undefined,\n\t);\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { ExtensionAPI } from "../core/extensions/types.ts";
2
+ export default function subagentRenderExtension(nexus: ExtensionAPI): void;
3
+ //# sourceMappingURL=subagent-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-render.d.ts","sourceRoot":"","sources":["../../src/extensions/subagent-render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,6BAA6B,CAAC;AA+BjF,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAazE","sourcesContent":["import { Text } from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult, ExtensionAPI } from \"../core/extensions/types.ts\";\n\n/**\n * Compact display for bundled pi-subagents tools.\n *\n * pi-subagents (packages/coding-agent/package.json dependency, loaded via\n * BUNDLED_PACKAGES) registers `subagent_wait` without a custom renderResult,\n * so it falls back to nexus's generic text-result rendering: up to 10 raw\n * lines of its live \"Waiting Ns for N async run(s)...\" status, streamed\n * inline in the transcript. That duplicates the always-visible \"Async\n * agents\" status bar and its arrow-key fleet inspector (↓/← select, enter\n * inspect, esc back) with a much noisier, non-interactive copy.\n *\n * This only overrides the display (via registerToolRenderer); pi-subagents'\n * own execute() still runs unmodified.\n */\n\nfunction extractText(result: AgentToolResult<unknown>): string {\n\treturn result.content\n\t\t.filter(\n\t\t\t(block): block is { type: \"text\"; text: string } => block.type === \"text\" && typeof block.text === \"string\",\n\t\t)\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\");\n}\n\nfunction firstLine(text: string): string {\n\tconst newlineIndex = text.indexOf(\"\\n\");\n\treturn (newlineIndex === -1 ? text : text.slice(0, newlineIndex)).trim();\n}\n\nexport default function subagentRenderExtension(nexus: ExtensionAPI): void {\n\tnexus.registerToolRenderer(\"subagent_wait\", {\n\t\trenderResult(result, options, theme) {\n\t\t\tconst text = extractText(result);\n\t\t\tif (options.expanded) {\n\t\t\t\treturn new Text(theme.fg(\"toolOutput\", text || \"(no output)\"), 0, 0);\n\t\t\t}\n\t\t\tconst summary = firstLine(text) || \"Waiting for subagents…\";\n\t\t\tconst hint =\n\t\t\t\t\"See the agent status bar below (↓/← to select, enter to inspect) for live detail — ctrl+o for the full log.\";\n\t\t\treturn new Text(`${theme.fg(\"toolOutput\", summary)}\\n${theme.fg(\"dim\", hint)}`, 0, 0);\n\t\t},\n\t});\n}\n"]}
@@ -0,0 +1,39 @@
1
+ import { Text } from "@earendil-works/pi-tui";
2
+ /**
3
+ * Compact display for bundled pi-subagents tools.
4
+ *
5
+ * pi-subagents (packages/coding-agent/package.json dependency, loaded via
6
+ * BUNDLED_PACKAGES) registers `subagent_wait` without a custom renderResult,
7
+ * so it falls back to nexus's generic text-result rendering: up to 10 raw
8
+ * lines of its live "Waiting Ns for N async run(s)..." status, streamed
9
+ * inline in the transcript. That duplicates the always-visible "Async
10
+ * agents" status bar and its arrow-key fleet inspector (↓/← select, enter
11
+ * inspect, esc back) with a much noisier, non-interactive copy.
12
+ *
13
+ * This only overrides the display (via registerToolRenderer); pi-subagents'
14
+ * own execute() still runs unmodified.
15
+ */
16
+ function extractText(result) {
17
+ return result.content
18
+ .filter((block) => block.type === "text" && typeof block.text === "string")
19
+ .map((block) => block.text)
20
+ .join("\n");
21
+ }
22
+ function firstLine(text) {
23
+ const newlineIndex = text.indexOf("\n");
24
+ return (newlineIndex === -1 ? text : text.slice(0, newlineIndex)).trim();
25
+ }
26
+ export default function subagentRenderExtension(nexus) {
27
+ nexus.registerToolRenderer("subagent_wait", {
28
+ renderResult(result, options, theme) {
29
+ const text = extractText(result);
30
+ if (options.expanded) {
31
+ return new Text(theme.fg("toolOutput", text || "(no output)"), 0, 0);
32
+ }
33
+ const summary = firstLine(text) || "Waiting for subagents…";
34
+ const hint = "See the agent status bar below (↓/← to select, enter to inspect) for live detail — ctrl+o for the full log.";
35
+ return new Text(`${theme.fg("toolOutput", summary)}\n${theme.fg("dim", hint)}`, 0, 0);
36
+ },
37
+ });
38
+ }
39
+ //# sourceMappingURL=subagent-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-render.js","sourceRoot":"","sources":["../../src/extensions/subagent-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAG9C;;;;;;;;;;;;;GAaG;AAEH,SAAS,WAAW,CAAC,MAAgC,EAAU;IAC9D,OAAO,MAAM,CAAC,OAAO;SACnB,MAAM,CACN,CAAC,KAAK,EAA2C,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAC3G;SACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACb;AAED,SAAS,SAAS,CAAC,IAAY,EAAU;IACxC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAAA,CACzE;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,KAAmB,EAAQ;IAC1E,KAAK,CAAC,oBAAoB,CAAC,eAAe,EAAE;QAC3C,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;YACpC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACtB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,0BAAwB,CAAC;YAC5D,MAAM,IAAI,GACT,mHAA6G,CAAC;YAC/G,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAAA,CACtF;KACD,CAAC,CAAC;AAAA,CACH","sourcesContent":["import { Text } from \"@earendil-works/pi-tui\";\nimport type { AgentToolResult, ExtensionAPI } from \"../core/extensions/types.ts\";\n\n/**\n * Compact display for bundled pi-subagents tools.\n *\n * pi-subagents (packages/coding-agent/package.json dependency, loaded via\n * BUNDLED_PACKAGES) registers `subagent_wait` without a custom renderResult,\n * so it falls back to nexus's generic text-result rendering: up to 10 raw\n * lines of its live \"Waiting Ns for N async run(s)...\" status, streamed\n * inline in the transcript. That duplicates the always-visible \"Async\n * agents\" status bar and its arrow-key fleet inspector (↓/← select, enter\n * inspect, esc back) with a much noisier, non-interactive copy.\n *\n * This only overrides the display (via registerToolRenderer); pi-subagents'\n * own execute() still runs unmodified.\n */\n\nfunction extractText(result: AgentToolResult<unknown>): string {\n\treturn result.content\n\t\t.filter(\n\t\t\t(block): block is { type: \"text\"; text: string } => block.type === \"text\" && typeof block.text === \"string\",\n\t\t)\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\");\n}\n\nfunction firstLine(text: string): string {\n\tconst newlineIndex = text.indexOf(\"\\n\");\n\treturn (newlineIndex === -1 ? text : text.slice(0, newlineIndex)).trim();\n}\n\nexport default function subagentRenderExtension(nexus: ExtensionAPI): void {\n\tnexus.registerToolRenderer(\"subagent_wait\", {\n\t\trenderResult(result, options, theme) {\n\t\t\tconst text = extractText(result);\n\t\t\tif (options.expanded) {\n\t\t\t\treturn new Text(theme.fg(\"toolOutput\", text || \"(no output)\"), 0, 0);\n\t\t\t}\n\t\t\tconst summary = firstLine(text) || \"Waiting for subagents…\";\n\t\t\tconst hint =\n\t\t\t\t\"See the agent status bar below (↓/← to select, enter to inspect) for live detail — ctrl+o for the full log.\";\n\t\t\treturn new Text(`${theme.fg(\"toolOutput\", summary)}\\n${theme.fg(\"dim\", hint)}`, 0, 0);\n\t\t},\n\t});\n}\n"]}