chainlesschain 0.162.166 → 0.162.168
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-LbDx7jL6.js → AIOps-CDzzuWZV.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DnurtK34.js → ActionButton-Dy-8MmQi.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DXSsV1am.js → Analytics-BtJ_VWkx.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-dqRpzNuD.js → AppLayout-DkjiI4VS.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-BwdmYepK.js → Artifacts-h8PyDO86.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-oSX0kOUG.js → Audit-DiDV0C6l.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-C2KxJahT.js → BackgroundAgents-DTw_aOaf.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-B4TkxWkC.js → Backup-CihFuUO9.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CX5-KxeU.js → BaseInput-CqP2QNoR.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-O_HzD-PL.js → Chat-tm-ygX-p.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-Br8saHQA.js → ChatBubbleRenderer-BVKEhj_y.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-ChepDpC1.js → Checkbox-BFMyRN3Q.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-D9z8kc7q.js → Codegen-B1gTeoAS.js} +1 -1
- package/src/assets/web-panel/assets/{Col-B-H5eoNw.js → Col-1GP8MvKL.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Ccyp_Kk5.js → Community-BLY938F6.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BNvBznp_.js → Compact-DVt_p36I.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-D1FjRd8n.js → Compliance-DxqEBXVG.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CV9B9u-8.js → Cowork-CyWrM-T8.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-BowJ4VIx.js → Cron-Domu6aI9.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BJc6jzRF.js → Crosschain-C8LKpjHJ.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BEp8NV6D.js → DID-XBy15RZ5.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-Dls0B3YB.js → Dashboard-DDAyPD-V.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DQ7zXVtD.js → Dropdown-BHV0MZ13.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-B9q79tOl.js → EmailListRenderer-DmFGW4PX.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CD8Ie-88.js → FamilyGuardDashboard-CqYdbKvd.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-5o7XU5Vf.js → Federation-YP5-Puv5.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DeKbMvOs.js → FormItemContext-BOmcIcTe.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CZiQvz_z.js → GenericCardRenderer-CvTZdoc4.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CTvFxVV8.js → Git-Q2oxua0L.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DwzFIjHt.js → Governance-D-WpyWEU.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CJBk59c-.js → Inference-NUtsYHQo.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DfsaXN2z.js → KnowledgeGraph-BHQLa8fr.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DVRYf18S.js → Logs-6WsR5Q1G.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-DuWoDwMx.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-BuIwyE4t.js → Marketplace-CigohRRW.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-D3U0o78E.js → McpTools-jcp6jVLf.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-QYVmyb3b.js → Memory-B00NU1ph.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BFgrj6eZ.js → MobileBridge-Cs_p3PzU.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-BFs2WljZ.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-BZQu8TcH.js → Mtc-CSEflwzw.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-BnFfEkLo.js → MtcAudit-dxSiEZ96.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-iUnNS9Cm.js → Multisig-CDAFEAyq.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DNNz1y9Y.js → NLProgramming-HoFpZNiB.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CZezNYRU.js → Notes-tAoQvVcE.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DBvrplIR.js → NotificationSettings-Czo2M9F4.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-CTDtee49.js → OrderTableRenderer-CM1kNTp6.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CCOUJX1R.js → Organization-Cudr0VOC.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-DcZghdk0.js → Overflow-BSXeDKiN.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-jmddWX9q.js → P2P-Cqv_g-F9.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-wfjMcczl.js → PdhVaultBrowser-7rjprPh8.js} +4 -4
- package/src/assets/web-panel/assets/{Permissions-DU1GJjca.js → Permissions-97pIDQKE.js} +3 -3
- package/src/assets/web-panel/assets/{PersonalDataHub-BzTMzDF9.js → PersonalDataHub-bparK9eQ.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-DPmjlpVc.js → Pipeline-CJgerM09.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-B6HRLpfK.js → Privacy-JqFS3PN7.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Cyy86AsN.js → ProjectInit-DMITd-2c.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Bl_WQxJ5.js → ProjectSettings-1UkdJ8Ii.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Co9yKThA.js → Projects-CYZqegqw.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DLa4NlIs.js → Providers-ChfXz3U0.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-BvzM7q5f.js → QrScannerModal-Rzkka-mf.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BN8yyyUj.js → QuickAsk-DEz9HaON.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-QsVN4w0i.js → Recommend-EFGP8AVu.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-tkDXw-TY.js → RemoteSession-6um0lGGy.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-DAifkGsy.js → Reputation-CA1BXTup.js} +1 -1
- package/src/assets/web-panel/assets/{Row-D7dZEyak.js → Row-stTnDJ9y.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DB5sImTA.js → RssFeed-B10qCCoG.js} +2 -2
- package/src/assets/web-panel/assets/{Search-3py3TO9V.js → Search-DSJroZ6p.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DhNUfT_k.js → Security-BpXkwiMW.js} +4 -4
- package/src/assets/web-panel/assets/{Services-DjJAA_5D.js → Services-BPQxjwK6.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-u95JjK3n.js → Skeleton-CfbKAMul.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DPo3L0Tz.js → Skills-CttYTfX0.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DWhkAZV1.js → Sla-ByluHich.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-PUegMtqV.js → SpeechSettings-BdZXKsfV.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BMNYrnrU.js → SyncSettings-xCR7iDzy.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-CYm_oTJC.js → Tasks-qTko_INn.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-Dw9Er5DN.js → Templates-CkIzhgDJ.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-7P3QIBSo.js → Tenant-BIaCaaK8.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-B2Qq38XP.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-DbCd1bDH.js → TimelineRenderer-D5eQDnEF.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-EQofpA0t.js → Tokens-DmeJ8NMQ.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-ChNLLypd.js → Trigger-C5sgb3C7.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-dlVGUKs5.js → Trust-H2vOb3Rb.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BXyBUhNF.js → UkeySign-NmPtHK2u.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BE8-68ge.js → VideoEditing-DHv-Ti7K.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-7ZIJOwNg.js → Wallet-BYZ3-PRP.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DgNd2Amr.js → WebAuthn-BaSlP7om.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-Z-Un-9l5.js → WorkflowEditor-CZ7IHuIi.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CtVDEkUc.js → chat-Dd9kY8gn.js} +1 -1
- package/src/assets/web-panel/assets/{colors-PXtJ2f1B.js → colors-yhzo6QSV.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-oN96nuBi.js → compact-item-C1JneVdM.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-okCJXQXa.js → createContext-C_waVCg2.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DaDlyVDY.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-pcHm--4o.js → hasIn-CkVg0Xnh.js} +1 -1
- package/src/assets/web-panel/assets/{index-BeAWCGEK.js → index-1VYhIr6D.js} +1 -1
- package/src/assets/web-panel/assets/{index-DC0bqrqV.js → index-BTMiVIBI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQYes2mk.js → index-BYOyb5X2.js} +1 -1
- package/src/assets/web-panel/assets/{index-vW0lwj0Y.js → index-BjDnI7oM.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUUJ2WfG.js → index-BlJNvg-2.js} +1 -1
- package/src/assets/web-panel/assets/{index-C0rfJBU3.js → index-BlzbSUK9.js} +1 -1
- package/src/assets/web-panel/assets/{index-Rk0X8lVz.js → index-BrN2hAeE.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDR2mi1p.js → index-BsSsurcn.js} +1 -1
- package/src/assets/web-panel/assets/index-BtsLExcc.js +1 -0
- package/src/assets/web-panel/assets/{index-jAY55MSx.js → index-Bwuu3Bf3.js} +1 -1
- package/src/assets/web-panel/assets/{index-_SaFHNsG.js → index-Bx3A6X4J.js} +1 -1
- package/src/assets/web-panel/assets/{index-T3QE8LuV.js → index-C-Sscgnv.js} +1 -1
- package/src/assets/web-panel/assets/index-C3qDvvIb.js +1 -0
- package/src/assets/web-panel/assets/{index-BUTyx-Lk.js → index-C4HNdMCt.js} +1 -1
- package/src/assets/web-panel/assets/{index-nMqLdwao.js → index-CBwmwTNa.js} +1 -1
- package/src/assets/web-panel/assets/{index-BuME9k4Y.js → index-CErewFeT.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHJIfdCV.js → index-CGtoL5mR.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0bfypsF.js → index-CUDjGt_V.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bl6N7ZyX.js → index-C_qqYZT7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXhezK4d.js → index-C_riAa6d.js} +1 -1
- package/src/assets/web-panel/assets/{index-BnhHxZul.js → index-CfEMjbhu.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cs1fGk1Z.js → index-ClQhh6v3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BjVIZfdA.js → index-CmiLmG0i.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWUJlCvK.js → index-D1xIbAxQ.js} +3 -3
- package/src/assets/web-panel/assets/{index-DfL10EcN.js → index-D6UXDH2D.js} +1 -1
- package/src/assets/web-panel/assets/{index-C4ravjdv.js → index-D7kQ_4uL.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtsyPnF5.js → index-DPkqQ2Pr.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQ1ZzJjN.js → index-DUA96wEj.js} +1 -1
- package/src/assets/web-panel/assets/{index-5aO2V0V4.js → index-DXHk9Vof.js} +1 -1
- package/src/assets/web-panel/assets/{index-CopGaCI_.js → index-DapftLUr.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1efSh1X.js → index-Dez7TUgG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBcKBb1E.js → index-DhZgULsY.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bht9n8Sm.js → index-Diquc7-l.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAQktO-6.js → index-DuGtLiTW.js} +1 -1
- package/src/assets/web-panel/assets/{index-CK0H3pQW.js → index-U_nLXGIx.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZKk4Lnm.js → index-_M8El5iz.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cc_MkksW.js → index-_VmzCYFn.js} +1 -1
- package/src/assets/web-panel/assets/{index-mB1UV7wA.js → index-_rZxgFtc.js} +1 -1
- package/src/assets/web-panel/assets/{index-BEtzqJw3.js → index-ewb0-LoH.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CG1jyiI7.js → initDefaultProps-DNN6qtGa.js} +1 -1
- package/src/assets/web-panel/assets/{motion-C8BYa98D.js → motion-BcM9exeo.js} +1 -1
- package/src/assets/web-panel/assets/{move-D1hqwitW.js → move-DsKJ-YvA.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-C2lol8rp.js → mtc-parser-glgGkxaK.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Ct6Zghfi.js → omit-BwHCU50S.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CSYbYfdc.js → pickAttrs-BVp-bLt7.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-WCk8di0z.js → placementArrow-CZNe0r-w.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CEC8CZ-3.js → responsiveObserve-DUafj9pU.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BsXyd7Lq.js → slide-H4NqXQxu.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-tDKldiUT.js → statusUtils-UjMzzGZ5.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BIS2unhx.js → styleChecker-qO5aCjyk.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-yFTVMDUv.js → useFlexGapSupport-ChecYwC8.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CZYbJwkO.js → useFs-BR0QvwO3.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-sbEHRLAM.js → usePersonalDataHub-DitK2Qgz.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BVjeSEQK.js → vnode-dxSb40dY.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BZKVvEZ6.js → zoom-ekJk8YB2.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agent.js +75 -0
- package/src/commands/session.js +132 -0
- package/src/data/changelog.json +8 -2
- package/src/harness/jsonl-session-store.js +9 -0
- package/src/harness/session-mirror.js +212 -6
- package/src/harness/worktree-isolator.js +10 -2
- package/src/lib/agent-core.js +1 -0
- package/src/lib/async-hook-queue.cjs +288 -0
- package/src/lib/async-hook-supervisor.cjs +52 -0
- package/src/lib/background-phase-reporter.js +116 -0
- package/src/lib/doctor-checkup.js +184 -4
- package/src/lib/hook-runner.cjs +248 -36
- package/src/lib/install-command-policy.js +343 -0
- package/src/lib/jsonl-session-store.js +1 -0
- package/src/lib/lsp/__tests__/lsp-server-registry.test.js +27 -0
- package/src/lib/lsp/code-intelligence.js +5 -1
- package/src/lib/lsp/lsp-server-registry.js +14 -0
- package/src/lib/lsp/workspace-roots.js +115 -0
- package/src/lib/runtime-checkup.js +33 -0
- package/src/lib/settings-hook-events.cjs +173 -3
- package/src/lib/settings-hooks.cjs +4 -0
- package/src/lib/shell-approval.js +47 -1
- package/src/lib/sub-agent-context.js +13 -0
- package/src/repl/add-dir.js +59 -1
- package/src/repl/agent-repl.js +85 -3
- package/src/runtime/agent-core.js +411 -82
- package/src/runtime/headless-runner.js +111 -9
- package/src/runtime/headless-stream.js +39 -0
- package/src/runtime/system-prompt.js +39 -12
- package/src/workers/background-agent-worker.js +8 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-BL_WsWZM.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-Bp5QB-46.js +0 -1
- package/src/assets/web-panel/assets/Terminal-ClPrfWW7.js +0 -3
- package/src/assets/web-panel/assets/devWarning-BzV6dk1B.js +0 -1
- package/src/assets/web-panel/assets/index-BFrAwXHp.js +0 -1
- package/src/assets/web-panel/assets/index-DJQFP47u.js +0 -1
package/src/repl/agent-repl.js
CHANGED
|
@@ -1045,6 +1045,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
1045
1045
|
// `undefined` so the runtime default-on path — and CC_PROJECT_MEMORY=0 — keep
|
|
1046
1046
|
// their existing behaviour byte-identically.
|
|
1047
1047
|
const _leanNoProjectMemory = options.projectMemory === false;
|
|
1048
|
+
let _loadedReplInstructions = null;
|
|
1048
1049
|
let _replBaseSystem = composeSystemPrompt(
|
|
1049
1050
|
buildSystemPrompt(process.cwd(), {
|
|
1050
1051
|
additionalDirectories,
|
|
@@ -1054,6 +1055,9 @@ export async function startAgentRepl(options = {}) {
|
|
|
1054
1055
|
systemPrompt: options.systemPrompt,
|
|
1055
1056
|
appendSystemPrompt: options.appendSystemPrompt,
|
|
1056
1057
|
projectMemory: _leanNoProjectMemory ? false : undefined,
|
|
1058
|
+
onInstructionsLoaded: (loaded) => {
|
|
1059
|
+
_loadedReplInstructions = loaded;
|
|
1060
|
+
},
|
|
1057
1061
|
},
|
|
1058
1062
|
);
|
|
1059
1063
|
let _activeOutputStyle = null; // { name, body }
|
|
@@ -1088,6 +1092,25 @@ export async function startAgentRepl(options = {}) {
|
|
|
1088
1092
|
// best-effort — no output style
|
|
1089
1093
|
}
|
|
1090
1094
|
|
|
1095
|
+
// settings.json InstructionsLoaded hooks (observe-only): fire once with the
|
|
1096
|
+
// exact loaded instruction file set so a hook can audit which cc.md/CLAUDE.md/
|
|
1097
|
+
// AGENTS.md/rules are authoritative this session. Best-effort; no-op when
|
|
1098
|
+
// project memory is off or no hook is registered.
|
|
1099
|
+
if (_settingsHooks && _loadedReplInstructions) {
|
|
1100
|
+
try {
|
|
1101
|
+
const { runInstructionsLoadedHooks } =
|
|
1102
|
+
await import("../lib/settings-hook-events.cjs");
|
|
1103
|
+
const ctx = runInstructionsLoadedHooks(_settingsHooks, {
|
|
1104
|
+
files: _loadedReplInstructions.files,
|
|
1105
|
+
cwd: process.cwd(),
|
|
1106
|
+
sessionId,
|
|
1107
|
+
}).additionalContext;
|
|
1108
|
+
if (ctx) messages.push({ role: "system", content: ctx });
|
|
1109
|
+
} catch (_err) {
|
|
1110
|
+
// best-effort
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1091
1114
|
// settings.json SessionStart hooks → inject session context (observe-only).
|
|
1092
1115
|
if (_settingsHooks) {
|
|
1093
1116
|
try {
|
|
@@ -1267,6 +1290,23 @@ export async function startAgentRepl(options = {}) {
|
|
|
1267
1290
|
}
|
|
1268
1291
|
}
|
|
1269
1292
|
|
|
1293
|
+
// Seed connected MCP servers with the startup workspace roots when the session
|
|
1294
|
+
// began with extra `--add-dir` roots — otherwise `roots/list` would only ever
|
|
1295
|
+
// return the cwd until the first mid-session /add-dir. No-op (byte-unchanged)
|
|
1296
|
+
// when there are no extra roots. Best-effort.
|
|
1297
|
+
if (additionalDirectories.length > 0) {
|
|
1298
|
+
try {
|
|
1299
|
+
const { workspaceRootDirs, notifyMcpRootsChanged } =
|
|
1300
|
+
await import("./add-dir.js");
|
|
1301
|
+
notifyMcpRootsChanged(
|
|
1302
|
+
[_adhocMcp?.mcpClient, _bundleMcpClient],
|
|
1303
|
+
workspaceRootDirs(process.cwd(), additionalDirectories),
|
|
1304
|
+
);
|
|
1305
|
+
} catch {
|
|
1306
|
+
/* best-effort — root advertisement must not block session startup */
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1270
1310
|
// Apply bundle approval policy to this session (after both gate and sessionId are ready)
|
|
1271
1311
|
if (_bundleResolved?.approvalPolicy?.default && _approvalGate && sessionId) {
|
|
1272
1312
|
try {
|
|
@@ -2382,8 +2422,12 @@ export async function startAgentRepl(options = {}) {
|
|
|
2382
2422
|
if (trimmed === "/add-dir" || trimmed.startsWith("/add-dir ")) {
|
|
2383
2423
|
const arg = trimmed.slice("/add-dir".length).trim();
|
|
2384
2424
|
try {
|
|
2385
|
-
const {
|
|
2386
|
-
|
|
2425
|
+
const {
|
|
2426
|
+
resolveAddDir,
|
|
2427
|
+
formatAddDirRoots,
|
|
2428
|
+
workspaceRootDirs,
|
|
2429
|
+
notifyMcpRootsChanged,
|
|
2430
|
+
} = await import("./add-dir.js");
|
|
2387
2431
|
if (!arg) {
|
|
2388
2432
|
logger.log(
|
|
2389
2433
|
"\n" +
|
|
@@ -2417,6 +2461,14 @@ export async function startAgentRepl(options = {}) {
|
|
|
2417
2461
|
messages[0].content = _activeOutputStyle
|
|
2418
2462
|
? `${_replBaseSystem}\n\n${_activeOutputStyle.body}`
|
|
2419
2463
|
: _replBaseSystem;
|
|
2464
|
+
// The workspace root LIST changed — advertise it to connected MCP
|
|
2465
|
+
// servers and fire notifications/roots/list_changed so they re-query
|
|
2466
|
+
// roots/list (Claude-Code 2.1.203 parity, same as /cd but with an
|
|
2467
|
+
// explicit new root, not just a cwd-derived change).
|
|
2468
|
+
notifyMcpRootsChanged(
|
|
2469
|
+
[_adhocMcp?.mcpClient, _bundleMcpClient],
|
|
2470
|
+
workspaceRootDirs(process.cwd(), additionalDirectories),
|
|
2471
|
+
);
|
|
2420
2472
|
logger.log(chalk.green(`Added working root: ${res.dir}`));
|
|
2421
2473
|
}
|
|
2422
2474
|
}
|
|
@@ -3002,9 +3054,11 @@ export async function startAgentRepl(options = {}) {
|
|
|
3002
3054
|
logger.info(`cwd: ${process.cwd()}`);
|
|
3003
3055
|
} else {
|
|
3004
3056
|
try {
|
|
3057
|
+
const oldCwd = process.cwd();
|
|
3005
3058
|
const expanded = target.replace(/^~(?=$|[\\/])/, os.homedir());
|
|
3006
3059
|
process.chdir(path.resolve(process.cwd(), expanded));
|
|
3007
|
-
|
|
3060
|
+
const newCwd = process.cwd();
|
|
3061
|
+
logger.log(chalk.green(`cwd → ${newCwd}`));
|
|
3008
3062
|
// MCP roots derive from cwd — tell connected servers to re-query
|
|
3009
3063
|
// roots/list (Claude-Code 2.1.203 change-notification parity).
|
|
3010
3064
|
for (const c of [_adhocMcp?.mcpClient, _bundleMcpClient]) {
|
|
@@ -3016,6 +3070,34 @@ export async function startAgentRepl(options = {}) {
|
|
|
3016
3070
|
}
|
|
3017
3071
|
}
|
|
3018
3072
|
}
|
|
3073
|
+
// CwdChanged settings hooks (lifecycle-event parity): the working dir
|
|
3074
|
+
// just changed, so fire CwdChanged with old→new cwd — a hook can
|
|
3075
|
+
// observe/react (re-audit the new dir's trust, reload per-dir config).
|
|
3076
|
+
// Observe-only (a cwd change never gates flow); best-effort; no-op
|
|
3077
|
+
// (byte-unchanged) without a registered CwdChanged hook.
|
|
3078
|
+
if (_settingsHooks && oldCwd !== newCwd) {
|
|
3079
|
+
try {
|
|
3080
|
+
const { runCwdChangedHooks, dispatchAsyncHooks } =
|
|
3081
|
+
await import("../lib/settings-hook-events.cjs");
|
|
3082
|
+
const payload = { oldCwd, newCwd, sessionId };
|
|
3083
|
+
runCwdChangedHooks(_settingsHooks, payload);
|
|
3084
|
+
if (!_asyncHookSupervisor) {
|
|
3085
|
+
const { AsyncHookSupervisor } =
|
|
3086
|
+
await import("../lib/async-hook-supervisor.cjs");
|
|
3087
|
+
_asyncHookSupervisor = new AsyncHookSupervisor({
|
|
3088
|
+
persistStats: true,
|
|
3089
|
+
});
|
|
3090
|
+
}
|
|
3091
|
+
dispatchAsyncHooks(
|
|
3092
|
+
_settingsHooks,
|
|
3093
|
+
"CwdChanged",
|
|
3094
|
+
{ old_cwd: oldCwd, cwd: newCwd, session_id: sessionId || null },
|
|
3095
|
+
{ cwd: newCwd, supervisor: _asyncHookSupervisor },
|
|
3096
|
+
);
|
|
3097
|
+
} catch {
|
|
3098
|
+
/* CwdChanged firing is best-effort */
|
|
3099
|
+
}
|
|
3100
|
+
}
|
|
3019
3101
|
} catch (err) {
|
|
3020
3102
|
logger.error(`/cd failed: ${err.message}`);
|
|
3021
3103
|
}
|