chainlesschain 0.162.198 → 0.163.0

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 (197) hide show
  1. package/bin/chainlesschain.js +14 -6
  2. package/package.json +5 -1
  3. package/scripts/command-lifecycle-report.mjs +94 -0
  4. package/scripts/postinstall.mjs +19 -3
  5. package/scripts/repair-node-pty.mjs +74 -0
  6. package/src/assets/web-panel/assets/{AIOps-CSN-D2xb.js → AIOps-CSy9BB6Z.js} +1 -1
  7. package/src/assets/web-panel/assets/{ActionButton-CBSMlGzv.js → ActionButton-CFyrEVfq.js} +1 -1
  8. package/src/assets/web-panel/assets/{Analytics-3yr3Nt2t.js → Analytics-8419vb47.js} +3 -3
  9. package/src/assets/web-panel/assets/{AppLayout-1b-o3lMH.js → AppLayout-CHu3Hkdx.js} +5 -5
  10. package/src/assets/web-panel/assets/{Artifacts-Dr8rJi17.js → Artifacts-DJnt57Fs.js} +1 -1
  11. package/src/assets/web-panel/assets/{Audit-2V689HC2.js → Audit-CHMq9ajE.js} +1 -1
  12. package/src/assets/web-panel/assets/{BackgroundAgents-DIxkNrD_.js → BackgroundAgents-Cyfa4ub2.js} +1 -1
  13. package/src/assets/web-panel/assets/{Backup-Pg6BcwrE.js → Backup-ACXUrUv7.js} +1 -1
  14. package/src/assets/web-panel/assets/{BaseInput-CLUpqyfH.js → BaseInput-DjC-3qRE.js} +1 -1
  15. package/src/assets/web-panel/assets/{Chat-qVS8rD4G.js → Chat-7_VDQ851.js} +6 -6
  16. package/src/assets/web-panel/assets/{ChatBubbleRenderer-ti49X12Q.js → ChatBubbleRenderer-B4zct0dY.js} +1 -1
  17. package/src/assets/web-panel/assets/{Checkbox-Bs9AaEay.js → Checkbox-DxbDl_rk.js} +1 -1
  18. package/src/assets/web-panel/assets/{Codegen-Dvc1mq8q.js → Codegen-BvZa5854.js} +1 -1
  19. package/src/assets/web-panel/assets/{Col-C4_biO7A.js → Col-CX5Ow2Zl.js} +1 -1
  20. package/src/assets/web-panel/assets/{Community-al25XQUV.js → Community-wFun-jSg.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compact-D-ZDB8M1.js → Compact-C6vJDuSn.js} +1 -1
  22. package/src/assets/web-panel/assets/{Compliance-6lIfDz1W.js → Compliance-Cm4sBytH.js} +1 -1
  23. package/src/assets/web-panel/assets/{Cowork-DdI48XMJ.js → Cowork-DiEcMwE8.js} +3 -3
  24. package/src/assets/web-panel/assets/{Cron-DF5HZd2g.js → Cron-RbeexsSQ.js} +2 -2
  25. package/src/assets/web-panel/assets/{Crosschain-DuxeSvt3.js → Crosschain-BBsyCKOp.js} +1 -1
  26. package/src/assets/web-panel/assets/{DID-B9yHkUTd.js → DID-DE36g7Hz.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dashboard-Z5EuI3IM.js → Dashboard-CdfLSTz1.js} +2 -2
  28. package/src/assets/web-panel/assets/{Dropdown-vuRfO3dY.js → Dropdown-CyaT6SyW.js} +1 -1
  29. package/src/assets/web-panel/assets/{EmailListRenderer-QFLCc1uL.js → EmailListRenderer-Nv_66bkM.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BZ7EXkFJ.js → FamilyGuardDashboard-Di-Sb-Ad.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-DycIEg2s.js → Federation-B3mdht-U.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-Ba0H_7yG.js → FormItemContext-BeP93u4f.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer--JgSTK-C.js → GenericCardRenderer-CETLayUr.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-DEvTbldE.js → Git-Bsat6hgI.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-BJIljy18.js → Governance-YVmA7SwN.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-CVyW3G3q.js → Inference-DCa94nGl.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-v8-borge.js → KnowledgeGraph-CIKEU7T0.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-BCdS7gGo.js → Logs-DUxP0MnS.js} +2 -2
  39. package/src/assets/web-panel/assets/{MarkdownRenderer-CU-JB2Ns.js → MarkdownRenderer-Mw5o3e7M.js} +1 -1
  40. package/src/assets/web-panel/assets/{Marketplace-AN6tGA2B.js → Marketplace-BU0X2lqu.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-DGViXASN.js → McpTools-BSsg58nZ.js} +3 -3
  42. package/src/assets/web-panel/assets/{Memory-Bpvmx9X4.js → Memory-CjqNIXlO.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-CTP-DOTC.js → MobileBridge-DSsa4doG.js} +1 -1
  44. package/src/assets/web-panel/assets/MobileProjects-DLl1qzid.js +1 -0
  45. package/src/assets/web-panel/assets/{Mtc-ndYr0M1s.js → Mtc-Du080G7t.js} +5 -5
  46. package/src/assets/web-panel/assets/{MtcAudit-Ci0-YK7W.js → MtcAudit-JzQk-arw.js} +2 -2
  47. package/src/assets/web-panel/assets/{Multisig-BehSTFW7.js → Multisig-BMVT5Uln.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-B91_YBLv.js → NLProgramming-D_38QYjs.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-BQlJ0-gq.js → Notes-DvbdjNm5.js} +3 -3
  50. package/src/assets/web-panel/assets/{NotificationSettings-CDgYMjYK.js → NotificationSettings-DVHCW6ii.js} +1 -1
  51. package/src/assets/web-panel/assets/{OrderTableRenderer-BJkSlKeH.js → OrderTableRenderer-DmMBFD3g.js} +1 -1
  52. package/src/assets/web-panel/assets/{Organization-B-b3cWCp.js → Organization-DC-9pAmP.js} +4 -4
  53. package/src/assets/web-panel/assets/{Overflow-CILUL4nL.js → Overflow-BRxWq0Qq.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-BTCFBkF0.js → P2P-CUdzhyLH.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-BAR6AUx5.js → PdhVaultBrowser-CwG21s9P.js} +3 -3
  56. package/src/assets/web-panel/assets/{Permissions-RRf6HbWJ.js → Permissions-6bHd4zgK.js} +4 -4
  57. package/src/assets/web-panel/assets/{PersonalDataHub-BGTMiICa.js → PersonalDataHub-BXgTDCba.js} +4 -4
  58. package/src/assets/web-panel/assets/{Pipeline-945qY9YF.js → Pipeline-BFhKCBNj.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-DPZwI6lJ.js → Privacy-Byz9IqUF.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-BPH2NRKc.js → ProjectInit-B9LNoyoN.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-BZCRNCvb.js → ProjectSettings-DEj4eVdl.js} +2 -2
  62. package/src/assets/web-panel/assets/{Projects-BTI__tBt.js → Projects-BAAvus06.js} +1 -1
  63. package/src/assets/web-panel/assets/Providers-Bu_pQsk6.js +1 -0
  64. package/src/assets/web-panel/assets/{QrScannerModal-N6rbqt1r.js → QrScannerModal-CeDey0SJ.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-DrwjPS7M.js → QuickAsk-exUvRIgX.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-Cog9Wd99.js → Recommend-4hJWmtSI.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-DC9pynjM.js → RemoteSession-BmYUpl0m.js} +2 -2
  68. package/src/assets/web-panel/assets/{Reputation-D4th4gKS.js → Reputation-B_txYAyY.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-ogiWR6v9.js → Row-BPtqOqGh.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-uYlk-2Oj.js → RssFeed-CyWTxmq0.js} +3 -3
  71. package/src/assets/web-panel/assets/{Search-DYzzwvtM.js → Search-cItU1tmC.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-Da7YOyX6.js → Security-B0Z9_BUt.js} +4 -4
  73. package/src/assets/web-panel/assets/{Services-CLI1VM1X.js → Services-Dzpz2uFp.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-DK77dzDC.js → Skeleton-CBtoylP8.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-C_z7Lmhl.js → Skills-Cw9RJiVn.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-D6413Q8L.js → Sla-D2vLfvgl.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-C07ydbj2.js → SpeechSettings-I9dKbcOU.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-DGOm2W22.js → SyncSettings-BOju53RT.js} +2 -2
  79. package/src/assets/web-panel/assets/{Tasks-Cr_PVyLM.js → Tasks-C3LBy_7x.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-BhL2mZ0t.js → Templates-C2ttpPql.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-CPk5oyUr.js → Tenant-XQ6Qg8-Q.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-ClhqUsqV.js → Terminal-DYB9dUnS.js} +2 -2
  83. package/src/assets/web-panel/assets/{TimelineRenderer-BCC7MV5a.js → TimelineRenderer-gShtO4I8.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-DD1Jt4oO.js → Tokens-BvoJTCJg.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-BCydFvN2.js → Trigger-BwYRTMY_.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-DDHT1noa.js → Trust-C5rt6fCF.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-CWPZC7oI.js → UkeySign-DPBrHUgL.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-9Ea0nJR0.js → VideoEditing-BcxywO_K.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-BjxhLxTf.js → Wallet-CZvTpsPz.js} +4 -4
  90. package/src/assets/web-panel/assets/{WebAuthn-C6uCye67.js → WebAuthn-LI_jAuOx.js} +4 -4
  91. package/src/assets/web-panel/assets/{WorkflowEditor-d2g4reYo.js → WorkflowEditor-B2a6bANB.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-frTc6ScX.js → chat-B6DPMfRB.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-B5K6lG3v.js → colors-IpLhw9T8.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-Cdn46r8D.js → compact-item-BzodimsI.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-DU1jqVQi.js → createContext-DL2jaWH5.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-CZB0EDsa.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-DdNH-aW_.js → hasIn-C4Geudre.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CHmkkdfT.js → index-B5Sn7CtW.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-Cj6P9Nst.js → index-B6w4fpSI.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CQorP1Ng.js → index-BRj6YKuI.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-cYaWV4Mq.js → index-BX4pKudW.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-kVO_MDm-.js → index-BaTvPxY0.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-D23xGYjM.js → index-BbWRxWM2.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-Be4OtL-N.js → index-BeZhISVl.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-32ajXmTb.js → index-Bi6Zkv5M.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-NmEXVjzt.js → index-BvKoSvko.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-7ehytj1K.js → index-C3LzRvkw.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-gg3QPC3i.js → index-CAjyUjZl.js} +3 -3
  109. package/src/assets/web-panel/assets/index-CI7k8Sk9.js +1 -0
  110. package/src/assets/web-panel/assets/{index-CGiwfwB9.js → index-COxGCo8v.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DIVyTmZ3.js → index-CQBPhJlk.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CUoNAmE8.js → index-CQPOCB4h.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-t_OBzIP4.js → index-CTlmw_cr.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-VDM2KKo9.js → index-CVFXYmUe.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DftZuyA7.js → index-C_SxaIPI.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BcGwGIaR.js → index-CaKKxqCI.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-HjCvXHf5.js → index-CcgoKNXN.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-mgU3Q-lN.js → index-CczBR6Du.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DM5FmPZU.js → index-CeUnSSEP.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-D4l82Me1.js → index-CnwHp5Oi.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BwlIxAmX.js → index-DGBRBg3D.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BVLL-mq_.js → index-DHdD0Y7h.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BXKhhx9V.js → index-DMY1waPC.js} +1 -1
  124. package/src/assets/web-panel/assets/index-DPTHBSR8.js +1 -0
  125. package/src/assets/web-panel/assets/{index-LaivuXyF.js → index-DREx4gaS.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CtRPi4YC.js → index-DXQ2OtXt.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DRzBBdQ0.js → index-DZU7Y67X.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-PjAS0sIZ.js → index-DZtKnnTW.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-MM4Zz2OE.js → index-DlABpgCv.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BoFak7le.js → index-Dl_QAtzq.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-D1qIC4GR.js → index-DnBybYhx.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D4miNkWv.js → index-DoyIjk6r.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DtBCCkC4.js → index-DvEnrn8M.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-BC4eGkar.js → index-DvOzjf2F.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-yZRuZpwK.js → index-EjW1R_a7.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-Dca_i7H8.js → index-F-SCUTee.js} +1 -1
  137. package/src/assets/web-panel/assets/{initDefaultProps-DwLTRNdo.js → initDefaultProps-CW5mTl3w.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-BchZDXnh.js → motion-BtjIT9np.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-e8M-zZFl.js → move-DZv4fZAV.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-Ci40fQb3.js → mtc-parser-BwCix1O-.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-C7110_f2.js → omit-BW72HDUD.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-skteMgnM.js → pickAttrs-DBW2jcMc.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-MGZ-lh2B.js → placementArrow-D3YmWlIS.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve-N4Sd7uy-.js → responsiveObserve-CL4-a-9Q.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-C7HDGRaa.js → slide-Cw9zIbXQ.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-BhRexlgy.js → statusUtils-mMLVioo-.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-ChEoQkN2.js → styleChecker-BK8857AH.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-CDbG1s2Y.js → useFlexGapSupport-C1iSaJij.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-CUIx0tcJ.js → useFs-D3riGOaP.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-bkO7L7ec.js → usePersonalDataHub-Bwqvmz4X.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode-B_ZvABIG.js → vnode-Byk4zzkf.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-D5shjpS8.js → zoom-D7INFTp2.js} +1 -1
  153. package/src/assets/web-panel/index.html +1 -1
  154. package/src/command-help-index.json +1 -1
  155. package/src/commands/mcp.js +119 -0
  156. package/src/commands/session-show.js +8 -10
  157. package/src/commands/session.js +60 -52
  158. package/src/data/changelog.json +40 -1
  159. package/src/gateways/ws/session-protocol.js +14 -4
  160. package/src/gateways/ws/ws-agent-handler.js +31 -0
  161. package/src/harness/jsonl-session-store.js +1147 -130
  162. package/src/harness/mcp-client.js +44 -11
  163. package/src/harness/session-index.js +80 -80
  164. package/src/harness/session-list-index.js +147 -2
  165. package/src/lib/background-interaction-journal.js +2 -2
  166. package/src/lib/command-lifecycle-report.js +516 -0
  167. package/src/lib/mcp-stdio-environment.js +48 -0
  168. package/src/lib/mcp-stdio-executable-identity.js +552 -17
  169. package/src/lib/mcp-stdio-package-materialization.js +1424 -0
  170. package/src/lib/packer/native-update-state.js +979 -1
  171. package/src/lib/packer/pack-update-applier.js +1050 -125
  172. package/src/lib/packer/pkg-config-generator.js +1 -0
  173. package/src/lib/paths.js +53 -0
  174. package/src/lib/process-execution-broker/index.js +180 -37
  175. package/src/lib/process-execution-broker/platform-sandbox.js +291 -24
  176. package/src/lib/recent-session.js +17 -17
  177. package/src/lib/secure-file-identity.js +47 -0
  178. package/src/lib/secure-fs.js +21 -2
  179. package/src/lib/session-anti-rollback-anchor.js +766 -0
  180. package/src/lib/session-host-lease.js +492 -0
  181. package/src/lib/session-persistence-failure.js +109 -0
  182. package/src/lib/session-picker.js +26 -3
  183. package/src/lib/session-search.js +25 -11
  184. package/src/lib/side-effect-ledger-store.js +2 -2
  185. package/src/lib/skill-execution-authority.js +13 -9
  186. package/src/lib/turn-binding-store.js +2 -2
  187. package/src/repl/agent-repl.js +309 -39
  188. package/src/runtime/agent-core.js +88 -5
  189. package/src/runtime/cleanup-deadline.js +143 -0
  190. package/src/runtime/headless-runner.js +357 -139
  191. package/src/runtime/headless-stream.js +207 -28
  192. package/src/runtime/output-backpressure.js +53 -0
  193. package/src/assets/web-panel/assets/MobileProjects-C8qfktxn.js +0 -1
  194. package/src/assets/web-panel/assets/Providers-DDCf_nIw.js +0 -1
  195. package/src/assets/web-panel/assets/devWarning-CP-jEUyw.js +0 -1
  196. package/src/assets/web-panel/assets/index-CzrCHrFy.js +0 -1
  197. package/src/assets/web-panel/assets/index-OJsGskZw.js +0 -1
