@x12i/memorix-hippox 1.0.1 → 1.2.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.
Files changed (52) hide show
  1. package/README.md +112 -13
  2. package/dist/collection-resolver.d.ts.map +1 -1
  3. package/dist/collection-resolver.js +8 -1
  4. package/dist/collection-resolver.js.map +1 -1
  5. package/dist/config.d.ts +11 -1
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +29 -1
  8. package/dist/config.js.map +1 -1
  9. package/dist/helpers-loader.d.ts +31 -0
  10. package/dist/helpers-loader.d.ts.map +1 -0
  11. package/dist/helpers-loader.js +20 -0
  12. package/dist/helpers-loader.js.map +1 -0
  13. package/dist/http/register-routes.d.ts.map +1 -1
  14. package/dist/http/register-routes.js +73 -1
  15. package/dist/http/register-routes.js.map +1 -1
  16. package/dist/index.d.ts +7 -3
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +6 -2
  19. package/dist/index.js.map +1 -1
  20. package/dist/infer-links.d.ts +9 -0
  21. package/dist/infer-links.d.ts.map +1 -0
  22. package/dist/infer-links.js +171 -0
  23. package/dist/infer-links.js.map +1 -0
  24. package/dist/join-discovery.d.ts +34 -0
  25. package/dist/join-discovery.d.ts.map +1 -0
  26. package/dist/join-discovery.js +697 -0
  27. package/dist/join-discovery.js.map +1 -0
  28. package/dist/legacy-bridge.d.ts.map +1 -1
  29. package/dist/legacy-bridge.js +3 -4
  30. package/dist/legacy-bridge.js.map +1 -1
  31. package/dist/paths.d.ts +1 -0
  32. package/dist/paths.d.ts.map +1 -1
  33. package/dist/paths.js +17 -0
  34. package/dist/paths.js.map +1 -1
  35. package/dist/record-flatten.d.ts +12 -0
  36. package/dist/record-flatten.d.ts.map +1 -0
  37. package/dist/record-flatten.js +49 -0
  38. package/dist/record-flatten.js.map +1 -0
  39. package/dist/resolve.d.ts.map +1 -1
  40. package/dist/resolve.js +6 -5
  41. package/dist/resolve.js.map +1 -1
  42. package/dist/service.d.ts +4 -1
  43. package/dist/service.d.ts.map +1 -1
  44. package/dist/service.js +33 -0
  45. package/dist/service.js.map +1 -1
  46. package/dist/store.d.ts +4 -0
  47. package/dist/store.d.ts.map +1 -1
  48. package/dist/store.js +16 -0
  49. package/dist/store.js.map +1 -1
  50. package/dist/types.d.ts +121 -0
  51. package/dist/types.d.ts.map +1 -1
  52. package/package.json +6 -1
package/README.md CHANGED
@@ -1,18 +1,42 @@
1
1
  # @x12i/memorix-hippox
2
2
 
3
- Memorix Hippox stores reusable contextual links between Memorix object types. Operators can define property-based joins without pre-modeled schema relations, simulate match quality on sampled data, approve links into long-term memory, and resolve bounded context into `jobMemory.context`.
3
+ Memorix Hippox stores reusable contextual links between Memorix object types. Operators can discover join keys from sampled data, define property-based joins without pre-modeled schema relations, simulate match quality, approve links into long-term memory, and resolve bounded context into `jobMemory.context`.
4
+
5
+ See [memorix-format.md §13](../docs/memorix-format.md) and [memorix-fomat-additions.md §K](../docs/memorix-fomat-additions.md) for how Hippox fits the Memorix 2.0 record model (`data`, `associatedData`, `index.recordLinks`, `sourceFacts`).
4
6
 
5
7
  ## Database
6
8
 
7
9
  Approved and draft links persist in Mongo database **`memorix-hippox`** (collection **`context-links`** by default).
8
10
 
9
- | Variable | Default |
10
- |----------|---------|
11
- | `MEMORIX_HIPPOX_DB` | `memorix-hippox` |
12
- | `MEMORIX_HIPPOX_COLLECTION` | `context-links` |
13
- | `MEMORIX_HIPPOX_SIMULATION_LIMIT` | `1000` |
14
- | `MEMORIX_HIPPOX_SIMULATION_EXAMPLES_LIMIT` | `25` |
15
- | `MEMORIX_CONTEXT_LIST_LIMIT` | `25` |
11
+ | Variable | Default | Purpose |
12
+ |----------|---------|---------|
13
+ | `MEMORIX_HIPPOX_DB` | `memorix-hippox` | Hippox Mongo database |
14
+ | `MEMORIX_HIPPOX_COLLECTION` | `context-links` | Context links collection |
15
+ | `MEMORIX_HIPPOX_SIMULATION_LIMIT` | `1000` | Max records sampled per side during simulation |
16
+ | `MEMORIX_HIPPOX_SIMULATION_EXAMPLES_LIMIT` | `25` | Max example matches/misses in simulation summary |
17
+ | `MEMORIX_CONTEXT_LIST_LIMIT` | `25` | Default list retrieval limit at resolve time |
18
+ | `MEMORIX_HIPPOX_DISCOVERY_SAMPLE_LIMIT` | `1000` | Max records sampled per side during join discovery |
19
+ | `MEMORIX_HIPPOX_DISCOVERY_DISTINCT_CAP` | `500` | Max distinct source values per value probe |
20
+ | `MEMORIX_HIPPOX_DISCOVERY_MAX_PAIRS` | `200` | Max source×target field pairs to evaluate |
21
+ | `MEMORIX_HIPPOX_DISCOVERY_MIN_COVERAGE` | `0.05` | Minimum field coverage to include in discovery |
22
+ | `MEMORIX_HIPPOX_DISCOVERY_MIN_PAIR_SCORE` | `0.15` | Minimum score for join candidates / recommended join |
23
+ | `MEMORIX_HIPPOX_DISCOVERY_CACHE_TTL_MS` | `300000` | In-memory join-discovery cache TTL per pair |
24
+ | `MEMORIX_HIPPOX_DISCOVERY_MAX_CANDIDATES` | `50` | Max entries in `joinCandidates` |
25
+
26
+ ## Path conventions (Memorix 2.0)
27
+
28
+ Join paths are **dot paths from the document root**, consistent with entity descriptor relations:
29
+
30
+ ```json
31
+ { "sourcePath": "data.subnetId", "targetPath": "data.id", "operator": "eq" }
32
+ ```
33
+
34
+ Discovery walks the content-type `dataRoot` (default `data`) and returns paths with the `data.` prefix.
35
+
36
+ Record identity and sorting support both Memorix 2.0 and legacy shapes:
37
+
38
+ - IDs: `identity.recordId`, `identity.targetId`, then legacy `entityId` / `recordId` / `_id`
39
+ - Latest record: `data.scopedAt`, then `lifecycle.capturedAt` / `lifecycle.modifiedAt`, then root timestamps
16
40
 
