@bolt-foundry/gambit-core 0.8.1 → 0.8.5-rc.3

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 (262) hide show
  1. package/README.md +60 -34
  2. package/cards/context.card.md +5 -5
  3. package/cards/generate-test-input.card.md +12 -0
  4. package/{script/deps/jsr.io/@std/collections/1.1.4 → esm/deps/jsr.io/@std/collections/1.1.5}/deep_merge.d.ts +2 -2
  5. package/esm/deps/jsr.io/@std/collections/{1.1.4 → 1.1.5}/deep_merge.d.ts.map +1 -1
  6. package/esm/deps/jsr.io/@std/collections/{1.1.4 → 1.1.5}/deep_merge.js +29 -19
  7. package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.js +1 -1
  8. package/esm/mod.d.ts +20 -10
  9. package/esm/mod.d.ts.map +1 -1
  10. package/esm/mod.js +11 -5
  11. package/esm/schemas/graders/contexts/conversation.d.ts +22 -0
  12. package/esm/schemas/graders/contexts/conversation.d.ts.map +1 -0
  13. package/esm/schemas/graders/contexts/conversation.js +17 -0
  14. package/esm/schemas/graders/contexts/conversation.zod.d.ts +3 -0
  15. package/esm/schemas/graders/contexts/conversation.zod.d.ts.map +1 -0
  16. package/esm/schemas/graders/contexts/conversation.zod.js +2 -0
  17. package/esm/schemas/graders/contexts/conversation_tools.d.ts +31 -0
  18. package/esm/schemas/graders/contexts/conversation_tools.d.ts.map +1 -0
  19. package/esm/schemas/graders/contexts/conversation_tools.js +25 -0
  20. package/esm/schemas/graders/contexts/conversation_tools.zod.d.ts +3 -0
  21. package/esm/schemas/graders/contexts/conversation_tools.zod.d.ts.map +1 -0
  22. package/esm/schemas/graders/contexts/conversation_tools.zod.js +2 -0
  23. package/esm/schemas/graders/contexts/tools.d.ts +4 -0
  24. package/esm/schemas/graders/contexts/tools.d.ts.map +1 -0
  25. package/esm/schemas/graders/contexts/tools.js +3 -0
  26. package/esm/schemas/graders/contexts/tools.zod.d.ts +3 -0
  27. package/esm/schemas/graders/contexts/tools.zod.d.ts.map +1 -0
  28. package/esm/schemas/graders/contexts/tools.zod.js +2 -0
  29. package/esm/schemas/graders/contexts/turn.d.ts +10 -0
  30. package/esm/schemas/graders/contexts/turn.d.ts.map +1 -0
  31. package/esm/schemas/graders/contexts/turn.js +8 -0
  32. package/esm/schemas/graders/contexts/turn.zod.d.ts +3 -0
  33. package/esm/schemas/graders/contexts/turn.zod.d.ts.map +1 -0
  34. package/esm/schemas/graders/contexts/turn.zod.js +2 -0
  35. package/esm/schemas/graders/contexts/turn_tools.d.ts +32 -0
  36. package/esm/schemas/graders/contexts/turn_tools.d.ts.map +1 -0
  37. package/esm/schemas/graders/contexts/turn_tools.js +28 -0
  38. package/esm/schemas/graders/contexts/turn_tools.zod.d.ts +3 -0
  39. package/esm/schemas/graders/contexts/turn_tools.zod.d.ts.map +1 -0
  40. package/esm/schemas/graders/contexts/turn_tools.zod.js +2 -0
  41. package/esm/schemas/graders/grader_output.d.ts +10 -0
  42. package/esm/schemas/graders/grader_output.d.ts.map +1 -0
  43. package/esm/schemas/graders/grader_output.js +8 -0
  44. package/esm/schemas/graders/grader_output.zod.d.ts +3 -0
  45. package/esm/schemas/graders/grader_output.zod.d.ts.map +1 -0
  46. package/esm/schemas/graders/grader_output.zod.js +2 -0
  47. package/esm/schemas/graders/respond.d.ts +12 -0
  48. package/esm/schemas/graders/respond.d.ts.map +1 -0
  49. package/esm/schemas/graders/respond.js +10 -0
  50. package/esm/schemas/graders/respond.zod.d.ts +3 -0
  51. package/esm/schemas/graders/respond.zod.d.ts.map +1 -0
  52. package/esm/schemas/graders/respond.zod.js +2 -0
  53. package/esm/schemas/scenarios/plain_chat_input_optional.d.ts +5 -0
  54. package/esm/schemas/scenarios/plain_chat_input_optional.d.ts.map +1 -0
  55. package/esm/schemas/scenarios/plain_chat_input_optional.js +5 -0
  56. package/esm/schemas/scenarios/plain_chat_input_optional.zod.d.ts +3 -0
  57. package/esm/schemas/scenarios/plain_chat_input_optional.zod.d.ts.map +1 -0
  58. package/esm/schemas/scenarios/plain_chat_input_optional.zod.js +2 -0
  59. package/esm/schemas/scenarios/plain_chat_output.d.ts +5 -0
  60. package/esm/schemas/scenarios/plain_chat_output.d.ts.map +1 -0
  61. package/esm/schemas/scenarios/plain_chat_output.js +4 -0
  62. package/esm/schemas/scenarios/plain_chat_output.zod.d.ts +3 -0
  63. package/esm/schemas/scenarios/plain_chat_output.zod.d.ts.map +1 -0
  64. package/esm/schemas/scenarios/plain_chat_output.zod.js +2 -0
  65. package/esm/src/builtins.d.ts +2 -0
  66. package/esm/src/builtins.d.ts.map +1 -1
  67. package/esm/src/builtins.js +45 -1
  68. package/esm/src/constants.d.ts +4 -0
  69. package/esm/src/constants.d.ts.map +1 -1
  70. package/esm/src/constants.js +5 -0
  71. package/esm/src/definitions.d.ts +5 -1
  72. package/esm/src/definitions.d.ts.map +1 -1
  73. package/esm/src/loader.d.ts.map +1 -1
  74. package/esm/src/loader.js +119 -13
  75. package/esm/src/markdown.d.ts.map +1 -1
  76. package/esm/src/markdown.js +222 -53
  77. package/esm/src/permissions.d.ts +143 -0
  78. package/esm/src/permissions.d.ts.map +1 -0
  79. package/esm/src/permissions.js +406 -0
  80. package/esm/src/render.d.ts.map +1 -1
  81. package/esm/src/render.js +22 -8
  82. package/esm/src/runtime.d.ts +28 -2
  83. package/esm/src/runtime.d.ts.map +1 -1
  84. package/esm/src/runtime.js +3051 -100
  85. package/esm/src/runtime_exec_host.d.ts +6 -0
  86. package/esm/src/runtime_exec_host.d.ts.map +1 -0
  87. package/esm/src/runtime_exec_host.js +17 -0
  88. package/esm/src/runtime_exec_host_contract.d.ts +23 -0
  89. package/esm/src/runtime_exec_host_contract.d.ts.map +1 -0
  90. package/esm/src/runtime_exec_host_contract.js +14 -0
  91. package/esm/src/runtime_exec_host_deno.d.ts +3 -0
  92. package/esm/src/runtime_exec_host_deno.d.ts.map +1 -0
  93. package/esm/src/runtime_exec_host_deno.js +35 -0
  94. package/esm/src/runtime_exec_host_unsupported.d.ts +3 -0
  95. package/esm/src/runtime_exec_host_unsupported.d.ts.map +1 -0
  96. package/esm/src/runtime_exec_host_unsupported.js +8 -0
  97. package/esm/src/runtime_worker_host.d.ts +6 -0
  98. package/esm/src/runtime_worker_host.d.ts.map +1 -0
  99. package/esm/src/runtime_worker_host.js +17 -0
  100. package/esm/src/runtime_worker_host_contract.d.ts +33 -0
  101. package/esm/src/runtime_worker_host_contract.d.ts.map +1 -0
  102. package/esm/src/runtime_worker_host_contract.js +14 -0
  103. package/esm/src/runtime_worker_host_deno.d.ts +3 -0
  104. package/esm/src/runtime_worker_host_deno.d.ts.map +1 -0
  105. package/esm/src/runtime_worker_host_deno.js +26 -0
  106. package/esm/src/runtime_worker_host_unsupported.d.ts +3 -0
  107. package/esm/src/runtime_worker_host_unsupported.d.ts.map +1 -0
  108. package/esm/src/runtime_worker_host_unsupported.js +8 -0
  109. package/esm/src/state.d.ts +4 -1
  110. package/esm/src/state.d.ts.map +1 -1
  111. package/esm/src/state.js +48 -2
  112. package/esm/src/types.d.ts +381 -1
  113. package/esm/src/types.d.ts.map +1 -1
  114. package/esm/src/types.js +102 -1
  115. package/package.json +73 -2
  116. package/schemas/graders/contexts/conversation.ts +32 -9
  117. package/schemas/graders/contexts/conversation.zod.ts +1 -0
  118. package/schemas/graders/contexts/conversation_tools.ts +63 -0
  119. package/schemas/graders/contexts/conversation_tools.zod.ts +1 -0
  120. package/schemas/graders/contexts/tools.ts +5 -0
  121. package/schemas/graders/contexts/tools.zod.ts +1 -0
  122. package/schemas/graders/contexts/turn.ts +8 -1
  123. package/schemas/graders/contexts/turn.zod.ts +1 -0
  124. package/schemas/graders/contexts/turn_tools.ts +63 -0
  125. package/schemas/graders/contexts/turn_tools.zod.ts +1 -0
  126. package/schemas/graders/grader_output.ts +15 -0
  127. package/schemas/graders/grader_output.zod.ts +1 -0
  128. package/schemas/graders/respond.ts +13 -3
  129. package/schemas/graders/respond.zod.ts +1 -0
  130. package/schemas/scenarios/plain_chat_input_optional.ts +6 -0
  131. package/schemas/scenarios/plain_chat_input_optional.zod.ts +1 -0
  132. package/schemas/scenarios/plain_chat_output.ts +5 -0
  133. package/schemas/scenarios/plain_chat_output.zod.ts +1 -0
  134. package/{esm/deps/jsr.io/@std/collections/1.1.4 → script/deps/jsr.io/@std/collections/1.1.5}/deep_merge.d.ts +2 -2
  135. package/script/deps/jsr.io/@std/collections/{1.1.4 → 1.1.5}/deep_merge.d.ts.map +1 -1
  136. package/script/deps/jsr.io/@std/collections/{1.1.4 → 1.1.5}/deep_merge.js +29 -19
  137. package/script/deps/jsr.io/@std/toml/1.0.11/_parser.js +1 -1
  138. package/script/mod.d.ts +20 -10
  139. package/script/mod.d.ts.map +1 -1
  140. package/script/mod.js +25 -9
  141. package/script/schemas/graders/contexts/conversation.d.ts +22 -0
  142. package/script/schemas/graders/contexts/conversation.d.ts.map +1 -0
  143. package/script/schemas/graders/contexts/conversation.js +20 -0
  144. package/script/schemas/graders/contexts/conversation.zod.d.ts +3 -0
  145. package/script/schemas/graders/contexts/conversation.zod.d.ts.map +1 -0
  146. package/script/schemas/graders/contexts/conversation.zod.js +9 -0
  147. package/script/schemas/graders/contexts/conversation_tools.d.ts +31 -0
  148. package/script/schemas/graders/contexts/conversation_tools.d.ts.map +1 -0
  149. package/script/schemas/graders/contexts/conversation_tools.js +28 -0
  150. package/script/schemas/graders/contexts/conversation_tools.zod.d.ts +3 -0
  151. package/script/schemas/graders/contexts/conversation_tools.zod.d.ts.map +1 -0
  152. package/script/schemas/graders/contexts/conversation_tools.zod.js +9 -0
  153. package/script/schemas/graders/contexts/tools.d.ts +4 -0
  154. package/script/schemas/graders/contexts/tools.d.ts.map +1 -0
  155. package/script/schemas/graders/contexts/tools.js +12 -0
  156. package/script/schemas/graders/contexts/tools.zod.d.ts +3 -0
  157. package/script/schemas/graders/contexts/tools.zod.d.ts.map +1 -0
  158. package/script/schemas/graders/contexts/tools.zod.js +9 -0
  159. package/script/schemas/graders/contexts/turn.d.ts +10 -0
  160. package/script/schemas/graders/contexts/turn.d.ts.map +1 -0
  161. package/script/schemas/graders/contexts/turn.js +10 -0
  162. package/script/schemas/graders/contexts/turn.zod.d.ts +3 -0
  163. package/script/schemas/graders/contexts/turn.zod.d.ts.map +1 -0
  164. package/script/schemas/graders/contexts/turn.zod.js +9 -0
  165. package/script/schemas/graders/contexts/turn_tools.d.ts +32 -0
  166. package/script/schemas/graders/contexts/turn_tools.d.ts.map +1 -0
  167. package/script/schemas/graders/contexts/turn_tools.js +31 -0
  168. package/script/schemas/graders/contexts/turn_tools.zod.d.ts +3 -0
  169. package/script/schemas/graders/contexts/turn_tools.zod.d.ts.map +1 -0
  170. package/script/schemas/graders/contexts/turn_tools.zod.js +9 -0
  171. package/script/schemas/graders/grader_output.d.ts +10 -0
  172. package/script/schemas/graders/grader_output.d.ts.map +1 -0
  173. package/script/schemas/graders/grader_output.js +10 -0
  174. package/script/schemas/graders/grader_output.zod.d.ts +3 -0
  175. package/script/schemas/graders/grader_output.zod.d.ts.map +1 -0
  176. package/script/schemas/graders/grader_output.zod.js +9 -0
  177. package/script/schemas/graders/respond.d.ts +12 -0
  178. package/script/schemas/graders/respond.d.ts.map +1 -0
  179. package/script/schemas/graders/respond.js +12 -0
  180. package/script/schemas/graders/respond.zod.d.ts +3 -0
  181. package/script/schemas/graders/respond.zod.d.ts.map +1 -0
  182. package/script/schemas/graders/respond.zod.js +9 -0
  183. package/script/schemas/scenarios/plain_chat_input_optional.d.ts +5 -0
  184. package/script/schemas/scenarios/plain_chat_input_optional.d.ts.map +1 -0
  185. package/script/schemas/scenarios/plain_chat_input_optional.js +7 -0
  186. package/script/schemas/scenarios/plain_chat_input_optional.zod.d.ts +3 -0
  187. package/script/schemas/scenarios/plain_chat_input_optional.zod.d.ts.map +1 -0
  188. package/script/schemas/scenarios/plain_chat_input_optional.zod.js +9 -0
  189. package/script/schemas/scenarios/plain_chat_output.d.ts +5 -0
  190. package/script/schemas/scenarios/plain_chat_output.d.ts.map +1 -0
  191. package/script/schemas/scenarios/plain_chat_output.js +6 -0
  192. package/script/schemas/scenarios/plain_chat_output.zod.d.ts +3 -0
  193. package/script/schemas/scenarios/plain_chat_output.zod.d.ts.map +1 -0
  194. package/script/schemas/scenarios/plain_chat_output.zod.js +9 -0
  195. package/script/src/builtins.d.ts +2 -0
  196. package/script/src/builtins.d.ts.map +1 -1
  197. package/script/src/builtins.js +47 -1
  198. package/script/src/constants.d.ts +4 -0
  199. package/script/src/constants.d.ts.map +1 -1
  200. package/script/src/constants.js +6 -1
  201. package/script/src/definitions.d.ts +5 -1
  202. package/script/src/definitions.d.ts.map +1 -1
  203. package/script/src/loader.d.ts.map +1 -1
  204. package/script/src/loader.js +118 -12
  205. package/script/src/markdown.d.ts.map +1 -1
  206. package/script/src/markdown.js +221 -52
  207. package/script/src/permissions.d.ts +143 -0
  208. package/script/src/permissions.d.ts.map +1 -0
  209. package/script/src/permissions.js +453 -0
  210. package/script/src/render.d.ts.map +1 -1
  211. package/script/src/render.js +22 -8
  212. package/script/src/runtime.d.ts +28 -2
  213. package/script/src/runtime.d.ts.map +1 -1
  214. package/script/src/runtime.js +3053 -99
  215. package/script/src/runtime_exec_host.d.ts +6 -0
  216. package/script/src/runtime_exec_host.d.ts.map +1 -0
  217. package/script/src/runtime_exec_host.js +56 -0
  218. package/script/src/runtime_exec_host_contract.d.ts +23 -0
  219. package/script/src/runtime_exec_host_contract.d.ts.map +1 -0
  220. package/script/src/runtime_exec_host_contract.js +18 -0
  221. package/script/src/runtime_exec_host_deno.d.ts +3 -0
  222. package/script/src/runtime_exec_host_deno.d.ts.map +1 -0
  223. package/script/src/runtime_exec_host_deno.js +71 -0
  224. package/script/src/runtime_exec_host_unsupported.d.ts +3 -0
  225. package/script/src/runtime_exec_host_unsupported.d.ts.map +1 -0
  226. package/script/src/runtime_exec_host_unsupported.js +11 -0
  227. package/script/src/runtime_worker_host.d.ts +6 -0
  228. package/script/src/runtime_worker_host.d.ts.map +1 -0
  229. package/script/src/runtime_worker_host.js +56 -0
  230. package/script/src/runtime_worker_host_contract.d.ts +33 -0
  231. package/script/src/runtime_worker_host_contract.d.ts.map +1 -0
  232. package/script/src/runtime_worker_host_contract.js +18 -0
  233. package/script/src/runtime_worker_host_deno.d.ts +3 -0
  234. package/script/src/runtime_worker_host_deno.d.ts.map +1 -0
  235. package/script/src/runtime_worker_host_deno.js +62 -0
  236. package/script/src/runtime_worker_host_unsupported.d.ts +3 -0
  237. package/script/src/runtime_worker_host_unsupported.d.ts.map +1 -0
  238. package/script/src/runtime_worker_host_unsupported.js +11 -0
  239. package/script/src/state.d.ts +4 -1
  240. package/script/src/state.d.ts.map +1 -1
  241. package/script/src/state.js +48 -2
  242. package/script/src/types.d.ts +381 -1
  243. package/script/src/types.d.ts.map +1 -1
  244. package/script/src/types.js +103 -0
  245. package/esm/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts +0 -6
  246. package/esm/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts.map +0 -1
  247. package/esm/deps/jsr.io/@std/collections/1.1.4/_utils.js +0 -18
  248. package/esm/src/openai_compat.d.ts +0 -63
  249. package/esm/src/openai_compat.d.ts.map +0 -1
  250. package/esm/src/openai_compat.js +0 -272
  251. package/esm/src/providers/openrouter.d.ts +0 -8
  252. package/esm/src/providers/openrouter.d.ts.map +0 -1
  253. package/esm/src/providers/openrouter.js +0 -168
  254. package/script/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts +0 -6
  255. package/script/deps/jsr.io/@std/collections/1.1.4/_utils.d.ts.map +0 -1
  256. package/script/deps/jsr.io/@std/collections/1.1.4/_utils.js +0 -21
  257. package/script/src/openai_compat.d.ts +0 -63
  258. package/script/src/openai_compat.d.ts.map +0 -1
  259. package/script/src/openai_compat.js +0 -276
  260. package/script/src/providers/openrouter.d.ts +0 -8
  261. package/script/src/providers/openrouter.d.ts.map +0 -1
  262. package/script/src/providers/openrouter.js +0 -207
