@code-yeongyu/senpi 2026.11.15-2 → 2026.11.15-3

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 (132) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/bundle/chunks/{chunk-Q4RJ4WLE.js → chunk-225TDKTA.js} +4 -4
  3. package/dist/bundle/chunks/{chunk-QSU2456D.js → chunk-3KR3CDGM.js} +1 -1
  4. package/dist/bundle/chunks/{chunk-AOTHPTMU.js → chunk-5GCZFK4X.js} +2 -2
  5. package/dist/bundle/chunks/{chunk-BMADOJHZ.js → chunk-5QIFH624.js} +1 -1
  6. package/dist/bundle/chunks/{chunk-THYIV26N.js → chunk-GQEXLLWJ.js} +1 -1
  7. package/dist/bundle/chunks/{chunk-3RILB2OD.js → chunk-OJOPOUAY.js} +9 -9
  8. package/dist/bundle/chunks/{chunk-64FJ4QQJ.js → chunk-PPCAJQDJ.js} +1 -1
  9. package/dist/bundle/chunks/{chunk-74HCKLRH.js → chunk-TEXE4HT6.js} +1 -1
  10. package/dist/bundle/chunks/{chunk-RRFDLGX6.js → chunk-TNYFCGI7.js} +156 -156
  11. package/dist/bundle/chunks/{cli-main-GNQY2LTU.js → cli-main-CV3ODX4A.js} +1 -1
  12. package/dist/bundle/chunks/{hand-entry-D3DNH6XL.js → hand-entry-2NN7ZTY6.js} +1 -1
  13. package/dist/bundle/chunks/{interactive-mode-ATBPY4M5.js → interactive-mode-TGHZWM2T.js} +1 -1
  14. package/dist/bundle/chunks/{main-OMFVSMUR.js → main-B7WEY4JW.js} +1 -1
  15. package/dist/bundle/chunks/{multi-session-host-ACQ5N4UB.js → multi-session-host-53YLL2OD.js} +1 -1
  16. package/dist/bundle/chunks/{package-manager-cli-2VMRV4HL.js → package-manager-cli-2U54AVKW.js} +1 -1
  17. package/dist/bundle/chunks/{role-BTH5PVME.js → role-4IXZZAL4.js} +1 -1
  18. package/dist/bundle/chunks/{rpc-mode-XUK5SYKH.js → rpc-mode-RRYXENML.js} +1 -1
  19. package/dist/bundle/chunks/{runtime-session-VO3X4OE3.js → runtime-session-KKHEYZOH.js} +1 -1
  20. package/dist/bundle/chunks/{session-control-endpoint-Y5EIFFPY.js → session-control-endpoint-HVULSIUR.js} +1 -1
  21. package/dist/bundle/chunks/session-worker.js +331 -331
  22. package/dist/bundle/cli.js +2 -2
  23. package/dist/bundle/index.js +1 -1
  24. package/dist/bundle/rpc-entry.js +1 -1
  25. package/dist/bundle/runtime-manifest.json +1 -1
  26. package/dist/core/agent-session.d.ts +6 -0
  27. package/dist/core/agent-session.js +34 -3
  28. package/dist/core/extensions/builtin/anthropic-subscription/auth-lane.d.ts +2 -0
  29. package/dist/core/extensions/builtin/anthropic-subscription/auth-lane.js +1 -0
  30. package/dist/core/extensions/builtin/anthropic-subscription/failover.d.ts +2 -0
  31. package/dist/core/extensions/builtin/anthropic-subscription/failover.js +22 -4
  32. package/dist/core/extensions/builtin/anthropic-subscription/index.js +7 -2
  33. package/dist/core/extensions/builtin/anthropic-subscription/limit-recheck.d.ts +15 -0
  34. package/dist/core/extensions/builtin/anthropic-subscription/limit-recheck.js +55 -0
  35. package/dist/core/extensions/builtin/anthropic-subscription/session-stream.d.ts +1 -0
  36. package/dist/core/extensions/builtin/anthropic-subscription/session-stream.js +1 -0
  37. package/dist/core/extensions/builtin/anthropic-subscription/stream-guidance.js +8 -5
  38. package/dist/core/extensions/builtin/anthropic-subscription/stream.d.ts +1 -1
  39. package/dist/core/extensions/builtin/anthropic-subscription/stream.js +3 -1
  40. package/dist/core/extensions/builtin/terminal/extension-state.js +15 -0
  41. package/dist/core/extensions/builtin/terminal/notify.d.ts +2 -1
  42. package/dist/core/extensions/builtin/terminal/notify.js +15 -6
  43. package/dist/core/extensions/builtin/terminal/session-bundle.d.ts +5 -1
  44. package/dist/core/extensions/builtin/terminal/session-bundle.js +41 -1
  45. package/dist/core/extensions/builtin/terminal/tools/context.d.ts +4 -0
  46. package/dist/core/extensions/loader.js +5 -0
  47. package/dist/core/extensions/runner.d.ts +1 -0
  48. package/dist/core/extensions/runner.js +5 -0
  49. package/dist/core/extensions/types.d.ts +7 -0
  50. package/dist/core/run-background-jobs.d.ts +33 -0
  51. package/dist/core/run-background-jobs.js +47 -0
  52. package/dist/core/tools/bash-core.d.ts +50 -0
  53. package/dist/core/tools/bash-core.js +169 -0
  54. package/dist/core/tools/bash-schema.d.ts +48 -0
  55. package/dist/core/tools/bash-schema.js +34 -0
  56. package/dist/core/tools/bash.d.ts +4 -70
  57. package/dist/core/tools/bash.js +32 -409
  58. package/dist/core/tools/coding-tools-core.d.ts +24 -0
  59. package/dist/core/tools/coding-tools-core.js +14 -0
  60. package/dist/core/tools/edit-core.d.ts +56 -0
  61. package/dist/core/tools/edit-core.js +175 -0
  62. package/dist/core/tools/edit-diff.d.ts +0 -5
  63. package/dist/core/tools/edit-diff.js +0 -32
  64. package/dist/core/tools/edit-preview.d.ts +7 -0
  65. package/dist/core/tools/edit-preview.js +34 -0
  66. package/dist/core/tools/edit.d.ts +5 -43
  67. package/dist/core/tools/edit.js +10 -158
  68. package/dist/core/tools/encoding.d.ts +10 -0
  69. package/dist/core/tools/encoding.js +58 -0
  70. package/dist/core/tools/file-tool-host.d.ts +25 -0
  71. package/dist/core/tools/file-tool-host.js +109 -0
  72. package/dist/core/tools/fs-error-code.d.ts +2 -0
  73. package/dist/core/tools/fs-error-code.js +15 -0
  74. package/dist/core/tools/machine-output-spill.d.ts +11 -0
  75. package/dist/core/tools/machine-output-spill.js +65 -0
  76. package/dist/core/tools/machine.d.ts +4 -24
  77. package/dist/core/tools/machine.js +4 -44
  78. package/dist/core/tools/output-accumulator-core.d.ts +84 -0
  79. package/dist/core/tools/output-accumulator-core.js +200 -0
  80. package/dist/core/tools/output-accumulator.d.ts +9 -61
  81. package/dist/core/tools/output-accumulator.js +90 -265
  82. package/dist/core/tools/path-utils.js +3 -48
  83. package/dist/core/tools/posix-signals.d.ts +3 -0
  84. package/dist/core/tools/posix-signals.js +113 -0
  85. package/dist/core/tools/read-core.d.ts +64 -0
  86. package/dist/core/tools/read-core.js +180 -0
  87. package/dist/core/tools/read-text.d.ts +23 -0
  88. package/dist/core/tools/read-text.js +90 -0
  89. package/dist/core/tools/read.d.ts +6 -47
  90. package/dist/core/tools/read.js +13 -218
  91. package/dist/core/tools/renderers/bash.d.ts +0 -1
  92. package/dist/core/tools/renderers/bash.js +0 -1
  93. package/dist/core/tools/renderers/edit.d.ts +1 -1
  94. package/dist/core/tools/renderers/edit.js +1 -1
  95. package/dist/core/tools/secret-output-redactor.js +2 -1
  96. package/dist/core/tools/shell-operations.d.ts +53 -0
  97. package/dist/core/tools/shell-operations.js +115 -0
  98. package/dist/core/tools/shell-output.d.ts +20 -0
  99. package/dist/core/tools/shell-output.js +152 -0
  100. package/dist/core/tools/tail-window.js +5 -7
  101. package/dist/core/tools/tool-machine.d.ts +30 -0
  102. package/dist/core/tools/tool-machine.js +47 -0
  103. package/dist/core/tools/truncate.js +15 -14
  104. package/dist/core/tools/write-core.d.ts +47 -0
  105. package/dist/core/tools/write-core.js +108 -0
  106. package/dist/core/tools/write-result.d.ts +0 -1
  107. package/dist/core/tools/write-result.js +0 -13
  108. package/dist/core/tools/write.d.ts +6 -31
  109. package/dist/core/tools/write.js +25 -77
  110. package/dist/core/turn-origin.d.ts +4 -2
  111. package/dist/core/turn-origin.js +15 -8
  112. package/dist/modes/interactive/session-control-session-commands.js +1 -1
  113. package/dist/modes/rpc/connection-handler.js +2 -2
  114. package/dist/modes/rpc/effect-commands.d.ts +1 -4
  115. package/dist/modes/rpc/method-classes-schema-session.d.ts +1 -0
  116. package/dist/modes/rpc/method-classes-schema-session.js +5 -1
  117. package/dist/modes/rpc/method-classes-schema.d.ts +1 -0
  118. package/dist/modes/rpc/pause-command-validation.js +2 -0
  119. package/dist/modes/rpc/rpc-mutation-response-types.d.ts +2 -4
  120. package/dist/modes/rpc/rpc-session-command-types.d.ts +1 -0
  121. package/dist/modes/rpc/session-control-actions-data.d.ts +7 -3
  122. package/dist/modes/rpc/session-control-actions-data.js +12 -6
  123. package/dist/tools-core.d.ts +14 -0
  124. package/dist/tools-core.js +9 -0
  125. package/dist/utils/image-mime.d.ts +4 -0
  126. package/dist/utils/image-mime.js +99 -0
  127. package/dist/utils/mime.d.ts +1 -1
  128. package/dist/utils/mime.js +2 -97
  129. package/docs/extensions.md +7 -1
  130. package/docs/rpc.md +14 -0
  131. package/package.json +11 -7
  132. package/vendor/senpi-machine-ops/files/local-files.js +34 -5
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
3
- import"./chunk-POTKWOUB.js";import{dispatchAgentDirectoryCommand,enableStartupCompileCache}from"./chunk-QSU2456D.js";import"./chunk-THYIV26N.js";import{installStaleExtensionContainment}from"./chunk-64FJ4QQJ.js";import{configureHttpDispatcher}from"./chunk-DEUEMEV3.js";import"./chunk-OSNR3IRD.js";import"./chunk-EUCZC2RF.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import{installEarlyInspectorVmImportRecovery}from"./chunk-74HCKLRH.js";import"./chunk-ZFIC2DZV.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import{APP_NAME,scrubBrandFromEnvironment}from"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-MIENF2YK.js";import"./chunk-FQXWKEVK.js";import"./chunk-IKOFCODM.js";await dispatchAgentDirectoryCommand(process.argv.slice(2));await enableStartupCompileCache();installEarlyInspectorVmImportRecovery();installStaleExtensionContainment();process.title=APP_NAME;scrubBrandFromEnvironment();process.env.PI_CODING_AGENT="true";process.emitWarning=(()=>{});configureHttpDispatcher();var{main}=await import("./main-OMFVSMUR.js");await main(process.argv.slice(2));
3
+ import"./chunk-POTKWOUB.js";import{dispatchAgentDirectoryCommand,enableStartupCompileCache}from"./chunk-3KR3CDGM.js";import"./chunk-GQEXLLWJ.js";import{installStaleExtensionContainment}from"./chunk-PPCAJQDJ.js";import{configureHttpDispatcher}from"./chunk-DEUEMEV3.js";import"./chunk-OSNR3IRD.js";import"./chunk-EUCZC2RF.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import{installEarlyInspectorVmImportRecovery}from"./chunk-TEXE4HT6.js";import"./chunk-ZFIC2DZV.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import{APP_NAME,scrubBrandFromEnvironment}from"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-MIENF2YK.js";import"./chunk-FQXWKEVK.js";import"./chunk-IKOFCODM.js";await dispatchAgentDirectoryCommand(process.argv.slice(2));await enableStartupCompileCache();installEarlyInspectorVmImportRecovery();installStaleExtensionContainment();process.title=APP_NAME;scrubBrandFromEnvironment();process.env.PI_CODING_AGENT="true";process.emitWarning=(()=>{});configureHttpDispatcher();var{main}=await import("./main-B7WEY4JW.js");await main(process.argv.slice(2));
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{PresentationBroker,bootstrapRuntime,buildToolRegistry,builtInExtensions,canonicalizeFilesystemPath,childModuleRoots,createAgentSessionServices,createProjectTrustContext,createToolChildRuntime,forwardToolEvents,presetTrustsProject,resolveProjectTrusted,sessionExtensionFlagValues,toolChildModuleRoots,toolInfoOf,withFileMutationQueue,withFileMutationQueues}from"./chunk-RRFDLGX6.js";import"./chunk-64FJ4QQJ.js";import"./chunk-Q4RJ4WLE.js";import"./chunk-TPLEPLEB.js";import"./chunk-75O3CWR5.js";import"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import{SettingsManager}from"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import"./chunk-FYVQEZYN.js";import"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import{ProjectTrustStore,getSavedProjectTrust,hasTrustRequiringProjectResources}from"./chunk-VD7AKTGP.js";import"./chunk-PWA75RQU.js";import"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import"./chunk-MTQQ2VQH.js";import"./chunk-WMHESZCU.js";import"./chunk-IJXKHJYR.js";import"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import"./chunk-IEY2SL46.js";import"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import"./chunk-7WYJAYHH.js";import{closeServer,listen,prepareSocketPath}from"./chunk-5HMYIYQB.js";import"./chunk-OSNR3IRD.js";import"./chunk-UCXBDE6R.js";import"./chunk-YI6KRJDC.js";import"./chunk-VUY4BZDI.js";import{MAX_RPC_LINE_CHARACTERS,attachJsonlLineReader}from"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import"./chunk-HGCQAMC6.js";import"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import"./chunk-7X72IACK.js";import"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-3RILB2OD.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import{localDeviceFiles}from"./chunk-ZJUL5ODW.js";import{DeviceFileError,FILE_CHANNEL_MAX_BYTES,base64Length,createReliableTransport,createRemoteExecutor,decodeBase64,decodeDeviceFileArgs,encodeBase64,fileRefusal,fileResult,serveLoopHooks}from"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import{validateToolArguments}from"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-QVG5SUSV.js";import"./chunk-74HCKLRH.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import"./chunk-LJFQYCFH.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import{shieldSocketDuringClose,unlinkOwnedSocket}from"./chunk-5XHOHZIR.js";import{authenticateSocket,ensureSocketSecret,resolveSocketTransportAddress,socketSecretPath}from"./chunk-HW6AAS3R.js";import{isLocalPath,resolvePath}from"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import"./chunk-44BJPS5I.js";import"./chunk-AOTHPTMU.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";import{createServer}from"node:net";import{posix as posix2,win32}from"node:path";import{isAbsolute as isAbsolute2}from"node:path";import{randomUUID as randomUUID2}from"node:crypto";import{basename as basename4,dirname as dirname4,join as join4,resolve as resolve3}from"node:path";import{spawn}from"node:child_process";import{randomUUID}from"node:crypto";import{existsSync}from"node:fs";import{constants as fsConstants}from"node:fs";import{open}from"node:fs/promises";import{constants as osConstants}from"node:os";import{basename,dirname,join,resolve}from"node:path";var GIT_ACTIVITY_LOCK_NAME="git-activity.flock",GIT_ACTIVITY_SHARED_WAIT_MS=1e4,RETRY_MS=5,LOCK_SH=1,LOCK_NB=4;function classifyFlockErrno(errno){let{EAGAIN,EWOULDBLOCK,ENOLCK,EOPNOTSUPP,ENOSYS}=osConstants.errno;return errno===EAGAIN||errno===EWOULDBLOCK?"busy":errno===ENOLCK||errno===EOPNOTSUPP||errno===ENOSYS?"no-lock":"failed"}function identityLocksDir(repoDir){let repo=resolve(repoDir);if(!(basename(repo)!=="repo"||basename(dirname(dirname(repo)))!=="agents"))return join(dirname(repo),"runtime","locks")}var NO_HOLD={fd:void 0,release:async()=>{}},delay=ms=>new Promise(done=>setTimeout(done,ms));async function holdActivityLock(cwd,flock,waitMs=GIT_ACTIVITY_SHARED_WAIT_MS){let locksDir=identityLocksDir(cwd);if(locksDir===void 0||flock===void 0)return NO_HOLD;if(!existsSync(locksDir))throw new DeviceFileError("not_found","the identity's locks directory does not exist");let handle=await open(join(locksDir,GIT_ACTIVITY_LOCK_NAME),fsConstants.O_RDWR|fsConstants.O_CREAT,384),deadline=Date.now()+waitMs;try{for(;;){let{rc,errno}=flock(handle.fd,LOCK_SH|LOCK_NB);if(rc===0)return{fd:handle.fd,release:()=>handle.close()};let kind=classifyFlockErrno(errno);if(kind==="no-lock")return await handle.close(),NO_HOLD;if(kind==="failed")throw new DeviceFileError("io",`flock on the git-activity lock failed (errno ${errno})`);if(Date.now()>=deadline)throw new DeviceFileError("io",`the git-activity lock stayed exclusively held for ${waitMs} ms`);await delay(RETRY_MS)}}catch(error){throw await handle.close(),error}}import{posix}from"node:path";var k=kind=>({kind}),eq=(prefix,kind)=>({prefix,kind}),opt=(...optional)=>({optional}),rep=(min,...repeat)=>({repeat,min}),NUL=/\0/,REV=/^(?![-./~:])[A-Za-z0-9._/@{}^~+-]+$/,REL=/^(?![/-])(?!.*(?:^|\/)\.\.(?:\/|$))[^\0]+$/,rev=value=>REV.test(value)&&!value.includes("..")&&!value.includes("//"),range=value=>{let parts=value.split("..");return parts.length===2&&parts.every(rev)},blobref=value=>{let at=value.indexOf(":");return at>=0&&(at===0||rev(value.slice(0,at)))&&REL.test(value.slice(at+1))},filesystem=value=>value.length>0&&!NUL.test(value)&&!/^[-:]/.test(value);function scheme(value){return/^([A-Za-z][A-Za-z0-9+.-]*):\/\//.exec(value)?.[1]}function urlIsLocal(value){let colon=value.indexOf(":"),slash=value.indexOf("/");return colon<0||slash>=0&&slash<colon||process.platform==="win32"&&/^[A-Za-z]:[\\/]/.test(value)}var unsafeUrl=value=>value.length===0||NUL.test(value)||/\s/.test(value)||value.startsWith("-")||value.includes("::");function remote(value){if(unsafeUrl(value))return!1;let named=scheme(value);return named!==void 0?named==="https"||named==="ssh":!urlIsLocal(value)}function localUrlPath(value){if(unsafeUrl(value)||scheme(value)!=="file")return;let rest=value.slice(7);if(!rest.startsWith("/")||/[?#]/.test(rest))return;let path;try{path=decodeURIComponent(rest)}catch{return}return path.length>1&&!NUL.test(path)&&!path.endsWith("/")&&posix.normalize(path)===path&&path.split("/").slice(1).every(part=>part!==""&&part!=="."&&part!=="..")?path:void 0}var localCandidate=value=>!unsafeUrl(value)&&(scheme(value)==="file"||scheme(value)===void 0&&urlIsLocal(value)),KINDS={rev,range,revish:value=>rev(value)||range(value),object:value=>rev(value)||blobref(value),blobref,ref:value=>value==="HEAD"||/^refs\/[A-Za-z0-9._/-]+$/.test(value)&&!value.includes(".."),refpat:value=>/^refs\/[A-Za-z0-9._/-]+\*?$/.test(value)&&!value.includes(".."),branch:value=>/^(?![-./])[A-Za-z0-9._/-]+$/.test(value)&&!value.includes(".."),refspec:value=>/^[A-Za-z0-9._/]+(?:-[A-Za-z0-9._/]+)*:[A-Za-z0-9._/-]+$/.test(value)&&!value.includes(".."),msg:value=>!NUL.test(value),count:value=>/^\d{1,9}$/.test(value),mode:value=>/^(?:100644|100755|120000|160000)$/.test(value),oid:value=>/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/.test(value),filter:value=>/^[ACDMRTUXB]+$/i.test(value),fmt:value=>!NUL.test(value),iso:value=>/^\d{4}-\d\d-\d\dT[\d:.]+Z$/.test(value),relpath:value=>REL.test(value),gitpath:value=>value==="index"||value==="MERGE_HEAD",path:filesystem,worktree:filesystem,source:value=>remote(value)||localCandidate(value),target:value=>remote(value)||localCandidate(value)},FORMAT=eq("--format=","fmt"),LOG_RECORD="--format=%x1e%H%x1f%s%x1f%b%x1f%an%x1f%ae%x1f%cI",SHAPES={add:[["-A","--",rep(1,k("path"))]],branch:[["--show-current"],["-D",k("branch")]],"cat-file":[["blob",k("object")],["--batch"],["-e",k("blobref")]],checkout:[[k("rev"),"--",k("path")]],commit:[["-q","--no-verify","-m",k("msg")]],"commit-tree":[[k("rev"),opt("-p",k("rev")),"-F","-"]],"count-objects":[["-v"]],diff:[["--cached","-M","-C","-z","--raw","--no-abbrev"],["--name-only","-z",eq("--diff-filter=","filter"),k("rev"),k("rev"),"--"],["--name-status","-M","-z",k("range"),"--"],["--cached","--quiet",k("rev"),"--"],["--no-renames","--name-only","-z",k("range"),"--",k("path")],["--name-only","-z",k("range"),"--"],["--name-only",eq("--diff-filter=","filter")]],"diff-files":[["--name-only","-z"]],"diff-tree":[["-r","-m","--no-commit-id","--no-renames",eq("--diff-filter=","filter"),"--raw","-z",k("rev")]],"for-each-ref":[[FORMAT,rep(1,k("refpat"))]],"hash-object":[[opt("-w"),"--no-filters","--stdin"],[opt("-w"),eq("--path=","relpath"),"--stdin"]],init:[["--template="]],log:[["-1",FORMAT,k("rev")],[{prefix:"-",kind:"count"},FORMAT,k("rev")],[FORMAT,"--name-only","-z","--no-renames","--diff-merges=first-parent",eq("--diff-filter=","filter"),rep(0,k("revish")),"--"],[LOG_RECORD,opt("--name-only","-z","--no-renames","--full-diff"),opt("--fixed-strings","--all-match",rep(1,eq("--grep=","msg"))),opt("-n",k("count")),opt(eq("--since=","iso")),opt(k("revish")),opt("--",rep(1,k("path")))]],"ls-files":[["--stage","-z","--",k("path")],["--eol","-z"]],"ls-remote":[[k("source"),k("ref")]],"ls-tree":[["-r","--name-only","-z",k("rev"),opt("--",k("path"))],["-r","-l","-z",k("rev")],["-r","-z",k("rev")],["-z",k("rev"),"--",k("path")]],maintenance:[["run","--task=loose-objects","--quiet"]],merge:[[],["--abort"],[opt("--no-ff"),opt("-m",k("msg")),k("rev")],["--no-ff",k("rev"),rep(1,"-m",k("msg"))]],"merge-base":[["--is-ancestor",k("rev"),k("rev")]],"prune-packed":[["--quiet"]],push:[["--quiet",k("target"),k("refspec")]],"read-tree":[["--empty"],[k("rev")]],remote:[["-v"]],reset:[["--soft",k("rev")]],restore:[["--source=HEAD","--staged",opt("--worktree"),"--",rep(1,k("path"))]],"rev-list":[[opt("--count"),k("range")],["--reverse",k("range")]],"rev-parse":[["--verify",opt("--quiet"),k("rev")],["-q","--verify",k("rev")],["--git-path",k("gitpath")],["--git-common-dir"]],rm:[["-q","--cached",opt("-f"),"--ignore-unmatch","--",rep(1,k("path"))],["-rf","-q","--ignore-unmatch","--",k("path")]],show:[["-s",FORMAT,k("rev")],[k("blobref")]],"show-ref":[["--verify",k("ref")]],status:[["--porcelain",opt("--untracked-files=all",opt("--",rep(1,k("path"))))]],"symbolic-ref":[["HEAD",k("ref")]],"update-index":[["--force-remove","--",k("path")],["--add","--cacheinfo",k("mode"),k("oid"),k("path")],["-q","-z","--stdin"]],"update-ref":[["-m",k("msg"),"HEAD",k("rev"),k("rev")]],worktree:[["add","-b",k("branch"),k("worktree"),k("rev")],["remove",opt("--force"),k("worktree")],["list","--porcelain"],["prune"]],"write-tree":[[]]};function match(items,args,at,paths,then){let[item,...rest]=items;if(item===void 0)return then(at);let next=to=>match(rest,args,to,paths,then);if(typeof item=="string")return args[at]===item&&next(at+1);if("optional"in item)return match(item.optional,args,at,paths,next)||next(at);if("repeat"in item){let again=(count,from)=>count>=item.min&&next(from)||match(item.repeat,args,from,paths,to=>to>from&&again(count+1,to));return again(0,at)}let arg=args[at];if(arg===void 0)return!1;let value="prefix"in item?arg.startsWith(item.prefix)?arg.slice(item.prefix.length):void 0:arg;if(value===void 0||!KINDS[item.kind](value))return!1;let kind=item.kind,typed=kind==="path"||kind==="worktree"||(kind==="source"||kind==="target")&&localCandidate(value);return typed&&paths.push({kind,value}),next(at+1)?!0:(typed&&paths.pop(),!1)}function matchShape(sub,args){for(let shape of SHAPES[sub]??[]){let paths=[];if(match(shape,args,0,paths,at=>at===args.length))return paths}}var HAND_GIT_PREFIX=["-c","core.fsmonitor=false","-c","protocol.file.allow=always"],SUBCOMMANDS=new Set(["add","branch","cat-file","checkout","commit","commit-tree","config","count-objects","diff","diff-files","diff-tree","for-each-ref","hash-object","init","log","ls-files","ls-remote","ls-tree","maintenance","merge","merge-base","prune-packed","push","read-tree","remote","reset","restore","rev-list","rev-parse","rm","show","show-ref","status","symbolic-ref","update-index","update-ref","worktree","write-tree"]);function configKey(key){let parts=key.split(".");if(parts.length<2)return key;let section=parts[0]?.toLowerCase()??"",name=parts[parts.length-1]?.toLowerCase()??"";return[section,...parts.slice(1,-1),name].join(".")}var keySet=keys=>new Set(keys.map(configKey)),CALLER_C_KEYS=keySet(["maintenance.auto","gc.auto","user.name","user.email","core.autocrlf","log.showRoot","core.quotePath","log.showSignature","log.follow"]),CONFIG_KEYS=keySet(["omo.agentId","user.name","user.email","commit.gpgsign","gc.auto","core.autocrlf","omo.memoryRepository.url","omo.sync.binding","omo.sync.space"]);function subcommandArgs(sub,rest){if(sub==="config"){let[scope,first,second,extra]=rest;if(scope!=="--local"||first===void 0||extra!==void 0)return"config shape";let key=first==="--get"||first==="--unset-all"?second:first;return key===void 0||first!=="--get"&&first!=="--unset-all"&&(second??"-").startsWith("-")?"config shape":CONFIG_KEYS.has(configKey(key))?[]:`config key ${key}`}return matchShape(sub,rest)??`${sub} shape`}function planGit(argv){let index=0;for(;argv[index]?.startsWith("-");){let arg=argv[index]??"";if(arg==="--literal-pathspecs"){index++;continue}if(arg!=="-c")return arg;let setting=argv[index+1]??"",separator=setting.indexOf("=");if(separator<=0||!CALLER_C_KEYS.has(configKey(setting.slice(0,separator))))return`-c ${setting}`;index+=2}let sub=argv[index];if(sub===void 0||!SUBCOMMANDS.has(sub))return`subcommand ${sub??"(none)"}`;let paths=subcommandArgs(sub,argv.slice(index+1));return typeof paths=="string"?paths:{argv:[...HAND_GIT_PREFIX,...argv],paths}}var equal=(args,expected)=>args.length===expected.length&&args.every((arg,index)=>arg===expected[index]);function planLsof(argv,uid){let holders=argv.length===3&&argv[0]==="-t"&&argv[1]==="--"&&(argv[2]??"").length>0,inUse=equal(argv,["-w","-a","-d","cwd","-u",String(uid),"-Fpn"]);return holders||inUse?[...argv]:"lsof shape"}var CALLER_ENV={GIT_TERMINAL_PROMPT:value=>value==="0",GIT_INDEX_FILE:value=>value.length>0,GIT_GLOB_PATHSPECS:value=>value==="0"||value==="1",GIT_AUTHOR_NAME:()=>!0,GIT_AUTHOR_EMAIL:()=>!0,GIT_COMMITTER_NAME:()=>!0,GIT_COMMITTER_EMAIL:()=>!0},WIN32_BASELINE=["SYSTEMROOT","TEMP","TMP","USERPROFILE","HOMEDRIVE","HOMEPATH","PATHEXT"];function baseline(context){let env={},keep=key=>{let value=context.ownEnv[key];value!==void 0&&(env[key]=value)};for(let key of["PATH","HOME","SSH_AUTH_SOCK"])keep(key);if(context.platform==="win32")for(let key of WIN32_BASELINE)keep(key);else keep("TMPDIR"),env.LANG="C";return env.GIT_PROTOCOL_FROM_USER="0",env}function planRun(request,context){let env=baseline(context);for(let[key,value]of Object.entries(request.env)){let allowed2=Object.hasOwn(CALLER_ENV,key)?CALLER_ENV[key]:void 0;if(allowed2===void 0||!allowed2(value))return{ok:!1,reason:`not in the run allowlist: env ${key}`};env[key]=value}let planned=request.exe==="git"?planGit(request.argv):request.exe==="lsof"?planLsof(request.argv,context.uid):`executable ${request.exe}`;return typeof planned=="string"?{ok:!1,reason:`not in the run allowlist: ${planned}`}:Array.isArray(planned)?{ok:!0,exe:"lsof",argv:planned,env,paths:[]}:{ok:!0,exe:"git",argv:planned.argv,env,paths:planned.paths}}var SAFE=/^[A-Za-z0-9@%+=:,./_-]+$/;function renderCommand(exe,argv){return[exe,...argv].map(arg=>SAFE.test(arg)?arg:`'${arg.replaceAll("'","'\\''")}'`).join(" ")}import{execFile as execFile2}from"node:child_process";import{lstat as lstat2,stat}from"node:fs/promises";import{basename as basename3,dirname as dirname3,isAbsolute,join as join3,resolve as resolve2,sep}from"node:path";import{execFile}from"node:child_process";import{lstat,readdir,realpath}from"node:fs/promises";import{basename as basename2,dirname as dirname2,join as join2}from"node:path";var SHAPE="local_repo_shape_unsupported",WALK_BOUND=2e4,refuse=detail=>{throw new DeviceFileError("refused_by_policy",`${SHAPE}: ${detail}`)};async function kindOf(path){let entry=await lstat(path).catch(()=>{});if(entry!==void 0)return entry.isSymbolicLink()?"link":entry.isFile()?"file":entry.isDirectory()?"dir":"other"}async function noLinks(path,recursive,budget){let kind=await kindOf(path);if(kind!==void 0&&(kind==="link"&&refuse(`symlink at ${path}`),kind==="dir"))for(let name of await readdir(path)){budget.left-=1,budget.left<0&&refuse(`more than ${WALK_BOUND} entries under the repository`);let child=join2(path,name),childKind=await kindOf(child);childKind==="link"&&refuse(`symlink at ${child}`),recursive&&childKind==="dir"&&await noLinks(child,!0,budget)}}async function plainGitDir(dir){let[head,objects,refs,commondir,alternates]=await Promise.all(["HEAD","objects","refs","commondir","objects/info/alternates"].map(entry=>kindOf(join2(dir,entry))));(head!=="file"||objects!=="dir"||refs!=="dir")&&refuse(`${dir} is not a plain git directory`),(commondir!==void 0||alternates!==void 0)&&refuse(`${dir} redirects through commondir or alternates`);let budget={left:WALK_BOUND};for(let entry of["HEAD","config","packed-refs"])await noLinks(join2(dir,entry),!1,budget);await noLinks(join2(dir,"refs"),!0,budget),await noLinks(join2(dir,"hooks"),!0,budget),await noLinks(join2(dir,"logs"),!0,budget),await noLinks(join2(dir,"worktrees"),!1,budget),await noLinks(join2(dir,"objects"),!1,budget);for(let sub of["info","pack"])await noLinks(join2(dir,"objects",sub),!1,budget)}function gitConfig(file){let env={PATH:process.env.PATH??"/usr/bin:/bin",GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_GLOBAL:"/dev/null",LANG:"C"};return new Promise((done,fail)=>{execFile("git",["config","--file",file,"--no-includes","--list","-z"],{env,timeout:3e4,windowsHide:!0},(error,stdout)=>{if(error)return fail(error);let records=String(stdout).split("\0").filter(Boolean);done(records.map(record=>{let at=record.indexOf(`
2
+ import{PresentationBroker,bootstrapRuntime,buildToolRegistry,builtInExtensions,canonicalizeFilesystemPath,childModuleRoots,createAgentSessionServices,createProjectTrustContext,createToolChildRuntime,forwardToolEvents,presetTrustsProject,resolveProjectTrusted,sessionExtensionFlagValues,toolChildModuleRoots,toolInfoOf,withFileMutationQueue,withFileMutationQueues}from"./chunk-TNYFCGI7.js";import"./chunk-PPCAJQDJ.js";import"./chunk-225TDKTA.js";import"./chunk-TPLEPLEB.js";import"./chunk-75O3CWR5.js";import"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import{SettingsManager}from"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import"./chunk-FYVQEZYN.js";import"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import{ProjectTrustStore,getSavedProjectTrust,hasTrustRequiringProjectResources}from"./chunk-VD7AKTGP.js";import"./chunk-PWA75RQU.js";import"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import"./chunk-MTQQ2VQH.js";import"./chunk-WMHESZCU.js";import"./chunk-IJXKHJYR.js";import"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import"./chunk-IEY2SL46.js";import"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import"./chunk-7WYJAYHH.js";import{closeServer,listen,prepareSocketPath}from"./chunk-5HMYIYQB.js";import"./chunk-OSNR3IRD.js";import"./chunk-UCXBDE6R.js";import"./chunk-YI6KRJDC.js";import"./chunk-VUY4BZDI.js";import{MAX_RPC_LINE_CHARACTERS,attachJsonlLineReader}from"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import"./chunk-HGCQAMC6.js";import"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import"./chunk-7X72IACK.js";import"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-OJOPOUAY.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import{localDeviceFiles}from"./chunk-ZJUL5ODW.js";import{DeviceFileError,FILE_CHANNEL_MAX_BYTES,base64Length,createReliableTransport,createRemoteExecutor,decodeBase64,decodeDeviceFileArgs,encodeBase64,fileRefusal,fileResult,serveLoopHooks}from"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import{validateToolArguments}from"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-QVG5SUSV.js";import"./chunk-TEXE4HT6.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import"./chunk-LJFQYCFH.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import{shieldSocketDuringClose,unlinkOwnedSocket}from"./chunk-5XHOHZIR.js";import{authenticateSocket,ensureSocketSecret,resolveSocketTransportAddress,socketSecretPath}from"./chunk-HW6AAS3R.js";import{isLocalPath,resolvePath}from"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import"./chunk-44BJPS5I.js";import"./chunk-5GCZFK4X.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";import{createServer}from"node:net";import{posix as posix2,win32}from"node:path";import{isAbsolute as isAbsolute2}from"node:path";import{randomUUID as randomUUID2}from"node:crypto";import{basename as basename4,dirname as dirname4,join as join4,resolve as resolve3}from"node:path";import{spawn}from"node:child_process";import{randomUUID}from"node:crypto";import{existsSync}from"node:fs";import{constants as fsConstants}from"node:fs";import{open}from"node:fs/promises";import{constants as osConstants}from"node:os";import{basename,dirname,join,resolve}from"node:path";var GIT_ACTIVITY_LOCK_NAME="git-activity.flock",GIT_ACTIVITY_SHARED_WAIT_MS=1e4,RETRY_MS=5,LOCK_SH=1,LOCK_NB=4;function classifyFlockErrno(errno){let{EAGAIN,EWOULDBLOCK,ENOLCK,EOPNOTSUPP,ENOSYS}=osConstants.errno;return errno===EAGAIN||errno===EWOULDBLOCK?"busy":errno===ENOLCK||errno===EOPNOTSUPP||errno===ENOSYS?"no-lock":"failed"}function identityLocksDir(repoDir){let repo=resolve(repoDir);if(!(basename(repo)!=="repo"||basename(dirname(dirname(repo)))!=="agents"))return join(dirname(repo),"runtime","locks")}var NO_HOLD={fd:void 0,release:async()=>{}},delay=ms=>new Promise(done=>setTimeout(done,ms));async function holdActivityLock(cwd,flock,waitMs=GIT_ACTIVITY_SHARED_WAIT_MS){let locksDir=identityLocksDir(cwd);if(locksDir===void 0||flock===void 0)return NO_HOLD;if(!existsSync(locksDir))throw new DeviceFileError("not_found","the identity's locks directory does not exist");let handle=await open(join(locksDir,GIT_ACTIVITY_LOCK_NAME),fsConstants.O_RDWR|fsConstants.O_CREAT,384),deadline=Date.now()+waitMs;try{for(;;){let{rc,errno}=flock(handle.fd,LOCK_SH|LOCK_NB);if(rc===0)return{fd:handle.fd,release:()=>handle.close()};let kind=classifyFlockErrno(errno);if(kind==="no-lock")return await handle.close(),NO_HOLD;if(kind==="failed")throw new DeviceFileError("io",`flock on the git-activity lock failed (errno ${errno})`);if(Date.now()>=deadline)throw new DeviceFileError("io",`the git-activity lock stayed exclusively held for ${waitMs} ms`);await delay(RETRY_MS)}}catch(error){throw await handle.close(),error}}import{posix}from"node:path";var k=kind=>({kind}),eq=(prefix,kind)=>({prefix,kind}),opt=(...optional)=>({optional}),rep=(min,...repeat)=>({repeat,min}),NUL=/\0/,REV=/^(?![-./~:])[A-Za-z0-9._/@{}^~+-]+$/,REL=/^(?![/-])(?!.*(?:^|\/)\.\.(?:\/|$))[^\0]+$/,rev=value=>REV.test(value)&&!value.includes("..")&&!value.includes("//"),range=value=>{let parts=value.split("..");return parts.length===2&&parts.every(rev)},blobref=value=>{let at=value.indexOf(":");return at>=0&&(at===0||rev(value.slice(0,at)))&&REL.test(value.slice(at+1))},filesystem=value=>value.length>0&&!NUL.test(value)&&!/^[-:]/.test(value);function scheme(value){return/^([A-Za-z][A-Za-z0-9+.-]*):\/\//.exec(value)?.[1]}function urlIsLocal(value){let colon=value.indexOf(":"),slash=value.indexOf("/");return colon<0||slash>=0&&slash<colon||process.platform==="win32"&&/^[A-Za-z]:[\\/]/.test(value)}var unsafeUrl=value=>value.length===0||NUL.test(value)||/\s/.test(value)||value.startsWith("-")||value.includes("::");function remote(value){if(unsafeUrl(value))return!1;let named=scheme(value);return named!==void 0?named==="https"||named==="ssh":!urlIsLocal(value)}function localUrlPath(value){if(unsafeUrl(value)||scheme(value)!=="file")return;let rest=value.slice(7);if(!rest.startsWith("/")||/[?#]/.test(rest))return;let path;try{path=decodeURIComponent(rest)}catch{return}return path.length>1&&!NUL.test(path)&&!path.endsWith("/")&&posix.normalize(path)===path&&path.split("/").slice(1).every(part=>part!==""&&part!=="."&&part!=="..")?path:void 0}var localCandidate=value=>!unsafeUrl(value)&&(scheme(value)==="file"||scheme(value)===void 0&&urlIsLocal(value)),KINDS={rev,range,revish:value=>rev(value)||range(value),object:value=>rev(value)||blobref(value),blobref,ref:value=>value==="HEAD"||/^refs\/[A-Za-z0-9._/-]+$/.test(value)&&!value.includes(".."),refpat:value=>/^refs\/[A-Za-z0-9._/-]+\*?$/.test(value)&&!value.includes(".."),branch:value=>/^(?![-./])[A-Za-z0-9._/-]+$/.test(value)&&!value.includes(".."),refspec:value=>/^[A-Za-z0-9._/]+(?:-[A-Za-z0-9._/]+)*:[A-Za-z0-9._/-]+$/.test(value)&&!value.includes(".."),msg:value=>!NUL.test(value),count:value=>/^\d{1,9}$/.test(value),mode:value=>/^(?:100644|100755|120000|160000)$/.test(value),oid:value=>/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/.test(value),filter:value=>/^[ACDMRTUXB]+$/i.test(value),fmt:value=>!NUL.test(value),iso:value=>/^\d{4}-\d\d-\d\dT[\d:.]+Z$/.test(value),relpath:value=>REL.test(value),gitpath:value=>value==="index"||value==="MERGE_HEAD",path:filesystem,worktree:filesystem,source:value=>remote(value)||localCandidate(value),target:value=>remote(value)||localCandidate(value)},FORMAT=eq("--format=","fmt"),LOG_RECORD="--format=%x1e%H%x1f%s%x1f%b%x1f%an%x1f%ae%x1f%cI",SHAPES={add:[["-A","--",rep(1,k("path"))]],branch:[["--show-current"],["-D",k("branch")]],"cat-file":[["blob",k("object")],["--batch"],["-e",k("blobref")]],checkout:[[k("rev"),"--",k("path")]],commit:[["-q","--no-verify","-m",k("msg")]],"commit-tree":[[k("rev"),opt("-p",k("rev")),"-F","-"]],"count-objects":[["-v"]],diff:[["--cached","-M","-C","-z","--raw","--no-abbrev"],["--name-only","-z",eq("--diff-filter=","filter"),k("rev"),k("rev"),"--"],["--name-status","-M","-z",k("range"),"--"],["--cached","--quiet",k("rev"),"--"],["--no-renames","--name-only","-z",k("range"),"--",k("path")],["--name-only","-z",k("range"),"--"],["--name-only",eq("--diff-filter=","filter")]],"diff-files":[["--name-only","-z"]],"diff-tree":[["-r","-m","--no-commit-id","--no-renames",eq("--diff-filter=","filter"),"--raw","-z",k("rev")]],"for-each-ref":[[FORMAT,rep(1,k("refpat"))]],"hash-object":[[opt("-w"),"--no-filters","--stdin"],[opt("-w"),eq("--path=","relpath"),"--stdin"]],init:[["--template="]],log:[["-1",FORMAT,k("rev")],[{prefix:"-",kind:"count"},FORMAT,k("rev")],[FORMAT,"--name-only","-z","--no-renames","--diff-merges=first-parent",eq("--diff-filter=","filter"),rep(0,k("revish")),"--"],[LOG_RECORD,opt("--name-only","-z","--no-renames","--full-diff"),opt("--fixed-strings","--all-match",rep(1,eq("--grep=","msg"))),opt("-n",k("count")),opt(eq("--since=","iso")),opt(k("revish")),opt("--",rep(1,k("path")))]],"ls-files":[["--stage","-z","--",k("path")],["--eol","-z"]],"ls-remote":[[k("source"),k("ref")]],"ls-tree":[["-r","--name-only","-z",k("rev"),opt("--",k("path"))],["-r","-l","-z",k("rev")],["-r","-z",k("rev")],["-z",k("rev"),"--",k("path")]],maintenance:[["run","--task=loose-objects","--quiet"]],merge:[[],["--abort"],[opt("--no-ff"),opt("-m",k("msg")),k("rev")],["--no-ff",k("rev"),rep(1,"-m",k("msg"))]],"merge-base":[["--is-ancestor",k("rev"),k("rev")]],"prune-packed":[["--quiet"]],push:[["--quiet",k("target"),k("refspec")]],"read-tree":[["--empty"],[k("rev")]],remote:[["-v"]],reset:[["--soft",k("rev")]],restore:[["--source=HEAD","--staged",opt("--worktree"),"--",rep(1,k("path"))]],"rev-list":[[opt("--count"),k("range")],["--reverse",k("range")]],"rev-parse":[["--verify",opt("--quiet"),k("rev")],["-q","--verify",k("rev")],["--git-path",k("gitpath")],["--git-common-dir"]],rm:[["-q","--cached",opt("-f"),"--ignore-unmatch","--",rep(1,k("path"))],["-rf","-q","--ignore-unmatch","--",k("path")]],show:[["-s",FORMAT,k("rev")],[k("blobref")]],"show-ref":[["--verify",k("ref")]],status:[["--porcelain",opt("--untracked-files=all",opt("--",rep(1,k("path"))))]],"symbolic-ref":[["HEAD",k("ref")]],"update-index":[["--force-remove","--",k("path")],["--add","--cacheinfo",k("mode"),k("oid"),k("path")],["-q","-z","--stdin"]],"update-ref":[["-m",k("msg"),"HEAD",k("rev"),k("rev")]],worktree:[["add","-b",k("branch"),k("worktree"),k("rev")],["remove",opt("--force"),k("worktree")],["list","--porcelain"],["prune"]],"write-tree":[[]]};function match(items,args,at,paths,then){let[item,...rest]=items;if(item===void 0)return then(at);let next=to=>match(rest,args,to,paths,then);if(typeof item=="string")return args[at]===item&&next(at+1);if("optional"in item)return match(item.optional,args,at,paths,next)||next(at);if("repeat"in item){let again=(count,from)=>count>=item.min&&next(from)||match(item.repeat,args,from,paths,to=>to>from&&again(count+1,to));return again(0,at)}let arg=args[at];if(arg===void 0)return!1;let value="prefix"in item?arg.startsWith(item.prefix)?arg.slice(item.prefix.length):void 0:arg;if(value===void 0||!KINDS[item.kind](value))return!1;let kind=item.kind,typed=kind==="path"||kind==="worktree"||(kind==="source"||kind==="target")&&localCandidate(value);return typed&&paths.push({kind,value}),next(at+1)?!0:(typed&&paths.pop(),!1)}function matchShape(sub,args){for(let shape of SHAPES[sub]??[]){let paths=[];if(match(shape,args,0,paths,at=>at===args.length))return paths}}var HAND_GIT_PREFIX=["-c","core.fsmonitor=false","-c","protocol.file.allow=always"],SUBCOMMANDS=new Set(["add","branch","cat-file","checkout","commit","commit-tree","config","count-objects","diff","diff-files","diff-tree","for-each-ref","hash-object","init","log","ls-files","ls-remote","ls-tree","maintenance","merge","merge-base","prune-packed","push","read-tree","remote","reset","restore","rev-list","rev-parse","rm","show","show-ref","status","symbolic-ref","update-index","update-ref","worktree","write-tree"]);function configKey(key){let parts=key.split(".");if(parts.length<2)return key;let section=parts[0]?.toLowerCase()??"",name=parts[parts.length-1]?.toLowerCase()??"";return[section,...parts.slice(1,-1),name].join(".")}var keySet=keys=>new Set(keys.map(configKey)),CALLER_C_KEYS=keySet(["maintenance.auto","gc.auto","user.name","user.email","core.autocrlf","log.showRoot","core.quotePath","log.showSignature","log.follow"]),CONFIG_KEYS=keySet(["omo.agentId","user.name","user.email","commit.gpgsign","gc.auto","core.autocrlf","omo.memoryRepository.url","omo.sync.binding","omo.sync.space"]);function subcommandArgs(sub,rest){if(sub==="config"){let[scope,first,second,extra]=rest;if(scope!=="--local"||first===void 0||extra!==void 0)return"config shape";let key=first==="--get"||first==="--unset-all"?second:first;return key===void 0||first!=="--get"&&first!=="--unset-all"&&(second??"-").startsWith("-")?"config shape":CONFIG_KEYS.has(configKey(key))?[]:`config key ${key}`}return matchShape(sub,rest)??`${sub} shape`}function planGit(argv){let index=0;for(;argv[index]?.startsWith("-");){let arg=argv[index]??"";if(arg==="--literal-pathspecs"){index++;continue}if(arg!=="-c")return arg;let setting=argv[index+1]??"",separator=setting.indexOf("=");if(separator<=0||!CALLER_C_KEYS.has(configKey(setting.slice(0,separator))))return`-c ${setting}`;index+=2}let sub=argv[index];if(sub===void 0||!SUBCOMMANDS.has(sub))return`subcommand ${sub??"(none)"}`;let paths=subcommandArgs(sub,argv.slice(index+1));return typeof paths=="string"?paths:{argv:[...HAND_GIT_PREFIX,...argv],paths}}var equal=(args,expected)=>args.length===expected.length&&args.every((arg,index)=>arg===expected[index]);function planLsof(argv,uid){let holders=argv.length===3&&argv[0]==="-t"&&argv[1]==="--"&&(argv[2]??"").length>0,inUse=equal(argv,["-w","-a","-d","cwd","-u",String(uid),"-Fpn"]);return holders||inUse?[...argv]:"lsof shape"}var CALLER_ENV={GIT_TERMINAL_PROMPT:value=>value==="0",GIT_INDEX_FILE:value=>value.length>0,GIT_GLOB_PATHSPECS:value=>value==="0"||value==="1",GIT_AUTHOR_NAME:()=>!0,GIT_AUTHOR_EMAIL:()=>!0,GIT_COMMITTER_NAME:()=>!0,GIT_COMMITTER_EMAIL:()=>!0},WIN32_BASELINE=["SYSTEMROOT","TEMP","TMP","USERPROFILE","HOMEDRIVE","HOMEPATH","PATHEXT"];function baseline(context){let env={},keep=key=>{let value=context.ownEnv[key];value!==void 0&&(env[key]=value)};for(let key of["PATH","HOME","SSH_AUTH_SOCK"])keep(key);if(context.platform==="win32")for(let key of WIN32_BASELINE)keep(key);else keep("TMPDIR"),env.LANG="C";return env.GIT_PROTOCOL_FROM_USER="0",env}function planRun(request,context){let env=baseline(context);for(let[key,value]of Object.entries(request.env)){let allowed2=Object.hasOwn(CALLER_ENV,key)?CALLER_ENV[key]:void 0;if(allowed2===void 0||!allowed2(value))return{ok:!1,reason:`not in the run allowlist: env ${key}`};env[key]=value}let planned=request.exe==="git"?planGit(request.argv):request.exe==="lsof"?planLsof(request.argv,context.uid):`executable ${request.exe}`;return typeof planned=="string"?{ok:!1,reason:`not in the run allowlist: ${planned}`}:Array.isArray(planned)?{ok:!0,exe:"lsof",argv:planned,env,paths:[]}:{ok:!0,exe:"git",argv:planned.argv,env,paths:planned.paths}}var SAFE=/^[A-Za-z0-9@%+=:,./_-]+$/;function renderCommand(exe,argv){return[exe,...argv].map(arg=>SAFE.test(arg)?arg:`'${arg.replaceAll("'","'\\''")}'`).join(" ")}import{execFile as execFile2}from"node:child_process";import{lstat as lstat2,stat}from"node:fs/promises";import{basename as basename3,dirname as dirname3,isAbsolute,join as join3,resolve as resolve2,sep}from"node:path";import{execFile}from"node:child_process";import{lstat,readdir,realpath}from"node:fs/promises";import{basename as basename2,dirname as dirname2,join as join2}from"node:path";var SHAPE="local_repo_shape_unsupported",WALK_BOUND=2e4,refuse=detail=>{throw new DeviceFileError("refused_by_policy",`${SHAPE}: ${detail}`)};async function kindOf(path){let entry=await lstat(path).catch(()=>{});if(entry!==void 0)return entry.isSymbolicLink()?"link":entry.isFile()?"file":entry.isDirectory()?"dir":"other"}async function noLinks(path,recursive,budget){let kind=await kindOf(path);if(kind!==void 0&&(kind==="link"&&refuse(`symlink at ${path}`),kind==="dir"))for(let name of await readdir(path)){budget.left-=1,budget.left<0&&refuse(`more than ${WALK_BOUND} entries under the repository`);let child=join2(path,name),childKind=await kindOf(child);childKind==="link"&&refuse(`symlink at ${child}`),recursive&&childKind==="dir"&&await noLinks(child,!0,budget)}}async function plainGitDir(dir){let[head,objects,refs,commondir,alternates]=await Promise.all(["HEAD","objects","refs","commondir","objects/info/alternates"].map(entry=>kindOf(join2(dir,entry))));(head!=="file"||objects!=="dir"||refs!=="dir")&&refuse(`${dir} is not a plain git directory`),(commondir!==void 0||alternates!==void 0)&&refuse(`${dir} redirects through commondir or alternates`);let budget={left:WALK_BOUND};for(let entry of["HEAD","config","packed-refs"])await noLinks(join2(dir,entry),!1,budget);await noLinks(join2(dir,"refs"),!0,budget),await noLinks(join2(dir,"hooks"),!0,budget),await noLinks(join2(dir,"logs"),!0,budget),await noLinks(join2(dir,"worktrees"),!1,budget),await noLinks(join2(dir,"objects"),!1,budget);for(let sub of["info","pack"])await noLinks(join2(dir,"objects",sub),!1,budget)}function gitConfig(file){let env={PATH:process.env.PATH??"/usr/bin:/bin",GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_GLOBAL:"/dev/null",LANG:"C"};return new Promise((done,fail)=>{execFile("git",["config","--file",file,"--no-includes","--list","-z"],{env,timeout:3e4,windowsHide:!0},(error,stdout)=>{if(error)return fail(error);let records=String(stdout).split("\0").filter(Boolean);done(records.map(record=>{let at=record.indexOf(`
3
3
  `);return at<0?[record,""]:[record.slice(0,at),record.slice(at+1)]}))})})}var INIT_KEYS=new Set(["core.repositoryformatversion","core.filemode","core.bare","core.ignorecase","core.precomposeunicode","core.logallrefupdates"]),CLONE_KEY=/^remote\..+\.(?:url|fetch|mirror|tagopt)$/,WORKING_CLONE_KEY=/^branch\..+\.(?:remote|merge)$|^user\.(?:name|email)$/;async function allowlistedConfig(dir,bare){let config=join2(dir,"config");await kindOf(config)!=="file"&&refuse(`${dir} has no config file`);let entries=await gitConfig(config).catch(()=>refuse("target config is unreadable"));for(let[key,value]of entries){if(key==="core.bare"){value!==String(bare)&&refuse(`core.bare=${value} on a ${bare?"bare":"working-clone"} target`);continue}INIT_KEYS.has(key)||CLONE_KEY.test(key)||!bare&&WORKING_CLONE_KEY.test(key)||refuse(`target config key ${key} is not allowlisted`)}}async function canonicalLocalRepo(path){let parent=await realpath(dirname2(path)).catch(()=>refuse(`no repository at ${path}`)),real=join2(parent,basename2(path)),self=await kindOf(real);self==="link"&&refuse(`${path} is a symlink`),self!=="dir"&&refuse(`no repository at ${path}`),await kindOf(`${real}.git`)!==void 0&&refuse(`${path}.git exists`);let dotGit=await kindOf(join2(real,".git"));dotGit!==void 0&&dotGit!=="dir"&&refuse(`${path}/.git is not a directory`);let gitDir=dotGit==="dir"?join2(real,".git"):real;return await plainGitDir(gitDir),await allowlistedConfig(gitDir,dotGit!=="dir"),gitDir}var MIN_GIT=[2,29];function git(argv,cwd,env){return new Promise((done,fail)=>{execFile2("git",[...argv],{cwd,env,timeout:3e4,windowsHide:!0},(error,stdout)=>error?fail(error):done(String(stdout)))})}var versionChecked;function gitIsSupported(env){return versionChecked??=git(["--version"],process.cwd(),env).then(output=>{let match2=/git version (\d+)\.(\d+)/.exec(output);if(match2===null)return!1;let[major,minor]=[Number(match2[1]),Number(match2[2])];return major>MIN_GIT[0]||major===MIN_GIT[0]&&minor>=MIN_GIT[1]},()=>!1),versionChecked}async function runDirectory(root,cwd){let canonical=await canonicalizeFilesystemPath(resolve2(root,cwd)),entry=await stat(canonical).catch(()=>{});if(entry===void 0)throw new DeviceFileError("not_found",cwd);if(!entry.isDirectory())throw new DeviceFileError("not_a_file",cwd);return canonical}var inside=(path,dir)=>path===dir||path.startsWith(`${dir}${sep}`);async function confinedIndexFile(value,cwd,env){if(!isAbsolute(value))throw new DeviceFileError("refused_by_policy","GIT_INDEX_FILE must be absolute");let dirs=await gitDirs(cwd,env),parent=await canonicalizeFilesystemPath(dirname3(value));if(!dirs.some(dir=>inside(parent,dir)))throw new DeviceFileError("refused_by_policy","GIT_INDEX_FILE is outside the repository's git directory");return join3(parent,basename3(value))}async function hasUrlRewrites(cwd,env){return(await git(["config","--get-regexp","^url\\."],cwd,env).catch(error=>error.code===1?"":Promise.reject(error))).trim().length>0}async function gitDirs(cwd,env){let[gitDir,commonDir]=(await git(["rev-parse","--absolute-git-dir","--git-common-dir"],cwd,env)).trim().split(`
