@sprinterai/runtime 0.7.1 → 0.8.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 (467) hide show
  1. package/dist/agent/heartbeat-scheduler.d.ts +36 -0
  2. package/dist/agent/heartbeat-scheduler.d.ts.map +1 -0
  3. package/dist/agent/heartbeat-scheduler.js +57 -0
  4. package/dist/agent/heartbeat-scheduler.js.map +1 -0
  5. package/dist/agent/heartbeat-scheduler.test.d.ts +2 -0
  6. package/dist/agent/heartbeat-scheduler.test.d.ts.map +1 -0
  7. package/dist/agent/heartbeat-scheduler.test.js +216 -0
  8. package/dist/agent/heartbeat-scheduler.test.js.map +1 -0
  9. package/dist/agent/index.d.ts +3 -0
  10. package/dist/agent/index.d.ts.map +1 -1
  11. package/dist/agent/index.js +2 -0
  12. package/dist/agent/index.js.map +1 -1
  13. package/dist/agent/versioning.d.ts +22 -0
  14. package/dist/agent/versioning.d.ts.map +1 -0
  15. package/dist/agent/versioning.js +47 -0
  16. package/dist/agent/versioning.js.map +1 -0
  17. package/dist/agent/versioning.test.d.ts +2 -0
  18. package/dist/agent/versioning.test.d.ts.map +1 -0
  19. package/dist/agent/versioning.test.js +147 -0
  20. package/dist/agent/versioning.test.js.map +1 -0
  21. package/dist/analytics/analytics-recorder.d.ts +12 -0
  22. package/dist/analytics/analytics-recorder.d.ts.map +1 -0
  23. package/dist/analytics/analytics-recorder.js +27 -0
  24. package/dist/analytics/analytics-recorder.js.map +1 -0
  25. package/dist/analytics/analytics-recorder.test.d.ts +2 -0
  26. package/dist/analytics/analytics-recorder.test.d.ts.map +1 -0
  27. package/dist/analytics/analytics-recorder.test.js +98 -0
  28. package/dist/analytics/analytics-recorder.test.js.map +1 -0
  29. package/dist/analytics/analytics-types.d.ts +13 -0
  30. package/dist/analytics/analytics-types.d.ts.map +1 -0
  31. package/dist/analytics/analytics-types.js +2 -0
  32. package/dist/analytics/analytics-types.js.map +1 -0
  33. package/dist/analytics/index.d.ts +4 -0
  34. package/dist/analytics/index.d.ts.map +1 -0
  35. package/dist/analytics/index.js +2 -0
  36. package/dist/analytics/index.js.map +1 -0
  37. package/dist/automation/index.d.ts +77 -0
  38. package/dist/automation/index.d.ts.map +1 -0
  39. package/dist/automation/index.js +119 -0
  40. package/dist/automation/index.js.map +1 -0
  41. package/dist/automation/index.test.d.ts +2 -0
  42. package/dist/automation/index.test.d.ts.map +1 -0
  43. package/dist/automation/index.test.js +135 -0
  44. package/dist/automation/index.test.js.map +1 -0
  45. package/dist/capture/capture-parser.d.ts +13 -0
  46. package/dist/capture/capture-parser.d.ts.map +1 -0
  47. package/dist/capture/capture-parser.js +55 -0
  48. package/dist/capture/capture-parser.js.map +1 -0
  49. package/dist/capture/capture-parser.test.d.ts +2 -0
  50. package/dist/capture/capture-parser.test.d.ts.map +1 -0
  51. package/dist/capture/capture-parser.test.js +134 -0
  52. package/dist/capture/capture-parser.test.js.map +1 -0
  53. package/dist/capture/capture-schema.d.ts +38 -0
  54. package/dist/capture/capture-schema.d.ts.map +1 -0
  55. package/dist/capture/capture-schema.js +16 -0
  56. package/dist/capture/capture-schema.js.map +1 -0
  57. package/dist/capture/capture-schema.test.d.ts +2 -0
  58. package/dist/capture/capture-schema.test.d.ts.map +1 -0
  59. package/dist/capture/capture-schema.test.js +72 -0
  60. package/dist/capture/capture-schema.test.js.map +1 -0
  61. package/dist/capture/create-from-capture.d.ts +14 -0
  62. package/dist/capture/create-from-capture.d.ts.map +1 -0
  63. package/dist/capture/create-from-capture.js +30 -0
  64. package/dist/capture/create-from-capture.js.map +1 -0
  65. package/dist/capture/create-from-capture.test.d.ts +2 -0
  66. package/dist/capture/create-from-capture.test.d.ts.map +1 -0
  67. package/dist/capture/create-from-capture.test.js +148 -0
  68. package/dist/capture/create-from-capture.test.js.map +1 -0
  69. package/dist/capture/index.d.ts +7 -0
  70. package/dist/capture/index.d.ts.map +1 -0
  71. package/dist/capture/index.js +4 -0
  72. package/dist/capture/index.js.map +1 -0
  73. package/dist/chat/inbox.d.ts +96 -0
  74. package/dist/chat/inbox.d.ts.map +1 -0
  75. package/dist/chat/inbox.js +170 -0
  76. package/dist/chat/inbox.js.map +1 -0
  77. package/dist/chat/inbox.test.d.ts +2 -0
  78. package/dist/chat/inbox.test.d.ts.map +1 -0
  79. package/dist/chat/inbox.test.js +520 -0
  80. package/dist/chat/inbox.test.js.map +1 -0
  81. package/dist/chat/index.d.ts +5 -3
  82. package/dist/chat/index.d.ts.map +1 -1
  83. package/dist/chat/index.js +3 -2
  84. package/dist/chat/index.js.map +1 -1
  85. package/dist/context/context-keys.d.ts +7 -0
  86. package/dist/context/context-keys.d.ts.map +1 -0
  87. package/dist/context/context-keys.js +6 -0
  88. package/dist/context/context-keys.js.map +1 -0
  89. package/dist/context/format-context.d.ts +14 -0
  90. package/dist/context/format-context.d.ts.map +1 -0
  91. package/dist/context/format-context.js +82 -0
  92. package/dist/context/format-context.js.map +1 -0
  93. package/dist/context/format-context.test.d.ts +2 -0
  94. package/dist/context/format-context.test.d.ts.map +1 -0
  95. package/dist/context/format-context.test.js +130 -0
  96. package/dist/context/format-context.test.js.map +1 -0
  97. package/dist/context/index.d.ts +6 -0
  98. package/dist/context/index.d.ts.map +1 -0
  99. package/dist/context/index.js +5 -0
  100. package/dist/context/index.js.map +1 -0
  101. package/dist/context/load-context.d.ts +8 -0
  102. package/dist/context/load-context.d.ts.map +1 -0
  103. package/dist/context/load-context.js +22 -0
  104. package/dist/context/load-context.js.map +1 -0
  105. package/dist/context/load-context.test.d.ts +2 -0
  106. package/dist/context/load-context.test.d.ts.map +1 -0
  107. package/dist/context/load-context.test.js +111 -0
  108. package/dist/context/load-context.test.js.map +1 -0
  109. package/dist/context/shared-context.d.ts +11 -0
  110. package/dist/context/shared-context.d.ts.map +1 -0
  111. package/dist/context/shared-context.js +14 -0
  112. package/dist/context/shared-context.js.map +1 -0
  113. package/dist/context/shared-context.test.d.ts +2 -0
  114. package/dist/context/shared-context.test.d.ts.map +1 -0
  115. package/dist/context/shared-context.test.js +90 -0
  116. package/dist/context/shared-context.test.js.map +1 -0
  117. package/dist/document/deletion.d.ts +17 -0
  118. package/dist/document/deletion.d.ts.map +1 -0
  119. package/dist/document/deletion.js +11 -0
  120. package/dist/document/deletion.js.map +1 -0
  121. package/dist/document/deletion.test.d.ts +2 -0
  122. package/dist/document/deletion.test.d.ts.map +1 -0
  123. package/dist/document/deletion.test.js +33 -0
  124. package/dist/document/deletion.test.js.map +1 -0
  125. package/dist/document/index.d.ts +12 -0
  126. package/dist/document/index.d.ts.map +1 -1
  127. package/dist/document/index.js +7 -0
  128. package/dist/document/index.js.map +1 -1
  129. package/dist/document/linking.d.ts +42 -0
  130. package/dist/document/linking.d.ts.map +1 -0
  131. package/dist/document/linking.js +49 -0
  132. package/dist/document/linking.js.map +1 -0
  133. package/dist/document/linking.test.d.ts +2 -0
  134. package/dist/document/linking.test.d.ts.map +1 -0
  135. package/dist/document/linking.test.js +86 -0
  136. package/dist/document/linking.test.js.map +1 -0
  137. package/dist/document/pagination.d.ts +24 -0
  138. package/dist/document/pagination.d.ts.map +1 -0
  139. package/dist/document/pagination.js +24 -0
  140. package/dist/document/pagination.js.map +1 -0
  141. package/dist/document/pagination.test.d.ts +2 -0
  142. package/dist/document/pagination.test.d.ts.map +1 -0
  143. package/dist/document/pagination.test.js +84 -0
  144. package/dist/document/pagination.test.js.map +1 -0
  145. package/dist/document/search.d.ts +37 -0
  146. package/dist/document/search.d.ts.map +1 -0
  147. package/dist/document/search.js +37 -0
  148. package/dist/document/search.js.map +1 -0
  149. package/dist/document/search.test.d.ts +2 -0
  150. package/dist/document/search.test.d.ts.map +1 -0
  151. package/dist/document/search.test.js +97 -0
  152. package/dist/document/search.test.js.map +1 -0
  153. package/dist/document/upload.d.ts +15 -0
  154. package/dist/document/upload.d.ts.map +1 -0
  155. package/dist/document/upload.js +12 -0
  156. package/dist/document/upload.js.map +1 -0
  157. package/dist/document/upload.test.d.ts +2 -0
  158. package/dist/document/upload.test.d.ts.map +1 -0
  159. package/dist/document/upload.test.js +70 -0
  160. package/dist/document/upload.test.js.map +1 -0
  161. package/dist/document/url-generation.d.ts +21 -0
  162. package/dist/document/url-generation.d.ts.map +1 -0
  163. package/dist/document/url-generation.js +14 -0
  164. package/dist/document/url-generation.js.map +1 -0
  165. package/dist/document/url-generation.test.d.ts +2 -0
  166. package/dist/document/url-generation.test.d.ts.map +1 -0
  167. package/dist/document/url-generation.test.js +38 -0
  168. package/dist/document/url-generation.test.js.map +1 -0
  169. package/dist/email/engine.d.ts +19 -0
  170. package/dist/email/engine.d.ts.map +1 -0
  171. package/dist/email/engine.js +30 -0
  172. package/dist/email/engine.js.map +1 -0
  173. package/dist/email/engine.test.d.ts +2 -0
  174. package/dist/email/engine.test.d.ts.map +1 -0
  175. package/dist/email/engine.test.js +128 -0
  176. package/dist/email/engine.test.js.map +1 -0
  177. package/dist/email/index.d.ts +5 -0
  178. package/dist/email/index.d.ts.map +1 -0
  179. package/dist/email/index.js +3 -0
  180. package/dist/email/index.js.map +1 -0
  181. package/dist/email/templates.d.ts +33 -0
  182. package/dist/email/templates.d.ts.map +1 -0
  183. package/dist/email/templates.js +132 -0
  184. package/dist/email/templates.js.map +1 -0
  185. package/dist/email/templates.test.d.ts +2 -0
  186. package/dist/email/templates.test.d.ts.map +1 -0
  187. package/dist/email/templates.test.js +158 -0
  188. package/dist/email/templates.test.js.map +1 -0
  189. package/dist/entity/bulk-operations.d.ts +39 -0
  190. package/dist/entity/bulk-operations.d.ts.map +1 -0
  191. package/dist/entity/bulk-operations.js +127 -0
  192. package/dist/entity/bulk-operations.js.map +1 -0
  193. package/dist/entity/bulk-operations.test.d.ts +2 -0
  194. package/dist/entity/bulk-operations.test.d.ts.map +1 -0
  195. package/dist/entity/bulk-operations.test.js +212 -0
  196. package/dist/entity/bulk-operations.test.js.map +1 -0
  197. package/dist/entity/collections.d.ts +17 -0
  198. package/dist/entity/collections.d.ts.map +1 -0
  199. package/dist/entity/collections.js +22 -0
  200. package/dist/entity/collections.js.map +1 -0
  201. package/dist/entity/collections.test.d.ts +2 -0
  202. package/dist/entity/collections.test.d.ts.map +1 -0
  203. package/dist/entity/collections.test.js +92 -0
  204. package/dist/entity/collections.test.js.map +1 -0
  205. package/dist/entity/index.d.ts +9 -0
  206. package/dist/entity/index.d.ts.map +1 -0
  207. package/dist/entity/index.js +6 -0
  208. package/dist/entity/index.js.map +1 -0
  209. package/dist/entity/relations.d.ts +65 -0
  210. package/dist/entity/relations.d.ts.map +1 -0
  211. package/dist/entity/relations.js +110 -0
  212. package/dist/entity/relations.js.map +1 -0
  213. package/dist/entity/relations.test.d.ts +2 -0
  214. package/dist/entity/relations.test.d.ts.map +1 -0
  215. package/dist/entity/relations.test.js +202 -0
  216. package/dist/entity/relations.test.js.map +1 -0
  217. package/dist/entity/resolve-relation-columns.d.ts +31 -0
  218. package/dist/entity/resolve-relation-columns.d.ts.map +1 -0
  219. package/dist/entity/resolve-relation-columns.js +156 -0
  220. package/dist/entity/resolve-relation-columns.js.map +1 -0
  221. package/dist/entity/resolve-relation-columns.test.d.ts +2 -0
  222. package/dist/entity/resolve-relation-columns.test.d.ts.map +1 -0
  223. package/dist/entity/resolve-relation-columns.test.js +281 -0
  224. package/dist/entity/resolve-relation-columns.test.js.map +1 -0
  225. package/dist/entity/sharing.d.ts +41 -0
  226. package/dist/entity/sharing.d.ts.map +1 -0
  227. package/dist/entity/sharing.js +52 -0
  228. package/dist/entity/sharing.js.map +1 -0
  229. package/dist/entity/sharing.test.d.ts +2 -0
  230. package/dist/entity/sharing.test.d.ts.map +1 -0
  231. package/dist/entity/sharing.test.js +178 -0
  232. package/dist/entity/sharing.test.js.map +1 -0
  233. package/dist/external-data/external-data-receiver.d.ts +43 -0
  234. package/dist/external-data/external-data-receiver.d.ts.map +1 -0
  235. package/dist/external-data/external-data-receiver.js +81 -0
  236. package/dist/external-data/external-data-receiver.js.map +1 -0
  237. package/dist/external-data/external-data-receiver.test.d.ts +2 -0
  238. package/dist/external-data/external-data-receiver.test.d.ts.map +1 -0
  239. package/dist/external-data/external-data-receiver.test.js +189 -0
  240. package/dist/external-data/external-data-receiver.test.js.map +1 -0
  241. package/dist/external-data/extract-by-path.d.ts +13 -0
  242. package/dist/external-data/extract-by-path.d.ts.map +1 -0
  243. package/dist/external-data/extract-by-path.js +25 -0
  244. package/dist/external-data/extract-by-path.js.map +1 -0
  245. package/dist/external-data/extract-by-path.test.d.ts +2 -0
  246. package/dist/external-data/extract-by-path.test.d.ts.map +1 -0
  247. package/dist/external-data/extract-by-path.test.js +47 -0
  248. package/dist/external-data/extract-by-path.test.js.map +1 -0
  249. package/dist/external-data/index.d.ts +4 -0
  250. package/dist/external-data/index.d.ts.map +1 -0
  251. package/dist/external-data/index.js +3 -0
  252. package/dist/external-data/index.js.map +1 -0
  253. package/dist/feed/digest.d.ts +35 -0
  254. package/dist/feed/digest.d.ts.map +1 -0
  255. package/dist/feed/digest.js +273 -0
  256. package/dist/feed/digest.js.map +1 -0
  257. package/dist/feed/filters.d.ts +41 -0
  258. package/dist/feed/filters.d.ts.map +1 -0
  259. package/dist/feed/filters.js +97 -0
  260. package/dist/feed/filters.js.map +1 -0
  261. package/dist/feed/index.d.ts +20 -0
  262. package/dist/feed/index.d.ts.map +1 -0
  263. package/dist/feed/index.js +23 -0
  264. package/dist/feed/index.js.map +1 -0
  265. package/dist/feed/ranking.d.ts +42 -0
  266. package/dist/feed/ranking.d.ts.map +1 -0
  267. package/dist/feed/ranking.js +133 -0
  268. package/dist/feed/ranking.js.map +1 -0
  269. package/dist/feed/resolver.d.ts +76 -0
  270. package/dist/feed/resolver.d.ts.map +1 -0
  271. package/dist/feed/resolver.js +173 -0
  272. package/dist/feed/resolver.js.map +1 -0
  273. package/dist/feed/transformers.d.ts +80 -0
  274. package/dist/feed/transformers.d.ts.map +1 -0
  275. package/dist/feed/transformers.js +179 -0
  276. package/dist/feed/transformers.js.map +1 -0
  277. package/dist/feed/types.d.ts +131 -0
  278. package/dist/feed/types.d.ts.map +1 -0
  279. package/dist/feed/types.js +6 -0
  280. package/dist/feed/types.js.map +1 -0
  281. package/dist/import/batch-upsert.d.ts +18 -0
  282. package/dist/import/batch-upsert.d.ts.map +1 -0
  283. package/dist/import/batch-upsert.js +67 -0
  284. package/dist/import/batch-upsert.js.map +1 -0
  285. package/dist/import/index.d.ts +7 -0
  286. package/dist/import/index.d.ts.map +1 -0
  287. package/dist/import/index.js +4 -0
  288. package/dist/import/index.js.map +1 -0
  289. package/dist/import/merge-content.d.ts +8 -0
  290. package/dist/import/merge-content.d.ts.map +1 -0
  291. package/dist/import/merge-content.js +20 -0
  292. package/dist/import/merge-content.js.map +1 -0
  293. package/dist/import/merge-content.test.d.ts +2 -0
  294. package/dist/import/merge-content.test.d.ts.map +1 -0
  295. package/dist/import/merge-content.test.js +53 -0
  296. package/dist/import/merge-content.test.js.map +1 -0
  297. package/dist/import/types.d.ts +20 -0
  298. package/dist/import/types.d.ts.map +1 -0
  299. package/dist/import/types.js +2 -0
  300. package/dist/import/types.js.map +1 -0
  301. package/dist/import/upsert-matcher.d.ts +39 -0
  302. package/dist/import/upsert-matcher.d.ts.map +1 -0
  303. package/dist/import/upsert-matcher.js +67 -0
  304. package/dist/import/upsert-matcher.js.map +1 -0
  305. package/dist/import/upsert-matcher.test.d.ts +2 -0
  306. package/dist/import/upsert-matcher.test.d.ts.map +1 -0
  307. package/dist/import/upsert-matcher.test.js +77 -0
  308. package/dist/import/upsert-matcher.test.js.map +1 -0
  309. package/dist/index.d.ts +66 -1
  310. package/dist/index.d.ts.map +1 -1
  311. package/dist/index.js +48 -1
  312. package/dist/index.js.map +1 -1
  313. package/dist/memory/index.d.ts +4 -3
  314. package/dist/memory/index.d.ts.map +1 -1
  315. package/dist/memory/index.js +3 -2
  316. package/dist/memory/index.js.map +1 -1
  317. package/dist/memory/user-memory.d.ts +15 -0
  318. package/dist/memory/user-memory.d.ts.map +1 -0
  319. package/dist/memory/user-memory.js +20 -0
  320. package/dist/memory/user-memory.js.map +1 -0
  321. package/dist/memory/user-memory.test.d.ts +2 -0
  322. package/dist/memory/user-memory.test.d.ts.map +1 -0
  323. package/dist/memory/user-memory.test.js +74 -0
  324. package/dist/memory/user-memory.test.js.map +1 -0
  325. package/dist/module/create-runtime.d.ts +4 -1
  326. package/dist/module/create-runtime.d.ts.map +1 -1
  327. package/dist/module/create-runtime.js.map +1 -1
  328. package/dist/module/map-supabase-stores.d.ts +3 -0
  329. package/dist/module/map-supabase-stores.d.ts.map +1 -1
  330. package/dist/module/map-supabase-stores.js +3 -0
  331. package/dist/module/map-supabase-stores.js.map +1 -1
  332. package/dist/providers/index.d.ts +2 -1
  333. package/dist/providers/index.d.ts.map +1 -1
  334. package/dist/providers/index.js.map +1 -1
  335. package/dist/providers/model-resolver.d.ts +11 -3
  336. package/dist/providers/model-resolver.d.ts.map +1 -1
  337. package/dist/providers/model-resolver.js +166 -11
  338. package/dist/providers/model-resolver.js.map +1 -1
  339. package/dist/providers/model-resolver.test.js +10 -10
  340. package/dist/providers/model-resolver.test.js.map +1 -1
  341. package/dist/providers/provider-interfaces.d.ts +0 -20
  342. package/dist/providers/provider-interfaces.d.ts.map +1 -1
  343. package/dist/providers/provider-interfaces.js +1 -0
  344. package/dist/providers/provider-interfaces.js.map +1 -1
  345. package/dist/scoring/index.d.ts +4 -2
  346. package/dist/scoring/index.d.ts.map +1 -1
  347. package/dist/scoring/index.js +2 -1
  348. package/dist/scoring/index.js.map +1 -1
  349. package/dist/scoring/promotion.d.ts +20 -0
  350. package/dist/scoring/promotion.d.ts.map +1 -0
  351. package/dist/scoring/promotion.js +39 -0
  352. package/dist/scoring/promotion.js.map +1 -0
  353. package/dist/scoring/promotion.test.d.ts +2 -0
  354. package/dist/scoring/promotion.test.d.ts.map +1 -0
  355. package/dist/scoring/promotion.test.js +141 -0
  356. package/dist/scoring/promotion.test.js.map +1 -0
  357. package/dist/settings/index.d.ts +15 -0
  358. package/dist/settings/index.d.ts.map +1 -0
  359. package/dist/settings/index.js +47 -0
  360. package/dist/settings/index.js.map +1 -0
  361. package/dist/settings/index.test.d.ts +2 -0
  362. package/dist/settings/index.test.d.ts.map +1 -0
  363. package/dist/settings/index.test.js +75 -0
  364. package/dist/settings/index.test.js.map +1 -0
  365. package/dist/skill/index.d.ts +4 -0
  366. package/dist/skill/index.d.ts.map +1 -0
  367. package/dist/skill/index.js +3 -0
  368. package/dist/skill/index.js.map +1 -0
  369. package/dist/skill/skill-loader.d.ts +18 -0
  370. package/dist/skill/skill-loader.d.ts.map +1 -0
  371. package/dist/skill/skill-loader.js +31 -0
  372. package/dist/skill/skill-loader.js.map +1 -0
  373. package/dist/skill/skill-loader.test.d.ts +2 -0
  374. package/dist/skill/skill-loader.test.d.ts.map +1 -0
  375. package/dist/skill/skill-loader.test.js +64 -0
  376. package/dist/skill/skill-loader.test.js.map +1 -0
  377. package/dist/skill/skill-prompt.d.ts +7 -0
  378. package/dist/skill/skill-prompt.d.ts.map +1 -0
  379. package/dist/skill/skill-prompt.js +17 -0
  380. package/dist/skill/skill-prompt.js.map +1 -0
  381. package/dist/skill/skill-prompt.test.d.ts +2 -0
  382. package/dist/skill/skill-prompt.test.d.ts.map +1 -0
  383. package/dist/skill/skill-prompt.test.js +44 -0
  384. package/dist/skill/skill-prompt.test.js.map +1 -0
  385. package/dist/source/index.d.ts +5 -0
  386. package/dist/source/index.d.ts.map +1 -0
  387. package/dist/source/index.js +3 -0
  388. package/dist/source/index.js.map +1 -0
  389. package/dist/source/source-poller.d.ts +66 -0
  390. package/dist/source/source-poller.d.ts.map +1 -0
  391. package/dist/source/source-poller.js +64 -0
  392. package/dist/source/source-poller.js.map +1 -0
  393. package/dist/source/source-poller.test.d.ts +2 -0
  394. package/dist/source/source-poller.test.d.ts.map +1 -0
  395. package/dist/source/source-poller.test.js +184 -0
  396. package/dist/source/source-poller.test.js.map +1 -0
  397. package/dist/source/source-status.d.ts +41 -0
  398. package/dist/source/source-status.d.ts.map +1 -0
  399. package/dist/source/source-status.js +73 -0
  400. package/dist/source/source-status.js.map +1 -0
  401. package/dist/source/source-status.test.d.ts +2 -0
  402. package/dist/source/source-status.test.d.ts.map +1 -0
  403. package/dist/source/source-status.test.js +116 -0
  404. package/dist/source/source-status.test.js.map +1 -0
  405. package/dist/template/index.d.ts +61 -0
  406. package/dist/template/index.d.ts.map +1 -0
  407. package/dist/template/index.js +100 -0
  408. package/dist/template/index.js.map +1 -0
  409. package/dist/template/index.test.d.ts +2 -0
  410. package/dist/template/index.test.d.ts.map +1 -0
  411. package/dist/template/index.test.js +167 -0
  412. package/dist/template/index.test.js.map +1 -0
  413. package/dist/testing/in-memory-agent-version-store.d.ts +13 -0
  414. package/dist/testing/in-memory-agent-version-store.d.ts.map +1 -0
  415. package/dist/testing/in-memory-agent-version-store.js +36 -0
  416. package/dist/testing/in-memory-agent-version-store.js.map +1 -0
  417. package/dist/testing/in-memory-chat-store.d.ts +11 -1
  418. package/dist/testing/in-memory-chat-store.d.ts.map +1 -1
  419. package/dist/testing/in-memory-chat-store.js +66 -0
  420. package/dist/testing/in-memory-chat-store.js.map +1 -1
  421. package/dist/testing/in-memory-entity-store.d.ts +2 -0
  422. package/dist/testing/in-memory-entity-store.d.ts.map +1 -1
  423. package/dist/testing/in-memory-entity-store.js +8 -3
  424. package/dist/testing/in-memory-entity-store.js.map +1 -1
  425. package/dist/testing/in-memory-entity-store.test.js +2 -1
  426. package/dist/testing/in-memory-entity-store.test.js.map +1 -1
  427. package/dist/testing/in-memory-heartbeat-run-store.d.ts +21 -0
  428. package/dist/testing/in-memory-heartbeat-run-store.d.ts.map +1 -0
  429. package/dist/testing/in-memory-heartbeat-run-store.js +107 -0
  430. package/dist/testing/in-memory-heartbeat-run-store.js.map +1 -0
  431. package/dist/testing/index.d.ts +9 -7
  432. package/dist/testing/index.d.ts.map +1 -1
  433. package/dist/testing/index.js +9 -7
  434. package/dist/testing/index.js.map +1 -1
  435. package/dist/tool/index.d.ts +2 -0
  436. package/dist/tool/index.d.ts.map +1 -1
  437. package/dist/tool/index.js +1 -0
  438. package/dist/tool/index.js.map +1 -1
  439. package/dist/tool/session-manager.d.ts +35 -0
  440. package/dist/tool/session-manager.d.ts.map +1 -0
  441. package/dist/tool/session-manager.js +40 -0
  442. package/dist/tool/session-manager.js.map +1 -0
  443. package/dist/tool/session-manager.test.d.ts +2 -0
  444. package/dist/tool/session-manager.test.d.ts.map +1 -0
  445. package/dist/tool/session-manager.test.js +139 -0
  446. package/dist/tool/session-manager.test.js.map +1 -0
  447. package/dist/workflow/claim-manager.d.ts +24 -0
  448. package/dist/workflow/claim-manager.d.ts.map +1 -0
  449. package/dist/workflow/claim-manager.js +31 -0
  450. package/dist/workflow/claim-manager.js.map +1 -0
  451. package/dist/workflow/claim-manager.test.d.ts +2 -0
  452. package/dist/workflow/claim-manager.test.d.ts.map +1 -0
  453. package/dist/workflow/claim-manager.test.js +124 -0
  454. package/dist/workflow/claim-manager.test.js.map +1 -0
  455. package/dist/workflow/index.d.ts +3 -0
  456. package/dist/workflow/index.d.ts.map +1 -1
  457. package/dist/workflow/index.js +4 -0
  458. package/dist/workflow/index.js.map +1 -1
  459. package/dist/workflow/run-queries.d.ts +45 -0
  460. package/dist/workflow/run-queries.d.ts.map +1 -0
  461. package/dist/workflow/run-queries.js +80 -0
  462. package/dist/workflow/run-queries.js.map +1 -0
  463. package/dist/workflow/run-queries.test.d.ts +2 -0
  464. package/dist/workflow/run-queries.test.d.ts.map +1 -0
  465. package/dist/workflow/run-queries.test.js +177 -0
  466. package/dist/workflow/run-queries.test.js.map +1 -0
  467. package/package.json +106 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranking.js","sourceRoot":"","sources":["../../src/feed/ranking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import type { ActivityStore } from '@sprinterai/core';
