@bolt-foundry/gambit-core 0.7.0 → 0.8.0

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 (64) hide show
  1. package/README.md +228 -0
  2. package/cards/context.card.md +9 -0
  3. package/cards/end.card.md +10 -0
  4. package/cards/respond.card.md +10 -0
  5. package/esm/_dnt.polyfills.d.ts +99 -0
  6. package/esm/_dnt.polyfills.d.ts.map +1 -1
  7. package/esm/_dnt.polyfills.js +127 -1
  8. package/esm/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
  9. package/esm/mod.d.ts +26 -2
  10. package/esm/mod.d.ts.map +1 -1
  11. package/esm/mod.js +0 -2
  12. package/esm/src/builtins.d.ts +3 -0
  13. package/esm/src/builtins.d.ts.map +1 -0
  14. package/esm/src/builtins.js +26 -0
  15. package/esm/src/loader.d.ts.map +1 -1
  16. package/esm/src/loader.js +6 -3
  17. package/esm/src/markdown.d.ts.map +1 -1
  18. package/esm/src/markdown.js +25 -4
  19. package/esm/src/openai_compat.d.ts.map +1 -1
  20. package/esm/src/openai_compat.js +92 -25
  21. package/esm/src/openresponses.d.ts +6 -0
  22. package/esm/src/openresponses.d.ts.map +1 -0
  23. package/esm/src/openresponses.js +75 -0
  24. package/esm/src/runtime.d.ts.map +1 -1
  25. package/esm/src/runtime.js +139 -35
  26. package/esm/src/state.d.ts +4 -3
  27. package/esm/src/state.d.ts.map +1 -1
  28. package/esm/src/types.d.ts +306 -33
  29. package/esm/src/types.d.ts.map +1 -1
  30. package/package.json +1 -2
  31. package/schemas/graders/contexts/conversation.ts +17 -0
  32. package/schemas/graders/contexts/turn.ts +10 -0
  33. package/schemas/graders/respond.ts +9 -0
  34. package/script/_dnt.polyfills.d.ts +99 -0
  35. package/script/_dnt.polyfills.d.ts.map +1 -1
  36. package/script/_dnt.polyfills.js +128 -0
  37. package/script/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
  38. package/script/mod.d.ts +26 -2
  39. package/script/mod.d.ts.map +1 -1
  40. package/script/mod.js +1 -4
  41. package/script/src/builtins.d.ts +3 -0
  42. package/script/src/builtins.d.ts.map +1 -0
  43. package/script/src/builtins.js +63 -0
  44. package/script/src/loader.d.ts.map +1 -1
  45. package/script/src/loader.js +6 -3
  46. package/script/src/markdown.d.ts.map +1 -1
  47. package/script/src/markdown.js +25 -4
  48. package/script/src/openai_compat.d.ts.map +1 -1
  49. package/script/src/openai_compat.js +92 -25
  50. package/script/src/openresponses.d.ts +6 -0
  51. package/script/src/openresponses.d.ts.map +1 -0
  52. package/script/src/openresponses.js +81 -0
  53. package/script/src/runtime.d.ts.map +1 -1
  54. package/script/src/runtime.js +139 -35
  55. package/script/src/state.d.ts +4 -3
  56. package/script/src/state.d.ts.map +1 -1
  57. package/script/src/types.d.ts +306 -33
  58. package/script/src/types.d.ts.map +1 -1
  59. package/esm/src/providers/openrouter.d.ts +0 -8
  60. package/esm/src/providers/openrouter.d.ts.map +0 -1
  61. package/esm/src/providers/openrouter.js +0 -168
  62. package/script/src/providers/openrouter.d.ts +0 -8
  63. package/script/src/providers/openrouter.d.ts.map +0 -1
  64. package/script/src/providers/openrouter.js +0 -207
