@skaile/workspaces 4.39.0 → 5.1.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/CHANGELOG.md +35 -0
- package/dist/asset-feeds-TU5CS6QL.js +131 -0
- package/dist/asset-feeds-TU5CS6QL.js.map +1 -0
- package/dist/asset-manager/catalog-deployer.js +12 -11
- package/dist/asset-manager/index.js +17 -16
- package/dist/asset-manager/installer.js +12 -11
- package/dist/asset-manager/src/catalog-deployer.d.ts +1 -3
- package/dist/asset-manager/src/catalog-deployer.d.ts.map +1 -1
- package/dist/asset-manager/src/index.d.ts +8 -9
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +25 -13
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +13 -12
- package/dist/bridge/drivers/codex.js.map +1 -1
- package/dist/bridge/drivers/continue.js +14 -13
- package/dist/bridge/drivers/continue.js.map +1 -1
- package/dist/bridge/drivers/echo.js +2 -2
- package/dist/bridge/drivers/gemini.js +6 -6
- package/dist/bridge/drivers/goose.js +14 -13
- package/dist/bridge/drivers/goose.js.map +1 -1
- package/dist/bridge/drivers/omp.js +3 -3
- package/dist/bridge/drivers/opencode.js +14 -13
- package/dist/bridge/drivers/opencode.js.map +1 -1
- package/dist/bridge/drivers/qwen.js +6 -6
- package/dist/bridge/index.js +15 -14
- package/dist/bridge/src/drivers/claude-sdk.d.ts +4 -0
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/types.d.ts +7 -0
- package/dist/bridge/src/types.d.ts.map +1 -1
- package/dist/{chunk-NLKIW2VI.js → chunk-2Y6DSR36.js} +5 -4
- package/dist/chunk-2Y6DSR36.js.map +1 -0
- package/dist/{chunk-H7N6RWNF.js → chunk-3KSAFYD4.js} +9 -5
- package/dist/chunk-3KSAFYD4.js.map +1 -0
- package/dist/{chunk-SM6EUQMY.js → chunk-3NGPZC44.js} +11 -11
- package/dist/chunk-3NGPZC44.js.map +1 -0
- package/dist/{chunk-A5EDMBFG.js → chunk-43ZBF3WH.js} +5 -8
- package/dist/chunk-43ZBF3WH.js.map +1 -0
- package/dist/{chunk-P7BU6DAC.js → chunk-55RMUF4G.js} +76 -33
- package/dist/chunk-55RMUF4G.js.map +1 -0
- package/dist/{chunk-TQ6XNACF.js → chunk-6LDUA57J.js} +25 -26
- package/dist/chunk-6LDUA57J.js.map +1 -0
- package/dist/chunk-A2ULN3KX.js +40 -0
- package/dist/chunk-A2ULN3KX.js.map +1 -0
- package/dist/{chunk-DSB6X25D.js → chunk-AG44ZJ7W.js} +3 -3
- package/dist/{chunk-DSB6X25D.js.map → chunk-AG44ZJ7W.js.map} +1 -1
- package/dist/{chunk-YCMZHL4T.js → chunk-AGWYBS2E.js} +6 -6
- package/dist/{chunk-YCMZHL4T.js.map → chunk-AGWYBS2E.js.map} +1 -1
- package/dist/{chunk-35G4M33T.js → chunk-AOMWF2OE.js} +4 -4
- package/dist/chunk-AOMWF2OE.js.map +1 -0
- package/dist/{chunk-X4DKUGV4.js → chunk-AYNPGPT5.js} +9 -15
- package/dist/chunk-AYNPGPT5.js.map +1 -0
- package/dist/{chunk-SSCPTAFJ.js → chunk-CI6FQ654.js} +3 -3
- package/dist/{chunk-SSCPTAFJ.js.map → chunk-CI6FQ654.js.map} +1 -1
- package/dist/{chunk-6X4DHKHP.js → chunk-CT6NQSA4.js} +3 -3
- package/dist/{chunk-6X4DHKHP.js.map → chunk-CT6NQSA4.js.map} +1 -1
- package/dist/{chunk-5K2VT6E2.js → chunk-DXUQCMVT.js} +3 -3
- package/dist/{chunk-5K2VT6E2.js.map → chunk-DXUQCMVT.js.map} +1 -1
- package/dist/{chunk-3C3ODIDE.js → chunk-E3ZACBHD.js} +13 -16
- package/dist/chunk-E3ZACBHD.js.map +1 -0
- package/dist/{chunk-C75VKXAM.js → chunk-E67J56FJ.js} +3 -3
- package/dist/{chunk-C75VKXAM.js.map → chunk-E67J56FJ.js.map} +1 -1
- package/dist/{chunk-B4IAZTZZ.js → chunk-EB6OPURC.js} +3 -3
- package/dist/{chunk-B4IAZTZZ.js.map → chunk-EB6OPURC.js.map} +1 -1
- package/dist/{chunk-VXPFSZDT.js → chunk-EPHQWHOH.js} +6 -6
- package/dist/{chunk-VXPFSZDT.js.map → chunk-EPHQWHOH.js.map} +1 -1
- package/dist/chunk-F7JHP7JV.js +122 -0
- package/dist/chunk-F7JHP7JV.js.map +1 -0
- package/dist/{chunk-FTPKMJFD.js → chunk-G47EV3V6.js} +2 -2
- package/dist/{chunk-FTPKMJFD.js.map → chunk-G47EV3V6.js.map} +1 -1
- package/dist/{chunk-252TK4RU.js → chunk-G4T7MYTA.js} +12 -14
- package/dist/chunk-G4T7MYTA.js.map +1 -0
- package/dist/{chunk-2EL2PBRC.js → chunk-H4EGUQ7M.js} +3 -3
- package/dist/{chunk-2EL2PBRC.js.map → chunk-H4EGUQ7M.js.map} +1 -1
- package/dist/{chunk-YV3YI3TA.js → chunk-IWCCZL7C.js} +17 -11
- package/dist/chunk-IWCCZL7C.js.map +1 -0
- package/dist/{chunk-QVLQGXT6.js → chunk-IYIIT4R3.js} +5 -5
- package/dist/{chunk-QVLQGXT6.js.map → chunk-IYIIT4R3.js.map} +1 -1
- package/dist/{chunk-YYH5EVPM.js → chunk-JUXQUZOQ.js} +12 -4
- package/dist/{chunk-YYH5EVPM.js.map → chunk-JUXQUZOQ.js.map} +1 -1
- package/dist/{chunk-BCUVRJXV.js → chunk-KAYH6AXN.js} +3 -3
- package/dist/{chunk-BCUVRJXV.js.map → chunk-KAYH6AXN.js.map} +1 -1
- package/dist/{chunk-JEPSP6XK.js → chunk-MXXKTQXJ.js} +18 -12
- package/dist/chunk-MXXKTQXJ.js.map +1 -0
- package/dist/{chunk-UDFWBALP.js → chunk-NFGRW3L7.js} +3 -3
- package/dist/{chunk-UDFWBALP.js.map → chunk-NFGRW3L7.js.map} +1 -1
- package/dist/{chunk-WCWFS36P.js → chunk-P5UQ56RA.js} +3 -3
- package/dist/{chunk-WCWFS36P.js.map → chunk-P5UQ56RA.js.map} +1 -1
- package/dist/{chunk-ORH2BZEM.js → chunk-QCI6D7E4.js} +69 -22
- package/dist/chunk-QCI6D7E4.js.map +1 -0
- package/dist/{chunk-5RWL4L3X.js → chunk-QFZFZXQW.js} +171 -28
- package/dist/chunk-QFZFZXQW.js.map +1 -0
- package/dist/{chunk-DIQDYNXZ.js → chunk-QZLWJETK.js} +3 -3
- package/dist/{chunk-DIQDYNXZ.js.map → chunk-QZLWJETK.js.map} +1 -1
- package/dist/{chunk-TSVRKUGV.js → chunk-RDTHJSGY.js} +11 -2
- package/dist/chunk-RDTHJSGY.js.map +1 -0
- package/dist/{chunk-QBQITQAM.js → chunk-RNNUYFFD.js} +3 -3
- package/dist/{chunk-QBQITQAM.js.map → chunk-RNNUYFFD.js.map} +1 -1
- package/dist/chunk-RVRB27AN.js +64 -0
- package/dist/chunk-RVRB27AN.js.map +1 -0
- package/dist/{chunk-XU7JET5Z.js → chunk-SP47UJKE.js} +37 -109
- package/dist/chunk-SP47UJKE.js.map +1 -0
- package/dist/{chunk-EB4ZTESQ.js → chunk-TOSHZX4C.js} +8 -3
- package/dist/chunk-TOSHZX4C.js.map +1 -0
- package/dist/{chunk-5NYBY6ZE.js → chunk-TVOODIZE.js} +3 -3
- package/dist/{chunk-5NYBY6ZE.js.map → chunk-TVOODIZE.js.map} +1 -1
- package/dist/{chunk-EOKAFBJ7.js → chunk-TYUJB336.js} +3 -3
- package/dist/{chunk-EOKAFBJ7.js.map → chunk-TYUJB336.js.map} +1 -1
- package/dist/{chunk-KAJH3XPW.js → chunk-U6K3I3AX.js} +3 -3
- package/dist/{chunk-KAJH3XPW.js.map → chunk-U6K3I3AX.js.map} +1 -1
- package/dist/{chunk-7RC37XFW.js → chunk-UMSWQKCY.js} +59 -12
- package/dist/chunk-UMSWQKCY.js.map +1 -0
- package/dist/{chunk-OLMNDIAU.js → chunk-UVOJSWD2.js} +95 -320
- package/dist/chunk-UVOJSWD2.js.map +1 -0
- package/dist/{chunk-DOVURNRK.js → chunk-VDJKWKH2.js} +3 -3
- package/dist/chunk-VDJKWKH2.js.map +1 -0
- package/dist/{chunk-VDBP6Y5M.js → chunk-WCQMXBO5.js} +21 -47
- package/dist/chunk-WCQMXBO5.js.map +1 -0
- package/dist/{chunk-YQEF36D5.js → chunk-WKIOWDLQ.js} +4 -4
- package/dist/{chunk-YQEF36D5.js.map → chunk-WKIOWDLQ.js.map} +1 -1
- package/dist/{chunk-5LF27VUB.js → chunk-X6E7Y4JD.js} +17 -15
- package/dist/chunk-X6E7Y4JD.js.map +1 -0
- package/dist/chunk-XUQBVK4R.js +15 -0
- package/dist/chunk-XUQBVK4R.js.map +1 -0
- package/dist/{chunk-K3IBZ2UZ.js → chunk-XUUYAS3Z.js} +3 -3
- package/dist/{chunk-K3IBZ2UZ.js.map → chunk-XUUYAS3Z.js.map} +1 -1
- package/dist/{chunk-36ML6SFP.js → chunk-YDJZRLGN.js} +4 -4
- package/dist/{chunk-36ML6SFP.js.map → chunk-YDJZRLGN.js.map} +1 -1
- package/dist/{chunk-M7GPCWEV.js → chunk-YIVB7GIP.js} +3 -3
- package/dist/{chunk-M7GPCWEV.js.map → chunk-YIVB7GIP.js.map} +1 -1
- package/dist/{chunk-VJNTB4DN.js → chunk-YMOZC2D3.js} +4 -4
- package/dist/{chunk-VJNTB4DN.js.map → chunk-YMOZC2D3.js.map} +1 -1
- package/dist/{chunk-OQRB7JUS.js → chunk-YV4J7V53.js} +3 -3
- package/dist/{chunk-OQRB7JUS.js.map → chunk-YV4J7V53.js.map} +1 -1
- package/dist/{chunk-JXT46QFC.js → chunk-ZDKJHQY2.js} +2 -2
- package/dist/{chunk-JXT46QFC.js.map → chunk-ZDKJHQY2.js.map} +1 -1
- package/dist/cli/index.js +777 -1120
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/asset-feeds.d.ts +1 -8
- package/dist/cli/src/asset-feeds.d.ts.map +1 -1
- package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts.map +1 -1
- package/dist/cli/src/commands/flow.d.ts +5 -5
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/library-index.d.ts +5 -12
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
- package/dist/cli/src/commands/manage.d.ts +74 -58
- package/dist/cli/src/commands/manage.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/publish-core.d.ts +10 -0
- package/dist/cli/src/commands/publish-core.d.ts.map +1 -1
- package/dist/cli/src/commands/run.d.ts.map +1 -1
- package/dist/cli/src/commands/show.d.ts +1 -1
- package/dist/cli/src/commands/skailify-lib.d.ts +17 -31
- package/dist/cli/src/commands/skailify-lib.d.ts.map +1 -1
- package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts +20 -2
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/flow-discovery.d.ts +46 -3
- package/dist/cli/src/flow-discovery.d.ts.map +1 -1
- package/dist/cli/src/helpers.d.ts +6 -0
- package/dist/cli/src/helpers.d.ts.map +1 -1
- package/dist/cli/src/hooks/pre-commit-version.d.ts +1 -1
- package/dist/cli/src/open-library.d.ts +11 -0
- package/dist/cli/src/open-library.d.ts.map +1 -1
- package/dist/cli/src/skill-walker.d.ts +7 -10
- package/dist/cli/src/skill-walker.d.ts.map +1 -1
- package/dist/connectors/config.js +7 -6
- package/dist/connectors/index.js +23 -22
- package/dist/connectors/src/connector-manager.d.ts +53 -3
- package/dist/connectors/src/connector-manager.d.ts.map +1 -1
- package/dist/connectors/src/connector-prompt.d.ts +16 -2
- package/dist/connectors/src/connector-prompt.d.ts.map +1 -1
- package/dist/connectors/src/fleet-utils.d.ts +3 -4
- package/dist/connectors/src/fleet-utils.d.ts.map +1 -1
- package/dist/connectors/src/index.d.ts +3 -3
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/connectors-VX7YRFFS.js +45 -0
- package/dist/{connectors-T57XL7EA.js.map → connectors-VX7YRFFS.js.map} +1 -1
- package/dist/core/discovery.js +1 -1
- package/dist/core/driver-targets.js +1 -1
- package/dist/core/index.js +11 -10
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.js +1 -1
- package/dist/core/plugin-groupings.d.ts +2 -0
- package/dist/core/plugin-groupings.js +4 -0
- package/dist/core/plugin-groupings.js.map +1 -0
- package/dist/core/publish-manifest.js +2 -2
- package/dist/core/ref.js +1 -1
- package/dist/core/runtime-assets.js +7 -6
- package/dist/core/src/discovery.d.ts +11 -51
- package/dist/core/src/discovery.d.ts.map +1 -1
- package/dist/core/src/driver-targets.d.ts +10 -0
- package/dist/core/src/driver-targets.d.ts.map +1 -1
- package/dist/core/src/index.d.ts +5 -4
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +6 -33
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/plugin-groupings.d.ts +31 -0
- package/dist/core/src/plugin-groupings.d.ts.map +1 -0
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/settings.d.ts +14 -1
- package/dist/core/src/settings.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +1 -1
- package/dist/core/store.js +2 -2
- package/dist/core/workspace-config.js +6 -5
- package/dist/deploy/index.js +11 -10
- package/dist/deploy/index.js.map +1 -1
- package/dist/discovery/index.js +6 -5
- package/dist/discovery/src/discover.d.ts +9 -25
- package/dist/discovery/src/discover.d.ts.map +1 -1
- package/dist/discovery/src/index.d.ts +0 -2
- package/dist/discovery/src/index.d.ts.map +1 -1
- package/dist/discovery/src/source-config.d.ts +13 -9
- package/dist/discovery/src/source-config.d.ts.map +1 -1
- package/dist/discovery/src/tree-entries.d.ts +6 -11
- package/dist/discovery/src/tree-entries.d.ts.map +1 -1
- package/dist/{ensure-sources-J5CDTQ36.js → ensure-sources-2XQS32WI.js} +20 -19
- package/dist/ensure-sources-2XQS32WI.js.map +1 -0
- package/dist/factory-assets/README.md +1 -1
- package/dist/factory-assets/connectors/box.js +23 -22
- package/dist/factory-assets/connectors/deploy.js +23 -22
- package/dist/factory-assets/connectors/devserver.js +23 -22
- package/dist/factory-assets/connectors/flow/CONNECTOR.md +6 -1
- package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/adapter.js +23 -22
- package/dist/factory-assets/connectors/flow/contract/flow.v2.schema.json +13 -3
- package/dist/factory-assets/connectors/flow/contract/index.d.ts +1 -0
- package/dist/factory-assets/connectors/flow/contract/index.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract/output-fields.d.ts +21 -5
- package/dist/factory-assets/connectors/flow/contract/output-fields.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract/schema.d.ts +2 -0
- package/dist/factory-assets/connectors/flow/contract/schema.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract/sub-flow-output.d.ts +20 -0
- package/dist/factory-assets/connectors/flow/contract/sub-flow-output.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/contract.js +4 -4
- package/dist/factory-assets/connectors/flow/engine/bindings.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine/flow-output.d.ts +12 -0
- package/dist/factory-assets/connectors/flow/engine/flow-output.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/engine/index.d.ts +1 -0
- package/dist/factory-assets/connectors/flow/engine/index.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine/loader.d.ts +3 -3
- package/dist/factory-assets/connectors/flow/engine/locate.d.ts +2 -2
- package/dist/factory-assets/connectors/flow/engine/locate.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine/types.d.ts +0 -2
- package/dist/factory-assets/connectors/flow/engine/types.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine.js +15 -14
- package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/prompt-fragments.js +3 -3
- package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/run-flow.js +25 -24
- package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts +6 -5
- package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow.js +23 -22
- package/dist/factory-assets/connectors/git.js +23 -22
- package/dist/factory-assets/connectors/gmail.js +23 -22
- package/dist/factory-assets/connectors/googledrive.js +23 -22
- package/dist/factory-assets/connectors/local.js +23 -22
- package/dist/factory-assets/connectors/mattermost.js +23 -22
- package/dist/factory-assets/connectors/memory.js +23 -22
- package/dist/factory-assets/connectors/minio.js +23 -22
- package/dist/factory-assets/connectors/postgres.js +23 -22
- package/dist/factory-assets/connectors/s3.js +23 -22
- package/dist/factory-assets/connectors/sharepoint.js +23 -22
- package/dist/factory-assets/connectors/sqlite.js +23 -22
- package/dist/factory-assets/connectors/static-server.js +23 -22
- package/dist/factory-assets/connectors/tunnel.js +23 -22
- package/dist/factory-assets/connectors/webdav.js +23 -22
- package/dist/factory-assets/connectors/xstate-store.js +23 -22
- package/dist/factory-assets/connectors/xstate.js +23 -22
- package/dist/factory-assets/skills/skaile-author-asset/SKILL.md +37 -26
- package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +2 -2
- package/dist/factory-assets/skills/skailify/SKILL.md +10 -19
- package/dist/flows-SVCCADGE.js +26 -0
- package/dist/{flows-PX53XFV7.js.map → flows-SVCCADGE.js.map} +1 -1
- package/dist/helpers-IELQGVGB.js +34 -0
- package/dist/{helpers-EP6H3O3S.js.map → helpers-IELQGVGB.js.map} +1 -1
- package/dist/library/index.js +15 -14
- package/dist/library/install.js +2 -2
- package/dist/library/src/index.d.ts +1 -1
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/local/db.d.ts.map +1 -1
- package/dist/library/src/local/library-manager.d.ts.map +1 -1
- package/dist/library/src/local/library.d.ts.map +1 -1
- package/dist/library/src/local/local-catalog-source.d.ts +14 -10
- package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
- package/dist/library/src/local/schema.d.ts +1 -20
- package/dist/library/src/local/schema.d.ts.map +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts +1 -11
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/library/src/sync/manifest-writeback.d.ts +5 -5
- package/dist/library/src/sync/manifest-writeback.d.ts.map +1 -1
- package/dist/library/src/user-library.d.ts +1 -9
- package/dist/library/src/user-library.d.ts.map +1 -1
- package/dist/{library-publish-KKT73FJK.js → library-publish-TCFU3X5L.js} +39 -26
- package/dist/library-publish-TCFU3X5L.js.map +1 -0
- package/dist/open-library-SSBN4FX2.js +40 -0
- package/dist/{open-library-R62UBL6E.js.map → open-library-SSBN4FX2.js.map} +1 -1
- package/dist/open-registry-CHCWKV5W.js +32 -0
- package/dist/open-registry-CHCWKV5W.js.map +1 -0
- package/dist/paths-MKSI52PF.js +22 -0
- package/dist/{paths-W4LDORQQ.js.map → paths-MKSI52PF.js.map} +1 -1
- package/dist/{plugin-store-D45CREMJ.js → plugin-store-SVYV7L4C.js} +13 -12
- package/dist/plugin-store-SVYV7L4C.js.map +1 -0
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/src/catalog-source.d.ts +4 -55
- package/dist/plugins/src/catalog-source.d.ts.map +1 -1
- package/dist/plugins/src/index.d.ts +1 -1
- package/dist/plugins/src/index.d.ts.map +1 -1
- package/dist/project-PJ37PM6N.js +35 -0
- package/dist/{project-GCW5DFAB.js.map → project-PJ37PM6N.js.map} +1 -1
- package/dist/resolver/index.js +12 -11
- package/dist/runner/index.js +35 -34
- package/dist/runner/src/compaction/orchestrator.d.ts +2 -1
- package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
- package/dist/runner/src/compaction-gate.d.ts +13 -0
- package/dist/runner/src/compaction-gate.d.ts.map +1 -1
- package/dist/runner/src/fleet-health-flag-dispatcher.d.ts +14 -11
- package/dist/runner/src/fleet-health-flag-dispatcher.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +17 -16
- package/dist/sdk/bridge.js +15 -14
- package/dist/sdk/core.js +11 -10
- package/dist/sdk/flow.js +15 -14
- package/dist/sdk/index.js +35 -34
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +12 -11
- package/dist/sdk/runner.js +35 -34
- package/dist/secrets/index.js +2 -2
- package/dist/{setup-Q3LXY5AE.js → setup-JW2ZGCUG.js} +25 -24
- package/dist/setup-JW2ZGCUG.js.map +1 -0
- package/dist/skills-7K2YO3KN.js +26 -0
- package/dist/{skills-R3RPIPWP.js.map → skills-7K2YO3KN.js.map} +1 -1
- package/dist/source-F2VO32W6.js +41 -0
- package/dist/{source-CFQESKJU.js.map → source-F2VO32W6.js.map} +1 -1
- package/dist/{source-manifest-publish-3TCBA2RV.js → source-manifest-publish-AXNII2J4.js} +29 -27
- package/dist/source-manifest-publish-AXNII2J4.js.map +1 -0
- package/dist/tui/index.js +35 -34
- package/dist/tui/index.js.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +40 -18
- package/dist/workspace-plugin/adapters/omp.js +21 -21
- package/dist/workspace-plugin/adapters/omp.js.map +1 -1
- package/dist/workspace-plugin/index.js +1 -1
- package/dist/workspace-plugin/src/adapters/mcp.d.ts +4 -4
- package/dist/workspace-plugin/src/adapters/mcp.d.ts.map +1 -1
- package/dist/workspace-plugin/src/adapters/omp.d.ts +2 -2
- package/dist/workspace-plugin/src/tools/connectors.d.ts +1 -1
- package/dist/workspace-plugin/src/tools/connectors.d.ts.map +1 -1
- package/dist/workspace-plugin/src/tools/skills.d.ts +5 -17
- package/dist/workspace-plugin/src/tools/skills.d.ts.map +1 -1
- package/package.json +7 -1
- package/dist/asset-feeds-KXL45ALC.js +0 -210
- package/dist/asset-feeds-KXL45ALC.js.map +0 -1
- package/dist/chunk-252TK4RU.js.map +0 -1
- package/dist/chunk-35G4M33T.js.map +0 -1
- package/dist/chunk-3C3ODIDE.js.map +0 -1
- package/dist/chunk-5LF27VUB.js.map +0 -1
- package/dist/chunk-5RWL4L3X.js.map +0 -1
- package/dist/chunk-7RC37XFW.js.map +0 -1
- package/dist/chunk-A5EDMBFG.js.map +0 -1
- package/dist/chunk-DOVURNRK.js.map +0 -1
- package/dist/chunk-EB4ZTESQ.js.map +0 -1
- package/dist/chunk-H7N6RWNF.js.map +0 -1
- package/dist/chunk-JEPSP6XK.js.map +0 -1
- package/dist/chunk-NLKIW2VI.js.map +0 -1
- package/dist/chunk-OLMNDIAU.js.map +0 -1
- package/dist/chunk-ORH2BZEM.js.map +0 -1
- package/dist/chunk-P7BU6DAC.js.map +0 -1
- package/dist/chunk-QVZA2MDT.js +0 -81
- package/dist/chunk-QVZA2MDT.js.map +0 -1
- package/dist/chunk-SM6EUQMY.js.map +0 -1
- package/dist/chunk-TQ6XNACF.js.map +0 -1
- package/dist/chunk-TSVRKUGV.js.map +0 -1
- package/dist/chunk-VDBP6Y5M.js.map +0 -1
- package/dist/chunk-X4DKUGV4.js.map +0 -1
- package/dist/chunk-XU7JET5Z.js.map +0 -1
- package/dist/chunk-YV3YI3TA.js.map +0 -1
- package/dist/connectors-T57XL7EA.js +0 -5
- package/dist/discovery/src/domains.d.ts +0 -149
- package/dist/discovery/src/domains.d.ts.map +0 -1
- package/dist/ensure-sources-J5CDTQ36.js.map +0 -1
- package/dist/flows-PX53XFV7.js +0 -25
- package/dist/helpers-EP6H3O3S.js +0 -33
- package/dist/library-publish-KKT73FJK.js.map +0 -1
- package/dist/open-library-R62UBL6E.js +0 -38
- package/dist/paths-W4LDORQQ.js +0 -21
- package/dist/plugin-store-D45CREMJ.js.map +0 -1
- package/dist/project-GCW5DFAB.js +0 -34
- package/dist/setup-Q3LXY5AE.js.map +0 -1
- package/dist/skills-R3RPIPWP.js +0 -25
- package/dist/source-CFQESKJU.js +0 -39
- package/dist/source-manifest-publish-3TCBA2RV.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { hasConstantlyFalsePrecondition } from './chunk-
|
|
1
|
+
import { hasConstantlyFalsePrecondition } from './chunk-QCI6D7E4.js';
|
|
2
2
|
|
|
3
3
|
// factory-assets/connectors/flow/engine/node-shape.ts
|
|
4
4
|
function isAgentNode(node) {
|
|
@@ -97,5 +97,5 @@ function flowDefaults(flow) {
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
export { deterministicNodeKindLabel, flowDefaults, flowSkillVersionPins, isActiveRuntimeNode, isAgentNode, isCheckNode, isExecutableNode, isFunctionNode, isGateNode, isRouterNode, isSubFlowNode, isSubpromptNode, nodeAssets, nodeBindings, nodeInstruction, nodeIsInert, nodeIsOptional, nodeLabel, nodeRequiresApproval, nodeRunKind, nodeSkillAsset, nodeSkillId, nodeSkillVersionPins };
|
|
100
|
-
//# sourceMappingURL=chunk-
|
|
101
|
-
//# sourceMappingURL=chunk-
|
|
100
|
+
//# sourceMappingURL=chunk-NFGRW3L7.js.map
|
|
101
|
+
//# sourceMappingURL=chunk-NFGRW3L7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../factory-assets/connectors/flow/engine/node-shape.ts"],"names":[],"mappings":"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","file":"chunk-UDFWBALP.js","sourcesContent":["import type { FlowVersionNode } from \"@skaile/workspaces/resolver\";\nimport { hasConstantlyFalsePrecondition } from \"../contract/schema.js\";\nimport type { FlowDefinition, FlowNode } from \"./types.js\";\n\n/** Returns whether a node is executable by the currently active agent-turn runtime. */\nexport function isAgentNode(node: FlowNode): boolean {\n return node.type === \"skill\" || node.run?.kind === \"agent\";\n}\n\n/** Returns whether a node executes deterministically through NodeExecutor. */\nexport function isFunctionNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"function\" }> } {\n return node.run?.kind === \"function\";\n}\n\n/** Returns whether a node is a deterministic pass/fail verdict evaluated by the runtime. */\nexport function isCheckNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"check\" }> } {\n return node.run?.kind === \"check\";\n}\n\n/** Returns whether a node is a runtime-owned, isolated model call evaluated outside the session conversation. */\nexport function isSubpromptNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"subprompt\" }> } {\n return node.run?.kind === \"subprompt\";\n}\n\n/** Capitalized label for error/summary text — shared by every deterministic-node message site. */\nexport function deterministicNodeKindLabel(kind: \"function\" | \"check\"): string {\n return kind === \"check\" ? \"Check\" : \"Function\";\n}\n\n/** Returns whether a node is a runtime-owned human decision point. */\nexport function isGateNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"gate\" }> } {\n return node.run?.kind === \"gate\";\n}\n\n/** Returns whether a node deterministically selects one declared branch in the engine. */\nexport function isRouterNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"router\" }> } {\n return node.run?.kind === \"router\";\n}\n\n/** Returns whether a node delegates once to an inline child flow. */\nexport function isSubFlowNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"sub-flow\" }> } {\n return node.run?.kind === \"sub-flow\";\n}\n\n/** Returns whether the current runtime owns the node's execution state. */\nexport function isActiveRuntimeNode(node: FlowNode): boolean {\n return (\n isAgentNode(node) ||\n isFunctionNode(node) ||\n isCheckNode(node) ||\n isSubpromptNode(node) ||\n isGateNode(node) ||\n isRouterNode(node) ||\n isSubFlowNode(node)\n );\n}\n\n/** @deprecated Use {@link isActiveRuntimeNode}; gates are active but nobody executes them. */\nexport const isExecutableNode = isActiveRuntimeNode;\n\n/** Returns the node's optional policy across strict v2 and legacy definitions. */\nexport function nodeIsOptional(node: FlowNode): boolean {\n return node.control?.optional ?? node.data?.optional ?? false;\n}\n\n/** Returns the node's mandatory approval policy across strict v2 and legacy definitions. */\nexport function nodeRequiresApproval(node: FlowNode): boolean {\n return node.gate?.approval === \"mandatory\" || node.data?.approval?.mandatory === true;\n}\n\n/** Returns the first declared skill requirement without making it the node identity. */\nexport function nodeSkillId(node: FlowNode): string {\n if (node.type === \"skill\") return node.data?.skill ?? node.id;\n const skillAsset = node.run?.assets?.find((asset) => asset.startsWith(\"skill:\"));\n return skillAsset?.slice(\"skill:\".length).replace(/#.*$/, \"\") ?? node.id;\n}\n\n/** Returns the user-facing node label across strict v2 and legacy definitions. */\nexport function nodeLabel(node: FlowNode): string {\n return node.label ?? node.data?.label ?? nodeSkillId(node);\n}\n\n/** Returns strict v2 run assets or the equivalent legacy declarations. */\nexport function nodeAssets(node: FlowNode): string[] {\n if (node.run?.assets) return node.run.assets;\n const legacyAssets = Array.isArray(node.data?.assets)\n ? node.data.assets.filter((asset): asset is string => typeof asset === \"string\")\n : [];\n const skill = node.type === \"skill\" && node.data?.skill ? `skill:${node.data.skill}` : undefined;\n return skill ? [skill, ...legacyAssets] : legacyAssets;\n}\n\n/**\n * Returns what executes the node, for display and grouping.\n *\n * Strict v2 `run.kind` wins, and every node reaching this through `loadFlow` has\n * one — normalization erases `type`. The legacy fallback only fires for a node\n * handed over un-normalized, so the result is not restricted to the strict v2\n * kind union. Never empty, so it is safe to render directly.\n *\n * A normalized legacy node reports the placeholder kind it became, not the kind\n * it was authored as; pair with {@link nodeIsInert} before showing it to a human.\n */\nexport function nodeRunKind(node: FlowNode): string {\n return node.run?.kind ?? node.type ?? \"unknown\";\n}\n\n/**\n * Returns whether the node is a permanently-blocked placeholder rather than a\n * step that can ever run.\n *\n * `normalizeV1` rewrites every non-executable legacy node — canvas `group`\n * containers, authored `gate`s, unknown kinds — into a router carrying\n * `contract.requires: [{ expr: \"false\" }]` and `control.optional: true`. Both are\n * normalization artifacts: the row is neither a routing step the author wrote nor\n * a step they marked skippable, so rendering either verbatim states something the\n * flow does not say. The false precondition is the surviving signal, and\n * permanent blocking is already its engine semantics.\n */\nexport function nodeIsInert(node: FlowNode): boolean {\n return hasConstantlyFalsePrecondition(node);\n}\n\n/**\n * Returns the node's first `skill:` asset reference, `#`-range included, or\n * `undefined` when the node requires no skill.\n *\n * Reads through {@link nodeAssets}, so a legacy `type: \"skill\"` node yields a\n * bare `skill:<id>` — the legacy pin lives in `data.version`, never in the ref.\n * Use {@link nodeSkillVersionPins} to read the pin itself.\n */\nexport function nodeSkillAsset(node: FlowNode): string | undefined {\n return nodeAssets(node).find((asset) => asset.startsWith(\"skill:\"));\n}\n\n/**\n * Returns every skill-version pin the node declares, ready for `validateFlowVersions`.\n *\n * Strict v2 pins ride in `run.assets` as `skill:<identity>#<range>`; the legacy\n * `type: \"skill\"` + `data.version` shape is only consulted when no asset pin is\n * present. A skill requirement without a range is *not* a version claim and\n * yields nothing — returning it would make every unpinned node fail the check.\n *\n * Gotcha: refs are parsed by hand, not through `parseAssetRef`, which throws on\n * an unscoped ref like `skill:analyze#^9.0.0`. `skillId` is the segment after the\n * last `/`, so a scoped `skill:@pub/name#range` pins `name`.\n *\n * The legacy branch is unreachable for anything loaded through `loadFlow`, which\n * normalizes `type`/`data` away. `normalizeV1` can only rebuild a `skill:` ref\n * when the node names a skill, so a legacy node pinning `data.version` with no\n * `data.skill` declares no pin at all once normalized — the same thing `skaile\n * run` has always concluded for it.\n */\nexport function nodeSkillVersionPins(node: FlowNode): FlowVersionNode[] {\n const fromAssets = nodeAssets(node).flatMap((asset) => {\n if (!asset.startsWith(\"skill:\")) return [];\n const hashIndex = asset.lastIndexOf(\"#\");\n if (hashIndex <= \"skill:\".length || hashIndex === asset.length - 1) return [];\n const identity = asset.slice(\"skill:\".length, hashIndex);\n return [\n {\n nodeId: node.id,\n skillId: identity.slice(identity.lastIndexOf(\"/\") + 1),\n requestedVersion: asset.slice(hashIndex + 1),\n },\n ];\n });\n if (fromAssets.length > 0) return fromAssets;\n if (node.type !== \"skill\" || !node.data?.version) return [];\n return [\n {\n nodeId: node.id,\n skillId: node.data.skill ?? node.id,\n requestedVersion: node.data.version,\n },\n ];\n}\n\n/** Every skill-version pin declared across a flow, in node-definition order. */\nexport function flowSkillVersionPins(flow: FlowDefinition): FlowVersionNode[] {\n return flow.nodes.flatMap((node) => nodeSkillVersionPins(node));\n}\n\n/** Returns the binding values already supplied at the node boundary. */\nexport function nodeBindings(node: FlowNode): Record<string, unknown> {\n if (node.contract?.input) return node.contract.input;\n return node.data?.parameters ?? {};\n}\n\n/** Returns the first-class instruction for a strict v2 agent or subprompt node. */\nexport function nodeInstruction(node: FlowNode): string | undefined {\n return node.run?.kind === \"agent\" || node.run?.kind === \"subprompt\"\n ? node.run.instruction\n : undefined;\n}\n\n/** Returns run-scoped defaults across strict v2 and legacy definitions. */\nexport function flowDefaults(flow: FlowDefinition): Record<string, unknown> {\n return flow.defaults ?? flow.globals ?? {};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../factory-assets/connectors/flow/engine/node-shape.ts"],"names":[],"mappings":"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","file":"chunk-NFGRW3L7.js","sourcesContent":["import type { FlowVersionNode } from \"@skaile/workspaces/resolver\";\nimport { hasConstantlyFalsePrecondition } from \"../contract/schema.js\";\nimport type { FlowDefinition, FlowNode } from \"./types.js\";\n\n/** Returns whether a node is executable by the currently active agent-turn runtime. */\nexport function isAgentNode(node: FlowNode): boolean {\n return node.type === \"skill\" || node.run?.kind === \"agent\";\n}\n\n/** Returns whether a node executes deterministically through NodeExecutor. */\nexport function isFunctionNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"function\" }> } {\n return node.run?.kind === \"function\";\n}\n\n/** Returns whether a node is a deterministic pass/fail verdict evaluated by the runtime. */\nexport function isCheckNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"check\" }> } {\n return node.run?.kind === \"check\";\n}\n\n/** Returns whether a node is a runtime-owned, isolated model call evaluated outside the session conversation. */\nexport function isSubpromptNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"subprompt\" }> } {\n return node.run?.kind === \"subprompt\";\n}\n\n/** Capitalized label for error/summary text — shared by every deterministic-node message site. */\nexport function deterministicNodeKindLabel(kind: \"function\" | \"check\"): string {\n return kind === \"check\" ? \"Check\" : \"Function\";\n}\n\n/** Returns whether a node is a runtime-owned human decision point. */\nexport function isGateNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"gate\" }> } {\n return node.run?.kind === \"gate\";\n}\n\n/** Returns whether a node deterministically selects one declared branch in the engine. */\nexport function isRouterNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"router\" }> } {\n return node.run?.kind === \"router\";\n}\n\n/** Returns whether a node delegates once to an inline child flow. */\nexport function isSubFlowNode(\n node: FlowNode,\n): node is FlowNode & { run: Extract<NonNullable<FlowNode[\"run\"]>, { kind: \"sub-flow\" }> } {\n return node.run?.kind === \"sub-flow\";\n}\n\n/** Returns whether the current runtime owns the node's execution state. */\nexport function isActiveRuntimeNode(node: FlowNode): boolean {\n return (\n isAgentNode(node) ||\n isFunctionNode(node) ||\n isCheckNode(node) ||\n isSubpromptNode(node) ||\n isGateNode(node) ||\n isRouterNode(node) ||\n isSubFlowNode(node)\n );\n}\n\n/** @deprecated Use {@link isActiveRuntimeNode}; gates are active but nobody executes them. */\nexport const isExecutableNode = isActiveRuntimeNode;\n\n/** Returns the node's optional policy across strict v2 and legacy definitions. */\nexport function nodeIsOptional(node: FlowNode): boolean {\n return node.control?.optional ?? node.data?.optional ?? false;\n}\n\n/** Returns the node's mandatory approval policy across strict v2 and legacy definitions. */\nexport function nodeRequiresApproval(node: FlowNode): boolean {\n return node.gate?.approval === \"mandatory\" || node.data?.approval?.mandatory === true;\n}\n\n/** Returns the first declared skill requirement without making it the node identity. */\nexport function nodeSkillId(node: FlowNode): string {\n if (node.type === \"skill\") return node.data?.skill ?? node.id;\n const skillAsset = node.run?.assets?.find((asset) => asset.startsWith(\"skill:\"));\n return skillAsset?.slice(\"skill:\".length).replace(/#.*$/, \"\") ?? node.id;\n}\n\n/** Returns the user-facing node label across strict v2 and legacy definitions. */\nexport function nodeLabel(node: FlowNode): string {\n return node.label ?? node.data?.label ?? nodeSkillId(node);\n}\n\n/** Returns strict v2 run assets or the equivalent legacy declarations. */\nexport function nodeAssets(node: FlowNode): string[] {\n if (node.run?.assets) return node.run.assets;\n const legacyAssets = Array.isArray(node.data?.assets)\n ? node.data.assets.filter((asset): asset is string => typeof asset === \"string\")\n : [];\n const skill = node.type === \"skill\" && node.data?.skill ? `skill:${node.data.skill}` : undefined;\n return skill ? [skill, ...legacyAssets] : legacyAssets;\n}\n\n/**\n * Returns what executes the node, for display and grouping.\n *\n * Strict v2 `run.kind` wins, and every node reaching this through `loadFlow` has\n * one — normalization erases `type`. The legacy fallback only fires for a node\n * handed over un-normalized, so the result is not restricted to the strict v2\n * kind union. Never empty, so it is safe to render directly.\n *\n * A normalized legacy node reports the placeholder kind it became, not the kind\n * it was authored as; pair with {@link nodeIsInert} before showing it to a human.\n */\nexport function nodeRunKind(node: FlowNode): string {\n return node.run?.kind ?? node.type ?? \"unknown\";\n}\n\n/**\n * Returns whether the node is a permanently-blocked placeholder rather than a\n * step that can ever run.\n *\n * `normalizeV1` rewrites every non-executable legacy node — canvas `group`\n * containers, authored `gate`s, unknown kinds — into a router carrying\n * `contract.requires: [{ expr: \"false\" }]` and `control.optional: true`. Both are\n * normalization artifacts: the row is neither a routing step the author wrote nor\n * a step they marked skippable, so rendering either verbatim states something the\n * flow does not say. The false precondition is the surviving signal, and\n * permanent blocking is already its engine semantics.\n */\nexport function nodeIsInert(node: FlowNode): boolean {\n return hasConstantlyFalsePrecondition(node);\n}\n\n/**\n * Returns the node's first `skill:` asset reference, `#`-range included, or\n * `undefined` when the node requires no skill.\n *\n * Reads through {@link nodeAssets}, so a legacy `type: \"skill\"` node yields a\n * bare `skill:<id>` — the legacy pin lives in `data.version`, never in the ref.\n * Use {@link nodeSkillVersionPins} to read the pin itself.\n */\nexport function nodeSkillAsset(node: FlowNode): string | undefined {\n return nodeAssets(node).find((asset) => asset.startsWith(\"skill:\"));\n}\n\n/**\n * Returns every skill-version pin the node declares, ready for `validateFlowVersions`.\n *\n * Strict v2 pins ride in `run.assets` as `skill:<identity>#<range>`; the legacy\n * `type: \"skill\"` + `data.version` shape is only consulted when no asset pin is\n * present. A skill requirement without a range is *not* a version claim and\n * yields nothing — returning it would make every unpinned node fail the check.\n *\n * Gotcha: refs are parsed by hand, not through `parseAssetRef`, which throws on\n * an unscoped ref like `skill:analyze#^9.0.0`. `skillId` is the segment after the\n * last `/`, so a scoped `skill:@pub/name#range` pins `name`.\n *\n * The legacy branch is unreachable for anything loaded through `loadFlow`, which\n * normalizes `type`/`data` away. `normalizeV1` can only rebuild a `skill:` ref\n * when the node names a skill, so a legacy node pinning `data.version` with no\n * `data.skill` declares no pin at all once normalized — the same thing `skaile\n * run` has always concluded for it.\n */\nexport function nodeSkillVersionPins(node: FlowNode): FlowVersionNode[] {\n const fromAssets = nodeAssets(node).flatMap((asset) => {\n if (!asset.startsWith(\"skill:\")) return [];\n const hashIndex = asset.lastIndexOf(\"#\");\n if (hashIndex <= \"skill:\".length || hashIndex === asset.length - 1) return [];\n const identity = asset.slice(\"skill:\".length, hashIndex);\n return [\n {\n nodeId: node.id,\n skillId: identity.slice(identity.lastIndexOf(\"/\") + 1),\n requestedVersion: asset.slice(hashIndex + 1),\n },\n ];\n });\n if (fromAssets.length > 0) return fromAssets;\n if (node.type !== \"skill\" || !node.data?.version) return [];\n return [\n {\n nodeId: node.id,\n skillId: node.data.skill ?? node.id,\n requestedVersion: node.data.version,\n },\n ];\n}\n\n/** Every skill-version pin declared across a flow, in node-definition order. */\nexport function flowSkillVersionPins(flow: FlowDefinition): FlowVersionNode[] {\n return flow.nodes.flatMap((node) => nodeSkillVersionPins(node));\n}\n\n/** Returns the binding values already supplied at the node boundary. */\nexport function nodeBindings(node: FlowNode): Record<string, unknown> {\n if (node.contract?.input) return node.contract.input;\n return node.data?.parameters ?? {};\n}\n\n/** Returns the first-class instruction for a strict v2 agent or subprompt node. */\nexport function nodeInstruction(node: FlowNode): string | undefined {\n return node.run?.kind === \"agent\" || node.run?.kind === \"subprompt\"\n ? node.run.instruction\n : undefined;\n}\n\n/** Returns run-scoped defaults across strict v2 and legacy definitions. */\nexport function flowDefaults(flow: FlowDefinition): Record<string, unknown> {\n return flow.defaults ?? flow.globals ?? {};\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getProviderPreset, resolvePresetBaseUrl, expandPreset, resolveProbeUrl, buildCredentialHeaders, presetBaseUrl } from './chunk-
|
|
1
|
+
import { getProviderPreset, resolvePresetBaseUrl, expandPreset, resolveProbeUrl, buildCredentialHeaders, presetBaseUrl } from './chunk-RDTHJSGY.js';
|
|
2
2
|
import { resolveEntryBaseUrl, entryTransport, parseModelRef, registryEntries } from './chunk-MJHSLODD.js';
|
|
3
3
|
import { modelIdSchemaForTarget } from './chunk-5CYEWBPB.js';
|
|
4
4
|
|
|
@@ -323,5 +323,5 @@ function resolveModelTier(tier, sessionModel, options = {}) {
|
|
|
323
323
|
}
|
|
324
324
|
|
|
325
325
|
export { ModelTierResolutionError, PROVIDER_MODEL_TIERS, STATIC_MODELS, fetchProviderModels, getModels, getStaticModels, modelIdTargetForEntry, resolveManifestModel, resolveModelCapabilities, resolveModelTier };
|
|
326
|
-
//# sourceMappingURL=chunk-
|
|
327
|
-
//# sourceMappingURL=chunk-
|
|
326
|
+
//# sourceMappingURL=chunk-P5UQ56RA.js.map
|
|
327
|
+
//# sourceMappingURL=chunk-P5UQ56RA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../bridge/src/models.ts"],"names":[],"mappings":"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","file":"chunk-WCWFS36P.js","sourcesContent":["/**\n * Model catalog — static fallback + live provider API fetching.\n *\n * Provides `fetchProviderModels(provider, apiKey)` for live model lists and\n * `getStaticModels(provider)` as an offline fallback.\n * OMP model listing is handled by `OmpDriver.listModels()` in the bridge driver.\n */\n\nimport {\n type AIProviderCapabilities,\n type AIProviderLlmEntry,\n type AIProviderRegistry,\n entryTransport,\n type MergedAIProviderRegistry,\n parseModelRef,\n registryEntries,\n resolveEntryBaseUrl,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { type ModelIdTarget, modelIdSchemaForTarget } from \"@skaile/workspaces/types/manifests\";\nimport {\n buildCredentialHeaders,\n expandPreset,\n getProviderPreset,\n presetBaseUrl,\n resolvePresetBaseUrl,\n resolveProbeUrl,\n} from \"./provider-catalog.js\";\n\n/**\n * A single LLM model entry returned by the model catalog.\n *\n * Used by `getModels`, `getStaticModels`, and `fetchProviderModels` to represent\n * an available model for a provider.\n *\n * @docLink packages/bridge/api-reference#models\n */\nexport interface ModelEntry {\n /** Provider-specific model identifier used in API calls (e.g. `\"claude-sonnet-4-5\"`). */\n id: string;\n /** Human-readable display name for UIs and logs (e.g. `\"Claude Sonnet 4.5\"`). */\n name: string;\n}\n\n// ---------------------------------------------------------------------------\n// Provider API configs (for fetching model lists)\n// ---------------------------------------------------------------------------\n\n/** Extract ModelEntry[] from a provider's parsed models-list JSON response. */\ntype ParseModels = (body: any) => ModelEntry[];\n\n/** Humanize a model ID into a display name (e.g. \"claude-sonnet-4-6\" → \"Claude Sonnet 4 6\") */\nfunction humanize(id: string): string {\n return id\n .replace(/^accounts\\/[^/]+\\/models\\//, \"\")\n .replace(/[-_]/g, \" \")\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\n/**\n * Filter function used by providers that return the OpenAI-style /v1/models list.\n * Keeps only chat/completion models, skips embeddings, moderation, tts, whisper, dall-e, etc.\n */\nfunction isLikelyChatModel(id: string): boolean {\n const skip = /embed|moderat|tts|whisper|dall-e|davinci|babbage|ada-00|text-/i;\n return !skip.test(id);\n}\n\n// Per-provider response parsers. The endpoint URL and the credential header\n// come from the catalog preset (provider-catalog.ts), joined in\n// fetchProviderModels.\nconst PROVIDER_PARSERS: Record<string, ParseModels> = {\n anthropic: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id && !m.id.includes(\"embed\"))\n .map((m: any) => ({\n id: m.id,\n name: m.display_name ?? humanize(m.id),\n }));\n },\n openai: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id && isLikelyChatModel(m.id))\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n openrouter: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id)\n .map((m: any) => ({ id: m.id, name: m.name ?? humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n mistral: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id && isLikelyChatModel(m.id))\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n groq: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id && isLikelyChatModel(m.id))\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n deepseek: (body) => {\n const models = body?.data ?? [];\n return models\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n xai: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id && isLikelyChatModel(m.id))\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n together: (body) => {\n const models = body?.data ?? body ?? [];\n const arr = Array.isArray(models) ? models : [];\n return arr\n .filter((m: any) => m.id && m.type === \"chat\")\n .map((m: any) => ({ id: m.id, name: m.display_name ?? humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n fireworks: (body) => {\n const models = body?.data ?? [];\n return models\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n google: (body) => {\n const models = body?.models ?? [];\n return models\n .filter((m: any) => m.supportedGenerationMethods?.includes(\"generateContent\"))\n .map((m: any) => ({\n id: (m.name ?? \"\").replace(/^models\\//, \"\"),\n name: m.displayName ?? humanize(m.name ?? \"\"),\n }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n};\n\n// ---------------------------------------------------------------------------\n// Live fetch\n// ---------------------------------------------------------------------------\n\n/**\n * Result of a model-list fetch operation, with source attribution.\n *\n * Returned by {@link fetchProviderModels} and {@link getModels}. When `ok` is `false`,\n * `models` is empty and `error` describes the failure. The `source` field indicates\n * whether the list came from a live API call or the offline static catalog.\n *\n * @docLink packages/bridge/api-reference#models\n */\nexport interface FetchModelsResult {\n /** `true` when the fetch succeeded and `models` is populated. */\n ok: boolean;\n /** Fetched model list; empty on failure. */\n models: ModelEntry[];\n /** Human-readable error description when `ok` is `false`. */\n error?: string;\n /** Whether the result came from a live API call or the static fallback. */\n source: \"api\" | \"static\";\n}\n\n/**\n * Options controlling where a model-list fetch is addressed.\n *\n * @since 1.5.0\n */\nexport interface FetchModelsOptions {\n /**\n * Base URL to resolve the provider's models endpoint against — e.g. the\n * gateway a session already routes completions through. Overrides the\n * provider's `baseUrlEnv` value.\n */\n baseUrl?: string;\n /**\n * Environment consulted for the provider's base-URL env var\n * (`ANTHROPIC_BASE_URL` for `anthropic`). Defaults to `process.env`; pass an\n * explicit record to keep a call hermetic.\n */\n env?: Record<string, string | undefined>;\n}\n\n/**\n * Fetch the model list from a provider's REST API.\n *\n * Returns `{ ok: true, models, source: 'api' }` on success, or\n * `{ ok: false, models: [], error }` on any HTTP or network failure — the\n * caller should fall back to {@link getStaticModels} in that case.\n *\n * The endpoint, the credential header and the response path all come from the\n * catalog preset named by `provider` ({@link resolvePresetBaseUrl},\n * {@link resolveProbeUrl}, {@link buildCredentialHeaders}), so discovery hits\n * the same host dispatch does — including a gateway named by `baseUrl` or by\n * the vendor's own `*_BASE_URL` variable.\n *\n * @param provider - Catalog preset id (e.g. `\"anthropic\"`, `\"openai\"`, `\"google\"`).\n * @param apiKey - API key presented in the preset's credential header.\n * @param options - Optional base-URL / environment overrides.\n * @returns Resolved model list with source attribution.\n * @docLink packages/bridge/api-reference#models\n */\nexport async function fetchProviderModels(\n provider: string,\n apiKey: string,\n options: FetchModelsOptions = {},\n): Promise<FetchModelsResult> {\n const preset = getProviderPreset(provider);\n const parse = PROVIDER_PARSERS[provider];\n if (!preset || !parse) {\n return {\n ok: false,\n models: [],\n error: `No API config for provider: ${provider}`,\n source: \"static\",\n };\n }\n\n const baseUrl = resolvePresetBaseUrl(preset, {\n ...(options.baseUrl ? { baseUrl: options.baseUrl } : {}),\n env: options.env ?? process.env,\n });\n const entry = expandPreset(preset, baseUrl ? { baseUrl } : {});\n const url = resolveProbeUrl(entry);\n if (!url) {\n return {\n ok: false,\n models: [],\n error: `Provider ${provider} exposes no models endpoint`,\n source: \"static\",\n };\n }\n // Static non-secret headers (Anthropic's `anthropic-version`) plus the\n // credential carrier the preset's `auth_header` names.\n const headers = { ...entry.headers, ...buildCredentialHeaders(entry, apiKey) };\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeout);\n\n if (!response.ok) {\n return {\n ok: false,\n models: [],\n error: `API returned HTTP ${response.status}`,\n source: \"static\",\n };\n }\n\n const body = await response.json();\n const models = parse(body);\n\n return { ok: true, models, source: \"api\" };\n } catch (err: any) {\n const msg =\n err.name === \"AbortError\" ? \"Request timed out (10s)\" : (err.message ?? \"Network error\");\n return { ok: false, models: [], error: msg, source: \"static\" };\n }\n}\n\n/**\n * Get models for a provider, trying the live API first and falling back to the static catalog.\n *\n * When no `apiKey` is provided the static catalog is returned immediately without\n * a network call. When the live API fails or returns an empty list, the static\n * catalog is used as a fallback — the result's `source` field indicates which was used.\n *\n * @param provider - Provider name (e.g. `\"anthropic\"`, `\"openai\"`, `\"google\"`).\n * @param apiKey - Optional API key; omit to skip the live fetch and use the static catalog.\n * @param options - Optional base-URL / environment overrides (see {@link FetchModelsOptions}).\n * @returns Resolved model list with source attribution.\n * @docLink packages/bridge/api-reference#models\n */\nexport async function getModels(\n provider: string,\n apiKey?: string,\n options: FetchModelsOptions = {},\n): Promise<FetchModelsResult> {\n if (!apiKey) {\n const models = getStaticModels(provider);\n return { ok: true, models, source: \"static\" };\n }\n\n const result = await fetchProviderModels(provider, apiKey, options);\n if (result.ok && result.models.length > 0) {\n return result;\n }\n\n // Fall back to static\n const staticModels = getStaticModels(provider);\n if (staticModels.length > 0) {\n return { ok: true, models: staticModels, source: \"static\", error: result.error };\n }\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Static catalog (offline fallback)\n// ---------------------------------------------------------------------------\n\n/**\n * Offline model catalog keyed by provider name.\n *\n * Used as a fallback by {@link getModels} when the live provider API is unreachable or\n * returns an empty list. Covers Anthropic, OpenAI, Google, Mistral, Groq, DeepSeek,\n * xAI, Together, Fireworks, and OpenRouter. Update this list when providers add new\n * models and a live fetch is not available.\n *\n * @docLink packages/bridge/api-reference#models\n */\nexport const STATIC_MODELS: Record<string, ModelEntry[]> = {\n anthropic: [\n { id: \"claude-opus-4-6\", name: \"Claude Opus 4.6\" },\n { id: \"claude-sonnet-4-6\", name: \"Claude Sonnet 4.6\" },\n { id: \"claude-haiku-4-5-20251001\", name: \"Claude Haiku 4.5\" },\n { id: \"claude-opus-4-5\", name: \"Claude Opus 4.5\" },\n { id: \"claude-sonnet-4-5\", name: \"Claude Sonnet 4.5\" },\n ],\n openai: [\n { id: \"gpt-4o\", name: \"GPT-4o\" },\n { id: \"gpt-4o-mini\", name: \"GPT-4o Mini\" },\n { id: \"gpt-4.1\", name: \"GPT-4.1\" },\n { id: \"gpt-4.1-mini\", name: \"GPT-4.1 Mini\" },\n { id: \"o3\", name: \"o3\" },\n { id: \"o4-mini\", name: \"o4-mini\" },\n ],\n google: [\n { id: \"gemini-2.5-pro\", name: \"Gemini 2.5 Pro\" },\n { id: \"gemini-2.5-flash\", name: \"Gemini 2.5 Flash\" },\n { id: \"gemini-2.0-flash\", name: \"Gemini 2.0 Flash\" },\n ],\n mistral: [\n { id: \"mistral-large-latest\", name: \"Mistral Large\" },\n { id: \"mistral-small-latest\", name: \"Mistral Small\" },\n { id: \"codestral-latest\", name: \"Codestral\" },\n ],\n groq: [\n { id: \"llama-3.3-70b-versatile\", name: \"Llama 3.3 70B\" },\n { id: \"llama-3.1-8b-instant\", name: \"Llama 3.1 8B\" },\n { id: \"mixtral-8x7b-32768\", name: \"Mixtral 8x7B\" },\n ],\n deepseek: [\n { id: \"deepseek-chat\", name: \"DeepSeek Chat\" },\n { id: \"deepseek-reasoner\", name: \"DeepSeek Reasoner\" },\n ],\n xai: [\n { id: \"grok-3\", name: \"Grok 3\" },\n { id: \"grok-3-mini\", name: \"Grok 3 Mini\" },\n ],\n together: [\n { id: \"meta-llama/Llama-3.3-70B-Instruct-Turbo\", name: \"Llama 3.3 70B Turbo\" },\n { id: \"mistralai/Mixtral-8x7B-Instruct-v0.1\", name: \"Mixtral 8x7B\" },\n ],\n fireworks: [\n { id: \"accounts/fireworks/models/llama-v3p3-70b-instruct\", name: \"Llama 3.3 70B\" },\n { id: \"accounts/fireworks/models/deepseek-v3\", name: \"DeepSeek v3\" },\n ],\n openrouter: [\n { id: \"anthropic/claude-sonnet-4.6\", name: \"Claude Sonnet 4.6\" },\n { id: \"anthropic/claude-opus-4.6\", name: \"Claude Opus 4.6\" },\n { id: \"anthropic/claude-haiku-4.5\", name: \"Claude Haiku 4.5\" },\n { id: \"anthropic/claude-sonnet-4.5\", name: \"Claude Sonnet 4.5\" },\n { id: \"anthropic/claude-3.7-sonnet\", name: \"Claude 3.7 Sonnet\" },\n { id: \"openai/gpt-4o\", name: \"GPT-4o\" },\n { id: \"openai/gpt-4.1\", name: \"GPT-4.1\" },\n { id: \"openai/gpt-4.1-mini\", name: \"GPT-4.1 Mini\" },\n { id: \"google/gemini-2.5-pro\", name: \"Gemini 2.5 Pro\" },\n { id: \"google/gemini-2.5-flash\", name: \"Gemini 2.5 Flash\" },\n { id: \"meta-llama/llama-4-maverick\", name: \"Llama 4 Maverick\" },\n { id: \"meta-llama/llama-3.3-70b-instruct\", name: \"Llama 3.3 70B\" },\n { id: \"deepseek/deepseek-chat-v3-0324\", name: \"DeepSeek v3\" },\n { id: \"deepseek/deepseek-r1\", name: \"DeepSeek R1\" },\n { id: \"mistralai/mistral-large-2411\", name: \"Mistral Large 2\" },\n ],\n};\n\n/**\n * Get models for a specific provider from the static catalog, or empty array if unknown.\n *\n * Pure synchronous lookup — no network call. Use when the provider API is unavailable\n * or when a fast offline fallback is needed (e.g. in the UI before credentials are configured).\n *\n * @param provider - Provider name matching a key in {@link STATIC_MODELS}.\n * @returns Offline model list, or `[]` for unknown providers.\n * @docLink packages/bridge/api-reference#models\n */\nexport function getStaticModels(provider: string): ModelEntry[] {\n return STATIC_MODELS[provider] ?? [];\n}\n\n// ---------------------------------------------------------------------------\n// Registry-backed model identity (§2.4)\n// ---------------------------------------------------------------------------\n\n/** A registry in either of the two shapes consumers hold. */\nexport type ProviderRegistryView = AIProviderRegistry | MergedAIProviderRegistry;\n\n/**\n * Where a model selector is resolved. `registry` absent means no registry is\n * configured at all — every resolver here then returns `undefined` and the\n * caller keeps its pre-registry behaviour.\n */\nexport interface ModelRegistryContext {\n /** The merged registry (`mergeRegistries`), or a single layer. */\n registry?: ProviderRegistryView;\n /** `skaile.yaml` `roles`: role name → model selector (`smol` → `groq/llama-3.1-8b`). */\n roles?: Record<string, string>;\n /**\n * Entry the session already runs on. Scopes `model_map` lookups to it;\n * absent lets the selector pick in registry order.\n */\n providerId?: string;\n}\n\n/** The `llm`/`embed` entry registered under `id`, if any. */\nfunction llmEntry(registry: ProviderRegistryView, id: string): AIProviderLlmEntry | undefined {\n const entry = registryEntries(registry).find(([entryId]) => entryId === id)?.[1];\n if (!entry || (entry.kind !== \"llm\" && entry.kind !== \"embed\")) return undefined;\n return entry;\n}\n\n/**\n * The wire facts that decide which model-id vocabulary an entry enforces\n * (`modelIdSchemaForTarget`).\n *\n * `surface` and `base_url` fall back to the entry's preset: an entry written as\n * `{kind: llm, preset: anthropic}` carries neither of its own until the catalog\n * merge layer expands it, and validation must not depend on having been handed\n * a merged registry.\n */\nexport function modelIdTargetForEntry(entry: AIProviderLlmEntry): ModelIdTarget {\n const preset = entry.preset ? getProviderPreset(entry.preset) : undefined;\n const surface = entry.surface ?? preset?.surface;\n const base_url = resolveEntryBaseUrl(entry) ?? (preset ? presetBaseUrl(preset) : undefined);\n return {\n ...(surface ? { surface } : {}),\n ...(entryTransport(entry) ? { transport: entryTransport(entry) } : {}),\n ...(base_url ? { base_url } : {}),\n };\n}\n\n/** A manifest model preference resolved against the registry. */\nexport interface ResolvedManifestModel {\n /** Entry the preference routes to. */\n providerId: string;\n /** Logical id, after `@role` expansion and before `model_map`. */\n modelId?: string;\n /** Provider-side id — what goes on the wire: `model_map[modelId] ?? modelId`. */\n providerModelId?: string;\n /** Role name, when the preference was `@role`. */\n role?: string;\n /** The wire target `providerModelId` was checked against. */\n target: ModelIdTarget;\n /** Non-fatal notes: a dangling role, a disabled provider, a stale preset. */\n warnings: string[];\n /**\n * Set when `providerModelId` is not a legal id for `target` — in practice,\n * a non-Anthropic id on the first-party Anthropic Messages API. Never\n * thrown: the caller decides whether a manifest that names a model its\n * endpoint cannot serve is a warning or a failure.\n */\n error?: string;\n}\n\n/**\n * Resolve an agent manifest's `model.preferred` (or any single entry of\n * `model.fallback`) against the provider registry, then check the id it\n * produces against the selected entry's own vocabulary.\n *\n * The three selector forms — `@role`, `<providerId>/<modelId>`, bare id — are\n * resolved by `parseModelRef` (`@skaile/workspaces/core/provider-registry`),\n * which owns that grammar; this adds the per-surface id check on top.\n *\n * Returns `undefined` when there is nothing to resolve: no preference, or no\n * registry that can serve one.\n */\nexport function resolveManifestModel(\n preference: string | undefined,\n context: ModelRegistryContext = {},\n): ResolvedManifestModel | undefined {\n if (!preference || !context.registry) return undefined;\n const ref = parseModelRef(preference, context.registry, context.roles);\n if (!ref) return undefined;\n\n const entry = llmEntry(context.registry, ref.providerId);\n const target = entry ? modelIdTargetForEntry(entry) : {};\n const resolved: ResolvedManifestModel = {\n providerId: ref.providerId,\n ...(ref.modelId !== undefined ? { modelId: ref.modelId } : {}),\n ...(ref.providerModelId !== undefined ? { providerModelId: ref.providerModelId } : {}),\n ...(ref.role !== undefined ? { role: ref.role } : {}),\n target,\n warnings: [...ref.warnings],\n };\n if (ref.providerModelId === undefined) return resolved;\n\n const check = modelIdSchemaForTarget(target).safeParse(ref.providerModelId);\n if (!check.success) {\n resolved.error =\n `model \"${ref.providerModelId}\" is not valid for provider \"${ref.providerId}\" ` +\n `(surface ${target.surface ?? \"unknown\"}, transport ${target.transport ?? \"direct\"}` +\n `${target.base_url ? `, ${target.base_url}` : \"\"}): ` +\n (check.error.issues[0]?.message ?? \"invalid model id\");\n }\n return resolved;\n}\n\n/**\n * Resolve a model's capability facts — context window, thinking ceiling, tool\n * and image support — from the registry entry that serves it.\n *\n * `capabilities` is keyed by the *logical* id (the `model_map` key), so a\n * selector is resolved first and the record is read under both the logical and\n * the provider-side id. `fallback` is the caller's own per-model table (the\n * compaction window defaults, the platform's thinking limits); the entry wins\n * field by field, and a field the entry does not state falls through.\n *\n * Returns `undefined` when neither source knows anything about the model.\n */\nexport function resolveModelCapabilities(\n selector: string | undefined,\n context: ModelRegistryContext & {\n /** Per-model-id capability table consulted for fields the entry omits. */\n fallback?: Record<string, AIProviderCapabilities>;\n } = {},\n): AIProviderCapabilities | undefined {\n if (!selector) return undefined;\n const ref = context.registry\n ? parseModelRef(selector, context.registry, context.roles)\n : undefined;\n const entry = ref && context.registry ? llmEntry(context.registry, ref.providerId) : undefined;\n const ids = [ref?.modelId, ref?.providerModelId, selector].filter(\n (id): id is string => id !== undefined,\n );\n const entryCaps = ids.map((id) => entry?.capabilities?.[id]).find((caps) => caps !== undefined);\n const fallbackCaps = ids.map((id) => context.fallback?.[id]).find((caps) => caps !== undefined);\n\n const context_window = entryCaps?.context_window ?? fallbackCaps?.context_window;\n const thinking_max = entryCaps?.thinking_max ?? fallbackCaps?.thinking_max;\n const tools = entryCaps?.tools ?? fallbackCaps?.tools;\n const images = entryCaps?.images ?? fallbackCaps?.images;\n if (\n context_window === undefined &&\n thinking_max === undefined &&\n tools === undefined &&\n images === undefined\n ) {\n return undefined;\n }\n return {\n ...(context_window !== undefined ? { context_window } : {}),\n ...(thinking_max !== undefined ? { thinking_max } : {}),\n ...(tools !== undefined ? { tools } : {}),\n ...(images !== undefined ? { images } : {}),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Model tier resolution (Flow v2 `run.model`)\n// ---------------------------------------------------------------------------\n\n/** Per-tier concrete model ids for one provider. */\nexport interface ModelTierOverrides {\n small?: string;\n default?: string;\n deep?: string;\n}\n\n/**\n * Tier→model mapping per provider, for deployments with **no provider\n * registry**. This is the point of the closed `small | default | deep`\n * vocabulary: an authored flow names an intent and the runtime owns which\n * concrete model serves it, so flows stay portable across model-lineup changes.\n *\n * It is no longer the source of truth for what a tier means. Where a registry\n * exists, a tier resolves through `roles` and the selected entry's `model_map`\n * (see {@link resolveModelTier}) — which works for every provider, names the\n * ids that deployment actually serves, and is editable without a release. This\n * table survives only for the pre-registry path, where nothing else can answer\n * the question; a vendor missing from it there is a `ModelTierResolutionError`,\n * not a guess.\n *\n * These are **direct provider-API ids**. A gateway transport (Bedrock, Vertex,\n * Azure) addresses the same models by different ids — Bedrock prefixes\n * `us.anthropic.`, for instance — and that translation belongs to whoever owns\n * the deployment, not here. {@link resolveModelTier} therefore consults this\n * table only on the direct API and demands an explicit override otherwise,\n * rather than handing a gateway an id it cannot serve.\n *\n * Every id here must also appear in {@link STATIC_MODELS} — a test asserts it,\n * so the two cannot drift into naming a model the catalog disowns. That check\n * proves internal consistency only; it cannot tell you an id is still current\n * with a provider's live lineup.\n *\n * Where a provider's lineup has no genuinely distinct model for a tier, the\n * entry deliberately repeats the neighbouring one. That is a reviewable\n * property of that lineup, unlike inheriting whatever model the session\n * happened to start with — which is how `small` could silently mean Opus.\n */\nexport const PROVIDER_MODEL_TIERS: Record<string, Required<ModelTierOverrides>> = {\n anthropic: {\n small: \"claude-haiku-4-5-20251001\",\n default: \"claude-sonnet-4-6\",\n deep: \"claude-opus-4-6\",\n },\n openai: { small: \"gpt-4o-mini\", default: \"gpt-4.1\", deep: \"o3\" },\n google: { small: \"gemini-2.0-flash\", default: \"gemini-2.5-flash\", deep: \"gemini-2.5-pro\" },\n mistral: {\n small: \"mistral-small-latest\",\n default: \"mistral-large-latest\",\n deep: \"mistral-large-latest\",\n },\n groq: {\n small: \"llama-3.1-8b-instant\",\n default: \"llama-3.3-70b-versatile\",\n deep: \"llama-3.3-70b-versatile\",\n },\n deepseek: { small: \"deepseek-chat\", default: \"deepseek-chat\", deep: \"deepseek-reasoner\" },\n xai: { small: \"grok-3-mini\", default: \"grok-3\", deep: \"grok-3\" },\n together: {\n small: \"mistralai/Mixtral-8x7B-Instruct-v0.1\",\n default: \"meta-llama/Llama-3.3-70B-Instruct-Turbo\",\n deep: \"meta-llama/Llama-3.3-70B-Instruct-Turbo\",\n },\n fireworks: {\n small: \"accounts/fireworks/models/llama-v3p3-70b-instruct\",\n default: \"accounts/fireworks/models/llama-v3p3-70b-instruct\",\n deep: \"accounts/fireworks/models/deepseek-v3\",\n },\n openrouter: {\n small: \"anthropic/claude-haiku-4.5\",\n default: \"anthropic/claude-sonnet-4.6\",\n deep: \"anthropic/claude-opus-4.6\",\n },\n};\n\n/** Raised when a tier names an intent this provider cannot serve. */\nexport class ModelTierResolutionError extends Error {\n constructor(\n readonly tier: \"small\" | \"deep\",\n readonly provider: string | undefined,\n ) {\n super(\n `cannot resolve model tier \"${tier}\" for provider \"${provider ?? \"(none)\"}\": no built-in mapping and no configured override. ` +\n `Configure a \"${tier}\" model override for this provider, or author the node as model: \"default\" to inherit the session model.`,\n );\n this.name = \"ModelTierResolutionError\";\n }\n}\n\n/**\n * Resolve a tier for a deployment that has a registry: through `roles[tier]`\n * first, then the selected entry's `model_map[tier]`.\n *\n * A `model_map` **miss is a miss**. `parseModelRef` falls back to the literal\n * selector when nothing maps it, and no provider serves a model called\n * `\"small\"` — so only a genuine mapping counts, and an unmapped tier is left\n * for the caller to fail on.\n */\nfunction resolveTierThroughRegistry(\n tier: keyof ModelTierOverrides,\n options: ModelRegistryContext,\n): string | undefined {\n const { registry, roles, providerId } = options;\n if (!registry) return undefined;\n if (roles?.[tier] !== undefined) {\n const viaRole = parseModelRef(`@${tier}`, registry, roles);\n if (viaRole?.providerModelId) return viaRole.providerModelId;\n }\n const ref = parseModelRef(providerId ? `${providerId}/${tier}` : tier, registry, roles);\n if (!ref?.modelId) return undefined;\n return llmEntry(registry, ref.providerId)?.model_map?.[ref.modelId];\n}\n\n/** Options {@link resolveModelTier} reads. */\nexport interface ResolveModelTierOptions extends ModelRegistryContext {\n /** Legacy provider id, keying {@link PROVIDER_MODEL_TIERS}. */\n provider?: string;\n /** Legacy cloud transport; anything but `default` disables the built-in table. */\n cloud?: string;\n /** Per-tier ids configured for this deployment. Wins over everything. */\n overrides?: ModelTierOverrides;\n}\n\n/**\n * Resolve a Flow v2 `run.model` tier to a concrete model id.\n *\n * Precedence, highest first: a configured `overrides` entry; the registry —\n * `roles[tier]`, then the selected entry's `model_map[tier]`, which is how a\n * tier is defined for *any* provider; and finally, **only when no registry is\n * configured**, {@link PROVIDER_MODEL_TIERS} on the direct provider API.\n *\n * `\"default\"` and an absent tier **inherit `sessionModel` first**. The session\n * model is the one id known to work for this deployment — it already carries\n * whatever provider, lineup and gateway translation the host configured — so\n * preferring any table over it would silently downgrade a configured model\n * and, on a gateway transport, substitute an id that provider cannot serve.\n *\n * `\"small\"` and `\"deep\"` never fall back to `sessionModel`; when nothing above\n * resolves them they throw {@link ModelTierResolutionError}. Inheriting there\n * would run an arbitrary model behind an author's explicit request for a cheap\n * or a strong one — a cost or quality surprise that shows up only in the bill\n * or the output. Failing names it at the node instead.\n *\n * Pure: no I/O, no environment reads.\n */\nexport function resolveModelTier(\n tier: \"small\" | \"default\" | \"deep\" | undefined,\n sessionModel: string | undefined,\n options: ResolveModelTierOptions = {},\n): string | undefined {\n // Built-in ids address the provider's own API; a gateway renames them. And a\n // registry answers the question properly, so the table is its fallback only.\n const directApi = !options.cloud || options.cloud === \"default\";\n const builtIn =\n !options.registry && directApi && options.provider\n ? PROVIDER_MODEL_TIERS[options.provider]\n : undefined;\n if (tier === \"small\" || tier === \"deep\") {\n const resolved =\n options.overrides?.[tier] ?? resolveTierThroughRegistry(tier, options) ?? builtIn?.[tier];\n if (!resolved) throw new ModelTierResolutionError(tier, options.provider);\n return resolved;\n }\n return (\n options.overrides?.default ??\n sessionModel ??\n resolveTierThroughRegistry(\"default\", options) ??\n builtIn?.default\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../bridge/src/models.ts"],"names":[],"mappings":"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","file":"chunk-P5UQ56RA.js","sourcesContent":["/**\n * Model catalog — static fallback + live provider API fetching.\n *\n * Provides `fetchProviderModels(provider, apiKey)` for live model lists and\n * `getStaticModels(provider)` as an offline fallback.\n * OMP model listing is handled by `OmpDriver.listModels()` in the bridge driver.\n */\n\nimport {\n type AIProviderCapabilities,\n type AIProviderLlmEntry,\n type AIProviderRegistry,\n entryTransport,\n type MergedAIProviderRegistry,\n parseModelRef,\n registryEntries,\n resolveEntryBaseUrl,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { type ModelIdTarget, modelIdSchemaForTarget } from \"@skaile/workspaces/types/manifests\";\nimport {\n buildCredentialHeaders,\n expandPreset,\n getProviderPreset,\n presetBaseUrl,\n resolvePresetBaseUrl,\n resolveProbeUrl,\n} from \"./provider-catalog.js\";\n\n/**\n * A single LLM model entry returned by the model catalog.\n *\n * Used by `getModels`, `getStaticModels`, and `fetchProviderModels` to represent\n * an available model for a provider.\n *\n * @docLink packages/bridge/api-reference#models\n */\nexport interface ModelEntry {\n /** Provider-specific model identifier used in API calls (e.g. `\"claude-sonnet-4-5\"`). */\n id: string;\n /** Human-readable display name for UIs and logs (e.g. `\"Claude Sonnet 4.5\"`). */\n name: string;\n}\n\n// ---------------------------------------------------------------------------\n// Provider API configs (for fetching model lists)\n// ---------------------------------------------------------------------------\n\n/** Extract ModelEntry[] from a provider's parsed models-list JSON response. */\ntype ParseModels = (body: any) => ModelEntry[];\n\n/** Humanize a model ID into a display name (e.g. \"claude-sonnet-4-6\" → \"Claude Sonnet 4 6\") */\nfunction humanize(id: string): string {\n return id\n .replace(/^accounts\\/[^/]+\\/models\\//, \"\")\n .replace(/[-_]/g, \" \")\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\n/**\n * Filter function used by providers that return the OpenAI-style /v1/models list.\n * Keeps only chat/completion models, skips embeddings, moderation, tts, whisper, dall-e, etc.\n */\nfunction isLikelyChatModel(id: string): boolean {\n const skip = /embed|moderat|tts|whisper|dall-e|davinci|babbage|ada-00|text-/i;\n return !skip.test(id);\n}\n\n// Per-provider response parsers. The endpoint URL and the credential header\n// come from the catalog preset (provider-catalog.ts), joined in\n// fetchProviderModels.\nconst PROVIDER_PARSERS: Record<string, ParseModels> = {\n anthropic: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id && !m.id.includes(\"embed\"))\n .map((m: any) => ({\n id: m.id,\n name: m.display_name ?? humanize(m.id),\n }));\n },\n openai: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id && isLikelyChatModel(m.id))\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n openrouter: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id)\n .map((m: any) => ({ id: m.id, name: m.name ?? humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n mistral: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id && isLikelyChatModel(m.id))\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n groq: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id && isLikelyChatModel(m.id))\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n deepseek: (body) => {\n const models = body?.data ?? [];\n return models\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n xai: (body) => {\n const models = body?.data ?? [];\n return models\n .filter((m: any) => m.id && isLikelyChatModel(m.id))\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n together: (body) => {\n const models = body?.data ?? body ?? [];\n const arr = Array.isArray(models) ? models : [];\n return arr\n .filter((m: any) => m.id && m.type === \"chat\")\n .map((m: any) => ({ id: m.id, name: m.display_name ?? humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n fireworks: (body) => {\n const models = body?.data ?? [];\n return models\n .map((m: any) => ({ id: m.id, name: humanize(m.id) }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n google: (body) => {\n const models = body?.models ?? [];\n return models\n .filter((m: any) => m.supportedGenerationMethods?.includes(\"generateContent\"))\n .map((m: any) => ({\n id: (m.name ?? \"\").replace(/^models\\//, \"\"),\n name: m.displayName ?? humanize(m.name ?? \"\"),\n }))\n .sort((a: ModelEntry, b: ModelEntry) => a.id.localeCompare(b.id));\n },\n};\n\n// ---------------------------------------------------------------------------\n// Live fetch\n// ---------------------------------------------------------------------------\n\n/**\n * Result of a model-list fetch operation, with source attribution.\n *\n * Returned by {@link fetchProviderModels} and {@link getModels}. When `ok` is `false`,\n * `models` is empty and `error` describes the failure. The `source` field indicates\n * whether the list came from a live API call or the offline static catalog.\n *\n * @docLink packages/bridge/api-reference#models\n */\nexport interface FetchModelsResult {\n /** `true` when the fetch succeeded and `models` is populated. */\n ok: boolean;\n /** Fetched model list; empty on failure. */\n models: ModelEntry[];\n /** Human-readable error description when `ok` is `false`. */\n error?: string;\n /** Whether the result came from a live API call or the static fallback. */\n source: \"api\" | \"static\";\n}\n\n/**\n * Options controlling where a model-list fetch is addressed.\n *\n * @since 1.5.0\n */\nexport interface FetchModelsOptions {\n /**\n * Base URL to resolve the provider's models endpoint against — e.g. the\n * gateway a session already routes completions through. Overrides the\n * provider's `baseUrlEnv` value.\n */\n baseUrl?: string;\n /**\n * Environment consulted for the provider's base-URL env var\n * (`ANTHROPIC_BASE_URL` for `anthropic`). Defaults to `process.env`; pass an\n * explicit record to keep a call hermetic.\n */\n env?: Record<string, string | undefined>;\n}\n\n/**\n * Fetch the model list from a provider's REST API.\n *\n * Returns `{ ok: true, models, source: 'api' }` on success, or\n * `{ ok: false, models: [], error }` on any HTTP or network failure — the\n * caller should fall back to {@link getStaticModels} in that case.\n *\n * The endpoint, the credential header and the response path all come from the\n * catalog preset named by `provider` ({@link resolvePresetBaseUrl},\n * {@link resolveProbeUrl}, {@link buildCredentialHeaders}), so discovery hits\n * the same host dispatch does — including a gateway named by `baseUrl` or by\n * the vendor's own `*_BASE_URL` variable.\n *\n * @param provider - Catalog preset id (e.g. `\"anthropic\"`, `\"openai\"`, `\"google\"`).\n * @param apiKey - API key presented in the preset's credential header.\n * @param options - Optional base-URL / environment overrides.\n * @returns Resolved model list with source attribution.\n * @docLink packages/bridge/api-reference#models\n */\nexport async function fetchProviderModels(\n provider: string,\n apiKey: string,\n options: FetchModelsOptions = {},\n): Promise<FetchModelsResult> {\n const preset = getProviderPreset(provider);\n const parse = PROVIDER_PARSERS[provider];\n if (!preset || !parse) {\n return {\n ok: false,\n models: [],\n error: `No API config for provider: ${provider}`,\n source: \"static\",\n };\n }\n\n const baseUrl = resolvePresetBaseUrl(preset, {\n ...(options.baseUrl ? { baseUrl: options.baseUrl } : {}),\n env: options.env ?? process.env,\n });\n const entry = expandPreset(preset, baseUrl ? { baseUrl } : {});\n const url = resolveProbeUrl(entry);\n if (!url) {\n return {\n ok: false,\n models: [],\n error: `Provider ${provider} exposes no models endpoint`,\n source: \"static\",\n };\n }\n // Static non-secret headers (Anthropic's `anthropic-version`) plus the\n // credential carrier the preset's `auth_header` names.\n const headers = { ...entry.headers, ...buildCredentialHeaders(entry, apiKey) };\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeout);\n\n if (!response.ok) {\n return {\n ok: false,\n models: [],\n error: `API returned HTTP ${response.status}`,\n source: \"static\",\n };\n }\n\n const body = await response.json();\n const models = parse(body);\n\n return { ok: true, models, source: \"api\" };\n } catch (err: any) {\n const msg =\n err.name === \"AbortError\" ? \"Request timed out (10s)\" : (err.message ?? \"Network error\");\n return { ok: false, models: [], error: msg, source: \"static\" };\n }\n}\n\n/**\n * Get models for a provider, trying the live API first and falling back to the static catalog.\n *\n * When no `apiKey` is provided the static catalog is returned immediately without\n * a network call. When the live API fails or returns an empty list, the static\n * catalog is used as a fallback — the result's `source` field indicates which was used.\n *\n * @param provider - Provider name (e.g. `\"anthropic\"`, `\"openai\"`, `\"google\"`).\n * @param apiKey - Optional API key; omit to skip the live fetch and use the static catalog.\n * @param options - Optional base-URL / environment overrides (see {@link FetchModelsOptions}).\n * @returns Resolved model list with source attribution.\n * @docLink packages/bridge/api-reference#models\n */\nexport async function getModels(\n provider: string,\n apiKey?: string,\n options: FetchModelsOptions = {},\n): Promise<FetchModelsResult> {\n if (!apiKey) {\n const models = getStaticModels(provider);\n return { ok: true, models, source: \"static\" };\n }\n\n const result = await fetchProviderModels(provider, apiKey, options);\n if (result.ok && result.models.length > 0) {\n return result;\n }\n\n // Fall back to static\n const staticModels = getStaticModels(provider);\n if (staticModels.length > 0) {\n return { ok: true, models: staticModels, source: \"static\", error: result.error };\n }\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Static catalog (offline fallback)\n// ---------------------------------------------------------------------------\n\n/**\n * Offline model catalog keyed by provider name.\n *\n * Used as a fallback by {@link getModels} when the live provider API is unreachable or\n * returns an empty list. Covers Anthropic, OpenAI, Google, Mistral, Groq, DeepSeek,\n * xAI, Together, Fireworks, and OpenRouter. Update this list when providers add new\n * models and a live fetch is not available.\n *\n * @docLink packages/bridge/api-reference#models\n */\nexport const STATIC_MODELS: Record<string, ModelEntry[]> = {\n anthropic: [\n { id: \"claude-opus-4-6\", name: \"Claude Opus 4.6\" },\n { id: \"claude-sonnet-4-6\", name: \"Claude Sonnet 4.6\" },\n { id: \"claude-haiku-4-5-20251001\", name: \"Claude Haiku 4.5\" },\n { id: \"claude-opus-4-5\", name: \"Claude Opus 4.5\" },\n { id: \"claude-sonnet-4-5\", name: \"Claude Sonnet 4.5\" },\n ],\n openai: [\n { id: \"gpt-4o\", name: \"GPT-4o\" },\n { id: \"gpt-4o-mini\", name: \"GPT-4o Mini\" },\n { id: \"gpt-4.1\", name: \"GPT-4.1\" },\n { id: \"gpt-4.1-mini\", name: \"GPT-4.1 Mini\" },\n { id: \"o3\", name: \"o3\" },\n { id: \"o4-mini\", name: \"o4-mini\" },\n ],\n google: [\n { id: \"gemini-2.5-pro\", name: \"Gemini 2.5 Pro\" },\n { id: \"gemini-2.5-flash\", name: \"Gemini 2.5 Flash\" },\n { id: \"gemini-2.0-flash\", name: \"Gemini 2.0 Flash\" },\n ],\n mistral: [\n { id: \"mistral-large-latest\", name: \"Mistral Large\" },\n { id: \"mistral-small-latest\", name: \"Mistral Small\" },\n { id: \"codestral-latest\", name: \"Codestral\" },\n ],\n groq: [\n { id: \"llama-3.3-70b-versatile\", name: \"Llama 3.3 70B\" },\n { id: \"llama-3.1-8b-instant\", name: \"Llama 3.1 8B\" },\n { id: \"mixtral-8x7b-32768\", name: \"Mixtral 8x7B\" },\n ],\n deepseek: [\n { id: \"deepseek-chat\", name: \"DeepSeek Chat\" },\n { id: \"deepseek-reasoner\", name: \"DeepSeek Reasoner\" },\n ],\n xai: [\n { id: \"grok-3\", name: \"Grok 3\" },\n { id: \"grok-3-mini\", name: \"Grok 3 Mini\" },\n ],\n together: [\n { id: \"meta-llama/Llama-3.3-70B-Instruct-Turbo\", name: \"Llama 3.3 70B Turbo\" },\n { id: \"mistralai/Mixtral-8x7B-Instruct-v0.1\", name: \"Mixtral 8x7B\" },\n ],\n fireworks: [\n { id: \"accounts/fireworks/models/llama-v3p3-70b-instruct\", name: \"Llama 3.3 70B\" },\n { id: \"accounts/fireworks/models/deepseek-v3\", name: \"DeepSeek v3\" },\n ],\n openrouter: [\n { id: \"anthropic/claude-sonnet-4.6\", name: \"Claude Sonnet 4.6\" },\n { id: \"anthropic/claude-opus-4.6\", name: \"Claude Opus 4.6\" },\n { id: \"anthropic/claude-haiku-4.5\", name: \"Claude Haiku 4.5\" },\n { id: \"anthropic/claude-sonnet-4.5\", name: \"Claude Sonnet 4.5\" },\n { id: \"anthropic/claude-3.7-sonnet\", name: \"Claude 3.7 Sonnet\" },\n { id: \"openai/gpt-4o\", name: \"GPT-4o\" },\n { id: \"openai/gpt-4.1\", name: \"GPT-4.1\" },\n { id: \"openai/gpt-4.1-mini\", name: \"GPT-4.1 Mini\" },\n { id: \"google/gemini-2.5-pro\", name: \"Gemini 2.5 Pro\" },\n { id: \"google/gemini-2.5-flash\", name: \"Gemini 2.5 Flash\" },\n { id: \"meta-llama/llama-4-maverick\", name: \"Llama 4 Maverick\" },\n { id: \"meta-llama/llama-3.3-70b-instruct\", name: \"Llama 3.3 70B\" },\n { id: \"deepseek/deepseek-chat-v3-0324\", name: \"DeepSeek v3\" },\n { id: \"deepseek/deepseek-r1\", name: \"DeepSeek R1\" },\n { id: \"mistralai/mistral-large-2411\", name: \"Mistral Large 2\" },\n ],\n};\n\n/**\n * Get models for a specific provider from the static catalog, or empty array if unknown.\n *\n * Pure synchronous lookup — no network call. Use when the provider API is unavailable\n * or when a fast offline fallback is needed (e.g. in the UI before credentials are configured).\n *\n * @param provider - Provider name matching a key in {@link STATIC_MODELS}.\n * @returns Offline model list, or `[]` for unknown providers.\n * @docLink packages/bridge/api-reference#models\n */\nexport function getStaticModels(provider: string): ModelEntry[] {\n return STATIC_MODELS[provider] ?? [];\n}\n\n// ---------------------------------------------------------------------------\n// Registry-backed model identity (§2.4)\n// ---------------------------------------------------------------------------\n\n/** A registry in either of the two shapes consumers hold. */\nexport type ProviderRegistryView = AIProviderRegistry | MergedAIProviderRegistry;\n\n/**\n * Where a model selector is resolved. `registry` absent means no registry is\n * configured at all — every resolver here then returns `undefined` and the\n * caller keeps its pre-registry behaviour.\n */\nexport interface ModelRegistryContext {\n /** The merged registry (`mergeRegistries`), or a single layer. */\n registry?: ProviderRegistryView;\n /** `skaile.yaml` `roles`: role name → model selector (`smol` → `groq/llama-3.1-8b`). */\n roles?: Record<string, string>;\n /**\n * Entry the session already runs on. Scopes `model_map` lookups to it;\n * absent lets the selector pick in registry order.\n */\n providerId?: string;\n}\n\n/** The `llm`/`embed` entry registered under `id`, if any. */\nfunction llmEntry(registry: ProviderRegistryView, id: string): AIProviderLlmEntry | undefined {\n const entry = registryEntries(registry).find(([entryId]) => entryId === id)?.[1];\n if (!entry || (entry.kind !== \"llm\" && entry.kind !== \"embed\")) return undefined;\n return entry;\n}\n\n/**\n * The wire facts that decide which model-id vocabulary an entry enforces\n * (`modelIdSchemaForTarget`).\n *\n * `surface` and `base_url` fall back to the entry's preset: an entry written as\n * `{kind: llm, preset: anthropic}` carries neither of its own until the catalog\n * merge layer expands it, and validation must not depend on having been handed\n * a merged registry.\n */\nexport function modelIdTargetForEntry(entry: AIProviderLlmEntry): ModelIdTarget {\n const preset = entry.preset ? getProviderPreset(entry.preset) : undefined;\n const surface = entry.surface ?? preset?.surface;\n const base_url = resolveEntryBaseUrl(entry) ?? (preset ? presetBaseUrl(preset) : undefined);\n return {\n ...(surface ? { surface } : {}),\n ...(entryTransport(entry) ? { transport: entryTransport(entry) } : {}),\n ...(base_url ? { base_url } : {}),\n };\n}\n\n/** A manifest model preference resolved against the registry. */\nexport interface ResolvedManifestModel {\n /** Entry the preference routes to. */\n providerId: string;\n /** Logical id, after `@role` expansion and before `model_map`. */\n modelId?: string;\n /** Provider-side id — what goes on the wire: `model_map[modelId] ?? modelId`. */\n providerModelId?: string;\n /** Role name, when the preference was `@role`. */\n role?: string;\n /** The wire target `providerModelId` was checked against. */\n target: ModelIdTarget;\n /** Non-fatal notes: a dangling role, a disabled provider, a stale preset. */\n warnings: string[];\n /**\n * Set when `providerModelId` is not a legal id for `target` — in practice,\n * a non-Anthropic id on the first-party Anthropic Messages API. Never\n * thrown: the caller decides whether a manifest that names a model its\n * endpoint cannot serve is a warning or a failure.\n */\n error?: string;\n}\n\n/**\n * Resolve an agent manifest's `model.preferred` (or any single entry of\n * `model.fallback`) against the provider registry, then check the id it\n * produces against the selected entry's own vocabulary.\n *\n * The three selector forms — `@role`, `<providerId>/<modelId>`, bare id — are\n * resolved by `parseModelRef` (`@skaile/workspaces/core/provider-registry`),\n * which owns that grammar; this adds the per-surface id check on top.\n *\n * Returns `undefined` when there is nothing to resolve: no preference, or no\n * registry that can serve one.\n */\nexport function resolveManifestModel(\n preference: string | undefined,\n context: ModelRegistryContext = {},\n): ResolvedManifestModel | undefined {\n if (!preference || !context.registry) return undefined;\n const ref = parseModelRef(preference, context.registry, context.roles);\n if (!ref) return undefined;\n\n const entry = llmEntry(context.registry, ref.providerId);\n const target = entry ? modelIdTargetForEntry(entry) : {};\n const resolved: ResolvedManifestModel = {\n providerId: ref.providerId,\n ...(ref.modelId !== undefined ? { modelId: ref.modelId } : {}),\n ...(ref.providerModelId !== undefined ? { providerModelId: ref.providerModelId } : {}),\n ...(ref.role !== undefined ? { role: ref.role } : {}),\n target,\n warnings: [...ref.warnings],\n };\n if (ref.providerModelId === undefined) return resolved;\n\n const check = modelIdSchemaForTarget(target).safeParse(ref.providerModelId);\n if (!check.success) {\n resolved.error =\n `model \"${ref.providerModelId}\" is not valid for provider \"${ref.providerId}\" ` +\n `(surface ${target.surface ?? \"unknown\"}, transport ${target.transport ?? \"direct\"}` +\n `${target.base_url ? `, ${target.base_url}` : \"\"}): ` +\n (check.error.issues[0]?.message ?? \"invalid model id\");\n }\n return resolved;\n}\n\n/**\n * Resolve a model's capability facts — context window, thinking ceiling, tool\n * and image support — from the registry entry that serves it.\n *\n * `capabilities` is keyed by the *logical* id (the `model_map` key), so a\n * selector is resolved first and the record is read under both the logical and\n * the provider-side id. `fallback` is the caller's own per-model table (the\n * compaction window defaults, the platform's thinking limits); the entry wins\n * field by field, and a field the entry does not state falls through.\n *\n * Returns `undefined` when neither source knows anything about the model.\n */\nexport function resolveModelCapabilities(\n selector: string | undefined,\n context: ModelRegistryContext & {\n /** Per-model-id capability table consulted for fields the entry omits. */\n fallback?: Record<string, AIProviderCapabilities>;\n } = {},\n): AIProviderCapabilities | undefined {\n if (!selector) return undefined;\n const ref = context.registry\n ? parseModelRef(selector, context.registry, context.roles)\n : undefined;\n const entry = ref && context.registry ? llmEntry(context.registry, ref.providerId) : undefined;\n const ids = [ref?.modelId, ref?.providerModelId, selector].filter(\n (id): id is string => id !== undefined,\n );\n const entryCaps = ids.map((id) => entry?.capabilities?.[id]).find((caps) => caps !== undefined);\n const fallbackCaps = ids.map((id) => context.fallback?.[id]).find((caps) => caps !== undefined);\n\n const context_window = entryCaps?.context_window ?? fallbackCaps?.context_window;\n const thinking_max = entryCaps?.thinking_max ?? fallbackCaps?.thinking_max;\n const tools = entryCaps?.tools ?? fallbackCaps?.tools;\n const images = entryCaps?.images ?? fallbackCaps?.images;\n if (\n context_window === undefined &&\n thinking_max === undefined &&\n tools === undefined &&\n images === undefined\n ) {\n return undefined;\n }\n return {\n ...(context_window !== undefined ? { context_window } : {}),\n ...(thinking_max !== undefined ? { thinking_max } : {}),\n ...(tools !== undefined ? { tools } : {}),\n ...(images !== undefined ? { images } : {}),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Model tier resolution (Flow v2 `run.model`)\n// ---------------------------------------------------------------------------\n\n/** Per-tier concrete model ids for one provider. */\nexport interface ModelTierOverrides {\n small?: string;\n default?: string;\n deep?: string;\n}\n\n/**\n * Tier→model mapping per provider, for deployments with **no provider\n * registry**. This is the point of the closed `small | default | deep`\n * vocabulary: an authored flow names an intent and the runtime owns which\n * concrete model serves it, so flows stay portable across model-lineup changes.\n *\n * It is no longer the source of truth for what a tier means. Where a registry\n * exists, a tier resolves through `roles` and the selected entry's `model_map`\n * (see {@link resolveModelTier}) — which works for every provider, names the\n * ids that deployment actually serves, and is editable without a release. This\n * table survives only for the pre-registry path, where nothing else can answer\n * the question; a vendor missing from it there is a `ModelTierResolutionError`,\n * not a guess.\n *\n * These are **direct provider-API ids**. A gateway transport (Bedrock, Vertex,\n * Azure) addresses the same models by different ids — Bedrock prefixes\n * `us.anthropic.`, for instance — and that translation belongs to whoever owns\n * the deployment, not here. {@link resolveModelTier} therefore consults this\n * table only on the direct API and demands an explicit override otherwise,\n * rather than handing a gateway an id it cannot serve.\n *\n * Every id here must also appear in {@link STATIC_MODELS} — a test asserts it,\n * so the two cannot drift into naming a model the catalog disowns. That check\n * proves internal consistency only; it cannot tell you an id is still current\n * with a provider's live lineup.\n *\n * Where a provider's lineup has no genuinely distinct model for a tier, the\n * entry deliberately repeats the neighbouring one. That is a reviewable\n * property of that lineup, unlike inheriting whatever model the session\n * happened to start with — which is how `small` could silently mean Opus.\n */\nexport const PROVIDER_MODEL_TIERS: Record<string, Required<ModelTierOverrides>> = {\n anthropic: {\n small: \"claude-haiku-4-5-20251001\",\n default: \"claude-sonnet-4-6\",\n deep: \"claude-opus-4-6\",\n },\n openai: { small: \"gpt-4o-mini\", default: \"gpt-4.1\", deep: \"o3\" },\n google: { small: \"gemini-2.0-flash\", default: \"gemini-2.5-flash\", deep: \"gemini-2.5-pro\" },\n mistral: {\n small: \"mistral-small-latest\",\n default: \"mistral-large-latest\",\n deep: \"mistral-large-latest\",\n },\n groq: {\n small: \"llama-3.1-8b-instant\",\n default: \"llama-3.3-70b-versatile\",\n deep: \"llama-3.3-70b-versatile\",\n },\n deepseek: { small: \"deepseek-chat\", default: \"deepseek-chat\", deep: \"deepseek-reasoner\" },\n xai: { small: \"grok-3-mini\", default: \"grok-3\", deep: \"grok-3\" },\n together: {\n small: \"mistralai/Mixtral-8x7B-Instruct-v0.1\",\n default: \"meta-llama/Llama-3.3-70B-Instruct-Turbo\",\n deep: \"meta-llama/Llama-3.3-70B-Instruct-Turbo\",\n },\n fireworks: {\n small: \"accounts/fireworks/models/llama-v3p3-70b-instruct\",\n default: \"accounts/fireworks/models/llama-v3p3-70b-instruct\",\n deep: \"accounts/fireworks/models/deepseek-v3\",\n },\n openrouter: {\n small: \"anthropic/claude-haiku-4.5\",\n default: \"anthropic/claude-sonnet-4.6\",\n deep: \"anthropic/claude-opus-4.6\",\n },\n};\n\n/** Raised when a tier names an intent this provider cannot serve. */\nexport class ModelTierResolutionError extends Error {\n constructor(\n readonly tier: \"small\" | \"deep\",\n readonly provider: string | undefined,\n ) {\n super(\n `cannot resolve model tier \"${tier}\" for provider \"${provider ?? \"(none)\"}\": no built-in mapping and no configured override. ` +\n `Configure a \"${tier}\" model override for this provider, or author the node as model: \"default\" to inherit the session model.`,\n );\n this.name = \"ModelTierResolutionError\";\n }\n}\n\n/**\n * Resolve a tier for a deployment that has a registry: through `roles[tier]`\n * first, then the selected entry's `model_map[tier]`.\n *\n * A `model_map` **miss is a miss**. `parseModelRef` falls back to the literal\n * selector when nothing maps it, and no provider serves a model called\n * `\"small\"` — so only a genuine mapping counts, and an unmapped tier is left\n * for the caller to fail on.\n */\nfunction resolveTierThroughRegistry(\n tier: keyof ModelTierOverrides,\n options: ModelRegistryContext,\n): string | undefined {\n const { registry, roles, providerId } = options;\n if (!registry) return undefined;\n if (roles?.[tier] !== undefined) {\n const viaRole = parseModelRef(`@${tier}`, registry, roles);\n if (viaRole?.providerModelId) return viaRole.providerModelId;\n }\n const ref = parseModelRef(providerId ? `${providerId}/${tier}` : tier, registry, roles);\n if (!ref?.modelId) return undefined;\n return llmEntry(registry, ref.providerId)?.model_map?.[ref.modelId];\n}\n\n/** Options {@link resolveModelTier} reads. */\nexport interface ResolveModelTierOptions extends ModelRegistryContext {\n /** Legacy provider id, keying {@link PROVIDER_MODEL_TIERS}. */\n provider?: string;\n /** Legacy cloud transport; anything but `default` disables the built-in table. */\n cloud?: string;\n /** Per-tier ids configured for this deployment. Wins over everything. */\n overrides?: ModelTierOverrides;\n}\n\n/**\n * Resolve a Flow v2 `run.model` tier to a concrete model id.\n *\n * Precedence, highest first: a configured `overrides` entry; the registry —\n * `roles[tier]`, then the selected entry's `model_map[tier]`, which is how a\n * tier is defined for *any* provider; and finally, **only when no registry is\n * configured**, {@link PROVIDER_MODEL_TIERS} on the direct provider API.\n *\n * `\"default\"` and an absent tier **inherit `sessionModel` first**. The session\n * model is the one id known to work for this deployment — it already carries\n * whatever provider, lineup and gateway translation the host configured — so\n * preferring any table over it would silently downgrade a configured model\n * and, on a gateway transport, substitute an id that provider cannot serve.\n *\n * `\"small\"` and `\"deep\"` never fall back to `sessionModel`; when nothing above\n * resolves them they throw {@link ModelTierResolutionError}. Inheriting there\n * would run an arbitrary model behind an author's explicit request for a cheap\n * or a strong one — a cost or quality surprise that shows up only in the bill\n * or the output. Failing names it at the node instead.\n *\n * Pure: no I/O, no environment reads.\n */\nexport function resolveModelTier(\n tier: \"small\" | \"default\" | \"deep\" | undefined,\n sessionModel: string | undefined,\n options: ResolveModelTierOptions = {},\n): string | undefined {\n // Built-in ids address the provider's own API; a gateway renames them. And a\n // registry answers the question properly, so the table is its fallback only.\n const directApi = !options.cloud || options.cloud === \"default\";\n const builtIn =\n !options.registry && directApi && options.provider\n ? PROVIDER_MODEL_TIERS[options.provider]\n : undefined;\n if (tier === \"small\" || tier === \"deep\") {\n const resolved =\n options.overrides?.[tier] ?? resolveTierThroughRegistry(tier, options) ?? builtIn?.[tier];\n if (!resolved) throw new ModelTierResolutionError(tier, options.provider);\n return resolved;\n }\n return (\n options.overrides?.default ??\n sessionModel ??\n resolveTierThroughRegistry(\"default\", options) ??\n builtIn?.default\n );\n}\n"]}
|
|
@@ -798,6 +798,19 @@ function resolveFlowBindings(bindings, context, nodeOutputOrigin = {}, flowInput
|
|
|
798
798
|
}
|
|
799
799
|
return { values, origins };
|
|
800
800
|
}
|
|
801
|
+
var MISSING_FIELD = /* @__PURE__ */ Symbol("missing-field");
|
|
802
|
+
function declaredFieldSchema(schema, path) {
|
|
803
|
+
let current = schema;
|
|
804
|
+
for (const segment of path) {
|
|
805
|
+
if (typeof current !== "object" || current === null) return MISSING_FIELD;
|
|
806
|
+
const properties = current.properties;
|
|
807
|
+
if (typeof properties !== "object" || properties === null || !Object.hasOwn(properties, segment)) {
|
|
808
|
+
return MISSING_FIELD;
|
|
809
|
+
}
|
|
810
|
+
current = properties[segment];
|
|
811
|
+
}
|
|
812
|
+
return current;
|
|
813
|
+
}
|
|
801
814
|
function consumerExpressions(node) {
|
|
802
815
|
const expressions = (node.contract?.requires ?? []).map(({ expr }) => expr);
|
|
803
816
|
expressions.push(...collectFlowBindingExpressions(node.contract?.input));
|
|
@@ -806,20 +819,33 @@ function consumerExpressions(node) {
|
|
|
806
819
|
}
|
|
807
820
|
return expressions;
|
|
808
821
|
}
|
|
809
|
-
function readsProducerOutput(
|
|
810
|
-
return
|
|
822
|
+
function readsProducerOutput(expressions, producerId) {
|
|
823
|
+
return expressions.some(
|
|
811
824
|
(expression) => inspectFlowExpression(expression, false).some(
|
|
812
825
|
({ path }) => path.startsWith(`nodes.${producerId}.output.fields.`)
|
|
813
826
|
)
|
|
814
827
|
);
|
|
815
828
|
}
|
|
829
|
+
function consumedOutputFieldPaths(flow, producerId) {
|
|
830
|
+
const prefix = `nodes.${producerId}.output.fields.`;
|
|
831
|
+
const expressions = flow.nodes.filter(({ id }) => id !== producerId).flatMap(consumerExpressions);
|
|
832
|
+
expressions.push(...collectFlowBindingExpressions(flow.output?.bindings));
|
|
833
|
+
const paths = /* @__PURE__ */ new Map();
|
|
834
|
+
for (const expression of expressions) {
|
|
835
|
+
for (const { path } of inspectFlowExpression(expression, false)) {
|
|
836
|
+
if (path.startsWith(prefix)) paths.set(path, path.slice(prefix.length).split("."));
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
return [...paths.values()];
|
|
840
|
+
}
|
|
816
841
|
function getConsumedOutputSchema(flow, producerId) {
|
|
817
842
|
const producer = flow.nodes.find(({ id }) => id === producerId);
|
|
818
843
|
const schema = producer?.contract?.output?.fields;
|
|
819
844
|
if (!schema) return void 0;
|
|
820
|
-
|
|
821
|
-
(consumer) => consumer.id !== producerId && readsProducerOutput(consumer, producerId)
|
|
822
|
-
)
|
|
845
|
+
const consumed = flow.nodes.some(
|
|
846
|
+
(consumer) => consumer.id !== producerId && readsProducerOutput(consumerExpressions(consumer), producerId)
|
|
847
|
+
) || readsProducerOutput(collectFlowBindingExpressions(flow.output?.bindings), producerId);
|
|
848
|
+
return consumed ? schema : void 0;
|
|
823
849
|
}
|
|
824
850
|
function compileOutputFieldsSchema(schema) {
|
|
825
851
|
return z2.fromJSONSchema(schema);
|
|
@@ -848,19 +874,6 @@ var nodeBindings = z2.preprocess(
|
|
|
848
874
|
},
|
|
849
875
|
z2.record(bindingName, jsonValue())
|
|
850
876
|
);
|
|
851
|
-
var MISSING_FIELD = /* @__PURE__ */ Symbol("missing-field");
|
|
852
|
-
function declaredFieldSchema(schema, path) {
|
|
853
|
-
let current = schema;
|
|
854
|
-
for (const segment of path) {
|
|
855
|
-
if (typeof current !== "object" || current === null) return MISSING_FIELD;
|
|
856
|
-
const properties = current.properties;
|
|
857
|
-
if (typeof properties !== "object" || properties === null || !Object.hasOwn(properties, segment)) {
|
|
858
|
-
return MISSING_FIELD;
|
|
859
|
-
}
|
|
860
|
-
current = properties[segment];
|
|
861
|
-
}
|
|
862
|
-
return current;
|
|
863
|
-
}
|
|
864
877
|
var FlowInputContractSchema = z2.strictObject({
|
|
865
878
|
schema: jsonSchema,
|
|
866
879
|
example: jsonValue().optional(),
|
|
@@ -877,7 +890,28 @@ var FlowInputContractSchema = z2.strictObject({
|
|
|
877
890
|
}
|
|
878
891
|
});
|
|
879
892
|
var FlowOutputContractSchema = z2.strictObject({
|
|
880
|
-
schema: jsonSchema
|
|
893
|
+
schema: jsonSchema,
|
|
894
|
+
bindings: nodeBindings.optional()
|
|
895
|
+
}).superRefine((output, context) => {
|
|
896
|
+
if (output.bindings === void 0) return;
|
|
897
|
+
const properties = output.schema.properties;
|
|
898
|
+
const declared = typeof properties === "object" && properties !== null && !Array.isArray(properties) ? Object.keys(properties) : [];
|
|
899
|
+
for (const name of declared) {
|
|
900
|
+
if (Object.hasOwn(output.bindings, name)) continue;
|
|
901
|
+
context.addIssue({
|
|
902
|
+
code: "custom",
|
|
903
|
+
path: ["bindings"],
|
|
904
|
+
message: `output property ${name} has no binding; bind every output.schema property or omit bindings`
|
|
905
|
+
});
|
|
906
|
+
}
|
|
907
|
+
for (const name of Object.keys(output.bindings)) {
|
|
908
|
+
if (declared.includes(name)) continue;
|
|
909
|
+
context.addIssue({
|
|
910
|
+
code: "custom",
|
|
911
|
+
path: ["bindings", name],
|
|
912
|
+
message: `output binding ${name} has no property in output.schema`
|
|
913
|
+
});
|
|
914
|
+
}
|
|
881
915
|
});
|
|
882
916
|
var PreconditionSchema = z2.strictObject({
|
|
883
917
|
expr: nonEmptyString,
|
|
@@ -1252,6 +1286,11 @@ var FlowDefinitionSchema = FlowDefinitionObjectSchema.superRefine((flow, context
|
|
|
1252
1286
|
}
|
|
1253
1287
|
}
|
|
1254
1288
|
}
|
|
1289
|
+
for (const [bindingName2, binding] of Object.entries(flow.output?.bindings ?? {})) {
|
|
1290
|
+
for (const expression of collectFlowBindingExpressions(binding)) {
|
|
1291
|
+
validateExpression(expression, ["output", "bindings", bindingName2], false);
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1255
1294
|
validateClassifierRules(flow, context);
|
|
1256
1295
|
validateConsumedOutputSchemasCompile(flow, context);
|
|
1257
1296
|
const state = /* @__PURE__ */ new Map();
|
|
@@ -1399,8 +1438,16 @@ function validateClassifierRules(flow, context) {
|
|
|
1399
1438
|
});
|
|
1400
1439
|
}
|
|
1401
1440
|
}
|
|
1441
|
+
for (const [bindingName2, binding] of Object.entries(flow.output?.bindings ?? {})) {
|
|
1442
|
+
if (!collectFlowBindingExpressions(binding).some(readsReserved)) continue;
|
|
1443
|
+
context.addIssue({
|
|
1444
|
+
code: "custom",
|
|
1445
|
+
path: ["output", "bindings", bindingName2],
|
|
1446
|
+
message: "an output binding cannot return a classifier's confidence or calibrated; return the classifier's answer and branch on it inside this flow or in the parent"
|
|
1447
|
+
});
|
|
1448
|
+
}
|
|
1402
1449
|
}
|
|
1403
1450
|
|
|
1404
|
-
export { FLOW_CAPTURE_CHANNELS, FLOW_CAPTURE_DESTINATION_PATTERN, FLOW_EXPRESSION_LIMITS, FlowDefinitionSchema, FlowExpressionError, InputSchema, RESERVED_CLASSIFIER_FIELDS, captureDestinationFieldName, checkClassifierShape, classifierDecision, compileOutputFieldsSchema, declaresReservedClassifierField, duplicateCaptureDestinationMessage, evaluate, evaluateFlowExpression, getConsumedOutputSchema, hasConstantlyFalsePrecondition, inspectFlowExpressionComparisons, invalidCaptureDestinationMessage, invalidOutputFieldsSchemaMessage, parseFlowDefinitionStructure, resolveFlowBindings, stableFlowJson, withoutReservedClassifierFields };
|
|
1405
|
-
//# sourceMappingURL=chunk-
|
|
1406
|
-
//# sourceMappingURL=chunk-
|
|
1451
|
+
export { FLOW_CAPTURE_CHANNELS, FLOW_CAPTURE_DESTINATION_PATTERN, FLOW_EXPRESSION_LIMITS, FlowDefinitionSchema, FlowExpressionError, InputSchema, MISSING_FIELD, RESERVED_CLASSIFIER_FIELDS, captureDestinationFieldName, checkClassifierShape, classifierDecision, compileOutputFieldsSchema, consumedOutputFieldPaths, declaredFieldSchema, declaresReservedClassifierField, duplicateCaptureDestinationMessage, evaluate, evaluateFlowExpression, getConsumedOutputSchema, hasConstantlyFalsePrecondition, inspectFlowExpressionComparisons, invalidCaptureDestinationMessage, invalidOutputFieldsSchemaMessage, parseFlowDefinitionStructure, resolveFlowBindings, stableFlowJson, withoutReservedClassifierFields };
|
|
1452
|
+
//# sourceMappingURL=chunk-QCI6D7E4.js.map
|
|
1453
|
+
//# sourceMappingURL=chunk-QCI6D7E4.js.map
|