@fortemi/core 2026.6.9 → 2026.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -126,10 +126,11 @@ Use this subpath for Pagenary-style command palettes, static docs search, and
126
126
  vanilla JavaScript review surfaces. The top-level `@fortemi/core` export remains
127
127
  available for full archive/runtime integrations.
128
128
 
129
- The record contract keeps the existing flat fields for filtering and search:
130
- `facets`, `tags`, `concepts`, `relationships`, and `provenance`. Static
131
- consumers that render metadata tabs can also read optional rich fields from full
132
- records:
129
+ The AIWG index adapter accepts both `aiwg.fortemi.index.export.v1` and
130
+ `aiwg.fortemi.index.export.v2` envelopes. The v1 record contract keeps the
131
+ existing flat fields for filtering and search: `facets`, `tags`, `concepts`,
132
+ `relationships`, and `provenance`. Static consumers that render metadata tabs
133
+ can also read optional rich fields from full records:
133
134
 
134
135
  - `skos_concepts`: concept ids plus labels, definitions, schemes, notation, URIs,
135
136
  alternate labels, and metadata.
@@ -140,10 +141,14 @@ records:
140
141
  - `relationships[*].metadata`: optional relationship labels, confidence,
141
142
  privacy, and structured metadata.
142
143
 
143
- These fields are additive to `aiwg.fortemi.index.record.v1`. Existing consumers
144
- can ignore them and continue querying the flat fields. Chunked indexes with a
145
- projection keep rich metadata in detail records; call `getRecord(id)` before
146
- rendering a metadata panel.
144
+ These fields are additive to `aiwg.fortemi.index.record.v1`. Version 2 records
145
+ can also carry AIWG migration fields such as `search`, `chunks`, `embeddings`,
146
+ `source.origin`, `source.generated`, `source.checksum`, `source.updated_at`,
147
+ `privacy.locality`, and compatibility metadata. Query helpers use v2 `search`
148
+ and `chunks` text when the old top-level `title`/`text` fields are absent.
149
+ Existing consumers can ignore the v2 fields and continue querying the flat
150
+ fields. Chunked indexes with a projection keep rich metadata in detail records;
151
+ call `getRecord(id)` before rendering a metadata panel.
147
152
 
148
153
  Large static indexes can use the chunked browser path instead of downloading one
149
154
  full `aiwg.fortemi.index.export.v1` file. Host a manifest plus deterministic part
@@ -178,6 +183,62 @@ Unfiltered browse requests fetch only the part files intersecting the requested
178
183
  results, but the controller keeps only a bounded part cache and never sets a
179
184
  materialized full export in `getIndex()`.
180
185
 
186
+ AIWG records can use project-specific string types such as `aiwg.skill`,
187
+ `aiwg.agent`, `aiwg.command`, `aiwg.rule`, `aiwg.flow`, `aiwg.bundle`,
188
+ `aiwg.kb.page`, `aiwg.memory.entry`, `aiwg.issue`, `research.ref`, and
189
+ `aiwg.research.profile`. Validation still enforces required record fields, but
190
+ it does not require unknown AIWG, research, KB, memory, issue, or documentation
191
+ domains to collapse into `aiwg.artifact`.
192
+
193
+ For AIWG command-palette parity, opt into discovery ranking instead of the
194
+ default deterministic substring lookup:
195
+
196
+ ```ts
197
+ const ranked = controller.query('address the open issues', {
198
+ searchProfile: 'aiwg-discovery',
199
+ rank: true,
200
+ includeMatches: true,
201
+ })
202
+ ```
203
+
204
+ The discovery profile normalizes hyphen/space variants, strips common stopwords,
205
+ boosts trigger and capability facets, and returns match reasons for UI debugging.
206
+
207
+ Chunked indexes also support graph navigation without loading a full export:
208
+
209
+ ```ts
210
+ const neighbors = await controller.neighbors('aiwg:requirement:search', {
211
+ direction: 'both',
212
+ relationshipType: 'cites',
213
+ relationshipDirection: 'downstream',
214
+ })
215
+
216
+ const graph = await controller.toCommunityGraphChunked()
217
+ ```
218
+
219
+ Relationship edges preserve v2 `source_path`, `target_path`, and
220
+ `direction: 'upstream' | 'downstream' | 'related'` values. Use
221
+ `direction: 'in' | 'out' | 'both'` for graph orientation around a node and
222
+ `relationshipDirection` for AIWG dependency/citation/profile/KB direction
223
+ semantics. When scan parts are projected, relationship traversal scans the parts
224
+ and lazy-loads detail records only when relationships are not present in the
225
+ scan projection.
226
+
227
+ Static semantic search uses an optional sidecar contract:
228
+
229
+ ```ts
230
+ import { queryAiwgHybridIndex } from '@fortemi/core/aiwg-index'
231
+
232
+ const embeddingSet = await fetch('/search/aiwg-index/embeddings.json').then((res) => res.json())
233
+ const queryEmbedding = await hostEmbed('workspace health check')
234
+ const semanticResults = queryAiwgHybridIndex(index, embeddingSet, 'health check', queryEmbedding)
235
+ ```
236
+
237
+ `aiwg.fortemi.embedding.set.v1` records the model, dimensions, granularity
238
+ (`title-summary`, `body`, `chunked-body`, or a project value), source record IDs,
239
+ and per-vector input hashes. Hosts provide query embeddings; `@fortemi/core` does
240
+ not add a model runtime dependency for static AIWG search.
241
+
181
242
  ## What You Get
