chainlesschain 0.166.112 → 0.166.114

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 (169) hide show
  1. package/README.md +12 -6
  2. package/package.json +1 -1
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/.build-hash +1 -1
  6. package/src/assets/web-panel/assets/{AIOps-sOceeExN.js → AIOps-CVac3rIN.js} +1 -1
  7. package/src/assets/web-panel/assets/{ActionButton-BQs-vRUr.js → ActionButton-ChM9GxMl.js} +1 -1
  8. package/src/assets/web-panel/assets/{Analytics-sfAHHMhA.js → Analytics-CV5399Js.js} +3 -3
  9. package/src/assets/web-panel/assets/{AppLayout-0gAvE0c8.js → AppLayout-CuonVXhg.js} +4 -4
  10. package/src/assets/web-panel/assets/{Artifacts-Dh9s2Qmd.js → Artifacts-D9qKfgb6.js} +1 -1
  11. package/src/assets/web-panel/assets/{Audit-CITm26SU.js → Audit-DUvLysQc.js} +1 -1
  12. package/src/assets/web-panel/assets/{BackgroundAgents-BiMbBOh0.js → BackgroundAgents-DfKohQeT.js} +1 -1
  13. package/src/assets/web-panel/assets/{Backup-CNpnhI3h.js → Backup-CohoEI8R.js} +1 -1
  14. package/src/assets/web-panel/assets/{BaseInput-BI_lltkp.js → BaseInput-BwdoA3xv.js} +1 -1
  15. package/src/assets/web-panel/assets/{Chat-BgfB88xY.js → Chat-DRkuz1d2.js} +5 -5
  16. package/src/assets/web-panel/assets/ChatBubbleRenderer-v3pzeHNC.js +1 -0
  17. package/src/assets/web-panel/assets/{Checkbox-4xy9rS3j.js → Checkbox-B-GNGpKv.js} +1 -1
  18. package/src/assets/web-panel/assets/{Codegen-D93h9ihS.js → Codegen-Bs2lAsoZ.js} +1 -1
  19. package/src/assets/web-panel/assets/{Col-BRf3STY-.js → Col-Bk1mJKDZ.js} +1 -1
  20. package/src/assets/web-panel/assets/{Community-f187ziSL.js → Community-B_FDSCOo.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compact-D4hXWuo1.js → Compact-No1qSLLH.js} +1 -1
  22. package/src/assets/web-panel/assets/{Compliance-C6cYKI6H.js → Compliance-CcrG43-d.js} +1 -1
  23. package/src/assets/web-panel/assets/{Cowork-C1i1f8LD.js → Cowork-DLkj2ywK.js} +3 -3
  24. package/src/assets/web-panel/assets/{Cron-BacCE4LA.js → Cron-sQHELVEz.js} +2 -2
  25. package/src/assets/web-panel/assets/{Crosschain-DXztxOoH.js → Crosschain-CRTZ3GZg.js} +1 -1
  26. package/src/assets/web-panel/assets/{DID-rpf4HN8x.js → DID-Ds2bjvxE.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dashboard-h4bgtH7L.js → Dashboard-DOONG2NX.js} +2 -2
  28. package/src/assets/web-panel/assets/{Dropdown-CyQnoHmu.js → Dropdown-Br3PNA2L.js} +1 -1
  29. package/src/assets/web-panel/assets/{EmailListRenderer-FCtp4AcB.js → EmailListRenderer-DT6UUqjZ.js} +1 -1
  30. package/src/assets/web-panel/assets/{EvolutionSettings-JbISHTWR.js → EvolutionSettings-BSLuEjlT.js} +1 -1
  31. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DCIQLyfK.js → FamilyGuardDashboard-2aEM9avE.js} +1 -1
  32. package/src/assets/web-panel/assets/{Federation-DDbFpwja.js → Federation-D3B0tlQU.js} +1 -1
  33. package/src/assets/web-panel/assets/{FormItemContext-CXF0jtXb.js → FormItemContext-DTVkVVQP.js} +1 -1
  34. package/src/assets/web-panel/assets/{GenericCardRenderer-CUaNfAM0.js → GenericCardRenderer-BgFEgP4y.js} +1 -1
  35. package/src/assets/web-panel/assets/{Git-Bhoz2gDf.js → Git-3t71m6Xd.js} +2 -2
  36. package/src/assets/web-panel/assets/{Governance-FiiXHe8e.js → Governance-DS7WvlaX.js} +1 -1
  37. package/src/assets/web-panel/assets/{Inference-brpTW2Q3.js → Inference-CeT-xWrI.js} +1 -1
  38. package/src/assets/web-panel/assets/{KnowledgeGraph-BCWP-f6k.js → KnowledgeGraph-BQzMncp5.js} +1 -1
  39. package/src/assets/web-panel/assets/{Logs-CxYcduoK.js → Logs-CC5DOKhV.js} +2 -2
  40. package/src/assets/web-panel/assets/MarkdownRenderer-5jYM4kYG.js +1 -0
  41. package/src/assets/web-panel/assets/{Marketplace-DANdmW7l.js → Marketplace-CpYDyy3o.js} +1 -1
  42. package/src/assets/web-panel/assets/{McpTools-Bi_EKkb5.js → McpTools-DRdAZPMr.js} +3 -3
  43. package/src/assets/web-panel/assets/{Memory-DecoMbYw.js → Memory-CBLRr-l8.js} +2 -2
  44. package/src/assets/web-panel/assets/{MobileBridge-DrOhFKp0.js → MobileBridge-Bnj9veNN.js} +1 -1
  45. package/src/assets/web-panel/assets/MobileProjects-lYFPD24p.js +1 -0
  46. package/src/assets/web-panel/assets/{Mtc-SLPII1iw.js → Mtc-BMU_C9vD.js} +2 -2
  47. package/src/assets/web-panel/assets/{MtcAudit-DWoVORYy.js → MtcAudit-DQV-zumU.js} +4 -4
  48. package/src/assets/web-panel/assets/{Multisig-Dxpnmq-m.js → Multisig-LpqpqV1d.js} +3 -3
  49. package/src/assets/web-panel/assets/{NLProgramming-kNTpNqCP.js → NLProgramming-C4OMklSO.js} +1 -1
  50. package/src/assets/web-panel/assets/{Notes-D1uXCfVd.js → Notes-Cg0QCinP.js} +3 -3
  51. package/src/assets/web-panel/assets/{NotificationSettings-D3Qt8Gkl.js → NotificationSettings-amoZoMna.js} +1 -1
  52. package/src/assets/web-panel/assets/{OrderTableRenderer-qvaah2-m.js → OrderTableRenderer-CxNvhf5n.js} +1 -1
  53. package/src/assets/web-panel/assets/{Organization-EhRl4JoJ.js → Organization-BetJmyX5.js} +4 -4
  54. package/src/assets/web-panel/assets/{Overflow-BTt5C_5W.js → Overflow-DbeoPtVD.js} +1 -1
  55. package/src/assets/web-panel/assets/{P2P-CeR2jyb0.js → P2P-B5sitQWT.js} +2 -2
  56. package/src/assets/web-panel/assets/{PdhVaultBrowser-BzD3OHWq.js → PdhVaultBrowser-AP9SG2ic.js} +3 -3
  57. package/src/assets/web-panel/assets/{Permissions-BOPyeRlz.js → Permissions-Bc7fgNKx.js} +4 -4
  58. package/src/assets/web-panel/assets/{PersonalDataHub-DcmNNsfO.js → PersonalDataHub-BwdGMcWZ.js} +4 -4
  59. package/src/assets/web-panel/assets/{Pipeline-DuL3kwWC.js → Pipeline-DVuJA9BA.js} +1 -1
  60. package/src/assets/web-panel/assets/{Privacy-CkQRdlSU.js → Privacy-BGzwOYRG.js} +1 -1
  61. package/src/assets/web-panel/assets/{ProjectInit-moE_vQ1P.js → ProjectInit-BpHcC5br.js} +2 -2
  62. package/src/assets/web-panel/assets/{ProjectSettings-PnTWi4NQ.js → ProjectSettings-BI5G5gsc.js} +2 -2
  63. package/src/assets/web-panel/assets/{Projects-DZvbT3D7.js → Projects-Ce92-l1V.js} +1 -1
  64. package/src/assets/web-panel/assets/{Providers-CkcrHYy9.js → Providers-CRHCcLFS.js} +1 -1
  65. package/src/assets/web-panel/assets/{QrScannerModal-nYNFGf_H.js → QrScannerModal-qSeg5xag.js} +1 -1
  66. package/src/assets/web-panel/assets/QuickAsk-CA8oSceR.js +1 -0
  67. package/src/assets/web-panel/assets/{Recommend-CmYN_NaS.js → Recommend-DMvPodNo.js} +1 -1
  68. package/src/assets/web-panel/assets/{RemoteSession-BuOdNEjA.js → RemoteSession-BWsapEyN.js} +2 -2
  69. package/src/assets/web-panel/assets/{Reputation-BgkheZou.js → Reputation-BZJETVmC.js} +1 -1
  70. package/src/assets/web-panel/assets/{Row-DvA3klj1.js → Row-CUE1OSMp.js} +1 -1
  71. package/src/assets/web-panel/assets/{RssFeed-CgkIL3PG.js → RssFeed-DvMazcUD.js} +3 -3
  72. package/src/assets/web-panel/assets/{Search-Cv2twJdL.js → Search-e1c-NXWv.js} +1 -1
  73. package/src/assets/web-panel/assets/{Security-XrD2UNU6.js → Security-Dc9GZsx2.js} +3 -3
  74. package/src/assets/web-panel/assets/{Services-LujCntCK.js → Services-AFz6ke-4.js} +2 -2
  75. package/src/assets/web-panel/assets/{Skeleton-ZZCOsxPX.js → Skeleton-gow6MYcY.js} +1 -1
  76. package/src/assets/web-panel/assets/{Skills-BEXGkOrU.js → Skills-h6AxYjUP.js} +1 -1
  77. package/src/assets/web-panel/assets/{Sla-CIqmCgdD.js → Sla-Cr4CkJ0O.js} +1 -1
  78. package/src/assets/web-panel/assets/{SpeechSettings-DkVbwJox.js → SpeechSettings-Bd5yuBtH.js} +1 -1
  79. package/src/assets/web-panel/assets/{SyncSettings-BVGgUs0p.js → SyncSettings-1t4QZMLW.js} +2 -2
  80. package/src/assets/web-panel/assets/{Tasks-C1lh68l5.js → Tasks-u-DrjLRM.js} +1 -1
  81. package/src/assets/web-panel/assets/{Templates-BG4zNAFx.js → Templates-C0yLUC9b.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tenant-t2o6i5fY.js → Tenant-ds1YT5iS.js} +1 -1
  83. package/src/assets/web-panel/assets/{Terminal-CH8UDdVO.js → Terminal-BoIskW2m.js} +2 -2
  84. package/src/assets/web-panel/assets/{TimelineRenderer-B5sYY1IO.js → TimelineRenderer-BkdVK24X.js} +1 -1
  85. package/src/assets/web-panel/assets/{Tokens-D0y7QkG5.js → Tokens-djyDgmfk.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trigger-BA2nKko0.js → Trigger-CYefDS3H.js} +1 -1
  87. package/src/assets/web-panel/assets/{Trust-CrFKCQIs.js → Trust-CE_dbep_.js} +1 -1
  88. package/src/assets/web-panel/assets/{UkeySign-B3x_-Zun.js → UkeySign-DwVs_fey.js} +1 -1
  89. package/src/assets/web-panel/assets/{VideoEditing-TEwxbLH6.js → VideoEditing-BTUqMHAV.js} +1 -1
  90. package/src/assets/web-panel/assets/{Wallet-Larp5rrt.js → Wallet-Bu_E7Rrc.js} +4 -4
  91. package/src/assets/web-panel/assets/{WebAuthn-DfWbEIZe.js → WebAuthn-DTbre5AB.js} +4 -4
  92. package/src/assets/web-panel/assets/{WorkflowEditor-8LKiKExY.js → WorkflowEditor-BsBzd3gt.js} +1 -1
  93. package/src/assets/web-panel/assets/{chat-ByxYOvYW.js → chat-tdifQQvu.js} +1 -1
  94. package/src/assets/web-panel/assets/{colors-Dh4yAClh.js → colors-D3SNW2Vx.js} +1 -1
  95. package/src/assets/web-panel/assets/{compact-item-f5n2j1WZ.js → compact-item-UBlCjrAW.js} +1 -1
  96. package/src/assets/web-panel/assets/{createContext-DIprYuXL.js → createContext-DKsnEnFt.js} +1 -1
  97. package/src/assets/web-panel/assets/devWarning-BBnVfJHh.js +1 -0
  98. package/src/assets/web-panel/assets/{hasIn-CvYeap2I.js → hasIn-BkeySXWe.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DGyTzElU.js → index-6Nvzgytx.js} +1 -1
  100. package/src/assets/web-panel/assets/index-B2w_3mtS.js +1 -0
  101. package/src/assets/web-panel/assets/{index-DshB3-Up.js → index-BEiHKah0.js} +25 -25
  102. package/src/assets/web-panel/assets/{index-DI8jC7gQ.js → index-BIeFLaMV.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BlImvgb7.js → index-BV2zQteq.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BoayvJ48.js → index-BVvz3ntc.js} +1 -1
  105. package/src/assets/web-panel/assets/index-BoHurydC.js +1 -0
  106. package/src/assets/web-panel/assets/{index-CIZQtz8G.js → index-Bw0k3VgD.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CzabQZ7I.js → index-C-KTHSUE.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CJjc8ObW.js → index-C9ImNw5O.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-uDiVjYrS.js → index-CG_b1xyX.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BS_dpgzu.js → index-CUjyL0ZS.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DUj-sL9U.js → index-CXkn77ZN.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-7eG1J-GT.js → index-CZ6JUooI.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-3ROY-lYB.js → index-Cuz2QCFT.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-bt-0zMmH.js → index-D5Umd_Z-.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BsU46c7D.js → index-D6es7MSG.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-xU0eHLIH.js → index-D93iSDUw.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DlJCDpeN.js → index-D9m1HQzl.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BaXSBxy-.js → index-D9um0YVl.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DmcAL4hd.js → index-DD6dD3LV.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Bk8oWRk6.js → index-DFMrIEIt.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-B0AXUhiJ.js → index-DSCiZJXb.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-c_CxUQl3.js → index-DSe_7MSy.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CTqJNul4.js → index-DYFjOyTH.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-Du435yzt.js → index-DdyTv6yc.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DaZVtafQ.js → index-DfrW-iVs.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BvyFQF8I.js → index-Dg8-Duze.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DlTwZIeX.js → index-DiDgwRty.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-6VEWxOyC.js → index-DlEIp1gJ.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-C2RGykST.js → index-DlO6HdD9.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-fpWv4u3Z.js → index-DtxUSZSS.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-CpR0zD38.js → index-DugZRCiI.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CD0s5ESV.js → index-P-ailFQY.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-CcvA1nae.js → index-PWScrdlX.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-DjvON8oh.js → index-SpQ26gD6.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-C5aH2Pj2.js → index-TLBpgN30.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-DlULGx8u.js → index-bOIcWW8F.js} +1 -1
  137. package/src/assets/web-panel/assets/{index-hwbaD3Nk.js → index-pgGKNvmm.js} +1 -1
  138. package/src/assets/web-panel/assets/{initDefaultProps-DRuE92W6.js → initDefaultProps-CVCXG2Hv.js} +1 -1
  139. package/src/assets/web-panel/assets/{motion-6Sgma5Vd.js → motion-Dv00jw87.js} +1 -1
  140. package/src/assets/web-panel/assets/{move-BbQsH8sb.js → move-BFz51iHf.js} +1 -1
  141. package/src/assets/web-panel/assets/{mtc-parser-BdC4INal.js → mtc-parser-BK2woIDE.js} +1 -1
  142. package/src/assets/web-panel/assets/{omit-DeC5m_bi.js → omit-D2X_Gwoo.js} +1 -1
  143. package/src/assets/web-panel/assets/{pickAttrs-DuehpBws.js → pickAttrs-CLmFyJ1q.js} +1 -1
  144. package/src/assets/web-panel/assets/{placementArrow-CJEhv2ij.js → placementArrow-CCzPddQm.js} +1 -1
  145. package/src/assets/web-panel/assets/{responsiveObserve-Dyw3lDGr.js → responsiveObserve-hcm_Zlxd.js} +1 -1
  146. package/src/assets/web-panel/assets/{slide-BMaLXTbS.js → slide-BxfZEFVp.js} +1 -1
  147. package/src/assets/web-panel/assets/{statusUtils-c1K_SdJH.js → statusUtils-kzB9pT-t.js} +1 -1
  148. package/src/assets/web-panel/assets/{styleChecker-CefBry8k.js → styleChecker-CDFd7YCI.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFlexGapSupport-Dj2IsZpo.js → useFlexGapSupport-Czl7NNhS.js} +1 -1
  150. package/src/assets/web-panel/assets/{useFs-RLfB3yqb.js → useFs-y0SAzirG.js} +1 -1
  151. package/src/assets/web-panel/assets/{usePersonalDataHub-DbRVH_NA.js → usePersonalDataHub-BvdPznrA.js} +1 -1
  152. package/src/assets/web-panel/assets/{vnode-DTn_QVJz.js → vnode-D8mNbyZ7.js} +1 -1
  153. package/src/assets/web-panel/assets/{zoom-DuFR0E7i.js → zoom-_hun6w9W.js} +1 -1
  154. package/src/assets/web-panel/index.html +1 -1
  155. package/src/data/changelog.json +29 -3
  156. package/src/gateways/ws/llm-chat-protocol.js +124 -41
  157. package/src/gateways/ws/message-dispatcher.js +2 -0
  158. package/src/lib/evolution/evolution-deployment-config.js +15 -6
  159. package/src/lib/evolution/evolution-deployment-loader.js +63 -5
  160. package/src/lib/evolution/local-ui-evolution-deployment.js +139 -53
  161. package/src/lib/evolution/local-ui-evolution-host.mjs +26 -8
  162. package/src/lib/evolution/local-ui-evolution-runtime.js +42 -19
  163. package/src/assets/web-panel/assets/ChatBubbleRenderer-BDP3fGoz.js +0 -1
  164. package/src/assets/web-panel/assets/MarkdownRenderer-12vD1nC1.js +0 -1
  165. package/src/assets/web-panel/assets/MobileProjects-rRwP16dN.js +0 -1
  166. package/src/assets/web-panel/assets/QuickAsk-53WNo7xT.js +0 -1
  167. package/src/assets/web-panel/assets/devWarning-DRIge35Z.js +0 -1
  168. package/src/assets/web-panel/assets/index-Bq24rTYx.js +0 -1
  169. package/src/assets/web-panel/assets/index-D2f18WsK.js +0 -1