17
41
  ## Example: assets → subnets (record context)
18
42
 
@@ -43,18 +67,28 @@ Resolved output:
43
67
  }
44
68
  ```
45
69
 
70
+ Materializing this into a snapshot's `associatedData` block is a separate assembly step; Hippox resolve returns transient job context.
71
+
46
72
  ## HTTP routes
47
73
 
48
74
  When mounted through `memorix-schema-api`:
49
75
 
50
76
  | Method | Path | Purpose |
51
77
  |--------|------|---------|
52
- | `GET` | `/api/hippox/links?sourceObjectType=assets` | List draft + approved links |
78
+ | `GET` | `/api/hippox/links?sourceObjectType=assets` | List draft + simulated + approved links |
53
79
  | `POST` | `/api/hippox/links` | Create draft link |
80
+ | `GET` | `/api/hippox/join-discovery?sourceObjectType=…&targetObjectType=…` | Rank join fields and recommend default pair |
81
+ | `POST` | `/api/hippox/join-discovery` | Same as GET with body parameters |
82
+ | `POST` | `/api/hippox/infer-links` | Fuzzy-map joins across object types (`@x12i/helpers` ≥ 2.0) |
83
+ | `POST` | `/api/hippox/links/from-relation-candidate` | Create Hippox draft from schema relation candidate |
54
84
  | `POST` | `/api/hippox/links/simulate` | Simulate unsaved definition |
55
85
  | `POST` | `/api/hippox/links/:id/simulate` | Simulate + persist summary |
56
86
  | `POST` | `/api/hippox/links/:id/approve` | Approve simulated link |
57
- | `POST` | `/api/hippox/context/resolve` | Resolve runtime context |
87
+ | `POST` | `/api/hippox/context/resolve` | Resolve runtime context from approved links |
88
+
89
+ ### Join discovery response (summary)
90
+
91
+ Returns ranked `sourceFields`, `targetFields`, `joinCandidates`, and `recommendedJoin` for UI dropdowns. Seeds from Memorix schema relations and previously approved Hippox links. Discovery is ephemeral (optional in-memory cache); only approved links persist.
58
92
 
59
93
  ## Programmatic usage
60
94
 
@@ -65,11 +99,19 @@ import { HippoxService } from '@x12i/memorix-hippox';
65
99
  const { client } = await createMemorixRetrievalStackFromEnv();
66
100
  const hippox = await HippoxService.create({ retrieval: client });
67
101
 
102
+ const discovery = await hippox.discoverJoinCandidates({
103
+ sourceObjectType: 'assets',
104
+ targetObjectType: 'subnets',
105
+ });
106
+
68
107
  const draft = await hippox.createDraftLink({
69
108
  sourceObjectType: 'assets',
70
109
  targetObjectType: 'subnets',
71
110
  direction: 'downstream',
72
- join: [{ sourcePath: 'data.subnetId', targetPath: 'data.id' }],
111
+ join: [discovery.recommendedJoin ?? {
112
+ sourcePath: 'data.subnetId',
113
+ targetPath: 'data.id',
114
+ }],
73
115
  retrieval: { type: 'record', outputMode: 'data' },
74
116
  });
75
117
 
@@ -78,7 +120,7 @@ await hippox.approveLink(draft.id);
78
120
 
79
121
  const resolved = await hippox.resolveContextInput({
80
122
  sourceObjectType: 'assets',
81
- sourceRecordId: 'asset-123',
123
+ sourceRecordId: 'entity:asset:10.100.18.64',
82
124
  linkIds: [draft.id],
83
125
  });
84
126
  ```
@@ -89,8 +131,65 @@ Use `resolveMixedContext()` to resolve Hippox links and legacy `JobContextLink`
89
131
 
90
132
  ## Retrieval types
91
133
 
92
- - **record** — single best match (default latest `data.scopedAt`)
134
+ - **record** — single best match (default latest `data.scopedAt` or `lifecycle.capturedAt`)
93
135
  - **list** — bounded array (mandatory limit)
94
136
  - **aggregate** — flat per-property value counts
95
137
 
96
138
  Output modes: `data` (default), `record`, `dataWithRecordId`.