@@ -1 +1 @@
1
- import{i as e}from"./index-gg3QPC3i.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
1
+ import{i as e}from"./index-CAjyUjZl.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
@@ -1 +1 @@
1
- import{B as d}from"./index-gg3QPC3i.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
1
+ import{B as d}from"./index-CAjyUjZl.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
@@ -1 +1 @@
1
- import{o,s as t}from"./vendor-Bn1JzzAn.js";import{d as s}from"./styleChecker-ChEoQkN2.js";const r=(()=>{const e=t(!1);return o(()=>{e.value=s()}),e});export{r as u};
1
+ import{o,s as t}from"./vendor-Bn1JzzAn.js";import{d as s}from"./styleChecker-BK8857AH.js";const r=(()=>{const e=t(!1);return o(()=>{e.value=s()}),e});export{r as u};
@@ -1 +1 @@
1
- import{u as d}from"./index-gg3QPC3i.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-CAjyUjZl.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 v}from"./index-gg3QPC3i.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-CAjyUjZl.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-gg3QPC3i.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-CAjyUjZl.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-gg3QPC3i.js";import{i as f}from"./motion-BchZDXnh.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-CAjyUjZl.js";import{i as f}from"./motion-BtjIT9np.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-gg3QPC3i.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-CAjyUjZl.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">
@@ -88,7 +88,7 @@
88
88
  "lowcode": "Usage: chainlesschain lowcode [options] [command]\n\nLow-code application platform\n\nOptions:\n -h, --help display help for command\n\nCommands:\n create [options] <name> Create a new low-code application\n list [options] List all low-code applications\n preview <app-id> Preview application info\n publish <app-id> Publish an application\n components [options] List available built-in components\n datasource [options] <app-id> <name> <type> Add a data source to an application\n versions [options] <app-id> Show version history for an application\n rollback <app-id> <version> Rollback application to a previous version\n export [options] <app-id> Export application definition\n categories [options] List component categories (V2)\n datasource-types [options] List supported data source types (V2)\n statuses [options] List canonical app statuses (V2)\n components-v2 [options] List built-in components with category filter (V2)\n datasource-v2 [options] <app-id> <name> <type> Register a validated data source (V2)\n test-connection [options] <datasource-id> Heuristic connection check for a data source (V2)\n set-status <app-id> <status> Update app status with validated transition (V2)\n archive <app-id> Archive an application (V2)\n status-history [options] <app-id> Show status transition history for an app (V2)\n clone [options] <source-id> Clone an application (V2)\n export-json [options] <app-id> Export an app as canonical JSON (V2)\n import-json <file> Import an app from a canonical JSON file (V2)\n stats-v2 [options] Low-code platform statistics (V2)\n deploy [options] <app-id> Deploy application as static HTML bundle\n enums-v2 Show V2 enums (app maturity + build lifecycle)\n config-v2 Show V2 config thresholds\n set-max-active-apps-v2 <n> Set max active apps per owner\n set-max-pending-builds-v2 <n> Set max pending builds per app\n set-app-idle-ms-v2 <n> Set app idle threshold (ms)\n set-build-stuck-ms-v2 <n> Set build stuck threshold (ms)\n register-app-v2 [options] <id> <owner> Register V2 app\n activate-app-v2 <id> Activate app\n pause-app-v2 <id> Pause app\n archive-app-v2 <id> Archive app (terminal)\n touch-app-v2 <id> Touch app lastTouchedAt\n get-app-v2 <id> Get V2 app\n list-apps-v2 List V2 apps\n create-build-v2 [options] <id> <appId> Create V2 app build (queued)\n start-build-v2 <id> Start build\n succeed-build-v2 <id> Succeed build\n fail-build-v2 <id> [reason] Fail build\n cancel-build-v2 <id> [reason] Cancel build\n get-build-v2 <id> Get V2 build\n list-builds-v2 List V2 builds\n auto-pause-idle-v2 Auto-pause idle active apps\n auto-fail-stuck-v2 Auto-fail stuck building builds\n gov-stats-v2 V2 governance aggregate stats\n help [command] display help for command\n",
