@steno-ai/engine 0.1.1 → 0.1.3

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 (116) hide show
  1. package/dist/adapters/storage.d.ts +1 -0
  2. package/dist/adapters/storage.d.ts.map +1 -1
  3. package/dist/extraction/llm-extractor.d.ts.map +1 -1
  4. package/dist/extraction/llm-extractor.js +5 -3
  5. package/dist/extraction/llm-extractor.js.map +1 -1
  6. package/dist/extraction/pipeline.d.ts.map +1 -1
  7. package/dist/extraction/pipeline.js +5 -1
  8. package/dist/extraction/pipeline.js.map +1 -1
  9. package/dist/extraction/prompts.d.ts +2 -2
  10. package/dist/extraction/prompts.d.ts.map +1 -1
  11. package/dist/extraction/prompts.js +12 -3
  12. package/dist/extraction/prompts.js.map +1 -1
  13. package/package.json +6 -2
  14. package/src/adapters/cache.js +2 -0
  15. package/src/adapters/embedding.js +2 -0
  16. package/src/adapters/llm.js +2 -0
  17. package/src/adapters/perplexity-embedding.js +78 -0
  18. package/src/adapters/storage.js +2 -0
  19. package/src/adapters/storage.ts +1 -0
  20. package/src/config.d.ts +211 -1
  21. package/src/config.d.ts.map +1 -1
  22. package/src/config.js +92 -0
  23. package/src/config.js.map +1 -1
  24. package/src/extraction/contradiction.js +23 -0
  25. package/src/extraction/dedup.js +93 -0
  26. package/src/extraction/dedup.js.map +1 -1
  27. package/src/extraction/entity-extractor.d.ts.map +1 -1
  28. package/src/extraction/entity-extractor.js +145 -0
  29. package/src/extraction/entity-extractor.js.map +1 -1
  30. package/src/extraction/hasher.js +8 -0
  31. package/src/extraction/heuristic.js +282 -0
  32. package/src/extraction/llm-extractor.d.ts +3 -1
  33. package/src/extraction/llm-extractor.d.ts.map +1 -1
  34. package/src/extraction/llm-extractor.js +238 -0
  35. package/src/extraction/llm-extractor.js.map +1 -1
  36. package/src/extraction/llm-extractor.ts +7 -5
  37. package/src/extraction/pipeline.d.ts +3 -0
  38. package/src/extraction/pipeline.d.ts.map +1 -1
  39. package/src/extraction/pipeline.js +398 -0
  40. package/src/extraction/pipeline.js.map +1 -1
  41. package/src/extraction/pipeline.ts +6 -1
  42. package/src/extraction/prompts.d.ts +28 -0
  43. package/src/extraction/prompts.d.ts.map +1 -0
  44. package/src/extraction/prompts.js +196 -0
  45. package/src/extraction/prompts.js.map +1 -1
  46. package/src/extraction/prompts.ts +12 -3
  47. package/src/extraction/sliding-window.js +84 -0
  48. package/src/extraction/sliding-window.js.map +1 -1
  49. package/src/extraction/types.d.ts +12 -0
  50. package/src/extraction/types.d.ts.map +1 -1
  51. package/src/extraction/types.js +2 -0
  52. package/src/feedback/tracker.js +90 -0
  53. package/src/models/api-key.d.ts +2 -2
  54. package/src/models/api-key.js +21 -0
  55. package/src/models/edge.d.ts +6 -6
  56. package/src/models/edge.js +29 -0
  57. package/src/models/entity.d.ts +2 -2
  58. package/src/models/entity.js +22 -0
  59. package/src/models/extraction.d.ts +6 -6
  60. package/src/models/extraction.js +40 -0
  61. package/src/models/fact-entity.js +14 -0
  62. package/src/models/fact.d.ts +191 -0
  63. package/src/models/fact.d.ts.map +1 -0
  64. package/src/models/fact.js +72 -0
  65. package/src/models/fact.js.map +1 -0
  66. package/src/models/index.js +13 -0
  67. package/src/models/memory-access.d.ts +4 -4
  68. package/src/models/memory-access.js +33 -0
  69. package/src/models/session.js +23 -0
  70. package/src/models/tenant.d.ts +248 -14
  71. package/src/models/tenant.d.ts.map +1 -1
  72. package/src/models/tenant.js +23 -0
  73. package/src/models/trigger.d.ts +5 -5
  74. package/src/models/trigger.js +41 -0
  75. package/src/models/usage-record.js +14 -0
  76. package/src/models/webhook.d.ts +1 -1
  77. package/src/models/webhook.js +25 -0
  78. package/src/retrieval/compound-search.d.ts.map +1 -1
  79. package/src/retrieval/compound-search.js +87 -0
  80. package/src/retrieval/compound-search.js.map +1 -1
  81. package/src/retrieval/contradiction-surfacer.js +64 -0
  82. package/src/retrieval/embedding-cache.js +56 -0
  83. package/src/retrieval/fusion.d.ts +1 -0
  84. package/src/retrieval/fusion.d.ts.map +1 -1
  85. package/src/retrieval/fusion.js +87 -0
  86. package/src/retrieval/fusion.js.map +1 -1
  87. package/src/retrieval/graph-traversal.d.ts +2 -1
  88. package/src/retrieval/graph-traversal.d.ts.map +1 -1
  89. package/src/retrieval/graph-traversal.js +208 -0
  90. package/src/retrieval/graph-traversal.js.map +1 -1
  91. package/src/retrieval/query-expansion.js +76 -0
  92. package/src/retrieval/reranker.js +47 -0
  93. package/src/retrieval/salience-scorer.js +41 -0
  94. package/src/retrieval/search.d.ts.map +1 -1
  95. package/src/retrieval/search.js +228 -0
  96. package/src/retrieval/search.js.map +1 -1
  97. package/src/retrieval/temporal-scorer.d.ts +18 -0
  98. package/src/retrieval/temporal-scorer.d.ts.map +1 -0
  99. package/src/retrieval/temporal-scorer.js +106 -0
  100. package/src/retrieval/temporal-scorer.js.map +1 -0
  101. package/src/retrieval/trigger-matcher.d.ts.map +1 -1
  102. package/src/retrieval/trigger-matcher.js +134 -0
  103. package/src/retrieval/trigger-matcher.js.map +1 -1
  104. package/src/retrieval/types.d.ts +4 -0
  105. package/src/retrieval/types.d.ts.map +1 -1
  106. package/src/retrieval/types.js +9 -0
  107. package/src/retrieval/types.js.map +1 -1
  108. package/src/retrieval/vector-search.d.ts.map +1 -1
  109. package/src/retrieval/vector-search.js +24 -0
  110. package/src/retrieval/vector-search.js.map +1 -1
  111. package/src/salience/decay.js +15 -0
  112. package/src/scratchpad/scratchpad.js +107 -0
  113. package/src/sessions/manager.d.ts +11 -0
  114. package/src/sessions/manager.d.ts.map +1 -0
  115. package/src/sessions/manager.js +63 -0
  116. package/src/sessions/manager.js.map +1 -0
