chainlesschain 0.166.115 → 0.166.118

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 (207) hide show
  1. package/README.md +43 -5
  2. package/package.json +4 -4
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/.build-hash +1 -1
  6. package/src/assets/web-panel/assets/{AIOps-BsoSoDNb.js → AIOps-BGySwMIP.js} +1 -1
  7. package/src/assets/web-panel/assets/{ActionButton-Dcx7Gm5t.js → ActionButton-Chn7fBLr.js} +1 -1
  8. package/src/assets/web-panel/assets/{Analytics-S1hsBIz3.js → Analytics-ORH7UkGa.js} +3 -3
  9. package/src/assets/web-panel/assets/{AppLayout-B2j067qM.js → AppLayout-8xV4jWjP.js} +5 -5
  10. package/src/assets/web-panel/assets/{Artifacts-D5iGV9ic.js → Artifacts-26SBK-x-.js} +1 -1
  11. package/src/assets/web-panel/assets/{Audit-C8ChVvXu.js → Audit-CtXpqbXg.js} +1 -1
  12. package/src/assets/web-panel/assets/{BackgroundAgents-Cg97AAJS.js → BackgroundAgents-C5zLvQis.js} +1 -1
  13. package/src/assets/web-panel/assets/{Backup-CyxU9IUg.js → Backup-C93xY4vO.js} +1 -1
  14. package/src/assets/web-panel/assets/{BaseInput-CKlWjA8I.js → BaseInput-DpVCHfAn.js} +1 -1
  15. package/src/assets/web-panel/assets/{Chat-C-EqZza6.js → Chat-DM0LblR2.js} +5 -5
  16. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BRFiXKPX.js → ChatBubbleRenderer-unlQUF1T.js} +1 -1
  17. package/src/assets/web-panel/assets/{Checkbox-kkI13tSJ.js → Checkbox-BsAt3cKR.js} +1 -1
  18. package/src/assets/web-panel/assets/{Codegen-NlqEDwHK.js → Codegen-E_kp4KFd.js} +1 -1
  19. package/src/assets/web-panel/assets/{Col-CfepEu79.js → Col-6msR3T6I.js} +1 -1
  20. package/src/assets/web-panel/assets/{Community-BRo0qLXM.js → Community-PyX9c5D-.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compact-BMu8TP0E.js → Compact-7G1bVDSH.js} +1 -1
  22. package/src/assets/web-panel/assets/{Compliance-B7Q3Moef.js → Compliance-DcHN7GlD.js} +1 -1
  23. package/src/assets/web-panel/assets/{Cowork-BVwt7Xmc.js → Cowork-WUIHJYDx.js} +3 -3
  24. package/src/assets/web-panel/assets/{Cron-CgBv20Qy.js → Cron-CWgCbptg.js} +2 -2
  25. package/src/assets/web-panel/assets/{Crosschain-CwcSBJk2.js → Crosschain-BzKZ6roD.js} +1 -1
  26. package/src/assets/web-panel/assets/{DID-d20rCiIm.js → DID-r7zxeItn.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dashboard-PpZaUYpS.js → Dashboard-D3pBiN2H.js} +2 -2
  28. package/src/assets/web-panel/assets/{Dropdown-DjsLdX_Z.js → Dropdown-C4otRJlZ.js} +1 -1
  29. package/src/assets/web-panel/assets/{EmailListRenderer-CaPkrtxn.js → EmailListRenderer-CzDTC8lm.js} +1 -1
  30. package/src/assets/web-panel/assets/{EvolutionSettings-DDY8cQnE.js → EvolutionSettings-DGkXiIs-.js} +1 -1
  31. package/src/assets/web-panel/assets/{FamilyGuardDashboard-VQavMjyj.js → FamilyGuardDashboard-BKdEyuiR.js} +1 -1
  32. package/src/assets/web-panel/assets/{Federation-D0GvKQgI.js → Federation-dsI-xcpf.js} +1 -1
  33. package/src/assets/web-panel/assets/{FormItemContext-Dl_TWHmb.js → FormItemContext-CEEb1fMR.js} +1 -1
  34. package/src/assets/web-panel/assets/{GenericCardRenderer-Bny2uagG.js → GenericCardRenderer-D_mfO3Ts.js} +1 -1
  35. package/src/assets/web-panel/assets/{Git-B01KXq47.js → Git-CBwr2ZI3.js} +2 -2
  36. package/src/assets/web-panel/assets/{Governance-F4c4Vwo1.js → Governance-D-Wy2Jjr.js} +1 -1
  37. package/src/assets/web-panel/assets/{Inference-_025Q-8K.js → Inference-B4Yk_IRx.js} +1 -1
  38. package/src/assets/web-panel/assets/{KnowledgeGraph-DwbTmQb1.js → KnowledgeGraph-DoI7bi6m.js} +1 -1
  39. package/src/assets/web-panel/assets/{Logs-CnNo0hCm.js → Logs-Ce1IiKAj.js} +2 -2
  40. package/src/assets/web-panel/assets/MarkdownRenderer-GND_8y0V.js +1 -0
  41. package/src/assets/web-panel/assets/{Marketplace-Dkz5bv7F.js → Marketplace-CsIEByzK.js} +1 -1
  42. package/src/assets/web-panel/assets/{McpTools-CBtRwDW_.js → McpTools-_DRzjcIn.js} +3 -3
  43. package/src/assets/web-panel/assets/{Memory-Y9jnyTb7.js → Memory-zvLpyi__.js} +2 -2
  44. package/src/assets/web-panel/assets/{MobileBridge-Br1urkOz.js → MobileBridge-DXd1ik2Z.js} +1 -1
  45. package/src/assets/web-panel/assets/{MobileProjects-DnsyuerX.js → MobileProjects-DKh2q-Y9.js} +1 -1
  46. package/src/assets/web-panel/assets/{Mtc-he3ZzieF.js → Mtc-Ct-fhtIx.js} +4 -4
  47. package/src/assets/web-panel/assets/{MtcAudit-BadphAuN.js → MtcAudit-J4zY3Oqk.js} +2 -2
  48. package/src/assets/web-panel/assets/{Multisig-3_pVLymK.js → Multisig-B2HJMCKe.js} +3 -3
  49. package/src/assets/web-panel/assets/{NLProgramming-DmtmHfsI.js → NLProgramming-CwcSmU4q.js} +1 -1
  50. package/src/assets/web-panel/assets/{Notes-CE4L2O55.js → Notes-Da53L6wb.js} +4 -4
  51. package/src/assets/web-panel/assets/{NotificationSettings-B7QmfJn9.js → NotificationSettings-BxhufdrA.js} +1 -1
  52. package/src/assets/web-panel/assets/{OrderTableRenderer-O0wRSyJ0.js → OrderTableRenderer-BoFwohAi.js} +1 -1
  53. package/src/assets/web-panel/assets/{Organization-BrlMSsyT.js → Organization-MIsMrUes.js} +4 -4
  54. package/src/assets/web-panel/assets/{Overflow-CY4ULPrZ.js → Overflow-Dy2P4v3q.js} +1 -1
  55. package/src/assets/web-panel/assets/{P2P-kIANZYKd.js → P2P-CD9Sxn2y.js} +2 -2
  56. package/src/assets/web-panel/assets/{PdhVaultBrowser-DEgB4rvF.js → PdhVaultBrowser-BvBWgfG0.js} +5 -5
  57. package/src/assets/web-panel/assets/{Permissions-CWxywRp5.js → Permissions-CwOlDRis.js} +4 -4
  58. package/src/assets/web-panel/assets/{PersonalDataHub-DAg7iCbr.js → PersonalDataHub-CZYaxEpv.js} +4 -4
  59. package/src/assets/web-panel/assets/{Pipeline-Brc6ONnR.js → Pipeline-kLU7PUbB.js} +1 -1
  60. package/src/assets/web-panel/assets/{Privacy-CcinYTL8.js → Privacy-BVRycSiI.js} +1 -1
  61. package/src/assets/web-panel/assets/{ProjectInit-Bz8XEsom.js → ProjectInit-DP3pr7uJ.js} +2 -2
  62. package/src/assets/web-panel/assets/{ProjectSettings-CsOMlSTZ.js → ProjectSettings-CACaDYjs.js} +2 -2
  63. package/src/assets/web-panel/assets/Projects-CB1k4zTC.js +1 -0
  64. package/src/assets/web-panel/assets/{Providers-CeunOQiH.js → Providers-D7Y9WHRE.js} +1 -1
  65. package/src/assets/web-panel/assets/{QrScannerModal-CN2a2_Fb.js → QrScannerModal-CeP8xzs1.js} +1 -1
  66. package/src/assets/web-panel/assets/{QuickAsk-CVeLif3e.js → QuickAsk-iJVFrhZ2.js} +1 -1
  67. package/src/assets/web-panel/assets/{Recommend-1k9WOEGM.js → Recommend-DmTpnagw.js} +1 -1
  68. package/src/assets/web-panel/assets/{RemoteSession-Q8UCqIMw.js → RemoteSession-C6ek8Uni.js} +2 -2
  69. package/src/assets/web-panel/assets/{Reputation-CkrCgXKM.js → Reputation-CPfwc9de.js} +1 -1
  70. package/src/assets/web-panel/assets/{Row-JFdvuTzi.js → Row-C1wwtSMJ.js} +1 -1
  71. package/src/assets/web-panel/assets/{RssFeed-C74JHCmk.js → RssFeed-BiDJsqaH.js} +3 -3
  72. package/src/assets/web-panel/assets/{Search-DrJiVO1T.js → Search-BF6Aon95.js} +1 -1
  73. package/src/assets/web-panel/assets/{Security-BJzNlSJq.js → Security-Bps0XnV4.js} +3 -3
  74. package/src/assets/web-panel/assets/{Services-D4TLMnJm.js → Services-uf92smGR.js} +2 -2
  75. package/src/assets/web-panel/assets/{Skeleton-cswTDqhh.js → Skeleton-DQd4eVWW.js} +1 -1
  76. package/src/assets/web-panel/assets/{Skills-Bv0rM1BS.js → Skills-DgamiYa5.js} +1 -1
  77. package/src/assets/web-panel/assets/{Sla-D9rE7hNh.js → Sla-CF1IVIrm.js} +1 -1
  78. package/src/assets/web-panel/assets/SpeechSettings-Bzxmjbpc.js +1 -0
  79. package/src/assets/web-panel/assets/{SyncSettings-BwnMG8kq.js → SyncSettings-B8zKauiq.js} +2 -2
  80. package/src/assets/web-panel/assets/{Tasks-wJvU24cB.js → Tasks-DPKV_xSt.js} +1 -1
  81. package/src/assets/web-panel/assets/{Templates-CZbRU3tN.js → Templates-BikeSZIF.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tenant-_jbpFJPZ.js → Tenant-CEaUaDkJ.js} +1 -1
  83. package/src/assets/web-panel/assets/{Terminal-BzNm5WKZ.js → Terminal-ZPgOSQ_q.js} +3 -3
  84. package/src/assets/web-panel/assets/{TimelineRenderer-bmybWjuS.js → TimelineRenderer-DmyB4Udk.js} +1 -1
  85. package/src/assets/web-panel/assets/{Tokens-o1WDcqVQ.js → Tokens-g85Pm5TO.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trigger-BB1D6sIB.js → Trigger-D202hx9a.js} +1 -1
  87. package/src/assets/web-panel/assets/{Trust-CLxdCfy2.js → Trust-DzvQYVFy.js} +1 -1
  88. package/src/assets/web-panel/assets/{UkeySign-B9LS6vS0.js → UkeySign-KRzwddVg.js} +1 -1
  89. package/src/assets/web-panel/assets/{VideoEditing-Bg0-wxjz.js → VideoEditing-IRBXLO2z.js} +1 -1
  90. package/src/assets/web-panel/assets/{Wallet-Bw0G2F6P.js → Wallet-DSf5KPgQ.js} +4 -4
  91. package/src/assets/web-panel/assets/{WebAuthn-irEiNY9b.js → WebAuthn-DNPxLTCc.js} +5 -5
  92. package/src/assets/web-panel/assets/{WorkflowEditor-Bh08FbJs.js → WorkflowEditor-C3wAtVcK.js} +1 -1
  93. package/src/assets/web-panel/assets/{addon-fit-CK6X9sAG.js → addon-fit-CbkjSUJl.js} +1 -1
  94. package/src/assets/web-panel/assets/{chat-De-FPjVT.js → chat-q3XXUtv2.js} +1 -1
  95. package/src/assets/web-panel/assets/{colors-ygdyvinU.js → colors-CF54SNei.js} +1 -1
  96. package/src/assets/web-panel/assets/{compact-item-BQ9jH9KV.js → compact-item-BaRkvZuT.js} +1 -1
  97. package/src/assets/web-panel/assets/{createContext-BFuVSyox.js → createContext-CDR9hsfs.js} +1 -1
  98. package/src/assets/web-panel/assets/devWarning-1LO-NplX.js +1 -0
  99. package/src/assets/web-panel/assets/{hasIn-i19GtR1P.js → hasIn-DlC--S8R.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DS1IwwGL.js → index-B0Ptc7yu.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-B1IsP_JO.js → index-B0V9rgdu.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CWfgeaG4.js → index-BEiUlFKb.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DTY20pWu.js → index-BJO0n1LQ.js} +1 -1
  104. package/src/assets/web-panel/assets/index-BLaJsev4.js +1 -0
  105. package/src/assets/web-panel/assets/index-BLmviChG.js +1 -0
  106. package/src/assets/web-panel/assets/{index-IXkif6J_.js → index-BU5DJqk7.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BVhtukYX.js → index-BY-Tf3OM.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BKlU5VZy.js → index-BZrE0Go8.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Bw5pTpnI.js → index-BizdX2X5.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BGMxK155.js → index-C87Yr3h1.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DVnFgasM.js → index-C9Wypz9e.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-C61w3omz.js → index-CAoG_E-q.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-l5-J0jHx.js → index-CAxSyMrF.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-28DjsABm.js → index-CC5HjNM6.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BPUCvc8i.js → index-CNZQEZ9g.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CpdXhhMY.js → index-CPvIhha6.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DAboGZTw.js → index-CR_wqMGy.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DL7ewjD2.js → index-CSClXoB3.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-Bhf-MuUh.js → index-CZ8azVgB.js} +3 -3
  120. package/src/assets/web-panel/assets/{index-BaaydJcC.js → index-Ccc5z8eJ.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-B2LieObB.js → index-CeiKbM3a.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-We2nK3ju.js → index-Cl6av3X7.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-m8waSAyv.js → index-CtGfeD7E.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-cDJsyAkI.js → index-Ctid12Gq.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DlwxUZQL.js → index-D0H-N0uG.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BBYiCI1d.js → index-D0vIgprF.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-_9tUBcLm.js → index-D4wUDFRg.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-4HoFz1MA.js → index-DJFipyK7.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-Cq9k4-Ws.js → index-DX2REKNp.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DuuOX5u3.js → index-Dc3gD0cw.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DgjLaB7k.js → index-DiQzer2R.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CMNjaSir.js → index-DntKLOs9.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-vXtH3o6O.js → index-Dplhl6gh.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-BLMtCKAY.js → index-Dq8q_PWB.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-CXrk8OYO.js → index-IVQdOBNN.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-CBVcGaxk.js → index-Kerduyao.js} +1 -1
  137. package/src/assets/web-panel/assets/{index-BKblSCL9.js → index-W6cLGjpW.js} +1 -1
  138. package/src/assets/web-panel/assets/{index-CgoSgmjK.js → index-qZDNFll9.js} +1 -1
  139. package/src/assets/web-panel/assets/{initDefaultProps-B_EZHeqN.js → initDefaultProps-Ccz7v71u.js} +1 -1
  140. package/src/assets/web-panel/assets/{markdown-Yo_c6Krv.js → markdown-Bq2x0XsR.js} +1 -1
  141. package/src/assets/web-panel/assets/markdown-DUKxbhE4.js +51 -0
  142. package/src/assets/web-panel/assets/{motion-BrVb_Gy1.js → motion-BlCLpVDp.js} +1 -1
  143. package/src/assets/web-panel/assets/{move-CKxVRL_J.js → move-B80G7fLU.js} +1 -1
  144. package/src/assets/web-panel/assets/{mtc-parser-C80rvQ1J.js → mtc-parser-Djw08NJh.js} +1 -1
  145. package/src/assets/web-panel/assets/{omit-De5vD7BR.js → omit-Bg_G1eUr.js} +1 -1
  146. package/src/assets/web-panel/assets/{pickAttrs-BTyEDjth.js → pickAttrs-Df9zYUg2.js} +1 -1
  147. package/src/assets/web-panel/assets/{placementArrow-BWR94AjR.js → placementArrow-DjCDLhJ4.js} +1 -1
  148. package/src/assets/web-panel/assets/{responsiveObserve-1g-Vnibk.js → responsiveObserve--Naz7NgY.js} +1 -1
  149. package/src/assets/web-panel/assets/{slide-Dmg6dYuF.js → slide-CHn3ald-.js} +1 -1
  150. package/src/assets/web-panel/assets/{statusUtils-Ddj6rSab.js → statusUtils-BiGwoIK_.js} +1 -1
  151. package/src/assets/web-panel/assets/{styleChecker-DyP1mPDf.js → styleChecker-Zf2dQx1j.js} +1 -1
  152. package/src/assets/web-panel/assets/{useFlexGapSupport-D3d_0YuY.js → useFlexGapSupport-sLES8nyD.js} +1 -1
  153. package/src/assets/web-panel/assets/{useFs-M3vq-gE2.js → useFs-DV1Hl4qu.js} +1 -1
  154. package/src/assets/web-panel/assets/{usePersonalDataHub-GtP2TgtK.js → usePersonalDataHub-CZXr2Qxg.js} +1 -1
  155. package/src/assets/web-panel/assets/{vnode-BurE2ATQ.js → vnode-e8Eo3Oyl.js} +1 -1
  156. package/src/assets/web-panel/assets/{xterm-BZcWGsqw.js → xterm-zbskxxGA.js} +1 -1
  157. package/src/assets/web-panel/assets/{zoom-Ch-ViiDe.js → zoom-B8A6xKMF.js} +1 -1
  158. package/src/assets/web-panel/index.html +1 -1
  159. package/src/commands/compact.js +7 -2
  160. package/src/data/changelog.json +27 -1
  161. package/src/harness/jsonl-session-store.js +80 -74
  162. package/src/harness/prompt-compressor.js +57 -3
  163. package/src/lib/artifact-store.js +129 -20
  164. package/src/lib/bounded-artifact-file-read.js +128 -46
  165. package/src/lib/context-memory-kernel/context-image-transport.js +248 -0
  166. package/src/lib/context-memory-kernel/jsonl-session-context-port.js +4 -1
  167. package/src/lib/context-memory-kernel/live-compaction.js +40 -10
  168. package/src/lib/context-memory-kernel/message-adapter.js +80 -10
  169. package/src/lib/context-memory-kernel/message-bundle-store.js +1140 -0
  170. package/src/lib/context-memory-kernel/provider-context.js +23 -8
  171. package/src/lib/evolution/agent-evolution-ingress.js +103 -19
  172. package/src/lib/evolution/agent-evolution-runtime-composition.js +65 -27
  173. package/src/lib/evolution/agent-model-projection.js +90 -18
  174. package/src/lib/evolution/evidence-json-text.js +341 -42
  175. package/src/lib/evolution/evolution-artifact-ports.js +1005 -83
  176. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +59 -15
  177. package/src/lib/evolution/evolution-evidence-projector.js +153 -16
  178. package/src/lib/evolution/evolution-evidence-storage-layout.js +115 -0
  179. package/src/lib/evolution/evolution-file-witness.js +7 -3
  180. package/src/lib/evolution/evolution-ledger-file-manifest-catalog.js +6 -2
  181. package/src/lib/evolution/evolution-ledger-file-manifest-head-store.js +6 -2
  182. package/src/lib/evolution/evolution-ledger.js +226 -55
  183. package/src/lib/evolution/evolution-private-storage.js +20 -0
  184. package/src/lib/evolution/evolution-run-ledger-adapter.js +298 -11
  185. package/src/lib/evolution/evolution-windows-directory-durability.js +215 -32
  186. package/src/lib/evolution/local-ui-evolution-runtime.js +3 -38
  187. package/src/lib/evolution/local-ui-signing-authority.js +69 -0
  188. package/src/lib/image-token-estimate.js +59 -0
  189. package/src/lib/ollama-provider-fetch.js +33 -0
  190. package/src/lib/provider-stream.js +14 -13
  191. package/src/lib/read-file-loop-guard.js +7 -4
  192. package/src/lib/session-history-origins.js +94 -35
  193. package/src/lib/session-message-provenance.js +26 -2
  194. package/src/lib/session-runtime-retention.js +10 -1
  195. package/src/lib/session-transcript-history.js +5 -1
  196. package/src/lib/session-transcript-migration.js +67 -12
  197. package/src/lib/storage-failure-cause-codes.js +449 -0
  198. package/src/lib/tool-result-preview.js +276 -0
  199. package/src/runtime/agent-core.js +111 -92
  200. package/src/runtime/headless-stream.js +121 -27
  201. package/src/assets/web-panel/assets/MarkdownRenderer-D8_iZief.js +0 -1
  202. package/src/assets/web-panel/assets/Projects-BeSOM6wi.js +0 -1
  203. package/src/assets/web-panel/assets/SpeechSettings-Bfhvin8B.js +0 -1
  204. package/src/assets/web-panel/assets/devWarning-c2I2Rn4_.js +0 -1
  205. package/src/assets/web-panel/assets/index-CTs4dYcV.js +0 -1
  206. package/src/assets/web-panel/assets/index-DeuvaW15.js +0 -1
  207. package/src/assets/web-panel/assets/markdown-CsiA8-E5.js +0 -50