89
89
  "marketplace": "Usage: chainlesschain marketplace [options] [command]\n\nSkill marketplace — publish skill services, record invocations, view stats\n\nOptions:\n -h, --help display help for command\n\nCommands:\n status-types [options] List known service statuses\n invocation-statuses [options] List known invocation statuses\n publish [options] <name> Publish a skill service\n list [options] List skill services\n show [options] <service-id> Show full details of a skill service\n status [options] <service-id> <new-status> Transition service status (draft|published|deprecated|suspended)\n record [options] <service-id> Record a skill invocation against a published service\n invocations [options] List skill invocations\n stats [options] Aggregate invocation stats (optionally scoped to a service)\n service-statuses-v2 [options] List V2 service statuses (frozen enum)\n invocation-statuses-v2 [options] List V2 invocation statuses (frozen enum)\n pricing-models [options] List V2 pricing models (frozen enum)\n default-max-concurrent Show default per-service concurrency cap\n max-concurrent Show current per-service concurrency cap\n active-invocation-count [service-id] Show count of PENDING + RUNNING invocations (all services by default)\n set-max-concurrent <n> Set the per-service concurrency cap\n begin-v2 [options] <service-id> Begin a V2 invocation (creates PENDING, enforces cap)\n start-invocation [options] <invocation-id> Start a V2 invocation (PENDING → RUNNING)\n complete-invocation [options] <invocation-id> Complete a V2 invocation (RUNNING → SUCCESS)\n fail-invocation [options] <invocation-id> Fail a V2 invocation\n timeout-invocation [options] <invocation-id> Timeout a V2 invocation\n set-invocation-status [options] <invocation-id> <status> Set V2 invocation status via the state machine\n stats-v2 [options] V2 aggregated stats\n purchase [options] <itemId> Initiate a purchase. Large orders (≥ threshold) route through M-of-N multisig.\n consume [options] <proposalId> Execute a multisig-gated purchase after threshold reached (marks proposal consumed)\n help [command] display help for command\n",
