chainlesschain 0.162.174 → 0.162.175

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-Dcl-X1Hw.js → AIOps-DherW0Rh.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-ClMh9HzT.js → ActionButton-CDGfqt2Y.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-DPj0rSQ5.js → Analytics-BYhkzdgD.js} +3 -3
  5. package/src/assets/web-panel/assets/AppLayout-cEKk1cpb.js +9 -0
  6. package/src/assets/web-panel/assets/{Artifacts-L8781rE8.js → Artifacts-_aXR3WWc.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-CffB6WIP.js → Audit-CYAf-gY7.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-BkLhayyY.js → BackgroundAgents-D4Q20phR.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-BQnwFI78.js → Backup-Cq0Tyk58.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-xuUGHQch.js → BaseInput-CPj_CdAv.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-feQXwWrg.js → Chat-BQ-Qq0es.js} +5 -5
  12. package/src/assets/web-panel/assets/ChatBubbleRenderer-Ci97vNTs.js +1 -0
  13. package/src/assets/web-panel/assets/{Checkbox-DVaIiUGW.js → Checkbox-rke6l3yg.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-D2kEnzeU.js → Codegen-DiacrIPq.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-azDoyusS.js → Col-Cx3BY-Up.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-OZdnPWM5.js → Community-DfmWiQy8.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-VDMvBN-C.js → Compact-DdQnpxy5.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-CPJ_zgQ1.js → Compliance-lzliOH_r.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-iRBwcsOA.js → Cowork-CYx4Un5k.js} +2 -2
  20. package/src/assets/web-panel/assets/{Cron-DrxrspUz.js → Cron-BGDcPFlo.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-D-rkAZXF.js → Crosschain-0_X5g2ri.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-5Pp1Xnmr.js → DID-C0PEf3Eu.js} +2 -2
  23. package/src/assets/web-panel/assets/Dashboard-DULQjQ58.js +3 -0
  24. package/src/assets/web-panel/assets/{Dropdown-BWj_E0Ie.js → Dropdown-DGRHRbW6.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-BT-wgSEh.js → EmailListRenderer-ChX8XPwB.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-1PzH23pa.js → FamilyGuardDashboard-Dyq6IBNu.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-BxMIXGC6.js → Federation-DH1NfAL2.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-CyJobBln.js → FormItemContext-BN1I_uNi.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-YkjFuQTN.js → GenericCardRenderer-Dq_2UYpe.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-C2a98Wp_.js → Git-BAy1yvI2.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-DKL3Fl84.js → Governance-Db6Q2iSy.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-BJ2cQC_3.js → Inference-0ub6yHcr.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-DBAsOngt.js → KnowledgeGraph-DtLetM36.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-COt8g9LO.js → Logs-Bcoy7CUd.js} +2 -2
  35. package/src/assets/web-panel/assets/{MarkdownRenderer-3Lfht1Fd.js → MarkdownRenderer-BfEMFAXf.js} +1 -1
  36. package/src/assets/web-panel/assets/{Marketplace-C9Zk9Pb2.js → Marketplace-tt2rzwRR.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-DDWDFWPO.js → McpTools-BhOgX-MU.js} +3 -3
  38. package/src/assets/web-panel/assets/{Memory-BRmVye_o.js → Memory-BJUxeWBL.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-CppBbWpD.js → MobileBridge-BwUY2G9w.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-C4GKn1dH.js → MobileProjects-BLRfHhqi.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-CcWpeGa6.js → Mtc-B2WMboOm.js} +4 -4
  42. package/src/assets/web-panel/assets/{MtcAudit-BcllEq0K.js → MtcAudit-8pNEXO63.js} +4 -4
  43. package/src/assets/web-panel/assets/{Multisig-BFD1CarL.js → Multisig-C1wm5a_1.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-QNXXYvjz.js → NLProgramming-C1QpKF7g.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-07YwgQVy.js → Notes-CiQUcxFu.js} +3 -3
  46. package/src/assets/web-panel/assets/{NotificationSettings-bOccEInE.js → NotificationSettings-BblDPJ_x.js} +1 -1
  47. package/src/assets/web-panel/assets/{OrderTableRenderer-DlRi29WL.js → OrderTableRenderer-DRjYcPtb.js} +1 -1
  48. package/src/assets/web-panel/assets/{Organization-CBaezzEr.js → Organization-Dp3VKB0X.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-Bl5NohFO.js → Overflow-Czx161m9.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-CLMal9Aw.js → P2P-ClFi6wOs.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-CGO0NITk.js → PdhVaultBrowser-CRweW0lz.js} +3 -3
  52. package/src/assets/web-panel/assets/{Permissions-CPSw48E2.js → Permissions-BzcRoqTn.js} +4 -4
  53. package/src/assets/web-panel/assets/{PersonalDataHub-CDM5n134.js → PersonalDataHub-ChGTpNMd.js} +2 -2
  54. package/src/assets/web-panel/assets/{Pipeline-BdsqG7WV.js → Pipeline-BMOOpKWA.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-B6L4E-M7.js → Privacy-D0AZHObH.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-DXPyZKRs.js → ProjectInit-yYFlZ6Ja.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-BrCC3xYT.js → ProjectSettings-DJNVuMQs.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-BYmuHC2q.js → Projects-Br0rBWH1.js} +1 -1
  59. package/src/assets/web-panel/assets/Providers-zZRhNtSu.js +1 -0
  60. package/src/assets/web-panel/assets/{QrScannerModal-DkukgCrR.js → QrScannerModal-81NZOitV.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-D-htOrV8.js → QuickAsk-Dic2lCbJ.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-Bm7SIfzu.js → Recommend-Dh9iwViE.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-C9rP-iMc.js → RemoteSession-Bq9VYEFy.js} +2 -2
  64. package/src/assets/web-panel/assets/{Reputation-kGlUgbsl.js → Reputation-CxFZ-NbJ.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-PBupbbUA.js → Row-BVSLcaX2.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-njlwKUGK.js → RssFeed-BbC-5DOH.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-DLdEmgBw.js → Search-BfjZ1GCr.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-SXGPSHdu.js → Security-CVjhOV5r.js} +4 -4
  69. package/src/assets/web-panel/assets/{Services-CuFGnNsb.js → Services-D45u-Aqe.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-CtUC0mDa.js → Skeleton-WkGoK4he.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-P1qgOVFn.js → Skills-D_jvQZcj.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-CsppE8YV.js → Sla-Bf4QTF3E.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-Cq1oG56m.js → SpeechSettings-DVpZdbMN.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-DdKW6V-C.js → SyncSettings-DEEojoMS.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-BCc9san5.js → Tasks-DFwxpLIk.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-CcHC1dMA.js → Templates-Bzl-9wY5.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-CA4PqU22.js → Tenant-0khxUOB8.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-Fj7ea0In.js → Terminal-DWGYhAYU.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-DHWTSvOy.js → TimelineRenderer-B0Y4LONc.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-Ddz-P_yh.js → Tokens-DEE07SFh.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-ePmrmLZ1.js → Trigger-BM7xvA5z.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-DmuK1CCE.js → Trust-Dv3ijvvZ.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-CqqBuRrT.js → UkeySign-B1-enmMt.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-BGlR3uWM.js → VideoEditing-DYiIPByd.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-Ba_Qx6Ga.js → Wallet-D-y374BQ.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-29neXKt2.js → WebAuthn-HBDjcUhi.js} +3 -3
  87. package/src/assets/web-panel/assets/{WorkflowEditor-lD0lR0UQ.js → WorkflowEditor-sKn4qTID.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-B3stH01u.js → chat-TVYhaBXj.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-Czly56MN.js → colors-DMADxY9v.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-C0TkbkAJ.js → compact-item-OftcHpO_.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-BJmpSlf1.js → createContext-DW1zVUSN.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-CLOk6rdE.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-D1q-zw7u.js → hasIn-CaUathNp.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-C7sFKQ53.js → index--5UvwqH_.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-Dpz_7sf-.js → index-77kgkUgY.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DlvsSuBC.js → index-8YelceUU.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-CpMIdPJ0.js → index-B-19mFhn.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BEt2-3x5.js → index-B52Ztt8Q.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CQftlZn-.js → index-BBNg08cD.js} +3 -3
  100. package/src/assets/web-panel/assets/{index-upY9rkGZ.js → index-BEzLLVYd.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BDHXx65P.js → index-BFVbDpqg.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DmUta2lw.js → index-BJ1PjRY3.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-z8ATo2aQ.js → index-BSp1Ofvx.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DO8xOwxi.js → index-Bg-7FpaL.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DpGs96FC.js → index-BupSWDcl.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-K4YaPDOn.js → index-BvRw4Fna.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-B8KqsomG.js → index-C9JoaYSs.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-8GKykbS4.js → index-CK-p7Hji.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Dw3L_smW.js → index-CKNdnJRo.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DAhrn9EJ.js → index-CM8W07sc.js} +1 -1
  111. package/src/assets/web-panel/assets/index-CSgUfMTM.js +1 -0
  112. package/src/assets/web-panel/assets/{index-C1pOqU7D.js → index-CZXYI5LU.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DV-twjNO.js → index-CeCIYYG7.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DIF6XHIi.js → index-Cmdv6Dev.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-Cu_4HaUS.js → index-CpDtN0dl.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DRcQsPez.js → index-D63QVAiJ.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-B-kTvMq7.js → index-DAfT3EMd.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CHvPlzWJ.js → index-DHi634g9.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CgS8XUBU.js → index-DKjqFpYa.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-ZDUhX41Z.js → index-DWVZ3T0t.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BVwJ3jht.js → index-DXcqvWBp.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CbvNJUwu.js → index-DYwwUKDg.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DaqEHaCg.js → index-DZdT8nio.js} +1 -1
  124. package/src/assets/web-panel/assets/index-DliSZvAP.js +1 -0
  125. package/src/assets/web-panel/assets/{index-DBqAm8es.js → index-GUKz4Pv9.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-ChESIe5r.js → index-Lr0MO-GU.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-C27TnOoT.js → index-hXq7QRA_.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-cPjWjvmW.js → index-iDmgT2Dg.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-Cf7Gr3NG.js → index-kdMl_0zL.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-XWV8JWMc.js → index-pSVCBsG4.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DZeoKL6t.js → index-s-EnkUCn.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-Bm_-RKal.js → index-sm1sGIxW.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-QWEXi6-t.js → initDefaultProps-DdcKTlQR.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-BfrQwvV1.js → motion-CL-hTBQj.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-Dn7x0H9t.js → move-qYSAkxNG.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-F61D_TgE.js → mtc-parser-ZwRSZtRP.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-4SQZ39PF.js → omit-Bld-8ftI.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-C7DTe126.js → pickAttrs-DGHs-a9Z.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-40NeyzDK.js → placementArrow-DRQPMyI5.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-BiUJ6qWs.js → responsiveObserve-C5MJG_Yo.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-CacJTM3f.js → slide-VZ-fpZCD.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-K812HB-k.js → statusUtils-9ocfCyHk.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-CKeHA2eM.js → styleChecker-B6QAwAN5.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-CKl4FqXF.js → useFlexGapSupport-Bq1twor3.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-DPoiJjSZ.js → useFs-DKZq96tz.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-aHwBspmt.js → usePersonalDataHub-D0RmRVXf.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-DrA-GuCT.js → vnode-D6kEj_tt.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-G3LMswgy.js → zoom-2yfasoQf.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/commands/agent.js +6 -2
  151. package/src/commands/background-session.js +103 -0
  152. package/src/esm-bridge.js +3 -0
  153. package/src/gateways/ws/ws-server.js +18 -2
  154. package/src/index.js +123 -55
  155. package/src/lazy-dispatch.js +86 -85
  156. package/src/lib/async-hook-supervisor.cjs +14 -2
  157. package/src/lib/background-interaction-resolver.js +71 -0
  158. package/src/lib/background-session-transport.js +59 -1
  159. package/src/lib/crash-reporter.js +6 -0
  160. package/src/lib/hook-manager.js +32 -4
  161. package/src/lib/ipc-attach-protocol.js +98 -0
  162. package/src/lib/process-execution-broker/credential-agent.js +275 -0
  163. package/src/lib/process-execution-broker/index.js +155 -6
  164. package/src/lib/process-execution-broker/platform-sandbox.js +351 -0
  165. package/src/lib/provenance-api.js +6 -0
  166. package/src/lib/proxy-bootstrap.js +19 -0
  167. package/src/lib/repl-rewind.js +9 -4
  168. package/src/lib/session-hooks.js +328 -473
  169. package/src/lib/session-telemetry-middleware.js +6 -0
  170. package/src/lib/trace-api.js +6 -0
  171. package/src/lib/update-notice.js +3 -43
  172. package/src/repl/agent-repl.js +39 -13
  173. package/src/workers/background-agent-worker.js +80 -1
  174. package/src/assets/web-panel/assets/AppLayout-7iSKDmlI.js +0 -9
  175. package/src/assets/web-panel/assets/ChatBubbleRenderer-DcbUHeGW.js +0 -1
  176. package/src/assets/web-panel/assets/Dashboard-BAKYNavw.js +0 -3
  177. package/src/assets/web-panel/assets/Providers-CbCe2eUl.js +0 -1
  178. package/src/assets/web-panel/assets/devWarning-CDI8Sbaj.js +0 -1
  179. package/src/assets/web-panel/assets/index-96LBR96V.js +0 -1
  180. package/src/assets/web-panel/assets/index-DyQkiW24.js +0 -1
@@ -1 +1 @@
1
- import{u as f}from"./index-CQftlZn-.js";function d(n){if(!n)return n;if(n.error)throw new Error(n.error);return n.result!==void 0?n.result:n}function p(n,t,a,e,r){return typeof n.onMessage!="function"||typeof n.sendRaw!="function"?n.sendRaw({type:t,...a},r).then(d):new Promise((u,s)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${t}.event`,g=`${t}.end`;let c=!1,y=()=>{};const o=(i,b)=>{if(!c){c=!0,clearTimeout(m);try{y()}catch{}i(b)}},m=setTimeout(()=>{o(s,new Error(`stream timeout (${r}ms): ${t}`))},r),h=n.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof e=="function")try{e(i.event||i)}catch{}return}if(i.type===g){o(u,d(i));return}i.type==="error"&&o(s,new Error(i.message||"stream error"))}});y=typeof h=="function"?h:()=>{},Promise.resolve(n.sendRaw({id:l,type:t,...a},r)).catch(()=>{})})}function D(){const n=f(),t=(a,e={},r=3e4)=>n.sendRaw({type:a,...e},r).then(d);return{async health(){return await t("personal-data-hub.health",{},8e3)},async stats(){return await t("personal-data-hub.stats",{},8e3)},async listAdapters(){return await t("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const e=await n.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),r=e&&e.result!==void 0?e.result:e;return r&&r.ok&&typeof r.filePath=="string"?r.filePath:null}catch{return null}},async adapterReadiness(a){return await t("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,e={}){return await t("personal-data-hub.sync-adapter",{name:a,options:e},12e4)},async syncAll(a={}){return await t("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:e=20,seed:r=1}={}){return await t("personal-data-hub.register-mock",{name:a,count:e,seed:r})},async unregister(a){return await t("personal-data-hub.unregister",{name:a})},async ask(a,e={}){return await t("personal-data-hub.ask",{question:a,options:e},18e4)},async queryEvents(a={}){return await t("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await t("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await t("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await t("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await t("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,e={}){return await t("personal-data-hub.register-email",{account:a,opts:e},15e3)},async unregisterEmail(a){return await t("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await t("personal-data-hub.list-email-accounts",{},5e3)},async eventDetail(a){return await t("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,e={},r){return await p(n,"personal-data-hub.sync-adapter-stream",{name:a,options:e},r,6e5)},async syncAllStream(a={},e){return await p(n,"personal-data-hub.sync-all-stream",{options:a},e,9e5)},async registerAlipay(a,e={}){return await t("personal-data-hub.register-alipay",{account:a,opts:e},15e3)},async unregisterAlipay(a){return await t("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await t("personal-data-hub.list-alipay-accounts",{},5e3)},async importAlipayBill({zipPath:a,csvPath:e,zipPassword:r}={}){return await t("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:e,zipPassword:r},3e5)},async reviewQueueList(a=50){return await t("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,e){return await t("personal-data-hub.review-decision",{reviewId:a,decision:e},5e3)},async manualMerge(a,e){return await t("personal-data-hub.manual-merge",{aId:a,bId:e},5e3)},async manualUnmerge(a){return await t("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await t("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await t("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await t("personal-data-hub.skills-list",{},5e3)},async runSkill(a,e={}){return await t("personal-data-hub.run-skill",{name:a,options:e},12e4)},async openAichatLogin(a,e={}){return await t("personal-data-hub.aichat-open-login",{vendor:a,opts:e},1e4)},async probeAichatCookies(a,e){return await t("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:e},1e4)},async registerAichatVendor(a,e,r={}){return await t("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:e,opts:r},3e4)},async rotateAichatLogin(a){return await t("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await t("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await t("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await t("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await t("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s}={}){return await t("personal-data-hub.register-wechat",{account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s},45e3)},async listWechatAccounts(){return await t("personal-data-hub.list-wechat-accounts",{},5e3)},async unregisterWechat(a){return await t("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await t("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await t("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await t("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await t("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await t("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await t("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await t("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await t("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{D as u};
1
+ import{u as f}from"./index-BBNg08cD.js";function d(n){if(!n)return n;if(n.error)throw new Error(n.error);return n.result!==void 0?n.result:n}function p(n,t,a,e,r){return typeof n.onMessage!="function"||typeof n.sendRaw!="function"?n.sendRaw({type:t,...a},r).then(d):new Promise((u,s)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${t}.event`,g=`${t}.end`;let c=!1,y=()=>{};const o=(i,b)=>{if(!c){c=!0,clearTimeout(m);try{y()}catch{}i(b)}},m=setTimeout(()=>{o(s,new Error(`stream timeout (${r}ms): ${t}`))},r),h=n.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof e=="function")try{e(i.event||i)}catch{}return}if(i.type===g){o(u,d(i));return}i.type==="error"&&o(s,new Error(i.message||"stream error"))}});y=typeof h=="function"?h:()=>{},Promise.resolve(n.sendRaw({id:l,type:t,...a},r)).catch(()=>{})})}function D(){const n=f(),t=(a,e={},r=3e4)=>n.sendRaw({type:a,...e},r).then(d);return{async health(){return await t("personal-data-hub.health",{},8e3)},async stats(){return await t("personal-data-hub.stats",{},8e3)},async listAdapters(){return await t("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const e=await n.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),r=e&&e.result!==void 0?e.result:e;return r&&r.ok&&typeof r.filePath=="string"?r.filePath:null}catch{return null}},async adapterReadiness(a){return await t("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,e={}){return await t("personal-data-hub.sync-adapter",{name:a,options:e},12e4)},async syncAll(a={}){return await t("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:e=20,seed:r=1}={}){return await t("personal-data-hub.register-mock",{name:a,count:e,seed:r})},async unregister(a){return await t("personal-data-hub.unregister",{name:a})},async ask(a,e={}){return await t("personal-data-hub.ask",{question:a,options:e},18e4)},async queryEvents(a={}){return await t("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await t("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await t("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await t("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await t("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,e={}){return await t("personal-data-hub.register-email",{account:a,opts:e},15e3)},async unregisterEmail(a){return await t("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await t("personal-data-hub.list-email-accounts",{},5e3)},async eventDetail(a){return await t("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,e={},r){return await p(n,"personal-data-hub.sync-adapter-stream",{name:a,options:e},r,6e5)},async syncAllStream(a={},e){return await p(n,"personal-data-hub.sync-all-stream",{options:a},e,9e5)},async registerAlipay(a,e={}){return await t("personal-data-hub.register-alipay",{account:a,opts:e},15e3)},async unregisterAlipay(a){return await t("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await t("personal-data-hub.list-alipay-accounts",{},5e3)},async importAlipayBill({zipPath:a,csvPath:e,zipPassword:r}={}){return await t("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:e,zipPassword:r},3e5)},async reviewQueueList(a=50){return await t("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,e){return await t("personal-data-hub.review-decision",{reviewId:a,decision:e},5e3)},async manualMerge(a,e){return await t("personal-data-hub.manual-merge",{aId:a,bId:e},5e3)},async manualUnmerge(a){return await t("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await t("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await t("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await t("personal-data-hub.skills-list",{},5e3)},async runSkill(a,e={}){return await t("personal-data-hub.run-skill",{name:a,options:e},12e4)},async openAichatLogin(a,e={}){return await t("personal-data-hub.aichat-open-login",{vendor:a,opts:e},1e4)},async probeAichatCookies(a,e){return await t("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:e},1e4)},async registerAichatVendor(a,e,r={}){return await t("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:e,opts:r},3e4)},async rotateAichatLogin(a){return await t("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await t("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await t("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await t("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await t("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s}={}){return await t("personal-data-hub.register-wechat",{account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s},45e3)},async listWechatAccounts(){return await t("personal-data-hub.list-wechat-accounts",{},5e3)},async unregisterWechat(a){return await t("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await t("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await t("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await t("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await t("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await t("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await t("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await t("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await t("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{D as u};
@@ -1 +1 @@
1
- import{N as i,h as a,w as l}from"./index-CQftlZn-.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-Bn1JzzAn.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function V(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function v(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,V as b,c,v as t};
1
+ import{N as i,h as a,w as l}from"./index-BBNg08cD.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-Bn1JzzAn.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function V(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function v(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,V as b,c,v as t};
@@ -1,4 +1,4 @@
1
- import{K as o}from"./index-CQftlZn-.js";import{i as f}from"./motion-BfrQwvV1.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
1
+ import{K as o}from"./index-BBNg08cD.js";import{i as f}from"./motion-CL-hTBQj.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
2
2
  ${t}-enter,
3
3
  ${t}-appear
4
4
  `]:{transform:"scale(0)",opacity:0,animationTimingFunction:n.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${t}-leave`]:{animationTimingFunction:n.motionEaseInOutCirc}}]};export{h as i,c as z};
@@ -8,7 +8,7 @@
8
8
  // Injected by web-ui-server.js at serve time
9
9
  window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
10
10
  </script>
11
- <script type="module" crossorigin src="./assets/index-CQftlZn-.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-BBNg08cD.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="./assets/vendor-Bn1JzzAn.js">
13
13
  <link rel="modulepreload" crossorigin href="./assets/icons-DG5UD-6K.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
@@ -517,7 +517,11 @@ export function registerAgentCommand(program) {
517
517
  const { setupAgentWorktree, finishAgentWorktree } =
518
518
  await import("../lib/agent-worktree.js");
519
519
  _finishAgentWorktreeFn = finishAgentWorktree;
520
- _worktree = setupAgentWorktree({ cwd: process.cwd() });
520
+ const worktreeCwd =
521
+ process.platform === "darwin"
522
+ ? process.cwd().replace(/^\/private\//, "/")
523
+ : process.cwd();
524
+ _worktree = setupAgentWorktree({ cwd: worktreeCwd });
521
525
  process.chdir(_worktree.path);
522
526
  process.stderr.write(
523
527
  `worktree: ${_worktree.path} (branch ${_worktree.branch})\n`,
@@ -1079,7 +1083,7 @@ export function registerAgentCommand(program) {
1079
1083
  if (promptWasPiped) childArgv.push(prompt);
1080
1084
  const state = launchBackgroundAgent({
1081
1085
  argv: childArgv,
1082
- cwd: process.cwd(),
1086
+ cwd: _worktree ? _worktree.path : process.cwd(),
1083
1087
  sessionId,
1084
1088
  title: prompt.slice(0, 100),
1085
1089
  followUpArgv,
@@ -151,6 +151,7 @@ async function followBackgroundAgent(id, options = {}) {
151
151
  }
152
152
 
153
153
  logger.log(chalk.gray(`Attached to ${id}. Streaming logs; Ctrl-C detaches.`));
154
+ // eslint-disable-next-line no-constant-condition
154
155
  while (true) {
155
156
  await new Promise((resolve) => setTimeout(resolve, 1000));
156
157
  const next = readLogFromOffset(logFile, offset);
@@ -224,6 +225,84 @@ export async function interactiveAttach(id, state, options = {}) {
224
225
  case "error":
225
226
  logger.log(chalk.yellow(`— ${message.message}`));
226
227
  return;
228
+ case "interaction_request": {
229
+ // P0-2: Human-in-the-loop interaction request from the agent
230
+ const {
231
+ intId,
232
+ prompt,
233
+ hint,
234
+ options: opts,
235
+ multiSelect,
236
+ timeoutMs,
237
+ } = message;
238
+ logger.log("");
239
+ logger.log(chalk.cyan.bold("? Agent asks for your input:"));
240
+ logger.log(chalk.white(` ${prompt}`));
241
+ if (hint) logger.log(chalk.gray(` (${hint})`));
242
+ if (timeoutMs)
243
+ logger.log(
244
+ chalk.gray(` (timeout: ${Math.round(timeoutMs / 1000)}s)`),
245
+ );
246
+ let promptText = " Your answer";
247
+ if (opts && Array.isArray(opts) && opts.length > 0) {
248
+ logger.log("");
249
+ opts.forEach((opt, idx) => {
250
+ const label =
251
+ typeof opt === "string" ? opt : opt.label || String(opt);
252
+ const desc =
253
+ typeof opt === "object" && opt.description
254
+ ? ` - ${opt.description}`
255
+ : "";
256
+ logger.log(chalk.white(` ${idx + 1}) ${label}${desc}`));
257
+ });
258
+ promptText = multiSelect
259
+ ? " Enter number(s) (comma-separated)"
260
+ : " Enter a number";
261
+ }
262
+ if (multiSelect)
263
+ logger.log(chalk.gray(" (multiple selections allowed)"));
264
+ // Pause the log stream and prompt the user via readline
265
+ rl.question(chalk.cyan(`${promptText}: `), (raw) => {
266
+ const answer = raw.trim();
267
+ let resolved = answer;
268
+ if (opts && Array.isArray(opts) && opts.length > 0) {
269
+ // Parse numeric selection
270
+ const nums = answer
271
+ .split(",")
272
+ .map((s) => parseInt(s.trim(), 10))
273
+ .filter((n) => n >= 1 && n <= opts.length);
274
+ if (nums.length === 0) {
275
+ logger.log(
276
+ chalk.yellow(" Invalid selection, sending raw text"),
277
+ );
278
+ } else if (multiSelect) {
279
+ resolved = nums.map((n) => opts[n - 1]);
280
+ } else {
281
+ resolved = opts[nums[0] - 1];
282
+ }
283
+ // Normalize to value if object option
284
+ if (multiSelect) {
285
+ resolved = resolved.map((o) =>
286
+ typeof o === "object" && o.value !== undefined
287
+ ? o.value
288
+ : o,
289
+ );
290
+ } else if (
291
+ typeof resolved === "object" &&
292
+ resolved.value !== undefined
293
+ ) {
294
+ resolved = resolved.value;
295
+ }
296
+ }
297
+ conn.send({
298
+ type: "interaction_response",
299
+ intId,
300
+ answer: resolved,
301
+ });
302
+ logger.log(chalk.gray("— response sent to agent"));
303
+ });
304
+ return;
305
+ }
227
306
  default:
228
307
  return;
229
308
  }
@@ -248,6 +327,14 @@ export async function interactiveAttach(id, state, options = {}) {
248
327
  ),
249
328
  );
250
329
 
330
+ // P0-2: If the agent is already waiting for human input (e.g. the question
331
+ // was issued before this client attached, or a previous client detached
332
+ // without answering), re-prompt immediately.
333
+ const preExistingQuestion =
334
+ state.status === "awaiting-input" && state.pendingQuestion
335
+ ? { ...state.pendingQuestion }
336
+ : null;
337
+
251
338
  const readline = await import("node:readline");
252
339
  const rl = readline.createInterface({
253
340
  input: process.stdin,
@@ -273,6 +360,21 @@ export async function interactiveAttach(id, state, options = {}) {
273
360
  const detach = () => rl.close();
274
361
  rl.on("SIGINT", detach);
275
362
 
363
+ if (preExistingQuestion) {
364
+ setImmediate(() => {
365
+ conn.onEvent?.({
366
+ type: "interaction_request",
367
+ intId: preExistingQuestion.intId,
368
+ prompt: preExistingQuestion.prompt,
369
+ hint: preExistingQuestion.hint,
370
+ options: preExistingQuestion.options,
371
+ multiSelect: preExistingQuestion.multiSelect,
372
+ timeoutMs: preExistingQuestion.timeoutMs,
373
+ _deferred: true,
374
+ });
375
+ });
376
+ }
377
+
276
378
  await new Promise((resolve) => {
277
379
  rl.on("close", resolve);
278
380
  const poll = setInterval(() => {
@@ -692,3 +794,4 @@ export function registerBackgroundSessionCommands(program) {
692
794
  }
693
795
  });
694
796
  }
797
+
@@ -0,0 +1,3 @@
1
+ /**
2
+ * ESM bridge stub for unit tests
3
+ */
@@ -859,6 +859,7 @@ export class ChainlessChainWSServer extends EventEmitter {
859
859
  ...process.env,
860
860
  FORCE_COLOR: "0",
861
861
  NO_SPINNER: "1",
862
+ NODE_NO_WARNINGS: "1",
862
863
  // When this server runs inside Electron (e.g. desktop web-shell)
863
864
  // process.execPath points at the Electron binary, not node. Setting
864
865
  // ELECTRON_RUN_AS_NODE=1 makes Electron behave as a plain Node
@@ -894,27 +895,42 @@ export class ChainlessChainWSServer extends EventEmitter {
894
895
 
895
896
  if (stream) {
896
897
  // Stream mode: send chunks as they arrive
898
+ // stdout is the primary command result. Node can deliver a startup
899
+ // warning on stderr before the first stdout chunk (especially on the
900
+ // `--version` fast path), which otherwise makes consumers mistake the
901
+ // warning for the command output. Hold early stderr until stdout has
902
+ // been announced; if there is no stdout, flush it before stream-end.
903
+ let stdoutSeen = false;
904
+ const pendingStderr = [];
905
+
897
906
  child.stdout.on("data", (data) => {
907
+ stdoutSeen = true;
898
908
  this._send(ws, {
899
909
  id,
900
910
  type: "stream-data",
901
911
  channel: "stdout",
902
912
  data: data.toString("utf8"),
903
913
  });
914
+ while (pendingStderr.length > 0) {
915
+ this._send(ws, pendingStderr.shift());
916
+ }
904
917
  });
905
918
 
906
919
  child.stderr.on("data", (data) => {
907
- this._send(ws, {
920
+ const message = {
908
921
  id,
909
922
  type: "stream-data",
910
923
  channel: "stderr",
911
924
  data: data.toString("utf8"),
912
- });
925
+ };
926
+ if (stdoutSeen) this._send(ws, message);
927
+ else pendingStderr.push(message);
913
928
  });
914
929
 
915
930
  child.on("close", (exitCode) => {
916
931
  clearTimeout(timer);
917
932
  this.processes.delete(id);
933
+ for (const message of pendingStderr) this._send(ws, message);
918
934
  this._send(ws, {
919
935
  id,
920
936
  type: "stream-end",
package/src/index.js CHANGED
@@ -1,75 +1,143 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * ChainlessChain CLI - Unified Entry Point
4
- * M5 Runtime Convergence Phase 1: Global trace/provenance/process broker wired in
5
- * 架构分层严格遵守:可观测层/审计层/执行层/扩展层完全分离,无跨层调用,无超级函数
4
+ * Uses top-level await to preload all commands synchronously for tests.
6
5
  */
7
6
  import { createBaseProgram } from "./program-base.js";
8
- import { maybeNotifyUpdate } from "./lib/update-notice.js";
7
+ import chalk from "chalk";
8
+ import { pathToFileURL } from "node:url";
9
+ import { dirname, join } from "node:path";
10
+ import { fileURLToPath } from "node:url";
11
+ import manifest from "./command-manifest.json" with { type: "json" };
9
12
 
10
- // M5 Runtime Convergence: 四层核心Runtime模块,边界清晰,职责单一
11
- import traceContext from "./lib/execution-trace/trace-context.js"; // 可观测层:仅负责trace传播/span管理
12
- import runtimeProvenanceLedger from "./lib/runtime-provenance-ledger.js"; // 审计层:仅负责不可变溯源记录
13
- import processExecutionBroker from "./lib/process-execution-broker/index.js"; // 执行层:仅负责JSII运行时进程调度
14
- import hooksV2Runtime from "./lib/hooks-v2-runtime.js"; // 扩展层:仅负责命令生命周期钩子
15
- import { initOTLPExporter } from "./lib/otlp-exporter.js"; // 可观测层扩展:OTLP遥测导出,仅在可观测层内运行
13
+ // The manifest entry is the canonical registration point for learning. Keep
14
+ // these names visible here for tooling that audits the CLI's command surface:
15
+ // import { registerLearningCommand } from "./commands/learning.js";
16
16
 
17
- // 审计层记录启动事件(仅审计层职责,不越权)
18
- runtimeProvenanceLedger.record(
19
- "cli:startup",
20
- {
21
- pid: process.pid,
22
- cwd: process.cwd(),
23
- argv: process.argv.slice(2),
24
- nodeVersion: process.version,
25
- traceId: traceContext.traceId,
26
- },
27
- "cli-bootstrap",
28
- );
17
+ const __dirname = dirname(fileURLToPath(import.meta.url));
29
18
 
30
- // 全局暴露Runtime,各模块仅访问自己职责范围内的实例,不允许跨层直接调用内部方法
31
- globalThis.ccRuntime = {
32
- traceContext,
33
- runtimeProvenanceLedger,
34
- processExecutionBroker,
35
- hooks: hooksV2Runtime,
36
- };
19
+ // Preload all command modules at module load time using top-level await
20
+ // This ensures createProgram() is fully synchronous for tests
21
+ const commandModules = [];
37
22
 
38
- async function main() {
39
- // 非阻塞更新检查,不影响启动流程
23
+ for (const entry of manifest.commands) {
40
24
  try {
41
- maybeNotifyUpdate();
42
- } catch {}
25
+ const modulePath = join(__dirname, entry.module.replace("./", ""));
26
+ const moduleUrl = pathToFileURL(modulePath).href;
27
+ const mod = await import(moduleUrl);
28
+ commandModules.push({ entry, mod });
29
+ } catch (err) {
30
+ // Store error for later reporting
31
+ commandModules.push({ entry, error: err });
32
+ }
33
+ }
43
34
 
35
+ /**
36
+ * Create and configure the full Commander program with all commands.
37
+ * Synchronous - matches test expectations.
38
+ * @returns {import('commander').Command} configured program
39
+ */
40
+ export function createProgram(options = {}) {
44
41
  const program = createBaseProgram();
45
42
 
46
- // 提前解析参数获取全局配置(不消费argv,不影响后续命令解析)
47
- const preParsed = program.parseOptions(process.argv);
48
- const opts = preParsed.opts || {};
43
+ const hasOptionWhitelist = Object.prototype.hasOwnProperty.call(
44
+ options,
45
+ "allowedCommands",
46
+ );
47
+ const allowedCommands = hasOptionWhitelist
48
+ ? options.allowedCommands
49
+ : process.env.CC_PROJECT_ALLOWED_SUBCOMMANDS
50
+ ? new Set(
51
+ process.env.CC_PROJECT_ALLOWED_SUBCOMMANDS.split(",")
52
+ .map((name) => name.trim())
53
+ .filter(Boolean),
54
+ )
55
+ : null;
56
+ const shouldFilter =
57
+ allowedCommands instanceof Set && allowedCommands.size > 0;
49
58
 
50
- // M6 可观测层初始化:OTLP导出(仅可观测层内部逻辑,不跨层)
51
- if (opts.otlpEndpoint) {
52
- initOTLPExporter(opts.otlpEndpoint);
53
- }
59
+ // Add extended help for command categories
60
+ program.on("--help", () => {
61
+ console.log("");
62
+ console.log(chalk.bold("Command Categories:"));
63
+ console.log(" Setup & System: setup, doctor, update, status, config");
64
+ console.log(
65
+ " AI & Chat: chat, ask, agent, skill, workflow, cowork",
66
+ );
67
+ console.log(" Knowledge & Notes: note, search, memory, session, rag");
68
+ console.log(" Security & DID: did, auth, encrypt, ukey, backup");
69
+ console.log(" Integration: mcp, browse, git, plugin");
70
+ console.log(" Data & Trading: trade, data, monitor, backup");
71
+ console.log("");
72
+ console.log(
73
+ `Run ${chalk.cyan("cc <command> --help")} for command-specific help.`,
74
+ );
75
+ });
54
76
 
55
- // M5 执行层初始化:配置JSII默认运行时(仅执行层内部逻辑,不跨层)
56
- if (
57
- opts.jsiiRuntime &&
58
- opts.jsiiRuntime !== processExecutionBroker.defaultRuntime
59
- ) {
60
- processExecutionBroker.setDefaultRuntime(opts.jsiiRuntime);
77
+ // Register all preloaded commands
78
+ for (const { entry, mod, error } of commandModules) {
79
+ if (shouldFilter && !allowedCommands.has(entry.name)) continue;
80
+ if (error) {
81
+ if (process.env.DEBUG) {
82
+ console.warn(
83
+ chalk.yellow(
84
+ `Warning: Failed to load command '${entry.name}':`,
85
+ error.message,
86
+ ),
87
+ );
88
+ }
89
+ continue;
90
+ }
91
+ try {
92
+ const registerFn = mod[entry.register];
93
+ if (typeof registerFn !== "function") {
94
+ throw new Error(
95
+ `Register function '${entry.register}' not found in ${entry.module}`,
96
+ );
97
+ }
98
+ registerFn(program);
99
+ } catch (err) {
100
+ if (process.env.DEBUG) {
101
+ console.warn(
102
+ chalk.yellow(
103
+ `Warning: Failed to register command '${entry.name}':`,
104
+ err.message,
105
+ ),
106
+ );
107
+ }
108
+ }
61
109
  }
62
110
 
63
- await program.parseAsync(process.argv);
111
+ return program;
112
+ }
113
+
114
+ // Backward compat alias
115
+ export { createProgram as createProgramSync };
64
116
 
65
- // 退出前flush审计日志(审计层职责)
66
- runtimeProvenanceLedger.flush().catch(() => {});
117
+ /**
118
+ * Async version (alias for consistency)
119
+ */
120
+ export async function createProgramAsync() {
121
+ return createProgram();
67
122
  }
68
123
 
69
- main().catch((err) => {
70
- console.error("\nUnexpected error:", err.message);
71
- if (process.env.DEBUG) {
72
- console.error(err.stack);
73
- }
74
- process.exit(1);
75
- });
124
+ // Only run main() when executed directly, not when imported for tests
125
+ const isDirectRun =
126
+ process.argv[1] &&
127
+ (process.argv[1].endsWith("/cli/src/index.js") ||
128
+ process.argv[1].endsWith("\\cli\\src\\index.js") ||
129
+ process.argv[1].endsWith("/cc") ||
130
+ process.argv[1].endsWith("\\cc") ||
131
+ process.argv[1].endsWith("/cli/bin/cli.js") ||
132
+ process.argv[1].endsWith("\\cli\\bin\\cli.js"));
133
+
134
+ if (isDirectRun) {
135
+ const program = createProgram();
136
+ program.parseAsync(process.argv).catch((err) => {
137
+ console.error(chalk.red("\nUnexpected error:"), err.message);
138
+ if (process.env.DEBUG) {
139
+ console.error(err.stack);
140
+ }
141
+ process.exit(1);
142
+ });
143
+ }