chainlesschain 0.166.72 → 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 (172) hide show
  1. package/README.md +15 -2
  2. package/package.json +2 -1
  3. package/scripts/pm-exploration-effect.mjs +188 -0
  4. package/src/assets/web-panel/assets/{AIOps-Vk4bgcvz.js → AIOps-CNaejClV.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-dm1pfXdM.js → ActionButton-CF_CVKT_.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-C9WdXlkB.js → Analytics-a3Z6J7gv.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-0f-jWk68.js → AppLayout-BFtWEnct.js} +5 -5
  8. package/src/assets/web-panel/assets/Artifacts-BQ8oeMvX.js +1 -0
  9. package/src/assets/web-panel/assets/{Audit-CymWJrNf.js → Audit-NOo9bmgk.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-9bWGX_cn.js → BackgroundAgents-QRc7F3Tp.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-DFBHB3_Y.js → Backup-UlVgLn2P.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-D9Lm9d3n.js → BaseInput-BER9LJAr.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-maC7odiU.js → Chat-Z8z2Fdfz.js} +5 -5
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-Crsqn0B1.js → ChatBubbleRenderer-DdmuBrdQ.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-BrZgAIL0.js → Checkbox-CXPgyB8L.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-ChqWBE8R.js → Codegen-D1vOsLJ7.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-C5TaXHn9.js → Col-ucLnUJC7.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-D8m4Egsw.js → Community-COsV9n9t.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-CMJmi_Bw.js → Compact-D0EkBEYh.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-CW7Bwy8s.js → Compliance-C8w9SUjt.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-DLhPTsU6.js → Cowork-CmVaKEJS.js} +3 -3
  22. package/src/assets/web-panel/assets/{Cron-DBrXtf_1.js → Cron-B_FiMMV2.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-CzLbJF3j.js → Crosschain-ByO3YL8N.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-DreItINq.js → DID-DwpsLM9r.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-B_gO9CjY.js → Dashboard-B_8IUvM_.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-DXpPiTH_.js → Dropdown-Bo6WQkuX.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-Cb1YonC_.js → EmailListRenderer-C9LiQesx.js} +1 -1
  28. package/src/assets/web-panel/assets/{EvolutionSettings-GQb6tV_E.js → EvolutionSettings-Pc1IpRfk.js} +1 -1
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DUtpqpsn.js → FamilyGuardDashboard-Dst6VUnO.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-CfZsj0gb.js → Federation-Ci7CoLkJ.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-Cdr40ozm.js → FormItemContext-bdDyUhUM.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-BRaf18hh.js → GenericCardRenderer-CrRwOUVi.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-7SqGn3Zi.js → Git-Dis8h-Z-.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-D1mfL8Fz.js → Governance-DX7OH5w2.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference-BXVyCWMd.js → Inference-Cavv_Q_Z.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-C-wAA2Ub.js → KnowledgeGraph-Cck8tnZn.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-DWxiJiFe.js → Logs-BQt3aGMu.js} +2 -2
  38. package/src/assets/web-panel/assets/MarkdownRenderer-BIUeeiVA.js +1 -0
  39. package/src/assets/web-panel/assets/{Marketplace-CmOVgbTO.js → Marketplace-CdmAKNSN.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-Cx4WyryN.js → McpTools-BUlJdyPY.js} +3 -3
  41. package/src/assets/web-panel/assets/{Memory-Di6wy0Ky.js → Memory-DQRTQDr-.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-DrR7I1A7.js → MobileBridge-C0dnxgsl.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileProjects-SnNFgay-.js → MobileProjects-DQ5Gy7fa.js} +1 -1
  44. package/src/assets/web-panel/assets/{Mtc-DPZpfO4G.js → Mtc-Xl7u2isS.js} +5 -5
  45. package/src/assets/web-panel/assets/{MtcAudit-CTT74J6Y.js → MtcAudit-C3KX0574.js} +2 -2
  46. package/src/assets/web-panel/assets/{Multisig-DoLT96hm.js → Multisig-CHEhfkn8.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-BY-9TS7_.js → NLProgramming-Ce38mH-8.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-1_rKLQkS.js → Notes-C7nuTd7c.js} +4 -4
  49. package/src/assets/web-panel/assets/{NotificationSettings-D8N1NZ6Y.js → NotificationSettings-BcoEcyq8.js} +1 -1
  50. package/src/assets/web-panel/assets/{OrderTableRenderer-Ch-HjmbS.js → OrderTableRenderer-D-t5hKkx.js} +1 -1
  51. package/src/assets/web-panel/assets/{Organization-DKQtaPAc.js → Organization-C_BGi4xi.js} +4 -4
  52. package/src/assets/web-panel/assets/{Overflow-B3n9XpS2.js → Overflow-BodhraDq.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-Fn8LWurl.js → P2P-BTa3sAIy.js} +2 -2
  54. package/src/assets/web-panel/assets/{PdhVaultBrowser-CsumgiUO.js → PdhVaultBrowser-BjZslP9T.js} +5 -5
  55. package/src/assets/web-panel/assets/{Permissions-CTCN6Rk6.js → Permissions-u3UDzGef.js} +3 -3
  56. package/src/assets/web-panel/assets/{PersonalDataHub-BwpvzXm7.js → PersonalDataHub-Cb7ybv65.js} +3 -3
  57. package/src/assets/web-panel/assets/{Pipeline-C1_hrCCQ.js → Pipeline-CS24k-P7.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-C-BmNft5.js → Privacy-Ddj6Kqs7.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-B9HYk17G.js → ProjectInit-Bg5uQIgg.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-BFgA-an1.js → ProjectSettings-AmPR8T12.js} +2 -2
  61. package/src/assets/web-panel/assets/{Projects-Yofw9TrC.js → Projects-DGSbAyTK.js} +1 -1
  62. package/src/assets/web-panel/assets/{Providers-B83JppEP.js → Providers-Dc1C3lbB.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-D5ZRpUGC.js → QrScannerModal-Cv3HXpce.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-B-mz9iY-.js → QuickAsk-3dpbXARb.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-DtjVu00v.js → Recommend-5aGRVnJK.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-Dk8IBiG3.js → RemoteSession-CTS2jx0p.js} +3 -3
  67. package/src/assets/web-panel/assets/{Reputation-DpTIK7Oe.js → Reputation-BxaKI0hY.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-DVYQoXil.js → Row-C23uQdwd.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-ikMaTwEE.js → RssFeed-ssX9YOhm.js} +3 -3
  70. package/src/assets/web-panel/assets/{Search-CHVHCNdo.js → Search-C24GogII.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-MxjX-UDp.js → Security-DdAcGKkk.js} +2 -2
  72. package/src/assets/web-panel/assets/{Services-CmwTYlHk.js → Services-D0dCiEuq.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-BQzBoW5V.js → Skeleton-DEY44o0v.js} +1 -1
  74. package/src/assets/web-panel/assets/Skills-CYt0Mu2W.js +1 -0
  75. package/src/assets/web-panel/assets/{Sla-DOQbR10a.js → Sla-B_bbo2vB.js} +1 -1
  76. package/src/assets/web-panel/assets/SpeechSettings-a2BBjtTL.js +1 -0
  77. package/src/assets/web-panel/assets/{SyncSettings-BPyc0P-r.js → SyncSettings-CpIXql0Z.js} +2 -2
  78. package/src/assets/web-panel/assets/Tasks-BYQKU-GL.js +1 -0
  79. package/src/assets/web-panel/assets/{Templates-BRpihbvV.js → Templates-C_44nVPq.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant-B1qu8vDX.js → Tenant-CyZ2ey2P.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-CEe3YAvM.js → Terminal-DwGNHWnp.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-Biz2ENj5.js → TimelineRenderer-BTAHNkqU.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-Bh-mJyas.js → Tokens-DCJWkUwc.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-DaFKe1bY.js → Trigger-BCjDO9-E.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-DsJ7u_-G.js → Trust-_YS8WbRb.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-9I90JZxO.js → UkeySign-m6R8xGq7.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-C96s3pW9.js → VideoEditing-xOfk29c4.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-DTMqIySe.js → Wallet-B1Gw0awc.js} +4 -4
  89. package/src/assets/web-panel/assets/{WebAuthn-C3rh3szY.js → WebAuthn-CHK5ft18.js} +5 -5
  90. package/src/assets/web-panel/assets/{WorkflowEditor-C3as7vBp.js → WorkflowEditor-DEp1ukQQ.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-zsGetwuT.js → chat-B2sFizun.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-Dt9qbWYV.js → colors-DJ17YV1E.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-BJWYHVIL.js → compact-item-CBhJJgEC.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-pKrpnY7l.js → createContext-BZkpvNJy.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-DZhu13vj.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-sbUKl7Xu.js → hasIn-C0ZKo6Ei.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BfQmb4PB.js → index-4oULtRqE.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DD_IBhgm.js → index-5K2z_tgO.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BWPF2Hth.js → index-8ueG48gl.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CRsSdHdW.js → index-BEnd5fiz.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BiZ6Lupa.js → index-BGIvhCPl.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BQtTUsCI.js → index-BMxOoITz.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-qE4san4o.js → index-BNp6HKFh.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-omZRNwB7.js → index-BOfPp5OV.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-CnrxgbPB.js → index-Bc3vVG2X.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CR5WxgE-.js → index-BoDUYyuo.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BRpfrG-e.js → index-BpyrhOeh.js} +1 -1
  108. package/src/assets/web-panel/assets/index-C6iFyQYz.js +1 -0
  109. package/src/assets/web-panel/assets/{index-Dmp7IdrF.js → index-C7gv9dvb.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-5GohpTfK.js → index-C9gYiACH.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-D7tOZZAs.js → index-CCOr6Q27.js} +1 -1
  112. package/src/assets/web-panel/assets/{index--wWXhZQU.js → index-CW5o1Gar.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BFMPJahZ.js → index-CZW84cEf.js} +3 -3
  114. package/src/assets/web-panel/assets/{index-DRAzhNw6.js → index-CZlkPrxb.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-Bf8dv266.js → index-CdxJm-HB.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-sakhsZMa.js → index-Chct9tL8.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DFQTgkPD.js → index-Cn5UzvgR.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BR1gZBlK.js → index-Ctguam0K.js} +1 -1
  119. package/src/assets/web-panel/assets/index-CztThH9f.js +1 -0
  120. package/src/assets/web-panel/assets/{index-T8ASbPWt.js → index-DHtpMr1G.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-fQ-JtwM7.js → index-DJkoJzTU.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Di-YcQHn.js → index-DLMr5KMd.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-oUag3zZf.js → index-DLo8Ls9u.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-BSXJ2PbY.js → index-DM0rWF6z.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-C_z7zLle.js → index-DOBXNMdh.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-0CK6iR4G.js → index-Dfgxe-fw.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-B53DhH1R.js → index-DjdSFO0d.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-vTPOhhfW.js → index-DrU5xVpF.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DJZq5jWm.js → index-DumLgj1t.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BZmBSuN8.js → index-Dxe0YlZe.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DoMii5CD.js → index-DyiCbHeL.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-n8vVPeJ6.js → index-IHgzfc1u.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DIxu3nOh.js → index-KzNhWykP.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-DWBlZsqf.js → index-LPPe0val.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-B9DoXtNz.js → index-vFMwiAN4.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-BVpFM2mv.js → initDefaultProps-Cqfoq0TJ.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-Mrl9_kZM.js → motion-CIiVJHNu.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-CvRC7fRw.js → move-CFl1o_A8.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-C7PSeivU.js → mtc-parser-DYoCxcZ1.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-RI1cO_Ok.js → omit-C1P2q5TY.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-akwD3e22.js → pickAttrs-BtTRpJtC.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-C4f-tfqj.js → placementArrow-Cst2PcNM.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-hyHNGoSW.js → responsiveObserve-CF5kalV2.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-B6vlTDr6.js → slide-CtHGqpXN.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-D8poWZW8.js → statusUtils-N__biHXf.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-Bz1ZKvoD.js → styleChecker-DR8V_H-i.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-C-vv_T11.js → useFlexGapSupport-D274dqun.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-BubqlAej.js → useFs-BwHLYU5b.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-CTNJrVC8.js → usePersonalDataHub-BiA-hVqt.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-DbT41Wli.js → vnode-Bugl94dy.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-R0Rxz73D.js → zoom-DEFl8GCu.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/data/changelog.json +52 -0
  154. package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +2 -0
  155. package/src/lib/evolution/evolution-eval-cohort-enrollment.js +770 -0
  156. package/src/lib/evolution/evolution-eval-contracts.js +86 -0
  157. package/src/lib/evolution/evolution-eval-gate.js +423 -115
  158. package/src/lib/evolution/evolution-eval-launch-admission.js +505 -0
  159. package/src/lib/evolution/pm-exploration-benchmark.js +2014 -49
  160. package/src/lib/evolution/skill-target-matrix-eval.js +84 -3
  161. package/src/lib/evolution/skill-writer-inventory-manifest.js +4 -1
  162. package/src/lib/task-progress-tracker.js +47 -4
  163. package/src/lib/with-file-lock.js +81 -16
  164. package/src/runtime/agent-core.js +18 -7
  165. package/src/assets/web-panel/assets/Artifacts-C7HWVeFu.js +0 -1
  166. package/src/assets/web-panel/assets/MarkdownRenderer-BJl3Hibe.js +0 -1
  167. package/src/assets/web-panel/assets/Skills-B-mPG69i.js +0 -1
  168. package/src/assets/web-panel/assets/SpeechSettings-wPQkSA9J.js +0 -1
  169. package/src/assets/web-panel/assets/Tasks-DbBA-eHJ.js +0 -1
  170. package/src/assets/web-panel/assets/devWarning-CAmY8PZd.js +0 -1
  171. package/src/assets/web-panel/assets/index-Dfsrnshy.js +0 -1
  172. package/src/assets/web-panel/assets/index-tlLfPT5e.js +0 -1
@@ -5,6 +5,8 @@ import { types as utilTypes } from "node:util";
5
5
  import {
6
6
  EVOLUTION_EVAL_AUTHORITY_DESCRIPTOR_SCHEMA,
7
7
  isEvolutionEvalGate,
8
+ captureEvolutionEvalGateLaunchAdmissionBinding,
9
+ computeEvolutionEvalLaunchRequestDigest,
8
10
  isEvolutionEvalReceiptVerifier,
9
11
  computeEvolutionEvalContextDigest,
10
12
  runEvolutionEvalGate,
@@ -184,6 +186,10 @@ const AGGREGATOR_OPTION_KEYS = new Set([
184
186
  "maximumMatrixWallClockMs",
185
187
  "childReceiptStore",
186
188
  ]);
189
+ const ENROLLED_AGGREGATOR_OPTION_KEYS = new Set([
190
+ ...AGGREGATOR_OPTION_KEYS,
191
+ "launchAdmissionMode",
192
+ ]);
187
193
  const CELL_RUNTIME_KEYS = new Set([
188
194
  "gate",
189
195
  "receiptVerifier",
@@ -1680,7 +1686,10 @@ function captureComposition(options) {
1680
1686
  });
1681
1687
  }
1682
1688
 
1683
- function captureCellRuntimes(value) {
1689
+ function captureCellRuntimes(
1690
+ value,
1691
+ { requireEnrolledLaunchAdmission = false, tenantId } = {},
1692
+ ) {
1684
1693
  rejectProxy(value, "cellRuntimes");
1685
1694
  if (
1686
1695
  !(value instanceof Map) ||
@@ -1713,6 +1722,18 @@ function captureCellRuntimes(value) {
1713
1722
  `${label}.gate must be a branded EvolutionEvalGate`,
1714
1723
  );
1715
1724
  }
1725
+ const launchAdmissionBinding =
1726
+ captureEvolutionEvalGateLaunchAdmissionBinding(gate);
1727
+ if (
1728
+ requireEnrolledLaunchAdmission &&
1729
+ (launchAdmissionBinding?.mode !== "enrolled-cohort" ||
1730
+ launchAdmissionBinding.descriptor.tenantId !== tenantId)
1731
+ ) {
1732
+ throw matrixError(
1733
+ SKILL_TARGET_MATRIX_EVAL_INVALID_CODE,
1734
+ `${label}.gate requires an enrolled cohort launch authority`,
1735
+ );
1736
+ }
1716
1737
  if (!isEvolutionEvalReceiptVerifier(receiptVerifier)) {
1717
1738
  throw matrixError(
1718
1739
  SKILL_TARGET_MATRIX_EVAL_INVALID_CODE,
@@ -1731,6 +1752,7 @@ function captureCellRuntimes(value) {
1731
1752
  );
1732
1753
  const config = Object.freeze({
1733
1754
  gate,
1755
+ launchAdmissionBinding,
1734
1756
  receiptVerifier,
1735
1757
  suiteRef: normalizeId(rawConfig.suiteRef, `${label}.suiteRef`),
1736
1758
  suiteDigest: normalizeDigest(
@@ -2876,11 +2898,28 @@ export class SkillTargetMatrixEvalAggregator {
2876
2898
  #used = false;
2877
2899
 
2878
2900
  constructor(options) {
2901
+ rejectProxy(options, "matrix aggregator options");
2902
+ const requireEnrolledLaunchAdmission = Boolean(
2903
+ options &&
2904
+ typeof options === "object" &&
2905
+ Object.hasOwn(options, "launchAdmissionMode"),
2906
+ );
2879
2907
  assertExactRecord(
2880
2908
  options,
2881
- AGGREGATOR_OPTION_KEYS,
2909
+ requireEnrolledLaunchAdmission
2910
+ ? ENROLLED_AGGREGATOR_OPTION_KEYS
2911
+ : AGGREGATOR_OPTION_KEYS,
2882
2912
  "matrix aggregator options",
2883
2913
  );
2914
+ if (
2915
+ requireEnrolledLaunchAdmission &&
2916
+ options.launchAdmissionMode !== "enrolled-cohort"
2917
+ ) {
2918
+ throw matrixError(
2919
+ SKILL_TARGET_MATRIX_EVAL_INVALID_CODE,
2920
+ "matrix launch admission mode must be enrolled-cohort",
2921
+ );
2922
+ }
2884
2923
  const tenantId = normalizeId(
2885
2924
  options.tenantId,
2886
2925
  "matrix aggregator tenantId",
@@ -2903,7 +2942,32 @@ export class SkillTargetMatrixEvalAggregator {
2903
2942
  "matrix composition artifacts must belong to the captured tenant",
2904
2943
  );
2905
2944
  }
2906
- const cells = captureCellRuntimes(options.cellRuntimes);
2945
+ const cells = captureCellRuntimes(options.cellRuntimes, {
2946
+ requireEnrolledLaunchAdmission,
2947
+ tenantId,
2948
+ });
2949
+ if (requireEnrolledLaunchAdmission) {
2950
+ const enrollments = new Set();
2951
+ const slots = new Set();
2952
+ for (const runtime of cells.runtimes.values()) {
2953
+ const binding = runtime.launchAdmissionBinding;
2954
+ enrollments.add(binding.enrollmentDigest);
2955
+ const slot = `${binding.descriptor.cohortId}\0${binding.descriptor.slotId}`;
2956
+ if (slots.has(slot)) {
2957
+ throw matrixError(
2958
+ SKILL_TARGET_MATRIX_EVAL_INVALID_CODE,
2959
+ "matrix cells cannot reuse one enrolled admission slot",
2960
+ );
2961
+ }
2962
+ slots.add(slot);
2963
+ }
2964
+ if (enrollments.size !== 1) {
2965
+ throw matrixError(
2966
+ SKILL_TARGET_MATRIX_EVAL_INVALID_CODE,
2967
+ "matrix cells must share one enrolled cohort",
2968
+ );
2969
+ }
2970
+ }
2907
2971
  const matrixCellIds = targetMatrix.cells.map((cell) => cell.cellId);
2908
2972
  const runtimeCellIds = [...cells.runtimes.keys()].sort();
2909
2973
  if (!sameCanonical(matrixCellIds, runtimeCellIds)) {
@@ -2948,6 +3012,7 @@ export class SkillTargetMatrixEvalAggregator {
2948
3012
  runtimeManifest,
2949
3013
  targetMatrix,
2950
3014
  cellRuntimes: cells.runtimes,
3015
+ requireEnrolledLaunchAdmission,
2951
3016
  composition,
2952
3017
  matrixAuthorityRoot,
2953
3018
  maximumMatrixWallClockMs,
@@ -3033,6 +3098,22 @@ export class SkillTargetMatrixEvalAggregator {
3033
3098
  runtimeId: planCell.runtimeId,
3034
3099
  }),
3035
3100
  });
3101
+ if (state.requireEnrolledLaunchAdmission) {
3102
+ const binding = runtime.launchAdmissionBinding;
3103
+ if (
3104
+ binding.descriptor.planDigest !== plan.planDigest ||
3105
+ binding.expectedRequest.requestDigest !==
3106
+ computeEvolutionEvalLaunchRequestDigest(gateRequest) ||
3107
+ binding.expectedRequest.policyDigest !== planCell.policyDigest ||
3108
+ binding.expectedRequest.evaluationAuthorityRoot !==
3109
+ planCell.evaluationAuthorityRoot
3110
+ ) {
3111
+ throw matrixError(
3112
+ SKILL_TARGET_MATRIX_EVAL_INVALID_CODE,
3113
+ `matrix cell ${planCell.cellId} differs from its enrolled launch request`,
3114
+ );
3115
+ }
3116
+ }
3036
3117
  // The preregistered invocation identity is the signed plan cell plus the
3037
3118
  // durable reservation. Gate-generated runId/runNonce are only exact
3038
3119
  // child-verifier parameters read from this captured Promise result; they
@@ -166,7 +166,10 @@ export const SKILL_WRITER_INVENTORY = Object.freeze({
166
166
  symbol: "_executeRunCode",
167
167
  evidence: [
168
168
  "async function _executeRunCode(args, cwd)",
169
- "output = runCodeProcess(interpreter, [scriptPath]",
169
+ "output = runCodeProcess(",
170
+ 'bashStdin ? ["-s", "--"] : [scriptPath]',
171
+ "...(bashStdin ? { input: code } : {})",
172
+ "...pluginBinSandboxOptions",
170
173
  ],
171
174
  },
172
175
  }),
@@ -47,11 +47,13 @@ function isGitInspection(result, args) {
47
47
  .trim()
48
48
  .replace(/^git\s+/i, "");
49
49
  return (
50
- /^(?:merge-base|grep|rev-list|ls-files|ls-tree|ls-remote|cat-file|describe|name-rev)\b/i.test(
50
+ /^(?:status|diff|log|show|rev-parse|merge-base|grep|rev-list|ls-files|ls-tree|ls-remote|cat-file|describe|name-rev|fetch)\b/i.test(
51
51
  command,
52
52
  ) ||
53
53
  /^remote\s*(?:-v|--verbose)?\s*$/i.test(command) ||
54
- /^(?:branch|tag)\s+(?:--list|-l)(?:\s|$)/i.test(command)
54
+ /^(?:branch|tag)\s*(?:$|(?:--list|-l|--show-current|--contains|--no-merged|--merged|-a|-r|--all|--sort)(?:[=\s]|$))/i.test(
55
+ command,
56
+ )
55
57
  );
56
58
  }
57
59
 
@@ -61,7 +63,7 @@ function isGitInspection(result, args) {
61
63
  function isRemoteInspectionCommand(command) {
62
64
  if (typeof command !== "string") return false;
63
65
  if (
64
- /(?:^|[\s;&|])gh(?:\.exe)?\s+(?:run\s+(?:view|list|watch)|pr\s+(?:view|list|diff|checks)|auth\s+status)\b/i.test(
66
+ /(?:^|[\s;&|])gh(?:\.exe)?\s+(?:run\s+(?:view|list|watch)|pr\s+(?:view|list|diff|checks)|workflow\s+(?:view|list)|auth\s+status)\b/i.test(
65
67
  command,
66
68
  )
67
69
  )
@@ -76,6 +78,43 @@ function isRemoteInspectionCommand(command) {
76
78
  );
77
79
  }
78
80
 
81
+ // Advisory classification, never execution parsing or permission approval.
82
+ // A retry wrapper or JSON filter is still investigation, even when each call
83
+ // prints a different small result. Unknown computations remain available.
84
+ function isInspectionScript(code) {
85
+ if (typeof code !== "string") return false;
86
+ // Keep actual changes and focused verification eligible to advance the task.
87
+ if (
88
+ /\b(?:writeFile(?:Sync)?|appendFile(?:Sync)?|unlink(?:Sync)?|rename(?:Sync)?|mkdir(?:Sync)?|rmSync|rmdirSync|assert|pytest|vitest|unittest)\b/.test(
89
+ code,
90
+ ) ||
91
+ /\b(?:npm\s+(?:test|run|publish)|git\s+(?:commit|merge|cherry-pick|push)|gh\s+(?:pr\s+(?:create|merge|close)|run\s+rerun))\b/i.test(
92
+ code,
93
+ )
94
+ )
95
+ return false;
96
+ // Direct exec("gh ...") and helpers such as gh("run view ...") both occur
97
+ // in recovery loops. Do not execute/extract these strings as commands.
98
+ const literals = [...code.matchAll(/["'`]([^"'`\r\n]+)["'`]/g)].map(
99
+ (match) => match[1],
100
+ );
101
+ if (literals.some((value) => isRemoteInspectionCommand(value))) return true;
102
+ if (
103
+ /\bgh\s*\(/.test(code) &&
104
+ literals.some((value) => isRemoteInspectionCommand(`gh ${value}`))
105
+ )
106
+ return true;
107
+ // Parsing previously saved logs/metadata is evidence collection too.
108
+ return (
109
+ /\b(?:readFileSync|readFile|readdirSync|readdir|read_text|read_bytes|json\.load)\s*\(/.test(
110
+ code,
111
+ ) &&
112
+ !/\b(?:execSync|execFileSync|spawnSync|exec|spawn|subprocess|system)\s*[.(]/.test(
113
+ code,
114
+ )
115
+ );
116
+ }
117
+
79
118
  function remember(map, key, value, limit) {
80
119
  map.delete(key);
81
120
  map.set(key, value);
@@ -180,7 +219,9 @@ export class TaskProgressTracker {
180
219
  ? "git-inspection"
181
220
  : remoteTarget?.github || isRemoteInspectionCommand(command)
182
221
  ? "remote-inspection"
183
- : "local-execution"),
222
+ : tool === "run_code" && isInspectionScript(command)
223
+ ? "script-inspection"
224
+ : "local-execution"),
184
225
  invocation: boundedText(command || previous?.invocation, 1000),
185
226
  invocationTruncated: command
186
227
  ? command.length > 1000
@@ -293,6 +334,7 @@ export class TaskProgressTracker {
293
334
  exploration =
294
335
  !!remoteReadTarget(tool, args) ||
295
336
  remoteInspection ||
337
+ (tool === "run_code" && isInspectionScript(args.code)) ||
296
338
  output.length >= 8000 ||
297
339
  this.commandOutputs.has(digest);
298
340
  if (!failed) remember(this.commandOutputs, digest, true, 64);
@@ -356,6 +398,7 @@ export class TaskProgressTracker {
356
398
  "For research/review, synthesize evidence-backed findings; do not write files merely to clear this warning. " +
357
399
  "If evidence is insufficient, name the exact missing fact and use a focused search or bounded computation. " +
358
400
  "Do not restart general investigation, rewrite the plan, or delegate the same research. " +
401
+ "Re-reading the same commit, completed CI run or saved metadata through a different script is still investigation. Once a failure and candidate fix are established, run the focused validation or perform the next authorized action; do not repeatedly announce that the root cause is confirmed. For monitoring, poll a compact status at a reasonable interval and investigate again only when the state changes. " +
359
402
  "A child exhausting its budget is not task completion. Preserve useful partial findings and continue the original task. " +
360
403
  "During recovery, broad discovery stays paused until an actionable tool outcome; a focused search, another status query or a failed command does not end recovery. " +
361
404
  "Use search_files for an exact missing local fact, read_file with an explicit offset and limit of at most 80 lines for a known target section, or run a bounded computation/verification, then act on the result. " +
@@ -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;
@@ -1128,6 +1128,8 @@ Key behaviors:
1128
1128
  - 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.
1129
1129
  - 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
1130
1130
  - When asked about git status, diff, log, or other repository operations, use the git tool instead of run_shell
1131
+ - The git tool accepts ONE Git argument list, without pipes, redirects, &&, semicolons or echo. Use log -n 5 instead of piping to head; inspect the returned exitCode for predicates such as merge-base --is-ancestor (1 means false). Discover remote names with remote -v; do not assume origin exists.
1132
+ - On Windows, run_shell defaults to cmd unless configured otherwise. Set shell: "powershell" for PowerShell syntax or shell: "pwsh" for PowerShell 7. Parse saved JSON after stripping an initial UTF-8 BOM; a BOM parse error is not a JavaScript syntax defect.
1131
1133
  - When asked about files or code, use search_files to locate relevant sections, then read_file with offset/limit. Follow nextRead for large files. Reuse unchanged content already in context instead of repeatedly reading the same page; re-read when the file changes or the earlier content is no longer available.
1132
1134
  - For long text files, use search_files with path and pattern to find matching lines/columns and nearby text; read the returned nextRead location instead of paging from the top.
1133
1135
  - For online discovery without a known URL, use web_search with keywords. Return relevant source links and snippets; use web_fetch only when the source needs closer reading. For a known URL, fetch it directly. Download large pages once, then use snapshotId to search or read local chunks. Never invent URLs or claim a blocked search returned no results.
@@ -9396,13 +9398,22 @@ async function _executeRunCode(args, cwd) {
9396
9398
  const start = Date.now();
9397
9399
  let output;
9398
9400
  try {
9399
- output = runCodeProcess(interpreter, [scriptPath], {
9400
- cwd,
9401
- encoding: "utf8",
9402
- timeout: timeoutSec * 1000,
9403
- maxBuffer: 5 * 1024 * 1024,
9404
- ...pluginBinSandboxOptions,
9405
- });
9401
+ // Windows may resolve bash to Git Bash or WSL. Neither should receive a
9402
+ // native temp pathname as a shell token. Stdin preserves the script bytes
9403
+ // across both path dialects, without an extra shell or path conversion.
9404
+ const bashStdin = lang === "bash" && process.platform === "win32";
9405
+ output = runCodeProcess(
9406
+ interpreter,
9407
+ bashStdin ? ["-s", "--"] : [scriptPath],
9408
+ {
9409
+ cwd,
9410
+ ...(bashStdin ? { input: code } : {}),
9411
+ encoding: "utf8",
9412
+ timeout: timeoutSec * 1000,
9413
+ maxBuffer: 5 * 1024 * 1024,
9414
+ ...pluginBinSandboxOptions,
9415
+ },
9416
+ );
9406
9417
  } catch (err) {
9407
9418
  // Broker boundary errors carry the required/actual/missing guarantees and
9408
9419
  // backend attestation. Preserve that exact structured error for callers
@@ -1 +0,0 @@
1
- import{E as J,b as z,r as C,I as k,J as y,U as _,c as r,K as o,S,V as B,o as V,f as D,P as d,Q as f,R as p,F as j}from"./vendor-Bn1JzzAn.js";import{M as Q}from"./MarkdownRenderer-BJl3Hibe.js";import{u as F,_ as W,d as R}from"./index-BFMPJahZ.js";import{R as q}from"./icons-DG5UD-6K.js";import"./markdown-Yo_c6Krv.js";import"./markdown-CsiA8-E5.js";const K=J("artifacts",()=>{const h=C([]),t=C(!1),u=C(""),e=C(""),v=C(null),b=C(!1),A=z(()=>[...new Set(h.value.map(a=>a.kind).filter(Boolean))].sort());async function l(){const n=F();t.value=!0;try{const a={type:"artifact-list"};u.value&&(a.kind=u.value),e.value&&(a.session=e.value);const s=await n.sendRaw(a);s&&Array.isArray(s.artifacts)&&(h.value=[...s.artifacts].reverse())}catch{}finally{t.value=!1}}async function g(n){const a=F();b.value=!0,v.value={entry:n,previewable:!1};try{const s=await a.sendRaw({type:"artifact-content",artifactId:n.id});v.value={entry:n,previewable:s?.previewable===!0,encoding:s?.encoding||null,content:s?.content||"",truncated:s?.truncated===!0,reason:s?.reason||null}}catch(s){v.value={entry:n,previewable:!1,reason:s?.message||"preview failed"}}finally{b.value=!1}}function i(){v.value=null}const m=z(()=>{const n=v.value;return!n?.previewable||n.encoding!=="base64"?null:`data:${n.entry?.mime||"image/png"};base64,${n.content}`}),O=z(()=>{const n=v.value;return n?.previewable===!0&&n.encoding==="utf8"&&String(n.entry?.mime||"").toLowerCase()==="text/markdown"});async function M(n,a={}){if(!n?.id)return!1;const s=a.fetch||globalThis.fetch,L=a.document||globalThis.document,T=a.URL||globalThis.URL,N=(a.config||globalThis.window?.__CC_CONFIG__)??{};try{const U=await s(`/api/artifacts/${n.id}/download`,{headers:N.wsToken?{Authorization:`Bearer ${N.wsToken}`}:{}});if(!U.ok)return!1;const G=await U.blob(),E=T.createObjectURL(G),I=L.createElement("a");return I.href=E,I.download=n.title||n.id,L.body.appendChild(I),I.click(),I.remove(),T.revokeObjectURL(E),!0}catch{return!1}}async function P(n){const a=F();if(!n)return!1;try{const s=await a.sendRaw({type:"artifact-remove",artifactId:n});return v.value?.entry?.id===n&&(v.value=null),await l(),s?.found===!0}catch{return!1}}async function c(){const n=F();try{const a=await n.sendRaw({type:"artifact-clean"});return await l(),Number(a?.removed)||0}catch{return 0}}function w(n){const a=Number(n)||0;return a<1024?`${a} B`:a<1024*1024?`${(a/1024).toFixed(1)} KB`:`${(a/(1024*1024)).toFixed(1)} MB`}function x(n){switch(n){case"report":return"blue";case"patch":return"purple";case"screenshot":return"cyan";case"log":return"default";case"data":return"green";default:return"default"}}return{artifacts:h,loading:t,kindFilter:u,sessionFilter:e,kinds:A,preview:v,previewLoading:b,previewImageSrc:m,previewIsMarkdown:O,fetchArtifacts:l,openPreview:g,closePreview:i,removeArtifact:P,cleanExpired:c,downloadArtifact:M,formatSize:w,kindColor:x}}),H={__name:"Artifacts",setup(h,{expose:t}){t();const u=K(),e=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"类型",key:"kind",dataIndex:"kind",width:110},{title:"MIME",dataIndex:"mime",width:160,ellipsis:!0},{title:"大小",key:"size",dataIndex:"size",width:90},{title:"发布时间",key:"createdAt",dataIndex:"createdAt",width:170},{title:"会话",dataIndex:"sessionId",width:160,ellipsis:!0},{title:"操作",key:"actions",width:150}],v=z(()=>u.kinds.map(i=>({label:i,value:i})));async function b(i){await u.removeArtifact(i)?R.success("已删除"):R.error("删除失败")}async function A(){const i=await u.cleanExpired();R.info(i>0?`清理了 ${i} 个过期交付物`:"没有过期交付物")}async function l(i){await u.downloadArtifact(i)||R.error("下载失败")}V(()=>{u.fetchArtifacts()}),D(()=>{u.closePreview()});const g={store:u,columns:e,kindOptions:v,onRemove:b,onClean:A,onDownload:l,computed:z,onBeforeUnmount:D,onMounted:V,get ReloadOutlined(){return q},get message(){return R},MarkdownRenderer:Q,get useArtifactsStore(){return K}};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}},X={class:"page-header"},Y=["onClick"],Z=["src"],$={key:1,class:"preview-markdown"},ee={key:2,class:"preview-text"},te={class:"preview-meta"},ne={key:0};function ae(h,t,u,e,v,b){const A=k("a-select"),l=k("a-button"),g=k("a-popconfirm"),i=k("a-space"),m=k("a-tag"),O=k("a-table"),M=k("a-empty"),P=k("a-card");return d(),y("div",null,[_("div",X,[t[7]||(t[7]=_("div",null,[_("h2",{class:"page-title"},"交付物"),_("p",{class:"page-sub"}," agent 用 publish_artifact 发布的交付物(报告 / patch / 截图 / 日志),在这里预览与管理(cc artifacts 同源)。 ")],-1)),r(i,null,{default:o(()=>[r(A,{value:e.store.kindFilter,"onUpdate:value":t[0]||(t[0]=c=>e.store.kindFilter=c),style:{"min-width":"120px"},placeholder:"全部类型","allow-clear":"",options:e.kindOptions,onChange:t[1]||(t[1]=c=>e.store.fetchArtifacts())},null,8,["value","options"]),r(g,{title:"删除所有过期交付物?",onConfirm:e.onClean},{default:o(()=>[r(l,null,{default:o(()=>[...t[5]||(t[5]=[f("清理过期",-1)])]),_:1})]),_:1}),r(l,{ghost:"",loading:e.store.loading,onClick:t[2]||(t[2]=c=>e.store.fetchArtifacts())},{icon:o(()=>[r(e.ReloadOutlined)]),default:o(()=>[t[6]||(t[6]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),r(O,{"data-source":e.store.artifacts,columns:e.columns,"row-key":"id",size:"small",pagination:{pageSize:10,hideOnSinglePage:!0}},{bodyCell:o(({column:c,record:w})=>[c.key==="title"?(d(),y("a",{key:0,onClick:x=>e.store.openPreview(w)},p(w.title),9,Y)):c.key==="kind"?(d(),S(m,{key:1,color:e.store.kindColor(w.kind)},{default:o(()=>[f(p(w.kind),1)]),_:2},1032,["color"])):c.key==="size"?(d(),y(j,{key:2},[f(p(e.store.formatSize(w.size)),1)],64)):c.key==="createdAt"?(d(),y(j,{key:3},[f(p((w.createdAt||"").replace("T"," ").slice(0,19)),1)],64)):c.key==="actions"?(d(),S(i,{key:4},{default:o(()=>[r(l,{size:"small",onClick:x=>e.store.openPreview(w)},{default:o(()=>[...t[8]||(t[8]=[f("预览",-1)])]),_:1},8,["onClick"]),r(l,{size:"small",onClick:x=>e.onDownload(w)},{default:o(()=>[...t[9]||(t[9]=[f("下载",-1)])]),_:1},8,["onClick"]),r(g,{title:"删除该交付物?",onConfirm:x=>e.onRemove(w.id)},{default:o(()=>[r(l,{size:"small",danger:""},{default:o(()=>[...t[10]||(t[10]=[f("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):B("v-if",!0)]),_:1},8,["data-source"]),e.store.preview?(d(),S(P,{key:0,size:"small",class:"preview-card",loading:e.store.previewLoading},{title:o(()=>[r(i,null,{default:o(()=>[_("span",null,p(e.store.preview.entry?.title),1),r(m,{color:e.store.kindColor(e.store.preview.entry?.kind)},{default:o(()=>[f(p(e.store.preview.entry?.kind),1)]),_:1},8,["color"]),r(m,{color:"default"},{default:o(()=>[f(p(e.store.preview.entry?.mime),1)]),_:1}),e.store.preview.truncated?(d(),S(m,{key:0,color:"warning"},{default:o(()=>[...t[11]||(t[11]=[f("已截断预览",-1)])]),_:1})):B("v-if",!0)]),_:1})]),extra:o(()=>[r(i,null,{default:o(()=>[r(l,{size:"small",onClick:t[3]||(t[3]=c=>e.onDownload(e.store.preview.entry))},{default:o(()=>[...t[12]||(t[12]=[f("下载",-1)])]),_:1}),r(l,{size:"small",onClick:t[4]||(t[4]=c=>e.store.closePreview())},{default:o(()=>[...t[13]||(t[13]=[f("关闭",-1)])]),_:1})]),_:1})]),default:o(()=>[e.store.previewImageSrc?(d(),y("img",{key:0,src:e.store.previewImageSrc,class:"preview-image",alt:"artifact preview"},null,8,Z)):e.store.previewIsMarkdown?(d(),y("div",$,[r(e.MarkdownRenderer,{content:e.store.preview.content||""},null,8,["content"])])):e.store.preview.previewable?(d(),y("pre",ee,p(e.store.preview.content||"(空文件)"),1)):(d(),S(M,{key:3,description:e.store.preview.reason||"该类型不支持在线预览,可在本机用 cc artifacts open <id> 打开"},null,8,["description"])),_("div",te,[_("span",null,p(e.store.preview.entry?.id),1),e.store.preview.entry?.sessionId?(d(),y("span",ne," · session "+p(e.store.preview.entry.sessionId),1)):B("v-if",!0),_("span",null," · sha256 "+p((e.store.preview.entry?.sha256||"").slice(0,12))+"…",1)])]),_:1},8,["loading"])):B("v-if",!0)])}const de=W(H,[["render",ae],["__scopeId","data-v-c8b48f8c"],["__file","/tmp/cc-web-panel-rlCISL/repo/packages/web-panel/src/views/Artifacts.vue"]]);export{de 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-BFMPJahZ.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 l(t,o,e,r,n,m){return c(),p("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=d(_,[["render",l],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-rlCISL/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
@@ -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 q,_ as E}from"./index-BFMPJahZ.js";import{u as N}from"./useShellMode-CgR0wCYM.js";import{p as P}from"./parsers-YNLm7sQ0.js";import{u as z}from"./chat-zsGetwuT.js";import{aa as V,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=q();_.value=!0;try{if(N().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=P(l);t.value=d}catch(l){console.error("Failed to load skills:",l)}finally{_.value=!1}}return{loading:_,allSkills:t,searchQuery:n,selectedCategory:e,categories:k,filteredSkills:v,loadSkills:f}}),F={__name:"Skills",setup(_,{expose:t}){t();const n=A(),e=z(),k=O(),v=w(()=>n.categories.filter(r=>r!=="all").slice(0,6));function f(r){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[r]||r}function o(r){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[r]||r||"未知"}function l(r){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[r]||"default"}async function d(r){await e.createSession("agent"),k.push("/chat"),setTimeout(()=>{e.currentSessionId&&e.sendMessage(e.currentSessionId,`/skill run ${r}`)},300)}M(()=>{n.allSkills.length||n.loadSkills()});const c={skillsStore:n,chatStore:e,router:k,displayCategories:v,catLabel:f,modeLabel:o,modeColor:l,runSkill:d,computed:w,onMounted:M,get useRouter(){return O},get ReloadOutlined(){return B},get PlayCircleOutlined(){return j},get AppstoreOutlined(){return V},get useSkillsStore(){return A},get useChatStore(){return z}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}},Q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},U={class:"page-sub"},T={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},D={key:0,style:{"text-align":"center",padding:"60px"}},G={class:"skills-grid"},J={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},K={style:{flex:"1","min-width":"0"}},W={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},Z={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},H={style:{"margin-left":"12px","flex-shrink":"0"}},X={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},Y={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",T,[i(o,{value:e.skillsStore.searchQuery,"onUpdate:value":t[1]||(t[1]=s=>e.skillsStore.searchQuery=s),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),i(d,{value:e.skillsStore.selectedCategory,"onUpdate:value":t[2]||(t[2]=s=>e.skillsStore.selectedCategory=s),"button-style":"solid"},{default:u(()=>[i(l,{value:"all"},{default:u(()=>[...t[5]||(t[5]=[S("全部",-1)])]),_:1}),(p(!0),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",D,[i(c,{size:"large"}),t[6]||(t[6]=a("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):e.skillsStore.filteredSkills.length?(p(),y(C,{key:1},[h(" Skills Grid "),a("div",G,[(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",J,[a("div",K,[a("div",W,g(s.name),1),a("div",Z,g(s.description||"暂无描述"),1)]),a("div",H,[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",X,[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",Y,[i(e.AppstoreOutlined,{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),a("div",null,g(e.skillsStore.allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)])],2112))])}const ie=E(F,[["render",$],["__scopeId","data-v-d64d43f5"],["__file","/tmp/cc-web-panel-rlCISL/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 C,P as O,Q as p,S as z,V as E}from"./vendor-Bn1JzzAn.js";import{t as M,_ as Q,b as K,u as T,d as S}from"./index-BFMPJahZ.js";import{i as q,R as X}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}}),Y=["webspeech","whisper-api","whisper-local"];function B(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 D(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"&&Y.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=B(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=B(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=C(()=>[{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=C(()=>{const d=`speechSettings.engineHint.${o.defaultEngine}`,n=s(d);return n===d?"":n}),_=C(()=>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(D(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 I=0,P=0;for(const A of n){const H=d[A],V=String(H).replace(/"/g,'\\"'),W=`config set speech.${A} "${V}"`;try{const{output:U,exitCode:G}=await e.execute(W,1e4);G!==0||/error|failed|失败/i.test(U)?(P++,S.error(s("speechSettings.messages.saveItemFailed",{key:A,err:U.slice(0,80)}))):I++}catch(U){P++,S.error(s("speechSettings.messages.saveItemFailed",{key:A,err:U.message}))}}w.value=!1,P===0?(S.success(s("speechSettings.messages.saveOk",{count:I})),h.value=JSON.parse(JSON.stringify(o))):I>0&&(S.warning(s("speechSettings.messages.savePartial",{ok:I,fail:P})),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:C,onMounted:F,get useI18n(){return K},get ReloadOutlined(){return X},get SoundOutlined(){return q},get message(){return S},get useWsStore(){return T},get parseSpeechConfig(){return D},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})):E("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})):E("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})):E("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)):E("v-if",!0)])]),_:1},8,["spinning"])])}const ue=Q($,[["render",pe],["__scopeId","data-v-2b18ccaa"],["__file","/tmp/cc-web-panel-rlCISL/repo/packages/web-panel/src/views/SpeechSettings.vue"]]);export{ue as default};
@@ -1 +0,0 @@
1
- import{E as F,b as D,r as R,I as p,J as c,U as _,c as n,K as a,S as C,V as x,o as P,x as V,P as i,Q as k,R as r,F as T,Z as O}from"./vendor-Bn1JzzAn.js";import{u as I,_ as E}from"./index-BFMPJahZ.js";import{R as L}from"./icons-DG5UD-6K.js";const B=F("tasks",()=>{const y=R([]),l=R(!1);let u=null,t=null,d=null;const b=D(()=>y.value.filter(e=>e.status==="running")),v=D(()=>y.value.filter(e=>e.status==="pending")),w=D(()=>y.value.filter(e=>e.status==="completed"||e.status==="failed"||e.status==="timeout"));async function s(){const e=I();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=I();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=I();if(t)return;const g=z=>{z.type==="task:notification"&&z.payload?.task&&(f.value=z.payload.task,s(),d&&clearTimeout(d),d=setTimeout(()=>{f.value=null,d=null},8e3))};t=e.onRuntimeEvent(g)}function A(e){return!e||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${(e/6e4).toFixed(1)}m`}function o(e){switch(e){case"running":return"processing";case"pending":return"default";case"completed":return"success";case"failed":return"error";case"timeout":return"warning";default:return"default"}}return{tasks:y,loading:l,running:b,pending:v,completed:w,lastNotification:f,fetchTasks:s,stopTask:m,startPolling:h,stopPolling:N,formatDuration:A,getStatusColor:o}}),U={__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:""}P(()=>u.startPolling(5e3)),V(()=>u.stopPolling());const w={store:u,columns:t,getDuration:d,formatTime:b,truncate:v,onMounted:P,onUnmounted:V,get ReloadOutlined(){return L},get useTasksStore(){return B}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}},j={class:"page-header"},J={key:0,class:"error-text"},K={key:1},M={class:"task-header"},Q={class:"task-desc"},W={class:"task-id"},Z={class:"task-meta"},q=["title"],G={key:0,class:"error-text"},H={key:1,class:"success-text"},X={key:2,class:"muted-text"};function Y(y,l,u,t,d,b){const v=p("a-button"),w=p("a-space"),s=p("a-alert"),m=p("a-statistic"),f=p("a-card"),h=p("a-col"),N=p("a-row"),S=p("a-tag"),A=p("a-table");return i(),c("div",null,[_("div",j,[l[3]||(l[3]=_("div",null,[_("h2",{class:"page-title"},"后台任务"),_("p",{class:"page-sub"},"查看后台任务队列、实时通知和任务执行结果。")],-1)),n(w,null,{default:a(()=>[n(v,{ghost:"",loading:t.store.loading,onClick:l[0]||(l[0]=o=>t.store.fetchTasks())},{icon:a(()=>[n(t.ReloadOutlined)]),default:a(()=>[l[2]||(l[2]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),t.store.lastNotification?(i(),C(s,{key:0,type:t.store.lastNotification.status==="completed"?"success":"error","show-icon":"",closable:"",class:"banner",onClose:l[1]||(l[1]=o=>t.store.lastNotification=null)},{message:a(()=>[k(" 任务"+r(t.store.lastNotification.status==="completed"?"完成":"结束")+": "+r(t.store.lastNotification.description||t.store.lastNotification.id.slice(0,16)),1)]),description:a(()=>[t.store.lastNotification.error?(i(),c("span",J,r(t.store.lastNotification.error),1)):t.store.lastNotification.result?(i(),c("span",K,r(t.truncate(String(t.store.lastNotification.result),120)),1)):x("v-if",!0)]),_:1},8,["type"])):x("v-if",!0),n(N,{gutter:[16,16],class:"stats-row"},{default:a(()=>[n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"全部任务",value:t.store.tasks.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"运行中",value:t.store.running.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"等待中",value:t.store.pending.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"已完成",value:t.store.completed.length},null,8,["value"])]),_:1})]),_:1})]),_:1}),t.store.running.length>0?(i(),C(f,{key:1,title:"运行中的任务",class:"panel-card",size:"small"},{default:a(()=>[(i(!0),c(T,null,O(t.store.running,o=>(i(),c("div",{key:o.id,class:"task-item running"},[_("div",M,[n(S,{color:t.store.getStatusColor(o.status)},{default:a(()=>[k(r(o.status.toUpperCase()),1)]),_:2},1032,["color"]),_("span",Q,r(o.description),1),_("span",W,r(o.id.slice(0,16)),1)]),_("div",Z,[_("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,q)):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",G,r(t.truncate(e.error,60)),1)):e.result?(i(),c("span",H,r(t.truncate(String(e.result),60)),1)):(i(),c("span",X,"-"))],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(U,[["render",Y],["__scopeId","data-v-da5ff6a2"],["__file","/tmp/cc-web-panel-rlCISL/repo/packages/web-panel/src/views/Tasks.vue"]]);export{st as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-BFMPJahZ.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-C5TaXHn9.js";import{a0 as t}from"./index-BFMPJahZ.js";import"./vendor-Bn1JzzAn.js";import"./index-BRpfrG-e.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-DVYQoXil.js";import{a0 as t}from"./index-BFMPJahZ.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-hyHNGoSW.js";import"./useFlexGapSupport-C-vv_T11.js";import"./styleChecker-Bz1ZKvoD.js";import"./index-BRpfrG-e.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};