chainlesschain 0.166.47 → 0.166.48

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 (166) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/assets/{AIOps-CDpT0WXV.js → AIOps-BLGEffkh.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-BNfUljWx.js → ActionButton-Cz1z2VGD.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-C9323DEx.js → Analytics-C3j9cf6q.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-CRrjb2db.js → AppLayout-BR9ERuCA.js} +3 -3
  6. package/src/assets/web-panel/assets/{Artifacts-Db-DGqJS.js → Artifacts-CozJCm4y.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-CJdHRJ0W.js → Audit-DC5g9Ra2.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-_RSCnTYs.js → BackgroundAgents-B1zrQ0dW.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-8GFQi-dM.js → Backup-ChVnfjpm.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-C87NtgUZ.js → BaseInput-8_vLQsLf.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-DcTMWS8G.js → Chat-Dct9bm6L.js} +5 -5
  12. package/src/assets/web-panel/assets/{ChatBubbleRenderer-5ZDPTW_H.js → ChatBubbleRenderer-BvoSsCKh.js} +1 -1
  13. package/src/assets/web-panel/assets/{Checkbox-DM9EmYee.js → Checkbox-DZQIsCIC.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-M2YqDRNN.js → Codegen-CdzHxmnq.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-oB1LLxyf.js → Col-DdAN8LeW.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-TcVZK5tF.js → Community-CNgjT9MA.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-XKmq-3K_.js → Compact-BtQiX6G-.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-C6CBiDRy.js → Compliance-OGX5ma3j.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-Dz9CGqXH.js → Cowork-CgugQnGM.js} +4 -4
  20. package/src/assets/web-panel/assets/{Cron-CxJDgDVL.js → Cron-Bpg7cPFD.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-DMP0JsaQ.js → Crosschain-D1hsuswf.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-I5IQeogb.js → DID-miDRsMBw.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-BfLW2MXj.js → Dashboard-CGcl8htP.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-BK8EjAlh.js → Dropdown-BFaxTdVE.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-C3iqSv5I.js → EmailListRenderer-BQdGLZIO.js} +1 -1
  26. package/src/assets/web-panel/assets/EvolutionSettings-bMvgBk6r.js +1 -0
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-T19rnqm-.js → FamilyGuardDashboard-c1WVC_--.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-CozrbPMy.js → Federation-DyAcFrQY.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-k1dCLNNJ.js → FormItemContext-CfwpfD2B.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-DbaW_Jvt.js → GenericCardRenderer-DkJcbBpS.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-CQHRyEIt.js → Git-DgYIrPJh.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-BMJYZgMy.js → Governance-BF1tYPJ6.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-B7mpNU7V.js → Inference-BFkwRIrU.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-Br0Blg6B.js → KnowledgeGraph-DpCoqhBa.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-HIdk0S6M.js → Logs-DU2qAJmD.js} +2 -2
  36. package/src/assets/web-panel/assets/{MarkdownRenderer-HxeocBHy.js → MarkdownRenderer-QWv7UJLq.js} +1 -1
  37. package/src/assets/web-panel/assets/{Marketplace-Bkfq69UP.js → Marketplace-Dz9NUrfo.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-dtmx0bHO.js → McpTools-B67I3d5v.js} +3 -3
  39. package/src/assets/web-panel/assets/{Memory-CrRlOuEf.js → Memory-crkElJSy.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-D4ZIZiAH.js → MobileBridge-BO20VbdX.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-C90Rw7GE.js → MobileProjects-Ba-3gZZd.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-CC6k_uh4.js → Mtc-BAHZM084.js} +4 -4
  43. package/src/assets/web-panel/assets/{MtcAudit-T_CUIYUy.js → MtcAudit-CL3DzajL.js} +2 -2
  44. package/src/assets/web-panel/assets/{Multisig-N_e0RRWk.js → Multisig-BSWWzvWH.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-Iq3VzEv0.js → NLProgramming-fnxqXM_3.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-B5sKJUJt.js → Notes-qUZPIQXT.js} +4 -4
  47. package/src/assets/web-panel/assets/{NotificationSettings-K8UVp8qQ.js → NotificationSettings-x9Xrixqu.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-BWNyM-6m.js → OrderTableRenderer-BtMtQUt7.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-DMO1NJxI.js → Organization-C946Hzna.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-BBY6b31Z.js → Overflow-BYf8KIts.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-DmsL0y0v.js → P2P-Cbqf5dnv.js} +2 -2
  52. package/src/assets/web-panel/assets/PdhVaultBrowser-rmxp0cuF.js +7 -0
  53. package/src/assets/web-panel/assets/{Permissions-CWcpRtWa.js → Permissions-CZBw45EW.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub--ZNDIdsn.js → PersonalDataHub-BKwUAt43.js} +4 -4
  55. package/src/assets/web-panel/assets/{Pipeline-DCdj5NGb.js → Pipeline-DmFD2QW4.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-BRKu7Q3E.js → Privacy-KpuwWvt5.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-BJ7ozIAb.js → ProjectInit-Bt8UheX6.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-B2cVLiXW.js → ProjectSettings-2ZeAn9CP.js} +2 -2
  59. package/src/assets/web-panel/assets/{Projects-Ce9r_W-p.js → Projects-zBuet8Zs.js} +1 -1
  60. package/src/assets/web-panel/assets/{Providers-BDespvGZ.js → Providers-DcEAnw6L.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-BUNO4fDU.js → QrScannerModal-qF7liYG9.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-D2TUqeBV.js → QuickAsk-qiESlVBJ.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-BNNQPHBH.js → Recommend-Bk-cQyi9.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-D2t1V_Cm.js → RemoteSession-CwrekErS.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-DVK5hEqI.js → Reputation-Bmw_UQtW.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-BB9RTwmE.js → Row-CPdqZIUX.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-DmEO7liZ.js → RssFeed-D_W-xxvS.js} +2 -2
  68. package/src/assets/web-panel/assets/{Search-UwEYjnDB.js → Search-Hu0oDFj_.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-DebqSsMp.js → Security-DeRxUwmq.js} +4 -4
  70. package/src/assets/web-panel/assets/{Services-CuuPts3C.js → Services-CsNmHFkf.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-DbWpmbgf.js → Skeleton-gv_Vz0tN.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-BaK7SxzT.js → Skills-Dgg-_rCB.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-BFHv51Jb.js → Sla-Bpu-bsEJ.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-B9b1R6uK.js → SpeechSettings-CrhleHuF.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-BnO0CN02.js → SyncSettings-JHjUN6I9.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-Dy01Vq49.js → Tasks-DKRWKkl9.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-BCy2AMHc.js → Templates-leiWntLq.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-4Tx9y_Y1.js → Tenant--1bYulvn.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-CPOoUH8J.js → Terminal-C0y6FvSS.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-C85GlJzu.js → TimelineRenderer-CQK4PVv4.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-_xneFBGF.js → Tokens-DbIvF-DV.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-BizG4rTr.js → Trigger-CkXJ2vuq.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-Dh8EIn3n.js → Trust-B02WXJPw.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-C5NWoHWQ.js → UkeySign-VPMkfzmw.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-0YfrySL6.js → VideoEditing-C5ezUnah.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-BZVH8Ags.js → Wallet-CYfvYRrY.js} +4 -4
  87. package/src/assets/web-panel/assets/{WebAuthn-kNofa6vm.js → WebAuthn-DtKl-kpr.js} +4 -4
  88. package/src/assets/web-panel/assets/{WorkflowEditor-BNO34_j0.js → WorkflowEditor-DACITF-u.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-ifQ2FlwD.js → chat-qnygfnLi.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-1TL8H6EH.js → colors-D4mISLBD.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-DBfRjs_T.js → compact-item-BBPfxYGL.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-Bs6V4iBf.js → createContext-Byx4ndHp.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-DBy6gsuI.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-Bz6LMY_0.js → hasIn-CGjLkkn3.js} +1 -1
  95. package/src/assets/web-panel/assets/{index--WvT2Il3.js → index-B8UpadHC.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DMVktlxG.js → index-B9jH-h4X.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BiZ7Nz5-.js → index-BN7_TSgU.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CtB45Hok.js → index-BNe2lCk6.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CNKHoXWI.js → index-B_fHPZ8E.js} +1 -1
  100. package/src/assets/web-panel/assets/index-BfEDXk_E.js +1 -0
  101. package/src/assets/web-panel/assets/{index-B5SJCUZ7.js → index-BklGH3YI.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-pOUFfRdN.js → index-BmKYaaGP.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BB1Af7Fv.js → index-BxQF1wCU.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-EK3XtMxA.js → index-ByA1NyFP.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-cNwsev6n.js → index-BzeBBAl5.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-Cykt9BbN.js → index-C3abGsSW.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-f_7L9GvP.js → index-C9tcHs46.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BxqC3LiO.js → index-CD5Btq6p.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-DOww5Qny.js → index-CFMWjuav.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-rGhS02f8.js → index-CMj8qmpX.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BQL_tldd.js → index-CVUJjQAT.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-C7d6QlfR.js → index-CWhI8G14.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CXtiLagi.js → index-CZjNamSU.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-C6c0j-Ki.js → index-CmHE-lY_.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DWPp-d07.js → index-CoA8WsVr.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DEPPzM8I.js → index-Cpg3AWRy.js} +1 -1
  117. package/src/assets/web-panel/assets/index-CrxUwNM8.js +1 -0
  118. package/src/assets/web-panel/assets/{index-DDhy4eCS.js → index-CsVuQsY1.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-vb1XIxEB.js → index-CydHMjwc.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CBh48_Mh.js → index-DH6iC5b2.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-84mi5rsv.js → index-DZXhKAk9.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BoCTDcn6.js → index-D_g9mA1N.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-B6RClMZl.js → index-DboTeuPF.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-XJIV7HEw.js → index-DfgpKd64.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-C9QYxq61.js → index-Dmfe0L2Z.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-lUL3bD2z.js → index-Dzni_5Qw.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BXJXMaZe.js → index-J5JkStvY.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CXVBQ82k.js → index-Ne8UGllV.js} +3 -3
  129. package/src/assets/web-panel/assets/{index-BhPDhmvN.js → index-O09jXbir.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DvM2xBUA.js → index-Y7el_3WS.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Cu_V6ZJH.js → index-c_tBkIlU.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-vHtnQsnV.js → index-lKJWAmd4.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-Cn7EIWmI.js → index-xzRKTy0R.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-DpRIjwTt.js → initDefaultProps-XuhfEIhB.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-CG4_9o-Z.js → motion-Cbxh6AxO.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-Dku1fXtf.js → move-C7IEnFly.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-BvAVeX-3.js → mtc-parser-lLADx4LL.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-DFu0x78D.js → omit-mIbic_k-.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-CmI-FNcK.js → pickAttrs-_xIYEqu3.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-CGERYewB.js → placementArrow-ClB-E0ny.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-D7G8bF5J.js → responsiveObserve-D36Bg2ut.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-B2sXwWXy.js → slide-CUuO08Bl.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-DI5yh0n3.js → statusUtils-BKahwLbv.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-deGJ5dp_.js → styleChecker-2pT-T8vy.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-OqHBXEmi.js → useFlexGapSupport-DyH5g7Rg.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-Dqgx0Qv_.js → useFs-CTOauB3X.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-Be-lveh2.js → usePersonalDataHub-B02JYIMe.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-CFxB876W.js → vnode-Do22wQrc.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-BFOYrl4e.js → zoom-BfnL7rit.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/commands/plugin.js +36 -5
  152. package/src/data/changelog.json +13 -0
  153. package/src/generated/cc-agent-protocol.schema.json +44 -1
  154. package/src/lib/background-agent-list-index.js +222 -0
  155. package/src/lib/background-agent-supervisor.js +38 -0
  156. package/src/lib/codex-app-server-adapter.js +1 -0
  157. package/src/lib/context-memory-kernel/provider-context.js +69 -4
  158. package/src/lib/deferred-question-context.js +160 -4
  159. package/src/lib/eval/plugin-suite.js +286 -22
  160. package/src/lib/session-host-snapshot.js +16 -0
  161. package/src/runtime/headless-stream.js +162 -13
  162. package/src/assets/web-panel/assets/EvolutionSettings-BJmBzpW6.js +0 -1
  163. package/src/assets/web-panel/assets/PdhVaultBrowser-C65AX_RY.js +0 -7
  164. package/src/assets/web-panel/assets/devWarning-BHnbnuYL.js +0 -1
  165. package/src/assets/web-panel/assets/index-CsRz9-ZH.js +0 -1
  166. package/src/assets/web-panel/assets/index-DnjMFf3m.js +0 -1
@@ -32,7 +32,12 @@ import {
32
32
  normalizeInteractionBinding,
33
33
  sameInteractionBinding,
34
34
  } from "../lib/interaction-binding.js";
35
- import { DeferredQuestionContext } from "../lib/deferred-question-context.js";
35
+ import {
36
+ DEFERRED_QUESTION_EVENTS,
37
+ DeferredQuestionContext,
38
+ normalizeDeferredQuestionAnswer,
39
+ normalizeDeferredQuestionRequest,
40
+ } from "../lib/deferred-question-context.js";
36
41
  import { composePrepareCall } from "../lib/goal-context.js";
37
42
  import {
38
43
  addHooksV2EventObserver,
@@ -1684,6 +1689,9 @@ async function runAgentHeadlessStreamInWorkspace(
1684
1689
  let canonicalResume = null;
1685
1690
  let canonicalResumeMessages = null;
1686
1691
  let canonicalMcpCallRecovery = null;
1692
+ let canonicalDeferredQuestions = [];
1693
+ let canonicalDeferredAnswers = [];
1694
+ let canonicalDeferredQuestionSequence = 0;
1687
1695
  if (persist) {
1688
1696
  const readResumeState =
1689
1697
  deps.readSessionHostResumeState || readSessionHostResumeState;
@@ -1786,6 +1794,21 @@ async function runAgentHeadlessStreamInWorkspace(
1786
1794
  );
1787
1795
  }
1788
1796
  canonicalResumeMessages = [...canonicalResume.messages];
1797
+ canonicalDeferredQuestions = Array.isArray(
1798
+ canonicalResume.deferredQuestions,
1799
+ )
1800
+ ? [...canonicalResume.deferredQuestions]
1801
+ : [];
1802
+ canonicalDeferredAnswers = Array.isArray(
1803
+ canonicalResume.deferredAnswers,
1804
+ )
1805
+ ? [...canonicalResume.deferredAnswers]
1806
+ : [];
1807
+ canonicalDeferredQuestionSequence = Number.isSafeInteger(
1808
+ canonicalResume.deferredQuestionSequence,
1809
+ )
1810
+ ? canonicalResume.deferredQuestionSequence
1811
+ : 0;
1789
1812
  const notice = formatMcpLedgerRecoveryNotice(canonicalResume.recovery);
1790
1813
  if (notice) {
1791
1814
  canonicalMcpCallRecovery = {
@@ -2471,8 +2494,23 @@ async function runAgentHeadlessStreamInWorkspace(
2471
2494
  options.interactiveQuestions === true ||
2472
2495
  process.env.CC_INTERACTIVE_QUESTIONS === "1";
2473
2496
  const pendingQuestions = new Map();
2474
- const deferredQuestionContext = new DeferredQuestionContext({ sessionId });
2475
- let questionSeq = 0;
2497
+ const persistDeferredQuestionEvent = (type, data) => {
2498
+ if (!persist) return true;
2499
+ requireSynchronousRecoveryResult(
2500
+ store.appendAuthorityEvent(sessionId, type, data),
2501
+ type,
2502
+ );
2503
+ return true;
2504
+ };
2505
+ const deferredQuestionContext = new DeferredQuestionContext({
2506
+ sessionId,
2507
+ initialAnswers: canonicalDeferredAnswers,
2508
+ onConsumed: (questionIds) =>
2509
+ persistDeferredQuestionEvent(DEFERRED_QUESTION_EVENTS.CONSUMED, {
2510
+ questionIds,
2511
+ }),
2512
+ });
2513
+ let questionSeq = canonicalDeferredQuestionSequence;
2476
2514
  const questionTimeoutMs =
2477
2515
  Number(process.env.CC_QUESTION_TIMEOUT_MS) > 0
2478
2516
  ? Number(process.env.CC_QUESTION_TIMEOUT_MS)
@@ -2480,6 +2518,38 @@ async function runAgentHeadlessStreamInWorkspace(
2480
2518
  const settleQuestion = (id, answer, via) => {
2481
2519
  const p = pendingQuestions.get(id);
2482
2520
  if (!p) return;
2521
+ let durableAnswer = null;
2522
+ if (p.mode === "deferred") {
2523
+ durableAnswer = normalizeDeferredQuestionAnswer(
2524
+ {
2525
+ questionId: id,
2526
+ question: p.question,
2527
+ answer,
2528
+ options: p.options,
2529
+ multiSelect: p.multiSelect,
2530
+ purpose: p.purpose,
2531
+ binding: p.binding,
2532
+ requestedRevision: p.contextRevision,
2533
+ resolvedRevision: turns,
2534
+ },
2535
+ sessionId,
2536
+ );
2537
+ try {
2538
+ if (!durableAnswer) throw new Error("invalid deferred answer binding");
2539
+ persistDeferredQuestionEvent(
2540
+ DEFERRED_QUESTION_EVENTS.RESOLVED,
2541
+ durableAnswer,
2542
+ );
2543
+ } catch {
2544
+ emit({
2545
+ type: "question_response_rejected",
2546
+ id,
2547
+ reason: "persistence_failed",
2548
+ session_id: sessionId,
2549
+ });
2550
+ return;
2551
+ }
2552
+ }
2483
2553
  pendingQuestions.delete(id);
2484
2554
  clearTimeout(p.timer);
2485
2555
  emit({
@@ -2491,14 +2561,7 @@ async function runAgentHeadlessStreamInWorkspace(
2491
2561
  session_id: sessionId,
2492
2562
  });
2493
2563
  if (p.mode === "deferred") {
2494
- deferredQuestionContext.record({
2495
- questionId: id,
2496
- question: p.question,
2497
- answer,
2498
- binding: p.binding,
2499
- requestedRevision: p.contextRevision,
2500
- resolvedRevision: turns,
2501
- });
2564
+ deferredQuestionContext.record(durableAnswer);
2502
2565
  return;
2503
2566
  }
2504
2567
  p.resolve(answer);
@@ -2508,6 +2571,19 @@ async function runAgentHeadlessStreamInWorkspace(
2508
2571
  if (!p) return;
2509
2572
  pendingQuestions.delete(id);
2510
2573
  clearTimeout(p.timer);
2574
+ if (
2575
+ p.mode === "deferred" &&
2576
+ !["pipe-closed", "session-closed", "stdin-closed"].includes(via)
2577
+ ) {
2578
+ try {
2579
+ persistDeferredQuestionEvent(DEFERRED_QUESTION_EVENTS.EXPIRED, {
2580
+ questionId: id,
2581
+ });
2582
+ } catch {
2583
+ // The unresolved request remains in the durable transcript and can be
2584
+ // surfaced again after the persistence boundary recovers.
2585
+ }
2586
+ }
2511
2587
  emit({
2512
2588
  type: "question_resolved",
2513
2589
  id,
@@ -2566,6 +2642,50 @@ async function runAgentHeadlessStreamInWorkspace(
2566
2642
  }
2567
2643
  deferredQuestionContext.clear();
2568
2644
  });
2645
+ const restoredQuestionEvents = [];
2646
+ // An opted-out/legacy pipe must not receive a newly introduced interactive
2647
+ // event. Keep its durable request untouched so a capable reconnect can
2648
+ // surface it later; already-resolved answers can still be consumed as data.
2649
+ for (const value of interactiveQuestions ? canonicalDeferredQuestions : []) {
2650
+ const restored = normalizeDeferredQuestionRequest(value, sessionId);
2651
+ if (!restored) continue;
2652
+ questionSeq = Math.max(questionSeq, restored.binding.sequence);
2653
+ const timer = setTimeout(
2654
+ () => failQuestion(restored.questionId, "timeout"),
2655
+ questionTimeoutMs,
2656
+ );
2657
+ timer.unref?.();
2658
+ pendingQuestions.set(restored.questionId, {
2659
+ resolve: null,
2660
+ reject: null,
2661
+ timer,
2662
+ binding: restored.binding,
2663
+ mode: "deferred",
2664
+ purpose: restored.purpose,
2665
+ question: restored.question,
2666
+ options: restored.options,
2667
+ multiSelect: restored.multiSelect,
2668
+ contextRevision: restored.requestedRevision,
2669
+ });
2670
+ restoredQuestionEvents.push({
2671
+ type: "question_request",
2672
+ id: restored.questionId,
2673
+ session_id: sessionId,
2674
+ binding: restored.binding,
2675
+ ...(restored.binding.turnId ? { turn_id: restored.binding.turnId } : {}),
2676
+ ...(restored.binding.toolUseId
2677
+ ? { tool_use_id: restored.binding.toolUseId }
2678
+ : {}),
2679
+ mode: "deferred",
2680
+ blocking: false,
2681
+ purpose: restored.purpose,
2682
+ context_revision: restored.requestedRevision,
2683
+ question: restored.question,
2684
+ options: restored.options,
2685
+ multiSelect: restored.multiSelect,
2686
+ restored: true,
2687
+ });
2688
+ }
2569
2689
  const registerInteractiveQuestion = (
2570
2690
  {
2571
2691
  question,
@@ -2599,7 +2719,7 @@ async function runAgentHeadlessStreamInWorkspace(
2599
2719
  const ms = Number(timeoutMs) > 0 ? Number(timeoutMs) : questionTimeoutMs;
2600
2720
  const timer = setTimeout(() => failQuestion(id, "timeout"), ms);
2601
2721
  timer.unref?.();
2602
- pendingQuestions.set(id, {
2722
+ const pending = {
2603
2723
  resolve,
2604
2724
  reject,
2605
2725
  timer,
@@ -2607,8 +2727,36 @@ async function runAgentHeadlessStreamInWorkspace(
2607
2727
  mode,
2608
2728
  purpose,
2609
2729
  question: typeof question === "string" ? question : "",
2730
+ options: Array.isArray(qOptions) ? qOptions : null,
2731
+ multiSelect: multiSelect === true,
2610
2732
  contextRevision: turns,
2611
- });
2733
+ };
2734
+ if (mode === "deferred") {
2735
+ const durableRequest = normalizeDeferredQuestionRequest(
2736
+ {
2737
+ questionId: id,
2738
+ question: pending.question,
2739
+ options: pending.options,
2740
+ multiSelect: pending.multiSelect,
2741
+ purpose,
2742
+ binding,
2743
+ requestedRevision: turns,
2744
+ },
2745
+ sessionId,
2746
+ );
2747
+ try {
2748
+ if (!durableRequest)
2749
+ throw new Error("invalid deferred question binding");
2750
+ persistDeferredQuestionEvent(
2751
+ DEFERRED_QUESTION_EVENTS.REQUESTED,
2752
+ durableRequest,
2753
+ );
2754
+ } catch (error) {
2755
+ clearTimeout(timer);
2756
+ throw error;
2757
+ }
2758
+ }
2759
+ pendingQuestions.set(id, pending);
2612
2760
  emit({
2613
2761
  type: "question_request",
2614
2762
  id,
@@ -2932,6 +3080,7 @@ async function runAgentHeadlessStreamInWorkspace(
2932
3080
  additional_directories: additionalDirectories,
2933
3081
  resumed_messages: resumedMessages,
2934
3082
  });
3083
+ for (const event of restoredQuestionEvents) emit(event);
2935
3084
 
2936
3085
  // P0-2 visible recovery notice: same `raw` info-line contract as
2937
3086
  // provider_fallback / version_skew (the shipped IDE panels map `raw` → an
@@ -1 +0,0 @@
1
- import{I as l,J as C,U as i,c as a,K as o,o as D,r as k,a as L,b as O,P as S,Q as _,R as u,F as B,Z as q,V,S as H}from"./vendor-Bn1JzzAn.js";import{_ as U,u as I,d as y}from"./index-CXVBQ82k.js";import{R as W}from"./icons-DG5UD-6K.js";function N(p){return["ask","agent"].map(t=>{const s=p?.readiness?.[t],e=s?.state==="admitted",d=s?.scope==="deployment-admission"&&s.runtimeVerification==="not_checked"&&Array.isArray(s.requiredCommands)&&s.requiredCommands.includes(t)&&(e?s.ready===!0&&s.taskReady===null:["not_configured","disabled","invalid","command_not_allowed"].includes(s.state)&&s.ready===!1&&s.taskReady===!1);return{command:t,state:d?s.state:"unknown",summary:d?e?"部署准入通过":"部署准入被阻断":"未提供准入诊断",detail:d&&typeof s.detail=="string"?s.detail:"当前 CLI 未提供可识别的部署准入诊断,请更新 CLI。",remediation:d&&typeof s.remediation=="string"?s.remediation:""}})}function j(p,t){for(const s of Object.keys(p))delete p[s];Object.assign(p,{source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[],readiness:null},t||{})}const A={__name:"EvolutionSettings",setup(p,{expose:t}){t();const s=I(),e=k(!1),d=k(!1),w=k(!1),m=k(""),g=k(""),c=L({source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[]}),h=O(()=>e.value||d.value||w.value),x=O(()=>N(c));function b(r){j(c,r),m.value=c.descriptorPath||"",g.value=c.trustRootPath||""}async function v(r,n=3e4){return await s.waitConnected(8e3),(await s.sendRaw(r,n)).result}async function R(){e.value=!0;try{b(await v({type:"evolution.deployment.status"}))}catch(r){y.error("读取配置失败:"+r.message)}finally{e.value=!1}}async function E(){if(!m.value.trim()||!g.value.trim()){y.warning("请填写描述符和信任根公钥的绝对路径");return}d.value=!0;try{b(await v({type:"evolution.deployment.configure",descriptorPath:m.value.trim(),trustRootPath:g.value.trim()},6e4)),y.success("签名校验通过,配置已保存并启用;自动发布仍为 HOLD")}catch(r){y.error("配置失败:"+r.message)}finally{d.value=!1}}async function f(){w.value=!0;try{b(await v({type:"evolution.deployment.set-enabled",enabled:!c.profileEnabled})),y.success(c.profileEnabled?"已启用":"已停用")}catch(r){y.error("更新失败:"+r.message)}finally{w.value=!1}}D(R);const P={ws:s,loading:e,saving:d,toggling:w,descriptorPath:m,trustRootPath:g,status:c,busy:h,readinessRows:x,apply:b,request:v,loadStatus:R,save:E,toggle:f,computed:O,onMounted:D,reactive:L,ref:k,get ReloadOutlined(){return W},get message(){return y},get useWsStore(){return I},get deploymentReadinessRows(){return N},get replaceDeploymentStatus(){return j}};return Object.defineProperty(P,"__isScriptSetup",{enumerable:!1,value:!0}),P}},F={class:"page-head"},J={class:"mono"},K={class:"mono"},z={class:"admission-status","aria-live":"polite"},M=["data-admission-command"],Q={class:"mono"},T={key:0,class:"mono"};function Y(p,t,s,e,d,w){const m=l("a-button"),g=l("a-alert"),c=l("a-input"),h=l("a-form-item"),x=l("a-space"),b=l("a-form"),v=l("a-card"),R=l("a-col"),E=l("a-tag"),f=l("a-descriptions-item"),P=l("a-descriptions"),r=l("a-row");return S(),C("div",null,[i("div",F,[t[3]||(t[3]=i("div",null,[i("h2",{class:"page-title"},"Skill 自进化配置"),i("p",{class:"page-sub"},"统一配置受治理部署;CLI、IDE 插件与 cc ui 共享。")],-1)),a(m,{loading:e.loading,onClick:e.loadStatus},{icon:o(()=>[a(e.ReloadOutlined)]),default:o(()=>[t[2]||(t[2]=_("刷新 ",-1))]),_:1},8,["loading"])]),a(g,{message:"不会开启自动发布",description:"此开关只启用经过签名的 Skill 自进化运行时。候选项进入 active 前仍需人工审核,自动发布始终保持 HOLD。",type:"warning","show-icon":"",class:"notice"}),a(r,{gutter:16},{default:o(()=>[a(R,{xs:24,xl:15},{default:o(()=>[a(v,{title:"签名部署",class:"panel-card"},{default:o(()=>[a(b,{layout:"vertical"},{default:o(()=>[a(h,{label:"签名部署描述符"},{extra:o(()=>[...t[4]||(t[4]=[_("Web 页面不能读取本机文件选择器,请填写运行 cc ui 的机器上的绝对路径。",-1)])]),default:o(()=>[a(c,{value:e.descriptorPath,"onUpdate:value":t[0]||(t[0]=n=>e.descriptorPath=n),disabled:e.busy,placeholder:"deployment descriptor JSON 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(h,{label:"Ed25519 信任根公钥"},{default:o(()=>[a(c,{value:e.trustRootPath,"onUpdate:value":t[1]||(t[1]=n=>e.trustRootPath=n),disabled:e.busy,placeholder:"信任根 public key 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(x,null,{default:o(()=>[a(m,{type:"primary",loading:e.saving,onClick:e.save},{default:o(()=>[...t[5]||(t[5]=[_("校验、保存并启用",-1)])]),_:1},8,["loading"]),a(m,{danger:e.status.profileEnabled,disabled:!e.status.descriptorPath,loading:e.toggling,onClick:e.toggle},{default:o(()=>[_(u(e.status.profileEnabled?"停用":"启用"),1)]),_:1},8,["danger","disabled","loading"])]),_:1})]),_:1})]),_:1})]),_:1}),a(R,{xs:24,xl:9},{default:o(()=>[a(v,{title:"治理状态",class:"panel-card status-card"},{default:o(()=>[a(P,{column:1,size:"small"},{default:o(()=>[a(f,{label:"生效状态"},{default:o(()=>[a(E,{color:e.status.effectiveEnabled?"green":"default"},{default:o(()=>[_(u(e.status.effectiveEnabled?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1}),a(f,{label:"生效来源"},{default:o(()=>[_(u(e.status.source||"none"),1)]),_:1}),a(f,{label:"签名校验"},{default:o(()=>[a(E,{color:e.status.verified?"green":"red"},{default:o(()=>[_(u(e.status.verified?"已通过":"未通过"),1)]),_:1},8,["color"])]),_:1}),a(f,{label:"自动发布"},{default:o(()=>[a(E,{color:"orange"},{default:o(()=>[...t[6]||(t[6]=[_("HOLD",-1)])]),_:1})]),_:1}),a(f,{label:"配置文件"},{default:o(()=>[i("span",J,u(e.status.profilePath||"—"),1)]),_:1}),a(f,{label:"允许命令"},{default:o(()=>[i("span",K,u((e.status.commands||[]).join(", ")||"—"),1)]),_:1})]),_:1}),i("section",z,[t[7]||(t[7]=i("h3",null,"模型命令部署准入",-1)),t[8]||(t[8]=i("p",null,"这里只检查部署准入,实际任务运行尚未验证。",-1)),(S(!0),C(B,null,q(e.readinessRows,n=>(S(),C("div",{key:n.command,"data-admission-command":n.command},[i("strong",null,u(n.command)+":"+u(n.summary),1),i("p",Q,u(n.detail),1),n.remediation?(S(),C("p",T,u(n.remediation),1)):V("v-if",!0)],8,M))),128))]),e.status.error?(S(),H(g,{key:0,message:e.status.error,type:"error","show-icon":"",class:"error"},null,8,["message"])):V("v-if",!0)]),_:1})]),_:1})]),_:1})])}const ee=U(A,[["render",Y],["__scopeId","data-v-5a42105e"],["__file","/tmp/cc-web-panel-oKYV8O/repo/packages/web-panel/src/views/EvolutionSettings.vue"]]);export{ee as default};
@@ -1,7 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-5ZDPTW_H.js","./vendor-Bn1JzzAn.js","./index-CXVBQ82k.js","./icons-DG5UD-6K.js","./index-Cq93VfoF.css","./ChatBubbleRenderer-gy5SDGw2.css","./OrderTableRenderer-BWNyM-6m.js","./OrderTableRenderer-CfrDjSHT.css","./TimelineRenderer-C85GlJzu.js","./TimelineRenderer-BlTAtkOc.css","./EmailListRenderer-C3iqSv5I.js","./EmailListRenderer-DTPZPx_S.css","./GenericCardRenderer-DbaW_Jvt.js","./GenericCardRenderer-o85VDYQS.css"])))=>i.map(i=>d[i]);
2
- import{E as ue,r as R,b as w,I as g,P as u,J as S,U as v,c,S as C,V as E,_ as M,F as B,Z as se,a0 as ae,R as x,K as m,Q as b,W as L,o as J}from"./vendor-Bn1JzzAn.js";import{u as U}from"./usePersonalDataHub-Be-lveh2.js";import{_ as D,e as F,d as P}from"./index-CXVBQ82k.js";import{aa as q,ag as K,M as Q,aI as z,v as Y,aH as G,aq as H,ac as W,e as de,d as fe,k as pe,ai as me,aA as _e,R as ye}from"./icons-DG5UD-6K.js";import"./useShellMode-CgR0wCYM.js";const I=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),V=50,Z=300,X=ue("pdhBrowser",()=>{const r=R({...I}),t=R([]),n=R(null),e=R(!1),o=R(!1),a=R(null),l=R(null),s=R(!1),i=R({byCategory:{},byAdapter:{},bySubtype:{},total:0});let d=0,_=null;const j=w(()=>t.value.length>0),A=w(()=>n.value!=null);function h(O={}){const p={},f=r.value;return f.q&&f.q.trim()&&(p.q=f.q.trim()),f.category&&(p.category=f.category),f.adapter&&(p.adapter=f.adapter),f.subtype&&(p.subtype=f.subtype),Number.isFinite(f.since)&&(p.since=f.since),Number.isFinite(f.until)&&(p.until=f.until),{...p,...O}}async function y(){const O=++d;e.value=!0,a.value=null;const p=U();try{const[f,T]=await Promise.all([p.searchEvents(h({limit:V})),p.facetCounts({...r.value.q&&r.value.q.trim()?{q:r.value.q.trim()}:{},...Number.isFinite(r.value.since)?{since:r.value.since}:{},...Number.isFinite(r.value.until)?{until:r.value.until}:{}})]);if(O!==d)return;t.value=f.rows||[],n.value=f.nextCursor||null,l.value=f.mode||"like",s.value=!!f.shortQuery,i.value={byCategory:T.byCategory||{},byAdapter:T.byAdapter||{},bySubtype:T.bySubtype||{},total:T.total||0}}catch(f){if(O!==d)return;a.value=f&&f.message?f.message:String(f),t.value=[],n.value=null}finally{O===d&&(e.value=!1)}}async function k(){if(!n.value||o.value)return;o.value=!0,a.value=null;const O=U();try{const p=await O.searchEvents(h({cursor:n.value,limit:V}));t.value=t.value.concat(p.rows||[]),n.value=p.nextCursor||null,l.value=p.mode||l.value}catch(p){a.value=p&&p.message?p.message:String(p)}finally{o.value=!1}}function le(O,p){if(!(O in I))throw new Error(`pdhBrowser.setFilter: unknown key "${O}"`);r.value={...r.value,[O]:p},_&&clearTimeout(_),_=setTimeout(()=>{_=null,y()},Z)}function ie(O){return r.value={...I,...O},_&&(clearTimeout(_),_=null),y()}function ce(){r.value={...I},t.value=[],n.value=null,a.value=null,i.value={byCategory:{},byAdapter:{},bySubtype:{},total:0}}return{filters:r,results:t,cursor:n,isLoading:e,isAppending:o,error:a,mode:l,shortQuery:s,facets:i,hasResults:j,canLoadMore:A,search:y,loadMore:k,setFilter:le,setFilters:ie,reset:ce,PAGE_SIZE:V,SEARCH_DEBOUNCE_MS:Z}}),ge=Object.freeze(["chat","social","email","shopping","travel","system","ai-chat","other"]),ve=Object.freeze({chat:"社交聊天",social:"内容平台",email:"邮件",shopping:"支付订单",travel:"出行",system:"系统数据","ai-chat":"AI 对话",other:"其他"});function N(r){return ve[r]||r||"未知"}const be=Object.freeze([["wechat","chat"],["messaging-","chat"],["social-","social"],["email-","email"],["shopping-","shopping"],["alipay-","shopping"],["travel-","travel"],["system-data","system"],["browser-","system"],["meeting-","system"],["vscode","system"],["vscodium","system"],["jetbrains-ide","system"],["win-recent","system"],["git-activity","system"],["shell-history","system"],["hbuilderx","system"],["local-files","system"],["cursor","ai-chat"],["claude-code","ai-chat"],["ai-chat-","ai-chat"]]);function $(r){if(typeof r!="string"||r.length===0)return"other";for(const[t,n]of be)if(t.endsWith("-")||t==="system-data"){if(r.startsWith(t))return n}else if(r===t)return n;return"other"}const he={__name:"CategorySidebar",props:{selected:{type:String,default:null},facets:{type:Object,default:()=>({byCategory:{},total:0})}},emits:["select"],setup(r,{expose:t}){t();const n=r,e=w(()=>n.facets.total||0),o={chat:W,social:H,email:G,shopping:Y,travel:z,system:Q,"ai-chat":K,other:q};function a(i){return o[i]||q}function l(i){return i?{backgroundColor:"#fff",color:"#1677ff"}:{backgroundColor:"#f0f0f0",color:"#666"}}const s={props:n,total:e,ICONS:o,iconFor:a,badgeStyle:l,computed:w,get AppstoreOutlined(){return q},get MessageOutlined(){return W},get PlayCircleOutlined(){return H},get MailOutlined(){return G},get ShoppingOutlined(){return Y},get CarOutlined(){return z},get MobileOutlined(){return Q},get RobotOutlined(){return K},get CATEGORIES(){return ge},get categoryLabel(){return N}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},Oe={class:"pdh-sidebar"},Se=["onClick"],we={class:"label"};function Ce(r,t,n,e,o,a){const l=g("a-badge");return u(),S("div",Oe,[t[2]||(t[2]=v("div",{class:"sidebar-title"},"数据类型",-1)),v("div",{class:M(["cat-item",{active:n.selected===null}]),onClick:t[0]||(t[0]=s=>r.$emit("select",null))},[c(e.AppstoreOutlined,{class:"icon"}),t[1]||(t[1]=v("span",{class:"label"},"全部",-1)),e.total>0?(u(),C(l,{key:0,count:e.total,"number-style":e.badgeStyle(n.selected===null),"overflow-count":9999},null,8,["count","number-style"])):E("v-if",!0)],2),(u(!0),S(B,null,se(e.CATEGORIES,s=>(u(),S("div",{key:s,class:M(["cat-item",{active:n.selected===s,dim:!n.facets.byCategory[s]}]),onClick:i=>r.$emit("select",s)},[(u(),C(ae(e.iconFor(s)),{class:"icon"})),v("span",we,x(e.categoryLabel(s)),1),n.facets.byCategory[s]?(u(),C(l,{key:0,count:n.facets.byCategory[s],"number-style":e.badgeStyle(n.selected===s),"overflow-count":9999},null,8,["count","number-style"])):E("v-if",!0)],10,Se))),128))])}const ke=D(he,[["render",Ce],["__scopeId","data-v-6b62a22e"],["__file","/tmp/cc-web-panel-oKYV8O/repo/packages/web-panel/src/components/pdh/CategorySidebar.vue"]]),Ee={__name:"SearchFilterBar",props:{filters:{type:Object,required:!0},facets:{type:Object,default:()=>({byAdapter:{}})},isLoading:{type:Boolean,default:!1},mode:{type:String,default:null},shortQuery:{type:Boolean,default:!1}},emits:["set-filter","reset"],setup(r,{expose:t,emit:n}){t();const e=r,o=n,a=w(()=>e.filters.category?`在「${e.filters.category}」类目内搜索…`:"搜索关键词(如:支付宝、罗技、Kotlin)…"),l=w(()=>Object.entries(e.facets.byAdapter||{}).sort((y,k)=>k[1]-y[1]).map(([y,k])=>({value:y,label:`${y} (${k})`}))),s=w(()=>!e.filters.since&&!e.filters.until?null:[e.filters.since?new Date(e.filters.since):null,e.filters.until?new Date(e.filters.until):null]),i=w(()=>!!(e.filters.q||e.filters.adapter||e.filters.subtype||e.filters.since||e.filters.until));function d(h){o("set-filter","q",h||"")}function _(h){o("set-filter","q",h||"")}function j(h){if(!h||h.length===0){o("set-filter","since",null),o("set-filter","until",null);return}const[y,k]=h;o("set-filter","since",y?+y:null),o("set-filter","until",k?+k:null)}const A={props:e,emit:o,placeholderText:a,adapterOptions:l,dateRangeValue:s,hasActiveFilters:i,onQInput:d,onSearch:_,onDateChange:j,computed:w,get SearchOutlined(){return pe},get CloseCircleOutlined(){return fe},get InfoCircleOutlined(){return de}};return Object.defineProperty(A,"__isScriptSetup",{enumerable:!1,value:!0}),A}},Re={class:"pdh-filter-bar"},xe={key:1,class:"hint"},je={key:2,class:"hint"};function Ae(r,t,n,e,o,a){const l=g("a-input-search"),s=g("a-select"),i=g("a-range-picker"),d=g("a-button");return u(),S("div",Re,[c(l,{value:n.filters.q,placeholder:e.placeholderText,"enter-button":"搜索","allow-clear":"",loading:n.isLoading,style:{flex:"1","max-width":"480px"},"onUpdate:value":e.onQInput,onSearch:e.onSearch},{prefix:m(()=>[c(e.SearchOutlined)]),_:1},8,["value","placeholder","loading"]),c(s,{value:n.filters.adapter,placeholder:"所有 adapter","allow-clear":"",options:e.adapterOptions,style:{width:"200px"},"onUpdate:value":t[0]||(t[0]=_=>r.$emit("set-filter","adapter",_||null))},null,8,["value","options"]),c(i,{value:e.dateRangeValue,placeholder:["开始日期","结束日期"],style:{width:"280px"},"onUpdate:value":e.onDateChange},null,8,["value"]),e.hasActiveFilters?(u(),C(d,{key:0,type:"link",danger:"",onClick:t[1]||(t[1]=_=>r.$emit("reset"))},{icon:m(()=>[c(e.CloseCircleOutlined)]),default:m(()=>[t[2]||(t[2]=b(" 清空筛选 ",-1))]),_:1})):E("v-if",!0),n.shortQuery?(u(),S("span",xe,[c(e.InfoCircleOutlined),t[3]||(t[3]=b(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):n.mode==="like"?(u(),S("span",je,[c(e.InfoCircleOutlined),t[4]||(t[4]=b(" 当前为 LIKE 兜底模式 ",-1))])):E("v-if",!0)])}const Le=D(Ee,[["render",Ae],["__scopeId","data-v-d7cce6e9"],["__file","/tmp/cc-web-panel-oKYV8O/repo/packages/web-panel/src/components/pdh/SearchFilterBar.vue"]]),Fe={__name:"RendererDispatcher",props:{event:{type:Object,required:!0}},setup(r,{expose:t}){t();const n=L(()=>F(()=>import("./ChatBubbleRenderer-5ZDPTW_H.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),e=L(()=>F(()=>import("./OrderTableRenderer-BWNyM-6m.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),o=L(()=>F(()=>import("./TimelineRenderer-C85GlJzu.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),a=L(()=>F(()=>import("./EmailListRenderer-C3iqSv5I.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),l=L(()=>F(()=>import("./GenericCardRenderer-DbaW_Jvt.js"),__vite__mapDeps([12,1,2,3,4,13]),import.meta.url));function s(d){const _=d&&d.source&&d.source.adapter;switch($(_)){case"chat":case"ai-chat":return n;case"shopping":return e;case"travel":return o;case"email":return a;default:return l}}const i={ChatBubbleRenderer:n,OrderTableRenderer:e,TimelineRenderer:o,EmailListRenderer:a,GenericCardRenderer:l,rendererFor:s,defineAsyncComponent:L,get getCategory(){return $}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}};function De(r,t,n,e,o,a){return u(),C(ae(e.rendererFor(n.event)),{event:n.event},null,8,["event"])}const Te=D(Fe,[["render",De],["__file","/tmp/cc-web-panel-oKYV8O/repo/packages/web-panel/src/components/pdh/renderers/RendererDispatcher.vue"]]);function ee(r){return JSON.stringify(r,null,2)}function te(r){return r.map(t=>JSON.stringify(t)).join(`
3
- `)+`
4
- `}function ne(r){const n=["id","subtype","occurredAt","occurredAtIso","actor","place","adapter","summary","contentJson","extraJson"].join(","),e=r.map(o=>{const a=Number.isFinite(o.occurredAt)?o.occurredAt:null,l=a?new Date(a).toISOString():"",s=o.source&&o.source.adapter||"",i=o.content&&(o.content.text||o.content.title||o.content.subject)||"";return[o.id||"",o.subtype||"",a!=null?String(a):"",l,o.actor||"",o.place||"",s,i,o.content?JSON.stringify(o.content):"",o.extra?JSON.stringify(o.extra):""].map(Ie).join(",")});return[n,...e].join(`
5
- `)+`
6
- `}function Ie(r){const t=String(r??"");return t.includes(",")||t.includes('"')||t.includes(`
7
- `)||t.includes("\r")?'"'+t.replace(/"/g,'""')+'"':t}function re(r,t,n="application/octet-stream"){if(typeof window>"u"||typeof document>"u")return t;const e=new Blob([r],{type:n}),o=URL.createObjectURL(e),a=document.createElement("a");return a.href=o,a.download=t,document.body.appendChild(a),a.click(),document.body.removeChild(a),setTimeout(()=>URL.revokeObjectURL(o),1e3),t}function oe(r,t=null){const n=new Date,e=n.getFullYear(),o=String(n.getMonth()+1).padStart(2,"0"),a=String(n.getDate()).padStart(2,"0"),l=r==="ndjson"?"ndjson":r,s=t?`-${t}`:"";return`pdh-events-${e}-${o}-${a}${s}.${l}`}const Pe={__name:"ExportDropdown",props:{events:{type:Array,required:!0},category:{type:String,default:null}},setup(r,{expose:t}){t();const n=r,e=w(()=>n.events.length>0),o={json:"application/json;charset=utf-8",ndjson:"application/x-ndjson;charset=utf-8",csv:"text/csv;charset=utf-8"};function a(i){switch(i){case"json":return ee(n.events);case"ndjson":return te(n.events);case"csv":return ne(n.events);default:throw new Error(`unknown format: ${i}`)}}function l({key:i}){try{const d=a(i),_=oe(i,n.category);re(d,_,o[i]),P.success(`已导出 ${n.events.length} 条到 ${_}`)}catch(d){P.error(`导出失败: ${d.message||d}`)}}const s={props:n,hasResults:e,MIME:o,serialize:a,onClick:l,computed:w,get DownloadOutlined(){return _e},get DownOutlined(){return me},get message(){return P},get eventsToJson(){return ee},get eventsToNdjson(){return te},get eventsToCsv(){return ne},get downloadAs(){return re},get suggestFilename(){return oe}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}};function qe(r,t,n,e,o,a){const l=g("a-button"),s=g("a-menu-item"),i=g("a-menu"),d=g("a-dropdown");return u(),C(d,{disabled:!e.hasResults},{overlay:m(()=>[c(i,{onClick:e.onClick},{default:m(()=>[c(s,{key:"json"},{default:m(()=>[...t[0]||(t[0]=[b("JSON (.json)",-1)])]),_:1}),c(s,{key:"ndjson"},{default:m(()=>[...t[1]||(t[1]=[b("NDJSON (.ndjson)",-1)])]),_:1}),c(s,{key:"csv"},{default:m(()=>[...t[2]||(t[2]=[b("CSV (.csv)",-1)])]),_:1})]),_:1})]),default:m(()=>[c(l,{disabled:!e.hasResults},{icon:m(()=>[c(e.DownloadOutlined)]),default:m(()=>[b(" 导出 ("+x(n.events.length)+") ",1),c(e.DownOutlined)]),_:1},8,["disabled"])]),_:1},8,["disabled"])}const Ve=D(Pe,[["render",qe],["__file","/tmp/cc-web-panel-oKYV8O/repo/packages/web-panel/src/components/pdh/ExportDropdown.vue"]]),Be={__name:"PdhVaultBrowser",setup(r,{expose:t}){t();const n=X(),e=w(()=>n.filters.q?`没有匹配 "${n.filters.q}" 的事件 — 试试更短的关键词或换个类目`:n.filters.category?`「${N(n.filters.category)}」类目下还没有数据 — 去采集页同步对应 adapter`:"Vault 里还没有数据 — 去「个人数据中台」页面同步任意 adapter");function o(s){n.filters.category=s,n.search()}function a(s,i){n.setFilter(s,i)}J(()=>{!n.hasResults&&!n.isLoading&&n.search()});const l={store:n,emptyHint:e,onCategorySelect:o,onSetFilter:a,onMounted:J,computed:w,get ReloadOutlined(){return ye},get usePdhBrowserStore(){return X},get categoryLabel(){return N},CategorySidebar:ke,SearchFilterBar:Le,RendererDispatcher:Te,ExportDropdown:Ve};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}},Ne={class:"pdh-browser-page"},Me={class:"page-header"},Je={class:"main-pane"},Ue={class:"results-summary"},Ke={key:0},Qe={key:0},ze={key:1},Ye={class:"loaded-of"},Ge={class:"results-list"},He={key:2,class:"load-more"};function We(r,t,n,e,o,a){const l=g("a-tag"),s=g("a-button"),i=g("a-space"),d=g("a-col"),_=g("a-spin"),j=g("a-alert"),A=g("a-empty"),h=g("a-row");return u(),S("div",Ne,[v("div",Me,[t[6]||(t[6]=v("div",null,[v("h2",{class:"page-title"},"数据浏览器"),v("p",{class:"page-sub"}," Vault 里所有已采集的数据,按类目浏览 / 全文检索 / 时间窗口筛选。 完全离线,不外传。 ")],-1)),c(i,null,{default:m(()=>[e.store.mode==="fts5"?(u(),C(l,{key:0,color:"green"},{default:m(()=>[...t[3]||(t[3]=[b("FTS5 trigram",-1)])]),_:1})):e.store.mode==="like"?(u(),C(l,{key:1,color:"orange"},{default:m(()=>[...t[4]||(t[4]=[b("LIKE 兜底",-1)])]),_:1})):E("v-if",!0),c(e.ExportDropdown,{events:e.store.results,category:e.store.filters.category},null,8,["events","category"]),c(s,{onClick:t[0]||(t[0]=y=>e.store.search()),loading:e.store.isLoading},{icon:m(()=>[c(e.ReloadOutlined)]),default:m(()=>[t[5]||(t[5]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),c(h,{gutter:16,class:"browser-layout"},{default:m(()=>[c(d,{xs:24,sm:24,md:6,lg:5,xl:4},{default:m(()=>[c(e.CategorySidebar,{selected:e.store.filters.category,facets:e.store.facets,onSelect:e.onCategorySelect},null,8,["selected","facets"])]),_:1}),c(d,{xs:24,sm:24,md:18,lg:19,xl:20},{default:m(()=>[v("div",Je,[c(e.SearchFilterBar,{filters:e.store.filters,facets:e.store.facets,"is-loading":e.store.isLoading,mode:e.store.mode,"short-query":e.store.shortQuery,onSetFilter:e.onSetFilter,onReset:t[1]||(t[1]=y=>{e.store.reset(),e.store.search()})},null,8,["filters","facets","is-loading","mode","short-query"]),v("div",Ue,[e.store.isLoading&&e.store.results.length===0?(u(),S("span",Ke,[c(_,{size:"small"}),t[7]||(t[7]=b(" 载入中… ",-1))])):(u(),S(B,{key:1},[v("strong",null,x(e.store.facets.total),1),t[11]||(t[11]=b(" 条事件 ",-1)),e.store.filters.category?(u(),S("span",Qe,[t[8]||(t[8]=b(" / 当前类目 ",-1)),v("strong",null,x(e.categoryLabel(e.store.filters.category)),1),v("strong",null,x(e.store.facets.byCategory[e.store.filters.category]||0),1)])):E("v-if",!0),e.store.filters.q?(u(),S("span",ze,[t[9]||(t[9]=b(' / 关键词 "',-1)),v("em",null,x(e.store.filters.q),1),t[10]||(t[10]=b('"',-1))])):E("v-if",!0),v("span",Ye," / 已显示 "+x(e.store.results.length),1)],64))]),e.store.error?(u(),C(j,{key:0,type:"error","show-icon":"",message:e.store.error,closable:"",style:{margin:"12px 0"}},null,8,["message"])):E("v-if",!0),!e.store.isLoading&&e.store.results.length===0&&!e.store.error?(u(),C(A,{key:1,description:e.emptyHint,style:{"margin-top":"40px"}},null,8,["description"])):E("v-if",!0),v("div",Ge,[(u(!0),S(B,null,se(e.store.results,(y,k)=>(u(),C(e.RendererDispatcher,{key:`r-${k}-${y.id}`,event:y},null,8,["event"]))),128))]),e.store.canLoadMore?(u(),S("div",He,[c(s,{loading:e.store.isAppending,onClick:t[2]||(t[2]=y=>e.store.loadMore()),block:""},{default:m(()=>[...t[12]||(t[12]=[b(" 加载下一页 (50 条) ",-1)])]),_:1},8,["loading"])])):E("v-if",!0)])]),_:1})]),_:1})])}const nt=D(Be,[["render",We],["__scopeId","data-v-0f7c02cd"],["__file","/tmp/cc-web-panel-oKYV8O/repo/packages/web-panel/src/views/PdhVaultBrowser.vue"]]);export{nt as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-CXVBQ82k.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-oB1LLxyf.js";import{a0 as t}from"./index-CXVBQ82k.js";import"./vendor-Bn1JzzAn.js";import"./index-CtB45Hok.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-BB9RTwmE.js";import{a0 as t}from"./index-CXVBQ82k.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-D7G8bF5J.js";import"./useFlexGapSupport-OqHBXEmi.js";import"./styleChecker-deGJ5dp_.js";import"./index-CtB45Hok.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};