chainlesschain 0.162.180 → 0.162.182
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 +7 -3
- package/scripts/build-windows-sandbox-helper.ps1 +163 -0
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-D_TIL54O.js → AIOps-DzZ5_xoj.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-eQwy9r-f.js → ActionButton-DeLXddIg.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-D2eNuDgT.js → Analytics-rvDCmet1.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CFhwOFsf.js → AppLayout-Yt6QVDnp.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-CJUMw6PB.js → Artifacts-BS112K5L.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CDB9V58o.js → Audit-0wJuQrNu.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-TBppYFjN.js → BackgroundAgents-B90PMgbn.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CYEOUpzJ.js → Backup-TkgMglQQ.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-C88fFT2u.js → BaseInput-CQVS9p1l.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-mkr1vC3N.js → Chat-YTjQHoC7.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-PR074hUN.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-CVU4xqti.js → Checkbox-5bwaOabq.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-rrNcByz3.js → Codegen-BFmNQ_Xe.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Cqu-zCvh.js → Col-BT_u4Dzp.js} +1 -1
- package/src/assets/web-panel/assets/{Community-RGRlSgXV.js → Community-CJP52u5b.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DBm6epOK.js → Compact-BpzhJE9i.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BgKw5iaW.js → Compliance-Cg7rfslp.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BqQcNO3Z.js → Cowork-JisxL6Yy.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DO5gTFNb.js → Cron-Bu7Ug_MC.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-B8hbJNuN.js → Crosschain-CvuqoLdj.js} +1 -1
- package/src/assets/web-panel/assets/{DID-B08bFJ2C.js → DID-C2u9G8Pu.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-xNdy_ifo.js → Dashboard-BFt5Yv3d.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-D-KIZgWL.js → Dropdown-DIaT9Wxq.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DKCvsaGo.js → EmailListRenderer-D_A601Y4.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-D_cfqama.js → FamilyGuardDashboard--IyQ8I8w.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-B-UqQD68.js → Federation-BihWHxuY.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BWWvWuJW.js → FormItemContext-BB8dOXc_.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CPchx6N7.js → GenericCardRenderer-DQYhj1HH.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Vx4co9Ff.js → Git-B-2QZxGf.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-D4x0pp_m.js → Governance-CusSb-nG.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-T3KvwPYR.js → Inference-BAjmvPPL.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Ddv3KUv3.js → KnowledgeGraph-DoNYWKYq.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DfH-Dkae.js → Logs-B8fKWD-n.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-DHW3PbCq.js → MarkdownRenderer-BlJm1J7E.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-tjgb0R3D.js → Marketplace-CyOscbSL.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DHAk5nYX.js → McpTools-Ex6Om5da.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-A2Yx7thM.js → Memory-CDcD8l8r.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BEmTVfN5.js → MobileBridge-xfBqoFDg.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DuFHUgE4.js → MobileProjects-BwObMMA2.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BDSll0OZ.js → Mtc-CIWd36OV.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-CuBvluaS.js → MtcAudit-CPX0ouuA.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-BmXAA-Sb.js → Multisig-BDJsIUuW.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-ci2stZAe.js → NLProgramming-DEkbuD3N.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-D-1RpqnS.js → Notes-DJpHRhH1.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-C0GyitIT.js → NotificationSettings-C1UZ-Qd5.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-U2bN-hj5.js → OrderTableRenderer-GlJtqLjT.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BNZgpPci.js → Organization-Bbhj0fac.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CDidKmUN.js → Overflow-1H04x3kx.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BnreBaXq.js → P2P-CDpPe3et.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-DwJUxO9j.js → PdhVaultBrowser-MUX0Bpvw.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-BQGgJPH0.js → Permissions-A07-0Ci1.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-k_fSkCwL.js → PersonalDataHub-DhhDWxAZ.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-WGqKMqau.js → Pipeline-CyfbJfe-.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DtHj9Ymq.js → Privacy-CNFps3ED.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-B3wH2SFC.js → ProjectInit--T-u3Dr5.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Cd0cgcA1.js → ProjectSettings-DJmrK2fC.js} +2 -2
- package/src/assets/web-panel/assets/Projects-Qx_MdX9k.js +1 -0
- package/src/assets/web-panel/assets/{Providers-DTpxEXur.js → Providers-DLzzbOZd.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-B2v6gR-C.js → QrScannerModal-CexOomKS.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-D3Nr9xXR.js → QuickAsk-QklGi19_.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-C9inoMky.js → Recommend-Bb9kwSw8.js} +1 -1
- package/src/assets/web-panel/assets/RemoteSession-DZuVNNN5.js +5 -0
- package/src/assets/web-panel/assets/{Reputation-41KFG646.js → Reputation-Dr5cLP0N.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DqAaqqCv.js → Row-oCQHYv5t.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CMDpCDKc.js → RssFeed-IFDEykIR.js} +3 -3
- package/src/assets/web-panel/assets/{Search-B6mtegNL.js → Search-CspVIxDc.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BaePFVZ8.js → Security-Bm66o_DH.js} +3 -3
- package/src/assets/web-panel/assets/{Services-DeG3Qscl.js → Services-DvanNqXl.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-D_QP7F90.js → Skeleton-CHjEe9_O.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DLGyUgIA.js → Skills-Cb8jWjMX.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BN2pxW1Q.js → Sla-DxZm1491.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BWsZPd8B.js → SpeechSettings-DWxEEclC.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-VOZRPODW.js → SyncSettings-FIvOFw5p.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-CyuLnDFR.js +1 -0
- package/src/assets/web-panel/assets/{Templates-eJSob-q0.js → Templates-CaNjzV_t.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-Bdwk8Rwy.js → Tenant-DjlP6TmH.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-DwzGMniO.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-D5qkbPKT.js → TimelineRenderer-DoZ8y7y8.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DKgwn8hI.js → Tokens-390cg2TC.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-HlEHniGM.js → Trigger-CLrtCj5_.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CdPcsBpN.js → Trust-DpESfSPn.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-vAdXd-vG.js → UkeySign-CN6279O0.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-9hHBYFnH.js → VideoEditing-DPtAUlSe.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Dxh5d1yR.js → Wallet-nKOMV_1n.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-BsFmLHkp.js → WebAuthn-HuXlSOc4.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-Cn0OIwLn.js → WorkflowEditor-CUfFjARi.js} +1 -1
- package/src/assets/web-panel/assets/chat-6Eq0PcZJ.js +1 -0
- package/src/assets/web-panel/assets/{colors-Du9jzLN0.js → colors-BP_Sf6Iy.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DhEscfzw.js → compact-item-BufMKIh5.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CwzEfF3i.js → createContext-BBMXxWSW.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DgVKduH2.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DT_GSE6J.js → hasIn-fUK_tRO2.js} +1 -1
- package/src/assets/web-panel/assets/{index-tND8-TDU.js → index-2A5ph8b2.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8s5FxJY.js → index-3FuwBewR.js} +1 -1
- package/src/assets/web-panel/assets/{index-53z1YUxX.js → index-6GmBa4Kg.js} +1 -1
- package/src/assets/web-panel/assets/{index-BFD0cEna.js → index-B2vS66eI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQWxDOvM.js → index-B7Etk0Te.js} +1 -1
- package/src/assets/web-panel/assets/{index-VeHs6qH0.js → index-B9WYSn4m.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGvgnfl9.js → index-BHy6yNiF.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3llLkYM.js → index-BMLHv389.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dny_ZnAO.js → index-BWKoBU8R.js} +1 -1
- package/src/assets/web-panel/assets/{index-DzjzrOli.js → index-Bkg4ZePE.js} +1 -1
- package/src/assets/web-panel/assets/{index-DN60VBn5.js → index-C44atv4k.js} +1 -1
- package/src/assets/web-panel/assets/{index-v5HLYCVa.js → index-CE2DdTP2.js} +1 -1
- package/src/assets/web-panel/assets/{index-BF-ZCVGE.js → index-CGjmILDm.js} +1 -1
- package/src/assets/web-panel/assets/{index-gFjYdstW.js → index-CW_G-MXw.js} +1 -1
- package/src/assets/web-panel/assets/{index-NA2oBLSB.js → index-CZ6Yt17L.js} +1 -1
- package/src/assets/web-panel/assets/{index-Mobw3PHs.js → index-CeASi4fr.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWL3SYN3.js → index-CgiECHu2.js} +1 -1
- package/src/assets/web-panel/assets/{index-1LoutPJd.js → index-Cp8vhyZy.js} +1 -1
- package/src/assets/web-panel/assets/{index-BnHhFnwt.js → index-CwSf5pnf.js} +1 -1
- package/src/assets/web-panel/assets/{index-B6QDWRLk.js → index-D4_MuGkd.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-QkW1fp.js → index-D9vU25ij.js} +1 -1
- package/src/assets/web-panel/assets/{index-C4SN3by5.js → index-DASluSqY.js} +1 -1
- package/src/assets/web-panel/assets/{index-CyEhUJcu.js → index-DLpIs_P_.js} +1 -1
- package/src/assets/web-panel/assets/index-DOZTSoS7.js +1 -0
- package/src/assets/web-panel/assets/{index-BrkJ7JPm.js → index-DPdUNk1i.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cnok8mhZ.js → index-DVsqvI4M.js} +1 -1
- package/src/assets/web-panel/assets/index-DhpvjpqI.js +1 -0
- package/src/assets/web-panel/assets/{index-CAVW0cWM.js → index-DmkMXwnR.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cc9aPkv-.js → index-DocdRcbd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnVVYKCE.js → index-Dyngbd29.js} +20 -20
- package/src/assets/web-panel/assets/{index-D8gt0j7r.js → index-GwdRUZ-x.js} +1 -1
- package/src/assets/web-panel/assets/{index-BIYTjbv_.js → index-LvCBfTLo.js} +1 -1
- package/src/assets/web-panel/assets/{index-DhXay17G.js → index-cpEli44X.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQWENaZf.js → index-fzaMtSJ8.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfRDyY1q.js → index-pum7HYBA.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgSR2WMG.js → index-t8N1tSeX.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5IytTND.js → index-uCbEN7cY.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtRwLhee.js → index-wKTLbKyc.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4kZoXNr.js → index-wV6iGdpY.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-Cvt59c10.js → initDefaultProps-V5Fo95FM.js} +1 -1
- package/src/assets/web-panel/assets/{motion-D15pPEzl.js → motion-BYWU0hUT.js} +1 -1
- package/src/assets/web-panel/assets/{move-N55KeXJ7.js → move-Cr1M-J2h.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CyFO1bYP.js → mtc-parser-BysQKi2N.js} +1 -1
- package/src/assets/web-panel/assets/{omit-B5IXfxU2.js → omit-D1zHU8GC.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CpVqsulV.js → pickAttrs-CUArxtfi.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-ME36sMF3.js → placementArrow-ChoYEys0.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BXAIR1r-.js → responsiveObserve-BQRs3Mo7.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BkOX3-Dp.js → slide-B8zbsCkg.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Cy4Aklpt.js → statusUtils-C2U8Gs6h.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-gUd2T206.js → styleChecker-Dd8MgL_V.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-CaVD4o99.js → useFlexGapSupport-hknqY5NH.js} +1 -1
- package/src/assets/web-panel/assets/{useFs--pFGl0KD.js → useFs-CLTAmcfw.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-D45iP86i.js → usePersonalDataHub-ByegHbiB.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BayoChH_.js → vnode-DqlAy5DP.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CpP38poi.js → zoom-DiXiztQn.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agenda.js +115 -3
- package/src/commands/agent.js +10 -1
- package/src/commands/background-session.js +2 -1
- package/src/commands/context.js +69 -2
- package/src/data/changelog.json +26 -0
- package/src/gateways/terminal/PtyManager.js +45 -4
- package/src/gateways/ws/background-agent-protocol.js +38 -0
- package/src/gateways/ws/message-dispatcher.js +1 -0
- package/src/gateways/ws/remote-session-protocol.js +65 -6
- package/src/gateways/ws/ws-server.js +18 -2
- package/src/harness/background-task-manager.js +70 -2
- package/src/harness/feature-flags.js +15 -8
- package/src/harness/mcp-client.js +618 -43
- package/src/harness/worktree-isolator.js +14 -3
- package/src/lazy-dispatch.js +30 -1
- package/src/lib/agent-authority.js +22 -0
- package/src/lib/agent-core.js +3 -0
- package/src/lib/agent-sandbox.js +161 -0
- package/src/lib/agent-schedule-store.js +45 -22
- package/src/lib/agent-team/team-runner.js +22 -0
- package/src/lib/artifact-store.js +35 -0
- package/src/lib/async-hook-supervisor.cjs +13 -2
- package/src/lib/audit-mtc.js +3 -2
- package/src/lib/background-agent-supervisor.js +104 -3
- package/src/lib/background-interaction-journal.js +407 -0
- package/src/lib/background-interaction-resolver.js +23 -34
- package/src/lib/background-session-transport.js +12 -2
- package/src/lib/capability-manifest.js +41 -3
- package/src/lib/capability-negotiation.js +1 -1
- package/src/lib/channels/channel-manager.js +33 -0
- package/src/lib/channels/telegram-channel.js +23 -5
- package/src/lib/channels/webhook-channel.js +38 -15
- package/src/lib/chrome-connector.js +169 -23
- package/src/lib/config-manager.js +23 -9
- package/src/lib/context-breakdown.js +31 -0
- package/src/lib/cowork-cron.js +274 -32
- package/src/lib/cross-chain-mtc.js +3 -2
- package/src/lib/durable-security-store.js +124 -0
- package/src/lib/event-runtime-host.js +67 -6
- package/src/lib/event-runtime-store.js +163 -0
- package/src/lib/goal-store.js +32 -12
- package/src/lib/headless-manifest.js +2 -1
- package/src/lib/hook-environment.cjs +58 -0
- package/src/lib/hook-manager.js +12 -5
- package/src/lib/hook-runner.cjs +122 -28
- package/src/lib/hook-runner.js +7 -2
- package/src/lib/hooks-v2-producers.js +36 -0
- package/src/lib/hooks-v2-runtime.js +329 -52
- package/src/lib/interaction-adapter.js +60 -19
- package/src/lib/interaction-binding.js +64 -0
- package/src/lib/json-schema-output.js +439 -14
- package/src/lib/json-schema-validate.js +514 -883
- package/src/lib/lan-pairing-tokens.js +115 -57
- package/src/lib/lsp/__tests__/lsp-client.test.js +32 -0
- package/src/lib/lsp/__tests__/lsp-manager.test.js +25 -0
- package/src/lib/lsp/lsp-client.js +4 -0
- package/src/lib/lsp/lsp-manager.js +3 -0
- package/src/lib/lsp/lsp-server-registry.js +18 -0
- package/src/lib/mcp-client.js +1 -0
- package/src/lib/mcp-oauth.js +35 -21
- package/src/lib/packer/pkg-config-generator.js +3 -0
- package/src/lib/permission-decision.js +99 -0
- package/src/lib/plugin-monitor-supervisor.js +3 -0
- package/src/lib/plugin-runtime/bin.js +1148 -70
- package/src/lib/plugin-runtime/capabilities.js +50 -0
- package/src/lib/plugin-runtime/capability-consent.js +42 -35
- package/src/lib/plugin-runtime/hooks.js +36 -9
- package/src/lib/plugin-runtime/install.js +23 -7
- package/src/lib/plugin-runtime/lsp.js +4 -0
- package/src/lib/plugin-runtime/manifest.js +112 -8
- package/src/lib/plugin-runtime/mcp.js +30 -5
- package/src/lib/plugin-runtime/monitors.js +11 -0
- package/src/lib/plugin-runtime/plugin-options.js +94 -38
- package/src/lib/plugin-runtime/policy.js +29 -2
- package/src/lib/plugin-runtime/sandbox-policy.js +84 -0
- package/src/lib/plugin-runtime/scopes.js +27 -13
- package/src/lib/plugin-runtime/trust.js +36 -31
- package/src/lib/process-execution-broker/credential-agent.js +114 -16
- package/src/lib/process-execution-broker/credential-transport-worker.js +312 -0
- package/src/lib/process-execution-broker/credential-transport.js +378 -0
- package/src/lib/process-execution-broker/index.js +765 -49
- package/src/lib/process-execution-broker/platform-sandbox.js +4233 -138
- package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
- package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
- package/src/lib/process-execution-broker/windows-sandbox.cs +3856 -0
- package/src/lib/project-mcp-trust.js +21 -26
- package/src/lib/protocol-replay.js +19 -12
- package/src/lib/repl-bang-memorize.js +67 -10
- package/src/lib/settings-hooks.cjs +13 -0
- package/src/lib/skill-loader.js +83 -10
- package/src/lib/slash-commands.js +27 -4
- package/src/lib/sync-credentials.js +5 -4
- package/src/lib/turn-binding.js +8 -6
- package/src/repl/agent-repl.js +117 -31
- package/src/repl/repl-turn-binding.js +5 -2
- package/src/runtime/agent-core.js +699 -70
- package/src/runtime/agent-runtime.js +13 -1
- package/src/runtime/coding-agent-contract-shared.cjs +3 -3
- package/src/runtime/headless-runner.js +105 -7
- package/src/runtime/headless-stream.js +209 -23
- package/src/runtime/mcp-config.js +29 -17
- package/src/runtime/policies/agent-policy.js +2 -0
- package/src/workers/background-agent-worker.js +128 -13
- package/src/assets/web-panel/assets/ChatBubbleRenderer-C7bofJuA.js +0 -1
- package/src/assets/web-panel/assets/Projects-BbgmyQnS.js +0 -1
- package/src/assets/web-panel/assets/RemoteSession-Bqk3EYSu.js +0 -4
- package/src/assets/web-panel/assets/Tasks-3bDAUz8K.js +0 -1
- package/src/assets/web-panel/assets/Terminal-CsMLKIoV.js +0 -3
- package/src/assets/web-panel/assets/chat-CJ19O6Dh.js +0 -1
- package/src/assets/web-panel/assets/devWarning-BBMFnsja.js +0 -1
- package/src/assets/web-panel/assets/index-Do8JMV4N.js +0 -1
- package/src/assets/web-panel/assets/index-UYAJ6iNM.js +0 -1
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authenticated local transport for broker-issued credential references.
|
|
3
|
+
*
|
|
4
|
+
* A worker thread hosts the pipe so spawnSync children can resolve a reference
|
|
5
|
+
* while the broker's main JavaScript thread is blocked.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import crypto from "node:crypto";
|
|
9
|
+
import net from "node:net";
|
|
10
|
+
import os from "node:os";
|
|
11
|
+
import path from "node:path";
|
|
12
|
+
import { Worker } from "node:worker_threads";
|
|
13
|
+
|
|
14
|
+
const TRANSPORT_VERSION = "local-ipc-v1";
|
|
15
|
+
const DEFAULT_TIMEOUT_MS = 5000;
|
|
16
|
+
const MAX_RESPONSE_BYTES = 1024 * 1024;
|
|
17
|
+
|
|
18
|
+
function transportError(code, message) {
|
|
19
|
+
const error = new Error(message);
|
|
20
|
+
error.code = code;
|
|
21
|
+
return error;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function credentialTransportEndpoint(agentId, options = {}) {
|
|
25
|
+
const platform = options.platform || process.platform;
|
|
26
|
+
const safeId = crypto
|
|
27
|
+
.createHash("sha256")
|
|
28
|
+
.update(String(agentId))
|
|
29
|
+
.digest("hex")
|
|
30
|
+
.slice(0, 24);
|
|
31
|
+
if (platform === "win32") return `\\\\.\\pipe\\cc-cred-${safeId}`;
|
|
32
|
+
return path.join(options.tmpdir || os.tmpdir(), `cc-cred-${safeId}.sock`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class CredentialTransport {
|
|
36
|
+
constructor(options = {}) {
|
|
37
|
+
if (!options.agentId) {
|
|
38
|
+
throw transportError(
|
|
39
|
+
"CC_CREDENTIAL_INVALID_REQUEST",
|
|
40
|
+
"Credential transport requires an agent id",
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
this.agentId = String(options.agentId);
|
|
44
|
+
this.platform = options.platform || process.platform;
|
|
45
|
+
this.endpoint =
|
|
46
|
+
options.endpoint ||
|
|
47
|
+
credentialTransportEndpoint(this.agentId, {
|
|
48
|
+
platform: this.platform,
|
|
49
|
+
tmpdir: options.tmpdir,
|
|
50
|
+
});
|
|
51
|
+
this.version = TRANSPORT_VERSION;
|
|
52
|
+
this.ready = false;
|
|
53
|
+
this.closed = false;
|
|
54
|
+
this.error = null;
|
|
55
|
+
this._onAudit =
|
|
56
|
+
typeof options.onAudit === "function" ? options.onAudit : () => {};
|
|
57
|
+
this._onSettlement =
|
|
58
|
+
typeof options.onSettlement === "function"
|
|
59
|
+
? options.onSettlement
|
|
60
|
+
: () => {};
|
|
61
|
+
this._workerFactory =
|
|
62
|
+
options.workerFactory ||
|
|
63
|
+
((url, workerOptions) => new Worker(url, workerOptions));
|
|
64
|
+
|
|
65
|
+
this._readyPromise = new Promise((resolve, reject) => {
|
|
66
|
+
this._resolveReady = resolve;
|
|
67
|
+
this._rejectReady = reject;
|
|
68
|
+
});
|
|
69
|
+
this._readyPromise.catch(() => {});
|
|
70
|
+
|
|
71
|
+
try {
|
|
72
|
+
this._worker = this._workerFactory(
|
|
73
|
+
new URL("./credential-transport-worker.js", import.meta.url),
|
|
74
|
+
{
|
|
75
|
+
type: "module",
|
|
76
|
+
workerData: {
|
|
77
|
+
agentId: this.agentId,
|
|
78
|
+
endpoint: this.endpoint,
|
|
79
|
+
platform: this.platform,
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
);
|
|
83
|
+
this._worker.on("message", (message) =>
|
|
84
|
+
this._handleWorkerMessage(message),
|
|
85
|
+
);
|
|
86
|
+
this._worker.on("error", (error) => this._handleWorkerFailure(error));
|
|
87
|
+
this._worker.on("exit", (code) => {
|
|
88
|
+
if (!this.closed && code !== 0) {
|
|
89
|
+
this._handleWorkerFailure(
|
|
90
|
+
transportError(
|
|
91
|
+
"CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
|
|
92
|
+
`Credential transport worker exited with code ${code}`,
|
|
93
|
+
),
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
this._worker.unref?.();
|
|
98
|
+
} catch (error) {
|
|
99
|
+
this._handleWorkerFailure(error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
_handleWorkerMessage(message) {
|
|
104
|
+
if (message?.type === "ready") {
|
|
105
|
+
this.ready = true;
|
|
106
|
+
this._resolveReady(this);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (message?.type === "audit" && message.entry) {
|
|
110
|
+
this._onAudit(message.entry);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (message?.type === "settlement") {
|
|
114
|
+
this._onSettlement(message);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (message?.type === "fatal") {
|
|
118
|
+
this._handleWorkerFailure(
|
|
119
|
+
transportError(
|
|
120
|
+
message.error?.code || "CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
|
|
121
|
+
message.error?.message || "Credential transport failed",
|
|
122
|
+
),
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
_handleWorkerFailure(error) {
|
|
128
|
+
if (this.error) return;
|
|
129
|
+
this.error = transportError(
|
|
130
|
+
error?.code || "CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
|
|
131
|
+
error?.message || "Credential transport is unavailable",
|
|
132
|
+
);
|
|
133
|
+
this.ready = false;
|
|
134
|
+
this._rejectReady(this.error);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
isAvailable() {
|
|
138
|
+
return Boolean(this._worker && !this.closed && !this.error);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
waitUntilReady() {
|
|
142
|
+
return this._readyPromise;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
createCapabilityToken() {
|
|
146
|
+
if (!this.isAvailable()) {
|
|
147
|
+
throw (
|
|
148
|
+
this.error ||
|
|
149
|
+
transportError(
|
|
150
|
+
"CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
|
|
151
|
+
"Credential transport is unavailable",
|
|
152
|
+
)
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
return crypto.randomBytes(32).toString("base64url");
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
registerCredential(record) {
|
|
159
|
+
if (!this.isAvailable()) {
|
|
160
|
+
throw (
|
|
161
|
+
this.error ||
|
|
162
|
+
transportError(
|
|
163
|
+
"CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
|
|
164
|
+
"Credential transport is unavailable",
|
|
165
|
+
)
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
this._worker.postMessage({ type: "register", record });
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
updateCredential(refId, state) {
|
|
172
|
+
if (!this.isAvailable()) return;
|
|
173
|
+
this._worker.postMessage({
|
|
174
|
+
type: "update",
|
|
175
|
+
refId,
|
|
176
|
+
useCount: state.useCount,
|
|
177
|
+
status: state.status,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
revokeCredential(refId) {
|
|
182
|
+
if (!this.isAvailable()) return;
|
|
183
|
+
this._worker.postMessage({ type: "revoke", refId });
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
async close() {
|
|
187
|
+
if (this.closed) return;
|
|
188
|
+
this.closed = true;
|
|
189
|
+
if (!this._worker) return;
|
|
190
|
+
const worker = this._worker;
|
|
191
|
+
await new Promise((resolve) => {
|
|
192
|
+
const timer = setTimeout(resolve, 1000);
|
|
193
|
+
const onMessage = (message) => {
|
|
194
|
+
if (message?.type !== "closed") return;
|
|
195
|
+
clearTimeout(timer);
|
|
196
|
+
worker.removeListener("message", onMessage);
|
|
197
|
+
resolve();
|
|
198
|
+
};
|
|
199
|
+
worker.on("message", onMessage);
|
|
200
|
+
worker.postMessage({ type: "close" });
|
|
201
|
+
});
|
|
202
|
+
await worker.terminate();
|
|
203
|
+
this.ready = false;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
getInfo() {
|
|
207
|
+
return {
|
|
208
|
+
version: this.version,
|
|
209
|
+
endpoint: this.endpoint,
|
|
210
|
+
available: this.isAvailable(),
|
|
211
|
+
ready: this.ready,
|
|
212
|
+
error: this.error
|
|
213
|
+
? {
|
|
214
|
+
code: this.error.code,
|
|
215
|
+
message: this.error.message,
|
|
216
|
+
}
|
|
217
|
+
: null,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function connectOnce(endpoint) {
|
|
223
|
+
return new Promise((resolve, reject) => {
|
|
224
|
+
const socket = net.connect(endpoint);
|
|
225
|
+
const onError = (error) => {
|
|
226
|
+
socket.removeListener("connect", onConnect);
|
|
227
|
+
reject(error);
|
|
228
|
+
};
|
|
229
|
+
const onConnect = () => {
|
|
230
|
+
socket.removeListener("error", onError);
|
|
231
|
+
resolve(socket);
|
|
232
|
+
};
|
|
233
|
+
socket.once("error", onError);
|
|
234
|
+
socket.once("connect", onConnect);
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
async function connectWithRetry(endpoint, deadline) {
|
|
239
|
+
let lastError = null;
|
|
240
|
+
while (Date.now() < deadline) {
|
|
241
|
+
try {
|
|
242
|
+
return await connectOnce(endpoint);
|
|
243
|
+
} catch (error) {
|
|
244
|
+
lastError = error;
|
|
245
|
+
const retryable = ["ENOENT", "ECONNREFUSED", "EPIPE"].includes(
|
|
246
|
+
error?.code,
|
|
247
|
+
);
|
|
248
|
+
if (!retryable) throw error;
|
|
249
|
+
await new Promise((resolve) => {
|
|
250
|
+
setTimeout(resolve, 25);
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
throw (
|
|
255
|
+
lastError ||
|
|
256
|
+
transportError(
|
|
257
|
+
"CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
|
|
258
|
+
"Credential transport connection timed out",
|
|
259
|
+
)
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Resolve one reference using only the capability material inherited by the
|
|
265
|
+
* approved target process.
|
|
266
|
+
*/
|
|
267
|
+
export async function resolveCredentialRefOverTransport(refId, options = {}) {
|
|
268
|
+
const env = options.env || process.env;
|
|
269
|
+
const endpoint = options.endpoint || env.CC_CREDENTIAL_ENDPOINT;
|
|
270
|
+
const capabilityToken =
|
|
271
|
+
options.capabilityToken || env.CC_CREDENTIAL_AUTH_TOKEN;
|
|
272
|
+
const agentId = options.agentId || env.CC_CREDENTIAL_AGENT_ID;
|
|
273
|
+
const processTarget =
|
|
274
|
+
options.process ||
|
|
275
|
+
options.processTarget ||
|
|
276
|
+
env.CC_CREDENTIAL_TARGET_PROCESS;
|
|
277
|
+
const host =
|
|
278
|
+
options.host !== undefined
|
|
279
|
+
? options.host
|
|
280
|
+
: env.CC_CREDENTIAL_TARGET_HOST || null;
|
|
281
|
+
const timeoutMs = Math.max(
|
|
282
|
+
1,
|
|
283
|
+
Number(options.timeoutMs || DEFAULT_TIMEOUT_MS),
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
if (!endpoint || !capabilityToken || !agentId || !processTarget || !refId) {
|
|
287
|
+
throw transportError(
|
|
288
|
+
"CC_CREDENTIAL_INVALID_REQUEST",
|
|
289
|
+
"Credential transport environment is incomplete",
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
const deadline = Date.now() + timeoutMs;
|
|
294
|
+
const socket = await connectWithRetry(endpoint, deadline);
|
|
295
|
+
return await new Promise((resolve, reject) => {
|
|
296
|
+
let settled = false;
|
|
297
|
+
let carry = "";
|
|
298
|
+
const finish = (error, value) => {
|
|
299
|
+
if (settled) return;
|
|
300
|
+
settled = true;
|
|
301
|
+
clearTimeout(timer);
|
|
302
|
+
socket.destroy();
|
|
303
|
+
if (error) reject(error);
|
|
304
|
+
else resolve(value);
|
|
305
|
+
};
|
|
306
|
+
const timer = setTimeout(
|
|
307
|
+
() => {
|
|
308
|
+
finish(
|
|
309
|
+
transportError(
|
|
310
|
+
"CC_CREDENTIAL_TRANSPORT_TIMEOUT",
|
|
311
|
+
"Credential transport response timed out",
|
|
312
|
+
),
|
|
313
|
+
);
|
|
314
|
+
},
|
|
315
|
+
Math.max(1, deadline - Date.now()),
|
|
316
|
+
);
|
|
317
|
+
timer.unref?.();
|
|
318
|
+
socket.on("data", (chunk) => {
|
|
319
|
+
carry += chunk.toString("utf8");
|
|
320
|
+
if (Buffer.byteLength(carry, "utf8") > MAX_RESPONSE_BYTES) {
|
|
321
|
+
finish(
|
|
322
|
+
transportError(
|
|
323
|
+
"CC_CREDENTIAL_INVALID_REQUEST",
|
|
324
|
+
"Credential transport response is too large",
|
|
325
|
+
),
|
|
326
|
+
);
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
const newline = carry.indexOf("\n");
|
|
330
|
+
if (newline === -1) return;
|
|
331
|
+
let response;
|
|
332
|
+
try {
|
|
333
|
+
response = JSON.parse(carry.slice(0, newline).replace(/\r$/, ""));
|
|
334
|
+
} catch {
|
|
335
|
+
finish(
|
|
336
|
+
transportError(
|
|
337
|
+
"CC_CREDENTIAL_INVALID_REQUEST",
|
|
338
|
+
"Credential transport returned invalid JSON",
|
|
339
|
+
),
|
|
340
|
+
);
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
if (!response.ok) {
|
|
344
|
+
finish(
|
|
345
|
+
transportError(
|
|
346
|
+
response.code || "CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
|
|
347
|
+
response.message || "Credential transport denied the request",
|
|
348
|
+
),
|
|
349
|
+
);
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
finish(null, response.value);
|
|
353
|
+
});
|
|
354
|
+
socket.once("error", (error) => finish(error));
|
|
355
|
+
socket.once("close", () => {
|
|
356
|
+
if (!settled) {
|
|
357
|
+
finish(
|
|
358
|
+
transportError(
|
|
359
|
+
"CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
|
|
360
|
+
"Credential transport closed without a response",
|
|
361
|
+
),
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
socket.write(
|
|
366
|
+
`${JSON.stringify({
|
|
367
|
+
type: "resolve",
|
|
368
|
+
refId,
|
|
369
|
+
agentId,
|
|
370
|
+
capabilityToken,
|
|
371
|
+
process: processTarget,
|
|
372
|
+
host,
|
|
373
|
+
})}\n`,
|
|
374
|
+
);
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
export { TRANSPORT_VERSION };
|