@@ -0,0 +1,5 @@
1
+ import "../../_dnt.polyfills.js";
2
+ import { z } from "zod";
3
+ declare const plainChatOutputSchema: z.ZodType<string>;
4
+ export default plainChatOutputSchema;
5
+ //# sourceMappingURL=plain_chat_output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain_chat_output.d.ts","sourceRoot":"","sources":["../../../src/schemas/scenarios/plain_chat_output.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAc,CAAC;AAE5D,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("../../_dnt.polyfills.js");
4
+ const zod_1 = require("zod");
5
+ const plainChatOutputSchema = zod_1.z.string();
6
+ exports.default = plainChatOutputSchema;
@@ -0,0 +1,3 @@
1
+ import "../../_dnt.polyfills.js";
2
+ export { default } from "./plain_chat_output.js";
3
+ //# sourceMappingURL=plain_chat_output.zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain_chat_output.zod.d.ts","sourceRoot":"","sources":["../../../src/schemas/scenarios/plain_chat_output.zod.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = void 0;
7
+ require("../../_dnt.polyfills.js");
8
+ var plain_chat_output_js_1 = require("./plain_chat_output.js");
9
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(plain_chat_output_js_1).default; } });
@@ -1,3 +1,5 @@
1
1
  export declare function resolveBuiltinCardPath(target: string): string | undefined;
