@dxos/assistant-toolkit 0.10.0 → 0.11.0
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/chunk-Chat.mjs +144 -0
- package/dist/lib/chunk-Chat.mjs.map +1 -0
- package/dist/lib/chunk-Memory.mjs +19 -0
- package/dist/lib/chunk-Memory.mjs.map +1 -0
- package/dist/lib/{neutral/agent-rules-KWCBKJ5W.mjs → chunk-agent-rules.mjs} +8 -15
- package/dist/lib/chunk-agent-rules.mjs.map +1 -0
- package/dist/lib/chunk-agent.mjs +45 -0
- package/dist/lib/chunk-agent.mjs.map +1 -0
- package/dist/lib/chunk-artifact-add.mjs +31 -0
- package/dist/lib/chunk-artifact-add.mjs.map +1 -0
- package/dist/lib/chunk-artifact-list.mjs +23 -0
- package/dist/lib/chunk-artifact-list.mjs.map +1 -0
- package/dist/lib/chunk-context-add.mjs +16 -0
- package/dist/lib/chunk-context-add.mjs.map +1 -0
- package/dist/lib/chunk-context-remove.mjs +16 -0
- package/dist/lib/chunk-context-remove.mjs.map +1 -0
- package/dist/lib/chunk-create-agent.mjs +23 -0
- package/dist/lib/chunk-create-agent.mjs.map +1 -0
- package/dist/lib/chunk-definitions.mjs +52 -0
- package/dist/lib/chunk-definitions.mjs.map +1 -0
- package/dist/lib/chunk-definitions2.mjs +56 -0
- package/dist/lib/chunk-definitions2.mjs.map +1 -0
- package/dist/lib/chunk-definitions3.mjs +24 -0
- package/dist/lib/chunk-definitions3.mjs.map +1 -0
- package/dist/lib/chunk-delete.mjs +14 -0
- package/dist/lib/chunk-delete.mjs.map +1 -0
- package/dist/lib/chunk-enable-skills.mjs +39 -0
- package/dist/lib/chunk-enable-skills.mjs.map +1 -0
- package/dist/lib/chunk-fetch-messages.mjs +113 -0
- package/dist/lib/chunk-fetch-messages.mjs.map +1 -0
- package/dist/lib/chunk-fetch.mjs +20 -0
- package/dist/lib/chunk-fetch.mjs.map +1 -0
- package/dist/lib/chunk-get-context.mjs +55 -0
- package/dist/lib/chunk-get-context.mjs.map +1 -0
- package/dist/lib/chunk-get-current-date.mjs +17 -0
- package/dist/lib/chunk-get-current-date.mjs.map +1 -0
- package/dist/lib/chunk-load.mjs +13 -0
- package/dist/lib/chunk-load.mjs.map +1 -0
- package/dist/lib/chunk-object-create.mjs +42 -0
- package/dist/lib/chunk-object-create.mjs.map +1 -0
- package/dist/lib/chunk-object-delete.mjs +14 -0
- package/dist/lib/chunk-object-delete.mjs.map +1 -0
- package/dist/lib/chunk-object-update.mjs +19 -0
- package/dist/lib/chunk-object-update.mjs.map +1 -0
- package/dist/lib/chunk-operations.mjs +714 -0
- package/dist/lib/chunk-operations.mjs.map +1 -0
- package/dist/lib/chunk-plan-reminder.mjs +80 -0
- package/dist/lib/chunk-plan-reminder.mjs.map +1 -0
- package/dist/lib/chunk-query-skills.mjs +12 -0
- package/dist/lib/chunk-query-skills.mjs.map +1 -0
- package/dist/lib/chunk-query.mjs +36 -0
- package/dist/lib/chunk-query.mjs.map +1 -0
- package/dist/lib/chunk-query2.mjs +18 -0
- package/dist/lib/chunk-query2.mjs.map +1 -0
- package/dist/lib/chunk-relation-create.mjs +41 -0
- package/dist/lib/chunk-relation-create.mjs.map +1 -0
- package/dist/lib/chunk-relation-delete.mjs +14 -0
- package/dist/lib/chunk-relation-delete.mjs.map +1 -0
- package/dist/lib/chunk-relay.mjs +76 -0
- package/dist/lib/chunk-relay.mjs.map +1 -0
- package/dist/lib/chunk-rolldown-runtime.mjs +13 -0
- package/dist/lib/chunk-run-instructions.mjs +145 -0
- package/dist/lib/chunk-run-instructions.mjs.map +1 -0
- package/dist/lib/chunk-save.mjs +17 -0
- package/dist/lib/chunk-save.mjs.map +1 -0
- package/dist/lib/chunk-schema-add.mjs +19 -0
- package/dist/lib/chunk-schema-add.mjs.map +1 -0
- package/dist/lib/chunk-schema-list.mjs +29 -0
- package/dist/lib/chunk-schema-list.mjs.map +1 -0
- package/dist/lib/chunk-set-alarm.mjs +55 -0
- package/dist/lib/chunk-set-alarm.mjs.map +1 -0
- package/dist/lib/chunk-sync-automation.mjs +130 -0
- package/dist/lib/chunk-sync-automation.mjs.map +1 -0
- package/dist/lib/chunk-sync-issues.mjs +127 -0
- package/dist/lib/chunk-sync-issues.mjs.map +1 -0
- package/dist/lib/chunk-sync.mjs +91 -0
- package/dist/lib/chunk-sync.mjs.map +1 -0
- package/dist/lib/chunk-tag-add.mjs +14 -0
- package/dist/lib/chunk-tag-add.mjs.map +1 -0
- package/dist/lib/chunk-tag-remove.mjs +14 -0
- package/dist/lib/chunk-tag-remove.mjs.map +1 -0
- package/dist/lib/chunk-types.mjs +198 -0
- package/dist/lib/chunk-types.mjs.map +1 -0
- package/dist/lib/chunk-update-tasks.mjs +34 -0
- package/dist/lib/chunk-update-tasks.mjs.map +1 -0
- package/dist/lib/index.mjs +614 -0
- package/dist/lib/index.mjs.map +1 -0
- package/dist/lib/testing.mjs +102 -0
- package/dist/lib/testing.mjs.map +1 -0
- package/dist/types/src/skills/agent/operations/definitions.d.ts +16 -46
- package/dist/types/src/skills/agent/operations/definitions.d.ts.map +1 -1
- package/dist/types/src/skills/agent/operations/get-context.test.d.ts +2 -0
- package/dist/types/src/skills/agent/operations/get-context.test.d.ts.map +1 -0
- package/dist/types/src/skills/agent/operations/index.d.ts.map +1 -1
- package/dist/types/src/skills/agent/operations/relay.d.ts +11 -0
- package/dist/types/src/skills/agent/operations/relay.d.ts.map +1 -0
- package/dist/types/src/skills/agent/operations/relay.test.d.ts +2 -0
- package/dist/types/src/skills/agent/operations/relay.test.d.ts.map +1 -0
- package/dist/types/src/skills/agent/skill.d.ts.map +1 -1
- package/dist/types/src/skills/agent-wizard/operations/definitions.d.ts +4 -1
- package/dist/types/src/skills/agent-wizard/operations/definitions.d.ts.map +1 -1
- package/dist/types/src/skills/agent-wizard/operations/sync-automation.d.ts +26 -0
- package/dist/types/src/skills/agent-wizard/operations/sync-automation.d.ts.map +1 -0
- package/dist/types/src/skills/agent-wizard/operations/sync-automation.test.d.ts +2 -0
- package/dist/types/src/skills/agent-wizard/operations/sync-automation.test.d.ts.map +1 -0
- package/dist/types/src/skills/agent-wizard/skill.d.ts.map +1 -1
- package/dist/types/src/skills/database/operations/context-add.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/context-add.test.d.ts.map +1 -0
- package/dist/types/src/skills/database/operations/context-remove.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/context-remove.test.d.ts.map +1 -0
- package/dist/types/src/skills/database/operations/definitions.d.ts +7 -2
- package/dist/types/src/skills/database/operations/definitions.d.ts.map +1 -1
- package/dist/types/src/skills/database/operations/load.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/load.test.d.ts.map +1 -0
- package/dist/types/src/skills/database/operations/object-create.d.ts +4 -1
- package/dist/types/src/skills/database/operations/object-create.d.ts.map +1 -1
- package/dist/types/src/skills/database/operations/object-create.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/object-create.test.d.ts.map +1 -0
- package/dist/types/src/skills/database/operations/object-delete.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/object-delete.test.d.ts.map +1 -0
- package/dist/types/src/skills/database/operations/object-update.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/object-update.test.d.ts.map +1 -0
- package/dist/types/src/skills/database/operations/query.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/query.test.d.ts.map +1 -0
- package/dist/types/src/skills/database/operations/relation-create.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/relation-create.test.d.ts.map +1 -0
- package/dist/types/src/skills/database/operations/schema-add.d.ts +3 -1
- package/dist/types/src/skills/database/operations/schema-add.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/schema-add.test.d.ts.map +1 -0
- package/dist/types/src/skills/database/operations/schema-list.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/schema-list.test.d.ts.map +1 -0
- package/dist/types/src/skills/database/operations/tag-add.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/tag-add.test.d.ts.map +1 -0
- package/dist/types/src/skills/database/operations/tag-remove.test.d.ts +2 -0
- package/dist/types/src/skills/database/operations/tag-remove.test.d.ts.map +1 -0
- package/dist/types/src/skills/delegation/operations/delegate-task.d.ts +6 -5
- package/dist/types/src/skills/delegation/operations/delegate-task.d.ts.map +1 -1
- package/dist/types/src/skills/index.d.ts +1 -0
- package/dist/types/src/skills/index.d.ts.map +1 -1
- package/dist/types/src/skills/linear/operations/sync-issues.d.ts.map +1 -1
- package/dist/types/src/skills/memory/operations/delete.test.d.ts +2 -0
- package/dist/types/src/skills/memory/operations/delete.test.d.ts.map +1 -0
- package/dist/types/src/skills/memory/operations/query.test.d.ts +2 -0
- package/dist/types/src/skills/memory/operations/query.test.d.ts.map +1 -0
- package/dist/types/src/skills/memory/operations/save.test.d.ts +2 -0
- package/dist/types/src/skills/memory/operations/save.test.d.ts.map +1 -0
- package/dist/types/src/skills/planning/operations/definitions.d.ts +1 -3
- package/dist/types/src/skills/planning/operations/definitions.d.ts.map +1 -1
- package/dist/types/src/skills/planning/operations/plan-reminder.d.ts +7 -6
- package/dist/types/src/skills/planning/operations/plan-reminder.d.ts.map +1 -1
- package/dist/types/src/skills/planning/operations/plan-reminder.test.d.ts +2 -0
- package/dist/types/src/skills/planning/operations/plan-reminder.test.d.ts.map +1 -0
- package/dist/types/src/skills/planning/operations/update-tasks.d.ts +3 -1
- package/dist/types/src/skills/planning/operations/update-tasks.d.ts.map +1 -1
- package/dist/types/src/skills/project/index.d.ts +3 -0
- package/dist/types/src/skills/project/index.d.ts.map +1 -0
- package/dist/types/src/skills/project/operations/artifact-add.d.ts +5 -0
- package/dist/types/src/skills/project/operations/artifact-add.d.ts.map +1 -0
- package/dist/types/src/skills/project/operations/artifact-list.d.ts +5 -0
- package/dist/types/src/skills/project/operations/artifact-list.d.ts.map +1 -0
- package/dist/types/src/skills/project/operations/definitions.d.ts +23 -0
- package/dist/types/src/skills/project/operations/definitions.d.ts.map +1 -0
- package/dist/types/src/skills/project/operations/index.d.ts +4 -0
- package/dist/types/src/skills/project/operations/index.d.ts.map +1 -0
- package/dist/types/src/skills/project/skill.d.ts +4 -0
- package/dist/types/src/skills/project/skill.d.ts.map +1 -0
- package/dist/types/src/skills/project/skill.test.d.ts.map +1 -0
- package/dist/types/src/skills/skill-manager/skill.d.ts.map +1 -1
- package/dist/types/src/supervisor/delegation-strategy.d.ts +5 -5
- package/dist/types/src/supervisor/delegation-strategy.d.ts.map +1 -1
- package/dist/types/src/supervisor/delegation-strategy.test.d.ts +2 -0
- package/dist/types/src/supervisor/delegation-strategy.test.d.ts.map +1 -0
- package/dist/types/src/sync/sync.test.d.ts +2 -0
- package/dist/types/src/sync/sync.test.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/operations.d.ts +7 -0
- package/dist/types/src/testing/operations.d.ts.map +1 -0
- package/dist/types/src/types/Agent.d.ts +28 -31
- package/dist/types/src/types/Agent.d.ts.map +1 -1
- package/dist/types/src/types/Chat.d.ts +28 -14
- package/dist/types/src/types/Chat.d.ts.map +1 -1
- package/dist/types/src/types/Chat.test.d.ts +2 -0
- package/dist/types/src/types/Chat.test.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -2
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +30 -29
- package/src/operations/run-instructions.test.ts +26 -34
- package/src/operations/skill-resolution.test.ts +6 -1
- package/src/skills/agent/operations/definitions.ts +18 -62
- package/src/skills/agent/operations/get-context.test.ts +81 -0
- package/src/skills/agent/operations/get-context.ts +9 -36
- package/src/skills/agent/operations/index.ts +1 -3
- package/src/skills/agent/operations/relay.test.ts +63 -0
- package/src/skills/agent/operations/relay.ts +124 -0
- package/src/skills/agent/skill.ts +3 -15
- package/src/skills/agent-wizard/operations/create-agent.ts +3 -3
- package/src/skills/agent-wizard/operations/definitions.ts +19 -4
- package/src/skills/agent-wizard/operations/index.ts +1 -1
- package/src/skills/agent-wizard/operations/sync-automation.test.ts +103 -0
- package/src/skills/agent-wizard/operations/sync-automation.ts +205 -0
- package/src/skills/agent-wizard/skill.ts +9 -10
- package/src/skills/alarm/skill.test.ts +2 -2
- package/src/skills/browser/skill.test.ts +4 -4
- package/src/skills/database/operations/context-add.test.ts +46 -0
- package/src/skills/database/operations/context-remove.test.ts +46 -0
- package/src/skills/database/operations/definitions.ts +23 -7
- package/src/skills/database/operations/load.test.ts +38 -0
- package/src/skills/database/operations/object-create.test.ts +116 -0
- package/src/skills/database/operations/object-create.ts +13 -2
- package/src/skills/database/operations/object-delete.test.ts +37 -0
- package/src/skills/database/operations/object-update.test.ts +39 -0
- package/src/skills/database/operations/query.test.ts +128 -0
- package/src/skills/database/operations/relation-create.test.ts +46 -0
- package/src/skills/database/operations/schema-add.test.ts +79 -0
- package/src/skills/database/operations/schema-list.test.ts +42 -0
- package/src/skills/database/operations/tag-add.test.ts +41 -0
- package/src/skills/database/operations/tag-remove.test.ts +43 -0
- package/src/skills/delegation/operations/delegate-task.test.ts +51 -36
- package/src/skills/delegation/operations/delegate-task.ts +31 -48
- package/src/skills/discord/operations/fetch-messages.test.ts +2 -2
- package/src/skills/github/operations/fetch-prs.ts +1 -1
- package/src/skills/index.ts +1 -0
- package/src/skills/linear/operations/linear.test.ts +1 -1
- package/src/skills/linear/operations/sync-issues.ts +6 -23
- package/src/skills/memory/operations/delete.test.ts +37 -0
- package/src/skills/memory/operations/query.test.ts +76 -0
- package/src/skills/memory/operations/save.test.ts +43 -0
- package/src/skills/planning/operations/definitions.ts +9 -6
- package/src/skills/planning/operations/plan-reminder.test.ts +123 -0
- package/src/skills/planning/operations/plan-reminder.ts +49 -31
- package/src/skills/planning/operations/update-tasks.md +23 -22
- package/src/skills/planning/operations/update-tasks.test.ts +31 -17
- package/src/skills/planning/operations/update-tasks.ts +17 -25
- package/src/skills/project/index.ts +6 -0
- package/src/skills/project/operations/artifact-add.ts +47 -0
- package/src/skills/project/operations/artifact-list.ts +41 -0
- package/src/skills/project/operations/definitions.ts +63 -0
- package/src/skills/project/operations/index.ts +12 -0
- package/src/skills/project/skill.test.ts +78 -0
- package/src/skills/project/skill.ts +42 -0
- package/src/skills/skill-manager/operations/definitions.ts +1 -1
- package/src/skills/skill-manager/skill.test.ts +1 -1
- package/src/skills/skill-manager/skill.ts +7 -5
- package/src/skills/websearch/skill.test.ts +2 -2
- package/src/supervisor/delegation-strategy.test.ts +129 -0
- package/src/supervisor/delegation-strategy.ts +92 -56
- package/src/sync/sync.test.ts +95 -0
- package/src/sync/sync.ts +5 -3
- package/src/testing/index.ts +1 -0
- package/src/testing/operations.ts +65 -0
- package/src/types/Agent.test.ts +36 -66
- package/src/types/Agent.ts +108 -137
- package/src/types/Chat.test.ts +234 -0
- package/src/types/Chat.ts +80 -26
- package/src/types/index.ts +1 -2
- package/dist/lib/neutral/add-artifact-5JNUYLCA.mjs +0 -24
- package/dist/lib/neutral/add-artifact-5JNUYLCA.mjs.map +0 -7
- package/dist/lib/neutral/agent-BFAYIBJI.mjs +0 -65
- package/dist/lib/neutral/agent-BFAYIBJI.mjs.map +0 -7
- package/dist/lib/neutral/agent-rules-KWCBKJ5W.mjs.map +0 -7
- package/dist/lib/neutral/chunk-3KA66YBF.mjs +0 -62
- package/dist/lib/neutral/chunk-3KA66YBF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-6SGNFL6I.mjs +0 -85
- package/dist/lib/neutral/chunk-6SGNFL6I.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BDTGFPM7.mjs +0 -113
- package/dist/lib/neutral/chunk-BDTGFPM7.mjs.map +0 -7
- package/dist/lib/neutral/chunk-EPQCDGIV.mjs +0 -27
- package/dist/lib/neutral/chunk-EPQCDGIV.mjs.map +0 -7
- package/dist/lib/neutral/chunk-H4W22FFJ.mjs +0 -232
- package/dist/lib/neutral/chunk-H4W22FFJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-JBTXZQ5G.mjs +0 -60
- package/dist/lib/neutral/chunk-JBTXZQ5G.mjs.map +0 -7
- package/dist/lib/neutral/chunk-JKOOA5OS.mjs +0 -97
- package/dist/lib/neutral/chunk-JKOOA5OS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-JTEBE7KA.mjs +0 -66
- package/dist/lib/neutral/chunk-JTEBE7KA.mjs.map +0 -7
- package/dist/lib/neutral/chunk-KLFXJ2Z3.mjs +0 -36
- package/dist/lib/neutral/chunk-KLFXJ2Z3.mjs.map +0 -7
- package/dist/lib/neutral/chunk-LBA5UOLF.mjs +0 -87
- package/dist/lib/neutral/chunk-LBA5UOLF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-LL3MOQUZ.mjs +0 -120
- package/dist/lib/neutral/chunk-LL3MOQUZ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-MFVIGJBW.mjs +0 -68
- package/dist/lib/neutral/chunk-MFVIGJBW.mjs.map +0 -7
- package/dist/lib/neutral/chunk-PBARVBNJ.mjs +0 -86
- package/dist/lib/neutral/chunk-PBARVBNJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-VJ5QBYM5.mjs +0 -61
- package/dist/lib/neutral/chunk-VJ5QBYM5.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YQSQRSXG.mjs +0 -367
- package/dist/lib/neutral/chunk-YQSQRSXG.mjs.map +0 -7
- package/dist/lib/neutral/chunk-Z2HFOZXK.mjs +0 -191
- package/dist/lib/neutral/chunk-Z2HFOZXK.mjs.map +0 -7
- package/dist/lib/neutral/context-add-DZTPB3FK.mjs +0 -22
- package/dist/lib/neutral/context-add-DZTPB3FK.mjs.map +0 -7
- package/dist/lib/neutral/context-remove-XSBOM4VJ.mjs +0 -22
- package/dist/lib/neutral/context-remove-XSBOM4VJ.mjs.map +0 -7
- package/dist/lib/neutral/create-agent-5WTOFIEK.mjs +0 -35
- package/dist/lib/neutral/create-agent-5WTOFIEK.mjs.map +0 -7
- package/dist/lib/neutral/definitions-VRR5OGXI.mjs +0 -17
- package/dist/lib/neutral/definitions-VRR5OGXI.mjs.map +0 -7
- package/dist/lib/neutral/delegate-task-UX64NK4M.mjs +0 -13
- package/dist/lib/neutral/delegate-task-UX64NK4M.mjs.map +0 -7
- package/dist/lib/neutral/delete-IU7HPU3K.mjs +0 -19
- package/dist/lib/neutral/delete-IU7HPU3K.mjs.map +0 -7
- package/dist/lib/neutral/enable-skills-FHEJXQVB.mjs +0 -47
- package/dist/lib/neutral/enable-skills-FHEJXQVB.mjs.map +0 -7
- package/dist/lib/neutral/fetch-5LY25EBR.mjs +0 -24
- package/dist/lib/neutral/fetch-5LY25EBR.mjs.map +0 -7
- package/dist/lib/neutral/fetch-messages-CQMDI36G.mjs +0 -139
- package/dist/lib/neutral/fetch-messages-CQMDI36G.mjs.map +0 -7
- package/dist/lib/neutral/get-context-Q4YY6DRV.mjs +0 -77
- package/dist/lib/neutral/get-context-Q4YY6DRV.mjs.map +0 -7
- package/dist/lib/neutral/get-current-date-JR5F7ZS3.mjs +0 -17
- package/dist/lib/neutral/get-current-date-JR5F7ZS3.mjs.map +0 -7
- package/dist/lib/neutral/index.mjs +0 -875
- package/dist/lib/neutral/index.mjs.map +0 -7
- package/dist/lib/neutral/load-S6HC5TGX.mjs +0 -17
- package/dist/lib/neutral/load-S6HC5TGX.mjs.map +0 -7
- package/dist/lib/neutral/meta.json +0 -1
- package/dist/lib/neutral/object-create-PVDQ62CG.mjs +0 -32
- package/dist/lib/neutral/object-create-PVDQ62CG.mjs.map +0 -7
- package/dist/lib/neutral/object-delete-3CSL6XI6.mjs +0 -18
- package/dist/lib/neutral/object-delete-3CSL6XI6.mjs.map +0 -7
- package/dist/lib/neutral/object-update-NIGMZINM.mjs +0 -28
- package/dist/lib/neutral/object-update-NIGMZINM.mjs.map +0 -7
- package/dist/lib/neutral/plan-reminder-N4X6JPBI.mjs +0 -88
- package/dist/lib/neutral/plan-reminder-N4X6JPBI.mjs.map +0 -7
- package/dist/lib/neutral/qualifier-5CIRZYX5.mjs +0 -91
- package/dist/lib/neutral/qualifier-5CIRZYX5.mjs.map +0 -7
- package/dist/lib/neutral/query-K4R7UHLU.mjs +0 -32
- package/dist/lib/neutral/query-K4R7UHLU.mjs.map +0 -7
- package/dist/lib/neutral/query-NCTCRYTD.mjs +0 -59
- package/dist/lib/neutral/query-NCTCRYTD.mjs.map +0 -7
- package/dist/lib/neutral/query-skills-7GQFSU4V.mjs +0 -17
- package/dist/lib/neutral/query-skills-7GQFSU4V.mjs.map +0 -7
- package/dist/lib/neutral/relation-create-QKXHTL7G.mjs +0 -34
- package/dist/lib/neutral/relation-create-QKXHTL7G.mjs.map +0 -7
- package/dist/lib/neutral/relation-delete-PDIWT2JX.mjs +0 -18
- package/dist/lib/neutral/relation-delete-PDIWT2JX.mjs.map +0 -7
- package/dist/lib/neutral/run-instructions-72ASH5EZ.mjs +0 -165
- package/dist/lib/neutral/run-instructions-72ASH5EZ.mjs.map +0 -7
- package/dist/lib/neutral/save-UYVRA4RS.mjs +0 -23
- package/dist/lib/neutral/save-UYVRA4RS.mjs.map +0 -7
- package/dist/lib/neutral/schema-add-5NOK2RWE.mjs +0 -25
- package/dist/lib/neutral/schema-add-5NOK2RWE.mjs.map +0 -7
- package/dist/lib/neutral/schema-list-BZUR5KMX.mjs +0 -37
- package/dist/lib/neutral/schema-list-BZUR5KMX.mjs.map +0 -7
- package/dist/lib/neutral/set-alarm-BD3NEYSU.mjs +0 -65
- package/dist/lib/neutral/set-alarm-BD3NEYSU.mjs.map +0 -7
- package/dist/lib/neutral/sync-issues-O76MCMD3.mjs +0 -166
- package/dist/lib/neutral/sync-issues-O76MCMD3.mjs.map +0 -7
- package/dist/lib/neutral/sync-triggers-YBTLPCUB.mjs +0 -138
- package/dist/lib/neutral/sync-triggers-YBTLPCUB.mjs.map +0 -7
- package/dist/lib/neutral/tag-add-L5WNOBYY.mjs +0 -18
- package/dist/lib/neutral/tag-add-L5WNOBYY.mjs.map +0 -7
- package/dist/lib/neutral/tag-remove-WV5RPE5W.mjs +0 -18
- package/dist/lib/neutral/tag-remove-WV5RPE5W.mjs.map +0 -7
- package/dist/lib/neutral/testing/index.mjs +0 -65
- package/dist/lib/neutral/testing/index.mjs.map +0 -7
- package/dist/lib/neutral/update-tasks-HX4ILWOU.mjs +0 -46
- package/dist/lib/neutral/update-tasks-HX4ILWOU.mjs.map +0 -7
- package/dist/types/src/skills/agent/operations/add-artifact.d.ts +0 -4
- package/dist/types/src/skills/agent/operations/add-artifact.d.ts.map +0 -1
- package/dist/types/src/skills/agent/operations/agent.d.ts +0 -4
- package/dist/types/src/skills/agent/operations/agent.d.ts.map +0 -1
- package/dist/types/src/skills/agent/operations/qualifier.d.ts +0 -5
- package/dist/types/src/skills/agent/operations/qualifier.d.ts.map +0 -1
- package/dist/types/src/skills/agent/skill.test.d.ts.map +0 -1
- package/dist/types/src/skills/agent-wizard/operations/sync-triggers.d.ts +0 -8
- package/dist/types/src/skills/agent-wizard/operations/sync-triggers.d.ts.map +0 -1
- package/dist/types/src/skills/database/skill.test.d.ts +0 -2
- package/dist/types/src/skills/database/skill.test.d.ts.map +0 -1
- package/dist/types/src/skills/memory/skill.test.d.ts +0 -2
- package/dist/types/src/skills/memory/skill.test.d.ts.map +0 -1
- package/dist/types/src/skills/planning/skill.test.d.ts +0 -2
- package/dist/types/src/skills/planning/skill.test.d.ts.map +0 -1
- package/dist/types/src/types/Plan.d.ts +0 -80
- package/dist/types/src/types/Plan.d.ts.map +0 -1
- package/src/operations/run-instructions.conversations.json +0 -1
- package/src/skills/agent/operations/add-artifact.ts +0 -20
- package/src/skills/agent/operations/agent.ts +0 -69
- package/src/skills/agent/operations/qualifier.ts +0 -97
- package/src/skills/agent/skill.conversations.json +0 -1
- package/src/skills/agent/skill.test.ts +0 -728
- package/src/skills/agent-wizard/operations/sync-triggers.ts +0 -169
- package/src/skills/database/skill.conversations.json +0 -1
- package/src/skills/database/skill.test.ts +0 -531
- package/src/skills/memory/skill.conversations.json +0 -1
- package/src/skills/memory/skill.test.ts +0 -138
- package/src/skills/planning/skill.conversations.json +0 -1
- package/src/skills/planning/skill.test.ts +0 -123
- package/src/types/Plan.ts +0 -123
- /package/dist/types/src/skills/{agent → project}/skill.test.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-operations.mjs","names":[],"sources":["../../src/skills/agent/operations/definitions.ts","../../src/skills/agent/operations/index.ts","../../src/skills/agent-wizard/operations/definitions.ts","../../src/skills/agent-wizard/operations/index.ts","../../src/skills/alarm/operations/definitions.ts","../../src/skills/alarm/operations/index.ts","../../src/skills/skill-manager/operations/definitions.ts","../../src/skills/skill-manager/operations/index.ts","../../src/skills/database/operations/definitions.ts","../../src/skills/database/operations/index.ts","../../src/skills/delegation/operations/delegate-task.ts","../../src/skills/delegation/operations/index.ts","../../src/skills/memory/operations/definitions.ts","../../src/skills/memory/operations/index.ts","../../src/skills/planning/operations/definitions.ts","../../src/skills/planning/operations/index.ts","../../src/operations/definitions.ts","../../src/operations/index.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { AiService } from '@dxos/ai';\nimport { Harness } from '@dxos/assistant';\nimport { Operation, TriggerEvent } from '@dxos/compute';\nimport { AgentService } from '@dxos/compute/AgentService';\nimport { Database, Ref } from '@dxos/echo';\nimport { DXN } from '@dxos/keys';\n\nimport { Chat } from '../../../types';\n\nexport const Relay = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.agent.relay'),\n name: 'Agent Relay',\n description: 'Qualifies a subscription event with a cheap model and forwards it onto the durable agent session.',\n icon: 'ph--funnel--regular',\n },\n input: Schema.Struct({\n /** The chat whose durable session receives the event (carries feed, instructions, and agent). */\n chat: Schema.suspend(() => Ref.Ref(Chat.Chat)),\n event: Schema.optional(TriggerEvent.TriggerEvent),\n /** Synthetic wake prompt (e.g. a cron tick) delivered instead of an event payload. */\n prompt: Schema.optional(Schema.String),\n /** Skip the cheap-model relevance check (default: qualify when an event is present). */\n qualify: Schema.optional(Schema.Boolean),\n }),\n output: Schema.Void,\n services: [AiService.AiService, Database.Service, AgentService],\n});\n\nexport const GetContext = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.agent.getContext'),\n name: 'Get Agent Context',\n description: 'Get the context of an agent.',\n icon: 'ph--info--regular',\n },\n input: Schema.Struct({}),\n output: Schema.Struct({\n id: Schema.String,\n name: Schema.String,\n instructions: Schema.String,\n checklist: Schema.String,\n }),\n services: [Harness.HarnessService, Database.Service],\n});\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * as AgentSkillOperations from './definitions';\n\nexport const AgentSkillHandlers = OperationHandlerSet.lazy(\n () => import('./get-context'),\n () => import('./relay'),\n);\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Operation } from '@dxos/compute';\nimport { Database, Obj, Ref, Registry, Type } from '@dxos/echo';\nimport { DXN } from '@dxos/keys';\n\nimport { Agent } from '../../../types';\n\nexport const AgentRules = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.agentWizard.agentRules'),\n name: 'Agent rules',\n description: 'Gets the rules for creating an agent.',\n icon: 'ph--book-open--regular',\n },\n input: Schema.Struct({}),\n output: Schema.String,\n});\n\nexport const CreateAgent = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.agentWizard.createAgent'),\n name: 'Create agent',\n description: 'Creates a new agent.',\n icon: 'ph--brain--regular',\n },\n input: Schema.Struct({\n name: Schema.String.annotations({\n description: 'The name of the agent to create.',\n }),\n instructions: Schema.String.annotations({\n description:\n 'The goal of the agent. Be specific but not too verbose. The agent will use this as a core objective and set of rules to follow.',\n }),\n skills: Schema.Array(Schema.String).annotations({\n description: 'The skill keys to use for the agent.',\n examples: [['org.dxos.skill.markdown', 'org.dxos.skill.database']],\n }),\n subscriptions: Schema.Array(Ref.Ref(Obj.Unknown)).annotations({\n description: 'The objects to subscribe to for the agent. Can be references to mailboxes.',\n }),\n }),\n output: Type.getSchema(Agent.Agent),\n services: [Registry.Service, Database.Service],\n});\n\nexport const SyncAutomation = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.agent.syncTriggers'),\n name: 'Sync automation',\n description:\n 'Compiles the agent automation config (subscriptions, optional cron) into Routines that relay events onto the agent session. Recreates everything, so call with the FULL desired config after any change; enabled is copied from the agent onto every trigger.',\n icon: 'ph--arrows-clockwise--regular',\n },\n input: Schema.Struct({\n agent: Ref.Ref(Agent.Agent).annotations({\n description: 'The agent whose automation should be synced.',\n }),\n subscriptions: Schema.optional(\n Schema.Array(Ref.Ref(Obj.Unknown)).annotations({\n description: 'The objects to subscribe to (e.g. mailboxes); each compiles to a feed-triggered routine.',\n }),\n ),\n cron: Schema.optional(\n Schema.String.annotations({\n description: 'Cron expression for a scheduled wake routine.',\n }),\n ),\n qualify: Schema.optional(\n Schema.Boolean.annotations({\n description: 'Run the cheap-model relevance filter on subscription events (default true).',\n }),\n ),\n }),\n output: Schema.Void,\n services: [Database.Service],\n});\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * as AgentWizardOperations from './definitions';\n\nexport const AgentWizardHandlers = OperationHandlerSet.lazy(\n () => import('./create-agent'),\n () => import('./agent-rules'),\n () => import('./sync-automation'),\n);\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Harness } from '@dxos/assistant';\nimport { Operation } from '@dxos/compute';\nimport { DXN } from '@dxos/keys';\nimport { trim } from '@dxos/util';\n\nexport const SetAlarm = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.alarm.setAlarm'),\n name: 'Set alarm',\n icon: 'ph--alarm--regular',\n description: trim`\n Schedule an alarm to wake yourself up in the future.\n Provide exactly one of \"in\" (a duration from now) or \"at\" (an absolute time).\n When the alarm fires you will receive a prompt and can continue working.\n Setting a new alarm replaces any previously scheduled one.\n `,\n },\n input: Schema.Struct({\n in: Schema.optional(\n Schema.String.annotations({\n description: 'Duration from now expressed as \"<number> <unit>\", e.g. \"30 seconds\", \"5 minutes\", \"2 hours\".',\n }),\n ),\n at: Schema.optional(\n Schema.String.annotations({\n description: 'Absolute ISO-8601 timestamp to wake at, e.g. \"2026-06-04T18:00:00.000Z\".',\n }),\n ),\n message: Schema.optional(\n Schema.String.annotations({\n description: 'Optional reminder surfaced verbatim when the alarm fires.',\n }),\n ),\n }),\n output: Schema.String,\n services: [Harness.HarnessService],\n});\n\nexport const GetCurrentDate = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.alarm.getCurrentDate'),\n name: 'Get current date',\n icon: 'ph--clock--regular',\n description: 'Get the current date and time as an ISO-8601 string.',\n },\n input: Schema.Struct({}),\n output: Schema.String,\n});\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * as AlarmOperations from './definitions';\n\nexport const AlarmHandlers = OperationHandlerSet.lazy(\n () => import('./set-alarm'),\n () => import('./get-current-date'),\n);\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Harness } from '@dxos/assistant';\nimport { Operation, Skill } from '@dxos/compute';\nimport { Database, Registry, Type } from '@dxos/echo';\nimport { DXN } from '@dxos/keys';\n\nexport const QuerySkills = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.skillManager.querySkills'),\n name: 'Query skills',\n description: 'Queries available skills.',\n icon: 'ph--blueprint--regular',\n },\n input: Schema.Struct({}),\n output: Schema.Array(Type.getSchema(Skill.Skill)),\n services: [Registry.Service],\n});\n\nexport const EnableSkills = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.skillManager.enableSkills'),\n name: 'Enable skills',\n description:\n 'Enables skills in the current conversation by their keys. Only skills with agentCanEnable=true can be enabled. The available keys are already listed in the system prompt, so call this directly rather than querying first.',\n icon: 'ph--plugs-connected--regular',\n },\n input: Schema.Struct({\n keys: Schema.Array(Schema.String).annotations({\n description: 'The keys of the skills to enable.',\n examples: [['org.dxos.skill.memory', 'org.dxos.skill.database']],\n }),\n }),\n output: Schema.Struct({\n enabled: Schema.Array(Type.getSchema(Skill.Skill)),\n rejected: Schema.Array(\n Schema.Struct({\n key: Schema.String,\n reason: Schema.String,\n }),\n ),\n }),\n services: [Registry.Service, Database.Service, Harness.HarnessService],\n});\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * as SkillManagerOperations from './definitions';\n\nexport const SkillManagerHandlers = OperationHandlerSet.lazy(\n () => import('./query-skills'),\n () => import('./enable-skills'),\n);\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Harness } from '@dxos/assistant';\nimport { Operation } from '@dxos/compute';\nimport { Database, Obj, Ref, Relation, Tag, Type } from '@dxos/echo';\nimport { DXN } from '@dxos/keys';\nimport { trim } from '@dxos/util';\n\nexport const Query = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.query'),\n name: 'Query',\n icon: 'ph--magnifying-glass--regular',\n description: trim`\n Query for objects in ECHO.\n Use this tool when searching for information in the space (both automerge and queues).\n Currently, two types of queries are supported:\n - Full-text search - terms may appear anywhere in the object.\n - Type-based search - objects of a specific type.\n You can use them together, for example, to search for objects of a specific type that match a full-text query.\n Important: Whem querying by typename, make sure to list the schema first, to get the exact typename.\n\n Omit both typename and text to search for all objects.\n\n <output_format>\n You can choose to either return the full object data, or just the DXN, type and label.\n When expecting a lot of results, run with includeContent=false to not pollute the context, and then load specific objects using the load tool.\n\n You can choose to get the content right away, if you don't expect a lot of results.\n To load content right away, run with includeContent=true.\n When loading content, set an appropriate limit on the number of results to avoid overwhelming the context.\n </output_format>\n\n <example description=\"All tasks related to Cyberdyne and Bob\">\n {\n \"typename\": \"org.dxos.type.task\",\n \"text\": \"cyberdyne bob\",\n }\n </example>\n\n <example description=\"Financial report Q1 2026\">\n {\n \"typename\": \"org.dxos.type.document\",\n \"text\": \"financial report Q1 2026\",\n \"includeContent\": true\n \"limit\": 3\n }\n </example>\n\n <example description=\"Emails from specific mailboxes\">\n {\n \"in\": [{\"/\" : \"echo:///YYYYYY\"}, {\"/\" : \"echo:///XXXXXXX\"}],\n \"typename\": \"org.dxos.type.email\",\n \"includeContent\": true,\n \"limit\": 20\n }\n </example>\n `,\n },\n input: Schema.Struct({\n in: Schema.optional(\n Schema.Array(Ref.Ref(Obj.Unknown)).annotations({\n description:\n 'Scope the query to children of specific objects (transitively). ' +\n 'Use this to query items within containers such as feeds or folders. ' +\n 'For example, to find emails use `in: [mailbox1.feed, mailbox2.feed]`.',\n }),\n ),\n typename: Schema.optional(\n Schema.String.annotations({\n description: 'The typename of the objects to list.',\n example: 'org.dxos.type.task',\n }),\n ),\n text: Schema.optional(\n Schema.String.annotations({\n description: 'Full text search query.',\n example: 'email cyberdyne bob',\n }),\n ),\n includeContent: Schema.optional(\n Schema.Boolean.annotations({\n description: 'Include the full object data in the response.',\n default: false,\n }),\n ),\n limit: Schema.optional(\n Schema.Number.annotations({\n description: 'The maximum number of results to return.',\n default: 10,\n }),\n ),\n includeQueues: Schema.optional(\n Schema.Boolean.annotations({\n description: 'Search in queues as well as spaces. Only use this if searching for emails.',\n default: false,\n }),\n ),\n }),\n output: Schema.Array(Schema.Unknown),\n services: [Database.Service],\n});\n\nexport const Load = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.load'),\n name: 'Load object',\n icon: 'ph--download--regular',\n description: trim`\n Loads the object or relation content.\n Can load multiple objects at at time.\n Use the to read the data when you have a DXN.\n Call this tool with an array of one or more DXNs or object IDs.\n When use see a reference ({ '/': 'echo:...' }), you can call this function to load the object.\n Note that returned data is only a snapshot in time, and might have changed since the object was last loaded.\n `,\n },\n input: Schema.Struct({\n refs: Schema.Array(Ref.Ref(Obj.Unknown)),\n }),\n output: Schema.Unknown,\n services: [Database.Service],\n});\n\nexport const ObjectCreate = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.objectCreate'),\n name: 'Create object',\n icon: 'ph--plus--regular',\n description: trim`\n Creates a new object of any type and adds it to the current space.\n When a type has its own create tool (e.g. the markdown skill creates documents), prefer that\n tool — it builds the object's owned parts correctly. Use this one for types that have none.\n Get the schema from the schema-list tool and ensure that the data matches the corresponding schema.\n References are provided in the following format: { \"/\": \"echo:...\" }.\n Reference examples: { \"/\": \"echo:///01KG7R1ZXWFMWQ4DA1Q6TN1DG4\" }, { \"/\": \"echo://<space id>/01KG7R1ZXWFMWQ4DA1Q6TN1DG4\" }\n `,\n },\n input: Schema.Struct({\n typename: Schema.String.annotations({\n description: 'The typename of the object to create.',\n examples: ['dxn:org.dxos.type.person'],\n }),\n properties: Schema.Record({ key: Schema.String, value: Schema.Any }),\n attach: Schema.optional(Schema.Boolean).annotations({\n description: trim`\n Attach the object to the space root collection so it appears in the navigation tree.\n Set for top-level objects; leave unset for subordinate objects referenced by others.\n `,\n }),\n }),\n output: Schema.Unknown,\n services: [Database.Service],\n});\n\nexport const ObjectUpdate = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.objectUpdate'),\n name: 'Update object',\n icon: 'ph--pencil--regular',\n description: trim`\n Updates the object properties.\n References are provided in the following format: { \"/\": \"echo:...\" }.\n Reference examples: { \"/\": \"echo:///01KG7R1ZXWFMWQ4DA1Q6TN1DG4\" }, { \"/\": \"echo://<space id>/01KG7R1ZXWFMWQ4DA1Q6TN1DG4\" }\n `,\n },\n input: Schema.Struct({\n obj: Ref.Ref(Obj.Unknown),\n properties: Schema.Record({ key: Schema.String, value: Schema.Any }),\n }),\n output: Schema.Unknown,\n services: [Database.Service],\n});\n\nexport const ObjectDelete = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.objectDelete'),\n name: 'Delete object',\n description: trim`\n Deletes the object.\n `,\n icon: 'ph--trash--regular',\n },\n input: Schema.Struct({\n obj: Ref.Ref(Obj.Unknown),\n }),\n output: Schema.Void,\n services: [Database.Service],\n});\n\nexport const SchemaAdd = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.schemaAdd'),\n name: 'Add schema',\n icon: 'ph--plus--regular',\n description: trim`\n Adds a schema to the space.\n The name will be used when displayed to the user.\n `,\n },\n input: Schema.Struct({\n name: Schema.String,\n typename: Schema.String.annotations({\n description: 'The typename of the schema in the format of \"com.example.type.type\".',\n }),\n // Typed as a record so the tool parameter advertises `type: object` to the LLM, forcing it to\n // emit the JSON Schema as an object rather than a JSON-encoded string (which an unconstrained\n // `Schema.Any` parameter would allow, breaking `makeObjectFromJsonSchema`).\n jsonSchema: Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({\n description: 'The JSON Schema (draft-07) object describing the fields of the new type.',\n }),\n }),\n output: Schema.Void,\n services: [Database.Service],\n});\n\nexport const SchemaList = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.schemaList'),\n name: 'List schemas',\n icon: 'ph--list--regular',\n description: trim`\n Lists schemas definitions.\n `,\n },\n input: Schema.Struct({\n limit: Schema.optional(Schema.Number),\n }),\n output: Schema.Array(Schema.Unknown),\n services: [Database.Service],\n});\n\nexport const ContextAdd = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.contextAdd'),\n name: 'Add to context',\n icon: 'ph--plus-circle--regular',\n description: trim`\n Adds the object to the chat context.\n Use this it for objects that are useful long-term for the conversation.\n `,\n },\n input: Schema.Struct({\n obj: Ref.Ref(Obj.Unknown).annotations({\n description: 'Object to add to the chat context.',\n }),\n }),\n output: Schema.Void,\n services: [Harness.HarnessService],\n});\n\nexport const ContextRemove = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.contextRemove'),\n name: 'Remove from context',\n icon: 'ph--minus-circle--regular',\n description: trim`\n Removes the object from the chat context.\n Use this it for objects that are no longer useful for the conversation.\n `,\n },\n input: Schema.Struct({\n obj: Ref.Ref(Obj.Unknown).annotations({\n description: 'Object to remove from the chat context.',\n }),\n }),\n output: Schema.Void,\n services: [Harness.HarnessService],\n});\n\nexport const RelationCreate = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.relationCreate'),\n name: 'Create relation',\n icon: 'ph--arrows-merge--regular',\n description: trim`\n Creates a new relation and adds it to the current space.\n Get the schema from the schema-list tool and ensure that the data matches the corresponding schema.\n `,\n },\n input: Schema.Struct({\n typename: Schema.String,\n source: Ref.Ref(Obj.Unknown),\n target: Ref.Ref(Obj.Unknown),\n properties: Schema.Any.annotations({\n description: 'The data to be stored in the relation.',\n }),\n }),\n output: Schema.Unknown,\n services: [Database.Service],\n});\n\nexport const RelationDelete = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.relationDelete'),\n name: 'Delete relation',\n description: trim`\n Deletes the relation.\n `,\n icon: 'ph--trash--regular',\n },\n input: Schema.Struct({\n rel: Ref.Ref(Relation.Unknown),\n }),\n output: Schema.Void,\n services: [Database.Service],\n});\n\nexport const TagAdd = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.tagAdd'),\n name: 'Add tag',\n icon: 'ph--tag--regular',\n description: trim`\n Adds a tag to an object.\n Tags are objects of type ${Type.getTypename(Tag.Tag)}.\n You must search database for available tags, or create a new one.\n `,\n },\n input: Schema.Struct({\n tag: Ref.Ref(Tag.Tag),\n obj: Ref.Ref(Obj.Unknown),\n }),\n output: Schema.Unknown,\n services: [Database.Service],\n});\n\nexport const TagRemove = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.database.tagRemove'),\n name: 'Remove tag',\n icon: 'ph--tag--regular',\n description: trim`\n Removes a tag from an object.\n Tags are objects of type ${Type.getTypename(Tag.Tag)}.\n `,\n },\n input: Schema.Struct({\n tag: Ref.Ref(Tag.Tag),\n obj: Ref.Ref(Obj.Unknown),\n }),\n output: Schema.Unknown,\n services: [Database.Service],\n});\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * as DatabaseOperations from './definitions';\n\nexport const DatabaseHandlers = OperationHandlerSet.lazy(\n () => import('./context-add'),\n () => import('./context-remove'),\n () => import('./load'),\n () => import('./object-create'),\n () => import('./object-delete'),\n () => import('./object-update'),\n () => import('./query'),\n () => import('./relation-create'),\n () => import('./relation-delete'),\n () => import('./schema-add'),\n () => import('./schema-list'),\n () => import('./tag-add'),\n () => import('./tag-remove'),\n);\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { Harness } from '@dxos/assistant';\nimport { Operation } from '@dxos/compute';\nimport { Database, Obj } from '@dxos/echo';\nimport { DXN } from '@dxos/keys';\nimport { Outline } from '@dxos/types';\nimport { trim } from '@dxos/util';\n\nimport { Chat } from '../../../types';\n\nexport const DelegateTask = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.delegation.delegateTask'),\n name: 'Delegate task',\n description: trim`\n Delegate a unit of work to a sub-agent.\n Promotes the titled checklist item to a durable in-progress task assigned to an agent, so\n the supervisor spawns a background sub-agent. Creates the checklist item if absent.\n `,\n icon: 'ph--share-network--regular',\n },\n input: Schema.Struct({\n title: Schema.String.annotations({\n description: 'Title of the work to delegate (matched against the checklist, created if new).',\n }),\n }),\n output: Schema.Any,\n services: [Harness.HarnessService, Database.Service],\n});\n\n/**\n * Delegation is the promotion moment: the scratch checklist item becomes a durable `Task`\n * (parented to the outline's task set) assigned to an agent (`role: 'assistant'`), which the\n * supervisor's reconcile loop picks up. The markdown line is checked off only when the sub-agent\n * completes (see the delegation strategy).\n */\nexport default DelegateTask.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ title }) {\n if (title.length === 0) {\n return yield* Effect.fail(new Error('Provide a non-empty task title.'));\n }\n\n const chat = yield* Chat.getFromContext;\n const { outline, text } = yield* Chat.ensureOutlineText(chat);\n const { db } = yield* Database.Service;\n\n const task = yield* Effect.promise(() =>\n Outline.createTask(outline, db, title, {\n status: 'in-progress',\n assignee: { role: 'assistant' },\n }),\n );\n\n // Ensure the checklist carries the item (unchecked until the sub-agent completes).\n Obj.update(text, (text) => {\n text.content = Outline.upsertChecklistItems(text.content, [{ title: task.title, done: false }]);\n });\n yield* Database.flush();\n\n return trim`\n Delegated \"${task.title}\" as an in-progress agent task (id: ${task.id}).\n Current checklist:\n <checklist>\n ${text.content}\n </checklist>\n `;\n }),\n ),\n);\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * as DelegationOperations from './delegate-task';\n\nexport const DelegationHandlers = OperationHandlerSet.lazy(() => import('./delegate-task'));\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Operation } from '@dxos/compute';\nimport { Database, Ref } from '@dxos/echo';\nimport { DXN } from '@dxos/keys';\n\nimport { Memory } from '../../../types/Memory';\n\nexport const QueryMemories = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.memory.query'),\n name: 'Query memories',\n description:\n 'Search for stored memories using full-text search. Returns memories matching the query terms. Use this to recall previously saved knowledge, facts, or preferences.',\n icon: 'ph--brain--regular',\n },\n input: Schema.Struct({\n text: Schema.optional(\n Schema.String.annotations({\n description: 'Full-text search query. Omit to list all memories.',\n examples: ['new york trip date plan', 'favorite color', 'project cyberdyne'],\n }),\n ),\n limit: Schema.optional(\n Schema.Number.annotations({\n description: 'Maximum number of results to return.',\n default: 10,\n }),\n ),\n }),\n output: Schema.Array(Schema.Unknown),\n services: [Database.Service],\n});\n\nexport const SaveMemory = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.memory.save'),\n name: 'Save memory',\n description:\n 'Saves a new memory to the database. Use this to persist knowledge, facts, preferences, or any information that should be remembered across conversations.',\n icon: 'ph--brain--regular',\n },\n input: Schema.Struct({\n title: Schema.String.annotations({\n description: 'Short descriptive title for the memory.',\n }),\n content: Schema.String.annotations({\n description:\n 'The content of the memory. Can be a fact, preference, instruction, or any knowledge worth persisting.',\n }),\n }),\n output: Schema.Unknown,\n services: [Database.Service],\n});\n\nexport const DeleteMemory = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.memory.delete'),\n name: 'Delete memory',\n description: 'Deletes a memory from the database. Use this to remove outdated or incorrect memories.',\n icon: 'ph--trash--regular',\n },\n input: Schema.Struct({\n memory: Ref.Ref(Memory),\n }),\n output: Schema.Void,\n services: [Database.Service],\n});\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * as MemoryOperations from './definitions';\n\nexport const MemoryHandlers = OperationHandlerSet.lazy(\n () => import('./save'),\n () => import('./query'),\n () => import('./delete'),\n);\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { AiService } from '@dxos/ai';\nimport { Harness } from '@dxos/assistant';\nimport { Operation } from '@dxos/compute';\nimport { Database } from '@dxos/echo';\nimport { DXN } from '@dxos/keys';\n\nimport INSTRUCTIONS from './update-tasks.md?raw';\n\n/**\n * LLM-facing checklist entry: items are addressed by title (the checklist is markdown — see\n * `Outline.upsertChecklistItems`); `in-progress` renders unchecked, nuance lives in conversation.\n */\nconst ChecklistTask = Schema.Struct({\n title: Schema.String.annotations({ description: 'Task title; also the key for updates.' }),\n status: Schema.Literal('todo', 'in-progress', 'done'),\n});\n\nexport const UpdateTasks = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.planning.updateTasks'),\n name: 'Update tasks',\n description: INSTRUCTIONS,\n icon: 'ph--check-square-offset--regular',\n },\n input: Schema.Struct({\n tasks: Schema.Array(ChecklistTask),\n }),\n output: Schema.Any,\n services: [Harness.HarnessService, Database.Service],\n});\n\nexport const PlanReminder = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.planning.planReminder'),\n name: 'Plan reminder',\n description: 'Reminds the agent to continue when its plan still has incomplete tasks.',\n },\n input: Schema.Struct({}),\n output: Schema.Void,\n services: [Harness.HarnessService, Database.Service, AiService.AiService],\n});\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * as PlanningOperations from './definitions';\n\nexport const PlanningHandlers = OperationHandlerSet.lazy(\n () => import('./update-tasks'),\n () => import('./plan-reminder'),\n);\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { AiService, OpaqueToolkit } from '@dxos/ai';\nimport { Instructions, Operation, Trace } from '@dxos/compute';\nimport { Database, Feed, Ref, Registry } from '@dxos/echo';\nimport { DXN } from '@dxos/keys';\nimport { Text } from '@dxos/schema';\n\nimport * as Chat from '../types/Chat';\n\nexport const RunInstructions = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.runInstructions'),\n name: 'Run Instructions',\n description: 'Agentic worker that executes a provided prompt using skills and tools.',\n icon: 'ph--brain--regular',\n },\n input: Schema.Struct({\n instructions: Ref.Ref(Instructions.Instructions),\n\n /**\n * Input object or data.\n * References get auto-resolved.\n */\n input: Schema.Any.pipe(Schema.annotations({ title: 'Input' })),\n\n /**\n * When set, runs in this chat (history, queue, and bound context). Routine skills and context objects are merged into the conversation for this request.\n */\n chat: Schema.optional(Ref.Ref(Chat.Chat)),\n\n /**\n * @default dxn:com.anthropic.model.claude-opus-4-8.default\n */\n model: Schema.optional(DXN.Schema),\n\n systemInstructions: Schema.optional(Schema.String).annotations({\n description: 'Additional system instructions to add to the system prompt.',\n }),\n }),\n output: Schema.Any,\n // ECHO types that the handler loads via Database.load(). Declaring them here ensures the\n // runtime registers their schema before remote invocation (e.g. via the EDGE function service).\n types: [Instructions.Instructions, Text.Text, Feed.Feed, Chat.Chat],\n services: [\n AiService.AiService,\n Database.Service,\n OpaqueToolkit.OpaqueToolkitProvider,\n Registry.Service,\n Trace.TraceService,\n ],\n});\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * from './definitions';\n\nexport const AgentHandlers = OperationHandlerSet.lazy(() => import('./run-instructions'));\n"],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { c as peekOutlineRef, o as getFromContext } from "./chunk-Chat.mjs";
|
|
2
|
+
import "./chunk-types.mjs";
|
|
3
|
+
import { i as PlanReminder } from "./chunk-operations.mjs";
|
|
4
|
+
import { Operation } from "@dxos/compute";
|
|
5
|
+
import { trim } from "@dxos/util";
|
|
6
|
+
import { AiPreprocessor, AiService } from "@dxos/ai";
|
|
7
|
+
import { Harness } from "@dxos/assistant";
|
|
8
|
+
import { Database } from "@dxos/echo";
|
|
9
|
+
import * as Effect from "effect/Effect";
|
|
10
|
+
import { ContentBlock, Outline } from "@dxos/types";
|
|
11
|
+
import * as LanguageModel from "@effect/ai/LanguageModel";
|
|
12
|
+
import * as Prompt from "@effect/ai/Prompt";
|
|
13
|
+
//#region src/skills/planning/operations/plan-reminder.ts
|
|
14
|
+
/**
|
|
15
|
+
* End-request hook for the planning skill. When the conversation's working outline still has
|
|
16
|
+
* unchecked items, an ephemeral check asks the model — given the full conversation — whether the
|
|
17
|
+
* agent should keep working: a deterministic reminder alone would trap an agent that legitimately
|
|
18
|
+
* finishes with open items in an unbreakable re-prompt loop. On "continue" it enqueues a
|
|
19
|
+
* continuation reminder onto the owning host's queue (HarnessService Tier B), which keeps the
|
|
20
|
+
* process alive; on "stop" it does nothing so the agent may complete with items deliberately left
|
|
21
|
+
* open.
|
|
22
|
+
*/
|
|
23
|
+
var plan_reminder_default = PlanReminder.pipe(Operation.withHandler(Effect.fnUntraced(function* () {
|
|
24
|
+
const chat = yield* getFromContext.pipe(Effect.orElseSucceed(() => void 0));
|
|
25
|
+
if (!chat) return;
|
|
26
|
+
const outline = yield* resolveExistingOutline(chat);
|
|
27
|
+
if (!outline) return;
|
|
28
|
+
const text = yield* Database.load(outline.content).pipe(Effect.orElseSucceed(() => void 0));
|
|
29
|
+
if (!text || !Outline.hasOpenItems(text.content)) return;
|
|
30
|
+
const history = yield* Harness.history;
|
|
31
|
+
const prompt = Prompt.merge(yield* AiPreprocessor.preprocessPrompt(history, { system: checklistCompletionCheckSystem }), checklistCompletionCheckPrompt(text.content));
|
|
32
|
+
const { text: reply } = yield* Effect.scoped(LanguageModel.generateText({ prompt }));
|
|
33
|
+
if (!parseContinueDecision(reply)) return;
|
|
34
|
+
yield* Harness.enqueueMessage({ content: [ContentBlock.Text.make({
|
|
35
|
+
text: checklistContinueReminderPrompt(text.content),
|
|
36
|
+
disposition: "synthetic"
|
|
37
|
+
})] });
|
|
38
|
+
}, Effect.provide(AiService.model("com.anthropic.model.claude-sonnet-4-6.default")))));
|
|
39
|
+
/**
|
|
40
|
+
* The working outline, if one exists: the parent project's, else the chat's own. Mirrors
|
|
41
|
+
* {@link Chat.ensureOutline}'s resolution order without the create path.
|
|
42
|
+
*/
|
|
43
|
+
var resolveExistingOutline = (chat) => Effect.gen(function* () {
|
|
44
|
+
const ref = peekOutlineRef(chat);
|
|
45
|
+
if (!ref) return;
|
|
46
|
+
return yield* Database.load(ref).pipe(Effect.orElseSucceed(() => void 0));
|
|
47
|
+
});
|
|
48
|
+
var checklistCompletionCheckSystem = trim`
|
|
49
|
+
You decide whether an agent should stop or continue working on its checklist, given the
|
|
50
|
+
conversation so far and the agent's remaining items.
|
|
51
|
+
Reply with exactly one word: "stop" or "continue". Do not use tools. Do not add explanation.
|
|
52
|
+
`;
|
|
53
|
+
var checklistCompletionCheckPrompt = (markdown) => trim`
|
|
54
|
+
The agent is about to finish, but its checklist still has unchecked items:
|
|
55
|
+
|
|
56
|
+
<checklist>
|
|
57
|
+
${markdown}
|
|
58
|
+
</checklist>
|
|
59
|
+
|
|
60
|
+
Should the agent STOP now (no more work needed) or CONTINUE working on the checklist?
|
|
61
|
+
Reply with exactly one word: "stop" or "continue".
|
|
62
|
+
`;
|
|
63
|
+
/** Prefer an explicit "continue"; treat ambiguous replies as continue so open work is not dropped. */
|
|
64
|
+
var parseContinueDecision = (reply) => {
|
|
65
|
+
const normalized = reply.toLowerCase();
|
|
66
|
+
if (/\bcontinue\b/.test(normalized)) return true;
|
|
67
|
+
if (/\bstop\b/.test(normalized)) return false;
|
|
68
|
+
return true;
|
|
69
|
+
};
|
|
70
|
+
var checklistContinueReminderPrompt = (markdown) => trim`
|
|
71
|
+
Your checklist still has unchecked items — continue working before finishing:
|
|
72
|
+
|
|
73
|
+
<checklist>
|
|
74
|
+
${markdown}
|
|
75
|
+
</checklist>
|
|
76
|
+
`;
|
|
77
|
+
//#endregion
|
|
78
|
+
export { plan_reminder_default as default };
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=chunk-plan-reminder.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-plan-reminder.mjs","names":[],"sources":["../../src/skills/planning/operations/plan-reminder.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as LanguageModel from '@effect/ai/LanguageModel';\nimport * as Prompt from '@effect/ai/Prompt';\nimport * as Effect from 'effect/Effect';\n\nimport { AiPreprocessor, AiService } from '@dxos/ai';\nimport { Harness } from '@dxos/assistant';\nimport { Operation } from '@dxos/compute';\nimport { Database } from '@dxos/echo';\nimport { ContentBlock, Outline } from '@dxos/types';\nimport { trim } from '@dxos/util';\n\nimport { Chat } from '../../../types';\nimport { PlanReminder } from './definitions';\n\n/**\n * End-request hook for the planning skill. When the conversation's working outline still has\n * unchecked items, an ephemeral check asks the model — given the full conversation — whether the\n * agent should keep working: a deterministic reminder alone would trap an agent that legitimately\n * finishes with open items in an unbreakable re-prompt loop. On \"continue\" it enqueues a\n * continuation reminder onto the owning host's queue (HarnessService Tier B), which keeps the\n * process alive; on \"stop\" it does nothing so the agent may complete with items deliberately left\n * open.\n */\nexport default PlanReminder.pipe(\n Operation.withHandler(\n Effect.fnUntraced(\n function* () {\n const chat = yield* Chat.getFromContext.pipe(Effect.orElseSucceed(() => undefined));\n if (!chat) {\n return;\n }\n // Only consult an outline that already exists — the reminder never creates one.\n const outline = yield* resolveExistingOutline(chat);\n if (!outline) {\n return;\n }\n const text = yield* Database.load(outline.content).pipe(Effect.orElseSucceed(() => undefined));\n if (!text || !Outline.hasOpenItems(text.content)) {\n return;\n }\n\n const history = yield* Harness.history;\n const prompt = Prompt.merge(\n yield* AiPreprocessor.preprocessPrompt(history, { system: checklistCompletionCheckSystem }),\n checklistCompletionCheckPrompt(text.content),\n );\n const { text: reply } = yield* Effect.scoped(LanguageModel.generateText({ prompt }));\n\n if (!parseContinueDecision(reply)) {\n return;\n }\n\n yield* Harness.enqueueMessage({\n content: [\n ContentBlock.Text.make({ text: checklistContinueReminderPrompt(text.content), disposition: 'synthetic' }),\n ],\n });\n },\n Effect.provide(AiService.model('com.anthropic.model.claude-sonnet-4-6.default')),\n ),\n ),\n);\n\n/**\n * The working outline, if one exists: the parent project's, else the chat's own. Mirrors\n * {@link Chat.ensureOutline}'s resolution order without the create path.\n */\nconst resolveExistingOutline = (chat: Chat.Chat) =>\n Effect.gen(function* () {\n const ref = Chat.peekOutlineRef(chat);\n if (!ref) {\n return undefined;\n }\n return yield* Database.load(ref).pipe(Effect.orElseSucceed(() => undefined));\n });\n\nconst checklistCompletionCheckSystem = trim`\n You decide whether an agent should stop or continue working on its checklist, given the\n conversation so far and the agent's remaining items.\n Reply with exactly one word: \"stop\" or \"continue\". Do not use tools. Do not add explanation.\n`;\n\nconst checklistCompletionCheckPrompt = (markdown: string): string => trim`\n The agent is about to finish, but its checklist still has unchecked items:\n\n <checklist>\n ${markdown}\n </checklist>\n\n Should the agent STOP now (no more work needed) or CONTINUE working on the checklist?\n Reply with exactly one word: \"stop\" or \"continue\".\n`;\n\n/** Prefer an explicit \"continue\"; treat ambiguous replies as continue so open work is not dropped. */\nconst parseContinueDecision = (reply: string): boolean => {\n const normalized = reply.toLowerCase();\n if (/\\bcontinue\\b/.test(normalized)) {\n return true;\n }\n if (/\\bstop\\b/.test(normalized)) {\n return false;\n }\n return true;\n};\n\nconst checklistContinueReminderPrompt = (markdown: string): string => trim`\n Your checklist still has unchecked items — continue working before finishing:\n\n <checklist>\n ${markdown}\n </checklist>\n`;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA2BA,IAAA,wBAAe,aAAa,KAC1B,UAAU,YACR,OAAO,WACL,aAAa;CACX,MAAM,OAAO,OAAA,eAA2B,KAAK,OAAO,oBAAoB,KAAA,CAAS,CAAC;CAClF,IAAI,CAAC,MACH;CAGF,MAAM,UAAU,OAAO,uBAAuB,IAAI;CAClD,IAAI,CAAC,SACH;CAEF,MAAM,OAAO,OAAO,SAAS,KAAK,QAAQ,OAAO,CAAC,CAAC,KAAK,OAAO,oBAAoB,KAAA,CAAS,CAAC;CAC7F,IAAI,CAAC,QAAQ,CAAC,QAAQ,aAAa,KAAK,OAAO,GAC7C;CAGF,MAAM,UAAU,OAAO,QAAQ;CAC/B,MAAM,SAAS,OAAO,MACpB,OAAO,eAAe,iBAAiB,SAAS,EAAE,QAAQ,+BAA+B,CAAC,GAC1F,+BAA+B,KAAK,OAAO,CAC7C;CACA,MAAM,EAAE,MAAM,UAAU,OAAO,OAAO,OAAO,cAAc,aAAa,EAAE,OAAO,CAAC,CAAC;CAEnF,IAAI,CAAC,sBAAsB,KAAK,GAC9B;CAGF,OAAO,QAAQ,eAAe,EAC5B,SAAS,CACP,aAAa,KAAK,KAAK;EAAE,MAAM,gCAAgC,KAAK,OAAO;EAAG,aAAa;CAAY,CAAC,CAC1G,EACF,CAAC;AACH,GACA,OAAO,QAAQ,UAAU,MAAM,+CAA+C,CAAC,CACjF,CACF,CACF;;;;;AAMA,IAAM,0BAA0B,SAC9B,OAAO,IAAI,aAAa;CACtB,MAAM,MAAM,eAAoB,IAAI;CACpC,IAAI,CAAC,KACH;CAEF,OAAO,OAAO,SAAS,KAAK,GAAG,CAAC,CAAC,KAAK,OAAO,oBAAoB,KAAA,CAAS,CAAC;AAC7E,CAAC;AAEH,IAAM,iCAAiC,IAAI;;;;;AAM3C,IAAM,kCAAkC,aAA6B,IAAI;;;;IAIrE,SAAQ;;;;;;;AAQZ,IAAM,yBAAyB,UAA2B;CACxD,MAAM,aAAa,MAAM,YAAY;CACrC,IAAI,eAAe,KAAK,UAAU,GAChC,OAAO;CAET,IAAI,WAAW,KAAK,UAAU,GAC5B,OAAO;CAET,OAAO;AACT;AAEA,IAAM,mCAAmC,aAA6B,IAAI;;;;IAItE,SAAQ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { M as QuerySkills } from "./chunk-operations.mjs";
|
|
2
|
+
import { Operation, Skill } from "@dxos/compute";
|
|
3
|
+
import { Filter, Registry } from "@dxos/echo";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
//#region src/skills/skill-manager/operations/query-skills.ts
|
|
6
|
+
var query_skills_default = QuerySkills.pipe(Operation.withHandler(Effect.fnUntraced(function* () {
|
|
7
|
+
return (yield* Registry.runQuery(Filter.type(Skill.Skill))).slice().sort(({ name: a }, { name: b }) => a.localeCompare(b));
|
|
8
|
+
})));
|
|
9
|
+
//#endregion
|
|
10
|
+
export { query_skills_default as default };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=chunk-query-skills.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-query-skills.mjs","names":[],"sources":["../../src/skills/skill-manager/operations/query-skills.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation, Skill } from '@dxos/compute';\nimport { Filter, Registry } from '@dxos/echo';\n\nimport { QuerySkills } from './definitions';\n\nexport default QuerySkills.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* () {\n const skills = yield* Registry.runQuery(Filter.type(Skill.Skill));\n return skills.slice().sort(({ name: a }, { name: b }) => a.localeCompare(b));\n }),\n ),\n);\n"],"mappings":";;;;;AAWA,IAAA,uBAAe,YAAY,KACzB,UAAU,YACR,OAAO,WAAW,aAAa;CAE7B,QAAO,OADe,SAAS,SAAS,OAAO,KAAK,MAAM,KAAK,CAAC,EAAA,CAClD,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,EAAE,MAAM,QAAQ,EAAE,cAAc,CAAC,CAAC;AAC7E,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { S as Query$1 } from "./chunk-operations.mjs";
|
|
2
|
+
import { Operation } from "@dxos/compute";
|
|
3
|
+
import { Database, Entity, Filter, Obj, Query, Scope, Type } from "@dxos/echo";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
//#region src/skills/database/operations/query.ts
|
|
6
|
+
var query_default = Query$1.pipe(Operation.withHandler(Effect.fn(function* ({ in: parents, typename, text, includeContent = false, limit = 10, includeQueues = false }) {
|
|
7
|
+
const { db } = yield* Database.Service;
|
|
8
|
+
let query;
|
|
9
|
+
if (text) {
|
|
10
|
+
query = Query.all(...text.split(" ").map((term) => Query.select(Filter.text(term, { type: "full-text" }))));
|
|
11
|
+
if (typename !== void 0) {
|
|
12
|
+
const schema = (yield* Database.query(Query.select(Filter.type(Type.Type)).from(Scope.space(), Scope.registry())).run).find((t) => Type.getTypename(t) === typename);
|
|
13
|
+
if (!schema) return yield* Effect.fail(/* @__PURE__ */ new Error(`Schema ${typename} not found`));
|
|
14
|
+
query = query.select(Filter.type(schema));
|
|
15
|
+
}
|
|
16
|
+
} else if (typename) {
|
|
17
|
+
const schema = (yield* Database.query(Query.select(Filter.type(Type.Type)).from(Scope.space(), Scope.registry())).run).find((t) => Type.getTypename(t) === typename);
|
|
18
|
+
if (!schema) return yield* Effect.fail(/* @__PURE__ */ new Error(`Schema ${typename} not found`));
|
|
19
|
+
query = Query.select(Filter.type(schema));
|
|
20
|
+
} else query = Query.select(Filter.everything());
|
|
21
|
+
if (parents && parents.length > 0) query = query.select(Filter.childOf(parents));
|
|
22
|
+
query = query.limit(limit);
|
|
23
|
+
if (includeQueues) query = query.from(db, { includeFeeds: true });
|
|
24
|
+
yield* Database.flush();
|
|
25
|
+
const results = yield* Database.query(query).run;
|
|
26
|
+
if (includeContent) return results.map((obj) => Entity.toJSON(obj));
|
|
27
|
+
else return results.map((obj) => ({
|
|
28
|
+
dxn: Obj.getURI(obj),
|
|
29
|
+
typename: Obj.getTypename(obj),
|
|
30
|
+
label: Obj.getLabel(obj)
|
|
31
|
+
}));
|
|
32
|
+
})));
|
|
33
|
+
//#endregion
|
|
34
|
+
export { query_default as default };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=chunk-query.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-query.mjs","names":[],"sources":["../../src/skills/database/operations/query.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\nimport { Database, Query as EchoQuery, Entity, Filter, Obj, Scope, Type } from '@dxos/echo';\n\nimport { Query } from './definitions';\n\n// TODO(burdon): Move to toolkit (i.e., tool not function).\nexport default Query.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ in: parents, typename, text, includeContent = false, limit = 10, includeQueues = false }) {\n const { db } = yield* Database.Service;\n let query: EchoQuery.Any;\n if (text) {\n query = EchoQuery.all(\n ...text.split(' ').map((term) => EchoQuery.select(Filter.text(term, { type: 'full-text' }))),\n );\n if (typename !== undefined) {\n const types = yield* Database.query(\n EchoQuery.select(Filter.type(Type.Type)).from(Scope.space(), Scope.registry()),\n ).run;\n const schema = types.find((t) => Type.getTypename(t) === typename);\n if (!schema) {\n return yield* Effect.fail(new Error(`Schema ${typename} not found`));\n }\n query = query.select(Filter.type(schema));\n }\n } else if (typename) {\n const types = yield* Database.query(\n EchoQuery.select(Filter.type(Type.Type)).from(Scope.space(), Scope.registry()),\n ).run;\n const schema = types.find((t) => Type.getTypename(t) === typename);\n if (!schema) {\n return yield* Effect.fail(new Error(`Schema ${typename} not found`));\n }\n query = EchoQuery.select(Filter.type(schema));\n } else {\n query = EchoQuery.select(Filter.everything());\n }\n\n if (parents && parents.length > 0) {\n query = query.select(Filter.childOf(parents));\n }\n\n query = query.limit(limit);\n if (includeQueues) {\n // Must scope to the current space: `from({ allFeedsFromSpaces: true })` alone has no spaceIds, so the SQL\n // index returns nothing (see EntityMetaIndex.buildSourceCondition / early returns when spaceIds are empty).\n query = query.from(db, { includeFeeds: true });\n }\n\n yield* Database.flush();\n const results = yield* Database.query(query).run;\n if (includeContent) {\n return results.map((obj) => Entity.toJSON(obj));\n } else {\n return results.map((obj) => ({\n dxn: Obj.getURI(obj),\n typename: Obj.getTypename(obj),\n label: Obj.getLabel(obj),\n }));\n }\n }),\n ),\n);\n"],"mappings":";;;;;AAYA,IAAA,gBAAe,QAAM,KACnB,UAAU,YACR,OAAO,GAAG,WAAW,EAAE,IAAI,SAAS,UAAU,MAAM,iBAAiB,OAAO,QAAQ,IAAI,gBAAgB,SAAS;CAC/G,MAAM,EAAE,OAAO,OAAO,SAAS;CAC/B,IAAI;CACJ,IAAI,MAAM;EACR,QAAQ,MAAU,IAChB,GAAG,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,SAAS,MAAU,OAAO,OAAO,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CAC7F;EACA,IAAI,aAAa,KAAA,GAAW;GAI1B,MAAM,UAAS,OAHM,SAAS,MAC5B,MAAU,OAAO,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAC/E,CAAC,CAAC,IAAA,CACmB,MAAM,MAAM,KAAK,YAAY,CAAC,MAAM,QAAQ;GACjE,IAAI,CAAC,QACH,OAAO,OAAO,OAAO,qBAAK,IAAI,MAAM,UAAU,SAAS,WAAW,CAAC;GAErE,QAAQ,MAAM,OAAO,OAAO,KAAK,MAAM,CAAC;EAC1C;CACF,OAAO,IAAI,UAAU;EAInB,MAAM,UAAS,OAHM,SAAS,MAC5B,MAAU,OAAO,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAC/E,CAAC,CAAC,IAAA,CACmB,MAAM,MAAM,KAAK,YAAY,CAAC,MAAM,QAAQ;EACjE,IAAI,CAAC,QACH,OAAO,OAAO,OAAO,qBAAK,IAAI,MAAM,UAAU,SAAS,WAAW,CAAC;EAErE,QAAQ,MAAU,OAAO,OAAO,KAAK,MAAM,CAAC;CAC9C,OACE,QAAQ,MAAU,OAAO,OAAO,WAAW,CAAC;CAG9C,IAAI,WAAW,QAAQ,SAAS,GAC9B,QAAQ,MAAM,OAAO,OAAO,QAAQ,OAAO,CAAC;CAG9C,QAAQ,MAAM,MAAM,KAAK;CACzB,IAAI,eAGF,QAAQ,MAAM,KAAK,IAAI,EAAE,cAAc,KAAK,CAAC;CAG/C,OAAO,SAAS,MAAM;CACtB,MAAM,UAAU,OAAO,SAAS,MAAM,KAAK,CAAC,CAAC;CAC7C,IAAI,gBACF,OAAO,QAAQ,KAAK,QAAQ,OAAO,OAAO,GAAG,CAAC;MAE9C,OAAO,QAAQ,KAAK,SAAS;EAC3B,KAAK,IAAI,OAAO,GAAG;EACnB,UAAU,IAAI,YAAY,GAAG;EAC7B,OAAO,IAAI,SAAS,GAAG;CACzB,EAAE;AAEN,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { t as Memory } from "./chunk-Memory.mjs";
|
|
2
|
+
import { l as QueryMemories } from "./chunk-operations.mjs";
|
|
3
|
+
import { Operation } from "@dxos/compute";
|
|
4
|
+
import { Database, Entity, Filter, Query } from "@dxos/echo";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
//#region src/skills/memory/operations/query.ts
|
|
7
|
+
var query_default = QueryMemories.pipe(Operation.withHandler(Effect.fn(function* ({ text, limit = 10 }) {
|
|
8
|
+
let query;
|
|
9
|
+
if (text) query = Query.all(...text.split(" ").map((term) => Query.select(Filter.text(term, { type: "full-text" })))).select(Filter.type(Memory));
|
|
10
|
+
else query = Query.select(Filter.type(Memory));
|
|
11
|
+
query = query.limit(limit);
|
|
12
|
+
yield* Database.flush();
|
|
13
|
+
return (yield* Database.query(query).run).map((obj) => Entity.toJSON(obj));
|
|
14
|
+
})));
|
|
15
|
+
//#endregion
|
|
16
|
+
export { query_default as default };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=chunk-query2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-query2.mjs","names":[],"sources":["../../src/skills/memory/operations/query.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\nimport { Database, Entity, Filter, Query } from '@dxos/echo';\n\nimport { Memory } from '../../../types/Memory';\nimport { QueryMemories } from './definitions';\n\nexport default QueryMemories.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ text, limit = 10 }) {\n let query: Query.Any;\n if (text) {\n query = Query.all(\n // TODO(dmaretskyi): We should move this to the query executor layer.\n ...text.split(' ').map((term) => Query.select(Filter.text(term, { type: 'full-text' }))),\n ).select(Filter.type(Memory));\n } else {\n query = Query.select(Filter.type(Memory));\n }\n query = query.limit(limit);\n\n yield* Database.flush();\n const results = yield* Database.query(query).run;\n return results.map((obj) => Entity.toJSON(obj));\n }),\n ),\n);\n"],"mappings":";;;;;;AAYA,IAAA,gBAAe,cAAc,KAC3B,UAAU,YACR,OAAO,GAAG,WAAW,EAAE,MAAM,QAAQ,MAAM;CACzC,IAAI;CACJ,IAAI,MACF,QAAQ,MAAM,IAEZ,GAAG,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,SAAS,MAAM,OAAO,OAAO,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CACzF,CAAC,CAAC,OAAO,OAAO,KAAK,MAAM,CAAC;MAE5B,QAAQ,MAAM,OAAO,OAAO,KAAK,MAAM,CAAC;CAE1C,QAAQ,MAAM,MAAM,KAAK;CAEzB,OAAO,SAAS,MAAM;CAEtB,QAAO,OADgB,SAAS,MAAM,KAAK,CAAC,CAAC,IAAA,CAC9B,KAAK,QAAQ,OAAO,OAAO,GAAG,CAAC;AAChD,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { C as RelationCreate } from "./chunk-operations.mjs";
|
|
2
|
+
import { Operation } from "@dxos/compute";
|
|
3
|
+
import { safeParseJson } from "@dxos/util";
|
|
4
|
+
import { Database, Entity, Filter, Query, Relation, Scope, Type } from "@dxos/echo";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import { invariant } from "@dxos/invariant";
|
|
7
|
+
//#region src/skills/database/operations/relation-create.ts
|
|
8
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/compute/assistant-toolkit/src/skills/database/operations/relation-create.ts";
|
|
9
|
+
var relation_create_default = RelationCreate.pipe(Operation.withHandler(Effect.fn(function* ({ typename, source, target, properties }) {
|
|
10
|
+
const { db } = yield* Database.Service;
|
|
11
|
+
const foundSchema = (yield* Database.query(Query.select(Filter.type(Type.Type)).from(Scope.space(), Scope.registry())).run).find((t) => Type.getTypename(t) === typename);
|
|
12
|
+
invariant(foundSchema, `Schema not found: ${typename}`, {
|
|
13
|
+
"~LogMeta": "~LogMeta",
|
|
14
|
+
F: __dxlog_file,
|
|
15
|
+
L: 21,
|
|
16
|
+
S: this,
|
|
17
|
+
A: ["foundSchema", "`Schema not found: ${typename}`"]
|
|
18
|
+
});
|
|
19
|
+
invariant(Type.isRelation(foundSchema), "Schema is not a relation schema", {
|
|
20
|
+
"~LogMeta": "~LogMeta",
|
|
21
|
+
F: __dxlog_file,
|
|
22
|
+
L: 22,
|
|
23
|
+
S: this,
|
|
24
|
+
A: ["Type.isRelation(foundSchema)", "'Schema is not a relation schema'"]
|
|
25
|
+
});
|
|
26
|
+
const schema = foundSchema;
|
|
27
|
+
const sourceObj = yield* Database.load(source);
|
|
28
|
+
const targetObj = yield* Database.load(target);
|
|
29
|
+
const parsedProperties = typeof properties === "string" ? safeParseJson(properties, {}) : properties;
|
|
30
|
+
const relationProperties = parsedProperties !== null && typeof parsedProperties === "object" && !Array.isArray(parsedProperties) ? parsedProperties : {};
|
|
31
|
+
const relation = db.add(Relation.make(schema, {
|
|
32
|
+
[Relation.Source]: sourceObj,
|
|
33
|
+
[Relation.Target]: targetObj,
|
|
34
|
+
...relationProperties
|
|
35
|
+
}));
|
|
36
|
+
return Entity.toJSON(relation);
|
|
37
|
+
})));
|
|
38
|
+
//#endregion
|
|
39
|
+
export { relation_create_default as default };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=chunk-relation-create.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-relation-create.mjs","names":[],"sources":["../../src/skills/database/operations/relation-create.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\nimport { Database, Entity, Filter, Query, Relation, Scope, Type } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { safeParseJson } from '@dxos/util';\n\nimport { RelationCreate } from './definitions';\n\nexport default RelationCreate.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ typename, source, target, properties }) {\n const { db } = yield* Database.Service;\n const types = yield* Database.query(Query.select(Filter.type(Type.Type)).from(Scope.space(), Scope.registry()))\n .run;\n const foundSchema = types.find((t) => Type.getTypename(t) === typename);\n invariant(foundSchema, `Schema not found: ${typename}`);\n invariant(Type.isRelation(foundSchema), 'Schema is not a relation schema');\n const schema = foundSchema;\n\n const sourceObj = yield* Database.load(source);\n const targetObj = yield* Database.load(target);\n // A stringified non-object (e.g. '\"abc\"' or '[1,2]') parses successfully but must not be\n // spread onto the relation; only a plain object contributes properties.\n const parsedProperties = typeof properties === 'string' ? safeParseJson(properties, {}) : properties;\n const relationProperties =\n parsedProperties !== null && typeof parsedProperties === 'object' && !Array.isArray(parsedProperties)\n ? parsedProperties\n : {};\n const relation = db.add(\n Relation.make(schema, {\n [Relation.Source]: sourceObj,\n [Relation.Target]: targetObj,\n ...relationProperties,\n }),\n );\n return Entity.toJSON(relation);\n }),\n ),\n);\n"],"mappings":";;;;;;;;AAaA,IAAA,0BAAe,eAAe,KAC5B,UAAU,YACR,OAAO,GAAG,WAAW,EAAE,UAAU,QAAQ,QAAQ,cAAc;CAC7D,MAAM,EAAE,OAAO,OAAO,SAAS;CAG/B,MAAM,eAAc,OAFC,SAAS,MAAM,MAAM,OAAO,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAAC,CAAA,CAC3G,IAAA,CACuB,MAAM,MAAM,KAAK,YAAY,CAAC,MAAM,QAAQ;CACtE,UAAU,aAAa,qBAAqB,YAAS;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA,CAAA,eAAA,iCAAA;CAAA,CAAC;CACtD,UAAU,KAAK,WAAW,WAAW,GAAG,mCAAgC;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA,CAAA,gCAAA,mCAAA;CAAA,CAAC;CACzE,MAAM,SAAS;CAEf,MAAM,YAAY,OAAO,SAAS,KAAK,MAAM;CAC7C,MAAM,YAAY,OAAO,SAAS,KAAK,MAAM;CAG7C,MAAM,mBAAmB,OAAO,eAAe,WAAW,cAAc,YAAY,CAAC,CAAC,IAAI;CAC1F,MAAM,qBACJ,qBAAqB,QAAQ,OAAO,qBAAqB,YAAY,CAAC,MAAM,QAAQ,gBAAgB,IAChG,mBACA,CAAC;CACP,MAAM,WAAW,GAAG,IAClB,SAAS,KAAK,QAAQ;GACnB,SAAS,SAAS;GAClB,SAAS,SAAS;EACnB,GAAG;CACL,CAAC,CACH;CACA,OAAO,OAAO,OAAO,QAAQ;AAC/B,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { w as RelationDelete } from "./chunk-operations.mjs";
|
|
2
|
+
import { Operation } from "@dxos/compute";
|
|
3
|
+
import { Database } from "@dxos/echo";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
//#region src/skills/database/operations/relation-delete.ts
|
|
6
|
+
var relation_delete_default = RelationDelete.pipe(Operation.withHandler(Effect.fn(function* ({ rel }) {
|
|
7
|
+
const { db } = yield* Database.Service;
|
|
8
|
+
const relation = yield* Database.load(rel);
|
|
9
|
+
db.remove(relation);
|
|
10
|
+
})));
|
|
11
|
+
//#endregion
|
|
12
|
+
export { relation_delete_default as default };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=chunk-relation-delete.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-relation-delete.mjs","names":[],"sources":["../../src/skills/database/operations/relation-delete.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\nimport { Database } from '@dxos/echo';\n\nimport { RelationDelete } from './definitions';\n\nexport default RelationDelete.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ rel }) {\n const { db } = yield* Database.Service;\n const relation = yield* Database.load(rel);\n // TODO(dmaretskyi): Echo types broken.\n db.remove(relation as any);\n }),\n ),\n);\n"],"mappings":";;;;;AAWA,IAAA,0BAAe,eAAe,KAC5B,UAAU,YACR,OAAO,GAAG,WAAW,EAAE,OAAO;CAC5B,MAAM,EAAE,OAAO,OAAO,SAAS;CAC/B,MAAM,WAAW,OAAO,SAAS,KAAK,GAAG;CAEzC,GAAG,OAAO,QAAe;AAC3B,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { a as formatChecklist } from "./chunk-Chat.mjs";
|
|
2
|
+
import { a as loadForChat } from "./chunk-types.mjs";
|
|
3
|
+
import { G as Relay } from "./chunk-operations.mjs";
|
|
4
|
+
import { Operation } from "@dxos/compute";
|
|
5
|
+
import { trim } from "@dxos/util";
|
|
6
|
+
import * as Schema from "effect/Schema";
|
|
7
|
+
import { AiService } from "@dxos/ai";
|
|
8
|
+
import { getSession } from "@dxos/compute/AgentService";
|
|
9
|
+
import { Database, Obj } from "@dxos/echo";
|
|
10
|
+
import * as Effect from "effect/Effect";
|
|
11
|
+
import { log } from "@dxos/log";
|
|
12
|
+
import * as LanguageModel from "@effect/ai/LanguageModel";
|
|
13
|
+
import * as Prompt from "@effect/ai/Prompt";
|
|
14
|
+
//#region src/skills/agent/operations/relay.ts
|
|
15
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/compute/assistant-toolkit/src/skills/agent/operations/relay.ts";
|
|
16
|
+
/**
|
|
17
|
+
* The relay pattern (plugin-projects PLAN.md phase C): one trigger per subscribed feed runs this
|
|
18
|
+
* relay, which qualifies the event with a cheap model and, when relevant, forwards it onto the
|
|
19
|
+
* chat's durable session (the process input queue) — multiplexing and filtering in one construct,
|
|
20
|
+
* with no intermediate staging feed.
|
|
21
|
+
*/
|
|
22
|
+
var handler = Relay.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ chat: chatRef, event, prompt, qualify }) {
|
|
23
|
+
if (!event && !prompt) return yield* Effect.die(/* @__PURE__ */ new Error("Relay requires an event or a prompt."));
|
|
24
|
+
const chat = yield* Database.load(chatRef).pipe(Effect.catchTag("EntityNotFoundError", () => Effect.die(/* @__PURE__ */ new Error("Unable to load relay chat."))));
|
|
25
|
+
if (event && (qualify ?? true)) {
|
|
26
|
+
if (!(yield* qualifyEvent(chat, event).pipe(Effect.retry({ times: 1 }), Effect.catchAll((error) => Effect.sync(() => {
|
|
27
|
+
log.warn("relay qualification failed; forwarding event", { error }, {
|
|
28
|
+
"~LogMeta": "~LogMeta",
|
|
29
|
+
F: __dxlog_file,
|
|
30
|
+
L: 44,
|
|
31
|
+
S: this
|
|
32
|
+
});
|
|
33
|
+
return true;
|
|
34
|
+
}))))) return;
|
|
35
|
+
}
|
|
36
|
+
const session = yield* getSession(yield* Database.load(chat.feed).pipe(Effect.catchTag("EntityNotFoundError", () => Effect.die(/* @__PURE__ */ new Error("Unable to load relay chat feed.")))), { instructions: chat.instructions });
|
|
37
|
+
const content = prompt ?? JSON.stringify(event);
|
|
38
|
+
yield* session.submitPrompt([{
|
|
39
|
+
_tag: "text",
|
|
40
|
+
text: content,
|
|
41
|
+
disposition: "synthetic"
|
|
42
|
+
}]);
|
|
43
|
+
}, Effect.provide(AiService.model("com.anthropic.model.claude-sonnet-4-6.default")))), Operation.opaqueHandler);
|
|
44
|
+
/** Cheap-model relevance check, ported from the retired Qualifier's prompt (chat-centric per phase B). */
|
|
45
|
+
var qualifyEvent = (chat, event) => Effect.gen(function* () {
|
|
46
|
+
const agent = yield* loadForChat(chat);
|
|
47
|
+
const instructions = chat.instructions ? yield* Database.load(chat.instructions).pipe(Effect.orElseSucceed(() => void 0)) : void 0;
|
|
48
|
+
const instructionsText = instructions ? yield* Database.load(instructions.text).pipe(Effect.map((doc) => doc.content), Effect.catchTag("EntityNotFoundError", () => Effect.succeed(""))) : "";
|
|
49
|
+
const checklistText = yield* formatChecklist(chat);
|
|
50
|
+
const { value } = yield* Effect.scoped(LanguageModel.generateObject({
|
|
51
|
+
schema: Schema.Struct({ isRelevant: Schema.Boolean }),
|
|
52
|
+
prompt: Prompt.fromMessages([Prompt.systemMessage({ content: trim`
|
|
53
|
+
You are a qualifying agent that determines if the event is relevant to the agent.
|
|
54
|
+
Respond with true if the event is relevant to the agent, false otherwise.
|
|
55
|
+
If you are not sure, return true.
|
|
56
|
+
The qualified events will be forwarded to the larger agent that will process them.
|
|
57
|
+
<agent id="${agent ? Obj.getURI(agent) : "unknown"}" name="${agent?.name ?? ""}">
|
|
58
|
+
<instructions>
|
|
59
|
+
${instructionsText}
|
|
60
|
+
</instructions>
|
|
61
|
+
<checklist>
|
|
62
|
+
${checklistText}
|
|
63
|
+
</checklist>
|
|
64
|
+
</agent>
|
|
65
|
+
` }), Prompt.userMessage({ content: [Prompt.makePart("text", { text: trim`
|
|
66
|
+
<event>
|
|
67
|
+
${JSON.stringify(event, null, 2)}
|
|
68
|
+
</event>
|
|
69
|
+
` })] })])
|
|
70
|
+
}));
|
|
71
|
+
return value.isRelevant;
|
|
72
|
+
});
|
|
73
|
+
//#endregion
|
|
74
|
+
export { handler as default };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=chunk-relay.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-relay.mjs","names":[],"sources":["../../src/skills/agent/operations/relay.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as LanguageModel from '@effect/ai/LanguageModel';\nimport * as Prompt from '@effect/ai/Prompt';\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { AiService } from '@dxos/ai';\nimport { Operation } from '@dxos/compute';\nimport { getSession } from '@dxos/compute/AgentService';\nimport { Database, Obj } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { trim } from '@dxos/util';\n\nimport { Agent, Chat } from '../../../types';\nimport { Relay } from './definitions';\n\n/**\n * The relay pattern (plugin-projects PLAN.md phase C): one trigger per subscribed feed runs this\n * relay, which qualifies the event with a cheap model and, when relevant, forwards it onto the\n * chat's durable session (the process input queue) — multiplexing and filtering in one construct,\n * with no intermediate staging feed.\n */\nconst handler: Operation.WithHandler<typeof Relay> = Relay.pipe(\n Operation.withHandler(\n Effect.fnUntraced(\n function* ({ chat: chatRef, event, prompt, qualify }) {\n if (!event && !prompt) {\n return yield* Effect.die(new Error('Relay requires an event or a prompt.'));\n }\n const chat = yield* Database.load(chatRef).pipe(\n Effect.catchTag('EntityNotFoundError', () => Effect.die(new Error('Unable to load relay chat.'))),\n );\n\n if (event && (qualify ?? true)) {\n // Fail open (matching the prompt's \"if unsure, return true\"): a malformed model reply\n // forwards the event rather than silently dropping it.\n const relevant = yield* qualifyEvent(chat, event).pipe(\n Effect.retry({ times: 1 }),\n Effect.catchAll((error) =>\n Effect.sync(() => {\n log.warn('relay qualification failed; forwarding event', { error });\n return true;\n }),\n ),\n );\n if (!relevant) {\n return;\n }\n }\n\n const feed = yield* Database.load(chat.feed).pipe(\n Effect.catchTag('EntityNotFoundError', () => Effect.die(new Error('Unable to load relay chat feed.'))),\n );\n // The durable session recovers steering from its spawn annotation; passing the ref here\n // keeps the reuse identity honest (a repointed ref respawns the process).\n const session = yield* getSession(feed, { instructions: chat.instructions });\n const content = prompt ?? JSON.stringify(event);\n yield* session.submitPrompt([{ _tag: 'text', text: content, disposition: 'synthetic' }]);\n },\n Effect.provide(AiService.model('com.anthropic.model.claude-sonnet-4-6.default')),\n ),\n ),\n Operation.opaqueHandler,\n);\n\n/** Cheap-model relevance check, ported from the retired Qualifier's prompt (chat-centric per phase B). */\nconst qualifyEvent = (chat: Chat.Chat, event: unknown) =>\n Effect.gen(function* () {\n const agent = yield* Agent.loadForChat(chat);\n const instructions = chat.instructions\n ? yield* Database.load(chat.instructions).pipe(Effect.orElseSucceed(() => undefined))\n : undefined;\n const instructionsText = instructions\n ? yield* Database.load(instructions.text).pipe(\n Effect.map((doc) => doc.content),\n Effect.catchTag('EntityNotFoundError', () => Effect.succeed('')),\n )\n : '';\n const checklistText = yield* Chat.formatChecklist(chat);\n\n const { value } = yield* Effect.scoped(\n LanguageModel.generateObject({\n schema: Schema.Struct({\n isRelevant: Schema.Boolean,\n }),\n prompt: Prompt.fromMessages([\n Prompt.systemMessage({\n content: trim`\n You are a qualifying agent that determines if the event is relevant to the agent.\n Respond with true if the event is relevant to the agent, false otherwise.\n If you are not sure, return true.\n The qualified events will be forwarded to the larger agent that will process them.\n <agent id=\"${agent ? Obj.getURI(agent) : 'unknown'}\" name=\"${agent?.name ?? ''}\">\n <instructions>\n ${instructionsText}\n </instructions>\n <checklist>\n ${checklistText}\n </checklist>\n </agent>\n `,\n }),\n Prompt.userMessage({\n content: [\n Prompt.makePart('text', {\n text: trim`\n <event>\n ${JSON.stringify(event, null, 2)}\n </event>\n `,\n }),\n ],\n }),\n ]),\n }),\n );\n\n return value.isRelevant;\n });\n\nexport default handler;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAyBA,IAAM,UAA+C,MAAM,KACzD,UAAU,YACR,OAAO,WACL,WAAW,EAAE,MAAM,SAAS,OAAO,QAAQ,WAAW;CACpD,IAAI,CAAC,SAAS,CAAC,QACb,OAAO,OAAO,OAAO,oBAAI,IAAI,MAAM,sCAAsC,CAAC;CAE5E,MAAM,OAAO,OAAO,SAAS,KAAK,OAAO,CAAC,CAAC,KACzC,OAAO,SAAS,6BAA6B,OAAO,oBAAI,IAAI,MAAM,4BAA4B,CAAC,CAAC,CAClG;CAEA,IAAI,UAAU,WAAW;MAYnB,EAAC,OATmB,aAAa,MAAM,KAAK,CAAC,CAAC,KAChD,OAAO,MAAM,EAAE,OAAO,EAAE,CAAC,GACzB,OAAO,UAAU,UACf,OAAO,WAAW;GAChB,IAAI,KAAK,gDAAgD,EAAE,MAAM,GAAA;IAAA,YAAA;IAAA,GAAA;IAAA,GAAA;IAAA,GAAA;GAAA,CAAC;GAClE,OAAO;EACT,CAAC,CACH,CACF,IAEE;CAAA;CASJ,MAAM,UAAU,OAAO,WAAW,OALd,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,KAC3C,OAAO,SAAS,6BAA6B,OAAO,oBAAI,IAAI,MAAM,iCAAiC,CAAC,CAAC,CACvG,GAGwC,EAAE,cAAc,KAAK,aAAa,CAAC;CAC3E,MAAM,UAAU,UAAU,KAAK,UAAU,KAAK;CAC9C,OAAO,QAAQ,aAAa,CAAC;EAAE,MAAM;EAAQ,MAAM;EAAS,aAAa;CAAY,CAAC,CAAC;AACzF,GACA,OAAO,QAAQ,UAAU,MAAM,+CAA+C,CAAC,CACjF,CACF,GACA,UAAU,aACZ;;AAGA,IAAM,gBAAgB,MAAiB,UACrC,OAAO,IAAI,aAAa;CACtB,MAAM,QAAQ,OAAO,YAAkB,IAAI;CAC3C,MAAM,eAAe,KAAK,eACtB,OAAO,SAAS,KAAK,KAAK,YAAY,CAAC,CAAC,KAAK,OAAO,oBAAoB,KAAA,CAAS,CAAC,IAClF,KAAA;CACJ,MAAM,mBAAmB,eACrB,OAAO,SAAS,KAAK,aAAa,IAAI,CAAC,CAAC,KACtC,OAAO,KAAK,QAAQ,IAAI,OAAO,GAC/B,OAAO,SAAS,6BAA6B,OAAO,QAAQ,EAAE,CAAC,CACjE,IACA;CACJ,MAAM,gBAAgB,OAAO,gBAAqB,IAAI;CAEtD,MAAM,EAAE,UAAU,OAAO,OAAO,OAC9B,cAAc,eAAe;EAC3B,QAAQ,OAAO,OAAO,EACpB,YAAY,OAAO,QACrB,CAAC;EACD,QAAQ,OAAO,aAAa,CAC1B,OAAO,cAAc,EACnB,SAAS,IAAI;;;;;2BAKE,QAAQ,IAAI,OAAO,KAAK,IAAI,UAAU,UAAU,OAAO,QAAQ,GAAG;;kBAE3E,iBAAgB;;;oBAGd,cAAa;;;cAIvB,CAAC,GACD,OAAO,YAAY,EACjB,SAAS,CACP,OAAO,SAAS,QAAQ,EACtB,MAAM,IAAI;;sBAEJ,KAAK,UAAU,OAAO,MAAM,CAAC,EAAC;;kBAGtC,CAAC,CACH,EACF,CAAC,CACH,CAAC;CACH,CAAC,CACH;CAEA,OAAO,MAAM;AACf,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __exportAll = (all, no_symbols) => {
|
|
4
|
+
let target = {};
|
|
5
|
+
for (var name in all) __defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true
|
|
8
|
+
});
|
|
9
|
+
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
10
|
+
return target;
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { __exportAll as t };
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { t as Chat, u as PromptError } from "./chunk-Chat.mjs";
|
|
2
|
+
import { n as RunInstructions } from "./chunk-operations.mjs";
|
|
3
|
+
import { Operation, Template, Trace } from "@dxos/compute";
|
|
4
|
+
import { trim } from "@dxos/util";
|
|
5
|
+
import * as Schema from "effect/Schema";
|
|
6
|
+
import { AiService, OpaqueToolkit } from "@dxos/ai";
|
|
7
|
+
import { AiSession, getOperationFromTool, makeToolExecutionService, makeToolResolverFromOperations } from "@dxos/assistant";
|
|
8
|
+
import { Database, Feed, JsonSchema, Obj, Ref } from "@dxos/echo";
|
|
9
|
+
import { DXN as DXN$1 } from "@dxos/keys";
|
|
10
|
+
import * as Effect from "effect/Effect";
|
|
11
|
+
import { EffectEx } from "@dxos/effect";
|
|
12
|
+
import * as Toolkit from "@effect/ai/Toolkit";
|
|
13
|
+
import * as Layer from "effect/Layer";
|
|
14
|
+
import { log } from "@dxos/log";
|
|
15
|
+
import { invariant } from "@dxos/invariant";
|
|
16
|
+
import * as Tool from "@effect/ai/Tool";
|
|
17
|
+
import * as Deferred from "effect/Deferred";
|
|
18
|
+
import * as Option from "effect/Option";
|
|
19
|
+
//#region src/operations/run-instructions.ts
|
|
20
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/compute/assistant-toolkit/src/operations/run-instructions.ts";
|
|
21
|
+
var DEFAULT_MODEL = DXN$1.make("com.anthropic.model.claude-opus-4-8.default");
|
|
22
|
+
var routineOutputSchema = (output) => {
|
|
23
|
+
if ("$id" in output && output.$id === "/schemas/unknown") return Schema.Any;
|
|
24
|
+
return JsonSchema.toEffectSchema(output);
|
|
25
|
+
};
|
|
26
|
+
var run_instructions_default = RunInstructions.pipe(Operation.withHandler(Effect.fnUntraced(function* (data) {
|
|
27
|
+
log.info("processing input", { input: data.input }, {
|
|
28
|
+
"~LogMeta": "~LogMeta",
|
|
29
|
+
F: __dxlog_file,
|
|
30
|
+
L: 46,
|
|
31
|
+
S: this
|
|
32
|
+
});
|
|
33
|
+
const input = yield* Ref.isRef(data.input) ? Database.load(data.input).pipe(Effect.map(Obj.toJSON)) : Effect.succeed(data.input);
|
|
34
|
+
yield* Database.flush();
|
|
35
|
+
const instructions = yield* Database.load(data.instructions);
|
|
36
|
+
yield* Trace.emitStatus(`Running ${instructions.id}`);
|
|
37
|
+
log.info("starting agent", {
|
|
38
|
+
instructions: instructions.id,
|
|
39
|
+
input
|
|
40
|
+
}, {
|
|
41
|
+
"~LogMeta": "~LogMeta",
|
|
42
|
+
F: __dxlog_file,
|
|
43
|
+
L: 56,
|
|
44
|
+
S: this
|
|
45
|
+
});
|
|
46
|
+
const skillRefs = yield* Effect.filter(instructions.skills, (ref) => Database.load(ref).pipe(Effect.as(true), Effect.catchTag("EntityNotFoundError", () => Effect.succeed(false))));
|
|
47
|
+
const objectRefs = yield* Effect.filter(instructions.objects ?? [], (ref) => Database.load(ref).pipe(Effect.as(true), Effect.catchTag("EntityNotFoundError", () => Effect.succeed(false))));
|
|
48
|
+
const textDoc = yield* Database.load(instructions.text);
|
|
49
|
+
let promptText = Template.process(textDoc.content, input);
|
|
50
|
+
if (input !== void 0) promptText += `\n<input>${JSON.stringify(input)}</input>`;
|
|
51
|
+
let systemText = trim`
|
|
52
|
+
You are an agent running in the non-interactive mode.
|
|
53
|
+
The user is unable to see what you are doing, and cannot answer any questions.
|
|
54
|
+
Do not ask questions.
|
|
55
|
+
Complete the task before you, and at the end call [completeJob] with the output.
|
|
56
|
+
If you are unable to complete the task, call [completeJob] with the failure reason.
|
|
57
|
+
If no output is required, call [completeJob] with an empty object: {}
|
|
58
|
+
Do not stop until you call [completeJob].
|
|
59
|
+
`;
|
|
60
|
+
if (data.systemInstructions) systemText += `\n${data.systemInstructions}`;
|
|
61
|
+
const modelLayer = AiService.model(DXN$1.getName(data.model ?? DEFAULT_MODEL));
|
|
62
|
+
let feed;
|
|
63
|
+
if (data.chat) {
|
|
64
|
+
const chat = yield* Database.load(data.chat);
|
|
65
|
+
invariant(Obj.instanceOf(Chat, chat), "Expected Chat object.", {
|
|
66
|
+
"~LogMeta": "~LogMeta",
|
|
67
|
+
F: __dxlog_file,
|
|
68
|
+
L: 102,
|
|
69
|
+
S: this,
|
|
70
|
+
A: ["Obj.instanceOf(Chat.Chat, chat)", "'Expected Chat object.'"]
|
|
71
|
+
});
|
|
72
|
+
feed = yield* Database.load(chat.feed);
|
|
73
|
+
} else feed = yield* Database.add(Feed.make());
|
|
74
|
+
const resultSink = yield* Deferred.make();
|
|
75
|
+
const promptToolkit = makePromptAgentToolkit({
|
|
76
|
+
output: routineOutputSchema(instructions.output),
|
|
77
|
+
resultSink
|
|
78
|
+
});
|
|
79
|
+
const runtime = yield* Effect.runtime();
|
|
80
|
+
const session = yield* EffectEx.acquireReleaseResource(() => new AiSession.Session({
|
|
81
|
+
feed,
|
|
82
|
+
runtime
|
|
83
|
+
}));
|
|
84
|
+
yield* Effect.promise(() => session.context.bind({
|
|
85
|
+
skills: skillRefs,
|
|
86
|
+
objects: data.chat ? [...objectRefs, data.chat] : objectRefs
|
|
87
|
+
}));
|
|
88
|
+
yield* session.createRequest({
|
|
89
|
+
prompt: promptText,
|
|
90
|
+
system: systemText,
|
|
91
|
+
toolkit: promptToolkit
|
|
92
|
+
}).pipe(Effect.provide(Layer.mergeAll(modelLayer, ToolExecutionService({ feed }), makeToolResolverFromOperations())));
|
|
93
|
+
return yield* Deferred.poll(resultSink).pipe(Effect.flatten, Effect.flatten, Effect.catchTag("NoSuchElementException", () => Effect.gen(function* () {
|
|
94
|
+
yield* session.createRequest({
|
|
95
|
+
prompt: "You must signal task completion by calling [completeJob] with the output or failure reason.",
|
|
96
|
+
system: systemText,
|
|
97
|
+
toolkit: promptToolkit
|
|
98
|
+
}).pipe(Effect.provide(Layer.mergeAll(modelLayer, ToolExecutionService({ feed }), makeToolResolverFromOperations())));
|
|
99
|
+
return yield* Deferred.poll(resultSink).pipe(Effect.flatten, Effect.flatten, Effect.catchTag("NoSuchElementException", () => Effect.fail(new PromptError("Agent did not signal task completion.", {}))));
|
|
100
|
+
})));
|
|
101
|
+
}, Effect.tapBoth({
|
|
102
|
+
onSuccess: () => Database.flush(),
|
|
103
|
+
onFailure: () => Database.flush()
|
|
104
|
+
}), Effect.scoped)), Operation.opaqueHandler);
|
|
105
|
+
var makePromptAgentToolkit = (options) => {
|
|
106
|
+
class PromptAgentToolkit extends Toolkit.make(Tool.make("completeJob", { parameters: {
|
|
107
|
+
success: Schema.optional(options.output),
|
|
108
|
+
failure: Schema.optional(Schema.Struct({
|
|
109
|
+
message: Schema.String.annotations({ description: "Short message describing the error." }),
|
|
110
|
+
description: Schema.optional(Schema.String).annotations({ description: "Optional longer message describing in detail what went wrong" })
|
|
111
|
+
}))
|
|
112
|
+
} })) {}
|
|
113
|
+
const layer = PromptAgentToolkit.toLayer({ completeJob: Effect.fnUntraced(function* (result) {
|
|
114
|
+
if (result.failure) yield* Deferred.fail(options.resultSink, new PromptError(result.failure.message, { description: result.failure.description }));
|
|
115
|
+
else yield* Deferred.succeed(options.resultSink, result.success);
|
|
116
|
+
}) });
|
|
117
|
+
return OpaqueToolkit.make(PromptAgentToolkit, layer);
|
|
118
|
+
};
|
|
119
|
+
var ToolExecutionService = ({ feed }) => Layer.unwrapEffect(Effect.gen(function* () {
|
|
120
|
+
const operationInvoker = yield* Operation.Service;
|
|
121
|
+
return makeToolExecutionService({ invoke: (tool, input) => Effect.gen(function* () {
|
|
122
|
+
const operationDef = getOperationFromTool(tool).pipe(Option.getOrThrow);
|
|
123
|
+
log("invoking operation", {
|
|
124
|
+
operationDef,
|
|
125
|
+
input
|
|
126
|
+
}, {
|
|
127
|
+
"~LogMeta": "~LogMeta",
|
|
128
|
+
F: __dxlog_file,
|
|
129
|
+
L: 225,
|
|
130
|
+
S: this
|
|
131
|
+
});
|
|
132
|
+
const result = yield* operationInvoker.invoke(operationDef, input, { conversation: Obj.getURI(feed) }).pipe(Effect.orDie);
|
|
133
|
+
log("result", { result }, {
|
|
134
|
+
"~LogMeta": "~LogMeta",
|
|
135
|
+
F: __dxlog_file,
|
|
136
|
+
L: 231,
|
|
137
|
+
S: this
|
|
138
|
+
});
|
|
139
|
+
return result;
|
|
140
|
+
}) });
|
|
141
|
+
}));
|
|
142
|
+
//#endregion
|
|
143
|
+
export { run_instructions_default as default };
|
|
144
|
+
|
|
145
|
+
//# sourceMappingURL=chunk-run-instructions.mjs.map
|