@dxos/assistant-toolkit 0.8.4-main.ae835ea → 0.8.4-main.c351d160a8

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 (460) hide show
  1. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  2. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  3. package/dist/lib/{browser → neutral}/index.mjs +3704 -1956
  4. package/dist/lib/neutral/index.mjs.map +7 -0
  5. package/dist/lib/neutral/meta.json +1 -0
  6. package/dist/lib/neutral/testing/index.mjs +81 -0
  7. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  8. package/dist/types/src/blueprints/automation/blueprint.d.ts +4 -0
  9. package/dist/types/src/blueprints/automation/blueprint.d.ts.map +1 -0
  10. package/dist/types/src/blueprints/automation/index.d.ts +2 -0
  11. package/dist/types/src/blueprints/automation/index.d.ts.map +1 -0
  12. package/dist/types/src/blueprints/browser/blueprint.d.ts +4 -0
  13. package/dist/types/src/blueprints/browser/blueprint.d.ts.map +1 -0
  14. package/dist/types/src/blueprints/browser/blueprint.test.d.ts +2 -0
  15. package/dist/types/src/blueprints/browser/blueprint.test.d.ts.map +1 -0
  16. package/dist/types/src/blueprints/browser/index.d.ts +2 -0
  17. package/dist/types/src/blueprints/browser/index.d.ts.map +1 -0
  18. package/dist/types/src/blueprints/database/blueprint.d.ts +4 -0
  19. package/dist/types/src/blueprints/database/blueprint.d.ts.map +1 -0
  20. package/dist/types/src/blueprints/database/blueprint.test.d.ts +2 -0
  21. package/dist/types/src/blueprints/database/blueprint.test.d.ts.map +1 -0
  22. package/dist/types/src/blueprints/database/functions/context-add.d.ts +6 -0
  23. package/dist/types/src/blueprints/database/functions/context-add.d.ts.map +1 -0
  24. package/dist/types/src/blueprints/database/functions/context-remove.d.ts +6 -0
  25. package/dist/types/src/blueprints/database/functions/context-remove.d.ts.map +1 -0
  26. package/dist/types/src/blueprints/database/functions/index.d.ts +57 -0
  27. package/dist/types/src/blueprints/database/functions/index.d.ts.map +1 -0
  28. package/dist/types/src/blueprints/database/functions/load.d.ts +6 -0
  29. package/dist/types/src/blueprints/database/functions/load.d.ts.map +1 -0
  30. package/dist/types/src/blueprints/database/functions/object-create.d.ts +6 -0
  31. package/dist/types/src/blueprints/database/functions/object-create.d.ts.map +1 -0
  32. package/dist/types/src/blueprints/database/functions/object-delete.d.ts +6 -0
  33. package/dist/types/src/blueprints/database/functions/object-delete.d.ts.map +1 -0
  34. package/dist/types/src/blueprints/database/functions/object-update.d.ts +9 -0
  35. package/dist/types/src/blueprints/database/functions/object-update.d.ts.map +1 -0
  36. package/dist/types/src/blueprints/database/functions/query.d.ts +9 -0
  37. package/dist/types/src/blueprints/database/functions/query.d.ts.map +1 -0
  38. package/dist/types/src/blueprints/database/functions/relation-create.d.ts +9 -0
  39. package/dist/types/src/blueprints/database/functions/relation-create.d.ts.map +1 -0
  40. package/dist/types/src/blueprints/database/functions/relation-delete.d.ts +6 -0
  41. package/dist/types/src/blueprints/database/functions/relation-delete.d.ts.map +1 -0
  42. package/dist/types/src/blueprints/database/functions/schema-add.d.ts +7 -0
  43. package/dist/types/src/blueprints/database/functions/schema-add.d.ts.map +1 -0
  44. package/dist/types/src/blueprints/database/functions/schema-list.d.ts +5 -0
  45. package/dist/types/src/blueprints/database/functions/schema-list.d.ts.map +1 -0
  46. package/dist/types/src/blueprints/database/functions/tag-add.d.ts +7 -0
  47. package/dist/types/src/blueprints/database/functions/tag-add.d.ts.map +1 -0
  48. package/dist/types/src/blueprints/database/functions/tag-remove.d.ts +7 -0
  49. package/dist/types/src/blueprints/database/functions/tag-remove.d.ts.map +1 -0
  50. package/dist/types/src/blueprints/database/index.d.ts +3 -0
  51. package/dist/types/src/blueprints/database/index.d.ts.map +1 -0
  52. package/dist/types/src/blueprints/design/blueprint.d.ts +4 -0
  53. package/dist/types/src/blueprints/design/blueprint.d.ts.map +1 -0
  54. package/dist/types/src/blueprints/design/blueprint.test.d.ts +2 -0
  55. package/dist/types/src/blueprints/design/blueprint.test.d.ts.map +1 -0
  56. package/dist/types/src/blueprints/design/index.d.ts +1 -2
  57. package/dist/types/src/blueprints/design/index.d.ts.map +1 -1
  58. package/dist/types/src/blueprints/discord/blueprint.d.ts +4 -0
  59. package/dist/types/src/blueprints/discord/blueprint.d.ts.map +1 -0
  60. package/dist/types/src/{functions/discord → blueprints/discord/functions}/fetch-messages.d.ts +1 -1
  61. package/dist/types/src/blueprints/discord/functions/fetch-messages.d.ts.map +1 -0
  62. package/dist/types/src/blueprints/discord/functions/fetch-messages.test.d.ts.map +1 -0
  63. package/dist/types/src/{functions/discord → blueprints/discord/functions}/index.d.ts +4 -4
  64. package/dist/types/src/blueprints/discord/functions/index.d.ts.map +1 -0
  65. package/dist/types/src/blueprints/discord/index.d.ts +1 -2
  66. package/dist/types/src/blueprints/discord/index.d.ts.map +1 -1
  67. package/dist/types/src/{functions/github → blueprints/github/functions}/fetch-prs.d.ts +1 -1
  68. package/dist/types/src/blueprints/github/functions/fetch-prs.d.ts.map +1 -0
  69. package/dist/types/src/blueprints/github/functions/index.d.ts +7 -0
  70. package/dist/types/src/blueprints/github/functions/index.d.ts.map +1 -0
  71. package/dist/types/src/blueprints/github/index.d.ts +1 -0
  72. package/dist/types/src/blueprints/github/index.d.ts.map +1 -0
  73. package/dist/types/src/blueprints/index.d.ts +13 -6
  74. package/dist/types/src/blueprints/index.d.ts.map +1 -1
  75. package/dist/types/src/blueprints/linear/blueprint.d.ts +4 -0
  76. package/dist/types/src/blueprints/linear/blueprint.d.ts.map +1 -0
  77. package/dist/types/src/blueprints/linear/functions/index.d.ts +9 -0
  78. package/dist/types/src/blueprints/linear/functions/index.d.ts.map +1 -0
  79. package/dist/types/src/blueprints/linear/functions/linear.test.d.ts.map +1 -0
  80. package/dist/types/src/{functions/linear → blueprints/linear/functions}/sync-issues.d.ts +2 -2
  81. package/dist/types/src/blueprints/linear/functions/sync-issues.d.ts.map +1 -0
  82. package/dist/types/src/blueprints/linear/index.d.ts +1 -2
  83. package/dist/types/src/blueprints/linear/index.d.ts.map +1 -1
  84. package/dist/types/src/blueprints/markdown/blueprint.d.ts +4 -0
  85. package/dist/types/src/blueprints/markdown/blueprint.d.ts.map +1 -0
  86. package/dist/types/src/{functions/research/create-document.d.ts → blueprints/markdown/functions/create.d.ts} +2 -3
  87. package/dist/types/src/blueprints/markdown/functions/create.d.ts.map +1 -0
  88. package/dist/types/src/blueprints/markdown/functions/index.d.ts +30 -0
  89. package/dist/types/src/blueprints/markdown/functions/index.d.ts.map +1 -0
  90. package/dist/types/src/blueprints/markdown/functions/read.d.ts +14 -0
  91. package/dist/types/src/blueprints/markdown/functions/read.d.ts.map +1 -0
  92. package/dist/types/src/blueprints/markdown/functions/update.d.ts +13 -0
  93. package/dist/types/src/blueprints/markdown/functions/update.d.ts.map +1 -0
  94. package/dist/types/src/blueprints/markdown/index.d.ts +3 -0
  95. package/dist/types/src/blueprints/markdown/index.d.ts.map +1 -0
  96. package/dist/types/src/blueprints/memory/blueprint.d.ts +4 -0
  97. package/dist/types/src/blueprints/memory/blueprint.d.ts.map +1 -0
  98. package/dist/types/src/blueprints/memory/blueprint.test.d.ts +2 -0
  99. package/dist/types/src/blueprints/memory/blueprint.test.d.ts.map +1 -0
  100. package/dist/types/src/blueprints/memory/functions/delete.d.ts +8 -0
  101. package/dist/types/src/blueprints/memory/functions/delete.d.ts.map +1 -0
  102. package/dist/types/src/blueprints/memory/functions/index.d.ts +17 -0
  103. package/dist/types/src/blueprints/memory/functions/index.d.ts.map +1 -0
  104. package/dist/types/src/blueprints/memory/functions/query.d.ts +6 -0
  105. package/dist/types/src/blueprints/memory/functions/query.d.ts.map +1 -0
  106. package/dist/types/src/{functions/document/read.d.ts → blueprints/memory/functions/save.d.ts} +3 -4
  107. package/dist/types/src/blueprints/memory/functions/save.d.ts.map +1 -0
  108. package/dist/types/src/blueprints/memory/index.d.ts +3 -0
  109. package/dist/types/src/blueprints/memory/index.d.ts.map +1 -0
  110. package/dist/types/src/blueprints/planning/blueprint.d.ts +4 -0
  111. package/dist/types/src/blueprints/planning/blueprint.d.ts.map +1 -0
  112. package/dist/types/src/blueprints/planning/functions/index.d.ts +10 -0
  113. package/dist/types/src/blueprints/planning/functions/index.d.ts.map +1 -0
  114. package/dist/types/src/blueprints/planning/functions/update-tasks.d.ts +9 -0
  115. package/dist/types/src/blueprints/planning/functions/update-tasks.d.ts.map +1 -0
  116. package/dist/types/src/blueprints/planning/index.d.ts +1 -2
  117. package/dist/types/src/blueprints/planning/index.d.ts.map +1 -1
  118. package/dist/types/src/blueprints/planning-old/blueprint.d.ts +4 -0
  119. package/dist/types/src/blueprints/planning-old/blueprint.d.ts.map +1 -0
  120. package/dist/types/src/blueprints/planning-old/blueprint.test.d.ts +2 -0
  121. package/dist/types/src/blueprints/planning-old/blueprint.test.d.ts.map +1 -0
  122. package/dist/types/src/blueprints/planning-old/functions/index.d.ts +29 -0
  123. package/dist/types/src/blueprints/planning-old/functions/index.d.ts.map +1 -0
  124. package/dist/types/src/blueprints/planning-old/functions/read.d.ts +14 -0
  125. package/dist/types/src/blueprints/planning-old/functions/read.d.ts.map +1 -0
  126. package/dist/types/src/blueprints/planning-old/functions/task-list.d.ts.map +1 -0
  127. package/dist/types/src/blueprints/planning-old/functions/task-list.test.d.ts.map +1 -0
  128. package/dist/types/src/blueprints/planning-old/functions/update.d.ts +16 -0
  129. package/dist/types/src/blueprints/planning-old/functions/update.d.ts.map +1 -0
  130. package/dist/types/src/blueprints/planning-old/index.d.ts +2 -0
  131. package/dist/types/src/blueprints/planning-old/index.d.ts.map +1 -0
  132. package/dist/types/src/blueprints/project/blueprint.d.ts +4 -0
  133. package/dist/types/src/blueprints/project/blueprint.d.ts.map +1 -0
  134. package/dist/types/src/blueprints/project/blueprint.test.d.ts +2 -0
  135. package/dist/types/src/blueprints/project/blueprint.test.d.ts.map +1 -0
  136. package/dist/types/src/blueprints/project/functions/add-artifact.d.ts +7 -0
  137. package/dist/types/src/blueprints/project/functions/add-artifact.d.ts.map +1 -0
  138. package/dist/types/src/blueprints/project/functions/agent.d.ts +62 -0
  139. package/dist/types/src/blueprints/project/functions/agent.d.ts.map +1 -0
  140. package/dist/types/src/blueprints/project/functions/get-context.d.ts +13 -0
  141. package/dist/types/src/blueprints/project/functions/get-context.d.ts.map +1 -0
  142. package/dist/types/src/blueprints/project/functions/index.d.ts +133 -0
  143. package/dist/types/src/blueprints/project/functions/index.d.ts.map +1 -0
  144. package/dist/types/src/blueprints/project/functions/qualifier.d.ts +60 -0
  145. package/dist/types/src/blueprints/project/functions/qualifier.d.ts.map +1 -0
  146. package/dist/types/src/blueprints/project/index.d.ts +4 -0
  147. package/dist/types/src/blueprints/project/index.d.ts.map +1 -0
  148. package/dist/types/src/blueprints/project/sync-triggers.d.ts +11 -0
  149. package/dist/types/src/blueprints/project/sync-triggers.d.ts.map +1 -0
  150. package/dist/types/src/blueprints/project-wizard/blueprint.d.ts +4 -0
  151. package/dist/types/src/blueprints/project-wizard/blueprint.d.ts.map +1 -0
  152. package/dist/types/src/blueprints/project-wizard/functions/create-project.d.ts +10 -0
  153. package/dist/types/src/blueprints/project-wizard/functions/create-project.d.ts.map +1 -0
  154. package/dist/types/src/blueprints/project-wizard/functions/index.d.ts +31 -0
  155. package/dist/types/src/blueprints/project-wizard/functions/index.d.ts.map +1 -0
  156. package/dist/types/src/blueprints/project-wizard/functions/project-rules.d.ts +3 -0
  157. package/dist/types/src/blueprints/project-wizard/functions/project-rules.d.ts.map +1 -0
  158. package/dist/types/src/blueprints/project-wizard/functions/query-blueprints.d.ts +23 -0
  159. package/dist/types/src/blueprints/project-wizard/functions/query-blueprints.d.ts.map +1 -0
  160. package/dist/types/src/blueprints/project-wizard/index.d.ts +3 -0
  161. package/dist/types/src/blueprints/project-wizard/index.d.ts.map +1 -0
  162. package/dist/types/src/blueprints/research/blueprint.d.ts +4 -0
  163. package/dist/types/src/blueprints/research/blueprint.d.ts.map +1 -0
  164. package/dist/types/src/blueprints/research/blueprint.test.d.ts +2 -0
  165. package/dist/types/src/blueprints/research/blueprint.test.d.ts.map +1 -0
  166. package/dist/types/src/blueprints/research/functions/document-create.d.ts +10 -0
  167. package/dist/types/src/blueprints/research/functions/document-create.d.ts.map +1 -0
  168. package/dist/types/src/blueprints/research/functions/index.d.ts +19 -0
  169. package/dist/types/src/blueprints/research/functions/index.d.ts.map +1 -0
  170. package/dist/types/src/{functions/research → blueprints/research/functions}/research.d.ts +4 -3
  171. package/dist/types/src/blueprints/research/functions/research.d.ts.map +1 -0
  172. package/dist/types/src/blueprints/research/functions/research.test.d.ts.map +1 -0
  173. package/dist/types/src/blueprints/research/index.d.ts +2 -2
  174. package/dist/types/src/blueprints/research/index.d.ts.map +1 -1
  175. package/dist/types/src/blueprints/research/types/ResearchGraph.d.ts +18 -0
  176. package/dist/types/src/blueprints/research/types/ResearchGraph.d.ts.map +1 -0
  177. package/dist/types/src/blueprints/research/types/index.d.ts +7 -0
  178. package/dist/types/src/blueprints/research/types/index.d.ts.map +1 -0
  179. package/dist/types/src/blueprints/testing.d.ts +18 -4
  180. package/dist/types/src/blueprints/testing.d.ts.map +1 -1
  181. package/dist/types/src/blueprints/websearch/blueprint.d.ts +4 -0
  182. package/dist/types/src/blueprints/websearch/blueprint.d.ts.map +1 -0
  183. package/dist/types/src/blueprints/websearch/functions/fetch.d.ts +5 -0
  184. package/dist/types/src/blueprints/websearch/functions/fetch.d.ts.map +1 -0
  185. package/dist/types/src/blueprints/websearch/functions/index.d.ts +6 -0
  186. package/dist/types/src/blueprints/websearch/functions/index.d.ts.map +1 -0
  187. package/dist/types/src/blueprints/websearch/index.d.ts +3 -3
  188. package/dist/types/src/blueprints/websearch/index.d.ts.map +1 -1
  189. package/dist/types/src/blueprints/websearch/{websearch-toolkit.d.ts → toolkit.d.ts} +2 -1
  190. package/dist/types/src/blueprints/websearch/toolkit.d.ts.map +1 -0
  191. package/dist/types/src/{functions/research → crud}/graph.d.ts +14 -11
  192. package/dist/types/src/crud/graph.d.ts.map +1 -0
  193. package/dist/types/src/crud/graph.test.d.ts.map +1 -0
  194. package/dist/types/src/crud/index.d.ts +2 -0
  195. package/dist/types/src/crud/index.d.ts.map +1 -0
  196. package/dist/types/src/functions/agent/index.d.ts +84 -4
  197. package/dist/types/src/functions/agent/index.d.ts.map +1 -1
  198. package/dist/types/src/functions/agent/prompt.d.ts +81 -8
  199. package/dist/types/src/functions/agent/prompt.d.ts.map +1 -1
  200. package/dist/types/src/functions/entity-extraction/entity-extraction.d.ts +142 -136
  201. package/dist/types/src/functions/entity-extraction/entity-extraction.d.ts.map +1 -1
  202. package/dist/types/src/functions/entity-extraction/index.d.ts +144 -139
  203. package/dist/types/src/functions/entity-extraction/index.d.ts.map +1 -1
  204. package/dist/types/src/functions/exa/data/exa-search-1748337321991.d.ts.map +1 -0
  205. package/dist/types/src/functions/exa/data/exa-search-1748337331526.d.ts.map +1 -0
  206. package/dist/types/src/functions/exa/data/exa-search-1748337344119.d.ts.map +1 -0
  207. package/dist/types/src/functions/exa/data/index.d.ts.map +1 -0
  208. package/dist/types/src/functions/exa/exa.d.ts +1 -1
  209. package/dist/types/src/functions/exa/index.d.ts +8 -2
  210. package/dist/types/src/functions/exa/index.d.ts.map +1 -1
  211. package/dist/types/src/functions/exa/mock.d.ts +1 -1
  212. package/dist/types/src/functions/index.d.ts +1 -5
  213. package/dist/types/src/functions/index.d.ts.map +1 -1
  214. package/dist/types/src/index.d.ts +3 -1
  215. package/dist/types/src/index.d.ts.map +1 -1
  216. package/dist/types/src/sync/sync.d.ts +3 -3
  217. package/dist/types/src/sync/sync.d.ts.map +1 -1
  218. package/dist/types/src/testing/index.d.ts +2 -1
  219. package/dist/types/src/testing/index.d.ts.map +1 -1
  220. package/dist/types/src/testing/plugins.d.ts +19 -0
  221. package/dist/types/src/testing/plugins.d.ts.map +1 -0
  222. package/dist/types/src/toolkits/WebToolkit.d.ts +38 -0
  223. package/dist/types/src/toolkits/WebToolkit.d.ts.map +1 -0
  224. package/dist/types/src/toolkits/index.d.ts +2 -0
  225. package/dist/types/src/toolkits/index.d.ts.map +1 -0
  226. package/dist/types/src/types/Chat.d.ts +31 -0
  227. package/dist/types/src/types/Chat.d.ts.map +1 -0
  228. package/dist/types/src/types/Memory.d.ts +12 -0
  229. package/dist/types/src/types/Memory.d.ts.map +1 -0
  230. package/dist/types/src/types/Plan.d.ts +77 -0
  231. package/dist/types/src/types/Plan.d.ts.map +1 -0
  232. package/dist/types/src/types/Project.d.ts +66 -0
  233. package/dist/types/src/types/Project.d.ts.map +1 -0
  234. package/dist/types/src/types/index.d.ts +5 -0
  235. package/dist/types/src/types/index.d.ts.map +1 -0
  236. package/dist/types/tsconfig.tsbuildinfo +1 -1
  237. package/package.json +49 -38
  238. package/src/blueprints/automation/blueprint.ts +109 -0
  239. package/src/blueprints/automation/index.ts +5 -0
  240. package/src/blueprints/browser/blueprint.conversations.json +1 -0
  241. package/src/blueprints/browser/blueprint.test.ts +70 -0
  242. package/src/blueprints/browser/blueprint.ts +41 -0
  243. package/src/blueprints/browser/index.ts +5 -0
  244. package/src/blueprints/database/blueprint.conversations.json +1 -0
  245. package/src/blueprints/database/blueprint.test.ts +341 -0
  246. package/src/blueprints/database/blueprint.ts +39 -0
  247. package/src/blueprints/database/functions/context-add.ts +35 -0
  248. package/src/blueprints/database/functions/context-remove.ts +35 -0
  249. package/src/blueprints/database/functions/index.ts +33 -0
  250. package/src/blueprints/database/functions/load.ts +31 -0
  251. package/src/blueprints/database/functions/object-create.ts +48 -0
  252. package/src/blueprints/database/functions/object-delete.ts +27 -0
  253. package/src/blueprints/database/functions/object-update.ts +40 -0
  254. package/src/blueprints/database/functions/query.ts +130 -0
  255. package/src/blueprints/database/functions/relation-create.ts +47 -0
  256. package/src/blueprints/database/functions/relation-delete.ts +28 -0
  257. package/src/blueprints/database/functions/schema-add.ts +40 -0
  258. package/src/blueprints/database/functions/schema-list.ts +34 -0
  259. package/src/blueprints/database/functions/tag-add.ts +31 -0
  260. package/src/blueprints/database/functions/tag-remove.ts +30 -0
  261. package/src/blueprints/database/index.ts +6 -0
  262. package/src/blueprints/design/{design-blueprint.test.ts → blueprint.test.ts} +25 -37
  263. package/src/blueprints/design/blueprint.ts +46 -0
  264. package/src/blueprints/design/index.ts +1 -3
  265. package/src/blueprints/discord/blueprint.ts +46 -0
  266. package/src/{functions/discord → blueprints/discord/functions}/fetch-messages.test.ts +10 -14
  267. package/src/{functions/discord → blueprints/discord/functions}/fetch-messages.ts +12 -11
  268. package/src/blueprints/discord/functions/index.ts +9 -0
  269. package/src/blueprints/discord/index.ts +1 -3
  270. package/src/{functions/github → blueprints/github/functions}/fetch-prs.ts +4 -3
  271. package/src/blueprints/github/functions/index.ts +9 -0
  272. package/src/blueprints/github/index.ts +3 -0
  273. package/src/blueprints/index.ts +13 -6
  274. package/src/blueprints/linear/blueprint.ts +47 -0
  275. package/src/blueprints/linear/functions/index.ts +9 -0
  276. package/src/blueprints/linear/functions/linear.test.ts +58 -0
  277. package/src/{functions/linear → blueprints/linear/functions}/sync-issues.ts +18 -16
  278. package/src/blueprints/linear/index.ts +1 -3
  279. package/src/blueprints/markdown/blueprint.ts +38 -0
  280. package/src/blueprints/markdown/functions/create.ts +29 -0
  281. package/src/blueprints/markdown/functions/index.ts +13 -0
  282. package/src/blueprints/markdown/functions/read.ts +32 -0
  283. package/src/{functions/document → blueprints/markdown/functions}/update.ts +10 -8
  284. package/src/blueprints/markdown/index.ts +6 -0
  285. package/src/blueprints/memory/blueprint.conversations.json +1 -0
  286. package/src/blueprints/memory/blueprint.test.ts +135 -0
  287. package/src/blueprints/memory/blueprint.ts +44 -0
  288. package/src/blueprints/memory/functions/delete.ts +25 -0
  289. package/src/blueprints/memory/functions/index.ts +13 -0
  290. package/src/blueprints/memory/functions/query.ts +49 -0
  291. package/src/blueprints/memory/functions/save.ts +32 -0
  292. package/src/blueprints/memory/index.ts +6 -0
  293. package/src/blueprints/planning/blueprint.ts +28 -0
  294. package/src/blueprints/planning/functions/index.ts +9 -0
  295. package/src/blueprints/planning/functions/update-tasks.ts +168 -0
  296. package/src/blueprints/planning/index.ts +2 -4
  297. package/src/blueprints/{planning/planning-blueprint.test.ts → planning-old/blueprint.test.ts} +25 -32
  298. package/src/blueprints/{planning/planning-blueprint.ts → planning-old/blueprint.ts} +24 -12
  299. package/src/blueprints/planning-old/functions/index.ts +11 -0
  300. package/src/{functions/tasks → blueprints/planning-old/functions}/read.ts +7 -7
  301. package/src/{functions/tasks → blueprints/planning-old/functions}/update.ts +7 -7
  302. package/src/blueprints/planning-old/index.ts +5 -0
  303. package/src/blueprints/project/blueprint.test.ts +579 -0
  304. package/src/blueprints/project/blueprint.ts +68 -0
  305. package/src/blueprints/project/functions/add-artifact.ts +41 -0
  306. package/src/blueprints/project/functions/agent.ts +72 -0
  307. package/src/blueprints/project/functions/get-context.ts +63 -0
  308. package/src/blueprints/project/functions/index.ts +15 -0
  309. package/src/blueprints/project/functions/qualifier.ts +96 -0
  310. package/src/blueprints/project/index.ts +7 -0
  311. package/src/blueprints/project/sync-triggers.ts +153 -0
  312. package/src/blueprints/project-wizard/blueprint.ts +45 -0
  313. package/src/blueprints/project-wizard/functions/create-project.ts +57 -0
  314. package/src/blueprints/project-wizard/functions/index.ts +13 -0
  315. package/src/blueprints/project-wizard/functions/project-rules.ts +78 -0
  316. package/src/blueprints/project-wizard/functions/query-blueprints.ts +27 -0
  317. package/src/blueprints/project-wizard/index.ts +6 -0
  318. package/src/blueprints/research/blueprint.ts +65 -0
  319. package/src/blueprints/research/functions/document-create.ts +73 -0
  320. package/src/blueprints/research/functions/index.ts +11 -0
  321. package/src/{functions/research/instructions-research.tpl → blueprints/research/functions/research-instructions.tpl} +19 -11
  322. package/src/blueprints/research/functions/research.conversations.json +1 -0
  323. package/src/blueprints/research/functions/research.test.ts +149 -0
  324. package/src/blueprints/research/functions/research.ts +175 -0
  325. package/src/blueprints/research/index.ts +2 -3
  326. package/src/blueprints/research/types/ResearchGraph.ts +49 -0
  327. package/src/blueprints/research/types/index.ts +32 -0
  328. package/src/blueprints/testing.ts +36 -5
  329. package/src/blueprints/websearch/blueprint.ts +32 -0
  330. package/src/blueprints/websearch/functions/fetch.ts +28 -0
  331. package/src/blueprints/websearch/functions/index.ts +9 -0
  332. package/src/blueprints/websearch/index.ts +3 -4
  333. package/src/crud/graph.test.ts +46 -0
  334. package/src/{functions/research → crud}/graph.ts +32 -40
  335. package/src/crud/index.ts +5 -0
  336. package/src/functions/READ_THIS.md +5 -0
  337. package/src/functions/agent/index.ts +4 -6
  338. package/src/functions/agent/prompt.ts +33 -26
  339. package/src/functions/entity-extraction/entity-extraction.conversations.json +1 -1
  340. package/src/functions/entity-extraction/entity-extraction.test.ts +17 -43
  341. package/src/functions/entity-extraction/entity-extraction.ts +55 -37
  342. package/src/functions/entity-extraction/index.ts +4 -4
  343. package/src/functions/exa/exa.ts +2 -2
  344. package/src/functions/exa/index.ts +7 -2
  345. package/src/functions/exa/mock.ts +2 -2
  346. package/src/functions/index.ts +1 -5
  347. package/src/index.ts +3 -1
  348. package/src/sync/sync.ts +38 -30
  349. package/src/testing/index.ts +2 -1
  350. package/src/testing/plugins.tsx +72 -0
  351. package/src/toolkits/WebToolkit.ts +33 -0
  352. package/src/toolkits/index.ts +5 -0
  353. package/src/types/Chat.ts +51 -0
  354. package/src/types/Memory.ts +23 -0
  355. package/src/types/Plan.ts +110 -0
  356. package/src/types/Project.ts +197 -0
  357. package/src/types/index.ts +8 -0
  358. package/dist/lib/browser/index.mjs.map +0 -7
  359. package/dist/lib/browser/meta.json +0 -1
  360. package/dist/lib/node-esm/index.mjs +0 -2483
  361. package/dist/lib/node-esm/index.mjs.map +0 -7
  362. package/dist/lib/node-esm/meta.json +0 -1
  363. package/dist/types/src/blueprints/design/design-blueprint.d.ts +0 -4
  364. package/dist/types/src/blueprints/design/design-blueprint.d.ts.map +0 -1
  365. package/dist/types/src/blueprints/design/design-blueprint.test.d.ts +0 -2
  366. package/dist/types/src/blueprints/design/design-blueprint.test.d.ts.map +0 -1
  367. package/dist/types/src/blueprints/discord/discord-blueprint.d.ts +0 -18
  368. package/dist/types/src/blueprints/discord/discord-blueprint.d.ts.map +0 -1
  369. package/dist/types/src/blueprints/linear/linear-blueprint.d.ts +0 -18
  370. package/dist/types/src/blueprints/linear/linear-blueprint.d.ts.map +0 -1
  371. package/dist/types/src/blueprints/planning/planning-blueprint.d.ts +0 -4
  372. package/dist/types/src/blueprints/planning/planning-blueprint.d.ts.map +0 -1
  373. package/dist/types/src/blueprints/planning/planning-blueprint.test.d.ts +0 -2
  374. package/dist/types/src/blueprints/planning/planning-blueprint.test.d.ts.map +0 -1
  375. package/dist/types/src/blueprints/research/research-blueprint.d.ts +0 -4
  376. package/dist/types/src/blueprints/research/research-blueprint.d.ts.map +0 -1
  377. package/dist/types/src/blueprints/research/research-blueprint.test.d.ts +0 -2
  378. package/dist/types/src/blueprints/research/research-blueprint.test.d.ts.map +0 -1
  379. package/dist/types/src/blueprints/websearch/websearch-blueprint.d.ts +0 -4
  380. package/dist/types/src/blueprints/websearch/websearch-blueprint.d.ts.map +0 -1
  381. package/dist/types/src/blueprints/websearch/websearch-toolkit.d.ts.map +0 -1
  382. package/dist/types/src/experimental/feed.test.d.ts +0 -2
  383. package/dist/types/src/experimental/feed.test.d.ts.map +0 -1
  384. package/dist/types/src/functions/discord/fetch-messages.d.ts.map +0 -1
  385. package/dist/types/src/functions/discord/fetch-messages.test.d.ts.map +0 -1
  386. package/dist/types/src/functions/discord/index.d.ts.map +0 -1
  387. package/dist/types/src/functions/document/index.d.ts +0 -12
  388. package/dist/types/src/functions/document/index.d.ts.map +0 -1
  389. package/dist/types/src/functions/document/read.d.ts.map +0 -1
  390. package/dist/types/src/functions/document/update.d.ts +0 -6
  391. package/dist/types/src/functions/document/update.d.ts.map +0 -1
  392. package/dist/types/src/functions/github/fetch-prs.d.ts.map +0 -1
  393. package/dist/types/src/functions/linear/index.d.ts +0 -9
  394. package/dist/types/src/functions/linear/index.d.ts.map +0 -1
  395. package/dist/types/src/functions/linear/linear.test.d.ts.map +0 -1
  396. package/dist/types/src/functions/linear/sync-issues.d.ts.map +0 -1
  397. package/dist/types/src/functions/research/create-document.d.ts.map +0 -1
  398. package/dist/types/src/functions/research/graph.d.ts.map +0 -1
  399. package/dist/types/src/functions/research/graph.test.d.ts.map +0 -1
  400. package/dist/types/src/functions/research/index.d.ts +0 -19
  401. package/dist/types/src/functions/research/index.d.ts.map +0 -1
  402. package/dist/types/src/functions/research/research-graph.d.ts +0 -18
  403. package/dist/types/src/functions/research/research-graph.d.ts.map +0 -1
  404. package/dist/types/src/functions/research/research.d.ts.map +0 -1
  405. package/dist/types/src/functions/research/research.test.d.ts.map +0 -1
  406. package/dist/types/src/functions/research/types.d.ts +0 -384
  407. package/dist/types/src/functions/research/types.d.ts.map +0 -1
  408. package/dist/types/src/functions/tasks/index.d.ts +0 -15
  409. package/dist/types/src/functions/tasks/index.d.ts.map +0 -1
  410. package/dist/types/src/functions/tasks/read.d.ts +0 -7
  411. package/dist/types/src/functions/tasks/read.d.ts.map +0 -1
  412. package/dist/types/src/functions/tasks/task-list.d.ts.map +0 -1
  413. package/dist/types/src/functions/tasks/task-list.test.d.ts.map +0 -1
  414. package/dist/types/src/functions/tasks/update.d.ts +0 -9
  415. package/dist/types/src/functions/tasks/update.d.ts.map +0 -1
  416. package/dist/types/src/plugins.d.ts +0 -19
  417. package/dist/types/src/plugins.d.ts.map +0 -1
  418. package/dist/types/src/testing/data/exa-search-1748337321991.d.ts.map +0 -1
  419. package/dist/types/src/testing/data/exa-search-1748337331526.d.ts.map +0 -1
  420. package/dist/types/src/testing/data/exa-search-1748337344119.d.ts.map +0 -1
  421. package/dist/types/src/testing/data/index.d.ts.map +0 -1
  422. package/src/blueprints/design/design-blueprint.ts +0 -33
  423. package/src/blueprints/discord/discord-blueprint.ts +0 -34
  424. package/src/blueprints/linear/linear-blueprint.ts +0 -35
  425. package/src/blueprints/research/research-blueprint.ts +0 -45
  426. package/src/blueprints/websearch/websearch-blueprint.ts +0 -20
  427. package/src/experimental/feed.test.ts +0 -108
  428. package/src/functions/discord/index.ts +0 -9
  429. package/src/functions/document/index.ts +0 -11
  430. package/src/functions/document/read.ts +0 -29
  431. package/src/functions/linear/index.ts +0 -9
  432. package/src/functions/linear/linear.test.ts +0 -86
  433. package/src/functions/research/create-document.ts +0 -69
  434. package/src/functions/research/graph.test.ts +0 -69
  435. package/src/functions/research/index.ts +0 -15
  436. package/src/functions/research/research-graph.ts +0 -47
  437. package/src/functions/research/research.conversations.json +0 -10714
  438. package/src/functions/research/research.test.ts +0 -240
  439. package/src/functions/research/research.ts +0 -155
  440. package/src/functions/research/types.ts +0 -24
  441. package/src/functions/tasks/index.ts +0 -11
  442. package/src/plugins.tsx +0 -68
  443. /package/dist/types/src/{functions/discord → blueprints/discord/functions}/fetch-messages.test.d.ts +0 -0
  444. /package/dist/types/src/{functions/linear → blueprints/linear/functions}/linear.test.d.ts +0 -0
  445. /package/dist/types/src/{functions/tasks → blueprints/planning-old/functions}/task-list.d.ts +0 -0
  446. /package/dist/types/src/{functions/tasks → blueprints/planning-old/functions}/task-list.test.d.ts +0 -0
  447. /package/dist/types/src/{functions/research → blueprints/research/functions}/research.test.d.ts +0 -0
  448. /package/dist/types/src/{functions/research → crud}/graph.test.d.ts +0 -0
  449. /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337321991.d.ts +0 -0
  450. /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337331526.d.ts +0 -0
  451. /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337344119.d.ts +0 -0
  452. /package/dist/types/src/{testing → functions/exa}/data/index.d.ts +0 -0
  453. /package/src/{functions/tasks → blueprints/planning-old/functions}/task-list.test.ts +0 -0
  454. /package/src/{functions/tasks → blueprints/planning-old/functions}/task-list.ts +0 -0
  455. /package/src/blueprints/research/{research-blueprint.test.ts → blueprint.test.ts} +0 -0
  456. /package/src/blueprints/websearch/{websearch-toolkit.ts → toolkit.ts} +0 -0
  457. /package/src/{testing → functions/exa}/data/exa-search-1748337321991.ts +0 -0
  458. /package/src/{testing → functions/exa}/data/exa-search-1748337331526.ts +0 -0
  459. /package/src/{testing → functions/exa}/data/exa-search-1748337344119.ts +0 -0
  460. /package/src/{testing → functions/exa}/data/index.ts +0 -0