2
+ import type { FeedConfig, FeedItem } from './types.js';
3
+ /**
4
+ * Resolve a personalized feed for a user.
5
+ *
6
+ * Main entry point for feed resolution. Queries activities from storage,
7
+ * applies filtering and ranking based on configuration, and returns ordered items.
8
+ *
9
+ * Flow:
10
+ * 1. Validate parameters (limits, thresholds)
11
+ * 2. Query activities from store with filters
12
+ * 3. Convert ActivityRecords to FeedItems
13
+ * 4. Apply ranking based on tab type ('for-you', 'all', 'digest')
14
+ * 5. Sort by score/time
15
+ * 6. Return final items
16
+ *
17
+ * Storage-agnostic: works with any ActivityStore implementation.
18
+ *
19
+ * @param store ActivityStore implementation
20
+ * @param config Feed configuration (filters, limits, personalization)
21
+ * @returns Array of FeedItems sorted by relevance (for-you) or recency (all/digest)
22
+ * @throws Error if store query fails
23
+ */
24
+ export declare function resolveFeed(store: ActivityStore, config: FeedConfig): Promise<FeedItem[]>;
25
+ /**
26
+ * Resolve feed with time-based filtering.
27
+ *
28
+ * Convenience wrapper around resolveFeed that automatically adds time range filtering.
29
+ * Queries activities created after the start of the specified time window.
30
+ *
31
+ * @param store ActivityStore implementation
32
+ * @param config Feed configuration
33
+ * @returns Array of FeedItems within the time range
34
+ */
35
+ export declare function resolveFeedWithTimeFilter(store: ActivityStore, config: FeedConfig): Promise<FeedItem[]>;
36
+ /**
37
+ * Paginate through feed items using cursor-based pagination.
38
+ *
39
+ * Convenience helper for implementing pagination in UIs.
40
+ * Returns items before the given cursor (ISO timestamp).
41
+ *
42
+ * Usage:
43
+ * ```
44
+ * const page1 = await resolveFeedPage(store, config); // First page
45
+ * const page2 = await resolveFeedPage(store, {
46
+ * ...config,
47
+ * before: page1[page1.length - 1].createdAt, // Use last item as cursor
48
+ * }); // Next page
49
+ * ```
50
+ *
51
+ * @param store ActivityStore implementation
52
+ * @param config Feed configuration with optional 'before' cursor
53
+ * @returns Array of FeedItems for this page
54
+ */
55
+ export declare function resolveFeedPage(store: ActivityStore, config: FeedConfig): Promise<FeedItem[]>;
56
+ /**
57
+ * Build a feed update delta for real-time feeds.
58
+ *
59
+ * Compares old feed state with new state and returns only changed items.
60
+ * Useful for real-time updates without re-rendering entire feed.
61
+ *
62
+ * Returns an object with:
63
+ * - added: Items in new but not in old
64
+ * - removed: Items in old but not in new
65
+ * - updated: Items that changed (same id, different fields)
66
+ *
67
+ * @param oldItems Previous feed state
68
+ * @param newItems Current feed state
69
+ * @returns Delta with added/removed/updated items
70
+ */
71
+ export declare function buildFeedDelta(oldItems: FeedItem[], newItems: FeedItem[]): {
72
+ added: FeedItem[];
73
+ removed: FeedItem[];
74
+ updated: FeedItem[];
75
+ };
76
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/feed/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKtD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAmE/F;AAED;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAgBrB;AA+BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAErB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,EAAE,EACpB,QAAQ,EAAE,QAAQ,EAAE,GACnB;IACD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB,CAeA"}
@@ -0,0 +1,173 @@
1
+ import { getTimeRangeStart, validateFeedParams } from './filters.js';
2
+ import { computeForYouScores, sortByScore } from './ranking.js';
3
+ import { rowsToFeedItems } from './transformers.js';
4
+ /**
5
+ * Resolve a personalized feed for a user.
6
+ *
7
+ * Main entry point for feed resolution. Queries activities from storage,
8
+ * applies filtering and ranking based on configuration, and returns ordered items.
9
+ *
10
+ * Flow:
11
+ * 1. Validate parameters (limits, thresholds)
12
+ * 2. Query activities from store with filters
13
+ * 3. Convert ActivityRecords to FeedItems
14
+ * 4. Apply ranking based on tab type ('for-you', 'all', 'digest')
15
+ * 5. Sort by score/time
16
+ * 6. Return final items
17
+ *
18
+ * Storage-agnostic: works with any ActivityStore implementation.
19
+ *
20
+ * @param store ActivityStore implementation
21
+ * @param config Feed configuration (filters, limits, personalization)
22
+ * @returns Array of FeedItems sorted by relevance (for-you) or recency (all/digest)
23
+ * @throws Error if store query fails
24
+ */
25
+ export async function resolveFeed(store, config) {
26
+ const { tab = 'all', entityId, actorId, action, limit, before, userId, includeImportance = true, importanceWeight = 1.0, recencyWeight = 1.0, } = config;
27
+ // Validate parameters
28
+ const { limit: safeLimit } = validateFeedParams(limit);
29
+ // Build activity query options
30
+ const queryOptions = {
31
+ limit: safeLimit,
32
+ entityId,
33
+ actorId,
34
+ action,
35
+ before,
36
+ };
37
+ // Query activities from store
38
+ const records = await store.listActivities(queryOptions);
39
+ if (records.length === 0) {
40
+ return [];
41
+ }
42
+ // Convert to FeedItems with default scores
43
+ let feedItems = rowsToFeedItems(records);
44
+ // Apply ranking if 'for-you' tab
45
+ if (tab === 'for-you' && userId) {
46
+ const now = new Date();
47
+ feedItems = feedItems.map((item) => {
48
+ const score = computeForYouScores({
49
+ createdAt: item.createdAt,
50
+ metadata: item.metadata,
51
+ importance: includeImportance ? extractImportanceFromMetadata(item.metadata) : undefined,
52
+ now,
53
+ recencyWeight,
54
+ importanceWeight,
55
+ });
56
+ return {
57
+ ...item,
58
+ score,
59
+ };
60
+ });
61
+ // Sort by score (highest first)
62
+ feedItems = sortByScore(feedItems);
63
+ }
64
+ else if (tab === 'all' || tab === 'digest') {
65
+ // Sort by creation time (most recent first)
66
+ feedItems = feedItems.sort((a, b) => {
67
+ const timeA = new Date(a.createdAt).getTime();
68
+ const timeB = new Date(b.createdAt).getTime();
69
+ return timeB - timeA; // Descending (most recent first)
70
+ });
71
+ }
72
+ return feedItems;
73
+ }
74
+ /**
75
+ * Resolve feed with time-based filtering.
76
+ *
77
+ * Convenience wrapper around resolveFeed that automatically adds time range filtering.
78
+ * Queries activities created after the start of the specified time window.
79
+ *
80
+ * @param store ActivityStore implementation
81
+ * @param config Feed configuration
82
+ * @returns Array of FeedItems within the time range
83
+ */
84
+ export async function resolveFeedWithTimeFilter(store, config) {
85
+ // Get time range start (if specified)
86
+ const timeRange = config.timeRange ?? 'week';
87
+ const startISO = getTimeRangeStart(timeRange);
88
+ // Query returns items created BEFORE the 'before' cursor
89
+ // To filter by time range, we don't use 'before' -- the store returns
90
+ // recent items by default (or we trust the store's ordering).
91
+ // If we want to enforce a time window, consumers can add this logic:
92
+ // After fetching, filter out items older than startISO
93
+ const items = await resolveFeed(store, config);
94
+ // Filter by time range
95
+ const startTime = new Date(startISO).getTime();
96
+ return items.filter((item) => new Date(item.createdAt).getTime() >= startTime);
97
+ }
98
+ /**
99
+ * Extract importance value from activity metadata.
100
+ * Looks for 'importance' or 'priority' fields (numeric or string).
101
+ *
102
+ * @param metadata Activity metadata
103
+ * @returns Importance value (number, string) or null
104
+ */
105
+ function extractImportanceFromMetadata(metadata) {
106
+ if (!metadata)
107
+ return null;
108
+ if ('importance' in metadata) {
109
+ const imp = metadata.importance;
110
+ if (typeof imp === 'number' || typeof imp === 'string') {
111
+ return imp;
112
+ }
113
+ }
114
+ if ('priority' in metadata) {
115
+ const pri = metadata.priority;
116
+ if (typeof pri === 'number' || typeof pri === 'string') {
117
+ return pri;
118
+ }
119
+ }
120
+ return null;
121
+ }
122
+ /**
123
+ * Paginate through feed items using cursor-based pagination.
124
+ *
125
+ * Convenience helper for implementing pagination in UIs.
126
+ * Returns items before the given cursor (ISO timestamp).
127
+ *
128
+ * Usage:
129
+ * ```
130
+ * const page1 = await resolveFeedPage(store, config); // First page
131
+ * const page2 = await resolveFeedPage(store, {
132
+ * ...config,
133
+ * before: page1[page1.length - 1].createdAt, // Use last item as cursor
134
+ * }); // Next page
135
+ * ```
136
+ *
137
+ * @param store ActivityStore implementation
138
+ * @param config Feed configuration with optional 'before' cursor
139
+ * @returns Array of FeedItems for this page
140
+ */
141
+ export async function resolveFeedPage(store, config) {
142
+ return resolveFeed(store, config);
143
+ }
144
+ /**
145
+ * Build a feed update delta for real-time feeds.
146
+ *
147
+ * Compares old feed state with new state and returns only changed items.
148
+ * Useful for real-time updates without re-rendering entire feed.
149
+ *
150
+ * Returns an object with:
151
+ * - added: Items in new but not in old
152
+ * - removed: Items in old but not in new
153
+ * - updated: Items that changed (same id, different fields)
154
+ *
155
+ * @param oldItems Previous feed state
156
+ * @param newItems Current feed state
157
+ * @returns Delta with added/removed/updated items
158
+ */
159
+ export function buildFeedDelta(oldItems, newItems) {
160
+ const oldIds = new Map(oldItems.map((item) => [item.id, item]));
161
+ const newIds = new Map(newItems.map((item) => [item.id, item]));
162
+ const added = newItems.filter((item) => !oldIds.has(item.id));
163
+ const removed = oldItems.filter((item) => !newIds.has(item.id));
164
+ const updated = newItems.filter((newItem) => {
165
+ const oldItem = oldIds.get(newItem.id);
166
+ if (!oldItem)
167
+ return false;
168
+ // Check if any field changed (shallow comparison)
169
+ return JSON.stringify(oldItem) !== JSON.stringify(newItem);
170
+ });
171
+ return { added, removed, updated };
172
+ }
173
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/feed/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { ActivityRecord } from '@sprinterai/core';
2
+ import type { FeedItem } from './types.js';
3
+ /**
4
+ * Transform an ActivityRecord to a FeedItem.
5
+ * Converts storage format to display format with score and preview.
6
+ *
7
+ * This is the primary transformer for converting database records to feed display items.
8
+ * It handles:
9
+ * - Name extraction from metadata (entity and actor names)
10
+ * - Score defaulting (if not provided)
11
+ * - Preview text generation
12
+ * - Type-safe field mapping
13
+ *
14
+ * @param record Activity record from storage
15
+ * @param score Ranking score (0-1), defaults to 0.5
16
+ * @param entityName Optional entity name to override metadata lookup
17
+ * @param actorName Optional actor name to override metadata lookup
18
+ * @returns FeedItem ready for display
19
+ */
20
+ export declare function rowToFeedItem(record: ActivityRecord, score?: number, entityName?: string, actorName?: string): FeedItem;
21
+ /**
22
+ * Transform multiple ActivityRecords to FeedItems.
23
+ * Convenience bulk version of rowToFeedItem.
24
+ *
25
+ * @param records Activity records from storage
26
+ * @param scores Optional array of scores (must match records length if provided)
27
+ * @returns Array of FeedItems
28
+ */
29
+ export declare function rowsToFeedItems(records: ActivityRecord[], scores?: number[]): FeedItem[];
30
+ /**
31
+ * Extract preview text for display in feed items.
32
+ * Creates a short human-readable summary of the activity.
33
+ *
34
+ * Priority:
35
+ * 1. If description exists, use it (typically for comments, detailed updates)
36
+ * 2. If metadata.preview exists, use it (pre-computed display text)
37
+ * 3. Generate from metadata.field + old/new values (for field changes)
38
+ * 4. Generate from action type (INSERT → "created", UPDATE → "updated", etc)
39
+ * 5. Default fallback text
40
+ *
41
+ * The preview is typically 1-2 lines and used in list views.
42
+ *
43
+ * @param record Activity record
44
+ * @returns Preview text suitable for display
45
+ */
46
+ export declare function extractFeedPreview(record: ActivityRecord): string;
47
+ /**
48
+ * Extract actor display info from record.
49
+ * Returns name and type suitable for avatar and label display.
50
+ *
51
+ * @param record Activity record
52
+ * @returns Object with name and type for display
53
+ */
54
+ export declare function extractActorDisplay(record: ActivityRecord): {
55
+ name: string;
56
+ type: 'user' | 'agent' | 'system';
57
+ };
58
+ /**
59
+ * Extract entity display info from record.
60
+ * Returns name and type suitable for label and badge display.
61
+ *
62
+ * @param record Activity record
63
+ * @returns Object with name and type for display
64
+ */
65
+ export declare function extractEntityDisplay(record: ActivityRecord): {
66
+ name?: string;
67
+ type?: string;
68
+ };
69
+ /**
70
+ * Format activity for plain text output (logs, exports, etc).
71
+ * Creates a one-line summary suitable for text-based feeds.
72
+ *
73
+ * Format: "[Actor] [action] [entity] at [time]"
74
+ * Example: "Alice updated Project ABC at 2:45 PM"
75
+ *
76
+ * @param record Activity record
77
+ * @returns Plain text summary
78
+ */
79
+ export declare function formatActivityPlainText(record: ActivityRecord): string;
80
+ //# sourceMappingURL=transformers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformers.d.ts","sourceRoot":"","sources":["../../src/feed/transformers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQxC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,KAAK,GAAE,MAAsB,EAC7B,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,QAAQ,CAgCV;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAKxF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAmCjE;AAwBD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACnC,CAUA;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAQA;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAYtE"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Default score when no ranking has been applied yet.
3
+ * Used as fallback for items not yet ranked.
4
+ */
5
+ const DEFAULT_SCORE = 0.5;
6
+ /**
7
+ * Transform an ActivityRecord to a FeedItem.
8
+ * Converts storage format to display format with score and preview.
9
+ *
10
+ * This is the primary transformer for converting database records to feed display items.
11
+ * It handles:
12
+ * - Name extraction from metadata (entity and actor names)
13
+ * - Score defaulting (if not provided)
14
+ * - Preview text generation
15
+ * - Type-safe field mapping
16
+ *
17
+ * @param record Activity record from storage
18
+ * @param score Ranking score (0-1), defaults to 0.5
19
+ * @param entityName Optional entity name to override metadata lookup
20
+ * @param actorName Optional actor name to override metadata lookup
21
+ * @returns FeedItem ready for display
22
+ */
23
+ export function rowToFeedItem(record, score = DEFAULT_SCORE, entityName, actorName) {
24
+ const safeScore = Math.max(0, Math.min(1, score));
25
+ // Extract entity name from metadata if not provided
26
+ const finalEntityName = entityName ??
27
+ (typeof record.metadata?.entityName === 'string' ? record.metadata.entityName : undefined);
28
+ // Extract actor name from metadata if not provided
29
+ const finalActorName = actorName ??
30
+ (typeof record.metadata?.actorName === 'string' ? record.metadata.actorName : undefined);
31
+ // Generate preview text
32
+ const preview = extractFeedPreview(record);
33
+ return {
34
+ id: record.id,
35
+ entityId: record.entity_id,
36
+ entityTypeSlug: record.entity_type_slug,
37
+ entityName: finalEntityName,
38
+ action: record.action,
39
+ description: record.description,
40
+ actorId: record.actor_id,
41
+ actorName: finalActorName,
42
+ actorType: record.actor_type,
43
+ metadata: record.metadata,
44
+ createdAt: record.created_at,
45
+ score: safeScore,
46
+ preview,
47
+ tenantId: record.tenant_id,
48
+ };
49
+ }
50
+ /**
51
+ * Transform multiple ActivityRecords to FeedItems.
52
+ * Convenience bulk version of rowToFeedItem.
53
+ *
54
+ * @param records Activity records from storage
55
+ * @param scores Optional array of scores (must match records length if provided)
56
+ * @returns Array of FeedItems
57
+ */
58
+ export function rowsToFeedItems(records, scores) {
59
+ return records.map((record, index) => {
60
+ const score = scores ? (scores[index] ?? DEFAULT_SCORE) : DEFAULT_SCORE;
61
+ return rowToFeedItem(record, score);
62
+ });
63
+ }
64
+ /**
65
+ * Extract preview text for display in feed items.
66
+ * Creates a short human-readable summary of the activity.
67
+ *
68
+ * Priority:
69
+ * 1. If description exists, use it (typically for comments, detailed updates)
70
+ * 2. If metadata.preview exists, use it (pre-computed display text)
71
+ * 3. Generate from metadata.field + old/new values (for field changes)
72
+ * 4. Generate from action type (INSERT → "created", UPDATE → "updated", etc)
73
+ * 5. Default fallback text
74
+ *
75
+ * The preview is typically 1-2 lines and used in list views.
76
+ *
77
+ * @param record Activity record
78
+ * @returns Preview text suitable for display
79
+ */
80
+ export function extractFeedPreview(record) {
81
+ // Use description if available (comments, detailed changes)
82
+ if (record.description) {
83
+ return record.description.slice(0, 200); // Cap at 200 chars
84
+ }
85
+ // Check metadata for pre-computed preview
86
+ if (typeof record.metadata?.preview === 'string') {
87
+ return record.metadata.preview.slice(0, 200);
88
+ }
89
+ // Generate from field change data
90
+ if (record.metadata &&
91
+ typeof record.metadata.field === 'string' &&
92
+ record.metadata.oldValue !== undefined &&
93
+ record.metadata.newValue !== undefined) {
94
+ const oldVal = String(record.metadata.oldValue).slice(0, 50);
95
+ const newVal = String(record.metadata.newValue).slice(0, 50);
96
+ return `${record.metadata.field}: ${oldVal} → ${newVal}`;
97
+ }
98
+ // Generate from action type
99
+ const actionLabel = getActionLabel(record.action);
100
+ if (actionLabel !== record.action) {
101
+ // We have a better label
102
+ if (record.entity_type_slug) {
103
+ return `${actionLabel} ${record.entity_type_slug}`;
104
+ }
105
+ return actionLabel;
106
+ }
107
+ // Fallback
108
+ return record.action.toLowerCase();
109
+ }
110
+ /**
111
+ * Get human-readable label for an action type.
112
+ * Maps database action codes to display labels.
113
+ *
114
+ * @param action Action code (INSERT, UPDATE, DELETE, etc)
115
+ * @returns Display label
116
+ */
117
+ function getActionLabel(action) {
118
+ const labels = {
119
+ INSERT: 'Created',
120
+ UPDATE: 'Updated',
121
+ DELETE: 'Deleted',
122
+ comment: 'Commented',
123
+ status_change: 'Changed status',
124
+ assigned: 'Assigned',
125
+ shared: 'Shared',
126
+ unshared: 'Unshared',
127
+ };
128
+ return labels[action] ?? action;
129
+ }
130
+ /**
131
+ * Extract actor display info from record.
132
+ * Returns name and type suitable for avatar and label display.
133
+ *
134
+ * @param record Activity record
135
+ * @returns Object with name and type for display
136
+ */
137
+ export function extractActorDisplay(record) {
138
+ // Prefer metadata.actorName
139
+ const nameFromMeta = typeof record.metadata?.actorName === 'string' ? record.metadata.actorName : null;
140
+ const name = nameFromMeta ?? record.actor_id ?? 'System';
141
+ const type = record.actor_type === 'user' || record.actor_type === 'agent' ? record.actor_type : 'system';
142
+ return { name, type };
143
+ }
144
+ /**
145
+ * Extract entity display info from record.
146
+ * Returns name and type suitable for label and badge display.
147
+ *
148
+ * @param record Activity record
149
+ * @returns Object with name and type for display
150
+ */
151
+ export function extractEntityDisplay(record) {
152
+ const nameFromMeta = typeof record.metadata?.entityName === 'string' ? record.metadata.entityName : null;
153
+ return {
154
+ name: nameFromMeta ?? record.entity_id ?? undefined,
155
+ type: record.entity_type_slug ?? undefined,
156
+ };
157
+ }
158
+ /**
159
+ * Format activity for plain text output (logs, exports, etc).
160
+ * Creates a one-line summary suitable for text-based feeds.
161
+ *
162
+ * Format: "[Actor] [action] [entity] at [time]"
163
+ * Example: "Alice updated Project ABC at 2:45 PM"
164
+ *
165
+ * @param record Activity record
166
+ * @returns Plain text summary
167
+ */
168
+ export function formatActivityPlainText(record) {
169
+ const actor = extractActorDisplay(record);
170
+ const entity = extractEntityDisplay(record);
171
+ const actionLabel = getActionLabel(record.action);
172
+ const time = new Date(record.created_at).toLocaleTimeString('en-US', {
173
+ hour: 'numeric',
174
+ minute: '2-digit',
175
+ });
176
+ const entityPart = entity.name ? ` ${entity.name}` : '';
177
+ return `${actor.name} ${actionLabel.toLowerCase()}${entityPart} at ${time}`;
178
+ }
179
+ //# sourceMappingURL=transformers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformers.js","sourceRoot":"","sources":["../../src/feed/transformers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Feed system types for activity aggregation, ranking, and digest generation.
3
+ * Supports time-based filtering, personalized ranking, and daily digest summaries.
4
+ */
5
+ /**
6
+ * Time range for feed queries.
7
+ * Allows filtering activities by relative windows (last 24h, 7d, etc).
8
+ */
9
+ export type FeedTimeRange = 'today' | 'yesterday' | 'week' | 'month' | 'all';
10
+ /**
11
+ * Available feed tabs/views.
12
+ * Determines which activities to show and sorting strategy.
13
+ */
14
+ export type FeedTab = 'all' | 'for-you' | 'digest';
15
+ /**
16
+ * A feed item combining activity data with ranking score and preview text.
17
+ * Used for display in activity feeds, digests, and notifications.
18
+ */
19
+ export interface FeedItem {
20
+ /** Unique identifier */
21
+ id: string;
22
+ /** Entity being acted upon (e.g., document ID) */
23
+ entityId: string | null;
24
+ /** Entity type slug (e.g., 'project', 'task') */
25
+ entityTypeSlug: string | null;
26
+ /** User-facing entity name for display */
27
+ entityName?: string;
28
+ /** Action type: 'INSERT', 'UPDATE', 'DELETE', 'comment', etc. */
29
+ action: string;
30
+ /** Short description of what happened */
31
+ description: string | null;
32
+ /** Who performed the action */
33
+ actorId: string | null;
34
+ /** Actor name for display (may be system) */
35
+ actorName?: string;
36
+ /** Actor type: 'user', 'agent', or null for system */
37
+ actorType: 'user' | 'agent' | null;
38
+ /** Additional metadata from the activity */
39
+ metadata?: Record<string, unknown> | null;
40
+ /** ISO timestamp */
41
+ createdAt: string;
42
+ /** Ranking score (0-1). Higher = more relevant. Used in 'for-you' tab. */
43
+ score: number;
44
+ /** Short preview text for display (typically description or generated) */
45
+ preview?: string;
46
+ /** Tenant ID for scoping */
47
+ tenantId: string;
48
+ }
49
+ /**
50
+ * Configuration for feed resolution.
51
+ * Controls filtering, time range, limit, and personalization.
52
+ */
53
+ export interface FeedConfig {
54
+ /** Which feed tab (all, for-you, digest) */
55
+ tab?: FeedTab;
56
+ /** Time range filter */
57
+ timeRange?: FeedTimeRange;
58
+ /** Filter to specific entity */
59
+ entityId?: string;
60
+ /** Filter to specific actor */
61
+ actorId?: string;
62
+ /** Filter to specific action type */
63
+ action?: string;
64
+ /** Maximum number of items */
65
+ limit?: number;
66
+ /** Cursor for pagination (ISO timestamp, return items created before this) */
67
+ before?: string;
68
+ /** Tenant ID (required for RLS / scoping) */
69
+ tenantId: string;
70
+ /** User ID for personalization (optional, used by 'for-you' ranking) */
71
+ userId?: string;
72
+ /** Include importance scores in ranking (if available in metadata) */
73
+ includeImportance?: boolean;
74
+ /** Custom importance weight multiplier (0-2). Default 1. */
75
+ importanceWeight?: number;
76
+ /** Custom recency weight multiplier (0-2). Default 1. */
77
+ recencyWeight?: number;
78
+ }
79
+ /**
80
+ * Ranking input for scoring activities.
81
+ * Combines activity metadata with temporal decay and optional importance.
82
+ */
83
+ export interface RankingInput {
84
+ /** ISO timestamp of activity */
85
+ createdAt: string;
86
+ /** Activity metadata which may contain importance signal */
87
+ metadata?: Record<string, unknown> | null;
88
+ /** Importance value if available (typically 0-1 or 'high'/'medium'/'low') */
89
+ importance?: number | string | null;
90
+ /** Current time for computing temporal decay */
91
+ now: Date;
92
+ /** Weight multiplier for recency (0-2) */
93
+ recencyWeight: number;
94
+ /** Weight multiplier for importance (0-2) */
95
+ importanceWeight: number;
96
+ }
97
+ /**
98
+ * Digest configuration for daily summaries.
99
+ * Identifies high-impact activities for notification/email.
100
+ */
101
+ export interface DigestConfig extends FeedConfig {
102
+ /** Maximum items in digest (typically 5-10) */
103
+ digestLimit?: number;
104
+ /** Minimum score threshold to include in digest (0-1) */
105
+ minScoreThreshold?: number;
106
+ /** Include low-scoring but recent items (for variety) */
107
+ includeRecent?: boolean;
108
+ }
109
+ /**
110
+ * Daily digest result.
111
+ * Summarizes important activities from the past 24 hours.
112
+ */
113
+ export interface FeedDigest {
114
+ /** ISO date string (YYYY-MM-DD) */
115
+ date: string;
116
+ /** Tenant ID */
117
+ tenantId: string;
118
+ /** High-impact activities (ranked by importance + recency) */
119
+ items: FeedItem[];
120
+ /** Summary statistics */
121
+ summary: {
122
+ total: number;
123
+ byAction: Record<string, number>;
124
+ byActor: Record<string, number>;
125
+ };
126
+ /** Suggested email subject line */
127
+ emailSubject?: string;
128
+ /** Pre-computed HTML preview for email rendering */
129
+ emailPreview?: string;
130
+ }
131
+ //# sourceMappingURL=types.d.ts.map