@steno-ai/engine 0.1.15 → 0.1.17

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/dist/adapters/storage.d.ts +29 -2
  2. package/dist/adapters/storage.d.ts.map +1 -1
  3. package/dist/config.d.ts +3 -3
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +9 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/extraction/index.d.ts +2 -0
  8. package/dist/extraction/index.d.ts.map +1 -1
  9. package/dist/extraction/index.js +2 -0
  10. package/dist/extraction/index.js.map +1 -1
  11. package/dist/extraction/pipeline.d.ts.map +1 -1
  12. package/dist/extraction/pipeline.js +48 -1
  13. package/dist/extraction/pipeline.js.map +1 -1
  14. package/dist/extraction/structured-cross-linker.d.ts +55 -0
  15. package/dist/extraction/structured-cross-linker.d.ts.map +1 -0
  16. package/dist/extraction/structured-cross-linker.js +195 -0
  17. package/dist/extraction/structured-cross-linker.js.map +1 -0
  18. package/dist/extraction/structured-extractor.d.ts +59 -0
  19. package/dist/extraction/structured-extractor.d.ts.map +1 -0
  20. package/dist/extraction/structured-extractor.js +389 -0
  21. package/dist/extraction/structured-extractor.js.map +1 -0
  22. package/dist/extraction/types.d.ts +3 -1
  23. package/dist/extraction/types.d.ts.map +1 -1
  24. package/dist/identity/index.d.ts +2 -0
  25. package/dist/identity/index.d.ts.map +1 -0
  26. package/dist/identity/index.js +2 -0
  27. package/dist/identity/index.js.map +1 -0
  28. package/dist/identity/resolver.d.ts +31 -0
  29. package/dist/identity/resolver.d.ts.map +1 -0
  30. package/dist/identity/resolver.js +122 -0
  31. package/dist/identity/resolver.js.map +1 -0
  32. package/dist/index.d.ts +1 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +1 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/models/edge.d.ts +6 -6
  37. package/dist/models/entity.d.ts +32 -0
  38. package/dist/models/entity.d.ts.map +1 -1
  39. package/dist/models/entity.js +11 -0
  40. package/dist/models/entity.js.map +1 -1
  41. package/dist/models/extraction.d.ts +6 -6
  42. package/dist/models/fact.d.ts +6 -6
  43. package/dist/retrieval/graph-traversal.d.ts +4 -1
  44. package/dist/retrieval/graph-traversal.d.ts.map +1 -1
  45. package/dist/retrieval/graph-traversal.js +6 -3
  46. package/dist/retrieval/graph-traversal.js.map +1 -1
  47. package/dist/retrieval/search.d.ts.map +1 -1
  48. package/dist/retrieval/search.js +56 -3
  49. package/dist/retrieval/search.js.map +1 -1
  50. package/dist/retrieval/types.d.ts +1 -0
  51. package/dist/retrieval/types.d.ts.map +1 -1
  52. package/dist/retrieval/types.js.map +1 -1
  53. package/package.json +1 -1
  54. package/src/adapters/storage.ts +35 -2
  55. package/src/config.ts +9 -0
  56. package/src/extraction/index.ts +2 -0
  57. package/src/extraction/pipeline.ts +63 -1
  58. package/src/extraction/structured-cross-linker.ts +259 -0
  59. package/src/extraction/structured-extractor.ts +463 -0
  60. package/src/extraction/types.ts +3 -1
  61. package/src/identity/index.ts +1 -0
  62. package/src/identity/resolver.ts +149 -0
  63. package/src/index.ts +1 -0
  64. package/src/models/entity.ts +13 -0
  65. package/src/retrieval/graph-traversal.ts +7 -4
  66. package/src/retrieval/search.ts +58 -3
  67. package/src/retrieval/types.ts +1 -0
  68. package/src/adapters/cache.d.ts +0 -9
  69. package/src/adapters/cache.d.ts.map +0 -1
  70. package/src/adapters/cache.js +0 -2
  71. package/src/adapters/cache.js.map +0 -1
  72. package/src/adapters/embedding.d.ts +0 -7
  73. package/src/adapters/embedding.d.ts.map +0 -1
  74. package/src/adapters/embedding.js +0 -2
  75. package/src/adapters/embedding.js.map +0 -1
  76. package/src/adapters/llm.d.ts +0 -19
  77. package/src/adapters/llm.d.ts.map +0 -1
  78. package/src/adapters/llm.js +0 -2
  79. package/src/adapters/llm.js.map +0 -1
  80. package/src/adapters/perplexity-embedding.d.ts +0 -24
  81. package/src/adapters/perplexity-embedding.d.ts.map +0 -1
  82. package/src/adapters/perplexity-embedding.js +0 -78
  83. package/src/adapters/perplexity-embedding.js.map +0 -1
  84. package/src/adapters/storage.d.ts +0 -173
  85. package/src/adapters/storage.d.ts.map +0 -1
  86. package/src/adapters/storage.js +0 -2
  87. package/src/adapters/storage.js.map +0 -1
  88. package/src/config.d.ts +0 -296
  89. package/src/config.d.ts.map +0 -1
  90. package/src/config.js +0 -92
  91. package/src/config.js.map +0 -1
  92. package/src/extraction/contradiction.d.ts +0 -15
  93. package/src/extraction/contradiction.d.ts.map +0 -1
  94. package/src/extraction/contradiction.js +0 -23
  95. package/src/extraction/contradiction.js.map +0 -1
  96. package/src/extraction/cross-linker.d.ts +0 -23
  97. package/src/extraction/cross-linker.d.ts.map +0 -1
  98. package/src/extraction/cross-linker.js +0 -146
  99. package/src/extraction/cross-linker.js.map +0 -1
  100. package/src/extraction/dedup.d.ts +0 -12
  101. package/src/extraction/dedup.d.ts.map +0 -1
  102. package/src/extraction/dedup.js +0 -93
  103. package/src/extraction/dedup.js.map +0 -1
  104. package/src/extraction/entity-extractor.d.ts +0 -30
  105. package/src/extraction/entity-extractor.d.ts.map +0 -1
  106. package/src/extraction/entity-extractor.js +0 -145
  107. package/src/extraction/entity-extractor.js.map +0 -1
  108. package/src/extraction/hasher.d.ts +0 -5
  109. package/src/extraction/hasher.d.ts.map +0 -1
  110. package/src/extraction/hasher.js +0 -8
  111. package/src/extraction/hasher.js.map +0 -1
  112. package/src/extraction/heuristic.d.ts +0 -3
  113. package/src/extraction/heuristic.d.ts.map +0 -1
  114. package/src/extraction/heuristic.js +0 -282
  115. package/src/extraction/heuristic.js.map +0 -1
  116. package/src/extraction/llm-extractor.d.ts +0 -23
  117. package/src/extraction/llm-extractor.d.ts.map +0 -1
  118. package/src/extraction/llm-extractor.js +0 -240
  119. package/src/extraction/llm-extractor.js.map +0 -1
  120. package/src/extraction/pipeline.d.ts +0 -30
  121. package/src/extraction/pipeline.d.ts.map +0 -1
  122. package/src/extraction/pipeline.js +0 -413
  123. package/src/extraction/pipeline.js.map +0 -1
  124. package/src/extraction/prompts.d.ts +0 -28
  125. package/src/extraction/prompts.d.ts.map +0 -1
  126. package/src/extraction/prompts.js +0 -205
  127. package/src/extraction/prompts.js.map +0 -1
  128. package/src/extraction/sliding-window.d.ts +0 -41
  129. package/src/extraction/sliding-window.d.ts.map +0 -1
  130. package/src/extraction/sliding-window.js +0 -84
  131. package/src/extraction/sliding-window.js.map +0 -1
  132. package/src/extraction/types.d.ts +0 -80
  133. package/src/extraction/types.d.ts.map +0 -1
  134. package/src/extraction/types.js +0 -2
  135. package/src/extraction/types.js.map +0 -1
  136. package/src/feedback/tracker.d.ts +0 -25
  137. package/src/feedback/tracker.d.ts.map +0 -1
  138. package/src/feedback/tracker.js +0 -90
  139. package/src/feedback/tracker.js.map +0 -1
  140. package/src/models/api-key.d.ts +0 -54
  141. package/src/models/api-key.d.ts.map +0 -1
  142. package/src/models/api-key.js +0 -21
  143. package/src/models/api-key.js.map +0 -1
  144. package/src/models/edge.d.ts +0 -78
  145. package/src/models/edge.d.ts.map +0 -1
  146. package/src/models/edge.js +0 -29
  147. package/src/models/edge.js.map +0 -1
  148. package/src/models/entity.d.ts +0 -60
  149. package/src/models/entity.d.ts.map +0 -1
  150. package/src/models/entity.js +0 -22
  151. package/src/models/entity.js.map +0 -1
  152. package/src/models/extraction.d.ts +0 -111
  153. package/src/models/extraction.d.ts.map +0 -1
  154. package/src/models/extraction.js +0 -40
  155. package/src/models/extraction.js.map +0 -1
  156. package/src/models/fact-entity.d.ts +0 -33
  157. package/src/models/fact-entity.d.ts.map +0 -1
  158. package/src/models/fact-entity.js +0 -14
  159. package/src/models/fact-entity.js.map +0 -1
  160. package/src/models/fact.d.ts +0 -191
  161. package/src/models/fact.d.ts.map +0 -1
  162. package/src/models/fact.js +0 -72
  163. package/src/models/fact.js.map +0 -1
  164. package/src/models/index.d.ts +0 -13
  165. package/src/models/index.d.ts.map +0 -1
  166. package/src/models/index.js +0 -13
  167. package/src/models/index.js.map +0 -1
  168. package/src/models/memory-access.d.ts +0 -89
  169. package/src/models/memory-access.d.ts.map +0 -1
  170. package/src/models/memory-access.js +0 -33
  171. package/src/models/memory-access.js.map +0 -1
  172. package/src/models/session.d.ts +0 -60
  173. package/src/models/session.d.ts.map +0 -1
  174. package/src/models/session.js +0 -23
  175. package/src/models/session.js.map +0 -1
  176. package/src/models/tenant.d.ts +0 -448
  177. package/src/models/tenant.d.ts.map +0 -1
  178. package/src/models/tenant.js +0 -23
  179. package/src/models/tenant.js.map +0 -1
  180. package/src/models/trigger.d.ts +0 -87
  181. package/src/models/trigger.d.ts.map +0 -1
  182. package/src/models/trigger.js +0 -41
  183. package/src/models/trigger.js.map +0 -1
  184. package/src/models/usage-record.d.ts +0 -37
  185. package/src/models/usage-record.d.ts.map +0 -1
  186. package/src/models/usage-record.js +0 -14
  187. package/src/models/usage-record.js.map +0 -1
  188. package/src/models/webhook.d.ts +0 -50
  189. package/src/models/webhook.d.ts.map +0 -1
  190. package/src/models/webhook.js +0 -25
  191. package/src/models/webhook.js.map +0 -1
  192. package/src/retrieval/compound-search.d.ts +0 -13
  193. package/src/retrieval/compound-search.d.ts.map +0 -1
  194. package/src/retrieval/compound-search.js +0 -87
  195. package/src/retrieval/compound-search.js.map +0 -1
  196. package/src/retrieval/contradiction-surfacer.d.ts +0 -18
  197. package/src/retrieval/contradiction-surfacer.d.ts.map +0 -1
  198. package/src/retrieval/contradiction-surfacer.js +0 -64
  199. package/src/retrieval/contradiction-surfacer.js.map +0 -1
  200. package/src/retrieval/embedding-cache.d.ts +0 -17
  201. package/src/retrieval/embedding-cache.d.ts.map +0 -1
  202. package/src/retrieval/embedding-cache.js +0 -56
  203. package/src/retrieval/embedding-cache.js.map +0 -1
  204. package/src/retrieval/fusion.d.ts +0 -27
  205. package/src/retrieval/fusion.d.ts.map +0 -1
  206. package/src/retrieval/fusion.js +0 -87
  207. package/src/retrieval/fusion.js.map +0 -1
  208. package/src/retrieval/graph-traversal.d.ts +0 -29
  209. package/src/retrieval/graph-traversal.d.ts.map +0 -1
  210. package/src/retrieval/graph-traversal.js +0 -208
  211. package/src/retrieval/graph-traversal.js.map +0 -1
  212. package/src/retrieval/query-expansion.d.ts +0 -20
  213. package/src/retrieval/query-expansion.d.ts.map +0 -1
  214. package/src/retrieval/query-expansion.js +0 -76
  215. package/src/retrieval/query-expansion.js.map +0 -1
  216. package/src/retrieval/reranker.d.ts +0 -15
  217. package/src/retrieval/reranker.d.ts.map +0 -1
  218. package/src/retrieval/reranker.js +0 -47
  219. package/src/retrieval/reranker.js.map +0 -1
  220. package/src/retrieval/salience-scorer.d.ts +0 -15
  221. package/src/retrieval/salience-scorer.d.ts.map +0 -1
  222. package/src/retrieval/salience-scorer.js +0 -41
  223. package/src/retrieval/salience-scorer.js.map +0 -1
  224. package/src/retrieval/search.d.ts +0 -21
  225. package/src/retrieval/search.d.ts.map +0 -1
  226. package/src/retrieval/search.js +0 -228
  227. package/src/retrieval/search.js.map +0 -1
  228. package/src/retrieval/temporal-scorer.d.ts +0 -18
  229. package/src/retrieval/temporal-scorer.d.ts.map +0 -1
  230. package/src/retrieval/temporal-scorer.js +0 -106
  231. package/src/retrieval/temporal-scorer.js.map +0 -1
  232. package/src/retrieval/trigger-matcher.d.ts +0 -18
  233. package/src/retrieval/trigger-matcher.d.ts.map +0 -1
  234. package/src/retrieval/trigger-matcher.js +0 -134
  235. package/src/retrieval/trigger-matcher.js.map +0 -1
  236. package/src/retrieval/types.d.ts +0 -70
  237. package/src/retrieval/types.d.ts.map +0 -1
  238. package/src/retrieval/types.js +0 -9
  239. package/src/retrieval/types.js.map +0 -1
  240. package/src/retrieval/vector-search.d.ts +0 -5
  241. package/src/retrieval/vector-search.d.ts.map +0 -1
  242. package/src/retrieval/vector-search.js +0 -24
  243. package/src/retrieval/vector-search.js.map +0 -1
  244. package/src/salience/decay.d.ts +0 -9
  245. package/src/salience/decay.d.ts.map +0 -1
  246. package/src/salience/decay.js +0 -15
  247. package/src/salience/decay.js.map +0 -1
  248. package/src/scratchpad/scratchpad.d.ts +0 -23
  249. package/src/scratchpad/scratchpad.d.ts.map +0 -1
  250. package/src/scratchpad/scratchpad.js +0 -137
  251. package/src/scratchpad/scratchpad.js.map +0 -1
  252. package/src/sessions/manager.d.ts +0 -11
  253. package/src/sessions/manager.d.ts.map +0 -1
  254. package/src/sessions/manager.js +0 -63
  255. package/src/sessions/manager.js.map +0 -1
