@sprinterai/runtime 0.6.0 → 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 (521) 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 +77 -1
  310. package/dist/index.d.ts.map +1 -1
  311. package/dist/index.js +55 -1
  312. package/dist/index.js.map +1 -1
  313. package/dist/inngest/create-extraction-functions.d.ts +71 -0
  314. package/dist/inngest/create-extraction-functions.d.ts.map +1 -0
  315. package/dist/inngest/create-extraction-functions.js +71 -0
  316. package/dist/inngest/create-extraction-functions.js.map +1 -0
  317. package/dist/inngest/event-names.d.ts +20 -0
  318. package/dist/inngest/event-names.d.ts.map +1 -0
  319. package/dist/inngest/event-names.js +19 -0
  320. package/dist/inngest/event-names.js.map +1 -0
  321. package/dist/inngest/index.d.ts +5 -0
  322. package/dist/inngest/index.d.ts.map +1 -0
  323. package/dist/inngest/index.js +3 -0
  324. package/dist/inngest/index.js.map +1 -0
  325. package/dist/memory/index.d.ts +4 -3
  326. package/dist/memory/index.d.ts.map +1 -1
  327. package/dist/memory/index.js +3 -2
  328. package/dist/memory/index.js.map +1 -1
  329. package/dist/memory/user-memory.d.ts +15 -0
  330. package/dist/memory/user-memory.d.ts.map +1 -0
  331. package/dist/memory/user-memory.js +20 -0
  332. package/dist/memory/user-memory.js.map +1 -0
  333. package/dist/memory/user-memory.test.d.ts +2 -0
  334. package/dist/memory/user-memory.test.d.ts.map +1 -0
  335. package/dist/memory/user-memory.test.js +74 -0
  336. package/dist/memory/user-memory.test.js.map +1 -0
  337. package/dist/module/create-runtime.d.ts +4 -1
  338. package/dist/module/create-runtime.d.ts.map +1 -1
  339. package/dist/module/create-runtime.js.map +1 -1
  340. package/dist/module/map-supabase-stores.d.ts +3 -0
  341. package/dist/module/map-supabase-stores.d.ts.map +1 -1
  342. package/dist/module/map-supabase-stores.js +3 -0
  343. package/dist/module/map-supabase-stores.js.map +1 -1
  344. package/dist/package-exports.test.d.ts +2 -0
  345. package/dist/package-exports.test.d.ts.map +1 -0
  346. package/dist/package-exports.test.js +36 -0
  347. package/dist/package-exports.test.js.map +1 -0
  348. package/dist/providers/index.d.ts +2 -1
  349. package/dist/providers/index.d.ts.map +1 -1
  350. package/dist/providers/index.js.map +1 -1
  351. package/dist/providers/model-resolver.d.ts +11 -3
  352. package/dist/providers/model-resolver.d.ts.map +1 -1
  353. package/dist/providers/model-resolver.js +166 -11
  354. package/dist/providers/model-resolver.js.map +1 -1
  355. package/dist/providers/model-resolver.test.js +10 -10
  356. package/dist/providers/model-resolver.test.js.map +1 -1
  357. package/dist/providers/provider-interfaces.d.ts +0 -20
  358. package/dist/providers/provider-interfaces.d.ts.map +1 -1
  359. package/dist/providers/provider-interfaces.js +1 -0
  360. package/dist/providers/provider-interfaces.js.map +1 -1
  361. package/dist/scoring/index.d.ts +4 -2
  362. package/dist/scoring/index.d.ts.map +1 -1
  363. package/dist/scoring/index.js +2 -1
  364. package/dist/scoring/index.js.map +1 -1
  365. package/dist/scoring/promotion.d.ts +20 -0
  366. package/dist/scoring/promotion.d.ts.map +1 -0
  367. package/dist/scoring/promotion.js +39 -0
  368. package/dist/scoring/promotion.js.map +1 -0
  369. package/dist/scoring/promotion.test.d.ts +2 -0
  370. package/dist/scoring/promotion.test.d.ts.map +1 -0
  371. package/dist/scoring/promotion.test.js +141 -0
  372. package/dist/scoring/promotion.test.js.map +1 -0
  373. package/dist/settings/index.d.ts +15 -0
  374. package/dist/settings/index.d.ts.map +1 -0
  375. package/dist/settings/index.js +47 -0
  376. package/dist/settings/index.js.map +1 -0
  377. package/dist/settings/index.test.d.ts +2 -0
  378. package/dist/settings/index.test.d.ts.map +1 -0
  379. package/dist/settings/index.test.js +75 -0
  380. package/dist/settings/index.test.js.map +1 -0
  381. package/dist/skill/index.d.ts +4 -0
  382. package/dist/skill/index.d.ts.map +1 -0
  383. package/dist/skill/index.js +3 -0
  384. package/dist/skill/index.js.map +1 -0
  385. package/dist/skill/skill-loader.d.ts +18 -0
  386. package/dist/skill/skill-loader.d.ts.map +1 -0
  387. package/dist/skill/skill-loader.js +31 -0
  388. package/dist/skill/skill-loader.js.map +1 -0
  389. package/dist/skill/skill-loader.test.d.ts +2 -0
  390. package/dist/skill/skill-loader.test.d.ts.map +1 -0
  391. package/dist/skill/skill-loader.test.js +64 -0
  392. package/dist/skill/skill-loader.test.js.map +1 -0
  393. package/dist/skill/skill-prompt.d.ts +7 -0
  394. package/dist/skill/skill-prompt.d.ts.map +1 -0
  395. package/dist/skill/skill-prompt.js +17 -0
  396. package/dist/skill/skill-prompt.js.map +1 -0
  397. package/dist/skill/skill-prompt.test.d.ts +2 -0
  398. package/dist/skill/skill-prompt.test.d.ts.map +1 -0
  399. package/dist/skill/skill-prompt.test.js +44 -0
  400. package/dist/skill/skill-prompt.test.js.map +1 -0
  401. package/dist/source/index.d.ts +5 -0
  402. package/dist/source/index.d.ts.map +1 -0
  403. package/dist/source/index.js +3 -0
  404. package/dist/source/index.js.map +1 -0
  405. package/dist/source/source-poller.d.ts +66 -0
  406. package/dist/source/source-poller.d.ts.map +1 -0
  407. package/dist/source/source-poller.js +64 -0
  408. package/dist/source/source-poller.js.map +1 -0
  409. package/dist/source/source-poller.test.d.ts +2 -0
  410. package/dist/source/source-poller.test.d.ts.map +1 -0
  411. package/dist/source/source-poller.test.js +184 -0
  412. package/dist/source/source-poller.test.js.map +1 -0
  413. package/dist/source/source-status.d.ts +41 -0
  414. package/dist/source/source-status.d.ts.map +1 -0
  415. package/dist/source/source-status.js +73 -0
  416. package/dist/source/source-status.js.map +1 -0
  417. package/dist/source/source-status.test.d.ts +2 -0
  418. package/dist/source/source-status.test.d.ts.map +1 -0
  419. package/dist/source/source-status.test.js +116 -0
  420. package/dist/source/source-status.test.js.map +1 -0
  421. package/dist/template/index.d.ts +61 -0
  422. package/dist/template/index.d.ts.map +1 -0
  423. package/dist/template/index.js +100 -0
  424. package/dist/template/index.js.map +1 -0
  425. package/dist/template/index.test.d.ts +2 -0
  426. package/dist/template/index.test.d.ts.map +1 -0
  427. package/dist/template/index.test.js +167 -0
  428. package/dist/template/index.test.js.map +1 -0
  429. package/dist/testing/in-memory-agent-version-store.d.ts +13 -0
  430. package/dist/testing/in-memory-agent-version-store.d.ts.map +1 -0
  431. package/dist/testing/in-memory-agent-version-store.js +36 -0
  432. package/dist/testing/in-memory-agent-version-store.js.map +1 -0
  433. package/dist/testing/in-memory-chat-store.d.ts +11 -1
  434. package/dist/testing/in-memory-chat-store.d.ts.map +1 -1
  435. package/dist/testing/in-memory-chat-store.js +66 -0
  436. package/dist/testing/in-memory-chat-store.js.map +1 -1
  437. package/dist/testing/in-memory-entity-store.d.ts +2 -0
  438. package/dist/testing/in-memory-entity-store.d.ts.map +1 -1
  439. package/dist/testing/in-memory-entity-store.js +8 -3
  440. package/dist/testing/in-memory-entity-store.js.map +1 -1
  441. package/dist/testing/in-memory-entity-store.test.js +2 -1
  442. package/dist/testing/in-memory-entity-store.test.js.map +1 -1
  443. package/dist/testing/in-memory-heartbeat-run-store.d.ts +21 -0
  444. package/dist/testing/in-memory-heartbeat-run-store.d.ts.map +1 -0
  445. package/dist/testing/in-memory-heartbeat-run-store.js +107 -0
  446. package/dist/testing/in-memory-heartbeat-run-store.js.map +1 -0
  447. package/dist/testing/index.d.ts +9 -7
  448. package/dist/testing/index.d.ts.map +1 -1
  449. package/dist/testing/index.js +9 -7
  450. package/dist/testing/index.js.map +1 -1
  451. package/dist/tool/gallery/gallery-module.d.ts +4 -0
  452. package/dist/tool/gallery/gallery-module.d.ts.map +1 -0
  453. package/dist/tool/gallery/gallery-module.js +10 -0
  454. package/dist/tool/gallery/gallery-module.js.map +1 -0
  455. package/dist/tool/gallery/gallery-tool-definitions.d.ts +17 -0
  456. package/dist/tool/gallery/gallery-tool-definitions.d.ts.map +1 -0
  457. package/dist/tool/gallery/gallery-tool-definitions.js +748 -0
  458. package/dist/tool/gallery/gallery-tool-definitions.js.map +1 -0
  459. package/dist/tool/gallery/gallery-tools.d.ts +11 -0
  460. package/dist/tool/gallery/gallery-tools.d.ts.map +1 -0
  461. package/dist/tool/gallery/gallery-tools.js +971 -0
  462. package/dist/tool/gallery/gallery-tools.js.map +1 -0
  463. package/dist/tool/gallery/gallery-tools.test.d.ts +2 -0
  464. package/dist/tool/gallery/gallery-tools.test.d.ts.map +1 -0
  465. package/dist/tool/gallery/gallery-tools.test.js +75 -0
  466. package/dist/tool/gallery/gallery-tools.test.js.map +1 -0
  467. package/dist/tool/gallery/index.d.ts +5 -0
  468. package/dist/tool/gallery/index.d.ts.map +1 -0
  469. package/dist/tool/gallery/index.js +4 -0
  470. package/dist/tool/gallery/index.js.map +1 -0
  471. package/dist/tool/index.d.ts +11 -7
  472. package/dist/tool/index.d.ts.map +1 -1
  473. package/dist/tool/index.js +7 -5
  474. package/dist/tool/index.js.map +1 -1
  475. package/dist/tool/session-manager.d.ts +35 -0
  476. package/dist/tool/session-manager.d.ts.map +1 -0
  477. package/dist/tool/session-manager.js +40 -0
  478. package/dist/tool/session-manager.js.map +1 -0
  479. package/dist/tool/session-manager.test.d.ts +2 -0
  480. package/dist/tool/session-manager.test.d.ts.map +1 -0
  481. package/dist/tool/session-manager.test.js +139 -0
  482. package/dist/tool/session-manager.test.js.map +1 -0
  483. package/dist/tool/tool-registry.d.ts +1 -1
  484. package/dist/tool/tool-registry.d.ts.map +1 -1
  485. package/dist/tool/tool-registry.js +1 -0
  486. package/dist/tool/tool-registry.js.map +1 -1
  487. package/dist/tool/tool-registry.test.js +7 -0
  488. package/dist/tool/tool-registry.test.js.map +1 -1
  489. package/dist/workflow/claim-manager.d.ts +24 -0
  490. package/dist/workflow/claim-manager.d.ts.map +1 -0
  491. package/dist/workflow/claim-manager.js +31 -0
  492. package/dist/workflow/claim-manager.js.map +1 -0
  493. package/dist/workflow/claim-manager.test.d.ts +2 -0
  494. package/dist/workflow/claim-manager.test.d.ts.map +1 -0
  495. package/dist/workflow/claim-manager.test.js +124 -0
  496. package/dist/workflow/claim-manager.test.js.map +1 -0
  497. package/dist/workflow/create-node-executor.d.ts +40 -0
  498. package/dist/workflow/create-node-executor.d.ts.map +1 -0
  499. package/dist/workflow/create-node-executor.js +234 -0
  500. package/dist/workflow/create-node-executor.js.map +1 -0
  501. package/dist/workflow/field-recovery.d.ts +12 -0
  502. package/dist/workflow/field-recovery.d.ts.map +1 -0
  503. package/dist/workflow/field-recovery.js +86 -0
  504. package/dist/workflow/field-recovery.js.map +1 -0
  505. package/dist/workflow/index.d.ts +8 -0
  506. package/dist/workflow/index.d.ts.map +1 -1
  507. package/dist/workflow/index.js +7 -0
  508. package/dist/workflow/index.js.map +1 -1
  509. package/dist/workflow/run-entity-workflow.d.ts +53 -0
  510. package/dist/workflow/run-entity-workflow.d.ts.map +1 -0
  511. package/dist/workflow/run-entity-workflow.js +72 -0
  512. package/dist/workflow/run-entity-workflow.js.map +1 -0
  513. package/dist/workflow/run-queries.d.ts +45 -0
  514. package/dist/workflow/run-queries.d.ts.map +1 -0
  515. package/dist/workflow/run-queries.js +80 -0
  516. package/dist/workflow/run-queries.js.map +1 -0
  517. package/dist/workflow/run-queries.test.d.ts +2 -0
  518. package/dist/workflow/run-queries.test.d.ts.map +1 -0
  519. package/dist/workflow/run-queries.test.js +177 -0
  520. package/dist/workflow/run-queries.test.js.map +1 -0
  521. package/package.json +227 -3
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Creates a fire-and-forget analytics recorder that fans out events to multiple providers.
3
+ * Provider errors are caught and passed to onError (or swallowed if not configured).
4
+ */
5
+ export function createAnalyticsRecorder(config) {
6
+ return function recordEvent(type, metadata, tenantId, userId) {
7
+ const event = {
8
+ type,
9
+ metadata,
10
+ tenantId,
11
+ userId,
12
+ timestamp: new Date().toISOString(),
13
+ };
14
+ for (const provider of config.providers) {
15
+ try {
16
+ const result = provider.track(event);
17
+ if (result instanceof Promise) {
18
+ result.catch((err) => config.onError?.(provider, err));
19
+ }
20
+ }
21
+ catch (err) {
22
+ config.onError?.(provider, err);
23
+ }
24
+ }
25
+ };
26
+ }
27
+ //# sourceMappingURL=analytics-recorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-recorder.js","sourceRoot":"","sources":["../../src/analytics/analytics-recorder.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAA+B;IACrE,OAAO,SAAS,WAAW,CACzB,IAAY,EACZ,QAAiC,EACjC,QAAgB,EAChB,MAAe;QAEf,MAAM,KAAK,GAAmB;YAC5B,IAAI;YACJ,QAAQ;YACR,QAAQ;YACR,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrC,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;oBAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=analytics-recorder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-recorder.test.d.ts","sourceRoot":"","sources":["../../src/analytics/analytics-recorder.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,98 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { createAnalyticsRecorder } from './analytics-recorder.js';
3
+ function makeProvider(impl) {
4
+ return {
5
+ track: vi.fn().mockResolvedValue(undefined),
6
+ ...impl,
7
+ };
8
+ }
9
+ describe('createAnalyticsRecorder', () => {
10
+ beforeEach(() => {
11
+ vi.useFakeTimers();
12
+ });
13
+ it('calls track on a single provider with the correct event shape', () => {
14
+ const provider = makeProvider();
15
+ const record = createAnalyticsRecorder({ providers: [provider] });
16
+ record('tool_run', { toolSlug: 'roi-calculator' }, 'tenant-1', 'user-1');
17
+ expect(provider.track).toHaveBeenCalledOnce();
18
+ const event = vi.mocked(provider.track).mock.calls[0][0];
19
+ expect(event.type).toBe('tool_run');
20
+ expect(event.metadata).toEqual({ toolSlug: 'roi-calculator' });
21
+ expect(event.tenantId).toBe('tenant-1');
22
+ expect(event.userId).toBe('user-1');
23
+ expect(event.timestamp).toMatch(/^\d{4}-\d{2}-\d{2}T/);
24
+ });
25
+ it('fans out to multiple providers', () => {
26
+ const p1 = makeProvider();
27
+ const p2 = makeProvider();
28
+ const record = createAnalyticsRecorder({ providers: [p1, p2] });
29
+ record('chat_started', {}, 'tenant-2');
30
+ expect(p1.track).toHaveBeenCalledOnce();
31
+ expect(p2.track).toHaveBeenCalledOnce();
32
+ });
33
+ it('omits userId when not provided', () => {
34
+ const provider = makeProvider();
35
+ const record = createAnalyticsRecorder({ providers: [provider] });
36
+ record('page_view', {}, 'tenant-3');
37
+ const event = vi.mocked(provider.track).mock.calls[0][0];
38
+ expect(event.userId).toBeUndefined();
39
+ });
40
+ it('calls onError when a sync provider throws', () => {
41
+ const provider = makeProvider({
42
+ track: vi.fn().mockImplementation(() => {
43
+ throw new Error('sync fail');
44
+ }),
45
+ });
46
+ const onError = vi.fn();
47
+ const record = createAnalyticsRecorder({ providers: [provider], onError });
48
+ record('event', {}, 'tenant-1');
49
+ expect(onError).toHaveBeenCalledWith(provider, expect.any(Error));
50
+ });
51
+ it('calls onError when an async provider rejects', async () => {
52
+ const err = new Error('async fail');
53
+ const provider = makeProvider({ track: vi.fn().mockRejectedValue(err) });
54
+ const onError = vi.fn();
55
+ const record = createAnalyticsRecorder({ providers: [provider], onError });
56
+ record('event', {}, 'tenant-1');
57
+ // Let the rejected promise settle
58
+ await vi.runAllTimersAsync();
59
+ await Promise.resolve();
60
+ expect(onError).toHaveBeenCalledWith(provider, err);
61
+ });
62
+ it('swallows async errors silently when onError is not configured', async () => {
63
+ const provider = makeProvider({ track: vi.fn().mockRejectedValue(new Error('fail')) });
64
+ const record = createAnalyticsRecorder({ providers: [provider] });
65
+ expect(() => record('event', {}, 'tenant-1')).not.toThrow();
66
+ await vi.runAllTimersAsync();
67
+ await Promise.resolve();
68
+ // no unhandled rejection — test passes
69
+ });
70
+ it('continues to subsequent providers after one throws', () => {
71
+ const p1 = makeProvider({
72
+ track: vi.fn().mockImplementation(() => {
73
+ throw new Error('p1 fail');
74
+ }),
75
+ });
76
+ const p2 = makeProvider();
77
+ const record = createAnalyticsRecorder({ providers: [p1, p2] });
78
+ record('event', {}, 'tenant-1');
79
+ expect(p2.track).toHaveBeenCalledOnce();
80
+ });
81
+ it('works with zero providers', () => {
82
+ const record = createAnalyticsRecorder({ providers: [] });
83
+ expect(() => record('event', {}, 'tenant-1')).not.toThrow();
84
+ });
85
+ it('works with a synchronous provider', () => {
86
+ const events = [];
87
+ const syncProvider = {
88
+ track: (event) => {
89
+ events.push(event);
90
+ },
91
+ };
92
+ const record = createAnalyticsRecorder({ providers: [syncProvider] });
93
+ record('sync_event', { key: 'val' }, 'tenant-1', 'user-2');
94
+ expect(events).toHaveLength(1);
95
+ expect(events[0].type).toBe('sync_event');
96
+ });
97
+ });
98
+ //# sourceMappingURL=analytics-recorder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-recorder.test.js","sourceRoot":"","sources":["../../src/analytics/analytics-recorder.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** A structured analytics event with tenant context. */
2
+ export interface AnalyticsEvent {
3
+ type: string;
4
+ metadata: Record<string, unknown>;
5
+ tenantId: string;
6
+ userId?: string;
7
+ timestamp?: string;
8
+ }
9
+ /** Interface for analytics providers (PostHog, Mixpanel, custom DB, etc.). */
10
+ export interface AnalyticsProvider {
11
+ track(event: AnalyticsEvent): void | Promise<void>;
12
+ }
13
+ //# sourceMappingURL=analytics-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-types.d.ts","sourceRoot":"","sources":["../../src/analytics/analytics-types.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=analytics-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-types.js","sourceRoot":"","sources":["../../src/analytics/analytics-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export type { AnalyticsEvent, AnalyticsProvider } from './analytics-types.js';
2
+ export { createAnalyticsRecorder } from './analytics-recorder.js';
3
+ export type { AnalyticsRecorderConfig } from './analytics-recorder.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createAnalyticsRecorder } from './analytics-recorder.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { z } from 'zod';
2
+ /** Convert a cron expression to a human-readable description. */
3
+ export declare function cronToHuman(cron: string): string;
4
+ /**
5
+ * Compute the next occurrence of a cron schedule after a given date.
6
+ * Returns null if the schedule cannot be parsed or cron-parser is unavailable.
7
+ *
8
+ * To enable next-run computation, install `cron-parser` and pass it in:
9
+ * ```ts
10
+ * import { CronExpressionParser } from 'cron-parser';
11
+ * getNextRun('0 9 * * *', { now: new Date(), parser: CronExpressionParser });
12
+ * ```
13
+ */
14
+ export declare function getNextRun(cron: string, options?: {
15
+ now?: Date;
16
+ timezone?: string;
17
+ /** Optional cron parser — inject `CronExpressionParser` from `cron-parser` package. */
18
+ parser?: {
19
+ parse(expr: string, opts?: {
20
+ currentDate?: Date;
21
+ tz?: string;
22
+ }): {
23
+ next(): {
24
+ toDate(): Date;
25
+ };
26
+ };
27
+ };
28
+ }): string | null;
29
+ /** Structured output from NL automation parsing. */
30
+ export declare const AutomationPlanSchema: z.ZodObject<{
31
+ /** Generated name for the automation agent. */
32
+ name: z.ZodString;
33
+ /** Agent slug (kebab-case, unique identifier). */
34
+ slug: z.ZodString;
35
+ /** What this automation does, in one sentence. */
36
+ description: z.ZodString;
37
+ /** The entity type slug to monitor (from available types), or null. */
38
+ entityTypeSlug: z.ZodNullable<z.ZodString>;
39
+ /** Cron schedule expression. */
40
+ schedule: z.ZodString;
41
+ /** Human-readable schedule. */
42
+ scheduleHuman: z.ZodString;
43
+ /** The heartbeat prompt — what the agent should do each run. */
44
+ prompt: z.ZodString;
45
+ /** Suggested icon (lucide icon name). */
46
+ icon: z.ZodString;
47
+ }, "strip", z.ZodTypeAny, {
48
+ slug: string;
49
+ name: string;
50
+ description: string;
51
+ icon: string;
52
+ entityTypeSlug: string | null;
53
+ prompt: string;
54
+ schedule: string;
55
+ scheduleHuman: string;
56
+ }, {
57
+ slug: string;
58
+ name: string;
59
+ description: string;
60
+ icon: string;
61
+ entityTypeSlug: string | null;
62
+ prompt: string;
63
+ schedule: string;
64
+ scheduleHuman: string;
65
+ }>;
66
+ export type AutomationPlan = z.infer<typeof AutomationPlanSchema>;
67
+ /**
68
+ * Build the system prompt for the NL automation parser.
69
+ * Includes available entity types as context so the AI can match
70
+ * user intent to the right data.
71
+ */
72
+ export declare function buildParserSystemPrompt(entityTypes: Array<{
73
+ slug: string;
74
+ name: string;
75
+ description?: string;
76
+ }>): string;
77
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/automation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwBxB,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA+BhD;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,MAAM,CAAC,EAAE;QACP,KAAK,CACH,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,IAAI,CAAC;YAAC,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE,GACzC;YACD,IAAI,IAAI;gBAAE,MAAM,IAAI,IAAI,CAAA;aAAE,CAAC;SAC5B,CAAC;KACH,CAAC;CACH,GACA,MAAM,GAAG,IAAI,CAWf;AAMD,oDAAoD;AACpD,eAAO,MAAM,oBAAoB;IAC/B,+CAA+C;;IAE/C,kDAAkD;;IAElD,kDAAkD;;IAElD,uEAAuE;;IAEvE,gCAAgC;;IAEhC,+BAA+B;;IAE/B,gEAAgE;;IAEhE,yCAAyC;;;;;;;;;;;;;;;;;;;;EAEzC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACvE,MAAM,CAkBR"}
@@ -0,0 +1,119 @@
1
+ import { z } from 'zod';
2
+ // ---------------------------------------------------------------------------
3
+ // Schedule utilities
4
+ // ---------------------------------------------------------------------------
5
+ const COMMON_CRONS = {
6
+ '* * * * *': 'Every minute',
7
+ '*/5 * * * *': 'Every 5 minutes',
8
+ '*/15 * * * *': 'Every 15 minutes',
9
+ '*/30 * * * *': 'Every 30 minutes',
10
+ '0 * * * *': 'Every hour',
11
+ '0 */2 * * *': 'Every 2 hours',
12
+ '0 */4 * * *': 'Every 4 hours',
13
+ '0 */6 * * *': 'Every 6 hours',
14
+ '0 */12 * * *': 'Every 12 hours',
15
+ '0 0 * * *': 'Daily at midnight',
16
+ '0 9 * * *': 'Daily at 9 AM',
17
+ '0 9 * * 1-5': 'Weekdays at 9 AM',
18
+ '0 0 * * 0': 'Weekly on Sunday',
19
+ '0 0 * * 1': 'Weekly on Monday',
20
+ '0 0 1 * *': 'Monthly on the 1st',
21
+ };
22
+ /** Convert a cron expression to a human-readable description. */
23
+ export function cronToHuman(cron) {
24
+ const normalized = cron.trim();
25
+ const known = COMMON_CRONS[normalized];
26
+ if (known)
27
+ return known;
28
+ const parts = normalized.split(/\s+/);
29
+ if (parts.length !== 5)
30
+ return cron;
31
+ const [minute, hour, dayOfMonth, month, dayOfWeek] = parts;
32
+ if (minute.startsWith('*/') &&
33
+ hour === '*' &&
34
+ dayOfMonth === '*' &&
35
+ month === '*' &&
36
+ dayOfWeek === '*') {
37
+ return `Every ${minute.slice(2)} minutes`;
38
+ }
39
+ if (minute === '0' &&
40
+ hour.startsWith('*/') &&
41
+ dayOfMonth === '*' &&
42
+ month === '*' &&
43
+ dayOfWeek === '*') {
44
+ return `Every ${hour.slice(2)} hours`;
45
+ }
46
+ return cron;
47
+ }
48
+ /**
49
+ * Compute the next occurrence of a cron schedule after a given date.
50
+ * Returns null if the schedule cannot be parsed or cron-parser is unavailable.
51
+ *
52
+ * To enable next-run computation, install `cron-parser` and pass it in:
53
+ * ```ts
54
+ * import { CronExpressionParser } from 'cron-parser';
55
+ * getNextRun('0 9 * * *', { now: new Date(), parser: CronExpressionParser });
56
+ * ```
57
+ */
58
+ export function getNextRun(cron, options) {
59
+ if (!options?.parser)
60
+ return null;
61
+ try {
62
+ const parseOpts = {};
63
+ if (options.now)
64
+ parseOpts.currentDate = options.now;
65
+ if (options.timezone)
66
+ parseOpts.tz = options.timezone;
67
+ const interval = options.parser.parse(cron, parseOpts);
68
+ return interval.next().toDate().toISOString();
69
+ }
70
+ catch {
71
+ return null;
72
+ }
73
+ }
74
+ // ---------------------------------------------------------------------------
75
+ // NL Automation Plan (AI-assisted automation creation)
76
+ // ---------------------------------------------------------------------------
77
+ /** Structured output from NL automation parsing. */
78
+ export const AutomationPlanSchema = z.object({
79
+ /** Generated name for the automation agent. */
80
+ name: z.string(),
81
+ /** Agent slug (kebab-case, unique identifier). */
82
+ slug: z.string(),
83
+ /** What this automation does, in one sentence. */
84
+ description: z.string(),
85
+ /** The entity type slug to monitor (from available types), or null. */
86
+ entityTypeSlug: z.string().nullable(),
87
+ /** Cron schedule expression. */
88
+ schedule: z.string(),
89
+ /** Human-readable schedule. */
90
+ scheduleHuman: z.string(),
91
+ /** The heartbeat prompt — what the agent should do each run. */
92
+ prompt: z.string(),
93
+ /** Suggested icon (lucide icon name). */
94
+ icon: z.string(),
95
+ });
96
+ /**
97
+ * Build the system prompt for the NL automation parser.
98
+ * Includes available entity types as context so the AI can match
99
+ * user intent to the right data.
100
+ */
101
+ export function buildParserSystemPrompt(entityTypes) {
102
+ const typeList = entityTypes
103
+ .map((t) => `- ${t.slug}: ${t.name}${t.description ? ` (${t.description})` : ''}`)
104
+ .join('\n');
105
+ return `You are an automation configuration assistant. Parse the user's natural language description into a structured heartbeat automation config.
106
+
107
+ Available entity types in this workspace:
108
+ ${typeList || '- (none configured yet)'}
109
+
110
+ Rules:
111
+ - Generate a concise, descriptive agent name (e.g., "WBM Customer News Monitor")
112
+ - Generate a kebab-case slug from the name (e.g., "wbm-customer-news-monitor")
113
+ - Match the user's intent to an entity type from the list above. If no match, set entityTypeSlug to null.
114
+ - Convert schedule intent to cron: "daily" = "0 9 * * *", "weekly" = "0 9 * * 1", "hourly" = "0 * * * *", "every 15 minutes" = "*/15 * * * *"
115
+ - Write a clear heartbeat prompt that tells the agent exactly what to do each run
116
+ - Choose an appropriate lucide icon: "search" for monitoring, "bell" for alerts, "file-text" for reports, "trending-up" for tracking, "shield" for security, "mail" for outreach
117
+ - Keep the description under 100 characters`;
118
+ }
119
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/automation/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/automation/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,135 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { cronToHuman, getNextRun, AutomationPlanSchema, buildParserSystemPrompt } from './index.js';
3
+ describe('cronToHuman', () => {
4
+ it('converts known cron expressions', () => {
5
+ expect(cronToHuman('0 9 * * *')).toBe('Daily at 9 AM');
6
+ expect(cronToHuman('0 * * * *')).toBe('Every hour');
7
+ expect(cronToHuman('0 0 * * *')).toBe('Daily at midnight');
8
+ expect(cronToHuman('0 0 1 * *')).toBe('Monthly on the 1st');
9
+ expect(cronToHuman('0 0 * * 1')).toBe('Weekly on Monday');
10
+ expect(cronToHuman('0 9 * * 1-5')).toBe('Weekdays at 9 AM');
11
+ });
12
+ it('handles minute interval expressions', () => {
13
+ expect(cronToHuman('*/5 * * * *')).toBe('Every 5 minutes');
14
+ expect(cronToHuman('*/15 * * * *')).toBe('Every 15 minutes');
15
+ expect(cronToHuman('*/30 * * * *')).toBe('Every 30 minutes');
16
+ });
17
+ it('handles hour interval expressions', () => {
18
+ expect(cronToHuman('0 */2 * * *')).toBe('Every 2 hours');
19
+ expect(cronToHuman('0 */6 * * *')).toBe('Every 6 hours');
20
+ expect(cronToHuman('0 */12 * * *')).toBe('Every 12 hours');
21
+ });
22
+ it('handles extra whitespace in cron expression', () => {
23
+ expect(cronToHuman(' 0 9 * * * ')).toBe('Daily at 9 AM');
24
+ });
25
+ it('returns original expression for unknown/invalid crons', () => {
26
+ expect(cronToHuman('custom-schedule')).toBe('custom-schedule');
27
+ });
28
+ it('parses generic minute interval not in lookup table', () => {
29
+ expect(cronToHuman('*/7 * * * *')).toBe('Every 7 minutes');
30
+ });
31
+ it('parses generic hour interval not in lookup table', () => {
32
+ expect(cronToHuman('0 */3 * * *')).toBe('Every 3 hours');
33
+ });
34
+ });
35
+ describe('getNextRun', () => {
36
+ it('returns null when no parser is provided', () => {
37
+ expect(getNextRun('0 9 * * *')).toBeNull();
38
+ });
39
+ it('returns null when parser is not passed in options', () => {
40
+ expect(getNextRun('0 9 * * *', { timezone: 'UTC' })).toBeNull();
41
+ });
42
+ it('uses an injected parser to compute next run', () => {
43
+ const fixedDate = new Date('2026-01-01T10:00:00Z');
44
+ const mockParser = {
45
+ parse: (_expr, _opts) => ({
46
+ next: () => ({ toDate: () => fixedDate }),
47
+ }),
48
+ };
49
+ const result = getNextRun('0 9 * * *', { parser: mockParser });
50
+ expect(result).toBe(fixedDate.toISOString());
51
+ });
52
+ it('returns null if the parser throws', () => {
53
+ const badParser = {
54
+ parse: () => {
55
+ throw new Error('Invalid cron');
56
+ },
57
+ };
58
+ const result = getNextRun('bad-cron', { parser: badParser });
59
+ expect(result).toBeNull();
60
+ });
61
+ });
62
+ describe('AutomationPlanSchema', () => {
63
+ it('validates a correct automation plan', () => {
64
+ const plan = {
65
+ name: 'News Monitor',
66
+ slug: 'news-monitor',
67
+ description: 'Monitor news for portfolio companies',
68
+ entityTypeSlug: 'company',
69
+ schedule: '0 9 * * *',
70
+ scheduleHuman: 'Daily at 9 AM',
71
+ prompt: 'Search for recent news about each company',
72
+ icon: 'search',
73
+ };
74
+ const result = AutomationPlanSchema.safeParse(plan);
75
+ expect(result.success).toBe(true);
76
+ });
77
+ it('accepts null entityTypeSlug', () => {
78
+ const plan = {
79
+ name: 'Daily Digest',
80
+ slug: 'daily-digest',
81
+ description: 'Send a daily summary',
82
+ entityTypeSlug: null,
83
+ schedule: '0 8 * * 1-5',
84
+ scheduleHuman: 'Weekdays at 8 AM',
85
+ prompt: 'Generate a summary',
86
+ icon: 'mail',
87
+ };
88
+ const result = AutomationPlanSchema.safeParse(plan);
89
+ expect(result.success).toBe(true);
90
+ if (result.success) {
91
+ expect(result.data.entityTypeSlug).toBeNull();
92
+ }
93
+ });
94
+ it('rejects a plan missing required fields', () => {
95
+ const result = AutomationPlanSchema.safeParse({ name: 'Incomplete' });
96
+ expect(result.success).toBe(false);
97
+ });
98
+ });
99
+ describe('buildParserSystemPrompt', () => {
100
+ it('includes entity types in the prompt', () => {
101
+ const entityTypes = [
102
+ { slug: 'company', name: 'Company', description: 'Portfolio companies' },
103
+ { slug: 'contact', name: 'Contact' },
104
+ ];
105
+ const prompt = buildParserSystemPrompt(entityTypes);
106
+ expect(prompt).toContain('company: Company');
107
+ expect(prompt).toContain('contact: Contact');
108
+ expect(prompt).toContain('Portfolio companies');
109
+ });
110
+ it('shows placeholder when no entity types', () => {
111
+ const prompt = buildParserSystemPrompt([]);
112
+ expect(prompt).toContain('(none configured yet)');
113
+ });
114
+ it('contains automation-specific instructions', () => {
115
+ const prompt = buildParserSystemPrompt([]);
116
+ expect(prompt).toContain('cron');
117
+ expect(prompt).toContain('heartbeat');
118
+ });
119
+ });
120
+ describe('AutomationPlan type', () => {
121
+ it('is inferred correctly from schema', () => {
122
+ const plan = {
123
+ name: 'Test',
124
+ slug: 'test',
125
+ description: 'Test automation',
126
+ entityTypeSlug: null,
127
+ schedule: '0 * * * *',
128
+ scheduleHuman: 'Every hour',
129
+ prompt: 'Do something',
130
+ icon: 'bell',
131
+ };
132
+ expect(plan.slug).toBe('test');
133
+ });
134
+ });
135
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/automation/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { EntityTypeRecord } from '@sprinterai/core';
2
+ import type { LanguageModel } from 'ai';
3
+ import { type ParseResult } from './capture-schema.js';
4
+ export interface CaptureParserConfig {
5
+ model: LanguageModel;
6
+ getEntityTypes: () => Promise<EntityTypeRecord[]>;
7
+ }
8
+ export interface CaptureContext {
9
+ entityTypeSlug?: string;
10
+ entityId?: string;
11
+ }
12
+ export declare function createCaptureParser(config: CaptureParserConfig): (text: string, context?: CaptureContext) => Promise<ParseResult>;
13
+ //# sourceMappingURL=capture-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-parser.d.ts","sourceRoot":"","sources":["../../src/capture/capture-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAGxC,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAYvE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,IAC1B,MAAM,MAAM,EAAE,UAAU,cAAc,KAAG,OAAO,CAAC,WAAW,CAAC,CA6CjG"}
@@ -0,0 +1,55 @@
1
+ import { generateObject } from 'ai';
2
+ import { z } from 'zod';
3
+ import { ParseResultSchema } from './capture-schema.js';
4
+ const ParseCaptureInput = z.object({
5
+ text: z.string().min(1).max(1000),
6
+ context: z
7
+ .object({
8
+ entityTypeSlug: z.string().optional(),
9
+ entityId: z.string().uuid().optional(),
10
+ })
11
+ .optional(),
12
+ });
13
+ export function createCaptureParser(config) {
14
+ return async function parseCapture(text, context) {
15
+ const validated = ParseCaptureInput.parse({ text, context });
16
+ const entityTypes = await config.getEntityTypes();
17
+ const typeDescriptions = entityTypes
18
+ .map((t) => {
19
+ const schema = t.json_schema ? JSON.stringify(t.json_schema, null, 2) : 'No schema defined';
20
+ return `- **${t.name}** (slug: "${t.slug}")\n Schema: ${schema}`;
21
+ })
22
+ .join('\n');
23
+ let contextInfo = '';
24
+ if (validated.context?.entityTypeSlug) {
25
+ contextInfo += `\nThe user is currently viewing the "${validated.context.entityTypeSlug}" entity type list. Bias toward creating this type unless the input clearly indicates otherwise.`;
26
+ }
27
+ if (validated.context?.entityId) {
28
+ contextInfo += `\nThe user is viewing entity ID "${validated.context.entityId}". Suggest a relation to this entity if it makes sense.`;
29
+ }
30
+ const { object } = await generateObject({
31
+ model: config.model,
32
+ schema: ParseResultSchema,
33
+ prompt: `Parse this quick capture input into a structured entity.
34
+
35
+ Available entity types:
36
+ ${typeDescriptions}
37
+ ${contextInfo}
38
+
39
+ User input: "${validated.text}"
40
+
41
+ Rules:
42
+ - Pick the most appropriate entity type based on the input
43
+ - Generate a clear, concise title
44
+ - Populate content fields that match the entity type's JSON schema
45
+ - For enum fields, ONLY use values from the enum list — never invent values
46
+ - For date fields, use YYYY-MM-DD format
47
+ - For string fields, use plain text (no markdown)
48
+ - Only include fields defined in the schema — do not add extra keys
49
+ - Only suggest relations if context.entityId is provided and it makes sense
50
+ - If no relations make sense, return an empty suggestedRelations array`,
51
+ });
52
+ return object;
53
+ };
54
+ }
55
+ //# sourceMappingURL=capture-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-parser.js","sourceRoot":"","sources":["../../src/capture/capture-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAEpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAoB,MAAM,kBAAkB,CAAC;AAEvE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;KACvC,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAYH,MAAM,UAAU,mBAAmB,CAAC,MAA2B;IAC7D,OAAO,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,OAAwB;QACvE,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;QAElD,MAAM,gBAAgB,GAAG,WAAW;aACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;YAC5F,OAAO,OAAO,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,IAAI,iBAAiB,MAAM,EAAE,CAAC;QACpE,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC;YACtC,WAAW,IAAI,wCAAwC,SAAS,CAAC,OAAO,CAAC,cAAc,kGAAkG,CAAC;QAC5L,CAAC;QACD,IAAI,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YAChC,WAAW,IAAI,oCAAoC,SAAS,CAAC,OAAO,CAAC,QAAQ,yDAAyD,CAAC;QACzI,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC;YACtC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE;;;EAGZ,gBAAgB;EAChB,WAAW;;eAEE,SAAS,CAAC,IAAI;;;;;;;;;;;uEAW0C;SAClE,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=capture-parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-parser.test.d.ts","sourceRoot":"","sources":["../../src/capture/capture-parser.test.ts"],"names":[],"mappings":""}