@dxos/assistant-toolkit 0.8.4-main.dfabb4ec29 → 0.8.4-main.effb148878

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 (258) hide show
  1. package/LICENSE +102 -5
  2. package/dist/lib/neutral/{add-artifact-ZUJ5DMSY.mjs → add-artifact-ZKSSMPLY.mjs} +6 -6
  3. package/dist/lib/neutral/{add-artifact-ZUJ5DMSY.mjs.map → add-artifact-ZKSSMPLY.mjs.map} +3 -3
  4. package/dist/lib/neutral/{agent-5NIKAYUK.mjs → agent-UIASE5LZ.mjs} +7 -7
  5. package/dist/lib/neutral/{agent-5NIKAYUK.mjs.map → agent-UIASE5LZ.mjs.map} +2 -2
  6. package/dist/lib/neutral/chunk-AF5TWFLV.mjs +66 -0
  7. package/dist/lib/neutral/chunk-AF5TWFLV.mjs.map +7 -0
  8. package/dist/lib/neutral/{chunk-P4ZMYO4K.mjs → chunk-CMHECL6N.mjs} +21 -33
  9. package/dist/lib/neutral/chunk-CMHECL6N.mjs.map +7 -0
  10. package/dist/lib/neutral/{chunk-ZFXLTBZG.mjs → chunk-DC5KITJP.mjs} +3 -2
  11. package/dist/lib/neutral/chunk-DC5KITJP.mjs.map +7 -0
  12. package/dist/lib/neutral/{chunk-WLR3BGO4.mjs → chunk-EUHZLWCG.mjs} +2 -1
  13. package/dist/lib/neutral/chunk-EUHZLWCG.mjs.map +7 -0
  14. package/dist/lib/neutral/{chunk-IKBIORQX.mjs → chunk-EUTROPCP.mjs} +22 -9
  15. package/dist/lib/neutral/chunk-EUTROPCP.mjs.map +7 -0
  16. package/dist/lib/neutral/{chunk-GV66MKAQ.mjs → chunk-FNN6ERC6.mjs} +4 -3
  17. package/dist/lib/neutral/chunk-FNN6ERC6.mjs.map +7 -0
  18. package/dist/lib/neutral/{chunk-246ACKSH.mjs → chunk-GEMRKH7J.mjs} +15 -12
  19. package/dist/lib/neutral/chunk-GEMRKH7J.mjs.map +7 -0
  20. package/dist/lib/neutral/{chunk-EJAQUAKM.mjs → chunk-GHGJCH73.mjs} +8 -5
  21. package/dist/lib/neutral/chunk-GHGJCH73.mjs.map +7 -0
  22. package/dist/lib/neutral/{chunk-KGU725LW.mjs → chunk-LO2S3ICN.mjs} +4 -7
  23. package/dist/lib/neutral/chunk-LO2S3ICN.mjs.map +7 -0
  24. package/dist/lib/neutral/{chunk-TO5IX24K.mjs → chunk-MMIERIDT.mjs} +12 -9
  25. package/dist/lib/neutral/chunk-MMIERIDT.mjs.map +7 -0
  26. package/dist/lib/neutral/{chunk-NR3GTWRC.mjs → chunk-OC77MYT5.mjs} +8 -13
  27. package/dist/lib/neutral/chunk-OC77MYT5.mjs.map +7 -0
  28. package/dist/lib/neutral/{chunk-ROMZO4CB.mjs → chunk-ONQXVECY.mjs} +11 -9
  29. package/dist/lib/neutral/chunk-ONQXVECY.mjs.map +7 -0
  30. package/dist/lib/neutral/{chunk-QO5SU37C.mjs → chunk-PAEPER4S.mjs} +3 -3
  31. package/dist/lib/neutral/{chunk-XUF53B6B.mjs → chunk-RIF2TKJJ.mjs} +10 -9
  32. package/dist/lib/neutral/chunk-RIF2TKJJ.mjs.map +7 -0
  33. package/dist/lib/neutral/{context-add-VB7AOY3G.mjs → context-add-VNJUVPSY.mjs} +4 -4
  34. package/dist/lib/neutral/context-add-VNJUVPSY.mjs.map +7 -0
  35. package/dist/lib/neutral/{context-remove-VCM3VPSO.mjs → context-remove-ZASL7ABZ.mjs} +4 -4
  36. package/dist/lib/neutral/context-remove-ZASL7ABZ.mjs.map +7 -0
  37. package/dist/lib/neutral/{create-project-EIF4OJMY.mjs → create-project-VNC2KKBG.mjs} +7 -7
  38. package/dist/lib/neutral/{delete-J3PMWP7Z.mjs → delete-NLBJMMBJ.mjs} +3 -3
  39. package/dist/lib/neutral/{enable-blueprints-LBDZH2CY.mjs → enable-blueprints-SMGQ2WCU.mjs} +4 -4
  40. package/dist/lib/neutral/enable-blueprints-SMGQ2WCU.mjs.map +7 -0
  41. package/dist/lib/neutral/{fetch-KHMHV7JR.mjs → fetch-VV3DU75K.mjs} +2 -2
  42. package/dist/lib/neutral/{fetch-messages-QOBBCTGC.mjs → fetch-messages-YXH77S3S.mjs} +2 -2
  43. package/dist/lib/neutral/{get-context-TN7X7U2H.mjs → get-context-LG2CNVII.mjs} +7 -7
  44. package/dist/lib/neutral/{get-context-TN7X7U2H.mjs.map → get-context-LG2CNVII.mjs.map} +3 -3
  45. package/dist/lib/neutral/index.mjs +84 -85
  46. package/dist/lib/neutral/index.mjs.map +3 -3
  47. package/dist/lib/neutral/{load-ALP3TK2E.mjs → load-K7HEJA54.mjs} +2 -2
  48. package/dist/lib/neutral/meta.json +1 -1
  49. package/dist/lib/neutral/{object-create-Z57Y3X6Y.mjs → object-create-EN6PJN3L.mjs} +4 -4
  50. package/dist/lib/neutral/{object-create-Z57Y3X6Y.mjs.map → object-create-EN6PJN3L.mjs.map} +2 -2
  51. package/dist/lib/neutral/{object-delete-X53LS37B.mjs → object-delete-RMA5ZKGY.mjs} +2 -2
  52. package/dist/lib/neutral/{object-update-GVKSBR7T.mjs → object-update-JW5PLR2T.mjs} +3 -3
  53. package/dist/lib/neutral/{object-update-GVKSBR7T.mjs.map → object-update-JW5PLR2T.mjs.map} +2 -2
  54. package/dist/lib/neutral/{project-HPHTZ2CI.mjs → project-OGO5ABSZ.mjs} +6 -6
  55. package/dist/lib/neutral/{project-rules-IVDHKSKI.mjs → project-rules-IVA3DSOW.mjs} +5 -5
  56. package/dist/lib/neutral/{prompt-Y7NN7M5D.mjs → prompt-YVFNLD7U.mjs} +5 -5
  57. package/dist/lib/neutral/{prompt-Y7NN7M5D.mjs.map → prompt-YVFNLD7U.mjs.map} +3 -3
  58. package/dist/lib/neutral/{qualifier-VDOY5CWU.mjs → qualifier-UTPO5E3S.mjs} +15 -14
  59. package/dist/lib/neutral/qualifier-UTPO5E3S.mjs.map +7 -0
  60. package/dist/lib/neutral/{query-PPJU5622.mjs → query-3FK3ED6L.mjs} +4 -5
  61. package/dist/lib/neutral/query-3FK3ED6L.mjs.map +7 -0
  62. package/dist/lib/neutral/{query-U56GNEV6.mjs → query-GXZT4KUX.mjs} +3 -3
  63. package/dist/lib/neutral/{query-blueprints-KXADGHSA.mjs → query-blueprints-GA2JM54N.mjs} +2 -2
  64. package/dist/lib/neutral/{relation-create-XJ2IX6X3.mjs → relation-create-XOFKYPL2.mjs} +3 -3
  65. package/dist/lib/neutral/{relation-create-XJ2IX6X3.mjs.map → relation-create-XOFKYPL2.mjs.map} +3 -3
  66. package/dist/lib/neutral/{relation-delete-EP4KXAFL.mjs → relation-delete-MVJKKVEQ.mjs} +2 -2
  67. package/dist/lib/neutral/{save-GWAPLT3Z.mjs → save-TFQMJKG7.mjs} +3 -3
  68. package/dist/lib/neutral/{schema-add-Z5CY6P24.mjs → schema-add-I7BFBU55.mjs} +2 -2
  69. package/dist/lib/neutral/schema-list-TYGGAO2P.mjs +49 -0
  70. package/dist/lib/neutral/schema-list-TYGGAO2P.mjs.map +7 -0
  71. package/dist/lib/neutral/{sync-issues-4YE5XAK5.mjs → sync-issues-3U3EL6KO.mjs} +5 -6
  72. package/dist/lib/neutral/sync-issues-3U3EL6KO.mjs.map +7 -0
  73. package/dist/lib/neutral/{sync-triggers-CDMJVW6E.mjs → sync-triggers-M6U6RAKN.mjs} +39 -37
  74. package/dist/lib/neutral/sync-triggers-M6U6RAKN.mjs.map +7 -0
  75. package/dist/lib/neutral/{tag-add-VNIIOVJA.mjs → tag-add-RCE2QULJ.mjs} +3 -3
  76. package/dist/lib/neutral/{tag-add-VNIIOVJA.mjs.map → tag-add-RCE2QULJ.mjs.map} +3 -3
  77. package/dist/lib/neutral/{tag-remove-6R2R27W3.mjs → tag-remove-EPKB5CDE.mjs} +3 -3
  78. package/dist/lib/neutral/{tag-remove-6R2R27W3.mjs.map → tag-remove-EPKB5CDE.mjs.map} +3 -3
  79. package/dist/lib/neutral/testing/index.mjs +7 -10
  80. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  81. package/dist/lib/neutral/{update-blueprints-N2AK2VUR.mjs → update-blueprints-VOGJKSMQ.mjs} +2 -2
  82. package/dist/lib/neutral/update-tasks-PNNNCPWH.mjs +13 -0
  83. package/dist/lib/neutral/update-tasks-PNNNCPWH.mjs.map +7 -0
  84. package/dist/types/src/blueprints/blueprint-manager/functions/definitions.d.ts +10 -12
  85. package/dist/types/src/blueprints/blueprint-manager/functions/definitions.d.ts.map +1 -1
  86. package/dist/types/src/blueprints/blueprint-manager/functions/enable-blueprints.d.ts +6 -7
  87. package/dist/types/src/blueprints/blueprint-manager/functions/enable-blueprints.d.ts.map +1 -1
  88. package/dist/types/src/blueprints/blueprint-manager/functions/query-blueprints.d.ts +4 -5
  89. package/dist/types/src/blueprints/database/functions/context-add.d.ts +3 -3
  90. package/dist/types/src/blueprints/database/functions/context-add.d.ts.map +1 -1
  91. package/dist/types/src/blueprints/database/functions/context-remove.d.ts +3 -3
  92. package/dist/types/src/blueprints/database/functions/context-remove.d.ts.map +1 -1
  93. package/dist/types/src/blueprints/database/functions/definitions.d.ts +17 -17
  94. package/dist/types/src/blueprints/database/functions/definitions.d.ts.map +1 -1
  95. package/dist/types/src/blueprints/database/functions/load.d.ts +2 -2
  96. package/dist/types/src/blueprints/database/functions/load.d.ts.map +1 -1
  97. package/dist/types/src/blueprints/database/functions/object-delete.d.ts +1 -1
  98. package/dist/types/src/blueprints/database/functions/object-update.d.ts +2 -2
  99. package/dist/types/src/blueprints/database/functions/object-update.d.ts.map +1 -1
  100. package/dist/types/src/blueprints/database/functions/query.d.ts +2 -3
  101. package/dist/types/src/blueprints/database/functions/query.d.ts.map +1 -1
  102. package/dist/types/src/blueprints/database/functions/relation-create.d.ts +3 -3
  103. package/dist/types/src/blueprints/database/functions/relation-create.d.ts.map +1 -1
  104. package/dist/types/src/blueprints/database/functions/relation-delete.d.ts +1 -1
  105. package/dist/types/src/blueprints/database/functions/schema-list.d.ts.map +1 -1
  106. package/dist/types/src/blueprints/database/functions/tag-add.d.ts +3 -3
  107. package/dist/types/src/blueprints/database/functions/tag-add.d.ts.map +1 -1
  108. package/dist/types/src/blueprints/database/functions/tag-remove.d.ts +3 -3
  109. package/dist/types/src/blueprints/database/functions/tag-remove.d.ts.map +1 -1
  110. package/dist/types/src/blueprints/discord/functions/definitions.d.ts.map +1 -1
  111. package/dist/types/src/blueprints/github/functions/definitions.d.ts.map +1 -1
  112. package/dist/types/src/blueprints/linear/functions/definitions.d.ts.map +1 -1
  113. package/dist/types/src/blueprints/linear/functions/sync-issues.d.ts.map +1 -1
  114. package/dist/types/src/blueprints/memory/functions/definitions.d.ts +2 -2
  115. package/dist/types/src/blueprints/memory/functions/definitions.d.ts.map +1 -1
  116. package/dist/types/src/blueprints/memory/functions/delete.d.ts +2 -2
  117. package/dist/types/src/blueprints/planning/functions/index.d.ts +1 -1
  118. package/dist/types/src/blueprints/planning/functions/index.d.ts.map +1 -1
  119. package/dist/types/src/blueprints/planning/functions/update-tasks.d.ts +14 -1
  120. package/dist/types/src/blueprints/planning/functions/update-tasks.d.ts.map +1 -1
  121. package/dist/types/src/blueprints/planning/functions/update-tasks.test.d.ts +2 -0
  122. package/dist/types/src/blueprints/planning/functions/update-tasks.test.d.ts.map +1 -0
  123. package/dist/types/src/blueprints/project/functions/add-artifact.d.ts +1 -5
  124. package/dist/types/src/blueprints/project/functions/add-artifact.d.ts.map +1 -1
  125. package/dist/types/src/blueprints/project/functions/definitions.d.ts +60 -45
  126. package/dist/types/src/blueprints/project/functions/definitions.d.ts.map +1 -1
  127. package/dist/types/src/blueprints/project/functions/get-context.d.ts +1 -12
  128. package/dist/types/src/blueprints/project/functions/get-context.d.ts.map +1 -1
  129. package/dist/types/src/blueprints/project/functions/qualifier.d.ts +3 -71
  130. package/dist/types/src/blueprints/project/functions/qualifier.d.ts.map +1 -1
  131. package/dist/types/src/blueprints/project-wizard/functions/create-project.d.ts +22 -18
  132. package/dist/types/src/blueprints/project-wizard/functions/definitions.d.ts +43 -36
  133. package/dist/types/src/blueprints/project-wizard/functions/definitions.d.ts.map +1 -1
  134. package/dist/types/src/blueprints/project-wizard/functions/sync-triggers.d.ts +21 -17
  135. package/dist/types/src/blueprints/project-wizard/functions/sync-triggers.d.ts.map +1 -1
  136. package/dist/types/src/blueprints/testing.d.ts +4 -4
  137. package/dist/types/src/blueprints/testing.d.ts.map +1 -1
  138. package/dist/types/src/blueprints/websearch/functions/definitions.d.ts.map +1 -1
  139. package/dist/types/src/crud/graph.d.ts +8 -11
  140. package/dist/types/src/crud/graph.d.ts.map +1 -1
  141. package/dist/types/src/errors.d.ts +3 -3
  142. package/dist/types/src/errors.d.ts.map +1 -1
  143. package/dist/types/src/functions/agent/definitions.d.ts +12 -13
  144. package/dist/types/src/functions/agent/definitions.d.ts.map +1 -1
  145. package/dist/types/src/sync/sync.d.ts +1 -2
  146. package/dist/types/src/sync/sync.d.ts.map +1 -1
  147. package/dist/types/src/testing/plugins.d.ts +1 -1
  148. package/dist/types/src/testing/plugins.d.ts.map +1 -1
  149. package/dist/types/src/types/Agent.d.ts +23 -22
  150. package/dist/types/src/types/Agent.d.ts.map +1 -1
  151. package/dist/types/src/types/Chat.d.ts +17 -20
  152. package/dist/types/src/types/Chat.d.ts.map +1 -1
  153. package/dist/types/src/types/McpServer.d.ts +1 -2
  154. package/dist/types/src/types/McpServer.d.ts.map +1 -1
  155. package/dist/types/src/types/Memory.d.ts +1 -2
  156. package/dist/types/src/types/Memory.d.ts.map +1 -1
  157. package/dist/types/src/types/Plan.d.ts +14 -16
  158. package/dist/types/src/types/Plan.d.ts.map +1 -1
  159. package/dist/types/tsconfig.tsbuildinfo +1 -1
  160. package/package.json +26 -26
  161. package/src/blueprints/automation/blueprint.ts +3 -3
  162. package/src/blueprints/blueprint-manager/blueprint.conversations.json +1 -1
  163. package/src/blueprints/blueprint-manager/blueprint.test.ts +23 -19
  164. package/src/blueprints/blueprint-manager/functions/definitions.ts +8 -5
  165. package/src/blueprints/blueprint-manager/functions/enable-blueprints.ts +2 -2
  166. package/src/blueprints/database/blueprint.conversations.json +1 -1
  167. package/src/blueprints/database/blueprint.test.ts +15 -15
  168. package/src/blueprints/database/functions/context-add.ts +2 -2
  169. package/src/blueprints/database/functions/context-remove.ts +2 -2
  170. package/src/blueprints/database/functions/definitions.ts +19 -6
  171. package/src/blueprints/database/functions/object-create.ts +2 -2
  172. package/src/blueprints/database/functions/object-update.ts +1 -1
  173. package/src/blueprints/database/functions/query.ts +3 -4
  174. package/src/blueprints/database/functions/relation-create.ts +1 -1
  175. package/src/blueprints/database/functions/schema-list.ts +17 -10
  176. package/src/blueprints/database/functions/tag-add.ts +1 -1
  177. package/src/blueprints/database/functions/tag-remove.ts +1 -1
  178. package/src/blueprints/discord/functions/definitions.ts +1 -0
  179. package/src/blueprints/discord/functions/fetch-messages.test.ts +7 -2
  180. package/src/blueprints/github/functions/definitions.ts +1 -0
  181. package/src/blueprints/linear/functions/definitions.ts +1 -0
  182. package/src/blueprints/linear/functions/linear.test.ts +1 -2
  183. package/src/blueprints/linear/functions/sync-issues.ts +1 -2
  184. package/src/blueprints/memory/blueprint.conversations.json +1 -1
  185. package/src/blueprints/memory/functions/definitions.ts +3 -0
  186. package/src/blueprints/planning/blueprint.ts +1 -1
  187. package/src/blueprints/planning/functions/index.ts +1 -1
  188. package/src/blueprints/planning/functions/{definitions.ts → update-tasks.md} +29 -50
  189. package/src/blueprints/planning/functions/update-tasks.test.ts +55 -0
  190. package/src/blueprints/planning/functions/update-tasks.ts +26 -3
  191. package/src/blueprints/project/blueprint.conversations.json +1 -1
  192. package/src/blueprints/project/blueprint.test.ts +12 -14
  193. package/src/blueprints/project/functions/add-artifact.ts +1 -0
  194. package/src/blueprints/project/functions/agent.ts +2 -2
  195. package/src/blueprints/project/functions/definitions.ts +8 -6
  196. package/src/blueprints/project/functions/get-context.ts +2 -1
  197. package/src/blueprints/project/functions/qualifier.ts +8 -7
  198. package/src/blueprints/project-wizard/functions/definitions.ts +6 -4
  199. package/src/blueprints/project-wizard/functions/sync-triggers.ts +32 -34
  200. package/src/blueprints/testing.ts +10 -4
  201. package/src/blueprints/websearch/blueprint.conversations.json +1 -1
  202. package/src/blueprints/websearch/functions/definitions.ts +1 -0
  203. package/src/crud/graph.test.ts +1 -1
  204. package/src/crud/graph.ts +142 -151
  205. package/src/errors.ts +3 -3
  206. package/src/functions/agent/definitions.ts +2 -1
  207. package/src/functions/agent/prompt.conversations.json +1 -1
  208. package/src/functions/agent/prompt.test.ts +8 -11
  209. package/src/functions/agent/prompt.ts +2 -2
  210. package/src/sync/sync.ts +7 -6
  211. package/src/testing/plugins.tsx +8 -13
  212. package/src/types/Agent.ts +24 -29
  213. package/src/types/Chat.ts +9 -16
  214. package/src/types/McpServer.ts +3 -6
  215. package/src/types/Memory.ts +3 -3
  216. package/src/types/Plan.ts +4 -11
  217. package/dist/lib/neutral/chunk-246ACKSH.mjs.map +0 -7
  218. package/dist/lib/neutral/chunk-EJAQUAKM.mjs.map +0 -7
  219. package/dist/lib/neutral/chunk-FIGO6CA6.mjs +0 -140
  220. package/dist/lib/neutral/chunk-FIGO6CA6.mjs.map +0 -7
  221. package/dist/lib/neutral/chunk-GV66MKAQ.mjs.map +0 -7
  222. package/dist/lib/neutral/chunk-IKBIORQX.mjs.map +0 -7
  223. package/dist/lib/neutral/chunk-KGU725LW.mjs.map +0 -7
  224. package/dist/lib/neutral/chunk-NR3GTWRC.mjs.map +0 -7
  225. package/dist/lib/neutral/chunk-P4ZMYO4K.mjs.map +0 -7
  226. package/dist/lib/neutral/chunk-ROMZO4CB.mjs.map +0 -7
  227. package/dist/lib/neutral/chunk-TO5IX24K.mjs.map +0 -7
  228. package/dist/lib/neutral/chunk-WLR3BGO4.mjs.map +0 -7
  229. package/dist/lib/neutral/chunk-XUF53B6B.mjs.map +0 -7
  230. package/dist/lib/neutral/chunk-ZFXLTBZG.mjs.map +0 -7
  231. package/dist/lib/neutral/context-add-VB7AOY3G.mjs.map +0 -7
  232. package/dist/lib/neutral/context-remove-VCM3VPSO.mjs.map +0 -7
  233. package/dist/lib/neutral/enable-blueprints-LBDZH2CY.mjs.map +0 -7
  234. package/dist/lib/neutral/qualifier-VDOY5CWU.mjs.map +0 -7
  235. package/dist/lib/neutral/query-PPJU5622.mjs.map +0 -7
  236. package/dist/lib/neutral/schema-list-W326VPVX.mjs +0 -38
  237. package/dist/lib/neutral/schema-list-W326VPVX.mjs.map +0 -7
  238. package/dist/lib/neutral/sync-issues-4YE5XAK5.mjs.map +0 -7
  239. package/dist/lib/neutral/sync-triggers-CDMJVW6E.mjs.map +0 -7
  240. package/dist/lib/neutral/update-tasks-H7SWIFQL.mjs +0 -46
  241. package/dist/lib/neutral/update-tasks-H7SWIFQL.mjs.map +0 -7
  242. package/dist/types/src/blueprints/planning/functions/definitions.d.ts +0 -11
  243. package/dist/types/src/blueprints/planning/functions/definitions.d.ts.map +0 -1
  244. /package/dist/lib/neutral/{chunk-QO5SU37C.mjs.map → chunk-PAEPER4S.mjs.map} +0 -0
  245. /package/dist/lib/neutral/{create-project-EIF4OJMY.mjs.map → create-project-VNC2KKBG.mjs.map} +0 -0
  246. /package/dist/lib/neutral/{delete-J3PMWP7Z.mjs.map → delete-NLBJMMBJ.mjs.map} +0 -0
  247. /package/dist/lib/neutral/{fetch-KHMHV7JR.mjs.map → fetch-VV3DU75K.mjs.map} +0 -0
  248. /package/dist/lib/neutral/{fetch-messages-QOBBCTGC.mjs.map → fetch-messages-YXH77S3S.mjs.map} +0 -0
  249. /package/dist/lib/neutral/{load-ALP3TK2E.mjs.map → load-K7HEJA54.mjs.map} +0 -0
  250. /package/dist/lib/neutral/{object-delete-X53LS37B.mjs.map → object-delete-RMA5ZKGY.mjs.map} +0 -0
  251. /package/dist/lib/neutral/{project-HPHTZ2CI.mjs.map → project-OGO5ABSZ.mjs.map} +0 -0
  252. /package/dist/lib/neutral/{project-rules-IVDHKSKI.mjs.map → project-rules-IVA3DSOW.mjs.map} +0 -0
  253. /package/dist/lib/neutral/{query-U56GNEV6.mjs.map → query-GXZT4KUX.mjs.map} +0 -0
  254. /package/dist/lib/neutral/{query-blueprints-KXADGHSA.mjs.map → query-blueprints-GA2JM54N.mjs.map} +0 -0
  255. /package/dist/lib/neutral/{relation-delete-EP4KXAFL.mjs.map → relation-delete-MVJKKVEQ.mjs.map} +0 -0
  256. /package/dist/lib/neutral/{save-GWAPLT3Z.mjs.map → save-TFQMJKG7.mjs.map} +0 -0
  257. /package/dist/lib/neutral/{schema-add-Z5CY6P24.mjs.map → schema-add-I7BFBU55.mjs.map} +0 -0
  258. /package/dist/lib/neutral/{update-blueprints-N2AK2VUR.mjs.map → update-blueprints-VOGJKSMQ.mjs.map} +0 -0