@@ -18,6 +18,7 @@
18
18
 
19
19
  import { randomUUID } from "node:crypto";
20
20
  import { transportErrorDetails } from "../lib/transport-error-details.js";
21
+ import { storageFailureCauseSuffix } from "../lib/storage-failure-cause-codes.js";
21
22
  import { captureAgentExecutionPolicy } from "../lib/agent-execution-policy.js";
22
23
  import { resolveLlmConnection } from "../lib/llm-connection-resolution.js";
23
24
  import { TaskWorklog } from "../lib/context-memory-kernel/task-worklog-port.js";
@@ -155,7 +156,11 @@ import {
155
156
  isVerifiedSessionHostSnapshot,
156
157
  readSessionHostResumeState,
157
158
  } from "../lib/session-host-snapshot.js";
158
- import { acquireSessionHostLease } from "../lib/session-host-lease.js";
159
+ import {
160
+ acquireSessionHostLease,
161
+ SESSION_HOST_LEASE_FENCED_CODE,
162
+ SESSION_HOST_LEASE_UNAVAILABLE_CODE,
163
+ } from "../lib/session-host-lease.js";
159
164
  import {
160
165
  normalizeSessionBudgetRootConfig,
161
166
  openProductionSessionBudgetRoot,
@@ -1842,7 +1847,14 @@ async function runAgentHeadlessStreamInWorkspace(
1842
1847
  worklogError = message;
1843
1848
  }
1844
1849
  };
