@alextis59/athena 1.0.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 (201) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +147 -0
  3. package/dist/agent/ask.d.ts +7 -0
  4. package/dist/agent/ask.d.ts.map +1 -0
  5. package/dist/agent/ask.js +35 -0
  6. package/dist/agent/ask.js.map +1 -0
  7. package/dist/agent/citations.d.ts +27 -0
  8. package/dist/agent/citations.d.ts.map +1 -0
  9. package/dist/agent/citations.js +190 -0
  10. package/dist/agent/citations.js.map +1 -0
  11. package/dist/agent/fake-provider.d.ts +9 -0
  12. package/dist/agent/fake-provider.d.ts.map +1 -0
  13. package/dist/agent/fake-provider.js +51 -0
  14. package/dist/agent/fake-provider.js.map +1 -0
  15. package/dist/agent/index.d.ts +10 -0
  16. package/dist/agent/index.d.ts.map +1 -0
  17. package/dist/agent/index.js +6 -0
  18. package/dist/agent/index.js.map +1 -0
  19. package/dist/agent/loop.d.ts +11 -0
  20. package/dist/agent/loop.d.ts.map +1 -0
  21. package/dist/agent/loop.js +156 -0
  22. package/dist/agent/loop.js.map +1 -0
  23. package/dist/agent/providers.d.ts +17 -0
  24. package/dist/agent/providers.d.ts.map +1 -0
  25. package/dist/agent/providers.js +171 -0
  26. package/dist/agent/providers.js.map +1 -0
  27. package/dist/agent/tools.d.ts +8 -0
  28. package/dist/agent/tools.d.ts.map +1 -0
  29. package/dist/agent/tools.js +233 -0
  30. package/dist/agent/tools.js.map +1 -0
  31. package/dist/agent/types.d.ts +84 -0
  32. package/dist/agent/types.d.ts.map +1 -0
  33. package/dist/agent/types.js +2 -0
  34. package/dist/agent/types.js.map +1 -0
  35. package/dist/cli/help.d.ts +2 -0
  36. package/dist/cli/help.d.ts.map +1 -0
  37. package/dist/cli/help.js +28 -0
  38. package/dist/cli/help.js.map +1 -0
  39. package/dist/cli/main.d.ts +3 -0
  40. package/dist/cli/main.d.ts.map +1 -0
  41. package/dist/cli/main.js +5 -0
  42. package/dist/cli/main.js.map +1 -0
  43. package/dist/cli/options.d.ts +21 -0
  44. package/dist/cli/options.d.ts.map +1 -0
  45. package/dist/cli/options.js +97 -0
  46. package/dist/cli/options.js.map +1 -0
  47. package/dist/cli/run.d.ts +21 -0
  48. package/dist/cli/run.d.ts.map +1 -0
  49. package/dist/cli/run.js +144 -0
  50. package/dist/cli/run.js.map +1 -0
  51. package/dist/config/index.d.ts +4 -0
  52. package/dist/config/index.d.ts.map +1 -0
  53. package/dist/config/index.js +3 -0
  54. package/dist/config/index.js.map +1 -0
  55. package/dist/config/loader.d.ts +14 -0
  56. package/dist/config/loader.d.ts.map +1 -0
  57. package/dist/config/loader.js +352 -0
  58. package/dist/config/loader.js.map +1 -0
  59. package/dist/config/schema.d.ts +6 -0
  60. package/dist/config/schema.d.ts.map +1 -0
  61. package/dist/config/schema.js +72 -0
  62. package/dist/config/schema.js.map +1 -0
  63. package/dist/config/types.d.ts +53 -0
  64. package/dist/config/types.d.ts.map +1 -0
  65. package/dist/config/types.js +2 -0
  66. package/dist/config/types.js.map +1 -0
  67. package/dist/doctor/doctor.d.ts +47 -0
  68. package/dist/doctor/doctor.d.ts.map +1 -0
  69. package/dist/doctor/doctor.js +159 -0
  70. package/dist/doctor/doctor.js.map +1 -0
  71. package/dist/embeddings/index.d.ts +117 -0
  72. package/dist/embeddings/index.d.ts.map +1 -0
  73. package/dist/embeddings/index.js +515 -0
  74. package/dist/embeddings/index.js.map +1 -0
  75. package/dist/errors.d.ts +19 -0
  76. package/dist/errors.d.ts.map +1 -0
  77. package/dist/errors.js +37 -0
  78. package/dist/errors.js.map +1 -0
  79. package/dist/index.d.ts +17 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +9 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/indexer/discovery.d.ts +10 -0
  84. package/dist/indexer/discovery.d.ts.map +1 -0
  85. package/dist/indexer/discovery.js +38 -0
  86. package/dist/indexer/discovery.js.map +1 -0
  87. package/dist/indexer/hash.d.ts +3 -0
  88. package/dist/indexer/hash.d.ts.map +1 -0
  89. package/dist/indexer/hash.js +11 -0
  90. package/dist/indexer/hash.js.map +1 -0
  91. package/dist/indexer/index.d.ts +7 -0
  92. package/dist/indexer/index.d.ts.map +1 -0
  93. package/dist/indexer/index.js +5 -0
  94. package/dist/indexer/index.js.map +1 -0
  95. package/dist/indexer/kinds.d.ts +4 -0
  96. package/dist/indexer/kinds.d.ts.map +1 -0
  97. package/dist/indexer/kinds.js +38 -0
  98. package/dist/indexer/kinds.js.map +1 -0
  99. package/dist/indexer/run.d.ts +42 -0
  100. package/dist/indexer/run.d.ts.map +1 -0
  101. package/dist/indexer/run.js +563 -0
  102. package/dist/indexer/run.js.map +1 -0
  103. package/dist/logging/logger.d.ts +11 -0
  104. package/dist/logging/logger.d.ts.map +1 -0
  105. package/dist/logging/logger.js +18 -0
  106. package/dist/logging/logger.js.map +1 -0
  107. package/dist/mcp/index.d.ts +35 -0
  108. package/dist/mcp/index.d.ts.map +1 -0
  109. package/dist/mcp/index.js +392 -0
  110. package/dist/mcp/index.js.map +1 -0
  111. package/dist/parsers/chunking.d.ts +4 -0
  112. package/dist/parsers/chunking.d.ts.map +1 -0
  113. package/dist/parsers/chunking.js +112 -0
  114. package/dist/parsers/chunking.js.map +1 -0
  115. package/dist/parsers/index.d.ts +8 -0
  116. package/dist/parsers/index.d.ts.map +1 -0
  117. package/dist/parsers/index.js +5 -0
  118. package/dist/parsers/index.js.map +1 -0
  119. package/dist/parsers/line-parser.d.ts +13 -0
  120. package/dist/parsers/line-parser.d.ts.map +1 -0
  121. package/dist/parsers/line-parser.js +242 -0
  122. package/dist/parsers/line-parser.js.map +1 -0
  123. package/dist/parsers/normalize.d.ts +4 -0
  124. package/dist/parsers/normalize.d.ts.map +1 -0
  125. package/dist/parsers/normalize.js +17 -0
  126. package/dist/parsers/normalize.js.map +1 -0
  127. package/dist/parsers/parser.d.ts +14 -0
  128. package/dist/parsers/parser.d.ts.map +1 -0
  129. package/dist/parsers/parser.js +77 -0
  130. package/dist/parsers/parser.js.map +1 -0
  131. package/dist/parsers/pdf2llm.d.ts +14 -0
  132. package/dist/parsers/pdf2llm.d.ts.map +1 -0
  133. package/dist/parsers/pdf2llm.js +215 -0
  134. package/dist/parsers/pdf2llm.js.map +1 -0
  135. package/dist/parsers/types.d.ts +48 -0
  136. package/dist/parsers/types.d.ts.map +1 -0
  137. package/dist/parsers/types.js +2 -0
  138. package/dist/parsers/types.js.map +1 -0
  139. package/dist/retrieval/index.d.ts +4 -0
  140. package/dist/retrieval/index.d.ts.map +1 -0
  141. package/dist/retrieval/index.js +3 -0
  142. package/dist/retrieval/index.js.map +1 -0
  143. package/dist/retrieval/schemas.d.ts +127 -0
  144. package/dist/retrieval/schemas.d.ts.map +1 -0
  145. package/dist/retrieval/schemas.js +65 -0
  146. package/dist/retrieval/schemas.js.map +1 -0
  147. package/dist/retrieval/tools.d.ts +31 -0
  148. package/dist/retrieval/tools.d.ts.map +1 -0
  149. package/dist/retrieval/tools.js +803 -0
  150. package/dist/retrieval/tools.js.map +1 -0
  151. package/dist/retrieval/types.d.ts +104 -0
  152. package/dist/retrieval/types.d.ts.map +1 -0
  153. package/dist/retrieval/types.js +2 -0
  154. package/dist/retrieval/types.js.map +1 -0
  155. package/dist/server/index.d.ts +3 -0
  156. package/dist/server/index.d.ts.map +1 -0
  157. package/dist/server/index.js +2 -0
  158. package/dist/server/index.js.map +1 -0
  159. package/dist/server/server.d.ts +49 -0
  160. package/dist/server/server.d.ts.map +1 -0
  161. package/dist/server/server.js +517 -0
  162. package/dist/server/server.js.map +1 -0
  163. package/dist/shared/types.d.ts +98 -0
  164. package/dist/shared/types.d.ts.map +1 -0
  165. package/dist/shared/types.js +2 -0
  166. package/dist/shared/types.js.map +1 -0
  167. package/dist/storage/database.d.ts +18 -0
  168. package/dist/storage/database.d.ts.map +1 -0
  169. package/dist/storage/database.js +66 -0
  170. package/dist/storage/database.js.map +1 -0
  171. package/dist/storage/index.d.ts +8 -0
  172. package/dist/storage/index.d.ts.map +1 -0
  173. package/dist/storage/index.js +5 -0
  174. package/dist/storage/index.js.map +1 -0
  175. package/dist/storage/migrations.d.ts +15 -0
  176. package/dist/storage/migrations.d.ts.map +1 -0
  177. package/dist/storage/migrations.js +170 -0
  178. package/dist/storage/migrations.js.map +1 -0
  179. package/dist/storage/paths.d.ts +15 -0
  180. package/dist/storage/paths.d.ts.map +1 -0
  181. package/dist/storage/paths.js +27 -0
  182. package/dist/storage/paths.js.map +1 -0
  183. package/dist/storage/schema.d.ts +11 -0
  184. package/dist/storage/schema.d.ts.map +1 -0
  185. package/dist/storage/schema.js +40 -0
  186. package/dist/storage/schema.js.map +1 -0
  187. package/dist/ui/index.d.ts +2 -0
  188. package/dist/ui/index.d.ts.map +1 -0
  189. package/dist/ui/index.js +2 -0
  190. package/dist/ui/index.js.map +1 -0
  191. package/dist/ui/static-app.d.ts +2 -0
  192. package/dist/ui/static-app.d.ts.map +1 -0
  193. package/dist/ui/static-app.js +735 -0
  194. package/dist/ui/static-app.js.map +1 -0
  195. package/docs/adr/0001-sqlite-driver.md +23 -0
  196. package/docs/agentic-rag-specifications.md +659 -0
  197. package/docs/agentic-rag-study.md +1056 -0
  198. package/docs/implementation-plan.md +1425 -0
  199. package/docs/mcp-integration.md +154 -0
  200. package/docs/validation-corpus.md +71 -0
  201. package/package.json +79 -0
