@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.
Files changed (466) hide show
  1. package/README.md +61 -34
  2. package/cards/context.card.md +5 -5
  3. package/cards/generate-test-input.card.md +12 -0
  4. package/decks/anthropic/agent-sdk/PROMPT.md +9 -0
  5. package/decks/openai/codex-sdk/PROMPT.md +9 -0
  6. package/decks/openai/codex-sdk/codex_client.ts +109 -0
  7. package/decks/openai/codex-sdk/codex_sdk_bridge.deck.ts +36 -0
  8. package/esm/cards/context.card.md +9 -0
  9. package/esm/cards/end.card.md +10 -0
  10. package/esm/cards/generate-test-input.card.md +12 -0
  11. package/esm/cards/respond.card.md +10 -0
  12. package/esm/decks/anthropic/agent-sdk/PROMPT.md +9 -0
  13. package/esm/decks/openai/codex-sdk/PROMPT.md +9 -0
  14. package/esm/decks/openai/codex-sdk/codex_client.ts +109 -0
  15. package/esm/decks/openai/codex-sdk/codex_sdk_bridge.deck.ts +36 -0
  16. 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
  17. package/esm/deps/jsr.io/@std/collections/{1.1.4 → 1.1.6}/deep_merge.d.ts.map +1 -1
  18. package/esm/deps/jsr.io/@std/collections/{1.1.4 → 1.1.6}/deep_merge.js +29 -19
  19. package/esm/deps/jsr.io/@std/front-matter/1.0.9/yaml.js +1 -1
  20. package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.js +1 -1
  21. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.d.ts.map +1 -1
  22. 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
  23. package/esm/deps/jsr.io/@std/yaml/1.0.12/_loader_state.d.ts.map +1 -0
  24. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_loader_state.js +216 -175
  25. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.d.ts.map +1 -1
  26. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.d.ts.map +1 -1
  27. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.d.ts.map +1 -1
  28. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.d.ts.map +1 -1
  29. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.d.ts.map +1 -1
  30. 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
  31. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.d.ts.map +1 -1
  32. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.d.ts.map +1 -1
  33. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.d.ts.map +1 -1
  34. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.d.ts.map +1 -1
  35. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.d.ts.map +1 -1
  36. 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
  37. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.d.ts.map +1 -1
  38. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.d.ts.map +1 -1
  39. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.d.ts.map +1 -1
  40. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.d.ts.map +1 -1
  41. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.d.ts.map +1 -1
  42. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.d.ts.map +1 -1
  43. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.d.ts.map +1 -1
  44. package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.js +0 -2
  45. package/esm/mod.d.ts +20 -10
  46. package/esm/mod.d.ts.map +1 -1
  47. package/esm/mod.js +11 -5
  48. package/esm/schemas/graders/contexts/conversation.d.ts +22 -0
  49. package/esm/schemas/graders/contexts/conversation.d.ts.map +1 -0
  50. package/esm/schemas/graders/contexts/conversation.js +17 -0
  51. package/esm/schemas/graders/contexts/conversation.ts +40 -0
  52. package/esm/schemas/graders/contexts/conversation.zod.d.ts +3 -0
  53. package/esm/schemas/graders/contexts/conversation.zod.d.ts.map +1 -0
  54. package/esm/schemas/graders/contexts/conversation.zod.js +2 -0
  55. package/esm/schemas/graders/contexts/conversation.zod.ts +1 -0
  56. package/esm/schemas/graders/contexts/conversation_tools.d.ts +31 -0
  57. package/esm/schemas/graders/contexts/conversation_tools.d.ts.map +1 -0
  58. package/esm/schemas/graders/contexts/conversation_tools.js +25 -0
  59. package/esm/schemas/graders/contexts/conversation_tools.ts +63 -0
  60. package/esm/schemas/graders/contexts/conversation_tools.zod.d.ts +3 -0
  61. package/esm/schemas/graders/contexts/conversation_tools.zod.d.ts.map +1 -0
  62. package/esm/schemas/graders/contexts/conversation_tools.zod.js +2 -0
  63. package/esm/schemas/graders/contexts/conversation_tools.zod.ts +1 -0
  64. package/esm/schemas/graders/contexts/tools.d.ts +4 -0
  65. package/esm/schemas/graders/contexts/tools.d.ts.map +1 -0
  66. package/esm/schemas/graders/contexts/tools.js +3 -0
  67. package/esm/schemas/graders/contexts/tools.ts +5 -0
  68. package/esm/schemas/graders/contexts/tools.zod.d.ts +3 -0
  69. package/esm/schemas/graders/contexts/tools.zod.d.ts.map +1 -0
  70. package/esm/schemas/graders/contexts/tools.zod.js +2 -0
  71. package/esm/schemas/graders/contexts/tools.zod.ts +1 -0
  72. package/esm/schemas/graders/contexts/turn.d.ts +10 -0
  73. package/esm/schemas/graders/contexts/turn.d.ts.map +1 -0
  74. package/esm/schemas/graders/contexts/turn.js +8 -0
  75. package/esm/schemas/graders/contexts/turn.ts +17 -0
  76. package/esm/schemas/graders/contexts/turn.zod.d.ts +3 -0
  77. package/esm/schemas/graders/contexts/turn.zod.d.ts.map +1 -0
  78. package/esm/schemas/graders/contexts/turn.zod.js +2 -0
  79. package/esm/schemas/graders/contexts/turn.zod.ts +1 -0
  80. package/esm/schemas/graders/contexts/turn_tools.d.ts +32 -0
  81. package/esm/schemas/graders/contexts/turn_tools.d.ts.map +1 -0
  82. package/esm/schemas/graders/contexts/turn_tools.js +28 -0
  83. package/esm/schemas/graders/contexts/turn_tools.ts +63 -0
  84. package/esm/schemas/graders/contexts/turn_tools.zod.d.ts +3 -0
  85. package/esm/schemas/graders/contexts/turn_tools.zod.d.ts.map +1 -0
  86. package/esm/schemas/graders/contexts/turn_tools.zod.js +2 -0
  87. package/esm/schemas/graders/contexts/turn_tools.zod.ts +1 -0
  88. package/esm/schemas/graders/grader_output.d.ts +10 -0
  89. package/esm/schemas/graders/grader_output.d.ts.map +1 -0
  90. package/esm/schemas/graders/grader_output.js +8 -0
  91. package/esm/schemas/graders/grader_output.ts +15 -0
  92. package/esm/schemas/graders/grader_output.zod.d.ts +3 -0
  93. package/esm/schemas/graders/grader_output.zod.d.ts.map +1 -0
  94. package/esm/schemas/graders/grader_output.zod.js +2 -0
  95. package/esm/schemas/graders/grader_output.zod.ts +1 -0
  96. package/esm/schemas/graders/respond.d.ts +12 -0
  97. package/esm/schemas/graders/respond.d.ts.map +1 -0
  98. package/esm/schemas/graders/respond.js +10 -0
  99. package/esm/schemas/graders/respond.ts +19 -0
  100. package/esm/schemas/graders/respond.zod.d.ts +3 -0
  101. package/esm/schemas/graders/respond.zod.d.ts.map +1 -0
  102. package/esm/schemas/graders/respond.zod.js +2 -0
  103. package/esm/schemas/graders/respond.zod.ts +1 -0
  104. package/esm/schemas/scenarios/plain_chat_input_optional.d.ts +5 -0
  105. package/esm/schemas/scenarios/plain_chat_input_optional.d.ts.map +1 -0
  106. package/esm/schemas/scenarios/plain_chat_input_optional.js +5 -0
  107. package/esm/schemas/scenarios/plain_chat_input_optional.ts +6 -0
  108. package/esm/schemas/scenarios/plain_chat_input_optional.zod.d.ts +3 -0
  109. package/esm/schemas/scenarios/plain_chat_input_optional.zod.d.ts.map +1 -0
  110. package/esm/schemas/scenarios/plain_chat_input_optional.zod.js +2 -0
  111. package/esm/schemas/scenarios/plain_chat_input_optional.zod.ts +1 -0
  112. package/esm/schemas/scenarios/plain_chat_output.d.ts +5 -0
  113. package/esm/schemas/scenarios/plain_chat_output.d.ts.map +1 -0
  114. package/esm/schemas/scenarios/plain_chat_output.js +4 -0
  115. package/esm/schemas/scenarios/plain_chat_output.ts +5 -0
  116. package/esm/schemas/scenarios/plain_chat_output.zod.d.ts +3 -0
  117. package/esm/schemas/scenarios/plain_chat_output.zod.d.ts.map +1 -0
  118. package/esm/schemas/scenarios/plain_chat_output.zod.js +2 -0
  119. package/esm/schemas/scenarios/plain_chat_output.zod.ts +1 -0
  120. package/esm/snippets/context.md +8 -0
  121. package/esm/snippets/end.md +10 -0
  122. package/esm/snippets/generate-test-input.md +12 -0
  123. package/esm/snippets/init.md +12 -0
  124. package/esm/snippets/respond.md +10 -0
  125. package/esm/snippets/scenario-participant.md +10 -0
  126. package/esm/src/builtins.d.ts +2 -0
  127. package/esm/src/builtins.d.ts.map +1 -1
  128. package/esm/src/builtins.js +45 -1
  129. package/esm/src/constants.d.ts +4 -1
  130. package/esm/src/constants.d.ts.map +1 -1
  131. package/esm/src/constants.js +5 -4
  132. package/esm/src/definitions.d.ts +5 -1
  133. package/esm/src/definitions.d.ts.map +1 -1
  134. package/esm/src/loader.d.ts.map +1 -1
  135. package/esm/src/loader.js +220 -13
  136. package/esm/src/markdown.d.ts.map +1 -1
  137. package/esm/src/markdown.js +322 -53
  138. package/esm/src/permissions.d.ts +143 -0
  139. package/esm/src/permissions.d.ts.map +1 -0
  140. package/esm/src/permissions.js +406 -0
  141. package/esm/src/render.d.ts.map +1 -1
  142. package/esm/src/render.js +22 -8
  143. package/esm/src/runtime.d.ts +44 -3
  144. package/esm/src/runtime.d.ts.map +1 -1
  145. package/esm/src/runtime.js +4629 -407
  146. package/esm/src/runtime_exec_host.d.ts +6 -0
  147. package/esm/src/runtime_exec_host.d.ts.map +1 -0
  148. package/esm/src/runtime_exec_host.js +17 -0
  149. package/esm/src/runtime_exec_host_contract.d.ts +23 -0
  150. package/esm/src/runtime_exec_host_contract.d.ts.map +1 -0
  151. package/esm/src/runtime_exec_host_contract.js +14 -0
  152. package/esm/src/runtime_exec_host_deno.d.ts +3 -0
  153. package/esm/src/runtime_exec_host_deno.d.ts.map +1 -0
  154. package/esm/src/runtime_exec_host_deno.js +35 -0
  155. package/esm/src/runtime_exec_host_unsupported.d.ts +3 -0
  156. package/esm/src/runtime_exec_host_unsupported.d.ts.map +1 -0
  157. package/esm/src/runtime_exec_host_unsupported.js +8 -0
  158. package/esm/src/runtime_worker_host.d.ts +6 -0
  159. package/esm/src/runtime_worker_host.d.ts.map +1 -0
  160. package/esm/src/runtime_worker_host.js +17 -0
  161. package/esm/src/runtime_worker_host_contract.d.ts +33 -0
  162. package/esm/src/runtime_worker_host_contract.d.ts.map +1 -0
  163. package/esm/src/runtime_worker_host_contract.js +14 -0
  164. package/esm/src/runtime_worker_host_deno.d.ts +3 -0
  165. package/esm/src/runtime_worker_host_deno.d.ts.map +1 -0
  166. package/esm/src/runtime_worker_host_deno.js +26 -0
  167. package/esm/src/runtime_worker_host_unsupported.d.ts +3 -0
  168. package/esm/src/runtime_worker_host_unsupported.d.ts.map +1 -0
  169. package/esm/src/runtime_worker_host_unsupported.js +8 -0
  170. package/esm/src/state.d.ts +4 -1
  171. package/esm/src/state.d.ts.map +1 -1
  172. package/esm/src/state.js +48 -2
  173. package/esm/src/types.d.ts +405 -1
  174. package/esm/src/types.d.ts.map +1 -1
  175. package/esm/src/types.js +102 -1
  176. package/package.json +73 -2
  177. package/schemas/graders/contexts/conversation.ts +32 -9
  178. package/schemas/graders/contexts/conversation.zod.ts +1 -0
  179. package/schemas/graders/contexts/conversation_tools.ts +63 -0
  180. package/schemas/graders/contexts/conversation_tools.zod.ts +1 -0
  181. package/schemas/graders/contexts/tools.ts +5 -0
  182. package/schemas/graders/contexts/tools.zod.ts +1 -0
  183. package/schemas/graders/contexts/turn.ts +8 -1
  184. package/schemas/graders/contexts/turn.zod.ts +1 -0
  185. package/schemas/graders/contexts/turn_tools.ts +63 -0
  186. package/schemas/graders/contexts/turn_tools.zod.ts +1 -0
  187. package/schemas/graders/grader_output.ts +15 -0
  188. package/schemas/graders/grader_output.zod.ts +1 -0
  189. package/schemas/graders/respond.ts +13 -3
  190. package/schemas/graders/respond.zod.ts +1 -0
  191. package/schemas/scenarios/plain_chat_input_optional.ts +6 -0
  192. package/schemas/scenarios/plain_chat_input_optional.zod.ts +1 -0
  193. package/schemas/scenarios/plain_chat_output.ts +5 -0
  194. package/schemas/scenarios/plain_chat_output.zod.ts +1 -0
  195. package/script/cards/context.card.md +9 -0
  196. package/script/cards/end.card.md +10 -0
  197. package/script/cards/generate-test-input.card.md +12 -0
  198. package/script/cards/respond.card.md +10 -0
  199. package/script/decks/anthropic/agent-sdk/PROMPT.md +9 -0
  200. package/script/decks/openai/codex-sdk/PROMPT.md +9 -0
  201. package/script/decks/openai/codex-sdk/codex_client.ts +109 -0
  202. package/script/decks/openai/codex-sdk/codex_sdk_bridge.deck.ts +36 -0
  203. 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
  204. package/script/deps/jsr.io/@std/collections/{1.1.4 → 1.1.6}/deep_merge.d.ts.map +1 -1
  205. package/script/deps/jsr.io/@std/collections/{1.1.4 → 1.1.6}/deep_merge.js +29 -19
  206. package/script/deps/jsr.io/@std/front-matter/1.0.9/yaml.js +1 -1
  207. package/script/deps/jsr.io/@std/toml/1.0.11/_parser.js +1 -1
  208. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.d.ts.map +1 -1
  209. 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
  210. package/script/deps/jsr.io/@std/yaml/1.0.12/_loader_state.d.ts.map +1 -0
  211. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_loader_state.js +216 -175
  212. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.d.ts.map +1 -1
  213. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.d.ts.map +1 -1
  214. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.d.ts.map +1 -1
  215. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.d.ts.map +1 -1
  216. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.d.ts.map +1 -1
  217. 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
  218. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.d.ts.map +1 -1
  219. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.d.ts.map +1 -1
  220. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.d.ts.map +1 -1
  221. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.d.ts.map +1 -1
  222. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.d.ts.map +1 -1
  223. 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
  224. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.d.ts.map +1 -1
  225. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.d.ts.map +1 -1
  226. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.d.ts.map +1 -1
  227. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.d.ts.map +1 -1
  228. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.d.ts.map +1 -1
  229. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.d.ts.map +1 -1
  230. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.d.ts.map +1 -1
  231. package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.js +0 -2
  232. package/script/mod.d.ts +20 -10
  233. package/script/mod.d.ts.map +1 -1
  234. package/script/mod.js +25 -9
  235. package/script/schemas/graders/contexts/conversation.d.ts +22 -0
  236. package/script/schemas/graders/contexts/conversation.d.ts.map +1 -0
  237. package/script/schemas/graders/contexts/conversation.js +20 -0
  238. package/script/schemas/graders/contexts/conversation.ts +40 -0
  239. package/script/schemas/graders/contexts/conversation.zod.d.ts +3 -0
  240. package/script/schemas/graders/contexts/conversation.zod.d.ts.map +1 -0
  241. package/script/schemas/graders/contexts/conversation.zod.js +9 -0
  242. package/script/schemas/graders/contexts/conversation.zod.ts +1 -0
  243. package/script/schemas/graders/contexts/conversation_tools.d.ts +31 -0
  244. package/script/schemas/graders/contexts/conversation_tools.d.ts.map +1 -0
  245. package/script/schemas/graders/contexts/conversation_tools.js +28 -0
  246. package/script/schemas/graders/contexts/conversation_tools.ts +63 -0
  247. package/script/schemas/graders/contexts/conversation_tools.zod.d.ts +3 -0
  248. package/script/schemas/graders/contexts/conversation_tools.zod.d.ts.map +1 -0
  249. package/script/schemas/graders/contexts/conversation_tools.zod.js +9 -0
  250. package/script/schemas/graders/contexts/conversation_tools.zod.ts +1 -0
  251. package/script/schemas/graders/contexts/tools.d.ts +4 -0
  252. package/script/schemas/graders/contexts/tools.d.ts.map +1 -0
  253. package/script/schemas/graders/contexts/tools.js +12 -0
  254. package/script/schemas/graders/contexts/tools.ts +5 -0
  255. package/script/schemas/graders/contexts/tools.zod.d.ts +3 -0
  256. package/script/schemas/graders/contexts/tools.zod.d.ts.map +1 -0
  257. package/script/schemas/graders/contexts/tools.zod.js +9 -0
  258. package/script/schemas/graders/contexts/tools.zod.ts +1 -0
  259. package/script/schemas/graders/contexts/turn.d.ts +10 -0
  260. package/script/schemas/graders/contexts/turn.d.ts.map +1 -0
  261. package/script/schemas/graders/contexts/turn.js +10 -0
  262. package/script/schemas/graders/contexts/turn.ts +17 -0
  263. package/script/schemas/graders/contexts/turn.zod.d.ts +3 -0
  264. package/script/schemas/graders/contexts/turn.zod.d.ts.map +1 -0
  265. package/script/schemas/graders/contexts/turn.zod.js +9 -0
  266. package/script/schemas/graders/contexts/turn.zod.ts +1 -0
  267. package/script/schemas/graders/contexts/turn_tools.d.ts +32 -0
  268. package/script/schemas/graders/contexts/turn_tools.d.ts.map +1 -0
  269. package/script/schemas/graders/contexts/turn_tools.js +31 -0
  270. package/script/schemas/graders/contexts/turn_tools.ts +63 -0
  271. package/script/schemas/graders/contexts/turn_tools.zod.d.ts +3 -0
  272. package/script/schemas/graders/contexts/turn_tools.zod.d.ts.map +1 -0
  273. package/script/schemas/graders/contexts/turn_tools.zod.js +9 -0
  274. package/script/schemas/graders/contexts/turn_tools.zod.ts +1 -0
  275. package/script/schemas/graders/grader_output.d.ts +10 -0
  276. package/script/schemas/graders/grader_output.d.ts.map +1 -0
  277. package/script/schemas/graders/grader_output.js +10 -0
  278. package/script/schemas/graders/grader_output.ts +15 -0
  279. package/script/schemas/graders/grader_output.zod.d.ts +3 -0
  280. package/script/schemas/graders/grader_output.zod.d.ts.map +1 -0
  281. package/script/schemas/graders/grader_output.zod.js +9 -0
  282. package/script/schemas/graders/grader_output.zod.ts +1 -0
  283. package/script/schemas/graders/respond.d.ts +12 -0
  284. package/script/schemas/graders/respond.d.ts.map +1 -0
  285. package/script/schemas/graders/respond.js +12 -0
  286. package/script/schemas/graders/respond.ts +19 -0
  287. package/script/schemas/graders/respond.zod.d.ts +3 -0
  288. package/script/schemas/graders/respond.zod.d.ts.map +1 -0
  289. package/script/schemas/graders/respond.zod.js +9 -0
  290. package/script/schemas/graders/respond.zod.ts +1 -0
  291. package/script/schemas/scenarios/plain_chat_input_optional.d.ts +5 -0
  292. package/script/schemas/scenarios/plain_chat_input_optional.d.ts.map +1 -0
  293. package/script/schemas/scenarios/plain_chat_input_optional.js +7 -0
  294. package/script/schemas/scenarios/plain_chat_input_optional.ts +6 -0
  295. package/script/schemas/scenarios/plain_chat_input_optional.zod.d.ts +3 -0
  296. package/script/schemas/scenarios/plain_chat_input_optional.zod.d.ts.map +1 -0
  297. package/script/schemas/scenarios/plain_chat_input_optional.zod.js +9 -0
  298. package/script/schemas/scenarios/plain_chat_input_optional.zod.ts +1 -0
  299. package/script/schemas/scenarios/plain_chat_output.d.ts +5 -0
  300. package/script/schemas/scenarios/plain_chat_output.d.ts.map +1 -0
  301. package/script/schemas/scenarios/plain_chat_output.js +6 -0
  302. package/script/schemas/scenarios/plain_chat_output.ts +5 -0
  303. package/script/schemas/scenarios/plain_chat_output.zod.d.ts +3 -0
  304. package/script/schemas/scenarios/plain_chat_output.zod.d.ts.map +1 -0
  305. package/script/schemas/scenarios/plain_chat_output.zod.js +9 -0
  306. package/script/schemas/scenarios/plain_chat_output.zod.ts +1 -0
  307. package/script/snippets/context.md +8 -0
  308. package/script/snippets/end.md +10 -0
  309. package/script/snippets/generate-test-input.md +12 -0
  310. package/script/snippets/init.md +12 -0
  311. package/script/snippets/respond.md +10 -0
  312. package/script/snippets/scenario-participant.md +10 -0
  313. package/script/src/builtins.d.ts +2 -0
  314. package/script/src/builtins.d.ts.map +1 -1
  315. package/script/src/builtins.js +47 -1
  316. package/script/src/constants.d.ts +4 -1
  317. package/script/src/constants.d.ts.map +1 -1
  318. package/script/src/constants.js +6 -5
  319. package/script/src/definitions.d.ts +5 -1
  320. package/script/src/definitions.d.ts.map +1 -1
  321. package/script/src/loader.d.ts.map +1 -1
  322. package/script/src/loader.js +219 -12
  323. package/script/src/markdown.d.ts.map +1 -1
  324. package/script/src/markdown.js +321 -52
  325. package/script/src/permissions.d.ts +143 -0
  326. package/script/src/permissions.d.ts.map +1 -0
  327. package/script/src/permissions.js +453 -0
  328. package/script/src/render.d.ts.map +1 -1
  329. package/script/src/render.js +22 -8
  330. package/script/src/runtime.d.ts +44 -3
  331. package/script/src/runtime.d.ts.map +1 -1
  332. package/script/src/runtime.js +4631 -406
  333. package/script/src/runtime_exec_host.d.ts +6 -0
  334. package/script/src/runtime_exec_host.d.ts.map +1 -0
  335. package/script/src/runtime_exec_host.js +56 -0
  336. package/script/src/runtime_exec_host_contract.d.ts +23 -0
  337. package/script/src/runtime_exec_host_contract.d.ts.map +1 -0
  338. package/script/src/runtime_exec_host_contract.js +18 -0
  339. package/script/src/runtime_exec_host_deno.d.ts +3 -0
  340. package/script/src/runtime_exec_host_deno.d.ts.map +1 -0
  341. package/script/src/runtime_exec_host_deno.js +71 -0
  342. package/script/src/runtime_exec_host_unsupported.d.ts +3 -0
  343. package/script/src/runtime_exec_host_unsupported.d.ts.map +1 -0
  344. package/script/src/runtime_exec_host_unsupported.js +11 -0
  345. package/script/src/runtime_worker_host.d.ts +6 -0
  346. package/script/src/runtime_worker_host.d.ts.map +1 -0
  347. package/script/src/runtime_worker_host.js +56 -0
  348. package/script/src/runtime_worker_host_contract.d.ts +33 -0
  349. package/script/src/runtime_worker_host_contract.d.ts.map +1 -0
  350. package/script/src/runtime_worker_host_contract.js +18 -0
  351. package/script/src/runtime_worker_host_deno.d.ts +3 -0
  352. package/script/src/runtime_worker_host_deno.d.ts.map +1 -0
  353. package/script/src/runtime_worker_host_deno.js +62 -0
  354. package/script/src/runtime_worker_host_unsupported.d.ts +3 -0
  355. package/script/src/runtime_worker_host_unsupported.d.ts.map +1 -0
  356. package/script/src/runtime_worker_host_unsupported.js +11 -0
  357. package/script/src/state.d.ts +4 -1
  358. package/script/src/state.d.ts.map +1 -1
  359. package/script/src/state.js +48 -2
  360. package/script/src/types.d.ts +405 -1
  361. package/script/src/types.d.ts.map +1 -1
  362. package/script/src/types.js +103 -0
  363. package/snippets/context.md +8 -0
  364. package/snippets/end.md +10 -0
  365. package/snippets/generate-test-input.md +12 -0
  366. package/snippets/init.md +12 -0
  367. package/snippets/respond.md +10 -0
  368. package/snippets/scenario-participant.md +10 -0
  369. package/esm/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts +0 -6
  370. package/esm/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts.map +0 -1
  371. package/esm/deps/jsr.io/@std/collections/1.1.4/_utils.js +0 -18
  372. package/esm/deps/jsr.io/@std/yaml/1.0.11/_loader_state.d.ts.map +0 -1
  373. package/esm/src/openai_compat.d.ts +0 -63
  374. package/esm/src/openai_compat.d.ts.map +0 -1
  375. package/esm/src/openai_compat.js +0 -272
  376. package/esm/src/providers/openrouter.d.ts +0 -8
  377. package/esm/src/providers/openrouter.d.ts.map +0 -1
  378. package/esm/src/providers/openrouter.js +0 -168
  379. package/script/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts +0 -6
  380. package/script/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts.map +0 -1
  381. package/script/deps/jsr.io/@std/collections/1.1.4/_utils.js +0 -21
  382. package/script/deps/jsr.io/@std/yaml/1.0.11/_loader_state.d.ts.map +0 -1
  383. package/script/src/openai_compat.d.ts +0 -63
  384. package/script/src/openai_compat.d.ts.map +0 -1
  385. package/script/src/openai_compat.js +0 -276
  386. package/script/src/providers/openrouter.d.ts +0 -8
  387. package/script/src/providers/openrouter.d.ts.map +0 -1
  388. package/script/src/providers/openrouter.js +0 -207
  389. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.d.ts +0 -0
  390. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.js +0 -0
  391. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.d.ts +0 -0
  392. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.js +0 -0
  393. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.d.ts +0 -0
  394. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.js +0 -0
  395. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.d.ts +0 -0
  396. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.js +0 -0
  397. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.d.ts +0 -0
  398. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.js +0 -0
  399. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.d.ts +0 -0
  400. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.js +0 -0
  401. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/map.d.ts +0 -0
  402. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/map.js +0 -0
  403. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.d.ts +0 -0
  404. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.js +0 -0
  405. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.d.ts +0 -0
  406. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.js +0 -0
  407. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.d.ts +0 -0
  408. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.js +0 -0
  409. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.d.ts +0 -0
  410. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.js +0 -0
  411. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.d.ts +0 -0
  412. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.js +0 -0
  413. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/seq.d.ts +0 -0
  414. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/seq.js +0 -0
  415. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.d.ts +0 -0
  416. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.js +0 -0
  417. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.d.ts +0 -0
  418. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.js +0 -0
  419. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.d.ts +0 -0
  420. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.js +0 -0
  421. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.d.ts +0 -0
  422. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.js +0 -0
  423. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.d.ts +0 -0
  424. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.js +0 -0
  425. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.d.ts +0 -0
  426. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.js +0 -0
  427. /package/esm/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.d.ts +0 -0
  428. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.d.ts +0 -0
  429. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_chars.js +0 -0
  430. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.d.ts +0 -0
  431. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_schema.js +0 -0
  432. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.d.ts +0 -0
  433. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/binary.js +0 -0
  434. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.d.ts +0 -0
  435. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/bool.js +0 -0
  436. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.d.ts +0 -0
  437. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/float.js +0 -0
  438. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.d.ts +0 -0
  439. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/int.js +0 -0
  440. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/map.d.ts +0 -0
  441. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/map.js +0 -0
  442. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.d.ts +0 -0
  443. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/merge.js +0 -0
  444. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.d.ts +0 -0
  445. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/nil.js +0 -0
  446. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.d.ts +0 -0
  447. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/omap.js +0 -0
  448. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.d.ts +0 -0
  449. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/pairs.js +0 -0
  450. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.d.ts +0 -0
  451. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/regexp.js +0 -0
  452. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/seq.d.ts +0 -0
  453. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/seq.js +0 -0
  454. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.d.ts +0 -0
  455. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/set.js +0 -0
  456. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.d.ts +0 -0
  457. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/str.js +0 -0
  458. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.d.ts +0 -0
  459. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/timestamp.js +0 -0
  460. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.d.ts +0 -0
  461. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type/undefined.js +0 -0
  462. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.d.ts +0 -0
  463. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_type.js +0 -0
  464. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.d.ts +0 -0
  465. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/_utils.js +0 -0
  466. /package/script/deps/jsr.io/@std/yaml/{1.0.11 → 1.0.12}/parse.d.ts +0 -0
