chainlesschain 0.162.108 → 0.162.109
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-B8T7xeuV.js → AIOps-DOMx_gkg.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BDxBsVYw.js → ActionButton-C3V6-KN7.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-5cYrjLzN.js → Analytics-DhcH00zB.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DkanJ7a5.js → AppLayout-DxaARGVc.js} +4 -4
- package/src/assets/web-panel/assets/{Audit-8r3yG5R0.js → Audit-B5v_yPs_.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DmdJpAwc.js → Backup-y0trXy2c.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CCTC_ROJ.js → BaseInput-BKmOrsWP.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BE4xBoCH.js → Chat-YxvzoXfA.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-ita18CO8.js → ChatBubbleRenderer-BT502wFg.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DVUDDyL5.js → Checkbox-CWlobcH7.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-C07Q688Z.js → Codegen-DyDnpB9x.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Bfmb67bb.js → Col-vSk5m8e6.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DvUS6LOy.js → Community-ms1KDyit.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B2jvuCf2.js → Compact-CgOlMunA.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-B4VnGZOX.js → Compliance-BtmnlvkF.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Bf1UR9uf.js → Cowork-oEgcjamv.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-BYU0OhXx.js → Cron-C45dOmbZ.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DhtbpJ8Y.js → Crosschain-COCW4N4S.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DFtdsXjV.js → DID-D6L3jdjB.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BOqMlucS.js → Dashboard-CZO_nWR9.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DWcGi1lU.js → Dropdown-BHogrwxg.js} +1 -1
- package/src/assets/web-panel/assets/EmailListRenderer-DVU5KA6Y.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-_qKQM8YZ.js → FamilyGuardDashboard-BpJuZRlS.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DxaaO_Pn.js → Federation-C8XUIu9h.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-Bijk4-hV.js → FormItemContext-Dkv__07L.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CXs5JGAs.js → GenericCardRenderer-PI4Hv6J7.js} +1 -1
- package/src/assets/web-panel/assets/{Git-vopq_XAi.js → Git-DwoiOK7x.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-D6lEr1e2.js → Governance-CZMrVnKF.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-D716knRp.js → Inference-DGMCR5fY.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Mt7L5B8p.js → KnowledgeGraph-CHnyTP7N.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BmY4Aozy.js → Logs-aHwf1vTL.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-Bk7yghOV.js → Marketplace-DrrJWlYy.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BdEGNK8B.js → McpTools-FsvEQItl.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-DaGxWezP.js → Memory-BaLEbZZU.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-D2QqiIXV.js → MobileBridge-Cbpe-UlH.js} +2 -2
- package/src/assets/web-panel/assets/{MobileProjects-JQQ60jth.js → MobileProjects-WpHJ6m0I.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-DHp0q17f.js → Mtc-B2-MRjt7.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-RWrCriuc.js → MtcAudit-BPKg4478.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-BR_5j51g.js → Multisig-DL-OMvg9.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-MF3ZkPYq.js → NLProgramming-BFbo7QJF.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BDWwfQ-t.js → Notes-DxlawFPj.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-Xk8BtRL5.js → NotificationSettings-mXTgzIC1.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DaVlfAsv.js → OrderTableRenderer-BUcf5CYv.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CNdU6Jxx.js → Organization-FeID8_Wf.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-DOf8iK6T.js → Overflow-DTFS4Vaz.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DvOwefeB.js → P2P-BkylEhA8.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-D8bxEEcj.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-DM_Cha_-.js → Permissions-BSQ09sRI.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-DGOiN1md.js → PersonalDataHub-Ba5iRuIi.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-BMZcrOpC.js → Pipeline-DmL3Gpxg.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CcBD3ZJ_.js → Privacy-DAvd_DSh.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BQmkVkFp.js → ProjectInit-AxBuFwBR.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BL0iqE5h.js → ProjectSettings-BZ40fAt5.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-7iyoLF6T.js → Projects-BHNbHuBF.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-IQqLZ_11.js → Providers-CDkzXPon.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Cp0Lpic1.js → QuickAsk-CzKbOUkP.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DN-26aef.js → Recommend-D82aHoFt.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-ChdhhVGu.js → Reputation-zpuCi7ft.js} +1 -1
- package/src/assets/web-panel/assets/{Row-2RBgBLEz.js → Row-BDq7p96-.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CfogWRiS.js → RssFeed-pAo6EJPy.js} +3 -3
- package/src/assets/web-panel/assets/{Search-CrREUZpz.js → Search-BXv5RRMM.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CcDdV-6d.js → Security-Gn-HnKp5.js} +4 -4
- package/src/assets/web-panel/assets/{Services-qG5L2PHE.js → Services-BlfMJ4ZL.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-7CVgHJwr.js → Skeleton-Q8cKUNTJ.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BEbdNS7s.js → Skills-BjOLODy1.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-C4ENvrVM.js → Sla-TbklgbfG.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DuvM2AsQ.js → SpeechSettings-DzKKyV6J.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Bm9Np5Yt.js → SyncSettings-Bq-76qhL.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-K2ZtJ47C.js → Tasks-DWBUnqic.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-C3GJa4ya.js → Templates-CS77urAR.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BLQnLb8K.js → Tenant-B1hx8tjz.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-CNX2SAIP.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-BD8NwNAK.js → TimelineRenderer-CS_iGXXB.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BIsO2iiX.js → Tokens-CPfe_Ndx.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-FJv5zeym.js → Trigger-DARLZ6w5.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-9FRFEAhW.js → Trust-R_mlmd7H.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-aOdZVwgi.js → UkeySign-CysEd--z.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-C1KyY7ZB.js → VideoEditing-eQ46o05K.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CH5edY0l.js → Wallet-C5788NxS.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-BUPlkFe0.js → WebAuthn-CK_CPM4k.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-BoH8bG7y.js → WorkflowEditor-DhvdLkE6.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DRS34SZq.js → chat-CcKQhy1e.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DxdhROQh.js → colors-B4d3_MCE.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-C5f4y3lM.js → compact-item-DC-Xf92z.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DkyzEt2y.js → createContext-KBHDmwRY.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-Da3Hdd0q.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CIRkRQ69.js → hasIn-DEuYFeVL.js} +1 -1
- package/src/assets/web-panel/assets/{index-DgJf60U0.js → index-2Csz0FGD.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3WhDg1s.js → index-8BCBAwoA.js} +3 -3
- package/src/assets/web-panel/assets/{index-B_ytTrAE.js → index-B4RknAfS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CyMVWOwq.js → index-B5cOdkHy.js} +1 -1
- package/src/assets/web-panel/assets/{index-X7QcpsDO.js → index-BB9f50Gt.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnAbauX-.js → index-BCbc993k.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHACYX-h.js → index-BJbBr6_l.js} +1 -1
- package/src/assets/web-panel/assets/{index-CSHsX3UZ.js → index-BK8vM7es.js} +1 -1
- package/src/assets/web-panel/assets/index-BMeXnsEn.js +1 -0
- package/src/assets/web-panel/assets/{index-btOwnCpT.js → index-BZjC0VTy.js} +1 -1
- package/src/assets/web-panel/assets/index-BdqPeWvV.js +1 -0
- package/src/assets/web-panel/assets/{index-dtUUXiuv.js → index-Bm39r2a4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BrNCtBLG.js → index-BwD3FKsC.js} +1 -1
- package/src/assets/web-panel/assets/{index-BLLkL7YU.js → index-BxlEfskb.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cv9YEv3M.js → index-C4Ose5wC.js} +1 -1
- package/src/assets/web-panel/assets/{index-DSpV3T2E.js → index-CCnk_-ug.js} +1 -1
- package/src/assets/web-panel/assets/{index-BStiYEJX.js → index-CTgs-ddr.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfZal2SO.js → index-CdabmsmR.js} +1 -1
- package/src/assets/web-panel/assets/{index-fgBegFCK.js → index-ChJ_B7b9.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpHZisZn.js → index-Cl0As6V5.js} +1 -1
- package/src/assets/web-panel/assets/{index-DR_uUG6x.js → index-CxtHBFqA.js} +1 -1
- package/src/assets/web-panel/assets/{index-1Vd3bgPH.js → index-Cyb-NAiR.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dz-Xl9WT.js → index-DE0-JQay.js} +1 -1
- package/src/assets/web-panel/assets/{index-C0VYKzdU.js → index-DQMDCc8g.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXE4fjlC.js → index-DQXNz0yD.js} +1 -1
- package/src/assets/web-panel/assets/{index-CO4PAGWX.js → index-DSXxbnHU.js} +1 -1
- package/src/assets/web-panel/assets/{index-2uQYIxL1.js → index-DTudiivg.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzC5O6l6.js → index-DZN3yAE2.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bc59VV8o.js → index-DhGYNT5Y.js} +1 -1
- package/src/assets/web-panel/assets/{index-BdzFfdXs.js → index-DkoDAyug.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdLAPzIl.js → index-EnBI6ILp.js} +1 -1
- package/src/assets/web-panel/assets/{index-CLjIL9vZ.js → index-JXP0mbdx.js} +1 -1
- package/src/assets/web-panel/assets/{index-Kyd48UEO.js → index-N4xZOl6m.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtOM1jbe.js → index-Tcf8b4Dr.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bskk24yp.js → index-VkeJvcgx.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5r9kCHD.js → index-ZbZ9FKyc.js} +1 -1
- package/src/assets/web-panel/assets/{index-wdXKonKr.js → index-gOIec6-U.js} +1 -1
- package/src/assets/web-panel/assets/{index-5Mph6K8H.js → index-p5OuYAoC.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV5W06OY.js → index-tW1RyKbL.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-4uTrrqjb.js → initDefaultProps-BSjGxzmn.js} +1 -1
- package/src/assets/web-panel/assets/{motion-gkRvxGHW.js → motion-B5_Cszlm.js} +1 -1
- package/src/assets/web-panel/assets/{move-CIgnaWNe.js → move-Zi4ZApRv.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DB-Ux8Gg.js → omit-BNHsjZx4.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-ree-Itb0.js → pickAttrs-GzJRqTuY.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-EdAP6bCf.js → placementArrow-CXfzbh2d.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-B1DqSgFh.js → responsiveObserve-lhENMtmd.js} +1 -1
- package/src/assets/web-panel/assets/{slide-D_9NP_KE.js → slide-BaUzfEHc.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CAytzvoR.js → statusUtils-ZYc611Fn.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-zb3gob1_.js → styleChecker-CaymUbb1.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BQWuGrL0.js → useFlexGapSupport-9EAy_UPY.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-QMEsYkGX.js → useFs-CUqinWaA.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-Ccrz7-au.js → usePersonalDataHub-eOXrcae-.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DZVY4QM-.js → vnode-gBQTchDv.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Dii_0V_X.js → zoom-CCC5-LNi.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agent.js +6 -0
- package/src/commands/hub.js +6 -2
- package/src/commands/mcp.js +42 -10
- package/src/commands/pdh.js +4 -1
- package/src/constants.js +2 -2
- package/src/gateways/ws/video-protocol.js +7 -0
- package/src/harness/feature-flags.js +19 -6
- package/src/harness/prompt-compressor.js +1 -0
- package/src/lib/agent-core.js +2 -0
- package/src/lib/config-manager.js +42 -1
- package/src/lib/git-integration.js +1 -2
- package/src/lib/learning/learning-hooks.js +6 -0
- package/src/lib/llm-providers.js +2 -0
- package/src/lib/mcp-auth-target.js +53 -0
- package/src/lib/shell-approval.js +7 -12
- package/src/lib/skill-loader.js +6 -2
- package/src/lib/suggest-name.js +91 -0
- package/src/lib/task-model-selector.js +5 -5
- package/src/repl/agent-repl.js +9 -1
- package/src/repl/slash-macro.js +7 -1
- package/src/runtime/agent-core.js +62 -3
- package/src/runtime/coding-agent-contract-shared.cjs +11 -1
- package/src/runtime/headless-runner.js +57 -4
- package/src/runtime/headless-stream.js +50 -2
- package/src/session/index.js +6 -2
- package/src/assets/web-panel/assets/EmailListRenderer-smcpeq18.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-BmrU5B5U.js +0 -7
- package/src/assets/web-panel/assets/Terminal-BGgZIwb0.js +0 -3
- package/src/assets/web-panel/assets/devWarning-vwZx8E0a.js +0 -1
- package/src/assets/web-panel/assets/index-Dhn6EWMQ.js +0 -1
- package/src/assets/web-panel/assets/index-dGvDljur.js +0 -1
|
@@ -250,7 +250,10 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
250
250
|
);
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
-
const
|
|
253
|
+
// `let` (not const): a custom-command macro's `model:` frontmatter may
|
|
254
|
+
// override it below (when the user passed no explicit --model), mirroring
|
|
255
|
+
// `cc command run`.
|
|
256
|
+
let model = options.model || "qwen2.5:7b";
|
|
254
257
|
const provider = options.provider || "ollama";
|
|
255
258
|
const baseUrl = options.baseUrl || "http://localhost:11434";
|
|
256
259
|
const apiKey = options.apiKey || null;
|
|
@@ -369,12 +372,60 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
369
372
|
return { exitCode: isError ? 1 : 0, result: text, isError };
|
|
370
373
|
}
|
|
371
374
|
|
|
375
|
+
// ── Custom slash-command macros (Claude-Code parity: a .claude/commands/*
|
|
376
|
+
// command runs in `-p` mode too, not just the interactive REPL). A leading
|
|
377
|
+
// `/name …` that resolves to a user/project command is expanded into its
|
|
378
|
+
// prompt template ($ARGUMENTS / $1.. + !`bang` + @file) before the turn; an
|
|
379
|
+
// unknown `/...` (or plain text) is left untouched so it reaches the LLM
|
|
380
|
+
// verbatim. expandCommand already runs @file expansion, so the @-ref pass
|
|
381
|
+
// below is skipped when a macro matched. Opt out with options.slashMacros:false.
|
|
382
|
+
let userContent = prompt;
|
|
383
|
+
let slashExpanded = false;
|
|
384
|
+
// A matched command's `allowed-tools:` frontmatter scopes the run (parsed
|
|
385
|
+
// below into enabledToolNames) the same way `cc command run` does.
|
|
386
|
+
let macroAllowedTools = null;
|
|
387
|
+
if (options.slashMacros !== false && prompt.startsWith("/")) {
|
|
388
|
+
try {
|
|
389
|
+
const doMacro =
|
|
390
|
+
deps.resolveSlashMacro ||
|
|
391
|
+
(await import("../repl/slash-macro.js")).resolveSlashMacro;
|
|
392
|
+
const macro = await doMacro(prompt, { cwd });
|
|
393
|
+
if (macro && macro.matched) {
|
|
394
|
+
userContent = macro.promptText;
|
|
395
|
+
slashExpanded = true;
|
|
396
|
+
for (const w of macro.warnings || []) {
|
|
397
|
+
writeErr(` /${macro.name}: ${w}\n`);
|
|
398
|
+
}
|
|
399
|
+
writeErr(` command: /${macro.name} [${macro.scope}]\n`);
|
|
400
|
+
// Frontmatter `model:` / `allowed-tools:` scope the run exactly like
|
|
401
|
+
// `cc command run` — but an explicit --model / --allowed-tools still
|
|
402
|
+
// wins (those arrive as a set options.model / options.allowedTools).
|
|
403
|
+
if (macro.model && !options.model) {
|
|
404
|
+
model = macro.model;
|
|
405
|
+
writeErr(` command: model → ${model}\n`);
|
|
406
|
+
try {
|
|
407
|
+
const { maybeWarnDeprecatedModel } =
|
|
408
|
+
await import("../lib/model-deprecation.js");
|
|
409
|
+
maybeWarnDeprecatedModel({ model });
|
|
410
|
+
} catch {
|
|
411
|
+
// deprecation notice is best-effort
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
if (macro.allowedTools && !options.allowedTools) {
|
|
415
|
+
macroAllowedTools = parseToolList(macro.allowedTools);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
} catch {
|
|
419
|
+
// macro resolution is best-effort — fall back to the literal prompt
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
372
423
|
// ── Expand @file references in the prompt (Claude-Code parity) ─────────
|
|
373
424
|
// `@path/to/file` tokens are augmented with the referenced file contents (or
|
|
374
425
|
// a dir listing) so `cc agent -p "review @src/x.js"` works without a manual
|
|
375
426
|
// cat-pipe. Opt out with `--no-file-refs` (options.expandFileRefs === false).
|
|
376
|
-
|
|
377
|
-
if (options.expandFileRefs !== false) {
|
|
427
|
+
// Skipped when a slash macro already expanded (expandCommand ran @refs).
|
|
428
|
+
if (!slashExpanded && options.expandFileRefs !== false) {
|
|
378
429
|
const doExpand = deps.expandFileRefs || expandFileRefsAsync;
|
|
379
430
|
const expanded = await doExpand(prompt, { cwd });
|
|
380
431
|
userContent = expanded.prompt;
|
|
@@ -388,7 +439,9 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
388
439
|
// ── Permission + tool resolution ──────────────────────────────────────
|
|
389
440
|
const perm = resolvePermissionMode(options.permissionMode);
|
|
390
441
|
const enabledToolNames = resolveEnabledTools({
|
|
391
|
-
|
|
442
|
+
// An explicit --allowed-tools wins; otherwise a matched command's
|
|
443
|
+
// `allowed-tools:` frontmatter scopes the run (null when neither applies).
|
|
444
|
+
allowedTools: options.allowedTools || macroAllowedTools,
|
|
392
445
|
readOnly: perm.readOnly,
|
|
393
446
|
});
|
|
394
447
|
const disabledTools = options.disallowedTools || [];
|
|
@@ -31,6 +31,7 @@ import { CostBudget } from "../lib/cost-budget.js";
|
|
|
31
31
|
import {
|
|
32
32
|
resolvePermissionMode,
|
|
33
33
|
resolveEnabledTools,
|
|
34
|
+
parseToolList,
|
|
34
35
|
} from "./headless-runner.js";
|
|
35
36
|
import {
|
|
36
37
|
startSession as jsonlStartSession,
|
|
@@ -1078,9 +1079,49 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
1078
1079
|
})
|
|
1079
1080
|
: new IterationBudget();
|
|
1080
1081
|
|
|
1081
|
-
//
|
|
1082
|
+
// Custom slash-command macro expansion per user event (Claude-Code parity:
|
|
1083
|
+
// a /name from .claude/commands runs in panel / stream mode too, not just
|
|
1084
|
+
// the REPL). expandCommand already runs @file expansion, so the @-ref pass
|
|
1085
|
+
// below is skipped when a macro matched. Opt out: options.slashMacros:false.
|
|
1082
1086
|
let userContent = parsed.text;
|
|
1083
|
-
|
|
1087
|
+
let slashExpanded = false;
|
|
1088
|
+
// A matched command's `model:` / `allowed-tools:` frontmatter scopes THIS
|
|
1089
|
+
// turn's loopOptions below (parity with `cc command run` / headless -p).
|
|
1090
|
+
let turnMacroModel = null;
|
|
1091
|
+
let turnMacroTools = null;
|
|
1092
|
+
if (
|
|
1093
|
+
options.slashMacros !== false &&
|
|
1094
|
+
typeof parsed.text === "string" &&
|
|
1095
|
+
parsed.text.startsWith("/")
|
|
1096
|
+
) {
|
|
1097
|
+
try {
|
|
1098
|
+
const doMacro =
|
|
1099
|
+
deps.resolveSlashMacro ||
|
|
1100
|
+
(await import("../repl/slash-macro.js")).resolveSlashMacro;
|
|
1101
|
+
const macro = await doMacro(parsed.text, { cwd });
|
|
1102
|
+
if (macro && macro.matched) {
|
|
1103
|
+
userContent = macro.promptText;
|
|
1104
|
+
slashExpanded = true;
|
|
1105
|
+
for (const w of macro.warnings || []) {
|
|
1106
|
+
writeErr(` /${macro.name}: ${w}\n`);
|
|
1107
|
+
}
|
|
1108
|
+
writeErr(` command: /${macro.name} [${macro.scope}]\n`);
|
|
1109
|
+
if (macro.model) {
|
|
1110
|
+
turnMacroModel = macro.model;
|
|
1111
|
+
writeErr(` command: model → ${turnMacroModel}\n`);
|
|
1112
|
+
}
|
|
1113
|
+
if (macro.allowedTools) {
|
|
1114
|
+
turnMacroTools = parseToolList(macro.allowedTools);
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
} catch {
|
|
1118
|
+
// macro resolution is best-effort — fall back to the literal text
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
// @file expansion per user event (parity with single-turn headless).
|
|
1123
|
+
// Skipped when a slash macro already expanded (expandCommand ran @refs).
|
|
1124
|
+
if (!slashExpanded && options.expandFileRefs !== false) {
|
|
1084
1125
|
const expanded = await doExpand(parsed.text, { cwd });
|
|
1085
1126
|
userContent = expanded.prompt;
|
|
1086
1127
|
for (const w of expanded.warnings) writeErr(` @ref: ${w}\n`);
|
|
@@ -1214,6 +1255,13 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
1214
1255
|
messages,
|
|
1215
1256
|
{
|
|
1216
1257
|
...loopOptionsBase,
|
|
1258
|
+
// Custom-command frontmatter scopes THIS turn (parity with `cc command
|
|
1259
|
+
// run` / headless -p): a matched /name applies its model: and
|
|
1260
|
+
// allowed-tools:. Lowest-priority override — an explicit per-turn
|
|
1261
|
+
// privacy (turnLlmOverride) or vision (turnVisionLlm) switch below
|
|
1262
|
+
// still wins on model.
|
|
1263
|
+
...(turnMacroModel ? { model: turnMacroModel } : {}),
|
|
1264
|
+
...(turnMacroTools ? { enabledToolNames: turnMacroTools } : {}),
|
|
1217
1265
|
// §3.5.10 接线6: explicit per-turn LLM override (privacy-tier switch);
|
|
1218
1266
|
// only the fields provided are overridden (e.g. provider+model+baseUrl
|
|
1219
1267
|
// to route to your own PC Ollama for one turn).
|
package/src/session/index.js
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
* CLI session module — thin re-export of @chainlesschain/session-core
|
|
3
3
|
*
|
|
4
4
|
* Managed Agents parity Phase A+B.
|
|
5
|
-
* Consume via:
|
|
5
|
+
* Consume via: import { ... } from "../session/index.js" inside packages/cli/src/.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: packages/cli is ESM ("type": "module"). The previous
|
|
8
|
+
* `module.exports = require(...)` form silently broke here (module/require are
|
|
9
|
+
* undefined in ESM); use an ESM re-export.
|
|
6
10
|
*/
|
|
7
|
-
|
|
11
|
+
export * from "@chainlesschain/session-core";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as C,P as c,J as f,U as r,c as g,_ as k,R as n,V as l,K as d,Q as u,S as h,b as t}from"./vendor-BvqAck49.js";import{_ as j}from"./index-D3WhDg1s.js";import{aG as w}from"./icons-DP3uiYxy.js";const V={__name:"EmailListRenderer",props:{event:{type:Object,required:!0}},setup(_,{expose:m}){m();const a=_,e=t(()=>a.event.content||{}),i=t(()=>a.event.extra||{}),p=t(()=>e.value.from||e.value.sender||e.value.fromName||a.event.actor||"(未知发件人)"),s=t(()=>e.value.subject||e.value.title||"(无主题)"),y=t(()=>e.value.snippet||e.value.preview||e.value.body?.slice(0,100)||null),b=t(()=>Array.isArray(e.value.attachments)?e.value.attachments.length:typeof e.value.attachmentCount=="number"?e.value.attachmentCount:0),x=t(()=>i.value.category||e.value.category),S=t(()=>e.value.unread===!0),T=t(()=>{if(!a.event.occurredAt)return"";const o=new Date(a.event.occurredAt);return`${o.getFullYear()}-${String(o.getMonth()+1).padStart(2,"0")}-${String(o.getDate()).padStart(2,"0")} ${String(o.getHours()).padStart(2,"0")}:${String(o.getMinutes()).padStart(2,"0")}`}),v={props:a,c:e,e:i,fromText:p,subjectText:s,snippetText:y,attachmentCount:b,category:x,isUnread:S,formattedTime:T,computed:t,get MailOutlined(){return w}};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}},M={class:"email-row"},N={class:"left"},O={class:"body"},A={class:"head"},B={class:"from"},E={class:"time"},R={class:"subject"},D={key:0,class:"snippet"},L={class:"meta"};function U(_,m,a,e,i,p){const s=C("a-tag");return c(),f("div",M,[r("div",N,[g(e.MailOutlined,{class:k(["icon",{unread:e.isUnread}])},null,8,["class"])]),r("div",O,[r("div",A,[r("span",B,n(e.fromText),1),r("span",E,n(e.formattedTime),1)]),r("div",R,n(e.subjectText),1),e.snippetText?(c(),f("div",D,n(e.snippetText),1)):l("v-if",!0),r("div",L,[g(s,{color:"blue",class:"src"},{default:d(()=>[u(n(a.event.source.adapter),1)]),_:1}),e.attachmentCount>0?(c(),h(s,{key:0,color:"orange"},{default:d(()=>[u(" 📎 "+n(e.attachmentCount),1)]),_:1})):l("v-if",!0),e.category?(c(),h(s,{key:1},{default:d(()=>[u(n(e.category),1)]),_:1})):l("v-if",!0)])])])}const P=j(V,[["render",U],["__scopeId","data-v-e4ddf632"],["__file","/tmp/cc-web-panel-SVKg9z/repo/packages/web-panel/src/components/pdh/renderers/EmailListRenderer.vue"]]);export{P as default};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-ita18CO8.js","./vendor-BvqAck49.js","./index-D3WhDg1s.js","./icons-DP3uiYxy.js","./index-Cq93VfoF.css","./ChatBubbleRenderer-gy5SDGw2.css","./OrderTableRenderer-DaVlfAsv.js","./OrderTableRenderer-CfrDjSHT.css","./TimelineRenderer-BD8NwNAK.js","./TimelineRenderer-BlTAtkOc.css","./EmailListRenderer-smcpeq18.js","./EmailListRenderer-DTPZPx_S.css","./GenericCardRenderer-CXs5JGAs.js","./GenericCardRenderer-o85VDYQS.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{E as ue,r as R,b as w,I as y,P as u,J as O,U as v,c,S as C,V as E,_ as M,F as B,Z as se,a0 as le,R as x,K as m,Q as b,W as L,o as z}from"./vendor-BvqAck49.js";import{u as J}from"./usePersonalDataHub-Ccrz7-au.js";import{_ as D,e as F,d as P}from"./index-D3WhDg1s.js";import{a9 as V,af as U,M as K,aH as Q,u as G,aG as H,ap as W,ab as Y,e as de,d as fe,k as pe,ah as me,az as _e,R as ge}from"./icons-DP3uiYxy.js";const I=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),q=50,Z=300,X=ue("pdhBrowser",()=>{const r=R({...I}),t=R([]),n=R(null),e=R(!1),o=R(!1),l=R(null),a=R(null),s=R(!1),i=R({byCategory:{},byAdapter:{},bySubtype:{},total:0});let d=0,_=null;const j=w(()=>t.value.length>0),A=w(()=>n.value!=null);function h(S={}){const p={},f=r.value;return f.q&&f.q.trim()&&(p.q=f.q.trim()),f.category&&(p.category=f.category),f.adapter&&(p.adapter=f.adapter),f.subtype&&(p.subtype=f.subtype),Number.isFinite(f.since)&&(p.since=f.since),Number.isFinite(f.until)&&(p.until=f.until),{...p,...S}}async function g(){const S=++d;e.value=!0,l.value=null;const p=J();try{const[f,T]=await Promise.all([p.searchEvents(h({limit:q})),p.facetCounts({...r.value.q&&r.value.q.trim()?{q:r.value.q.trim()}:{},...Number.isFinite(r.value.since)?{since:r.value.since}:{},...Number.isFinite(r.value.until)?{until:r.value.until}:{}})]);if(S!==d)return;t.value=f.rows||[],n.value=f.nextCursor||null,a.value=f.mode||"like",s.value=!!f.shortQuery,i.value={byCategory:T.byCategory||{},byAdapter:T.byAdapter||{},bySubtype:T.bySubtype||{},total:T.total||0}}catch(f){if(S!==d)return;l.value=f&&f.message?f.message:String(f),t.value=[],n.value=null}finally{S===d&&(e.value=!1)}}async function k(){if(!n.value||o.value)return;o.value=!0,l.value=null;const S=J();try{const p=await S.searchEvents(h({cursor:n.value,limit:q}));t.value=t.value.concat(p.rows||[]),n.value=p.nextCursor||null,a.value=p.mode||a.value}catch(p){l.value=p&&p.message?p.message:String(p)}finally{o.value=!1}}function ae(S,p){if(!(S in I))throw new Error(`pdhBrowser.setFilter: unknown key "${S}"`);r.value={...r.value,[S]:p},_&&clearTimeout(_),_=setTimeout(()=>{_=null,g()},Z)}function ie(S){return r.value={...I,...S},_&&(clearTimeout(_),_=null),g()}function ce(){r.value={...I},t.value=[],n.value=null,l.value=null,i.value={byCategory:{},byAdapter:{},bySubtype:{},total:0}}return{filters:r,results:t,cursor:n,isLoading:e,isAppending:o,error:l,mode:a,shortQuery:s,facets:i,hasResults:j,canLoadMore:A,search:g,loadMore:k,setFilter:ae,setFilters:ie,reset:ce,PAGE_SIZE:q,SEARCH_DEBOUNCE_MS:Z}}),ye=Object.freeze(["chat","social","email","shopping","travel","system","ai-chat","other"]),ve=Object.freeze({chat:"社交聊天",social:"内容平台",email:"邮件",shopping:"支付订单",travel:"出行",system:"系统数据","ai-chat":"AI 对话",other:"其他"});function N(r){return ve[r]||r||"未知"}const be=Object.freeze([["wechat","chat"],["messaging-","chat"],["social-","social"],["email-","email"],["shopping-","shopping"],["alipay-","shopping"],["travel-","travel"],["system-data","system"],["browser-","system"],["vscode","system"],["win-recent","system"],["git-activity","system"],["shell-history","system"],["local-files","system"],["ai-chat-","ai-chat"]]);function $(r){if(typeof r!="string"||r.length===0)return"other";for(const[t,n]of be)if(t.endsWith("-")||t==="system-data"){if(r.startsWith(t))return n}else if(r===t)return n;return"other"}const he={__name:"CategorySidebar",props:{selected:{type:String,default:null},facets:{type:Object,default:()=>({byCategory:{},total:0})}},emits:["select"],setup(r,{expose:t}){t();const n=r,e=w(()=>n.facets.total||0),o={chat:Y,social:W,email:H,shopping:G,travel:Q,system:K,"ai-chat":U,other:V};function l(i){return o[i]||V}function a(i){return i?{backgroundColor:"#fff",color:"#1677ff"}:{backgroundColor:"#f0f0f0",color:"#666"}}const s={props:n,total:e,ICONS:o,iconFor:l,badgeStyle:a,computed:w,get AppstoreOutlined(){return V},get MessageOutlined(){return Y},get PlayCircleOutlined(){return W},get MailOutlined(){return H},get ShoppingOutlined(){return G},get CarOutlined(){return Q},get MobileOutlined(){return K},get RobotOutlined(){return U},get CATEGORIES(){return ye},get categoryLabel(){return N}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},Se={class:"pdh-sidebar"},Oe=["onClick"],we={class:"label"};function Ce(r,t,n,e,o,l){const a=y("a-badge");return u(),O("div",Se,[t[2]||(t[2]=v("div",{class:"sidebar-title"},"数据类型",-1)),v("div",{class:M(["cat-item",{active:n.selected===null}]),onClick:t[0]||(t[0]=s=>r.$emit("select",null))},[c(e.AppstoreOutlined,{class:"icon"}),t[1]||(t[1]=v("span",{class:"label"},"全部",-1)),e.total>0?(u(),C(a,{key:0,count:e.total,"number-style":e.badgeStyle(n.selected===null),"overflow-count":9999},null,8,["count","number-style"])):E("v-if",!0)],2),(u(!0),O(B,null,se(e.CATEGORIES,s=>(u(),O("div",{key:s,class:M(["cat-item",{active:n.selected===s,dim:!n.facets.byCategory[s]}]),onClick:i=>r.$emit("select",s)},[(u(),C(le(e.iconFor(s)),{class:"icon"})),v("span",we,x(e.categoryLabel(s)),1),n.facets.byCategory[s]?(u(),C(a,{key:0,count:n.facets.byCategory[s],"number-style":e.badgeStyle(n.selected===s),"overflow-count":9999},null,8,["count","number-style"])):E("v-if",!0)],10,Oe))),128))])}const ke=D(he,[["render",Ce],["__scopeId","data-v-6b62a22e"],["__file","/tmp/cc-web-panel-SVKg9z/repo/packages/web-panel/src/components/pdh/CategorySidebar.vue"]]),Ee={__name:"SearchFilterBar",props:{filters:{type:Object,required:!0},facets:{type:Object,default:()=>({byAdapter:{}})},isLoading:{type:Boolean,default:!1},mode:{type:String,default:null},shortQuery:{type:Boolean,default:!1}},emits:["set-filter","reset"],setup(r,{expose:t,emit:n}){t();const e=r,o=n,l=w(()=>e.filters.category?`在「${e.filters.category}」类目内搜索…`:"搜索关键词(如:支付宝、罗技、Kotlin)…"),a=w(()=>Object.entries(e.facets.byAdapter||{}).sort((g,k)=>k[1]-g[1]).map(([g,k])=>({value:g,label:`${g} (${k})`}))),s=w(()=>!e.filters.since&&!e.filters.until?null:[e.filters.since?new Date(e.filters.since):null,e.filters.until?new Date(e.filters.until):null]),i=w(()=>!!(e.filters.q||e.filters.adapter||e.filters.subtype||e.filters.since||e.filters.until));function d(h){o("set-filter","q",h||"")}function _(h){o("set-filter","q",h||"")}function j(h){if(!h||h.length===0){o("set-filter","since",null),o("set-filter","until",null);return}const[g,k]=h;o("set-filter","since",g?+g:null),o("set-filter","until",k?+k:null)}const A={props:e,emit:o,placeholderText:l,adapterOptions:a,dateRangeValue:s,hasActiveFilters:i,onQInput:d,onSearch:_,onDateChange:j,computed:w,get SearchOutlined(){return pe},get CloseCircleOutlined(){return fe},get InfoCircleOutlined(){return de}};return Object.defineProperty(A,"__isScriptSetup",{enumerable:!1,value:!0}),A}},Re={class:"pdh-filter-bar"},xe={key:1,class:"hint"},je={key:2,class:"hint"};function Ae(r,t,n,e,o,l){const a=y("a-input-search"),s=y("a-select"),i=y("a-range-picker"),d=y("a-button");return u(),O("div",Re,[c(a,{value:n.filters.q,placeholder:e.placeholderText,"enter-button":"搜索","allow-clear":"",loading:n.isLoading,style:{flex:"1","max-width":"480px"},"onUpdate:value":e.onQInput,onSearch:e.onSearch},{prefix:m(()=>[c(e.SearchOutlined)]),_:1},8,["value","placeholder","loading"]),c(s,{value:n.filters.adapter,placeholder:"所有 adapter","allow-clear":"",options:e.adapterOptions,style:{width:"200px"},"onUpdate:value":t[0]||(t[0]=_=>r.$emit("set-filter","adapter",_||null))},null,8,["value","options"]),c(i,{value:e.dateRangeValue,placeholder:["开始日期","结束日期"],style:{width:"280px"},"onUpdate:value":e.onDateChange},null,8,["value"]),e.hasActiveFilters?(u(),C(d,{key:0,type:"link",danger:"",onClick:t[1]||(t[1]=_=>r.$emit("reset"))},{icon:m(()=>[c(e.CloseCircleOutlined)]),default:m(()=>[t[2]||(t[2]=b(" 清空筛选 ",-1))]),_:1})):E("v-if",!0),n.shortQuery?(u(),O("span",xe,[c(e.InfoCircleOutlined),t[3]||(t[3]=b(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):n.mode==="like"?(u(),O("span",je,[c(e.InfoCircleOutlined),t[4]||(t[4]=b(" 当前为 LIKE 兜底模式 ",-1))])):E("v-if",!0)])}const Le=D(Ee,[["render",Ae],["__scopeId","data-v-d7cce6e9"],["__file","/tmp/cc-web-panel-SVKg9z/repo/packages/web-panel/src/components/pdh/SearchFilterBar.vue"]]),Fe={__name:"RendererDispatcher",props:{event:{type:Object,required:!0}},setup(r,{expose:t}){t();const n=L(()=>F(()=>import("./ChatBubbleRenderer-ita18CO8.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),e=L(()=>F(()=>import("./OrderTableRenderer-DaVlfAsv.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),o=L(()=>F(()=>import("./TimelineRenderer-BD8NwNAK.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),l=L(()=>F(()=>import("./EmailListRenderer-smcpeq18.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),a=L(()=>F(()=>import("./GenericCardRenderer-CXs5JGAs.js"),__vite__mapDeps([12,1,2,3,4,13]),import.meta.url));function s(d){const _=d&&d.source&&d.source.adapter;switch($(_)){case"chat":case"ai-chat":return n;case"shopping":return e;case"travel":return o;case"email":return l;default:return a}}const i={ChatBubbleRenderer:n,OrderTableRenderer:e,TimelineRenderer:o,EmailListRenderer:l,GenericCardRenderer:a,rendererFor:s,defineAsyncComponent:L,get getCategory(){return $}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}};function De(r,t,n,e,o,l){return u(),C(le(e.rendererFor(n.event)),{event:n.event},null,8,["event"])}const Te=D(Fe,[["render",De],["__file","/tmp/cc-web-panel-SVKg9z/repo/packages/web-panel/src/components/pdh/renderers/RendererDispatcher.vue"]]);function ee(r){return JSON.stringify(r,null,2)}function te(r){return r.map(t=>JSON.stringify(t)).join(`
|
|
3
|
-
`)+`
|
|
4
|
-
`}function ne(r){const n=["id","subtype","occurredAt","occurredAtIso","actor","place","adapter","summary","contentJson","extraJson"].join(","),e=r.map(o=>{const l=Number.isFinite(o.occurredAt)?o.occurredAt:null,a=l?new Date(l).toISOString():"",s=o.source&&o.source.adapter||"",i=o.content&&(o.content.text||o.content.title||o.content.subject)||"";return[o.id||"",o.subtype||"",l!=null?String(l):"",a,o.actor||"",o.place||"",s,i,o.content?JSON.stringify(o.content):"",o.extra?JSON.stringify(o.extra):""].map(Ie).join(",")});return[n,...e].join(`
|
|
5
|
-
`)+`
|
|
6
|
-
`}function Ie(r){const t=String(r??"");return t.includes(",")||t.includes('"')||t.includes(`
|
|
7
|
-
`)||t.includes("\r")?'"'+t.replace(/"/g,'""')+'"':t}function re(r,t,n="application/octet-stream"){if(typeof window>"u"||typeof document>"u")return t;const e=new Blob([r],{type:n}),o=URL.createObjectURL(e),l=document.createElement("a");return l.href=o,l.download=t,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(o),1e3),t}function oe(r,t=null){const n=new Date,e=n.getFullYear(),o=String(n.getMonth()+1).padStart(2,"0"),l=String(n.getDate()).padStart(2,"0"),a=r==="ndjson"?"ndjson":r,s=t?`-${t}`:"";return`pdh-events-${e}-${o}-${l}${s}.${a}`}const Pe={__name:"ExportDropdown",props:{events:{type:Array,required:!0},category:{type:String,default:null}},setup(r,{expose:t}){t();const n=r,e=w(()=>n.events.length>0),o={json:"application/json;charset=utf-8",ndjson:"application/x-ndjson;charset=utf-8",csv:"text/csv;charset=utf-8"};function l(i){switch(i){case"json":return ee(n.events);case"ndjson":return te(n.events);case"csv":return ne(n.events);default:throw new Error(`unknown format: ${i}`)}}function a({key:i}){try{const d=l(i),_=oe(i,n.category);re(d,_,o[i]),P.success(`已导出 ${n.events.length} 条到 ${_}`)}catch(d){P.error(`导出失败: ${d.message||d}`)}}const s={props:n,hasResults:e,MIME:o,serialize:l,onClick:a,computed:w,get DownloadOutlined(){return _e},get DownOutlined(){return me},get message(){return P},get eventsToJson(){return ee},get eventsToNdjson(){return te},get eventsToCsv(){return ne},get downloadAs(){return re},get suggestFilename(){return oe}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}};function Ve(r,t,n,e,o,l){const a=y("a-button"),s=y("a-menu-item"),i=y("a-menu"),d=y("a-dropdown");return u(),C(d,{disabled:!e.hasResults},{overlay:m(()=>[c(i,{onClick:e.onClick},{default:m(()=>[c(s,{key:"json"},{default:m(()=>[...t[0]||(t[0]=[b("JSON (.json)",-1)])]),_:1}),c(s,{key:"ndjson"},{default:m(()=>[...t[1]||(t[1]=[b("NDJSON (.ndjson)",-1)])]),_:1}),c(s,{key:"csv"},{default:m(()=>[...t[2]||(t[2]=[b("CSV (.csv)",-1)])]),_:1})]),_:1})]),default:m(()=>[c(a,{disabled:!e.hasResults},{icon:m(()=>[c(e.DownloadOutlined)]),default:m(()=>[b(" 导出 ("+x(n.events.length)+") ",1),c(e.DownOutlined)]),_:1},8,["disabled"])]),_:1},8,["disabled"])}const qe=D(Pe,[["render",Ve],["__file","/tmp/cc-web-panel-SVKg9z/repo/packages/web-panel/src/components/pdh/ExportDropdown.vue"]]),Be={__name:"PdhVaultBrowser",setup(r,{expose:t}){t();const n=X(),e=w(()=>n.filters.q?`没有匹配 "${n.filters.q}" 的事件 — 试试更短的关键词或换个类目`:n.filters.category?`「${N(n.filters.category)}」类目下还没有数据 — 去采集页同步对应 adapter`:"Vault 里还没有数据 — 去「个人数据中台」页面同步任意 adapter");function o(s){n.filters.category=s,n.search()}function l(s,i){n.setFilter(s,i)}z(()=>{!n.hasResults&&!n.isLoading&&n.search()});const a={store:n,emptyHint:e,onCategorySelect:o,onSetFilter:l,onMounted:z,computed:w,get ReloadOutlined(){return ge},get usePdhBrowserStore(){return X},get categoryLabel(){return N},CategorySidebar:ke,SearchFilterBar:Le,RendererDispatcher:Te,ExportDropdown:qe};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}},Ne={class:"pdh-browser-page"},Me={class:"page-header"},ze={class:"main-pane"},Je={class:"results-summary"},Ue={key:0},Ke={key:0},Qe={key:1},Ge={class:"loaded-of"},He={class:"results-list"},We={key:2,class:"load-more"};function Ye(r,t,n,e,o,l){const a=y("a-tag"),s=y("a-button"),i=y("a-space"),d=y("a-col"),_=y("a-spin"),j=y("a-alert"),A=y("a-empty"),h=y("a-row");return u(),O("div",Ne,[v("div",Me,[t[6]||(t[6]=v("div",null,[v("h2",{class:"page-title"},"数据浏览器"),v("p",{class:"page-sub"}," Vault 里所有已采集的数据,按类目浏览 / 全文检索 / 时间窗口筛选。 完全离线,不外传。 ")],-1)),c(i,null,{default:m(()=>[e.store.mode==="fts5"?(u(),C(a,{key:0,color:"green"},{default:m(()=>[...t[3]||(t[3]=[b("FTS5 trigram",-1)])]),_:1})):e.store.mode==="like"?(u(),C(a,{key:1,color:"orange"},{default:m(()=>[...t[4]||(t[4]=[b("LIKE 兜底",-1)])]),_:1})):E("v-if",!0),c(e.ExportDropdown,{events:e.store.results,category:e.store.filters.category},null,8,["events","category"]),c(s,{onClick:t[0]||(t[0]=g=>e.store.search()),loading:e.store.isLoading},{icon:m(()=>[c(e.ReloadOutlined)]),default:m(()=>[t[5]||(t[5]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),c(h,{gutter:16,class:"browser-layout"},{default:m(()=>[c(d,{xs:24,sm:24,md:6,lg:5,xl:4},{default:m(()=>[c(e.CategorySidebar,{selected:e.store.filters.category,facets:e.store.facets,onSelect:e.onCategorySelect},null,8,["selected","facets"])]),_:1}),c(d,{xs:24,sm:24,md:18,lg:19,xl:20},{default:m(()=>[v("div",ze,[c(e.SearchFilterBar,{filters:e.store.filters,facets:e.store.facets,"is-loading":e.store.isLoading,mode:e.store.mode,"short-query":e.store.shortQuery,onSetFilter:e.onSetFilter,onReset:t[1]||(t[1]=g=>{e.store.reset(),e.store.search()})},null,8,["filters","facets","is-loading","mode","short-query"]),v("div",Je,[e.store.isLoading&&e.store.results.length===0?(u(),O("span",Ue,[c(_,{size:"small"}),t[7]||(t[7]=b(" 载入中… ",-1))])):(u(),O(B,{key:1},[v("strong",null,x(e.store.facets.total),1),t[11]||(t[11]=b(" 条事件 ",-1)),e.store.filters.category?(u(),O("span",Ke,[t[8]||(t[8]=b(" / 当前类目 ",-1)),v("strong",null,x(e.categoryLabel(e.store.filters.category)),1),v("strong",null,x(e.store.facets.byCategory[e.store.filters.category]||0),1)])):E("v-if",!0),e.store.filters.q?(u(),O("span",Qe,[t[9]||(t[9]=b(' / 关键词 "',-1)),v("em",null,x(e.store.filters.q),1),t[10]||(t[10]=b('"',-1))])):E("v-if",!0),v("span",Ge," / 已显示 "+x(e.store.results.length),1)],64))]),e.store.error?(u(),C(j,{key:0,type:"error","show-icon":"",message:e.store.error,closable:"",style:{margin:"12px 0"}},null,8,["message"])):E("v-if",!0),!e.store.isLoading&&e.store.results.length===0&&!e.store.error?(u(),C(A,{key:1,description:e.emptyHint,style:{"margin-top":"40px"}},null,8,["description"])):E("v-if",!0),v("div",He,[(u(!0),O(B,null,se(e.store.results,(g,k)=>(u(),C(e.RendererDispatcher,{key:`r-${k}-${g.id}`,event:g},null,8,["event"]))),128))]),e.store.canLoadMore?(u(),O("div",We,[c(s,{loading:e.store.isAppending,onClick:t[2]||(t[2]=g=>e.store.loadMore()),block:""},{default:m(()=>[...t[12]||(t[12]=[b(" 加载下一页 (50 条) ",-1)])]),_:1},8,["loading"])])):E("v-if",!0)])]),_:1})]),_:1})])}const tt=D(Be,[["render",Ye],["__scopeId","data-v-0f7c02cd"],["__file","/tmp/cc-web-panel-SVKg9z/repo/packages/web-panel/src/views/PdhVaultBrowser.vue"]]);export{tt 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-D3WhDg1s.js";import{I as z,J as x,U as _,Q as D,S as Q,K as T,V as R,c as A,F as Y,Z,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,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 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{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 K(){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 K()}),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 X={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:K,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(X,"__isScriptSetup",{enumerable:!1,value:!0}),X}},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(),Q(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(),Q(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(Y,null,Z(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(Y,null,Z(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-SVKg9z/repo/packages/web-panel/src/views/Terminal.vue"]]);export{Fe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{O as r}from"./index-D3WhDg1s.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-Bfmb67bb.js";import{U as t}from"./index-D3WhDg1s.js";import"./vendor-BvqAck49.js";import"./index-DnAbauX-.js";import"./icons-DP3uiYxy.js";const s=t(o);export{s as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-2RBgBLEz.js";import{U as t}from"./index-D3WhDg1s.js";import"./vendor-BvqAck49.js";import"./responsiveObserve-B1DqSgFh.js";import"./useFlexGapSupport-BQWuGrL0.js";import"./styleChecker-zb3gob1_.js";import"./index-DnAbauX-.js";import"./icons-DP3uiYxy.js";const l=t(o);export{l as default};
|