1850
+ let hostLeaseFailureReported = false;
1845
1851
  const emit = (event) => {
1852
+ if (
1853
+ event.type === "result" &&
1854
+ event.is_error === true &&
1855
+ sessionHostLease?.signal?.aborted
1856
+ )
1857
+ hostLeaseFailureReported = true;
1846
1858
  updateWorklog((log) => log.record(event));
1847
1859
  streamCoalescer.emit(event);
1848
1860
  };
@@ -3787,10 +3799,17 @@ async function runAgentHeadlessStreamInWorkspace(
3787
3799
  })),
3788
3800
  "readVerifiedProjection",
3789
3801
  );
3790
- return requireSynchronousRecoveryResult(
3802
+ const appended = requireSynchronousRecoveryResult(
3791
3803
  store.appendToolRoundsIfMessagesMatch(sessionId, messages, expected),
3792
3804
  "appendToolRoundsIfMessagesMatch",
3793
3805
  );
3806
+ if (typeof appended?.hash !== "string" || !appended.hash) {
3807
+ throw Object.assign(
3808
+ new Error("Tool round settlement did not return its durable head"),
3809
+ { code: "CC_SESSION_TOOL_ROUND_SETTLEMENT_HEAD_UNKNOWN" },
3810
+ );
3811
+ }
3812
+ return appended;
3794
3813
  };
