@remnic/core 9.69.3 → 9.69.5
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/access-admin-ops-surface.d.ts +1 -1
- package/dist/access-admin-ops-surface.js +20 -20
- package/dist/access-authorization-probe.d.ts +1 -1
- package/dist/access-authorization-probe.js +21 -21
- package/dist/access-boundary.d.ts +1 -1
- package/dist/access-boundary.js +20 -20
- package/dist/access-cli.js +68 -68
- package/dist/access-extraction-force-flush.d.ts +1 -1
- package/dist/access-extraction-force-flush.js +20 -20
- package/dist/access-http-lcm-compaction.d.ts +1 -1
- package/dist/access-http-lifecycle-flush.d.ts +1 -1
- package/dist/access-http-offline-stream.d.ts +1 -1
- package/dist/access-http-query.js +22 -22
- package/dist/access-http.d.ts +2 -2
- package/dist/access-http.js +36 -36
- package/dist/access-identity-continuity-surface.js +20 -20
- package/dist/access-lcm-surface.d.ts +1 -1
- package/dist/access-lcm-surface.js +20 -20
- package/dist/access-mcp.d.ts +1 -1
- package/dist/access-mcp.js +29 -29
- package/dist/access-namespace-preflight.js +20 -20
- package/dist/access-observe-write-surface.d.ts +1 -1
- package/dist/access-observe-write-surface.js +20 -20
- package/dist/access-operations-batch.js +23 -23
- package/dist/access-operations.d.ts +6 -6
- package/dist/access-operations.js +28 -28
- package/dist/access-recall-concurrency.d.ts +1 -1
- package/dist/access-recall-concurrency.js +20 -20
- package/dist/access-recall-response.d.ts +1 -1
- package/dist/access-recall-response.js +20 -20
- package/dist/access-recall-surface.d.ts +1 -1
- package/dist/access-recall-surface.js +20 -20
- package/dist/access-schema.d.ts +89 -89
- package/dist/access-schema.js +4 -4
- package/dist/access-service-helpers.d.ts +1 -1
- package/dist/access-service.d.ts +1 -1
- package/dist/access-service.js +20 -20
- package/dist/access-surface-catalog.d.ts +1 -1
- package/dist/access-surface-catalog.js +22 -22
- package/dist/briefing.js +8 -8
- package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
- package/dist/causal-consolidation.js +9 -9
- package/dist/{chunk-N3VPKMU3.js → chunk-3X7Z467X.js} +2 -2
- package/dist/{chunk-EB3V7PJC.js → chunk-4OH6FGAO.js} +13 -13
- package/dist/{chunk-EA2C5Z7V.js → chunk-5C4LXMSK.js} +26 -26
- package/dist/{chunk-YSD4MK5Q.js → chunk-5HP6LVWU.js} +2 -2
- package/dist/{chunk-OM4VYQPH.js → chunk-6EXRODDF.js} +2 -2
- package/dist/{chunk-2L5FSNPC.js → chunk-6F5WBXE2.js} +4 -4
- package/dist/{chunk-DZPX5WSG.js → chunk-6JYTP3JP.js} +3 -3
- package/dist/{chunk-RFYKLES2.js → chunk-6KQLDPKA.js} +2 -2
- package/dist/{chunk-J2R275FN.js → chunk-7DXW5V2W.js} +2 -2
- package/dist/chunk-7O5EW7KX.js +27 -0
- package/dist/chunk-7O5EW7KX.js.map +1 -0
- package/dist/{chunk-227UFSEQ.js → chunk-7RZJWZ46.js} +5 -5
- package/dist/{chunk-ATS6H6AC.js → chunk-7TCISOAJ.js} +210 -47
- package/dist/chunk-7TCISOAJ.js.map +1 -0
- package/dist/{chunk-3KURGLO7.js → chunk-7VA7PARC.js} +2 -2
- package/dist/{chunk-TOUZM2RQ.js → chunk-AJFKQJQK.js} +2 -2
- package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
- package/dist/{chunk-WZBDOI2C.js → chunk-C5FRCM4B.js} +2 -2
- package/dist/{chunk-PRCJDCDD.js → chunk-CGFDT752.js} +4 -4
- package/dist/{chunk-V63BBOFS.js → chunk-DD2BKHSD.js} +2 -2
- package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
- package/dist/{chunk-WJTB4SF5.js → chunk-EAG7YMIS.js} +2 -2
- package/dist/{chunk-DA2XDNS5.js → chunk-EJF6AV2U.js} +7 -7
- package/dist/{chunk-3HEYRDNF.js → chunk-EJJ57PTY.js} +2 -2
- package/dist/{chunk-YHSZTMM3.js → chunk-EVLHZ6F3.js} +2 -2
- package/dist/{chunk-35J5ABJC.js → chunk-FGV7V2N4.js} +2 -2
- package/dist/{chunk-6AYPXHOF.js → chunk-GM35IHF7.js} +2 -2
- package/dist/{chunk-MU4FAKGV.js → chunk-HDEQRI2O.js} +2 -2
- package/dist/{chunk-PBSZQBFM.js → chunk-IFHT77WK.js} +2 -2
- package/dist/{chunk-OZFHE6FY.js → chunk-IHFN3JTR.js} +3 -3
- package/dist/{chunk-LXMYIJOO.js → chunk-ISDSX7GW.js} +1 -1
- package/dist/{chunk-EZPBQVGZ.js → chunk-JJAOVJ3E.js} +5 -5
- package/dist/{chunk-76X3F4WV.js → chunk-LGVIKA7O.js} +6 -6
- package/dist/{chunk-7DQQYJKU.js → chunk-MDQXW235.js} +2 -2
- package/dist/{chunk-ASDK4GEV.js → chunk-MOUCCUET.js} +2 -2
- package/dist/{chunk-DT7LKLET.js → chunk-MVH7YAWY.js} +2 -2
- package/dist/{chunk-GH477IGR.js → chunk-NAB4MKTJ.js} +3 -3
- package/dist/{chunk-FGORNFTZ.js → chunk-NM5EOKN7.js} +2 -2
- package/dist/{chunk-LXBVTRBG.js → chunk-OUAK37ID.js} +2 -2
- package/dist/{chunk-HCERYDRI.js → chunk-PGD3DXZP.js} +2 -2
- package/dist/{chunk-6CT4HSVJ.js → chunk-PY5E3UOD.js} +2 -2
- package/dist/{chunk-HBOQO4GB.js → chunk-QDBG45NK.js} +7 -7
- package/dist/{chunk-EJCKJS4X.js → chunk-R3YVNAJB.js} +2 -2
- package/dist/{chunk-XVI2TR26.js → chunk-R4FPBSFD.js} +2 -2
- package/dist/{chunk-VVE5SLO5.js → chunk-SKVSBTFQ.js} +2 -2
- package/dist/{chunk-S7363OIV.js → chunk-SZ3SRRYZ.js} +2 -2
- package/dist/{chunk-WRPRUMUI.js → chunk-SZZGVXKC.js} +2 -2
- package/dist/{chunk-TFN3PPYO.js → chunk-TGDFKC7X.js} +2 -2
- package/dist/{chunk-7SL6EJLT.js → chunk-TP3N5364.js} +2 -2
- package/dist/{chunk-IPLYGWQF.js → chunk-VDX2J7OX.js} +6 -6
- package/dist/{chunk-VJERIMIX.js → chunk-W6V2XVUO.js} +3 -3
- package/dist/{chunk-5FBA6UXN.js → chunk-WTWHORVW.js} +7 -7
- package/dist/{chunk-UFY4G6EC.js → chunk-XOGYSWQZ.js} +10 -10
- package/dist/{chunk-J6SWAE74.js → chunk-YERBUSU2.js} +2 -2
- package/dist/{chunk-D65XGENZ.js → chunk-YPNTBYEV.js} +3 -3
- package/dist/{chunk-FNNWK7G7.js → chunk-ZET6A3OF.js} +2 -2
- package/dist/{cli-CFpMhqz5.d.ts → cli-Bvy4jdBu.d.ts} +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +51 -51
- package/dist/coding/export-okf-codegraph.js +8 -8
- package/dist/compounding/engine.js +8 -8
- package/dist/connectors/codex-materialize-runner.js +8 -8
- package/dist/connectors/index.js +8 -8
- package/dist/convergence-refresh.js +10 -10
- package/dist/conversation-index/backend.js +2 -2
- package/dist/corpus-watermark.js +10 -10
- package/dist/entity-retrieval.js +8 -8
- package/dist/external-wiki-access.d.ts +1 -1
- package/dist/external-wiki-access.js +21 -21
- package/dist/external-wiki-mcp-tools.d.ts +1 -1
- package/dist/extraction.js +8 -8
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/index.d.ts +757 -681
- package/dist/index.js +101 -91
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.js +5 -5
- package/dist/location/index.js +10 -10
- package/dist/maintenance/memory-governance.js +8 -8
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +8 -8
- package/dist/maintenance/rebuild-memory-projection.js +9 -9
- package/dist/mcp-memory-inspector-app.d.ts +1 -1
- package/dist/memory-subject-cli.d.ts +1 -1
- package/dist/memory-subject.d.ts +1 -1
- package/dist/namespaces/migrate.js +9 -9
- package/dist/namespaces/search.js +6 -6
- package/dist/namespaces/storage.js +8 -8
- package/dist/operator-doctor-corpus.js +11 -11
- package/dist/operator-toolkit.js +16 -16
- package/dist/orchestration/maintenance.js +16 -16
- package/dist/orchestrator.js +68 -68
- package/dist/{public-http-C9-CHc40.d.ts → public-http-2MyshWxl.d.ts} +1 -1
- package/dist/recall-navigate-link.d.ts +9 -3
- package/dist/recall-navigate-link.js +3 -15
- package/dist/recall-navigate-link.js.map +1 -1
- package/dist/recall-navigate-traverse.d.ts +21 -0
- package/dist/recall-navigate-traverse.js +44 -0
- package/dist/recall-navigate-traverse.js.map +1 -0
- package/dist/schemas.d.ts +176 -176
- package/dist/search/factory.js +5 -5
- package/dist/search/index.js +9 -9
- package/dist/semantic-consolidation.js +9 -9
- package/dist/semantic-rule-promotion.js +8 -8
- package/dist/semantic-rule-verifier.js +8 -8
- package/dist/shared-context/manager.d.ts +6 -6
- package/dist/source-agent-qualifier.js +8 -8
- package/dist/standup/build.js +8 -8
- package/dist/storage.js +7 -7
- package/dist/support-passport/index.d.ts +4 -4
- package/dist/support-passport/index.js +23 -23
- package/dist/transfer/autodetect.js +1 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +3 -3
- package/dist/transfer/capsule-import.js +2 -2
- package/dist/transfer/export-okf.js +9 -9
- package/dist/transfer/types.d.ts +78 -78
- package/dist/verified-recall.js +8 -8
- package/dist/who-knows-cli.d.ts +1 -1
- package/dist/who-knows-cli.js +9 -9
- package/dist/who-knows.d.ts +1 -1
- package/dist/who-knows.js +8 -8
- package/package.json +2 -2
- package/src/activity/index.ts +2 -0
- package/src/activity/privacy-gate-resolve.test.ts +175 -0
- package/src/activity/privacy-gate-resolve.ts +84 -0
- package/src/activity/timeline/index.ts +1 -0
- package/src/activity/timeline/recap-fallback.test.ts +184 -0
- package/src/activity/timeline/recap-fallback.ts +106 -0
- package/src/activity/vault-dry-run.test.ts +114 -0
- package/src/activity/vault-dry-run.ts +76 -0
- package/src/dedup/index.ts +6 -0
- package/src/dedup/merge-content.test.ts +116 -0
- package/src/dedup/merge-content.ts +40 -0
- package/src/recall-navigate-link.test.ts +28 -6
- package/src/recall-navigate-link.ts +16 -2
- package/src/recall-navigate-traverse.test.ts +247 -0
- package/src/recall-navigate-traverse.ts +73 -0
- package/dist/chunk-ATS6H6AC.js.map +0 -1
- package/dist/{access-service-DcfM0Vf0.d.ts → access-service-LbwWl05g.d.ts} +64 -64
- /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
- /package/dist/{chunk-N3VPKMU3.js.map → chunk-3X7Z467X.js.map} +0 -0
- /package/dist/{chunk-EB3V7PJC.js.map → chunk-4OH6FGAO.js.map} +0 -0
- /package/dist/{chunk-EA2C5Z7V.js.map → chunk-5C4LXMSK.js.map} +0 -0
- /package/dist/{chunk-YSD4MK5Q.js.map → chunk-5HP6LVWU.js.map} +0 -0
- /package/dist/{chunk-OM4VYQPH.js.map → chunk-6EXRODDF.js.map} +0 -0
- /package/dist/{chunk-2L5FSNPC.js.map → chunk-6F5WBXE2.js.map} +0 -0
- /package/dist/{chunk-DZPX5WSG.js.map → chunk-6JYTP3JP.js.map} +0 -0
- /package/dist/{chunk-RFYKLES2.js.map → chunk-6KQLDPKA.js.map} +0 -0
- /package/dist/{chunk-J2R275FN.js.map → chunk-7DXW5V2W.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-7RZJWZ46.js.map} +0 -0
- /package/dist/{chunk-3KURGLO7.js.map → chunk-7VA7PARC.js.map} +0 -0
- /package/dist/{chunk-TOUZM2RQ.js.map → chunk-AJFKQJQK.js.map} +0 -0
- /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
- /package/dist/{chunk-WZBDOI2C.js.map → chunk-C5FRCM4B.js.map} +0 -0
- /package/dist/{chunk-PRCJDCDD.js.map → chunk-CGFDT752.js.map} +0 -0
- /package/dist/{chunk-V63BBOFS.js.map → chunk-DD2BKHSD.js.map} +0 -0
- /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
- /package/dist/{chunk-WJTB4SF5.js.map → chunk-EAG7YMIS.js.map} +0 -0
- /package/dist/{chunk-DA2XDNS5.js.map → chunk-EJF6AV2U.js.map} +0 -0
- /package/dist/{chunk-3HEYRDNF.js.map → chunk-EJJ57PTY.js.map} +0 -0
- /package/dist/{chunk-YHSZTMM3.js.map → chunk-EVLHZ6F3.js.map} +0 -0
- /package/dist/{chunk-35J5ABJC.js.map → chunk-FGV7V2N4.js.map} +0 -0
- /package/dist/{chunk-6AYPXHOF.js.map → chunk-GM35IHF7.js.map} +0 -0
- /package/dist/{chunk-MU4FAKGV.js.map → chunk-HDEQRI2O.js.map} +0 -0
- /package/dist/{chunk-PBSZQBFM.js.map → chunk-IFHT77WK.js.map} +0 -0
- /package/dist/{chunk-OZFHE6FY.js.map → chunk-IHFN3JTR.js.map} +0 -0
- /package/dist/{chunk-LXMYIJOO.js.map → chunk-ISDSX7GW.js.map} +0 -0
- /package/dist/{chunk-EZPBQVGZ.js.map → chunk-JJAOVJ3E.js.map} +0 -0
- /package/dist/{chunk-76X3F4WV.js.map → chunk-LGVIKA7O.js.map} +0 -0
- /package/dist/{chunk-7DQQYJKU.js.map → chunk-MDQXW235.js.map} +0 -0
- /package/dist/{chunk-ASDK4GEV.js.map → chunk-MOUCCUET.js.map} +0 -0
- /package/dist/{chunk-DT7LKLET.js.map → chunk-MVH7YAWY.js.map} +0 -0
- /package/dist/{chunk-GH477IGR.js.map → chunk-NAB4MKTJ.js.map} +0 -0
- /package/dist/{chunk-FGORNFTZ.js.map → chunk-NM5EOKN7.js.map} +0 -0
- /package/dist/{chunk-LXBVTRBG.js.map → chunk-OUAK37ID.js.map} +0 -0
- /package/dist/{chunk-HCERYDRI.js.map → chunk-PGD3DXZP.js.map} +0 -0
- /package/dist/{chunk-6CT4HSVJ.js.map → chunk-PY5E3UOD.js.map} +0 -0
- /package/dist/{chunk-HBOQO4GB.js.map → chunk-QDBG45NK.js.map} +0 -0
- /package/dist/{chunk-EJCKJS4X.js.map → chunk-R3YVNAJB.js.map} +0 -0
- /package/dist/{chunk-XVI2TR26.js.map → chunk-R4FPBSFD.js.map} +0 -0
- /package/dist/{chunk-VVE5SLO5.js.map → chunk-SKVSBTFQ.js.map} +0 -0
- /package/dist/{chunk-S7363OIV.js.map → chunk-SZ3SRRYZ.js.map} +0 -0
- /package/dist/{chunk-WRPRUMUI.js.map → chunk-SZZGVXKC.js.map} +0 -0
- /package/dist/{chunk-TFN3PPYO.js.map → chunk-TGDFKC7X.js.map} +0 -0
- /package/dist/{chunk-7SL6EJLT.js.map → chunk-TP3N5364.js.map} +0 -0
- /package/dist/{chunk-IPLYGWQF.js.map → chunk-VDX2J7OX.js.map} +0 -0
- /package/dist/{chunk-VJERIMIX.js.map → chunk-W6V2XVUO.js.map} +0 -0
- /package/dist/{chunk-5FBA6UXN.js.map → chunk-WTWHORVW.js.map} +0 -0
- /package/dist/{chunk-UFY4G6EC.js.map → chunk-XOGYSWQZ.js.map} +0 -0
- /package/dist/{chunk-J6SWAE74.js.map → chunk-YERBUSU2.js.map} +0 -0
- /package/dist/{chunk-D65XGENZ.js.map → chunk-YPNTBYEV.js.map} +0 -0
- /package/dist/{chunk-FNNWK7G7.js.map → chunk-ZET6A3OF.js.map} +0 -0
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Recall navigation link-type parse (issue #1956
|
|
2
|
+
* Recall navigation link-type parse (issue #1956).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* One allow-list covering BOTH vocabularies a traversal can meet:
|
|
5
|
+
* the navigation set this module originally defined and the persisted
|
|
6
|
+
* `MemoryLinkType` values (`follows | references | related`) that real
|
|
7
|
+
* memory frontmatter carries. Review found the narrower list silently
|
|
8
|
+
* dropped every persisted `follows`/`references`/`related` edge and
|
|
9
|
+
* rejected `relation: "related"` as unknown — a traversal over actual
|
|
10
|
+
* stored links would lose valid neighbors. Surfaces wait.
|
|
5
11
|
*/
|
|
6
|
-
declare const NAVIGATE_LINK_TYPES: readonly ["supports", "contradicts", "elaborates", "causes", "caused_by"];
|
|
12
|
+
declare const NAVIGATE_LINK_TYPES: readonly ["supports", "contradicts", "elaborates", "causes", "caused_by", "follows", "references", "related", "supersedes"];
|
|
7
13
|
type NavigateLinkType = (typeof NAVIGATE_LINK_TYPES)[number];
|
|
8
14
|
type ParseNavigateLinkTypeResult = {
|
|
9
15
|
ok: true;
|
|
@@ -1,19 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
parseNavigateLinkType
|
|
3
|
+
} from "./chunk-7O5EW7KX.js";
|
|
1
4
|
import "./chunk-PZ5AY32C.js";
|
|
2
|
-
|
|
3
|
-
// src/recall-navigate-link.ts
|
|
4
|
-
var NAVIGATE_LINK_TYPES = [
|
|
5
|
-
"supports",
|
|
6
|
-
"contradicts",
|
|
7
|
-
"elaborates",
|
|
8
|
-
"causes",
|
|
9
|
-
"caused_by"
|
|
10
|
-
];
|
|
11
|
-
function parseNavigateLinkType(value) {
|
|
12
|
-
if (NAVIGATE_LINK_TYPES.includes(value)) {
|
|
13
|
-
return { ok: true, type: value };
|
|
14
|
-
}
|
|
15
|
-
return { ok: false, error: "unknown_link" };
|
|
16
|
-
}
|
|
17
5
|
export {
|
|
18
6
|
parseNavigateLinkType
|
|
19
7
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare const DEFAULT_TRAVERSE_LIMIT = 10;
|
|
2
|
+
interface TraverseNeighbor {
|
|
3
|
+
targetId: string;
|
|
4
|
+
linkType: string;
|
|
5
|
+
}
|
|
6
|
+
type TraverseSelectionResult = {
|
|
7
|
+
ok: true;
|
|
8
|
+
neighbors: TraverseNeighbor[];
|
|
9
|
+
truncated: boolean;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
error: "unknown_relation" | "invalid_limit";
|
|
13
|
+
};
|
|
14
|
+
declare function selectTraverseNeighbors(input: {
|
|
15
|
+
links: readonly TraverseNeighbor[];
|
|
16
|
+
/** Optional relation filter; omitted means every known relation. */
|
|
17
|
+
relation?: string;
|
|
18
|
+
limit?: number;
|
|
19
|
+
}): TraverseSelectionResult;
|
|
20
|
+
|
|
21
|
+
export { DEFAULT_TRAVERSE_LIMIT, type TraverseNeighbor, type TraverseSelectionResult, selectTraverseNeighbors };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {
|
|
2
|
+
parseNavigateLinkType
|
|
3
|
+
} from "./chunk-7O5EW7KX.js";
|
|
4
|
+
import "./chunk-PZ5AY32C.js";
|
|
5
|
+
|
|
6
|
+
// src/recall-navigate-traverse.ts
|
|
7
|
+
var DEFAULT_TRAVERSE_LIMIT = 10;
|
|
8
|
+
function selectTraverseNeighbors(input) {
|
|
9
|
+
const limit = input.limit ?? DEFAULT_TRAVERSE_LIMIT;
|
|
10
|
+
if (!Number.isFinite(limit) || !Number.isInteger(limit) || limit < 1) {
|
|
11
|
+
return { ok: false, error: "invalid_limit" };
|
|
12
|
+
}
|
|
13
|
+
if (input.relation !== void 0 && !parseNavigateLinkType(input.relation).ok) {
|
|
14
|
+
return { ok: false, error: "unknown_relation" };
|
|
15
|
+
}
|
|
16
|
+
const kept = [];
|
|
17
|
+
for (const link of input.links) {
|
|
18
|
+
if (!parseNavigateLinkType(link.linkType).ok) continue;
|
|
19
|
+
if (input.relation !== void 0 && link.linkType !== input.relation) continue;
|
|
20
|
+
if (typeof link.targetId !== "string" || link.targetId.trim() === "" || link.targetId.trim() !== link.targetId) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
kept.push({ targetId: link.targetId, linkType: link.linkType });
|
|
24
|
+
}
|
|
25
|
+
kept.sort((a, b) => {
|
|
26
|
+
if (a.linkType !== b.linkType) return a.linkType < b.linkType ? -1 : 1;
|
|
27
|
+
if (a.targetId !== b.targetId) return a.targetId < b.targetId ? -1 : 1;
|
|
28
|
+
return 0;
|
|
29
|
+
});
|
|
30
|
+
const seen = /* @__PURE__ */ new Set();
|
|
31
|
+
const deduped = [];
|
|
32
|
+
for (const link of kept) {
|
|
33
|
+
if (seen.has(link.targetId)) continue;
|
|
34
|
+
seen.add(link.targetId);
|
|
35
|
+
deduped.push(link);
|
|
36
|
+
}
|
|
37
|
+
const truncated = deduped.length > limit;
|
|
38
|
+
return { ok: true, neighbors: truncated ? deduped.slice(0, limit) : deduped, truncated };
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
DEFAULT_TRAVERSE_LIMIT,
|
|
42
|
+
selectTraverseNeighbors
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=recall-navigate-traverse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/recall-navigate-traverse.ts"],"sourcesContent":["/**\n * Recall navigation traverse selection (issue #1956).\n *\n * Pure selection step for `traverseLinks(id, relation?, limit)`: given a\n * recalled memory's links, pick which neighbors a traverse would visit.\n * Internal; surfaces wire it in a later slice.\n */\nimport { parseNavigateLinkType } from \"./recall-navigate-link.js\";\n\nexport const DEFAULT_TRAVERSE_LIMIT = 10;\n\nexport interface TraverseNeighbor {\n targetId: string;\n linkType: string;\n}\n\nexport type TraverseSelectionResult =\n | { ok: true; neighbors: TraverseNeighbor[]; truncated: boolean }\n | { ok: false; error: \"unknown_relation\" | \"invalid_limit\" };\n\nexport function selectTraverseNeighbors(input: {\n links: readonly TraverseNeighbor[];\n /** Optional relation filter; omitted means every known relation. */\n relation?: string;\n limit?: number;\n}): TraverseSelectionResult {\n const limit = input.limit ?? DEFAULT_TRAVERSE_LIMIT;\n if (!Number.isFinite(limit) || !Number.isInteger(limit) || limit < 1) {\n return { ok: false, error: \"invalid_limit\" };\n }\n if (input.relation !== undefined && !parseNavigateLinkType(input.relation).ok) {\n return { ok: false, error: \"unknown_relation\" };\n }\n\n const kept: TraverseNeighbor[] = [];\n // Asymmetry is intentional: a bad request (unknown relation, invalid\n // limit) is refused, but bad stored data is skipped — stored data may\n // predate a type or carry a malformed id, and one bad row must not fail\n // the whole traverse. A targetId that is not a non-blank string, including\n // undefined/null and whitespace-only, is malformed and skipped. Padded ids\n // are NOT trimmed into validity: an id is an exact identity, and guessing\n // the intended target is worse than skipping the row.\n for (const link of input.links) {\n if (!parseNavigateLinkType(link.linkType).ok) continue;\n if (input.relation !== undefined && link.linkType !== input.relation) continue;\n if (typeof link.targetId !== \"string\" || link.targetId.trim() === \"\" || link.targetId.trim() !== link.targetId) {\n continue;\n }\n kept.push({ targetId: link.targetId, linkType: link.linkType });\n }\n\n // Sort BEFORE deduplicating: first-occurrence dedup on an unsorted list\n // lets input order decide which relation survives for a target that is\n // linked under two types, and after the cap is applied, which target is\n // returned at all. Sorting first makes the survivor deterministic\n // (smallest linkType wins the tie).\n kept.sort((a, b) => {\n if (a.linkType !== b.linkType) return a.linkType < b.linkType ? -1 : 1;\n if (a.targetId !== b.targetId) return a.targetId < b.targetId ? -1 : 1;\n return 0;\n });\n\n const seen = new Set<string>();\n const deduped: TraverseNeighbor[] = [];\n for (const link of kept) {\n if (seen.has(link.targetId)) continue;\n seen.add(link.targetId);\n deduped.push(link);\n }\n\n const truncated = deduped.length > limit;\n return { ok: true, neighbors: truncated ? deduped.slice(0, limit) : deduped, truncated };\n}\n"],"mappings":";;;;;;AASO,IAAM,yBAAyB;AAW/B,SAAS,wBAAwB,OAKZ;AAC1B,QAAM,QAAQ,MAAM,SAAS;AAC7B,MAAI,CAAC,OAAO,SAAS,KAAK,KAAK,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AACpE,WAAO,EAAE,IAAI,OAAO,OAAO,gBAAgB;AAAA,EAC7C;AACA,MAAI,MAAM,aAAa,UAAa,CAAC,sBAAsB,MAAM,QAAQ,EAAE,IAAI;AAC7E,WAAO,EAAE,IAAI,OAAO,OAAO,mBAAmB;AAAA,EAChD;AAEA,QAAM,OAA2B,CAAC;AAQlC,aAAW,QAAQ,MAAM,OAAO;AAC9B,QAAI,CAAC,sBAAsB,KAAK,QAAQ,EAAE,GAAI;AAC9C,QAAI,MAAM,aAAa,UAAa,KAAK,aAAa,MAAM,SAAU;AACtE,QAAI,OAAO,KAAK,aAAa,YAAY,KAAK,SAAS,KAAK,MAAM,MAAM,KAAK,SAAS,KAAK,MAAM,KAAK,UAAU;AAC9G;AAAA,IACF;AACA,SAAK,KAAK,EAAE,UAAU,KAAK,UAAU,UAAU,KAAK,SAAS,CAAC;AAAA,EAChE;AAOA,OAAK,KAAK,CAAC,GAAG,MAAM;AAClB,QAAI,EAAE,aAAa,EAAE,SAAU,QAAO,EAAE,WAAW,EAAE,WAAW,KAAK;AACrE,QAAI,EAAE,aAAa,EAAE,SAAU,QAAO,EAAE,WAAW,EAAE,WAAW,KAAK;AACrE,WAAO;AAAA,EACT,CAAC;AAED,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,UAA8B,CAAC;AACrC,aAAW,QAAQ,MAAM;AACvB,QAAI,KAAK,IAAI,KAAK,QAAQ,EAAG;AAC7B,SAAK,IAAI,KAAK,QAAQ;AACtB,YAAQ,KAAK,IAAI;AAAA,EACnB;AAEA,QAAM,YAAY,QAAQ,SAAS;AACnC,SAAO,EAAE,IAAI,MAAM,WAAW,YAAY,QAAQ,MAAM,GAAG,KAAK,IAAI,SAAS,UAAU;AACzF;","names":[]}
|