chainlesschain 0.166.74 → 0.166.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-BlIvP3k1.js → AIOps-CNaejClV.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-DYF7atSV.js → ActionButton-CF_CVKT_.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-LZYaYek6.js → Analytics-a3Z6J7gv.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-BJxrjNbj.js → AppLayout-BFtWEnct.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-gEDhxhmE.js → Artifacts-BQ8oeMvX.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-B0MR950Q.js → Audit-NOo9bmgk.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-3e6Os_Kl.js → BackgroundAgents-QRc7F3Tp.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-DB_X8KUg.js → Backup-UlVgLn2P.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-DTNcvNeG.js → BaseInput-BER9LJAr.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-SnqdA62j.js → Chat-Z8z2Fdfz.js} +6 -6
  12. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BaiWNH_V.js → ChatBubbleRenderer-DdmuBrdQ.js} +1 -1
  13. package/src/assets/web-panel/assets/{Checkbox-Dj0O4dyP.js → Checkbox-CXPgyB8L.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-BeelW3dx.js → Codegen-D1vOsLJ7.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-BmstiyBM.js → Col-ucLnUJC7.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-CrbmFk3f.js → Community-COsV9n9t.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-DCg5ZPIw.js → Compact-D0EkBEYh.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-B3sajhq7.js → Compliance-C8w9SUjt.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-DWcdvrDK.js → Cowork-CmVaKEJS.js} +4 -4
  20. package/src/assets/web-panel/assets/{Cron-Bjwp_NDf.js → Cron-B_FiMMV2.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-BXTLC9o8.js → Crosschain-ByO3YL8N.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-Di62M46b.js → DID-DwpsLM9r.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-BQED8Rkt.js → Dashboard-B_8IUvM_.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-DEf9VYaj.js → Dropdown-Bo6WQkuX.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-DhFpPMAM.js → EmailListRenderer-C9LiQesx.js} +1 -1
  26. package/src/assets/web-panel/assets/{EvolutionSettings-BOqmzkpS.js → EvolutionSettings-Pc1IpRfk.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BxBnJ4fe.js → FamilyGuardDashboard-Dst6VUnO.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-BN9Q8nsZ.js → Federation-Ci7CoLkJ.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-CGeqFEd-.js → FormItemContext-bdDyUhUM.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-DElmWQTc.js → GenericCardRenderer-CrRwOUVi.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-BHBSgKck.js → Git-Dis8h-Z-.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-Breo3NTU.js → Governance-DX7OH5w2.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-CCABy4E0.js → Inference-Cavv_Q_Z.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-B6_ryn-X.js → KnowledgeGraph-Cck8tnZn.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-CkmJjJok.js → Logs-BQt3aGMu.js} +2 -2
  36. package/src/assets/web-panel/assets/MarkdownRenderer-BIUeeiVA.js +1 -0
  37. package/src/assets/web-panel/assets/{Marketplace-iip65jxv.js → Marketplace-CdmAKNSN.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-DDwp_QLb.js → McpTools-BUlJdyPY.js} +3 -3
  39. package/src/assets/web-panel/assets/{Memory-2ZmNDRkC.js → Memory-DQRTQDr-.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-C6HilwZl.js → MobileBridge-C0dnxgsl.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-BeMtYRhx.js → MobileProjects-DQ5Gy7fa.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-Bp-FEcoo.js → Mtc-Xl7u2isS.js} +5 -5
  43. package/src/assets/web-panel/assets/{MtcAudit-DNdkTCe5.js → MtcAudit-C3KX0574.js} +2 -2
  44. package/src/assets/web-panel/assets/{Multisig-PnKg2_Eo.js → Multisig-CHEhfkn8.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-DDp4lZeG.js → NLProgramming-Ce38mH-8.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-DEjFktcO.js → Notes-C7nuTd7c.js} +4 -4
  47. package/src/assets/web-panel/assets/{NotificationSettings-FR8fJDAn.js → NotificationSettings-BcoEcyq8.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-Cyc-XI0L.js → OrderTableRenderer-D-t5hKkx.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-DNW2E_JU.js → Organization-C_BGi4xi.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-BHfd6wk6.js → Overflow-BodhraDq.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-COIkaXH4.js → P2P-BTa3sAIy.js} +2 -2
  52. package/src/assets/web-panel/assets/PdhVaultBrowser-BjZslP9T.js +7 -0
  53. package/src/assets/web-panel/assets/{Permissions-BfVRGMy8.js → Permissions-u3UDzGef.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-BWYjO6Aa.js → PersonalDataHub-Cb7ybv65.js} +4 -4
  55. package/src/assets/web-panel/assets/{Pipeline-C0e0fPBW.js → Pipeline-CS24k-P7.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-CnId4Jv-.js → Privacy-Ddj6Kqs7.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-CYf1grXg.js → ProjectInit-Bg5uQIgg.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-HsXgJdiH.js → ProjectSettings-AmPR8T12.js} +2 -2
  59. package/src/assets/web-panel/assets/{Projects-Bi0r9QcC.js → Projects-DGSbAyTK.js} +1 -1
  60. package/src/assets/web-panel/assets/{Providers-B-Tu_-_4.js → Providers-Dc1C3lbB.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-CPDqYT2F.js → QrScannerModal-Cv3HXpce.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-Df6qcjXy.js → QuickAsk-3dpbXARb.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-dP6sfGSY.js → Recommend-5aGRVnJK.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-VAt9-tM3.js → RemoteSession-CTS2jx0p.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-DtRVRiLI.js → Reputation-BxaKI0hY.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-B6Ukqvli.js → Row-C23uQdwd.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-DfVRQMrZ.js → RssFeed-ssX9YOhm.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-CyncAiqQ.js → Search-C24GogII.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-DEO7nrkb.js → Security-DdAcGKkk.js} +4 -4
  70. package/src/assets/web-panel/assets/{Services-CkusQEhN.js → Services-D0dCiEuq.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-CbGtO3kc.js → Skeleton-DEY44o0v.js} +1 -1
  72. package/src/assets/web-panel/assets/Skills-CYt0Mu2W.js +1 -0
  73. package/src/assets/web-panel/assets/{Sla-CIu9Ahak.js → Sla-B_bbo2vB.js} +1 -1
  74. package/src/assets/web-panel/assets/SpeechSettings-a2BBjtTL.js +1 -0
  75. package/src/assets/web-panel/assets/{SyncSettings-BAOLFlRq.js → SyncSettings-CpIXql0Z.js} +2 -2
  76. package/src/assets/web-panel/assets/Tasks-BYQKU-GL.js +1 -0
  77. package/src/assets/web-panel/assets/{Templates-Dkr_vRdJ.js → Templates-C_44nVPq.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-kM7lHUFR.js → Tenant-CyZ2ey2P.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-9zfc41aU.js → Terminal-DwGNHWnp.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-Cg_7j6cj.js → TimelineRenderer-BTAHNkqU.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-Cs1aikaM.js → Tokens-DCJWkUwc.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-DKYPJ9gl.js → Trigger-BCjDO9-E.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-BFy1Sm8B.js → Trust-_YS8WbRb.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-B31L9NBH.js → UkeySign-m6R8xGq7.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-OMmUYdIC.js → VideoEditing-xOfk29c4.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-y3aE7oru.js → Wallet-B1Gw0awc.js} +4 -4
  87. package/src/assets/web-panel/assets/{WebAuthn-C0ICKvpu.js → WebAuthn-CHK5ft18.js} +4 -4
  88. package/src/assets/web-panel/assets/{WorkflowEditor-Cq5UYbr5.js → WorkflowEditor-DEp1ukQQ.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-B1ijaKFv.js → chat-B2sFizun.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-CHkI8PDg.js → colors-DJ17YV1E.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-1BYvgWEs.js → compact-item-CBhJJgEC.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-BGti56u4.js → createContext-BZkpvNJy.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-DZhu13vj.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-Cr87Fph1.js → hasIn-C0ZKo6Ei.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-CkcWhgLB.js → index-4oULtRqE.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-Duv0TfJa.js → index-5K2z_tgO.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-D6g4jxdE.js → index-8ueG48gl.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-Dnp-4yPc.js → index-BEnd5fiz.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-Dam-LB_J.js → index-BGIvhCPl.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-fhpMyq0u.js → index-BMxOoITz.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-C_lEztok.js → index-BNp6HKFh.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CjBkVrq9.js → index-BOfPp5OV.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DzevrmLK.js → index-Bc3vVG2X.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-Bni5GodE.js → index-BoDUYyuo.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BA0FMuDX.js → index-BpyrhOeh.js} +1 -1
  106. package/src/assets/web-panel/assets/index-C6iFyQYz.js +1 -0
  107. package/src/assets/web-panel/assets/{index-B1yur8MU.js → index-C7gv9dvb.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CS0MIE2C.js → index-C9gYiACH.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-DHJtAEx8.js → index-CCOr6Q27.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-6Ta8Pg47.js → index-CW5o1Gar.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BOjTRSHE.js → index-CZW84cEf.js} +3 -3
  112. package/src/assets/web-panel/assets/{index-CvcpesEZ.js → index-CZlkPrxb.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BkFXPrdx.js → index-CdxJm-HB.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Bdkrut2A.js → index-Chct9tL8.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-rO6VKJv5.js → index-Cn5UzvgR.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BYpqBWlt.js → index-Ctguam0K.js} +1 -1
  117. package/src/assets/web-panel/assets/index-CztThH9f.js +1 -0
  118. package/src/assets/web-panel/assets/{index-tY479EoQ.js → index-DHtpMr1G.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CmmSJBNi.js → index-DJkoJzTU.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BjgtiMdY.js → index-DLMr5KMd.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-1WxCzqYq.js → index-DLo8Ls9u.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B4BSM3BK.js → index-DM0rWF6z.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DJjnXDAD.js → index-DOBXNMdh.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CDTNnQDz.js → index-Dfgxe-fw.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DcoI3ENn.js → index-DjdSFO0d.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-Cvu95WPI.js → index-DrU5xVpF.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-rVnXNFST.js → index-DumLgj1t.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DCkvhzaY.js → index-Dxe0YlZe.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CevUJTXd.js → index-DyiCbHeL.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BKb16YKp.js → index-IHgzfc1u.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-CQWMHlY7.js → index-KzNhWykP.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CbkGda_k.js → index-LPPe0val.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-B8Jb_cGt.js → index-vFMwiAN4.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-DAGtnwoX.js → initDefaultProps-Cqfoq0TJ.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-02FXBi5C.js → motion-CIiVJHNu.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-BLf7rhzJ.js → move-CFl1o_A8.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-Ct6i1vqQ.js → mtc-parser-DYoCxcZ1.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-DKvTU8IT.js → omit-C1P2q5TY.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-DqDsKoMe.js → pickAttrs-BtTRpJtC.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-kae6Cnwx.js → placementArrow-Cst2PcNM.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-DzFM_TQf.js → responsiveObserve-CF5kalV2.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-qDjNFPuM.js → slide-CtHGqpXN.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-BihSr7G3.js → statusUtils-N__biHXf.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-BzoT0TfJ.js → styleChecker-DR8V_H-i.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-CjXXcU1j.js → useFlexGapSupport-D274dqun.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-DrWcbDJ1.js → useFs-BwHLYU5b.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-DO1oBNTE.js → usePersonalDataHub-BiA-hVqt.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-BR6crWko.js → vnode-Bugl94dy.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-DmKLfw6W.js → zoom-DEFl8GCu.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/data/changelog.json +26 -0
  152. package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +2 -0
  153. package/src/lib/evolution/evolution-eval-cohort-enrollment.js +770 -0
  154. package/src/lib/evolution/evolution-eval-contracts.js +86 -0
  155. package/src/lib/evolution/evolution-eval-gate.js +136 -85
  156. package/src/lib/evolution/evolution-eval-launch-admission.js +505 -0
  157. package/src/lib/evolution/skill-target-matrix-eval.js +84 -3
  158. package/src/lib/with-file-lock.js +81 -16
  159. package/src/assets/web-panel/assets/MarkdownRenderer-DQEQBaRu.js +0 -1
  160. package/src/assets/web-panel/assets/PdhVaultBrowser-DuRP0UeX.js +0 -7
  161. package/src/assets/web-panel/assets/Skills-diOh0gAr.js +0 -1
  162. package/src/assets/web-panel/assets/SpeechSettings-_Nzyi4K9.js +0 -1
  163. package/src/assets/web-panel/assets/Tasks-BpmvL1Eq.js +0 -1
  164. package/src/assets/web-panel/assets/devWarning-Isft1nEX.js +0 -1
  165. package/src/assets/web-panel/assets/index-B_T9NUk7.js +0 -1
  166. package/src/assets/web-panel/assets/index-DBqUxaat.js +0 -1
@@ -519,7 +519,62 @@ function reclaimLegacyDirectory(_fs, lockDir, stat) {
519
519
  return true;
520
520
  }
521
521
 
522
- function completePublishedRelease(_fs, lockDir, owner, claimant, ownerAlive) {
522
+ function completePublishedRelease(
523
+ _fs,
524
+ lockDir,
525
+ owner,
526
+ claimant,
527
+ ownerAlive,
528
+ ownerBodyFinished = false,
529
+ ) {
530
+ const finishedPath = path.join(
531
+ lockDir,
532
+ `.release-body-finished-${owner.token}`,
533
+ );
534
+ if (ownerBodyFinished) {
535
+ // Publication is already known by the owner. Persist its ended-body proof
536
+ // before reading the release marker: a sharing error on that read must not
537
+ // strand an abandoned staging path behind a still-live owner.
538
+ const ownerPath = path.join(lockDir, "owner.json");
539
+ const current = readOwnerResult(_fs, ownerPath);
540
+ if (
541
+ current.error?.code === "ENOENT" ||
542
+ (current.owner && !sameOwner(current.owner, owner))
543
+ ) {
544
+ return { published: true, completed: true };
545
+ }
546
+ if (current.error) throw current.error;
547
+ try {
548
+ writeOwnerMarker(_fs, finishedPath, owner);
549
+ } catch (error) {
550
+ if (error?.code === "ENOENT") {
551
+ const latest = readOwnerResult(_fs, ownerPath);
552
+ if (
553
+ latest.error?.code === "ENOENT" ||
554
+ (latest.owner && !sameOwner(latest.owner, owner))
555
+ ) {
556
+ return { published: true, completed: true };
557
+ }
558
+ }
559
+ if (error?.code !== "EEXIST") throw error;
560
+ const existing = readOwnerResult(_fs, finishedPath);
561
+ if (existing.error) throw existing.error;
562
+ if (!sameOwner(existing.owner, owner)) {
563
+ throw new Error("Mismatched ended-body release proof");
564
+ }
565
+ }
566
+ // A contender can finish the handoff after the first owner read. Remove
567
+ // only our own proof if its write raced with a replacement directory.
568
+ const latest = readOwnerResult(_fs, ownerPath);
569
+ if (
570
+ latest.error?.code === "ENOENT" ||
571
+ (latest.owner && !sameOwner(latest.owner, owner))
572
+ ) {
573
+ removeOwnMarker(_fs, finishedPath, owner);
574
+ return { published: true, completed: true };
575
+ }
576
+ if (latest.error) throw latest.error;
577
+ }
523
578
  const markerPath = path.join(lockDir, `.release-${owner.token}`);
524
579
  const marker = readOwner(_fs, markerPath);
525
580
  if (!sameOwner(marker, owner)) {
@@ -536,7 +591,9 @@ function completePublishedRelease(_fs, lockDir, owner, claimant, ownerAlive) {
536
591
  marker.releaseAfterPathRemoved &&
537
592
  pathStatus(_fs, marker.releaseAfterPathRemoved) !== "absent"
538
593
  ) {
539
- return { published: true, completed: false };
594
+ if (!sameOwner(readOwner(_fs, finishedPath), owner)) {
595
+ return { published: true, completed: false };
596
+ }
540
597
  }
541
598
  const claimPath = path.join(lockDir, `.release-claim-${owner.token}`);
542
599
  for (;;) {
@@ -602,13 +659,20 @@ function releaseOwnedDirectory(
602
659
  ownerAlive,
603
660
  releaseWasPublished = false,
604
661
  ) {
662
+ if (releaseWasPublished) {
663
+ // A contender can already detach this directory. Never use the direct
664
+ // read-owner -> rename path after publication: it could rename a new
665
+ // owner's lock if a contender completes the handoff between those calls.
666
+ // The exclusive cleanup claim serializes all published-release helpers.
667
+ // The owner's body has ended even when its final commit threw and left
668
+ // the staging path behind. Only this owner may bypass that guard; other
669
+ // contenders must continue waiting until commit or claimed cleanup.
670
+ completePublishedRelease(_fs, lockDir, owner, owner, ownerAlive, true);
671
+ return true;
672
+ }
605
673
  if (!sameOwner(readOwner(_fs, path.join(lockDir, "owner.json")), owner)) {
606
- // Once this exact owner published a guarded handoff, a contender is allowed
607
- // to detach the old directory as soon as the final staging path disappears.
608
- // A missing or replacement lock therefore proves successful release, not
609
- // ownership loss. Without that publication the strict legacy verdict stays
610
- // fail-closed.
611
- return releaseWasPublished;
674
+ // Without a published handoff, missing or replaced ownership fails closed.
675
+ return false;
612
676
  }
613
677
  // Atomically move the exact owned directory out of the acquisition path,
614
678
  // then remove that uniquely-tokened directory. A replacement owner may
@@ -627,7 +691,7 @@ function releaseOwnedDirectory(
627
691
  }
628
692
  return true;
629
693
  } catch (error) {
630
- if (error?.code === "ENOENT") return releaseWasPublished;
694
+ if (error?.code === "ENOENT") return false;
631
695
  // Windows sharing transients fall back to the marker-based release.
632
696
  }
633
697
  }
@@ -635,18 +699,19 @@ function releaseOwnedDirectory(
635
699
  try {
636
700
  writeOwnerMarker(_fs, markerPath, owner);
637
701
  } catch (error) {
638
- if (error?.code === "ENOENT") return releaseWasPublished;
702
+ if (error?.code === "ENOENT") return false;
639
703
  if (error?.code === "EEXIST") {
640
704
  const existing = readOwner(_fs, markerPath);
641
705
  if (!sameOwner(existing, owner)) return false;
642
- return completePublishedRelease(_fs, lockDir, owner, owner, ownerAlive)
643
- .published;
706
+ completePublishedRelease(_fs, lockDir, owner, owner, ownerAlive);
707
+ return true;
644
708
  }
645
709
  throw error;
646
710
  }
647
711
  if (!sameOwner(readOwner(_fs, path.join(lockDir, "owner.json")), owner)) {
648
- removeOwnMarker(_fs, markerPath, owner);
649
- return false;
712
+ // The successful marker write above already handed release to contenders.
713
+ // A replacement owner is therefore a completed handoff, not lock loss.
714
+ return true;
650
715
  }
651
716
  if (typeof _fs.renameSync === "function") {
652
717
  // After publishing the marker, use the same exclusive claim protocol as a
@@ -657,8 +722,8 @@ function releaseOwnedDirectory(
657
722
  // contender may win the cleanup claim before this owner does; that is a
658
723
  // successful release, not lost ownership, because every acquirer must
659
724
  // complete or wait behind the published marker before entering its body.
660
- return completePublishedRelease(_fs, lockDir, owner, owner, ownerAlive)
661
- .published;
725
+ completePublishedRelease(_fs, lockDir, owner, owner, ownerAlive);
726
+ return true;
662
727
  }
663
728
  _fs.rmSync(lockDir, { recursive: true, force: true });
664
729
  return true;
@@ -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-BOjTRSHE.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-YD0VGJ/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-BaiWNH_V.js","./vendor-Bn1JzzAn.js","./index-BOjTRSHE.js","./icons-DG5UD-6K.js","./index-Cq93VfoF.css","./ChatBubbleRenderer-gy5SDGw2.css","./OrderTableRenderer-Cyc-XI0L.js","./OrderTableRenderer-CfrDjSHT.css","./TimelineRenderer-Cg_7j6cj.js","./TimelineRenderer-BlTAtkOc.css","./EmailListRenderer-DhFpPMAM.js","./EmailListRenderer-DTPZPx_S.css","./GenericCardRenderer-DElmWQTc.js","./GenericCardRenderer-o85VDYQS.css"])))=>i.map(i=>d[i]);
2
- import{E as ue,r as R,b as w,I as g,P as u,J as O,U as v,c,S as C,V as E,_ as J,F as B,Z as se,a0 as ae,R as x,K as m,Q as b,W as A,o as M}from"./vendor-Bn1JzzAn.js";import{u as G}from"./usePersonalDataHub-DO1oBNTE.js";import{_ as F,e as L,d as P}from"./index-BOjTRSHE.js";import{aa as q,ag as U,M as Q,aI as z,v as Y,aH as H,aq as K,ac as W,e as de,d as fe,k as pe,ai as me,aA as _e,R as ye}from"./icons-DG5UD-6K.js";import"./useShellMode-CgR0wCYM.js";const I=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),V=50,Z=300,X=ue("pdhBrowser",()=>{const r=R({...I}),t=R([]),n=R(null),e=R(!1),o=R(!1),a=R(null),l=R(null),s=R(!1),i=R({byCategory:{},byAdapter:{},bySubtype:{},total:0});let d=0,_=null;const D=w(()=>t.value.length>0),j=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=G();try{const[f,T]=await Promise.all([p.searchEvents(h({limit:V})),p.facetCounts({...r.value.q&&r.value.q.trim()?{q:r.value.q.trim()}:{},...Number.isFinite(r.value.since)?{since:r.value.since}:{},...Number.isFinite(r.value.until)?{until:r.value.until}:{}})]);if(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=G();try{const p=await S.searchEvents(h({cursor:n.value,limit:V}));t.value=t.value.concat(p.rows||[]),n.value=p.nextCursor||null,l.value=p.mode||l.value}catch(p){a.value=p&&p.message?p.message:String(p)}finally{o.value=!1}}function le(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:D,canLoadMore:j,search:y,loadMore:k,setFilter:le,setFilters:ie,reset:ce,PAGE_SIZE:V,SEARCH_DEBOUNCE_MS:Z}}),ge=Object.freeze(["chat","social","email","shopping","travel","system","ai-chat","other"]),ve=Object.freeze({chat:"社交聊天",social:"内容平台",email:"邮件",shopping:"支付订单",travel:"出行",system:"系统数据","ai-chat":"AI 对话",other:"其他"});function N(r){return ve[r]||r||"未知"}const be=Object.freeze([["wechat","chat"],["messaging-","chat"],["social-","social"],["email-","email"],["shopping-","shopping"],["alipay-","shopping"],["travel-","travel"],["system-data","system"],["browser-","system"],["meeting-","system"],["vscode","system"],["vscodium","system"],["jetbrains-ide","system"],["win-recent","system"],["git-activity","system"],["shell-history","system"],["hbuilderx","system"],["local-files","system"],["cursor","ai-chat"],["claude-code","ai-chat"],["ai-chat-","ai-chat"]]);function $(r){if(typeof r!="string"||r.length===0)return"other";for(const[t,n]of be)if(t.endsWith("-")||t==="system-data"){if(r.startsWith(t))return n}else if(r===t)return n;return"other"}const he={__name:"CategorySidebar",props:{selected:{type:String,default:null},facets:{type:Object,default:()=>({byCategory:{},total:0})}},emits:["select"],setup(r,{expose:t}){t();const n=r,e=w(()=>n.facets.total||0),o={chat:W,social:K,email:H,shopping:Y,travel:z,system:Q,"ai-chat":U,other:q};function a(i){return o[i]||q}function l(i){return i?{backgroundColor:"#fff",color:"#1677ff"}:{backgroundColor:"#f0f0f0",color:"#666"}}const s={props:n,total:e,ICONS:o,iconFor:a,badgeStyle:l,computed:w,get AppstoreOutlined(){return q},get MessageOutlined(){return W},get PlayCircleOutlined(){return K},get MailOutlined(){return H},get ShoppingOutlined(){return Y},get CarOutlined(){return z},get MobileOutlined(){return Q},get RobotOutlined(){return U},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"])):E("v-if",!0)],2),(u(!0),O(B,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,x(e.categoryLabel(s)),1),n.facets.byCategory[s]?(u(),C(l,{key:0,count:n.facets.byCategory[s],"number-style":e.badgeStyle(n.selected===s),"overflow-count":9999},null,8,["count","number-style"])):E("v-if",!0)],10,Oe))),128))])}const ke=F(he,[["render",Ce],["__scopeId","data-v-6b62a22e"],["__file","/tmp/cc-web-panel-YD0VGJ/repo/packages/web-panel/src/components/pdh/CategorySidebar.vue"]]),Ee={__name:"SearchFilterBar",props:{filters:{type:Object,required:!0},facets:{type:Object,default:()=>({byAdapter:{}})},isLoading:{type:Boolean,default:!1},mode:{type:String,default:null},shortQuery:{type:Boolean,default:!1}},emits:["set-filter","reset"],setup(r,{expose:t,emit:n}){t();const e=r,o=n,a=w(()=>e.filters.category?`在「${e.filters.category}」类目内搜索…`:"搜索关键词(如:支付宝、罗技、Kotlin)…"),l=w(()=>Object.entries(e.facets.byAdapter||{}).sort((y,k)=>k[1]-y[1]).map(([y,k])=>({value:y,label:`${y} (${k})`}))),s=w(()=>!e.filters.since&&!e.filters.until?null:[e.filters.since?new Date(e.filters.since):null,e.filters.until?new Date(e.filters.until):null]),i=w(()=>!!(e.filters.q||e.filters.adapter||e.filters.subtype||e.filters.since||e.filters.until));function d(h){o("set-filter","q",h||"")}function _(h){o("set-filter","q",h||"")}function D(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 j={props:e,emit:o,placeholderText:a,adapterOptions:l,dateRangeValue:s,hasActiveFilters:i,onQInput:d,onSearch:_,onDateChange:D,computed:w,get SearchOutlined(){return pe},get CloseCircleOutlined(){return fe},get InfoCircleOutlined(){return de}};return Object.defineProperty(j,"__isScriptSetup",{enumerable:!1,value:!0}),j}},Re={class:"pdh-filter-bar"},xe={key:1,class:"hint"},De={key:2,class:"hint"};function je(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",Re,[c(l,{value:n.filters.q,placeholder:e.placeholderText,"enter-button":"搜索","allow-clear":"",loading:n.isLoading,style:{flex:"1","max-width":"480px"},"onUpdate:value":e.onQInput,onSearch:e.onSearch},{prefix:m(()=>[c(e.SearchOutlined)]),_:1},8,["value","placeholder","loading"]),c(s,{value:n.filters.adapter,placeholder:"所有 adapter","allow-clear":"",options:e.adapterOptions,style:{width:"200px"},"onUpdate:value":t[0]||(t[0]=_=>r.$emit("set-filter","adapter",_||null))},null,8,["value","options"]),c(i,{value:e.dateRangeValue,placeholder:["开始日期","结束日期"],style:{width:"280px"},"onUpdate:value":e.onDateChange},null,8,["value"]),e.hasActiveFilters?(u(),C(d,{key:0,type:"link",danger:"",onClick:t[1]||(t[1]=_=>r.$emit("reset"))},{icon:m(()=>[c(e.CloseCircleOutlined)]),default:m(()=>[t[2]||(t[2]=b(" 清空筛选 ",-1))]),_:1})):E("v-if",!0),n.shortQuery?(u(),O("span",xe,[c(e.InfoCircleOutlined),t[3]||(t[3]=b(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):n.mode==="like"?(u(),O("span",De,[c(e.InfoCircleOutlined),t[4]||(t[4]=b(" 当前为 LIKE 兜底模式 ",-1))])):E("v-if",!0)])}const Ae=F(Ee,[["render",je],["__scopeId","data-v-d7cce6e9"],["__file","/tmp/cc-web-panel-YD0VGJ/repo/packages/web-panel/src/components/pdh/SearchFilterBar.vue"]]),Le={__name:"RendererDispatcher",props:{event:{type:Object,required:!0}},setup(r,{expose:t}){t();const n=A(()=>L(()=>import("./ChatBubbleRenderer-BaiWNH_V.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),e=A(()=>L(()=>import("./OrderTableRenderer-Cyc-XI0L.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),o=A(()=>L(()=>import("./TimelineRenderer-Cg_7j6cj.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),a=A(()=>L(()=>import("./EmailListRenderer-DhFpPMAM.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),l=A(()=>L(()=>import("./GenericCardRenderer-DElmWQTc.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:A,get getCategory(){return $}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}};function Fe(r,t,n,e,o,a){return u(),C(ae(e.rendererFor(n.event)),{event:n.event},null,8,["event"])}const Te=F(Le,[["render",Fe],["__file","/tmp/cc-web-panel-YD0VGJ/repo/packages/web-panel/src/components/pdh/renderers/RendererDispatcher.vue"]]);function ee(r){return JSON.stringify(r,null,2)}function te(r){return r.map(t=>JSON.stringify(t)).join(`
3
- `)+`
4
- `}function ne(r){const n=["id","subtype","occurredAt","occurredAtIso","actor","place","adapter","summary","contentJson","extraJson"].join(","),e=r.map(o=>{const a=Number.isFinite(o.occurredAt)?o.occurredAt:null,l=a?new Date(a).toISOString():"",s=o.source&&o.source.adapter||"",i=o.content&&(o.content.text||o.content.title||o.content.subject)||"";return[o.id||"",o.subtype||"",a!=null?String(a):"",l,o.actor||"",o.place||"",s,i,o.content?JSON.stringify(o.content):"",o.extra?JSON.stringify(o.extra):""].map(Ie).join(",")});return[n,...e].join(`
5
- `)+`
6
- `}function Ie(r){const t=String(r??"");return t.includes(",")||t.includes('"')||t.includes(`
7
- `)||t.includes("\r")?'"'+t.replace(/"/g,'""')+'"':t}function re(r,t,n="application/octet-stream"){if(typeof window>"u"||typeof document>"u")return t;const e=new Blob([r],{type:n}),o=URL.createObjectURL(e),a=document.createElement("a");return a.href=o,a.download=t,document.body.appendChild(a),a.click(),document.body.removeChild(a),setTimeout(()=>URL.revokeObjectURL(o),1e3),t}function oe(r,t=null){const n=new Date,e=n.getFullYear(),o=String(n.getMonth()+1).padStart(2,"0"),a=String(n.getDate()).padStart(2,"0"),l=r==="ndjson"?"ndjson":r,s=t?`-${t}`:"";return`pdh-events-${e}-${o}-${a}${s}.${l}`}const Pe={__name:"ExportDropdown",props:{events:{type:Array,required:!0},category:{type:String,default:null}},setup(r,{expose:t}){t();const n=r,e=w(()=>n.events.length>0),o={json:"application/json;charset=utf-8",ndjson:"application/x-ndjson;charset=utf-8",csv:"text/csv;charset=utf-8"};function a(i){switch(i){case"json":return ee(n.events);case"ndjson":return te(n.events);case"csv":return ne(n.events);default:throw new Error(`unknown format: ${i}`)}}function l({key:i}){try{const d=a(i),_=oe(i,n.category);re(d,_,o[i]),P.success(`已导出 ${n.events.length} 条到 ${_}`)}catch(d){P.error(`导出失败: ${d.message||d}`)}}const s={props:n,hasResults:e,MIME:o,serialize:a,onClick:l,computed:w,get DownloadOutlined(){return _e},get DownOutlined(){return me},get message(){return P},get eventsToJson(){return ee},get eventsToNdjson(){return te},get eventsToCsv(){return ne},get downloadAs(){return re},get suggestFilename(){return oe}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}};function qe(r,t,n,e,o,a){const l=g("a-button"),s=g("a-menu-item"),i=g("a-menu"),d=g("a-dropdown");return u(),C(d,{disabled:!e.hasResults},{overlay:m(()=>[c(i,{onClick:e.onClick},{default:m(()=>[c(s,{key:"json"},{default:m(()=>[...t[0]||(t[0]=[b("JSON (.json)",-1)])]),_:1}),c(s,{key:"ndjson"},{default:m(()=>[...t[1]||(t[1]=[b("NDJSON (.ndjson)",-1)])]),_:1}),c(s,{key:"csv"},{default:m(()=>[...t[2]||(t[2]=[b("CSV (.csv)",-1)])]),_:1})]),_:1})]),default:m(()=>[c(l,{disabled:!e.hasResults},{icon:m(()=>[c(e.DownloadOutlined)]),default:m(()=>[b(" 导出 ("+x(n.events.length)+") ",1),c(e.DownOutlined)]),_:1},8,["disabled"])]),_:1},8,["disabled"])}const Ve=F(Pe,[["render",qe],["__file","/tmp/cc-web-panel-YD0VGJ/repo/packages/web-panel/src/components/pdh/ExportDropdown.vue"]]),Be={__name:"PdhVaultBrowser",setup(r,{expose:t}){t();const n=X(),e=w(()=>n.filters.q?`没有匹配 "${n.filters.q}" 的事件 — 试试更短的关键词或换个类目`:n.filters.category?`「${N(n.filters.category)}」类目下还没有数据 — 去采集页同步对应 adapter`:"Vault 里还没有数据 — 去「个人数据中台」页面同步任意 adapter");function o(s){n.filters.category=s,n.search()}function a(s,i){n.setFilter(s,i)}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:Ae,RendererDispatcher:Te,ExportDropdown:Ve};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}},Ne={class:"pdh-browser-page"},Je={class:"page-header"},Me={class:"main-pane"},Ge={class:"results-summary"},Ue={key:0},Qe={key:0},ze={key:1},Ye={class:"loaded-of"},He={class:"results-list"},Ke={key:2,class:"load-more"};function We(r,t,n,e,o,a){const l=g("a-tag"),s=g("a-button"),i=g("a-space"),d=g("a-col"),_=g("a-spin"),D=g("a-alert"),j=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})):E("v-if",!0),c(e.ExportDropdown,{events:e.store.results,category:e.store.filters.category},null,8,["events","category"]),c(s,{onClick:t[0]||(t[0]=y=>e.store.search()),loading:e.store.isLoading},{icon:m(()=>[c(e.ReloadOutlined)]),default:m(()=>[t[5]||(t[5]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),c(h,{gutter:16,class:"browser-layout"},{default:m(()=>[c(d,{xs:24,sm:24,md:6,lg:5,xl:4},{default:m(()=>[c(e.CategorySidebar,{selected:e.store.filters.category,facets:e.store.facets,onSelect:e.onCategorySelect},null,8,["selected","facets"])]),_:1}),c(d,{xs:24,sm:24,md:18,lg:19,xl:20},{default:m(()=>[v("div",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",Ge,[e.store.isLoading&&e.store.results.length===0?(u(),O("span",Ue,[c(_,{size:"small"}),t[7]||(t[7]=b(" 载入中… ",-1))])):(u(),O(B,{key:1},[v("strong",null,x(e.store.facets.total),1),t[11]||(t[11]=b(" 条事件 ",-1)),e.store.filters.category?(u(),O("span",Qe,[t[8]||(t[8]=b(" / 当前类目 ",-1)),v("strong",null,x(e.categoryLabel(e.store.filters.category)),1),v("strong",null,x(e.store.facets.byCategory[e.store.filters.category]||0),1)])):E("v-if",!0),e.store.filters.q?(u(),O("span",ze,[t[9]||(t[9]=b(' / 关键词 "',-1)),v("em",null,x(e.store.filters.q),1),t[10]||(t[10]=b('"',-1))])):E("v-if",!0),v("span",Ye," / 已显示 "+x(e.store.results.length),1)],64))]),e.store.error?(u(),C(D,{key:0,type:"error","show-icon":"",message:e.store.error,closable:"",style:{margin:"12px 0"}},null,8,["message"])):E("v-if",!0),!e.store.isLoading&&e.store.results.length===0&&!e.store.error?(u(),C(j,{key:1,description:e.emptyHint,style:{"margin-top":"40px"}},null,8,["description"])):E("v-if",!0),v("div",He,[(u(!0),O(B,null,se(e.store.results,(y,k)=>(u(),C(e.RendererDispatcher,{key:`r-${k}-${y.id}`,event:y},null,8,["event"]))),128))]),e.store.canLoadMore?(u(),O("div",Ke,[c(s,{loading:e.store.isAppending,onClick:t[2]||(t[2]=y=>e.store.loadMore()),block:""},{default:m(()=>[...t[12]||(t[12]=[b(" 加载下一页 (50 条) ",-1)])]),_:1},8,["loading"])])):E("v-if",!0)])]),_:1})]),_:1})])}const nt=F(Be,[["render",We],["__scopeId","data-v-0f7c02cd"],["__file","/tmp/cc-web-panel-YD0VGJ/repo/packages/web-panel/src/views/PdhVaultBrowser.vue"]]);export{nt as default};
@@ -1 +0,0 @@
1
- import{E as I,b as w,r as b,I as m,J as y,U as a,R as g,c as i,K as u,V as h,F as C,Z as L,N as O,o as M,P as p,Q as S,S as R}from"./vendor-Bn1JzzAn.js";import{u as V,_ as q}from"./index-BOjTRSHE.js";import{u as E}from"./useShellMode-CgR0wCYM.js";import{p as N}from"./parsers-YNLm7sQ0.js";import{u as z}from"./chat-B1ijaKFv.js";import{aa as P,aq as j,R as B}from"./icons-DG5UD-6K.js";const A=I("skills",()=>{const _=b(!1),t=b([]),n=b(""),e=b("all"),k=w(()=>{const o=new Set(["all"]);return t.value.forEach(l=>{l.category&&o.add(l.category),l.executionMode&&o.add(l.executionMode)}),[...o]}),v=w(()=>{let o=t.value;if(e.value!=="all"&&(o=o.filter(l=>l.category===e.value||l.executionMode===e.value)),n.value){const l=n.value.toLowerCase();o=o.filter(d=>d.name?.toLowerCase().includes(l)||d.description?.toLowerCase().includes(l)||d.title?.toLowerCase().includes(l))}return o});async function f(){const o=V();_.value=!0;try{if(E().isEmbedded){const c=await o.sendRaw({type:"skill.list"},2e4);c?.ok&&Array.isArray(c.result?.skills)?t.value=c.result.skills:(console.error("skill.list custom topic failed:",c?.error),t.value=[]);return}const{output:l}=await o.execute("skill list",2e4),d=N(l);t.value=d}catch(l){console.error("Failed to load skills:",l)}finally{_.value=!1}}return{loading:_,allSkills:t,searchQuery:n,selectedCategory:e,categories:k,filteredSkills:v,loadSkills:f}}),F={__name:"Skills",setup(_,{expose:t}){t();const n=A(),e=z(),k=O(),v=w(()=>n.categories.filter(r=>r!=="all").slice(0,6));function f(r){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[r]||r}function o(r){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[r]||r||"未知"}function l(r){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[r]||"default"}async function d(r){await e.createSession("agent"),k.push("/chat"),setTimeout(()=>{e.currentSessionId&&e.sendMessage(e.currentSessionId,`/skill run ${r}`)},300)}M(()=>{n.allSkills.length||n.loadSkills()});const c={skillsStore:n,chatStore:e,router:k,displayCategories:v,catLabel:f,modeLabel:o,modeColor:l,runSkill:d,computed:w,onMounted:M,get useRouter(){return O},get ReloadOutlined(){return B},get PlayCircleOutlined(){return j},get AppstoreOutlined(){return P},get useSkillsStore(){return A},get useChatStore(){return z}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}},Q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},U={class:"page-sub"},D={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},G={key:0,style:{"text-align":"center",padding:"60px"}},J={class:"skills-grid"},T={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},K={style:{flex:"1","min-width":"0"}},W={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},Y={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Z={style:{"margin-left":"12px","flex-shrink":"0"}},H={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},X={style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}};function $(_,t,n,e,k,v){const f=m("a-button"),o=m("a-input-search"),l=m("a-radio-button"),d=m("a-radio-group"),c=m("a-spin"),r=m("a-tag"),x=m("a-card");return p(),y("div",null,[a("div",Q,[a("div",null,[t[3]||(t[3]=a("h2",{class:"page-title"},"技能管理",-1)),a("p",U,g(e.skillsStore.allSkills.length)+" 个可用技能",1)]),i(f,{type:"primary",ghost:"",loading:e.skillsStore.loading,onClick:t[0]||(t[0]=s=>e.skillsStore.loadSkills())},{icon:u(()=>[i(e.ReloadOutlined)]),default:u(()=>[t[4]||(t[4]=S(" 刷新 ",-1))]),_:1},8,["loading"])]),h(" Search & Filter "),a("div",D,[i(o,{value:e.skillsStore.searchQuery,"onUpdate:value":t[1]||(t[1]=s=>e.skillsStore.searchQuery=s),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),i(d,{value:e.skillsStore.selectedCategory,"onUpdate:value":t[2]||(t[2]=s=>e.skillsStore.selectedCategory=s),"button-style":"solid"},{default:u(()=>[i(l,{value:"all"},{default:u(()=>[...t[5]||(t[5]=[S("全部",-1)])]),_:1}),(p(!0),y(C,null,L(e.displayCategories,s=>(p(),R(l,{key:s,value:s},{default:u(()=>[S(g(e.catLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),h(" Loading State "),e.skillsStore.loading?(p(),y("div",G,[i(c,{size:"large"}),t[6]||(t[6]=a("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):e.skillsStore.filteredSkills.length?(p(),y(C,{key:1},[h(" Skills Grid "),a("div",J,[(p(!0),y(C,null,L(e.skillsStore.filteredSkills,s=>(p(),R(x,{key:s.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:u(()=>[a("div",T,[a("div",K,[a("div",W,g(s.name),1),a("div",Y,g(s.description||"暂无描述"),1)]),a("div",Z,[i(r,{color:e.modeColor(s.executionMode),style:{"font-size":"10px"}},{default:u(()=>[S(g(e.modeLabel(s.executionMode)),1)]),_:2},1032,["color"])])]),a("div",H,[i(f,{size:"small",type:"primary",ghost:"",onClick:ee=>e.runSkill(s.name)},{icon:u(()=>[i(e.PlayCircleOutlined)]),default:u(()=>[t[7]||(t[7]=S(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])],2112)):(p(),y(C,{key:2},[h(" Empty State "),a("div",X,[i(e.AppstoreOutlined,{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),a("div",null,g(e.skillsStore.allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)])],2112))])}const ie=q(F,[["render",$],["__scopeId","data-v-d64d43f5"],["__file","/tmp/cc-web-panel-YD0VGJ/repo/packages/web-panel/src/views/Skills.vue"]]);export{ie as default};
@@ -1 +0,0 @@
1
- import{I as u,J as j,U as b,R as c,c as a,K as i,a as R,r as k,o as F,b as E,P as O,Q as p,S as z,V as C}from"./vendor-Bn1JzzAn.js";import{t as M,_ as Q,b as K,u as T,d as S}from"./index-BOjTRSHE.js";import{i as Y,R as q}from"./icons-DG5UD-6K.js";const v=Object.freeze({defaultEngine:"webspeech",webSpeech:{lang:"zh-CN"},whisperAPI:{apiKey:"",baseURL:"https://api.openai.com/v1",model:"whisper-1",language:"zh",timeout:6e4},whisperLocal:{serverUrl:"http://localhost:8002",modelSize:"base",device:"auto",timeout:12e4}}),X=["webspeech","whisper-api","whisper-local"];function D(g,t){if(typeof g=="number"&&Number.isFinite(g))return g;const s=parseFloat(g);return Number.isFinite(s)?s:t}function Z(g){return JSON.parse(JSON.stringify(g))}function B(g){const t=Z(v);if(!g)return t;const s=g.trim();if(!s||/key not found/i.test(s))return t;const e=M(s);if(!e||typeof e!="object"||Array.isArray(e))return t;if(typeof e.defaultEngine=="string"&&X.includes(e.defaultEngine)&&(t.defaultEngine=e.defaultEngine),e.webSpeech&&typeof e.webSpeech=="object"&&typeof e.webSpeech.lang=="string"&&e.webSpeech.lang&&(t.webSpeech.lang=e.webSpeech.lang),e.whisperAPI&&typeof e.whisperAPI=="object"){const l=e.whisperAPI;typeof l.apiKey=="string"&&(t.whisperAPI.apiKey=l.apiKey),typeof l.baseURL=="string"&&l.baseURL&&(t.whisperAPI.baseURL=l.baseURL),typeof l.model=="string"&&l.model&&(t.whisperAPI.model=l.model),typeof l.language=="string"&&l.language&&(t.whisperAPI.language=l.language),l.timeout!==void 0&&(t.whisperAPI.timeout=D(l.timeout,v.whisperAPI.timeout))}if(e.whisperLocal&&typeof e.whisperLocal=="object"){const l=e.whisperLocal;typeof l.serverUrl=="string"&&l.serverUrl&&(t.whisperLocal.serverUrl=l.serverUrl),typeof l.modelSize=="string"&&l.modelSize&&(t.whisperLocal.modelSize=l.modelSize),typeof l.device=="string"&&l.device&&(t.whisperLocal.device=l.device),l.timeout!==void 0&&(t.whisperLocal.timeout=D(l.timeout,v.whisperLocal.timeout))}return t}function J(g,t){const s={};g.defaultEngine!==t.defaultEngine&&(s.defaultEngine=t.defaultEngine);for(const e of["webSpeech","whisperAPI","whisperLocal"]){const l=g[e]||{},w=t[e]||{};for(const o of Object.keys(v[e]))l[o]!==w[o]&&(s[`${e}.${o}`]=w[o])}return s}const $={__name:"SpeechSettings",setup(g,{expose:t}){t();const{t:s}=K(),e=T(),l=k(!1),w=k(!1),o=R(JSON.parse(JSON.stringify(v))),h=k(JSON.parse(JSON.stringify(v))),y=E(()=>[{value:"webspeech",label:s("speechSettings.engineOptions.webspeech")},{value:"whisper-api",label:s("speechSettings.engineOptions.whisper-api")},{value:"whisper-local",label:s("speechSettings.engineOptions.whisper-local")}]),f=E(()=>{const d=`speechSettings.engineHint.${o.defaultEngine}`,n=s(d);return n===d?"":n}),_=E(()=>Object.keys(J(h.value,o)).length>0);function m(d){o.defaultEngine=d.defaultEngine,Object.assign(o.webSpeech,d.webSpeech),Object.assign(o.whisperAPI,d.whisperAPI),Object.assign(o.whisperLocal,d.whisperLocal),h.value=JSON.parse(JSON.stringify(d))}async function r(){l.value=!0;try{const{output:d}=await e.execute("config get speech",1e4);m(B(d))}catch(d){/key not found/i.test(d.message)?m(JSON.parse(JSON.stringify(v))):S.error(s("speechSettings.messages.loadFailed",{err:d.message}))}finally{l.value=!1}}function N(){m(h.value)}async function L(){const d=J(h.value,o),n=Object.keys(d);if(n.length===0){S.info(s("speechSettings.messages.noChanges"));return}w.value=!0;let P=0,I=0;for(const A of n){const H=d[A],V=String(H).replace(/"/g,'\\"'),G=`config set speech.${A} "${V}"`;try{const{output:U,exitCode:W}=await e.execute(G,1e4);W!==0||/error|failed|失败/i.test(U)?(I++,S.error(s("speechSettings.messages.saveItemFailed",{key:A,err:U.slice(0,80)}))):P++}catch(U){I++,S.error(s("speechSettings.messages.saveItemFailed",{key:A,err:U.message}))}}w.value=!1,I===0?(S.success(s("speechSettings.messages.saveOk",{count:P})),h.value=JSON.parse(JSON.stringify(o))):P>0&&(S.warning(s("speechSettings.messages.savePartial",{ok:P,fail:I})),await r())}F(()=>{r()});const x={t:s,ws:e,loading:l,saving:w,form:o,baseline:h,engineOptions:y,engineHint:f,isDirty:_,applyConfig:m,loadConfig:r,resetForm:N,saveConfig:L,reactive:R,ref:k,computed:E,onMounted:F,get useI18n(){return K},get ReloadOutlined(){return q},get SoundOutlined(){return Y},get message(){return S},get useWsStore(){return T},get parseSpeechConfig(){return B},get diffSpeechConfig(){return J},get SPEECH_DEFAULTS(){return v}};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},ee={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},te={class:"page-title"},ae={class:"page-sub"},ie={style:{color:"var(--text-primary)"}},le={style:{color:"var(--text-muted)","font-size":"11px"}},ne={style:{color:"var(--text-primary)"}},se={style:{color:"var(--text-primary)"}},oe={style:{color:"var(--text-primary)"}},re={style:{display:"flex",gap:"12px","align-items":"center"}},de={key:0,style:{color:"#faad14","font-size":"12px"}};function pe(g,t,s,e,l,w){const o=u("a-button"),h=u("a-alert"),y=u("a-select"),f=u("a-form-item"),_=u("a-form"),m=u("a-card"),r=u("a-select-option"),N=u("a-input-password"),L=u("a-input"),x=u("a-input-number"),d=u("a-spin");return O(),j("div",null,[b("div",ee,[b("div",null,[b("h2",te,c(e.t("speechSettings.title")),1),b("p",ae,c(e.t("speechSettings.subtitle")),1)]),a(o,{loading:e.loading,onClick:e.loadConfig},{icon:i(()=>[a(e.ReloadOutlined)]),default:i(()=>[p(" "+c(e.t("speechSettings.refresh")),1)]),_:1},8,["loading"])]),a(h,{message:e.t("speechSettings.alert.message"),description:e.t("speechSettings.alert.description"),type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),a(d,{spinning:e.loading},{default:i(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",ie,[a(e.SoundOutlined,{style:{"margin-right":"8px"}}),p(c(e.t("speechSettings.engineCardTitle")),1)])]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.engineLabel")},{extra:i(()=>[b("span",le,c(e.engineHint),1)]),default:i(()=>[a(y,{value:e.form.defaultEngine,"onUpdate:value":t[0]||(t[0]=n=>e.form.defaultEngine=n),style:{width:"320px"},disabled:e.saving,options:e.engineOptions},null,8,["value","disabled","options"])]),_:1},8,["label"])]),_:1})]),_:1}),e.form.defaultEngine==="webspeech"?(O(),z(m,{key:0,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",ne,c(e.t("speechSettings.webSpeech.cardTitle")),1)]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.webSpeech.langLabel")},{default:i(()=>[a(y,{value:e.form.webSpeech.lang,"onUpdate:value":t[1]||(t[1]=n=>e.form.webSpeech.lang=n),style:{width:"240px"},disabled:e.saving},{default:i(()=>[a(r,{value:"zh-CN"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.zh-CN")),1)]),_:1}),a(r,{value:"zh-TW"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.zh-TW")),1)]),_:1}),a(r,{value:"en-US"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.en-US")),1)]),_:1}),a(r,{value:"en-GB"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.en-GB")),1)]),_:1}),a(r,{value:"ja-JP"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.ja-JP")),1)]),_:1}),a(r,{value:"ko-KR"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.ko-KR")),1)]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):C("v-if",!0),e.form.defaultEngine==="whisper-api"?(O(),z(m,{key:1,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",se,c(e.t("speechSettings.whisperAPI.cardTitle")),1)]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.whisperAPI.apiKeyLabel")},{default:i(()=>[a(N,{value:e.form.whisperAPI.apiKey,"onUpdate:value":t[2]||(t[2]=n=>e.form.whisperAPI.apiKey=n),placeholder:"sk-...",disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.baseUrlLabel")},{default:i(()=>[a(L,{value:e.form.whisperAPI.baseURL,"onUpdate:value":t[3]||(t[3]=n=>e.form.whisperAPI.baseURL=n),disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.modelLabel")},{default:i(()=>[a(L,{value:e.form.whisperAPI.model,"onUpdate:value":t[4]||(t[4]=n=>e.form.whisperAPI.model=n),disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.languageLabel")},{default:i(()=>[a(L,{value:e.form.whisperAPI.language,"onUpdate:value":t[5]||(t[5]=n=>e.form.whisperAPI.language=n),disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.timeoutLabel")},{default:i(()=>[a(x,{value:e.form.whisperAPI.timeout,"onUpdate:value":t[6]||(t[6]=n=>e.form.whisperAPI.timeout=n),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):C("v-if",!0),e.form.defaultEngine==="whisper-local"?(O(),z(m,{key:2,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",oe,c(e.t("speechSettings.whisperLocal.cardTitle")),1)]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.whisperLocal.serverUrlLabel")},{default:i(()=>[a(L,{value:e.form.whisperLocal.serverUrl,"onUpdate:value":t[7]||(t[7]=n=>e.form.whisperLocal.serverUrl=n),placeholder:"http://localhost:8002",disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperLocal.modelSizeLabel")},{default:i(()=>[a(y,{value:e.form.whisperLocal.modelSize,"onUpdate:value":t[8]||(t[8]=n=>e.form.whisperLocal.modelSize=n),style:{width:"180px"},disabled:e.saving},{default:i(()=>[a(r,{value:"tiny"},{default:i(()=>[...t[11]||(t[11]=[p("tiny",-1)])]),_:1}),a(r,{value:"base"},{default:i(()=>[...t[12]||(t[12]=[p("base",-1)])]),_:1}),a(r,{value:"small"},{default:i(()=>[...t[13]||(t[13]=[p("small",-1)])]),_:1}),a(r,{value:"medium"},{default:i(()=>[...t[14]||(t[14]=[p("medium",-1)])]),_:1}),a(r,{value:"large"},{default:i(()=>[...t[15]||(t[15]=[p("large",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperLocal.deviceLabel")},{default:i(()=>[a(y,{value:e.form.whisperLocal.device,"onUpdate:value":t[9]||(t[9]=n=>e.form.whisperLocal.device=n),style:{width:"180px"},disabled:e.saving},{default:i(()=>[a(r,{value:"auto"},{default:i(()=>[...t[16]||(t[16]=[p("auto",-1)])]),_:1}),a(r,{value:"cpu"},{default:i(()=>[...t[17]||(t[17]=[p("cpu",-1)])]),_:1}),a(r,{value:"cuda"},{default:i(()=>[...t[18]||(t[18]=[p("cuda",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperLocal.timeoutLabel")},{default:i(()=>[a(x,{value:e.form.whisperLocal.timeout,"onUpdate:value":t[10]||(t[10]=n=>e.form.whisperLocal.timeout=n),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):C("v-if",!0),b("div",re,[a(o,{onClick:e.resetForm,disabled:e.saving||e.loading},{default:i(()=>[p(c(e.t("speechSettings.buttons.reset")),1)]),_:1},8,["disabled"]),a(o,{type:"primary",loading:e.saving,disabled:!e.isDirty,onClick:e.saveConfig},{default:i(()=>[p(c(e.t("speechSettings.buttons.save")),1)]),_:1},8,["loading","disabled"]),e.isDirty?(O(),j("span",de,c(e.t("speechSettings.dirtyHint")),1)):C("v-if",!0)])]),_:1},8,["spinning"])])}const ue=Q($,[["render",pe],["__scopeId","data-v-2b18ccaa"],["__file","/tmp/cc-web-panel-YD0VGJ/repo/packages/web-panel/src/views/SpeechSettings.vue"]]);export{ue as default};
@@ -1 +0,0 @@
1
- import{E as F,b as z,r as R,I as p,J as c,U as _,c as n,K as a,S as C,V as x,o as V,x as I,P as i,Q as k,R as r,F as T,Z as O}from"./vendor-Bn1JzzAn.js";import{u as P,_ as E}from"./index-BOjTRSHE.js";import{R as U}from"./icons-DG5UD-6K.js";const B=F("tasks",()=>{const y=R([]),l=R(!1);let u=null,t=null,d=null;const b=z(()=>y.value.filter(e=>e.status==="running")),v=z(()=>y.value.filter(e=>e.status==="pending")),w=z(()=>y.value.filter(e=>e.status==="completed"||e.status==="failed"||e.status==="timeout"));async function s(){const e=P();l.value=!0;try{const g=await e.sendRaw({type:"tasks-list"});g&&Array.isArray(g.tasks)&&(y.value=g.tasks)}catch{}finally{l.value=!1}}async function m(e){const g=P();try{await g.sendRaw({type:"tasks-stop",taskId:e})}catch{}finally{await s()}}const f=R(null);function h(e=5e3){N(),s(),u=setInterval(s,e),S()}function N(){u&&(clearInterval(u),u=null),t&&(t(),t=null),d&&(clearTimeout(d),d=null)}function S(){const e=P();if(t)return;const g=D=>{D.type==="task:notification"&&D.payload?.task&&(f.value=D.payload.task,s(),d&&clearTimeout(d),d=setTimeout(()=>{f.value=null,d=null},8e3))};t=e.onRuntimeEvent(g)}function A(e){return!e||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${(e/6e4).toFixed(1)}m`}function o(e){switch(e){case"running":return"processing";case"pending":return"default";case"completed":return"success";case"failed":return"error";case"timeout":return"warning";default:return"default"}}return{tasks:y,loading:l,running:b,pending:v,completed:w,lastNotification:f,fetchTasks:s,stopTask:m,startPolling:h,stopPolling:N,formatDuration:A,getStatusColor:o}}),J={__name:"Tasks",setup(y,{expose:l}){l();const u=B(),t=[{title:"状态",key:"status",width:90},{title:"描述",key:"description",ellipsis:!0},{title:"类型",dataIndex:"type",width:100},{title:"耗时",key:"duration",width:90},{title:"创建时间",key:"createdAt",width:180},{title:"结果",key:"result",ellipsis:!0},{title:"操作",key:"action",width:80}];function d(s){return s.status==="running"&&s.startedAt?u.formatDuration(Date.now()-s.startedAt):s.completedAt&&s.startedAt?u.formatDuration(s.completedAt-s.startedAt):"-"}function b(s){return s?new Date(s).toLocaleString():"-"}function v(s,m){return s?s.length>m?`${s.slice(0,m)}...`:s:""}V(()=>u.startPolling(5e3)),I(()=>u.stopPolling());const w={store:u,columns:t,getDuration:d,formatTime:b,truncate:v,onMounted:V,onUnmounted:I,get ReloadOutlined(){return U},get useTasksStore(){return B}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}},L={class:"page-header"},j={key:0,class:"error-text"},G={key:1},K={class:"task-header"},M={class:"task-desc"},Q={class:"task-id"},W={class:"task-meta"},Y=["title"],Z={key:0,class:"error-text"},q={key:1,class:"success-text"},H={key:2,class:"muted-text"};function X(y,l,u,t,d,b){const v=p("a-button"),w=p("a-space"),s=p("a-alert"),m=p("a-statistic"),f=p("a-card"),h=p("a-col"),N=p("a-row"),S=p("a-tag"),A=p("a-table");return i(),c("div",null,[_("div",L,[l[3]||(l[3]=_("div",null,[_("h2",{class:"page-title"},"后台任务"),_("p",{class:"page-sub"},"查看后台任务队列、实时通知和任务执行结果。")],-1)),n(w,null,{default:a(()=>[n(v,{ghost:"",loading:t.store.loading,onClick:l[0]||(l[0]=o=>t.store.fetchTasks())},{icon:a(()=>[n(t.ReloadOutlined)]),default:a(()=>[l[2]||(l[2]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),t.store.lastNotification?(i(),C(s,{key:0,type:t.store.lastNotification.status==="completed"?"success":"error","show-icon":"",closable:"",class:"banner",onClose:l[1]||(l[1]=o=>t.store.lastNotification=null)},{message:a(()=>[k(" 任务"+r(t.store.lastNotification.status==="completed"?"完成":"结束")+": "+r(t.store.lastNotification.description||t.store.lastNotification.id.slice(0,16)),1)]),description:a(()=>[t.store.lastNotification.error?(i(),c("span",j,r(t.store.lastNotification.error),1)):t.store.lastNotification.result?(i(),c("span",G,r(t.truncate(String(t.store.lastNotification.result),120)),1)):x("v-if",!0)]),_:1},8,["type"])):x("v-if",!0),n(N,{gutter:[16,16],class:"stats-row"},{default:a(()=>[n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"全部任务",value:t.store.tasks.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"运行中",value:t.store.running.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"等待中",value:t.store.pending.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"已完成",value:t.store.completed.length},null,8,["value"])]),_:1})]),_:1})]),_:1}),t.store.running.length>0?(i(),C(f,{key:1,title:"运行中的任务",class:"panel-card",size:"small"},{default:a(()=>[(i(!0),c(T,null,O(t.store.running,o=>(i(),c("div",{key:o.id,class:"task-item running"},[_("div",K,[n(S,{color:t.store.getStatusColor(o.status)},{default:a(()=>[k(r(o.status.toUpperCase()),1)]),_:2},1032,["color"]),_("span",M,r(o.description),1),_("span",Q,r(o.id.slice(0,16)),1)]),_("div",W,[_("span",null,"类型: "+r(o.type||"-"),1),_("span",null,"已运行: "+r(t.store.formatDuration(Date.now()-o.startedAt)),1),n(v,{size:"small",danger:"",onClick:e=>t.store.stopTask(o.id)},{default:a(()=>[...l[4]||(l[4]=[k("停止",-1)])]),_:1},8,["onClick"])])]))),128))]),_:1})):x("v-if",!0),n(f,{class:"panel-card"},{default:a(()=>[n(A,{columns:t.columns,"data-source":t.store.tasks,pagination:{pageSize:15,size:"small"},loading:t.store.loading,"row-key":"id",size:"small"},{bodyCell:a(({column:o,record:e})=>[o.key==="status"?(i(),C(S,{key:0,color:t.store.getStatusColor(e.status)},{default:a(()=>[k(r(e.status),1)]),_:2},1032,["color"])):o.key==="description"?(i(),c("span",{key:1,title:e.command},r(e.description),9,Y)):o.key==="duration"?(i(),c(T,{key:2},[k(r(t.getDuration(e)),1)],64)):o.key==="createdAt"?(i(),c(T,{key:3},[k(r(t.formatTime(e.createdAt)),1)],64)):o.key==="result"?(i(),c(T,{key:4},[e.error?(i(),c("span",Z,r(t.truncate(e.error,60)),1)):e.result?(i(),c("span",q,r(t.truncate(String(e.result),60)),1)):(i(),c("span",H,"-"))],64)):o.key==="action"?(i(),c(T,{key:5},[e.status==="running"?(i(),C(v,{key:0,size:"small",danger:"",onClick:g=>t.store.stopTask(e.id)},{default:a(()=>[...l[5]||(l[5]=[k(" 停止 ",-1)])]),_:1},8,["onClick"])):x("v-if",!0)],64)):x("v-if",!0)]),_:1},8,["data-source","loading"])]),_:1})])}const st=E(J,[["render",X],["__scopeId","data-v-da5ff6a2"],["__file","/tmp/cc-web-panel-YD0VGJ/repo/packages/web-panel/src/views/Tasks.vue"]]);export{st as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-BOjTRSHE.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-BmstiyBM.js";import{a0 as t}from"./index-BOjTRSHE.js";import"./vendor-Bn1JzzAn.js";import"./index-BA0FMuDX.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-B6Ukqvli.js";import{a0 as t}from"./index-BOjTRSHE.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-DzFM_TQf.js";import"./useFlexGapSupport-CjXXcU1j.js";import"./styleChecker-BzoT0TfJ.js";import"./index-BA0FMuDX.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};