@@ -15,18 +15,83 @@ export declare const TenantSchema: z.ZodObject<{
15
15
  graph: z.ZodDefault<z.ZodNumber>;
16
16
  recency: z.ZodDefault<z.ZodNumber>;
17
17
  salience: z.ZodDefault<z.ZodNumber>;
18
+ temporal: z.ZodDefault<z.ZodNumber>;
18
19
  }, "strip", z.ZodTypeAny, {
19
20
  vector: number;
20
21
  keyword: number;
21
22
  graph: number;
22
23
  recency: number;
23
24
  salience: number;
25
+ temporal: number;
24
26
  }, {
25
27
  vector?: number | undefined;
26
28
  keyword?: number | undefined;
27
29
  graph?: number | undefined;
28
30
  recency?: number | undefined;
29
31
  salience?: number | undefined;
32
+ temporal?: number | undefined;
33
+ }>>;
34
+ domainSchema: z.ZodOptional<z.ZodObject<{
35
+ entityTypes: z.ZodDefault<z.ZodArray<z.ZodObject<{
36
+ name: z.ZodString;
37
+ description: z.ZodString;
38
+ fields: z.ZodDefault<z.ZodArray<z.ZodObject<{
39
+ name: z.ZodString;
40
+ type: z.ZodEnum<["string", "number", "boolean", "date"]>;
41
+ description: z.ZodString;
42
+ required: z.ZodDefault<z.ZodBoolean>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ name: string;
45
+ type: "string" | "number" | "boolean" | "date";
46
+ description: string;
47
+ required: boolean;
48
+ }, {
49
+ name: string;
50
+ type: "string" | "number" | "boolean" | "date";
51
+ description: string;
52
+ required?: boolean | undefined;
53
+ }>, "many">>;
54
+ }, "strip", z.ZodTypeAny, {
55
+ name: string;
56
+ description: string;
57
+ fields: {
58
+ name: string;
59
+ type: "string" | "number" | "boolean" | "date";
60
+ description: string;
61
+ required: boolean;
62
+ }[];
63
+ }, {
64
+ name: string;
65
+ description: string;
66
+ fields?: {
67
+ name: string;
68
+ type: "string" | "number" | "boolean" | "date";
69
+ description: string;
70
+ required?: boolean | undefined;
71
+ }[] | undefined;
72
+ }>, "many">>;
73
+ }, "strip", z.ZodTypeAny, {
74
+ entityTypes: {
75
+ name: string;
76
+ description: string;
77
+ fields: {
78
+ name: string;
79
+ type: "string" | "number" | "boolean" | "date";
80
+ description: string;
81
+ required: boolean;
82
+ }[];
83
+ }[];
84
+ }, {
85
+ entityTypes?: {
86
+ name: string;
87
+ description: string;
88
+ fields?: {
89
+ name: string;
90
+ type: "string" | "number" | "boolean" | "date";
91
+ description: string;
92
+ required?: boolean | undefined;
93
+ }[] | undefined;
94
+ }[] | undefined;
30
95
  }>>;
