pi-fabric 0.88.3 → 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.
Files changed (85) hide show
  1. package/dist/activity/store.d.ts +1 -0
  2. package/dist/activity/store.d.ts.map +1 -1
  3. package/dist/chunks/{chunk-73YWS2PJ.js → chunk-7X72JCGN.js} +4 -4
  4. package/dist/chunks/{chunk-ZV5AXJYG.js → chunk-BOCWQOTG.js} +2 -2
  5. package/dist/chunks/{chunk-BTZZMVXJ.js → chunk-CGIPKJSC.js} +106 -15
  6. package/dist/chunks/{chunk-BTZZMVXJ.js.map → chunk-CGIPKJSC.js.map} +2 -2
  7. package/dist/chunks/{chunk-WJW47JBN.js → chunk-G23OLG5P.js} +7 -7
  8. package/dist/chunks/{chunk-AIN5KTE6.js → chunk-GUQT67PQ.js} +600 -70
  9. package/dist/chunks/chunk-GUQT67PQ.js.map +7 -0
  10. package/dist/chunks/{chunk-CXUYJNP7.js → chunk-HDPGQRHV.js} +3 -3
  11. package/dist/chunks/{chunk-ZKJ62VD3.js → chunk-J7BQS5XH.js} +4 -1
  12. package/dist/chunks/{chunk-ZKJ62VD3.js.map → chunk-J7BQS5XH.js.map} +2 -2
  13. package/dist/chunks/{chunk-4RCPQIN2.js → chunk-M3R56VXZ.js} +4 -4
  14. package/dist/chunks/{chunk-KWBZBSMX.js → chunk-MYCDJTSM.js} +34 -20
  15. package/dist/chunks/{chunk-KWBZBSMX.js.map → chunk-MYCDJTSM.js.map} +2 -2
  16. package/dist/chunks/{chunk-XMLNV3QH.js → chunk-TDCMU5L4.js} +2 -2
  17. package/dist/chunks/{chunk-B7INQVFM.js → chunk-TQR7IE6H.js} +6 -6
  18. package/dist/chunks/{chunk-LUADHXOA.js → chunk-YIDC2IVN.js} +28 -15
  19. package/dist/chunks/chunk-YIDC2IVN.js.map +7 -0
  20. package/dist/core/action-registry.js +3 -3
  21. package/dist/entropy/index.js +5 -5
  22. package/dist/fabric-runtime-state.js +35 -35
  23. package/dist/index.js +34 -27
  24. package/dist/index.js.map +2 -2
  25. package/dist/memory/client.d.ts +31 -0
  26. package/dist/memory/client.d.ts.map +1 -0
  27. package/dist/memory/context.d.ts +2 -0
  28. package/dist/memory/context.d.ts.map +1 -1
  29. package/dist/memory/discovery.js +2 -2
  30. package/dist/memory/expand-service.d.ts +1 -1
  31. package/dist/memory/expand-service.d.ts.map +1 -1
  32. package/dist/memory/host-source.d.ts +59 -0
  33. package/dist/memory/host-source.d.ts.map +1 -0
  34. package/dist/memory/index.d.ts +7 -1
  35. package/dist/memory/index.d.ts.map +1 -1
  36. package/dist/memory/lineage.d.ts +5 -0
  37. package/dist/memory/lineage.d.ts.map +1 -1
  38. package/dist/memory/normalize.d.ts +21 -3
  39. package/dist/memory/normalize.d.ts.map +1 -1
  40. package/dist/memory/normalize.js +3 -1
  41. package/dist/memory/portable.d.ts +64 -0
  42. package/dist/memory/portable.d.ts.map +1 -0
  43. package/dist/memory/recall-service.d.ts +1 -1
  44. package/dist/memory/recall-service.d.ts.map +1 -1
  45. package/dist/memory/request-cache.d.ts +2 -2
  46. package/dist/memory/request-cache.d.ts.map +1 -1
  47. package/dist/memory/request-context.d.ts +3 -0
  48. package/dist/memory/request-context.d.ts.map +1 -1
  49. package/dist/memory/search.js +2 -2
  50. package/dist/memory/sessions-service.d.ts +1 -1
  51. package/dist/memory/sessions-service.d.ts.map +1 -1
  52. package/dist/memory/source-observation.d.ts +6 -0
  53. package/dist/memory/source-observation.d.ts.map +1 -1
  54. package/dist/memory.d.ts +6 -0
  55. package/dist/memory.d.ts.map +1 -0
  56. package/dist/memory.js +79 -0
  57. package/dist/memory.js.map +7 -0
  58. package/dist/providers/memory-provider.d.ts +15 -0
  59. package/dist/providers/memory-provider.d.ts.map +1 -1
  60. package/dist/providers/memory-provider.js +6 -4
  61. package/dist/residency/host.js +8 -8
  62. package/dist/residency/pi-entry.js +8 -8
  63. package/dist/runtime/core-override-guest-types.js +2 -2
  64. package/dist/runtime/guest-types.d.ts +1 -1
  65. package/dist/runtime/guest-types.d.ts.map +1 -1
  66. package/dist/runtime/guest-types.js +1 -1
  67. package/dist/runtime/monty-runtime.js +2 -2
  68. package/dist/runtime/typescript-kernel.js +2 -2
  69. package/dist/ui/controller.d.ts.map +1 -1
  70. package/dist/ui/settings.js +2 -2
  71. package/dist/ui/snapshot.d.ts +4 -2
  72. package/dist/ui/snapshot.d.ts.map +1 -1
  73. package/docs/interface.md +33 -0
  74. package/docs/memory-recall.md +52 -2
  75. package/docs/providers.md +21 -0
  76. package/package.json +6 -1
  77. package/dist/chunks/chunk-AIN5KTE6.js.map +0 -7
  78. package/dist/chunks/chunk-LUADHXOA.js.map +0 -7
  79. /package/dist/chunks/{chunk-73YWS2PJ.js.map → chunk-7X72JCGN.js.map} +0 -0
  80. /package/dist/chunks/{chunk-ZV5AXJYG.js.map → chunk-BOCWQOTG.js.map} +0 -0
  81. /package/dist/chunks/{chunk-WJW47JBN.js.map → chunk-G23OLG5P.js.map} +0 -0
  82. /package/dist/chunks/{chunk-CXUYJNP7.js.map → chunk-HDPGQRHV.js.map} +0 -0
  83. /package/dist/chunks/{chunk-4RCPQIN2.js.map → chunk-M3R56VXZ.js.map} +0 -0
  84. /package/dist/chunks/{chunk-XMLNV3QH.js.map → chunk-TDCMU5L4.js.map} +0 -0
  85. /package/dist/chunks/{chunk-B7INQVFM.js.map → chunk-TQR7IE6H.js.map} +0 -0
