@bolt-foundry/gambit-core 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/README.md +61 -34
- package/cards/context.card.md +5 -5
- package/cards/generate-test-input.card.md +12 -0
- package/decks/anthropic/agent-sdk/PROMPT.md +9 -0
- package/decks/openai/codex-sdk/PROMPT.md +9 -0
- package/decks/openai/codex-sdk/codex_client.ts +109 -0
- package/decks/openai/codex-sdk/codex_sdk_bridge.deck.ts +36 -0
- package/esm/cards/context.card.md +9 -0
- package/esm/cards/end.card.md +10 -0
- package/esm/cards/generate-test-input.card.md +12 -0
- package/esm/cards/respond.card.md +10 -0
- package/esm/decks/anthropic/agent-sdk/PROMPT.md +9 -0
- package/esm/decks/openai/codex-sdk/PROMPT.md +9 -0
- package/esm/decks/openai/codex-sdk/codex_client.ts +109 -0
- package/esm/decks/openai/codex-sdk/codex_sdk_bridge.deck.ts +36 -0
- package/{script/deps/jsr.io/@std/collections/1.1.4 → esm/deps/jsr.io/@std/collections/1.1.6}/deep_merge.d.ts +2 -2
- package/esm/deps/jsr.io/@std/collections/{1.1.4 → 1.1.6}/deep_merge.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/collections/{1.1.4 → 1.1.6}/deep_merge.js +29 -19
- package/esm/deps/jsr.io/@std/front-matter/1.0.9/yaml.js +1 -1
- package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.js +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.d.ts.map +1 -1
- package/{script/deps/jsr.io/@std/yaml/1.0.11 → esm/deps/jsr.io/@std/yaml/1.0.12}/_loader_state.d.ts +0 -5
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_loader_state.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_loader_state.js +216 -175
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.d.ts.map +1 -1
- package/{script/deps/jsr.io/@std/yaml/1.0.11 → esm/deps/jsr.io/@std/yaml/1.0.12}/_type/map.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.d.ts.map +1 -1
- package/{script/deps/jsr.io/@std/yaml/1.0.11 → esm/deps/jsr.io/@std/yaml/1.0.12}/_type/seq.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.js +0 -2
- package/esm/mod.d.ts +20 -10
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +11 -5
- package/esm/schemas/graders/contexts/conversation.d.ts +22 -0
- package/esm/schemas/graders/contexts/conversation.d.ts.map +1 -0
- package/esm/schemas/graders/contexts/conversation.js +17 -0
- package/esm/schemas/graders/contexts/conversation.ts +40 -0
- package/esm/schemas/graders/contexts/conversation.zod.d.ts +3 -0
- package/esm/schemas/graders/contexts/conversation.zod.d.ts.map +1 -0
- package/esm/schemas/graders/contexts/conversation.zod.js +2 -0
- package/esm/schemas/graders/contexts/conversation.zod.ts +1 -0
- package/esm/schemas/graders/contexts/conversation_tools.d.ts +31 -0
- package/esm/schemas/graders/contexts/conversation_tools.d.ts.map +1 -0
- package/esm/schemas/graders/contexts/conversation_tools.js +25 -0
- package/esm/schemas/graders/contexts/conversation_tools.ts +63 -0
- package/esm/schemas/graders/contexts/conversation_tools.zod.d.ts +3 -0
- package/esm/schemas/graders/contexts/conversation_tools.zod.d.ts.map +1 -0
- package/esm/schemas/graders/contexts/conversation_tools.zod.js +2 -0
- package/esm/schemas/graders/contexts/conversation_tools.zod.ts +1 -0
- package/esm/schemas/graders/contexts/tools.d.ts +4 -0
- package/esm/schemas/graders/contexts/tools.d.ts.map +1 -0
- package/esm/schemas/graders/contexts/tools.js +3 -0
- package/esm/schemas/graders/contexts/tools.ts +5 -0
- package/esm/schemas/graders/contexts/tools.zod.d.ts +3 -0
- package/esm/schemas/graders/contexts/tools.zod.d.ts.map +1 -0
- package/esm/schemas/graders/contexts/tools.zod.js +2 -0
- package/esm/schemas/graders/contexts/tools.zod.ts +1 -0
- package/esm/schemas/graders/contexts/turn.d.ts +10 -0
- package/esm/schemas/graders/contexts/turn.d.ts.map +1 -0
- package/esm/schemas/graders/contexts/turn.js +8 -0
- package/esm/schemas/graders/contexts/turn.ts +17 -0
- package/esm/schemas/graders/contexts/turn.zod.d.ts +3 -0
- package/esm/schemas/graders/contexts/turn.zod.d.ts.map +1 -0
- package/esm/schemas/graders/contexts/turn.zod.js +2 -0
- package/esm/schemas/graders/contexts/turn.zod.ts +1 -0
- package/esm/schemas/graders/contexts/turn_tools.d.ts +32 -0
- package/esm/schemas/graders/contexts/turn_tools.d.ts.map +1 -0
- package/esm/schemas/graders/contexts/turn_tools.js +28 -0
- package/esm/schemas/graders/contexts/turn_tools.ts +63 -0
- package/esm/schemas/graders/contexts/turn_tools.zod.d.ts +3 -0
- package/esm/schemas/graders/contexts/turn_tools.zod.d.ts.map +1 -0
- package/esm/schemas/graders/contexts/turn_tools.zod.js +2 -0
- package/esm/schemas/graders/contexts/turn_tools.zod.ts +1 -0
- package/esm/schemas/graders/grader_output.d.ts +10 -0
- package/esm/schemas/graders/grader_output.d.ts.map +1 -0
- package/esm/schemas/graders/grader_output.js +8 -0
- package/esm/schemas/graders/grader_output.ts +15 -0
- package/esm/schemas/graders/grader_output.zod.d.ts +3 -0
- package/esm/schemas/graders/grader_output.zod.d.ts.map +1 -0
- package/esm/schemas/graders/grader_output.zod.js +2 -0
- package/esm/schemas/graders/grader_output.zod.ts +1 -0
- package/esm/schemas/graders/respond.d.ts +12 -0
- package/esm/schemas/graders/respond.d.ts.map +1 -0
- package/esm/schemas/graders/respond.js +10 -0
- package/esm/schemas/graders/respond.ts +19 -0
- package/esm/schemas/graders/respond.zod.d.ts +3 -0
- package/esm/schemas/graders/respond.zod.d.ts.map +1 -0
- package/esm/schemas/graders/respond.zod.js +2 -0
- package/esm/schemas/graders/respond.zod.ts +1 -0
- package/esm/schemas/scenarios/plain_chat_input_optional.d.ts +5 -0
- package/esm/schemas/scenarios/plain_chat_input_optional.d.ts.map +1 -0
- package/esm/schemas/scenarios/plain_chat_input_optional.js +5 -0
- package/esm/schemas/scenarios/plain_chat_input_optional.ts +6 -0
- package/esm/schemas/scenarios/plain_chat_input_optional.zod.d.ts +3 -0
- package/esm/schemas/scenarios/plain_chat_input_optional.zod.d.ts.map +1 -0
- package/esm/schemas/scenarios/plain_chat_input_optional.zod.js +2 -0
- package/esm/schemas/scenarios/plain_chat_input_optional.zod.ts +1 -0
- package/esm/schemas/scenarios/plain_chat_output.d.ts +5 -0
- package/esm/schemas/scenarios/plain_chat_output.d.ts.map +1 -0
- package/esm/schemas/scenarios/plain_chat_output.js +4 -0
- package/esm/schemas/scenarios/plain_chat_output.ts +5 -0
- package/esm/schemas/scenarios/plain_chat_output.zod.d.ts +3 -0
- package/esm/schemas/scenarios/plain_chat_output.zod.d.ts.map +1 -0
- package/esm/schemas/scenarios/plain_chat_output.zod.js +2 -0
- package/esm/schemas/scenarios/plain_chat_output.zod.ts +1 -0
- package/esm/snippets/context.md +8 -0
- package/esm/snippets/end.md +10 -0
- package/esm/snippets/generate-test-input.md +12 -0
- package/esm/snippets/init.md +12 -0
- package/esm/snippets/respond.md +10 -0
- package/esm/snippets/scenario-participant.md +10 -0
- package/esm/src/builtins.d.ts +2 -0
- package/esm/src/builtins.d.ts.map +1 -1
- package/esm/src/builtins.js +45 -1
- package/esm/src/constants.d.ts +4 -1
- package/esm/src/constants.d.ts.map +1 -1
- package/esm/src/constants.js +5 -4
- package/esm/src/definitions.d.ts +5 -1
- package/esm/src/definitions.d.ts.map +1 -1
- package/esm/src/loader.d.ts.map +1 -1
- package/esm/src/loader.js +220 -13
- package/esm/src/markdown.d.ts.map +1 -1
- package/esm/src/markdown.js +322 -53
- package/esm/src/permissions.d.ts +143 -0
- package/esm/src/permissions.d.ts.map +1 -0
- package/esm/src/permissions.js +406 -0
- package/esm/src/render.d.ts.map +1 -1
- package/esm/src/render.js +22 -8
- package/esm/src/runtime.d.ts +44 -3
- package/esm/src/runtime.d.ts.map +1 -1
- package/esm/src/runtime.js +4629 -407
- package/esm/src/runtime_exec_host.d.ts +6 -0
- package/esm/src/runtime_exec_host.d.ts.map +1 -0
- package/esm/src/runtime_exec_host.js +17 -0
- package/esm/src/runtime_exec_host_contract.d.ts +23 -0
- package/esm/src/runtime_exec_host_contract.d.ts.map +1 -0
- package/esm/src/runtime_exec_host_contract.js +14 -0
- package/esm/src/runtime_exec_host_deno.d.ts +3 -0
- package/esm/src/runtime_exec_host_deno.d.ts.map +1 -0
- package/esm/src/runtime_exec_host_deno.js +35 -0
- package/esm/src/runtime_exec_host_unsupported.d.ts +3 -0
- package/esm/src/runtime_exec_host_unsupported.d.ts.map +1 -0
- package/esm/src/runtime_exec_host_unsupported.js +8 -0
- package/esm/src/runtime_worker_host.d.ts +6 -0
- package/esm/src/runtime_worker_host.d.ts.map +1 -0
- package/esm/src/runtime_worker_host.js +17 -0
- package/esm/src/runtime_worker_host_contract.d.ts +33 -0
- package/esm/src/runtime_worker_host_contract.d.ts.map +1 -0
- package/esm/src/runtime_worker_host_contract.js +14 -0
- package/esm/src/runtime_worker_host_deno.d.ts +3 -0
- package/esm/src/runtime_worker_host_deno.d.ts.map +1 -0
- package/esm/src/runtime_worker_host_deno.js +26 -0
- package/esm/src/runtime_worker_host_unsupported.d.ts +3 -0
- package/esm/src/runtime_worker_host_unsupported.d.ts.map +1 -0
- package/esm/src/runtime_worker_host_unsupported.js +8 -0
- package/esm/src/state.d.ts +4 -1
- package/esm/src/state.d.ts.map +1 -1
- package/esm/src/state.js +48 -2
- package/esm/src/types.d.ts +405 -1
- package/esm/src/types.d.ts.map +1 -1
- package/esm/src/types.js +102 -1
- package/package.json +73 -2
- package/schemas/graders/contexts/conversation.ts +32 -9
- package/schemas/graders/contexts/conversation.zod.ts +1 -0
- package/schemas/graders/contexts/conversation_tools.ts +63 -0
- package/schemas/graders/contexts/conversation_tools.zod.ts +1 -0
- package/schemas/graders/contexts/tools.ts +5 -0
- package/schemas/graders/contexts/tools.zod.ts +1 -0
- package/schemas/graders/contexts/turn.ts +8 -1
- package/schemas/graders/contexts/turn.zod.ts +1 -0
- package/schemas/graders/contexts/turn_tools.ts +63 -0
- package/schemas/graders/contexts/turn_tools.zod.ts +1 -0
- package/schemas/graders/grader_output.ts +15 -0
- package/schemas/graders/grader_output.zod.ts +1 -0
- package/schemas/graders/respond.ts +13 -3
- package/schemas/graders/respond.zod.ts +1 -0
- package/schemas/scenarios/plain_chat_input_optional.ts +6 -0
- package/schemas/scenarios/plain_chat_input_optional.zod.ts +1 -0
- package/schemas/scenarios/plain_chat_output.ts +5 -0
- package/schemas/scenarios/plain_chat_output.zod.ts +1 -0
- package/script/cards/context.card.md +9 -0
- package/script/cards/end.card.md +10 -0
- package/script/cards/generate-test-input.card.md +12 -0
- package/script/cards/respond.card.md +10 -0
- package/script/decks/anthropic/agent-sdk/PROMPT.md +9 -0
- package/script/decks/openai/codex-sdk/PROMPT.md +9 -0
- package/script/decks/openai/codex-sdk/codex_client.ts +109 -0
- package/script/decks/openai/codex-sdk/codex_sdk_bridge.deck.ts +36 -0
- package/{esm/deps/jsr.io/@std/collections/1.1.4 → script/deps/jsr.io/@std/collections/1.1.6}/deep_merge.d.ts +2 -2
- package/script/deps/jsr.io/@std/collections/{1.1.4 → 1.1.6}/deep_merge.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/collections/{1.1.4 → 1.1.6}/deep_merge.js +29 -19
- package/script/deps/jsr.io/@std/front-matter/1.0.9/yaml.js +1 -1
- package/script/deps/jsr.io/@std/toml/1.0.11/_parser.js +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.d.ts.map +1 -1
- package/{esm/deps/jsr.io/@std/yaml/1.0.11 → script/deps/jsr.io/@std/yaml/1.0.12}/_loader_state.d.ts +0 -5
- package/script/deps/jsr.io/@std/yaml/1.0.12/_loader_state.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_loader_state.js +216 -175
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.d.ts.map +1 -1
- package/{esm/deps/jsr.io/@std/yaml/1.0.11 → script/deps/jsr.io/@std/yaml/1.0.12}/_type/map.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.d.ts.map +1 -1
- package/{esm/deps/jsr.io/@std/yaml/1.0.11 → script/deps/jsr.io/@std/yaml/1.0.12}/_type/seq.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.d.ts.map +1 -1
- package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.js +0 -2
- package/script/mod.d.ts +20 -10
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +25 -9
- package/script/schemas/graders/contexts/conversation.d.ts +22 -0
- package/script/schemas/graders/contexts/conversation.d.ts.map +1 -0
- package/script/schemas/graders/contexts/conversation.js +20 -0
- package/script/schemas/graders/contexts/conversation.ts +40 -0
- package/script/schemas/graders/contexts/conversation.zod.d.ts +3 -0
- package/script/schemas/graders/contexts/conversation.zod.d.ts.map +1 -0
- package/script/schemas/graders/contexts/conversation.zod.js +9 -0
- package/script/schemas/graders/contexts/conversation.zod.ts +1 -0
- package/script/schemas/graders/contexts/conversation_tools.d.ts +31 -0
- package/script/schemas/graders/contexts/conversation_tools.d.ts.map +1 -0
- package/script/schemas/graders/contexts/conversation_tools.js +28 -0
- package/script/schemas/graders/contexts/conversation_tools.ts +63 -0
- package/script/schemas/graders/contexts/conversation_tools.zod.d.ts +3 -0
- package/script/schemas/graders/contexts/conversation_tools.zod.d.ts.map +1 -0
- package/script/schemas/graders/contexts/conversation_tools.zod.js +9 -0
- package/script/schemas/graders/contexts/conversation_tools.zod.ts +1 -0
- package/script/schemas/graders/contexts/tools.d.ts +4 -0
- package/script/schemas/graders/contexts/tools.d.ts.map +1 -0
- package/script/schemas/graders/contexts/tools.js +12 -0
- package/script/schemas/graders/contexts/tools.ts +5 -0
- package/script/schemas/graders/contexts/tools.zod.d.ts +3 -0
- package/script/schemas/graders/contexts/tools.zod.d.ts.map +1 -0
- package/script/schemas/graders/contexts/tools.zod.js +9 -0
- package/script/schemas/graders/contexts/tools.zod.ts +1 -0
- package/script/schemas/graders/contexts/turn.d.ts +10 -0
- package/script/schemas/graders/contexts/turn.d.ts.map +1 -0
- package/script/schemas/graders/contexts/turn.js +10 -0
- package/script/schemas/graders/contexts/turn.ts +17 -0
- package/script/schemas/graders/contexts/turn.zod.d.ts +3 -0
- package/script/schemas/graders/contexts/turn.zod.d.ts.map +1 -0
- package/script/schemas/graders/contexts/turn.zod.js +9 -0
- package/script/schemas/graders/contexts/turn.zod.ts +1 -0
- package/script/schemas/graders/contexts/turn_tools.d.ts +32 -0
- package/script/schemas/graders/contexts/turn_tools.d.ts.map +1 -0
- package/script/schemas/graders/contexts/turn_tools.js +31 -0
- package/script/schemas/graders/contexts/turn_tools.ts +63 -0
- package/script/schemas/graders/contexts/turn_tools.zod.d.ts +3 -0
- package/script/schemas/graders/contexts/turn_tools.zod.d.ts.map +1 -0
- package/script/schemas/graders/contexts/turn_tools.zod.js +9 -0
- package/script/schemas/graders/contexts/turn_tools.zod.ts +1 -0
- package/script/schemas/graders/grader_output.d.ts +10 -0
- package/script/schemas/graders/grader_output.d.ts.map +1 -0
- package/script/schemas/graders/grader_output.js +10 -0
- package/script/schemas/graders/grader_output.ts +15 -0
- package/script/schemas/graders/grader_output.zod.d.ts +3 -0
- package/script/schemas/graders/grader_output.zod.d.ts.map +1 -0
- package/script/schemas/graders/grader_output.zod.js +9 -0
- package/script/schemas/graders/grader_output.zod.ts +1 -0
- package/script/schemas/graders/respond.d.ts +12 -0
- package/script/schemas/graders/respond.d.ts.map +1 -0
- package/script/schemas/graders/respond.js +12 -0
- package/script/schemas/graders/respond.ts +19 -0
- package/script/schemas/graders/respond.zod.d.ts +3 -0
- package/script/schemas/graders/respond.zod.d.ts.map +1 -0
- package/script/schemas/graders/respond.zod.js +9 -0
- package/script/schemas/graders/respond.zod.ts +1 -0
- package/script/schemas/scenarios/plain_chat_input_optional.d.ts +5 -0
- package/script/schemas/scenarios/plain_chat_input_optional.d.ts.map +1 -0
- package/script/schemas/scenarios/plain_chat_input_optional.js +7 -0
- package/script/schemas/scenarios/plain_chat_input_optional.ts +6 -0
- package/script/schemas/scenarios/plain_chat_input_optional.zod.d.ts +3 -0
- package/script/schemas/scenarios/plain_chat_input_optional.zod.d.ts.map +1 -0
- package/script/schemas/scenarios/plain_chat_input_optional.zod.js +9 -0
- package/script/schemas/scenarios/plain_chat_input_optional.zod.ts +1 -0
- package/script/schemas/scenarios/plain_chat_output.d.ts +5 -0
- package/script/schemas/scenarios/plain_chat_output.d.ts.map +1 -0
- package/script/schemas/scenarios/plain_chat_output.js +6 -0
- package/script/schemas/scenarios/plain_chat_output.ts +5 -0
- package/script/schemas/scenarios/plain_chat_output.zod.d.ts +3 -0
- package/script/schemas/scenarios/plain_chat_output.zod.d.ts.map +1 -0
- package/script/schemas/scenarios/plain_chat_output.zod.js +9 -0
- package/script/schemas/scenarios/plain_chat_output.zod.ts +1 -0
- package/script/snippets/context.md +8 -0
- package/script/snippets/end.md +10 -0
- package/script/snippets/generate-test-input.md +12 -0
- package/script/snippets/init.md +12 -0
- package/script/snippets/respond.md +10 -0
- package/script/snippets/scenario-participant.md +10 -0
- package/script/src/builtins.d.ts +2 -0
- package/script/src/builtins.d.ts.map +1 -1
- package/script/src/builtins.js +47 -1
- package/script/src/constants.d.ts +4 -1
- package/script/src/constants.d.ts.map +1 -1
- package/script/src/constants.js +6 -5
- package/script/src/definitions.d.ts +5 -1
- package/script/src/definitions.d.ts.map +1 -1
- package/script/src/loader.d.ts.map +1 -1
- package/script/src/loader.js +219 -12
- package/script/src/markdown.d.ts.map +1 -1
- package/script/src/markdown.js +321 -52
- package/script/src/permissions.d.ts +143 -0
- package/script/src/permissions.d.ts.map +1 -0
- package/script/src/permissions.js +453 -0
- package/script/src/render.d.ts.map +1 -1
- package/script/src/render.js +22 -8
- package/script/src/runtime.d.ts +44 -3
- package/script/src/runtime.d.ts.map +1 -1
- package/script/src/runtime.js +4631 -406
- package/script/src/runtime_exec_host.d.ts +6 -0
- package/script/src/runtime_exec_host.d.ts.map +1 -0
- package/script/src/runtime_exec_host.js +56 -0
- package/script/src/runtime_exec_host_contract.d.ts +23 -0
- package/script/src/runtime_exec_host_contract.d.ts.map +1 -0
- package/script/src/runtime_exec_host_contract.js +18 -0
- package/script/src/runtime_exec_host_deno.d.ts +3 -0
- package/script/src/runtime_exec_host_deno.d.ts.map +1 -0
- package/script/src/runtime_exec_host_deno.js +71 -0
- package/script/src/runtime_exec_host_unsupported.d.ts +3 -0
- package/script/src/runtime_exec_host_unsupported.d.ts.map +1 -0
- package/script/src/runtime_exec_host_unsupported.js +11 -0
- package/script/src/runtime_worker_host.d.ts +6 -0
- package/script/src/runtime_worker_host.d.ts.map +1 -0
- package/script/src/runtime_worker_host.js +56 -0
- package/script/src/runtime_worker_host_contract.d.ts +33 -0
- package/script/src/runtime_worker_host_contract.d.ts.map +1 -0
- package/script/src/runtime_worker_host_contract.js +18 -0
- package/script/src/runtime_worker_host_deno.d.ts +3 -0
- package/script/src/runtime_worker_host_deno.d.ts.map +1 -0
- package/script/src/runtime_worker_host_deno.js +62 -0
- package/script/src/runtime_worker_host_unsupported.d.ts +3 -0
- package/script/src/runtime_worker_host_unsupported.d.ts.map +1 -0
- package/script/src/runtime_worker_host_unsupported.js +11 -0
- package/script/src/state.d.ts +4 -1
- package/script/src/state.d.ts.map +1 -1
- package/script/src/state.js +48 -2
- package/script/src/types.d.ts +405 -1
- package/script/src/types.d.ts.map +1 -1
- package/script/src/types.js +103 -0
- package/snippets/context.md +8 -0
- package/snippets/end.md +10 -0
- package/snippets/generate-test-input.md +12 -0
- package/snippets/init.md +12 -0
- package/snippets/respond.md +10 -0
- package/snippets/scenario-participant.md +10 -0
- package/esm/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts +0 -6
- package/esm/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/collections/1.1.4/_utils.js +0 -18
- package/esm/deps/jsr.io/@std/yaml/1.0.11/_loader_state.d.ts.map +0 -1
- package/esm/src/openai_compat.d.ts +0 -63
- package/esm/src/openai_compat.d.ts.map +0 -1
- package/esm/src/openai_compat.js +0 -272
- package/esm/src/providers/openrouter.d.ts +0 -8
- package/esm/src/providers/openrouter.d.ts.map +0 -1
- package/esm/src/providers/openrouter.js +0 -168
- package/script/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts +0 -6
- package/script/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts.map +0 -1
- package/script/deps/jsr.io/@std/collections/1.1.4/_utils.js +0 -21
- package/script/deps/jsr.io/@std/yaml/1.0.11/_loader_state.d.ts.map +0 -1
- package/script/src/openai_compat.d.ts +0 -63
- package/script/src/openai_compat.d.ts.map +0 -1
- package/script/src/openai_compat.js +0 -276
- package/script/src/providers/openrouter.d.ts +0 -8
- package/script/src/providers/openrouter.d.ts.map +0 -1
- package/script/src/providers/openrouter.js +0 -207
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/map.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/map.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/seq.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/seq.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/map.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/map.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/seq.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/seq.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.d.ts +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.js +0 -0
- /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.d.ts +0 -0
package/script/src/markdown.js
CHANGED
|
@@ -42,6 +42,7 @@ const path = __importStar(require("../deps/jsr.io/@std/path/1.1.4/mod.js"));
|
|
|
42
42
|
const constants_js_1 = require("./constants.js");
|
|
43
43
|
const definitions_js_1 = require("./definitions.js");
|
|
44
44
|
const loader_js_1 = require("./loader.js");
|
|
45
|
+
const permissions_js_1 = require("./permissions.js");
|
|
45
46
|
const schema_js_1 = require("./schema.js");
|
|
46
47
|
const builtins_js_1 = require("./builtins.js");
|
|
47
48
|
const logger = console;
|
|
@@ -53,8 +54,10 @@ const LEGACY_MARKER_WARNINGS = {
|
|
|
53
54
|
init: false,
|
|
54
55
|
end: false,
|
|
55
56
|
};
|
|
57
|
+
const LEGACY_SCHEMA_WARNINGS = new Set();
|
|
58
|
+
const LEGACY_FRAGMENT_WARNINGS = new Set();
|
|
56
59
|
const INIT_TEXT = `
|
|
57
|
-
You will automatically receive a \`${constants_js_1.
|
|
60
|
+
You will automatically receive a \`${constants_js_1.GAMBIT_TOOL_CONTEXT}\` tool result at the start that provides run/context info.
|
|
58
61
|
`.trim();
|
|
59
62
|
const RESPOND_TEXT = `
|
|
60
63
|
When you are done, call the \`${constants_js_1.GAMBIT_TOOL_RESPOND}\` tool with a JSON object that includes your \`payload\` (validated output) and optional \`status\`/ \`message\`/ \`code\`/ \`meta\`. Do not end with normal assistant text; always finish by calling \`${constants_js_1.GAMBIT_TOOL_RESPOND}\`.
|
|
@@ -68,10 +71,41 @@ function warnLegacyMarker(marker, replacement) {
|
|
|
68
71
|
LEGACY_MARKER_WARNINGS[marker] = true;
|
|
69
72
|
logger.warn(`[gambit] "gambit://${marker}" is deprecated; use ${replacement} instead.`);
|
|
70
73
|
}
|
|
74
|
+
function warnLegacySchema(resolvedPath, legacy, replacement) {
|
|
75
|
+
const key = `${resolvedPath}:${legacy}`;
|
|
76
|
+
if (LEGACY_SCHEMA_WARNINGS.has(key))
|
|
77
|
+
return;
|
|
78
|
+
LEGACY_SCHEMA_WARNINGS.add(key);
|
|
79
|
+
logger.warn(`[gambit] deck at ${resolvedPath} uses deprecated "${legacy}"; rename to "${replacement}"`);
|
|
80
|
+
}
|
|
81
|
+
function warnLegacyFragment(resolvedPath, legacy, replacement) {
|
|
82
|
+
const key = `${resolvedPath}:${legacy}`;
|
|
83
|
+
if (LEGACY_FRAGMENT_WARNINGS.has(key))
|
|
84
|
+
return;
|
|
85
|
+
LEGACY_FRAGMENT_WARNINGS.add(key);
|
|
86
|
+
logger.warn(`[gambit] card at ${resolvedPath} uses deprecated "${legacy}"; rename to "${replacement}"`);
|
|
87
|
+
}
|
|
71
88
|
function toFileUrl(p) {
|
|
72
89
|
const abs = path.resolve(p);
|
|
73
90
|
return path.toFileUrl(abs).href;
|
|
74
91
|
}
|
|
92
|
+
function startsWithFrontMatterDelimiter(raw) {
|
|
93
|
+
const normalized = raw.startsWith("\uFEFF") ? raw.slice(1) : raw;
|
|
94
|
+
const trimmed = normalized.trimStart();
|
|
95
|
+
return /^(\+\+\+|---)\s*(\r?\n|$)/.test(trimmed);
|
|
96
|
+
}
|
|
97
|
+
function parseFrontMatterOrRaw(raw, resolvedPath) {
|
|
98
|
+
try {
|
|
99
|
+
return (0, any_js_1.extract)(raw);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
if (!startsWithFrontMatterDelimiter(raw)) {
|
|
103
|
+
return { attrs: {}, body: raw };
|
|
104
|
+
}
|
|
105
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
106
|
+
throw new Error(`Failed to parse front matter in ${resolvedPath}: ${message}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
75
109
|
async function maybeLoadSchema(schemaPath, basePath) {
|
|
76
110
|
if (!schemaPath || typeof schemaPath !== "string")
|
|
77
111
|
return undefined;
|
|
@@ -81,7 +115,7 @@ async function maybeLoadSchema(schemaPath, basePath) {
|
|
|
81
115
|
const mod = await Promise.resolve(`${toFileUrl(resolved)}`).then(s => __importStar(require(s)));
|
|
82
116
|
return mod.default;
|
|
83
117
|
}
|
|
84
|
-
function normalizeDeckRefs(refs, basePath) {
|
|
118
|
+
function normalizeDeckRefs(refs, basePath, opts) {
|
|
85
119
|
if (!Array.isArray(refs))
|
|
86
120
|
return [];
|
|
87
121
|
return refs
|
|
@@ -93,13 +127,28 @@ function normalizeDeckRefs(refs, basePath) {
|
|
|
93
127
|
throw new Error("Deck reference must include a path");
|
|
94
128
|
}
|
|
95
129
|
const normalized = { ...rec };
|
|
96
|
-
normalized.path =
|
|
130
|
+
normalized.path = p.startsWith("gambit://")
|
|
131
|
+
? p
|
|
132
|
+
: path.resolve(path.dirname(basePath), p);
|
|
97
133
|
if (typeof rec.description !== "string")
|
|
98
134
|
delete normalized.description;
|
|
99
135
|
if (typeof rec.label !== "string")
|
|
100
136
|
delete normalized.label;
|
|
101
137
|
if (typeof rec.id !== "string")
|
|
102
138
|
delete normalized.id;
|
|
139
|
+
if (rec.permissions !== undefined) {
|
|
140
|
+
const parsed = (0, permissions_js_1.normalizePermissionDeclaration)(rec.permissions, path.dirname(basePath));
|
|
141
|
+
if (parsed)
|
|
142
|
+
normalized.permissions = parsed;
|
|
143
|
+
}
|
|
144
|
+
if (opts?.requireDescription) {
|
|
145
|
+
const desc = typeof rec.description === "string"
|
|
146
|
+
? rec.description.trim()
|
|
147
|
+
: "";
|
|
148
|
+
if (!desc) {
|
|
149
|
+
throw new Error(`Action deck must include a description (${basePath})`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
103
152
|
return normalized;
|
|
104
153
|
});
|
|
105
154
|
}
|
|
@@ -116,14 +165,194 @@ function mergeDeckRefs(...lists) {
|
|
|
116
165
|
}
|
|
117
166
|
return Array.from(merged.values());
|
|
118
167
|
}
|
|
119
|
-
function
|
|
120
|
-
|
|
121
|
-
|
|
168
|
+
function normalizeActionIntermediateOutputPolicy(raw, basePath) {
|
|
169
|
+
const invalid = () => {
|
|
170
|
+
throw new Error(`[gambit] Invalid intermediateOutput policy for action deck (${basePath}). Expected { emit: "allow" | "deny" }.`);
|
|
171
|
+
};
|
|
172
|
+
if (raw === undefined || raw === null) {
|
|
173
|
+
return { emit: "deny" };
|
|
174
|
+
}
|
|
175
|
+
if (typeof raw === "boolean") {
|
|
176
|
+
return { emit: raw ? "allow" : "deny" };
|
|
177
|
+
}
|
|
178
|
+
if (typeof raw === "string") {
|
|
179
|
+
const emit = raw.trim().toLowerCase();
|
|
180
|
+
if (emit === "allow" || emit === "deny")
|
|
181
|
+
return { emit };
|
|
182
|
+
invalid();
|
|
183
|
+
}
|
|
184
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
185
|
+
invalid();
|
|
186
|
+
const emitRaw = raw.emit;
|
|
187
|
+
if (emitRaw === undefined || emitRaw === null) {
|
|
188
|
+
return { emit: "deny" };
|
|
189
|
+
}
|
|
190
|
+
if (typeof emitRaw === "string") {
|
|
191
|
+
const emit = emitRaw.trim().toLowerCase();
|
|
192
|
+
if (emit === "allow" || emit === "deny")
|
|
193
|
+
return { emit };
|
|
194
|
+
}
|
|
195
|
+
invalid();
|
|
196
|
+
return { emit: "deny" };
|
|
197
|
+
}
|
|
198
|
+
function normalizeActionAsyncStartPolicy(raw, basePath) {
|
|
199
|
+
const invalid = () => {
|
|
200
|
+
throw new Error(`[gambit] Invalid asyncStart policy for action deck (${basePath}). Expected { mode: "allow" | "deny" }.`);
|
|
201
|
+
};
|
|
202
|
+
if (raw === undefined || raw === null) {
|
|
203
|
+
return { mode: "deny" };
|
|
204
|
+
}
|
|
205
|
+
if (typeof raw === "boolean") {
|
|
206
|
+
return { mode: raw ? "allow" : "deny" };
|
|
207
|
+
}
|
|
208
|
+
if (typeof raw === "string") {
|
|
209
|
+
const mode = raw.trim().toLowerCase();
|
|
210
|
+
if (mode === "allow" || mode === "deny")
|
|
211
|
+
return { mode };
|
|
212
|
+
invalid();
|
|
213
|
+
}
|
|
214
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
215
|
+
invalid();
|
|
216
|
+
const modeRaw = raw.mode;
|
|
217
|
+
if (modeRaw === undefined || modeRaw === null) {
|
|
218
|
+
return { mode: "deny" };
|
|
219
|
+
}
|
|
220
|
+
if (typeof modeRaw === "string") {
|
|
221
|
+
const mode = modeRaw.trim().toLowerCase();
|
|
222
|
+
if (mode === "allow" || mode === "deny")
|
|
223
|
+
return { mode };
|
|
224
|
+
}
|
|
225
|
+
invalid();
|
|
226
|
+
return { mode: "deny" };
|
|
227
|
+
}
|
|
228
|
+
async function normalizeActionDecks(entries, basePath, opts) {
|
|
229
|
+
if (!Array.isArray(entries))
|
|
230
|
+
return [];
|
|
231
|
+
const out = [];
|
|
232
|
+
for (const rawEntry of entries) {
|
|
233
|
+
if (!rawEntry || typeof rawEntry !== "object")
|
|
234
|
+
continue;
|
|
235
|
+
const rec = rawEntry;
|
|
236
|
+
const name = String(rec.name ?? "").trim();
|
|
122
237
|
if (!name) {
|
|
123
238
|
throw new Error(`Action deck must include a name (${basePath})`);
|
|
124
239
|
}
|
|
125
|
-
|
|
126
|
-
|
|
240
|
+
const desc = typeof rec.description === "string"
|
|
241
|
+
? rec.description.trim()
|
|
242
|
+
: "";
|
|
243
|
+
if (opts?.requireDescription && !desc) {
|
|
244
|
+
throw new Error(`Action deck must include a description (${basePath})`);
|
|
245
|
+
}
|
|
246
|
+
const rawPath = typeof rec.path === "string" ? rec.path.trim() : "";
|
|
247
|
+
const rawExecute = typeof rec.execute === "string"
|
|
248
|
+
? rec.execute.trim()
|
|
249
|
+
: "";
|
|
250
|
+
const hasPath = rawPath.length > 0;
|
|
251
|
+
const hasExecute = rawExecute.length > 0;
|
|
252
|
+
if (hasPath === hasExecute) {
|
|
253
|
+
throw new Error(`Action deck must include exactly one of path or execute (${basePath})`);
|
|
254
|
+
}
|
|
255
|
+
const actionContextSchema = await maybeLoadSchema(rec.contextSchema, basePath);
|
|
256
|
+
const actionResponseSchema = await maybeLoadSchema(rec.responseSchema, basePath);
|
|
257
|
+
if (hasExecute && (!actionContextSchema || !actionResponseSchema)) {
|
|
258
|
+
throw new Error(`Action execute target must include contextSchema and responseSchema (${basePath})`);
|
|
259
|
+
}
|
|
260
|
+
const selectedTarget = hasPath ? rawPath : rawExecute;
|
|
261
|
+
const normalizedPath = selectedTarget.startsWith("gambit://")
|
|
262
|
+
? selectedTarget
|
|
263
|
+
: path.resolve(path.dirname(basePath), selectedTarget);
|
|
264
|
+
const normalized = {
|
|
265
|
+
name,
|
|
266
|
+
path: normalizedPath,
|
|
267
|
+
description: desc || undefined,
|
|
268
|
+
label: typeof rec.label === "string" ? rec.label : undefined,
|
|
269
|
+
id: typeof rec.id === "string" ? rec.id : undefined,
|
|
270
|
+
execute: hasExecute ? normalizedPath : undefined,
|
|
271
|
+
contextSchema: actionContextSchema,
|
|
272
|
+
responseSchema: actionResponseSchema,
|
|
273
|
+
intermediateOutput: normalizeActionIntermediateOutputPolicy(rec.intermediateOutput, basePath),
|
|
274
|
+
asyncStart: normalizeActionAsyncStartPolicy(rec.asyncStart, basePath),
|
|
275
|
+
};
|
|
276
|
+
if (rec.permissions !== undefined) {
|
|
277
|
+
const parsed = (0, permissions_js_1.normalizePermissionDeclaration)(rec.permissions, path.dirname(basePath));
|
|
278
|
+
if (parsed)
|
|
279
|
+
normalized.permissions = parsed;
|
|
280
|
+
}
|
|
281
|
+
out.push(normalized);
|
|
282
|
+
}
|
|
283
|
+
return out;
|
|
284
|
+
}
|
|
285
|
+
async function normalizeExternalTools(refs, basePath) {
|
|
286
|
+
if (!Array.isArray(refs))
|
|
287
|
+
return [];
|
|
288
|
+
const out = [];
|
|
289
|
+
for (const entry of refs) {
|
|
290
|
+
if (!entry || typeof entry !== "object")
|
|
291
|
+
continue;
|
|
292
|
+
const rec = entry;
|
|
293
|
+
const name = String(rec.name ?? "").trim();
|
|
294
|
+
if (!name) {
|
|
295
|
+
throw new Error(`External tool must include a name (${basePath})`);
|
|
296
|
+
}
|
|
297
|
+
if (name.startsWith(constants_js_1.RESERVED_TOOL_PREFIX)) {
|
|
298
|
+
throw new Error(`External tool name ${name} is reserved (prefix ${constants_js_1.RESERVED_TOOL_PREFIX})`);
|
|
299
|
+
}
|
|
300
|
+
if (!constants_js_1.TOOL_NAME_PATTERN.test(name) || name.length > constants_js_1.MAX_TOOL_NAME_LENGTH) {
|
|
301
|
+
throw new Error(`External tool name ${name} must match ${constants_js_1.TOOL_NAME_PATTERN} and be <= ${constants_js_1.MAX_TOOL_NAME_LENGTH} characters`);
|
|
302
|
+
}
|
|
303
|
+
const inputSchema = await maybeLoadSchema(rec.inputSchema, basePath);
|
|
304
|
+
out.push({
|
|
305
|
+
name,
|
|
306
|
+
description: typeof rec.description === "string"
|
|
307
|
+
? rec.description
|
|
308
|
+
: undefined,
|
|
309
|
+
inputSchema,
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
return out;
|
|
313
|
+
}
|
|
314
|
+
const CORE_RESPONSE_ITEM_TYPES = new Set([
|
|
315
|
+
"message",
|
|
316
|
+
"function_call",
|
|
317
|
+
"function_call_output",
|
|
318
|
+
"reasoning",
|
|
319
|
+
]);
|
|
320
|
+
async function normalizeResponseItemExtensions(refs, basePath) {
|
|
321
|
+
if (!Array.isArray(refs))
|
|
322
|
+
return [];
|
|
323
|
+
const out = [];
|
|
324
|
+
const seen = new Set();
|
|
325
|
+
for (const entry of refs) {
|
|
326
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry))
|
|
327
|
+
continue;
|
|
328
|
+
const rec = entry;
|
|
329
|
+
const type = String(rec.type ?? "").trim();
|
|
330
|
+
if (!type) {
|
|
331
|
+
throw new Error(`Response item extension must include a type (${basePath})`);
|
|
332
|
+
}
|
|
333
|
+
if (!type.includes(":")) {
|
|
334
|
+
throw new Error(`Response item extension type "${type}" must be namespaced (<namespace>:<type>) (${basePath})`);
|
|
335
|
+
}
|
|
336
|
+
if (CORE_RESPONSE_ITEM_TYPES.has(type)) {
|
|
337
|
+
throw new Error(`Response item extension type "${type}" conflicts with core OpenResponses item types (${basePath})`);
|
|
338
|
+
}
|
|
339
|
+
if (seen.has(type)) {
|
|
340
|
+
throw new Error(`Duplicate response item extension type "${type}" (${basePath})`);
|
|
341
|
+
}
|
|
342
|
+
seen.add(type);
|
|
343
|
+
const dataSchema = await maybeLoadSchema(rec.dataSchema, basePath);
|
|
344
|
+
if (!dataSchema) {
|
|
345
|
+
throw new Error(`Response item extension "${type}" must include dataSchema (${basePath})`);
|
|
346
|
+
}
|
|
347
|
+
out.push({
|
|
348
|
+
type: type,
|
|
349
|
+
dataSchema,
|
|
350
|
+
description: typeof rec.description === "string"
|
|
351
|
+
? rec.description
|
|
352
|
+
: undefined,
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
return out;
|
|
127
356
|
}
|
|
128
357
|
async function expandEmbedsInBody(args) {
|
|
129
358
|
const { body, resolvedPath, stack } = args;
|
|
@@ -139,17 +368,17 @@ async function expandEmbedsInBody(args) {
|
|
|
139
368
|
const target = match[1];
|
|
140
369
|
out += body.slice(lastIndex, matchIndex);
|
|
141
370
|
if (target === RESPOND_MARKER) {
|
|
142
|
-
warnLegacyMarker("respond", "gambit://
|
|
371
|
+
warnLegacyMarker("respond", "gambit://snippets/respond.md");
|
|
143
372
|
respond = true;
|
|
144
373
|
out += RESPOND_TEXT;
|
|
145
374
|
}
|
|
146
375
|
else if (target === INIT_MARKER) {
|
|
147
|
-
warnLegacyMarker("init", "gambit://
|
|
376
|
+
warnLegacyMarker("init", "gambit://snippets/context.md");
|
|
148
377
|
initHint = true;
|
|
149
378
|
out += INIT_TEXT;
|
|
150
379
|
}
|
|
151
380
|
else if (target === END_MARKER) {
|
|
152
|
-
warnLegacyMarker("end", "gambit://
|
|
381
|
+
warnLegacyMarker("end", "gambit://snippets/end.md");
|
|
153
382
|
endHint = true;
|
|
154
383
|
out += END_TEXT;
|
|
155
384
|
}
|
|
@@ -173,17 +402,7 @@ async function loadMarkdownCard(filePath, parentPath, stack = []) {
|
|
|
173
402
|
}
|
|
174
403
|
const nextStack = [...stack, resolved];
|
|
175
404
|
const raw = await dntShim.Deno.readTextFile(resolved);
|
|
176
|
-
|
|
177
|
-
let body;
|
|
178
|
-
try {
|
|
179
|
-
const parsed = (0, any_js_1.extract)(raw);
|
|
180
|
-
attrs = parsed.attrs;
|
|
181
|
-
body = parsed.body;
|
|
182
|
-
}
|
|
183
|
-
catch (err) {
|
|
184
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
185
|
-
throw new Error(`Failed to parse front matter in ${resolved}: ${message}`);
|
|
186
|
-
}
|
|
405
|
+
const { attrs, body } = parseFrontMatterOrRaw(raw, resolved);
|
|
187
406
|
const candidate = attrs;
|
|
188
407
|
if ((0, definitions_js_1.isCardDefinition)(candidate)) {
|
|
189
408
|
// treat attrs as ts-shaped card
|
|
@@ -193,7 +412,7 @@ async function loadMarkdownCard(filePath, parentPath, stack = []) {
|
|
|
193
412
|
}
|
|
194
413
|
const hasNewActionField = attrs.actionDecks;
|
|
195
414
|
const legacyActions = attrs.actions;
|
|
196
|
-
const actionDecks = normalizeActionDecks(hasNewActionField ?? legacyActions, resolved);
|
|
415
|
+
const actionDecks = await normalizeActionDecks(hasNewActionField ?? legacyActions, resolved);
|
|
197
416
|
if (!hasNewActionField && legacyActions) {
|
|
198
417
|
logger.warn(`[gambit] card at ${resolved} uses deprecated "actions"; rename to "actionDecks"`);
|
|
199
418
|
}
|
|
@@ -206,8 +425,18 @@ async function loadMarkdownCard(filePath, parentPath, stack = []) {
|
|
|
206
425
|
throw new Error(`Action name ${a.name} must match ${constants_js_1.TOOL_NAME_PATTERN} and be <= ${constants_js_1.MAX_TOOL_NAME_LENGTH} characters`);
|
|
207
426
|
}
|
|
208
427
|
});
|
|
209
|
-
const
|
|
210
|
-
const
|
|
428
|
+
const legacyInputSchema = attrs.inputSchema;
|
|
429
|
+
const legacyOutputSchema = attrs.outputSchema;
|
|
430
|
+
const contextFragment = await maybeLoadSchema(attrs.contextFragment ??
|
|
431
|
+
legacyInputSchema, resolved);
|
|
432
|
+
const responseFragment = await maybeLoadSchema(attrs.responseFragment ??
|
|
433
|
+
legacyOutputSchema, resolved);
|
|
434
|
+
if (legacyInputSchema !== undefined) {
|
|
435
|
+
warnLegacyFragment(resolved, "inputSchema", "contextFragment");
|
|
436
|
+
}
|
|
437
|
+
if (legacyOutputSchema !== undefined) {
|
|
438
|
+
warnLegacyFragment(resolved, "outputSchema", "responseFragment");
|
|
439
|
+
}
|
|
211
440
|
const replaced = await expandEmbedsInBody({
|
|
212
441
|
body,
|
|
213
442
|
resolvedPath: resolved,
|
|
@@ -217,6 +446,7 @@ async function loadMarkdownCard(filePath, parentPath, stack = []) {
|
|
|
217
446
|
const embeddedCards = replaced.embeds;
|
|
218
447
|
const respondFlag = Boolean(attrs.respond);
|
|
219
448
|
const allowEndFlag = Boolean(attrs.allowEnd);
|
|
449
|
+
const permissions = (0, permissions_js_1.normalizePermissionDeclaration)(attrs.permissions, path.dirname(resolved));
|
|
220
450
|
return {
|
|
221
451
|
kind: "gambit.card",
|
|
222
452
|
path: resolved,
|
|
@@ -227,8 +457,11 @@ async function loadMarkdownCard(filePath, parentPath, stack = []) {
|
|
|
227
457
|
testDecks: normalizeDeckRefs(attrs.testDecks, resolved),
|
|
228
458
|
graderDecks: normalizeDeckRefs(attrs.graderDecks, resolved),
|
|
229
459
|
cards: embeddedCards,
|
|
230
|
-
|
|
231
|
-
|
|
460
|
+
permissions,
|
|
461
|
+
contextFragment,
|
|
462
|
+
responseFragment,
|
|
463
|
+
inputFragment: contextFragment,
|
|
464
|
+
outputFragment: responseFragment,
|
|
232
465
|
respond: respondFlag || replaced.respond,
|
|
233
466
|
};
|
|
234
467
|
}
|
|
@@ -237,26 +470,34 @@ async function loadMarkdownDeck(filePath, parentPath) {
|
|
|
237
470
|
? path.resolve(path.dirname(parentPath), filePath)
|
|
238
471
|
: path.resolve(filePath);
|
|
239
472
|
const raw = await dntShim.Deno.readTextFile(resolved);
|
|
240
|
-
|
|
241
|
-
let body;
|
|
242
|
-
try {
|
|
243
|
-
const parsed = (0, any_js_1.extract)(raw);
|
|
244
|
-
attrs = parsed.attrs;
|
|
245
|
-
body = parsed.body;
|
|
246
|
-
}
|
|
247
|
-
catch (err) {
|
|
248
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
249
|
-
throw new Error(`Failed to parse front matter in ${resolved}: ${message}`);
|
|
250
|
-
}
|
|
473
|
+
const { attrs, body } = parseFrontMatterOrRaw(raw, resolved);
|
|
251
474
|
const deckAttrs = attrs;
|
|
252
475
|
const deckMeta = (deckAttrs.deck ?? deckAttrs);
|
|
476
|
+
if (deckMeta.mcpServers !== undefined) {
|
|
477
|
+
throw new Error(`Deck-level [[mcpServers]] is unsupported in this phase (${resolved})`);
|
|
478
|
+
}
|
|
479
|
+
if (deckMeta.execute !== undefined) {
|
|
480
|
+
throw new Error(`Top-level execute in PROMPT.md is unsupported (${resolved})`);
|
|
481
|
+
}
|
|
253
482
|
const hasNewActionDecks = deckMeta.actionDecks;
|
|
254
|
-
const
|
|
255
|
-
const actionDecks = normalizeActionDecks(
|
|
256
|
-
|
|
257
|
-
|
|
483
|
+
const canonicalActions = deckMeta.actions;
|
|
484
|
+
const actionDecks = await normalizeActionDecks(canonicalActions, resolved, {
|
|
485
|
+
requireDescription: true,
|
|
486
|
+
});
|
|
487
|
+
const legacyActionDecks = await normalizeActionDecks(hasNewActionDecks, resolved);
|
|
488
|
+
if (hasNewActionDecks) {
|
|
489
|
+
logger.warn(`[gambit] deck at ${resolved} uses deprecated "actionDecks"; use "[[actions]]" instead.`);
|
|
258
490
|
}
|
|
259
|
-
|
|
491
|
+
if (deckMeta.testDecks) {
|
|
492
|
+
logger.warn(`[gambit] deck at ${resolved} uses deprecated "testDecks"; use "[[scenarios]]" instead.`);
|
|
493
|
+
}
|
|
494
|
+
if (deckMeta.graderDecks) {
|
|
495
|
+
logger.warn(`[gambit] deck at ${resolved} uses deprecated "graderDecks"; use "[[graders]]" instead.`);
|
|
496
|
+
}
|
|
497
|
+
const scenarioDecks = normalizeDeckRefs(deckMeta.scenarios, resolved);
|
|
498
|
+
const graderDecks = normalizeDeckRefs(deckMeta.graders, resolved);
|
|
499
|
+
const allActionDecks = [...actionDecks, ...legacyActionDecks];
|
|
500
|
+
allActionDecks.forEach((a) => {
|
|
260
501
|
if (a.name.startsWith(constants_js_1.RESERVED_TOOL_PREFIX) &&
|
|
261
502
|
!constants_js_1.BUILTIN_TOOL_NAME_SET.has(a.name)) {
|
|
262
503
|
throw new Error(`Action name ${a.name} is reserved`);
|
|
@@ -271,8 +512,18 @@ async function loadMarkdownDeck(filePath, parentPath) {
|
|
|
271
512
|
stack: [resolved],
|
|
272
513
|
});
|
|
273
514
|
const cards = replaced.embeds;
|
|
274
|
-
const
|
|
275
|
-
const
|
|
515
|
+
const legacyInputSchema = deckMeta.inputSchema;
|
|
516
|
+
const legacyOutputSchema = deckMeta.outputSchema;
|
|
517
|
+
const contextSchema = await maybeLoadSchema(deckMeta.contextSchema ??
|
|
518
|
+
legacyInputSchema, resolved);
|
|
519
|
+
const responseSchema = await maybeLoadSchema(deckMeta.responseSchema ??
|
|
520
|
+
legacyOutputSchema, resolved);
|
|
521
|
+
if (legacyInputSchema !== undefined) {
|
|
522
|
+
warnLegacySchema(resolved, "inputSchema", "contextSchema");
|
|
523
|
+
}
|
|
524
|
+
if (legacyOutputSchema !== undefined) {
|
|
525
|
+
warnLegacySchema(resolved, "outputSchema", "responseSchema");
|
|
526
|
+
}
|
|
276
527
|
const allCards = flattenCards(cards);
|
|
277
528
|
const cleanedBody = replaced.body;
|
|
278
529
|
const allowEnd = Boolean(deckMeta.allowEnd) ||
|
|
@@ -284,15 +535,17 @@ async function loadMarkdownDeck(filePath, parentPath) {
|
|
|
284
535
|
mergedActions[action.name] = action;
|
|
285
536
|
}
|
|
286
537
|
}
|
|
287
|
-
for (const action of
|
|
538
|
+
for (const action of allActionDecks) {
|
|
288
539
|
mergedActions[action.name] = action;
|
|
289
540
|
}
|
|
290
|
-
let
|
|
291
|
-
let
|
|
541
|
+
let mergedContextSchema = contextSchema;
|
|
542
|
+
let mergedResponseSchema = responseSchema;
|
|
292
543
|
for (const card of allCards) {
|
|
293
|
-
|
|
294
|
-
|
|
544
|
+
mergedContextSchema = (0, schema_js_1.mergeZodObjects)(mergedContextSchema, card.contextFragment);
|
|
545
|
+
mergedResponseSchema = (0, schema_js_1.mergeZodObjects)(mergedResponseSchema, card.responseFragment);
|
|
295
546
|
}
|
|
547
|
+
const mergedInputSchema = mergedContextSchema;
|
|
548
|
+
const mergedOutputSchema = mergedResponseSchema;
|
|
296
549
|
const normalizeHandler = (cfg, kind) => {
|
|
297
550
|
if (!cfg)
|
|
298
551
|
return undefined;
|
|
@@ -325,10 +578,19 @@ async function loadMarkdownDeck(filePath, parentPath) {
|
|
|
325
578
|
}
|
|
326
579
|
: undefined;
|
|
327
580
|
const mergedActionDecks = Object.values(mergedActions);
|
|
581
|
+
const tools = await normalizeExternalTools(deckMeta.tools, resolved);
|
|
582
|
+
const responseItemExtensions = await normalizeResponseItemExtensions(deckMeta.responseItemExtensions, resolved);
|
|
583
|
+
const actionNameSet = new Set(mergedActionDecks.map((action) => action.name));
|
|
584
|
+
for (const tool of tools) {
|
|
585
|
+
if (actionNameSet.has(tool.name)) {
|
|
586
|
+
logger.warn(`[gambit] tool ${tool.name} is shadowed by an action in ${resolved}`);
|
|
587
|
+
}
|
|
588
|
+
}
|
|
328
589
|
const rootTestDecks = normalizeDeckRefs(deckMeta.testDecks, resolved);
|
|
329
590
|
const rootGraderDecks = normalizeDeckRefs(deckMeta.graderDecks, resolved);
|
|
330
591
|
const embeddedTestDecks = allCards.flatMap((card) => card.testDecks ?? []);
|
|
331
592
|
const embeddedGraderDecks = allCards.flatMap((card) => card.graderDecks ?? []);
|
|
593
|
+
const permissions = (0, permissions_js_1.normalizePermissionDeclaration)(deckMeta.permissions, path.dirname(resolved));
|
|
332
594
|
return {
|
|
333
595
|
kind: "gambit.deck",
|
|
334
596
|
path: resolved,
|
|
@@ -336,19 +598,26 @@ async function loadMarkdownDeck(filePath, parentPath) {
|
|
|
336
598
|
allowEnd,
|
|
337
599
|
actionDecks: mergedActionDecks,
|
|
338
600
|
actions: mergedActionDecks,
|
|
339
|
-
|
|
340
|
-
|
|
601
|
+
tools,
|
|
602
|
+
responseItemExtensions,
|
|
603
|
+
testDecks: mergeDeckRefs(scenarioDecks, rootTestDecks, embeddedTestDecks),
|
|
604
|
+
graderDecks: mergeDeckRefs(graderDecks, rootGraderDecks, embeddedGraderDecks),
|
|
341
605
|
cards: allCards,
|
|
342
606
|
label: deckMeta.label,
|
|
607
|
+
startMode: deckMeta.startMode,
|
|
343
608
|
modelParams: deckMeta.modelParams,
|
|
344
609
|
guardrails: deckMeta.guardrails,
|
|
610
|
+
contextSchema: mergedContextSchema,
|
|
611
|
+
responseSchema: mergedResponseSchema,
|
|
345
612
|
inputSchema: mergedInputSchema,
|
|
346
613
|
outputSchema: mergedOutputSchema,
|
|
614
|
+
executor: undefined,
|
|
347
615
|
handlers,
|
|
348
616
|
respond: Boolean(deckMeta.respond) ||
|
|
349
617
|
replaced.respond ||
|
|
350
618
|
allCards.some((c) => c.respond),
|
|
351
619
|
inlineEmbeds: true,
|
|
620
|
+
permissions,
|
|
352
621
|
};
|
|
353
622
|
}
|
|
354
623
|
function isMarkdownFile(filePath) {
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deno-native permission kinds supported by Gambit's permission contract.
|
|
3
|
+
*/
|
|
4
|
+
export declare const PERMISSION_KINDS: readonly ["read", "write", "run", "net", "env"];
|
|
5
|
+
export type PermissionKind = (typeof PERMISSION_KINDS)[number];
|
|
6
|
+
export type PathPermissionInput = boolean | Array<string>;
|
|
7
|
+
export type RunPermissionInput = boolean | Array<string> | {
|
|
8
|
+
paths?: Array<string>;
|
|
9
|
+
commands?: Array<string>;
|
|
10
|
+
};
|
|
11
|
+
export type PermissionDeclarationInput = Partial<{
|
|
12
|
+
read: PathPermissionInput;
|
|
13
|
+
write: PathPermissionInput;
|
|
14
|
+
run: RunPermissionInput;
|
|
15
|
+
net: PathPermissionInput;
|
|
16
|
+
env: PathPermissionInput;
|
|
17
|
+
}>;
|
|
18
|
+
export type SerializedRunPermission = false | true | {
|
|
19
|
+
paths: Array<string>;
|
|
20
|
+
commands: Array<string>;
|
|
21
|
+
};
|
|
22
|
+
export type SerializedPermissionSet = {
|
|
23
|
+
read: false | true | Array<string>;
|
|
24
|
+
write: false | true | Array<string>;
|
|
25
|
+
run: SerializedRunPermission;
|
|
26
|
+
net: false | true | Array<string>;
|
|
27
|
+
env: false | true | Array<string>;
|
|
28
|
+
};
|
|
29
|
+
export type PermissionDeclaration = SerializedPermissionSet;
|
|
30
|
+
type NormalizedScope = {
|
|
31
|
+
all: boolean;
|
|
32
|
+
values: Set<string>;
|
|
33
|
+
};
|
|
34
|
+
type NormalizedRunScope = {
|
|
35
|
+
all: boolean;
|
|
36
|
+
paths: Set<string>;
|
|
37
|
+
commands: Set<string>;
|
|
38
|
+
};
|
|
39
|
+
export type NormalizedPermissionSet = {
|
|
40
|
+
baseDir: string;
|
|
41
|
+
read: NormalizedScope;
|
|
42
|
+
write: NormalizedScope;
|
|
43
|
+
run: NormalizedRunScope;
|
|
44
|
+
net: NormalizedScope;
|
|
45
|
+
env: NormalizedScope;
|
|
46
|
+
};
|
|
47
|
+
export type PermissionLayerName = "parent" | "workspace" | "declaration" | "reference" | "session" | "host";
|
|
48
|
+
export type PermissionLayerTrace = {
|
|
49
|
+
name: PermissionLayerName;
|
|
50
|
+
baseDir: string;
|
|
51
|
+
requested: SerializedPermissionSet;
|
|
52
|
+
effective: SerializedPermissionSet;
|
|
53
|
+
};
|
|
54
|
+
export type PermissionTrace = {
|
|
55
|
+
baseDir: string;
|
|
56
|
+
effective: SerializedPermissionSet;
|
|
57
|
+
layers: Array<PermissionLayerTrace>;
|
|
58
|
+
};
|
|
59
|
+
export declare function cloneNormalizedPermissions(input: NormalizedPermissionSet): NormalizedPermissionSet;
|
|
60
|
+
/**
|
|
61
|
+
* Returns an allow-all permission set anchored to `baseDir`.
|
|
62
|
+
*/
|
|
63
|
+
export declare function allowAllPermissions(baseDir: string): NormalizedPermissionSet;
|
|
64
|
+
/**
|
|
65
|
+
* Normalizes a permission declaration to a serializable, deterministic shape.
|
|
66
|
+
*
|
|
67
|
+
* Relative path grants are resolved against `baseDir`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function normalizePermissionDeclaration(input: PermissionDeclarationInput | undefined, baseDir: string): PermissionDeclaration | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Normalizes a declaration to the internal set form used during intersection.
|
|
72
|
+
*/
|
|
73
|
+
export declare function normalizePermissionDeclarationToSet(input: PermissionDeclarationInput | undefined, baseDir: string): NormalizedPermissionSet | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Serializes an internal normalized permission set for traces/persistence.
|
|
76
|
+
*/
|
|
77
|
+
export declare function serializePermissions(set: NormalizedPermissionSet): SerializedPermissionSet;
|
|
78
|
+
/**
|
|
79
|
+
* Computes the monotonic intersection between two permission sets.
|
|
80
|
+
*
|
|
81
|
+
* `baseDir` controls how relative checks (`canReadPath`/etc) are evaluated for
|
|
82
|
+
* the returned set.
|
|
83
|
+
*/
|
|
84
|
+
export declare function intersectPermissions(parent: NormalizedPermissionSet, next: NormalizedPermissionSet, baseDir: string): NormalizedPermissionSet;
|
|
85
|
+
/**
|
|
86
|
+
* Resolves effective permissions and emits a layer-by-layer permission trace.
|
|
87
|
+
*
|
|
88
|
+
* Layer precedence:
|
|
89
|
+
* 1. `parent` (or host allow-all for roots)
|
|
90
|
+
* 2. `workspace` (root only)
|
|
91
|
+
* 3. `declaration` (deck/card declaration)
|
|
92
|
+
* 4. `reference` (parent reference override)
|
|
93
|
+
* 5. `session` (root only)
|
|
94
|
+
*/
|
|
95
|
+
export declare function resolveEffectivePermissions(args: {
|
|
96
|
+
baseDir: string;
|
|
97
|
+
parent?: NormalizedPermissionSet;
|
|
98
|
+
workspace?: {
|
|
99
|
+
baseDir: string;
|
|
100
|
+
permissions: PermissionDeclarationInput;
|
|
101
|
+
};
|
|
102
|
+
declaration?: {
|
|
103
|
+
baseDir: string;
|
|
104
|
+
permissions: PermissionDeclarationInput;
|
|
105
|
+
};
|
|
106
|
+
reference?: {
|
|
107
|
+
baseDir: string;
|
|
108
|
+
permissions: PermissionDeclarationInput;
|
|
109
|
+
};
|
|
110
|
+
session?: {
|
|
111
|
+
baseDir: string;
|
|
112
|
+
permissions: PermissionDeclarationInput;
|
|
113
|
+
};
|
|
114
|
+
}): {
|
|
115
|
+
effective: NormalizedPermissionSet;
|
|
116
|
+
trace: PermissionTrace;
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Returns whether `targetPath` is readable under `set`.
|
|
120
|
+
*
|
|
121
|
+
* Relative paths are resolved against `set.baseDir`.
|
|
122
|
+
*/
|
|
123
|
+
export declare function canReadPath(set: NormalizedPermissionSet, targetPath: string): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Returns whether `targetPath` is writable under `set`.
|
|
126
|
+
*
|
|
127
|
+
* Relative paths are resolved against `set.baseDir`.
|
|
128
|
+
*/
|
|
129
|
+
export declare function canWritePath(set: NormalizedPermissionSet, targetPath: string): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Returns whether `targetPath` is executable via run-path grants.
|
|
132
|
+
*
|
|
133
|
+
* Relative paths are resolved against `set.baseDir`.
|
|
134
|
+
*/
|
|
135
|
+
export declare function canRunPath(set: NormalizedPermissionSet, targetPath: string): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* Returns whether `commandName` is executable via run-command grants.
|
|
138
|
+
*
|
|
139
|
+
* This check intentionally does not apply basename/path fallback semantics.
|
|
140
|
+
*/
|
|
141
|
+
export declare function canRunCommand(set: NormalizedPermissionSet, commandName: string): boolean;
|
|
142
|
+
export {};
|
|
143
|
+
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/src/permissions.ts"],"names":[],"mappings":"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"}
|