chainlesschain 0.166.44 → 0.166.45

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 (194) 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-CrMhYNeH.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-H2RKuS8V.js → ActionButton-DLY5blZ3.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-CBPFBB61.js → Analytics-C0NhKQB0.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-Da-3Laze.js → AppLayout-DLyepgMq.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-DiRQ9yzD.js → Artifacts-Depk01Sa.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-C9LtWEBh.js → Audit-jKe6NQ3J.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-4rpi7fVg.js → BackgroundAgents-CG4GKT9s.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-B8VQmHys.js → Backup-DYWCkzwM.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-iCVpF2DK.js → BaseInput-xm5vodmJ.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-BrQaXBwC.js → Chat-B20_PNd3.js} +5 -5
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-HIyU-9c0.js → ChatBubbleRenderer-D4d-eh0F.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-CsV__0_R.js → Checkbox-CfgwkV_r.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-BvFeCIAE.js → Codegen-DbnoWI44.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-CagxV1O8.js → Col-CfzzhgGw.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-DAWr4ahG.js → Community-BU7mGM8p.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-Ba49Tdc2.js → Compact-DpYim0an.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-Brk-MSO4.js → Compliance-BNJcO6ra.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-DeKH1v0o.js → Cowork-CecZ-pWj.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-AHB-T-VL.js → Cron-BG_C1fe3.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-Zbcrtimh.js → Crosschain-BAeILQLL.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-ByFa1MWG.js → DID-CYqOEkXi.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-9jKovyuH.js → Dashboard-BYU8wmL1.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-DY8TaXi5.js → Dropdown-DYlJeTTa.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-rcaSveQ8.js → EmailListRenderer-C0M6py3K.js} +1 -1
  27. package/src/assets/web-panel/assets/EvolutionSettings-_QnjPFZJ.js +1 -0
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-5ao8smvA.js → FamilyGuardDashboard-Du90iDch.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-RTpNXXHT.js → Federation-DkFp_hzB.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-DWZvRMWv.js → FormItemContext-BGgtGTfG.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-CWi8SGvx.js → GenericCardRenderer-BIDsSCei.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-CCLgDIqs.js → Git--d3Te93J.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-DUuyKrQl.js → Governance-CZwD0vmO.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-RkFcM2A0.js → Inference-DiDcSFEW.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-C-QTauZr.js → KnowledgeGraph-Bi0hSfzg.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-B-7Dz5Ui.js → Logs-C8NHSc0K.js} +2 -2
  37. package/src/assets/web-panel/assets/{MarkdownRenderer-CgiHBe0A.js → MarkdownRenderer-DfDuADqF.js} +1 -1
  38. package/src/assets/web-panel/assets/{Marketplace-CK1kSFDt.js → Marketplace-D6kD0bNf.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-BcaVwoY6.js → McpTools-mTSamCr5.js} +2 -2
  40. package/src/assets/web-panel/assets/{Memory-QEI4xRwF.js → Memory-YQBXfLjU.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-BqD-R0Ek.js → MobileBridge-D2awuupp.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-CwFoXf1M.js → MobileProjects-Bl7lZc_-.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-CTZ6qICG.js → Mtc-CBqjLK2Q.js} +5 -5
  44. package/src/assets/web-panel/assets/{MtcAudit-Cn7y2BzO.js → MtcAudit-C4poRInZ.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-BCjsdGiN.js → Multisig-C_J0zXYZ.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-CupTVNtA.js → NLProgramming-Ci43sWOU.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-C8kO3mGt.js → Notes-DN7A-GFZ.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-Cn-MJ8sQ.js → NotificationSettings-D5jNm71V.js} +1 -1
  49. package/src/assets/web-panel/assets/OrderTableRenderer-C9UsPOG8.js +1 -0
  50. package/src/assets/web-panel/assets/{Organization-G_RjOL7M.js → Organization-BapYMJrP.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-BvX644ya.js → Overflow-BwxwjhFw.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-yWmLgYgQ.js → P2P-TObXXOu3.js} +2 -2
  53. package/src/assets/web-panel/assets/PdhVaultBrowser-UwJvMbFO.js +7 -0
  54. package/src/assets/web-panel/assets/{Permissions-DtU8fhcZ.js → Permissions-Damnxv-O.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-B17Vyk-x.js → PersonalDataHub-d_7jlBb-.js} +5 -5
  56. package/src/assets/web-panel/assets/{Pipeline-BZUsTyhP.js → Pipeline-DA87VjLw.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-BswdhlPL.js → Privacy-DzO_UvWn.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-sJxSlY0C.js → ProjectInit-CwqECDhs.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-BnbpdOke.js → ProjectSettings-CT5YdIl6.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-DUjauf-6.js → Projects-D3KdZPCv.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-DhF5I-UR.js → Providers-BjBIS8kk.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-B3PeCAGo.js → QrScannerModal-mMFqiKkI.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-Cpaxrabg.js → QuickAsk-BwGi9ZU1.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-DqXFF66-.js → Recommend-BY65SR5s.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-DtDQ76Ox.js → RemoteSession-BGsVH_XU.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-BgLLKwu2.js → Reputation-DpPbxSgI.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-BuMLhd8M.js → Row-B5YBYoVz.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-BizxUzBA.js → RssFeed-DvM5jaoh.js} +2 -2
  69. package/src/assets/web-panel/assets/{Search-CYNrJAQY.js → Search-6RX39EPO.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-CIC02soH.js → Security-Beal-7cM.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-DD3WxXxw.js → Services-D6rjVLe-.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-C-d9Mbos.js → Skeleton-Dur7R7vz.js} +1 -1
  73. package/src/assets/web-panel/assets/Skills-D1QkGwMk.js +1 -0
  74. package/src/assets/web-panel/assets/{Sla-DgrqUhns.js → Sla-3ObrX8Es.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-CDXFwOHX.js → SpeechSettings-DG_KAiH1.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-BBio_v8M.js → SyncSettings-BaHq0SJ2.js} +2 -2
  77. package/src/assets/web-panel/assets/Tasks-BDpAkBAB.js +1 -0
  78. package/src/assets/web-panel/assets/{Templates-RAPdM85o.js → Templates-tYdoRd-c.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-2jI745PC.js → Tenant-yGS5zIQ1.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-ZCtYBMAe.js → Terminal-B3QbmVFa.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-DfI36Yg6.js → TimelineRenderer-B_7Pr5dS.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-NQ1VaO0W.js → Tokens-DPvpDa53.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-DwFh5AMe.js → Trigger-DcSAD0GZ.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-Dr0v45uH.js → Trust-BBzEq-uy.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-i7Q1Bdqr.js → UkeySign-Dssav7-5.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-CXSkk4gl.js → VideoEditing-CPOZf4yi.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-8_cAjou4.js → Wallet-BzBVRXEq.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-jn_3Gma7.js → WebAuthn-DdSGaCCh.js} +4 -4
  89. package/src/assets/web-panel/assets/{WorkflowEditor-BmvodVLl.js → WorkflowEditor-CKjBFoSs.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-DGi3bmwL.js → chat-B9aMGLg0.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-D8OSTOU0.js → colors-GFCMctSV.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-DfNygJU_.js → compact-item-BqSDFAYJ.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-B0lT0dbj.js → createContext-BwUm3Ffp.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-LxtRBsCm.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-Xtzg_EDR.js → hasIn-DN1kMJOT.js} +1 -1
  96. package/src/assets/web-panel/assets/index-36hxBH-o.js +1 -0
  97. package/src/assets/web-panel/assets/{index-De9jsBiC.js → index-7W1e9Vi4.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DZKM2nm2.js → index-B4MfxM5W.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DFkgqRqx.js → index-B4dI_csl.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BVOyO-ZV.js → index-B7Yu5wwV.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-svr-L6NS.js → index-B9Pe-EyB.js} +3 -3
  102. package/src/assets/web-panel/assets/{index-Cp-yGWti.js → index-BBMW8bQO.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DEH5ms1R.js → index-BCnbC2z7.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DVfE2S0f.js → index-BDL2MwxN.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-B4-hl9Rw.js → index-BHUxz4dy.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-B2bgL5vL.js → index-BL_0ndQc.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BbTx5wo1.js → index-BPGlcDvs.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BFRkiqtr.js → index-BeycSy7n.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BBegBTDb.js → index-BpiR6uzH.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-4s8GZJ73.js → index-BwssFWI1.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BBR-_Pkv.js → index-By9GbJhu.js} +1 -1
  112. package/src/assets/web-panel/assets/index-C0b78zWZ.js +1 -0
  113. package/src/assets/web-panel/assets/{index-DXNWsfbw.js → index-CEMl-Qte.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Byto86PA.js → index-CH2wK5dx.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-Cx_EAQEh.js → index-CRikhGgx.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-ConAvib0.js → index-Ci0zIpSX.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CShl59Um.js → index-Cli0VREv.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BpsIkWwQ.js → index-CmEHzOsw.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BhYM_Rzp.js → index-Cwih67e8.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BJ6nxb18.js → index-D8jcp9Rj.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DWpRgQvO.js → index-DAK28GY8.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BhS9-r8Z.js → index-DI90Wo_P.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BhhS0xnV.js → index-DO-IKERp.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-B-B7DDjX.js → index-DaFr7XB1.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-kdyFlPZw.js → index-DbDhKroq.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CyVOaMS7.js → index-DnJt9DaX.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-EV-o-rTH.js → index-DvvJWwT8.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Bujix_OR.js → index-PJt1Zrx2.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CLRMkKeD.js → index-PKwZkQDC.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-hDo9-qDw.js → index-THsr_UUJ.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-B0kDqFPU.js → index-bwb4cg_D.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CIbYQLD-.js → index-rCTtYCGu.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DVnowoxR.js → index-tMF_deZb.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-B3ittRaJ.js → index-y7cfh9rP.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-CPsOp_T6.js → initDefaultProps-B6e5CZ5p.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-8Jakob3_.js → motion-riMM1KfJ.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-DAogsEBs.js → move-C1NSDMjc.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-CkA9zZB_.js → mtc-parser-Bibuny9B.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-DMHNkosQ.js → omit-Cmf6FoRn.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-ByIvo_lk.js → pickAttrs-BSsYBUCY.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-CafMUHzz.js → placementArrow-gSB7-GAS.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-CTehELUQ.js → responsiveObserve-qaqttvKa.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-BQISQ1KV.js → slide-RX2gxl3k.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-Drm4jUoK.js → statusUtils-DEJmkhqw.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-DGniLRqn.js → styleChecker-CIWmJ78O.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-DYz_z9wn.js → useFlexGapSupport-D-UPSQBE.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-DRAPQMjC.js → useFs-9QFtqADc.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-CpgGLb8q.js → usePersonalDataHub-DM6kyift.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-p6925VWJ.js → vnode-C-q6FNSJ.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-ClpO8REK.js → zoom-D4WJY2m8.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 +19 -2
  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 +5 -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/evolution-deployment-config.js +217 -10
  173. package/src/lib/evolution/evolution-deployment-descriptor-revocations.js +131 -0
  174. package/src/lib/evolution/evolution-deployment-loader.js +23 -2
  175. package/src/lib/evolution/evolution-deployment-profile.js +281 -37
  176. package/src/lib/evolution/evolution-deployment-root-rotation.js +154 -0
  177. package/src/lib/evolution/governed-hub-llm.js +18 -12
  178. package/src/lib/evolution/governed-hub-skill.js +4 -17
  179. package/src/lib/evolution/governed-model-turn.js +7 -8
  180. package/src/lib/orchestrator.js +14 -8
  181. package/src/lib/personal-data-hub-wiring.js +7 -1
  182. package/src/lib/sub-agent-context.js +5 -1
  183. package/src/repl/agent-repl.js +1 -1
  184. package/src/repl/chat-repl.js +8 -4
  185. package/src/runtime/agent-core.js +35 -9
  186. package/src/runtime/headless-runner.js +16 -0
  187. package/src/assets/web-panel/assets/EvolutionSettings-B3dcSq1H.js +0 -1
  188. package/src/assets/web-panel/assets/OrderTableRenderer-BX4PrVfN.js +0 -1
  189. package/src/assets/web-panel/assets/PdhVaultBrowser-yYL7-rno.js +0 -7
  190. package/src/assets/web-panel/assets/Skills-BBkg1Eqr.js +0 -1
  191. package/src/assets/web-panel/assets/Tasks-QQWSk-tc.js +0 -1
  192. package/src/assets/web-panel/assets/devWarning-BUooUkHH.js +0 -1
  193. package/src/assets/web-panel/assets/index-DVu4QCII.js +0 -1
  194. 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";
@@ -2954,7 +2954,7 @@ export async function startAgentRepl(options = {}) {
2954
2954
  const sessionBudgetRootScope = { root: null };
2955
2955
  const runtimeOptions = {
2956
2956
  ...options,
2957
- ...(evolutionIngress === null ? {} : { evolutionIngress }),
2957
+ evolutionIngress,
2958
2958
  ...(structuredMemoryControlPlane === null
2959
2959
  ? {}
2960
2960
  : {
@@ -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
@@ -10934,6 +10943,13 @@ export async function chatWithTools(rawMessages, options) {
10934
10943
  options.evolutionIngress == null
10935
10944
  ? null
10936
10945
  : captureAgentEvolutionIngress(options.evolutionIngress);
10946
+ if (evolutionIngress === null) {
10947
+ const error = new Error(
10948
+ "Agent model egress requires an authenticated evolution ingress",
10949
+ );
10950
+ error.code = "CC_AGENT_EVOLUTION_INGRESS_FAILED";
10951
+ throw error;
10952
+ }
10937
10953
  const {
10938
10954
  provider,
10939
10955
  model,
@@ -10982,14 +10998,12 @@ export async function chatWithTools(rawMessages, options) {
10982
10998
  })
10983
10999
  : providerMessages;
10984
11000
 
10985
- if (evolutionIngress !== null) {
10986
- const projected = await evolutionIngress.prepareModelRequest({
10987
- messages,
10988
- tools,
10989
- });
10990
- messages = projected.messages;
10991
- tools = projected.tools;
10992
- }
11001
+ const projected = await evolutionIngress.prepareModelRequest({
11002
+ messages,
11003
+ tools,
11004
+ });
11005
+ messages = projected.messages;
11006
+ tools = projected.tools;
10993
11007
 
10994
11008
  throwIfAborted(signal);
10995
11009
 
@@ -13109,8 +13123,12 @@ async function _getAutoCompactor(options) {
13109
13123
  options.evolutionIngress == null
13110
13124
  ? null
13111
13125
  : captureAgentEvolutionIngress(options.evolutionIngress);
13126
+ // The only ingress with this marker is the frozen Vitest sentinel admitted
13127
+ // by the test capture seam. Production ingress instances remain branded and
13128
+ // therefore always require the owned canonical compactor below.
13112
13129
  if (
13113
13130
  evolutionIngress !== null &&
13131
+ evolutionIngress.testOnlyUnownedCompaction !== true &&
13114
13132
  (typeof options.compactionLlmQuery === "function" ||
13115
13133
  (options._autoCompactor != null &&
13116
13134
  evolutionAutoCompactors.get(options._autoCompactor) !==
@@ -13516,8 +13534,15 @@ export async function* agentLoop(messages, options) {
13516
13534
  options.evolutionIngress == null
13517
13535
  ? null
13518
13536
  : captureAgentEvolutionIngress(options.evolutionIngress);
13537
+ if (evolutionIngress === null) {
13538
+ const error = new Error(
13539
+ "Agent loop requires an authenticated evolution ingress",
13540
+ );
13541
+ error.code = "CC_AGENT_EVOLUTION_INGRESS_FAILED";
13542
+ throw error;
13543
+ }
13519
13544
  let llmCall = configuredChatFn || chatWithTools;
13520
- if (evolutionIngress !== null && configuredChatFn) {
13545
+ if (configuredChatFn) {
13521
13546
  const { captureCanonicalFallbackChatFn } =
13522
13547
  await import("./fallback-model.js");
13523
13548
  llmCall = captureCanonicalFallbackChatFn(
@@ -13667,6 +13692,7 @@ export async function* agentLoop(messages, options) {
13667
13692
  options.contextEngine?.permanentMemory ?? options.permanentMemory ?? null,
13668
13693
  // Parent LLM config — forwarded to spawn_sub_agent so a delegated subagent
13669
13694
  // inherits the provider/key and can override just the model (cc agents `model:`).
13695
+ evolutionIngress,
13670
13696
  llmOptions: {
13671
13697
  ...(evolutionIngress === null ? {} : { evolutionIngress }),
13672
13698
  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 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 +0,0 @@
1
- import{I as w,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as g,b as a}from"./vendor-Bn1JzzAn.js";import{_ as S}from"./index-svr-L6NS.js";import"./icons-DG5UD-6K.js";const k={__name:"OrderTableRenderer",props:{event:{type:Object,required:!0}},setup(p,{expose:r}){r();const o=p,e=a(()=>o.event.content||{}),d=a(()=>o.event.extra||{}),m=a(()=>d.value.merchant||e.value.merchant||e.value.counterparty||"—"),c=a(()=>e.value.title||e.value.name||e.value.itemName||e.value.text||"—"),y=a(()=>{const t=e.value.amount??e.value.price??e.value.total;return t==null?"—":`${e.value.currency||"¥"} ${typeof t=="number"?t.toFixed(2):t}`}),T=a(()=>d.value.orderNo||e.value.orderNo||e.value.orderId),f=a(()=>e.value.status||e.value.state),b=a(()=>{const t=(f.value||"").toLowerCase();return t.includes("成功")||t.includes("succe")||t.includes("paid")?"green":t.includes("退")||t.includes("refund")?"orange":t.includes("失败")||t.includes("fail")?"red":"default"}),h=a(()=>{if(!o.event.occurredAt)return"";const t=new Date(o.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),x={props:o,c:e,e:d,merchantText:m,itemText:c,amountText:y,orderNo:T,statusText:f,statusColor:b,formattedTime:h,computed:a};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},V={class:"row"},R={class:"val"},B={class:"row"},D={class:"val"},I={class:"row amount-row"},P={class:"val amount"},j={key:0,class:"row"},A={class:"val mono"},E={key:1,class:"row"};function F(p,r,o,e,d,m){const c=w("a-tag");return l(),u("div",N,[s("div",C,[s("span",O,n(e.formattedTime),1),i(c,{color:"gold"},{default:v(()=>[_(n(o.event.source.adapter),1)]),_:1}),i(c,null,{default:v(()=>[_(n(o.event.subtype),1)]),_:1})]),s("div",V,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",R,n(e.merchantText),1)]),s("div",B,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",D,n(e.itemText),1)]),s("div",I,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",P,n(e.amountText),1)]),e.orderNo?(l(),u("div",j,[r[3]||(r[3]=s("span",{class:"key"},"单号",-1)),s("span",A,n(e.orderNo),1)])):g("v-if",!0),e.statusText?(l(),u("div",E,[r[4]||(r[4]=s("span",{class:"key"},"状态",-1)),i(c,{color:e.statusColor},{default:v(()=>[_(n(e.statusText),1)]),_:1},8,["color"])])):g("v-if",!0)])}const J=S(k,[["render",F],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-PYeEgx/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{J 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};