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.
- package/bin/chainlesschain.js +0 -0
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-FON6GZIt.js → AIOps-K85peDCg.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-Byb_P_P9.js → ActionButton-DoRABhmk.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CDG1OwOr.js → Analytics-B7p7X_lS.js} +2 -2
- package/src/assets/web-panel/assets/AppLayout-BQb9-BUE.js +1 -0
- package/src/assets/web-panel/assets/AppLayout-P7jhSfLy.css +1 -0
- package/src/assets/web-panel/assets/{Audit-p4krng5l.js → Audit-CHj8w38X.js} +1 -1
- package/src/assets/web-panel/assets/Backup-BsgPajcJ.js +1 -0
- package/src/assets/web-panel/assets/BaseInput-kGeksnCj.js +1 -0
- package/src/assets/web-panel/assets/Chat-2e3EGiwk.js +7 -0
- package/src/assets/web-panel/assets/Chat-D4oAhi11.css +1 -0
- package/src/assets/web-panel/assets/{Checkbox-CfDbHGdU.js → Checkbox-DirndeMM.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-D1mQ03ap.js → Codegen-UQuEF6rH.js} +1 -1
- package/src/assets/web-panel/assets/{Col-C0wS_dvU.js → Col-myVf7h0M.js} +1 -1
- package/src/assets/web-panel/assets/Community-C3Gt4JNP.js +1 -0
- package/src/assets/web-panel/assets/{Compact-CuVvz3Zf.js → Compact-B4TJcIuz.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-D6bnHyjs.js → Compliance-DKye9lMe.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Dh3yt9pL.js → Cowork-bD9Z8K9J.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DiuKXbnA.js → Cron-BrQZ3zwQ.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BFgMa5sQ.js → Crosschain-C7m4dIrR.js} +1 -1
- package/src/assets/web-panel/assets/{DID-Dx7CFjrq.js → DID-CGniRypj.js} +2 -2
- package/src/assets/web-panel/assets/Dashboard-BqQfrJLe.js +3 -0
- package/src/assets/web-panel/assets/{Dropdown-sMGnnzUo.js → Dropdown-Csici42Z.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CGt7CYhN.js → Federation-D2boc2WU.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DuVk39z3.js → FormItemContext-BpXHcM06.js} +1 -1
- package/src/assets/web-panel/assets/{Git-glb99UzZ.js → Git-C7QHt3Hy.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CQXGee_r.js → Governance-DPBJNo9u.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-Czm-Q3w3.js → Inference-Ca8VokDu.js} +1 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-CrFGz4u2.js +1 -0
- package/src/assets/web-panel/assets/{Logs-ChGXdo0Q.js → Logs-DMhNTvH6.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-DW6P2uIY.js → Marketplace-DB0lVRRk.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-ChOwY-wy.js → McpTools-BmFQp5wQ.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-vIbbUTel.js → Memory-DDooyF2l.js} +2 -2
- package/src/assets/web-panel/assets/Mtc-Ci6BDiRi.js +6 -0
- package/src/assets/web-panel/assets/Mtc-DHwbdUqA.css +1 -0
- package/src/assets/web-panel/assets/MtcAudit-B0x8gahq.css +1 -0
- package/src/assets/web-panel/assets/MtcAudit-J-DgVOwR.js +19 -0
- package/src/assets/web-panel/assets/{NLProgramming-fRrjhjpW.js → NLProgramming-Uv0jicWQ.js} +1 -1
- package/src/assets/web-panel/assets/Notes-BHauapxR.css +1 -0
- package/src/assets/web-panel/assets/Notes-SGtdMwfH.js +7 -0
- package/src/assets/web-panel/assets/NotificationSettings-Cg4yXikq.js +1 -0
- package/src/assets/web-panel/assets/NotificationSettings-Co0e0uEO.css +1 -0
- package/src/assets/web-panel/assets/{Organization-Bebfm6lF.js → Organization-Bij8W2mU.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-D8ZjaRpc.js → Overflow-DNGM4vCD.js} +1 -1
- package/src/assets/web-panel/assets/{OverrideContext-Nubhv68k.js → OverrideContext-DSwW21YS.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BjgamPxI.js → P2P-9DlPC_rr.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-uwoi4HnY.js → Permissions-BVJwnBDW.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-C2aHcq6n.js → Pipeline-lWCcdQ9k.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-lU34k_c5.js → Privacy-BN60IEMG.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectSettings-Dy-Iie9L.js → ProjectSettings-GJoyBlLy.js} +1 -1
- package/src/assets/web-panel/assets/{Projects-B4Vt0iiH.js → Projects-Dvs_UqGv.js} +2 -2
- package/src/assets/web-panel/assets/{Providers-Cu9uRsVk.js → Providers-A5KukRrJ.js} +2 -2
- package/src/assets/web-panel/assets/QuickAsk-D4K2pIHJ.js +1 -0
- package/src/assets/web-panel/assets/{Recommend-DJ9nU8HM.js → Recommend-DQKR520B.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-ThffxFwr.js → Reputation-BVntfhQV.js} +1 -1
- package/src/assets/web-panel/assets/Row-Do4ULXpm.js +1 -0
- package/src/assets/web-panel/assets/{RssFeed-DaxFEUe6.js → RssFeed-FAHzJo-E.js} +3 -3
- package/src/assets/web-panel/assets/{Search-4zVFnx_Y.js → Search-DsOTkKd1.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BEfSoaTM.js → Security-hglxmoVZ.js} +3 -3
- package/src/assets/web-panel/assets/{Services-DTAaoYJC.js → Services-C6Rv4i8z.js} +1 -1
- package/src/assets/web-panel/assets/{Skeleton-CIZErmoY.js → Skeleton-D-dXFspp.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CacIwBCt.js → Skills-D6sVDuOT.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Si0g7a0u.js → Sla-8O-JYjQq.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-H19DqdAG.js → SpeechSettings-DSOYsk6R.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-bsC4-4rU.js → SyncSettings-C5nhT_6b.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-Bxlj8OVW.js → Tasks-NrpJCUFD.js} +1 -1
- package/src/assets/web-panel/assets/Templates-Ca2HO-Ff.js +1 -0
- package/src/assets/web-panel/assets/Tenant-BWXC1pLX.js +1 -0
- package/src/assets/web-panel/assets/{Tokens-B2wJjOdI.js → Tokens-DUtMwWxZ.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DU9-3gN9.js → Trigger-TyynxipZ.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-_yan18qg.js → Trust-b4KDouFb.js} +1 -1
- package/src/assets/web-panel/assets/UkeySign-CJpVhu8c.js +1 -0
- package/src/assets/web-panel/assets/{VideoEditing-CUgere5i.js → VideoEditing-Bpn0V8T2.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DSnzYVqY.js → Wallet-CzBLjCnl.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-De4aHZ87.js → WebAuthn-HnRCEu5Q.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-C-QNGwia.js → WorkflowEditor-CMWDod4n.js} +1 -1
- package/src/assets/web-panel/assets/{_getTag-CWA3v-Ds.js → _getTag-BVc6NQ_K.js} +1 -1
- package/src/assets/web-panel/assets/chat-D7QE42qx.js +1 -0
- package/src/assets/web-panel/assets/{collapseMotion-BIjDVXtT.js → collapseMotion-6-_FbiKl.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CHuBSydj.js → colors-BO5nQJrH.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DtCmGKIm.js → compact-item-By0t_ZDX.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Cetup5Fb.js → createContext-CHZw2WQy.js} +1 -1
- package/src/assets/web-panel/assets/{debounce-Q0BOJsYd.js → debounce-D9xTw4Sx.js} +1 -1
- package/src/assets/web-panel/assets/{echarts-DmBLM6YO.js → echarts-BrEnqXDv.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-Q509tIlQ.js → hasIn-CHScXGSD.js} +1 -1
- package/src/assets/web-panel/assets/icons-B2G69bhT.js +57 -0
- package/src/assets/web-panel/assets/{index-Bjz1Y3Gs.js → index-B-VML4Pz.js} +1 -1
- package/src/assets/web-panel/assets/index-B6FaCH6K.js +55 -0
- package/src/assets/web-panel/assets/{index-DKWvx42k.js → index-BCoEssNV.js} +1 -1
- package/src/assets/web-panel/assets/index-BFMpMM1y.js +21 -0
- package/src/assets/web-panel/assets/index-BIoymtmG.js +1 -0
- package/src/assets/web-panel/assets/{index-C2y5MxfU.js → index-BVL4FbJ3.js} +2 -2
- package/src/assets/web-panel/assets/{index-BmHsGJ8F.js → index-BXXqtwrw.js} +1 -1
- package/src/assets/web-panel/assets/index-BY-BnqWj.js +12 -0
- package/src/assets/web-panel/assets/{index-BvAwpPN9.js → index-Bbf4Smm-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ctdt2gEP.js → index-BdOG1g8i.js} +1 -1
- package/src/assets/web-panel/assets/{index-R5D_-l07.js → index-BgAPyeU5.js} +1 -1
- package/src/assets/web-panel/assets/{index-B2f4ltyM.js → index-Bn_0bupT.js} +19 -15
- package/src/assets/web-panel/assets/index-BnaKc6VJ.js +1 -0
- package/src/assets/web-panel/assets/index-BqMhh2pY.js +1 -0
- package/src/assets/web-panel/assets/{index-B5d7Dkyp.js → index-BuzilAPw.js} +2 -2
- package/src/assets/web-panel/assets/{index-Dq6E-pj8.js → index-By3TOq5w.js} +1 -1
- package/src/assets/web-panel/assets/index-C1ssAFdz.js +1 -0
- package/src/assets/web-panel/assets/{index-CeXoNBLu.js → index-CAPiTJT4.js} +2 -2
- package/src/assets/web-panel/assets/{index-nfLO3XrF.js → index-CCOGrBpN.js} +1 -1
- package/src/assets/web-panel/assets/index-COVlQxSz.js +7 -0
- package/src/assets/web-panel/assets/{index-DVQSXYwb.js → index-CYCwDDoS.js} +1 -1
- package/src/assets/web-panel/assets/{index-C8agLSzC.js → index-C_EIwaP7.js} +3 -3
- package/src/assets/web-panel/assets/{index-7kdZ5ox5.js → index-CfZqQ0JR.js} +3 -3
- package/src/assets/web-panel/assets/{index-C7baQwUM.js → index-CpHzrw8g.js} +1 -1
- package/src/assets/web-panel/assets/index-CszhN_r3.js +1 -0
- package/src/assets/web-panel/assets/{index-CRZ8WjUK.js → index-Czk89HQF.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaMTgJkE.js → index-D3WrGn-J.js} +2 -2
- package/src/assets/web-panel/assets/index-DS0o68gc.js +3 -0
- package/src/assets/web-panel/assets/{index-SR2lFA_W.js → index-DZ4t_1f-.js} +2 -2
- package/src/assets/web-panel/assets/{index-hSpRlh93.js → index-D_QlAaj5.js} +1 -1
- package/src/assets/web-panel/assets/index-DgWJBqLh.js +13 -0
- package/src/assets/web-panel/assets/{index-HqJ94PSG.js → index-DiHryOr_.js} +2 -2
- package/src/assets/web-panel/assets/index-DqPwMq7i.js +1 -0
- package/src/assets/web-panel/assets/{index-BTwIwesN.js → index-Qm6Kn3iq.js} +1 -1
- package/src/assets/web-panel/assets/index-U1O0AXXH.js +1 -0
- package/src/assets/web-panel/assets/index-jRQNL6Yj.js +12 -0
- package/src/assets/web-panel/assets/index-sgVQrC2c.js +1 -0
- package/src/assets/web-panel/assets/{index-C61WQXE3.js → index-yLdzB8i-.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-D7iOaKOY.js → initDefaultProps-CMFUJGsa.js} +1 -1
- package/src/assets/web-panel/assets/{isPlainObject-DSTnI585.js → isPlainObject-_gz-soRW.js} +1 -1
- package/src/assets/web-panel/assets/isSymbol-DAy2hlR5.js +1 -0
- package/src/assets/web-panel/assets/{motion-CvCFk7sy.js → motion-CTtMugIF.js} +2 -2
- package/src/assets/web-panel/assets/{move-BVj5YZrV.js → move-DHjaLqhq.js} +1 -1
- package/src/assets/web-panel/assets/mtc-parser-Cc3pB9Xm.js +1 -0
- package/src/assets/web-panel/assets/{omit-N_JDguMt.js → omit-COm0v71g.js} +1 -1
- package/src/assets/web-panel/assets/operationUnit-vCu2co3e.js +1 -0
- package/src/assets/web-panel/assets/{pickAttrs-BWcuLN5j.js → pickAttrs-C3Ftf-sl.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow--1l0FzZx.js → placementArrow-IJhTwCmF.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CGX6EYRt.js → responsiveObserve-Cmu2mrKT.js} +1 -1
- package/src/assets/web-panel/assets/{slide-B3hJzlWm.js → slide-CnWCDeu_.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BJuExZuw.js → statusUtils-CSOJeZ-L.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-pshnIK0r.js → styleChecker-94VBD7Xs.js} +1 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-CBjbWuc9.js +1 -0
- package/src/assets/web-panel/assets/{useFs-BW1piLQM.js → useFs-DfXp51Mk.js} +1 -1
- package/src/assets/web-panel/assets/{useMergedState-TP9VIF2K.js → useMergedState-n0f81Aew.js} +1 -1
- package/src/assets/web-panel/assets/{useRefs-BhIz_lC3.js → useRefs-CTh0C9xI.js} +1 -1
- package/src/assets/web-panel/assets/{useState-CpKsyozn.js → useState-4T1Ntfpx.js} +1 -1
- package/src/assets/web-panel/assets/{vendor-B6ToihkA.js → vendor-Ci2pTZ_t.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-D98L6HI1.js → vnode-CGY3YRLi.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DnmMtXgZ.js → zoom-CZllDiMO.js} +1 -1
- package/src/assets/web-panel/index.html +3 -3
- package/src/commands/mtc.js +2 -0
- package/src/gateways/ws/chat-intent-protocol.js +192 -0
- package/src/gateways/ws/message-dispatcher.js +6 -0
- package/src/gateways/ws/ws-server.js +20 -0
- package/src/lib/chat-intent-service.js +530 -0
- package/src/assets/web-panel/assets/AppLayout-CtGprHSx.css +0 -1
- package/src/assets/web-panel/assets/AppLayout-lM1Y2Wgo.js +0 -1
- package/src/assets/web-panel/assets/Backup-G6AQe6k8.js +0 -1
- package/src/assets/web-panel/assets/BaseInput-tUASXi57.js +0 -1
- package/src/assets/web-panel/assets/Chat-B46MHHAs.js +0 -2
- package/src/assets/web-panel/assets/Chat-ByiYUboW.css +0 -1
- package/src/assets/web-panel/assets/Community-CB4KQIpB.js +0 -1
- package/src/assets/web-panel/assets/Dashboard-D3QHFHex.js +0 -3
- package/src/assets/web-panel/assets/KnowledgeGraph-DFrr-B78.js +0 -1
- package/src/assets/web-panel/assets/Mtc-60jSuMAz.js +0 -6
- package/src/assets/web-panel/assets/Mtc-Cc8OJxe_.css +0 -1
- package/src/assets/web-panel/assets/Notes-C0zhC6_B.js +0 -7
- package/src/assets/web-panel/assets/Notes-DKkPfXlY.css +0 -1
- package/src/assets/web-panel/assets/QuickAsk-BE29MB0d.js +0 -1
- package/src/assets/web-panel/assets/Row-CqBtO8lC.js +0 -1
- package/src/assets/web-panel/assets/Templates-B9YsJQcb.js +0 -1
- package/src/assets/web-panel/assets/Tenant-D4YncKb7.js +0 -1
- package/src/assets/web-panel/assets/UkeySign-CZ7Xrq96.js +0 -1
- package/src/assets/web-panel/assets/chat-DFt6UJUS.js +0 -1
- package/src/assets/web-panel/assets/icons-zXb7lDZs.js +0 -57
- package/src/assets/web-panel/assets/index-0KFwdHZg.js +0 -1
- package/src/assets/web-panel/assets/index-BDK2Fkgd.js +0 -13
- package/src/assets/web-panel/assets/index-BJFH7IlV.js +0 -21
- package/src/assets/web-panel/assets/index-BlPG_vWg.js +0 -55
- package/src/assets/web-panel/assets/index-CJjwnpac.js +0 -1
- package/src/assets/web-panel/assets/index-CX7WO0g5.js +0 -12
- package/src/assets/web-panel/assets/index-CbQ3AZcJ.js +0 -3
- package/src/assets/web-panel/assets/index-Cxk-8scO.js +0 -1
- package/src/assets/web-panel/assets/index-D0oJF6nX.js +0 -7
- package/src/assets/web-panel/assets/index-D7Smgwky.js +0 -1
- package/src/assets/web-panel/assets/index-DGAGIqDR.js +0 -1
- package/src/assets/web-panel/assets/index-Dd68wDHG.js +0 -12
- package/src/assets/web-panel/assets/index-Dem-mhfD.js +0 -1
- package/src/assets/web-panel/assets/index-DuQfQVBe.js +0 -1
- package/src/assets/web-panel/assets/index-jfzI94IT.js +0 -1
- package/src/assets/web-panel/assets/isSymbol-CsP9Ob42.js +0 -1
- package/src/assets/web-panel/assets/mtc-parser-pGMSt10g.js +0 -1
- 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};
|