@@ -1,207 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.createOpenRouterProvider = createOpenRouterProvider;
40
- const dntShim = __importStar(require("../../_dnt.shims.js"));
41
- const openai_1 = __importDefault(require("openai"));
42
- const logger = console;
43
- function normalizeMessage(content) {
44
- const toolCalls = content.tool_calls ??
45
- undefined;
46
- return {
47
- role: content.role,
48
- content: typeof content.content === "string"
49
- ? content.content
50
- : Array.isArray(content.content)
51
- ? content.content
52
- .map((c) => (typeof c === "string" ? c : ""))
53
- .join("")
54
- : "",
55
- name: content.name,
56
- tool_call_id: content.tool_call_id,
57
- tool_calls: toolCalls && toolCalls.length > 0 ? toolCalls : undefined,
58
- };
59
- }
60
- function createOpenRouterProvider(opts) {
61
- const debugStream = dntShim.Deno.env.get("GAMBIT_DEBUG_STREAM") === "1";
62
- const client = new openai_1.default({
63
- apiKey: opts.apiKey,
64
- baseURL: opts.baseURL ?? "https://openrouter.ai/api/v1",
65
- defaultHeaders: {
66
- "HTTP-Referer": opts.referer ?? "https://gambit.local",
67
- "X-Title": opts.title ?? "Gambit CLI",
68
- },
69
- });
70
- return {
71
- async chat(input) {
72
- const params = input.params ?? {};
73
- if (input.stream) {
74
- if (debugStream) {
75
- logger.log(`[stream-debug] requesting stream model=${input.model} messages=${input.messages.length} tools=${input.tools?.length ?? 0}`);
76
- }
77
- const stream = await client.chat.completions.create({
78
- model: input.model,
79
- messages: input
80
- .messages,
81
- tools: input
82
- .tools,
83
- tool_choice: "auto",
84
- stream: true,
85
- ...params,
86
- });
87
- let finishReason = null;
88
- const contentParts = [];
89
- const toolCallMap = new Map();
90
- let chunkCount = 0;
91
- let streamedChars = 0;
92
- for await (const chunk of stream) {
93
- chunkCount++;
94
- const choice = chunk.choices[0];
95
- const fr = choice.finish_reason;
96
- if (fr === "stop" || fr === "tool_calls" || fr === "length" ||
97
- fr === null) {
98
- finishReason = fr ?? finishReason;
99
- }
100
- const delta = choice.delta;
101
- if (typeof delta.content === "string") {
102
- contentParts.push(delta.content);
103
- input.onStreamText?.(delta.content);
104
- streamedChars += delta.content.length;
105
- }
106
- else if (Array.isArray(delta.content)) {
107
- const chunkStr = delta.content
108
- .map((c) => (typeof c === "string" ? c : ""))
109
- .join("");
110
- if (chunkStr) {
111
- contentParts.push(chunkStr);
112
- input.onStreamText?.(chunkStr);
113
- streamedChars += chunkStr.length;
114
- }
115
- }
116
- for (const tc of delta.tool_calls ?? []) {
117
- const idx = tc.index ?? 0;
118
- const existing = toolCallMap.get(idx) ??
119
- {
120
- id: tc.id,
121
- function: { name: tc.function?.name, arguments: "" },
122
- };
123
- if (tc.id)
124
- existing.id = tc.id;
125
- if (tc.function?.name)
126
- existing.function.name = tc.function.name;
127
- if (tc.function?.arguments) {
128
- existing.function.arguments += tc.function.arguments;
129
- }
130
- toolCallMap.set(idx, existing);
131
- }
132
- }
133
- if (debugStream) {
134
- logger.log(`[stream-debug] completed stream chunks=${chunkCount} streamedChars=${streamedChars} finishReason=${finishReason}`);
135
- }
136
- const tool_calls = Array.from(toolCallMap.values()).map((tc) => ({
137
- id: tc.id ?? crypto.randomUUID().replace(/-/g, "").slice(0, 24),
138
- type: "function",
139
- function: {
140
- name: tc.function.name ?? "",
141
- arguments: tc.function.arguments,
142
- },
143
- }));
144
- const message = normalizeMessage({
145
- role: "assistant",
146
- content: contentParts.length ? contentParts.join("") : null,
147
- tool_calls,
148
- });
149
- const toolCalls = tool_calls.length > 0
150
- ? tool_calls.map((tc) => ({
151
- id: tc.id,
152
- name: tc.function.name,
153
- args: safeJson(tc.function.arguments),
154
- }))
155
- : undefined;
156
- return {
157
- message,
158
- finishReason: finishReason ?? "stop",
159
- toolCalls,
160
- };
161
- }
162
- const response = await client.chat.completions.create({
163
- model: input.model,
164
- messages: input
165
- .messages,
166
- tools: input
167
- .tools,
168
- tool_choice: "auto",
169
- stream: false,
170
- ...params,
171
- });
172
- const choice = response.choices[0];
173
- const message = choice.message;
174
- const normalizedMessage = normalizeMessage(message);
175
- const toolCalls = message.tool_calls?.map((tc) => ({
176
- id: tc.id,
177
- name: tc.function.name,
178
- args: safeJson(tc.function.arguments),
179
- }));
180
- return {
181
- message: normalizedMessage,
182
- finishReason: choice.finish_reason ??
183
- "stop",
184
- toolCalls,
185
- usage: response.usage
186
- ? {
187
- promptTokens: response.usage.prompt_tokens ?? 0,
188
- completionTokens: response.usage.completion_tokens ?? 0,
189
- totalTokens: response.usage.total_tokens ?? 0,
190
- }
191
- : undefined,
192
- };
193
- },
194
- };
195
- }
196
- function safeJson(str) {
197
- try {
198
- const parsed = JSON.parse(str);
199
- if (parsed && typeof parsed === "object") {
200
- return parsed;
201
- }
202
- }
203
- catch {
204
- // ignore bad tool args
205
- }
206
- return {};
207
- }