@aigne/afs-index 1.12.0-beta.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/LICENSE.md +26 -0
- package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.cjs +11 -0
- package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs +10 -0
- package/dist/backend/d1-index-backend.cjs +656 -0
- package/dist/backend/d1-index-backend.d.cts +149 -0
- package/dist/backend/d1-index-backend.d.cts.map +1 -0
- package/dist/backend/d1-index-backend.d.mts +149 -0
- package/dist/backend/d1-index-backend.d.mts.map +1 -0
- package/dist/backend/d1-index-backend.mjs +657 -0
- package/dist/backend/d1-index-backend.mjs.map +1 -0
- package/dist/backend/d1-vector-backend.cjs +83 -0
- package/dist/backend/d1-vector-backend.d.cts +21 -0
- package/dist/backend/d1-vector-backend.d.cts.map +1 -0
- package/dist/backend/d1-vector-backend.d.mts +21 -0
- package/dist/backend/d1-vector-backend.d.mts.map +1 -0
- package/dist/backend/d1-vector-backend.mjs +84 -0
- package/dist/backend/d1-vector-backend.mjs.map +1 -0
- package/dist/backend/memory-backend.cjs +304 -0
- package/dist/backend/memory-backend.d.cts +66 -0
- package/dist/backend/memory-backend.d.cts.map +1 -0
- package/dist/backend/memory-backend.d.mts +66 -0
- package/dist/backend/memory-backend.d.mts.map +1 -0
- package/dist/backend/memory-backend.mjs +305 -0
- package/dist/backend/memory-backend.mjs.map +1 -0
- package/dist/backend/prefix-range.cjs +25 -0
- package/dist/backend/prefix-range.mjs +25 -0
- package/dist/backend/prefix-range.mjs.map +1 -0
- package/dist/backend/schema.cjs +187 -0
- package/dist/backend/schema.mjs +188 -0
- package/dist/backend/schema.mjs.map +1 -0
- package/dist/backend/sqlite-backend.cjs +889 -0
- package/dist/backend/sqlite-backend.d.cts +96 -0
- package/dist/backend/sqlite-backend.d.cts.map +1 -0
- package/dist/backend/sqlite-backend.d.mts +96 -0
- package/dist/backend/sqlite-backend.d.mts.map +1 -0
- package/dist/backend/sqlite-backend.mjs +890 -0
- package/dist/backend/sqlite-backend.mjs.map +1 -0
- package/dist/backend/types.d.cts +209 -0
- package/dist/backend/types.d.cts.map +1 -0
- package/dist/backend/types.d.mts +209 -0
- package/dist/backend/types.d.mts.map +1 -0
- package/dist/backend/upstash-vector-backend.cjs +98 -0
- package/dist/backend/upstash-vector-backend.d.cts +21 -0
- package/dist/backend/upstash-vector-backend.d.cts.map +1 -0
- package/dist/backend/upstash-vector-backend.d.mts +21 -0
- package/dist/backend/upstash-vector-backend.d.mts.map +1 -0
- package/dist/backend/upstash-vector-backend.mjs +98 -0
- package/dist/backend/upstash-vector-backend.mjs.map +1 -0
- package/dist/backend/vector-backend.d.cts +29 -0
- package/dist/backend/vector-backend.d.cts.map +1 -0
- package/dist/backend/vector-backend.d.mts +29 -0
- package/dist/backend/vector-backend.d.mts.map +1 -0
- package/dist/dirty-queue.d.cts +41 -0
- package/dist/dirty-queue.d.cts.map +1 -0
- package/dist/dirty-queue.d.mts +41 -0
- package/dist/dirty-queue.d.mts.map +1 -0
- package/dist/embed.cjs +45 -0
- package/dist/embed.d.cts +20 -0
- package/dist/embed.d.cts.map +1 -0
- package/dist/embed.d.mts +20 -0
- package/dist/embed.d.mts.map +1 -0
- package/dist/embed.mjs +46 -0
- package/dist/embed.mjs.map +1 -0
- package/dist/extraction/defaults.cjs +242 -0
- package/dist/extraction/defaults.d.cts +14 -0
- package/dist/extraction/defaults.d.cts.map +1 -0
- package/dist/extraction/defaults.d.mts +14 -0
- package/dist/extraction/defaults.d.mts.map +1 -0
- package/dist/extraction/defaults.mjs +242 -0
- package/dist/extraction/defaults.mjs.map +1 -0
- package/dist/extraction/field-map.cjs +162 -0
- package/dist/extraction/field-map.d.cts +70 -0
- package/dist/extraction/field-map.d.cts.map +1 -0
- package/dist/extraction/field-map.d.mts +70 -0
- package/dist/extraction/field-map.d.mts.map +1 -0
- package/dist/extraction/field-map.mjs +157 -0
- package/dist/extraction/field-map.mjs.map +1 -0
- package/dist/extraction/manager.cjs +74 -0
- package/dist/extraction/manager.d.cts +47 -0
- package/dist/extraction/manager.d.cts.map +1 -0
- package/dist/extraction/manager.d.mts +47 -0
- package/dist/extraction/manager.d.mts.map +1 -0
- package/dist/extraction/manager.mjs +74 -0
- package/dist/extraction/manager.mjs.map +1 -0
- package/dist/extraction/path-anchors.cjs +86 -0
- package/dist/extraction/path-anchors.d.cts +72 -0
- package/dist/extraction/path-anchors.d.cts.map +1 -0
- package/dist/extraction/path-anchors.d.mts +72 -0
- package/dist/extraction/path-anchors.d.mts.map +1 -0
- package/dist/extraction/path-anchors.mjs +86 -0
- package/dist/extraction/path-anchors.mjs.map +1 -0
- package/dist/follower-scheduler.cjs +92 -0
- package/dist/follower-scheduler.d.cts +58 -0
- package/dist/follower-scheduler.d.cts.map +1 -0
- package/dist/follower-scheduler.d.mts +58 -0
- package/dist/follower-scheduler.d.mts.map +1 -0
- package/dist/follower-scheduler.mjs +92 -0
- package/dist/follower-scheduler.mjs.map +1 -0
- package/dist/follower.cjs +577 -0
- package/dist/follower.d.cts +241 -0
- package/dist/follower.d.cts.map +1 -0
- package/dist/follower.d.mts +241 -0
- package/dist/follower.d.mts.map +1 -0
- package/dist/follower.mjs +571 -0
- package/dist/follower.mjs.map +1 -0
- package/dist/index-provider.cjs +1166 -0
- package/dist/index-provider.d.cts +175 -0
- package/dist/index-provider.d.cts.map +1 -0
- package/dist/index-provider.d.mts +175 -0
- package/dist/index-provider.d.mts.map +1 -0
- package/dist/index-provider.mjs +1167 -0
- package/dist/index-provider.mjs.map +1 -0
- package/dist/index.cjs +53 -0
- package/dist/index.d.cts +22 -0
- package/dist/index.d.mts +22 -0
- package/dist/index.mjs +20 -0
- package/dist/keys/exact.cjs +20 -0
- package/dist/keys/exact.mjs +20 -0
- package/dist/keys/exact.mjs.map +1 -0
- package/dist/keys/location.cjs +13 -0
- package/dist/keys/location.mjs +13 -0
- package/dist/keys/location.mjs.map +1 -0
- package/dist/keys/normalized.cjs +62 -0
- package/dist/keys/normalized.mjs +63 -0
- package/dist/keys/normalized.mjs.map +1 -0
- package/dist/keys/person.cjs +15 -0
- package/dist/keys/person.mjs +15 -0
- package/dist/keys/person.mjs.map +1 -0
- package/dist/keys/registry.cjs +45 -0
- package/dist/keys/registry.d.cts +15 -0
- package/dist/keys/registry.d.cts.map +1 -0
- package/dist/keys/registry.d.mts +15 -0
- package/dist/keys/registry.d.mts.map +1 -0
- package/dist/keys/registry.mjs +46 -0
- package/dist/keys/registry.mjs.map +1 -0
- package/dist/keys/time.cjs +128 -0
- package/dist/keys/time.mjs +128 -0
- package/dist/keys/time.mjs.map +1 -0
- package/dist/keys/topic.cjs +23 -0
- package/dist/keys/topic.mjs +23 -0
- package/dist/keys/topic.mjs.map +1 -0
- package/dist/manifest-index.cjs +29 -0
- package/dist/manifest-index.d.cts +24 -0
- package/dist/manifest-index.d.cts.map +1 -0
- package/dist/manifest-index.d.mts +24 -0
- package/dist/manifest-index.d.mts.map +1 -0
- package/dist/manifest-index.mjs +28 -0
- package/dist/manifest-index.mjs.map +1 -0
- package/dist/offline-rebuild.cjs +48 -0
- package/dist/offline-rebuild.d.cts +57 -0
- package/dist/offline-rebuild.d.cts.map +1 -0
- package/dist/offline-rebuild.d.mts +57 -0
- package/dist/offline-rebuild.d.mts.map +1 -0
- package/dist/offline-rebuild.mjs +49 -0
- package/dist/offline-rebuild.mjs.map +1 -0
- package/dist/query/engine.cjs +433 -0
- package/dist/query/engine.d.cts +34 -0
- package/dist/query/engine.d.cts.map +1 -0
- package/dist/query/engine.d.mts +34 -0
- package/dist/query/engine.d.mts.map +1 -0
- package/dist/query/engine.mjs +433 -0
- package/dist/query/engine.mjs.map +1 -0
- package/dist/query/limits.cjs +12 -0
- package/dist/query/limits.mjs +12 -0
- package/dist/query/limits.mjs.map +1 -0
- package/dist/text/cjk.cjs +30 -0
- package/dist/text/cjk.d.cts +24 -0
- package/dist/text/cjk.d.cts.map +1 -0
- package/dist/text/cjk.d.mts +24 -0
- package/dist/text/cjk.d.mts.map +1 -0
- package/dist/text/cjk.mjs +30 -0
- package/dist/text/cjk.mjs.map +1 -0
- package/dist/text/fts.cjs +244 -0
- package/dist/text/fts.mjs +245 -0
- package/dist/text/fts.mjs.map +1 -0
- package/dist/text/host.cjs +39 -0
- package/dist/text/host.mjs +38 -0
- package/dist/text/host.mjs.map +1 -0
- package/dist/types.cjs +44 -0
- package/dist/types.d.cts +393 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.mts +393 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +42 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { AFSIndexOptions, AnchorTypeDefinition, IndexConfig } from "./types.cjs";
|
|
2
|
+
import { IndexFollower } from "./follower.cjs";
|
|
3
|
+
import { AFSAccessMode, AFSEntry, AFSExecResult, AFSExplainResult, AFSListResult, AFSRoot, AFSSearchOptions, AFSSearchResult, ProviderManifest } from "@aigne/afs";
|
|
4
|
+
import { AFSBaseProvider, RouteContext } from "@aigne/afs/provider";
|
|
5
|
+
import { z } from "zod/v4";
|
|
6
|
+
|
|
7
|
+
//#region src/index-provider.d.ts
|
|
8
|
+
declare class AFSIndex extends AFSBaseProvider {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly description?: string;
|
|
11
|
+
readonly accessMode: AFSAccessMode;
|
|
12
|
+
private readonly options;
|
|
13
|
+
private readonly keyRegistry;
|
|
14
|
+
private backend;
|
|
15
|
+
private queryEngine;
|
|
16
|
+
private readonly domains;
|
|
17
|
+
private readonly extractors;
|
|
18
|
+
private readonly unsubscribes;
|
|
19
|
+
private afsRoot?;
|
|
20
|
+
private initialized;
|
|
21
|
+
private follower?;
|
|
22
|
+
private catchUpInflight?;
|
|
23
|
+
static schema(): z.ZodObject<{
|
|
24
|
+
dbPath: z.ZodOptional<z.ZodString>;
|
|
25
|
+
defaultDomain: z.ZodOptional<z.ZodString>;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
static manifest(): ProviderManifest;
|
|
28
|
+
constructor(options?: AFSIndexOptions);
|
|
29
|
+
private ensureInitialized;
|
|
30
|
+
onMount(root: AFSRoot, _mountPath?: string): void;
|
|
31
|
+
private handleMountEvent;
|
|
32
|
+
private handleDeleteEvent;
|
|
33
|
+
private handleWriteEvent;
|
|
34
|
+
close(): Promise<void>;
|
|
35
|
+
readRoot(ctx: RouteContext): Promise<AFSEntry | undefined>;
|
|
36
|
+
listRoot(ctx: RouteContext): Promise<AFSListResult>;
|
|
37
|
+
listActions(ctx: RouteContext): Promise<AFSListResult>;
|
|
38
|
+
readDomains(ctx: RouteContext): AFSEntry | undefined;
|
|
39
|
+
readStatsDir(ctx: RouteContext): AFSEntry | undefined;
|
|
40
|
+
readConfigDir(ctx: RouteContext): AFSEntry | undefined;
|
|
41
|
+
listDomains(ctx: RouteContext): Promise<AFSListResult>;
|
|
42
|
+
listStatsDir(ctx: RouteContext): Promise<AFSListResult>;
|
|
43
|
+
listConfig(ctx: RouteContext): AFSListResult;
|
|
44
|
+
listStatsKey(): AFSListResult;
|
|
45
|
+
listConfigKey(): AFSListResult;
|
|
46
|
+
listDomainName(ctx: RouteContext<{
|
|
47
|
+
name: string;
|
|
48
|
+
}>): Promise<AFSListResult>;
|
|
49
|
+
readRootMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
50
|
+
readDomainsMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
51
|
+
readStatsMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
52
|
+
readConfigMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
53
|
+
readStatsKeyMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
54
|
+
readConfigKeyMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
55
|
+
readDomainNameMeta(ctx: RouteContext<{
|
|
56
|
+
name: string;
|
|
57
|
+
}>): Promise<AFSEntry | undefined>;
|
|
58
|
+
readCapabilities(ctx: RouteContext): AFSEntry | undefined;
|
|
59
|
+
explainRoot(_ctx: RouteContext): AFSExplainResult;
|
|
60
|
+
explainPath(ctx: RouteContext<{
|
|
61
|
+
path: string;
|
|
62
|
+
}>): AFSExplainResult;
|
|
63
|
+
searchHandler(_ctx: RouteContext<{
|
|
64
|
+
path?: string;
|
|
65
|
+
}>, query: string, options?: AFSSearchOptions): Promise<AFSSearchResult>;
|
|
66
|
+
readConfig(ctx: RouteContext<{
|
|
67
|
+
key: string;
|
|
68
|
+
}>): Promise<AFSEntry | undefined>;
|
|
69
|
+
readStats(ctx: RouteContext<{
|
|
70
|
+
key: string;
|
|
71
|
+
}>): Promise<AFSEntry | undefined>;
|
|
72
|
+
execIndex(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
73
|
+
execQuery(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
74
|
+
/**
|
|
75
|
+
* Build a "why did the query return what it returned" diagnostic.
|
|
76
|
+
*
|
|
77
|
+
* Cheap probes only: scope cardinality (countEntries), result-type
|
|
78
|
+
* breakdown (already in the result list), echo of the parsed inputs.
|
|
79
|
+
* Does not re-run the query — purely additive per planning doc §P4.
|
|
80
|
+
*/
|
|
81
|
+
private buildExplanation;
|
|
82
|
+
execGet(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
83
|
+
execReindex(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
84
|
+
execCleanup(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
85
|
+
/**
|
|
86
|
+
* `verify` — index self-stats for drift detection.
|
|
87
|
+
*
|
|
88
|
+
* Returns the index's own view of what it holds: total entries, breakdown
|
|
89
|
+
* by domain and state, and how many entries have zero anchors (a common
|
|
90
|
+
* symptom of a half-finished or corrupted index). A caller compares these
|
|
91
|
+
* against the source-of-truth provider (e.g. memory's `health.totalEntries`)
|
|
92
|
+
* to decide whether to trigger a rebuild — without guessing from empty
|
|
93
|
+
* query results.
|
|
94
|
+
*/
|
|
95
|
+
execVerify(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
96
|
+
/**
|
|
97
|
+
* Register one or more domains from a manifest projection, wiring each
|
|
98
|
+
* declared anchor type into the key registry (normalizedValue by default).
|
|
99
|
+
*
|
|
100
|
+
* This is the non-exec entry point for session-view wiring: called at index
|
|
101
|
+
* handle creation time so domains survive Worker restarts (the in-memory
|
|
102
|
+
* handles are rebuilt from the manifest on every cold start).
|
|
103
|
+
*/
|
|
104
|
+
registerDomains(domains: Array<{
|
|
105
|
+
name: string;
|
|
106
|
+
scope?: string;
|
|
107
|
+
anchorTypes: AnchorTypeDefinition[];
|
|
108
|
+
config?: IndexConfig;
|
|
109
|
+
}>): void;
|
|
110
|
+
/**
|
|
111
|
+
* Attach a changelog follower so execQuery triggers a lightweight catch-up
|
|
112
|
+
* before returning results. Called once at index handle creation time by the
|
|
113
|
+
* CF session-view (cf-session-view.ts) after building the follower.
|
|
114
|
+
*/
|
|
115
|
+
setFollower(follower: IndexFollower): void;
|
|
116
|
+
private startCatchUpOnce;
|
|
117
|
+
/**
|
|
118
|
+
* Wire declared anchor types into the shared key registry. Types with an
|
|
119
|
+
* explicit function keyGenerator use it directly; types without one get a
|
|
120
|
+
* normalizedValue generator (lowercase+trim) instead of the exact fallback
|
|
121
|
+
* (JSON.stringify, field-order/case-sensitive).
|
|
122
|
+
*
|
|
123
|
+
* Built-in types (time/location/person/topic — registered in
|
|
124
|
+
* `KeyGeneratorRegistry`'s constructor) are never overwritten here, even if
|
|
125
|
+
* a manifest or `.index/anchor-types/` declaration reuses one of those
|
|
126
|
+
* names: the built-in's multi-dimensional key generator always wins (issue
|
|
127
|
+
* #934 P0 — see `KeyGeneratorRegistry.isBuiltin`). Shared by
|
|
128
|
+
* `registerDomains` (manifest wiring) and `discoverProvider` (`.index/`
|
|
129
|
+
* convention wiring) — previously duplicated inline in both.
|
|
130
|
+
*/
|
|
131
|
+
private registerAnchorTypeKeyGenerators;
|
|
132
|
+
execRegisterDomain(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
133
|
+
execDiscover(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
134
|
+
private discoverProvider;
|
|
135
|
+
/**
|
|
136
|
+
* Check if a path should be indexed based on .index/config rules.
|
|
137
|
+
* Finds the domain whose scope covers the path and applies its config.
|
|
138
|
+
* If no matching domain config exists, allows indexing by default.
|
|
139
|
+
*/
|
|
140
|
+
private shouldIndex;
|
|
141
|
+
/**
|
|
142
|
+
* Auto-generate embedding via LLM provider if configured and enabled.
|
|
143
|
+
* Returns null if LLM is not available or embedding is disabled.
|
|
144
|
+
*
|
|
145
|
+
* @param type - "passage" for write-time (document), "query" for query-time.
|
|
146
|
+
* Models like E5 require different prefixes for query vs passage.
|
|
147
|
+
*/
|
|
148
|
+
private autoEmbed;
|
|
149
|
+
/**
|
|
150
|
+
* Resolve the chat-action path used by query rewriters. Prefers an
|
|
151
|
+
* explicit `chatProvider` config; falls back to `<llmProvider>/.actions/chat`
|
|
152
|
+
* because the same AigneHub default endpoint hosts both embedding
|
|
153
|
+
* and chat actions in practice.
|
|
154
|
+
*/
|
|
155
|
+
private resolveChatProvider;
|
|
156
|
+
/**
|
|
157
|
+
* Generate paraphrases of `question` via the chat provider. Returns
|
|
158
|
+
* the paraphrases plus the original question (the original is kept
|
|
159
|
+
* as a safety net in case the rewrites drift). Returns just `[question]`
|
|
160
|
+
* if the chat call fails — degrades gracefully to baseline.
|
|
161
|
+
*/
|
|
162
|
+
private generateParaphrases;
|
|
163
|
+
/**
|
|
164
|
+
* Multi-query retrieval: generate N paraphrases, embed each, run a
|
|
165
|
+
* separate semantic query per variant, and RRF-fuse the result lists.
|
|
166
|
+
* The `index-diverse-bench` shows 2.6× MRR lift on paraphrase queries
|
|
167
|
+
* with this strategy. Each variant pulls top-(2×limit) so the fusion
|
|
168
|
+
* has enough candidates to differentiate; the final list is trimmed
|
|
169
|
+
* to the caller's requested limit.
|
|
170
|
+
*/
|
|
171
|
+
private queryWithMultiQuery;
|
|
172
|
+
}
|
|
173
|
+
//#endregion
|
|
174
|
+
export { AFSIndex };
|
|
175
|
+
//# sourceMappingURL=index-provider.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-provider.d.cts","names":[],"sources":["../src/index-provider.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { AFSIndexOptions, AnchorTypeDefinition, IndexConfig } from "./types.mjs";
|
|
2
|
+
import { IndexFollower } from "./follower.mjs";
|
|
3
|
+
import { AFSAccessMode, AFSEntry, AFSExecResult, AFSExplainResult, AFSListResult, AFSRoot, AFSSearchOptions, AFSSearchResult, ProviderManifest } from "@aigne/afs";
|
|
4
|
+
import { AFSBaseProvider, RouteContext } from "@aigne/afs/provider";
|
|
5
|
+
import { z } from "zod/v4";
|
|
6
|
+
|
|
7
|
+
//#region src/index-provider.d.ts
|
|
8
|
+
declare class AFSIndex extends AFSBaseProvider {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly description?: string;
|
|
11
|
+
readonly accessMode: AFSAccessMode;
|
|
12
|
+
private readonly options;
|
|
13
|
+
private readonly keyRegistry;
|
|
14
|
+
private backend;
|
|
15
|
+
private queryEngine;
|
|
16
|
+
private readonly domains;
|
|
17
|
+
private readonly extractors;
|
|
18
|
+
private readonly unsubscribes;
|
|
19
|
+
private afsRoot?;
|
|
20
|
+
private initialized;
|
|
21
|
+
private follower?;
|
|
22
|
+
private catchUpInflight?;
|
|
23
|
+
static schema(): z.ZodObject<{
|
|
24
|
+
dbPath: z.ZodOptional<z.ZodString>;
|
|
25
|
+
defaultDomain: z.ZodOptional<z.ZodString>;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
static manifest(): ProviderManifest;
|
|
28
|
+
constructor(options?: AFSIndexOptions);
|
|
29
|
+
private ensureInitialized;
|
|
30
|
+
onMount(root: AFSRoot, _mountPath?: string): void;
|
|
31
|
+
private handleMountEvent;
|
|
32
|
+
private handleDeleteEvent;
|
|
33
|
+
private handleWriteEvent;
|
|
34
|
+
close(): Promise<void>;
|
|
35
|
+
readRoot(ctx: RouteContext): Promise<AFSEntry | undefined>;
|
|
36
|
+
listRoot(ctx: RouteContext): Promise<AFSListResult>;
|
|
37
|
+
listActions(ctx: RouteContext): Promise<AFSListResult>;
|
|
38
|
+
readDomains(ctx: RouteContext): AFSEntry | undefined;
|
|
39
|
+
readStatsDir(ctx: RouteContext): AFSEntry | undefined;
|
|
40
|
+
readConfigDir(ctx: RouteContext): AFSEntry | undefined;
|
|
41
|
+
listDomains(ctx: RouteContext): Promise<AFSListResult>;
|
|
42
|
+
listStatsDir(ctx: RouteContext): Promise<AFSListResult>;
|
|
43
|
+
listConfig(ctx: RouteContext): AFSListResult;
|
|
44
|
+
listStatsKey(): AFSListResult;
|
|
45
|
+
listConfigKey(): AFSListResult;
|
|
46
|
+
listDomainName(ctx: RouteContext<{
|
|
47
|
+
name: string;
|
|
48
|
+
}>): Promise<AFSListResult>;
|
|
49
|
+
readRootMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
50
|
+
readDomainsMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
51
|
+
readStatsMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
52
|
+
readConfigMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
53
|
+
readStatsKeyMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
54
|
+
readConfigKeyMeta(ctx: RouteContext): AFSEntry | undefined;
|
|
55
|
+
readDomainNameMeta(ctx: RouteContext<{
|
|
56
|
+
name: string;
|
|
57
|
+
}>): Promise<AFSEntry | undefined>;
|
|
58
|
+
readCapabilities(ctx: RouteContext): AFSEntry | undefined;
|
|
59
|
+
explainRoot(_ctx: RouteContext): AFSExplainResult;
|
|
60
|
+
explainPath(ctx: RouteContext<{
|
|
61
|
+
path: string;
|
|
62
|
+
}>): AFSExplainResult;
|
|
63
|
+
searchHandler(_ctx: RouteContext<{
|
|
64
|
+
path?: string;
|
|
65
|
+
}>, query: string, options?: AFSSearchOptions): Promise<AFSSearchResult>;
|
|
66
|
+
readConfig(ctx: RouteContext<{
|
|
67
|
+
key: string;
|
|
68
|
+
}>): Promise<AFSEntry | undefined>;
|
|
69
|
+
readStats(ctx: RouteContext<{
|
|
70
|
+
key: string;
|
|
71
|
+
}>): Promise<AFSEntry | undefined>;
|
|
72
|
+
execIndex(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
73
|
+
execQuery(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
74
|
+
/**
|
|
75
|
+
* Build a "why did the query return what it returned" diagnostic.
|
|
76
|
+
*
|
|
77
|
+
* Cheap probes only: scope cardinality (countEntries), result-type
|
|
78
|
+
* breakdown (already in the result list), echo of the parsed inputs.
|
|
79
|
+
* Does not re-run the query — purely additive per planning doc §P4.
|
|
80
|
+
*/
|
|
81
|
+
private buildExplanation;
|
|
82
|
+
execGet(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
83
|
+
execReindex(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
84
|
+
execCleanup(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
85
|
+
/**
|
|
86
|
+
* `verify` — index self-stats for drift detection.
|
|
87
|
+
*
|
|
88
|
+
* Returns the index's own view of what it holds: total entries, breakdown
|
|
89
|
+
* by domain and state, and how many entries have zero anchors (a common
|
|
90
|
+
* symptom of a half-finished or corrupted index). A caller compares these
|
|
91
|
+
* against the source-of-truth provider (e.g. memory's `health.totalEntries`)
|
|
92
|
+
* to decide whether to trigger a rebuild — without guessing from empty
|
|
93
|
+
* query results.
|
|
94
|
+
*/
|
|
95
|
+
execVerify(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
96
|
+
/**
|
|
97
|
+
* Register one or more domains from a manifest projection, wiring each
|
|
98
|
+
* declared anchor type into the key registry (normalizedValue by default).
|
|
99
|
+
*
|
|
100
|
+
* This is the non-exec entry point for session-view wiring: called at index
|
|
101
|
+
* handle creation time so domains survive Worker restarts (the in-memory
|
|
102
|
+
* handles are rebuilt from the manifest on every cold start).
|
|
103
|
+
*/
|
|
104
|
+
registerDomains(domains: Array<{
|
|
105
|
+
name: string;
|
|
106
|
+
scope?: string;
|
|
107
|
+
anchorTypes: AnchorTypeDefinition[];
|
|
108
|
+
config?: IndexConfig;
|
|
109
|
+
}>): void;
|
|
110
|
+
/**
|
|
111
|
+
* Attach a changelog follower so execQuery triggers a lightweight catch-up
|
|
112
|
+
* before returning results. Called once at index handle creation time by the
|
|
113
|
+
* CF session-view (cf-session-view.ts) after building the follower.
|
|
114
|
+
*/
|
|
115
|
+
setFollower(follower: IndexFollower): void;
|
|
116
|
+
private startCatchUpOnce;
|
|
117
|
+
/**
|
|
118
|
+
* Wire declared anchor types into the shared key registry. Types with an
|
|
119
|
+
* explicit function keyGenerator use it directly; types without one get a
|
|
120
|
+
* normalizedValue generator (lowercase+trim) instead of the exact fallback
|
|
121
|
+
* (JSON.stringify, field-order/case-sensitive).
|
|
122
|
+
*
|
|
123
|
+
* Built-in types (time/location/person/topic — registered in
|
|
124
|
+
* `KeyGeneratorRegistry`'s constructor) are never overwritten here, even if
|
|
125
|
+
* a manifest or `.index/anchor-types/` declaration reuses one of those
|
|
126
|
+
* names: the built-in's multi-dimensional key generator always wins (issue
|
|
127
|
+
* #934 P0 — see `KeyGeneratorRegistry.isBuiltin`). Shared by
|
|
128
|
+
* `registerDomains` (manifest wiring) and `discoverProvider` (`.index/`
|
|
129
|
+
* convention wiring) — previously duplicated inline in both.
|
|
130
|
+
*/
|
|
131
|
+
private registerAnchorTypeKeyGenerators;
|
|
132
|
+
execRegisterDomain(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
133
|
+
execDiscover(_ctx: RouteContext, args: Record<string, unknown>): Promise<AFSExecResult>;
|
|
134
|
+
private discoverProvider;
|
|
135
|
+
/**
|
|
136
|
+
* Check if a path should be indexed based on .index/config rules.
|
|
137
|
+
* Finds the domain whose scope covers the path and applies its config.
|
|
138
|
+
* If no matching domain config exists, allows indexing by default.
|
|
139
|
+
*/
|
|
140
|
+
private shouldIndex;
|
|
141
|
+
/**
|
|
142
|
+
* Auto-generate embedding via LLM provider if configured and enabled.
|
|
143
|
+
* Returns null if LLM is not available or embedding is disabled.
|
|
144
|
+
*
|
|
145
|
+
* @param type - "passage" for write-time (document), "query" for query-time.
|
|
146
|
+
* Models like E5 require different prefixes for query vs passage.
|
|
147
|
+
*/
|
|
148
|
+
private autoEmbed;
|
|
149
|
+
/**
|
|
150
|
+
* Resolve the chat-action path used by query rewriters. Prefers an
|
|
151
|
+
* explicit `chatProvider` config; falls back to `<llmProvider>/.actions/chat`
|
|
152
|
+
* because the same AigneHub default endpoint hosts both embedding
|
|
153
|
+
* and chat actions in practice.
|
|
154
|
+
*/
|
|
155
|
+
private resolveChatProvider;
|
|
156
|
+
/**
|
|
157
|
+
* Generate paraphrases of `question` via the chat provider. Returns
|
|
158
|
+
* the paraphrases plus the original question (the original is kept
|
|
159
|
+
* as a safety net in case the rewrites drift). Returns just `[question]`
|
|
160
|
+
* if the chat call fails — degrades gracefully to baseline.
|
|
161
|
+
*/
|
|
162
|
+
private generateParaphrases;
|
|
163
|
+
/**
|
|
164
|
+
* Multi-query retrieval: generate N paraphrases, embed each, run a
|
|
165
|
+
* separate semantic query per variant, and RRF-fuse the result lists.
|
|
166
|
+
* The `index-diverse-bench` shows 2.6× MRR lift on paraphrase queries
|
|
167
|
+
* with this strategy. Each variant pulls top-(2×limit) so the fusion
|
|
168
|
+
* has enough candidates to differentiate; the final list is trimmed
|
|
169
|
+
* to the caller's requested limit.
|
|
170
|
+
*/
|
|
171
|
+
private queryWithMultiQuery;
|
|
172
|
+
}
|
|
173
|
+
//#endregion
|
|
174
|
+
export { AFSIndex };
|
|
175
|
+
//# sourceMappingURL=index-provider.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-provider.d.mts","names":[],"sources":["../src/index-provider.ts"],"mappings":";;;;;;;cAoLa,QAAA,SAAiB,eAAA;EAAA,SACnB,IAAA;EAAA,SACA,WAAA;EAAA,SACS,UAAA,EAAY,aAAA;EAAA,iBAEb,OAAA;EAAA,iBACA,WAAA;EAAA,QACT,OAAA;EAAA,QACA,WAAA;EAAA,iBACS,OAAA;EAAA,iBACA,UAAA;EAAA,iBACA,YAAA;EAAA,QACT,OAAA;EAAA,QACA,WAAA;EAAA,QACA,QAAA;EAAA,QACA,eAAA;EAAA,OAED,MAAA,CAAA,GAAM,CAAA,CAAA,SAAA;;;;SAIN,QAAA,CAAA,GAAY,gBAAA;cAsBP,OAAA,GAAS,eAAA;EAAA,QAWP,iBAAA;EAkBd,OAAA,CAAQ,IAAA,EAAM,OAAA,EAAS,UAAA;EAAA,QAwBT,gBAAA;EAAA,QAcA,iBAAA;EAAA,QAgBA,gBAAA;EAgER,KAAA,CAAA,GAAS,OAAA;EAiBT,QAAA,CAAS,GAAA,EAAK,YAAA,GAAe,OAAA,CAAQ,QAAA;EAUrC,QAAA,CAAS,GAAA,EAAK,YAAA,GAAe,OAAA,CAAQ,aAAA;EAgBrC,WAAA,CAAY,GAAA,EAAK,YAAA,GAAe,OAAA,CAAQ,aAAA;EA2B9C,WAAA,CAAY,GAAA,EAAK,YAAA,GAAe,QAAA;EAOhC,YAAA,CAAa,GAAA,EAAK,YAAA,GAAe,QAAA;EAOjC,aAAA,CAAc,GAAA,EAAK,YAAA,GAAe,QAAA;EAO5B,WAAA,CAAY,GAAA,EAAK,YAAA,GAAe,OAAA,CAAQ,aAAA;EAexC,YAAA,CAAa,GAAA,EAAK,YAAA,GAAe,OAAA,CAAQ,aAAA;EAY/C,UAAA,CAAW,GAAA,EAAK,YAAA,GAAe,aAAA;EAY/B,YAAA,CAAA,GAAgB,aAAA;EAKhB,aAAA,CAAA,GAAiB,aAAA;EAKX,cAAA,CAAe,GAAA,EAAK,YAAA;IAAe,IAAA;EAAA,KAAkB,OAAA,CAAQ,aAAA;EAiCnE,YAAA,CAAa,GAAA,EAAK,YAAA,GAAe,QAAA;EAMjC,eAAA,CAAgB,GAAA,EAAK,YAAA,GAAe,QAAA;EAMpC,aAAA,CAAc,GAAA,EAAK,YAAA,GAAe,QAAA;EAMlC,cAAA,CAAe,GAAA,EAAK,YAAA,GAAe,QAAA;EAMnC,gBAAA,CAAiB,GAAA,EAAK,YAAA,GAAe,QAAA;EAMrC,iBAAA,CAAkB,GAAA,EAAK,YAAA,GAAe,QAAA;EAMhC,kBAAA,CAAmB,GAAA,EAAK,YAAA;IAAe,IAAA;EAAA,KAAkB,OAAA,CAAQ,QAAA;EAUvE,gBAAA,CAAiB,GAAA,EAAK,YAAA,GAAe,QAAA;EASrC,WAAA,CAAY,IAAA,EAAM,YAAA,GAAe,gBAAA;EAQjC,WAAA,CAAY,GAAA,EAAK,YAAA;IAAe,IAAA;EAAA,KAAkB,gBAAA;EAU5C,aAAA,CACJ,IAAA,EAAM,YAAA;IAAe,IAAA;EAAA,IACrB,KAAA,UACA,OAAA,GAAU,gBAAA,GACT,OAAA,CAAQ,eAAA;EAyBL,UAAA,CAAW,GAAA,EAAK,YAAA;IAAe,GAAA;EAAA,KAAiB,OAAA,CAAQ,QAAA;EAoBxD,SAAA,CAAU,GAAA,EAAK,YAAA;IAAe,GAAA;EAAA,KAAiB,OAAA,CAAQ,QAAA;EAwBvD,SAAA,CAAU,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,oBAA0B,OAAA,CAAQ,aAAA;EAgEtE,SAAA,CAAU,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,oBAA0B,OAAA,CAAQ,aAAA;EAxFvB;;;;;;;EAAA,QAyQvC,gBAAA;EAsER,OAAA,CAAQ,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,oBAA0B,OAAA,CAAQ,aAAA;EAwCpE,WAAA,CAAY,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,oBAA0B,OAAA,CAAQ,aAAA;EAyBxE,WAAA,CAAY,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,oBAA0B,OAAA,CAAQ,aAAA;EAjEJ;;;;;;;;;;EAqHpE,UAAA,CAAW,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,oBAA0B,OAAA,CAAQ,aAAA;EAAlC;;;;;;;;EAkD3C,eAAA,CACE,OAAA,EAAS,KAAA;IACP,IAAA;IACA,KAAA;IACA,WAAA,EAAa,oBAAA;IACb,MAAA,GAAS,WAAA;EAAA;EAiG0D;;;;;EA9EvE,WAAA,CAAY,QAAA,EAAU,aAAA;EAAA,QAUd,gBAAA;EA1/BU;;;;;;;;;;;;;;EAAA,QA2hCV,+BAAA;EAYF,kBAAA,CACJ,IAAA,EAAM,YAAA,EACN,IAAA,EAAM,MAAA,oBACL,OAAA,CAAQ,aAAA;EAoBL,YAAA,CAAa,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,MAAA,oBAA0B,OAAA,CAAQ,aAAA;EAAA,QAkCjE,gBAAA;;;;;;UAuFN,WAAA;;;;;;;;UAgCM,SAAA;EA/qCO;;;;;;EAAA,QAssCb,mBAAA;EAjpCM;;;;;;EAAA,QA+pCA,mBAAA;EAhjCC;;;;;;;;EAAA,QA4lCD,mBAAA;AAAA"}
|