iranti 0.1.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 (255) hide show
  1. package/.env.example +63 -0
  2. package/LICENSE +12 -0
  3. package/README.md +520 -0
  4. package/bin/iranti.js +24 -0
  5. package/dist/scripts/api-key-create.js +57 -0
  6. package/dist/scripts/api-key-list.js +42 -0
  7. package/dist/scripts/api-key-revoke.js +42 -0
  8. package/dist/scripts/iranti-cli.js +387 -0
  9. package/dist/scripts/seed-codebase.js +138 -0
  10. package/dist/scripts/seed.js +121 -0
  11. package/dist/scripts/setup.js +86 -0
  12. package/dist/src/api/archivistScheduler.d.ts +8 -0
  13. package/dist/src/api/archivistScheduler.d.ts.map +1 -0
  14. package/dist/src/api/archivistScheduler.js +100 -0
  15. package/dist/src/api/archivistScheduler.js.map +1 -0
  16. package/dist/src/api/diag.d.ts +2 -0
  17. package/dist/src/api/diag.d.ts.map +1 -0
  18. package/dist/src/api/diag.js +54 -0
  19. package/dist/src/api/diag.js.map +1 -0
  20. package/dist/src/api/middleware/auth.d.ts +3 -0
  21. package/dist/src/api/middleware/auth.d.ts.map +1 -0
  22. package/dist/src/api/middleware/auth.js +36 -0
  23. package/dist/src/api/middleware/auth.js.map +1 -0
  24. package/dist/src/api/middleware/authorization.d.ts +4 -0
  25. package/dist/src/api/middleware/authorization.d.ts.map +1 -0
  26. package/dist/src/api/middleware/authorization.js +54 -0
  27. package/dist/src/api/middleware/authorization.js.map +1 -0
  28. package/dist/src/api/middleware/rateLimit.d.ts +23 -0
  29. package/dist/src/api/middleware/rateLimit.d.ts.map +1 -0
  30. package/dist/src/api/middleware/rateLimit.js +70 -0
  31. package/dist/src/api/middleware/rateLimit.js.map +1 -0
  32. package/dist/src/api/middleware/validation.d.ts +128 -0
  33. package/dist/src/api/middleware/validation.d.ts.map +1 -0
  34. package/dist/src/api/middleware/validation.js +137 -0
  35. package/dist/src/api/middleware/validation.js.map +1 -0
  36. package/dist/src/api/repro.d.ts +2 -0
  37. package/dist/src/api/repro.d.ts.map +1 -0
  38. package/dist/src/api/repro.js +25 -0
  39. package/dist/src/api/repro.js.map +1 -0
  40. package/dist/src/api/routes/agents.d.ts +4 -0
  41. package/dist/src/api/routes/agents.d.ts.map +1 -0
  42. package/dist/src/api/routes/agents.js +56 -0
  43. package/dist/src/api/routes/agents.js.map +1 -0
  44. package/dist/src/api/routes/batch.d.ts +2 -0
  45. package/dist/src/api/routes/batch.d.ts.map +1 -0
  46. package/dist/src/api/routes/batch.js +63 -0
  47. package/dist/src/api/routes/batch.js.map +1 -0
  48. package/dist/src/api/routes/dev.d.ts +2 -0
  49. package/dist/src/api/routes/dev.d.ts.map +1 -0
  50. package/dist/src/api/routes/dev.js +29 -0
  51. package/dist/src/api/routes/dev.js.map +1 -0
  52. package/dist/src/api/routes/knowledge.d.ts +4 -0
  53. package/dist/src/api/routes/knowledge.d.ts.map +1 -0
  54. package/dist/src/api/routes/knowledge.js +184 -0
  55. package/dist/src/api/routes/knowledge.js.map +1 -0
  56. package/dist/src/api/routes/memory.d.ts +4 -0
  57. package/dist/src/api/routes/memory.d.ts.map +1 -0
  58. package/dist/src/api/routes/memory.js +150 -0
  59. package/dist/src/api/routes/memory.js.map +1 -0
  60. package/dist/src/api/server.d.ts +2 -0
  61. package/dist/src/api/server.d.ts.map +1 -0
  62. package/dist/src/api/server.js +191 -0
  63. package/dist/src/api/server.js.map +1 -0
  64. package/dist/src/archivist/index.d.ts +10 -0
  65. package/dist/src/archivist/index.d.ts.map +1 -0
  66. package/dist/src/archivist/index.js +232 -0
  67. package/dist/src/archivist/index.js.map +1 -0
  68. package/dist/src/attendant/AttendantInstance.d.ts +96 -0
  69. package/dist/src/attendant/AttendantInstance.d.ts.map +1 -0
  70. package/dist/src/attendant/AttendantInstance.js +808 -0
  71. package/dist/src/attendant/AttendantInstance.js.map +1 -0
  72. package/dist/src/attendant/index.d.ts +12 -0
  73. package/dist/src/attendant/index.d.ts.map +1 -0
  74. package/dist/src/attendant/index.js +39 -0
  75. package/dist/src/attendant/index.js.map +1 -0
  76. package/dist/src/attendant/registry.d.ts +6 -0
  77. package/dist/src/attendant/registry.d.ts.map +1 -0
  78. package/dist/src/attendant/registry.js +27 -0
  79. package/dist/src/attendant/registry.js.map +1 -0
  80. package/dist/src/generated/prisma/browser.d.ts +35 -0
  81. package/dist/src/generated/prisma/browser.d.ts.map +1 -0
  82. package/dist/src/generated/prisma/browser.js +57 -0
  83. package/dist/src/generated/prisma/browser.js.map +1 -0
  84. package/dist/src/generated/prisma/client.d.ts +54 -0
  85. package/dist/src/generated/prisma/client.d.ts.map +1 -0
  86. package/dist/src/generated/prisma/client.js +71 -0
  87. package/dist/src/generated/prisma/client.js.map +1 -0
  88. package/dist/src/generated/prisma/commonInputTypes.d.ts +415 -0
  89. package/dist/src/generated/prisma/commonInputTypes.d.ts.map +1 -0
  90. package/dist/src/generated/prisma/commonInputTypes.js +12 -0
  91. package/dist/src/generated/prisma/commonInputTypes.js.map +1 -0
  92. package/dist/src/generated/prisma/enums.d.ts +2 -0
  93. package/dist/src/generated/prisma/enums.d.ts.map +1 -0
  94. package/dist/src/generated/prisma/enums.js +12 -0
  95. package/dist/src/generated/prisma/enums.js.map +1 -0
  96. package/dist/src/generated/prisma/internal/class.d.ts +186 -0
  97. package/dist/src/generated/prisma/internal/class.d.ts.map +1 -0
  98. package/dist/src/generated/prisma/internal/class.js +86 -0
  99. package/dist/src/generated/prisma/internal/class.js.map +1 -0
  100. package/dist/src/generated/prisma/internal/prismaNamespace.d.ts +1015 -0
  101. package/dist/src/generated/prisma/internal/prismaNamespace.d.ts.map +1 -0
  102. package/dist/src/generated/prisma/internal/prismaNamespace.js +220 -0
  103. package/dist/src/generated/prisma/internal/prismaNamespace.js.map +1 -0
  104. package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.d.ts +152 -0
  105. package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.d.ts.map +1 -0
  106. package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.js +191 -0
  107. package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.js.map +1 -0
  108. package/dist/src/generated/prisma/models/Archive.d.ts +1425 -0
  109. package/dist/src/generated/prisma/models/Archive.d.ts.map +1 -0
  110. package/dist/src/generated/prisma/models/Archive.js +3 -0
  111. package/dist/src/generated/prisma/models/Archive.js.map +1 -0
  112. package/dist/src/generated/prisma/models/Entity.d.ts +1129 -0
  113. package/dist/src/generated/prisma/models/Entity.d.ts.map +1 -0
  114. package/dist/src/generated/prisma/models/Entity.js +3 -0
  115. package/dist/src/generated/prisma/models/Entity.js.map +1 -0
  116. package/dist/src/generated/prisma/models/EntityAlias.d.ts +1347 -0
  117. package/dist/src/generated/prisma/models/EntityAlias.d.ts.map +1 -0
  118. package/dist/src/generated/prisma/models/EntityAlias.js +3 -0
  119. package/dist/src/generated/prisma/models/EntityAlias.js.map +1 -0
  120. package/dist/src/generated/prisma/models/EntityRelationship.d.ts +1143 -0
  121. package/dist/src/generated/prisma/models/EntityRelationship.d.ts.map +1 -0
  122. package/dist/src/generated/prisma/models/EntityRelationship.js +3 -0
  123. package/dist/src/generated/prisma/models/EntityRelationship.js.map +1 -0
  124. package/dist/src/generated/prisma/models/KnowledgeEntry.d.ts +1322 -0
  125. package/dist/src/generated/prisma/models/KnowledgeEntry.d.ts.map +1 -0
  126. package/dist/src/generated/prisma/models/KnowledgeEntry.js +3 -0
  127. package/dist/src/generated/prisma/models/KnowledgeEntry.js.map +1 -0
  128. package/dist/src/generated/prisma/models/WriteReceipt.d.ts +1147 -0
  129. package/dist/src/generated/prisma/models/WriteReceipt.d.ts.map +1 -0
  130. package/dist/src/generated/prisma/models/WriteReceipt.js +3 -0
  131. package/dist/src/generated/prisma/models/WriteReceipt.js.map +1 -0
  132. package/dist/src/generated/prisma/models.d.ts +8 -0
  133. package/dist/src/generated/prisma/models.d.ts.map +1 -0
  134. package/dist/src/generated/prisma/models.js +3 -0
  135. package/dist/src/generated/prisma/models.js.map +1 -0
  136. package/dist/src/lib/escalationPaths.d.ts +9 -0
  137. package/dist/src/lib/escalationPaths.d.ts.map +1 -0
  138. package/dist/src/lib/escalationPaths.js +38 -0
  139. package/dist/src/lib/escalationPaths.js.map +1 -0
  140. package/dist/src/lib/llm.d.ts +32 -0
  141. package/dist/src/lib/llm.d.ts.map +1 -0
  142. package/dist/src/lib/llm.js +161 -0
  143. package/dist/src/lib/llm.js.map +1 -0
  144. package/dist/src/lib/metrics.d.ts +21 -0
  145. package/dist/src/lib/metrics.d.ts.map +1 -0
  146. package/dist/src/lib/metrics.js +46 -0
  147. package/dist/src/lib/metrics.js.map +1 -0
  148. package/dist/src/lib/providers/claude.d.ts +7 -0
  149. package/dist/src/lib/providers/claude.d.ts.map +1 -0
  150. package/dist/src/lib/providers/claude.js +9 -0
  151. package/dist/src/lib/providers/claude.js.map +1 -0
  152. package/dist/src/lib/providers/gemini.d.ts +10 -0
  153. package/dist/src/lib/providers/gemini.d.ts.map +1 -0
  154. package/dist/src/lib/providers/gemini.js +40 -0
  155. package/dist/src/lib/providers/gemini.js.map +1 -0
  156. package/dist/src/lib/providers/groq.d.ts +10 -0
  157. package/dist/src/lib/providers/groq.d.ts.map +1 -0
  158. package/dist/src/lib/providers/groq.js +39 -0
  159. package/dist/src/lib/providers/groq.js.map +1 -0
  160. package/dist/src/lib/providers/mistral.d.ts +10 -0
  161. package/dist/src/lib/providers/mistral.d.ts.map +1 -0
  162. package/dist/src/lib/providers/mistral.js +39 -0
  163. package/dist/src/lib/providers/mistral.js.map +1 -0
  164. package/dist/src/lib/providers/mock.d.ts +24 -0
  165. package/dist/src/lib/providers/mock.d.ts.map +1 -0
  166. package/dist/src/lib/providers/mock.js +129 -0
  167. package/dist/src/lib/providers/mock.js.map +1 -0
  168. package/dist/src/lib/providers/ollama.d.ts +10 -0
  169. package/dist/src/lib/providers/ollama.d.ts.map +1 -0
  170. package/dist/src/lib/providers/ollama.js +39 -0
  171. package/dist/src/lib/providers/ollama.js.map +1 -0
  172. package/dist/src/lib/providers/openai.d.ts +11 -0
  173. package/dist/src/lib/providers/openai.d.ts.map +1 -0
  174. package/dist/src/lib/providers/openai.js +38 -0
  175. package/dist/src/lib/providers/openai.js.map +1 -0
  176. package/dist/src/lib/requestContext.d.ts +8 -0
  177. package/dist/src/lib/requestContext.d.ts.map +1 -0
  178. package/dist/src/lib/requestContext.js +10 -0
  179. package/dist/src/lib/requestContext.js.map +1 -0
  180. package/dist/src/lib/router.d.ts +16 -0
  181. package/dist/src/lib/router.d.ts.map +1 -0
  182. package/dist/src/lib/router.js +63 -0
  183. package/dist/src/lib/router.js.map +1 -0
  184. package/dist/src/librarian/chunker.d.ts +16 -0
  185. package/dist/src/librarian/chunker.d.ts.map +1 -0
  186. package/dist/src/librarian/chunker.js +67 -0
  187. package/dist/src/librarian/chunker.js.map +1 -0
  188. package/dist/src/librarian/getPolicy.d.ts +3 -0
  189. package/dist/src/librarian/getPolicy.d.ts.map +1 -0
  190. package/dist/src/librarian/getPolicy.js +22 -0
  191. package/dist/src/librarian/getPolicy.js.map +1 -0
  192. package/dist/src/librarian/guards.d.ts +9 -0
  193. package/dist/src/librarian/guards.d.ts.map +1 -0
  194. package/dist/src/librarian/guards.js +52 -0
  195. package/dist/src/librarian/guards.js.map +1 -0
  196. package/dist/src/librarian/index.d.ts +20 -0
  197. package/dist/src/librarian/index.d.ts.map +1 -0
  198. package/dist/src/librarian/index.js +512 -0
  199. package/dist/src/librarian/index.js.map +1 -0
  200. package/dist/src/librarian/policy.d.ts +13 -0
  201. package/dist/src/librarian/policy.d.ts.map +1 -0
  202. package/dist/src/librarian/policy.js +20 -0
  203. package/dist/src/librarian/policy.js.map +1 -0
  204. package/dist/src/librarian/scoring.d.ts +8 -0
  205. package/dist/src/librarian/scoring.d.ts.map +1 -0
  206. package/dist/src/librarian/scoring.js +10 -0
  207. package/dist/src/librarian/scoring.js.map +1 -0
  208. package/dist/src/librarian/source-reliability.d.ts +8 -0
  209. package/dist/src/librarian/source-reliability.d.ts.map +1 -0
  210. package/dist/src/librarian/source-reliability.js +105 -0
  211. package/dist/src/librarian/source-reliability.js.map +1 -0
  212. package/dist/src/library/agent-registry.d.ts +31 -0
  213. package/dist/src/library/agent-registry.d.ts.map +1 -0
  214. package/dist/src/library/agent-registry.js +197 -0
  215. package/dist/src/library/agent-registry.js.map +1 -0
  216. package/dist/src/library/client.d.ts +5 -0
  217. package/dist/src/library/client.d.ts.map +1 -0
  218. package/dist/src/library/client.js +39 -0
  219. package/dist/src/library/client.js.map +1 -0
  220. package/dist/src/library/entity-resolution.d.ts +47 -0
  221. package/dist/src/library/entity-resolution.d.ts.map +1 -0
  222. package/dist/src/library/entity-resolution.js +344 -0
  223. package/dist/src/library/entity-resolution.js.map +1 -0
  224. package/dist/src/library/locks.d.ts +9 -0
  225. package/dist/src/library/locks.d.ts.map +1 -0
  226. package/dist/src/library/locks.js +38 -0
  227. package/dist/src/library/locks.js.map +1 -0
  228. package/dist/src/library/queries.d.ts +66 -0
  229. package/dist/src/library/queries.d.ts.map +1 -0
  230. package/dist/src/library/queries.js +169 -0
  231. package/dist/src/library/queries.js.map +1 -0
  232. package/dist/src/library/relationships.d.ts +30 -0
  233. package/dist/src/library/relationships.d.ts.map +1 -0
  234. package/dist/src/library/relationships.js +97 -0
  235. package/dist/src/library/relationships.js.map +1 -0
  236. package/dist/src/sdk/index.d.ts +108 -0
  237. package/dist/src/sdk/index.d.ts.map +1 -0
  238. package/dist/src/sdk/index.js +323 -0
  239. package/dist/src/sdk/index.js.map +1 -0
  240. package/dist/src/security/apiKeys.d.ts +48 -0
  241. package/dist/src/security/apiKeys.d.ts.map +1 -0
  242. package/dist/src/security/apiKeys.js +279 -0
  243. package/dist/src/security/apiKeys.js.map +1 -0
  244. package/dist/src/types.d.ts +54 -0
  245. package/dist/src/types.d.ts.map +1 -0
  246. package/dist/src/types.js +4 -0
  247. package/dist/src/types.js.map +1 -0
  248. package/package.json +86 -0
  249. package/prisma/migrations/20260228090200_init/migration.sql +49 -0
  250. package/prisma/migrations/20260228121746_add_properties_and_relationships/migration.sql +29 -0
  251. package/prisma/migrations/20260301223834_add_superseded_by_pointer/migration.sql +4 -0
  252. package/prisma/migrations/20260301225152_add_write_receipts/migration.sql +20 -0
  253. package/prisma/migrations/20260302135650_entity_resolution/migration.sql +33 -0
  254. package/prisma/migrations/migration_lock.toml +3 -0
  255. package/prisma/schema.prisma +118 -0
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class MistralProvider {
4
+ constructor() {
5
+ this.apiKey = process.env.MISTRAL_API_KEY ?? '';
6
+ this.model = process.env.MISTRAL_MODEL ?? 'mistral-small-latest';
7
+ if (!this.apiKey) {
8
+ throw new Error('MISTRAL_API_KEY is not set');
9
+ }
10
+ }
11
+ async complete(messages, options) {
12
+ const maxTokens = options?.maxTokens ?? 1024;
13
+ const model = options?.model ?? this.model;
14
+ const response = await fetch('https://api.mistral.ai/v1/chat/completions', {
15
+ method: 'POST',
16
+ headers: {
17
+ 'Content-Type': 'application/json',
18
+ 'Authorization': `Bearer ${this.apiKey}`,
19
+ },
20
+ body: JSON.stringify({
21
+ model,
22
+ messages: messages.map((m) => ({ role: m.role, content: m.content })),
23
+ max_tokens: maxTokens,
24
+ }),
25
+ });
26
+ if (!response.ok) {
27
+ throw new Error(`Mistral API error: ${response.status} ${response.statusText}`);
28
+ }
29
+ const data = await response.json();
30
+ const text = data.choices[0]?.message?.content ?? '';
31
+ return {
32
+ text,
33
+ model: data.model,
34
+ provider: 'mistral',
35
+ };
36
+ }
37
+ }
38
+ exports.default = new MistralProvider();
39
+ //# sourceMappingURL=mistral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mistral.js","sourceRoot":"","sources":["../../../../src/lib/providers/mistral.ts"],"names":[],"mappings":";;AAWA,MAAM,eAAe;IAIjB;QACI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,sBAAsB,CAAC;QAEjE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAsB,EAAE,OAAyB;QAC5D,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,4CAA4C,EAAE;YACvE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aAC3C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,KAAK;gBACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrE,UAAU,EAAE,SAAS;aACxB,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAqB,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QAErD,OAAO;YACH,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,SAAS;SACtB,CAAC;IACN,CAAC;CACJ;AAED,kBAAe,IAAI,eAAe,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { LLMProvider, LLMMessage, LLMResponse, CompleteOptions } from '../llm';
2
+ export type MockScenario = 'default' | 'disagreement' | 'unreliable' | 'collaborative' | 'noisy';
3
+ export interface MockConfig {
4
+ scenario: MockScenario;
5
+ agentId?: string;
6
+ failureRate?: number;
7
+ confidenceRange?: [number, number];
8
+ seed?: number;
9
+ }
10
+ declare class MockProvider implements LLMProvider {
11
+ private config;
12
+ private rand;
13
+ private callCount;
14
+ constructor(config?: MockConfig);
15
+ configure(config: Partial<MockConfig>): void;
16
+ complete(messages: LLMMessage[], options?: CompleteOptions): Promise<LLMResponse>;
17
+ private respond;
18
+ getCallCount(): number;
19
+ resetCallCount(): void;
20
+ }
21
+ declare const mockProvider: MockProvider;
22
+ export declare function configureMock(config: Partial<MockConfig>): void;
23
+ export default mockProvider;
24
+ //# sourceMappingURL=mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAI/E,MAAM,MAAM,YAAY,GAClB,SAAS,GACT,cAAc,GACd,YAAY,GACZ,eAAe,GACf,OAAO,CAAC;AAId,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAkDD,cAAM,YAAa,YAAW,WAAW;IACrC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,SAAS,CAAa;gBAElB,MAAM,GAAE,UAAoC;IAKxD,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAMtC,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAkEvF,OAAO,CAAC,OAAO;IAIf,YAAY,IAAI,MAAM;IAItB,cAAc,IAAI,IAAI;CAGzB;AAID,QAAA,MAAM,YAAY,cAAqB,CAAC;AAExC,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAE/D;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configureMock = configureMock;
4
+ // ─── Seeded Random ────────────────────────────────────────────────────────────
5
+ function seededRandom(seed) {
6
+ let s = seed;
7
+ return () => {
8
+ s = (s * 1664525 + 1013904223) & 0xffffffff;
9
+ return (s >>> 0) / 0xffffffff;
10
+ };
11
+ }
12
+ // ─── Response Banks ───────────────────────────────────────────────────────────
13
+ const TASK_INFERENCES = {
14
+ default: [
15
+ 'Researching academic publication history for a researcher',
16
+ 'Analyzing citation patterns across research institutions',
17
+ 'Mapping collaboration networks between research groups',
18
+ ],
19
+ disagreement: [
20
+ 'Independently verifying researcher affiliations',
21
+ 'Cross-referencing conflicting institutional records',
22
+ ],
23
+ collaborative: [
24
+ 'Building on prior findings about researcher profiles',
25
+ 'Extending existing knowledge base with new data points',
26
+ ],
27
+ noisy: [
28
+ 'Researching academic publication history for a researcher',
29
+ 'Performing general web research',
30
+ 'Analyzing unstructured data sources',
31
+ 'Unclear task type',
32
+ ],
33
+ };
34
+ const CONFLICT_RESOLUTIONS = {
35
+ KEEP_EXISTING: 'KEEP_EXISTING: The existing entry has a more established source and the confidence difference is minimal.',
36
+ KEEP_INCOMING: 'KEEP_INCOMING: The incoming entry cites a more authoritative and recent source.',
37
+ ESCALATE: 'ESCALATE: Both sources have comparable authority and the values are genuinely contradictory.',
38
+ };
39
+ const EXTRACTION_RESPONSES = {
40
+ default: '[{"key":"affiliation","value":{"institution":"Carnegie Mellon University"},"summary":"Affiliated with Carnegie Mellon University"},{"key":"publication_count","value":{"count":31},"summary":"Has published 31 papers"},{"key":"previous_employer","value":{"institution":"Google DeepMind","from":2019,"to":2022},"summary":"Previously worked at Google DeepMind from 2019 to 2022"},{"key":"research_focus","value":{"primary":"reinforcement learning","secondary":"robotics"},"summary":"Primary research focus is reinforcement learning with secondary interest in robotics"}]',
41
+ disagreement: '[{"key":"affiliation","value":{"institution":"MIT"},"summary":"Affiliated with MIT"},{"key":"publication_count","value":{"count":28},"summary":"Has published 28 papers"}]',
42
+ collaborative: '[{"key":"h_index","value":{"score":12},"summary":"H-index of 12"},{"key":"cited_by","value":{"count":450},"summary":"Cited by 450 papers"}]',
43
+ };
44
+ // ─── Mock Provider ────────────────────────────────────────────────────────────
45
+ class MockProvider {
46
+ constructor(config = { scenario: 'default' }) {
47
+ this.callCount = 0;
48
+ this.config = config;
49
+ this.rand = seededRandom(config.seed ?? 42);
50
+ }
51
+ configure(config) {
52
+ Object.assign(this.config, config);
53
+ this.rand = seededRandom(this.config.seed ?? 42);
54
+ this.callCount = 0;
55
+ }
56
+ async complete(messages, options) {
57
+ this.callCount++;
58
+ const lastMessage = messages[messages.length - 1].content.toLowerCase();
59
+ const scenario = this.config.scenario;
60
+ const model = options?.model ?? 'mock';
61
+ // Simulate failure rate
62
+ const failureRate = this.config.failureRate ?? 0;
63
+ if (failureRate > 0 && this.rand() < failureRate) {
64
+ throw new Error(`[mock] Simulated provider failure (rate: ${failureRate})`);
65
+ }
66
+ // Task inference
67
+ if (lastMessage.includes('specific type of task')) {
68
+ const options = TASK_INFERENCES[scenario] ?? TASK_INFERENCES.default;
69
+ const idx = Math.floor(this.rand() * options.length);
70
+ return this.respond(options[idx], model);
71
+ }
72
+ // Relevance filtering
73
+ if (lastMessage.includes('directly relevant')) {
74
+ if (scenario === 'noisy') {
75
+ // Sometimes return nothing relevant
76
+ return this.respond(this.rand() > 0.5 ? 'none' : '1,2', model);
77
+ }
78
+ return this.respond('none', model);
79
+ }
80
+ // Conflict resolution
81
+ if (lastMessage.includes('genuinely contradictory') || lastMessage.includes('keep_existing')) {
82
+ if (scenario === 'disagreement') {
83
+ // Disagreement scenario escalates more
84
+ const r = this.rand();
85
+ if (r < 0.4)
86
+ return this.respond(CONFLICT_RESOLUTIONS.KEEP_EXISTING, model);
87
+ if (r < 0.7)
88
+ return this.respond(CONFLICT_RESOLUTIONS.KEEP_INCOMING, model);
89
+ return this.respond(CONFLICT_RESOLUTIONS.ESCALATE, model);
90
+ }
91
+ return this.respond(CONFLICT_RESOLUTIONS.KEEP_EXISTING, model);
92
+ }
93
+ // Extraction / chunking
94
+ if (lastMessage.includes('atomic facts') || lastMessage.includes('extract every distinct')) {
95
+ const response = EXTRACTION_RESPONSES[scenario] ?? EXTRACTION_RESPONSES.default;
96
+ return this.respond(response, model);
97
+ }
98
+ // Summarization
99
+ if (lastMessage.includes('compress') || lastMessage.includes('summarize')) {
100
+ return this.respond('Compressed working memory summary for current task context.', model);
101
+ }
102
+ // Default — generic agent response
103
+ return this.respond(`I have completed my analysis. Based on my research:\n\n` +
104
+ `{\n` +
105
+ ` "name": "Sample Researcher",\n` +
106
+ ` "affiliation": "MIT",\n` +
107
+ ` "publication_count": 45,\n` +
108
+ ` "research_focus": "machine learning",\n` +
109
+ ` "notable_contribution": "Foundational work in neural networks",\n` +
110
+ ` "confidence": 85\n` +
111
+ `}`, model);
112
+ }
113
+ respond(text, model = 'mock') {
114
+ return { text, model, provider: 'mock' };
115
+ }
116
+ getCallCount() {
117
+ return this.callCount;
118
+ }
119
+ resetCallCount() {
120
+ this.callCount = 0;
121
+ }
122
+ }
123
+ // ─── Singleton + Config Export ────────────────────────────────────────────────
124
+ const mockProvider = new MockProvider();
125
+ function configureMock(config) {
126
+ mockProvider.configure(config);
127
+ }
128
+ exports.default = mockProvider;
129
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../../src/lib/providers/mock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { LLMProvider, LLMMessage, LLMResponse, CompleteOptions } from '../llm';
2
+ declare class OllamaProvider implements LLMProvider {
3
+ private model;
4
+ private baseUrl;
5
+ constructor();
6
+ complete(messages: LLMMessage[], options?: CompleteOptions): Promise<LLMResponse>;
7
+ }
8
+ declare const _default: OllamaProvider;
9
+ export default _default;
10
+ //# sourceMappingURL=ollama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAS/E,cAAM,cAAe,YAAW,WAAW;IACvC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;;IAOlB,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;CAgC1F;;AAED,wBAAoC"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class OllamaProvider {
4
+ constructor() {
5
+ this.model = process.env.OLLAMA_MODEL ?? 'llama3.2';
6
+ this.baseUrl = process.env.OLLAMA_BASE_URL ?? 'http://localhost:11434';
7
+ }
8
+ async complete(messages, options) {
9
+ const maxTokens = options?.maxTokens ?? 1024;
10
+ const model = options?.model ?? this.model;
11
+ const response = await fetch(`${this.baseUrl}/api/chat`, {
12
+ method: 'POST',
13
+ headers: {
14
+ 'Content-Type': 'application/json',
15
+ },
16
+ body: JSON.stringify({
17
+ model,
18
+ messages: messages.map((m) => ({ role: m.role, content: m.content })),
19
+ stream: false,
20
+ options: {
21
+ num_predict: maxTokens,
22
+ },
23
+ }),
24
+ });
25
+ if (!response.ok) {
26
+ const error = await response.text();
27
+ throw new Error(`Ollama error ${response.status}: ${error}. Is Ollama running at ${this.baseUrl}?`);
28
+ }
29
+ const data = await response.json();
30
+ const text = data.message?.content ?? '';
31
+ return {
32
+ text,
33
+ model: data.model,
34
+ provider: 'ollama',
35
+ };
36
+ }
37
+ }
38
+ exports.default = new OllamaProvider();
39
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../../src/lib/providers/ollama.ts"],"names":[],"mappings":";;AASA,MAAM,cAAc;IAIhB;QACI,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,UAAU,CAAC;QACpD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,wBAAwB,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAsB,EAAE,OAAyB;QAC5D,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;aACrC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,KAAK;gBACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrE,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACL,WAAW,EAAE,SAAS;iBACzB;aACJ,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,gBAAgB,QAAQ,CAAC,MAAM,KAAK,KAAK,0BAA0B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACxG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAoB,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QAEzC,OAAO;YACH,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,QAAQ;SACrB,CAAC;IACN,CAAC;CACJ;AAED,kBAAe,IAAI,cAAc,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { LLMProvider, LLMMessage, LLMResponse, CompleteOptions } from '../llm';
2
+ declare class OpenAIProvider implements LLMProvider {
3
+ private apiKey;
4
+ private model;
5
+ private baseUrl;
6
+ constructor();
7
+ complete(messages: LLMMessage[], options?: CompleteOptions): Promise<LLMResponse>;
8
+ }
9
+ declare const _default: OpenAIProvider;
10
+ export default _default;
11
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAW/E,cAAM,cAAe,YAAW,WAAW;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;;IAYlB,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;CA2B1F;;AAED,wBAAoC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class OpenAIProvider {
4
+ constructor() {
5
+ this.apiKey = process.env.OPENAI_API_KEY ?? '';
6
+ this.model = process.env.OPENAI_MODEL ?? 'gpt-4o-mini';
7
+ this.baseUrl = process.env.OPENAI_BASE_URL ?? 'https://api.openai.com/v1';
8
+ if (!this.apiKey) {
9
+ throw new Error('OPENAI_API_KEY is not set');
10
+ }
11
+ }
12
+ async complete(messages, options) {
13
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
14
+ method: 'POST',
15
+ headers: {
16
+ 'Content-Type': 'application/json',
17
+ 'Authorization': `Bearer ${this.apiKey}`,
18
+ },
19
+ body: JSON.stringify({
20
+ model: this.model,
21
+ messages: messages.map((m) => ({ role: m.role, content: m.content })),
22
+ max_tokens: options?.maxTokens ?? 1024,
23
+ }),
24
+ });
25
+ if (!response.ok) {
26
+ throw new Error(`OpenAI API error: ${response.status} ${response.statusText}`);
27
+ }
28
+ const data = await response.json();
29
+ const text = data.choices[0]?.message?.content ?? '';
30
+ return {
31
+ text,
32
+ model: data.model,
33
+ provider: 'openai',
34
+ };
35
+ }
36
+ }
37
+ exports.default = new OpenAIProvider();
38
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/lib/providers/openai.ts"],"names":[],"mappings":";;AAWA,MAAM,cAAc;IAKhB;QACI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,aAAa,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,2BAA2B,CAAC;QAE1E,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAsB,EAAE,OAAyB;QAC5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;YAC7D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aAC3C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrE,UAAU,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;aACzC,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAoB,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QAErD,OAAO;YACH,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,QAAQ;SACrB,CAAC;IACN,CAAC;CACJ;AAED,kBAAe,IAAI,cAAc,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ export type RequestContext = {
3
+ llmCount: number;
4
+ requestId?: string;
5
+ };
6
+ export declare const requestContext: AsyncLocalStorage<RequestContext>;
7
+ export declare function getContext(): RequestContext | null;
8
+ //# sourceMappingURL=requestContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../../src/lib/requestContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,cAAc,mCAA0C,CAAC;AAEtE,wBAAgB,UAAU,IAAI,cAAc,GAAG,IAAI,CAElD"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requestContext = void 0;
4
+ exports.getContext = getContext;
5
+ const node_async_hooks_1 = require("node:async_hooks");
6
+ exports.requestContext = new node_async_hooks_1.AsyncLocalStorage();
7
+ function getContext() {
8
+ return exports.requestContext.getStore() ?? null;
9
+ }
10
+ //# sourceMappingURL=requestContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestContext.js","sourceRoot":"","sources":["../../../src/lib/requestContext.ts"],"names":[],"mappings":";;;AASA,gCAEC;AAXD,uDAAqD;AAOxC,QAAA,cAAc,GAAG,IAAI,oCAAiB,EAAkB,CAAC;AAEtE,SAAgB,UAAU;IACxB,OAAO,sBAAc,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { LLMMessage, LLMResponse } from './llm';
2
+ export type TaskType = 'classification' | 'relevance_filtering' | 'conflict_resolution' | 'summarization' | 'task_inference' | 'extraction';
3
+ interface ModelProfile {
4
+ provider: string;
5
+ model: string;
6
+ reason: string;
7
+ }
8
+ export declare function route(taskType: TaskType, messages: LLMMessage[], maxTokens?: number): Promise<LLMResponse & {
9
+ taskType: TaskType;
10
+ modelProfile: ModelProfile;
11
+ providerUsed: string;
12
+ }>;
13
+ export declare function getModelProfile(taskType: TaskType): ModelProfile;
14
+ export declare function getAllProfiles(): Record<TaskType, ModelProfile>;
15
+ export {};
16
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/lib/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAwB,MAAM,OAAO,CAAC;AAItE,MAAM,MAAM,QAAQ,GACd,gBAAgB,GAChB,qBAAqB,GACrB,qBAAqB,GACrB,eAAe,GACf,gBAAgB,GAChB,YAAY,CAAC;AAInB,UAAU,YAAY;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAuCD,wBAAsB,KAAK,CACvB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,UAAU,EAAE,EACtB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,YAAY,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAcjG;AAID,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAEhE;AAED,wBAAgB,cAAc,IAAI,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAE/D"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.route = route;
4
+ exports.getModelProfile = getModelProfile;
5
+ exports.getAllProfiles = getAllProfiles;
6
+ const llm_1 = require("./llm");
7
+ // Maps task types to the best model for that task.
8
+ // Override any of these via environment variables.
9
+ const MODEL_PROFILES = {
10
+ classification: {
11
+ provider: process.env.LLM_PROVIDER ?? 'mock',
12
+ model: process.env.CLASSIFICATION_MODEL ?? 'gemini-2.0-flash-001',
13
+ reason: 'Fast and cheap — classification does not need deep reasoning',
14
+ },
15
+ relevance_filtering: {
16
+ provider: process.env.LLM_PROVIDER ?? 'mock',
17
+ model: process.env.RELEVANCE_MODEL ?? 'gemini-2.0-flash-001',
18
+ reason: 'Fast enough for filtering, does not need full reasoning capacity',
19
+ },
20
+ conflict_resolution: {
21
+ provider: process.env.LLM_PROVIDER ?? 'mock',
22
+ model: process.env.CONFLICT_MODEL ?? 'gemini-2.5-pro',
23
+ reason: 'Conflict resolution requires careful reasoning about sources and credibility',
24
+ },
25
+ summarization: {
26
+ provider: process.env.LLM_PROVIDER ?? 'mock',
27
+ model: process.env.SUMMARIZATION_MODEL ?? 'gemini-2.0-flash-001',
28
+ reason: 'Summarization is well within fast model capabilities',
29
+ },
30
+ task_inference: {
31
+ provider: process.env.LLM_PROVIDER ?? 'mock',
32
+ model: process.env.TASK_INFERENCE_MODEL ?? 'gemini-2.0-flash-001',
33
+ reason: 'Task inference is a lightweight classification task',
34
+ },
35
+ extraction: {
36
+ provider: process.env.LLM_PROVIDER ?? 'mock',
37
+ model: process.env.EXTRACTION_MODEL ?? 'gemini-2.0-flash-001',
38
+ reason: 'Extraction needs structured output capability, flash is sufficient',
39
+ },
40
+ };
41
+ // ─── Router ──────────────────────────────────────────────────────────────────
42
+ async function route(taskType, messages, maxTokens) {
43
+ const profile = MODEL_PROFILES[taskType];
44
+ const response = await (0, llm_1.completeWithFallback)(messages, {
45
+ preferredProvider: profile.provider,
46
+ model: profile.model,
47
+ maxTokens,
48
+ });
49
+ return {
50
+ ...response,
51
+ taskType,
52
+ modelProfile: profile,
53
+ providerUsed: response.providerUsed,
54
+ };
55
+ }
56
+ // ─── Profile Inspector ───────────────────────────────────────────────────────
57
+ function getModelProfile(taskType) {
58
+ return MODEL_PROFILES[taskType];
59
+ }
60
+ function getAllProfiles() {
61
+ return MODEL_PROFILES;
62
+ }
63
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/lib/router.ts"],"names":[],"mappings":";;AAyDA,sBAkBC;AAID,0CAEC;AAED,wCAEC;AArFD,+BAAsE;AAoBtE,mDAAmD;AACnD,mDAAmD;AACnD,MAAM,cAAc,GAAmC;IACnD,cAAc,EAAE;QACZ,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM;QAC5C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,sBAAsB;QACjE,MAAM,EAAE,8DAA8D;KACzE;IACD,mBAAmB,EAAE;QACjB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM;QAC5C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,sBAAsB;QAC5D,MAAM,EAAE,kEAAkE;KAC7E;IACD,mBAAmB,EAAE;QACjB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM;QAC5C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,gBAAgB;QACrD,MAAM,EAAE,8EAA8E;KACzF;IACD,aAAa,EAAE;QACX,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM;QAC5C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,sBAAsB;QAChE,MAAM,EAAE,sDAAsD;KACjE;IACD,cAAc,EAAE;QACZ,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM;QAC5C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,sBAAsB;QACjE,MAAM,EAAE,qDAAqD;KAChE;IACD,UAAU,EAAE;QACR,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM;QAC5C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,sBAAsB;QAC7D,MAAM,EAAE,oEAAoE;KAC/E;CACJ,CAAC;AAEF,gFAAgF;AAEzE,KAAK,UAAU,KAAK,CACvB,QAAkB,EAClB,QAAsB,EACtB,SAAkB;IAElB,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,IAAA,0BAAoB,EAAC,QAAQ,EAAE;QAClD,iBAAiB,EAAE,OAAO,CAAC,QAAQ;QACnC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS;KACZ,CAAC,CAAC;IAEH,OAAO;QACH,GAAG,QAAQ;QACX,QAAQ;QACR,YAAY,EAAE,OAAO;QACrB,YAAY,EAAE,QAAQ,CAAC,YAAY;KACtC,CAAC;AACN,CAAC;AAED,gFAAgF;AAEhF,SAAgB,eAAe,CAAC,QAAkB;IAC9C,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,cAAc;IAC1B,OAAO,cAAc,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { EntryInput, EntityType } from '../types';
2
+ export interface ChunkInput {
3
+ entityType: EntityType;
4
+ entityId: string;
5
+ rawContent: string;
6
+ source: string;
7
+ confidence: number;
8
+ createdBy: string;
9
+ }
10
+ export interface ChunkResult {
11
+ chunks: EntryInput[];
12
+ skipped: number;
13
+ reason?: string;
14
+ }
15
+ export declare function chunkContent(input: ChunkInput): Promise<ChunkResult>;
16
+ //# sourceMappingURL=chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../../src/librarian/chunker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAIlD,MAAM,WAAW,UAAU;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAgE1E"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.chunkContent = chunkContent;
4
+ const router_1 = require("../lib/router");
5
+ // ─── Chunker ─────────────────────────────────────────────────────────────────
6
+ async function chunkContent(input) {
7
+ const response = await (0, router_1.route)('extraction', [
8
+ {
9
+ role: 'user',
10
+ content: `You are extracting atomic facts from a text blob about an entity.
11
+
12
+ Entity type: ${input.entityType}
13
+ Entity ID: ${input.entityId}
14
+ Source: ${input.source}
15
+
16
+ Text to chunk:
17
+ "${input.rawContent}"
18
+
19
+ Extract every distinct, verifiable fact as a separate entry.
20
+ Each fact must have:
21
+ - A short snake_case key describing what the fact is (e.g. "affiliation", "publication_count", "research_focus")
22
+ - A value (string, number, or simple object)
23
+ - A one-sentence summary
24
+
25
+ Return ONLY a valid JSON array. No explanation, no markdown, no backticks.
26
+ Example:
27
+ [
28
+ {"key": "affiliation", "value": {"institution": "MIT"}, "summary": "Affiliated with MIT"},
29
+ {"key": "publication_count", "value": {"count": 24}, "summary": "Has published 24 papers"}
30
+ ]
31
+
32
+ If no facts can be extracted, return an empty array: []`,
33
+ },
34
+ ], 1024);
35
+ let parsed;
36
+ try {
37
+ const clean = response.text.replace(/```json|```/g, '').trim();
38
+ parsed = JSON.parse(clean);
39
+ }
40
+ catch {
41
+ return {
42
+ chunks: [],
43
+ skipped: 0,
44
+ reason: `Failed to parse LLM response: ${response.text.substring(0, 100)}`,
45
+ };
46
+ }
47
+ if (!Array.isArray(parsed) || parsed.length === 0) {
48
+ return { chunks: [], skipped: 0, reason: 'No facts extracted' };
49
+ }
50
+ const chunks = parsed
51
+ .filter((item) => item.key && item.value !== undefined && item.summary)
52
+ .map((item) => ({
53
+ entityType: input.entityType,
54
+ entityId: input.entityId,
55
+ key: item.key,
56
+ valueRaw: item.value,
57
+ valueSummary: item.summary,
58
+ confidence: input.confidence,
59
+ source: input.source,
60
+ createdBy: input.createdBy,
61
+ }));
62
+ return {
63
+ chunks,
64
+ skipped: parsed.length - chunks.length,
65
+ };
66
+ }
67
+ //# sourceMappingURL=chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.js","sourceRoot":"","sources":["../../../src/librarian/chunker.ts"],"names":[],"mappings":";;AAsBA,oCAgEC;AAtFD,0CAAsC;AAoBtC,gFAAgF;AAEzE,KAAK,UAAU,YAAY,CAAC,KAAiB;IAChD,MAAM,QAAQ,GAAG,MAAM,IAAA,cAAK,EAAC,YAAY,EAAE;QACvC;YACI,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;;eAEN,KAAK,CAAC,UAAU;aAClB,KAAK,CAAC,QAAQ;UACjB,KAAK,CAAC,MAAM;;;GAGnB,KAAK,CAAC,UAAU;;;;;;;;;;;;;;;wDAeqC;SAC/C;KACJ,EAAE,IAAI,CAAC,CAAC;IAET,IAAI,MAA+D,CAAC;IAEpE,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO;YACH,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,iCAAiC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SAC7E,CAAC;IACN,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,MAAM,GAAiB,MAAM;SAC9B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC;SACtE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACZ,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,QAAQ,EAAE,IAAI,CAAC,KAAK;QACpB,YAAY,EAAE,IAAI,CAAC,OAAO;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC7B,CAAC,CAAC,CAAC;IAER,OAAO;QACH,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;KACzC,CAAC;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ConflictPolicy } from './policy';
2
+ export declare function getConflictPolicy(db?: any): Promise<ConflictPolicy>;
3
+ //# sourceMappingURL=getPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPolicy.d.ts","sourceRoot":"","sources":["../../../src/librarian/getPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1D,wBAAsB,iBAAiB,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAezE"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getConflictPolicy = getConflictPolicy;
4
+ const policy_1 = require("./policy");
5
+ const queries_1 = require("../library/queries");
6
+ async function getConflictPolicy(db) {
7
+ const entry = await (0, queries_1.findEntry)({
8
+ entityType: 'system',
9
+ entityId: 'librarian',
10
+ key: 'conflict_policy',
11
+ }, db);
12
+ if (!entry)
13
+ return policy_1.DEFAULT_POLICY;
14
+ try {
15
+ const parsed = typeof entry.valueRaw === 'string' ? JSON.parse(entry.valueRaw) : entry.valueRaw;
16
+ return { ...policy_1.DEFAULT_POLICY, ...parsed };
17
+ }
18
+ catch {
19
+ return policy_1.DEFAULT_POLICY;
20
+ }
21
+ }
22
+ //# sourceMappingURL=getPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPolicy.js","sourceRoot":"","sources":["../../../src/librarian/getPolicy.ts"],"names":[],"mappings":";;AAGA,8CAeC;AAlBD,qCAA0D;AAC1D,gDAA+C;AAExC,KAAK,UAAU,iBAAiB,CAAC,EAAQ;IAC9C,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAS,EAAC;QAC5B,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,WAAW;QACrB,GAAG,EAAE,iBAAiB;KACvB,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,KAAK;QAAE,OAAO,uBAAc,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChG,OAAO,EAAE,GAAG,uBAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,uBAAc,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const STAFF_WRITERS: Set<string>;
2
+ export declare const RESERVED_KEY_WRITERS: Record<string, Set<string>>;
3
+ export declare function enforceWritePermissions(input: {
4
+ entityType: string;
5
+ entityId: string;
6
+ key: string;
7
+ createdBy: string;
8
+ }): void;
9
+ //# sourceMappingURL=guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../../src/librarian/guards.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,aAMxB,CAAC;AAGH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAW5D,CAAC;AAGF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,QAgCA"}