@dxos/assistant-toolkit 0.10.0 → 0.11.1
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
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2026 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { describe, expect, it } from '@effect/vitest';
|
|
6
|
-
import * as Effect from 'effect/Effect';
|
|
7
|
-
import * as Layer from 'effect/Layer';
|
|
8
|
-
|
|
9
|
-
import { OpaqueToolkit } from '@dxos/ai';
|
|
10
|
-
import { Skill } from '@dxos/compute';
|
|
11
|
-
import { Database, Feed, Filter, Obj, Query } from '@dxos/echo';
|
|
12
|
-
import { TestHelpers } from '@dxos/effect/testing';
|
|
13
|
-
import { AgentService } from '@dxos/functions-runtime';
|
|
14
|
-
import { AssistantTestLayer } from '@dxos/functions-runtime/testing';
|
|
15
|
-
import { EntityId } from '@dxos/keys';
|
|
16
|
-
|
|
17
|
-
import { Memory } from '../../types/Memory';
|
|
18
|
-
import { WebSearchToolkit } from '../websearch';
|
|
19
|
-
import { MemoryHandlers } from './operations';
|
|
20
|
-
import MemorySkill from './skill';
|
|
21
|
-
|
|
22
|
-
EntityId.dangerouslyDisableRandomness();
|
|
23
|
-
|
|
24
|
-
const TestLayer = AssistantTestLayer({
|
|
25
|
-
operationHandlers: MemoryHandlers,
|
|
26
|
-
types: [Memory, Skill.Skill, Feed.Feed],
|
|
27
|
-
skills: [MemorySkill.make()],
|
|
28
|
-
tracing: 'pretty',
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
const TestLayerWithWebSearch = AssistantTestLayer({
|
|
32
|
-
operationHandlers: MemoryHandlers,
|
|
33
|
-
toolkits: [OpaqueToolkit.make(WebSearchToolkit, Layer.empty)],
|
|
34
|
-
types: [Memory, Skill.Skill, Feed.Feed],
|
|
35
|
-
skills: [MemorySkill.make()],
|
|
36
|
-
tracing: 'pretty',
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
describe('Memory Skill', () => {
|
|
40
|
-
it.effect(
|
|
41
|
-
'save: saves a memory',
|
|
42
|
-
Effect.fnUntraced(
|
|
43
|
-
function* (_) {
|
|
44
|
-
const agent = yield* AgentService.createSession({
|
|
45
|
-
skills: [MemorySkill.make()],
|
|
46
|
-
});
|
|
47
|
-
yield* agent.submitPrompt('Remember that my favorite programming language is TypeScript.');
|
|
48
|
-
yield* agent.waitForCompletion();
|
|
49
|
-
const memories = yield* Database.query(Query.select(Filter.type(Memory))).run;
|
|
50
|
-
expect(memories.length).toBeGreaterThanOrEqual(1);
|
|
51
|
-
},
|
|
52
|
-
Effect.provide(TestLayer),
|
|
53
|
-
TestHelpers.provideTestContext,
|
|
54
|
-
),
|
|
55
|
-
{ timeout: 60_000 },
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
it.effect(
|
|
59
|
-
'query: searches memories by text',
|
|
60
|
-
Effect.fnUntraced(
|
|
61
|
-
function* (_) {
|
|
62
|
-
yield* Database.add(
|
|
63
|
-
Obj.make(Memory, {
|
|
64
|
-
title: 'Favorite color',
|
|
65
|
-
content: 'The user prefers blue.',
|
|
66
|
-
}),
|
|
67
|
-
);
|
|
68
|
-
yield* Database.add(
|
|
69
|
-
Obj.make(Memory, {
|
|
70
|
-
title: 'Meeting notes',
|
|
71
|
-
content: 'Discussed project timeline with Alice.',
|
|
72
|
-
}),
|
|
73
|
-
);
|
|
74
|
-
const agent = yield* AgentService.createSession({
|
|
75
|
-
skills: [MemorySkill.make()],
|
|
76
|
-
});
|
|
77
|
-
yield* agent.submitPrompt('Search your memories for anything about colors.');
|
|
78
|
-
yield* agent.waitForCompletion();
|
|
79
|
-
},
|
|
80
|
-
Effect.provide(TestLayer),
|
|
81
|
-
TestHelpers.provideTestContext,
|
|
82
|
-
),
|
|
83
|
-
{ timeout: 60_000 },
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
it.effect(
|
|
87
|
-
'delete: removes a memory',
|
|
88
|
-
Effect.fnUntraced(
|
|
89
|
-
function* (_) {
|
|
90
|
-
yield* Database.add(
|
|
91
|
-
Obj.make(Memory, {
|
|
92
|
-
title: 'Outdated fact',
|
|
93
|
-
content: 'The sky is green.',
|
|
94
|
-
}),
|
|
95
|
-
);
|
|
96
|
-
const agent = yield* AgentService.createSession({
|
|
97
|
-
skills: [MemorySkill.make()],
|
|
98
|
-
});
|
|
99
|
-
yield* agent.submitPrompt('Delete the memory about "Outdated fact".');
|
|
100
|
-
yield* agent.waitForCompletion();
|
|
101
|
-
const memories = yield* Database.query(Query.select(Filter.type(Memory))).run;
|
|
102
|
-
const found = memories.find((memory) => memory.title === 'Outdated fact');
|
|
103
|
-
expect(found).toBeUndefined();
|
|
104
|
-
},
|
|
105
|
-
Effect.provide(TestLayer),
|
|
106
|
-
TestHelpers.provideTestContext,
|
|
107
|
-
),
|
|
108
|
-
{ timeout: 60_000 },
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
// TODO(dmaretskyi): Flaky. The model does not reliably call save-memory after a provider-executed web search.
|
|
112
|
-
it.effect.skip(
|
|
113
|
-
'natural: saves memories from a conversation with web search',
|
|
114
|
-
Effect.fnUntraced(
|
|
115
|
-
function* (_) {
|
|
116
|
-
const agent = yield* AgentService.createSession({
|
|
117
|
-
skills: [MemorySkill.make()],
|
|
118
|
-
});
|
|
119
|
-
yield* agent.submitPrompt(
|
|
120
|
-
"I'm going to LA next week. Find me some good hotels and remember the recommendations.",
|
|
121
|
-
);
|
|
122
|
-
yield* agent.waitForCompletion();
|
|
123
|
-
const memories = yield* Database.query(Query.select(Filter.type(Memory))).run;
|
|
124
|
-
expect(memories.length).toBeGreaterThanOrEqual(1);
|
|
125
|
-
const hasLAMemory = memories.some(
|
|
126
|
-
(memory) =>
|
|
127
|
-
memory.title.toLowerCase().includes('la') ||
|
|
128
|
-
memory.title.toLowerCase().includes('los angeles') ||
|
|
129
|
-
memory.content.toLowerCase().includes('hotel'),
|
|
130
|
-
);
|
|
131
|
-
expect(hasLAMemory).toBe(true);
|
|
132
|
-
},
|
|
133
|
-
Effect.provide(TestLayerWithWebSearch),
|
|
134
|
-
TestHelpers.provideTestContext,
|
|
135
|
-
),
|
|
136
|
-
{ timeout: 120_000 },
|
|
137
|
-
);
|
|
138
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"conversations":[{"parameters":{"model":"dxn:com.anthropic.model.claudeSonnet46","stream":false,"tools":[]},"prompt":{"content":[{"role":"system","content":"You decide whether an agent should stop or continue working on its plan, given the conversation\nso far and the agent's remaining plan tasks.\nReply with exactly one word: \"stop\" or \"continue\". Do not use tools. Do not add explanation.","options":{}},{"role":"user","content":"The agent is about to finish, but its plan still has incomplete tasks:\n\n<plan>\n- **TODO**: Buy eggs <!-- id=task-1 -->\n- **IN-PROGRESS**: Crack eggs <!-- id=task-2 -->\n</plan>\n\nShould the agent STOP now (no more work needed) or CONTINUE working on the plan?\nReply with exactly one word: \"stop\" or \"continue\".","options":{}}]},"response":[{"type":"response-metadata","id":"msg_015FvDvL8TEw6YqGBNLs8yRs","modelId":"claude-sonnet-4-5-20250929","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"text","text":"continue","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":151,"outputTokens":4,"totalTokens":155,"cachedInputTokens":0},"metadata":{"anthropic":{"usage":{"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":151,"output_tokens":4,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"dxn:com.anthropic.model.claude-sonnet-4-6.default","stream":false,"tools":[]},"prompt":{"content":[{"role":"system","content":"You decide whether an agent should stop or continue working on its plan, given the conversation\nso far and the agent's remaining plan tasks.\nReply with exactly one word: \"stop\" or \"continue\". Do not use tools. Do not add explanation.","options":{}},{"role":"user","content":"The agent is about to finish, but its plan still has incomplete tasks:\n\n<plan>\n- **TODO**: Buy eggs <!-- id=task-1 -->\n- **IN-PROGRESS**: Crack eggs <!-- id=task-2 -->\n</plan>\n\nShould the agent STOP now (no more work needed) or CONTINUE working on the plan?\nReply with exactly one word: \"stop\" or \"continue\".","options":{}}]},"response":[{"type":"response-metadata","id":"msg_01NSkcUieedKCREEajLSJWYs","modelId":"claude-sonnet-4-6","timestamp":"1970-01-01T00:00:00.000Z","metadata":{}},{"type":"text","text":"continue","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":152,"outputTokens":4,"totalTokens":156,"cachedInputTokens":0},"metadata":{"anthropic":{"usage":{"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":152,"output_tokens":4,"server_tool_use":null,"service_tier":"standard"}}}}]}]}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2026 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { describe, it, test } from '@effect/vitest';
|
|
6
|
-
import * as Effect from 'effect/Effect';
|
|
7
|
-
|
|
8
|
-
import { Operation, Process, Skill } from '@dxos/compute';
|
|
9
|
-
import { ProcessManager } from '@dxos/compute-runtime';
|
|
10
|
-
import { getSession } from '@dxos/compute/AgentService';
|
|
11
|
-
import { Database, Feed, Obj } from '@dxos/echo';
|
|
12
|
-
import { TestHelpers } from '@dxos/effect/testing';
|
|
13
|
-
import { AssistantTestLayer } from '@dxos/functions-runtime/testing';
|
|
14
|
-
import { invariant } from '@dxos/invariant';
|
|
15
|
-
import { EntityId } from '@dxos/keys';
|
|
16
|
-
|
|
17
|
-
import { Agent, Chat, Plan } from '../../types';
|
|
18
|
-
import { PlanningHandlers, PlanningOperations } from './operations';
|
|
19
|
-
import PlanningSkill from './skill';
|
|
20
|
-
|
|
21
|
-
EntityId.dangerouslyDisableRandomness();
|
|
22
|
-
|
|
23
|
-
const TestLayer = AssistantTestLayer({
|
|
24
|
-
operationHandlers: PlanningHandlers,
|
|
25
|
-
types: [Agent.Agent, Plan.Plan, Chat.Chat, Chat.CompanionTo, Skill.Skill, Feed.Feed],
|
|
26
|
-
skills: [PlanningSkill.make()],
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
describe('Planning skill', () => {
|
|
30
|
-
// The hook fires the plan-reminder operation only while the plan has open tasks; cover that
|
|
31
|
-
// predicate directly so the branch is verified without an agent turn.
|
|
32
|
-
describe('hasIncompleteTasks', () => {
|
|
33
|
-
test('is true while any task is todo or in-progress', ({ expect }) => {
|
|
34
|
-
expect(Plan.hasIncompleteTasks(makePlan(['todo']))).toBe(true);
|
|
35
|
-
expect(Plan.hasIncompleteTasks(makePlan(['done', 'in-progress']))).toBe(true);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
test('is false when every task is done', ({ expect }) => {
|
|
39
|
-
expect(Plan.hasIncompleteTasks(makePlan(['done', 'done']))).toBe(false);
|
|
40
|
-
expect(Plan.hasIncompleteTasks(makePlan([]))).toBe(false);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
// The end-request hook reads the plan (Tier A), runs an ephemeral stop/continue check over the
|
|
45
|
-
// conversation history (LanguageModel, memoized), and on "continue" reaches the live host through
|
|
46
|
-
// HarnessService Tier B (like the alarm skill's set-alarm) to enqueue a reminder. Spawning a
|
|
47
|
-
// host on the agent's chat feed and invoking the operation against that conversation dispatches
|
|
48
|
-
// over the process RPC loopback; the host staying live proves the read, the check, and the enqueue
|
|
49
|
-
// resolved end-to-end without failing the process.
|
|
50
|
-
describe('plan-reminder hook (end-request, Tier B)', () => {
|
|
51
|
-
it.scoped(
|
|
52
|
-
'enqueues a continuation reminder when the plan has incomplete tasks',
|
|
53
|
-
Effect.fnUntraced(
|
|
54
|
-
function* ({ expect }) {
|
|
55
|
-
const { conversation, host } = yield* setupAgentWithLiveHost([
|
|
56
|
-
{ id: Plan.TaskId.make('task-1'), title: 'Buy eggs', status: 'todo' },
|
|
57
|
-
{ id: Plan.TaskId.make('task-2'), title: 'Crack eggs', status: 'in-progress' },
|
|
58
|
-
]);
|
|
59
|
-
|
|
60
|
-
yield* Operation.invoke(PlanningOperations.PlanReminder, {}).pipe(
|
|
61
|
-
Effect.provide(Operation.withInvocationOptions({ conversation })),
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
expect(host.status.state).not.toBe(Process.State.FAILED);
|
|
65
|
-
expect(host.status.state).not.toBe(Process.State.TERMINATED);
|
|
66
|
-
},
|
|
67
|
-
Effect.provide(TestLayer),
|
|
68
|
-
TestHelpers.provideTestContext,
|
|
69
|
-
),
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
it.scoped(
|
|
73
|
-
'is a no-op when the plan is complete',
|
|
74
|
-
Effect.fnUntraced(
|
|
75
|
-
function* ({ expect }) {
|
|
76
|
-
const { conversation, host } = yield* setupAgentWithLiveHost([
|
|
77
|
-
{ id: Plan.TaskId.make('task-1'), title: 'Buy eggs', status: 'done' },
|
|
78
|
-
]);
|
|
79
|
-
|
|
80
|
-
yield* Operation.invoke(PlanningOperations.PlanReminder, {}).pipe(
|
|
81
|
-
Effect.provide(Operation.withInvocationOptions({ conversation })),
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
expect(host.status.state).not.toBe(Process.State.FAILED);
|
|
85
|
-
expect(host.status.state).not.toBe(Process.State.TERMINATED);
|
|
86
|
-
},
|
|
87
|
-
Effect.provide(TestLayer),
|
|
88
|
-
TestHelpers.provideTestContext,
|
|
89
|
-
),
|
|
90
|
-
);
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
const makePlan = (statuses: readonly Plan.TaskStatus[]): Plan.Plan =>
|
|
95
|
-
Plan.makePlan({ tasks: statuses.map((status, index) => ({ title: `Task ${index}`, status })) });
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Creates an agent (with the planning skill and a seeded plan) bound to its chat feed, then
|
|
99
|
-
* spawns a live host process on that feed so HarnessService Tier B is reachable for the conversation.
|
|
100
|
-
*/
|
|
101
|
-
const setupAgentWithLiveHost = (tasks: readonly Plan.Task[]) =>
|
|
102
|
-
Effect.gen(function* () {
|
|
103
|
-
const agent = yield* Agent.makeInitialized({ name: 'Planner', instructions: 'Test.' }, PlanningSkill.make());
|
|
104
|
-
const chat = yield* Database.load(agent.chat!);
|
|
105
|
-
const plan = yield* Chat.ensurePlan(chat);
|
|
106
|
-
Obj.update(plan, (plan) => {
|
|
107
|
-
plan.tasks.push(...tasks);
|
|
108
|
-
});
|
|
109
|
-
yield* Database.flush();
|
|
110
|
-
|
|
111
|
-
const chatFeed = agent.chat?.target?.feed?.target;
|
|
112
|
-
invariant(chatFeed, 'Agent chat feed not found.');
|
|
113
|
-
|
|
114
|
-
// Spawns (and stamps) the host process that owns the conversation's harness.
|
|
115
|
-
yield* getSession(chatFeed);
|
|
116
|
-
|
|
117
|
-
const conversation = Obj.getURI(chatFeed);
|
|
118
|
-
const processManager = yield* ProcessManager.Service;
|
|
119
|
-
const [host] = yield* processManager.list({ target: conversation });
|
|
120
|
-
invariant(host, 'Host process not found.');
|
|
121
|
-
|
|
122
|
-
return { conversation, host };
|
|
123
|
-
});
|
package/src/types/Plan.ts
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2026 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
// @import-as-namespace
|
|
6
|
-
|
|
7
|
-
import * as Schema from 'effect/Schema';
|
|
8
|
-
|
|
9
|
-
import { Process } from '@dxos/compute';
|
|
10
|
-
import { Annotation, DXN, Obj, Type } from '@dxos/echo';
|
|
11
|
-
|
|
12
|
-
export const TaskId = Schema.String.pipe(Schema.brand('@dxos/assistant-toolkit/TaskId'));
|
|
13
|
-
export type TaskId = Schema.Schema.Type<typeof TaskId>;
|
|
14
|
-
|
|
15
|
-
export const Task = Schema.Struct({
|
|
16
|
-
/**
|
|
17
|
-
* Short task ID unique within the plan.
|
|
18
|
-
*/
|
|
19
|
-
id: TaskId,
|
|
20
|
-
|
|
21
|
-
title: Schema.String.annotations({
|
|
22
|
-
description: 'Task title and description.',
|
|
23
|
-
}),
|
|
24
|
-
|
|
25
|
-
status: Schema.Literal('todo', 'in-progress', 'done', 'failed'),
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Whether this task was handed to a sub-agent via the delegation tool. Only delegated tasks are
|
|
29
|
-
* picked up by the supervisor's reconcile loop, so a task created via ordinary planning
|
|
30
|
-
* (`update-tasks`) is not double-spawned as a sub-agent.
|
|
31
|
-
*/
|
|
32
|
-
delegated: Schema.optional(Schema.Boolean),
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Sub-agent process id; set when the supervisor spawns a delegated task.
|
|
36
|
-
*/
|
|
37
|
-
agentPid: Schema.optional(Process.ID).annotations({
|
|
38
|
-
description: 'Sub-agent process id for delegated tasks.',
|
|
39
|
-
}),
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Parent task ID.
|
|
43
|
-
*/
|
|
44
|
-
parent: Schema.optional(TaskId).annotations({
|
|
45
|
-
description: 'Parent task ID.',
|
|
46
|
-
}),
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
export type Task = Schema.Schema.Type<typeof Task>;
|
|
50
|
-
|
|
51
|
-
/** Lifecycle status of a {@link Task}. */
|
|
52
|
-
export type TaskStatus = Task['status'];
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Short tag label for a delegated sub-agent process id (e.g. `agent-a1b2`).
|
|
56
|
-
*/
|
|
57
|
-
export const formatAgentPidTag = (pid: Process.ID): string => `agent-${String(pid).replaceAll('-', '').slice(0, 4)}`;
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Hierarchical collection of tasks for humans and agents to track progress.
|
|
61
|
-
*/
|
|
62
|
-
export class Plan extends Type.makeObject<Plan>(DXN.make('org.dxos.type.plan', '0.1.0'))(
|
|
63
|
-
Schema.Struct({
|
|
64
|
-
tasks: Schema.Array(Task),
|
|
65
|
-
}).pipe(Annotation.HiddenAnnotation.set(true)),
|
|
66
|
-
) {}
|
|
67
|
-
export const generateTaskId = (plan: Plan): TaskId => {
|
|
68
|
-
const existingIds = plan.tasks
|
|
69
|
-
.map((task) => {
|
|
70
|
-
const [num, letter] = task.id.split('-');
|
|
71
|
-
return parseInt(num);
|
|
72
|
-
})
|
|
73
|
-
.filter((_) => !isNaN(_));
|
|
74
|
-
let newId;
|
|
75
|
-
if (existingIds.length === 0) {
|
|
76
|
-
newId = 1;
|
|
77
|
-
} else {
|
|
78
|
-
newId = Math.max(...existingIds) + 1;
|
|
79
|
-
}
|
|
80
|
-
// Add random suffix to avoid collisions.
|
|
81
|
-
return TaskId.make(`${newId}-${crypto.randomUUID().slice(0, 2)}`);
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Add new tasks to a plan, generating IDs for new tasks.
|
|
86
|
-
* Use inside an `Obj.update` callback.
|
|
87
|
-
*/
|
|
88
|
-
export const addTasks = (
|
|
89
|
-
plan: Obj.Mutable<Plan>,
|
|
90
|
-
tasks: (Pick<Task, 'title'> & Partial<Pick<Task, 'status' | 'parent' | 'delegated'>>)[],
|
|
91
|
-
) => {
|
|
92
|
-
for (const task of tasks) {
|
|
93
|
-
const taskId = generateTaskId(plan);
|
|
94
|
-
plan.tasks.push({ id: taskId, ...task, status: task.status ?? 'todo' });
|
|
95
|
-
}
|
|
96
|
-
return plan;
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
interface MakePlanProps {
|
|
100
|
-
tasks: (Pick<Task, 'title'> & Partial<Pick<Task, 'status'>>)[];
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export const makePlan = (props: MakePlanProps): Plan => {
|
|
104
|
-
const plan = Obj.make(Plan, { tasks: [] });
|
|
105
|
-
Obj.update(plan, (plan) => {
|
|
106
|
-
addTasks(plan, props.tasks);
|
|
107
|
-
});
|
|
108
|
-
return plan;
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Formats plan to markdown format.
|
|
113
|
-
*/
|
|
114
|
-
export const formatPlan = (plan: Plan): string => {
|
|
115
|
-
return plan.tasks
|
|
116
|
-
.map((task) => `- **${task.status?.toLocaleUpperCase()}**: ${task.title ?? 'No title'} <!-- id=${task.id} -->`)
|
|
117
|
-
.join('\n');
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* True when the plan has any task that is not yet `done`.
|
|
122
|
-
*/
|
|
123
|
-
export const hasIncompleteTasks = (plan: Plan): boolean => plan.tasks.some((task) => task.status !== 'done');
|
|
File without changes
|