@bolt-foundry/gambit 0.6.7 → 0.7.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.
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAY5C,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,CAwnExC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAY5C,OAAO,KAAK,EAGV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AAuanC;;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,CA8wExC"}
package/esm/src/server.js CHANGED
@@ -1205,6 +1205,124 @@ export function startWebSocketSimulator(opts) {
1205
1205
  }), { status: 400, headers: { "content-type": "application/json" } });
1206
1206
  }
1207
1207
  }
1208
+ if (url.pathname === "/api/calibrate/flag") {
1209
+ if (req.method !== "POST") {
1210
+ return new Response("Method not allowed", { status: 405 });
1211
+ }
1212
+ try {
1213
+ const body = await req.json();
1214
+ if (!body.sessionId || !body.refId) {
1215
+ throw new Error("Missing sessionId or refId");
1216
+ }
1217
+ const state = readSessionState(body.sessionId);
1218
+ if (!state) {
1219
+ throw new Error("Session not found");
1220
+ }
1221
+ const meta = (state.meta && typeof state.meta === "object")
1222
+ ? { ...state.meta }
1223
+ : {};
1224
+ const existingFlags = Array.isArray(meta.gradingFlags)
1225
+ ? (meta.gradingFlags)
1226
+ : [];
1227
+ const flagIndex = existingFlags.findIndex((flag) => flag?.refId === body.refId);
1228
+ let nextFlags;
1229
+ let flagged = false;
1230
+ if (flagIndex >= 0) {
1231
+ nextFlags = existingFlags.filter((_, idx) => idx !== flagIndex);
1232
+ flagged = false;
1233
+ }
1234
+ else {
1235
+ const now = new Date().toISOString();
1236
+ nextFlags = [
1237
+ ...existingFlags,
1238
+ {
1239
+ id: randomId("flag"),
1240
+ refId: body.refId,
1241
+ runId: body.runId,
1242
+ turnIndex: body.turnIndex,
1243
+ reason: body.reason?.trim() || undefined,
1244
+ createdAt: now,
1245
+ },
1246
+ ];
1247
+ flagged = true;
1248
+ }
1249
+ const updated = persistSessionState({
1250
+ ...state,
1251
+ meta: {
1252
+ ...meta,
1253
+ gradingFlags: nextFlags,
1254
+ },
1255
+ });
1256
+ const sessionMeta = buildSessionMeta(body.sessionId, updated);
1257
+ appendDurableStreamEvent(CALIBRATE_STREAM_ID, {
1258
+ type: "calibrateSession",
1259
+ sessionId: body.sessionId,
1260
+ session: sessionMeta,
1261
+ });
1262
+ return new Response(JSON.stringify({
1263
+ sessionId: body.sessionId,
1264
+ flagged,
1265
+ flags: nextFlags,
1266
+ }), { headers: { "content-type": "application/json" } });
1267
+ }
1268
+ catch (err) {
1269
+ return new Response(JSON.stringify({
1270
+ error: err instanceof Error ? err.message : String(err),
1271
+ }), { status: 400, headers: { "content-type": "application/json" } });
1272
+ }
1273
+ }
1274
+ if (url.pathname === "/api/calibrate/flag/reason") {
1275
+ if (req.method !== "POST") {
1276
+ return new Response("Method not allowed", { status: 405 });
1277
+ }
1278
+ try {
1279
+ const body = await req.json();
1280
+ if (!body.sessionId || !body.refId) {
1281
+ throw new Error("Missing sessionId or refId");
1282
+ }
1283
+ const state = readSessionState(body.sessionId);
1284
+ if (!state) {
1285
+ throw new Error("Session not found");
1286
+ }
1287
+ const meta = (state.meta && typeof state.meta === "object")
1288
+ ? { ...state.meta }
1289
+ : {};
1290
+ const existingFlags = Array.isArray(meta.gradingFlags)
1291
+ ? (meta.gradingFlags)
1292
+ : [];
1293
+ const flagIndex = existingFlags.findIndex((flag) => flag?.refId === body.refId);
1294
+ if (flagIndex < 0) {
1295
+ throw new Error("Flag not found");
1296
+ }
1297
+ const updatedFlag = {
1298
+ ...existingFlags[flagIndex],
1299
+ reason: body.reason?.trim() || undefined,
1300
+ };
1301
+ const nextFlags = existingFlags.map((flag, idx) => idx === flagIndex ? updatedFlag : flag);
1302
+ const updated = persistSessionState({
1303
+ ...state,
1304
+ meta: {
1305
+ ...meta,
1306
+ gradingFlags: nextFlags,
1307
+ },
1308
+ });
1309
+ const sessionMeta = buildSessionMeta(body.sessionId, updated);
1310
+ appendDurableStreamEvent(CALIBRATE_STREAM_ID, {
1311
+ type: "calibrateSession",
1312
+ sessionId: body.sessionId,
1313
+ session: sessionMeta,
1314
+ });
1315
+ return new Response(JSON.stringify({
1316
+ sessionId: body.sessionId,
1317
+ flags: nextFlags,
1318
+ }), { headers: { "content-type": "application/json" } });
1319
+ }
1320
+ catch (err) {
1321
+ return new Response(JSON.stringify({
1322
+ error: err instanceof Error ? err.message : String(err),
1323
+ }), { status: 400, headers: { "content-type": "application/json" } });
1324
+ }
1325
+ }
1208
1326
  if (url.pathname === "/api/grading/reference") {
1209
1327
  if (req.method !== "POST") {
1210
1328
  return new Response("Method not allowed", { status: 405 });
@@ -1793,6 +1911,7 @@ export function startWebSocketSimulator(opts) {
1793
1911
  sessionId,
1794
1912
  messages: state.messages,
1795
1913
  messageRefs: state.messageRefs,
1914
+ feedback: state.feedback,
1796
1915
  traces: state.traces,
1797
1916
  notes: state.notes,
1798
1917
  meta: state.meta,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bolt-foundry/gambit",
3
- "version": "0.6.7",
3
+ "version": "0.7.0",
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": {
@@ -24,7 +24,7 @@
24
24
  "gambit": "bin/gambit.cjs"
25
25
  },
26
26
  "dependencies": {
27
- "@bolt-foundry/gambit-core": "^0.6.7",
27
+ "@bolt-foundry/gambit-core": "^0.7.0",
28
28
  "zod": "^3.23.8",
29
29
  "@deno/shim-deno": "~0.18.0"
30
30
  },