chainlesschain 0.162.174 → 0.162.176
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 +10 -10
- package/src/assets/web-panel/assets/{AIOps-Dcl-X1Hw.js → AIOps-BDLu5Elz.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-ClMh9HzT.js → ActionButton-DH5us-CK.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DPj0rSQ5.js → Analytics-BZ0u8IFG.js} +3 -3
- package/src/assets/web-panel/assets/AppLayout-Duu8xR14.js +9 -0
- package/src/assets/web-panel/assets/{Artifacts-L8781rE8.js → Artifacts-Br2YBbh_.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CffB6WIP.js → Audit-C3C6a482.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BkLhayyY.js → BackgroundAgents-CzHvebcj.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BQnwFI78.js → Backup-DZNHYDFd.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-xuUGHQch.js → BaseInput-VRiC4fIx.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-feQXwWrg.js → Chat-Cm08WWAD.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CGHYrugQ.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-DVaIiUGW.js → Checkbox-DtByk7d7.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-D2kEnzeU.js → Codegen-CphXXOfD.js} +1 -1
- package/src/assets/web-panel/assets/{Col-azDoyusS.js → Col-Hz86TnLR.js} +1 -1
- package/src/assets/web-panel/assets/{Community-OZdnPWM5.js → Community-HP03ltpD.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-VDMvBN-C.js → Compact-B_N1mqQz.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CPJ_zgQ1.js → Compliance-CVztRpi8.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-iRBwcsOA.js → Cowork-wUVOyZih.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-DrxrspUz.js → Cron-DW5TLJKw.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-D-rkAZXF.js → Crosschain-CrAFGhWH.js} +1 -1
- package/src/assets/web-panel/assets/{DID-5Pp1Xnmr.js → DID-pA-oD8ke.js} +2 -2
- package/src/assets/web-panel/assets/Dashboard-CXrd5gAw.js +3 -0
- package/src/assets/web-panel/assets/{Dropdown-BWj_E0Ie.js → Dropdown-EweJcsek.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BT-wgSEh.js → EmailListRenderer-C9xVLPG4.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-1PzH23pa.js → FamilyGuardDashboard-CDcEEqlu.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BxMIXGC6.js → Federation-DtZda9A_.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CyJobBln.js → FormItemContext-CiYdcVz3.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-YkjFuQTN.js → GenericCardRenderer-DA13uwA0.js} +1 -1
- package/src/assets/web-panel/assets/{Git-C2a98Wp_.js → Git-DzRhZD1O.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DKL3Fl84.js → Governance-D5RMgOSb.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BJ2cQC_3.js → Inference-BgrPfSNk.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DBAsOngt.js → KnowledgeGraph-DzjnD571.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-COt8g9LO.js → Logs-BhWzVDtN.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-3Lfht1Fd.js → MarkdownRenderer-BDape9cx.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-C9Zk9Pb2.js → Marketplace-DJtL5GV7.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DDWDFWPO.js → McpTools-CZcQygI7.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-BRmVye_o.js → Memory-DUWSDUUu.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CppBbWpD.js → MobileBridge-BTwq2WKY.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-NZvvfDME.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-CcWpeGa6.js → Mtc-BiGugEQm.js} +6 -6
- package/src/assets/web-panel/assets/{MtcAudit-BcllEq0K.js → MtcAudit-DY7a6gUe.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-BFD1CarL.js → Multisig-BQbDu_w7.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-QNXXYvjz.js → NLProgramming-CM2wXTLv.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-07YwgQVy.js → Notes-DI6gGs1v.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-bOccEInE.js → NotificationSettings-BsZOLWAB.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DlRi29WL.js → OrderTableRenderer-C48mu09U.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CBaezzEr.js → Organization-Cds0_tXr.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Bl5NohFO.js → Overflow-WunYMD87.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CLMal9Aw.js → P2P-Bo6j4DDv.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CGO0NITk.js → PdhVaultBrowser-Bh2XPD5f.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CPSw48E2.js → Permissions-EMvMMC8N.js} +3 -3
- package/src/assets/web-panel/assets/{PersonalDataHub-CDM5n134.js → PersonalDataHub-AX3ypUDV.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-BdsqG7WV.js → Pipeline-BOx8HOgL.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-B6L4E-M7.js → Privacy-tBeTVQVM.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DXPyZKRs.js → ProjectInit-CVYg1W4M.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BrCC3xYT.js → ProjectSettings-Dvt5I7y1.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BYmuHC2q.js → Projects-Cc7FC9-e.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CbCe2eUl.js → Providers-Ct8xqY-E.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DkukgCrR.js → QrScannerModal-Cni8Ooja.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-D-htOrV8.js → QuickAsk-BJVLKdxr.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Bm7SIfzu.js → Recommend-DPG8Rbbm.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-C9rP-iMc.js → RemoteSession-DsdR7dCt.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-kGlUgbsl.js → Reputation-Csg1YM-b.js} +1 -1
- package/src/assets/web-panel/assets/{Row-PBupbbUA.js → Row-D9DoFoEf.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-njlwKUGK.js → RssFeed-BsvKrXMS.js} +2 -2
- package/src/assets/web-panel/assets/{Search-DLdEmgBw.js → Search-DFUStfgQ.js} +1 -1
- package/src/assets/web-panel/assets/{Security-SXGPSHdu.js → Security-ILg1zxdK.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CuFGnNsb.js → Services-Dd41PCaY.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CtUC0mDa.js → Skeleton-Bzo1cN80.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-P1qgOVFn.js → Skills-BDHh17P0.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CsppE8YV.js → Sla-jl7UTiRY.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-Cq1oG56m.js → SpeechSettings-BePa-RF6.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DdKW6V-C.js → SyncSettings-DiqqDKGZ.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BCc9san5.js → Tasks-DYQ_6lxj.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CcHC1dMA.js → Templates-JiDeI06L.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CA4PqU22.js → Tenant-hhgI6zwS.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-CjTZPa37.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-DHWTSvOy.js → TimelineRenderer-B8uB5Llk.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Ddz-P_yh.js → Tokens-C3b_6r2z.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-ePmrmLZ1.js → Trigger-tIP7HKVe.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DmuK1CCE.js → Trust-vjoc11vJ.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CqqBuRrT.js → UkeySign-DUPBnGuH.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BGlR3uWM.js → VideoEditing-CBvhUY5T.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Ba_Qx6Ga.js → Wallet-DUaQ0uA5.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-29neXKt2.js → WebAuthn-DllSivjE.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-lD0lR0UQ.js → WorkflowEditor-xc8D3uO6.js} +1 -1
- package/src/assets/web-panel/assets/{chat-B3stH01u.js → chat-BVicU7oA.js} +1 -1
- package/src/assets/web-panel/assets/{colors-Czly56MN.js → colors-DJzLmhLm.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-C0TkbkAJ.js → compact-item-BvYRfThE.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BJmpSlf1.js → createContext-DGXxCBKR.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BT46Y_QI.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-D1q-zw7u.js → hasIn-SBDJB1y4.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV-twjNO.js → index-1SdDS6lR.js} +1 -1
- package/src/assets/web-panel/assets/{index-B-kTvMq7.js → index-9gdI7uUW.js} +1 -1
- package/src/assets/web-panel/assets/index-B7nuIywP.js +1 -0
- package/src/assets/web-panel/assets/{index-Bm_-RKal.js → index-BJZf9DhV.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQftlZn-.js → index-BO1itZaY.js} +3 -3
- package/src/assets/web-panel/assets/{index-Dw3L_smW.js → index-BTrBGBJs.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7sFKQ53.js → index-BYqz4Wrr.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlvsSuBC.js → index-Bf-ctERC.js} +1 -1
- package/src/assets/web-panel/assets/{index-ChESIe5r.js → index-CKyEivf8.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaqEHaCg.js → index-CdGY9P8a.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZeoKL6t.js → index-Cf-O_g_8.js} +1 -1
- package/src/assets/web-panel/assets/{index-XWV8JWMc.js → index-CloCgBUR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpMIdPJ0.js → index-CoJAO1Lm.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgS8XUBU.js → index-Crk5NTb0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmUta2lw.js → index-Cs2rmLFt.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dpz_7sf-.js → index-CtwqO5qo.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRcQsPez.js → index-D7HimK0M.js} +1 -1
- package/src/assets/web-panel/assets/{index-BEt2-3x5.js → index-DCdRAgjy.js} +1 -1
- package/src/assets/web-panel/assets/{index-CHvPlzWJ.js → index-DCqRS6da.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDHXx65P.js → index-DHVLJ8q0.js} +1 -1
- package/src/assets/web-panel/assets/{index-K4YaPDOn.js → index-DKrvvWm4.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1pOqU7D.js → index-DMarmfrv.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAhrn9EJ.js → index-DRfiXB_p.js} +1 -1
- package/src/assets/web-panel/assets/{index-cPjWjvmW.js → index-Dm_77jgR.js} +1 -1
- package/src/assets/web-panel/assets/{index-C27TnOoT.js → index-DnjPdvR6.js} +1 -1
- package/src/assets/web-panel/assets/{index-upY9rkGZ.js → index-DonCnfMr.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbvNJUwu.js → index-DvUTDYXX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVwJ3jht.js → index-FxZzRyE1.js} +1 -1
- package/src/assets/web-panel/assets/{index-DIF6XHIi.js → index-MjC4G09d.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8KqsomG.js → index-VMfwIH5G.js} +1 -1
- package/src/assets/web-panel/assets/{index-8GKykbS4.js → index-YJkzy8ZF.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpGs96FC.js → index-d5BVd-cL.js} +1 -1
- package/src/assets/web-panel/assets/{index-DO8xOwxi.js → index-e4fXH_WO.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cu_4HaUS.js → index-hxTODbM1.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cf7Gr3NG.js → index-lpaGoTH3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBqAm8es.js → index-wcCL-miV.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZDUhX41Z.js → index-xfluRkCT.js} +1 -1
- package/src/assets/web-panel/assets/index-ycwAfC-i.js +1 -0
- package/src/assets/web-panel/assets/{index-z8ATo2aQ.js → index-z1ZylsLq.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-QWEXi6-t.js → initDefaultProps-C1zO1KnY.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BfrQwvV1.js → motion-CWLtEGmC.js} +1 -1
- package/src/assets/web-panel/assets/{move-Dn7x0H9t.js → move-DzD_C3Vm.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-F61D_TgE.js → mtc-parser-D880PYJl.js} +1 -1
- package/src/assets/web-panel/assets/{omit-4SQZ39PF.js → omit-CFR_z2ov.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-C7DTe126.js → pickAttrs-srIhgrSC.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-40NeyzDK.js → placementArrow-C1rXpibP.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BiUJ6qWs.js → responsiveObserve-C30gRcSS.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CacJTM3f.js → slide-CvtKiMfV.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-K812HB-k.js → statusUtils-DNHO7ITG.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CKeHA2eM.js → styleChecker-Dt_Sl-g4.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-CKl4FqXF.js → useFlexGapSupport-Cjev42Gh.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DPoiJjSZ.js → useFs-Baxglj2V.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-aHwBspmt.js → usePersonalDataHub-B4NkcLaP.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DrA-GuCT.js → vnode-mIRkdT7o.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-G3LMswgy.js → zoom-HzI5DlH_.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/auth/npm-auth.js +30 -5
- package/src/commands/agenda.js +64 -2
- package/src/commands/agent.js +45 -3
- package/src/commands/background-session.js +103 -0
- package/src/commands/config.js +70 -5
- package/src/commands/context.js +36 -2
- package/src/commands/hub.js +19 -1
- package/src/commands/memory.js +21 -6
- package/src/commands/permissions.js +57 -1
- package/src/commands/plugin.js +2 -0
- package/src/commands/review.js +23 -11
- package/src/commands/routine.js +31 -8
- package/src/commands/session.js +11 -3
- package/src/commands/team.js +20 -7
- package/src/commands/update.js +65 -10
- package/src/esm-bridge.js +3 -0
- package/src/gateways/terminal/PtyManager.js +8 -1
- package/src/gateways/ws/message-dispatcher.js +3 -0
- package/src/gateways/ws/session-protocol.js +26 -0
- package/src/gateways/ws/ws-agent-handler.js +107 -69
- package/src/gateways/ws/ws-server.js +92 -4
- package/src/harness/jsonl-session-store.js +13 -6
- package/src/harness/mcp-client.js +200 -1
- package/src/index.js +123 -55
- package/src/lazy-dispatch.js +86 -85
- package/src/lib/__tests__/personal-data-hub-aichat-wizard.test.js +15 -0
- package/src/lib/agent-coordinator.js +4 -0
- package/src/lib/agent-ipc-bus.js +32 -2
- package/src/lib/agent-sandbox.js +16 -2
- package/src/lib/agent-schedule-store.js +55 -0
- package/src/lib/agent-tool-admission.js +104 -0
- package/src/lib/api-key-helper.js +10 -2
- package/src/lib/async-hook-supervisor.cjs +26 -4
- package/src/lib/background-interaction-resolver.js +71 -0
- package/src/lib/background-session-transport.js +59 -1
- package/src/lib/changelog.js +19 -11
- package/src/lib/channels/channel-manager.js +6 -0
- package/src/lib/channels/telegram-channel.js +11 -1
- package/src/lib/channels/webhook-channel.js +15 -3
- package/src/lib/checkpoint-store.js +10 -2
- package/src/lib/cloud/bundle.js +12 -2
- package/src/lib/code-review.js +32 -8
- package/src/lib/computer-use/control-backend.js +18 -3
- package/src/lib/context-breakdown.js +46 -0
- package/src/lib/context-source-ledger.js +43 -0
- package/src/lib/crash-reporter.js +6 -0
- package/src/lib/diff-review-follow-up.js +154 -0
- package/src/lib/downloader.js +17 -3
- package/src/lib/ensure-utf8.js +11 -3
- package/src/lib/event-runtime-producer.js +58 -0
- package/src/lib/event-runtime-store.js +354 -0
- package/src/lib/event-runtime-worker.js +109 -0
- package/src/lib/execution-backend.js +72 -21
- package/src/lib/git-integration.js +19 -4
- package/src/lib/hook-manager.js +34 -15
- package/src/lib/hook-runner.cjs +48 -3
- package/src/lib/hooks-v2-producers.js +15 -0
- package/src/lib/hooks-v2-runtime.js +70 -21
- package/src/lib/host-adb-bridge.js +111 -21
- package/src/lib/ide-context.js +128 -1
- package/src/lib/interaction-adapter.js +39 -0
- package/src/lib/ipc-attach-protocol.js +98 -0
- package/src/lib/json-schema-validate.js +190 -36
- package/src/lib/lan-pairing-preflight.js +13 -2
- package/src/lib/lsp/__tests__/lsp-server-registry.test.js +18 -0
- package/src/lib/lsp/lsp-client.js +18 -1
- package/src/lib/lsp/lsp-manager.js +4 -0
- package/src/lib/lsp/lsp-server-registry.js +11 -0
- package/src/lib/mcp-oauth.js +8 -2
- package/src/lib/npm-invocation.js +29 -0
- package/src/lib/packer/pkg-runner.js +13 -2
- package/src/lib/packer/precheck.js +33 -16
- package/src/lib/packer/web-panel-builder.js +16 -2
- package/src/lib/permission-rules.cjs +5 -1
- package/src/lib/personal-data-hub-aichat-wizard.js +22 -6
- package/src/lib/personal-data-hub-wiring.js +27 -3
- package/src/lib/plan-mode.js +204 -11
- package/src/lib/plugin-monitor-supervisor.js +39 -4
- package/src/lib/plugin-runtime/bin.js +45 -0
- package/src/lib/plugin-runtime/hooks.js +14 -1
- package/src/lib/plugin-runtime/install.js +2 -1
- package/src/lib/plugin-runtime/lsp.js +3 -0
- package/src/lib/plugin-runtime/mcp.js +8 -1
- package/src/lib/plugin-runtime/monitors.js +4 -0
- package/src/lib/plugin-runtime/plugin-options.js +74 -7
- package/src/lib/plugin-runtime/signature.js +45 -0
- package/src/lib/pr-create.js +21 -8
- package/src/lib/pr-link-ledger.js +15 -3
- package/src/lib/process-execution-broker/credential-agent.js +295 -0
- package/src/lib/process-execution-broker/index.js +440 -14
- package/src/lib/process-execution-broker/patch-child-process.js +2 -3
- package/src/lib/process-execution-broker/platform-sandbox.js +351 -0
- package/src/lib/process-manager.js +18 -3
- package/src/lib/provenance-api.js +6 -0
- package/src/lib/proxy-bootstrap.js +19 -0
- package/src/lib/publish-workspace.js +14 -6
- package/src/lib/repl-rewind.js +9 -4
- package/src/lib/secret-store.js +159 -0
- package/src/lib/service-manager.js +64 -29
- package/src/lib/session-hooks.js +328 -473
- package/src/lib/session-telemetry-middleware.js +6 -0
- package/src/lib/settings-hook-events.cjs +61 -1
- package/src/lib/settings-hooks.cjs +4 -0
- package/src/lib/side-effect-ledger.js +22 -0
- package/src/lib/sub-agent-context.js +5 -0
- package/src/lib/sub-agent-profiles.js +4 -0
- package/src/lib/trace-api.js +6 -0
- package/src/lib/turn-context.js +14 -8
- package/src/lib/unattended-action-policy.js +83 -0
- package/src/lib/update-notice.js +9 -45
- package/src/lib/with-file-lock.js +7 -0
- package/src/lib/ws-server.js +1 -0
- package/src/repl/agent-repl.js +71 -13
- package/src/repl/clipboard-copy.js +8 -2
- package/src/repl/pr-comments.js +30 -7
- package/src/runtime/agent-core.js +439 -87
- package/src/runtime/agent-runtime.js +1 -0
- package/src/runtime/coding-agent-contract-shared.cjs +52 -0
- package/src/runtime/coding-agent-policy.cjs +20 -0
- package/src/runtime/diagnostics.js +73 -8
- package/src/runtime/headless-runner.js +63 -0
- package/src/runtime/headless-stream.js +269 -17
- package/src/runtime/mcp-config.js +16 -1
- package/src/workers/background-agent-worker.js +80 -1
- package/src/assets/web-panel/assets/AppLayout-7iSKDmlI.js +0 -9
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DcbUHeGW.js +0 -1
- package/src/assets/web-panel/assets/Dashboard-BAKYNavw.js +0 -3
- package/src/assets/web-panel/assets/MobileProjects-C4GKn1dH.js +0 -1
- package/src/assets/web-panel/assets/Terminal-Fj7ea0In.js +0 -3
- package/src/assets/web-panel/assets/devWarning-CDI8Sbaj.js +0 -1
- package/src/assets/web-panel/assets/index-96LBR96V.js +0 -1
- package/src/assets/web-panel/assets/index-DyQkiW24.js +0 -1
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential Agent — P0-1 requirement
|
|
3
|
+
*
|
|
4
|
+
* Secrets are never passed raw to child processes. Instead:
|
|
5
|
+
* - Environment variables are filtered (API keys, tokens stripped)
|
|
6
|
+
* - Credentials are injected via a proxy/agent at runtime
|
|
7
|
+
* - Audit log records credential usage without revealing values
|
|
8
|
+
* - Child processes request credentials through IPC channel
|
|
9
|
+
*
|
|
10
|
+
* References: Claude Code CredentialAgent pattern
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import os from "node:os";
|
|
14
|
+
import path from "node:path";
|
|
15
|
+
import fs from "node:fs";
|
|
16
|
+
import crypto from "node:crypto";
|
|
17
|
+
|
|
18
|
+
// Patterns for environment variables that contain secrets
|
|
19
|
+
const SENSITIVE_ENV_PATTERNS = [
|
|
20
|
+
/API[_-]?KEY/i,
|
|
21
|
+
/SECRET/i,
|
|
22
|
+
/TOKEN/i,
|
|
23
|
+
/PASSWORD/i,
|
|
24
|
+
/PASSWD/i,
|
|
25
|
+
/CREDENTIAL/i,
|
|
26
|
+
/PRIVATE[_-]?KEY/i,
|
|
27
|
+
/ACCESS[_-]?KEY/i,
|
|
28
|
+
/AUTH/i,
|
|
29
|
+
/COOKIE/i,
|
|
30
|
+
/SESSION/i,
|
|
31
|
+
/BEARER/i,
|
|
32
|
+
/WEBHOOK.*URL/i,
|
|
33
|
+
/DATABASE.*URL/i,
|
|
34
|
+
/DATABASE.*PASSWORD/i,
|
|
35
|
+
/REDIS.*PASSWORD/i,
|
|
36
|
+
/OPENAI/i,
|
|
37
|
+
/ANTHROPIC/i,
|
|
38
|
+
/VOLC/i,
|
|
39
|
+
/ZHIPU/i,
|
|
40
|
+
/GOOGLE.*API/i,
|
|
41
|
+
/AZURE.*KEY/i,
|
|
42
|
+
/AWS.*SECRET/i,
|
|
43
|
+
/GIT.*TOKEN/i,
|
|
44
|
+
/NPM.*TOKEN/i,
|
|
45
|
+
/GH_TOKEN/i,
|
|
46
|
+
/GITHUB_TOKEN/i,
|
|
47
|
+
/GITLAB_TOKEN/i,
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
// Keys that are always safe to pass through (non-sensitive)
|
|
51
|
+
const ENV_ALLOWLIST = new Set([
|
|
52
|
+
"PATH",
|
|
53
|
+
"HOME",
|
|
54
|
+
"USER",
|
|
55
|
+
"USERNAME",
|
|
56
|
+
"SHELL",
|
|
57
|
+
"LANG",
|
|
58
|
+
"LC_ALL",
|
|
59
|
+
"TERM",
|
|
60
|
+
"TMPDIR",
|
|
61
|
+
"TMP",
|
|
62
|
+
"TEMP",
|
|
63
|
+
"PWD",
|
|
64
|
+
"EDITOR",
|
|
65
|
+
"VISUAL",
|
|
66
|
+
"NODE_ENV",
|
|
67
|
+
"NODE_OPTIONS",
|
|
68
|
+
// Correlation identifiers required by ChainlessChain/Claude-compatible
|
|
69
|
+
// child processes. These identify a run; they are not authentication
|
|
70
|
+
// credentials. Other SESSION-named variables remain filtered.
|
|
71
|
+
"CC_SESSION_ID",
|
|
72
|
+
"CLAUDE_CODE_SESSION_ID",
|
|
73
|
+
"npm_config_registry",
|
|
74
|
+
"npm_config_cache",
|
|
75
|
+
"NPM_CONFIG_REGISTRY",
|
|
76
|
+
"NPM_CONFIG_CACHE",
|
|
77
|
+
"DISPLAY",
|
|
78
|
+
"XDG_CONFIG_HOME",
|
|
79
|
+
"XDG_CACHE_HOME",
|
|
80
|
+
"XDG_DATA_HOME",
|
|
81
|
+
"APPDATA",
|
|
82
|
+
"LOCALAPPDATA",
|
|
83
|
+
"PROGRAMDATA",
|
|
84
|
+
"PROGRAMFILES",
|
|
85
|
+
"PROGRAMFILES(X86)",
|
|
86
|
+
"WINDIR",
|
|
87
|
+
"SYSTEMROOT",
|
|
88
|
+
"SYSTEMDRIVE",
|
|
89
|
+
"PROCESSOR_ARCHITECTURE",
|
|
90
|
+
"NUMBER_OF_PROCESSORS",
|
|
91
|
+
"COMPUTERNAME",
|
|
92
|
+
"LOGONSERVER",
|
|
93
|
+
"USERDOMAIN",
|
|
94
|
+
"USERPROFILE",
|
|
95
|
+
"HOMEDRIVE",
|
|
96
|
+
"HOMEPATH",
|
|
97
|
+
"PUBLIC",
|
|
98
|
+
"COMMONPROGRAMFILES",
|
|
99
|
+
"COMMONPROGRAMFILES(X86)",
|
|
100
|
+
"COMSPEC",
|
|
101
|
+
"PATHEXT",
|
|
102
|
+
"PSMODULEPATH",
|
|
103
|
+
"CHAINLESSCHAIN_HOME",
|
|
104
|
+
"CHAINLESSCHAIN_CONFIG_DIR",
|
|
105
|
+
]);
|
|
106
|
+
|
|
107
|
+
class CredentialAgent {
|
|
108
|
+
constructor() {
|
|
109
|
+
this._credentialStore = new Map();
|
|
110
|
+
this._accessLog = [];
|
|
111
|
+
this._agentId = crypto.randomUUID();
|
|
112
|
+
this._credentialProxyPath = null;
|
|
113
|
+
this._setupProxy();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
_setupProxy() {
|
|
117
|
+
// In a full implementation, we'd set up an IPC/UDS proxy
|
|
118
|
+
// For now, we track and filter
|
|
119
|
+
this._proxyReady = true;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Check if an env var key looks sensitive
|
|
124
|
+
*/
|
|
125
|
+
isSensitiveKey(key) {
|
|
126
|
+
if (ENV_ALLOWLIST.has(key)) return false;
|
|
127
|
+
return SENSITIVE_ENV_PATTERNS.some((pattern) => pattern.test(key));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Strip sensitive environment variables from spawn options
|
|
132
|
+
* Returns filtered env and a list of redacted keys
|
|
133
|
+
*/
|
|
134
|
+
filterEnvironment(env = process.env) {
|
|
135
|
+
const safe = {};
|
|
136
|
+
const redacted = [];
|
|
137
|
+
|
|
138
|
+
for (const [key, value] of Object.entries(env)) {
|
|
139
|
+
if (this.isSensitiveKey(key)) {
|
|
140
|
+
// Store a masked reference instead of passing through
|
|
141
|
+
const refId = `cc-cred-${crypto.randomBytes(8).toString("hex")}`;
|
|
142
|
+
this._credentialStore.set(refId, { key, value, createdAt: Date.now() });
|
|
143
|
+
redacted.push({ key, refId });
|
|
144
|
+
// Pass the reference ID, child can request via proxy
|
|
145
|
+
safe[`CC_CRED_REF_${key}`] = refId;
|
|
146
|
+
} else {
|
|
147
|
+
safe[key] = value;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Set credential proxy endpoint for the child process
|
|
152
|
+
safe.CC_CREDENTIAL_AGENT_ID = this._agentId;
|
|
153
|
+
safe.CC_CREDENTIAL_PROXY = "builtin";
|
|
154
|
+
|
|
155
|
+
return { safeEnv: safe, redacted };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Sanitize command line arguments that might contain secrets
|
|
160
|
+
* (e.g., curl -H "Authorization: Bearer sk-xxx")
|
|
161
|
+
*/
|
|
162
|
+
sanitizeArgs(args = []) {
|
|
163
|
+
const sanitized = [];
|
|
164
|
+
const redacted = [];
|
|
165
|
+
|
|
166
|
+
for (let i = 0; i < args.length; i++) {
|
|
167
|
+
const arg = String(args[i]);
|
|
168
|
+
|
|
169
|
+
// Check for --token=xxx or --api-key xxx patterns
|
|
170
|
+
if (/^--[a-z-]*([Tt]oken|[Kk]ey|[Ss]ecret|[Pp]assword)=/i.test(arg)) {
|
|
171
|
+
sanitized.push(arg.replace(/=.*/, "=***REDACTED***"));
|
|
172
|
+
redacted.push({ index: i, pattern: "arg-with-secret" });
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Check for -H "Authorization: Bearer xxx"
|
|
177
|
+
if (arg === "-H" || /^--header$/i.test(arg)) {
|
|
178
|
+
sanitized.push(arg);
|
|
179
|
+
if (i + 1 < args.length) {
|
|
180
|
+
const nextArg = String(args[i + 1]);
|
|
181
|
+
if (/^(Authorization|X-API-Key|Cookie|Set-Cookie):/i.test(nextArg)) {
|
|
182
|
+
sanitized.push(`${nextArg.split(":")[0]}: ***REDACTED***`);
|
|
183
|
+
redacted.push({ index: i + 1, pattern: "header-with-secret" });
|
|
184
|
+
i++; // skip next
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Check for inline Bearer tokens
|
|
192
|
+
if (/Bearer\s+[A-Za-z0-9._-]{20,}/.test(arg)) {
|
|
193
|
+
sanitized.push(
|
|
194
|
+
arg.replace(/Bearer\s+[A-Za-z0-9._-]+/g, "Bearer ***REDACTED***"),
|
|
195
|
+
);
|
|
196
|
+
redacted.push({ index: i, pattern: "bearer-token-inline" });
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Check for sk- prefixed keys (OpenAI style)
|
|
201
|
+
if (/\bsk-[A-Za-z0-9]{20,}\b/.test(arg)) {
|
|
202
|
+
sanitized.push(
|
|
203
|
+
arg.replace(/\bsk-[A-Za-z0-9]{20,}\b/g, "sk-***REDACTED***"),
|
|
204
|
+
);
|
|
205
|
+
redacted.push({ index: i, pattern: "sk-key-inline" });
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
sanitized.push(arg);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return { sanitizedArgs: sanitized, redacted };
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Apply credential filtering and return explicit audit metadata. Credential
|
|
217
|
+
* values and proxy reference ids are intentionally kept out of the report.
|
|
218
|
+
*/
|
|
219
|
+
applyWithReport(spawnOptions) {
|
|
220
|
+
const env = spawnOptions.env || process.env;
|
|
221
|
+
const { safeEnv, redacted: envRedacted } = this.filterEnvironment(env);
|
|
222
|
+
spawnOptions.env = safeEnv;
|
|
223
|
+
|
|
224
|
+
const args = spawnOptions.args || [];
|
|
225
|
+
const { sanitizedArgs, redacted: argRedacted } = this.sanitizeArgs(args);
|
|
226
|
+
spawnOptions.args = sanitizedArgs;
|
|
227
|
+
|
|
228
|
+
// Record credential access audit
|
|
229
|
+
if (envRedacted.length > 0 || argRedacted.length > 0) {
|
|
230
|
+
this._accessLog.push({
|
|
231
|
+
timestamp: Date.now(),
|
|
232
|
+
origin: spawnOptions.origin || "unknown",
|
|
233
|
+
envRedacted: envRedacted.map((r) => r.key),
|
|
234
|
+
argRedacted: argRedacted.length,
|
|
235
|
+
command: spawnOptions.file || spawnOptions.command,
|
|
236
|
+
});
|
|
237
|
+
if (this._accessLog.length > 10000) this._accessLog.shift();
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return {
|
|
241
|
+
spawnOptions,
|
|
242
|
+
report: {
|
|
243
|
+
envKeys: envRedacted.map((entry) => entry.key),
|
|
244
|
+
argIndexes: argRedacted.map((entry) => entry.index),
|
|
245
|
+
envCount: envRedacted.length,
|
|
246
|
+
argCount: argRedacted.length,
|
|
247
|
+
filtered: envRedacted.length > 0 || argRedacted.length > 0,
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/** Backward-compatible mutation API for existing integrations. */
|
|
253
|
+
apply(spawnOptions) {
|
|
254
|
+
return this.applyWithReport(spawnOptions).spawnOptions;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Resolve a credential reference (called via IPC from child processes)
|
|
259
|
+
*/
|
|
260
|
+
resolveCredential(refId) {
|
|
261
|
+
const cred = this._credentialStore.get(refId);
|
|
262
|
+
if (!cred) return null;
|
|
263
|
+
// Log access
|
|
264
|
+
this._accessLog.push({
|
|
265
|
+
timestamp: Date.now(),
|
|
266
|
+
type: "resolve",
|
|
267
|
+
refId,
|
|
268
|
+
key: cred.key,
|
|
269
|
+
});
|
|
270
|
+
return cred.value;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Get credential agent info for status reporting
|
|
275
|
+
*/
|
|
276
|
+
getInfo() {
|
|
277
|
+
return {
|
|
278
|
+
agentId: this._agentId,
|
|
279
|
+
credentialsTracked: this._credentialStore.size,
|
|
280
|
+
accessCount: this._accessLog.length,
|
|
281
|
+
sensitivePatterns: SENSITIVE_ENV_PATTERNS.length,
|
|
282
|
+
allowlistSize: ENV_ALLOWLIST.size,
|
|
283
|
+
defaultOn: true,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const credentialAgent = new CredentialAgent();
|
|
289
|
+
export {
|
|
290
|
+
credentialAgent,
|
|
291
|
+
CredentialAgent,
|
|
292
|
+
SENSITIVE_ENV_PATTERNS,
|
|
293
|
+
ENV_ALLOWLIST,
|
|
294
|
+
};
|
|
295
|
+
export default credentialAgent;
|