90
90
  "matrix": "Usage: chainlesschain matrix [options] [command]\n\nMatrix bridge — rooms, messaging, E2EE\n\nOptions:\n -h, --help display help for command\n\nCommands:\n login [options] Login to a Matrix homeserver\n rooms [options] List joined rooms\n send [options] <room-id> <message> Send a message to a room\n messages [options] <room-id> Get messages from a room\n join <room-id> Join a Matrix room\n thread Matrix threaded replies (m.thread\n relation)\n space Matrix Spaces — hierarchical room\n grouping (m.space)\n enums-v2 Show V2 enums\n register-room-v2 [options] Register a matrix room profile (pending)\n activate-room-v2 <id> Activate room\n mute-room-v2 <id> Mute room\n archive-room-v2 <id> Archive room (terminal)\n touch-room-v2 <id> Refresh lastTouchedAt\n get-room-v2 <id> Get a room\n list-rooms-v2 List rooms\n create-msg-v2 [options] Create a matrix message (queued)\n start-msg-v2 <id> Transition msg to sending\n deliver-msg-v2 <id> Transition msg to delivered\n fail-msg-v2 [options] <id> Fail msg\n cancel-msg-v2 [options] <id> Cancel msg\n get-msg-v2 <id> Get msg\n list-msgs-v2 List msgs\n set-max-active-rooms-v2 <n> Set per-owner active cap\n set-max-pending-msgs-v2 <n> Set per-room pending cap\n set-room-idle-ms-v2 <n> Set idle threshold\n set-msg-stuck-ms-v2 <n> Set stuck threshold\n auto-mute-idle-rooms-v2 Auto-mute idle rooms\n auto-fail-stuck-msgs-v2 Auto-fail stuck sending msgs\n stats-v2 V2 aggregate stats\n help [command] display help for command\n",