package/src/crud/graph.ts CHANGED
@@ -11,23 +11,18 @@ import * as Option from 'effect/Option';
11
11
  import * as Schema from 'effect/Schema';
12
12
  import * as SchemaAST from 'effect/SchemaAST';
13
13
 
14
- import { Entity, Filter, Obj, Query, Type } from '@dxos/echo';
15
- import { Database } from '@dxos/echo';
16
- import { type Queue } from '@dxos/echo-db';
14
+ import { Database, Entity, Feed, Filter, Obj, Query, Type } from '@dxos/echo';
17
15
  import { isEncodedReference } from '@dxos/echo-protocol';
18
16
  import {
19
17
  ReferenceAnnotationId,
20
- RelationSourceDXNId,
21
18
  RelationSourceId,
22
- RelationTargetDXNId,
23
19
  RelationTargetId,
24
20
  createObject,
25
21
  getTypeAnnotation,
26
22
  getTypeIdentifierAnnotation,
27
23
  } from '@dxos/echo/internal';
28
24
  import { mapAst } from '@dxos/effect';
29
- import { ContextQueueService } from '@dxos/functions';
30
- import { DXN, ObjectId } from '@dxos/keys';
25
+ import { DXN, EchoURI, ObjectId, type URI } from '@dxos/keys';
31
26
  import { log } from '@dxos/log';
