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

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 (403) 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 +2989 -1842
  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/browser/blueprint.d.ts +4 -0
  9. package/dist/types/src/blueprints/browser/blueprint.d.ts.map +1 -0
  10. package/dist/types/src/blueprints/browser/blueprint.test.d.ts +2 -0
  11. package/dist/types/src/blueprints/browser/blueprint.test.d.ts.map +1 -0
  12. package/dist/types/src/blueprints/browser/index.d.ts +2 -0
  13. package/dist/types/src/blueprints/browser/index.d.ts.map +1 -0
  14. package/dist/types/src/blueprints/database/blueprint.d.ts +4 -0
  15. package/dist/types/src/blueprints/database/blueprint.d.ts.map +1 -0
  16. package/dist/types/src/blueprints/database/blueprint.test.d.ts +2 -0
  17. package/dist/types/src/blueprints/database/blueprint.test.d.ts.map +1 -0
  18. package/dist/types/src/blueprints/database/functions/context-add.d.ts +6 -0
  19. package/dist/types/src/blueprints/database/functions/context-add.d.ts.map +1 -0
  20. package/dist/types/src/blueprints/database/functions/context-remove.d.ts +6 -0
  21. package/dist/types/src/blueprints/database/functions/context-remove.d.ts.map +1 -0
  22. package/dist/types/src/blueprints/database/functions/index.d.ts +57 -0
  23. package/dist/types/src/blueprints/database/functions/index.d.ts.map +1 -0
  24. package/dist/types/src/blueprints/database/functions/load.d.ts +6 -0
  25. package/dist/types/src/blueprints/database/functions/load.d.ts.map +1 -0
  26. package/dist/types/src/blueprints/database/functions/object-create.d.ts +6 -0
  27. package/dist/types/src/blueprints/database/functions/object-create.d.ts.map +1 -0
  28. package/dist/types/src/blueprints/database/functions/object-delete.d.ts +6 -0
  29. package/dist/types/src/blueprints/database/functions/object-delete.d.ts.map +1 -0
  30. package/dist/types/src/blueprints/database/functions/object-update.d.ts +9 -0
  31. package/dist/types/src/blueprints/database/functions/object-update.d.ts.map +1 -0
  32. package/dist/types/src/blueprints/database/functions/query.d.ts +9 -0
  33. package/dist/types/src/blueprints/database/functions/query.d.ts.map +1 -0
  34. package/dist/types/src/blueprints/database/functions/relation-create.d.ts +9 -0
  35. package/dist/types/src/blueprints/database/functions/relation-create.d.ts.map +1 -0
  36. package/dist/types/src/blueprints/database/functions/relation-delete.d.ts +6 -0
  37. package/dist/types/src/blueprints/database/functions/relation-delete.d.ts.map +1 -0
  38. package/dist/types/src/blueprints/database/functions/schema-add.d.ts +7 -0
  39. package/dist/types/src/blueprints/database/functions/schema-add.d.ts.map +1 -0
  40. package/dist/types/src/blueprints/database/functions/schema-list.d.ts +5 -0
  41. package/dist/types/src/blueprints/database/functions/schema-list.d.ts.map +1 -0
  42. package/dist/types/src/blueprints/database/functions/tag-add.d.ts +7 -0
  43. package/dist/types/src/blueprints/database/functions/tag-add.d.ts.map +1 -0
  44. package/dist/types/src/blueprints/database/functions/tag-remove.d.ts +7 -0
  45. package/dist/types/src/blueprints/database/functions/tag-remove.d.ts.map +1 -0
  46. package/dist/types/src/blueprints/database/index.d.ts +3 -0
  47. package/dist/types/src/blueprints/database/index.d.ts.map +1 -0
  48. package/dist/types/src/blueprints/design/blueprint.d.ts +4 -0
  49. package/dist/types/src/blueprints/design/blueprint.d.ts.map +1 -0
  50. package/dist/types/src/blueprints/design/blueprint.test.d.ts +2 -0
  51. package/dist/types/src/blueprints/design/blueprint.test.d.ts.map +1 -0
  52. package/dist/types/src/blueprints/design/index.d.ts +1 -2
  53. package/dist/types/src/blueprints/design/index.d.ts.map +1 -1
  54. package/dist/types/src/blueprints/discord/blueprint.d.ts +4 -0
  55. package/dist/types/src/blueprints/discord/blueprint.d.ts.map +1 -0
  56. package/dist/types/src/{functions/discord → blueprints/discord/functions}/fetch-messages.d.ts +1 -1
  57. package/dist/types/src/blueprints/discord/functions/fetch-messages.d.ts.map +1 -0
  58. package/dist/types/src/blueprints/discord/functions/fetch-messages.test.d.ts.map +1 -0
  59. package/dist/types/src/{functions/discord → blueprints/discord/functions}/index.d.ts +4 -4
  60. package/dist/types/src/blueprints/discord/functions/index.d.ts.map +1 -0
  61. package/dist/types/src/blueprints/discord/index.d.ts +1 -2
  62. package/dist/types/src/blueprints/discord/index.d.ts.map +1 -1
  63. package/dist/types/src/{functions/github → blueprints/github/functions}/fetch-prs.d.ts +1 -1
  64. package/dist/types/src/blueprints/github/functions/fetch-prs.d.ts.map +1 -0
  65. package/dist/types/src/blueprints/github/functions/index.d.ts +7 -0
  66. package/dist/types/src/blueprints/github/functions/index.d.ts.map +1 -0
  67. package/dist/types/src/blueprints/github/index.d.ts +1 -0
  68. package/dist/types/src/blueprints/github/index.d.ts.map +1 -0
  69. package/dist/types/src/blueprints/index.d.ts +10 -6
  70. package/dist/types/src/blueprints/index.d.ts.map +1 -1
  71. package/dist/types/src/blueprints/linear/blueprint.d.ts +4 -0
  72. package/dist/types/src/blueprints/linear/blueprint.d.ts.map +1 -0
  73. package/dist/types/src/blueprints/linear/functions/index.d.ts +9 -0
  74. package/dist/types/src/blueprints/linear/functions/index.d.ts.map +1 -0
  75. package/dist/types/src/blueprints/linear/functions/linear.test.d.ts.map +1 -0
  76. package/dist/types/src/{functions/linear → blueprints/linear/functions}/sync-issues.d.ts +2 -2
  77. package/dist/types/src/blueprints/linear/functions/sync-issues.d.ts.map +1 -0
  78. package/dist/types/src/blueprints/linear/index.d.ts +1 -2
  79. package/dist/types/src/blueprints/linear/index.d.ts.map +1 -1
  80. package/dist/types/src/blueprints/markdown/blueprint.d.ts +4 -0
  81. package/dist/types/src/blueprints/markdown/blueprint.d.ts.map +1 -0
  82. package/dist/types/src/{functions/research/create-document.d.ts → blueprints/markdown/functions/create.d.ts} +2 -3
  83. package/dist/types/src/blueprints/markdown/functions/create.d.ts.map +1 -0
  84. package/dist/types/src/blueprints/markdown/functions/index.d.ts +30 -0
  85. package/dist/types/src/blueprints/markdown/functions/index.d.ts.map +1 -0
  86. package/dist/types/src/blueprints/markdown/functions/read.d.ts +14 -0
  87. package/dist/types/src/blueprints/markdown/functions/read.d.ts.map +1 -0
  88. package/dist/types/src/blueprints/markdown/functions/update.d.ts +13 -0
  89. package/dist/types/src/blueprints/markdown/functions/update.d.ts.map +1 -0
  90. package/dist/types/src/blueprints/markdown/index.d.ts +3 -0
  91. package/dist/types/src/blueprints/markdown/index.d.ts.map +1 -0
  92. package/dist/types/src/blueprints/planning/blueprint.d.ts +4 -0
  93. package/dist/types/src/blueprints/planning/blueprint.d.ts.map +1 -0
  94. package/dist/types/src/blueprints/planning/functions/index.d.ts +10 -0
  95. package/dist/types/src/blueprints/planning/functions/index.d.ts.map +1 -0
  96. package/dist/types/src/blueprints/planning/functions/update-tasks.d.ts +9 -0
  97. package/dist/types/src/blueprints/planning/functions/update-tasks.d.ts.map +1 -0
  98. package/dist/types/src/blueprints/planning/index.d.ts +1 -2
  99. package/dist/types/src/blueprints/planning/index.d.ts.map +1 -1
  100. package/dist/types/src/blueprints/planning-old/blueprint.d.ts +4 -0
  101. package/dist/types/src/blueprints/planning-old/blueprint.d.ts.map +1 -0
  102. package/dist/types/src/blueprints/planning-old/blueprint.test.d.ts +2 -0
  103. package/dist/types/src/blueprints/planning-old/blueprint.test.d.ts.map +1 -0
  104. package/dist/types/src/blueprints/planning-old/functions/index.d.ts +29 -0
  105. package/dist/types/src/blueprints/planning-old/functions/index.d.ts.map +1 -0
  106. package/dist/types/src/blueprints/planning-old/functions/read.d.ts +14 -0
  107. package/dist/types/src/blueprints/planning-old/functions/read.d.ts.map +1 -0
  108. package/dist/types/src/blueprints/planning-old/functions/task-list.d.ts.map +1 -0
  109. package/dist/types/src/blueprints/planning-old/functions/task-list.test.d.ts.map +1 -0
  110. package/dist/types/src/blueprints/planning-old/functions/update.d.ts +16 -0
  111. package/dist/types/src/blueprints/planning-old/functions/update.d.ts.map +1 -0
  112. package/dist/types/src/blueprints/planning-old/index.d.ts +2 -0
  113. package/dist/types/src/blueprints/planning-old/index.d.ts.map +1 -0
  114. package/dist/types/src/blueprints/project/blueprint.d.ts +4 -0
  115. package/dist/types/src/blueprints/project/blueprint.d.ts.map +1 -0
  116. package/dist/types/src/blueprints/project/blueprint.test.d.ts +2 -0
  117. package/dist/types/src/blueprints/project/blueprint.test.d.ts.map +1 -0
  118. package/dist/types/src/blueprints/project/functions/add-artifact.d.ts +7 -0
  119. package/dist/types/src/blueprints/project/functions/add-artifact.d.ts.map +1 -0
  120. package/dist/types/src/blueprints/project/functions/agent.d.ts +62 -0
  121. package/dist/types/src/blueprints/project/functions/agent.d.ts.map +1 -0
  122. package/dist/types/src/blueprints/project/functions/get-context.d.ts +13 -0
  123. package/dist/types/src/blueprints/project/functions/get-context.d.ts.map +1 -0
  124. package/dist/types/src/blueprints/project/functions/index.d.ts +133 -0
  125. package/dist/types/src/blueprints/project/functions/index.d.ts.map +1 -0
  126. package/dist/types/src/blueprints/project/functions/qualifier.d.ts +60 -0
  127. package/dist/types/src/blueprints/project/functions/qualifier.d.ts.map +1 -0
  128. package/dist/types/src/blueprints/project/index.d.ts +3 -0
  129. package/dist/types/src/blueprints/project/index.d.ts.map +1 -0
  130. package/dist/types/src/blueprints/research/blueprint.d.ts +4 -0
  131. package/dist/types/src/blueprints/research/blueprint.d.ts.map +1 -0
  132. package/dist/types/src/blueprints/research/blueprint.test.d.ts +2 -0
  133. package/dist/types/src/blueprints/research/blueprint.test.d.ts.map +1 -0
  134. package/dist/types/src/blueprints/research/functions/document-create.d.ts +10 -0
  135. package/dist/types/src/blueprints/research/functions/document-create.d.ts.map +1 -0
  136. package/dist/types/src/blueprints/research/functions/index.d.ts +19 -0
  137. package/dist/types/src/blueprints/research/functions/index.d.ts.map +1 -0
  138. package/dist/types/src/{functions/research → blueprints/research/functions}/research.d.ts +4 -3
  139. package/dist/types/src/blueprints/research/functions/research.d.ts.map +1 -0
  140. package/dist/types/src/blueprints/research/functions/research.test.d.ts.map +1 -0
  141. package/dist/types/src/blueprints/research/index.d.ts +2 -2
  142. package/dist/types/src/blueprints/research/index.d.ts.map +1 -1
  143. package/dist/types/src/blueprints/research/types/ResearchGraph.d.ts +18 -0
  144. package/dist/types/src/blueprints/research/types/ResearchGraph.d.ts.map +1 -0
  145. package/dist/types/src/blueprints/research/types/index.d.ts +7 -0
  146. package/dist/types/src/blueprints/research/types/index.d.ts.map +1 -0
  147. package/dist/types/src/blueprints/testing.d.ts +18 -4
  148. package/dist/types/src/blueprints/testing.d.ts.map +1 -1
  149. package/dist/types/src/blueprints/websearch/blueprint.d.ts +4 -0
  150. package/dist/types/src/blueprints/websearch/blueprint.d.ts.map +1 -0
  151. package/dist/types/src/blueprints/websearch/index.d.ts +2 -3
  152. package/dist/types/src/blueprints/websearch/index.d.ts.map +1 -1
  153. package/dist/types/src/blueprints/websearch/{websearch-toolkit.d.ts → toolkit.d.ts} +2 -1
  154. package/dist/types/src/blueprints/websearch/toolkit.d.ts.map +1 -0
  155. package/dist/types/src/{functions/research → crud}/graph.d.ts +14 -11
  156. package/dist/types/src/crud/graph.d.ts.map +1 -0
  157. package/dist/types/src/crud/graph.test.d.ts.map +1 -0
  158. package/dist/types/src/crud/index.d.ts +2 -0
  159. package/dist/types/src/crud/index.d.ts.map +1 -0
  160. package/dist/types/src/functions/agent/index.d.ts +84 -4
  161. package/dist/types/src/functions/agent/index.d.ts.map +1 -1
  162. package/dist/types/src/functions/agent/prompt.d.ts +81 -8
  163. package/dist/types/src/functions/agent/prompt.d.ts.map +1 -1
  164. package/dist/types/src/functions/entity-extraction/entity-extraction.d.ts +142 -136
  165. package/dist/types/src/functions/entity-extraction/entity-extraction.d.ts.map +1 -1
  166. package/dist/types/src/functions/entity-extraction/index.d.ts +144 -139
  167. package/dist/types/src/functions/entity-extraction/index.d.ts.map +1 -1
  168. package/dist/types/src/functions/exa/data/exa-search-1748337321991.d.ts.map +1 -0
  169. package/dist/types/src/functions/exa/data/exa-search-1748337331526.d.ts.map +1 -0
  170. package/dist/types/src/functions/exa/data/exa-search-1748337344119.d.ts.map +1 -0
  171. package/dist/types/src/functions/exa/data/index.d.ts.map +1 -0
  172. package/dist/types/src/functions/exa/exa.d.ts +1 -1
  173. package/dist/types/src/functions/exa/index.d.ts +8 -2
  174. package/dist/types/src/functions/exa/index.d.ts.map +1 -1
  175. package/dist/types/src/functions/exa/mock.d.ts +1 -1
  176. package/dist/types/src/functions/index.d.ts +1 -5
  177. package/dist/types/src/functions/index.d.ts.map +1 -1
  178. package/dist/types/src/index.d.ts +3 -1
  179. package/dist/types/src/index.d.ts.map +1 -1
  180. package/dist/types/src/sync/sync.d.ts +3 -3
  181. package/dist/types/src/sync/sync.d.ts.map +1 -1
  182. package/dist/types/src/testing/index.d.ts +2 -1
  183. package/dist/types/src/testing/index.d.ts.map +1 -1
  184. package/dist/types/src/testing/plugins.d.ts +19 -0
  185. package/dist/types/src/testing/plugins.d.ts.map +1 -0
  186. package/dist/types/src/toolkits/WebToolkit.d.ts +38 -0
  187. package/dist/types/src/toolkits/WebToolkit.d.ts.map +1 -0
  188. package/dist/types/src/toolkits/index.d.ts +2 -0
  189. package/dist/types/src/toolkits/index.d.ts.map +1 -0
  190. package/dist/types/src/types/Chat.d.ts +31 -0
  191. package/dist/types/src/types/Chat.d.ts.map +1 -0
  192. package/dist/types/src/types/Plan.d.ts +77 -0
  193. package/dist/types/src/types/Plan.d.ts.map +1 -0
  194. package/dist/types/src/types/Project.d.ts +67 -0
  195. package/dist/types/src/types/Project.d.ts.map +1 -0
  196. package/dist/types/src/types/index.d.ts +4 -0
  197. package/dist/types/src/types/index.d.ts.map +1 -0
  198. package/dist/types/tsconfig.tsbuildinfo +1 -1
  199. package/package.json +49 -38
  200. package/src/blueprints/browser/blueprint.conversations.json +1 -0
  201. package/src/blueprints/browser/blueprint.test.ts +70 -0
  202. package/src/blueprints/browser/blueprint.ts +41 -0
  203. package/src/blueprints/browser/index.ts +5 -0
  204. package/src/blueprints/database/blueprint.conversations.json +1 -0
  205. package/src/blueprints/database/blueprint.test.ts +321 -0
  206. package/src/blueprints/database/blueprint.ts +39 -0
  207. package/src/blueprints/database/functions/context-add.ts +35 -0
  208. package/src/blueprints/database/functions/context-remove.ts +35 -0
  209. package/src/blueprints/database/functions/index.ts +33 -0
  210. package/src/blueprints/database/functions/load.ts +31 -0
  211. package/src/blueprints/database/functions/object-create.ts +35 -0
  212. package/src/blueprints/database/functions/object-delete.ts +27 -0
  213. package/src/blueprints/database/functions/object-update.ts +32 -0
  214. package/src/blueprints/database/functions/query.ts +126 -0
  215. package/src/blueprints/database/functions/relation-create.ts +47 -0
  216. package/src/blueprints/database/functions/relation-delete.ts +28 -0
  217. package/src/blueprints/database/functions/schema-add.ts +40 -0
  218. package/src/blueprints/database/functions/schema-list.ts +34 -0
  219. package/src/blueprints/database/functions/tag-add.ts +31 -0
  220. package/src/blueprints/database/functions/tag-remove.ts +30 -0
  221. package/src/blueprints/database/index.ts +6 -0
  222. package/src/blueprints/design/{design-blueprint.test.ts → blueprint.test.ts} +25 -37
  223. package/src/blueprints/design/blueprint.ts +46 -0
  224. package/src/blueprints/design/index.ts +1 -3
  225. package/src/blueprints/discord/blueprint.ts +46 -0
  226. package/src/{functions/discord → blueprints/discord/functions}/fetch-messages.test.ts +10 -14
  227. package/src/{functions/discord → blueprints/discord/functions}/fetch-messages.ts +11 -10
  228. package/src/blueprints/discord/functions/index.ts +9 -0
  229. package/src/blueprints/discord/index.ts +1 -3
  230. package/src/{functions/github → blueprints/github/functions}/fetch-prs.ts +3 -2
  231. package/src/blueprints/github/functions/index.ts +9 -0
  232. package/src/blueprints/github/index.ts +3 -0
  233. package/src/blueprints/index.ts +10 -6
  234. package/src/blueprints/linear/blueprint.ts +47 -0
  235. package/src/blueprints/linear/functions/index.ts +9 -0
  236. package/src/blueprints/linear/functions/linear.test.ts +58 -0
  237. package/src/{functions/linear → blueprints/linear/functions}/sync-issues.ts +17 -15
  238. package/src/blueprints/linear/index.ts +1 -3
  239. package/src/blueprints/markdown/blueprint.ts +38 -0
  240. package/src/blueprints/markdown/functions/create.ts +29 -0
  241. package/src/blueprints/markdown/functions/index.ts +13 -0
  242. package/src/blueprints/markdown/functions/read.ts +32 -0
  243. package/src/{functions/document → blueprints/markdown/functions}/update.ts +9 -7
  244. package/src/blueprints/markdown/index.ts +6 -0
  245. package/src/blueprints/planning/blueprint.ts +28 -0
  246. package/src/blueprints/planning/functions/index.ts +9 -0
  247. package/src/blueprints/planning/functions/update-tasks.ts +168 -0
  248. package/src/blueprints/planning/index.ts +2 -4
  249. package/src/blueprints/{planning/planning-blueprint.test.ts → planning-old/blueprint.test.ts} +25 -32
  250. package/src/blueprints/{planning/planning-blueprint.ts → planning-old/blueprint.ts} +24 -12
  251. package/src/blueprints/planning-old/functions/index.ts +11 -0
  252. package/src/{functions/tasks → blueprints/planning-old/functions}/read.ts +6 -6
  253. package/src/{functions/tasks → blueprints/planning-old/functions}/update.ts +6 -6
  254. package/src/blueprints/planning-old/index.ts +5 -0
  255. package/src/blueprints/project/blueprint.test.ts +579 -0
  256. package/src/blueprints/project/blueprint.ts +68 -0
  257. package/src/blueprints/project/functions/add-artifact.ts +41 -0
  258. package/src/blueprints/project/functions/agent.ts +72 -0
  259. package/src/blueprints/project/functions/get-context.ts +63 -0
  260. package/src/blueprints/project/functions/index.ts +15 -0
  261. package/src/blueprints/project/functions/qualifier.ts +96 -0
  262. package/src/blueprints/project/index.ts +6 -0
  263. package/src/blueprints/research/blueprint.ts +65 -0
  264. package/src/blueprints/research/functions/document-create.ts +73 -0
  265. package/src/blueprints/research/functions/index.ts +11 -0
  266. package/src/{functions/research/instructions-research.tpl → blueprints/research/functions/research-instructions.tpl} +14 -6
  267. package/src/blueprints/research/functions/research.conversations.json +1 -0
  268. package/src/blueprints/research/functions/research.test.ts +149 -0
  269. package/src/blueprints/research/functions/research.ts +175 -0
  270. package/src/blueprints/research/index.ts +2 -3
  271. package/src/blueprints/research/types/ResearchGraph.ts +49 -0
  272. package/src/blueprints/research/types/index.ts +32 -0
  273. package/src/blueprints/testing.ts +36 -5
  274. package/src/blueprints/websearch/blueprint.ts +32 -0
  275. package/src/blueprints/websearch/index.ts +2 -4
  276. package/src/crud/graph.test.ts +46 -0
  277. package/src/{functions/research → crud}/graph.ts +32 -40
  278. package/src/crud/index.ts +5 -0
  279. package/src/functions/READ_THIS.md +5 -0
  280. package/src/functions/agent/index.ts +4 -6
  281. package/src/functions/agent/prompt.ts +32 -25
  282. package/src/functions/entity-extraction/entity-extraction.conversations.json +1 -1
  283. package/src/functions/entity-extraction/entity-extraction.test.ts +17 -43
  284. package/src/functions/entity-extraction/entity-extraction.ts +54 -36
  285. package/src/functions/entity-extraction/index.ts +4 -4
  286. package/src/functions/exa/exa.ts +2 -2
  287. package/src/functions/exa/index.ts +7 -2
  288. package/src/functions/exa/mock.ts +1 -1
  289. package/src/functions/index.ts +1 -5
  290. package/src/index.ts +3 -1
  291. package/src/sync/sync.ts +38 -30
  292. package/src/testing/index.ts +2 -1
  293. package/src/testing/plugins.tsx +72 -0
  294. package/src/toolkits/WebToolkit.ts +33 -0
  295. package/src/toolkits/index.ts +5 -0
  296. package/src/types/Chat.ts +49 -0
  297. package/src/types/Plan.ts +107 -0
  298. package/src/types/Project.ts +196 -0
  299. package/src/types/index.ts +7 -0
  300. package/dist/lib/browser/index.mjs.map +0 -7
  301. package/dist/lib/browser/meta.json +0 -1
  302. package/dist/lib/node-esm/index.mjs +0 -2483
  303. package/dist/lib/node-esm/index.mjs.map +0 -7
  304. package/dist/lib/node-esm/meta.json +0 -1
  305. package/dist/types/src/blueprints/design/design-blueprint.d.ts +0 -4
  306. package/dist/types/src/blueprints/design/design-blueprint.d.ts.map +0 -1
  307. package/dist/types/src/blueprints/design/design-blueprint.test.d.ts +0 -2
  308. package/dist/types/src/blueprints/design/design-blueprint.test.d.ts.map +0 -1
  309. package/dist/types/src/blueprints/discord/discord-blueprint.d.ts +0 -18
  310. package/dist/types/src/blueprints/discord/discord-blueprint.d.ts.map +0 -1
  311. package/dist/types/src/blueprints/linear/linear-blueprint.d.ts +0 -18
  312. package/dist/types/src/blueprints/linear/linear-blueprint.d.ts.map +0 -1
  313. package/dist/types/src/blueprints/planning/planning-blueprint.d.ts +0 -4
  314. package/dist/types/src/blueprints/planning/planning-blueprint.d.ts.map +0 -1
  315. package/dist/types/src/blueprints/planning/planning-blueprint.test.d.ts +0 -2
  316. package/dist/types/src/blueprints/planning/planning-blueprint.test.d.ts.map +0 -1
  317. package/dist/types/src/blueprints/research/research-blueprint.d.ts +0 -4
  318. package/dist/types/src/blueprints/research/research-blueprint.d.ts.map +0 -1
  319. package/dist/types/src/blueprints/research/research-blueprint.test.d.ts +0 -2
  320. package/dist/types/src/blueprints/research/research-blueprint.test.d.ts.map +0 -1
  321. package/dist/types/src/blueprints/websearch/websearch-blueprint.d.ts +0 -4
  322. package/dist/types/src/blueprints/websearch/websearch-blueprint.d.ts.map +0 -1
  323. package/dist/types/src/blueprints/websearch/websearch-toolkit.d.ts.map +0 -1
  324. package/dist/types/src/experimental/feed.test.d.ts +0 -2
  325. package/dist/types/src/experimental/feed.test.d.ts.map +0 -1
  326. package/dist/types/src/functions/discord/fetch-messages.d.ts.map +0 -1
  327. package/dist/types/src/functions/discord/fetch-messages.test.d.ts.map +0 -1
  328. package/dist/types/src/functions/discord/index.d.ts.map +0 -1
  329. package/dist/types/src/functions/document/index.d.ts +0 -12
  330. package/dist/types/src/functions/document/index.d.ts.map +0 -1
  331. package/dist/types/src/functions/document/read.d.ts +0 -7
  332. package/dist/types/src/functions/document/read.d.ts.map +0 -1
  333. package/dist/types/src/functions/document/update.d.ts +0 -6
  334. package/dist/types/src/functions/document/update.d.ts.map +0 -1
  335. package/dist/types/src/functions/github/fetch-prs.d.ts.map +0 -1
  336. package/dist/types/src/functions/linear/index.d.ts +0 -9
  337. package/dist/types/src/functions/linear/index.d.ts.map +0 -1
  338. package/dist/types/src/functions/linear/linear.test.d.ts.map +0 -1
  339. package/dist/types/src/functions/linear/sync-issues.d.ts.map +0 -1
  340. package/dist/types/src/functions/research/create-document.d.ts.map +0 -1
  341. package/dist/types/src/functions/research/graph.d.ts.map +0 -1
  342. package/dist/types/src/functions/research/graph.test.d.ts.map +0 -1
  343. package/dist/types/src/functions/research/index.d.ts +0 -19
  344. package/dist/types/src/functions/research/index.d.ts.map +0 -1
  345. package/dist/types/src/functions/research/research-graph.d.ts +0 -18
  346. package/dist/types/src/functions/research/research-graph.d.ts.map +0 -1
  347. package/dist/types/src/functions/research/research.d.ts.map +0 -1
  348. package/dist/types/src/functions/research/research.test.d.ts.map +0 -1
  349. package/dist/types/src/functions/research/types.d.ts +0 -384
  350. package/dist/types/src/functions/research/types.d.ts.map +0 -1
  351. package/dist/types/src/functions/tasks/index.d.ts +0 -15
  352. package/dist/types/src/functions/tasks/index.d.ts.map +0 -1
  353. package/dist/types/src/functions/tasks/read.d.ts +0 -7
  354. package/dist/types/src/functions/tasks/read.d.ts.map +0 -1
  355. package/dist/types/src/functions/tasks/task-list.d.ts.map +0 -1
  356. package/dist/types/src/functions/tasks/task-list.test.d.ts.map +0 -1
  357. package/dist/types/src/functions/tasks/update.d.ts +0 -9
  358. package/dist/types/src/functions/tasks/update.d.ts.map +0 -1
  359. package/dist/types/src/plugins.d.ts +0 -19
  360. package/dist/types/src/plugins.d.ts.map +0 -1
  361. package/dist/types/src/testing/data/exa-search-1748337321991.d.ts.map +0 -1
  362. package/dist/types/src/testing/data/exa-search-1748337331526.d.ts.map +0 -1
  363. package/dist/types/src/testing/data/exa-search-1748337344119.d.ts.map +0 -1
  364. package/dist/types/src/testing/data/index.d.ts.map +0 -1
  365. package/src/blueprints/design/design-blueprint.ts +0 -33
  366. package/src/blueprints/discord/discord-blueprint.ts +0 -34
  367. package/src/blueprints/linear/linear-blueprint.ts +0 -35
  368. package/src/blueprints/research/research-blueprint.ts +0 -45
  369. package/src/blueprints/websearch/websearch-blueprint.ts +0 -20
  370. package/src/experimental/feed.test.ts +0 -108
  371. package/src/functions/discord/index.ts +0 -9
  372. package/src/functions/document/index.ts +0 -11
  373. package/src/functions/document/read.ts +0 -29
  374. package/src/functions/linear/index.ts +0 -9
  375. package/src/functions/linear/linear.test.ts +0 -86
  376. package/src/functions/research/create-document.ts +0 -69
  377. package/src/functions/research/graph.test.ts +0 -69
  378. package/src/functions/research/index.ts +0 -15
  379. package/src/functions/research/research-graph.ts +0 -47
  380. package/src/functions/research/research.conversations.json +0 -10714
  381. package/src/functions/research/research.test.ts +0 -240
  382. package/src/functions/research/research.ts +0 -155
  383. package/src/functions/research/types.ts +0 -24
  384. package/src/functions/tasks/index.ts +0 -11
  385. package/src/plugins.tsx +0 -68
  386. /package/dist/types/src/{functions/discord → blueprints/discord/functions}/fetch-messages.test.d.ts +0 -0
  387. /package/dist/types/src/{functions/linear → blueprints/linear/functions}/linear.test.d.ts +0 -0
  388. /package/dist/types/src/{functions/tasks → blueprints/planning-old/functions}/task-list.d.ts +0 -0
  389. /package/dist/types/src/{functions/tasks → blueprints/planning-old/functions}/task-list.test.d.ts +0 -0
  390. /package/dist/types/src/{functions/research → blueprints/research/functions}/research.test.d.ts +0 -0
  391. /package/dist/types/src/{functions/research → crud}/graph.test.d.ts +0 -0
  392. /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337321991.d.ts +0 -0
  393. /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337331526.d.ts +0 -0
  394. /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337344119.d.ts +0 -0
  395. /package/dist/types/src/{testing → functions/exa}/data/index.d.ts +0 -0
  396. /package/src/{functions/tasks → blueprints/planning-old/functions}/task-list.test.ts +0 -0
  397. /package/src/{functions/tasks → blueprints/planning-old/functions}/task-list.ts +0 -0
  398. /package/src/blueprints/research/{research-blueprint.test.ts → blueprint.test.ts} +0 -0
  399. /package/src/blueprints/websearch/{websearch-toolkit.ts → toolkit.ts} +0 -0
  400. /package/src/{testing → functions/exa}/data/exa-search-1748337321991.ts +0 -0
  401. /package/src/{testing → functions/exa}/data/exa-search-1748337331526.ts +0 -0
  402. /package/src/{testing → functions/exa}/data/exa-search-1748337344119.ts +0 -0
  403. /package/src/{testing → functions/exa}/data/index.ts +0 -0