4
4
  `);if(gitDir===void 0||commonDir===void 0)throw new DeviceFileError("refused_by_policy","no repository at cwd");return Promise.all([gitDir,resolve2(cwd,commonDir)].map(dir=>canonicalizeFilesystemPath(dir)))}async function canonicalTarget(raw,cwd){let target=resolve2(cwd,raw);if((await lstat2(target).catch(()=>{}))?.isSymbolicLink()===!0)throw new DeviceFileError("refused_by_policy",`symlink: ${raw}`);return join3(await canonicalizeFilesystemPath(dirname3(target)),basename3(target))}async function confinePaths(paths,cwd,env){if(paths.length===0)return[];let dirs=await gitDirs(cwd,env),top=await git(["rev-parse","--show-toplevel"],cwd,env).then(output=>canonicalizeFilesystemPath(output.trim()),()=>{}),targets=[];for(let{kind,value}of paths){if(kind==="source"||kind==="target"){let local=localUrlPath(value);if(local===void 0)throw new DeviceFileError("refused_by_policy",`local_repo_shape_unsupported: only an absolute file:// url: ${value}`);let operation=kind==="source"?"read":"write";targets.push({operation,canonicalPath:await canonicalLocalRepo(local)});continue}let canonical=await canonicalTarget(value,cwd),inGitDir=dirs.some(dir=>inside(canonical,dir)||kind==="worktree"&&inside(dir,canonical));if(kind==="worktree"){if(inGitDir)throw new DeviceFileError("refused_by_policy","worktree path is inside the repository's git directory");targets.push({operation:"write",canonicalPath:canonical})}else if(!inGitDir&&(top===void 0||!inside(canonical,top)))throw new DeviceFileError("refused_by_policy",`path outside the repository: ${value}`)}return targets}var HARDENED_RECEIVE_PACK=["git","-c core.hooksPath=/dev/null","-c receive.denyCurrentBranch=refuse","-c core.fsmonitor=false","-c receive.autogc=false","-c gc.auto=0","-c maintenance.auto=false","receive-pack"].join(" "),CLIENT_LOCAL_GUARDS=["-c","core.hooksPath=/dev/null"],REMOTE_GUARDS=["-c","protocol.file.allow=never","-c","protocol.ext.allow=never","-c","protocol.fd.allow=never"];function subcommandAt(argv){let index=0;for(;index<argv.length&&(argv[index]??"").startsWith("-");)index+=argv[index]==="-c"?2:1;return index}function transportFor(argv,env,paths){let at=subcommandAt(argv),sub=argv[at];if(paths.some(path=>path.kind==="source"||path.kind==="target")){let pushed=sub==="push"?[`--receive-pack=${HARDENED_RECEIVE_PACK}`]:[];return{argv:[...argv.slice(0,at),...CLIENT_LOCAL_GUARDS,argv[at]??"",...pushed,...argv.slice(at+1)],env:{...env,GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_GLOBAL:"/dev/null"},local:!0}}return sub==="ls-remote"||sub==="push"?{argv:[...argv.slice(0,at),...REMOTE_GUARDS,...argv.slice(at)],env,local:!1}:{argv:[...argv],env,local:!1}}var RUN_TIMEOUT_CAP_MS=3e5,DEFAULT_TIMEOUT_MS=3e4,KILL_GRACE_MS=1e4;async function judged(guards,command,nested){let input={command},decision;try{decision=await guards.beforeToolCall("bash",`run-${randomUUID()}`,input,nested)}catch(error){throw new DeviceFileError("refused_by_policy",error instanceof Error?error.message:String(error))}if(decision?.block===!0)throw new DeviceFileError("refused_by_policy",decision.reason??"blocked");if(input.command!==command)throw new DeviceFileError("refused_by_policy","a tool_call handler rewrote the command")}async function runOnHand(args,deps,signal){let plan=planRun({exe:args.exe,argv:args.argv,env:args.env},deps.context);if(!plan.ok)throw new DeviceFileError("refused_by_policy",plan.reason);if(args.stdin!==void 0&&base64Length(args.stdin)>FILE_CHANNEL_MAX_BYTES)throw new DeviceFileError("too_large","stdin");let cwd=await runDirectory(deps.root,args.cwd),verdict=await deps.guards.filesystemPolicy()?.({operation:"write",canonicalPath:cwd,toolName:"bash"});if(verdict!==void 0&&!verdict.allow)throw new DeviceFileError("refused_by_policy",verdict.reason);let transport=plan.exe==="git"?transportFor(plan.argv,plan.env,plan.paths):{argv:plan.argv,env:plan.env,local:!1},env={...transport.env};if(plan.exe==="git"){if(!await gitIsSupported(env))throw new DeviceFileError("unsupported","git 2.29 or newer is required");if(transport.local&&await hasUrlRewrites(cwd,env))throw new DeviceFileError("refused_by_policy","local_url_rewritten: a url.* rewrite is configured")}if(await judged(deps.guards,renderCommand(plan.exe,transport.argv),deps.nested),plan.exe==="git"){env.GIT_INDEX_FILE!==void 0&&(env.GIT_INDEX_FILE=await confinedIndexFile(env.GIT_INDEX_FILE,cwd,env));for(let{operation,canonicalPath}of await confinePaths(plan.paths,cwd,env)){let decision=await deps.guards.filesystemPolicy()?.({operation,canonicalPath,toolName:"bash"});if(decision!==void 0&&!decision.allow)throw new DeviceFileError("refused_by_policy",decision.reason)}}let hold=args.activityLock===!0&&plan.exe==="git"?await holdActivityLock(cwd,deps.flock):void 0;try{return await spawnBounded(plan.exe,transport.argv,cwd,env,args,hold?.fd,signal)}finally{await hold?.release()}}function spawnBounded(exe,argv,cwd,env,args,lockFd,signal){return new Promise((done,fail)=>{let child=spawn(exe,[...argv],{cwd,env,shell:!1,windowsHide:!0,stdio:["pipe","pipe","pipe",lockFd??"ignore"]}),out=[],err=[],size={out:0,err:0},overflow=!1,killTimer,stop=()=>{child.exitCode===null&&child.signalCode===null&&child.kill("SIGTERM"),killTimer??=setTimeout(()=>{child.kill("SIGKILL"),child.stdout?.destroy(),child.stderr?.destroy()},KILL_GRACE_MS)},timeout=setTimeout(stop,Math.min(args.timeoutMs??DEFAULT_TIMEOUT_MS,RUN_TIMEOUT_CAP_MS)),onAbort=()=>stop();signal.addEventListener("abort",onAbort,{once:!0});let collect=(into,key)=>chunk=>{if(size={...size,[key]:size[key]+chunk.length},size[key]>FILE_CHANNEL_MAX_BYTES){overflow=!0,stop();return}into.push(chunk)};child.stdout?.on("data",collect(out,"out")),child.stderr?.on("data",collect(err,"err")),child.on("error",error=>fail(new DeviceFileError("io",error.message))),child.on("close",(code,exitSignal)=>{if(clearTimeout(timeout),killTimer!==void 0&&clearTimeout(killTimer),signal.removeEventListener("abort",onAbort),signal.aborted)return fail(new DeviceFileError("aborted","the run was aborted"));if(overflow)return fail(new DeviceFileError("too_large","the run's output passed the limit"));done({code,signal:exitSignal,stdout:encodeBase64(new Uint8Array(Buffer.concat(out))),stderr:Buffer.concat(err).toString("utf8")})}),child.stdin?.on("error",()=>{}),child.stdin?.end(args.stdin===void 0?void 0:Buffer.from(decodeBase64(args.stdin)))})}function checksOf(args){switch(args.op){case"read":return[{toolName:"read",operation:"read",path:args.path}];case"list":return[{toolName:"ls",operation:"enumerate",path:args.path}];case"stat":return[{toolName:"ls",operation:"enumerate",path:args.path,entry:!0}];case"write":return[{toolName:"write",operation:"write",path:args.path,content:new TextDecoder().decode(decodeBase64(args.data))}];case"rename":return[{toolName:"write",operation:"write",path:args.path,content:"",entry:!0},{toolName:"write",operation:"write",path:args.to,content:"",entry:!0}];case"remove":return[{toolName:"write",operation:"write",path:args.path,content:"",entry:!0}];case"mkdir":return[{toolName:"write",operation:"write",path:args.path,content:""}]}}async function canonicalOf(path,entry){return entry?join4(await canonicalizeFilesystemPath(dirname4(path)),basename4(path)):canonicalizeFilesystemPath(path)}async function allowed(guards,root,check,nested){let content=check.content??"",input=check.toolName==="write"?{path:check.path,content}:{path:check.path},decision;try{decision=await guards.beforeToolCall(check.toolName,`file-${randomUUID2()}`,input,nested)}catch(error){throw new DeviceFileError("refused_by_policy",error instanceof Error?error.message:String(error))}if(decision?.block===!0)throw new DeviceFileError("refused_by_policy",decision.reason??"blocked");if(input.path!==check.path||check.toolName==="write"&&input.content!==content)throw new DeviceFileError("refused_by_policy","a tool_call handler rewrote the operation");let canonicalPath=await canonicalOf(resolve3(root,check.path),check.entry===!0),verdict=await guards.filesystemPolicy()?.({operation:check.operation,canonicalPath,toolName:check.toolName});if(verdict!==void 0&&!verdict.allow)throw new DeviceFileError("refused_by_policy",verdict.reason);return canonicalPath}function createHandFileOps(root,guards,run){let files=localDeviceFiles();return async(op,rawArgs,signal,nested)=>{let args=decodeDeviceFileArgs(op,rawArgs);if(args===void 0)return fileRefusal("protocol",`malformed ${op} arguments`);if(args.op==="run"){if(run===void 0)return fileRefusal("unsupported","this hand serves no run channel");try{let{exe,argv,env,stdin,timeoutMs,activityLock}=args,request={exe,argv,cwd:args.path,env,activityLock,...stdin===void 0?{}:{stdin},...timeoutMs===void 0?{}:{timeoutMs}},outcome=await runOnHand(request,{root,guards,context:run.context,flock:run.flock,...nested?{nested}:{}},signal);return fileResult({ok:!0,value:{...outcome}})}catch(error){return error instanceof DeviceFileError?fileRefusal(error.code,error.message):fileRefusal("io",error instanceof Error?error.message:String(error))}}if(args.op==="write"&&base64Length(args.data)>FILE_CHANNEL_MAX_BYTES)return fileRefusal("too_large",args.path);try{let[target,destination]=await Promise.all(checksOf(args).map(check=>allowed(guards,root,check,nested)));if(target===void 0)return fileRefusal("protocol","no target");let options={signal};switch(args.op){case"read":return fileResult({ok:!0,value:encodeBase64(await files.read(target,options))});case"list":return fileResult({ok:!0,value:[...await files.list(target,options)]});case"stat":return fileResult({ok:!0,value:{...await files.stat(target,options)}});case"write":{let data=decodeBase64(args.data);await withFileMutationQueue(target,()=>files.write(target,data,{...options,exclusive:args.exclusive}));break}case"rename":await withFileMutationQueues([target,destination??target],()=>files.rename(target,destination??target,options));break;case"remove":await withFileMutationQueue(target,()=>files.remove(target,options));break;case"mkdir":await files.mkdir(target,options);break}return fileResult({ok:!0,value:null})}catch(error){return error instanceof DeviceFileError?fileRefusal(error.code,error.message):fileRefusal("io",error instanceof Error?error.message:String(error))}}}var bound;function loadFlock(){return bound===void 0&&(bound=bindFlock()??null),bound??void 0}function bindFlock(){if(process.platform!=="darwin"&&process.platform!=="linux")return;let ffi=process.getBuiltinModule("bun:ffi");if(ffi===void 0)return;let errnoSymbol=process.platform==="darwin"?"__error":"__errno_location";try{let library=ffi.dlopen(process.platform==="darwin"?"libSystem.B.dylib":"libc.so.6",{flock:{args:[ffi.FFIType.i32,ffi.FFIType.i32],returns:ffi.FFIType.i32},[errnoSymbol]:{args:[],returns:ffi.FFIType.ptr}}),errnoPointer=library.symbols[errnoSymbol];return(fd,operation)=>{let rc=Number(library.symbols.flock(fd,operation));if(rc===0||errnoPointer===void 0)return{rc,errno:0};let pointer=errnoPointer();return{rc,errno:typeof pointer=="number"&&pointer!==0?ffi.read.i32(pointer,0):-1}}}catch{return}}var LOOPLESS_EXECUTE_CALLERS=["in-process-test-harness","remote-tool-executor"],issued=new WeakSet,LooplessExecuteRefusedError=class extends Error{constructor(reason){super(`loopless_execute_refused: ${reason}`)}};function grantLooplessExecuteToRemoteExecutor(){let grant=Object.freeze({caller:"remote-tool-executor"});return issued.add(grant),grant}function looplessGrantRunsToolHandlers(grant){return isLooplessExecuteGranted(grant)&&grant?.caller==="remote-tool-executor"}function isLooplessExecuteGranted(grant){return grant!==void 0&&issued.has(grant)&&LOOPLESS_EXECUTE_CALLERS.includes(grant.caller)}import{randomUUID as randomUUID3}from"node:crypto";async function resolveLooplessSettings(configuration,startupSettingsManager,profile,diagnostics){let{parsed,agentDir,appMode}=configuration,{cwd,launchProfile}=profile,trustStore=new ProjectTrustStore(agentDir),flagValues=sessionExtensionFlagValues(parsed.unknownFlags,launchProfile),hasTrustRequiringResources=hasTrustRequiringProjectResources(cwd),savedProjectTrust=await getSavedProjectTrust(trustStore,cwd),globalPreset=startupSettingsManager.getGlobalSettings().permissionPreset,fullAccessTrust=presetTrustsProject(flagValues.get("permission-preset"),globalPreset)&&savedProjectTrust!==!1,shouldResolveProjectTrust=parsed.projectTrustOverride===void 0&&!fullAccessTrust&&hasTrustRequiringResources,projectTrusted=shouldResolveProjectTrust?!1:parsed.projectTrustOverride??(fullAccessTrust||!hasTrustRequiringResources||savedProjectTrust===!0),trustFromFullAccess=fullAccessTrust&&hasTrustRequiringResources&&parsed.projectTrustOverride===void 0&&savedProjectTrust!==!0;return{settingsManager:SettingsManager.create(cwd,agentDir,{projectTrusted,trustFromFullAccess,projectTrustLocked:parsed.projectTrustOverride!==void 0}),flagValues,reloadOptions:shouldResolveProjectTrust?{resolveProjectTrust:({extensionsResult})=>resolveProjectTrusted({cwd,trustStore,trustOverride:parsed.projectTrustOverride,defaultProjectTrust:startupSettingsManager.getDefaultProjectTrust(),extensionsResult,projectTrustContext:createProjectTrustContext({cwd,mode:appMode,settingsManager:startupSettingsManager,hasUI:!1}),onExtensionError:message=>diagnostics.push({type:"warning",message})})}:void 0}}function resolveCliPaths(cwd,paths){return paths?.map(value=>isLocalPath(value)?resolvePath(value,cwd):value)}function looplessToolFilters(parsed,settingsManager){let noTools=parsed.noTools?"all":parsed.noBuiltinTools?"builtin":void 0,defaultToolNames=parsed.tools===void 0&&noTools===void 0?settingsManager.getDefaultTools():void 0,allowedToolNames=parsed.tools??(noTools==="all"?[]:void 0);return{...defaultToolNames===void 0?{}:{defaultToolNames:new Set(defaultToolNames)},...allowedToolNames===void 0?{}:{allowedToolNames:new Set(allowedToolNames)},...parsed.excludeTools===void 0?{}:{excludedToolNames:new Set(parsed.excludeTools)}}}function errorResult(message){return{content:[{type:"text",text:message}],details:void 0,isError:!0}}function withOverride(result,override){let structuredContent=override.structuredContent??(override.content?void 0:result.structuredContent),next={...result,content:override.content??result.content,details:override.details??result.details,usage:override.usage??result.usage,isError:override.isError??result.isError===!0};return structuredContent===void 0?delete next.structuredContent:next.structuredContent=structuredContent,next}async function runLooplessToolCall(tool,call,handlers){let{toolCallId,signal}=call,nested=call.nested===void 0?{}:{nested:call.nested},args;try{let prepared=tool.prepareArguments?tool.prepareArguments(call.params):call.params,toolCall={type:"toolCall",id:toolCallId,name:tool.name,arguments:prepared};args=validateToolArguments(tool,toolCall)}catch(error){return errorResult(error instanceof Error?error.message:String(error))}if(handlers){let before;try{before=await handlers.beforeToolCall({toolName:tool.name,toolCallId,input:args,...nested})}catch(error){return errorResult(error instanceof Error?error.message:`Extension failed, blocking execution: ${String(error)}`)}if(signal?.aborted)return errorResult("Operation aborted");if(before?.block){let blocked=errorResult(before.reason||"Tool execution was blocked");return before.terminate===!0&&(blocked.terminate=!0),blocked}}let result;try{result=await tool.execute(toolCallId,args,signal,void 0)}catch(error){result=errorResult(error instanceof Error?error.message:String(error))}if(!handlers)return result;try{let override=await handlers.afterToolCall({toolName:tool.name,toolCallId,input:args,result,isError:result.isError===!0,...nested});return override?withOverride(result,override):result}catch(error){return errorResult(error instanceof Error?error.message:String(error))}}import{AsyncLocalStorage}from"node:async_hooks";var REVOCATION_MAX_AGE_MS=360*60*1e3;var REQUIRED_STRINGS=["accountId","sigKeyId","sigPkSha256"],OPTIONAL_STRINGS=["kemKeyId","kemPkSha256","supersedes"],RECORD_KEYS=["kind","generation","kmsKeyArns","templateVersion","verifierKeyId","vouchedAt","checkedAt",...REQUIRED_STRINGS,...OPTIONAL_STRINGS];var HookContractError=class extends Error{constructor(){super(...arguments),this.name="HookContractError"}};var isPlainObject=value=>{if(typeof value!="object"||value===null||Array.isArray(value))return!1;let prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null};function wireJson(value,at){if(value===null||typeof value=="string"||typeof value=="boolean")return value;if(typeof value=="number"){if(Number.isFinite(value))return value;throw new HookContractError(`${at} is not a finite number`)}if(Array.isArray(value))return value.map((item,index)=>wireJson(item,`${at}[${index}]`));if(isPlainObject(value)){let out={};for(let[key,member]of Object.entries(value))member!==void 0&&(out[key]=wireJson(member,`${at}.${key}`));return out}throw new HookContractError(`${at} is not JSON`)}function hookRequestOutputOf(input,payload){let out=wireJson(payload,"payload");return input.model===void 0?{payload:out}:{payload:out,model:input.model}}var MODEL_STRING_FIELDS=["id","name","api","provider","baseUrl"];function parseHookRequestInput(value){if(!isPlainObject(value)||!("payload"in value))throw new HookContractError("hook input is not an object with a payload");let extra=Object.keys(value).filter(key=>key!=="payload"&&key!=="model");if(extra.length>0)throw new HookContractError(`hook input has unknown members: ${extra.join(", ")}`);let payload=wireJson(value.payload,"payload");if(value.model===void 0)return{payload};let model=value.model;if(!isPlainObject(model)||MODEL_STRING_FIELDS.some(field=>typeof model[field]!="string"))throw new HookContractError("hook input model is not a model");if("headers"in model)throw new HookContractError("hook input model carries headers");return{payload,model:wireJson(model,"model")}}function hookModelOf(input){return input.model}function extensionToolHandlers(runner,twoSidedHome="loop"){let twoSided=twoSidedHome==="loop"?runner.twoSidedExtensionPaths():new Set,options=nested=>nested===void 0||twoSided.size===0?{}:{forward:forwardToolEvents(twoSided,nested)};return{beforeToolCall:({toolName,toolCallId,input,nested})=>runner.hasHandlers("tool_call")?runner.emitToolCall({type:"tool_call",toolName,toolCallId,input},options(nested)):Promise.resolve(void 0),afterToolCall:({toolName,toolCallId,input,result,isError,nested})=>runner.hasHandlers("tool_result")?runner.emitToolResult({type:"tool_result",toolName,toolCallId,input,content:result.content,details:result.details,...result.structuredContent===void 0?{}:{structuredContent:result.structuredContent},isError,usage:result.usage},options(nested)):Promise.resolve(void 0)}}var isRecord2=value=>typeof value=="object"&&value!==null&&!Array.isArray(value);function extensionLoopHooks(runner,twoSidedHome,cwd,call){return async(event,payload)=>{if(twoSidedHome!=="hand")throw new Error("this hand is not the home of its extensions' loop hooks");if(!isRecord2(payload)||typeof payload.sessionId!="string"||typeof payload.idle!="boolean")throw new Error(`malformed ${event} payload`);let{sessionId,idle}=payload,images=imagesOf(payload.images);if(images===null)throw new Error(`malformed ${event} payload: images`);if(event==="input"){let{inputId,text,source,attribution,streamingBehavior}=payload;if(typeof inputId!="string"||typeof text!="string"||!isOneOf(source,INPUT_SOURCES)||!isOneOf(attribution,INPUT_ATTRIBUTIONS)||!(streamingBehavior===void 0||isOneOf(streamingBehavior,STREAMING_BEHAVIORS)))throw new Error("malformed input payload");return call.run(sessionId,cwd,idle,effects=>dispatchLoopHook(runner,call,effects,()=>runner.emitInput(text,images,source,streamingBehavior,inputId,attribution,isUserLoopHook)))}if(event==="before_agent_start"){let{prompt,systemPrompt,trigger,preview,systemPromptOptions}=payload;if(typeof prompt!="string"||typeof systemPrompt!="string"||!isOneOf(trigger,TRIGGERS)||!(preview===void 0||typeof preview=="boolean")||!isRecord2(systemPromptOptions))throw new Error("malformed before_agent_start payload");let options={...systemPromptOptions,cwd};return call.run(sessionId,cwd,idle,effects=>dispatchLoopHook(runner,call,effects,()=>runner.emitBeforeAgentStart(prompt,images,systemPrompt,options,{only:isUserLoopHook,trigger,...preview===void 0?{}:{preview}})))}if(event==="before_provider_request"){let input=parseHookRequestInput(payload.input),model=hookModelOf(input);return call.run(sessionId,cwd,idle,effects=>dispatchLoopHook(runner,call,effects,async()=>({output:hookRequestOutputOf(input,await runner.emitBeforeProviderRequest(structuredClone(input.payload),void 0,void 0,{only:isUserLoopHook,...model===void 0?{}:{model}}))})))}throw new Error(`no loop hooks run on a hand for ${event}`)}}var isUserLoopHook=extensionPath=>!extensionPath.startsWith("<builtin:")||extensionPath==="<builtin:hooks>",INPUT_SOURCES=["interactive","rpc","extension"],INPUT_ATTRIBUTIONS=["user","agent"],STREAMING_BEHAVIORS=["steer","followUp"],TRIGGERS=["prompt","delivery","extension"],isOneOf=(value,allowed2)=>typeof value=="string"&&allowed2.includes(value),imagesOf=value=>value===void 0?void 0:Array.isArray(value)&&value.every(isImage)?value:null,isImage=value=>isRecord2(value)&&value.type==="image"&&typeof value.data=="string"&&typeof value.mimeType=="string";async function dispatchLoopHook(runner,call,effects,dispatch){let own=call.current(),errors=[],stop=runner.onError(({extensionPath,event,error})=>{own!==void 0&&call.current()===own&&errors.push({extensionPath,event,error})});try{let result=await dispatch(),{sent,notices}=effects;return JSON.parse(JSON.stringify({...result,...sent.length>0?{sent}:{},...notices.length>0?{notices}:{},...effects.dropped>0?{droppedLate:effects.dropped}:{},...errors.length>0?{errors}:{}}))}finally{stop()}}var LATE_PER_SESSION=256;function createLoopHookCall(){let calls=new AsyncLocalStorage,late=new Map,holdLate=(sessionId,add)=>{let held=late.get(sessionId)??{sent:[],notices:[],dropped:0};for(add(held);held.sent.length+held.notices.length>LATE_PER_SESSION;)(held.notices.length>0?held.notices:held.sent).shift(),held.dropped++;late.set(sessionId,held)};return{current:()=>{let call=calls.getStore();return call?.live()===!0?call.facts:void 0},sender:()=>calls.getStore()?.facts.sendMessage,async run(sessionId,cwd,idle,dispatch){let live=!0,controller=new AbortController,effects=late.get(sessionId)??{sent:[],notices:[],dropped:0};late.delete(sessionId);let facts=Object.freeze({sessionManager:readOnlySession(sessionId,cwd,()=>live),signal:controller.signal,isIdle:()=>idle,sendMessage:(message,options)=>{let entry=options===void 0?{message}:{message,options};live?effects.sent.push(entry):holdLate(sessionId,held=>held.sent.push(entry))},notify:(message,type)=>{let entry=type===void 0?{message}:{message,type};live?effects.notices.push(entry):holdLate(sessionId,held=>held.notices.push(entry))}});try{return await calls.run({live:()=>live,facts},()=>dispatch(effects))}finally{live=!1,controller.abort()}}}}var LoopHookCallEndedError=class extends Error{constructor(member){super(`this loop-hook call has ended; ${member} is bound to that call only`),this.name="LoopHookCallEndedError",this.member=member}};function readOnlySession(sessionId,cwd,live){let bound2=(member,read)=>()=>{if(!live())throw new LoopHookCallEndedError(`sessionManager.${member}`);return read()},unbound=member=>()=>{throw new Error(`sessionManager.${member} is loop-side: a loop-hook call on a hand carries only the session's id`)};return Object.freeze({getSessionId:bound2("getSessionId",()=>sessionId),getSessionFile:bound2("getSessionFile",()=>{}),getCwd:bound2("getCwd",()=>cwd),getSessionDir:unbound("getSessionDir"),getLeafId:unbound("getLeafId"),getLeafEntry:unbound("getLeafEntry"),getEntry:unbound("getEntry"),getLabel:unbound("getLabel"),getBranch:unbound("getBranch"),getFullBranch:unbound("getFullBranch"),buildContextEntries:unbound("buildContextEntries"),buildSessionContext:unbound("buildSessionContext"),buildSessionProjection:unbound("buildSessionProjection"),getHeader:unbound("getHeader"),getEntries:unbound("getEntries"),reduceHistory:unbound("reduceHistory"),getTree:unbound("getTree"),getSessionName:unbound("getSessionName")})}var LooplessToolNotFoundError=class extends Error{constructor(toolName){super(`loopless_tool_not_found: ${toolName}`),this.toolName=toolName}};function createLooplessRuntimeFactory(configuration,local={}){let{parsed,agentDir,toolRuntime}=configuration,extensionFactories=local.extensionFactories??builtInExtensions,startupSettingsManager=local.startupSettingsManager??SettingsManager.create(configuration.cwd,configuration.agentDir);return async profile=>{let{cwd}=profile,diagnostics=[],{settingsManager,flagValues,reloadOptions}=await resolveLooplessSettings(configuration,startupSettingsManager,profile,diagnostics),services=await createAgentSessionServices({cwd,agentDir,settingsManager,modelRuntimeSignal:AbortSignal.timeout(15e3),extensionFlagValues:flagValues,...reloadOptions?{resourceLoaderReloadOptions:reloadOptions}:{},resourceLoaderOptions:{sessionKind:profile.launchProfile?.sessionKind,sessionContext:profile.launchProfile?.sessionContext,additionalExtensionPaths:resolveCliPaths(cwd,parsed.extensions),additionalSkillPaths:resolveCliPaths(cwd,parsed.skills),additionalPromptTemplatePaths:resolveCliPaths(cwd,parsed.promptTemplates),additionalThemePaths:resolveCliPaths(cwd,parsed.themes),noExtensions:parsed.noExtensions,noSkills:parsed.noSkills,noPromptTemplates:parsed.noPromptTemplates,noThemes:parsed.noThemes,noContextFiles:parsed.noContextFiles,extensionFactories}}),extensionsResult=services.resourceLoader.getExtensions();diagnostics.push(...services.diagnostics,...extensionsResult.errors.map(({path,error})=>({type:"warning",message:`Failed to load extension "${path}": ${error}`})),...(extensionsResult.warnings??[]).map(({path,warning})=>({type:"warning",message:`Extension package "${path}": ${warning}`})));let execute=()=>Promise.reject(new Error("Loopless runtime is not ready")),toolNames=()=>[],toolChildRuntime=createToolChildRuntime({toolRuntime:toolRuntime??"in-process",agentDir,scopeId:`loopless-${randomUUID3()}`,cwd:services.cwd,moduleRoots:()=>[...toolChildModuleRoots(runtime.extensionRunner.getAllRegisteredTools()),...childModuleRoots(runtime.extensionRunner.getAllChildModules())],hostCallDeps:{cwd:services.cwd,executeNested:async(_parentToolCallId,name,args,signal)=>{let toolCall={type:"toolCall",id:`nested-${randomUUID3()}`,name,arguments:{}},result=await execute(name,toolCall.id,args,signal);return{toolCall,result,isError:result.isError===!0}},callableToolNames:()=>toolNames(),target:()=>{},filesystemPolicy:()=>runtime.filesystemPolicy},onRecord:()=>{}}),{dispatcher,toolChild}=toolChildRuntime,runtime=bootstrapRuntime({cwd:services.cwd,settingsManager:services.settingsManager,extensionsResult,modelRegistry:services.modelRegistry,toolDispatcher:dispatcher}),registry=buildToolRegistry({baseToolDefinitions:runtime.baseToolDefinitions,runner:runtime.extensionRunner,dispatcher,...looplessToolFilters(parsed,services.settingsManager)});toolNames=()=>[...registry.toolRegistry.keys()];let getLoadedHookSources=services.resourceLoader.getLoadedHookSources?.bind(services.resourceLoader),loopHookCall=createLoopHookCall();runtime.extensionRunner.bindSessionlessFacts({getAllTools:()=>Array.from(registry.definitions.values(),toolInfoOf),loopHookCall:()=>loopHookCall.current(),loopHookSend:()=>loopHookCall.sender(),...getLoadedHookSources?{getLoadedHookSources}:{}});let presentation=new PresentationBroker(error=>runtime.extensionRunner.emitError({extensionPath:"<presentation-port>",event:"ui_presentation",error:`A presentation could not reach the attached client: ${error instanceof Error?error.message:String(error)}`}));runtime.extensionRunner.setUiBroker(presentation);let toolHandlers=looplessGrantRunsToolHandlers(local.executeGrant)?extensionToolHandlers(runtime.extensionRunner,local.twoSidedHome):void 0;execute=(name,toolCallId,params,signal,nested)=>{if(!isLooplessExecuteGranted(local.executeGrant))return Promise.reject(new LooplessExecuteRefusedError("no executor runs the tool_call/tool_result handlers for this runtime yet"));let tool=registry.toolRegistry.get(name);return tool===void 0?Promise.reject(new LooplessToolNotFoundError(name)):presentation.present(nested,()=>runLooplessToolCall(tool,{toolCallId,params,...signal?{signal}:{},...nested?{nested}:{}},toolHandlers))};let fileGuards=toolHandlers!==void 0&&isLooplessExecuteGranted(local.executeGrant)?{beforeToolCall:(toolName,toolCallId,input,nested)=>presentation.present(nested,()=>toolHandlers.beforeToolCall({toolName,toolCallId,input,...nested?{nested}:{}})),filesystemPolicy:()=>runtime.filesystemPolicy}:void 0;return{cwd:services.cwd,definitions:registry.definitions,diagnostics,fileGuards,execute:(name,toolCallId,params,signal,nested)=>execute(name,toolCallId,params,signal,nested),runLoopHooks:extensionLoopHooks(runtime.extensionRunner,local.twoSidedHome??"loop",services.cwd,loopHookCall),dispose:async()=>{runtime.extensionRunner.invalidate("This loopless runtime was disposed.");let failure=(await Promise.allSettled([dispatcher.dispose(),toolChild?.close()])).find(outcome=>outcome.status==="rejected");if(failure!==void 0)throw failure.reason}}}}var handRun={context:{uid:process.getuid?.()??-1,platform:process.platform,ownEnv:process.env},flock:loadFlock()};function notFound(name){return{content:[{type:"text",text:`Tool ${name} not found`}],details:{},isError:!0}}var isRecord3=value=>typeof value=="object"&&value!==null&&!Array.isArray(value);function scopeOf(payload){let scope=isRecord3(payload)?payload.scope:void 0;if(!isRecord3(scope)||typeof scope.id!="string"||typeof scope.root!="string")throw new Error("a loop-hook call names no scope");return{id:scope.id,root:scope.root}}function createLooplessHand(configuration,local={}){let factory=createLooplessRuntimeFactory(configuration,{...local,executeGrant:grantLooplessExecuteToRemoteExecutor()}),runtimes=new Map,disposed=new Set,closed=!1,disposals=new WeakMap,disposeOnce=runtime=>{let known=disposals.get(runtime);if(known!==void 0)return known;let disposing=runtime.dispose();return disposals.set(runtime,disposing),disposing},runtimeOf=(scope,reopen)=>{if(closed)return Promise.reject(new Error("this hand is closed"));if(!isAbsolute2(scope.root))return Promise.reject(new Error(`scope root must be an absolute path: ${JSON.stringify(scope.root)}`));let known=runtimes.get(scope.id);if(known!==void 0)return known.root===scope.root?known.runtime:Promise.reject(new Error(`scope_binding_mismatch: scope ${JSON.stringify(scope.id)} is bound to another root`));if(!reopen&&disposed.has(scope.id))return Promise.reject(new Error(`scope ${JSON.stringify(scope.id)} was disposed; its extensions' loop-hook state is gone`));disposed.delete(scope.id);let opened=factory({cwd:scope.root});return runtimes.set(scope.id,{root:scope.root,runtime:opened}),opened.catch(()=>runtimes.delete(scope.id)),opened};return{async openScope(scope){let runtime=await runtimeOf(scope,!0);return{run:call=>runtime.definitions.has(call.name)?runtime.execute(call.name,call.toolCallId,call.arguments,call.signal,call.nested):Promise.resolve(notFound(call.name)),isSequential:name=>runtime.definitions.get(name)?.definition.executionMode==="sequential",...runtime.fileGuards===void 0?{}:{file:createHandFileOps(scope.root,runtime.fileGuards,handRun)},dispose:()=>(runtimes.delete(scope.id),disposed.add(scope.id),disposeOnce(runtime))}},runLoopHooks:async(scope,event,payload)=>(await runtimeOf(scope,!1)).runLoopHooks(event,payload),loopHooks:async(event,payload)=>(await runtimeOf(scopeOf(payload),!1)).runLoopHooks(event,payload),async close(){closed=!0;let open2=[...runtimes.values()];runtimes.clear();let failures=(await Promise.allSettled(open2.map(({runtime})=>runtime.then(opened=>disposeOnce(opened),()=>{})))).flatMap(outcome=>outcome.status==="rejected"?[outcome.reason]:[]);if(failures.length===1)throw failures[0];if(failures.length>1)throw new AggregateError(failures,"disposing this hand's runtimes failed")}}}var isRecord4=value=>typeof value=="object"&&value!==null&&!Array.isArray(value);function encodeCarrierLine(message){if(!isRecord4(message)||typeof message.lane!="string"||typeof message.seq!="number")return;if(message.kind==="ack")return`${JSON.stringify({kind:"ack",lane:message.lane,seq:message.seq})}
