chainlesschain 0.161.3 → 0.161.4

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 (192) hide show
  1. package/bin/chainlesschain.js +0 -0
  2. package/package.json +1 -1
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-FON6GZIt.js → AIOps-K85peDCg.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-Byb_P_P9.js → ActionButton-DoRABhmk.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-CDG1OwOr.js → Analytics-B7p7X_lS.js} +2 -2
  7. package/src/assets/web-panel/assets/AppLayout-BQb9-BUE.js +1 -0
  8. package/src/assets/web-panel/assets/AppLayout-P7jhSfLy.css +1 -0
  9. package/src/assets/web-panel/assets/{Audit-p4krng5l.js → Audit-CHj8w38X.js} +1 -1
  10. package/src/assets/web-panel/assets/Backup-BsgPajcJ.js +1 -0
  11. package/src/assets/web-panel/assets/BaseInput-kGeksnCj.js +1 -0
  12. package/src/assets/web-panel/assets/Chat-2e3EGiwk.js +7 -0
  13. package/src/assets/web-panel/assets/Chat-D4oAhi11.css +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-CfDbHGdU.js → Checkbox-DirndeMM.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-D1mQ03ap.js → Codegen-UQuEF6rH.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-C0wS_dvU.js → Col-myVf7h0M.js} +1 -1
  17. package/src/assets/web-panel/assets/Community-C3Gt4JNP.js +1 -0
  18. package/src/assets/web-panel/assets/{Compact-CuVvz3Zf.js → Compact-B4TJcIuz.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-D6bnHyjs.js → Compliance-DKye9lMe.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-Dh3yt9pL.js → Cowork-bD9Z8K9J.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-DiuKXbnA.js → Cron-BrQZ3zwQ.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-BFgMa5sQ.js → Crosschain-C7m4dIrR.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-Dx7CFjrq.js → DID-CGniRypj.js} +2 -2
  24. package/src/assets/web-panel/assets/Dashboard-BqQfrJLe.js +3 -0
  25. package/src/assets/web-panel/assets/{Dropdown-sMGnnzUo.js → Dropdown-Csici42Z.js} +1 -1
  26. package/src/assets/web-panel/assets/{Federation-CGt7CYhN.js → Federation-D2boc2WU.js} +1 -1
  27. package/src/assets/web-panel/assets/{FormItemContext-DuVk39z3.js → FormItemContext-BpXHcM06.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-glb99UzZ.js → Git-C7QHt3Hy.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-CQXGee_r.js → Governance-DPBJNo9u.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-Czm-Q3w3.js → Inference-Ca8VokDu.js} +1 -1
  31. package/src/assets/web-panel/assets/KnowledgeGraph-CrFGz4u2.js +1 -0
  32. package/src/assets/web-panel/assets/{Logs-ChGXdo0Q.js → Logs-DMhNTvH6.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-DW6P2uIY.js → Marketplace-DB0lVRRk.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-ChOwY-wy.js → McpTools-BmFQp5wQ.js} +3 -3
  35. package/src/assets/web-panel/assets/{Memory-vIbbUTel.js → Memory-DDooyF2l.js} +2 -2
  36. package/src/assets/web-panel/assets/Mtc-Ci6BDiRi.js +6 -0
  37. package/src/assets/web-panel/assets/Mtc-DHwbdUqA.css +1 -0
  38. package/src/assets/web-panel/assets/MtcAudit-B0x8gahq.css +1 -0
  39. package/src/assets/web-panel/assets/MtcAudit-J-DgVOwR.js +19 -0
  40. package/src/assets/web-panel/assets/{NLProgramming-fRrjhjpW.js → NLProgramming-Uv0jicWQ.js} +1 -1
  41. package/src/assets/web-panel/assets/Notes-BHauapxR.css +1 -0
  42. package/src/assets/web-panel/assets/Notes-SGtdMwfH.js +7 -0
  43. package/src/assets/web-panel/assets/NotificationSettings-Cg4yXikq.js +1 -0
  44. package/src/assets/web-panel/assets/NotificationSettings-Co0e0uEO.css +1 -0
  45. package/src/assets/web-panel/assets/{Organization-Bebfm6lF.js → Organization-Bij8W2mU.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-D8ZjaRpc.js → Overflow-DNGM4vCD.js} +1 -1
  47. package/src/assets/web-panel/assets/{OverrideContext-Nubhv68k.js → OverrideContext-DSwW21YS.js} +1 -1
  48. package/src/assets/web-panel/assets/{P2P-BjgamPxI.js → P2P-9DlPC_rr.js} +2 -2
  49. package/src/assets/web-panel/assets/{Permissions-uwoi4HnY.js → Permissions-BVJwnBDW.js} +3 -3
  50. package/src/assets/web-panel/assets/{Pipeline-C2aHcq6n.js → Pipeline-lWCcdQ9k.js} +1 -1
  51. package/src/assets/web-panel/assets/{Privacy-lU34k_c5.js → Privacy-BN60IEMG.js} +1 -1
  52. package/src/assets/web-panel/assets/{ProjectSettings-Dy-Iie9L.js → ProjectSettings-GJoyBlLy.js} +1 -1
  53. package/src/assets/web-panel/assets/{Projects-B4Vt0iiH.js → Projects-Dvs_UqGv.js} +2 -2
  54. package/src/assets/web-panel/assets/{Providers-Cu9uRsVk.js → Providers-A5KukRrJ.js} +2 -2
  55. package/src/assets/web-panel/assets/QuickAsk-D4K2pIHJ.js +1 -0
  56. package/src/assets/web-panel/assets/{Recommend-DJ9nU8HM.js → Recommend-DQKR520B.js} +1 -1
  57. package/src/assets/web-panel/assets/{Reputation-ThffxFwr.js → Reputation-BVntfhQV.js} +1 -1
  58. package/src/assets/web-panel/assets/Row-Do4ULXpm.js +1 -0
  59. package/src/assets/web-panel/assets/{RssFeed-DaxFEUe6.js → RssFeed-FAHzJo-E.js} +3 -3
  60. package/src/assets/web-panel/assets/{Search-4zVFnx_Y.js → Search-DsOTkKd1.js} +1 -1
  61. package/src/assets/web-panel/assets/{Security-BEfSoaTM.js → Security-hglxmoVZ.js} +3 -3
  62. package/src/assets/web-panel/assets/{Services-DTAaoYJC.js → Services-C6Rv4i8z.js} +1 -1
  63. package/src/assets/web-panel/assets/{Skeleton-CIZErmoY.js → Skeleton-D-dXFspp.js} +1 -1
  64. package/src/assets/web-panel/assets/{Skills-CacIwBCt.js → Skills-D6sVDuOT.js} +1 -1
  65. package/src/assets/web-panel/assets/{Sla-Si0g7a0u.js → Sla-8O-JYjQq.js} +1 -1
  66. package/src/assets/web-panel/assets/{SpeechSettings-H19DqdAG.js → SpeechSettings-DSOYsk6R.js} +1 -1
  67. package/src/assets/web-panel/assets/{SyncSettings-bsC4-4rU.js → SyncSettings-C5nhT_6b.js} +1 -1
  68. package/src/assets/web-panel/assets/{Tasks-Bxlj8OVW.js → Tasks-NrpJCUFD.js} +1 -1
  69. package/src/assets/web-panel/assets/Templates-Ca2HO-Ff.js +1 -0
  70. package/src/assets/web-panel/assets/Tenant-BWXC1pLX.js +1 -0
  71. package/src/assets/web-panel/assets/{Tokens-B2wJjOdI.js → Tokens-DUtMwWxZ.js} +1 -1
  72. package/src/assets/web-panel/assets/{Trigger-DU9-3gN9.js → Trigger-TyynxipZ.js} +1 -1
  73. package/src/assets/web-panel/assets/{Trust-_yan18qg.js → Trust-b4KDouFb.js} +1 -1
  74. package/src/assets/web-panel/assets/UkeySign-CJpVhu8c.js +1 -0
  75. package/src/assets/web-panel/assets/{VideoEditing-CUgere5i.js → VideoEditing-Bpn0V8T2.js} +1 -1
  76. package/src/assets/web-panel/assets/{Wallet-DSnzYVqY.js → Wallet-CzBLjCnl.js} +4 -4
  77. package/src/assets/web-panel/assets/{WebAuthn-De4aHZ87.js → WebAuthn-HnRCEu5Q.js} +5 -5
  78. package/src/assets/web-panel/assets/{WorkflowEditor-C-QNGwia.js → WorkflowEditor-CMWDod4n.js} +1 -1
  79. package/src/assets/web-panel/assets/{_getTag-CWA3v-Ds.js → _getTag-BVc6NQ_K.js} +1 -1
  80. package/src/assets/web-panel/assets/chat-D7QE42qx.js +1 -0
  81. package/src/assets/web-panel/assets/{collapseMotion-BIjDVXtT.js → collapseMotion-6-_FbiKl.js} +1 -1
  82. package/src/assets/web-panel/assets/{colors-CHuBSydj.js → colors-BO5nQJrH.js} +1 -1
  83. package/src/assets/web-panel/assets/{compact-item-DtCmGKIm.js → compact-item-By0t_ZDX.js} +1 -1
  84. package/src/assets/web-panel/assets/{createContext-Cetup5Fb.js → createContext-CHZw2WQy.js} +1 -1
  85. package/src/assets/web-panel/assets/{debounce-Q0BOJsYd.js → debounce-D9xTw4Sx.js} +1 -1
  86. package/src/assets/web-panel/assets/{echarts-DmBLM6YO.js → echarts-BrEnqXDv.js} +1 -1
  87. package/src/assets/web-panel/assets/{hasIn-Q509tIlQ.js → hasIn-CHScXGSD.js} +1 -1
  88. package/src/assets/web-panel/assets/icons-B2G69bhT.js +57 -0
  89. package/src/assets/web-panel/assets/{index-Bjz1Y3Gs.js → index-B-VML4Pz.js} +1 -1
  90. package/src/assets/web-panel/assets/index-B6FaCH6K.js +55 -0
  91. package/src/assets/web-panel/assets/{index-DKWvx42k.js → index-BCoEssNV.js} +1 -1
  92. package/src/assets/web-panel/assets/index-BFMpMM1y.js +21 -0
  93. package/src/assets/web-panel/assets/index-BIoymtmG.js +1 -0
  94. package/src/assets/web-panel/assets/{index-C2y5MxfU.js → index-BVL4FbJ3.js} +2 -2
  95. package/src/assets/web-panel/assets/{index-BmHsGJ8F.js → index-BXXqtwrw.js} +1 -1
  96. package/src/assets/web-panel/assets/index-BY-BnqWj.js +12 -0
  97. package/src/assets/web-panel/assets/{index-BvAwpPN9.js → index-Bbf4Smm-.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-Ctdt2gEP.js → index-BdOG1g8i.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-R5D_-l07.js → index-BgAPyeU5.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-B2f4ltyM.js → index-Bn_0bupT.js} +19 -15
  101. package/src/assets/web-panel/assets/index-BnaKc6VJ.js +1 -0
  102. package/src/assets/web-panel/assets/index-BqMhh2pY.js +1 -0
  103. package/src/assets/web-panel/assets/{index-B5d7Dkyp.js → index-BuzilAPw.js} +2 -2
  104. package/src/assets/web-panel/assets/{index-Dq6E-pj8.js → index-By3TOq5w.js} +1 -1
  105. package/src/assets/web-panel/assets/index-C1ssAFdz.js +1 -0
  106. package/src/assets/web-panel/assets/{index-CeXoNBLu.js → index-CAPiTJT4.js} +2 -2
  107. package/src/assets/web-panel/assets/{index-nfLO3XrF.js → index-CCOGrBpN.js} +1 -1
  108. package/src/assets/web-panel/assets/index-COVlQxSz.js +7 -0
  109. package/src/assets/web-panel/assets/{index-DVQSXYwb.js → index-CYCwDDoS.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-C8agLSzC.js → index-C_EIwaP7.js} +3 -3
  111. package/src/assets/web-panel/assets/{index-7kdZ5ox5.js → index-CfZqQ0JR.js} +3 -3
  112. package/src/assets/web-panel/assets/{index-C7baQwUM.js → index-CpHzrw8g.js} +1 -1
  113. package/src/assets/web-panel/assets/index-CszhN_r3.js +1 -0
  114. package/src/assets/web-panel/assets/{index-CRZ8WjUK.js → index-Czk89HQF.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DaMTgJkE.js → index-D3WrGn-J.js} +2 -2
  116. package/src/assets/web-panel/assets/index-DS0o68gc.js +3 -0
  117. package/src/assets/web-panel/assets/{index-SR2lFA_W.js → index-DZ4t_1f-.js} +2 -2
  118. package/src/assets/web-panel/assets/{index-hSpRlh93.js → index-D_QlAaj5.js} +1 -1
  119. package/src/assets/web-panel/assets/index-DgWJBqLh.js +13 -0
  120. package/src/assets/web-panel/assets/{index-HqJ94PSG.js → index-DiHryOr_.js} +2 -2
  121. package/src/assets/web-panel/assets/index-DqPwMq7i.js +1 -0
  122. package/src/assets/web-panel/assets/{index-BTwIwesN.js → index-Qm6Kn3iq.js} +1 -1
  123. package/src/assets/web-panel/assets/index-U1O0AXXH.js +1 -0
  124. package/src/assets/web-panel/assets/index-jRQNL6Yj.js +12 -0
  125. package/src/assets/web-panel/assets/index-sgVQrC2c.js +1 -0
  126. package/src/assets/web-panel/assets/{index-C61WQXE3.js → index-yLdzB8i-.js} +1 -1
  127. package/src/assets/web-panel/assets/{initDefaultProps-D7iOaKOY.js → initDefaultProps-CMFUJGsa.js} +1 -1
  128. package/src/assets/web-panel/assets/{isPlainObject-DSTnI585.js → isPlainObject-_gz-soRW.js} +1 -1
  129. package/src/assets/web-panel/assets/isSymbol-DAy2hlR5.js +1 -0
  130. package/src/assets/web-panel/assets/{motion-CvCFk7sy.js → motion-CTtMugIF.js} +2 -2
  131. package/src/assets/web-panel/assets/{move-BVj5YZrV.js → move-DHjaLqhq.js} +1 -1
  132. package/src/assets/web-panel/assets/mtc-parser-Cc3pB9Xm.js +1 -0
  133. package/src/assets/web-panel/assets/{omit-N_JDguMt.js → omit-COm0v71g.js} +1 -1
  134. package/src/assets/web-panel/assets/operationUnit-vCu2co3e.js +1 -0
  135. package/src/assets/web-panel/assets/{pickAttrs-BWcuLN5j.js → pickAttrs-C3Ftf-sl.js} +1 -1
  136. package/src/assets/web-panel/assets/{placementArrow--1l0FzZx.js → placementArrow-IJhTwCmF.js} +1 -1
  137. package/src/assets/web-panel/assets/{responsiveObserve-CGX6EYRt.js → responsiveObserve-Cmu2mrKT.js} +1 -1
  138. package/src/assets/web-panel/assets/{slide-B3hJzlWm.js → slide-CnWCDeu_.js} +1 -1
  139. package/src/assets/web-panel/assets/{statusUtils-BJuExZuw.js → statusUtils-CSOJeZ-L.js} +1 -1
  140. package/src/assets/web-panel/assets/{styleChecker-pshnIK0r.js → styleChecker-94VBD7Xs.js} +1 -1
  141. package/src/assets/web-panel/assets/useFlexGapSupport-CBjbWuc9.js +1 -0
  142. package/src/assets/web-panel/assets/{useFs-BW1piLQM.js → useFs-DfXp51Mk.js} +1 -1
  143. package/src/assets/web-panel/assets/{useMergedState-TP9VIF2K.js → useMergedState-n0f81Aew.js} +1 -1
  144. package/src/assets/web-panel/assets/{useRefs-BhIz_lC3.js → useRefs-CTh0C9xI.js} +1 -1
  145. package/src/assets/web-panel/assets/{useState-CpKsyozn.js → useState-4T1Ntfpx.js} +1 -1
  146. package/src/assets/web-panel/assets/{vendor-B6ToihkA.js → vendor-Ci2pTZ_t.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-D98L6HI1.js → vnode-CGY3YRLi.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-DnmMtXgZ.js → zoom-CZllDiMO.js} +1 -1
  149. package/src/assets/web-panel/index.html +3 -3
  150. package/src/commands/mtc.js +2 -0
  151. package/src/gateways/ws/chat-intent-protocol.js +192 -0
  152. package/src/gateways/ws/message-dispatcher.js +6 -0
  153. package/src/gateways/ws/ws-server.js +20 -0
  154. package/src/lib/chat-intent-service.js +530 -0
  155. package/src/assets/web-panel/assets/AppLayout-CtGprHSx.css +0 -1
  156. package/src/assets/web-panel/assets/AppLayout-lM1Y2Wgo.js +0 -1
  157. package/src/assets/web-panel/assets/Backup-G6AQe6k8.js +0 -1
  158. package/src/assets/web-panel/assets/BaseInput-tUASXi57.js +0 -1
  159. package/src/assets/web-panel/assets/Chat-B46MHHAs.js +0 -2
  160. package/src/assets/web-panel/assets/Chat-ByiYUboW.css +0 -1
  161. package/src/assets/web-panel/assets/Community-CB4KQIpB.js +0 -1
  162. package/src/assets/web-panel/assets/Dashboard-D3QHFHex.js +0 -3
  163. package/src/assets/web-panel/assets/KnowledgeGraph-DFrr-B78.js +0 -1
  164. package/src/assets/web-panel/assets/Mtc-60jSuMAz.js +0 -6
  165. package/src/assets/web-panel/assets/Mtc-Cc8OJxe_.css +0 -1
  166. package/src/assets/web-panel/assets/Notes-C0zhC6_B.js +0 -7
  167. package/src/assets/web-panel/assets/Notes-DKkPfXlY.css +0 -1
  168. package/src/assets/web-panel/assets/QuickAsk-BE29MB0d.js +0 -1
  169. package/src/assets/web-panel/assets/Row-CqBtO8lC.js +0 -1
  170. package/src/assets/web-panel/assets/Templates-B9YsJQcb.js +0 -1
  171. package/src/assets/web-panel/assets/Tenant-D4YncKb7.js +0 -1
  172. package/src/assets/web-panel/assets/UkeySign-CZ7Xrq96.js +0 -1
  173. package/src/assets/web-panel/assets/chat-DFt6UJUS.js +0 -1
  174. package/src/assets/web-panel/assets/icons-zXb7lDZs.js +0 -57
  175. package/src/assets/web-panel/assets/index-0KFwdHZg.js +0 -1
  176. package/src/assets/web-panel/assets/index-BDK2Fkgd.js +0 -13
  177. package/src/assets/web-panel/assets/index-BJFH7IlV.js +0 -21
  178. package/src/assets/web-panel/assets/index-BlPG_vWg.js +0 -55
  179. package/src/assets/web-panel/assets/index-CJjwnpac.js +0 -1
  180. package/src/assets/web-panel/assets/index-CX7WO0g5.js +0 -12
  181. package/src/assets/web-panel/assets/index-CbQ3AZcJ.js +0 -3
  182. package/src/assets/web-panel/assets/index-Cxk-8scO.js +0 -1
  183. package/src/assets/web-panel/assets/index-D0oJF6nX.js +0 -7
  184. package/src/assets/web-panel/assets/index-D7Smgwky.js +0 -1
  185. package/src/assets/web-panel/assets/index-DGAGIqDR.js +0 -1
  186. package/src/assets/web-panel/assets/index-Dd68wDHG.js +0 -12
  187. package/src/assets/web-panel/assets/index-Dem-mhfD.js +0 -1
  188. package/src/assets/web-panel/assets/index-DuQfQVBe.js +0 -1
  189. package/src/assets/web-panel/assets/index-jfzI94IT.js +0 -1
  190. package/src/assets/web-panel/assets/isSymbol-CsP9Ob42.js +0 -1
  191. package/src/assets/web-panel/assets/mtc-parser-pGMSt10g.js +0 -1
  192. package/src/assets/web-panel/assets/useFlexGapSupport-3FQZdpBd.js +0 -1