@@ -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;AAiHpB,qBAAa,mBAAmB;;IAM9B,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;IA6BvF,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;IAgC7D,IAAI,IAAI,iBAAiB,EAAE;IAQ3B,YAAY,IAAI,iBAAiB,EAAE;IAInC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;CA6C/C"}
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"}
@@ -13,14 +13,14 @@ import {
13
13
  import {
14
14
  FABRIC_NESTED_TOOL_CALL_ID_PREFIX
15
15
  } from "./chunk-WVH324VF.js";
16
- import {
17
- stableJsonHash
18
- } from "./chunk-7363CD5A.js";
19
16
  import {
20
17
  FabricResolutionError,
21
18
  FabricTraceSafeError,
22
19
  executionOutcomeFromError
23
20
  } from "./chunk-KAWR7MS5.js";
21
+ import {
22
+ stableJsonHash
23
+ } from "./chunk-7363CD5A.js";
24
24
 
25
25
  // src/core/action-registry.ts
26
26
  import { randomUUID as randomUUID2 } from "node:crypto";
@@ -1597,4 +1597,4 @@ export {
1597
1597
  NESTED_TOOL_CALL_ID_PREFIX,
1598
1598
  ActionRegistry
1599
1599
  };
1600
- //# sourceMappingURL=chunk-73YWS2PJ.js.map
1600
+ //# sourceMappingURL=chunk-7X72JCGN.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  PI_CORE_COMPATIBILITY_ARGUMENT_TYPE_NAMES,
3
3
  PI_CORE_NUMERIC_FIELDS
4
- } from "./chunk-ZKJ62VD3.js";
4
+ } from "./chunk-J7BQS5XH.js";
5
5
  import {
6
6
  PI_CORE_TOOL_NAMES
7
7
  } from "./chunk-YU62DDKK.js";
@@ -284,4 +284,4 @@ var buildCoreOverrideGuestDeclarations = (sources) => {
284
284
  export {
285
285
  buildCoreOverrideGuestDeclarations
286
286
  };
287
- //# sourceMappingURL=chunk-ZV5AXJYG.js.map
287
+ //# sourceMappingURL=chunk-BOCWQOTG.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-Z43ZKIZT.js";
8
8
  import {
9
9
  NESTED_TOOL_CALL_ID_PREFIX
10
- } from "./chunk-73YWS2PJ.js";
10
+ } from "./chunk-7X72JCGN.js";
11
11
  import {
12
12
  THINKING_DIGEST_CUSTOM_TYPE,
13
13
  buildThinkingDigest,
@@ -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-BTZZMVXJ.js.map
2306
+ //# sourceMappingURL=chunk-CGIPKJSC.js.map