91
- "mcp": "Usage: chainlesschain mcp [options] [command]\n\nMCP server management and tool execution\n\nOptions:\n -h, --help display help for command\n\nCommands:\n login [options] <target> Authorize a remote MCP server via OAuth (opens a browser, or prints the URL in headless/SSH environments); stores the token. <target> is a URL or a configured server name.\n logout <target> Delete the stored OAuth token for a remote MCP server (<target> is a URL or a configured server name)\n auth [options] List stored MCP OAuth tokens\n serve [options] Expose local file tools (read/list/search/write, root-confined) as a Streamable-HTTP MCP server for other clients\n computer-use [options] Expose GUI control (screenshot/window-list/click/type/scroll/clipboard/app-launch) as a Streamable-HTTP MCP server. OFF by default; input verbs need confirm:true; high-risk apps (terminals/IDEs/settings/password managers) always confirm\n servers|list [options] List configured MCP servers\n trust-executable [options] <name> Review and trust the current executable and interpreter-entrypoint bytes for one stdio MCP server\n add [options] <name> Add or update an MCP server configuration\n remove [options] <name> Remove an MCP server configuration\n get [options] <name> Show one MCP server configuration and its source\n doctor [options] [name] Validate MCP configuration and test transport handshakes\n connect [options] <name> Connect to an MCP server\n disconnect <name> Disconnect from an MCP server\n tools [options] List available MCP tools\n call [options] <tool> Call an MCP tool\n resources [options] List resources exposed by MCP servers\n read-resource [options] <uri> Read an MCP resource by URI\n prompts [options] List prompts exposed by MCP servers\n get-prompt [options] <name> Fetch a rendered MCP prompt by name\n trust-helper [options] <name> Trust the exact headers helper command for a workspace-local MCP server\n trust-project [options] Re-trust the project .mcp.json after reviewing a content change (records its fingerprint for --project-mcp runs)\n scaffold [options] <name> Scaffold a new MCP server project (stdio or http+sse)\n registry Browse the curated catalog of community MCP servers\n server-maturities-v2 List MCP server maturity states (V2)\n invocation-lifecycle-v2 List MCP invocation lifecycle states (V2)\n stats-v2 Show MCP registry V2 stats\n config-v2 Show MCP registry V2 config\n register-server-v2 <id> <owner> <endpoint> Register an MCP server (V2)\n activate-server-v2 <id> Activate an MCP server (V2)\n degrade-server-v2 <id> Degrade an MCP server (V2)\n retire-server-v2 <id> Retire an MCP server (V2)\n touch-server-v2 <id> Touch an MCP server (V2)\n get-server-v2 <id> Get an MCP server (V2)\n list-servers-v2 List MCP servers (V2)\n create-invocation-v2 <id> <serverId> <tool> Create an MCP invocation (V2)\n dispatch-invocation-v2 <id> Dispatch an MCP invocation (V2)\n complete-invocation-v2 <id> Complete an MCP invocation (V2)\n fail-invocation-v2 <id> [reason] Fail an MCP invocation (V2)\n cancel-invocation-v2 <id> [reason] Cancel an MCP invocation (V2)\n get-invocation-v2 <id> Get an MCP invocation (V2)\n list-invocations-v2 List MCP invocations (V2)\n auto-degrade-idle-servers-v2 Auto-degrade idle MCP servers (V2)\n auto-fail-stuck-invocations-v2 Auto-fail stuck MCP invocations (V2)\n set-max-active-servers-v2 <n> Set max active servers per owner (V2)\n set-max-pending-invocations-v2 <n> Set max pending invocations per server (V2)\n set-server-idle-ms-v2 <n> Set MCP server idle timeout in ms (V2)\n set-invocation-stuck-ms-v2 <n> Set MCP invocation stuck timeout in ms (V2)\n reset-state-v2 Reset MCP registry V2 in-memory state\n help [command] display help for command\n",
91
+ "mcp": "Usage: chainlesschain mcp [options] [command]\n\nMCP server management and tool execution\n\nOptions:\n -h, --help display help for command\n\nCommands:\n login [options] <target> Authorize a remote MCP server via OAuth (opens a browser, or prints the URL in headless/SSH environments); stores the token. <target> is a URL or a configured server name.\n logout <target> Delete the stored OAuth token for a remote MCP server (<target> is a URL or a configured server name)\n auth [options] List stored MCP OAuth tokens\n serve [options] Expose local file tools (read/list/search/write, root-confined) as a Streamable-HTTP MCP server for other clients\n computer-use [options] Expose GUI control (screenshot/window-list/click/type/scroll/clipboard/app-launch) as a Streamable-HTTP MCP server. OFF by default; input verbs need confirm:true; high-risk apps (terminals/IDEs/settings/password managers) always confirm\n servers|list [options] List configured MCP servers\n materialize-package [options] <name> Replace one exact JavaScript package launcher with a content-addressed, guarded dependency capsule\n trust-executable [options] <name> Review and trust the current executable and interpreter-entrypoint bytes for one stdio MCP server\n add [options] <name> Add or update an MCP server configuration\n remove [options] <name> Remove an MCP server configuration\n get [options] <name> Show one MCP server configuration and its source\n doctor [options] [name] Validate MCP configuration and test transport handshakes\n connect [options] <name> Connect to an MCP server\n disconnect <name> Disconnect from an MCP server\n tools [options] List available MCP tools\n call [options] <tool> Call an MCP tool\n resources [options] List resources exposed by MCP servers\n read-resource [options] <uri> Read an MCP resource by URI\n prompts [options] List prompts exposed by MCP servers\n get-prompt [options] <name> Fetch a rendered MCP prompt by name\n trust-helper [options] <name> Trust the exact headers helper command for a workspace-local MCP server\n trust-project [options] Re-trust the project .mcp.json after reviewing a content change (records its fingerprint for --project-mcp runs)\n scaffold [options] <name> Scaffold a new MCP server project (stdio or http+sse)\n registry Browse the curated catalog of community MCP servers\n server-maturities-v2 List MCP server maturity states (V2)\n invocation-lifecycle-v2 List MCP invocation lifecycle states (V2)\n stats-v2 Show MCP registry V2 stats\n config-v2 Show MCP registry V2 config\n register-server-v2 <id> <owner> <endpoint> Register an MCP server (V2)\n activate-server-v2 <id> Activate an MCP server (V2)\n degrade-server-v2 <id> Degrade an MCP server (V2)\n retire-server-v2 <id> Retire an MCP server (V2)\n touch-server-v2 <id> Touch an MCP server (V2)\n get-server-v2 <id> Get an MCP server (V2)\n list-servers-v2 List MCP servers (V2)\n create-invocation-v2 <id> <serverId> <tool> Create an MCP invocation (V2)\n dispatch-invocation-v2 <id> Dispatch an MCP invocation (V2)\n complete-invocation-v2 <id> Complete an MCP invocation (V2)\n fail-invocation-v2 <id> [reason] Fail an MCP invocation (V2)\n cancel-invocation-v2 <id> [reason] Cancel an MCP invocation (V2)\n get-invocation-v2 <id> Get an MCP invocation (V2)\n list-invocations-v2 List MCP invocations (V2)\n auto-degrade-idle-servers-v2 Auto-degrade idle MCP servers (V2)\n auto-fail-stuck-invocations-v2 Auto-fail stuck MCP invocations (V2)\n set-max-active-servers-v2 <n> Set max active servers per owner (V2)\n set-max-pending-invocations-v2 <n> Set max pending invocations per server (V2)\n set-server-idle-ms-v2 <n> Set MCP server idle timeout in ms (V2)\n set-invocation-stuck-ms-v2 <n> Set MCP invocation stuck timeout in ms (V2)\n reset-state-v2 Reset MCP registry V2 in-memory state\n help [command] display help for command\n",
92
92
  "mcpscaf": "Usage: chainlesschain mcpscaf [options] [command]\n\nMCP Scaffold V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n enums-v2\n config-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n register-profile-v2 [options] <id> <owner>\n activate-profile-v2 <id>\n stale-profile-v2 <id>\n archive-profile-v2 <id>\n touch-profile-v2 <id>\n get-profile-v2 <id>\n list-profiles-v2\n create-generation-v2 [options] <id> <profileId>\n generating-generation-v2 <id>\n generate-generation-v2 <id>\n fail-generation-v2 <id> [reason]\n cancel-generation-v2 <id> [reason]\n get-generation-v2 <id>\n list-generations-v2\n auto-stale-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n reset-state-v2\n help [command] display help for command\n",
93
93
  "meminj": "Usage: chainlesschain meminj [options] [command]\n\nMemory Injection V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n enums-v2\n config-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n register-rule-v2 [options] <id> <owner>\n activate-rule-v2 <id>\n pause-rule-v2 <id>\n archive-rule-v2 <id>\n touch-rule-v2 <id>\n get-rule-v2 <id>\n list-rules-v2\n create-injection-v2 [options] <id> <ruleId>\n injecting-injection-v2 <id>\n apply-injection-v2 <id>\n fail-injection-v2 <id> [reason]\n cancel-injection-v2 <id> [reason]\n get-injection-v2 <id>\n list-injections-v2\n auto-pause-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n reset-state-v2\n help [command] display help for command\n",