2
+ export declare function resolveBuiltinSnippetPath(target: string): string | undefined;
2
3
  export declare function resolveBuiltinSchemaPath(target: string): string | undefined;
4
+ export declare function resolveBuiltinDeckPath(target: string): string | undefined;
3
5
  //# sourceMappingURL=builtins.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/src/builtins.ts"],"names":[],"mappings":"AAYA,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOzE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO3E"}
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/src/builtins.ts"],"names":[],"mappings":"AAqBA,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAazE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO5E;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAgB3E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAgBzE"}
@@ -34,30 +34,76 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.resolveBuiltinCardPath = resolveBuiltinCardPath;
37
+ exports.resolveBuiltinSnippetPath = resolveBuiltinSnippetPath;
37
38
  exports.resolveBuiltinSchemaPath = resolveBuiltinSchemaPath;
39
+ exports.resolveBuiltinDeckPath = resolveBuiltinDeckPath;
38
40
  const path = __importStar(require("../deps/jsr.io/@std/path/1.1.4/mod.js"));
39
41
  const CARDS_PREFIX = "gambit://cards/";
42
+ const SNIPPETS_PREFIX = "gambit://snippets/";
40
43
  const SCHEMAS_PREFIX = "gambit://schemas/";
44
+ const DECKS_PREFIX = "gambit://decks/";
41
45
  const CARDS_BASE_URL = new URL("../cards/", globalThis[Symbol.for("import-meta-ponyfill-commonjs")](require, module).url);