31
96
  }, "strip", z.ZodTypeAny, {
32
97
  embeddingModel: string;
@@ -40,7 +105,20 @@ export declare const TenantSchema: z.ZodObject<{
40
105
  graph: number;
41
106
  recency: number;
42
107
  salience: number;
108
+ temporal: number;
43
109
  };
110
+ domainSchema?: {
111
+ entityTypes: {
112
+ name: string;
113
+ description: string;
114
+ fields: {
115
+ name: string;
116
+ type: "string" | "number" | "boolean" | "date";
117
+ description: string;
118
+ required: boolean;
119
+ }[];
120
+ }[];
121
+ } | undefined;
44
122
  }, {
45
123
  embeddingModel?: string | undefined;
46
124
  embeddingDim?: number | undefined;
@@ -53,6 +131,19 @@ export declare const TenantSchema: z.ZodObject<{
53
131
  graph?: number | undefined;
54
132
  recency?: number | undefined;
55
133
  salience?: number | undefined;
134
+ temporal?: number | undefined;
135
+ } | undefined;
136
+ domainSchema?: {
137
+ entityTypes?: {
138
+ name: string;
139
+ description: string;
140
+ fields?: {
141
+ name: string;
142
+ type: "string" | "number" | "boolean" | "date";
143
+ description: string;
144
+ required?: boolean | undefined;
145
+ }[] | undefined;
146
+ }[] | undefined;
56
147
  } | undefined;
57
148
  }>;
58
149
  plan: z.ZodEnum<["free", "pro", "scale", "enterprise"]>;