@@ -0,0 +1,126 @@
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 { Entity, Filter, Obj, Query } from '@dxos/echo';
9
+ import { Database } from '@dxos/echo';
10
+ import { defineFunction } from '@dxos/functions';
11
+ import { trim } from '@dxos/util';
12
+
13
+ // TODO(burdon): Move to toolkit (i.e., tool not function).
14
+ export default defineFunction({
15
+ key: 'dxos.org/function/database/query',
16
+ name: 'Query',
17
+ description: trim`
18
+ Query for objects in ECHO.
19
+ Use this tool when searching for information in the space (both automerge and queues).
20
+ Currently, two types of queries are supported:
21
+ - Full-text search - terms may appear anywhere in the object.
22
+ - Type-based search - objects of a specific type.
23
+ You can use them together, for example, to search for objects of a specific type that match a full-text query.
24
+ Important: Whem querying by typename, make sure to list the schema first, to get the exact typename.
25
+
26
+ Omit both typename and text to search for all objects.
27
+
28
+ <output_format>
29
+ You can choose to either return the full object data, or just the DXN, type and label.
30
+ When expecting a lot of results, run with includeContent=false to not pollute the context, and then load specific objects using the load tool.
31
+
32
+ You can choose to get the content right away, if you don't expect a lot of results.
33
+ To load content right away, run with includeContent=true.
34
+ When loading content, set an appropriate limit on the number of results to avoid overwhelming the context.
35
+ </output_format>
36
+
37
+ <example description="All tasks related to Cyberdyne and Bob">
38
+ {
39
+ "typename": "dxos.org/type/Task",
40
+ "text": "cyberdyne bob",
41
+ }
42
+ </example>
43
+
44
+ <example description="Financial report Q1 2026">
45
+ {
46
+ "typename": "dxos.org/type/Document",
47
+ "text": "financial report Q1 2026",
48
+ "includeContent": true
49
+ "limit": 3
50
+ }
51
+ </example>
52
+ `,
53
+ inputSchema: Schema.Struct({
54
+ typename: Schema.optional(
55
+ Schema.String.annotations({
56
+ description: 'The typename of the objects to list.',
57
+ example: 'dxos.org/type/Task',
58
+ }),
59
+ ),
60
+ text: Schema.optional(
61
+ Schema.String.annotations({
62
+ description: 'Full text search query.',
63
+ example: 'email cyberdyne bob',
64
+ }),
65
+ ),
66
+ includeContent: Schema.optional(
67
+ Schema.Boolean.annotations({
68
+ description: 'Include the full object data in the response.',
69
+ default: false,
70
+ }),
71
+ ),
72
+ limit: Schema.optional(
73
+ Schema.Number.annotations({
74
+ description: 'The maximum number of results to return.',
75
+ default: 10,
76
+ }),
77
+ ),
78
+ // TODO(dmaretskyi): There's a problem with querying queues, that the agent keeps finding message from agent threads.
79
+ // Let's think about a better way to do this.
80
+ // And queues don't have predicatble ids, so queue DXNs blow up the conversation cache.
81
+ includeQueues: Schema.optional(
82
+ Schema.Boolean.annotations({
83
+ description: 'Search in queues as well as spaces. Only use this if searching for emails.',
84
+ default: false,
85
+ }),
86
+ ),
87
+ }),
88
+ outputSchema: Schema.Array(Schema.Unknown),
89
+ handler: Effect.fn(function* ({
90
+ data: { typename, text, includeContent = false, limit = 10, includeQueues = false },
91
+ }) {
92
+ let query: Query.Any;
93
+ if (text) {
94
+ query = Query.all(...text.split(' ').map((term) => Query.select(Filter.text(term, { type: 'full-text' }))));
95
+ if (typename !== undefined) {
96
+ const schema = yield* Database.runSchemaQuery({ typename, location: ['database', 'runtime'] });
97
+ if (schema.length === 0) {
98
+ return yield* Effect.fail(new Error(`Schema ${typename} not found`));
99
+ }
100
+ // NOTE: Query by typename string doesn't work for dynamic schemas.
101
+ query = query.select(Filter.type(schema[0]));
102
+ }
103
+ } else if (typename) {
104
+ query = Query.select(Filter.type(typename));
105
+ } else {
106
+ query = Query.select(Filter.everything());
107
+ }
108
+ query = query.limit(limit);
109
+ if (includeQueues) {
110
+ query = query.from({ allQueuesFromSpaces: true });
111
+ }
112
+
113
+ // Update indexes before querying to make sure we get the latest results.
114
+ yield* Database.flush({ indexes: true });
115
+ const results = yield* Database.runQuery(query);
116
+ if (includeContent) {
117
+ return results.map((obj) => Entity.toJSON(obj));
118
+ } else {
119
+ return results.map((obj) => ({
120
+ dxn: Obj.getDXN(obj).toString(),
121
+ typename: Obj.getTypename(obj),
122
+ label: Obj.getLabel(obj),
123
+ }));
124
+ }
125
+ }),
126
+ });
@@ -0,0 +1,47 @@
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 { Database, Entity, Obj, Ref, Relation, Type } from '@dxos/echo';
9
+ import { defineFunction } from '@dxos/functions';
10
+ import { invariant } from '@dxos/invariant';
11
+ import { trim } from '@dxos/util';
12
+
13
+ export default defineFunction({
14
+ key: 'dxos.org/function/database/relation-create',
15
+ name: 'Create relation',
16
+ description: trim`
17
+ Creates a new relation and adds it to the current space.
18
+ Get the schema from the schema-list tool and ensure that the data matches the corresponding schema.
19
+ `,
20
+ inputSchema: Schema.Struct({
21
+ typename: Schema.String,
22
+ source: Ref.Ref(Obj.Unknown),
23
+ target: Ref.Ref(Obj.Unknown),
24
+ properties: Schema.Any.annotations({
25
+ description: 'The data to be stored in the relation.',
26
+ }),
27
+ }),
28
+ outputSchema: Schema.Unknown,
29
+ handler: Effect.fn(function* ({ data: { typename, source, target, properties } }) {
30
+ const { db } = yield* Database.Service;
31
+ const schema = yield* Effect.promise(() =>
32
+ db.schemaRegistry.query({ typename, location: ['database', 'runtime'] }).first(),
33
+ );
34
+ invariant(Type.isRelationSchema(schema), 'Schema is not a relation schema');
35
+
36
+ const sourceObj = yield* Database.load(source);
37
+ const targetObj = yield* Database.load(target);
38
+ const relation = db.add(
39
+ Relation.make(schema, {
40
+ [Relation.Source]: sourceObj,
41
+ [Relation.Target]: targetObj,
42
+ ...properties,
43
+ }),
44
+ );
45
+ return Entity.toJSON(relation);
46
+ }),
47
+ });
@@ -0,0 +1,28 @@
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 { Database, Ref, Relation } from '@dxos/echo';
9
+ import { defineFunction } from '@dxos/functions';
10
+ import { trim } from '@dxos/util';
11
+
12
+ export default defineFunction({
13
+ key: 'dxos.org/function/database/relation-delete',
14
+ name: 'Delete relation',
15
+ description: trim`
16
+ Deletes the relation.
17
+ `,
18
+ inputSchema: Schema.Struct({
19
+ rel: Ref.Ref(Relation.Unknown),
20
+ }),
21
+ outputSchema: Schema.Void,
22
+ handler: Effect.fn(function* ({ data: { rel } }) {
23
+ const { db } = yield* Database.Service;
24
+ const relation = yield* Database.load(rel);
25
+ // TODO(dmaretskyi): Echo types broken.
26
+ db.remove(relation as any);
27
+ }),
28
+ });
@@ -0,0 +1,40 @@
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 { Database } from '@dxos/echo';
9
+ import { defineFunction } from '@dxos/functions';
10
+ import { trim } from '@dxos/util';
11
+
12
+ export default defineFunction({
13
+ key: 'dxos.org/function/database/schema-add',
14
+ name: 'Add schema',
15
+ description: trim`
16
+ Adds a schema to the space.
17
+ The name will be used when displayed to the user.
18
+ `,
19
+ inputSchema: Schema.Struct({
20
+ name: Schema.String,
21
+ typename: Schema.String.annotations({
22
+ description: 'The typename of the schema in the format of "example.com/type/Type".',
23
+ }),
24
+ jsonSchema: Schema.Any,
25
+ }),
26
+ outputSchema: Schema.Void,
27
+ handler: Effect.fn(function* ({ data: { name, typename, jsonSchema } }) {
28
+ const { db } = yield* Database.Service;
29
+ yield* Effect.promise(() =>
30
+ db.schemaRegistry.register([
31
+ {
32
+ typename,
33
+ version: '0.1.0',
34
+ jsonSchema,
35
+ name,
36
+ },
37
+ ]),
38
+ );
39
+ }),
40
+ });
@@ -0,0 +1,34 @@
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 { Database, JsonSchema, Type } from '@dxos/echo';
9
+ import { defineFunction } from '@dxos/functions';
10
+ import { trim } from '@dxos/util';
11
+
12
+ export default defineFunction({
13
+ key: 'dxos.org/function/database/schema-list',
14
+ name: 'List schemas',
15
+ description: trim`
16
+ Lists schemas definitions.
17
+ `,
18
+ inputSchema: Schema.Struct({
19
+ limit: Schema.optional(Schema.Number),
20
+ }),
21
+ outputSchema: Schema.Array(Schema.Unknown),
22
+ handler: Effect.fn(function* () {
23
+ const { db } = yield* Database.Service;
24
+ const schema = yield* Effect.promise(() => db.schemaRegistry.query({ location: ['database', 'runtime'] }).run());
25
+ return schema.map((schema) => {
26
+ const meta = Type.getMeta(schema);
27
+ return {
28
+ typename: Type.getTypename(schema),
29
+ jsonSchema: JsonSchema.toJsonSchema(schema),
30
+ kind: meta?.sourceSchema ? 'relation' : 'record',
31
+ };
32
+ });
33
+ }),
34
+ });
@@ -0,0 +1,31 @@
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 { Database, Entity, Obj, Ref, Tag } from '@dxos/echo';
9
+ import { defineFunction } from '@dxos/functions';
10
+ import { trim } from '@dxos/util';
11
+
12
+ export default defineFunction({
13
+ key: 'dxos.org/function/database/tag-add',
14
+ name: 'Add tag',
15
+ description: trim`
16
+ Adds a tag to an object.
17
+ Tags are objects of type ${Tag.Tag.typename}.
18
+ You must search database for available tags, or create a new one.
19
+ `,
20
+ inputSchema: Schema.Struct({
21
+ tag: Ref.Ref(Obj.Unknown),
22
+ obj: Ref.Ref(Obj.Unknown),
23
+ }),
24
+ outputSchema: Schema.Unknown,
25
+ handler: Effect.fn(function* ({ data: { tag, obj } }) {
26
+ const object = yield* Database.load(obj);
27
+ const tagObj = yield* Database.load(tag);
28
+ Entity.change(object, (obj) => Entity.addTag(obj, Obj.getDXN(tagObj).toString()));
29
+ return Entity.toJSON(object);
30
+ }),
31
+ });
@@ -0,0 +1,30 @@
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 { Database, Entity, Obj, Ref, Tag } from '@dxos/echo';
9
+ import { defineFunction } from '@dxos/functions';
10
+ import { trim } from '@dxos/util';
11
+
12
+ export default defineFunction({
13
+ key: 'dxos.org/function/database/tag-remove',
14
+ name: 'Remove tag',
15
+ description: trim`
16
+ Removes a tag from an object.
17
+ Tags are objects of type ${Tag.Tag.typename}.
18
+ `,
19
+ inputSchema: Schema.Struct({
20
+ tag: Ref.Ref(Obj.Unknown),
21
+ obj: Ref.Ref(Obj.Unknown),
22
+ }),
23
+ outputSchema: Schema.Unknown,
24
+ handler: Effect.fn(function* ({ data: { tag, obj } }) {
25
+ const object = yield* Database.load(obj);
26
+ const tagObj = yield* Database.load(tag);
27
+ Entity.change(object, (obj) => Entity.removeTag(obj, Obj.getDXN(tagObj).toString()));
28
+ return Entity.toJSON(object);
29
+ }),
30
+ });
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { default as DatabaseBlueprint } from './blueprint';
6
+ export { DatabaseFunctions } from './functions';
@@ -7,34 +7,25 @@ import * as Effect from 'effect/Effect';
7
7
  import * as Layer from 'effect/Layer';