5
5
  `;if(message.kind!=="data"||!(message.payload instanceof Uint8Array))return;let payload=Buffer.from(message.payload).toString("base64");return`${JSON.stringify({kind:"data",lane:message.lane,seq:message.seq,payload})}
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{InteractiveMode,OptimisticUserEchoController,formatCrashExtensionHint,formatResumeCommand,isApiKeyLoginProvider,replayStartupSubmission,shouldShowRetryIndicator,showsStartupDetails,showsStartupHeader}from"./chunk-RRFDLGX6.js";import"./chunk-64FJ4QQJ.js";import"./chunk-Q4RJ4WLE.js";import"./chunk-TPLEPLEB.js";import"./chunk-75O3CWR5.js";import"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import"./chunk-FYVQEZYN.js";import"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import"./chunk-VD7AKTGP.js";import{createInteractiveTui,createInteractiveTuiReference}from"./chunk-PWA75RQU.js";import"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import"./chunk-MTQQ2VQH.js";import"./chunk-WMHESZCU.js";import"./chunk-IJXKHJYR.js";import"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import"./chunk-IEY2SL46.js";import"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import"./chunk-7WYJAYHH.js";import"./chunk-5HMYIYQB.js";import"./chunk-OSNR3IRD.js";import"./chunk-UCXBDE6R.js";import"./chunk-YI6KRJDC.js";import"./chunk-VUY4BZDI.js";import"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import"./chunk-HGCQAMC6.js";import"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import"./chunk-7X72IACK.js";import"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-3RILB2OD.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-QVG5SUSV.js";import"./chunk-74HCKLRH.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import"./chunk-LJFQYCFH.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import"./chunk-44BJPS5I.js";import"./chunk-AOTHPTMU.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";export{InteractiveMode,OptimisticUserEchoController,createInteractiveTui,createInteractiveTuiReference,formatCrashExtensionHint,formatResumeCommand,isApiKeyLoginProvider,replayStartupSubmission,shouldShowRetryIndicator,showsStartupDetails,showsStartupHeader};
2
+ import{InteractiveMode,OptimisticUserEchoController,formatCrashExtensionHint,formatResumeCommand,isApiKeyLoginProvider,replayStartupSubmission,shouldShowRetryIndicator,showsStartupDetails,showsStartupHeader}from"./chunk-TNYFCGI7.js";import"./chunk-PPCAJQDJ.js";import"./chunk-225TDKTA.js";import"./chunk-TPLEPLEB.js";import"./chunk-75O3CWR5.js";import"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import"./chunk-FYVQEZYN.js";import"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import"./chunk-VD7AKTGP.js";import{createInteractiveTui,createInteractiveTuiReference}from"./chunk-PWA75RQU.js";import"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import"./chunk-MTQQ2VQH.js";import"./chunk-WMHESZCU.js";import"./chunk-IJXKHJYR.js";import"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import"./chunk-IEY2SL46.js";import"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import"./chunk-7WYJAYHH.js";import"./chunk-5HMYIYQB.js";import"./chunk-OSNR3IRD.js";import"./chunk-UCXBDE6R.js";import"./chunk-YI6KRJDC.js";import"./chunk-VUY4BZDI.js";import"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import"./chunk-HGCQAMC6.js";import"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import"./chunk-7X72IACK.js";import"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-OJOPOUAY.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-QVG5SUSV.js";import"./chunk-TEXE4HT6.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import"./chunk-LJFQYCFH.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import"./chunk-44BJPS5I.js";import"./chunk-5GCZFK4X.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";export{InteractiveMode,OptimisticUserEchoController,createInteractiveTui,createInteractiveTuiReference,formatCrashExtensionHint,formatResumeCommand,isApiKeyLoginProvider,replayStartupSubmission,shouldShowRetryIndicator,showsStartupDetails,showsStartupHeader};
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{applyGrokNeoThemeFallback,collectAuthDiagnostics,collectExtensionLoadDiagnostics,createCliRuntimeFactory,createSessionManager,interactiveAuthNotices,main,promptConfirm,resolveAutoTitleSessions}from"./chunk-RRFDLGX6.js";import"./chunk-64FJ4QQJ.js";import"./chunk-Q4RJ4WLE.js";import"./chunk-TPLEPLEB.js";import"./chunk-75O3CWR5.js";import"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import"./chunk-FYVQEZYN.js";import"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import"./chunk-VD7AKTGP.js";import"./chunk-PWA75RQU.js";import"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import"./chunk-MTQQ2VQH.js";import"./chunk-WMHESZCU.js";import"./chunk-IJXKHJYR.js";import"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import"./chunk-IEY2SL46.js";import"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import"./chunk-7WYJAYHH.js";import"./chunk-5HMYIYQB.js";import"./chunk-OSNR3IRD.js";import"./chunk-UCXBDE6R.js";import"./chunk-YI6KRJDC.js";import"./chunk-VUY4BZDI.js";import"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import"./chunk-HGCQAMC6.js";import"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import"./chunk-7X72IACK.js";import"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-3RILB2OD.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-QVG5SUSV.js";import"./chunk-74HCKLRH.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import"./chunk-LJFQYCFH.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import"./chunk-44BJPS5I.js";import"./chunk-AOTHPTMU.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";export{applyGrokNeoThemeFallback,collectAuthDiagnostics,collectExtensionLoadDiagnostics,createCliRuntimeFactory,createSessionManager,interactiveAuthNotices,main,promptConfirm,resolveAutoTitleSessions};
2
+ import{applyGrokNeoThemeFallback,collectAuthDiagnostics,collectExtensionLoadDiagnostics,createCliRuntimeFactory,createSessionManager,interactiveAuthNotices,main,promptConfirm,resolveAutoTitleSessions}from"./chunk-TNYFCGI7.js";import"./chunk-PPCAJQDJ.js";import"./chunk-225TDKTA.js";import"./chunk-TPLEPLEB.js";import"./chunk-75O3CWR5.js";import"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import"./chunk-FYVQEZYN.js";import"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import"./chunk-VD7AKTGP.js";import"./chunk-PWA75RQU.js";import"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import"./chunk-MTQQ2VQH.js";import"./chunk-WMHESZCU.js";import"./chunk-IJXKHJYR.js";import"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import"./chunk-IEY2SL46.js";import"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import"./chunk-7WYJAYHH.js";import"./chunk-5HMYIYQB.js";import"./chunk-OSNR3IRD.js";import"./chunk-UCXBDE6R.js";import"./chunk-YI6KRJDC.js";import"./chunk-VUY4BZDI.js";import"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import"./chunk-HGCQAMC6.js";import"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import"./chunk-7X72IACK.js";import"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-OJOPOUAY.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-QVG5SUSV.js";import"./chunk-TEXE4HT6.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import"./chunk-LJFQYCFH.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import"./chunk-44BJPS5I.js";import"./chunk-5GCZFK4X.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";export{applyGrokNeoThemeFallback,collectAuthDiagnostics,collectExtensionLoadDiagnostics,createCliRuntimeFactory,createSessionManager,interactiveAuthNotices,main,promptConfirm,resolveAutoTitleSessions};
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{getInternalHostBootstrap}from"./chunk-POTKWOUB.js";import{GeneratedFramesCursor,PRESENTER_CONTROL_INFO_COMMAND,SessionEventWriter,answerSetSessionContext,answerSubscribeSessions,answerUnsubscribeSessions,captureAdmissionReply,enqueueLegacyRecord,jsonChunks,notAttachedRefusal,presenterPipePath,recordLoopBlockedMs,refused,registryStatusSource,requestId,socketSink,startMcpPresenterControl,storageUnavailable,withAdmissionReply,withAdmissionRequest}from"./chunk-BMADOJHZ.js";import{EXTENSION_STATE_PAYLOAD,EXTENSION_STATE_PREFIX,HostMcpRegistry,MANIFEST_FILE,MOVE_BUNDLE_FORMAT,MoveBundleInvalidError,ProviderScope,RPC_ERROR_INVALID_MOVE_REQUEST,RPC_ERROR_MOVE_FAILED,RPC_ERROR_MOVE_NOT_RELEASED,RPC_ERROR_SESSION_OPEN_HERE,RpcSessionRegistry,RpcSessionRegistryError,SESSION_BUNDLE_PATH,STATE_ATTEMPT_FIELD,SessionAcceptanceLane,SessionPendingInputs,StructuredLaneUnavailableError,answerWarm,applyAttachedProfile,attachLiveSession,bindToProviderScope,canonicalLoss,code,compactTransportDisabled,createMovedPathProbe,createRpcConnectionHandler,createWebViewBroker,detail,error,frozenProfile,isMoveId,isPlainId,isSecurityNoticeState,isSessionFileName,leavesBundle,listedFiles,movedStateDir,multiSessionHostCapabilities,outgoingStateDir,parseManifest,parseMoveId,parsePlainId,pathExists,prepareOutgoingState,protocolClone,protocolDepthLimitOf,readCodemodeKernelRows,readMainThreadHeapBytes,readManifest,readRecordedRepositoryIdentity,readSessionCwd,rebindSessionFile,refreshesSessionActivity,releaseWithinGrace,routingIdOf,runSetModel,runSetPermissionPreset,runWithProviderScope,sealedOutgoingStateDir,sessionIdentity,sessionWorkerDataRegistry,sha256File,sharedPathIdentityResolver,startHostChildReaper,startOpenTimer,structuredLaneEnabled,verifyBundle,withoutOpenTiming}from"./chunk-RRFDLGX6.js";import"./chunk-64FJ4QQJ.js";import{CONNECTION_ROLE_FIXED,ClientAdmissions,CommandAuthority,CompactReadError,CompactStorageReadError,ConnectionRoles,DELEGATION_INCARNATION_STALE,EffectLedger,FRAGMENT_ENVELOPE_MAX_BYTES,FRAGMENT_MAX_BYTES,TRANSFER_STAGING_MAX_BYTES,TransferStagingError,advertisedCompactCapabilities,answerEffectFromTranscript,answeredUiRequestId,applyContextPatch,beginEffect,buildRpcSessionState,carriesExtensionOwner,clientNamedPreset,commandAuthority,drainSessionEffects,effectAnswer,installSessionEffectSink,isEffectBegin,isGrantSelectRequest,latestSessionEffect,openReplyPermissionMode,originField,outsideCommand,parseBoundedId,parsePermissionPresetName,protocolId,publishedSessionContext,recoveryAgentDir,recoveryCarrier,refusedExtensionUiResponse,remoteOriginDeclaration,roleConnection,rpcCommandShapeError,runSetThinkingLevel,sessionAutoTitleError,sessionBrowserEngineError,sessionContextError,sessionKindError,sessionPromptSurfaceError,sessionRetryFallbackError,setSessionRecoveryEpoch,takeRelayExec,withClientPreset}from"./chunk-Q4RJ4WLE.js";import"./chunk-TPLEPLEB.js";import{RPC_ERROR_ATTACHED,RPC_ERROR_HOST_DRAINING,RPC_ERROR_INVALID_LAUNCH_PROFILE,RPC_ERROR_INVALID_RELEASE_REASON,RPC_ERROR_INVALID_SESSION_CONTEXT,RPC_ERROR_INVALID_SESSION_ENV,RPC_ERROR_INVALID_SESSION_KIND,RPC_ERROR_MISSING_SESSION_ID,RPC_ERROR_OWNER_CHANGED,RPC_ERROR_RELEASE_FAILED,RPC_ERROR_RELEASE_UNSUPPORTED,RPC_ERROR_SESSION_BUSY,RPC_ERROR_SESSION_CLOSING,RPC_ERROR_SESSION_HELD,RPC_ERROR_TURN_ACTIVE,RPC_ERROR_UNKNOWN_SESSION,RPC_ERROR_UNSUPPORTED_TRANSPORT}from"./chunk-75O3CWR5.js";import{SessionHeldError,encodedSessionId,errorCode,foreignSessionHolders,liveSessionHolders,readProcessStartMs,serializeByKey,withSessionMoveLock}from"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import{liveToolMediaScope,toolMediaPersister}from"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import{REPOSITORY_IDENTITY_ENTRY_TYPE,SESSION_MOVED,SESSION_MOVED_IN,SESSION_RECLAIMED,SESSION_RELEASED,SessionManager,SessionMovedAwayError,assertValidSessionId,compareRepositoryIdentities,getDefaultSessionDir,getDefaultSessionDirPath,headerSessionId,ownershipStep,parseRepositoryIdentity,readRepositoryIdentity,sessionFileNameId,sessionOwnership}from"./chunk-FYVQEZYN.js";import{SessionLineSplitter,compactUpdatesEnabled,executionCallKey,loadEntriesFromFileAsync,parseSessionEntryLine}from"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import"./chunk-VD7AKTGP.js";import"./chunk-PWA75RQU.js";import{OPEN_AFTER_QUEUED_DEADLINE_MS}from"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import{flushRawStdout,takeOverStdout,waitForRawStdoutBackpressure,writeRawStdout}from"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import{readOwnFootprint}from"./chunk-MTQQ2VQH.js";import{BEGIN_HANDOVER_COMMAND,EXPECTED_RUNTIME_BUILD_ID_ENV,HostIdleHandover,agentDirMismatch,beginHandoverResponse,handoverRefusal,isHandoffBusy,isHostIdle,isTransientDaemonEnvName,parseBeginHandover,performIdleHandover,readDrainVerdicts,runAsHostGenerationProcess,withHostIdentity}from"./chunk-WMHESZCU.js";import{ENDPOINT_OWNER_FENCE_CAPABILITY,GENERATION_HANDOFF_CAPABILITY,HAND_SELECTION_CAPABILITY,RUNTIME_IDENTITY_HANDOVER_CAPABILITY,SESSION_RELOCATION_CAPABILITY,computeRuntimeBuildId,hostGeneration,hostInstanceId,parseClientCapabilities,pathIdentityResolverStatus,protocolIdentity}from"./chunk-IJXKHJYR.js";import"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import{isSpawnedBy}from"./chunk-IEY2SL46.js";import"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import{presenterBootstrapStream}from"./chunk-7WYJAYHH.js";import{ClientOccupancy,PublicRpcConnection,acceptInternalConnection,armHostWatchdog,closeShieldedEndpoint,consumeHostWatchdogEnv,formatSocketAddress,listen,loopLagErrorMs,prepareSocketPath,resolveSocketPath,scrubHostWatchdogEnv,unlinkOwnedEndpoint}from"./chunk-5HMYIYQB.js";import{reportStartupMilestone}from"./chunk-OSNR3IRD.js";import{CHILD_STOP_TIMEOUT_MS,SESSION_PATH_RETRY_AFTER_MS,acquireHostEnsureLock,createEndpointReservations,holderGenerationEnded,hostChildDrainRequestFile,ownGenerationDir,parseIdleExitMs,watchDrainRequest,writeHeartbeat,writeStallEvidence}from"./chunk-UCXBDE6R.js";import{HOST_DAEMON_DIR_ENV,canonicalSessionPath,createDaemonDirectories,createHostDaemonPaths,sessionDirectoryRemoved}from"./chunk-YI6KRJDC.js";import{RpcPublicEndpoint}from"./chunk-VUY4BZDI.js";import{MAX_RPC_LINE_CHARACTERS,attachJsonlLineReader,serializeJsonLine}from"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import{subscriptionLimits}from"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import{lockWithLossHandling}from"./chunk-HGCQAMC6.js";import"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import{external_exports}from"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import{FILE_STORAGE_LOCK_RETRY_MAX_DELAY_MS,FILE_STORAGE_LOCK_RETRY_MIN_DELAY_MS,isLockError}from"./chunk-7X72IACK.js";import"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-3RILB2OD.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import{killTrackedDetachedChildren}from"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-QVG5SUSV.js";import"./chunk-74HCKLRH.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import"./chunk-LJFQYCFH.js";import{privateTablePresent}from"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import{PUBLIC_SOCKET_IDENTITY_FILE,readSocketIdentityFile,socketEntryReplaced,waitForSocketIdentityFile}from"./chunk-5XHOHZIR.js";import{SOCKET_SECRET_FILE_ENV,authenticateSocket,ensureSocketSecret,socketSecretPath}from"./chunk-HW6AAS3R.js";import{VERSION,envValue,isBunBinary,normalizePath,resolvePath}from"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import{BOOT_INSTANT_TOLERANCE_MS,ownProcessStartedAtMs,processBootAtMs,sameBoot}from"./chunk-44BJPS5I.js";import"./chunk-AOTHPTMU.js";import{processStartTimeMs}from"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";import{createServer}from"node:net";import{rm as rm9}from"node:fs/promises";import{basename as basename2,dirname as dirname5,join as join12}from"node:path";function warmAtBootForPrivateFds(warm,profile,log){warm===void 0||!privateTablePresent()||warm(profile).catch(cause=>{log(`boot extension load failed: ${cause instanceof Error?cause.message:String(cause)}`)})}function relayExecRefusal(record){let object=typeof record=="object"&&record!==null?record:{},type=Reflect.get(object,"type");return refused(requestId(object),typeof type=="string"?type:"parse","delegation_malformed","relayExec must be a positive safe integer")}async function answerDelegation(writer,verdict,record){switch(verdict.kind){case"consumed":return;case"reply":await writer.enqueueControl(verdict.response);return;case"private":writer.writeMcpFormReply(verdict.id,{error:verdict.error});return;case"presenter":writer.handleMcpForm(record)||writer.writeMcpFormReply(verdict.id,{error:"presenter_not_authorized"});return;case"control_info":{let controlEndpoint=writer.mcpPresenterControlEndpoint;await writer.enqueueControl({...verdict.id===void 0?{}:{id:verdict.id},type:"response",command:PRESENTER_CONTROL_INFO_COMMAND,success:!0,data:controlEndpoint===void 0?{}:{controlEndpoint}});return}}}var HostCoreGate=class{constructor(registry,route,hooks){this.inFlight=new Map,this.answering=new Set,this.route=route,this.runtimeBuildId=hooks.runtimeBuildId,this.endpoint=hooks.endpoint,this.handover=hooks.handover===void 0?void 0:new HostIdleHandover({...hooks.handover,isIdle:()=>isHostIdle(registry,this.inFlight)})}async intercept(parsed2,deliver){if(!isRecord(parsed2)||parsed2.type!==BEGIN_HANDOVER_COMMAND)return!1;let answering=this.answerBegin(parsed2).then(deliver);this.answering.add(answering);try{await answering}finally{this.answering.delete(answering)}return!0}async answerBegin(parsed2){if(this.handover===void 0)return beginHandoverResponse(parsed2.id,{kind:"refused",reason:"handover_unsupported"});let request=parseBeginHandover(parsed2);if(typeof request=="string")return beginHandoverResponse(parsed2.id,request);let detail2=request.agentDir===void 0||this.endpoint===void 0?void 0:await agentDirMismatch(this.endpoint.socket,request.agentDir,this.endpoint.agentDir);return beginHandoverResponse(parsed2.id,detail2===void 0?await this.handover.begin(request):{kind:"refused",reason:"foreign_agent_dir",detail:detail2})}async answered(){for(;this.answering.size>0;)await Promise.allSettled([...this.answering])}async dispatch(command){let pending=this.handover?.view();if(pending!==void 0&&this.handover?.admits(command.type)===!1)return handoverRefusal(command,pending);let key="sessionId"in command?command.sessionId:void 0;this.inFlight.set(key,(this.inFlight.get(key)??0)+1);let response;try{response=await this.route(command)}finally{let remaining=(this.inFlight.get(key)??1)-1;remaining>0?this.inFlight.set(key,remaining):this.inFlight.delete(key),this.handover?.observe()}return response===void 0?void 0:withHostIdentity(response,this.runtimeBuildId,this.handover?.view())}};function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}var REGISTRATION_LOCK_WAIT_MS=1e4;async function bindRegisteredEndpoint(registration,bind){if(registration.socket.startsWith("\0"))return bind();let release=await acquireHostEnsureLock(registration.socket,REGISTRATION_LOCK_WAIT_MS).catch(cause=>{registration.log(`endpoint ensure lock unavailable, registering without it: ${messageOf(cause)}`)});try{return await createDaemonDirectories(createHostDaemonPaths({socket:registration.socket,agentDir:registration.agentDir})).catch(cause=>registration.log(`endpoint registry record not written: ${messageOf(cause)}`)),await bind()}finally{await release?.()}}function messageOf(cause){return cause instanceof Error?cause.message:String(cause)}var HandoffAnnouncement=class{begin(superseded,identity,publicSocket,log){return this.record=superseded.then(replaced=>({type:"host_superseded",...identity,successor:replaced?{socket:publicSocket}:null}),cause=>{log(`handoff announcement failed: ${String(cause)}`)}),this.record}deliverLate(stream,arrivedBeforeDrain){let record=this.record;return!arrivedBeforeDrain||record===void 0?!1:(record.then(announced=>announced===void 0?stream.destroy():stream.end(`${JSON.stringify(announced)}
2
+ import{getInternalHostBootstrap}from"./chunk-POTKWOUB.js";import{GeneratedFramesCursor,PRESENTER_CONTROL_INFO_COMMAND,SessionEventWriter,answerSetSessionContext,answerSubscribeSessions,answerUnsubscribeSessions,captureAdmissionReply,enqueueLegacyRecord,jsonChunks,notAttachedRefusal,presenterPipePath,recordLoopBlockedMs,refused,registryStatusSource,requestId,socketSink,startMcpPresenterControl,storageUnavailable,withAdmissionReply,withAdmissionRequest}from"./chunk-5QIFH624.js";import{EXTENSION_STATE_PAYLOAD,EXTENSION_STATE_PREFIX,HostMcpRegistry,MANIFEST_FILE,MOVE_BUNDLE_FORMAT,MoveBundleInvalidError,ProviderScope,RPC_ERROR_INVALID_MOVE_REQUEST,RPC_ERROR_MOVE_FAILED,RPC_ERROR_MOVE_NOT_RELEASED,RPC_ERROR_SESSION_OPEN_HERE,RpcSessionRegistry,RpcSessionRegistryError,SESSION_BUNDLE_PATH,STATE_ATTEMPT_FIELD,SessionAcceptanceLane,SessionPendingInputs,StructuredLaneUnavailableError,answerWarm,applyAttachedProfile,attachLiveSession,bindToProviderScope,canonicalLoss,code,compactTransportDisabled,createMovedPathProbe,createRpcConnectionHandler,createWebViewBroker,detail,error,frozenProfile,isMoveId,isPlainId,isSecurityNoticeState,isSessionFileName,leavesBundle,listedFiles,movedStateDir,multiSessionHostCapabilities,outgoingStateDir,parseManifest,parseMoveId,parsePlainId,pathExists,prepareOutgoingState,protocolClone,protocolDepthLimitOf,readCodemodeKernelRows,readMainThreadHeapBytes,readManifest,readRecordedRepositoryIdentity,readSessionCwd,rebindSessionFile,refreshesSessionActivity,releaseWithinGrace,routingIdOf,runSetModel,runSetPermissionPreset,runWithProviderScope,sealedOutgoingStateDir,sessionIdentity,sessionWorkerDataRegistry,sha256File,sharedPathIdentityResolver,startHostChildReaper,startOpenTimer,structuredLaneEnabled,verifyBundle,withoutOpenTiming}from"./chunk-TNYFCGI7.js";import"./chunk-PPCAJQDJ.js";import{CONNECTION_ROLE_FIXED,ClientAdmissions,CommandAuthority,CompactReadError,CompactStorageReadError,ConnectionRoles,DELEGATION_INCARNATION_STALE,EffectLedger,FRAGMENT_ENVELOPE_MAX_BYTES,FRAGMENT_MAX_BYTES,TRANSFER_STAGING_MAX_BYTES,TransferStagingError,advertisedCompactCapabilities,answerEffectFromTranscript,answeredUiRequestId,applyContextPatch,beginEffect,buildRpcSessionState,carriesExtensionOwner,clientNamedPreset,commandAuthority,drainSessionEffects,effectAnswer,installSessionEffectSink,isEffectBegin,isGrantSelectRequest,latestSessionEffect,openReplyPermissionMode,originField,outsideCommand,parseBoundedId,parsePermissionPresetName,protocolId,publishedSessionContext,recoveryAgentDir,recoveryCarrier,refusedExtensionUiResponse,remoteOriginDeclaration,roleConnection,rpcCommandShapeError,runSetThinkingLevel,sessionAutoTitleError,sessionBrowserEngineError,sessionContextError,sessionKindError,sessionPromptSurfaceError,sessionRetryFallbackError,setSessionRecoveryEpoch,takeRelayExec,withClientPreset}from"./chunk-225TDKTA.js";import"./chunk-TPLEPLEB.js";import{RPC_ERROR_ATTACHED,RPC_ERROR_HOST_DRAINING,RPC_ERROR_INVALID_LAUNCH_PROFILE,RPC_ERROR_INVALID_RELEASE_REASON,RPC_ERROR_INVALID_SESSION_CONTEXT,RPC_ERROR_INVALID_SESSION_ENV,RPC_ERROR_INVALID_SESSION_KIND,RPC_ERROR_MISSING_SESSION_ID,RPC_ERROR_OWNER_CHANGED,RPC_ERROR_RELEASE_FAILED,RPC_ERROR_RELEASE_UNSUPPORTED,RPC_ERROR_SESSION_BUSY,RPC_ERROR_SESSION_CLOSING,RPC_ERROR_SESSION_HELD,RPC_ERROR_TURN_ACTIVE,RPC_ERROR_UNKNOWN_SESSION,RPC_ERROR_UNSUPPORTED_TRANSPORT}from"./chunk-75O3CWR5.js";import{SessionHeldError,encodedSessionId,errorCode,foreignSessionHolders,liveSessionHolders,readProcessStartMs,serializeByKey,withSessionMoveLock}from"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import{liveToolMediaScope,toolMediaPersister}from"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import{REPOSITORY_IDENTITY_ENTRY_TYPE,SESSION_MOVED,SESSION_MOVED_IN,SESSION_RECLAIMED,SESSION_RELEASED,SessionManager,SessionMovedAwayError,assertValidSessionId,compareRepositoryIdentities,getDefaultSessionDir,getDefaultSessionDirPath,headerSessionId,ownershipStep,parseRepositoryIdentity,readRepositoryIdentity,sessionFileNameId,sessionOwnership}from"./chunk-FYVQEZYN.js";import{SessionLineSplitter,compactUpdatesEnabled,executionCallKey,loadEntriesFromFileAsync,parseSessionEntryLine}from"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import"./chunk-VD7AKTGP.js";import"./chunk-PWA75RQU.js";import{OPEN_AFTER_QUEUED_DEADLINE_MS}from"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import{flushRawStdout,takeOverStdout,waitForRawStdoutBackpressure,writeRawStdout}from"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import{readOwnFootprint}from"./chunk-MTQQ2VQH.js";import{BEGIN_HANDOVER_COMMAND,EXPECTED_RUNTIME_BUILD_ID_ENV,HostIdleHandover,agentDirMismatch,beginHandoverResponse,handoverRefusal,isHandoffBusy,isHostIdle,isTransientDaemonEnvName,parseBeginHandover,performIdleHandover,readDrainVerdicts,runAsHostGenerationProcess,withHostIdentity}from"./chunk-WMHESZCU.js";import{ENDPOINT_OWNER_FENCE_CAPABILITY,GENERATION_HANDOFF_CAPABILITY,HAND_SELECTION_CAPABILITY,RUNTIME_IDENTITY_HANDOVER_CAPABILITY,SESSION_RELOCATION_CAPABILITY,computeRuntimeBuildId,hostGeneration,hostInstanceId,parseClientCapabilities,pathIdentityResolverStatus,protocolIdentity}from"./chunk-IJXKHJYR.js";import"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import{isSpawnedBy}from"./chunk-IEY2SL46.js";import"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import{presenterBootstrapStream}from"./chunk-7WYJAYHH.js";import{ClientOccupancy,PublicRpcConnection,acceptInternalConnection,armHostWatchdog,closeShieldedEndpoint,consumeHostWatchdogEnv,formatSocketAddress,listen,loopLagErrorMs,prepareSocketPath,resolveSocketPath,scrubHostWatchdogEnv,unlinkOwnedEndpoint}from"./chunk-5HMYIYQB.js";import{reportStartupMilestone}from"./chunk-OSNR3IRD.js";import{CHILD_STOP_TIMEOUT_MS,SESSION_PATH_RETRY_AFTER_MS,acquireHostEnsureLock,createEndpointReservations,holderGenerationEnded,hostChildDrainRequestFile,ownGenerationDir,parseIdleExitMs,watchDrainRequest,writeHeartbeat,writeStallEvidence}from"./chunk-UCXBDE6R.js";import{HOST_DAEMON_DIR_ENV,canonicalSessionPath,createDaemonDirectories,createHostDaemonPaths,sessionDirectoryRemoved}from"./chunk-YI6KRJDC.js";import{RpcPublicEndpoint}from"./chunk-VUY4BZDI.js";import{MAX_RPC_LINE_CHARACTERS,attachJsonlLineReader,serializeJsonLine}from"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import{subscriptionLimits}from"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import{lockWithLossHandling}from"./chunk-HGCQAMC6.js";import"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import{external_exports}from"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import{FILE_STORAGE_LOCK_RETRY_MAX_DELAY_MS,FILE_STORAGE_LOCK_RETRY_MIN_DELAY_MS,isLockError}from"./chunk-7X72IACK.js";import"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-OJOPOUAY.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import{killTrackedDetachedChildren}from"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-QVG5SUSV.js";import"./chunk-TEXE4HT6.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import"./chunk-LJFQYCFH.js";import{privateTablePresent}from"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import{PUBLIC_SOCKET_IDENTITY_FILE,readSocketIdentityFile,socketEntryReplaced,waitForSocketIdentityFile}from"./chunk-5XHOHZIR.js";import{SOCKET_SECRET_FILE_ENV,authenticateSocket,ensureSocketSecret,socketSecretPath}from"./chunk-HW6AAS3R.js";import{VERSION,envValue,isBunBinary,normalizePath,resolvePath}from"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import{BOOT_INSTANT_TOLERANCE_MS,ownProcessStartedAtMs,processBootAtMs,sameBoot}from"./chunk-44BJPS5I.js";import"./chunk-5GCZFK4X.js";import{processStartTimeMs}from"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";import{createServer}from"node:net";import{rm as rm9}from"node:fs/promises";import{basename as basename2,dirname as dirname5,join as join12}from"node:path";function warmAtBootForPrivateFds(warm,profile,log){warm===void 0||!privateTablePresent()||warm(profile).catch(cause=>{log(`boot extension load failed: ${cause instanceof Error?cause.message:String(cause)}`)})}function relayExecRefusal(record){let object=typeof record=="object"&&record!==null?record:{},type=Reflect.get(object,"type");return refused(requestId(object),typeof type=="string"?type:"parse","delegation_malformed","relayExec must be a positive safe integer")}async function answerDelegation(writer,verdict,record){switch(verdict.kind){case"consumed":return;case"reply":await writer.enqueueControl(verdict.response);return;case"private":writer.writeMcpFormReply(verdict.id,{error:verdict.error});return;case"presenter":writer.handleMcpForm(record)||writer.writeMcpFormReply(verdict.id,{error:"presenter_not_authorized"});return;case"control_info":{let controlEndpoint=writer.mcpPresenterControlEndpoint;await writer.enqueueControl({...verdict.id===void 0?{}:{id:verdict.id},type:"response",command:PRESENTER_CONTROL_INFO_COMMAND,success:!0,data:controlEndpoint===void 0?{}:{controlEndpoint}});return}}}var HostCoreGate=class{constructor(registry,route,hooks){this.inFlight=new Map,this.answering=new Set,this.route=route,this.runtimeBuildId=hooks.runtimeBuildId,this.endpoint=hooks.endpoint,this.handover=hooks.handover===void 0?void 0:new HostIdleHandover({...hooks.handover,isIdle:()=>isHostIdle(registry,this.inFlight)})}async intercept(parsed2,deliver){if(!isRecord(parsed2)||parsed2.type!==BEGIN_HANDOVER_COMMAND)return!1;let answering=this.answerBegin(parsed2).then(deliver);this.answering.add(answering);try{await answering}finally{this.answering.delete(answering)}return!0}async answerBegin(parsed2){if(this.handover===void 0)return beginHandoverResponse(parsed2.id,{kind:"refused",reason:"handover_unsupported"});let request=parseBeginHandover(parsed2);if(typeof request=="string")return beginHandoverResponse(parsed2.id,request);let detail2=request.agentDir===void 0||this.endpoint===void 0?void 0:await agentDirMismatch(this.endpoint.socket,request.agentDir,this.endpoint.agentDir);return beginHandoverResponse(parsed2.id,detail2===void 0?await this.handover.begin(request):{kind:"refused",reason:"foreign_agent_dir",detail:detail2})}async answered(){for(;this.answering.size>0;)await Promise.allSettled([...this.answering])}async dispatch(command){let pending=this.handover?.view();if(pending!==void 0&&this.handover?.admits(command.type)===!1)return handoverRefusal(command,pending);let key="sessionId"in command?command.sessionId:void 0;this.inFlight.set(key,(this.inFlight.get(key)??0)+1);let response;try{response=await this.route(command)}finally{let remaining=(this.inFlight.get(key)??1)-1;remaining>0?this.inFlight.set(key,remaining):this.inFlight.delete(key),this.handover?.observe()}return response===void 0?void 0:withHostIdentity(response,this.runtimeBuildId,this.handover?.view())}};function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}var REGISTRATION_LOCK_WAIT_MS=1e4;async function bindRegisteredEndpoint(registration,bind){if(registration.socket.startsWith("\0"))return bind();let release=await acquireHostEnsureLock(registration.socket,REGISTRATION_LOCK_WAIT_MS).catch(cause=>{registration.log(`endpoint ensure lock unavailable, registering without it: ${messageOf(cause)}`)});try{return await createDaemonDirectories(createHostDaemonPaths({socket:registration.socket,agentDir:registration.agentDir})).catch(cause=>registration.log(`endpoint registry record not written: ${messageOf(cause)}`)),await bind()}finally{await release?.()}}function messageOf(cause){return cause instanceof Error?cause.message:String(cause)}var HandoffAnnouncement=class{begin(superseded,identity,publicSocket,log){return this.record=superseded.then(replaced=>({type:"host_superseded",...identity,successor:replaced?{socket:publicSocket}:null}),cause=>{log(`handoff announcement failed: ${String(cause)}`)}),this.record}deliverLate(stream,arrivedBeforeDrain){let record=this.record;return!arrivedBeforeDrain||record===void 0?!1:(record.then(announced=>announced===void 0?stream.destroy():stream.end(`${JSON.stringify(announced)}
3
3
  `)),!0)}};import{existsSync as existsSync2}from"node:fs";import{createHash}from"node:crypto";import{existsSync,renameSync}from"node:fs";import{mkdir,readdir,readFile,rm,writeFile}from"node:fs/promises";import{join}from"node:path";var CALLER_ENV_NAMES_ENV="SENPI_RPC_CALLER_ENV_NAMES",DEFAULT_CALLER_ENV_NAMES=Object.freeze(["OMOCAT_LANE"]),MAX_SESSION_ENV_ENTRIES=16,MAX_SESSION_ENV_VALUE_LENGTH=4096,ENV_NAME=/^[A-Z_][A-Z0-9_]*$/u,MAX_ECHOED_NAME_LENGTH=64;function callerEnvPassableNames(hostEnv=process.env){let names=new Set(DEFAULT_CALLER_ENV_NAMES);for(let raw of(hostEnv[CALLER_ENV_NAMES_ENV]??"").split(",")){let name=raw.trim();ENV_NAME.test(name)&&!isTransientDaemonEnvName(name)&&names.add(name)}return names}function sessionEnvShapeError(value){if(value===void 0)return;if(!isPlainRecord(value))return"env must be an object of strings.";let entries=Object.entries(value);if(entries.length>MAX_SESSION_ENV_ENTRIES)return`env allows at most ${MAX_SESSION_ENV_ENTRIES} entries.`;for(let[name,entry]of entries){if(!ENV_NAME.test(name))return`env name "${echoedName(name)}" must match ${ENV_NAME.source}.`;if(typeof entry!="string")return`env.${echoedName(name)} must be a string.`;if(entry.includes("\0"))return`env.${echoedName(name)} must not contain NUL.`;if(entry.length>MAX_SESSION_ENV_VALUE_LENGTH)return`env.${echoedName(name)} must be at most ${MAX_SESSION_ENV_VALUE_LENGTH} characters.`}}function sessionEnvError(value,hostEnv=process.env){let shape=sessionEnvShapeError(value);if(shape!==void 0||!isPlainRecord(value))return shape;let passable=callerEnvPassableNames(hostEnv);for(let name of Object.keys(value))if(!passable.has(name))return`env.${echoedName(name)} is not a caller-passable name (passable: ${[...passable].sort().join(", ")}).`}function inheritedSessionEnv(parent,requested){let merged={...parent,...requested};return Object.keys(merged).length===0?void 0:merged}function echoedName(name){return name.length>MAX_ECHOED_NAME_LENGTH?`${name.slice(0,MAX_ECHOED_NAME_LENGTH)}...`:name}function isPlainRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}import{hostname}from"node:os";var realWriterProbes={pidAlive:pid=>{try{return process.kill(pid,0),!0}catch(error2){return errorCode(error2)==="EPERM"}},readProcessStartMs,bootAtMs:()=>processBootAtMs(),host:()=>hostname(),self:()=>({pid:process.pid,processStartedAtMs:ownProcessStartedAtMs()})};function currentResidentWriter(probes=realWriterProbes){let self=probes.self();return{host:probes.host(),pid:self.pid,bootAtMs:probes.bootAtMs(),processStartedAtMs:self.processStartedAtMs}}function isResidentWriter(value){if(typeof value!="object"||value===null||Array.isArray(value))return!1;let record=value;return typeof record.host=="string"&&Number.isInteger(record.pid)&&typeof record.bootAtMs=="number"&&typeof record.processStartedAtMs=="number"}function residentWriterProbe(probes=realWriterProbes){let gone=new Set,verified=new Set;return async writer=>{let key=`${writer.host}:${writer.pid}:${writer.processStartedAtMs}`;if(gone.has(key))return!1;if(writer.host!==probes.host())return!0;if(!sameBoot(probes.bootAtMs(),writer.bootAtMs)||!probes.pidAlive(writer.pid))return gone.add(key),!1;if(verified.has(key))return!0;let startedAtMs=await probes.readProcessStartMs(writer.pid);return startedAtMs!==void 0&&Math.abs(startedAtMs-writer.processStartedAtMs)>BOOT_INSTANT_TOLERANCE_MS?(gone.add(key),!1):(verified.add(key),!0)}}var recordDir=daemonDir=>join(daemonDir,"handover-parked"),entryFile=(daemonDir,sessionPath)=>join(recordDir(daemonDir),`${createHash("sha256").update(sessionPath,"utf8").digest("hex").slice(0,16)}.json`),mutationChain=Promise.resolve();function enqueueMutation(mutation){let next=mutationChain.then(mutation,mutation);return mutationChain=next.catch(()=>{}),next}function isEntry(value){if(typeof value!="object"||value===null||Array.isArray(value))return!1;let record=value;return typeof record.sessionPath=="string"&&typeof record.retainOnDisconnect=="boolean"&&(record.durableSessionId===void 0||typeof record.durableSessionId=="string")&&(record.cwd===void 0||typeof record.cwd=="string")&&(record.parkedBy===void 0||typeof record.parkedBy=="string")&&(record.residentWriter===void 0||isResidentWriter(record.residentWriter))&&(record.thinkingLevel===void 0||typeof record.thinkingLevel=="string")&&(record.permissionPreset===void 0||typeof record.permissionPreset=="string"&&parsePermissionPresetName(record.permissionPreset)!==void 0)&&sessionPromptSurfaceError(record.promptSurface)===void 0&&sessionBrowserEngineError(record.browserEngine)===void 0&&sessionKindError(record.sessionKind)===void 0&&sessionContextError(record.sessionContext)===void 0&&(record.contextOverlay===void 0||!("refusal"in applyContextPatch(void 0,record.contextOverlay)))&&sessionAutoTitleError(record.autoTitle)===void 0&&sessionRetryFallbackError(record.retryFallback)===void 0&&sessionEnvShapeError(record.sessionEnv)===void 0&&(record.model===void 0||typeof record.model=="object"&&record.model!==null&&typeof record.model.provider=="string"&&typeof record.model.modelId=="string")}async function writeEntryFile(daemonDir,entry){await mkdir(recordDir(daemonDir),{recursive:!0,mode:448});let file=entryFile(daemonDir,entry.sessionPath),tmp=`${file}.${process.pid}.${Math.random().toString(16).slice(2,10)}.tmp`;await writeFile(tmp,`${JSON.stringify(entry,null,2)}
