@bolt-foundry/gambit 0.8.3 → 0.8.5-rc.5
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 +38 -2
- package/README.md +79 -16
- package/esm/_dnt.polyfills.d.ts +17 -0
- package/esm/_dnt.polyfills.d.ts.map +1 -1
- package/esm/_dnt.polyfills.js +122 -0
- package/esm/deps/jsr.io/@std/collections/1.1.5/deep_merge.d.ts +322 -0
- package/esm/deps/jsr.io/@std/collections/1.1.5/deep_merge.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.1.5/deep_merge.js +105 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.d.ts +14 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.js +34 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.d.ts +13 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.js +18 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_is_same_path.d.ts +10 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_is_same_path.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_is_same_path.js +17 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_is_subdir.d.ts +12 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_is_subdir.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_is_subdir.js +25 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_to_path_string.d.ts +9 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_to_path_string.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/_to_path_string.js +13 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/copy.d.ts +117 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/copy.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/copy.js +313 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/empty_dir.d.ts +48 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/empty_dir.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/empty_dir.js +87 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_dir.d.ts +49 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_dir.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_dir.js +102 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_file.d.ts +47 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_file.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_file.js +90 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_link.d.ts +49 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_link.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_link.js +61 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.d.ts +70 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.js +156 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/eol.d.ts +52 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/eol.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/eol.js +67 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/exists.d.ts +218 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/exists.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/exists.js +271 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/expand_glob.d.ts +267 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/expand_glob.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/expand_glob.js +442 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/mod.d.ts +29 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/mod.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/mod.js +29 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/move.d.ts +86 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/move.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/move.js +142 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/walk.d.ts +777 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/walk.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.22/walk.js +846 -0
- package/esm/deps/jsr.io/@std/json/1.0.2/types.d.ts +5 -0
- package/esm/deps/jsr.io/@std/json/1.0.2/types.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/json/1.0.2/types.js +3 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts +20 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/mod.js +21 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts +21 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/jsonc/1.0.2/parse.js +320 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts +93 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.js +753 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/mod.d.ts +109 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/mod.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/mod.js +110 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/parse.d.ts +21 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/parse.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/parse.js +25 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts +35 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/toml/1.0.11/stringify.js +283 -0
- package/esm/gambit/simulator-ui/dist/bundle.js +10639 -4629
- package/esm/gambit/simulator-ui/dist/bundle.js.map +4 -4
- package/esm/mod.d.ts +13 -3
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +8 -2
- package/esm/src/cli_utils.d.ts +1 -0
- package/esm/src/cli_utils.d.ts.map +1 -1
- package/esm/src/cli_utils.js +13 -1
- package/esm/src/default_runtime.d.ts +46 -0
- package/esm/src/default_runtime.d.ts.map +1 -0
- package/esm/src/default_runtime.js +415 -0
- package/esm/src/durable_streams.js +26 -1
- package/esm/src/model_matchers.d.ts +10 -0
- package/esm/src/model_matchers.d.ts.map +1 -0
- package/esm/src/model_matchers.js +26 -0
- package/esm/src/openai_compat.d.ts +12 -1
- package/esm/src/openai_compat.d.ts.map +1 -1
- package/esm/src/openai_compat.js +53 -1
- package/esm/src/project_config.d.ts +47 -0
- package/esm/src/project_config.d.ts.map +1 -0
- package/esm/src/project_config.js +134 -0
- package/esm/src/providers/codex.d.ts +37 -0
- package/esm/src/providers/codex.d.ts.map +1 -0
- package/esm/src/providers/codex.js +810 -0
- package/esm/src/providers/google.d.ts +3 -1
- package/esm/src/providers/google.d.ts.map +1 -1
- package/esm/src/providers/google.js +82 -6
- package/esm/src/providers/ollama.d.ts +3 -1
- package/esm/src/providers/ollama.d.ts.map +1 -1
- package/esm/src/providers/ollama.js +238 -15
- package/esm/src/providers/openrouter.d.ts +6 -2
- package/esm/src/providers/openrouter.d.ts.map +1 -1
- package/esm/src/providers/openrouter.js +260 -23
- package/esm/src/providers/router.d.ts +19 -0
- package/esm/src/providers/router.d.ts.map +1 -0
- package/esm/src/providers/router.js +93 -0
- package/esm/src/server.d.ts +9 -0
- package/esm/src/server.d.ts.map +1 -1
- package/esm/src/server.js +3186 -652
- package/esm/src/server_feedback_grading_routes.d.ts +32 -0
- package/esm/src/server_feedback_grading_routes.d.ts.map +1 -0
- package/esm/src/server_feedback_grading_routes.js +305 -0
- package/esm/src/server_helpers.d.ts +4 -0
- package/esm/src/server_helpers.d.ts.map +1 -0
- package/esm/src/server_helpers.js +46 -0
- package/esm/src/server_session_store.d.ts +87 -0
- package/esm/src/server_session_store.d.ts.map +1 -0
- package/esm/src/server_session_store.js +873 -0
- package/esm/src/server_types.d.ts +110 -0
- package/esm/src/server_types.d.ts.map +1 -0
- package/esm/src/server_types.js +1 -0
- package/esm/src/server_ui_routes.d.ts +33 -0
- package/esm/src/server_ui_routes.d.ts.map +1 -0
- package/esm/src/server_ui_routes.js +135 -0
- package/esm/src/session_artifacts.d.ts +22 -0
- package/esm/src/session_artifacts.d.ts.map +1 -0
- package/esm/src/session_artifacts.js +243 -0
- package/esm/src/trace.d.ts.map +1 -1
- package/esm/src/trace.js +6 -3
- package/esm/src/workspace.d.ts +19 -0
- package/esm/src/workspace.d.ts.map +1 -0
- package/esm/src/workspace.js +164 -0
- package/esm/src/workspace_contract.d.ts +76 -0
- package/esm/src/workspace_contract.d.ts.map +1 -0
- package/esm/src/workspace_contract.js +74 -0
- package/package.json +2 -2
- package/script/_dnt.polyfills.d.ts +17 -0
- package/script/_dnt.polyfills.d.ts.map +1 -1
- package/script/_dnt.polyfills.js +122 -0
- package/script/deps/jsr.io/@std/collections/1.1.5/deep_merge.d.ts +322 -0
- package/script/deps/jsr.io/@std/collections/1.1.5/deep_merge.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/collections/1.1.5/deep_merge.js +108 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.d.ts +14 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_create_walk_entry.js +71 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.d.ts +13 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_get_file_info_type.js +21 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_is_same_path.d.ts +10 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_is_same_path.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_is_same_path.js +20 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_is_subdir.d.ts +12 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_is_subdir.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_is_subdir.js +28 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_to_path_string.d.ts +9 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_to_path_string.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/_to_path_string.js +16 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/copy.d.ts +117 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/copy.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/copy.js +350 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/empty_dir.d.ts +48 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/empty_dir.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/empty_dir.js +124 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_dir.d.ts +49 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_dir.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_dir.js +139 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_file.d.ts +47 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_file.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_file.js +127 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_link.d.ts +49 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_link.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_link.js +98 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.d.ts +70 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/ensure_symlink.js +193 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/eol.d.ts +52 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/eol.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/eol.js +105 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/exists.d.ts +218 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/exists.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/exists.js +308 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/expand_glob.d.ts +267 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/expand_glob.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/expand_glob.js +479 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/mod.d.ts +29 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/mod.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/mod.js +45 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/move.d.ts +86 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/move.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/move.js +179 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/walk.d.ts +777 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/walk.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.22/walk.js +883 -0
- package/script/deps/jsr.io/@std/json/1.0.2/types.d.ts +5 -0
- package/script/deps/jsr.io/@std/json/1.0.2/types.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/json/1.0.2/types.js +4 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts +20 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/mod.js +37 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts +21 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/jsonc/1.0.2/parse.js +323 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts +93 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/_parser.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/_parser.js +781 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/mod.d.ts +109 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/mod.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/mod.js +126 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/parse.d.ts +21 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/parse.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/parse.js +28 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts +35 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/stringify.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/toml/1.0.11/stringify.js +286 -0
- package/script/gambit/simulator-ui/dist/bundle.js +10639 -4629
- package/script/gambit/simulator-ui/dist/bundle.js.map +4 -4
- package/script/mod.d.ts +13 -3
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +14 -5
- package/script/src/cli_utils.d.ts +1 -0
- package/script/src/cli_utils.d.ts.map +1 -1
- package/script/src/cli_utils.js +14 -1
- package/script/src/default_runtime.d.ts +46 -0
- package/script/src/default_runtime.d.ts.map +1 -0
- package/script/src/default_runtime.js +452 -0
- package/script/src/durable_streams.js +26 -1
- package/script/src/model_matchers.d.ts +10 -0
- package/script/src/model_matchers.d.ts.map +1 -0
- package/script/src/model_matchers.js +29 -0
- package/script/src/openai_compat.d.ts +12 -1
- package/script/src/openai_compat.d.ts.map +1 -1
- package/script/src/openai_compat.js +85 -0
- package/script/src/project_config.d.ts +47 -0
- package/script/src/project_config.d.ts.map +1 -0
- package/script/src/project_config.js +173 -0
- package/script/src/providers/codex.d.ts +37 -0
- package/script/src/providers/codex.d.ts.map +1 -0
- package/script/src/providers/codex.js +850 -0
- package/script/src/providers/google.d.ts +3 -1
- package/script/src/providers/google.d.ts.map +1 -1
- package/script/src/providers/google.js +82 -6
- package/script/src/providers/ollama.d.ts +3 -1
- package/script/src/providers/ollama.d.ts.map +1 -1
- package/script/src/providers/ollama.js +238 -15
- package/script/src/providers/openrouter.d.ts +6 -2
- package/script/src/providers/openrouter.d.ts.map +1 -1
- package/script/src/providers/openrouter.js +260 -23
- package/script/src/providers/router.d.ts +19 -0
- package/script/src/providers/router.d.ts.map +1 -0
- package/script/src/providers/router.js +96 -0
- package/script/src/server.d.ts +9 -0
- package/script/src/server.d.ts.map +1 -1
- package/script/src/server.js +3193 -659
- package/script/src/server_feedback_grading_routes.d.ts +32 -0
- package/script/src/server_feedback_grading_routes.d.ts.map +1 -0
- package/script/src/server_feedback_grading_routes.js +343 -0
- package/script/src/server_helpers.d.ts +4 -0
- package/script/src/server_helpers.d.ts.map +1 -0
- package/script/src/server_helpers.js +84 -0
- package/script/src/server_session_store.d.ts +87 -0
- package/script/src/server_session_store.d.ts.map +1 -0
- package/script/src/server_session_store.js +910 -0
- package/script/src/server_types.d.ts +110 -0
- package/script/src/server_types.d.ts.map +1 -0
- package/script/src/server_types.js +2 -0
- package/script/src/server_ui_routes.d.ts +33 -0
- package/script/src/server_ui_routes.d.ts.map +1 -0
- package/script/src/server_ui_routes.js +172 -0
- package/script/src/session_artifacts.d.ts +22 -0
- package/script/src/session_artifacts.d.ts.map +1 -0
- package/script/src/session_artifacts.js +279 -0
- package/script/src/trace.d.ts.map +1 -1
- package/script/src/trace.js +6 -3
- package/script/src/workspace.d.ts +19 -0
- package/script/src/workspace.d.ts.map +1 -0
- package/script/src/workspace.js +201 -0
- package/script/src/workspace_contract.d.ts +76 -0
- package/script/src/workspace_contract.d.ts.map +1 -0
- package/script/src/workspace_contract.js +82 -0
|
@@ -45,11 +45,16 @@ function isAsyncIterable(value) {
|
|
|
45
45
|
function mapUsage(usage) {
|
|
46
46
|
if (!usage)
|
|
47
47
|
return undefined;
|
|
48
|
-
|
|
48
|
+
const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? undefined;
|
|
49
|
+
const out = {
|
|
49
50
|
promptTokens: usage.input_tokens ?? 0,
|
|
50
51
|
completionTokens: usage.output_tokens ?? 0,
|
|
51
52
|
totalTokens: usage.total_tokens ?? 0,
|
|
52
53
|
};
|
|
54
|
+
if (typeof reasoningTokens === "number") {
|
|
55
|
+
out.reasoningTokens = reasoningTokens;
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
53
58
|
}
|
|
54
59
|
function mapStatus(status) {
|
|
55
60
|
if (!status)
|
|
@@ -60,6 +65,25 @@ function mapStatus(status) {
|
|
|
60
65
|
return "in_progress";
|
|
61
66
|
return "failed";
|
|
62
67
|
}
|
|
68
|
+
function mapReasoning(reasoning) {
|
|
69
|
+
if (!reasoning)
|
|
70
|
+
return undefined;
|
|
71
|
+
const out = {};
|
|
72
|
+
if (reasoning.effort !== undefined)
|
|
73
|
+
out.effort = reasoning.effort;
|
|
74
|
+
if (reasoning.summary !== undefined)
|
|
75
|
+
out.summary = reasoning.summary;
|
|
76
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
77
|
+
}
|
|
78
|
+
function stripUndefined(input) {
|
|
79
|
+
const out = { ...input };
|
|
80
|
+
for (const [key, value] of Object.entries(out)) {
|
|
81
|
+
if (value === undefined) {
|
|
82
|
+
delete out[key];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return out;
|
|
86
|
+
}
|
|
63
87
|
function mapError(error) {
|
|
64
88
|
if (!error)
|
|
65
89
|
return undefined;
|
|
@@ -140,20 +164,45 @@ function appendSyntheticTools(tools, input) {
|
|
|
140
164
|
function mapToolChoice(toolChoice) {
|
|
141
165
|
if (!toolChoice)
|
|
142
166
|
return undefined;
|
|
143
|
-
if (toolChoice === "
|
|
167
|
+
if (toolChoice === "none" || toolChoice === "auto" ||
|
|
168
|
+
toolChoice === "required") {
|
|
144
169
|
return toolChoice;
|
|
170
|
+
}
|
|
171
|
+
if (toolChoice.type === "allowed_tools") {
|
|
172
|
+
return {
|
|
173
|
+
type: "allowed_tools",
|
|
174
|
+
tools: toolChoice.tools,
|
|
175
|
+
mode: toolChoice.mode ?? "auto",
|
|
176
|
+
};
|
|
177
|
+
}
|
|
145
178
|
return { type: "function", name: toolChoice.function.name };
|
|
146
179
|
}
|
|
180
|
+
function mapResponseContentPart(part) {
|
|
181
|
+
if (!part || typeof part !== "object")
|
|
182
|
+
return null;
|
|
183
|
+
if (typeof part.text !== "string")
|
|
184
|
+
return null;
|
|
185
|
+
if (part.type === "output_text") {
|
|
186
|
+
return { type: "output_text", text: part.text };
|
|
187
|
+
}
|
|
188
|
+
if (part.type === "summary_text") {
|
|
189
|
+
return { type: "summary_text", text: part.text };
|
|
190
|
+
}
|
|
191
|
+
if (part.type === "reasoning_text") {
|
|
192
|
+
return { type: "reasoning_text", text: part.text };
|
|
193
|
+
}
|
|
194
|
+
if (part.type === "input_text") {
|
|
195
|
+
return { type: "input_text", text: part.text };
|
|
196
|
+
}
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
147
199
|
function mapOpenAIOutputItem(item) {
|
|
148
200
|
const itemType = item.type;
|
|
149
201
|
if (itemType === "message") {
|
|
150
202
|
const message = item;
|
|
151
|
-
const content = []
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
content.push({ type: "output_text", text: part.text });
|
|
155
|
-
}
|
|
156
|
-
}
|
|
203
|
+
const content = (message.content ?? [])
|
|
204
|
+
.map((part) => mapResponseContentPart(part))
|
|
205
|
+
.filter((part) => Boolean(part));
|
|
157
206
|
if (content.length === 0)
|
|
158
207
|
return null;
|
|
159
208
|
return {
|
|
@@ -173,6 +222,22 @@ function mapOpenAIOutputItem(item) {
|
|
|
173
222
|
id: call.id,
|
|
174
223
|
};
|
|
175
224
|
}
|
|
225
|
+
if (itemType === "reasoning") {
|
|
226
|
+
const reasoning = item;
|
|
227
|
+
const content = (reasoning.content ?? [])
|
|
228
|
+
.map((part) => mapResponseContentPart(part))
|
|
229
|
+
.filter((part) => Boolean(part));
|
|
230
|
+
const summary = (reasoning.summary ?? [])
|
|
231
|
+
.map((part) => mapResponseContentPart(part))
|
|
232
|
+
.filter((part) => Boolean(part));
|
|
233
|
+
return {
|
|
234
|
+
type: "reasoning",
|
|
235
|
+
id: reasoning.id,
|
|
236
|
+
content: content.length > 0 ? content : undefined,
|
|
237
|
+
summary,
|
|
238
|
+
encrypted_content: reasoning.encrypted_content,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
176
241
|
return null;
|
|
177
242
|
}
|
|
178
243
|
function normalizeOpenAIResponse(response) {
|
|
@@ -183,11 +248,23 @@ function normalizeOpenAIResponse(response) {
|
|
|
183
248
|
id: response.id,
|
|
184
249
|
object: "response",
|
|
185
250
|
model: response.model,
|
|
251
|
+
created_at: response.created_at,
|
|
186
252
|
created: response.created_at,
|
|
253
|
+
completed_at: response.completed_at ??
|
|
254
|
+
null,
|
|
255
|
+
previous_response_id: response.previous_response_id ?? null,
|
|
256
|
+
instructions: response.instructions ?? null,
|
|
257
|
+
reasoning: response
|
|
258
|
+
.reasoning ?? null,
|
|
187
259
|
status: mapStatus(response.status ?? undefined),
|
|
188
260
|
output: outputItems,
|
|
189
261
|
usage: mapUsage(response.usage),
|
|
190
|
-
error: mapError(response.error),
|
|
262
|
+
error: mapError(response.error) ?? null,
|
|
263
|
+
metadata: response.metadata,
|
|
264
|
+
max_output_tokens: response.max_output_tokens ?? null,
|
|
265
|
+
max_tool_calls: response.max_tool_calls ?? null,
|
|
266
|
+
parallel_tool_calls: response.parallel_tool_calls,
|
|
267
|
+
store: response.store,
|
|
191
268
|
};
|
|
192
269
|
}
|
|
193
270
|
function toOpenAIInputItems(items) {
|
|
@@ -209,6 +286,18 @@ function toOpenAIInputItems(items) {
|
|
|
209
286
|
text: part.text,
|
|
210
287
|
};
|
|
211
288
|
}
|
|
289
|
+
if (part.type === "summary_text") {
|
|
290
|
+
return {
|
|
291
|
+
type: "summary_text",
|
|
292
|
+
text: part.text,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
if (part.type === "reasoning_text") {
|
|
296
|
+
return {
|
|
297
|
+
type: "reasoning_text",
|
|
298
|
+
text: part.text,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
212
301
|
return null;
|
|
213
302
|
})
|
|
214
303
|
.filter((part) => Boolean(part));
|
|
@@ -239,6 +328,22 @@ function toOpenAIInputItems(items) {
|
|
|
239
328
|
output: item.output,
|
|
240
329
|
id: item.id,
|
|
241
330
|
});
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
if (item.type === "reasoning") {
|
|
334
|
+
mapped.push({
|
|
335
|
+
type: "reasoning",
|
|
336
|
+
id: item.id,
|
|
337
|
+
content: (item.content ?? []).map((part) => ({
|
|
338
|
+
type: part.type,
|
|
339
|
+
text: part.text,
|
|
340
|
+
})),
|
|
341
|
+
summary: item.summary.map((part) => ({
|
|
342
|
+
type: part.type,
|
|
343
|
+
text: part.text,
|
|
344
|
+
})),
|
|
345
|
+
encrypted_content: item.encrypted_content ?? null,
|
|
346
|
+
});
|
|
242
347
|
}
|
|
243
348
|
}
|
|
244
349
|
return mapped;
|
|
@@ -323,13 +428,31 @@ function responseItemsToChat(items) {
|
|
|
323
428
|
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
324
429
|
};
|
|
325
430
|
}
|
|
326
|
-
async function createResponse(client, request, onStreamEvent) {
|
|
431
|
+
async function createResponse(client, request, signal, onStreamEvent) {
|
|
327
432
|
const baseParams = {
|
|
328
433
|
model: normalizeOpenRouterModel(request.model),
|
|
329
434
|
input: toOpenAIInputItems(request.input),
|
|
330
435
|
instructions: request.instructions,
|
|
331
436
|
tools: undefined,
|
|
332
437
|
tool_choice: mapToolChoice(request.tool_choice),
|
|
438
|
+
previous_response_id: request.previous_response_id,
|
|
439
|
+
reasoning: mapReasoning(request.reasoning),
|
|
440
|
+
parallel_tool_calls: request.parallel_tool_calls,
|
|
441
|
+
max_tool_calls: request.max_tool_calls,
|
|
442
|
+
store: request.store,
|
|
443
|
+
include: request.include,
|
|
444
|
+
text: request.text,
|
|
445
|
+
stream_options: request.stream_options,
|
|
446
|
+
background: request.background,
|
|
447
|
+
truncation: request.truncation,
|
|
448
|
+
service_tier: request.service_tier,
|
|
449
|
+
top_logprobs: request.top_logprobs,
|
|
450
|
+
safety_identifier: request.safety_identifier,
|
|
451
|
+
prompt_cache_key: request.prompt_cache_key,
|
|
452
|
+
temperature: request.temperature,
|
|
453
|
+
top_p: request.top_p,
|
|
454
|
+
frequency_penalty: request.frequency_penalty,
|
|
455
|
+
presence_penalty: request.presence_penalty,
|
|
333
456
|
stream: request.stream,
|
|
334
457
|
max_output_tokens: request.max_output_tokens,
|
|
335
458
|
metadata: request.metadata,
|
|
@@ -339,11 +462,11 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
339
462
|
if (mappedTools.length > 0) {
|
|
340
463
|
baseParams.tools = mappedTools;
|
|
341
464
|
}
|
|
342
|
-
const params = { ...(request.params ?? {}), ...baseParams };
|
|
465
|
+
const params = { ...(request.params ?? {}), ...stripUndefined(baseParams) };
|
|
343
466
|
const debugResponses = dntShim.Deno.env.get("GAMBIT_DEBUG_RESPONSES") === "1";
|
|
344
467
|
let responseOrStream;
|
|
345
468
|
try {
|
|
346
|
-
responseOrStream = await client.responses.create(params);
|
|
469
|
+
responseOrStream = await client.responses.create(params, signal ? { signal } : undefined);
|
|
347
470
|
}
|
|
348
471
|
catch (err) {
|
|
349
472
|
if (debugResponses) {
|
|
@@ -367,7 +490,12 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
367
490
|
switch (event.type) {
|
|
368
491
|
case "response.created": {
|
|
369
492
|
const mapped = normalizeOpenAIResponse(event.response);
|
|
370
|
-
onStreamEvent?.({
|
|
493
|
+
onStreamEvent?.({
|
|
494
|
+
type: "response.created",
|
|
495
|
+
response: mapped,
|
|
496
|
+
sequence_number: event
|
|
497
|
+
.sequence_number,
|
|
498
|
+
});
|
|
371
499
|
break;
|
|
372
500
|
}
|
|
373
501
|
case "response.output_text.delta":
|
|
@@ -376,6 +504,10 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
376
504
|
output_index: event.output_index,
|
|
377
505
|
delta: event.delta,
|
|
378
506
|
item_id: event.item_id,
|
|
507
|
+
content_index: event.content_index,
|
|
508
|
+
sequence_number: event
|
|
509
|
+
.sequence_number,
|
|
510
|
+
logprobs: event.logprobs,
|
|
379
511
|
});
|
|
380
512
|
break;
|
|
381
513
|
case "response.output_text.done":
|
|
@@ -384,6 +516,9 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
384
516
|
output_index: event.output_index,
|
|
385
517
|
text: event.text,
|
|
386
518
|
item_id: event.item_id,
|
|
519
|
+
content_index: event.content_index,
|
|
520
|
+
sequence_number: event
|
|
521
|
+
.sequence_number,
|
|
387
522
|
});
|
|
388
523
|
break;
|
|
389
524
|
case "response.output_item.added": {
|
|
@@ -393,6 +528,8 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
393
528
|
type: "response.output_item.added",
|
|
394
529
|
output_index: event.output_index,
|
|
395
530
|
item,
|
|
531
|
+
sequence_number: event
|
|
532
|
+
.sequence_number,
|
|
396
533
|
});
|
|
397
534
|
}
|
|
398
535
|
break;
|
|
@@ -404,13 +541,102 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
404
541
|
type: "response.output_item.done",
|
|
405
542
|
output_index: event.output_index,
|
|
406
543
|
item,
|
|
544
|
+
sequence_number: event
|
|
545
|
+
.sequence_number,
|
|
407
546
|
});
|
|
408
547
|
}
|
|
409
548
|
break;
|
|
410
549
|
}
|
|
550
|
+
case "response.reasoning.delta":
|
|
551
|
+
if (typeof event.delta === "string") {
|
|
552
|
+
onStreamEvent?.({
|
|
553
|
+
type: "response.reasoning.delta",
|
|
554
|
+
output_index: event.output_index,
|
|
555
|
+
item_id: event.item_id,
|
|
556
|
+
content_index: event.content_index,
|
|
557
|
+
delta: event.delta,
|
|
558
|
+
sequence_number: event
|
|
559
|
+
.sequence_number,
|
|
560
|
+
obfuscation: event.obfuscation,
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
break;
|
|
564
|
+
case "response.reasoning.done":
|
|
565
|
+
onStreamEvent?.({
|
|
566
|
+
type: "response.reasoning.done",
|
|
567
|
+
output_index: event.output_index,
|
|
568
|
+
item_id: event.item_id,
|
|
569
|
+
content_index: event.content_index,
|
|
570
|
+
text: event.text,
|
|
571
|
+
sequence_number: event
|
|
572
|
+
.sequence_number,
|
|
573
|
+
});
|
|
574
|
+
break;
|
|
575
|
+
case "response.reasoning_summary_text.delta":
|
|
576
|
+
if (typeof event.delta === "string") {
|
|
577
|
+
onStreamEvent?.({
|
|
578
|
+
type: "response.reasoning_summary_text.delta",
|
|
579
|
+
output_index: event.output_index,
|
|
580
|
+
item_id: event.item_id,
|
|
581
|
+
summary_index: event.summary_index,
|
|
582
|
+
delta: event.delta,
|
|
583
|
+
sequence_number: event
|
|
584
|
+
.sequence_number,
|
|
585
|
+
obfuscation: event.obfuscation,
|
|
586
|
+
});
|
|
587
|
+
}
|
|
588
|
+
break;
|
|
589
|
+
case "response.reasoning_summary_text.done":
|
|
590
|
+
onStreamEvent?.({
|
|
591
|
+
type: "response.reasoning_summary_text.done",
|
|
592
|
+
output_index: event.output_index,
|
|
593
|
+
item_id: event.item_id,
|
|
594
|
+
summary_index: event.summary_index,
|
|
595
|
+
text: event.text,
|
|
596
|
+
sequence_number: event
|
|
597
|
+
.sequence_number,
|
|
598
|
+
});
|
|
599
|
+
break;
|
|
600
|
+
case "response.reasoning_summary_part.added":
|
|
601
|
+
if (event.part && typeof event.part === "object" &&
|
|
602
|
+
"type" in event.part &&
|
|
603
|
+
"text" in event.part &&
|
|
604
|
+
typeof event.part.text === "string") {
|
|
605
|
+
onStreamEvent?.({
|
|
606
|
+
type: "response.reasoning_summary_part.added",
|
|
607
|
+
output_index: event.output_index,
|
|
608
|
+
item_id: event.item_id,
|
|
609
|
+
summary_index: event.summary_index,
|
|
610
|
+
part: event.part,
|
|
611
|
+
sequence_number: event
|
|
612
|
+
.sequence_number,
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
break;
|
|
616
|
+
case "response.reasoning_summary_part.done":
|
|
617
|
+
if (event.part && typeof event.part === "object" &&
|
|
618
|
+
"type" in event.part &&
|
|
619
|
+
"text" in event.part &&
|
|
620
|
+
typeof event.part.text === "string") {
|
|
621
|
+
onStreamEvent?.({
|
|
622
|
+
type: "response.reasoning_summary_part.done",
|
|
623
|
+
output_index: event.output_index,
|
|
624
|
+
item_id: event.item_id,
|
|
625
|
+
summary_index: event.summary_index,
|
|
626
|
+
part: event.part,
|
|
627
|
+
sequence_number: event
|
|
628
|
+
.sequence_number,
|
|
629
|
+
});
|
|
630
|
+
}
|
|
631
|
+
break;
|
|
411
632
|
case "response.completed": {
|
|
412
633
|
completed = normalizeOpenAIResponse(event.response);
|
|
413
|
-
onStreamEvent?.({
|
|
634
|
+
onStreamEvent?.({
|
|
635
|
+
type: "response.completed",
|
|
636
|
+
response: completed,
|
|
637
|
+
sequence_number: event
|
|
638
|
+
.sequence_number,
|
|
639
|
+
});
|
|
414
640
|
break;
|
|
415
641
|
}
|
|
416
642
|
case "response.failed": {
|
|
@@ -418,6 +644,8 @@ async function createResponse(client, request, onStreamEvent) {
|
|
|
418
644
|
onStreamEvent?.({
|
|
419
645
|
type: "response.failed",
|
|
420
646
|
error: error ?? {},
|
|
647
|
+
sequence_number: event
|
|
648
|
+
.sequence_number,
|
|
421
649
|
});
|
|
422
650
|
break;
|
|
423
651
|
}
|
|
@@ -444,7 +672,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
444
672
|
}));
|
|
445
673
|
return {
|
|
446
674
|
async responses(input) {
|
|
447
|
-
return await createResponse(client, input.request, input.onStreamEvent);
|
|
675
|
+
return await createResponse(client, input.request, input.signal, input.onStreamEvent);
|
|
448
676
|
},
|
|
449
677
|
async chat(input) {
|
|
450
678
|
const params = input.params ?? {};
|
|
@@ -455,7 +683,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
455
683
|
tools: input.tools,
|
|
456
684
|
stream: input.stream,
|
|
457
685
|
params,
|
|
458
|
-
}, (event) => {
|
|
686
|
+
}, input.signal, (event) => {
|
|
459
687
|
if (event.type === "response.output_text.delta") {
|
|
460
688
|
input.onStreamText?.(event.delta);
|
|
461
689
|
}
|
|
@@ -481,7 +709,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
481
709
|
tool_choice: "auto",
|
|
482
710
|
stream: true,
|
|
483
711
|
...params,
|
|
484
|
-
});
|
|
712
|
+
}, input.signal ? { signal: input.signal } : undefined);
|
|
485
713
|
let finishReason = null;
|
|
486
714
|
const contentParts = [];
|
|
487
715
|
const toolCallMap = new Map();
|
|
@@ -566,7 +794,7 @@ export function createOpenRouterProvider(opts) {
|
|
|
566
794
|
tool_choice: "auto",
|
|
567
795
|
stream: false,
|
|
568
796
|
...params,
|
|
569
|
-
});
|
|
797
|
+
}, input.signal ? { signal: input.signal } : undefined);
|
|
570
798
|
const choice = response.choices[0];
|
|
571
799
|
const message = choice.message;
|
|
572
800
|
const normalizedMessage = normalizeMessage(message);
|
|
@@ -580,11 +808,20 @@ export function createOpenRouterProvider(opts) {
|
|
|
580
808
|
finishReason: (choice.finish_reason ?? "stop"),
|
|
581
809
|
toolCalls,
|
|
582
810
|
usage: response.usage
|
|
583
|
-
? {
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
811
|
+
? (() => {
|
|
812
|
+
const usage = {
|
|
813
|
+
promptTokens: response.usage.prompt_tokens ?? 0,
|
|
814
|
+
completionTokens: response.usage.completion_tokens ?? 0,
|
|
815
|
+
totalTokens: response.usage.total_tokens ?? 0,
|
|
816
|
+
};
|
|
817
|
+
const details = response.usage;
|
|
818
|
+
const value = details.completion_tokens_details
|
|
819
|
+
?.reasoning_tokens ??
|
|
820
|
+
details.output_tokens_details?.reasoning_tokens;
|
|
821
|
+
return typeof value === "number"
|
|
822
|
+
? { ...usage, reasoningTokens: value }
|
|
823
|
+
: usage;
|
|
824
|
+
})()
|
|
588
825
|
: undefined,
|
|
589
826
|
};
|
|
590
827
|
},
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ModelProvider } from "@bolt-foundry/gambit-core";
|
|
2
|
+
export type ProviderKey = "openrouter" | "ollama" | "google" | "codex-cli";
|
|
3
|
+
export type ProviderRouter = {
|
|
4
|
+
resolve: (input: {
|
|
5
|
+
model: string;
|
|
6
|
+
}) => {
|
|
7
|
+
providerKey: ProviderKey;
|
|
8
|
+
provider: ModelProvider;
|
|
9
|
+
model: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
type ProviderSet = Partial<Record<ProviderKey, ModelProvider | null>>;
|
|
13
|
+
export declare function createProviderRouter(opts: {
|
|
14
|
+
providers: ProviderSet;
|
|
15
|
+
defaultProvider?: ProviderKey | null;
|
|
16
|
+
fallbackToDefaultOnMissing?: Array<ProviderKey>;
|
|
17
|
+
}): ProviderRouter;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/src/providers/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK;QACrC,WAAW,EAAE,WAAW,CAAC;QACzB,QAAQ,EAAE,aAAa,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEF,KAAK,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC;AAsDtE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,0BAA0B,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;CACjD,GAAG,cAAc,CA8DjB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
const PROVIDER_PREFIXES = {
|
|
2
|
+
openrouter: "openrouter/",
|
|
3
|
+
ollama: "ollama/",
|
|
4
|
+
google: "google/",
|
|
5
|
+
"codex-cli": "codex-cli/",
|
|
6
|
+
};
|
|
7
|
+
function parsePrefixedModel(model) {
|
|
8
|
+
if (model.trim() === "codex-cli") {
|
|
9
|
+
return {
|
|
10
|
+
providerKey: "codex-cli",
|
|
11
|
+
strippedModel: "default",
|
|
12
|
+
rawModel: model,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
for (const [providerKey, prefix] of Object.entries(PROVIDER_PREFIXES)) {
|
|
16
|
+
if (model.startsWith(prefix)) {
|
|
17
|
+
return {
|
|
18
|
+
providerKey: providerKey,
|
|
19
|
+
strippedModel: model.slice(prefix.length),
|
|
20
|
+
rawModel: model,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (model === "codex" || model.startsWith("codex/")) {
|
|
25
|
+
return {
|
|
26
|
+
strippedModel: model,
|
|
27
|
+
rawModel: model,
|
|
28
|
+
legacyCodex: true,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return { strippedModel: model, rawModel: model };
|
|
32
|
+
}
|
|
33
|
+
function missingProviderMessage(providerKey) {
|
|
34
|
+
switch (providerKey) {
|
|
35
|
+
case "openrouter":
|
|
36
|
+
return "OPENROUTER_API_KEY is required for openrouter/ models.";
|
|
37
|
+
case "ollama":
|
|
38
|
+
return "Ollama provider is not configured. Set OLLAMA_BASE_URL or OLLAMA_API_KEY.";
|
|
39
|
+
case "google":
|
|
40
|
+
return "Google provider is not configured. Set GOOGLE_API_KEY or GEMINI_API_KEY.";
|
|
41
|
+
case "codex-cli":
|
|
42
|
+
return "Codex CLI provider is not configured.";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function createProviderRouter(opts) {
|
|
46
|
+
const defaultProvider = opts.defaultProvider === null
|
|
47
|
+
? null
|
|
48
|
+
: (opts.defaultProvider ?? "openrouter");
|
|
49
|
+
const fallbackOnMissing = new Set(opts.fallbackToDefaultOnMissing ?? ["google"]);
|
|
50
|
+
return {
|
|
51
|
+
resolve({ model }) {
|
|
52
|
+
const { providerKey, strippedModel, rawModel, legacyCodex } = parsePrefixedModel(model);
|
|
53
|
+
if (legacyCodex) {
|
|
54
|
+
throw new Error('Legacy Codex model prefix "codex" is no longer supported. Use "codex-cli/default" or "codex-cli/<model>".');
|
|
55
|
+
}
|
|
56
|
+
if (providerKey) {
|
|
57
|
+
const provider = opts.providers[providerKey];
|
|
58
|
+
if (!provider) {
|
|
59
|
+
if (fallbackOnMissing.has(providerKey) &&
|
|
60
|
+
defaultProvider !== null &&
|
|
61
|
+
defaultProvider !== providerKey) {
|
|
62
|
+
const fallbackProvider = opts.providers[defaultProvider];
|
|
63
|
+
if (fallbackProvider) {
|
|
64
|
+
return {
|
|
65
|
+
providerKey: defaultProvider,
|
|
66
|
+
provider: fallbackProvider,
|
|
67
|
+
model: rawModel,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
throw new Error(missingProviderMessage(providerKey));
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
providerKey,
|
|
75
|
+
provider,
|
|
76
|
+
model: strippedModel,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (defaultProvider === null) {
|
|
80
|
+
throw new Error("No fallback provider configured. Use a provider prefix or set providers.fallback in gambit.toml.");
|
|
81
|
+
}
|
|
82
|
+
const provider = opts.providers[defaultProvider];
|
|
83
|
+
if (!provider) {
|
|
84
|
+
throw new Error("OPENROUTER_API_KEY is required when no provider prefix is specified.");
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
providerKey: defaultProvider,
|
|
88
|
+
provider,
|
|
89
|
+
model,
|
|
90
|
+
};
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
package/esm/src/server.d.ts
CHANGED
|
@@ -14,10 +14,19 @@ export declare function startWebSocketSimulator(opts: {
|
|
|
14
14
|
verbose?: boolean;
|
|
15
15
|
signal?: AbortSignal;
|
|
16
16
|
sessionDir?: string;
|
|
17
|
+
workspace?: {
|
|
18
|
+
id: string;
|
|
19
|
+
rootDeckPath: string;
|
|
20
|
+
rootDir: string;
|
|
21
|
+
onboarding?: boolean;
|
|
22
|
+
scaffoldEnabled?: boolean;
|
|
23
|
+
scaffoldRoot?: string;
|
|
24
|
+
};
|
|
17
25
|
autoBundle?: boolean;
|
|
18
26
|
forceBundle?: boolean;
|
|
19
27
|
sourceMap?: boolean;
|
|
20
28
|
bundlePlatform?: "deno" | "browser";
|
|
21
29
|
responsesMode?: boolean;
|
|
30
|
+
workerSandbox?: boolean;
|
|
22
31
|
}): ReturnType<typeof dntShim.Deno.serve>;
|
|
23
32
|
//# sourceMappingURL=server.d.ts.map
|
package/esm/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAiD5C,OAAO,KAAK,EAMV,aAAa,EAOd,MAAM,2BAA2B,CAAC;AAygCnC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAk/JxC"}
|