@@ -64,6 +155,12 @@ export declare const TenantSchema: z.ZodObject<{
64
155
  createdAt: z.ZodDate;
65
156
  updatedAt: z.ZodDate;
66
157
  }, "strip", z.ZodTypeAny, {
158
+ name: string;
159
+ active: boolean;
160
+ id: string;
161
+ createdAt: Date;
162
+ updatedAt: Date;
163
+ slug: string;
67
164
  config: {
68
165
  embeddingModel: string;
69
166
  embeddingDim: number;
@@ -76,20 +173,33 @@ export declare const TenantSchema: z.ZodObject<{
76
173
  graph: number;
77
174
  recency: number;
78
175
  salience: number;
176
+ temporal: number;
79
177
  };
178
+ domainSchema?: {
179
+ entityTypes: {
180
+ name: string;
181
+ description: string;
182
+ fields: {
183
+ name: string;
184
+ type: "string" | "number" | "boolean" | "date";
185
+ description: string;
186
+ required: boolean;
187
+ }[];
188
+ }[];
189
+ } | undefined;
80
190
  };
81
- name: string;
82
- id: string;
83
- active: boolean;
84
- createdAt: Date;
85
- updatedAt: Date;
86
- slug: string;
87
191
  plan: "free" | "pro" | "scale" | "enterprise";
88
192
  tokenLimitMonthly: number;
89
193
  queryLimitMonthly: number;
90
194
  stripeCustomerId: string | null;
91
195
  stripeSubscriptionId: string | null;
92
196
  }, {
197
+ name: string;
198
+ active: boolean;
199
+ id: string;
200
+ createdAt: Date;
201
+ updatedAt: Date;
202
+ slug: string;
93
203
  config: {
94
204
  embeddingModel?: string | undefined;
95
205
  embeddingDim?: number | undefined;
@@ -102,14 +212,21 @@ export declare const TenantSchema: z.ZodObject<{
102
212
  graph?: number | undefined;
103
213
  recency?: number | undefined;
104
214
  salience?: number | undefined;
215
+ temporal?: number | undefined;
216
+ } | undefined;
217
+ domainSchema?: {
218
+ entityTypes?: {
219
+ name: string;
220
+ description: string;
221
+ fields?: {
222
+ name: string;
223
+ type: "string" | "number" | "boolean" | "date";
224
+ description: string;
225
+ required?: boolean | undefined;
226
+ }[] | undefined;
227
+ }[] | undefined;
105
228
  } | undefined;
106
229
  };
107
- name: string;
108
- id: string;
109
- active: boolean;
110
- createdAt: Date;
111
- updatedAt: Date;
112
- slug: string;
113
230
  plan: "free" | "pro" | "scale" | "enterprise";
114
231
  tokenLimitMonthly: number;
115
232
  queryLimitMonthly: number;
@@ -133,18 +250,83 @@ export declare const CreateTenantSchema: z.ZodObject<{
133
250
  graph: z.ZodDefault<z.ZodNumber>;
134
251
  recency: z.ZodDefault<z.ZodNumber>;
135
252
  salience: z.ZodDefault<z.ZodNumber>;
253
+ temporal: z.ZodDefault<z.ZodNumber>;
136
254
  }, "strip", z.ZodTypeAny, {
137
255
  vector: number;
138
256
  keyword: number;
139
257
  graph: number;
140
258
  recency: number;
141
259
  salience: number;
260
+ temporal: number;
142
261
  }, {
143
262
  vector?: number | undefined;
144
263
  keyword?: number | undefined;
145
264
  graph?: number | undefined;
146
265
  recency?: number | undefined;
147
266
  salience?: number | undefined;
267
+ temporal?: number | undefined;
268
+ }>>;
269
+ domainSchema: z.ZodOptional<z.ZodObject<{
270
+ entityTypes: z.ZodDefault<z.ZodArray<z.ZodObject<{
271
+ name: z.ZodString;
272
+ description: z.ZodString;
273
+ fields: z.ZodDefault<z.ZodArray<z.ZodObject<{
274
+ name: z.ZodString;
275
+ type: z.ZodEnum<["string", "number", "boolean", "date"]>;
276
+ description: z.ZodString;
277
+ required: z.ZodDefault<z.ZodBoolean>;
278
+ }, "strip", z.ZodTypeAny, {
279
+ name: string;
280
+ type: "string" | "number" | "boolean" | "date";
281
+ description: string;
282
+ required: boolean;
283
+ }, {
284
+ name: string;
285
+ type: "string" | "number" | "boolean" | "date";
286
+ description: string;
287
+ required?: boolean | undefined;
288
+ }>, "many">>;
289
+ }, "strip", z.ZodTypeAny, {
290
+ name: string;
291
+ description: string;
292
+ fields: {
293
+ name: string;
294
+ type: "string" | "number" | "boolean" | "date";
295
+ description: string;
296
+ required: boolean;
297
+ }[];
298
+ }, {
299
+ name: string;
300
+ description: string;
301
+ fields?: {
302
+ name: string;
303
+ type: "string" | "number" | "boolean" | "date";
304
+ description: string;
305
+ required?: boolean | undefined;
306
+ }[] | undefined;
307
+ }>, "many">>;
308
+ }, "strip", z.ZodTypeAny, {
309
+ entityTypes: {
310
+ name: string;
311
+ description: string;
312
+ fields: {
313
+ name: string;
314
+ type: "string" | "number" | "boolean" | "date";
315
+ description: string;
316
+ required: boolean;
317
+ }[];
318
+ }[];
319
+ }, {
320
+ entityTypes?: {
321
+ name: string;
322
+ description: string;
323
+ fields?: {
324
+ name: string;
325
+ type: "string" | "number" | "boolean" | "date";
326
+ description: string;
327
+ required?: boolean | undefined;
328
+ }[] | undefined;
329
+ }[] | undefined;
148
330
  }>>;
149
331
  }, "strip", z.ZodTypeAny, {
150
332
  embeddingModel: string;
@@ -158,7 +340,20 @@ export declare const CreateTenantSchema: z.ZodObject<{
158
340
  graph: number;
159
341
  recency: number;
160
342
  salience: number;
343
+ temporal: number;
161
344
  };
345
+ domainSchema?: {
346
+ entityTypes: {
347
+ name: string;
348
+ description: string;
349
+ fields: {
350
+ name: string;
351
+ type: "string" | "number" | "boolean" | "date";
352
+ description: string;
353
+ required: boolean;
354
+ }[];
355
+ }[];
356
+ } | undefined;
162
357
  }, {
163
358
  embeddingModel?: string | undefined;
164
359
  embeddingDim?: number | undefined;
@@ -171,9 +366,24 @@ export declare const CreateTenantSchema: z.ZodObject<{
171
366
  graph?: number | undefined;
172
367
  recency?: number | undefined;
173
368
  salience?: number | undefined;
369
+ temporal?: number | undefined;
370
+ } | undefined;
371
+ domainSchema?: {
372
+ entityTypes?: {
373
+ name: string;
374
+ description: string;
375
+ fields?: {
376
+ name: string;
377
+ type: "string" | "number" | "boolean" | "date";
378
+ description: string;
379
+ required?: boolean | undefined;
380
+ }[] | undefined;
381
+ }[] | undefined;
174
382
  } | undefined;
175
383
  }>>;