8
8
 
9
9
  import { AiService, ConsolePrinter } from '@dxos/ai';
10
+ import { GenericToolkit } from '@dxos/ai';
10
11
  import { AiServiceTestingPreset } from '@dxos/ai/testing';
11
- import {
12
- AiConversation,
13
- type ContextBinding,
14
- GenerationObserver,
15
- makeToolExecutionServiceFromFunctions,
16
- makeToolResolverFromFunctions,
17
- } from '@dxos/assistant';
12
+ import { AiConversation, type ContextBinding, GenerationObserver, ToolExecutionServices } from '@dxos/assistant';
18
13
  import { Blueprint } from '@dxos/blueprints';
19
14
  import { Obj, Ref } from '@dxos/echo';
20
- import { TestHelpers, acquireReleaseResource } from '@dxos/effect';
21
- import {
22
- ComputeEventLogger,
23
- DatabaseService,
24
- FunctionInvocationService,
25
- QueueService,
26
- TracingService,
27
- } from '@dxos/functions';
28
- import { TestDatabaseLayer } from '@dxos/functions/testing';
15
+ import { Database } from '@dxos/echo';
16
+ import { acquireReleaseResource } from '@dxos/effect';
17
+ import { TestHelpers } from '@dxos/effect/testing';
18
+ import { QueueService, TracingService } from '@dxos/functions';
19
+ import { FunctionInvocationServiceLayerTestMocked, TestDatabaseLayer } from '@dxos/functions-runtime/testing';
29
20
  import { log } from '@dxos/log';
