chainlesschain 0.162.150 → 0.162.152

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 (186) hide show
  1. package/README.md +1 -1
  2. package/package.json +3 -2
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-CBLvrjeG.js → AIOps-CVLVJS-Q.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-DYv2GtE0.js → ActionButton-CJ2_GJsI.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-CL6PZ-Ww.js → Analytics-CZsmlTF8.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-xuyHt4uA.js → AppLayout-DREvMZ62.js} +5 -5
  8. package/src/assets/web-panel/assets/{Audit-DOvSVycq.js → Audit-B4NR42w_.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-DMhfTswr.js → Backup-CJFmf3In.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-CQxDdm63.js → BaseInput-Bh8_iUZY.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-BEeNhK2a.js → Chat-DEwKjIxV.js} +5 -5
  12. package/src/assets/web-panel/assets/ChatBubbleRenderer-BOqHkxK_.js +1 -0
  13. package/src/assets/web-panel/assets/{Checkbox-CL04O-ER.js → Checkbox-DYWCqYI9.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-C50o-n7x.js → Codegen-BlXrfZAJ.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-CH-bDkzs.js → Col-DLPM22eX.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-DqAIMvSe.js → Community-PFyzqijs.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-C43fo_my.js → Compact-7DIfY5Wp.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-BERnMrdP.js → Compliance-DF4CinPU.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-Baw3w1gp.js → Cowork-B1J80Vcj.js} +4 -4
  20. package/src/assets/web-panel/assets/{Cron-BEqAHF1-.js → Cron-B7sx2OXX.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-CvnmKwK4.js → Crosschain-omLkxmu-.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-iMPxgVdt.js → DID-B_7r7b5F.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard--4SJX3YR.js → Dashboard-Cp7k3GZg.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-BgLV6xgz.js → Dropdown-BCKO89Y8.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-Bvb8oUD8.js → EmailListRenderer-CNgTSsFZ.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DpXPjJB5.js → FamilyGuardDashboard-DobM83JP.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-BbFfJ1Xi.js → Federation-XVAYQIeu.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-DeGq1B-q.js → FormItemContext-DV5ka1KQ.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-CNW7s9zM.js → GenericCardRenderer-Dg5q-KpC.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-L1PjW-lT.js → Git-Dsn3Xhxf.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-PK-X58to.js → Governance-D06S4Qow.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-BePWEH-d.js → Inference-nAvwxUXy.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-LF_sBvdL.js → KnowledgeGraph-CtqRP_rF.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-BKkfk9hy.js → Logs-J5aGAyfY.js} +2 -2
  35. package/src/assets/web-panel/assets/{Marketplace-BNMqUDla.js → Marketplace-CaeY23Kj.js} +1 -1
  36. package/src/assets/web-panel/assets/{McpTools-w4WPiyz2.js → McpTools-C2HHnwnE.js} +5 -5
  37. package/src/assets/web-panel/assets/{Memory-DUKMVGNi.js → Memory-CWBrdKlR.js} +2 -2
  38. package/src/assets/web-panel/assets/{MobileBridge-BWhiEyTJ.js → MobileBridge-CBLQ8uCY.js} +1 -1
  39. package/src/assets/web-panel/assets/{MobileProjects-Ocf5JEkX.js → MobileProjects-Q_Cy_W4_.js} +1 -1
  40. package/src/assets/web-panel/assets/{Mtc-D2B6MMhU.js → Mtc-BXur-euo.js} +4 -4
  41. package/src/assets/web-panel/assets/{MtcAudit-DdYjCq1O.js → MtcAudit-CpQSlOQC.js} +5 -5
  42. package/src/assets/web-panel/assets/{Multisig-Cb1hfuUZ.js → Multisig-DlFwdEOA.js} +3 -3
  43. package/src/assets/web-panel/assets/{NLProgramming-CTeImGp7.js → NLProgramming-DSh7fevc.js} +1 -1
  44. package/src/assets/web-panel/assets/{Notes-BjYNc7eQ.js → Notes-Bv4NOVxg.js} +4 -4
  45. package/src/assets/web-panel/assets/{NotificationSettings-Dn_NtRXQ.js → NotificationSettings-CzHNnIfa.js} +1 -1
  46. package/src/assets/web-panel/assets/{OrderTableRenderer-DVYYIizh.js → OrderTableRenderer-D7pHfKK4.js} +1 -1
  47. package/src/assets/web-panel/assets/{Organization-Be2Kmr5j.js → Organization-COzV01ed.js} +4 -4
  48. package/src/assets/web-panel/assets/{Overflow-Cu_-qRlR.js → Overflow-CYRZJb2_.js} +1 -1
  49. package/src/assets/web-panel/assets/{P2P-DD2HoGzE.js → P2P-DFm49FE0.js} +2 -2
  50. package/src/assets/web-panel/assets/{PdhVaultBrowser-BRI7DVth.js → PdhVaultBrowser-Ctr-6k5B.js} +3 -3
  51. package/src/assets/web-panel/assets/{Permissions-C9Srcs2M.js → Permissions-DXVrhFyv.js} +3 -3
  52. package/src/assets/web-panel/assets/{PersonalDataHub-CUqcMgo1.js → PersonalDataHub-BO5utpLK.js} +3 -3
  53. package/src/assets/web-panel/assets/{Pipeline-HBrQGLXt.js → Pipeline-C9irYCg7.js} +1 -1
  54. package/src/assets/web-panel/assets/{Privacy-D-B0vjwh.js → Privacy-r13hrvoF.js} +1 -1
  55. package/src/assets/web-panel/assets/{ProjectInit-eTeLIu9e.js → ProjectInit-PRKNPZZC.js} +2 -2
  56. package/src/assets/web-panel/assets/{ProjectSettings-DrRqCsC6.js → ProjectSettings-QvxM1ZDO.js} +2 -2
  57. package/src/assets/web-panel/assets/{Projects-1G9DNOhI.js → Projects-DfgmsN3j.js} +1 -1
  58. package/src/assets/web-panel/assets/{Providers-RkTZzpxP.js → Providers-DxbrccZ7.js} +1 -1
  59. package/src/assets/web-panel/assets/{QrScannerModal-BSCUgsgC.js → QrScannerModal-BMHVRxBX.js} +1 -1
  60. package/src/assets/web-panel/assets/{QuickAsk-CHgyM3Bz.js → QuickAsk-Co3_ndAH.js} +1 -1
  61. package/src/assets/web-panel/assets/{Recommend-0lry4OZq.js → Recommend-Cv3UWR6s.js} +1 -1
  62. package/src/assets/web-panel/assets/{RemoteSession-Cn45UroZ.js → RemoteSession-CSDsO2zA.js} +2 -2
  63. package/src/assets/web-panel/assets/{Reputation-Q-Zjb707.js → Reputation-Bdj59vzM.js} +1 -1
  64. package/src/assets/web-panel/assets/{Row-BdM70oda.js → Row-CejfUjmo.js} +1 -1
  65. package/src/assets/web-panel/assets/{RssFeed-DmOAKKap.js → RssFeed-C83yKkvU.js} +2 -2
  66. package/src/assets/web-panel/assets/{Search-Dwavbm07.js → Search-Ck4l_VI3.js} +1 -1
  67. package/src/assets/web-panel/assets/{Security-DukXFCnk.js → Security-DGIIEx6K.js} +3 -3
  68. package/src/assets/web-panel/assets/{Services-BIlRnITu.js → Services-Cj2aNAy3.js} +2 -2
  69. package/src/assets/web-panel/assets/{Skeleton-YYVQdhhQ.js → Skeleton-Dlyy8akb.js} +1 -1
  70. package/src/assets/web-panel/assets/{Skills-B8_iYHz2.js → Skills-C4aDa9Zh.js} +1 -1
  71. package/src/assets/web-panel/assets/{Sla-BdVrhT31.js → Sla-tHd_Bauo.js} +1 -1
  72. package/src/assets/web-panel/assets/{SpeechSettings-CD3ggRx7.js → SpeechSettings-DI7R0Qgd.js} +1 -1
  73. package/src/assets/web-panel/assets/{SyncSettings-Bp02VZFH.js → SyncSettings-OOxiPdsE.js} +2 -2
  74. package/src/assets/web-panel/assets/{Tasks-DEVmCEsr.js → Tasks-Nro_Ltg5.js} +1 -1
  75. package/src/assets/web-panel/assets/{Templates-B6czWc4N.js → Templates-Bm7eSMWH.js} +1 -1
  76. package/src/assets/web-panel/assets/{Tenant-BCJLv17r.js → Tenant-B8F8eFvD.js} +1 -1
  77. package/src/assets/web-panel/assets/{Terminal-CD132d2Y.js → Terminal-2oWhR7QF.js} +2 -2
  78. package/src/assets/web-panel/assets/{TimelineRenderer-ZB-CvkZl.js → TimelineRenderer-GLnecmpd.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tokens-BnSY0S-s.js → Tokens-CtpFyati.js} +1 -1
  80. package/src/assets/web-panel/assets/{Trigger-VZw9Oy2w.js → Trigger-DGkXZzbN.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trust-pZq7Hjd2.js → Trust-ClYZMkXN.js} +1 -1
  82. package/src/assets/web-panel/assets/{UkeySign-DnQaqk4q.js → UkeySign-C1AuEW5-.js} +1 -1
  83. package/src/assets/web-panel/assets/{VideoEditing-BEUfmvJV.js → VideoEditing-DHa9ekSK.js} +1 -1
  84. package/src/assets/web-panel/assets/{Wallet-CoZKMXJ2.js → Wallet-CyQv8ZAN.js} +4 -4
  85. package/src/assets/web-panel/assets/{WebAuthn-CBOGVx1I.js → WebAuthn-DPxEEb5Y.js} +5 -5
  86. package/src/assets/web-panel/assets/{WorkflowEditor-huSKn7TT.js → WorkflowEditor-C-fCM8Si.js} +1 -1
  87. package/src/assets/web-panel/assets/{chat-A_3w6FBO.js → chat-BMu1Pk8B.js} +1 -1
  88. package/src/assets/web-panel/assets/{colors-D1Bem9Oy.js → colors-DYPOXyWQ.js} +1 -1
  89. package/src/assets/web-panel/assets/{compact-item-CJYJj0oO.js → compact-item-C5r_plPk.js} +1 -1
  90. package/src/assets/web-panel/assets/{createContext-BkbFiKT4.js → createContext-9fWrWmuJ.js} +1 -1
  91. package/src/assets/web-panel/assets/devWarning-DmRz5Pet.js +1 -0
  92. package/src/assets/web-panel/assets/{hasIn-CKvUafVY.js → hasIn-CjZM2-qE.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-BHdailyo.js → index-0DVMoDzF.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-C-WIY-FQ.js → index-B1iUe3Ba.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-BOoAQjJz.js → index-B56CI20h.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-AjrSPnvv.js → index-BBVCXmJV.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-CD62EEGo.js → index-BPucc_ES.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-tgO8iza6.js → index-BVFtY8Y4.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-F--HuPG1.js → index-BW-x3mUK.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DTs_D1OL.js → index-B_bTdeou.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BiDWxzbn.js → index-Bglw_kmu.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CBaosWRO.js → index-BsHmE__1.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-B8i0lViZ.js → index-Bti4lpw5.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BJwlEnYo.js → index-ByVDaARk.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-CVS8Ymuq.js → index-C3E7xVl1.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CBlBVJ_m.js → index-CDaA4A0b.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DfgCdFrN.js → index-CGqrVLWe.js} +27 -27
  108. package/src/assets/web-panel/assets/{index-Crp8CbRg.js → index-CJJx0kbR.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-JEAGMii9.js → index-CTnaRErh.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Co3OFL0t.js → index-CYoS2cwK.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-b-sbVdjQ.js → index-CcDGi9U1.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DjYrecNb.js → index-Cd9_KCPs.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-PF-mpv8K.js → index-Co9kBFxY.js} +1 -1
  114. package/src/assets/web-panel/assets/index-CrsL7YBW.js +1 -0
  115. package/src/assets/web-panel/assets/{index-Fuk6t_3K.js → index-CvUR6l7C.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BHdHSX06.js → index-CyUtBxnC.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CUj-l7GM.js → index-D0rFX-xN.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-C9bWmTcO.js → index-D6zyUpD6.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-ChkXUj3f.js → index-DJk9cPrs.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-pyvMVX8r.js → index-DLCoKst9.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-ttDQVhZy.js → index-DNxR1CHs.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B9Svn0zc.js → index-DWwI0Jjd.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BdutMsne.js → index-DjTB4wPn.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-By5a0T_W.js → index-Du-w2i6G.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-D22zNXiS.js → index-HJdfPSMz.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BSgWxAOG.js → index-I3Qdrfcf.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-qNTtOVi_.js → index-Mipa7XgU.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DpW9cf3e.js → index-jO4lIpFE.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-C37f6iey.js → index-oerotzoq.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Cj0OZ-37.js → index-phHPSXlV.js} +1 -1
  131. package/src/assets/web-panel/assets/index-zW69WSDA.js +1 -0
  132. package/src/assets/web-panel/assets/{initDefaultProps-DtrnfsZH.js → initDefaultProps-B7tpABc_.js} +1 -1
  133. package/src/assets/web-panel/assets/{motion-D4zqSaX3.js → motion-DmvaRoVv.js} +1 -1
  134. package/src/assets/web-panel/assets/{move-CGFGOUQj.js → move-DF4X29Wf.js} +1 -1
  135. package/src/assets/web-panel/assets/{mtc-parser-DH2HvkJl.js → mtc-parser-C0cbg4PO.js} +1 -1
  136. package/src/assets/web-panel/assets/{omit-jJ2at5HX.js → omit-DZzcYy0l.js} +1 -1
  137. package/src/assets/web-panel/assets/{pickAttrs-CRyMT1Fv.js → pickAttrs-DaZWfzuH.js} +1 -1
  138. package/src/assets/web-panel/assets/{placementArrow-DZ_CX0Pt.js → placementArrow-CBxOEyvn.js} +1 -1
  139. package/src/assets/web-panel/assets/{responsiveObserve-wruHk-h5.js → responsiveObserve-CGl8NIlO.js} +1 -1
  140. package/src/assets/web-panel/assets/{slide-BGgx8q67.js → slide-Bv330MSZ.js} +1 -1
  141. package/src/assets/web-panel/assets/{statusUtils-Do5M7gKm.js → statusUtils-DJVy5oEM.js} +1 -1
  142. package/src/assets/web-panel/assets/{styleChecker-CRa-GZpX.js → styleChecker-BiY1H5ST.js} +1 -1
  143. package/src/assets/web-panel/assets/{useFlexGapSupport-BxPcq6pj.js → useFlexGapSupport-D1sN2OlQ.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFs-v5O2ZcJm.js → useFs-DxxHawzW.js} +1 -1
  145. package/src/assets/web-panel/assets/{usePersonalDataHub--z2FU0Px.js → usePersonalDataHub-C1HblLrD.js} +1 -1
  146. package/src/assets/web-panel/assets/{vnode-1emidVKd.js → vnode-Dex0jy4T.js} +1 -1
  147. package/src/assets/web-panel/assets/{zoom-CcJaRyHs.js → zoom-Bk1MScAD.js} +1 -1
  148. package/src/assets/web-panel/index.html +1 -1
  149. package/src/command-manifest.json +8 -1
  150. package/src/commands/agent.js +8 -1
  151. package/src/commands/changelog.js +148 -0
  152. package/src/commands/eval.js +88 -23
  153. package/src/commands/plugin.js +10 -0
  154. package/src/commands/team.js +26 -3
  155. package/src/data/changelog.json +199 -0
  156. package/src/gateways/ws/remote-session-protocol.js +9 -2
  157. package/src/harness/remote-command-ledger.js +60 -10
  158. package/src/index.js +2 -0
  159. package/src/lib/agent-sandbox.js +11 -5
  160. package/src/lib/agent-team/task-lease.js +28 -0
  161. package/src/lib/agent-team/team-runner.js +25 -0
  162. package/src/lib/changelog.js +252 -0
  163. package/src/lib/eval/tasks.js +62 -41
  164. package/src/lib/eval/trend.js +7 -1
  165. package/src/lib/lsp/__tests__/lsp-client.test.js +12 -6
  166. package/src/lib/lsp/code-intelligence.js +55 -17
  167. package/src/lib/lsp/lsp-client.js +7 -1
  168. package/src/lib/lsp/lsp-server-registry.js +15 -4
  169. package/src/lib/plugin-runtime/hooks.js +20 -4
  170. package/src/lib/plugin-runtime/install.js +20 -1
  171. package/src/lib/plugin-runtime/monitors.js +20 -4
  172. package/src/lib/plugin-runtime/policy.js +13 -0
  173. package/src/lib/plugin-runtime/remote-source.js +34 -0
  174. package/src/lib/plugin-runtime/signature.js +95 -22
  175. package/src/lib/plugin-security.js +13 -14
  176. package/src/lib/sandbox-egress-proxy.js +38 -2
  177. package/src/lib/sandbox-network-policy.js +26 -4
  178. package/src/lib/telemetry/span-recorder.js +26 -4
  179. package/src/repl/agent-repl.js +12 -8
  180. package/src/runtime/__tests__/auto-pin.test.js +27 -4
  181. package/src/runtime/auto-pin.js +19 -0
  182. package/src/runtime/headless-runner.js +23 -5
  183. package/src/assets/web-panel/assets/ChatBubbleRenderer-8nul8eTq.js +0 -1
  184. package/src/assets/web-panel/assets/devWarning-WDr3_M_N.js +0 -1
  185. package/src/assets/web-panel/assets/index-Dwix3p4g.js +0 -1
  186. package/src/assets/web-panel/assets/index-SHaoZ0CA.js +0 -1
