chainlesschain 0.166.44 → 0.166.46

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 (195) hide show
  1. package/package.json +3 -3
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-HiHMDVK3.js → AIOps-Cp8KiMmv.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-H2RKuS8V.js → ActionButton-B4d9BGsm.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-CBPFBB61.js → Analytics-Cf9yXTkv.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-Da-3Laze.js → AppLayout-40UkmxtP.js} +4 -4
  7. package/src/assets/web-panel/assets/{Artifacts-DiRQ9yzD.js → Artifacts-Ckkb4oOA.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-C9LtWEBh.js → Audit-Dnf569k5.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-4rpi7fVg.js → BackgroundAgents-CA6bLem4.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-B8VQmHys.js → Backup-ChQU0I_Q.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-iCVpF2DK.js → BaseInput-BHeZXnNN.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-BrQaXBwC.js → Chat-DcFVYB2E.js} +5 -5
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-HIyU-9c0.js → ChatBubbleRenderer-Bi2SY9E_.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-CsV__0_R.js → Checkbox-2PDbejv2.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-BvFeCIAE.js → Codegen-DJBn1RAu.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-CagxV1O8.js → Col-CPRq7n6y.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-DAWr4ahG.js → Community-axvINFMi.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-Ba49Tdc2.js → Compact-_OX4Qbe0.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-Brk-MSO4.js → Compliance-DWAkvzRL.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-DeKH1v0o.js → Cowork-CUIJ25oj.js} +2 -2
  21. package/src/assets/web-panel/assets/{Cron-AHB-T-VL.js → Cron-nR0m7H3_.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-Zbcrtimh.js → Crosschain-CgTLXzh_.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-ByFa1MWG.js → DID-BllzRB6Q.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-9jKovyuH.js → Dashboard-C9f0IIBN.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-DY8TaXi5.js → Dropdown-BkahetiO.js} +1 -1
  26. package/src/assets/web-panel/assets/EmailListRenderer-rartVC-k.js +1 -0
  27. package/src/assets/web-panel/assets/EvolutionSettings-BqpG3XHV.js +1 -0
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-5ao8smvA.js → FamilyGuardDashboard-DgUdFvw1.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-RTpNXXHT.js → Federation-oFpIQU6g.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-DWZvRMWv.js → FormItemContext-BUH5xlyP.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-CWi8SGvx.js → GenericCardRenderer-ilRa-ueg.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-CCLgDIqs.js → Git-DlHHSF8j.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-DUuyKrQl.js → Governance-yQiiXIWe.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-RkFcM2A0.js → Inference-BUDRVGOP.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-C-QTauZr.js → KnowledgeGraph-BaGyIoN1.js} +1 -1
  36. package/src/assets/web-panel/assets/Logs-C1cO6zE0.js +2 -0
  37. package/src/assets/web-panel/assets/{MarkdownRenderer-CgiHBe0A.js → MarkdownRenderer-_z_Iaoes.js} +1 -1
  38. package/src/assets/web-panel/assets/{Marketplace-CK1kSFDt.js → Marketplace-CM8cGL0K.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-BcaVwoY6.js → McpTools-CDqAMU0U.js} +3 -3
  40. package/src/assets/web-panel/assets/{Memory-QEI4xRwF.js → Memory-CfB0-Ofv.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-BqD-R0Ek.js → MobileBridge-BL18ytvB.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-CwFoXf1M.js → MobileProjects-PIyyxbuJ.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-CTZ6qICG.js → Mtc-BTTrFCol.js} +4 -4
  44. package/src/assets/web-panel/assets/{MtcAudit-Cn7y2BzO.js → MtcAudit-JHZn037c.js} +4 -4
  45. package/src/assets/web-panel/assets/{Multisig-BCjsdGiN.js → Multisig-CMf9NEdB.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-CupTVNtA.js → NLProgramming-Dhk3qaus.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-C8kO3mGt.js → Notes-6F8EarNN.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-Cn-MJ8sQ.js → NotificationSettings-gxdaVEit.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-BX4PrVfN.js → OrderTableRenderer-gVgXQWdc.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-G_RjOL7M.js → Organization-CzvHcDNO.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-BvX644ya.js → Overflow-Dclx30Vv.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-yWmLgYgQ.js → P2P-CM0Wm9vZ.js} +2 -2
  53. package/src/assets/web-panel/assets/PdhVaultBrowser-fYmQzmTA.js +7 -0
  54. package/src/assets/web-panel/assets/{Permissions-DtU8fhcZ.js → Permissions-B_oATenG.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-B17Vyk-x.js → PersonalDataHub-CptiVBh5.js} +5 -5
  56. package/src/assets/web-panel/assets/{Pipeline-BZUsTyhP.js → Pipeline-DkHzgyyI.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-BswdhlPL.js → Privacy-DzZvwcKh.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-sJxSlY0C.js → ProjectInit-CzkCs-5G.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-BnbpdOke.js → ProjectSettings-BB8dcxRD.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-DUjauf-6.js → Projects-B7PW9CFY.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-DhF5I-UR.js → Providers-Tfx-ti1V.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-B3PeCAGo.js → QrScannerModal-EvWlNhfX.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-Cpaxrabg.js → QuickAsk-CUspgbNC.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-DqXFF66-.js → Recommend-COY2g77J.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-DtDQ76Ox.js → RemoteSession-BzMBU6E6.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-BgLLKwu2.js → Reputation-RtYRF4YP.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-BuMLhd8M.js → Row-Bva3l9Lc.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-BizxUzBA.js → RssFeed-BhjzLvW3.js} +2 -2
  69. package/src/assets/web-panel/assets/{Search-CYNrJAQY.js → Search-BYzT2PTR.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-CIC02soH.js → Security-Bcl4-KTv.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-DD3WxXxw.js → Services-BRRa4A0f.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-C-d9Mbos.js → Skeleton-DYQ016qy.js} +1 -1
  73. package/src/assets/web-panel/assets/Skills-CAUKL9JA.js +1 -0
  74. package/src/assets/web-panel/assets/{Sla-DgrqUhns.js → Sla-BTyUqfuD.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-CDXFwOHX.js → SpeechSettings-CUjMihrs.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-BBio_v8M.js → SyncSettings-CvfOSupr.js} +2 -2
  77. package/src/assets/web-panel/assets/Tasks-EvjNXrWH.js +1 -0
  78. package/src/assets/web-panel/assets/{Templates-RAPdM85o.js → Templates-wPAp0EoM.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-2jI745PC.js → Tenant-CP0D-q9Q.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-ZCtYBMAe.js → Terminal-CQ0f2iFg.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-DfI36Yg6.js → TimelineRenderer-D3JrGSPb.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-NQ1VaO0W.js → Tokens-yXf2PPp9.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-DwFh5AMe.js → Trigger-DfmMOoZ2.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-Dr0v45uH.js → Trust-BTCyMgf1.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-i7Q1Bdqr.js → UkeySign-DKCwIBHi.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-CXSkk4gl.js → VideoEditing-CQpDSzLO.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-8_cAjou4.js → Wallet-CyFrzC3K.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-jn_3Gma7.js → WebAuthn-D6Nr_1kd.js} +4 -4
  89. package/src/assets/web-panel/assets/{WorkflowEditor-BmvodVLl.js → WorkflowEditor-CgR9tNrB.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-DGi3bmwL.js → chat-CRG_IeyP.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-D8OSTOU0.js → colors-MdE3TStI.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-DfNygJU_.js → compact-item-B0LRuiNV.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-B0lT0dbj.js → createContext-B_V5fjcX.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-BtFLt3qI.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-Xtzg_EDR.js → hasIn-DSL-c_hr.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BBegBTDb.js → index-0200QxC4.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BBR-_Pkv.js → index-B3iW-mhn.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BFRkiqtr.js → index-BD0w-888.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-B4-hl9Rw.js → index-BHp1nSur.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BJ6nxb18.js → index-BIDCNwy6.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-Cx_EAQEh.js → index-BMm8tO2X.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BhS9-r8Z.js → index-BNhWoD6d.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CShl59Um.js → index-BQAsL19t.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DEH5ms1R.js → index-BbZZ7P_c.js} +1 -1
  105. package/src/assets/web-panel/assets/index-BhuWQHeG.js +1 -0
  106. package/src/assets/web-panel/assets/{index-DVfE2S0f.js → index-BpwGsAA-.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-B3ittRaJ.js → index-Bq8-2Ibv.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DWpRgQvO.js → index-BsAEd-Do.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-B0kDqFPU.js → index-C-aKWR2v.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CyVOaMS7.js → index-C5dqieYX.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-De9jsBiC.js → index-C67dPW0L.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-Cp-yGWti.js → index-CEOAZm5j.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-B-B7DDjX.js → index-CNytQuFq.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-ConAvib0.js → index-CPYshcic.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-EV-o-rTH.js → index-CS3bOhV7.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-4s8GZJ73.js → index-CVDi4rS9.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Byto86PA.js → index-CXMeisJK.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DXNWsfbw.js → index-CZICtYJ0.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BpsIkWwQ.js → index-CdHMc9LQ.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CIbYQLD-.js → index-CdplnAS9.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DVnowoxR.js → index-CkN53KiJ.js} +1 -1
  122. package/src/assets/web-panel/assets/index-D-4tFek3.js +1 -0
  123. package/src/assets/web-panel/assets/{index-CLRMkKeD.js → index-D3pJBTvo.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-BVOyO-ZV.js → index-DBwBZwio.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DFkgqRqx.js → index-DE7bSYmW.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-hDo9-qDw.js → index-DRRY44XP.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BbTx5wo1.js → index-DVgTf7CZ.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BhYM_Rzp.js → index-Didyuq2Z.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DZKM2nm2.js → index-DtOTppk8.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-kdyFlPZw.js → index-KaSejHjf.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-svr-L6NS.js → index-OBhlHSMN.js} +3 -3
  132. package/src/assets/web-panel/assets/{index-B2bgL5vL.js → index-SmQfEHjp.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-Bujix_OR.js → index-Tg3yl8wc.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-BhhS0xnV.js → index-c8OqO3rq.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-CPsOp_T6.js → initDefaultProps-P8SBN6Di.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-8Jakob3_.js → motion-BubbjUT_.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-DAogsEBs.js → move-Chcykv0I.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-CkA9zZB_.js → mtc-parser-DyiYuGDu.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-DMHNkosQ.js → omit-Rdwb_Neb.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-ByIvo_lk.js → pickAttrs-CCr0MYHl.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-CafMUHzz.js → placementArrow-B1ZXz3bb.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-CTehELUQ.js → responsiveObserve-BGEdwej6.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-BQISQ1KV.js → slide-CpnsUMaT.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-Drm4jUoK.js → statusUtils-C7x-TVp_.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-DGniLRqn.js → styleChecker-CC5k_791.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-DYz_z9wn.js → useFlexGapSupport-BpZFKsJW.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-DRAPQMjC.js → useFs-CVq5HySy.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-CpgGLb8q.js → usePersonalDataHub-BGkdLryu.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-p6925VWJ.js → vnode-uLtOUEK-.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-ClpO8REK.js → zoom-BfVC9iUs.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +1 -1
  153. package/src/commands/agent.js +14 -1
  154. package/src/commands/ask.js +13 -8
  155. package/src/commands/chat.js +8 -5
  156. package/src/commands/cowork.js +18 -9
  157. package/src/commands/eval.js +100 -45
  158. package/src/commands/evolution-deployment.js +58 -0
  159. package/src/commands/hub.js +13 -7
  160. package/src/commands/setup.js +31 -1
  161. package/src/data/changelog.json +18 -5
  162. package/src/gateways/ws/personal-data-hub-protocol.js +12 -5
  163. package/src/lazy-dispatch.js +42 -6
  164. package/src/lib/agent-router.js +25 -23
  165. package/src/lib/chat-intent-service.js +3 -13
  166. package/src/lib/context-memory-kernel/provider-context.js +19 -3
  167. package/src/lib/cowork-adapter.js +9 -4
  168. package/src/lib/doctor-checkup.js +42 -0
  169. package/src/lib/eval/evidence.js +203 -0
  170. package/src/lib/eval/runner.js +16 -2
  171. package/src/lib/eval/trend.js +4 -3
  172. package/src/lib/evolution/agent-evolution-ingress.js +60 -8
  173. package/src/lib/evolution/evolution-deployment-config.js +217 -10
  174. package/src/lib/evolution/evolution-deployment-descriptor-revocations.js +131 -0
  175. package/src/lib/evolution/evolution-deployment-loader.js +126 -11
  176. package/src/lib/evolution/evolution-deployment-profile.js +281 -37
  177. package/src/lib/evolution/evolution-deployment-root-rotation.js +154 -0
  178. package/src/lib/evolution/governed-hub-llm.js +18 -12
  179. package/src/lib/evolution/governed-hub-skill.js +4 -17
  180. package/src/lib/evolution/governed-model-turn.js +7 -8
  181. package/src/lib/orchestrator.js +14 -8
  182. package/src/lib/personal-data-hub-wiring.js +7 -1
  183. package/src/lib/sub-agent-context.js +5 -1
  184. package/src/repl/chat-repl.js +8 -4
  185. package/src/runtime/agent-core.js +14 -0
  186. package/src/runtime/headless-runner.js +16 -0
  187. package/src/assets/web-panel/assets/EmailListRenderer-rcaSveQ8.js +0 -1
  188. package/src/assets/web-panel/assets/EvolutionSettings-B3dcSq1H.js +0 -1
  189. package/src/assets/web-panel/assets/Logs-B-7Dz5Ui.js +0 -2
  190. package/src/assets/web-panel/assets/PdhVaultBrowser-yYL7-rno.js +0 -7
  191. package/src/assets/web-panel/assets/Skills-BBkg1Eqr.js +0 -1
  192. package/src/assets/web-panel/assets/Tasks-QQWSk-tc.js +0 -1
  193. package/src/assets/web-panel/assets/devWarning-BUooUkHH.js +0 -1
  194. package/src/assets/web-panel/assets/index-DVu4QCII.js +0 -1
  195. package/src/assets/web-panel/assets/index-XYnz-yJ_.js +0 -1
@@ -1074,7 +1074,13 @@ async function initHub() {
1074
1074
  entityResolver,
1075
1075
  aichatAccountsStore,
1076
1076
  async drainResolver(options = {}, factory = null) {
1077
- if (factory === null) return entityResolver.drain(options);
1077
+ if (typeof factory !== "function") {
1078
+ const error = new Error(
1079
+ "Personal Data Hub resolver egress requires an authenticated evolution composition factory",
1080
+ );
1081
+ error.code = "CC_AGENT_EVOLUTION_INGRESS_FAILED";
1082
+ throw error;
1083
+ }
1078
1084
  const { createGovernedHubResolver } =
1079
1085
  await import("./evolution/governed-hub-resolver.js");
1080
1086
  const scoped = createGovernedHubResolver(
@@ -10,7 +10,11 @@
10
10
 
11
11
  import crypto from "crypto";
12
12
  import { CLIContextEngineering } from "./cli-context-engineering.js";
13
- import { agentLoop, buildSystemPrompt, AGENT_TOOLS } from "./agent-core.js";
13
+ import {
14
+ agentLoop,
15
+ buildSystemPrompt,
16
+ AGENT_TOOLS,
17
+ } from "../runtime/agent-core.js";
14
18
  import { feature } from "./feature-flags.js";
15
19
  import { isEvolutionIngressFailure } from "./model-failure-policy.js";
16
20
  import { captureAgentEvolutionIngress } from "./evolution/agent-evolution-ingress.js";
@@ -100,13 +100,17 @@ export async function startChatRepl(options = {}) {
100
100
  options.evolutionIngress == null
101
101
  ? null
102
102
  : captureAgentEvolutionIngress(options.evolutionIngress);
103
+ if (evolutionIngress === null) {
104
+ const error = new Error(
105
+ "Chat REPL model egress requires an authenticated evolution ingress",
106
+ );
107
+ error.code = "CC_AGENT_EVOLUTION_INGRESS_FAILED";
108
+ throw error;
109
+ }
103
110
  const admittedSessionId = options.sessionId
104
111
  ? assertChatSessionUsageAdmission(options.sessionId)
105
112
  : null;
106
- const evolutionSession =
107
- evolutionIngress === null
108
- ? null
109
- : createAgentEvolutionSessionLifecycle(evolutionIngress);
113
+ const evolutionSession = createAgentEvolutionSessionLifecycle(evolutionIngress);
110
114
  let model = options.model || "qwen2:7b";
111
115
  let provider = options.provider || "ollama";
112
116
  const baseUrl = options.baseUrl || "http://localhost:11434";
@@ -3620,6 +3620,10 @@ export async function executeTool(name, args, context = {}) {
3620
3620
  // never actually reached executeToolInner (sub-agents silently fell
3621
3621
  // back to config defaults and their usage was mis-attributed).
3622
3622
  llmOptions: context.llmOptions || null,
3623
+ // A spawned child is part of the same governed model run. Preserve the
3624
+ // already-captured ingress through the tool dispatcher so the child
3625
+ // cannot fall through to an unauthenticated provider boundary.
3626
+ evolutionIngress: context.evolutionIngress ?? null,
3623
3627
  // 用量归因: shared per-run sink for child-loop (sub-agent / isolated
3624
3628
  // skill) token usage, drained by agentLoop as attributed events.
3625
3629
  subAgentUsageSink: context.subAgentUsageSink || null,
@@ -5181,6 +5185,7 @@ async function executeToolInner(
5181
5185
  permanentMemory = null,
5182
5186
  subAgentContract = null,
5183
5187
  llmOptions,
5188
+ evolutionIngress = null,
5184
5189
  shellPolicyOverrides,
5185
5190
  classifyAllShell = false,
5186
5191
  approvalGate,
@@ -7029,6 +7034,7 @@ async function executeToolInner(
7029
7034
  interaction,
7030
7035
  sessionId,
7031
7036
  llmOptions,
7037
+ evolutionIngress,
7032
7038
  workflowEffectId,
7033
7039
  workflowChildEffectId,
7034
7040
  workflowChildSequence,
@@ -10206,6 +10212,9 @@ async function _executeSpawnSubAgent(args, ctx) {
10206
10212
  const parentLlm = ctx.llmOptions || {};
10207
10213
  const subLlmOptions = {
10208
10214
  ...parentLlm,
10215
+ ...(ctx.evolutionIngress != null
10216
+ ? { evolutionIngress: ctx.evolutionIngress }
10217
+ : {}),
10209
10218
  model: mdModel || parentLlm.model || undefined,
10210
10219
  // Preserve the host's optional event channel across every nesting level.
10211
10220
  // It is observational only: child hooks/tools must never depend on a
@@ -13109,8 +13118,12 @@ async function _getAutoCompactor(options) {
13109
13118
  options.evolutionIngress == null
13110
13119
  ? null
13111
13120
  : captureAgentEvolutionIngress(options.evolutionIngress);
13121
+ // The only ingress with this marker is the frozen Vitest sentinel admitted
13122
+ // by the test capture seam. Production ingress instances remain branded and
13123
+ // therefore always require the owned canonical compactor below.
13112
13124
  if (
13113
13125
  evolutionIngress !== null &&
13126
+ evolutionIngress.testOnlyUnownedCompaction !== true &&
13114
13127
  (typeof options.compactionLlmQuery === "function" ||
13115
13128
  (options._autoCompactor != null &&
13116
13129
  evolutionAutoCompactors.get(options._autoCompactor) !==
@@ -13667,6 +13680,7 @@ export async function* agentLoop(messages, options) {
13667
13680
  options.contextEngine?.permanentMemory ?? options.permanentMemory ?? null,
13668
13681
  // Parent LLM config — forwarded to spawn_sub_agent so a delegated subagent
13669
13682
  // inherits the provider/key and can override just the model (cc agents `model:`).
13683
+ evolutionIngress,
13670
13684
  llmOptions: {
13671
13685
  ...(evolutionIngress === null ? {} : { evolutionIngress }),
13672
13686
  provider: options.provider || null,
@@ -233,6 +233,22 @@ export function normalizePermissionMode(mode = "default") {
233
233
  return m;
234
234
  }
235
235
 
236
+ /**
237
+ * Validate command-line-only headless options before acquiring model egress.
238
+ * This deliberately has no side effects: malformed invocations must report
239
+ * their own input error even when an authenticated evolution deployment is
240
+ * unavailable.
241
+ */
242
+ export function validateHeadlessInvocationOptions(options = {}) {
243
+ const outputFormat = options.outputFormat || "text";
244
+ if (!VALID_OUTPUT_FORMATS.includes(outputFormat)) {
245
+ throw new Error(
246
+ `Invalid --output-format "${outputFormat}". Expected one of: ${VALID_OUTPUT_FORMATS.join(", ")}`,
247
+ );
248
+ }
249
+ normalizePermissionMode(options.permissionMode);
250
+ }
251
+
236
252
  /**
237
253
  * Resolve a --permission-mode string into the session-policy tier + a
238
254
  * non-interactive confirmer + whether to clamp tools to the read-only set.
@@ -1 +0,0 @@
1
- import{I as C,P as c,J as f,U as r,c as g,_ as k,R as n,V as l,K as d,Q as u,S as h,b as t}from"./vendor-Bn1JzzAn.js";import{_ as j}from"./index-svr-L6NS.js";import{aH as w}from"./icons-DG5UD-6K.js";const E={__name:"EmailListRenderer",props:{event:{type:Object,required:!0}},setup(_,{expose:m}){m();const a=_,e=t(()=>a.event.content||{}),i=t(()=>a.event.extra||{}),p=t(()=>e.value.from||e.value.sender||e.value.fromName||a.event.actor||"(未知发件人)"),s=t(()=>e.value.subject||e.value.title||"(无主题)"),y=t(()=>e.value.snippet||e.value.preview||e.value.body?.slice(0,100)||null),x=t(()=>Array.isArray(e.value.attachments)?e.value.attachments.length:typeof e.value.attachmentCount=="number"?e.value.attachmentCount:0),b=t(()=>i.value.category||e.value.category),S=t(()=>e.value.unread===!0),T=t(()=>{if(!a.event.occurredAt)return"";const o=new Date(a.event.occurredAt);return`${o.getFullYear()}-${String(o.getMonth()+1).padStart(2,"0")}-${String(o.getDate()).padStart(2,"0")} ${String(o.getHours()).padStart(2,"0")}:${String(o.getMinutes()).padStart(2,"0")}`}),v={props:a,c:e,e:i,fromText:p,subjectText:s,snippetText:y,attachmentCount:x,category:b,isUnread:S,formattedTime:T,computed:t,get MailOutlined(){return w}};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}},M={class:"email-row"},N={class:"left"},O={class:"body"},V={class:"head"},A={class:"from"},B={class:"time"},R={class:"subject"},D={key:0,class:"snippet"},L={class:"meta"};function P(_,m,a,e,i,p){const s=C("a-tag");return c(),f("div",M,[r("div",N,[g(e.MailOutlined,{class:k(["icon",{unread:e.isUnread}])},null,8,["class"])]),r("div",O,[r("div",V,[r("span",A,n(e.fromText),1),r("span",B,n(e.formattedTime),1)]),r("div",R,n(e.subjectText),1),e.snippetText?(c(),f("div",D,n(e.snippetText),1)):l("v-if",!0),r("div",L,[g(s,{color:"blue",class:"src"},{default:d(()=>[u(n(a.event.source.adapter),1)]),_:1}),e.attachmentCount>0?(c(),h(s,{key:0,color:"orange"},{default:d(()=>[u(" 📎 "+n(e.attachmentCount),1)]),_:1})):l("v-if",!0),e.category?(c(),h(s,{key:1},{default:d(()=>[u(n(e.category),1)]),_:1})):l("v-if",!0)])])])}const Y=j(E,[["render",P],["__scopeId","data-v-e4ddf632"],["__file","/tmp/cc-web-panel-PYeEgx/repo/packages/web-panel/src/components/pdh/renderers/EmailListRenderer.vue"]]);export{Y as default};
@@ -1 +0,0 @@
1
- import{I as l,J as V,U as p,c as a,K as t,o as k,r as m,a as R,b as O,P as C,Q as d,R as g,S as B,V as I}from"./vendor-Bn1JzzAn.js";import{_ as L,u as D,d as u}from"./index-svr-L6NS.js";import{R as j}from"./icons-DG5UD-6K.js";const H={__name:"EvolutionSettings",setup(N,{expose:o}){o();const E=D(),e=m(!1),v=m(!1),b=m(!1),i=m(""),c=m(""),n=R({source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[]}),P=O(()=>e.value||v.value||b.value);function _(s){Object.assign(n,s||{}),i.value=n.descriptorPath||"",c.value=n.trustRootPath||""}async function f(s,x=3e4){return await E.waitConnected(8e3),(await E.sendRaw(s,x)).result}async function y(){e.value=!0;try{_(await f({type:"evolution.deployment.status"}))}catch(s){u.error("读取配置失败:"+s.message)}finally{e.value=!1}}async function S(){if(!i.value.trim()||!c.value.trim()){u.warning("请填写描述符和信任根公钥的绝对路径");return}v.value=!0;try{_(await f({type:"evolution.deployment.configure",descriptorPath:i.value.trim(),trustRootPath:c.value.trim()},6e4)),u.success("签名校验通过,配置已保存并启用;自动发布仍为 HOLD")}catch(s){u.error("配置失败:"+s.message)}finally{v.value=!1}}async function w(){b.value=!0;try{_(await f({type:"evolution.deployment.set-enabled",enabled:!n.profileEnabled})),u.success(n.profileEnabled?"已启用":"已停用")}catch(s){u.error("更新失败:"+s.message)}finally{b.value=!1}}k(y);const r={ws:E,loading:e,saving:v,toggling:b,descriptorPath:i,trustRootPath:c,status:n,busy:P,apply:_,request:f,loadStatus:y,save:S,toggle:w,computed:O,onMounted:k,reactive:R,ref:m,get ReloadOutlined(){return j},get message(){return u},get useWsStore(){return D}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}},U={class:"page-head"},W={class:"mono"},J={class:"mono"};function q(N,o,E,e,v,b){const i=l("a-button"),c=l("a-alert"),n=l("a-input"),P=l("a-form-item"),_=l("a-space"),f=l("a-form"),y=l("a-card"),S=l("a-col"),w=l("a-tag"),r=l("a-descriptions-item"),s=l("a-descriptions"),x=l("a-row");return C(),V("div",null,[p("div",U,[o[3]||(o[3]=p("div",null,[p("h2",{class:"page-title"},"Skill 自进化配置"),p("p",{class:"page-sub"},"统一配置受治理部署;CLI、IDE 插件与 cc ui 共享。")],-1)),a(i,{loading:e.loading,onClick:e.loadStatus},{icon:t(()=>[a(e.ReloadOutlined)]),default:t(()=>[o[2]||(o[2]=d("刷新 ",-1))]),_:1},8,["loading"])]),a(c,{message:"不会开启自动发布",description:"此开关只启用经过签名的 Skill 自进化运行时。候选项进入 active 前仍需人工审核,自动发布始终保持 HOLD。",type:"warning","show-icon":"",class:"notice"}),a(x,{gutter:16},{default:t(()=>[a(S,{xs:24,xl:15},{default:t(()=>[a(y,{title:"签名部署",class:"panel-card"},{default:t(()=>[a(f,{layout:"vertical"},{default:t(()=>[a(P,{label:"签名部署描述符"},{extra:t(()=>[...o[4]||(o[4]=[d("Web 页面不能读取本机文件选择器,请填写运行 cc ui 的机器上的绝对路径。",-1)])]),default:t(()=>[a(n,{value:e.descriptorPath,"onUpdate:value":o[0]||(o[0]=h=>e.descriptorPath=h),disabled:e.busy,placeholder:"deployment descriptor JSON 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(P,{label:"Ed25519 信任根公钥"},{default:t(()=>[a(n,{value:e.trustRootPath,"onUpdate:value":o[1]||(o[1]=h=>e.trustRootPath=h),disabled:e.busy,placeholder:"信任根 public key 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(_,null,{default:t(()=>[a(i,{type:"primary",loading:e.saving,onClick:e.save},{default:t(()=>[...o[5]||(o[5]=[d("校验、保存并启用",-1)])]),_:1},8,["loading"]),a(i,{danger:e.status.profileEnabled,disabled:!e.status.descriptorPath,loading:e.toggling,onClick:e.toggle},{default:t(()=>[d(g(e.status.profileEnabled?"停用":"启用"),1)]),_:1},8,["danger","disabled","loading"])]),_:1})]),_:1})]),_:1})]),_:1}),a(S,{xs:24,xl:9},{default:t(()=>[a(y,{title:"治理状态",class:"panel-card status-card"},{default:t(()=>[a(s,{column:1,size:"small"},{default:t(()=>[a(r,{label:"生效状态"},{default:t(()=>[a(w,{color:e.status.effectiveEnabled?"green":"default"},{default:t(()=>[d(g(e.status.effectiveEnabled?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1}),a(r,{label:"生效来源"},{default:t(()=>[d(g(e.status.source||"none"),1)]),_:1}),a(r,{label:"签名校验"},{default:t(()=>[a(w,{color:e.status.verified?"green":"red"},{default:t(()=>[d(g(e.status.verified?"已通过":"未通过"),1)]),_:1},8,["color"])]),_:1}),a(r,{label:"自动发布"},{default:t(()=>[a(w,{color:"orange"},{default:t(()=>[...o[6]||(o[6]=[d("HOLD",-1)])]),_:1})]),_:1}),a(r,{label:"配置文件"},{default:t(()=>[p("span",W,g(e.status.profilePath||"—"),1)]),_:1}),a(r,{label:"允许命令"},{default:t(()=>[p("span",J,g((e.status.commands||[]).join(", ")||"—"),1)]),_:1})]),_:1}),e.status.error?(C(),B(c,{key:0,message:e.status.error,type:"error","show-icon":"",class:"error"},null,8,["message"])):I("v-if",!0)]),_:1})]),_:1})]),_:1})])}const Q=L(H,[["render",q],["__scopeId","data-v-5a42105e"],["__file","/tmp/cc-web-panel-PYeEgx/repo/packages/web-panel/src/views/EvolutionSettings.vue"]]);export{Q as default};
@@ -1,2 +0,0 @@
1
- import{I as s,J as g,U as d,c as n,K as _,V as x,S as W,R as S,F as E,Z as K,w as M,n as C,o as R,b as T,r,P as p,Q as O,_ as Q}from"./vendor-Bn1JzzAn.js";import{_ as U,u as N}from"./index-svr-L6NS.js";import{R as P}from"./icons-DG5UD-6K.js";const j={__name:"Logs",setup(V,{expose:a}){a();const k=N(),e=r("status"),y=r(!1),v=r(""),i=r(""),c=r(""),f=r(!0),o=r(null),h={status:"status",doctor:"doctor","skill-sources":"skill sources","llm-providers":"llm providers"},m=T(()=>i.value.split(`
2
- `)),b=T(()=>{if(!c.value)return m.value;const t=c.value.toLowerCase();return m.value.filter(u=>u.toLowerCase().includes(t))});function L(t){return t.includes("✖")||t.includes("error")||t.includes("Error")||t.includes("failed")?"line-error":t.includes("✔")||t.includes("✓")||t.includes("success")||t.includes("running")?"line-success":t.includes("warn")||t.includes("Warn")||t.includes("○")?"line-warn":t.startsWith(" ")||t.startsWith(" ")?"line-indent":""}function l(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function w(t){if(!c.value)return t;const u=c.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.replace(new RegExp(`(${u})`,"gi"),"<mark>$1</mark>")}async function B(){y.value=!0,v.value="",i.value="";const t=h[e.value]||"status";try{const{output:u}=await k.execute(t,3e4);i.value=u,f.value&&(await C(),o.value&&(o.value.scrollTop=o.value.scrollHeight))}catch(u){v.value=`执行失败: ${u.message}`,i.value=v.value}finally{y.value=!1}}M(b,async()=>{f.value&&(await C(),o.value&&(o.value.scrollTop=o.value.scrollHeight))}),R(B);const H={ws:k,activeTab:e,loading:y,error:v,rawOutput:i,searchQuery:c,autoScroll:f,logContainer:o,TAB_COMMANDS:h,allLines:m,filteredLines:b,lineClass:L,escapeHtml:l,highlightSearch:w,loadLog:B,ref:r,computed:T,watch:M,nextTick:C,onMounted:R,get ReloadOutlined(){return P},get useWsStore(){return N}};return Object.defineProperty(H,"__isScriptSetup",{enumerable:!1,value:!0}),H}},q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},z={style:{display:"flex",gap:"10px",margin:"12px 0"}},A={ref:"logContainer",class:"log-box"},D={key:0,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},F={key:1,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},I={key:2},J=["innerHTML"];function Y(V,a,k,e,y,v){const i=s("a-checkbox"),c=s("a-button"),f=s("a-space"),o=s("a-tab-pane"),h=s("a-tabs"),m=s("a-input-search"),b=s("a-tag"),L=s("a-spin");return p(),g("div",null,[d("div",q,[a[5]||(a[5]=d("div",null,[d("h2",{class:"page-title"},"日志查看"),d("p",{class:"page-sub"},"系统运行日志与诊断输出")],-1)),n(f,null,{default:_(()=>[n(i,{checked:e.autoScroll,"onUpdate:checked":a[0]||(a[0]=l=>e.autoScroll=l)},{default:_(()=>[...a[3]||(a[3]=[O("自动滚动",-1)])]),_:1},8,["checked"]),n(c,{type:"primary",ghost:"",loading:e.loading,onClick:e.loadLog},{icon:_(()=>[n(e.ReloadOutlined)]),default:_(()=>[a[4]||(a[4]=O(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),x(" Tab Selector "),n(h,{activeKey:e.activeTab,"onUpdate:activeKey":a[1]||(a[1]=l=>e.activeTab=l),onChange:e.loadLog,style:{"margin-bottom":"0"}},{default:_(()=>[n(o,{key:"status",tab:"系统状态"}),n(o,{key:"doctor",tab:"环境诊断"}),n(o,{key:"skill-sources",tab:"技能来源"}),n(o,{key:"llm-providers",tab:"LLM 提供商"})]),_:1},8,["activeKey"]),x(" Search Bar "),d("div",z,[n(m,{value:e.searchQuery,"onUpdate:value":a[2]||(a[2]=l=>e.searchQuery=l),placeholder:"搜索日志内容...","allow-clear":"",style:{flex:"1"}},null,8,["value"]),e.filteredLines.length!==e.allLines.length?(p(),W(b,{key:0,color:"blue"},{default:_(()=>[O(S(e.filteredLines.length)+" / "+S(e.allLines.length)+" 行 ",1)]),_:1})):x("v-if",!0)]),x(" Log Output "),d("div",A,[e.loading?(p(),g("div",D,[n(L,{size:"large"}),a[6]||(a[6]=d("div",{style:{"margin-top":"10px"}},"加载中...",-1))])):e.filteredLines.length?(p(),g("div",I,[(p(!0),g(E,null,K(e.filteredLines,(l,w)=>(p(),g("div",{key:w,class:Q(["log-line",e.lineClass(l)]),innerHTML:e.highlightSearch(e.escapeHtml(l))},null,10,J))),128))])):(p(),g("div",F,S(e.error||"暂无日志内容,点击刷新加载"),1))],512)])}const $=U(j,[["render",Y],["__scopeId","data-v-8c2906e0"],["__file","/tmp/cc-web-panel-PYeEgx/repo/packages/web-panel/src/views/Logs.vue"]]);export{$ as default};
@@ -1,7 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-HIyU-9c0.js","./vendor-Bn1JzzAn.js","./index-svr-L6NS.js","./icons-DG5UD-6K.js","./index-Cq93VfoF.css","./ChatBubbleRenderer-gy5SDGw2.css","./OrderTableRenderer-BX4PrVfN.js","./OrderTableRenderer-CfrDjSHT.css","./TimelineRenderer-DfI36Yg6.js","./TimelineRenderer-BlTAtkOc.css","./EmailListRenderer-rcaSveQ8.js","./EmailListRenderer-DTPZPx_S.css","./GenericCardRenderer-CWi8SGvx.js","./GenericCardRenderer-o85VDYQS.css"])))=>i.map(i=>d[i]);
2
- import{E as ue,r as x,b as w,I as y,P as u,J as O,U as v,c,S as C,V as E,_ as M,F as V,Z as se,a0 as ae,R,K as m,Q as b,W as L,o as J}from"./vendor-Bn1JzzAn.js";import{u as U}from"./usePersonalDataHub-CpgGLb8q.js";import{_ as D,e as F,d as P}from"./index-svr-L6NS.js";import{aa as q,ag as Q,M as z,aI as Y,v as G,aH as H,aq as K,ac as W,e as de,d as fe,k as pe,ai as me,aA as ge,R as _e}from"./icons-DG5UD-6K.js";import"./useShellMode-CgR0wCYM.js";const I=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),B=50,Z=300,X=ue("pdhBrowser",()=>{const r=x({...I}),t=x([]),n=x(null),e=x(!1),o=x(!1),a=x(null),l=x(null),s=x(!1),i=x({byCategory:{},byAdapter:{},bySubtype:{},total:0});let d=0,g=null;const j=w(()=>t.value.length>0),A=w(()=>n.value!=null);function h(S={}){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,...S}}async function _(){const S=++d;e.value=!0,a.value=null;const p=U();try{const[f,T]=await Promise.all([p.searchEvents(h({limit:B})),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(S!==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(S!==d)return;a.value=f&&f.message?f.message:String(f),t.value=[],n.value=null}finally{S===d&&(e.value=!1)}}async function k(){if(!n.value||o.value)return;o.value=!0,a.value=null;const S=U();try{const p=await S.searchEvents(h({cursor:n.value,limit:B}));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(S,p){if(!(S in I))throw new Error(`pdhBrowser.setFilter: unknown key "${S}"`);r.value={...r.value,[S]:p},g&&clearTimeout(g),g=setTimeout(()=>{g=null,_()},Z)}function ie(S){return r.value={...I,...S},g&&(clearTimeout(g),g=null),_()}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:_,loadMore:k,setFilter:le,setFilters:ie,reset:ce,PAGE_SIZE:B,SEARCH_DEBOUNCE_MS:Z}}),ye=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:K,email:H,shopping:G,travel:Y,system:z,"ai-chat":Q,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 K},get MailOutlined(){return H},get ShoppingOutlined(){return G},get CarOutlined(){return Y},get MobileOutlined(){return z},get RobotOutlined(){return Q},get CATEGORIES(){return ye},get categoryLabel(){return N}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},Se={class:"pdh-sidebar"},Oe=["onClick"],we={class:"label"};function Ce(r,t,n,e,o,a){const l=y("a-badge");return u(),O("div",Se,[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),O(V,null,se(e.CATEGORIES,s=>(u(),O("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,R(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,Oe))),128))])}const ke=D(he,[["render",Ce],["__scopeId","data-v-6b62a22e"],["__file","/tmp/cc-web-panel-PYeEgx/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((_,k)=>k[1]-_[1]).map(([_,k])=>({value:_,label:`${_} (${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 g(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[_,k]=h;o("set-filter","since",_?+_: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:g,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}},xe={class:"pdh-filter-bar"},Re={key:1,class:"hint"},je={key:2,class:"hint"};function Ae(r,t,n,e,o,a){const l=y("a-input-search"),s=y("a-select"),i=y("a-range-picker"),d=y("a-button");return u(),O("div",xe,[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]=g=>r.$emit("set-filter","adapter",g||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]=g=>r.$emit("reset"))},{icon:m(()=>[c(e.CloseCircleOutlined)]),default:m(()=>[t[2]||(t[2]=b(" 清空筛选 ",-1))]),_:1})):E("v-if",!0),n.shortQuery?(u(),O("span",Re,[c(e.InfoCircleOutlined),t[3]||(t[3]=b(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):n.mode==="like"?(u(),O("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-PYeEgx/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-HIyU-9c0.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),e=L(()=>F(()=>import("./OrderTableRenderer-BX4PrVfN.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),o=L(()=>F(()=>import("./TimelineRenderer-DfI36Yg6.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),a=L(()=>F(()=>import("./EmailListRenderer-rcaSveQ8.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),l=L(()=>F(()=>import("./GenericCardRenderer-CWi8SGvx.js"),__vite__mapDeps([12,1,2,3,4,13]),import.meta.url));function s(d){const g=d&&d.source&&d.source.adapter;switch($(g)){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-PYeEgx/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),g=oe(i,n.category);re(d,g,o[i]),P.success(`已导出 ${n.events.length} 条到 ${g}`)}catch(d){P.error(`导出失败: ${d.message||d}`)}}const s={props:n,hasResults:e,MIME:o,serialize:a,onClick:l,computed:w,get DownloadOutlined(){return ge},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=y("a-button"),s=y("a-menu-item"),i=y("a-menu"),d=y("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(" 导出 ("+R(n.events.length)+") ",1),c(e.DownOutlined)]),_:1},8,["disabled"])]),_:1},8,["disabled"])}const Be=D(Pe,[["render",qe],["__file","/tmp/cc-web-panel-PYeEgx/repo/packages/web-panel/src/components/pdh/ExportDropdown.vue"]]),Ve={__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 _e},get usePdhBrowserStore(){return X},get categoryLabel(){return N},CategorySidebar:ke,SearchFilterBar:Le,RendererDispatcher:Te,ExportDropdown:Be};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"},Qe={key:0},ze={key:0},Ye={key:1},Ge={class:"loaded-of"},He={class:"results-list"},Ke={key:2,class:"load-more"};function We(r,t,n,e,o,a){const l=y("a-tag"),s=y("a-button"),i=y("a-space"),d=y("a-col"),g=y("a-spin"),j=y("a-alert"),A=y("a-empty"),h=y("a-row");return u(),O("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]=_=>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]=_=>{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(),O("span",Qe,[c(g,{size:"small"}),t[7]||(t[7]=b(" 载入中… ",-1))])):(u(),O(V,{key:1},[v("strong",null,R(e.store.facets.total),1),t[11]||(t[11]=b(" 条事件 ",-1)),e.store.filters.category?(u(),O("span",ze,[t[8]||(t[8]=b(" / 当前类目 ",-1)),v("strong",null,R(e.categoryLabel(e.store.filters.category)),1),v("strong",null,R(e.store.facets.byCategory[e.store.filters.category]||0),1)])):E("v-if",!0),e.store.filters.q?(u(),O("span",Ye,[t[9]||(t[9]=b(' / 关键词 "',-1)),v("em",null,R(e.store.filters.q),1),t[10]||(t[10]=b('"',-1))])):E("v-if",!0),v("span",Ge," / 已显示 "+R(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",He,[(u(!0),O(V,null,se(e.store.results,(_,k)=>(u(),C(e.RendererDispatcher,{key:`r-${k}-${_.id}`,event:_},null,8,["event"]))),128))]),e.store.canLoadMore?(u(),O("div",Ke,[c(s,{loading:e.store.isAppending,onClick:t[2]||(t[2]=_=>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(Ve,[["render",We],["__scopeId","data-v-0f7c02cd"],["__file","/tmp/cc-web-panel-PYeEgx/repo/packages/web-panel/src/views/PdhVaultBrowser.vue"]]);export{nt as default};
@@ -1 +0,0 @@
1
- import{E,b as w,r as b,I as m,J as g,U as a,R as y,c as i,K as u,V as h,F as C,Z as L,N as O,o as M,P as p,Q as S,S as R}from"./vendor-Bn1JzzAn.js";import{u as I,_ as P}from"./index-svr-L6NS.js";import{u as q}from"./useShellMode-CgR0wCYM.js";import{p as N}from"./parsers-YNLm7sQ0.js";import{u as z}from"./chat-DGi3bmwL.js";import{aa as V,aq as j,R as B}from"./icons-DG5UD-6K.js";const A=E("skills",()=>{const _=b(!1),t=b([]),n=b(""),e=b("all"),k=w(()=>{const o=new Set(["all"]);return t.value.forEach(l=>{l.category&&o.add(l.category),l.executionMode&&o.add(l.executionMode)}),[...o]}),v=w(()=>{let o=t.value;if(e.value!=="all"&&(o=o.filter(l=>l.category===e.value||l.executionMode===e.value)),n.value){const l=n.value.toLowerCase();o=o.filter(d=>d.name?.toLowerCase().includes(l)||d.description?.toLowerCase().includes(l)||d.title?.toLowerCase().includes(l))}return o});async function f(){const o=I();_.value=!0;try{if(q().isEmbedded){const c=await o.sendRaw({type:"skill.list"},2e4);c?.ok&&Array.isArray(c.result?.skills)?t.value=c.result.skills:(console.error("skill.list custom topic failed:",c?.error),t.value=[]);return}const{output:l}=await o.execute("skill list",2e4),d=N(l);t.value=d}catch(l){console.error("Failed to load skills:",l)}finally{_.value=!1}}return{loading:_,allSkills:t,searchQuery:n,selectedCategory:e,categories:k,filteredSkills:v,loadSkills:f}}),F={__name:"Skills",setup(_,{expose:t}){t();const n=A(),e=z(),k=O(),v=w(()=>n.categories.filter(r=>r!=="all").slice(0,6));function f(r){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[r]||r}function o(r){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[r]||r||"未知"}function l(r){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[r]||"default"}async function d(r){await e.createSession("agent"),k.push("/chat"),setTimeout(()=>{e.currentSessionId&&e.sendMessage(e.currentSessionId,`/skill run ${r}`)},300)}M(()=>{n.allSkills.length||n.loadSkills()});const c={skillsStore:n,chatStore:e,router:k,displayCategories:v,catLabel:f,modeLabel:o,modeColor:l,runSkill:d,computed:w,onMounted:M,get useRouter(){return O},get ReloadOutlined(){return B},get PlayCircleOutlined(){return j},get AppstoreOutlined(){return V},get useSkillsStore(){return A},get useChatStore(){return z}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}},Q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},U={class:"page-sub"},T={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},D={key:0,style:{"text-align":"center",padding:"60px"}},G={class:"skills-grid"},J={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},K={style:{flex:"1","min-width":"0"}},W={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},Y={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Z={style:{"margin-left":"12px","flex-shrink":"0"}},H={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},X={style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}};function $(_,t,n,e,k,v){const f=m("a-button"),o=m("a-input-search"),l=m("a-radio-button"),d=m("a-radio-group"),c=m("a-spin"),r=m("a-tag"),x=m("a-card");return p(),g("div",null,[a("div",Q,[a("div",null,[t[3]||(t[3]=a("h2",{class:"page-title"},"技能管理",-1)),a("p",U,y(e.skillsStore.allSkills.length)+" 个可用技能",1)]),i(f,{type:"primary",ghost:"",loading:e.skillsStore.loading,onClick:t[0]||(t[0]=s=>e.skillsStore.loadSkills())},{icon:u(()=>[i(e.ReloadOutlined)]),default:u(()=>[t[4]||(t[4]=S(" 刷新 ",-1))]),_:1},8,["loading"])]),h(" Search & Filter "),a("div",T,[i(o,{value:e.skillsStore.searchQuery,"onUpdate:value":t[1]||(t[1]=s=>e.skillsStore.searchQuery=s),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),i(d,{value:e.skillsStore.selectedCategory,"onUpdate:value":t[2]||(t[2]=s=>e.skillsStore.selectedCategory=s),"button-style":"solid"},{default:u(()=>[i(l,{value:"all"},{default:u(()=>[...t[5]||(t[5]=[S("全部",-1)])]),_:1}),(p(!0),g(C,null,L(e.displayCategories,s=>(p(),R(l,{key:s,value:s},{default:u(()=>[S(y(e.catLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),h(" Loading State "),e.skillsStore.loading?(p(),g("div",D,[i(c,{size:"large"}),t[6]||(t[6]=a("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):e.skillsStore.filteredSkills.length?(p(),g(C,{key:1},[h(" Skills Grid "),a("div",G,[(p(!0),g(C,null,L(e.skillsStore.filteredSkills,s=>(p(),R(x,{key:s.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:u(()=>[a("div",J,[a("div",K,[a("div",W,y(s.name),1),a("div",Y,y(s.description||"暂无描述"),1)]),a("div",Z,[i(r,{color:e.modeColor(s.executionMode),style:{"font-size":"10px"}},{default:u(()=>[S(y(e.modeLabel(s.executionMode)),1)]),_:2},1032,["color"])])]),a("div",H,[i(f,{size:"small",type:"primary",ghost:"",onClick:ee=>e.runSkill(s.name)},{icon:u(()=>[i(e.PlayCircleOutlined)]),default:u(()=>[t[7]||(t[7]=S(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])],2112)):(p(),g(C,{key:2},[h(" Empty State "),a("div",X,[i(e.AppstoreOutlined,{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),a("div",null,y(e.skillsStore.allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)])],2112))])}const ie=P(F,[["render",$],["__scopeId","data-v-d64d43f5"],["__file","/tmp/cc-web-panel-PYeEgx/repo/packages/web-panel/src/views/Skills.vue"]]);export{ie as default};
@@ -1 +0,0 @@
1
- import{E,b as D,r as R,I as p,J as c,U as _,c as n,K as a,S as C,V as x,o as I,x as V,P as i,Q as k,R as r,F as T,Z as F}from"./vendor-Bn1JzzAn.js";import{u as P,_ as O}from"./index-svr-L6NS.js";import{R as U}from"./icons-DG5UD-6K.js";const B=E("tasks",()=>{const y=R([]),l=R(!1);let u=null,t=null,d=null;const b=D(()=>y.value.filter(e=>e.status==="running")),v=D(()=>y.value.filter(e=>e.status==="pending")),w=D(()=>y.value.filter(e=>e.status==="completed"||e.status==="failed"||e.status==="timeout"));async function s(){const e=P();l.value=!0;try{const g=await e.sendRaw({type:"tasks-list"});g&&Array.isArray(g.tasks)&&(y.value=g.tasks)}catch{}finally{l.value=!1}}async function m(e){const g=P();try{await g.sendRaw({type:"tasks-stop",taskId:e})}catch{}finally{await s()}}const f=R(null);function h(e=5e3){N(),s(),u=setInterval(s,e),S()}function N(){u&&(clearInterval(u),u=null),t&&(t(),t=null),d&&(clearTimeout(d),d=null)}function S(){const e=P();if(t)return;const g=z=>{z.type==="task:notification"&&z.payload?.task&&(f.value=z.payload.task,s(),d&&clearTimeout(d),d=setTimeout(()=>{f.value=null,d=null},8e3))};t=e.onRuntimeEvent(g)}function A(e){return!e||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${(e/6e4).toFixed(1)}m`}function o(e){switch(e){case"running":return"processing";case"pending":return"default";case"completed":return"success";case"failed":return"error";case"timeout":return"warning";default:return"default"}}return{tasks:y,loading:l,running:b,pending:v,completed:w,lastNotification:f,fetchTasks:s,stopTask:m,startPolling:h,stopPolling:N,formatDuration:A,getStatusColor:o}}),L={__name:"Tasks",setup(y,{expose:l}){l();const u=B(),t=[{title:"状态",key:"status",width:90},{title:"描述",key:"description",ellipsis:!0},{title:"类型",dataIndex:"type",width:100},{title:"耗时",key:"duration",width:90},{title:"创建时间",key:"createdAt",width:180},{title:"结果",key:"result",ellipsis:!0},{title:"操作",key:"action",width:80}];function d(s){return s.status==="running"&&s.startedAt?u.formatDuration(Date.now()-s.startedAt):s.completedAt&&s.startedAt?u.formatDuration(s.completedAt-s.startedAt):"-"}function b(s){return s?new Date(s).toLocaleString():"-"}function v(s,m){return s?s.length>m?`${s.slice(0,m)}...`:s:""}I(()=>u.startPolling(5e3)),V(()=>u.stopPolling());const w={store:u,columns:t,getDuration:d,formatTime:b,truncate:v,onMounted:I,onUnmounted:V,get ReloadOutlined(){return U},get useTasksStore(){return B}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}},j={class:"page-header"},J={key:0,class:"error-text"},K={key:1},M={class:"task-header"},Q={class:"task-desc"},W={class:"task-id"},Y={class:"task-meta"},Z=["title"],q={key:0,class:"error-text"},G={key:1,class:"success-text"},H={key:2,class:"muted-text"};function X(y,l,u,t,d,b){const v=p("a-button"),w=p("a-space"),s=p("a-alert"),m=p("a-statistic"),f=p("a-card"),h=p("a-col"),N=p("a-row"),S=p("a-tag"),A=p("a-table");return i(),c("div",null,[_("div",j,[l[3]||(l[3]=_("div",null,[_("h2",{class:"page-title"},"后台任务"),_("p",{class:"page-sub"},"查看后台任务队列、实时通知和任务执行结果。")],-1)),n(w,null,{default:a(()=>[n(v,{ghost:"",loading:t.store.loading,onClick:l[0]||(l[0]=o=>t.store.fetchTasks())},{icon:a(()=>[n(t.ReloadOutlined)]),default:a(()=>[l[2]||(l[2]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),t.store.lastNotification?(i(),C(s,{key:0,type:t.store.lastNotification.status==="completed"?"success":"error","show-icon":"",closable:"",class:"banner",onClose:l[1]||(l[1]=o=>t.store.lastNotification=null)},{message:a(()=>[k(" 任务"+r(t.store.lastNotification.status==="completed"?"完成":"结束")+": "+r(t.store.lastNotification.description||t.store.lastNotification.id.slice(0,16)),1)]),description:a(()=>[t.store.lastNotification.error?(i(),c("span",J,r(t.store.lastNotification.error),1)):t.store.lastNotification.result?(i(),c("span",K,r(t.truncate(String(t.store.lastNotification.result),120)),1)):x("v-if",!0)]),_:1},8,["type"])):x("v-if",!0),n(N,{gutter:[16,16],class:"stats-row"},{default:a(()=>[n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"全部任务",value:t.store.tasks.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"运行中",value:t.store.running.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"等待中",value:t.store.pending.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"已完成",value:t.store.completed.length},null,8,["value"])]),_:1})]),_:1})]),_:1}),t.store.running.length>0?(i(),C(f,{key:1,title:"运行中的任务",class:"panel-card",size:"small"},{default:a(()=>[(i(!0),c(T,null,F(t.store.running,o=>(i(),c("div",{key:o.id,class:"task-item running"},[_("div",M,[n(S,{color:t.store.getStatusColor(o.status)},{default:a(()=>[k(r(o.status.toUpperCase()),1)]),_:2},1032,["color"]),_("span",Q,r(o.description),1),_("span",W,r(o.id.slice(0,16)),1)]),_("div",Y,[_("span",null,"类型: "+r(o.type||"-"),1),_("span",null,"已运行: "+r(t.store.formatDuration(Date.now()-o.startedAt)),1),n(v,{size:"small",danger:"",onClick:e=>t.store.stopTask(o.id)},{default:a(()=>[...l[4]||(l[4]=[k("停止",-1)])]),_:1},8,["onClick"])])]))),128))]),_:1})):x("v-if",!0),n(f,{class:"panel-card"},{default:a(()=>[n(A,{columns:t.columns,"data-source":t.store.tasks,pagination:{pageSize:15,size:"small"},loading:t.store.loading,"row-key":"id",size:"small"},{bodyCell:a(({column:o,record:e})=>[o.key==="status"?(i(),C(S,{key:0,color:t.store.getStatusColor(e.status)},{default:a(()=>[k(r(e.status),1)]),_:2},1032,["color"])):o.key==="description"?(i(),c("span",{key:1,title:e.command},r(e.description),9,Z)):o.key==="duration"?(i(),c(T,{key:2},[k(r(t.getDuration(e)),1)],64)):o.key==="createdAt"?(i(),c(T,{key:3},[k(r(t.formatTime(e.createdAt)),1)],64)):o.key==="result"?(i(),c(T,{key:4},[e.error?(i(),c("span",q,r(t.truncate(e.error,60)),1)):e.result?(i(),c("span",G,r(t.truncate(String(e.result),60)),1)):(i(),c("span",H,"-"))],64)):o.key==="action"?(i(),c(T,{key:5},[e.status==="running"?(i(),C(v,{key:0,size:"small",danger:"",onClick:g=>t.store.stopTask(e.id)},{default:a(()=>[...l[5]||(l[5]=[k(" 停止 ",-1)])]),_:1},8,["onClick"])):x("v-if",!0)],64)):x("v-if",!0)]),_:1},8,["data-source","loading"])]),_:1})])}const st=O(L,[["render",X],["__scopeId","data-v-da5ff6a2"],["__file","/tmp/cc-web-panel-PYeEgx/repo/packages/web-panel/src/views/Tasks.vue"]]);export{st as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-svr-L6NS.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-BuMLhd8M.js";import{a0 as t}from"./index-svr-L6NS.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-CTehELUQ.js";import"./useFlexGapSupport-DYz_z9wn.js";import"./styleChecker-DGniLRqn.js";import"./index-BJ6nxb18.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-CagxV1O8.js";import{a0 as t}from"./index-svr-L6NS.js";import"./vendor-Bn1JzzAn.js";import"./index-BJ6nxb18.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};