@bolt-foundry/gambit-core 0.8.5-rc.9 → 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +6 -5
  2. package/cards/context.card.md +4 -4
  3. package/decks/anthropic/agent-sdk/PROMPT.md +9 -0
  4. package/decks/openai/codex-sdk/PROMPT.md +9 -0
  5. package/decks/openai/codex-sdk/codex_client.ts +109 -0
  6. package/decks/openai/codex-sdk/codex_sdk_bridge.deck.ts +36 -0
  7. package/esm/cards/context.card.md +9 -0
  8. package/esm/cards/end.card.md +10 -0
  9. package/esm/cards/generate-test-input.card.md +12 -0
  10. package/esm/cards/respond.card.md +10 -0
  11. package/esm/decks/anthropic/agent-sdk/PROMPT.md +9 -0
  12. package/esm/decks/openai/codex-sdk/PROMPT.md +9 -0
  13. package/esm/decks/openai/codex-sdk/codex_client.ts +109 -0
  14. package/esm/decks/openai/codex-sdk/codex_sdk_bridge.deck.ts +36 -0
  15. package/esm/mod.d.ts +1 -1
  16. package/esm/mod.d.ts.map +1 -1
  17. package/esm/schemas/graders/contexts/conversation.ts +40 -0
  18. package/esm/schemas/graders/contexts/conversation.zod.ts +1 -0
  19. package/esm/schemas/graders/contexts/conversation_tools.ts +63 -0
  20. package/esm/schemas/graders/contexts/conversation_tools.zod.ts +1 -0
  21. package/esm/schemas/graders/contexts/tools.ts +5 -0
  22. package/esm/schemas/graders/contexts/tools.zod.ts +1 -0
  23. package/esm/schemas/graders/contexts/turn.ts +17 -0
  24. package/esm/schemas/graders/contexts/turn.zod.ts +1 -0
  25. package/esm/schemas/graders/contexts/turn_tools.ts +63 -0
  26. package/esm/schemas/graders/contexts/turn_tools.zod.ts +1 -0
  27. package/esm/schemas/graders/grader_output.ts +15 -0
  28. package/esm/schemas/graders/grader_output.zod.ts +1 -0
  29. package/esm/schemas/graders/respond.ts +19 -0
  30. package/esm/schemas/graders/respond.zod.ts +1 -0
  31. package/esm/schemas/scenarios/plain_chat_input_optional.ts +6 -0
  32. package/esm/schemas/scenarios/plain_chat_input_optional.zod.ts +1 -0
  33. package/esm/schemas/scenarios/plain_chat_output.ts +5 -0
  34. package/esm/schemas/scenarios/plain_chat_output.zod.ts +1 -0
  35. package/esm/snippets/context.md +8 -0
  36. package/esm/snippets/end.md +10 -0
  37. package/esm/snippets/generate-test-input.md +12 -0
  38. package/esm/snippets/init.md +12 -0
  39. package/esm/snippets/respond.md +10 -0
  40. package/esm/snippets/scenario-participant.md +10 -0
  41. package/esm/src/constants.d.ts +0 -1
  42. package/esm/src/constants.d.ts.map +1 -1
  43. package/esm/src/constants.js +0 -4
  44. package/esm/src/loader.d.ts.map +1 -1
  45. package/esm/src/loader.js +101 -0
  46. package/esm/src/markdown.d.ts.map +1 -1
  47. package/esm/src/markdown.js +109 -9
  48. package/esm/src/runtime.d.ts +16 -1
  49. package/esm/src/runtime.d.ts.map +1 -1
  50. package/esm/src/runtime.js +1607 -311
  51. package/esm/src/types.d.ts +25 -1
  52. package/esm/src/types.d.ts.map +1 -1
  53. package/package.json +1 -1
  54. package/script/cards/context.card.md +9 -0
  55. package/script/cards/end.card.md +10 -0
  56. package/script/cards/generate-test-input.card.md +12 -0
  57. package/script/cards/respond.card.md +10 -0
  58. package/script/decks/anthropic/agent-sdk/PROMPT.md +9 -0
  59. package/script/decks/openai/codex-sdk/PROMPT.md +9 -0
  60. package/script/decks/openai/codex-sdk/codex_client.ts +109 -0
  61. package/script/decks/openai/codex-sdk/codex_sdk_bridge.deck.ts +36 -0
  62. package/script/mod.d.ts +1 -1
  63. package/script/mod.d.ts.map +1 -1
  64. package/script/schemas/graders/contexts/conversation.ts +40 -0
  65. package/script/schemas/graders/contexts/conversation.zod.ts +1 -0
  66. package/script/schemas/graders/contexts/conversation_tools.ts +63 -0
  67. package/script/schemas/graders/contexts/conversation_tools.zod.ts +1 -0
  68. package/script/schemas/graders/contexts/tools.ts +5 -0
  69. package/script/schemas/graders/contexts/tools.zod.ts +1 -0
  70. package/script/schemas/graders/contexts/turn.ts +17 -0
  71. package/script/schemas/graders/contexts/turn.zod.ts +1 -0
  72. package/script/schemas/graders/contexts/turn_tools.ts +63 -0
  73. package/script/schemas/graders/contexts/turn_tools.zod.ts +1 -0
  74. package/script/schemas/graders/grader_output.ts +15 -0
  75. package/script/schemas/graders/grader_output.zod.ts +1 -0
  76. package/script/schemas/graders/respond.ts +19 -0
  77. package/script/schemas/graders/respond.zod.ts +1 -0
  78. package/script/schemas/scenarios/plain_chat_input_optional.ts +6 -0
  79. package/script/schemas/scenarios/plain_chat_input_optional.zod.ts +1 -0
  80. package/script/schemas/scenarios/plain_chat_output.ts +5 -0
  81. package/script/schemas/scenarios/plain_chat_output.zod.ts +1 -0
  82. package/script/snippets/context.md +8 -0
  83. package/script/snippets/end.md +10 -0
  84. package/script/snippets/generate-test-input.md +12 -0
  85. package/script/snippets/init.md +12 -0
  86. package/script/snippets/respond.md +10 -0
  87. package/script/snippets/scenario-participant.md +10 -0
  88. package/script/src/constants.d.ts +0 -1
  89. package/script/src/constants.d.ts.map +1 -1
  90. package/script/src/constants.js +1 -5
  91. package/script/src/loader.d.ts.map +1 -1
  92. package/script/src/loader.js +101 -0
  93. package/script/src/markdown.d.ts.map +1 -1
  94. package/script/src/markdown.js +109 -9
  95. package/script/src/runtime.d.ts +16 -1
  96. package/script/src/runtime.d.ts.map +1 -1
  97. package/script/src/runtime.js +1606 -310
  98. package/script/src/types.d.ts +25 -1
  99. package/script/src/types.d.ts.map +1 -1
  100. package/snippets/context.md +8 -0
  101. package/snippets/end.md +10 -0
  102. package/snippets/generate-test-input.md +12 -0
  103. package/snippets/init.md +12 -0
  104. package/snippets/respond.md +10 -0
  105. package/snippets/scenario-participant.md +10 -0
