pi-fabric 0.89.0 → 0.89.1
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/dist/activity/store.d.ts +1 -0
- package/dist/activity/store.d.ts.map +1 -1
- package/dist/chunks/{chunk-Y7V2ZTMF.js → chunk-CGIPKJSC.js} +105 -14
- package/dist/chunks/{chunk-Y7V2ZTMF.js.map → chunk-CGIPKJSC.js.map} +2 -2
- package/dist/fabric-runtime-state.js +1 -1
- package/dist/index.js +14 -7
- package/dist/index.js.map +2 -2
- package/dist/ui/controller.d.ts.map +1 -1
- package/dist/ui/snapshot.d.ts +4 -2
- package/dist/ui/snapshot.d.ts.map +1 -1
- package/docs/interface.md +33 -0
- package/docs/providers.md +21 -0
- package/package.json +2 -1
package/dist/activity/store.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export declare class FabricActivityStore {
|
|
|
25
25
|
error?: string;
|
|
26
26
|
}): void;
|
|
27
27
|
finish(runId: string, success: boolean, error?: string): void;
|
|
28
|
+
createRunView(): (detailed?: boolean) => FabricActivityRun[];
|
|
28
29
|
runs(): FabricActivityRun[];
|
|
29
30
|
runSummaries(): FabricActivityRun[];
|
|
30
31
|
get(id: string): FabricActivityRun | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/activity/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAEV,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EAGvB,mBAAmB,EACnB,iBAAiB,EAEjB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/activity/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAEV,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EAGvB,mBAAmB,EACnB,iBAAiB,EAEjB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAiKpB,qBAAa,mBAAmB;;IAQ9B,QAAQ,IAAI,MAAM;IAIlB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAK3C,KAAK,IAAI,IAAI;IAOb,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,iBAAiB;IA2BvF,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS3B,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,iBAAiB;IAWtE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,mBAAmB;IAyDlE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,GAAG,kBAAkB;IA8D7E,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,GAAG,IAAI;IAmB3D,SAAS,CACP,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GACpE,IAAI;IA+CP,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAYlF,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAwCvF,UAAU,CACR,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC/E,IAAI;IAsCP,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAkC7D,aAAa,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,iBAAiB,EAAE;IAoC5D,IAAI,IAAI,iBAAiB,EAAE;IAQ3B,YAAY,IAAI,iBAAiB,EAAE;IAInC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;CAiD/C"}
|
|
@@ -1161,11 +1161,50 @@ var isFailedResult = (value) => {
|
|
|
1161
1161
|
const status = value.status;
|
|
1162
1162
|
return status === "failed" || status === "stopped" || status === "timed_out";
|
|
1163
1163
|
};
|
|
1164
|
+
var freezeProjection = (value) => {
|
|
1165
|
+
const pending = [value];
|
|
1166
|
+
while (pending.length) {
|
|
1167
|
+
const current = pending.pop();
|
|
1168
|
+
if (current === null || typeof current !== "object" || Object.isFrozen(current)) continue;
|
|
1169
|
+
Object.freeze(current);
|
|
1170
|
+
for (const child of Object.values(current)) pending.push(child);
|
|
1171
|
+
}
|
|
1172
|
+
};
|
|
1173
|
+
var createRowProjection = (detailed, revisions) => {
|
|
1174
|
+
const cache = /* @__PURE__ */ new WeakMap();
|
|
1175
|
+
return (row) => {
|
|
1176
|
+
const revision = revisions.get(row) ?? 0;
|
|
1177
|
+
const previous = cache.get(row);
|
|
1178
|
+
if (previous?.revision === revision) return previous.value;
|
|
1179
|
+
const source = { ...row };
|
|
1180
|
+
if (!detailed) {
|
|
1181
|
+
delete source.args;
|
|
1182
|
+
delete source.result;
|
|
1183
|
+
delete source.preview;
|
|
1184
|
+
delete source.data;
|
|
1185
|
+
}
|
|
1186
|
+
const keys = Object.keys(source);
|
|
1187
|
+
if (previous && keys.length === Object.keys(previous.source).length && keys.every((key) => Object.hasOwn(previous.source, key) && Object.is(source[key], previous.source[key]))) {
|
|
1188
|
+
previous.revision = revision;
|
|
1189
|
+
return previous.value;
|
|
1190
|
+
}
|
|
1191
|
+
const value = {};
|
|
1192
|
+
for (const key of keys) {
|
|
1193
|
+
value[key] = previous && Object.hasOwn(previous.source, key) && Object.is(source[key], previous.source[key]) ? previous.value[key] : structuredClone(source[key]);
|
|
1194
|
+
freezeProjection(value[key]);
|
|
1195
|
+
}
|
|
1196
|
+
Object.freeze(value);
|
|
1197
|
+
cache.set(row, { source, value, revision });
|
|
1198
|
+
return value;
|
|
1199
|
+
};
|
|
1200
|
+
};
|
|
1164
1201
|
var FabricActivityStore = class {
|
|
1165
1202
|
#runs = /* @__PURE__ */ new Map();
|
|
1166
1203
|
#callIndex = /* @__PURE__ */ new Map();
|
|
1167
1204
|
#listeners = /* @__PURE__ */ new Set();
|
|
1168
1205
|
#revision = 0;
|
|
1206
|
+
#runRevisions = /* @__PURE__ */ new WeakMap();
|
|
1207
|
+
#rowRevisions = /* @__PURE__ */ new WeakMap();
|
|
1169
1208
|
revision() {
|
|
1170
1209
|
return this.#revision;
|
|
1171
1210
|
}
|
|
@@ -1199,7 +1238,7 @@ var FabricActivityStore = class {
|
|
|
1199
1238
|
this.#runs.set(id, run);
|
|
1200
1239
|
this.#callIndex.set(id, /* @__PURE__ */ new Map());
|
|
1201
1240
|
this.#prune();
|
|
1202
|
-
this.#emit();
|
|
1241
|
+
this.#emit(run);
|
|
1203
1242
|
return structuredClone(run);
|
|
1204
1243
|
}
|
|
1205
1244
|
resume(runId) {
|
|
@@ -1208,7 +1247,7 @@ var FabricActivityStore = class {
|
|
|
1208
1247
|
run.updatedAt = Date.now();
|
|
1209
1248
|
delete run.finishedAt;
|
|
1210
1249
|
delete run.error;
|
|
1211
|
-
this.#emit();
|
|
1250
|
+
this.#emit(run);
|
|
1212
1251
|
}
|
|
1213
1252
|
configure(runId, display) {
|
|
1214
1253
|
const run = this.#require(runId);
|
|
@@ -1217,7 +1256,7 @@ var FabricActivityStore = class {
|
|
|
1217
1256
|
if (name) run.name = name;
|
|
1218
1257
|
if (description) run.description = description;
|
|
1219
1258
|
run.updatedAt = Date.now();
|
|
1220
|
-
this.#emit();
|
|
1259
|
+
this.#emit(run);
|
|
1221
1260
|
return structuredClone(run);
|
|
1222
1261
|
}
|
|
1223
1262
|
phase(runId, input) {
|
|
@@ -1267,7 +1306,7 @@ var FabricActivityStore = class {
|
|
|
1267
1306
|
run.currentPhaseId = phase.id;
|
|
1268
1307
|
run.updatedAt = now;
|
|
1269
1308
|
if (run.name === "Fabric program" && run.phases.length === 1) run.name = name;
|
|
1270
|
-
this.#emit();
|
|
1309
|
+
this.#emit(run, run.phases);
|
|
1271
1310
|
return structuredClone(phase);
|
|
1272
1311
|
}
|
|
1273
1312
|
upsertItem(runId, input) {
|
|
@@ -1317,7 +1356,7 @@ var FabricActivityStore = class {
|
|
|
1317
1356
|
else delete item.finishedAt;
|
|
1318
1357
|
}
|
|
1319
1358
|
run.updatedAt = now;
|
|
1320
|
-
this.#emit();
|
|
1359
|
+
this.#emit(run, item);
|
|
1321
1360
|
return structuredClone(item);
|
|
1322
1361
|
}
|
|
1323
1362
|
event(runId, input) {
|
|
@@ -1334,7 +1373,7 @@ var FabricActivityStore = class {
|
|
|
1334
1373
|
});
|
|
1335
1374
|
if (run.events.length > MAX_EVENTS) run.events.splice(0, run.events.length - MAX_EVENTS);
|
|
1336
1375
|
run.updatedAt = Date.now();
|
|
1337
|
-
this.#emit();
|
|
1376
|
+
this.#emit(run, run.events.at(-1));
|
|
1338
1377
|
}
|
|
1339
1378
|
// Streaming providers may report lifecycle events after session teardown resets
|
|
1340
1379
|
// the store. Call tracking is best-effort, so stale events must be ignored.
|
|
@@ -1361,7 +1400,7 @@ var FabricActivityStore = class {
|
|
|
1361
1400
|
delete existing.detail;
|
|
1362
1401
|
delete existing.progress;
|
|
1363
1402
|
run.updatedAt = now;
|
|
1364
|
-
this.#emit();
|
|
1403
|
+
this.#emit(run, existing);
|
|
1365
1404
|
return;
|
|
1366
1405
|
}
|
|
1367
1406
|
if (run.calls.length >= MAX_CALLS) {
|
|
@@ -1382,7 +1421,7 @@ var FabricActivityStore = class {
|
|
|
1382
1421
|
run.calls.push(call);
|
|
1383
1422
|
index.set(call.id, call);
|
|
1384
1423
|
run.updatedAt = now;
|
|
1385
|
-
this.#emit();
|
|
1424
|
+
this.#emit(run, call);
|
|
1386
1425
|
}
|
|
1387
1426
|
updateCallArgs(runId, callId, args) {
|
|
1388
1427
|
const run = this.#runs.get(runId);
|
|
@@ -1393,13 +1432,20 @@ var FabricActivityStore = class {
|
|
|
1393
1432
|
call.label = labelForCall(call.ref, args);
|
|
1394
1433
|
call.updatedAt = Date.now();
|
|
1395
1434
|
run.updatedAt = call.updatedAt;
|
|
1396
|
-
this.#emit();
|
|
1435
|
+
this.#emit(run, call);
|
|
1397
1436
|
}
|
|
1398
1437
|
updateCall(runId, callId, update) {
|
|
1399
1438
|
const run = this.#runs.get(runId);
|
|
1400
1439
|
if (!run) return;
|
|
1401
1440
|
const call = this.#callIndex.get(runId)?.get(callId);
|
|
1402
1441
|
if (!call) return;
|
|
1442
|
+
const before = {
|
|
1443
|
+
progress: call.progress,
|
|
1444
|
+
entityId: call.entityId,
|
|
1445
|
+
entityKind: call.entityKind,
|
|
1446
|
+
label: call.label,
|
|
1447
|
+
metrics: call.metrics
|
|
1448
|
+
};
|
|
1403
1449
|
const now = Date.now();
|
|
1404
1450
|
if (update.type === "progress") {
|
|
1405
1451
|
const message = cleanText(update.message, MAX_DETAIL_CHARS);
|
|
@@ -1417,9 +1463,14 @@ var FabricActivityStore = class {
|
|
|
1417
1463
|
...typeof update.cost === "number" ? { cost: Math.max(0, update.cost) } : {}
|
|
1418
1464
|
};
|
|
1419
1465
|
}
|
|
1466
|
+
if (before.progress === call.progress && before.entityId === call.entityId && before.entityKind === call.entityKind && before.label === call.label && Object.is(before.metrics?.tokens, call.metrics?.tokens) && Object.is(before.metrics?.toolCalls, call.metrics?.toolCalls) && Object.is(before.metrics?.cost, call.metrics?.cost)) {
|
|
1467
|
+
if (before.metrics) call.metrics = before.metrics;
|
|
1468
|
+
else delete call.metrics;
|
|
1469
|
+
return;
|
|
1470
|
+
}
|
|
1420
1471
|
call.updatedAt = now;
|
|
1421
1472
|
run.updatedAt = now;
|
|
1422
|
-
this.#emit();
|
|
1473
|
+
this.#emit(run, call);
|
|
1423
1474
|
}
|
|
1424
1475
|
finishCall(runId, callId, input) {
|
|
1425
1476
|
const run = this.#runs.get(runId);
|
|
@@ -1456,7 +1507,7 @@ var FabricActivityStore = class {
|
|
|
1456
1507
|
}
|
|
1457
1508
|
}
|
|
1458
1509
|
run.updatedAt = now;
|
|
1459
|
-
this.#emit();
|
|
1510
|
+
this.#emit(run, call);
|
|
1460
1511
|
}
|
|
1461
1512
|
finish(runId, success, error) {
|
|
1462
1513
|
const run = this.#runs.get(runId);
|
|
@@ -1486,7 +1537,43 @@ var FabricActivityStore = class {
|
|
|
1486
1537
|
item.updatedAt = now;
|
|
1487
1538
|
item.finishedAt = now;
|
|
1488
1539
|
}
|
|
1489
|
-
this.#emit();
|
|
1540
|
+
this.#emit(run, [...run.phases, ...run.calls, ...run.items]);
|
|
1541
|
+
}
|
|
1542
|
+
// Reader-local, weakly keyed projections never own execution state. Switching
|
|
1543
|
+
// detail mode drops the previous cache rather than retaining both payload tiers.
|
|
1544
|
+
createRunView() {
|
|
1545
|
+
let detailed = false;
|
|
1546
|
+
let revision = -1;
|
|
1547
|
+
let ordered = [];
|
|
1548
|
+
let runs = /* @__PURE__ */ new WeakMap();
|
|
1549
|
+
let rows = createRowProjection(false, this.#rowRevisions);
|
|
1550
|
+
return (nextDetailed = false) => {
|
|
1551
|
+
if (detailed !== nextDetailed) {
|
|
1552
|
+
detailed = nextDetailed;
|
|
1553
|
+
runs = /* @__PURE__ */ new WeakMap();
|
|
1554
|
+
rows = createRowProjection(detailed, this.#rowRevisions);
|
|
1555
|
+
revision = -1;
|
|
1556
|
+
}
|
|
1557
|
+
if (revision !== this.#revision) {
|
|
1558
|
+
ordered = this.#orderedRuns().map((run) => {
|
|
1559
|
+
const runRevision = this.#runRevisions.get(run) ?? 0;
|
|
1560
|
+
const cached = runs.get(run);
|
|
1561
|
+
if (cached?.revision === runRevision) return cached.value;
|
|
1562
|
+
const value = {
|
|
1563
|
+
...run,
|
|
1564
|
+
phases: Object.freeze(run.phases.map(rows)),
|
|
1565
|
+
calls: Object.freeze(run.calls.map(rows)),
|
|
1566
|
+
items: Object.freeze(run.items.map(rows)),
|
|
1567
|
+
events: Object.freeze(run.events.map(rows))
|
|
1568
|
+
};
|
|
1569
|
+
Object.freeze(value);
|
|
1570
|
+
runs.set(run, { revision: runRevision, value });
|
|
1571
|
+
return value;
|
|
1572
|
+
});
|
|
1573
|
+
revision = this.#revision;
|
|
1574
|
+
}
|
|
1575
|
+
return ordered.slice();
|
|
1576
|
+
};
|
|
1490
1577
|
}
|
|
1491
1578
|
runs() {
|
|
1492
1579
|
return this.#orderedRuns().map((run) => structuredClone(run));
|
|
@@ -1528,8 +1615,12 @@ var FabricActivityStore = class {
|
|
|
1528
1615
|
this.#callIndex.delete(run.id);
|
|
1529
1616
|
}
|
|
1530
1617
|
}
|
|
1531
|
-
#emit() {
|
|
1618
|
+
#emit(run, changed) {
|
|
1532
1619
|
this.#revision++;
|
|
1620
|
+
if (run) this.#runRevisions.set(run, this.#revision);
|
|
1621
|
+
if (Array.isArray(changed)) {
|
|
1622
|
+
for (const row of changed) this.#rowRevisions.set(row, this.#revision);
|
|
1623
|
+
} else if (changed) this.#rowRevisions.set(changed, this.#revision);
|
|
1533
1624
|
for (const listener of this.#listeners) {
|
|
1534
1625
|
try {
|
|
1535
1626
|
listener();
|
|
@@ -2212,4 +2303,4 @@ export {
|
|
|
2212
2303
|
resolveFabricIdentity,
|
|
2213
2304
|
MainAgentController
|
|
2214
2305
|
};
|
|
2215
|
-
//# sourceMappingURL=chunk-
|
|
2306
|
+
//# sourceMappingURL=chunk-CGIPKJSC.js.map
|