@bolt-foundry/gambit 0.8.1 → 0.8.5-rc.10
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 +150 -2
- package/README.md +109 -23
- package/esm/_dnt.polyfills.d.ts +17 -0
- package/esm/_dnt.polyfills.d.ts.map +1 -1
- package/esm/_dnt.polyfills.js +123 -0
- package/esm/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts +322 -0
- package/esm/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/collections/1.1.6/deep_merge.js +105 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts +14 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.js +34 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts +13 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.js +18 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts +10 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_same_path.js +17 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts +12 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_is_subdir.js +25 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts +9 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/_to_path_string.js +13 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/copy.d.ts +117 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/copy.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/copy.js +313 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts +48 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/empty_dir.js +87 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts +49 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_dir.js +102 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts +47 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_file.js +90 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts +49 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_link.js +61 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts +70 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.js +156 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/eol.d.ts +52 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/eol.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/eol.js +67 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/exists.d.ts +218 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/exists.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/exists.js +271 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts +267 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/expand_glob.js +442 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/mod.d.ts +29 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/mod.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/mod.js +29 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/move.d.ts +86 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/move.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/move.js +142 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/walk.d.ts +777 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/walk.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fs/1.0.23/walk.js +846 -0
- package/esm/deps/jsr.io/@std/json/1.0.3/types.d.ts +7 -0
- package/esm/deps/jsr.io/@std/json/1.0.3/types.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/json/1.0.3/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/path/1.1.4/constants.d.ts +1 -1
- 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 +12670 -5471
- package/esm/gambit/simulator-ui/dist/bundle.js.map +4 -4
- package/esm/gambit/simulator-ui/dist/favicon.ico +0 -0
- package/esm/mod.d.ts +21 -7
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +14 -4
- 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 +52 -4
- 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 +74 -0
- package/esm/src/openai_compat.d.ts.map +1 -0
- package/esm/src/openai_compat.js +329 -0
- 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 +18 -0
- package/esm/src/providers/google.d.ts.map +1 -0
- package/esm/src/providers/google.js +428 -0
- package/esm/src/providers/ollama.d.ts +19 -0
- package/esm/src/providers/ollama.d.ts.map +1 -0
- package/esm/src/providers/ollama.js +789 -0
- package/esm/src/providers/openrouter.d.ts +26 -0
- package/esm/src/providers/openrouter.d.ts.map +1 -0
- package/esm/src/providers/openrouter.js +886 -0
- 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 +11 -0
- package/esm/src/server.d.ts.map +1 -1
- package/esm/src/server.js +3927 -689
- 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 +136 -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 +8 -5
- package/esm/src/workspace.d.ts +19 -0
- package/esm/src/workspace.d.ts.map +1 -0
- package/esm/src/workspace.js +162 -0
- package/esm/src/workspace_contract.d.ts +78 -0
- package/esm/src/workspace_contract.d.ts.map +1 -0
- package/esm/src/workspace_contract.js +76 -0
- package/package.json +3 -2
- package/script/_dnt.polyfills.d.ts +17 -0
- package/script/_dnt.polyfills.d.ts.map +1 -1
- package/script/_dnt.polyfills.js +123 -0
- package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts +322 -0
- package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/collections/1.1.6/deep_merge.js +108 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts +14 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_create_walk_entry.js +71 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts +13 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_get_file_info_type.js +21 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts +10 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_same_path.js +20 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts +12 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_is_subdir.js +28 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts +9 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/_to_path_string.js +16 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/copy.d.ts +117 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/copy.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/copy.js +350 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts +48 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/empty_dir.js +124 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts +49 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_dir.js +139 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts +47 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_file.js +127 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts +49 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_link.js +98 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts +70 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/ensure_symlink.js +193 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/eol.d.ts +52 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/eol.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/eol.js +105 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/exists.d.ts +218 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/exists.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/exists.js +308 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts +267 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/expand_glob.js +479 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/mod.d.ts +29 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/mod.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/mod.js +45 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/move.d.ts +86 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/move.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/move.js +179 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/walk.d.ts +777 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/walk.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fs/1.0.23/walk.js +883 -0
- package/script/deps/jsr.io/@std/json/1.0.3/types.d.ts +7 -0
- package/script/deps/jsr.io/@std/json/1.0.3/types.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/json/1.0.3/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/path/1.1.4/constants.d.ts +1 -1
- 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 +12670 -5471
- package/script/gambit/simulator-ui/dist/bundle.js.map +4 -4
- package/script/gambit/simulator-ui/dist/favicon.ico +0 -0
- package/script/mod.d.ts +21 -7
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +22 -7
- 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 +52 -3
- 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 +74 -0
- package/script/src/openai_compat.d.ts.map +1 -0
- package/script/src/openai_compat.js +366 -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 +18 -0
- package/script/src/providers/google.d.ts.map +1 -0
- package/script/src/providers/google.js +435 -0
- package/script/src/providers/ollama.d.ts +19 -0
- package/script/src/providers/ollama.d.ts.map +1 -0
- package/script/src/providers/ollama.js +831 -0
- package/script/src/providers/openrouter.d.ts +26 -0
- package/script/src/providers/openrouter.d.ts.map +1 -0
- package/script/src/providers/openrouter.js +926 -0
- 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 +11 -0
- package/script/src/server.d.ts.map +1 -1
- package/script/src/server.js +3931 -693
- 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 +173 -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 +8 -5
- package/script/src/workspace.d.ts +19 -0
- package/script/src/workspace.d.ts.map +1 -0
- package/script/src/workspace.js +199 -0
- package/script/src/workspace_contract.d.ts +78 -0
- package/script/src/workspace_contract.d.ts.map +1 -0
- package/script/src/workspace_contract.js +84 -0
package/script/src/trace.js
CHANGED
|
@@ -51,6 +51,9 @@ function makeConsoleTracer() {
|
|
|
51
51
|
const started = new Map();
|
|
52
52
|
const now = () => performance.now();
|
|
53
53
|
const fmtMs = (start) => start !== undefined ? ` elapsed_ms=${Math.round(now() - start)}` : "";
|
|
54
|
+
const fmtPermissions = (permissions) => permissions?.effective !== undefined
|
|
55
|
+
? ` permissions=${JSON.stringify(permissions.effective)}`
|
|
56
|
+
: "";
|
|
54
57
|
return (event) => {
|
|
55
58
|
switch (event.type) {
|
|
56
59
|
case "run.start":
|
|
@@ -59,7 +62,7 @@ function makeConsoleTracer() {
|
|
|
59
62
|
? ` initialUserMessage=${JSON.stringify(event.initialUserMessage)}`
|
|
60
63
|
: ""}${event.input !== undefined
|
|
61
64
|
? ` input=${JSON.stringify(event.input)}`
|
|
62
|
-
: ""}`);
|
|
65
|
+
: ""}${fmtPermissions(event.permissions)}`);
|
|
63
66
|
break;
|
|
64
67
|
case "run.end": {
|
|
65
68
|
const start = started.get(event.runId);
|
|
@@ -73,7 +76,7 @@ function makeConsoleTracer() {
|
|
|
73
76
|
}
|
|
74
77
|
case "deck.start":
|
|
75
78
|
started.set(event.actionCallId, now());
|
|
76
|
-
logger.log(`[trace] deck.start runId=${event.runId} actionCallId=${event.actionCallId} deck=${event.deckPath}`);
|
|
79
|
+
logger.log(`[trace] deck.start runId=${event.runId} actionCallId=${event.actionCallId} deck=${event.deckPath}${fmtPermissions(event.permissions)}`);
|
|
77
80
|
break;
|
|
78
81
|
case "deck.end": {
|
|
79
82
|
const start = started.get(event.actionCallId);
|
|
@@ -83,7 +86,7 @@ function makeConsoleTracer() {
|
|
|
83
86
|
}
|
|
84
87
|
case "action.start":
|
|
85
88
|
started.set(event.actionCallId, now());
|
|
86
|
-
logger.log(`[trace] action.start runId=${event.runId} actionCallId=${event.actionCallId} name=${event.name} path=${event.path}`);
|
|
89
|
+
logger.log(`[trace] action.start runId=${event.runId} actionCallId=${event.actionCallId} name=${event.name} path=${event.path}${fmtPermissions(event.permissions)}`);
|
|
87
90
|
break;
|
|
88
91
|
case "action.end": {
|
|
89
92
|
const start = started.get(event.actionCallId);
|
|
@@ -98,10 +101,10 @@ function makeConsoleTracer() {
|
|
|
98
101
|
logger.log(`[trace] tool.result runId=${event.runId} actionCallId=${event.actionCallId} name=${event.name} result=${JSON.stringify(event.result)}`);
|
|
99
102
|
break;
|
|
100
103
|
case "model.call":
|
|
101
|
-
logger.log(`[trace] model.call runId=${event.runId} actionCallId=${event.actionCallId} deck=${event.deckPath} model=${event.model ?? "(default)"} messages=${event.messageCount ?? event.messages.length} tools=${event.toolCount ?? event.tools?.length ?? 0} stream=${event.stream ?? false} stateMessages=${event.stateMessages ?? 0}`);
|
|
104
|
+
logger.log(`[trace] model.call runId=${event.runId} actionCallId=${event.actionCallId} deck=${event.deckPath} model=${event.model ?? "(default)"} messages=${event.messageCount ?? event.messages.length} tools=${event.toolCount ?? event.tools?.length ?? 0} stream=${event.stream ?? false} mode=${event.mode ?? "chat"} stateMessages=${event.stateMessages ?? 0}`);
|
|
102
105
|
break;
|
|
103
106
|
case "model.result":
|
|
104
|
-
logger.log(`[trace] model.result runId=${event.runId} actionCallId=${event.actionCallId} deck=${event.deckPath} model=${event.model ?? "(default)"} finish=${event.finishReason} toolCalls=${event.toolCalls?.length ?? 0} stateMessages=${event.stateMessages ?? 0}`);
|
|
107
|
+
logger.log(`[trace] model.result runId=${event.runId} actionCallId=${event.actionCallId} deck=${event.deckPath} model=${event.model ?? "(default)"} finish=${event.finishReason} toolCalls=${event.toolCalls?.length ?? 0} mode=${event.mode ?? "chat"} stateMessages=${event.stateMessages ?? 0}`);
|
|
105
108
|
break;
|
|
106
109
|
case "log": {
|
|
107
110
|
const meta = event.meta !== undefined
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type WorkspaceScaffold = {
|
|
2
|
+
id: string;
|
|
3
|
+
rootDir: string;
|
|
4
|
+
rootDeckPath: string;
|
|
5
|
+
createdAt: string;
|
|
6
|
+
};
|
|
7
|
+
export type WorkspaceRootScaffold = {
|
|
8
|
+
rootDir: string;
|
|
9
|
+
rootDeckPath: string;
|
|
10
|
+
};
|
|
11
|
+
type WorkspaceScaffoldOptions = {
|
|
12
|
+
baseDir: string;
|
|
13
|
+
id?: string;
|
|
14
|
+
now?: Date;
|
|
15
|
+
};
|
|
16
|
+
export declare function createWorkspaceScaffoldAtRoot(rootDir: string): Promise<WorkspaceRootScaffold>;
|
|
17
|
+
export declare function createWorkspaceScaffold(opts: WorkspaceScaffoldOptions): Promise<WorkspaceScaffold>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/src/workspace.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,CAAC;AAyHF,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC,CA4BhC;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,CAkC5B"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.createWorkspaceScaffoldAtRoot = createWorkspaceScaffoldAtRoot;
|
|
37
|
+
exports.createWorkspaceScaffold = createWorkspaceScaffold;
|
|
38
|
+
const dntShim = __importStar(require("../_dnt.shims.js"));
|
|
39
|
+
const path = __importStar(require("../deps/jsr.io/@std/path/1.1.4/mod.js"));
|
|
40
|
+
const mod_js_1 = require("../deps/jsr.io/@std/fs/1.0.23/mod.js");
|
|
41
|
+
const ROOT_PROMPT = `+++
|
|
42
|
+
label = "Workspace Root"
|
|
43
|
+
description = "Starter root deck for this workspace."
|
|
44
|
+
|
|
45
|
+
[modelParams]
|
|
46
|
+
model = ["ollama/hf.co/LiquidAI/LFM2-1.2B-Tool-GGUF:latest", "openrouter/openai/gpt-5.1-chat"]
|
|
47
|
+
|
|
48
|
+
[modelParams.reasoning]
|
|
49
|
+
effort = "low"
|
|
50
|
+
summary = "detailed"
|
|
51
|
+
|
|
52
|
+
[[scenarios]]
|
|
53
|
+
path = "./scenarios/default/PROMPT.md"
|
|
54
|
+
label = "Default scenario"
|
|
55
|
+
description = "Quick sanity check scenario."
|
|
56
|
+
|
|
57
|
+
[[graders]]
|
|
58
|
+
path = "./graders/default/PROMPT.md"
|
|
59
|
+
label = "Default grader"
|
|
60
|
+
description = "Simple grader to start."
|
|
61
|
+
+++
|
|
62
|
+
|
|
63
|
+
You are the default deck for a new Gambit workspace.
|
|
64
|
+
|
|
65
|
+
## Assistant Persona
|
|
66
|
+
|
|
67
|
+
- You are a minimal placeholder deck used to bootstrap a blank workspace.
|
|
68
|
+
- You keep responses short and avoid introducing product narrative.
|
|
69
|
+
|
|
70
|
+
## User Persona
|
|
71
|
+
|
|
72
|
+
- The user is in the Build tab and expects guidance on what to do next.
|
|
73
|
+
|
|
74
|
+
## Behavior
|
|
75
|
+
|
|
76
|
+
- If asked what to do, reply exactly: "Use the Build tab to draft your deck."
|
|
77
|
+
- Keep all other responses brief, plain text, and focused on build guidance.
|
|
78
|
+
`;
|
|
79
|
+
const ROOT_INTENT = `# Workspace Intent
|
|
80
|
+
|
|
81
|
+
## Purpose
|
|
82
|
+
|
|
83
|
+
- Provide a starter workspace deck for the Build/Test/Grade loop.
|
|
84
|
+
|
|
85
|
+
## Constraints
|
|
86
|
+
|
|
87
|
+
- Keep the initial behavior simple and easy to replace.
|
|
88
|
+
|
|
89
|
+
## Tradeoffs
|
|
90
|
+
|
|
91
|
+
- Favor clarity over advanced functionality in the starter scaffold.
|
|
92
|
+
`;
|
|
93
|
+
const DEFAULT_SCENARIO_PROMPT = `+++
|
|
94
|
+
label = "Default scenario"
|
|
95
|
+
description = "Starter scenario for this workspace."
|
|
96
|
+
contextSchema = "gambit://schemas/scenarios/plain_chat_input_optional.zod.ts"
|
|
97
|
+
responseSchema = "gambit://schemas/scenarios/plain_chat_output.zod.ts"
|
|
98
|
+
|
|
99
|
+
[modelParams]
|
|
100
|
+
model = ["ollama/hf.co/LiquidAI/LFM2-1.2B-Tool-GGUF:latest", "openrouter/openai/gpt-5.1-chat"]
|
|
101
|
+
+++
|
|
102
|
+
|
|
103
|
+

|
|
104
|
+
|
|
105
|
+
You are a user testing the assistant.
|
|
106
|
+
|
|
107
|
+
Conversation plan:
|
|
108
|
+
|
|
109
|
+
1. Start by asking: "What can you help me with?"
|
|
110
|
+
2. If the assistant replies, answer once with: "Thanks!"
|
|
111
|
+
3. End the scenario by returning an empty response.
|
|
112
|
+
|
|
113
|
+
Rules:
|
|
114
|
+
|
|
115
|
+
- Keep replies short and plain text.
|
|
116
|
+
- Do not include markdown or lists.
|
|
117
|
+
- If the assistant says it is done, or ends the session, respond with an empty message.
|
|
118
|
+
`;
|
|
119
|
+
const DEFAULT_GRADER_PROMPT = `+++
|
|
120
|
+
label = "Default grader"
|
|
121
|
+
description = "Starter grader for this workspace."
|
|
122
|
+
contextSchema = "gambit://schemas/graders/contexts/conversation.zod.ts"
|
|
123
|
+
responseSchema = "gambit://schemas/graders/grader_output.zod.ts"
|
|
124
|
+
|
|
125
|
+
[modelParams]
|
|
126
|
+
model = ["ollama/hf.co/LiquidAI/LFM2-1.2B-Tool-GGUF:latest", "openrouter/openai/gpt-5.1-chat"]
|
|
127
|
+
+++
|
|
128
|
+
|
|
129
|
+
You are grading the assistant's response for clarity and helpfulness.
|
|
130
|
+
|
|
131
|
+
Score 1 if the assistant is clear and directly answers the user.
|
|
132
|
+
Score 0 if the response is vague or unhelpful.
|
|
133
|
+
|
|
134
|
+
Provide a short reason.
|
|
135
|
+
`;
|
|
136
|
+
const toStamp = (date) => date.toISOString().replace(/[:.]/g, "-");
|
|
137
|
+
const generateWorkspaceId = (date) => `workspace-${toStamp(date)}-${crypto.randomUUID().slice(0, 8)}`;
|
|
138
|
+
async function ensureDir(dir) {
|
|
139
|
+
await dntShim.Deno.mkdir(dir, { recursive: true });
|
|
140
|
+
}
|
|
141
|
+
async function writeFile(pathValue, contents) {
|
|
142
|
+
await dntShim.Deno.writeTextFile(pathValue, contents);
|
|
143
|
+
}
|
|
144
|
+
function ensureEmptyPath(pathValue) {
|
|
145
|
+
if ((0, mod_js_1.existsSync)(pathValue)) {
|
|
146
|
+
throw new Error(`Init target already exists: ${pathValue}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async function createWorkspaceScaffoldAtRoot(rootDir) {
|
|
150
|
+
const resolvedRoot = path.resolve(rootDir);
|
|
151
|
+
await ensureDir(resolvedRoot);
|
|
152
|
+
const rootDeckPath = path.join(resolvedRoot, "PROMPT.md");
|
|
153
|
+
const intentPath = path.join(resolvedRoot, "INTENT.md");
|
|
154
|
+
const scenariosDir = path.join(resolvedRoot, "scenarios", "default");
|
|
155
|
+
const gradersDir = path.join(resolvedRoot, "graders", "default");
|
|
156
|
+
const scenarioPromptPath = path.join(scenariosDir, "PROMPT.md");
|
|
157
|
+
const graderPromptPath = path.join(gradersDir, "PROMPT.md");
|
|
158
|
+
await ensureEmptyPath(rootDeckPath);
|
|
159
|
+
await ensureEmptyPath(intentPath);
|
|
160
|
+
await ensureEmptyPath(scenarioPromptPath);
|
|
161
|
+
await ensureEmptyPath(graderPromptPath);
|
|
162
|
+
await ensureDir(scenariosDir);
|
|
163
|
+
await ensureDir(gradersDir);
|
|
164
|
+
await writeFile(rootDeckPath, ROOT_PROMPT);
|
|
165
|
+
await writeFile(intentPath, ROOT_INTENT);
|
|
166
|
+
await writeFile(scenarioPromptPath, DEFAULT_SCENARIO_PROMPT);
|
|
167
|
+
await writeFile(graderPromptPath, DEFAULT_GRADER_PROMPT);
|
|
168
|
+
return {
|
|
169
|
+
rootDir: resolvedRoot,
|
|
170
|
+
rootDeckPath,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
async function createWorkspaceScaffold(opts) {
|
|
174
|
+
const baseDir = path.resolve(opts.baseDir);
|
|
175
|
+
await ensureDir(baseDir);
|
|
176
|
+
const now = opts.now ?? new Date();
|
|
177
|
+
let workspaceId = opts.id ?? generateWorkspaceId(now);
|
|
178
|
+
let rootDir = path.join(baseDir, workspaceId);
|
|
179
|
+
if ((0, mod_js_1.existsSync)(rootDir)) {
|
|
180
|
+
workspaceId = generateWorkspaceId(new Date(now.getTime() + 1));
|
|
181
|
+
rootDir = path.join(baseDir, workspaceId);
|
|
182
|
+
}
|
|
183
|
+
const rootDeckPath = path.join(rootDir, "PROMPT.md");
|
|
184
|
+
const intentPath = path.join(rootDir, "INTENT.md");
|
|
185
|
+
const scenariosDir = path.join(rootDir, "scenarios", "default");
|
|
186
|
+
const gradersDir = path.join(rootDir, "graders", "default");
|
|
187
|
+
await ensureDir(scenariosDir);
|
|
188
|
+
await ensureDir(gradersDir);
|
|
189
|
+
await writeFile(rootDeckPath, ROOT_PROMPT);
|
|
190
|
+
await writeFile(intentPath, ROOT_INTENT);
|
|
191
|
+
await writeFile(path.join(scenariosDir, "PROMPT.md"), DEFAULT_SCENARIO_PROMPT);
|
|
192
|
+
await writeFile(path.join(gradersDir, "PROMPT.md"), DEFAULT_GRADER_PROMPT);
|
|
193
|
+
return {
|
|
194
|
+
id: workspaceId,
|
|
195
|
+
rootDir,
|
|
196
|
+
rootDeckPath,
|
|
197
|
+
createdAt: now.toISOString(),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export declare const WORKSPACE_STATE_SCHEMA_VERSION = "workspace-state.v1";
|
|
2
|
+
export declare const WORKSPACE_ROUTE_BASE = "/workspaces";
|
|
3
|
+
export declare const WORKSPACE_API_BASE = "/api/workspace";
|
|
4
|
+
export declare const WORKSPACES_API_BASE = "/api/workspaces";
|
|
5
|
+
export type WorkspaceRouteTab = "debug" | "build" | "test" | "grade";
|
|
6
|
+
export declare const WORKSPACE_ROUTE_TABS: Array<WorkspaceRouteTab>;
|
|
7
|
+
export type WorkspaceRoute = {
|
|
8
|
+
workspaceId: string | null;
|
|
9
|
+
tab: WorkspaceRouteTab;
|
|
10
|
+
isNew: boolean;
|
|
11
|
+
testRunId?: string;
|
|
12
|
+
gradeRunId?: string;
|
|
13
|
+
};
|
|
14
|
+
export type WorkspaceStreamEvent = {
|
|
15
|
+
type: "build.stream";
|
|
16
|
+
workspaceId: string;
|
|
17
|
+
role: "assistant" | "user";
|
|
18
|
+
chunk: string;
|
|
19
|
+
turn?: number;
|
|
20
|
+
ts?: number;
|
|
21
|
+
} | {
|
|
22
|
+
type: "build.stream.end";
|
|
23
|
+
workspaceId: string;
|
|
24
|
+
role: "assistant" | "user";
|
|
25
|
+
turn?: number;
|
|
26
|
+
ts?: number;
|
|
27
|
+
} | {
|
|
28
|
+
type: "test.stream";
|
|
29
|
+
workspaceId: string;
|
|
30
|
+
role: "assistant" | "user";
|
|
31
|
+
chunk: string;
|
|
32
|
+
turn?: number;
|
|
33
|
+
ts?: number;
|
|
34
|
+
} | {
|
|
35
|
+
type: "test.stream.end";
|
|
36
|
+
workspaceId: string;
|
|
37
|
+
role: "assistant" | "user";
|
|
38
|
+
turn?: number;
|
|
39
|
+
ts?: number;
|
|
40
|
+
} | {
|
|
41
|
+
type: "grade.session";
|
|
42
|
+
workspaceId: string;
|
|
43
|
+
runId?: string;
|
|
44
|
+
ts?: number;
|
|
45
|
+
};
|
|
46
|
+
export type WorkspaceReducerEvent = {
|
|
47
|
+
type: "workspace.loaded";
|
|
48
|
+
workspaceId: string;
|
|
49
|
+
state: unknown;
|
|
50
|
+
} | {
|
|
51
|
+
type: "build.status";
|
|
52
|
+
workspaceId: string;
|
|
53
|
+
run: unknown;
|
|
54
|
+
} | {
|
|
55
|
+
type: "test.status";
|
|
56
|
+
workspaceId: string;
|
|
57
|
+
run: unknown;
|
|
58
|
+
} | {
|
|
59
|
+
type: "grade.status";
|
|
60
|
+
workspaceId: string;
|
|
61
|
+
run: unknown;
|
|
62
|
+
} | WorkspaceStreamEvent;
|
|
63
|
+
export type WorkspaceCreateResponse = {
|
|
64
|
+
workspaceId: string;
|
|
65
|
+
deckPath: string;
|
|
66
|
+
workspaceDir: string;
|
|
67
|
+
createdAt: string;
|
|
68
|
+
workspaceSchemaVersion: string;
|
|
69
|
+
};
|
|
70
|
+
export declare const buildWorkspacePath: (tab: WorkspaceRouteTab, workspaceId?: string | null, opts?: {
|
|
71
|
+
runId?: string;
|
|
72
|
+
}) => string;
|
|
73
|
+
export declare const parseWorkspaceRoute: (pathname: string) => WorkspaceRoute | null;
|
|
74
|
+
export declare const WORKSPACE_ID_ALIASES: readonly ["workspaceId"];
|
|
75
|
+
export declare const resolveWorkspaceIdFromRecord: (record: Record<string, unknown>) => string | undefined;
|
|
76
|
+
export declare const resolveWorkspaceIdFromSearchParams: (params: URLSearchParams) => string | undefined;
|
|
77
|
+
export declare const workspaceSchemaError: (workspaceId: string, foundVersion: string | null) => string;
|
|
78
|
+
//# sourceMappingURL=workspace_contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace_contract.d.ts","sourceRoot":"","sources":["../../src/src/workspace_contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.workspaceSchemaError = exports.resolveWorkspaceIdFromSearchParams = exports.resolveWorkspaceIdFromRecord = exports.WORKSPACE_ID_ALIASES = exports.parseWorkspaceRoute = exports.buildWorkspacePath = exports.WORKSPACE_ROUTE_TABS = exports.WORKSPACES_API_BASE = exports.WORKSPACE_API_BASE = exports.WORKSPACE_ROUTE_BASE = exports.WORKSPACE_STATE_SCHEMA_VERSION = void 0;
|
|
4
|
+
exports.WORKSPACE_STATE_SCHEMA_VERSION = "workspace-state.v1";
|
|
5
|
+
exports.WORKSPACE_ROUTE_BASE = "/workspaces";
|
|
6
|
+
exports.WORKSPACE_API_BASE = "/api/workspace";
|
|
7
|
+
exports.WORKSPACES_API_BASE = "/api/workspaces";
|
|
8
|
+
exports.WORKSPACE_ROUTE_TABS = [
|
|
9
|
+
"debug",
|
|
10
|
+
"build",
|
|
11
|
+
"test",
|
|
12
|
+
"grade",
|
|
13
|
+
];
|
|
14
|
+
const buildWorkspacePath = (tab, workspaceId, opts) => {
|
|
15
|
+
const encoded = workspaceId ? encodeURIComponent(workspaceId) : "new";
|
|
16
|
+
const base = `${exports.WORKSPACE_ROUTE_BASE}/${encoded}/${tab}`;
|
|
17
|
+
const runId = opts?.runId;
|
|
18
|
+
if (!runId)
|
|
19
|
+
return base;
|
|
20
|
+
if (tab !== "test" && tab !== "grade")
|
|
21
|
+
return base;
|
|
22
|
+
return `${base}/${encodeURIComponent(runId)}`;
|
|
23
|
+
};
|
|
24
|
+
exports.buildWorkspacePath = buildWorkspacePath;
|
|
25
|
+
const parseWorkspaceRoute = (pathname) => {
|
|
26
|
+
const match = pathname.match(/^\/workspaces\/([^/]+)\/(debug|build|test|grade)(?:\/([^/]+))?$/);
|
|
27
|
+
if (!match)
|
|
28
|
+
return null;
|
|
29
|
+
const rawId = decodeURIComponent(match[1]);
|
|
30
|
+
const tab = match[2];
|
|
31
|
+
const runSegment = typeof match[3] === "string"
|
|
32
|
+
? decodeURIComponent(match[3])
|
|
33
|
+
: undefined;
|
|
34
|
+
if (runSegment && tab !== "test" && tab !== "grade")
|
|
35
|
+
return null;
|
|
36
|
+
if (rawId === "new" && runSegment)
|
|
37
|
+
return null;
|
|
38
|
+
if (rawId === "new") {
|
|
39
|
+
return { workspaceId: null, tab, isNew: true };
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
workspaceId: rawId,
|
|
43
|
+
tab,
|
|
44
|
+
isNew: false,
|
|
45
|
+
testRunId: tab === "test" ? runSegment : undefined,
|
|
46
|
+
gradeRunId: tab === "grade" ? runSegment : undefined,
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
exports.parseWorkspaceRoute = parseWorkspaceRoute;
|
|
50
|
+
exports.WORKSPACE_ID_ALIASES = ["workspaceId"];
|
|
51
|
+
const readString = (record, key) => {
|
|
52
|
+
const value = record[key];
|
|
53
|
+
return typeof value === "string" && value.trim().length > 0
|
|
54
|
+
? value
|
|
55
|
+
: undefined;
|
|
56
|
+
};
|
|
57
|
+
const resolveWorkspaceIdFromRecord = (record) => {
|
|
58
|
+
for (const key of exports.WORKSPACE_ID_ALIASES) {
|
|
59
|
+
const value = readString(record, key);
|
|
60
|
+
if (value)
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
return undefined;
|
|
64
|
+
};
|
|
65
|
+
exports.resolveWorkspaceIdFromRecord = resolveWorkspaceIdFromRecord;
|
|
66
|
+
const resolveWorkspaceIdFromSearchParams = (params) => {
|
|
67
|
+
for (const key of exports.WORKSPACE_ID_ALIASES) {
|
|
68
|
+
const value = params.get(key);
|
|
69
|
+
if (typeof value === "string" && value.trim().length > 0) {
|
|
70
|
+
return value;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return undefined;
|
|
74
|
+
};
|
|
75
|
+
exports.resolveWorkspaceIdFromSearchParams = resolveWorkspaceIdFromSearchParams;
|
|
76
|
+
const workspaceSchemaError = (workspaceId, foundVersion) => {
|
|
77
|
+
const shown = foundVersion ? `"${foundVersion}"` : "missing";
|
|
78
|
+
return [
|
|
79
|
+
`Unsupported workspace state schema for "${workspaceId}" (found ${shown}).`,
|
|
80
|
+
`Expected "${exports.WORKSPACE_STATE_SCHEMA_VERSION}".`,
|
|
81
|
+
`Recreate this workspace with ${exports.WORKSPACE_API_BASE}/new.`,
|
|
82
|
+
].join(" ");
|
|
83
|
+
};
|
|
84
|
+
exports.workspaceSchemaError = workspaceSchemaError;
|