package/README.md CHANGED
@@ -211,8 +211,9 @@ clarifying questions before choosing an action.
211
211
  `loadDeck` normalizes relative paths, merges card fragments, enforces unique
212
212
  action names, and warns about deprecated fields (`actions`,
213
213
  `handlers.onInterval`, `intervalMs`). The Markdown loader also injects helper
214
- text for built-in tools like `gambit_context`, `gambit_respond`, and
215
- `gambit_end` when you add `gambit://` markers.
214
+ text for built-in tools like `gambit_context` when you add `gambit://` markers.
215
+ Legacy `gambit_respond` and `gambit_end` markers are migration-only and now
216
+ hard-fail in default runtime paths.
216
217
 
217
218
  ## Compatibility and utilities
218
219
 
@@ -224,9 +225,9 @@ text for built-in tools like `gambit_context`, `gambit_respond`, and
224
225
  conforming to the `responses()` signature in `ModelProvider`.
225
226
  - **Constants**:
226
227
  [`GAMBIT_TOOL_CONTEXT`, `GAMBIT_TOOL_RESPOND`, `GAMBIT_TOOL_END`](src/constants.ts)
227
- (`GAMBIT_TOOL_INIT` remains as a deprecated alias). define the reserved tool
228
- names the runtime expects when the assistant starts, responds, and explicitly
229
- ends runs.
228
+ (`GAMBIT_TOOL_INIT` remains as a deprecated alias). `GAMBIT_TOOL_RESPOND` and
229
+ `GAMBIT_TOOL_END` remain for migration detection and legacy trace handling;
230
+ default runtime paths no longer expose them as callable synthetic tools.
230
231
 
