chainlesschain 0.166.46 → 0.166.47
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 +3 -1
- package/src/assets/web-panel/assets/{AIOps-Cp8KiMmv.js → AIOps-CDpT0WXV.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-B4d9BGsm.js → ActionButton-BNfUljWx.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Cf9yXTkv.js → Analytics-C9323DEx.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-40UkmxtP.js → AppLayout-CRrjb2db.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-Ckkb4oOA.js → Artifacts-Db-DGqJS.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-Dnf569k5.js → Audit-CJdHRJ0W.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CA6bLem4.js → BackgroundAgents-_RSCnTYs.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-ChQU0I_Q.js → Backup-8GFQi-dM.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BHeZXnNN.js → BaseInput-C87NtgUZ.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DcFVYB2E.js → Chat-DcTMWS8G.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-5ZDPTW_H.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-2PDbejv2.js → Checkbox-DM9EmYee.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DJBn1RAu.js → Codegen-M2YqDRNN.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CPRq7n6y.js → Col-oB1LLxyf.js} +1 -1
- package/src/assets/web-panel/assets/{Community-axvINFMi.js → Community-TcVZK5tF.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-_OX4Qbe0.js → Compact-XKmq-3K_.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DWAkvzRL.js → Compliance-C6CBiDRy.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CUIJ25oj.js → Cowork-Dz9CGqXH.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-nR0m7H3_.js → Cron-CxJDgDVL.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CgTLXzh_.js → Crosschain-DMP0JsaQ.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BllzRB6Q.js → DID-I5IQeogb.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-C9f0IIBN.js → Dashboard-BfLW2MXj.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BkahetiO.js → Dropdown-BK8EjAlh.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-rartVC-k.js → EmailListRenderer-C3iqSv5I.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-BJmBzpW6.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DgUdFvw1.js → FamilyGuardDashboard-T19rnqm-.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-oFpIQU6g.js → Federation-CozrbPMy.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BUH5xlyP.js → FormItemContext-k1dCLNNJ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-ilRa-ueg.js → GenericCardRenderer-DbaW_Jvt.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DlHHSF8j.js → Git-CQHRyEIt.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-yQiiXIWe.js → Governance-BMJYZgMy.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BUDRVGOP.js → Inference-B7mpNU7V.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-BaGyIoN1.js → KnowledgeGraph-Br0Blg6B.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-C1cO6zE0.js → Logs-HIdk0S6M.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-_z_Iaoes.js → MarkdownRenderer-HxeocBHy.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-CM8cGL0K.js → Marketplace-Bkfq69UP.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CDqAMU0U.js → McpTools-dtmx0bHO.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-CfB0-Ofv.js → Memory-CrRlOuEf.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BL18ytvB.js → MobileBridge-D4ZIZiAH.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-PIyyxbuJ.js → MobileProjects-C90Rw7GE.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BTTrFCol.js → Mtc-CC6k_uh4.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-JHZn037c.js → MtcAudit-T_CUIYUy.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-CMf9NEdB.js → Multisig-N_e0RRWk.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Dhk3qaus.js → NLProgramming-Iq3VzEv0.js} +1 -1
- package/src/assets/web-panel/assets/Notes-B5sKJUJt.js +7 -0
- package/src/assets/web-panel/assets/{NotificationSettings-gxdaVEit.js → NotificationSettings-K8UVp8qQ.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-BWNyM-6m.js +1 -0
- package/src/assets/web-panel/assets/{Organization-CzvHcDNO.js → Organization-DMO1NJxI.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Dclx30Vv.js → Overflow-BBY6b31Z.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CM0Wm9vZ.js → P2P-DmsL0y0v.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-fYmQzmTA.js → PdhVaultBrowser-C65AX_RY.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-B_oATenG.js → Permissions-CWcpRtWa.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CptiVBh5.js → PersonalDataHub--ZNDIdsn.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-DkHzgyyI.js → Pipeline-DCdj5NGb.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DzZvwcKh.js → Privacy-BRKu7Q3E.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CzkCs-5G.js → ProjectInit-BJ7ozIAb.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BB8dcxRD.js → ProjectSettings-B2cVLiXW.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-B7PW9CFY.js → Projects-Ce9r_W-p.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Tfx-ti1V.js → Providers-BDespvGZ.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-EvWlNhfX.js → QrScannerModal-BUNO4fDU.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CUspgbNC.js → QuickAsk-D2TUqeBV.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-COY2g77J.js → Recommend-BNNQPHBH.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BzMBU6E6.js → RemoteSession-D2t1V_Cm.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-RtYRF4YP.js → Reputation-DVK5hEqI.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Bva3l9Lc.js → Row-BB9RTwmE.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BhjzLvW3.js → RssFeed-DmEO7liZ.js} +2 -2
- package/src/assets/web-panel/assets/{Search-BYzT2PTR.js → Search-UwEYjnDB.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Bcl4-KTv.js → Security-DebqSsMp.js} +4 -4
- package/src/assets/web-panel/assets/{Services-BRRa4A0f.js → Services-CuuPts3C.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DYQ016qy.js → Skeleton-DbWpmbgf.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CAUKL9JA.js → Skills-BaK7SxzT.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BTyUqfuD.js → Sla-BFHv51Jb.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CUjMihrs.js → SpeechSettings-B9b1R6uK.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CvfOSupr.js → SyncSettings-BnO0CN02.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-EvjNXrWH.js → Tasks-Dy01Vq49.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-wPAp0EoM.js → Templates-BCy2AMHc.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CP0D-q9Q.js → Tenant-4Tx9y_Y1.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CQ0f2iFg.js → Terminal-CPOoUH8J.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-D3JrGSPb.js → TimelineRenderer-C85GlJzu.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-yXf2PPp9.js → Tokens-_xneFBGF.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DfmMOoZ2.js → Trigger-BizG4rTr.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BTCyMgf1.js → Trust-Dh8EIn3n.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DKCwIBHi.js → UkeySign-C5NWoHWQ.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CQpDSzLO.js → VideoEditing-0YfrySL6.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CyFrzC3K.js → Wallet-BZVH8Ags.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-D6Nr_1kd.js → WebAuthn-kNofa6vm.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-CgR9tNrB.js → WorkflowEditor-BNO34_j0.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CRG_IeyP.js → chat-ifQ2FlwD.js} +1 -1
- package/src/assets/web-panel/assets/{colors-MdE3TStI.js → colors-1TL8H6EH.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-B0LRuiNV.js → compact-item-DBfRjs_T.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B_V5fjcX.js → createContext-Bs6V4iBf.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BHnbnuYL.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DSL-c_hr.js → hasIn-Bz6LMY_0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE7bSYmW.js → index--WvT2Il3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBwBZwio.js → index-84mi5rsv.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsAEd-Do.js → index-B5SJCUZ7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdHMc9LQ.js → index-B6RClMZl.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3iW-mhn.js → index-BB1Af7Fv.js} +1 -1
- package/src/assets/web-panel/assets/{index-C67dPW0L.js → index-BQL_tldd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BpwGsAA-.js → index-BXJXMaZe.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZICtYJ0.js → index-BhPDhmvN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbZZ7P_c.js → index-BiZ7Nz5-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Didyuq2Z.js → index-BoCTDcn6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BNhWoD6d.js → index-BxqC3LiO.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRRY44XP.js → index-C6c0j-Ki.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3pJBTvo.js → index-C7d6QlfR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdplnAS9.js → index-C9QYxq61.js} +1 -1
- package/src/assets/web-panel/assets/{index-CPYshcic.js → index-CBh48_Mh.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkN53KiJ.js → index-CNKHoXWI.js} +1 -1
- package/src/assets/web-panel/assets/{index-OBhlHSMN.js → index-CXVBQ82k.js} +3 -3
- package/src/assets/web-panel/assets/{index-DtOTppk8.js → index-CXtiLagi.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNytQuFq.js → index-Cn7EIWmI.js} +1 -1
- package/src/assets/web-panel/assets/index-CsRz9-ZH.js +1 -0
- package/src/assets/web-panel/assets/{index-BIDCNwy6.js → index-CtB45Hok.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQAsL19t.js → index-Cu_V6ZJH.js} +1 -1
- package/src/assets/web-panel/assets/{index-c8OqO3rq.js → index-Cykt9BbN.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bq8-2Ibv.js → index-DDhy4eCS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXMeisJK.js → index-DEPPzM8I.js} +1 -1
- package/src/assets/web-panel/assets/{index-BD0w-888.js → index-DMVktlxG.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVDi4rS9.js → index-DOww5Qny.js} +1 -1
- package/src/assets/web-panel/assets/{index-Tg3yl8wc.js → index-DWPp-d07.js} +1 -1
- package/src/assets/web-panel/assets/index-DnjMFf3m.js +1 -0
- package/src/assets/web-panel/assets/{index-DVgTf7CZ.js → index-DvM2xBUA.js} +1 -1
- package/src/assets/web-panel/assets/{index-SmQfEHjp.js → index-EK3XtMxA.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5dqieYX.js → index-XJIV7HEw.js} +1 -1
- package/src/assets/web-panel/assets/{index-0200QxC4.js → index-cNwsev6n.js} +1 -1
- package/src/assets/web-panel/assets/{index-C-aKWR2v.js → index-f_7L9GvP.js} +1 -1
- package/src/assets/web-panel/assets/{index-KaSejHjf.js → index-lUL3bD2z.js} +1 -1
- package/src/assets/web-panel/assets/{index-CS3bOhV7.js → index-pOUFfRdN.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEOAZm5j.js → index-rGhS02f8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMm8tO2X.js → index-vHtnQsnV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHp1nSur.js → index-vb1XIxEB.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-P8SBN6Di.js → initDefaultProps-DpRIjwTt.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BubbjUT_.js → motion-CG4_9o-Z.js} +1 -1
- package/src/assets/web-panel/assets/{move-Chcykv0I.js → move-Dku1fXtf.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DyiYuGDu.js → mtc-parser-BvAVeX-3.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Rdwb_Neb.js → omit-DFu0x78D.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CCr0MYHl.js → pickAttrs-CmI-FNcK.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-B1ZXz3bb.js → placementArrow-CGERYewB.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BGEdwej6.js → responsiveObserve-D7G8bF5J.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CpnsUMaT.js → slide-B2sXwWXy.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-C7x-TVp_.js → statusUtils-DI5yh0n3.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CC5k_791.js → styleChecker-deGJ5dp_.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BpZFKsJW.js → useFlexGapSupport-OqHBXEmi.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CVq5HySy.js → useFs-Dqgx0Qv_.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BGkdLryu.js → usePersonalDataHub-Be-lveh2.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-uLtOUEK-.js → vnode-CFxB876W.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BfVC9iUs.js → zoom-BFOYrl4e.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 +130 -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 +13 -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 +4 -0
- 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-supervisor.js +194 -47
- package/src/lib/codex-app-server-adapter.js +81 -27
- package/src/lib/context-memory-kernel/durable-memory-port.js +31 -8
- package/src/lib/context-memory-kernel/provider-context.js +53 -19
- package/src/lib/deferred-question-context.js +122 -0
- package/src/lib/eval/evidence.js +202 -64
- package/src/lib/eval/plugin-suite.js +917 -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/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 +133 -44
- 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/EvolutionSettings-BqpG3XHV.js +0 -1
- package/src/assets/web-panel/assets/Notes-6F8EarNN.js +0 -7
- package/src/assets/web-panel/assets/OrderTableRenderer-gVgXQWdc.js +0 -1
- 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
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { canonicalDigest } from "@chainlesschain/context-memory-kernel";
|
|
2
|
+
import {
|
|
3
|
+
CONTEXT_WINDOWS,
|
|
4
|
+
DOCUMENTED_OPENAI_MODELS,
|
|
5
|
+
LEGACY_MODEL_PROVIDERS,
|
|
6
|
+
MODEL_CAPABILITY_CATALOG_VERSION,
|
|
7
|
+
} from "./model-context-catalog.js";
|
|
8
|
+
import { mergeProviderOptions } from "./provider-options.js";
|
|
9
|
+
|
|
10
|
+
const PROFILE_SCHEMA = "chainlesschain.model-capability-profile/v1";
|
|
11
|
+
const MAX_CONTEXT_WINDOW_TOKENS = 16_777_216;
|
|
12
|
+
const CHAT_COMPLETIONS_PROVIDERS = new Set([
|
|
13
|
+
"openai",
|
|
14
|
+
"deepseek",
|
|
15
|
+
"dashscope",
|
|
16
|
+
"mistral",
|
|
17
|
+
"gemini",
|
|
18
|
+
"volcengine",
|
|
19
|
+
]);
|
|
20
|
+
|
|
21
|
+
function optionalIdentity(value, field) {
|
|
22
|
+
if (value == null || value === "") return null;
|
|
23
|
+
if (typeof value !== "string" || value.length > 256) {
|
|
24
|
+
throw new TypeError(`${field} must be a string of at most 256 characters`);
|
|
25
|
+
}
|
|
26
|
+
if (/\p{Cc}/u.test(value)) {
|
|
27
|
+
throw new TypeError(`${field} must not contain control characters`);
|
|
28
|
+
}
|
|
29
|
+
// Provider/model identity is exact, just like the request transport. Do not
|
|
30
|
+
// certify an alias by trimming or changing the case of an actual request id.
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function optionalPositiveInteger(
|
|
35
|
+
value,
|
|
36
|
+
field,
|
|
37
|
+
{ min = 1, max = Number.MAX_SAFE_INTEGER } = {},
|
|
38
|
+
) {
|
|
39
|
+
if (value == null) return null;
|
|
40
|
+
const normalized =
|
|
41
|
+
typeof value === "string" && /^\d+$/u.test(value.trim())
|
|
42
|
+
? Number(value.trim())
|
|
43
|
+
: value;
|
|
44
|
+
if (
|
|
45
|
+
typeof normalized !== "number" ||
|
|
46
|
+
!Number.isSafeInteger(normalized) ||
|
|
47
|
+
normalized < min ||
|
|
48
|
+
normalized > max
|
|
49
|
+
) {
|
|
50
|
+
throw new RangeError(
|
|
51
|
+
`${field} must be an integer between ${min} and ${max}`,
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
return normalized;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function deepFreeze(value) {
|
|
58
|
+
for (const child of Object.values(value)) {
|
|
59
|
+
if (child && typeof child === "object") deepFreeze(child);
|
|
60
|
+
}
|
|
61
|
+
return Object.freeze(value);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function isOfficialOpenAIBaseUrl(baseUrl) {
|
|
65
|
+
if (baseUrl == null || baseUrl === "") return true;
|
|
66
|
+
if (typeof baseUrl !== "string") {
|
|
67
|
+
throw new TypeError("baseUrl must be a string when provided");
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
// Deliberately excludes credentials, paths other than /v1, query/hash
|
|
71
|
+
// decorations and non-default ports. Never return or hash the input URL.
|
|
72
|
+
return (
|
|
73
|
+
baseUrl === baseUrl.trim() &&
|
|
74
|
+
new URL(baseUrl).href === "https://api.openai.com/v1"
|
|
75
|
+
);
|
|
76
|
+
} catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Describe the output cap the existing agent transport actually sends.
|
|
83
|
+
* This does not add a cap to Chat Completions/Ollama or select a new model.
|
|
84
|
+
* The planner may apply its own minimum reserve and reject an impossible
|
|
85
|
+
* input/output allocation; no context-window clipping happens here.
|
|
86
|
+
*/
|
|
87
|
+
export function resolveAgentOutputBudget({
|
|
88
|
+
provider,
|
|
89
|
+
model,
|
|
90
|
+
maxOutputTokens,
|
|
91
|
+
} = {}) {
|
|
92
|
+
const requested = optionalPositiveInteger(maxOutputTokens, "maxOutputTokens");
|
|
93
|
+
if (provider === "anthropic") {
|
|
94
|
+
const effectiveModel = model || "claude-sonnet-4-6";
|
|
95
|
+
const { maxTokens } = mergeProviderOptions("anthropic", effectiveModel);
|
|
96
|
+
const defaultCap = maxTokens || 8192;
|
|
97
|
+
const requestMaxOutputTokens =
|
|
98
|
+
requested === null ? defaultCap : Math.min(defaultCap, requested);
|
|
99
|
+
return Object.freeze({
|
|
100
|
+
requestMaxOutputTokens,
|
|
101
|
+
plannedOutputReserveTokens: requestMaxOutputTokens,
|
|
102
|
+
outputReserveSource:
|
|
103
|
+
requested === null
|
|
104
|
+
? "anthropic-request-default"
|
|
105
|
+
: requested > defaultCap
|
|
106
|
+
? "anthropic-request-clamp"
|
|
107
|
+
: "explicit-request-cap",
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return Object.freeze({
|
|
111
|
+
requestMaxOutputTokens: requested,
|
|
112
|
+
plannedOutputReserveTokens: requested ?? 4096,
|
|
113
|
+
outputReserveSource:
|
|
114
|
+
requested === null ? "planning-fallback" : "explicit-request-cap",
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Pure, versioned diagnostics/planning projection. No provider discovery,
|
|
120
|
+
* credential loading, model calls or protocol negotiation is performed.
|
|
121
|
+
* `runtimeVerified:false` applies even to documented model specifications.
|
|
122
|
+
*/
|
|
123
|
+
export function resolveModelCapabilityProfile({
|
|
124
|
+
provider,
|
|
125
|
+
model,
|
|
126
|
+
baseUrl,
|
|
127
|
+
contextMemoryModelWindowTokens,
|
|
128
|
+
maxOutputTokens,
|
|
129
|
+
} = {}) {
|
|
130
|
+
const selectedProvider = optionalIdentity(provider, "provider");
|
|
131
|
+
const selectedModel = optionalIdentity(model, "model");
|
|
132
|
+
if (baseUrl != null && typeof baseUrl !== "string") {
|
|
133
|
+
throw new TypeError("baseUrl must be a string when provided");
|
|
134
|
+
}
|
|
135
|
+
const override = optionalPositiveInteger(
|
|
136
|
+
contextMemoryModelWindowTokens,
|
|
137
|
+
"contextMemoryModelWindowTokens",
|
|
138
|
+
{ min: 1024, max: MAX_CONTEXT_WINDOW_TOKENS },
|
|
139
|
+
);
|
|
140
|
+
const officialEndpoint =
|
|
141
|
+
selectedProvider === "openai" && isOfficialOpenAIBaseUrl(baseUrl);
|
|
142
|
+
const documented =
|
|
143
|
+
officialEndpoint &&
|
|
144
|
+
selectedModel &&
|
|
145
|
+
Object.hasOwn(DOCUMENTED_OPENAI_MODELS, selectedModel)
|
|
146
|
+
? DOCUMENTED_OPENAI_MODELS[selectedModel]
|
|
147
|
+
: null;
|
|
148
|
+
const legacyOwner =
|
|
149
|
+
selectedModel && Object.hasOwn(LEGACY_MODEL_PROVIDERS, selectedModel)
|
|
150
|
+
? LEGACY_MODEL_PROVIDERS[selectedModel]
|
|
151
|
+
: null;
|
|
152
|
+
let contextWindowTokens;
|
|
153
|
+
let windowSource;
|
|
154
|
+
let windowAssumed = true;
|
|
155
|
+
if (override !== null) {
|
|
156
|
+
contextWindowTokens = override;
|
|
157
|
+
windowSource = "explicit-override";
|
|
158
|
+
} else if (documented) {
|
|
159
|
+
contextWindowTokens = documented.contextWindowTokens;
|
|
160
|
+
windowSource = "official-model-docs";
|
|
161
|
+
windowAssumed = false;
|
|
162
|
+
} else if (
|
|
163
|
+
legacyOwner &&
|
|
164
|
+
(!selectedProvider || legacyOwner === selectedProvider)
|
|
165
|
+
) {
|
|
166
|
+
contextWindowTokens = CONTEXT_WINDOWS[selectedModel];
|
|
167
|
+
windowSource = selectedProvider
|
|
168
|
+
? "legacy-catalog"
|
|
169
|
+
: "legacy-catalog-unscoped";
|
|
170
|
+
} else if (
|
|
171
|
+
selectedProvider &&
|
|
172
|
+
Object.hasOwn(CONTEXT_WINDOWS._provider_defaults, selectedProvider)
|
|
173
|
+
) {
|
|
174
|
+
contextWindowTokens = CONTEXT_WINDOWS._provider_defaults[selectedProvider];
|
|
175
|
+
windowSource = "provider-default";
|
|
176
|
+
} else {
|
|
177
|
+
contextWindowTokens = 32768;
|
|
178
|
+
windowSource = "generic-default";
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const output = resolveAgentOutputBudget({
|
|
182
|
+
provider: selectedProvider,
|
|
183
|
+
model: selectedModel,
|
|
184
|
+
maxOutputTokens,
|
|
185
|
+
});
|
|
186
|
+
const runtimeProtocol =
|
|
187
|
+
selectedProvider === "ollama"
|
|
188
|
+
? "ollama-chat"
|
|
189
|
+
: selectedProvider === "anthropic"
|
|
190
|
+
? "anthropic-messages"
|
|
191
|
+
: selectedProvider === "openai" && documented?.requiresResponsesForTools
|
|
192
|
+
? "openai-responses"
|
|
193
|
+
: CHAT_COMPLETIONS_PROVIDERS.has(selectedProvider) || Boolean(baseUrl)
|
|
194
|
+
? "chat-completions"
|
|
195
|
+
: "unsupported";
|
|
196
|
+
const limitations = [
|
|
197
|
+
"Runtime execution, endpoint access and account entitlement have not been verified.",
|
|
198
|
+
];
|
|
199
|
+
if (windowSource === "explicit-override") {
|
|
200
|
+
limitations.push("The context window is operator-declared and unverified.");
|
|
201
|
+
} else if (windowAssumed) {
|
|
202
|
+
limitations.push(
|
|
203
|
+
"The context window is a legacy or fallback planning estimate, not a verified model limit.",
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
if (!selectedProvider) {
|
|
207
|
+
limitations.push(
|
|
208
|
+
"No provider was specified; an unscoped legacy model lookup does not establish provider capabilities.",
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
if (legacyOwner && selectedProvider && legacyOwner !== selectedProvider) {
|
|
212
|
+
limitations.push(
|
|
213
|
+
"The model's legacy catalog entry belongs to another provider and was not applied.",
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
if (selectedProvider === "openai" && !officialEndpoint) {
|
|
217
|
+
limitations.push(
|
|
218
|
+
"Official OpenAI model specifications are not applied to a custom endpoint.",
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
if (output.requestMaxOutputTokens === null) {
|
|
222
|
+
limitations.push(
|
|
223
|
+
"The output reserve is a planning fallback, not an output cap sent to the provider.",
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
if (documented?.requiresResponsesForTools) {
|
|
227
|
+
limitations.push(
|
|
228
|
+
"Responses selection is based on the versioned catalog and has not been verified against this account at runtime.",
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
if (runtimeProtocol === "unsupported") {
|
|
232
|
+
limitations.push(
|
|
233
|
+
"No supported agent transport was resolved for this provider and endpoint configuration.",
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
if (
|
|
237
|
+
documented &&
|
|
238
|
+
output.requestMaxOutputTokens > documented.advertisedMaxOutputTokens
|
|
239
|
+
) {
|
|
240
|
+
limitations.push(
|
|
241
|
+
"The requested output cap exceeds the documented model maximum; the profile does not rewrite the request.",
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const identityDigest = canonicalDigest(
|
|
246
|
+
{
|
|
247
|
+
schema: PROFILE_SCHEMA,
|
|
248
|
+
provider: selectedProvider || "unknown",
|
|
249
|
+
model: selectedModel,
|
|
250
|
+
},
|
|
251
|
+
"chainlesschain.model-capability-identity/v1",
|
|
252
|
+
);
|
|
253
|
+
const profile = {
|
|
254
|
+
schema: PROFILE_SCHEMA,
|
|
255
|
+
catalogVersion: MODEL_CAPABILITY_CATALOG_VERSION,
|
|
256
|
+
profileId: `model-capability-v1:${identityDigest.slice(7, 39)}`,
|
|
257
|
+
provider: selectedProvider || "unknown",
|
|
258
|
+
model: selectedModel,
|
|
259
|
+
contextWindowTokens,
|
|
260
|
+
windowSource,
|
|
261
|
+
windowAssumed,
|
|
262
|
+
runtimeProtocol,
|
|
263
|
+
runtimeVerified: false,
|
|
264
|
+
...output,
|
|
265
|
+
advertisedMaxOutputTokens: documented?.advertisedMaxOutputTokens ?? null,
|
|
266
|
+
sources: documented ? [...documented.sources] : [],
|
|
267
|
+
limitations,
|
|
268
|
+
};
|
|
269
|
+
profile.digest = canonicalDigest(profile, PROFILE_SCHEMA);
|
|
270
|
+
return deepFreeze(profile);
|
|
271
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// Compatibility catalog: these legacy values are retained verbatim. They are
|
|
2
|
+
// planning assumptions, not recently verified provider capability guarantees.
|
|
3
|
+
export const CONTEXT_WINDOWS = Object.freeze({
|
|
4
|
+
"qwen2.5:7b": 32768,
|
|
5
|
+
"qwen2.5:14b": 32768,
|
|
6
|
+
"qwen2.5-coder:14b": 32768,
|
|
7
|
+
"qwen2:7b": 32768,
|
|
8
|
+
"llama3:8b": 8192,
|
|
9
|
+
"mistral:7b": 32768,
|
|
10
|
+
"codellama:7b": 16384,
|
|
11
|
+
"gpt-4o": 128000,
|
|
12
|
+
"gpt-4o-mini": 128000,
|
|
13
|
+
"gpt-4-turbo": 128000,
|
|
14
|
+
"gpt-3.5-turbo": 16385,
|
|
15
|
+
o1: 200000,
|
|
16
|
+
"claude-opus-4-6": 200000,
|
|
17
|
+
"claude-sonnet-4-6": 200000,
|
|
18
|
+
"claude-haiku-4-5-20251001": 200000,
|
|
19
|
+
"deepseek-chat": 64000,
|
|
20
|
+
"deepseek-coder": 64000,
|
|
21
|
+
"deepseek-reasoner": 64000,
|
|
22
|
+
"qwen-turbo": 131072,
|
|
23
|
+
"qwen-plus": 131072,
|
|
24
|
+
"qwen-max": 32768,
|
|
25
|
+
"gemini-2.0-flash": 1048576,
|
|
26
|
+
"gemini-2.0-pro": 1048576,
|
|
27
|
+
"gemini-1.5-flash": 1048576,
|
|
28
|
+
"moonshot-v1-auto": 131072,
|
|
29
|
+
"moonshot-v1-8k": 8192,
|
|
30
|
+
"moonshot-v1-32k": 32768,
|
|
31
|
+
"moonshot-v1-128k": 131072,
|
|
32
|
+
"doubao-seed-1-6-251015": 32768,
|
|
33
|
+
"doubao-seed-2-1-pro-260628": 32768,
|
|
34
|
+
_provider_defaults: Object.freeze({
|
|
35
|
+
ollama: 32768,
|
|
36
|
+
openai: 128000,
|
|
37
|
+
anthropic: 200000,
|
|
38
|
+
deepseek: 64000,
|
|
39
|
+
dashscope: 131072,
|
|
40
|
+
gemini: 1048576,
|
|
41
|
+
kimi: 131072,
|
|
42
|
+
volcengine: 32768,
|
|
43
|
+
minimax: 32768,
|
|
44
|
+
mistral: 32768,
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
export const MODEL_CAPABILITY_CATALOG_VERSION = "2026-09-13";
|
|
49
|
+
|
|
50
|
+
// Explicit ownership prevents a model name served by an unrelated provider
|
|
51
|
+
// from silently inheriting another provider's catalog window.
|
|
52
|
+
export const LEGACY_MODEL_PROVIDERS = Object.freeze({
|
|
53
|
+
"qwen2.5:7b": "ollama",
|
|
54
|
+
"qwen2.5:14b": "ollama",
|
|
55
|
+
"qwen2.5-coder:14b": "ollama",
|
|
56
|
+
"qwen2:7b": "ollama",
|
|
57
|
+
"llama3:8b": "ollama",
|
|
58
|
+
"mistral:7b": "ollama",
|
|
59
|
+
"codellama:7b": "ollama",
|
|
60
|
+
"gpt-4o": "openai",
|
|
61
|
+
"gpt-4o-mini": "openai",
|
|
62
|
+
"gpt-4-turbo": "openai",
|
|
63
|
+
"gpt-3.5-turbo": "openai",
|
|
64
|
+
o1: "openai",
|
|
65
|
+
"claude-opus-4-6": "anthropic",
|
|
66
|
+
"claude-sonnet-4-6": "anthropic",
|
|
67
|
+
"claude-haiku-4-5-20251001": "anthropic",
|
|
68
|
+
"deepseek-chat": "deepseek",
|
|
69
|
+
"deepseek-coder": "deepseek",
|
|
70
|
+
"deepseek-reasoner": "deepseek",
|
|
71
|
+
"qwen-turbo": "dashscope",
|
|
72
|
+
"qwen-plus": "dashscope",
|
|
73
|
+
"qwen-max": "dashscope",
|
|
74
|
+
"gemini-2.0-flash": "gemini",
|
|
75
|
+
"gemini-2.0-pro": "gemini",
|
|
76
|
+
"gemini-1.5-flash": "gemini",
|
|
77
|
+
"moonshot-v1-auto": "kimi",
|
|
78
|
+
"moonshot-v1-8k": "kimi",
|
|
79
|
+
"moonshot-v1-32k": "kimi",
|
|
80
|
+
"moonshot-v1-128k": "kimi",
|
|
81
|
+
"doubao-seed-1-6-251015": "volcengine",
|
|
82
|
+
"doubao-seed-2-1-pro-260628": "volcengine",
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
// Official pages reviewed on the catalog version date. These describe the
|
|
86
|
+
// named models, not endpoint access, account entitlement, or a live CLI run.
|
|
87
|
+
export const DOCUMENTED_OPENAI_MODELS = Object.freeze({
|
|
88
|
+
"gpt-4o": Object.freeze({
|
|
89
|
+
contextWindowTokens: 128000,
|
|
90
|
+
advertisedMaxOutputTokens: 16384,
|
|
91
|
+
requiresResponsesForTools: false,
|
|
92
|
+
sources: Object.freeze([
|
|
93
|
+
"https://developers.openai.com/api/docs/models/gpt-4o",
|
|
94
|
+
]),
|
|
95
|
+
}),
|
|
96
|
+
"gpt-6-astra": Object.freeze({
|
|
97
|
+
contextWindowTokens: 1050000,
|
|
98
|
+
advertisedMaxOutputTokens: 128000,
|
|
99
|
+
requiresResponsesForTools: true,
|
|
100
|
+
sources: Object.freeze([
|
|
101
|
+
"https://developers.openai.com/api/docs/models/gpt-6-astra",
|
|
102
|
+
"https://developers.openai.com/api/docs/guides/migrate-to-responses",
|
|
103
|
+
]),
|
|
104
|
+
}),
|
|
105
|
+
});
|
|
@@ -1,52 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
"qwen2.5-coder:14b": 32768,
|
|
5
|
-
"qwen2:7b": 32768,
|
|
6
|
-
"llama3:8b": 8192,
|
|
7
|
-
"mistral:7b": 32768,
|
|
8
|
-
"codellama:7b": 16384,
|
|
9
|
-
"gpt-4o": 128000,
|
|
10
|
-
"gpt-4o-mini": 128000,
|
|
11
|
-
"gpt-4-turbo": 128000,
|
|
12
|
-
"gpt-3.5-turbo": 16385,
|
|
13
|
-
o1: 200000,
|
|
14
|
-
"claude-opus-4-6": 200000,
|
|
15
|
-
"claude-sonnet-4-6": 200000,
|
|
16
|
-
"claude-haiku-4-5-20251001": 200000,
|
|
17
|
-
"deepseek-chat": 64000,
|
|
18
|
-
"deepseek-coder": 64000,
|
|
19
|
-
"deepseek-reasoner": 64000,
|
|
20
|
-
"qwen-turbo": 131072,
|
|
21
|
-
"qwen-plus": 131072,
|
|
22
|
-
"qwen-max": 32768,
|
|
23
|
-
"gemini-2.0-flash": 1048576,
|
|
24
|
-
"gemini-2.0-pro": 1048576,
|
|
25
|
-
"gemini-1.5-flash": 1048576,
|
|
26
|
-
"moonshot-v1-auto": 131072,
|
|
27
|
-
"moonshot-v1-8k": 8192,
|
|
28
|
-
"moonshot-v1-32k": 32768,
|
|
29
|
-
"moonshot-v1-128k": 131072,
|
|
30
|
-
"doubao-seed-1-6-251015": 32768,
|
|
31
|
-
"doubao-seed-2-1-pro-260628": 32768,
|
|
32
|
-
_provider_defaults: Object.freeze({
|
|
33
|
-
ollama: 32768,
|
|
34
|
-
openai: 128000,
|
|
35
|
-
anthropic: 200000,
|
|
36
|
-
deepseek: 64000,
|
|
37
|
-
dashscope: 131072,
|
|
38
|
-
gemini: 1048576,
|
|
39
|
-
kimi: 131072,
|
|
40
|
-
volcengine: 32768,
|
|
41
|
-
minimax: 32768,
|
|
42
|
-
mistral: 32768,
|
|
43
|
-
}),
|
|
44
|
-
});
|
|
1
|
+
import { resolveModelCapabilityProfile } from "./model-capabilities.js";
|
|
2
|
+
|
|
3
|
+
export { CONTEXT_WINDOWS } from "./model-context-catalog.js";
|
|
45
4
|
|
|
46
5
|
export function getContextWindow(model, provider) {
|
|
47
|
-
|
|
48
|
-
if (provider && CONTEXT_WINDOWS._provider_defaults[provider]) {
|
|
49
|
-
return CONTEXT_WINDOWS._provider_defaults[provider];
|
|
50
|
-
}
|
|
51
|
-
return 32768;
|
|
6
|
+
return resolveModelCapabilityProfile({ model, provider }).contextWindowTokens;
|
|
52
7
|
}
|