package/src/config.d.ts DELETED
@@ -1,296 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const unitFloat: z.ZodNumber;
3
- export declare const EntityFieldSchema: z.ZodObject<{
4
- name: z.ZodString;
5
- type: z.ZodEnum<["string", "number", "boolean", "date"]>;
6
- description: z.ZodString;
7
- required: z.ZodDefault<z.ZodBoolean>;
8
- }, "strip", z.ZodTypeAny, {
9
- name: string;
10
- type: "string" | "number" | "boolean" | "date";
11
- description: string;
12
- required: boolean;
13
- }, {
14
- name: string;
15
- type: "string" | "number" | "boolean" | "date";
16
- description: string;
17
- required?: boolean | undefined;
18
- }>;
19
- export type EntityField = z.infer<typeof EntityFieldSchema>;
20
- export declare const DomainEntityTypeSchema: z.ZodObject<{
21
- name: z.ZodString;
22
- description: z.ZodString;
23
- fields: z.ZodDefault<z.ZodArray<z.ZodObject<{
24
- name: z.ZodString;
25
- type: z.ZodEnum<["string", "number", "boolean", "date"]>;
26
- description: z.ZodString;
27
- required: z.ZodDefault<z.ZodBoolean>;
28
- }, "strip", z.ZodTypeAny, {
29
- name: string;
30
- type: "string" | "number" | "boolean" | "date";
31
- description: string;
32
- required: boolean;
33
- }, {
34
- name: string;
35
- type: "string" | "number" | "boolean" | "date";
36
- description: string;
37
- required?: boolean | undefined;
38
- }>, "many">>;
39
- }, "strip", z.ZodTypeAny, {
40
- name: string;
41
- description: string;
42
- fields: {
43
- name: string;
44
- type: "string" | "number" | "boolean" | "date";
45
- description: string;
46
- required: boolean;
47
- }[];
48
- }, {
49
- name: string;
50
- description: string;
51
- fields?: {
52
- name: string;
53
- type: "string" | "number" | "boolean" | "date";
54
- description: string;
55
- required?: boolean | undefined;
56
- }[] | undefined;
57
- }>;
58
- export type DomainEntityType = z.infer<typeof DomainEntityTypeSchema>;
59
- export declare const DomainSchemaSchema: z.ZodObject<{
60
- entityTypes: z.ZodDefault<z.ZodArray<z.ZodObject<{
61
- name: z.ZodString;
62
- description: z.ZodString;
63
- fields: z.ZodDefault<z.ZodArray<z.ZodObject<{
64
- name: z.ZodString;
65
- type: z.ZodEnum<["string", "number", "boolean", "date"]>;
66
- description: z.ZodString;
67
- required: z.ZodDefault<z.ZodBoolean>;
68
- }, "strip", z.ZodTypeAny, {
69
- name: string;
70
- type: "string" | "number" | "boolean" | "date";
71
- description: string;
72
- required: boolean;
73
- }, {
74
- name: string;
75
- type: "string" | "number" | "boolean" | "date";
76
- description: string;
77
- required?: boolean | undefined;
78
- }>, "many">>;
79
- }, "strip", z.ZodTypeAny, {
80
- name: string;
81
- description: string;
82
- fields: {
83
- name: string;
84
- type: "string" | "number" | "boolean" | "date";
85
- description: string;
86
- required: boolean;
87
- }[];
88
- }, {
89
- name: string;
90
- description: string;
91
- fields?: {
92
- name: string;
93
- type: "string" | "number" | "boolean" | "date";
94
- description: string;
95
- required?: boolean | undefined;
96
- }[] | undefined;
97
- }>, "many">>;
98
- }, "strip", z.ZodTypeAny, {
99
- entityTypes: {
100
- name: string;
101
- description: string;
102
- fields: {
103
- name: string;
104
- type: "string" | "number" | "boolean" | "date";
105
- description: string;
106
- required: boolean;
107
- }[];
108
- }[];
109
- }, {
110
- entityTypes?: {
111
- name: string;
112
- description: string;
113
- fields?: {
114
- name: string;
115
- type: "string" | "number" | "boolean" | "date";
116
- description: string;
117
- required?: boolean | undefined;
118
- }[] | undefined;
119
- }[] | undefined;
120
- }>;
121
- export type DomainSchema = z.infer<typeof DomainSchemaSchema>;
122
- export declare const StenoConfigSchema: z.ZodObject<{
123
- embeddingModel: z.ZodDefault<z.ZodString>;
124
- embeddingDim: z.ZodDefault<z.ZodNumber>;
125
- decayHalfLifeDays: z.ZodDefault<z.ZodNumber>;
126
- decayNormalizationK: z.ZodDefault<z.ZodNumber>;
127
- maxFactsPerScope: z.ZodDefault<z.ZodNumber>;
128
- retrievalWeights: z.ZodDefault<z.ZodObject<{
129
- vector: z.ZodDefault<z.ZodNumber>;
130
- keyword: z.ZodDefault<z.ZodNumber>;
131
- graph: z.ZodDefault<z.ZodNumber>;
132
- recency: z.ZodDefault<z.ZodNumber>;
133
- salience: z.ZodDefault<z.ZodNumber>;
134
- temporal: z.ZodDefault<z.ZodNumber>;
135
- }, "strip", z.ZodTypeAny, {
136
- vector: number;
137
- keyword: number;
138
- graph: number;
139
- recency: number;
140
- salience: number;
141
- temporal: number;
142
- }, {
143
- vector?: number | undefined;
144
- keyword?: number | undefined;
145
- graph?: number | undefined;
146
- recency?: number | undefined;
147
- salience?: number | undefined;
148
- temporal?: number | undefined;
149
- }>>;
150
- domainSchema: z.ZodOptional<z.ZodObject<{
151
- entityTypes: z.ZodDefault<z.ZodArray<z.ZodObject<{
152
- name: z.ZodString;
153
- description: z.ZodString;
154
- fields: z.ZodDefault<z.ZodArray<z.ZodObject<{
155
- name: z.ZodString;
156
- type: z.ZodEnum<["string", "number", "boolean", "date"]>;
157
- description: z.ZodString;
158
- required: z.ZodDefault<z.ZodBoolean>;
159
- }, "strip", z.ZodTypeAny, {
160
- name: string;
161
- type: "string" | "number" | "boolean" | "date";
162
- description: string;
163
- required: boolean;
164
- }, {
165
- name: string;
166
- type: "string" | "number" | "boolean" | "date";
167
- description: string;
168
- required?: boolean | undefined;
169
- }>, "many">>;
170
- }, "strip", z.ZodTypeAny, {
171
- name: string;
172
- description: string;
173
- fields: {
174
- name: string;
175
- type: "string" | "number" | "boolean" | "date";
176
- description: string;
177
- required: boolean;
178
- }[];
179
- }, {
180
- name: string;
181
- description: string;
182
- fields?: {
183
- name: string;
184
- type: "string" | "number" | "boolean" | "date";
185
- description: string;
186
- required?: boolean | undefined;
187
- }[] | undefined;
188
- }>, "many">>;
189
- }, "strip", z.ZodTypeAny, {
190
- entityTypes: {
191
- name: string;
192
- description: string;
193
- fields: {
194
- name: string;
195
- type: "string" | "number" | "boolean" | "date";
196
- description: string;
197
- required: boolean;
198
- }[];
199
- }[];
200
- }, {
201
- entityTypes?: {
202
- name: string;
203
- description: string;
204
- fields?: {
205
- name: string;
206
- type: "string" | "number" | "boolean" | "date";
207
- description: string;
208
- required?: boolean | undefined;
209
- }[] | undefined;
210
- }[] | undefined;
211
- }>>;
212
- }, "strip", z.ZodTypeAny, {
213
- embeddingModel: string;
214
- embeddingDim: number;
215
- decayHalfLifeDays: number;
216
- decayNormalizationK: number;
217
- maxFactsPerScope: number;
218
- retrievalWeights: {
219
- vector: number;
220
- keyword: number;
221
- graph: number;
222
- recency: number;
223
- salience: number;
224
- temporal: number;
225
- };
226
- domainSchema?: {
227
- entityTypes: {
228
- name: string;
229
- description: string;
230
- fields: {
231
- name: string;
232
- type: "string" | "number" | "boolean" | "date";
233
- description: string;
234
- required: boolean;
235
- }[];
236
- }[];
237
- } | undefined;
238
- }, {
239
- embeddingModel?: string | undefined;
240
- embeddingDim?: number | undefined;
241
- decayHalfLifeDays?: number | undefined;
242
- decayNormalizationK?: number | undefined;
243
- maxFactsPerScope?: number | undefined;
244
- retrievalWeights?: {
245
- vector?: number | undefined;
246
- keyword?: number | undefined;
247
- graph?: number | undefined;
248
- recency?: number | undefined;
249
- salience?: number | undefined;
250
- temporal?: number | undefined;
251
- } | undefined;
252
- domainSchema?: {
253
- entityTypes?: {
254
- name: string;
255
- description: string;
256
- fields?: {
257
- name: string;
258
- type: "string" | "number" | "boolean" | "date";
259
- description: string;
260
- required?: boolean | undefined;
261
- }[] | undefined;
262
- }[] | undefined;
263
- } | undefined;
264
- }>;
265
- export type StenoConfig = z.infer<typeof StenoConfigSchema>;
266
- export declare const SCOPES: readonly ["user", "agent", "session", "hive"];
267
- export type Scope = (typeof SCOPES)[number];
268
- export declare const SESSION_SCOPES: readonly ["user", "agent", "hive"];
269
- export type SessionScope = (typeof SESSION_SCOPES)[number];
270
- export declare const OPERATIONS: readonly ["create", "update", "invalidate"];
271
- export type Operation = (typeof OPERATIONS)[number];
272
- export declare const CONTRADICTION_STATUSES: readonly ["none", "active", "resolved", "superseded"];
273
- export type ContradictionStatus = (typeof CONTRADICTION_STATUSES)[number];
274
- export declare const SOURCE_TYPES: readonly ["conversation", "document", "url", "raw_text", "api", "agent_self"];
275
- export type SourceType = (typeof SOURCE_TYPES)[number];
276
- export declare const EXTRACTION_TIERS: readonly ["heuristic", "cheap_llm", "smart_llm"];
277
- export type ExtractionTier = (typeof EXTRACTION_TIERS)[number];
278
- export declare const EXTRACTION_TIERS_USED: readonly ["heuristic", "cheap_llm", "smart_llm", "multi_tier"];
279
- export type ExtractionTierUsed = (typeof EXTRACTION_TIERS_USED)[number];
280
- export declare const MODALITIES: readonly ["text", "image", "audio", "code", "document"];
281
- export type Modality = (typeof MODALITIES)[number];
282
- export declare const EDGE_TYPES: readonly ["associative", "causal", "temporal", "contradictory", "hierarchical", "updates", "extends", "derives"];
283
- export type EdgeType = (typeof EDGE_TYPES)[number];
284
- export declare const EXTRACTION_STATUSES: readonly ["queued", "processing", "completed", "failed", "deduped"];
285
- export type ExtractionStatus = (typeof EXTRACTION_STATUSES)[number];
286
- export declare const INPUT_TYPES: readonly ["conversation", "document", "url", "raw_text", "image", "audio", "code"];
287
- export type InputType = (typeof INPUT_TYPES)[number];
288
- export declare const PLANS: readonly ["free", "pro", "scale", "enterprise"];
289
- export type Plan = (typeof PLANS)[number];
290
- export declare const API_KEY_SCOPES: readonly ["read", "write", "admin"];
291
- export type ApiKeyScope = (typeof API_KEY_SCOPES)[number];
292
- export declare const FEEDBACK_TYPES: readonly ["implicit_positive", "implicit_negative", "explicit_positive", "explicit_negative", "correction"];
293
- export type FeedbackType = (typeof FEEDBACK_TYPES)[number];
294
- export declare const ENTITY_ROLES: readonly ["subject", "object", "mentioned"];
295
- export type EntityRole = (typeof ENTITY_ROLES)[number];
296
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["config.ts"],"names":[],"mappings":"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"}
package/src/config.js DELETED
@@ -1,92 +0,0 @@
1
- import { z } from 'zod';
2
- // Shared Zod helpers
3
- export const unitFloat = z.number().min(0).max(1);
4
- // ---------------------------------------------------------------------------
5
- // Domain-scoped graph schemas — custom entity types with typed attributes
6
- // ---------------------------------------------------------------------------
7
- export const EntityFieldSchema = z.object({
8
- name: z.string(),
9
- type: z.enum(['string', 'number', 'boolean', 'date']),
10
- description: z.string(),
11
- required: z.boolean().default(false),
12
- });
13
- export const DomainEntityTypeSchema = z.object({
14
- name: z.string(),
15
- description: z.string(),
16
- fields: z.array(EntityFieldSchema).default([]),
17
- });
18
- export const DomainSchemaSchema = z.object({
19
- entityTypes: z.array(DomainEntityTypeSchema).default([]),
20
- });
21
- // Steno engine configuration schema
22
- export const StenoConfigSchema = z.object({
23
- embeddingModel: z.string().default('text-embedding-3-small'),
24
- embeddingDim: z.number().int().positive().default(1536),
25
- decayHalfLifeDays: z.number().positive().default(30),
26
- decayNormalizationK: z.number().positive().default(50),
27
- maxFactsPerScope: z.number().int().positive().default(10000),
28
- retrievalWeights: z
29
- .object({
30
- vector: z.number().min(0).max(1).default(0.35),
31
- keyword: z.number().min(0).max(1).default(0.15),
32
- graph: z.number().min(0).max(1).default(0.2),
33
- recency: z.number().min(0).max(1).default(0.15),
34
- salience: z.number().min(0).max(1).default(0.15),
35
- temporal: z.number().min(0).max(1).default(0.20),
36
- })
37
- .default({}),
38
- domainSchema: DomainSchemaSchema.optional(),
39
- });
40
- export const SCOPES = ['user', 'agent', 'session', 'hive'];
41
- // SESSION_SCOPES is a subset of SCOPES — sessions themselves cannot be scoped to another session
42
- export const SESSION_SCOPES = ['user', 'agent', 'hive'];
43
- export const OPERATIONS = ['create', 'update', 'invalidate'];
44
- export const CONTRADICTION_STATUSES = ['none', 'active', 'resolved', 'superseded'];
45
- export const SOURCE_TYPES = [
46
- 'conversation',
47
- 'document',
48
- 'url',
49
- 'raw_text',
50
- 'api',
51
- 'agent_self',
52
- ];
53
- export const EXTRACTION_TIERS = ['heuristic', 'cheap_llm', 'smart_llm'];
54
- export const EXTRACTION_TIERS_USED = [...EXTRACTION_TIERS, 'multi_tier'];
55
- export const MODALITIES = ['text', 'image', 'audio', 'code', 'document'];
56
- export const EDGE_TYPES = [
57
- 'associative',
58
- 'causal',
59
- 'temporal',
60
- 'contradictory',
61
- 'hierarchical',
62
- 'updates', // new fact supersedes old one (knowledge chain)
63
- 'extends', // new fact adds detail to old one
64
- 'derives', // new fact is inferred from combining others
65
- ];
66
- export const EXTRACTION_STATUSES = [
67
- 'queued',
68
- 'processing',
69
- 'completed',
70
- 'failed',
71
- 'deduped',
72
- ];
73
- export const INPUT_TYPES = [
74
- 'conversation',
75
- 'document',
76
- 'url',
77
- 'raw_text',
78
- 'image',
79
- 'audio',
80
- 'code',
81
- ];
82
- export const PLANS = ['free', 'pro', 'scale', 'enterprise'];
83
- export const API_KEY_SCOPES = ['read', 'write', 'admin'];
84
- export const FEEDBACK_TYPES = [
85
- 'implicit_positive',
86
- 'implicit_negative',
87
- 'explicit_positive',
88
- 'explicit_negative',
89
- 'correction',
90
- ];
91
- export const ENTITY_ROLES = ['subject', 'object', 'mentioned'];
92
- //# sourceMappingURL=config.js.map
package/src/config.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["config.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import type { ExtractedFact } from './types.js';
2
- import type { ContradictionStatus } from '../config.js';
3
- export interface ContradictionResult {
4
- fact: ExtractedFact;
5
- contradictionStatus: ContradictionStatus;
6
- contradictsId: string | null;
7
- }
8
- /**
9
- * Process extracted facts and annotate contradictions.
10
- * Facts with operation='contradict' get contradictionStatus='active'
11
- * and contradictsId set to the fact they contradict.
12
- * All other facts get contradictionStatus='none'.
13
- */
14
- export declare function processContradictions(facts: ExtractedFact[]): ContradictionResult[];
15
- //# sourceMappingURL=contradiction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contradiction.d.ts","sourceRoot":"","sources":["contradiction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,aAAa,CAAC;IACpB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EAAE,GACrB,mBAAmB,EAAE,CAevB"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Process extracted facts and annotate contradictions.
3
- * Facts with operation='contradict' get contradictionStatus='active'
4
- * and contradictsId set to the fact they contradict.
5
- * All other facts get contradictionStatus='none'.
6
- */
7
- export function processContradictions(facts) {
8
- return facts.map(fact => {
9
- if (fact.operation === 'contradict' && fact.contradictsFactId) {
10
- return {
11
- fact,
12
- contradictionStatus: 'active',
13
- contradictsId: fact.contradictsFactId,
14
- };
15
- }
16
- return {
17
- fact,
18
- contradictionStatus: 'none',
19
- contradictsId: null,
20
- };
21
- });
22
- }
23
- //# sourceMappingURL=contradiction.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contradiction.js","sourceRoot":"","sources":["contradiction.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAsB;IAEtB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC9D,OAAO;gBACL,IAAI;gBACJ,mBAAmB,EAAE,QAAiB;gBACtC,aAAa,EAAE,IAAI,CAAC,iBAAiB;aACtC,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI;YACJ,mBAAmB,EAAE,MAAe;YACpC,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Cross-Fact Edge Linker — Intelligent Relationship Detection
3
- *
4
- * After extraction, finds existing facts that share entities with new facts
5
- * AND are semantically similar (not just any shared entity). Creates
6
- * 'relates_to' edges only when facts are actually about the same topic.
7
- *
8
- * Heuristics:
9
- * 1. Shared entity (required) — both facts mention the same entity
10
- * 2. Content similarity (required) — facts have overlapping keywords (>30% overlap)
11
- * 3. Temporal proximity (bonus) — facts created within 7 days get priority
12
- * 4. Skip generic entities — "user" entity is too broad to link on
13
- */
14
- import type { StorageAdapter } from '../adapters/storage.js';
15
- /**
16
- * Link newly created facts to existing related facts through shared entities.
17
- * Uses keyword overlap + temporal proximity to determine relevance.
18
- *
19
- * Only creates edges when facts are genuinely related — not just because
20
- * they both mention "Steno" or "user".
21
- */
22
- export declare function linkRelatedFacts(storage: StorageAdapter, tenantId: string, newFactIds: string[], entityIdMap: Map<string, string>): Promise<number>;
23
- //# sourceMappingURL=cross-linker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cross-linker.d.ts","sourceRoot":"","sources":["cross-linker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAyD7D;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,CAkFjB"}
@@ -1,146 +0,0 @@
1
- /**
2
- * Cross-Fact Edge Linker — Intelligent Relationship Detection
3
- *
4
- * After extraction, finds existing facts that share entities with new facts
5
- * AND are semantically similar (not just any shared entity). Creates
6
- * 'relates_to' edges only when facts are actually about the same topic.
7
- *
8
- * Heuristics:
9
- * 1. Shared entity (required) — both facts mention the same entity
10
- * 2. Content similarity (required) — facts have overlapping keywords (>30% overlap)
11
- * 3. Temporal proximity (bonus) — facts created within 7 days get priority
12
- * 4. Skip generic entities — "user" entity is too broad to link on
13
- */
14
- const GENERIC_ENTITIES = new Set(['user', 'assistant', 'navia', 'steno']);
15
- const MIN_KEYWORD_OVERLAP = 0.25; // 25% of keywords must overlap
16
- const MAX_LINKS_PER_FACT = 3; // Don't create too many edges per new fact
17
- const TEMPORAL_WINDOW_DAYS = 14; // Prefer facts within 2 weeks
18
- /**
19
- * Extract meaningful keywords from fact content for similarity comparison.
20
- * Strips stop words, lowercases, returns unique tokens.
21
- */
22
- function extractKeywords(content) {
23
- const stopWords = new Set([
24
- 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
25
- 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
26
- 'should', 'may', 'might', 'can', 'shall', 'to', 'of', 'in', 'for',
27
- 'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through', 'during',
28
- 'before', 'after', 'above', 'below', 'between', 'and', 'but', 'or',
29
- 'not', 'no', 'nor', 'so', 'yet', 'both', 'each', 'few', 'more',
30
- 'most', 'other', 'some', 'such', 'than', 'too', 'very', 'just',
31
- 'about', 'up', 'out', 'if', 'then', 'that', 'this', 'these', 'those',
32
- 'it', 'its', 'user', 'users', 'they', 'them', 'their', 'he', 'she',
33
- ]);
34
- return new Set(content.toLowerCase()
35
- .replace(/[^a-z0-9\s-]/g, ' ')
36
- .split(/\s+/)
37
- .filter(w => w.length >= 3 && !stopWords.has(w)));
38
- }
39
- /**
40
- * Calculate keyword overlap ratio between two facts.
41
- * Returns 0-1 where 1 = identical keywords.
42
- */
43
- function keywordOverlap(a, b) {
44
- if (a.size === 0 || b.size === 0)
45
- return 0;
46
- let shared = 0;
47
- for (const word of a) {
48
- if (b.has(word))
49
- shared++;
50
- }
51
- const minSize = Math.min(a.size, b.size);
52
- return shared / minSize;
53
- }
54
- /**
55
- * Check if two facts are temporally close (within TEMPORAL_WINDOW_DAYS).
56
- */
57
- function isTemporallyClose(a, b) {
58
- const aDate = new Date(a.createdAt).getTime();
59
- const bDate = new Date(b.createdAt).getTime();
60
- const diffDays = Math.abs(aDate - bDate) / (1000 * 60 * 60 * 24);
61
- return diffDays <= TEMPORAL_WINDOW_DAYS;
62
- }
63
- /**
64
- * Link newly created facts to existing related facts through shared entities.
65
- * Uses keyword overlap + temporal proximity to determine relevance.
66
- *
67
- * Only creates edges when facts are genuinely related — not just because
68
- * they both mention "Steno" or "user".
69
- */
70
- export async function linkRelatedFacts(storage, tenantId, newFactIds, entityIdMap) {
71
- if (newFactIds.length === 0 || entityIdMap.size === 0)
72
- return 0;
73
- let edgesCreated = 0;
74
- // Get the new facts' content for keyword extraction
75
- const newFacts = await storage.getFactsByIds(tenantId, newFactIds);
76
- if (newFacts.length === 0)
77
- return 0;
78
- const newFactKeywords = new Map();
79
- for (const f of newFacts) {
80
- newFactKeywords.set(f.id, extractKeywords(f.content));
81
- }
82
- // For each NON-GENERIC entity, find existing facts that also mention it
83
- for (const [canonicalName, entityId] of entityIdMap) {
84
- if (GENERIC_ENTITIES.has(canonicalName))
85
- continue; // Skip "user", "navia", etc.
86
- try {
87
- const linkedFacts = await storage.getFactsForEntity(tenantId, entityId, { limit: 20 });
88
- if (linkedFacts.data.length < 2)
89
- continue;
90
- const newFactSet = new Set(newFactIds);
91
- const existingFacts = linkedFacts.data.filter(f => !newFactSet.has(f.id) &&
92
- !f.tags?.includes('scratchpad') // Skip scratchpad blobs
93
- );
94
- for (const newFact of newFacts) {
95
- const newKw = newFactKeywords.get(newFact.id);
96
- if (!newKw || newKw.size < 2)
97
- continue; // Too short to compare
98
- let linksForThisFact = 0;
99
- for (const existingFact of existingFacts) {
100
- if (linksForThisFact >= MAX_LINKS_PER_FACT)
101
- break;
102
- const existingKw = extractKeywords(existingFact.content);
103
- const overlap = keywordOverlap(newKw, existingKw);
104
- // Must have meaningful keyword overlap
105
- if (overlap < MIN_KEYWORD_OVERLAP)
106
- continue;
107
- // Boost score for temporal proximity
108
- const temporalBoost = isTemporallyClose(newFact, existingFact) ? 0.1 : 0;
109
- const relevanceScore = overlap + temporalBoost;
110
- try {
111
- await storage.createEdge({
112
- id: crypto.randomUUID(),
113
- tenantId,
114
- sourceId: entityId,
115
- targetId: entityId,
116
- relation: 'relates_to',
117
- edgeType: 'associative',
118
- weight: Math.min(relevanceScore, 1.0),
119
- factId: newFact.id,
120
- confidence: overlap,
121
- metadata: {
122
- linkedFactId: existingFact.id,
123
- reason: 'shared_entity_and_content',
124
- entity: canonicalName,
125
- keywordOverlap: overlap.toFixed(2),
126
- },
127
- });
128
- edgesCreated++;
129
- linksForThisFact++;
130
- }
131
- catch {
132
- // Duplicate or constraint — skip
133
- }
134
- }
135
- }
136
- }
137
- catch {
138
- // Entity lookup failed — continue
139
- }
140
- }
141
- if (edgesCreated > 0) {
142
- console.error(`[steno] Cross-linked ${edgesCreated} related facts via shared entities`);
143
- }
144
- return edgesCreated;
145
- }
146
- //# sourceMappingURL=cross-linker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cross-linker.js","sourceRoot":"","sources":["cross-linker.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { EmbeddingAdapter } from '../adapters/embedding.js';
2
- import type { LLMAdapter } from '../adapters/llm.js';
3
- import type { StorageAdapter } from '../adapters/storage.js';
4
- import type { ExtractedFact } from './types.js';
5
- export interface DedupConfig {
6
- storage: StorageAdapter;
7
- embedding: EmbeddingAdapter;
8
- llm: LLMAdapter;
9
- similarityThreshold?: number;
10
- }
11
- export declare function deduplicateFacts(config: DedupConfig, facts: ExtractedFact[], tenantId: string, scope: string, scopeId: string): Promise<ExtractedFact[]>;
12
- //# sourceMappingURL=dedup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["dedup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,GAAG,EAAE,UAAU,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,aAAa,EAAE,EACtB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CA+C1B"}