@bolt-foundry/gambit 0.5.5 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -2
- package/README.md +4 -4
- package/bin/gambit.cjs +214 -0
- package/esm/mod.d.ts +22 -22
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +7 -7
- package/esm/src/server.d.ts +1 -1
- package/esm/src/server.d.ts.map +1 -1
- package/esm/src/server.js +2 -2
- package/esm/src/trace.d.ts +1 -1
- package/esm/src/trace.d.ts.map +1 -1
- package/package.json +5 -4
- package/script/mod.d.ts +22 -22
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +14 -14
- package/script/src/server.d.ts +1 -1
- package/script/src/server.d.ts.map +1 -1
- package/script/src/server.js +12 -12
- package/script/src/trace.d.ts +1 -1
- package/script/src/trace.d.ts.map +1 -1
- package/esm/packages/gambit-core/mod.d.ts +0 -50
- package/esm/packages/gambit-core/mod.d.ts.map +0 -1
- package/esm/packages/gambit-core/mod.js +0 -19
- package/esm/packages/gambit-core/src/definitions.d.ts +0 -11
- package/esm/packages/gambit-core/src/definitions.d.ts.map +0 -1
- package/esm/packages/gambit-core/src/definitions.js +0 -14
- package/esm/packages/gambit-core/src/openai_compat.d.ts +0 -63
- package/esm/packages/gambit-core/src/openai_compat.d.ts.map +0 -1
- package/esm/packages/gambit-core/src/openai_compat.js +0 -272
- package/esm/packages/gambit-core/src/providers/openrouter.d.ts +0 -8
- package/esm/packages/gambit-core/src/providers/openrouter.d.ts.map +0 -1
- package/esm/packages/gambit-core/src/providers/openrouter.js +0 -168
- package/esm/packages/gambit-core/src/render.d.ts +0 -51
- package/esm/packages/gambit-core/src/render.d.ts.map +0 -1
- package/esm/packages/gambit-core/src/render.js +0 -188
- package/esm/packages/gambit-core/src/schema.d.ts +0 -8
- package/esm/packages/gambit-core/src/schema.d.ts.map +0 -1
- package/esm/packages/gambit-core/src/schema.js +0 -45
- package/script/packages/gambit-core/mod.d.ts +0 -50
- package/script/packages/gambit-core/mod.d.ts.map +0 -1
- package/script/packages/gambit-core/mod.js +0 -29
- package/script/packages/gambit-core/src/definitions.d.ts +0 -11
- package/script/packages/gambit-core/src/definitions.d.ts.map +0 -1
- package/script/packages/gambit-core/src/definitions.js +0 -20
- package/script/packages/gambit-core/src/openai_compat.d.ts +0 -63
- package/script/packages/gambit-core/src/openai_compat.d.ts.map +0 -1
- package/script/packages/gambit-core/src/openai_compat.js +0 -276
- package/script/packages/gambit-core/src/providers/openrouter.d.ts +0 -8
- package/script/packages/gambit-core/src/providers/openrouter.d.ts.map +0 -1
- package/script/packages/gambit-core/src/providers/openrouter.js +0 -207
- package/script/packages/gambit-core/src/render.d.ts +0 -51
- package/script/packages/gambit-core/src/render.d.ts.map +0 -1
- package/script/packages/gambit-core/src/render.js +0 -192
- package/script/packages/gambit-core/src/schema.d.ts +0 -8
- package/script/packages/gambit-core/src/schema.d.ts.map +0 -1
- package/script/packages/gambit-core/src/schema.js +0 -51
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,38 @@
|
|
|
1
1
|
+++
|
|
2
2
|
[release]
|
|
3
|
-
since = "
|
|
3
|
+
since = "225456917f75e92cc095af525201373c4be37944"
|
|
4
4
|
+++
|
|
5
5
|
|
|
6
6
|
# Changelog
|
|
7
7
|
|
|
8
|
-
## Unreleased (v0.
|
|
8
|
+
## Unreleased (v0.6.3)
|
|
9
9
|
|
|
10
10
|
- TBD
|
|
11
11
|
|
|
12
|
+
## v0.6.2
|
|
13
|
+
|
|
14
|
+
### Release and packaging
|
|
15
|
+
|
|
16
|
+
- Bump gambit + gambit-core to 0.6.2.
|
|
17
|
+
|
|
18
|
+
## v0.6.1
|
|
19
|
+
|
|
20
|
+
### Release and packaging
|
|
21
|
+
|
|
22
|
+
- Bump gambit + gambit-core to 0.6.1.
|
|
23
|
+
|
|
24
|
+
## v0.6.0
|
|
25
|
+
|
|
26
|
+
### Release and packaging
|
|
27
|
+
|
|
28
|
+
- Add an npm CLI wrapper that downloads prebuilt Gambit binaries with checksum
|
|
29
|
+
verification.
|
|
30
|
+
- Normalize release binary asset names and checksum generation for predictable
|
|
31
|
+
npm downloads.
|
|
32
|
+
- Fix the npm build to resolve gambit-core in the gambitmono layout and derive
|
|
33
|
+
import-map targets from the detected path.
|
|
34
|
+
- Add `@deno/dnt` to the Gambit package and refresh release/npm docs.
|
|
35
|
+
|
|
12
36
|
## v0.5.5
|
|
13
37
|
|
|
14
38
|
### Release and packaging
|
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Gambit (draft README)
|
|
2
2
|
|
|
3
|
-
This package is developed in Bolt Foundry’s monorepo and
|
|
4
|
-
`github.com/bolt-foundry/gambit
|
|
5
|
-
do not land direct changes there).
|
|
3
|
+
This package is developed in Bolt Foundry’s monorepo and synced into gambitmono
|
|
4
|
+
(`github.com/bolt-foundry/gambit`). For now, gambitmono is a strict sync target
|
|
5
|
+
(please do not land direct changes there).
|
|
6
6
|
|
|
7
7
|
CI runs `.github/workflows/gambit-mirror.yml` on every `main` push that touches
|
|
8
8
|
this package, using `scripts/sync-gambit-mirror.sh` to open and auto-merge a PR
|
|
9
|
-
from the `bft-codebot` fork into
|
|
9
|
+
from the `bft-codebot` fork into gambitmono.
|
|
10
10
|
|
|
11
11
|
Gambit helps developers build the most accurate LLM apps by making it simple to
|
|
12
12
|
provide exactly the right amount of context at the right time.
|
package/bin/gambit.cjs
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const os = require("os");
|
|
7
|
+
const https = require("https");
|
|
8
|
+
const http = require("http");
|
|
9
|
+
const crypto = require("crypto");
|
|
10
|
+
const { spawnSync } = require("child_process");
|
|
11
|
+
|
|
12
|
+
const MAX_REDIRECTS = 5;
|
|
13
|
+
|
|
14
|
+
const readJson = (filePath) => {
|
|
15
|
+
const raw = fs.readFileSync(filePath, "utf8");
|
|
16
|
+
return JSON.parse(raw);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const getPackageVersion = () => {
|
|
20
|
+
const pkgPath = path.join(__dirname, "..", "package.json");
|
|
21
|
+
const pkg = readJson(pkgPath);
|
|
22
|
+
if (!pkg.version) {
|
|
23
|
+
throw new Error(`Missing version in ${pkgPath}`);
|
|
24
|
+
}
|
|
25
|
+
return pkg.version;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const getPlatformAsset = () => {
|
|
29
|
+
const { platform, arch } = process;
|
|
30
|
+
if (platform === "darwin" && arch === "arm64") {
|
|
31
|
+
return "gambit-darwin-arm64";
|
|
32
|
+
}
|
|
33
|
+
if (platform === "darwin" && arch === "x64") {
|
|
34
|
+
return "gambit-darwin-x64";
|
|
35
|
+
}
|
|
36
|
+
if (platform === "linux" && arch === "x64") {
|
|
37
|
+
return "gambit-linux-x64";
|
|
38
|
+
}
|
|
39
|
+
if (platform === "linux" && arch === "arm64") {
|
|
40
|
+
return "gambit-linux-arm64";
|
|
41
|
+
}
|
|
42
|
+
return "";
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const getCacheDir = (version) => {
|
|
46
|
+
const cacheRoot = process.env.XDG_CACHE_HOME ||
|
|
47
|
+
(process.env.HOME ? path.join(process.env.HOME, ".cache") : os.tmpdir());
|
|
48
|
+
return path.join(cacheRoot, "bolt-foundry", "gambit", version);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const request = (url, redirectCount = 0) =>
|
|
52
|
+
new Promise((resolve, reject) => {
|
|
53
|
+
const client = url.startsWith("https:") ? https : http;
|
|
54
|
+
const req = client.get(url, (res) => {
|
|
55
|
+
const status = res.statusCode || 0;
|
|
56
|
+
if (
|
|
57
|
+
status >= 300 && status < 400 && res.headers.location &&
|
|
58
|
+
redirectCount < MAX_REDIRECTS
|
|
59
|
+
) {
|
|
60
|
+
const nextUrl = new URL(res.headers.location, url).toString();
|
|
61
|
+
res.resume();
|
|
62
|
+
resolve(request(nextUrl, redirectCount + 1));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (status !== 200) {
|
|
66
|
+
res.resume();
|
|
67
|
+
reject(new Error(`HTTP ${status} for ${url}`));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
resolve(res);
|
|
71
|
+
});
|
|
72
|
+
req.on("error", reject);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const downloadFile = async (url, dest) => {
|
|
76
|
+
const tmpDest = `${dest}.tmp-${process.pid}`;
|
|
77
|
+
await fs.promises.mkdir(path.dirname(dest), { recursive: true });
|
|
78
|
+
const res = await request(url);
|
|
79
|
+
await new Promise((resolve, reject) => {
|
|
80
|
+
const file = fs.createWriteStream(tmpDest, { mode: 0o755 });
|
|
81
|
+
res.pipe(file);
|
|
82
|
+
res.on("error", (err) => {
|
|
83
|
+
file.close(() => reject(err));
|
|
84
|
+
});
|
|
85
|
+
file.on("finish", () => file.close(resolve));
|
|
86
|
+
file.on("error", reject);
|
|
87
|
+
});
|
|
88
|
+
await fs.promises.rename(tmpDest, dest);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const fetchText = async (url) => {
|
|
92
|
+
const res = await request(url);
|
|
93
|
+
const chunks = [];
|
|
94
|
+
for await (const chunk of res) {
|
|
95
|
+
chunks.push(chunk);
|
|
96
|
+
}
|
|
97
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const sha256File = (filePath) =>
|
|
101
|
+
new Promise((resolve, reject) => {
|
|
102
|
+
const hash = crypto.createHash("sha256");
|
|
103
|
+
const stream = fs.createReadStream(filePath);
|
|
104
|
+
stream.on("data", (chunk) => hash.update(chunk));
|
|
105
|
+
stream.on("error", reject);
|
|
106
|
+
stream.on("end", () => resolve(hash.digest("hex")));
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
const allowUnverified = process.env.GAMBIT_ALLOW_UNVERIFIED === "1";
|
|
110
|
+
|
|
111
|
+
const verifyChecksum = async (checksumUrl, assetName, filePath) => {
|
|
112
|
+
let text;
|
|
113
|
+
try {
|
|
114
|
+
text = await fetchText(checksumUrl);
|
|
115
|
+
} catch (err) {
|
|
116
|
+
if (allowUnverified) {
|
|
117
|
+
console.warn(`Warning: unable to fetch checksums: ${err.message}`);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
throw new Error(`Unable to fetch checksums: ${err.message}`);
|
|
121
|
+
}
|
|
122
|
+
const lines = text.split("\n").map((line) => line.trim()).filter(Boolean);
|
|
123
|
+
const match = lines
|
|
124
|
+
.map((line) => line.match(/^([a-f0-9]{64})\s+(.+)$/i))
|
|
125
|
+
.find((result) => result && path.posix.basename(result[2]) === assetName);
|
|
126
|
+
if (!match) {
|
|
127
|
+
if (allowUnverified) {
|
|
128
|
+
console.warn(`Warning: checksum for ${assetName} not found.`);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
throw new Error(`Checksum for ${assetName} not found.`);
|
|
132
|
+
}
|
|
133
|
+
const expected = match[1].toLowerCase();
|
|
134
|
+
const actual = (await sha256File(filePath)).toLowerCase();
|
|
135
|
+
if (expected !== actual) {
|
|
136
|
+
throw new Error(`Checksum mismatch for ${assetName}`);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const main = async () => {
|
|
141
|
+
const version = getPackageVersion();
|
|
142
|
+
const assetName = process.env.GAMBIT_BINARY_NAME || getPlatformAsset();
|
|
143
|
+
if (!assetName) {
|
|
144
|
+
console.error(
|
|
145
|
+
`Unsupported platform ${process.platform}/${process.arch}.`,
|
|
146
|
+
);
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const baseUrl = process.env.GAMBIT_BINARY_BASE_URL ||
|
|
151
|
+
`https://github.com/bolt-foundry/gambit/releases/download/v${version}`;
|
|
152
|
+
const binaryUrl = process.env.GAMBIT_BINARY_URL || `${baseUrl}/${assetName}`;
|
|
153
|
+
const checksumUrl = process.env.GAMBIT_BINARY_CHECKSUM_URL ||
|
|
154
|
+
`${baseUrl}/SHA256SUMS`;
|
|
155
|
+
|
|
156
|
+
const cacheDir = getCacheDir(version);
|
|
157
|
+
const binPath = path.join(cacheDir, assetName);
|
|
158
|
+
const ensureBinary = async () => {
|
|
159
|
+
if (fs.existsSync(binPath)) {
|
|
160
|
+
try {
|
|
161
|
+
await verifyChecksum(checksumUrl, assetName, binPath);
|
|
162
|
+
return;
|
|
163
|
+
} catch (err) {
|
|
164
|
+
console.warn(
|
|
165
|
+
`Cached binary failed checksum; deleting and re-downloading.`,
|
|
166
|
+
);
|
|
167
|
+
try {
|
|
168
|
+
await fs.promises.unlink(binPath);
|
|
169
|
+
} catch {
|
|
170
|
+
// ignore
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
console.log(`Downloading ${binaryUrl}...`);
|
|
175
|
+
await downloadFile(binaryUrl, binPath);
|
|
176
|
+
try {
|
|
177
|
+
await verifyChecksum(checksumUrl, assetName, binPath);
|
|
178
|
+
} catch (err) {
|
|
179
|
+
try {
|
|
180
|
+
await fs.promises.unlink(binPath);
|
|
181
|
+
} catch {
|
|
182
|
+
// ignore
|
|
183
|
+
}
|
|
184
|
+
throw err;
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
try {
|
|
189
|
+
await ensureBinary();
|
|
190
|
+
} catch (err) {
|
|
191
|
+
console.error(`Checksum verification failed: ${err.message}`);
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
try {
|
|
196
|
+
await fs.promises.chmod(binPath, 0o755);
|
|
197
|
+
} catch {
|
|
198
|
+
// ignore
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const result = spawnSync(binPath, process.argv.slice(2), {
|
|
202
|
+
stdio: "inherit",
|
|
203
|
+
});
|
|
204
|
+
if (result.error) {
|
|
205
|
+
console.error(`Failed to launch gambit: ${result.error.message}`);
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
process.exit(result.status ?? 1);
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
main().catch((err) => {
|
|
212
|
+
console.error(err.stack || err.message || String(err));
|
|
213
|
+
process.exit(1);
|
|
214
|
+
});
|
package/esm/mod.d.ts
CHANGED
|
@@ -5,49 +5,49 @@
|
|
|
5
5
|
*/
|
|
6
6
|
/** Define a reusable card with shared behavior, tools, or guardrails. */
|
|
7
7
|
import "./_dnt.polyfills.js";
|
|
8
|
-
export { defineCard } from "
|
|
8
|
+
export { defineCard } from "@bolt-foundry/gambit-core";
|
|
9
9
|
/** Define a deck, the primary unit of execution. */
|
|
10
|
-
export { defineDeck } from "
|
|
10
|
+
export { defineDeck } from "@bolt-foundry/gambit-core";
|
|
11
11
|
/** Action deck definition shape. */
|
|
12
|
-
export type { ActionDeckDefinition } from "
|
|
12
|
+
export type { ActionDeckDefinition } from "@bolt-foundry/gambit-core";
|
|
13
13
|
/** Card definition shape. */
|
|
14
|
-
export type { CardDefinition } from "
|
|
14
|
+
export type { CardDefinition } from "@bolt-foundry/gambit-core";
|
|
15
15
|
/** Deck definition shape. */
|
|
16
|
-
export type { DeckDefinition } from "
|
|
16
|
+
export type { DeckDefinition } from "@bolt-foundry/gambit-core";
|
|
17
17
|
/** Reference to another deck. */
|
|
18
|
-
export type { DeckReferenceDefinition } from "
|
|
18
|
+
export type { DeckReferenceDefinition } from "@bolt-foundry/gambit-core";
|
|
19
19
|
/** Execution context passed to decks. */
|
|
20
|
-
export type { ExecutionContext } from "
|
|
20
|
+
export type { ExecutionContext } from "@bolt-foundry/gambit-core";
|
|
21
21
|
/** Grader deck definition shape. */
|
|
22
|
-
export type { GraderDeckDefinition } from "
|
|
22
|
+
export type { GraderDeckDefinition } from "@bolt-foundry/gambit-core";
|
|
23
23
|
/** Guardrails definition and hooks. */
|
|
24
|
-
export type { Guardrails } from "
|
|
24
|
+
export type { Guardrails } from "@bolt-foundry/gambit-core";
|
|
25
25
|
/** JSON-serializable value type used throughout Gambit. */
|
|
26
|
-
export type { JSONValue } from "
|
|
26
|
+
export type { JSONValue } from "@bolt-foundry/gambit-core";
|
|
27
27
|
/** Model provider interface for LLM backends. */
|
|
28
|
-
export type { ModelProvider } from "
|
|
28
|
+
export type { ModelProvider } from "@bolt-foundry/gambit-core";
|
|
29
29
|
/** Test deck definition shape. */
|
|
30
|
-
export type { TestDeckDefinition } from "
|
|
30
|
+
export type { TestDeckDefinition } from "@bolt-foundry/gambit-core";
|
|
31
31
|
/** Check if a value is an explicit end-of-run signal. */
|
|
32
|
-
export { isGambitEndSignal } from "
|
|
32
|
+
export { isGambitEndSignal } from "@bolt-foundry/gambit-core";
|
|
33
33
|
/** Run a deck and return its execution result. */
|
|
34
|
-
export { runDeck } from "
|
|
34
|
+
export { runDeck } from "@bolt-foundry/gambit-core";
|
|
35
35
|
/** Signal for explicitly ending a Gambit run. */
|
|
36
|
-
export type { GambitEndSignal } from "
|
|
36
|
+
export type { GambitEndSignal } from "@bolt-foundry/gambit-core";
|
|
37
37
|
/** OpenAI Chat Completions compatibility helper for a deck. */
|
|
38
|
-
export { chatCompletionsWithDeck } from "
|
|
38
|
+
export { chatCompletionsWithDeck } from "@bolt-foundry/gambit-core";
|
|
39
39
|
/** OpenAI-compatible request payload. */
|
|
40
|
-
export type { ChatCompletionsRequest } from "
|
|
40
|
+
export type { ChatCompletionsRequest } from "@bolt-foundry/gambit-core";
|
|
41
41
|
/** OpenAI-compatible response payload. */
|
|
42
|
-
export type { ChatCompletionsResponse } from "
|
|
42
|
+
export type { ChatCompletionsResponse } from "@bolt-foundry/gambit-core";
|
|
43
43
|
/** Render a deck to a human-readable outline or debug view. */
|
|
44
|
-
export { renderDeck } from "
|
|
44
|
+
export { renderDeck } from "@bolt-foundry/gambit-core";
|
|
45
45
|
/** Options for deck rendering. */
|
|
46
|
-
export type { RenderDeckOptions } from "
|
|
46
|
+
export type { RenderDeckOptions } from "@bolt-foundry/gambit-core";
|
|
47
47
|
/** Result data from rendering a deck. */
|
|
48
|
-
export type { RenderDeckResult } from "
|
|
48
|
+
export type { RenderDeckResult } from "@bolt-foundry/gambit-core";
|
|
49
49
|
/** Provider factory for OpenRouter-backed model calls. */
|
|
50
|
-
export { createOpenRouterProvider } from "
|
|
50
|
+
export { createOpenRouterProvider } from "@bolt-foundry/gambit-core";
|
|
51
51
|
/** Start the WebSocket simulator server for the Gambit UI. */
|
|
52
52
|
export { startWebSocketSimulator } from "./src/server.js";
|
|
53
53
|
//# sourceMappingURL=mod.d.ts.map
|
package/esm/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,yEAAyE;AACzE,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,yEAAyE;AACzE,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,oDAAoD;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,oCAAoC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,6BAA6B;AAC7B,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,6BAA6B;AAC7B,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,iCAAiC;AACjC,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,yCAAyC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,oCAAoC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,uCAAuC;AACvC,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,2DAA2D;AAC3D,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,iDAAiD;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,kCAAkC;AAClC,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,yDAAyD;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,kDAAkD;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,iDAAiD;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,+DAA+D;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,yCAAyC;AACzC,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,0CAA0C;AAC1C,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,kCAAkC;AAClC,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,yCAAyC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,0DAA0D;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,8DAA8D;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/esm/mod.js
CHANGED
|
@@ -5,18 +5,18 @@
|
|
|
5
5
|
*/
|
|
6
6
|
/** Define a reusable card with shared behavior, tools, or guardrails. */
|
|
7
7
|
import "./_dnt.polyfills.js";
|
|
8
|
-
export { defineCard } from "
|
|
8
|
+
export { defineCard } from "@bolt-foundry/gambit-core";
|
|
9
9
|
/** Define a deck, the primary unit of execution. */
|
|
10
|
-
export { defineDeck } from "
|
|
10
|
+
export { defineDeck } from "@bolt-foundry/gambit-core";
|
|
11
11
|
/** Check if a value is an explicit end-of-run signal. */
|
|
12
|
-
export { isGambitEndSignal } from "
|
|
12
|
+
export { isGambitEndSignal } from "@bolt-foundry/gambit-core";
|
|
13
13
|
/** Run a deck and return its execution result. */
|
|
14
|
-
export { runDeck } from "
|
|
14
|
+
export { runDeck } from "@bolt-foundry/gambit-core";
|
|
15
15
|
/** OpenAI Chat Completions compatibility helper for a deck. */
|
|
16
|
-
export { chatCompletionsWithDeck } from "
|
|
16
|
+
export { chatCompletionsWithDeck } from "@bolt-foundry/gambit-core";
|
|
17
17
|
/** Render a deck to a human-readable outline or debug view. */
|
|
18
|
-
export { renderDeck } from "
|
|
18
|
+
export { renderDeck } from "@bolt-foundry/gambit-core";
|
|
19
19
|
/** Provider factory for OpenRouter-backed model calls. */
|
|
20
|
-
export { createOpenRouterProvider } from "
|
|
20
|
+
export { createOpenRouterProvider } from "@bolt-foundry/gambit-core";
|
|
21
21
|
/** Start the WebSocket simulator server for the Gambit UI. */
|
|
22
22
|
export { startWebSocketSimulator } from "./src/server.js";
|
package/esm/src/server.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as dntShim from "../_dnt.shims.js";
|
|
2
|
-
import type { ModelProvider } from "@bolt-foundry/gambit-core
|
|
2
|
+
import type { ModelProvider } from "@bolt-foundry/gambit-core";
|
|
3
3
|
/**
|
|
4
4
|
* Start the WebSocket simulator server used by the Gambit debug UI.
|
|
5
5
|
*/
|
package/esm/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAW5C,OAAO,KAAK,EAGV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AA+ZnC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAunExC"}
|
package/esm/src/server.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as dntShim from "../_dnt.shims.js";
|
|
2
2
|
import * as path from "../deps/jsr.io/@std/path/1.1.4/mod.js";
|
|
3
|
-
import { isGambitEndSignal, runDeck
|
|
3
|
+
import { isGambitEndSignal, runDeck } from "@bolt-foundry/gambit-core";
|
|
4
4
|
import { sanitizeNumber } from "./test_bot.js";
|
|
5
5
|
import { makeConsoleTracer } from "./trace.js";
|
|
6
|
-
import { loadDeck } from "@bolt-foundry/gambit-core
|
|
6
|
+
import { loadDeck } from "@bolt-foundry/gambit-core";
|
|
7
7
|
import { appendDurableStreamEvent, handleDurableStreamRequest, } from "./durable_streams.js";
|
|
8
8
|
const logger = console;
|
|
9
9
|
const moduleLocation = (() => {
|
package/esm/src/trace.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TraceEvent } from "@bolt-foundry/gambit-core
|
|
1
|
+
import type { TraceEvent } from "@bolt-foundry/gambit-core";
|
|
2
2
|
export declare function makeJsonlTracer(filePath: string): (event: TraceEvent) => void;
|
|
3
3
|
export declare function makeConsoleTracer(): (event: TraceEvent) => void;
|
|
4
4
|
//# sourceMappingURL=trace.d.ts.map
|
package/esm/src/trace.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/src/trace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/src/trace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAQ7E;AAED,wBAAgB,iBAAiB,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAmI/D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bolt-foundry/gambit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"description": "Agent harness framework for building, running, and verifying LLM workflows in Markdown and code.",
|
|
5
5
|
"homepage": "https://github.com/bolt-foundry/gambit",
|
|
6
6
|
"repository": {
|
|
@@ -20,11 +20,12 @@
|
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"scripts": {},
|
|
23
|
+
"bin": {
|
|
24
|
+
"gambit": "bin/gambit.cjs"
|
|
25
|
+
},
|
|
23
26
|
"dependencies": {
|
|
24
|
-
"@bolt-foundry/gambit-core": "^0.
|
|
25
|
-
"openai": "^4.78.1",
|
|
27
|
+
"@bolt-foundry/gambit-core": "^0.6.2",
|
|
26
28
|
"zod": "^3.23.8",
|
|
27
|
-
"zod-to-json-schema": "^3.23.0",
|
|
28
29
|
"@deno/shim-deno": "~0.18.0"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
package/script/mod.d.ts
CHANGED
|
@@ -5,49 +5,49 @@
|
|
|
5
5
|
*/
|
|
6
6
|
/** Define a reusable card with shared behavior, tools, or guardrails. */
|
|
7
7
|
import "./_dnt.polyfills.js";
|
|
8
|
-
export { defineCard } from "
|
|
8
|
+
export { defineCard } from "@bolt-foundry/gambit-core";
|
|
9
9
|
/** Define a deck, the primary unit of execution. */
|
|
10
|
-
export { defineDeck } from "
|
|
10
|
+
export { defineDeck } from "@bolt-foundry/gambit-core";
|
|
11
11
|
/** Action deck definition shape. */
|
|
12
|
-
export type { ActionDeckDefinition } from "
|
|
12
|
+
export type { ActionDeckDefinition } from "@bolt-foundry/gambit-core";
|
|
13
13
|
/** Card definition shape. */
|
|
14
|
-
export type { CardDefinition } from "
|
|
14
|
+
export type { CardDefinition } from "@bolt-foundry/gambit-core";
|
|
15
15
|
/** Deck definition shape. */
|
|
16
|
-
export type { DeckDefinition } from "
|
|
16
|
+
export type { DeckDefinition } from "@bolt-foundry/gambit-core";
|
|
17
17
|
/** Reference to another deck. */
|
|
18
|
-
export type { DeckReferenceDefinition } from "
|
|
18
|
+
export type { DeckReferenceDefinition } from "@bolt-foundry/gambit-core";
|
|
19
19
|
/** Execution context passed to decks. */
|
|
20
|
-
export type { ExecutionContext } from "
|
|
20
|
+
export type { ExecutionContext } from "@bolt-foundry/gambit-core";
|
|
21
21
|
/** Grader deck definition shape. */
|
|
22
|
-
export type { GraderDeckDefinition } from "
|
|
22
|
+
export type { GraderDeckDefinition } from "@bolt-foundry/gambit-core";
|
|
23
23
|
/** Guardrails definition and hooks. */
|
|
24
|
-
export type { Guardrails } from "
|
|
24
|
+
export type { Guardrails } from "@bolt-foundry/gambit-core";
|
|
25
25
|
/** JSON-serializable value type used throughout Gambit. */
|
|
26
|
-
export type { JSONValue } from "
|
|
26
|
+
export type { JSONValue } from "@bolt-foundry/gambit-core";
|
|
27
27
|
/** Model provider interface for LLM backends. */
|
|
28
|
-
export type { ModelProvider } from "
|
|
28
|
+
export type { ModelProvider } from "@bolt-foundry/gambit-core";
|
|
29
29
|
/** Test deck definition shape. */
|
|
30
|
-
export type { TestDeckDefinition } from "
|
|
30
|
+
export type { TestDeckDefinition } from "@bolt-foundry/gambit-core";
|
|
31
31
|
/** Check if a value is an explicit end-of-run signal. */
|
|
32
|
-
export { isGambitEndSignal } from "
|
|
32
|
+
export { isGambitEndSignal } from "@bolt-foundry/gambit-core";
|
|
33
33
|
/** Run a deck and return its execution result. */
|
|
34
|
-
export { runDeck } from "
|
|
34
|
+
export { runDeck } from "@bolt-foundry/gambit-core";
|
|
35
35
|
/** Signal for explicitly ending a Gambit run. */
|
|
36
|
-
export type { GambitEndSignal } from "
|
|
36
|
+
export type { GambitEndSignal } from "@bolt-foundry/gambit-core";
|
|
37
37
|
/** OpenAI Chat Completions compatibility helper for a deck. */
|
|
38
|
-
export { chatCompletionsWithDeck } from "
|
|
38
|
+
export { chatCompletionsWithDeck } from "@bolt-foundry/gambit-core";
|
|
39
39
|
/** OpenAI-compatible request payload. */
|
|
40
|
-
export type { ChatCompletionsRequest } from "
|
|
40
|
+
export type { ChatCompletionsRequest } from "@bolt-foundry/gambit-core";
|
|
41
41
|
/** OpenAI-compatible response payload. */
|
|
42
|
-
export type { ChatCompletionsResponse } from "
|
|
42
|
+
export type { ChatCompletionsResponse } from "@bolt-foundry/gambit-core";
|
|
43
43
|
/** Render a deck to a human-readable outline or debug view. */
|
|
44
|
-
export { renderDeck } from "
|
|
44
|
+
export { renderDeck } from "@bolt-foundry/gambit-core";
|
|
45
45
|
/** Options for deck rendering. */
|
|
46
|
-
export type { RenderDeckOptions } from "
|
|
46
|
+
export type { RenderDeckOptions } from "@bolt-foundry/gambit-core";
|
|
47
47
|
/** Result data from rendering a deck. */
|
|
48
|
-
export type { RenderDeckResult } from "
|
|
48
|
+
export type { RenderDeckResult } from "@bolt-foundry/gambit-core";
|
|
49
49
|
/** Provider factory for OpenRouter-backed model calls. */
|
|
50
|
-
export { createOpenRouterProvider } from "
|
|
50
|
+
export { createOpenRouterProvider } from "@bolt-foundry/gambit-core";
|
|
51
51
|
/** Start the WebSocket simulator server for the Gambit UI. */
|
|
52
52
|
export { startWebSocketSimulator } from "./src/server.js";
|
|
53
53
|
//# sourceMappingURL=mod.d.ts.map
|
package/script/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,yEAAyE;AACzE,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,yEAAyE;AACzE,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,oDAAoD;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,oCAAoC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,6BAA6B;AAC7B,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,6BAA6B;AAC7B,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,iCAAiC;AACjC,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,yCAAyC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,oCAAoC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,uCAAuC;AACvC,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,2DAA2D;AAC3D,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,iDAAiD;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,kCAAkC;AAClC,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,yDAAyD;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,kDAAkD;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,iDAAiD;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,+DAA+D;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,yCAAyC;AACzC,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,0CAA0C;AAC1C,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,kCAAkC;AAClC,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,yCAAyC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,0DAA0D;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,8DAA8D;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/script/mod.js
CHANGED
|
@@ -8,26 +8,26 @@ exports.startWebSocketSimulator = exports.createOpenRouterProvider = exports.ren
|
|
|
8
8
|
*/
|
|
9
9
|
/** Define a reusable card with shared behavior, tools, or guardrails. */
|
|
10
10
|
require("./_dnt.polyfills.js");
|
|
11
|
-
var
|
|
12
|
-
Object.defineProperty(exports, "defineCard", { enumerable: true, get: function () { return
|
|
11
|
+
var gambit_core_1 = require("@bolt-foundry/gambit-core");
|
|
12
|
+
Object.defineProperty(exports, "defineCard", { enumerable: true, get: function () { return gambit_core_1.defineCard; } });
|
|
13
13
|
/** Define a deck, the primary unit of execution. */
|
|
14
|
-
var
|
|
15
|
-
Object.defineProperty(exports, "defineDeck", { enumerable: true, get: function () { return
|
|
14
|
+
var gambit_core_2 = require("@bolt-foundry/gambit-core");
|
|
15
|
+
Object.defineProperty(exports, "defineDeck", { enumerable: true, get: function () { return gambit_core_2.defineDeck; } });
|
|
16
16
|
/** Check if a value is an explicit end-of-run signal. */
|
|
17
|
-
var
|
|
18
|
-
Object.defineProperty(exports, "isGambitEndSignal", { enumerable: true, get: function () { return
|
|
17
|
+
var gambit_core_3 = require("@bolt-foundry/gambit-core");
|
|
18
|
+
Object.defineProperty(exports, "isGambitEndSignal", { enumerable: true, get: function () { return gambit_core_3.isGambitEndSignal; } });
|
|
19
19
|
/** Run a deck and return its execution result. */
|
|
20
|
-
var
|
|
21
|
-
Object.defineProperty(exports, "runDeck", { enumerable: true, get: function () { return
|
|
20
|
+
var gambit_core_4 = require("@bolt-foundry/gambit-core");
|
|
21
|
+
Object.defineProperty(exports, "runDeck", { enumerable: true, get: function () { return gambit_core_4.runDeck; } });
|
|
22
22
|
/** OpenAI Chat Completions compatibility helper for a deck. */
|
|
23
|
-
var
|
|
24
|
-
Object.defineProperty(exports, "chatCompletionsWithDeck", { enumerable: true, get: function () { return
|
|
23
|
+
var gambit_core_5 = require("@bolt-foundry/gambit-core");
|
|
24
|
+
Object.defineProperty(exports, "chatCompletionsWithDeck", { enumerable: true, get: function () { return gambit_core_5.chatCompletionsWithDeck; } });
|
|
25
25
|
/** Render a deck to a human-readable outline or debug view. */
|
|
26
|
-
var
|
|
27
|
-
Object.defineProperty(exports, "renderDeck", { enumerable: true, get: function () { return
|
|
26
|
+
var gambit_core_6 = require("@bolt-foundry/gambit-core");
|
|
27
|
+
Object.defineProperty(exports, "renderDeck", { enumerable: true, get: function () { return gambit_core_6.renderDeck; } });
|
|
28
28
|
/** Provider factory for OpenRouter-backed model calls. */
|
|
29
|
-
var
|
|
30
|
-
Object.defineProperty(exports, "createOpenRouterProvider", { enumerable: true, get: function () { return
|
|
29
|
+
var gambit_core_7 = require("@bolt-foundry/gambit-core");
|
|
30
|
+
Object.defineProperty(exports, "createOpenRouterProvider", { enumerable: true, get: function () { return gambit_core_7.createOpenRouterProvider; } });
|
|
31
31
|
/** Start the WebSocket simulator server for the Gambit UI. */
|
|
32
32
|
var server_js_1 = require("./src/server.js");
|
|
33
33
|
Object.defineProperty(exports, "startWebSocketSimulator", { enumerable: true, get: function () { return server_js_1.startWebSocketSimulator; } });
|
package/script/src/server.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as dntShim from "../_dnt.shims.js";
|
|
2
|
-
import type { ModelProvider } from "@bolt-foundry/gambit-core
|
|
2
|
+
import type { ModelProvider } from "@bolt-foundry/gambit-core";
|
|
3
3
|
/**
|
|
4
4
|
* Start the WebSocket simulator server used by the Gambit debug UI.
|
|
5
5
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAW5C,OAAO,KAAK,EAGV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AA+ZnC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAunExC"}
|