@humain/humain-code 0.3.8 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/bundle/agent-monitor.js +1 -1
  3. package/dist/bundle/chunks/bedrock-converse-stream.js +18 -17
  4. package/dist/bundle/chunks/{chunk-REZ7FW4X.js → chunk-2KKLZK2N.js} +1 -1
  5. package/dist/bundle/chunks/{chunk-QWB2GGVH.js → chunk-2Q2O3GZ4.js} +721 -718
  6. package/dist/bundle/chunks/{chunk-3ZYKCI45.js → chunk-3ZI2TEVB.js} +1 -1
  7. package/dist/bundle/chunks/{chunk-YEG6NREY.js → chunk-DUZY4PDA.js} +16 -16
  8. package/dist/bundle/chunks/{chunk-QJZ5QYKE.js → chunk-E22S6D55.js} +1 -1
  9. package/dist/bundle/chunks/{chunk-74L7EWMA.js → chunk-E7WGCXWK.js} +1 -1
  10. package/dist/bundle/chunks/{chunk-MNB52OYZ.js → chunk-ERT2BD7V.js} +36 -36
  11. package/dist/bundle/chunks/{chunk-2KVH67UZ.js → chunk-H5CZL7M5.js} +1 -1
  12. package/dist/bundle/chunks/{chunk-WQN4VIAM.js → chunk-HA5AW36V.js} +396 -355
  13. package/dist/bundle/chunks/{chunk-HL54JCNV.js → chunk-IAI7MTU4.js} +3 -3
  14. package/dist/bundle/chunks/{chunk-TEOX3AWC.js → chunk-ICLZNV4V.js} +2 -2
  15. package/dist/bundle/chunks/{chunk-VHVY22A2.js → chunk-JQZ7BIAI.js} +2 -13
  16. package/dist/bundle/chunks/{chunk-6HQRNHO7.js → chunk-N23FFKJU.js} +40 -25
  17. package/dist/bundle/chunks/{chunk-X5JUC5RE.js → chunk-OXJXKCLB.js} +1 -1
  18. package/dist/bundle/chunks/{chunk-7CYWKPFS.js → chunk-UBQSONVR.js} +9 -8
  19. package/dist/bundle/chunks/{chunk-6MMGBL46.js → chunk-VZV7GLZT.js} +2 -2
  20. package/dist/bundle/chunks/{chunk-FF26YENK.js → chunk-W2QRCQBX.js} +4 -3
  21. package/dist/bundle/chunks/{cli-5NYUGRWC.js → cli-5YRA5PFB.js} +2 -2
  22. package/dist/bundle/chunks/{compat-UPJNJCGF.js → compat-TCOK5LFD.js} +1 -1
  23. package/dist/bundle/chunks/dist-33CBPO23.js +1928 -0
  24. package/dist/bundle/chunks/{easter-egg-3d-XUJ4HNAR.js → easter-egg-3d-ARXMB2RN.js} +1 -1
  25. package/dist/bundle/chunks/{esm-763X2IA7.js → esm-NCUV2DF7.js} +1 -1
  26. package/dist/bundle/chunks/{event-streams-4Q22QRY2.js → event-streams-CGCQQL5M.js} +1 -1
  27. package/dist/bundle/chunks/{execute-IAU7EI3P.js → execute-KEUC5IWA.js} +1 -1
  28. package/dist/bundle/chunks/{extract-QIC545HI.js → extract-WUAT5T4V.js} +4 -4
  29. package/dist/bundle/chunks/{google-generative-ai-ICWD4YIE.js → google-generative-ai-MDUVUFFQ.js} +1 -1
  30. package/dist/bundle/chunks/{google-vertex-XIACVW6H.js → google-vertex-UQGG6LEW.js} +1 -1
  31. package/dist/bundle/chunks/{host-QBIXSMNN.js → host-SPBJ4YAA.js} +1 -1
  32. package/dist/bundle/chunks/{node-W47VUEGE.js → node-XGNY74WT.js} +1 -1
  33. package/dist/bundle/chunks/{runtime-NBGMTCI6.js → runtime-HBWXEJT3.js} +1 -1
  34. package/dist/bundle/chunks/{virtual-modules-P2MH665T.js → virtual-modules-I5YD7JGC.js} +2 -2
  35. package/dist/bundle/cli-runtime.js +2 -2
  36. package/dist/bundle/flow/agents/.gitkeep +0 -0
  37. package/dist/bundle/flow/agents/orch-architect.md +33 -0
  38. package/dist/bundle/flow/agents/orch-implementation-fast.md +13 -0
  39. package/dist/bundle/flow/agents/orch-implementation-strong.md +28 -0
  40. package/dist/bundle/flow/agents/orch-qa-agent.md +29 -0
  41. package/dist/bundle/flow/agents/orch-scout.md +35 -0
  42. package/dist/bundle/flow/agents/orch-security-review.md +28 -0
  43. package/dist/bundle/flow/agents/orch-technical-lead.md +37 -0
  44. package/dist/bundle/flow/agents/orch-technical-review.md +28 -0
  45. package/dist/bundle/flow/agents/orch-worker.md +13 -0
  46. package/dist/bundle/flow/agents/orchestrator-lead.md +55 -0
  47. package/dist/bundle/flow/assets/.gitkeep +0 -0
  48. package/dist/bundle/flow/assets/contract.json +84 -0
  49. package/dist/bundle/flow/assets/forge-protocol-schema.sha256 +1 -0
  50. package/dist/bundle/flow/assets/method.json +193 -0
  51. package/dist/bundle/flow/assets/orchestrator-profiles.json +131 -0
  52. package/dist/bundle/flow/assets/profiles/anthropic.json +189 -0
  53. package/dist/bundle/flow/assets/profiles/openai.json +177 -0
  54. package/dist/bundle/flow/assets/profiles/oss-first.json +236 -0
  55. package/dist/bundle/flow/assets/profiles/premium.json +203 -0
  56. package/dist/bundle/flow/package.json +48 -0
  57. package/dist/bundle/index.js +5 -5
  58. package/dist/bundle/rpc-entry.js +2 -2
  59. package/dist/config.d.ts +12 -0
  60. package/dist/config.d.ts.map +1 -1
  61. package/dist/config.js +21 -0
  62. package/dist/config.js.map +1 -1
  63. package/dist/core/tools/subagent.d.ts +20 -0
  64. package/dist/core/tools/subagent.d.ts.map +1 -1
  65. package/dist/core/tools/subagent.js +124 -12
  66. package/dist/core/tools/subagent.js.map +1 -1
  67. package/dist/humain/flow-loader.d.ts +62 -0
  68. package/dist/humain/flow-loader.d.ts.map +1 -0
  69. package/dist/humain/flow-loader.js +291 -0
  70. package/dist/humain/flow-loader.js.map +1 -0
  71. package/dist/humain/index.d.ts.map +1 -1
  72. package/dist/humain/index.js +2 -0
  73. package/dist/humain/index.js.map +1 -1
  74. package/dist/humain/trace-capture/child-launch.d.ts +1 -0
  75. package/dist/humain/trace-capture/child-launch.d.ts.map +1 -1
  76. package/dist/humain/trace-capture/child-launch.js +2 -1
  77. package/dist/humain/trace-capture/child-launch.js.map +1 -1
  78. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  79. package/dist/modes/rpc/rpc-mode.js +136 -1
  80. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  81. package/docs/docs.json +8 -0
  82. package/docs/environment-variables.md +1 -0
  83. package/docs/flow-profiles.md +173 -0
  84. package/docs/flow.md +112 -0
  85. package/docs/index.md +2 -0
  86. package/npm-shrinkwrap.json +6 -6
  87. package/package.json +6 -5
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
3
- import{configureHttpDispatcher,main}from"./chunks/chunk-WQN4VIAM.js";import"./chunks/chunk-3ZYKCI45.js";import"./chunks/chunk-2KVH67UZ.js";import"./chunks/chunk-7CYWKPFS.js";import"./chunks/chunk-REZ7FW4X.js";import"./chunks/chunk-QWB2GGVH.js";import"./chunks/chunk-6MMGBL46.js";import"./chunks/chunk-VHVY22A2.js";import"./chunks/chunk-X5JUC5RE.js";import"./chunks/chunk-74L7EWMA.js";import"./chunks/chunk-TEOX3AWC.js";import"./chunks/chunk-SCIGZFN5.js";import"./chunks/chunk-KQM7ZGL6.js";import"./chunks/chunk-CIA6V3BP.js";
4
- import"./chunks/chunk-XQZG5HPT.js";import"./chunks/chunk-FACBDLFU.js";import"./chunks/chunk-6HQRNHO7.js";import{APP_COMMAND}from"./chunks/chunk-YEG6NREY.js";import"./chunks/chunk-BRXQUQSC.js";import"./chunks/chunk-PEZZKT73.js";import"./chunks/chunk-DBL35X7L.js";import"./chunks/chunk-4X774RBJ.js";import"./chunks/chunk-RTFCP3VQ.js";import"./chunks/chunk-YURQPD6Y.js";import"./chunks/chunk-AKA7HNO3.js";import"./chunks/chunk-QMUIATLD.js";import"./chunks/chunk-BHM75BJJ.js";import"./chunks/chunk-JXWJOIH4.js";process.title=`${APP_COMMAND}-rpc`;process.env.PI_CODING_AGENT="true";process.env.AI_AGENT="pi";process.emitWarning=(()=>{});configureHttpDispatcher();main(["--mode","rpc",...process.argv.slice(2)]);
3
+ import{configureHttpDispatcher,main}from"./chunks/chunk-HA5AW36V.js";import"./chunks/chunk-3ZI2TEVB.js";import"./chunks/chunk-H5CZL7M5.js";import"./chunks/chunk-UBQSONVR.js";import"./chunks/chunk-2KKLZK2N.js";import"./chunks/chunk-2Q2O3GZ4.js";import"./chunks/chunk-VZV7GLZT.js";import"./chunks/chunk-JQZ7BIAI.js";import"./chunks/chunk-OXJXKCLB.js";import"./chunks/chunk-E7WGCXWK.js";import"./chunks/chunk-ICLZNV4V.js";import"./chunks/chunk-SCIGZFN5.js";import"./chunks/chunk-KQM7ZGL6.js";import"./chunks/chunk-CIA6V3BP.js";
4
+ import"./chunks/chunk-XQZG5HPT.js";import"./chunks/chunk-FACBDLFU.js";import"./chunks/chunk-N23FFKJU.js";import{APP_COMMAND}from"./chunks/chunk-DUZY4PDA.js";import"./chunks/chunk-BRXQUQSC.js";import"./chunks/chunk-PEZZKT73.js";import"./chunks/chunk-DBL35X7L.js";import"./chunks/chunk-4X774RBJ.js";import"./chunks/chunk-RTFCP3VQ.js";import"./chunks/chunk-YURQPD6Y.js";import"./chunks/chunk-AKA7HNO3.js";import"./chunks/chunk-QMUIATLD.js";import"./chunks/chunk-BHM75BJJ.js";import"./chunks/chunk-JXWJOIH4.js";process.title=`${APP_COMMAND}-rpc`;process.env.PI_CODING_AGENT="true";process.env.AI_AGENT="pi";process.emitWarning=(()=>{});configureHttpDispatcher();main(["--mode","rpc",...process.argv.slice(2)]);
package/dist/config.d.ts CHANGED
@@ -70,6 +70,18 @@ export declare function getBundledInteractiveAssetPath(name: string): string;
70
70
  * - For Node.js (npm package or source checkout): src/humain/<module>/vendor/ (shipped via package.json `files`)
71
71
  */
72
72
  export declare function getHumainModuleAssetsDir(moduleName: string): string;
73
+ /**
74
+ * Directory holding Flow's agents/, assets/ and package.json in a bundled distribution, or undefined when running
75
+ * from a source checkout or unbundled npm install (Flow then finds its own package directory).
76
+ * - For Bun binary: flow/ next to the executable (copied by copy-binary-assets / scripts/build-binaries.sh)
77
+ * - For bundled Node.js: dist/bundle/flow/ (copied by scripts/build-coding-agent-bundle.mjs)
78
+ */
79
+ export declare function getBundledFlowPackageDir(): string | undefined;
80
+ /**
81
+ * Directory of Flow's built-in profile JSON files, or undefined when Flow can find them itself (source checkout or
82
+ * unbundled npm install). Derived from the bundled package dir so Bun binaries and bundled Node agree with the assets.
83
+ */
84
+ export declare function getBundledFlowProfilesDir(): string | undefined;
73
85
  /** Called by the Bun entry with the path of the QuickJS wasm file embedded in the compiled executable. */
74
86
  export declare function setEmbeddedQuickJSWasmPath(path: string): void;
