omp-fabric 1.16.0 → 1.18.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.
- package/CHANGELOG.md +24 -0
- package/dist/chunks/{chunk-3U5ZVAIX.js → chunk-7OAFYAJC.js} +2 -2
- package/dist/chunks/{chunk-N2MMGFMD.js → chunk-C5JMLDIM.js} +2 -2
- package/dist/chunks/{chunk-XJMS4223.js → chunk-I3XEFTXH.js} +9 -11
- package/dist/chunks/chunk-I3XEFTXH.js.map +7 -0
- package/dist/chunks/{chunk-BSUEBCAM.js → chunk-QZJB7QTM.js} +2 -2
- package/dist/chunks/{chunk-BSUEBCAM.js.map → chunk-QZJB7QTM.js.map} +2 -2
- package/dist/chunks/{chunk-3NWBU3K7.js → chunk-VYB7ROEH.js} +2 -2
- package/dist/chunks/{chunk-D2ET33NE.js → chunk-WMB6QCWX.js} +2 -5
- package/dist/chunks/{chunk-D2ET33NE.js.map → chunk-WMB6QCWX.js.map} +2 -2
- package/dist/chunks/{chunk-ARRZTY7E.js → chunk-Z7N4PVTM.js} +2 -2
- package/dist/compaction/hook.d.ts +0 -2
- package/dist/compaction/hook.d.ts.map +1 -1
- package/dist/compaction/hook.js +1 -1
- package/dist/compaction/lcm-maintenance.d.ts +7 -7
- package/dist/compaction/lcm-maintenance.d.ts.map +1 -1
- package/dist/compaction/lcm-runtime.d.ts +4 -7
- package/dist/compaction/lcm-runtime.d.ts.map +1 -1
- package/dist/compaction/lcm-runtime.js +60 -58
- package/dist/compaction/lcm-runtime.js.map +2 -2
- package/dist/fabric-runtime-state.d.ts +0 -1
- package/dist/fabric-runtime-state.d.ts.map +1 -1
- package/dist/fabric-runtime-state.js +5 -5
- package/dist/fabric-runtime-state.js.map +2 -2
- package/dist/index.js +3 -3
- package/dist/memory/lcm-adapter.d.ts +0 -3
- package/dist/memory/lcm-adapter.d.ts.map +1 -1
- package/dist/providers/memory-provider.js +1 -1
- package/dist/residency/host.js +4 -4
- package/dist/residency/omp-entry.js +4 -4
- package/dist/storage/lcm-ledger.d.ts +1 -0
- package/dist/storage/lcm-ledger.d.ts.map +1 -1
- package/dist/ui/lcm-dashboard.js +1 -1
- package/dist/ui/lcm-panel.js +1 -1
- package/docs/compaction.md +10 -0
- package/package.json +1 -1
- package/dist/chunks/chunk-XJMS4223.js.map +0 -7
- /package/dist/chunks/{chunk-3U5ZVAIX.js.map → chunk-7OAFYAJC.js.map} +0 -0
- /package/dist/chunks/{chunk-N2MMGFMD.js.map → chunk-C5JMLDIM.js.map} +0 -0
- /package/dist/chunks/{chunk-3NWBU3K7.js.map → chunk-VYB7ROEH.js.map} +0 -0
- /package/dist/chunks/{chunk-ARRZTY7E.js.map → chunk-Z7N4PVTM.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.18.0
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- A forked session no longer starts with an empty frontier. LCM identified a source by `sessionId:entryId:revision`, and a fork mints a new session id while keeping the entries it inherited, so every summary the parent built fell out of the fork on its first readback. A source is now identified by its entry id and payload hash, and the live source set decides membership instead of the session id. Measured on a production ledger, a 400-entry branch that covered 160 sources keeps all 160 after the fork; it covered 0 before.
|
|
8
|
+
- `memory.recall` and `memory.expand` accept an inherited summary and its raw sources. The active-branch binding resolved by session id, so a fork was served summaries whose addresses it then refused to open.
|
|
9
|
+
- A summary the parent left pending no longer suppresses the fork's own leaf over the same entries, which previously dropped up to one leaf window from coverage until the parent session was resumed.
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- `LcmLedger.readRawKeys` returns `contentHash` alongside each key so the coverage map builds the same identity the frontier uses.
|
|
14
|
+
|
|
15
|
+
## 1.17.0
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- Summaries stopped leaving the frontier one message after they were built. LCM stamped each stored entry with the host's leaf id, which is the id of the newest entry, and then filtered the frontier on it, so a node matched only until the next message arrived. The label is gone from the model: `LcmNode` no longer carries it, leaf and condensed identity no longer hash it, and the four selectors no longer filter on it. A production ledger of 5,400 entries held 106 of 133 nodes behind 36 dead leaf values and served 2 of 400 sources; the same branch now serves 160 of 400. Existing ledgers keep the labels in a column nothing reads, so nothing migrates.
|
|
20
|
+
- Branch isolation now rests where it was already exact: a summary is served only when every source it covers is on the live branch. `selectLeaf` applies that same predicate when it decides which entries are already summarised, so an entry covered only by a node the live branch cannot serve is summarised again instead of being skipped forever.
|
|
21
|
+
- `getFrontier` drops a node whose sources another selected node fully contains, so a rewind that remints a covered prefix can no longer put the same range into a compacted prompt twice.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- `branch` was removed from `LcmCompactionInput`, `LcmCompactionOutput`, `LcmSummaryNode`, `LcmDashboardNode` and the memory branch binding. `createLeaf` and `createCondensed` now require their arguments rather than defaulting to an unscoped selection.
|
|
26
|
+
|
|
3
27
|
## 1.16.0
|
|
4
28
|
|
|
5
29
|
### Added
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
lifecycleSourceIdentity,
|
|
11
11
|
loadModelUsage,
|
|
12
12
|
useBudgetLedger
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-VYB7ROEH.js";
|
|
14
14
|
import {
|
|
15
15
|
normalizeModelAliases,
|
|
16
16
|
resolveAvailableOmpModel
|
|
@@ -685,4 +685,4 @@ if (isMain) {
|
|
|
685
685
|
export {
|
|
686
686
|
runResidentHostFromConfigPath
|
|
687
687
|
};
|
|
688
|
-
//# sourceMappingURL=chunk-
|
|
688
|
+
//# sourceMappingURL=chunk-7OAFYAJC.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-NX2G7BRO.js";
|
|
7
7
|
import {
|
|
8
8
|
rawContextTokens
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-WMB6QCWX.js";
|
|
10
10
|
import {
|
|
11
11
|
compactionRequestBoundsError,
|
|
12
12
|
encodeCompactionRequest
|
|
@@ -463,4 +463,4 @@ export {
|
|
|
463
463
|
buildPeerCards,
|
|
464
464
|
awaitPeerSettle
|
|
465
465
|
};
|
|
466
|
-
//# sourceMappingURL=chunk-
|
|
466
|
+
//# sourceMappingURL=chunk-C5JMLDIM.js.map
|
|
@@ -275,7 +275,7 @@ var excerpt = (text, max = 480) => ({
|
|
|
275
275
|
truncated: text.length > max
|
|
276
276
|
});
|
|
277
277
|
var isLowSurrogate = (code) => code >= 56320 && code <= 57343;
|
|
278
|
-
var sourceKey = (
|
|
278
|
+
var sourceKey = (entryId, contentHash) => `${entryId}:${contentHash}`;
|
|
279
279
|
var activeBinding = (options, sessionId) => options.branchForSession?.(sessionId);
|
|
280
280
|
var activeSourceSet = (binding) => binding?.activeSourceKeys === void 0 ? void 0 : new Set(binding.activeSourceKeys);
|
|
281
281
|
var sessionScope = (args, currentSessionId) => {
|
|
@@ -437,7 +437,7 @@ var LcmMemoryAdapter = class {
|
|
|
437
437
|
if (page.rows.length === 0) break;
|
|
438
438
|
for (const entry of page.rows) {
|
|
439
439
|
consumed += 1;
|
|
440
|
-
const allowed = activeAllowed(branches, activeBinding(this.options, entry.sessionId), sourceKey(entry.
|
|
440
|
+
const allowed = activeAllowed(branches, activeBinding(this.options, entry.sessionId), sourceKey(entry.entryId, entry.contentHash));
|
|
441
441
|
if (!allowed.allowed) {
|
|
442
442
|
if (allowed.reason) reasons.add(allowed.reason);
|
|
443
443
|
continue;
|
|
@@ -477,8 +477,7 @@ var LcmMemoryAdapter = class {
|
|
|
477
477
|
};
|
|
478
478
|
}
|
|
479
479
|
summaryHits(selectedSession, branches, predicate, reasons) {
|
|
480
|
-
const
|
|
481
|
-
const nodes = selectedSession === void 0 ? this.options.summaries.listNodes({ limit: this.maxSummary + 1 }) : this.options.summaries.listNodes({ sessionId: selectedSession, limit: this.maxSummary + 1, ...summaryBranch === void 0 ? {} : { branch: summaryBranch } });
|
|
480
|
+
const nodes = selectedSession === void 0 ? this.options.summaries.listNodes({ limit: this.maxSummary + 1 }) : this.options.summaries.listNodes({ sessionId: selectedSession, limit: this.maxSummary + 1 });
|
|
482
481
|
if (nodes.length > this.maxSummary) reasons.add("summary_node_limit");
|
|
483
482
|
const hits = [];
|
|
484
483
|
for (const node of nodes.slice(0, this.maxSummary)) {
|
|
@@ -497,7 +496,7 @@ var LcmMemoryAdapter = class {
|
|
|
497
496
|
continue;
|
|
498
497
|
}
|
|
499
498
|
const active = activeSourceSet(binding);
|
|
500
|
-
if (active && node.sources.some((source) => !active.has(sourceKey(
|
|
499
|
+
if (active && node.sources.some((source) => !active.has(sourceKey(source.entryId, source.contentHash)))) {
|
|
501
500
|
reasons.add("summary_off_active_branch");
|
|
502
501
|
continue;
|
|
503
502
|
}
|
|
@@ -544,7 +543,7 @@ var LcmMemoryAdapter = class {
|
|
|
544
543
|
const active = activeSourceSet(binding);
|
|
545
544
|
if (branches === "active") {
|
|
546
545
|
if (!binding || !binding.ready) return { entries: [], next: null, error: { code: "incomplete_coverage", message: "summary lineage is not ready" } };
|
|
547
|
-
if (active && node.sources.some((source) => !active.has(sourceKey(
|
|
546
|
+
if (active && node.sources.some((source) => !active.has(sourceKey(source.entryId, source.contentHash)))) {
|
|
548
547
|
return { entries: [], next: null, error: { code: "stale_pointer", message: "summary is outside the active branch" } };
|
|
549
548
|
}
|
|
550
549
|
}
|
|
@@ -638,7 +637,6 @@ var LcmMemoryAdapter = class {
|
|
|
638
637
|
node: {
|
|
639
638
|
nodeId: node.nodeId,
|
|
640
639
|
sessionId: node.sessionId,
|
|
641
|
-
branch: node.branch,
|
|
642
640
|
kind: node.kind ?? (node.sources.length > 0 ? "leaf" : "condensed"),
|
|
643
641
|
state: node.state,
|
|
644
642
|
text: node.text,
|
|
@@ -667,7 +665,7 @@ var LcmMemoryAdapter = class {
|
|
|
667
665
|
const reachable = [];
|
|
668
666
|
let unavailable = 0;
|
|
669
667
|
for (const source of node.sources) {
|
|
670
|
-
const key = sourceKey(
|
|
668
|
+
const key = sourceKey(source.entryId, source.contentHash);
|
|
671
669
|
if (branches === "active" && active && !active.has(key)) {
|
|
672
670
|
unavailable += 1;
|
|
673
671
|
continue;
|
|
@@ -716,7 +714,7 @@ var LcmMemoryAdapter = class {
|
|
|
716
714
|
}
|
|
717
715
|
if (branches === "active") {
|
|
718
716
|
const active = activeSourceSet(activeBinding(this.options, child.sessionId));
|
|
719
|
-
if (active && child.sources.some((source) => !active.has(sourceKey(
|
|
717
|
+
if (active && child.sources.some((source) => !active.has(sourceKey(source.entryId, source.contentHash)))) {
|
|
720
718
|
unavailable += 1;
|
|
721
719
|
continue;
|
|
722
720
|
}
|
|
@@ -745,7 +743,7 @@ var LcmMemoryAdapter = class {
|
|
|
745
743
|
const entry = this.options.ledger.readRawEntry(sessionId, entryId, revision);
|
|
746
744
|
if (!entry) return { entries: [], next: null, error: { code: "stale_pointer", message: "raw source is unavailable" } };
|
|
747
745
|
const binding = activeBinding(this.options, sessionId);
|
|
748
|
-
const allowed = activeAllowed(branches, binding, sourceKey(
|
|
746
|
+
const allowed = activeAllowed(branches, binding, sourceKey(entryId, entry.contentHash));
|
|
749
747
|
if (!allowed.allowed) return { entries: [], next: null, error: { code: allowed.reason === "source_off_active_branch" ? "stale_pointer" : "incomplete_coverage", message: allowed.reason ?? "raw lineage is unavailable" } };
|
|
750
748
|
const payload = JSON.parse(entry.payloadJson);
|
|
751
749
|
const sourceHash = hashLcmPayload(payload);
|
|
@@ -2472,4 +2470,4 @@ export {
|
|
|
2472
2470
|
normalizeMemoryArgs,
|
|
2473
2471
|
MemoryProvider
|
|
2474
2472
|
};
|
|
2475
|
-
//# sourceMappingURL=chunk-
|
|
2473
|
+
//# sourceMappingURL=chunk-I3XEFTXH.js.map
|