@dxos/assistant-toolkit 0.8.4-main.2c6827d → 0.8.4-main.3eb6e50203

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 (219) 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 +1410 -480
  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 +44 -0
  7. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  8. package/dist/types/src/blueprints/design/design-blueprint.d.ts +17 -3
  9. package/dist/types/src/blueprints/design/design-blueprint.d.ts.map +1 -1
  10. package/dist/types/src/blueprints/design/index.d.ts +1 -1
  11. package/dist/types/src/blueprints/design/index.d.ts.map +1 -1
  12. package/dist/types/src/blueprints/discord/discord-blueprint.d.ts +13 -13
  13. package/dist/types/src/blueprints/discord/discord-blueprint.d.ts.map +1 -1
  14. package/dist/types/src/blueprints/discord/index.d.ts +1 -1
  15. package/dist/types/src/blueprints/discord/index.d.ts.map +1 -1
  16. package/dist/types/src/blueprints/index.d.ts +1 -0
  17. package/dist/types/src/blueprints/index.d.ts.map +1 -1
  18. package/dist/types/src/blueprints/linear/index.d.ts +1 -1
  19. package/dist/types/src/blueprints/linear/index.d.ts.map +1 -1
  20. package/dist/types/src/blueprints/linear/linear-blueprint.d.ts +13 -13
  21. package/dist/types/src/blueprints/linear/linear-blueprint.d.ts.map +1 -1
  22. package/dist/types/src/blueprints/markdown/index.d.ts +3 -0
  23. package/dist/types/src/blueprints/markdown/index.d.ts.map +1 -0
  24. package/dist/types/src/blueprints/markdown/markdown-blueprint.d.ts +18 -0
  25. package/dist/types/src/blueprints/markdown/markdown-blueprint.d.ts.map +1 -0
  26. package/dist/types/src/blueprints/planning/index.d.ts +1 -1
  27. package/dist/types/src/blueprints/planning/index.d.ts.map +1 -1
  28. package/dist/types/src/blueprints/planning/planning-blueprint.d.ts +17 -3
  29. package/dist/types/src/blueprints/planning/planning-blueprint.d.ts.map +1 -1
  30. package/dist/types/src/blueprints/research/index.d.ts +1 -1
  31. package/dist/types/src/blueprints/research/index.d.ts.map +1 -1
  32. package/dist/types/src/blueprints/research/research-blueprint.d.ts +17 -3
  33. package/dist/types/src/blueprints/research/research-blueprint.d.ts.map +1 -1
  34. package/dist/types/src/blueprints/testing.d.ts +2 -4
  35. package/dist/types/src/blueprints/testing.d.ts.map +1 -1
  36. package/dist/types/src/blueprints/websearch/index.d.ts +1 -1
  37. package/dist/types/src/blueprints/websearch/index.d.ts.map +1 -1
  38. package/dist/types/src/blueprints/websearch/websearch-blueprint.d.ts +17 -3
  39. package/dist/types/src/blueprints/websearch/websearch-blueprint.d.ts.map +1 -1
  40. package/dist/types/src/chat/Chat.d.ts +31 -0
  41. package/dist/types/src/chat/Chat.d.ts.map +1 -0
  42. package/dist/types/src/chat/index.d.ts +2 -0
  43. package/dist/types/src/chat/index.d.ts.map +1 -0
  44. package/dist/types/src/crud/graph.d.ts +14 -11
  45. package/dist/types/src/crud/graph.d.ts.map +1 -1
  46. package/dist/types/src/functions/agent/prompt.d.ts +71 -4
  47. package/dist/types/src/functions/agent/prompt.d.ts.map +1 -1
  48. package/dist/types/src/functions/document/create.d.ts +6 -0
  49. package/dist/types/src/functions/document/create.d.ts.map +1 -0
  50. package/dist/types/src/functions/document/index.d.ts +20 -3
  51. package/dist/types/src/functions/document/index.d.ts.map +1 -1
  52. package/dist/types/src/functions/document/read.d.ts +8 -1
  53. package/dist/types/src/functions/document/read.d.ts.map +1 -1
  54. package/dist/types/src/functions/document/update.d.ts +8 -1
  55. package/dist/types/src/functions/document/update.d.ts.map +1 -1
  56. package/dist/types/src/functions/entity-extraction/entity-extraction.d.ts +125 -124
  57. package/dist/types/src/functions/entity-extraction/entity-extraction.d.ts.map +1 -1
  58. package/dist/types/src/functions/entity-extraction/index.d.ts +125 -124
  59. package/dist/types/src/functions/entity-extraction/index.d.ts.map +1 -1
  60. package/dist/types/src/functions/exa/data/exa-search-1748337321991.d.ts.map +1 -0
  61. package/dist/types/src/functions/exa/data/exa-search-1748337331526.d.ts.map +1 -0
  62. package/dist/types/src/functions/exa/data/exa-search-1748337344119.d.ts.map +1 -0
  63. package/dist/types/src/functions/exa/data/index.d.ts.map +1 -0
  64. package/dist/types/src/functions/github/fetch-prs.d.ts.map +1 -1
  65. package/dist/types/src/functions/linear/index.d.ts +1 -1
  66. package/dist/types/src/functions/linear/sync-issues.d.ts +1 -1
  67. package/dist/types/src/functions/linear/sync-issues.d.ts.map +1 -1
  68. package/dist/types/src/functions/research/document-create.d.ts +1 -1
  69. package/dist/types/src/functions/research/document-create.d.ts.map +1 -1
  70. package/dist/types/src/functions/research/index.d.ts +2 -2
  71. package/dist/types/src/functions/research/research-graph.d.ts +9 -8
  72. package/dist/types/src/functions/research/research-graph.d.ts.map +1 -1
  73. package/dist/types/src/functions/research/research.d.ts +1 -1
  74. package/dist/types/src/functions/research/research.d.ts.map +1 -1
  75. package/dist/types/src/functions/research/types.d.ts +1 -1
  76. package/dist/types/src/functions/research/types.d.ts.map +1 -1
  77. package/dist/types/src/functions/tasks/index.d.ts +16 -2
  78. package/dist/types/src/functions/tasks/index.d.ts.map +1 -1
  79. package/dist/types/src/functions/tasks/read.d.ts +8 -1
  80. package/dist/types/src/functions/tasks/read.d.ts.map +1 -1
  81. package/dist/types/src/functions/tasks/update.d.ts +8 -1
  82. package/dist/types/src/functions/tasks/update.d.ts.map +1 -1
  83. package/dist/types/src/index.d.ts +4 -2
  84. package/dist/types/src/index.d.ts.map +1 -1
  85. package/dist/types/src/initiative/Initiative.d.ts +41 -0
  86. package/dist/types/src/initiative/Initiative.d.ts.map +1 -0
  87. package/dist/types/src/initiative/blueprint.d.ts +153 -0
  88. package/dist/types/src/initiative/blueprint.d.ts.map +1 -0
  89. package/dist/types/src/initiative/functions/addArtifact.d.ts +6 -0
  90. package/dist/types/src/initiative/functions/addArtifact.d.ts.map +1 -0
  91. package/dist/types/src/initiative/functions/agent.d.ts +62 -0
  92. package/dist/types/src/initiative/functions/agent.d.ts.map +1 -0
  93. package/dist/types/src/initiative/functions/getContext.d.ts +13 -0
  94. package/dist/types/src/initiative/functions/getContext.d.ts.map +1 -0
  95. package/dist/types/src/initiative/functions/index.d.ts +5 -0
  96. package/dist/types/src/initiative/functions/index.d.ts.map +1 -0
  97. package/dist/types/src/initiative/functions/qualifier.d.ts +60 -0
  98. package/dist/types/src/initiative/functions/qualifier.d.ts.map +1 -0
  99. package/dist/types/src/initiative/index.d.ts +6 -0
  100. package/dist/types/src/initiative/index.d.ts.map +1 -0
  101. package/dist/types/src/initiative/initiative.test.d.ts +2 -0
  102. package/dist/types/src/initiative/initiative.test.d.ts.map +1 -0
  103. package/dist/types/src/initiative/plan.d.ts +77 -0
  104. package/dist/types/src/initiative/plan.d.ts.map +1 -0
  105. package/dist/types/src/initiative/util.d.ts +29 -0
  106. package/dist/types/src/initiative/util.d.ts.map +1 -0
  107. package/dist/types/src/planning/blueprint.d.ts +18 -0
  108. package/dist/types/src/planning/blueprint.d.ts.map +1 -0
  109. package/dist/types/src/planning/functions/index.d.ts +2 -0
  110. package/dist/types/src/planning/functions/index.d.ts.map +1 -0
  111. package/dist/types/src/planning/functions/update-tasks.d.ts +9 -0
  112. package/dist/types/src/planning/functions/update-tasks.d.ts.map +1 -0
  113. package/dist/types/src/planning/index.d.ts +3 -0
  114. package/dist/types/src/planning/index.d.ts.map +1 -0
  115. package/dist/types/src/sync/sync.d.ts +3 -3
  116. package/dist/types/src/sync/sync.d.ts.map +1 -1
  117. package/dist/types/src/testing/index.d.ts +1 -1
  118. package/dist/types/src/testing/index.d.ts.map +1 -1
  119. package/dist/types/src/testing/plugins.d.ts +19 -0
  120. package/dist/types/src/testing/plugins.d.ts.map +1 -0
  121. package/dist/types/src/toolkits/AssistantToolkit.d.ts +31 -5
  122. package/dist/types/src/toolkits/AssistantToolkit.d.ts.map +1 -1
  123. package/dist/types/src/toolkits/SystemToolkit.d.ts +42 -10
  124. package/dist/types/src/toolkits/SystemToolkit.d.ts.map +1 -1
  125. package/dist/types/src/toolkits/WebToolkit.d.ts +38 -0
  126. package/dist/types/src/toolkits/WebToolkit.d.ts.map +1 -0
  127. package/dist/types/src/toolkits/index.d.ts +1 -0
  128. package/dist/types/src/toolkits/index.d.ts.map +1 -1
  129. package/dist/types/tsconfig.tsbuildinfo +1 -1
  130. package/package.json +45 -40
  131. package/src/blueprints/design/design-blueprint.test.ts +14 -17
  132. package/src/blueprints/design/design-blueprint.ts +2 -4
  133. package/src/blueprints/design/index.ts +1 -1
  134. package/src/blueprints/discord/discord-blueprint.ts +2 -4
  135. package/src/blueprints/discord/index.ts +1 -1
  136. package/src/blueprints/index.ts +1 -0
  137. package/src/blueprints/linear/index.ts +1 -1
  138. package/src/blueprints/linear/linear-blueprint.ts +2 -4
  139. package/src/blueprints/markdown/index.ts +7 -0
  140. package/src/blueprints/markdown/markdown-blueprint.ts +24 -0
  141. package/src/blueprints/planning/index.ts +1 -1
  142. package/src/blueprints/planning/planning-blueprint.test.ts +12 -16
  143. package/src/blueprints/planning/planning-blueprint.ts +2 -4
  144. package/src/blueprints/research/index.ts +1 -1
  145. package/src/blueprints/research/research-blueprint.ts +2 -4
  146. package/src/blueprints/testing.ts +2 -6
  147. package/src/blueprints/websearch/index.ts +2 -1
  148. package/src/blueprints/websearch/websearch-blueprint.ts +2 -4
  149. package/src/chat/Chat.ts +45 -0
  150. package/src/chat/index.ts +5 -0
  151. package/src/crud/graph.test.ts +6 -29
  152. package/src/crud/graph.ts +32 -40
  153. package/src/experimental/feed.test.ts +4 -9
  154. package/src/functions/agent/prompt.ts +15 -13
  155. package/src/functions/discord/fetch-messages.test.ts +4 -8
  156. package/src/functions/discord/fetch-messages.ts +1 -1
  157. package/src/functions/document/create.ts +29 -0
  158. package/src/functions/document/index.ts +2 -1
  159. package/src/functions/document/read.ts +11 -8
  160. package/src/functions/document/update.ts +9 -7
  161. package/src/functions/entity-extraction/entity-extraction.conversations.json +1 -1
  162. package/src/functions/entity-extraction/entity-extraction.test.ts +11 -29
  163. package/src/functions/entity-extraction/entity-extraction.ts +41 -24
  164. package/src/functions/exa/mock.ts +1 -1
  165. package/src/functions/github/fetch-prs.ts +3 -2
  166. package/src/functions/linear/linear.test.ts +18 -43
  167. package/src/functions/linear/sync-issues.ts +9 -7
  168. package/src/functions/research/document-create.ts +9 -11
  169. package/src/functions/research/research-graph.ts +13 -11
  170. package/src/functions/research/research.conversations.json +1 -1
  171. package/src/functions/research/research.test.ts +29 -64
  172. package/src/functions/research/research.ts +15 -23
  173. package/src/functions/research/types.ts +3 -3
  174. package/src/functions/tasks/read.ts +6 -6
  175. package/src/functions/tasks/update.ts +6 -6
  176. package/src/index.ts +4 -2
  177. package/src/initiative/Initiative.ts +61 -0
  178. package/src/initiative/blueprint.ts +60 -0
  179. package/src/initiative/functions/addArtifact.ts +41 -0
  180. package/src/initiative/functions/agent.ts +77 -0
  181. package/src/initiative/functions/getContext.ts +62 -0
  182. package/src/initiative/functions/index.ts +8 -0
  183. package/src/initiative/functions/qualifier.ts +98 -0
  184. package/src/initiative/index.ts +9 -0
  185. package/src/initiative/initiative.test.ts +584 -0
  186. package/src/initiative/plan.ts +107 -0
  187. package/src/initiative/util.ts +137 -0
  188. package/src/planning/blueprint.ts +14 -0
  189. package/src/planning/functions/index.ts +5 -0
  190. package/src/planning/functions/update-tasks.ts +168 -0
  191. package/src/planning/index.ts +6 -0
  192. package/src/sync/sync.ts +38 -30
  193. package/src/testing/index.ts +1 -1
  194. package/src/{plugins.tsx → testing/plugins.tsx} +14 -13
  195. package/src/toolkits/AssistantToolkit.conversations.json +1 -1
  196. package/src/toolkits/AssistantToolkit.test.ts +27 -43
  197. package/src/toolkits/AssistantToolkit.ts +31 -8
  198. package/src/toolkits/SystemToolkit.ts +100 -32
  199. package/src/toolkits/WebToolkit.ts +34 -0
  200. package/src/toolkits/index.ts +1 -0
  201. package/dist/lib/browser/index.mjs.map +0 -7
  202. package/dist/lib/browser/meta.json +0 -1
  203. package/dist/lib/node-esm/index.mjs +0 -2779
  204. package/dist/lib/node-esm/index.mjs.map +0 -7
  205. package/dist/lib/node-esm/meta.json +0 -1
  206. package/dist/types/src/plugins.d.ts +0 -19
  207. package/dist/types/src/plugins.d.ts.map +0 -1
  208. package/dist/types/src/testing/data/exa-search-1748337321991.d.ts.map +0 -1
  209. package/dist/types/src/testing/data/exa-search-1748337331526.d.ts.map +0 -1
  210. package/dist/types/src/testing/data/exa-search-1748337344119.d.ts.map +0 -1
  211. package/dist/types/src/testing/data/index.d.ts.map +0 -1
  212. /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337321991.d.ts +0 -0
  213. /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337331526.d.ts +0 -0
  214. /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337344119.d.ts +0 -0
  215. /package/dist/types/src/{testing → functions/exa}/data/index.d.ts +0 -0
  216. /package/src/{testing → functions/exa}/data/exa-search-1748337321991.ts +0 -0
  217. /package/src/{testing → functions/exa}/data/exa-search-1748337331526.ts +0 -0
  218. /package/src/{testing → functions/exa}/data/exa-search-1748337344119.ts +0 -0
  219. /package/src/{testing → functions/exa}/data/index.ts +0 -0
