chainlesschain 0.162.46 → 0.162.47
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-QzHleqCS.js → AIOps-BBjFOl4N.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CZ3F-KVY.js → ActionButton-B7A6lHz3.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CHml-drq.js → Analytics-DZgNxdvw.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-a-fczvRH.js → AppLayout-CFbPWVnh.js} +5 -5
- package/src/assets/web-panel/assets/{Audit-CtMWsXwm.js → Audit-Ao9RxevG.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-ErWTcS0A.js → Backup-B1AGqahI.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-B4w2b2dA.js → BaseInput-M01bA2JM.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CFPKVfmV.js → Chat-CC0Gmd9k.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DKe4yjqq.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-C4vasfJc.js → Checkbox-CpEqAg5P.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DHmDAbSg.js → Codegen-9c1H2P_L.js} +1 -1
- package/src/assets/web-panel/assets/{Col-LhgveyhM.js → Col-sH2Obo8q.js} +1 -1
- package/src/assets/web-panel/assets/{Community-CB8gtudt.js → Community-DyzjH37r.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CTndsUSy.js → Compact-DsNatLOG.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CCpGUHPm.js → Compliance-B3ws7qwL.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CQmJiOM_.js → Cowork-odGfUMsv.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-TrTmpnSB.js → Cron-bxO6NLDR.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DvaR1Xq4.js → Crosschain-xHCPQpE9.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CdDdiRs3.js → DID-3l7HvzNC.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-S6gCBQDc.js → Dashboard-BNzT5YBj.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CWO-Kwzl.js → Dropdown-DZynMYpG.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-Crnrr1-p.js → EmailListRenderer-6HZ2XA9g.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-OpG9ZtfR.js → FamilyGuardDashboard-DqzqNzRP.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-B0sybW7G.js → Federation-CI7lf1MF.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DjHMvxwJ.js → FormItemContext-D2m3YZ-k.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DtU5cWwE.js → GenericCardRenderer-Bwcc-9EB.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BhOjZX2a.js → Git-C7qN3bA1.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-D3_hjjA-.js → Governance-JfuugS1c.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DwxLXmgA.js → Inference-BNsHm2IH.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-C8-FVs02.js → KnowledgeGraph-CTH_FiL1.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CrHjnzfr.js → Logs-CxcfBcmS.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-KW1Am18o.js → Marketplace-B9PU3qlx.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-ezYH1J8m.js → McpTools-BlvQpnvj.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-Dcv8Gume.js → Memory-Diiig9gp.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-v18J0LN4.js → MobileBridge-CGfUn4xi.js} +2 -2
- package/src/assets/web-panel/assets/MobileProjects-CFvH6A9E.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-Cm35-vh_.js → Mtc-CT_1x1Gr.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-DyeKAlI_.js → MtcAudit-DPAjU1Qn.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-Dy-imleB.js → Multisig-nks2HW0C.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DMVmWNAH.js → NLProgramming-BWd74a91.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Dq6oHKbl.js → Notes-B342yG3u.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CCaSupDi.js → NotificationSettings-C9kjn20B.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-DKQ3FPUN.js +1 -0
- package/src/assets/web-panel/assets/{Organization-8TF96XtV.js → Organization-Ch-qkiyP.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BnYnh84b.js → Overflow-DeV865TY.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CZk3Qkec.js → P2P-9pzyAAE1.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-D1HrzBx2.js → PdhVaultBrowser-oGgQiWpR.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CwJ6hcaI.js → Permissions-MPDfvUva.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BGnPTj1G.js → PersonalDataHub-Es8GFY4_.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-BzXhXLBz.js → Pipeline-R10lJHtN.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BaVQ3GwL.js → Privacy-8YMg8xrV.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Bik3h4R7.js → ProjectInit-B-L3DMBv.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CIuC6Hpr.js → ProjectSettings-pR4l7GCe.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-DLjnWEe6.js → Projects-5vaXw-7d.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-mhxZrHiK.js → Providers-C_E-G6Bh.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Dk9mayL0.js → QuickAsk-CM-FSYbK.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BHC2sBZY.js → Recommend-DcwFptAP.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-DV26B11J.js → Reputation-DJKj97w-.js} +1 -1
- package/src/assets/web-panel/assets/{Row-bJlVEnFC.js → Row-BfI2mGUm.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-D_XucmWY.js → RssFeed-D6tzthT0.js} +2 -2
- package/src/assets/web-panel/assets/{Search-uKXcm_Kf.js → Search-CkxIxA5y.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DEzqsQLn.js → Security-BeTfFgoX.js} +4 -4
- package/src/assets/web-panel/assets/{Services-I8qKgcom.js → Services-BahX89X1.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BmrglBMu.js → Skeleton-55na3k97.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CHN4ZDyP.js → Skills-DZ-dxsiR.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Ca6FsUS2.js → Sla-BUTClrI0.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CP8IikWb.js → SpeechSettings-C0c2AmSU.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Bqp-kPAA.js → SyncSettings-Vr5zzdPz.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-C7FvJjze.js → Tasks-BrouZA03.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-Bq51Irli.js → Templates-DnaU_7nb.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-OTducEVg.js → Tenant-1dw4SFBA.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-Pe1vBvOm.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-kCmFL2wc.js → TimelineRenderer-dDxMvAvM.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BUfD650M.js → Tokens-CPJMLjkE.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CqpM6xE7.js → Trigger-B1IWp6HK.js} +1 -1
- package/src/assets/web-panel/assets/{Trust--4gS7a0j.js → Trust-iswzFvfA.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B7wfki-b.js → UkeySign-CuMmDUvU.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-FwDEX2S-.js → VideoEditing-BguHSBQ5.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DS_c2rMk.js → Wallet-CW4PFXSw.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-CdMhP-GP.js → WebAuthn-YOO0lqjJ.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-DVvpoOmg.js → WorkflowEditor-A_z3yLuG.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BQyTT2BS.js → chat-BSHj9uiJ.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DvylfUTx.js → colors-D7gA-kvN.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Budvh2nW.js → compact-item-ChDt0wUv.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DkNa84zG.js → createContext-5UAhDsNU.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-NW6VMT5L.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Dc1juUIf.js → hasIn-7ysmGHSf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCv_FUY5.js → index--UCy6rsJ.js} +1 -1
- package/src/assets/web-panel/assets/index-A6oY6RQQ.js +1 -0
- package/src/assets/web-panel/assets/{index-DecFF9je.js → index-B6OX-6N1.js} +1 -1
- package/src/assets/web-panel/assets/{index-DO9Lvv1w.js → index-BGlolJwU.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cz41iB_M.js → index-BLoQ2FkI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKoWcis9.js → index-BTzZlYgQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMCqz0wy.js → index-B_xBUmAE.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQJA__yH.js → index-BcPEgfGF.js} +1 -1
- package/src/assets/web-panel/assets/{index-D2dcbmzD.js → index-BhsGGFa4.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0u5DW4Z.js → index-BoCy4bxa.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgxdM7b_.js → index-BzPxVTI2.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWcGURYh.js → index-C4nXq9eB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BC08UMEf.js → index-C62SpQws.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_0nyIY9.js → index-C93TfkpQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BEviVulf.js → index-CGVsJplV.js} +1 -1
- package/src/assets/web-panel/assets/{index-C8he-Xo0.js → index-CHdEHlNY.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1X5QpSy.js → index-COwKdUAS.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bk_Uhu49.js → index-Cl10KB1R.js} +1 -1
- package/src/assets/web-panel/assets/index-Cn2g4vqt.js +1 -0
- package/src/assets/web-panel/assets/{index-YVdWdhK_.js → index-CylU_ot3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DwJ0d_2Z.js → index-D-pJNNc5.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRNJnXik.js → index-D9R6sJiP.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7FYxxFT.js → index-DSRnnGez.js} +3 -3
- package/src/assets/web-panel/assets/{index-By8Bs_eN.js → index-Db4hf2WV.js} +1 -1
- package/src/assets/web-panel/assets/{index-yx5Y6xb7.js → index-DcKVERvm.js} +1 -1
- package/src/assets/web-panel/assets/{index-D74oTZL7.js → index-DfjMbFZA.js} +1 -1
- package/src/assets/web-panel/assets/{index-jTGSFnNF.js → index-Dj3IHF24.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbCIBifY.js → index-Dq4fd0cB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCD2L2SI.js → index-DslmMjVo.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgYKjtNP.js → index-DttrXREN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTzrvuB0.js → index-HUiKkQOf.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGHLsKyb.js → index-NtFFgW-x.js} +1 -1
- package/src/assets/web-panel/assets/{index-TsPv8m1Z.js → index-QPBJl4wk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTnZ44a_.js → index-WM_jYoK8.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFMS9PKh.js → index-ZOmjAajS.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTcZkWJ7.js → index-_8xZf-zU.js} +1 -1
- package/src/assets/web-panel/assets/{index-eD_MN29w.js → index-pk9WOpeN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYuozZuh.js → index-s_MPIulF.js} +1 -1
- package/src/assets/web-panel/assets/{index-DxCPTrC-.js → index-trVj-RG1.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-gLjyJG0Q.js → initDefaultProps-BcWdcWH2.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BtXv1r2p.js → motion-D-GC86LC.js} +1 -1
- package/src/assets/web-panel/assets/{move-BgFqW2gA.js → move-7N01T4vz.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CeIwl-eJ.js → omit-B8_G8lAi.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-VlY4igbs.js → pickAttrs-BeEwgLq8.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-B9Wjn3oR.js → placementArrow-CiQwkkN_.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BBgHTvYX.js → responsiveObserve-CtfIP2YM.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DWw81KAi.js → slide-DnA-Z3fK.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Bsho38w-.js → statusUtils-Ckaf7hg9.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BNvVEdm1.js → styleChecker-CE7d6-LQ.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DG9bkwrT.js → useFlexGapSupport-BBC2EqTi.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DU7qrIrQ.js → useFs-BWncdesy.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DX-Bf7VJ.js → usePersonalDataHub-BVJgKdiT.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-B1UcnNoK.js → vnode-CdZoGwk8.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BFgJuvLv.js → zoom-8BsyiHWV.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/lib/sensitive-file-guard.js +58 -0
- package/src/lib/sub-agent-context.js +3 -0
- package/src/runtime/agent-core.js +55 -0
- package/src/runtime/headless-stream.js +36 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-WGpUTY92.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-kk6hAwkK.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-DOwptdNb.js +0 -1
- package/src/assets/web-panel/assets/Terminal-ywwPryM5.js +0 -3
- package/src/assets/web-panel/assets/devWarning-CG_75MBJ.js +0 -1
- package/src/assets/web-panel/assets/index-Ba6DLEa1.js +0 -1
- package/src/assets/web-panel/assets/index-CLycnSs-.js +0 -1
|
@@ -901,6 +901,40 @@ export async function executeTool(name, args, context = {}) {
|
|
|
901
901
|
ruleAllowed = true;
|
|
902
902
|
}
|
|
903
903
|
|
|
904
|
+
// Sensitive-file write guard (Claude-Code 2.1.160 parity): shell startup
|
|
905
|
+
// files / PowerShell profiles / git+husky hooks execute code on the user's
|
|
906
|
+
// next shell or commit — even otherwise-permitted edit flows confirm first.
|
|
907
|
+
// An explicit settings `allow` rule is the only bypass (exact user
|
|
908
|
+
// pre-authorization); headless without a confirmer fails closed.
|
|
909
|
+
if (
|
|
910
|
+
(name === "write_file" || name === "edit_file") &&
|
|
911
|
+
settingsVerdict.decision !== "allow" &&
|
|
912
|
+
args?.path
|
|
913
|
+
) {
|
|
914
|
+
const { sensitiveFileReason } = await import(
|
|
915
|
+
"../lib/sensitive-file-guard.js"
|
|
916
|
+
);
|
|
917
|
+
const sensReason = sensitiveFileReason(args.path);
|
|
918
|
+
if (sensReason) {
|
|
919
|
+
const confirm = context.permissionConfirm || context.shellConfirm || null;
|
|
920
|
+
const ok =
|
|
921
|
+
typeof confirm === "function"
|
|
922
|
+
? await confirm({
|
|
923
|
+
tool: name,
|
|
924
|
+
args,
|
|
925
|
+
rule: null,
|
|
926
|
+
reason: `sensitive file: ${sensReason}`,
|
|
927
|
+
})
|
|
928
|
+
: false;
|
|
929
|
+
if (!ok) {
|
|
930
|
+
return {
|
|
931
|
+
error: `[Sensitive File] Writing "${args.path}" requires confirmation (${sensReason}) — denied. Add a settings allow rule to pre-authorize.`,
|
|
932
|
+
policy: { decision: "ask", via: "sensitive-file" },
|
|
933
|
+
};
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
|
|
904
938
|
// Plan mode: check if tool is allowed (a settings `allow` rule pre-authorizes)
|
|
905
939
|
if (
|
|
906
940
|
planManager.isActive() &&
|
|
@@ -980,6 +1014,7 @@ export async function executeTool(name, args, context = {}) {
|
|
|
980
1014
|
shellConfirm: context.shellConfirm || null,
|
|
981
1015
|
additionalDirectories: context.additionalDirectories || null,
|
|
982
1016
|
ruleAllowed,
|
|
1017
|
+
subAgentDepth: context.subAgentDepth || 0,
|
|
983
1018
|
});
|
|
984
1019
|
} catch (err) {
|
|
985
1020
|
if (hookDb) {
|
|
@@ -1150,6 +1185,7 @@ async function executeToolInner(
|
|
|
1150
1185
|
shellConfirm,
|
|
1151
1186
|
additionalDirectories,
|
|
1152
1187
|
ruleAllowed = false,
|
|
1188
|
+
subAgentDepth = 0,
|
|
1153
1189
|
},
|
|
1154
1190
|
) {
|
|
1155
1191
|
const localToolDescriptor =
|
|
@@ -1528,6 +1564,7 @@ async function executeToolInner(
|
|
|
1528
1564
|
interaction,
|
|
1529
1565
|
sessionId,
|
|
1530
1566
|
llmOptions,
|
|
1567
|
+
subAgentDepth,
|
|
1531
1568
|
}),
|
|
1532
1569
|
);
|
|
1533
1570
|
}
|
|
@@ -2186,6 +2223,13 @@ async function _executeRunCode(args, cwd) {
|
|
|
2186
2223
|
|
|
2187
2224
|
// ─── spawn_sub_agent implementation ──────────────────────────────────────
|
|
2188
2225
|
|
|
2226
|
+
/**
|
|
2227
|
+
* Max sub-agent nesting depth (Claude-Code 2.1.172 parity: sub-agents may
|
|
2228
|
+
* spawn their own sub-agents, capped at 5 levels so a runaway model cannot
|
|
2229
|
+
* recurse forever). Main loop = depth 0, its children = 1, …
|
|
2230
|
+
*/
|
|
2231
|
+
export const MAX_SUB_AGENT_DEPTH = 5;
|
|
2232
|
+
|
|
2189
2233
|
/**
|
|
2190
2234
|
* Execute a spawn_sub_agent tool call.
|
|
2191
2235
|
* Creates an isolated SubAgentContext, runs it, and returns only the summary.
|
|
@@ -2195,6 +2239,13 @@ async function _executeRunCode(args, cwd) {
|
|
|
2195
2239
|
* @returns {Promise<object>}
|
|
2196
2240
|
*/
|
|
2197
2241
|
async function _executeSpawnSubAgent(args, ctx) {
|
|
2242
|
+
// Nesting cap: refuse before any context/registry work.
|
|
2243
|
+
const currentDepth = ctx.subAgentDepth || 0;
|
|
2244
|
+
if (currentDepth >= MAX_SUB_AGENT_DEPTH) {
|
|
2245
|
+
return {
|
|
2246
|
+
error: `spawn_sub_agent: max nesting depth (${MAX_SUB_AGENT_DEPTH}) reached — complete the task directly instead of delegating further.`,
|
|
2247
|
+
};
|
|
2248
|
+
}
|
|
2198
2249
|
let {
|
|
2199
2250
|
role,
|
|
2200
2251
|
task,
|
|
@@ -2296,6 +2347,7 @@ async function _executeSpawnSubAgent(args, ctx) {
|
|
|
2296
2347
|
cwd: ctx.cwd,
|
|
2297
2348
|
profile: profile || null,
|
|
2298
2349
|
llmOptions: subLlmOptions,
|
|
2350
|
+
depth: currentDepth + 1, // nested spawns see their own level
|
|
2299
2351
|
});
|
|
2300
2352
|
|
|
2301
2353
|
const emit = (type, payload) => {
|
|
@@ -3332,6 +3384,9 @@ export async function* agentLoop(messages, options) {
|
|
|
3332
3384
|
autoCheckpoint: options.autoCheckpoint || false,
|
|
3333
3385
|
checkpointSession:
|
|
3334
3386
|
options.checkpointSession || options.sessionId || "agent",
|
|
3387
|
+
// Sub-agent nesting level (0 = main loop); spawn_sub_agent caps at
|
|
3388
|
+
// MAX_SUB_AGENT_DEPTH using this.
|
|
3389
|
+
subAgentDepth: options.subAgentDepth || 0,
|
|
3335
3390
|
};
|
|
3336
3391
|
|
|
3337
3392
|
throwIfAborted(signal);
|
|
@@ -102,8 +102,19 @@ export function parseInputEvent(line) {
|
|
|
102
102
|
.map((b) => (typeof b === "string" ? b : b?.text || ""))
|
|
103
103
|
.join("");
|
|
104
104
|
}
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
// Vision input (chat-panel image paste): {"type":"user","text":…,
|
|
106
|
+
// "images":["/abs/file.png", …]} — file paths, resolved at turn build via
|
|
107
|
+
// the same image-input pipeline as `cc agent --image`.
|
|
108
|
+
const rawImages = obj && typeof obj === "object" ? obj.images || msg.images : null;
|
|
109
|
+
const images = Array.isArray(rawImages)
|
|
110
|
+
? rawImages.filter((p) => typeof p === "string" && p.trim()).slice(0, 8)
|
|
111
|
+
: [];
|
|
112
|
+
if (typeof content !== "string" || !content.trim()) {
|
|
113
|
+
// An image-only turn is valid — give the model something to act on.
|
|
114
|
+
if (images.length) return { text: "Please look at the attached image(s).", images };
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return images.length ? { text: content, images } : { text: content };
|
|
107
118
|
}
|
|
108
119
|
|
|
109
120
|
/**
|
|
@@ -727,10 +738,31 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
727
738
|
// optional polish — never fail the turn over it
|
|
728
739
|
}
|
|
729
740
|
|
|
730
|
-
|
|
741
|
+
// Attach pasted/added images (panel parity with `--image`): file paths →
|
|
742
|
+
// data URLs → OpenAI-style multimodal content. buildUserContent returns
|
|
743
|
+
// the plain string when there are no images, so text turns are unchanged.
|
|
744
|
+
let turnContent = userContent;
|
|
745
|
+
if (parsed.images && parsed.images.length) {
|
|
746
|
+
try {
|
|
747
|
+
const { resolveImages, buildUserContent } =
|
|
748
|
+
await import("../lib/image-input.js");
|
|
749
|
+
turnContent = buildUserContent(userContent, resolveImages(parsed.images));
|
|
750
|
+
} catch (err) {
|
|
751
|
+
emit({
|
|
752
|
+
type: "result",
|
|
753
|
+
subtype: "error",
|
|
754
|
+
is_error: true,
|
|
755
|
+
result: `image attach failed: ${err.message}`,
|
|
756
|
+
session_id: sessionId,
|
|
757
|
+
});
|
|
758
|
+
continue; // bad attachment kills the turn, not the session
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
messages.push({ role: "user", content: turnContent });
|
|
731
763
|
if (persist) {
|
|
732
764
|
try {
|
|
733
|
-
store.appendUserMessage(sessionId,
|
|
765
|
+
store.appendUserMessage(sessionId, turnContent);
|
|
734
766
|
} catch {
|
|
735
767
|
/* best-effort */
|
|
736
768
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as v,P as u,J as S,U as n,R as a,S as y,K as C,Q as x,V as w,_ as B,b as s}from"./vendor-BvqAck49.js";import{_ as k}from"./index-D7FYxxFT.js";import"./icons-DP3uiYxy.js";const N={__name:"ChatBubbleRenderer",props:{event:{type:Object,required:!0}},setup(c,{expose:d}){d();const t=c,r=s(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=s(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=s(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=s(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),m=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),f=String(e.getMonth()+1).padStart(2,"0"),g=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${f}-${g} ${b}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:m,computed:s};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},T={class:"bubble"},M={class:"meta"},R={class:"actor"},V={class:"time"},q={class:"body"};function D(c,d,t,r,i,l){const o=v("a-tag");return u(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[n("div",T,[n("div",M,[n("span",R,a(r.actorLabel),1),n("span",V,a(r.formattedTime),1)]),n("div",q,a(r.messageText),1),t.event.source.adapter?(u(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[x(a(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const z=k(N,[["render",D],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-GzZ4oH/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{z as default};
|
|
@@ -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-D7FYxxFT.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-GzZ4oH/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as w,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as g,b as o}from"./vendor-BvqAck49.js";import{_ as S}from"./index-D7FYxxFT.js";import"./icons-DP3uiYxy.js";const k={__name:"OrderTableRenderer",props:{event:{type:Object,required:!0}},setup(p,{expose:r}){r();const a=p,e=o(()=>a.event.content||{}),d=o(()=>a.event.extra||{}),m=o(()=>d.value.merchant||e.value.merchant||e.value.counterparty||"—"),c=o(()=>e.value.title||e.value.name||e.value.itemName||e.value.text||"—"),y=o(()=>{const t=e.value.amount??e.value.price??e.value.total;return t==null?"—":`${e.value.currency||"¥"} ${typeof t=="number"?t.toFixed(2):t}`}),T=o(()=>d.value.orderNo||e.value.orderNo||e.value.orderId),f=o(()=>e.value.status||e.value.state),b=o(()=>{const t=(f.value||"").toLowerCase();return t.includes("成功")||t.includes("succe")||t.includes("paid")?"green":t.includes("退")||t.includes("refund")?"orange":t.includes("失败")||t.includes("fail")?"red":"default"}),h=o(()=>{if(!a.event.occurredAt)return"";const t=new Date(a.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),x={props:a,c:e,e:d,merchantText:m,itemText:c,amountText:y,orderNo:T,statusText:f,statusColor:b,formattedTime:h,computed:o};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},V={class:"row"},R={class:"val"},B={class:"row"},D={class:"val"},I={class:"row amount-row"},j={class:"val amount"},A={key:0,class:"row"},F={class:"val mono"},H={key:1,class:"row"};function M(p,r,a,e,d,m){const c=w("a-tag");return l(),u("div",N,[s("div",C,[s("span",O,n(e.formattedTime),1),i(c,{color:"gold"},{default:v(()=>[_(n(a.event.source.adapter),1)]),_:1}),i(c,null,{default:v(()=>[_(n(a.event.subtype),1)]),_:1})]),s("div",V,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",R,n(e.merchantText),1)]),s("div",B,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",D,n(e.itemText),1)]),s("div",I,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",j,n(e.amountText),1)]),e.orderNo?(l(),u("div",A,[r[3]||(r[3]=s("span",{class:"key"},"单号",-1)),s("span",F,n(e.orderNo),1)])):g("v-if",!0),e.statusText?(l(),u("div",H,[r[4]||(r[4]=s("span",{class:"key"},"状态",-1)),i(c,{color:e.statusColor},{default:v(()=>[_(n(e.statusText),1)]),_:1},8,["color"])])):g("v-if",!0)])}const G=S(k,[["render",M],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-GzZ4oH/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{G 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-D7FYxxFT.js";import{I as z,J as x,U as _,Q as D,S as H,K as T,V as R,c as A,F as J,Z as K,R as E,o as Q,f as Y,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,N=new Set,F=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)),N.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)),F.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(L=>({seq:L.seq,data:ae(L.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)}):(N.add(a),()=>N.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)}):(F.add(a),()=>F.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 L(t){return t?t.slice(0,8):""}let O=null,M=null;async function I(){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 I(),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}),P=new p.FitAddon;m.loadAddon(P),m.open(b);try{P.fit()}catch{}t.xterm=m,t.fitAddon=P;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 G of v)m.write(G.data),t.lastSeq=G.seq}catch(v){m.writeln(`\x1B[31m[history fetch failed: ${v?.message||v}]\x1B[0m`)}const j=new ResizeObserver(()=>{try{P.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}}Q(async()=>{await X()}),Y(()=>{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:L,get xtermMod(){return O},set xtermMod(t){O=t},get fitAddonMod(){return M},set fitAddonMod(t){M=t},loadXterm:I,mountXterm:B,onCreate:re,onClose:se,removeSession:W,activate:le,refreshList:X,ref:S,computed:ee,onMounted:Q,onBeforeUnmount:Y,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"},Le=["data-session-id"],Pe={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(),H(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(),H(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(J,null,K(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(J,null,K(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,Le)),[[_e,r.id===e.activeId]])),128)),e.sessions.length===0?(y(),x("div",Pe,[...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 Fe=me(Se,[["render",Be],["__scopeId","data-v-65366a29"],["__file","/tmp/cc-web-panel-GzZ4oH/repo/packages/web-panel/src/views/Terminal.vue"]]);export{Fe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{O as r}from"./index-D7FYxxFT.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-bJlVEnFC.js";import{U as t}from"./index-D7FYxxFT.js";import"./vendor-BvqAck49.js";import"./responsiveObserve-BBgHTvYX.js";import"./useFlexGapSupport-DG9bkwrT.js";import"./styleChecker-BNvVEdm1.js";import"./index-BWcGURYh.js";import"./icons-DP3uiYxy.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-LhgveyhM.js";import{U as t}from"./index-D7FYxxFT.js";import"./vendor-BvqAck49.js";import"./index-BWcGURYh.js";import"./icons-DP3uiYxy.js";const s=t(o);export{s as default};
|