46
+ const SNIPPETS_BASE_URL = new URL("../snippets/", globalThis[Symbol.for("import-meta-ponyfill-commonjs")](require, module).url);
42
47
  const SCHEMAS_BASE_URL = new URL("../schemas/", globalThis[Symbol.for("import-meta-ponyfill-commonjs")](require, module).url);
48
+ const DECKS_BASE_URL = new URL("../decks/", globalThis[Symbol.for("import-meta-ponyfill-commonjs")](require, module).url);
49
+ const LEGACY_CARD_WARNINGS = new Set();
50
+ const LEGACY_SCHEMA_WARNINGS = new Set();
51
+ const LEGACY_DECK_WARNINGS = new Set();
52
+ const logger = console;
43
53
  function resolveFromBase(base, relative) {
44
54
  return path.fromFileUrl(new URL(relative, base));
45
55
  }
46
56
  function resolveBuiltinCardPath(target) {
47
57
  if (!target.startsWith(CARDS_PREFIX))
48
58
  return undefined;
59
+ if (!LEGACY_CARD_WARNINGS.has(target)) {
60
+ LEGACY_CARD_WARNINGS.add(target);
61
+ logger.warn(`[gambit] "${target}" is deprecated; use gambit://snippets instead.`);
62
+ }
49
63
  const relative = target.slice(CARDS_PREFIX.length);
50
64
  if (!relative) {
51
65
  throw new Error(`Invalid gambit card specifier: ${target}`);
52
66
  }
53
67
  return resolveFromBase(CARDS_BASE_URL, relative);
54
68
  }