94
94
  "memory": "Usage: chainlesschain memory [options] [command]\n\nPersistent memory and daily notes\n\nOptions:\n -h, --help display help for command\n\nCommands:\n files [options] List the project-memory files cc agent\n auto-loads here (cc.md hierarchy + imports\n + path-scoped rules)\n show [options] Show memory entries\n export [options] Export all memory entries as JSON (module\n 101 §8.3 backup)\n import [options] Import memory entries from a JSON array\n file (idempotent upsert by id; §8.3)\n add [options] <text> Add a memory entry\n search [options] <query> Search memory entries\n delete <id> Delete a memory entry\n daily [options] [date] View or append to daily notes\n recall [options] [query] Recall scoped memory (session-core\n MemoryStore)\n store [options] <content> Write a scoped memory (session-core\n MemoryStore)\n consolidate [options] Consolidate a session's trace into scoped\n memory\n file [options] View or edit the long-term MEMORY.md file\n entry-maturities-v2 List V2 entry maturity states\n consolidation-lifecycles-v2 List V2 consolidation job lifecycle states\n stats-v2 Show V2 governance stats\n get-max-active-entries-v2 Get max active entries per category\n set-max-active-entries-v2 <n> Set max active entries per category\n get-max-running-jobs-v2 Get max running jobs per source\n set-max-running-jobs-v2 <n> Set max running jobs per source\n get-entry-idle-ms-v2 Get entry idle threshold (ms)\n set-entry-idle-ms-v2 <n> Set entry idle threshold (ms)\n get-job-stuck-ms-v2 Get job stuck threshold (ms)\n set-job-stuck-ms-v2 <n> Set job stuck threshold (ms)\n active-entry-count-v2 <category> Count active entries for a category\n running-job-count-v2 <source> Count running jobs for a source\n register-entry-v2 [options] <id> Register a V2 entry\n get-entry-v2 <id> Get a V2 entry\n list-entries-v2 [options] List V2 entries\n activate-entry-v2 <id> pending|parked → active\n park-entry-v2 <id> active → parked\n archive-entry-v2 <id> → archived (terminal)\n touch-entry-v2 <id> Update lastSeenAt\n create-job-v2 [options] <id> Create a V2 consolidation job\n get-job-v2 <id> Get a V2 consolidation job\n list-jobs-v2 [options] List V2 consolidation jobs\n start-job-v2 <id> queued → running\n succeed-job-v2 <id> running → succeeded (terminal)\n fail-job-v2 <id> running → failed (terminal)\n cancel-job-v2 <id> queued|running → cancelled (terminal)\n auto-park-idle-entries-v2 Flip idle active entries → parked\n auto-fail-stuck-jobs-v2 Flip stuck running jobs → failed\n help [command] display help for command\n",
@@ -44,8 +44,14 @@ import {
44
44
  MCP_STDIO_LOCAL_CODE_TRUST_REQUIRED_CODE,
45
45
  issueMcpStdioExecutionAuthority,
46
46
  materializeApprovedMcpStdioInvocation,
47
+ resolveMcpStdioExecutionApproval,
47
48
  } from "../lib/mcp-stdio-execution-authority.js";
48
49
  import { prepareMcpStdioExecutableIdentity } from "../lib/mcp-stdio-executable-identity.js";
50
+ import {
51
+ materializeMcpStdioNpmPackage,
52
+ parseExactNpmPackageSpec,
53
+ } from "../lib/mcp-stdio-package-materialization.js";
54
+ import { executionBroker } from "../lib/process-execution-broker/index.js";
49
55
  import {
50
56
  CATALOG as REGISTRY_CATALOG,
51
57
  CATEGORIES as REGISTRY_CATEGORIES,
@@ -807,6 +813,119 @@ export function registerMcpCommand(program) {
807
813
  }
808
814
  });
809
815
 
816
+ mcp
817
+ .command("materialize-package <name>")
818
+ .description(
819
+ "Replace one exact JavaScript package launcher with a content-addressed, guarded dependency capsule",
820
+ )
821
+ .requiredOption(
822
+ "--package <name@version>",
823
+ "Exact npm registry package version to install (ranges and tags are rejected)",
824
+ )
825
+ .option(
826
+ "--bin <name>",
827
+ "Select one exported bin when the package has several",
828
+ )
829
+ .option(
830
+ "--scope <scope>",
831
+ `Configuration scope: ${MCP_CONFIG_SCOPES.join(" | ")}`,
832
+ )
833
+ .option(
834
+ "--json",
835
+ "Output the materialized generation and closure identity as JSON",
836
+ )
837
+ .action(async (name, options) => {
838
+ try {
839
+ const exact = parseExactNpmPackageSpec(options.package);
840
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
841
+ if (!ctx.db) throw new Error("Database not available");
842
+ const configStore = new MCPServerConfig(ctx.db.getDatabase());
843
+ const scope = options.scope
844
+ ? normalizeMcpConfigScope(options.scope)
845
+ : undefined;
846
+ const rows = await effectiveMcpRows(configStore, { scope });
847
+ const row = rows.find((entry) => entry.name === name);
848
+ if (!row) {
849
+ throw new Error(
850
+ `${notFoundWithSuggestion(
851
+ name,
852
+ rows.map((entry) => entry.name),
853
+ { noun: "Server" },
854
+ )}. Use 'mcp add' first.`,
855
+ );
856
+ }
857
+ if (inferTransport(row) !== "stdio") {
858
+ throw new Error(
859
+ `MCP server "${name}" does not use the stdio transport`,
860
+ );
861
+ }
862
+
863
+ const authorized = authorizeMcpRowForConnect(row);
864
+ const approval = consumeMcpStdioExecutionAuthority(
865
+ authorized.mcpStdioExecutionAuthority,
866
+ { serverName: name, config: authorized },
867
+ );
868
+ const invocation = materializeApprovedMcpStdioInvocation(approval);
869
+ const approvalRecord = resolveMcpStdioExecutionApproval(approval);
870
+ const materialized = materializeMcpStdioNpmPackage({
871
+ approvalRecord,
872
+ config: invocation,
873
+ packageSpec: exact.spec,
874
+ ...(options.bin ? { binName: options.bin } : {}),
875
+ env: process.env,
876
+ processBrokerRunSync: (command, args, spawnOptions) =>
877
+ executionBroker.spawnSync(command, args, {
878
+ ...spawnOptions,
879
+ origin: `mcp:package-materialization:${name}`,
880
+ policy: "allow",
881
+ scope: "mcp",
882
+ shell: false,
883
+ }),
884
+ });
885
+ const prepared = prepareMcpStdioExecutableIdentity({
886
+ serverName: name,
887
+ config: invocation,
888
+ approval,
889
+ cwd: process.cwd(),
890
+ env: process.env,
891
+ retrust: true,
892
+ });
893
+ const result = {
894
+ name,
895
+ package: exact.spec,
896
+ generation: materialized.generation,
897
+ manifestDigest: materialized.manifestDigest,
898
+ identityDigest: prepared.identityDigest,
899
+ closure: materialized.identity,
900
+ command: prepared.identity.command,
901
+ entrypoints: prepared.identity.entrypoints,
902
+ };
903
+ if (options.json) {
904
+ console.log(JSON.stringify(result, null, 2));
905
+ } else {
906
+ logger.log(
907
+ chalk.green(
908
+ `Materialized and trusted ${exact.spec} for MCP server "${name}".`,
909
+ ),
910
+ );
911
+ logger.log(
912
+ ` ${chalk.gray("Generation:")} ${materialized.generation}`,
913
+ );
914
+ logger.log(
915
+ ` ${chalk.gray("Dependency closure:")} sha256:${materialized.identity.closureDigest} (${materialized.identity.fileCount} files, ${materialized.identity.totalBytes} bytes)`,
916
+ );
917
+ logger.log(
918
+ ` ${chalk.gray("Execution capsule:")} sha256:${materialized.identity.capsule.sha256} (${materialized.identity.capsule.bytes} bytes, ${materialized.identity.capsule.inputCount} bundled inputs)`,
919
+ );
920
+ }
921
+ await shutdown();
922
+ } catch (err) {
923
+ logger.error(`Failed: ${err.message}`);
924
+ process.exitCode = 1;
925
+ await shutdown();
926
+ }
927
+ });
928
+
810
929
  mcp
