@dxos/assistant-toolkit 0.8.4-main.e8ec1fe → 0.8.4-main.fcfe5033a5
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/dist/lib/neutral/add-artifact-IGKQVEIL.mjs +30 -0
- package/dist/lib/neutral/add-artifact-IGKQVEIL.mjs.map +7 -0
- package/dist/lib/neutral/agent-3MJJ36QG.mjs +87 -0
- package/dist/lib/neutral/agent-3MJJ36QG.mjs.map +7 -0
- package/dist/lib/neutral/chunk-4BWLYLTR.mjs +29 -0
- package/dist/lib/neutral/chunk-4BWLYLTR.mjs.map +7 -0
- package/dist/lib/neutral/chunk-6DPL2YY5.mjs +68 -0
- package/dist/lib/neutral/chunk-6DPL2YY5.mjs.map +7 -0
- package/dist/lib/neutral/chunk-6FL4C6KD.mjs +86 -0
- package/dist/lib/neutral/chunk-6FL4C6KD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7VH5RFBT.mjs +392 -0
- package/dist/lib/neutral/chunk-7VH5RFBT.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7WHAIX7N.mjs +692 -0
- package/dist/lib/neutral/chunk-7WHAIX7N.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7WUXG23R.mjs +95 -0
- package/dist/lib/neutral/chunk-7WUXG23R.mjs.map +7 -0
- package/dist/lib/neutral/chunk-DV5DCOUE.mjs +52 -0
- package/dist/lib/neutral/chunk-DV5DCOUE.mjs.map +7 -0
- package/dist/lib/neutral/chunk-FKGWM6KF.mjs +140 -0
- package/dist/lib/neutral/chunk-FKGWM6KF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-HCS67KNS.mjs +74 -0
- package/dist/lib/neutral/chunk-HCS67KNS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-I2YSCI65.mjs +76 -0
- package/dist/lib/neutral/chunk-I2YSCI65.mjs.map +7 -0
- package/dist/lib/neutral/chunk-IVXBQQDJ.mjs +332 -0
- package/dist/lib/neutral/chunk-IVXBQQDJ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-JEQB7H27.mjs +70 -0
- package/dist/lib/neutral/chunk-JEQB7H27.mjs.map +7 -0
- package/dist/lib/neutral/chunk-LI6VMCJW.mjs +27 -0
- package/dist/lib/neutral/chunk-LI6VMCJW.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MEZ4UFR6.mjs +25 -0
- package/dist/lib/neutral/chunk-MEZ4UFR6.mjs.map +7 -0
- package/dist/lib/neutral/chunk-RXITNKBD.mjs +73 -0
- package/dist/lib/neutral/chunk-RXITNKBD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-RZYPNKOB.mjs +53 -0
- package/dist/lib/neutral/chunk-RZYPNKOB.mjs.map +7 -0
- package/dist/lib/neutral/chunk-VD2WAUU2.mjs +78 -0
- package/dist/lib/neutral/chunk-VD2WAUU2.mjs.map +7 -0
- package/dist/lib/neutral/chunk-VDEDVOS6.mjs +39 -0
- package/dist/lib/neutral/chunk-VDEDVOS6.mjs.map +7 -0
- package/dist/lib/neutral/chunk-VUGCOWRW.mjs +283 -0
- package/dist/lib/neutral/chunk-VUGCOWRW.mjs.map +7 -0
- package/dist/lib/neutral/chunk-YPECGXN2.mjs +100 -0
- package/dist/lib/neutral/chunk-YPECGXN2.mjs.map +7 -0
- package/dist/lib/neutral/context-add-QAHU6I24.mjs +22 -0
- package/dist/lib/neutral/context-add-QAHU6I24.mjs.map +7 -0
- package/dist/lib/neutral/context-remove-VMZPMZ4E.mjs +22 -0
- package/dist/lib/neutral/context-remove-VMZPMZ4E.mjs.map +7 -0
- package/dist/lib/neutral/create-P6I22VS5.mjs +23 -0
- package/dist/lib/neutral/create-P6I22VS5.mjs.map +7 -0
- package/dist/lib/neutral/create-project-JBCPS6OC.mjs +36 -0
- package/dist/lib/neutral/create-project-JBCPS6OC.mjs.map +7 -0
- package/dist/lib/neutral/delete-7PDHEV4U.mjs +19 -0
- package/dist/lib/neutral/delete-7PDHEV4U.mjs.map +7 -0
- package/dist/lib/neutral/document-create-GKW354LS.mjs +55 -0
- package/dist/lib/neutral/document-create-GKW354LS.mjs.map +7 -0
- package/dist/lib/neutral/enable-blueprints-4UMPKGUD.mjs +48 -0
- package/dist/lib/neutral/enable-blueprints-4UMPKGUD.mjs.map +7 -0
- package/dist/lib/neutral/entity-extraction-T2M7C3WU.mjs +194 -0
- package/dist/lib/neutral/entity-extraction-T2M7C3WU.mjs.map +7 -0
- package/dist/lib/neutral/exa-P4G3DCYB.mjs +28 -0
- package/dist/lib/neutral/exa-P4G3DCYB.mjs.map +7 -0
- package/dist/lib/neutral/fetch-TLKREIZA.mjs +16 -0
- package/dist/lib/neutral/fetch-TLKREIZA.mjs.map +7 -0
- package/dist/lib/neutral/fetch-messages-UKDOTMLZ.mjs +150 -0
- package/dist/lib/neutral/fetch-messages-UKDOTMLZ.mjs.map +7 -0
- package/dist/lib/neutral/get-context-TJOY4S33.mjs +35 -0
- package/dist/lib/neutral/get-context-TJOY4S33.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +250 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/load-ZTOGVHWP.mjs +17 -0
- package/dist/lib/neutral/load-ZTOGVHWP.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/{browser/index.mjs → neutral/mock-2ARYZ54S.mjs} +28 -2249
- package/dist/lib/neutral/mock-2ARYZ54S.mjs.map +7 -0
- package/dist/lib/neutral/object-create-7QCGL56E.mjs +43 -0
- package/dist/lib/neutral/object-create-7QCGL56E.mjs.map +7 -0
- package/dist/lib/neutral/object-delete-KXBWC4Q4.mjs +18 -0
- package/dist/lib/neutral/object-delete-KXBWC4Q4.mjs.map +7 -0
- package/dist/lib/neutral/object-update-B7RDX3JC.mjs +28 -0
- package/dist/lib/neutral/object-update-B7RDX3JC.mjs.map +7 -0
- package/dist/lib/neutral/project-4YLFG5BQ.mjs +23 -0
- package/dist/lib/neutral/project-4YLFG5BQ.mjs.map +7 -0
- package/dist/lib/neutral/project-rules-R5EYMWD3.mjs +78 -0
- package/dist/lib/neutral/project-rules-R5EYMWD3.mjs.map +7 -0
- package/dist/lib/neutral/prompt-4NEDW6FG.mjs +197 -0
- package/dist/lib/neutral/prompt-4NEDW6FG.mjs.map +7 -0
- package/dist/lib/neutral/qualifier-RKTN2QK4.mjs +104 -0
- package/dist/lib/neutral/qualifier-RKTN2QK4.mjs.map +7 -0
- package/dist/lib/neutral/query-BPDND25Q.mjs +32 -0
- package/dist/lib/neutral/query-BPDND25Q.mjs.map +7 -0
- package/dist/lib/neutral/query-V2ZWVVYP.mjs +70 -0
- package/dist/lib/neutral/query-V2ZWVVYP.mjs.map +7 -0
- package/dist/lib/neutral/query-blueprints-EKHEZAGD.mjs +17 -0
- package/dist/lib/neutral/query-blueprints-EKHEZAGD.mjs.map +7 -0
- package/dist/lib/neutral/read-JJN7YXHI.mjs +19 -0
- package/dist/lib/neutral/read-JJN7YXHI.mjs.map +7 -0
- package/dist/lib/neutral/relation-create-FSHBM5CJ.mjs +42 -0
- package/dist/lib/neutral/relation-create-FSHBM5CJ.mjs.map +7 -0
- package/dist/lib/neutral/relation-delete-CYYQUIZY.mjs +18 -0
- package/dist/lib/neutral/relation-delete-CYYQUIZY.mjs.map +7 -0
- package/dist/lib/neutral/research-DZPSEZZC.mjs +106 -0
- package/dist/lib/neutral/research-DZPSEZZC.mjs.map +7 -0
- package/dist/lib/neutral/save-M4KRWV4W.mjs +23 -0
- package/dist/lib/neutral/save-M4KRWV4W.mjs.map +7 -0
- package/dist/lib/neutral/schema-add-RVV364G6.mjs +24 -0
- package/dist/lib/neutral/schema-add-RVV364G6.mjs.map +7 -0
- package/dist/lib/neutral/schema-list-4IYBLXFN.mjs +39 -0
- package/dist/lib/neutral/schema-list-4IYBLXFN.mjs.map +7 -0
- package/dist/lib/neutral/sync-issues-BBAMXSZN.mjs +179 -0
- package/dist/lib/neutral/sync-issues-BBAMXSZN.mjs.map +7 -0
- package/dist/lib/neutral/sync-triggers-56ELUXSO.mjs +112 -0
- package/dist/lib/neutral/sync-triggers-56ELUXSO.mjs.map +7 -0
- package/dist/lib/neutral/tag-add-OUDUBR3E.mjs +19 -0
- package/dist/lib/neutral/tag-add-OUDUBR3E.mjs.map +7 -0
- package/dist/lib/neutral/tag-remove-DI3ZSLFK.mjs +19 -0
- package/dist/lib/neutral/tag-remove-DI3ZSLFK.mjs.map +7 -0
- package/dist/lib/neutral/testing/index.mjs +81 -0
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/lib/neutral/update-J64AYUS5.mjs +20 -0
- package/dist/lib/neutral/update-J64AYUS5.mjs.map +7 -0
- package/dist/lib/neutral/update-blueprints-ZNWR7BBN.mjs +17 -0
- package/dist/lib/neutral/update-blueprints-ZNWR7BBN.mjs.map +7 -0
- package/dist/lib/neutral/update-tasks-EH7MOB5X.mjs +46 -0
- package/dist/lib/neutral/update-tasks-EH7MOB5X.mjs.map +7 -0
- package/dist/types/src/blueprints/automation/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/automation/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/automation/index.d.ts +2 -0
- package/dist/types/src/blueprints/automation/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/blueprint-manager/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/blueprint-manager/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/blueprint-manager/blueprint.test.d.ts +2 -0
- package/dist/types/src/blueprints/blueprint-manager/blueprint.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/blueprint-manager/functions/definitions.d.ts +60 -0
- package/dist/types/src/blueprints/blueprint-manager/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/blueprint-manager/functions/enable-blueprints.d.ts +36 -0
- package/dist/types/src/blueprints/blueprint-manager/functions/enable-blueprints.d.ts.map +1 -0
- package/dist/types/src/blueprints/blueprint-manager/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/blueprint-manager/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/blueprint-manager/functions/query-blueprints.d.ts +27 -0
- package/dist/types/src/blueprints/blueprint-manager/functions/query-blueprints.d.ts.map +1 -0
- package/dist/types/src/blueprints/blueprint-manager/functions/update-blueprints.d.ts +5 -0
- package/dist/types/src/blueprints/blueprint-manager/functions/update-blueprints.d.ts.map +1 -0
- package/dist/types/src/blueprints/blueprint-manager/index.d.ts +3 -0
- package/dist/types/src/blueprints/blueprint-manager/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/browser/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/browser/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/browser/blueprint.test.d.ts +2 -0
- package/dist/types/src/blueprints/browser/blueprint.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/browser/index.d.ts +2 -0
- package/dist/types/src/blueprints/browser/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/database/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/blueprint.test.d.ts +2 -0
- package/dist/types/src/blueprints/database/blueprint.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/context-add.d.ts +7 -0
- package/dist/types/src/blueprints/database/functions/context-add.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/context-remove.d.ts +7 -0
- package/dist/types/src/blueprints/database/functions/context-remove.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/definitions.d.ts +59 -0
- package/dist/types/src/blueprints/database/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/database/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/load.d.ts +7 -0
- package/dist/types/src/blueprints/database/functions/load.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/object-create.d.ts +8 -0
- package/dist/types/src/blueprints/database/functions/object-create.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/object-delete.d.ts +7 -0
- package/dist/types/src/blueprints/database/functions/object-delete.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/object-update.d.ts +10 -0
- package/dist/types/src/blueprints/database/functions/object-update.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/query.d.ts +13 -0
- package/dist/types/src/blueprints/database/functions/query.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/relation-create.d.ts +10 -0
- package/dist/types/src/blueprints/database/functions/relation-create.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/relation-delete.d.ts +7 -0
- package/dist/types/src/blueprints/database/functions/relation-delete.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/schema-add.d.ts +9 -0
- package/dist/types/src/blueprints/database/functions/schema-add.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/schema-list.d.ts +7 -0
- package/dist/types/src/blueprints/database/functions/schema-list.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/tag-add.d.ts +8 -0
- package/dist/types/src/blueprints/database/functions/tag-add.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/functions/tag-remove.d.ts +8 -0
- package/dist/types/src/blueprints/database/functions/tag-remove.d.ts.map +1 -0
- package/dist/types/src/blueprints/database/index.d.ts +3 -0
- package/dist/types/src/blueprints/database/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/design/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/design/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/design/blueprint.test.d.ts +2 -0
- package/dist/types/src/blueprints/design/blueprint.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/design/index.d.ts +1 -2
- package/dist/types/src/blueprints/design/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/discord/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/discord/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/discord/functions/definitions.d.ts +16 -0
- package/dist/types/src/blueprints/discord/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/{functions/discord → blueprints/discord/functions}/fetch-messages.d.ts +4 -2
- package/dist/types/src/blueprints/discord/functions/fetch-messages.d.ts.map +1 -0
- package/dist/types/src/blueprints/discord/functions/fetch-messages.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/discord/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/discord/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/discord/index.d.ts +2 -2
- package/dist/types/src/blueprints/discord/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/github/functions/definitions.d.ts +8 -0
- package/dist/types/src/blueprints/github/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/github/functions/fetch-prs.d.ts +9 -0
- package/dist/types/src/blueprints/github/functions/fetch-prs.d.ts.map +1 -0
- package/dist/types/src/blueprints/github/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/github/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/github/index.d.ts +2 -0
- package/dist/types/src/blueprints/github/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/index.d.ts +14 -6
- package/dist/types/src/blueprints/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/linear/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/linear/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/linear/functions/definitions.d.ts +7 -0
- package/dist/types/src/blueprints/linear/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/linear/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/linear/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/linear/functions/linear.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/linear/functions/sync-issues.d.ts +11 -0
- package/dist/types/src/blueprints/linear/functions/sync-issues.d.ts.map +1 -0
- package/dist/types/src/blueprints/linear/index.d.ts +2 -2
- package/dist/types/src/blueprints/linear/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/markdown/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/markdown/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/markdown/functions/create.d.ts +8 -0
- package/dist/types/src/blueprints/markdown/functions/create.d.ts.map +1 -0
- package/dist/types/src/blueprints/markdown/functions/definitions.d.ts +45 -0
- package/dist/types/src/blueprints/markdown/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/markdown/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/markdown/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/markdown/functions/read.d.ts +17 -0
- package/dist/types/src/blueprints/markdown/functions/read.d.ts.map +1 -0
- package/dist/types/src/blueprints/markdown/functions/update.d.ts +16 -0
- package/dist/types/src/blueprints/markdown/functions/update.d.ts.map +1 -0
- package/dist/types/src/blueprints/markdown/index.d.ts +3 -0
- package/dist/types/src/blueprints/markdown/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/memory/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/memory/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/memory/blueprint.test.d.ts +2 -0
- package/dist/types/src/blueprints/memory/blueprint.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/memory/functions/definitions.d.ts +17 -0
- package/dist/types/src/blueprints/memory/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/memory/functions/delete.d.ts +10 -0
- package/dist/types/src/blueprints/memory/functions/delete.d.ts.map +1 -0
- package/dist/types/src/blueprints/memory/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/memory/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/memory/functions/query.d.ts +8 -0
- package/dist/types/src/blueprints/memory/functions/query.d.ts.map +1 -0
- package/dist/types/src/blueprints/memory/functions/save.d.ts +8 -0
- package/dist/types/src/blueprints/memory/functions/save.d.ts.map +1 -0
- package/dist/types/src/blueprints/memory/index.d.ts +3 -0
- package/dist/types/src/blueprints/memory/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/planning/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning/functions/definitions.d.ts +11 -0
- package/dist/types/src/blueprints/planning/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/planning/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning/functions/update-tasks.d.ts +11 -0
- package/dist/types/src/blueprints/planning/functions/update-tasks.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning/index.d.ts +2 -2
- package/dist/types/src/blueprints/planning/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/planning-old/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/planning-old/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning-old/blueprint.test.d.ts +2 -0
- package/dist/types/src/blueprints/planning-old/blueprint.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning-old/functions/definitions.d.ts +31 -0
- package/dist/types/src/blueprints/planning-old/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning-old/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/planning-old/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning-old/functions/read.d.ts +17 -0
- package/dist/types/src/blueprints/planning-old/functions/read.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning-old/functions/task-list.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning-old/functions/task-list.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning-old/functions/update.d.ts +19 -0
- package/dist/types/src/blueprints/planning-old/functions/update.d.ts.map +1 -0
- package/dist/types/src/blueprints/planning-old/index.d.ts +3 -0
- package/dist/types/src/blueprints/planning-old/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/project/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/project/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/project/blueprint.test.d.ts +2 -0
- package/dist/types/src/blueprints/project/blueprint.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/project/functions/add-artifact.d.ts +8 -0
- package/dist/types/src/blueprints/project/functions/add-artifact.d.ts.map +1 -0
- package/dist/types/src/blueprints/project/functions/agent.d.ts +4 -0
- package/dist/types/src/blueprints/project/functions/agent.d.ts.map +1 -0
- package/dist/types/src/blueprints/project/functions/definitions.d.ts +150 -0
- package/dist/types/src/blueprints/project/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/project/functions/get-context.d.ts +15 -0
- package/dist/types/src/blueprints/project/functions/get-context.d.ts.map +1 -0
- package/dist/types/src/blueprints/project/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/project/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/project/functions/qualifier.d.ts +69 -0
- package/dist/types/src/blueprints/project/functions/qualifier.d.ts.map +1 -0
- package/dist/types/src/blueprints/project/index.d.ts +3 -0
- package/dist/types/src/blueprints/project/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/project-wizard/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/project-wizard/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/project-wizard/functions/create-project.d.ts +48 -0
- package/dist/types/src/blueprints/project-wizard/functions/create-project.d.ts.map +1 -0
- package/dist/types/src/blueprints/project-wizard/functions/definitions.d.ts +89 -0
- package/dist/types/src/blueprints/project-wizard/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/project-wizard/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/project-wizard/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/project-wizard/functions/project-rules.d.ts +4 -0
- package/dist/types/src/blueprints/project-wizard/functions/project-rules.d.ts.map +1 -0
- package/dist/types/src/blueprints/project-wizard/functions/sync-triggers.d.ts +44 -0
- package/dist/types/src/blueprints/project-wizard/functions/sync-triggers.d.ts.map +1 -0
- package/dist/types/src/blueprints/project-wizard/index.d.ts +3 -0
- package/dist/types/src/blueprints/project-wizard/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/research/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/research/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/research/blueprint.test.d.ts +2 -0
- package/dist/types/src/blueprints/research/blueprint.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/research/functions/definitions.d.ts +21 -0
- package/dist/types/src/blueprints/research/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/research/functions/document-create.d.ts +12 -0
- package/dist/types/src/blueprints/research/functions/document-create.d.ts.map +1 -0
- package/dist/types/src/blueprints/research/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/research/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/research/functions/research.d.ts +7 -0
- package/dist/types/src/blueprints/research/functions/research.d.ts.map +1 -0
- package/dist/types/src/blueprints/research/functions/research.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/research/index.d.ts +3 -2
- package/dist/types/src/blueprints/research/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/research/types/ResearchGraph.d.ts +35 -0
- package/dist/types/src/blueprints/research/types/ResearchGraph.d.ts.map +1 -0
- package/dist/types/src/blueprints/research/types/index.d.ts +7 -0
- package/dist/types/src/blueprints/research/types/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/testing.d.ts +17 -5
- package/dist/types/src/blueprints/testing.d.ts.map +1 -1
- package/dist/types/src/blueprints/websearch/blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/websearch/blueprint.d.ts.map +1 -0
- package/dist/types/src/blueprints/websearch/blueprint.test.d.ts +2 -0
- package/dist/types/src/blueprints/websearch/blueprint.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/websearch/functions/definitions.d.ts +5 -0
- package/dist/types/src/blueprints/websearch/functions/definitions.d.ts.map +1 -0
- package/dist/types/src/blueprints/websearch/functions/fetch.d.ts +6 -0
- package/dist/types/src/blueprints/websearch/functions/fetch.d.ts.map +1 -0
- package/dist/types/src/blueprints/websearch/functions/index.d.ts +4 -0
- package/dist/types/src/blueprints/websearch/functions/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/websearch/index.d.ts +3 -3
- package/dist/types/src/blueprints/websearch/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/websearch/{websearch-toolkit.d.ts → toolkit.d.ts} +3 -1
- package/dist/types/src/blueprints/websearch/toolkit.d.ts.map +1 -0
- package/dist/types/src/crud/graph.d.ts +14 -11
- package/dist/types/src/crud/graph.d.ts.map +1 -1
- package/dist/types/src/errors.d.ts +41 -0
- package/dist/types/src/errors.d.ts.map +1 -0
- package/dist/types/src/functions/agent/definitions.d.ts +60 -0
- package/dist/types/src/functions/agent/definitions.d.ts.map +1 -0
- package/dist/types/src/functions/agent/index.d.ts +3 -4
- package/dist/types/src/functions/agent/index.d.ts.map +1 -1
- package/dist/types/src/functions/agent/prompt.d.ts +2 -7
- package/dist/types/src/functions/agent/prompt.d.ts.map +1 -1
- package/dist/types/src/functions/agent/prompt.test.d.ts +2 -0
- package/dist/types/src/functions/agent/prompt.test.d.ts.map +1 -0
- package/dist/types/src/functions/entity-extraction/definitions.d.ts +182 -0
- package/dist/types/src/functions/entity-extraction/definitions.d.ts.map +1 -0
- package/dist/types/src/functions/entity-extraction/entity-extraction.d.ts +2 -171
- package/dist/types/src/functions/entity-extraction/entity-extraction.d.ts.map +1 -1
- package/dist/types/src/functions/entity-extraction/index.d.ts +3 -173
- package/dist/types/src/functions/entity-extraction/index.d.ts.map +1 -1
- package/dist/types/src/functions/exa/data/exa-search-1748337321991.d.ts.map +1 -0
- package/dist/types/src/functions/exa/data/exa-search-1748337331526.d.ts.map +1 -0
- package/dist/types/src/functions/exa/data/exa-search-1748337344119.d.ts.map +1 -0
- package/dist/types/src/functions/exa/data/index.d.ts.map +1 -0
- package/dist/types/src/functions/exa/definitions.d.ts +9 -0
- package/dist/types/src/functions/exa/definitions.d.ts.map +1 -0
- package/dist/types/src/functions/exa/exa.d.ts +4 -2
- package/dist/types/src/functions/exa/exa.d.ts.map +1 -1
- package/dist/types/src/functions/exa/index.d.ts +3 -2
- package/dist/types/src/functions/exa/index.d.ts.map +1 -1
- package/dist/types/src/functions/exa/mock.d.ts +3 -2
- package/dist/types/src/functions/exa/mock.d.ts.map +1 -1
- package/dist/types/src/functions/index.d.ts +1 -5
- package/dist/types/src/functions/index.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/sync/sync.d.ts +3 -3
- package/dist/types/src/sync/sync.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +2 -1
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/plugins.d.ts +19 -0
- package/dist/types/src/testing/plugins.d.ts.map +1 -0
- package/dist/types/src/toolkits/WebToolkit.d.ts +38 -0
- package/dist/types/src/toolkits/WebToolkit.d.ts.map +1 -0
- package/dist/types/src/toolkits/index.d.ts +1 -2
- package/dist/types/src/toolkits/index.d.ts.map +1 -1
- package/dist/types/src/types/Agent.d.ts +73 -0
- package/dist/types/src/types/Agent.d.ts.map +1 -0
- package/dist/types/src/types/Chat.d.ts +52 -0
- package/dist/types/src/types/Chat.d.ts.map +1 -0
- package/dist/types/src/types/McpServer.d.ts +18 -0
- package/dist/types/src/types/McpServer.d.ts.map +1 -0
- package/dist/types/src/types/Memory.d.ts +12 -0
- package/dist/types/src/types/Memory.d.ts.map +1 -0
- package/dist/types/src/types/Plan.d.ts +86 -0
- package/dist/types/src/types/Plan.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +6 -0
- package/dist/types/src/types/index.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +50 -40
- package/src/blueprints/automation/blueprint.ts +108 -0
- package/src/blueprints/automation/index.ts +5 -0
- package/src/blueprints/blueprint-manager/blueprint.conversations.json +1 -0
- package/src/blueprints/blueprint-manager/blueprint.test.ts +199 -0
- package/src/blueprints/blueprint-manager/blueprint.ts +50 -0
- package/src/blueprints/blueprint-manager/functions/definitions.ts +58 -0
- package/src/blueprints/blueprint-manager/functions/enable-blueprints.ts +44 -0
- package/src/blueprints/blueprint-manager/functions/index.ts +13 -0
- package/src/blueprints/blueprint-manager/functions/query-blueprints.ts +19 -0
- package/src/blueprints/blueprint-manager/functions/update-blueprints.ts +19 -0
- package/src/blueprints/blueprint-manager/index.ts +6 -0
- package/src/blueprints/browser/blueprint.conversations.json +1 -0
- package/src/blueprints/browser/blueprint.test.ts +63 -0
- package/src/blueprints/browser/blueprint.ts +41 -0
- package/src/blueprints/browser/index.ts +5 -0
- package/src/blueprints/database/blueprint.conversations.json +1 -0
- package/src/blueprints/database/blueprint.test.ts +532 -0
- package/src/blueprints/database/blueprint.ts +67 -0
- package/src/blueprints/database/functions/context-add.ts +24 -0
- package/src/blueprints/database/functions/context-remove.ts +24 -0
- package/src/blueprints/database/functions/definitions.ts +318 -0
- package/src/blueprints/database/functions/index.ts +23 -0
- package/src/blueprints/database/functions/load.ts +19 -0
- package/src/blueprints/database/functions/object-create.ts +38 -0
- package/src/blueprints/database/functions/object-delete.ts +20 -0
- package/src/blueprints/database/functions/object-update.ts +30 -0
- package/src/blueprints/database/functions/query.ts +64 -0
- package/src/blueprints/database/functions/relation-create.ts +34 -0
- package/src/blueprints/database/functions/relation-delete.ts +21 -0
- package/src/blueprints/database/functions/schema-add.ts +28 -0
- package/src/blueprints/database/functions/schema-list.ts +34 -0
- package/src/blueprints/database/functions/tag-add.ts +21 -0
- package/src/blueprints/database/functions/tag-remove.ts +21 -0
- package/src/blueprints/database/index.ts +21 -0
- package/src/blueprints/design/blueprint.test.ts +77 -0
- package/src/blueprints/design/{design-blueprint.ts → blueprint.ts} +20 -12
- package/src/blueprints/design/index.ts +1 -3
- package/src/blueprints/discord/blueprint.ts +42 -0
- package/src/blueprints/discord/functions/definitions.ts +71 -0
- package/src/blueprints/discord/functions/fetch-messages.test.ts +45 -0
- package/src/blueprints/discord/functions/fetch-messages.ts +199 -0
- package/src/blueprints/discord/functions/index.ts +9 -0
- package/src/blueprints/discord/index.ts +2 -3
- package/src/blueprints/github/functions/definitions.ts +27 -0
- package/src/blueprints/github/functions/fetch-prs.ts +24 -0
- package/src/blueprints/github/functions/index.ts +9 -0
- package/src/blueprints/github/index.ts +5 -0
- package/src/blueprints/index.ts +14 -6
- package/src/blueprints/linear/blueprint.ts +43 -0
- package/src/blueprints/linear/functions/definitions.ts +24 -0
- package/src/blueprints/linear/functions/index.ts +9 -0
- package/src/blueprints/linear/functions/linear.test.ts +59 -0
- package/src/{functions/linear → blueprints/linear/functions}/sync-issues.ts +40 -46
- package/src/blueprints/linear/index.ts +2 -3
- package/src/blueprints/markdown/blueprint.ts +36 -0
- package/src/blueprints/markdown/functions/create.ts +20 -0
- package/src/blueprints/markdown/functions/definitions.ts +80 -0
- package/src/blueprints/markdown/functions/index.ts +13 -0
- package/src/blueprints/markdown/functions/read.ts +22 -0
- package/src/blueprints/markdown/functions/update.ts +22 -0
- package/src/blueprints/markdown/index.ts +11 -0
- package/src/blueprints/memory/blueprint.conversations.json +1 -0
- package/src/blueprints/memory/blueprint.test.ts +139 -0
- package/src/blueprints/memory/blueprint.ts +42 -0
- package/src/blueprints/memory/functions/definitions.ts +68 -0
- package/src/blueprints/memory/functions/delete.ts +20 -0
- package/src/blueprints/memory/functions/index.ts +13 -0
- package/src/blueprints/memory/functions/query.ts +32 -0
- package/src/blueprints/memory/functions/save.ts +20 -0
- package/src/blueprints/memory/index.ts +6 -0
- package/src/blueprints/planning/blueprint.ts +25 -0
- package/src/blueprints/planning/functions/definitions.ts +137 -0
- package/src/blueprints/planning/functions/index.ts +9 -0
- package/src/blueprints/planning/functions/update-tasks.ts +45 -0
- package/src/blueprints/planning/index.ts +3 -4
- package/src/blueprints/{planning/planning-blueprint.test.ts → planning-old/blueprint.test.ts} +23 -40
- package/src/blueprints/{planning/planning-blueprint.ts → planning-old/blueprint.ts} +20 -12
- package/src/blueprints/planning-old/functions/definitions.ts +53 -0
- package/src/blueprints/planning-old/functions/index.ts +12 -0
- package/src/blueprints/planning-old/functions/read.ts +24 -0
- package/src/blueprints/planning-old/functions/update.ts +31 -0
- package/src/blueprints/planning-old/index.ts +6 -0
- package/src/blueprints/project/blueprint.conversations.json +1 -0
- package/src/blueprints/project/blueprint.test.ts +626 -0
- package/src/blueprints/project/blueprint.ts +65 -0
- package/src/blueprints/project/functions/add-artifact.ts +30 -0
- package/src/blueprints/project/functions/agent.ts +68 -0
- package/src/blueprints/project/functions/definitions.ts +92 -0
- package/src/blueprints/project/functions/get-context.ts +46 -0
- package/src/blueprints/project/functions/index.ts +14 -0
- package/src/blueprints/project/functions/qualifier.ts +90 -0
- package/src/blueprints/project/index.ts +6 -0
- package/src/blueprints/project-wizard/blueprint.ts +48 -0
- package/src/blueprints/project-wizard/functions/create-project.ts +33 -0
- package/src/blueprints/project-wizard/functions/definitions.ts +64 -0
- package/src/blueprints/project-wizard/functions/index.ts +13 -0
- package/src/blueprints/project-wizard/functions/project-rules.ts +77 -0
- package/src/blueprints/project-wizard/functions/sync-triggers.ts +135 -0
- package/src/blueprints/project-wizard/index.ts +6 -0
- package/src/blueprints/research/{research-blueprint.ts → blueprint.ts} +21 -13
- package/src/blueprints/research/functions/definitions.ts +87 -0
- package/src/blueprints/research/functions/document-create.ts +50 -0
- package/src/blueprints/research/functions/index.ts +12 -0
- package/src/{functions/research → blueprints/research/functions}/research-instructions.tpl +5 -5
- package/src/blueprints/research/functions/research.conversations.json +1 -0
- package/src/blueprints/research/functions/research.test.ts +149 -0
- package/src/blueprints/research/functions/research.ts +138 -0
- package/src/blueprints/research/index.ts +3 -3
- package/src/blueprints/research/types/ResearchGraph.ts +96 -0
- package/src/{functions/research/types.ts → blueprints/research/types/index.ts} +12 -6
- package/src/blueprints/testing.ts +32 -8
- package/src/blueprints/websearch/blueprint.conversations.json +1 -0
- package/src/blueprints/websearch/blueprint.test.ts +39 -0
- package/src/blueprints/websearch/blueprint.ts +31 -0
- package/src/blueprints/websearch/functions/definitions.ts +25 -0
- package/src/blueprints/websearch/functions/fetch.ts +18 -0
- package/src/blueprints/websearch/functions/index.ts +9 -0
- package/src/blueprints/websearch/index.ts +3 -4
- package/src/blueprints/websearch/{websearch-toolkit.ts → toolkit.ts} +6 -1
- package/src/crud/graph.test.ts +13 -38
- package/src/crud/graph.ts +33 -41
- package/src/errors.ts +25 -0
- package/src/functions/READ_THIS.md +5 -0
- package/src/functions/agent/definitions.ts +53 -0
- package/src/functions/agent/index.ts +3 -5
- package/src/functions/agent/prompt.conversations.json +1 -0
- package/src/functions/agent/prompt.test.ts +83 -0
- package/src/functions/agent/prompt.ts +211 -102
- package/src/functions/entity-extraction/definitions.ts +36 -0
- package/src/functions/entity-extraction/entity-extraction.conversations.json +1 -1
- package/src/functions/entity-extraction/entity-extraction.test.ts +15 -33
- package/src/functions/entity-extraction/entity-extraction.ts +81 -90
- package/src/functions/entity-extraction/index.ts +4 -4
- package/src/functions/exa/definitions.ts +37 -0
- package/src/functions/exa/exa.ts +22 -27
- package/src/functions/exa/index.ts +8 -2
- package/src/functions/exa/mock.ts +26 -35
- package/src/functions/index.ts +1 -5
- package/src/index.ts +2 -2
- package/src/sync/sync.ts +38 -30
- package/src/testing/index.ts +2 -1
- package/src/testing/plugins.tsx +77 -0
- package/src/toolkits/WebToolkit.ts +33 -0
- package/src/toolkits/index.ts +1 -2
- package/src/types/Agent.ts +219 -0
- package/src/types/Chat.ts +62 -0
- package/src/types/McpServer.ts +37 -0
- package/src/types/Memory.ts +24 -0
- package/src/types/Plan.ts +110 -0
- package/src/types/index.ts +9 -0
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/node-esm/index.mjs +0 -2778
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/types/src/blueprints/design/design-blueprint.d.ts +0 -4
- package/dist/types/src/blueprints/design/design-blueprint.d.ts.map +0 -1
- package/dist/types/src/blueprints/design/design-blueprint.test.d.ts +0 -2
- package/dist/types/src/blueprints/design/design-blueprint.test.d.ts.map +0 -1
- package/dist/types/src/blueprints/discord/discord-blueprint.d.ts +0 -18
- package/dist/types/src/blueprints/discord/discord-blueprint.d.ts.map +0 -1
- package/dist/types/src/blueprints/linear/linear-blueprint.d.ts +0 -18
- package/dist/types/src/blueprints/linear/linear-blueprint.d.ts.map +0 -1
- package/dist/types/src/blueprints/planning/planning-blueprint.d.ts +0 -4
- package/dist/types/src/blueprints/planning/planning-blueprint.d.ts.map +0 -1
- package/dist/types/src/blueprints/planning/planning-blueprint.test.d.ts +0 -2
- package/dist/types/src/blueprints/planning/planning-blueprint.test.d.ts.map +0 -1
- package/dist/types/src/blueprints/research/research-blueprint.d.ts +0 -4
- package/dist/types/src/blueprints/research/research-blueprint.d.ts.map +0 -1
- package/dist/types/src/blueprints/research/research-blueprint.test.d.ts +0 -2
- package/dist/types/src/blueprints/research/research-blueprint.test.d.ts.map +0 -1
- package/dist/types/src/blueprints/websearch/websearch-blueprint.d.ts +0 -4
- package/dist/types/src/blueprints/websearch/websearch-blueprint.d.ts.map +0 -1
- package/dist/types/src/blueprints/websearch/websearch-toolkit.d.ts.map +0 -1
- package/dist/types/src/experimental/feed.test.d.ts +0 -2
- package/dist/types/src/experimental/feed.test.d.ts.map +0 -1
- package/dist/types/src/functions/discord/fetch-messages.d.ts.map +0 -1
- package/dist/types/src/functions/discord/fetch-messages.test.d.ts.map +0 -1
- package/dist/types/src/functions/discord/index.d.ts +0 -12
- package/dist/types/src/functions/discord/index.d.ts.map +0 -1
- package/dist/types/src/functions/document/index.d.ts +0 -13
- package/dist/types/src/functions/document/index.d.ts.map +0 -1
- package/dist/types/src/functions/document/read.d.ts +0 -7
- package/dist/types/src/functions/document/read.d.ts.map +0 -1
- package/dist/types/src/functions/document/update.d.ts +0 -6
- package/dist/types/src/functions/document/update.d.ts.map +0 -1
- package/dist/types/src/functions/github/fetch-prs.d.ts +0 -6
- package/dist/types/src/functions/github/fetch-prs.d.ts.map +0 -1
- package/dist/types/src/functions/linear/index.d.ts +0 -9
- package/dist/types/src/functions/linear/index.d.ts.map +0 -1
- package/dist/types/src/functions/linear/linear.test.d.ts.map +0 -1
- package/dist/types/src/functions/linear/sync-issues.d.ts +0 -12
- package/dist/types/src/functions/linear/sync-issues.d.ts.map +0 -1
- package/dist/types/src/functions/research/document-create.d.ts +0 -9
- package/dist/types/src/functions/research/document-create.d.ts.map +0 -1
- package/dist/types/src/functions/research/index.d.ts +0 -21
- package/dist/types/src/functions/research/index.d.ts.map +0 -1
- package/dist/types/src/functions/research/research-graph.d.ts +0 -18
- package/dist/types/src/functions/research/research-graph.d.ts.map +0 -1
- package/dist/types/src/functions/research/research.d.ts +0 -14
- package/dist/types/src/functions/research/research.d.ts.map +0 -1
- package/dist/types/src/functions/research/research.test.d.ts.map +0 -1
- package/dist/types/src/functions/research/types.d.ts +0 -6
- package/dist/types/src/functions/research/types.d.ts.map +0 -1
- package/dist/types/src/functions/tasks/index.d.ts +0 -15
- package/dist/types/src/functions/tasks/index.d.ts.map +0 -1
- package/dist/types/src/functions/tasks/read.d.ts +0 -7
- package/dist/types/src/functions/tasks/read.d.ts.map +0 -1
- package/dist/types/src/functions/tasks/task-list.d.ts.map +0 -1
- package/dist/types/src/functions/tasks/task-list.test.d.ts.map +0 -1
- package/dist/types/src/functions/tasks/update.d.ts +0 -9
- package/dist/types/src/functions/tasks/update.d.ts.map +0 -1
- package/dist/types/src/plugins.d.ts +0 -19
- package/dist/types/src/plugins.d.ts.map +0 -1
- package/dist/types/src/testing/data/exa-search-1748337321991.d.ts.map +0 -1
- package/dist/types/src/testing/data/exa-search-1748337331526.d.ts.map +0 -1
- package/dist/types/src/testing/data/exa-search-1748337344119.d.ts.map +0 -1
- package/dist/types/src/testing/data/index.d.ts.map +0 -1
- package/dist/types/src/toolkits/AssistantToolkit.d.ts +0 -17
- package/dist/types/src/toolkits/AssistantToolkit.d.ts.map +0 -1
- package/dist/types/src/toolkits/AssistantToolkit.test.d.ts +0 -2
- package/dist/types/src/toolkits/AssistantToolkit.test.d.ts.map +0 -1
- package/dist/types/src/toolkits/SystemToolkit.d.ts +0 -67
- package/dist/types/src/toolkits/SystemToolkit.d.ts.map +0 -1
- package/src/blueprints/design/design-blueprint.test.ts +0 -103
- package/src/blueprints/discord/discord-blueprint.ts +0 -34
- package/src/blueprints/linear/linear-blueprint.ts +0 -35
- package/src/blueprints/websearch/websearch-blueprint.ts +0 -20
- package/src/experimental/feed.test.ts +0 -111
- package/src/functions/discord/fetch-messages.test.ts +0 -58
- package/src/functions/discord/fetch-messages.ts +0 -252
- package/src/functions/discord/index.ts +0 -9
- package/src/functions/document/index.ts +0 -12
- package/src/functions/document/read.ts +0 -29
- package/src/functions/document/update.ts +0 -30
- package/src/functions/github/fetch-prs.ts +0 -30
- package/src/functions/linear/index.ts +0 -9
- package/src/functions/linear/linear.test.ts +0 -83
- package/src/functions/research/document-create.ts +0 -75
- package/src/functions/research/index.ts +0 -14
- package/src/functions/research/research-graph.ts +0 -47
- package/src/functions/research/research.conversations.json +0 -1
- package/src/functions/research/research.test.ts +0 -179
- package/src/functions/research/research.ts +0 -190
- package/src/functions/tasks/index.ts +0 -11
- package/src/functions/tasks/read.ts +0 -34
- package/src/functions/tasks/update.ts +0 -52
- package/src/plugins.tsx +0 -68
- package/src/toolkits/AssistantToolkit.conversations.json +0 -1
- package/src/toolkits/AssistantToolkit.test.ts +0 -88
- package/src/toolkits/AssistantToolkit.ts +0 -47
- package/src/toolkits/SystemToolkit.ts +0 -231
- /package/dist/types/src/{functions/discord → blueprints/discord/functions}/fetch-messages.test.d.ts +0 -0
- /package/dist/types/src/{functions/linear → blueprints/linear/functions}/linear.test.d.ts +0 -0
- /package/dist/types/src/{functions/tasks → blueprints/planning-old/functions}/task-list.d.ts +0 -0
- /package/dist/types/src/{functions/tasks → blueprints/planning-old/functions}/task-list.test.d.ts +0 -0
- /package/dist/types/src/{functions/research → blueprints/research/functions}/research.test.d.ts +0 -0
- /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337321991.d.ts +0 -0
- /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337331526.d.ts +0 -0
- /package/dist/types/src/{testing → functions/exa}/data/exa-search-1748337344119.d.ts +0 -0
- /package/dist/types/src/{testing → functions/exa}/data/index.d.ts +0 -0
- /package/src/{functions/tasks → blueprints/planning-old/functions}/task-list.test.ts +0 -0
- /package/src/{functions/tasks → blueprints/planning-old/functions}/task-list.ts +0 -0
- /package/src/blueprints/research/{research-blueprint.test.ts → blueprint.test.ts} +0 -0
- /package/src/{testing → functions/exa}/data/exa-search-1748337321991.ts +0 -0
- /package/src/{testing → functions/exa}/data/exa-search-1748337331526.ts +0 -0
- /package/src/{testing → functions/exa}/data/exa-search-1748337344119.ts +0 -0
- /package/src/{testing → functions/exa}/data/index.ts +0 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { describe, it } from '@effect/vitest';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
import { inspect } from 'node:util';
|
|
8
|
+
|
|
9
|
+
import { MemoizedAiService } from '@dxos/ai/testing';
|
|
10
|
+
import { AgentService } from '@dxos/assistant';
|
|
11
|
+
import { AssistantTestLayer } from '@dxos/assistant/testing';
|
|
12
|
+
import { Blueprint } from '@dxos/blueprints';
|
|
13
|
+
import { Database, Feed, Filter, Obj, Query, Ref } from '@dxos/echo';
|
|
14
|
+
import { TestHelpers } from '@dxos/effect/testing';
|
|
15
|
+
import { invariant } from '@dxos/invariant';
|
|
16
|
+
import { ObjectId } from '@dxos/keys';
|
|
17
|
+
import { Operation } from '@dxos/operation';
|
|
18
|
+
import { OperationHandlerSet } from '@dxos/operation';
|
|
19
|
+
import { MarkdownBlueprint } from '@dxos/plugin-markdown/blueprints';
|
|
20
|
+
import { Markdown } from '@dxos/plugin-markdown/types';
|
|
21
|
+
import { HasSubject, Organization } from '@dxos/types';
|
|
22
|
+
|
|
23
|
+
import { MarkdownHandlers } from '../../markdown';
|
|
24
|
+
import ResearchBlueprint from '../blueprint';
|
|
25
|
+
import { ResearchHandlers } from '../functions';
|
|
26
|
+
import { ResearchDataTypes, ResearchGraph } from '../types';
|
|
27
|
+
import { default as research } from './research';
|
|
28
|
+
|
|
29
|
+
ObjectId.dangerouslyDisableRandomness();
|
|
30
|
+
|
|
31
|
+
const TestLayer = AssistantTestLayer({
|
|
32
|
+
operationHandlers: OperationHandlerSet.merge(ResearchHandlers, MarkdownHandlers),
|
|
33
|
+
types: [
|
|
34
|
+
...ResearchDataTypes,
|
|
35
|
+
ResearchGraph.ResearchGraph,
|
|
36
|
+
Blueprint.Blueprint,
|
|
37
|
+
Markdown.Document,
|
|
38
|
+
HasSubject.HasSubject,
|
|
39
|
+
Feed.Feed,
|
|
40
|
+
],
|
|
41
|
+
blueprints: [ResearchBlueprint.make(), MarkdownBlueprint.make()],
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
const AgentTestLayer = AssistantTestLayer({
|
|
45
|
+
aiServicePreset: 'edge-remote',
|
|
46
|
+
operationHandlers: OperationHandlerSet.merge(ResearchHandlers, MarkdownHandlers),
|
|
47
|
+
types: [
|
|
48
|
+
...ResearchDataTypes,
|
|
49
|
+
ResearchGraph.ResearchGraph,
|
|
50
|
+
Blueprint.Blueprint,
|
|
51
|
+
Markdown.Document,
|
|
52
|
+
HasSubject.HasSubject,
|
|
53
|
+
Feed.Feed,
|
|
54
|
+
],
|
|
55
|
+
blueprints: [ResearchBlueprint.make(), MarkdownBlueprint.make()],
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
describe('Research', () => {
|
|
59
|
+
it.effect(
|
|
60
|
+
'call a function to generate a research report',
|
|
61
|
+
Effect.fnUntraced(
|
|
62
|
+
function* (_) {
|
|
63
|
+
yield* Database.add(
|
|
64
|
+
Obj.make(Organization.Organization, {
|
|
65
|
+
name: 'BlueYard',
|
|
66
|
+
website: 'https://blueyard.com',
|
|
67
|
+
}),
|
|
68
|
+
);
|
|
69
|
+
yield* Database.flush();
|
|
70
|
+
const result = yield* Operation.invoke(research, {
|
|
71
|
+
query: 'Founders and portfolio of BlueYard.',
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
console.log(inspect(result, { depth: null, colors: true }));
|
|
75
|
+
console.log(JSON.stringify(result, null, 2));
|
|
76
|
+
|
|
77
|
+
yield* Database.flush();
|
|
78
|
+
const researchGraph = yield* ResearchGraph.query();
|
|
79
|
+
if (researchGraph) {
|
|
80
|
+
const feed = yield* Database.load(researchGraph.queue);
|
|
81
|
+
const data = yield* Feed.runQuery(feed, Filter.everything());
|
|
82
|
+
console.log(inspect(data, { depth: null, colors: true }));
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
Effect.provide(TestLayer),
|
|
86
|
+
TestHelpers.provideTestContext,
|
|
87
|
+
),
|
|
88
|
+
MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
it.effect(
|
|
92
|
+
'create and update research report',
|
|
93
|
+
Effect.fnUntraced(
|
|
94
|
+
function* (_) {
|
|
95
|
+
const organization = yield* Database.add(
|
|
96
|
+
Obj.make(Organization.Organization, {
|
|
97
|
+
name: 'BlueYard',
|
|
98
|
+
website: 'https://blueyard.com',
|
|
99
|
+
}),
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
const agent = yield* AgentService.createSession({
|
|
103
|
+
blueprints: [ResearchBlueprint.make(), MarkdownBlueprint.make()],
|
|
104
|
+
context: [Ref.make(organization)],
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
yield* agent.submitPrompt(`Create a research summary about ${organization.name}.`);
|
|
108
|
+
yield* agent.waitForCompletion();
|
|
109
|
+
{
|
|
110
|
+
const docs = yield* Database.runQuery(
|
|
111
|
+
Query.select(Filter.id(organization.id)).targetOf(HasSubject.HasSubject).source(),
|
|
112
|
+
);
|
|
113
|
+
if (docs.length !== 1) {
|
|
114
|
+
throw new Error(`Expected 1 research document; got ${docs.length}: ${docs.map((_) => (_ as any).name)}`);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const doc = docs[0];
|
|
118
|
+
invariant(Obj.instanceOf(Markdown.Document, doc));
|
|
119
|
+
console.log({
|
|
120
|
+
name: doc.name,
|
|
121
|
+
content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
yield* agent.submitPrompt('Add a section about their portfolio.');
|
|
126
|
+
yield* agent.waitForCompletion();
|
|
127
|
+
{
|
|
128
|
+
const docs = yield* Database.runQuery(
|
|
129
|
+
Query.select(Filter.id(organization.id)).targetOf(HasSubject.HasSubject).source(),
|
|
130
|
+
);
|
|
131
|
+
if (docs.length !== 1) {
|
|
132
|
+
throw new Error(`Expected 1 research document; got ${docs.length}: ${docs.map((_) => (_ as any).name)}`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const doc = docs[0];
|
|
136
|
+
invariant(Obj.instanceOf(Markdown.Document, doc));
|
|
137
|
+
console.log({
|
|
138
|
+
name: doc.name,
|
|
139
|
+
content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
Effect.provide(AgentTestLayer),
|
|
144
|
+
TestHelpers.provideTestContext,
|
|
145
|
+
TestHelpers.taggedTest('flaky'),
|
|
146
|
+
),
|
|
147
|
+
MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
|
|
148
|
+
);
|
|
149
|
+
});
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as AnthropicTool from '@effect/ai-anthropic/AnthropicTool';
|
|
6
|
+
import * as Toolkit from '@effect/ai/Toolkit';
|
|
7
|
+
import * as Array from 'effect/Array';
|
|
8
|
+
import * as Effect from 'effect/Effect';
|
|
9
|
+
import * as Function from 'effect/Function';
|
|
10
|
+
import * as Layer from 'effect/Layer';
|
|
11
|
+
import * as Option from 'effect/Option';
|
|
12
|
+
import * as String from 'effect/String';
|
|
13
|
+
|
|
14
|
+
import { AiService, ConsolePrinter, OpaqueToolkit } from '@dxos/ai';
|
|
15
|
+
import { AiRequest, GenerationObserver, ToolExecutionServices, createToolkit } from '@dxos/assistant';
|
|
16
|
+
import { Template } from '@dxos/blueprints';
|
|
17
|
+
import { type DXN, Entity, Obj } from '@dxos/echo';
|
|
18
|
+
import { Database } from '@dxos/echo';
|
|
19
|
+
import { Trace } from '@dxos/functions';
|
|
20
|
+
import { Operation } from '@dxos/operation';
|
|
21
|
+
import { type Message, Person } from '@dxos/types';
|
|
22
|
+
import { trim } from '@dxos/util';
|
|
23
|
+
|
|
24
|
+
import { LocalSearchHandler, LocalSearchToolkit, makeGraphWriterHandler, makeGraphWriterToolkit } from '../../../crud';
|
|
25
|
+
import { ResearchGraph } from '../types';
|
|
26
|
+
import { ResearchDataTypes } from '../types';
|
|
27
|
+
import { Research } from './definitions';
|
|
28
|
+
import PROMPT from './research-instructions.tpl?raw';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Exec external service and return the results as a Subgraph.
|
|
32
|
+
*/
|
|
33
|
+
export default Research.pipe(
|
|
34
|
+
Operation.withHandler(
|
|
35
|
+
Effect.fnUntraced(
|
|
36
|
+
function* ({ query, instructions, mockSearch = false, entityExtraction = false }) {
|
|
37
|
+
if (mockSearch) {
|
|
38
|
+
const mockPerson = yield* Database.add(
|
|
39
|
+
Obj.make(Person.Person, {
|
|
40
|
+
preferredName: 'John Doe',
|
|
41
|
+
emails: [{ value: 'john.doe@example.com' }],
|
|
42
|
+
phoneNumbers: [{ value: '123-456-7890' }],
|
|
43
|
+
}),
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
document: trim`
|
|
48
|
+
The research ran in test-mode and was mocked. Proceed as usual.
|
|
49
|
+
We reference John Doe to test reference: ${Obj.getDXN(mockPerson)}
|
|
50
|
+
`,
|
|
51
|
+
objects: [Obj.toJSON(mockPerson)],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
yield* Database.flush();
|
|
56
|
+
yield* Trace.emitStatus('Starting research...');
|
|
57
|
+
|
|
58
|
+
const NativeWebSearch = Toolkit.make(AnthropicTool.WebSearch_20250305({}));
|
|
59
|
+
|
|
60
|
+
let toolkitDef: Toolkit.Any = NativeWebSearch;
|
|
61
|
+
let handlers: Layer.Layer<any, any> = Layer.empty as any;
|
|
62
|
+
|
|
63
|
+
const objectDXNs: DXN[] = [];
|
|
64
|
+
if (entityExtraction) {
|
|
65
|
+
const GraphWriterToolkit = makeGraphWriterToolkit({ schema: ResearchDataTypes });
|
|
66
|
+
const GraphWriterHandler = makeGraphWriterHandler(GraphWriterToolkit, {
|
|
67
|
+
onAppend: (dxns) => objectDXNs.push(...dxns),
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
toolkitDef = Toolkit.merge(toolkitDef, LocalSearchToolkit, GraphWriterToolkit);
|
|
71
|
+
handlers = Layer.mergeAll(handlers, LocalSearchHandler, GraphWriterHandler).pipe(
|
|
72
|
+
Layer.provide(ResearchGraph.contextQueueLayer),
|
|
73
|
+
) as any;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const toolkit = yield* createToolkit({
|
|
77
|
+
toolkit: OpaqueToolkit.make(toolkitDef as Toolkit.Toolkit<any>, handlers),
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const request = new AiRequest({
|
|
81
|
+
observer: GenerationObserver.fromPrinter(new ConsolePrinter({ tag: 'research' })),
|
|
82
|
+
});
|
|
83
|
+
const result = yield* request.run({
|
|
84
|
+
prompt: query,
|
|
85
|
+
system: join(
|
|
86
|
+
Template.process(PROMPT, { entityExtraction }),
|
|
87
|
+
instructions && `<instructions>${instructions}</instructions>`,
|
|
88
|
+
),
|
|
89
|
+
toolkit,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
const objects = yield* Effect.forEach(objectDXNs, (dxn) => Database.resolve(dxn)).pipe(
|
|
93
|
+
Effect.map(Array.map((obj) => Entity.toJSON(obj))),
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
return {
|
|
97
|
+
document: extractLastTextBlock(result),
|
|
98
|
+
objects,
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
Effect.provide(
|
|
102
|
+
Layer.mergeAll(
|
|
103
|
+
AiService.model('@anthropic/claude-sonnet-4-0'),
|
|
104
|
+
ToolExecutionServices,
|
|
105
|
+
Trace.writerLayerNoop,
|
|
106
|
+
).pipe(Layer.provide(OpaqueToolkit.providerEmpty)),
|
|
107
|
+
),
|
|
108
|
+
),
|
|
109
|
+
),
|
|
110
|
+
Operation.opaqueHandler,
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
// TODO(burdon): Factor out.
|
|
114
|
+
const join = (...strings: (string | undefined)[]) => strings.filter(Boolean).join('\n\n');
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Extracts the last text block from the result.
|
|
118
|
+
* Skips citations.
|
|
119
|
+
*/
|
|
120
|
+
// TODO(burdon): Factor out.
|
|
121
|
+
const extractLastTextBlock = (result: Message.Message[]) => {
|
|
122
|
+
return Function.pipe(
|
|
123
|
+
result,
|
|
124
|
+
Array.last,
|
|
125
|
+
Option.map(
|
|
126
|
+
Function.flow(
|
|
127
|
+
(_: Message.Message) => _.blocks,
|
|
128
|
+
Array.reverse,
|
|
129
|
+
Array.dropWhile((_: any) => _._tag === 'stats'),
|
|
130
|
+
Array.takeWhile((_: any) => _._tag === 'text'),
|
|
131
|
+
Array.reverse,
|
|
132
|
+
Array.map((_: any) => _.text),
|
|
133
|
+
Array.reduce('', String.concat),
|
|
134
|
+
),
|
|
135
|
+
),
|
|
136
|
+
Option.getOrElse(() => ''),
|
|
137
|
+
);
|
|
138
|
+
};
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export
|
|
5
|
+
export { default as ResearchBlueprint } from './blueprint';
|
|
6
|
+
export { Research, DocumentCreate, ResearchHandlers } from './functions';
|
|
7
|
+
export * from './types';
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as Layer from 'effect/Layer';
|
|
7
|
+
import * as Schema from 'effect/Schema';
|
|
8
|
+
|
|
9
|
+
import { Database, Feed, Migration, Obj, Query, Ref, Type } from '@dxos/echo';
|
|
10
|
+
import { Queue } from '@dxos/echo-db';
|
|
11
|
+
import { SystemTypeAnnotation } from '@dxos/echo/internal';
|
|
12
|
+
import { ContextQueueService, QueueService } from '@dxos/functions';
|
|
13
|
+
|
|
14
|
+
/** @deprecated Use ResearchGraph instead. */
|
|
15
|
+
export const LegacyResearchGraph = Schema.Struct({
|
|
16
|
+
queue: Ref.Ref(Queue),
|
|
17
|
+
}).pipe(
|
|
18
|
+
Type.object({
|
|
19
|
+
typename: 'org.dxos.type.research-graph',
|
|
20
|
+
version: '0.1.0',
|
|
21
|
+
}),
|
|
22
|
+
SystemTypeAnnotation.set(true),
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
export interface LegacyResearchGraph extends Schema.Schema.Type<typeof LegacyResearchGraph> {}
|
|
26
|
+
|
|
27
|
+
/** @deprecated Migration target of LegacyResearchGraph; migrated to ResearchGraph (v0.2.0) with feed ref. */
|
|
28
|
+
export const ResearchGraphV1 = Schema.Struct({
|
|
29
|
+
queue: Ref.Ref(Queue),
|
|
30
|
+
}).pipe(
|
|
31
|
+
Type.object({
|
|
32
|
+
typename: 'org.dxos.type.researchGraph',
|
|
33
|
+
version: '0.1.0',
|
|
34
|
+
}),
|
|
35
|
+
SystemTypeAnnotation.set(true),
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
export interface ResearchGraphV1 extends Schema.Schema.Type<typeof ResearchGraphV1> {}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Container for a set of ephemeral research results.
|
|
42
|
+
*/
|
|
43
|
+
export const ResearchGraph = Schema.Struct({
|
|
44
|
+
queue: Ref.Ref(Feed.Feed),
|
|
45
|
+
}).pipe(
|
|
46
|
+
Type.object({
|
|
47
|
+
typename: 'org.dxos.type.researchGraph',
|
|
48
|
+
version: '0.2.0',
|
|
49
|
+
}),
|
|
50
|
+
SystemTypeAnnotation.set(true),
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
export interface ResearchGraph extends Schema.Schema.Type<typeof ResearchGraph> {}
|
|
54
|
+
|
|
55
|
+
export const create: () => Effect.Effect<ResearchGraph, never, Database.Service | QueueService> = Effect.fn(
|
|
56
|
+
'createResearchGraph',
|
|
57
|
+
)(function* () {
|
|
58
|
+
const feed = yield* Database.add(Feed.make());
|
|
59
|
+
return yield* Database.add(Obj.make(ResearchGraph, { queue: Ref.make(feed) }));
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
export const query: () => Effect.Effect<ResearchGraph | undefined, never, Database.Service> = Effect.fn(
|
|
63
|
+
'queryResearchGraph',
|
|
64
|
+
)(function* () {
|
|
65
|
+
const objects = yield* Database.runQuery(Query.type(ResearchGraph));
|
|
66
|
+
return objects.at(0);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
export const contextQueueLayer = Layer.unwrapEffect(
|
|
70
|
+
Effect.gen(function* () {
|
|
71
|
+
const researchGraph = (yield* query()) ?? (yield* create());
|
|
72
|
+
const researchFeed = yield* Database.load(researchGraph.queue);
|
|
73
|
+
const feedDxn = Feed.getQueueDxn(researchFeed);
|
|
74
|
+
if (!feedDxn) {
|
|
75
|
+
throw new Error('ResearchGraph feed must be stored in a space');
|
|
76
|
+
}
|
|
77
|
+
const { queues } = yield* QueueService;
|
|
78
|
+
return ContextQueueService.layer(queues.get(feedDxn));
|
|
79
|
+
}),
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
export const migrations = [
|
|
83
|
+
Migration.define({
|
|
84
|
+
from: ResearchGraphV1,
|
|
85
|
+
to: ResearchGraph,
|
|
86
|
+
transform: async (from, { db }) => {
|
|
87
|
+
const feed = Feed.unsafeFromQueueDXN(from.queue.dxn);
|
|
88
|
+
const existing = db.getObjectById<Feed.Feed>(feed.id);
|
|
89
|
+
const dbFeed = existing ?? db.add(feed);
|
|
90
|
+
return {
|
|
91
|
+
queue: Ref.make(dbFeed),
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
onMigration: async () => {},
|
|
95
|
+
}),
|
|
96
|
+
];
|
|
@@ -1,26 +1,32 @@
|
|
|
1
1
|
//
|
|
2
|
-
// Copyright
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Type } from '@dxos/echo';
|
|
6
6
|
import { Text } from '@dxos/schema';
|
|
7
|
-
import { Event, HasConnection, HasRelationship, LegacyOrganization, LegacyPerson,
|
|
7
|
+
import { Event, HasConnection, HasRelationship, LegacyOrganization, LegacyPerson, Pipeline, Task } from '@dxos/types';
|
|
8
|
+
|
|
9
|
+
export * as ResearchGraph from './ResearchGraph';
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
12
|
* Data types for research.
|
|
11
13
|
*/
|
|
12
|
-
|
|
14
|
+
// TODO(burdon): This should not be hardcoded.
|
|
15
|
+
export const ResearchDataTypes: Type.AnyEntity[] = [
|
|
13
16
|
// Objects
|
|
14
17
|
Event.Event,
|
|
15
|
-
LegacyOrganization,
|
|
16
18
|
Task.Task,
|
|
17
19
|
Text.Text,
|
|
18
20
|
|
|
19
|
-
// Relations
|
|
20
21
|
// TODO(wittjosiah): Until views (e.g., Table) support relations this needs to be expressed via organization ref.
|
|
21
22
|
// Employer.Employer,
|
|
23
|
+
// Organization.Organization,
|
|
22
24
|
LegacyPerson,
|
|
23
|
-
|
|
25
|
+
LegacyOrganization,
|
|
26
|
+
|
|
27
|
+
Pipeline.Pipeline,
|
|
28
|
+
|
|
29
|
+
// Relations
|
|
24
30
|
HasRelationship.HasRelationship,
|
|
25
31
|
HasConnection.HasConnection,
|
|
26
32
|
];
|
|
@@ -2,27 +2,39 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import * as
|
|
5
|
+
import * as Arr from 'effect/Array';
|
|
6
6
|
import * as Effect from 'effect/Effect';
|
|
7
|
+
import { pipe } from 'effect/Function';
|
|
7
8
|
|
|
8
9
|
import { ConsolePrinter } from '@dxos/ai';
|
|
9
|
-
import { type
|
|
10
|
+
import { AiContextService, type AiSession, type AiSessionRunProps, GenerationObserver } from '@dxos/assistant';
|
|
11
|
+
import type { Blueprint } from '@dxos/blueprints';
|
|
12
|
+
import { Database, Ref } from '@dxos/echo';
|
|
10
13
|
import { log } from '@dxos/log';
|
|
11
14
|
|
|
12
|
-
export type TestStep = Pick<
|
|
15
|
+
export type TestStep = Pick<AiSessionRunProps, 'prompt' | 'system'> & {
|
|
13
16
|
test?: () => Promise<void>;
|
|
14
17
|
};
|
|
15
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Blueprint definition type for testing.
|
|
21
|
+
* Mirrors AppCapabilities.BlueprintDefinition to avoid circular dependency with app-toolkit.
|
|
22
|
+
*/
|
|
23
|
+
export interface BlueprintDefinition {
|
|
24
|
+
key: string;
|
|
25
|
+
make: () => Blueprint.Blueprint;
|
|
26
|
+
}
|
|
27
|
+
|
|
16
28
|
/**
|
|
17
29
|
* Runs the prompt steps, calling the test function after each step.
|
|
18
30
|
*/
|
|
19
|
-
export const runSteps = Effect.fn(function* (
|
|
31
|
+
export const runSteps = Effect.fn(function* (session: AiSession, steps: TestStep[]) {
|
|
20
32
|
for (const { test, ...props } of steps) {
|
|
21
|
-
yield*
|
|
33
|
+
yield* session.createRequest({
|
|
22
34
|
...props,
|
|
23
35
|
observer: GenerationObserver.fromPrinter(new ConsolePrinter({ mode: 'json' })),
|
|
24
36
|
});
|
|
25
|
-
const messages = yield* Effect.promise(() =>
|
|
37
|
+
const messages = yield* Effect.promise(() => session.getHistory());
|
|
26
38
|
log.info('conversation', { messages });
|
|
27
39
|
if (test) {
|
|
28
40
|
yield* Effect.promise(() => test());
|
|
@@ -30,5 +42,17 @@ export const runSteps = Effect.fn(function* (conversation: AiConversation, steps
|
|
|
30
42
|
}
|
|
31
43
|
});
|
|
32
44
|
|
|
33
|
-
|
|
34
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Binds blueprints from the blueprint definitions.
|
|
47
|
+
*/
|
|
48
|
+
// TODO(dmaretskyi): Potentially the agent will auto-bind the blueprints.
|
|
49
|
+
export const addBlueprints = Effect.fnUntraced(function* (blueprints: BlueprintDefinition[]) {
|
|
50
|
+
yield* AiContextService.bindContext({
|
|
51
|
+
blueprints: yield* pipe(
|
|
52
|
+
blueprints,
|
|
53
|
+
Arr.map((blueprint) => blueprint.make()),
|
|
54
|
+
Effect.forEach(Database.add),
|
|
55
|
+
Effect.map(Arr.map(Ref.make)),
|
|
56
|
+
),
|
|
57
|
+
});
|
|
58
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"conversations":[{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[]},"prompt":{"content":[{"role":"system","content":"## Blueprints Definitions\n\n<blueprint>\n \n</blueprint>","options":{}},{"role":"user","content":"What is the capital of France? Make sure to use the web search tool.","options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01MTp3XGFa5mCTwxcbUeiCC5","modelId":"claude-opus-4-6","timestamp":"2026-04-02T12:23:07.095Z","metadata":{}},{"type":"reasoning-start","id":"0","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"The user is asking me","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" to use a web search tool, but I don't have access to any web search tool. I should answer","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" the question with my knowledge and let them know I don't have a","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" web search tool available.","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"","metadata":{"anthropic":{"type":"thinking","signature":"EoYDClkIDBgCKkB+92OtgFRdK3OHRPpOX3m9Lf21U3GnbpSXGUpi0XWmPc/jKk7wdGMRSPcv54eIb2SNgV2YX5g+4Funh9aarTbwMg9jbGF1ZGUtb3B1cy00LTY4ABIMOUnE/5GT+lFLYkV7GgzswltjKLPX7tuVeQ4iMOSrT5QvD/Act7VYSWdM/pROVUZyJmRtOnip5WwLb98T35SZUAnGi2EYtB7TXExwbyraAdpL4JQHERcEymb+cQMgFjaKTesQU50ZiiXTpG1wPqHPGqjns2KgXXZ8BaFf7RBeUs8wFgzXXX3LhpivIzuIERg1Zb4+rrgtaKExofgmE9khDikom7W7qhzHMXxrSefhis/5NgLtiKUSA8YfNhEM76fCHoj1Uc5H4jMbBuz0/+skcJfdWVPJf5JGZ59m1JJcJ38u/ZrrCmnQj7P1PYSVvvCfNhLlphMc1s9+lk1k3f8td3YA5LpGlCNICchJwH9zTc30LWssoqOsoczXyWKoxkVY84dAp+4eo4NlGAE="}}},{"type":"reasoning-end","id":"0","metadata":{}},{"type":"text-start","id":"1","metadata":{}},{"type":"text-delta","id":"1","delta":"The capital of France is **Paris**.\n\nHowever, I want to be transparent with","metadata":{}},{"type":"text-delta","id":"1","delta":" you: I don't currently have access to a web search tool, so I'm unable to perform a web search as you requested","metadata":{}},{"type":"text-delta","id":"1","delta":". This answer is based on my training knowledge. Paris has been the capital of France for","metadata":{}},{"type":"text-delta","id":"1","delta":" centuries and serves as the country's political, economic, and cultural center.\n\nIf you need verified","metadata":{}},{"type":"text-delta","id":"1","delta":", real-time information, I'd recommend checking a search engine directly.","metadata":{}},{"type":"text-end","id":"1","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":70,"outputTokens":153,"totalTokens":223},"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":70,"output_tokens":5,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[{"name":"fetch-web-page","description":"Fetches the content of a web page and returns the HTML. \nUse this to get the content of a web page.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL of the web page to fetch."}},"additionalProperties":false}},{"name":"AnthropicWebSearch","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"## Blueprints Definitions\n\n<blueprint>\n \n</blueprint>","options":{}},{"role":"user","content":"What is the capital of France? Make sure to use the web search tool.","options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01V2V2wEiRd7WE6QAY3kXDZo","modelId":"claude-opus-4-6","timestamp":"2026-04-02T12:34:13.269Z","metadata":{}},{"type":"reasoning-start","id":"0","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"The user wants","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" me to search for the capital of France.","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"","metadata":{"anthropic":{"type":"thinking","signature":"EvEBClkIDBgCKkB1nvlMwE8ieYygBaU+utJJan6F9egjhfPCfB1Sb7olJHFKh2VcCksxZYI/2+O679Sy95vMNzMOXIPrDctYkhJbMg9jbGF1ZGUtb3B1cy00LTY4ABIMSnUQ+0uBJBcyWJT+Ggy5qbaCgY0llLR01M8iMNyZd4ym/mq5pecfOK0y09OTqU1t1NsaeCz5vrz8aznLs96HEDMKaeYc29EJDnjdDCpGSaSJ+2NaLVXKaz16XVEAfnISydxp/u9U11KH7vHTYX1yTPC3cXtH6QyP7wq8CNYCStxfR7aqeTgEiXHd7rWs3F2OIjAa+xgB"}}},{"type":"reasoning-end","id":"0","metadata":{}},{"type":"tool-params-start","id":"srvtoolu_013hMh6yhtcNMPJXbL2GztLF","name":"AnthropicWebSearch","providerName":"web_search","providerExecuted":true,"metadata":{}},{"type":"tool-params-delta","id":"srvtoolu_013hMh6yhtcNMPJXbL2GztLF","delta":"","metadata":{}},{"type":"tool-params-delta","id":"srvtoolu_013hMh6yhtcNMPJXbL2GztLF","delta":"{\"query\": ","metadata":{}},{"type":"tool-params-delta","id":"srvtoolu_013hMh6yhtcNMPJXbL2GztLF","delta":"\"capital of","metadata":{}},{"type":"tool-params-delta","id":"srvtoolu_013hMh6yhtcNMPJXbL2GztLF","delta":" Fr","metadata":{}},{"type":"tool-params-delta","id":"srvtoolu_013hMh6yhtcNMPJXbL2GztLF","delta":"ance\"}","metadata":{}},{"type":"tool-params-end","id":"srvtoolu_013hMh6yhtcNMPJXbL2GztLF","metadata":{}},{"id":"srvtoolu_013hMh6yhtcNMPJXbL2GztLF","type":"tool-result","providerName":"web_search","isFailure":false,"name":"AnthropicWebSearch","result":[{"encrypted_content":"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","page_age":"2 days ago","title":"Paris - Wikipedia","type":"web_search_result","url":"https://en.wikipedia.org/wiki/Paris"},{"encrypted_content":"EoAICioIDhgCIiRlOTk3NGY0Mi0xMmMzLTRlYWUtOTA5OS01OGNiNGE1MzQyY2YSDDa0z6V1op1ydTzwKBoMyUSIwCkZbn+9WTJbIjAhgZ672t4vnUkv09Vd+UzGrNV5V2R92bSqPsOaeJwqk/98vEZDgdM+bgfJf0I1rOAqgwc9PFxhLnWy8foDplyOZDCscZnwGW/gsdYveCuBmdUrHQ94TmOpO/EuDL+U/JvnioNXN6UGTuQa6NEGaWXwPc+jlr0pyZ6m0raJBcFRt4bahst9RRRAjKqIEmA2i/nlq3np9MN9N0Nx33JgqnmBDdwsds3V0g+Y/yNAPxopjI/sjAWew4m6DdmPMYNZTVUD61x+RaMh7t9hrjCmOUkTxuqlyjKHMkH3QzXzAq432aquG9ynVnNWxhjeakWK0YYbTNEE/9AT5fs55mho00M4WDejCWmXjD9Y9jAhB3n1eF7nmkNBfqWZFhvCD/YdEnwlpuIQf0mlkUax4kSoG1vj0qgfGWwQ+7rHi3ppJrN/zqCnlCk0u5zKzfOC1jrqDGuIbafUpBIJqSvDY/VwOcdLmPMkGZ5xxU1BANCcXAc3za/htZCX+vxLSITR5u60tXB0T6Lg5Ucs/9sAKX/Der7PbSjC1Ie39jBOQy8War7uxiZ209QuYeMx3o5FygtVirKr795ZwXVoJwVFVkqR15DDR59Ep7bQodqQTlcAMQ4psgb2wyTA3+ffprhmbgBlOHgOQaHCyAAmr244F8TR+OQhnlm1AjDjz/s4yYdenYV9dk5VsJCUmZLUtl8iNSUwst4U9cBD0K901SS9uw7jpXC3T+N1e+qmY5zbOn8Whdj+X5YIJSt1FwP60Ri3vryxraN5gNMFtPSeeI64x6ooz55szSOy6pYC8urteFTKsPUzYunhpQstsQDMBCd9aO1XRqEBMrRs9L9U3gKEZO+VtkoOKMAslL6I9BWxIVqHfP3EZy4XZ6KZEMdyv+F6awV6jI9+tUFzg7XSNZEUTmhxtbum1LeBXSjodOxB4ZMh+rERg02Ons5h9GqE04XaEuIqs4XB/1E5liN1UijxqSSm/I+FqM4AaKtQ1CqWnqKglpWEL0SIaFeWsyL9YmEydDhOSTF052FT/RghI5sj/8cLqFnvz5Ltt7XZlGPj7lN5ile5es+mZZkeSbRuj3ORkTBwywDW69B66OqbIT2O9q6y4AeISXdKrEqlyGCZWy2+n3XY8SkkL+du485a3pZ8tsGqp/AE4lFsTQMo8KZfu/UHsFrhosg1oFnKbzYqq6sqSvN82na76OIt6Xpb4bcIcS3GpaKaSP7H3faDWh8t0GB1b56HO78tjSLME7YBBmh9y4e55EBx3I4SwxgD","title":"Paris facts: the capital of France in history","type":"web_search_result","url":"https://home.adelphi.edu/~ca19535/page%204.html"},{"encrypted_content":"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","page_age":"3 days ago","title":"France | History, Maps, Flag, Population, Cities, Capital, & Facts | Britannica","type":"web_search_result","url":"https://www.britannica.com/place/France"},{"encrypted_content":"EsQDCioIDhgCIiRlOTk3NGY0Mi0xMmMzLTRlYWUtOTA5OS01OGNiNGE1MzQyY2YSDG21UOYyoPTU5VuHzBoM7eZN2D/f8SWfy9pXIjBEbF+jj+X2FqIoFFya8Wr8AOSQYk3h9dFzw9S6885VwXZSBPQLYx8ISG01ntYK+zgqxwL3J1WN8hxXKxK/1wjvHwCkmPipwODlmRH+s3dVknQ8GuKPcZFMF7o8LfS5rv938eBZh2SYLS8qkfCxXW9l9ZQOMG7z8Rcz7g47XqSJ7+YQB6wXHkmwK/cmVQxTh7a6a3LritpsiVWeTWvVzh1SPOi7MgNwwdMSWGqDXK90cKGnDmrfhWavPyc5HnX7//efTC720GnZUyx/3+2rSw40DYeIqSMNdUGI+I9N38fm0tjOZ0Tp/ddaellR0Uj9SBJFxLHfCHSCM9djgIWj6KeCkHBfNBw6J7GbTLvqPYsiQ81sBVxlpKEVCe+TM/Dz878XQiJUBhjZxQrNpvG7NODz/dCB7AZ4gprDk3w0hqtKp1ecu8DDlmD14orkMdUQj5mpiDn6TY17JuPKd1z8iyRsXYLNkfbz3PBViTV9lbWmF6xrZsvYPZjyQvgYAw==","page_age":"September 16, 2025","title":"Paris, France - Intercultural City - Intercultural Cities Programme - www.coe.int","type":"web_search_result","url":"https://www.coe.int/en/web/interculturalcities/paris"},{"encrypted_content":"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","page_age":"3 weeks ago","title":"List of capitals of France - Wikipedia","type":"web_search_result","url":"https://en.wikipedia.org/wiki/List_of_capitals_of_France"},{"encrypted_content":"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","page_age":"December 1, 2022","title":"Discover the city of Paris | Paris the capital city of France","type":"web_search_result","url":"https://www.cia-france.com/french-kids-teenage-courses/paris-school/visit-paris"},{"encrypted_content":"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","page_age":"6 hours ago","title":"France - Wikipedia","type":"web_search_result","url":"https://en.wikipedia.org/wiki/France"},{"encrypted_content":"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","title":"Paris, France | Geography and Cartography | Research Starters | EBSCO Research","type":"web_search_result","url":"https://www.ebsco.com/research-starters/geography-and-cartography/paris-france"},{"encrypted_content":"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","page_age":"3 days ago","title":"Paris | Definition, Map, Population, Facts, & History | Britannica","type":"web_search_result","url":"https://www.britannica.com/place/Paris"},{"encrypted_content":"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","page_age":"June 29, 2018","title":"What is the Capital of France?","type":"web_search_result","url":"https://www.worldatlas.com/articles/what-is-the-capital-of-france.html"}],"providerExecuted":true,"metadata":{}},{"type":"text-start","id":"3","metadata":{}},{"type":"text-delta","id":"3","delta":"The","metadata":{}},{"type":"text-delta","id":"3","delta":" capital of France is **Paris**. ","metadata":{}},{"type":"text-end","id":"3","metadata":{}},{"type":"text-start","id":"4","metadata":{}},{"type":"source","sourceType":"url","id":"id_SsXU4ujxOB5MK1YM","url":"https://en.wikipedia.org/wiki/Paris","title":"Paris - Wikipedia","metadata":{"anthropic":{"source":"url","citedText":"Paris is the capital and largest city of France, with an estimated city population of 2.04 million in an area of 105.4 km2 (40.7 sq mi), and a metropo...","encryptedIndex":"Eo8BCioIDhgCIiRlOTk3NGY0Mi0xMmMzLTRlYWUtOTA5OS01OGNiNGE1MzQyY2YSDO8Tle7Ez7VRfk5RMxoMB5t+FvnJ6GldY1PGIjCgisWk6Q4aFJjybqXDDSlICzVLsZp5eiUGP63uaVkC7Kkv7+g9YmQtwakPa1oomZgqE20VKpK0vbB51R3xynGQjTAaXe4YBA=="}}},{"type":"text-delta","id":"4","delta":"Paris is the capital and largest city of France, with an estimated","metadata":{}},{"type":"text-delta","id":"4","delta":" city population of 2.04 million and a metropolitan population of 13.2 million as of January","metadata":{}},{"type":"text-delta","id":"4","delta":" 2026.","metadata":{}},{"type":"text-end","id":"4","metadata":{}},{"type":"text-start","id":"5","metadata":{}},{"type":"text-delta","id":"5","delta":" ","metadata":{}},{"type":"text-end","id":"5","metadata":{}},{"type":"text-start","id":"6","metadata":{}},{"type":"source","sourceType":"url","id":"id_pHIRmqUIalwrl1QT","url":"https://www.coe.int/en/web/interculturalcities/paris","title":"Paris, France - Intercultural City - Intercultural Cities Programme - www.coe.int","metadata":{"anthropic":{"source":"url","citedText":"Situated on the Seine River, in the north of the country, it is in the centre of the Île-de-France region, also known as the région parisienne, "...","encryptedIndex":"Eo8BCioIDhgCIiRlOTk3NGY0Mi0xMmMzLTRlYWUtOTA5OS01OGNiNGE1MzQyY2YSDHJTMD7JaqXPQAEpmhoMyP0hWifAQsJttwVuIjCRbf89yRYjhlC/XDMMNr0Dg/dkifQ56CuVnIRPgTKuJbcKOec4+fLFjph3A8jfWVQqE2YaExJtFpDNQxUc1HQLpNrzDUcYBA=="}}},{"type":"text-delta","id":"6","delta":"It is situated on the Seine River,","metadata":{}},{"type":"text-delta","id":"6","delta":" in the north of the country, in the centre of the Île-de-France region.","metadata":{}},{"type":"text-end","id":"6","metadata":{}},{"type":"text-start","id":"7","metadata":{}},{"type":"text-delta","id":"7","delta":"\n\n","metadata":{}},{"type":"text-end","id":"7","metadata":{}},{"type":"text-start","id":"8","metadata":{}},{"type":"source","sourceType":"url","id":"id_ZSmMUA5UWje8dxis","url":"https://en.wikipedia.org/wiki/List_of_capitals_of_France","title":"List of capitals of France - Wikipedia","metadata":{"anthropic":{"source":"url","citedText":"The capital of France has been Paris since its liberation in 1944. ","encryptedIndex":"Eo8BCioIDhgCIiRlOTk3NGY0Mi0xMmMzLTRlYWUtOTA5OS01OGNiNGE1MzQyY2YSDD9AjVPqzqSGNhV5IBoMtEdSMuH6OL9FQrkLIjAg4tL2ivVcPcLeZi7K3DbvwbBr269Kf8b9EY/UCfxyr/SEQaRMMiyiIPSO4h1M1T4qE7T/PAjH7YTgw6L4KmDzIZR5ceUYBA=="}}},{"type":"text-delta","id":"8","delta":"Paris has been the capital of France since its liberation in 1944","metadata":{}},{"type":"text-end","id":"8","metadata":{}},{"type":"text-start","id":"9","metadata":{}},{"type":"text-delta","id":"9","delta":", though","metadata":{}},{"type":"text-delta","id":"9","delta":" its history as the French capital goes back much further. ","metadata":{}},{"type":"text-end","id":"9","metadata":{}},{"type":"text-start","id":"10","metadata":{}},{"type":"source","sourceType":"url","id":"id_67cv1XrcuSaNV48x","url":"https://home.adelphi.edu/~ca19535/page%204.html","title":"Paris facts: the capital of France in history","metadata":{"anthropic":{"source":"url","citedText":"Paris first became the capital of France in 508 under King Clovis. ","encryptedIndex":"Eo8BCioIDhgCIiRlOTk3NGY0Mi0xMmMzLTRlYWUtOTA5OS01OGNiNGE1MzQyY2YSDB2g1/JfLWIqvRGBchoMtgQNbsxi0ydP/anNIjDt8pAiWwZ6BFr+aj9eq6Q09k46FIKoFAvNSPdUGHyij2biVXnvWc5pt97daDCdPJsqE15gUUTVxXj/jNWQ73Ln2KHv29oYBA=="}}},{"type":"text-delta","id":"10","delta":"Paris first became the capital of France in 508 under King Clovis.","metadata":{}},{"type":"text-end","id":"10","metadata":{}},{"type":"text-start","id":"11","metadata":{}},{"type":"text-delta","id":"11","delta":"\n\n","metadata":{}},{"type":"text-end","id":"11","metadata":{}},{"type":"text-start","id":"12","metadata":{}},{"type":"source","sourceType":"url","id":"id_vJS0lQS6LtygsNtV","url":"https://www.britannica.com/place/France","title":"France | History, Maps, Flag, Population, Cities, Capital, & Facts | Britannica","metadata":{"anthropic":{"source":"url","citedText":"The capital and by far the most important city of France is Paris, one of the world’s preeminent cultural and commercial centres. ","encryptedIndex":"Eo8BCioIDhgCIiRlOTk3NGY0Mi0xMmMzLTRlYWUtOTA5OS01OGNiNGE1MzQyY2YSDMIRr+EmnTQ0+JOmERoMdE+q+abQpAKQ8lDNIjAo0TqrhNwH2w5kcOslA4H+LTZhrTdmVuGEShnPsr2GYo2vOXpCewoVnpCp86XRe60qE6MUYYfnf2NEFDuOGLyuqORiTW0YBA=="}}},{"type":"text-delta","id":"12","delta":"Paris is the most important city of France and one of the world's pre","metadata":{}},{"type":"text-delta","id":"12","delta":"eminent cultural and commercial centres.","metadata":{}},{"type":"text-end","id":"12","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":2374,"outputTokens":304,"totalTokens":2678},"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":2374,"output_tokens":3,"server_tool_use":null,"service_tier":"standard"}}}}]}]}
|