69
+ function resolveBuiltinSnippetPath(target) {
70
+ if (!target.startsWith(SNIPPETS_PREFIX))
71
+ return undefined;
72
+ const relative = target.slice(SNIPPETS_PREFIX.length);
73
+ if (!relative) {
74
+ throw new Error(`Invalid gambit snippet specifier: ${target}`);
75
+ }
76
+ return resolveFromBase(SNIPPETS_BASE_URL, relative);
77
+ }
55
78
  function resolveBuiltinSchemaPath(target) {
56
79
  if (!target.startsWith(SCHEMAS_PREFIX))
57
80
  return undefined;
58
- const relative = target.slice(SCHEMAS_PREFIX.length);
81
+ let relative = target.slice(SCHEMAS_PREFIX.length);
59
82
  if (!relative) {
60
83
  throw new Error(`Invalid gambit schema specifier: ${target}`);
61
84
  }
85
+ if (relative.endsWith(".ts") && !relative.endsWith(".zod.ts")) {
86
+ if (!LEGACY_SCHEMA_WARNINGS.has(target)) {
87
+ LEGACY_SCHEMA_WARNINGS.add(target);
88
+ logger.warn(`[gambit] "${target}" is deprecated; use .zod.ts schema URIs instead.`);
89
+ }
90
+ relative = `${relative.slice(0, -3)}.zod.ts`;
91
+ }
62
92
  return resolveFromBase(SCHEMAS_BASE_URL, relative);
63
93
  }