4
4
  `,{mode:384}),renameSync(tmp,file)}function recordHandoverParkedSession(daemonDir,entry){return enqueueMutation(()=>writeEntryFile(daemonDir,entry))}async function readHandoverParkedSessions(daemonDir){let names;try{names=(await readdir(recordDir(daemonDir))).filter(name=>name.endsWith(".json"))}catch{return[]}let entries=[];for(let name of names){let file=join(recordDir(daemonDir),name);try{let parsed2=JSON.parse(await readFile(file,"utf8"));isEntry(parsed2)&&entries.push(parsed2)}catch(cause){cause instanceof SyntaxError&&(process.stderr.write(`senpi rpc handover-parked entry ${name} is corrupt; dropping it
5
5
  `),await rm(file,{force:!0}))}}return entries}function clearHandoverParkedSession(daemonDir,sessionPath){return enqueueMutation(()=>rm(entryFile(daemonDir,sessionPath),{force:!0}))}function clearInheritedParkedSession(daemonDir,sessionPath,holder){return enqueueMutation(async()=>{let file=entryFile(daemonDir,sessionPath);if(holder!==void 0){let recorded=await readFile(file,"utf8").then(text2=>JSON.parse(text2),()=>{});if(isEntry(recorded)&&recorded.parkedBy===holder)return}await rm(file,{force:!0})})}function dropHandoverParkedSessionIfFileGone(daemonDir,sessionPath){return existsSync(sessionPath)?Promise.resolve():clearHandoverParkedSession(daemonDir,sessionPath)}var HANDOVER_PARKED_REOPEN_BUDGET_MS=12e4,HANDOVER_PARKED_REOPEN_POLL_MS=250,HANDOVER_PARKED_REOPEN_MAX_ATTEMPTS=8,HANDOVER_PARKED_REOPEN_QUIET_STREAK=8;async function reopenHandoverParkedSessions(open4,agentDir,socket,holder){let daemonDir=createHostDaemonPaths({socket,agentDir}).dir,deadline=Date.now()+HANDOVER_PARKED_REOPEN_BUDGET_MS,reopenAttempts=new Map,heldPolls=new Map,writerAlive=residentWriterProbe(),emptyStreak=0,sawAnyPark=!1;for(;;){if(holder?.shouldReopen!==void 0&&!holder.shouldReopen())return;let parked=await inheritedParks(daemonDir,holder,writerAlive);for(let entry of parked)sawAnyPark=!0,await reopenOne(daemonDir,open4,entry,reopenAttempts,heldPolls,holder);let remaining=(await inheritedParks(daemonDir,holder,writerAlive)).length;if(holder?.shouldReopen!==void 0&&!holder.shouldReopen()||(emptyStreak=remaining===0?emptyStreak+1:0,sawAnyPark&&emptyStreak>=HANDOVER_PARKED_REOPEN_QUIET_STREAK)||Date.now()>=deadline)return;await new Promise(resolve2=>setTimeout(resolve2,HANDOVER_PARKED_REOPEN_POLL_MS))}}async function inheritedParks(daemonDir,holder,writerAlive){let parked=await readHandoverParkedSessions(daemonDir),inherited=[];for(let entry of parked)entry.parkedBy!==void 0&&entry.parkedBy===holder?.hostInstance||entry.residentWriter!==void 0&&await writerAlive(entry.residentWriter)||inherited.push(entry);return inherited}async function reopenOne(daemonDir,open4,entry,attempts,heldPolls,holder){let taskStatus=entry.contextOverlay&&Object.hasOwn(entry.contextOverlay,"task_status")?entry.contextOverlay.task_status:entry.sessionContext?.task_status;if(typeof taskStatus=="string"&&["completed","cancelled","error","failed","lost","interrupted"].includes(taskStatus)){await clearHandoverParkedSession(daemonDir,entry.sessionPath),process.stderr.write(`senpi rpc successor dropped a terminal parked session (${taskStatus}): ${entry.sessionPath}
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{DefaultResourceLoader,LEGACY_PI_CONFIG_FILES,ModelRuntime,cleanupWindowsSelfUpdateQuarantine,createProjectTrustContext,importLegacyPiConfig,isBuiltinExtension,quarantineWindowsNativeDependencies,resolveProjectTrusted}from"./chunk-RRFDLGX6.js";import"./chunk-64FJ4QQJ.js";import"./chunk-Q4RJ4WLE.js";import"./chunk-TPLEPLEB.js";import"./chunk-75O3CWR5.js";import"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import{DefaultPackageManager,SettingsManager}from"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import"./chunk-FYVQEZYN.js";import"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import{ProjectTrustStore,hasTrustRequiringProjectResources}from"./chunk-VD7AKTGP.js";import"./chunk-PWA75RQU.js";import"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import{DynamicBorder,initTheme,keyHint,rawKeyHint,stopThemeWatcher,theme}from"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import"./chunk-MTQQ2VQH.js";import"./chunk-WMHESZCU.js";import"./chunk-IJXKHJYR.js";import{BUILTIN_PATH_PREFIX}from"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import"./chunk-IEY2SL46.js";import{source_default}from"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import"./chunk-7WYJAYHH.js";import"./chunk-5HMYIYQB.js";import"./chunk-OSNR3IRD.js";import"./chunk-UCXBDE6R.js";import"./chunk-YI6KRJDC.js";import"./chunk-VUY4BZDI.js";import"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import{lockWithLossHandling}from"./chunk-HGCQAMC6.js";import{require_proper_lockfile}from"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import"./chunk-7X72IACK.js";import{appendHiddenTuiStdout}from"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-3RILB2OD.js";import{Container,Input,Markdown,ProcessTerminal,Spacer,TUI,getKeybindings,matchesKey,truncateToWidth,visibleWidth}from"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import{killProcessTree}from"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import{formatVersionCheckError,getLatestPiRelease,getPiUserAgent,isNewerPackageVersion}from"./chunk-QVG5SUSV.js";import"./chunk-74HCKLRH.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import{runtimeExecArgv}from"./chunk-LJFQYCFH.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import{APP_COMMAND,APP_NAME,CONFIG_DIR_NAME,DISPLAY_VERSION,PACKAGE_NAME,VERSION,brandProfile,canonicalizePath,detectInstallMethod,getAgentDir,getCwdRelativePath,getInstallPackageDir,getSelfUpdateCommand,getSelfUpdateUnavailableInstruction,isLocalPath,resolvePath,spawnProcess,spawnProcessSync,waitForChildProcess}from"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import"./chunk-44BJPS5I.js";import"./chunk-AOTHPTMU.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import{__toESM}from"./chunk-IKOFCODM.js";import{existsSync as existsSync3,mkdirSync as mkdirSync3,mkdtempSync,readdirSync as readdirSync2,readFileSync as readFileSync2,renameSync as renameSync2,rmSync as rmSync2,writeFileSync as writeFileSync2}from"node:fs";import{join as join5,resolve as resolve3}from"node:path";var import_proper_lockfile=__toESM(require_proper_lockfile(),1);import{randomUUID}from"node:crypto";import{cpSync,existsSync as existsSync2,mkdirSync as mkdirSync2,readFileSync,renameSync,rmSync,writeFileSync}from"node:fs";import{homedir}from"node:os";import{dirname as dirname2,join as join3,relative as relative2,resolve as resolve2}from"node:path";import{existsSync,readdirSync}from"node:fs";import{join,relative,sep}from"node:path";var REQUIRED_BUILD_ARTIFACTS=["extensions/omo.js","runtime/lsp-daemon/dist/cli.js","runtime/lsp-daemon/dist/index.js","runtime/lsp-daemon/dist/.omo-runtime-manifest.json","scripts/install.mjs"];function walkFiles(rootDir){let files=[],pending=[rootDir];for(;pending.length>0;){let dir=pending.pop();if(dir===void 0)continue;let entries;try{entries=readdirSync(dir,{withFileTypes:!0})}catch(error){if(error instanceof Error)continue;throw error}for(let entry of entries){let full=join(dir,entry.name);entry.isDirectory()?pending.push(full):entry.isFile()&&files.push(full)}}return files}function collectArtifactInventory(pluginPath){let inventory=[],collectUnder=(relativeDir,filter)=>{for(let filePath of walkFiles(join(pluginPath,relativeDir))){let posixPath=relative(pluginPath,filePath).split(sep).join("/");(filter===void 0||filter(posixPath))&&inventory.push(posixPath)}};return collectUnder("extensions"),collectUnder(join("runtime","lsp-daemon","dist")),collectUnder("skills",posixPath=>posixPath.endsWith("/SKILL.md")),existsSync(join(pluginPath,"scripts","install.mjs"))&&inventory.push("scripts/install.mjs"),inventory.sort(),inventory}function currentRequiredBuildArtifactsExist(pluginPath){return findMissingBuildArtifacts(pluginPath).length===0}function findMissingBuildArtifacts(pluginPath){let missing=[];for(let required of REQUIRED_BUILD_ARTIFACTS)existsSync(join(pluginPath,required))||missing.push(required);let skillCount=0;try{for(let entry of readdirSync(join(pluginPath,"skills"),{withFileTypes:!0}))entry.isDirectory()&&existsSync(join(pluginPath,"skills",entry.name,"SKILL.md"))&&skillCount++}catch(error){if(!(error instanceof Error))throw error}return skillCount===0&&missing.push("skills/*/SKILL.md"),missing}import{createHash}from"node:crypto";var EXCLUDED_ROOT_PATHS=new Set([".agents",".claude",".codex",".cursor",".devcontainer",".env.example",".gitattributes",".github",".idea",".mcp.json",".omo",".opencode",".vscode","AGENTS.md","CHANGELOG.md","CLA.md","CLAUDE.md","CONTRIBUTING.md","LICENSE","LICENSE.md","ROADMAP.md","THIRD-PARTY-NOTICES.md","assets","docs"]);function isBuildInputRootPath(name){return!EXCLUDED_ROOT_PATHS.has(name)&&!name.startsWith("README")}function computeBuildInputsHashFromLsTree(lsTreeOutput){let hash=createHash("sha256");for(let entry of lsTreeOutput.split("\0")){let tabIndex=entry.indexOf(" ");if(tabIndex===-1)continue;let name=entry.slice(tabIndex+1);if(!isBuildInputRootPath(name))continue;let objectHash=entry.slice(0,tabIndex).split(" ")[2]??"";hash.update(`${objectHash} ${name}
2
+ import{DefaultResourceLoader,LEGACY_PI_CONFIG_FILES,ModelRuntime,cleanupWindowsSelfUpdateQuarantine,createProjectTrustContext,importLegacyPiConfig,isBuiltinExtension,quarantineWindowsNativeDependencies,resolveProjectTrusted}from"./chunk-TNYFCGI7.js";import"./chunk-PPCAJQDJ.js";import"./chunk-225TDKTA.js";import"./chunk-TPLEPLEB.js";import"./chunk-75O3CWR5.js";import"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import{DefaultPackageManager,SettingsManager}from"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import"./chunk-FYVQEZYN.js";import"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import{ProjectTrustStore,hasTrustRequiringProjectResources}from"./chunk-VD7AKTGP.js";import"./chunk-PWA75RQU.js";import"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import{DynamicBorder,initTheme,keyHint,rawKeyHint,stopThemeWatcher,theme}from"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import"./chunk-MTQQ2VQH.js";import"./chunk-WMHESZCU.js";import"./chunk-IJXKHJYR.js";import{BUILTIN_PATH_PREFIX}from"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import"./chunk-IEY2SL46.js";import{source_default}from"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import"./chunk-7WYJAYHH.js";import"./chunk-5HMYIYQB.js";import"./chunk-OSNR3IRD.js";import"./chunk-UCXBDE6R.js";import"./chunk-YI6KRJDC.js";import"./chunk-VUY4BZDI.js";import"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import{lockWithLossHandling}from"./chunk-HGCQAMC6.js";import{require_proper_lockfile}from"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import"./chunk-7X72IACK.js";import{appendHiddenTuiStdout}from"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-OJOPOUAY.js";import{Container,Input,Markdown,ProcessTerminal,Spacer,TUI,getKeybindings,matchesKey,truncateToWidth,visibleWidth}from"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import{killProcessTree}from"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import{formatVersionCheckError,getLatestPiRelease,getPiUserAgent,isNewerPackageVersion}from"./chunk-QVG5SUSV.js";import"./chunk-TEXE4HT6.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import{runtimeExecArgv}from"./chunk-LJFQYCFH.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import{APP_COMMAND,APP_NAME,CONFIG_DIR_NAME,DISPLAY_VERSION,PACKAGE_NAME,VERSION,brandProfile,canonicalizePath,detectInstallMethod,getAgentDir,getCwdRelativePath,getInstallPackageDir,getSelfUpdateCommand,getSelfUpdateUnavailableInstruction,isLocalPath,resolvePath,spawnProcess,spawnProcessSync,waitForChildProcess}from"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import"./chunk-44BJPS5I.js";import"./chunk-5GCZFK4X.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import{__toESM}from"./chunk-IKOFCODM.js";import{existsSync as existsSync3,mkdirSync as mkdirSync3,mkdtempSync,readdirSync as readdirSync2,readFileSync as readFileSync2,renameSync as renameSync2,rmSync as rmSync2,writeFileSync as writeFileSync2}from"node:fs";import{join as join5,resolve as resolve3}from"node:path";var import_proper_lockfile=__toESM(require_proper_lockfile(),1);import{randomUUID}from"node:crypto";import{cpSync,existsSync as existsSync2,mkdirSync as mkdirSync2,readFileSync,renameSync,rmSync,writeFileSync}from"node:fs";import{homedir}from"node:os";import{dirname as dirname2,join as join3,relative as relative2,resolve as resolve2}from"node:path";import{existsSync,readdirSync}from"node:fs";import{join,relative,sep}from"node:path";var REQUIRED_BUILD_ARTIFACTS=["extensions/omo.js","runtime/lsp-daemon/dist/cli.js","runtime/lsp-daemon/dist/index.js","runtime/lsp-daemon/dist/.omo-runtime-manifest.json","scripts/install.mjs"];function walkFiles(rootDir){let files=[],pending=[rootDir];for(;pending.length>0;){let dir=pending.pop();if(dir===void 0)continue;let entries;try{entries=readdirSync(dir,{withFileTypes:!0})}catch(error){if(error instanceof Error)continue;throw error}for(let entry of entries){let full=join(dir,entry.name);entry.isDirectory()?pending.push(full):entry.isFile()&&files.push(full)}}return files}function collectArtifactInventory(pluginPath){let inventory=[],collectUnder=(relativeDir,filter)=>{for(let filePath of walkFiles(join(pluginPath,relativeDir))){let posixPath=relative(pluginPath,filePath).split(sep).join("/");(filter===void 0||filter(posixPath))&&inventory.push(posixPath)}};return collectUnder("extensions"),collectUnder(join("runtime","lsp-daemon","dist")),collectUnder("skills",posixPath=>posixPath.endsWith("/SKILL.md")),existsSync(join(pluginPath,"scripts","install.mjs"))&&inventory.push("scripts/install.mjs"),inventory.sort(),inventory}function currentRequiredBuildArtifactsExist(pluginPath){return findMissingBuildArtifacts(pluginPath).length===0}function findMissingBuildArtifacts(pluginPath){let missing=[];for(let required of REQUIRED_BUILD_ARTIFACTS)existsSync(join(pluginPath,required))||missing.push(required);let skillCount=0;try{for(let entry of readdirSync(join(pluginPath,"skills"),{withFileTypes:!0}))entry.isDirectory()&&existsSync(join(pluginPath,"skills",entry.name,"SKILL.md"))&&skillCount++}catch(error){if(!(error instanceof Error))throw error}return skillCount===0&&missing.push("skills/*/SKILL.md"),missing}import{createHash}from"node:crypto";var EXCLUDED_ROOT_PATHS=new Set([".agents",".claude",".codex",".cursor",".devcontainer",".env.example",".gitattributes",".github",".idea",".mcp.json",".omo",".opencode",".vscode","AGENTS.md","CHANGELOG.md","CLA.md","CLAUDE.md","CONTRIBUTING.md","LICENSE","LICENSE.md","ROADMAP.md","THIRD-PARTY-NOTICES.md","assets","docs"]);function isBuildInputRootPath(name){return!EXCLUDED_ROOT_PATHS.has(name)&&!name.startsWith("README")}function computeBuildInputsHashFromLsTree(lsTreeOutput){let hash=createHash("sha256");for(let entry of lsTreeOutput.split("\0")){let tabIndex=entry.indexOf(" ");if(tabIndex===-1)continue;let name=entry.slice(tabIndex+1);if(!isBuildInputRootPath(name))continue;let objectHash=entry.slice(0,tabIndex).split(" ")[2]??"";hash.update(`${objectHash} ${name}
3
3
  `)}return hash.digest("hex")}import{spawn}from"node:child_process";import{closeSync,mkdirSync,openSync}from"node:fs";import{dirname,join as join2,resolve}from"node:path";import{fileURLToPath}from"node:url";function omoLocalUpdateWorkerLogPath(agentDir){return join2(agentDir,"omo-local-update","worker.log")}function workerCommandArgs(force){let updateArgs=["update","--omo-local-update-worker",...force?["--force"]:[]];if(detectInstallMethod()==="bun-binary")return updateArgs;let modulePath=fileURLToPath(import.meta.url),extension=modulePath.endsWith(".ts")?".ts":".js",cliMainPath=resolve(dirname(modulePath),"..",`cli-main${extension}`);return[...runtimeExecArgv(),cliMainPath,...updateArgs]}var defaultSpawnWorker=request=>{let logPath=omoLocalUpdateWorkerLogPath(request.agentDir);try{mkdirSync(dirname(logPath),{recursive:!0});let logFd=openSync(logPath,"w");try{let child=spawn(process.execPath,workerCommandArgs(request.force),{detached:!0,env:process.env,stdio:["ignore",logFd,logFd],windowsHide:!0});return child.unref(),{ok:!0,pid:child.pid,logPath}}finally{closeSync(logFd)}}catch(error){return{ok:!1,message:error instanceof Error?error.message:String(error)}}};async function defaultRun(command,args,options){let child=spawnProcess(command,args,{cwd:options.cwd,stdio:["ignore","pipe","pipe"],env:{...process.env,...options.env},detached:process.platform!=="win32",windowsHide:!0}),stdout="",stderr="";child.stdout.on("data",chunk=>{stdout+=chunk.toString()}),child.stderr.on("data",chunk=>{stderr+=chunk.toString()});let abort=new AbortController,timedOut=!1,pid=child.pid,timer=options.timeoutMs===void 0?void 0:setTimeout(()=>{timedOut=!0,pid!==void 0&&killProcessTree(pid),abort.abort()},options.timeoutMs);try{return{code:await waitForChildProcess(child,{signal:abort.signal}),stdout,stderr,timedOut}}finally{timer!==void 0&&clearTimeout(timer)}}function isKillSwitched(env){return env.SENPI_OMO_LOCAL_UPDATE==="0"}function defaultReadJson(path){try{return JSON.parse(readFileSync(path,"utf-8"))}catch{return}}function packageNameOf(json){if(typeof json!="object"||json===null)return;let name=json.name;return typeof name=="string"?name:void 0}function homeDir(){return process.env.HOME||homedir()}async function detectOmoLocalInstall(options){let readJson=options.readJson??defaultReadJson,exists=options.exists??existsSync2;if(options.packages)for(let entry of options.packages){let source=typeof entry=="string"?entry:entry.source;if(!isLocalPath(source))continue;let pluginPath=resolvePath(source,options.agentDir,{homeDir:homeDir(),trim:!0});if(packageNameOf(readJson(join3(pluginPath,"package.json")))!=="@code-yeongyu/omo-senpi")continue;let repoRoot=resolve2(pluginPath,"..","..",".."),omoSenpiPkgPath=join3(repoRoot,"packages","omo-senpi","package.json"),senpiTaskPkgPath=join3(repoRoot,"packages","senpi-task","package.json");if(!exists(omoSenpiPkgPath)||packageNameOf(readJson(omoSenpiPkgPath))!=="@oh-my-opencode/omo-senpi"||!exists(senpiTaskPkgPath)||packageNameOf(readJson(senpiTaskPkgPath))!=="@oh-my-opencode/senpi-task")continue;let topLevel;try{let result=await options.run("git",["-C",repoRoot,"rev-parse","--show-toplevel"],{});if(result.code!==0)continue;topLevel=result.stdout.trim()}catch{continue}if(!(topLevel===""||canonicalizePath(topLevel)!==canonicalizePath(repoRoot)))return{pluginPath,repoRoot}}}function omoLocalUpdateStampPath(agentDir){return join3(agentDir,"omo-local-update-state.json")}function readStamp(agentDir){let json=defaultReadJson(omoLocalUpdateStampPath(agentDir));if(typeof json!="object"||json===null)return;let candidate=json;if(typeof candidate.repoRoot!="string"||typeof candidate.sha!="string"||typeof candidate.omoSenpiTree!="string"||typeof candidate.senpiTaskTree!="string"||typeof candidate.buildInputsHash!="string"||typeof candidate.installedAt!="string"||!Array.isArray(candidate.artifacts))return;let artifacts=[];for(let artifact of candidate.artifacts){if(typeof artifact!="string")return;artifacts.push(artifact)}return{repoRoot:candidate.repoRoot,sha:candidate.sha,omoSenpiTree:candidate.omoSenpiTree,senpiTaskTree:candidate.senpiTaskTree,buildInputsHash:candidate.buildInputsHash,installedAt:candidate.installedAt,artifacts}}function writeStamp(agentDir,stamp){mkdirSync2(agentDir,{recursive:!0}),writeFileSync(omoLocalUpdateStampPath(agentDir),`${JSON.stringify(stamp,null,2)}