139
+
140
+ ## Relationship to other Memorix layers
141
+
142
+ | Layer | Hippox role |
143
+ |-------|-------------|
144
+ | `sourceFacts.resolver.component: "memorix-hippox"` | value resolution rules (enum/lookup) — separate from context links |
145
+ | `index.recordLinks` | schema-declared indexed relations |
146
+ | `associatedData` | readable materialized join output on snapshots |
147
+ | `jobMemory.context` | runtime output of `context/resolve` |
148
+
149
+ ## Fuzzy mapping pipeline (`@x12i/helpers` ≥ 2.0)
150
+
151
+ `@x12i/helpers@2.0.0` ships **record key analysis** at `@x12i/helpers/record-key-analysis`. Hippox orchestrates it via **`POST /api/hippox/infer-links`**.
152
+
153
+ This complements **join-discovery** (named object types, schema seeds, value overlap ranking). Fuzzy mapping is the cold-start path; join-discovery refines once types and collections are registered.
154
+
155
+ ### Prerequisites
156
+
157
+ - Runtime access to collection samples (Mongo via Hippox collection resolver).
158
+ - Optional peer **`@x12i/helpers@^2.0.0`** (returns HTTP 501 if missing when calling infer-links).
159
+
160
+ ### API
161
+
162
+ ```http
163
+ POST /api/hippox/infer-links
164
+ { "objectTypes": ["assets", "subnets"], "sampleLimit": 10000 }
165
+ ```
166
+
167
+ Returns `collectionProfiles` (PRIMARY / FOREIGN / ENUM tags) and ranked `inferredLinks` with inclusion ratios.
168
+
169
+ ### Programmatic usage
170
+
171
+ ```ts
172
+ const inference = await hippox.inferLinks({
173
+ objectTypes: ['assets', 'subnets', 'vulnerabilities'],
174
+ });
175
+ for (const link of inference.inferredLinks) {
176
+ await hippox.createDraftLink({
177
+ sourceObjectType: link.sourceObjectType,
178
+ targetObjectType: link.targetObjectType,
179
+ direction: 'downstream',
180
+ join: [{ sourcePath: link.sourcePath, targetPath: link.targetPath }],
181
+ retrieval: { type: 'record', outputMode: 'data' },
182
+ });
183
+ }
184
+ ```
185
+
186
+ ### Schema relation bridge
187
+
188
+ ```http
189
+ POST /api/hippox/links/from-relation-candidate
190
+ POST /api/relationships/:sourceEntity/:relationKey/hippox-draft # schema-api operational wrapper
191
+ ```
192
+
193
+ Converts a schema `RelationCandidate` or declared relation into a Hippox draft link.
194
+
195
+ See [memorix-format.md §13.4](../docs/memorix-format.md) and [memorix-fomat-additions.md §K.4](../docs/memorix-fomat-additions.md).
@@ -1 +1 @@
1
- {"version":3,"file":"collection-resolver.d.ts","sourceRoot":"","sources":["../src/collection-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAQtE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAmC9D,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,sBAAsB,EACjC,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,2BAA2B,CAAC,CAYtC;AASD,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,2BAA2B,EACpC,MAAM,GAAE;IACN,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1B,GACL,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAiBpC;AAED,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,2BAA2B,EACpC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,CASjB;AA6BD,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,sBAAsB,EACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACpF,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAsBlC"}
1
+ {"version":3,"file":"collection-resolver.d.ts","sourceRoot":"","sources":["../src/collection-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAQtE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAmC9D,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,sBAAsB,EACjC,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,2BAA2B,CAAC,CAYtC;AASD,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,2BAA2B,EACpC,MAAM,GAAE;IACN,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1B,GACL,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAiBpC;AAED,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,2BAA2B,EACpC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,CASjB;AA6BD,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,sBAAsB,EACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACpF,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA6BlC"}
@@ -109,7 +109,14 @@ export async function loadSourceRecord(retrieval, objectType, params) {
109
109
  binding: entityBinding,
110
110
  contentType: binding.contentType,
111
111
  query: {
112
- $or: [{ _id: recordId }, { recordId }, { entityId: recordId }, { eventId: recordId }],
112
+ $or: [
113
+ { _id: recordId },
114
+ { recordId },
115
+ { entityId: recordId },
116
+ { eventId: recordId },
117
+ { 'identity.recordId': recordId },
118
+ { 'identity.targetId': recordId },
119
+ ],
113
120
  },
114
121
  limit: 1,
115
122
  });
@@ -1 +1 @@
1
- {"version":3,"file":"collection-resolver.js","sourceRoot":"","sources":["../src/collection-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collection-resolver.js","sourceRoot":"","sources":["../src/collection-resolver.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -4,6 +4,16 @@ declare const DEFAULT_HIPPOX_COLLECTION = "context-links";
4
4
  declare const DEFAULT_SIMULATION_LIMIT = 1000;
5
5
  declare const DEFAULT_SIMULATION_EXAMPLES_LIMIT = 25;
6
6
  declare const DEFAULT_CONTEXT_LIST_LIMIT = 25;
7
+ declare const DEFAULT_DISCOVERY_SAMPLE_LIMIT = 1000;
8
+ declare const DEFAULT_DISCOVERY_DISTINCT_CAP = 500;
9
+ declare const DEFAULT_DISCOVERY_MAX_PAIRS = 200;
10
+ declare const DEFAULT_DISCOVERY_MIN_COVERAGE = 0.05;
11
+ declare const DEFAULT_DISCOVERY_MIN_PAIR_SCORE = 0.15;
12
+ declare const DEFAULT_DISCOVERY_CACHE_TTL_MS = 300000;
13
+ declare const DEFAULT_DISCOVERY_MAX_CANDIDATES = 50;
14
+ declare const DEFAULT_INFER_SAMPLE_LIMIT = 10000;
15
+ declare const DEFAULT_INFER_MIN_INCLUSION_RATIO = 0.95;
16
+ declare const DEFAULT_INFER_CANDIDATE_CONFIDENCE = 40;
7
17
  export declare function loadHippoxConfig(processEnv?: NodeJS.ProcessEnv): HippoxConfig;
8
- export { DEFAULT_HIPPOX_DB, DEFAULT_HIPPOX_COLLECTION, DEFAULT_SIMULATION_LIMIT, DEFAULT_SIMULATION_EXAMPLES_LIMIT, DEFAULT_CONTEXT_LIST_LIMIT, };
18
+ export { DEFAULT_HIPPOX_DB, DEFAULT_HIPPOX_COLLECTION, DEFAULT_SIMULATION_LIMIT, DEFAULT_SIMULATION_EXAMPLES_LIMIT, DEFAULT_CONTEXT_LIST_LIMIT, DEFAULT_DISCOVERY_SAMPLE_LIMIT, DEFAULT_DISCOVERY_DISTINCT_CAP, DEFAULT_DISCOVERY_MAX_PAIRS, DEFAULT_DISCOVERY_MIN_COVERAGE, DEFAULT_DISCOVERY_MIN_PAIR_SCORE, DEFAULT_DISCOVERY_CACHE_TTL_MS, DEFAULT_DISCOVERY_MAX_CANDIDATES, DEFAULT_INFER_SAMPLE_LIMIT, DEFAULT_INFER_MIN_INCLUSION_RATIO, DEFAULT_INFER_CANDIDATE_CONFIDENCE, };
9
19
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,QAAA,MAAM,iBAAiB,mBAAmB,CAAC;AAC3C,QAAA,MAAM,yBAAyB,kBAAkB,CAAC;AAClD,QAAA,MAAM,wBAAwB,OAAO,CAAC;AACtC,QAAA,MAAM,iCAAiC,KAAK,CAAC;AAC7C,QAAA,MAAM,0BAA0B,KAAK,CAAC;AAStC,wBAAgB,gBAAgB,CAAC,UAAU,GAAE,MAAM,CAAC,UAAwB,GAAG,YAAY,CAW1F;AAED,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,iCAAiC,EACjC,0BAA0B,GAC3B,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,QAAA,MAAM,iBAAiB,mBAAmB,CAAC;AAC3C,QAAA,MAAM,yBAAyB,kBAAkB,CAAC;AAClD,QAAA,MAAM,wBAAwB,OAAO,CAAC;AACtC,QAAA,MAAM,iCAAiC,KAAK,CAAC;AAC7C,QAAA,MAAM,0BAA0B,KAAK,CAAC;AACtC,QAAA,MAAM,8BAA8B,OAAO,CAAC;AAC5C,QAAA,MAAM,8BAA8B,MAAM,CAAC;AAC3C,QAAA,MAAM,2BAA2B,MAAM,CAAC;AACxC,QAAA,MAAM,8BAA8B,OAAO,CAAC;AAC5C,QAAA,MAAM,gCAAgC,OAAO,CAAC;AAC9C,QAAA,MAAM,8BAA8B,SAAU,CAAC;AAC/C,QAAA,MAAM,gCAAgC,KAAK,CAAC;AAC5C,QAAA,MAAM,0BAA0B,QAAS,CAAC;AAC1C,QAAA,MAAM,iCAAiC,OAAO,CAAC;AAC/C,QAAA,MAAM,kCAAkC,KAAK,CAAC;AAgB9C,wBAAgB,gBAAgB,CAAC,UAAU,GAAE,MAAM,CAAC,UAAwB,GAAG,YAAY,CAmD1F;AAED,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,iCAAiC,EACjC,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAC9B,2BAA2B,EAC3B,8BAA8B,EAC9B,gCAAgC,EAChC,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,EAC1B,iCAAiC,EACjC,kCAAkC,GACnC,CAAC"}
package/dist/config.js CHANGED
@@ -3,6 +3,16 @@ const DEFAULT_HIPPOX_COLLECTION = 'context-links';
3
3
  const DEFAULT_SIMULATION_LIMIT = 1000;
4
4
  const DEFAULT_SIMULATION_EXAMPLES_LIMIT = 25;
5
5
  const DEFAULT_CONTEXT_LIST_LIMIT = 25;
6
+ const DEFAULT_DISCOVERY_SAMPLE_LIMIT = 1000;
7
+ const DEFAULT_DISCOVERY_DISTINCT_CAP = 500;
8
+ const DEFAULT_DISCOVERY_MAX_PAIRS = 200;
9
+ const DEFAULT_DISCOVERY_MIN_COVERAGE = 0.05;
10
+ const DEFAULT_DISCOVERY_MIN_PAIR_SCORE = 0.15;
11
+ const DEFAULT_DISCOVERY_CACHE_TTL_MS = 300_000;
12
+ const DEFAULT_DISCOVERY_MAX_CANDIDATES = 50;
13
+ const DEFAULT_INFER_SAMPLE_LIMIT = 10_000;
14
+ const DEFAULT_INFER_MIN_INCLUSION_RATIO = 0.95;
15
+ const DEFAULT_INFER_CANDIDATE_CONFIDENCE = 40;
6
16
  function parsePositiveInt(raw, fallback) {
7
17
  if (!raw?.trim())
8
18
  return fallback;
@@ -11,6 +21,14 @@ function parsePositiveInt(raw, fallback) {
11
21
  return fallback;
12
22
  return Math.floor(n);
13
23
  }
24
+ function parseNonNegativeNumber(raw, fallback) {
25
+ if (!raw?.trim())
26
+ return fallback;
27
+ const n = Number(raw);
28
+ if (!Number.isFinite(n) || n < 0)
29
+ return fallback;
30
+ return n;
31
+ }
14
32
  export function loadHippoxConfig(processEnv = process.env) {
15
33
  return {
16
34
  dbName: processEnv.MEMORIX_HIPPOX_DB?.trim() || DEFAULT_HIPPOX_DB,
@@ -18,7 +36,17 @@ export function loadHippoxConfig(processEnv = process.env) {
18
36
  simulationLimit: parsePositiveInt(processEnv.MEMORIX_HIPPOX_SIMULATION_LIMIT, DEFAULT_SIMULATION_LIMIT),
19
37
  simulationExamplesLimit: parsePositiveInt(processEnv.MEMORIX_HIPPOX_SIMULATION_EXAMPLES_LIMIT, DEFAULT_SIMULATION_EXAMPLES_LIMIT),
20
38
  contextListLimit: parsePositiveInt(processEnv.MEMORIX_CONTEXT_LIST_LIMIT, DEFAULT_CONTEXT_LIST_LIMIT),
39
+ discoverySampleLimit: parsePositiveInt(processEnv.MEMORIX_HIPPOX_DISCOVERY_SAMPLE_LIMIT, DEFAULT_DISCOVERY_SAMPLE_LIMIT),
40
+ discoveryDistinctCap: parsePositiveInt(processEnv.MEMORIX_HIPPOX_DISCOVERY_DISTINCT_CAP, DEFAULT_DISCOVERY_DISTINCT_CAP),
41
+ discoveryMaxPairs: parsePositiveInt(processEnv.MEMORIX_HIPPOX_DISCOVERY_MAX_PAIRS, DEFAULT_DISCOVERY_MAX_PAIRS),
42
+ discoveryMinCoverage: parseNonNegativeNumber(processEnv.MEMORIX_HIPPOX_DISCOVERY_MIN_COVERAGE, DEFAULT_DISCOVERY_MIN_COVERAGE),
43
+ discoveryMinPairScore: parseNonNegativeNumber(processEnv.MEMORIX_HIPPOX_DISCOVERY_MIN_PAIR_SCORE, DEFAULT_DISCOVERY_MIN_PAIR_SCORE),
44
+ discoveryCacheTtlMs: parsePositiveInt(processEnv.MEMORIX_HIPPOX_DISCOVERY_CACHE_TTL_MS, DEFAULT_DISCOVERY_CACHE_TTL_MS),
45
+ discoveryMaxCandidates: parsePositiveInt(processEnv.MEMORIX_HIPPOX_DISCOVERY_MAX_CANDIDATES, DEFAULT_DISCOVERY_MAX_CANDIDATES),
46
+ inferSampleLimit: parsePositiveInt(processEnv.MEMORIX_HIPPOX_INFER_SAMPLE_LIMIT, DEFAULT_INFER_SAMPLE_LIMIT),
47
+ inferMinInclusionRatio: parseNonNegativeNumber(processEnv.MEMORIX_HIPPOX_INFER_MIN_INCLUSION_RATIO, DEFAULT_INFER_MIN_INCLUSION_RATIO),
48
+ inferCandidateConfidence: parsePositiveInt(processEnv.MEMORIX_HIPPOX_INFER_CANDIDATE_CONFIDENCE, DEFAULT_INFER_CANDIDATE_CONFIDENCE),
21
49
  };
22
50
  }
23
- export { DEFAULT_HIPPOX_DB, DEFAULT_HIPPOX_COLLECTION, DEFAULT_SIMULATION_LIMIT, DEFAULT_SIMULATION_EXAMPLES_LIMIT, DEFAULT_CONTEXT_LIST_LIMIT, };
51
+ export { DEFAULT_HIPPOX_DB, DEFAULT_HIPPOX_COLLECTION, DEFAULT_SIMULATION_LIMIT, DEFAULT_SIMULATION_EXAMPLES_LIMIT, DEFAULT_CONTEXT_LIST_LIMIT, DEFAULT_DISCOVERY_SAMPLE_LIMIT, DEFAULT_DISCOVERY_DISTINCT_CAP, DEFAULT_DISCOVERY_MAX_PAIRS, DEFAULT_DISCOVERY_MIN_COVERAGE, DEFAULT_DISCOVERY_MIN_PAIR_SCORE, DEFAULT_DISCOVERY_CACHE_TTL_MS, DEFAULT_DISCOVERY_MAX_CANDIDATES, DEFAULT_INFER_SAMPLE_LIMIT, DEFAULT_INFER_MIN_INCLUSION_RATIO, DEFAULT_INFER_CANDIDATE_CONFIDENCE, };
24
52
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAC3C,MAAM,yBAAyB,GAAG,eAAe,CAAC;AAClD,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,iCAAiC,GAAG,EAAE,CAAC;AAC7C,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAEtC,SAAS,gBAAgB,CAAC,GAAuB,EAAE,QAAgB;IACjE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,aAAgC,OAAO,CAAC,GAAG;IAC1E,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,iBAAiB;QACjE,cAAc,EAAE,UAAU,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,yBAAyB;QACzF,eAAe,EAAE,gBAAgB,CAAC,UAAU,CAAC,+BAA+B,EAAE,wBAAwB,CAAC;QACvG,uBAAuB,EAAE,gBAAgB,CACvC,UAAU,CAAC,wCAAwC,EACnD,iCAAiC,CAClC;QACD,gBAAgB,EAAE,gBAAgB,CAAC,UAAU,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;KACtG,CAAC;AACJ,CAAC;AAED,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,iCAAiC,EACjC,0BAA0B,GAC3B,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAC3C,MAAM,yBAAyB,GAAG,eAAe,CAAC;AAClD,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,iCAAiC,GAAG,EAAE,CAAC;AAC7C,MAAM,0BAA0B,GAAG,EAAE,CAAC;AACtC,MAAM,8BAA8B,GAAG,IAAI,CAAC;AAC5C,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAC3C,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,8BAA8B,GAAG,IAAI,CAAC;AAC5C,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAC9C,MAAM,8BAA8B,GAAG,OAAO,CAAC;AAC/C,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAC5C,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,MAAM,iCAAiC,GAAG,IAAI,CAAC;AAC/C,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAE9C,SAAS,gBAAgB,CAAC,GAAuB,EAAE,QAAgB;IACjE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAuB,EAAE,QAAgB;IACvE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,aAAgC,OAAO,CAAC,GAAG;IAC1E,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,iBAAiB;QACjE,cAAc,EAAE,UAAU,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,yBAAyB;QACzF,eAAe,EAAE,gBAAgB,CAAC,UAAU,CAAC,+BAA+B,EAAE,wBAAwB,CAAC;QACvG,uBAAuB,EAAE,gBAAgB,CACvC,UAAU,CAAC,wCAAwC,EACnD,iCAAiC,CAClC;QACD,gBAAgB,EAAE,gBAAgB,CAAC,UAAU,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;QACrG,oBAAoB,EAAE,gBAAgB,CACpC,UAAU,CAAC,qCAAqC,EAChD,8BAA8B,CAC/B;QACD,oBAAoB,EAAE,gBAAgB,CACpC,UAAU,CAAC,qCAAqC,EAChD,8BAA8B,CAC/B;QACD,iBAAiB,EAAE,gBAAgB,CACjC,UAAU,CAAC,kCAAkC,EAC7C,2BAA2B,CAC5B;QACD,oBAAoB,EAAE,sBAAsB,CAC1C,UAAU,CAAC,qCAAqC,EAChD,8BAA8B,CAC/B;QACD,qBAAqB,EAAE,sBAAsB,CAC3C,UAAU,CAAC,uCAAuC,EAClD,gCAAgC,CACjC;QACD,mBAAmB,EAAE,gBAAgB,CACnC,UAAU,CAAC,qCAAqC,EAChD,8BAA8B,CAC/B;QACD,sBAAsB,EAAE,gBAAgB,CACtC,UAAU,CAAC,uCAAuC,EAClD,gCAAgC,CACjC;QACD,gBAAgB,EAAE,gBAAgB,CAChC,UAAU,CAAC,iCAAiC,EAC5C,0BAA0B,CAC3B;QACD,sBAAsB,EAAE,sBAAsB,CAC5C,UAAU,CAAC,wCAAwC,EACnD,iCAAiC,CAClC;QACD,wBAAwB,EAAE,gBAAgB,CACxC,UAAU,CAAC,yCAAyC,EACpD,kCAAkC,CACnC;KACF,CAAC;AACJ,CAAC;AAED,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,iCAAiC,EACjC,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAC9B,2BAA2B,EAC3B,8BAA8B,EAC9B,gCAAgC,EAChC,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,EAC1B,iCAAiC,EACjC,kCAAkC,GACnC,CAAC"}
@@ -0,0 +1,31 @@
1
+ export type RecordKeyAnalysisModule = {
2
+ analyzeSingleRecordKeys: (record: Record<string, unknown>, options?: {
3
+ threshold?: number;
4
+ }) => Array<{
5
+ property: string;
6
+ confidence: number;
7
+ signals?: string[];
8
+ }>;
9
+ analyzeCollectionKeys: (collection: Record<string, unknown>[], candidateProperties: string[], options?: Record<string, unknown>) => Array<{
10
+ property: string;
11
+ classification: 'PRIMARY' | 'FOREIGN' | 'FOREIGN_OR_DIRTY_PRIMARY' | 'ENUM' | 'NONE';
12
+ uniqueCount: number;
13
+ uniquenessRatio: number;
14
+ nullRatio: number;
15
+ confidence: number;
16
+ }>;
17
+ mapCrossCollectionRelationships: (sourceCollection: Record<string, unknown>[], sourceForeignKey: string, targetCollectionsMap: Record<string, {
18
+ primaryKeys?: string[];
19
+ records?: Record<string, unknown>[];
20
+ }>, options?: {
21
+ minInclusionRatio?: number;
22
+ }) => Array<{
23
+ targetCollection: string;
24
+ targetProperty: string;
25
+ inclusionRatio: number;
26
+ confidence: number;
27
+ }>;
28
+ };
29
+ export declare function loadRecordKeyAnalysis(): RecordKeyAnalysisModule;
30
+ export declare function clearRecordKeyAnalysisCache(): void;
31
+ //# sourceMappingURL=helpers-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers-loader.d.ts","sourceRoot":"","sources":["../src/helpers-loader.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,uBAAuB,GAAG;IACpC,uBAAuB,EAAE,CACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAC7B,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACzE,qBAAqB,EAAE,CACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACrC,mBAAmB,EAAE,MAAM,EAAE,EAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,KAAK,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,SAAS,GAAG,SAAS,GAAG,0BAA0B,GAAG,MAAM,GAAG,MAAM,CAAC;QACrF,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,+BAA+B,EAAE,CAC/B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC3C,gBAAgB,EAAE,MAAM,EACxB,oBAAoB,EAAE,MAAM,CAC1B,MAAM,EACN;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAAE,CAChE,EACD,OAAO,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,KACrC,KAAK,CAAC;QACT,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ,CAAC;AAIF,wBAAgB,qBAAqB,IAAI,uBAAuB,CAY/D;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
@@ -0,0 +1,20 @@
1
+ import { createRequire } from 'node:module';
2
+ const require = createRequire(import.meta.url);
3
+ let cachedModule = null;
4
+ export function loadRecordKeyAnalysis() {
5
+ if (cachedModule)
6
+ return cachedModule;
7
+ try {
8
+ const mod = require('@x12i/helpers/record-key-analysis');
9
+ cachedModule = mod;
10
+ return mod;
11
+ }
12
+ catch {
13
+ throw new Error('Fuzzy link inference requires @x12i/helpers@^2.0.0 (record-key-analysis export). '
14
+ + 'Install it alongside @x12i/memorix-hippox.');
15
+ }
16
+ }
17
+ export function clearRecordKeyAnalysisCache() {
18
+ cachedModule = null;
19
+ }
20
+ //# sourceMappingURL=helpers-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers-loader.js","sourceRoot":"","sources":["../src/helpers-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAmC/C,IAAI,YAAY,GAAmC,IAAI,CAAC;AAExD,MAAM,UAAU,qBAAqB;IACnC,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,mCAAmC,CAA4B,CAAC;QACpF,YAAY,GAAG,GAAG,CAAC;QACnB,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,mFAAmF;cACjF,4CAA4C,CAC/C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-routes.d.ts","sourceRoot":"","sources":["../../src/http/register-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,aAAa,EAA2B,MAAM,eAAe,CAAC;AAGvE,MAAM,MAAM,cAAc,GAAG;IAE3B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,OAAO,CAAC;IACjE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,OAAO,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC;AAWF,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,sBAAsB,EACjC,OAAO,GAAE,2BAAgC,GACxC,IAAI,CAkFN"}
1
+ {"version":3,"file":"register-routes.d.ts","sourceRoot":"","sources":["../../src/http/register-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,aAAa,EAA2B,MAAM,eAAe,CAAC;AAGvE,MAAM,MAAM,cAAc,GAAG;IAE3B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,OAAO,CAAC;IACjE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,OAAO,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC;AAeF,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,sBAAsB,EACjC,OAAO,GAAE,2BAAgC,GACxC,IAAI,CAiKN"}
@@ -4,7 +4,11 @@ function sendError(reply, err, fallbackStatus = 503) {
4
4
  return reply.code(400).send({ error: err.message });
5
5
  }
6
6
  const message = err instanceof Error ? err.message : String(err);
7
- const status = message.includes('not found') ? 404 : fallbackStatus;
7
+ const status = message.includes('not found')
8
+ ? 404
9
+ : message.includes('@x12i/helpers')
10
+ ? 501
11
+ : fallbackStatus;
8
12
  return reply.code(status).send({ error: message });
9
13
  }
10
14
  export function registerHippoxRoutes(app, retrieval, options = {}) {
@@ -86,5 +90,73 @@ export function registerHippoxRoutes(app, retrieval, options = {}) {
86
90
  return sendError(reply, err, 400);
87
91
  }
88
92
  });
93
+ const handleJoinDiscovery = async (input, reply) => {
94
+ if (!input.sourceObjectType?.trim() || !input.targetObjectType?.trim()) {
95
+ return reply.code(400).send({ error: 'sourceObjectType and targetObjectType are required' });
96
+ }
97
+ try {
98
+ const service = await getService();
99
+ return await service.discoverJoinCandidates({
100
+ sourceObjectType: input.sourceObjectType.trim(),
101
+ targetObjectType: input.targetObjectType.trim(),
102
+ sourceContentType: input.sourceContentType?.trim() || undefined,
103
+ targetContentType: input.targetContentType?.trim() || undefined,
104
+ direction: input.direction,
105
+ sampleLimit: input.sampleLimit,
106
+ });
107
+ }
108
+ catch (err) {
109
+ return sendError(reply, err);
110
+ }
111
+ };
112
+ app.get(`${base}/join-discovery`, async (req, reply) => {
113
+ const q = req.query;
114
+ const rawSampleLimit = q.sampleLimit?.trim();
115
+ const parsedSampleLimit = rawSampleLimit ? Number(rawSampleLimit) : undefined;
116
+ return handleJoinDiscovery({
117
+ sourceObjectType: q.sourceObjectType ?? '',
118
+ targetObjectType: q.targetObjectType ?? '',
119
+ sourceContentType: q.sourceContentType,
120
+ targetContentType: q.targetContentType,
121
+ direction: q.direction,
122
+ sampleLimit: parsedSampleLimit !== undefined && Number.isFinite(parsedSampleLimit)
123
+ ? parsedSampleLimit
124
+ : undefined,
125
+ }, reply);
126
+ });
127
+ app.post(`${base}/join-discovery`, async (req, reply) => {
128
+ const body = (req.body ?? {});
129
+ return handleJoinDiscovery({
130
+ sourceObjectType: body.sourceObjectType ?? '',
131
+ targetObjectType: body.targetObjectType ?? '',
132
+ sourceContentType: body.sourceContentType,
133
+ targetContentType: body.targetContentType,
134
+ direction: body.direction,
135
+ sampleLimit: body.sampleLimit,
136
+ }, reply);
137
+ });
138
+ app.post(`${base}/infer-links`, async (req, reply) => {
139
+ const body = (req.body ?? {});
140
+ if (!Array.isArray(body.objectTypes) || body.objectTypes.length < 2) {
141
+ return reply.code(400).send({ error: 'objectTypes must include at least two object types' });
142
+ }
143
+ try {
144
+ const service = await getService();
145
+ return await service.inferLinks(body);
146
+ }
147
+ catch (err) {
148
+ return sendError(reply, err, 400);
149
+ }
150
+ });
151
+ app.post(`${base}/links/from-relation-candidate`, async (req, reply) => {
152
+ const body = (req.body ?? {});
153
+ try {
154
+ const service = await getService();
155
+ return await service.createDraftFromRelationCandidate(body);
156
+ }
157
+ catch (err) {
158
+ return sendError(reply, err, 400);
159
+ }
160
+ });
89
161
  }
90
162
  //# sourceMappingURL=register-routes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-routes.js","sourceRoot":"","sources":["../../src/http/register-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-routes.js","sourceRoot":"","sources":["../../src/http/register-routes.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,15 @@
1
- export type { LinkDirection, LinkStatus, JoinOperator, FilterOperator, OutputMode, RetrievalType, JoinMapping, FixedFilter, SortSpec, RecordRetrieval, ListRetrieval, AggregateRetrieval, ContextLinkRetrieval, ContextLink, ContextLinkInput, IndexRecommendation, SimulationWarning, PropertyMatchQuality, SimulationExampleMatch, SimulationExampleMiss, SimulationSummary, ResolveContextInput, ResolveContextResult, HippoxConfig, ObjectTypeCollectionBinding, } from './types.js';
2
- export { loadHippoxConfig, DEFAULT_HIPPOX_DB, DEFAULT_HIPPOX_COLLECTION, DEFAULT_SIMULATION_LIMIT, DEFAULT_SIMULATION_EXAMPLES_LIMIT, DEFAULT_CONTEXT_LIST_LIMIT, } from './config.js';
3
- export { readPath, readRecordId, isDateLike, coerceDateValue, sortSpecsToMongo, extractDataPayload, formatOutputRecord, } from './paths.js';
1
+ export type { LinkDirection, LinkStatus, JoinOperator, FilterOperator, OutputMode, RetrievalType, JoinMapping, FixedFilter, SortSpec, RecordRetrieval, ListRetrieval, AggregateRetrieval, ContextLinkRetrieval, ContextLink, ContextLinkInput, IndexRecommendation, SimulationWarning, PropertyMatchQuality, SimulationExampleMatch, SimulationExampleMiss, SimulationSummary, ResolveContextInput, ResolveContextResult, HippoxConfig, ObjectTypeCollectionBinding, InferredFieldType, JoinDiscoveryField, JoinDiscoveryCandidateSignals, JoinDiscoveryCandidate, JoinDiscoveryRecommendedJoin, JoinDiscoveryWarning, JoinDiscoveryResult, JoinDiscoveryInput, CollectionKeyProfile, InferredContextLink, InferLinksInput, InferLinksResult, RelationCandidateBridgeInput, } from './types.js';
2
+ export { loadHippoxConfig, DEFAULT_HIPPOX_DB, DEFAULT_HIPPOX_COLLECTION, DEFAULT_SIMULATION_LIMIT, DEFAULT_SIMULATION_EXAMPLES_LIMIT, DEFAULT_CONTEXT_LIST_LIMIT, DEFAULT_DISCOVERY_SAMPLE_LIMIT, DEFAULT_DISCOVERY_DISTINCT_CAP, DEFAULT_DISCOVERY_MAX_PAIRS, DEFAULT_DISCOVERY_MIN_COVERAGE, DEFAULT_DISCOVERY_MIN_PAIR_SCORE, DEFAULT_DISCOVERY_CACHE_TTL_MS, DEFAULT_DISCOVERY_MAX_CANDIDATES, DEFAULT_INFER_SAMPLE_LIMIT, DEFAULT_INFER_MIN_INCLUSION_RATIO, DEFAULT_INFER_CANDIDATE_CONFIDENCE, } from './config.js';
3
+ export { readPath, readRecordId, readObjectType, isDateLike, coerceDateValue, sortSpecsToMongo, extractDataPayload, formatOutputRecord, } from './paths.js';
4
4
  export { compileFixedFilter, compileFixedFilters, compileJoinClause, buildTargetQueryFromLink, buildFixedOnlyQuery, } from './filters.js';
5
5
  export { validateContextLinkInput, defaultRecordRetrieval, defaultListRetrieval, contextKeyForLink, detectContextKeyCollisions, HippoxValidationError, } from './validation.js';
6
6
  export { resolveObjectTypeCollection, readObjectTypeDocuments, countObjectTypeDocuments, loadSourceRecord, } from './collection-resolver.js';
7
7
  export { HippoxStore, createHippoxStore } from './store.js';
8
8
  export { simulateContextLink, type SimulateContextLinkOptions } from './simulate.js';
9
+ export { discoverJoinCandidates, clearJoinDiscoveryCache, computeValueHitRate, computeNameSimilarity, computePairScore, sourceNameHintScore, targetNameHintScore, isScalarJoinable, normalizeScalarValue, classifyValue, type DiscoverJoinCandidatesOptions, } from './join-discovery.js';
10
+ export { inferLinksForObjectTypes, type InferLinksOptions, } from './infer-links.js';
11
+ export { flattenRecordForKeyAnalysis, flattenSampleForKeyAnalysis, memorixPathForLeaf, type FlattenedForHelpers, } from './record-flatten.js';
12
+ export { loadRecordKeyAnalysis, clearRecordKeyAnalysisCache, type RecordKeyAnalysisModule, } from './helpers-loader.js';
9
13
  export { resolveContext, type ResolveContextOptions } from './resolve.js';
10
14
  export { resolveMixedContext, hippoxLinkFromRelationCandidate, type ResolveMixedContextInput, type ResolveMixedContextOptions, } from './legacy-bridge.js';
11
15
  export { recommendIndexesForLink } from './index-recommendations.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,QAAQ,EACR,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,iCAAiC,EACjC,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,QAAQ,EACR,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,2BAA2B,EAC3B,iBAAiB,EACjB,kBAAkB,EAClB,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,iCAAiC,EACjC,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAC9B,2BAA2B,EAC3B,8BAA8B,EAC9B,gCAAgC,EAChC,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,EAC1B,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,KAAK,6BAA6B,GACnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,EACxB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,kBAAkB,EAClB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,14 @@
1
- export { loadHippoxConfig, DEFAULT_HIPPOX_DB, DEFAULT_HIPPOX_COLLECTION, DEFAULT_SIMULATION_LIMIT, DEFAULT_SIMULATION_EXAMPLES_LIMIT, DEFAULT_CONTEXT_LIST_LIMIT, } from './config.js';
2
- export { readPath, readRecordId, isDateLike, coerceDateValue, sortSpecsToMongo, extractDataPayload, formatOutputRecord, } from './paths.js';
1
+ export { loadHippoxConfig, DEFAULT_HIPPOX_DB, DEFAULT_HIPPOX_COLLECTION, DEFAULT_SIMULATION_LIMIT, DEFAULT_SIMULATION_EXAMPLES_LIMIT, DEFAULT_CONTEXT_LIST_LIMIT, DEFAULT_DISCOVERY_SAMPLE_LIMIT, DEFAULT_DISCOVERY_DISTINCT_CAP, DEFAULT_DISCOVERY_MAX_PAIRS, DEFAULT_DISCOVERY_MIN_COVERAGE, DEFAULT_DISCOVERY_MIN_PAIR_SCORE, DEFAULT_DISCOVERY_CACHE_TTL_MS, DEFAULT_DISCOVERY_MAX_CANDIDATES, DEFAULT_INFER_SAMPLE_LIMIT, DEFAULT_INFER_MIN_INCLUSION_RATIO, DEFAULT_INFER_CANDIDATE_CONFIDENCE, } from './config.js';
2
+ export { readPath, readRecordId, readObjectType, isDateLike, coerceDateValue, sortSpecsToMongo, extractDataPayload, formatOutputRecord, } from './paths.js';
3
3
  export { compileFixedFilter, compileFixedFilters, compileJoinClause, buildTargetQueryFromLink, buildFixedOnlyQuery, } from './filters.js';
4
4
  export { validateContextLinkInput, defaultRecordRetrieval, defaultListRetrieval, contextKeyForLink, detectContextKeyCollisions, HippoxValidationError, } from './validation.js';
5
5
  export { resolveObjectTypeCollection, readObjectTypeDocuments, countObjectTypeDocuments, loadSourceRecord, } from './collection-resolver.js';
6
6
  export { HippoxStore, createHippoxStore } from './store.js';
7
7
  export { simulateContextLink } from './simulate.js';
8
+ export { discoverJoinCandidates, clearJoinDiscoveryCache, computeValueHitRate, computeNameSimilarity, computePairScore, sourceNameHintScore, targetNameHintScore, isScalarJoinable, normalizeScalarValue, classifyValue, } from './join-discovery.js';
9
+ export { inferLinksForObjectTypes, } from './infer-links.js';
10
+ export { flattenRecordForKeyAnalysis, flattenSampleForKeyAnalysis, memorixPathForLeaf, } from './record-flatten.js';
11
+ export { loadRecordKeyAnalysis, clearRecordKeyAnalysisCache, } from './helpers-loader.js';
8
12
  export { resolveContext } from './resolve.js';
9
13
  export { resolveMixedContext, hippoxLinkFromRelationCandidate, } from './legacy-bridge.js';
10
14
  export { recommendIndexesForLink } from './index-recommendations.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4BA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,iCAAiC,EACjC,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAmC,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,+BAA+B,GAGhC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAA6B,MAAM,cAAc,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAyD,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAyCA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,iCAAiC,EACjC,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAC9B,2BAA2B,EAC3B,8BAA8B,EAC9B,gCAAgC,EAChC,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,EAC1B,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAmC,MAAM,eAAe,CAAC;AACrF,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GAEd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,GAEzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,kBAAkB,GAEnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAE5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,+BAA+B,GAGhC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAA6B,MAAM,cAAc,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAyD,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { MemorixRetrievalClient } from '@x12i/memorix-retrieval';
2
+ import type { InferLinksInput, InferLinksResult } from './types.js';
3
+ export type InferLinksOptions = {
4
+ retrieval: MemorixRetrievalClient;
5
+ input: InferLinksInput;
6
+ processEnv?: NodeJS.ProcessEnv;
7
+ };
8
+ export declare function inferLinksForObjectTypes(options: InferLinksOptions): Promise<InferLinksResult>;
9
+ //# sourceMappingURL=infer-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer-links.d.ts","sourceRoot":"","sources":["../src/infer-links.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAStE,OAAO,KAAK,EAEV,eAAe,EACf,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,sBAAsB,CAAC;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAChC,CAAC;AAIF,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CA+L3B"}