30
21
  import { Markdown } from '@dxos/plugin-markdown/types';
31
- import { DataType } from '@dxos/schema';
22
+ import { Text } from '@dxos/schema';
23
+ import { type Message } from '@dxos/types';
32
24
  import { trim } from '@dxos/util';
33
25
 
34
- import { Document } from '../../functions';
35
- import { testToolkit } from '../testing';
26
+ import { MarkdownFunctions } from '../markdown';
36
27
 
37
- import blueprint from './design-blueprint';
28
+ import DesignBlueprint from './blueprint';
38
29
 
39
30
  describe('Design Blueprint', { timeout: 120_000 }, () => {
40
31
  it.scoped(
@@ -42,22 +33,23 @@ describe('Design Blueprint', { timeout: 120_000 }, () => {
42
33
  Effect.fn(
43
34
  function* ({ expect }) {
44
35
  const observer = GenerationObserver.fromPrinter(new ConsolePrinter());
45
- const queue = yield* QueueService.createQueue<DataType.Message | ContextBinding>();
46
- const conversation = yield* acquireReleaseResource(() => new AiConversation(queue));
36
+ const queue = yield* QueueService.createQueue<Message.Message | ContextBinding>();
37
+ const conversation = yield* acquireReleaseResource(() => new AiConversation({ queue }));
47
38
 
48
- yield* DatabaseService.add(blueprint);
39
+ const blueprint = DesignBlueprint.make();
40
+ yield* Database.add(blueprint);
49
41
  yield* Effect.promise(() =>
50
42
  conversation.context.bind({
51
43
  blueprints: [Ref.make(blueprint)],
52
44
  }),
53
45
  );
54
46
 
55
- const artifact = yield* DatabaseService.add(Markdown.makeDocument({ content: 'Hello, world!' }));
47
+ const artifact = yield* Database.add(Markdown.make({ content: 'Hello, world!' }));
56
48
  let prevContent = artifact.content;
57
49
 
58
50
  {
59
51
  const prompt = trim`
60
- I want to design a new feature for our product.
52
+ I want to design a new feature for our product.
61
53
 
62
54
  We need to add a user profile system with the following requirements:
63
55
  1. Users should be able to create and edit their profiles
@@ -77,7 +69,7 @@ describe('Design Blueprint', { timeout: 120_000 }, () => {
77
69
 
78
70
  {
79
71
  const prompt = trim`
80
- I want this to be built on top of Durable Objects and SQLite database.
72
+ I want this to be built on top of Durable Objects and SQLite database.
81
73
  Adjust the spec to reflect this.
82
74
  `;
83
75
 
@@ -87,21 +79,17 @@ describe('Design Blueprint', { timeout: 120_000 }, () => {
87
79
  }
88
80
  },
89
81
  Effect.provide(
90
- Layer.mergeAll(
91
- makeToolResolverFromFunctions([Document.read, Document.update], testToolkit),
92
- makeToolExecutionServiceFromFunctions(testToolkit, testToolkit.toLayer({}) as any),
93
- AiService.model('@anthropic/claude-3-5-sonnet-20241022'),
94
- ).pipe(
95
- Layer.provideMerge(TestDatabaseLayer({ types: [DataType.Text, Markdown.Document, Blueprint.Blueprint] })),
96
- Layer.provideMerge(AiServiceTestingPreset('direct')),
82
+ Layer.mergeAll(ToolExecutionServices, AiService.model('@anthropic/claude-3-5-sonnet-20241022')).pipe(
83
+ Layer.provideMerge(TestDatabaseLayer({ types: [Text.Text, Markdown.Document, Blueprint.Blueprint] })),
84
+ Layer.provideMerge(Layer.mergeAll(GenericToolkit.providerEmpty, AiServiceTestingPreset('direct'))),
97
85
  Layer.provideMerge(
98
- FunctionInvocationService.layerTestMocked({ functions: [Document.read, Document.update] }).pipe(
99
- Layer.provideMerge(ComputeEventLogger.layerFromTracing),
100
- Layer.provideMerge(TracingService.layerNoop),
101
- ),
86
+ FunctionInvocationServiceLayerTestMocked({
87
+ functions: Object.values(MarkdownFunctions),
88
+ }).pipe(Layer.provideMerge(TracingService.layerNoop)),
102
89
  ),
103
90
  ),
104
91
  ),
92
+ TestHelpers.provideTestContext,
105
93
  TestHelpers.taggedTest('llm'),
106
94
  ),
107
95
  );
@@ -0,0 +1,46 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { ToolId } from '@dxos/ai';
6
+ import { type AppCapabilities } from '@dxos/app-toolkit';
7
+ import { Blueprint } from '@dxos/blueprints';
8
+ import { Ref } from '@dxos/echo';
9
+ import { Text } from '@dxos/schema';
10
+ import { trim } from '@dxos/util';
11
+
12
+ import { MarkdownFunctions } from '../markdown';
13
+
14
+ const BLUEPRINT_KEY = 'dxos.org/blueprint/design';
15
+
16
+ // TODO(burdon): Should this expose the functions directly or just reference them? How do we manage cross blueprint function dependencies?
17
+ const functions = Object.values(MarkdownFunctions);
18
+
19
+ const instructions = trim`
20
+ You manage a design spec based on the conversation.
21
+ The design spec is a markdown document that is used to record the tasks.
22
+ The design spec document follows a hierarchical structure, with nested markdown bulleted sections.
23
+ Use the appropriate tools to read and write the design spec document.
24
+ Maintain the document so that it can convey all relevant points from the conversation.
25
+ When replying to the user, be terse with your comments about design doc handling.
26
+ Do not announce when you read or write the design spec document.
27
+ `;
28
+
29
+ const make = () =>
30
+ Blueprint.make({
31
+ key: BLUEPRINT_KEY,
32
+ name: 'Design Spec',
33
+ description: 'Preserve the conversation in the design spec.',
34
+ instructions: {
35
+ source: Ref.make(Text.make(instructions)),
36
+ },
37
+ tools: functions.map((fn) => ToolId.make(fn.key)),
38
+ });
39
+
40
+ const blueprint: AppCapabilities.BlueprintDefinition = {
41
+ key: BLUEPRINT_KEY,
42
+ functions,
43
+ make,
44
+ };
45
+
46
+ export default blueprint;
@@ -2,6 +2,4 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import blueprint from './design-blueprint';
6
-
7
- export default blueprint;
5
+ export { default as DesignBlueprint } from './blueprint';
@@ -0,0 +1,46 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { ToolId } from '@dxos/ai';
6
+ import { type AppCapabilities } from '@dxos/app-toolkit';
7
+ import { Blueprint } from '@dxos/blueprints';
8
+ import { Ref } from '@dxos/echo';
9
+ import { Text } from '@dxos/schema';
10
+ import { trim } from '@dxos/util';
11
+
12
+ import { DiscordFunctions } from './functions';
13
+
14
+ const BLUEPRINT_KEY = 'dxos.org/blueprint/discord';
15
+
16
+ const functions = Object.values(DiscordFunctions);
17
+
18
+ /**
19
+ * Agent prompt instructions for managing hierarchical task lists.
20
+ */
21
+ const instructions = trim`
22
+ You are able to fetch messages from Discord servers.
23
+
24
+ Known servers:
25
+
26
+ DXOS serverId: 837138313172353095
27
+ `;
28
+
29
+ const make = () =>
30
+ Blueprint.make({
31
+ key: BLUEPRINT_KEY,
32
+ name: 'Discord',
33
+ description: 'Discord integration.',
34
+ instructions: {
35
+ source: Ref.make(Text.make(instructions)),
36
+ },
37
+ tools: [ToolId.make(DiscordFunctions.Fetch.key)],
38
+ });
39
+
40
+ const blueprint: AppCapabilities.BlueprintDefinition = {
41
+ key: BLUEPRINT_KEY,
42
+ functions,
43
+ make,
44
+ };
45
+
46
+ export default blueprint;
@@ -2,7 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import * as Toolkit from '@effect/ai/Toolkit';
6
5
  import * as FetchHttpClient from '@effect/platform/FetchHttpClient';
7
6
  import { describe, it } from '@effect/vitest';
8
7
  import * as Config from 'effect/Config';
@@ -10,29 +9,25 @@ import * as Effect from 'effect/Effect';
10
9
  import * as Layer from 'effect/Layer';
11
10
 
12
11
  import { AiService } from '@dxos/ai';
12
+ import { GenericToolkit } from '@dxos/ai';
13
13
  import { AiServiceTestingPreset } from '@dxos/ai/testing';
14
- import { makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from '@dxos/assistant';
15
- import { TestHelpers } from '@dxos/effect';
16
- import { ComputeEventLogger, CredentialsService, FunctionInvocationService, TracingService } from '@dxos/functions';
17
- import { TestDatabaseLayer } from '@dxos/functions/testing';
14
+ import { ToolExecutionServices } from '@dxos/assistant';
15
+ import { TestHelpers } from '@dxos/effect/testing';
16
+ import { CredentialsService, FunctionInvocationService, TracingService } from '@dxos/functions';
17
+ import { FunctionInvocationServiceLayerTestMocked, TestDatabaseLayer } from '@dxos/functions-runtime/testing';
18
18
 
19
19
  import { default as fetchMessages } from './fetch-messages';
20
20
 
21
- const TestLayer = Layer.mergeAll(
22
- AiService.model('@anthropic/claude-opus-4-0'),
23
- makeToolResolverFromFunctions([], Toolkit.make()),
24
- makeToolExecutionServiceFromFunctions(Toolkit.make() as any, Layer.empty as any),
25
- ComputeEventLogger.layerFromTracing,
26
- ).pipe(
21
+ const TestLayer = Layer.mergeAll(AiService.model('@anthropic/claude-opus-4-0'), ToolExecutionServices).pipe(
27
22
  Layer.provideMerge(
28
23
  Layer.mergeAll(
24
+ GenericToolkit.providerEmpty,
29
25
  AiServiceTestingPreset('direct'),
30
26
  TestDatabaseLayer({}),
31
27
  CredentialsService.layerConfig([{ service: 'discord.com', apiKey: Config.redacted('DISCORD_TOKEN') }]),
32
28
  FetchHttpClient.layer,
33
- FunctionInvocationService.layerTestMocked({ functions: [fetchMessages] }).pipe(
34
- Layer.provideMerge(ComputeEventLogger.layerFromTracing),
35
- Layer.provideMerge(TracingService.layerLogInfo()),
29
+ FunctionInvocationServiceLayerTestMocked({ functions: [fetchMessages] }).pipe(
30
+ Layer.provideMerge(TracingService.layerNoop),
36
31
  ),
37
32
  ),
38
33
  ),
@@ -53,6 +48,7 @@ describe('Feed', { timeout: 600_000 }, () => {
53
48
  console.log(messages);
54
49
  },
55
50
  Effect.provide(TestLayer),
51
+ TestHelpers.provideTestContext,
56
52
  TestHelpers.taggedTest('sync'),
57
53
  ),
58
54
  );