@dxos/assistant-toolkit 0.8.4-main.3fbcb4aa9b → 0.8.4-main.43cb759274
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.
- package/LICENSE +102 -5
- package/dist/lib/neutral/{add-artifact-ZUJ5DMSY.mjs → add-artifact-ADKF427P.mjs} +6 -6
- package/dist/lib/neutral/{add-artifact-ZUJ5DMSY.mjs.map → add-artifact-ADKF427P.mjs.map} +3 -3
- package/dist/lib/neutral/{agent-5NIKAYUK.mjs → agent-4HT4GKKI.mjs} +9 -9
- package/dist/lib/neutral/{agent-5NIKAYUK.mjs.map → agent-4HT4GKKI.mjs.map} +2 -2
- package/dist/lib/neutral/{chunk-TO5IX24K.mjs → chunk-3ZDYN7BG.mjs} +16 -27
- package/dist/lib/neutral/chunk-3ZDYN7BG.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-EJAQUAKM.mjs → chunk-53BZWMRB.mjs} +12 -8
- package/dist/lib/neutral/chunk-53BZWMRB.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-WLR3BGO4.mjs → chunk-6SYN5IV3.mjs} +4 -2
- package/dist/lib/neutral/chunk-6SYN5IV3.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-QO5SU37C.mjs → chunk-7OQIX2PP.mjs} +4 -4
- package/dist/lib/neutral/{chunk-QO5SU37C.mjs.map → chunk-7OQIX2PP.mjs.map} +1 -1
- package/dist/lib/neutral/{chunk-P4ZMYO4K.mjs → chunk-ALDU6VDG.mjs} +21 -33
- package/dist/lib/neutral/chunk-ALDU6VDG.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-GV66MKAQ.mjs → chunk-AYV2KMAV.mjs} +7 -5
- package/dist/lib/neutral/chunk-AYV2KMAV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ROMZO4CB.mjs → chunk-BB6X6NT6.mjs} +13 -10
- package/dist/lib/neutral/chunk-BB6X6NT6.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-XUF53B6B.mjs → chunk-DBUT6FKM.mjs} +16 -14
- package/dist/lib/neutral/chunk-DBUT6FKM.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-NR3GTWRC.mjs → chunk-GQRUBCMT.mjs} +8 -13
- package/dist/lib/neutral/chunk-GQRUBCMT.mjs.map +7 -0
- package/dist/lib/neutral/chunk-JRYAD4TG.mjs +67 -0
- package/dist/lib/neutral/chunk-JRYAD4TG.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ZFXLTBZG.mjs → chunk-PHZNOLXL.mjs} +5 -3
- package/dist/lib/neutral/chunk-PHZNOLXL.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-KGU725LW.mjs → chunk-SOLG2NPH.mjs} +4 -7
- package/dist/lib/neutral/chunk-SOLG2NPH.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-246ACKSH.mjs → chunk-T3RP4AUP.mjs} +24 -20
- package/dist/lib/neutral/chunk-T3RP4AUP.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-IKBIORQX.mjs → chunk-V3PPVL3C.mjs} +57 -43
- package/dist/lib/neutral/chunk-V3PPVL3C.mjs.map +7 -0
- package/dist/lib/neutral/{context-add-VB7AOY3G.mjs → context-add-2G2CDRCK.mjs} +4 -4
- package/dist/lib/neutral/context-add-2G2CDRCK.mjs.map +7 -0
- package/dist/lib/neutral/{context-remove-VCM3VPSO.mjs → context-remove-QQOT57JC.mjs} +4 -4
- package/dist/lib/neutral/context-remove-QQOT57JC.mjs.map +7 -0
- package/dist/lib/neutral/{create-project-EIF4OJMY.mjs → create-project-LVIH4OLF.mjs} +7 -7
- package/dist/lib/neutral/{delete-J3PMWP7Z.mjs → delete-MRER3QMO.mjs} +3 -3
- package/dist/lib/neutral/{enable-blueprints-LBDZH2CY.mjs → enable-blueprints-GEIKTSRV.mjs} +12 -12
- package/dist/lib/neutral/enable-blueprints-GEIKTSRV.mjs.map +7 -0
- package/dist/lib/neutral/{fetch-KHMHV7JR.mjs → fetch-B2AYJK7F.mjs} +2 -2
- package/dist/lib/neutral/{fetch-messages-QOBBCTGC.mjs → fetch-messages-RUUU63L2.mjs} +2 -2
- package/dist/lib/neutral/{get-context-TN7X7U2H.mjs → get-context-3SXNFRXG.mjs} +10 -10
- package/dist/lib/neutral/{get-context-TN7X7U2H.mjs.map → get-context-3SXNFRXG.mjs.map} +3 -3
- package/dist/lib/neutral/index.mjs +94 -97
- package/dist/lib/neutral/index.mjs.map +3 -3
- package/dist/lib/neutral/{load-ALP3TK2E.mjs → load-YWYQ4THR.mjs} +2 -2
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/{object-create-Z57Y3X6Y.mjs → object-create-WME2XFGD.mjs} +9 -12
- package/dist/lib/neutral/object-create-WME2XFGD.mjs.map +7 -0
- package/dist/lib/neutral/{object-delete-X53LS37B.mjs → object-delete-I5OAPI32.mjs} +2 -2
- package/dist/lib/neutral/{object-update-GVKSBR7T.mjs → object-update-VCOL62NX.mjs} +3 -3
- package/dist/lib/neutral/{object-update-GVKSBR7T.mjs.map → object-update-VCOL62NX.mjs.map} +2 -2
- package/dist/lib/neutral/{project-HPHTZ2CI.mjs → project-4BYI2PZC.mjs} +6 -6
- package/dist/lib/neutral/{project-rules-IVDHKSKI.mjs → project-rules-7NYDDQ7K.mjs} +5 -5
- package/dist/lib/neutral/{prompt-Y7NN7M5D.mjs → prompt-DZP2K2NE.mjs} +6 -6
- package/dist/lib/neutral/prompt-DZP2K2NE.mjs.map +7 -0
- package/dist/lib/neutral/{qualifier-VDOY5CWU.mjs → qualifier-NLOWVZCM.mjs} +15 -14
- package/dist/lib/neutral/qualifier-NLOWVZCM.mjs.map +7 -0
- package/dist/lib/neutral/{query-PPJU5622.mjs → query-GZDTQRQ6.mjs} +12 -23
- package/dist/lib/neutral/query-GZDTQRQ6.mjs.map +7 -0
- package/dist/lib/neutral/{query-U56GNEV6.mjs → query-KBKGBYUO.mjs} +3 -3
- package/dist/lib/neutral/{query-blueprints-KXADGHSA.mjs → query-blueprints-MFXXRZBY.mjs} +5 -4
- package/dist/lib/neutral/query-blueprints-MFXXRZBY.mjs.map +7 -0
- package/dist/lib/neutral/{relation-create-XJ2IX6X3.mjs → relation-create-UHBWQQXS.mjs} +8 -11
- package/dist/lib/neutral/relation-create-UHBWQQXS.mjs.map +7 -0
- package/dist/lib/neutral/{relation-delete-EP4KXAFL.mjs → relation-delete-ZSB7JOHO.mjs} +2 -2
- package/dist/lib/neutral/{save-GWAPLT3Z.mjs → save-B2CSSFDG.mjs} +3 -3
- package/dist/lib/neutral/{schema-add-Z5CY6P24.mjs → schema-add-ZJ64RAZK.mjs} +13 -12
- package/dist/lib/neutral/schema-add-ZJ64RAZK.mjs.map +7 -0
- package/dist/lib/neutral/schema-list-3X3VNYYB.mjs +37 -0
- package/dist/lib/neutral/schema-list-3X3VNYYB.mjs.map +7 -0
- package/dist/lib/neutral/{sync-issues-4YE5XAK5.mjs → sync-issues-36TS2R7R.mjs} +5 -6
- package/dist/lib/neutral/sync-issues-36TS2R7R.mjs.map +7 -0
- package/dist/lib/neutral/{sync-triggers-CDMJVW6E.mjs → sync-triggers-MMHKQDNW.mjs} +39 -37
- package/dist/lib/neutral/sync-triggers-MMHKQDNW.mjs.map +7 -0
- package/dist/lib/neutral/{tag-add-VNIIOVJA.mjs → tag-add-7P5O3IAV.mjs} +4 -5
- package/dist/lib/neutral/tag-add-7P5O3IAV.mjs.map +7 -0
- package/dist/lib/neutral/{tag-remove-6R2R27W3.mjs → tag-remove-YZIMOFA4.mjs} +4 -5
- package/dist/lib/neutral/tag-remove-YZIMOFA4.mjs.map +7 -0
- package/dist/lib/neutral/testing/index.mjs +9 -12
- package/dist/lib/neutral/testing/index.mjs.map +3 -3
- package/dist/lib/neutral/update-tasks-6MJCJ2KC.mjs +13 -0
- package/dist/lib/neutral/update-tasks-6MJCJ2KC.mjs.map +7 -0
- package/dist/types/src/blueprints/blueprint-manager/functions/definitions.d.ts +12 -15
- package/dist/types/src/blueprints/blueprint-manager/functions/definitions.d.ts.map +1 -1
- package/dist/types/src/blueprints/blueprint-manager/functions/enable-blueprints.d.ts +7 -8
- package/dist/types/src/blueprints/blueprint-manager/functions/enable-blueprints.d.ts.map +1 -1
- package/dist/types/src/blueprints/blueprint-manager/functions/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/blueprint-manager/functions/query-blueprints.d.ts +6 -6
- package/dist/types/src/blueprints/blueprint-manager/functions/query-blueprints.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/context-add.d.ts +3 -3
- package/dist/types/src/blueprints/database/functions/context-add.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/context-remove.d.ts +3 -3
- package/dist/types/src/blueprints/database/functions/context-remove.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/definitions.d.ts +23 -17
- package/dist/types/src/blueprints/database/functions/definitions.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/load.d.ts +2 -2
- package/dist/types/src/blueprints/database/functions/load.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/object-create.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/object-delete.d.ts +1 -1
- package/dist/types/src/blueprints/database/functions/object-update.d.ts +2 -2
- package/dist/types/src/blueprints/database/functions/object-update.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/query.d.ts +2 -3
- package/dist/types/src/blueprints/database/functions/query.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/relation-create.d.ts +3 -3
- package/dist/types/src/blueprints/database/functions/relation-create.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/relation-delete.d.ts +1 -1
- package/dist/types/src/blueprints/database/functions/schema-add.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/schema-list.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/tag-add.d.ts +6 -3
- package/dist/types/src/blueprints/database/functions/tag-add.d.ts.map +1 -1
- package/dist/types/src/blueprints/database/functions/tag-remove.d.ts +6 -3
- package/dist/types/src/blueprints/database/functions/tag-remove.d.ts.map +1 -1
- package/dist/types/src/blueprints/discord/functions/definitions.d.ts.map +1 -1
- package/dist/types/src/blueprints/github/functions/definitions.d.ts.map +1 -1
- package/dist/types/src/blueprints/linear/functions/definitions.d.ts.map +1 -1
- package/dist/types/src/blueprints/linear/functions/sync-issues.d.ts.map +1 -1
- package/dist/types/src/blueprints/memory/functions/definitions.d.ts +2 -2
- package/dist/types/src/blueprints/memory/functions/definitions.d.ts.map +1 -1
- package/dist/types/src/blueprints/memory/functions/delete.d.ts +2 -2
- package/dist/types/src/blueprints/planning/functions/index.d.ts +1 -1
- package/dist/types/src/blueprints/planning/functions/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/planning/functions/update-tasks.d.ts +14 -1
- package/dist/types/src/blueprints/planning/functions/update-tasks.d.ts.map +1 -1
- package/dist/types/src/blueprints/planning/functions/update-tasks.test.d.ts +2 -0
- package/dist/types/src/blueprints/planning/functions/update-tasks.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/project/functions/add-artifact.d.ts +1 -5
- package/dist/types/src/blueprints/project/functions/add-artifact.d.ts.map +1 -1
- package/dist/types/src/blueprints/project/functions/definitions.d.ts +60 -45
- package/dist/types/src/blueprints/project/functions/definitions.d.ts.map +1 -1
- package/dist/types/src/blueprints/project/functions/get-context.d.ts +1 -12
- package/dist/types/src/blueprints/project/functions/get-context.d.ts.map +1 -1
- package/dist/types/src/blueprints/project/functions/qualifier.d.ts +3 -71
- package/dist/types/src/blueprints/project/functions/qualifier.d.ts.map +1 -1
- package/dist/types/src/blueprints/project-wizard/functions/create-project.d.ts +23 -19
- package/dist/types/src/blueprints/project-wizard/functions/create-project.d.ts.map +1 -1
- package/dist/types/src/blueprints/project-wizard/functions/definitions.d.ts +45 -38
- package/dist/types/src/blueprints/project-wizard/functions/definitions.d.ts.map +1 -1
- package/dist/types/src/blueprints/project-wizard/functions/sync-triggers.d.ts +21 -17
- package/dist/types/src/blueprints/project-wizard/functions/sync-triggers.d.ts.map +1 -1
- package/dist/types/src/blueprints/testing.d.ts +4 -4
- package/dist/types/src/blueprints/testing.d.ts.map +1 -1
- package/dist/types/src/blueprints/websearch/functions/definitions.d.ts.map +1 -1
- package/dist/types/src/crud/graph.d.ts +8 -11
- package/dist/types/src/crud/graph.d.ts.map +1 -1
- package/dist/types/src/errors.d.ts +3 -3
- package/dist/types/src/errors.d.ts.map +1 -1
- package/dist/types/src/functions/agent/definitions.d.ts +14 -23
- package/dist/types/src/functions/agent/definitions.d.ts.map +1 -1
- package/dist/types/src/sync/sync.d.ts +1 -2
- package/dist/types/src/sync/sync.d.ts.map +1 -1
- package/dist/types/src/testing/plugins.d.ts +1 -1
- package/dist/types/src/testing/plugins.d.ts.map +1 -1
- package/dist/types/src/types/Agent.d.ts +25 -24
- package/dist/types/src/types/Agent.d.ts.map +1 -1
- package/dist/types/src/types/Chat.d.ts +17 -20
- package/dist/types/src/types/Chat.d.ts.map +1 -1
- package/dist/types/src/types/McpServer.d.ts +1 -2
- package/dist/types/src/types/McpServer.d.ts.map +1 -1
- package/dist/types/src/types/Memory.d.ts +1 -2
- package/dist/types/src/types/Memory.d.ts.map +1 -1
- package/dist/types/src/types/Plan.d.ts +15 -17
- package/dist/types/src/types/Plan.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +30 -31
- package/src/blueprints/automation/blueprint.ts +3 -3
- package/src/blueprints/blueprint-manager/blueprint.conversations.json +1 -1
- package/src/blueprints/blueprint-manager/blueprint.test.ts +24 -67
- package/src/blueprints/blueprint-manager/blueprint.ts +5 -5
- package/src/blueprints/blueprint-manager/functions/definitions.ts +11 -20
- package/src/blueprints/blueprint-manager/functions/enable-blueprints.ts +10 -7
- package/src/blueprints/blueprint-manager/functions/index.ts +0 -1
- package/src/blueprints/blueprint-manager/functions/query-blueprints.ts +3 -2
- package/src/blueprints/browser/blueprint.conversations.json +1 -0
- package/src/blueprints/browser/blueprint.test.ts +4 -3
- package/src/blueprints/database/blueprint.conversations.json +1 -1
- package/src/blueprints/database/blueprint.test.ts +25 -25
- package/src/blueprints/database/functions/context-add.ts +2 -2
- package/src/blueprints/database/functions/context-remove.ts +2 -2
- package/src/blueprints/database/functions/definitions.ts +54 -40
- package/src/blueprints/database/functions/object-create.ts +8 -5
- package/src/blueprints/database/functions/object-update.ts +1 -1
- package/src/blueprints/database/functions/query.ts +16 -11
- package/src/blueprints/database/functions/relation-create.ts +7 -4
- package/src/blueprints/database/functions/schema-add.ts +7 -12
- package/src/blueprints/database/functions/schema-list.ts +12 -7
- package/src/blueprints/database/functions/tag-add.ts +2 -3
- package/src/blueprints/database/functions/tag-remove.ts +2 -3
- package/src/blueprints/discord/functions/definitions.ts +3 -1
- package/src/blueprints/discord/functions/fetch-messages.test.ts +7 -2
- package/src/blueprints/github/functions/definitions.ts +3 -1
- package/src/blueprints/linear/functions/definitions.ts +3 -1
- package/src/blueprints/linear/functions/linear.test.ts +1 -2
- package/src/blueprints/linear/functions/sync-issues.ts +1 -2
- package/src/blueprints/memory/blueprint.conversations.json +1 -1
- package/src/blueprints/memory/blueprint.test.ts +2 -2
- package/src/blueprints/memory/functions/definitions.ts +7 -3
- package/src/blueprints/planning/blueprint.ts +1 -1
- package/src/blueprints/planning/functions/index.ts +1 -1
- package/src/blueprints/planning/functions/{definitions.ts → update-tasks.md} +29 -50
- package/src/blueprints/planning/functions/update-tasks.test.ts +55 -0
- package/src/blueprints/planning/functions/update-tasks.ts +27 -3
- package/src/blueprints/project/blueprint.conversations.json +1 -1
- package/src/blueprints/project/blueprint.test.ts +14 -16
- package/src/blueprints/project/blueprint.ts +1 -1
- package/src/blueprints/project/functions/add-artifact.ts +1 -0
- package/src/blueprints/project/functions/agent.ts +4 -4
- package/src/blueprints/project/functions/definitions.ts +17 -14
- package/src/blueprints/project/functions/get-context.ts +5 -4
- package/src/blueprints/project/functions/qualifier.ts +8 -7
- package/src/blueprints/project-wizard/blueprint.ts +1 -1
- package/src/blueprints/project-wizard/functions/definitions.ts +11 -8
- package/src/blueprints/project-wizard/functions/sync-triggers.ts +33 -35
- package/src/blueprints/testing.ts +10 -4
- package/src/blueprints/websearch/blueprint.conversations.json +1 -1
- package/src/blueprints/websearch/functions/definitions.ts +3 -1
- package/src/crud/graph.test.ts +1 -1
- package/src/crud/graph.ts +143 -153
- package/src/errors.ts +3 -3
- package/src/functions/agent/definitions.ts +5 -3
- package/src/functions/agent/prompt.conversations.json +1 -1
- package/src/functions/agent/prompt.test.ts +10 -13
- package/src/functions/agent/prompt.ts +3 -3
- package/src/sync/sync.ts +7 -6
- package/src/testing/plugins.tsx +10 -15
- package/src/types/Agent.ts +27 -35
- package/src/types/Chat.ts +10 -20
- package/src/types/McpServer.ts +4 -10
- package/src/types/Memory.ts +4 -7
- package/src/types/Plan.ts +4 -11
- package/dist/lib/neutral/chunk-246ACKSH.mjs.map +0 -7
- package/dist/lib/neutral/chunk-EJAQUAKM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-FIGO6CA6.mjs +0 -140
- package/dist/lib/neutral/chunk-FIGO6CA6.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GV66MKAQ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-IKBIORQX.mjs.map +0 -7
- package/dist/lib/neutral/chunk-KGU725LW.mjs.map +0 -7
- package/dist/lib/neutral/chunk-NR3GTWRC.mjs.map +0 -7
- package/dist/lib/neutral/chunk-P4ZMYO4K.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ROMZO4CB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TO5IX24K.mjs.map +0 -7
- package/dist/lib/neutral/chunk-WLR3BGO4.mjs.map +0 -7
- package/dist/lib/neutral/chunk-XUF53B6B.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ZFXLTBZG.mjs.map +0 -7
- package/dist/lib/neutral/context-add-VB7AOY3G.mjs.map +0 -7
- package/dist/lib/neutral/context-remove-VCM3VPSO.mjs.map +0 -7
- package/dist/lib/neutral/enable-blueprints-LBDZH2CY.mjs.map +0 -7
- package/dist/lib/neutral/object-create-Z57Y3X6Y.mjs.map +0 -7
- package/dist/lib/neutral/prompt-Y7NN7M5D.mjs.map +0 -7
- package/dist/lib/neutral/qualifier-VDOY5CWU.mjs.map +0 -7
- package/dist/lib/neutral/query-PPJU5622.mjs.map +0 -7
- package/dist/lib/neutral/query-blueprints-KXADGHSA.mjs.map +0 -7
- package/dist/lib/neutral/relation-create-XJ2IX6X3.mjs.map +0 -7
- package/dist/lib/neutral/schema-add-Z5CY6P24.mjs.map +0 -7
- package/dist/lib/neutral/schema-list-W326VPVX.mjs +0 -38
- package/dist/lib/neutral/schema-list-W326VPVX.mjs.map +0 -7
- package/dist/lib/neutral/sync-issues-4YE5XAK5.mjs.map +0 -7
- package/dist/lib/neutral/sync-triggers-CDMJVW6E.mjs.map +0 -7
- package/dist/lib/neutral/tag-add-VNIIOVJA.mjs.map +0 -7
- package/dist/lib/neutral/tag-remove-6R2R27W3.mjs.map +0 -7
- package/dist/lib/neutral/update-blueprints-N2AK2VUR.mjs +0 -16
- package/dist/lib/neutral/update-blueprints-N2AK2VUR.mjs.map +0 -7
- package/dist/lib/neutral/update-tasks-H7SWIFQL.mjs +0 -46
- package/dist/lib/neutral/update-tasks-H7SWIFQL.mjs.map +0 -7
- package/dist/types/src/blueprints/blueprint-manager/functions/update-blueprints.d.ts +0 -4
- package/dist/types/src/blueprints/blueprint-manager/functions/update-blueprints.d.ts.map +0 -1
- package/dist/types/src/blueprints/planning/functions/definitions.d.ts +0 -11
- package/dist/types/src/blueprints/planning/functions/definitions.d.ts.map +0 -1
- package/src/blueprints/blueprint-manager/functions/update-blueprints.ts +0 -18
- /package/dist/lib/neutral/{create-project-EIF4OJMY.mjs.map → create-project-LVIH4OLF.mjs.map} +0 -0
- /package/dist/lib/neutral/{delete-J3PMWP7Z.mjs.map → delete-MRER3QMO.mjs.map} +0 -0
- /package/dist/lib/neutral/{fetch-KHMHV7JR.mjs.map → fetch-B2AYJK7F.mjs.map} +0 -0
- /package/dist/lib/neutral/{fetch-messages-QOBBCTGC.mjs.map → fetch-messages-RUUU63L2.mjs.map} +0 -0
- /package/dist/lib/neutral/{load-ALP3TK2E.mjs.map → load-YWYQ4THR.mjs.map} +0 -0
- /package/dist/lib/neutral/{object-delete-X53LS37B.mjs.map → object-delete-I5OAPI32.mjs.map} +0 -0
- /package/dist/lib/neutral/{project-HPHTZ2CI.mjs.map → project-4BYI2PZC.mjs.map} +0 -0
- /package/dist/lib/neutral/{project-rules-IVDHKSKI.mjs.map → project-rules-7NYDDQ7K.mjs.map} +0 -0
- /package/dist/lib/neutral/{query-U56GNEV6.mjs.map → query-KBKGBYUO.mjs.map} +0 -0
- /package/dist/lib/neutral/{relation-delete-EP4KXAFL.mjs.map → relation-delete-ZSB7JOHO.mjs.map} +0 -0
- /package/dist/lib/neutral/{save-GWAPLT3Z.mjs.map → save-B2CSSFDG.mjs.map} +0 -0
package/src/crud/graph.ts
CHANGED
|
@@ -11,23 +11,18 @@ import * as Option from 'effect/Option';
|
|
|
11
11
|
import * as Schema from 'effect/Schema';
|
|
12
12
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
13
13
|
|
|
14
|
-
import { Entity, Filter, Obj, Query, Type } from '@dxos/echo';
|
|
15
|
-
import { Database } from '@dxos/echo';
|
|
16
|
-
import { type Queue } from '@dxos/echo-db';
|
|
14
|
+
import { Database, Entity, Feed, Filter, Obj, Query, Scope, Type } from '@dxos/echo';
|
|
17
15
|
import { isEncodedReference } from '@dxos/echo-protocol';
|
|
18
16
|
import {
|
|
19
17
|
ReferenceAnnotationId,
|
|
20
|
-
RelationSourceDXNId,
|
|
21
18
|
RelationSourceId,
|
|
22
|
-
RelationTargetDXNId,
|
|
23
19
|
RelationTargetId,
|
|
24
20
|
createObject,
|
|
25
21
|
getTypeAnnotation,
|
|
26
22
|
getTypeIdentifierAnnotation,
|
|
27
23
|
} from '@dxos/echo/internal';
|
|
28
24
|
import { mapAst } from '@dxos/effect';
|
|
29
|
-
import {
|
|
30
|
-
import { DXN, ObjectId } from '@dxos/keys';
|
|
25
|
+
import { DXN, EID, EntityId, type URI } from '@dxos/keys';
|
|
31
26
|
import { log } from '@dxos/log';
|
|
32
27
|
import { deepMapValues, isNonNullable, trim } from '@dxos/util';
|
|
33
28
|
|
|
@@ -37,8 +32,7 @@ export const Subgraph = Schema.Struct({
|
|
|
37
32
|
objects: Schema.Array(Schema.Any),
|
|
38
33
|
});
|
|
39
34
|
|
|
40
|
-
export
|
|
41
|
-
|
|
35
|
+
export type Subgraph = Schema.Schema.Type<typeof Subgraph>;
|
|
42
36
|
export type RelatedSchema = {
|
|
43
37
|
schema: Type.AnyEntity;
|
|
44
38
|
kind: 'reference' | 'relation';
|
|
@@ -52,19 +46,19 @@ export type RelatedSchema = {
|
|
|
52
46
|
* @returns
|
|
53
47
|
*/
|
|
54
48
|
export const findRelatedSchema = async (db: Database.Database, anchor: Type.AnyEntity): Promise<RelatedSchema[]> => {
|
|
55
|
-
|
|
56
|
-
const allSchemas = await db.graph.schemaRegistry.query().run();
|
|
49
|
+
const allSchemas = await db.query(Query.select(Filter.type(Type.Type)).from(Scope.space(), Scope.registry())).run();
|
|
57
50
|
|
|
58
51
|
// TODO(dmaretskyi): Also do references.
|
|
59
52
|
return allSchemas
|
|
60
53
|
.filter((schema) => {
|
|
61
|
-
|
|
54
|
+
const annotation = getTypeAnnotation(Type.getSchema(schema));
|
|
55
|
+
if (annotation?.kind !== Entity.Kind.Relation) {
|
|
62
56
|
return false;
|
|
63
57
|
}
|
|
64
58
|
|
|
65
59
|
return (
|
|
66
|
-
|
|
67
|
-
|
|
60
|
+
isSchemaAddressableByDXN(anchor, annotation.sourceSchema!) ||
|
|
61
|
+
isSchemaAddressableByDXN(anchor, annotation.targetSchema!)
|
|
68
62
|
);
|
|
69
63
|
})
|
|
70
64
|
.map(
|
|
@@ -79,17 +73,12 @@ export const findRelatedSchema = async (db: Database.Database, anchor: Type.AnyE
|
|
|
79
73
|
* Non-strict DXN comparison.
|
|
80
74
|
* Returns true if the DXN could be resolved to the schema.
|
|
81
75
|
*/
|
|
82
|
-
const
|
|
83
|
-
if (getTypeIdentifierAnnotation(
|
|
76
|
+
const isSchemaAddressableByDXN = (type: Type.AnyEntity, dxn: DXN.DXN): boolean => {
|
|
77
|
+
if (getTypeIdentifierAnnotation(Type.getSchema(type)) === dxn) {
|
|
84
78
|
return true;
|
|
85
79
|
}
|
|
86
80
|
|
|
87
|
-
|
|
88
|
-
if (t) {
|
|
89
|
-
return t.type === Type.getTypename(schema);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return false;
|
|
81
|
+
return DXN.getName(dxn) === Type.getTypename(type);
|
|
93
82
|
};
|
|
94
83
|
|
|
95
84
|
/**
|
|
@@ -106,7 +95,7 @@ export const LocalSearchToolkit = Toolkit.make(
|
|
|
106
95
|
},
|
|
107
96
|
success: Schema.Unknown,
|
|
108
97
|
failure: Schema.Never,
|
|
109
|
-
dependencies: [Database.Service],
|
|
98
|
+
dependencies: [Database.Service, Feed.FeedService],
|
|
110
99
|
}),
|
|
111
100
|
);
|
|
112
101
|
|
|
@@ -115,11 +104,11 @@ export const LocalSearchHandler = LocalSearchToolkit.toLayer({
|
|
|
115
104
|
const objects = yield* Database.runQuery(Query.select(Filter.text(query, { type: 'vector' })));
|
|
116
105
|
const results = [...objects];
|
|
117
106
|
|
|
118
|
-
const
|
|
119
|
-
if (Option.isSome(
|
|
120
|
-
const
|
|
121
|
-
// TODO(dmaretskyi): Text search on the
|
|
122
|
-
results.push(...
|
|
107
|
+
const feedOption = yield* Effect.serviceOption(Feed.ContextFeedService);
|
|
108
|
+
if (Option.isSome(feedOption)) {
|
|
109
|
+
const feedObjects = yield* Feed.runQuery(feedOption.value.feed, Filter.everything());
|
|
110
|
+
// TODO(dmaretskyi): Text search on the feed.
|
|
111
|
+
results.push(...feedObjects);
|
|
123
112
|
}
|
|
124
113
|
|
|
125
114
|
return trim`
|
|
@@ -150,7 +139,7 @@ export const makeGraphWriterToolkit = ({ schema }: { schema: Type.AnyEntity[] })
|
|
|
150
139
|
parameters: createExtractionSchema(schema).fields,
|
|
151
140
|
success: Schema.Unknown,
|
|
152
141
|
failure: Schema.Never,
|
|
153
|
-
dependencies: [Database.Service,
|
|
142
|
+
dependencies: [Database.Service, Feed.ContextFeedService, Feed.FeedService],
|
|
154
143
|
}).annotateContext(Context.make(GraphWriterSchema, { schema })),
|
|
155
144
|
);
|
|
156
145
|
};
|
|
@@ -160,7 +149,7 @@ export const makeGraphWriterHandler = (
|
|
|
160
149
|
{
|
|
161
150
|
onAppend,
|
|
162
151
|
}: {
|
|
163
|
-
onAppend?: (object:
|
|
152
|
+
onAppend?: (object: URI.URI[]) => void;
|
|
164
153
|
} = {},
|
|
165
154
|
) => {
|
|
166
155
|
const { schema } = Context.get(
|
|
@@ -171,11 +160,11 @@ export const makeGraphWriterHandler = (
|
|
|
171
160
|
return toolkit.toLayer({
|
|
172
161
|
graph_writer: Effect.fn(function* (input) {
|
|
173
162
|
const { db } = yield* Database.Service;
|
|
174
|
-
const {
|
|
175
|
-
const data = yield*
|
|
176
|
-
yield*
|
|
163
|
+
const { feed } = yield* Feed.ContextFeedService;
|
|
164
|
+
const data = yield* sanitizeObjects(schema, input as any, db, feed);
|
|
165
|
+
yield* Feed.append(feed, data as Obj.Unknown[]);
|
|
177
166
|
|
|
178
|
-
const dxns = data.map((obj) =>
|
|
167
|
+
const dxns = data.map((obj) => Entity.getURI(obj));
|
|
179
168
|
onAppend?.(dxns);
|
|
180
169
|
return dxns;
|
|
181
170
|
}),
|
|
@@ -188,149 +177,150 @@ export const makeGraphWriterHandler = (
|
|
|
188
177
|
export const createExtractionSchema = (types: Type.AnyEntity[]) => {
|
|
189
178
|
return Schema.Struct({
|
|
190
179
|
...Object.fromEntries(
|
|
191
|
-
types
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
180
|
+
types
|
|
181
|
+
.map((type) => preprocessSchema(Type.getSchema(type)))
|
|
182
|
+
.map((schema, index) => [
|
|
183
|
+
`objects_${getSanitizedSchemaName(types[index])}`,
|
|
184
|
+
Schema.optional(Schema.Array(schema)).annotations({
|
|
185
|
+
description: `The objects of type: ${DXN.getName(DXN.tryMake(Type.getURI(types[index])!)!)}. ${SchemaAST.getDescriptionAnnotation(Type.getSchema(types[index]).ast).pipe(Option.getOrElse(() => ''))}`,
|
|
186
|
+
}),
|
|
187
|
+
]),
|
|
197
188
|
),
|
|
198
189
|
});
|
|
199
190
|
};
|
|
200
191
|
|
|
201
192
|
export const getSanitizedSchemaName = (schema: Type.AnyEntity) => {
|
|
202
|
-
return Type.
|
|
203
|
-
.asTypeDXN()!
|
|
204
|
-
.type.replaceAll(/[^a-zA-Z0-9]+/g, '_');
|
|
193
|
+
return DXN.getName(DXN.tryMake(Type.getURI(schema)!)!).replaceAll(/[^a-zA-Z0-9]+/g, '_');
|
|
205
194
|
};
|
|
206
195
|
|
|
207
|
-
export const sanitizeObjects =
|
|
196
|
+
export const sanitizeObjects = (
|
|
208
197
|
types: Type.AnyEntity[],
|
|
209
198
|
data: Record<string, readonly unknown[]>,
|
|
210
199
|
db: Database.Database,
|
|
211
|
-
|
|
212
|
-
):
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
(
|
|
216
|
-
|
|
217
|
-
data:
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
200
|
+
feed?: Feed.Feed,
|
|
201
|
+
): Effect.Effect<Entity.Unknown[], never, Feed.FeedService> =>
|
|
202
|
+
Effect.gen(function* () {
|
|
203
|
+
const entries = types
|
|
204
|
+
.map(
|
|
205
|
+
(type) =>
|
|
206
|
+
data[`objects_${getSanitizedSchemaName(type)}`]?.map((object: any) => ({
|
|
207
|
+
data: object,
|
|
208
|
+
schema: type,
|
|
209
|
+
})) ?? [],
|
|
210
|
+
)
|
|
211
|
+
.flat();
|
|
212
|
+
|
|
213
|
+
const idMap = new Map<string, string>();
|
|
214
|
+
const existingIds = new Set<EntityId>();
|
|
215
|
+
const enitties = new Map<EntityId, Entity.Unknown>();
|
|
216
|
+
|
|
217
|
+
const resolveId = (id: string): EID.EID | undefined => {
|
|
218
|
+
if (EntityId.isValid(id)) {
|
|
219
|
+
existingIds.add(id);
|
|
220
|
+
return EID.make({ entityId: id });
|
|
221
|
+
}
|
|
232
222
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
223
|
+
const mappedId = idMap.get(id);
|
|
224
|
+
if (mappedId && EntityId.isValid(mappedId)) {
|
|
225
|
+
return EID.make({ entityId: mappedId });
|
|
226
|
+
}
|
|
237
227
|
|
|
238
|
-
|
|
239
|
-
|
|
228
|
+
return undefined;
|
|
229
|
+
};
|
|
240
230
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
231
|
+
const res = entries
|
|
232
|
+
.map((entry) => {
|
|
233
|
+
// This entry mutates existing object.
|
|
234
|
+
if (EntityId.isValid(entry.data.id)) {
|
|
235
|
+
return entry;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
idMap.set(entry.data.id, EntityId.random());
|
|
239
|
+
entry.data.id = idMap.get(entry.data.id);
|
|
245
240
|
return entry;
|
|
246
|
-
}
|
|
241
|
+
})
|
|
242
|
+
.map((entry) => {
|
|
243
|
+
const data = deepMapValues(entry.data, (value, recurse) => {
|
|
244
|
+
if (isEncodedReference(value)) {
|
|
245
|
+
const ref = value['/'];
|
|
246
|
+
const id = resolveId(ref);
|
|
247
|
+
|
|
248
|
+
if (id) {
|
|
249
|
+
// Link to an existing object.
|
|
250
|
+
return { '/': id.toString() };
|
|
251
|
+
} else {
|
|
252
|
+
// Search URIs?
|
|
253
|
+
return { '/': `search:?q=${encodeURIComponent(ref)}` };
|
|
254
|
+
}
|
|
255
|
+
}
|
|
247
256
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
if (id) {
|
|
259
|
-
// Link to an existing object.
|
|
260
|
-
return { '/': id.toString() };
|
|
261
|
-
} else {
|
|
262
|
-
// Search URIs?
|
|
263
|
-
return { '/': `search:?q=${encodeURIComponent(ref)}` };
|
|
257
|
+
return recurse(value);
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
let sourceUri: EID.EID | undefined;
|
|
261
|
+
let targetUri: EID.EID | undefined;
|
|
262
|
+
if (Entity.getKind(Type.getSchema(entry.schema)) === 'relation') {
|
|
263
|
+
sourceUri = resolveId(data.source);
|
|
264
|
+
if (!sourceUri) {
|
|
265
|
+
log.warn('source not found', { source: data.source });
|
|
264
266
|
}
|
|
267
|
+
targetUri = resolveId(data.target);
|
|
268
|
+
if (!targetUri) {
|
|
269
|
+
log.warn('target not found', { target: data.target });
|
|
270
|
+
}
|
|
271
|
+
delete data.source;
|
|
272
|
+
delete data.target;
|
|
265
273
|
}
|
|
266
274
|
|
|
267
|
-
return
|
|
268
|
-
|
|
275
|
+
return {
|
|
276
|
+
data,
|
|
277
|
+
schema: entry.schema,
|
|
278
|
+
sourceUri,
|
|
279
|
+
targetUri,
|
|
280
|
+
};
|
|
281
|
+
})
|
|
282
|
+
.filter((object) => !existingIds.has(object.data.id)); // TODO(dmaretskyi): This dissallows updating existing objects.
|
|
283
|
+
|
|
284
|
+
// TODO(dmaretskyi): Use ref resolver.
|
|
285
|
+
const dbObjects = yield* Effect.promise(() => db.query(Query.select(Filter.id(...existingIds))).run());
|
|
286
|
+
const feedObjects = feed && existingIds.size > 0 ? yield* Feed.runQuery(feed, Filter.id(...existingIds)) : [];
|
|
287
|
+
const objects = [...dbObjects, ...feedObjects].filter(isNonNullable);
|
|
288
|
+
|
|
289
|
+
// TODO(dmaretskyi): Returns everything if IDs are empty!
|
|
290
|
+
log.info('objects', { dbObjects, feedObjects, existingIds });
|
|
291
|
+
const missing = Array.from(existingIds).filter((id) => !objects.some((object) => object.id === id));
|
|
292
|
+
if (missing.length > 0) {
|
|
293
|
+
throw new Error(`Object IDs do not point to existing objects: ${missing.join(', ')}`);
|
|
294
|
+
}
|
|
269
295
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
296
|
+
return res.flatMap(({ data, schema, sourceUri, targetUri }) => {
|
|
297
|
+
let skip = false;
|
|
298
|
+
if (sourceUri) {
|
|
299
|
+
const id = EID.getEntityId(sourceUri);
|
|
300
|
+
const obj = objects.find((object) => object.id === id) ?? (id ? enitties.get(id) : undefined);
|
|
301
|
+
if (obj) {
|
|
302
|
+
data[RelationSourceId] = obj;
|
|
303
|
+
} else {
|
|
304
|
+
skip = true;
|
|
274
305
|
}
|
|
275
|
-
const targetDxn = resolveId(data.target);
|
|
276
|
-
if (!targetDxn) {
|
|
277
|
-
log.warn('target not found', { target: data.target });
|
|
278
|
-
}
|
|
279
|
-
delete data.source;
|
|
280
|
-
delete data.target;
|
|
281
|
-
data[RelationSourceDXNId] = sourceDxn;
|
|
282
|
-
data[RelationTargetDXNId] = targetDxn;
|
|
283
306
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
// TODO(dmaretskyi): Use ref resolver.
|
|
293
|
-
const dbObjects = await db.query(Query.select(Filter.id(...existingIds))).run();
|
|
294
|
-
const queueObjects = (await queue?.getObjectsById([...existingIds])) ?? [];
|
|
295
|
-
const objects = [...dbObjects, ...queueObjects].filter(isNonNullable);
|
|
296
|
-
|
|
297
|
-
// TODO(dmaretskyi): Returns everything if IDs are empty!
|
|
298
|
-
log.info('objects', { dbObjects, queueObjects, existingIds });
|
|
299
|
-
const missing = Array.from(existingIds).filter((id) => !objects.some((object) => object.id === id));
|
|
300
|
-
if (missing.length > 0) {
|
|
301
|
-
throw new Error(`Object IDs do not point to existing objects: ${missing.join(', ')}`);
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
return res.flatMap(({ data, schema }) => {
|
|
305
|
-
let skip = false;
|
|
306
|
-
if (RelationSourceDXNId in data) {
|
|
307
|
-
const id = (data[RelationSourceDXNId] as DXN).asEchoDXN()?.echoId;
|
|
308
|
-
const obj = objects.find((object) => object.id === id) ?? enitties.get(id!);
|
|
309
|
-
if (obj) {
|
|
310
|
-
delete data[RelationSourceDXNId];
|
|
311
|
-
data[RelationSourceId] = obj;
|
|
312
|
-
} else {
|
|
313
|
-
skip = true;
|
|
307
|
+
if (targetUri) {
|
|
308
|
+
const id = EID.getEntityId(targetUri);
|
|
309
|
+
const obj = objects.find((object) => object.id === id) ?? (id ? enitties.get(id) : undefined);
|
|
310
|
+
if (obj) {
|
|
311
|
+
data[RelationTargetId] = obj;
|
|
312
|
+
} else {
|
|
313
|
+
skip = true;
|
|
314
|
+
}
|
|
314
315
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
if (obj) {
|
|
320
|
-
delete data[RelationTargetDXNId];
|
|
321
|
-
data[RelationTargetId] = obj;
|
|
322
|
-
} else {
|
|
323
|
-
skip = true;
|
|
316
|
+
if (!skip) {
|
|
317
|
+
const obj = createObject(schema, data);
|
|
318
|
+
enitties.set(obj.id, obj);
|
|
319
|
+
return [obj];
|
|
324
320
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
const obj = createObject(schema, data);
|
|
328
|
-
enitties.set(obj.id, obj);
|
|
329
|
-
return [obj];
|
|
330
|
-
}
|
|
331
|
-
return [];
|
|
321
|
+
return [];
|
|
322
|
+
});
|
|
332
323
|
});
|
|
333
|
-
};
|
|
334
324
|
|
|
335
325
|
const SoftRef = Schema.Struct({
|
|
336
326
|
'/': Schema.String,
|
package/src/errors.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { BaseError } from '@dxos/errors';
|
|
6
|
-
import {
|
|
6
|
+
import { type EID } from '@dxos/keys';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Agent could not execute prompt.
|
|
@@ -13,8 +13,8 @@ export class PromptError extends BaseError.extend('PromptError') {
|
|
|
13
13
|
message: string,
|
|
14
14
|
context: {
|
|
15
15
|
description?: string;
|
|
16
|
-
prompt?:
|
|
17
|
-
chat?:
|
|
16
|
+
prompt?: EID.EID;
|
|
17
|
+
chat?: EID.EID;
|
|
18
18
|
},
|
|
19
19
|
) {
|
|
20
20
|
super({
|
|
@@ -7,6 +7,7 @@ import * as Schema from 'effect/Schema';
|
|
|
7
7
|
import { AiService, OpaqueToolkit, ModelName } from '@dxos/ai';
|
|
8
8
|
import { Routine, Trace, Operation, OperationRegistry } from '@dxos/compute';
|
|
9
9
|
import { Database, Feed, Ref } from '@dxos/echo';
|
|
10
|
+
import { DXN } from '@dxos/keys';
|
|
10
11
|
import { Text } from '@dxos/schema';
|
|
11
12
|
|
|
12
13
|
import * as Chat from '../../types/Chat';
|
|
@@ -14,9 +15,10 @@ import * as Chat from '../../types/Chat';
|
|
|
14
15
|
// TODO(dmaretskyi): Rename to RunRoutine.
|
|
15
16
|
export const AgentPrompt = Operation.make({
|
|
16
17
|
meta: {
|
|
17
|
-
key: 'org.dxos.function.prompt',
|
|
18
|
+
key: DXN.make('org.dxos.function.prompt'),
|
|
18
19
|
name: 'Run Routine',
|
|
19
20
|
description: 'Agentic worker that executes a provided prompt using blueprints and tools.',
|
|
21
|
+
icon: 'ph--brain--regular',
|
|
20
22
|
},
|
|
21
23
|
input: Schema.Struct({
|
|
22
24
|
prompt: Ref.Ref(Routine.Routine),
|
|
@@ -29,8 +31,8 @@ export const AgentPrompt = Operation.make({
|
|
|
29
31
|
/**
|
|
30
32
|
* @default @anthropic/claude-opus-4-6
|
|
31
33
|
*/
|
|
32
|
-
|
|
33
34
|
model: Schema.optional(ModelName),
|
|
35
|
+
|
|
34
36
|
/**
|
|
35
37
|
* Input object or data.
|
|
36
38
|
* References get auto-resolved.
|
|
@@ -53,4 +55,4 @@ export const AgentPrompt = Operation.make({
|
|
|
53
55
|
OperationRegistry.Service,
|
|
54
56
|
Trace.TraceService,
|
|
55
57
|
],
|
|
56
|
-
})
|
|
58
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"conversations":[{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[{"name":"completeJob","inputSchema":{"type":"object","required":[],"properties":{"success":{"$id":"/schemas/any","title":"any"},"failure":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Short message describing the error."},"description":{"type":"string","description":"Optional longer message describing in detail what went wrong"}},"additionalProperties":false}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"You are an agent running in the non-interactive mode.\nThe user is unable to see what you are doing, and cannot answer any questions.\nDo not ask questions.\nComplete the task before you, and at the end call [completeJob] with the output.\nIf you are unable to complete the task, call [completeJob] with the failure reason.\nIf no output is required, call [completeJob] with an empty object: {}\nDo not stop until you call [completeJob].","options":{}},{"role":"user","content":"Reply with a single word: ack.\n<input>{}</input>","options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"
|
|
1
|
+
{"conversations":[{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[{"name":"completeJob","inputSchema":{"type":"object","required":[],"properties":{"success":{"$id":"/schemas/any","title":"any"},"failure":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Short message describing the error."},"description":{"type":"string","description":"Optional longer message describing in detail what went wrong"}},"additionalProperties":false}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"You are an agent running in the non-interactive mode.\nThe user is unable to see what you are doing, and cannot answer any questions.\nDo not ask questions.\nComplete the task before you, and at the end call [completeJob] with the output.\nIf you are unable to complete the task, call [completeJob] with the failure reason.\nIf no output is required, call [completeJob] with an empty object: {}\nDo not stop until you call [completeJob].","options":{}},{"role":"user","content":"Reply with a single word: ack.\n<input>{}</input>","options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01JstbpndWJDAhVwAppVJz2H","modelId":"claude-opus-4-6","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"reasoning-start","id":"0","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"The user wants me to reply with a single word: \"ack\".","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"","metadata":{"anthropic":{"type":"thinking","signature":"EvsBCmMIDhgCKkDoETBa+lesagv7ixB9LGrYHpBYfS/DCnRnegAetRGGWDl0kkFyqVQI7oDc+ZWbyk9tB+4ePqoqNXQXwE3240/HMg9jbGF1ZGUtb3B1cy00LTY4AEIIdGhpbmtpbmcSDFVIZlew/AFp1rmNoxoMPw+kyp+9hoNL5WyHIjDdm7hZK7hOH93slrwJoeXIuYMlv70L5mOQbDviNfFQyGfbuluo3tzWampRVGtohCgqRtiIkY7cWA700K9SVqH4mMfq1sjQ7yYuCRMv2lT7PrbCp3IRJmncUU6avNwBVX6E/hMO7ml/pORVNgsnB8Tn6FrYKqMFENAYAQ=="}}},{"type":"reasoning-end","id":"0","metadata":{}},{"type":"tool-params-start","id":"toolu_01KDviPNKjzY2nh9cGmo4oKm","name":"completeJob","providerExecuted":false,"metadata":{}},{"type":"tool-params-delta","id":"toolu_01KDviPNKjzY2nh9cGmo4oKm","delta":"","metadata":{}},{"type":"tool-params-delta","id":"toolu_01KDviPNKjzY2nh9cGmo4oKm","delta":"{\"success\"","metadata":{}},{"type":"tool-params-delta","id":"toolu_01KDviPNKjzY2nh9cGmo4oKm","delta":": ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01KDviPNKjzY2nh9cGmo4oKm","delta":"\"ack\"}","metadata":{}},{"type":"tool-params-end","id":"toolu_01KDviPNKjzY2nh9cGmo4oKm","metadata":{}},{"type":"finish","reason":"tool-calls","usage":{"inputTokens":757,"outputTokens":85,"totalTokens":842},"metadata":{"anthropic":{"usage":{"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":757,"output_tokens":60,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[{"name":"completeJob","inputSchema":{"type":"object","required":[],"properties":{"success":{"$id":"/schemas/any","title":"any"},"failure":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Short message describing the error."},"description":{"type":"string","description":"Optional longer message describing in detail what went wrong"}},"additionalProperties":false}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"You are an agent running in the non-interactive mode.\nThe user is unable to see what you are doing, and cannot answer any questions.\nDo not ask questions.\nComplete the task before you, and at the end call [completeJob] with the output.\nIf you are unable to complete the task, call [completeJob] with the failure reason.\nIf no output is required, call [completeJob] with an empty object: {}\nDo not stop until you call [completeJob].","options":{}},{"role":"user","content":"Reply with a single word: ack.\n<input>{}</input>","options":{}},{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to reply with a single word: \"ack\".","options":{}},{"type":"tool-call","id":"toolu_01KDviPNKjzY2nh9cGmo4oKm","name":"completeJob","params":{"success":"ack"},"providerExecuted":false,"options":{}}],"options":{}},{"role":"tool","content":[{"type":"tool-result","id":"toolu_01KDviPNKjzY2nh9cGmo4oKm","name":"completeJob","isFailure":false,"result":{},"providerExecuted":false,"options":{}}],"options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01Pz14sZtxk8PRuR9CKbe7Fy","modelId":"claude-opus-4-6","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":824,"outputTokens":2,"totalTokens":826},"metadata":{"anthropic":{"usage":{"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":824,"output_tokens":2,"server_tool_use":null,"service_tier":"standard"}}}}]}]}
|
|
@@ -5,13 +5,12 @@
|
|
|
5
5
|
import { describe, expect, it } from '@effect/vitest';
|
|
6
6
|
import * as Effect from 'effect/Effect';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { AiContext } from '@dxos/assistant';
|
|
9
9
|
import { Routine, Operation, OperationHandlerSet } from '@dxos/compute';
|
|
10
|
-
import { Database, Feed, Obj, Ref } from '@dxos/echo';
|
|
10
|
+
import { Database, Feed, Filter, Obj, Ref } from '@dxos/echo';
|
|
11
11
|
import { TestHelpers } from '@dxos/effect/testing';
|
|
12
|
-
import { QueueService } from '@dxos/functions';
|
|
13
12
|
import { AssistantTestLayer } from '@dxos/functions-runtime/testing';
|
|
14
|
-
import {
|
|
13
|
+
import { EntityId } from '@dxos/keys';
|
|
15
14
|
import { Text } from '@dxos/schema';
|
|
16
15
|
import { Message } from '@dxos/types';
|
|
17
16
|
|
|
@@ -19,19 +18,19 @@ import * as Chat from '../../types/Chat';
|
|
|
19
18
|
import { AgentPrompt } from './definitions';
|
|
20
19
|
import defaultAgentPrompt from './prompt';
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
EntityId.dangerouslyDisableRandomness();
|
|
23
22
|
|
|
24
23
|
const operationHandlerSet = OperationHandlerSet.make(defaultAgentPrompt);
|
|
25
24
|
|
|
26
25
|
const TestLayer = AssistantTestLayer({
|
|
27
26
|
operationHandlers: operationHandlerSet,
|
|
28
|
-
types: [Chat.Chat, Message.Message,
|
|
27
|
+
types: [Chat.Chat, Message.Message, AiContext.Binding, Text.Text],
|
|
29
28
|
aiServicePreset: 'edge-remote',
|
|
30
29
|
});
|
|
31
30
|
|
|
32
|
-
const
|
|
33
|
-
Effect.
|
|
34
|
-
const items =
|
|
31
|
+
const countFeedMessages = (feed: Feed.Feed) =>
|
|
32
|
+
Effect.gen(function* () {
|
|
33
|
+
const items = yield* Feed.runQuery(feed, Filter.everything());
|
|
35
34
|
return items.filter(Obj.instanceOf(Message.Message)).length;
|
|
36
35
|
});
|
|
37
36
|
|
|
@@ -41,9 +40,7 @@ describe('Agent prompt', () => {
|
|
|
41
40
|
Effect.fnUntraced(
|
|
42
41
|
function* (_) {
|
|
43
42
|
const feed = yield* Database.add(Feed.make());
|
|
44
|
-
const
|
|
45
|
-
const queue = yield* QueueService.getQueue<Message.Message | ContextBinding>(queueDxn);
|
|
46
|
-
const messageCountBefore = yield* countQueueMessages(queue);
|
|
43
|
+
const messageCountBefore = yield* countFeedMessages(feed);
|
|
47
44
|
|
|
48
45
|
const chat = yield* Database.add(
|
|
49
46
|
Chat.make({
|
|
@@ -68,7 +65,7 @@ describe('Agent prompt', () => {
|
|
|
68
65
|
chat: Ref.make(chat),
|
|
69
66
|
});
|
|
70
67
|
|
|
71
|
-
const messageCountAfter = yield*
|
|
68
|
+
const messageCountAfter = yield* countFeedMessages(feed);
|
|
72
69
|
|
|
73
70
|
expect(messageCountAfter).toBeGreaterThan(messageCountBefore);
|
|
74
71
|
expect(result).toBe('ack');
|
|
@@ -62,7 +62,7 @@ export default AgentPrompt.pipe(
|
|
|
62
62
|
Effect.map(Array.map((option) => option.value)),
|
|
63
63
|
);
|
|
64
64
|
|
|
65
|
-
const promptInstructions = yield* Database.load(prompt.instructions
|
|
65
|
+
const promptInstructions = yield* Database.load(prompt.instructions);
|
|
66
66
|
let promptText = Template.process(promptInstructions.content, input);
|
|
67
67
|
|
|
68
68
|
if (input !== undefined) {
|
|
@@ -100,7 +100,7 @@ export default AgentPrompt.pipe(
|
|
|
100
100
|
});
|
|
101
101
|
|
|
102
102
|
const runtime = yield* Effect.runtime<Feed.FeedService>();
|
|
103
|
-
const session = yield* acquireReleaseResource(() => new AiSession({ feed, runtime }));
|
|
103
|
+
const session = yield* acquireReleaseResource(() => new AiSession.Session({ feed, runtime }));
|
|
104
104
|
|
|
105
105
|
yield* Effect.promise(() =>
|
|
106
106
|
session.context.bind({
|
|
@@ -213,7 +213,7 @@ const ToolExecutionService = ({ feed }: ToolExecutionServiceOptions) =>
|
|
|
213
213
|
log('invoking operation', { operationDef, input });
|
|
214
214
|
const result = yield* operationInvoker
|
|
215
215
|
.invoke(operationDef, input, {
|
|
216
|
-
conversation: Obj.
|
|
216
|
+
conversation: Obj.getURI(feed),
|
|
217
217
|
})
|
|
218
218
|
.pipe(Effect.orDie);
|
|
219
219
|
log('result', { result });
|
package/src/sync/sync.ts
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
6
|
|
|
7
|
-
import { Filter, Obj, Query, Ref } from '@dxos/echo';
|
|
8
|
-
import { Database } from '@dxos/echo';
|
|
7
|
+
import { Database, Filter, Obj, Query, Ref } from '@dxos/echo';
|
|
9
8
|
import { failedInvariant } from '@dxos/invariant';
|
|
9
|
+
import { EID } from '@dxos/keys';
|
|
10
10
|
import { log } from '@dxos/log';
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -39,22 +39,23 @@ export const syncObjects: (
|
|
|
39
39
|
if (!ref.target) {
|
|
40
40
|
continue;
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
const targetUri = EID.tryParse(Obj.getURI(ref.target));
|
|
43
|
+
if (targetUri && EID.isLocal(targetUri)) {
|
|
43
44
|
// obj not persisted to db.
|
|
44
45
|
const [target] = yield* syncObjects([ref.target], { foreignKeyId });
|
|
45
46
|
(obj as any)[key] = Ref.make(target);
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
49
|
|
|
49
|
-
const
|
|
50
|
+
const type = Obj.getType(obj) ?? failedInvariant('No type.');
|
|
50
51
|
const foreignId = Obj.getKeys(obj, foreignKeyId)[0]?.id ?? failedInvariant('No foreign key.');
|
|
51
52
|
const [existing] = yield* Database.runQuery(
|
|
52
|
-
Query.select(Filter.foreignKeys(
|
|
53
|
+
Query.select(Filter.foreignKeys(type, [{ source: foreignKeyId, id: foreignId }])),
|
|
53
54
|
);
|
|
54
55
|
log('sync object', {
|
|
55
56
|
type: Obj.getTypename(obj),
|
|
56
57
|
foreignId,
|
|
57
|
-
existing: existing ? Obj.
|
|
58
|
+
existing: existing ? Obj.getURI(existing) : undefined,
|
|
58
59
|
});
|
|
59
60
|
if (!existing) {
|
|
60
61
|
yield* Database.add(obj);
|