chainlesschain 0.165.6 → 0.165.9
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 +2 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-vfoDb6HZ.js → AIOps-DxwjrnEA.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-Cm5f7p93.js → ActionButton-JdbYowzn.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-yRuvgWxa.js → Analytics-C06GCahv.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BROsC4h1.js → AppLayout-BUVEEyi1.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-CimHApb1.js → Artifacts-D_ORzkJd.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DI8kr8zI.js → Audit-8o_Y5ejG.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DSLzKy-n.js → BackgroundAgents-DrkHd5VU.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DkH_n2r1.js → Backup-CKBZCX11.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CKSrUoRA.js → BaseInput-C8HkI399.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-ClwfMXUS.js → Chat-zb2H2Wux.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CjMaqfL7.js → ChatBubbleRenderer-BDcNpU_F.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-BYTehcQG.js → Checkbox-MwPtQmNz.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-B8AMcp6J.js → Codegen-3p5QCkFK.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BNSogPo3.js → Col-BPLlhn52.js} +1 -1
- package/src/assets/web-panel/assets/{Community-JxPvGb8O.js → Community-C-3dBNOM.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DF7bFAgE.js → Compact-BUcy-F_b.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-Bvhqnwrq.js → Compliance-CI8NxT8m.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BDS0CJvM.js → Cowork-DaDEBS-Q.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DqvRfxoQ.js → Cron-BSv9HXu5.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CDcIvnqS.js → Crosschain-yuiKlJmv.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D7jaUxU3.js → DID-D6LfldB0.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-B5A18wEV.js → Dashboard-CBhLqG61.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-_6IVkGag.js → Dropdown-BG8pIl3O.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-C9PeiKCG.js → EmailListRenderer-CY92VIE6.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DXjuEHrX.js → FamilyGuardDashboard-1Q_ehauM.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-B4IAR9zv.js → Federation-D3XirJIU.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CxQeSNx1.js → FormItemContext-DfI9UuGZ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-B8GS-Y3N.js → GenericCardRenderer-IeCZk2m7.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BS8SouUX.js → Git-DzK4IJAZ.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-Dq9aYb5Q.js → Governance-BHf5KfmQ.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BrCEe9AJ.js → Inference-BmaxSALS.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DybOpiY2.js → KnowledgeGraph-BgePFLA9.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DBpzbRfx.js → Logs-nqgxpOc4.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-xkX6izBt.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Cc7CCSCu.js → Marketplace-Bu8to-86.js} +1 -1
- package/src/assets/web-panel/assets/McpTools-BFWTzEk0.js +4 -0
- package/src/assets/web-panel/assets/{Memory-KCqlp9ol.js → Memory-B026G2GA.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Bys84ySN.js → MobileBridge-CM2Eeg6I.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-B-6qU-je.js → MobileProjects-B79Ob3hy.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BgY-fvCq.js → Mtc-CxevSZuV.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-B8pCmqQJ.js → MtcAudit-X396cPEX.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-BbOmYutA.js → Multisig-HWIB_aZ1.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BocLQz_M.js → NLProgramming-gnYD1Xwy.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CSwbxEop.js → Notes-Dn2Gf_J1.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CqFNSYG3.js → NotificationSettings-BRKBQ5rq.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-C6gMfAk7.js → OrderTableRenderer-Dy___Cgo.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-QrDXVdMJ.js → Organization-cqfccxnt.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Cxntotjt.js → Overflow-CSX4FHN3.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CIdBOwNq.js → P2P-Bwa4aghp.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CT5aP8rD.js → PdhVaultBrowser-Dhszyjig.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-DH7OM8XU.js → Permissions-CXzTyk6e.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CnJqbWce.js → PersonalDataHub-CFCAAJbb.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-5C3HG1kH.js → Pipeline-BPJbx6xt.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-B4yIp7xK.js → Privacy-BbiXvEHz.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BMvt-2M0.js → ProjectInit-B-s7-wSD.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CvSTEMRG.js → ProjectSettings-Dyug206y.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BKBJxEek.js → Projects-BtAI5Fwo.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-BdwUqFWN.js → Providers-JpIPmz6N.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DtnCKlTm.js → QrScannerModal-CZdoN64A.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-sTbgwyNr.js → QuickAsk-BwvnoRIT.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Bzr14gSb.js → Recommend-ASMlMQrD.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-C_TF5IaJ.js → RemoteSession-BiJzKFKi.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-GCAM4H2K.js → Reputation-C80TWLIO.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Dir0r6OQ.js → Row-C1VNmjmX.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CpGnlecX.js → RssFeed-T2MyGUlG.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DMMamC6u.js → Search-DXM6O83L.js} +1 -1
- package/src/assets/web-panel/assets/{Security-yqay5yG-.js → Security-nv69kU7W.js} +3 -3
- package/src/assets/web-panel/assets/{Services-C5i2wh9G.js → Services-AyHWe7Qj.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-vUqk35yj.js → Skeleton-D6PWLxFI.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DzcSkhot.js → Skills-BqVeOmNQ.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CB6qbYNr.js → Sla-BegIPl9M.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BHUI7cox.js → SpeechSettings-CKJn3xk-.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-D-RrsxTJ.js → SyncSettings-Th4cnAMl.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-DFxdOJiq.js → Tasks-BuKfBroh.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-SKAob_Aq.js → Templates-CMuWN8Ac.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BPfsfHQ-.js → Tenant-C4je8E8Q.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-8iw7FpUf.js → Terminal-agJESOcO.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-C4Gjj5Su.js → TimelineRenderer-D2qDuVZ_.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-COYhN18e.js → Tokens-Cvmn99rH.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-B-JzXcf6.js → Trigger-D_QYIHH8.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BJ5bg0nI.js → Trust-BmzvQLnX.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BG_ByRMf.js → UkeySign-D_LopHwH.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B3kOnSiU.js → VideoEditing-DoWl3PhQ.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CcoGFnK7.js → Wallet-5NYcAkxe.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DdT8vRC_.js → WebAuthn-B-_Q3ewp.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-CZu3M9N8.js → WorkflowEditor-CHET-gi2.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DxJt3Qba.js → chat-C6nvb-n6.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DdYfwJaB.js → colors-CTDE9LTX.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BG3SUzwj.js → compact-item-KnemdF8D.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-By51z2-1.js → createContext-DUJR3Uek.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-1DqLH1KX.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-B0apZ3KJ.js → hasIn-CFNTaby8.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZxtP8jG7.js → index-65HO56Bv.js} +1 -1
- package/src/assets/web-panel/assets/{index-Da_WBdLX.js → index-B8RtbSkV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBPf3TpM.js → index-BHqSqnW7.js} +1 -1
- package/src/assets/web-panel/assets/{index-BP94CrBV.js → index-BTetEUWd.js} +1 -1
- package/src/assets/web-panel/assets/{index-p1_8SbI1.js → index-BXWg1crv.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWF8_mkx.js → index-BdiC4LOs.js} +1 -1
- package/src/assets/web-panel/assets/index-BhJtcPWo.js +1 -0
- package/src/assets/web-panel/assets/{index-SQqOlR3d.js → index-BuizJo2E.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpjZhgNd.js → index-BwZM1rod.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzmQElZy.js → index-C96N9xeL.js} +1 -1
- package/src/assets/web-panel/assets/{index-bP_VlDb4.js → index-CHfUdnJH.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZFbps9po.js → index-CKvBF3Ov.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaIz0NAW.js → index-CSD9_I2_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BewKYrX9.js → index-Cc7dbl_p.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNIxXMmN.js → index-CcF0D7UZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Q2SCX-MI.js → index-Ceu92a8D.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE76D-kA.js → index-CnLpuTAU.js} +1 -1
- package/src/assets/web-panel/assets/index-Cq8MWPDT.js +1 -0
- package/src/assets/web-panel/assets/{index-BkvcEo4p.js → index-CquKnw5r.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cp6e-hGw.js → index-CyEtHvEE.js} +1 -1
- package/src/assets/web-panel/assets/{index-BLIbGOLX.js → index-DF-fcTvQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCn8IcxV.js → index-DF1Y0Vuw.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bissefox.js → index-DJyPeBBk.js} +3 -3
- package/src/assets/web-panel/assets/{index-BZ_0qm4g.js → index-DP-PbO11.js} +1 -1
- package/src/assets/web-panel/assets/{index-kf57LJ93.js → index-DZgCRMxk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYINoRLK.js → index-DfJzS3Qa.js} +1 -1
- package/src/assets/web-panel/assets/{index-3jWkIu5j.js → index-DqPpJkte.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5rLiEo0.js → index-DzReoLyh.js} +1 -1
- package/src/assets/web-panel/assets/{index-CW93tZDv.js → index-JGTiDeOW.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1C9i79A.js → index-NUR0If7O.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAhHirVH.js → index-NtAcnJYW.js} +1 -1
- package/src/assets/web-panel/assets/{index-RD6O-0C6.js → index-OmuhFYKE.js} +1 -1
- package/src/assets/web-panel/assets/{index-oxRrmFO9.js → index-Wlc7o_C8.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3rWuPMW.js → index-bxTPfdri.js} +1 -1
- package/src/assets/web-panel/assets/{index-BIrJfqO4.js → index-k6uorYmf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfWYsB9t.js → index-ox6mIwE2.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bos5_aMV.js → index-rVDD7AAR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWEuZWCK.js → index-u0h6QqVV.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dz49VOyQ.js → index-v-mtxmWH.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BWJktcg8.js → initDefaultProps-qEt8dI-t.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BEXBzUFV.js → motion-DetKPWy-.js} +1 -1
- package/src/assets/web-panel/assets/{move-BUKwn2sx.js → move-BeNYeDV2.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-FTI7btqQ.js → mtc-parser-C0q0MK_T.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CsLtSPH3.js → omit-DLKkrKpE.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DWZxsT_S.js → pickAttrs-Bw1tWsY8.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Bcfs43CX.js → placementArrow-DeesBLbd.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-a9bcC1p-.js → responsiveObserve-bqLhxHhn.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BDTzgOXN.js → slide-DGCXRoQm.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Iq1j_HUg.js → statusUtils-H-re3Egl.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DAZEYxeh.js → styleChecker-BXg4qGX_.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DVkjyDrh.js → useFlexGapSupport-CKLb2KA6.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-wXTpNTHt.js → useFs-CTAhHeyw.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CtQM_aZr.js → usePersonalDataHub-BQ4pDh5g.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-hjEoG85v.js → vnode-jrSK6j4j.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BHVpyKg_.js → zoom-fOQE24pw.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +91 -60
- package/src/commands/git.js +39 -0
- package/src/commands/plugin.js +17 -2
- package/src/commands/session-group.js +131 -0
- package/src/commands/session-location.js +48 -0
- package/src/commands/session.js +11 -0
- package/src/commands/sync-providers.js +4 -1
- package/src/commands/update.js +1 -0
- package/src/data/changelog.json +40 -1
- package/src/gateways/ws/mcp-topic-handlers.js +167 -0
- package/src/gateways/ws/ws-agent-handler.js +20 -12
- package/src/harness/jsonl-session-store.js +279 -37
- package/src/harness/mcp-client.js +701 -91
- package/src/harness/session-index.js +15 -4
- package/src/lib/agent-network.js +166 -29
- package/src/lib/agent-router.js +62 -6
- package/src/lib/agent-sandbox.js +7 -1
- package/src/lib/agent-worktree.js +8 -1
- package/src/lib/auto-mode-safety-classifier.js +3 -17
- package/src/lib/background-agent-keeper-protocol.js +26 -6
- package/src/lib/background-agent-supervisor.js +17 -1
- package/src/lib/browser-evidence.js +1405 -0
- package/src/lib/chrome-connector.js +465 -79
- package/src/lib/claude-code-bridge.js +159 -54
- package/src/lib/claude-project-auto-memory.js +481 -0
- package/src/lib/claude-project-storage-layout.js +104 -0
- package/src/lib/cloud/cloud-client.js +40 -0
- package/src/lib/cowork-workflow.js +69 -6
- package/src/lib/execution-location-local-supervisor.mjs +226 -0
- package/src/lib/execution-location-runner-lifecycle.js +991 -0
- package/src/lib/execution-location-target-preflight.js +333 -0
- package/src/lib/execution-location-target.js +783 -13
- package/src/lib/external-agent-adapters.js +269 -0
- package/src/lib/file-lines.js +6 -1
- package/src/lib/gateway-client-resilience.js +571 -0
- package/src/lib/gitlab-mr-worktree.js +176 -0
- package/src/lib/hooks-v2-producers.js +119 -15
- package/src/lib/hooks-v2-workspace-context.js +44 -1
- package/src/lib/host-resource-budget.js +295 -0
- package/src/lib/ide-context.js +15 -2
- package/src/lib/ipfs-storage.js +127 -25
- package/src/lib/llm-config-defaults.js +43 -0
- package/src/lib/mcp-lifecycle-authority.js +887 -0
- package/src/lib/mcp-oauth.js +101 -20
- package/src/lib/mcp-tls.js +103 -3
- package/src/lib/orchestrator.js +47 -0
- package/src/lib/paths.js +260 -32
- package/src/lib/permission-request.js +48 -0
- package/src/lib/plugin-runtime/bin.js +3 -1
- package/src/lib/plugin-runtime/hooks.js +3 -1
- package/src/lib/plugin-runtime/install.js +117 -1
- package/src/lib/plugin-runtime/lsp.js +4 -4
- package/src/lib/plugin-runtime/marketplace-archive-source.js +40 -5
- package/src/lib/plugin-runtime/marketplace-catalog.js +13 -2
- package/src/lib/plugin-runtime/marketplace-command-descriptor.js +343 -0
- package/src/lib/plugin-runtime/marketplace-command-source.js +580 -0
- package/src/lib/plugin-runtime/marketplace-source-adapter.js +33 -8
- package/src/lib/plugin-runtime/mcp.js +3 -1
- package/src/lib/plugin-runtime/monitors.js +3 -1
- package/src/lib/plugin-runtime/remote-source.js +151 -6
- package/src/lib/plugin-runtime/settings.js +3 -1
- package/src/lib/plugin-runtime/trust.js +274 -13
- package/src/lib/process-execution-broker/credential-agent.js +210 -41
- package/src/lib/process-execution-broker/index.js +15 -1
- package/src/lib/process-execution-broker/linux-cgroup-v2.js +391 -0
- package/src/lib/process-execution-broker/platform-sandbox.js +50 -28
- package/src/lib/project-mcp-trust.js +165 -10
- package/src/lib/resume-session.js +9 -6
- package/src/lib/session-core-singletons.js +26 -11
- package/src/lib/session-host-lease.js +52 -16
- package/src/lib/session-lifecycle-scope.js +153 -0
- package/src/lib/session-message-fabric.js +168 -21
- package/src/lib/session-projection.js +244 -4
- package/src/lib/session-store-guard.js +3 -1
- package/src/lib/session-workbench-store.js +466 -0
- package/src/lib/shell-approval.js +7 -5
- package/src/lib/spellcheck.js +211 -0
- package/src/lib/sub-agent-context.js +9 -9
- package/src/lib/sync-cli-db.js +485 -129
- package/src/lib/sync-credentials.js +31 -20
- package/src/lib/web-fetch.js +112 -40
- package/src/lib/web-search.js +127 -61
- package/src/lib/workflow-engine.js +42 -11
- package/src/lib/workspace-trust.js +793 -0
- package/src/repl/agent-repl.js +124 -5
- package/src/repl/permission-prompt.js +10 -12
- package/src/runtime/agent-core.js +311 -18
- package/src/runtime/agent-runtime.js +12 -1
- package/src/runtime/bootstrap.js +37 -13
- package/src/runtime/coding-agent-contract-shared.cjs +11 -4
- package/src/runtime/headless-runner.js +234 -36
- package/src/runtime/headless-stream.js +181 -6
- package/src/runtime/mcp-config.js +298 -8
- package/src/runtime/policies/agent-policy.js +8 -0
- package/src/runtime/status-diagnostics-lite.js +9 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-CFyt8iUd.js +0 -1
- package/src/assets/web-panel/assets/McpTools-DFaIhOfu.js +0 -7
- package/src/assets/web-panel/assets/devWarning-DorRZcI9.js +0 -1
- package/src/assets/web-panel/assets/index-BETiL0a3.js +0 -1
- package/src/assets/web-panel/assets/index-BhAVHuW8.js +0 -1
package/src/lib/ide-context.js
CHANGED
|
@@ -569,10 +569,23 @@ export function normalizeDiffReviewAudit(value, binding = {}) {
|
|
|
569
569
|
*/
|
|
570
570
|
export async function requestIdeDiffApproval(mcp, req = {}) {
|
|
571
571
|
if (!hasIdeOpenDiff(mcp)) return null;
|
|
572
|
-
|
|
572
|
+
// The IDE bridge accepts a workspace path, never a Git object/blob-shaped
|
|
573
|
+
// value. Reject malformed paths before contacting the privileged bridge.
|
|
574
|
+
if (
|
|
575
|
+
typeof req.path !== "string" ||
|
|
576
|
+
req.path.trim().length === 0 ||
|
|
577
|
+
typeof req.modifiedText !== "string"
|
|
578
|
+
) {
|
|
579
|
+
return null;
|
|
580
|
+
}
|
|
573
581
|
const operation = req.operation || "modify";
|
|
574
582
|
if (!DIFF_REVIEW_OPERATIONS.has(operation)) return null;
|
|
575
|
-
if (
|
|
583
|
+
if (
|
|
584
|
+
operation === "rename" &&
|
|
585
|
+
(typeof req.targetPath !== "string" || req.targetPath.trim().length === 0)
|
|
586
|
+
) {
|
|
587
|
+
return null;
|
|
588
|
+
}
|
|
576
589
|
const exec = mcp.externalToolExecutors.mcp__ide__openDiff;
|
|
577
590
|
const reviewContext = Object.fromEntries(
|
|
578
591
|
Object.entries({
|
package/src/lib/ipfs-storage.js
CHANGED
|
@@ -21,6 +21,35 @@
|
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
import crypto from "crypto";
|
|
24
|
+
import { createSecretStore } from "./secret-store.js";
|
|
25
|
+
|
|
26
|
+
let configuredIpfsSecretStore = null;
|
|
27
|
+
|
|
28
|
+
export function setIpfsSecretStore(secretStore) {
|
|
29
|
+
if (
|
|
30
|
+
!secretStore ||
|
|
31
|
+
typeof secretStore.set !== "function" ||
|
|
32
|
+
typeof secretStore.get !== "function" ||
|
|
33
|
+
typeof secretStore.delete !== "function"
|
|
34
|
+
) {
|
|
35
|
+
throw new TypeError("IPFS storage requires a SecretStore");
|
|
36
|
+
}
|
|
37
|
+
configuredIpfsSecretStore = secretStore;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function getIpfsSecretStore() {
|
|
41
|
+
if (!configuredIpfsSecretStore) {
|
|
42
|
+
configuredIpfsSecretStore = createSecretStore({
|
|
43
|
+
service: "chainlesschain-ipfs-dek",
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return configuredIpfsSecretStore;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function _encryptionKeyRef(cid) {
|
|
50
|
+
const digest = crypto.createHash("sha256").update(cid).digest("hex");
|
|
51
|
+
return `ipfs/dek/${digest}`;
|
|
52
|
+
}
|
|
24
53
|
|
|
25
54
|
/* ── Constants ──────────────────────────────────────────── */
|
|
26
55
|
|
|
@@ -91,7 +120,8 @@ export function ensureIpfsTables(db) {
|
|
|
91
120
|
mime_type TEXT,
|
|
92
121
|
pinned INTEGER DEFAULT 0,
|
|
93
122
|
encrypted INTEGER DEFAULT 0,
|
|
94
|
-
encryption_key TEXT,
|
|
123
|
+
encryption_key TEXT DEFAULT '',
|
|
124
|
+
encryption_key_ref TEXT,
|
|
95
125
|
knowledge_id TEXT,
|
|
96
126
|
metadata TEXT,
|
|
97
127
|
payload TEXT,
|
|
@@ -105,9 +135,63 @@ export function ensureIpfsTables(db) {
|
|
|
105
135
|
updated_at INTEGER NOT NULL
|
|
106
136
|
)`);
|
|
107
137
|
|
|
138
|
+
const columns = db.prepare("PRAGMA table_info(ipfs_content)").all();
|
|
139
|
+
if (
|
|
140
|
+
columns.length > 0 &&
|
|
141
|
+
!columns.some((entry) => entry.name === "encryption_key_ref")
|
|
142
|
+
) {
|
|
143
|
+
db.exec("ALTER TABLE ipfs_content ADD COLUMN encryption_key_ref TEXT");
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
migrateIpfsEncryptionKeys(db);
|
|
147
|
+
|
|
108
148
|
_loadAll(db);
|
|
109
149
|
}
|
|
110
150
|
|
|
151
|
+
export function migrateIpfsEncryptionKeys(db, { dryRun = false } = {}) {
|
|
152
|
+
db.exec("PRAGMA secure_delete = ON");
|
|
153
|
+
const rows = db
|
|
154
|
+
.prepare("SELECT cid, encryption_key, encryption_key_ref FROM ipfs_content")
|
|
155
|
+
.all()
|
|
156
|
+
.filter((row) => row.encryption_key && !row.encryption_key_ref);
|
|
157
|
+
if (dryRun) {
|
|
158
|
+
return { pending: rows.length, migrated: 0, dryRun: true };
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (rows.length > 0 && typeof db.transaction !== "function") {
|
|
162
|
+
throw new Error(
|
|
163
|
+
"IPFS data-key migration requires transactional database support",
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const secretStore = rows.length > 0 ? getIpfsSecretStore() : null;
|
|
168
|
+
const stagedKeyRefs = [];
|
|
169
|
+
try {
|
|
170
|
+
for (const row of rows) {
|
|
171
|
+
const keyRef = _encryptionKeyRef(row.cid);
|
|
172
|
+
secretStore.set(keyRef, row.encryption_key);
|
|
173
|
+
stagedKeyRefs.push(keyRef);
|
|
174
|
+
}
|
|
175
|
+
const applyMigration = db.transaction(() => {
|
|
176
|
+
for (const row of rows) {
|
|
177
|
+
const keyRef = _encryptionKeyRef(row.cid);
|
|
178
|
+
db.prepare(
|
|
179
|
+
"UPDATE ipfs_content SET encryption_key = ?, encryption_key_ref = ? WHERE cid = ?",
|
|
180
|
+
).run("", keyRef, row.cid);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
applyMigration();
|
|
184
|
+
} catch (error) {
|
|
185
|
+
for (const keyRef of stagedKeyRefs) secretStore.delete(keyRef);
|
|
186
|
+
throw error;
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
pending: rows.length,
|
|
190
|
+
migrated: rows.length,
|
|
191
|
+
dryRun: false,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
111
195
|
function _loadAll(db) {
|
|
112
196
|
_content.clear();
|
|
113
197
|
_knowledgeLinks.clear();
|
|
@@ -263,6 +347,7 @@ export function addContent(
|
|
|
263
347
|
}
|
|
264
348
|
|
|
265
349
|
const cid = _computeCid(payload);
|
|
350
|
+
const encryptionKeyRef = encryptionKey ? _encryptionKeyRef(cid) : null;
|
|
266
351
|
|
|
267
352
|
// Idempotent: if CID exists, just update flags
|
|
268
353
|
const existing = _content.get(cid);
|
|
@@ -301,7 +386,8 @@ export function addContent(
|
|
|
301
386
|
mime_type: mimeType || null,
|
|
302
387
|
pinned: pin ? 1 : 0,
|
|
303
388
|
encrypted: encrypt ? 1 : 0,
|
|
304
|
-
encryption_key:
|
|
389
|
+
encryption_key: "",
|
|
390
|
+
encryption_key_ref: encryptionKeyRef,
|
|
305
391
|
knowledge_id: knowledgeId || null,
|
|
306
392
|
metadata: metadataJson,
|
|
307
393
|
payload: payloadBase64,
|
|
@@ -309,24 +395,33 @@ export function addContent(
|
|
|
309
395
|
updated_at: now,
|
|
310
396
|
};
|
|
311
397
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
398
|
+
if (encryptionKeyRef) {
|
|
399
|
+
getIpfsSecretStore().set(encryptionKeyRef, encryptionKey);
|
|
400
|
+
}
|
|
401
|
+
try {
|
|
402
|
+
db.prepare(
|
|
403
|
+
`INSERT INTO ipfs_content (id, cid, filename, size, mime_type, pinned, encrypted, encryption_key, encryption_key_ref, knowledge_id, metadata, payload, created_at, updated_at)
|
|
404
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
405
|
+
).run(
|
|
406
|
+
id,
|
|
407
|
+
cid,
|
|
408
|
+
entry.filename,
|
|
409
|
+
size,
|
|
410
|
+
entry.mime_type,
|
|
411
|
+
entry.pinned,
|
|
412
|
+
entry.encrypted,
|
|
413
|
+
entry.encryption_key,
|
|
414
|
+
entry.encryption_key_ref,
|
|
415
|
+
entry.knowledge_id,
|
|
416
|
+
entry.metadata,
|
|
417
|
+
entry.payload,
|
|
418
|
+
now,
|
|
419
|
+
now,
|
|
420
|
+
);
|
|
421
|
+
} catch (error) {
|
|
422
|
+
if (encryptionKeyRef) getIpfsSecretStore().delete(encryptionKeyRef);
|
|
423
|
+
throw error;
|
|
424
|
+
}
|
|
330
425
|
|
|
331
426
|
_content.set(cid, entry);
|
|
332
427
|
if (knowledgeId) {
|
|
@@ -350,9 +445,12 @@ export function getContent(db, cid, { asString } = {}) {
|
|
|
350
445
|
if (!entry) return null;
|
|
351
446
|
|
|
352
447
|
let buffer = Buffer.from(entry.payload, "base64");
|
|
353
|
-
if (entry.encrypted
|
|
448
|
+
if (entry.encrypted) {
|
|
354
449
|
try {
|
|
355
|
-
|
|
450
|
+
if (!entry.encryption_key_ref) return null;
|
|
451
|
+
const encryptionKey = getIpfsSecretStore().get(entry.encryption_key_ref);
|
|
452
|
+
if (!encryptionKey) return null;
|
|
453
|
+
buffer = _decrypt(buffer, encryptionKey);
|
|
356
454
|
} catch (_e) {
|
|
357
455
|
return null;
|
|
358
456
|
}
|
|
@@ -395,7 +493,7 @@ export function listContent(db, { pinned, knowledgeId, limit = 50 } = {}) {
|
|
|
395
493
|
.sort((a, b) => b.created_at - a.created_at)
|
|
396
494
|
.slice(0, limit)
|
|
397
495
|
.map((c) => {
|
|
398
|
-
const { payload, encryption_key, ...rest } = c;
|
|
496
|
+
const { payload, encryption_key, encryption_key_ref, ...rest } = c;
|
|
399
497
|
return rest;
|
|
400
498
|
});
|
|
401
499
|
}
|
|
@@ -446,7 +544,7 @@ export function listPins(db, { limit = 50, sortBy = "created_at" } = {}) {
|
|
|
446
544
|
.sort(sorter)
|
|
447
545
|
.slice(0, limit)
|
|
448
546
|
.map((c) => {
|
|
449
|
-
const { payload, encryption_key, ...rest } = c;
|
|
547
|
+
const { payload, encryption_key, encryption_key_ref, ...rest } = c;
|
|
450
548
|
return rest;
|
|
451
549
|
});
|
|
452
550
|
}
|
|
@@ -501,8 +599,12 @@ export function garbageCollect(db) {
|
|
|
501
599
|
}
|
|
502
600
|
}
|
|
503
601
|
for (const cid of toRemove) {
|
|
602
|
+
const entry = _content.get(cid);
|
|
504
603
|
_content.delete(cid);
|
|
505
604
|
db.prepare("DELETE FROM ipfs_content WHERE cid = ?").run(cid);
|
|
605
|
+
if (entry?.encryption_key_ref) {
|
|
606
|
+
getIpfsSecretStore().delete(entry.encryption_key_ref);
|
|
607
|
+
}
|
|
506
608
|
}
|
|
507
609
|
// Clean up knowledge links pointing to removed CIDs
|
|
508
610
|
for (const [kid, set] of _knowledgeLinks) {
|
|
@@ -555,7 +657,7 @@ export function getKnowledgeAttachments(db, knowledgeId) {
|
|
|
555
657
|
.map((cid) => _content.get(cid))
|
|
556
658
|
.filter(Boolean)
|
|
557
659
|
.map((c) => {
|
|
558
|
-
const { payload, encryption_key, ...rest } = c;
|
|
660
|
+
const { payload, encryption_key, encryption_key_ref, ...rest } = c;
|
|
559
661
|
return rest;
|
|
560
662
|
});
|
|
561
663
|
}
|
|
@@ -104,3 +104,46 @@ export function applyConfigLlmDefaults(options = {}, cfgLlm = {}, opts = {}) {
|
|
|
104
104
|
backfillApiKey(options, cfgLlm);
|
|
105
105
|
return options;
|
|
106
106
|
}
|
|
107
|
+
|
|
108
|
+
function optionalModel(value) {
|
|
109
|
+
if (typeof value !== "string") return null;
|
|
110
|
+
const model = value.trim();
|
|
111
|
+
return model || null;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Resolve the model precedence used by `cc agent` without allowing a default
|
|
116
|
+
* from one source to silently outrank an explicit choice from another:
|
|
117
|
+
*
|
|
118
|
+
* CLI --model > ANTHROPIC_MODEL > settings.model > config/organization model
|
|
119
|
+
* > ANTHROPIC_DEFAULT_MODEL (new sessions only) > runtime provider default.
|
|
120
|
+
*
|
|
121
|
+
* Environment values are supplied by the caller from the process startup
|
|
122
|
+
* environment, before settings-file `env` entries are merged. That prevents a
|
|
123
|
+
* checked-in settings file from impersonating a launcher-level override.
|
|
124
|
+
*/
|
|
125
|
+
export function applyAgentModelDefaults(options = {}, cfgLlm = {}, opts = {}) {
|
|
126
|
+
const explicitModel = optionalModel(opts.explicitModel);
|
|
127
|
+
const environmentModel = optionalModel(opts.anthropicModel);
|
|
128
|
+
const settingsModel = optionalModel(opts.settingsModel);
|
|
129
|
+
const defaultModel = optionalModel(opts.anthropicDefaultModel);
|
|
130
|
+
|
|
131
|
+
if (!explicitModel) {
|
|
132
|
+
if (environmentModel) {
|
|
133
|
+
options.model = environmentModel;
|
|
134
|
+
} else if (settingsModel) {
|
|
135
|
+
options.model = settingsModel;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
applyConfigLlmDefaults(options, cfgLlm, {
|
|
140
|
+
// Reuse the existing config/provider wiring, but do not let its configured
|
|
141
|
+
// model overwrite one selected by a higher-priority source above.
|
|
142
|
+
explicitModel: explicitModel || environmentModel || settingsModel,
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
if (!options.model && opts.isNewSession !== false && defaultModel) {
|
|
146
|
+
options.model = defaultModel;
|
|
147
|
+
}
|
|
148
|
+
return options;
|
|
149
|
+
}
|