@@ -0,0 +1,72 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Schema from 'effect/Schema';
7
+
8
+ import { AiService } from '@dxos/ai';
9
+ import { AiContextService, AiConversation, type ContextBinding } from '@dxos/assistant';
10
+ import { Database, Obj, Ref } from '@dxos/echo';
11
+ import { type Queue } from '@dxos/echo-db';
12
+ import { acquireReleaseResource } from '@dxos/effect';
13
+ import { TriggerEvent, defineFunction } from '@dxos/functions';
14
+ import { invariant } from '@dxos/invariant';
15
+ import { type Message } from '@dxos/types';
16
+
17
+ import { Project } from '../../../types';
18
+
19
+ export default defineFunction({
20
+ key: 'org.dxos.function.project.agent',
21
+ name: 'Project Agent',
22
+ description: 'Agentic worker that drives the project autonomously.',
23
+ inputSchema: Schema.Struct({
24
+ project: Schema.suspend(() => Ref.Ref(Project.Project)),
25
+ prompt: Schema.optional(Schema.String),
26
+ event: Schema.optional(TriggerEvent.TriggerEvent),
27
+ }),
28
+ outputSchema: Schema.Void,
29
+ services: [AiContextService],
30
+ handler: Effect.fnUntraced(
31
+ function* ({ data }) {
32
+ const project = yield* Database.load(data.project);
33
+ invariant(Obj.instanceOf(Project.Project, project));
34
+ invariant(project.chat, 'Project has no chat.');
35
+
36
+ const chatQueue = yield* project.chat.pipe(
37
+ Database.load,
38
+ Effect.flatMap((chat) => Database.load(chat.queue)),
39
+ );
40
+ invariant(chatQueue, 'Project chat queue not found.');
41
+ const conversation = yield* acquireReleaseResource(
42
+ () => new AiConversation({ queue: chatQueue as Queue<Message.Message | ContextBinding> }),
43
+ );
44
+
45
+ const iniativesInContext = conversation.context.getObjects().filter(Obj.instanceOf(Project.Project));
46
+ if (iniativesInContext.length !== 1) {
47
+ throw new Error('There should be exactly one project in context. Got: ' + iniativesInContext.length);
48
+ }
49
+
50
+ if (!data.prompt && !data.event) {
51
+ throw new Error('Either prompt or event must be provided.');
52
+ }
53
+
54
+ let input = '';
55
+ if (data.prompt) {
56
+ input += `${data.prompt}\n\n`;
57
+ }
58
+ if (data.event) {
59
+ input += `<event>\n${JSON.stringify(data.event, null, 2)}\n</event>\n\n`;
60
+ }
61
+
62
+ yield* conversation
63
+ .createRequest({
64
+ prompt: input,
65
+ })
66
+ .pipe(Effect.retry({ times: 2 }));
67
+ },
68
+ Effect.scoped,
69
+ Effect.provide(AiService.model('@anthropic/claude-sonnet-4-5')),
70
+ AiContextService.fixFunctionHandlerType,
71
+ ) as any,
72
+ });
@@ -0,0 +1,63 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Schema from 'effect/Schema';
7
+
8
+ import { AiContextService } from '@dxos/assistant';
9
+ import { Database, Obj } from '@dxos/echo';
10
+ import { defineFunction } from '@dxos/functions';
11
+
12
+ import { Plan, Project } from '../../../types';
13
+
14
+ export default defineFunction({
15
+ key: 'org.dxos.function.project.get-context',
16
+ name: 'Get Project Context',
17
+ description: 'Get the context of an project.',
18
+ inputSchema: Schema.Struct({}),
19
+ outputSchema: Schema.Struct({
20
+ id: Schema.String,
21
+ name: Schema.String,
22
+ spec: Schema.String,
23
+ plan: Schema.String,
24
+ artifacts: Schema.Array(
25
+ Schema.Struct({
26
+ name: Schema.String,
27
+ type: Schema.optional(Schema.String),
28
+ dxn: Schema.optional(Schema.String),
29
+ }),
30
+ ),
31
+ }),
32
+ services: [AiContextService],
33
+ handler: Effect.fnUntraced(function* ({ data: _data }) {
34
+ const project = yield* Project.getFromChatContext;
35
+
36
+ return {
37
+ id: project.id,
38
+ name: project.name,
39
+ spec: yield* project.spec.pipe(Database.load).pipe(
40
+ Effect.map((_) => _.content),
41
+ Effect.catchTag('ObjectNotFoundError', () => Effect.succeed('No spec found.')),
42
+ ),
43
+ plan: yield* (
44
+ project.plan?.pipe(Database.load).pipe(
45
+ Effect.map(Plan.formatPlan),
46
+ Effect.catchTag('ObjectNotFoundError', () => Effect.succeed('No plan found.')),
47
+ ) ?? Effect.succeed('No plan found.')
48
+ ),
49
+ artifacts: yield* Effect.forEach(project.artifacts, (artifact) =>
50
+ Effect.gen(function* () {
51
+ return {
52
+ name: artifact.name,
53
+ type: yield* Database.load(artifact.data).pipe(
54
+ Effect.map(Obj.getTypename),
55
+ Effect.catchTag('ObjectNotFoundError', () => Effect.succeed('Artifact not found.')),
56
+ ),
57
+ dxn: artifact.data.dxn.toString(),
58
+ };
59
+ }),
60
+ ),
61
+ };
62
+ }, AiContextService.fixFunctionHandlerType),
63
+ });
@@ -0,0 +1,15 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { default as AddArtifact } from './add-artifact';
6
+ import { default as Agent } from './agent';
7
+ import { default as GetContext } from './get-context';
8
+ import { default as Qualifier } from './qualifier';
9
+
10
+ export const ProjectFunctions = {
11
+ AddArtifact,
12
+ Agent,
13
+ GetContext,
14
+ Qualifier,
15
+ };
@@ -0,0 +1,96 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as LanguageModel from '@effect/ai/LanguageModel';
6
+ import * as Prompt from '@effect/ai/Prompt';
7
+ import * as Effect from 'effect/Effect';
8
+ import * as Schema from 'effect/Schema';
9
+
10
+ import { AiService } from '@dxos/ai';
11
+ import { Database, Obj, Ref } from '@dxos/echo';
12
+ import { TriggerEvent, defineFunction } from '@dxos/functions';
13
+ import { invariant } from '@dxos/invariant';
14
+ import { trim } from '@dxos/util';
15
+
16
+ import { Plan, Project } from '../../../types';
17
+
18
+ export default defineFunction({
19
+ key: 'org.dxos.function.project.qualifier',
20
+ name: 'Project Qualifier',
21
+ description:
22
+ 'Qualifier that determines if the event is relevant to the project. Puts the data into the input queue of the project.',
23
+ inputSchema: Schema.Struct({
24
+ project: Schema.suspend(() => Ref.Ref(Project.Project)),
25
+ event: TriggerEvent.TriggerEvent,
26
+ }),
27
+ outputSchema: Schema.Void,
28
+ services: [],
29
+ handler: Effect.fnUntraced(
30
+ function* ({ data }) {
31
+ const project = yield* Database.load(data.project);
32
+ invariant(Obj.instanceOf(Project.Project, project));
33
+ invariant(project.chat, 'Project has no chat.');
34
+
35
+ const { id, name, queue } = project;
36
+ if (!queue) {
37
+ throw new Error('Project has no queue.');
38
+ }
39
+
40
+ const plan = yield* Database.load(project.plan);
41
+ const spec = yield* Database.load(project.spec);
42
+
43
+ const {
44
+ value: { isRelevant },
45
+ } = yield* LanguageModel.generateObject({
46
+ schema: Schema.Struct({
47
+ isRelevant: Schema.Boolean,
48
+ }),
49
+ prompt: Prompt.fromMessages([
50
+ Prompt.systemMessage({
51
+ content: trim`
52
+ You are a qualifying agent that determines if the event is relevant to the project.
53
+ Respond with true if the event is relevant to the project, false otherwise.
54
+ If you are not sure, return true.
55
+ The qualified events will be forwarded to the larger agent that will process them.
56
+ <project id="${id}" name="${name}">
57
+ <spec>
58
+ ${spec.content}
59
+ </spec>
60
+ <plan>
61
+ ${Plan.formatPlan(plan)}
62
+ </plan>
63
+ </project>
64
+ `,
65
+ }),
66
+ Prompt.userMessage({
67
+ content: [
68
+ Prompt.makePart('text', {
69
+ text: trim`
70
+ <event>
71
+ ${JSON.stringify(data.event, null, 2)}
72
+ </event>
73
+ `,
74
+ }),
75
+ ],
76
+ }),
77
+ ]),
78
+ });
79
+
80
+ if (isRelevant) {
81
+ const queueTarget = yield* Database.load(queue);
82
+ if ('queue' in data.event && data.event.item) {
83
+ const obj = data.event.item;
84
+ yield* Effect.promise(() => queueTarget.append([obj]));
85
+ } else if ('subject' in data.event && Ref.isRef(data.event.subject)) {
86
+ const obj = yield* Database.load(data.event.subject);
87
+ yield* Effect.promise(() => queueTarget.append([obj]));
88
+ } else {
89
+ throw new Error('Invalid event.');
90
+ }
91
+ }
92
+ },
93
+ Effect.scoped,
94
+ Effect.provide(AiService.model('@anthropic/claude-sonnet-4-5')),
95
+ ),
96
+ });
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { default as ProjectBlueprint } from './blueprint';
6
+ export { ProjectFunctions } from './functions';
7
+ export { syncProjectTriggers } from './sync-triggers';
@@ -0,0 +1,153 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Option from 'effect/Option';
7
+
8
+ import { Database, Feed, Filter, Obj, Ref } from '@dxos/echo';
9
+ import { FunctionDefinition, Trigger } from '@dxos/functions';
10
+ import { FeedAnnotation } from '@dxos/schema';
11
+
12
+ import { Project } from '../../types';
13
+
14
+ import { ProjectFunctions } from './functions';
15
+
16
+ /**
17
+ * Foreign key {@link PROJECT_TRIGGER_EXTENSION_KEY} => <project id : ObjectId>.
18
+ */
19
+ const PROJECT_TRIGGER_EXTENSION_KEY = 'org.dxos.extension.ProjectTrigger';
20
+
21
+ /**
22
+ * Foreign key {@link PROJECT_TRIGGER_TARGET_EXTENSION_KEY} => <dxn string of subscription target>.
23
+ */
24
+ const PROJECT_TRIGGER_TARGET_EXTENSION_KEY = 'org.dxos.extension.ProjectTriggerTarget';
25
+
26
+ /** Checks if an object's schema has the FeedAnnotation. */
27
+ const hasFeedAnnotation = (obj: Obj.Unknown): boolean => {
28
+ const schema = Obj.getSchema(obj);
29
+ if (!schema) {
30
+ return false;
31
+ }
32
+ const annotation = FeedAnnotation.get(schema);
33
+ return Option.isSome(annotation) && annotation.value === true;
34
+ };
35
+
36
+ /**
37
+ * Syncs triggers in the database with the project subscriptions.
38
+ *
39
+ * @param project - The project whose triggers should be synced.
40
+ * @returns An Effect that syncs triggers.
41
+ */
42
+ export const syncProjectTriggers = (project: Project.Project): Effect.Effect<void, never, Database.Service> =>
43
+ Effect.gen(function* () {
44
+ const triggers = yield* Database.runQuery(
45
+ Filter.foreignKeys(Trigger.Trigger, [{ source: PROJECT_TRIGGER_EXTENSION_KEY, id: project.id }]),
46
+ );
47
+
48
+ for (const trigger of triggers) {
49
+ const target = Obj.getKeys(trigger, PROJECT_TRIGGER_TARGET_EXTENSION_KEY).at(0)?.id;
50
+
51
+ const exists = project.subscriptions.find((subscription) => subscription.dxn.toString() === target);
52
+ if (!exists && !(project.useQualifyingAgent && target === Obj.getDXN(project)?.toString())) {
53
+ yield* Database.remove(trigger);
54
+ }
55
+ }
56
+
57
+ for (const subscription of project.subscriptions) {
58
+ const relevantTrigger = triggers.find((trigger) =>
59
+ Obj.getKeys(trigger, PROJECT_TRIGGER_TARGET_EXTENSION_KEY).some(
60
+ (key) => key.id === subscription.dxn.toString(),
61
+ ),
62
+ );
63
+ if (relevantTrigger) {
64
+ continue;
65
+ }
66
+
67
+ const targetOption = yield* Database.loadOption(subscription);
68
+ if (Option.isNone(targetOption)) {
69
+ continue;
70
+ }
71
+ const target = targetOption.value;
72
+
73
+ let feedObj: Feed.Feed | undefined;
74
+ if (Obj.instanceOf(Feed.Feed, target)) {
75
+ feedObj = target;
76
+ } else if (hasFeedAnnotation(target)) {
77
+ const feedRef = (target as Obj.Unknown & { feed?: Ref.Ref<Feed.Feed> }).feed;
78
+ feedObj = feedRef ? Option.getOrUndefined(yield* Database.loadOption(feedRef)) : undefined;
79
+ }
80
+
81
+ const queueDxn = Option.fromNullable(feedObj).pipe(
82
+ Option.filter(Obj.instanceOf(Feed.Feed)),
83
+ Option.map(Feed.getQueueDxn),
84
+ Option.getOrUndefined,
85
+ );
86
+ if (!queueDxn) {
87
+ continue;
88
+ }
89
+
90
+ yield* Database.add(
91
+ Trigger.make({
92
+ [Obj.Parent]: project,
93
+ [Obj.Meta]: {
94
+ keys: [
95
+ { source: PROJECT_TRIGGER_EXTENSION_KEY, id: project.id },
96
+ { source: PROJECT_TRIGGER_TARGET_EXTENSION_KEY, id: subscription.dxn.toString() },
97
+ ],
98
+ },
99
+ enabled: true,
100
+ spec: {
101
+ kind: 'queue',
102
+ queue: queueDxn.toString(),
103
+ },
104
+ function: Ref.make(
105
+ FunctionDefinition.serialize(
106
+ project.useQualifyingAgent ? ProjectFunctions.Qualifier : ProjectFunctions.Agent,
107
+ ),
108
+ ),
109
+ input: {
110
+ project: Ref.make(project),
111
+ event: '{{event}}',
112
+ },
113
+ concurrency: project.useQualifyingAgent ? 5 : undefined,
114
+ }),
115
+ );
116
+ }
117
+
118
+ if (project.useQualifyingAgent) {
119
+ const qualifierTrigger = triggers.find((trigger) =>
120
+ Obj.getKeys(trigger, PROJECT_TRIGGER_TARGET_EXTENSION_KEY).some(
121
+ (key) => key.id === Obj.getDXN(project)?.toString(),
122
+ ),
123
+ );
124
+ if (!qualifierTrigger && project.queue) {
125
+ yield* Database.add(
126
+ Trigger.make({
127
+ [Obj.Parent]: project,
128
+ [Obj.Meta]: {
129
+ keys: [
130
+ { source: PROJECT_TRIGGER_EXTENSION_KEY, id: project.id },
131
+ {
132
+ source: PROJECT_TRIGGER_TARGET_EXTENSION_KEY,
133
+ id: Obj.getDXN(project)?.toString() ?? '',
134
+ },
135
+ ],
136
+ },
137
+ function: Ref.make(FunctionDefinition.serialize(ProjectFunctions.Agent)),
138
+ enabled: true,
139
+ spec: {
140
+ kind: 'queue',
141
+ queue: project.queue.dxn.toString(),
142
+ },
143
+ input: {
144
+ project: Ref.make(project),
145
+ event: '{{event}}',
146
+ },
147
+ }),
148
+ );
149
+ }
150
+ }
151
+
152
+ yield* Database.flush();
153
+ });
@@ -0,0 +1,45 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type AppCapabilities } from '@dxos/app-toolkit';
6
+ import { Blueprint, Template } from '@dxos/blueprints';
7
+ import { trim } from '@dxos/util';
8
+
9
+ import { ProjectWizardFunctions } from './functions';
10
+
11
+ const BLUEPRINT_KEY = 'org.dxos.blueprint.project-wizard';
12
+
13
+ const functions = Object.values(ProjectWizardFunctions);
14
+
15
+ /**
16
+ * Creates the Project blueprint. This is a function to avoid circular dependency issues.
17
+ */
18
+ const make = () =>
19
+ Blueprint.make({
20
+ key: BLUEPRINT_KEY,
21
+ name: 'Project Wizard',
22
+ description: 'Help the user create a new project.',
23
+ instructions: Template.make({
24
+ source: trim`
25
+ You are a wizard that helps the user create a new project.
26
+
27
+ Projects are goal oriented and autonomously driven by the agent.
28
+ Each project has a spec - the goal of the project.
29
+ The spec also typically describes what actions to perform in reaction to events (emails).
30
+ The project has a number of associated artifacts to work with.
31
+ Projects can subscribe to emails.
32
+
33
+ IMPORTANT: Before attempting to create a project call the [project-rules] tool to get the rules for creating a project.
34
+ `,
35
+ }),
36
+ tools: Blueprint.toolDefinitions({ functions }),
37
+ });
38
+
39
+ const blueprint: AppCapabilities.BlueprintDefinition = {
40
+ key: BLUEPRINT_KEY,
41
+ functions,
42
+ make,
43
+ };
44
+
45
+ export default blueprint;
@@ -0,0 +1,57 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Schema from 'effect/Schema';
7
+ import { Obj, Ref } from '@dxos/echo';
8
+ import { Blueprint } from '@dxos/blueprints';
9
+
10
+ import { defineFunction } from '@dxos/functions';
11
+
12
+ import { Project } from '../../../types';
13
+ import { ProjectBlueprint, syncProjectTriggers } from '../../project';
14
+
15
+ // TODO(dmaretskyi): Remove this with proper function typing.
16
+ const fixEffectType = <A, E, R>(
17
+ eff: Effect.Effect<A, E, R>,
18
+ ): Effect.Effect<A, E, Exclude<R, Blueprint.RegistryService>> => eff as any;
19
+
20
+ export default defineFunction({
21
+ key: 'org.dxos.function.project-wizard.create-project',
22
+ name: 'Create project',
23
+ description: 'Creates a new project.',
24
+ inputSchema: Schema.Struct({
25
+ name: Schema.String.annotations({
26
+ description: 'The name of the project to create.',
27
+ }),
28
+ spec: Schema.String.annotations({
29
+ description:
30
+ 'The goal of the project. Be specic but not to verbose. The agent will use this as a core objective and set of rules to follow.',
31
+ }),
32
+ blueprints: Schema.Array(Schema.String).annotations({
33
+ description: 'The keys blueprints to use for the project.',
34
+ examples: [['org.dxos.blueprint.markdown', 'org.dxos.blueprint.database']],
35
+ }),
36
+ subscriptions: Schema.Array(Ref.Ref(Obj.Unknown)).annotations({
37
+ description: 'The objects to subscribe to for the project. Can be references to mailboxes.',
38
+ }),
39
+ }),
40
+ outputSchema: Project.Project,
41
+ services: [Blueprint.RegistryService],
42
+ handler: Effect.fnUntraced(function* ({ data }) {
43
+ const project = yield* Project.makeInitialized(
44
+ {
45
+ name: data.name,
46
+ spec: data.spec,
47
+ blueprints: yield* Effect.forEach(data.blueprints, (key) =>
48
+ Blueprint.upsert(key).pipe(Effect.map(Ref.make), Effect.orDie),
49
+ ),
50
+ subscriptions: data.subscriptions,
51
+ },
52
+ Obj.clone(ProjectBlueprint.make()),
53
+ );
54
+ yield* syncProjectTriggers(project);
55
+ return project;
56
+ }, fixEffectType),
57
+ });
@@ -0,0 +1,13 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { default as CreateProject } from './create-project';
6
+ import { default as QueryBlueprints } from './query-blueprints';
7
+ import { default as ProjectRules } from './project-rules';
8
+
9
+ export const ProjectWizardFunctions = {
10
+ CreateProject,
11
+ QueryBlueprints,
12
+ ProjectRules,
13
+ };
@@ -0,0 +1,78 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Schema from 'effect/Schema';
7
+
8
+ import { defineFunction } from '@dxos/functions';
9
+ import { trim } from '@dxos/util';
10
+
11
+ export default defineFunction({
12
+ key: 'org.dxos.function.project-wizard.project-rules',
13
+ name: 'Project rules',
14
+ description: 'Gets the rules for creating a project.',
15
+ inputSchema: Schema.Struct({}),
16
+ outputSchema: Schema.String,
17
+ handler: Effect.fnUntraced(function* ({ data }) {
18
+ return trim`
19
+ You can ask the user for qualifying questions about the projects.
20
+ If projects should actively read incoming emails, query for mailboxes and add a subscription to them.
21
+ Use [query-blueprints] function to query for available blueprints.
22
+ Use [create-project] function to create a new project.
23
+ After creating a project, explicitly remind the user to enable local triggers so the project can be driven autonomously.
24
+
25
+ Notable blueprints (query to get their keys):
26
+
27
+ - Database -- CRUD on objects in the ECHO database.
28
+ - Markdown -- Create and edit markdown documents.
29
+ - Websearch -- Search the web for information.
30
+ - Browser -- Virtual browser via playwright when simple WebSearch is not enough.
31
+ - Memory -- Memory to store and retrieve information.
32
+
33
+ Experimental blueprints that are discoraged:
34
+
35
+ - Research
36
+ - Design
37
+ - Project (not wizard) -- those are project internals, they are auto-added to every new project.
38
+
39
+ <example_project>
40
+ ## CRM from your inbox
41
+
42
+ Blueprints: database, websearch, browser
43
+
44
+ Subscribe to your inboxes.
45
+ Spec says that on every email we should extract People and Organizations and save them to the database, but first query the database for existing people and organizations to avoid duplicates.
46
+ Also run a quick research on the web to find more information about the person or organization and save it to the database.
47
+ </example_project>
48
+
49
+ <example_project>
50
+ ## Parcel tracking
51
+
52
+ Blueprints: database
53
+
54
+ Based on emails from vendors (amazon, fedex, etc.) track the status of the parcels ordered online and keep a table of orders.
55
+
56
+ Before creating a project, use the Database blueprint to create an Order schema:
57
+ - seller
58
+ - name
59
+ - price
60
+ - status (enum of: pending, shipped, waiting for pickup, delivered, cancelled, returned)
61
+ - tracking numbers/notes
62
+ - date of delivery
63
+ - shipping address
64
+ </example_project>
65
+
66
+ <example_project>
67
+ ## Comms assistant
68
+
69
+ Blueprints: database, markdown, inbox
70
+
71
+ Helps user maintain comms with external parites via email.
72
+ Ask user specifically who they want to communicate with and on what topic.
73
+ Project should keep a markdown document in artifacts outlining the current state of the comms.
74
+ Project should propose drafts to follow up on the comms. Only propose sensible drafts, do not propose drafts that are not relevant or actionable.
75
+ </example_project>
76
+ `;
77
+ }),
78
+ });
@@ -0,0 +1,27 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Blueprint } from '@dxos/blueprints';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ import { defineFunction } from '@dxos/functions';
10
+
11
+ // TODO(dmaretskyi): Remove this with proper function typing.
12
+ const fixEffectType = <A, E, R>(
13
+ eff: Effect.Effect<A, E, R>,
14
+ ): Effect.Effect<A, E, Exclude<R, Blueprint.RegistryService>> => eff as any;
15
+
16
+ export default defineFunction({
17
+ key: 'org.dxos.function.project-wizard.query-blueprints',
18
+ name: 'Query blueprints',
19
+ description: 'Queries the blueprints.',
20
+ inputSchema: Schema.Struct({}),
21
+ outputSchema: Schema.Array(Blueprint.Blueprint),
22
+ services: [Blueprint.RegistryService],
23
+ handler: Effect.fnUntraced(function* ({ data }) {
24
+ const registry = yield* Blueprint.RegistryService;
25
+ return registry.query();
26
+ }, fixEffectType),
27
+ });
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { default as ProjectWizardBlueprint } from './blueprint';
6
+ export { ProjectWizardFunctions } from './functions';