176
384
  }, "strip", z.ZodTypeAny, {
385
+ name: string;
386
+ slug: string;
177
387
  config: {
178
388
  embeddingModel: string;
179
389
  embeddingDim: number;
@@ -186,10 +396,21 @@ export declare const CreateTenantSchema: z.ZodObject<{
186
396
  graph: number;
187
397
  recency: number;
188
398
  salience: number;
399
+ temporal: number;
189
400
  };
401
+ domainSchema?: {
402
+ entityTypes: {
403
+ name: string;
404
+ description: string;
405
+ fields: {
406
+ name: string;
407
+ type: "string" | "number" | "boolean" | "date";
408
+ description: string;
409
+ required: boolean;
410
+ }[];
411
+ }[];
412
+ } | undefined;
190
413
  };
191
- name: string;
192
- slug: string;
193
414
  plan: "free" | "pro" | "scale" | "enterprise";
194
415
  }, {
195
416
  name: string;
@@ -206,6 +427,19 @@ export declare const CreateTenantSchema: z.ZodObject<{
206
427
  graph?: number | undefined;
207
428
  recency?: number | undefined;
208
429
  salience?: number | undefined;
430
+ temporal?: number | undefined;
431
+ } | undefined;
432
+ domainSchema?: {
433
+ entityTypes?: {
434
+ name: string;
435
+ description: string;
436
+ fields?: {
437
+ name: string;
438
+ type: "string" | "number" | "boolean" | "date";
439
+ description: string;
440
+ required?: boolean | undefined;
441
+ }[] | undefined;
442
+ }[] | undefined;
209
443
  } | undefined;
210
444
  } | undefined;