32
27
  import { deepMapValues, isNonNullable, trim } from '@dxos/util';
33
28
 
@@ -37,8 +32,7 @@ export const Subgraph = Schema.Struct({
37
32
  objects: Schema.Array(Schema.Any),
38
33
  });
39
34
 
40
- export interface Subgraph extends Schema.Schema.Type<typeof Subgraph> {}
41
-
35
+ export type Subgraph = Schema.Schema.Type<typeof Subgraph>;
42
36
  export type RelatedSchema = {
43
37
  schema: Type.AnyEntity;
44
38
  kind: 'reference' | 'relation';
@@ -57,14 +51,15 @@ export const findRelatedSchema = async (db: Database.Database, anchor: Type.AnyE
57
51
 
58
52
  // TODO(dmaretskyi): Also do references.
59
53
  return allSchemas
60
- .filter((schema) => {
54
+ .filter((type) => {
55
+ const schema = Type.getSchema(type);
61
56
  if (getTypeAnnotation(schema)?.kind !== Entity.Kind.Relation) {
62
57
  return false;
63
58
  }
64
59
 
65
60
  return (
66
- isSchemaAddressableByDxn(anchor, DXN.parse(getTypeAnnotation(schema)!.sourceSchema!)) ||
67
- isSchemaAddressableByDxn(anchor, DXN.parse(getTypeAnnotation(schema)!.targetSchema!))
61
+ isSchemaAddressableByDXN(anchor, getTypeAnnotation(schema)!.sourceSchema!) ||
62
+ isSchemaAddressableByDXN(anchor, getTypeAnnotation(schema)!.targetSchema!)
68
63
  );
69
64
  })
70
65
  .map(
@@ -79,17 +74,12 @@ export const findRelatedSchema = async (db: Database.Database, anchor: Type.AnyE
79
74
  * Non-strict DXN comparison.
80
75
  * Returns true if the DXN could be resolved to the schema.
81
76
  */
82
- const isSchemaAddressableByDxn = (schema: Type.AnyEntity, dxn: DXN): boolean => {
83
- if (getTypeIdentifierAnnotation(schema) === dxn.toString()) {
77
+ const isSchemaAddressableByDXN = (type: Type.AnyEntity, dxn: DXN.DXN): boolean => {
78
+ if (getTypeIdentifierAnnotation(Type.getSchema(type)) === dxn) {
84
79
  return true;
85
80
  }
86
81
 
87
- const t = dxn.asTypeDXN();
88
- if (t) {
89
- return t.type === Type.getTypename(schema);
90
- }
91
-
92
- return false;
82
+ return DXN.getName(dxn) === Type.getTypename(type);
93
83
  };
94
84
 
95
85
  /**
@@ -106,7 +96,7 @@ export const LocalSearchToolkit = Toolkit.make(
106
96
  },
107
97
  success: Schema.Unknown,
108
98
  failure: Schema.Never,
109
- dependencies: [Database.Service],
99
+ dependencies: [Database.Service, Feed.FeedService],
110
100
  }),
111
101
  );
112
102
 
@@ -115,11 +105,11 @@ export const LocalSearchHandler = LocalSearchToolkit.toLayer({
115
105
  const objects = yield* Database.runQuery(Query.select(Filter.text(query, { type: 'vector' })));
116
106
  const results = [...objects];
117
107
 
118
- const option = yield* Effect.serviceOption(ContextQueueService);
119
- if (Option.isSome(option)) {
120
- const queueObjects = yield* Effect.promise(() => option.value.queue.queryObjects());
121
- // TODO(dmaretskyi): Text search on the queue.
122
- results.push(...queueObjects);
108
+ const feedOption = yield* Effect.serviceOption(Feed.ContextFeedService);
109
+ if (Option.isSome(feedOption)) {
110
+ const feedObjects = yield* Feed.runQuery(feedOption.value.feed, Filter.everything());
111
+ // TODO(dmaretskyi): Text search on the feed.
112
+ results.push(...feedObjects);
123
113
  }
124
114
 
125
115
  return trim`
@@ -150,7 +140,7 @@ export const makeGraphWriterToolkit = ({ schema }: { schema: Type.AnyEntity[] })
150
140
  parameters: createExtractionSchema(schema).fields,
151
141
  success: Schema.Unknown,
152
142
  failure: Schema.Never,
153
- dependencies: [Database.Service, ContextQueueService],
143
+ dependencies: [Database.Service, Feed.ContextFeedService, Feed.FeedService],
154
144
  }).annotateContext(Context.make(GraphWriterSchema, { schema })),
155
145
  );
156
146
  };
@@ -160,7 +150,7 @@ export const makeGraphWriterHandler = (
160
150
  {
161
151
  onAppend,
162
152
  }: {
163
- onAppend?: (object: DXN[]) => void;
153
+ onAppend?: (object: URI.URI[]) => void;
164
154
  } = {},
165
155
  ) => {
166
156
  const { schema } = Context.get(
@@ -171,11 +161,11 @@ export const makeGraphWriterHandler = (
171
161
  return toolkit.toLayer({
172
162
  graph_writer: Effect.fn(function* (input) {
173
163
  const { db } = yield* Database.Service;
174
- const { queue } = yield* ContextQueueService;
175
- const data = yield* Effect.promise(() => sanitizeObjects(schema, input as any, db, queue));
176
- yield* Effect.promise(() => queue.append(data as Obj.Unknown[]));
164
+ const { feed } = yield* Feed.ContextFeedService;
165
+ const data = yield* sanitizeObjects(schema, input as any, db, feed);
166
+ yield* Feed.append(feed, data as Obj.Unknown[]);
177
167
 
178
- const dxns = data.map((obj) => Obj.getDXN(obj));
168
+ const dxns = data.map((obj) => Entity.getURI(obj));
179
169
  onAppend?.(dxns);
180
170
  return dxns;
181
171
  }),
@@ -188,149 +178,150 @@ export const makeGraphWriterHandler = (
188
178
  export const createExtractionSchema = (types: Type.AnyEntity[]) => {
189
179
  return Schema.Struct({
190
180
  ...Object.fromEntries(
191
- types.map(preprocessSchema).map((schema, index) => [
192
- `objects_${getSanitizedSchemaName(types[index])}`,
193
- Schema.optional(Schema.Array(schema)).annotations({
194
- description: `The objects of type: ${Type.getDXN(types[index])?.asTypeDXN()!.type}. ${SchemaAST.getDescriptionAnnotation(types[index].ast).pipe(Option.getOrElse(() => ''))}`,
195
- }),
196
- ]),
181
+ types
182
+ .map((type) => preprocessSchema(Type.getSchema(type)))
183
+ .map((schema, index) => [
184
+ `objects_${getSanitizedSchemaName(types[index])}`,
185
+ Schema.optional(Schema.Array(schema)).annotations({
186
+ description: `The objects of type: ${DXN.getName(DXN.tryMake(Type.getURI(types[index])!)!)}. ${SchemaAST.getDescriptionAnnotation(Type.getSchema(types[index]).ast).pipe(Option.getOrElse(() => ''))}`,
187
+ }),
188
+ ]),
197
189
  ),
198
190
  });
199
191
  };
200
192
 
201
193
  export const getSanitizedSchemaName = (schema: Type.AnyEntity) => {
202
- return Type.getDXN(schema)!
203
- .asTypeDXN()!
204
- .type.replaceAll(/[^a-zA-Z0-9]+/g, '_');
194
+ return DXN.getName(DXN.tryMake(Type.getURI(schema)!)!).replaceAll(/[^a-zA-Z0-9]+/g, '_');
205
195
  };
206
196
 
207
- export const sanitizeObjects = async (
197
+ export const sanitizeObjects = (
208
198
  types: Type.AnyEntity[],
209
199
  data: Record<string, readonly unknown[]>,
210
200
  db: Database.Database,
211
- queue?: Queue,
212
- ): Promise<Obj.Unknown[]> => {
213
- const entries = types
214
- .map(
215
- (type) =>
216
- data[`objects_${getSanitizedSchemaName(type)}`]?.map((object: any) => ({
217
- data: object,
218
- schema: type,
219
- })) ?? [],
220
- )
221
- .flat();
222
-
223
- const idMap = new Map<string, string>();
224
- const existingIds = new Set<ObjectId>();
225
- const enitties = new Map<ObjectId, Entity.Unknown>();
226
-
227
- const resolveId = (id: string): DXN | undefined => {
228
- if (ObjectId.isValid(id)) {
229
- existingIds.add(id);
230
- return DXN.fromLocalObjectId(id);
231
- }
201
+ feed?: Feed.Feed,
202
+ ): Effect.Effect<Entity.Unknown[], never, Feed.FeedService> =>
203
+ Effect.gen(function* () {
204
+ const entries = types
205
+ .map(
206
+ (type) =>
207
+ data[`objects_${getSanitizedSchemaName(type)}`]?.map((object: any) => ({
208
+ data: object,
209
+ schema: type,
210
+ })) ?? [],
211
+ )
212
+ .flat();
213
+
214
+ const idMap = new Map<string, string>();
215
+ const existingIds = new Set<ObjectId>();
216
+ const enitties = new Map<ObjectId, Entity.Unknown>();
217
+
218
+ const resolveId = (id: string): EchoURI.EchoURI | undefined => {
219
+ if (ObjectId.isValid(id)) {
220
+ existingIds.add(id);
221
+ return EchoURI.make({ objectId: id });
222
+ }
232
223
 
233
- const mappedId = idMap.get(id);
234
- if (mappedId) {
235
- return DXN.fromLocalObjectId(mappedId);
236
- }
224
+ const mappedId = idMap.get(id);
225
+ if (mappedId && ObjectId.isValid(mappedId)) {
226
+ return EchoURI.make({ objectId: mappedId });
227
+ }
237
228
 
238
- return undefined;
239
- };
229
+ return undefined;
230
+ };
240
231
 
241
- const res = entries
242
- .map((entry) => {
243
- // This entry mutates existing object.
244
- if (ObjectId.isValid(entry.data.id)) {
232
+ const res = entries
233
+ .map((entry) => {
234
+ // This entry mutates existing object.
235
+ if (ObjectId.isValid(entry.data.id)) {
236
+ return entry;
237
+ }
238
+
239
+ idMap.set(entry.data.id, ObjectId.random());
240
+ entry.data.id = idMap.get(entry.data.id);
245
241
  return entry;
246
- }
242
+ })
243
+ .map((entry) => {
244
+ const data = deepMapValues(entry.data, (value, recurse) => {
245
+ if (isEncodedReference(value)) {
246
+ const ref = value['/'];
247
+ const id = resolveId(ref);
248
+
249
+ if (id) {
250
+ // Link to an existing object.
251
+ return { '/': id.toString() };
252
+ } else {
253
+ // Search URIs?
254
+ return { '/': `search:?q=${encodeURIComponent(ref)}` };
255
+ }
256
+ }
247
257
 
248
- idMap.set(entry.data.id, ObjectId.random());
249
- entry.data.id = idMap.get(entry.data.id);
250
- return entry;
251
- })
252
- .map((entry) => {
253
- const data = deepMapValues(entry.data, (value, recurse) => {
254
- if (isEncodedReference(value)) {
255
- const ref = value['/'];
256
- const id = resolveId(ref);
257
-
258
- if (id) {
259
- // Link to an existing object.
260
- return { '/': id.toString() };
261
- } else {
262
- // Search URIs?
263
- return { '/': `search:?q=${encodeURIComponent(ref)}` };
258
+ return recurse(value);
259
+ });
260
+
261
+ let sourceUri: EchoURI.EchoURI | undefined;
262
+ let targetUri: EchoURI.EchoURI | undefined;
263
+ if (Entity.getKind(Type.getSchema(entry.schema)) === 'relation') {
264
+ sourceUri = resolveId(data.source);
265
+ if (!sourceUri) {
266
+ log.warn('source not found', { source: data.source });
264
267
  }
268
+ targetUri = resolveId(data.target);
269
+ if (!targetUri) {
270
+ log.warn('target not found', { target: data.target });
271
+ }
272
+ delete data.source;
273
+ delete data.target;
265
274
  }
266
275
 
267
- return recurse(value);
268
- });
276
+ return {
277
+ data,
278
+ schema: entry.schema,
279
+ sourceUri,
280
+ targetUri,
281
+ };
282
+ })
283
+ .filter((object) => !existingIds.has(object.data.id)); // TODO(dmaretskyi): This dissallows updating existing objects.
284
+
285
+ // TODO(dmaretskyi): Use ref resolver.
286
+ const dbObjects = yield* Effect.promise(() => db.query(Query.select(Filter.id(...existingIds))).run());
287
+ const feedObjects = feed && existingIds.size > 0 ? yield* Feed.runQuery(feed, Filter.id(...existingIds)) : [];
288
+ const objects = [...dbObjects, ...feedObjects].filter(isNonNullable);
289
+
290
+ // TODO(dmaretskyi): Returns everything if IDs are empty!
291
+ log.info('objects', { dbObjects, feedObjects, existingIds });
292
+ const missing = Array.from(existingIds).filter((id) => !objects.some((object) => object.id === id));
293
+ if (missing.length > 0) {
294
+ throw new Error(`Object IDs do not point to existing objects: ${missing.join(', ')}`);
295
+ }
269
296
 
270
- if (Entity.getKind(entry.schema) === 'relation') {
271
- const sourceDxn = resolveId(data.source);
272
- if (!sourceDxn) {
273
- log.warn('source not found', { source: data.source });
297
+ return res.flatMap(({ data, schema, sourceUri, targetUri }) => {
298
+ let skip = false;
299
+ if (sourceUri) {
300
+ const id = EchoURI.getObjectId(sourceUri);
301
+ const obj = objects.find((object) => object.id === id) ?? (id ? enitties.get(id) : undefined);
302
+ if (obj) {
303
+ data[RelationSourceId] = obj;
304
+ } else {
305
+ skip = true;
274
306
  }
275
- const targetDxn = resolveId(data.target);
276
- if (!targetDxn) {
277
- log.warn('target not found', { target: data.target });
278
- }
279
- delete data.source;
280
- delete data.target;
281
- data[RelationSourceDXNId] = sourceDxn;
282
- data[RelationTargetDXNId] = targetDxn;
283
307
  }
284
-
285
- return {
286
- data,
287
- schema: entry.schema,
288
- };
289
- })
290
- .filter((object) => !existingIds.has(object.data.id)); // TODO(dmaretskyi): This dissallows updating existing objects.
291
-
292
- // TODO(dmaretskyi): Use ref resolver.
293
- const dbObjects = await db.query(Query.select(Filter.id(...existingIds))).run();
294
- const queueObjects = (await queue?.getObjectsById([...existingIds])) ?? [];
295
- const objects = [...dbObjects, ...queueObjects].filter(isNonNullable);
296
-
297
- // TODO(dmaretskyi): Returns everything if IDs are empty!
298
- log.info('objects', { dbObjects, queueObjects, existingIds });
299
- const missing = Array.from(existingIds).filter((id) => !objects.some((object) => object.id === id));
300
- if (missing.length > 0) {
301
- throw new Error(`Object IDs do not point to existing objects: ${missing.join(', ')}`);
302
- }
303
-
304
- return res.flatMap(({ data, schema }) => {
305
- let skip = false;
306
- if (RelationSourceDXNId in data) {
307
- const id = (data[RelationSourceDXNId] as DXN).asEchoDXN()?.echoId;
308
- const obj = objects.find((object) => object.id === id) ?? enitties.get(id!);
309
- if (obj) {
310
- delete data[RelationSourceDXNId];
311
- data[RelationSourceId] = obj;
312
- } else {
313
- skip = true;
308
+ if (targetUri) {
309
+ const id = EchoURI.getObjectId(targetUri);
310
+ const obj = objects.find((object) => object.id === id) ?? (id ? enitties.get(id) : undefined);
311
+ if (obj) {
312
+ data[RelationTargetId] = obj;
313
+ } else {
314
+ skip = true;
315
+ }
314
316
  }
315
- }
316
- if (RelationTargetDXNId in data) {
317
- const id = (data[RelationTargetDXNId] as DXN).asEchoDXN()?.echoId;
318
- const obj = objects.find((object) => object.id === id) ?? enitties.get(id!);
319
- if (obj) {
320
- delete data[RelationTargetDXNId];
321
- data[RelationTargetId] = obj;
322
- } else {
323
- skip = true;
317
+ if (!skip) {
318
+ const obj = createObject(schema, data);
319
+ enitties.set(obj.id, obj);
320
+ return [obj];
324
321
  }
325
- }
326
- if (!skip) {
327
- const obj = createObject(schema, data);
328
- enitties.set(obj.id, obj);
329
- return [obj];
330
- }
331
- return [];
322
+ return [];
323
+ });
332
324
  });
333
- };
334
325
 
335
326
  const SoftRef = Schema.Struct({
336
327
  '/': Schema.String,
package/src/errors.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { BaseError } from '@dxos/errors';
6
- import { DXN } from '@dxos/keys';
6
+ import { type EchoURI } from '@dxos/keys';
7
7
 
8
8
  /**
9
9
  * Agent could not execute prompt.
@@ -13,8 +13,8 @@ export class PromptError extends BaseError.extend('PromptError') {
13
13
  message: string,
14
14
  context: {
15
15
  description?: string;
16
- prompt?: DXN.String;
17
- chat?: DXN.String;
16
+ prompt?: EchoURI.EchoURI;
17
+ chat?: EchoURI.EchoURI;
18
18
  },
19
19
  ) {
20
20
  super({
@@ -17,6 +17,7 @@ export const AgentPrompt = Operation.make({
17
17
  key: 'org.dxos.function.prompt',
18
18
  name: 'Run Routine',
19
19
  description: 'Agentic worker that executes a provided prompt using blueprints and tools.',
20
+ icon: 'ph--brain--regular',
20
21
  },
21
22
  input: Schema.Struct({
22
23
  prompt: Ref.Ref(Routine.Routine),
@@ -29,8 +30,8 @@ export const AgentPrompt = Operation.make({
29
30
  /**
30
31
  * @default @anthropic/claude-opus-4-6
31
32
  */
32
-
33
33
  model: Schema.optional(ModelName),
34
+
34
35
  /**
35
36
  * Input object or data.
36
37
  * References get auto-resolved.
@@ -1 +1 @@
1
- {"conversations":[{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[{"name":"completeJob","inputSchema":{"type":"object","required":[],"properties":{"success":{"$id":"/schemas/any","title":"any"},"failure":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Short message describing the error."},"description":{"type":"string","description":"Optional longer message describing in detail what went wrong"}},"additionalProperties":false}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"You are an agent running in the non-interactive mode.\nThe user is unable to see what you are doing, and cannot answer any questions.\nDo not ask questions.\nComplete the task before you, and at the end call [completeJob] with the output.\nIf you are unable to complete the task, call [completeJob] with the failure reason.\nIf no output is required, call [completeJob] with an empty object: {}\nDo not stop until you call [completeJob].","options":{}},{"role":"user","content":"Reply with a single word: ack.\n<input>{}</input>","options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01BNfgUBNqETGfNka6Y58SUS","modelId":"claude-opus-4-6","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"reasoning-start","id":"0","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"The","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" user wants me to reply with a single word \"ack\" and complete the job.","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"","metadata":{"anthropic":{"type":"thinking","signature":"EoQCClkIDRgCKkDmvWuElJmvgQqKv/OM8h45Qm9vFiau8OtHTiKeFGzABfFt5k5Oc9XiWXg1jeCrSXFmAcI3XEaKXp6jF8PCj/O0Mg9jbGF1ZGUtb3B1cy00LTY4ABIMidROWDebGP+ji8voGgyiyrnCLJU9DZTeWc0iMJ5ewfC96fa6DHSOj+APcM0VyN0tJiYPjIJI7DxYTiu277zCDVNdAUxNb/k45dQGripZikOeASjJaTuovSm8Ni01mepSojCietSMDfM1xBLbnyPHKxucO7akJRwDczuw8req/NjtOhY492FCt1lagajkZq8/rsICFxutxbPXyHXSY04cd/2+oY9cRAQYAQ=="}}},{"type":"reasoning-end","id":"0","metadata":{}},{"type":"tool-params-start","id":"toolu_01VQiUHtyF77TZd49DrKhnPR","name":"completeJob","providerExecuted":false,"metadata":{}},{"type":"tool-params-delta","id":"toolu_01VQiUHtyF77TZd49DrKhnPR","delta":"","metadata":{}},{"type":"tool-params-delta","id":"toolu_01VQiUHtyF77TZd49DrKhnPR","delta":"{\"success","metadata":{}},{"type":"tool-params-delta","id":"toolu_01VQiUHtyF77TZd49DrKhnPR","delta":"\": \"ack\"}","metadata":{}},{"type":"tool-params-end","id":"toolu_01VQiUHtyF77TZd49DrKhnPR","metadata":{}},{"type":"finish","reason":"tool-calls","usage":{"inputTokens":757,"outputTokens":89,"totalTokens":846},"metadata":{"anthropic":{"usage":{"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":757,"output_tokens":9,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[{"name":"completeJob","inputSchema":{"type":"object","required":[],"properties":{"success":{"$id":"/schemas/any","title":"any"},"failure":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Short message describing the error."},"description":{"type":"string","description":"Optional longer message describing in detail what went wrong"}},"additionalProperties":false}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"You are an agent running in the non-interactive mode.\nThe user is unable to see what you are doing, and cannot answer any questions.\nDo not ask questions.\nComplete the task before you, and at the end call [completeJob] with the output.\nIf you are unable to complete the task, call [completeJob] with the failure reason.\nIf no output is required, call [completeJob] with an empty object: {}\nDo not stop until you call [completeJob].","options":{}},{"role":"user","content":"Reply with a single word: ack.\n<input>{}</input>","options":{}},{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to reply with a single word \"ack\" and complete the job.","options":{}},{"type":"tool-call","id":"toolu_01VQiUHtyF77TZd49DrKhnPR","name":"completeJob","params":{"success":"ack"},"providerExecuted":false,"options":{}}],"options":{}},{"role":"tool","content":[{"type":"tool-result","id":"toolu_01VQiUHtyF77TZd49DrKhnPR","name":"completeJob","isFailure":false,"result":{},"providerExecuted":false,"options":{}}],"options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_017Q7gpzDqQTqmKWouYU2oKt","modelId":"claude-opus-4-6","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":824,"outputTokens":2,"totalTokens":826},"metadata":{"anthropic":{"usage":{"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":824,"output_tokens":2,"server_tool_use":null,"service_tier":"standard"}}}}]}]}
1
+ {"conversations":[{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[{"name":"completeJob","inputSchema":{"type":"object","required":[],"properties":{"success":{"$id":"/schemas/any","title":"any"},"failure":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Short message describing the error."},"description":{"type":"string","description":"Optional longer message describing in detail what went wrong"}},"additionalProperties":false}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"You are an agent running in the non-interactive mode.\nThe user is unable to see what you are doing, and cannot answer any questions.\nDo not ask questions.\nComplete the task before you, and at the end call [completeJob] with the output.\nIf you are unable to complete the task, call [completeJob] with the failure reason.\nIf no output is required, call [completeJob] with an empty object: {}\nDo not stop until you call [completeJob].","options":{}},{"role":"user","content":"Reply with a single word: ack.\n<input>{}</input>","options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01RWJEaimVWQv6G7KQb7nyxH","modelId":"claude-opus-4-6","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"reasoning-start","id":"0","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"The","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" user wants me to reply with a single word \"ack\" and complete the job.","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"","metadata":{"anthropic":{"type":"thinking","signature":"Eo4CCmMIDhgCKkDmvWuElJmvgQqKv/OM8h45Qm9vFiau8OtHTiKeFGzABfFt5k5Oc9XiWXg1jeCrSXFmAcI3XEaKXp6jF8PCj/O0Mg9jbGF1ZGUtb3B1cy00LTY4AEIIdGhpbmtpbmcSDDUOa8R7GBJZ9thEWRoMUDN6YGnPA72hCBI6IjCaJjLZWMigJgV2aqiRxRvBlfCCyrN2xF9Pz4UxQh/uotfEKFGHalNCRUoFOaLl8mIqWaDJIFdnK5kYd+6xF9Ivz65Ynb0Mjzt1o53BQoNtRHIf/VhdR8BKSaEv5NlOuPwd8zAoPCS4A+XXS0zq3y0oP48gxYnMoQUaWlabu1n/AgOntuEJj1yZp1uRGAE="}}},{"type":"reasoning-end","id":"0","metadata":{}},{"type":"tool-params-start","id":"toolu_01BTVEaU6r95t7x3gq8fsC8B","name":"completeJob","providerExecuted":false,"metadata":{}},{"type":"tool-params-delta","id":"toolu_01BTVEaU6r95t7x3gq8fsC8B","delta":"","metadata":{}},{"type":"tool-params-delta","id":"toolu_01BTVEaU6r95t7x3gq8fsC8B","delta":"{\"success\"","metadata":{}},{"type":"tool-params-delta","id":"toolu_01BTVEaU6r95t7x3gq8fsC8B","delta":": ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01BTVEaU6r95t7x3gq8fsC8B","delta":"\"a","metadata":{}},{"type":"tool-params-delta","id":"toolu_01BTVEaU6r95t7x3gq8fsC8B","delta":"ck\"}","metadata":{}},{"type":"tool-params-end","id":"toolu_01BTVEaU6r95t7x3gq8fsC8B","metadata":{}},{"type":"finish","reason":"tool-calls","usage":{"inputTokens":757,"outputTokens":89,"totalTokens":846},"metadata":{"anthropic":{"usage":{"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":757,"output_tokens":9,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[{"name":"completeJob","inputSchema":{"type":"object","required":[],"properties":{"success":{"$id":"/schemas/any","title":"any"},"failure":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Short message describing the error."},"description":{"type":"string","description":"Optional longer message describing in detail what went wrong"}},"additionalProperties":false}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"You are an agent running in the non-interactive mode.\nThe user is unable to see what you are doing, and cannot answer any questions.\nDo not ask questions.\nComplete the task before you, and at the end call [completeJob] with the output.\nIf you are unable to complete the task, call [completeJob] with the failure reason.\nIf no output is required, call [completeJob] with an empty object: {}\nDo not stop until you call [completeJob].","options":{}},{"role":"user","content":"Reply with a single word: ack.\n<input>{}</input>","options":{}},{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to reply with a single word \"ack\" and complete the job.","options":{}},{"type":"tool-call","id":"toolu_01BTVEaU6r95t7x3gq8fsC8B","name":"completeJob","params":{"success":"ack"},"providerExecuted":false,"options":{}}],"options":{}},{"role":"tool","content":[{"type":"tool-result","id":"toolu_01BTVEaU6r95t7x3gq8fsC8B","name":"completeJob","isFailure":false,"result":{},"providerExecuted":false,"options":{}}],"options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01PT5i54k8QVpY13gXEJ9o43","modelId":"claude-opus-4-6","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":824,"outputTokens":2,"totalTokens":826},"metadata":{"anthropic":{"usage":{"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":824,"output_tokens":2,"server_tool_use":null,"service_tier":"standard"}}}}]}]}
@@ -5,11 +5,10 @@
5
5
  import { describe, expect, it } from '@effect/vitest';
6
6
  import * as Effect from 'effect/Effect';
7
7
 
8
- import { ContextBinding } from '@dxos/assistant';
8
+ import { AiContext } from '@dxos/assistant';
9
9
  import { Routine, Operation, OperationHandlerSet } from '@dxos/compute';
10
- import { Database, Feed, Obj, Ref } from '@dxos/echo';
10
+ import { Database, Feed, Filter, Obj, Ref } from '@dxos/echo';
11
11
  import { TestHelpers } from '@dxos/effect/testing';
12
- import { QueueService } from '@dxos/functions';
13
12
  import { AssistantTestLayer } from '@dxos/functions-runtime/testing';
14
13
  import { ObjectId } from '@dxos/keys';
15
14
  import { Text } from '@dxos/schema';
@@ -25,13 +24,13 @@ const operationHandlerSet = OperationHandlerSet.make(defaultAgentPrompt);
25
24
 
26
25
  const TestLayer = AssistantTestLayer({
27
26
  operationHandlers: operationHandlerSet,
28
- types: [Chat.Chat, Message.Message, ContextBinding, Text.Text],
27
+ types: [Chat.Chat, Message.Message, AiContext.Binding, Text.Text],
29
28
  aiServicePreset: 'edge-remote',
30
29
  });
31
30
 
32
- const countQueueMessages = (queue: { queryObjects: () => Promise<Obj.Unknown[]> }) =>
33
- Effect.promise(async () => {
34
- const items = await queue.queryObjects();
31
+ const countFeedMessages = (feed: Feed.Feed) =>
32
+ Effect.gen(function* () {
33
+ const items = yield* Feed.runQuery(feed, Filter.everything());
35
34
  return items.filter(Obj.instanceOf(Message.Message)).length;
36
35
  });
37
36
 
@@ -41,9 +40,7 @@ describe('Agent prompt', () => {
41
40
  Effect.fnUntraced(
42
41
  function* (_) {
43
42
  const feed = yield* Database.add(Feed.make());
44
- const queueDxn = Feed.getQueueDxn(feed)!;
45
- const queue = yield* QueueService.getQueue<Message.Message | ContextBinding>(queueDxn);
46
- const messageCountBefore = yield* countQueueMessages(queue);
43
+ const messageCountBefore = yield* countFeedMessages(feed);
47
44
 
48
45
  const chat = yield* Database.add(
49
46
  Chat.make({
@@ -68,7 +65,7 @@ describe('Agent prompt', () => {
68
65
  chat: Ref.make(chat),
69
66
  });
70
67
 
71
- const messageCountAfter = yield* countQueueMessages(queue);
68
+ const messageCountAfter = yield* countFeedMessages(feed);
72
69
 
73
70
  expect(messageCountAfter).toBeGreaterThan(messageCountBefore);
74
71
  expect(result).toBe('ack');
@@ -100,7 +100,7 @@ export default AgentPrompt.pipe(
100
100
  });
101
101
 
102
102
  const runtime = yield* Effect.runtime<Feed.FeedService>();
103
- const session = yield* acquireReleaseResource(() => new AiSession({ feed, runtime }));
103
+ const session = yield* acquireReleaseResource(() => new AiSession.Session({ feed, runtime }));
104
104
 
105
105
  yield* Effect.promise(() =>
106
106
  session.context.bind({
@@ -213,7 +213,7 @@ const ToolExecutionService = ({ feed }: ToolExecutionServiceOptions) =>
213
213
  log('invoking operation', { operationDef, input });
214
214
  const result = yield* operationInvoker
215
215
  .invoke(operationDef, input, {
216
- conversation: Obj.getDXN(feed).toString(),
216
+ conversation: Obj.getURI(feed),
217
217
  })
218
218
  .pipe(Effect.orDie);
219
219
  log('result', { result });
package/src/sync/sync.ts CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
- import { Filter, Obj, Query, Ref } from '@dxos/echo';
8
- import { Database } from '@dxos/echo';
7
+ import { Database, Filter, Obj, Query, Ref } from '@dxos/echo';
9
8
  import { failedInvariant } from '@dxos/invariant';
9
+ import { EchoURI } from '@dxos/keys';
10
10
  import { log } from '@dxos/log';
11
11
 
12
12
  /**
@@ -39,22 +39,23 @@ export const syncObjects: (
39
39
  if (!ref.target) {
40
40
  continue;
41
41
  }
42
- if (Obj.getDXN(ref.target).isLocalObjectId()) {
42
+ const targetUri = EchoURI.tryParse(Obj.getURI(ref.target));
43
+ if (targetUri && EchoURI.isLocal(targetUri)) {
43
44
  // obj not persisted to db.
44
45
  const [target] = yield* syncObjects([ref.target], { foreignKeyId });
45
46
  (obj as any)[key] = Ref.make(target);
46
47
  }
47
48
  }
48
49
 
49
- const schema = Obj.getSchema(obj) ?? failedInvariant('No schema.');
50
+ const type = Obj.getType(obj) ?? failedInvariant('No type.');
50
51
  const foreignId = Obj.getKeys(obj, foreignKeyId)[0]?.id ?? failedInvariant('No foreign key.');
51
52
  const [existing] = yield* Database.runQuery(
52
- Query.select(Filter.foreignKeys(schema, [{ source: foreignKeyId, id: foreignId }])),
53
+ Query.select(Filter.foreignKeys(type, [{ source: foreignKeyId, id: foreignId }])),
53
54
  );
54
55
  log('sync object', {
55
56
  type: Obj.getTypename(obj),
56
57
  foreignId,
57
- existing: existing ? Obj.getDXN(existing) : undefined,
58
+ existing: existing ? Obj.getURI(existing) : undefined,
58
59
  });
59
60
  if (!existing) {
60
61
  yield* Database.add(obj);
@@ -7,20 +7,15 @@ import React from 'react';
7
7
 
8
8
  import { Capabilities, Capability } from '@dxos/app-framework';
9
9
  import { Surface } from '@dxos/app-framework/ui';
10
- import { Format, type Obj, Type } from '@dxos/echo';
10
+ import { DXN, Format, type Obj, Type } from '@dxos/echo';
11
11
  import { Card } from '@dxos/react-ui';
12
12
  import { Syntax } from '@dxos/react-ui-syntax-highlighter';
13
13
 
14
14
  export const MapSchema = Schema.Struct({
15
15
  coordinates: Format.GeoPoint,
16
- }).pipe(
17
- Type.object({
18
- typename: 'com.example.type.map',
19
- version: '0.1.0',
20
- }),
21
- );
16
+ }).pipe(Type.makeObject(DXN.make('com.example.type.map', '0.1.0')));
22
17
 
23
- export type MapSchema = Schema.Schema.Type<typeof MapSchema>;
18
+ export type MapSchema = Type.InstanceType<typeof MapSchema>;
24
19
 
25
20
  // TODO(burdon): Move to ECHO def.
26
21
  export type ArtifactsContext = {
@@ -46,13 +41,13 @@ export const capabilities: Capability.Any[] = [
46
41
  role: 'card--content',
47
42
  filter: (data: any): data is any => isImage(data.value),
48
43
  component: ({ data }) => (
49
- <Card.Content>
44
+ <Card.Body>
50
45
  <img
51
46
  className='grow object-cover'
52
47
  src={`data:image/jpeg;base64,${data.value.source.data}`}
53
48
  alt={data.value.prompt ?? `Generated image [id=${data.value.id}]`}
54
49
  />
55
- </Card.Content>
50
+ </Card.Body>
56
51
  ),
57
52
  }),
58
53
  ),
@@ -61,9 +56,9 @@ export const capabilities: Capability.Any[] = [
61
56
  Surface.create({
62
57
  id: 'plugin-default',
63
58
  role: 'card--content',
64
- position: 'fallback',
59
+ position: 'last',
65
60
  component: ({ data }) => (
66
- <Card.Content>
61
+ <Card.Body>
67
62
  <Syntax.Root data={data}>
68
63
  <Syntax.Content>
69
64
  <Syntax.Filter />
@@ -72,7 +67,7 @@ export const capabilities: Capability.Any[] = [
72
67
  </Syntax.Viewport>
73
68
  </Syntax.Content>
74
69
  </Syntax.Root>
75
- </Card.Content>
70
+ </Card.Body>
76
71
  ),
77
72
  }),
78
73
  ),