231
232
  ## Persisted state and traces
232
233
 
@@ -3,7 +3,7 @@ label = "Gambit context primer"
3
3
  +++
4
4
 
5
5
  You will automatically receive a `gambit_context` tool result at the start of
6
- the run whenever the caller supplies `--context` (formerly `--init`). This
7
- payload contains run metadata or seeded inputs. Read it before you respond,
8
- treat it as trusted context, and keep it on hand throughout the workflow so
9
- downstream actions have the right data.
6
+ the run whenever the caller supplies `--context`. This payload contains run
7
+ metadata or seeded inputs. Read it before you respond, treat it as trusted
8
+ context, and keep it on hand throughout the workflow so downstream actions have
9
+ the right data. Do not call `gambit_context` yourself; runtime injects it once.
@@ -0,0 +1,9 @@
1
+ +++
2
+ label = "Anthropic agent SDK bridge"
3
+ contextSchema = "gambit://schemas/scenarios/plain_chat_input_optional.zod.ts"
4
+ responseSchema = "gambit://schemas/scenarios/plain_chat_output.zod.ts"
5
+ +++
6
+
7
+ This stdlib deck provides the default bridge between the Anthropic agent SDK
8
+ runtime and Gambit decks. It is intentionally minimal; downstream runners supply
9
+ the actual runtime behavior.
@@ -0,0 +1,9 @@
1
+ +++
2
+ label = "Codex SDK bridge"
3
+ contextSchema = "gambit://schemas/scenarios/plain_chat_input_optional.zod.ts"
4
+ responseSchema = "gambit://schemas/scenarios/plain_chat_output.zod.ts"
5
+ +++
6
+
7
+ This stdlib deck provides the default bridge between the Codex SDK runtime and
8
+ Gambit decks. It is intentionally minimal; downstream runners supply the actual
9
+ runtime behavior.
@@ -0,0 +1,109 @@
1
+ export type CodexTurnInput = {
2
+ userText: string;
3
+ threadId?: string;
4
+ systemPrompt?: string;
5
+ };
6
+
7
+ export type CodexTurnOutput = {
8
+ threadId: string;
9
+ assistantText: string;
10
+ };
11
+
12
+ type CodexEvent =
13
+ | { type: "thread.started"; thread_id?: unknown }
14
+ | {
15
+ type: "item.completed";
16
+ item?: { type?: unknown; text?: unknown };
17
+ }
18
+ | { type: string; [key: string]: unknown };
19
+
20
+ function runCwd(): string {
21
+ const botRoot = Deno.env.get("GAMBIT_BOT_ROOT");
22
+ if (typeof botRoot === "string" && botRoot.trim().length > 0) {
23
+ return botRoot.trim();
24
+ }
25
+ return Deno.cwd();
26
+ }
27
+
28
+ function parseCodexEvents(stdout: string): {
29
+ threadId?: string;
30
+ assistantText?: string;
31
+ } {
32
+ let threadId: string | undefined;
33
+ let assistantText: string | undefined;
34
+
35
+ for (const line of stdout.split(/\r?\n/)) {
36
+ const trimmed = line.trim();
37
+ if (!trimmed.startsWith("{")) continue;
38
+ let parsed: CodexEvent | null = null;
39
+ try {
40
+ parsed = JSON.parse(trimmed) as CodexEvent;
41
+ } catch {
42
+ continue;
43
+ }
44
+ if (!parsed || typeof parsed !== "object") continue;
45
+ if (parsed.type === "thread.started") {
46
+ if (typeof parsed.thread_id === "string" && parsed.thread_id.trim()) {
47
+ threadId = parsed.thread_id.trim();
48
+ }
49
+ continue;
50
+ }
51
+ if (parsed.type === "item.completed") {
52
+ const item = parsed.item;
53
+ if (!item || typeof item !== "object") continue;
54
+ const rec = item as Record<string, unknown>;
55
+ if (rec.type !== "agent_message") continue;
56
+ if (typeof rec.text !== "string") continue;
57
+ const next = rec.text.trim();
58
+ if (next) assistantText = next;
59
+ }
60
+ }
61
+
62
+ return { threadId, assistantText };
63
+ }
64
+
65
+ export async function sendCodexTurn(
66
+ input: CodexTurnInput,
67
+ ): Promise<CodexTurnOutput> {
68
+ const prompt = input.systemPrompt && input.systemPrompt.trim()
69
+ ? `${input.systemPrompt.trim()}\n\n${input.userText}`
70
+ : input.userText;
71
+
72
+ const args = input.threadId
73
+ ? [
74
+ "exec",
75
+ "resume",
76
+ "--skip-git-repo-check",
77
+ "--json",
78
+ input.threadId,
79
+ prompt,
80
+ ]
81
+ : ["exec", "--skip-git-repo-check", "--json", prompt];
82
+
83
+ const out = await new Deno.Command("codex", {
84
+ args,
85
+ cwd: runCwd(),
86
+ stdout: "piped",
87
+ stderr: "piped",
88
+ }).output();
89
+
90
+ const stdout = new TextDecoder().decode(out.stdout);
91
+ const stderr = new TextDecoder().decode(out.stderr);
92
+ if (!out.success) {
93
+ throw new Error(
94
+ `codex exec failed (exit ${out.code}): ${stderr.trim() || stdout.trim()}`,
95
+ );
96
+ }
97
+
98
+ const parsed = parseCodexEvents(stdout);
99
+ const threadId = parsed.threadId ?? input.threadId;
100
+ if (!threadId) {
101
+ throw new Error(
102
+ `codex exec succeeded but no thread id found in output: ${stdout.trim()}`,
103
+ );
104
+ }
105
+ return {
106
+ threadId,
107
+ assistantText: parsed.assistantText ?? "",
108
+ };
109
+ }
@@ -0,0 +1,36 @@
1
+ import { defineDeck } from "../../../src/definitions.ts";
2
+ import { z } from "zod";
3
+ import { sendCodexTurn } from "./codex_client.ts";
4
+
5
+ const CODEX_THREAD_META_KEY = "codex.threadId";
6
+
7
+ export default defineDeck({
8
+ label: "codex_sdk_bridge",
9
+ contextSchema: z.string().optional(),
10
+ responseSchema: z.string(),
11
+ async run(ctx) {
12
+ const userText = typeof ctx.initialUserMessage === "string" &&
13
+ ctx.initialUserMessage.trim()
14
+ ? ctx.initialUserMessage.trim()
15
+ : typeof ctx.input === "string" && ctx.input.trim()
16
+ ? ctx.input.trim()
17
+ : "";
18
+
19
+ if (!userText) return "";
20
+
21
+ const priorThreadId = ctx.getSessionMeta<string>(CODEX_THREAD_META_KEY);
22
+ const systemPrompt = ctx.getSessionMeta<string>("codex.systemPrompt");
23
+
24
+ ctx.appendMessage({ role: "user", content: userText });
25
+
26
+ const result = await sendCodexTurn({
27
+ userText,
28
+ threadId: priorThreadId,
29
+ systemPrompt,
30
+ });
31
+
32
+ ctx.setSessionMeta(CODEX_THREAD_META_KEY, result.threadId);
33
+ ctx.appendMessage({ role: "assistant", content: result.assistantText });
34
+ return result.assistantText;
35
+ },
36
+ });
@@ -0,0 +1,9 @@
1
+ +++
2
+ label = "Gambit context primer"
3
+ +++
4
+
5
+ You will automatically receive a `gambit_context` tool result at the start of
6
+ the run whenever the caller supplies `--context`. This payload contains run
7
+ metadata or seeded inputs. Read it before you respond, treat it as trusted
8
+ context, and keep it on hand throughout the workflow so downstream actions have
9
+ the right data. Do not call `gambit_context` yourself; runtime injects it once.
@@ -0,0 +1,10 @@
1
+ +++
2
+ label = "Explicitly end the run"
3
+ allowEnd = true
4
+ +++
5
+
6
+ If the entire conversation/workflow is complete and you must stop all further
7
+ turns, call the `gambit_end` tool with an optional `message`, `payload`,
8
+ `status`, `code`, or `meta`. Only use this when you want Gambit to halt entirely
9
+ (no more user messages). Otherwise continue with normal responses or
10
+ `gambit_respond`.
@@ -0,0 +1,12 @@
1
+ +++
2
+ label = "Generate test input"
3
+ +++
4
+
5
+ When you receive a user message with:
6
+
7
+ { "type": "gambit_test_bot_init_fill", "missing": ["path.to.field", "..."],
8
+ "current": { ... }, "schemaHints": [ ... ] }
9
+
10
+ Return ONLY valid JSON that supplies values for the missing fields. Do not
11
+ include any fields that are not listed in "missing". If the only missing path is
12
+ "(root)", return the full init JSON value.
@@ -0,0 +1,10 @@
1
+ +++
2
+ label = "Call gambit_respond"
3
+ respond = true
4
+ +++
5
+
6
+ When you finish this workflow, do **not** emit a normal assistant reply.
7
+ Instead, call the `gambit_respond` tool exactly once with a JSON envelope that
8
+ includes your validated `payload` plus optional `status`, `message`, `code`, or
9
+ `meta` fields. This keeps outputs structured and lets Gambit capture the result
10
+ even when guardrails stop the run early.
@@ -0,0 +1,9 @@
1
+ +++
2
+ label = "Anthropic agent SDK bridge"
3
+ contextSchema = "gambit://schemas/scenarios/plain_chat_input_optional.zod.ts"
4
+ responseSchema = "gambit://schemas/scenarios/plain_chat_output.zod.ts"
5
+ +++
6
+
7
+ This stdlib deck provides the default bridge between the Anthropic agent SDK
8
+ runtime and Gambit decks. It is intentionally minimal; downstream runners supply
9
+ the actual runtime behavior.
@@ -0,0 +1,9 @@
1
+ +++
2
+ label = "Codex SDK bridge"
3
+ contextSchema = "gambit://schemas/scenarios/plain_chat_input_optional.zod.ts"
4
+ responseSchema = "gambit://schemas/scenarios/plain_chat_output.zod.ts"
5
+ +++
6
+
7
+ This stdlib deck provides the default bridge between the Codex SDK runtime and
8
+ Gambit decks. It is intentionally minimal; downstream runners supply the actual
9
+ runtime behavior.
@@ -0,0 +1,109 @@
1
+ export type CodexTurnInput = {
2
+ userText: string;
3
+ threadId?: string;
4
+ systemPrompt?: string;
5
+ };
6
+
7
+ export type CodexTurnOutput = {
8
+ threadId: string;
9
+ assistantText: string;
10
+ };
11
+
12
+ type CodexEvent =
13
+ | { type: "thread.started"; thread_id?: unknown }
14
+ | {
15
+ type: "item.completed";
16
+ item?: { type?: unknown; text?: unknown };
17
+ }
18
+ | { type: string; [key: string]: unknown };
19
+
20
+ function runCwd(): string {
21
+ const botRoot = Deno.env.get("GAMBIT_BOT_ROOT");
22
+ if (typeof botRoot === "string" && botRoot.trim().length > 0) {
23
+ return botRoot.trim();
24
+ }
25
+ return Deno.cwd();
26
+ }
27
+
28
+ function parseCodexEvents(stdout: string): {
29
+ threadId?: string;
30
+ assistantText?: string;
31
+ } {
32
+ let threadId: string | undefined;
33
+ let assistantText: string | undefined;
34
+
35
+ for (const line of stdout.split(/\r?\n/)) {
36
+ const trimmed = line.trim();
37
+ if (!trimmed.startsWith("{")) continue;
38
+ let parsed: CodexEvent | null = null;
39
+ try {
40
+ parsed = JSON.parse(trimmed) as CodexEvent;
41
+ } catch {
42
+ continue;
43
+ }
44
+ if (!parsed || typeof parsed !== "object") continue;
45
+ if (parsed.type === "thread.started") {
46
+ if (typeof parsed.thread_id === "string" && parsed.thread_id.trim()) {
47
+ threadId = parsed.thread_id.trim();
48
+ }
49
+ continue;
50
+ }
51
+ if (parsed.type === "item.completed") {
52
+ const item = parsed.item;
53
+ if (!item || typeof item !== "object") continue;
54
+ const rec = item as Record<string, unknown>;
55
+ if (rec.type !== "agent_message") continue;
56
+ if (typeof rec.text !== "string") continue;
57
+ const next = rec.text.trim();
58
+ if (next) assistantText = next;
59
+ }
60
+ }
61
+
62
+ return { threadId, assistantText };
63
+ }
64
+
65
+ export async function sendCodexTurn(
66
+ input: CodexTurnInput,
67
+ ): Promise<CodexTurnOutput> {
68
+ const prompt = input.systemPrompt && input.systemPrompt.trim()
69
+ ? `${input.systemPrompt.trim()}\n\n${input.userText}`
70
+ : input.userText;
71
+
72
+ const args = input.threadId
73
+ ? [
74
+ "exec",
75
+ "resume",
76
+ "--skip-git-repo-check",
77
+ "--json",
78
+ input.threadId,
79
+ prompt,
80
+ ]
81
+ : ["exec", "--skip-git-repo-check", "--json", prompt];
82
+
83
+ const out = await new Deno.Command("codex", {
84
+ args,
85
+ cwd: runCwd(),
86
+ stdout: "piped",
87
+ stderr: "piped",
88
+ }).output();
89
+
90
+ const stdout = new TextDecoder().decode(out.stdout);
91
+ const stderr = new TextDecoder().decode(out.stderr);
92
+ if (!out.success) {
93
+ throw new Error(
94
+ `codex exec failed (exit ${out.code}): ${stderr.trim() || stdout.trim()}`,
95
+ );
96
+ }
97
+
98
+ const parsed = parseCodexEvents(stdout);
99
+ const threadId = parsed.threadId ?? input.threadId;
100
+ if (!threadId) {
101
+ throw new Error(
102
+ `codex exec succeeded but no thread id found in output: ${stdout.trim()}`,
103
+ );
104
+ }
105
+ return {
106
+ threadId,
107
+ assistantText: parsed.assistantText ?? "",
108
+ };
109
+ }
@@ -0,0 +1,36 @@
1
+ import { defineDeck } from "../../../src/definitions.ts";
2
+ import { z } from "zod";
3
+ import { sendCodexTurn } from "./codex_client.ts";
4
+
5
+ const CODEX_THREAD_META_KEY = "codex.threadId";
6
+
7
+ export default defineDeck({
8
+ label: "codex_sdk_bridge",
9
+ contextSchema: z.string().optional(),
10
+ responseSchema: z.string(),
11
+ async run(ctx) {
12
+ const userText = typeof ctx.initialUserMessage === "string" &&
13
+ ctx.initialUserMessage.trim()
14
+ ? ctx.initialUserMessage.trim()
15
+ : typeof ctx.input === "string" && ctx.input.trim()
16
+ ? ctx.input.trim()
17
+ : "";
18
+
19
+ if (!userText) return "";
20
+
21
+ const priorThreadId = ctx.getSessionMeta<string>(CODEX_THREAD_META_KEY);
22
+ const systemPrompt = ctx.getSessionMeta<string>("codex.systemPrompt");
23
+
24
+ ctx.appendMessage({ role: "user", content: userText });
25
+
26
+ const result = await sendCodexTurn({
27
+ userText,
28
+ threadId: priorThreadId,
29
+ systemPrompt,
30
+ });
31
+
32
+ ctx.setSessionMeta(CODEX_THREAD_META_KEY, result.threadId);
33
+ ctx.appendMessage({ role: "assistant", content: result.assistantText });
34
+ return result.assistantText;
35
+ },
36
+ });
package/esm/mod.d.ts CHANGED
@@ -27,7 +27,7 @@ export type { HandlersConfig } from "./src/types.js";
27
27
  /** JSON-serializable value type used throughout Gambit. */