94
+ function resolveBuiltinDeckPath(target) {
95
+ if (!target.startsWith(DECKS_PREFIX))
96
+ return undefined;
97
+ let relative = target.slice(DECKS_PREFIX.length);
98
+ if (!relative) {
99
+ throw new Error(`Invalid gambit deck specifier: ${target}`);
100
+ }
101
+ if (!relative.endsWith("/PROMPT.md")) {
102
+ if (!LEGACY_DECK_WARNINGS.has(target)) {
103
+ LEGACY_DECK_WARNINGS.add(target);
104
+ logger.warn(`[gambit] "${target}" is deprecated; use gambit://decks/.../PROMPT.md instead.`);
105
+ }
106
+ relative = `${relative.replace(/\/?$/, "/")}PROMPT.md`;
107
+ }
108
+ return resolveFromBase(DECKS_BASE_URL, relative);
109
+ }
@@ -6,6 +6,10 @@ export declare const DEFAULT_GUARDRAILS: {
6
6
  export declare const RESERVED_TOOL_PREFIX = "gambit_";
7
7
  export declare const TOOL_NAME_PATTERN: RegExp;
8
8
  export declare const MAX_TOOL_NAME_LENGTH = 64;
9
+ export declare const GAMBIT_TOOL_CONTEXT = "gambit_context";
10
+ /**
11
+ * @deprecated Use GAMBIT_TOOL_CONTEXT instead.
12
+ */
9
13
  export declare const GAMBIT_TOOL_INIT = "gambit_init";
10
14
  export declare const GAMBIT_TOOL_RESPOND = "gambit_respond";
11
15
  export declare const GAMBIT_TOOL_COMPLETE = "gambit_complete";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC;AAEX,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAKpD,CAAC;AAGH,eAAO,MAAM,uBAAuB,MAAM,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC;AAEX,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD;;GAEG;AACH,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAMpD,CAAC;AAGH,eAAO,MAAM,uBAAuB,MAAM,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_STATUS_DELAY_MS = exports.BUILTIN_TOOL_NAME_SET = exports.GAMBIT_TOOL_END = exports.GAMBIT_TOOL_COMPLETE = exports.GAMBIT_TOOL_RESPOND = exports.GAMBIT_TOOL_INIT = exports.MAX_TOOL_NAME_LENGTH = exports.TOOL_NAME_PATTERN = exports.RESERVED_TOOL_PREFIX = exports.DEFAULT_GUARDRAILS = void 0;
3
+ exports.DEFAULT_STATUS_DELAY_MS = exports.BUILTIN_TOOL_NAME_SET = exports.GAMBIT_TOOL_END = exports.GAMBIT_TOOL_COMPLETE = exports.GAMBIT_TOOL_RESPOND = exports.GAMBIT_TOOL_INIT = exports.GAMBIT_TOOL_CONTEXT = exports.MAX_TOOL_NAME_LENGTH = exports.TOOL_NAME_PATTERN = exports.RESERVED_TOOL_PREFIX = exports.DEFAULT_GUARDRAILS = void 0;
4
4
  exports.DEFAULT_GUARDRAILS = {
5
5
  maxDepth: 3,
6
6
  maxPasses: 10,
@@ -9,11 +9,16 @@ exports.DEFAULT_GUARDRAILS = {
9
9
  exports.RESERVED_TOOL_PREFIX = "gambit_";
10
10
  exports.TOOL_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
11
11
  exports.MAX_TOOL_NAME_LENGTH = 64;
12
+ exports.GAMBIT_TOOL_CONTEXT = "gambit_context";
13
+ /**
14
+ * @deprecated Use GAMBIT_TOOL_CONTEXT instead.
15
+ */
12
16
  exports.GAMBIT_TOOL_INIT = "gambit_init";
13
17
  exports.GAMBIT_TOOL_RESPOND = "gambit_respond";
14
18
  exports.GAMBIT_TOOL_COMPLETE = "gambit_complete";
15
19
  exports.GAMBIT_TOOL_END = "gambit_end";
16
20
  exports.BUILTIN_TOOL_NAME_SET = new Set([
21
+ exports.GAMBIT_TOOL_CONTEXT,
17
22
  exports.GAMBIT_TOOL_INIT,
18
23
  exports.GAMBIT_TOOL_RESPOND,
19
24
  exports.GAMBIT_TOOL_COMPLETE,
@@ -1,6 +1,10 @@
1
1
  import type { CardDefinition, DeckDefinition } from "./types.js";
2
2
  import type { z } from "zod";
3
- export declare function defineDeck<InputSchema extends z.ZodTypeAny, OutputSchema extends z.ZodTypeAny | undefined = undefined>(def: Omit<DeckDefinition<z.infer<InputSchema>>, "kind" | "inputSchema" | "outputSchema"> & {
3
+ export declare function defineDeck<InputSchema extends z.ZodTypeAny, OutputSchema extends z.ZodTypeAny | undefined = undefined>(def: Omit<DeckDefinition<z.infer<InputSchema>>, "kind" | "contextSchema" | "responseSchema" | "inputSchema" | "outputSchema"> & {
4
+ contextSchema: InputSchema;
5
+ responseSchema?: OutputSchema;
6
+ }): DeckDefinition<z.infer<InputSchema>>;
7
+ export declare function defineDeck<InputSchema extends z.ZodTypeAny, OutputSchema extends z.ZodTypeAny | undefined = undefined>(def: Omit<DeckDefinition<z.infer<InputSchema>>, "kind" | "contextSchema" | "responseSchema" | "inputSchema" | "outputSchema"> & {
4
8
  inputSchema: InputSchema;
5
9
  outputSchema?: OutputSchema;
6
10
  }): DeckDefinition<z.infer<InputSchema>>;
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/src/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,wBAAgB,UAAU,CACxB,WAAW,SAAS,CAAC,CAAC,UAAU,EAChC,YAAY,SAAS,CAAC,CAAC,UAAU,GAAG,SAAS,GAAG,SAAS,EAEzD,GAAG,EACC,IAAI,CACJ,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EACpC,MAAM,GAAG,aAAa,GAAG,cAAc,CACxC,GACC;IACA,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,GACF,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;AACxC,wBAAgB,UAAU,CACxB,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAChC,cAAc,CAAC;AAOlB,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,cAAc,CAE5E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAKxE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAKxE"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/src/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,wBAAgB,UAAU,CACxB,WAAW,SAAS,CAAC,CAAC,UAAU,EAChC,YAAY,SAAS,CAAC,CAAC,UAAU,GAAG,SAAS,GAAG,SAAS,EAEzD,GAAG,EACC,IAAI,CACJ,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAClC,MAAM,GACN,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,cAAc,CACjB,GACC;IACA,aAAa,EAAE,WAAW,CAAC;IAC3B,cAAc,CAAC,EAAE,YAAY,CAAC;CAC/B,GACF,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;AACxC,wBAAgB,UAAU,CACxB,WAAW,SAAS,CAAC,CAAC,UAAU,EAChC,YAAY,SAAS,CAAC,CAAC,UAAU,GAAG,SAAS,GAAG,SAAS,EAEzD,GAAG,EACC,IAAI,CACJ,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAClC,MAAM,GACN,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,cAAc,CACjB,GACC;IACA,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,GACF,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;AACxC,wBAAgB,UAAU,CACxB,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAChC,cAAc,CAAC;AAOlB,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,cAAc,CAE5E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAKxE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAKxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/src/loader.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAKV,UAAU,EACV,UAAU,EAEX,MAAM,YAAY,CAAC;AAsHpB,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,GAAE,KAAK,CAAC,MAAM,CAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CA6HrB"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/src/loader.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAMV,UAAU,EACV,UAAU,EAEX,MAAM,YAAY,CAAC;AAiPpB,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,GAAE,KAAK,CAAC,MAAM,CAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAQrB;AAED,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CA4JrB"}
@@ -35,13 +35,63 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.loadCard = loadCard;
37
37
  exports.loadDeck = loadDeck;
38
+ const dntShim = __importStar(require("../_dnt.shims.js"));
38
39
  const path = __importStar(require("../deps/jsr.io/@std/path/1.1.4/mod.js"));
39
40
  const constants_js_1 = require("./constants.js");
40
41
  const definitions_js_1 = require("./definitions.js");
42
+ const permissions_js_1 = require("./permissions.js");
41
43
  const schema_js_1 = require("./schema.js");
42
44
  const markdown_js_1 = require("./markdown.js");
43
45
  const builtins_js_1 = require("./builtins.js");
44
46
  const logger = console;
47
+ const LEGACY_SCHEMA_WARNINGS = new Set();
48
+ const LEGACY_FRAGMENT_WARNINGS = new Set();
49
+ function warnLegacySchema(resolvedPath, legacy, replacement) {
50
+ const key = `${resolvedPath}:${legacy}`;
51
+ if (LEGACY_SCHEMA_WARNINGS.has(key))
52
+ return;
53
+ LEGACY_SCHEMA_WARNINGS.add(key);
54
+ logger.warn(`[gambit] deck at ${resolvedPath} uses deprecated "${legacy}"; rename to "${replacement}"`);
55
+ }
56
+ function warnLegacyFragment(resolvedPath, legacy, replacement) {
57
+ const key = `${resolvedPath}:${legacy}`;
58
+ if (LEGACY_FRAGMENT_WARNINGS.has(key))
59
+ return;
60
+ LEGACY_FRAGMENT_WARNINGS.add(key);
61
+ logger.warn(`[gambit] card at ${resolvedPath} uses deprecated "${legacy}"; rename to "${replacement}"`);
62
+ }
63
+ function normalizeDeckSchemas(deck, resolvedPath) {
64
+ if (deck.inputSchema !== undefined) {
65
+ warnLegacySchema(resolvedPath, "inputSchema", "contextSchema");
66
+ }
67
+ if (deck.outputSchema !== undefined) {
68
+ warnLegacySchema(resolvedPath, "outputSchema", "responseSchema");
69
+ }
70
+ const contextSchema = deck.contextSchema ?? deck.inputSchema;
71
+ const responseSchema = deck.responseSchema ?? deck.outputSchema;
72
+ return {
73
+ contextSchema,
74
+ responseSchema,
75
+ inputSchema: contextSchema,
76
+ outputSchema: responseSchema,
77
+ };
78
+ }
79
+ function normalizeCardFragments(card, resolvedPath) {
80
+ if (card.inputFragment !== undefined) {
81
+ warnLegacyFragment(resolvedPath, "inputFragment", "contextFragment");
82
+ }
83
+ if (card.outputFragment !== undefined) {
84
+ warnLegacyFragment(resolvedPath, "outputFragment", "responseFragment");
85
+ }
86
+ const contextFragment = card.contextFragment ?? card.inputFragment;
87
+ const responseFragment = card.responseFragment ?? card.outputFragment;
88
+ return {
89
+ contextFragment,
90
+ responseFragment,
91
+ inputFragment: contextFragment,
92
+ outputFragment: responseFragment,
93
+ };
94
+ }
45
95
  function toFileUrl(p) {
46
96
  const abs = path.resolve(p);
47
97
  return path.toFileUrl(abs).href;
@@ -51,7 +101,10 @@ function normalizeActionDecks(actions, basePath) {
51
101
  return [];
52
102
  return actions.map((a) => ({
53
103
  ...a,
54
- path: basePath ? path.resolve(path.dirname(basePath), a.path) : a.path,
104
+ path: a.path.startsWith("gambit://") || !basePath
105
+ ? a.path
106
+ : path.resolve(path.dirname(basePath), a.path),
107
+ permissions: (0, permissions_js_1.normalizePermissionDeclaration)(a.permissions, basePath ? path.dirname(basePath) : dntShim.Deno.cwd()),
55
108
  }));
56
109
  }
57
110
  function normalizeCompanionDecks(decks, basePath) {
@@ -59,9 +112,10 @@ function normalizeCompanionDecks(decks, basePath) {
59
112
  return [];
60
113
  return decks.map((deck) => ({
61
114
  ...deck,
62
- path: basePath
63
- ? path.resolve(path.dirname(basePath), deck.path)
64
- : deck.path,
115
+ path: deck.path.startsWith("gambit://") || !basePath
116
+ ? deck.path
117
+ : path.resolve(path.dirname(basePath), deck.path),
118
+ permissions: (0, permissions_js_1.normalizePermissionDeclaration)(deck.permissions, basePath ? path.dirname(basePath) : dntShim.Deno.cwd()),
65
119
  }));
66
120
  }
67
121
  function checkReserved(action) {
@@ -74,6 +128,30 @@ function checkReserved(action) {
74
128
  throw new Error(`Action name ${action.name} must match ${constants_js_1.TOOL_NAME_PATTERN} and be <= ${constants_js_1.MAX_TOOL_NAME_LENGTH} characters`);
75
129
  }
76
130
  }
131
+ function normalizeExternalTools(tools, resolvedPath) {
132
+ if (!tools)
133
+ return [];
134
+ return tools.map((tool) => {
135
+ const name = String(tool.name ?? "").trim();
136
+ if (!name) {
137
+ throw new Error(`External tool must include a name (${resolvedPath})`);
138
+ }
139
+ if (name.startsWith(constants_js_1.RESERVED_TOOL_PREFIX)) {
140
+ throw new Error(`External tool name ${name} is reserved (prefix ${constants_js_1.RESERVED_TOOL_PREFIX})`);
141
+ }
142
+ if (!constants_js_1.TOOL_NAME_PATTERN.test(name) ||
143
+ name.length > constants_js_1.MAX_TOOL_NAME_LENGTH) {
144
+ 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`);
145
+ }
146
+ return {
147
+ name,
148
+ description: typeof tool.description === "string"
149
+ ? tool.description
150
+ : undefined,
151
+ inputSchema: tool.inputSchema,
152
+ };
153
+ });
154
+ }
77
155
  async function loadCardInternal(cardPath, parentPath, stack = []) {
78
156
  const resolved = parentPath
79
157
  ? path.resolve(path.dirname(parentPath), cardPath)
@@ -98,6 +176,7 @@ async function loadCardInternal(cardPath, parentPath, stack = []) {
98
176
  const graderDecks = normalizeCompanionDecks(card.graderDecks, resolved);
99
177
  actionDecks.forEach(checkReserved);
100
178
  const { label: _l, ...rest } = card;
179
+ const fragments = normalizeCardFragments(card, resolved);
101
180
  return {
102
181
  ...rest,
103
182
  label: cardLabel,
@@ -107,28 +186,37 @@ async function loadCardInternal(cardPath, parentPath, stack = []) {
107
186
  graderDecks,
108
187
  path: resolved,
109
188
  cards: [],
189
+ ...fragments,
190
+ permissions: (0, permissions_js_1.normalizePermissionDeclaration)(card.permissions, path.dirname(resolved)),
110
191
  };
111
192
  }
112
193
  async function loadCard(cardPath, parentPath, stack = []) {
113
194
  const builtinPath = (0, builtins_js_1.resolveBuiltinCardPath)(cardPath);
114
- const normalizedPath = builtinPath ?? cardPath;
195
+ const snippetPath = (0, builtins_js_1.resolveBuiltinSnippetPath)(cardPath);
196
+ const normalizedPath = snippetPath ?? builtinPath ?? cardPath;
115
197
  if ((0, markdown_js_1.isMarkdownFile)(normalizedPath)) {
116
198
  return await (0, markdown_js_1.loadMarkdownCard)(normalizedPath, parentPath, stack);
117
199
  }
118
200
  return await loadCardInternal(normalizedPath, parentPath, stack);
119
201
  }
120
202
  async function loadDeck(deckPath, parentPath) {
121
- if ((0, markdown_js_1.isMarkdownFile)(deckPath)) {
122
- return await (0, markdown_js_1.loadMarkdownDeck)(deckPath, parentPath);
203
+ const builtinDeck = (0, builtins_js_1.resolveBuiltinDeckPath)(deckPath);
204
+ const normalizedDeckPath = builtinDeck ?? deckPath;
205
+ const markdownParent = builtinDeck ? undefined : parentPath;
206
+ if ((0, markdown_js_1.isMarkdownFile)(normalizedDeckPath)) {
207
+ return await (0, markdown_js_1.loadMarkdownDeck)(normalizedDeckPath, markdownParent);
123
208
  }
124
- const resolved = parentPath
125
- ? path.resolve(path.dirname(parentPath), deckPath)
126
- : path.resolve(deckPath);
209
+ const resolved = markdownParent
210
+ ? path.resolve(path.dirname(markdownParent), normalizedDeckPath)
211
+ : path.resolve(normalizedDeckPath);
127
212
  const mod = await Promise.resolve(`${toFileUrl(resolved)}`).then(s => __importStar(require(s)));
128
213
  const deck = mod.default;
129
214
  if (!(0, definitions_js_1.isDeckDefinition)(deck)) {
130
215
  throw new Error(`Deck at ${resolved} did not export a valid deck definition`);
131
216
  }
217
+ if (deck.mcpServers !== undefined) {
218
+ throw new Error(`Deck-level [[mcpServers]] is unsupported in this phase (${resolved})`);
219
+ }
132
220
  const deckLabel = deck.label;
133
221
  const cards = [];
134
222
  const mergedActions = {};
@@ -148,12 +236,26 @@ async function loadDeck(deckPath, parentPath) {
148
236
  mergedActions[action.name] = action;
149
237
  }
150
238
  const actionDecks = Object.values(mergedActions);
151
- let inputSchema = deck.inputSchema;
152
- let outputSchema = deck.outputSchema;
239
+ const tools = normalizeExternalTools(deck.tools, resolved);
240
+ const actionNames = new Set(actionDecks.map((action) => action.name));
241
+ for (const tool of tools) {
242
+ if (actionNames.has(tool.name)) {
243
+ logger.warn(`[gambit] tool ${tool.name} is shadowed by an action in ${resolved}`);
244
+ }
245
+ }
246
+ const schemaAliases = normalizeDeckSchemas(deck, resolved);
247
+ let inputSchema = schemaAliases.inputSchema;
248
+ let outputSchema = schemaAliases.outputSchema;
249
+ let contextSchema = schemaAliases.contextSchema;
250
+ let responseSchema = schemaAliases.responseSchema;
153
251
  for (const card of allCards) {
154
252
  inputSchema = (0, schema_js_1.mergeZodObjects)(inputSchema, card.inputFragment);
155
253
  outputSchema = (0, schema_js_1.mergeZodObjects)(outputSchema, card.outputFragment);
254
+ contextSchema = (0, schema_js_1.mergeZodObjects)(contextSchema, card.contextFragment);
255
+ responseSchema = (0, schema_js_1.mergeZodObjects)(responseSchema, card.responseFragment);
156
256
  }
257
+ inputSchema = contextSchema;
258
+ outputSchema = responseSchema;
157
259
  const executor = typeof deck.run === "function"
158
260
  ? deck.run
159
261
  : typeof deck.execute === "function"
@@ -200,11 +302,15 @@ async function loadDeck(deckPath, parentPath) {
200
302
  actions: actionDecks,
201
303
  testDecks: normalizeCompanionDecks(deck.testDecks, resolved),
202
304
  graderDecks: normalizeCompanionDecks(deck.graderDecks, resolved),
305
+ tools,
306
+ contextSchema,
307
+ responseSchema,
203
308
  inputSchema,
204
309
  outputSchema,
205
310
  executor,
206
311
  handlers,
207
312
  respond: deck.respond,
313
+ permissions: (0, permissions_js_1.normalizePermissionDeclaration)(deck.permissions, path.dirname(resolved)),
208
314
  };
209
315
  }
210
316
  function flattenCards(cards) {
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/src/markdown.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAIV,UAAU,EACV,UAAU,EAEX,MAAM,YAAY,CAAC;AAmKpB,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,GAAE,KAAK,CAAC,MAAM,CAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CA8FrB;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAgLrB;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/src/markdown.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAKV,UAAU,EACV,UAAU,EAEX,MAAM,YAAY,CAAC;AAuVpB,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,GAAE,KAAK,CAAC,MAAM,CAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAsGrB;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAqPrB;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD"}