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

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 (96) hide show
  1. package/dist/lib/browser/index.mjs +891 -595
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +890 -595
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/blueprints/research/research-blueprint.d.ts.map +1 -1
  8. package/dist/types/src/blueprints/websearch/websearch-toolkit.d.ts +1 -0
  9. package/dist/types/src/blueprints/websearch/websearch-toolkit.d.ts.map +1 -1
  10. package/dist/types/src/crud/graph.d.ts.map +1 -0
  11. package/dist/types/src/crud/graph.test.d.ts.map +1 -0
  12. package/dist/types/src/crud/index.d.ts +2 -0
  13. package/dist/types/src/crud/index.d.ts.map +1 -0
  14. package/dist/types/src/functions/agent/prompt.d.ts +3 -5
  15. package/dist/types/src/functions/agent/prompt.d.ts.map +1 -1
  16. package/dist/types/src/functions/discord/fetch-messages.d.ts +1 -1
  17. package/dist/types/src/functions/discord/index.d.ts +1 -1
  18. package/dist/types/src/functions/discord/index.d.ts.map +1 -1
  19. package/dist/types/src/functions/document/index.d.ts +3 -2
  20. package/dist/types/src/functions/document/index.d.ts.map +1 -1
  21. package/dist/types/src/functions/document/read.d.ts +1 -1
  22. package/dist/types/src/functions/document/update.d.ts +1 -1
  23. package/dist/types/src/functions/entity-extraction/entity-extraction.d.ts +2 -2
  24. package/dist/types/src/functions/entity-extraction/entity-extraction.d.ts.map +1 -1
  25. package/dist/types/src/functions/entity-extraction/index.d.ts +2 -2
  26. package/dist/types/src/functions/entity-extraction/index.d.ts.map +1 -1
  27. package/dist/types/src/functions/exa/exa.d.ts +1 -1
  28. package/dist/types/src/functions/exa/mock.d.ts +1 -1
  29. package/dist/types/src/functions/github/fetch-prs.d.ts +1 -1
  30. package/dist/types/src/functions/linear/index.d.ts +1 -1
  31. package/dist/types/src/functions/linear/index.d.ts.map +1 -1
  32. package/dist/types/src/functions/linear/sync-issues.d.ts +1 -1
  33. package/dist/types/src/functions/research/document-create.d.ts +9 -0
  34. package/dist/types/src/functions/research/document-create.d.ts.map +1 -0
  35. package/dist/types/src/functions/research/index.d.ts +8 -6
  36. package/dist/types/src/functions/research/index.d.ts.map +1 -1
  37. package/dist/types/src/functions/research/research.d.ts +4 -3
  38. package/dist/types/src/functions/research/research.d.ts.map +1 -1
  39. package/dist/types/src/functions/research/types.d.ts +2 -380
  40. package/dist/types/src/functions/research/types.d.ts.map +1 -1
  41. package/dist/types/src/functions/tasks/index.d.ts +2 -2
  42. package/dist/types/src/functions/tasks/index.d.ts.map +1 -1
  43. package/dist/types/src/functions/tasks/read.d.ts +1 -1
  44. package/dist/types/src/functions/tasks/update.d.ts +1 -1
  45. package/dist/types/src/index.d.ts +2 -0
  46. package/dist/types/src/index.d.ts.map +1 -1
  47. package/dist/types/src/toolkits/AssistantToolkit.d.ts +17 -0
  48. package/dist/types/src/toolkits/AssistantToolkit.d.ts.map +1 -0
  49. package/dist/types/src/toolkits/AssistantToolkit.test.d.ts +2 -0
  50. package/dist/types/src/toolkits/AssistantToolkit.test.d.ts.map +1 -0
  51. package/dist/types/src/toolkits/SystemToolkit.d.ts +67 -0
  52. package/dist/types/src/toolkits/SystemToolkit.d.ts.map +1 -0
  53. package/dist/types/src/toolkits/index.d.ts +3 -0
  54. package/dist/types/src/toolkits/index.d.ts.map +1 -0
  55. package/dist/types/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +24 -22
  57. package/src/blueprints/design/design-blueprint.test.ts +9 -14
  58. package/src/blueprints/design/design-blueprint.ts +2 -2
  59. package/src/blueprints/discord/discord-blueprint.ts +2 -2
  60. package/src/blueprints/linear/linear-blueprint.ts +2 -2
  61. package/src/blueprints/planning/planning-blueprint.test.ts +11 -16
  62. package/src/blueprints/planning/planning-blueprint.ts +2 -2
  63. package/src/blueprints/research/research-blueprint.ts +23 -15
  64. package/src/blueprints/websearch/websearch-blueprint.ts +2 -2
  65. package/src/{functions/research → crud}/graph.test.ts +2 -2
  66. package/src/crud/index.ts +5 -0
  67. package/src/experimental/feed.test.ts +11 -8
  68. package/src/functions/agent/prompt.ts +25 -12
  69. package/src/functions/discord/fetch-messages.test.ts +5 -6
  70. package/src/functions/discord/fetch-messages.ts +10 -9
  71. package/src/functions/document/index.ts +1 -0
  72. package/src/functions/entity-extraction/entity-extraction.conversations.json +1 -1
  73. package/src/functions/entity-extraction/entity-extraction.test.ts +11 -19
  74. package/src/functions/entity-extraction/entity-extraction.ts +15 -13
  75. package/src/functions/linear/linear.test.ts +13 -16
  76. package/src/functions/linear/sync-issues.ts +7 -7
  77. package/src/functions/research/{create-document.ts → document-create.ts} +32 -26
  78. package/src/functions/research/index.ts +1 -2
  79. package/src/functions/research/{instructions-research.tpl → research-instructions.tpl} +14 -6
  80. package/src/functions/research/research.conversations.json +1 -10714
  81. package/src/functions/research/research.test.ts +87 -148
  82. package/src/functions/research/research.ts +84 -49
  83. package/src/functions/research/types.ts +14 -12
  84. package/src/index.ts +2 -0
  85. package/src/toolkits/AssistantToolkit.conversations.json +1 -0
  86. package/src/toolkits/AssistantToolkit.test.ts +88 -0
  87. package/src/toolkits/AssistantToolkit.ts +47 -0
  88. package/src/toolkits/SystemToolkit.ts +231 -0
  89. package/src/toolkits/index.ts +6 -0
  90. package/dist/types/src/functions/research/create-document.d.ts +0 -7
  91. package/dist/types/src/functions/research/create-document.d.ts.map +0 -1
  92. package/dist/types/src/functions/research/graph.d.ts.map +0 -1
  93. package/dist/types/src/functions/research/graph.test.d.ts.map +0 -1
  94. /package/dist/types/src/{functions/research → crud}/graph.d.ts +0 -0
  95. /package/dist/types/src/{functions/research → crud}/graph.test.d.ts +0 -0
  96. /package/src/{functions/research → crud}/graph.ts +0 -0
