@tencent-ai/agent-sdk 0.3.265-dev.09bb40f.202609241543 → 0.3.265-dev.5d054f7.202609241744
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.
- package/cli/dist/codebuddy-broker.js +5 -5
- package/cli/dist/codebuddy-headless.js +91 -90
- package/cli/dist/codebuddy-lite-wb.mjs +120 -119
- package/cli/dist/lazy-lite-wb/{6754.cd5db116.mjs → 6754.08ff952e.mjs} +1 -1
- package/cli/dist/lazy-lite-wb/manifest.json +1 -1
- package/cli/dist/web-ui/assets/{CanvasPaneStandaloneView-BprQ9c46.js → CanvasPaneStandaloneView-CA7Fkz8f.js} +1 -1
- package/cli/dist/web-ui/assets/{CanvasView-CymQ08jN.js → CanvasView-DwL6_fu3.js} +1 -1
- package/cli/dist/web-ui/assets/{ChangesView-BEncxIxu.js → ChangesView-DJIZMyT8.js} +1 -1
- package/cli/dist/web-ui/assets/{DocsView-e_7OwrNH.js → DocsView-C4sUCvde.js} +1 -1
- package/cli/dist/web-ui/assets/EditorView-D9-4OC6m.js +1 -0
- package/cli/dist/web-ui/assets/{KeybindingsView-BoReCRfV.js → KeybindingsView-7JMWmoJw.js} +1 -1
- package/cli/dist/web-ui/assets/{LogsView-DybHSseY.js → LogsView-DgOAgag0.js} +1 -1
- package/cli/dist/web-ui/assets/{MetricsView-BqCmGrBo.js → MetricsView-AkDrEAHC.js} +1 -1
- package/cli/dist/web-ui/assets/{PluginsView-DGzkXn30.js → PluginsView-zb5Q9b15.js} +1 -1
- package/cli/dist/web-ui/assets/{RemoteControlView-YD0KXiPc.js → RemoteControlView-CYWp6gIS.js} +1 -1
- package/cli/dist/web-ui/assets/{SettingsView-DmQGmE8a.js → SettingsView-BdPJcZvY.js} +1 -1
- package/cli/dist/web-ui/assets/{SplitContainer-ct_MnOS_.js → SplitContainer-BVAch7o2.js} +1 -1
- package/cli/dist/web-ui/assets/{StatsView-mSFzC0Rp.js → StatsView-DR9QLfwr.js} +1 -1
- package/cli/dist/web-ui/assets/{TasksView-BaXhd5r5.js → TasksView-DRNuWl7q.js} +1 -1
- package/cli/dist/web-ui/assets/{TerminalPaneView-CU7T6ZuI.js → TerminalPaneView-BgMzcWqs.js} +1 -1
- package/cli/dist/web-ui/assets/{TracesView-Do0JigMi.js → TracesView-C_quzrm7.js} +1 -1
- package/cli/dist/web-ui/assets/{WorkersView-CUBIVYSo.js → WorkersView-D_8wN_84.js} +1 -1
- package/cli/dist/web-ui/assets/{abnfDiagram-O67JEVCF-D20rDiIl.js → abnfDiagram-O67JEVCF-BFjMyhqZ.js} +1 -1
- package/cli/dist/web-ui/assets/architecture-7GRP2DOG-CvCi4Jll.js +1 -0
- package/cli/dist/web-ui/assets/{architectureDiagram-NJMV4G6O-B13dI-VV.js → architectureDiagram-NJMV4G6O-Cia5nFQG.js} +1 -1
- package/cli/dist/web-ui/assets/{blockDiagram-BEXU5L5S-CvmYSEk9.js → blockDiagram-BEXU5L5S-DuNLNZIn.js} +1 -1
- package/cli/dist/web-ui/assets/{c4Diagram-YGBWAQC7-CIpjHTTy.js → c4Diagram-YGBWAQC7-DnNQaRwx.js} +1 -1
- package/cli/dist/web-ui/assets/{canvas-store-Bu74572f.js → canvas-store-iMIlIexx.js} +1 -1
- package/cli/dist/web-ui/assets/channel-p3wzVhYj.js +1 -0
- package/cli/dist/web-ui/assets/{chunk-3FUC2YCW-BjC-DtJF.js → chunk-3FUC2YCW-CU422vz2.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-5DYCD2WN-B2lsK2OY.js → chunk-5DYCD2WN-DS999elV.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-742MDFTN-D2dxZHJr.js → chunk-742MDFTN-RVekb_l6.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-7INBJB4K-DHHuzSiA.js → chunk-7INBJB4K-B6KDlBL9.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-7M6MHVWA-BEQ4DZEd.js → chunk-7M6MHVWA-BmhAynCB.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-7PRAP22T-yAewkgo_.js → chunk-7PRAP22T-xSFj5SgT.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-GTNCS2PH-DjpyfrlA.js → chunk-GTNCS2PH-B9f5WzPH.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-GWA4HPMP-BykoOHGe.js → chunk-GWA4HPMP-Dpg9rKn3.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-MBY4JIJT-BjmZPESn.js → chunk-MBY4JIJT-H434BAK7.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-NETBCI7D-3IH0GCDZ.js → chunk-NETBCI7D--o_1KqMX.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-O7XYJQB3-BrbM3Zz4.js → chunk-O7XYJQB3-BIQorTdl.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-UA2S7LBM-Dqwb40uO.js → chunk-UA2S7LBM-CE1Kdxgk.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-WEXAMYUT-BiNYs0ws.js → chunk-WEXAMYUT-cZe-yuRZ.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-Z7XXMR3K-CeCGX4__.js → chunk-Z7XXMR3K-ePhBSwlw.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-ZIGJFQKS-DJzbSfII.js → chunk-ZIGJFQKS-BoLwpWOq.js} +1 -1
- package/cli/dist/web-ui/assets/{classDiagram-v2-NBCMYWYE-DaIjiRhb.js → classDiagram-v2-NBCMYWYE-CQ9C55fE.js} +1 -1
- package/cli/dist/web-ui/assets/{cssMode-B5f196S7.js → cssMode-Bqz_-AME.js} +1 -1
- package/cli/dist/web-ui/assets/{cynefin-OW5HDTMX-BcIn-6ug.js → cynefin-OW5HDTMX-KXLW33Ft.js} +1 -1
- package/cli/dist/web-ui/assets/{cynefinDiagram-VND7K2PF-Dv6Zmhtn.js → cynefinDiagram-VND7K2PF-CwUkTYRJ.js} +1 -1
- package/cli/dist/web-ui/assets/{dagre-6A5THRUB-BXw-DIrk.js → dagre-6A5THRUB-imq76EvB.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-22UHCM2B-CEM0y4VB.js → diagram-22UHCM2B-D6X40BNF.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-3UASUU5V-C37c4owE.js → diagram-3UASUU5V-BAGu-xoK.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-ATOU4E4O-CwMqdqKd.js → diagram-ATOU4E4O-Bau6-_cd.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-CDSNMT55-CCvu6SXq.js → diagram-CDSNMT55-B_gSj1CQ.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-MLGK6HIB-BVC5UzMP.js → diagram-MLGK6HIB-DtjOKf5W.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-MPIPVDR6-Z4Z6pbme.js → diagram-MPIPVDR6-DKpCExAd.js} +1 -1
- package/cli/dist/web-ui/assets/{ebnfDiagram-ZINNZB2B-Cr_HAq8w.js → ebnfDiagram-ZINNZB2B-CfcrpyEn.js} +1 -1
- package/cli/dist/web-ui/assets/editor-store-Blg4uQOv.js +1 -0
- package/cli/dist/web-ui/assets/{editor.main-Bl4koZLn.js → editor.main-DN_f9LKG.js} +2 -2
- package/cli/dist/web-ui/assets/{elk-276RUBZZ-Ba_yREbp.js → elk-276RUBZZ-CD68Npsk.js} +1 -1
- package/cli/dist/web-ui/assets/{erDiagram-OPXOYQCR-BHIIiSOb.js → erDiagram-OPXOYQCR-Dac_yzx-.js} +1 -1
- package/cli/dist/web-ui/assets/eventmodeling-NTZA5JFV-B4vyfz2V.js +1 -0
- package/cli/dist/web-ui/assets/flowDiagram-KWPJA3E3-CTPazQ3b.js +1 -0
- package/cli/dist/web-ui/assets/{ganttDiagram-FUAMR5RP-DRqXu2y_.js → ganttDiagram-FUAMR5RP-CnzBy-MF.js} +1 -1
- package/cli/dist/web-ui/assets/{gitGraph-4MIJSDKK-CDUxreLr.js → gitGraph-4MIJSDKK-Cti7JMrx.js} +1 -1
- package/cli/dist/web-ui/assets/{gitGraphDiagram-X574FWY7-D_pevNQM.js → gitGraphDiagram-X574FWY7-Ca-Bhj9A.js} +1 -1
- package/cli/dist/web-ui/assets/{htmlMode-CtfNOufS.js → htmlMode-CXTjKwZH.js} +1 -1
- package/cli/dist/web-ui/assets/{index-DjmXTtkg.js → index-BpOOpuFE.js} +24 -24
- package/cli/dist/web-ui/assets/{index-eJbaRn4N.css → index-CCBPB5wI.css} +1 -1
- package/cli/dist/web-ui/assets/{info-A6RAGUB7-DKs9ey1f.js → info-A6RAGUB7-DtnKFkf6.js} +1 -1
- package/cli/dist/web-ui/assets/{infoDiagram-VRGFBTTK-ttR9beux.js → infoDiagram-VRGFBTTK-8-ygnHvK.js} +1 -1
- package/cli/dist/web-ui/assets/{ishikawaDiagram-OU5B5YK6-BsGLX4ir.js → ishikawaDiagram-OU5B5YK6-MtI_3loI.js} +1 -1
- package/cli/dist/web-ui/assets/{journeyDiagram-ZHPQQLJL-DfcVaH-l.js → journeyDiagram-ZHPQQLJL-C1pEcKrV.js} +1 -1
- package/cli/dist/web-ui/assets/{jsonMode-xFOggmDV.js → jsonMode-Djy1Rr3R.js} +1 -1
- package/cli/dist/web-ui/assets/{kanban-definition-PNTS6WVX-DOchkWZm.js → kanban-definition-PNTS6WVX-Dl1vPCGL.js} +1 -1
- package/cli/dist/web-ui/assets/{line-DETE2hW4.js → line-DYx7bzb-.js} +1 -1
- package/cli/dist/web-ui/assets/loader-circle-DMJ3TNFX.js +1 -0
- package/cli/dist/web-ui/assets/{mermaid-parser.core-DueNRX0J.js → mermaid-parser.core-Dfro3TeE.js} +3 -3
- package/cli/dist/web-ui/assets/{mermaid.core-Bfd5jjED.js → mermaid.core-Cw7uJiTm.js} +4 -4
- package/cli/dist/web-ui/assets/{mindmap-definition-NLK3R4M7-ByiTn8sD.js → mindmap-definition-NLK3R4M7-BGZKy0nf.js} +1 -1
- package/cli/dist/web-ui/assets/minus-BhhDG2Lu.js +1 -0
- package/cli/dist/web-ui/assets/{packet-AYTQ26CC-D8pY4yWL.js → packet-AYTQ26CC-BjP64gmo.js} +1 -1
- package/cli/dist/web-ui/assets/{pegDiagram-GJSIUBJH-BNZgP4BS.js → pegDiagram-GJSIUBJH-BKGi-Vx_.js} +1 -1
- package/cli/dist/web-ui/assets/{pie-WAS4IAKB-yCTqnKha.js → pie-WAS4IAKB-DNcbgavt.js} +1 -1
- package/cli/dist/web-ui/assets/{pieDiagram-5QR66LMP-COI5MYlw.js → pieDiagram-5QR66LMP-CRsCESlW.js} +1 -1
- package/cli/dist/web-ui/assets/power-D5c2r8bL.js +1 -0
- package/cli/dist/web-ui/assets/{quadrantDiagram-O4NWA36T-C9vh0U8J.js → quadrantDiagram-O4NWA36T-C20gUetR.js} +1 -1
- package/cli/dist/web-ui/assets/{radar-RG4KPBEZ-DuxjmRFd.js → radar-RG4KPBEZ-k6KS4Xcs.js} +1 -1
- package/cli/dist/web-ui/assets/{railroad-74A4TZTK-D1zJ5eh9.js → railroad-74A4TZTK-DaY42910.js} +1 -1
- package/cli/dist/web-ui/assets/railroad-abnf-HS5TGJTU-DEqo2bsI.js +1 -0
- package/cli/dist/web-ui/assets/railroad-ebnf-LZEXJU2U-LmaqVV91.js +1 -0
- package/cli/dist/web-ui/assets/railroad-peg-WCYAUIDC-DLSbwPRk.js +1 -0
- package/cli/dist/web-ui/assets/{railroadDiagram-XR7U4H2S-DK24EIlH.js → railroadDiagram-XR7U4H2S-D2Bh-Nfr.js} +1 -1
- package/cli/dist/web-ui/assets/{requirementDiagram-PLB6GJNP-BwDYpEau.js → requirementDiagram-PLB6GJNP-RTHwzWPi.js} +1 -1
- package/cli/dist/web-ui/assets/{sankeyDiagram-IPEJSGJF-BNv_5Q2v.js → sankeyDiagram-IPEJSGJF-CqHocAxy.js} +1 -1
- package/cli/dist/web-ui/assets/{sequenceDiagram-PO4LG4MO-CEtMyLz6.js → sequenceDiagram-PO4LG4MO-CSwufv-x.js} +1 -1
- package/cli/dist/web-ui/assets/{server-Q7pQBAE5.js → server-BuZxFT0a.js} +1 -1
- package/cli/dist/web-ui/assets/{sidebar-store-CvzMkq6f.js → sidebar-store-3QpbYea6.js} +1 -1
- package/cli/dist/web-ui/assets/{stateDiagram-v2-GCMORJYK-B2BY1fS_.js → stateDiagram-v2-GCMORJYK-pFqV7_Zb.js} +1 -1
- package/cli/dist/web-ui/assets/{swimlanes-2SLR337P-ixWa4KE_.js → swimlanes-2SLR337P-DaWBt7Lj.js} +1 -1
- package/cli/dist/web-ui/assets/swimlanesDiagram-TC7HE7FX-DX8ARx_Z.js +8 -0
- package/cli/dist/web-ui/assets/{terminal-store-Xi1yCfd3.js → terminal-store-D-LqdJvw.js} +1 -1
- package/cli/dist/web-ui/assets/{theme-store-DWPbKZvD.js → theme-store-CqQSvskl.js} +1 -1
- package/cli/dist/web-ui/assets/{timeline-definition-EJHVYXUP-Cpt947ab.js → timeline-definition-EJHVYXUP-B43ZSF6y.js} +1 -1
- package/cli/dist/web-ui/assets/{timer-BHQhurL_.js → timer-BAQ2umUA.js} +1 -1
- package/cli/dist/web-ui/assets/{treeView-Q6P3EWNA-BQ3LazHB.js → treeView-Q6P3EWNA-oIsNCNsl.js} +1 -1
- package/cli/dist/web-ui/assets/{treemap-WGGIJYW6-BbR-xMk6.js → treemap-WGGIJYW6-B400PajI.js} +1 -1
- package/cli/dist/web-ui/assets/{triangle-alert-WjtfYfYJ.js → triangle-alert-CN8J_Is1.js} +1 -1
- package/cli/dist/web-ui/assets/{tsMode-BpDvtbZK.js → tsMode-CrZsOUgJ.js} +1 -1
- package/cli/dist/web-ui/assets/{use-i18n-MMMenVt5.js → use-i18n-DlLRPsc-.js} +2 -2
- package/cli/dist/web-ui/assets/{usecaseDiagram-POWQR4AR-C6X3CkC6.js → usecaseDiagram-POWQR4AR-DWlCxAa0.js} +1 -1
- package/cli/dist/web-ui/assets/{vennDiagram-UO4OBE2U-BTiBxYz7.js → vennDiagram-UO4OBE2U-D60dhYQw.js} +1 -1
- package/cli/dist/web-ui/assets/{wardley-WFR3VGLG-C67dbKMe.js → wardley-WFR3VGLG-B9kziP5e.js} +1 -1
- package/cli/dist/web-ui/assets/{wardleyDiagram-VNRHLVJA-vND6K9Hc.js → wardleyDiagram-VNRHLVJA-BDeiHHVr.js} +1 -1
- package/cli/dist/web-ui/assets/{workspace-dock-store-C1EdQIX7.js → workspace-dock-store-BWdYgtTV.js} +1 -1
- package/cli/dist/web-ui/assets/{xychartDiagram-PMCCYNJV-D7YkFdtZ.js → xychartDiagram-PMCCYNJV-BRuPf9LJ.js} +1 -1
- package/cli/dist/web-ui/assets/{zap-CKcwREma.js → zap-BOFIyE9u.js} +1 -1
- package/cli/dist/web-ui/docs/cn%2Fcli%2Ftools-reference.md +1 -12
- package/cli/dist/web-ui/docs/en%2Fcli%2Ftools-reference.md +1 -12
- package/cli/dist/web-ui/index.html +10 -10
- package/cli/dist/web-ui/sw.js +1 -1
- package/cli/dist-server/4099.codebuddy.js +1 -1
- package/cli/dist-server/6929.codebuddy.js +20 -20
- package/cli/dist-server/9452.codebuddy.js +1 -1
- package/cli/dist-server/codebuddy.js +28 -29
- package/cli/dist-server/types/node/agent/interceptors/file-interceptors.d.ts +7 -0
- package/cli/dist-server/types/node/agent/main-agent-acp-handler.d.ts +2 -6
- package/cli/dist-server/types/node/agent-home/agent-home-audit.d.ts +0 -10
- package/cli/dist-server/types/node/agent-home/agent-home-channel-wake.d.ts +5 -4
- package/cli/dist-server/types/node/agent-view/agent-view-protocol.d.ts +0 -7
- package/cli/dist-server/types/node/cli/result-message-utils.d.ts +2 -21
- package/cli/dist-server/types/node/cli/stream-json-protocol.d.ts +1 -15
- package/cli/dist-server/types/node/cli/stream-json-transformers.d.ts +18 -1
- package/cli/dist-server/types/node/product/custom-agents-product-provider.d.ts +0 -2
- package/cli/dist-server/types/node/sandbox-cli/sandbox-rule-sync-service.d.ts +0 -36
- package/cli/dist-server/types/node/tools/bash-sandbox-approval-requester.d.ts +3 -3
- package/cli/dist-server/types/vendor/cbc-core/node/agent/agent-protocol.d.ts +11 -0
- package/cli/dist-server/types/vendor/cbc-core/node/agent/tool-call-loop-guard-protocol.d.ts +1 -1
- package/cli/dist-server/types/vendor/cbc-core/node/agent/tool-call-loop-pattern.d.ts +4 -15
- package/cli/dist-server/types/vendor/cbc-core/node/session/session-manager.d.ts +3 -7
- package/cli/dist-server/types/vendor/cbc-core/node/session/session-protocol.d.ts +4 -15
- package/cli/package.json +4 -4
- package/cli/product.cloudhosted.json +2 -2
- package/cli/product.internal.json +40 -256
- package/cli/product.ioa.json +148 -330
- package/cli/product.json +348 -275
- package/cli/product.selfhosted.json +2 -2
- package/package.json +1 -1
- package/cli/dist/web-ui/assets/EditorView-CJo0ut5K.js +0 -1
- package/cli/dist/web-ui/assets/architecture-7GRP2DOG-B95GLHT6.js +0 -1
- package/cli/dist/web-ui/assets/channel-Gu24lxR8.js +0 -1
- package/cli/dist/web-ui/assets/editor-store-B2rjeVEb.js +0 -1
- package/cli/dist/web-ui/assets/eventmodeling-NTZA5JFV-CoSCRXQS.js +0 -1
- package/cli/dist/web-ui/assets/flowDiagram-KWPJA3E3-CSdMMRmM.js +0 -1
- package/cli/dist/web-ui/assets/loader-circle-X7QX5eW3.js +0 -1
- package/cli/dist/web-ui/assets/minus-DZ7DOgqg.js +0 -1
- package/cli/dist/web-ui/assets/power-dW3ZbrXE.js +0 -1
- package/cli/dist/web-ui/assets/railroad-abnf-HS5TGJTU-DDIuOD1u.js +0 -1
- package/cli/dist/web-ui/assets/railroad-ebnf-LZEXJU2U-DTu9l4x4.js +0 -1
- package/cli/dist/web-ui/assets/railroad-peg-WCYAUIDC-ChYiJUKJ.js +0 -1
- package/cli/dist/web-ui/assets/swimlanesDiagram-TC7HE7FX-CcWz7WPz.js +0 -8
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
(()=>{"use strict";var e={278(e,t,r){let i,o,n,a;(0,r(188).install)();let s=require("path");var c=r.n(s);let l=new Set(["TRACEPARENT","TRACESTATE","BAGGAGE","CODEBUDDY_CONVERSATION_REQUEST_ID","CODEBUDDY_CONVERSATION_MESSAGE_ID","CODEBUDDY_ROOT_REQUEST_ID","CODEBUDDY_TOOL_CALL_ID","CODEBUDDY_SANDBOX_BROKER_TOOL_CALL_ID","CODEBUDDY_SANDBOX_BROKER_TRACE_ID"]);function d(e,t=process.platform){for(let r of Object.keys(e)){let i="win32"===t?r.toUpperCase():r;l.has(i)&&delete e[r]}}let u=require("crypto"),p=require("fs");var
|
|
2
|
-
`)),i.on("data",e=>{if((o+=e.toString()).length>8192)return void a({ok:!1,error:"control response too large",code:"ETOOLARGE"});let t=o.indexOf("\n");if(!(t<0))try{let e=JSON.parse(o.slice(0,t));if(!e||"boolean"!=typeof e.ok)return void a({ok:!1,error:"malformed response",code:"EBADREQ"});if(void 0!==e.protocolVersion&&1!==e.protocolVersion)return void a({ok:!1,error:"unsupported broker protocol version",code:"EBADREQ"});a(e)}catch{a({ok:!1,error:"malformed response",code:"EBADREQ"})}}),i.on("close",()=>a({ok:!1,error:"broker closed the connection",code:"ENOJOB"})),i.on("error",e=>a({ok:!1,error:e.message,code:"ENOJOB"}))})}async function G(e,t){return!!e.attachSocket&&!!Number.isInteger(e.pid)&&!!e.pid&&!(e.pid<=0)&&e.workerGeneration===e.pid&&!!e.sessionId&&!!e.createdAt&&(await U(e.attachSocket,{op:"request-reclaim",...t?{reason:t}:{},pid:e.pid,workerGeneration:e.workerGeneration,sessionId:e.sessionId,createdAt:e.createdAt,idleSince:e.idleSince,firstTerminalAt:e.firstTerminalAt})).ok}let M=require("node:process"),q=require("node:util");var Y=r(760);let W=require("node:url"),H=(e,t)=>e.at(-1)===t?e:H([...e,t],Y.resolve(t,".."));var
|
|
3
|
-
for await (const line of spawn(...)) { ... }`);t.isIterating=!0;try{let{[r]:t}=await e.nodeChildProcess;if(!t)return;let i="";for await(let e of t.iterator({destroyOnReturn:!1})){let t=`${i}${e}`.split(/\r?\n/);i=t.pop(),yield*t}i&&(yield i)}finally{await e}},ev=async function*(...e){try{let t=[];for(;e.length>0;){t=e.map((e,r)=>t[r]??eD(e));let[{value:r,done:i},o]=await Promise.race(t.map((e,t)=>Promise.all([e,t]))),[n]=e.splice(o,1);t.splice(o,1),i||(e.push(n),yield r)}}finally{await Promise.all(e.map(e=>e.return()))}},eD=async e=>{try{return await e.next()}catch(t){await e.throw(t)}};function eE(e,t,r,i){let o,[n=[],a={}]=Array.isArray(t)?[t,r]:[[],t],s=(o=[e,...n],{start:M.hrtime.bigint(),command:o.map(e=>{let t;return t=(0,q.stripVTControlCharacters)(e),/[^\w./-]/.test(t)?`'${t.replaceAll("'","'\\''")}'`:t}).join(" "),state:{stdout:"",stderr:"",output:""}}),c=(({stdin:e,stdout:t,stderr:r,stdio:i=[e,t,r],env:o,preferLocal:n,cwd:a=".",...s})=>{let c=a instanceof URL?(0,W.fileURLToPath)(a):Y.resolve(a),l=o?{...M.env,...o}:void 0,d=i[0]?.string;return{...s,input:d,stdio:void 0===d?i:["pipe",...i.slice(1)],env:n?(({Path:e="",PATH:t=e,...r},i)=>{let o=t.split(Y.delimiter),n=H([],Y.resolve(i)).map(e=>Y.join(e,"node_modules/.bin")).filter(e=>!o.includes(e));return{...r,PATH:[...n,t].filter(Boolean).join(Y.delimiter)}})(l??M.env,c):l,cwd:c}})(a),l=ef(e,n,c,s),d=en(l,c,s);Object.assign(d,{nodeChildProcess:l});let u=eS(d=i?eb([i,d]):d,s,"stdout"),p=eS(d,s,"stderr");return Object.assign(d,{nodeChildProcess:l,stdout:u,stderr:p,[Symbol.asyncIterator]:()=>ev(u,p),pipe:(e,t,r)=>eE(e,t,r,d)})}function eT(e){let t=function(e){if(e&&/^\d+$/.test(e))try{let t=Number(BigInt(e)/10000n-11644473600000n);return Number.isFinite(t)?t:void 0}catch{return}}(e.procStartFt);if(void 0!==t)return t;let r=e.procStart?Date.parse(e.procStart):NaN;return Number.isFinite(r)?r:void 0}function eO(e){let t=e.lastIndexOf(")");if(t<0)return;let r=e.slice(t+1).trim().split(/\s+/)[19];return/^\d+$/.test(r||"")?r:void 0}async function eI(){if(n)return n;a??=Promise.all([(0,f.readFile)("/proc/stat","utf8"),(0,f.readFile)("/proc/self/auxv")]).then(([e,t])=>{let r=function(e){let t=/^btime\s+(\d+)$/m.exec(e);if(!t)return;let r=Number(t[1]);return Number.isSafeInteger(r)?1e3*r:void 0}(e),i=function(e,t="ia32"===process.arch||"arm"===process.arch?4:8,r=(0,y.endianness)()){let i=2*t;if(4!==t&&8!==t||e.length<i)return;let o=i=>8===t?"LE"===r?e.readBigUInt64LE(i):e.readBigUInt64BE(i):BigInt("LE"===r?e.readUInt32LE(i):e.readUInt32BE(i));for(let r=0;r+i<=e.length;r+=i){let e=o(r);if(0n===e)break;if(e===BigInt(17)){let e=Number(o(r+t));return Number.isSafeInteger(e)&&e>0?e:void 0}}}(t);return void 0!==r&&void 0!==i?{bootTimeMs:r,ticksPerSecond:i}:void 0}).catch(()=>void 0);let e=await a;return a=void 0,e&&(n=e),e}function eA(e=process.platform){let t=Date.now()-1e3*process.uptime(),r="linux"===e?function(e){try{return eO((0,p.readFileSync)(`/proc/${e}/stat`,"utf8"))}catch{return}}(process.pid):void 0;return{procStart:new Date(t).toISOString(),..."win32"===e?{procStartFt:((BigInt(Math.round(t))+11644473600000n)*10000n).toString()}:{},...r?{procStartTicks:r}:{}}}async function eN(e,t=e=>(0,f.readFile)(e,"utf8"),r=eI){try{let i=eO(await t(`/proc/${e}/stat`));if(!i)return;let o=await r();if(!o)return;let n=o.bootTimeMs+1e3*Number(i)/o.ticksPerSecond;return{procStartTicks:i,...Number.isFinite(n)?{procStart:new Date(n).toISOString()}:{}}}catch{return}}function e_(e){try{return process.kill(e,0),!0}catch(e){return e?.code!=="ESRCH"}}async function eR(e,t=process.platform){if(Number.isSafeInteger(e)&&!(e<=0))try{if("linux"===t)return eN(e);if("win32"===t){let t=`$target = Get-CimInstance Win32_Process -Filter "ProcessId = ${e}" -ErrorAction Stop; if ($null -eq $target) { exit 3 }; $started = $target.CreationDate.ToUniversalTime(); [Console]::Out.Write($started.ToString('o') + '|' + $started.ToFileTimeUtc().ToString())`,r=await eE("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{timeout:5e3,env:{...process.env,NODE_OPTIONS:""}}),[i,o]=String(r.stdout||"").trim().split("|");if(!Number.isFinite(Date.parse(i))||!/^\d+$/.test(o||""))return;return{procStart:i,procStartFt:o}}let r={...process.env,NODE_OPTIONS:"",LC_ALL:"C",LANG:"C"},i=await eE("ps",["-o","lstart=","-p",String(e)],{timeout:5e3,env:r}),o=String(i.stdout||"").trim();if(Number.isFinite(Date.parse(o)))return{procStart:o};let n=await eE("ps",["-o","etime=","-p",String(e)],{timeout:5e3,env:r}),a=function(e){let t=String(e||"").trim();if(!t)return;let r=0,i=t,o=t.indexOf("-");if(o>=0&&(r=Number(t.slice(0,o)),i=t.slice(o+1),!Number.isFinite(r)||r<0))return;let n=i.split(":").map(e=>Number(e));if(!(n.length<2||n.length>3||n.some(e=>!Number.isFinite(e)||e<0)))return(86400*r+(2===n.length?60*n[0]+n[1]:3600*n[0]+60*n[1]+n[2]))*1e3}(String(n.stdout||""));if(void 0===a)return;return{procStart:new Date(Date.now()-a).toISOString()}}catch{return}}function ex(e){if(!e||"object"!=typeof e)return{};let t="string"==typeof e.procStart?e.procStart:"string"==typeof e.processStart?e.processStart:void 0,r="string"==typeof e.procStartFt?e.procStartFt:"number"==typeof e.procStartFt&&Number.isFinite(e.procStartFt)?e.procStartFt.toFixed(0):void 0,i="string"==typeof e.procStartTicks?e.procStartTicks:"number"==typeof e.procStartTicks&&Number.isFinite(e.procStartTicks)?e.procStartTicks.toFixed(0):void 0;return{...t?{procStart:t}:{},...r?{procStartFt:r}:{},...i?{procStartTicks:i}:{}}}function eJ(e){return!!(e?.procStart||e?.procStartFt||e?.procStartTicks)}function eP(e){return{procStart:e?.procStart,procStartFt:e?.procStartFt,procStartTicks:e?.procStartTicks}}async function ej(e,t,r=eB,i={}){if(void 0===e||!Number.isSafeInteger(e)||e<=0||!r(e))return!1;let o=ex(t);if(!eJ(o))return!0;let n=e===process.pid?(i.currentIdentity??eA)():await (i.queryIdentity??eR)(e);return!!r(e)&&(!(n&&eJ(n))||"different"!==function(e,t){if(e.procStartTicks&&t.procStartTicks&&e.procStartTicks!==t.procStartTicks)return"different";let r=eT(e),i=eT(t);return void 0!==r&&void 0!==i?2e3>=Math.abs(i-r)?"same":"different":"unknown"}(o,n))}function eB(e){try{return process.kill(e,0),!0}catch(e){return e?.code!=="ESRCH"}}let e$={procStart:null,procStartFt:null,procStartTicks:null},eC="session ended — press enter to restart it",eF=new Set(["done","failed","stopped"]);function eL(e){return!e.name&&""===(e.intent??"").trim()&&!e.worktreePath&&!e.exec&&"working"===e.state&&"blocked"===e.tempo}function eU(e){let t=eF.has(e.state)?e.idleSince??e.firstTerminalAt??e.updatedAt:e.idleSince;if(!t)return;let r=Date.parse(t);return Number.isFinite(r)?r:void 0}function eG(e,t=Date.now(),r=36e5){if(!e.attachedAt)return!1;let i=Date.parse(e.attachedAt);return Number.isFinite(i)&&t-i<r}function eM(e,t,r,i=!1){var o;if(e.exec||e.workerLaunchToken||"active"===(o=e).tempo||"blocked"===o.tempo||"blocked"===o.state||!(eF.has(e.state)||"idle"===e.tempo)||e.pid===process.pid||eG(e,r)&&void 0!==e.pid&&t.isProcessRunning(e.pid)||e.sessionId&&t.isSessionInUse?.(e.sessionId))return!1;let n=eU(e);return void 0!==n&&r-n>=(i?6e4:6e5)}function eq(e,t){return t.sessionId===e.sessionId&&t.createdAt===e.createdAt&&t.pid===e.pid&&t.workerGeneration===e.workerGeneration}async function eY(e,t){await e.setBrokerEndpoint(t,void 0).catch(()=>{})}function eW(e,t){return eF.has(e.state)?{pid:void 0,attachSocket:void 0,workerReclaimGeneration:void 0,...e$}:{state:"done",tempo:"idle",detail:e.detail&&"resuming…"!==e.detail?e.detail:"parked — press enter to continue",firstTerminalAt:e.firstTerminalAt??t,idleSince:e.idleSince??t,pid:void 0,attachSocket:void 0,workerReclaimGeneration:void 0,...e$}}async function eH(e,t,r=!1){let i=await e.store.read(t.id).catch(()=>void 0);if(e.signal?.aborted||!i||!eq(t.state,i)||!eM(i,e,(e.now??Date.now)(),r)||!await (e.reclaimWorker?e.reclaimWorker(i):G(i,r?"memory-pressure":void 0)).catch(()=>!1)||e.signal?.aborted)return;let o=new Date((e.now??Date.now)()).toISOString();await e.store.patchIf(t.id,eW(i,o),t=>!e.signal?.aborted&&eq(i,t)&&void 0!==t.pid&&!e.isProcessRunning(t.pid)&&eM(t,e,(e.now??Date.now)(),r)).catch(()=>!1)&&await eY(e.store,t.id)}async function eK(e){let t=e.now??Date.now,r=[],i=[],o=e.records??await e.store.list().catch(()=>[]),n=(t,r,i)=>{var o,n;let a,s;return!e.signal?.aborted&&eq(t,r)&&(o=t,n=r,a=ex(o),s=ex(n),!a.procStart&&!a.procStartFt&&!a.procStartTicks||a.procStart===s.procStart&&a.procStartFt===s.procStartFt&&a.procStartTicks===s.procStartTicks)&&!r.workerLaunchToken&&void 0!==r.pid&&i&&!e.isSessionInUse?.(r.sessionId)},a=!0===e.reclaimLiveIdle&&e.memoryBudget?.().pressured===!0,s=!1;for(let c of a?[...o].sort((e,t)=>(eU(e.state)??1/0)-(eU(t.state)??1/0)):o){if(e.signal?.aborted)break;let o=c.state,l=o.workerLaunchOwnerPid;if(o.workerLaunchToken&&Number.isSafeInteger(l)&&l>0&&!e_(l)){let t=o;if(!await e.store.patchIf(c.id,{workerLaunchToken:void 0,workerLaunchOwnerPid:void 0},r=>!e.signal?.aborted&&eq(t,r)&&r.workerLaunchToken===t.workerLaunchToken&&r.workerLaunchOwnerPid===l&&!e_(l)).catch(()=>!1))continue;let r=await e.store.read(c.id).catch(()=>void 0);if(!r||!eq(t,r))continue;o=r}if(!("number"==typeof o.pid&&o.pid>0)){o.attachedAt&&await e.store.patchIf(c.id,{attachedAt:null},t=>!e.signal?.aborted&&t.attachedAt===o.attachedAt&&t.sessionId===o.sessionId&&t.createdAt===o.createdAt&&void 0===t.pid).catch(()=>!1);let i=o.idleSince?Date.parse(o.idleSince):NaN;!eF.has(o.state)&&Number.isFinite(i)&&t()-i>=864e5&&await e.store.patchIf(c.id,{state:"done",tempo:"idle",detail:eC,firstTerminalAt:o.firstTerminalAt??new Date(t()).toISOString()},t=>!e.signal?.aborted&&void 0===t.pid&&t.state===o.state&&t.sessionId===o.sessionId&&t.createdAt===o.createdAt).catch(()=>!1)&&r.push(c.id);continue}let d=e.isJobProcessAlive?await e.isJobProcessAlive(o.pid,ex(o)):await ej(o.pid,ex(o),e.isProcessRunning),u=!d;if(!d&&o.exec){let a=o.firstTerminalAt?Date.parse(o.firstTerminalAt):void 0;if(void 0!==a&&Number.isFinite(a)&&t()-a>=3e5){await e.store.removeIf(c.id,e=>n(o,e,u)&&!!e.exec&&e.firstTerminalAt===o.firstTerminalAt).catch(()=>!1)&&i.push(c.id);continue}!eF.has(o.state)&&await e.store.patchIf(c.id,{state:"done",tempo:"idle",detail:"command exited — output in logs",firstTerminalAt:o.firstTerminalAt??new Date(t()).toISOString()},e=>n(o,e,u)&&!!e.exec&&!eF.has(e.state)&&e.firstTerminalAt===o.firstTerminalAt).catch(()=>!1)&&r.push(c.id);continue}if(!d&&eL(o)){let r=t()-Date.parse(o.createdAt);if(Number.isFinite(r)&&r>=3e5){await e.store.removeIf(c.id,e=>n(o,e,u)&&eL(e)).catch(()=>!1)&&i.push(c.id);continue}}let p=a&&!s;if(!0===e.reclaimLiveIdle&&d&&eM(o,e,t(),p)){let r=!eM(o,e,t());r&&(s=!0),await eH(e,{id:c.id,state:o},r);continue}if(!d){if(eF.has(o.state)){await e.store.patchIf(c.id,{pid:void 0,attachSocket:void 0,workerReclaimGeneration:void 0,...e$},e=>n(o,e,u)&&eF.has(e.state)&&e.firstTerminalAt===o.firstTerminalAt).catch(()=>!1)&&await eY(e.store,c.id);continue}if(void 0!==o.workerReclaimGeneration&&o.workerReclaimGeneration===o.workerGeneration){let r=new Date(t()).toISOString();await e.store.patchIf(c.id,eW(o,r),e=>n(o,e,u)&&!eF.has(e.state)&&void 0!==e.workerReclaimGeneration&&e.workerReclaimGeneration===e.workerGeneration&&e.firstTerminalAt===o.firstTerminalAt).catch(()=>!1)&&await eY(e.store,c.id);continue}await e.store.patchIf(c.id,{state:"failed",tempo:"idle",detail:eC,firstTerminalAt:o.firstTerminalAt??new Date(t()).toISOString(),pid:void 0,attachSocket:void 0,workerReclaimGeneration:void 0,...e$},e=>n(o,e,u)&&!eF.has(e.state)&&e.firstTerminalAt===o.firstTerminalAt&&(void 0===e.workerReclaimGeneration||e.workerReclaimGeneration!==e.workerGeneration)).catch(()=>!1)&&(r.push(c.id),await eY(e.store,c.id))}}return{settled:r,removed:i}}async function eQ(e){var t,r;let i,{pty:o,socketPath:n}=e,a=e.cols,s=e.rows,c=!1,l=!1,d=new Set,u=e=>{e.syncTimer&&(clearTimeout(e.syncTimer),e.syncTimer=void 0)},p=(e,t)=>{i?.socket===e&&(u(i),i=void 0,e.destroyed||(t&&e.write(`\r
|
|
1
|
+
(()=>{"use strict";var e={278(e,t,r){let i,o,n,a;(0,r(188).install)();let s=require("path");var c=r.n(s);let l=new Set(["TRACEPARENT","TRACESTATE","BAGGAGE","CODEBUDDY_CONVERSATION_REQUEST_ID","CODEBUDDY_CONVERSATION_MESSAGE_ID","CODEBUDDY_ROOT_REQUEST_ID","CODEBUDDY_TOOL_CALL_ID","CODEBUDDY_SANDBOX_BROKER_TOOL_CALL_ID","CODEBUDDY_SANDBOX_BROKER_TRACE_ID"]);function d(e,t=process.platform){for(let r of Object.keys(e)){let i="win32"===t?r.toUpperCase():r;l.has(i)&&delete e[r]}}let u=require("crypto"),p=require("fs");var f=r.n(p);let h=require("fs/promises"),w=require("net"),m=require("module"),y=require("os");var b=r.n(y);let g=Symbol.for("codebuddy.ai/agent-harness/embedded-node-pty-loader");function k(e){let t="function"==typeof e?.spawn?e:e?.default;if("object"!=typeof t||null===t||"function"!=typeof t.spawn)throw Error("Loaded node-pty runtime does not export spawn()");return t}async function S(){let e=function(){let e=globalThis[g];if(void 0!==e){if("function"!=typeof e)throw Error("Embedded node-pty loader is invalid");return e}}();return void 0===e?void 0:k(await e())}async function v(){let e=await S();if(void 0!==e)return e;let t=k(await import("@lydell/node-pty"));return"win32"===process.platform?{...t,spawn(...e){let r=t.spawn(...e),i=r.kill.bind(r),o=!1;return r.kill=e=>{if(!o){o=!0;try{i(e)}catch(e){throw o=!1,e}}},r.onExit(()=>{queueMicrotask(()=>{try{r.kill()}catch(e){console.warn("[node-pty] Windows exit cleanup failed",e)}})}),r}}:t}let D=()=>"win32"===b().platform(),E=!1,T=async()=>{if(D()&&18309>function(e=y.release()){let t=Number(e.split(".")[2]||0);return Number.isFinite(t)?t:0}())return null;try{let e=await S();if(void 0!==e)return{module:e,name:"bun-native-pty"}}catch(e){return null}if(D())try{let e=await v();if(!function(){let e=`@lydell/node-pty-${process.platform}-${process.arch}`,t=(0,m.createRequire)(__filename),r=null;try{r=t.resolve(`${e}/lib/index.js`)}catch{try{r=t.resolve(e)}catch{r=null}}if(!r)return!1;let i=c().join(c().dirname(r),"worker","conoutSocketWorker.js");try{return f().existsSync(i)}catch{return!1}}())return E||(E=!0,console.warn("[pty-runtime] @lydell/node-pty-"+process.platform+"-"+process.arch+"/lib/worker/conoutSocketWorker.js is missing on disk; falling back to child_process for shell execution. This usually means the package install is corrupted — try reinstalling.")),null;return{module:e,name:"lydell-node-pty"}}catch(e){return null}if("u">typeof Bun)return{module:{spawn(e,t,r){let i=null,o=[],n=Bun.spawn([e,...t],{cwd:r?.cwd,env:r?.env,terminal:{cols:r?.cols||80,rows:r?.rows||24,name:r?.name||"xterm-256color",data(e,t){let r=t.toString();i?i(r):o.push(r)}}});return{get pid(){return n.pid},onData(e){for(let t of(i=e,o))e(t);o.length=0},onExit(e){n.exited.then(t=>e({exitCode:t??0}))},write(e){n.terminal?.write(e)},resize(e,t){n.terminal?.resize(e,t)},kill(e){n.kill(e)}}}},name:"bun-native-pty"};if(function(){if("linux"!==b().platform())return!1;try{if(f().readdirSync("/lib").some(e=>e.startsWith("ld-musl-")))return!0}catch{}return!1}())return null;try{return{module:await v(),name:"lydell-node-pty"}}catch(e){return null}};Symbol("JobStore"),Symbol("JobStateReporter"),Symbol("JobTerminalBroker"),Symbol("JobInboxConsumer"),Symbol("JobAdoptConsumer"),Symbol("JobOrphanWatchdog");let O="CODEBUDDY_JOB_ID",I="CODEBUDDY_JOB_GENERATION",A="CODEBUDDY_JOB_LAUNCH_TOKEN",N="CODEBUDDY_JOB_BROKER",_="CODEBUDDY_JOB_CONTROL_SOCKET",R="state.json",x="broker.json",J="stateOrder",P="pins.json",j="pending-reply.json",B="Background sessions need a PTY, which is unavailable on this platform",C=[O,A,I,_,N,"CODEBUDDY_JOB_INNER_ENTRY","CODEBUDDY_JOB_RECLAIM_TOKEN"],$=!1,F=!1;function L(e){return e?.trim()||void 0}function U(e,t){return new Promise(r=>{let i=(0,w.createConnection)(e),o="",n=!1,a=e=>{n||(n=!0,clearTimeout(s),i.destroy(),r(e))},s=setTimeout(()=>{a({ok:!1,error:"control request timed out",code:"ENOJOB"})},5e3);s.unref?.(),i.on("connect",()=>i.write(`${JSON.stringify({protocolVersion:1,...t})}
|
|
2
|
+
`)),i.on("data",e=>{if((o+=e.toString()).length>8192)return void a({ok:!1,error:"control response too large",code:"ETOOLARGE"});let t=o.indexOf("\n");if(!(t<0))try{let e=JSON.parse(o.slice(0,t));if(!e||"boolean"!=typeof e.ok)return void a({ok:!1,error:"malformed response",code:"EBADREQ"});if(void 0!==e.protocolVersion&&1!==e.protocolVersion)return void a({ok:!1,error:"unsupported broker protocol version",code:"EBADREQ"});a(e)}catch{a({ok:!1,error:"malformed response",code:"EBADREQ"})}}),i.on("close",()=>a({ok:!1,error:"broker closed the connection",code:"ENOJOB"})),i.on("error",e=>a({ok:!1,error:e.message,code:"ENOJOB"}))})}async function G(e,t){return!!e.attachSocket&&!!Number.isInteger(e.pid)&&!!e.pid&&!(e.pid<=0)&&e.workerGeneration===e.pid&&!!e.sessionId&&!!e.createdAt&&(await U(e.attachSocket,{op:"request-reclaim",...t?{reason:t}:{},pid:e.pid,workerGeneration:e.workerGeneration,sessionId:e.sessionId,createdAt:e.createdAt,idleSince:e.idleSince,firstTerminalAt:e.firstTerminalAt})).ok}let M=require("node:process"),q=require("node:util");var Y=r(760);let W=require("node:url"),H=(e,t)=>e.at(-1)===t?e:H([...e,t],Y.resolve(t,".."));var Q=r(421);let K=require("node:events"),V=require("node:fs/promises"),z=async(e,t,r)=>await X(e,r)?[eo(e),t.map(e=>ei(e)),{...r,shell:!0}]:[e,t,r],X=async(e,{shell:t,cwd:r,env:i=M.env})=>"win32"===M.platform&&!t&&!await Z(e,r,i),Z=async(e,t,{Path:r="",PATH:i=r})=>er.some(t=>e.toLowerCase().endsWith(t))||(ee[`${e}\0${t}\0${i}`]??=await et(e,t,i)),ee={},et=async(e,t,r)=>{let i=r.split(Y.delimiter).filter(Boolean).map(e=>e.replace(/^"(.*)"$/,"$1"));try{await Promise.all(er.flatMap(r=>[t,...i].map(t=>`${Y.resolve(t,e)}${r}`)).map(async e=>{try{await (0,V.stat)(e)}catch{return}throw 0}))}catch{return!0}return!1},er=[".exe",".com"],ei=e=>eo(eo(`"${e.replaceAll(/(\\*)"/g,'$1$1\\"').replace(/(\\*)$/,"$1$1")}"`)),eo=e=>e.replaceAll(/([()\][%!^"`<>&|;, *?])/g,"^$1"),en=async(e,{input:t},r)=>{let i=await e;void 0!==t&&i.stdin.end(t);let o=(0,K.once)(i,"close");try{return await Promise.race([o,...i.stdio.filter(Boolean).map(e=>ea(e))]),es(r,eu(i)),ep(r)}catch(e){throw await Promise.allSettled([o]),ec(e,i,r)}},ea=async e=>{for await(let[t]of(0,K.on)(e,"error"))if(!["ERR_STREAM_PREMATURE_CLOSE","EPIPE"].includes(t?.code))throw t},es=({command:e},{exitCode:t,signalName:r})=>{if(void 0!==r)throw new ed(`Command was terminated with ${r}: ${e}`);if(void 0!==t)throw new ed(`Command failed with exit code ${t}: ${e}`)},ec=(e,t,r)=>Object.assign(el(e,r),eu(t),ep(r)),el=(e,{command:t})=>e instanceof ed?e:new ed(`Command failed: ${t}`,{cause:e});class ed extends Error{name="SubprocessError"}let eu=({exitCode:e,signalCode:t})=>({...e<1?{}:{exitCode:e},...null===t?{}:{signalName:t}}),ep=({state:{stdout:e,stderr:t,output:r},command:i,start:o})=>({stdout:ef(e),stderr:ef(t),output:ef(r),command:i,durationMs:Number(M.hrtime.bigint()-o)/1e6}),ef=e=>"\n"===e.at(-1)?e.slice(0,"\r"===e.at(-2)?-2:-1):e,eh=async(e,t,r,i)=>{try{[e,t]=["node","node.exe"].includes(e.toLowerCase())?[M.execPath,[...M.execArgv.filter(e=>!e.startsWith("--inspect")),...t]]:[e,t],[e,t,r]=await z(e,t,r),[e,t,r]=ew(e,t,r);let o=(0,Q.spawn)(e,t,r);return em(o.stdout,i,"stdout"),em(o.stderr,i,"stderr"),o.once("error",()=>{}),await (0,K.once)(o,"spawn"),o}catch(e){throw ec(e,{},i)}},ew=(e,t,r)=>r.shell&&t.length>0?[[e,...t].join(" "),[],r]:[e,t,r],em=(e,{state:t},r)=>{e&&(e.setEncoding("utf8"),t.isIterating||(t.isIterating=!1,e.on("data",e=>{t[r]+=e,t.output+=e})))},ey=require("node:stream/promises"),eb=async e=>{let[[t,r]]=await Promise.all([Promise.allSettled(e),eg(e)]);if(r.reason)throw r.reason.pipedFrom=t.reason??t.value,r.reason;if(t.reason)throw t.reason;return{...r.value,pipedFrom:t.value}},eg=async e=>{try{let[{stdout:t},{stdin:r}]=await Promise.all(e.map(({nodeChildProcess:e})=>e));if(null===r)throw Error('The "stdin" option must be set on the first "spawn()" call in the pipeline.');if(null===t)throw Error('The "stdout" option must be set on the last "spawn()" call in the pipeline.');(0,ey.pipeline)(t,r).catch(()=>{})}catch(t){throw await Promise.allSettled(e.map(({nodeChildProcess:e})=>ek(e))),t}},ek=async e=>{let{stdin:t}=await e;t.end()},eS=async function*(e,{state:t},r){if(!1===t.isIterating)throw Error(`The subprocess must be iterated right away, for example:
|
|
3
|
+
for await (const line of spawn(...)) { ... }`);t.isIterating=!0;try{let{[r]:t}=await e.nodeChildProcess;if(!t)return;let i="";for await(let e of t.iterator({destroyOnReturn:!1})){let t=`${i}${e}`.split(/\r?\n/);i=t.pop(),yield*t}i&&(yield i)}finally{await e}},ev=async function*(...e){try{let t=[];for(;e.length>0;){t=e.map((e,r)=>t[r]??eD(e));let[{value:r,done:i},o]=await Promise.race(t.map((e,t)=>Promise.all([e,t]))),[n]=e.splice(o,1);t.splice(o,1),i||(e.push(n),yield r)}}finally{await Promise.all(e.map(e=>e.return()))}},eD=async e=>{try{return await e.next()}catch(t){await e.throw(t)}};function eE(e,t,r,i){let o,[n=[],a={}]=Array.isArray(t)?[t,r]:[[],t],s=(o=[e,...n],{start:M.hrtime.bigint(),command:o.map(e=>{let t;return t=(0,q.stripVTControlCharacters)(e),/[^\w./-]/.test(t)?`'${t.replaceAll("'","'\\''")}'`:t}).join(" "),state:{stdout:"",stderr:"",output:""}}),c=(({stdin:e,stdout:t,stderr:r,stdio:i=[e,t,r],env:o,preferLocal:n,cwd:a=".",...s})=>{let c=a instanceof URL?(0,W.fileURLToPath)(a):Y.resolve(a),l=o?{...M.env,...o}:void 0,d=i[0]?.string;return{...s,input:d,stdio:void 0===d?i:["pipe",...i.slice(1)],env:n?(({Path:e="",PATH:t=e,...r},i)=>{let o=t.split(Y.delimiter),n=H([],Y.resolve(i)).map(e=>Y.join(e,"node_modules/.bin")).filter(e=>!o.includes(e));return{...r,PATH:[...n,t].filter(Boolean).join(Y.delimiter)}})(l??M.env,c):l,cwd:c}})(a),l=eh(e,n,c,s),d=en(l,c,s);Object.assign(d,{nodeChildProcess:l});let u=eS(d=i?eb([i,d]):d,s,"stdout"),p=eS(d,s,"stderr");return Object.assign(d,{nodeChildProcess:l,stdout:u,stderr:p,[Symbol.asyncIterator]:()=>ev(u,p),pipe:(e,t,r)=>eE(e,t,r,d)})}function eT(e){let t=function(e){if(e&&/^\d+$/.test(e))try{let t=Number(BigInt(e)/10000n-11644473600000n);return Number.isFinite(t)?t:void 0}catch{return}}(e.procStartFt);if(void 0!==t)return t;let r=e.procStart?Date.parse(e.procStart):NaN;return Number.isFinite(r)?r:void 0}function eO(e){let t=e.lastIndexOf(")");if(t<0)return;let r=e.slice(t+1).trim().split(/\s+/)[19];return/^\d+$/.test(r||"")?r:void 0}async function eI(){if(n)return n;a??=Promise.all([(0,h.readFile)("/proc/stat","utf8"),(0,h.readFile)("/proc/self/auxv")]).then(([e,t])=>{let r=function(e){let t=/^btime\s+(\d+)$/m.exec(e);if(!t)return;let r=Number(t[1]);return Number.isSafeInteger(r)?1e3*r:void 0}(e),i=function(e,t="ia32"===process.arch||"arm"===process.arch?4:8,r=(0,y.endianness)()){let i=2*t;if(4!==t&&8!==t||e.length<i)return;let o=i=>8===t?"LE"===r?e.readBigUInt64LE(i):e.readBigUInt64BE(i):BigInt("LE"===r?e.readUInt32LE(i):e.readUInt32BE(i));for(let r=0;r+i<=e.length;r+=i){let e=o(r);if(0n===e)break;if(e===BigInt(17)){let e=Number(o(r+t));return Number.isSafeInteger(e)&&e>0?e:void 0}}}(t);return void 0!==r&&void 0!==i?{bootTimeMs:r,ticksPerSecond:i}:void 0}).catch(()=>void 0);let e=await a;return a=void 0,e&&(n=e),e}function eA(e=process.platform){let t=Date.now()-1e3*process.uptime(),r="linux"===e?function(e){try{return eO((0,p.readFileSync)(`/proc/${e}/stat`,"utf8"))}catch{return}}(process.pid):void 0;return{procStart:new Date(t).toISOString(),..."win32"===e?{procStartFt:((BigInt(Math.round(t))+11644473600000n)*10000n).toString()}:{},...r?{procStartTicks:r}:{}}}async function eN(e,t=e=>(0,h.readFile)(e,"utf8"),r=eI){try{let i=eO(await t(`/proc/${e}/stat`));if(!i)return;let o=await r();if(!o)return;let n=o.bootTimeMs+1e3*Number(i)/o.ticksPerSecond;return{procStartTicks:i,...Number.isFinite(n)?{procStart:new Date(n).toISOString()}:{}}}catch{return}}function e_(e){try{return process.kill(e,0),!0}catch(e){return e?.code!=="ESRCH"}}async function eR(e,t=process.platform){if(Number.isSafeInteger(e)&&!(e<=0))try{if("linux"===t)return eN(e);if("win32"===t){let t=`$target = Get-CimInstance Win32_Process -Filter "ProcessId = ${e}" -ErrorAction Stop; if ($null -eq $target) { exit 3 }; $started = $target.CreationDate.ToUniversalTime(); [Console]::Out.Write($started.ToString('o') + '|' + $started.ToFileTimeUtc().ToString())`,r=await eE("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{timeout:5e3,env:{...process.env,NODE_OPTIONS:""}}),[i,o]=String(r.stdout||"").trim().split("|");if(!Number.isFinite(Date.parse(i))||!/^\d+$/.test(o||""))return;return{procStart:i,procStartFt:o}}let r={...process.env,NODE_OPTIONS:"",LC_ALL:"C",LANG:"C"},i=await eE("ps",["-o","lstart=","-p",String(e)],{timeout:5e3,env:r}),o=String(i.stdout||"").trim();if(Number.isFinite(Date.parse(o)))return{procStart:o};let n=await eE("ps",["-o","etime=","-p",String(e)],{timeout:5e3,env:r}),a=function(e){let t=String(e||"").trim();if(!t)return;let r=0,i=t,o=t.indexOf("-");if(o>=0&&(r=Number(t.slice(0,o)),i=t.slice(o+1),!Number.isFinite(r)||r<0))return;let n=i.split(":").map(e=>Number(e));if(!(n.length<2||n.length>3||n.some(e=>!Number.isFinite(e)||e<0)))return(86400*r+(2===n.length?60*n[0]+n[1]:3600*n[0]+60*n[1]+n[2]))*1e3}(String(n.stdout||""));if(void 0===a)return;return{procStart:new Date(Date.now()-a).toISOString()}}catch{return}}function ex(e){if(!e||"object"!=typeof e)return{};let t="string"==typeof e.procStart?e.procStart:"string"==typeof e.processStart?e.processStart:void 0,r="string"==typeof e.procStartFt?e.procStartFt:"number"==typeof e.procStartFt&&Number.isFinite(e.procStartFt)?e.procStartFt.toFixed(0):void 0,i="string"==typeof e.procStartTicks?e.procStartTicks:"number"==typeof e.procStartTicks&&Number.isFinite(e.procStartTicks)?e.procStartTicks.toFixed(0):void 0;return{...t?{procStart:t}:{},...r?{procStartFt:r}:{},...i?{procStartTicks:i}:{}}}function eJ(e){return!!(e?.procStart||e?.procStartFt||e?.procStartTicks)}function eP(e){return{procStart:e?.procStart,procStartFt:e?.procStartFt,procStartTicks:e?.procStartTicks}}async function ej(e,t,r=eB,i={}){if(void 0===e||!Number.isSafeInteger(e)||e<=0||!r(e))return!1;let o=ex(t);if(!eJ(o))return!0;let n=e===process.pid?(i.currentIdentity??eA)():await (i.queryIdentity??eR)(e);return!!r(e)&&(!(n&&eJ(n))||"different"!==function(e,t){if(e.procStartTicks&&t.procStartTicks&&e.procStartTicks!==t.procStartTicks)return"different";let r=eT(e),i=eT(t);return void 0!==r&&void 0!==i?2e3>=Math.abs(i-r)?"same":"different":"unknown"}(o,n))}function eB(e){try{return process.kill(e,0),!0}catch(e){return e?.code!=="ESRCH"}}let eC={procStart:null,procStartFt:null,procStartTicks:null},e$="session ended — press enter to restart it",eF=new Set(["done","failed","stopped"]);function eL(e){return!e.name&&""===(e.intent??"").trim()&&!e.worktreePath&&!e.exec&&"working"===e.state&&"blocked"===e.tempo}function eU(e){let t=eF.has(e.state)?e.idleSince??e.firstTerminalAt??e.updatedAt:e.idleSince;if(!t)return;let r=Date.parse(t);return Number.isFinite(r)?r:void 0}function eG(e,t=Date.now(),r=36e5){if(!e.attachedAt)return!1;let i=Date.parse(e.attachedAt);return Number.isFinite(i)&&t-i<r}function eM(e,t,r,i=!1){var o;if(e.exec||e.workerLaunchToken||"active"===(o=e).tempo||"blocked"===o.tempo||"blocked"===o.state||!(eF.has(e.state)||"idle"===e.tempo)||e.pid===process.pid||eG(e,r)&&void 0!==e.pid&&t.isProcessRunning(e.pid)||e.sessionId&&t.isSessionInUse?.(e.sessionId))return!1;let n=eU(e);return void 0!==n&&r-n>=(i?6e4:6e5)}function eq(e,t){return t.sessionId===e.sessionId&&t.createdAt===e.createdAt&&t.pid===e.pid&&t.workerGeneration===e.workerGeneration}async function eY(e,t){await e.setBrokerEndpoint(t,void 0).catch(()=>{})}function eW(e,t){return eF.has(e.state)?{pid:void 0,attachSocket:void 0,workerReclaimGeneration:void 0,...eC}:{state:"done",tempo:"idle",detail:e.detail&&"resuming…"!==e.detail?e.detail:"parked — press enter to continue",firstTerminalAt:e.firstTerminalAt??t,idleSince:e.idleSince??t,pid:void 0,attachSocket:void 0,workerReclaimGeneration:void 0,...eC}}async function eH(e,t,r=!1){let i=await e.store.read(t.id).catch(()=>void 0);if(e.signal?.aborted||!i||!eq(t.state,i)||!eM(i,e,(e.now??Date.now)(),r)||!await (e.reclaimWorker?e.reclaimWorker(i):G(i,r?"memory-pressure":void 0)).catch(()=>!1)||e.signal?.aborted)return;let o=new Date((e.now??Date.now)()).toISOString();await e.store.patchIf(t.id,eW(i,o),t=>!e.signal?.aborted&&eq(i,t)&&void 0!==t.pid&&!e.isProcessRunning(t.pid)&&eM(t,e,(e.now??Date.now)(),r)).catch(()=>!1)&&await eY(e.store,t.id)}async function eQ(e){let t=e.now??Date.now,r=[],i=[],o=e.records??await e.store.list().catch(()=>[]),n=(t,r,i)=>{var o,n;let a,s;return!e.signal?.aborted&&eq(t,r)&&(o=t,n=r,a=ex(o),s=ex(n),!a.procStart&&!a.procStartFt&&!a.procStartTicks||a.procStart===s.procStart&&a.procStartFt===s.procStartFt&&a.procStartTicks===s.procStartTicks)&&!r.workerLaunchToken&&void 0!==r.pid&&i&&!e.isSessionInUse?.(r.sessionId)},a=!0===e.reclaimLiveIdle&&e.memoryBudget?.().pressured===!0,s=!1;for(let c of a?[...o].sort((e,t)=>(eU(e.state)??1/0)-(eU(t.state)??1/0)):o){if(e.signal?.aborted)break;let o=c.state,l=o.workerLaunchOwnerPid;if(o.workerLaunchToken&&Number.isSafeInteger(l)&&l>0&&!e_(l)){let t=o;if(!await e.store.patchIf(c.id,{workerLaunchToken:void 0,workerLaunchOwnerPid:void 0},r=>!e.signal?.aborted&&eq(t,r)&&r.workerLaunchToken===t.workerLaunchToken&&r.workerLaunchOwnerPid===l&&!e_(l)).catch(()=>!1))continue;let r=await e.store.read(c.id).catch(()=>void 0);if(!r||!eq(t,r))continue;o=r}if(!("number"==typeof o.pid&&o.pid>0)){o.attachedAt&&await e.store.patchIf(c.id,{attachedAt:null},t=>!e.signal?.aborted&&t.attachedAt===o.attachedAt&&t.sessionId===o.sessionId&&t.createdAt===o.createdAt&&void 0===t.pid).catch(()=>!1);let i=o.idleSince?Date.parse(o.idleSince):NaN;!eF.has(o.state)&&Number.isFinite(i)&&t()-i>=864e5&&await e.store.patchIf(c.id,{state:"done",tempo:"idle",detail:e$,firstTerminalAt:o.firstTerminalAt??new Date(t()).toISOString()},t=>!e.signal?.aborted&&void 0===t.pid&&t.state===o.state&&t.sessionId===o.sessionId&&t.createdAt===o.createdAt).catch(()=>!1)&&r.push(c.id);continue}let d=e.isJobProcessAlive?await e.isJobProcessAlive(o.pid,ex(o)):await ej(o.pid,ex(o),e.isProcessRunning),u=!d;if(!d&&o.exec){let a=o.firstTerminalAt?Date.parse(o.firstTerminalAt):void 0;if(void 0!==a&&Number.isFinite(a)&&t()-a>=3e5){await e.store.removeIf(c.id,e=>n(o,e,u)&&!!e.exec&&e.firstTerminalAt===o.firstTerminalAt).catch(()=>!1)&&i.push(c.id);continue}!eF.has(o.state)&&await e.store.patchIf(c.id,{state:"done",tempo:"idle",detail:"command exited — output in logs",firstTerminalAt:o.firstTerminalAt??new Date(t()).toISOString()},e=>n(o,e,u)&&!!e.exec&&!eF.has(e.state)&&e.firstTerminalAt===o.firstTerminalAt).catch(()=>!1)&&r.push(c.id);continue}if(!d&&eL(o)){let r=t()-Date.parse(o.createdAt);if(Number.isFinite(r)&&r>=3e5){await e.store.removeIf(c.id,e=>n(o,e,u)&&eL(e)).catch(()=>!1)&&i.push(c.id);continue}}let p=a&&!s;if(!0===e.reclaimLiveIdle&&d&&eM(o,e,t(),p)){let r=!eM(o,e,t());r&&(s=!0),await eH(e,{id:c.id,state:o},r);continue}if(!d){if(eF.has(o.state)){await e.store.patchIf(c.id,{pid:void 0,attachSocket:void 0,workerReclaimGeneration:void 0,...eC},e=>n(o,e,u)&&eF.has(e.state)&&e.firstTerminalAt===o.firstTerminalAt).catch(()=>!1)&&await eY(e.store,c.id);continue}if(void 0!==o.workerReclaimGeneration&&o.workerReclaimGeneration===o.workerGeneration){let r=new Date(t()).toISOString();await e.store.patchIf(c.id,eW(o,r),e=>n(o,e,u)&&!eF.has(e.state)&&void 0!==e.workerReclaimGeneration&&e.workerReclaimGeneration===e.workerGeneration&&e.firstTerminalAt===o.firstTerminalAt).catch(()=>!1)&&await eY(e.store,c.id);continue}await e.store.patchIf(c.id,{state:"failed",tempo:"idle",detail:e$,firstTerminalAt:o.firstTerminalAt??new Date(t()).toISOString(),pid:void 0,attachSocket:void 0,workerReclaimGeneration:void 0,...eC},e=>n(o,e,u)&&!eF.has(e.state)&&e.firstTerminalAt===o.firstTerminalAt&&(void 0===e.workerReclaimGeneration||e.workerReclaimGeneration!==e.workerGeneration)).catch(()=>!1)&&(r.push(c.id),await eY(e.store,c.id))}}return{settled:r,removed:i}}async function eK(e){var t,r;let i,{pty:o,socketPath:n}=e,a=e.cols,s=e.rows,c=!1,l=!1,d=new Set,u=e=>{e.syncTimer&&(clearTimeout(e.syncTimer),e.syncTimer=void 0)},p=(e,t)=>{i?.socket===e&&(u(i),i=void 0,e.destroyed||(t&&e.write(`\r
|
|
4
4
|
\x1b[2m${t}\x1b[0m\r
|
|
5
|
-
`),e.end()))},
|
|
6
|
-
`)}function eZ(e,t,r){if(ez(t,r))try{e.resize(t,r)}catch{}}async function e0(e){"win32"!==process.platform&&await (0,f.unlink)(e).catch(()=>{})}async function e1(e){let t=`${process.pid}.${(0,u.randomUUID)()}.owner`,r=`${e}.${t}`;await (0,f.mkdir)(r,{mode:448});try{await (0,f.writeFile)((0,s.join)(r,t),String(process.pid),{flag:"wx",mode:384});let i=Date.now()+2e3;for(;;){try{return await (0,f.rename)(r,e),async()=>{await (0,f.unlink)((0,s.join)(e,t)),await e2(e)}}catch(e){if(!["EEXIST","ENOTEMPTY","ENOTDIR","EISDIR","EPERM","EACCES"].includes(e.code??""))throw e}if(await e3(e),Date.now()>=i)throw Error(`Timed out acquiring job lock: ${e}`);await new Promise(e=>setTimeout(e,25))}}finally{await (0,f.unlink)((0,s.join)(r,t)).catch(e=>{if("ENOENT"!==e.code)throw e}),await e2(r)}}async function e2(e){try{await (0,f.rmdir)(e)}catch(e){if(!["ENOENT","ENOTEMPTY","EEXIST"].includes(e.code??""))throw e}}async function e3(e){let t;try{t=await (0,f.readdir)(e)}catch(e){if(["ENOENT","ENOTDIR"].includes(e.code??""))return;throw e}for(let r of t){let t=/^(\d+)\.[0-9a-f-]{36}\.owner$/.exec(r);if(!t)return;let i=Number(t[1]);if(!Number.isSafeInteger(i)||i<=0||e_(i))return;let o=(0,s.join)(e,r);try{if(await (0,f.readFile)(o,"utf8")!==String(i)||e_(i))return;await (0,f.unlink)(o)}catch(e){if("ENOENT"!==e.code)throw e}}await e2(e)}async function e4(e){let t=await e1(e+".guard"),r=!1,i=`${e}.${process.pid}.${(0,u.randomUUID)()}.candidate`;try{await (0,f.writeFile)(i,String(process.pid),{flag:"wx",mode:384});let o=Date.now()+2e3;for(;;){try{await (0,f.link)(i,e),r=!0;break}catch(e){if("EEXIST"!==e.code)throw e}try{let t=await (0,f.readFile)(e,"utf8"),r=Number(t);if(t.trim()&&Number.isSafeInteger(r)&&r>0&&!e_(r)){await (0,f.unlink)(e);continue}}catch(e){if("ENOENT"===e.code)continue;throw e}if(Date.now()>=o)throw Error("Timed out acquiring job lock: "+e);await new Promise(e=>setTimeout(e,25))}return async()=>{try{await (0,f.unlink)(e)}finally{await t()}}}finally{try{await (0,f.unlink)(i).catch(e=>{if("ENOENT"!==e.code)throw e})}finally{r||await t()}}}function e8(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}let e6=["pinned","sortOrder","stateSortOrder","group"],e5=/^[A-Za-z0-9_-]{1,64}$/,e7=".locks";class e9{homeDir;constructor(e=()=>process.env.CODEBUDDY_CONFIG_DIR?.trim()?process.env.CODEBUDDY_CONFIG_DIR:(0,s.join)((0,y.homedir)(),".codebuddy")){this.homeDir=e}writeQueues=new Map;lastReapAt=0;inboxSeq=0;getJobsDir(){return(0,s.join)(this.homeDir(),"jobs")}static INBOX_PROCESSING_DIR=".processing";getJobDir(e){if(!e5.test(e))throw Error("Invalid job id");return(0,s.join)(this.getJobsDir(),e)}async create(e){let t=e.sessionId.slice(0,8),r=new Date().toISOString(),i={state:"working",detail:e.detail??"starting…",tempo:"active",output:null,children:null,intent:e.intent,initialPrompt:e.initialPrompt,name:e.name,nameSource:e.nameSource,sessionId:e.sessionId,shortId:t,cwd:e.cwd,createdAt:r,updatedAt:r,firstTerminalAt:null,pid:e.pid,logPath:e.logPath,respawnArgs:e.respawnArgs,exec:e.exec,bgIsolation:e.bgIsolation,inPlaceWorker:e.inPlaceWorker,foregroundHeld:e.foregroundHeld};return await this.withJobLock(t,async()=>{await this.ensureJobDir(t),await (0,f.mkdir)((0,s.join)(this.getJobDir(t),"tmp"),{recursive:!0,mode:448}),await this.writeStateAtomic(t,i)}),t}async read(e){if(!e5.test(e))return;let t=await this.readFileSafe((0,s.join)(this.getJobDir(e),R));if(void 0===t)return;let r=this.parseState(t);if(r)return this.overlayBrokerEndpoint(e,r)}async patch(e,t){this.maybeReapDeadJobs(),await this.queuePatch(e,t)}async patchQuiet(e,t){await this.queuePatch(e,t)}async patchIf(e,t,r){return this.queuePatch(e,t,r)}queuePatch(e,t,r){let i=(this.writeQueues.get(e)??Promise.resolve()).then(()=>this.doPatch(e,t,r)),o=i.then(()=>void 0,()=>void 0);return this.writeQueues.set(e,o),o.then(()=>{this.writeQueues.get(e)===o&&this.writeQueues.delete(e)}),i}maybeReapDeadJobs(){let e=Date.now();e-this.lastReapAt<6e4||(this.lastReapAt=e,eK({store:this,isProcessRunning:e8}).catch(()=>{}))}async list(){let e,t=this.getJobsDir();try{e=await (0,f.readdir)(t)}catch{return[]}let r=await this.readPins();return(await Promise.all(e.filter(e=>e!==P&&e!==e7&&e5.test(e)).map(async e=>{let t=await this.read(e);if(!t)return;let[i,o,n]=await Promise.all([this.readNumberSidecar(e,"order"),this.readNumberSidecar(e,J),this.readTextSidecar(e,"group")]);return{id:e,state:t,display:{pinned:r.has(e),sortOrder:i,stateSortOrder:o,group:n}}}))).filter(e=>void 0!==e)}async remove(e){await this.withJobLock(e,async()=>{await this.setPinned(e,!1),await (0,f.rm)(this.getJobDir(e),{recursive:!0,force:!0})})}async removeIf(e,t){return this.withJobLock(e,async()=>{let r=await this.readStateForMutation(e);return!!r&&!!t(await this.overlayBrokerEndpoint(e,r))&&(await this.setPinned(e,!1),await (0,f.rm)(this.getJobDir(e),{recursive:!0,force:!0}),!0)})}async readPins(){let e=await this.readFileSafe((0,s.join)(this.getJobsDir(),P));if(void 0===e)return new Set;try{let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>"string"==typeof e)):new Set}catch{return new Set}}async setPinned(e,t){await this.withLock(`${P}.lock`,async()=>{let r=await this.readFileForMutation((0,s.join)(this.getJobsDir(),P)),i=[];try{i=void 0===r?[]:JSON.parse(r)}catch{i=void 0}let o=Array.isArray(i)&&i.every(e=>"string"==typeof e);o||void 0===r||await (0,f.writeFile)((0,s.join)(this.getJobsDir(),`${P}.${(0,u.randomUUID)()}.corrupt`),r,{flag:"wx",mode:384});let n=new Set(Array.isArray(i)?i.filter(e=>"string"==typeof e):[]);if(t)n.add(e);else if(!n.delete(e)&&o)return;await this.writeAtomic((0,s.join)(this.getJobsDir(),P),JSON.stringify([...n],null,2))})}async setOrder(e,t,r){let i=(0,s.join)(this.getJobDir(e),"state"===t?J:"order");void 0===r?await this.unlinkSafe(i):(await this.ensureJobDir(e),await this.writeAtomic(i,String(r)))}async setGroup(e,t){let r=(0,s.join)(this.getJobDir(e),"group");void 0===t||""===t.trim()?await this.unlinkSafe(r):(await this.ensureJobDir(e),await this.writeAtomic(r,t.trim()))}async enqueueReply(e,t){await this.withJobLock(e,async()=>{let r=(0,s.join)(this.getJobDir(e),"inbox");await (0,f.mkdir)(r,{recursive:!0,mode:448});let i={...t,at:Date.now()},o=`${i.at}-${process.pid}-${this.inboxSeq++}.json`;await this.writeAtomic((0,s.join)(r,o),JSON.stringify(i,null,2));let n=await this.readStateForMutation(e);if(n?.workerReclaimGeneration!==void 0&&n.workerReclaimGeneration===n.workerGeneration){let t=(0,s.join)(this.homeDir(),"agent-home","wake");await (0,f.mkdir)(t,{recursive:!0,mode:448}),await this.writeAtomic((0,s.join)(t,Date.now()+"-"+(0,u.randomUUID)()+".json"),JSON.stringify({jobId:e}))}})}async commitReclaim(e,t){return this.withJobLock(e,async()=>{let r=await this.readStateForMutation(e);if(!r||r.sessionId!==t.sessionId||r.createdAt!==t.createdAt||r.pid!==t.pid||r.workerGeneration!==t.workerGeneration||r.idleSince!==t.idleSince||"idle"!==r.tempo||r.workerLaunchToken||r.attachedAt||r.foregroundHeld||r.inPlaceWorker||r.exec)return!1;for(let t of["inbox","colleague-inbox"])if((await (0,f.readdir)((0,s.join)(this.getJobDir(e),t)).catch(e=>{if("ENOENT"===e.code)return[];throw e})).filter(e=>e.endsWith(".json")).length)return!1;return await this.readFileForMutation((0,s.join)(this.getJobDir(e),j))===void 0&&(await this.writeStateAtomic(e,{...r,workerReclaimGeneration:r.workerGeneration}),!0)})}inboxProcessingDir(e){return(0,s.join)(this.getJobDir(e),"inbox",e9.INBOX_PROCESSING_DIR)}async inspectInbox(e){let t=(0,s.join)(this.getJobDir(e),"inbox"),r=this.inboxProcessingDir(e),i=async e=>{try{return(await (0,f.readdir)(e)).filter(e=>e.endsWith(".json"))}catch(e){if("ENOENT"===e.code)return[];throw e}},[o,n]=await Promise.all([i(t),i(r)]),a=[...o,...n].map(e=>this.inboxSortKey(e)).filter(e=>e>0).sort((e,t)=>e-t)[0];return{queued:o.length,processing:n.length,...void 0===a?{}:{oldestAt:a}}}async drainInbox(e){let t=(0,s.join)(this.getJobDir(e),"inbox"),r=this.inboxProcessingDir(e),i=await this.withJobLock(e,async()=>{let e=(await (0,f.readdir)(r).catch(()=>[])).filter(e=>e.endsWith(".json")),i=(await (0,f.readdir)(t).catch(()=>[])).filter(e=>e.endsWith(".json")).sort((e,t)=>this.inboxSortKey(e)-this.inboxSortKey(t)).slice(0,Math.max(0,64-e.length)),o=[];for(let n of(i.length>0&&await (0,f.mkdir)(r,{recursive:!0,mode:448}).catch(()=>void 0),[...e,...i])){let e=(0,s.join)(r,n);if(i.includes(n))try{await (0,f.rename)((0,s.join)(t,n),e)}catch{continue}let a=await this.readFileForMutation(e);if(void 0===a){await this.unlinkSafe(e);continue}o.push({path:e,raw:a})}return o}),o=[];for(let e of i)try{let t=JSON.parse(e.raw);"string"==typeof t?.text?o.push(t):(console.warn(`[JobStore] drainInbox dropped non-text reply in ${e.path}`),await this.unlinkSafe(e.path))}catch{console.warn(`[JobStore] drainInbox dropped bad JSON in ${e.path}`),await this.unlinkSafe(e.path)}return o}async ackInbox(e){let t=this.inboxProcessingDir(e),r=`${t}.acked-${(0,u.randomUUID)()}`;await this.withJobLock(e,async()=>{try{await (0,f.rename)(t,r)}catch(e){if("ENOENT"===e.code)return;throw e}}),await (0,f.rm)(r,{recursive:!0,force:!0}).catch(()=>void 0)}async releaseInbox(e){let t=(0,s.join)(this.getJobDir(e),"inbox"),r=this.inboxProcessingDir(e);await this.withJobLock(e,async()=>{for(let e of(await (0,f.readdir)(r).catch(()=>[])).filter(e=>e.endsWith(".json")))await (0,f.rename)((0,s.join)(r,e),(0,s.join)(t,e)).catch(()=>void 0)})}async savePendingReply(e,t){return!t.bash&&(await this.withJobLock(e,async()=>{await this.ensureJobDir(e);let r={...t,at:Date.now()};await this.writeAtomic((0,s.join)(this.getJobDir(e),j),JSON.stringify(r,null,2))}),!0)}async readPendingReply(e){let t=(0,s.join)(this.getJobDir(e),j),r=await this.readFileSafe(t);if(void 0!==r)try{let e=JSON.parse(r);return"string"==typeof e?.text?e:void 0}catch{return}}async takePendingReply(e,t){return this.withJobLock(e,async()=>{let r,i=(0,s.join)(this.getJobDir(e),j),o=await this.readFileForMutation(i);if(void 0!==o){try{r=JSON.parse(o)}catch{return}if("string"==typeof r?.text&&(!t||r.at===t.at&&r.text===t.text&&r.bash===t.bash))return await (0,f.unlink)(i),r}})}async setBrokerEndpoint(e,t,r){await this.withJobLock(e,async()=>{if(r){let t=await this.readBrokerEndpoint(e);if(!t||t.pid!==r.pid||t.attachSocket!==r.attachSocket)return}let i=(0,s.join)(this.getJobDir(e),x);void 0===t?await this.unlinkSafe(i):await this.readStateForMutation(e)&&await this.writeAtomic(i,JSON.stringify(t,null,2))})}async readBrokerEndpoint(e){let t=await this.readFileSafe((0,s.join)(this.getJobDir(e),x));if(void 0!==t)try{let e=JSON.parse(t);if("number"==typeof e?.pid&&"string"==typeof e?.attachSocket)return{pid:e.pid,attachSocket:e.attachSocket,...eP(ex(e))}}catch{}}async doPatch(e,t,r){return this.withJobLock(e,async()=>{let i=await this.readStateForMutation(e);if(!i||r&&!r(await this.overlayBrokerEndpoint(e,i)))return!1;let o={...i,...t,updatedAt:new Date().toISOString()};return await this.writeStateAtomic(e,o),!0})}withJobLock(e,t){return e5.test(e)?this.withLock(`${e}.state.lock`,t):Promise.reject(Error("Invalid job id"))}async withLock(e,t){await this.ensureJobsDir();let r=(0,s.join)(this.getJobsDir(),e7);await (0,f.mkdir)(r,{recursive:!0,mode:448});let i=(0,s.join)(r,e),o=await e4(i);try{return await t()}finally{await o()}}async readFileForMutation(e){try{return await (0,f.readFile)(e,"utf8")}catch(e){if("ENOENT"===e.code)return;throw e}}async readStateForMutation(e){let t=await this.readFileForMutation((0,s.join)(this.getJobDir(e),R));if(void 0===t)return;let r=this.parseState(t);if(!r)throw Error(`Invalid job state: ${e}`);return r}async overlayBrokerEndpoint(e,t){let r=await this.readBrokerEndpoint(e);if(!r||void 0!==t.workerGeneration&&t.workerGeneration!==r.pid)return{...t};let i=ex(r);return await ej(r.pid,i)?{...t,pid:r.pid,attachSocket:r.attachSocket,...eP(i)}:(await this.unlinkSafe((0,s.join)(this.getJobDir(e),x)),{...t})}async writeStateAtomic(e,t){let r={...t};for(let e of e6)delete r[e];await this.writeAtomic((0,s.join)(this.getJobDir(e),R),JSON.stringify(r,null,2))}async writeAtomic(e,t){let r=`${e}.${process.pid}.${(0,u.randomUUID)()}.tmp`;try{await (0,f.writeFile)(r,t,{mode:384,flag:"wx"}),await (0,f.rename)(r,e)}catch(e){throw await this.unlinkSafe(r),e}}async ensureJobsDir(){let e=this.getJobsDir();await (0,f.mkdir)(e,{recursive:!0,mode:448});try{await (0,f.chmod)(e,448)}catch{}}async ensureJobDir(e){await this.ensureJobsDir(),await (0,f.mkdir)(this.getJobDir(e),{recursive:!0,mode:448})}async readFileSafe(e){try{return await (0,f.readFile)(e,"utf8")}catch{return}}async unlinkSafe(e){try{await (0,f.unlink)(e)}catch{}}parseState(e){let t;try{t=JSON.parse(e)}catch{return}if("object"!=typeof t||null===t)return;let r=t;for(let e of["state","sessionId","cwd","createdAt","updatedAt"])if("string"!=typeof r[e]||""===r[e])return;return{...r,detail:"string"==typeof r.detail?r.detail:"",tempo:r.tempo??"idle",intent:"string"==typeof r.intent?r.intent:"",shortId:"string"==typeof r.shortId?r.shortId:r.sessionId.slice(0,8)}}async readNumberSidecar(e,t){let r=await this.readTextSidecar(e,t);if(void 0===r)return;let i=Number(r);return Number.isFinite(i)?i:void 0}async readTextSidecar(e,t){let r=await this.readFileSafe((0,s.join)(this.getJobDir(e),t));if(void 0===r)return;let i=r.trim();return""===i?void 0:i}inboxSortKey(e){let t=Number(e.split("-")[0]);return Number.isFinite(t)?t:0}}let te=process.env.CODEBUDDY_JOB_INNER_ENTRY;if(delete process.env.CODEBUDDY_JOB_INNER_ENTRY,!function(e=process.env){C||(C=!0,i=L(e[O]),o=L(e[A]),Number.isInteger(Number(L(e[I]))),L(e[_]),L(e.CODEBUDDY_JOB_RECLAIM_TOKEN),F=!!L(e[N]),function(e){for(let t of $)delete e[t]}(e))}(),d(process.env),!te||!i||!F)throw Error("Lightweight broker requires an explicit inner entry and job identity");let tt=Date.now(),tr={setContext(e){},info(e){process.stdout.write(e+"\n")},warn(e){process.stderr.write(e+"\n")}};new eV({store:new e9,logger:tr,entry:(0,s.resolve)(te),buildRespawnArgs:(e,t)=>[e,...t]}).run().catch(e=>{tr.warn(String(e)),process.exitCode=1}).finally(()=>{"1"===process.env.CODEBUDDY_STARTUP_PROFILE&&tr.info(JSON.stringify({phase:"job_broker_exit",elapsedMs:Date.now()-tt,rss:process.memoryUsage().rss}))})},421(e){e.exports=require("node:child_process")},24(e){e.exports=require("node:fs")},995(e){e.exports=require("node:module")},760(e){e.exports=require("node:path")},338(e,t,r){e=r.nmd(e);let{spawn:i}=r(421),{openSync:o,closeSync:n}=r(24),a=r(760),s=Symbol.for("codebuddy.daemon-supervisor"),c="CODEBUDDY_INTERNAL_DAEMON_CHANNEL",l="--internal-daemon-supervisor";function d(){let e=process.versions.bun&&/^(\/\$bunfs\/|[A-Za-z]:[\\/]~BUN[\\/])/.test(process.argv[1]||"")?[l]:[a.resolve(__dirname,"../bin/daemon-supervisor.cjs")],t=i(process.execPath,e,{detached:!0,windowsHide:!0,stdio:["ignore","ignore","ignore","ipc"]});return t.on("error",e=>{t.supervisorError=e}),t.unref(),t.channel?.unref?.(),globalThis[s]=t,t}let u=0;function p(){if(!process.send)throw Error("Daemon supervisor requires an inherited IPC channel");let e=new Set,t=()=>{process.connected||0!==e.size||process.exit(0)},r=a=>{let s=!1;a.on("message",l=>{let d;if(l?.type!=="start-daemon")return;let{id:u,command:p,args:h,options:f}=l,w=e=>{a.connected&&a.send({type:"daemon-started",id:u,...e},()=>{})};if(s)return void w({error:"Daemon already handed off by this process"});if(!Array.isArray(h)||!h.includes("--serve")||f?.env?.CODEBUDDY_SESSION_KIND!=="daemon")return void w({error:"Supervisor only starts daemon workers"});try{d=void 0===f.logPath?void 0:o(f.logPath,"a");let n=i(p,h,{cwd:f.cwd,env:{...f.env,[c]:"1"},detached:!0,windowsHide:!0,stdio:["ignore",d??"ignore",d??"ignore","ipc"]});s=!0,e.add(n),r(n),n.once("spawn",()=>w({pid:n.pid})),n.once("error",r=>{s=!1,e.delete(n),w({error:r.message}),t()}),n.once("exit",()=>{e.delete(n),t()})}catch(e){w({error:e.message})}finally{void 0!==d&&n(d)}})};r(process),process.on("disconnect",t)}e.exports={prepare:function(e=process.platform){if("win32"!==e)return;if(globalThis[s])return globalThis[s];if(process.env[c]&&(delete process.env[c],process.send&&process.connected))return globalThis[s]=process,process.channel?.unref?.(),process;let t=process.argv.slice(2);if("daemon"===t[0]&&["start","restart","install"].includes(t[1]))return d()},start:d,spawnDaemon:function(e,t,r){let i=globalThis[s];if(!i?.connected||i.supervisorError)return Promise.reject(i?.supervisorError||Error("Daemon supervisor unavailable; start it with codebuddy daemon start"));let o=++u;return new Promise((n,a)=>{let s=setInterval(()=>{},6e4),c=(e,t)=>{clearInterval(s),i.off("message",d),i.off("disconnect",l),i.channel?.unref?.(),e?a(e):n(t)},l=()=>c(Error("Daemon supervisor disconnected during startup")),d=e=>{e?.type==="daemon-started"&&e.id===o&&c(e.error?Error(e.error):void 0,{pid:e.pid})};i.on("message",d),i.once("disconnect",l),i.channel?.ref?.();try{i.send({type:"start-daemon",id:o,command:e,args:t,options:r},e=>{e&&c(e)})}catch(e){c(e)}})},run:p,FLAG:l},r.c[r.s]===e&&p()},188(e,t,r){let{loadBinding:i}=r(624),o=Symbol.for("codebuddy.no-orphans"),n="--no-orphans",a="CODEBUDDY_DISABLE_CHILD_PROCESS_CONTAINMENT";function s(e=process.env){let t=e[a];if(void 0===t||["","0","false"].includes(t))return!1;if(["1","true"].includes(t))return!0;throw Error(`${a} must be 0, 1, true, false, or unset`)}e.exports={install:function({platform:e=process.platform,environment:t=process.env,args:a=process.argv.slice(2),state:c=globalThis,loadBinding:l=i,warn:d=e=>process.emitWarning(e)}={}){if(void 0!==c[o])return c[o];if("win32"!==e)return c[o]=!1;let u=a.indexOf("--");if(!a.slice(0,u<0?a.length:u).includes(n)&&s(t))return c[o]=!1;r(338).prepare();try{return l().ensureKillOnCloseJob(),c[o]=!0}catch(e){return c[o]=!1,d(`Windows no-orphans cleanup unavailable: ${e.message}`),!1}},isEnabled:function(){return"win32"===process.platform&&!0===globalThis[o]},isDisabled:s,DISABLE_ENV:a,NO_ORPHANS_FLAG:n}},624(e,t,r){let i,o=r(760),{createRequire:n}=r(995);e.exports={loadBinding:function(){if("win32"!==process.platform)throw Error("Windows Job binding requires win32");if(!i)if(globalThis.__CODEBUDDY_WINDOWS_JOB_NATIVE__)i=globalThis.__CODEBUDDY_WINDOWS_JOB_NATIVE__();else{let e=o.resolve(__dirname,"../bin/native",`win32-${process.arch}`,"job-object.node");i=n(__filename)(e)}return i}}}},t={};function r(i){var o=t[i];if(void 0!==o)return o.exports;var n=t[i]={id:i,loaded:!1,exports:{}};return e[i](n,n.exports,r),n.loaded=!0,n.exports}r.c=t,r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.rv=()=>"1.7.6",r.ruid="bundler=rspack@1.7.6",r(r.s=278)})();
|
|
5
|
+
`),e.end()))},f=(0,w.createServer)(t=>{d.add(t),t.on("close",()=>d.delete(t)),t.on("error",()=>{});let r=Buffer.alloc(0),n=d=>{let f;if((r=Buffer.concat([r,d])).length>8192){eX(t,{ok:!1,error:"request too large",code:"ETOOLARGE"}),t.end();return}let h=r.indexOf(10);if(h<0)return;t.off("data",n);let w=r.subarray(0,h).toString("utf8"),m=r.subarray(h+1);try{f=JSON.parse(w)}catch{eX(t,{ok:!1,error:"malformed request",code:"EBADREQ"}),t.end();return}if(!f||"object"!=typeof f){eX(t,{ok:!1,error:"malformed request",code:"EBADREQ"}),t.end();return}if(void 0!==f.protocolVersion&&1!==f.protocolVersion){eX(t,{ok:!1,error:"unsupported broker protocol version",code:"EBADREQ"}),t.end();return}switch(f.op){case"ping":eX(t,{ok:!0}),t.end();return;case"reclaim":eX(t,{ok:!1,error:"inner reclaim handshake required",code:"ENOTREADY"}),t.end();return;case"request-reclaim":if(c||l||i||!e.canReclaim){eX(t,{ok:!1,error:"broker is in use or stopping",code:"ENOTREADY"}),t.end();return}l=!0,Promise.resolve().then(()=>e.canReclaim(f)).then(e=>{!e||c||i?eX(t,{ok:!1,error:"job is not reclaimable",code:"ENOTREADY"}):(c=!0,eX(t,{ok:!0}))}).catch(()=>{eX(t,{ok:!1,error:"reclaim check failed",code:"ENOTREADY"})}).finally(()=>{l=!1,t.end()});return;case"detach":i&&(p(i.socket),e.onAttacherDisconnect?.()),eX(t,{ok:!0}),t.end();return;case"resize":i&&ez(f.cols,f.rows)&&(i.cols=f.cols,i.rows=f.rows,a=f.cols,s=f.rows,eZ(o,f.cols,f.rows)),eX(t,{ok:!0}),t.end();return;case"attach":{if(c||l){eX(t,{ok:!1,error:"broker is stopping",code:"ENOTREADY"}),t.end();return}let r=ez(f.cols,f.rows),n=r?f.cols:a,d=r?f.rows:s;i&&p(i.socket,"Session opened in another window — this view was detached"),i={socket:t,cols:n,rows:d,forwarding:!1},e.onAttachEstablished?.(),eX(t,{ok:!0}),t.write("\x1b[2J\x1b[3J\x1b[H");let h=i;if(h.syncTimer=setTimeout(()=>{h.syncTimer=void 0,i!==h||t.destroyed||(h.forwarding=!0,((e,t)=>{if(e!==a||t!==s){a=e,s=t,eZ(o,e,t);return}eZ(o,Math.max(2,e-1),t),setTimeout(()=>eZ(o,e,t),30).unref?.()})(h.cols,h.rows))},60),h.syncTimer.unref?.(),m.length>0)try{o.write(m.toString("utf8"))}catch{}t.on("data",e=>{try{o.write(e.toString("utf8"))}catch{}}),t.on("close",()=>{u(h),i===h&&(i=void 0,e.onAttacherDisconnect?.())});return}default:eX(t,{ok:!1,error:"unknown operation",code:"EBADREQ"}),t.end()}};t.on("data",n)});return await e0(n),await (t=f,r=n,new Promise((e,i)=>{let o=e=>i(e);t.once("error",o),t.listen(r,()=>{t.off("error",o),e()})})),"win32"!==process.platform&&await (0,h.chmod)(n,384).catch(()=>{}),o.onData(e=>{i&&i.forwarding&&!i.socket.destroyed&&i.socket.write(e)}),{hasAttacher:()=>void 0!==i&&!i.socket.destroyed,beginStop:()=>{c=!0},detach:()=>{i&&p(i.socket)},close:async()=>{var e;for(let e of(c=!0,i&&!i.socket.destroyed&&(u(i),i.socket.end()),i=void 0,d))e.destroy();await (e=f,new Promise(t=>e.close(()=>t()))),await e0(n)}}}class eV{dependencies;innerReclaimToken=(0,u.randomUUID)();constructor(e){this.dependencies=e}get store(){return this.dependencies.store}get logger(){return this.dependencies.logger}get startupProfiler(){return this.dependencies.startupProfiler}async run(){let e,t=i??process.env[O]?.trim(),r=this.dependencies.entry??process.argv[1];if(!t||!r)throw Error("Job broker requires a job id and a CLI entry path");this.logger.setContext(`JobBroker-${t}`);let n=e=>e.pid===process.pid&&e.workerGeneration===process.pid;this.startupProfiler?.markStart("job_pty_load","Job PTY load");let a=await T();if(this.startupProfiler?.markEnd("job_pty_load"),!a)throw await this.store.patchIf(t,{state:"failed",tempo:"idle",detail:B,firstTerminalAt:new Date().toISOString()},n).catch(()=>{}),Error(B);this.startupProfiler?.markStart("job_worker_claim","Job worker claim"),await this.claimWorker(t,o),this.startupProfiler?.markEnd("job_worker_claim");let c=function(e,t=process.pid){return"win32"===process.platform?`\\\\.\\pipe\\codebuddy-job-${e}-${t}`:(0,s.join)((0,y.tmpdir)(),`codebuddy-job-${process.getuid?.()??"user"}-${e}-${t}.sock`)}(t,process.pid);this.startupProfiler?.markStart("job_inner_spawn","Job inner spawn");let l=this.spawnInner(a,r,c,t);this.startupProfiler?.markEnd("job_inner_spawn",{pid:l.pty.pid});let d=l.pty,u=new Promise(e=>{d.onExit(t=>e(t.exitCode))}),f=!1,w=await eK({pty:d,socketPath:c,cols:l.cols,rows:l.rows,canReclaim:async e=>{let r=e=>(this.logger.info(`[broker] reclaim refused job=${t} reason=${e}`),!1);if(!f||b)return r("broker-not-ready");if(await this.store.readPendingReply(t))return r("pending-reply");for(let e of["inbox","colleague-inbox"])if((await (0,h.readdir)((0,s.join)(this.store.getJobDir(t),e)).catch(e=>{if("ENOENT"===e.code)return[];throw e})).filter(e=>e.endsWith(".json")).length>0)return r(`unread-${e}`);let i=function(e,t,r,i=Date.now(),o=function(){let e,t,r="function"==typeof process.availableMemory?process.availableMemory():(0,y.freemem)(),i="function"==typeof process.constrainedMemory?process.constrainedMemory():0,o=i>0?Math.min((0,y.totalmem)(),i):(0,y.totalmem)();return e=Number.isFinite(r)&&r>=0&&Number.isFinite(o)&&o>0,t=Math.max(0x20000000,.05*o),{availableBytes:r,totalBytes:o,pressured:e&&r<t}}().pressured){if(!t)return"no-state";if(e.pid!==r||e.workerGeneration!==r)return"request-generation-mismatch";if(t.pid!==r||t.workerGeneration!==r)return"state-generation-mismatch";if(!e.sessionId||e.sessionId!==t.sessionId)return"session-mismatch";if(e.createdAt!==t.createdAt)return"createdAt-mismatch";if(e.idleSince!==t.idleSince)return"idleSince-mismatch";if(e.firstTerminalAt!==t.firstTerminalAt)return"firstTerminalAt-mismatch";if(t.exec)return"exec";if(t.foregroundHeld)return"foreground-held";if(t.inPlaceWorker)return"in-place-worker";if(eG(t,i))return"attached";if(t.workerLaunchToken)return"launch-token";if("blocked"===t.state)return"blocked";if("idle"!==t.tempo)return`tempo-${t.tempo}`;let n=eU(t);return void 0===n?"no-idle-clock":i-n>=("memory-pressure"===e.reason&&o?6e4:6e5)?"ok":"within-grace"}(e,await this.store.read(t),process.pid);if("ok"!==i)return r(i);let o=await U(c+".inner",{...e,token:this.innerReclaimToken});return o.ok||r(`inner-${o.code??"unknown"}`)},onAttacherDisconnect:()=>{(async()=>{let e=()=>this.store.patchIf(t,{attachedAt:null},n);try{if(await e())return;await new Promise(e=>setTimeout(e,50)),await e()||this.logger.warn?.(`[broker] attachedAt clear lost race for job=${t}`)}catch(e){this.logger.warn?.(`[broker] attachedAt clear failed for job=${t}: ${String(e)}`)}})().catch(()=>{})},onAttachEstablished:()=>{this.store.patchIf(t,{attachedAt:new Date().toISOString()},n).catch(()=>{})}});try{await this.store.setBrokerEndpoint(t,{pid:process.pid,attachSocket:c,...eP(eA())})}catch(e){this.logger.warn?.(`[broker] setBrokerEndpoint failed for job=${t}: ${String(e)}`)}let m=()=>{if("win32"!==process.platform)try{(0,p.unlinkSync)(c)}catch{}};process.on("exit",m);let b=!1,g=()=>{if(!b){b=!0,w.beginStop(),m();try{d.kill("SIGTERM")}catch{}e=setTimeout(()=>{try{d.kill("SIGKILL")}catch{}},5e3),e.unref?.()}};process.on("SIGINT",g),process.on("SIGTERM",g),process.on("SIGHUP",g),f=!0,this.startupProfiler?.markEvent("job_broker_ready","Job broker ready"),this.startupProfiler||"1"!==process.env.CODEBUDDY_STARTUP_PROFILE||this.logger.info(JSON.stringify({phase:"job_broker_ready",elapsedMs:Math.round(1e3*process.uptime()),rss:process.memoryUsage().rss})),this.startupProfiler?.isEnabled()&&this.logger.info(this.startupProfiler.formatReport({showAll:!0}));let k=await u;e&&(clearTimeout(e),e=void 0),process.off("SIGINT",g),process.off("SIGTERM",g),process.off("SIGHUP",g),await w.close(),m(),await this.store.setBrokerEndpoint(t,void 0,{pid:process.pid,attachSocket:c,...eP(eA())}).catch(()=>{}),process.exitCode=k}async claimWorker(e,t){let r=Date.now()+1e4;do{if(await this.store.patchIf(e,{pid:process.pid,workerGeneration:process.pid,workerReclaimGeneration:void 0,...eP(eA()),...t?{state:"working",tempo:"active",detail:"resuming…",firstTerminalAt:null}:{}},e=>{var r,i,o;return r=e,i=process.pid,o=t,r.workerLaunchToken?!!o&&r.workerLaunchToken===o:o?r.pid===i&&r.workerGeneration===i:void 0===r.pid&&void 0===r.workerGeneration||r.pid===i&&(void 0===r.workerGeneration||r.workerGeneration===i)}))return;let r=await this.store.read(e);if(t||!r||r.workerLaunchToken)break;await new Promise(e=>setTimeout(e,100))}while(Date.now()<r);throw Error("Job broker launch was superseded")}spawnInner(e,t,r,i){let o={...process.env};d(o),delete o[N],delete o.SERVER__PORT,delete o.SERVER__HOST,delete o.CODEBUDDY_GATEWAY_AUTH,o[O]=i,o[I]=String(process.pid),o[_]=r,o.CODEBUDDY_JOB_RECLAIM_TOKEN=this.innerReclaimToken,delete o.CODEBUDDY_ATTACH_ORIGIN,o.NODE_OPTIONS="";let n=process.env.TERM&&"dumb"!==process.env.TERM?process.env.TERM:"xterm-256color";return o.TERM=n,delete o.NO_COLOR,o.COLORTERM||(o.COLORTERM="truecolor"),{pty:e.module.spawn(process.execPath,this.dependencies.buildRespawnArgs(t,process.argv.slice(2)),{name:n,cols:120,rows:40,cwd:process.cwd(),env:o}),cols:120,rows:40}}}function ez(e,t){return"number"==typeof e&&"number"==typeof t&&e>0&&t>0}function eX(e,t){e.destroyed||e.write(`${JSON.stringify({protocolVersion:1,...t})}
|
|
6
|
+
`)}function eZ(e,t,r){if(ez(t,r))try{e.resize(t,r)}catch{}}async function e0(e){"win32"!==process.platform&&await (0,h.unlink)(e).catch(()=>{})}async function e1(e){let t=`${process.pid}.${(0,u.randomUUID)()}.owner`,r=`${e}.${t}`;await (0,h.mkdir)(r,{mode:448});try{await (0,h.writeFile)((0,s.join)(r,t),String(process.pid),{flag:"wx",mode:384});let i=Date.now()+2e3;for(;;){try{return await (0,h.rename)(r,e),async()=>{await (0,h.unlink)((0,s.join)(e,t)),await e2(e)}}catch(e){if(!["EEXIST","ENOTEMPTY","ENOTDIR","EISDIR","EPERM","EACCES"].includes(e.code??""))throw e}if(await e3(e),Date.now()>=i)throw Error(`Timed out acquiring job lock: ${e}`);await new Promise(e=>setTimeout(e,25))}}finally{await (0,h.unlink)((0,s.join)(r,t)).catch(e=>{if("ENOENT"!==e.code)throw e}),await e2(r)}}async function e2(e){try{await (0,h.rmdir)(e)}catch(e){if(!["ENOENT","ENOTEMPTY","EEXIST"].includes(e.code??""))throw e}}async function e3(e){let t;try{t=await (0,h.readdir)(e)}catch(e){if(["ENOENT","ENOTDIR"].includes(e.code??""))return;throw e}for(let r of t){let t=/^(\d+)\.[0-9a-f-]{36}\.owner$/.exec(r);if(!t)return;let i=Number(t[1]);if(!Number.isSafeInteger(i)||i<=0||e_(i))return;let o=(0,s.join)(e,r);try{if(await (0,h.readFile)(o,"utf8")!==String(i)||e_(i))return;await (0,h.unlink)(o)}catch(e){if("ENOENT"!==e.code)throw e}}await e2(e)}async function e4(e){let t=await e1(e+".guard"),r=!1,i=`${e}.${process.pid}.${(0,u.randomUUID)()}.candidate`;try{await (0,h.writeFile)(i,String(process.pid),{flag:"wx",mode:384});let o=Date.now()+2e3;for(;;){try{await (0,h.link)(i,e),r=!0;break}catch(e){if("EEXIST"!==e.code)throw e}try{let t=await (0,h.readFile)(e,"utf8"),r=Number(t);if(t.trim()&&Number.isSafeInteger(r)&&r>0&&!e_(r)){await (0,h.unlink)(e);continue}}catch(e){if("ENOENT"===e.code)continue;throw e}if(Date.now()>=o)throw Error("Timed out acquiring job lock: "+e);await new Promise(e=>setTimeout(e,25))}return async()=>{try{await (0,h.unlink)(e)}finally{await t()}}}finally{try{await (0,h.unlink)(i).catch(e=>{if("ENOENT"!==e.code)throw e})}finally{r||await t()}}}function e8(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}let e6=["pinned","sortOrder","stateSortOrder","group"],e5=/^[A-Za-z0-9_-]{1,64}$/,e7=".locks";class e9{homeDir;constructor(e=()=>process.env.CODEBUDDY_CONFIG_DIR?.trim()?process.env.CODEBUDDY_CONFIG_DIR:(0,s.join)((0,y.homedir)(),".codebuddy")){this.homeDir=e}writeQueues=new Map;lastReapAt=0;inboxSeq=0;getJobsDir(){return(0,s.join)(this.homeDir(),"jobs")}static INBOX_PROCESSING_DIR=".processing";getJobDir(e){if(!e5.test(e))throw Error("Invalid job id");return(0,s.join)(this.getJobsDir(),e)}async create(e){let t=e.sessionId.slice(0,8),r=new Date().toISOString(),i={state:"working",detail:e.detail??"starting…",tempo:"active",output:null,children:null,intent:e.intent,initialPrompt:e.initialPrompt,name:e.name,nameSource:e.nameSource,sessionId:e.sessionId,shortId:t,cwd:e.cwd,createdAt:r,updatedAt:r,firstTerminalAt:null,pid:e.pid,logPath:e.logPath,respawnArgs:e.respawnArgs,exec:e.exec,bgIsolation:e.bgIsolation,inPlaceWorker:e.inPlaceWorker,foregroundHeld:e.foregroundHeld};return await this.withJobLock(t,async()=>{await this.ensureJobDir(t),await (0,h.mkdir)((0,s.join)(this.getJobDir(t),"tmp"),{recursive:!0,mode:448}),await this.writeStateAtomic(t,i)}),t}async read(e){if(!e5.test(e))return;let t=await this.readFileSafe((0,s.join)(this.getJobDir(e),R));if(void 0===t)return;let r=this.parseState(t);if(r)return this.overlayBrokerEndpoint(e,r)}async patch(e,t){this.maybeReapDeadJobs(),await this.queuePatch(e,t)}async patchQuiet(e,t){await this.queuePatch(e,t)}async patchIf(e,t,r){return this.queuePatch(e,t,r)}queuePatch(e,t,r){let i=(this.writeQueues.get(e)??Promise.resolve()).then(()=>this.doPatch(e,t,r)),o=i.then(()=>void 0,()=>void 0);return this.writeQueues.set(e,o),o.then(()=>{this.writeQueues.get(e)===o&&this.writeQueues.delete(e)}),i}maybeReapDeadJobs(){let e=Date.now();e-this.lastReapAt<6e4||(this.lastReapAt=e,eQ({store:this,isProcessRunning:e8}).catch(()=>{}))}async list(){let e,t=this.getJobsDir();try{e=await (0,h.readdir)(t)}catch{return[]}let r=await this.readPins();return(await Promise.all(e.filter(e=>e!==P&&e!==e7&&e5.test(e)).map(async e=>{let t=await this.read(e);if(!t)return;let[i,o,n]=await Promise.all([this.readNumberSidecar(e,"order"),this.readNumberSidecar(e,J),this.readTextSidecar(e,"group")]);return{id:e,state:t,display:{pinned:r.has(e),sortOrder:i,stateSortOrder:o,group:n}}}))).filter(e=>void 0!==e)}async remove(e){await this.withJobLock(e,async()=>{await this.setPinned(e,!1),await (0,h.rm)(this.getJobDir(e),{recursive:!0,force:!0})})}async removeIf(e,t){return this.withJobLock(e,async()=>{let r=await this.readStateForMutation(e);return!!r&&!!t(await this.overlayBrokerEndpoint(e,r))&&(await this.setPinned(e,!1),await (0,h.rm)(this.getJobDir(e),{recursive:!0,force:!0}),!0)})}async readPins(){let e=await this.readFileSafe((0,s.join)(this.getJobsDir(),P));if(void 0===e)return new Set;try{let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>"string"==typeof e)):new Set}catch{return new Set}}async setPinned(e,t){await this.withLock(`${P}.lock`,async()=>{let r=await this.readFileForMutation((0,s.join)(this.getJobsDir(),P)),i=[];try{i=void 0===r?[]:JSON.parse(r)}catch{i=void 0}let o=Array.isArray(i)&&i.every(e=>"string"==typeof e);o||void 0===r||await (0,h.writeFile)((0,s.join)(this.getJobsDir(),`${P}.${(0,u.randomUUID)()}.corrupt`),r,{flag:"wx",mode:384});let n=new Set(Array.isArray(i)?i.filter(e=>"string"==typeof e):[]);if(t)n.add(e);else if(!n.delete(e)&&o)return;await this.writeAtomic((0,s.join)(this.getJobsDir(),P),JSON.stringify([...n],null,2))})}async setOrder(e,t,r){let i=(0,s.join)(this.getJobDir(e),"state"===t?J:"order");void 0===r?await this.unlinkSafe(i):(await this.ensureJobDir(e),await this.writeAtomic(i,String(r)))}async setGroup(e,t){let r=(0,s.join)(this.getJobDir(e),"group");void 0===t||""===t.trim()?await this.unlinkSafe(r):(await this.ensureJobDir(e),await this.writeAtomic(r,t.trim()))}async enqueueReply(e,t){await this.withJobLock(e,async()=>{let r=(0,s.join)(this.getJobDir(e),"inbox");await (0,h.mkdir)(r,{recursive:!0,mode:448});let i={...t,at:Date.now()},o=`${i.at}-${process.pid}-${this.inboxSeq++}.json`;await this.writeAtomic((0,s.join)(r,o),JSON.stringify(i,null,2));let n=await this.readStateForMutation(e);if(n?.workerReclaimGeneration!==void 0&&n.workerReclaimGeneration===n.workerGeneration){let t=(0,s.join)(this.homeDir(),"agent-home","wake");await (0,h.mkdir)(t,{recursive:!0,mode:448}),await this.writeAtomic((0,s.join)(t,Date.now()+"-"+(0,u.randomUUID)()+".json"),JSON.stringify({jobId:e}))}})}async commitReclaim(e,t){return this.withJobLock(e,async()=>{let r=await this.readStateForMutation(e);if(!r||r.sessionId!==t.sessionId||r.createdAt!==t.createdAt||r.pid!==t.pid||r.workerGeneration!==t.workerGeneration||r.idleSince!==t.idleSince||"idle"!==r.tempo||r.workerLaunchToken||r.attachedAt||r.foregroundHeld||r.inPlaceWorker||r.exec)return!1;for(let t of["inbox","colleague-inbox"])if((await (0,h.readdir)((0,s.join)(this.getJobDir(e),t)).catch(e=>{if("ENOENT"===e.code)return[];throw e})).filter(e=>e.endsWith(".json")).length)return!1;return await this.readFileForMutation((0,s.join)(this.getJobDir(e),j))===void 0&&(await this.writeStateAtomic(e,{...r,workerReclaimGeneration:r.workerGeneration}),!0)})}inboxProcessingDir(e){return(0,s.join)(this.getJobDir(e),"inbox",e9.INBOX_PROCESSING_DIR)}async drainInbox(e){let t=(0,s.join)(this.getJobDir(e),"inbox"),r=this.inboxProcessingDir(e),i=await this.withJobLock(e,async()=>{let e=(await (0,h.readdir)(r).catch(()=>[])).filter(e=>e.endsWith(".json")),i=(await (0,h.readdir)(t).catch(()=>[])).filter(e=>e.endsWith(".json")).sort((e,t)=>this.inboxSortKey(e)-this.inboxSortKey(t)).slice(0,Math.max(0,64-e.length)),o=[];for(let n of(i.length>0&&await (0,h.mkdir)(r,{recursive:!0,mode:448}).catch(()=>void 0),[...e,...i])){let e=(0,s.join)(r,n);if(i.includes(n))try{await (0,h.rename)((0,s.join)(t,n),e)}catch{continue}let a=await this.readFileForMutation(e);if(void 0===a){await this.unlinkSafe(e);continue}o.push({path:e,raw:a})}return o}),o=[];for(let e of i)try{let t=JSON.parse(e.raw);"string"==typeof t?.text?o.push(t):(console.warn(`[JobStore] drainInbox dropped non-text reply in ${e.path}`),await this.unlinkSafe(e.path))}catch{console.warn(`[JobStore] drainInbox dropped bad JSON in ${e.path}`),await this.unlinkSafe(e.path)}return o}async ackInbox(e){let t=this.inboxProcessingDir(e);await this.withJobLock(e,async()=>{for(let e of(await (0,h.readdir)(t).catch(()=>[])).filter(e=>e.endsWith(".json")))await this.unlinkSafe((0,s.join)(t,e))})}async releaseInbox(e){let t=(0,s.join)(this.getJobDir(e),"inbox"),r=this.inboxProcessingDir(e);await this.withJobLock(e,async()=>{for(let e of(await (0,h.readdir)(r).catch(()=>[])).filter(e=>e.endsWith(".json")))await (0,h.rename)((0,s.join)(r,e),(0,s.join)(t,e)).catch(()=>void 0)})}async savePendingReply(e,t){return!t.bash&&(await this.withJobLock(e,async()=>{await this.ensureJobDir(e);let r={...t,at:Date.now()};await this.writeAtomic((0,s.join)(this.getJobDir(e),j),JSON.stringify(r,null,2))}),!0)}async readPendingReply(e){let t=(0,s.join)(this.getJobDir(e),j),r=await this.readFileSafe(t);if(void 0!==r)try{let e=JSON.parse(r);return"string"==typeof e?.text?e:void 0}catch{return}}async takePendingReply(e,t){return this.withJobLock(e,async()=>{let r,i=(0,s.join)(this.getJobDir(e),j),o=await this.readFileForMutation(i);if(void 0!==o){try{r=JSON.parse(o)}catch{return}if("string"==typeof r?.text&&(!t||r.at===t.at&&r.text===t.text&&r.bash===t.bash))return await (0,h.unlink)(i),r}})}async setBrokerEndpoint(e,t,r){await this.withJobLock(e,async()=>{if(r){let t=await this.readBrokerEndpoint(e);if(!t||t.pid!==r.pid||t.attachSocket!==r.attachSocket)return}let i=(0,s.join)(this.getJobDir(e),x);void 0===t?await this.unlinkSafe(i):await this.readStateForMutation(e)&&await this.writeAtomic(i,JSON.stringify(t,null,2))})}async readBrokerEndpoint(e){let t=await this.readFileSafe((0,s.join)(this.getJobDir(e),x));if(void 0!==t)try{let e=JSON.parse(t);if("number"==typeof e?.pid&&"string"==typeof e?.attachSocket)return{pid:e.pid,attachSocket:e.attachSocket,...eP(ex(e))}}catch{}}async doPatch(e,t,r){return this.withJobLock(e,async()=>{let i=await this.readStateForMutation(e);if(!i||r&&!r(await this.overlayBrokerEndpoint(e,i)))return!1;let o={...i,...t,updatedAt:new Date().toISOString()};return await this.writeStateAtomic(e,o),!0})}withJobLock(e,t){return e5.test(e)?this.withLock(`${e}.state.lock`,t):Promise.reject(Error("Invalid job id"))}async withLock(e,t){await this.ensureJobsDir();let r=(0,s.join)(this.getJobsDir(),e7);await (0,h.mkdir)(r,{recursive:!0,mode:448});let i=(0,s.join)(r,e),o=await e4(i);try{return await t()}finally{await o()}}async readFileForMutation(e){try{return await (0,h.readFile)(e,"utf8")}catch(e){if("ENOENT"===e.code)return;throw e}}async readStateForMutation(e){let t=await this.readFileForMutation((0,s.join)(this.getJobDir(e),R));if(void 0===t)return;let r=this.parseState(t);if(!r)throw Error(`Invalid job state: ${e}`);return r}async overlayBrokerEndpoint(e,t){let r=await this.readBrokerEndpoint(e);if(!r||void 0!==t.workerGeneration&&t.workerGeneration!==r.pid)return{...t};let i=ex(r);return await ej(r.pid,i)?{...t,pid:r.pid,attachSocket:r.attachSocket,...eP(i)}:(await this.unlinkSafe((0,s.join)(this.getJobDir(e),x)),{...t})}async writeStateAtomic(e,t){let r={...t};for(let e of e6)delete r[e];await this.writeAtomic((0,s.join)(this.getJobDir(e),R),JSON.stringify(r,null,2))}async writeAtomic(e,t){let r=`${e}.${process.pid}.${(0,u.randomUUID)()}.tmp`;try{await (0,h.writeFile)(r,t,{mode:384,flag:"wx"}),await (0,h.rename)(r,e)}catch(e){throw await this.unlinkSafe(r),e}}async ensureJobsDir(){let e=this.getJobsDir();await (0,h.mkdir)(e,{recursive:!0,mode:448});try{await (0,h.chmod)(e,448)}catch{}}async ensureJobDir(e){await this.ensureJobsDir(),await (0,h.mkdir)(this.getJobDir(e),{recursive:!0,mode:448})}async readFileSafe(e){try{return await (0,h.readFile)(e,"utf8")}catch{return}}async unlinkSafe(e){try{await (0,h.unlink)(e)}catch{}}parseState(e){let t;try{t=JSON.parse(e)}catch{return}if("object"!=typeof t||null===t)return;let r=t;for(let e of["state","sessionId","cwd","createdAt","updatedAt"])if("string"!=typeof r[e]||""===r[e])return;return{...r,detail:"string"==typeof r.detail?r.detail:"",tempo:r.tempo??"idle",intent:"string"==typeof r.intent?r.intent:"",shortId:"string"==typeof r.shortId?r.shortId:r.sessionId.slice(0,8)}}async readNumberSidecar(e,t){let r=await this.readTextSidecar(e,t);if(void 0===r)return;let i=Number(r);return Number.isFinite(i)?i:void 0}async readTextSidecar(e,t){let r=await this.readFileSafe((0,s.join)(this.getJobDir(e),t));if(void 0===r)return;let i=r.trim();return""===i?void 0:i}inboxSortKey(e){let t=Number(e.split("-")[0]);return Number.isFinite(t)?t:0}}let te=process.env.CODEBUDDY_JOB_INNER_ENTRY;if(delete process.env.CODEBUDDY_JOB_INNER_ENTRY,!function(e=process.env){$||($=!0,i=L(e[O]),o=L(e[A]),Number.isInteger(Number(L(e[I]))),L(e[_]),L(e.CODEBUDDY_JOB_RECLAIM_TOKEN),F=!!L(e[N]),function(e){for(let t of C)delete e[t]}(e))}(),d(process.env),!te||!i||!F)throw Error("Lightweight broker requires an explicit inner entry and job identity");let tt=Date.now(),tr={setContext(e){},info(e){process.stdout.write(e+"\n")},warn(e){process.stderr.write(e+"\n")}};new eV({store:new e9,logger:tr,entry:(0,s.resolve)(te),buildRespawnArgs:(e,t)=>[e,...t]}).run().catch(e=>{tr.warn(String(e)),process.exitCode=1}).finally(()=>{"1"===process.env.CODEBUDDY_STARTUP_PROFILE&&tr.info(JSON.stringify({phase:"job_broker_exit",elapsedMs:Date.now()-tt,rss:process.memoryUsage().rss}))})},421(e){e.exports=require("node:child_process")},24(e){e.exports=require("node:fs")},995(e){e.exports=require("node:module")},760(e){e.exports=require("node:path")},338(e,t,r){e=r.nmd(e);let{spawn:i}=r(421),{openSync:o,closeSync:n}=r(24),a=r(760),s=Symbol.for("codebuddy.daemon-supervisor"),c="CODEBUDDY_INTERNAL_DAEMON_CHANNEL",l="--internal-daemon-supervisor";function d(){let e=process.versions.bun&&/^(\/\$bunfs\/|[A-Za-z]:[\\/]~BUN[\\/])/.test(process.argv[1]||"")?[l]:[a.resolve(__dirname,"../bin/daemon-supervisor.cjs")],t=i(process.execPath,e,{detached:!0,windowsHide:!0,stdio:["ignore","ignore","ignore","ipc"]});return t.on("error",e=>{t.supervisorError=e}),t.unref(),t.channel?.unref?.(),globalThis[s]=t,t}let u=0;function p(){if(!process.send)throw Error("Daemon supervisor requires an inherited IPC channel");let e=new Set,t=()=>{process.connected||0!==e.size||process.exit(0)},r=a=>{let s=!1;a.on("message",l=>{let d;if(l?.type!=="start-daemon")return;let{id:u,command:p,args:f,options:h}=l,w=e=>{a.connected&&a.send({type:"daemon-started",id:u,...e},()=>{})};if(s)return void w({error:"Daemon already handed off by this process"});if(!Array.isArray(f)||!f.includes("--serve")||h?.env?.CODEBUDDY_SESSION_KIND!=="daemon")return void w({error:"Supervisor only starts daemon workers"});try{d=void 0===h.logPath?void 0:o(h.logPath,"a");let n=i(p,f,{cwd:h.cwd,env:{...h.env,[c]:"1"},detached:!0,windowsHide:!0,stdio:["ignore",d??"ignore",d??"ignore","ipc"]});s=!0,e.add(n),r(n),n.once("spawn",()=>w({pid:n.pid})),n.once("error",r=>{s=!1,e.delete(n),w({error:r.message}),t()}),n.once("exit",()=>{e.delete(n),t()})}catch(e){w({error:e.message})}finally{void 0!==d&&n(d)}})};r(process),process.on("disconnect",t)}e.exports={prepare:function(e=process.platform){if("win32"!==e)return;if(globalThis[s])return globalThis[s];if(process.env[c]&&(delete process.env[c],process.send&&process.connected))return globalThis[s]=process,process.channel?.unref?.(),process;let t=process.argv.slice(2);if("daemon"===t[0]&&["start","restart","install"].includes(t[1]))return d()},start:d,spawnDaemon:function(e,t,r){let i=globalThis[s];if(!i?.connected||i.supervisorError)return Promise.reject(i?.supervisorError||Error("Daemon supervisor unavailable; start it with codebuddy daemon start"));let o=++u;return new Promise((n,a)=>{let s=setInterval(()=>{},6e4),c=(e,t)=>{clearInterval(s),i.off("message",d),i.off("disconnect",l),i.channel?.unref?.(),e?a(e):n(t)},l=()=>c(Error("Daemon supervisor disconnected during startup")),d=e=>{e?.type==="daemon-started"&&e.id===o&&c(e.error?Error(e.error):void 0,{pid:e.pid})};i.on("message",d),i.once("disconnect",l),i.channel?.ref?.();try{i.send({type:"start-daemon",id:o,command:e,args:t,options:r},e=>{e&&c(e)})}catch(e){c(e)}})},run:p,FLAG:l},r.c[r.s]===e&&p()},188(e,t,r){let{loadBinding:i}=r(624),o=Symbol.for("codebuddy.no-orphans"),n="--no-orphans",a="CODEBUDDY_DISABLE_CHILD_PROCESS_CONTAINMENT";function s(e=process.env){let t=e[a];if(void 0===t||["","0","false"].includes(t))return!1;if(["1","true"].includes(t))return!0;throw Error(`${a} must be 0, 1, true, false, or unset`)}e.exports={install:function({platform:e=process.platform,environment:t=process.env,args:a=process.argv.slice(2),state:c=globalThis,loadBinding:l=i,warn:d=e=>process.emitWarning(e)}={}){if(void 0!==c[o])return c[o];if("win32"!==e)return c[o]=!1;let u=a.indexOf("--");if(!a.slice(0,u<0?a.length:u).includes(n)&&s(t))return c[o]=!1;r(338).prepare();try{return l().ensureKillOnCloseJob(),c[o]=!0}catch(e){return c[o]=!1,d(`Windows no-orphans cleanup unavailable: ${e.message}`),!1}},isEnabled:function(){return"win32"===process.platform&&!0===globalThis[o]},isDisabled:s,DISABLE_ENV:a,NO_ORPHANS_FLAG:n}},624(e,t,r){let i,o=r(760),{createRequire:n}=r(995);e.exports={loadBinding:function(){if("win32"!==process.platform)throw Error("Windows Job binding requires win32");if(!i)if(globalThis.__CODEBUDDY_WINDOWS_JOB_NATIVE__)i=globalThis.__CODEBUDDY_WINDOWS_JOB_NATIVE__();else{let e=o.resolve(__dirname,"../bin/native",`win32-${process.arch}`,"job-object.node");i=n(__filename)(e)}return i}}}},t={};function r(i){var o=t[i];if(void 0!==o)return o.exports;var n=t[i]={id:i,loaded:!1,exports:{}};return e[i](n,n.exports,r),n.loaded=!0,n.exports}r.c=t,r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.rv=()=>"1.7.6",r.ruid="bundler=rspack@1.7.6",r(r.s=278)})();
|