28
28
  export type { JSONValue } from "./src/types.js";
29
29
  /** Open Responses content payload types. */
30
- export type { CreateResponseRequest, CreateResponseResponse, ResponseEvent, ResponseFunctionCallItem, ResponseFunctionCallOutputItem, ResponseItem, ResponseMessageItem, ResponseTextContent, ResponseToolChoice, ResponseToolDefinition, ResponseUsage, } from "./src/types.js";
30
+ export type { CreateResponseRequest, CreateResponseResponse, ResponseEvent, ResponseExtensionItem, ResponseFunctionCallItem, ResponseFunctionCallOutputItem, ResponseItem, ResponseItemExtensionDefinition, ResponseMessageItem, ResponseTextContent, ResponseToolChoice, ResponseToolDefinition, ResponseUsage, } from "./src/types.js";
31
31
  /** Test deck definition shape. */
32
32
  export type { TestDeckDefinition } from "./src/types.js";
33
33
  /** Permission declaration shape used by deck metadata and config layers. */
package/esm/mod.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { z } from "zod";
2
+
3
+ type GraderMessage = {
4
+ role: string;
5
+ content?: unknown;
6
+ name?: string;
7
+ };
8
+
9
+ type GraderConversation = {
10
+ messages?: Array<GraderMessage>;
11
+ meta?: Record<string, unknown>;
12
+ notes?: {
13
+ text?: string;
14
+ };
15
+ };
16
+
17
+ type GraderConversationContext = {
18
+ session: GraderConversation;
19
+ };
20
+
21
+ export const graderMessageSchema: z.ZodType<GraderMessage> = z.object({
22
+ role: z.string(),
23
+ content: z.any().optional(),
24
+ name: z.string().optional(),
25
+ });
26
+
27
+ export const graderConversationSchema: z.ZodType<GraderConversation> = z.object(
28
+ {
29
+ messages: z.array(graderMessageSchema).optional(),
30
+ meta: z.record(z.any()).optional(),
31
+ notes: z.object({ text: z.string().optional() }).optional(),
32
+ },
33
+ );
34
+
35
+ const graderConversationContextSchema: z.ZodType<GraderConversationContext> = z
36
+ .object({
37
+ session: graderConversationSchema,
38
+ });
39
+
40
+ export default graderConversationContextSchema;
@@ -0,0 +1 @@
1
+ export { default } from "./conversation.ts";
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+
3
+ type GraderToolCall = {
4
+ id?: string;
5
+ type?: string;
6
+ function: {
7
+ name: string;
8
+ arguments?: string;
9
+ };
10
+ };
11
+
12
+ type GraderConversationMessageWithTools = {
13
+ role: string;
14
+ content?: unknown;
15
+ name?: string;
16
+ tool_calls?: Array<GraderToolCall>;
17
+ };
18
+
19
+ type GraderConversationWithTools = {
20
+ messages?: Array<GraderConversationMessageWithTools>;
21
+ meta?: Record<string, unknown>;
22
+ notes?: {
23
+ text?: string;
24
+ };
25
+ };
26
+
27
+ type GraderConversationToolsContext = {
28
+ session: GraderConversationWithTools;
29
+ };
30
+
31
+ const graderToolCallSchema: z.ZodType<GraderToolCall> = z.object({
32
+ id: z.string().optional(),
33
+ type: z.string().optional(),
34
+ function: z.object({
35
+ name: z.string(),
36
+ arguments: z.string().optional(),
37
+ }),
38
+ });
39
+
40
+ export const graderConversationMessageWithToolsSchema: z.ZodType<
41
+ GraderConversationMessageWithTools
42
+ > = z.object({
43
+ role: z.string(),
44
+ content: z.any().optional(),
45
+ name: z.string().optional(),
46
+ tool_calls: z.array(graderToolCallSchema).optional(),
47
+ });
48
+
49
+ export const graderConversationWithToolsSchema: z.ZodType<
50
+ GraderConversationWithTools
51
+ > = z.object({
52
+ messages: z.array(graderConversationMessageWithToolsSchema).optional(),
53
+ meta: z.record(z.any()).optional(),
54
+ notes: z.object({ text: z.string().optional() }).optional(),
55
+ });
56
+
57
+ const graderConversationToolsContextSchema: z.ZodType<
58
+ GraderConversationToolsContext
59
+ > = z.object({
60
+ session: graderConversationWithToolsSchema,
61
+ });
62
+
63
+ export default graderConversationToolsContextSchema;
@@ -0,0 +1 @@
1
+ export { default } from "./conversation_tools.ts";
@@ -0,0 +1,5 @@
1
+ export { default } from "./turn_tools.ts";
2
+ export {
3
+ graderConversationWithToolsSchema,
4
+ graderMessageWithToolsSchema,
5
+ } from "./turn_tools.ts";
@@ -0,0 +1 @@
1
+ export { default } from "./turn_tools.ts";
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ import {
3
+ graderConversationSchema,
4
+ graderMessageSchema,
5
+ } from "./conversation.ts";
6
+
7
+ type GraderTurnContext = {
8
+ session: z.infer<typeof graderConversationSchema>;
9
+ messageToGrade: z.infer<typeof graderMessageSchema>;
10
+ };
11
+
12
+ const graderTurnContextSchema: z.ZodType<GraderTurnContext> = z.object({
13
+ session: graderConversationSchema,
14
+ messageToGrade: graderMessageSchema,
15
+ });
16
+
17
+ export default graderTurnContextSchema;
@@ -0,0 +1 @@
1
+ export { default } from "./turn.ts";
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+
3
+ type GraderToolCall = {
4
+ id?: string;
5
+ type?: string;
6
+ function: {
7
+ name: string;
8
+ arguments?: string;
9
+ };
10
+ };
11
+
12
+ type GraderMessageWithTools = {
13
+ role: string;
14
+ content?: unknown;
15
+ name?: string;
16
+ tool_calls?: Array<GraderToolCall>;
17
+ };
18
+
19
+ type GraderConversationWithTools = {
20
+ messages?: Array<GraderMessageWithTools>;
21
+ meta?: Record<string, unknown>;
22
+ notes?: {
23
+ text?: string;
24
+ };
25
+ };
26
+
27
+ type GraderTurnToolsContext = {
28
+ session: GraderConversationWithTools;
29
+ messageToGrade: GraderMessageWithTools;
30
+ };
31
+
32
+ const graderToolCallSchema: z.ZodType<GraderToolCall> = z.object({
33
+ id: z.string().optional(),
34
+ type: z.string().optional(),
35
+ function: z.object({
36
+ name: z.string(),
37
+ arguments: z.string().optional(),
38
+ }),
39
+ });
40
+
41
+ export const graderMessageWithToolsSchema: z.ZodType<GraderMessageWithTools> = z
42
+ .object({
43
+ role: z.string(),
44
+ content: z.any().optional(),
45
+ name: z.string().optional(),
46
+ tool_calls: z.array(graderToolCallSchema).optional(),
47
+ });
48
+
49
+ export const graderConversationWithToolsSchema: z.ZodType<
50
+ GraderConversationWithTools
51
+ > = z.object({
52
+ messages: z.array(graderMessageWithToolsSchema).optional(),
53
+ meta: z.record(z.any()).optional(),
54
+ notes: z.object({ text: z.string().optional() }).optional(),
55
+ });
56
+
57
+ const graderTurnToolsContextSchema: z.ZodType<GraderTurnToolsContext> = z
58
+ .object({
59
+ session: graderConversationWithToolsSchema,
60
+ messageToGrade: graderMessageWithToolsSchema,
61
+ });
62
+
63
+ export default graderTurnToolsContextSchema;
@@ -0,0 +1 @@
1
+ export { default } from "./turn_tools.ts";
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+
3
+ type GraderOutput = {
4
+ score: number;
5
+ reason: string;
6
+ evidence?: Array<string>;
7
+ };
8
+
9
+ const graderOutputSchema: z.ZodType<GraderOutput> = z.object({
10
+ score: z.number().int().min(-3).max(3),
11
+ reason: z.string(),
12
+ evidence: z.array(z.string()).optional(),
13
+ });
14
+
15
+ export default graderOutputSchema;