@@ -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.GAMBIT_TOOL_INIT}\` tool result at the start that provides run/context info.
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 = path.resolve(path.dirname(basePath), p);
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 normalizeActionDecks(entries, basePath) {
120
- return normalizeDeckRefs(entries, basePath).map((entry) => {
121
- const name = "name" in entry ? String(entry.name ?? "").trim() : "";
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
- return { ...entry, name };
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://cards/respond.card.md");
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://cards/context.card.md");
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://cards/end.card.md");
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
- let attrs;
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 inputFragment = await maybeLoadSchema(attrs.inputSchema, resolved);
210
- const outputFragment = await maybeLoadSchema(attrs.outputSchema, resolved);
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
- inputFragment,
231
- outputFragment,
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
- let attrs;
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 legacyDeckActions = deckMeta.actions;
255
- const actionDecks = normalizeActionDecks(hasNewActionDecks ?? legacyDeckActions, resolved);
256
- if (!hasNewActionDecks && legacyDeckActions) {
257
- logger.warn(`[gambit] deck at ${resolved} uses deprecated "actions"; rename to "actionDecks"`);
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
- actionDecks.forEach((a) => {
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 inputSchema = await maybeLoadSchema(deckMeta.inputSchema, resolved);
275
- const outputSchema = await maybeLoadSchema(deckMeta.outputSchema, resolved);
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 actionDecks) {
538
+ for (const action of allActionDecks) {
288
539
  mergedActions[action.name] = action;
289
540
  }
290
- let mergedInputSchema = inputSchema;
291
- let mergedOutputSchema = outputSchema;
541
+ let mergedContextSchema = contextSchema;
542
+ let mergedResponseSchema = responseSchema;
292
543
  for (const card of allCards) {
293
- mergedInputSchema = (0, schema_js_1.mergeZodObjects)(mergedInputSchema, card.inputFragment);
294
- mergedOutputSchema = (0, schema_js_1.mergeZodObjects)(mergedOutputSchema, card.outputFragment);
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
- testDecks: mergeDeckRefs(rootTestDecks, embeddedTestDecks),
340
- graderDecks: mergeDeckRefs(rootGraderDecks, embeddedGraderDecks),
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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"}