211
445
  plan?: "free" | "pro" | "scale" | "enterprise" | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["tenant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAavB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["tenant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAavB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ import { StenoConfigSchema, PLANS } from '../config.js';
3
+ export const TenantSchema = z.object({
4
+ id: z.string().uuid(),
5
+ name: z.string().max(100),
6
+ slug: z.string().max(50).regex(/^[a-z0-9-]+$/),
7
+ config: StenoConfigSchema,
8
+ plan: z.enum(PLANS),
9
+ tokenLimitMonthly: z.number().int().positive(),
10
+ queryLimitMonthly: z.number().int().positive(),
11
+ stripeCustomerId: z.string().nullable(),
12
+ stripeSubscriptionId: z.string().nullable(),
13
+ active: z.boolean(),
14
+ createdAt: z.coerce.date(),
15
+ updatedAt: z.coerce.date(),
16
+ });
17
+ export const CreateTenantSchema = z.object({
18
+ name: z.string().max(100),
19
+ slug: z.string().max(50).regex(/^[a-z0-9-]+$/),
20
+ plan: z.enum(PLANS).default('free'),
21
+ config: StenoConfigSchema.default({}),
22
+ });
23
+ //# sourceMappingURL=tenant.js.map
@@ -26,9 +26,8 @@ export declare const TriggerSchema: z.ZodObject<{
26
26
  lastFiredAt: z.ZodNullable<z.ZodDate>;
27
27
  createdAt: z.ZodDate;
28
28
  }, "strip", z.ZodTypeAny, {
29
- priority: number;
30
- id: string;
31
29
  active: boolean;
30
+ id: string;
32
31
  tenantId: string;
33
32
  scope: "user" | "agent" | "session" | "hive";
34
33
  scopeId: string;
@@ -37,6 +36,7 @@ export declare const TriggerSchema: z.ZodObject<{
37
36
  factIds: string[];
38
37
  entityIds: string[];
39
38
  queryTemplate: string | null;
39
+ priority: number;
40
40
  timesFired: number;
41
41
  lastFiredAt: Date | null;
42
42
  }, {
@@ -50,8 +50,8 @@ export declare const TriggerSchema: z.ZodObject<{
50
50
  entityIds: string[];
51
51
  queryTemplate: string | null;
52
52
  lastFiredAt: Date | null;
53
- priority?: number | undefined;
54
53
  active?: boolean | undefined;
54
+ priority?: number | undefined;
55
55
  timesFired?: number | undefined;
56
56
  }>;
57
57
  export type Trigger = z.infer<typeof TriggerSchema>;
@@ -65,23 +65,23 @@ export declare const CreateTriggerSchema: z.ZodObject<{
65
65
  queryTemplate: z.ZodOptional<z.ZodString>;
66
66
  priority: z.ZodDefault<z.ZodNumber>;
67
67
  }, "strip", z.ZodTypeAny, {
68
- priority: number;
69
68
  tenantId: string;
70
69
  scope: "user" | "agent" | "session" | "hive";
71
70
  scopeId: string;
72
71
  condition: TriggerCondition;
73
72
  factIds: string[];
74
73
  entityIds: string[];
74
+ priority: number;
75
75
  queryTemplate?: string | undefined;
76
76
  }, {
77
77
  tenantId: string;
78
78
  scope: "user" | "agent" | "session" | "hive";
79
79
  scopeId: string;
80
80
  condition: TriggerCondition;
81
- priority?: number | undefined;
82
81
  factIds?: string[] | undefined;
83
82
  entityIds?: string[] | undefined;
84
83
  queryTemplate?: string | undefined;
84
+ priority?: number | undefined;
85
85
  }>;
86
86
  export type CreateTrigger = z.infer<typeof CreateTriggerSchema>;
87
87
  //# sourceMappingURL=trigger.d.ts.map
@@ -0,0 +1,41 @@
1
+ import { z } from 'zod';
2
+ import { SCOPES } from '../config.js';
3
+ export const TriggerConditionSchema = z.lazy(() => z.object({
4
+ topic_match: z.array(z.string()).optional(),
5
+ entity_present: z.array(z.string()).optional(),
6
+ keyword_any: z.array(z.string()).optional(),
7
+ semantic_similarity: z
8
+ .object({
9
+ text: z.string(),
10
+ threshold: z.number().min(0).max(1),
11
+ })
12
+ .optional(),
13
+ AND: z.array(TriggerConditionSchema).optional(),
14
+ OR: z.array(TriggerConditionSchema).optional(),
15
+ }));
16
+ export const TriggerSchema = z.object({
17
+ id: z.string().uuid(),
18
+ tenantId: z.string().uuid(),
19
+ scope: z.enum(SCOPES),
20
+ scopeId: z.string().min(1),
21
+ condition: TriggerConditionSchema,
22
+ factIds: z.array(z.string().uuid()),
23
+ entityIds: z.array(z.string().uuid()),
24
+ queryTemplate: z.string().nullable(),
25
+ priority: z.number().int().default(0),
26
+ active: z.boolean().default(true),
27
+ timesFired: z.number().int().nonnegative().default(0),
28
+ lastFiredAt: z.coerce.date().nullable(),
29
+ createdAt: z.coerce.date(),
30
+ });
31
+ export const CreateTriggerSchema = z.object({
32
+ tenantId: z.string().uuid(),
33
+ scope: z.enum(SCOPES),
34
+ scopeId: z.string().min(1),
35
+ condition: TriggerConditionSchema,
36
+ factIds: z.array(z.string().uuid()).default([]),
37
+ entityIds: z.array(z.string().uuid()).default([]),
38
+ queryTemplate: z.string().optional(),
39
+ priority: z.number().int().default(0),
40
+ });
41
+ //# sourceMappingURL=trigger.js.map
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export const UsageRecordSchema = z.object({
3
+ id: z.string().uuid(),
4
+ tenantId: z.string().uuid(),
5
+ periodStart: z.coerce.date(),
6
+ periodEnd: z.coerce.date(),
7
+ tokensUsed: z.number().int().nonnegative(),
8
+ queriesUsed: z.number().int().nonnegative(),
9
+ extractionsCount: z.number().int().nonnegative(),
10
+ costUsd: z.number().nonnegative(),
11
+ createdAt: z.coerce.date(),
12
+ updatedAt: z.coerce.date(),
13
+ });
14
+ //# sourceMappingURL=usage-record.js.map
@@ -11,9 +11,9 @@ export declare const WebhookSchema: z.ZodObject<{
11
11
  active: z.ZodDefault<z.ZodBoolean>;
12
12
  createdAt: z.ZodDate;
13
13
  }, "strip", z.ZodTypeAny, {
14
+ active: boolean;
14
15
  url: string;
15
16
  id: string;
16
- active: boolean;
17
17
  tenantId: string;
18
18
  createdAt: Date;
19
19
  events: ("extraction.completed" | "extraction.failed" | "trigger.fired" | "usage.limit_approaching" | "usage.limit_exceeded")[];
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ export const WEBHOOK_EVENTS = [
3
+ 'extraction.completed',
4
+ 'extraction.failed',
5
+ 'trigger.fired',
6
+ 'usage.limit_approaching',
7
+ 'usage.limit_exceeded',
8
+ ];
9
+ export const WebhookSchema = z.object({
10
+ id: z.string().uuid(),
11
+ tenantId: z.string().uuid(),
12
+ url: z.string().url(),
13
+ events: z.array(z.enum(WEBHOOK_EVENTS)),
14
+ secretHash: z.string(),
15
+ signingKey: z.string(), // raw secret for HMAC signing — stored encrypted at rest in production
16
+ active: z.boolean().default(true),
17
+ createdAt: z.coerce.date(),
18
+ });
19
+ export const CreateWebhookSchema = z.object({
20
+ tenantId: z.string().uuid(),
21
+ url: z.string().url(),
22
+ events: z.array(z.enum(WEBHOOK_EVENTS)).min(1),
23
+ secret: z.string().min(16),
24
+ });
25
+ //# sourceMappingURL=webhook.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compound-search.d.ts","sourceRoot":"","sources":["compound-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,YAAY,CAAC;AA2B3D;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;IAAC,iBAAiB,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC,CA2D5E"}
1
+ {"version":3,"file":"compound-search.d.ts","sourceRoot":"","sources":["compound-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,YAAY,CAAC;AA2B3D;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;IAAC,iBAAiB,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC,CA6D5E"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Words to strip from search queries before keyword matching.
3
+ * Only question/function words that appear in queries but rarely in stored facts.
4
+ *
5
+ * NOTE: We intentionally do NOT strip "user" even though it appears in most facts.
6
+ * PostgreSQL's ts_rank uses IDF (inverse document frequency) weighting internally,
7
+ * so "user" gets near-zero weight when it appears in most documents. This is the
8
+ * correct behavior — ts_rank("user | hono") will score a fact containing "hono"
9
+ * much higher than one containing only "user", even though both match the tsquery.
10
+ */
11
+ const QUERY_STOP_WORDS = new Set([
12
+ // Question words
13
+ 'what', 'when', 'where', 'who', 'why', 'how', 'which',
14
+ // Auxiliary verbs from questions
15
+ 'is', 'are', 'was', 'were', 'did', 'does', 'do', 'will', 'can', 'could', 'would', 'should',
16
+ 'have', 'has', 'had', 'been', 'be',
17
+ // Articles and prepositions
18
+ 'the', 'a', 'an', 'in', 'on', 'at', 'to', 'for', 'of', 'with',
19
+ // Conjunctions
20
+ 'and', 'or', 'but', 'not', 'if', 'still',
21
+ // Pronouns
22
+ 'it', 'its', 'her', 'his', 'she', 'he', 'they', 'them', 'their', 'my', 'your', 'our',
23
+ 'that', 'this',
24
+ ]);
25
+ /**
26
+ * Compound search: embeds the query, then calls storage.compoundSearch
27
+ * (ONE database call for both vector + keyword), and splits results
28
+ * into Candidate format.
29
+ */
30
+ export async function compoundSearchSignal(storage, embedding, query, tenantId, scope, scopeId, limit) {
31
+ const queryEmbedding = await embedding.embed(query);
32
+ // Extract content words, join with OR for to_tsquery
33
+ // ts_rank handles IDF weighting — high-frequency terms get low scores automatically
34
+ const keywordQuery = query.toLowerCase()
35
+ .replace(/[^a-z0-9\s]/g, ' ')
36
+ .split(/\s+/)
37
+ .filter(w => w.length >= 2 && !QUERY_STOP_WORDS.has(w))
38
+ .join(' | ');
39
+ const results = await storage.compoundSearch({
40
+ embedding: queryEmbedding,
41
+ query: keywordQuery || query,
42
+ tenantId,
43
+ scope,
44
+ scopeId,
45
+ limit,
46
+ minSimilarity: 0.25, // low threshold — let fusion scoring handle ranking, not hard cutoffs
47
+ });
48
+ const vectorCandidates = [];
49
+ const keywordCandidates = [];
50
+ for (const r of results) {
51
+ if (r.source === 'vector') {
52
+ vectorCandidates.push({
53
+ fact: r.fact,
54
+ vectorScore: r.relevanceScore,
55
+ keywordScore: 0,
56
+ graphScore: 0,
57
+ recencyScore: 0,
58
+ salienceScore: 0,
59
+ temporalScore: 0,
60
+ source: 'vector',
61
+ });
62
+ }
63
+ else {
64
+ keywordCandidates.push({
65
+ fact: r.fact,
66
+ vectorScore: 0,
67
+ keywordScore: r.relevanceScore,
68
+ graphScore: 0,
69
+ recencyScore: 0,
70
+ salienceScore: 0,
71
+ temporalScore: 0,
72
+ source: 'keyword',
73
+ });
74
+ }
75
+ }
76
+ // Normalize keyword scores to [0, 1] range
77
+ if (keywordCandidates.length > 0) {
78
+ const maxRank = Math.max(...keywordCandidates.map(c => c.keywordScore));
79
+ if (maxRank > 0) {
80
+ for (const c of keywordCandidates) {
81
+ c.keywordScore = c.keywordScore / maxRank;
82
+ }
83
+ }
84
+ }
85
+ return { vectorCandidates, keywordCandidates };
86
+ }
87
+ //# sourceMappingURL=compound-search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compound-search.js","sourceRoot":"","sources":["compound-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compound-search.js","sourceRoot":"","sources":["compound-search.ts"],"names":[],"mappings":"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"}