chainlesschain 0.166.46 → 0.166.48
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/README.md +6 -4
- package/package.json +4 -2
- package/src/assets/web-panel/assets/{AIOps-Cp8KiMmv.js → AIOps-BLGEffkh.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-B4d9BGsm.js → ActionButton-Cz1z2VGD.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Cf9yXTkv.js → Analytics-C3j9cf6q.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-40UkmxtP.js → AppLayout-BR9ERuCA.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-Ckkb4oOA.js → Artifacts-CozJCm4y.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-Dnf569k5.js → Audit-DC5g9Ra2.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CA6bLem4.js → BackgroundAgents-B1zrQ0dW.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-ChQU0I_Q.js → Backup-ChVnfjpm.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BHeZXnNN.js → BaseInput-8_vLQsLf.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DcFVYB2E.js → Chat-Dct9bm6L.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-BvoSsCKh.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-2PDbejv2.js → Checkbox-DZQIsCIC.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DJBn1RAu.js → Codegen-CdzHxmnq.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CPRq7n6y.js → Col-DdAN8LeW.js} +1 -1
- package/src/assets/web-panel/assets/{Community-axvINFMi.js → Community-CNgjT9MA.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-_OX4Qbe0.js → Compact-BtQiX6G-.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DWAkvzRL.js → Compliance-OGX5ma3j.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CUIJ25oj.js → Cowork-CgugQnGM.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-nR0m7H3_.js → Cron-Bpg7cPFD.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CgTLXzh_.js → Crosschain-D1hsuswf.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BllzRB6Q.js → DID-miDRsMBw.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-C9f0IIBN.js → Dashboard-CGcl8htP.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BkahetiO.js → Dropdown-BFaxTdVE.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-rartVC-k.js → EmailListRenderer-BQdGLZIO.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-BqpG3XHV.js → EvolutionSettings-bMvgBk6r.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DgUdFvw1.js → FamilyGuardDashboard-c1WVC_--.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-oFpIQU6g.js → Federation-DyAcFrQY.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BUH5xlyP.js → FormItemContext-CfwpfD2B.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-ilRa-ueg.js → GenericCardRenderer-DkJcbBpS.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DlHHSF8j.js → Git-DgYIrPJh.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-yQiiXIWe.js → Governance-BF1tYPJ6.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BUDRVGOP.js → Inference-BFkwRIrU.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-BaGyIoN1.js → KnowledgeGraph-DpCoqhBa.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-C1cO6zE0.js → Logs-DU2qAJmD.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-_z_Iaoes.js → MarkdownRenderer-QWv7UJLq.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-CM8cGL0K.js → Marketplace-Dz9NUrfo.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CDqAMU0U.js → McpTools-B67I3d5v.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-CfB0-Ofv.js → Memory-crkElJSy.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BL18ytvB.js → MobileBridge-BO20VbdX.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-PIyyxbuJ.js → MobileProjects-Ba-3gZZd.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BTTrFCol.js → Mtc-BAHZM084.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-JHZn037c.js → MtcAudit-CL3DzajL.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-CMf9NEdB.js → Multisig-BSWWzvWH.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Dhk3qaus.js → NLProgramming-fnxqXM_3.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-6F8EarNN.js → Notes-qUZPIQXT.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-gxdaVEit.js → NotificationSettings-x9Xrixqu.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-gVgXQWdc.js → OrderTableRenderer-BtMtQUt7.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CzvHcDNO.js → Organization-C946Hzna.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Dclx30Vv.js → Overflow-BYf8KIts.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CM0Wm9vZ.js → P2P-Cbqf5dnv.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-rmxp0cuF.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-B_oATenG.js → Permissions-CZBw45EW.js} +3 -3
- package/src/assets/web-panel/assets/{PersonalDataHub-CptiVBh5.js → PersonalDataHub-BKwUAt43.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-DkHzgyyI.js → Pipeline-DmFD2QW4.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DzZvwcKh.js → Privacy-KpuwWvt5.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CzkCs-5G.js → ProjectInit-Bt8UheX6.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BB8dcxRD.js → ProjectSettings-2ZeAn9CP.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-B7PW9CFY.js → Projects-zBuet8Zs.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Tfx-ti1V.js → Providers-DcEAnw6L.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-EvWlNhfX.js → QrScannerModal-qF7liYG9.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CUspgbNC.js → QuickAsk-qiESlVBJ.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-COY2g77J.js → Recommend-Bk-cQyi9.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BzMBU6E6.js → RemoteSession-CwrekErS.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-RtYRF4YP.js → Reputation-Bmw_UQtW.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Bva3l9Lc.js → Row-CPdqZIUX.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BhjzLvW3.js → RssFeed-D_W-xxvS.js} +2 -2
- package/src/assets/web-panel/assets/{Search-BYzT2PTR.js → Search-Hu0oDFj_.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Bcl4-KTv.js → Security-DeRxUwmq.js} +3 -3
- package/src/assets/web-panel/assets/{Services-BRRa4A0f.js → Services-CsNmHFkf.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DYQ016qy.js → Skeleton-gv_Vz0tN.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CAUKL9JA.js → Skills-Dgg-_rCB.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BTyUqfuD.js → Sla-Bpu-bsEJ.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CUjMihrs.js → SpeechSettings-CrhleHuF.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CvfOSupr.js → SyncSettings-JHjUN6I9.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-EvjNXrWH.js → Tasks-DKRWKkl9.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-wPAp0EoM.js → Templates-leiWntLq.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CP0D-q9Q.js → Tenant--1bYulvn.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CQ0f2iFg.js → Terminal-C0y6FvSS.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-D3JrGSPb.js → TimelineRenderer-CQK4PVv4.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-yXf2PPp9.js → Tokens-DbIvF-DV.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DfmMOoZ2.js → Trigger-CkXJ2vuq.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BTCyMgf1.js → Trust-B02WXJPw.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DKCwIBHi.js → UkeySign-VPMkfzmw.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CQpDSzLO.js → VideoEditing-C5ezUnah.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CyFrzC3K.js → Wallet-CYfvYRrY.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-D6Nr_1kd.js → WebAuthn-DtKl-kpr.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-CgR9tNrB.js → WorkflowEditor-DACITF-u.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CRG_IeyP.js → chat-qnygfnLi.js} +1 -1
- package/src/assets/web-panel/assets/{colors-MdE3TStI.js → colors-D4mISLBD.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-B0LRuiNV.js → compact-item-BBPfxYGL.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B_V5fjcX.js → createContext-Byx4ndHp.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DBy6gsuI.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DSL-c_hr.js → hasIn-CGjLkkn3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE7bSYmW.js → index-B8UpadHC.js} +1 -1
- package/src/assets/web-panel/assets/{index-BD0w-888.js → index-B9jH-h4X.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbZZ7P_c.js → index-BN7_TSgU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BIDCNwy6.js → index-BNe2lCk6.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkN53KiJ.js → index-B_fHPZ8E.js} +1 -1
- package/src/assets/web-panel/assets/index-BfEDXk_E.js +1 -0
- package/src/assets/web-panel/assets/{index-BsAEd-Do.js → index-BklGH3YI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CS3bOhV7.js → index-BmKYaaGP.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3iW-mhn.js → index-BxQF1wCU.js} +1 -1
- package/src/assets/web-panel/assets/{index-SmQfEHjp.js → index-ByA1NyFP.js} +1 -1
- package/src/assets/web-panel/assets/{index-0200QxC4.js → index-BzeBBAl5.js} +1 -1
- package/src/assets/web-panel/assets/{index-c8OqO3rq.js → index-C3abGsSW.js} +1 -1
- package/src/assets/web-panel/assets/{index-C-aKWR2v.js → index-C9tcHs46.js} +1 -1
- package/src/assets/web-panel/assets/{index-BNhWoD6d.js → index-CD5Btq6p.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVDi4rS9.js → index-CFMWjuav.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEOAZm5j.js → index-CMj8qmpX.js} +1 -1
- package/src/assets/web-panel/assets/{index-C67dPW0L.js → index-CVUJjQAT.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3pJBTvo.js → index-CWhI8G14.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtOTppk8.js → index-CZjNamSU.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRRY44XP.js → index-CmHE-lY_.js} +1 -1
- package/src/assets/web-panel/assets/{index-Tg3yl8wc.js → index-CoA8WsVr.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXMeisJK.js → index-Cpg3AWRy.js} +1 -1
- package/src/assets/web-panel/assets/index-CrxUwNM8.js +1 -0
- package/src/assets/web-panel/assets/{index-Bq8-2Ibv.js → index-CsVuQsY1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHp1nSur.js → index-CydHMjwc.js} +1 -1
- package/src/assets/web-panel/assets/{index-CPYshcic.js → index-DH6iC5b2.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBwBZwio.js → index-DZXhKAk9.js} +1 -1
- package/src/assets/web-panel/assets/{index-Didyuq2Z.js → index-D_g9mA1N.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdHMc9LQ.js → index-DboTeuPF.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5dqieYX.js → index-DfgpKd64.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdplnAS9.js → index-Dmfe0L2Z.js} +1 -1
- package/src/assets/web-panel/assets/{index-KaSejHjf.js → index-Dzni_5Qw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BpwGsAA-.js → index-J5JkStvY.js} +1 -1
- package/src/assets/web-panel/assets/{index-OBhlHSMN.js → index-Ne8UGllV.js} +3 -3
- package/src/assets/web-panel/assets/{index-CZICtYJ0.js → index-O09jXbir.js} +1 -1
- package/src/assets/web-panel/assets/{index-DVgTf7CZ.js → index-Y7el_3WS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQAsL19t.js → index-c_tBkIlU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMm8tO2X.js → index-lKJWAmd4.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNytQuFq.js → index-xzRKTy0R.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-P8SBN6Di.js → initDefaultProps-XuhfEIhB.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BubbjUT_.js → motion-Cbxh6AxO.js} +1 -1
- package/src/assets/web-panel/assets/{move-Chcykv0I.js → move-C7IEnFly.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DyiYuGDu.js → mtc-parser-lLADx4LL.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Rdwb_Neb.js → omit-mIbic_k-.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CCr0MYHl.js → pickAttrs-_xIYEqu3.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-B1ZXz3bb.js → placementArrow-ClB-E0ny.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BGEdwej6.js → responsiveObserve-D36Bg2ut.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CpnsUMaT.js → slide-CUuO08Bl.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-C7x-TVp_.js → statusUtils-BKahwLbv.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CC5k_791.js → styleChecker-2pT-T8vy.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BpZFKsJW.js → useFlexGapSupport-DyH5g7Rg.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CVq5HySy.js → useFs-CTOauB3X.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BGkdLryu.js → usePersonalDataHub-B02JYIMe.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-uLtOUEK-.js → vnode-Do22wQrc.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BfVC9iUs.js → zoom-BfnL7rit.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 +8 -0
- package/src/commands/background-session.js +31 -3
- package/src/commands/chat.js +5 -1
- package/src/commands/eval.js +86 -28
- package/src/commands/llm.js +104 -1
- package/src/commands/plugin.js +161 -1
- package/src/commands/sandbox.js +121 -2
- package/src/commands/serve.js +11 -2
- package/src/commands/skill.js +29 -0
- package/src/data/changelog.json +26 -0
- package/src/gateways/ws/session-protocol.js +13 -0
- package/src/gateways/ws/ws-agent-handler.js +17 -0
- package/src/gateways/ws/ws-server.js +3 -0
- package/src/gateways/ws/ws-session-state.js +131 -0
- package/src/generated/cc-agent-protocol.schema.json +48 -1
- package/src/lazy-dispatch.js +8 -1
- package/src/lib/agent-sandbox.js +337 -53
- package/src/lib/app-server/cli-agent-kernel-adapter.js +28 -0
- package/src/lib/app-server/server.js +93 -0
- package/src/lib/background-agent-keeper-client.js +2 -0
- package/src/lib/background-agent-keeper-protocol.js +7 -0
- package/src/lib/background-agent-list-index.js +222 -0
- package/src/lib/background-agent-supervisor.js +232 -47
- package/src/lib/codex-app-server-adapter.js +82 -27
- package/src/lib/context-memory-kernel/durable-memory-port.js +31 -8
- package/src/lib/context-memory-kernel/provider-context.js +118 -19
- package/src/lib/deferred-question-context.js +278 -0
- package/src/lib/eval/evidence.js +202 -64
- package/src/lib/eval/plugin-suite.js +1181 -0
- package/src/lib/eval/runner.js +10 -3
- package/src/lib/evolution/agent-evolution-runtime-composition.js +236 -1
- package/src/lib/evolution/agent-model-projection.js +97 -1
- package/src/lib/evolution/evidence-backed-wiki-maintainer.js +154 -1
- package/src/lib/evolution/evolution-artifact-ports.js +6 -0
- package/src/lib/evolution/evolution-deployment-loader.js +87 -3
- package/src/lib/evolution/evolution-eval-gate.js +8 -0
- package/src/lib/evolution/evolution-eval-runtime-composition.js +255 -0
- package/src/lib/evolution/evolution-evidence-artifact-adapter.js +58 -2
- package/src/lib/evolution/evolution-ledger-file-backend.js +23 -2
- package/src/lib/evolution/evolution-ledger-manifest-chain.js +223 -7
- package/src/lib/evolution/evolution-ledger-v2-journal.js +525 -0
- package/src/lib/evolution/evolution-ledger-v2-manifest-backend.js +46 -2
- package/src/lib/evolution/evolution-ledger.js +57 -1
- package/src/lib/evolution/evolution-run-ledger-adapter.js +93 -0
- package/src/lib/evolution/evolution-run-wiki-evidence-resolver.js +259 -0
- package/src/lib/evolution/governed-hub-llm.js +238 -5
- package/src/lib/evolution/governed-hub-resolver.js +82 -4
- package/src/lib/evolution/governed-hub-skill.js +11 -5
- package/src/lib/evolution/governed-skill-synthesis-provider-chat.js +10 -1
- package/src/lib/evolution/skill-runtime-revalidation-ledger-adapter.js +254 -0
- package/src/lib/evolution/skill-runtime-revalidation.js +530 -0
- package/src/lib/evolution/skill-target-matrix-eval.js +4 -4
- package/src/lib/evolution/wiki-evidence-commit-guard.js +366 -0
- package/src/lib/evolution/wiki-informed-skill-proposer.js +13 -1
- package/src/lib/goal-context.js +14 -5
- package/src/lib/interaction-adapter.js +166 -1
- package/src/lib/model-capabilities.js +271 -0
- package/src/lib/model-context-catalog.js +105 -0
- package/src/lib/model-context-window.js +4 -49
- package/src/lib/openai-responses.js +428 -0
- package/src/lib/plugin-runtime/scopes.js +7 -1
- package/src/lib/remote-read-loop-guard.js +2 -2
- package/src/lib/runtime-usage-ledger.js +16 -0
- package/src/lib/session-host-snapshot.js +16 -0
- package/src/lib/skill-loader.js +12 -0
- package/src/lib/with-file-lock.js +3 -1
- package/src/repl/agent-repl.js +5 -1
- package/src/runtime/agent-core.js +348 -23
- package/src/runtime/agent-runtime.js +7 -0
- package/src/runtime/coding-agent-contract-shared.cjs +13 -1
- package/src/runtime/headless-runner.js +4 -1
- package/src/runtime/headless-stream.js +283 -45
- package/src/runtime/runtime-factory.js +26 -2
- package/src/workers/background-agent-keeper.js +23 -13
- package/src/workers/background-agent-worker.js +27 -13
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Bi2SY9E_.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-fYmQzmTA.js +0 -7
- package/src/assets/web-panel/assets/devWarning-BtFLt3qI.js +0 -1
- package/src/assets/web-panel/assets/index-BhuWQHeG.js +0 -1
- package/src/assets/web-panel/assets/index-D-4tFek3.js +0 -1
|
@@ -6,6 +6,7 @@ export const CODEX_APP_SERVER_COMPATIBILITY_MATRIX = Object.freeze([
|
|
|
6
6
|
Object.freeze({ version: "0.149.0" }),
|
|
7
7
|
Object.freeze({ version: "0.150.0" }),
|
|
8
8
|
Object.freeze({ version: "0.150.1" }),
|
|
9
|
+
Object.freeze({ version: "0.154.0" }),
|
|
9
10
|
]);
|
|
10
11
|
|
|
11
12
|
function adapterError(code, message, details = {}) {
|
|
@@ -66,18 +67,40 @@ function projectNotification(notification) {
|
|
|
66
67
|
};
|
|
67
68
|
}
|
|
68
69
|
if (method === "turn/completed" || method === "turn/failed") {
|
|
69
|
-
const
|
|
70
|
+
const turn = params.turn || {};
|
|
71
|
+
const reportedStatus =
|
|
72
|
+
method === "turn/failed" ? "failed" : String(turn.status || "");
|
|
73
|
+
const terminalStatus = ["completed", "failed", "interrupted"].includes(
|
|
74
|
+
reportedStatus,
|
|
75
|
+
)
|
|
76
|
+
? reportedStatus
|
|
77
|
+
: "failed";
|
|
78
|
+
const protocolError =
|
|
79
|
+
terminalStatus === "failed" && reportedStatus !== "failed"
|
|
80
|
+
? {
|
|
81
|
+
code: "CC_CODEX_APP_SERVER_INVALID_TERMINAL_STATUS",
|
|
82
|
+
message:
|
|
83
|
+
"Codex App Server emitted turn/completed without a supported terminal status",
|
|
84
|
+
}
|
|
85
|
+
: null;
|
|
86
|
+
const terminalError =
|
|
87
|
+
terminalStatus === "failed"
|
|
88
|
+
? turn.error ||
|
|
89
|
+
params.error ||
|
|
90
|
+
protocolError ||
|
|
91
|
+
"Codex App Server turn failed"
|
|
92
|
+
: turn.error || params.error || null;
|
|
70
93
|
return {
|
|
71
94
|
method: "turn/completed",
|
|
72
95
|
params: {
|
|
73
96
|
turn: {
|
|
74
|
-
...
|
|
75
|
-
status:
|
|
97
|
+
...turn,
|
|
98
|
+
status: terminalStatus,
|
|
76
99
|
},
|
|
77
100
|
},
|
|
78
|
-
terminal:
|
|
79
|
-
error:
|
|
80
|
-
usage: params.usage || null,
|
|
101
|
+
terminal: terminalStatus,
|
|
102
|
+
error: terminalError,
|
|
103
|
+
usage: params.usage || turn.usage || null,
|
|
81
104
|
};
|
|
82
105
|
}
|
|
83
106
|
return { unknownMethod: String(method || "<missing>") };
|
|
@@ -138,6 +161,10 @@ export class CodexAppServerAdapter extends EventEmitter {
|
|
|
138
161
|
const notifications = [];
|
|
139
162
|
const unknownMethods = new Set();
|
|
140
163
|
let output = "";
|
|
164
|
+
let activeThreadId = threadId;
|
|
165
|
+
let submissionStarted = false;
|
|
166
|
+
let admissionObserved = false;
|
|
167
|
+
let observedTerminal = null;
|
|
141
168
|
let terminalResolve;
|
|
142
169
|
let terminalReject;
|
|
143
170
|
const terminal = new Promise((resolve, reject) => {
|
|
@@ -162,16 +189,38 @@ export class CodexAppServerAdapter extends EventEmitter {
|
|
|
162
189
|
notifications.push(projected);
|
|
163
190
|
this.emit("notification", projected);
|
|
164
191
|
}
|
|
192
|
+
if (
|
|
193
|
+
submissionStarted &&
|
|
194
|
+
(projected.method === "turn/started" ||
|
|
195
|
+
projected.method?.startsWith("item/") ||
|
|
196
|
+
Boolean(projected.terminal))
|
|
197
|
+
) {
|
|
198
|
+
admissionObserved = true;
|
|
199
|
+
}
|
|
165
200
|
if (projected.output) output = projected.output;
|
|
166
|
-
if (projected.terminal)
|
|
201
|
+
if (projected.terminal) {
|
|
202
|
+
observedTerminal = projected;
|
|
203
|
+
terminalResolve(projected);
|
|
204
|
+
}
|
|
167
205
|
};
|
|
168
206
|
this.client.on?.("notification", onNotification);
|
|
169
|
-
|
|
207
|
+
const buildResult = (terminalEvent) =>
|
|
208
|
+
Object.freeze({
|
|
209
|
+
protocol: CODEX_APP_SERVER_PROTOCOL,
|
|
210
|
+
threadId: activeThreadId,
|
|
211
|
+
terminal: terminalEvent.terminal,
|
|
212
|
+
output,
|
|
213
|
+
error: terminalEvent.error || null,
|
|
214
|
+
usage: terminalEvent.usage || null,
|
|
215
|
+
notifications: Object.freeze(notifications),
|
|
216
|
+
unknownMethods: Object.freeze([...unknownMethods].sort()),
|
|
217
|
+
fallback: false,
|
|
218
|
+
authoritative: false,
|
|
219
|
+
});
|
|
170
220
|
try {
|
|
171
221
|
if (!this.client.running && typeof this.client.start === "function") {
|
|
172
222
|
await this.client.start();
|
|
173
223
|
}
|
|
174
|
-
let activeThreadId = threadId;
|
|
175
224
|
if (!activeThreadId) {
|
|
176
225
|
const started = await this.client.request("thread/start", {
|
|
177
226
|
ephemeral: false,
|
|
@@ -185,31 +234,37 @@ export class CodexAppServerAdapter extends EventEmitter {
|
|
|
185
234
|
"Codex App Server did not return a thread identity",
|
|
186
235
|
);
|
|
187
236
|
}
|
|
237
|
+
// Once turn/start begins, a rejected client promise cannot prove that
|
|
238
|
+
// the server did not accept the input. Never launch a second execution
|
|
239
|
+
// path from that ambiguous state.
|
|
240
|
+
submissionStarted = true;
|
|
188
241
|
const started = await this.client.request("turn/start", {
|
|
189
242
|
threadId: activeThreadId,
|
|
190
243
|
input: [{ type: "text", text: String(prompt || "") }],
|
|
191
244
|
});
|
|
192
|
-
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
usage: terminalEvent.usage || null,
|
|
204
|
-
notifications: Object.freeze(notifications),
|
|
205
|
-
unknownMethods: Object.freeze([...unknownMethods].sort()),
|
|
206
|
-
fallback: false,
|
|
207
|
-
authoritative: false,
|
|
208
|
-
});
|
|
245
|
+
admissionObserved = true;
|
|
246
|
+
const initialStatus = String(started?.turn?.status || "");
|
|
247
|
+
const terminalEvent = ["completed", "failed", "interrupted"].includes(
|
|
248
|
+
initialStatus,
|
|
249
|
+
)
|
|
250
|
+
? projectNotification({
|
|
251
|
+
method: "turn/completed",
|
|
252
|
+
params: { turn: started.turn, usage: started.turn.usage || null },
|
|
253
|
+
})
|
|
254
|
+
: await terminal;
|
|
255
|
+
return buildResult(terminalEvent);
|
|
209
256
|
} catch (error) {
|
|
210
|
-
if (!
|
|
257
|
+
if (!submissionStarted) {
|
|
211
258
|
return this._fallback(prompt, options, error?.code || "startup_failed");
|
|
212
259
|
}
|
|
260
|
+
if (observedTerminal) return buildResult(observedTerminal);
|
|
261
|
+
if (!admissionObserved) {
|
|
262
|
+
throw adapterError(
|
|
263
|
+
"CC_CODEX_APP_SERVER_SUBMISSION_UNKNOWN",
|
|
264
|
+
"Codex App Server turn submission outcome is unknown; fallback was suppressed to prevent duplicate effects",
|
|
265
|
+
{ cause: error },
|
|
266
|
+
);
|
|
267
|
+
}
|
|
213
268
|
throw adapterError(
|
|
214
269
|
"CC_CODEX_APP_SERVER_FAILED_AFTER_ADMISSION",
|
|
215
270
|
"Codex App Server failed after the turn was admitted; fallback was suppressed to prevent duplicate effects",
|
|
@@ -170,11 +170,14 @@ export class DurableJsonMemoryPort {
|
|
|
170
170
|
filePath = join(getHomeDir(), "context-memory", "kernel-v1.json"),
|
|
171
171
|
maxStoreBytes = DEFAULT_MAX_STORE_BYTES,
|
|
172
172
|
maxEvents = DEFAULT_MAX_EVENTS,
|
|
173
|
+
lockObserver = null,
|
|
173
174
|
} = {}) {
|
|
174
175
|
this.name = "cli-context-memory-authority";
|
|
175
176
|
this.filePath = filePath;
|
|
176
177
|
this.maxStoreBytes = maxStoreBytes;
|
|
177
178
|
this.maxEvents = maxEvents;
|
|
179
|
+
this.lockObserver =
|
|
180
|
+
typeof lockObserver === "function" ? lockObserver : null;
|
|
178
181
|
}
|
|
179
182
|
|
|
180
183
|
_readUnlocked() {
|
|
@@ -182,7 +185,10 @@ export class DurableJsonMemoryPort {
|
|
|
182
185
|
if (!existsSync(this.filePath)) return initializeState();
|
|
183
186
|
const bytes = readFileSync(this.filePath);
|
|
184
187
|
if (bytes.length > this.maxStoreBytes) {
|
|
185
|
-
throw corruptStore(
|
|
188
|
+
throw corruptStore(
|
|
189
|
+
this.filePath,
|
|
190
|
+
"store exceeds its configured byte limit",
|
|
191
|
+
);
|
|
186
192
|
}
|
|
187
193
|
try {
|
|
188
194
|
return normalizeState(JSON.parse(bytes.toString("utf8")), this.filePath);
|
|
@@ -194,13 +200,30 @@ export class DurableJsonMemoryPort {
|
|
|
194
200
|
|
|
195
201
|
_locked(operation) {
|
|
196
202
|
mkdirSync(dirname(this.filePath), { recursive: true, mode: 0o700 });
|
|
197
|
-
return withFileLock(
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
203
|
+
return withFileLock(
|
|
204
|
+
this.filePath,
|
|
205
|
+
(context) => {
|
|
206
|
+
if (this.lockObserver) {
|
|
207
|
+
try {
|
|
208
|
+
this.lockObserver({
|
|
209
|
+
locked: context.locked,
|
|
210
|
+
waitMs: context.waitMs,
|
|
211
|
+
attempts: context.attempts,
|
|
212
|
+
});
|
|
213
|
+
} catch {
|
|
214
|
+
// Diagnostics must not alter the authority operation.
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return operation(context);
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
failIfUnavailable: true,
|
|
221
|
+
timeoutMs: 30_000,
|
|
222
|
+
retryMs: 2,
|
|
223
|
+
maxRetryMs: 32,
|
|
224
|
+
retryJitterMs: 8,
|
|
225
|
+
},
|
|
226
|
+
);
|
|
204
227
|
}
|
|
205
228
|
|
|
206
229
|
async read(memoryId) {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
isProtected,
|
|
5
5
|
normalizeContextItem,
|
|
6
6
|
} from "@chainlesschain/context-memory-kernel";
|
|
7
|
-
import {
|
|
7
|
+
import { resolveModelCapabilityProfile } from "../model-capabilities.js";
|
|
8
8
|
import { createCliContextMemoryRuntime } from "./runtime.js";
|
|
9
9
|
import {
|
|
10
10
|
contextItemsToMessages,
|
|
@@ -12,6 +12,9 @@ import {
|
|
|
12
12
|
messagesToContextItems,
|
|
13
13
|
} from "./message-adapter.js";
|
|
14
14
|
|
|
15
|
+
export const SEMANTIC_CANDIDATE_REQUEST_SCHEMA =
|
|
16
|
+
"chainlesschain.context-memory-semantic-candidate-request/v1";
|
|
17
|
+
|
|
15
18
|
function defaultAdmissions(sessionId, options) {
|
|
16
19
|
const candidates = [
|
|
17
20
|
{ scope: "session", scopeId: sessionId },
|
|
@@ -19,9 +22,10 @@ function defaultAdmissions(sessionId, options) {
|
|
|
19
22
|
{ scope: "user", scopeId: options.userId || "local-user" },
|
|
20
23
|
];
|
|
21
24
|
const configured = options.contextMemoryScopeAdmissions;
|
|
22
|
-
const admissions =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
const admissions =
|
|
26
|
+
Array.isArray(configured) && configured.length > 0
|
|
27
|
+
? configured
|
|
28
|
+
: candidates;
|
|
25
29
|
const seen = new Set();
|
|
26
30
|
return admissions.filter((entry) => {
|
|
27
31
|
const key = `${entry.scope}\0${entry.scopeId || ""}`;
|
|
@@ -31,6 +35,57 @@ function defaultAdmissions(sessionId, options) {
|
|
|
31
35
|
});
|
|
32
36
|
}
|
|
33
37
|
|
|
38
|
+
function semanticCandidateProvider(options) {
|
|
39
|
+
const provider = options.contextMemorySemanticCandidateProvider;
|
|
40
|
+
if (provider == null) return null;
|
|
41
|
+
if (typeof provider !== "function") {
|
|
42
|
+
throw new TypeError(
|
|
43
|
+
"contextMemorySemanticCandidateProvider must be a function",
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
return provider;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Ask a host-owned semantic index for opaque record identifiers. The host sees
|
|
51
|
+
* the query and admission boundary but never receives canonical record content;
|
|
52
|
+
* the kernel later validates every returned revision/digest and applies its
|
|
53
|
+
* lifecycle, scope, expiry, and sink filters before ranking.
|
|
54
|
+
*/
|
|
55
|
+
async function resolveSemanticCandidates({
|
|
56
|
+
provider,
|
|
57
|
+
sessionId,
|
|
58
|
+
query,
|
|
59
|
+
sink,
|
|
60
|
+
scopeAdmissions,
|
|
61
|
+
limit,
|
|
62
|
+
}) {
|
|
63
|
+
if (!provider) return undefined;
|
|
64
|
+
const candidates = await provider(
|
|
65
|
+
Object.freeze({
|
|
66
|
+
schema: SEMANTIC_CANDIDATE_REQUEST_SCHEMA,
|
|
67
|
+
sessionId,
|
|
68
|
+
query,
|
|
69
|
+
sink,
|
|
70
|
+
scopeAdmissions: Object.freeze(
|
|
71
|
+
scopeAdmissions.map((entry) => Object.freeze({ ...entry })),
|
|
72
|
+
),
|
|
73
|
+
limit,
|
|
74
|
+
maxCandidates: 1000,
|
|
75
|
+
}),
|
|
76
|
+
);
|
|
77
|
+
if (!Array.isArray(candidates)) {
|
|
78
|
+
throw new TypeError(
|
|
79
|
+
"contextMemorySemanticCandidateProvider must resolve to an array",
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
return candidates.map((candidate) =>
|
|
83
|
+
candidate && typeof candidate === "object" && !Array.isArray(candidate)
|
|
84
|
+
? Object.freeze({ ...candidate })
|
|
85
|
+
: candidate,
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
34
89
|
function toolDefinitionsToContextItems(definitionsInput, { sessionId, sink }) {
|
|
35
90
|
const definitions = Array.isArray(definitionsInput) ? definitionsInput : [];
|
|
36
91
|
return definitions.map((definition, index) => {
|
|
@@ -83,6 +138,34 @@ export async function prepareCanonicalProviderContext(
|
|
|
83
138
|
) {
|
|
84
139
|
const messages = Array.isArray(messagesInput) ? messagesInput : [];
|
|
85
140
|
const sessionId = String(options.sessionId || "ephemeral-cli-session");
|
|
141
|
+
const planningRequested = options.contextMemorySkipPlanning !== true;
|
|
142
|
+
const provider = String(options.provider || "local");
|
|
143
|
+
const modelCapabilities = planningRequested
|
|
144
|
+
? resolveModelCapabilityProfile({
|
|
145
|
+
provider,
|
|
146
|
+
model: options.model,
|
|
147
|
+
baseUrl: options.baseUrl,
|
|
148
|
+
contextMemoryModelWindowTokens: options.contextMemoryModelWindowTokens,
|
|
149
|
+
maxOutputTokens: options.maxOutputTokens,
|
|
150
|
+
})
|
|
151
|
+
: null;
|
|
152
|
+
|
|
153
|
+
// A request cap at or above the complete model window leaves no valid input
|
|
154
|
+
// allocation. Reject it before creating the memory runtime so an impossible
|
|
155
|
+
// request cannot write state or reach the provider.
|
|
156
|
+
if (
|
|
157
|
+
modelCapabilities !== null &&
|
|
158
|
+
modelCapabilities.requestMaxOutputTokens !== null &&
|
|
159
|
+
modelCapabilities.requestMaxOutputTokens >=
|
|
160
|
+
modelCapabilities.contextWindowTokens
|
|
161
|
+
) {
|
|
162
|
+
const error = new RangeError(
|
|
163
|
+
"The configured output-token cap must be smaller than the model context window",
|
|
164
|
+
);
|
|
165
|
+
error.code = "CC_MODEL_OUTPUT_BUDGET_EXCEEDS_WINDOW";
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
|
|
86
169
|
const runtime = createCliContextMemoryRuntime({
|
|
87
170
|
env: options.contextMemoryEnv || process.env,
|
|
88
171
|
sessionId,
|
|
@@ -91,11 +174,17 @@ export async function prepareCanonicalProviderContext(
|
|
|
91
174
|
? { memoryFilePath: options.contextMemoryFilePath }
|
|
92
175
|
: {}),
|
|
93
176
|
});
|
|
94
|
-
if (!runtime.decision.canonical ||
|
|
95
|
-
return {
|
|
177
|
+
if (!runtime.decision.canonical || !planningRequested) {
|
|
178
|
+
return {
|
|
179
|
+
messages,
|
|
180
|
+
plan: null,
|
|
181
|
+
recall: null,
|
|
182
|
+
decision: runtime.decision,
|
|
183
|
+
modelCapabilities: null,
|
|
184
|
+
};
|
|
96
185
|
}
|
|
97
186
|
|
|
98
|
-
const
|
|
187
|
+
const candidateProvider = semanticCandidateProvider(options);
|
|
99
188
|
const sink = String(options.contextMemorySink || `provider.${provider}`);
|
|
100
189
|
const scopeAdmissions = defaultAdmissions(sessionId, options);
|
|
101
190
|
const lastUser = [...messages]
|
|
@@ -105,15 +194,28 @@ export async function prepareCanonicalProviderContext(
|
|
|
105
194
|
typeof lastUser?.content === "string" && lastUser.content.trim()
|
|
106
195
|
? lastUser.content.trim().slice(0, 32 * 1024)
|
|
107
196
|
: "*";
|
|
197
|
+
const recallLimit = Math.max(
|
|
198
|
+
1,
|
|
199
|
+
Math.min(32, Number(options.contextMemoryRecallLimit) || 12),
|
|
200
|
+
);
|
|
201
|
+
const semanticCandidates = await resolveSemanticCandidates({
|
|
202
|
+
provider: candidateProvider,
|
|
203
|
+
sessionId,
|
|
204
|
+
query,
|
|
205
|
+
sink,
|
|
206
|
+
scopeAdmissions,
|
|
207
|
+
limit: recallLimit,
|
|
208
|
+
});
|
|
108
209
|
const recall = await runtime.kernel.recallMemory({
|
|
109
210
|
query,
|
|
110
211
|
sink,
|
|
111
212
|
scopeAdmissions,
|
|
112
|
-
limit:
|
|
213
|
+
limit: recallLimit,
|
|
113
214
|
tokenBudget: Math.max(
|
|
114
215
|
1,
|
|
115
216
|
Math.min(32_768, Number(options.contextMemoryRecallTokens) || 4096),
|
|
116
217
|
),
|
|
218
|
+
...(semanticCandidates === undefined ? {} : { semanticCandidates }),
|
|
117
219
|
});
|
|
118
220
|
const messageItems = messagesToContextItems(messages, {
|
|
119
221
|
sessionId,
|
|
@@ -130,15 +232,10 @@ export async function prepareCanonicalProviderContext(
|
|
|
130
232
|
{ sessionId, sink },
|
|
131
233
|
);
|
|
132
234
|
const items = [...messageItems, ...memoryItems, ...toolItems];
|
|
133
|
-
const modelWindowTokens =
|
|
134
|
-
1024,
|
|
135
|
-
Number(options.contextMemoryModelWindowTokens) ||
|
|
136
|
-
getContextWindow(options.model, provider) ||
|
|
137
|
-
128 * 1024,
|
|
138
|
-
);
|
|
235
|
+
const modelWindowTokens = modelCapabilities.contextWindowTokens;
|
|
139
236
|
const reservedOutputTokens = Math.min(
|
|
140
237
|
modelWindowTokens - 1,
|
|
141
|
-
Math.max(256,
|
|
238
|
+
Math.max(256, modelCapabilities.plannedOutputReserveTokens),
|
|
142
239
|
);
|
|
143
240
|
const safetyMarginTokens = Math.min(
|
|
144
241
|
modelWindowTokens - reservedOutputTokens - 1,
|
|
@@ -185,10 +282,11 @@ export async function prepareCanonicalProviderContext(
|
|
|
185
282
|
policyVersion: String(
|
|
186
283
|
options.contextMemoryPolicyVersion || "cli-provider-v1",
|
|
187
284
|
),
|
|
188
|
-
modelProfile:
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
285
|
+
modelProfile:
|
|
286
|
+
`${modelCapabilities.profileId}:${modelCapabilities.digest}`.slice(
|
|
287
|
+
0,
|
|
288
|
+
256,
|
|
289
|
+
),
|
|
192
290
|
sessionHead,
|
|
193
291
|
memoryRevision: recall.memoryRevision,
|
|
194
292
|
});
|
|
@@ -202,6 +300,7 @@ export async function prepareCanonicalProviderContext(
|
|
|
202
300
|
plan,
|
|
203
301
|
recall,
|
|
204
302
|
decision: runtime.decision,
|
|
303
|
+
modelCapabilities,
|
|
205
304
|
};
|
|
206
305
|
}
|
|
207
306
|
|