811
930
  .command("trust-executable <name>")
812
931
  .description(
@@ -1,13 +1,11 @@
1
1
  import chalk from "chalk";
2
2
  import { numericOption } from "../lib/cli-numeric.js";
3
- import { feature } from "../lib/feature-flags.js";
4
3
  import { logger } from "../lib/logger.js";
5
4
  import { getPrLinks } from "../lib/pr-link-store.js";
6
5
  import {
7
6
  getJsonlSessionMetadata,
8
7
  rebuildMessages,
9
- resolveSessionId,
10
- sessionHasPersistedEvidence,
8
+ resolveSessionAuthority,
11
9
  } from "../harness/jsonl-session-store.js";
12
10
 
13
11
  export function registerSessionShowSubcommand(session, program) {
@@ -23,14 +21,14 @@ export function registerSessionShowSubcommand(session, program) {
23
21
  try {
24
22
  let sess = null;
25
23
 
26
- const jsonlId = feature("JSONL_SESSION") ? resolveSessionId(id) : null;
27
- if (
28
- !jsonlId &&
29
- feature("JSONL_SESSION") &&
30
- sessionHasPersistedEvidence(id)
31
- ) {
24
+ // The feature flag controls creation/migration, not authority. Once a
25
+ // canonical namespace witness exists it must fence the legacy DB even
26
+ // if JSONL_SESSION is later disabled.
27
+ const authority = resolveSessionAuthority(id);
28
+ const jsonlId = authority?.readable ? authority.id : null;
29
+ if (authority && !authority.readable) {
32
30
  logger.error(
33
- `Session ${id} has canonical persistence evidence but no readable transcript.`,
31
+ `Session ${authority.id} has canonical persistence evidence but no readable transcript (${authority.presence}).`,
34
32
  );
35
33
  process.exitCode = 1;
36
34
  return;
@@ -47,18 +47,17 @@ import {
47
47
  getSessionManagerStatsV2,
48
48
  } from "../lib/session-manager.js";
49
49
  import {
50
- listJsonlSessions,
50
+ listSessionAuthoritySummaries,
51
+ listSessionEvidenceIds,
51
52
  rebuildMessages,
52
53
  getJsonlSessionMetadata,
53
- resolveSessionId,
54
- sessionHasPersistedEvidence,
54
+ resolveSessionAuthority,
55
55
  deleteJsonlSession,
56
56
  migrateLegacySessions,
57
57
  migrateLegacySessionsBatch,
58
58
  validateJsonlSession,
59
59
  validateAllJsonlSessions,
60
60
  } from "../harness/jsonl-session-store.js";
61
- import { feature } from "../lib/feature-flags.js";
62
61
  import {
63
62
  listWorkflowSessions,
64
63
  readWorkflowSession,
@@ -234,26 +233,24 @@ export function registerSessionCommand(program) {
234
233
  const ctx = await bootstrap({ verbose: program.opts().verbose });
235
234
  const limit = Math.max(1, parseInt(options.limit) || 20);
236
235
  let sessions = [];
236
+ const canonicalIds = new Set(listSessionEvidenceIds());
237
237
 
238
238
  // Merge DB sessions + JSONL sessions
239
239
  if (ctx.db) {
240
240
  const db = ctx.db.getDatabase();
241
241
  sessions.push(
242
- ...listSessions(db, { limit }).map((s) => ({
243
- ...s,
244
- _store: "db",
245
- })),
242
+ ...listSessions(db, { limit })
243
+ .filter((s) => !canonicalIds.has(s?.id))
244
+ .map((s) => ({
245
+ ...s,
246
+ _store: "db",
247
+ })),
246
248
  );
247
249
  }
248
250
 
249
- if (feature("JSONL_SESSION")) {
250
- sessions.push(
251
- ...listJsonlSessions({ limit }).map((s) => ({
252
- ...s,
253
- _store: "jsonl",
254
- })),
255
- );
256
- }
251
+ // Existing canonical sessions remain authoritative even if the
252
+ // creation/migration feature flag is later disabled.
253
+ sessions.push(...listSessionAuthoritySummaries({ limit }));
257
254
 
258
255
  // Deduplicate by id (JSONL takes precedence) and rank by real time.
259
256
  sessions = rankSessions(sessions, limit);
@@ -324,11 +321,14 @@ export function registerSessionCommand(program) {
324
321
  try {
325
322
  ctx = await bootstrap({ verbose: program.opts().verbose });
326
323
  if (ctx.db) {
324
+ const canonicalIds = new Set(listSessionEvidenceIds());
327
325
  local.push(
328
- ...listSessions(ctx.db.getDatabase(), { limit }).map((item) => ({
329
- ...item,
330
- _store: "db",
331
- })),
326
+ ...listSessions(ctx.db.getDatabase(), { limit })
327
+ .filter((item) => !canonicalIds.has(item?.id))
328
+ .map((item) => ({
329
+ ...item,
330
+ _store: "db",
331
+ })),
332
332
  );
333
333
  }
334
334
  } catch (error) {
@@ -338,12 +338,7 @@ export function registerSessionCommand(program) {
338
338
  // JSONL is the canonical transcript store and can be read without
339
339
  // bootstrapping legacy native DB/config packages (some of which
340
340
  // write banners directly to stdout and would corrupt --json).
341
- local.push(
342
- ...listJsonlSessions({ limit }).map((item) => ({
343
- ...item,
344
- _store: "jsonl",
345
- })),
346
- );
341
+ local.push(...listSessionAuthoritySummaries({ limit }));
347
342
  local = rankSessions(local, limit);
348
343
  } catch (error) {
349
344
  sourceErrors.local = error?.message || String(error);
@@ -613,15 +608,14 @@ export function registerSessionCommand(program) {
613
608
  id = picked.id;
614
609
  }
615
610
 
616
- // Try JSONL first
617
- const jsonlId = feature("JSONL_SESSION") ? resolveSessionId(id) : null;
618
- if (
619
- !jsonlId &&
620
- feature("JSONL_SESSION") &&
621
- sessionHasPersistedEvidence(id)
622
- ) {
611
+ // Try the complete canonical namespace first. The feature flag cannot
612
+ // make an existing/damaged canonical generation disappear and thereby
613
+ // authorize a legacy fallback.
614
+ const authority = resolveSessionAuthority(id);
615
+ const jsonlId = authority?.readable ? authority.id : null;
616
+ if (authority && !authority.readable) {
623
617
  logger.error(
624
- `Session ${id} has canonical persistence evidence but no readable transcript.`,
618
+ `Session ${authority.id} has canonical persistence evidence but no readable transcript (${authority.presence}).`,
625
619
  );
626
620
  logger.error(
627
621
  "Refusing legacy fallback. Inspect or explicitly delete the damaged JSONL session before reusing its id.",
@@ -735,11 +729,14 @@ export function registerSessionCommand(program) {
735
729
  // Canonical content source: append-only JSONL event log. The legacy DB
736
730
  // is consulted only when no matching transcript exists.
737
731
  const store = await import("../harness/jsonl-session-store.js");
738
- const sid =
739
- id === "last" ? store.getLastSessionId() : store.resolveSessionId(id);
740
- if (!sid && id !== "last" && store.sessionHasPersistedEvidence(id)) {
732
+ const requestedId = id === "last" ? store.getLastSessionId() : id;
733
+ const authority = requestedId
734
+ ? store.resolveSessionAuthority(requestedId)
735
+ : null;
736
+ const sid = authority?.readable ? authority.id : null;
737
+ if (authority && !authority.readable) {
741
738
  throw new Error(
742
- `Session ${id} has canonical persistence evidence but no readable transcript`,
739
+ `Session ${authority.id} has canonical persistence evidence but no readable transcript (${authority.presence})`,
743
740
  );
744
741
  }
745
742
  if (sid) {
@@ -820,7 +817,10 @@ export function registerSessionCommand(program) {
820
817
  try {
821
818
  const sessionIndex = await import("../harness/session-index.js");
822
819
  indexDb = sessionIndex.openIndex();
823
- sessionIndex.syncIndex(indexDb);
820
+ const sync = sessionIndex.syncIndex(indexDb);
821
+ if (sync.rejected > 0) {
822
+ indexDiagnostic = `${sync.rejected} canonical session(s) were excluded because verification failed`;
823
+ }
824
824
  matches = sessionIndex
825
825
  .searchSessions(indexDb, query, { limit })
826
826
  .map((hit) => ({
@@ -841,7 +841,7 @@ export function registerSessionCommand(program) {
841
841
  });
842
842
  for (const s of sessions) {
843
843
  if (matches.length >= limit) break;
844
- for (const ev of store.readEvents(s.id)) {
844
+ for (const ev of store.readVerifiedEvents(s.id)) {
845
845
  if (matches.length >= limit) break;
846
846
  if (
847
847
  ev.type !== "user_message" &&
@@ -921,8 +921,8 @@ export function registerSessionCommand(program) {
921
921
  .action(async (id, options) => {
922
922
  let ctx = null;
923
923
  try {
924
- const jsonlId =
925
- resolveSessionId(id) || (sessionHasPersistedEvidence(id) ? id : null);
924
+ const authority = resolveSessionAuthority(id);
925
+ const jsonlId = authority?.id || null;
926
926
  let db = null;
927
927
  try {
928
928
  ctx = await bootstrap({ verbose: program.opts().verbose });
@@ -985,10 +985,11 @@ export function registerSessionCommand(program) {
985
985
  Array.isArray(title) ? title.join(" ") : title,
986
986
  ).trim();
987
987
  if (!normalized) throw new Error("A non-empty title is required");
988
- const jsonlId = resolveSessionId(id);
989
- if (!jsonlId && sessionHasPersistedEvidence(id)) {
988
+ const authority = resolveSessionAuthority(id);
989
+ const jsonlId = authority?.readable ? authority.id : null;
990
+ if (authority && !authority.readable) {
990
991
  throw new Error(
991
- `Session ${id} has canonical persistence evidence but no readable transcript`,
992
+ `Session ${authority.id} has canonical persistence evidence but no readable transcript (${authority.presence})`,
992
993
  );
993
994
  }
994
995
  let result;
@@ -2175,14 +2176,17 @@ async function mirrorSessions(ids) {
2175
2176
 
2176
2177
  const pushed = [];
2177
2178
  const errors = [];
2178
- const { readFileSync, existsSync } = await import("node:fs");
2179
2179
  for (const id of ids) {
2180
2180
  try {
2181
- if (store.isUnsafeSessionId(id)) throw new Error("unsafe session id");
2182
- const file = store.sessionPath(id);
2183
- if (!existsSync(file)) throw new Error("session not found");
2184
- const bytes = readFileSync(file, "utf-8");
2185
- pushed.push(await mirror.push(id, bytes));
2181
+ const authority = store.resolveSessionAuthority(id);
2182
+ if (!authority) throw new Error("session not found");
2183
+ if (!authority.readable) {
2184
+ throw new Error(
2185
+ `canonical session is not readable (${authority.presence})`,
2186
+ );
2187
+ }
2188
+ const bytes = store.readVerifiedTranscriptBytes(authority.id);
2189
+ pushed.push(await mirror.push(authority.id, bytes));
2186
2190
  } catch (err) {
2187
2191
  errors.push({ id, error: err.message });
2188
2192
  }
@@ -2232,7 +2236,11 @@ async function mirrorPruneSessions() {
2232
2236
  const { pruneMirror } = await import("../harness/session-mirror.js");
2233
2237
  const { mirror } = await loadConfiguredMirror();
2234
2238
  if (!mirror) return { target: null, deleted: [], kept: [] };
2235
- const keep = store.listSessionIds();
2239
+ // A damaged local generation must not cause automatic deletion of its last
2240
+ // off-box recovery copy. Only an explicit canonical tombstone is prunable.
2241
+ const keep = store
2242
+ .listSessionEvidenceIds()
2243
+ .filter((id) => store.getSessionPresence(id) !== "tombstoned");
2236
2244
  const res = await pruneMirror(mirror, { keep });
2237
2245
  return { target: mirror.target, ...res };
2238
2246
  }