@@ -1 +1 @@
1
- import{u as d}from"./index-DfgCdFrN.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
1
+ import{u as d}from"./index-CGqrVLWe.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
@@ -1 +1 @@
1
- import{u as f}from"./index-DfgCdFrN.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-CGqrVLWe.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-DfgCdFrN.js";import{a8 as o,k as g,C as d,F as f,A as p}from"./vendor-BMxUs6UX.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-CGqrVLWe.js";import{a8 as o,k as g,C as d,F as f,A as p}from"./vendor-BMxUs6UX.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-DfgCdFrN.js";import{i as f}from"./motion-D4zqSaX3.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-CGqrVLWe.js";import{i as f}from"./motion-DmvaRoVv.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-DfgCdFrN.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-CGqrVLWe.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="./assets/vendor-BMxUs6UX.js">
13
13
  <link rel="modulepreload" crossorigin href="./assets/icons-BsDmGpcT.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "_generated": "scripts/gen-command-manifest.mjs — do not edit by hand",
3
- "commandCount": 163,
3
+ "commandCount": 164,
4
4
  "commands": [
5
5
  {
6
6
  "name": "a2a",
@@ -114,6 +114,13 @@
114
114
  "register": "registerCcronCommand",
115
115
  "summary": "Cowork Cron V2 governance (in-memory, CLI v0.143.0)"
116
116
  },
117
+ {
118
+ "name": "changelog",
119
+ "aliases": ["whatsnew"],
120
+ "module": "./commands/changelog.js",
121
+ "register": "registerChangelogCommand",
122
+ "summary": "Show cc CLI version update notes (npm package changelog)"
123
+ },
117
124
  {
118
125
  "name": "chat",
119
126
  "aliases": [],
@@ -187,7 +187,7 @@ export function registerAgentCommand(program) {
187
187
  )
188
188
  .option(
189
189
  "--auto-pin",
190
- "During auto-compaction, pin the original task (first user turn) so it always survives compaction (off by default)",
190
+ "Force-pin the original task (first user turn) through compaction (ON by default; disable with CC_AUTO_PIN=0 or config context.autoPin=false)",
191
191
  )
192
192
  .option(
193
193
  "--max-rewakes <n>",
@@ -347,6 +347,13 @@ export function registerAgentCommand(program) {
347
347
  false,
348
348
  )
349
349
  .action(async (task, options, command) => {
350
+ // CC_API_KEY env fallback for --api-key: lets callers (IDE plugins,
351
+ // scripts) pass the key via the environment instead of argv, where it
352
+ // is visible to every local process (/proc/<pid>/cmdline, Win32_Process).
353
+ // An explicit --api-key still wins.
354
+ if (!options.apiKey && process.env.CC_API_KEY) {
355
+ options.apiKey = process.env.CC_API_KEY;
356
+ }
350
357
  const bypassPermissions = !!(
351
358
  options.allowDangerousBypass ||
352
359
  options.yolo ||
@@ -0,0 +1,148 @@
1
+ import chalk from "chalk";
2
+ import { VERSION } from "../constants.js";
3
+ import { loadChangelog } from "../lib/changelog.js";
4
+ import logger from "../lib/logger.js";
5
+
6
+ /**
7
+ * Render a release's markdown-ish body into readable terminal text.
8
+ * Light-touch: **bold** → bold, `code` → cyan, keep bullets, drop blockquote
9
+ * markers, collapse blank runs.
10
+ */
11
+ function renderBody(body, indent = " ") {
12
+ const out = [];
13
+ let blank = 0;
14
+ for (const raw of body.split("\n")) {
15
+ let line = raw.replace(/^>\s?/, ""); // blockquote marker
16
+ line = line.replace(/\*\*(.+?)\*\*/g, (_, t) => chalk.bold(t));
17
+ line = line.replace(/`([^`]+)`/g, (_, t) => chalk.cyan(t));
18
+ if (line.trim() === "") {
19
+ blank++;
20
+ if (blank > 1) continue;
21
+ out.push("");
22
+ continue;
23
+ }
24
+ blank = 0;
25
+ out.push(indent + line);
26
+ }
27
+ return out.join("\n").replace(/\n+$/, "");
28
+ }
29
+
30
+ function renderRelease(rel, { isCurrent }) {
31
+ const lines = [];
32
+ const ver = chalk.bold.green(rel.cliVersion);
33
+ const meta = [
34
+ rel.productVersion ? `product ${rel.productVersion}` : null,
35
+ rel.date || null,
36
+ ]
37
+ .filter(Boolean)
38
+ .join(", ");
39
+ const current = isCurrent ? chalk.yellow(" ← installed") : "";
40
+ lines.push(`${ver} ${chalk.dim("(" + meta + ")")}${current}`);
41
+ if (rel.title) lines.push(" " + chalk.white(rel.title));
42
+ lines.push("");
43
+ for (const s of rel.sections) {
44
+ if (s.heading) lines.push(" " + chalk.bold.cyan("▸ " + s.heading));
45
+ if (s.body) lines.push(renderBody(s.body, s.heading ? " " : " "));
46
+ lines.push("");
47
+ }
48
+ return lines.join("\n").replace(/\n+$/, "");
49
+ }
50
+
51
+ /**
52
+ * Find releases matching a user-supplied version query. Matches the CLI npm
53
+ * version (0.162.150 / v0.162.150) or the product version (v5.0.3.134 / 134).
54
+ */
55
+ function matchVersion(releases, query) {
56
+ const q = query.replace(/^v/i, "").trim();
57
+ return releases.filter((r) => {
58
+ const cli = r.cliVersion || "";
59
+ const prod = (r.productVersion || "").replace(/^v/i, "");
60
+ return (
61
+ cli === q ||
62
+ cli.endsWith("." + q) ||
63
+ prod === q ||
64
+ prod.endsWith("." + q) ||
65
+ (r.cliVersions || []).includes(q)
66
+ );
67
+ });
68
+ }
69
+
70
+ export function registerChangelogCommand(program) {
71
+ program
72
+ .command("changelog")
73
+ .alias("whatsnew")
74
+ .description("Show cc CLI version update notes (npm package changelog)")
75
+ .argument(
76
+ "[version]",
77
+ "Show notes for a specific version (e.g. 0.162.150 or v5.0.3.134)",
78
+ )
79
+ .option("--all", "Show the full CLI release history")
80
+ .option("-n, --limit <n>", "Show the N most recent releases", "5")
81
+ .option("--json", "Output as JSON")
82
+ .action((version, options) => {
83
+ const data = loadChangelog();
84
+ const releases = data.releases || [];
85
+
86
+ if (releases.length === 0) {
87
+ if (options.json) {
88
+ logger.log(JSON.stringify({ releases: [] }, null, 2));
89
+ } else {
90
+ logger.warn("No changelog data is bundled with this build.");
91
+ }
92
+ return;
93
+ }
94
+
95
+ let selected = releases;
96
+ if (version) {
97
+ selected = matchVersion(releases, version);
98
+ if (selected.length === 0) {
99
+ if (options.json) {
100
+ logger.log(JSON.stringify({ releases: [] }, null, 2));
101
+ } else {
102
+ logger.warn(`No CLI release notes found for "${version}".`);
103
+ logger.info(
104
+ `Available CLI versions: ${releases
105
+ .map((r) => r.cliVersion)
106
+ .join(", ")}`,
107
+ );
108
+ }
109
+ return;
110
+ }
111
+ } else if (!options.all) {
112
+ const limit = Math.max(1, parseInt(options.limit, 10) || 5);
113
+ selected = releases.slice(0, limit);
114
+ }
115
+
116
+ if (options.json) {
117
+ logger.log(JSON.stringify({ ...data, releases: selected }, null, 2));
118
+ return;
119
+ }
120
+
121
+ logger.newline();
122
+ logger.log(
123
+ chalk.bold(
124
+ ` ChainlessChain CLI — update notes ${chalk.dim(`(installed: ${VERSION})`)}`,
125
+ ),
126
+ );
127
+ logger.log(
128
+ chalk.dim(
129
+ ` Showing ${selected.length} of ${releases.length} documented CLI releases.`,
130
+ ),
131
+ );
132
+ logger.newline();
133
+
134
+ for (const rel of selected) {
135
+ logger.log(
136
+ renderRelease(rel, { isCurrent: rel.cliVersion === VERSION }),
137
+ );
138
+ logger.log(chalk.dim(" " + "─".repeat(58)));
139
+ }
140
+
141
+ if (!version && !options.all && releases.length > selected.length) {
142
+ logger.newline();
143
+ logger.info(
144
+ `Run ${chalk.cyan("cc changelog --all")} for the full history, or ${chalk.cyan("cc changelog <version>")} for one release.`,
145
+ );
146
+ }
147
+ });
148
+ }
@@ -11,7 +11,7 @@
11
11
  import fs from "fs";
12
12
  import path from "path";
13
13
  import { fileURLToPath } from "url";
14
- import { spawn } from "child_process";
14
+ import { spawn, spawnSync } from "child_process";
15
15
  import { runEvalSuite } from "../lib/eval/runner.js";
16
16
  import { getSuite } from "../lib/eval/tasks.js";
17
17
  import {
@@ -45,6 +45,40 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
45
45
  // This file is src/commands/eval.js → the CLI entry is bin/chainlesschain.js.
46
46
  const BIN = path.resolve(__dirname, "..", "..", "bin", "chainlesschain.js");
47
47
 
48
+ /**
49
+ * Kill an agent child AND its tool grandchildren. A bare child.kill("SIGTERM")
50
+ * only reaches the direct child (and on Windows TerminateProcess never reaches
51
+ * grandchildren), leaving tools alive and still WRITING into the workspace.
52
+ * POSIX children are spawned detached (own process group) so -pid reaps the
53
+ * whole tree; Windows uses taskkill /T /F. Same pattern as the async-hook
54
+ * supervisor's _killChildTree.
55
+ */
56
+ function killAgentTree(child) {
57
+ if (!child || !child.pid) return;
58
+ if (process.platform === "win32") {
59
+ try {
60
+ spawnSync("taskkill", ["/PID", String(child.pid), "/T", "/F"], {
61
+ windowsHide: true,
62
+ timeout: 10000,
63
+ });
64
+ } catch {
65
+ /* fall through to the direct kill below */
66
+ }
67
+ } else {
68
+ try {
69
+ process.kill(-child.pid, "SIGKILL"); // negative pid = process group
70
+ return;
71
+ } catch {
72
+ /* not a group leader / already gone — fall through */
73
+ }
74
+ }
75
+ try {
76
+ child.kill("SIGKILL");
77
+ } catch {
78
+ /* already gone */
79
+ }
80
+ }
81
+
48
82
  /**
49
83
  * Build a runAgent that shells out to a headless `cc agent -p` in the task's
50
84
  * workspace. acceptEdits lets it write files without an interactive prompt.
@@ -52,42 +86,59 @@ const BIN = path.resolve(__dirname, "..", "..", "bin", "chainlesschain.js");
52
86
  function makeHeadlessRunAgent(opts = {}) {
53
87
  return function runAgent({ prompt, cwd, timeoutMs }) {
54
88
  return new Promise((resolve) => {
55
- const args = [
56
- BIN,
57
- "agent",
58
- "-p",
59
- prompt,
60
- "--permission-mode",
61
- "acceptEdits",
62
- "--output-format",
63
- "text",
64
- ];
65
- if (opts.model) args.push("--model", opts.model);
66
- if (opts.provider) args.push("--provider", opts.provider);
89
+ let args;
90
+ if (opts._argv) {
91
+ // Test seam: run an arbitrary node argv instead of the real agent, so
92
+ // the timeout/tree-kill path is testable offline.
93
+ args = opts._argv;
94
+ } else {
95
+ args = [
96
+ BIN,
97
+ "agent",
98
+ "-p",
99
+ prompt,
100
+ "--permission-mode",
101
+ "acceptEdits",
102
+ "--output-format",
103
+ "text",
104
+ ];
105
+ if (opts.model) args.push("--model", opts.model);
106
+ if (opts.provider) args.push("--provider", opts.provider);
107
+ }
67
108
  const child = spawn(process.execPath, args, {
68
109
  cwd,
69
110
  env: { ...process.env, CLAUDECODE: "1" },
70
111
  windowsHide: true,
112
+ // Own process group on POSIX so a timeout can reap the whole tree.
113
+ detached: process.platform !== "win32",
71
114
  });
72
115
  let out = "";
73
116
  let err = "";
74
117
  let settled = false;
118
+ let timedOut = false;
119
+ let graceTimer = null;
75
120
  const done = (result) => {
76
121
  if (settled) return;
77
122
  settled = true;
123
+ clearTimeout(graceTimer);
78
124
  resolve(result);
79
125
  };
80
126
  const timer = setTimeout(() => {
81
- try {
82
- child.kill("SIGTERM");
83
- } catch {
84
- /* already gone */
85
- }
86
- done({
87
- ok: false,
88
- output: out,
89
- error: `timed out after ${timeoutMs || 120000}ms`,
90
- });
127
+ // Kill the WHOLE tree, then settle on `close` — resolving immediately
128
+ // would race a still-live agent against the runner's after-snapshot,
129
+ // check() and workspace rmSync (nondeterministic scores + EBUSY leaks).
130
+ timedOut = true;
131
+ killAgentTree(child);
132
+ // Last resort if the process is unkillable and `close` never fires —
133
+ // don't hang the whole suite on one stuck task.
134
+ graceTimer = setTimeout(() => {
135
+ done({
136
+ ok: false,
137
+ output: out,
138
+ error: `timed out after ${timeoutMs || 120000}ms (process did not exit after kill)`,
139
+ });
140
+ }, 10000);
141
+ if (typeof graceTimer.unref === "function") graceTimer.unref();
91
142
  }, timeoutMs || 120000);
92
143
  if (typeof timer.unref === "function") timer.unref();
93
144
  child.stdout?.on("data", (d) => (out += d.toString("utf8")));
@@ -98,12 +149,23 @@ function makeHeadlessRunAgent(opts = {}) {
98
149
  });
99
150
  child.on("close", (code) => {
100
151
  clearTimeout(timer);
152
+ if (timedOut) {
153
+ done({
154
+ ok: false,
155
+ output: out,
156
+ error: `timed out after ${timeoutMs || 120000}ms`,
157
+ });
158
+ return;
159
+ }
101
160
  done({ ok: code === 0, output: out, error: code === 0 ? null : err });
102
161
  });
103
162
  });
104
163
  };
105
164
  }
106
165
 
166
+ // For tests: the timeout/tree-kill path needs a real spawned process.
167
+ export { makeHeadlessRunAgent, killAgentTree };
168
+
107
169
  export function registerEvalCommand(program, { logger } = {}) {
108
170
  const log = logger || console;
109
171
  program
@@ -215,6 +277,9 @@ export function registerEvalCommand(program, { logger } = {}) {
215
277
  appendHistory(options.history, {
216
278
  ranAt: new Date().toISOString(),
217
279
  label: options.label || null,
280
+ // Tagged so --trend can exclude it: a dry-run is always 0% and
281
+ // would otherwise report every passing task as a regression.
282
+ ...(options.dryRun ? { dryRun: true } : {}),
218
283
  passed: summary.passed,
219
284
  total: summary.total,
220
285
  passRate: summary.passRate,
@@ -608,6 +608,10 @@ export function registerPluginCommand(program) {
608
608
  "Plugin name to select from a multi-plugin registry",
609
609
  )
610
610
  .option("--token <token>", "Bearer token for a private registry")
611
+ .option(
612
+ "--allow-insecure-registry",
613
+ "Allow a plain-HTTP registry URL (MITM risk — trusted networks only)",
614
+ )
611
615
  .option("--json", "Output as JSON")
612
616
  .action(async (source, options) => {
613
617
  const { installFromSource } =
@@ -636,6 +640,7 @@ export function registerPluginCommand(program) {
636
640
  name,
637
641
  token: options.token,
638
642
  config,
643
+ allowInsecure: options.allowInsecureRegistry === true,
639
644
  });
640
645
  installSource = resolved.source;
641
646
  integritySha = resolved.sha256;
@@ -694,6 +699,10 @@ export function registerPluginCommand(program) {
694
699
  )
695
700
  .requiredOption("--registry <url>", "Registry/manifest URL to browse")
696
701
  .option("--token <token>", "Bearer token for a private registry")
702
+ .option(
703
+ "--allow-insecure-registry",
704
+ "Allow a plain-HTTP registry URL (MITM risk — trusted networks only)",
705
+ )
697
706
  .option("--json", "Output as JSON")
698
707
  .action(async (query, options) => {
699
708
  const { fetchRegistry, listRegistryPlugins, resolveRegistryToken } =
@@ -712,6 +721,7 @@ export function registerPluginCommand(program) {
712
721
  });
713
722
  const { registry, fromCache } = await fetchRegistry(options.registry, {
714
723
  token,
724
+ allowInsecure: options.allowInsecureRegistry === true,
715
725
  });
716
726
  let rows = listRegistryPlugins(registry);
717
727
  if (query) {
@@ -29,7 +29,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
29
29
  const BIN = path.resolve(__dirname, "..", "..", "bin", "chainlesschain.js");
30
30
 
31
31
  /** Load + validate a task-graph file into a registry (throws on bad input). */
32
- function loadRegistry(file, { ttlMs } = {}) {
32
+ export function loadRegistry(file, { ttlMs } = {}) {
33
33
  const abs = path.resolve(process.cwd(), file);
34
34
  let doc;
35
35
  try {
@@ -41,6 +41,19 @@ function loadRegistry(file, { ttlMs } = {}) {
41
41
  if (!Array.isArray(tasks) || tasks.length === 0) {
42
42
  throw new Error("task file must have a non-empty `tasks` array");
43
43
  }
44
+ // Reject unknown dependency keys up front: a typo'd dependsOn ("biuld") makes
45
+ // a task permanently unclaimable — the run silently exits 1 and `plan` drops
46
+ // it from the waves with no diagnosis.
47
+ const keys = new Set(tasks.map((t) => t.key));
48
+ for (const t of tasks) {
49
+ for (const d of t.dependsOn || t.deps || []) {
50
+ if (!keys.has(d)) {
51
+ throw new Error(
52
+ `task "${t.key}" depends on unknown task "${d}" (typo in dependsOn?)`,
53
+ );
54
+ }
55
+ }
56
+ }
44
57
  const reg = new TaskLeaseRegistry({ defaultTtlMs: ttlMs });
45
58
  for (const t of tasks) {
46
59
  const r = reg.addTask({
@@ -266,7 +279,12 @@ export function registerTeamCommand(program, { logger } = {}) {
266
279
  for (const t of reg.list()) {
267
280
  if (t.lease && t.lease.holder) lostHolders.add(t.lease.holder);
268
281
  }
269
- const freed = reg.reclaimExpired();
282
+ // Reclaim ALL dangling leases, not just expired ones: every holder in
283
+ // the persisted snapshot is from the now-dead prior process, so a lease
284
+ // still inside its TTL (a crash seconds after acquiring) must be
285
+ // reclaimed too — reclaimExpired() would skip it and strand the task,
286
+ // yet we already reported its holder LOST above.
287
+ const freed = reg.reclaimAll();
270
288
  for (const h of lostHolders) {
271
289
  if (options.json)
272
290
  console.log(JSON.stringify({ type: "teammate:lost", holder: h }));
@@ -296,8 +314,12 @@ export function registerTeamCommand(program, { logger } = {}) {
296
314
  const persist = () => {
297
315
  if (!options.state) return;
298
316
  try {
317
+ // Atomic write (tmp + rename): a crash mid-write must not truncate
318
+ // the ONLY resume file — a torn snapshot makes --resume throw and
319
+ // loses all progress.
320
+ const tmp = `${options.state}.tmp`;
299
321
  fs.writeFileSync(
300
- options.state,
322
+ tmp,
301
323
  JSON.stringify(
302
324
  {
303
325
  version: 2,
@@ -311,6 +333,7 @@ export function registerTeamCommand(program, { logger } = {}) {
311
333
  ),
312
334
  "utf8",
313
335
  );
336
+ fs.renameSync(tmp, options.state);
314
337
  } catch (e) {
315
338
  (log.error || console.error)(` state write failed: ${e.message}`);
316
339
  }