@@ -1 +1 @@
1
- {"conversations":[{"parameters":{"model":"@anthropic/claude-opus-4-0","stream":true,"tools":[]},"prompt":{"content":[{"role":"user","content":"Add to context: {\"id\":\"01JGFJJZ00G0WKQSJGMAKCNT87\",\"@type\":\"dxn:type:dxos.org/type/Organization:0.1.0\",\"@meta\":{\"keys\":[]},\"name\":\"Cyberdyne Systems\",\"website\":\"https://cyberdyne.com\"}","options":{}}]},"response":[{"type":"response-metadata","id":"msg_01HNLR7j62QCthmzukeZc38d","modelId":"claude-opus-4-20250514","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"text-start","id":"0","metadata":{}},{"type":"text-delta","id":"0","delta":"I've","metadata":{}},{"type":"text-delta","id":"0","delta":" note","metadata":{}},{"type":"text-delta","id":"0","delta":"d the","metadata":{}},{"type":"text-delta","id":"0","delta":" context","metadata":{}},{"type":"text-delta","id":"0","delta":" about","metadata":{}},{"type":"text-delta","id":"0","delta":" Cyberdyne Systems. This","metadata":{}},{"type":"text-delta","id":"0","delta":" appears to be an","metadata":{}},{"type":"text-delta","id":"0","delta":" organization","metadata":{}},{"type":"text-delta","id":"0","delta":" object","metadata":{}},{"type":"text-delta","id":"0","delta":" with:","metadata":{}},{"type":"text-delta","id":"0","delta":"\n- Name","metadata":{}},{"type":"text-delta","id":"0","delta":":","metadata":{}},{"type":"text-delta","id":"0","delta":" Cyberdyne Systems\n- Website:","metadata":{}},{"type":"text-delta","id":"0","delta":" https://cyberdyne.com","metadata":{}},{"type":"text-delta","id":"0","delta":"\n- Type: Organization","metadata":{}},{"type":"text-delta","id":"0","delta":" (version","metadata":{}},{"type":"text-delta","id":"0","delta":" 0.1.0)","metadata":{}},{"type":"text-delta","id":"0","delta":"\n- A","metadata":{}},{"type":"text-delta","id":"0","delta":" unique","metadata":{}},{"type":"text-delta","id":"0","delta":" ID","metadata":{}},{"type":"text-delta","id":"0","delta":"\n\nHow","metadata":{}},{"type":"text-delta","id":"0","delta":" can","metadata":{}},{"type":"text-delta","id":"0","delta":" I help you with this organization information","metadata":{}},{"type":"text-delta","id":"0","delta":"?","metadata":{}},{"type":"text-end","id":"0","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":87,"outputTokens":74,"totalTokens":161},"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":87,"output_tokens":2,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-0","stream":true,"tools":[]},"prompt":{"content":[{"role":"user","content":"Add to context: {\"id\":\"01JGFJJZ00G0WKQSJGMAKCNT89\",\"@type\":\"dxn:type:dxos.org/type/Organization:0.1.0\",\"@meta\":{\"keys\":[]},\"name\":\"Cyberdyne Systems\",\"website\":\"https://cyberdyne.com\"}","options":{}}]},"response":[{"type":"response-metadata","id":"msg_01LgdR7kxSvEaKHNaFxG3hgZ","modelId":"claude-opus-4-20250514","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"text-start","id":"0","metadata":{}},{"type":"text-delta","id":"0","delta":"I've","metadata":{}},{"type":"text-delta","id":"0","delta":" adde","metadata":{}},{"type":"text-delta","id":"0","delta":"d the","metadata":{}},{"type":"text-delta","id":"0","delta":" Cyberdyne Systems organization","metadata":{}},{"type":"text-delta","id":"0","delta":" to my","metadata":{}},{"type":"text-delta","id":"0","delta":" context. This","metadata":{}},{"type":"text-delta","id":"0","delta":" appears to be a reference","metadata":{}},{"type":"text-delta","id":"0","delta":" to the fictional","metadata":{}},{"type":"text-delta","id":"0","delta":" company","metadata":{}},{"type":"text-delta","id":"0","delta":" from the Terminator franchise","metadata":{}},{"type":"text-delta","id":"0","delta":", known","metadata":{}},{"type":"text-delta","id":"0","delta":" for creating","metadata":{}},{"type":"text-delta","id":"0","delta":" Skynet and advance","metadata":{}},{"type":"text-delta","id":"0","delta":"d AI/","metadata":{}},{"type":"text-delta","id":"0","delta":"robotics technology. The organization has","metadata":{}},{"type":"text-delta","id":"0","delta":" been","metadata":{}},{"type":"text-delta","id":"0","delta":" store","metadata":{}},{"type":"text-delta","id":"0","delta":"d with","metadata":{}},{"type":"text-delta","id":"0","delta":" its","metadata":{}},{"type":"text-delta","id":"0","delta":" website","metadata":{}},{"type":"text-delta","id":"0","delta":" URL","metadata":{}},{"type":"text-delta","id":"0","delta":".\n\nIs","metadata":{}},{"type":"text-delta","id":"0","delta":" there anything specific you","metadata":{}},{"type":"text-delta","id":"0","delta":"'d like me to help","metadata":{}},{"type":"text-delta","id":"0","delta":" you with regarding this organization, or","metadata":{}},{"type":"text-delta","id":"0","delta":" would you like to","metadata":{}},{"type":"text-delta","id":"0","delta":" add more","metadata":{}},{"type":"text-delta","id":"0","delta":" information","metadata":{}},{"type":"text-delta","id":"0","delta":" to the context?","metadata":{}},{"type":"text-end","id":"0","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":87,"outputTokens":87,"totalTokens":174},"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":87,"output_tokens":2,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-0","stream":true,"tools":[]},"prompt":{"content":[{"role":"user","content":"Add to context: {\"id\":\"01JGFJJZ00G0WKQSJGMAKCNT8A\",\"@type\":\"dxn:type:dxos.org/type/Organization:0.1.0\",\"@meta\":{\"keys\":[]},\"name\":\"Cyberdyne Systems\",\"website\":\"https://cyberdyne.com\"}","options":{}}]},"response":[{"type":"response-metadata","id":"msg_01DCJT6bMkLDRaePpdgZaMLs","modelId":"claude-opus-4-20250514","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"text-start","id":"0","metadata":{}},{"type":"text-delta","id":"0","delta":"I've","metadata":{}},{"type":"text-delta","id":"0","delta":" note","metadata":{}},{"type":"text-delta","id":"0","delta":"d the context","metadata":{}},{"type":"text-delta","id":"0","delta":" about","metadata":{}},{"type":"text-delta","id":"0","delta":" Cyberdyne Systems.","metadata":{}},{"type":"text-delta","id":"0","delta":" This appears to be an","metadata":{}},{"type":"text-delta","id":"0","delta":" organization object","metadata":{}},{"type":"text-delta","id":"0","delta":" with","metadata":{}},{"type":"text-delta","id":"0","delta":":","metadata":{}},{"type":"text-delta","id":"0","delta":"\n- Name","metadata":{}},{"type":"text-delta","id":"0","delta":": Cyberdyne Systems\n-","metadata":{}},{"type":"text-delta","id":"0","delta":" Website: https://cyberdyne.","metadata":{}},{"type":"text-delta","id":"0","delta":"com\n- Type","metadata":{}},{"type":"text-delta","id":"0","delta":": Organization","metadata":{}},{"type":"text-delta","id":"0","delta":" (","metadata":{}},{"type":"text-delta","id":"0","delta":"version","metadata":{}},{"type":"text-delta","id":"0","delta":" 0.1.0)","metadata":{}},{"type":"text-delta","id":"0","delta":"\n- ID","metadata":{}},{"type":"text-delta","id":"0","delta":": 01JGFJJ","metadata":{}},{"type":"text-delta","id":"0","delta":"Z00G0WKQ","metadata":{}},{"type":"text-delta","id":"0","delta":"SJGMAKCNT8A","metadata":{}},{"type":"text-delta","id":"0","delta":"\n\nIs","metadata":{}},{"type":"text-delta","id":"0","delta":" there","metadata":{}},{"type":"text-delta","id":"0","delta":" something","metadata":{}},{"type":"text-delta","id":"0","delta":" specific you'd like to know","metadata":{}},{"type":"text-delta","id":"0","delta":" about or","metadata":{}},{"type":"text-delta","id":"0","delta":" do with this organization data","metadata":{}},{"type":"text-delta","id":"0","delta":"?","metadata":{}},{"type":"text-end","id":"0","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":88,"outputTokens":102,"totalTokens":190},"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":88,"output_tokens":2,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-0","stream":true,"tools":[]},"prompt":{"content":[{"role":"user","content":"Add to context: {\"id\":\"01JGFJJZ00G0WKQSJGMAKCNT8C\",\"@type\":\"dxn:type:dxos.org/type/Organization:0.1.0\",\"@meta\":{\"keys\":[]},\"name\":\"Cyberdyne Systems\",\"website\":\"https://cyberdyne.com\"}","options":{}}]},"response":[{"type":"response-metadata","id":"msg_012T8q2F93Aisj5BJGyKntH5","modelId":"claude-opus-4-20250514","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"text-start","id":"0","metadata":{}},{"type":"text-delta","id":"0","delta":"I'll","metadata":{}},{"type":"text-delta","id":"0","delta":" help you add to","metadata":{}},{"type":"text-delta","id":"0","delta":" the context. However, I need more","metadata":{}},{"type":"text-delta","id":"0","delta":" information about what you","metadata":{}},{"type":"text-delta","id":"0","delta":"'d like to add to","metadata":{}},{"type":"text-delta","id":"0","delta":" this","metadata":{}},{"type":"text-delta","id":"0","delta":" organization","metadata":{}},{"type":"text-delta","id":"0","delta":" recor","metadata":{}},{"type":"text-delta","id":"0","delta":"d. ","metadata":{}},{"type":"text-delta","id":"0","delta":"\n\nThe","metadata":{}},{"type":"text-delta","id":"0","delta":" current context shows a","metadata":{}},{"type":"text-delta","id":"0","delta":" Cyberdyne Systems organization entry","metadata":{}},{"type":"text-delta","id":"0","delta":".","metadata":{}},{"type":"text-delta","id":"0","delta":" What woul","metadata":{}},{"type":"text-delta","id":"0","delta":"d you like to add?","metadata":{}},{"type":"text-delta","id":"0","delta":" For","metadata":{}},{"type":"text-delta","id":"0","delta":" example:","metadata":{}},{"type":"text-delta","id":"0","delta":"\n- Additional","metadata":{}},{"type":"text-delta","id":"0","delta":" contact","metadata":{}},{"type":"text-delta","id":"0","delta":" information?","metadata":{}},{"type":"text-delta","id":"0","delta":"\n- Description","metadata":{}},{"type":"text-delta","id":"0","delta":" or","metadata":{}},{"type":"text-delta","id":"0","delta":" mission","metadata":{}},{"type":"text-delta","id":"0","delta":" statement?\n- Address","metadata":{}},{"type":"text-delta","id":"0","delta":" or location details","metadata":{}},{"type":"text-delta","id":"0","delta":"?\n- Social media links?","metadata":{}},{"type":"text-delta","id":"0","delta":"\n- Other","metadata":{}},{"type":"text-delta","id":"0","delta":" organizational details","metadata":{}},{"type":"text-delta","id":"0","delta":"?\n\nPlease let","metadata":{}},{"type":"text-delta","id":"0","delta":" me know what specific information you'd like","metadata":{}},{"type":"text-delta","id":"0","delta":" to ad","metadata":{}},{"type":"text-delta","id":"0","delta":"d to","metadata":{}},{"type":"text-delta","id":"0","delta":" this context","metadata":{}},{"type":"text-delta","id":"0","delta":".","metadata":{}},{"type":"text-end","id":"0","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":88,"outputTokens":104,"totalTokens":192},"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":88,"output_tokens":2,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-0","stream":true,"tools":[{"name":"add-to-context","description":"Adds the object to the chat context.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the document to read.","examples":["dxn:echo:@:XXXXX","@dxn:echo:@:XXXXX","spaceID:objectID","XXXXX"]}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"## Blueprints Definitions\n\n<blueprint>\n \n</blueprint>","options":{}},{"role":"user","content":"Add to context: {\"id\":\"01JGFJJZ00G0WKQSJGMAKCNT8D\",\"@type\":\"dxn:type:dxos.org/type/Organization:0.1.0\",\"@meta\":{\"keys\":[]},\"name\":\"Cyberdyne Systems\",\"website\":\"https://cyberdyne.com\"}","options":{}}]},"response":[{"type":"response-metadata","id":"msg_017B1LQZEJPzaFfwptn7WVrs","modelId":"claude-opus-4-20250514","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"text-start","id":"0","metadata":{}},{"type":"text-delta","id":"0","delta":"I'll","metadata":{}},{"type":"text-delta","id":"0","delta":" add that","metadata":{}},{"type":"text-delta","id":"0","delta":" Organization","metadata":{}},{"type":"text-delta","id":"0","delta":" object","metadata":{}},{"type":"text-delta","id":"0","delta":" to the context for you.","metadata":{}},{"type":"text-end","id":"0","metadata":{}},{"type":"tool-params-start","id":"toolu_016GndoqtEHmNSFuY516JkJB","name":"add-to-context","providerExecuted":false,"metadata":{}},{"type":"tool-params-delta","id":"toolu_016GndoqtEHmNSFuY516JkJB","delta":"","metadata":{}},{"type":"tool-params-delta","id":"toolu_016GndoqtEHmNSFuY516JkJB","delta":"{\"","metadata":{}},{"type":"tool-params-delta","id":"toolu_016GndoqtEHmNSFuY516JkJB","delta":"id\": \"","metadata":{}},{"type":"tool-params-delta","id":"toolu_016GndoqtEHmNSFuY516JkJB","delta":"01JGFJJZ","metadata":{}},{"type":"tool-params-delta","id":"toolu_016GndoqtEHmNSFuY516JkJB","delta":"00G","metadata":{}},{"type":"tool-params-delta","id":"toolu_016GndoqtEHmNSFuY516JkJB","delta":"0WKQSJG","metadata":{}},{"type":"tool-params-delta","id":"toolu_016GndoqtEHmNSFuY516JkJB","delta":"MAKCNT8D\"}","metadata":{}},{"type":"tool-params-end","id":"toolu_016GndoqtEHmNSFuY516JkJB","metadata":{}},{"type":"tool-call","id":"toolu_016GndoqtEHmNSFuY516JkJB","name":"add-to-context","params":{"id":"01JGFJJZ00G0WKQSJGMAKCNT8D"},"providerExecuted":false,"metadata":{}},{"type":"finish","reason":"tool-calls","usage":{"inputTokens":538,"outputTokens":88,"totalTokens":626},"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":538,"output_tokens":2,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-0","stream":true,"tools":[{"name":"add-to-context","description":"Adds the object to the chat context.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the document to read.","examples":["dxn:echo:@:XXXXX","@dxn:echo:@:XXXXX","spaceID:objectID","XXXXX"]}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"## Blueprints Definitions\n\n<blueprint>\n \n</blueprint>","options":{}},{"role":"user","content":"Add to context: {\"id\":\"01JGFJJZ00G0WKQSJGMAKCNT8D\",\"@type\":\"dxn:type:dxos.org/type/Organization:0.1.0\",\"@meta\":{\"keys\":[]},\"name\":\"Cyberdyne Systems\",\"website\":\"https://cyberdyne.com\"}","options":{}},{"role":"assistant","content":[{"type":"text","text":"I'll add that Organization object to the context for you.","options":{}},{"type":"tool-call","id":"toolu_016GndoqtEHmNSFuY516JkJB","name":"add-to-context","params":{"id":"01JGFJJZ00G0WKQSJGMAKCNT8D"},"providerExecuted":false,"options":{}}],"options":{}},{"role":"tool","content":[{"type":"tool-result","id":"toolu_016GndoqtEHmNSFuY516JkJB","name":"add-to-context","result":{},"options":{}}],"options":{}}]},"response":[{"type":"response-metadata","id":"msg_01UjUAP2ewUVeX3dNu2atnMj","modelId":"claude-opus-4-20250514","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"text-start","id":"0","metadata":{}},{"type":"text-delta","id":"0","delta":"I","metadata":{}},{"type":"text-delta","id":"0","delta":"'ve successfully added the Cyberdyne","metadata":{}},{"type":"text-delta","id":"0","delta":" Systems organization to the context. The object","metadata":{}},{"type":"text-delta","id":"0","delta":" includes","metadata":{}},{"type":"text-delta","id":"0","delta":":","metadata":{}},{"type":"text-delta","id":"0","delta":"\n- Name","metadata":{}},{"type":"text-delta","id":"0","delta":": Cyberdyne Systems\n-","metadata":{}},{"type":"text-delta","id":"0","delta":" Website: https://cyberdyne.","metadata":{}},{"type":"text-delta","id":"0","delta":"com\n- Type","metadata":{}},{"type":"text-delta","id":"0","delta":": Organization","metadata":{}},{"type":"text-delta","id":"0","delta":" (","metadata":{}},{"type":"text-delta","id":"0","delta":"dxn:type:dxos","metadata":{}},{"type":"text-delta","id":"0","delta":".org/type/Organization:0","metadata":{}},{"type":"text-delta","id":"0","delta":".1.0)\n- ID","metadata":{}},{"type":"text-delta","id":"0","delta":": 01JGFJJ","metadata":{}},{"type":"text-delta","id":"0","delta":"Z00G0WKQ","metadata":{}},{"type":"text-delta","id":"0","delta":"SJGMAKCNT8D","metadata":{}},{"type":"text-delta","id":"0","delta":"\n\nThe organization","metadata":{}},{"type":"text-delta","id":"0","delta":" is","metadata":{}},{"type":"text-delta","id":"0","delta":" now available in the","metadata":{}},{"type":"text-delta","id":"0","delta":" chat","metadata":{}},{"type":"text-delta","id":"0","delta":" context for reference","metadata":{}},{"type":"text-delta","id":"0","delta":" in","metadata":{}},{"type":"text-delta","id":"0","delta":" our","metadata":{}},{"type":"text-delta","id":"0","delta":" conversation.","metadata":{}},{"type":"text-end","id":"0","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":638,"outputTokens":112,"totalTokens":750},"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":638,"output_tokens":1,"server_tool_use":null,"service_tier":"standard"}}}}]}]}
1
+ {"conversations":[{"parameters":{"model":"@anthropic/claude-opus-4-0","stream":true,"tools":[]},"prompt":{"content":[{"role":"system","content":"## Blueprints Definitions\n\n<blueprint>\n \n</blueprint>","options":{}},{"role":"user","content":"Add to context: {\"id\":\"01JGFJJZ00G0WKQSJGMAKCNT8D\",\"@type\":\"dxn:type:dxos.org/type/Organization:0.1.0\",\"@meta\":{\"keys\":[]},\"name\":\"Cyberdyne Systems\",\"website\":\"https://cyberdyne.com\"}","options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01ESZ2RnTWWshCN6AuVjhxBW","modelId":"claude-opus-4-20250514","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"reasoning-start","id":"0","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"The user is adding","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" an","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" Organization","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" object","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" to the context.","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" This","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" appears","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" to be a DXOS object","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" with:","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"\n- An","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" ID","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"\n- A type designation","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" (@","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"type)","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" indicating","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" it's an Organization type version","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" 0.1.0\n-","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" Metadata with","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" an","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" empty keys array\n- A name:","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" \"Cyberdyne Systems\"","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"\n- A website: \"https://cyb","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"erdyne.com\"\n\nI shoul","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"d acknowledge that","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" this","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" has","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" been added to the context and be","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" ready to reference","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" or work","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" with this organization data","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" as","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" needed.","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"","metadata":{"anthropic":{"type":"thinking","signature":"EswECkYICxgCKkAKoUuFWE5zJ6soltEFAuI6miLz75XAO+fhBFkck5nOV8Zgw+xtXu+lcLNKF9T+nYU005q7jufvyi6dUAL4VAbDEgxQiKz084T8/HxIiC0aDGHf4286rPMhEleyDyIwW+6ZQtEfTq8gYiaaOpyqPRwa3cPy26HMeKj/1BXdMW9MJDcjxj02kjji0a4BV8AzKrMD6vSRsoAjP6ql8CxTqD91VvFiLqs4rqhHOVwlmmKVygRMogk5RvvRG/T4QzEGZSd7Xcl8yB19i03q3kpErfJu6b8+mFhndVcgBbFeFoGAA9aAJleUTdyLKvx/hSexzF0Th7xEdP1VTM4//JVq3lXB2LqqJzih7wTbqTn92vq5leNtGDoKJwnFdNvoxixY+HgB1JKSfsSGkZolby5yOp6kG52/2okeJfokgYpIjAxny8KjVq7SHsD9o9fLrKuA3VtzwG9eBBtK5t11bJoGQF+vGEmIwha35riPZIvzpa+SAbY4bU9QtMOnqn21fwYyhur/5WPXMZl3AsvJSi8yDcUrCbjsYcIxcn8lbCdbKA4sLMtQimREj7NU8onkj9ymivbG5CgluFohwpTFKyX4SNKd9MYdtE31Acmop2Zi2iHJQ+d/jH7tn503qoCeHV6LkMEEd0oFN5qHqRA5N0SBdKWrHzmlbBT4IHM4TvEwMINkzqf3J4TkCCwj727G4g7qepboMHiqtVYt5+HsQIZ3g8vR6hMTBoJn7qVUCWb67PImJNNQDzXoumvVEpHi9ZUI/rzJf+a8GAE="}}},{"type":"reasoning-end","id":"0","metadata":{}},{"type":"text-start","id":"1","metadata":{}},{"type":"text-delta","id":"1","delta":"I've added the Cyb","metadata":{}},{"type":"text-delta","id":"1","delta":"erdyne Systems organization object","metadata":{}},{"type":"text-delta","id":"1","delta":" to the","metadata":{}},{"type":"text-delta","id":"1","delta":" context. This","metadata":{}},{"type":"text-delta","id":"1","delta":" organization","metadata":{}},{"type":"text-delta","id":"1","delta":" has","metadata":{}},{"type":"text-delta","id":"1","delta":":","metadata":{}},{"type":"text-delta","id":"1","delta":"\n- Name","metadata":{}},{"type":"text-delta","id":"1","delta":": Cyberdyne Systems\n-","metadata":{}},{"type":"text-delta","id":"1","delta":" Website: https://cyberdyne.","metadata":{}},{"type":"text-delta","id":"1","delta":"com\n- Type: dxos","metadata":{}},{"type":"text-delta","id":"1","delta":".org/type/Organization:0","metadata":{}},{"type":"text-delta","id":"1","delta":".1.0","metadata":{}},{"type":"text-delta","id":"1","delta":"\n- ID: 01JG","metadata":{}},{"type":"text-delta","id":"1","delta":"FJJZ00G0W","metadata":{}},{"type":"text-delta","id":"1","delta":"KQSJGMAKCNT8","metadata":{}},{"type":"text-delta","id":"1","delta":"D\n\nI","metadata":{}},{"type":"text-delta","id":"1","delta":" can now reference this organization data","metadata":{}},{"type":"text-delta","id":"1","delta":" in","metadata":{}},{"type":"text-delta","id":"1","delta":" any","metadata":{}},{"type":"text-delta","id":"1","delta":" subsequent","metadata":{}},{"type":"text-delta","id":"1","delta":" operations","metadata":{}},{"type":"text-delta","id":"1","delta":" or queries","metadata":{}},{"type":"text-delta","id":"1","delta":" you","metadata":{}},{"type":"text-delta","id":"1","delta":"'","metadata":{}},{"type":"text-delta","id":"1","delta":"d like to perform","metadata":{}},{"type":"text-delta","id":"1","delta":".","metadata":{}},{"type":"text-end","id":"1","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":135,"outputTokens":224,"totalTokens":359},"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":135,"output_tokens":4,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-0","stream":true,"tools":[{"name":"context-add","description":"Adds the object to the chat context.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the document to add.","examples":["dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","@dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","BM3FSHFOMJCHCG5QW7JTVKGYABD2GAA7G:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","01KG7R1ZXWFMWQ4DA1Q6TN1DG4"]}},"additionalProperties":false}},{"name":"context-remove","description":"Removes the object from the chat context.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the document to remove.","examples":["dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","@dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","BM3FSHFOMJCHCG5QW7JTVKGYABD2GAA7G:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","01KG7R1ZXWFMWQ4DA1Q6TN1DG4"]}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"## Blueprints Definitions\n\n<blueprint>\n \n</blueprint>","options":{}},{"role":"user","content":"Add to context: {\"id\":\"01JGFJJZ00G0WKQSJGMAKCNT8D\",\"@type\":\"dxn:type:dxos.org/type/Organization:0.1.0\",\"@meta\":{\"keys\":[]},\"name\":\"Cyberdyne Systems\",\"website\":\"https://cyberdyne.com\"}","options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01PwdqJ4KYGWGo88Bpgkcb1b","modelId":"claude-opus-4-20250514","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"reasoning-start","id":"0","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"The user wants to add an object to","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" the context. The","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" object has:","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"\n- id: \"01J","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"GFJJZ00G0","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"WKQSJGMAKCNT","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"8D\"\n- It","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"'s an","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" Organization type object","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"\n- name","metadata":{}},{"type":"reasoning-delta","id":"0","delta":": \"Cyberdyne Systems\"","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"\n- website: \"https://cyb","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"erdyne.com\"\n\nI nee","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"d to use the context-add function with","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" the","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" id parameter.","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"","metadata":{"anthropic":{"type":"thinking","signature":"EqkDCkYICxgCKkDRhGEp8nE9S2hhdiFom4JqAoWxdW/nKv7jjNB9Uybh5aeqVE13x2HhOoQJMWph3asUEzzt5B15yGTfoKc9lHSCEgytP588WsRipnT22dIaDFQPA72QE/XIbvEA+CIwxPckN1BzzMGgibUZmFKXxBdos3WMVBf2RpenWMQSppU+Ese4HQmltoQmp9zf7lj0KpAC1ZJP/lOSBxUTXS8BZWa7nOPclHVSohW2Ug8mul/NfMEDawimCvkkVYRRrdZQp1IeG/+kvJG7rQbgYsDU6SXN4zdPKcYtjv9wfIpRT6f200g1iBqRr1qKiMhLKpFNcAsOUaNQDXhKhr/A6ZhH4gaovEw65v10fyeUoHGzUHrDAEpy8cYDvzF/3TPEJhe3zIBw60cepyLaEZy+Z/1qmY2lsEqrkh95rv9WFASlB30nm762InotIIkAsMlxXY1xI0n+AZgh/ypPqyqaGiMVZ8aHKVLiCkBE1uTZszZBh7L2raEXK6znKVNSA4SiN33Mwzw7kEBBFrsuhrQnKqg8l5GaNqaE77knShQAXkzQYmgy8FMYAQ=="}}},{"type":"reasoning-end","id":"0","metadata":{}},{"type":"text-start","id":"1","metadata":{}},{"type":"text-delta","id":"1","delta":"I'll add this Organization","metadata":{}},{"type":"text-delta","id":"1","delta":" object to the context for you.","metadata":{}},{"type":"text-end","id":"1","metadata":{}},{"type":"tool-params-start","id":"toolu_01P7myKvWntosLM6RtWwKZGA","name":"context-add","providerExecuted":false,"metadata":{}},{"type":"tool-params-delta","id":"toolu_01P7myKvWntosLM6RtWwKZGA","delta":"","metadata":{}},{"type":"tool-params-delta","id":"toolu_01P7myKvWntosLM6RtWwKZGA","delta":"{\"id\": \"01JG","metadata":{}},{"type":"tool-params-delta","id":"toolu_01P7myKvWntosLM6RtWwKZGA","delta":"FJJZ00G0WKQ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01P7myKvWntosLM6RtWwKZGA","delta":"SJGMAK","metadata":{}},{"type":"tool-params-delta","id":"toolu_01P7myKvWntosLM6RtWwKZGA","delta":"CNT8D\"}","metadata":{}},{"type":"tool-params-end","id":"toolu_01P7myKvWntosLM6RtWwKZGA","metadata":{}},{"type":"tool-call","id":"toolu_01P7myKvWntosLM6RtWwKZGA","name":"context-add","params":{"id":"01JGFJJZ00G0WKQSJGMAKCNT8D"},"providerExecuted":false,"metadata":{}},{"type":"finish","reason":"tool-calls","usage":{"inputTokens":911,"outputTokens":183,"totalTokens":1094},"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":911,"output_tokens":8,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-0","stream":true,"tools":[{"name":"context-add","description":"Adds the object to the chat context.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the document to add.","examples":["dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","@dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","BM3FSHFOMJCHCG5QW7JTVKGYABD2GAA7G:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","01KG7R1ZXWFMWQ4DA1Q6TN1DG4"]}},"additionalProperties":false}},{"name":"context-remove","description":"Removes the object from the chat context.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the document to remove.","examples":["dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","@dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","BM3FSHFOMJCHCG5QW7JTVKGYABD2GAA7G:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","01KG7R1ZXWFMWQ4DA1Q6TN1DG4"]}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"## Blueprints Definitions\n\n<blueprint>\n \n</blueprint>","options":{}},{"role":"user","content":"Add to context: {\"id\":\"01JGFJJZ00G0WKQSJGMAKCNT8D\",\"@type\":\"dxn:type:dxos.org/type/Organization:0.1.0\",\"@meta\":{\"keys\":[]},\"name\":\"Cyberdyne Systems\",\"website\":\"https://cyberdyne.com\"}","options":{}},{"role":"assistant","content":[{"type":"reasoning","text":"The user wants to add an object to the context. The object has:\n- id: \"01JGFJJZ00G0WKQSJGMAKCNT8D\"\n- It's an Organization type object\n- name: \"Cyberdyne Systems\"\n- website: \"https://cyberdyne.com\"\n\nI need to use the context-add function with the id parameter.","options":{}},{"type":"text","text":"I'll add this Organization object to the context for you.","options":{}},{"type":"tool-call","id":"toolu_01P7myKvWntosLM6RtWwKZGA","name":"context-add","params":{"id":"01JGFJJZ00G0WKQSJGMAKCNT8D"},"providerExecuted":false,"options":{}}],"options":{}},{"role":"tool","content":[{"type":"tool-result","id":"toolu_01P7myKvWntosLM6RtWwKZGA","name":"context-add","isFailure":false,"result":{},"providerExecuted":false,"options":{}}],"options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01Rq8MMkzbb7kQcbuSf2pFcN","modelId":"claude-opus-4-20250514","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"text-start","id":"0","metadata":{}},{"type":"text-delta","id":"0","delta":"I","metadata":{}},{"type":"text-delta","id":"0","delta":"'ve successfully added the","metadata":{}},{"type":"text-delta","id":"0","delta":" Cyberdyne Systems organization to the context","metadata":{}},{"type":"text-delta","id":"0","delta":". This","metadata":{}},{"type":"text-delta","id":"0","delta":" organization object includes:","metadata":{}},{"type":"text-delta","id":"0","delta":"\n- Name","metadata":{}},{"type":"text-delta","id":"0","delta":": Cyberdyne Systems\n-","metadata":{}},{"type":"text-delta","id":"0","delta":" Website: https://cyberdyne.","metadata":{}},{"type":"text-delta","id":"0","delta":"com\n- Type: Organization","metadata":{}},{"type":"text-delta","id":"0","delta":" (version","metadata":{}},{"type":"text-delta","id":"0","delta":" 0.1.0)","metadata":{}},{"type":"text-delta","id":"0","delta":"\n\nThe object is","metadata":{}},{"type":"text-delta","id":"0","delta":" now available","metadata":{}},{"type":"text-delta","id":"0","delta":" in the chat","metadata":{}},{"type":"text-delta","id":"0","delta":" context for","metadata":{}},{"type":"text-delta","id":"0","delta":" reference","metadata":{}},{"type":"text-delta","id":"0","delta":" and can","metadata":{}},{"type":"text-delta","id":"0","delta":" be used in our","metadata":{}},{"type":"text-delta","id":"0","delta":" conversation.","metadata":{}},{"type":"text-end","id":"0","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":979,"outputTokens":77,"totalTokens":1056},"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":979,"output_tokens":1,"server_tool_use":null,"service_tier":"standard"}}}}]}]}
@@ -6,21 +6,13 @@ import { describe, expect, it } from '@effect/vitest';
6
6
  import * as Effect from 'effect/Effect';
7
7
  import * as Layer from 'effect/Layer';
8
8
 
9
- import { AiService, ConsolePrinter, MemoizedAiService } from '@dxos/ai';
10
- import { TestAiService } from '@dxos/ai/testing';
11
- import {
12
- AiConversation,
13
- type ContextBinding,
14
- GenerationObserver,
15
- makeToolExecutionServiceFromFunctions,
16
- makeToolResolverFromFunctions,
17
- } from '@dxos/assistant';
9
+ import { MemoizedAiService } from '@dxos/ai/testing';
10
+ import { AiContextService, AiConversationService, GenericToolkit } from '@dxos/assistant';
11
+ import { AssistantTestLayer } from '@dxos/assistant/testing';
12
+ import { waitForCondition } from '@dxos/async';
18
13
  import { Blueprint, Template } from '@dxos/blueprints';
19
- import { Obj } from '@dxos/echo';
20
- import { Ref } from '@dxos/echo';
21
- import { TestHelpers, acquireReleaseResource } from '@dxos/effect';
22
- import { CredentialsService, DatabaseService, QueueService, TracingService } from '@dxos/functions';
23
- import { FunctionInvocationServiceLayerTest, TestDatabaseLayer } from '@dxos/functions-runtime/testing';
14
+ import { Database, Obj, Ref } from '@dxos/echo';
15
+ import { TestHelpers } from '@dxos/effect/testing';
24
16
  import { ObjectId } from '@dxos/keys';
25
17
  import { Message, Organization, Person } from '@dxos/types';
26
18
 
@@ -28,25 +20,11 @@ import * as AssistantToolkit from './AssistantToolkit';
28
20
 
29
21
  ObjectId.dangerouslyDisableRandomness();
30
22
 
31
- const TestLayer = Layer.mergeAll(
32
- AiService.model('@anthropic/claude-opus-4-0'),
33
- makeToolResolverFromFunctions([], AssistantToolkit.AssistantToolkit),
34
- makeToolExecutionServiceFromFunctions(AssistantToolkit.AssistantToolkit, AssistantToolkit.layer()),
35
- ).pipe(
36
- Layer.provideMerge(FunctionInvocationServiceLayerTest()),
37
- Layer.provideMerge(
38
- Layer.mergeAll(
39
- TestAiService(),
40
- TestDatabaseLayer({
41
- spaceKey: 'fixed',
42
- indexing: { vector: true },
43
- types: [Blueprint.Blueprint, Message.Message, Person.Person, Organization.Organization],
44
- }),
45
- CredentialsService.configuredLayer([]),
46
- TracingService.layerNoop,
47
- ),
48
- ),
49
- );
23
+ const TestLayer = AssistantTestLayer({
24
+ types: [Blueprint.Blueprint, Message.Message, Person.Person, Organization.Organization],
25
+ toolkits: [GenericToolkit.make(AssistantToolkit.AssistantToolkit, AssistantToolkit.layer())],
26
+ tracing: 'pretty',
27
+ });
50
28
 
51
29
  const blueprint = Blueprint.make({
52
30
  key: 'dxos.org/blueprint/assistant',
@@ -60,27 +38,33 @@ describe('AssistantToolkit', () => {
60
38
  'can add to context',
61
39
  Effect.fnUntraced(
62
40
  function* (_) {
63
- const { db } = yield* DatabaseService;
64
- const queue = yield* QueueService.createQueue<Message.Message | ContextBinding>();
65
- const conversation = yield* acquireReleaseResource(() => new AiConversation(queue));
66
- const observer = GenerationObserver.fromPrinter(new ConsolePrinter());
67
- yield* Effect.promise(() => conversation.context.bind({ blueprints: [Ref.make(db.add(blueprint))] }));
41
+ yield* AiContextService.bindContext({
42
+ blueprints: [Ref.make(yield* Database.add(blueprint))],
43
+ });
68
44
 
69
- const organization = yield* DatabaseService.add(
45
+ const organization = yield* Database.add(
70
46
  Obj.make(Organization.Organization, {
71
47
  name: 'Cyberdyne Systems',
72
48
  website: 'https://cyberdyne.com',
73
49
  }),
74
50
  );
75
51
 
76
- yield* conversation.createRequest({
52
+ yield* AiConversationService.run({
77
53
  prompt: `Add to context: ${JSON.stringify(organization)}`,
78
- observer,
79
54
  });
80
55
 
81
- expect(conversation.context.objects.value).toEqual([Ref.make(organization)]);
56
+ const { binder } = yield* AiContextService;
57
+ yield* Effect.promise(() =>
58
+ waitForCondition({
59
+ condition: () => binder.getBlueprints().length > 0 && binder.getObjects().length > 0,
60
+ timeout: 10_000,
61
+ }),
62
+ );
63
+
64
+ expect(binder.getBlueprints()).toEqual([blueprint]);
65
+ expect(binder.getObjects()).toEqual([organization]);
82
66
  },
83
- Effect.provide(TestLayer),
67
+ Effect.provide(AiConversationService.layerNewQueue().pipe(Layer.provideMerge(TestLayer))),
84
68
  TestHelpers.provideTestContext,
85
69
  ),
86
70
  MemoizedAiService.isGenerationEnabled() ? 60_000 : undefined,
@@ -9,23 +9,35 @@ import * as Record from 'effect/Record';
9
9
  import * as Schema from 'effect/Schema';
10
10
 
11
11
  import { AiContextService, ArtifactId } from '@dxos/assistant';
12
- import { Ref } from '@dxos/echo';
13
- import { DatabaseService } from '@dxos/functions';
12
+ import { Database, type Ref } from '@dxos/echo';
14
13
  import { trim } from '@dxos/util';
15
14
 
16
15
  export const AssistantToolkit = Toolkit.make(
17
- Tool.make('add-to-context', {
16
+ Tool.make('context-add', {
18
17
  description: trim`
19
18
  Adds the object to the chat context.
20
19
  `,
21
20
  parameters: {
22
21
  id: ArtifactId.annotations({
23
- description: 'The ID of the document to read.',
22
+ description: 'The ID of the document to add.',
24
23
  }),
25
24
  },
26
25
  success: Schema.Void,
27
26
  failure: Schema.Never,
28
- dependencies: [AiContextService, DatabaseService],
27
+ dependencies: [AiContextService, Database.Service],
28
+ }),
29
+ Tool.make('context-remove', {
30
+ description: trim`
31
+ Removes the object from the chat context.
32
+ `,
33
+ parameters: {
34
+ id: ArtifactId.annotations({
35
+ description: 'The ID of the document to remove.',
36
+ }),
37
+ },
38
+ success: Schema.Void,
39
+ failure: Schema.Never,
40
+ dependencies: [AiContextService, Database.Service],
29
41
  }),
30
42
  );
31
43
 
@@ -33,10 +45,10 @@ export const tools = Record.keys(AssistantToolkit.tools);
33
45
 
34
46
  export const layer = () =>
35
47
  AssistantToolkit.toLayer({
36
- 'add-to-context': Effect.fnUntraced(function* ({ id }) {
48
+ ['context-add' as const]: Effect.fnUntraced(function* ({ id }) {
37
49
  const { binder } = yield* AiContextService;
38
- const { db } = yield* DatabaseService;
39
- const ref = Ref.fromDXN(ArtifactId.toDXN(id, db.spaceId));
50
+ const { db } = yield* Database.Service;
51
+ const ref = db.makeRef(ArtifactId.toDXN(id, db.spaceId)) as Ref.Ref<any>;
40
52
  yield* Effect.promise(() =>
41
53
  binder.bind({
42
54
  blueprints: [],
@@ -44,4 +56,15 @@ export const layer = () =>
44
56
  }),
45
57
  );
46
58
  }),
59
+ ['context-remove' as const]: Effect.fnUntraced(function* ({ id }) {
60
+ const { binder } = yield* AiContextService;
61
+ const { db } = yield* Database.Service;
62
+ const ref = db.makeRef(ArtifactId.toDXN(id, db.spaceId)) as Ref.Ref<any>;
63
+ yield* Effect.promise(() =>
64
+ binder.unbind({
65
+ blueprints: [],
66
+ objects: [ref],
67
+ }),
68
+ );
69
+ }),
47
70
  });
@@ -10,8 +10,8 @@ import * as Record from 'effect/Record';
10
10
  import * as Schema from 'effect/Schema';
11
11
 
12
12
  import { ArtifactId } from '@dxos/assistant';
13
- import { DXN, Obj, Relation, Tag, Type } from '@dxos/echo';
14
- import { DatabaseService } from '@dxos/functions';
13
+ import { DXN, Database, Entity, Filter, Obj, Relation, Tag, Type } from '@dxos/echo';
14
+ import { invariant } from '@dxos/invariant';
15
15
  import { trim } from '@dxos/util';
16
16
 
17
17
  export const SystemToolkit = Toolkit.make(
@@ -30,7 +30,7 @@ export const SystemToolkit = Toolkit.make(
30
30
  // TODO(dmaretskyi): Effect returns ({ result, encodedResult })
31
31
  success: Schema.Any,
32
32
  failure: Schema.Never,
33
- dependencies: [DatabaseService],
33
+ dependencies: [Database.Service],
34
34
  }),
35
35
 
36
36
  Tool.make('schema-add', {
@@ -46,7 +46,24 @@ export const SystemToolkit = Toolkit.make(
46
46
  },
47
47
  success: Schema.Any,
48
48
  failure: Schema.Never,
49
- dependencies: [DatabaseService],
49
+ dependencies: [Database.Service],
50
+ }),
51
+
52
+ //
53
+ // Query
54
+ //
55
+
56
+ Tool.make('query', {
57
+ description: trim`
58
+ Queries objects in the space.
59
+ Get the typename from the schema-list tool.
60
+ `,
61
+ parameters: {
62
+ typename: Schema.String,
63
+ },
64
+ success: Schema.Any,
65
+ failure: Schema.Never,
66
+ dependencies: [Database.Service],
50
67
  }),
51
68
 
52
69
  //
@@ -63,22 +80,37 @@ export const SystemToolkit = Toolkit.make(
63
80
  data: Schema.Any,
64
81
  },
65
82
  success: Schema.Any,
83
+ failure: Schema.Never, // TODO(burdon): Error handing?
84
+ dependencies: [Database.Service],
85
+ }),
86
+
87
+ Tool.make('object-delete', {
88
+ description: trim`
89
+ Deletes the object.
90
+ `,
91
+ parameters: {
92
+ id: ArtifactId.annotations({
93
+ description: 'The ID of the object.',
94
+ }),
95
+ },
96
+ success: Schema.Any,
66
97
  failure: Schema.Never,
67
- dependencies: [DatabaseService],
98
+ dependencies: [Database.Service],
68
99
  }),
69
100
 
70
- Tool.make('object-remove', {
101
+ Tool.make('object-update', {
71
102
  description: trim`
72
- Removes an object or relation from the database.
103
+ Updates the object properties.
73
104
  `,
74
105
  parameters: {
75
106
  id: ArtifactId.annotations({
76
107
  description: 'The ID of the object.',
77
108
  }),
109
+ properties: Schema.Record({ key: Schema.String, value: Schema.Any }),
78
110
  },
79
111
  success: Schema.Any,
80
112
  failure: Schema.Never,
81
- dependencies: [DatabaseService],
113
+ dependencies: [Database.Service],
82
114
  }),
83
115
 
84
116
  //
@@ -104,7 +136,21 @@ export const SystemToolkit = Toolkit.make(
104
136
  },
105
137
  success: Schema.Any,
106
138
  failure: Schema.Never,
107
- dependencies: [DatabaseService],
139
+ dependencies: [Database.Service],
140
+ }),
141
+
142
+ Tool.make('relation-delete', {
143
+ description: trim`
144
+ Deletes the relation.
145
+ `,
146
+ parameters: {
147
+ id: ArtifactId.annotations({
148
+ description: 'The ID of the relation.',
149
+ }),
150
+ },
151
+ success: Schema.Any,
152
+ failure: Schema.Never,
153
+ dependencies: [Database.Service],
108
154
  }),
109
155
 
110
156
  //
@@ -126,7 +172,7 @@ export const SystemToolkit = Toolkit.make(
126
172
  },
127
173
  success: Schema.Any,
128
174
  failure: Schema.Never,
129
- dependencies: [DatabaseService],
175
+ dependencies: [Database.Service],
130
176
  }),
131
177
 
132
178
  Tool.make('tag-remove', {
@@ -144,7 +190,7 @@ export const SystemToolkit = Toolkit.make(
144
190
  },
145
191
  success: Schema.Any,
146
192
  failure: Schema.Never,
147
- dependencies: [DatabaseService],
193
+ dependencies: [Database.Service],
148
194
  }),
149
195
  );
150
196
 
@@ -152,10 +198,9 @@ export const tools = Record.keys(SystemToolkit.tools);
152
198
 
153
199
  export const layer = (): Layer.Layer<Tool.Handler<any>, never, never> =>
154
200
  SystemToolkit.toLayer({
155
- 'schema-list': Effect.fnUntraced(function* () {
156
- const { db } = yield* DatabaseService;
201
+ ['schema-list' as const]: Effect.fnUntraced(function* () {
202
+ const { db } = yield* Database.Service;
157
203
  const schema = yield* Effect.promise(() => db.schemaRegistry.query({ location: ['database', 'runtime'] }).run());
158
-
159
204
  return schema.map((schema) => {
160
205
  const meta = Type.getMeta(schema);
161
206
  return {
@@ -166,9 +211,8 @@ export const layer = (): Layer.Layer<Tool.Handler<any>, never, never> =>
166
211
  });
167
212
  }),
168
213
 
169
- 'schema-add': Effect.fnUntraced(function* ({ name, typename, jsonSchema }) {
170
- const { db } = yield* DatabaseService;
171
-
214
+ ['schema-add' as const]: Effect.fnUntraced(function* ({ name, typename, jsonSchema }) {
215
+ const { db } = yield* Database.Service;
172
216
  yield* Effect.promise(() =>
173
217
  db.schemaRegistry.register([
174
218
  {
@@ -181,32 +225,49 @@ export const layer = (): Layer.Layer<Tool.Handler<any>, never, never> =>
181
225
  );
182
226
  }),
183
227
 
184
- 'object-create': Effect.fnUntraced(function* ({ typename, data }) {
185
- const { db } = yield* DatabaseService;
228
+ ['query' as const]: Effect.fnUntraced(function* ({ typename }) {
229
+ const objects = yield* Database.runQuery(Filter.typename(typename));
230
+ return objects;
231
+ }),
232
+
233
+ ['object-create' as const]: Effect.fnUntraced(function* ({ typename, data }) {
234
+ const { db } = yield* Database.Service;
186
235
  const schema = yield* Effect.promise(() =>
187
236
  db.schemaRegistry.query({ typename, location: ['database', 'runtime'] }).first(),
188
237
  );
238
+ invariant(Type.isObjectSchema(schema), 'Schema is not an object schema');
189
239
 
190
240
  // TODO(dmaretskyi): How to add object to a collection?
191
241
  const object = db.add(Obj.make(schema, data));
192
242
  return object;
193
243
  }),
194
244
 
195
- 'object-remove': Effect.fnUntraced(function* ({ id }) {
196
- const { db } = yield* DatabaseService;
197
- const object = yield* DatabaseService.resolve(DXN.parse(id));
245
+ ['object-delete' as const]: Effect.fnUntraced(function* ({ id }) {
246
+ const { db } = yield* Database.Service;
247
+ const object = yield* Database.resolve(DXN.parse(id));
198
248
  db.remove(object);
199
249
  return object;
200
250
  }),
201
251
 
202
- 'relation-create': Effect.fnUntraced(function* ({ typename, source, target, data }) {
203
- const { db } = yield* DatabaseService;
252
+ ['object-update' as const]: Effect.fnUntraced(function* ({ id, properties }) {
253
+ const object = yield* Database.resolve(DXN.parse(id));
254
+ Entity.change(object as Entity.Any, (obj) => {
255
+ for (const [key, value] of Object.entries(properties)) {
256
+ obj[key] = value;
257
+ }
258
+ });
259
+ return object;
260
+ }),
261
+
262
+ ['relation-create' as const]: Effect.fnUntraced(function* ({ typename, source, target, data }) {
263
+ const { db } = yield* Database.Service;
204
264
  const schema = yield* Effect.promise(() =>
205
265
  db.schemaRegistry.query({ typename, location: ['database', 'runtime'] }).first(),
206
266
  );
267
+ invariant(Type.isRelationSchema(schema), 'Schema is not a relation schema');
207
268
 
208
- const sourceObj = yield* DatabaseService.resolve(DXN.parse(source));
209
- const targetObj = yield* DatabaseService.resolve(DXN.parse(target));
269
+ const sourceObj = yield* Database.resolve(DXN.parse(source));
270
+ const targetObj = yield* Database.resolve(DXN.parse(target));
210
271
  const relation = db.add(
211
272
  Relation.make(schema, {
212
273
  [Relation.Source]: sourceObj,
@@ -217,15 +278,22 @@ export const layer = (): Layer.Layer<Tool.Handler<any>, never, never> =>
217
278
  return relation;
218
279
  }),
219
280
 
220
- 'tag-add': Effect.fnUntraced(function* ({ tagId, objectId }) {
221
- const object = yield* DatabaseService.resolve(DXN.parse(objectId));
222
- Obj.addTag(object, DXN.parse(tagId).toString());
281
+ ['relation-delete' as const]: Effect.fnUntraced(function* ({ id }) {
282
+ const { db } = yield* Database.Service;
283
+ const relation = yield* Database.resolve(DXN.parse(id));
284
+ db.remove(relation);
285
+ return relation;
286
+ }),
287
+
288
+ ['tag-add' as const]: Effect.fnUntraced(function* ({ tagId, objectId }) {
289
+ const object = yield* Database.resolve(DXN.parse(objectId));
290
+ Entity.change(object, (obj) => Entity.addTag(obj, DXN.parse(tagId).toString()));
223
291
  return object;
224
292
  }),
225
293
 
226
- 'tag-remove': Effect.fnUntraced(function* ({ tagId, objectId }) {
227
- const object = yield* DatabaseService.resolve(DXN.parse(objectId));
228
- Obj.removeTag(object, DXN.parse(tagId).toString());
294
+ ['tag-remove' as const]: Effect.fnUntraced(function* ({ tagId, objectId }) {
295
+ const object = yield* Database.resolve(DXN.parse(objectId));
296
+ Entity.change(object, (obj) => Entity.removeTag(obj, DXN.parse(tagId).toString()));
229
297
  return object;
230
298
  }),
231
299
  });
@@ -0,0 +1,34 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Tool from '@effect/ai/Tool';
6
+ import * as Toolkit from '@effect/ai/Toolkit';
7
+ import * as AnthropicTool from '@effect/ai-anthropic/AnthropicTool';
8
+ import * as Effect from 'effect/Effect';
9
+ import * as Schema from 'effect/Schema';
10
+
11
+ // TODO(dmaretskyi): Testing only.
12
+ export const WebToolkit = Toolkit.make(
13
+ AnthropicTool.WebSearch_20250305({})
14
+ .pipe
15
+ // TODO(dmaretskyi): Effect bug -- provider-defined tools don't support annotations.
16
+ // ToolFormatter.assign({
17
+ // debugFormatResult: (result) =>
18
+ // Array.isArray(result) ? result.map(Struct.pick('title', 'type', 'url', 'page_age')) : result,
19
+ // }),
20
+ (),
21
+ Tool.make('WebFetch', {
22
+ parameters: {
23
+ url: Schema.String,
24
+ },
25
+ success: Schema.String,
26
+ }),
27
+ );
28
+
29
+ export const layer = WebToolkit.toLayer({
30
+ WebFetch: Effect.fnUntraced(function* ({ url }) {
31
+ const response = yield* Effect.promise(() => fetch(url).then((response) => response.text()));
32
+ return response;
33
+ }),
34
+ });
@@ -4,3 +4,4 @@
4
4
 
5
5
  export * as AssistantToolkit from './AssistantToolkit';
6
6
  export * as SystemToolkit from './SystemToolkit';
7
+ export * as WebToolkit from './WebToolkit';