chainlesschain 0.162.105 → 0.162.107
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/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-DYaOYjxA.js → AIOps-B7Hz-sMT.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BRnLVtON.js → ActionButton-tIqg_ue9.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Bi5dt6xG.js → Analytics-B6DbVy_b.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-FdAkPhdh.js → AppLayout-Cm_hOXV8.js} +5 -5
- package/src/assets/web-panel/assets/{Audit-huJ-2mSb.js → Audit-Crc94mKO.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CTAFMoyw.js → Backup-DIZVZXve.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DNh66xG2.js → BaseInput-BZWHuJyu.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-xLRQDs5G.js → Chat-BOCsYs8k.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-BFRpdxeW.js → ChatBubbleRenderer-BK6OX-J4.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-BEZRITX8.js → Checkbox-_bsZN_Td.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BD6xBApN.js → Codegen-Cu-YIxg5.js} +1 -1
- package/src/assets/web-panel/assets/{Col-B_Xqx3Ul.js → Col-BMM77pN6.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Bu4rj14W.js → Community-B4uw3_sc.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B17uNB4p.js → Compact-RxrnL4Ql.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DjaCMltJ.js → Compliance-CKEfGRFH.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BdE44Hek.js → Cowork-jS0AVJjh.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-DZyVpxse.js → Cron-DNyVTsuS.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BeSoFHpQ.js → Crosschain-DRaSmfQP.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D8GTLlQ5.js → DID-B5UTlNum.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-vAKXjb1o.js → Dashboard-OVoPMtcA.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BvgPRTyP.js → Dropdown-5OA2sbK9.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CtXq_Ttt.js → EmailListRenderer-DUJPUE_n.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-oG2LekBb.js → FamilyGuardDashboard-BKFSlqTB.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-C-oMwAUG.js → Federation-BAhgrKK6.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-rj-oMGta.js → FormItemContext-CZ8wh8ZQ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-UeOKM5KJ.js → GenericCardRenderer-Cnsg9gY4.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BOjLMgD-.js → Git-EY6xhhH-.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DVlgF083.js → Governance-CKGWi2hF.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BzpCtSRm.js → Inference-Bibz4dcl.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-5sFDbZKo.js → KnowledgeGraph-B1GhH4Rh.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BagEqu7D.js → Logs-Ce6yjdqa.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-za352FZT.js → Marketplace-0dFzmO9J.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CEavmaZU.js → McpTools-crttKADW.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-Dp0d39Y-.js → Memory-BjtmouRu.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BljVPikC.js → MobileBridge-Djm8NKL7.js} +2 -2
- package/src/assets/web-panel/assets/MobileProjects-CuWSdENU.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-CO80_dbI.js → Mtc-UvDcNKPe.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-ByH4suVc.js → MtcAudit-CCUvaVsw.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-CvQ373Kp.js → Multisig-CltVDZII.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DSugxBwU.js → NLProgramming-nVqmxQ1N.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BN_R_-qG.js → Notes-gyIOnFru.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-x3Ipb8KF.js → NotificationSettings-C7VByx8y.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-CJCW-n1E.js → OrderTableRenderer-DopvBK5x.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CUo9tpab.js → Organization-VxnADtjw.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Cm1ok3yr.js → Overflow-Du67ZgzE.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BPXfkljx.js → P2P-CXK6FzZK.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-bB_pMcWV.js → PdhVaultBrowser-BH6PhZwi.js} +4 -4
- package/src/assets/web-panel/assets/{Permissions-bUj1KcNM.js → Permissions-B23k4uT8.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-DODkpqmo.js → PersonalDataHub-CjiMy8De.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-DEqfqfHT.js → Pipeline-Z1KmgqP5.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-C5b_6Np-.js → Privacy-CmxIvTR1.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DSnPoDLm.js → ProjectInit-Bts__Qz3.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-DjDz4FBi.js → ProjectSettings-Bd_lhQgg.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-9chbQyJR.js → Projects-DR-bmuRQ.js} +1 -1
- package/src/assets/web-panel/assets/Providers-kaD-Hp-Y.js +1 -0
- package/src/assets/web-panel/assets/{QuickAsk-BwBKTclE.js → QuickAsk-qy3iXhzr.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-mQMxq3Xc.js → Recommend-DONp9kRc.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-CL6wmEN-.js → Reputation-DDyL2Aeq.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CVXQQg_a.js → Row-D8YcGPf4.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CfoKWtqq.js → RssFeed-DXUODZiL.js} +3 -3
- package/src/assets/web-panel/assets/Search-DEdHYWFg.js +1 -0
- package/src/assets/web-panel/assets/{Security-DuVGdvLC.js → Security-H-o6s5e0.js} +4 -4
- package/src/assets/web-panel/assets/{Services-vfsS-hHM.js → Services-UuIWNe9h.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-UODCxnzg.js → Skeleton-DYtxZPtS.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DVHtahH_.js → Skills-DDifBlN4.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DSoODBCc.js → Sla-D1ZAkzmU.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DiaqTk_e.js → SpeechSettings-CKjGGj0q.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BQcVBcLi.js → SyncSettings-BGg86vP1.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-VxIkYJmg.js +1 -0
- package/src/assets/web-panel/assets/{Templates-BpnfhFKX.js → Templates-DFRL3OpQ.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-l6EIK9VO.js → Tenant-CmYigIMz.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-DjjQrZtn.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-6dWgzU5T.js → TimelineRenderer-B75R5MPw.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CmTEa0qE.js → Tokens-BQjcUYi2.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DrfC7Hb-.js → Trigger-B87osPjr.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-9SSsKJ67.js → Trust-BMNsPMGf.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-_4fg9FZz.js → UkeySign-Dh8aq9A5.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-XBXv_ieG.js → VideoEditing-BrW9UYwd.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-0eP1nq2A.js → Wallet-rVZaz6JO.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-BWs4GCCZ.js → WebAuthn-BaQ7s6Rr.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-BFSo4kVo.js → WorkflowEditor-DFo5Ff-W.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DJSs4Z3h.js → chat-BhGtd3vF.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DyNgmHM2.js → colors-C_Hs-0Q_.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-M3CZ-i2H.js → compact-item-Cxku8C7o.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-lNMonv_i.js → createContext-v6jUmogl.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BnANFH7b.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-B91aXEzF.js → hasIn-BKhLdwbQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMG7MAgn.js → index-51MhKb2G.js} +1 -1
- package/src/assets/web-panel/assets/{index-CJsTosBw.js → index-B2IZIcKV.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKiGfsRP.js → index-B3pkWuB9.js} +1 -1
- package/src/assets/web-panel/assets/{index-DQIBwi9k.js → index-BDW_6hBP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRJ_Lszr.js → index-BElj4Od7.js} +1 -1
- package/src/assets/web-panel/assets/{index-DyOBjEUA.js → index-BLJ91vZT.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzaXBB1A.js → index-BMCT14Fw.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAd-oQMK.js → index-Bgtv4PNS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTzUzcRX.js → index-BnYbnWuX.js} +1 -1
- package/src/assets/web-panel/assets/{index-HcSrdXIY.js → index-BolB2BAg.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDOOE70-.js → index-C2PkAyeB.js} +1 -1
- package/src/assets/web-panel/assets/{index-IHn9LQeI.js → index-C2rsPZun.js} +3 -3
- package/src/assets/web-panel/assets/{index-Be_FDJks.js → index-CARZxqzf.js} +1 -1
- package/src/assets/web-panel/assets/{index-KSwJzeqG.js → index-CBL2DZwT.js} +1 -1
- package/src/assets/web-panel/assets/index-CEJN-vG4.js +1 -0
- package/src/assets/web-panel/assets/{index-Bsl-sRNN.js → index-CVAVApRf.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMUkAgqR.js → index-CYz9sJYb.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVeeHE1i.js → index-CZDVxpam.js} +1 -1
- package/src/assets/web-panel/assets/index-CeJCYDPn.js +1 -0
- package/src/assets/web-panel/assets/{index-Dz-UTFho.js → index-CfTpPsv6.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmtXAPQT.js → index-CmhCbfio.js} +1 -1
- package/src/assets/web-panel/assets/{index-HIF1H3Qi.js → index-CwKGHmaT.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfRRIydd.js → index-D7aePQoD.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkpZNnfb.js → index-D8-PVIyz.js} +1 -1
- package/src/assets/web-panel/assets/{index-eLphHYgM.js → index-DMiUs7VJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-C4tKStAX.js → index-D_vs8HEm.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxhgIY1j.js → index-DaDs425R.js} +1 -1
- package/src/assets/web-panel/assets/{index-Do3iJlSY.js → index-DfD0hdcw.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV9i6LzE.js → index-DfjaeiC1.js} +1 -1
- package/src/assets/web-panel/assets/{index-_kFxj8Iv.js → index-Dfnrfw8C.js} +1 -1
- package/src/assets/web-panel/assets/{index-dW5CK84B.js → index-DgpKinbP.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2oG0D9w.js → index-DkFQKhAE.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWuMyZbA.js → index-DpO44b89.js} +1 -1
- package/src/assets/web-panel/assets/{index-vb_z80lH.js → index-GoxGMHvm.js} +1 -1
- package/src/assets/web-panel/assets/{index-De6_AYb4.js → index-Ha3xv10h.js} +1 -1
- package/src/assets/web-panel/assets/{index-C51tOSTU.js → index-Hmuq7HiU.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cvj5N5SK.js → index-ITysWrpU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXoioS1t.js → index-Mloutg2P.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVCoAsQq.js → index-gjdcCPuc.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BKCFkUwh.js → initDefaultProps-3JYk3XrB.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CuYmQtOE.js → motion-DnWevrJa.js} +1 -1
- package/src/assets/web-panel/assets/{move-DlPzxPAW.js → move-9bW2GZpH.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Ds3kQlyN.js → omit-D8ydPKdj.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-RUYRa-vv.js → pickAttrs-l5iG1eRA.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-jYZCPIVc.js → placementArrow-Bp1b6Ucy.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BsNIdQzh.js → responsiveObserve-ChTuOCcn.js} +1 -1
- package/src/assets/web-panel/assets/{slide-IDA11Awb.js → slide-Ck7EHmbe.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-D-dVqEII.js → statusUtils-Beih7s__.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-qHsriHs9.js → styleChecker-Dddg8IJR.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Bf1CATNE.js → useFlexGapSupport-DU6cxKQF.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BaqG_--5.js → useFs-BISbGmgC.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DsEBdplG.js → usePersonalDataHub-CuO7bBz3.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-AvKcICeL.js → vnode-Cq3NWQzC.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-ClicurwO.js → zoom-BTh_EbRh.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/hub.js +13 -4
- package/src/gateways/ws/personal-data-hub-protocol.js +2 -1
- package/src/lib/__tests__/pdh-load-error.test.js +87 -0
- package/src/lib/pdh-egress.js +210 -0
- package/src/lib/pdh-load-error.js +58 -0
- package/src/lib/personal-data-hub-wiring.js +4 -38
- package/src/runtime/diagnostics.js +48 -0
- package/src/runtime/headless-stream.js +37 -1
- package/src/assets/web-panel/assets/MobileProjects-dR-6L-xU.js +0 -1
- package/src/assets/web-panel/assets/Providers-CrtYhXe4.js +0 -1
- package/src/assets/web-panel/assets/Search-BXBraFwH.js +0 -1
- package/src/assets/web-panel/assets/Tasks-w5vOQG7_.js +0 -1
- package/src/assets/web-panel/assets/Terminal-2wTdm-Qz.js +0 -3
- package/src/assets/web-panel/assets/devWarning-D7oeO7SY.js +0 -1
- package/src/assets/web-panel/assets/index-BIPYc_9M.js +0 -1
- package/src/assets/web-panel/assets/index-BRXyk-mT.js +0 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helper for loading the personal-data-hub package with an actionable
|
|
3
|
+
* error when the install is incomplete.
|
|
4
|
+
*
|
|
5
|
+
* pdh is imported lazily from several places (the hub wiring, the ws
|
|
6
|
+
* personal-data-hub protocol's system-data ingest, and the `cc hub
|
|
7
|
+
* collect-*` / `salvage` forensics commands). When a global
|
|
8
|
+
* `npm i -g chainlesschain` is interrupted mid-extraction — commonly a
|
|
9
|
+
* running `cc` / node process holding a lock on a native .node file →
|
|
10
|
+
* EBUSY/EPERM — the pdh package is left partially written. The default Node
|
|
11
|
+
* error ("Cannot find module .../personal-data-hub/lib/...") reads like a bug
|
|
12
|
+
* in the package rather than a local-install problem, so users can't
|
|
13
|
+
* self-fix. Centralizing the rewrite here keeps that guidance identical
|
|
14
|
+
* across every pdh load site.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Turn a raw ESM module-resolution failure for the personal-data-hub package
|
|
19
|
+
* into an actionable "your install is incomplete — repair it" error. Real
|
|
20
|
+
* bugs inside pdh (a TypeError) and unrelated missing modules pass through
|
|
21
|
+
* unchanged.
|
|
22
|
+
*/
|
|
23
|
+
export function rewritePdhLoadError(err) {
|
|
24
|
+
const isMissingModule =
|
|
25
|
+
err &&
|
|
26
|
+
(err.code === "ERR_MODULE_NOT_FOUND" ||
|
|
27
|
+
/Cannot find (module|package)/.test(err.message || ""));
|
|
28
|
+
const mentionsPdh = /personal-data-hub/.test(
|
|
29
|
+
(err && (err.url || err.message)) || "",
|
|
30
|
+
);
|
|
31
|
+
if (!isMissingModule || !mentionsPdh) return err;
|
|
32
|
+
const wrapped = new Error(
|
|
33
|
+
"Personal Data Hub package is missing files — your install looks " +
|
|
34
|
+
"incomplete.\n" +
|
|
35
|
+
"This usually means a global install was interrupted (often a running " +
|
|
36
|
+
"`cc`/node process locking a native file).\n" +
|
|
37
|
+
"Repair it with: npm i -g chainlesschain@latest\n" +
|
|
38
|
+
"(close any running `cc` sessions first so the install isn't blocked).\n" +
|
|
39
|
+
`Original error: ${err.message}`,
|
|
40
|
+
);
|
|
41
|
+
wrapped.code = "PDH_INSTALL_INCOMPLETE";
|
|
42
|
+
wrapped.cause = err;
|
|
43
|
+
return wrapped;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* `await import()` a pdh package/subpath specifier, rewriting an
|
|
48
|
+
* incomplete-install resolution failure into the actionable error above.
|
|
49
|
+
* Returns the raw module namespace (caller does its own .default / named
|
|
50
|
+
* destructure, exactly like a bare dynamic import).
|
|
51
|
+
*/
|
|
52
|
+
export async function importPdh(spec) {
|
|
53
|
+
try {
|
|
54
|
+
return await import(spec);
|
|
55
|
+
} catch (err) {
|
|
56
|
+
throw rewritePdhLoadError(err);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -26,6 +26,10 @@
|
|
|
26
26
|
|
|
27
27
|
import { join } from "node:path";
|
|
28
28
|
import { mkdirSync } from "node:fs";
|
|
29
|
+
import { rewritePdhLoadError } from "./pdh-load-error.js";
|
|
30
|
+
// Test seam (mirrors _atomicWriteJson600): re-exported so the existing
|
|
31
|
+
// pdh-wiring-load-error suite can keep importing it from here.
|
|
32
|
+
export { rewritePdhLoadError as _rewritePdhLoadError } from "./pdh-load-error.js";
|
|
29
33
|
// Hub package is CJS; in ESM we default-import then destructure (Node 22
|
|
30
34
|
// won't let us name-import a CJS module unless it ships a separate ESM
|
|
31
35
|
// shim, which we don't).
|
|
@@ -137,44 +141,6 @@ let LocalVault,
|
|
|
137
141
|
|
|
138
142
|
let _pdhLoadPromise = null;
|
|
139
143
|
|
|
140
|
-
/**
|
|
141
|
-
* Turn a raw ESM module-resolution failure for the personal-data-hub package
|
|
142
|
-
* into an actionable "your install is incomplete — repair it" error.
|
|
143
|
-
*
|
|
144
|
-
* Today this happens when a global `npm i -g chainlesschain` is interrupted
|
|
145
|
-
* mid-extraction (commonly a running `cc` / node process holding a lock on a
|
|
146
|
-
* native .node file → EBUSY/EPERM), leaving the pdh package partially
|
|
147
|
-
* written. The default Node error ("Cannot find module
|
|
148
|
-
* .../personal-data-hub/lib/adapters/wechat/index.js") reads like a bug in
|
|
149
|
-
* the package rather than a local-install problem, so users can't self-fix.
|
|
150
|
-
* Non-resolution errors (a real bug inside pdh) pass through unchanged.
|
|
151
|
-
*/
|
|
152
|
-
function rewritePdhLoadError(err) {
|
|
153
|
-
const isMissingModule =
|
|
154
|
-
err &&
|
|
155
|
-
(err.code === "ERR_MODULE_NOT_FOUND" ||
|
|
156
|
-
/Cannot find (module|package)/.test(err.message || ""));
|
|
157
|
-
const mentionsPdh = /personal-data-hub/.test(
|
|
158
|
-
(err && (err.url || err.message)) || "",
|
|
159
|
-
);
|
|
160
|
-
if (!isMissingModule || !mentionsPdh) return err;
|
|
161
|
-
const wrapped = new Error(
|
|
162
|
-
"Personal Data Hub package is missing files — your install looks " +
|
|
163
|
-
"incomplete.\n" +
|
|
164
|
-
"This usually means a global install was interrupted (often a running " +
|
|
165
|
-
"`cc`/node process locking a native file).\n" +
|
|
166
|
-
"Repair it with: npm i -g chainlesschain@latest\n" +
|
|
167
|
-
"(close any running `cc` sessions first so the install isn't blocked).\n" +
|
|
168
|
-
`Original error: ${err.message}`,
|
|
169
|
-
);
|
|
170
|
-
wrapped.code = "PDH_INSTALL_INCOMPLETE";
|
|
171
|
-
wrapped.cause = err;
|
|
172
|
-
return wrapped;
|
|
173
|
-
}
|
|
174
|
-
// Test seam (mirrors _atomicWriteJson600): unit-test the error rewrite
|
|
175
|
-
// without provoking a real partial-install.
|
|
176
|
-
export { rewritePdhLoadError as _rewritePdhLoadError };
|
|
177
|
-
|
|
178
144
|
/**
|
|
179
145
|
* Lazily import the personal-data-hub package + wechat adapter and populate
|
|
180
146
|
* the module-level binding holders above. Memoized so concurrent
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
import { execSync } from "node:child_process";
|
|
16
16
|
import { existsSync, readdirSync } from "node:fs";
|
|
17
|
+
import { createRequire } from "node:module";
|
|
17
18
|
import { createConnection } from "node:net";
|
|
18
19
|
import semver from "semver";
|
|
19
20
|
|
|
@@ -62,6 +63,41 @@ function safeExec(cmd) {
|
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Verify the personal-data-hub package (lazily loaded by every `cc hub …`
|
|
68
|
+
* command) is fully present on disk.
|
|
69
|
+
*
|
|
70
|
+
* A partial global install — most commonly an interrupted `npm i -g
|
|
71
|
+
* chainlesschain` whose extraction was blocked by a running `cc` process
|
|
72
|
+
* locking a native file (EBUSY) — leaves pdh files unwritten. The hub
|
|
73
|
+
* commands then fail at runtime with a raw ERR_MODULE_NOT_FOUND. Because pdh
|
|
74
|
+
* is lazy-loaded, `cc doctor` itself still starts and can surface this
|
|
75
|
+
* proactively with a one-line repair hint instead of leaving the user to
|
|
76
|
+
* decode a stack trace.
|
|
77
|
+
*
|
|
78
|
+
* Probes the two exported entry points (main + the wechat adapter); CJS
|
|
79
|
+
* require.resolve verifies the target file exists, so a missing file throws.
|
|
80
|
+
* Deps are injectable for unit tests.
|
|
81
|
+
*/
|
|
82
|
+
export function checkPdhPackageIntegrity(deps = {}) {
|
|
83
|
+
const resolve =
|
|
84
|
+
deps.resolve || ((spec) => createRequire(import.meta.url).resolve(spec));
|
|
85
|
+
const exists = deps.existsSync || existsSync;
|
|
86
|
+
const repair = "Repair: npm i -g chainlesschain@latest";
|
|
87
|
+
const probes = [
|
|
88
|
+
"@chainlesschain/personal-data-hub",
|
|
89
|
+
"@chainlesschain/personal-data-hub/adapters/wechat",
|
|
90
|
+
];
|
|
91
|
+
try {
|
|
92
|
+
const paths = probes.map((spec) => resolve(spec));
|
|
93
|
+
const missing = paths.filter((p) => !exists(p));
|
|
94
|
+
if (missing.length === 0) return { ok: true, detail: "" };
|
|
95
|
+
return { ok: false, detail: `Incomplete install — ${repair}` };
|
|
96
|
+
} catch {
|
|
97
|
+
return { ok: false, detail: `Missing/unresolvable — ${repair}` };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
65
101
|
/**
|
|
66
102
|
* Collect a machine-readable doctor report.
|
|
67
103
|
*
|
|
@@ -179,6 +215,18 @@ export async function collectDoctorReport() {
|
|
|
179
215
|
detail: setupCompleted ? "" : 'Run "chainlesschain setup"',
|
|
180
216
|
});
|
|
181
217
|
|
|
218
|
+
// Personal Data Hub package integrity (catches partial/EBUSY-corrupted
|
|
219
|
+
// global installs before the user hits a raw ERR_MODULE_NOT_FOUND from a
|
|
220
|
+
// `cc hub …` command). Optional: non-hub usage works without it.
|
|
221
|
+
const pdh = checkPdhPackageIntegrity();
|
|
222
|
+
checks.push({
|
|
223
|
+
id: "pdh-package",
|
|
224
|
+
name: "Personal Data Hub package",
|
|
225
|
+
ok: pdh.ok,
|
|
226
|
+
optional: true,
|
|
227
|
+
detail: pdh.detail,
|
|
228
|
+
});
|
|
229
|
+
|
|
182
230
|
// Port scan
|
|
183
231
|
const ports = [];
|
|
184
232
|
for (const [name, port] of Object.entries(DEFAULT_PORTS)) {
|
|
@@ -582,9 +582,13 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
582
582
|
// the very first turn — the read side of pdh-feedback-ledger.js. Gated to PDH
|
|
583
583
|
// context (the in-APK chat sets CHAINLESSCHAIN_PDH_PORT; `--pdh` forces,
|
|
584
584
|
// `--no-pdh` opts out) so IDE/coding sessions are never polluted. Best-effort.
|
|
585
|
+
// PDH context gate — reused by the §3.5.13 flywheel injection below and the
|
|
586
|
+
// §3.5.18 egress reporting after each turn (in-APK chat sets
|
|
587
|
+
// CHAINLESSCHAIN_PDH_PORT; `--pdh` forces, `--no-pdh` opts out).
|
|
588
|
+
let pdhContext = false;
|
|
585
589
|
try {
|
|
586
590
|
const { isInPdhTerminal } = await import("../lib/pdh-bridge.js");
|
|
587
|
-
|
|
591
|
+
pdhContext =
|
|
588
592
|
options.pdh === true ||
|
|
589
593
|
(options.pdh !== false && isInPdhTerminal(process.env));
|
|
590
594
|
if (pdhContext) {
|
|
@@ -1275,6 +1279,38 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
1275
1279
|
}
|
|
1276
1280
|
currentAbort = null;
|
|
1277
1281
|
|
|
1282
|
+
// §3.5.18 出境台账: report what left the device this turn (the cloud-LLM
|
|
1283
|
+
// call + any egress-classed tool) so the Android transparency ledger —
|
|
1284
|
+
// which cannot see the cc subprocess's cloud call — records it. PDH-gated
|
|
1285
|
+
// and emit-only (cc never keeps its own ledger; it stays a single on-device
|
|
1286
|
+
// encrypted store). A local-only turn emits nothing — the honest "0 条出境".
|
|
1287
|
+
// Uses the EFFECTIVE per-turn LLM (a §3.5.10 privacy-tier / vision override
|
|
1288
|
+
// is exactly the egress-relevant decision).
|
|
1289
|
+
if (pdhContext) {
|
|
1290
|
+
try {
|
|
1291
|
+
const { turnEgressEvents } = await import("../lib/pdh-egress.js");
|
|
1292
|
+
const effProvider =
|
|
1293
|
+
turnVisionLlm?.provider || turnLlmOverride?.provider || provider;
|
|
1294
|
+
const effModel =
|
|
1295
|
+
turnVisionLlm?.model || turnLlmOverride?.model || model;
|
|
1296
|
+
const effBaseUrl =
|
|
1297
|
+
turnVisionLlm?.baseUrl || turnLlmOverride?.baseUrl || baseUrl;
|
|
1298
|
+
for (const ev of turnEgressEvents({
|
|
1299
|
+
provider: effProvider,
|
|
1300
|
+
baseUrl: effBaseUrl,
|
|
1301
|
+
model: effModel,
|
|
1302
|
+
toolCalls: outcome.toolCalls,
|
|
1303
|
+
usage: outcome.usage,
|
|
1304
|
+
sessionId,
|
|
1305
|
+
turn: turns,
|
|
1306
|
+
})) {
|
|
1307
|
+
emit(ev);
|
|
1308
|
+
}
|
|
1309
|
+
} catch {
|
|
1310
|
+
/* egress reporting is best-effort — never break the chat */
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
|
|
1278
1314
|
// Grow the conversation so the next turn has context.
|
|
1279
1315
|
messages.push({ role: "assistant", content: outcome.finalText });
|
|
1280
1316
|
if (persist) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as n,J as g,c as l,K as r,N as u,P as h,U as o,R as t,Q as b}from"./vendor-BvqAck49.js";import{_ as v,b as m}from"./index-IHn9LQeI.js";import{a7 as y,M}from"./icons-DP3uiYxy.js";const B={__name:"MobileProjects",setup(p,{expose:i}){i();const c=u(),{t:e}=m();function a(){c.push("/projects")}function _(){c.push("/mobile-bridge")}const s={router:c,t:e,goToProjects:a,goToMobileBridge:_,get useRouter(){return u},get useI18n(){return m},get MobileOutlined(){return M},get FolderOutlined(){return y}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},x={class:"mobile-projects-placeholder"},O={class:"title"},k={class:"subtitle"},w={class:"explainer"};function T(p,i,c,e,a,_){const s=n("a-alert"),d=n("a-button"),f=n("a-space"),P=n("a-empty"),j=n("a-card");return h(),g("div",x,[l(j,null,{default:r(()=>[l(P,{description:!1},{image:r(()=>[l(e.MobileOutlined,{style:{fontSize:"64px",color:"#bfbfbf"}})]),default:r(()=>[o("h2",O,t(e.t("mobileProjects.title")),1),o("p",k,t(e.t("mobileProjects.subtitle")),1),l(s,{message:e.t("mobileProjects.v02Banner"),type:"info","show-icon":"",class:"banner"},null,8,["message"]),o("div",w,[o("h3",null,t(e.t("mobileProjects.currentDirection")),1),o("p",null,t(e.t("mobileProjects.currentDirectionBody")),1),o("ul",null,[o("li",null,t(e.t("mobileProjects.stepPhone")),1),o("li",null,t(e.t("mobileProjects.stepTap")),1),o("li",null,t(e.t("mobileProjects.stepPull")),1)]),o("h3",null,t(e.t("mobileProjects.reverseDirection")),1),o("p",null,t(e.t("mobileProjects.reverseDirectionBody")),1)]),l(f,{class:"actions"},{default:r(()=>[l(d,{type:"primary",onClick:e.goToProjects},{default:r(()=>[l(e.FolderOutlined),b(" "+t(e.t("mobileProjects.viewLocalProjects")),1)]),_:1}),l(d,{onClick:e.goToMobileBridge},{default:r(()=>[l(e.MobileOutlined),b(" "+t(e.t("mobileProjects.checkBridge")),1)]),_:1})]),_:1})]),_:1})]),_:1})])}const N=v(B,[["render",T],["__scopeId","data-v-9262cc45"],["__file","/tmp/cc-web-panel-WaICZP/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{E as N,r as k,I as m,J as F,U as d,c as i,K as l,V as u,S,F as R,Z as q,o as I,a as A,P as g,Q as x,R as C,_ as E}from"./vendor-BvqAck49.js";import{u as M,_ as H,d as _}from"./index-IHn9LQeI.js";import{a as W,b as D,c as j}from"./parsers-UEvh_ShA.js";import{R as Z}from"./icons-DP3uiYxy.js";const B=N("providers",()=>{const K=k(!1),o=k(null),v=k([]),e=k([]),w=k(null);async function U(){const s=M();K.value=!0;try{const{output:f}=await s.execute("llm providers",15e3);v.value=W(f);const p=v.value.find(h=>h.active);p&&(w.value=p.name);const{output:b}=await s.execute("llm models",15e3);e.value=D(b)}catch(f){console.error("Failed to load providers:",f)}finally{K.value=!1}}async function y(s){await M().execute(`llm switch ${s}`,1e4),v.value.forEach(p=>p.active=p.name===s),w.value=s}async function a(s){const f=M();o.value=s;try{const{output:p,exitCode:b}=await f.execute("llm test",3e4),h=v.value.find(L=>L.name===s);return h&&(h.status=b===0?"ok":"error"),b===0}catch{const p=v.value.find(b=>b.name===s);return p&&(p.status="error"),!1}finally{o.value=null}}return{loading:K,testing:o,providers:v,localModels:e,activeProvider:w,loadProviders:U,switchProvider:y,testProvider:a}}),J={__name:"Providers",setup(K,{expose:o}){o();const v=B(),e=M(),w=k(!1),U=k(!1),y=k(!1),a=A({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let s={};const f=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],p={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},b=f.map(n=>({value:n,label:p[n]||n}));async function h(n){try{await v.switchProvider(n),_.success(`已切换到 ${n}`)}catch(t){_.error(`切换失败: ${t.message}`)}}async function L(n){await v.testProvider(n)?_.success(`${n} 连接正常`):_.warning(`${n} 连接失败,请检查配置`)}async function z(){w.value=!0;try{const{output:n}=await e.execute("config list",15e3),t=j(n);t.provider&&(a.provider=t.provider),t.model&&(a.model=t.model),t.apiKey&&(a.apiKey=t.apiKey),t.baseUrl&&(a.baseUrl=t.baseUrl),t.temperature!==void 0&&(a.temperature=t.temperature),t.maxTokens!==void 0&&(a.maxTokens=t.maxTokens),s={provider:t.provider??"",model:t.model??"",apiKey:t.apiKey??"",baseUrl:t.baseUrl??"",temperature:t.temperature??a.temperature,maxTokens:t.maxTokens??a.maxTokens},_.success("配置已加载")}catch(n){_.error(`加载配置失败: ${n.message}`)}finally{w.value=!1}}async function O(){U.value=!0;const n=[],t=[];try{if(a.provider&&a.provider!==s.provider)try{await e.execute(`config set llm.provider ${a.provider}`,1e4),t.push("provider")}catch(c){n.push(`provider: ${c.message}`)}if(a.model&&a.model!==s.model)try{await e.execute(`config set llm.model ${a.model}`,1e4),t.push("model")}catch(c){n.push(`model: ${c.message}`)}if(a.apiKey&&a.apiKey!==s.apiKey)try{await e.execute(`config set llm.apiKey ${a.apiKey}`,1e4),t.push("apiKey")}catch(c){n.push(`apiKey: ${c.message}`)}if(a.baseUrl!==void 0&&a.baseUrl!==s.baseUrl)try{await e.execute(`config set llm.baseUrl ${a.baseUrl}`,1e4),t.push("baseUrl")}catch(c){n.push(`baseUrl: ${c.message}`)}if(a.temperature!==s.temperature)try{await e.execute(`config set llm.temperature ${a.temperature}`,1e4),t.push("temperature")}catch(c){n.push(`temperature: ${c.message}`)}if(a.maxTokens!==s.maxTokens)try{await e.execute(`config set llm.maxTokens ${a.maxTokens}`,1e4),t.push("maxTokens")}catch(c){n.push(`maxTokens: ${c.message}`)}n.length>0?_.warning(`部分配置保存失败: ${n.join("; ")}`):t.length>0?(_.success(`已保存 ${t.length} 项配置`),s={...a},(t.includes("apiKey")||t.includes("provider")||t.includes("baseUrl")||t.includes("model"))&&(y.value=!0),t.includes("provider")&&v.loadProviders()):_.info("没有检测到配置变更")}catch(c){_.error(`保存配置失败: ${c.message}`)}finally{U.value=!1}}function P(){a.provider=s.provider||void 0,a.model=s.model||"",a.apiKey=s.apiKey||"",a.baseUrl=s.baseUrl||"",a.temperature=s.temperature??.7,a.maxTokens=s.maxTokens??4096}I(()=>{v.loadProviders(),z()});const T={providersStore:v,ws:e,configLoading:w,configSaving:U,showRestartHint:y,configForm:a,get loadedConfig(){return s},set loadedConfig(n){s=n},knownProviders:f,providerLabels:p,providerOptions:b,switchProvider:h,test:L,loadConfig:z,saveConfig:O,resetForm:P,onMounted:I,reactive:A,ref:k,get ReloadOutlined(){return Z},get message(){return _},get useProvidersStore(){return B},get useWsStore(){return M},get parseLlmConfigOutput(){return j}};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}},Q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},X={key:1,style:{"text-align":"center",padding:"60px"}},Y={class:"providers-grid"},$={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},ee={style:{"font-size":"24px"}},oe={style:{flex:"1"}},ae={style:{color:"#e0e0e0","font-weight":"500"}},te={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},re={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},se={key:0,style:{"margin-top":"24px"}},ne={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},ie={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},le={class:"config-grid"},de={style:{display:"flex","align-items":"center",gap:"12px"}},ce={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}};function me(K,o,v,e,w,U){const y=m("a-button"),a=m("a-alert"),s=m("a-spin"),f=m("a-tag"),p=m("a-badge"),b=m("a-card"),h=m("a-list-item"),L=m("a-list"),z=m("a-divider"),O=m("a-select"),P=m("a-form-item"),T=m("a-input"),n=m("a-input-password"),t=m("a-slider"),c=m("a-input-number"),V=m("a-form");return g(),F("div",null,[d("div",Q,[o[10]||(o[10]=d("div",null,[d("h2",{class:"page-title"},"LLM 配置"),d("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),i(y,{type:"primary",ghost:"",loading:e.providersStore.loading,onClick:o[0]||(o[0]=r=>e.providersStore.loadProviders())},{icon:l(()=>[i(e.ReloadOutlined)]),default:l(()=>[o[9]||(o[9]=x(" 刷新 ",-1))]),_:1},8,["loading"])]),u(" Active Provider Banner "),e.providersStore.activeProvider?(g(),S(a,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:l(()=>[d("span",null,[o[11]||(o[11]=x("当前激活:",-1)),d("strong",null,C(e.providersStore.activeProvider),1)])]),_:1})):u("v-if",!0),u(" Loading "),e.providersStore.loading?(g(),F("div",X,[i(s,{size:"large"}),o[12]||(o[12]=d("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(g(),F(R,{key:2},[u(" Providers Grid "),d("div",null,[d("div",Y,[(g(!0),F(R,null,q(e.providersStore.providers,r=>(g(),S(b,{key:r.name,class:E(["provider-card",{active:r.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:l(()=>[d("div",$,[d("span",ee,C(r.icon),1),d("div",oe,[d("div",ae,C(r.label),1),d("div",te,C(r.name),1)]),d("div",null,[r.active?(g(),S(f,{key:0,color:"green"},{default:l(()=>[...o[13]||(o[13]=[x("活跃",-1)])]),_:1})):r.status==="ok"?(g(),S(p,{key:1,status:"success",text:""})):r.status==="error"?(g(),S(p,{key:2,status:"error",text:""})):u("v-if",!0)])]),d("div",re,[i(y,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:e.providersStore.testing===r.name,onClick:G=>e.test(r.name)},{default:l(()=>[...o[14]||(o[14]=[x(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),r.active?(g(),S(f,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:l(()=>[...o[16]||(o[16]=[x("当前",-1)])]),_:1})):(g(),S(y,{key:0,size:"small",type:"primary",ghost:"",onClick:G=>e.switchProvider(r.name)},{default:l(()=>[...o[15]||(o[15]=[x(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),u(" Local Models (Ollama) "),e.providersStore.localModels.length?(g(),F("div",se,[o[17]||(o[17]=d("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 本地模型(Ollama) ",-1)),i(L,{"data-source":e.providersStore.localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:l(({item:r})=>[i(h,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:l(()=>[i(f,{color:"cyan",style:{"font-size":"10px"}},{default:l(()=>[x(C(r.size||"local"),1)]),_:2},1024)]),default:l(()=>[d("span",ne,C(r.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):u("v-if",!0),u(" LLM Parameter Settings "),i(z,{style:{"border-color":"var(--border-color)",margin:"32px 0 24px"}}),e.showRestartHint?(g(),S(a,{key:1,type:"warning","show-icon":"",closable:"",style:{"margin-bottom":"16px"},message:"配置已保存,但当前聊天会话仍在用旧 key",description:"桌面端的 LLM 会话只在新建会话时重读配置。请新建一个 Chat,或重启应用,新 key/Provider 才会生效。",onClose:o[1]||(o[1]=r=>e.showRestartHint=!1)})):u("v-if",!0),d("div",ie,[o[19]||(o[19]=d("h3",{class:"section-title"},"LLM 参数设置",-1)),i(y,{size:"small",loading:e.configLoading,onClick:e.loadConfig,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:l(()=>[i(e.ReloadOutlined)]),default:l(()=>[o[18]||(o[18]=x(" 加载配置 ",-1))]),_:1},8,["loading"])]),i(b,{class:"config-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[i(V,{model:e.configForm,layout:"vertical",class:"config-form"},{default:l(()=>[d("div",le,[u(" Provider "),i(P,{label:"Provider(提供商)"},{default:l(()=>[i(O,{value:e.configForm.provider,"onUpdate:value":o[2]||(o[2]=r=>e.configForm.provider=r),placeholder:"选择 LLM 提供商",options:e.providerOptions,style:{width:"100%"},disabled:e.configSaving},null,8,["value","options","disabled"])]),_:1}),u(" Model "),i(P,{label:"Model(模型名称)"},{default:l(()=>[i(T,{value:e.configForm.model,"onUpdate:value":o[3]||(o[3]=r=>e.configForm.model=r),placeholder:"例如 doubao-seed-1-6-251015","allow-clear":"",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),u(" API Key "),i(P,{label:"API Key"},{default:l(()=>[i(n,{value:e.configForm.apiKey,"onUpdate:value":o[4]||(o[4]=r=>e.configForm.apiKey=r),placeholder:"输入 API Key",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),u(" Base URL "),i(P,{label:"Base URL"},{default:l(()=>[i(T,{value:e.configForm.baseUrl,"onUpdate:value":o[5]||(o[5]=r=>e.configForm.baseUrl=r),placeholder:"例如 https://ark.cn-beijing.volces.com/api/v3","allow-clear":"",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),u(" Temperature "),i(P,{label:"Temperature(温度)"},{default:l(()=>[d("div",de,[i(t,{value:e.configForm.temperature,"onUpdate:value":o[6]||(o[6]=r=>e.configForm.temperature=r),min:0,max:2,step:.1,style:{flex:"1"},disabled:e.configSaving},null,8,["value","disabled"]),i(c,{value:e.configForm.temperature,"onUpdate:value":o[7]||(o[7]=r=>e.configForm.temperature=r),min:0,max:2,step:.1,precision:1,style:{width:"80px"},disabled:e.configSaving},null,8,["value","disabled"])])]),_:1}),u(" Max Tokens "),i(P,{label:"Max Tokens(最大输出长度)"},{default:l(()=>[i(c,{value:e.configForm.maxTokens,"onUpdate:value":o[8]||(o[8]=r=>e.configForm.maxTokens=r),min:256,max:128e3,step:256,style:{width:"100%"},placeholder:"4096",disabled:e.configSaving},null,8,["value","disabled"])]),_:1})]),d("div",ce,[i(y,{onClick:e.resetForm,disabled:e.configSaving,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:l(()=>[...o[20]||(o[20]=[x(" 重置 ",-1)])]),_:1},8,["disabled"]),i(y,{type:"primary",loading:e.configSaving,onClick:e.saveConfig},{default:l(()=>[...o[21]||(o[21]=[x(" 保存配置 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1})])],2112))])}const ge=H(J,[["render",me],["__scopeId","data-v-64155d06"],["__file","/tmp/cc-web-panel-WaICZP/repo/packages/web-panel/src/views/Providers.vue"]]);export{ge as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u,J as g,U as m,R as c,c as r,K as t,V as f,S as k,r as v,o as se,a as ie,b as j,P as d,Q as _,a2 as ke,F as O,Z as L}from"./vendor-BvqAck49.js";import{_ as Se,b as ce,u as de,E as ue,d as F}from"./index-IHn9LQeI.js";import{s as ye}from"./community-parser-CO25nZFt.js";import{at as Ce,l as Te,a4 as Ne,a_ as Ae,a9 as Oe,a2 as ze,$ as we,k as Ee,R as Me}from"./icons-DP3uiYxy.js";function ae(n){const o=ye(n);if(!o)return null;try{return JSON.parse(o)}catch{}const s=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!s)return null;try{return JSON.parse(s[0])}catch{return null}}const Ie=Object.freeze(["bm25","vector","hybrid"]);function Fe(n,o=0){return typeof n=="number"&&Number.isFinite(n)?n:o}function Re(n){if(Array.isArray(n))return n.filter(o=>typeof o=="string");if(typeof n!="string")return[];try{const o=JSON.parse(n);if(Array.isArray(o))return o.filter(s=>typeof s=="string")}catch{}return[]}function J(n){if(!n)return{noDb:!1,error:""};const o=ye(n),s=/Database not available/i.test(o);return{noDb:s,error:s?"Database not available":""}}function De(n,o=0){if(!n||typeof n!="object")return null;const s=n.id||"";return s?{key:s,id:s,score:Fe(n.score,0),title:String(n.title||""),category:String(n.category||"general"),createdAt:n.created_at??n.createdAt??"",snippet:String(n.snippet||""),_idx:o}:null}function fe(n){const o=ae(n);return Array.isArray(o)?o.map(De).filter(Boolean):[]}function he(n,o=0){if(!n||typeof n!="object")return null;const s=n.id||"";return s?{key:s,id:s,title:String(n.title||""),content:n.content??"",tags:Re(n.tags),category:String(n.category||"general"),createdAt:n.created_at??n.createdAt??"",updatedAt:n.updated_at??n.updatedAt??"",_idx:o}:null}function ge(n){const o=ae(n);return Array.isArray(o)?o.map(he).filter(Boolean):[]}function me(n){const o=ae(n);return!o||typeof o!="object"||Array.isArray(o)?null:he(o,0)}function _e(n){if(!Array.isArray(n)||n.length===0)return{total:0,categories:[],tags:[]};const o=new Map,s=new Map;for(const e of n){o.set(e.category,(o.get(e.category)||0)+1);for(const x of e.tags)s.set(x,(s.get(x)||0)+1)}return{total:n.length,categories:[...o.entries()].map(([e,x])=>({name:e,count:x})).sort((e,x)=>x.count-e.count),tags:[...s.entries()].map(([e,x])=>({name:e,count:x})).sort((e,x)=>x.count-e.count)}}function Le(n){if(n==null||n==="")return"—";const o=String(n),s=o.includes(" ")&&!o.includes("T")?o.replace(" ","T")+"Z":o,e=new Date(s);return isNaN(e.getTime())?o:e.toLocaleString("zh-CN",{hour12:!1})}const G="cc.web-panel.search.recent",re=8,Pe={__name:"Search",setup(n,{expose:o}){o();const{t:s}=ce(),e=de(),x=ue.PRESENTED_IMAGE_SIMPLE,q=v(!1),C=v(!1),P=v(!1),B=v(!1),z=v([]),h=v([]),A=v({noDb:!1,error:""}),T=ie({query:"",mode:"hybrid",topK:10}),Q=v(""),w=v(U()),K=v("results"),S=v(""),N=v(""),E=v(!1),M=v(null),V=j(()=>_e(z.value)),Y=j(()=>h.value.length?Math.max(...h.value.map(l=>l.score)):0),W=j(()=>[{title:s("search.noteColumns.title"),key:"title"},{title:s("search.noteColumns.category"),key:"category",width:"120px"},{title:s("search.noteColumns.tags"),key:"tags",width:"240px"},{title:s("search.noteColumns.createdAt"),key:"createdAt",width:"180px"},{title:s("search.noteColumns.action"),key:"action",width:"180px"}]),Z=j(()=>{let l=z.value;if(S.value&&(l=l.filter(i=>i.category===S.value)),N.value.trim()){const i=N.value.trim().toLowerCase();l=l.filter(y=>y.tags.some(b=>b.toLowerCase().includes(i)))}return l});function H(l){const i=`search.mode.${l}`,y=s(i);return y===i?l:y}function X(l){const i=["blue","green","purple","orange","cyan","magenta","gold","volcano"];let y=0;for(let b=0;b<(l||"").length;b++)y=y*31+l.charCodeAt(b)>>>0;return i[y%i.length]}function $(l){return l>=.7?"#52c41a":l>=.5?"#1677ff":l>=.3?"#faad14":"#ff4d4f"}function R(l){return String(l).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function I(l,i){if(!i||!l)return R(l);const y=i.split(/\s+/).filter(Boolean);let b=R(l);for(const be of y){const xe=new RegExp(`(${be.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi");b=b.replace(xe,"<mark>$1</mark>")}return b}function ee(l,i){return i?I(l,i):R(l)}function U(){try{const l=localStorage.getItem(G);if(l){const i=JSON.parse(l);if(Array.isArray(i))return i.filter(y=>typeof y=="string").slice(0,re)}}catch{}return[]}function a(l){const i=l.trim();if(!i)return;const y=[i,...w.value.filter(b=>b!==i)];w.value=y.slice(0,re);try{localStorage.setItem(G,JSON.stringify(w.value))}catch{}}function p(){w.value=[];try{localStorage.removeItem(G)}catch{}}function D(l){T.query=l,te()}async function oe(){q.value=!0,A.value={noDb:!1,error:""};try{const{output:l}=await e.execute("note list -n 500 --json",12e3).catch(()=>({output:""})),i=J(l);if(i.noDb){A.value=i,z.value=[];return}z.value=ge(l)}catch(l){F.error(s("search.messages.loadIndexFailed",{err:l?.message||l}))}finally{q.value=!1}}async function te(){const l=T.query.trim();if(!l){F.warning(s("search.messages.queryRequired"));return}P.value=!0,A.value={noDb:!1,error:""};try{const i=[`search ${ne(l)}`,`--mode ${T.mode}`,`--top-k ${T.topK||10}`,"--json"],{output:y}=await e.execute(i.join(" "),15e3),b=J(y);if(b.noDb){A.value=b,h.value=[],B.value=!0,Q.value=l;return}h.value=fe(y),Q.value=l,B.value=!0,a(l),K.value="results"}catch(i){F.error(s("search.messages.searchFailed",{err:i?.message||i}))}finally{P.value=!1}}function ne(l){return`"${String(l).replace(/"/g,'\\"')}"`}function pe(l){T.query=l.title,T.mode="vector",te()}async function ve(l){E.value=!0,C.value=!0,M.value=null;try{const{output:i}=await e.execute(`note show ${l} --json`,8e3);if(J(i).noDb){F.error(s("search.messages.needInit"));return}M.value=me(i),M.value||F.error(s("search.messages.noteLoadFailed"))}catch(i){F.error(s("search.messages.loadFailed",{err:i?.message||i}))}finally{C.value=!1}}se(oe);const le={t:s,ws:e,EMPTY_IMG:x,RECENT_LS:G,RECENT_MAX:re,loadingIndex:q,loadingNote:C,searching:P,searched:B,notes:z,results:h,errorState:A,form:T,currentQuery:Q,recentQueries:w,activeTab:K,indexCategoryFilter:S,indexTagFilter:N,showNoteModal:E,currentNote:M,indexSummary:V,topScore:Y,noteColumns:W,filteredNotes:Z,modeLabel:H,categoryColor:X,scoreColor:$,escapeHtml:R,highlightSnippet:I,highlightContent:ee,loadRecent:U,pushRecent:a,clearRecent:p,rerunQuery:D,loadIndex:oe,runSearch:te,shellQuote:ne,searchSimilar:pe,viewNote:ve,ref:v,computed:j,onMounted:se,reactive:ie,get useI18n(){return ce},get ReloadOutlined(){return Me},get SearchOutlined(){return Ee},get ThunderboltOutlined(){return we},get BookOutlined(){return ze},get AppstoreOutlined(){return Oe},get TagsOutlined(){return Ae},get FileTextOutlined(){return Ne},get TrophyOutlined(){return Te},get EyeOutlined(){return Ce},get message(){return F},get Empty(){return ue},get useWsStore(){return de},get parseSearchResults(){return fe},get parseNotes(){return ge},get parseNote(){return me},get buildIndexSummary(){return _e},get detectSearchError(){return J},get formatSearchTime(){return Le},get SEARCH_MODES(){return Ie}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},Be={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Qe={class:"page-title"},je={class:"page-sub"},qe={key:0,class:"recent-row"},Ke={class:"recent-label"},He={class:"score-block"},Ue={class:"result-title"},Je={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Ge={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"11px"}},Ve={key:0,class:"result-snippet"},Ye=["innerHTML"],We={class:"filter-bar"},Ze={key:0,class:"tag-row"},Xe={class:"tag-row-label"},$e={class:"tag-count"},et={style:{color:"var(--text-primary)","font-weight":"500"}},tt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},rt={key:0,style:{color:"var(--text-muted)","font-size":"11px"}},at={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},ot={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},nt={key:0,style:{padding:"40px","text-align":"center"}},lt={key:1,style:{"padding-top":"8px"}},st={style:{"font-family":"monospace","font-size":"12px"}},it={key:0,style:{color:"var(--text-muted)"}},ct={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},dt={key:0,class:"note-content"},ut=["innerHTML"];function ft(n,o,s,e,x,q){const C=u("a-button"),P=u("a-space"),B=u("a-alert"),z=u("a-input"),h=u("a-col"),A=u("a-radio-button"),T=u("a-radio-group"),Q=u("a-input-number"),w=u("a-row"),K=u("a-form"),S=u("a-tag"),N=u("a-card"),E=u("a-statistic"),M=u("a-empty"),V=u("a-progress"),Y=u("a-list-item-meta"),W=u("a-list-item"),Z=u("a-list"),H=u("a-tab-pane"),X=u("a-table"),$=u("a-tabs"),R=u("a-spin"),I=u("a-descriptions-item"),ee=u("a-descriptions"),U=u("a-modal");return d(),g("div",null,[m("div",Be,[m("div",null,[m("h2",Qe,c(e.t("search.title")),1),m("p",je,c(e.t("search.subtitle")),1)]),r(P,null,{default:t(()=>[r(C,{loading:e.loadingIndex,onClick:e.loadIndex},{icon:t(()=>[r(e.ReloadOutlined)]),default:t(()=>[_(" "+c(e.t("search.refreshIndex")),1)]),_:1},8,["loading"])]),_:1})]),f(" noDb banner "),e.errorState.noDb?(d(),k(B,{key:0,type:"info","show-icon":"",message:e.t("search.noDb.message"),description:e.t("search.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):f("v-if",!0),f(" Search bar "),r(N,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"14px 16px"}},{default:t(()=>[r(K,{layout:"vertical",model:e.form,onSubmit:ke(e.runSearch,["prevent"])},{default:t(()=>[r(w,{gutter:12},{default:t(()=>[r(h,{span:14},{default:t(()=>[r(z,{value:e.form.query,"onUpdate:value":o[0]||(o[0]=a=>e.form.query=a),size:"large",placeholder:e.t("search.form.queryPlaceholder"),"allow-clear":"",onPressEnter:e.runSearch},{prefix:t(()=>[r(e.SearchOutlined)]),_:1},8,["value","placeholder"])]),_:1}),r(h,{span:4},{default:t(()=>[r(T,{value:e.form.mode,"onUpdate:value":o[1]||(o[1]=a=>e.form.mode=a),size:"large","button-style":"solid"},{default:t(()=>[(d(!0),g(O,null,L(e.SEARCH_MODES,a=>(d(),k(A,{key:a,value:a},{default:t(()=>[_(c(e.modeLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),r(h,{span:3},{default:t(()=>[r(Q,{value:e.form.topK,"onUpdate:value":o[2]||(o[2]=a=>e.form.topK=a),min:1,max:50,placeholder:e.t("search.form.topKPlaceholder"),size:"large",style:{width:"100%"}},null,8,["value","placeholder"])]),_:1}),r(h,{span:3},{default:t(()=>[r(C,{type:"primary",size:"large",loading:e.searching,block:"",onClick:e.runSearch},{icon:t(()=>[r(e.ThunderboltOutlined)]),default:t(()=>[_(" "+c(e.t("search.form.submit")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["model"]),f(" Recent queries chips "),e.recentQueries.length?(d(),g("div",qe,[m("span",Ke,c(e.t("search.recent.label")),1),(d(!0),g(O,null,L(e.recentQueries,a=>(d(),k(S,{key:a,color:"blue",class:"recent-chip",onClick:p=>e.rerunQuery(a)},{default:t(()=>[_(c(a),1)]),_:2},1032,["onClick"]))),128)),r(C,{size:"small",type:"link",danger:"",onClick:e.clearRecent},{default:t(()=>[_(c(e.t("search.recent.clear")),1)]),_:1})])):f("v-if",!0)]),_:1}),f(" Stat cards "),r(w,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.indexedNotes"),value:e.indexSummary.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[r(e.BookOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.categories"),value:e.indexSummary.categories.length,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:t(()=>[r(e.AppstoreOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.tags"),value:e.indexSummary.tags.length,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[r(e.TagsOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.results"),value:e.results.length,"value-style":{color:e.results.length>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:t(()=>[r(e.FileTextOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),r(h,{xs:24,sm:8,lg:4},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.topScore"),value:e.topScore,precision:3,"value-style":{color:e.scoreColor(e.topScore),fontSize:"20px"}},{prefix:t(()=>[r(e.TrophyOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),f(" Tabs "),r($,{activeKey:e.activeTab,"onUpdate:activeKey":o[5]||(o[5]=a=>e.activeTab=a),class:"search-tabs"},{default:t(()=>[f(" ── Results tab ───────────────────────────────────────── "),r(H,{key:"results",tab:e.t("search.tabs.results")},{default:t(()=>[e.searched?e.results.length?(d(),k(Z,{key:2,"data-source":e.results,"item-layout":"vertical",size:"large"},{renderItem:t(({item:a})=>[r(W,{class:"result-row"},{actions:t(()=>[r(C,{type:"link",size:"small",onClick:p=>e.viewNote(a.id)},{icon:t(()=>[r(e.EyeOutlined)]),default:t(()=>[_(" "+c(e.t("search.results.viewFull")),1)]),_:1},8,["onClick"])]),extra:t(()=>[m("div",He,[r(V,{type:"circle",percent:Math.round(Math.min(1,a.score)*100),"stroke-color":e.scoreColor(a.score),format:()=>a.score.toFixed(3),width:60},null,8,["percent","stroke-color","format"])])]),default:t(()=>[r(Y,null,{title:t(()=>[m("span",Ue,c(a.title||e.t("search.results.noTitle")),1),r(S,{color:e.categoryColor(a.category),style:{"margin-left":"8px"}},{default:t(()=>[_(c(a.category),1)]),_:2},1032,["color"])]),description:t(()=>[m("span",Je,c(a.id.slice(0,16)),1),m("span",Ge,c(e.formatSearchTime(a.createdAt)),1)]),_:2},1024),a.snippet?(d(),g("div",Ve,[m("span",{innerHTML:e.highlightSnippet(a.snippet,e.currentQuery)},null,8,Ye)])):f("v-if",!0)]),_:2},1024)]),_:1},8,["data-source"])):(d(),k(M,{key:1,description:e.t("search.results.noMatch",{query:e.currentQuery}),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"])):(d(),k(M,{key:0,description:e.t("search.results.promptEmpty"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),f(" ── Index browser tab ────────────────────────────────── "),r(H,{key:"index",tab:e.t("search.tabs.index")},{default:t(()=>[m("div",We,[r(T,{value:e.indexCategoryFilter,"onUpdate:value":o[3]||(o[3]=a=>e.indexCategoryFilter=a),size:"small","button-style":"solid"},{default:t(()=>[r(A,{value:""},{default:t(()=>[_(c(e.t("search.index.allCategories")),1)]),_:1}),(d(!0),g(O,null,L(e.indexSummary.categories.slice(0,6),a=>(d(),k(A,{key:a.name,value:a.name},{default:t(()=>[_(c(a.name)+" ("+c(a.count)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),r(z,{value:e.indexTagFilter,"onUpdate:value":o[4]||(o[4]=a=>e.indexTagFilter=a),placeholder:e.t("search.index.tagFilterPlaceholder"),"allow-clear":"",size:"small",style:{"max-width":"180px"}},null,8,["value","placeholder"])]),f(" Top tags chips "),e.indexSummary.tags.length?(d(),g("div",Ze,[m("span",Xe,c(e.t("search.index.topTagsLabel")),1),(d(!0),g(O,null,L(e.indexSummary.tags.slice(0,12),a=>(d(),k(S,{key:a.name,color:e.indexTagFilter===a.name?"blue":"default",class:"tag-chip",onClick:p=>e.indexTagFilter=e.indexTagFilter===a.name?"":a.name},{default:t(()=>[_(c(a.name)+" ",1),m("span",$e,c(a.count),1)]),_:2},1032,["color","onClick"]))),128))])):f("v-if",!0),r(X,{columns:e.noteColumns,"data-source":e.filteredNotes,pagination:{pageSize:20,showTotal:a=>e.t("search.totals.rows",{count:a})},size:"small",loading:e.loadingIndex,style:{background:"var(--bg-card)"}},{bodyCell:t(({column:a,record:p})=>[a.key==="title"?(d(),g(O,{key:0},[m("span",et,c(p.title||e.t("search.results.noTitle")),1),m("div",tt,c(p.id.slice(0,16)),1)],64)):f("v-if",!0),a.key==="category"?(d(),k(S,{key:1,color:e.categoryColor(p.category)},{default:t(()=>[_(c(p.category),1)]),_:2},1032,["color"])):f("v-if",!0),a.key==="tags"?(d(),g(O,{key:2},[(d(!0),g(O,null,L(p.tags.slice(0,4),D=>(d(),k(S,{key:D,color:"default",style:{"font-size":"11px"}},{default:t(()=>[_(c(D),1)]),_:2},1024))),128)),p.tags.length>4?(d(),g("span",rt,"+"+c(p.tags.length-4),1)):f("v-if",!0)],64)):f("v-if",!0),a.key==="createdAt"?(d(),g("span",at,c(e.formatSearchTime(p.createdAt)),1)):f("v-if",!0),a.key==="action"?(d(),g(O,{key:4},[r(C,{size:"small",type:"link",onClick:D=>e.viewNote(p.id)},{default:t(()=>[_(c(e.t("search.index.rowAction.view")),1)]),_:1},8,["onClick"]),r(C,{size:"small",type:"link",onClick:D=>e.searchSimilar(p)},{default:t(()=>[_(c(e.t("search.index.rowAction.similar")),1)]),_:1},8,["onClick"])],64)):f("v-if",!0)]),emptyText:t(()=>[m("div",ot,[r(e.BookOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),_(" "+c(e.indexCategoryFilter||e.indexTagFilter?e.t("search.empty.filtered"):e.t("search.empty.noNotes")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),f(" ── Note detail modal ─────────────────────────────────── "),r(U,{open:e.showNoteModal,"onUpdate:open":o[6]||(o[6]=a=>e.showNoteModal=a),title:e.t("search.note.title",{title:e.currentNote?.title||""}),width:780,footer:null},{default:t(()=>[e.loadingNote?(d(),g("div",nt,[r(R)])):e.currentNote?(d(),g("div",lt,[r(ee,{column:2,size:"small",bordered:""},{default:t(()=>[r(I,{label:e.t("search.note.id"),span:2},{default:t(()=>[m("span",st,c(e.currentNote.id),1)]),_:1},8,["label"]),r(I,{label:e.t("search.note.category")},{default:t(()=>[r(S,{color:e.categoryColor(e.currentNote.category)},{default:t(()=>[_(c(e.currentNote.category),1)]),_:1},8,["color"])]),_:1},8,["label"]),r(I,{label:e.t("search.note.tags")},{default:t(()=>[(d(!0),g(O,null,L(e.currentNote.tags,a=>(d(),k(S,{key:a,color:"default"},{default:t(()=>[_(c(a),1)]),_:2},1024))),128)),e.currentNote.tags.length?f("v-if",!0):(d(),g("span",it,"—"))]),_:1},8,["label"]),r(I,{label:e.t("search.note.createdAt")},{default:t(()=>[_(c(e.formatSearchTime(e.currentNote.createdAt)),1)]),_:1},8,["label"]),r(I,{label:e.t("search.note.updatedAt")},{default:t(()=>[_(c(e.formatSearchTime(e.currentNote.updatedAt)),1)]),_:1},8,["label"])]),_:1}),m("h4",ct,c(e.t("search.note.content")),1),e.currentNote.content?(d(),g("div",dt,[m("span",{innerHTML:e.highlightContent(e.currentNote.content,e.currentQuery)},null,8,ut)])):(d(),k(M,{key:1,description:e.t("search.note.emptyContent"),image:e.EMPTY_IMG},null,8,["description","image"]))])):f("v-if",!0)]),_:1},8,["open","title"])])}const ht=Se(Pe,[["render",ft],["__scopeId","data-v-d2b94ce3"],["__file","/tmp/cc-web-panel-WaICZP/repo/packages/web-panel/src/views/Search.vue"]]);export{ht as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{E as F,b as D,r as R,I as p,J as c,U as _,c as n,K as a,S,V as x,o as I,x as V,P as i,Q as k,R as r,F as T,Z as O}from"./vendor-BvqAck49.js";import{u as P,_ as E}from"./index-IHn9LQeI.js";import{R as U}from"./icons-DP3uiYxy.js";const B=F("tasks",()=>{const y=R([]),l=R(!1);let u=null,t=null,d=null;const b=D(()=>y.value.filter(e=>e.status==="running")),v=D(()=>y.value.filter(e=>e.status==="pending")),w=D(()=>y.value.filter(e=>e.status==="completed"||e.status==="failed"||e.status==="timeout"));async function s(){const e=P();l.value=!0;try{const g=await e.sendRaw({type:"tasks-list"});g&&Array.isArray(g.tasks)&&(y.value=g.tasks)}catch{}finally{l.value=!1}}async function m(e){const g=P();try{await g.sendRaw({type:"tasks-stop",taskId:e})}catch{}finally{await s()}}const f=R(null);function h(e=5e3){N(),s(),u=setInterval(s,e),C()}function N(){u&&(clearInterval(u),u=null),t&&(t(),t=null),d&&(clearTimeout(d),d=null)}function C(){const e=P();if(t)return;const g=z=>{z.type==="task:notification"&&z.payload?.task&&(f.value=z.payload.task,s(),d&&clearTimeout(d),d=setTimeout(()=>{f.value=null,d=null},8e3))};t=e.onRuntimeEvent(g)}function A(e){return!e||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${(e/6e4).toFixed(1)}m`}function o(e){switch(e){case"running":return"processing";case"pending":return"default";case"completed":return"success";case"failed":return"error";case"timeout":return"warning";default:return"default"}}return{tasks:y,loading:l,running:b,pending:v,completed:w,lastNotification:f,fetchTasks:s,stopTask:m,startPolling:h,stopPolling:N,formatDuration:A,getStatusColor:o}}),L={__name:"Tasks",setup(y,{expose:l}){l();const u=B(),t=[{title:"状态",key:"status",width:90},{title:"描述",key:"description",ellipsis:!0},{title:"类型",dataIndex:"type",width:100},{title:"耗时",key:"duration",width:90},{title:"创建时间",key:"createdAt",width:180},{title:"结果",key:"result",ellipsis:!0},{title:"操作",key:"action",width:80}];function d(s){return s.status==="running"&&s.startedAt?u.formatDuration(Date.now()-s.startedAt):s.completedAt&&s.startedAt?u.formatDuration(s.completedAt-s.startedAt):"-"}function b(s){return s?new Date(s).toLocaleString():"-"}function v(s,m){return s?s.length>m?`${s.slice(0,m)}...`:s:""}I(()=>u.startPolling(5e3)),V(()=>u.stopPolling());const w={store:u,columns:t,getDuration:d,formatTime:b,truncate:v,onMounted:I,onUnmounted:V,get ReloadOutlined(){return U},get useTasksStore(){return B}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}},W={class:"page-header"},Z={key:0,class:"error-text"},j={key:1},J={class:"task-header"},K={class:"task-desc"},M={class:"task-id"},Q={class:"task-meta"},q=["title"],G={key:0,class:"error-text"},H={key:1,class:"success-text"},X={key:2,class:"muted-text"};function Y(y,l,u,t,d,b){const v=p("a-button"),w=p("a-space"),s=p("a-alert"),m=p("a-statistic"),f=p("a-card"),h=p("a-col"),N=p("a-row"),C=p("a-tag"),A=p("a-table");return i(),c("div",null,[_("div",W,[l[3]||(l[3]=_("div",null,[_("h2",{class:"page-title"},"后台任务"),_("p",{class:"page-sub"},"查看后台任务队列、实时通知和任务执行结果。")],-1)),n(w,null,{default:a(()=>[n(v,{ghost:"",loading:t.store.loading,onClick:l[0]||(l[0]=o=>t.store.fetchTasks())},{icon:a(()=>[n(t.ReloadOutlined)]),default:a(()=>[l[2]||(l[2]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),t.store.lastNotification?(i(),S(s,{key:0,type:t.store.lastNotification.status==="completed"?"success":"error","show-icon":"",closable:"",class:"banner",onClose:l[1]||(l[1]=o=>t.store.lastNotification=null)},{message:a(()=>[k(" 任务"+r(t.store.lastNotification.status==="completed"?"完成":"结束")+": "+r(t.store.lastNotification.description||t.store.lastNotification.id.slice(0,16)),1)]),description:a(()=>[t.store.lastNotification.error?(i(),c("span",Z,r(t.store.lastNotification.error),1)):t.store.lastNotification.result?(i(),c("span",j,r(t.truncate(String(t.store.lastNotification.result),120)),1)):x("v-if",!0)]),_:1},8,["type"])):x("v-if",!0),n(N,{gutter:[16,16],class:"stats-row"},{default:a(()=>[n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"全部任务",value:t.store.tasks.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"运行中",value:t.store.running.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"等待中",value:t.store.pending.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"已完成",value:t.store.completed.length},null,8,["value"])]),_:1})]),_:1})]),_:1}),t.store.running.length>0?(i(),S(f,{key:1,title:"运行中的任务",class:"panel-card",size:"small"},{default:a(()=>[(i(!0),c(T,null,O(t.store.running,o=>(i(),c("div",{key:o.id,class:"task-item running"},[_("div",J,[n(C,{color:t.store.getStatusColor(o.status)},{default:a(()=>[k(r(o.status.toUpperCase()),1)]),_:2},1032,["color"]),_("span",K,r(o.description),1),_("span",M,r(o.id.slice(0,16)),1)]),_("div",Q,[_("span",null,"类型: "+r(o.type||"-"),1),_("span",null,"已运行: "+r(t.store.formatDuration(Date.now()-o.startedAt)),1),n(v,{size:"small",danger:"",onClick:e=>t.store.stopTask(o.id)},{default:a(()=>[...l[4]||(l[4]=[k("停止",-1)])]),_:1},8,["onClick"])])]))),128))]),_:1})):x("v-if",!0),n(f,{class:"panel-card"},{default:a(()=>[n(A,{columns:t.columns,"data-source":t.store.tasks,pagination:{pageSize:15,size:"small"},loading:t.store.loading,"row-key":"id",size:"small"},{bodyCell:a(({column:o,record:e})=>[o.key==="status"?(i(),S(C,{key:0,color:t.store.getStatusColor(e.status)},{default:a(()=>[k(r(e.status),1)]),_:2},1032,["color"])):o.key==="description"?(i(),c("span",{key:1,title:e.command},r(e.description),9,q)):o.key==="duration"?(i(),c(T,{key:2},[k(r(t.getDuration(e)),1)],64)):o.key==="createdAt"?(i(),c(T,{key:3},[k(r(t.formatTime(e.createdAt)),1)],64)):o.key==="result"?(i(),c(T,{key:4},[e.error?(i(),c("span",G,r(t.truncate(e.error,60)),1)):e.result?(i(),c("span",H,r(t.truncate(String(e.result),60)),1)):(i(),c("span",X,"-"))],64)):o.key==="action"?(i(),c(T,{key:5},[e.status==="running"?(i(),S(v,{key:0,size:"small",danger:"",onClick:g=>t.store.stopTask(e.id)},{default:a(()=>[...l[5]||(l[5]=[k(" 停止 ",-1)])]),_:1},8,["onClick"])):x("v-if",!0)],64)):x("v-if",!0)]),_:1},8,["data-source","loading"])]),_:1})])}const st=E(L,[["render",Y],["__scopeId","data-v-da5ff6a2"],["__file","/tmp/cc-web-panel-WaICZP/repo/packages/web-panel/src/views/Tasks.vue"]]);export{st as default};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./xterm-BZcWGsqw.js","./markdown-CsiA8-E5.js","./markdown-Dfs9RUU9.css","./addon-fit-CK6X9sAG.js","./xterm-DFuMZ0ql.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{u as fe,_ as me,d as V,e as U}from"./index-IHn9LQeI.js";import{I as z,J as x,U as _,Q as D,S as K,K as T,V as R,c as A,F as Q,Z as Y,R as E,o as G,f as H,w as $,n as q,b as ee,r as S,P as y,_ as ve,a2 as we,a3 as he,a4 as _e}from"./vendor-BvqAck49.js";import{R as ye,b as pe,as as ge}from"./icons-DP3uiYxy.js";const k=new Map,C=new Map,I=new Set,N=new Set;let te=!1;function xe(c){te||(te=!0,c.onMessage(o=>{if(!(!o||typeof o.type!="string")){if(o.type==="terminal.stdout"){const{sessionId:s,data:e,seq:i}=o.payload||{};if(!s)return;let w;try{const d=atob(e||""),f=new Uint8Array(d.length);for(let n=0;n<d.length;n++)f[n]=d.charCodeAt(n);w=new TextDecoder("utf-8").decode(f)}catch{w=""}const u={sessionId:s,data:w,seq:i};k.get(s)?.forEach(d=>d(u)),I.forEach(d=>d(u))}else if(o.type==="terminal.exit"){const{sessionId:s,exitCode:e,signal:i}=o.payload||{};if(!s)return;const w={sessionId:s,exitCode:e,signal:i};C.get(s)?.forEach(u=>u(w)),N.forEach(u=>u(w))}}}))}function ne(c){const o=new TextEncoder().encode(c);let s="";for(let e=0;e<o.length;e++)s+=String.fromCharCode(o[e]);return btoa(s)}function ae(c){const o=atob(c||""),s=new Uint8Array(o.length);for(let e=0;e<o.length;e++)s[e]=o.charCodeAt(e);return new TextDecoder("utf-8").decode(s)}function oe(){const c=fe();xe(c);async function o(n={}){const a=await c.sendRaw({type:"terminal.create",payload:{shell:n.shell,cwd:n.cwd,env:n.env,cols:n.cols,rows:n.rows}});if(a.ok===!1)throw new Error(a.error||"terminal_create_failed");return a.result??a}async function s(){const n=await c.sendRaw({type:"terminal.list",payload:{}});if(n.ok===!1)throw new Error(n.error||"terminal_list_failed");const a=n.result??n;return Array.isArray(a.sessions)?a.sessions:[]}async function e(n,a){const r=await c.sendRaw({type:"terminal.stdin",payload:{sessionId:n,data:ne(String(a))}});if(r.ok===!1)throw new Error(r.error||"terminal_stdin_failed");return r.result??r}async function i(n,a,r){const h=await c.sendRaw({type:"terminal.resize",payload:{sessionId:n,cols:a,rows:r}});if(h.ok===!1)throw new Error(h.error||"terminal_resize_failed");return h.result??h}async function w(n){const a=await c.sendRaw({type:"terminal.close",payload:{sessionId:n}});if(a.ok===!1)throw new Error(a.error||"terminal_close_failed");return a.result??a}async function u(n,a=0){const r=await c.sendRaw({type:"terminal.history",payload:{sessionId:n,fromSeq:a}});if(r.ok===!1)throw new Error(r.error||"terminal_history_failed");const h=r.result??r;return{truncated:!!h.truncated,chunks:(h.chunks||[]).map(P=>({seq:P.seq,data:ae(P.data)}))}}function d(n,a){return n?(k.has(n)||k.set(n,new Set),k.get(n).add(a),()=>{k.get(n)?.delete(a),k.get(n)?.size===0&&k.delete(n)}):(I.add(a),()=>I.delete(a))}function f(n,a){return n?(C.has(n)||C.set(n,new Set),C.get(n).add(a),()=>{C.get(n)?.delete(a),C.get(n)?.size===0&&C.delete(n)}):(N.add(a),()=>N.delete(a))}return{create:o,list:s,stdin:e,resize:i,close:w,history:u,onStdout:d,onExit:f,_internal:{stdoutSubs:k,exitSubs:C,toBase64Utf8:ne,fromBase64Utf8:ae}}}const Se={__name:"Terminal",setup(c,{expose:o}){o();const s=oe(),e=S([]),i=S(null),w=S("pwsh"),u=S(!1),d=S(!1),f=S(""),n=S(""),a=S([]),r=[{value:"pwsh",label:"PowerShell"},{value:"cmd",label:"CMD"},{value:"bash",label:"Bash"},{value:"wsl",label:"WSL"}],h=ee(()=>e.value.find(t=>t.id===i.value));function P(t){return t?t.slice(0,8):""}let O=null,M=null;async function F(){if(O)return{xtermMod:O,fitAddonMod:M};try{O=await U(()=>import("./xterm-BZcWGsqw.js").then(t=>t.x),__vite__mapDeps([0,1,2]),import.meta.url),M=await U(()=>import("./addon-fit-CK6X9sAG.js").then(t=>t.a),__vite__mapDeps([3,1,2]),import.meta.url),await U(()=>Promise.resolve({}),__vite__mapDeps([4]),import.meta.url)}catch(t){throw n.value="xterm 资源加载失败:"+(t?.message||"未知错误"),t}return{xtermMod:O,fitAddonMod:M}}async function B(t){await q();const{xtermMod:l,fitAddonMod:p}=await F(),b=a.value.find(v=>v?.dataset?.sessionId===t.id);if(!b)return;const m=new l.Terminal({cursorBlink:!0,fontFamily:'Consolas, "Courier New", monospace',fontSize:13,theme:{background:"#1e1e1e",foreground:"#d4d4d4"},convertEol:!1}),L=new p.FitAddon;m.loadAddon(L),m.open(b);try{L.fit()}catch{}t.xterm=m,t.fitAddon=L;const ie=m.onData(v=>{s.stdin(t.id,v).catch(g=>{String(g?.message||"").includes("dangerous_keyword_blocked")?V.warning("该命令被桌面端拦截(高危关键字)"):V.error("stdin 失败: "+(g?.message||g))})}),ce=s.onStdout(t.id,({data:v,seq:g})=>{t.lastSeq=g,m.write(v)}),de=s.onExit(t.id,({exitCode:v,signal:g})=>{t.alive=!1,t.exitCode=v,t.signal=g,m.writeln(`\r
|
|
3
|
-
\x1B[33m[session exited, code=${v}, signal=${g??"-"}]\x1B[0m`)});t.offs=()=>{try{ie.dispose?.()}catch{}ce(),de()};try{const{chunks:v,truncated:g}=await s.history(t.id,0);g&&m.writeln("\x1B[2m[history truncated — earlier output was evicted]\x1B[0m");for(const J of v)m.write(J.data),t.lastSeq=J.seq}catch(v){m.writeln(`\x1B[31m[history fetch failed: ${v?.message||v}]\x1B[0m`)}const j=new ResizeObserver(()=>{try{L.fit(),s.resize(t.id,m.cols,m.rows).catch(()=>{})}catch{}});j.observe(b);const ue=t.offs;t.offs=()=>{try{j.disconnect()}catch{}ue()}}async function re(){u.value=!0,f.value="";try{const t=await s.create({shell:w.value,cols:80,rows:24}),l={id:t.sessionId,shell:t.shell,cwd:"",alive:!0,lastSeq:0,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};e.value.push(l),i.value=l.id,await B(l)}catch(t){f.value=t?.message||String(t)}finally{u.value=!1}}async function se(t){try{await s.close(t)}catch(l){f.value=l?.message||String(l)}setTimeout(()=>W(t),500)}function W(t){const l=e.value.findIndex(b=>b.id===t);if(l===-1)return;const p=e.value[l];try{p.offs?.()}catch{}try{p.xterm?.dispose?.()}catch{}e.value.splice(l,1),i.value===t&&(i.value=e.value[0]?.id||null)}function le(t){i.value=t,q(()=>{const l=e.value.find(p=>p.id===t);try{l?.fitAddon?.fit()}catch{}})}async function X(){d.value=!0,f.value="";try{const t=await s.list();for(const l of t){const p=e.value.find(m=>m.id===l.id);if(p){p.alive=l.alive,p.lastSeq=l.lastSeq;continue}const b={id:l.id,shell:l.shell,cwd:l.cwd,alive:l.alive,lastSeq:l.lastSeq,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};e.value.push(b),await B(b)}!i.value&&e.value.length>0&&(i.value=e.value[0].id)}catch(t){f.value=t?.message||String(t)}finally{d.value=!1}}G(async()=>{await X()}),H(()=>{for(const t of e.value){try{t.offs?.()}catch{}try{t.xterm?.dispose?.()}catch{}}}),$(i,()=>{q(()=>{const t=h.value;try{t?.fitAddon?.fit()}catch{}})});const Z={term:s,sessions:e,activeId:i,newShell:w,creating:u,loadingList:d,error:f,warning:n,xtermContainers:a,shellOptions:r,active:h,shortId:P,get xtermMod(){return O},set xtermMod(t){O=t},get fitAddonMod(){return M},set fitAddonMod(t){M=t},loadXterm:F,mountXterm:B,onCreate:re,onClose:se,removeSession:W,activate:le,refreshList:X,ref:S,computed:ee,onMounted:G,onBeforeUnmount:H,nextTick:q,watch:$,get message(){return V},get PlusOutlined(){return ge},get CloseOutlined(){return pe},get ReloadOutlined(){return ye},get useTerminal(){return oe}};return Object.defineProperty(Z,"__isScriptSetup",{enumerable:!1,value:!0}),Z}},be={class:"terminal-page"},ke={class:"terminal-header"},Ce={class:"page-sub"},Ae={class:"terminal-body"},Ee={class:"session-tabs"},Oe=["onClick"],Te={class:"session-shell"},Re={class:"session-id"},Me={key:0,class:"session-empty"},ze={class:"xterm-host"},Pe=["data-session-id"],Le={key:0,class:"xterm-placeholder"},De={key:1,class:"terminal-footer"},qe={key:0,class:"footer-exit"};function Be(c,o,s,e,i,w){const u=z("a-tag"),d=z("a-select"),f=z("a-button"),n=z("a-space"),a=z("a-alert");return y(),x("div",be,[_("div",ke,[_("div",null,[o[3]||(o[3]=_("h2",{class:"page-title"},"远程终端",-1)),_("p",Ce,[o[2]||(o[2]=D(" 桌面端托管的 PTY 会话;Android 端可远程操控同一通道 ",-1)),e.warning?(y(),K(u,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:T(()=>[D(E(e.warning),1)]),_:1})):R("v-if",!0)])]),A(n,null,{default:T(()=>[A(d,{value:e.newShell,"onUpdate:value":o[0]||(o[0]=r=>e.newShell=r),style:{width:"130px"},size:"small",options:e.shellOptions},null,8,["value"]),A(f,{type:"primary",size:"small",loading:e.creating,onClick:e.onCreate},{icon:T(()=>[A(e.PlusOutlined)]),default:T(()=>[o[4]||(o[4]=D(" 新会话 ",-1))]),_:1},8,["loading"]),A(f,{size:"small",loading:e.loadingList,onClick:e.refreshList},{icon:T(()=>[A(e.ReloadOutlined)]),default:T(()=>[o[5]||(o[5]=D(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),e.error?(y(),K(a,{key:0,message:e.error,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"12px"},onClose:o[1]||(o[1]=r=>e.error="")},null,8,["message"])):R("v-if",!0),_("div",Ae,[_("div",Ee,[(y(!0),x(Q,null,Y(e.sessions,r=>(y(),x("div",{key:r.id,class:ve(["session-tab",{active:r.id===e.activeId,dead:!r.alive}]),onClick:h=>e.activate(r.id)},[_("span",Te,E(r.shell),1),_("span",Re,E(e.shortId(r.id)),1),A(e.CloseOutlined,{class:"session-close",onClick:we(h=>e.onClose(r.id),["stop"])},null,8,["onClick"])],10,Oe))),128)),e.sessions.length===0?(y(),x("div",Me,' 点击 "新会话" 创建第一个终端 ')):R("v-if",!0)]),_("div",ze,[(y(!0),x(Q,null,Y(e.sessions,r=>he((y(),x("div",{key:r.id,ref_for:!0,ref:"xtermContainers","data-session-id":r.id,class:"xterm-container"},null,8,Pe)),[[_e,r.id===e.activeId]])),128)),e.sessions.length===0?(y(),x("div",Le,[...o[6]||(o[6]=[_("span",null,"无活跃会话",-1)])])):R("v-if",!0)])]),e.active?(y(),x("div",De,[_("span",null,E(e.active.shell)+" · "+E(e.active.cwd||"(默认 cwd)")+" · seq "+E(e.active.lastSeq),1),e.active.alive?R("v-if",!0):(y(),x("span",qe,"已退出 (code="+E(e.active.exitCode??"-")+")",1))])):R("v-if",!0)])}const Ne=me(Se,[["render",Be],["__scopeId","data-v-65366a29"],["__file","/tmp/cc-web-panel-WaICZP/repo/packages/web-panel/src/views/Terminal.vue"]]);export{Ne as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{O as r}from"./index-IHn9LQeI.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-B_Xqx3Ul.js";import{U as t}from"./index-IHn9LQeI.js";import"./vendor-BvqAck49.js";import"./index-eLphHYgM.js";import"./icons-DP3uiYxy.js";const s=t(o);export{s as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-CVXQQg_a.js";import{U as t}from"./index-IHn9LQeI.js";import"./vendor-BvqAck49.js";import"./responsiveObserve-BsNIdQzh.js";import"./useFlexGapSupport-Bf1CATNE.js";import"./styleChecker-qHsriHs9.js";import"./index-eLphHYgM.js";import"./icons-DP3uiYxy.js";const l=t(o);export{l as default};
|