@@ -0,0 +1,515 @@
1
+ import { createHash } from "node:crypto";
2
+ import { UserFacingError } from "../errors.js";
3
+ import { hashString } from "../indexer/hash.js";
4
+ export const DEFAULT_EMBEDDING_REVISION = "local-deterministic-v2";
5
+ const TRANSFORMERS_JS_REVISION = "transformers-js-4.2.0";
6
+ const OLLAMA_EMBEDDING_REVISION = "ollama-api-embed-v1";
7
+ const OPENAI_EMBEDDING_REVISION = "openai-embeddings-v1";
8
+ const VOYAGE_EMBEDDING_REVISION = "voyage-embeddings-v1";
9
+ const COHERE_EMBEDDING_REVISION = "cohere-embed-v2";
10
+ const GEMINI_EMBEDDING_REVISION = "gemini-batch-embedcontents-v1beta";
11
+ const credentialEnvByEmbeddingProvider = {
12
+ openai: "OPENAI_API_KEY",
13
+ voyage: "VOYAGE_API_KEY",
14
+ cohere: "COHERE_API_KEY",
15
+ gemini: "GEMINI_API_KEY"
16
+ };
17
+ const embeddingRevisionByProvider = {
18
+ ollama: OLLAMA_EMBEDDING_REVISION,
19
+ openai: OPENAI_EMBEDDING_REVISION,
20
+ voyage: VOYAGE_EMBEDDING_REVISION,
21
+ cohere: COHERE_EMBEDDING_REVISION,
22
+ gemini: GEMINI_EMBEDDING_REVISION
23
+ };
24
+ export function createEmbeddingProvider(config, options = {}) {
25
+ validateEmbeddingProviderConfig(config, options.env);
26
+ if (config.provider === "none") {
27
+ return null;
28
+ }
29
+ if (config.provider === "transformers-js") {
30
+ return new TransformersJsEmbeddingProvider(config);
31
+ }
32
+ if (config.provider === "ollama") {
33
+ return new OllamaEmbeddingProvider(config, options);
34
+ }
35
+ return new RemoteRestEmbeddingProvider(config, options);
36
+ }
37
+ export function validateEmbeddingProviderConfig(config, env = process.env) {
38
+ if (config.provider === "none") {
39
+ return;
40
+ }
41
+ if (config.model.trim() === "") {
42
+ throw new UserFacingError(`embeddings.model is required when embeddings.provider is '${config.provider}'.`);
43
+ }
44
+ const credentialEnv = credentialEnvByEmbeddingProvider[config.provider];
45
+ if (credentialEnv !== undefined) {
46
+ if (!config.allowRemoteDocumentText) {
47
+ throw new UserFacingError(`embeddings.allowRemoteDocumentText must be true before documents can be sent to ${config.provider}.`);
48
+ }
49
+ if (env[credentialEnv] === undefined) {
50
+ throw new UserFacingError(`${credentialEnv} is required when embeddings.provider is '${config.provider}'.`);
51
+ }
52
+ }
53
+ }
54
+ export class DeterministicEmbeddingProvider {
55
+ metadata;
56
+ constructor(config, options = {}) {
57
+ this.metadata = {
58
+ provider: config.provider,
59
+ model: config.model,
60
+ dimensions: config.dimensions,
61
+ pooling: config.pooling,
62
+ normalize: config.normalize,
63
+ quantization: "none",
64
+ revision: options.revision ?? DEFAULT_EMBEDDING_REVISION,
65
+ implementation: options.implementation ?? "deterministic"
66
+ };
67
+ }
68
+ embed(inputs) {
69
+ return Promise.resolve(inputs.map((input) => {
70
+ const vector = createDeterministicEmbeddingVector(input.normalizedText, this.metadata.dimensions);
71
+ return {
72
+ chunkId: input.chunkId,
73
+ vector: this.metadata.normalize ? normalizeVector(vector) : vector,
74
+ metadata: this.metadata
75
+ };
76
+ }));
77
+ }
78
+ }
79
+ export class TransformersJsEmbeddingProvider {
80
+ config;
81
+ transformersMetadata;
82
+ fallbackProvider;
83
+ loader;
84
+ extractor = null;
85
+ prepared = false;
86
+ usingFallback = false;
87
+ constructor(config, options = {}) {
88
+ this.config = config;
89
+ this.transformersMetadata = {
90
+ provider: config.provider,
91
+ model: config.model,
92
+ dimensions: config.dimensions,
93
+ pooling: config.pooling,
94
+ normalize: config.normalize,
95
+ quantization: "none",
96
+ revision: options.revision ?? TRANSFORMERS_JS_REVISION,
97
+ implementation: "transformers-js"
98
+ };
99
+ const fallbackOptions = {
100
+ implementation: "transformers-js-local-deterministic"
101
+ };
102
+ if (options.fallbackRevision !== undefined) {
103
+ fallbackOptions.revision = options.fallbackRevision;
104
+ }
105
+ this.fallbackProvider = new DeterministicEmbeddingProvider(config, fallbackOptions);
106
+ this.loader = options.loader ?? loadTransformersJsPipeline;
107
+ }
108
+ get metadata() {
109
+ return this.usingFallback
110
+ ? this.fallbackProvider.metadata
111
+ : this.transformersMetadata;
112
+ }
113
+ async prepare() {
114
+ if (this.prepared) {
115
+ return;
116
+ }
117
+ try {
118
+ this.extractor = await this.loader("feature-extraction", this.config.model, { local_files_only: true });
119
+ }
120
+ catch {
121
+ this.usingFallback = true;
122
+ }
123
+ finally {
124
+ this.prepared = true;
125
+ }
126
+ }
127
+ async embed(inputs) {
128
+ await this.prepare();
129
+ if (this.usingFallback || this.extractor === null) {
130
+ return await this.fallbackProvider.embed(inputs);
131
+ }
132
+ const tensor = await this.extractor(inputs.map((input) => input.normalizedText), {
133
+ pooling: this.config.pooling,
134
+ normalize: this.config.normalize
135
+ });
136
+ const vectors = tensorToVectors(tensor, inputs.length, this.config.dimensions);
137
+ return inputs.map((input, index) => ({
138
+ chunkId: input.chunkId,
139
+ vector: vectors[index] ?? new Float32Array(this.config.dimensions),
140
+ metadata: this.transformersMetadata
141
+ }));
142
+ }
143
+ }
144
+ export class OllamaEmbeddingProvider {
145
+ config;
146
+ metadata;
147
+ fetchImpl;
148
+ endpoint;
149
+ constructor(config, options = {}) {
150
+ this.config = config;
151
+ this.fetchImpl = options.fetch ?? fetch;
152
+ this.endpoint = `${normalizeBaseUrl(options.ollamaBaseUrl ??
153
+ options.env?.OLLAMA_HOST ??
154
+ "http://127.0.0.1:11434")}/api/embed`;
155
+ this.metadata = createEmbeddingMetadata(config, "ollama-rest", OLLAMA_EMBEDDING_REVISION);
156
+ }
157
+ async embed(inputs) {
158
+ if (inputs.length === 0) {
159
+ return [];
160
+ }
161
+ const json = await postJson(this.fetchImpl, this.endpoint, {
162
+ model: this.config.model,
163
+ input: inputs.map((input) => input.normalizedText)
164
+ }, { provider: "ollama" });
165
+ const embeddings = readNumberMatrix(json, ["embeddings"], "ollama");
166
+ return createEmbeddingVectors(inputs, embeddings, this.metadata);
167
+ }
168
+ }
169
+ export class RemoteRestEmbeddingProvider {
170
+ config;
171
+ options;
172
+ metadata;
173
+ fetchImpl;
174
+ env;
175
+ constructor(config, options = {}) {
176
+ this.config = config;
177
+ this.options = options;
178
+ this.fetchImpl = options.fetch ?? fetch;
179
+ this.env = options.env ?? process.env;
180
+ const revision = embeddingRevisionByProvider[config.provider];
181
+ if (revision === undefined || config.provider === "ollama") {
182
+ throw new UserFacingError(`Unsupported remote embedding provider '${config.provider}'.`);
183
+ }
184
+ this.metadata = createEmbeddingMetadata(config, `${config.provider}-rest`, revision);
185
+ }
186
+ async embed(inputs) {
187
+ if (inputs.length === 0) {
188
+ return [];
189
+ }
190
+ switch (this.config.provider) {
191
+ case "openai":
192
+ return await this.embedOpenAi(inputs);
193
+ case "voyage":
194
+ return await this.embedVoyage(inputs);
195
+ case "cohere":
196
+ return await this.embedCohere(inputs);
197
+ case "gemini":
198
+ return await this.embedGemini(inputs);
199
+ default:
200
+ throw new UserFacingError(`Unsupported remote embedding provider '${this.config.provider}'.`);
201
+ }
202
+ }
203
+ async embedOpenAi(inputs) {
204
+ const apiKey = readApiKey(this.config.provider, this.env);
205
+ const body = compactJsonObject({
206
+ model: this.config.model,
207
+ input: inputs.map((input) => input.normalizedText),
208
+ dimensions: this.config.dimensions
209
+ });
210
+ const json = await postJson(this.fetchImpl, `${normalizeBaseUrl(this.options.openaiBaseUrl ?? "https://api.openai.com")}/v1/embeddings`, body, {
211
+ provider: "openai",
212
+ headers: { Authorization: `Bearer ${apiKey}` }
213
+ });
214
+ const embeddings = readIndexedEmbeddingData(json, "openai");
215
+ return createEmbeddingVectors(inputs, embeddings, this.metadata);
216
+ }
217
+ async embedVoyage(inputs) {
218
+ const apiKey = readApiKey(this.config.provider, this.env);
219
+ const body = compactJsonObject({
220
+ model: this.config.model,
221
+ input: inputs.map((input) => input.normalizedText),
222
+ input_type: "document",
223
+ output_dimension: this.config.dimensions
224
+ });
225
+ const json = await postJson(this.fetchImpl, `${normalizeBaseUrl(this.options.voyageBaseUrl ?? "https://api.voyageai.com")}/v1/embeddings`, body, {
226
+ provider: "voyage",
227
+ headers: { Authorization: `Bearer ${apiKey}` }
228
+ });
229
+ const embeddings = readIndexedEmbeddingData(json, "voyage");
230
+ return createEmbeddingVectors(inputs, embeddings, this.metadata);
231
+ }
232
+ async embedCohere(inputs) {
233
+ const apiKey = readApiKey(this.config.provider, this.env);
234
+ const body = compactJsonObject({
235
+ model: this.config.model,
236
+ texts: inputs.map((input) => input.normalizedText),
237
+ input_type: "search_document",
238
+ embedding_types: ["float"],
239
+ output_dimension: this.config.dimensions
240
+ });
241
+ const json = await postJson(this.fetchImpl, `${normalizeBaseUrl(this.options.cohereBaseUrl ?? "https://api.cohere.com")}/v2/embed`, body, {
242
+ provider: "cohere",
243
+ headers: { Authorization: `Bearer ${apiKey}` }
244
+ });
245
+ const embeddings = readNumberMatrix(json, ["embeddings", "float"], "cohere");
246
+ return createEmbeddingVectors(inputs, embeddings, this.metadata);
247
+ }
248
+ async embedGemini(inputs) {
249
+ const apiKey = readApiKey(this.config.provider, this.env);
250
+ const modelPath = this.config.model.startsWith("models/")
251
+ ? this.config.model
252
+ : `models/${this.config.model}`;
253
+ const json = await postJson(this.fetchImpl, `${normalizeBaseUrl(this.options.geminiBaseUrl ??
254
+ "https://generativelanguage.googleapis.com")}/v1beta/${modelPath}:batchEmbedContents`, {
255
+ requests: inputs.map((input) => ({
256
+ model: modelPath,
257
+ content: { parts: [{ text: input.normalizedText }] },
258
+ embedContentConfig: {
259
+ outputDimensionality: this.config.dimensions
260
+ }
261
+ }))
262
+ }, {
263
+ provider: "gemini",
264
+ headers: { "x-goog-api-key": apiKey }
265
+ });
266
+ const embeddings = readGeminiEmbeddings(json);
267
+ return createEmbeddingVectors(inputs, embeddings, this.metadata);
268
+ }
269
+ }
270
+ export function createEmbeddingCacheKey(input) {
271
+ return hashString(JSON.stringify({
272
+ chunkId: input.chunkId,
273
+ normalizedTextHash: hashString(input.normalizedText),
274
+ provider: input.provider,
275
+ model: input.model,
276
+ dimensions: input.dimensions,
277
+ pooling: input.pooling,
278
+ normalize: input.normalize,
279
+ quantization: input.quantization,
280
+ revision: input.revision,
281
+ chunkingVersion: input.chunkingVersion
282
+ }));
283
+ }
284
+ export function encodeVector(vector) {
285
+ return Buffer.from(vector.buffer, vector.byteOffset, vector.byteLength);
286
+ }
287
+ export function decodeVector(buffer) {
288
+ return new Float32Array(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength));
289
+ }
290
+ async function loadTransformersJsPipeline(task, model, options) {
291
+ const transformers = await import("@huggingface/transformers");
292
+ transformers.env.allowRemoteModels = false;
293
+ return (await transformers.pipeline(task, model, options));
294
+ }
295
+ function tensorToVectors(tensor, inputCount, dimensions) {
296
+ const outputDimensions = tensor.dims.length === 1
297
+ ? tensor.dims[0]
298
+ : tensor.dims[tensor.dims.length - 1];
299
+ if (outputDimensions !== dimensions) {
300
+ throw new UserFacingError(`Embedding model returned ${String(outputDimensions)} dimensions, expected ${String(dimensions)}.`);
301
+ }
302
+ const batchSize = tensor.dims.length === 1 ? 1 : (tensor.dims[0] ?? 0);
303
+ if (batchSize !== inputCount) {
304
+ throw new UserFacingError(`Embedding model returned ${String(batchSize)} vectors for ${String(inputCount)} inputs.`);
305
+ }
306
+ return Array.from({ length: inputCount }, (_, inputIndex) => {
307
+ const vector = new Float32Array(dimensions);
308
+ const offset = inputIndex * dimensions;
309
+ for (let index = 0; index < dimensions; index += 1) {
310
+ vector[index] = tensor.data[offset + index] ?? 0;
311
+ }
312
+ return vector;
313
+ });
314
+ }
315
+ function createEmbeddingMetadata(config, implementation, revision) {
316
+ return {
317
+ provider: config.provider,
318
+ model: config.model,
319
+ dimensions: config.dimensions,
320
+ pooling: config.pooling,
321
+ normalize: config.normalize,
322
+ quantization: "none",
323
+ revision,
324
+ implementation
325
+ };
326
+ }
327
+ function normalizeBaseUrl(url) {
328
+ return url.replace(/\/+$/u, "");
329
+ }
330
+ function readApiKey(provider, env) {
331
+ const envName = credentialEnvByEmbeddingProvider[provider];
332
+ if (envName === undefined) {
333
+ throw new UserFacingError(`No API key environment variable is configured for ${provider}.`);
334
+ }
335
+ const value = env[envName]?.trim();
336
+ if (value === undefined || value === "") {
337
+ throw new UserFacingError(`${envName} is required when embeddings.provider is '${provider}'.`);
338
+ }
339
+ return value;
340
+ }
341
+ function compactJsonObject(value) {
342
+ return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
343
+ }
344
+ async function postJson(fetchImpl, url, body, options) {
345
+ let response;
346
+ try {
347
+ response = await fetchImpl(url, {
348
+ method: "POST",
349
+ headers: {
350
+ "content-type": "application/json",
351
+ ...options.headers
352
+ },
353
+ body: JSON.stringify(body)
354
+ });
355
+ }
356
+ catch (error) {
357
+ throw new UserFacingError(`Embedding request to ${options.provider} failed: ${String(error)}`);
358
+ }
359
+ if (!response.ok) {
360
+ const responseText = await response.text().catch(() => "");
361
+ const detail = responseText.trim();
362
+ throw new UserFacingError(`Embedding request to ${options.provider} failed with HTTP ${String(response.status)}${detail === "" ? "." : `: ${detail}`}`);
363
+ }
364
+ try {
365
+ return await response.json();
366
+ }
367
+ catch {
368
+ throw new UserFacingError(`Embedding request to ${options.provider} returned invalid JSON.`);
369
+ }
370
+ }
371
+ function createEmbeddingVectors(inputs, embeddings, metadata) {
372
+ if (embeddings.length !== inputs.length) {
373
+ throw new UserFacingError(`Embedding provider returned ${String(embeddings.length)} vectors for ${String(inputs.length)} inputs.`);
374
+ }
375
+ return inputs.map((input, index) => {
376
+ const values = embeddings[index];
377
+ if (values === undefined) {
378
+ throw new UserFacingError(`Embedding provider omitted vector ${String(index)}.`);
379
+ }
380
+ if (values.length !== metadata.dimensions) {
381
+ throw new UserFacingError(`Embedding provider returned ${String(values.length)} dimensions, expected ${String(metadata.dimensions)}.`);
382
+ }
383
+ const vector = new Float32Array(metadata.dimensions);
384
+ for (let valueIndex = 0; valueIndex < values.length; valueIndex += 1) {
385
+ const value = values[valueIndex];
386
+ if (typeof value !== "number" || !Number.isFinite(value)) {
387
+ throw new UserFacingError(`Embedding provider returned a non-finite value at vector ${String(index)}, dimension ${String(valueIndex)}.`);
388
+ }
389
+ vector[valueIndex] = value;
390
+ }
391
+ return {
392
+ chunkId: input.chunkId,
393
+ vector: metadata.normalize ? normalizeVector(vector) : vector,
394
+ metadata
395
+ };
396
+ });
397
+ }
398
+ function readIndexedEmbeddingData(json, provider) {
399
+ const data = readArrayProperty(json, "data", provider);
400
+ const indexed = data.map((entry, fallbackIndex) => {
401
+ if (!isRecord(entry)) {
402
+ throw invalidProviderResponse(provider);
403
+ }
404
+ const indexValue = entry.index;
405
+ const index = typeof indexValue === "number" && Number.isInteger(indexValue)
406
+ ? indexValue
407
+ : fallbackIndex;
408
+ const embedding = readNumberArray(entry.embedding, provider);
409
+ return { index, embedding };
410
+ });
411
+ indexed.sort((first, second) => first.index - second.index);
412
+ return indexed.map((entry) => entry.embedding);
413
+ }
414
+ function readGeminiEmbeddings(json) {
415
+ const embeddings = readArrayProperty(json, "embeddings", "gemini");
416
+ return embeddings.map((entry) => {
417
+ if (!isRecord(entry)) {
418
+ throw invalidProviderResponse("gemini");
419
+ }
420
+ return readNumberArray(entry.values, "gemini");
421
+ });
422
+ }
423
+ function readNumberMatrix(json, path, provider) {
424
+ let current = json;
425
+ for (const key of path) {
426
+ if (!isRecord(current)) {
427
+ throw invalidProviderResponse(provider);
428
+ }
429
+ current = current[key];
430
+ }
431
+ if (!Array.isArray(current)) {
432
+ throw invalidProviderResponse(provider);
433
+ }
434
+ return current.map((entry) => readNumberArray(entry, provider));
435
+ }
436
+ function readArrayProperty(json, property, provider) {
437
+ if (!isRecord(json) || !Array.isArray(json[property])) {
438
+ throw invalidProviderResponse(provider);
439
+ }
440
+ return json[property];
441
+ }
442
+ function readNumberArray(value, provider) {
443
+ if (!Array.isArray(value)) {
444
+ throw invalidProviderResponse(provider);
445
+ }
446
+ return value.map((entry) => {
447
+ if (typeof entry !== "number" || !Number.isFinite(entry)) {
448
+ throw invalidProviderResponse(provider);
449
+ }
450
+ return entry;
451
+ });
452
+ }
453
+ function isRecord(value) {
454
+ return typeof value === "object" && value !== null;
455
+ }
456
+ function invalidProviderResponse(provider) {
457
+ return new UserFacingError(`Embedding request to ${provider} returned an invalid response shape.`);
458
+ }
459
+ export function createDeterministicEmbeddingVector(text, dimensions) {
460
+ const vector = new Float32Array(dimensions);
461
+ const tokens = tokenizeEmbeddingText(text);
462
+ for (const [index, token] of tokens.entries()) {
463
+ const digest = createHash("sha256")
464
+ .update(`${token}:${String(index)}`)
465
+ .digest();
466
+ for (let offset = 0; offset < digest.length; offset += 2) {
467
+ const dimension = (digest[offset] ?? 0) % dimensions;
468
+ const raw = digest[offset + 1] ?? 0;
469
+ vector[dimension] = (vector[dimension] ?? 0) + raw / 127.5 - 1;
470
+ }
471
+ }
472
+ return vector;
473
+ }
474
+ function tokenizeEmbeddingText(text) {
475
+ const rawTokens = text.toLowerCase().match(/[a-z0-9_./:-]+/gu) ?? [text];
476
+ const tokens = [];
477
+ for (const rawToken of rawTokens) {
478
+ const token = rawToken.endsWith("s") ? rawToken.slice(0, -1) : rawToken;
479
+ tokens.push(token);
480
+ const aliases = Object.prototype.hasOwnProperty.call(semanticAliases, token)
481
+ ? semanticAliases[token]
482
+ : undefined;
483
+ for (const alias of aliases ?? []) {
484
+ tokens.push(alias);
485
+ }
486
+ }
487
+ return tokens;
488
+ }
489
+ const semanticAliases = {
490
+ auth: ["authentication", "login", "credential", "oauth"],
491
+ authentication: ["auth", "login", "credential", "oauth"],
492
+ oauth: ["auth", "authentication", "login"],
493
+ login: ["auth", "authentication", "oauth"],
494
+ credential: ["token", "secret", "auth"],
495
+ token: ["credential", "secret", "auth"],
496
+ index: ["search", "retrieval", "embedding"],
497
+ indexing: ["index", "search", "retrieval", "embedding"],
498
+ retrieval: ["search", "index", "embedding"],
499
+ search: ["retrieval", "index", "embedding"]
500
+ };
501
+ function normalizeVector(vector) {
502
+ let magnitude = 0;
503
+ for (const value of vector) {
504
+ magnitude += value * value;
505
+ }
506
+ if (magnitude === 0) {
507
+ return vector;
508
+ }
509
+ const scale = 1 / Math.sqrt(magnitude);
510
+ for (let index = 0; index < vector.length; index += 1) {
511
+ vector[index] = (vector[index] ?? 0) * scale;
512
+ }
513
+ return vector;
514
+ }
515
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare enum ExitCode {
2
+ Success = 0,
3
+ RuntimeFailure = 1,
4
+ UsageError = 2,
5
+ Interrupted = 130
6
+ }
7
+ export declare class AthenaError extends Error {
8
+ readonly exitCode: ExitCode;
9
+ readonly cause?: unknown | undefined;
10
+ constructor(message: string, exitCode: ExitCode, cause?: unknown | undefined);
11
+ }
12
+ export declare class UserFacingError extends AthenaError {
13
+ constructor(message: string, cause?: unknown);
14
+ }
15
+ export declare class InternalFailure extends AthenaError {
16
+ constructor(message: string, cause?: unknown);
17
+ }
18
+ export declare function toAthenaError(error: unknown): AthenaError;
19
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,OAAO,IAAI;IACX,cAAc,IAAI;IAClB,UAAU,IAAI;IACd,WAAW,MAAM;CAClB;AAED,qBAAa,WAAY,SAAQ,KAAK;aAGlB,QAAQ,EAAE,QAAQ;aACT,KAAK,CAAC,EAAE,OAAO;gBAFxC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,QAAQ,EACT,KAAK,CAAC,EAAE,OAAO,YAAA;CAK3C;AAED,qBAAa,eAAgB,SAAQ,WAAW;gBAC3B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAGpD;AAED,qBAAa,eAAgB,SAAQ,WAAW;gBAC3B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAGpD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAUzD"}
package/dist/errors.js ADDED
@@ -0,0 +1,37 @@
1
+ export var ExitCode;
2
+ (function (ExitCode) {
3
+ ExitCode[ExitCode["Success"] = 0] = "Success";
4
+ ExitCode[ExitCode["RuntimeFailure"] = 1] = "RuntimeFailure";
5
+ ExitCode[ExitCode["UsageError"] = 2] = "UsageError";
6
+ ExitCode[ExitCode["Interrupted"] = 130] = "Interrupted";
7
+ })(ExitCode || (ExitCode = {}));
8
+ export class AthenaError extends Error {
9
+ exitCode;
10
+ cause;
11
+ constructor(message, exitCode, cause) {
12
+ super(message);
13
+ this.exitCode = exitCode;
14
+ this.cause = cause;
15
+ this.name = new.target.name;
16
+ }
17
+ }
18
+ export class UserFacingError extends AthenaError {
19
+ constructor(message, cause) {
20
+ super(message, ExitCode.UsageError, cause);
21
+ }
22
+ }
23
+ export class InternalFailure extends AthenaError {
24
+ constructor(message, cause) {
25
+ super(message, ExitCode.RuntimeFailure, cause);
26
+ }
27
+ }
28
+ export function toAthenaError(error) {
29
+ if (error instanceof AthenaError) {
30
+ return error;
31
+ }
32
+ if (error instanceof Error) {
33
+ return new InternalFailure(error.message, error);
34
+ }
35
+ return new InternalFailure("An unknown Athena failure occurred.", error);
36
+ }
37
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,6CAAW,CAAA;IACX,2DAAkB,CAAA;IAClB,mDAAc,CAAA;IACd,uDAAiB,CAAA;AACnB,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGlB;IACS;IAH3B,YACE,OAAe,EACC,QAAkB,EACT,KAAe;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,aAAQ,GAAR,QAAQ,CAAU;QACT,UAAK,GAAL,KAAK,CAAU;QAGxC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9C,YAAmB,OAAe,EAAE,KAAe;QACjD,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9C,YAAmB,OAAe,EAAE,KAAe;QACjD,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,IAAI,eAAe,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,17 @@
1
+ export { ConfigValidationError, DEFAULT_CONFIG_FILENAMES, defaultAthenaConfig, defineConfig, discoverConfigFile, loadConfig, resolveConfig } from "./config/index.js";
2
+ export { DEFAULT_MAX_AGENT_STEPS, FakeModelProvider, OllamaModelProvider, askQuestion, buildModelMessages, createModelToolDefinitions, createConfiguredModelProvider, parseAnswerCitations, parsePdfCitations, parseTextCitations, runAgentTurn, serializePdfCitation, serializeTextCitation, validateAnswerCitations, validateModelProviderConfig, renderTerminalCitations } from "./agent/index.js";
3
+ export { AthenaError, ExitCode, InternalFailure, UserFacingError } from "./errors.js";
4
+ export { DEFAULT_EMBEDDING_REVISION, DeterministicEmbeddingProvider, OllamaEmbeddingProvider, RemoteRestEmbeddingProvider, createEmbeddingCacheKey, createEmbeddingProvider, decodeVector, encodeVector, validateEmbeddingProviderConfig } from "./embeddings/index.js";
5
+ export { createLogger } from "./logging/logger.js";
6
+ export { RetrievalToolRuntime, toolSchemas } from "./retrieval/index.js";
7
+ export { startAthenaServer } from "./server/index.js";
8
+ export { SCHEMA_VERSION, countAvailable, getCacheState, getSchemaVersion, initializeDatabase, inspectDatabase, inspectSchema, migrateDatabase, openDatabase, requiredIndexes, requiredTables, resolveAthenaPaths, withTransaction } from "./storage/index.js";
9
+ export type { AthenaConfig, AthenaUserConfig, ChatProvider, ChatProviderConfig, ConfigDiagnostic, EmbeddingProvider, EmbeddingProviderConfig, IndexConfig, LoadedConfig, PdfConfig, ServerConfig } from "./config/index.js";
10
+ export type { Logger, LogLevel, LogSink } from "./logging/logger.js";
11
+ export type { GrepDocsInput, GrepDocsResult, ListDocsInput, ListDocsResult, ReadPdfSourceInput, ReadPdfSourceResult, ReadSourceRangeInput, ReadSourceRangeResult, RelatedChunkResult, RelatedChunksInput, RetrievalTrace, SearchDocsInput, SearchDocsResult } from "./retrieval/index.js";
12
+ export type { AthenaPaths, CacheState, DatabaseHealthReport, DatabaseSchemaHealth, DatabaseStatus, InitializedDatabase } from "./storage/index.js";
13
+ export type { AthenaServer, ServerStatus, StartServerOptions } from "./server/index.js";
14
+ export type { ChunkRecord, Citation, DocumentRecord, ParserArtifact, PdfLocator, ProviderEvent, SourceKind, SourceLocator, SourceRecord, TextLocator, ToolResult } from "./shared/types.js";
15
+ export type { AssistantModelMessage, AgentEvent, AgentTurnInput, AgentTurnResult, AskQuestionInput, CompactConversationTurn, CreateModelProviderOptions, FetchLike, ModelEvent, ModelFinishReason, ModelMessage, ModelProvider, ModelProviderRequest, ModelRole, ModelToolCall, ModelToolCallEvent, ModelToolDefinition, ModelToolResultMessage, ParsedCitation, ParsedPdfCitation, ParsedTextCitation, TextModelMessage, ValidateAnswerCitationsInput } from "./agent/index.js";
16
+ export type { EmbeddingCacheKeyInput, CreateEmbeddingProviderOptions, EmbeddingInput, EmbeddingVector, EmbeddingVectorMetadata, EmbeddingVectorProvider, FetchLike as EmbeddingFetchLike } from "./embeddings/index.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export { ConfigValidationError, DEFAULT_CONFIG_FILENAMES, defaultAthenaConfig, defineConfig, discoverConfigFile, loadConfig, resolveConfig } from "./config/index.js";
2
+ export { DEFAULT_MAX_AGENT_STEPS, FakeModelProvider, OllamaModelProvider, askQuestion, buildModelMessages, createModelToolDefinitions, createConfiguredModelProvider, parseAnswerCitations, parsePdfCitations, parseTextCitations, runAgentTurn, serializePdfCitation, serializeTextCitation, validateAnswerCitations, validateModelProviderConfig, renderTerminalCitations } from "./agent/index.js";
3
+ export { AthenaError, ExitCode, InternalFailure, UserFacingError } from "./errors.js";
4
+ export { DEFAULT_EMBEDDING_REVISION, DeterministicEmbeddingProvider, OllamaEmbeddingProvider, RemoteRestEmbeddingProvider, createEmbeddingCacheKey, createEmbeddingProvider, decodeVector, encodeVector, validateEmbeddingProviderConfig } from "./embeddings/index.js";
5
+ export { createLogger } from "./logging/logger.js";
6
+ export { RetrievalToolRuntime, toolSchemas } from "./retrieval/index.js";
7
+ export { startAthenaServer } from "./server/index.js";
8
+ export { SCHEMA_VERSION, countAvailable, getCacheState, getSchemaVersion, initializeDatabase, inspectDatabase, inspectSchema, migrateDatabase, openDatabase, requiredIndexes, requiredTables, resolveAthenaPaths, withTransaction } from "./storage/index.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,aAAa,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,0BAA0B,EAC1B,6BAA6B,EAC7B,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,WAAW,EACX,QAAQ,EACR,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,+BAA+B,EAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,eAAe,EACf,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,eAAe,EAChB,MAAM,oBAAoB,CAAC"}