@@ -1 +1 @@
1
- import{u as v}from"./index-DshB3-Up.js";import{u as _}from"./useShellMode-CgR0wCYM.js";function d(r){if(!r)return r;if(r.error)throw new Error(r.error);return r.result!==void 0?r.result:r}async function p(r,s={},e=!0){try{if(e!==!0||!r||typeof r.sendRaw!="function")return{status:"unavailable",path:null};const a=await r.sendRaw({type:"fs.openDirectory",title:s.title},6e4);if(a&&(a.ok===!1||a.error))return{status:"unavailable",path:null};const t=a&&a.result!==void 0?a.result:a;return t&&(t.ok===!1||t.error||t.unsupported===!0)?{status:"unavailable",path:null}:t&&t.canceled===!0?{status:"cancelled",path:null}:t&&typeof t.path=="string"&&t.path.length>0?{status:"selected",path:t.path}:{status:"unavailable",path:null}}catch{return{status:"unavailable",path:null}}}function b(r,s,e,a,t){return typeof r.onMessage!="function"||typeof r.sendRaw!="function"?r.sendRaw({type:s,...e},t).then(d):new Promise((n,u)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${s}.event`,m=`${s}.end`;let c=!1,h=()=>{};const o=(i,f)=>{if(!c){c=!0,clearTimeout(g);try{h()}catch{}i(f)}},g=setTimeout(()=>{o(u,new Error(`stream timeout (${t}ms): ${s}`))},t),y=r.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof a=="function")try{a(i.event||i)}catch{}return}if(i.type===m){o(n,d(i));return}i.type==="error"&&o(u,new Error(i.message||"stream error"))}});h=typeof y=="function"?y:()=>{},Promise.resolve(r.sendRaw({id:l,type:s,...e},t)).catch(()=>{})})}function k(){const r=v(),s=_(),e=(a,t={},n=3e4)=>r.sendRaw({type:a,...t},n).then(d);return{async health(){return await e("personal-data-hub.health",{},8e3)},async stats(){return await e("personal-data-hub.stats",{},8e3)},async listAdapters(){return await e("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const t=await r.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),n=t&&t.result!==void 0?t.result:t,u=n&&typeof n.path=="string"?n.path:n&&typeof n.filePath=="string"?n.filePath:null;return n&&n.canceled!==!0&&u?u:null}catch{return null}},async pickDirectoryResult(a={}){return await p(r,a,s.isEmbedded)},async pickDirectory(a={}){const t=await p(r,a,s.isEmbedded);return t.status==="selected"?t.path:null},async adapterReadiness(a){return await e("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,t={}){return await e("personal-data-hub.sync-adapter",{name:a,options:t},6e5)},async syncAll(a={}){return await e("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:t=20,seed:n=1}={}){return await e("personal-data-hub.register-mock",{name:a,count:t,seed:n})},async unregister(a){return await e("personal-data-hub.unregister",{name:a})},async ask(a,t={}){return await e("personal-data-hub.ask",{question:a,options:t},18e4)},async queryEvents(a={}){return await e("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await e("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await e("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await e("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await e("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,t={}){return await e("personal-data-hub.register-email",{account:a,opts:t},15e3)},async unregisterEmail(a){return await e("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await e("personal-data-hub.list-email-accounts",{},5e3)},async activateEmail(a){return await e("personal-data-hub.activate-email",{email:a},5e3)},async eventDetail(a){return await e("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,t={},n){return await b(r,"personal-data-hub.sync-adapter-stream",{name:a,options:t},n,6e5)},async syncAllStream(a={},t){return await b(r,"personal-data-hub.sync-all-stream",{options:a},t,9e5)},async registerAlipay(a,t={}){return await e("personal-data-hub.register-alipay",{account:a,opts:t},15e3)},async unregisterAlipay(a){return await e("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await e("personal-data-hub.list-alipay-accounts",{},5e3)},async activateAlipay(a){return await e("personal-data-hub.activate-alipay",{email:a},5e3)},async importAlipayBill({zipPath:a,csvPath:t,zipPassword:n}={}){return await e("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:t,zipPassword:n},3e5)},async reviewQueueList(a=50){return await e("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,t){return await e("personal-data-hub.review-decision",{reviewId:a,decision:t},5e3)},async manualMerge(a,t){return await e("personal-data-hub.manual-merge",{aId:a,bId:t},5e3)},async manualUnmerge(a){return await e("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await e("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await e("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await e("personal-data-hub.skills-list",{},5e3)},async runSkill(a,t={}){return await e("personal-data-hub.run-skill",{name:a,options:t},12e4)},async openAichatLogin(a,t={}){return await e("personal-data-hub.aichat-open-login",{vendor:a,opts:t},1e4)},async probeAichatCookies(a,t){return await e("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:t},1e4)},async registerAichatVendor(a,t,n={}){return await e("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:t,opts:n},3e4)},async rotateAichatLogin(a){return await e("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await e("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await e("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await e("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await e("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l}={}){return await e("personal-data-hub.register-wechat",{account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l},45e3)},async listWechatAccounts(){return await e("personal-data-hub.list-wechat-accounts",{},5e3)},async activateWechat(a,t={}){return await e("personal-data-hub.activate-wechat",{uin:a,fridaOpts:t.fridaOpts,keyProviderOverride:t.keyProviderOverride},45e3)},async unregisterWechat(a){return await e("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await e("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await e("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await e("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await e("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await e("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await e("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await e("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await e("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{k as u};
1
+ import{u as v}from"./index-BEiHKah0.js";import{u as _}from"./useShellMode-CgR0wCYM.js";function d(r){if(!r)return r;if(r.error)throw new Error(r.error);return r.result!==void 0?r.result:r}async function p(r,s={},e=!0){try{if(e!==!0||!r||typeof r.sendRaw!="function")return{status:"unavailable",path:null};const a=await r.sendRaw({type:"fs.openDirectory",title:s.title},6e4);if(a&&(a.ok===!1||a.error))return{status:"unavailable",path:null};const t=a&&a.result!==void 0?a.result:a;return t&&(t.ok===!1||t.error||t.unsupported===!0)?{status:"unavailable",path:null}:t&&t.canceled===!0?{status:"cancelled",path:null}:t&&typeof t.path=="string"&&t.path.length>0?{status:"selected",path:t.path}:{status:"unavailable",path:null}}catch{return{status:"unavailable",path:null}}}function b(r,s,e,a,t){return typeof r.onMessage!="function"||typeof r.sendRaw!="function"?r.sendRaw({type:s,...e},t).then(d):new Promise((n,u)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${s}.event`,m=`${s}.end`;let c=!1,h=()=>{};const o=(i,f)=>{if(!c){c=!0,clearTimeout(g);try{h()}catch{}i(f)}},g=setTimeout(()=>{o(u,new Error(`stream timeout (${t}ms): ${s}`))},t),y=r.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof a=="function")try{a(i.event||i)}catch{}return}if(i.type===m){o(n,d(i));return}i.type==="error"&&o(u,new Error(i.message||"stream error"))}});h=typeof y=="function"?y:()=>{},Promise.resolve(r.sendRaw({id:l,type:s,...e},t)).catch(()=>{})})}function k(){const r=v(),s=_(),e=(a,t={},n=3e4)=>r.sendRaw({type:a,...t},n).then(d);return{async health(){return await e("personal-data-hub.health",{},8e3)},async stats(){return await e("personal-data-hub.stats",{},8e3)},async listAdapters(){return await e("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const t=await r.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),n=t&&t.result!==void 0?t.result:t,u=n&&typeof n.path=="string"?n.path:n&&typeof n.filePath=="string"?n.filePath:null;return n&&n.canceled!==!0&&u?u:null}catch{return null}},async pickDirectoryResult(a={}){return await p(r,a,s.isEmbedded)},async pickDirectory(a={}){const t=await p(r,a,s.isEmbedded);return t.status==="selected"?t.path:null},async adapterReadiness(a){return await e("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,t={}){return await e("personal-data-hub.sync-adapter",{name:a,options:t},6e5)},async syncAll(a={}){return await e("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:t=20,seed:n=1}={}){return await e("personal-data-hub.register-mock",{name:a,count:t,seed:n})},async unregister(a){return await e("personal-data-hub.unregister",{name:a})},async ask(a,t={}){return await e("personal-data-hub.ask",{question:a,options:t},18e4)},async queryEvents(a={}){return await e("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await e("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await e("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await e("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await e("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,t={}){return await e("personal-data-hub.register-email",{account:a,opts:t},15e3)},async unregisterEmail(a){return await e("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await e("personal-data-hub.list-email-accounts",{},5e3)},async activateEmail(a){return await e("personal-data-hub.activate-email",{email:a},5e3)},async eventDetail(a){return await e("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,t={},n){return await b(r,"personal-data-hub.sync-adapter-stream",{name:a,options:t},n,6e5)},async syncAllStream(a={},t){return await b(r,"personal-data-hub.sync-all-stream",{options:a},t,9e5)},async registerAlipay(a,t={}){return await e("personal-data-hub.register-alipay",{account:a,opts:t},15e3)},async unregisterAlipay(a){return await e("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await e("personal-data-hub.list-alipay-accounts",{},5e3)},async activateAlipay(a){return await e("personal-data-hub.activate-alipay",{email:a},5e3)},async importAlipayBill({zipPath:a,csvPath:t,zipPassword:n}={}){return await e("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:t,zipPassword:n},3e5)},async reviewQueueList(a=50){return await e("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,t){return await e("personal-data-hub.review-decision",{reviewId:a,decision:t},5e3)},async manualMerge(a,t){return await e("personal-data-hub.manual-merge",{aId:a,bId:t},5e3)},async manualUnmerge(a){return await e("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await e("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await e("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await e("personal-data-hub.skills-list",{},5e3)},async runSkill(a,t={}){return await e("personal-data-hub.run-skill",{name:a,options:t},12e4)},async openAichatLogin(a,t={}){return await e("personal-data-hub.aichat-open-login",{vendor:a,opts:t},1e4)},async probeAichatCookies(a,t){return await e("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:t},1e4)},async registerAichatVendor(a,t,n={}){return await e("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:t,opts:n},3e4)},async rotateAichatLogin(a){return await e("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await e("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await e("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await e("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await e("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l}={}){return await e("personal-data-hub.register-wechat",{account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l},45e3)},async listWechatAccounts(){return await e("personal-data-hub.list-wechat-accounts",{},5e3)},async activateWechat(a,t={}){return await e("personal-data-hub.activate-wechat",{uin:a,fridaOpts:t.fridaOpts,keyProviderOverride:t.keyProviderOverride},45e3)},async unregisterWechat(a){return await e("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await e("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await e("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await e("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await e("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await e("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await e("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await e("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await e("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{k as u};
@@ -1 +1 @@
1
- import{N as i,h as a,w as l}from"./index-DshB3-Up.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-BEiHKah0.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-DshB3-Up.js";import{i as f}from"./motion-6Sgma5Vd.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-BEiHKah0.js";import{i as f}from"./motion-Dv00jw87.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-DshB3-Up.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-BEiHKah0.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">
@@ -1,16 +1,42 @@
1
1
  {
2
2
  "source": "CHANGELOG.md",
3
3
  "releases": [
4
+ {
5
+ "productVersion": null,
6
+ "cliVersion": "0.166.114",
7
+ "cliVersions": ["0.166.114"],
8
+ "date": "2026-10-22",
9
+ "title": "",
10
+ "sections": [
11
+ {
12
+ "heading": "Fixed - cc CLI 0.166.114: Quick Ask streaming and local Evolution setup (candidate, 2026-10-22)",
13
+ "body": "- Surface provider waiting status, credential errors, and terminal streaming failures in Quick Ask; bound governed chat initialization and completion to 60 seconds and support cancellation of active requests.\n- Migrate a supported signed UI-only local Evolution host to admit `agent`, `ask`, `chat`, and `ui`, retaining its signing identity and detecting concurrent profile changes.\n- Prepare VS Code 0.37.156 and JetBrains 0.4.173 to recommend CLI 0.166.114. These versions are unreleased candidates; publication still requires the exact release commit's GitHub Actions gates, OIDC npm publication and public readback before IDE publication."
14
+ }
15
+ ]
16
+ },
17
+ {
18
+ "productVersion": null,
19
+ "cliVersion": "0.166.113",
20
+ "cliVersions": ["0.166.113"],
21
+ "date": "2026-10-22",
22
+ "title": "",
23
+ "sections": [
24
+ {
25
+ "heading": "cc CLI 0.166.113 release attempt (unpublished, 2026-10-22)",
26
+ "body": "- The immutable candidate did not pass its macOS release gate because a test asserted a temporary-path alias; no npm or IDE publication is claimed."
27
+ }
28
+ ]
29
+ },
4
30
  {
5
31
  "productVersion": null,
6
32
  "cliVersion": "0.166.112",
7
33
  "cliVersions": ["0.166.112"],
8
- "date": "2026-10-21",
34
+ "date": "2026-10-22",
9
35
  "title": "",
10
36
  "sections": [
11
37
  {
12
- "heading": "Fixed - cc CLI 0.166.112: retain generated Evolution test signing keys (candidate, 2026-10-21)",
13
- "body": "- Preserve the supplied private signing-key path when saving an explicit Evolution test deployment, so generated test deployments remain usable after configuration.\n- Align Windows ACL fixtures with Session Core's extended-path PowerShell protocol while keeping CLI-facing paths unchanged.\n- Pair VS Code 0.37.155 and JetBrains 0.4.172 with CLI 0.166.112. Publish Session Core 0.3.21 first, then CLI through the exact-SHA GitHub Actions OIDC workflow; publish IDE extensions only after npm readback succeeds."
38
+ "heading": "Fixed - cc CLI 0.166.112: retain generated Evolution test signing keys (published, 2026-10-22)",
39
+ "body": "- Preserve the supplied private signing-key path when saving an explicit Evolution test deployment, so generated test deployments remain usable after configuration.\n- Align Windows ACL fixtures with Session Core's extended-path PowerShell protocol while keeping CLI-facing paths unchanged.\n- Public pairing: CLI 0.166.112, Open VSX 0.37.155 and JetBrains 0.4.172. Session Core 0.3.21 preceded the CLI; exact-source CLI CI and Strict Sandbox passed before OIDC npm publication, and both IDE channels followed verified npm readback. [Publication evidence](https://github.com/chainlesschain/chainlesschain/blob/main/docs/research/cli/evidence/release112-public/publication.json)."
14
40
  }
15
41
  ]
16
42
  },
@@ -38,12 +38,35 @@ import {
38
38
  streamOpenAI,
39
39
  streamAnthropic,
40
40
  streamGemini,
41
+ STREAM_STALL_MS,
41
42
  } from "../../lib/chat-core.js";
42
43
  import { BUILT_IN_PROVIDERS } from "../../lib/llm-providers.js";
43
44
  import { resolveLlmCreds } from "./llm-creds.js";
44
45
  import { prepareGovernedModelTurn } from "../../lib/evolution/governed-model-turn.js";
45
46
  import { normalizeOllamaBaseUrl } from "../../lib/ollama-base-url.js";
46
47
  import { normalizeProviderBaseUrl } from "../../lib/provider-protocol.js";
48
+ import { raceWithAbort } from "../../lib/abort-utils.js";
49
+
50
+ const activeChats = new WeakMap();
51
+ const CHAT_SETUP_TIMEOUT_MS = 60_000;
52
+
53
+ /** A request id is scoped to its originating socket, never another client. */
54
+ export function cancelLlmChat(ws, id) {
55
+ activeChats.get(ws)?.get(id)?.abort(new Error("Chat cancelled"));
56
+ }
57
+
58
+ async function waitForChatPhase(operation, controller, phase) {
59
+ const timer = setTimeout(
60
+ () => controller.abort(new Error(`Chat ${phase} timed out after 60s`)),
61
+ CHAT_SETUP_TIMEOUT_MS,
62
+ );
63
+ timer.unref?.();
64
+ try {
65
+ return await raceWithAbort(operation, controller.signal);
66
+ } finally {
67
+ clearTimeout(timer);
68
+ }
69
+ }
47
70
 
48
71
  function validateMessages(messages) {
49
72
  if (!Array.isArray(messages) || messages.length === 0)
@@ -77,7 +100,17 @@ export async function handleLlmChat(server, id, ws, message) {
77
100
  return;
78
101
  }
79
102
 
80
- const creds = resolveLlmCreds(server, message);
103
+ let creds;
104
+ try {
105
+ creds = resolveLlmCreds(server, message);
106
+ } catch (error) {
107
+ send({
108
+ type: `${topic}.result`,
109
+ ok: false,
110
+ error: error?.message || String(error),
111
+ });
112
+ return;
113
+ }
81
114
  if (!creds || !creds.provider) {
82
115
  send({
83
116
  type: `${topic}.result`,
@@ -100,6 +133,7 @@ export async function handleLlmChat(server, id, ws, message) {
100
133
 
101
134
  let accumulator = "";
102
135
  const onToken = (token) => {
136
+ controller.signal.throwIfAborted();
103
137
  if (typeof token !== "string" || token.length === 0) return;
104
138
  accumulator += token;
105
139
  send({
@@ -114,59 +148,99 @@ export async function handleLlmChat(server, id, ws, message) {
114
148
  };
115
149
 
116
150
  const controller = new AbortController();
151
+ let requests = null;
152
+ if (ws && (typeof ws === "object" || typeof ws === "function")) {
153
+ requests = activeChats.get(ws);
154
+ if (!requests) activeChats.set(ws, (requests = new Map()));
155
+ if (requests.has(id)) {
156
+ send({
157
+ type: `${topic}.result`,
158
+ ok: false,
159
+ error: "Chat request is already active",
160
+ });
161
+ return;
162
+ }
163
+ requests.set(id, controller);
164
+ }
117
165
  const disconnect = () =>
118
166
  controller.abort(new Error("Chat connection closed"));
167
+ const onStall = (elapsedMs, timeoutMs) => {
168
+ if (controller.signal.aborted) return;
169
+ send({
170
+ type: `${topic}.status`,
171
+ status: {
172
+ stage: "waiting",
173
+ provider: creds.provider,
174
+ model: creds.model,
175
+ elapsedMs,
176
+ timeoutMs,
177
+ },
178
+ });
179
+ };
119
180
  ws?.once?.("close", disconnect);
120
181
  try {
121
- const turn = await prepareGovernedModelTurn(
122
- server.evolutionCompositionFactory ?? null,
123
- {
182
+ const turn = await waitForChatPhase(
183
+ prepareGovernedModelTurn(server.evolutionCompositionFactory ?? null, {
124
184
  mode: "ws-llm-chat",
125
185
  messages: message.messages,
126
186
  signal: controller.signal,
127
- },
187
+ }),
188
+ controller,
189
+ "initialization",
128
190
  );
129
191
  const streamOptions = {
130
192
  requireCompletion: turn.governed,
131
193
  signal: controller.signal,
132
194
  };
195
+ // Tell the browser the configured deadline even when waiting hints are
196
+ // disabled, so a slow local model gets its full loading budget.
197
+ onStall(0, STREAM_STALL_MS);
133
198
  const baseUrl =
134
199
  creds.provider === "ollama"
135
200
  ? normalizeOllamaBaseUrl(creds.baseUrl)
136
201
  : normalizeProviderBaseUrl(creds.baseUrl);
137
202
  if (creds.provider === "ollama") {
138
- await streamOllama(
139
- turn.messages,
140
- creds.model,
141
- baseUrl,
142
- onToken,
143
- onUsage,
144
- undefined,
145
- streamOptions,
203
+ await raceWithAbort(
204
+ streamOllama(
205
+ turn.messages,
206
+ creds.model,
207
+ baseUrl,
208
+ onToken,
209
+ onUsage,
210
+ onStall,
211
+ streamOptions,
212
+ ),
213
+ controller.signal,
146
214
  );
147
215
  } else if (creds.provider === "anthropic") {
148
216
  const url = baseUrl;
149
- await streamAnthropic(
150
- turn.messages,
151
- creds.model,
152
- url,
153
- creds.apiKey,
154
- onToken,
155
- onUsage,
156
- undefined,
157
- streamOptions,
217
+ await raceWithAbort(
218
+ streamAnthropic(
219
+ turn.messages,
220
+ creds.model,
221
+ url,
222
+ creds.apiKey,
223
+ onToken,
224
+ onUsage,
225
+ onStall,
226
+ streamOptions,
227
+ ),
228
+ controller.signal,
158
229
  );
159
230
  } else if (creds.provider === "gemini") {
160
231
  const url = baseUrl;
161
- await streamGemini(
162
- turn.messages,
163
- creds.model,
164
- url,
165
- creds.apiKey,
166
- onToken,
167
- onUsage,
168
- undefined,
169
- streamOptions,
232
+ await raceWithAbort(
233
+ streamGemini(
234
+ turn.messages,
235
+ creds.model,
236
+ url,
237
+ creds.apiKey,
238
+ onToken,
239
+ onUsage,
240
+ onStall,
241
+ streamOptions,
242
+ ),
243
+ controller.signal,
170
244
  );
171
245
  } else {
172
246
  // OpenAI-compatible — covers openai / volcengine / deepseek / dashscope /
@@ -174,19 +248,26 @@ export async function handleLlmChat(server, id, ws, message) {
174
248
  // BUILT_IN_PROVIDERS already applied above.
175
249
  const def = BUILT_IN_PROVIDERS[creds.provider];
176
250
  const url = baseUrl || def?.baseUrl;
177
- await streamOpenAI(
178
- turn.messages,
179
- creds.model,
180
- url,
181
- creds.apiKey,
182
- onToken,
183
- onUsage,
184
- undefined,
185
- streamOptions,
251
+ await raceWithAbort(
252
+ streamOpenAI(
253
+ turn.messages,
254
+ creds.model,
255
+ url,
256
+ creds.apiKey,
257
+ onToken,
258
+ onUsage,
259
+ onStall,
260
+ streamOptions,
261
+ ),
262
+ controller.signal,
186
263
  );
187
264
  }
188
265
 
189
- await turn.complete(accumulator);
266
+ await waitForChatPhase(
267
+ turn.complete(accumulator),
268
+ controller,
269
+ "completion",
270
+ );
190
271
  send({
191
272
  type: `${topic}.result`,
192
273
  ok: true,
@@ -205,6 +286,8 @@ export async function handleLlmChat(server, id, ws, message) {
205
286
  error: err?.message || String(err),
206
287
  });
207
288
  } finally {
289
+ requests?.delete(id);
290
+ if (requests?.size === 0) activeChats.delete(ws);
208
291
  ws?.removeListener?.("close", disconnect);
209
292
  }
210
293
  }
@@ -30,6 +30,7 @@ import {
30
30
  handleRemoteSessionTerminal,
31
31
  } from "./remote-session-protocol.js";
32
32
  import { RemoteCommandLedger } from "../../harness/remote-command-ledger.js";
33
+ import { cancelLlmChat } from "./llm-chat-protocol.js";
33
34
 
34
35
  /**
35
36
  * Reconnect-safe command execution. When a message carries a stable
@@ -293,6 +294,7 @@ export function createWsMessageDispatcher(server) {
293
294
  "chat.intent.classify-followup": () =>
294
295
  server._handleChatIntentClassifyFollowup(id, ws, message),
295
296
  "llm.chat": () => server._handleLlmChat(id, ws, message),
297
+ "llm.chat.cancel": () => cancelLlmChat(ws, id),
296
298
  };
297
299
 
298
300
  // Static core routes take precedence and are dispatched directly. The
@@ -200,6 +200,16 @@ export async function configureEvolutionDeployment(
200
200
  options,
201
201
  );
202
202
  updateEvolutionDeploymentProfile((current) => {
203
+ if (
204
+ options.expectedProfile &&
205
+ JSON.stringify(current) !== JSON.stringify(options.expectedProfile)
206
+ ) {
207
+ const error = new Error(
208
+ "Evolution deployment profile changed during local migration",
209
+ );
210
+ error.code = "EVOLUTION_DEPLOYMENT_PROFILE_CHANGED";
211
+ throw error;
212
+ }
203
213
  if (options.expectedProfileAbsent === true && current) {
204
214
  const error = new Error(
205
215
  "Evolution deployment profile was configured during local initialization",
@@ -272,12 +282,11 @@ export async function configureEvolutionDeployment(
272
282
  revisionFloors,
273
283
  activeTrustRootDigest: verified.descriptor.trustRootDigest,
274
284
  revokedDescriptorRevisions,
275
- deploymentMode:
276
- preserveLocalMode
277
- ? "local"
278
- : preserveTestMode
279
- ? "test"
280
- : deploymentMode || "managed",
285
+ deploymentMode: preserveLocalMode
286
+ ? "local"
287
+ : preserveTestMode
288
+ ? "test"
289
+ : deploymentMode || "managed",
281
290
  testPrivateKeyPath:
282
291
  deploymentMode === "test"
283
292
  ? testPrivateKeyPath || null
@@ -622,7 +622,9 @@ async function loadBuiltInFactories(commandName) {
622
622
  import("./evolution-eval-process-supervisor.js"),
623
623
  import("./governed-skill-synthesis-attestor-trust-approval-client.js"),
624
624
  import("./governed-skill-synthesis-attestor-trust-operations-client.js"),
625
- import("./governed-skill-synthesis-attestor-trust-operations-cli-host.js"),
625
+ import(
626
+ "./governed-skill-synthesis-attestor-trust-operations-cli-host.js"
627
+ ),
626
628
  ]);
627
629
  factories.createEvolutionWorkbenchCliHost = createEvolutionWorkbenchCliHost;
628
630
  factories.createEvolutionWorkbenchReviewRuntime =
@@ -1027,9 +1029,39 @@ export async function loadEvolutionDeploymentCommandDependencies(
1027
1029
  importModule = (url) => import(url),
1028
1030
  additionalFactories = {},
1029
1031
  initializeDefaultLocalUi = false,
1032
+ initializeDefaultLocalModels = true,
1030
1033
  } = {},
1031
1034
  ) {
1032
1035
  if (!SUPPORTED_COMMANDS.has(commandName)) return null;
1036
+ const localModelDependencies = () =>
1037
+ dependencies(
1038
+ {
1039
+ evolutionCompositionFactory: async (context) => {
1040
+ const { initializeDefaultLocalUiEvolutionDeployment } = await import(
1041
+ "./local-ui-evolution-deployment.js"
1042
+ );
1043
+ await initializeDefaultLocalUiEvolutionDeployment({ env, cwd });
1044
+ const admitted = await loadEvolutionDeploymentCommandDependencies(
1045
+ commandName,
1046
+ {
1047
+ env,
1048
+ cwd,
1049
+ read,
1050
+ resolveRealPath,
1051
+ importModule,
1052
+ additionalFactories,
1053
+ initializeDefaultLocalModels: false,
1054
+ },
1055
+ );
1056
+ if (typeof admitted?.evolutionCompositionFactory !== "function")
1057
+ throw new Error(
1058
+ "Local model command requires an authenticated Evolution deployment",
1059
+ );
1060
+ return admitted.evolutionCompositionFactory(context);
1061
+ },
1062
+ },
1063
+ commandName,
1064
+ );
1033
1065
  let descriptorPath = env.CHAINLESSCHAIN_EVOLUTION_DEPLOYMENT_DESCRIPTOR;
1034
1066
  let trustRootPath = env.CHAINLESSCHAIN_EVOLUTION_DEPLOYMENT_TRUST_ROOT;
1035
1067
  if (
@@ -1061,6 +1093,15 @@ export async function loadEvolutionDeploymentCommandDependencies(
1061
1093
  "Saved evolution deployment profile is disabled",
1062
1094
  );
1063
1095
  }
1096
+ if (
1097
+ initializeDefaultLocalModels &&
1098
+ ["agent", "ask", "chat"].includes(commandName) &&
1099
+ !saved.profile
1100
+ ) {
1101
+ // Registration/help is read-only. Bootstrap only when a real command
1102
+ // requests its authenticated composition, then re-read current policy.
1103
+ return localModelDependencies();
1104
+ }
1064
1105
  if (!saved.error && saved.profile?.enabled) {
1065
1106
  descriptorPath = saved.profile.descriptorPath;
1066
1107
  trustRootPath = saved.profile.trustRootPath;
@@ -1111,19 +1152,35 @@ export async function loadEvolutionDeploymentCommandDependencies(
1111
1152
  const localProfile =
1112
1153
  fromSavedProfile && saved.profile.deploymentMode === "local";
1113
1154
  if (localProfile) {
1155
+ const generation = saved.profile.descriptorPath.endsWith(
1156
+ "deployment-v2.json",
1157
+ )
1158
+ ? 2
1159
+ : 1;
1114
1160
  const localHostPath = join(
1115
1161
  dirname(saved.filePath),
1116
1162
  "local-ui-host",
1117
- "ui-host.mjs",
1163
+ generation === 2 ? "ui-host-v2.mjs" : "ui-host.mjs",
1118
1164
  );
1119
1165
  const canonicalLocalHostPath = await realpath(localHostPath);
1120
1166
  if (
1121
- descriptor.commands.length !== 1 ||
1122
- descriptor.commands[0] !== "ui" ||
1167
+ !(
1168
+ ["ui"].join(",") === descriptor.commands.join(",") ||
1169
+ "agent,ask,chat,ui" === descriptor.commands.join(",")
1170
+ ) ||
1123
1171
  verified.modulePath !== canonicalLocalHostPath
1124
1172
  ) {
1125
- throw new Error("Local Evolution deployment is not the protected UI host");
1173
+ throw new Error(
1174
+ "Local Evolution deployment is not the protected UI host",
1175
+ );
1126
1176
  }
1177
+ if (
1178
+ initializeDefaultLocalModels &&
1179
+ ["agent", "ask", "chat", "ui"].includes(commandName) &&
1180
+ descriptor.commands.length === 1 &&
1181
+ descriptor.commands[0] === "ui"
1182
+ )
1183
+ return localModelDependencies();
1127
1184
  }
1128
1185
  if (!descriptor.commands.includes(commandName)) {
1129
1186
  return deniedAgentDependencies(
@@ -1154,6 +1211,7 @@ export async function loadEvolutionDeploymentCommandDependencies(
1154
1211
  createLocalUiEvolutionComposition: (options = {}) =>
1155
1212
  createLocalUiEvolutionComposition({
1156
1213
  ...options,
1214
+ commandName,
1157
1215
  localDirectory: join(dirname(saved.filePath), "local-ui-host"),
1158
1216
  env,
1159
1217
  cwd,