@@ -0,0 +1,530 @@
1
+ /**
2
+ * Chat Intent Service — ports the V5 desktop intent understanding and
3
+ * follow-up intent classifier flows to the CLI/WS layer so the web-shell
4
+ * can drive the same UX over WebSocket topics.
5
+ *
6
+ * understandIntent({ userInput, contextMode, llmOptions })
7
+ * → { correctedInput, intent, keyPoints }
8
+ *
9
+ * classifyFollowupIntent({ input, context, llmOptions })
10
+ * → { intent, confidence, reason, extractedInfo, method, latency }
11
+ *
12
+ * Intent categories match V5 (FollowupIntentClassifier):
13
+ * CONTINUE_EXECUTION | MODIFY_REQUIREMENT | CLARIFICATION | CANCEL_TASK
14
+ *
15
+ * The rule-based first-pass mirrors the V5 keyword + regex sets so behaviour
16
+ * is identical when the LLM is offline. LLM fallback uses the same low-temp
17
+ * JSON-output prompt as V5.
18
+ */
19
+
20
+ import { chatWithStreaming, chatStream } from "./chat-core.js";
21
+
22
+ const DEFAULT_INTENT_TIMEOUT_MS = 15000;
23
+
24
+ /**
25
+ * Build the V5 understandIntent system + user prompt pair.
26
+ *
27
+ * `history` is optional — when provided, the last few exchanges are
28
+ * embedded into the user prompt so the model can resolve anaphora ("再来
29
+ * 一次"、"和上次一样") instead of treating each input in isolation.
30
+ */
31
+ function buildUnderstandPrompts(userInput, contextMode, history) {
32
+ const systemPrompt = `你是一个智能的意图理解助手。你的任务是:
33
+
34
+ 1. **纠错处理**:识别并纠正用户输入中的打字错误、拼写错误、语法错误等问题
35
+ 2. **意图识别**:理解用户的真实意图和需求(如有对话历史,请结合上下文消解指代)
36
+ 3. **要点提取**:提取用户需求的关键要点
37
+
38
+ 请以JSON格式返回结果,格式如下:
39
+ \`\`\`json
40
+ {
41
+ "correctedInput": "纠错后的输入(如果没有错误,则与原输入相同)",
42
+ "intent": "用户的意图描述(简短的一句话)",
43
+ "keyPoints": ["关键要点1", "关键要点2", "关键要点3"]
44
+ }
45
+ \`\`\`
46
+
47
+ **注意事项:**
48
+ - 如果输入没有错误,correctedInput应该与原输入完全相同
49
+ - intent应该简洁明了,不超过30个字
50
+ - keyPoints应该提取3-5个核心要点
51
+ - 必须返回有效的JSON格式`;
52
+
53
+ const historyBlock =
54
+ Array.isArray(history) && history.length > 0
55
+ ? `\n\n对话历史(最近 ${history.length} 条):\n${history
56
+ .map((m) => `- ${m.role}: ${String(m.content || "").slice(0, 200)}`)
57
+ .join("\n")}`
58
+ : "";
59
+
60
+ const userPrompt = `请理解以下用户输入:
61
+
62
+ 用户输入:${userInput}
63
+
64
+ 上下文模式:${contextMode || "global"}${historyBlock}`;
65
+
66
+ return { systemPrompt, userPrompt };
67
+ }
68
+
69
+ /**
70
+ * Extract the JSON body from an LLM response (handles ```json fences and
71
+ * bare JSON braces). Returns null if no JSON found.
72
+ */
73
+ function extractJson(content) {
74
+ if (!content || typeof content !== "string") return null;
75
+ const fenced = content.match(/```json\s*([\s\S]*?)```/i);
76
+ if (fenced) return fenced[1].trim();
77
+ const generic = content.match(/```\s*([\s\S]*?)```/);
78
+ if (generic) return generic[1].trim();
79
+ const bare = content.match(/\{[\s\S]*\}/);
80
+ return bare ? bare[0] : null;
81
+ }
82
+
83
+ /**
84
+ * Understand a user input — runs the V5 prompt through the active LLM and
85
+ * parses the response. Returns a normalised understanding object plus a
86
+ * `success` flag; on parse / LLM failure, falls back to passing the input
87
+ * through verbatim with `intent='general'` so the caller never crashes.
88
+ *
89
+ * @param {object} args
90
+ * @param {string} args.userInput
91
+ * @param {string} [args.contextMode='global']
92
+ * @param {object} args.llmOptions - { provider, model, baseUrl, apiKey }
93
+ * @returns {Promise<{success: boolean, correctedInput: string, intent: string,
94
+ * keyPoints: string[], error?: string}>}
95
+ */
96
+ export async function understandIntent({
97
+ userInput,
98
+ contextMode = "global",
99
+ history,
100
+ llmOptions,
101
+ }) {
102
+ if (!userInput || !userInput.trim()) {
103
+ throw new Error("userInput required");
104
+ }
105
+ if (!llmOptions || !llmOptions.provider) {
106
+ // Caller chose not to provide LLM creds — degrade gracefully so the UI
107
+ // can still show the confirmation card.
108
+ return {
109
+ success: false,
110
+ correctedInput: userInput,
111
+ intent: "general",
112
+ keyPoints: [],
113
+ error: "LLM not configured",
114
+ };
115
+ }
116
+
117
+ const { systemPrompt, userPrompt } = buildUnderstandPrompts(
118
+ userInput,
119
+ contextMode,
120
+ history,
121
+ );
122
+
123
+ try {
124
+ const fullContent = await chatWithStreaming(
125
+ [
126
+ { role: "system", content: systemPrompt },
127
+ { role: "user", content: userPrompt },
128
+ ],
129
+ {
130
+ ...llmOptions,
131
+ // Lower temperature → more deterministic JSON output.
132
+ temperature: 0.3,
133
+ maxTokens: 500,
134
+ },
135
+ );
136
+
137
+ const jsonText = extractJson(fullContent);
138
+ if (!jsonText) {
139
+ throw new Error("LLM response did not contain JSON");
140
+ }
141
+ const parsed = JSON.parse(jsonText);
142
+ return {
143
+ success: true,
144
+ correctedInput: parsed.correctedInput || userInput,
145
+ intent: parsed.intent || "general",
146
+ keyPoints: Array.isArray(parsed.keyPoints) ? parsed.keyPoints : [],
147
+ };
148
+ } catch (err) {
149
+ return {
150
+ success: false,
151
+ correctedInput: userInput,
152
+ intent: "general",
153
+ keyPoints: [],
154
+ error: err?.message || String(err),
155
+ };
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Streaming variant of {@link understandIntent}.
161
+ *
162
+ * Yields:
163
+ * { type: 'token', token } — every LLM delta token (raw, may be partial JSON)
164
+ * { type: 'final', success, correctedInput, intent, keyPoints, error? }
165
+ *
166
+ * The UI uses tokens as a "thinking…" indicator and only renders the
167
+ * confirmation card on the `final` payload. Yielding raw tokens (rather
168
+ * than incrementally parsed JSON) keeps this layer simple — partial JSON
169
+ * isn't reliably parseable mid-stream and would just produce noise.
170
+ *
171
+ * @param {object} args
172
+ * @param {string} args.userInput
173
+ * @param {string} [args.contextMode='global']
174
+ * @param {Array<{role:string,content:string}>} [args.history]
175
+ * @param {object} [args.llmOptions]
176
+ */
177
+ export async function* understandIntentStream({
178
+ userInput,
179
+ contextMode = "global",
180
+ history,
181
+ llmOptions,
182
+ }) {
183
+ if (!userInput || !userInput.trim()) {
184
+ throw new Error("userInput required");
185
+ }
186
+ if (!llmOptions || !llmOptions.provider) {
187
+ yield {
188
+ type: "final",
189
+ success: false,
190
+ correctedInput: userInput,
191
+ intent: "general",
192
+ keyPoints: [],
193
+ error: "LLM not configured",
194
+ };
195
+ return;
196
+ }
197
+
198
+ const { systemPrompt, userPrompt } = buildUnderstandPrompts(
199
+ userInput,
200
+ contextMode,
201
+ history,
202
+ );
203
+ let buffer = "";
204
+ try {
205
+ for await (const event of chatStream(
206
+ [
207
+ { role: "system", content: systemPrompt },
208
+ { role: "user", content: userPrompt },
209
+ ],
210
+ { ...llmOptions, temperature: 0.3, maxTokens: 500 },
211
+ )) {
212
+ if (event.type === "response-token") {
213
+ buffer += event.token;
214
+ yield { type: "token", token: event.token };
215
+ } else if (event.type === "response-complete") {
216
+ // chatStream's terminal event carries the full collected text;
217
+ // prefer it over the accumulated buffer in case provider semantics
218
+ // differ.
219
+ buffer = event.content || buffer;
220
+ }
221
+ }
222
+ const jsonText = extractJson(buffer);
223
+ if (!jsonText) {
224
+ yield {
225
+ type: "final",
226
+ success: false,
227
+ correctedInput: userInput,
228
+ intent: "general",
229
+ keyPoints: [],
230
+ error: "LLM response did not contain JSON",
231
+ };
232
+ return;
233
+ }
234
+ const parsed = JSON.parse(jsonText);
235
+ yield {
236
+ type: "final",
237
+ success: true,
238
+ correctedInput: parsed.correctedInput || userInput,
239
+ intent: parsed.intent || "general",
240
+ keyPoints: Array.isArray(parsed.keyPoints) ? parsed.keyPoints : [],
241
+ };
242
+ } catch (err) {
243
+ yield {
244
+ type: "final",
245
+ success: false,
246
+ correctedInput: userInput,
247
+ intent: "general",
248
+ keyPoints: [],
249
+ error: err?.message || String(err),
250
+ };
251
+ }
252
+ }
253
+
254
+ // =====================================================================
255
+ // Follow-up intent classifier — rule-first, LLM-fallback
256
+ // =====================================================================
257
+
258
+ const FOLLOWUP_RULES = {
259
+ CONTINUE_EXECUTION: {
260
+ keywords: [
261
+ "继续",
262
+ "开始",
263
+ "好的",
264
+ "好",
265
+ "嗯",
266
+ "行",
267
+ "ok",
268
+ "OK",
269
+ "快点",
270
+ "去吧",
271
+ "执行",
272
+ ],
273
+ patterns: [
274
+ /^(继续|好的?|嗯|行|OK|ok)$/i,
275
+ /^快点|赶紧|马上/,
276
+ /^开始(吧|执行)/,
277
+ ],
278
+ },
279
+ MODIFY_REQUIREMENT: {
280
+ keywords: [
281
+ "改",
282
+ "修改",
283
+ "换成",
284
+ "换",
285
+ "换个",
286
+ "不要",
287
+ "去掉",
288
+ "删除",
289
+ "加上",
290
+ "增加",
291
+ "还要",
292
+ "另外",
293
+ ],
294
+ patterns: [
295
+ /(改|换)(成|个)/,
296
+ /(加|增加|还要|另外).+(功能|页面|按钮|模块)/,
297
+ /不要|去掉|删除/,
298
+ /等等|等一下|先别/,
299
+ /还要.*(修改|改)/,
300
+ ],
301
+ },
302
+ CLARIFICATION: {
303
+ keywords: [
304
+ "用",
305
+ "采用",
306
+ "使用",
307
+ "应该是",
308
+ "具体是",
309
+ "颜色",
310
+ "字体",
311
+ "大小",
312
+ "位置",
313
+ "标题",
314
+ ],
315
+ patterns: [
316
+ /^(用|采用|使用)/,
317
+ /(颜色|字体|大小|位置|标题).*(是|用|为)/,
318
+ /^.{1,20}(应该|具体)(是|为)/,
319
+ /^数据(来源|是)/,
320
+ /.*(用|采用).*(字体|颜色|大小)/,
321
+ ],
322
+ },
323
+ CANCEL_TASK: {
324
+ keywords: ["算了", "不用", "停止", "取消", "暂停", "先不"],
325
+ patterns: [
326
+ /^(算了|不用|停止|取消|暂停)/,
327
+ /(算了|不用了|停止|取消|暂停)/,
328
+ /^先不.*(了|吧)/,
329
+ /不做了|别做了/,
330
+ /先不做/,
331
+ ],
332
+ },
333
+ };
334
+
335
+ function ruleBasedClassify(userInput) {
336
+ const input = (userInput || "").trim();
337
+
338
+ if (input.length === 0) {
339
+ return {
340
+ intent: "CONTINUE_EXECUTION",
341
+ confidence: 0.9,
342
+ reason: "Empty input → continue",
343
+ };
344
+ }
345
+
346
+ const scores = {
347
+ CONTINUE_EXECUTION: 0,
348
+ MODIFY_REQUIREMENT: 0,
349
+ CLARIFICATION: 0,
350
+ CANCEL_TASK: 0,
351
+ };
352
+
353
+ for (const [intent, config] of Object.entries(FOLLOWUP_RULES)) {
354
+ const weightMultiplier = intent === "CANCEL_TASK" ? 1.5 : 1.0;
355
+ for (const keyword of config.keywords) {
356
+ if (input.includes(keyword)) scores[intent] += 0.3 * weightMultiplier;
357
+ }
358
+ for (const pattern of config.patterns) {
359
+ if (pattern.test(input)) scores[intent] += 0.5 * weightMultiplier;
360
+ }
361
+ }
362
+
363
+ if (/(算了|不用了?|停止|取消|暂停|先不做)/.test(input)) {
364
+ scores.CANCEL_TASK = Math.max(scores.CANCEL_TASK, 1.0);
365
+ }
366
+ if (/^(好的?|嗯|行|OK|ok|继续)$/i.test(input)) {
367
+ scores.CONTINUE_EXECUTION = 1.0;
368
+ }
369
+
370
+ const maxIntent = Object.keys(scores).reduce((a, b) =>
371
+ scores[a] > scores[b] ? a : b,
372
+ );
373
+ const maxScore = scores[maxIntent];
374
+
375
+ return {
376
+ intent: maxIntent,
377
+ confidence: Math.min(maxScore, 1.0),
378
+ reason: `rule-based scores: ${JSON.stringify(scores)}`,
379
+ scores,
380
+ };
381
+ }
382
+
383
+ function buildFollowupPrompts(userInput, context = {}) {
384
+ const { currentTask, conversationHistory, taskPlan } = context;
385
+
386
+ const systemPrompt = `你是一个专业的意图分类器,负责分析用户在任务执行过程中的后续输入意图。
387
+
388
+ # 你的任务
389
+ 判断用户输入属于以下哪一种意图类型:
390
+
391
+ 1. **CONTINUE_EXECUTION (继续执行)**
392
+ - 用户在催促、确认、同意继续当前任务
393
+ - 示例: "继续"、"好的"、"快点"、"开始吧"、"行"
394
+
395
+ 2. **MODIFY_REQUIREMENT (修改需求)**
396
+ - 用户想要修改、追加、删除需求
397
+ - 示例: "改成红色"、"还要加一个登录页"、"去掉导航栏"、"换个字体"
398
+
399
+ 3. **CLARIFICATION (补充说明)**
400
+ - 用户提供额外的细节信息或参数
401
+ - 示例: "标题用宋体"、"数据来源是 users.csv"、"颜色用 #FF5733"
402
+
403
+ 4. **CANCEL_TASK (取消任务)**
404
+ - 用户想要停止、取消当前任务
405
+ - 示例: "算了"、"不用了"、"停止"、"先不做了"
406
+
407
+ # 输出格式
408
+ 严格返回 JSON 格式:
409
+ {
410
+ "intent": "CONTINUE_EXECUTION | MODIFY_REQUIREMENT | CLARIFICATION | CANCEL_TASK",
411
+ "confidence": 0.0-1.0,
412
+ "reason": "判断理由(1-2句话)",
413
+ "extractedInfo": "如果是 MODIFY_REQUIREMENT 或 CLARIFICATION,提取关键信息"
414
+ }`;
415
+
416
+ const userPrompt = `
417
+ # 上下文信息
418
+ ${currentTask ? `**当前任务**: ${JSON.stringify(currentTask, null, 2)}` : ""}
419
+
420
+ ${taskPlan ? `**任务计划**: ${JSON.stringify(taskPlan, null, 2)}` : ""}
421
+
422
+ ${
423
+ Array.isArray(conversationHistory) && conversationHistory.length > 0
424
+ ? `**对话历史**:\n${conversationHistory
425
+ .slice(-5)
426
+ .map((m) => `- ${m.role}: ${m.content}`)
427
+ .join("\n")}`
428
+ : ""
429
+ }
430
+
431
+ # 用户输入
432
+ "${userInput}"
433
+
434
+ # 请分析并返回 JSON 结果`;
435
+
436
+ return { systemPrompt, userPrompt };
437
+ }
438
+
439
+ async function llmBasedClassify(userInput, context, llmOptions) {
440
+ const { systemPrompt, userPrompt } = buildFollowupPrompts(userInput, context);
441
+ const fullContent = await chatWithStreaming(
442
+ [
443
+ { role: "system", content: systemPrompt },
444
+ { role: "user", content: userPrompt },
445
+ ],
446
+ {
447
+ ...llmOptions,
448
+ temperature: 0.1,
449
+ maxTokens: 300,
450
+ },
451
+ );
452
+ const jsonText = extractJson(fullContent);
453
+ if (!jsonText) throw new Error("LLM response missing JSON");
454
+ const parsed = JSON.parse(jsonText);
455
+ return {
456
+ intent: parsed.intent || "CLARIFICATION",
457
+ confidence: typeof parsed.confidence === "number" ? parsed.confidence : 0.5,
458
+ reason: parsed.reason || "",
459
+ extractedInfo: parsed.extractedInfo || null,
460
+ };
461
+ }
462
+
463
+ /**
464
+ * Classify a follow-up user input — rule-first (covers ~80% of cases),
465
+ * falls back to LLM for ambiguous inputs. On LLM error, returns the rule
466
+ * result if it had any signal, otherwise CLARIFICATION default.
467
+ *
468
+ * @param {object} args
469
+ * @param {string} args.input
470
+ * @param {object} [args.context] - { currentTask, conversationHistory, taskPlan }
471
+ * @param {object} [args.llmOptions] - LLM credentials; if omitted, rule-only
472
+ * @returns {Promise<{intent: string, confidence: number, reason: string,
473
+ * extractedInfo?: any, method: string, latency: number}>}
474
+ */
475
+ export async function classifyFollowupIntent({
476
+ input,
477
+ context = {},
478
+ llmOptions,
479
+ }) {
480
+ const startTime = Date.now();
481
+ const ruleResult = ruleBasedClassify(input);
482
+
483
+ if (ruleResult.confidence > 0.8) {
484
+ return {
485
+ ...ruleResult,
486
+ method: "rule",
487
+ latency: Date.now() - startTime,
488
+ };
489
+ }
490
+
491
+ if (!llmOptions || !llmOptions.provider) {
492
+ return {
493
+ ...ruleResult,
494
+ method: "rule_no_llm",
495
+ latency: Date.now() - startTime,
496
+ };
497
+ }
498
+
499
+ try {
500
+ const llmResult = await llmBasedClassify(input, context, llmOptions);
501
+ return {
502
+ ...llmResult,
503
+ method: "llm",
504
+ latency: Date.now() - startTime,
505
+ };
506
+ } catch (_err) {
507
+ return ruleResult.confidence > 0
508
+ ? {
509
+ ...ruleResult,
510
+ method: "rule_fallback",
511
+ latency: Date.now() - startTime,
512
+ }
513
+ : {
514
+ intent: "CLARIFICATION",
515
+ confidence: 0.5,
516
+ reason: "Unable to classify, defaulting to CLARIFICATION",
517
+ method: "default",
518
+ latency: Date.now() - startTime,
519
+ };
520
+ }
521
+ }
522
+
523
+ // Exposed for test suites — internal helpers.
524
+ export const _internal = {
525
+ buildUnderstandPrompts,
526
+ buildFollowupPrompts,
527
+ extractJson,
528
+ ruleBasedClassify,
529
+ DEFAULT_INTENT_TIMEOUT_MS,
530
+ };
@@ -1 +0,0 @@
1
- .app-root[data-v-885d89a6]{height:100vh;background:var(--bg-base);overflow:hidden}.sidebar[data-v-885d89a6]{background:var(--bg-sidebar)!important;border-right:1px solid var(--border-color);transition:background .25s;height:100vh}[data-v-885d89a6] .ant-layout-sider-children{display:flex;flex-direction:column;overflow:hidden;height:100%}.main-area[data-v-885d89a6]{background:var(--bg-base);height:100vh;display:flex;flex-direction:column}.logo[data-v-885d89a6]{height:52px;display:flex;align-items:center;padding:0 18px;gap:10px;border-bottom:1px solid var(--border-color);overflow:hidden;white-space:nowrap;flex-shrink:0}.logo.collapsed[data-v-885d89a6]{padding:0;justify-content:center}.logo-icon[data-v-885d89a6]{width:24px;height:24px;flex-shrink:0;object-fit:contain}.logo-text[data-v-885d89a6]{color:var(--logo-text);font-weight:700;font-size:14px;letter-spacing:.01em}.mode-banner[data-v-885d89a6]{display:flex;align-items:center;gap:8px;padding:7px 10px;margin:8px 8px 4px;border-radius:7px;overflow:hidden}.mode-banner.project[data-v-885d89a6]{background:#1677ff1a;border:1px solid rgba(22,119,255,.2)}.mode-banner.global[data-v-885d89a6]{background:#722ed11a;border:1px solid rgba(114,46,209,.2)}.banner-icon[data-v-885d89a6]{font-size:13px;flex-shrink:0;color:#1677ff}.mode-banner.global .banner-icon[data-v-885d89a6]{color:#722ed1}.banner-info[data-v-885d89a6]{flex:1;min-width:0}.banner-name[data-v-885d89a6]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.banner-sub[data-v-885d89a6]{font-size:10px;color:#1677ff;margin-top:1px}.mode-banner.global .banner-name[data-v-885d89a6]{color:#c084fc}.mode-icon-sm[data-v-885d89a6]{display:flex;justify-content:center;padding:8px 0;font-size:14px}.side-menu[data-v-885d89a6]{border:none!important;margin-top:2px;-webkit-user-select:none;user-select:none;background:transparent!important;flex:1;overflow-y:auto;overflow-x:hidden}.group-label[data-v-885d89a6]{color:var(--group-title);font-size:10px;font-weight:700;letter-spacing:.12em;padding-left:6px}[data-v-885d89a6] .ant-menu-item-group-title{padding:8px 16px 2px!important}[data-v-885d89a6] .ant-menu-item{height:38px!important;line-height:38px!important;margin:1px 4px!important;border-radius:6px!important}.divider-sm[data-v-885d89a6]{margin:4px 0!important}.sidebar-footer[data-v-885d89a6]{flex-shrink:0;padding:8px 18px;display:flex;align-items:center;gap:8px;border-top:1px solid var(--border-color)}.sidebar-footer.collapsed[data-v-885d89a6]{justify-content:center;padding:8px 0}.footer-text[data-v-885d89a6]{color:var(--text-secondary);font-size:11px}.app-header[data-v-885d89a6]{background:var(--bg-header)!important;padding:0 20px!important;border-bottom:1px solid var(--border-color);height:50px!important;line-height:50px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;box-shadow:0 1px 4px #0000000f}.header-left[data-v-885d89a6],.header-right[data-v-885d89a6]{display:flex;align-items:center;gap:10px}.scope-tag[data-v-885d89a6]{display:flex;align-items:center;gap:5px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500}.scope-tag.project[data-v-885d89a6]{background:#1677ff1a;color:#1677ff;border:1px solid rgba(22,119,255,.2)}.scope-tag.global[data-v-885d89a6]{background:#722ed11a;color:#722ed1;border:1px solid rgba(114,46,209,.2)}.info-icon[data-v-885d89a6]{opacity:.45;cursor:help;margin-left:2px}.theme-switcher[data-v-885d89a6]{display:flex;align-items:center;gap:4px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:20px;padding:3px 6px}.theme-btn[data-v-885d89a6]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s,transform .15s;opacity:.55}.theme-btn[data-v-885d89a6]:hover{opacity:.9;transform:scale(1.15);background:var(--bg-card-hover)}.theme-btn.active[data-v-885d89a6]{opacity:1;transform:scale(1.1);background:var(--bg-card-hover);outline:2px solid var(--text-secondary)}.version-tag[data-v-885d89a6]{color:var(--text-muted);font-size:11px}.ws-tag[data-v-885d89a6]{margin:0!important;font-size:11px}.lang-switch-btn[data-v-885d89a6]{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 12px;border:1px solid var(--border-color);border-radius:14px;background:var(--bg-card);color:var(--text-primary);font-size:12px;font-weight:500;cursor:pointer;transition:background .15s,color .15s,border-color .15s,transform .15s}.lang-switch-btn[data-v-885d89a6]:hover{background:var(--bg-card-hover);color:#1677ff;border-color:#1677ff;transform:scale(1.04)}.lang-switch-icon[data-v-885d89a6]{font-size:14px}.lang-switch-label[data-v-885d89a6]{line-height:1}.shell-switch-btn[data-v-885d89a6]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:background .15s,transform .15s,color .15s;opacity:.6}.shell-switch-btn[data-v-885d89a6]:hover{opacity:1;transform:scale(1.15);background:var(--bg-card-hover);color:var(--text-primary)}.page-content[data-v-885d89a6]{padding:24px;overflow:auto;background:var(--bg-base);flex:1;min-height:0}
@@ -1 +0,0 @@
1
- import{r as H,w as xe,o as et,Q as k,N as t,K as p,I as tt,H as at,L as u,c as e,R as l,Y as T,u as a,M as r,S as v,F as w,P as n,O as i,Z as ot,_ as st,f as g}from"./vendor-B6ToihkA.js";import{_ as nt,u as it,a as lt,b as ct,T as ut,c as pt,d as b}from"./index-B2f4ltyM.js";import{u as rt}from"./useShellMode-CgR0wCYM.js";import{F as O,G as A,D as K,M as J,h as P,i as Q,j as E,A as Z,N as X,k as x,l as ee,m as te,n as ae,S as oe,B as se,o as N,p as ne,q as ie,r as le,s as ce,t as ue,u as pe,v as re,P as de,w as B,K as R,x as $,y as ye,z as me,H as ke,W as _e,J as U,O as fe,Q as ge,U as D,V as he,X as Le,Y as ve,Z as $e,_ as we,$ as be,a0 as Oe,a1 as Se,a2 as Ce,a3 as je,a4 as Te,a5 as dt,a6 as Ae,e as yt,a7 as mt}from"./icons-zXb7lDZs.js";import kt from"./index-BTwIwesN.js";import"./KeyCode-D63Tfrq7.js";import"./omit-N_JDguMt.js";import"./pickAttrs-BWcuLN5j.js";import"./initDefaultProps-D7iOaKOY.js";import"./motion-CvCFk7sy.js";import"./raf-Deuc0E8-.js";import"./index-Bjz1Y3Gs.js";import"./index-C7baQwUM.js";import"./isVisible-C7tPsqfj.js";import"./useState-CpKsyozn.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-DtCmGKIm.js";import"./createContext-Cetup5Fb.js";import"./Compact-CuVvz3Zf.js";import"./_getTag-CWA3v-Ds.js";import"./styleChecker-pshnIK0r.js";import"./zoom-DnmMtXgZ.js";import"./ActionButton-Byb_P_P9.js";import"./vnode-D98L6HI1.js";const _t=""+new URL("logo-DBCYUiWP.png",import.meta.url).href,ft=["src"],gt={key:0,class:"logo-text"},ht={key:0,class:"mode-banner project"},Lt={class:"banner-info"},vt={class:"banner-name"},$t={class:"banner-sub"},wt={key:1,class:"mode-banner global"},bt={class:"banner-name"},Ot=["title"],St={class:"group-label"},Ct={class:"group-label"},jt={class:"group-label"},Tt={class:"group-label"},At={class:"group-label"},Kt={class:"group-label"},Pt={class:"group-label"},Et={class:"group-label"},Nt={class:"group-label"},Bt={key:0,class:"footer-text"},Rt={class:"header-left"},Ut={class:"header-right"},Dt={class:"theme-switcher"},It=["data-theme-key","onClick"],Mt=["data-locale"],Vt={class:"lang-switch-label"},Ft={class:"version-tag"},Ke="cc.web-panel.sidebar.openKeys",Wt={__name:"AppLayout",setup(qt){const Pe=tt(),Ee=at(),h=it(),I=lt(),{t:W}=ct(),M=rt(),d=H(!1),L=window.__CC_CONFIG__||{},_=g(()=>L.mode==="project"),Ne="v5.0.3.37",Be=g(()=>I.current),Re=g(()=>I.config.vars["--menu-mode"]),q=g(()=>{const s=Ee.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp",quickask:"quick-ask",ukeysign:"ukey-sign"}[s]||s]}),z=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function Ue(){try{const s=localStorage.getItem(Ke);if(s){const c=JSON.parse(s);if(Array.isArray(c))return c.filter(o=>z.includes(o))}}catch{}return[...z]}const V=H(Ue());xe(V,s=>{try{localStorage.setItem(Ke,JSON.stringify(s))}catch{}},{deep:!0});const S=g(()=>h.status),De=g(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[h.status]||"default"),Ie=g(()=>{const s=`appLayout.footerStatus.${h.status}`,c=W(s);return c===s?W("appLayout.footerStatus.unknown"):c});function Me(s){I.setTheme(s)}const{current:Y,supported:F,setLocale:Ve}=pt();function Fe(){const s=F[(F.indexOf(Y.value)+1)%F.length];Ve(s)}async function We(s){try{const c=await h.sendRaw({type:"window.open",role:s},1e4);if(c?.ok===!1){b.error(`打开失败:${c.error||"未知"}`);return}const o=c?.result??c;o?.reason==="role_reserved"?b.warning("该窗口角色被保留"):o?.reason}catch(c){b.error(`打开桌面窗口失败:${c.message||c}`)}}async function qe(){kt.confirm({title:"切换到桌面壳?",content:"回到 V5/V6 桌面壳。完整 electronAPI 表面(UKey 硬件 / 原生对话框 / 系统设置等)会重新可用,但失去 web-panel 的 SPA 体验。保存后需要重启应用才生效。",okText:"切换并重启",cancelText:"取消",centered:!0,async onOk(){try{const s=await h.sendRaw({type:"shell.switch",target:"desktop"},5e3);if(s?.ok===!1)throw new Error(s.error||"shell.switch returned failure");b.loading({content:"正在重启…",duration:0})}catch(s){const c=s instanceof Error?s.message:String(s);b.error("切换失败:"+c)}}})}function ze({key:s}){if(typeof s=="string"&&s.startsWith("desktop:")){We(s);return}Pe.push({mcp:"/mcp"}[s]||`/${s}`)}return et(()=>h.connect()),(s,c)=>{const o=p("a-menu-item"),y=p("a-sub-menu"),f=p("a-menu-divider"),Ye=p("a-menu"),Ge=p("a-badge"),He=p("a-layout-sider"),C=p("a-tooltip"),Je=p("a-tag"),Qe=p("a-layout-header"),Ze=p("router-view"),Xe=p("a-layout-content"),G=p("a-layout");return u(),k(G,{class:"app-root"},{default:t(()=>[e(He,{collapsed:d.value,"onUpdate:collapsed":c[2]||(c[2]=m=>d.value=m),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[l("div",{class:T(["logo",{collapsed:d.value}])},[l("img",{src:a(_t),alt:"ChainlessChain",class:"logo-icon"},null,8,ft),d.value?v("",!0):(u(),r("span",gt,"ChainlessChain"))],2),d.value?(u(),r("div",{key:1,class:"mode-icon-sm",title:_.value?a(L).projectName:s.$t("appLayout.scope.global")},[_.value?(u(),k(a(O),{key:0,style:{color:"#1677ff"}})):(u(),k(a(A),{key:1,style:{color:"#722ed1"}}))],8,Ot)):(u(),r(w,{key:0},[_.value?(u(),r("div",ht,[e(a(O),{class:"banner-icon"}),l("div",Lt,[l("div",vt,n(a(L).projectName||s.$t("appLayout.scope.fallbackProject")),1),l("div",$t,n(s.$t("appLayout.scope.projectPanel")),1)])])):(u(),r("div",wt,[e(a(A),{class:"banner-icon"}),l("span",bt,n(s.$t("appLayout.scope.global")),1)]))],64)),e(Ye,{selectedKeys:q.value,"onUpdate:selectedKeys":c[0]||(c[0]=m=>q.value=m),openKeys:V.value,"onUpdate:openKeys":c[1]||(c[1]=m=>V.value=m),theme:Re.value,mode:"inline","inline-collapsed":d.value,class:"side-menu",onClick:ze},{default:t(()=>[d.value?(u(),r(w,{key:1},[e(o,{key:"dashboard"},{icon:t(()=>[e(a(K))]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(a(J))]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(a(P))]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(a(Q))]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(a(E))]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(a(Z))]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(a(X))]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(a(x))]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"skills"},{icon:t(()=>[e(a(ee))]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(a(te))]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(a(ae))]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(a(O))]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(a(oe))]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(a(se))]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(a(N))]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"notes"},{icon:t(()=>[e(a(ne))]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(a(ie))]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(a(le))]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(a(ce))]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(a(ue))]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(a(pe))]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(a(re))]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(a(de))]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(a(P))]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"security"},{icon:t(()=>[e(a(B))]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(a(R))]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(a($))]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(a(ye))]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(a($))]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(a(me))]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(a(ke))]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(a(_e))]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(a(U))]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(a(N))]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(a(fe))]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(a(ge))]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(a($))]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(a(D))]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(a(he))]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(a(Le))]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"wallet"},{icon:t(()=>[e(a(ve))]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(a($e))]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(a(we))]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(a(K))]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(a(be))]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(a(Oe))]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"community"},{icon:t(()=>[e(a(Se))]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(a(Ce))]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(a(je))]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(a(Te))]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"rssfeed"},{icon:t(()=>[e(a(Ae))]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(a(R))]),_:1}),a(M).isEmbedded?(u(),r(w,{key:0},[e(f,{class:"divider-sm"}),e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(a(B))]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(a(U))]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(a(D))]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(a(E))]),_:1})],64)):v("",!0)],64)):(u(),r(w,{key:0},[e(y,{key:"g-overview"},{title:t(()=>[l("span",St,n(s.$t("appLayout.groups.overview")),1)]),default:t(()=>[e(o,{key:"dashboard"},{icon:t(()=>[e(a(K))]),default:t(()=>[i(n(s.$t("appLayout.items.dashboard")),1)]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(a(J))]),default:t(()=>[i(n(s.$t("appLayout.items.chat")),1)]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(a(P))]),default:t(()=>[i(n(s.$t("appLayout.items.quickAsk")),1)]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(a(Q))]),default:t(()=>[i(n(s.$t("appLayout.items.cowork")),1)]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(a(E))]),default:t(()=>[i(n(s.$t("appLayout.items.services")),1)]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(a(Z))]),default:t(()=>[i(n(s.$t("appLayout.items.aiops")),1)]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(a(X))]),default:t(()=>[i(n(s.$t("appLayout.items.tokens")),1)]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(a(x))]),default:t(()=>[i(n(s.$t("appLayout.items.logs")),1)]),_:1})]),_:1}),e(y,{key:"g-config"},{title:t(()=>[l("span",Ct,n(s.$t("appLayout.groups.config")),1)]),default:t(()=>[e(o,{key:"skills"},{icon:t(()=>[e(a(ee))]),default:t(()=>[i(n(s.$t("appLayout.items.skills")),1)]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(a(te))]),default:t(()=>[i(n(s.$t("appLayout.items.providers")),1)]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(a(ae))]),default:t(()=>[i(n(s.$t("appLayout.items.mcp")),1)]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(a(O))]),default:t(()=>[i(n(s.$t("appLayout.items.projectSettings")),1)]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(a(oe))]),default:t(()=>[i(n(s.$t("appLayout.items.speechSettings")),1)]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(a(se))]),default:t(()=>[i(n(s.$t("appLayout.items.nlprog")),1)]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(a(N))]),default:t(()=>[i(n(s.$t("appLayout.items.codegen")),1)]),_:1})]),_:1}),e(y,{key:"g-data"},{title:t(()=>[l("span",jt,n(s.$t("appLayout.groups.data")),1)]),default:t(()=>[e(o,{key:"notes"},{icon:t(()=>[e(a(ne))]),default:t(()=>[i(n(s.$t("appLayout.items.notes")),1)]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(a(ie))]),default:t(()=>[i(n(s.$t("appLayout.items.search")),1)]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(a(le))]),default:t(()=>[i(n(s.$t("appLayout.items.memory")),1)]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(a(ce))]),default:t(()=>[i(n(s.$t("appLayout.items.knowledge")),1)]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(a(ue))]),default:t(()=>[i(n(s.$t("appLayout.items.marketplace")),1)]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(a(pe))]),default:t(()=>[i(n(s.$t("appLayout.items.cron")),1)]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(a(re))]),default:t(()=>[i(n(s.$t("appLayout.items.workflow")),1)]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(a(de))]),default:t(()=>[i(n(s.$t("appLayout.items.pipeline")),1)]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(a(P))]),default:t(()=>[i(n(s.$t("appLayout.items.tasks")),1)]),_:1})]),_:1}),e(y,{key:"g-advanced"},{title:t(()=>[l("span",Tt,n(s.$t("appLayout.groups.advanced")),1)]),default:t(()=>[e(o,{key:"security"},{icon:t(()=>[e(a(B))]),default:t(()=>[i(n(s.$t("appLayout.items.security")),1)]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(a(R))]),default:t(()=>[i(n(s.$t("appLayout.items.ukeySign")),1)]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(a($))]),default:t(()=>[i(n(s.$t("appLayout.items.trust")),1)]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(a(ye))]),default:t(()=>[i(n(s.$t("appLayout.items.audit")),1)]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(a($))]),default:t(()=>[i(n(s.$t("appLayout.items.mtc")),1)]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(a(me))]),default:t(()=>[i(n(s.$t("appLayout.items.did")),1)]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(a(ke))]),default:t(()=>[i(n(s.$t("appLayout.items.permissions")),1)]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(a(_e))]),default:t(()=>[i(n(s.$t("appLayout.items.p2p")),1)]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(a(U))]),default:t(()=>[i(n(s.$t("appLayout.items.backup")),1)]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(a(N))]),default:t(()=>[i(n(s.$t("appLayout.items.git")),1)]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(a(fe))]),default:t(()=>[i(n(s.$t("appLayout.items.projects")),1)]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(a(ge))]),default:t(()=>[i(n(s.$t("appLayout.items.crosschain")),1)]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(a($))]),default:t(()=>[i(n(s.$t("appLayout.items.compliance")),1)]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(a(D))]),default:t(()=>[i(n(s.$t("appLayout.items.privacy")),1)]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(a(he))]),default:t(()=>[i(n(s.$t("appLayout.items.inference")),1)]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(a(Le))]),default:t(()=>[i(n(s.$t("appLayout.items.federation")),1)]),_:1})]),_:1}),e(y,{key:"g-enterprise"},{title:t(()=>[l("span",At,n(s.$t("appLayout.groups.enterprise")),1)]),default:t(()=>[e(o,{key:"wallet"},{icon:t(()=>[e(a(ve))]),default:t(()=>[i(n(s.$t("appLayout.items.wallet")),1)]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(a($e))]),default:t(()=>[i(n(s.$t("appLayout.items.organization")),1)]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(a(we))]),default:t(()=>[i(n(s.$t("appLayout.items.tenant")),1)]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(a(K))]),default:t(()=>[i(n(s.$t("appLayout.items.sla")),1)]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(a(be))]),default:t(()=>[i(n(s.$t("appLayout.items.analytics")),1)]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(a(Oe))]),default:t(()=>[i(n(s.$t("appLayout.items.templates")),1)]),_:1})]),_:1}),e(y,{key:"g-social"},{title:t(()=>[l("span",Kt,n(s.$t("appLayout.groups.social")),1)]),default:t(()=>[e(o,{key:"community"},{icon:t(()=>[e(a(Se))]),default:t(()=>[i(n(s.$t("appLayout.items.community")),1)]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(a(Ce))]),default:t(()=>[i(n(s.$t("appLayout.items.governance")),1)]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(a(je))]),default:t(()=>[i(n(s.$t("appLayout.items.reputation")),1)]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(a(Te))]),default:t(()=>[i(n(s.$t("appLayout.items.recommend")),1)]),_:1})]),_:1}),e(y,{key:"g-media"},{title:t(()=>[l("span",Pt,n(s.$t("appLayout.groups.media")),1)]),default:t(()=>[e(o,{key:"video"},{icon:t(()=>[e(a(dt))]),default:t(()=>[i(n(s.$t("appLayout.items.video")),1)]),_:1})]),_:1}),e(y,{key:"g-extension"},{title:t(()=>[l("span",Et,n(s.$t("appLayout.groups.extension")),1)]),default:t(()=>[e(o,{key:"rssfeed"},{icon:t(()=>[e(a(Ae))]),default:t(()=>[i(n(s.$t("appLayout.items.rssfeed")),1)]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(a(R))]),default:t(()=>[i(n(s.$t("appLayout.items.webauthn")),1)]),_:1})]),_:1}),a(M).isEmbedded?(u(),k(y,{key:"g-desktop"},{title:t(()=>[l("span",Nt,n(s.$t("appLayout.groups.desktop")),1)]),default:t(()=>[e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(a(B))]),default:t(()=>[i(n(s.$t("appLayout.items.desktopHardware")),1)]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(a(U))]),default:t(()=>[i(n(s.$t("appLayout.items.desktopBackup")),1)]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(a(D))]),default:t(()=>[i(n(s.$t("appLayout.items.desktopLlmTest")),1)]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(a(E))]),default:t(()=>[i(n(s.$t("appLayout.items.desktopSettings")),1)]),_:1})]),_:1})):v("",!0)],64))]),_:1},8,["selectedKeys","openKeys","theme","inline-collapsed"]),l("div",{class:T(["sidebar-footer",{collapsed:d.value}])},[e(Ge,{status:De.value},null,8,["status"]),d.value?v("",!0):(u(),r("span",Bt,n(Ie.value),1))],2)]),_:1},8,["collapsed"]),e(G,{class:"main-area"},{default:t(()=>[e(Qe,{class:"app-header"},{default:t(()=>[l("div",Rt,[l("div",{class:T(["scope-tag",_.value?"project":"global"])},[(u(),k(ot(_.value?a(O):a(A)))),l("span",null,n(_.value?a(L).projectName||s.$t("appLayout.scope.fallbackProject"):s.$t("appLayout.scope.global")),1),_.value&&a(L).projectRoot?(u(),k(C,{key:0,title:a(L).projectRoot},{default:t(()=>[e(a(yt),{class:"info-icon"})]),_:1},8,["title"])):v("",!0)],2)]),l("div",Ut,[l("div",Dt,[(u(!0),r(w,null,st(a(ut),(m,j)=>(u(),k(C,{key:j,title:m.label},{default:t(()=>[l("button",{class:T(["theme-btn",{active:Be.value===j}]),"data-theme-key":j,onClick:zt=>Me(j)},n(m.icon),11,It)]),_:2},1032,["title"]))),128))]),e(C,{title:s.$t("language.label")},{default:t(()=>[l("button",{class:"lang-switch-btn","data-locale":a(Y),onClick:Fe},[e(a(A),{class:"lang-switch-icon"}),l("span",Vt,n(s.$t("language.switch")),1)],8,Mt)]),_:1},8,["title"]),l("span",Ft,n(a(Ne)),1),a(M).isEmbedded?(u(),k(C,{key:0,title:s.$t("appLayout.shellSwitch")},{default:t(()=>[l("button",{type:"button",class:"shell-switch-btn",onClick:qe},[e(a(mt))])]),_:1},8,["title"])):v("",!0),e(Je,{color:S.value==="connected"?"green":S.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[i(n(S.value==="connected"?s.$t("appLayout.wsStatus.connected"):S.value==="connecting"?s.$t("appLayout.wsStatus.connecting"):s.$t("appLayout.wsStatus.disconnected")),1)]),_:1},8,["color"])])]),_:1}),e(Xe,{class:"page-content"},{default:t(()=>[e(Ze)]),_:1})]),_:1})]),_:1})}}},fa=nt(Wt,[["__scopeId","data-v-885d89a6"]]);export{fa as default};
@@ -1 +0,0 @@
1
- import{_ as Ee,b as $e,u as Je,d as ge}from"./index-B2f4ltyM.js";import{u as Ke}from"./useFs-BW1piLQM.js";import{R as Ue,ap as Ve,al as xe,J as ie,ae as D,aB as K,az as Ge}from"./icons-zXb7lDZs.js";import{o as He,M as i,R as f,P as n,u as t,c as o,N as s,r as c,K as y,L as u,O as b,Q as g,S as r,F as Qe,f as re}from"./vendor-B6ToihkA.js";import"./useShellMode-CgR0wCYM.js";const We={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},qe={class:"page-title"},Xe={class:"page-sub"},Ye={key:0,style:{"text-align":"center",padding:"30px"}},Ze={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},ea={key:1},aa={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},ta={key:3,style:{"margin-top":"16px"}},oa={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},sa={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},la={key:4,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},na={style:{color:"var(--text-secondary)"}},ca={key:0,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px","margin-top":"8px"}},ua={style:{"font-family":"monospace"}},ia={key:0},ra={key:1,style:{"margin-top":"12px"}},pa={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},da={key:0,style:{"text-align":"center",padding:"30px"}},va={key:0,style:{"margin-bottom":"16px"}},fa={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},ya={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},ba={key:0,style:{"font-family":"monospace","font-size":"12px"}},ka={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ma={key:0,style:{"text-align":"center",padding:"30px"}},_a={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ga={key:0,style:{"text-align":"center",padding:"30px"}},xa={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},ha={key:1},wa={key:2},za={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},Ca={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},Sa={style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},Aa={key:0,style:{"margin-top":"12px"}},Ba={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},Oa={__name:"Backup",setup(La){const{t:e}=$e(),k=Je(),he=Ke(),U=c(!1),pe=c("backup"),V=c(!1),G=c(!1),H=c(!1),M=c(""),m=c([]),w=c(""),we=re(()=>[{title:e("backup.backupColumns.id"),key:"id"},{title:e("backup.backupColumns.size"),key:"size",width:120},{title:e("backup.backupColumns.createdAt"),key:"createdAt"},{title:e("backup.backupColumns.action"),key:"action",width:100}]);async function de(){G.value=!0,M.value="";try{const{output:a}=await k.execute("backup list --json",15e3),l=I(a);Array.isArray(l)?m.value=l:l&&Array.isArray(l.backups)?m.value=l.backups:(m.value=[],a&&a.trim()&&(w.value=a))}catch(a){M.value=e("backup.messages.loadBackupsFailed",{err:a.message})}finally{G.value=!1}}async function ze(){H.value=!0,w.value="",M.value="";try{const{output:a}=await k.execute("backup create --json",3e4);w.value=a||e("backup.backup.createDefaultMessage"),await de()}catch(a){w.value=e("backup.messages.createBackupFailed",{err:a.message})}finally{H.value=!1}}const Q=c(!1),W=c(!1),z=c(null),C=c("");function Ce(a){z.value=a,C.value="",Q.value=!0}async function Se(){if(z.value){W.value=!0,C.value="";try{const{output:a}=await k.execute(`backup restore ${z.value.id}`,6e4);C.value=a||e("backup.backup.restoreDefaultMessage")}catch(a){C.value=e("backup.messages.restoreFailed",{err:a.message})}finally{W.value=!1}}}const q=c(!1),N=c(""),F=c(!1),R=c(""),j=c(0),X=c(""),x=c(""),Y=c(!1),Z=c(!1),S=c([]),Ae=re(()=>[{title:e("backup.conflictColumns.path"),key:"path"},{title:e("backup.conflictColumns.type"),key:"type",width:120}]);async function ee(){q.value=!0,N.value="";try{const{output:a}=await k.execute("sync status --json",15e3),l=I(a);l?(F.value=l.online||l.synced||l.status==="online"||!1,R.value=F.value?e("backup.sync.synced"):e("backup.sync.notSynced"),j.value=l.pending??l.pendingChanges??0,X.value=l.lastSync||l.lastSyncTime||""):Be(a)}catch(a){N.value=e("backup.messages.loadSyncFailed",{err:a.message})}finally{q.value=!1}}function Be(a){if(!a){R.value=e("backup.sync.unknown");return}F.value=/synced|online|up.to.date/i.test(a),R.value=F.value?e("backup.sync.synced"):e("backup.sync.notSynced");const l=a.match(/pending[:\s]+(\d+)/i);j.value=l?parseInt(l[1]):0;const d=a.match(/last[:\s]+(.+)/i);d&&(X.value=d[1].trim())}async function Oe(){Y.value=!0,x.value="";try{const{output:a}=await k.execute("sync push",3e4);x.value=a||e("backup.sync.pushDefaultMessage"),await ee()}catch(a){x.value=e("backup.messages.pushFailed",{err:a.message})}finally{Y.value=!1}}async function Le(){Z.value=!0,x.value="";try{const{output:a}=await k.execute("sync pull",3e4);x.value=a||e("backup.sync.pullDefaultMessage"),await ee()}catch(a){x.value=e("backup.messages.pullFailed",{err:a.message})}finally{Z.value=!1}}async function Me(){try{const{output:a}=await k.execute("sync conflicts --json",15e3),l=I(a);Array.isArray(l)?S.value=l:l&&Array.isArray(l.conflicts)?S.value=l.conflicts:S.value=[]}catch{S.value=[]}}const ae=c(!1),E=c(""),A=c(!1),te=c(""),oe=c(!1),P=c(""),B=c([]),Fe=re(()=>[{title:e("backup.pinColumns.cid"),key:"cid"},{title:e("backup.pinColumns.name"),key:"name"},{title:e("backup.pinColumns.size"),key:"size",width:120},{title:e("backup.pinColumns.pinnedAt"),key:"pinnedAt"},{title:e("backup.pinColumns.action"),key:"action",width:120}]);async function Pe(){ae.value=!0,E.value="";try{const{output:a}=await k.execute("ipfs status --json",15e3),l=I(a);if(l)A.value=l.online||l.status==="online"||l.connected||!1,te.value=l.peerId||l.id||"";else{A.value=a?/online|connected|running/i.test(a):!1;const d=a?a.match(/(?:peer\s*id|id)[:\s]+(\S+)/i):null;te.value=d?d[1]:""}}catch(a){E.value=e("backup.messages.loadIpfsFailed",{err:a.message})}finally{ae.value=!1}}async function se(){oe.value=!0,P.value="";try{const{output:a}=await k.execute("ipfs pins --json",15e3),l=I(a);Array.isArray(l)?B.value=l:l&&Array.isArray(l.pins)?B.value=l.pins:B.value=[]}catch(a){P.value=e("backup.messages.loadPinsFailed",{err:a.message})}finally{oe.value=!1}}const le=c(!1),ne=c(!1),$=c(""),T=c("");async function ve(){if($.value.trim()){ne.value=!0,T.value="";try{const{output:a}=await k.execute(`ipfs pin "${$.value.trim()}"`,3e4);T.value=a||e("backup.ipfs.pinDefaultSuccess"),await se()}catch(a){T.value=e("backup.messages.pinFailed",{err:a.message})}finally{ne.value=!1}}}async function Te(a){try{await k.execute(`ipfs unpin ${a.cid}`,15e3),await se()}catch(l){P.value=e("backup.messages.unpinFailed",{err:l.message})}}function I(a){if(!a||!a.trim())return null;try{return JSON.parse(a.trim())}catch{const d=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(d)try{return JSON.parse(d[0])}catch{}return null}}async function Ie(){if(m.value.length){U.value=!0;try{const a=await he.saveJson({schema:1,exportedAt:new Date().toISOString(),count:m.value.length,backups:m.value},{defaultPath:`backup-list-${new Date().toISOString().slice(0,10)}.json`});if(a.canceled)return;ge.success(a.path?e("backup.messages.exportOk",{count:m.value.length,path:a.path}):e("backup.messages.exportOkDefault"))}catch(a){ge.error(e("backup.messages.exportFailed",{err:a.message||a}))}finally{U.value=!1}}}function fe(a){if(a==null||isNaN(a))return"-";const l=Number(a);if(l===0)return"0 B";const d=["B","KB","MB","GB","TB"],h=Math.floor(Math.log(l)/Math.log(1024));return(l/Math.pow(1024,h)).toFixed(h>0?1:0)+" "+d[h]}async function ye(){V.value=!0;try{await Promise.all([de(),ee(),Me(),Pe(),se()])}finally{V.value=!1}}return He(ye),(a,l)=>{const d=y("a-button"),h=y("a-space"),J=y("a-spin"),be=y("a-empty"),ce=y("a-table"),_=y("a-card"),ke=y("a-modal"),ue=y("a-tab-pane"),O=y("a-statistic"),L=y("a-col"),me=y("a-row"),_e=y("a-tag"),De=y("a-popconfirm"),Ne=y("a-input"),Re=y("a-tabs");return u(),i("div",null,[f("div",We,[f("div",null,[f("h2",qe,n(t(e)("backup.title")),1),f("p",Xe,n(t(e)("backup.subtitle")),1)]),o(d,{type:"primary",ghost:"",loading:V.value,onClick:ye},{icon:s(()=>[o(t(Ue))]),default:s(()=>[b(" "+n(t(e)("backup.refresh")),1)]),_:1},8,["loading"])]),o(Re,{activeKey:pe.value,"onUpdate:activeKey":l[4]||(l[4]=p=>pe.value=p),type:"card"},{default:s(()=>[o(ue,{key:"backup"},{tab:s(()=>[o(t(ie)),b(" "+n(t(e)("backup.tabs.backup")),1)]),default:s(()=>[o(_,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{title:s(()=>[o(h,null,{default:s(()=>[o(t(ie)),f("span",null,n(t(e)("backup.backup.cardTitle")),1)]),_:1})]),extra:s(()=>[o(h,null,{default:s(()=>[o(d,{disabled:!m.value.length,loading:U.value,onClick:Ie},{icon:s(()=>[o(t(Ve))]),default:s(()=>[b(" "+n(t(e)("backup.backup.exportButton")),1)]),_:1},8,["disabled","loading"]),o(d,{type:"primary",loading:H.value,onClick:ze},{icon:s(()=>[o(t(xe))]),default:s(()=>[b(" "+n(t(e)("backup.backup.createButton")),1)]),_:1},8,["loading"])]),_:1})]),default:s(()=>[G.value?(u(),i("div",Ye,[o(J)])):m.value.length===0&&!w.value?(u(),g(be,{key:1,description:t(e)("backup.backup.emptyText")},null,8,["description"])):r("",!0),m.value.length>0?(u(),g(ce,{key:2,columns:we.value,"data-source":m.value,pagination:!1,size:"small","row-key":"id"},{bodyCell:s(({column:p,record:v})=>[p.key==="id"?(u(),i("span",Ze,n(v.id.length>20?v.id.slice(0,20)+"...":v.id),1)):r("",!0),p.key==="size"?(u(),i("span",ea,n(fe(v.size)),1)):r("",!0),p.key==="createdAt"?(u(),i("span",aa,n(v.createdAt||"-"),1)):r("",!0),p.key==="action"?(u(),g(d,{key:3,size:"small",type:"link",onClick:je=>Ce(v)},{default:s(()=>[b(n(t(e)("backup.backupColumns.restore")),1)]),_:1},8,["onClick"])):r("",!0)]),_:1},8,["columns","data-source"])):r("",!0),w.value?(u(),i("div",ta,[f("div",oa,n(t(e)("backup.backup.lastResultLabel")),1),f("pre",sa,n(w.value),1)])):r("",!0),M.value?(u(),i("div",la,n(M.value),1)):r("",!0)]),_:1}),o(ke,{open:Q.value,"onUpdate:open":l[0]||(l[0]=p=>Q.value=p),title:t(e)("backup.backup.restoreTitle"),"ok-text":t(e)("backup.backup.restoreOk"),"cancel-text":t(e)("common.cancel"),"confirm-loading":W.value,onOk:Se,"ok-type":"danger"},{default:s(()=>[f("p",na,n(t(e)("backup.backup.restoreIntro")),1),z.value?(u(),i("div",ca,[f("div",null,[f("strong",null,n(t(e)("backup.backup.backupIdPrefix")),1),l[5]||(l[5]=b()),f("span",ua,n(z.value.id),1)]),z.value.createdAt?(u(),i("div",ia,[f("strong",null,n(t(e)("backup.backup.createdAtPrefix")),1),b(" "+n(z.value.createdAt),1)])):r("",!0)])):r("",!0),C.value?(u(),i("div",ra,[f("pre",pa,n(C.value),1)])):r("",!0)]),_:1},8,["open","title","ok-text","cancel-text","confirm-loading"])]),_:1}),o(ue,{key:"sync"},{tab:s(()=>[o(t(D)),b(" "+n(t(e)("backup.tabs.sync")),1)]),default:s(()=>[q.value?(u(),i("div",da,[o(J)])):(u(),i(Qe,{key:1},[o(me,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[o(L,{xs:24,sm:8},{default:s(()=>[o(_,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(O,{title:t(e)("backup.sync.statusLabel"),value:R.value,"value-style":{color:F.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:s(()=>[o(t(D))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(L,{xs:24,sm:8},{default:s(()=>[o(_,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(O,{title:t(e)("backup.sync.pendingLabel"),value:j.value,"value-style":{color:j.value>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:s(()=>[o(t(D))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(L,{xs:24,sm:8},{default:s(()=>[o(_,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(O,{title:t(e)("backup.sync.lastSyncLabel"),value:X.value||t(e)("backup.sync.noLastSync"),"value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:s(()=>[o(t(D))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),o(h,{style:{"margin-bottom":"16px"}},{default:s(()=>[o(d,{loading:Y.value,onClick:Oe,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[o(t(ie))]),default:s(()=>[b(" "+n(t(e)("backup.sync.pushButton")),1)]),_:1},8,["loading"]),o(d,{loading:Z.value,onClick:Le,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[o(t(D))]),default:s(()=>[b(" "+n(t(e)("backup.sync.pullButton")),1)]),_:1},8,["loading"])]),_:1}),x.value?(u(),i("div",va,[f("div",fa,n(t(e)("backup.sync.outputLabel")),1),f("pre",ya,n(x.value),1)])):r("",!0),S.value.length>0?(u(),g(_,{key:1,title:t(e)("backup.sync.conflictsTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(ce,{columns:Ae.value,"data-source":S.value,pagination:!1,size:"small","row-key":"path"},{bodyCell:s(({column:p,record:v})=>[p.key==="path"?(u(),i("span",ba,n(v.path),1)):r("",!0),p.key==="type"?(u(),g(_e,{key:1,color:"red"},{default:s(()=>[b(n(v.type||t(e)("backup.sync.conflictDefault")),1)]),_:2},1024)):r("",!0)]),_:1},8,["columns","data-source"])]),_:1},8,["title"])):r("",!0)],64)),N.value?(u(),i("div",ka,n(N.value),1)):r("",!0)]),_:1}),o(ue,{key:"ipfs"},{tab:s(()=>[o(t(K)),b(" "+n(t(e)("backup.tabs.ipfs")),1)]),default:s(()=>[o(_,{title:t(e)("backup.ipfs.statusCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:s(()=>[o(_e,{color:A.value?"green":"default"},{default:s(()=>[b(n(A.value?t(e)("backup.ipfs.online"):t(e)("backup.ipfs.offline")),1)]),_:1},8,["color"])]),default:s(()=>[ae.value?(u(),i("div",ma,[o(J)])):(u(),g(me,{key:1,gutter:[16,16]},{default:s(()=>[o(L,{xs:24,sm:8},{default:s(()=>[o(_,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(O,{title:t(e)("backup.ipfs.nodeStatusLabel"),value:A.value?t(e)("backup.ipfs.connected"):t(e)("backup.ipfs.disconnected"),"value-style":{color:A.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:s(()=>[o(t(K))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(L,{xs:24,sm:8},{default:s(()=>[o(_,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(O,{title:t(e)("backup.ipfs.pinnedLabel"),value:B.value.length,"value-style":{fontSize:"16px"}},{prefix:s(()=>[o(t(K))]),_:1},8,["title","value"])]),_:1})]),_:1}),o(L,{xs:24,sm:8},{default:s(()=>[o(_,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(O,{title:t(e)("backup.ipfs.peerIdLabel"),value:te.value||"-","value-style":{color:"var(--text-muted)",fontSize:"12px",fontFamily:"monospace"}},{prefix:s(()=>[o(t(K))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1})),E.value?(u(),i("div",_a,n(E.value),1)):r("",!0)]),_:1},8,["title"]),o(_,{title:t(e)("backup.ipfs.pinListTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:s(()=>[o(d,{size:"small",onClick:l[1]||(l[1]=p=>le.value=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[o(t(xe))]),default:s(()=>[b(" "+n(t(e)("backup.ipfs.pinFileButton")),1)]),_:1})]),default:s(()=>[oe.value?(u(),i("div",ga,[o(J)])):B.value.length===0?(u(),g(be,{key:1,description:t(e)("backup.ipfs.pinEmptyText")},null,8,["description"])):(u(),g(ce,{key:2,columns:Fe.value,"data-source":B.value,pagination:{pageSize:10},size:"small","row-key":"cid"},{bodyCell:s(({column:p,record:v})=>[p.key==="cid"?(u(),i("span",xa,n(v.cid.length>24?v.cid.slice(0,24)+"...":v.cid),1)):r("",!0),p.key==="name"?(u(),i("span",ha,n(v.name||"-"),1)):r("",!0),p.key==="size"?(u(),i("span",wa,n(fe(v.size)),1)):r("",!0),p.key==="pinnedAt"?(u(),i("span",za,n(v.pinnedAt||"-"),1)):r("",!0),p.key==="action"?(u(),g(De,{key:4,title:t(e)("backup.ipfs.unpinConfirm"),"ok-text":t(e)("backup.ipfs.unpinOk"),"cancel-text":t(e)("common.cancel"),onConfirm:je=>Te(v)},{default:s(()=>[o(d,{size:"small",type:"link",danger:""},{default:s(()=>[o(t(Ge)),b(" "+n(t(e)("backup.ipfs.unpinAction")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):r("",!0)]),_:1},8,["columns","data-source"])),P.value?(u(),i("div",Ca,n(P.value),1)):r("",!0)]),_:1},8,["title"]),o(ke,{open:le.value,"onUpdate:open":l[3]||(l[3]=p=>le.value=p),title:t(e)("backup.ipfs.pinModalTitle"),"confirm-loading":ne.value,onOk:ve,"ok-text":t(e)("backup.ipfs.pinModalOk"),"cancel-text":t(e)("common.cancel")},{default:s(()=>[f("div",Sa,n(t(e)("backup.ipfs.pinModalIntro")),1),o(Ne,{value:$.value,"onUpdate:value":l[2]||(l[2]=p=>$.value=p),placeholder:t(e)("backup.ipfs.pinModalPlaceholder"),onPressEnter:ve},null,8,["value","placeholder"]),T.value?(u(),i("div",Aa,[f("pre",Ba,n(T.value),1)])):r("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])]),_:1})]),_:1},8,["activeKey"])])}}},Da=Ee(Oa,[["__scopeId","data-v-80f8ca46"]]);export{Da as default};
@@ -1 +0,0 @@
1
- import{P as s,e as f}from"./index-B2f4ltyM.js";import{d as w,c as O,s as h,w as k,f as b,r as S}from"./vendor-B6ToihkA.js";var z=function(n,u){var o={};for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&u.indexOf(t)<0&&(o[t]=n[t]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(n);r<t.length;r++)u.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(n,t[r])&&(o[t[r]]=n[t[r]]);return o};const K=w({compatConfig:{MODE:3},props:{disabled:s.looseBool,type:s.string,value:s.any,tag:{type:String,default:"input"},size:s.string,onChange:Function,onInput:Function,onBlur:Function,onFocus:Function,onKeydown:Function,onCompositionstart:Function,onCompositionend:Function,onKeyup:Function,onPaste:Function,onMousedown:Function},emits:["change","input","blur","keydown","focus","compositionstart","compositionend","keyup","paste","mousedown"],setup(n,u){let{expose:o}=u;const t=h(null);return o({focus:()=>{t.value&&t.value.focus()},blur:()=>{t.value&&t.value.blur()},input:t,setSelectionRange:(l,c,d)=>{var v;(v=t.value)===null||v===void 0||v.setSelectionRange(l,c,d)},select:()=>{var l;(l=t.value)===null||l===void 0||l.select()},getSelectionStart:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.selectionStart},getSelectionEnd:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.selectionEnd},getScrollTop:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.scrollTop}}),()=>{const{tag:l,value:c}=n,d=z(n,["tag","value"]);return O(l,f(f({},d),{},{ref:t,value:c}),null)}}});function $(n){const u=n.getBoundingClientRect(),o=document.documentElement;return{left:u.left+(window.scrollX||o.scrollLeft)-(o.clientLeft||document.body.clientLeft||0),top:u.top+(window.scrollY||o.scrollTop)-(o.clientTop||document.body.clientTop||0)}}function M(n){return Object.keys(n).reduce((u,o)=>{const t=n[o];return typeof t>"u"||t===null||(u+=`${o}: ${n[o]};`),u},"")}var L=function(n,u){var o={};for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&u.indexOf(t)<0&&(o[t]=n[t]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(n);r<t.length;r++)u.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(n,t[r])&&(o[t[r]]=n[t[r]]);return o};const A=w({compatConfig:{MODE:3},inheritAttrs:!1,props:{disabled:s.looseBool,type:s.string,value:s.any,lazy:s.bool.def(!0),tag:{type:String,default:"input"},size:s.string,style:s.oneOfType([String,Object]),class:s.string},emits:["change","input","blur","keydown","focus","compositionstart","compositionend","keyup","paste","mousedown"],setup(n,u){let{emit:o,attrs:t,expose:r}=u;const a=h(null),y=S(),i=S(!1);k([()=>n.value,i],()=>{i.value||(y.value=n.value)},{immediate:!0});const l=e=>{o("change",e)},c=e=>{i.value=!0,e.target.composing=!0,o("compositionstart",e)},d=e=>{i.value=!1,e.target.composing=!1,o("compositionend",e);const p=document.createEvent("HTMLEvents");p.initEvent("input",!0,!0),e.target.dispatchEvent(p),l(e)},v=e=>{if(i.value&&n.lazy){y.value=e.target.value;return}o("input",e)},_=e=>{o("blur",e)},C=e=>{o("focus",e)},E=()=>{a.value&&a.value.focus()},F=()=>{a.value&&a.value.blur()},P=e=>{o("keydown",e)},j=e=>{o("keyup",e)},T=(e,p,g)=>{var m;(m=a.value)===null||m===void 0||m.setSelectionRange(e,p,g)},B=()=>{var e;(e=a.value)===null||e===void 0||e.select()};r({focus:E,blur:F,input:b(()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.input}),setSelectionRange:T,select:B,getSelectionStart:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getSelectionStart()},getSelectionEnd:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getSelectionEnd()},getScrollTop:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getScrollTop()}});const R=e=>{o("mousedown",e)},x=e=>{o("paste",e)},I=b(()=>n.style&&typeof n.style!="string"?M(n.style):n.style);return()=>{const{style:e,lazy:p}=n,g=L(n,["style","lazy"]);return O(K,f(f(f({},g),t),{},{style:I.value,onInput:v,onChange:l,onBlur:_,onFocus:C,ref:a,value:y.value,onCompositionstart:c,onCompositionend:d,onKeyup:j,onKeydown:P,onPaste:x,onMousedown:R}),null)}}});export{A as B,$ as g};