75
87
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,eAAO,MAAM,WAAW,SACqF,CAAC;AAE9G,gEAAgE;AAChE,eAAO,MAAM,YAAY,SAAyB,CAAC;AAInD,eAAO,MAAM,aAAa,SAA4D,CAAC;AAMvF,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;AAEvF,UAAU,qBAAqB;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB;IAC/D,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAChC;AAED,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAgC7F,wBAAgB,mBAAmB,IAAI,aAAa,CAqBnD;AAgOD,wBAAgB,oBAAoB,CACnC,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,mBAAmB,GAAE,uBAAqC,GACxD,iBAAiB,GAAG,SAAS,CAO/B;AAED,wBAAgB,mCAAmC,CAClD,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,mBAAmB,GAAE,uBAAqC,GACxD,MAAM,CAcR;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAOhE;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAe3D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAYtC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CASrC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAO7C;AAED,+BAA+B;AAC/B,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,4BAA4B;AAC5B,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,iCAAiC;AACjC,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,qCAAqC;AACrC,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,+BAA+B;AAC/B,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAOhD;AAED,8CAA8C;AAC9C,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAKnE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,SAAS,CAI7D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,SAAS,CAG9D;AAID,0GAA0G;AAC1G,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED,+DAA+D;AAC/D,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,YAAY,GAAG,cAAc,GAAG,WAAW,EACpD,SAAS,EAAE,MAAM,GACf,MAAM,GAAG,GAAG,GAAG,SAAS,CAQ1B;AAID;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,GAAG,GAAG,GAAG,SAAS,CASrE;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEvF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,qBAAyB,GAAG,aAAa,GAAG,SAAS,CAYvG;AA+CD,eAAO,MAAM,YAAY,EAAE,MAA0C,CAAC;AACtE,eAAO,MAAM,QAAQ,EAAE,MAA8B,CAAC;AACtD,eAAO,MAAM,SAAS,EAAE,MAA2D,CAAC;AACpF,qGAAqG;AACrG,eAAO,MAAM,WAAW,EAAE,MAAkE,CAAC;AAC7F,eAAO,MAAM,eAAe,EAAE,MAAsC,CAAC;AACrE,eAAO,MAAM,wBAAwB,EAAE,OAA4C,CAAC;AACpF,eAAO,MAAM,OAAO,EAAE,MAA+B,CAAC;AACtD,eAAO,MAAM,mBAAmB,EAAE,MAAgD,CAAC;AAGnF,eAAO,MAAM,UAAU,QAAoD,CAAC;AAC5E,eAAO,MAAM,aAAa,QAAmC,CAAC;AAC9D,eAAO,MAAM,eAAe,QAA2C,CAAC;AACxE,eAAO,MAAM,cAAc,QAA6B,CAAC;AACzD,eAAO,MAAM,gBAAgB,QAA+B,CAAC;AAC7D,eAAO,MAAM,YAAY,QAA2B,CAAC;AACrD,eAAO,MAAM,SAAS,QAAwB,CAAC;AAC/C,eAAO,MAAM,2BAA2B,QAA0C,CAAC;AACnF,eAAO,MAAM,mBAAmB,QAAkC,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0B,CAAC;AACnD,eAAO,MAAM,eAAe,QAA8B,CAAC;AAC3D,eAAO,MAAM,oBAAoB,QAAmC,CAAC;AACrE,eAAO,MAAM,sBAAsB,QAAqC,CAAC;AACzE,eAAO,MAAM,qBAAqB,QAAoC,CAAC;AACvE,eAAO,MAAM,aAAa,QAA4B,CAAC;AACvD,eAAO,MAAM,qBAAqB,QAAoC,CAAC;AACvE,eAAO,MAAM,sBAAsB,QAAqC,CAAC;AACzE,eAAO,MAAM,yBAAyB,QAAwC,CAAC;AAC/E,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAE/D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AACjE,eAAO,MAAM,kCAAkC,uHACsE,CAAC;AAGtH,eAAO,MAAM,iCAAiC,4DAA4D,CAAC;AAC3G,eAAO,MAAM,qCAAqC,+CAAkD,CAAC;AACrG,eAAO,MAAM,6BAA6B,sCAAyC,CAAC;AACpF,eAAO,MAAM,wBAAwB,qCAAwC,CAAC;AAE9E,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI9D;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxD;AAMD,uEAAuE;AACvE,wBAAgB,WAAW,IAAI,MAAM,CAMpC;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,8BAA8B;AAC9B,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,4BAA4B;AAC5B,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,gCAAgC;AAChC,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,kCAAkC;AAClC,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,sDAAsD;AACtD,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,qCAAqC;AACrC,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,iCAAiC;AACjC,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
package/dist/config.js CHANGED
@@ -404,6 +404,27 @@ export function getHumainModuleAssetsDir(moduleName) {
404
404
  }
405
405
  return join(getPackageDir(), "src", "humain", moduleName, "vendor");
406
406
  }
407
+ /**
408
+ * Directory holding Flow's agents/, assets/ and package.json in a bundled distribution, or undefined when running
409
+ * from a source checkout or unbundled npm install (Flow then finds its own package directory).
410
+ * - For Bun binary: flow/ next to the executable (copied by copy-binary-assets / scripts/build-binaries.sh)
411
+ * - For bundled Node.js: dist/bundle/flow/ (copied by scripts/build-coding-agent-bundle.mjs)
412
+ */
413
+ export function getBundledFlowPackageDir() {
414
+ if (isBunBinary)
415
+ return resolve(getPackageDir(), "flow");
416
+ if (isBundledNode)
417
+ return resolve(getPackageDir(), "dist", "bundle", "flow");
418
+ return undefined;
419
+ }
420
+ /**
421
+ * Directory of Flow's built-in profile JSON files, or undefined when Flow can find them itself (source checkout or
422
+ * unbundled npm install). Derived from the bundled package dir so Bun binaries and bundled Node agree with the assets.
423
+ */
424
+ export function getBundledFlowProfilesDir() {
425
+ const packageDir = getBundledFlowPackageDir();
426
+ return packageDir === undefined ? undefined : join(packageDir, "assets", "profiles");
427
+ }
407
428
  let quickJSWasmPath;
408
429
  /** Called by the Bun entry with the path of the QuickJS wasm file embedded in the compiled executable. */