4
4
  `,"utf-8")}function shouldSkipUpdate(options){if(options.force)return!1;let stamp=options.stamp;return!stamp||stamp.repoRoot!==options.repoRoot||stamp.sha!==options.remoteSha&&stamp.buildInputsHash!==options.remoteBuildInputsHash||stamp.artifacts.length===0?!1:options.stampArtifactsExist}var OmoLocalStepError=class extends Error{constructor(stage,message,output){super(message),this.name="OmoLocalStepError",this.stage=stage,this.output=output}};function firstErrorLine(result){for(let text of[result.stderr,result.stdout])for(let line of text.split(`
5
5
  `)){let trimmed=line.trim();if(trimmed!=="")return trimmed}return"unknown error"}async function computeRemoteState(options){let{repoRoot,run}=options,git=(args,timeoutMs)=>run("git",args,{cwd:repoRoot,timeoutMs}),requireOk=async(args,timeoutMs)=>{let result=await git(args,timeoutMs);if(result.timedOut)throw new OmoLocalStepError("fetch",`git ${args.join(" ")} timed out`);if(result.code!==0)throw new OmoLocalStepError("fetch",`git ${args.join(" ")}: ${firstErrorLine(result)}`,`${result.stdout}${result.stderr}`);return result.stdout.trim()};await requireOk(["fetch","origin","dev"],12e4);let sha=await requireOk(["rev-parse","origin/dev"]);if(sha==="")throw new OmoLocalStepError("fetch","git rev-parse origin/dev: empty output");let subject=await requireOk(["log","-1","--format=%s","origin/dev"]),omoSenpiTree=await requireOk(["rev-parse","origin/dev:packages/omo-senpi"]),senpiTaskTree=await requireOk(["rev-parse","origin/dev:packages/senpi-task"]),buildInputsHash=computeBuildInputsHashFromLsTree(await requireOk(["ls-tree","-z","origin/dev"]));return{sha,subject,omoSenpiTree,senpiTaskTree,buildInputsHash}}function omoLocalUpdateLockPath(agentDir){return join3(agentDir,"omo-local-update.lock")}function omoLocalUpdateBuildWorktreePath(agentDir){return join3(agentDir,"omo-local-update","build-worktree")}function readLockFile(path){try{let json=JSON.parse(readFileSync(path,"utf-8"));return typeof json.pid!="number"||typeof json.nonce!="string"?void 0:{pid:json.pid,nonce:json.nonce}}catch{return}}function pidIsAlive(pid){try{return process.kill(pid,0),!0}catch(error){return error.code==="EPERM"}}function acquireOmoLocalLock(agentDir,log){mkdirSync2(agentDir,{recursive:!0});let path=omoLocalUpdateLockPath(agentDir),lock={path,pid:process.pid,nonce:randomUUID()},payload=JSON.stringify({pid:lock.pid,nonce:lock.nonce,startedAt:new Date().toISOString()}),tryCreate=()=>{try{return writeFileSync(path,payload,{flag:"wx"}),!0}catch(error){if(error.code==="EEXIST")return!1;throw error}},reportBusy=()=>{let existing2=readLockFile(path);log(source_default.dim(`OMO local plugin update already running (pid ${existing2?.pid??"unknown"}); skipping.`))};if(tryCreate())return lock;let existing=readLockFile(path);if(existing!==void 0&&pidIsAlive(existing.pid))return reportBusy();try{rmSync(path)}catch{}return tryCreate()?lock:reportBusy()}function releaseOmoLocalLock(lock){try{let existing=readLockFile(lock.path);existing!==void 0&&existing.pid===lock.pid&&existing.nonce===lock.nonce&&rmSync(lock.path)}catch{}}var OmoLocalBunMissingError=class extends Error{constructor(){super("bun not found on PATH"),this.name="OmoLocalBunMissingError"}};async function runBunStep(stage,args,worktree,run,timeoutMs){let result;try{result=await run("bun",args,{cwd:worktree,timeoutMs})}catch(error){throw error.code==="ENOENT"?new OmoLocalBunMissingError:new OmoLocalStepError(stage,`bun ${args.join(" ")} failed to start: ${error instanceof Error?error.message:String(error)}`)}let output=`${result.stdout}${result.stderr}`;if(result.timedOut)throw new OmoLocalStepError(stage,`bun ${args.join(" ")} timed out after ${Math.round(timeoutMs/1e3)}s`,output);if(result.code!==0)throw new OmoLocalStepError(stage,`bun ${args.join(" ")} exited with code ${result.code??"unknown"}`,output)}async function ensureBuildWorktree(options){let{worktree,repoRoot,sha,run}=options;if(existsSync2(worktree)){let commonDir=await run("git",["-C",worktree,"rev-parse","--git-common-dir"],{});if(commonDir.code===0&&commonDir.stdout.trim()!==""&&canonicalizePath(resolve2(worktree,commonDir.stdout.trim()))===canonicalizePath(join3(repoRoot,".git"))){let checkout=await run("git",["-C",worktree,"checkout","--detach","--force",sha],{});if(checkout.code!==0)throw new OmoLocalStepError("worktree",`git checkout --detach --force: ${firstErrorLine(checkout)}`,`${checkout.stdout}${checkout.stderr}`);return}((await run("git",["-C",repoRoot,"worktree","remove","--force",worktree],{})).code!==0||existsSync2(worktree))&&rmSync(worktree,{recursive:!0,force:!0})}mkdirSync2(dirname2(worktree),{recursive:!0});let add=await run("git",["-C",repoRoot,"worktree","add","--detach",worktree,sha],{});if(add.code===0)return;await run("git",["-C",repoRoot,"worktree","prune"],{});let retry=await run("git",["-C",repoRoot,"worktree","add","--detach",worktree,sha],{});if(retry.code!==0)throw new OmoLocalStepError("worktree",`git worktree add: ${firstErrorLine(retry)}`,`${add.stdout}${add.stderr}${retry.stdout}${retry.stderr}`)}var defaultFsSeam={cpSync:(source,destination)=>{cpSync(source,destination,{recursive:!0})},renameSync:(oldPath,newPath)=>{renameSync(oldPath,newPath)},rmSync:path=>{rmSync(path,{recursive:!0,force:!0})}},swapCounter=0;function swapPluginDir(options){let seam=options.fs??defaultFsSeam;swapCounter+=1;let tag=`${Date.now()}-${process.pid}-${swapCounter}`,staging=`${options.pluginPath}.staging-${tag}`,prev=`${options.pluginPath}.prev-${tag}`;seam.cpSync(options.sourceDir,staging),seam.renameSync(options.pluginPath,prev);try{seam.renameSync(staging,options.pluginPath)}catch(error){throw seam.renameSync(prev,options.pluginPath),seam.rmSync(staging),error}seam.rmSync(prev)}function firstLine(text){for(let line of text.split(`
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{MODULE_JOB_KIND,NOTICE_TAIL_MAX_CHARS,TERMINAL_CHILD_JOB_KINDS,TerminalManager,ToolChildJobError,childTerminalIdScope,controlFd,createBashInputTool,createBashOutputTool,createBashResizeTool,createKillBashTool,createModuleJobHandler,createPtyBashTool,goShimScript,runToolChild,sanitizeTerminalOutput,withControlPipe}from"./chunk-3RILB2OD.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import{getShellConfig}from"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import{value_exports}from"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import{SecretOutputRedactor}from"./chunk-AOTHPTMU.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";var PTY_GO_SHIM='stty -echo 2>/dev/null; IFS= read -r _go || exit 127; stty echo 2>/dev/null; exec "$0" "$@"';function parseArgs(value){let field=name=>typeof value=="object"&&value!==null?Reflect.get(value,name):void 0,cwd=field("cwd"),toolCallId=field("toolCallId"),env=field("env");if(typeof cwd!="string"||typeof toolCallId!="string"||typeof env!="object"||env===null)throw new ToolChildJobError("terminal_job_bad_args","a terminal job needs cwd, toolCallId and env");let shellPath=field("shellPath"),timeoutAction=field("timeoutAction"),autoReap=field("backgroundAutoReapMinutes");return{params:field("params"),toolCallId,cwd,env:Object.fromEntries(Object.entries(env).filter(entry=>typeof entry[1]=="string")),...typeof shellPath=="string"?{shellPath}:{},defaultCols:Number(field("defaultCols"))||0,defaultRows:Number(field("defaultRows"))||0,redactSecretsInOutput:field("redactSecretsInOutput")===!0,...timeoutAction==="background"||timeoutAction==="kill"?{timeoutAction}:{},...typeof autoReap=="number"&&Number.isFinite(autoReap)?{backgroundAutoReapMinutes:autoReap}:{}}}function barrierFor(job){return{wrap:(command,args)=>({command:"/bin/sh",args:["-c",PTY_GO_SHIM,command,...args]}),async release(session){if(session.pid===void 0)throw new ToolChildJobError("terminal_spawn_failed","the PTY reported no pid");let gated=job.gate.request({jobId:job.jobId,origin:"terminal",api:"pty.spawn",containment:"own-group",lifetime:"owned",pid:session.pid,pgid:session.pid});session.onExit(exitCode=>job.gate.done(gated.launchId,exitCode===null?{}:{exitCode})),job.gate.skipsAckWait||await gated.acked,job.gate.invokeNow(gated.launchId),session.write(`go
2
+ import{MODULE_JOB_KIND,NOTICE_TAIL_MAX_CHARS,TERMINAL_CHILD_JOB_KINDS,TerminalManager,ToolChildJobError,childTerminalIdScope,controlFd,createBashInputTool,createBashOutputTool,createBashResizeTool,createKillBashTool,createModuleJobHandler,createPtyBashTool,goShimScript,runToolChild,sanitizeTerminalOutput,withControlPipe}from"./chunk-OJOPOUAY.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import{getShellConfig}from"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import{value_exports}from"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import{SecretOutputRedactor}from"./chunk-5GCZFK4X.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";var PTY_GO_SHIM='stty -echo 2>/dev/null; IFS= read -r _go || exit 127; stty echo 2>/dev/null; exec "$0" "$@"';function parseArgs(value){let field=name=>typeof value=="object"&&value!==null?Reflect.get(value,name):void 0,cwd=field("cwd"),toolCallId=field("toolCallId"),env=field("env");if(typeof cwd!="string"||typeof toolCallId!="string"||typeof env!="object"||env===null)throw new ToolChildJobError("terminal_job_bad_args","a terminal job needs cwd, toolCallId and env");let shellPath=field("shellPath"),timeoutAction=field("timeoutAction"),autoReap=field("backgroundAutoReapMinutes");return{params:field("params"),toolCallId,cwd,env:Object.fromEntries(Object.entries(env).filter(entry=>typeof entry[1]=="string")),...typeof shellPath=="string"?{shellPath}:{},defaultCols:Number(field("defaultCols"))||0,defaultRows:Number(field("defaultRows"))||0,redactSecretsInOutput:field("redactSecretsInOutput")===!0,...timeoutAction==="background"||timeoutAction==="kill"?{timeoutAction}:{},...typeof autoReap=="number"&&Number.isFinite(autoReap)?{backgroundAutoReapMinutes:autoReap}:{}}}function barrierFor(job){return{wrap:(command,args)=>({command:"/bin/sh",args:["-c",PTY_GO_SHIM,command,...args]}),async release(session){if(session.pid===void 0)throw new ToolChildJobError("terminal_spawn_failed","the PTY reported no pid");let gated=job.gate.request({jobId:job.jobId,origin:"terminal",api:"pty.spawn",containment:"own-group",lifetime:"owned",pid:session.pid,pgid:session.pid});session.onExit(exitCode=>job.gate.done(gated.launchId,exitCode===null?{}:{exitCode})),job.gate.skipsAckWait||await gated.acked,job.gate.invokeNow(gated.launchId),session.write(`go
3
3
  `)}}}function exitSummary(id,runtime){let output=sanitizeTerminalOutput(runtime.fullOutput()).trimEnd(),exit=runtime.exitResult;return{event:"background_exit",id,exit:exit===null?null:{exitCode:exit.exitCode,signal:exit.signal,cancelled:exit.cancelled,timedOut:exit.timedOut},output:output.length>NOTICE_TAIL_MAX_CHARS?output.slice(output.length-NOTICE_TAIL_MAX_CHARS-1):output,...runtime.autoReapedAfterMinutes===void 0?{}:{autoReapedAfterMinutes:runtime.autoReapedAfterMinutes}}}function createTerminalJobHandlers(injected){let manager=injected,managerFor=generation=>(manager??=new TerminalManager({idScope:childTerminalIdScope(generation)}),manager),tell=(job,wake)=>{job.wake(TERMINAL_CHILD_JOB_KINDS.bash,wake).catch(error=>{process.stderr.write(`tool-child: terminal ${wake.event} for ${wake.id} not delivered: ${error instanceof Error?error.message:String(error)}
