chainlesschain 0.166.48 → 0.166.56

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 (172) hide show
  1. package/README.md +22 -0
  2. package/package.json +1 -1
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-BLGEffkh.js → AIOps-CBFnwYRX.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-Cz1z2VGD.js → ActionButton-Sl4eXWpR.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-C3j9cf6q.js → Analytics-DB0lD9Kb.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-BR9ERuCA.js → AppLayout-j77EmkRK.js} +3 -3
  8. package/src/assets/web-panel/assets/{Artifacts-CozJCm4y.js → Artifacts-CU3izCW9.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-DC5g9Ra2.js → Audit-C44fSibb.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-B1zrQ0dW.js → BackgroundAgents-pM_NnJW3.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-ChVnfjpm.js → Backup-AOHXqhxN.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-8_vLQsLf.js → BaseInput-DaYc8oA_.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-Dct9bm6L.js → Chat-CmlCAXxW.js} +5 -5
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BvoSsCKh.js → ChatBubbleRenderer-CkCSkJDJ.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-DZQIsCIC.js → Checkbox-DISI7iaA.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-CdzHxmnq.js → Codegen-BYpeKUpf.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-DdAN8LeW.js → Col-Dk6VwWGq.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-CNgjT9MA.js → Community-BDyTedMu.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-BtQiX6G-.js → Compact-CTNlGM9X.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-OGX5ma3j.js → Compliance-C_tw3IdT.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-CgugQnGM.js → Cowork-cduHWEmo.js} +3 -3
  22. package/src/assets/web-panel/assets/{Cron-Bpg7cPFD.js → Cron-Dqotjv-s.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-D1hsuswf.js → Crosschain-ByW7RsJQ.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-miDRsMBw.js → DID-BI-lafPj.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-CGcl8htP.js → Dashboard-8m50TRZL.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-BFaxTdVE.js → Dropdown-CN3hmRTc.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-BQdGLZIO.js → EmailListRenderer-t0lzxsDT.js} +1 -1
  28. package/src/assets/web-panel/assets/EvolutionSettings-DabpA3cQ.js +1 -0
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-c1WVC_--.js → FamilyGuardDashboard-BYN4UshY.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-DyAcFrQY.js → Federation-n44OtIXp.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-CfwpfD2B.js → FormItemContext-B-WXDu_I.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-DkJcbBpS.js → GenericCardRenderer-Bm7v-mTf.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-DgYIrPJh.js → Git-BMIS6sbo.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-BF1tYPJ6.js → Governance-B1EhHobE.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference-BFkwRIrU.js → Inference-Dy_HJWHo.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-DpCoqhBa.js → KnowledgeGraph-BVdfUbZy.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-DU2qAJmD.js → Logs-Dph_oLQk.js} +2 -2
  38. package/src/assets/web-panel/assets/MarkdownRenderer-CNHYqcxm.js +1 -0
  39. package/src/assets/web-panel/assets/{Marketplace-Dz9NUrfo.js → Marketplace-Bw4HWORj.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-B67I3d5v.js → McpTools-Be6DPfA1.js} +2 -2
  41. package/src/assets/web-panel/assets/{Memory-crkElJSy.js → Memory-DlvLafC9.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-BO20VbdX.js → MobileBridge-Upc_Jwlt.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileProjects-Ba-3gZZd.js → MobileProjects-I17jrUbY.js} +1 -1
  44. package/src/assets/web-panel/assets/{Mtc-BAHZM084.js → Mtc-DyBzY0GH.js} +2 -2
  45. package/src/assets/web-panel/assets/{MtcAudit-CL3DzajL.js → MtcAudit-2-7xAwEo.js} +2 -2
  46. package/src/assets/web-panel/assets/{Multisig-BSWWzvWH.js → Multisig-DtUZpFmZ.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-fnxqXM_3.js → NLProgramming-iInH7jBr.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-qUZPIQXT.js → Notes-BO3Z3vaS.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-x9Xrixqu.js → NotificationSettings-ClX_0jFE.js} +1 -1
  50. package/src/assets/web-panel/assets/{OrderTableRenderer-BtMtQUt7.js → OrderTableRenderer-Czw742w4.js} +1 -1
  51. package/src/assets/web-panel/assets/{Organization-C946Hzna.js → Organization-BATEx24i.js} +4 -4
  52. package/src/assets/web-panel/assets/{Overflow-BYf8KIts.js → Overflow-B_PXMNia.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-Cbqf5dnv.js → P2P-BSiE8PqT.js} +2 -2
  54. package/src/assets/web-panel/assets/PdhVaultBrowser-BbklUgZY.js +7 -0
  55. package/src/assets/web-panel/assets/{Permissions-CZBw45EW.js → Permissions-B7bpflT_.js} +3 -3
  56. package/src/assets/web-panel/assets/{PersonalDataHub-BKwUAt43.js → PersonalDataHub-BWZS4BLy.js} +4 -4
  57. package/src/assets/web-panel/assets/{Pipeline-DmFD2QW4.js → Pipeline-DP2YSs6H.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-KpuwWvt5.js → Privacy-DB9ptoH0.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-Bt8UheX6.js → ProjectInit-BAfePyYk.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-2ZeAn9CP.js → ProjectSettings-BEXn4Cm3.js} +2 -2
  61. package/src/assets/web-panel/assets/{Projects-zBuet8Zs.js → Projects-BzSs0rzn.js} +1 -1
  62. package/src/assets/web-panel/assets/{Providers-DcEAnw6L.js → Providers-CRX9TdRO.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-qF7liYG9.js → QrScannerModal-DUWcSY5L.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-qiESlVBJ.js → QuickAsk-Cgo3Z_hs.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-Bk-cQyi9.js → Recommend-Dcinx0IW.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-CwrekErS.js → RemoteSession-BMZzTnAN.js} +2 -2
  67. package/src/assets/web-panel/assets/{Reputation-Bmw_UQtW.js → Reputation-BdZzpOp9.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-CPdqZIUX.js → Row-DqM8GVcx.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-D_W-xxvS.js → RssFeed-Soj_QBK3.js} +2 -2
  70. package/src/assets/web-panel/assets/{Search-Hu0oDFj_.js → Search-Cn2es0-v.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-DeRxUwmq.js → Security-t7C4hz3n.js} +4 -4
  72. package/src/assets/web-panel/assets/{Services-CsNmHFkf.js → Services-ChF-e_Uf.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-gv_Vz0tN.js → Skeleton-BiPIyK-2.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-Dgg-_rCB.js → Skills-HgkKJenJ.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-Bpu-bsEJ.js → Sla-BSfluv_k.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-CrhleHuF.js → SpeechSettings-Sm0Gz9tM.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-JHjUN6I9.js → SyncSettings-DlhBMnfU.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-DKRWKkl9.js → Tasks-C7OUvsnp.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-leiWntLq.js → Templates-CrMtw87y.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant--1bYulvn.js → Tenant-DSNSB6j5.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-C0y6FvSS.js → Terminal-Cmh78FQg.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-CQK4PVv4.js → TimelineRenderer-BE8b8lHR.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-DbIvF-DV.js → Tokens-BrtgdIvJ.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-CkXJ2vuq.js → Trigger-HCmaoKDp.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-B02WXJPw.js → Trust-GASQ4F-2.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-VPMkfzmw.js → UkeySign-B8kSzWGr.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-C5ezUnah.js → VideoEditing-Nn-clhv5.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-CYfvYRrY.js → Wallet-DdYMKTYk.js} +4 -4
  89. package/src/assets/web-panel/assets/{WebAuthn-DtKl-kpr.js → WebAuthn-xJXUr_eK.js} +4 -4
  90. package/src/assets/web-panel/assets/{WorkflowEditor-DACITF-u.js → WorkflowEditor-CbSa87av.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-qnygfnLi.js → chat-CVrNLGUV.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-D4mISLBD.js → colors-e2veLfIA.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-BBPfxYGL.js → compact-item-CNd7nhUq.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-Byx4ndHp.js → createContext-DEudTVqv.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-DW7he-SA.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-CGjLkkn3.js → hasIn-BlSAFZa3.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B8UpadHC.js → index-0y7tHZdT.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B9jH-h4X.js → index-4ZT0vIJt.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DboTeuPF.js → index-7-7rr4Mf.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BxQF1wCU.js → index-B1C1wS5c.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-Dzni_5Qw.js → index-BG-VNepa.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BNe2lCk6.js → index-BMIhGZUR.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CFMWjuav.js → index-BRNCKg4q.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BN7_TSgU.js → index-B_UNX_xq.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Dmfe0L2Z.js → index-BmVFeSEq.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-D_g9mA1N.js → index-Bp4Gcn9u.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CZjNamSU.js → index-BpH6T1gA.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BklGH3YI.js → index-BptI9bLu.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-xzRKTy0R.js → index-Bqeb4jnC.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Y7el_3WS.js → index-Bwtt-0CQ.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-ByA1NyFP.js → index-C4h_Bvd2.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CsVuQsY1.js → index-C6zGNZ5H.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CMj8qmpX.js → index-CHMrAZiR.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CVUJjQAT.js → index-CK6Rb66R.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CWhI8G14.js → index-CU4Y4VVN.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-C3abGsSW.js → index-CWuv47z0.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-J5JkStvY.js → index-CYNoXhxl.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-C9tcHs46.js → index-CgVwz2jD.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-lKJWAmd4.js → index-ClROBPWd.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-O09jXbir.js → index-D7yJceTZ.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-c_tBkIlU.js → index-DFv-nsIT.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B_fHPZ8E.js → index-DFzvcZ3Q.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CydHMjwc.js → index-DJ5gsewX.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CoA8WsVr.js → index-DVORJydf.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BmKYaaGP.js → index-D_D7lcnQ.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BzeBBAl5.js → index-DtrqgNBl.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DH6iC5b2.js → index-DwjWRUTf.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CD5Btq6p.js → index-DyFZ7gDd.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DfgpKd64.js → index-Ec6VBiV-.js} +1 -1
  130. package/src/assets/web-panel/assets/index-IkoHuWRe.js +1 -0
  131. package/src/assets/web-panel/assets/{index-Ne8UGllV.js → index-Jk99aZIr.js} +3 -3
  132. package/src/assets/web-panel/assets/{index-DZXhKAk9.js → index-Lm9pm1zm.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-CmHE-lY_.js → index-MuTb62K6.js} +1 -1
  134. package/src/assets/web-panel/assets/index-MwqsDbb1.js +1 -0
  135. package/src/assets/web-panel/assets/{index-Cpg3AWRy.js → index-hzUfIn4u.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-XuhfEIhB.js → initDefaultProps-C6fpNcA5.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-Cbxh6AxO.js → motion-Bjh9Come.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-C7IEnFly.js → move-DFa4ul-_.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-lLADx4LL.js → mtc-parser-KoYqA_e5.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-mIbic_k-.js → omit-ByTjP-wG.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-_xIYEqu3.js → pickAttrs-CG_rmTxx.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-ClB-E0ny.js → placementArrow-LDePZ8V9.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-D36Bg2ut.js → responsiveObserve-DZFzH4RR.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-CUuO08Bl.js → slide-DfXQyTvD.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-BKahwLbv.js → statusUtils-CuhqsJfO.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-2pT-T8vy.js → styleChecker-qqVjJw5u.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-DyH5g7Rg.js → useFlexGapSupport-BPxnCxcb.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-CTOauB3X.js → useFs-D11NLCjV.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-B02JYIMe.js → usePersonalDataHub-HbZVcaCX.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-Do22wQrc.js → vnode-CZHQlfTu.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-BfnL7rit.js → zoom-CV3rUknJ.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/commands/context.js +31 -11
  154. package/src/commands/evolution-deployment.js +70 -0
  155. package/src/data/changelog.json +65 -0
  156. package/src/gateways/ws/evolution-deployment-topic-handlers.js +20 -0
  157. package/src/harness/prompt-compressor.js +12 -4
  158. package/src/lib/evolution/evolution-deployment-config.js +16 -1
  159. package/src/lib/evolution/evolution-deployment-profile.js +102 -58
  160. package/src/lib/evolution/evolution-test-deployment.js +386 -0
  161. package/src/lib/model-context-window.js +3 -2
  162. package/src/lib/runtime-usage-ledger.js +5 -0
  163. package/src/repl/agent-repl.js +19 -4
  164. package/src/runtime/agent-core.js +13 -0
  165. package/src/runtime/headless-runner.js +4 -0
  166. package/src/runtime/headless-stream.js +9 -1
  167. package/src/assets/web-panel/assets/EvolutionSettings-bMvgBk6r.js +0 -1
  168. package/src/assets/web-panel/assets/MarkdownRenderer-QWv7UJLq.js +0 -1
  169. package/src/assets/web-panel/assets/PdhVaultBrowser-rmxp0cuF.js +0 -7
  170. package/src/assets/web-panel/assets/devWarning-DBy6gsuI.js +0 -1
  171. package/src/assets/web-panel/assets/index-BfEDXk_E.js +0 -1
  172. package/src/assets/web-panel/assets/index-CrxUwNM8.js +0 -1
@@ -0,0 +1,386 @@
1
+ import {
2
+ createPrivateKey,
3
+ createPublicKey,
4
+ generateKeyPairSync,
5
+ randomUUID,
6
+ sign as signBytes,
7
+ } from "node:crypto";
8
+ import {
9
+ existsSync,
10
+ mkdirSync,
11
+ readFileSync,
12
+ renameSync,
13
+ unlinkSync,
14
+ writeFileSync,
15
+ } from "node:fs";
16
+ import { dirname, isAbsolute, join, resolve } from "node:path";
17
+ import { configureEvolutionDeployment } from "./evolution-deployment-config.js";
18
+ import {
19
+ EVOLUTION_DEPLOYMENT_DESCRIPTOR_SCHEMA,
20
+ computeEvolutionDeploymentDigest,
21
+ serializeEvolutionDeploymentDescriptorPayload,
22
+ verifyEvolutionDeployment,
23
+ } from "./evolution-deployment-loader.js";
24
+ import {
25
+ getEvolutionDeploymentProfilePath,
26
+ readEvolutionDeploymentProfile,
27
+ } from "./evolution-deployment-profile.js";
28
+ import {
29
+ EVOLUTION_DEPLOYMENT_ROOT_ROTATION_SCHEMA,
30
+ serializeEvolutionDeploymentRootRotationPayload,
31
+ } from "./evolution-deployment-root-rotation.js";
32
+ import {
33
+ PRIVATE_FILE_MODE,
34
+ ensurePrivateDirectory,
35
+ ensurePrivateFile,
36
+ } from "../secure-fs.js";
37
+
38
+ export const EVOLUTION_TEST_DEPLOYMENT_COMMANDS = Object.freeze([
39
+ "agent",
40
+ "ask",
41
+ "chat",
42
+ "compact",
43
+ "complete",
44
+ "cowork",
45
+ "desktop",
46
+ "evolution",
47
+ "hub",
48
+ "learning",
49
+ "marketplace",
50
+ "orchestrate",
51
+ "serve",
52
+ "skill",
53
+ "stream",
54
+ "ui",
55
+ ]);
56
+
57
+ const TEST_PRIVATE_KEY_FILE = "test-signing-private.pem";
58
+ const TEST_TRUST_ROOT_FILE = "test-signing-public.pem";
59
+ const TEST_DESCRIPTOR_FILE = "test-deployment.json";
60
+ const TEST_README_FILE = "README-TEST-ONLY.txt";
61
+ const MAX_MODULE_BYTES = 4 * 1024 * 1024;
62
+
63
+ function writePrivateAtomic(filePath, value) {
64
+ ensurePrivateDirectory(dirname(filePath));
65
+ const temporaryPath = join(
66
+ dirname(filePath),
67
+ `.${filePath.split(/[\\/]/u).at(-1)}.${randomUUID()}.tmp`,
68
+ );
69
+ try {
70
+ writeFileSync(temporaryPath, value, {
71
+ flag: "wx",
72
+ mode: PRIVATE_FILE_MODE,
73
+ });
74
+ ensurePrivateFile(temporaryPath);
75
+ renameSync(temporaryPath, filePath);
76
+ ensurePrivateFile(filePath);
77
+ } catch (error) {
78
+ try {
79
+ unlinkSync(temporaryPath);
80
+ } catch {
81
+ // The temporary file was not created or has already been renamed.
82
+ }
83
+ throw error;
84
+ }
85
+ }
86
+
87
+ function assertNoEnvironmentOverride(env) {
88
+ if (
89
+ env.CHAINLESSCHAIN_EVOLUTION_DEPLOYMENT_DESCRIPTOR ||
90
+ env.CHAINLESSCHAIN_EVOLUTION_DEPLOYMENT_TRUST_ROOT
91
+ ) {
92
+ throw new Error(
93
+ "test deployment setup requires the Evolution deployment environment overrides to be unset",
94
+ );
95
+ }
96
+ }
97
+
98
+ function normalizeCommands(commands) {
99
+ const value =
100
+ commands === undefined
101
+ ? [...EVOLUTION_TEST_DEPLOYMENT_COMMANDS]
102
+ : typeof commands === "string"
103
+ ? commands
104
+ .split(",")
105
+ .map((command) => command.trim())
106
+ .filter(Boolean)
107
+ : Array.isArray(commands)
108
+ ? [...commands]
109
+ : null;
110
+ if (!value || value.length === 0 || new Set(value).size !== value.length)
111
+ throw new TypeError(
112
+ "test deployment commands must be a non-empty unique list",
113
+ );
114
+ return value.sort();
115
+ }
116
+
117
+ function readRevision(descriptorPath) {
118
+ if (!existsSync(descriptorPath)) return 0;
119
+ try {
120
+ const descriptor = JSON.parse(readFileSync(descriptorPath, "utf8"));
121
+ if (!Number.isSafeInteger(descriptor.revision) || descriptor.revision < 1)
122
+ throw new Error("revision is invalid");
123
+ return descriptor.revision;
124
+ } catch (error) {
125
+ throw new Error(
126
+ "existing test deployment descriptor cannot be refreshed",
127
+ error instanceof Error ? { cause: error } : undefined,
128
+ );
129
+ }
130
+ }
131
+
132
+ function assertSigningPair(privateKeyBytes, trustRootBytes) {
133
+ let privateKey;
134
+ let actualPublic;
135
+ let expectedPublic;
136
+ try {
137
+ privateKey = createPrivateKey(privateKeyBytes);
138
+ actualPublic = createPublicKey(privateKey).export({
139
+ type: "spki",
140
+ format: "der",
141
+ });
142
+ expectedPublic = createPublicKey(trustRootBytes).export({
143
+ type: "spki",
144
+ format: "der",
145
+ });
146
+ } catch {
147
+ throw new Error("test deployment signing key pair is invalid");
148
+ }
149
+ if (!Buffer.from(actualPublic).equals(Buffer.from(expectedPublic)))
150
+ throw new Error(
151
+ "test deployment signing key does not match its trust root",
152
+ );
153
+ return privateKey;
154
+ }
155
+
156
+ function claimFreshTestRoot(profilePath) {
157
+ const parent = dirname(profilePath);
158
+ const preferred = join(parent, "test-deployment");
159
+ ensurePrivateDirectory(parent);
160
+ for (const candidate of [
161
+ preferred,
162
+ join(parent, `test-deployment-${randomUUID()}`),
163
+ ]) {
164
+ try {
165
+ mkdirSync(candidate, { mode: 0o700 });
166
+ ensurePrivateDirectory(candidate);
167
+ return candidate;
168
+ } catch (error) {
169
+ if (error?.code !== "EEXIST") throw error;
170
+ }
171
+ }
172
+ throw new Error("could not allocate a private test deployment directory");
173
+ }
174
+
175
+ function testReadme({ modulePath, descriptorPath, trustRootPath }) {
176
+ return `ChainlessChain Skill evolution development environment / 仅限测试开发
177
+
178
+ This directory contains an automatically generated Ed25519 TEST key. It is not
179
+ a production certificate, HSM/KMS identity, reviewer identity, or production
180
+ approval. Automatic active promotion remains HOLD.
181
+
182
+ 本目录包含自动生成的 Ed25519 测试密钥,只用于正式部署前联调。它不属于生产证书、
183
+ HSM/KMS 身份或审核身份,也不会解除人工审核和 automatic active promotion HOLD。
184
+
185
+ Deployment host: ${modulePath}
186
+ Signed descriptor: ${descriptorPath}
187
+ Test trust root: ${trustRootPath}
188
+
189
+ Re-run "cc evolution deployment init-test --module <absolute-path>" after the
190
+ host module changes. When the managed descriptor and trust root are available,
191
+ run "cc evolution deployment replace-test --descriptor <path> --trust-root <path>".
192
+
193
+ 部署宿主模块变更后请重新执行 init-test 刷新摘要和签名。正式 descriptor 与 trust
194
+ root 到位后执行 replace-test;CLI 会用测试根签发一次根轮换证明并切换到正式配置。
195
+ `;
196
+ }
197
+
198
+ /**
199
+ * Generate or refresh a local-only Ed25519 deployment wrapper for an existing
200
+ * development host. The ordinary descriptor verifier and profile writer remain
201
+ * the only activation path; this helper never bypasses deployment admission.
202
+ */
203
+ export async function initializeEvolutionTestDeployment(
204
+ { modulePath, commands, enabled = true },
205
+ options = {},
206
+ ) {
207
+ const env = options.env || process.env;
208
+ const resolveRealPath =
209
+ options.resolveRealPath ||
210
+ (async (value) => {
211
+ const { realpath } = await import("node:fs/promises");
212
+ return realpath(value);
213
+ });
214
+ assertNoEnvironmentOverride(env);
215
+ if (typeof modulePath !== "string" || !modulePath.trim())
216
+ throw new TypeError(
217
+ "an absolute test deployment host module path is required",
218
+ );
219
+ const requestedModulePath = modulePath.trim();
220
+ if (!isAbsolute(requestedModulePath))
221
+ throw new TypeError("test deployment host module path must be absolute");
222
+ const realModulePath = await resolveRealPath(requestedModulePath);
223
+ const moduleBytes = readFileSync(realModulePath);
224
+ if (moduleBytes.byteLength === 0 || moduleBytes.byteLength > MAX_MODULE_BYTES)
225
+ throw new Error("test deployment host module size is invalid");
226
+
227
+ const saved = await readEvolutionDeploymentProfile(options);
228
+ if (saved.error) throw new Error(saved.error);
229
+ if (saved.profile && saved.profile.deploymentMode !== "test") {
230
+ const error = new Error(
231
+ "a managed Evolution deployment profile already exists; test setup will not replace it",
232
+ );
233
+ error.code = "EVOLUTION_TEST_DEPLOYMENT_MANAGED_PROFILE_EXISTS";
234
+ throw error;
235
+ }
236
+
237
+ const requestedTestRoot = saved.profile
238
+ ? dirname(saved.profile.descriptorPath)
239
+ : claimFreshTestRoot(
240
+ options.filePath || getEvolutionDeploymentProfilePath(options),
241
+ );
242
+ ensurePrivateDirectory(requestedTestRoot);
243
+ // macOS exposes /var through the /private/var real path. Persist and compare
244
+ // the physical path so a refresh does not mistake those aliases for two
245
+ // different credential directories.
246
+ const testRoot = await resolveRealPath(requestedTestRoot);
247
+ const privateKeyPath = join(testRoot, TEST_PRIVATE_KEY_FILE);
248
+ const trustRootPath = join(testRoot, TEST_TRUST_ROOT_FILE);
249
+ const descriptorPath = join(testRoot, TEST_DESCRIPTOR_FILE);
250
+ let privateKeyBytes;
251
+ let trustRootBytes;
252
+ let generated = false;
253
+ if (saved.profile) {
254
+ const [savedDescriptorPath, savedTrustRootPath, savedPrivateKeyPath] =
255
+ await Promise.all([
256
+ resolveRealPath(saved.profile.descriptorPath),
257
+ resolveRealPath(saved.profile.trustRootPath),
258
+ resolveRealPath(saved.profile.testPrivateKeyPath),
259
+ ]);
260
+ if (
261
+ resolve(savedDescriptorPath) !== resolve(descriptorPath) ||
262
+ resolve(savedTrustRootPath) !== resolve(trustRootPath) ||
263
+ resolve(savedPrivateKeyPath) !== resolve(privateKeyPath)
264
+ ) {
265
+ throw new Error("saved test deployment paths are inconsistent");
266
+ }
267
+ ensurePrivateFile(privateKeyPath);
268
+ ensurePrivateFile(trustRootPath);
269
+ privateKeyBytes = readFileSync(privateKeyPath);
270
+ trustRootBytes = readFileSync(trustRootPath);
271
+ } else {
272
+ const { privateKey, publicKey } = generateKeyPairSync("ed25519");
273
+ privateKeyBytes = privateKey.export({ type: "pkcs8", format: "pem" });
274
+ trustRootBytes = publicKey.export({ type: "spki", format: "pem" });
275
+ writePrivateAtomic(privateKeyPath, privateKeyBytes);
276
+ writePrivateAtomic(trustRootPath, trustRootBytes);
277
+ generated = true;
278
+ }
279
+ const privateKey = assertSigningPair(privateKeyBytes, trustRootBytes);
280
+ const descriptor = {
281
+ schema: EVOLUTION_DEPLOYMENT_DESCRIPTOR_SCHEMA,
282
+ revision: readRevision(descriptorPath) + 1,
283
+ modulePath: realModulePath,
284
+ moduleDigest: computeEvolutionDeploymentDigest(moduleBytes),
285
+ trustRootDigest: computeEvolutionDeploymentDigest(trustRootBytes),
286
+ commands: normalizeCommands(commands),
287
+ };
288
+ descriptor.signature = signBytes(
289
+ null,
290
+ Buffer.from(serializeEvolutionDeploymentDescriptorPayload(descriptor)),
291
+ privateKey,
292
+ ).toString("base64");
293
+ writePrivateAtomic(
294
+ descriptorPath,
295
+ `${JSON.stringify(descriptor, null, 2)}\n`,
296
+ );
297
+ writePrivateAtomic(
298
+ join(testRoot, TEST_README_FILE),
299
+ testReadme({ modulePath: realModulePath, descriptorPath, trustRootPath }),
300
+ );
301
+
302
+ const status = await configureEvolutionDeployment(
303
+ {
304
+ descriptorPath,
305
+ trustRootPath,
306
+ enabled,
307
+ deploymentMode: "test",
308
+ testPrivateKeyPath: privateKeyPath,
309
+ },
310
+ options,
311
+ );
312
+ return Object.freeze({
313
+ ...status,
314
+ generated,
315
+ testRootPath: testRoot,
316
+ warning:
317
+ "TEST ONLY: local development credentials; automatic active promotion remains HOLD",
318
+ });
319
+ }
320
+
321
+ /** Replace an active generated test root with an operator-signed deployment. */
322
+ export async function replaceEvolutionTestDeployment(
323
+ { descriptorPath, trustRootPath },
324
+ options = {},
325
+ ) {
326
+ const env = options.env || process.env;
327
+ assertNoEnvironmentOverride(env);
328
+ const saved = await readEvolutionDeploymentProfile(options);
329
+ if (saved.error) throw new Error(saved.error);
330
+ if (saved.profile?.deploymentMode !== "test") {
331
+ const error = new Error(
332
+ "the saved Evolution deployment is not a generated test deployment",
333
+ );
334
+ error.code = "EVOLUTION_TEST_DEPLOYMENT_NOT_ACTIVE";
335
+ throw error;
336
+ }
337
+ const destination = await verifyEvolutionDeployment(
338
+ { descriptorPath, trustRootPath },
339
+ options,
340
+ );
341
+ ensurePrivateFile(saved.profile.testPrivateKeyPath);
342
+ ensurePrivateFile(saved.profile.trustRootPath);
343
+ const privateKeyBytes = readFileSync(saved.profile.testPrivateKeyPath);
344
+ const fromTrustRootBytes = readFileSync(saved.profile.trustRootPath);
345
+ const privateKey = assertSigningPair(privateKeyBytes, fromTrustRootBytes);
346
+ if (
347
+ computeEvolutionDeploymentDigest(fromTrustRootBytes) !==
348
+ saved.profile.activeTrustRootDigest
349
+ ) {
350
+ throw new Error(
351
+ "generated test trust root does not match the active profile",
352
+ );
353
+ }
354
+ const rotation = {
355
+ schema: EVOLUTION_DEPLOYMENT_ROOT_ROTATION_SCHEMA,
356
+ fromTrustRootDigest: saved.profile.activeTrustRootDigest,
357
+ toTrustRootDigest: destination.descriptor.trustRootDigest,
358
+ minimumDescriptorRevision: destination.descriptor.revision,
359
+ };
360
+ rotation.signature = signBytes(
361
+ null,
362
+ Buffer.from(serializeEvolutionDeploymentRootRotationPayload(rotation)),
363
+ privateKey,
364
+ ).toString("base64");
365
+ const rotationPath = join(
366
+ dirname(saved.profile.descriptorPath),
367
+ "managed-root-rotation.json",
368
+ );
369
+ writePrivateAtomic(rotationPath, `${JSON.stringify(rotation, null, 2)}\n`);
370
+ const status = await configureEvolutionDeployment(
371
+ {
372
+ descriptorPath,
373
+ trustRootPath,
374
+ rootRotationPath: rotationPath,
375
+ enabled: true,
376
+ deploymentMode: "managed",
377
+ testPrivateKeyPath: null,
378
+ },
379
+ options,
380
+ );
381
+ return Object.freeze({
382
+ ...status,
383
+ replacedTestDeployment: true,
384
+ rootRotationPath: rotationPath,
385
+ });
386
+ }
@@ -2,6 +2,7 @@ import { resolveModelCapabilityProfile } from "./model-capabilities.js";
2
2
 
3
3
  export { CONTEXT_WINDOWS } from "./model-context-catalog.js";
4
4
 
5
- export function getContextWindow(model, provider) {
6
- return resolveModelCapabilityProfile({ model, provider }).contextWindowTokens;
5
+ export function getContextWindow(model, provider, options = {}) {
6
+ return resolveModelCapabilityProfile({ ...options, model, provider })
7
+ .contextWindowTokens;
7
8
  }
@@ -162,6 +162,11 @@ export function projectRuntimeTokenUsage(event = {}) {
162
162
  ...(projectedOperationId ? { operationId: projectedOperationId } : {}),
163
163
  ...(event.source ? { source: source(event.source) } : {}),
164
164
  ...(attribution ? { attribution } : {}),
165
+ ...(Number.isSafeInteger(event.contextWindow) &&
166
+ event.contextWindow >= 1024 &&
167
+ event.contextWindow <= 16777216
168
+ ? { contextWindow: event.contextWindow }
169
+ : {}),
165
170
  };
166
171
  }
167
172
 
@@ -5579,6 +5579,7 @@ async function startAgentReplInWorkspaceOwned(
5579
5579
  let _customStatus = false; // true when a settings.json command is configured
5580
5580
  let _curModel = model; // tracks the per-turn active model for the readout
5581
5581
  let _ctxUsedTokens = 0;
5582
+ let _ctxRequestWindow = null;
5582
5583
  let _turnCount = 0;
5583
5584
  const _costStore = newCostStore(); // running token spend for `/cost`
5584
5585
  let _renderStatus = null;
@@ -5598,7 +5599,8 @@ async function startAgentReplInWorkspaceOwned(
5598
5599
  provider,
5599
5600
  cwd: process.cwd(),
5600
5601
  usedTokens: _ctxUsedTokens,
5601
- contextWindow: getContextWindow(_curModel, provider),
5602
+ contextWindow:
5603
+ _ctxRequestWindow ?? getContextWindow(_curModel, provider, options),
5602
5604
  turn: _turnCount,
5603
5605
  });
5604
5606
  // Custom command wins; otherwise the built-in context-usage render.
@@ -7190,7 +7192,9 @@ async function startAgentReplInWorkspaceOwned(
7190
7192
  messages,
7191
7193
  estimateTokens,
7192
7194
  );
7193
- const window = getContextWindow(model, provider) || 0;
7195
+ const window =
7196
+ _ctxRequestWindow ??
7197
+ (getContextWindow(model, provider, options) || 0);
7194
7198
  logger.log(chalk.bold("\nContext usage (live session):"));
7195
7199
  const rows = [
7196
7200
  ["system", buckets.system, counts.system],
@@ -9756,8 +9760,19 @@ async function startAgentReplInWorkspaceOwned(
9756
9760
  _curModel = activeModel;
9757
9761
  _turnCount += 1;
9758
9762
  if (usageEvents?.length) {
9759
- const last = usageEvents[usageEvents.length - 1]?.usage || {};
9760
- const used = (last.input_tokens || 0) + (last.output_tokens || 0);
9763
+ const lastCall = [...usageEvents]
9764
+ .reverse()
9765
+ .find(
9766
+ (event) =>
9767
+ !event.attribution && (!event.source || event.source === "model"),
9768
+ );
9769
+ _ctxRequestWindow = lastCall?.contextWindow ?? null;
9770
+ const last = lastCall?.usage || {};
9771
+ const used =
9772
+ (last.input_tokens || 0) +
9773
+ (last.output_tokens || 0) +
9774
+ (last.cache_read_input_tokens || 0) +
9775
+ (last.cache_creation_input_tokens || 0);
9761
9776
  if (used > 0) _ctxUsedTokens = used;
9762
9777
  }
9763
9778
 
@@ -13497,6 +13497,8 @@ async function _getAutoCompactor(options) {
13497
13497
  compressor = new PromptCompressor({
13498
13498
  model: options.model,
13499
13499
  provider: options.provider,
13500
+ baseUrl: options.baseUrl,
13501
+ contextMemoryModelWindowTokens: options.contextMemoryModelWindowTokens,
13500
13502
  llmQuery,
13501
13503
  summaryInputMaxChars: options.compactionInputMaxChars,
13502
13504
  });
@@ -15154,6 +15156,16 @@ export async function* agentLoop(messages, options) {
15154
15156
  }
15155
15157
  : {}),
15156
15158
  };
15159
+ // Resolve before dispatch, including compatibility/skip-planning runs.
15160
+ // The panel and persisted transcript use this same request configuration.
15161
+ const requestContextWindow =
15162
+ canonicalProviderContext?.modelCapabilities?.contextWindowTokens ??
15163
+ resolveModelCapabilityProfile({
15164
+ provider: options.provider || "ollama",
15165
+ model: options.model,
15166
+ baseUrl: options.baseUrl,
15167
+ contextMemoryModelWindowTokens: options.contextMemoryModelWindowTokens,
15168
+ }).contextWindowTokens;
15157
15169
  // The consumer receives this boundary before `.next()` resumes into the
15158
15170
  // provider call, so a durable append failure can prevent spend.
15159
15171
  yield modelUsageCall;
@@ -15281,6 +15293,7 @@ export async function* agentLoop(messages, options) {
15281
15293
  provider: modelUsageCall.provider,
15282
15294
  model: modelUsageCall.model,
15283
15295
  usage: result.usage,
15296
+ contextWindow: requestContextWindow,
15284
15297
  };
15285
15298
  } else {
15286
15299
  yield {
@@ -3406,6 +3406,10 @@ async function runAgentHeadlessInWorkspace(
3406
3406
  provider: event.provider,
3407
3407
  model: event.model,
3408
3408
  usage: event.usage,
3409
+ ...(event.contextWindow
3410
+ ? { contextWindow: event.contextWindow }
3411
+ : {}),
3412
+ ...(event.attribution ? { attribution: event.attribution } : {}),
3409
3413
  ...(event.source ? { source: event.source } : {}),
3410
3414
  });
3411
3415
  if (costBudget) {
@@ -1140,6 +1140,10 @@ async function runTurn(
1140
1140
  provider: event.provider,
1141
1141
  model: event.model,
1142
1142
  usage: event.usage,
1143
+ ...(event.contextWindow
1144
+ ? { contextWindow: event.contextWindow }
1145
+ : {}),
1146
+ ...(event.attribution ? { attribution: event.attribution } : {}),
1143
1147
  ...(event.source ? { source: event.source } : {}),
1144
1148
  });
1145
1149
  if (costBudget) {
@@ -4252,7 +4256,11 @@ async function runAgentHeadlessStreamInWorkspace(
4252
4256
  event,
4253
4257
  "headless semantic compaction usage settlement",
4254
4258
  );
4255
- emit({ type: "token_usage", ...usageEvent });
4259
+ emit({
4260
+ type: "token_usage",
4261
+ ...usageEvent,
4262
+ source: "semantic-compaction",
4263
+ });
4256
4264
  if (costBudget) {
4257
4265
  costBudget.add(usageEvent);
4258
4266
  costExceeded = costBudget.exceeded();
@@ -1 +0,0 @@
1
- import{I as l,J as x,U as i,c as a,K as o,o as D,r as k,a as L,b as O,P as S,Q as _,R as u,F as B,Z as q,V as I,S as H}from"./vendor-Bn1JzzAn.js";import{_ as J,u as V,d as y}from"./index-Ne8UGllV.js";import{R as U}from"./icons-DG5UD-6K.js";function N(p){return["ask","agent"].map(t=>{const s=p?.readiness?.[t],e=s?.state==="admitted",d=s?.scope==="deployment-admission"&&s.runtimeVerification==="not_checked"&&Array.isArray(s.requiredCommands)&&s.requiredCommands.includes(t)&&(e?s.ready===!0&&s.taskReady===null:["not_configured","disabled","invalid","command_not_allowed"].includes(s.state)&&s.ready===!1&&s.taskReady===!1);return{command:t,state:d?s.state:"unknown",summary:d?e?"部署准入通过":"部署准入被阻断":"未提供准入诊断",detail:d&&typeof s.detail=="string"?s.detail:"当前 CLI 未提供可识别的部署准入诊断,请更新 CLI。",remediation:d&&typeof s.remediation=="string"?s.remediation:""}})}function j(p,t){for(const s of Object.keys(p))delete p[s];Object.assign(p,{source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[],readiness:null},t||{})}const W={__name:"EvolutionSettings",setup(p,{expose:t}){t();const s=V(),e=k(!1),d=k(!1),w=k(!1),m=k(""),g=k(""),c=L({source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[]}),h=O(()=>e.value||d.value||w.value),C=O(()=>N(c));function b(r){j(c,r),m.value=c.descriptorPath||"",g.value=c.trustRootPath||""}async function v(r,n=3e4){return await s.waitConnected(8e3),(await s.sendRaw(r,n)).result}async function R(){e.value=!0;try{b(await v({type:"evolution.deployment.status"}))}catch(r){y.error("读取配置失败:"+r.message)}finally{e.value=!1}}async function E(){if(!m.value.trim()||!g.value.trim()){y.warning("请填写描述符和信任根公钥的绝对路径");return}d.value=!0;try{b(await v({type:"evolution.deployment.configure",descriptorPath:m.value.trim(),trustRootPath:g.value.trim()},6e4)),y.success("签名校验通过,配置已保存并启用;自动发布仍为 HOLD")}catch(r){y.error("配置失败:"+r.message)}finally{d.value=!1}}async function f(){w.value=!0;try{b(await v({type:"evolution.deployment.set-enabled",enabled:!c.profileEnabled})),y.success(c.profileEnabled?"已启用":"已停用")}catch(r){y.error("更新失败:"+r.message)}finally{w.value=!1}}D(R);const P={ws:s,loading:e,saving:d,toggling:w,descriptorPath:m,trustRootPath:g,status:c,busy:h,readinessRows:C,apply:b,request:v,loadStatus:R,save:E,toggle:f,computed:O,onMounted:D,reactive:L,ref:k,get ReloadOutlined(){return U},get message(){return y},get useWsStore(){return V},get deploymentReadinessRows(){return N},get replaceDeploymentStatus(){return j}};return Object.defineProperty(P,"__isScriptSetup",{enumerable:!1,value:!0}),P}},z={class:"page-head"},A={class:"mono"},F={class:"mono"},G={class:"admission-status","aria-live":"polite"},K=["data-admission-command"],M={class:"mono"},Q={key:0,class:"mono"};function T(p,t,s,e,d,w){const m=l("a-button"),g=l("a-alert"),c=l("a-input"),h=l("a-form-item"),C=l("a-space"),b=l("a-form"),v=l("a-card"),R=l("a-col"),E=l("a-tag"),f=l("a-descriptions-item"),P=l("a-descriptions"),r=l("a-row");return S(),x("div",null,[i("div",z,[t[3]||(t[3]=i("div",null,[i("h2",{class:"page-title"},"Skill 自进化配置"),i("p",{class:"page-sub"},"统一配置受治理部署;CLI、IDE 插件与 cc ui 共享。")],-1)),a(m,{loading:e.loading,onClick:e.loadStatus},{icon:o(()=>[a(e.ReloadOutlined)]),default:o(()=>[t[2]||(t[2]=_("刷新 ",-1))]),_:1},8,["loading"])]),a(g,{message:"不会开启自动发布",description:"此开关只启用经过签名的 Skill 自进化运行时。候选项进入 active 前仍需人工审核,自动发布始终保持 HOLD。",type:"warning","show-icon":"",class:"notice"}),a(r,{gutter:16},{default:o(()=>[a(R,{xs:24,xl:15},{default:o(()=>[a(v,{title:"签名部署",class:"panel-card"},{default:o(()=>[a(b,{layout:"vertical"},{default:o(()=>[a(h,{label:"签名部署描述符"},{extra:o(()=>[...t[4]||(t[4]=[_("Web 页面不能读取本机文件选择器,请填写运行 cc ui 的机器上的绝对路径。",-1)])]),default:o(()=>[a(c,{value:e.descriptorPath,"onUpdate:value":t[0]||(t[0]=n=>e.descriptorPath=n),disabled:e.busy,placeholder:"deployment descriptor JSON 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(h,{label:"Ed25519 信任根公钥"},{default:o(()=>[a(c,{value:e.trustRootPath,"onUpdate:value":t[1]||(t[1]=n=>e.trustRootPath=n),disabled:e.busy,placeholder:"信任根 public key 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(C,null,{default:o(()=>[a(m,{type:"primary",loading:e.saving,onClick:e.save},{default:o(()=>[...t[5]||(t[5]=[_("校验、保存并启用",-1)])]),_:1},8,["loading"]),a(m,{danger:e.status.profileEnabled,disabled:!e.status.descriptorPath,loading:e.toggling,onClick:e.toggle},{default:o(()=>[_(u(e.status.profileEnabled?"停用":"启用"),1)]),_:1},8,["danger","disabled","loading"])]),_:1})]),_:1})]),_:1})]),_:1}),a(R,{xs:24,xl:9},{default:o(()=>[a(v,{title:"治理状态",class:"panel-card status-card"},{default:o(()=>[a(P,{column:1,size:"small"},{default:o(()=>[a(f,{label:"生效状态"},{default:o(()=>[a(E,{color:e.status.effectiveEnabled?"green":"default"},{default:o(()=>[_(u(e.status.effectiveEnabled?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1}),a(f,{label:"生效来源"},{default:o(()=>[_(u(e.status.source||"none"),1)]),_:1}),a(f,{label:"签名校验"},{default:o(()=>[a(E,{color:e.status.verified?"green":"red"},{default:o(()=>[_(u(e.status.verified?"已通过":"未通过"),1)]),_:1},8,["color"])]),_:1}),a(f,{label:"自动发布"},{default:o(()=>[a(E,{color:"orange"},{default:o(()=>[...t[6]||(t[6]=[_("HOLD",-1)])]),_:1})]),_:1}),a(f,{label:"配置文件"},{default:o(()=>[i("span",A,u(e.status.profilePath||"—"),1)]),_:1}),a(f,{label:"允许命令"},{default:o(()=>[i("span",F,u((e.status.commands||[]).join(", ")||"—"),1)]),_:1})]),_:1}),i("section",G,[t[7]||(t[7]=i("h3",null,"模型命令部署准入",-1)),t[8]||(t[8]=i("p",null,"这里只检查部署准入,实际任务运行尚未验证。",-1)),(S(!0),x(B,null,q(e.readinessRows,n=>(S(),x("div",{key:n.command,"data-admission-command":n.command},[i("strong",null,u(n.command)+":"+u(n.summary),1),i("p",M,u(n.detail),1),n.remediation?(S(),x("p",Q,u(n.remediation),1)):I("v-if",!0)],8,K))),128))]),e.status.error?(S(),H(g,{key:0,message:e.status.error,type:"error","show-icon":"",class:"error"},null,8,["message"])):I("v-if",!0)]),_:1})]),_:1})]),_:1})])}const ee=J(W,[["render",T],["__scopeId","data-v-5a42105e"],["__file","/tmp/cc-web-panel-Jx0izG/repo/packages/web-panel/src/views/EvolutionSettings.vue"]]);export{ee as default};
@@ -1 +0,0 @@
1
- import{P as c,J as p,b as s}from"./vendor-Bn1JzzAn.js";import{r as a}from"./markdown-Yo_c6Krv.js";import{_ as d}from"./index-Ne8UGllV.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=s(()=>a(e.content||"")),n={props:e,rendered:r,computed:s,get renderMarkdown(){return a}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},i=["innerHTML"];function m(t,o,e,r,n,u){return c(),p("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=d(_,[["render",m],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-Jx0izG/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
@@ -1,7 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-BvoSsCKh.js","./vendor-Bn1JzzAn.js","./index-Ne8UGllV.js","./icons-DG5UD-6K.js","./index-Cq93VfoF.css","./ChatBubbleRenderer-gy5SDGw2.css","./OrderTableRenderer-BtMtQUt7.js","./OrderTableRenderer-CfrDjSHT.css","./TimelineRenderer-CQK4PVv4.js","./TimelineRenderer-BlTAtkOc.css","./EmailListRenderer-BQdGLZIO.js","./EmailListRenderer-DTPZPx_S.css","./GenericCardRenderer-DkJcbBpS.js","./GenericCardRenderer-o85VDYQS.css"])))=>i.map(i=>d[i]);
2
- import{E as ue,r as E,b as w,I as g,P as u,J as O,U as v,c,S as C,V as x,_ as J,F as V,Z as se,a0 as ae,R,K as m,Q as b,W as L,o as M}from"./vendor-Bn1JzzAn.js";import{u as z}from"./usePersonalDataHub-B02JYIMe.js";import{_ as D,e as F,d as P}from"./index-Ne8UGllV.js";import{aa as q,ag as G,M as U,aI as Q,v as H,aH as K,aq as W,ac as Y,e as de,d as fe,k as pe,ai as me,aA as _e,R as ye}from"./icons-DG5UD-6K.js";import"./useShellMode-CgR0wCYM.js";const I=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),B=50,Z=300,X=ue("pdhBrowser",()=>{const r=E({...I}),t=E([]),n=E(null),e=E(!1),o=E(!1),a=E(null),l=E(null),s=E(!1),i=E({byCategory:{},byAdapter:{},bySubtype:{},total:0});let d=0,_=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 y(){const S=++d;e.value=!0,a.value=null;const p=z();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=z();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},_&&clearTimeout(_),_=setTimeout(()=>{_=null,y()},Z)}function ie(S){return r.value={...I,...S},_&&(clearTimeout(_),_=null),y()}function ce(){r.value={...I},t.value=[],n.value=null,a.value=null,i.value={byCategory:{},byAdapter:{},bySubtype:{},total:0}}return{filters:r,results:t,cursor:n,isLoading:e,isAppending:o,error:a,mode:l,shortQuery:s,facets:i,hasResults:j,canLoadMore:A,search:y,loadMore:k,setFilter:le,setFilters:ie,reset:ce,PAGE_SIZE:B,SEARCH_DEBOUNCE_MS:Z}}),ge=Object.freeze(["chat","social","email","shopping","travel","system","ai-chat","other"]),ve=Object.freeze({chat:"社交聊天",social:"内容平台",email:"邮件",shopping:"支付订单",travel:"出行",system:"系统数据","ai-chat":"AI 对话",other:"其他"});function N(r){return ve[r]||r||"未知"}const be=Object.freeze([["wechat","chat"],["messaging-","chat"],["social-","social"],["email-","email"],["shopping-","shopping"],["alipay-","shopping"],["travel-","travel"],["system-data","system"],["browser-","system"],["meeting-","system"],["vscode","system"],["vscodium","system"],["jetbrains-ide","system"],["win-recent","system"],["git-activity","system"],["shell-history","system"],["hbuilderx","system"],["local-files","system"],["cursor","ai-chat"],["claude-code","ai-chat"],["ai-chat-","ai-chat"]]);function $(r){if(typeof r!="string"||r.length===0)return"other";for(const[t,n]of be)if(t.endsWith("-")||t==="system-data"){if(r.startsWith(t))return n}else if(r===t)return n;return"other"}const he={__name:"CategorySidebar",props:{selected:{type:String,default:null},facets:{type:Object,default:()=>({byCategory:{},total:0})}},emits:["select"],setup(r,{expose:t}){t();const n=r,e=w(()=>n.facets.total||0),o={chat:Y,social:W,email:K,shopping:H,travel:Q,system:U,"ai-chat":G,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 Y},get PlayCircleOutlined(){return W},get MailOutlined(){return K},get ShoppingOutlined(){return H},get CarOutlined(){return Q},get MobileOutlined(){return U},get RobotOutlined(){return G},get CATEGORIES(){return ge},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=g("a-badge");return u(),O("div",Se,[t[2]||(t[2]=v("div",{class:"sidebar-title"},"数据类型",-1)),v("div",{class:J(["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"])):x("v-if",!0)],2),(u(!0),O(V,null,se(e.CATEGORIES,s=>(u(),O("div",{key:s,class:J(["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"])):x("v-if",!0)],10,Oe))),128))])}const ke=D(he,[["render",Ce],["__scopeId","data-v-6b62a22e"],["__file","/tmp/cc-web-panel-Jx0izG/repo/packages/web-panel/src/components/pdh/CategorySidebar.vue"]]),xe={__name:"SearchFilterBar",props:{filters:{type:Object,required:!0},facets:{type:Object,default:()=>({byAdapter:{}})},isLoading:{type:Boolean,default:!1},mode:{type:String,default:null},shortQuery:{type:Boolean,default:!1}},emits:["set-filter","reset"],setup(r,{expose:t,emit:n}){t();const e=r,o=n,a=w(()=>e.filters.category?`在「${e.filters.category}」类目内搜索…`:"搜索关键词(如:支付宝、罗技、Kotlin)…"),l=w(()=>Object.entries(e.facets.byAdapter||{}).sort((y,k)=>k[1]-y[1]).map(([y,k])=>({value:y,label:`${y} (${k})`}))),s=w(()=>!e.filters.since&&!e.filters.until?null:[e.filters.since?new Date(e.filters.since):null,e.filters.until?new Date(e.filters.until):null]),i=w(()=>!!(e.filters.q||e.filters.adapter||e.filters.subtype||e.filters.since||e.filters.until));function d(h){o("set-filter","q",h||"")}function _(h){o("set-filter","q",h||"")}function j(h){if(!h||h.length===0){o("set-filter","since",null),o("set-filter","until",null);return}const[y,k]=h;o("set-filter","since",y?+y:null),o("set-filter","until",k?+k:null)}const A={props:e,emit:o,placeholderText:a,adapterOptions:l,dateRangeValue:s,hasActiveFilters:i,onQInput:d,onSearch:_,onDateChange:j,computed:w,get SearchOutlined(){return pe},get CloseCircleOutlined(){return fe},get InfoCircleOutlined(){return de}};return Object.defineProperty(A,"__isScriptSetup",{enumerable:!1,value:!0}),A}},Ee={class:"pdh-filter-bar"},Re={key:1,class:"hint"},je={key:2,class:"hint"};function Ae(r,t,n,e,o,a){const l=g("a-input-search"),s=g("a-select"),i=g("a-range-picker"),d=g("a-button");return u(),O("div",Ee,[c(l,{value:n.filters.q,placeholder:e.placeholderText,"enter-button":"搜索","allow-clear":"",loading:n.isLoading,style:{flex:"1","max-width":"480px"},"onUpdate:value":e.onQInput,onSearch:e.onSearch},{prefix:m(()=>[c(e.SearchOutlined)]),_:1},8,["value","placeholder","loading"]),c(s,{value:n.filters.adapter,placeholder:"所有 adapter","allow-clear":"",options:e.adapterOptions,style:{width:"200px"},"onUpdate:value":t[0]||(t[0]=_=>r.$emit("set-filter","adapter",_||null))},null,8,["value","options"]),c(i,{value:e.dateRangeValue,placeholder:["开始日期","结束日期"],style:{width:"280px"},"onUpdate:value":e.onDateChange},null,8,["value"]),e.hasActiveFilters?(u(),C(d,{key:0,type:"link",danger:"",onClick:t[1]||(t[1]=_=>r.$emit("reset"))},{icon:m(()=>[c(e.CloseCircleOutlined)]),default:m(()=>[t[2]||(t[2]=b(" 清空筛选 ",-1))]),_:1})):x("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))])):x("v-if",!0)])}const Le=D(xe,[["render",Ae],["__scopeId","data-v-d7cce6e9"],["__file","/tmp/cc-web-panel-Jx0izG/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-BvoSsCKh.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),e=L(()=>F(()=>import("./OrderTableRenderer-BtMtQUt7.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),o=L(()=>F(()=>import("./TimelineRenderer-CQK4PVv4.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),a=L(()=>F(()=>import("./EmailListRenderer-BQdGLZIO.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),l=L(()=>F(()=>import("./GenericCardRenderer-DkJcbBpS.js"),__vite__mapDeps([12,1,2,3,4,13]),import.meta.url));function s(d){const _=d&&d.source&&d.source.adapter;switch($(_)){case"chat":case"ai-chat":return n;case"shopping":return e;case"travel":return o;case"email":return a;default:return l}}const i={ChatBubbleRenderer:n,OrderTableRenderer:e,TimelineRenderer:o,EmailListRenderer:a,GenericCardRenderer:l,rendererFor:s,defineAsyncComponent:L,get getCategory(){return $}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}};function De(r,t,n,e,o,a){return u(),C(ae(e.rendererFor(n.event)),{event:n.event},null,8,["event"])}const Te=D(Fe,[["render",De],["__file","/tmp/cc-web-panel-Jx0izG/repo/packages/web-panel/src/components/pdh/renderers/RendererDispatcher.vue"]]);function ee(r){return JSON.stringify(r,null,2)}function te(r){return r.map(t=>JSON.stringify(t)).join(`
3
- `)+`
4
- `}function ne(r){const n=["id","subtype","occurredAt","occurredAtIso","actor","place","adapter","summary","contentJson","extraJson"].join(","),e=r.map(o=>{const a=Number.isFinite(o.occurredAt)?o.occurredAt:null,l=a?new Date(a).toISOString():"",s=o.source&&o.source.adapter||"",i=o.content&&(o.content.text||o.content.title||o.content.subject)||"";return[o.id||"",o.subtype||"",a!=null?String(a):"",l,o.actor||"",o.place||"",s,i,o.content?JSON.stringify(o.content):"",o.extra?JSON.stringify(o.extra):""].map(Ie).join(",")});return[n,...e].join(`
5
- `)+`
6
- `}function Ie(r){const t=String(r??"");return t.includes(",")||t.includes('"')||t.includes(`
7
- `)||t.includes("\r")?'"'+t.replace(/"/g,'""')+'"':t}function re(r,t,n="application/octet-stream"){if(typeof window>"u"||typeof document>"u")return t;const e=new Blob([r],{type:n}),o=URL.createObjectURL(e),a=document.createElement("a");return a.href=o,a.download=t,document.body.appendChild(a),a.click(),document.body.removeChild(a),setTimeout(()=>URL.revokeObjectURL(o),1e3),t}function oe(r,t=null){const n=new Date,e=n.getFullYear(),o=String(n.getMonth()+1).padStart(2,"0"),a=String(n.getDate()).padStart(2,"0"),l=r==="ndjson"?"ndjson":r,s=t?`-${t}`:"";return`pdh-events-${e}-${o}-${a}${s}.${l}`}const Pe={__name:"ExportDropdown",props:{events:{type:Array,required:!0},category:{type:String,default:null}},setup(r,{expose:t}){t();const n=r,e=w(()=>n.events.length>0),o={json:"application/json;charset=utf-8",ndjson:"application/x-ndjson;charset=utf-8",csv:"text/csv;charset=utf-8"};function a(i){switch(i){case"json":return ee(n.events);case"ndjson":return te(n.events);case"csv":return ne(n.events);default:throw new Error(`unknown format: ${i}`)}}function l({key:i}){try{const d=a(i),_=oe(i,n.category);re(d,_,o[i]),P.success(`已导出 ${n.events.length} 条到 ${_}`)}catch(d){P.error(`导出失败: ${d.message||d}`)}}const s={props:n,hasResults:e,MIME:o,serialize:a,onClick:l,computed:w,get DownloadOutlined(){return _e},get DownOutlined(){return me},get message(){return P},get eventsToJson(){return ee},get eventsToNdjson(){return te},get eventsToCsv(){return ne},get downloadAs(){return re},get suggestFilename(){return oe}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}};function qe(r,t,n,e,o,a){const l=g("a-button"),s=g("a-menu-item"),i=g("a-menu"),d=g("a-dropdown");return u(),C(d,{disabled:!e.hasResults},{overlay:m(()=>[c(i,{onClick:e.onClick},{default:m(()=>[c(s,{key:"json"},{default:m(()=>[...t[0]||(t[0]=[b("JSON (.json)",-1)])]),_:1}),c(s,{key:"ndjson"},{default:m(()=>[...t[1]||(t[1]=[b("NDJSON (.ndjson)",-1)])]),_:1}),c(s,{key:"csv"},{default:m(()=>[...t[2]||(t[2]=[b("CSV (.csv)",-1)])]),_:1})]),_:1})]),default:m(()=>[c(l,{disabled:!e.hasResults},{icon:m(()=>[c(e.DownloadOutlined)]),default:m(()=>[b(" 导出 ("+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-Jx0izG/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)}M(()=>{!n.hasResults&&!n.isLoading&&n.search()});const l={store:n,emptyHint:e,onCategorySelect:o,onSetFilter:a,onMounted:M,computed:w,get ReloadOutlined(){return ye},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"},Je={class:"page-header"},Me={class:"main-pane"},ze={class:"results-summary"},Ge={key:0},Ue={key:0},Qe={key:1},He={class:"loaded-of"},Ke={class:"results-list"},We={key:2,class:"load-more"};function Ye(r,t,n,e,o,a){const l=g("a-tag"),s=g("a-button"),i=g("a-space"),d=g("a-col"),_=g("a-spin"),j=g("a-alert"),A=g("a-empty"),h=g("a-row");return u(),O("div",Ne,[v("div",Je,[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})):x("v-if",!0),c(e.ExportDropdown,{events:e.store.results,category:e.store.filters.category},null,8,["events","category"]),c(s,{onClick:t[0]||(t[0]=y=>e.store.search()),loading:e.store.isLoading},{icon:m(()=>[c(e.ReloadOutlined)]),default:m(()=>[t[5]||(t[5]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),c(h,{gutter:16,class:"browser-layout"},{default:m(()=>[c(d,{xs:24,sm:24,md:6,lg:5,xl:4},{default:m(()=>[c(e.CategorySidebar,{selected:e.store.filters.category,facets:e.store.facets,onSelect:e.onCategorySelect},null,8,["selected","facets"])]),_:1}),c(d,{xs:24,sm:24,md:18,lg:19,xl:20},{default:m(()=>[v("div",Me,[c(e.SearchFilterBar,{filters:e.store.filters,facets:e.store.facets,"is-loading":e.store.isLoading,mode:e.store.mode,"short-query":e.store.shortQuery,onSetFilter:e.onSetFilter,onReset:t[1]||(t[1]=y=>{e.store.reset(),e.store.search()})},null,8,["filters","facets","is-loading","mode","short-query"]),v("div",ze,[e.store.isLoading&&e.store.results.length===0?(u(),O("span",Ge,[c(_,{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",Ue,[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)])):x("v-if",!0),e.store.filters.q?(u(),O("span",Qe,[t[9]||(t[9]=b(' / 关键词 "',-1)),v("em",null,R(e.store.filters.q),1),t[10]||(t[10]=b('"',-1))])):x("v-if",!0),v("span",He," / 已显示 "+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"])):x("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"])):x("v-if",!0),v("div",Ke,[(u(!0),O(V,null,se(e.store.results,(y,k)=>(u(),C(e.RendererDispatcher,{key:`r-${k}-${y.id}`,event:y},null,8,["event"]))),128))]),e.store.canLoadMore?(u(),O("div",We,[c(s,{loading:e.store.isAppending,onClick:t[2]||(t[2]=y=>e.store.loadMore()),block:""},{default:m(()=>[...t[12]||(t[12]=[b(" 加载下一页 (50 条) ",-1)])]),_:1},8,["loading"])])):x("v-if",!0)])]),_:1})]),_:1})])}const nt=D(Ve,[["render",Ye],["__scopeId","data-v-0f7c02cd"],["__file","/tmp/cc-web-panel-Jx0izG/repo/packages/web-panel/src/views/PdhVaultBrowser.vue"]]);export{nt as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-Ne8UGllV.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-CPdqZIUX.js";import{a0 as t}from"./index-Ne8UGllV.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-D36Bg2ut.js";import"./useFlexGapSupport-DyH5g7Rg.js";import"./styleChecker-2pT-T8vy.js";import"./index-BNe2lCk6.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-DdAN8LeW.js";import{a0 as t}from"./index-Ne8UGllV.js";import"./vendor-Bn1JzzAn.js";import"./index-BNe2lCk6.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};