409
430
  export function setEmbeddedQuickJSWasmPath(path) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { accessSync, constants, existsSync, readFileSync, realpathSync } from \"fs\";\nimport { createRequire } from \"module\";\nimport { homedir } from \"os\";\nimport { basename, dirname, join, resolve, sep, win32 } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { spawnProcessSync } from \"./utils/child-process.ts\";\nimport { normalizePath } from \"./utils/paths.ts\";\nimport { stripBom } from \"./utils/text.ts\";\n\n// =============================================================================\n// Package Detection\n// =============================================================================\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst BOOTSTRAP_ENV_PACKAGE_DIR = \"HUMAIN_TERMINAL_PACKAGE_DIR\";\n\n/**\n * Detect if we're running as a Bun compiled binary.\n * Bun binaries have import.meta.url containing \"$bunfs\", \"~BUN\", or \"%7EBUN\" (Bun's virtual filesystem path)\n */\nexport const isBunBinary =\n\timport.meta.url.includes(\"$bunfs\") || import.meta.url.includes(\"~BUN\") || import.meta.url.includes(\"%7EBUN\");\n\n/** Detect if Bun is the runtime (compiled binary or bun run) */\nexport const isBunRuntime = !!process.versions.bun;\n\n/** Detect the esbuild-bundled Node.js distribution. */\ndeclare const PI_BUNDLED_NODE: boolean;\nexport const isBundledNode = typeof PI_BUNDLED_NODE !== \"undefined\" && PI_BUNDLED_NODE;\n\n// =============================================================================\n// Install Method Detection\n// =============================================================================\n\nexport type InstallMethod = \"bun-binary\" | \"npm\" | \"pnpm\" | \"yarn\" | \"bun\" | \"unknown\";\n\ninterface SelfUpdateCommandStep {\n\tcommand: string;\n\targs: string[];\n\tdisplay: string;\n}\n\nexport interface SelfUpdateCommand extends SelfUpdateCommandStep {\n\tsteps?: SelfUpdateCommandStep[];\n}\n\nexport type SelfUpdatePackageTarget = string | { packageName: string; installSpec?: string };\n\nfunction normalizeSelfUpdatePackageTarget(target: SelfUpdatePackageTarget): {\n\tpackageName: string;\n\tinstallSpec: string;\n} {\n\tif (typeof target === \"string\") {\n\t\treturn { packageName: target, installSpec: target };\n\t}\n\treturn { packageName: target.packageName, installSpec: target.installSpec ?? target.packageName };\n}\n\nfunction makeSelfUpdateCommand(\n\tinstallStep: SelfUpdateCommandStep,\n\tuninstallStep?: SelfUpdateCommandStep,\n): SelfUpdateCommand {\n\tif (!uninstallStep) return installStep;\n\treturn {\n\t\t...installStep,\n\t\tdisplay: `${uninstallStep.display} && ${installStep.display}`,\n\t\tsteps: [uninstallStep, installStep],\n\t};\n}\n\nfunction makeSelfUpdateCommandStep(command: string, args: string[]): SelfUpdateCommandStep {\n\treturn {\n\t\tcommand,\n\t\targs,\n\t\tdisplay: [command, ...args].map((arg) => (/\\s/.test(arg) ? `\"${arg}\"` : arg)).join(\" \"),\n\t};\n}\n\nexport function detectInstallMethod(): InstallMethod {\n\tif (isBunBinary) {\n\t\treturn \"bun-binary\";\n\t}\n\n\tconst resolvedPath = `${__dirname}\\0${process.execPath || \"\"}`.toLowerCase().replace(/\\\\/g, \"/\");\n\n\tif (resolvedPath.includes(\"/pnpm/\") || resolvedPath.includes(\"/.pnpm/\")) {\n\t\treturn \"pnpm\";\n\t}\n\tif (resolvedPath.includes(\"/yarn/\") || resolvedPath.includes(\"/.yarn/\")) {\n\t\treturn \"yarn\";\n\t}\n\tif (isBunRuntime || resolvedPath.includes(\"/install/global/node_modules/\")) {\n\t\treturn \"bun\";\n\t}\n\tif (resolvedPath.includes(\"/npm/\") || resolvedPath.includes(\"/node_modules/\")) {\n\t\treturn \"npm\";\n\t}\n\n\treturn \"unknown\";\n}\n\nfunction getInferredNpmInstall(): { root: string; prefix: string } | undefined {\n\tconst packageDir = getPackageDir();\n\tconst path = process.platform === \"win32\" || packageDir.includes(\"\\\\\") ? win32 : { basename, dirname };\n\tconst parent = path.dirname(packageDir);\n\tlet root: string | undefined;\n\tif (path.basename(parent).startsWith(\"@\") && path.basename(path.dirname(parent)) === \"node_modules\") {\n\t\troot = path.dirname(parent);\n\t} else if (path.basename(parent) === \"node_modules\") {\n\t\troot = parent;\n\t}\n\tif (!root) return undefined;\n\tconst rootParent = path.dirname(root);\n\tif (path.basename(rootParent) === \"lib\") return { root, prefix: path.dirname(rootParent) };\n\t// Windows global npm prefixes use `<prefix>\\\\node_modules`, which is\n\t// indistinguishable from local project installs by path shape alone. Do not\n\t// infer unsupported Windows custom prefixes without `npm root -g` evidence.\n\treturn undefined;\n}\n\nfunction getSelfUpdateCommandForMethod(\n\tmethod: InstallMethod,\n\tinstalledPackageName: string,\n\tupdatePackageTarget: SelfUpdatePackageTarget = installedPackageName,\n\tnpmCommand?: string[],\n): SelfUpdateCommand | undefined {\n\tconst target = normalizeSelfUpdatePackageTarget(updatePackageTarget);\n\tswitch (method) {\n\t\tcase \"bun-binary\":\n\t\t\treturn undefined;\n\t\tcase \"pnpm\": {\n\t\t\tconst match = readCommandOutput(\"pnpm\", [\"root\", \"-g\"])\n\t\t\t\t? undefined\n\t\t\t\t: /^(.*[\\\\/]global[\\\\/][^\\\\/]+)[\\\\/]\\.pnpm[\\\\/]/.exec(getPackageDir());\n\t\t\tconst binDirArgs = match\n\t\t\t\t? [`--config.global-bin-dir=${process.env.PNPM_HOME || dirname(dirname(match[1]))}`]\n\t\t\t\t: [];\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"pnpm\", [\n\t\t\t\t\t\"install\",\n\t\t\t\t\t\"-g\",\n\t\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\t\"--config.minimumReleaseAge=0\",\n\t\t\t\t\t...binDirArgs,\n\t\t\t\t\ttarget.installSpec,\n\t\t\t\t]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"pnpm\", [\"remove\", \"-g\", ...binDirArgs, installedPackageName]),\n\t\t\t);\n\t\t}\n\t\tcase \"yarn\":\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"yarn\", [\"global\", \"add\", \"--ignore-scripts\", target.installSpec]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"yarn\", [\"global\", \"remove\", installedPackageName]),\n\t\t\t);\n\t\tcase \"bun\":\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"bun\", [\n\t\t\t\t\t\"install\",\n\t\t\t\t\t\"-g\",\n\t\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\t\"--minimum-release-age=0\",\n\t\t\t\t\ttarget.installSpec,\n\t\t\t\t]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"bun\", [\"uninstall\", \"-g\", installedPackageName]),\n\t\t\t);\n\t\tcase \"npm\": {\n\t\t\tconst [command = \"npm\", ...npmArgs] = npmCommand ?? [];\n\t\t\tconst inferred = npmCommand?.length ? undefined : getInferredNpmInstall();\n\t\t\tconst prefixArgs = [...npmArgs, ...(inferred ? [\"--prefix\", inferred.prefix] : [])];\n\t\t\t// pi.dev advertises releases immediately, so a configured npm age gate would\n\t\t\t// block the update. npm has no per-package age gate, so this also lets new\n\t\t\t// transitive dependency releases through. Managed installs avoid this.\n\t\t\tconst installStep = makeSelfUpdateCommandStep(command, [\n\t\t\t\t...prefixArgs,\n\t\t\t\t\"install\",\n\t\t\t\t\"-g\",\n\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\"--min-release-age=0\",\n\t\t\t\ttarget.installSpec,\n\t\t\t]);\n\t\t\tconst uninstallStep =\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(command, [...prefixArgs, \"uninstall\", \"-g\", installedPackageName]);\n\t\t\treturn makeSelfUpdateCommand(installStep, uninstallStep);\n\t\t}\n\t\tcase \"unknown\":\n\t\t\treturn undefined;\n\t}\n}\n\nfunction readCommandOutput(\n\tcommand: string,\n\targs: string[],\n\toptions: { requireSuccess?: boolean } = {},\n): string | undefined {\n\tconst result = spawnProcessSync(command, args, {\n\t\tencoding: \"utf-8\",\n\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t});\n\tif (result.status === 0) return result.stdout.trim() || undefined;\n\tif (options.requireSuccess) {\n\t\tconst reason = result.error?.message || result.stderr.trim() || `exit code ${result.status ?? \"unknown\"}`;\n\t\tthrow new Error(`Failed to run ${[command, ...args].join(\" \")}: ${reason}`);\n\t}\n\treturn undefined;\n}\n\nfunction getGlobalPackageRoots(method: InstallMethod, _packageName: string, npmCommand?: string[]): string[] {\n\tswitch (method) {\n\t\tcase \"npm\": {\n\t\t\tconst configured = !!npmCommand?.length;\n\t\t\tconst [command = \"npm\", ...npmArgs] = npmCommand ?? [];\n\t\t\tif (configured && command === \"bun\") {\n\t\t\t\tconst bunBin = readCommandOutput(command, [...npmArgs, \"pm\", \"bin\", \"-g\"], {\n\t\t\t\t\trequireSuccess: true,\n\t\t\t\t});\n\t\t\t\tconst roots = [join(homedir(), \".bun\", \"install\", \"global\", \"node_modules\")];\n\t\t\t\tif (bunBin) {\n\t\t\t\t\troots.push(join(dirname(bunBin), \"install\", \"global\", \"node_modules\"));\n\t\t\t\t}\n\t\t\t\treturn roots;\n\t\t\t}\n\t\t\tconst root = readCommandOutput(command, [...npmArgs, \"root\", \"-g\"], {\n\t\t\t\trequireSuccess: configured,\n\t\t\t});\n\t\t\tconst inferred = configured ? undefined : getInferredNpmInstall();\n\t\t\treturn [root, inferred?.root].filter((x): x is string => !!x);\n\t\t}\n\t\tcase \"pnpm\": {\n\t\t\tconst root = readCommandOutput(\"pnpm\", [\"root\", \"-g\"]);\n\t\t\tif (root) return [root, dirname(root)];\n\t\t\tconst match = /^(.*[\\\\/]global[\\\\/][^\\\\/]+)[\\\\/]\\.pnpm[\\\\/]/.exec(getPackageDir());\n\t\t\treturn match ? [match[1]] : [];\n\t\t}\n\t\tcase \"yarn\": {\n\t\t\tconst dir = readCommandOutput(\"yarn\", [\"global\", \"dir\"]);\n\t\t\treturn dir ? [dir, join(dir, \"node_modules\")] : [];\n\t\t}\n\t\tcase \"bun\": {\n\t\t\tconst bunBin = readCommandOutput(\"bun\", [\"pm\", \"bin\", \"-g\"]);\n\t\t\tconst roots = [join(homedir(), \".bun\", \"install\", \"global\", \"node_modules\")];\n\t\t\tif (bunBin) {\n\t\t\t\troots.push(join(dirname(bunBin), \"install\", \"global\", \"node_modules\"));\n\t\t\t}\n\t\t\treturn roots;\n\t\t}\n\t\tcase \"bun-binary\":\n\t\tcase \"unknown\":\n\t\t\treturn [];\n\t}\n}\n\nfunction normalizeExistingPathForComparison(path: string, resolveSymlinks: boolean): string | undefined {\n\tconst resolvedPath = resolve(path);\n\tif (!existsSync(resolvedPath)) {\n\t\treturn undefined;\n\t}\n\tlet normalizedPath = resolvedPath;\n\tif (resolveSymlinks) {\n\t\ttry {\n\t\t\tnormalizedPath = realpathSync(resolvedPath);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (process.platform === \"win32\") {\n\t\tnormalizedPath = normalizedPath.toLowerCase();\n\t}\n\treturn normalizedPath;\n}\n\nfunction getPathComparisonCandidates(path: string): string[] {\n\treturn Array.from(\n\t\tnew Set(\n\t\t\t[normalizeExistingPathForComparison(path, false), normalizeExistingPathForComparison(path, true)].filter(\n\t\t\t\t(candidate): candidate is string => !!candidate,\n\t\t\t),\n\t\t),\n\t);\n}\n\nfunction getEntrypointPackageDir(): string | undefined {\n\tconst entrypoint = process.argv[1];\n\tif (!entrypoint) return undefined;\n\tlet dir = dirname(entrypoint);\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\"))) {\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\treturn undefined;\n}\n\nfunction isSelfUpdatePathWritable(): boolean {\n\tconst packageDir = getPackageDir();\n\ttry {\n\t\taccessSync(packageDir, constants.W_OK);\n\t\taccessSync(dirname(packageDir), constants.W_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isManagedByGlobalPackageManager(method: InstallMethod, packageName: string, npmCommand?: string[]): boolean {\n\tconst packageDirs = [getPackageDir(), getEntrypointPackageDir()].filter((dir): dir is string => !!dir);\n\tconst packageDirCandidates = packageDirs.flatMap((dir) => getPathComparisonCandidates(dir));\n\treturn getGlobalPackageRoots(method, packageName, npmCommand).some((root) => {\n\t\treturn getPathComparisonCandidates(root).some((normalizedRoot) => {\n\t\t\tconst rootPrefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n\t\t\treturn packageDirCandidates.some((packageDir) => packageDir.startsWith(rootPrefix));\n\t\t});\n\t});\n}\n\nexport function getSelfUpdateCommand(\n\tpackageName: string,\n\tnpmCommand?: string[],\n\tupdatePackageTarget: SelfUpdatePackageTarget = packageName,\n): SelfUpdateCommand | undefined {\n\tconst method = detectInstallMethod();\n\tconst command = getSelfUpdateCommandForMethod(method, packageName, updatePackageTarget, npmCommand);\n\tif (!command || !isManagedByGlobalPackageManager(method, packageName, npmCommand) || !isSelfUpdatePathWritable()) {\n\t\treturn undefined;\n\t}\n\treturn command;\n}\n\nexport function getSelfUpdateUnavailableInstruction(\n\tpackageName: string,\n\tnpmCommand?: string[],\n\tupdatePackageTarget: SelfUpdatePackageTarget = packageName,\n): string {\n\tconst method = detectInstallMethod();\n\tconst target = normalizeSelfUpdatePackageTarget(updatePackageTarget);\n\tif (method === \"bun-binary\") {\n\t\treturn `Download from: ${getBinaryReleaseUrl()}`;\n\t}\n\tconst command = getSelfUpdateCommandForMethod(method, packageName, target, npmCommand);\n\tif (command) {\n\t\tif (isManagedByGlobalPackageManager(method, packageName, npmCommand) && !isSelfUpdatePathWritable()) {\n\t\t\treturn `This installation is managed by a global ${method} install, but the install path is not writable. Update it yourself with: ${command.display}`;\n\t\t}\n\t\treturn `This installation is not managed by a global ${method} install. Update it with the package manager, wrapper, or source checkout that provides it.`;\n\t}\n\treturn `Update ${target.installSpec} using the package manager, wrapper, or source checkout that provides this installation.`;\n}\n\nexport function getUpdateInstruction(packageName: string): string {\n\tconst method = detectInstallMethod();\n\tconst command = getSelfUpdateCommandForMethod(method, packageName);\n\tif (command) {\n\t\treturn `Run: ${command.display}`;\n\t}\n\treturn getSelfUpdateUnavailableInstruction(packageName);\n}\n\n// =============================================================================\n// Package Asset Paths (shipped with executable)\n// =============================================================================\n\n/**\n * Get the base directory for resolving package assets (themes, package.json, README.md, CHANGELOG.md).\n * - For Bun binary: returns the directory containing the executable\n * - For Node.js: returns the package root containing package.json\n * - Ignores Bun binary metadata copied into dist/ when the package root is available\n */\nexport function findNodePackageDir(startDir: string): string {\n\tlet dir = startDir;\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\"))) {\n\t\t\tconst parent = dirname(dir);\n\t\t\t// Binary builds copy package metadata into dist/. Node still needs the\n\t\t\t// package root so dist-relative asset paths do not become dist/dist/.\n\t\t\tif (basename(dir) === \"dist\" && existsSync(join(parent, \"package.json\"))) {\n\t\t\t\treturn parent;\n\t\t\t}\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\treturn startDir;\n}\n\nexport function getPackageDir(): string {\n\t// Allow override via environment variable (useful for Nix/Guix where store paths tokenize poorly)\n\tconst envDir = process.env[BOOTSTRAP_ENV_PACKAGE_DIR];\n\tif (envDir) {\n\t\treturn normalizePath(envDir);\n\t}\n\n\tif (isBunBinary) {\n\t\t// Bun binary: process.execPath points to the compiled executable\n\t\treturn dirname(process.execPath);\n\t}\n\treturn findNodePackageDir(__dirname);\n}\n\n/**\n * Get path to built-in themes directory (shipped with package)\n * - For Bun binary: theme/ next to executable\n * - For Node.js (dist/): dist/modes/interactive/theme/\n * - For source (src/): src/modes/interactive/theme/\n */\nexport function getThemesDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"theme\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst distThemes = join(packageDir, \"dist\", \"modes\", \"interactive\", \"theme\");\n\treturn existsSync(join(distThemes, \"dark.json\"))\n\t\t? distThemes\n\t\t: join(packageDir, \"src\", \"modes\", \"interactive\", \"theme\");\n}\n\n/**\n * Get path to HTML export template directory (shipped with package)\n * - For Bun binary: export-html/ next to executable\n * - For Node.js (dist/): dist/core/export-html/\n * - For source (src/): src/core/export-html/\n */\nexport function getExportTemplateDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"export-html\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"core\", \"export-html\");\n}\n\n/** Get path to package.json */\nexport function getPackageJsonPath(): string {\n\treturn join(getPackageDir(), \"package.json\");\n}\n\n/** Get path to README.md */\nexport function getReadmePath(): string {\n\treturn resolve(join(getPackageDir(), \"README.md\"));\n}\n\n/** Get path to docs directory */\nexport function getDocsPath(): string {\n\treturn resolve(join(getPackageDir(), \"docs\"));\n}\n\n/** Get path to examples directory */\nexport function getExamplesPath(): string {\n\treturn resolve(join(getPackageDir(), \"examples\"));\n}\n\n/** Get path to CHANGELOG.md */\nexport function getChangelogPath(): string {\n\treturn resolve(join(getPackageDir(), \"CHANGELOG.md\"));\n}\n\n/**\n * Get path to built-in interactive assets directory.\n * - For Bun binary: assets/ next to executable\n * - For Node.js (dist/): dist/modes/interactive/assets/\n * - For source (src/): src/modes/interactive/assets/\n */\nexport function getInteractiveAssetsDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"assets\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"modes\", \"interactive\", \"assets\");\n}\n\n/** Get path to a bundled interactive asset */\nexport function getBundledInteractiveAssetPath(name: string): string {\n\treturn join(getInteractiveAssetsDir(), name);\n}\n\n/**\n * Get path to a vendored HUMAIN module's runtime assets (skill markdown, license text).\n * - For Bun binary: humain-modules/<module>/ next to executable (copied by scripts/build-binaries.sh)\n * - For Node.js (npm package or source checkout): src/humain/<module>/vendor/ (shipped via package.json `files`)\n */\nexport function getHumainModuleAssetsDir(moduleName: string): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"humain-modules\", moduleName);\n\t}\n\treturn join(getPackageDir(), \"src\", \"humain\", moduleName, \"vendor\");\n}\n\nlet quickJSWasmPath: string | undefined;\n\n/** Called by the Bun entry with the path of the QuickJS wasm file embedded in the compiled executable. */\nexport function setEmbeddedQuickJSWasmPath(path: string): void {\n\tquickJSWasmPath = path;\n}\n\n/**\n * Get path to `quickjs-wasi/quickjs.wasm`, the VM that runs codemode scripts. Resolved once so the\n * compiled module cached per path keeps working after an update removes this install (#10439).\n */\nexport function getQuickJSWasmPath(): string {\n\tquickJSWasmPath ??= createRequire(import.meta.url).resolve(\"quickjs-wasi/quickjs.wasm\");\n\treturn quickJSWasmPath;\n}\n\n/** Resolve the codemode worker entry for a release runtime. */\nexport function resolveCodemodeWorkerSpecifier(\n\truntime: \"bun-binary\" | \"bundled-node\" | \"unbundled\",\n\tmoduleUrl: string,\n): string | URL | undefined {\n\t// Bun embeds explicit source entrypoints, but on Windows Bun 1.3 cannot map an absolute\n\t// B:\\~BUN URL back to one. A relative string with the original source extension works on\n\t// every Bun platform. Bun keeps entrypoints relative to their common directory, which is src/\n\t// because HUMAIN builds the binary from src/bun/cli.ts (see scripts/build-binaries.sh).\n\tif (runtime === \"bun-binary\") return \"./extensions/codemode/worker.ts\";\n\tif (runtime === \"bundled-node\") return new URL(\"./codemode-worker.js\", moduleUrl);\n\treturn undefined;\n}\n\nlet codemodeWorkerDataUrl: URL | undefined;\n\n/**\n * Get the codemode worker entry, or undefined to use the worker that ships next to pi-codemode.\n * The Bun and Node release builds both pass the worker as an extra entrypoint.\n */\nexport function getCodemodeWorkerSpecifier(): string | URL | undefined {\n\tconst runtime = isBunBinary ? \"bun-binary\" : isBundledNode ? \"bundled-node\" : \"unbundled\";\n\tconst specifier = resolveCodemodeWorkerSpecifier(runtime, import.meta.url);\n\tif (runtime !== \"bundled-node\" || !(specifier instanceof URL)) return specifier;\n\t// Spawn workers from an in-memory copy. An update replaces or deletes the file while this\n\t// process keeps running (#10439). The bundle build keeps the worker free of relative imports\n\t// and import.meta, so it runs from a data: URL.\n\tcodemodeWorkerDataUrl ??= new URL(`data:text/javascript;base64,${readFileSync(specifier).toString(\"base64\")}`);\n\treturn codemodeWorkerDataUrl;\n}\n\nexport type InstallChange = { kind: \"updated\"; version: string } | { kind: \"removed\" };\n\n/**\n * Detect that the package this process runs from changed on disk, for example after `pi update`\n * in another terminal. Code loaded on demand can then be missing or from another version.\n *\n * Checks the package.json read at startup. Resolving it again would walk up past a deleted install\n * and could find an unrelated package.json, such as one in the home directory.\n */\nexport function detectInstallChange(packageJsonPath = startupPackageJsonPath): InstallChange | undefined {\n\t// The Bun binary embeds its code, so replacing the executable does not affect this process.\n\tif (isBunBinary || !packageJsonPath) return undefined;\n\tlet installed: PackageJson;\n\ttry {\n\t\tinstalled = JSON.parse(stripBom(readFileSync(packageJsonPath, \"utf-8\"))) as PackageJson;\n\t} catch (error) {\n\t\treturn (error as NodeJS.ErrnoException).code === \"ENOENT\" ? { kind: \"removed\" } : undefined;\n\t}\n\treturn installed.version && installed.version !== VERSION\n\t\t? { kind: \"updated\", version: installed.version }\n\t\t: undefined;\n}\n\n// =============================================================================\n// App Config (from package.json humainTerminalConfig; piConfig is a legacy fallback)\n// =============================================================================\n\ninterface PackageAppConfig {\n\tname?: string;\n\ttitle?: string;\n\tconfigDir?: string;\n\tenvPrefix?: string;\n\tfirstTimeSetup?: boolean;\n\tupstreamPiVersion?: string;\n}\n\ninterface PackageJson {\n\tname?: string;\n\tversion?: string;\n\thumainTerminalConfig?: PackageAppConfig;\n\tpiConfig?: PackageAppConfig;\n}\n\nlet pkg: PackageJson = {};\n/** The package.json this process started from, if one existed. */\nlet startupPackageJsonPath: string | undefined;\ntry {\n\tconst packageJsonPath = getPackageJsonPath();\n\tpkg = JSON.parse(stripBom(readFileSync(packageJsonPath, \"utf-8\"))) as PackageJson;\n\tstartupPackageJsonPath = packageJsonPath;\n} catch (e: unknown) {\n\tconst err = e as NodeJS.ErrnoException;\n\tif (err.code !== \"ENOENT\") throw e;\n}\n\nconst appConfig = pkg.humainTerminalConfig ?? pkg.piConfig;\nconst appConfigName: string | undefined = appConfig?.name;\nconst appConfigTitle: string | undefined = appConfig?.title;\nconst appConfigEnvPrefix: string | undefined = appConfig?.envPrefix;\n\nfunction sanitizeEnvPrefix(value: string): string {\n\treturn value\n\t\t.trim()\n\t\t.replace(/[^a-zA-Z0-9]+/g, \"_\")\n\t\t.replace(/^_+|_+$/g, \"\")\n\t\t.toUpperCase();\n}\n\nexport const PACKAGE_NAME: string = pkg.name || \"@humain/humain-code\";\nexport const APP_NAME: string = appConfigName || \"pi\";\nexport const APP_TITLE: string = appConfigTitle || (appConfigName ? APP_NAME : \"π\");\n/** Display-only command name shown in help and usage text. Never use for paths, ids, or env vars. */\nexport const APP_COMMAND: string = APP_NAME === \"humain-terminal\" ? \"humain-code\" : APP_NAME;\nexport const CONFIG_DIR_NAME: string = appConfig?.configDir || \".pi\";\nexport const FIRST_TIME_SETUP_ENABLED: boolean = appConfig?.firstTimeSetup ?? false;\nexport const VERSION: string = pkg.version || \"0.0.0\";\nexport const UPSTREAM_PI_VERSION: string = appConfig?.upstreamPiVersion || \"0.0.0\";\n\n// e.g., PI_CODING_AGENT_DIR, TAU_CODING_AGENT_DIR, or HUMAIN_TERMINAL_CODING_AGENT_DIR.\nexport const ENV_PREFIX = sanitizeEnvPrefix(appConfigEnvPrefix || APP_NAME);\nexport const ENV_AGENT_DIR = `${ENV_PREFIX}_CODING_AGENT_DIR`;\nexport const ENV_SESSION_DIR = `${ENV_PREFIX}_CODING_AGENT_SESSION_DIR`;\nexport const ENV_SESSION_ID = `${ENV_PREFIX}_SESSION_ID`;\nexport const ENV_SESSION_FILE = `${ENV_PREFIX}_SESSION_FILE`;\nexport const ENV_PROVIDER = `${ENV_PREFIX}_PROVIDER`;\nexport const ENV_MODEL = `${ENV_PREFIX}_MODEL`;\nexport const ENV_MCP_CLIENT_METADATA_URL = `${ENV_PREFIX}_MCP_CLIENT_METADATA_URL`;\nexport const ENV_REASONING_LEVEL = `${ENV_PREFIX}_REASONING_LEVEL`;\nexport const ENV_OFFLINE = `${ENV_PREFIX}_OFFLINE`;\nexport const ENV_PACKAGE_DIR = `${ENV_PREFIX}_PACKAGE_DIR`;\nexport const ENV_SHARE_VIEWER_URL = `${ENV_PREFIX}_SHARE_VIEWER_URL`;\nexport const ENV_SKIP_VERSION_CHECK = `${ENV_PREFIX}_SKIP_VERSION_CHECK`;\nexport const ENV_STARTUP_BENCHMARK = `${ENV_PREFIX}_STARTUP_BENCHMARK`;\nexport const ENV_TELEMETRY = `${ENV_PREFIX}_TELEMETRY`;\nexport const ENV_VERSION_CHECK_URL = `${ENV_PREFIX}_VERSION_CHECK_URL`;\nexport const ENV_BINARY_RELEASE_URL = `${ENV_PREFIX}_BINARY_RELEASE_URL`;\nexport const ENV_INSTALL_TELEMETRY_URL = `${ENV_PREFIX}_INSTALL_TELEMETRY_URL`;\nexport const ENV_CHANGELOG_URL = `${ENV_PREFIX}_CHANGELOG_URL`;\n\nexport function expandTildePath(path: string): string {\n\treturn normalizePath(path);\n}\n\nexport const HUMAIN_TERMINAL_WEB_URL = \"https://code.humain.com\";\nexport const HUMAIN_TERMINAL_BINARY_RELEASE_URL =\n\t\"https://gitlab.humain.com/humain/data-and-ai-modeling/standard/agentic/humain-terminal/-/releases/permalink/latest\";\n// The npm registry is the source of truth for the latest release: no hosted endpoint needed. Its `name` and `version`\n// fields give the package to install; HUMAIN_TERMINAL_VERSION_CHECK_URL can point at any URL with the same JSON shape.\nexport const HUMAIN_TERMINAL_VERSION_CHECK_URL = \"https://registry.npmjs.org/@humain%2fhumain-code/latest\";\nexport const HUMAIN_TERMINAL_INSTALL_TELEMETRY_URL = `${HUMAIN_TERMINAL_WEB_URL}/api/report-install`;\nexport const HUMAIN_TERMINAL_CHANGELOG_URL = `${HUMAIN_TERMINAL_WEB_URL}/changelog`;\nexport const DEFAULT_SHARE_VIEWER_URL = `${HUMAIN_TERMINAL_WEB_URL}/session/`;\n\nexport function getVersionCheckUrl(): string {\n\treturn process.env[ENV_VERSION_CHECK_URL] || HUMAIN_TERMINAL_VERSION_CHECK_URL;\n}\n\nexport function getBinaryReleaseUrl(): string {\n\treturn process.env[ENV_BINARY_RELEASE_URL] || HUMAIN_TERMINAL_BINARY_RELEASE_URL;\n}\n\nexport function getInstallTelemetryUrl(version: string): string {\n\tconst url = new URL(process.env[ENV_INSTALL_TELEMETRY_URL] || HUMAIN_TERMINAL_INSTALL_TELEMETRY_URL);\n\turl.searchParams.set(\"version\", version);\n\treturn url.toString();\n}\n\nexport function getChangelogUrl(): string {\n\treturn process.env[ENV_CHANGELOG_URL] || HUMAIN_TERMINAL_CHANGELOG_URL;\n}\n\n/** Get the share viewer URL for a gist ID */\nexport function getShareViewerUrl(gistId: string): string {\n\tconst baseUrl = process.env[ENV_SHARE_VIEWER_URL] || process.env.PI_SHARE_VIEWER_URL || DEFAULT_SHARE_VIEWER_URL;\n\treturn `${baseUrl}#${gistId}`;\n}\n\n// =============================================================================\n// User Config Paths (~/.humain-terminal/agent/*)\n// =============================================================================\n\n/** Get the agent config directory (e.g., ~/.humain-terminal/agent/) */\nexport function getAgentDir(): string {\n\tconst envDir = process.env[ENV_AGENT_DIR];\n\tif (envDir) {\n\t\treturn expandTildePath(envDir);\n\t}\n\treturn join(homedir(), CONFIG_DIR_NAME, \"agent\");\n}\n\n/** Get path to user's custom themes directory */\nexport function getCustomThemesDir(): string {\n\treturn join(getAgentDir(), \"themes\");\n}\n\n/** Get path to models.json */\nexport function getModelsPath(): string {\n\treturn join(getAgentDir(), \"models.json\");\n}\n\n/** Get path to auth.json */\nexport function getAuthPath(): string {\n\treturn join(getAgentDir(), \"auth.json\");\n}\n\n/** Get path to settings.json */\nexport function getSettingsPath(): string {\n\treturn join(getAgentDir(), \"settings.json\");\n}\n\n/** Get path to tools directory */\nexport function getToolsDir(): string {\n\treturn join(getAgentDir(), \"tools\");\n}\n\n/** Get path to managed binaries directory (fd, rg) */\nexport function getBinDir(): string {\n\treturn join(getAgentDir(), \"bin\");\n}\n\n/** Get path to prompt templates directory */\nexport function getPromptsDir(): string {\n\treturn join(getAgentDir(), \"prompts\");\n}\n\n/** Get path to sessions directory */\nexport function getSessionsDir(): string {\n\treturn join(getAgentDir(), \"sessions\");\n}\n\n/** Get path to debug log file */\nexport function getDebugLogPath(): string {\n\treturn join(getAgentDir(), `${APP_NAME}-debug.log`);\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { accessSync, constants, existsSync, readFileSync, realpathSync } from \"fs\";\nimport { createRequire } from \"module\";\nimport { homedir } from \"os\";\nimport { basename, dirname, join, resolve, sep, win32 } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { spawnProcessSync } from \"./utils/child-process.ts\";\nimport { normalizePath } from \"./utils/paths.ts\";\nimport { stripBom } from \"./utils/text.ts\";\n\n// =============================================================================\n// Package Detection\n// =============================================================================\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst BOOTSTRAP_ENV_PACKAGE_DIR = \"HUMAIN_TERMINAL_PACKAGE_DIR\";\n\n/**\n * Detect if we're running as a Bun compiled binary.\n * Bun binaries have import.meta.url containing \"$bunfs\", \"~BUN\", or \"%7EBUN\" (Bun's virtual filesystem path)\n */\nexport const isBunBinary =\n\timport.meta.url.includes(\"$bunfs\") || import.meta.url.includes(\"~BUN\") || import.meta.url.includes(\"%7EBUN\");\n\n/** Detect if Bun is the runtime (compiled binary or bun run) */\nexport const isBunRuntime = !!process.versions.bun;\n\n/** Detect the esbuild-bundled Node.js distribution. */\ndeclare const PI_BUNDLED_NODE: boolean;\nexport const isBundledNode = typeof PI_BUNDLED_NODE !== \"undefined\" && PI_BUNDLED_NODE;\n\n// =============================================================================\n// Install Method Detection\n// =============================================================================\n\nexport type InstallMethod = \"bun-binary\" | \"npm\" | \"pnpm\" | \"yarn\" | \"bun\" | \"unknown\";\n\ninterface SelfUpdateCommandStep {\n\tcommand: string;\n\targs: string[];\n\tdisplay: string;\n}\n\nexport interface SelfUpdateCommand extends SelfUpdateCommandStep {\n\tsteps?: SelfUpdateCommandStep[];\n}\n\nexport type SelfUpdatePackageTarget = string | { packageName: string; installSpec?: string };\n\nfunction normalizeSelfUpdatePackageTarget(target: SelfUpdatePackageTarget): {\n\tpackageName: string;\n\tinstallSpec: string;\n} {\n\tif (typeof target === \"string\") {\n\t\treturn { packageName: target, installSpec: target };\n\t}\n\treturn { packageName: target.packageName, installSpec: target.installSpec ?? target.packageName };\n}\n\nfunction makeSelfUpdateCommand(\n\tinstallStep: SelfUpdateCommandStep,\n\tuninstallStep?: SelfUpdateCommandStep,\n): SelfUpdateCommand {\n\tif (!uninstallStep) return installStep;\n\treturn {\n\t\t...installStep,\n\t\tdisplay: `${uninstallStep.display} && ${installStep.display}`,\n\t\tsteps: [uninstallStep, installStep],\n\t};\n}\n\nfunction makeSelfUpdateCommandStep(command: string, args: string[]): SelfUpdateCommandStep {\n\treturn {\n\t\tcommand,\n\t\targs,\n\t\tdisplay: [command, ...args].map((arg) => (/\\s/.test(arg) ? `\"${arg}\"` : arg)).join(\" \"),\n\t};\n}\n\nexport function detectInstallMethod(): InstallMethod {\n\tif (isBunBinary) {\n\t\treturn \"bun-binary\";\n\t}\n\n\tconst resolvedPath = `${__dirname}\\0${process.execPath || \"\"}`.toLowerCase().replace(/\\\\/g, \"/\");\n\n\tif (resolvedPath.includes(\"/pnpm/\") || resolvedPath.includes(\"/.pnpm/\")) {\n\t\treturn \"pnpm\";\n\t}\n\tif (resolvedPath.includes(\"/yarn/\") || resolvedPath.includes(\"/.yarn/\")) {\n\t\treturn \"yarn\";\n\t}\n\tif (isBunRuntime || resolvedPath.includes(\"/install/global/node_modules/\")) {\n\t\treturn \"bun\";\n\t}\n\tif (resolvedPath.includes(\"/npm/\") || resolvedPath.includes(\"/node_modules/\")) {\n\t\treturn \"npm\";\n\t}\n\n\treturn \"unknown\";\n}\n\nfunction getInferredNpmInstall(): { root: string; prefix: string } | undefined {\n\tconst packageDir = getPackageDir();\n\tconst path = process.platform === \"win32\" || packageDir.includes(\"\\\\\") ? win32 : { basename, dirname };\n\tconst parent = path.dirname(packageDir);\n\tlet root: string | undefined;\n\tif (path.basename(parent).startsWith(\"@\") && path.basename(path.dirname(parent)) === \"node_modules\") {\n\t\troot = path.dirname(parent);\n\t} else if (path.basename(parent) === \"node_modules\") {\n\t\troot = parent;\n\t}\n\tif (!root) return undefined;\n\tconst rootParent = path.dirname(root);\n\tif (path.basename(rootParent) === \"lib\") return { root, prefix: path.dirname(rootParent) };\n\t// Windows global npm prefixes use `<prefix>\\\\node_modules`, which is\n\t// indistinguishable from local project installs by path shape alone. Do not\n\t// infer unsupported Windows custom prefixes without `npm root -g` evidence.\n\treturn undefined;\n}\n\nfunction getSelfUpdateCommandForMethod(\n\tmethod: InstallMethod,\n\tinstalledPackageName: string,\n\tupdatePackageTarget: SelfUpdatePackageTarget = installedPackageName,\n\tnpmCommand?: string[],\n): SelfUpdateCommand | undefined {\n\tconst target = normalizeSelfUpdatePackageTarget(updatePackageTarget);\n\tswitch (method) {\n\t\tcase \"bun-binary\":\n\t\t\treturn undefined;\n\t\tcase \"pnpm\": {\n\t\t\tconst match = readCommandOutput(\"pnpm\", [\"root\", \"-g\"])\n\t\t\t\t? undefined\n\t\t\t\t: /^(.*[\\\\/]global[\\\\/][^\\\\/]+)[\\\\/]\\.pnpm[\\\\/]/.exec(getPackageDir());\n\t\t\tconst binDirArgs = match\n\t\t\t\t? [`--config.global-bin-dir=${process.env.PNPM_HOME || dirname(dirname(match[1]))}`]\n\t\t\t\t: [];\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"pnpm\", [\n\t\t\t\t\t\"install\",\n\t\t\t\t\t\"-g\",\n\t\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\t\"--config.minimumReleaseAge=0\",\n\t\t\t\t\t...binDirArgs,\n\t\t\t\t\ttarget.installSpec,\n\t\t\t\t]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"pnpm\", [\"remove\", \"-g\", ...binDirArgs, installedPackageName]),\n\t\t\t);\n\t\t}\n\t\tcase \"yarn\":\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"yarn\", [\"global\", \"add\", \"--ignore-scripts\", target.installSpec]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"yarn\", [\"global\", \"remove\", installedPackageName]),\n\t\t\t);\n\t\tcase \"bun\":\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"bun\", [\n\t\t\t\t\t\"install\",\n\t\t\t\t\t\"-g\",\n\t\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\t\"--minimum-release-age=0\",\n\t\t\t\t\ttarget.installSpec,\n\t\t\t\t]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"bun\", [\"uninstall\", \"-g\", installedPackageName]),\n\t\t\t);\n\t\tcase \"npm\": {\n\t\t\tconst [command = \"npm\", ...npmArgs] = npmCommand ?? [];\n\t\t\tconst inferred = npmCommand?.length ? undefined : getInferredNpmInstall();\n\t\t\tconst prefixArgs = [...npmArgs, ...(inferred ? [\"--prefix\", inferred.prefix] : [])];\n\t\t\t// pi.dev advertises releases immediately, so a configured npm age gate would\n\t\t\t// block the update. npm has no per-package age gate, so this also lets new\n\t\t\t// transitive dependency releases through. Managed installs avoid this.\n\t\t\tconst installStep = makeSelfUpdateCommandStep(command, [\n\t\t\t\t...prefixArgs,\n\t\t\t\t\"install\",\n\t\t\t\t\"-g\",\n\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\"--min-release-age=0\",\n\t\t\t\ttarget.installSpec,\n\t\t\t]);\n\t\t\tconst uninstallStep =\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(command, [...prefixArgs, \"uninstall\", \"-g\", installedPackageName]);\n\t\t\treturn makeSelfUpdateCommand(installStep, uninstallStep);\n\t\t}\n\t\tcase \"unknown\":\n\t\t\treturn undefined;\n\t}\n}\n\nfunction readCommandOutput(\n\tcommand: string,\n\targs: string[],\n\toptions: { requireSuccess?: boolean } = {},\n): string | undefined {\n\tconst result = spawnProcessSync(command, args, {\n\t\tencoding: \"utf-8\",\n\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t});\n\tif (result.status === 0) return result.stdout.trim() || undefined;\n\tif (options.requireSuccess) {\n\t\tconst reason = result.error?.message || result.stderr.trim() || `exit code ${result.status ?? \"unknown\"}`;\n\t\tthrow new Error(`Failed to run ${[command, ...args].join(\" \")}: ${reason}`);\n\t}\n\treturn undefined;\n}\n\nfunction getGlobalPackageRoots(method: InstallMethod, _packageName: string, npmCommand?: string[]): string[] {\n\tswitch (method) {\n\t\tcase \"npm\": {\n\t\t\tconst configured = !!npmCommand?.length;\n\t\t\tconst [command = \"npm\", ...npmArgs] = npmCommand ?? [];\n\t\t\tif (configured && command === \"bun\") {\n\t\t\t\tconst bunBin = readCommandOutput(command, [...npmArgs, \"pm\", \"bin\", \"-g\"], {\n\t\t\t\t\trequireSuccess: true,\n\t\t\t\t});\n\t\t\t\tconst roots = [join(homedir(), \".bun\", \"install\", \"global\", \"node_modules\")];\n\t\t\t\tif (bunBin) {\n\t\t\t\t\troots.push(join(dirname(bunBin), \"install\", \"global\", \"node_modules\"));\n\t\t\t\t}\n\t\t\t\treturn roots;\n\t\t\t}\n\t\t\tconst root = readCommandOutput(command, [...npmArgs, \"root\", \"-g\"], {\n\t\t\t\trequireSuccess: configured,\n\t\t\t});\n\t\t\tconst inferred = configured ? undefined : getInferredNpmInstall();\n\t\t\treturn [root, inferred?.root].filter((x): x is string => !!x);\n\t\t}\n\t\tcase \"pnpm\": {\n\t\t\tconst root = readCommandOutput(\"pnpm\", [\"root\", \"-g\"]);\n\t\t\tif (root) return [root, dirname(root)];\n\t\t\tconst match = /^(.*[\\\\/]global[\\\\/][^\\\\/]+)[\\\\/]\\.pnpm[\\\\/]/.exec(getPackageDir());\n\t\t\treturn match ? [match[1]] : [];\n\t\t}\n\t\tcase \"yarn\": {\n\t\t\tconst dir = readCommandOutput(\"yarn\", [\"global\", \"dir\"]);\n\t\t\treturn dir ? [dir, join(dir, \"node_modules\")] : [];\n\t\t}\n\t\tcase \"bun\": {\n\t\t\tconst bunBin = readCommandOutput(\"bun\", [\"pm\", \"bin\", \"-g\"]);\n\t\t\tconst roots = [join(homedir(), \".bun\", \"install\", \"global\", \"node_modules\")];\n\t\t\tif (bunBin) {\n\t\t\t\troots.push(join(dirname(bunBin), \"install\", \"global\", \"node_modules\"));\n\t\t\t}\n\t\t\treturn roots;\n\t\t}\n\t\tcase \"bun-binary\":\n\t\tcase \"unknown\":\n\t\t\treturn [];\n\t}\n}\n\nfunction normalizeExistingPathForComparison(path: string, resolveSymlinks: boolean): string | undefined {\n\tconst resolvedPath = resolve(path);\n\tif (!existsSync(resolvedPath)) {\n\t\treturn undefined;\n\t}\n\tlet normalizedPath = resolvedPath;\n\tif (resolveSymlinks) {\n\t\ttry {\n\t\t\tnormalizedPath = realpathSync(resolvedPath);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (process.platform === \"win32\") {\n\t\tnormalizedPath = normalizedPath.toLowerCase();\n\t}\n\treturn normalizedPath;\n}\n\nfunction getPathComparisonCandidates(path: string): string[] {\n\treturn Array.from(\n\t\tnew Set(\n\t\t\t[normalizeExistingPathForComparison(path, false), normalizeExistingPathForComparison(path, true)].filter(\n\t\t\t\t(candidate): candidate is string => !!candidate,\n\t\t\t),\n\t\t),\n\t);\n}\n\nfunction getEntrypointPackageDir(): string | undefined {\n\tconst entrypoint = process.argv[1];\n\tif (!entrypoint) return undefined;\n\tlet dir = dirname(entrypoint);\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\"))) {\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\treturn undefined;\n}\n\nfunction isSelfUpdatePathWritable(): boolean {\n\tconst packageDir = getPackageDir();\n\ttry {\n\t\taccessSync(packageDir, constants.W_OK);\n\t\taccessSync(dirname(packageDir), constants.W_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isManagedByGlobalPackageManager(method: InstallMethod, packageName: string, npmCommand?: string[]): boolean {\n\tconst packageDirs = [getPackageDir(), getEntrypointPackageDir()].filter((dir): dir is string => !!dir);\n\tconst packageDirCandidates = packageDirs.flatMap((dir) => getPathComparisonCandidates(dir));\n\treturn getGlobalPackageRoots(method, packageName, npmCommand).some((root) => {\n\t\treturn getPathComparisonCandidates(root).some((normalizedRoot) => {\n\t\t\tconst rootPrefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n\t\t\treturn packageDirCandidates.some((packageDir) => packageDir.startsWith(rootPrefix));\n\t\t});\n\t});\n}\n\nexport function getSelfUpdateCommand(\n\tpackageName: string,\n\tnpmCommand?: string[],\n\tupdatePackageTarget: SelfUpdatePackageTarget = packageName,\n): SelfUpdateCommand | undefined {\n\tconst method = detectInstallMethod();\n\tconst command = getSelfUpdateCommandForMethod(method, packageName, updatePackageTarget, npmCommand);\n\tif (!command || !isManagedByGlobalPackageManager(method, packageName, npmCommand) || !isSelfUpdatePathWritable()) {\n\t\treturn undefined;\n\t}\n\treturn command;\n}\n\nexport function getSelfUpdateUnavailableInstruction(\n\tpackageName: string,\n\tnpmCommand?: string[],\n\tupdatePackageTarget: SelfUpdatePackageTarget = packageName,\n): string {\n\tconst method = detectInstallMethod();\n\tconst target = normalizeSelfUpdatePackageTarget(updatePackageTarget);\n\tif (method === \"bun-binary\") {\n\t\treturn `Download from: ${getBinaryReleaseUrl()}`;\n\t}\n\tconst command = getSelfUpdateCommandForMethod(method, packageName, target, npmCommand);\n\tif (command) {\n\t\tif (isManagedByGlobalPackageManager(method, packageName, npmCommand) && !isSelfUpdatePathWritable()) {\n\t\t\treturn `This installation is managed by a global ${method} install, but the install path is not writable. Update it yourself with: ${command.display}`;\n\t\t}\n\t\treturn `This installation is not managed by a global ${method} install. Update it with the package manager, wrapper, or source checkout that provides it.`;\n\t}\n\treturn `Update ${target.installSpec} using the package manager, wrapper, or source checkout that provides this installation.`;\n}\n\nexport function getUpdateInstruction(packageName: string): string {\n\tconst method = detectInstallMethod();\n\tconst command = getSelfUpdateCommandForMethod(method, packageName);\n\tif (command) {\n\t\treturn `Run: ${command.display}`;\n\t}\n\treturn getSelfUpdateUnavailableInstruction(packageName);\n}\n\n// =============================================================================\n// Package Asset Paths (shipped with executable)\n// =============================================================================\n\n/**\n * Get the base directory for resolving package assets (themes, package.json, README.md, CHANGELOG.md).\n * - For Bun binary: returns the directory containing the executable\n * - For Node.js: returns the package root containing package.json\n * - Ignores Bun binary metadata copied into dist/ when the package root is available\n */\nexport function findNodePackageDir(startDir: string): string {\n\tlet dir = startDir;\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\"))) {\n\t\t\tconst parent = dirname(dir);\n\t\t\t// Binary builds copy package metadata into dist/. Node still needs the\n\t\t\t// package root so dist-relative asset paths do not become dist/dist/.\n\t\t\tif (basename(dir) === \"dist\" && existsSync(join(parent, \"package.json\"))) {\n\t\t\t\treturn parent;\n\t\t\t}\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\treturn startDir;\n}\n\nexport function getPackageDir(): string {\n\t// Allow override via environment variable (useful for Nix/Guix where store paths tokenize poorly)\n\tconst envDir = process.env[BOOTSTRAP_ENV_PACKAGE_DIR];\n\tif (envDir) {\n\t\treturn normalizePath(envDir);\n\t}\n\n\tif (isBunBinary) {\n\t\t// Bun binary: process.execPath points to the compiled executable\n\t\treturn dirname(process.execPath);\n\t}\n\treturn findNodePackageDir(__dirname);\n}\n\n/**\n * Get path to built-in themes directory (shipped with package)\n * - For Bun binary: theme/ next to executable\n * - For Node.js (dist/): dist/modes/interactive/theme/\n * - For source (src/): src/modes/interactive/theme/\n */\nexport function getThemesDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"theme\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst distThemes = join(packageDir, \"dist\", \"modes\", \"interactive\", \"theme\");\n\treturn existsSync(join(distThemes, \"dark.json\"))\n\t\t? distThemes\n\t\t: join(packageDir, \"src\", \"modes\", \"interactive\", \"theme\");\n}\n\n/**\n * Get path to HTML export template directory (shipped with package)\n * - For Bun binary: export-html/ next to executable\n * - For Node.js (dist/): dist/core/export-html/\n * - For source (src/): src/core/export-html/\n */\nexport function getExportTemplateDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"export-html\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"core\", \"export-html\");\n}\n\n/** Get path to package.json */\nexport function getPackageJsonPath(): string {\n\treturn join(getPackageDir(), \"package.json\");\n}\n\n/** Get path to README.md */\nexport function getReadmePath(): string {\n\treturn resolve(join(getPackageDir(), \"README.md\"));\n}\n\n/** Get path to docs directory */\nexport function getDocsPath(): string {\n\treturn resolve(join(getPackageDir(), \"docs\"));\n}\n\n/** Get path to examples directory */\nexport function getExamplesPath(): string {\n\treturn resolve(join(getPackageDir(), \"examples\"));\n}\n\n/** Get path to CHANGELOG.md */\nexport function getChangelogPath(): string {\n\treturn resolve(join(getPackageDir(), \"CHANGELOG.md\"));\n}\n\n/**\n * Get path to built-in interactive assets directory.\n * - For Bun binary: assets/ next to executable\n * - For Node.js (dist/): dist/modes/interactive/assets/\n * - For source (src/): src/modes/interactive/assets/\n */\nexport function getInteractiveAssetsDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"assets\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"modes\", \"interactive\", \"assets\");\n}\n\n/** Get path to a bundled interactive asset */\nexport function getBundledInteractiveAssetPath(name: string): string {\n\treturn join(getInteractiveAssetsDir(), name);\n}\n\n/**\n * Get path to a vendored HUMAIN module's runtime assets (skill markdown, license text).\n * - For Bun binary: humain-modules/<module>/ next to executable (copied by scripts/build-binaries.sh)\n * - For Node.js (npm package or source checkout): src/humain/<module>/vendor/ (shipped via package.json `files`)\n */\nexport function getHumainModuleAssetsDir(moduleName: string): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"humain-modules\", moduleName);\n\t}\n\treturn join(getPackageDir(), \"src\", \"humain\", moduleName, \"vendor\");\n}\n\n/**\n * Directory holding Flow's agents/, assets/ and package.json in a bundled distribution, or undefined when running\n * from a source checkout or unbundled npm install (Flow then finds its own package directory).\n * - For Bun binary: flow/ next to the executable (copied by copy-binary-assets / scripts/build-binaries.sh)\n * - For bundled Node.js: dist/bundle/flow/ (copied by scripts/build-coding-agent-bundle.mjs)\n */\nexport function getBundledFlowPackageDir(): string | undefined {\n\tif (isBunBinary) return resolve(getPackageDir(), \"flow\");\n\tif (isBundledNode) return resolve(getPackageDir(), \"dist\", \"bundle\", \"flow\");\n\treturn undefined;\n}\n\n/**\n * Directory of Flow's built-in profile JSON files, or undefined when Flow can find them itself (source checkout or\n * unbundled npm install). Derived from the bundled package dir so Bun binaries and bundled Node agree with the assets.\n */\nexport function getBundledFlowProfilesDir(): string | undefined {\n\tconst packageDir = getBundledFlowPackageDir();\n\treturn packageDir === undefined ? undefined : join(packageDir, \"assets\", \"profiles\");\n}\n\nlet quickJSWasmPath: string | undefined;\n\n/** Called by the Bun entry with the path of the QuickJS wasm file embedded in the compiled executable. */\nexport function setEmbeddedQuickJSWasmPath(path: string): void {\n\tquickJSWasmPath = path;\n}\n\n/**\n * Get path to `quickjs-wasi/quickjs.wasm`, the VM that runs codemode scripts. Resolved once so the\n * compiled module cached per path keeps working after an update removes this install (#10439).\n */\nexport function getQuickJSWasmPath(): string {\n\tquickJSWasmPath ??= createRequire(import.meta.url).resolve(\"quickjs-wasi/quickjs.wasm\");\n\treturn quickJSWasmPath;\n}\n\n/** Resolve the codemode worker entry for a release runtime. */\nexport function resolveCodemodeWorkerSpecifier(\n\truntime: \"bun-binary\" | \"bundled-node\" | \"unbundled\",\n\tmoduleUrl: string,\n): string | URL | undefined {\n\t// Bun embeds explicit source entrypoints, but on Windows Bun 1.3 cannot map an absolute\n\t// B:\\~BUN URL back to one. A relative string with the original source extension works on\n\t// every Bun platform. Bun keeps entrypoints relative to their common directory, which is src/\n\t// because HUMAIN builds the binary from src/bun/cli.ts (see scripts/build-binaries.sh).\n\tif (runtime === \"bun-binary\") return \"./extensions/codemode/worker.ts\";\n\tif (runtime === \"bundled-node\") return new URL(\"./codemode-worker.js\", moduleUrl);\n\treturn undefined;\n}\n\nlet codemodeWorkerDataUrl: URL | undefined;\n\n/**\n * Get the codemode worker entry, or undefined to use the worker that ships next to pi-codemode.\n * The Bun and Node release builds both pass the worker as an extra entrypoint.\n */\nexport function getCodemodeWorkerSpecifier(): string | URL | undefined {\n\tconst runtime = isBunBinary ? \"bun-binary\" : isBundledNode ? \"bundled-node\" : \"unbundled\";\n\tconst specifier = resolveCodemodeWorkerSpecifier(runtime, import.meta.url);\n\tif (runtime !== \"bundled-node\" || !(specifier instanceof URL)) return specifier;\n\t// Spawn workers from an in-memory copy. An update replaces or deletes the file while this\n\t// process keeps running (#10439). The bundle build keeps the worker free of relative imports\n\t// and import.meta, so it runs from a data: URL.\n\tcodemodeWorkerDataUrl ??= new URL(`data:text/javascript;base64,${readFileSync(specifier).toString(\"base64\")}`);\n\treturn codemodeWorkerDataUrl;\n}\n\nexport type InstallChange = { kind: \"updated\"; version: string } | { kind: \"removed\" };\n\n/**\n * Detect that the package this process runs from changed on disk, for example after `pi update`\n * in another terminal. Code loaded on demand can then be missing or from another version.\n *\n * Checks the package.json read at startup. Resolving it again would walk up past a deleted install\n * and could find an unrelated package.json, such as one in the home directory.\n */\nexport function detectInstallChange(packageJsonPath = startupPackageJsonPath): InstallChange | undefined {\n\t// The Bun binary embeds its code, so replacing the executable does not affect this process.\n\tif (isBunBinary || !packageJsonPath) return undefined;\n\tlet installed: PackageJson;\n\ttry {\n\t\tinstalled = JSON.parse(stripBom(readFileSync(packageJsonPath, \"utf-8\"))) as PackageJson;\n\t} catch (error) {\n\t\treturn (error as NodeJS.ErrnoException).code === \"ENOENT\" ? { kind: \"removed\" } : undefined;\n\t}\n\treturn installed.version && installed.version !== VERSION\n\t\t? { kind: \"updated\", version: installed.version }\n\t\t: undefined;\n}\n\n// =============================================================================\n// App Config (from package.json humainTerminalConfig; piConfig is a legacy fallback)\n// =============================================================================\n\ninterface PackageAppConfig {\n\tname?: string;\n\ttitle?: string;\n\tconfigDir?: string;\n\tenvPrefix?: string;\n\tfirstTimeSetup?: boolean;\n\tupstreamPiVersion?: string;\n}\n\ninterface PackageJson {\n\tname?: string;\n\tversion?: string;\n\thumainTerminalConfig?: PackageAppConfig;\n\tpiConfig?: PackageAppConfig;\n}\n\nlet pkg: PackageJson = {};\n/** The package.json this process started from, if one existed. */\nlet startupPackageJsonPath: string | undefined;\ntry {\n\tconst packageJsonPath = getPackageJsonPath();\n\tpkg = JSON.parse(stripBom(readFileSync(packageJsonPath, \"utf-8\"))) as PackageJson;\n\tstartupPackageJsonPath = packageJsonPath;\n} catch (e: unknown) {\n\tconst err = e as NodeJS.ErrnoException;\n\tif (err.code !== \"ENOENT\") throw e;\n}\n\nconst appConfig = pkg.humainTerminalConfig ?? pkg.piConfig;\nconst appConfigName: string | undefined = appConfig?.name;\nconst appConfigTitle: string | undefined = appConfig?.title;\nconst appConfigEnvPrefix: string | undefined = appConfig?.envPrefix;\n\nfunction sanitizeEnvPrefix(value: string): string {\n\treturn value\n\t\t.trim()\n\t\t.replace(/[^a-zA-Z0-9]+/g, \"_\")\n\t\t.replace(/^_+|_+$/g, \"\")\n\t\t.toUpperCase();\n}\n\nexport const PACKAGE_NAME: string = pkg.name || \"@humain/humain-code\";\nexport const APP_NAME: string = appConfigName || \"pi\";\nexport const APP_TITLE: string = appConfigTitle || (appConfigName ? APP_NAME : \"π\");\n/** Display-only command name shown in help and usage text. Never use for paths, ids, or env vars. */\nexport const APP_COMMAND: string = APP_NAME === \"humain-terminal\" ? \"humain-code\" : APP_NAME;\nexport const CONFIG_DIR_NAME: string = appConfig?.configDir || \".pi\";\nexport const FIRST_TIME_SETUP_ENABLED: boolean = appConfig?.firstTimeSetup ?? false;\nexport const VERSION: string = pkg.version || \"0.0.0\";\nexport const UPSTREAM_PI_VERSION: string = appConfig?.upstreamPiVersion || \"0.0.0\";\n\n// e.g., PI_CODING_AGENT_DIR, TAU_CODING_AGENT_DIR, or HUMAIN_TERMINAL_CODING_AGENT_DIR.\nexport const ENV_PREFIX = sanitizeEnvPrefix(appConfigEnvPrefix || APP_NAME);\nexport const ENV_AGENT_DIR = `${ENV_PREFIX}_CODING_AGENT_DIR`;\nexport const ENV_SESSION_DIR = `${ENV_PREFIX}_CODING_AGENT_SESSION_DIR`;\nexport const ENV_SESSION_ID = `${ENV_PREFIX}_SESSION_ID`;\nexport const ENV_SESSION_FILE = `${ENV_PREFIX}_SESSION_FILE`;\nexport const ENV_PROVIDER = `${ENV_PREFIX}_PROVIDER`;\nexport const ENV_MODEL = `${ENV_PREFIX}_MODEL`;\nexport const ENV_MCP_CLIENT_METADATA_URL = `${ENV_PREFIX}_MCP_CLIENT_METADATA_URL`;\nexport const ENV_REASONING_LEVEL = `${ENV_PREFIX}_REASONING_LEVEL`;\nexport const ENV_OFFLINE = `${ENV_PREFIX}_OFFLINE`;\nexport const ENV_PACKAGE_DIR = `${ENV_PREFIX}_PACKAGE_DIR`;\nexport const ENV_SHARE_VIEWER_URL = `${ENV_PREFIX}_SHARE_VIEWER_URL`;\nexport const ENV_SKIP_VERSION_CHECK = `${ENV_PREFIX}_SKIP_VERSION_CHECK`;\nexport const ENV_STARTUP_BENCHMARK = `${ENV_PREFIX}_STARTUP_BENCHMARK`;\nexport const ENV_TELEMETRY = `${ENV_PREFIX}_TELEMETRY`;\nexport const ENV_VERSION_CHECK_URL = `${ENV_PREFIX}_VERSION_CHECK_URL`;\nexport const ENV_BINARY_RELEASE_URL = `${ENV_PREFIX}_BINARY_RELEASE_URL`;\nexport const ENV_INSTALL_TELEMETRY_URL = `${ENV_PREFIX}_INSTALL_TELEMETRY_URL`;\nexport const ENV_CHANGELOG_URL = `${ENV_PREFIX}_CHANGELOG_URL`;\n\nexport function expandTildePath(path: string): string {\n\treturn normalizePath(path);\n}\n\nexport const HUMAIN_TERMINAL_WEB_URL = \"https://code.humain.com\";\nexport const HUMAIN_TERMINAL_BINARY_RELEASE_URL =\n\t\"https://gitlab.humain.com/humain/data-and-ai-modeling/standard/agentic/humain-terminal/-/releases/permalink/latest\";\n// The npm registry is the source of truth for the latest release: no hosted endpoint needed. Its `name` and `version`\n// fields give the package to install; HUMAIN_TERMINAL_VERSION_CHECK_URL can point at any URL with the same JSON shape.\nexport const HUMAIN_TERMINAL_VERSION_CHECK_URL = \"https://registry.npmjs.org/@humain%2fhumain-code/latest\";\nexport const HUMAIN_TERMINAL_INSTALL_TELEMETRY_URL = `${HUMAIN_TERMINAL_WEB_URL}/api/report-install`;\nexport const HUMAIN_TERMINAL_CHANGELOG_URL = `${HUMAIN_TERMINAL_WEB_URL}/changelog`;\nexport const DEFAULT_SHARE_VIEWER_URL = `${HUMAIN_TERMINAL_WEB_URL}/session/`;\n\nexport function getVersionCheckUrl(): string {\n\treturn process.env[ENV_VERSION_CHECK_URL] || HUMAIN_TERMINAL_VERSION_CHECK_URL;\n}\n\nexport function getBinaryReleaseUrl(): string {\n\treturn process.env[ENV_BINARY_RELEASE_URL] || HUMAIN_TERMINAL_BINARY_RELEASE_URL;\n}\n\nexport function getInstallTelemetryUrl(version: string): string {\n\tconst url = new URL(process.env[ENV_INSTALL_TELEMETRY_URL] || HUMAIN_TERMINAL_INSTALL_TELEMETRY_URL);\n\turl.searchParams.set(\"version\", version);\n\treturn url.toString();\n}\n\nexport function getChangelogUrl(): string {\n\treturn process.env[ENV_CHANGELOG_URL] || HUMAIN_TERMINAL_CHANGELOG_URL;\n}\n\n/** Get the share viewer URL for a gist ID */\nexport function getShareViewerUrl(gistId: string): string {\n\tconst baseUrl = process.env[ENV_SHARE_VIEWER_URL] || process.env.PI_SHARE_VIEWER_URL || DEFAULT_SHARE_VIEWER_URL;\n\treturn `${baseUrl}#${gistId}`;\n}\n\n// =============================================================================\n// User Config Paths (~/.humain-terminal/agent/*)\n// =============================================================================\n\n/** Get the agent config directory (e.g., ~/.humain-terminal/agent/) */\nexport function getAgentDir(): string {\n\tconst envDir = process.env[ENV_AGENT_DIR];\n\tif (envDir) {\n\t\treturn expandTildePath(envDir);\n\t}\n\treturn join(homedir(), CONFIG_DIR_NAME, \"agent\");\n}\n\n/** Get path to user's custom themes directory */\nexport function getCustomThemesDir(): string {\n\treturn join(getAgentDir(), \"themes\");\n}\n\n/** Get path to models.json */\nexport function getModelsPath(): string {\n\treturn join(getAgentDir(), \"models.json\");\n}\n\n/** Get path to auth.json */\nexport function getAuthPath(): string {\n\treturn join(getAgentDir(), \"auth.json\");\n}\n\n/** Get path to settings.json */\nexport function getSettingsPath(): string {\n\treturn join(getAgentDir(), \"settings.json\");\n}\n\n/** Get path to tools directory */\nexport function getToolsDir(): string {\n\treturn join(getAgentDir(), \"tools\");\n}\n\n/** Get path to managed binaries directory (fd, rg) */\nexport function getBinDir(): string {\n\treturn join(getAgentDir(), \"bin\");\n}\n\n/** Get path to prompt templates directory */\nexport function getPromptsDir(): string {\n\treturn join(getAgentDir(), \"prompts\");\n}\n\n/** Get path to sessions directory */\nexport function getSessionsDir(): string {\n\treturn join(getAgentDir(), \"sessions\");\n}\n\n/** Get path to debug log file */\nexport function getDebugLogPath(): string {\n\treturn join(getAgentDir(), `${APP_NAME}-debug.log`);\n}\n"]}