4
4
  `)})},contextFor=(args,job)=>({manager:managerFor(job.generation),...args.timeoutAction===void 0?{}:{timeoutAction:args.timeoutAction},...args.backgroundAutoReapMinutes===void 0?{}:{backgroundAutoReapMinutes:args.backgroundAutoReapMinutes},onBackgroundStart:(id,description,startedAtMs,command,autoReapMinutes)=>tell(job,{event:"background_start",id,description,startedAtMs,...command===void 0?{}:{command},...autoReapMinutes===void 0?{}:{autoReapMinutes}}),onBackgroundExit:(id,runtime)=>tell(job,exitSummary(id,runtime)),onBackgroundReapFailed:(id,autoReapMinutes,reason)=>tell(job,{event:"background_reap_failed",id,autoReapMinutes,reason}),cwd:args.cwd,...args.shellPath===void 0?{}:{shellPath:args.shellPath},defaultCols:args.defaultCols,defaultRows:args.defaultRows,redactSecretsInOutput:args.redactSecretsInOutput,getEnv:()=>({...args.env}),launchBarrier:barrierFor(job)}),run=create=>async(value,job)=>{let args=parseArgs(value),tool=create(contextFor(args,job));if(!value_exports.Check(tool.parameters,args.params))throw new ToolChildJobError("terminal_job_bad_args","the tool's parameters do not match its schema");let onUpdate=update=>{job.update(update).catch(error=>{process.stderr.write(`tool-child: ${args.toolCallId} update not sent: ${error instanceof Error?error.message:String(error)}