3795
3814
  const settleToolRoundsForHost = (phase, clientMessageId = null) => {
3796
3815
  try {
@@ -3826,6 +3845,21 @@ async function runAgentHeadlessStreamInWorkspace(
3826
3845
  return false;
3827
3846
  }
3828
3847
  };
3848
+ const repairAndSettleToolRoundsForHost = (phase) => {
3849
+ const originalMessages = new Set(messages);
3850
+ const balanced = sanitizeToolPairs(messages);
3851
+ for (const message of balanced) {
3852
+ if (
3853
+ !originalMessages.has(message) &&
3854
+ message.role === "assistant" &&
3855
+ !message.tool_calls?.length
3856
+ )
3857
+ markRuntimeOnlySessionMessage(message);
3858
+ }
3859
+ messages.length = 0;
3860
+ messages.push(...balanced);
3861
+ return settleToolRoundsForHost(phase);
3862
+ };
3829
3863
  const loopOptionsBase = {
3830
3864
  ...(evolutionIngress === null ? {} : { evolutionIngress }),
3831
3865
  model,
@@ -3989,6 +4023,26 @@ async function runAgentHeadlessStreamInWorkspace(
3989
4023
  : null;
3990
4024
 
3991
4025
  let sawError = false;
4026
+ const reportHostLeaseFailure = () => {
4027
+ if (!sessionHostLease?.signal?.aborted) return false;
4028
+ sawError = true;
4029
+ if (!hostLeaseFailureReported) {
4030
+ emit({
4031
+ type: "result",
4032
+ subtype: "error",
4033
+ is_error: true,
4034
+ code:
4035
+ sessionHostLease.signal.reason?.code ===
4036
+ SESSION_HOST_LEASE_FENCED_CODE
4037
+ ? SESSION_HOST_LEASE_FENCED_CODE
4038
+ : SESSION_HOST_LEASE_UNAVAILABLE_CODE,
4039
+ error:
4040
+ "Session host authority was lost; refresh the session before continuing",
4041
+ session_id: sessionId,
4042
+ });
4043
+ }
4044
+ return true;
4045
+ };
3992
4046
  let evolutionIngressFailed = false;
3993
4047
  let terminalPersistenceFailure = null;
3994
4048
  const persistUsageEvent = persist
@@ -4304,7 +4358,12 @@ async function runAgentHeadlessStreamInWorkspace(
4304
4358
  break;
4305
4359
  }
4306
4360
  if (parsed == null) break; // stdin closed
4307
- sessionHostLease?.assert?.();
4361
+ try {
4362
+ sessionHostLease?.assert?.();
4363
+ } catch (error) {
4364
+ if (!reportHostLeaseFailure()) throw error;
4365
+ break;
4366
+ }
4308
4367
  if (turnBindingPersistenceError) {
4309
4368
  emitTurnBindingFailure();
4310
4369
  sawError = true;
@@ -5421,13 +5480,31 @@ async function runAgentHeadlessStreamInWorkspace(
5421
5480
  }
5422
5481
 
5423
5482
  if (evolutionIngress !== null) {
5424
- await evolutionIngress.ingestUserPrompt({
5425
- content: parsed.text,
5426
- imageCount: parsed.images?.length || 0,
5427
- sessionId,
5428
- source: "headless-stream",
5429
- turn: turns + 1,
5430
- });
5483
+ try {
5484
+ await evolutionIngress.ingestUserPrompt({
5485
+ content: parsed.text,
5486
+ imageCount: parsed.images?.length || 0,
5487
+ sessionId,
5488
+ source: "headless-stream",
5489
+ turn: turns + 1,
5490
+ });
5491
+ } catch (error) {
5492
+ if (error?.code !== AGENT_EVOLUTION_INGRESS_FAILED_CODE) throw error;
5493
+ evolutionIngressFailed = true;
5494
+ sawError = true;
5495
+ emit({
5496
+ type: "result",
5497
+ subtype: "error_evolution_ingress",
5498
+ is_error: true,
5499
+ code: AGENT_EVOLUTION_INGRESS_FAILED_CODE,
5500
+ error:
5501
+ "Agent evolution ingress failed before the user turn was admitted" +
5502
+ storageFailureCauseSuffix(error),
5503
+ session_id: sessionId,
5504
+ turn: turns + 1,
5505
+ });
5506
+ break;
5507
+ }
5431
5508
  }
5432
5509
  if (worklogHistory) {
5433
5510
  const historyPart =
@@ -5636,7 +5713,20 @@ async function runAgentHeadlessStreamInWorkspace(
5636
5713
  } catch (err) {
5637
5714
  const turnWasAborted = currentAbort?.signal.aborted === true;
5638
5715
  currentAbort = null;
5716
+ if (sessionHostLease?.signal?.aborted) {
5717
+ // Keep the established interrupted-tool repair. A fenced persistence
5718
+ // failure may already emit the terminal result; never emit it twice.
5719
+ if (repairAndSettleToolRoundsForHost("after-model"))
5720
+ reportHostLeaseFailure();
5721
+ break;
5722
+ }
5639
5723
  if (err?.code === AGENT_EVOLUTION_INGRESS_FAILED_CODE) {
5724
+ evolutionIngressFailed = true;
5725
+ // Ingress can reject the next model request after a tool round has
5726
+ // already completed. Keep those completed effects in the canonical
5727
+ // session before terminating this Run; incomplete calls are removed
5728
+ // with the same pairing repair used for an interrupted turn.
5729
+ if (!repairAndSettleToolRoundsForHost("after-model")) break;
5640
5730
  emit({
5641
5731
  type: "result",
5642
5732
  subtype: "error_evolution_ingress",
@@ -5646,7 +5736,6 @@ async function runAgentHeadlessStreamInWorkspace(
5646
5736
  turn: turns,
5647
5737
  });
5648
5738
  sawError = true;
5649
- evolutionIngressFailed = true;
5650
5739
  break;
5651
5740
  }
5652
5741
  if (persist) {
@@ -5677,6 +5766,7 @@ async function runAgentHeadlessStreamInWorkspace(
5677
5766
  break;
5678
5767
  }
5679
5768
  if (err?.runtimeLedgerPersistence === true) {
5769
+ if (!repairAndSettleToolRoundsForHost("after-model")) break;
5680
5770
  emit({
5681
5771
  type: "result",
5682
5772
  subtype: "error_persistence",
@@ -5693,6 +5783,7 @@ async function runAgentHeadlessStreamInWorkspace(
5693
5783
  err?.code === "CC_SESSION_BUDGET_USAGE_UNKNOWN" ||
5694
5784
  options.sessionBudget?.signal?.aborted === true
5695
5785
  ) {
5786
+ if (!repairAndSettleToolRoundsForHost("after-model")) break;
5696
5787
  const budgetReason =
5697
5788
  options.sessionBudget?.reason?.() ||
5698
5789
  err.budgetReason ||
@@ -5729,21 +5820,7 @@ async function runAgentHeadlessStreamInWorkspace(
5729
5820
  // the array length unchanged. sanitizeToolPairs is idempotent on an
5730
5821
  // already-balanced array and leaves user/text turns untouched, so the
5731
5822
  // intentional dangling-user state above is preserved.
5732
- const originalMessages = new Set(messages);
5733
- const balanced = sanitizeToolPairs(messages);
5734
- // Only the sanitizer's newly-created commentary for discarded calls
5735
- // is ephemeral. Existing real messages retain their authority.
5736
- for (const message of balanced) {
5737
- if (
5738
- !originalMessages.has(message) &&
5739
- message.role === "assistant" &&
5740
- !message.tool_calls?.length
5741
- )
5742
- markRuntimeOnlySessionMessage(message);
5743
- }
5744
- messages.length = 0;
5745
- messages.push(...balanced);
5746
- if (!settleToolRoundsForHost("after-model")) break;
5823
+ if (!repairAndSettleToolRoundsForHost("after-model")) break;
5747
5824
  emit({
5748
5825
  type: "result",
5749
5826
  subtype: "interrupted",
@@ -5754,7 +5831,12 @@ async function runAgentHeadlessStreamInWorkspace(
5754
5831
  });
5755
5832
  continue;
5756
5833
  }
5757
- if (isAbort) break; // outer options.signal — caller is shutting down
5834
+ if (isAbort) {
5835
+ // Caller shutdown terminates the stream, but completed tool effects
5836
+ // from the in-flight turn still belong in the durable transcript.
5837
+ if (!repairAndSettleToolRoundsForHost("after-model")) break;
5838
+ break;
5839
+ }
5758
5840
  if (!settleToolRoundsForHost("after-model")) break;
5759
5841
  const transportDetails = transportErrorDetails(err);
5760
5842
  emit({
@@ -5771,11 +5853,19 @@ async function runAgentHeadlessStreamInWorkspace(
5771
5853
  persistTurnBindingLog();
5772
5854
  }
5773
5855
  if (turnBindingPersistenceError) {
5856
+ if (!repairAndSettleToolRoundsForHost("after-model")) break;
5774
5857
  emitTurnBindingFailure();
5775
5858
  sawError = true;
5776
5859
  break;
5777
5860
  }
5778
5861
  currentAbort = null;
5862
+ if (sessionHostLease?.signal?.aborted) {
5863
+ // A provider may finish successfully after observing cancellation late.
5864
+ // Lost host authority still forbids reporting that turn as successful.
5865
+ if (repairAndSettleToolRoundsForHost("after-model"))
5866
+ reportHostLeaseFailure();
5867
+ break;
5868
+ }
5779
5869
 
5780
5870
  if (outcome.endReason === "user-input-pending") {
5781
5871
  if (!settleToolRoundsForHost("after-model")) break;
@@ -5792,6 +5882,7 @@ async function runAgentHeadlessStreamInWorkspace(
5792
5882
  }
5793
5883
 
5794
5884
  if (outcome.endReason === "compaction-usage-unknown") {
5885
+ if (!repairAndSettleToolRoundsForHost("after-model")) break;
5795
5886
  sawError = true;
5796
5887
  emit({
5797
5888
  type: "result",
@@ -5952,6 +6043,7 @@ async function runAgentHeadlessStreamInWorkspace(
5952
6043
  }
5953
6044
  }
5954
6045
 
6046
+ reportHostLeaseFailure();
5955
6047
  streamCleanup.setReason(
5956
6048
  pipeState.closed
5957
6049
  ? "pipe_closed"
@@ -5968,6 +6060,8 @@ async function runAgentHeadlessStreamInWorkspace(
5968
6060
  await evolutionIngress.complete();
5969
6061
  }
5970
6062
 
6063
+ reportHostLeaseFailure();
6064
+
5971
6065
  if (!pipeState.closed) {
5972
6066
  emit({ type: "system", subtype: "end", session_id: sessionId, turns });
5973
6067
  }
@@ -1 +0,0 @@
1
- import{P as c,J as p,b as a}from"./vendor-Bn1JzzAn.js";import{r as s}from"./markdown-Yo_c6Krv.js";import{_ as d}from"./index-Bhf-MuUh.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=a(()=>s(e.content||"")),n={props:e,rendered:r,computed:a,get renderMarkdown(){return s}};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-jIIa0G/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
@@ -1 +0,0 @@
1
- import{I as i,J as A,U,R as s,Q as r,c as t,K as a,V as _,S as x,o as oe,b as ee,r as u,P as p,F as ne,a2 as ge}from"./vendor-Bn1JzzAn.js";import{_ as we,b as re,u as ie,d}from"./index-Bhf-MuUh.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{aN as ke,aO as Fe,aP as be,f as je,a5 as Ce,a8 as xe,at as Oe,R as Se}from"./icons-DG5UD-6K.js";const Pe={__name:"Projects",setup(se,{expose:l}){l();const{t:te}=re(),e=ie(),{isEmbedded:W}=de();async function w(o,f,ye,ae=8e3){if(W){const Z=await e.sendRaw({...f,type:o},ae);if(!Z?.ok){const $=Z?.error;throw new Error(typeof $=="string"?$:$?.message||`${o} failed`)}return Z.result}return e.executeJson(ye,ae)}const B=u(!1),y=u([]),O=u(""),S=u(""),P=u(!1),v=u(null),h=u([]),k=u(!1),E=u(!1),L=u(!1),F=u({name:"",description:"",type:"document",rootPath:""}),z=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],V=ee(()=>{const o={active:0,draft:0,completed:0,archived:0};for(const f of y.value)o[f.status]!==void 0&&(o[f.status]+=1);return o}),J=ee(()=>y.value.filter(o=>!(O.value&&o.status!==O.value||S.value&&!o.name.toLowerCase().includes(S.value.toLowerCase()))));function g(o){switch(o){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function G(o){switch(o){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function K(o){return!o&&o!==0?"-":new Date(typeof o=="number"?o:parseInt(o,10)).toLocaleString("zh-CN",{hour12:!1})}async function C(){B.value=!0;try{const o=await w("project.list",{limit:500},"project list --limit 500 --json",1e4);y.value=Array.isArray(o?.projects)?o.projects:Array.isArray(o)?o:[]}catch(o){d.error("加载失败: "+(o.message||o)),y.value=[]}finally{B.value=!1}}function Q(o){return{onClick:()=>M(o)}}async function M(o){v.value=o,P.value=!0,k.value=!0,h.value=[];try{const f=await w("project.listFiles",{projectId:o.id,limit:200},`project list-files ${o.id} --json`,8e3);h.value=Array.isArray(f?.files)?f.files:[]}catch{h.value=[]}finally{k.value=!1}}async function H(o){try{(await w("project.delete",{id:o.id},`project delete ${o.id} --json`,8e3))?.ok?(d.success(`已删除项目 '${o.name}'`),P.value=!1,await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}function X(){F.value={name:"",description:"",type:"document",rootPath:""},E.value=!0}async function T(){if(!F.value.name.trim()){d.warning("请输入项目名称");return}L.value=!0;try{const o=await w("project.init",{name:F.value.name.trim(),description:F.value.description||null,projectType:F.value.type,rootPath:F.value.rootPath||null},`project init "${F.value.name.trim()}" --type ${F.value.type} --json`,8e3);o?.id?(d.success(`已创建项目 '${o.name}'`),E.value=!1,await C()):d.error("创建失败")}catch(o){d.error(o.message||String(o))}finally{L.value=!1}}const b=u(!1),D=u(!1),j=u({path:"",content:""}),I=u(!1),m=u(!1),R=u({path:""}),n=u(!1),c=u(null),q=u(""),Y=u(!1);function ue(){j.value={path:"",content:""},b.value=!0}function ce(){R.value={path:""},I.value=!0}async function N(){if(v.value){k.value=!0;try{const o=await w("project.listFiles",{projectId:v.value.id,limit:200},`project list-files ${v.value.id} --json`,8e3);h.value=Array.isArray(o?.files)?o.files:[]}catch(o){d.error("刷新文件失败: "+(o.message||o))}finally{k.value=!1}}}async function fe(){if(!j.value.path.trim()){d.warning("请输入文件路径");return}if(v.value){D.value=!0;try{const o=await w("project.createFile",{projectId:v.value.id,filePath:j.value.path.trim(),content:j.value.content||""},`project create-file ${v.value.id} "${j.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件 '${o.file_name}'`),b.value=!1,await N(),await C()):d.error("创建文件失败")}catch(o){d.error(o.message||String(o))}finally{D.value=!1}}}async function pe(){if(!R.value.path.trim()){d.warning("请输入文件夹路径");return}if(v.value){m.value=!0;try{const o=await w("project.createFolder",{projectId:v.value.id,folderPath:R.value.path.trim()},`project create-folder ${v.value.id} "${R.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件夹 '${o.file_name}'`),I.value=!1,await N(),await C()):d.error("创建文件夹失败")}catch(o){d.error(o.message||String(o))}finally{m.value=!1}}}async function ve(o){try{(await w("project.deleteFile",{fileId:o.id},`project delete-file ${o.id} --json`,8e3))?.deleted?(d.success(`已删除 '${o.file_name}'`),await N(),await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}async function me(o){if(o.is_folder){d.info("文件夹无内容可编辑");return}try{const f=await w("project.getFile",{fileId:o.id},`project get-file ${o.id} --json`,8e3);c.value=o,q.value=f?.content||"",n.value=!0}catch(f){d.error("读取文件失败: "+(f.message||f))}}async function _e(){if(c.value){Y.value=!0;try{(await w("project.writeFile",{fileId:c.value.id,content:q.value},`project write-file ${c.value.id} --json`,8e3))?.id?(d.success("已保存"),n.value=!1,await N()):d.error("保存失败")}catch(o){d.error(o.message||String(o))}finally{Y.value=!1}}}oe(()=>{C()});const le={t:te,ws:e,isEmbedded:W,callProjectTopic:w,loading:B,projects:y,statusFilter:O,nameFilter:S,detailOpen:P,detail:v,files:h,filesLoading:k,createOpen:E,creating:L,newProject:F,columns:z,countByStatus:V,filteredProjects:J,statusColor:g,syncColor:G,formatTime:K,loadAll:C,onRowClick:Q,openDetail:M,onDelete:H,onShowCreate:X,onCreate:T,createFileOpen:b,creatingFile:D,newFile:j,createFolderOpen:I,creatingFolder:m,newFolder:R,editFileOpen:n,editingFile:c,editFileContent:q,savingFile:Y,openCreateFile:ue,openCreateFolder:ce,refreshFiles:N,onCreateFile:fe,onCreateFolder:pe,onDeleteFile:ve,openEditFile:me,onSaveFile:_e,ref:u,computed:ee,onMounted:oe,get ReloadOutlined(){return Se},get PlusOutlined(){return Oe},get FolderOutlined(){return xe},get FileTextOutlined(){return Ce},get CheckCircleOutlined(){return je},get CheckSquareOutlined(){return be},get FileAddOutlined(){return Fe},get FolderAddOutlined(){return ke},get message(){return d},get useI18n(){return re},get useWsStore(){return ie},get useShellMode(){return de}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},ze={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={class:"page-title"},Ae={class:"page-sub"},Ue={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},he={key:0,style:{"font-size":"12px",color:"#888"}},De={key:0,style:{color:"#888","font-size":"12px"}},Re={key:0},Te={key:1,style:{color:"#888"}},Be=["onClick"],Ee={key:0,style:{color:"#888","font-size":"12px"}};function Le(se,l,te,e,W,w){const B=i("router-link"),y=i("a-button"),O=i("a-space"),S=i("a-statistic"),P=i("a-card"),v=i("a-col"),h=i("a-row"),k=i("a-radio-button"),E=i("a-radio-group"),L=i("a-input-search"),F=i("a-alert"),z=i("a-tag"),V=i("a-popconfirm"),J=i("a-table"),g=i("a-descriptions-item"),G=i("a-descriptions"),K=i("a-divider"),C=i("a-empty"),Q=i("a-list-item"),M=i("a-list"),H=i("a-spin"),X=i("a-drawer"),T=i("a-input"),b=i("a-form-item"),D=i("a-textarea"),j=i("a-form"),I=i("a-modal"),m=i("a-select-option"),R=i("a-select");return p(),A("div",null,[U("div",ze,[U("div",null,[U("h2",Ie,s(e.t("projects.title")),1),U("p",Ae,[l[17]||(l[17]=r("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(B,{to:"/project-init"},{default:a(()=>[...l[16]||(l[16]=[r("项目初始化 / 环境设置",-1)])]),_:1}),l[18]||(l[18]=r(")",-1))])]),t(O,null,{default:a(()=>[t(y,{loading:e.loading,onClick:e.loadAll},{icon:a(()=>[t(e.ReloadOutlined)]),default:a(()=>[l[19]||(l[19]=r(" 刷新 ",-1))]),_:1},8,["loading"]),t(y,{type:"primary",onClick:e.onShowCreate},{icon:a(()=>[t(e.PlusOutlined)]),default:a(()=>[l[20]||(l[20]=r(" 新建项目 ",-1))]),_:1})]),_:1})]),_(" Stats "),t(h,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"总项目",value:e.projects.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(e.FolderOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"活跃",value:e.countByStatus.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"草稿",value:e.countByStatus.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(e.FileTextOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"已完成",value:e.countByStatus.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckSquareOutlined)]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),_(" Filter "),U("div",Ue,[t(E,{value:e.statusFilter,"onUpdate:value":l[0]||(l[0]=n=>e.statusFilter=n),size:"small","button-style":"solid"},{default:a(()=>[t(k,{value:""},{default:a(()=>[...l[21]||(l[21]=[r("全部",-1)])]),_:1}),t(k,{value:"active"},{default:a(()=>[...l[22]||(l[22]=[r("活跃",-1)])]),_:1}),t(k,{value:"draft"},{default:a(()=>[...l[23]||(l[23]=[r("草稿",-1)])]),_:1}),t(k,{value:"completed"},{default:a(()=>[...l[24]||(l[24]=[r("已完成",-1)])]),_:1}),t(k,{value:"archived"},{default:a(()=>[...l[25]||(l[25]=[r("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(L,{value:e.nameFilter,"onUpdate:value":l[1]||(l[1]=n=>e.nameFilter=n),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!e.projects.length&&!e.loading?(p(),x(F,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):_("v-if",!0),e.projects.length||e.loading?(p(),x(J,{key:1,columns:e.columns,"data-source":e.filteredProjects,loading:e.loading,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":e.onRowClick},{bodyCell:a(({column:n,record:c})=>[n.key==="id"?(p(),A("code",he,s(c.id.slice(0,8))+"…",1)):n.key==="name"?(p(),A(ne,{key:1},[U("strong",null,s(c.name),1),c.description?(p(),A("div",De,s(c.description),1)):_("v-if",!0)],64)):n.key==="project_type"?(p(),x(z,{key:2},{default:a(()=>[r(s(c.project_type),1)]),_:2},1024)):n.key==="status"?(p(),x(z,{key:3,color:e.statusColor(c.status)},{default:a(()=>[r(s(c.status),1)]),_:2},1032,["color"])):n.key==="sync_status"?(p(),x(z,{key:4,color:e.syncColor(c.sync_status)},{default:a(()=>[r(s(c.sync_status||"unknown"),1)]),_:2},1032,["color"])):n.key==="updated_at"?(p(),A(ne,{key:5},[r(s(e.formatTime(c.updated_at)),1)],64)):n.key==="actions"?(p(),x(O,{key:6,onClick:l[2]||(l[2]=ge(()=>{},["stop"]))},{default:a(()=>[t(y,{size:"small",onClick:q=>e.openDetail(c)},{default:a(()=>[...l[26]||(l[26]=[r("详情",-1)])]),_:1},8,["onClick"]),t(V,{title:`删除项目 '${c.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:q=>e.onDelete(c)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[27]||(l[27]=[r("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):_("v-if",!0)]),_:1},8,["data-source","loading"])):_("v-if",!0),_(" Detail drawer "),t(X,{open:e.detailOpen,"onUpdate:open":l[3]||(l[3]=n=>e.detailOpen=n),title:e.detail?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[e.detail?(p(),x(G,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(g,{label:"ID"},{default:a(()=>[U("code",null,s(e.detail.id),1)]),_:1}),t(g,{label:"名称"},{default:a(()=>[r(s(e.detail.name),1)]),_:1}),t(g,{label:"描述"},{default:a(()=>[r(s(e.detail.description||"-"),1)]),_:1}),t(g,{label:"类型"},{default:a(()=>[t(z,null,{default:a(()=>[r(s(e.detail.project_type),1)]),_:1})]),_:1}),t(g,{label:"状态"},{default:a(()=>[t(z,{color:e.statusColor(e.detail.status)},{default:a(()=>[r(s(e.detail.status),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"同步状态"},{default:a(()=>[t(z,{color:e.syncColor(e.detail.sync_status)},{default:a(()=>[r(s(e.detail.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"用户"},{default:a(()=>[r(s(e.detail.user_id),1)]),_:1}),t(g,{label:"根路径"},{default:a(()=>[e.detail.root_path?(p(),A("code",Re,s(e.detail.root_path),1)):(p(),A("span",Te,"(无)"))]),_:1}),t(g,{label:"文件数"},{default:a(()=>[r(s(e.detail.file_count||0),1)]),_:1}),t(g,{label:"创建"},{default:a(()=>[r(s(e.formatTime(e.detail.created_at)),1)]),_:1}),t(g,{label:"更新"},{default:a(()=>[r(s(e.formatTime(e.detail.updated_at)),1)]),_:1})]),_:1})):_("v-if",!0),t(K,null,{default:a(()=>[...l[28]||(l[28]=[r("文件",-1)])]),_:1}),_(" Sub-phase 7.3 (2026-05-17): 文件 CRUD toolbar "),t(O,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(y,{size:"small",type:"primary",disabled:!e.detail,onClick:e.openCreateFile},{default:a(()=>[t(e.FileAddOutlined),l[29]||(l[29]=r(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(y,{size:"small",disabled:!e.detail,onClick:e.openCreateFolder},{default:a(()=>[t(e.FolderAddOutlined),l[30]||(l[30]=r(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(H,{spinning:e.filesLoading},{default:a(()=>[!e.files.length&&!e.filesLoading?(p(),x(C,{key:0,description:"无文件 (点上方按钮新建)"})):(p(),x(M,{key:1,size:"small","data-source":e.files},{renderItem:a(({item:n})=>[t(Q,null,{extra:a(()=>[t(O,null,{default:a(()=>[n.file_size?(p(),A("span",Ee,s(n.file_size)+" B",1)):_("v-if",!0),t(V,{title:`删除 ${n.is_folder?"文件夹":"文件"} '${n.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:c=>e.onDeleteFile(n)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[31]||(l[31]=[r("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[U("span",{style:{cursor:"pointer"},onClick:c=>e.openEditFile(n)},s(n.is_folder?"📁":"📄")+" "+s(n.file_path),9,Be)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),_(" Sub-phase 7.3: Create file modal "),t(I,{open:e.createFileOpen,"onUpdate:open":l[6]||(l[6]=n=>e.createFileOpen=n),title:"新建文件","confirm-loading":e.creatingFile,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFile},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFile.path,"onUpdate:value":l[4]||(l[4]=n=>e.newFile.path=n),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(b,{label:"初始内容(可选)"},{default:a(()=>[t(D,{value:e.newFile.content,"onUpdate:value":l[5]||(l[5]=n=>e.newFile.content=n),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Create folder modal "),t(I,{open:e.createFolderOpen,"onUpdate:open":l[8]||(l[8]=n=>e.createFolderOpen=n),title:"新建文件夹","confirm-loading":e.creatingFolder,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFolder},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFolder.path,"onUpdate:value":l[7]||(l[7]=n=>e.newFolder.path=n),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Edit file content modal "),t(I,{open:e.editFileOpen,"onUpdate:open":l[10]||(l[10]=n=>e.editFileOpen=n),title:`编辑 ${e.editingFile?.file_name||""}`,"confirm-loading":e.savingFile,"ok-text":"保存","cancel-text":"取消",onOk:e.onSaveFile,width:"720"},{default:a(()=>[t(D,{value:e.editFileContent,"onUpdate:value":l[9]||(l[9]=n=>e.editFileContent=n),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),_(" Create modal "),t(I,{open:e.createOpen,"onUpdate:open":l[15]||(l[15]=n=>e.createOpen=n),title:"新建项目","confirm-loading":e.creating,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreate},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"项目名称",required:""},{default:a(()=>[t(T,{value:e.newProject.name,"onUpdate:value":l[11]||(l[11]=n=>e.newProject.name=n),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(b,{label:"描述"},{default:a(()=>[t(D,{value:e.newProject.description,"onUpdate:value":l[12]||(l[12]=n=>e.newProject.description=n),rows:2},null,8,["value"])]),_:1}),t(b,{label:"类型"},{default:a(()=>[t(R,{value:e.newProject.type,"onUpdate:value":l[13]||(l[13]=n=>e.newProject.type=n)},{default:a(()=>[t(m,{value:"document"},{default:a(()=>[...l[32]||(l[32]=[r("文档 (document)",-1)])]),_:1}),t(m,{value:"data"},{default:a(()=>[...l[33]||(l[33]=[r("数据 (data)",-1)])]),_:1}),t(m,{value:"web"},{default:a(()=>[...l[34]||(l[34]=[r("Web",-1)])]),_:1}),t(m,{value:"app"},{default:a(()=>[...l[35]||(l[35]=[r("应用 (app)",-1)])]),_:1}),t(m,{value:"presentation"},{default:a(()=>[...l[36]||(l[36]=[r("演示文稿",-1)])]),_:1}),t(m,{value:"spreadsheet"},{default:a(()=>[...l[37]||(l[37]=[r("表格",-1)])]),_:1}),t(m,{value:"design"},{default:a(()=>[...l[38]||(l[38]=[r("设计",-1)])]),_:1}),t(m,{value:"code"},{default:a(()=>[...l[39]||(l[39]=[r("代码",-1)])]),_:1}),t(m,{value:"workflow"},{default:a(()=>[...l[40]||(l[40]=[r("工作流",-1)])]),_:1}),t(m,{value:"knowledge"},{default:a(()=>[...l[41]||(l[41]=[r("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(b,{label:"根路径 (可选)"},{default:a(()=>[t(T,{value:e.newProject.rootPath,"onUpdate:value":l[14]||(l[14]=n=>e.newProject.rootPath=n),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const We=we(Pe,[["render",Le],["__scopeId","data-v-019ac5aa"],["__file","/tmp/cc-web-panel-jIIa0G/repo/packages/web-panel/src/views/Projects.vue"]]);export{We as default};
@@ -1 +0,0 @@
1
- import{I as u,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-Bhf-MuUh.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=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(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,'\\"'),G=`config set speech.${A} "${V}"`;try{const{output:U,exitCode:W}=await e.execute(G,1e4);W!==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:E,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})):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-jIIa0G/repo/packages/web-panel/src/views/SpeechSettings.vue"]]);export{ue as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-Bhf-MuUh.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-JFdvuTzi.js";import{a0 as t}from"./index-Bhf-MuUh.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-1g-Vnibk.js";import"./useFlexGapSupport-D3d_0YuY.js";import"./styleChecker-DyP1mPDf.js";import"./index-DL7ewjD2.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-CfepEu79.js";import{a0 as t}from"./index-Bhf-MuUh.js";import"./vendor-Bn1JzzAn.js";import"./index-DL7ewjD2.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};