@@ -0,0 +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"}}}}]}]}
@@ -0,0 +1,88 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { describe, expect, it } from '@effect/vitest';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Layer from 'effect/Layer';
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';
18
+ 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';
24
+ import { ObjectId } from '@dxos/keys';
25
+ import { Message, Organization, Person } from '@dxos/types';
26
+
27
+ import * as AssistantToolkit from './AssistantToolkit';
28
+
29
+ ObjectId.dangerouslyDisableRandomness();
30
+
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
+ );
50
+
51
+ const blueprint = Blueprint.make({
52
+ key: 'dxos.org/blueprint/assistant',
53
+ name: 'Assistant',
54
+ tools: Blueprint.toolDefinitions({ tools: AssistantToolkit.tools }),
55
+ instructions: Template.make(),
56
+ });
57
+
58
+ describe('AssistantToolkit', () => {
59
+ it.scoped(
60
+ 'can add to context',
61
+ Effect.fnUntraced(
62
+ 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))] }));
68
+
69
+ const organization = yield* DatabaseService.add(
70
+ Obj.make(Organization.Organization, {
71
+ name: 'Cyberdyne Systems',
72
+ website: 'https://cyberdyne.com',
73
+ }),
74
+ );
75
+
76
+ yield* conversation.createRequest({
77
+ prompt: `Add to context: ${JSON.stringify(organization)}`,
78
+ observer,
79
+ });
80
+
81
+ expect(conversation.context.objects.value).toEqual([Ref.make(organization)]);
82
+ },
83
+ Effect.provide(TestLayer),
84
+ TestHelpers.provideTestContext,
85
+ ),
86
+ MemoizedAiService.isGenerationEnabled() ? 60_000 : undefined,
87
+ );
88
+ });
@@ -0,0 +1,47 @@
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 Effect from 'effect/Effect';
8
+ import * as Record from 'effect/Record';
9
+ import * as Schema from 'effect/Schema';
10
+
11
+ import { AiContextService, ArtifactId } from '@dxos/assistant';
12
+ import { Ref } from '@dxos/echo';
13
+ import { DatabaseService } from '@dxos/functions';
14
+ import { trim } from '@dxos/util';
15
+
16
+ export const AssistantToolkit = Toolkit.make(
17
+ Tool.make('add-to-context', {
18
+ description: trim`
19
+ Adds the object to the chat context.
20
+ `,
21
+ parameters: {
22
+ id: ArtifactId.annotations({
23
+ description: 'The ID of the document to read.',
24
+ }),
25
+ },
26
+ success: Schema.Void,
27
+ failure: Schema.Never,
28
+ dependencies: [AiContextService, DatabaseService],
29
+ }),
30
+ );
31
+
32
+ export const tools = Record.keys(AssistantToolkit.tools);
33
+
34
+ export const layer = () =>
35
+ AssistantToolkit.toLayer({
36
+ 'add-to-context': Effect.fnUntraced(function* ({ id }) {
37
+ const { binder } = yield* AiContextService;
38
+ const { db } = yield* DatabaseService;
39
+ const ref = Ref.fromDXN(ArtifactId.toDXN(id, db.spaceId));
40
+ yield* Effect.promise(() =>
41
+ binder.bind({
42
+ blueprints: [],
43
+ objects: [ref],
44
+ }),
45
+ );
46
+ }),
47
+ });
@@ -0,0 +1,231 @@
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 Effect from 'effect/Effect';
8
+ import type * as Layer from 'effect/Layer';
9
+ import * as Record from 'effect/Record';
10
+ import * as Schema from 'effect/Schema';
11
+
12
+ import { ArtifactId } from '@dxos/assistant';
13
+ import { DXN, Obj, Relation, Tag, Type } from '@dxos/echo';
14
+ import { DatabaseService } from '@dxos/functions';
15
+ import { trim } from '@dxos/util';
16
+
17
+ export const SystemToolkit = Toolkit.make(
18
+ //
19
+ // Schema
20
+ //
21
+
22
+ Tool.make('schema-list', {
23
+ description: trim`
24
+ Lists schemas definitions.
25
+ `,
26
+ parameters: {
27
+ // TODO(wittjosiah): Remove this once parameter-less tools are fixed.
28
+ limit: Schema.Number,
29
+ },
30
+ // TODO(dmaretskyi): Effect returns ({ result, encodedResult })
31
+ success: Schema.Any,
32
+ failure: Schema.Never,
33
+ dependencies: [DatabaseService],
34
+ }),
35
+
36
+ Tool.make('schema-add', {
37
+ description: trim`
38
+ Adds a schema to the space.
39
+ The name will be used when displayed to the user.
40
+ The typename must be in the format of "example.com/type/Type".
41
+ `,
42
+ parameters: {
43
+ name: Schema.String,
44
+ typename: Schema.String,
45
+ jsonSchema: Schema.Any,
46
+ },
47
+ success: Schema.Any,
48
+ failure: Schema.Never,
49
+ dependencies: [DatabaseService],
50
+ }),
51
+
52
+ //
53
+ // Objects
54
+ //
55
+
56
+ Tool.make('object-create', {
57
+ description: trim`
58
+ Creates a new object and adds it to the current space.
59
+ Get the schema from the schema-list tool and ensure that the data matches the corresponding schema.
60
+ `,
61
+ parameters: {
62
+ typename: Schema.String,
63
+ data: Schema.Any,
64
+ },
65
+ success: Schema.Any,
66
+ failure: Schema.Never,
67
+ dependencies: [DatabaseService],
68
+ }),
69
+
70
+ Tool.make('object-remove', {
71
+ description: trim`
72
+ Removes an object or relation from the database.
73
+ `,
74
+ parameters: {
75
+ id: ArtifactId.annotations({
76
+ description: 'The ID of the object.',
77
+ }),
78
+ },
79
+ success: Schema.Any,
80
+ failure: Schema.Never,
81
+ dependencies: [DatabaseService],
82
+ }),
83
+
84
+ //
85
+ // Relations
86
+ //
87
+
88
+ Tool.make('relation-create', {
89
+ description: trim`
90
+ Creates a new relation and adds it to the current space.
91
+ Get the schema from the schema-list tool and ensure that the data matches the corresponding schema.
92
+ `,
93
+ parameters: {
94
+ typename: Schema.String,
95
+ source: ArtifactId.annotations({
96
+ description: 'The ID of the source object.',
97
+ }),
98
+ target: ArtifactId.annotations({
99
+ description: 'The ID of the target object.',
100
+ }),
101
+ data: Schema.Any.annotations({
102
+ description: 'The data to be stored in the relation.',
103
+ }),
104
+ },
105
+ success: Schema.Any,
106
+ failure: Schema.Never,
107
+ dependencies: [DatabaseService],
108
+ }),
109
+
110
+ //
111
+ // Tags
112
+ //
113
+
114
+ Tool.make('tag-add', {
115
+ description: trim`
116
+ Adds a tag to an object.
117
+ Tags are objects of type ${Tag.Tag.typename}.
118
+ `,
119
+ parameters: {
120
+ tagId: ArtifactId.annotations({
121
+ description: 'The ID of the tag.',
122
+ }),
123
+ objectId: ArtifactId.annotations({
124
+ description: 'The ID of the object.',
125
+ }),
126
+ },
127
+ success: Schema.Any,
128
+ failure: Schema.Never,
129
+ dependencies: [DatabaseService],
130
+ }),
131
+
132
+ Tool.make('tag-remove', {
133
+ description: trim`
134
+ Removes a tag from an object.
135
+ Tags are objects of type ${Tag.Tag.typename}.
136
+ `,
137
+ parameters: {
138
+ tagId: ArtifactId.annotations({
139
+ description: 'The ID of the tag.',
140
+ }),
141
+ objectId: ArtifactId.annotations({
142
+ description: 'The ID of the object.',
143
+ }),
144
+ },
145
+ success: Schema.Any,
146
+ failure: Schema.Never,
147
+ dependencies: [DatabaseService],
148
+ }),
149
+ );
150
+
151
+ export const tools = Record.keys(SystemToolkit.tools);
152
+
153
+ export const layer = (): Layer.Layer<Tool.Handler<any>, never, never> =>
154
+ SystemToolkit.toLayer({
155
+ 'schema-list': Effect.fnUntraced(function* () {
156
+ const { db } = yield* DatabaseService;
157
+ const schema = yield* Effect.promise(() => db.schemaRegistry.query({ location: ['database', 'runtime'] }).run());
158
+
159
+ return schema.map((schema) => {
160
+ const meta = Type.getMeta(schema);
161
+ return {
162
+ typename: Type.getTypename(schema),
163
+ jsonSchema: Type.toJsonSchema(schema),
164
+ kind: meta?.sourceSchema ? 'relation' : 'record',
165
+ };
166
+ });
167
+ }),
168
+
169
+ 'schema-add': Effect.fnUntraced(function* ({ name, typename, jsonSchema }) {
170
+ const { db } = yield* DatabaseService;
171
+
172
+ yield* Effect.promise(() =>
173
+ db.schemaRegistry.register([
174
+ {
175
+ typename,
176
+ version: '0.1.0',
177
+ jsonSchema,
178
+ name,
179
+ },
180
+ ]),
181
+ );
182
+ }),
183
+
184
+ 'object-create': Effect.fnUntraced(function* ({ typename, data }) {
185
+ const { db } = yield* DatabaseService;
186
+ const schema = yield* Effect.promise(() =>
187
+ db.schemaRegistry.query({ typename, location: ['database', 'runtime'] }).first(),
188
+ );
189
+
190
+ // TODO(dmaretskyi): How to add object to a collection?
191
+ const object = db.add(Obj.make(schema, data));
192
+ return object;
193
+ }),
194
+
195
+ 'object-remove': Effect.fnUntraced(function* ({ id }) {
196
+ const { db } = yield* DatabaseService;
197
+ const object = yield* DatabaseService.resolve(DXN.parse(id));
198
+ db.remove(object);
199
+ return object;
200
+ }),
201
+
202
+ 'relation-create': Effect.fnUntraced(function* ({ typename, source, target, data }) {
203
+ const { db } = yield* DatabaseService;
204
+ const schema = yield* Effect.promise(() =>
205
+ db.schemaRegistry.query({ typename, location: ['database', 'runtime'] }).first(),
206
+ );
207
+
208
+ const sourceObj = yield* DatabaseService.resolve(DXN.parse(source));
209
+ const targetObj = yield* DatabaseService.resolve(DXN.parse(target));
210
+ const relation = db.add(
211
+ Relation.make(schema, {
212
+ [Relation.Source]: sourceObj,
213
+ [Relation.Target]: targetObj,
214
+ ...data,
215
+ }),
216
+ );
217
+ return relation;
218
+ }),
219
+
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());
223
+ return object;
224
+ }),
225
+
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());
229
+ return object;
230
+ }),
231
+ });
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * as AssistantToolkit from './AssistantToolkit';
6
+ export * as SystemToolkit from './SystemToolkit';
@@ -1,7 +0,0 @@
1
- declare const _default: import("@dxos/functions").FunctionDefinition<{
2
- readonly name: string;
3
- readonly content: string;
4
- readonly target: string;
5
- }, {}>;
6
- export default _default;
7
- //# sourceMappingURL=create-document.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-document.d.ts","sourceRoot":"","sources":["../../../../../src/functions/research/create-document.ts"],"names":[],"mappings":";;;;;AAgBA,wBAoDG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../../../src/functions/research/graph.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAK9C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,GAAG,EAAiB,MAAM,YAAY,CAAC;AAiBhD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAKjC,eAAO,MAAM,QAAQ;IACnB,6BAA6B;;EAE7B,CAAC;AAEH,MAAM,WAAW,QAAS,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC;CAAG;AAExE,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;IACnC,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;CAChC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,IAAI,YAAY,EAChB,QAAQ,MAAM,CAAC,MAAM,CAAC,YAAY,KACjC,OAAO,CAAC,aAAa,EAAE,CAsBzB,CAAC;AAmBF;;GAEG;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;EAY9B,CAAC;AAEF,eAAO,MAAM,kBAAkB,iFAkB7B,CAAC;AAYH;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,YAAY;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAA;CAAE;;;;;;;;EAU1F,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,SAAS,UAAU,CAAC,OAAO,sBAAsB,CAAC,EAClD,gBAEG;IACD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CAC/B,6EAmBP,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;;EAWzE,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,MAAM,CAAC,MAAM,CAAC,YAAY,WAIxE,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EACnC,MAAM,MAAM,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,EACxC,IAAI,YAAY,EAChB,QAAQ,KAAK,KACZ,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAyHnB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph.test.d.ts","sourceRoot":"","sources":["../../../../../src/functions/research/graph.test.ts"],"names":[],"mappings":""}
File without changes