@@ -32,6 +32,11 @@ export interface AgentDiscoveryResult {
32
32
  projectAgentsDir: string | null;
33
33
  diagnostics: ResourceDiagnostic[];
34
34
  }
35
+ /**
36
+ * Absolute directory of trusted packaged agents, set by a parent process that ships personas (Flow). Loaded at
37
+ * user trust: below the user agents dir, above project agents, which can never shadow a name defined here.
38
+ */
39
+ export declare const TRUSTED_AGENTS_DIR_ENV = "HUMAIN_TERMINAL_TRUSTED_AGENTS_DIR";
35
40
  export declare function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult;
36
41
  export interface SubagentUsageStats {
37
42
  input: number;
@@ -62,6 +67,8 @@ export interface SubagentSingleResult {
62
67
  /** True when at least one child stdout line exceeded the line bound and was dropped. */
63
68
  stdoutTruncated?: boolean;
64
69
  usage: SubagentUsageStats;
70
+ /** At least one received request had missing or invalid token counters. */
71
+ usageIncomplete?: boolean;
65
72
  model?: string;
66
73
  stopReason?: string;
67
74
  errorMessage?: string;
@@ -139,6 +146,7 @@ export interface SubagentProgressResult {
139
146
  attempt?: number;
140
147
  exitCode: number;
141
148
  usage: SubagentUsageStats;
149
+ usageIncomplete?: boolean;
142
150
  model?: string;
143
151
  stopReason?: string;
144
152
  errorMessage?: string;
@@ -157,6 +165,18 @@ export interface SubagentProgressDetails {
157
165
  /** Convert full child results into bounded update payloads without their message histories. */
158
166
  export declare function toProgressDetails(results: SubagentSingleResult[]): SubagentProgressResult[];
159
167
  export declare function renderTaskWithContext(task: string, context?: TaskContext): string;
168
+ /** Env var Flow sets to the verified approved-inputs file; inherited by every nested child. */
169
+ export declare const FLOW_APPROVED_INPUTS_ENV = "HUMAIN_FLOW_APPROVED_INPUTS_FILE";
170
+ /** Mirrors MAX_APPROVED_INPUT_BYTES in packages/flow/src/run-admission.ts; coding-agent must not import @humain/flow. */
171
+ export declare const MAX_FLOW_APPROVED_INPUT_BYTES: number;
172
+ /** Mirrors APPROVED_INPUTS_HEADER in packages/flow/src/run-admission.ts (first line of approvedInputsBlock). */
173
+ export declare const FLOW_APPROVED_INPUTS_HEADER = "## Approved inputs (mandatory)";
174
+ /**
175
+ * Snapshot the Flow approved-inputs file named by the env var. Unset -> undefined. Set but anything fails
176
+ * (absolute path, basename, no symlink, regular file, owner, mode 0600, size, header) -> throws, so a child
177
+ * never launches without its mandatory inputs. Bytes are read once from the opened fd.
178
+ */
179
+ export declare function readFlowApprovedInputs(env: NodeJS.ProcessEnv): string | undefined;
160
180
  /** Bounded context handed to a child. Strings are rendered verbatim into the child's task text; callers must not pass untrusted multi-line content. */
161
181
  export interface TaskContext {
162
182
  files?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../../src/core/tools/subagent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../../src/core/tools/subagent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAO,OAAO,EAAgB,MAAM,uBAAuB,CAAC;AAQxE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAM/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA2B7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAGN,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAEzB,MAAM,wBAAwB,CAAC;AAShC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAiGD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,uCAAuC,CAAC;AAc3E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,oBAAoB,CA8BnF;AAyGD,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wFAAwF;IACxF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,2EAA2E;IAC3E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,iBAAiB,CAAC;IAC7B,uBAAuB,CAAC,EAAE,gBAAgB,CAAC;IAC3C,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,iBAAiB,GAC1B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAClH;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC7E;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACV,GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAED,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,iBAAiB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,6FAA6F;AAC7F,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAgBD,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,sBAAsB,EAAE,CAoB3F;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAOjF;AAuED,+FAA+F;AAC/F,eAAO,MAAM,wBAAwB,qCAAqC,CAAC;AAE3E,yHAAyH;AACzH,eAAO,MAAM,6BAA6B,QAAa,CAAC;AACxD,gHAAgH;AAChH,eAAO,MAAM,2BAA2B,mCAAmC,CAAC;AAE5E;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAgCjF;AAohBD,uJAAuJ;AACvJ,MAAM,WAAW,WAAW;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAkFD,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsBlB,CAAC;AAwRH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC,OAAO,cAAc,EAAE,eAAe,CAAC,CAy1BhH;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,2EAE7C"}
@@ -122,20 +122,44 @@ function findNearestProjectAgentsDir(cwd) {
122
122
  currentDir = parentDir;
123
123
  }
124
124
  }
125
+ /**
126
+ * Absolute directory of trusted packaged agents, set by a parent process that ships personas (Flow). Loaded at
127
+ * user trust: below the user agents dir, above project agents, which can never shadow a name defined here.
128
+ */
129
+ export const TRUSTED_AGENTS_DIR_ENV = "HUMAIN_TERMINAL_TRUSTED_AGENTS_DIR";
130
+ function loadTrustedAgents() {
131
+ const dir = process.env[TRUSTED_AGENTS_DIR_ENV];
132
+ if (!dir)
133
+ return { agents: [], diagnostics: [] };
134
+ if (!path.isAbsolute(dir)) {
135
+ return {
136
+ agents: [],
137
+ diagnostics: [{ type: "warning", message: `${TRUSTED_AGENTS_DIR_ENV} must be an absolute path`, path: dir }],
138
+ };
139
+ }
140
+ return loadAgentsFromDir(dir, "user");
141
+ }
125
142
  export function discoverAgents(cwd, scope) {
126
143
  const userDir = path.join(getAgentDir(), "agents");
127
144
  const projectAgentsDir = findNearestProjectAgentsDir(cwd);
128
145
  const emptyResult = { agents: [], diagnostics: [] };
146
+ const trustedResult = scope === "project" ? emptyResult : loadTrustedAgents();
129
147
  const userResult = scope === "project" ? emptyResult : loadAgentsFromDir(userDir, "user");
130
148
  const projectResult = scope === "user" || !projectAgentsDir ? emptyResult : loadAgentsFromDir(projectAgentsDir, "project");
131
149
  const agentMap = new Map();
132
150
  if (scope === "both") {
133
- for (const agent of userResult.agents)
151
+ for (const agent of trustedResult.agents)
134
152
  agentMap.set(agent.name, agent);
135
- for (const agent of projectResult.agents)
153
+ for (const agent of userResult.agents)
136
154
  agentMap.set(agent.name, agent);
155
+ for (const agent of projectResult.agents) {
156
+ if (!trustedResult.agents.some((trusted) => trusted.name === agent.name))
157
+ agentMap.set(agent.name, agent);
158
+ }
137
159
  }
138
160
  else if (scope === "user") {
161
+ for (const agent of trustedResult.agents)
162
+ agentMap.set(agent.name, agent);
139
163
  for (const agent of userResult.agents)
140
164
  agentMap.set(agent.name, agent);
141
165
  }
@@ -146,7 +170,7 @@ export function discoverAgents(cwd, scope) {
146
170
  return {
147
171
  agents: Array.from(agentMap.values()),
148
172
  projectAgentsDir,
149
- diagnostics: [...userResult.diagnostics, ...projectResult.diagnostics],
173
+ diagnostics: [...trustedResult.diagnostics, ...userResult.diagnostics, ...projectResult.diagnostics],
150
174
  };
151
175
  }
152
176
  // --- Formatting helpers ---
@@ -266,6 +290,7 @@ export function toProgressDetails(results) {
266
290
  attempt: result.attempt,
267
291
  exitCode: result.exitCode,
268
292
  usage: result.usage,
293
+ ...(result.usageIncomplete ? { usageIncomplete: true } : {}),
269
294
  model: result.model,
270
295
  stopReason: result.stopReason,
271
296
  errorMessage: result.errorMessage,
@@ -343,6 +368,59 @@ function getResultDisplayItems(result) {
343
368
  function getResultFinalOutput(result) {
344
369
  return isProgressResult(result) ? result.latestText : getFinalOutput(result.messages);
345
370
  }
371
+ /** Env var Flow sets to the verified approved-inputs file; inherited by every nested child. */
372
+ export const FLOW_APPROVED_INPUTS_ENV = "HUMAIN_FLOW_APPROVED_INPUTS_FILE";
373
+ /** Mirrors MAX_APPROVED_INPUT_BYTES in packages/flow/src/run-admission.ts; coding-agent must not import @humain/flow. */
374
+ export const MAX_FLOW_APPROVED_INPUT_BYTES = 256 * 1024;
375
+ /** Mirrors APPROVED_INPUTS_HEADER in packages/flow/src/run-admission.ts (first line of approvedInputsBlock). */
376
+ export const FLOW_APPROVED_INPUTS_HEADER = "## Approved inputs (mandatory)";
377
+ /**
378
+ * Snapshot the Flow approved-inputs file named by the env var. Unset -> undefined. Set but anything fails
379
+ * (absolute path, basename, no symlink, regular file, owner, mode 0600, size, header) -> throws, so a child
380
+ * never launches without its mandatory inputs. Bytes are read once from the opened fd.
381
+ */
382
+ export function readFlowApprovedInputs(env) {
383
+ const file = env[FLOW_APPROVED_INPUTS_ENV];
384
+ if (file === undefined)
385
+ return undefined;
386
+ const refuse = (why) => {
387
+ throw new Error(`Refusing to launch subagent: Flow approved inputs (${FLOW_APPROVED_INPUTS_ENV}) ${why}.`);
388
+ };
389
+ if (!path.isAbsolute(file) || path.basename(file) !== "approved-inputs.md")
390
+ return refuse("must be an absolute path to approved-inputs.md");
391
+ let fd;
392
+ try {
393
+ fd = fs.openSync(file, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW | fs.constants.O_NONBLOCK);
394
+ const stat = fs.fstatSync(fd);
395
+ if (!stat.isFile())
396
+ return refuse("is not a regular file");
397
+ if (process.getuid && (stat.uid !== process.getuid() || (stat.mode & 0o777) !== 0o600))
398
+ return refuse("must be owned by the current user with mode 0600");
399
+ if (stat.size > MAX_FLOW_APPROVED_INPUT_BYTES)
400
+ return refuse("is too large");
401
+ const buffer = Buffer.alloc(MAX_FLOW_APPROVED_INPUT_BYTES + 1);
402
+ let size = 0;
403
+ while (size <= MAX_FLOW_APPROVED_INPUT_BYTES) {
404
+ const n = fs.readSync(fd, buffer, size, MAX_FLOW_APPROVED_INPUT_BYTES + 1 - size, null);
405
+ if (n === 0)
406
+ break;
407
+ size += n;
408
+ }
409
+ if (size > MAX_FLOW_APPROVED_INPUT_BYTES)
410
+ return refuse("is too large");
411
+ const text = buffer.subarray(0, size).toString("utf-8");
412
+ return text.startsWith(FLOW_APPROVED_INPUTS_HEADER) ? text : refuse("lacks the approved-inputs header");
413
+ }
414
+ catch (error) {
415
+ if (error instanceof Error && error.message.startsWith("Refusing to launch subagent"))
416
+ throw error;
417
+ return refuse(`cannot be read (${error.code ?? "error"})`);
418
+ }
419
+ finally {
420
+ if (fd !== undefined)
421
+ fs.closeSync(fd);
422
+ }
423
+ }
346
424
  async function writePromptToTempFile(agentName, prompt) {
347
425
  const tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), "humain-subagent-"));
348
426
  const safeName = agentName.replace(/[^\w.-]+/g, "_");
@@ -437,6 +515,8 @@ async function runSingleAgent(defaultCwd, agents, agentDiagnostics, agentName, t
437
515
  args.push("--thinking", options.thinking);
438
516
  let tmpPromptDir = null;
439
517
  let tmpPromptPath = null;
518
+ let tmpInputsDir = null;
519
+ let tmpInputsPath = null;
440
520
  const currentResult = {
441
521
  agent: agentName,
442
522
  agentSource: agent.source,
@@ -481,6 +561,14 @@ async function runSingleAgent(defaultCwd, agents, agentDiagnostics, agentName, t
481
561
  currentResult.isolationDegradedReason = isolationDegradedReason;
482
562
  if (signal?.aborted)
483
563
  throw new Error("Subagent was aborted");
564
+ // Snapshot into a subagent-owned temp file; the env path itself is never passed on the command line.
565
+ const approvedInputs = readFlowApprovedInputs(process.env);
566
+ if (approvedInputs !== undefined) {
567
+ const tmp = await writePromptToTempFile("flow-approved-inputs", approvedInputs);
568
+ tmpInputsDir = tmp.dir;
569
+ tmpInputsPath = tmp.filePath;
570
+ args.push("--append-system-prompt", tmpInputsPath);
571
+ }
484
572
  if (agent.systemPrompt.trim()) {
485
573
  const tmp = await writePromptToTempFile(agent.name, agent.systemPrompt);
486
574
  tmpPromptDir = tmp.dir;
@@ -548,6 +636,16 @@ async function runSingleAgent(defaultCwd, agents, agentDiagnostics, agentName, t
548
636
  /* observation never affects execution */
549
637
  }
550
638
  };
639
+ const addUsage = (usage) => {
640
+ for (const key of ["input", "output", "cacheRead", "cacheWrite"]) {
641
+ const count = usage?.[key];
642
+ if (typeof count === "number" && Number.isSafeInteger(count) && count >= 0)
643
+ currentResult.usage[key] += count;
644
+ else
645
+ currentResult.usageIncomplete = true;
646
+ }
647
+ currentResult.usage.cost += usage?.cost?.total || 0;
648
+ };
551
649
  const processLine = (line) => {
552
650
  if (!line.trim())
553
651
  return;
@@ -558,20 +656,20 @@ async function runSingleAgent(defaultCwd, agents, agentDiagnostics, agentName, t
558
656
  catch {
559
657
  return;
560
658
  }
659
+ if (!event || typeof event !== "object")
660
+ return;
661
+ if (event.type === "compaction_end" && event.result?.usage) {
662
+ addUsage(event.result.usage);
663
+ emitUpdate();
664
+ }
561
665
  if (event.type === "message_end" && event.message) {
562
666
  const msg = event.message;
563
667
  currentResult.messages.push(msg);
564
668
  if (msg.role === "assistant") {
565
669
  currentResult.usage.turns++;
566
- const usage = msg.usage;
567
- if (usage) {
568
- currentResult.usage.input += usage.input || 0;
569
- currentResult.usage.output += usage.output || 0;
570
- currentResult.usage.cacheRead += usage.cacheRead || 0;
571
- currentResult.usage.cacheWrite += usage.cacheWrite || 0;
572
- currentResult.usage.cost += usage.cost?.total || 0;
573
- currentResult.usage.contextTokens = usage.totalTokens || 0;
574
- }
670
+ addUsage(msg.usage);
671
+ if (msg.usage)
672
+ currentResult.usage.contextTokens = msg.usage.totalTokens || 0;
575
673
  if (msg.model)
576
674
  currentResult.model = msg.responseModel ?? msg.model;
577
675
  if (msg.stopReason)
@@ -785,6 +883,20 @@ async function runSingleAgent(defaultCwd, agents, agentDiagnostics, agentName, t
785
883
  catch {
786
884
  /* ignore */
787
885
  }
886
+ if (tmpInputsPath)
887
+ try {
888
+ fs.unlinkSync(tmpInputsPath);
889
+ }
890
+ catch {
891
+ /* ignore */
892
+ }
893
+ if (tmpInputsDir)
894
+ try {
895
+ fs.rmdirSync(tmpInputsDir);
896
+ }
897
+ catch {
898
+ /* ignore */
899
+ }
788
900
  }
789
901
  options.traceChild?.finishAttempt(currentResult, isFailedResult(currentResult));
790
902
  return currentResult;