182
243
 
183
244
  | Surface | Description |
@@ -232,11 +293,11 @@ pnpm add @fortemi/react @fortemi/core react
232
293
 
233
294
  ## Documentation
234
295
 
235
- - [Repository API](https://github.com/Fortemi/fortemi-react/blob/main/docs/api-reference.md#repositories)
236
- - [Integration guide](https://github.com/Fortemi/fortemi-react/blob/main/docs/integration.md)
237
- - [Search guide](https://github.com/Fortemi/fortemi-react/blob/main/docs/search.md)
238
- - [Extending Fortemi](https://github.com/Fortemi/fortemi-react/blob/main/docs/extending.md)
239
- - [Supply-chain controls](https://github.com/Fortemi/fortemi-react/blob/main/docs/security/supply-chain.md)
296
+ - [Repository API](https://github.com/Fortemi/fortemi-react/blob/main/docs/content/api-reference.md#repositories)
297
+ - [Integration guide](https://github.com/Fortemi/fortemi-react/blob/main/docs/content/guides/integration.md)
298
+ - [Search guide](https://github.com/Fortemi/fortemi-react/blob/main/docs/content/guides/search.md)
299
+ - [Extending Fortemi](https://github.com/Fortemi/fortemi-react/blob/main/docs/content/advanced/extending.md)
300
+ - [Supply-chain controls](https://github.com/Fortemi/fortemi-react/blob/main/docs/content/security/supply-chain.md)
240
301
 
241
302
  ## License
242
303
 
@@ -1,16 +1,26 @@
1
- type AiwgFortemiRecordType = 'crm.contact' | 'crm.organization' | 'crm.event' | 'crm.interaction' | 'aiwg.artifact' | 'docs.page';
1
+ type AiwgFortemiKnownRecordType = 'crm.contact' | 'crm.organization' | 'crm.event' | 'crm.interaction' | 'aiwg.artifact' | 'docs.page';
2
+ type AiwgFortemiRecordType = AiwgFortemiKnownRecordType | `aiwg.${string}` | `research.${string}` | `docs.${string}` | string;
3
+ type AiwgFortemiRecordSchemaVersion = 'aiwg.fortemi.index.record.v1' | 'aiwg.fortemi.index.record.v2';
4
+ type AiwgFortemiIndexExportSchemaVersion = 'aiwg.fortemi.index.export.v1' | 'aiwg.fortemi.index.export.v2';
2
5
  type AiwgPrivacyClassification = 'private' | 'sanitized' | 'public';
3
6
  type AiwgProvenanceConfidence = 'source' | 'candidate' | 'reviewed' | 'rejected';
4
7
  type AiwgReviewAction = 'accept' | 'reject' | 'defer';
8
+ type AiwgFortemiRelationshipDirection = 'upstream' | 'downstream' | 'related';
5
9
  interface AiwgFortemiRecordSource {
6
10
  path: string;
7
11
  repo_relative_path: string;
8
12
  locator: string;
13
+ origin?: string;
14
+ generated?: boolean;
15
+ checksum?: string;
16
+ updated_at?: string;
9
17
  }
10
18
  interface AiwgFortemiRelationship {
11
19
  type: string;
12
20
  target_id: string;
13
21
  source_path?: string;
22
+ target_path?: string;
23
+ direction?: AiwgFortemiRelationshipDirection;
14
24
  label?: string;
15
25
  confidence?: number;
16
26
  privacy?: AiwgPrivacyClassification;
@@ -53,18 +63,53 @@ interface AiwgFortemiProvenanceEvent {
53
63
  privacy?: AiwgPrivacyClassification;
54
64
  attributes?: Record<string, unknown>;
55
65
  }
66
+ interface AiwgFortemiSearchProjection {
67
+ title?: string;
68
+ name?: string;
69
+ summary?: string;
70
+ body?: string;
71
+ triggers?: string[];
72
+ aliases?: string[];
73
+ capability?: string;
74
+ tags?: string[];
75
+ phase?: string;
76
+ type?: string;
77
+ frontmatter?: Record<string, unknown>;
78
+ }
79
+ interface AiwgFortemiChunk {
80
+ id?: string;
81
+ text?: string;
82
+ body?: string;
83
+ summary?: string;
84
+ source_path?: string;
85
+ metadata?: Record<string, unknown>;
86
+ }
87
+ interface AiwgFortemiRecordEmbedding {
88
+ id?: string;
89
+ embedding?: number[];
90
+ vector?: number[];
91
+ model?: string;
92
+ granularity?: string;
93
+ input_hash?: string;
94
+ source_path?: string;
95
+ metadata?: Record<string, unknown>;
96
+ }
56
97
  interface AiwgFortemiRecord {
57
- schema_version: 'aiwg.fortemi.index.record.v1';
98
+ schema_version: AiwgFortemiRecordSchemaVersion;
58
99
  id: string;
59
100
  type: AiwgFortemiRecordType;
60
101
  source: AiwgFortemiRecordSource;
61
- title: string;
62
- text: string;
102
+ title?: string;
103
+ text?: string;
63
104
  facets: Record<string, string[]>;
64
105
  tags: string[];
65
106
  concepts: string[];
66
107
  relationships: AiwgFortemiRelationship[];
67
108
  provenance: AiwgFortemiProvenance[];
109
+ search?: AiwgFortemiSearchProjection;
110
+ chunks?: AiwgFortemiChunk[];
111
+ embeddings?: AiwgFortemiRecordEmbedding[];
112
+ compatibility?: Record<string, unknown>;
68
113
  /** Optional rich SKOS metadata for static consumers that need labels/definitions without opening a shard. */
69
114
  skos_concepts?: AiwgFortemiSkosConcept[];
70
115
  /** Optional SKOS relationship edges among concepts referenced by this record. */
@@ -74,17 +119,23 @@ interface AiwgFortemiRecord {
74
119
  privacy: {
75
120
  classification: AiwgPrivacyClassification;
76
121
  pii: boolean;
122
+ locality?: string;
77
123
  };
78
124
  updated_at: string;
79
125
  }
80
126
  interface AiwgFortemiIndexExport {
81
- schema_version: 'aiwg.fortemi.index.export.v1';
127
+ schema_version: AiwgFortemiIndexExportSchemaVersion;
82
128
  generated_at: string;
83
129
  source: {
84
130
  repo: string;
85
131
  privacy: AiwgPrivacyClassification;
132
+ origin?: string;
133
+ generated?: boolean;
134
+ checksum?: string;
135
+ updated_at?: string;
86
136
  };
87
137
  items: AiwgFortemiRecord[];
138
+ compatibility?: Record<string, unknown>;
88
139
  }
89
140
  interface AiwgFortemiChunkPartRef {
90
141
  href: string;
@@ -118,7 +169,7 @@ interface AiwgFortemiChunkPart {
118
169
  interface AiwgIndexValidationResult {
119
170
  valid: boolean;
120
171
  errors: string[];
121
- counts: Partial<Record<AiwgFortemiRecordType, number>>;
172
+ counts: Partial<Record<string, number>>;
122
173
  }
123
174
  interface AiwgChunkedIndexValidationResult {
124
175
  valid: boolean;
@@ -138,16 +189,22 @@ interface AiwgIndexQueryOptions {
138
189
  snippetLength?: number;
139
190
  weights?: Partial<AiwgIndexQueryWeights>;
140
191
  includeMatches?: boolean;
192
+ searchProfile?: 'default' | 'aiwg-discovery';
141
193
  }
142
194
  interface AiwgIndexQueryWeights {
143
195
  title: number;
144
196
  text: number;
145
197
  tag: number;
146
198
  concept: number;
199
+ facet: number;
200
+ id: number;
201
+ source: number;
147
202
  }
148
203
  interface AiwgIndexQueryMatch {
149
- field: 'title' | 'text' | 'tag' | 'concept';
204
+ field: 'title' | 'text' | 'tag' | 'concept' | 'facet' | 'id' | 'source';
150
205
  value: string;
206
+ score?: number;
207
+ reason?: string;
151
208
  }
152
209
  interface AiwgIndexQueryRankedItem {
153
210
  item: AiwgFortemiRecord;
@@ -203,6 +260,86 @@ interface AiwgIndexGraphOptions {
203
260
  relationshipWeights?: Record<string, number>;
204
261
  includeDanglingRelationships?: boolean;
205
262
  }
263
+ type AiwgRelationshipDirection = 'in' | 'out' | 'both';
264
+ type AiwgRelationshipSetOperation = 'intersection' | 'union' | 'difference';
265
+ interface AiwgRelationshipTraversalOptions {
266
+ direction?: AiwgRelationshipDirection;
267
+ relationshipType?: string;
268
+ relationshipDirection?: AiwgFortemiRelationshipDirection;
269
+ limit?: number;
270
+ }
271
+ interface AiwgRelationshipQueryOptions extends AiwgRelationshipTraversalOptions {
272
+ sourceId?: string;
273
+ targetId?: string;
274
+ type?: string;
275
+ }
276
+ interface AiwgRelationshipEdgeSummary {
277
+ source_id: string;
278
+ target_id: string;
279
+ type: string;
280
+ source_path?: string;
281
+ target_path?: string;
282
+ direction?: AiwgFortemiRelationshipDirection;
283
+ }
284
+ interface AiwgRelationshipNodeSummary {
285
+ id: string;
286
+ type: AiwgFortemiRecordType;
287
+ title: string;
288
+ }
289
+ interface AiwgRelationshipTraversalResult {
290
+ nodes: AiwgRelationshipNodeSummary[];
291
+ edges: AiwgRelationshipEdgeSummary[];
292
+ complete: boolean;
293
+ scannedParts?: number;
294
+ fetchedParts?: number;
295
+ }
296
+ interface AiwgRelationshipSetOptions extends AiwgRelationshipTraversalOptions {
297
+ op: AiwgRelationshipSetOperation;
298
+ a: string;
299
+ b: string;
300
+ }
301
+ interface AiwgRelationshipSetResult {
302
+ ids: string[];
303
+ op: AiwgRelationshipSetOperation;
304
+ }
305
+ interface AiwgStaticEmbeddingRecord {
306
+ record_id: string;
307
+ embedding: number[];
308
+ embedding_id?: string;
309
+ granularity?: string;
310
+ input_hash: string;
311
+ source_path?: string;
312
+ }
313
+ interface AiwgStaticEmbeddingSet {
314
+ schema_version: 'aiwg.fortemi.embedding.set.v1';
315
+ id: string;
316
+ model: string;
317
+ dimensions: number;
318
+ generated_at: string;
319
+ granularity: 'title-summary' | 'body' | 'chunked-body' | string;
320
+ metric?: 'cosine' | 'dot' | 'euclidean';
321
+ input_hash_algorithm?: string;
322
+ embeddings: AiwgStaticEmbeddingRecord[];
323
+ }
324
+ interface AiwgStaticSemanticQueryOptions {
325
+ limit?: number;
326
+ offset?: number;
327
+ minScore?: number;
328
+ }
329
+ interface AiwgStaticSemanticResult {
330
+ item: AiwgFortemiRecord;
331
+ score: number;
332
+ embedding?: AiwgStaticEmbeddingRecord;
333
+ }
334
+ interface AiwgStaticHybridQueryOptions extends AiwgStaticSemanticQueryOptions, AiwgIndexQueryOptions {
335
+ lexicalWeight?: number;
336
+ semanticWeight?: number;
337
+ }
338
+ interface AiwgStaticDuplicatePair {
339
+ left: AiwgFortemiRecord;
340
+ right: AiwgFortemiRecord;
341
+ score: number;
342
+ }
206
343
  interface AiwgReviewInput {
207
344
  item_id: string;
208
345
  action: AiwgReviewAction;
@@ -229,8 +366,14 @@ interface AiwgIndexController {
229
366
  query(query?: string, options?: AiwgIndexQueryOptions): AiwgIndexQueryResult;
230
367
  queryChunked(query?: string, options?: AiwgChunkedIndexQueryOptions): Promise<AiwgChunkedIndexQueryResult>;
231
368
  getRecord(id: string): Promise<AiwgFortemiRecord>;
369
+ neighbors(id: string, options?: AiwgRelationshipTraversalOptions): Promise<AiwgRelationshipTraversalResult>;
370
+ relationshipQuery(options?: AiwgRelationshipQueryOptions): Promise<AiwgRelationshipTraversalResult>;
371
+ relationshipSet(options: AiwgRelationshipSetOptions): Promise<AiwgRelationshipSetResult>;
232
372
  clearChunkCache(): void;
233
373
  toCommunityGraph(options?: AiwgIndexGraphOptions): ReturnType<typeof aiwgFortemiIndexToCommunityGraph>;
374
+ toCommunityGraphChunked(options?: AiwgIndexGraphOptions & {
375
+ onProgress?: (progress: AiwgChunkedIndexProgress) => void;
376
+ }): Promise<ReturnType<typeof aiwgFortemiIndexToCommunityGraph>>;
234
377
  setReviewDecision(input: AiwgReviewInput): AiwgReviewDecision;
235
378
  clearReviewDecision(itemId: string): void;
236
379
  createReviewDecisionExport(generatedAt?: string): AiwgReviewDecisionExport;
@@ -268,6 +411,11 @@ interface AiwgChunkedIndexBuildResult {
268
411
  }
269
412
  declare function buildAiwgChunkedIndex(index: AiwgFortemiIndexExport, options?: AiwgChunkedIndexBuildOptions): AiwgChunkedIndexBuildResult;
270
413
  declare function queryAiwgFortemiIndex(index: AiwgFortemiIndexExport, query?: string, options?: AiwgIndexQueryOptions): AiwgIndexQueryResult;
414
+ declare function validateAiwgStaticEmbeddingSet(value: unknown): AiwgChunkedIndexValidationResult;
415
+ declare function assertAiwgStaticEmbeddingSet(value: unknown): AiwgStaticEmbeddingSet;
416
+ declare function queryAiwgSemanticIndex(index: AiwgFortemiIndexExport, embeddingSet: AiwgStaticEmbeddingSet, queryEmbedding: number[], options?: AiwgStaticSemanticQueryOptions): AiwgStaticSemanticResult[];
417
+ declare function queryAiwgHybridIndex(index: AiwgFortemiIndexExport, embeddingSet: AiwgStaticEmbeddingSet, query: string, queryEmbedding: number[], options?: AiwgStaticHybridQueryOptions): AiwgStaticSemanticResult[];
418
+ declare function findAiwgStaticDuplicatePairs(index: AiwgFortemiIndexExport, embeddingSet: AiwgStaticEmbeddingSet, threshold?: number): AiwgStaticDuplicatePair[];
271
419
  declare function createAiwgReviewDecisionExport(source: Pick<AiwgFortemiIndexExport, 'schema_version'>, decisions: AiwgReviewDecision[], generatedAt?: string): AiwgReviewDecisionExport;
272
420
  declare function createAiwgIndexController(initialIndex?: AiwgFortemiIndexExport): AiwgIndexController;
273
421
  declare function aiwgFortemiIndexToCommunityGraph(index: AiwgFortemiIndexExport, options?: AiwgIndexGraphOptions): {
@@ -286,4 +434,4 @@ declare function aiwgFortemiIndexToCommunityGraph(index: AiwgFortemiIndexExport,
286
434
  }[];
287
435
  };
288
436
 
289
- export { AIWG_SCAN_REQUIRED_FIELDS, type AiwgChunkedIndexBuildOptions, type AiwgChunkedIndexBuildResult, type AiwgChunkedIndexDetailLoader, type AiwgChunkedIndexLoadOptions, type AiwgChunkedIndexLoader, type AiwgChunkedIndexProgress, type AiwgChunkedIndexProgressPhase, type AiwgChunkedIndexQueryOptions, type AiwgChunkedIndexQueryResult, type AiwgChunkedIndexValidationResult, type AiwgDetailIdEncoding, type AiwgFortemiChunkDetailRef, type AiwgFortemiChunkManifest, type AiwgFortemiChunkPart, type AiwgFortemiChunkPartRef, type AiwgFortemiIndexExport, type AiwgFortemiProjectedRecord, type AiwgFortemiProvenance, type AiwgFortemiProvenanceEvent, type AiwgFortemiRecord, type AiwgFortemiRecordSource, type AiwgFortemiRecordType, type AiwgFortemiRelationship, type AiwgFortemiSkosConcept, type AiwgFortemiSkosRelation, type AiwgFortemiSkosRelationType, type AiwgIndexController, type AiwgIndexControllerListener, type AiwgIndexControllerSnapshot, type AiwgIndexGraphOptions, type AiwgIndexQueryMatch, type AiwgIndexQueryOptions, type AiwgIndexQueryRankedItem, type AiwgIndexQueryResult, type AiwgIndexQueryWeights, type AiwgIndexValidationResult, type AiwgPrivacyClassification, type AiwgProvenanceConfidence, type AiwgReviewAction, type AiwgReviewDecision, type AiwgReviewDecisionExport, type AiwgReviewInput, aiwgDetailHrefForId, aiwgFortemiIndexToCommunityGraph, assertAiwgFortemiChunkManifest, assertAiwgFortemiChunkPart, assertAiwgFortemiIndexExport, buildAiwgChunkedIndex, createAiwgFetchChunkLoader, createAiwgFetchDetailLoader, createAiwgIndexController, createAiwgReviewDecisionExport, encodeAiwgDetailId, getAiwgFortemiFacets, queryAiwgFortemiIndex, validateAiwgFortemiChunkManifest, validateAiwgFortemiChunkPart, validateAiwgFortemiIndexExport };
437
+ export { AIWG_SCAN_REQUIRED_FIELDS, type AiwgChunkedIndexBuildOptions, type AiwgChunkedIndexBuildResult, type AiwgChunkedIndexDetailLoader, type AiwgChunkedIndexLoadOptions, type AiwgChunkedIndexLoader, type AiwgChunkedIndexProgress, type AiwgChunkedIndexProgressPhase, type AiwgChunkedIndexQueryOptions, type AiwgChunkedIndexQueryResult, type AiwgChunkedIndexValidationResult, type AiwgDetailIdEncoding, type AiwgFortemiChunk, type AiwgFortemiChunkDetailRef, type AiwgFortemiChunkManifest, type AiwgFortemiChunkPart, type AiwgFortemiChunkPartRef, type AiwgFortemiIndexExport, type AiwgFortemiIndexExportSchemaVersion, type AiwgFortemiKnownRecordType, type AiwgFortemiProjectedRecord, type AiwgFortemiProvenance, type AiwgFortemiProvenanceEvent, type AiwgFortemiRecord, type AiwgFortemiRecordEmbedding, type AiwgFortemiRecordSchemaVersion, type AiwgFortemiRecordSource, type AiwgFortemiRecordType, type AiwgFortemiRelationship, type AiwgFortemiRelationshipDirection, type AiwgFortemiSearchProjection, type AiwgFortemiSkosConcept, type AiwgFortemiSkosRelation, type AiwgFortemiSkosRelationType, type AiwgIndexController, type AiwgIndexControllerListener, type AiwgIndexControllerSnapshot, type AiwgIndexGraphOptions, type AiwgIndexQueryMatch, type AiwgIndexQueryOptions, type AiwgIndexQueryRankedItem, type AiwgIndexQueryResult, type AiwgIndexQueryWeights, type AiwgIndexValidationResult, type AiwgPrivacyClassification, type AiwgProvenanceConfidence, type AiwgRelationshipDirection, type AiwgRelationshipEdgeSummary, type AiwgRelationshipNodeSummary, type AiwgRelationshipQueryOptions, type AiwgRelationshipSetOperation, type AiwgRelationshipSetOptions, type AiwgRelationshipSetResult, type AiwgRelationshipTraversalOptions, type AiwgRelationshipTraversalResult, type AiwgReviewAction, type AiwgReviewDecision, type AiwgReviewDecisionExport, type AiwgReviewInput, type AiwgStaticDuplicatePair, type AiwgStaticEmbeddingRecord, type AiwgStaticEmbeddingSet, type AiwgStaticHybridQueryOptions, type AiwgStaticSemanticQueryOptions, type AiwgStaticSemanticResult, aiwgDetailHrefForId, aiwgFortemiIndexToCommunityGraph, assertAiwgFortemiChunkManifest, assertAiwgFortemiChunkPart, assertAiwgFortemiIndexExport, assertAiwgStaticEmbeddingSet, buildAiwgChunkedIndex, createAiwgFetchChunkLoader, createAiwgFetchDetailLoader, createAiwgIndexController, createAiwgReviewDecisionExport, encodeAiwgDetailId, findAiwgStaticDuplicatePairs, getAiwgFortemiFacets, queryAiwgFortemiIndex, queryAiwgHybridIndex, queryAiwgSemanticIndex, validateAiwgFortemiChunkManifest, validateAiwgFortemiChunkPart, validateAiwgFortemiIndexExport, validateAiwgStaticEmbeddingSet };