5
5
  `)})};return tool.execute(args.toolCallId,args.params,job.signal,onUpdate,{cwd:args.cwd})};return{[TERMINAL_CHILD_JOB_KINDS.bash]:run(createPtyBashTool),[TERMINAL_CHILD_JOB_KINDS.output]:run(createBashOutputTool),[TERMINAL_CHILD_JOB_KINDS.input]:run(createBashInputTool),[TERMINAL_CHILD_JOB_KINDS.resize]:run(createBashResizeTool),[TERMINAL_CHILD_JOB_KINDS.kill]:run(createKillBashTool)}}import{access}from"node:fs/promises";import{constants as osConstants}from"node:os";import{spawn}from"node:child_process";import{once}from"node:events";import{Socket}from"node:net";async function launchOwnGroup(launch){if(process.platform==="win32")throw new Error("launchOwnGroup is POSIX-only; Windows launches are contained by the job");let callerStdio=[...launch.options?.stdio??["ignore","pipe","pipe"]],fd=controlFd(callerStdio),shim=spawn("/bin/sh",["-c",goShimScript(fd),launch.program,...launch.args],{...launch.options,detached:!0,stdio:withControlPipe(callerStdio,fd,"ignore","pipe")}),pid=shim.pid,exited=once(shim,"exit").then(([exitCode,signal])=>({exitCode,signal}));if(pid===void 0)throw new Error(`could not start ${launch.program}`);let gated=launch.gate.request({jobId:launch.jobId,origin:launch.origin,api:launch.api,containment:"own-group",lifetime:launch.lifetime??"owned",pid,pgid:pid});if(exited.then(({exitCode,signal})=>launch.gate.done(gated.launchId,{...exitCode===null?{}:{exitCode},...signal===null?{}:{signal}})),launch.gate.skipsAckWait||await Promise.race([gated.acked,exited]),shim.exitCode===null&&shim.signalCode===null){launch.gate.invokeNow(gated.launchId);let control=shim.stdio[fd];control instanceof Socket&&(control.on("error",()=>{}),exited.then(()=>control.destroy()),control.unref(),control.write(`go
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{runRpcMode}from"./chunk-RRFDLGX6.js";import"./chunk-64FJ4QQJ.js";import"./chunk-Q4RJ4WLE.js";import"./chunk-TPLEPLEB.js";import"./chunk-75O3CWR5.js";import"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import"./chunk-FYVQEZYN.js";import"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import"./chunk-VD7AKTGP.js";import"./chunk-PWA75RQU.js";import"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import"./chunk-MTQQ2VQH.js";import"./chunk-WMHESZCU.js";import"./chunk-IJXKHJYR.js";import"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import"./chunk-IEY2SL46.js";import"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import"./chunk-7WYJAYHH.js";import"./chunk-5HMYIYQB.js";import"./chunk-OSNR3IRD.js";import"./chunk-UCXBDE6R.js";import"./chunk-YI6KRJDC.js";import"./chunk-VUY4BZDI.js";import"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import"./chunk-HGCQAMC6.js";import"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import"./chunk-7X72IACK.js";import"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-3RILB2OD.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-QVG5SUSV.js";import"./chunk-74HCKLRH.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import"./chunk-LJFQYCFH.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import"./chunk-44BJPS5I.js";import"./chunk-AOTHPTMU.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";export{runRpcMode};
2
+ import{runRpcMode}from"./chunk-TNYFCGI7.js";import"./chunk-PPCAJQDJ.js";import"./chunk-225TDKTA.js";import"./chunk-TPLEPLEB.js";import"./chunk-75O3CWR5.js";import"./chunk-WAGFTIT4.js";import"./chunk-NLYT7BND.js";import"./chunk-HTWWKJJI.js";import"./chunk-DEUEMEV3.js";import"./chunk-XI6THO4F.js";import"./chunk-FYVQEZYN.js";import"./chunk-WMDJMN5W.js";import"./chunk-GTJJ73DE.js";import"./chunk-VD7AKTGP.js";import"./chunk-PWA75RQU.js";import"./chunk-M2VJVJMK.js";import"./chunk-TQHNFP77.js";import"./chunk-5NECOJNK.js";import"./chunk-HKCFMDJN.js";import"./chunk-A3LGSX7Z.js";import"./chunk-3QPE75AR.js";import"./chunk-ULWRGKP2.js";import"./chunk-4B5JSLLR.js";import"./chunk-FWIO636S.js";import"./chunk-MOVB6H22.js";import"./chunk-DLPV4B3R.js";import"./chunk-VPVD5G32.js";import"./chunk-H4QOEVS5.js";import"./chunk-RNLFZ67U.js";import"./chunk-SOMFLLPD.js";import"./chunk-MTQQ2VQH.js";import"./chunk-WMHESZCU.js";import"./chunk-IJXKHJYR.js";import"./chunk-QMRJYMNH.js";import"./chunk-DZQA5LVN.js";import"./chunk-IEY2SL46.js";import"./chunk-26UBFF6N.js";import"./chunk-4JMGWVRH.js";import"./chunk-E5O4SP5I.js";import"./chunk-AT5G5BUI.js";import"./chunk-7WYJAYHH.js";import"./chunk-5HMYIYQB.js";import"./chunk-OSNR3IRD.js";import"./chunk-UCXBDE6R.js";import"./chunk-YI6KRJDC.js";import"./chunk-VUY4BZDI.js";import"./chunk-SF4MQDKZ.js";import"./chunk-Z4PN2MDA.js";import"./chunk-7BX3JQ7F.js";import"./chunk-GILDYS3O.js";import"./chunk-KLAX467B.js";import"./chunk-C4AHHZ6P.js";import"./chunk-CEFKVI3E.js";import"./chunk-HGCQAMC6.js";import"./chunk-GZVCRV7I.js";import"./chunk-236TAYFX.js";import"./chunk-36BLGKRO.js";import"./chunk-FKX6EWFV.js";import"./chunk-U3VOXCGP.js";import"./chunk-7X72IACK.js";import"./chunk-EUCZC2RF.js";import"./chunk-WHQ2QPP5.js";import"./chunk-RLIY3AUC.js";import"./chunk-WB4BUHOH.js";import"./chunk-NJ43NBSP.js";import"./chunk-KDUJCDLM.js";import"./chunk-6APXZK7W.js";import"./chunk-YU2P3CAR.js";import"./chunk-6QQL3SKM.js";import"./chunk-2IKL4F24.js";import"./chunk-KJR3XXMI.js";import"./chunk-IYL5E4QQ.js";import"./chunk-7THM57HH.js";import"./chunk-AC72EWI5.js";import"./chunk-RQFD6LG2.js";import"./chunk-OJOPOUAY.js";import"./chunk-4PMRUR4L.js";import"./chunk-LPYBKMPT.js";import"./chunk-ZJUL5ODW.js";import"./chunk-7CXLNKEH.js";import"./chunk-R7J5TEYK.js";import"./chunk-62OVOJPI.js";import"./chunk-G7U4BOJP.js";import"./chunk-IK3S2NDB.js";import"./chunk-XDEZA6U6.js";import"./chunk-WOHQJ6JB.js";import"./chunk-COH5F7QV.js";import"./chunk-RFB5CBW7.js";import"./chunk-Y7QPP7BG.js";import"./chunk-PWTXZXHH.js";import"./chunk-GVSBCJFI.js";import"./chunk-QTS2XGPQ.js";import"./chunk-Z6TEQEZO.js";import"./chunk-ZG3MNTNX.js";import"./chunk-WHPDEDCC.js";import"./chunk-HK46JMSC.js";import"./chunk-5ROMKDLK.js";import"./chunk-3W47LTXQ.js";import"./chunk-UAOOH2V7.js";import"./chunk-WDTJ6JKE.js";import"./chunk-OH5TKHW7.js";import"./chunk-NDNQ23SK.js";import"./chunk-JGKH3D6W.js";import"./chunk-3SASTB6Y.js";import"./chunk-PJ34QVL5.js";import"./chunk-BMX2U22F.js";import"./chunk-QVG5SUSV.js";import"./chunk-TEXE4HT6.js";import"./chunk-ZOFZRJSL.js";import"./chunk-ZFIC2DZV.js";import"./chunk-2SOVDETB.js";import"./chunk-LJFQYCFH.js";import"./chunk-K3GAGIPX.js";import"./chunk-RUGTHELO.js";import"./chunk-42XRJQM6.js";import"./chunk-IHES3JES.js";import"./chunk-5XHOHZIR.js";import"./chunk-HW6AAS3R.js";import"./chunk-SODMQEHO.js";import"./chunk-ATQFN5HI.js";import"./chunk-EYSV6A7S.js";import"./chunk-MIENF2YK.js";import"./chunk-OXNWERO4.js";import"./chunk-44BJPS5I.js";import"./chunk-5GCZFK4X.js";import"./chunk-O5RYI3IW.js";import"./chunk-RFFMEA4B.js";import"./chunk-IKOFCODM.js";export{runRpcMode};
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{processBootAtMs}from"./chunk-44BJPS5I.js";import{DEFAULT_SCROLLBACK,MAX_SESSION_OUTPUT_CHARS,SecretOutputRedactor,loadPty}from"./chunk-AOTHPTMU.js";import"./chunk-O5RYI3IW.js";import"./chunk-IKOFCODM.js";var pty=await loadPty(),RELEASED_SCREEN={cols:0,rows:0,visibleGrid:[],scrollback:[],cursor:{x:0,y:0}},TerminalRuntimeSession=class{constructor(command,options){this.finalScreen=null,this.decoder=new TextDecoder("utf-8",{fatal:!1}),this.buffer="",this.droppedChars=0,this.consumed=0,this.outputListeners=new Set,this.disposeListeners=new Set,this.unsubscribeData=null,this.lastScreenWrite=null,this.redactor=options.redactSecretsInOutput===!0?new SecretOutputRedactor:void 0,this.command=command,this.argv=[options.command??command,...options.args??[]],this.screen=new pty.TerminalScreen({cols:options.cols,rows:options.rows,scrollback:options.scrollback??DEFAULT_SCROLLBACK}),this.session=new pty.TerminalSession(options),this.unsubscribeData=this.session.onData(chunk=>{let text=this.decoder.decode(chunk,{stream:!0});this.ingest(this.redactor?this.redactor.push(text):text);let redactor=this.redactor;redactor&&(clearTimeout(this.redactionIdleTimer),this.redactionIdleTimer=setTimeout(()=>{this.redactionIdleTimer=void 0,this.ingest(redactor.flushIdle())},50),this.redactionIdleTimer.unref?.())}),this.screenRelease=new Promise(resolve=>{this.session.onExit(()=>{clearTimeout(this.redactionIdleTimer),this.redactionIdleTimer=void 0,this.redactor&&this.ingest(this.redactor.push(this.decoder.decode())+this.redactor.finish()),this.releaseScreen().catch(()=>{}).finally(resolve)})}),this.session.start(),this.startedAtMs=Date.now()}screenReleased(){return this.screenRelease}async releaseScreen(){let screen=this.screen;if(screen&&(await screen.flush().catch(()=>{}),this.screen===screen)){this.screen=null;try{this.finalScreen={...screen.snapshot(),scrollback:[]}}finally{screen.dispose()}}}get backend(){return this.session.backend}identity(){let pid=this.session.pid;if(pid===void 0)return;let processGroupId=this.session.processGroupId;return{pid,...processGroupId===void 0?{}:{processGroupId},startedAtMs:this.startedAtMs,bootAtMs:processBootAtMs(),argv:this.argv}}get exited(){return this.session.exited}get exitResult(){return this.session.exitResult}get totalChars(){return this.droppedChars+this.buffer.length}ingest(text){if(text.length!==0){if(this.screen&&this.ownScreenWrite(this.screen.feed(text)),this.buffer+=text,this.buffer.length>MAX_SESSION_OUTPUT_CHARS){let overflow=this.buffer.length-MAX_SESSION_OUTPUT_CHARS;this.buffer=this.buffer.slice(overflow),this.droppedChars+=overflow}for(let listener of this.outputListeners)try{listener(text)}catch{}}}onOutput(listener){return this.outputListeners.add(listener),()=>this.outputListeners.delete(listener)}onDispose(listener){return this.disposeListeners.add(listener),()=>this.disposeListeners.delete(listener)}readDelta(){let start=Math.max(this.consumed,this.droppedChars),dropped=Math.max(0,this.droppedChars-this.consumed),text=this.buffer.slice(start-this.droppedChars);return this.consumed=this.totalChars,{text,droppedChars:dropped}}fullOutput(){return this.buffer}snapshot(){return this.screen?this.screen.snapshot():this.finalScreen??RELEASED_SCREEN}resizeScreen(cols,rows){this.screen&&this.ownScreenWrite(this.screen.resize(cols,rows))}ownScreenWrite(written){written!==this.lastScreenWrite&&(this.lastScreenWrite=written,written.catch(()=>{}))}dispose(){clearTimeout(this.redactionIdleTimer),this.redactionIdleTimer=void 0,this.unsubscribeData?.(),this.unsubscribeData=null,this.outputListeners.clear(),this.screen?.dispose(),this.screen=null;let disposeListeners=[...this.disposeListeners];this.disposeListeners.clear();for(let listener of disposeListeners)listener()}};export{TerminalRuntimeSession};
2
+ import{processBootAtMs}from"./chunk-44BJPS5I.js";import{DEFAULT_SCROLLBACK,MAX_SESSION_OUTPUT_CHARS,SecretOutputRedactor,loadPty}from"./chunk-5GCZFK4X.js";import"./chunk-O5RYI3IW.js";import"./chunk-IKOFCODM.js";var pty=await loadPty(),RELEASED_SCREEN={cols:0,rows:0,visibleGrid:[],scrollback:[],cursor:{x:0,y:0}},TerminalRuntimeSession=class{constructor(command,options){this.finalScreen=null,this.decoder=new TextDecoder("utf-8",{fatal:!1}),this.buffer="",this.droppedChars=0,this.consumed=0,this.outputListeners=new Set,this.disposeListeners=new Set,this.unsubscribeData=null,this.lastScreenWrite=null,this.redactor=options.redactSecretsInOutput===!0?new SecretOutputRedactor:void 0,this.command=command,this.argv=[options.command??command,...options.args??[]],this.screen=new pty.TerminalScreen({cols:options.cols,rows:options.rows,scrollback:options.scrollback??DEFAULT_SCROLLBACK}),this.session=new pty.TerminalSession(options),this.unsubscribeData=this.session.onData(chunk=>{let text=this.decoder.decode(chunk,{stream:!0});this.ingest(this.redactor?this.redactor.push(text):text);let redactor=this.redactor;redactor&&(clearTimeout(this.redactionIdleTimer),this.redactionIdleTimer=setTimeout(()=>{this.redactionIdleTimer=void 0,this.ingest(redactor.flushIdle())},50),this.redactionIdleTimer.unref?.())}),this.screenRelease=new Promise(resolve=>{this.session.onExit(()=>{clearTimeout(this.redactionIdleTimer),this.redactionIdleTimer=void 0,this.redactor&&this.ingest(this.redactor.push(this.decoder.decode())+this.redactor.finish()),this.releaseScreen().catch(()=>{}).finally(resolve)})}),this.session.start(),this.startedAtMs=Date.now()}screenReleased(){return this.screenRelease}async releaseScreen(){let screen=this.screen;if(screen&&(await screen.flush().catch(()=>{}),this.screen===screen)){this.screen=null;try{this.finalScreen={...screen.snapshot(),scrollback:[]}}finally{screen.dispose()}}}get backend(){return this.session.backend}identity(){let pid=this.session.pid;if(pid===void 0)return;let processGroupId=this.session.processGroupId;return{pid,...processGroupId===void 0?{}:{processGroupId},startedAtMs:this.startedAtMs,bootAtMs:processBootAtMs(),argv:this.argv}}get exited(){return this.session.exited}get exitResult(){return this.session.exitResult}get totalChars(){return this.droppedChars+this.buffer.length}ingest(text){if(text.length!==0){if(this.screen&&this.ownScreenWrite(this.screen.feed(text)),this.buffer+=text,this.buffer.length>MAX_SESSION_OUTPUT_CHARS){let overflow=this.buffer.length-MAX_SESSION_OUTPUT_CHARS;this.buffer=this.buffer.slice(overflow),this.droppedChars+=overflow}for(let listener of this.outputListeners)try{listener(text)}catch{}}}onOutput(listener){return this.outputListeners.add(listener),()=>this.outputListeners.delete(listener)}onDispose(listener){return this.disposeListeners.add(listener),()=>this.disposeListeners.delete(listener)}readDelta(){let start=Math.max(this.consumed,this.droppedChars),dropped=Math.max(0,this.droppedChars-this.consumed),text=this.buffer.slice(start-this.droppedChars);return this.consumed=this.totalChars,{text,droppedChars:dropped}}fullOutput(){return this.buffer}snapshot(){return this.screen?this.screen.snapshot():this.finalScreen??RELEASED_SCREEN}resizeScreen(cols,rows){this.screen&&this.ownScreenWrite(this.screen.resize(cols,rows))}ownScreenWrite(written){written!==this.lastScreenWrite&&(this.lastScreenWrite=written,written.catch(()=>{}))}dispose(){clearTimeout(this.redactionIdleTimer),this.redactionIdleTimer=void 0,this.unsubscribeData?.(),this.unsubscribeData=null,this.outputListeners.clear(),this.screen?.dispose(),this.screen=null;let disposeListeners=[...this.disposeListeners];this.disposeListeners.clear();for(let listener of disposeListeners)listener()}};export{TerminalRuntimeSession};