chainlesschain 0.162.42 → 0.162.43
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-Dsw5p7A7.js → AIOps-B0VFIcg3.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-sk89dGuT.js → ActionButton-V20enLcA.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-kd8hzeK3.js → Analytics-DndClUmA.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CxlLp7J8.js → AppLayout-D2rOhyu6.js} +5 -5
- package/src/assets/web-panel/assets/{Audit-CQnGmRxA.js → Audit-DqfIKxsM.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BioBFWVV.js → Backup-Cuqlers6.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DiYG1n7T.js → BaseInput-C5hGNJ5N.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BBuQf6VM.js → Chat-jbQSEg4t.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-BwgFmlRu.js → ChatBubbleRenderer-43u4DJn6.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-B-9WwFTA.js → Checkbox-DbUBGgg0.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DCkpThQa.js → Codegen-B99Mk_oQ.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BowFdito.js → Col-Uxc3P9FF.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BWGa92rE.js → Community-CCCVsol2.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CqJYYK0v.js → Compact-DpVZkM4n.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DiFqpJrM.js → Compliance-CZic_otw.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-qZNWcSQ9.js → Cowork-mfrcXT5E.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-BK70XYci.js → Cron-DZgYJquv.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DoM9N2kO.js → Crosschain-CsJE5KNs.js} +1 -1
- package/src/assets/web-panel/assets/{DID-B1F1RhQr.js → DID-DhzhW9OD.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CmDxx07G.js → Dashboard-wRXP3tMC.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-5GRByJY9.js → Dropdown-B-J3c7n7.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CyNgNjLG.js → EmailListRenderer-sNbeZPLo.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-Jwg-Wuye.js → FamilyGuardDashboard-CzfFKArY.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BQvoY2_5.js → Federation-DYehIJb9.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DKy8Zatd.js → FormItemContext-DpDqU3yC.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-n7VGwZNh.js → GenericCardRenderer-MSm4ZBE2.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CFCUe_so.js → Git-CJJpll9b.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DuZbRElA.js → Governance-D93XtWte.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DSEsBonV.js → Inference-8fZkwWyg.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DQoaeSnN.js → KnowledgeGraph-BbbI-D3L.js} +1 -1
- package/src/assets/web-panel/assets/Logs-B6n1Hcn8.js +2 -0
- package/src/assets/web-panel/assets/{Marketplace--gDqWnX8.js → Marketplace-B92T5ZT1.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-btiDEQ_G.js → McpTools-DKddzSA8.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-CYrqC903.js → Memory-CAHamDmS.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CktV5fRJ.js → MobileBridge-BTPLGA6_.js} +3 -3
- package/src/assets/web-panel/assets/{MobileProjects-CTVZQD7g.js → MobileProjects-DvGxl7Bd.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CRq5Ir7q.js → Mtc-BGm92GtT.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-HvY-N0XZ.js → MtcAudit-CL6I9XX4.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-CWmUSW7g.js → Multisig-BYQujNg6.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BUwhn6xG.js → NLProgramming-x4DYENrx.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BI8NqNSW.js → Notes-DyW_mhF0.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-DVa8gbo1.js → NotificationSettings-CgeAblV8.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-XNEr64wi.js → OrderTableRenderer-COT7rmDe.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-a0imltNQ.js → Organization-Pm-XRWB1.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-DJ2P1mNg.js → Overflow-Batydsoy.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-pRJPEJ7a.js → P2P-qwLlvxlM.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-eJa8vkF5.js → PdhVaultBrowser-CYvPhc0M.js} +5 -5
- package/src/assets/web-panel/assets/{Permissions-fxa21qzR.js → Permissions-gRGKScdi.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-C3JggyPn.js → PersonalDataHub-Bob9qL_z.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-iR9fwke0.js → Pipeline-DvP3SdFD.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-oBf4gwv0.js → Privacy-B-c--IOb.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DZU2PVgs.js → ProjectInit-UYJYk1VO.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-amcXcSet.js → ProjectSettings--euwin_I.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-QoksY3-i.js → Projects-2xn0tfJt.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-uquz_5KZ.js → Providers-Bgq2bGTl.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Wxx-iIH9.js → QuickAsk-Ck0iiQiv.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CD8OJGJF.js → Recommend-CuW6xeEE.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-BuJMHfco.js → Reputation-JiNIQHms.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DvfqASM7.js → Row-BCudZU5T.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-TGSmYgmV.js → RssFeed-CH0VQaou.js} +3 -3
- package/src/assets/web-panel/assets/{Search-ndSDi33l.js → Search-CJjlSa50.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CL1FLyzy.js → Security-B8Cf8rVb.js} +3 -3
- package/src/assets/web-panel/assets/{Services--AeNKFrY.js → Services-BocEJ7ad.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CMllAeqY.js → Skeleton-DpI6YIya.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DD29bVTm.js → Skills-C2lt0BNa.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DU_Mdrad.js → Sla-BxSG8zOp.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-Cu0ncgI_.js → SpeechSettings-DzOejchn.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Bfk00Eb9.js → SyncSettings-CgKxL89k.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-C-2V1COO.js → Tasks-CYDrs0ND.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CWO4Aw1l.js → Templates-CRIQTXNH.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BnDkNC6u.js → Tenant-DC4HO1F6.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-VR0JLDdw.js → Terminal-CqMZJzEh.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DMjbfev0.js → TimelineRenderer-D-TTq2sh.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-j1ZGEgBP.js → Tokens-NUv03cX9.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BKVNLlOB.js → Trigger-X-FBeIBO.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-Bbfv8AJr.js → Trust-BFd9yV9d.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-C0_Gllsu.js → UkeySign-BVJ0bGzq.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CE__3Owf.js → VideoEditing-C3Q7lvPF.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Cjzavume.js → Wallet-Doxo0C8S.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-KbjxueWc.js → WebAuthn-DveIKeGo.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-Bz7UuLhK.js → WorkflowEditor-CTzSNXfX.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BrSAQ_Gd.js → chat-eQ6OL2Nl.js} +1 -1
- package/src/assets/web-panel/assets/{colors-Bn8oqI93.js → colors-B7NzPMJ1.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-jxrLqj8Q.js → compact-item-DA8_yifp.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B0uxIvgB.js → createContext-CAdn_TqD.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-UBrKMao4.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-BFsfry47.js → hasIn-ko4B6kih.js} +1 -1
- package/src/assets/web-panel/assets/{index-CireH7ze.js → index-B0I9Q9uH.js} +1 -1
- package/src/assets/web-panel/assets/{index-vma7bVdQ.js → index-B6M0zm0k.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bd-zsWvY.js → index-BBIQJRlz.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAIdm73g.js → index-BBq7mqhI.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmD-qtjF.js → index-BKAgTgeT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DteDdzDQ.js → index-BNt9GIgX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CCVF9irI.js → index-BX1VHvqW.js} +1 -1
- package/src/assets/web-panel/assets/{index-BY4oOQaA.js → index-B_sjoYmu.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQvlv_iE.js → index-Bb6JBiCG.js} +1 -1
- package/src/assets/web-panel/assets/index-BcOtgvfX.js +1 -0
- package/src/assets/web-panel/assets/{index-DMPQqeLb.js → index-C2qPPvCv.js} +3 -3
- package/src/assets/web-panel/assets/{index-B9ZDJUc0.js → index-CDweqnrF.js} +1 -1
- package/src/assets/web-panel/assets/{index-9iuxVwRC.js → index-CJY-yrWh.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdjhDnIk.js → index-CgcRhqah.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcHQBw3b.js → index-CloqX2ad.js} +1 -1
- package/src/assets/web-panel/assets/{index-_fgTMPd1.js → index-Co5moC1M.js} +1 -1
- package/src/assets/web-panel/assets/{index-DOJYoYG7.js → index-CqNS5nZH.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRkK0yoO.js → index-CzerRnMr.js} +1 -1
- package/src/assets/web-panel/assets/{index-Crqzhccj.js → index-D38_8grM.js} +1 -1
- package/src/assets/web-panel/assets/{index-CovEs7is.js → index-D4yrKz8e.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7q_gApa.js → index-DGCgSG2a.js} +1 -1
- package/src/assets/web-panel/assets/{index-BiXyJmcf.js → index-DLn-aR4t.js} +1 -1
- package/src/assets/web-panel/assets/{index-BPpGWBAU.js → index-DMGbCVXZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DeHd8uSh.js → index-DQ-4d9yy.js} +1 -1
- package/src/assets/web-panel/assets/{index-LLFwwG0R.js → index-DZ0Dd5mp.js} +1 -1
- package/src/assets/web-panel/assets/{index-E6sYKDbw.js → index-DmEcUTX3.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bk_Tv7Ey.js → index-Dnz_7pqU.js} +1 -1
- package/src/assets/web-panel/assets/index-DogBvgW2.js +1 -0
- package/src/assets/web-panel/assets/{index-pMVcl-a3.js → index-Dq_DwzU4.js} +1 -1
- package/src/assets/web-panel/assets/{index-C6AmzUjG.js → index-DyfLqass.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZ8gyTGc.js → index-N7_jPRVy.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1WrY_4z.js → index-aClwSoZt.js} +1 -1
- package/src/assets/web-panel/assets/{index-CR3QNisI.js → index-b2I5q4bm.js} +1 -1
- package/src/assets/web-panel/assets/{index-D08W2YxD.js → index-dMx6z8Kk.js} +1 -1
- package/src/assets/web-panel/assets/{index-DSDgBgrL.js → index-dhQxLUnV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjxJSCB8.js → index-ku6l6unx.js} +1 -1
- package/src/assets/web-panel/assets/{index-xRD9Fctn.js → index-llKEnU9Q.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQZsB8nt.js → index-snb01c99.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzZfG8Ft.js → index-v8QteGiY.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-AKS5cCeZ.js → initDefaultProps-BE1YKWp0.js} +1 -1
- package/src/assets/web-panel/assets/{motion-SDjWiFhF.js → motion-B4Pkg4rs.js} +1 -1
- package/src/assets/web-panel/assets/{move-LEZnOtYR.js → move-DbLtadAv.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DhLBVNzX.js → omit-Dn52nvgx.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DdVSELea.js → pickAttrs-D4B5N6WV.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BaEGCCq9.js → placementArrow-CKSjiqCc.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DV6XM19W.js → responsiveObserve-g5NpHuRh.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BOUnaBay.js → slide-WYVY3fl7.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BAaMQ0VA.js → statusUtils-YAkHF6HM.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CsoP0nmm.js → styleChecker-Cv_nVk4H.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-t20RbINy.js → useFlexGapSupport-D1JaeNmU.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DH_Emn7A.js → useFs-DYfXeCVm.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CeYW427U.js → usePersonalDataHub-DdtPxV0b.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CX5gGmGb.js → vnode-nFZXhzTF.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CofyY9oD.js → zoom-CmyXMc6s.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agent.js +66 -51
- package/src/lib/llm-config-defaults.js +31 -0
- package/src/runtime/headless-stream.js +109 -0
- package/src/assets/web-panel/assets/Logs-u7UMHPnz.js +0 -2
- package/src/assets/web-panel/assets/devWarning-rqonNzey.js +0 -1
- package/src/assets/web-panel/assets/index-BI1fCgPX.js +0 -1
- package/src/assets/web-panel/assets/index-D8iCZ8gl.js +0 -1
package/src/commands/agent.js
CHANGED
|
@@ -385,6 +385,22 @@ export function registerAgentCommand(program) {
|
|
|
385
385
|
llm: loadConfig().llm || {},
|
|
386
386
|
});
|
|
387
387
|
|
|
388
|
+
// Config-default LLM (parity with cc ask/chat): a bare `cc agent` honors
|
|
389
|
+
// config.json `llm` (provider/model/baseUrl/apiKey) instead of silently
|
|
390
|
+
// assuming local ollama — this is what makes the editor chat panel work
|
|
391
|
+
// against a cloud-configured setup. Explicit --provider wins outright;
|
|
392
|
+
// the vision resolution above still overrides for --image runs. Applied
|
|
393
|
+
// AFTER resolveVisionLlm so config defaults don't masquerade as explicit
|
|
394
|
+
// flags there, and BEFORE every dispatch (headless/stream/REPL) since
|
|
395
|
+
// they all read options.provider/model/baseUrl/apiKey.
|
|
396
|
+
{
|
|
397
|
+
const { applyConfigLlmDefaults } =
|
|
398
|
+
await import("../lib/llm-config-defaults.js");
|
|
399
|
+
applyConfigLlmDefaults(options, loadConfig().llm || {}, {
|
|
400
|
+
explicitModel: explicitCliModel, // settings-file model must not ride
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
|
|
388
404
|
// --think / --ultrathink → options.thinking for the agent loop (Anthropic
|
|
389
405
|
// extended thinking; ignored by other providers). --think with no value →
|
|
390
406
|
// true; --think <level> → that level; --ultrathink wins as "ultra".
|
|
@@ -510,55 +526,55 @@ export function registerAgentCommand(program) {
|
|
|
510
526
|
? parseInt(options.maxTurns, 10)
|
|
511
527
|
: undefined;
|
|
512
528
|
const headlessOptions = {
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
cwd: process.cwd(),
|
|
538
|
-
}),
|
|
539
|
-
appendSystemPrompt: resolvePromptText(options.appendSystemPrompt, {
|
|
540
|
-
cwd: process.cwd(),
|
|
541
|
-
}),
|
|
542
|
-
// --include-partial-messages: live token deltas as stream_event lines
|
|
543
|
-
includePartialMessages: options.includePartialMessages === true,
|
|
544
|
-
// --goal [id]: bind a cc goal into the run (Phase 1)
|
|
545
|
-
goal: options.goal,
|
|
546
|
-
// --goal-assess: run-end LLM progress assessment (Phase 2)
|
|
547
|
-
goalAssess: options.goalAssess === true,
|
|
548
|
-
// --mcp-config: connect ad-hoc MCP servers + expose their tools
|
|
549
|
-
mcpConfig: options.mcpConfig || null,
|
|
550
|
-
// --no-mcp: skip registered (cc mcp add) auto-connect servers
|
|
551
|
-
useRegisteredMcp: options.mcp !== false,
|
|
552
|
-
// --ide / --no-ide: auto-connect a running editor's MCP bridge
|
|
553
|
-
ide: options.ide,
|
|
529
|
+
prompt,
|
|
530
|
+
images,
|
|
531
|
+
model: visionLlm.model || options.model,
|
|
532
|
+
thinking,
|
|
533
|
+
thinkingBudget,
|
|
534
|
+
provider: visionLlm.provider || options.provider,
|
|
535
|
+
baseUrl: visionLlm.baseUrl || options.baseUrl,
|
|
536
|
+
apiKey: visionLlm.apiKey || options.apiKey,
|
|
537
|
+
sessionId: options.session,
|
|
538
|
+
// A resolved --session/--continue/--resume id means "replay this
|
|
539
|
+
// conversation and persist the new turns"; the runner loads prior
|
|
540
|
+
// history when the id already exists and creates it otherwise.
|
|
541
|
+
resume: options.session,
|
|
542
|
+
outputFormat: options.outputFormat,
|
|
543
|
+
permissionMode: options.permissionMode,
|
|
544
|
+
allowedTools: parseToolList(options.allowedTools),
|
|
545
|
+
disallowedTools: parseToolList(options.disallowedTools),
|
|
546
|
+
additionalDirectories,
|
|
547
|
+
autoCheckpoint: options.checkpoint === true,
|
|
548
|
+
maxTurns,
|
|
549
|
+
// commander maps --no-file-refs → options.fileRefs === false
|
|
550
|
+
expandFileRefs: options.fileRefs !== false,
|
|
551
|
+
// --system-prompt / --append-system-prompt (literal or @file)
|
|
552
|
+
systemPrompt: resolvePromptText(options.systemPrompt, {
|
|
554
553
|
cwd: process.cwd(),
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
554
|
+
}),
|
|
555
|
+
appendSystemPrompt: resolvePromptText(options.appendSystemPrompt, {
|
|
556
|
+
cwd: process.cwd(),
|
|
557
|
+
}),
|
|
558
|
+
// --include-partial-messages: live token deltas as stream_event lines
|
|
559
|
+
includePartialMessages: options.includePartialMessages === true,
|
|
560
|
+
// --goal [id]: bind a cc goal into the run (Phase 1)
|
|
561
|
+
goal: options.goal,
|
|
562
|
+
// --goal-assess: run-end LLM progress assessment (Phase 2)
|
|
563
|
+
goalAssess: options.goalAssess === true,
|
|
564
|
+
// --mcp-config: connect ad-hoc MCP servers + expose their tools
|
|
565
|
+
mcpConfig: options.mcpConfig || null,
|
|
566
|
+
// --no-mcp: skip registered (cc mcp add) auto-connect servers
|
|
567
|
+
useRegisteredMcp: options.mcp !== false,
|
|
568
|
+
// --ide / --no-ide: auto-connect a running editor's MCP bridge
|
|
569
|
+
ide: options.ide,
|
|
570
|
+
cwd: process.cwd(),
|
|
571
|
+
// --permission-prompt-tool: defer approvals to an MCP tool
|
|
572
|
+
permissionPromptTool: options.permissionPromptTool || null,
|
|
573
|
+
// --settings: extra .claude/settings.json permission rules
|
|
574
|
+
settingsFile: options.settings || null,
|
|
575
|
+
outputStyle: options.outputStyle || null,
|
|
576
|
+
// --fallback-model: retry once on a backup model on transient errors
|
|
577
|
+
chatFn: fallbackChatFn,
|
|
562
578
|
};
|
|
563
579
|
|
|
564
580
|
// --json-schema: structured output — wrap the runner with capture +
|
|
@@ -573,9 +589,8 @@ export function registerAgentCommand(program) {
|
|
|
573
589
|
process.exit(1);
|
|
574
590
|
}
|
|
575
591
|
try {
|
|
576
|
-
const { runJsonSchemaConstrained } =
|
|
577
|
-
"../lib/json-schema-output.js"
|
|
578
|
-
);
|
|
592
|
+
const { runJsonSchemaConstrained } =
|
|
593
|
+
await import("../lib/json-schema-output.js");
|
|
579
594
|
const code = await runJsonSchemaConstrained({
|
|
580
595
|
schemaFile: options.jsonSchema,
|
|
581
596
|
baseOptions: headlessOptions,
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config-default LLM resolution for `cc agent` (parity with `cc ask`/`chat`):
|
|
3
|
+
* a bare run honors `~/.chainlesschain/config.json` `llm` —
|
|
4
|
+
* provider/model/baseUrl/apiKey — instead of silently assuming local ollama
|
|
5
|
+
* (the historical default that broke every cloud-configured setup the moment
|
|
6
|
+
* no --provider flag was passed, e.g. the editor chat panel's spawn).
|
|
7
|
+
*
|
|
8
|
+
* Rules (pure; mutates and returns `options` for call-site convenience):
|
|
9
|
+
* - An explicit --provider wins outright: config is NOT consulted at all
|
|
10
|
+
* (mixing config's model/key into a different provider would be wrong).
|
|
11
|
+
* - With no --provider but a configured one: provider + any of
|
|
12
|
+
* model/baseUrl/apiKey the user did not explicitly set come from config.
|
|
13
|
+
* - Model pairing: when the provider is adopted from config, the model must
|
|
14
|
+
* pair with it — only an EXPLICIT --model (opts.explicitModel) survives;
|
|
15
|
+
* a model that leaked in from .claude/settings.json (meant for whatever
|
|
16
|
+
* provider that file assumed) is replaced by config's own model. Same
|
|
17
|
+
* lesson as the --settings "opus"→404 vision trap.
|
|
18
|
+
* - No configured provider → unchanged (runner defaults apply: ollama).
|
|
19
|
+
*/
|
|
20
|
+
export function applyConfigLlmDefaults(options = {}, cfgLlm = {}, opts = {}) {
|
|
21
|
+
if (options.provider || !cfgLlm.provider) return options;
|
|
22
|
+
options.provider = cfgLlm.provider;
|
|
23
|
+
if (opts.explicitModel) {
|
|
24
|
+
options.model = opts.explicitModel;
|
|
25
|
+
} else if (cfgLlm.model) {
|
|
26
|
+
options.model = cfgLlm.model;
|
|
27
|
+
}
|
|
28
|
+
if (!options.baseUrl && cfgLlm.baseUrl) options.baseUrl = cfgLlm.baseUrl;
|
|
29
|
+
if (!options.apiKey && cfgLlm.apiKey) options.apiKey = cfgLlm.apiKey;
|
|
30
|
+
return options;
|
|
31
|
+
}
|
|
@@ -37,6 +37,33 @@ import {
|
|
|
37
37
|
rebuildMessages as jsonlRebuildMessages,
|
|
38
38
|
sessionExists as jsonlSessionExists,
|
|
39
39
|
} from "../harness/jsonl-session-store.js";
|
|
40
|
+
import { getPlanModeManager } from "../lib/plan-mode.js";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Structured view of the global plan-mode state for `plan_update` events
|
|
44
|
+
* (the chat panel renders its plan card from this). Pure read; never throws.
|
|
45
|
+
*/
|
|
46
|
+
export function planSnapshot(pm) {
|
|
47
|
+
let items = [];
|
|
48
|
+
let risk = null;
|
|
49
|
+
try {
|
|
50
|
+
const plan = pm.currentPlan;
|
|
51
|
+
items = (plan?.items || []).map((i) => ({
|
|
52
|
+
id: i.id,
|
|
53
|
+
title: i.title,
|
|
54
|
+
tool: i.tool,
|
|
55
|
+
impact: i.estimatedImpact || "low",
|
|
56
|
+
status: i.status,
|
|
57
|
+
}));
|
|
58
|
+
if (items.length > 0) {
|
|
59
|
+
const r = pm.getRiskAssessment();
|
|
60
|
+
if (r) risk = { level: r.level, totalScore: r.totalScore };
|
|
61
|
+
}
|
|
62
|
+
} catch {
|
|
63
|
+
/* snapshot is best-effort */
|
|
64
|
+
}
|
|
65
|
+
return { active: pm.isActive(), state: pm.state || null, items, risk };
|
|
66
|
+
}
|
|
40
67
|
import { withQuietStdout } from "./quiet-stdout.js";
|
|
41
68
|
|
|
42
69
|
/**
|
|
@@ -51,6 +78,12 @@ export function parseInputEvent(line) {
|
|
|
51
78
|
} catch {
|
|
52
79
|
return { error: `invalid JSON line: ${trimmed.slice(0, 80)}` };
|
|
53
80
|
}
|
|
81
|
+
// Plan-mode control events (chat-panel plan UI):
|
|
82
|
+
// {"type":"plan","action":"enter"|"approve"|"reject"}
|
|
83
|
+
if (obj && typeof obj === "object" && obj.type === "plan") {
|
|
84
|
+
const action = String(obj.action || "").toLowerCase();
|
|
85
|
+
return action ? { plan: action } : null;
|
|
86
|
+
}
|
|
54
87
|
const msg = obj && typeof obj === "object" ? obj.message || obj : {};
|
|
55
88
|
let content = msg.content ?? obj.text ?? obj.prompt;
|
|
56
89
|
if (Array.isArray(content)) {
|
|
@@ -455,6 +488,69 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
455
488
|
continue;
|
|
456
489
|
}
|
|
457
490
|
|
|
491
|
+
// Plan-mode control events (chat-panel plan UI). Mirrors the REPL's
|
|
492
|
+
// /plan verbs: enter blocks write tools (blocked calls become plan items),
|
|
493
|
+
// approve unlocks them and IMMEDIATELY runs a continuation turn, reject
|
|
494
|
+
// exits plan mode. Every control answers with a `plan_update` event.
|
|
495
|
+
if (parsed.plan) {
|
|
496
|
+
const pm = getPlanModeManager();
|
|
497
|
+
if (parsed.plan === "enter") {
|
|
498
|
+
if (!pm.isActive()) {
|
|
499
|
+
pm.enterPlanMode({ title: "Agent Plan" });
|
|
500
|
+
messages.push({
|
|
501
|
+
role: "system",
|
|
502
|
+
content:
|
|
503
|
+
"[PLAN MODE ACTIVE] You are now in plan mode. You can read " +
|
|
504
|
+
"files, search, and analyze — but write/execute tools are " +
|
|
505
|
+
"blocked. Any blocked tool calls will be recorded as plan " +
|
|
506
|
+
"items. Analyze the task thoroughly, then the user will " +
|
|
507
|
+
"approve your plan.",
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
emit({
|
|
511
|
+
type: "plan_update",
|
|
512
|
+
...planSnapshot(pm),
|
|
513
|
+
session_id: sessionId,
|
|
514
|
+
});
|
|
515
|
+
continue;
|
|
516
|
+
}
|
|
517
|
+
if (parsed.plan === "reject") {
|
|
518
|
+
if (pm.isActive()) pm.rejectPlan("User rejected");
|
|
519
|
+
emit({
|
|
520
|
+
type: "plan_update",
|
|
521
|
+
...planSnapshot(pm),
|
|
522
|
+
session_id: sessionId,
|
|
523
|
+
});
|
|
524
|
+
continue;
|
|
525
|
+
}
|
|
526
|
+
if (parsed.plan === "approve") {
|
|
527
|
+
if (!pm.isActive() || !(pm.currentPlan?.items?.length > 0)) {
|
|
528
|
+
emit({
|
|
529
|
+
type: "plan_update",
|
|
530
|
+
...planSnapshot(pm),
|
|
531
|
+
session_id: sessionId,
|
|
532
|
+
note: "nothing to approve",
|
|
533
|
+
});
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
pm.approvePlan();
|
|
537
|
+
messages.push({
|
|
538
|
+
role: "system",
|
|
539
|
+
content: `[PLAN APPROVED] The user has approved your plan with ${pm.currentPlan.items.length} items. You can now use all tools including write_file, edit_file, run_shell, and run_skill. Execute the plan items in order.`,
|
|
540
|
+
});
|
|
541
|
+
emit({
|
|
542
|
+
type: "plan_update",
|
|
543
|
+
...planSnapshot(pm),
|
|
544
|
+
session_id: sessionId,
|
|
545
|
+
});
|
|
546
|
+
// Fall through into the normal turn machinery with a continuation
|
|
547
|
+
// prompt — the agent starts executing without an extra user message.
|
|
548
|
+
parsed.text = "Proceed with the approved plan.";
|
|
549
|
+
} else if (!parsed.text) {
|
|
550
|
+
continue; // unknown plan action — ignored
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
458
554
|
// Per-turn iteration budget so one turn can't starve the rest.
|
|
459
555
|
const budget = Number.isFinite(options.maxTurns)
|
|
460
556
|
? new IterationBudget({
|
|
@@ -565,6 +661,19 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
565
661
|
turn: turns,
|
|
566
662
|
usage: outcome.usage,
|
|
567
663
|
});
|
|
664
|
+
|
|
665
|
+
// While planning, blocked tool calls grew the plan during this turn —
|
|
666
|
+
// push the fresh snapshot so the panel's plan card stays live.
|
|
667
|
+
{
|
|
668
|
+
const pm = getPlanModeManager();
|
|
669
|
+
if (pm.isActive()) {
|
|
670
|
+
emit({
|
|
671
|
+
type: "plan_update",
|
|
672
|
+
...planSnapshot(pm),
|
|
673
|
+
session_id: sessionId,
|
|
674
|
+
});
|
|
675
|
+
}
|
|
676
|
+
}
|
|
568
677
|
}
|
|
569
678
|
|
|
570
679
|
// Tear down ad-hoc MCP servers (--mcp-config) when stdin closes.
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{I as s,J as g,U as d,c as n,K as _,V as k,S as W,R as S,F as K,Z as Q,w as M,n as C,o as R,b as T,r,P as p,Q as O,_ as U}from"./vendor-BvqAck49.js";import{_ as E,u as N}from"./index-DMPQqeLb.js";import{R as F}from"./icons-DP3uiYxy.js";const I={__name:"Logs",setup(V,{expose:a}){a();const x=N(),e=r("status"),y=r(!1),v=r(""),i=r(""),c=r(""),f=r(!0),o=r(null),h={status:"status",doctor:"doctor","skill-sources":"skill sources","llm-providers":"llm providers"},m=T(()=>i.value.split(`
|
|
2
|
-
`)),b=T(()=>{if(!c.value)return m.value;const t=c.value.toLowerCase();return m.value.filter(u=>u.toLowerCase().includes(t))});function L(t){return t.includes("✖")||t.includes("error")||t.includes("Error")||t.includes("failed")?"line-error":t.includes("✔")||t.includes("✓")||t.includes("success")||t.includes("running")?"line-success":t.includes("warn")||t.includes("Warn")||t.includes("○")?"line-warn":t.startsWith(" ")||t.startsWith(" ")?"line-indent":""}function l(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function w(t){if(!c.value)return t;const u=c.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.replace(new RegExp(`(${u})`,"gi"),"<mark>$1</mark>")}async function B(){y.value=!0,v.value="",i.value="";const t=h[e.value]||"status";try{const{output:u}=await x.execute(t,3e4);i.value=u,f.value&&(await C(),o.value&&(o.value.scrollTop=o.value.scrollHeight))}catch(u){v.value=`执行失败: ${u.message}`,i.value=v.value}finally{y.value=!1}}M(b,async()=>{f.value&&(await C(),o.value&&(o.value.scrollTop=o.value.scrollHeight))}),R(B);const H={ws:x,activeTab:e,loading:y,error:v,rawOutput:i,searchQuery:c,autoScroll:f,logContainer:o,TAB_COMMANDS:h,allLines:m,filteredLines:b,lineClass:L,escapeHtml:l,highlightSearch:w,loadLog:B,ref:r,computed:T,watch:M,nextTick:C,onMounted:R,get ReloadOutlined(){return F},get useWsStore(){return N}};return Object.defineProperty(H,"__isScriptSetup",{enumerable:!1,value:!0}),H}},j={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},q={style:{display:"flex",gap:"10px",margin:"12px 0"}},z={ref:"logContainer",class:"log-box"},A={key:0,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},D={key:1,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},P={key:2},Z=["innerHTML"];function J(V,a,x,e,y,v){const i=s("a-checkbox"),c=s("a-button"),f=s("a-space"),o=s("a-tab-pane"),h=s("a-tabs"),m=s("a-input-search"),b=s("a-tag"),L=s("a-spin");return p(),g("div",null,[d("div",j,[a[5]||(a[5]=d("div",null,[d("h2",{class:"page-title"},"日志查看"),d("p",{class:"page-sub"},"系统运行日志与诊断输出")],-1)),n(f,null,{default:_(()=>[n(i,{checked:e.autoScroll,"onUpdate:checked":a[0]||(a[0]=l=>e.autoScroll=l)},{default:_(()=>[...a[3]||(a[3]=[O("自动滚动",-1)])]),_:1},8,["checked"]),n(c,{type:"primary",ghost:"",loading:e.loading,onClick:e.loadLog},{icon:_(()=>[n(e.ReloadOutlined)]),default:_(()=>[a[4]||(a[4]=O(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),k(" Tab Selector "),n(h,{activeKey:e.activeTab,"onUpdate:activeKey":a[1]||(a[1]=l=>e.activeTab=l),onChange:e.loadLog,style:{"margin-bottom":"0"}},{default:_(()=>[n(o,{key:"status",tab:"系统状态"}),n(o,{key:"doctor",tab:"环境诊断"}),n(o,{key:"skill-sources",tab:"技能来源"}),n(o,{key:"llm-providers",tab:"LLM 提供商"})]),_:1},8,["activeKey"]),k(" Search Bar "),d("div",q,[n(m,{value:e.searchQuery,"onUpdate:value":a[2]||(a[2]=l=>e.searchQuery=l),placeholder:"搜索日志内容...","allow-clear":"",style:{flex:"1"}},null,8,["value"]),e.filteredLines.length!==e.allLines.length?(p(),W(b,{key:0,color:"blue"},{default:_(()=>[O(S(e.filteredLines.length)+" / "+S(e.allLines.length)+" 行 ",1)]),_:1})):k("v-if",!0)]),k(" Log Output "),d("div",z,[e.loading?(p(),g("div",A,[n(L,{size:"large"}),a[6]||(a[6]=d("div",{style:{"margin-top":"10px"}},"加载中...",-1))])):e.filteredLines.length?(p(),g("div",P,[(p(!0),g(K,null,Q(e.filteredLines,(l,w)=>(p(),g("div",{key:w,class:U(["log-line",e.lineClass(l)]),innerHTML:e.highlightSearch(e.escapeHtml(l))},null,10,Z))),128))])):(p(),g("div",D,S(e.error||"暂无日志内容,点击刷新加载"),1))],512)])}const $=E(I,[["render",J],["__scopeId","data-v-8c2906e0"],["__file","/tmp/cc-web-panel-Fa41ZI/repo/packages/web-panel/src/views/Logs.vue"]]);export{$ as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{O as r}from"./index-DMPQqeLb.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-DvfqASM7.js";import{U as t}from"./index-DMPQqeLb.js";import"./vendor-BvqAck49.js";import"./responsiveObserve-DV6XM19W.js";import"./useFlexGapSupport-t20RbINy.js";import"./styleChecker-CsoP0nmm.js";import"./index-CR3QNisI.js";import"./icons-DP3uiYxy.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-BowFdito.js";import{U as t}from"./index-DMPQqeLb.js";import"./vendor-BvqAck49.js";import"./index-CR3QNisI.js";import"./icons-DP3uiYxy.js";const s=t(o);export{s as default};
|