@theokit/sdk 4.24.0 → 4.25.0
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/dist/a2a/index.cjs +10 -171
- package/dist/a2a/index.cjs.map +1 -1
- package/dist/a2a/index.js +3 -170
- package/dist/a2a/index.js.map +1 -1
- package/dist/agent-factory-registry-UU46BUMU.cjs +16 -0
- package/dist/agent-factory-registry-UU46BUMU.cjs.map +1 -0
- package/dist/agent-factory-registry-ZVTABLEY.js +3 -0
- package/dist/agent-factory-registry-ZVTABLEY.js.map +1 -0
- package/dist/auth/index.cjs +63 -367
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.js +6 -342
- package/dist/auth/index.js.map +1 -1
- package/dist/batch-2FSD2UNL.cjs +244 -0
- package/dist/batch-2FSD2UNL.cjs.map +1 -0
- package/dist/batch-MR2HKYMS.js +241 -0
- package/dist/batch-MR2HKYMS.js.map +1 -0
- package/dist/chunk-2HRYBRD7.cjs +31 -0
- package/dist/chunk-2HRYBRD7.cjs.map +1 -0
- package/dist/chunk-2MF3IE2D.cjs +2863 -0
- package/dist/chunk-2MF3IE2D.cjs.map +1 -0
- package/dist/chunk-2ONFGMBV.js +6 -0
- package/dist/chunk-2ONFGMBV.js.map +1 -0
- package/dist/chunk-2SFBB54R.js +23 -0
- package/dist/chunk-2SFBB54R.js.map +1 -0
- package/dist/chunk-2XLKLVVR.js +18 -0
- package/dist/chunk-2XLKLVVR.js.map +1 -0
- package/dist/chunk-4HKMQEPX.js +458 -0
- package/dist/chunk-4HKMQEPX.js.map +1 -0
- package/dist/chunk-4SXHEZIV.cjs +240 -0
- package/dist/chunk-4SXHEZIV.cjs.map +1 -0
- package/dist/chunk-4VPXM6UU.js +10 -0
- package/dist/chunk-4VPXM6UU.js.map +1 -0
- package/dist/chunk-4WL52CXU.cjs +148 -0
- package/dist/chunk-4WL52CXU.cjs.map +1 -0
- package/dist/chunk-5NBUH3NO.js +39 -0
- package/dist/chunk-5NBUH3NO.js.map +1 -0
- package/dist/chunk-5PZMMF4H.js +43 -0
- package/dist/chunk-5PZMMF4H.js.map +1 -0
- package/dist/chunk-6CLRANZA.js +289 -0
- package/dist/chunk-6CLRANZA.js.map +1 -0
- package/dist/chunk-6JSIEDKL.cjs +121 -0
- package/dist/chunk-6JSIEDKL.cjs.map +1 -0
- package/dist/chunk-6M4ODB2V.cjs +145 -0
- package/dist/chunk-6M4ODB2V.cjs.map +1 -0
- package/dist/chunk-6X6ID4MO.js +20 -0
- package/dist/chunk-6X6ID4MO.js.map +1 -0
- package/dist/chunk-77FOZCOT.js +165 -0
- package/dist/chunk-77FOZCOT.js.map +1 -0
- package/dist/chunk-7AD3ZTZL.js +25 -0
- package/dist/chunk-7AD3ZTZL.js.map +1 -0
- package/dist/chunk-7GFX45DD.js +57 -0
- package/dist/chunk-7GFX45DD.js.map +1 -0
- package/dist/chunk-7RMWOMDB.cjs +460 -0
- package/dist/chunk-7RMWOMDB.cjs.map +1 -0
- package/dist/chunk-7S7KKUO6.cjs +45 -0
- package/dist/chunk-7S7KKUO6.cjs.map +1 -0
- package/dist/chunk-7W7ZWMLQ.js +99 -0
- package/dist/chunk-7W7ZWMLQ.js.map +1 -0
- package/dist/chunk-A44COQJJ.cjs +353 -0
- package/dist/chunk-A44COQJJ.cjs.map +1 -0
- package/dist/chunk-AKSBP7OO.js +185 -0
- package/dist/chunk-AKSBP7OO.js.map +1 -0
- package/dist/chunk-ANIZEWTU.cjs +196 -0
- package/dist/chunk-ANIZEWTU.cjs.map +1 -0
- package/dist/chunk-BEURCLDV.cjs +139 -0
- package/dist/chunk-BEURCLDV.cjs.map +1 -0
- package/dist/chunk-BFWPZMG7.js +379 -0
- package/dist/chunk-BFWPZMG7.js.map +1 -0
- package/dist/chunk-BUUUWQMB.cjs +34 -0
- package/dist/chunk-BUUUWQMB.cjs.map +1 -0
- package/dist/chunk-BV2MWEMV.cjs +26 -0
- package/dist/chunk-BV2MWEMV.cjs.map +1 -0
- package/dist/chunk-BWT67BI4.cjs +268 -0
- package/dist/chunk-BWT67BI4.cjs.map +1 -0
- package/dist/chunk-BXV2QUIC.js +191 -0
- package/dist/chunk-BXV2QUIC.js.map +1 -0
- package/dist/chunk-C6Y6CWYD.cjs +44 -0
- package/dist/chunk-C6Y6CWYD.cjs.map +1 -0
- package/dist/chunk-C7PICHRF.cjs +68 -0
- package/dist/chunk-C7PICHRF.cjs.map +1 -0
- package/dist/chunk-CAH3G4IS.js +13 -0
- package/dist/chunk-CAH3G4IS.js.map +1 -0
- package/dist/chunk-CJ6YJ2L3.cjs +10590 -0
- package/dist/chunk-CJ6YJ2L3.cjs.map +1 -0
- package/dist/chunk-D42XHI4O.cjs +565 -0
- package/dist/chunk-D42XHI4O.cjs.map +1 -0
- package/dist/chunk-DGRZNMTU.js +104 -0
- package/dist/chunk-DGRZNMTU.js.map +1 -0
- package/dist/chunk-DUK5WMKJ.js +71 -0
- package/dist/chunk-DUK5WMKJ.js.map +1 -0
- package/dist/chunk-EEZ7CFMM.js +14 -0
- package/dist/chunk-EEZ7CFMM.js.map +1 -0
- package/dist/chunk-EPYZOCOL.cjs +82 -0
- package/dist/chunk-EPYZOCOL.cjs.map +1 -0
- package/dist/chunk-EVADEGM7.cjs +168 -0
- package/dist/chunk-EVADEGM7.cjs.map +1 -0
- package/dist/chunk-F3XVLFLM.js +10573 -0
- package/dist/chunk-F3XVLFLM.js.map +1 -0
- package/dist/chunk-FD2UT76F.js +3 -0
- package/dist/chunk-FD2UT76F.js.map +1 -0
- package/dist/chunk-FV3YEMQ7.js +179 -0
- package/dist/chunk-FV3YEMQ7.js.map +1 -0
- package/dist/chunk-G2F67XUR.cjs +184 -0
- package/dist/chunk-G2F67XUR.cjs.map +1 -0
- package/dist/chunk-G6GO6BXD.js +994 -0
- package/dist/chunk-G6GO6BXD.js.map +1 -0
- package/dist/chunk-GIW4L6HY.cjs +27 -0
- package/dist/chunk-GIW4L6HY.cjs.map +1 -0
- package/dist/chunk-GJAGKFTR.js +74 -0
- package/dist/chunk-GJAGKFTR.js.map +1 -0
- package/dist/chunk-HFPGOTVF.cjs +324 -0
- package/dist/chunk-HFPGOTVF.cjs.map +1 -0
- package/dist/chunk-HRA3CPGG.js +486 -0
- package/dist/chunk-HRA3CPGG.js.map +1 -0
- package/dist/chunk-HZQEDNF6.js +66 -0
- package/dist/chunk-HZQEDNF6.js.map +1 -0
- package/dist/chunk-IT3PWBW4.cjs +19 -0
- package/dist/chunk-IT3PWBW4.cjs.map +1 -0
- package/dist/chunk-JD74LN7R.cjs +171 -0
- package/dist/chunk-JD74LN7R.cjs.map +1 -0
- package/dist/chunk-JTFYYKDT.js +135 -0
- package/dist/chunk-JTFYYKDT.js.map +1 -0
- package/dist/chunk-K2BQQ445.js +30 -0
- package/dist/chunk-K2BQQ445.js.map +1 -0
- package/dist/chunk-KAP4GJHO.js +546 -0
- package/dist/chunk-KAP4GJHO.js.map +1 -0
- package/dist/chunk-KIO7QFIV.cjs +223 -0
- package/dist/chunk-KIO7QFIV.cjs.map +1 -0
- package/dist/chunk-KSKU6JY6.cjs +71 -0
- package/dist/chunk-KSKU6JY6.cjs.map +1 -0
- package/dist/chunk-LSLPF6OI.cjs +192 -0
- package/dist/chunk-LSLPF6OI.cjs.map +1 -0
- package/dist/chunk-LU7VALW5.js +312 -0
- package/dist/chunk-LU7VALW5.js.map +1 -0
- package/dist/chunk-LUSXDZPV.cjs +296 -0
- package/dist/chunk-LUSXDZPV.cjs.map +1 -0
- package/dist/chunk-M72RJVPC.js +69 -0
- package/dist/chunk-M72RJVPC.js.map +1 -0
- package/dist/chunk-MQLCZ4HJ.cjs +1010 -0
- package/dist/chunk-MQLCZ4HJ.cjs.map +1 -0
- package/dist/chunk-MUUQ2WFJ.cjs +4 -0
- package/dist/chunk-MUUQ2WFJ.cjs.map +1 -0
- package/dist/chunk-MZ5ZRORA.cjs +496 -0
- package/dist/chunk-MZ5ZRORA.cjs.map +1 -0
- package/dist/chunk-N24XBYNX.cjs +140 -0
- package/dist/chunk-N24XBYNX.cjs.map +1 -0
- package/dist/chunk-NINIJCHU.cjs +23 -0
- package/dist/chunk-NINIJCHU.cjs.map +1 -0
- package/dist/chunk-NRSH7RJY.js +2841 -0
- package/dist/chunk-NRSH7RJY.js.map +1 -0
- package/dist/chunk-OIYQBUW4.cjs +111 -0
- package/dist/chunk-OIYQBUW4.cjs.map +1 -0
- package/dist/chunk-PNVDQL5Y.cjs +15 -0
- package/dist/chunk-PNVDQL5Y.cjs.map +1 -0
- package/dist/chunk-POQT2OIF.js +214 -0
- package/dist/chunk-POQT2OIF.js.map +1 -0
- package/dist/chunk-QUTUJ6P6.cjs +76 -0
- package/dist/chunk-QUTUJ6P6.cjs.map +1 -0
- package/dist/chunk-S2BBRVQX.js +68 -0
- package/dist/chunk-S2BBRVQX.js.map +1 -0
- package/dist/chunk-S5RCBTSF.js +145 -0
- package/dist/chunk-S5RCBTSF.js.map +1 -0
- package/dist/chunk-S7OEXQMI.cjs +136 -0
- package/dist/chunk-S7OEXQMI.cjs.map +1 -0
- package/dist/chunk-SKWVAQAY.js +129 -0
- package/dist/chunk-SKWVAQAY.js.map +1 -0
- package/dist/chunk-SQLZ7ONU.js +152 -0
- package/dist/chunk-SQLZ7ONU.js.map +1 -0
- package/dist/chunk-TIZ4TS5V.cjs +72 -0
- package/dist/chunk-TIZ4TS5V.cjs.map +1 -0
- package/dist/chunk-TQKCU7CL.js +142 -0
- package/dist/chunk-TQKCU7CL.js.map +1 -0
- package/dist/chunk-U54XCYG3.js +116 -0
- package/dist/chunk-U54XCYG3.js.map +1 -0
- package/dist/chunk-U6QGZHPN.js +29 -0
- package/dist/chunk-U6QGZHPN.js.map +1 -0
- package/dist/chunk-UCFONJBG.js +79 -0
- package/dist/chunk-UCFONJBG.js.map +1 -0
- package/dist/chunk-UJ7IQJAG.js +141 -0
- package/dist/chunk-UJ7IQJAG.js.map +1 -0
- package/dist/chunk-UVNG67DG.js +253 -0
- package/dist/chunk-UVNG67DG.js.map +1 -0
- package/dist/chunk-V4XRLPEF.js +25 -0
- package/dist/chunk-V4XRLPEF.js.map +1 -0
- package/dist/chunk-VJ26EKGJ.cjs +28 -0
- package/dist/chunk-VJ26EKGJ.cjs.map +1 -0
- package/dist/chunk-VK7MAV65.cjs +90 -0
- package/dist/chunk-VK7MAV65.cjs.map +1 -0
- package/dist/chunk-VYCKUKPA.cjs +106 -0
- package/dist/chunk-VYCKUKPA.cjs.map +1 -0
- package/dist/chunk-VYHJZVL5.cjs +29 -0
- package/dist/chunk-VYHJZVL5.cjs.map +1 -0
- package/dist/chunk-WA3FO4R7.js +155 -0
- package/dist/chunk-WA3FO4R7.js.map +1 -0
- package/dist/chunk-WJVHMTKB.cjs +12 -0
- package/dist/chunk-WJVHMTKB.cjs.map +1 -0
- package/dist/chunk-WLKFWQSJ.js +333 -0
- package/dist/chunk-WLKFWQSJ.js.map +1 -0
- package/dist/chunk-WPZTYOUX.cjs +59 -0
- package/dist/chunk-WPZTYOUX.cjs.map +1 -0
- package/dist/chunk-X2FR4OIT.js +27 -0
- package/dist/chunk-X2FR4OIT.js.map +1 -0
- package/dist/chunk-XIG2IE3L.js +134 -0
- package/dist/chunk-XIG2IE3L.js.map +1 -0
- package/dist/chunk-YLQQX5W2.cjs +20 -0
- package/dist/chunk-YLQQX5W2.cjs.map +1 -0
- package/dist/chunk-YPEPCZHF.cjs +147 -0
- package/dist/chunk-YPEPCZHF.cjs.map +1 -0
- package/dist/chunk-YPQF26X7.cjs +8 -0
- package/dist/chunk-YPQF26X7.cjs.map +1 -0
- package/dist/chunk-YU6KON2I.cjs +160 -0
- package/dist/chunk-YU6KON2I.cjs.map +1 -0
- package/dist/chunk-Z2OC3UIW.cjs +388 -0
- package/dist/chunk-Z2OC3UIW.cjs.map +1 -0
- package/dist/chunk-ZZWTY3RX.js +230 -0
- package/dist/chunk-ZZWTY3RX.js.map +1 -0
- package/dist/compact-session-OO2GD76G.js +17 -0
- package/dist/compact-session-OO2GD76G.js.map +1 -0
- package/dist/compact-session-OO7NVWPB.cjs +54 -0
- package/dist/compact-session-OO7NVWPB.cjs.map +1 -0
- package/dist/compaction.cjs +54 -303
- package/dist/compaction.cjs.map +1 -1
- package/dist/compaction.js +3 -292
- package/dist/compaction.js.map +1 -1
- package/dist/concurrency.cjs +9 -81
- package/dist/concurrency.cjs.map +1 -1
- package/dist/concurrency.js +5 -80
- package/dist/concurrency.js.map +1 -1
- package/dist/context-GWANQLX4.js +5 -0
- package/dist/context-GWANQLX4.js.map +1 -0
- package/dist/context-KNWVTZSY.cjs +22 -0
- package/dist/context-KNWVTZSY.cjs.map +1 -0
- package/dist/cron.cjs +44 -20676
- package/dist/cron.cjs.map +1 -1
- package/dist/cron.js +38 -20676
- package/dist/cron.js.map +1 -1
- package/dist/errors.cjs +78 -470
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js +2 -455
- package/dist/errors.js.map +1 -1
- package/dist/eval.cjs +72 -20411
- package/dist/eval.cjs.map +1 -1
- package/dist/eval.js +59 -20402
- package/dist/eval.js.map +1 -1
- package/dist/executor-ORJS5GV2.js +981 -0
- package/dist/executor-ORJS5GV2.js.map +1 -0
- package/dist/executor-Y4MKPIUD.cjs +985 -0
- package/dist/executor-Y4MKPIUD.cjs.map +1 -0
- package/dist/filesystem/index.cjs +7 -112
- package/dist/filesystem/index.cjs.map +1 -1
- package/dist/filesystem/index.js +4 -109
- package/dist/filesystem/index.js.map +1 -1
- package/dist/fork-agent-RSV4E3EA.js +61 -0
- package/dist/fork-agent-RSV4E3EA.js.map +1 -0
- package/dist/fork-agent-Y2IK2RYU.cjs +64 -0
- package/dist/fork-agent-Y2IK2RYU.cjs.map +1 -0
- package/dist/fs-session-store-KAUQYSGI.cjs +17 -0
- package/dist/fs-session-store-KAUQYSGI.cjs.map +1 -0
- package/dist/fs-session-store-ZKB5NN37.js +8 -0
- package/dist/fs-session-store-ZKB5NN37.js.map +1 -0
- package/dist/generate-object-H3RNAM6S.cjs +20 -0
- package/dist/generate-object-H3RNAM6S.cjs.map +1 -0
- package/dist/generate-object-YJPDV5BS.js +7 -0
- package/dist/generate-object-YJPDV5BS.js.map +1 -0
- package/dist/index-manager-CB6I7XFQ.cjs +19 -0
- package/dist/index-manager-CB6I7XFQ.cjs.map +1 -0
- package/dist/index-manager-L27Q3QAC.js +10 -0
- package/dist/index-manager-L27Q3QAC.js.map +1 -0
- package/dist/index.cjs +371 -22888
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +92 -22713
- package/dist/index.js.map +1 -1
- package/dist/inject-session-6MJUSGZP.cjs +27 -0
- package/dist/inject-session-6MJUSGZP.cjs.map +1 -0
- package/dist/inject-session-KOFHS5K3.js +25 -0
- package/dist/inject-session-KOFHS5K3.js.map +1 -0
- package/dist/internal/persistence/index.cjs +93 -508
- package/dist/internal/persistence/index.cjs.map +1 -1
- package/dist/internal/persistence/index.js +11 -489
- package/dist/internal/persistence/index.js.map +1 -1
- package/dist/internal/security/index.cjs +44 -361
- package/dist/internal/security/index.cjs.map +1 -1
- package/dist/internal/security/index.js +4 -355
- package/dist/internal/security/index.js.map +1 -1
- package/dist/judge-call-7CF7D334.cjs +95 -0
- package/dist/judge-call-7CF7D334.cjs.map +1 -0
- package/dist/judge-call-VIMNK5TA.js +92 -0
- package/dist/judge-call-VIMNK5TA.js.map +1 -0
- package/dist/models.cjs +24 -919
- package/dist/models.cjs.map +1 -1
- package/dist/models.js +11 -907
- package/dist/models.js.map +1 -1
- package/dist/oauth-transaction-store-7CKHPQRN.cjs +32 -0
- package/dist/oauth-transaction-store-7CKHPQRN.cjs.map +1 -0
- package/dist/oauth-transaction-store-W74I6EFD.js +3 -0
- package/dist/oauth-transaction-store-W74I6EFD.js.map +1 -0
- package/dist/path-safety.cjs +31 -200
- package/dist/path-safety.cjs.map +1 -1
- package/dist/path-safety.js +3 -197
- package/dist/path-safety.js.map +1 -1
- package/dist/persistence.cjs +73 -393
- package/dist/persistence.cjs.map +1 -1
- package/dist/persistence.js +9 -381
- package/dist/persistence.js.map +1 -1
- package/dist/project.cjs +8 -112
- package/dist/project.cjs.map +1 -1
- package/dist/project.js +6 -110
- package/dist/project.js.map +1 -1
- package/dist/registry-34IWWDQQ.js +9 -0
- package/dist/registry-34IWWDQQ.js.map +1 -0
- package/dist/registry-APYDISL6.cjs +46 -0
- package/dist/registry-APYDISL6.cjs.map +1 -0
- package/dist/retry.cjs +7 -87
- package/dist/retry.cjs.map +1 -1
- package/dist/retry.js +3 -90
- package/dist/retry.js.map +1 -1
- package/dist/run-to-completion-J73I6IY4.cjs +48 -0
- package/dist/run-to-completion-J73I6IY4.cjs.map +1 -0
- package/dist/run-to-completion-JDPIUKSH.js +3 -0
- package/dist/run-to-completion-JDPIUKSH.js.map +1 -0
- package/dist/run-until-2PX4QBHZ.js +168 -0
- package/dist/run-until-2PX4QBHZ.js.map +1 -0
- package/dist/run-until-DB3LVGZS.cjs +171 -0
- package/dist/run-until-DB3LVGZS.cjs.map +1 -0
- package/dist/sandbox/index.cjs +35 -337
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.js +7 -323
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sanitize/index.cjs +5 -112
- package/dist/sanitize/index.cjs.map +1 -1
- package/dist/sanitize/index.js +1 -114
- package/dist/sanitize/index.js.map +1 -1
- package/dist/server/auth/index.cjs +35 -175
- package/dist/server/auth/index.cjs.map +1 -1
- package/dist/server/auth/index.js +7 -161
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/errors-envelope.cjs +17 -328
- package/dist/server/errors-envelope.cjs.map +1 -1
- package/dist/server/errors-envelope.js +4 -317
- package/dist/server/errors-envelope.js.map +1 -1
- package/dist/session-transcript-LPNZR3YS.cjs +46 -0
- package/dist/session-transcript-LPNZR3YS.cjs.map +1 -0
- package/dist/session-transcript-T7LGJUGW.js +5 -0
- package/dist/session-transcript-T7LGJUGW.js.map +1 -0
- package/dist/skills.cjs +12 -280
- package/dist/skills.cjs.map +1 -1
- package/dist/skills.js +4 -282
- package/dist/skills.js.map +1 -1
- package/dist/stream-object-QEQJJDTI.cjs +20 -0
- package/dist/stream-object-QEQJJDTI.cjs.map +1 -0
- package/dist/stream-object-WUQSSRY2.js +7 -0
- package/dist/stream-object-WUQSSRY2.js.map +1 -0
- package/dist/stream-to-completion-DFJ5T3BK.js +30 -0
- package/dist/stream-to-completion-DFJ5T3BK.js.map +1 -0
- package/dist/stream-to-completion-H2MHISSK.cjs +32 -0
- package/dist/stream-to-completion-H2MHISSK.cjs.map +1 -0
- package/dist/subagents.cjs +2 -8
- package/dist/subagents.cjs.map +1 -1
- package/dist/subagents.js +1 -7
- package/dist/subagents.js.map +1 -1
- package/dist/subscription/index.cjs +4 -17
- package/dist/subscription/index.cjs.map +1 -1
- package/dist/subscription/index.js +3 -16
- package/dist/subscription/index.js.map +1 -1
- package/dist/task-store.cjs +16 -258
- package/dist/task-store.cjs.map +1 -1
- package/dist/task-store.js +4 -259
- package/dist/task-store.js.map +1 -1
- package/dist/workflow.cjs +71 -2797
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.js +8 -2812
- package/dist/workflow.js.map +1 -1
- package/package.json +1 -1
package/dist/models.cjs
CHANGED
|
@@ -1,185 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
|
|
3
|
+
var chunkKSKU6JY6_cjs = require('./chunk-KSKU6JY6.cjs');
|
|
4
|
+
var chunkVYHJZVL5_cjs = require('./chunk-VYHJZVL5.cjs');
|
|
5
|
+
var chunkD42XHI4O_cjs = require('./chunk-D42XHI4O.cjs');
|
|
6
|
+
require('./chunk-HFPGOTVF.cjs');
|
|
7
|
+
require('./chunk-C6Y6CWYD.cjs');
|
|
8
|
+
require('./chunk-A44COQJJ.cjs');
|
|
9
|
+
require('./chunk-BEURCLDV.cjs');
|
|
7
10
|
var crypto = require('crypto');
|
|
11
|
+
var fs = require('fs');
|
|
8
12
|
var os = require('os');
|
|
9
|
-
|
|
10
|
-
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
11
|
-
// src/internal/providers/catalog-loader.ts
|
|
12
|
-
|
|
13
|
-
// src/internal/global-singleton.ts
|
|
14
|
-
function globalSingleton(key, create) {
|
|
15
|
-
const g = globalThis;
|
|
16
|
-
const sym = Symbol.for(key);
|
|
17
|
-
if (g[sym] === void 0) g[sym] = create();
|
|
18
|
-
return g[sym];
|
|
19
|
-
}
|
|
20
|
-
var MODALITIES = ["text", "audio", "image", "video", "pdf"];
|
|
21
|
-
var costSchema = zod.z.object({
|
|
22
|
-
/** USD per 1M tokens (models.dev convention). */
|
|
23
|
-
input: zod.z.number().nonnegative(),
|
|
24
|
-
output: zod.z.number().nonnegative(),
|
|
25
|
-
cache_read: zod.z.number().nonnegative().optional(),
|
|
26
|
-
cache_write: zod.z.number().nonnegative().optional()
|
|
27
|
-
}).loose();
|
|
28
|
-
var limitSchema = zod.z.object({
|
|
29
|
-
context: zod.z.number().positive(),
|
|
30
|
-
input: zod.z.number().positive().optional(),
|
|
31
|
-
output: zod.z.number().positive().optional()
|
|
32
|
-
}).loose();
|
|
33
|
-
var modalitiesSchema = zod.z.object({
|
|
34
|
-
input: zod.z.array(zod.z.enum(MODALITIES)).optional(),
|
|
35
|
-
output: zod.z.array(zod.z.enum(MODALITIES)).optional()
|
|
36
|
-
}).loose();
|
|
37
|
-
var catalogModelSchema = zod.z.object({
|
|
38
|
-
name: zod.z.string().optional(),
|
|
39
|
-
release_date: zod.z.string().optional(),
|
|
40
|
-
attachment: zod.z.boolean().optional(),
|
|
41
|
-
reasoning: zod.z.boolean().optional(),
|
|
42
|
-
temperature: zod.z.boolean().optional(),
|
|
43
|
-
tool_call: zod.z.boolean().optional(),
|
|
44
|
-
/** theokit extension — maps to ModelCapabilities.supportsStructuredOutput. */
|
|
45
|
-
structured_output: zod.z.boolean().optional(),
|
|
46
|
-
/** theokit extension — maps to ModelCapabilities.supportsCacheControl. */
|
|
47
|
-
cache_control: zod.z.boolean().optional(),
|
|
48
|
-
cost: costSchema.optional(),
|
|
49
|
-
limit: limitSchema.optional(),
|
|
50
|
-
modalities: modalitiesSchema.optional(),
|
|
51
|
-
status: zod.z.enum(["alpha", "beta", "deprecated"]).optional()
|
|
52
|
-
}).loose();
|
|
53
|
-
|
|
54
|
-
// src/internal/providers/registry.ts
|
|
55
|
-
var REGISTRY = globalSingleton(
|
|
56
|
-
"theokit-sdk.providers.registry",
|
|
57
|
-
() => /* @__PURE__ */ new Map()
|
|
58
|
-
);
|
|
59
|
-
var ALIASES = globalSingleton("theokit-sdk.providers.aliases", () => /* @__PURE__ */ new Map());
|
|
60
|
-
function registerProvider(profile) {
|
|
61
|
-
if (REGISTRY.has(profile.name)) {
|
|
62
|
-
process.stderr.write(`[theokit-sdk] Provider "${profile.name}" overridden by user plugin.
|
|
63
|
-
`);
|
|
64
|
-
}
|
|
65
|
-
REGISTRY.set(profile.name, profile);
|
|
66
|
-
for (const alias of profile.aliases ?? []) {
|
|
67
|
-
const previous = ALIASES.get(alias);
|
|
68
|
-
if (previous !== void 0 && previous !== profile.name) {
|
|
69
|
-
process.stderr.write(
|
|
70
|
-
`[theokit-sdk] Alias "${alias}" collision: was "${previous}", now "${profile.name}".
|
|
71
|
-
`
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
ALIASES.set(alias, profile.name);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
function getProviderProfile(name) {
|
|
78
|
-
const canonical = ALIASES.get(name) ?? name;
|
|
79
|
-
return REGISTRY.get(canonical);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// src/internal/providers/catalog-loader.ts
|
|
83
|
-
var __dirname_resolved = path.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('models.cjs', document.baseURI).href))));
|
|
84
|
-
var modelInfoIndex = globalSingleton(
|
|
85
|
-
"theokit-sdk.providers.model-info-index",
|
|
86
|
-
() => /* @__PURE__ */ new Map()
|
|
87
|
-
);
|
|
88
|
-
var patchedModelKeys = globalSingleton(
|
|
89
|
-
"theokit-sdk.providers.model-info-patched",
|
|
90
|
-
() => /* @__PURE__ */ new Set()
|
|
91
|
-
);
|
|
92
|
-
var indexState = globalSingleton("theokit-sdk.providers.model-info-loaded", () => ({
|
|
93
|
-
loaded: false
|
|
94
|
-
}));
|
|
95
|
-
function getCatalogModelInfo(key) {
|
|
96
|
-
ensureModelIndexLoaded();
|
|
97
|
-
return modelInfoIndex.get(key);
|
|
98
|
-
}
|
|
99
|
-
function patchModelInfo(key, model) {
|
|
100
|
-
ensureModelIndexLoaded();
|
|
101
|
-
const existing = modelInfoIndex.get(key);
|
|
102
|
-
modelInfoIndex.set(key, existing === void 0 ? model : { ...existing, ...model });
|
|
103
|
-
patchedModelKeys.add(key);
|
|
104
|
-
}
|
|
105
|
-
function ensureModelIndexLoaded() {
|
|
106
|
-
if (indexState.loaded) return;
|
|
107
|
-
indexState.loaded = true;
|
|
108
|
-
try {
|
|
109
|
-
const catalog = loadProviderCatalog();
|
|
110
|
-
for (const entry of Object.values(catalog)) {
|
|
111
|
-
indexEntryModels(entry);
|
|
112
|
-
}
|
|
113
|
-
} catch (err) {
|
|
114
|
-
process.stderr.write(
|
|
115
|
-
`[theokit-sdk] WARN: provider catalog unavailable (${err.message}) \u2014 per-model data disabled
|
|
116
|
-
`
|
|
117
|
-
);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
function indexEntryModels(entry) {
|
|
121
|
-
if (entry.models === void 0 || typeof entry.models !== "object") return;
|
|
122
|
-
for (const [modelId, raw] of Object.entries(entry.models)) {
|
|
123
|
-
const parsed = catalogModelSchema.safeParse(raw);
|
|
124
|
-
if (!parsed.success) {
|
|
125
|
-
process.stderr.write(
|
|
126
|
-
`[theokit-sdk] WARN: Skipping malformed catalog model "${entry.id}/${modelId}": ${parsed.error.issues[0]?.message ?? "invalid"}
|
|
127
|
-
`
|
|
128
|
-
);
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
modelInfoIndex.set(`${entry.id}/${modelId}`, parsed.data);
|
|
132
|
-
for (const alias of entry.aliases ?? []) {
|
|
133
|
-
const key = `${alias}/${modelId}`;
|
|
134
|
-
if (!modelInfoIndex.has(key)) modelInfoIndex.set(key, parsed.data);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
function validateEntry(raw) {
|
|
139
|
-
if (typeof raw.id !== "string" || typeof raw.displayName !== "string" || typeof raw.apiMode !== "string" || typeof raw.authType !== "string" || typeof raw.baseUrl !== "string" || !Array.isArray(raw.envVars) || !Array.isArray(raw.fallbackModels) || raw.capabilities == null || typeof raw.capabilities !== "object") {
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
return raw;
|
|
143
|
-
}
|
|
144
|
-
function loadProviderCatalog(opts) {
|
|
145
|
-
const catalogPath = path.join(__dirname_resolved, "provider-catalog.json");
|
|
146
|
-
const rawText = fs.readFileSync(catalogPath, "utf-8");
|
|
147
|
-
let entries = JSON.parse(rawText);
|
|
148
|
-
const result = {};
|
|
149
|
-
for (const raw of entries) {
|
|
150
|
-
const validated = validateEntry(raw);
|
|
151
|
-
if (validated === null) {
|
|
152
|
-
process.stderr.write(
|
|
153
|
-
`[theokit-sdk] WARN: Skipping malformed catalog entry: ${JSON.stringify(raw).slice(0, 100)}
|
|
154
|
-
`
|
|
155
|
-
);
|
|
156
|
-
continue;
|
|
157
|
-
}
|
|
158
|
-
result[validated.id] = validated;
|
|
159
|
-
}
|
|
160
|
-
return result;
|
|
161
|
-
}
|
|
162
|
-
function registerCatalogProviders(opts) {
|
|
163
|
-
const catalog = loadProviderCatalog();
|
|
164
|
-
for (const entry of Object.values(catalog)) {
|
|
165
|
-
if (getProviderProfile(entry.id) !== void 0) continue;
|
|
166
|
-
if (entry.aliases?.some((a) => getProviderProfile(a) !== void 0)) continue;
|
|
167
|
-
const profile = {
|
|
168
|
-
name: entry.id,
|
|
169
|
-
apiMode: entry.apiMode,
|
|
170
|
-
authType: entry.authType,
|
|
171
|
-
baseUrl: entry.baseUrl,
|
|
172
|
-
envVars: entry.envVars,
|
|
173
|
-
fallbackModels: entry.fallbackModels,
|
|
174
|
-
displayName: entry.displayName,
|
|
175
|
-
aliases: entry.aliases,
|
|
176
|
-
modelsUrl: entry.modelsUrl,
|
|
177
|
-
hostname: entry.hostname,
|
|
178
|
-
extraHeaders: entry.extraHeaders
|
|
179
|
-
};
|
|
180
|
-
registerProvider(profile);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
13
|
+
var path = require('path');
|
|
183
14
|
|
|
184
15
|
// src/internal/llm/model-capabilities.ts
|
|
185
16
|
var CONSERVATIVE_DEFAULTS = {
|
|
@@ -203,11 +34,11 @@ function capsFromCatalog(m) {
|
|
|
203
34
|
}
|
|
204
35
|
function resolveModelCapabilities(modelId) {
|
|
205
36
|
const bare = stripVariantSuffix(stripRoutingPrefix(modelId));
|
|
206
|
-
const fromIndex = getCatalogModelInfo(bare);
|
|
37
|
+
const fromIndex = chunkD42XHI4O_cjs.getCatalogModelInfo(bare);
|
|
207
38
|
if (fromIndex !== void 0) return capsFromCatalog(fromIndex);
|
|
208
39
|
const withVendor = inferVendorPrefix(bare);
|
|
209
40
|
if (withVendor !== bare) {
|
|
210
|
-
const vendored = getCatalogModelInfo(withVendor);
|
|
41
|
+
const vendored = chunkD42XHI4O_cjs.getCatalogModelInfo(withVendor);
|
|
211
42
|
if (vendored !== void 0) return capsFromCatalog(vendored);
|
|
212
43
|
}
|
|
213
44
|
return CONSERVATIVE_DEFAULTS;
|
|
@@ -230,30 +61,6 @@ function inferVendorPrefix(bare) {
|
|
|
230
61
|
return bare;
|
|
231
62
|
}
|
|
232
63
|
|
|
233
|
-
// src/internal/llm/model-identifier.ts
|
|
234
|
-
var PROVIDER_ALIASES = {
|
|
235
|
-
"llama-cpp": "llamacpp",
|
|
236
|
-
"llama.cpp": "llamacpp",
|
|
237
|
-
"lm-studio": "lmstudio",
|
|
238
|
-
lm_studio: "lmstudio"
|
|
239
|
-
};
|
|
240
|
-
function parseModelId(modelId) {
|
|
241
|
-
if (modelId === void 0 || modelId.length === 0) {
|
|
242
|
-
return { provider: void 0, name: "" };
|
|
243
|
-
}
|
|
244
|
-
const slash = modelId.indexOf("/");
|
|
245
|
-
if (slash <= 0 || slash === modelId.length - 1) {
|
|
246
|
-
return { provider: void 0, name: modelId };
|
|
247
|
-
}
|
|
248
|
-
const rawProvider = modelId.slice(0, slash).trim().toLowerCase();
|
|
249
|
-
const name = modelId.slice(slash + 1).trim();
|
|
250
|
-
if (rawProvider.length === 0 || name.length === 0) {
|
|
251
|
-
return { provider: void 0, name: modelId };
|
|
252
|
-
}
|
|
253
|
-
const canonical = PROVIDER_ALIASES[rawProvider] ?? rawProvider;
|
|
254
|
-
return { provider: canonical, name };
|
|
255
|
-
}
|
|
256
|
-
|
|
257
64
|
// src/internal/llm/model-option.ts
|
|
258
65
|
var ACRONYMS = /* @__PURE__ */ new Set(["gpt", "ai", "hd", "ui", "api", "sdk", "llm", "xl"]);
|
|
259
66
|
function prettyToken(token) {
|
|
@@ -261,7 +68,7 @@ function prettyToken(token) {
|
|
|
261
68
|
return token.charAt(0).toUpperCase() + token.slice(1);
|
|
262
69
|
}
|
|
263
70
|
function humanizeModelName(modelId) {
|
|
264
|
-
const { name } = parseModelId(modelId);
|
|
71
|
+
const { name } = chunkVYHJZVL5_cjs.parseModelId(modelId);
|
|
265
72
|
if (name.length === 0) return "";
|
|
266
73
|
const colon = name.indexOf(":");
|
|
267
74
|
const base = (colon >= 0 ? name.slice(0, colon) : name).replace(/\/+$/, "");
|
|
@@ -276,714 +83,9 @@ function toModelOption(modelId) {
|
|
|
276
83
|
return {
|
|
277
84
|
value: modelId,
|
|
278
85
|
label: humanizeModelName(modelId),
|
|
279
|
-
provider: parseModelId(modelId).provider
|
|
280
|
-
};
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// src/errors.ts
|
|
284
|
-
var TheokitAgentError = class extends Error {
|
|
285
|
-
name = "TheokitAgentError";
|
|
286
|
-
isRetryable;
|
|
287
|
-
code;
|
|
288
|
-
protoErrorCode;
|
|
289
|
-
metadata;
|
|
290
|
-
constructor(message, options = {}) {
|
|
291
|
-
super(message, options.cause !== void 0 ? { cause: options.cause } : void 0);
|
|
292
|
-
this.isRetryable = options.isRetryable ?? false;
|
|
293
|
-
if (options.code !== void 0) this.code = options.code;
|
|
294
|
-
if (options.protoErrorCode !== void 0) this.protoErrorCode = options.protoErrorCode;
|
|
295
|
-
if (options.metadata !== void 0) this.metadata = options.metadata;
|
|
296
|
-
}
|
|
297
|
-
};
|
|
298
|
-
var AuthenticationError = class extends TheokitAgentError {
|
|
299
|
-
name = "AuthenticationError";
|
|
300
|
-
constructor(message, options = {}) {
|
|
301
|
-
super(message, { ...options, isRetryable: false });
|
|
302
|
-
}
|
|
303
|
-
};
|
|
304
|
-
var ConfigurationError = class extends TheokitAgentError {
|
|
305
|
-
name = "ConfigurationError";
|
|
306
|
-
constructor(message, options = {}) {
|
|
307
|
-
super(message, { ...options, isRetryable: false });
|
|
308
|
-
}
|
|
309
|
-
};
|
|
310
|
-
function isTransientError(err) {
|
|
311
|
-
return err instanceof TheokitAgentError && err.isRetryable === true;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// src/internal/runtime/retry/with-retry.ts
|
|
315
|
-
function defaultSleep(ms, signal) {
|
|
316
|
-
return new Promise((resolve, reject) => {
|
|
317
|
-
if (signal?.aborted) {
|
|
318
|
-
reject(signal.reason instanceof Error ? signal.reason : new Error("withRetry: aborted"));
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
|
-
const timer = setTimeout(() => {
|
|
322
|
-
signal?.removeEventListener("abort", onAbort);
|
|
323
|
-
resolve();
|
|
324
|
-
}, ms);
|
|
325
|
-
function onAbort() {
|
|
326
|
-
clearTimeout(timer);
|
|
327
|
-
reject(signal?.reason instanceof Error ? signal.reason : new Error("withRetry: aborted"));
|
|
328
|
-
}
|
|
329
|
-
signal?.addEventListener("abort", onAbort, { once: true });
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
function resolveRetryOptions(options) {
|
|
333
|
-
const retries = options?.retries ?? 3;
|
|
334
|
-
if (!Number.isInteger(retries) || retries < 0) {
|
|
335
|
-
throw new ConfigurationError(
|
|
336
|
-
`withRetry: retries must be a non-negative integer, got ${retries}`,
|
|
337
|
-
{ code: "invalid_retry_config" }
|
|
338
|
-
);
|
|
339
|
-
}
|
|
340
|
-
return {
|
|
341
|
-
retries,
|
|
342
|
-
isRetryable: options?.isRetryable ?? isTransientError,
|
|
343
|
-
initialDelayMs: options?.initialDelayMs ?? 100,
|
|
344
|
-
maxDelayMs: options?.maxDelayMs ?? 3e4,
|
|
345
|
-
backoffMultiplier: options?.backoffMultiplier ?? 2,
|
|
346
|
-
rng: options?.rng ?? Math.random,
|
|
347
|
-
sleep: options?.sleep ?? defaultSleep,
|
|
348
|
-
signal: options?.signal
|
|
349
|
-
};
|
|
350
|
-
}
|
|
351
|
-
function backoffMs(cfg, attempt) {
|
|
352
|
-
const ceiling = Math.min(cfg.maxDelayMs, cfg.initialDelayMs * cfg.backoffMultiplier ** attempt);
|
|
353
|
-
return Math.floor(cfg.rng() * ceiling);
|
|
354
|
-
}
|
|
355
|
-
async function withRetry(fn, options) {
|
|
356
|
-
const cfg = resolveRetryOptions(options);
|
|
357
|
-
let attempt = 0;
|
|
358
|
-
for (; ; ) {
|
|
359
|
-
try {
|
|
360
|
-
return await fn();
|
|
361
|
-
} catch (err) {
|
|
362
|
-
if (attempt >= cfg.retries || !cfg.isRetryable(err)) throw err;
|
|
363
|
-
await cfg.sleep(backoffMs(cfg, attempt), cfg.signal);
|
|
364
|
-
attempt += 1;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
// src/retry.ts
|
|
370
|
-
var Retry = class {
|
|
371
|
-
constructor() {
|
|
372
|
-
}
|
|
373
|
-
static create(fn, options) {
|
|
374
|
-
return withRetry(fn, options);
|
|
375
|
-
}
|
|
376
|
-
};
|
|
377
|
-
|
|
378
|
-
// src/internal/providers/builtin/anthropic.ts
|
|
379
|
-
var ANTHROPIC = {
|
|
380
|
-
name: "anthropic",
|
|
381
|
-
apiMode: "anthropic_messages",
|
|
382
|
-
envVars: ["ANTHROPIC_API_KEY"],
|
|
383
|
-
authType: "api_key",
|
|
384
|
-
baseUrl: "https://api.anthropic.com",
|
|
385
|
-
modelsUrl: "https://api.anthropic.com/v1/models",
|
|
386
|
-
hostname: "api.anthropic.com",
|
|
387
|
-
fallbackModels: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"],
|
|
388
|
-
// M45 — the Anthropic beta-features header (interleaved thinking + fine-grained tool streaming). An
|
|
389
|
-
// Anthropic API constant, adapted verbatim from OpenCode's anthropic plugin (MIT © 2025 opencode). The
|
|
390
|
-
// SANCTIONED behavior delta of M45 (ADR D4) — consumed by the anthropic transport's extraHeaders wiring.
|
|
391
|
-
extraHeaders: {
|
|
392
|
-
"anthropic-beta": "interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"
|
|
393
|
-
}
|
|
394
|
-
};
|
|
395
|
-
|
|
396
|
-
// src/internal/providers/builtin/bedrock.ts
|
|
397
|
-
var BEDROCK = {
|
|
398
|
-
name: "bedrock",
|
|
399
|
-
apiMode: "bedrock_anthropic",
|
|
400
|
-
envVars: ["AWS_BEARER_TOKEN_BEDROCK"],
|
|
401
|
-
authType: "aws_bearer",
|
|
402
|
-
baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com",
|
|
403
|
-
modelsUrl: void 0,
|
|
404
|
-
hostname: "bedrock-runtime.amazonaws.com",
|
|
405
|
-
fallbackModels: [
|
|
406
|
-
"bedrock/us.anthropic.claude-sonnet-4-5-v1:0",
|
|
407
|
-
"bedrock/us.anthropic.claude-opus-4-7-v1:0",
|
|
408
|
-
"bedrock/global.anthropic.claude-haiku-4-5-v1:0"
|
|
409
|
-
]
|
|
410
|
-
};
|
|
411
|
-
|
|
412
|
-
// src/internal/providers/builtin/openai-compatible.ts
|
|
413
|
-
function openAiCompatibleProfile(p) {
|
|
414
|
-
return {
|
|
415
|
-
apiMode: "chat_completions",
|
|
416
|
-
authType: "api_key",
|
|
417
|
-
fallbackModels: [],
|
|
418
|
-
...p
|
|
419
|
-
};
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
// src/internal/providers/builtin/cerebras.ts
|
|
423
|
-
var CEREBRAS = openAiCompatibleProfile({
|
|
424
|
-
name: "cerebras",
|
|
425
|
-
baseUrl: "https://api.cerebras.ai/v1",
|
|
426
|
-
envVars: ["CEREBRAS_API_KEY"],
|
|
427
|
-
fallbackModels: ["gpt-oss-120b", "zai-glm-4.7"],
|
|
428
|
-
extraHeaders: { "X-Cerebras-3rd-Party-Integration": "theokit" },
|
|
429
|
-
hostname: "api.cerebras.ai"
|
|
430
|
-
});
|
|
431
|
-
|
|
432
|
-
// src/internal/providers/builtin/cohere.ts
|
|
433
|
-
var COHERE = openAiCompatibleProfile({
|
|
434
|
-
name: "cohere",
|
|
435
|
-
baseUrl: "https://api.cohere.ai/compatibility/v1",
|
|
436
|
-
envVars: ["COHERE_API_KEY", "CO_API_KEY"],
|
|
437
|
-
fallbackModels: ["command-a-03-2025"],
|
|
438
|
-
hostname: "api.cohere.ai"
|
|
439
|
-
});
|
|
440
|
-
|
|
441
|
-
// src/internal/providers/builtin/deepinfra.ts
|
|
442
|
-
var DEEPINFRA = openAiCompatibleProfile({
|
|
443
|
-
name: "deepinfra",
|
|
444
|
-
baseUrl: "https://api.deepinfra.com/v1/openai",
|
|
445
|
-
envVars: ["DEEPINFRA_API_KEY"],
|
|
446
|
-
fallbackModels: ["Qwen/Qwen3-32B"],
|
|
447
|
-
hostname: "api.deepinfra.com"
|
|
448
|
-
});
|
|
449
|
-
|
|
450
|
-
// src/internal/providers/builtin/gemini.ts
|
|
451
|
-
var GEMINI = {
|
|
452
|
-
name: "gemini",
|
|
453
|
-
apiMode: "chat_completions",
|
|
454
|
-
envVars: ["OPENROUTER_API_KEY"],
|
|
455
|
-
authType: "api_key",
|
|
456
|
-
baseUrl: "https://openrouter.ai/api",
|
|
457
|
-
hostname: "openrouter.ai",
|
|
458
|
-
fallbackModels: ["google/gemini-2.0-flash-001"]
|
|
459
|
-
};
|
|
460
|
-
|
|
461
|
-
// src/internal/providers/builtin/google.ts
|
|
462
|
-
var GOOGLE = openAiCompatibleProfile({
|
|
463
|
-
name: "google",
|
|
464
|
-
baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
|
|
465
|
-
envVars: ["GOOGLE_API_KEY", "GEMINI_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"],
|
|
466
|
-
fallbackModels: ["gemini-2.5-pro", "gemini-2.5-flash"],
|
|
467
|
-
hostname: "generativelanguage.googleapis.com"
|
|
468
|
-
});
|
|
469
|
-
|
|
470
|
-
// src/internal/providers/builtin/groq.ts
|
|
471
|
-
var GROQ = openAiCompatibleProfile({
|
|
472
|
-
name: "groq",
|
|
473
|
-
baseUrl: "https://api.groq.com/openai/v1",
|
|
474
|
-
envVars: ["GROQ_API_KEY"],
|
|
475
|
-
fallbackModels: ["llama-3.3-70b-versatile", "llama-3.1-8b-instant"],
|
|
476
|
-
hostname: "api.groq.com"
|
|
477
|
-
});
|
|
478
|
-
|
|
479
|
-
// src/internal/providers/builtin/llamacpp.ts
|
|
480
|
-
var LLAMACPP = {
|
|
481
|
-
name: "llamacpp",
|
|
482
|
-
aliases: ["llama-cpp", "llama.cpp"],
|
|
483
|
-
apiMode: "chat_completions",
|
|
484
|
-
envVars: ["LLAMACPP_API_KEY"],
|
|
485
|
-
authType: "none",
|
|
486
|
-
baseUrl: "http://localhost:8080",
|
|
487
|
-
modelsUrl: "http://localhost:8080/v1/models",
|
|
488
|
-
hostname: "localhost",
|
|
489
|
-
fallbackModels: ["loaded-model"]
|
|
490
|
-
};
|
|
491
|
-
|
|
492
|
-
// src/internal/providers/builtin/lmstudio.ts
|
|
493
|
-
var LMSTUDIO = {
|
|
494
|
-
name: "lmstudio",
|
|
495
|
-
aliases: ["lm-studio", "lm_studio"],
|
|
496
|
-
apiMode: "chat_completions",
|
|
497
|
-
envVars: ["LMSTUDIO_API_KEY"],
|
|
498
|
-
authType: "none",
|
|
499
|
-
baseUrl: "http://localhost:1234",
|
|
500
|
-
modelsUrl: "http://localhost:1234/v1/models",
|
|
501
|
-
hostname: "localhost",
|
|
502
|
-
fallbackModels: ["loaded-model"]
|
|
503
|
-
};
|
|
504
|
-
|
|
505
|
-
// src/internal/providers/builtin/mistral.ts
|
|
506
|
-
var MISTRAL = openAiCompatibleProfile({
|
|
507
|
-
name: "mistral",
|
|
508
|
-
baseUrl: "https://api.mistral.ai/v1",
|
|
509
|
-
envVars: ["MISTRAL_API_KEY"],
|
|
510
|
-
fallbackModels: ["mistral-large-latest", "codestral-latest"],
|
|
511
|
-
hostname: "api.mistral.ai"
|
|
512
|
-
});
|
|
513
|
-
|
|
514
|
-
// src/internal/providers/builtin/ollama.ts
|
|
515
|
-
var OLLAMA = {
|
|
516
|
-
name: "ollama",
|
|
517
|
-
apiMode: "chat_completions",
|
|
518
|
-
envVars: ["OLLAMA_API_KEY"],
|
|
519
|
-
authType: "none",
|
|
520
|
-
baseUrl: "http://localhost:11434",
|
|
521
|
-
modelsUrl: "http://localhost:11434/v1/models",
|
|
522
|
-
hostname: "localhost",
|
|
523
|
-
fallbackModels: ["llama3.2", "qwen2.5", "mistral"]
|
|
524
|
-
};
|
|
525
|
-
|
|
526
|
-
// src/internal/providers/builtin/openai.ts
|
|
527
|
-
var OPENAI = {
|
|
528
|
-
name: "openai",
|
|
529
|
-
apiMode: "chat_completions",
|
|
530
|
-
envVars: ["OPENAI_API_KEY"],
|
|
531
|
-
authType: "api_key",
|
|
532
|
-
baseUrl: "https://api.openai.com",
|
|
533
|
-
modelsUrl: "https://api.openai.com/v1/models",
|
|
534
|
-
hostname: "api.openai.com",
|
|
535
|
-
fallbackModels: ["gpt-4o", "gpt-4o-mini"]
|
|
536
|
-
};
|
|
537
|
-
function credentialHome(config, env = {}) {
|
|
538
|
-
const override = config.homeEnvVar !== void 0 ? env[config.homeEnvVar]?.trim() : void 0;
|
|
539
|
-
return override !== void 0 && override.length > 0 ? override : path.join(config.home, config.dirName);
|
|
540
|
-
}
|
|
541
|
-
function authFilePath(config, env = {}) {
|
|
542
|
-
return path.join(credentialHome(config, env), config.fileName);
|
|
543
|
-
}
|
|
544
|
-
var CredentialError = class extends AuthenticationError {
|
|
545
|
-
// Field, not an assignment in the constructor: `AuthenticationError.name` is `override readonly`
|
|
546
|
-
// (`errors.ts:174`), so `this.name = …` does not compile. Caught by `tsc`, not by vitest — the
|
|
547
|
-
// suite was green with the broken assignment because the transpiler strips the type.
|
|
548
|
-
name = "CredentialError";
|
|
549
|
-
};
|
|
550
|
-
var apiFileSchema = zod.z.object({
|
|
551
|
-
type: zod.z.literal("api").optional(),
|
|
552
|
-
provider: zod.z.string().min(1).optional(),
|
|
553
|
-
api_key: zod.z.string()
|
|
554
|
-
}).strict();
|
|
555
|
-
var oauthFileSchema = zod.z.object({
|
|
556
|
-
type: zod.z.literal("oauth"),
|
|
557
|
-
provider: zod.z.string().min(1),
|
|
558
|
-
access: zod.z.string().min(1),
|
|
559
|
-
refresh: zod.z.string().min(1),
|
|
560
|
-
expires: zod.z.number(),
|
|
561
|
-
account_id: zod.z.string().optional()
|
|
562
|
-
}).strict();
|
|
563
|
-
var fileSchema = zod.z.union([oauthFileSchema, apiFileSchema]);
|
|
564
|
-
function assertSecureModes(dirPath, path) {
|
|
565
|
-
const dirMode = fs.statSync(dirPath).mode & 511;
|
|
566
|
-
if ((dirMode & 18) !== 0) {
|
|
567
|
-
throw new CredentialError(
|
|
568
|
-
`${dirPath} is writable by other users (mode ${dirMode.toString(8)}), so the credential file inside it can be replaced. Fix it with: chmod 700 ${dirPath}`
|
|
569
|
-
);
|
|
570
|
-
}
|
|
571
|
-
const mode = fs.statSync(path).mode & 511;
|
|
572
|
-
if ((mode & 63) !== 0) {
|
|
573
|
-
throw new CredentialError(
|
|
574
|
-
`${path} is readable by other users (mode ${mode.toString(8)}). A credential file must not be. Fix it with: chmod 600 ${path}`
|
|
575
|
-
);
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
function describeUnionError(parsed, err, path) {
|
|
579
|
-
const looksOAuth = typeof parsed === "object" && parsed !== null && parsed.type === "oauth";
|
|
580
|
-
const specific = looksOAuth ? oauthFileSchema.safeParse(parsed) : apiFileSchema.safeParse(parsed);
|
|
581
|
-
let issue;
|
|
582
|
-
if (!specific.success) {
|
|
583
|
-
issue = specific.error.issues[0];
|
|
584
|
-
} else if (err instanceof zod.z.ZodError) {
|
|
585
|
-
issue = err.issues[0];
|
|
586
|
-
}
|
|
587
|
-
return new CredentialError(
|
|
588
|
-
`${path}: ${issue?.message ?? String(err)} [${issue?.path.join(".") || "root"}]`
|
|
589
|
-
);
|
|
590
|
-
}
|
|
591
|
-
function parseStoredFile(raw, path) {
|
|
592
|
-
let parsed;
|
|
593
|
-
try {
|
|
594
|
-
parsed = JSON.parse(raw);
|
|
595
|
-
} catch {
|
|
596
|
-
throw new CredentialError(
|
|
597
|
-
`${path} is not valid JSON. Expected: {"provider": "<name>", "api_key": "..."}`
|
|
598
|
-
);
|
|
599
|
-
}
|
|
600
|
-
try {
|
|
601
|
-
return fileSchema.parse(parsed);
|
|
602
|
-
} catch (err) {
|
|
603
|
-
throw describeUnionError(parsed, err, path);
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
function readAuthFile(config, env = {}) {
|
|
607
|
-
const path = authFilePath(config, env);
|
|
608
|
-
let raw;
|
|
609
|
-
try {
|
|
610
|
-
raw = fs.readFileSync(path, "utf8");
|
|
611
|
-
} catch (err) {
|
|
612
|
-
if (err.code === "ENOENT") return void 0;
|
|
613
|
-
throw new CredentialError(`cannot read ${path}: ${err.message}`);
|
|
614
|
-
}
|
|
615
|
-
assertSecureModes(credentialHome(config, env), path);
|
|
616
|
-
return parseStoredFile(raw, path);
|
|
617
|
-
}
|
|
618
|
-
function readStoredOAuth(config, env = {}) {
|
|
619
|
-
const stored = readAuthFile(config, env);
|
|
620
|
-
return stored !== void 0 && stored.type === "oauth" ? stored : void 0;
|
|
621
|
-
}
|
|
622
|
-
function isOAuthWrite(c) {
|
|
623
|
-
return "type" in c && c.type === "oauth";
|
|
624
|
-
}
|
|
625
|
-
function buildStorePayload(cred) {
|
|
626
|
-
if (isOAuthWrite(cred)) {
|
|
627
|
-
if (cred.access.length === 0 || cred.refresh.length === 0) {
|
|
628
|
-
throw new CredentialError(
|
|
629
|
-
"refusing to write an oauth credential with an empty access/refresh token"
|
|
630
|
-
);
|
|
631
|
-
}
|
|
632
|
-
return {
|
|
633
|
-
type: "oauth",
|
|
634
|
-
provider: cred.provider,
|
|
635
|
-
access: cred.access,
|
|
636
|
-
refresh: cred.refresh,
|
|
637
|
-
expires: cred.expires,
|
|
638
|
-
...cred.account_id !== void 0 ? { account_id: cred.account_id } : {}
|
|
639
|
-
};
|
|
640
|
-
}
|
|
641
|
-
if (typeof cred.apiKey !== "string" || cred.apiKey.length === 0) {
|
|
642
|
-
throw new CredentialError("refusing to write an empty API key");
|
|
643
|
-
}
|
|
644
|
-
return { provider: cred.provider, api_key: cred.apiKey };
|
|
645
|
-
}
|
|
646
|
-
function writeCredential(cred, config, env = {}) {
|
|
647
|
-
const payload = buildStorePayload(cred);
|
|
648
|
-
const dir = credentialHome(config, env);
|
|
649
|
-
fs.mkdirSync(dir, { recursive: true, mode: 448 });
|
|
650
|
-
fs.chmodSync(dir, 448);
|
|
651
|
-
const path = authFilePath(config, env);
|
|
652
|
-
const tmp = `${path}.tmp-${crypto.randomBytes(8).toString("hex")}`;
|
|
653
|
-
try {
|
|
654
|
-
const fd = fs.openSync(tmp, "wx", 384);
|
|
655
|
-
try {
|
|
656
|
-
fs.writeFileSync(fd, `${JSON.stringify(payload, null, 2)}
|
|
657
|
-
`);
|
|
658
|
-
fs.fsyncSync(fd);
|
|
659
|
-
} finally {
|
|
660
|
-
fs.closeSync(fd);
|
|
661
|
-
}
|
|
662
|
-
fs.chmodSync(tmp, 384);
|
|
663
|
-
fs.renameSync(tmp, path);
|
|
664
|
-
} catch (err) {
|
|
665
|
-
try {
|
|
666
|
-
fs.unlinkSync(tmp);
|
|
667
|
-
} catch {
|
|
668
|
-
}
|
|
669
|
-
throw new CredentialError(`cannot write ${path}: ${err.message}`);
|
|
670
|
-
}
|
|
671
|
-
return path;
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
// src/server/auth/errors.ts
|
|
675
|
-
var AuthCallbackError = class extends Error {
|
|
676
|
-
name = "AuthCallbackError";
|
|
677
|
-
code;
|
|
678
|
-
constructor(code, message) {
|
|
679
|
-
super(message ?? `OAuth callback error: ${code}`);
|
|
680
|
-
this.code = code;
|
|
681
|
-
}
|
|
682
|
-
};
|
|
683
|
-
|
|
684
|
-
// src/internal/auth/oauth-engine.ts
|
|
685
|
-
var REFRESH_SKEW_MS = 6e4;
|
|
686
|
-
function parseTokenResponse(body, now) {
|
|
687
|
-
const b = body;
|
|
688
|
-
if (typeof b.access_token !== "string" || b.access_token.length === 0) {
|
|
689
|
-
throw new AuthCallbackError(
|
|
690
|
-
"oauth_token_exchange_failed",
|
|
691
|
-
"token response had no access_token"
|
|
692
|
-
);
|
|
693
|
-
}
|
|
694
|
-
if (typeof b.refresh_token !== "string" || b.refresh_token.length === 0) {
|
|
695
|
-
throw new AuthCallbackError(
|
|
696
|
-
"oauth_token_exchange_failed",
|
|
697
|
-
"token response had no refresh_token"
|
|
698
|
-
);
|
|
699
|
-
}
|
|
700
|
-
const expiresIn = typeof b.expires_in === "number" ? b.expires_in : 3600;
|
|
701
|
-
return {
|
|
702
|
-
access: b.access_token,
|
|
703
|
-
refresh: b.refresh_token,
|
|
704
|
-
expires: now + expiresIn * 1e3,
|
|
705
|
-
...typeof b.account_id === "string" ? { accountId: b.account_id } : {}
|
|
706
|
-
};
|
|
707
|
-
}
|
|
708
|
-
async function postGrant(config, form, deps) {
|
|
709
|
-
let res;
|
|
710
|
-
try {
|
|
711
|
-
res = await deps.fetch(config.tokenEndpoint, {
|
|
712
|
-
method: "POST",
|
|
713
|
-
headers: { "content-type": "application/x-www-form-urlencoded", accept: "application/json" },
|
|
714
|
-
body: new URLSearchParams(form).toString()
|
|
715
|
-
});
|
|
716
|
-
} catch (err) {
|
|
717
|
-
throw new AuthCallbackError(
|
|
718
|
-
"oauth_token_exchange_failed",
|
|
719
|
-
`token endpoint request failed: ${err.message}`
|
|
720
|
-
);
|
|
721
|
-
}
|
|
722
|
-
if (!res.ok) {
|
|
723
|
-
throw new AuthCallbackError(
|
|
724
|
-
"oauth_token_exchange_failed",
|
|
725
|
-
`token endpoint returned HTTP ${res.status}`
|
|
726
|
-
);
|
|
727
|
-
}
|
|
728
|
-
let json;
|
|
729
|
-
try {
|
|
730
|
-
json = await res.json();
|
|
731
|
-
} catch {
|
|
732
|
-
throw new AuthCallbackError("oauth_token_exchange_failed", "token response was not valid JSON");
|
|
733
|
-
}
|
|
734
|
-
return parseTokenResponse(json, deps.now());
|
|
735
|
-
}
|
|
736
|
-
function refreshOAuthTokens(config, refresh, deps) {
|
|
737
|
-
return postGrant(
|
|
738
|
-
config,
|
|
739
|
-
{ grant_type: "refresh_token", refresh_token: refresh, client_id: config.clientId },
|
|
740
|
-
deps
|
|
741
|
-
);
|
|
742
|
-
}
|
|
743
|
-
function persistOAuthTokens(provider, tokens, store, env = {}) {
|
|
744
|
-
return writeCredential(
|
|
745
|
-
{
|
|
746
|
-
type: "oauth",
|
|
747
|
-
provider,
|
|
748
|
-
access: tokens.access,
|
|
749
|
-
refresh: tokens.refresh,
|
|
750
|
-
expires: tokens.expires,
|
|
751
|
-
...tokens.accountId !== void 0 ? { account_id: tokens.accountId } : {}
|
|
752
|
-
},
|
|
753
|
-
store,
|
|
754
|
-
env
|
|
755
|
-
);
|
|
756
|
-
}
|
|
757
|
-
var inFlightRefresh = /* @__PURE__ */ new Map();
|
|
758
|
-
async function ensureFreshCredential(resolved, opts, deps) {
|
|
759
|
-
if (resolved.kind !== "oauth") return resolved;
|
|
760
|
-
const now = deps.now();
|
|
761
|
-
if (resolved.expiresAt !== void 0 && resolved.expiresAt > now + REFRESH_SKEW_MS) {
|
|
762
|
-
return resolved;
|
|
763
|
-
}
|
|
764
|
-
const env = opts.env ?? {};
|
|
765
|
-
const path = authFilePath(opts.store, env);
|
|
766
|
-
let refresh = inFlightRefresh.get(path);
|
|
767
|
-
if (refresh === void 0) {
|
|
768
|
-
refresh = (async () => {
|
|
769
|
-
const stored = readStoredOAuth(opts.store, env);
|
|
770
|
-
if (stored === void 0) {
|
|
771
|
-
throw new AuthCallbackError(
|
|
772
|
-
"oauth_token_exchange_failed",
|
|
773
|
-
"no stored oauth credential to refresh"
|
|
774
|
-
);
|
|
775
|
-
}
|
|
776
|
-
const fresh2 = await refreshOAuthTokens(opts.config, stored.refresh, deps);
|
|
777
|
-
const merged = {
|
|
778
|
-
...fresh2,
|
|
779
|
-
accountId: fresh2.accountId ?? stored.account_id
|
|
780
|
-
};
|
|
781
|
-
persistOAuthTokens(resolved.provider, merged, opts.store, env);
|
|
782
|
-
return merged;
|
|
783
|
-
})();
|
|
784
|
-
inFlightRefresh.set(path, refresh);
|
|
785
|
-
refresh.finally(() => inFlightRefresh.delete(path)).catch(() => {
|
|
786
|
-
});
|
|
787
|
-
}
|
|
788
|
-
const fresh = await refresh;
|
|
789
|
-
return {
|
|
790
|
-
kind: "oauth",
|
|
791
|
-
provider: resolved.provider,
|
|
792
|
-
apiKey: fresh.access,
|
|
793
|
-
source: resolved.source,
|
|
794
|
-
inferred: false,
|
|
795
|
-
expiresAt: fresh.expires
|
|
796
|
-
};
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
// src/internal/auth/resolve-credential.ts
|
|
800
|
-
async function resolveOAuth(stored, path, opts, env) {
|
|
801
|
-
if (stored.provider !== opts.provider) return void 0;
|
|
802
|
-
const base = {
|
|
803
|
-
kind: "oauth",
|
|
804
|
-
provider: opts.provider,
|
|
805
|
-
apiKey: stored.access,
|
|
806
|
-
source: path,
|
|
807
|
-
inferred: false,
|
|
808
|
-
expiresAt: stored.expires
|
|
809
|
-
};
|
|
810
|
-
if (opts.oauth === void 0) return base;
|
|
811
|
-
const deps = {
|
|
812
|
-
fetch: opts.deps?.fetch ?? fetch,
|
|
813
|
-
now: opts.deps?.now ?? (() => Date.now())
|
|
86
|
+
provider: chunkVYHJZVL5_cjs.parseModelId(modelId).provider
|
|
814
87
|
};
|
|
815
|
-
return ensureFreshCredential(base, { config: opts.oauth, store: opts.store, env }, deps);
|
|
816
88
|
}
|
|
817
|
-
async function resolveCredential(opts) {
|
|
818
|
-
const env = opts.env ?? {};
|
|
819
|
-
const stored = readAuthFile(opts.store, env);
|
|
820
|
-
if (stored === void 0) return void 0;
|
|
821
|
-
const path = authFilePath(opts.store, env);
|
|
822
|
-
if (stored.type === "oauth") {
|
|
823
|
-
return resolveOAuth(stored, path, opts, env);
|
|
824
|
-
}
|
|
825
|
-
if (stored.api_key.length === 0) return void 0;
|
|
826
|
-
if (stored.provider !== opts.provider) return void 0;
|
|
827
|
-
return {
|
|
828
|
-
kind: "api",
|
|
829
|
-
provider: opts.provider,
|
|
830
|
-
apiKey: stored.api_key,
|
|
831
|
-
source: path,
|
|
832
|
-
inferred: false
|
|
833
|
-
};
|
|
834
|
-
}
|
|
835
|
-
|
|
836
|
-
// src/internal/providers/builtin/openai-chatgpt.ts
|
|
837
|
-
var DEFAULT_STORE = {
|
|
838
|
-
home: os.homedir(),
|
|
839
|
-
dirName: ".theokit",
|
|
840
|
-
fileName: "auth.json",
|
|
841
|
-
homeEnvVar: "THEOKIT_AUTH_HOME"
|
|
842
|
-
};
|
|
843
|
-
var OPENAI_OAUTH_CONFIG = {
|
|
844
|
-
provider: "openai",
|
|
845
|
-
authorizeEndpoint: "https://auth.openai.com/oauth/authorize",
|
|
846
|
-
tokenEndpoint: "https://auth.openai.com/oauth/token",
|
|
847
|
-
clientId: "app_EMoamEEZ73f0CkXaXp7hrann",
|
|
848
|
-
scopes: ["openid", "profile", "email", "offline_access"],
|
|
849
|
-
redirectUri: "https://auth.openai.com/deviceauth/callback"
|
|
850
|
-
};
|
|
851
|
-
function codexFetch() {
|
|
852
|
-
return (async (input, init) => {
|
|
853
|
-
const env = process.env;
|
|
854
|
-
const resolved = await resolveCredential({
|
|
855
|
-
provider: "openai",
|
|
856
|
-
store: DEFAULT_STORE,
|
|
857
|
-
oauth: OPENAI_OAUTH_CONFIG,
|
|
858
|
-
env
|
|
859
|
-
});
|
|
860
|
-
if (resolved === void 0) {
|
|
861
|
-
throw new Error(
|
|
862
|
-
'openai-chatgpt: no ChatGPT credential found \u2014 run the OpenAI device login (e.g. "/login openai") first.'
|
|
863
|
-
);
|
|
864
|
-
}
|
|
865
|
-
const accountId = readStoredOAuth(DEFAULT_STORE, env)?.account_id;
|
|
866
|
-
const headers = new Headers(init?.headers);
|
|
867
|
-
headers.set("authorization", `Bearer ${resolved.apiKey}`);
|
|
868
|
-
if (accountId !== void 0) headers.set("ChatGPT-Account-Id", accountId);
|
|
869
|
-
return fetch(input, { ...init, headers });
|
|
870
|
-
});
|
|
871
|
-
}
|
|
872
|
-
var OPENAI_CHATGPT = {
|
|
873
|
-
name: "openai-chatgpt",
|
|
874
|
-
apiMode: "responses_api",
|
|
875
|
-
authType: "oauth_device_code",
|
|
876
|
-
baseUrl: "https://chatgpt.com/backend-api/codex",
|
|
877
|
-
envVars: [],
|
|
878
|
-
fallbackModels: [
|
|
879
|
-
"openai-chatgpt/gpt-5.4",
|
|
880
|
-
"openai-chatgpt/gpt-5.4-mini",
|
|
881
|
-
"openai-chatgpt/gpt-5.5"
|
|
882
|
-
],
|
|
883
|
-
extraHeaders: { originator: "codex_cli_rs" },
|
|
884
|
-
transform: {
|
|
885
|
-
// Only `fetch` (async) can await the credential refresh; `headers` is sync and cannot.
|
|
886
|
-
fetch: () => codexFetch()
|
|
887
|
-
}
|
|
888
|
-
};
|
|
889
|
-
|
|
890
|
-
// src/internal/providers/builtin/openrouter.ts
|
|
891
|
-
var OPENROUTER = {
|
|
892
|
-
name: "openrouter",
|
|
893
|
-
apiMode: "chat_completions",
|
|
894
|
-
aliases: ["or"],
|
|
895
|
-
// Ordered fallback (EC-10): OPENROUTER_API_KEY preferred, OPENAI_API_KEY as compat.
|
|
896
|
-
envVars: ["OPENROUTER_API_KEY", "OPENAI_API_KEY"],
|
|
897
|
-
authType: "api_key",
|
|
898
|
-
baseUrl: "https://openrouter.ai/api",
|
|
899
|
-
modelsUrl: "https://openrouter.ai/api/v1/models",
|
|
900
|
-
hostname: "openrouter.ai",
|
|
901
|
-
// M45 — models refreshed (claude-3-haiku retired upstream).
|
|
902
|
-
fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-haiku-4-5"],
|
|
903
|
-
// M45 — OpenRouter app-attribution headers (mechanism from OpenCode's openrouter plugin, MIT; VALUES are
|
|
904
|
-
// theokit's own — copying another app's referer would misattribute traffic).
|
|
905
|
-
extraHeaders: { "HTTP-Referer": "https://usetheo.dev", "X-Title": "theokit" }
|
|
906
|
-
};
|
|
907
|
-
|
|
908
|
-
// src/internal/providers/builtin/perplexity.ts
|
|
909
|
-
var PERPLEXITY = openAiCompatibleProfile({
|
|
910
|
-
name: "perplexity",
|
|
911
|
-
baseUrl: "https://api.perplexity.ai",
|
|
912
|
-
chatCompletionsPath: "/chat/completions",
|
|
913
|
-
envVars: ["PERPLEXITY_API_KEY"],
|
|
914
|
-
fallbackModels: ["sonar-pro", "sonar"],
|
|
915
|
-
hostname: "api.perplexity.ai"
|
|
916
|
-
});
|
|
917
|
-
|
|
918
|
-
// src/internal/providers/builtin/together.ts
|
|
919
|
-
var TOGETHER = openAiCompatibleProfile({
|
|
920
|
-
name: "together",
|
|
921
|
-
aliases: ["togetherai"],
|
|
922
|
-
baseUrl: "https://api.together.xyz/v1",
|
|
923
|
-
envVars: ["TOGETHER_API_KEY"],
|
|
924
|
-
fallbackModels: ["Qwen/Qwen2.5-7B-Instruct-Turbo"],
|
|
925
|
-
hostname: "api.together.xyz"
|
|
926
|
-
});
|
|
927
|
-
|
|
928
|
-
// src/internal/providers/builtin/vertex.ts
|
|
929
|
-
var VERTEX = {
|
|
930
|
-
name: "vertex",
|
|
931
|
-
apiMode: "anthropic_messages",
|
|
932
|
-
// sub-dispatched in selectTransport by profile.name
|
|
933
|
-
envVars: ["GOOGLE_APPLICATION_CREDENTIALS"],
|
|
934
|
-
authType: "gcp_oauth",
|
|
935
|
-
baseUrl: "https://us-central1-aiplatform.googleapis.com",
|
|
936
|
-
modelsUrl: void 0,
|
|
937
|
-
hostname: "aiplatform.googleapis.com",
|
|
938
|
-
fallbackModels: [
|
|
939
|
-
"vertex/anthropic/claude-sonnet-4-5@20250929",
|
|
940
|
-
"vertex/google/gemini-2.0-flash-001"
|
|
941
|
-
]
|
|
942
|
-
};
|
|
943
|
-
|
|
944
|
-
// src/internal/providers/builtin/xai.ts
|
|
945
|
-
var XAI = openAiCompatibleProfile({
|
|
946
|
-
name: "xai",
|
|
947
|
-
aliases: ["grok"],
|
|
948
|
-
baseUrl: "https://api.x.ai/v1",
|
|
949
|
-
envVars: ["XAI_API_KEY"],
|
|
950
|
-
fallbackModels: ["grok-4.5", "grok-4.3"],
|
|
951
|
-
hostname: "api.x.ai"
|
|
952
|
-
});
|
|
953
|
-
|
|
954
|
-
// src/internal/providers/builtin/index.ts
|
|
955
|
-
var _registeredState = (() => {
|
|
956
|
-
const g = globalThis;
|
|
957
|
-
const sym = /* @__PURE__ */ Symbol.for("theokit-sdk.providers.builtins-registered");
|
|
958
|
-
if (g[sym] === void 0) g[sym] = { done: false };
|
|
959
|
-
return g[sym];
|
|
960
|
-
})();
|
|
961
|
-
function registerBuiltins() {
|
|
962
|
-
if (_registeredState.done) return;
|
|
963
|
-
_registeredState.done = true;
|
|
964
|
-
registerProvider(ANTHROPIC);
|
|
965
|
-
registerProvider(OPENAI);
|
|
966
|
-
registerProvider(OPENAI_CHATGPT);
|
|
967
|
-
registerProvider(OPENROUTER);
|
|
968
|
-
registerProvider(GEMINI);
|
|
969
|
-
registerProvider(OLLAMA);
|
|
970
|
-
registerProvider(LMSTUDIO);
|
|
971
|
-
registerProvider(LLAMACPP);
|
|
972
|
-
registerProvider(BEDROCK);
|
|
973
|
-
registerProvider(VERTEX);
|
|
974
|
-
registerProvider(GOOGLE);
|
|
975
|
-
registerProvider(MISTRAL);
|
|
976
|
-
registerProvider(GROQ);
|
|
977
|
-
registerProvider(COHERE);
|
|
978
|
-
registerProvider(DEEPINFRA);
|
|
979
|
-
registerProvider(TOGETHER);
|
|
980
|
-
registerProvider(XAI);
|
|
981
|
-
registerProvider(PERPLEXITY);
|
|
982
|
-
registerProvider(CEREBRAS);
|
|
983
|
-
registerCatalogProviders();
|
|
984
|
-
}
|
|
985
|
-
|
|
986
|
-
// src/internal/providers/catalog-source-models-dev.ts
|
|
987
89
|
var DEFAULT_URL = "https://models.dev/api.json";
|
|
988
90
|
var TTL_MS = 60 * 60 * 1e3;
|
|
989
91
|
var FETCH_TIMEOUT_MS = 1e4;
|
|
@@ -1021,7 +123,7 @@ function catalogTargets() {
|
|
|
1021
123
|
if (_catalogTargets !== void 0) return _catalogTargets;
|
|
1022
124
|
_catalogTargets = /* @__PURE__ */ new Map();
|
|
1023
125
|
try {
|
|
1024
|
-
for (const entry of Object.values(loadProviderCatalog())) {
|
|
126
|
+
for (const entry of Object.values(chunkD42XHI4O_cjs.loadProviderCatalog())) {
|
|
1025
127
|
const keys = [entry.id, ...entry.aliases ?? []];
|
|
1026
128
|
for (const k of keys) {
|
|
1027
129
|
if (!_catalogTargets.has(k)) _catalogTargets.set(k, { keys });
|
|
@@ -1035,7 +137,7 @@ function resolvePatchKeys(externalId) {
|
|
|
1035
137
|
const mapped = MODELS_DEV_ID_MAP[externalId] ?? externalId;
|
|
1036
138
|
const fromCatalog = catalogTargets().get(mapped);
|
|
1037
139
|
if (fromCatalog !== void 0) return fromCatalog.keys;
|
|
1038
|
-
const profile = getProviderProfile(mapped);
|
|
140
|
+
const profile = chunkD42XHI4O_cjs.getProviderProfile(mapped);
|
|
1039
141
|
if (profile !== void 0) return [profile.name, ...profile.aliases ?? []];
|
|
1040
142
|
return void 0;
|
|
1041
143
|
}
|
|
@@ -1052,9 +154,9 @@ function patchIndexFromApiJson(raw) {
|
|
|
1052
154
|
continue;
|
|
1053
155
|
}
|
|
1054
156
|
for (const [modelId, rawModel] of Object.entries(models)) {
|
|
1055
|
-
const parsed = catalogModelSchema.safeParse(rawModel);
|
|
157
|
+
const parsed = chunkD42XHI4O_cjs.catalogModelSchema.safeParse(rawModel);
|
|
1056
158
|
if (!parsed.success) continue;
|
|
1057
|
-
for (const key of keys) patchModelInfo(`${key}/${modelId}`, parsed.data);
|
|
159
|
+
for (const key of keys) chunkD42XHI4O_cjs.patchModelInfo(`${key}/${modelId}`, parsed.data);
|
|
1058
160
|
patched++;
|
|
1059
161
|
}
|
|
1060
162
|
}
|
|
@@ -1097,7 +199,7 @@ function loadCacheIntoIndex(url = DEFAULT_URL) {
|
|
|
1097
199
|
}
|
|
1098
200
|
}
|
|
1099
201
|
async function refreshModelCatalog(opts = {}) {
|
|
1100
|
-
registerBuiltins();
|
|
202
|
+
chunkD42XHI4O_cjs.registerBuiltins();
|
|
1101
203
|
const kill = process.env.THEOKIT_DISABLE_MODELS_FETCH;
|
|
1102
204
|
if (kill !== void 0 && kill !== "" && kill !== "0" && kill.toLowerCase() !== "false") {
|
|
1103
205
|
return { source: "skipped", models: 0 };
|
|
@@ -1117,7 +219,7 @@ async function refreshModelCatalog(opts = {}) {
|
|
|
1117
219
|
const fetchImpl = opts.deps?.fetch ?? fetch;
|
|
1118
220
|
let body;
|
|
1119
221
|
try {
|
|
1120
|
-
const res = await Retry.create(
|
|
222
|
+
const res = await chunkKSKU6JY6_cjs.Retry.create(
|
|
1121
223
|
async () => {
|
|
1122
224
|
const r = await fetchImpl(url, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) });
|
|
1123
225
|
if (!r.ok) throw new Error(`HTTP ${r.status}`);
|
|
@@ -1155,12 +257,15 @@ async function refreshModelCatalog(opts = {}) {
|
|
|
1155
257
|
}
|
|
1156
258
|
}
|
|
1157
259
|
function getModelInfo(modelId) {
|
|
1158
|
-
return getCatalogModelInfo(modelId);
|
|
260
|
+
return chunkD42XHI4O_cjs.getCatalogModelInfo(modelId);
|
|
1159
261
|
}
|
|
1160
262
|
|
|
263
|
+
Object.defineProperty(exports, "parseModelId", {
|
|
264
|
+
enumerable: true,
|
|
265
|
+
get: function () { return chunkVYHJZVL5_cjs.parseModelId; }
|
|
266
|
+
});
|
|
1161
267
|
exports.getModelInfo = getModelInfo;
|
|
1162
268
|
exports.humanizeModelName = humanizeModelName;
|
|
1163
|
-
exports.parseModelId = parseModelId;
|
|
1164
269
|
exports.refreshModelCatalog = refreshModelCatalog;
|
|
1165
270
|
exports.resolveModelCapabilities = resolveModelCapabilities;
|
|
1166
271
|
exports.toModelOption = toModelOption;
|