@agimon-ai/doompi-task 0.0.1-alpha.7 → 0.0.1-alpha.70
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/README.md +114 -15
- package/dist/api-contracts.cjs +1 -0
- package/dist/api-contracts.d.cts +2 -0
- package/dist/api-contracts.d.mts +2 -0
- package/dist/api-contracts.mjs +1 -0
- package/dist/commands.cjs +1 -2
- package/dist/commands.d.cts +2 -14
- package/dist/commands.d.mts +2 -14
- package/dist/commands.mjs +1 -2
- package/dist/config.cjs +1 -2
- package/dist/config.d.cts +2 -38
- package/dist/config.d.mts +2 -38
- package/dist/config.mjs +1 -2
- package/dist/constants/promptGuidelines.cjs +2 -0
- package/dist/constants/promptGuidelines.cjs.map +1 -0
- package/dist/constants/promptGuidelines.d.cts +13 -0
- package/dist/constants/promptGuidelines.d.cts.map +1 -0
- package/dist/constants/promptGuidelines.d.mts +13 -0
- package/dist/constants/promptGuidelines.d.mts.map +1 -0
- package/dist/constants/promptGuidelines.mjs +2 -0
- package/dist/constants/promptGuidelines.mjs.map +1 -0
- package/dist/constants/task.cjs +2 -0
- package/dist/constants/task.cjs.map +1 -0
- package/dist/constants/task.d.cts +4 -0
- package/dist/constants/task.d.cts.map +1 -0
- package/dist/constants/task.d.mts +4 -0
- package/dist/constants/task.d.mts.map +1 -0
- package/dist/constants/task.mjs +2 -0
- package/dist/constants/task.mjs.map +1 -0
- package/dist/controllers/tasksCommand.cjs +2 -0
- package/dist/controllers/tasksCommand.cjs.map +1 -0
- package/dist/controllers/tasksCommand.d.cts +15 -0
- package/dist/controllers/tasksCommand.d.cts.map +1 -0
- package/dist/controllers/tasksCommand.d.mts +15 -0
- package/dist/controllers/tasksCommand.d.mts.map +1 -0
- package/dist/controllers/tasksCommand.mjs +2 -0
- package/dist/controllers/tasksCommand.mjs.map +1 -0
- package/dist/controllers/webTasksChannel.cjs +2 -0
- package/dist/controllers/webTasksChannel.cjs.map +1 -0
- package/dist/controllers/webTasksChannel.mjs +2 -0
- package/dist/controllers/webTasksChannel.mjs.map +1 -0
- package/dist/delegation-manager.cjs +1 -0
- package/dist/delegation-manager.d.cts +3 -0
- package/dist/delegation-manager.d.mts +3 -0
- package/dist/delegation-manager.mjs +1 -0
- package/dist/extensions/pi.cjs +2 -1
- package/dist/extensions/pi.cjs.map +1 -1
- package/dist/extensions/pi.d.cts +6 -2
- package/dist/extensions/pi.d.cts.map +1 -0
- package/dist/extensions/pi.d.mts +6 -2
- package/dist/extensions/pi.d.mts.map +1 -0
- package/dist/extensions/pi.mjs +2 -1
- package/dist/extensions/pi.mjs.map +1 -1
- package/dist/extensions/server.cjs +2 -0
- package/dist/extensions/server.cjs.map +1 -0
- package/dist/extensions/server.d.cts +5 -0
- package/dist/extensions/server.d.cts.map +1 -0
- package/dist/extensions/server.d.mts +5 -0
- package/dist/extensions/server.d.mts.map +1 -0
- package/dist/extensions/server.mjs +2 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +15 -14
- package/dist/index.d.mts +15 -14
- package/dist/index.mjs +1 -1
- package/dist/logSinkTelemetry.cjs +1 -2
- package/dist/logSinkTelemetry.d.cts +3 -51
- package/dist/logSinkTelemetry.d.mts +3 -51
- package/dist/logSinkTelemetry.mjs +1 -2
- package/dist/models/task.cjs +2 -0
- package/dist/models/task.cjs.map +1 -0
- package/dist/{store/types.d.cts → models/task.d.cts} +41 -30
- package/dist/models/task.d.cts.map +1 -0
- package/dist/{store/types.d.mts → models/task.d.mts} +41 -30
- package/dist/models/task.d.mts.map +1 -0
- package/dist/{store/types.mjs → models/task.mjs} +1 -1
- package/dist/models/task.mjs.map +1 -0
- package/dist/models/taskGraph.cjs +2 -0
- package/dist/models/taskGraph.cjs.map +1 -0
- package/dist/{store → models}/taskGraph.d.cts +7 -8
- package/dist/models/taskGraph.d.cts.map +1 -0
- package/dist/{store → models}/taskGraph.d.mts +7 -8
- package/dist/models/taskGraph.d.mts.map +1 -0
- package/dist/models/taskGraph.mjs.map +1 -0
- package/dist/schemas/apiContracts.cjs +2 -0
- package/dist/schemas/apiContracts.cjs.map +1 -0
- package/dist/schemas/apiContracts.d.cts +53 -0
- package/dist/schemas/apiContracts.d.cts.map +1 -0
- package/dist/schemas/apiContracts.d.mts +53 -0
- package/dist/schemas/apiContracts.d.mts.map +1 -0
- package/dist/schemas/apiContracts.mjs +2 -0
- package/dist/schemas/apiContracts.mjs.map +1 -0
- package/dist/schemas/task.cjs +2 -0
- package/dist/schemas/task.cjs.map +1 -0
- package/dist/{tool/schema.d.cts → schemas/task.d.cts} +46 -29
- package/dist/schemas/task.d.cts.map +1 -0
- package/dist/{tool/schema.d.mts → schemas/task.d.mts} +46 -29
- package/dist/schemas/task.d.mts.map +1 -0
- package/dist/schemas/task.mjs +2 -0
- package/dist/schemas/task.mjs.map +1 -0
- package/dist/services/config/index.cjs +2 -0
- package/dist/services/config/index.cjs.map +1 -0
- package/dist/services/config/index.d.cts +42 -0
- package/dist/services/config/index.d.cts.map +1 -0
- package/dist/services/config/index.d.mts +42 -0
- package/dist/services/config/index.d.mts.map +1 -0
- package/dist/services/config/index.mjs +2 -0
- package/dist/services/config/index.mjs.map +1 -0
- package/dist/services/contextContribution/index.cjs +3 -0
- package/dist/services/contextContribution/index.cjs.map +1 -0
- package/dist/services/contextContribution/index.mjs +3 -0
- package/dist/services/contextContribution/index.mjs.map +1 -0
- package/dist/services/delegation/index.cjs +6 -0
- package/dist/services/delegation/index.cjs.map +1 -0
- package/dist/{delegation/manager.d.cts → services/delegation/index.d.cts} +52 -49
- package/dist/services/delegation/index.d.cts.map +1 -0
- package/dist/{delegation/manager.d.mts → services/delegation/index.d.mts} +52 -49
- package/dist/services/delegation/index.d.mts.map +1 -0
- package/dist/services/delegation/index.mjs +6 -0
- package/dist/services/delegation/index.mjs.map +1 -0
- package/dist/services/delegationPlatform/index.cjs +2 -0
- package/dist/services/delegationPlatform/index.cjs.map +1 -0
- package/dist/services/delegationPlatform/index.mjs +2 -0
- package/dist/services/delegationPlatform/index.mjs.map +1 -0
- package/dist/services/invariants/index.cjs +2 -0
- package/dist/services/invariants/index.cjs.map +1 -0
- package/dist/services/invariants/index.d.cts +23 -0
- package/dist/services/invariants/index.d.cts.map +1 -0
- package/dist/services/invariants/index.d.mts +23 -0
- package/dist/services/invariants/index.d.mts.map +1 -0
- package/dist/services/invariants/index.mjs +2 -0
- package/dist/services/invariants/index.mjs.map +1 -0
- package/dist/services/logSinkTelemetry/index.cjs +2 -0
- package/dist/services/logSinkTelemetry/index.cjs.map +1 -0
- package/dist/services/logSinkTelemetry/index.d.cts +23 -0
- package/dist/services/logSinkTelemetry/index.d.cts.map +1 -0
- package/dist/services/logSinkTelemetry/index.d.mts +23 -0
- package/dist/services/logSinkTelemetry/index.d.mts.map +1 -0
- package/dist/services/logSinkTelemetry/index.mjs +2 -0
- package/dist/services/logSinkTelemetry/index.mjs.map +1 -0
- package/dist/services/paths/index.cjs +2 -0
- package/dist/services/paths/index.cjs.map +1 -0
- package/dist/services/paths/index.d.cts +25 -0
- package/dist/services/paths/index.d.cts.map +1 -0
- package/dist/services/paths/index.d.mts +25 -0
- package/dist/services/paths/index.d.mts.map +1 -0
- package/dist/services/paths/index.mjs +2 -0
- package/dist/services/paths/index.mjs.map +1 -0
- package/dist/services/processLiveness/index.cjs +2 -0
- package/dist/services/processLiveness/index.cjs.map +1 -0
- package/dist/{store/processLiveness.d.cts → services/processLiveness/index.d.cts} +3 -4
- package/dist/services/processLiveness/index.d.cts.map +1 -0
- package/dist/{store/processLiveness.d.mts → services/processLiveness/index.d.mts} +3 -4
- package/dist/services/processLiveness/index.d.mts.map +1 -0
- package/dist/{store/processLiveness.mjs → services/processLiveness/index.mjs} +1 -1
- package/dist/services/processLiveness/index.mjs.map +1 -0
- package/dist/services/reconcile/index.cjs +2 -0
- package/dist/services/reconcile/index.cjs.map +1 -0
- package/dist/{store/reconcile.d.cts → services/reconcile/index.d.cts} +8 -9
- package/dist/services/reconcile/index.d.cts.map +1 -0
- package/dist/{store/reconcile.d.mts → services/reconcile/index.d.mts} +8 -9
- package/dist/services/reconcile/index.d.mts.map +1 -0
- package/dist/services/reconcile/index.mjs +2 -0
- package/dist/services/reconcile/index.mjs.map +1 -0
- package/dist/services/reducer/index.cjs +3 -0
- package/dist/services/reducer/index.cjs.map +1 -0
- package/dist/{store/reducer.d.cts → services/reducer/index.d.cts} +12 -13
- package/dist/services/reducer/index.d.cts.map +1 -0
- package/dist/{store/reducer.d.mts → services/reducer/index.d.mts} +12 -13
- package/dist/services/reducer/index.d.mts.map +1 -0
- package/dist/services/reducer/index.mjs +3 -0
- package/dist/services/reducer/index.mjs.map +1 -0
- package/dist/services/taskNarration/index.cjs +2 -0
- package/dist/services/taskNarration/index.cjs.map +1 -0
- package/dist/services/taskNarration/index.mjs +2 -0
- package/dist/services/taskNarration/index.mjs.map +1 -0
- package/dist/services/taskResult/index.cjs +7 -0
- package/dist/services/taskResult/index.cjs.map +1 -0
- package/dist/services/taskResult/index.d.cts +50 -0
- package/dist/services/taskResult/index.d.cts.map +1 -0
- package/dist/services/taskResult/index.d.mts +50 -0
- package/dist/services/taskResult/index.d.mts.map +1 -0
- package/dist/services/taskResult/index.mjs +7 -0
- package/dist/services/taskResult/index.mjs.map +1 -0
- package/dist/services/taskStore/index.cjs +2 -0
- package/dist/services/taskStore/index.cjs.map +1 -0
- package/dist/{store/taskStore.d.cts → services/taskStore/index.d.cts} +17 -25
- package/dist/services/taskStore/index.d.cts.map +1 -0
- package/dist/{store/taskStore.d.mts → services/taskStore/index.d.mts} +17 -25
- package/dist/services/taskStore/index.d.mts.map +1 -0
- package/dist/services/taskStore/index.mjs +2 -0
- package/dist/services/taskStore/index.mjs.map +1 -0
- package/dist/store-invariants.cjs +1 -0
- package/dist/store-invariants.d.cts +2 -0
- package/dist/store-invariants.d.mts +2 -0
- package/dist/store-invariants.mjs +1 -0
- package/dist/store-paths.cjs +1 -0
- package/dist/store-paths.d.cts +2 -0
- package/dist/store-paths.d.mts +2 -0
- package/dist/store-paths.mjs +1 -0
- package/dist/store-process-liveness.cjs +1 -0
- package/dist/store-process-liveness.d.cts +2 -0
- package/dist/store-process-liveness.d.mts +2 -0
- package/dist/store-process-liveness.mjs +1 -0
- package/dist/store-reconcile.cjs +1 -0
- package/dist/store-reconcile.d.cts +2 -0
- package/dist/store-reconcile.d.mts +2 -0
- package/dist/store-reconcile.mjs +1 -0
- package/dist/store-reducer.cjs +1 -0
- package/dist/store-reducer.d.cts +2 -0
- package/dist/store-reducer.d.mts +2 -0
- package/dist/store-reducer.mjs +1 -0
- package/dist/store-task-graph.cjs +1 -0
- package/dist/store-task-graph.d.cts +2 -0
- package/dist/store-task-graph.d.mts +2 -0
- package/dist/store-task-graph.mjs +1 -0
- package/dist/store-task-store.cjs +1 -0
- package/dist/store-task-store.d.cts +2 -0
- package/dist/store-task-store.d.mts +2 -0
- package/dist/store-task-store.mjs +1 -0
- package/dist/store-types.cjs +1 -0
- package/dist/store-types.d.cts +2 -0
- package/dist/store-types.d.mts +2 -0
- package/dist/store-types.mjs +1 -0
- package/dist/tool-prompt-guidelines.cjs +1 -0
- package/dist/tool-prompt-guidelines.d.cts +2 -0
- package/dist/tool-prompt-guidelines.d.mts +2 -0
- package/dist/tool-prompt-guidelines.mjs +1 -0
- package/dist/tool-response-envelope.cjs +1 -0
- package/dist/tool-response-envelope.d.cts +2 -0
- package/dist/tool-response-envelope.d.mts +2 -0
- package/dist/tool-response-envelope.mjs +1 -0
- package/dist/tool-schema.cjs +1 -0
- package/dist/tool-schema.d.cts +3 -0
- package/dist/tool-schema.d.mts +3 -0
- package/dist/tool-schema.mjs +1 -0
- package/dist/tool-task-tool.cjs +1 -0
- package/dist/tool-task-tool.d.cts +3 -0
- package/dist/tool-task-tool.d.mts +3 -0
- package/dist/tool-task-tool.mjs +1 -0
- package/dist/tools/task.cjs +3 -0
- package/dist/tools/task.cjs.map +1 -0
- package/dist/tools/task.d.cts +22 -0
- package/dist/tools/task.d.cts.map +1 -0
- package/dist/tools/task.d.mts +22 -0
- package/dist/tools/task.d.mts.map +1 -0
- package/dist/tools/task.mjs +3 -0
- package/dist/tools/task.mjs.map +1 -0
- package/dist/tui/format.cjs +3 -3
- package/dist/tui/format.cjs.map +1 -1
- package/dist/tui/format.d.cts +19 -20
- package/dist/tui/format.d.cts.map +1 -1
- package/dist/tui/format.d.mts +19 -20
- package/dist/tui/format.d.mts.map +1 -1
- package/dist/tui/format.mjs +3 -3
- package/dist/tui/format.mjs.map +1 -1
- package/dist/tui/selectors.cjs +1 -1
- package/dist/tui/selectors.cjs.map +1 -1
- package/dist/tui/selectors.d.cts +20 -14
- package/dist/tui/selectors.d.cts.map +1 -1
- package/dist/tui/selectors.d.mts +20 -14
- package/dist/tui/selectors.d.mts.map +1 -1
- package/dist/tui/selectors.mjs +1 -1
- package/dist/tui/selectors.mjs.map +1 -1
- package/dist/tui/taskOverlay.cjs +1 -1
- package/dist/tui/taskOverlay.cjs.map +1 -1
- package/dist/tui/taskOverlay.d.cts +4 -5
- package/dist/tui/taskOverlay.d.cts.map +1 -1
- package/dist/tui/taskOverlay.d.mts +4 -5
- package/dist/tui/taskOverlay.d.mts.map +1 -1
- package/dist/tui/taskOverlay.mjs +1 -1
- package/dist/tui/taskOverlay.mjs.map +1 -1
- package/dist/tui/taskSpace.cjs +3 -3
- package/dist/tui/taskSpace.cjs.map +1 -1
- package/dist/tui/taskSpace.d.cts +9 -10
- package/dist/tui/taskSpace.d.cts.map +1 -1
- package/dist/tui/taskSpace.d.mts +9 -10
- package/dist/tui/taskSpace.d.mts.map +1 -1
- package/dist/tui/taskSpace.mjs +3 -3
- package/dist/tui/taskSpace.mjs.map +1 -1
- package/dist/tui-format.cjs +1 -0
- package/dist/tui-format.d.cts +2 -0
- package/dist/tui-format.d.mts +2 -0
- package/dist/tui-format.mjs +1 -0
- package/dist/tui-selectors.cjs +1 -0
- package/dist/tui-selectors.d.cts +2 -0
- package/dist/tui-selectors.d.mts +2 -0
- package/dist/tui-selectors.mjs +1 -0
- package/dist/tui-task-overlay.cjs +1 -0
- package/dist/tui-task-overlay.d.cts +2 -0
- package/dist/tui-task-overlay.d.mts +2 -0
- package/dist/tui-task-overlay.mjs +1 -0
- package/dist/tui-task-space.cjs +1 -0
- package/dist/tui-task-space.d.cts +2 -0
- package/dist/tui-task-space.d.mts +2 -0
- package/dist/tui-task-space.mjs +1 -0
- package/dist/types/delegation.cjs +2 -0
- package/dist/types/delegation.cjs.map +1 -0
- package/dist/types/delegation.d.cts +5 -0
- package/dist/types/delegation.d.cts.map +1 -0
- package/dist/types/delegation.d.mts +5 -0
- package/dist/types/delegation.d.mts.map +1 -0
- package/dist/types/delegation.mjs +2 -0
- package/dist/types/delegation.mjs.map +1 -0
- package/dist/types/telemetry.cjs +2 -0
- package/dist/types/telemetry.cjs.map +1 -0
- package/dist/types/telemetry.d.cts +35 -0
- package/dist/types/telemetry.d.cts.map +1 -0
- package/dist/types/telemetry.d.mts +35 -0
- package/dist/types/telemetry.d.mts.map +1 -0
- package/dist/types/telemetry.mjs +2 -0
- package/dist/types/telemetry.mjs.map +1 -0
- package/dist/types/webTasks.cjs +2 -0
- package/dist/types/webTasks.cjs.map +1 -0
- package/dist/types/webTasks.mjs +2 -0
- package/dist/types/webTasks.mjs.map +1 -0
- package/package.json +158 -109
- package/src/extensions/web.ts +18 -0
- package/src/types/webTasks.ts +24 -0
- package/src/web/components/TaskDetailDialog.tsx +251 -0
- package/src/web/components/TaskToolMessage.tsx +120 -0
- package/src/web/components/TasksActivitySection.tsx +200 -0
- package/src/web/lib/taskToolFormat.ts +330 -0
- package/src/web/stores/tasksStore.ts +114 -0
- package/src/web/tsconfig.json +23 -0
- package/dist/commands.cjs.map +0 -1
- package/dist/commands.d.cts.map +0 -1
- package/dist/commands.d.mts.map +0 -1
- package/dist/commands.mjs.map +0 -1
- package/dist/config.cjs.map +0 -1
- package/dist/config.d.cts.map +0 -1
- package/dist/config.d.mts.map +0 -1
- package/dist/config.mjs.map +0 -1
- package/dist/delegation/manager.cjs +0 -6
- package/dist/delegation/manager.cjs.map +0 -1
- package/dist/delegation/manager.d.cts.map +0 -1
- package/dist/delegation/manager.d.mts.map +0 -1
- package/dist/delegation/manager.mjs +0 -6
- package/dist/delegation/manager.mjs.map +0 -1
- package/dist/extension.cjs +0 -3
- package/dist/extension.cjs.map +0 -1
- package/dist/extension.d.cts +0 -12
- package/dist/extension.d.cts.map +0 -1
- package/dist/extension.d.mts +0 -12
- package/dist/extension.d.mts.map +0 -1
- package/dist/extension.mjs +0 -3
- package/dist/extension.mjs.map +0 -1
- package/dist/extensions/doom.cjs +0 -2
- package/dist/extensions/doom.cjs.map +0 -1
- package/dist/extensions/doom.d.cts +0 -6
- package/dist/extensions/doom.d.cts.map +0 -1
- package/dist/extensions/doom.d.mts +0 -7
- package/dist/extensions/doom.d.mts.map +0 -1
- package/dist/extensions/doom.mjs +0 -2
- package/dist/extensions/doom.mjs.map +0 -1
- package/dist/logSinkTelemetry.cjs.map +0 -1
- package/dist/logSinkTelemetry.d.cts.map +0 -1
- package/dist/logSinkTelemetry.d.mts.map +0 -1
- package/dist/logSinkTelemetry.mjs.map +0 -1
- package/dist/store/invariants.cjs +0 -2
- package/dist/store/invariants.cjs.map +0 -1
- package/dist/store/invariants.d.cts +0 -14
- package/dist/store/invariants.d.cts.map +0 -1
- package/dist/store/invariants.d.mts +0 -14
- package/dist/store/invariants.d.mts.map +0 -1
- package/dist/store/invariants.mjs +0 -2
- package/dist/store/invariants.mjs.map +0 -1
- package/dist/store/paths.cjs +0 -2
- package/dist/store/paths.cjs.map +0 -1
- package/dist/store/paths.d.cts +0 -23
- package/dist/store/paths.d.cts.map +0 -1
- package/dist/store/paths.d.mts +0 -23
- package/dist/store/paths.d.mts.map +0 -1
- package/dist/store/paths.mjs +0 -2
- package/dist/store/paths.mjs.map +0 -1
- package/dist/store/processLiveness.cjs +0 -2
- package/dist/store/processLiveness.cjs.map +0 -1
- package/dist/store/processLiveness.d.cts.map +0 -1
- package/dist/store/processLiveness.d.mts.map +0 -1
- package/dist/store/processLiveness.mjs.map +0 -1
- package/dist/store/reconcile.cjs +0 -2
- package/dist/store/reconcile.cjs.map +0 -1
- package/dist/store/reconcile.d.cts.map +0 -1
- package/dist/store/reconcile.d.mts.map +0 -1
- package/dist/store/reconcile.mjs +0 -2
- package/dist/store/reconcile.mjs.map +0 -1
- package/dist/store/reducer.cjs +0 -3
- package/dist/store/reducer.cjs.map +0 -1
- package/dist/store/reducer.d.cts.map +0 -1
- package/dist/store/reducer.d.mts.map +0 -1
- package/dist/store/reducer.mjs +0 -3
- package/dist/store/reducer.mjs.map +0 -1
- package/dist/store/taskGraph.cjs +0 -2
- package/dist/store/taskGraph.cjs.map +0 -1
- package/dist/store/taskGraph.d.cts.map +0 -1
- package/dist/store/taskGraph.d.mts.map +0 -1
- package/dist/store/taskGraph.mjs.map +0 -1
- package/dist/store/taskStore.cjs +0 -2
- package/dist/store/taskStore.cjs.map +0 -1
- package/dist/store/taskStore.d.cts.map +0 -1
- package/dist/store/taskStore.d.mts.map +0 -1
- package/dist/store/taskStore.mjs +0 -2
- package/dist/store/taskStore.mjs.map +0 -1
- package/dist/store/types.cjs +0 -2
- package/dist/store/types.cjs.map +0 -1
- package/dist/store/types.d.cts.map +0 -1
- package/dist/store/types.d.mts.map +0 -1
- package/dist/store/types.mjs.map +0 -1
- package/dist/tool/promptGuidelines.cjs +0 -2
- package/dist/tool/promptGuidelines.cjs.map +0 -1
- package/dist/tool/promptGuidelines.d.cts +0 -5
- package/dist/tool/promptGuidelines.d.cts.map +0 -1
- package/dist/tool/promptGuidelines.d.mts +0 -5
- package/dist/tool/promptGuidelines.d.mts.map +0 -1
- package/dist/tool/promptGuidelines.mjs +0 -2
- package/dist/tool/promptGuidelines.mjs.map +0 -1
- package/dist/tool/responseEnvelope.cjs +0 -6
- package/dist/tool/responseEnvelope.cjs.map +0 -1
- package/dist/tool/responseEnvelope.d.cts +0 -39
- package/dist/tool/responseEnvelope.d.cts.map +0 -1
- package/dist/tool/responseEnvelope.d.mts +0 -39
- package/dist/tool/responseEnvelope.d.mts.map +0 -1
- package/dist/tool/responseEnvelope.mjs +0 -6
- package/dist/tool/responseEnvelope.mjs.map +0 -1
- package/dist/tool/schema.cjs +0 -2
- package/dist/tool/schema.cjs.map +0 -1
- package/dist/tool/schema.d.cts.map +0 -1
- package/dist/tool/schema.d.mts.map +0 -1
- package/dist/tool/schema.mjs +0 -2
- package/dist/tool/schema.mjs.map +0 -1
- package/dist/tool/taskTool.cjs +0 -3
- package/dist/tool/taskTool.cjs.map +0 -1
- package/dist/tool/taskTool.d.cts +0 -17
- package/dist/tool/taskTool.d.cts.map +0 -1
- package/dist/tool/taskTool.d.mts +0 -17
- package/dist/tool/taskTool.d.mts.map +0 -1
- package/dist/tool/taskTool.mjs +0 -3
- package/dist/tool/taskTool.mjs.map +0 -1
- /package/dist/{store → models}/taskGraph.mjs +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.cjs","names":["Type","InlineAgentSchema"],"sources":["../../src/schemas/task.ts"],"sourcesContent":["export { COMMAND_NAME } from '../constants/task';\nimport { InlineAgentSchema } from '@agimon-ai/doompi-core/delegation';\nimport { type Static, Type } from 'typebox';\n\nimport type { TaskAction } from '../models/task';\nimport { MAX_BRIEF_FILES } from '../types/delegation';\n\nexport const TASK_ACTIONS = ['upsert', 'list', 'get', 'delete', 'clear', 'assign', 'cancel'] as const;\nexport const TASK_STATUSES = ['pending', 'in_progress', 'completed', 'failed', 'deleted'] as const;\nexport const TASK_CONTEXTS = ['fresh', 'fork'] as const;\n\nexport const TOOL_NAME = 'task';\nexport const TOOL_LABEL = 'Task';\n\nexport const ERR_REQUIRES_INTERACTIVE = '/tasks requires interactive mode';\nexport const MSG_NO_TASKS = 'No tasks yet. Ask the agent to add some!';\n\n/**\n * Which top-level fields each action accepts.\n *\n * The params object is flat and shared across every action, so the schema alone\n * cannot express \"upsert has no top-level id\". That gap matters: a call like\n * `{\"action\":\"upsert\",\"id\":3,\"tasks\":[{\"status\":\"completed\"}]}` would otherwise\n * silently create a duplicate task, because the entry itself carries no id.\n */\nexport const TASK_ACTION_FIELDS = {\n upsert: ['action', 'tasks'],\n list: ['action', 'status', 'includeDeleted'],\n get: ['action', 'id'],\n delete: ['action', 'id'],\n clear: ['action'],\n assign: ['action', 'assignments'],\n cancel: ['action', 'id'],\n} as const satisfies Record<TaskAction, readonly string[]>;\n\nexport function taskActionAcceptsField(action: TaskAction, field: string): boolean {\n return (TASK_ACTION_FIELDS[action] as readonly string[]).includes(field);\n}\n\n/** Correction hint appended when a per-task field lands at the top level. */\nexport const MSG_UPSERT_FIELD_MISPLACED =\n 'Per-task fields belong inside each tasks[] entry, not at the top level: {\"action\":\"upsert\",\"tasks\":[{\"id\":3,\"status\":\"completed\"}]}.';\n\n/**\n * A dependency target: an existing task id, or the `ref` of a task created\n * earlier in the same call.\n */\nconst DepTokenSchema = Type.Union([Type.Integer(), Type.String()]);\n\n/**\n * One entry of an upsert. `additionalProperties: false` is load-bearing: pi\n * validates tool arguments against this schema before `execute` runs, so a\n * stray `{\"action\":\"update\"}` inside an entry is rejected at the boundary.\n */\nexport const TaskItemSchema = Type.Object(\n {\n id: Type.Optional(\n Type.Integer({\n description:\n 'Existing task id to change. Omit to create. An unknown id fails only that entry; it never creates.',\n }),\n ),\n ref: Type.Optional(\n Type.String({\n description:\n 'Temporary name for a task created by this entry, so a LATER entry in this array can list it in blockedBy. Must start with a letter; never stored.',\n }),\n ),\n subject: Type.Optional(\n Type.String({\n description: 'Short imperative subject. Required when the entry has no id; on an entry with an id it renames.',\n }),\n ),\n description: Type.Optional(\n Type.String({ description: 'Long-form detail; becomes the brief handed to the subagent on assign.' }),\n ),\n activeForm: Type.Optional(\n Type.String({ description: \"Present-continuous label shown while in_progress (e.g. 'writing tests')\" }),\n ),\n status: Type.Optional(\n Type.String({\n enum: [...TASK_STATUSES],\n description:\n 'New entries default to pending and cannot start deleted; on an entry with an id the transition must be legal.',\n }),\n ),\n blockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description:\n 'Dependencies for a NEW entry: task ids, or refs of tasks created EARLIER in this array. On an entry with an id use addBlockedBy / removeBlockedBy instead.',\n }),\n ),\n addBlockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description: 'Dependencies to add (ids or earlier refs). Additive; do not resend the full array.',\n }),\n ),\n removeBlockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description: 'Dependencies to remove. Additive; do not resend the full array.',\n }),\n ),\n owner: Type.Optional(Type.String({ description: 'Owner label; assign sets it to the subagent name.' })),\n metadata: Type.Optional(\n Type.Record(Type.String(), Type.Unknown(), {\n description: 'Merged into the task; a null value deletes that key.',\n }),\n ),\n },\n { additionalProperties: false },\n);\n\n/** One task-to-agent handoff in a native assignment batch. */\nexport const TaskAssignmentSchema = Type.Object(\n {\n id: Type.Integer({ description: 'Pending, unblocked task id to delegate' }),\n agent: Type.String({ description: 'Exact discovered subagent name' }),\n inlineAgent: Type.Optional(InlineAgentSchema),\n instructions: Type.Optional(Type.String({ description: 'Extra instructions appended to this delegated brief' })),\n relevantFiles: Type.Optional(\n Type.Array(Type.String(), {\n description: `Files already read or located, relative to the working directory; at most ${MAX_BRIEF_FILES} are used.`,\n }),\n ),\n priorFindings: Type.Optional(\n Type.String({ description: 'Established facts this child should consume rather than re-derive' }),\n ),\n model: Type.Optional(Type.String({ description: 'Model override for this delegated run' })),\n context: Type.Optional(\n Type.String({\n enum: [...TASK_CONTEXTS],\n description: \"Starting context for this child: 'fresh' or 'fork'\",\n }),\n ),\n },\n { additionalProperties: false },\n);\n\n/**\n * Tool parameters. Every `description` doubles as LLM-facing prompt copy, so\n * wording changes here change model behaviour.\n */\nexport const TaskParamsSchema = Type.Object({\n action: Type.String({ enum: [...TASK_ACTIONS] }),\n tasks: Type.Optional(\n Type.Array(TaskItemSchema, {\n minItems: 1,\n description:\n 'upsert only. An entry with an id changes that task, an entry without an id creates one. Entries apply in array order, so a later entry can depend on an earlier one by ref.',\n }),\n ),\n assignments: Type.Optional(\n Type.Array(TaskAssignmentSchema, {\n minItems: 1,\n description: 'Required for assign, one entry per task, including when there is only one.',\n }),\n ),\n id: Type.Optional(\n Type.Integer({\n description:\n 'Task id, for get, delete and cancel. Not accepted by upsert or assign: those carry ids inside tasks[] and assignments[] entries.',\n }),\n ),\n status: Type.Optional(\n Type.String({\n enum: [...TASK_STATUSES],\n description: 'list only: return just the tasks in this status. To SET a status, upsert the task by id.',\n }),\n ),\n includeDeleted: Type.Optional(\n Type.Boolean({ description: 'list only: also return deleted tombstones. Default false.' }),\n ),\n});\n\nexport type TaskItemParams = Static<typeof TaskItemSchema>;\nexport type TaskAssignmentParams = Static<typeof TaskAssignmentSchema>;\nexport type TaskParams = Static<typeof TaskParamsSchema>;\n"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { TaskAction } from "../
|
|
1
|
+
import { TaskAction } from "../models/task.cjs";
|
|
2
|
+
import { COMMAND_NAME } from "../constants/task.cjs";
|
|
2
3
|
import { Static, Type } from "typebox";
|
|
3
|
-
//#region src/
|
|
4
|
-
declare const TASK_ACTIONS: readonly [
|
|
5
|
-
declare const TASK_STATUSES: readonly [
|
|
6
|
-
declare const TASK_CONTEXTS: readonly [
|
|
7
|
-
declare const TOOL_NAME = "task";
|
|
8
|
-
declare const TOOL_LABEL = "Task";
|
|
9
|
-
declare const
|
|
10
|
-
declare const
|
|
11
|
-
declare const MSG_NO_TASKS = "No tasks yet. Ask the agent to add some!";
|
|
4
|
+
//#region src/schemas/task.d.ts
|
|
5
|
+
export declare const TASK_ACTIONS: readonly ['upsert', 'list', 'get', 'delete', 'clear', 'assign', 'cancel'];
|
|
6
|
+
export declare const TASK_STATUSES: readonly ['pending', 'in_progress', 'completed', 'failed', 'deleted'];
|
|
7
|
+
export declare const TASK_CONTEXTS: readonly ['fresh', 'fork'];
|
|
8
|
+
export declare const TOOL_NAME = "task";
|
|
9
|
+
export declare const TOOL_LABEL = "Task";
|
|
10
|
+
export declare const ERR_REQUIRES_INTERACTIVE = "/tasks requires interactive mode";
|
|
11
|
+
export declare const MSG_NO_TASKS = "No tasks yet. Ask the agent to add some!";
|
|
12
12
|
/**
|
|
13
13
|
* Which top-level fields each action accepts.
|
|
14
14
|
*
|
|
@@ -17,24 +17,24 @@ declare const MSG_NO_TASKS = "No tasks yet. Ask the agent to add some!";
|
|
|
17
17
|
* `{"action":"upsert","id":3,"tasks":[{"status":"completed"}]}` would otherwise
|
|
18
18
|
* silently create a duplicate task, because the entry itself carries no id.
|
|
19
19
|
*/
|
|
20
|
-
declare const TASK_ACTION_FIELDS: {
|
|
20
|
+
export declare const TASK_ACTION_FIELDS: {
|
|
21
21
|
readonly upsert: readonly ["action", "tasks"];
|
|
22
22
|
readonly list: readonly ["action", "status", "includeDeleted"];
|
|
23
23
|
readonly get: readonly ["action", "id"];
|
|
24
24
|
readonly delete: readonly ["action", "id"];
|
|
25
25
|
readonly clear: readonly ["action"];
|
|
26
|
-
readonly assign: readonly ["action", "
|
|
26
|
+
readonly assign: readonly ["action", "assignments"];
|
|
27
27
|
readonly cancel: readonly ["action", "id"];
|
|
28
28
|
};
|
|
29
|
-
declare function taskActionAcceptsField(action: TaskAction, field: string): boolean;
|
|
29
|
+
export declare function taskActionAcceptsField(action: TaskAction, field: string): boolean;
|
|
30
30
|
/** Correction hint appended when a per-task field lands at the top level. */
|
|
31
|
-
declare const MSG_UPSERT_FIELD_MISPLACED = "Per-task fields belong inside each tasks[] entry, not at the top level: {\"action\":\"upsert\",\"tasks\":[{\"id\":3,\"status\":\"completed\"}]}.";
|
|
31
|
+
export declare const MSG_UPSERT_FIELD_MISPLACED = "Per-task fields belong inside each tasks[] entry, not at the top level: {\"action\":\"upsert\",\"tasks\":[{\"id\":3,\"status\":\"completed\"}]}.";
|
|
32
32
|
/**
|
|
33
33
|
* One entry of an upsert. `additionalProperties: false` is load-bearing: pi
|
|
34
34
|
* validates tool arguments against this schema before `execute` runs, so a
|
|
35
35
|
* stray `{"action":"update"}` inside an entry is rejected at the boundary.
|
|
36
36
|
*/
|
|
37
|
-
declare const TaskItemSchema: Type.TObject<{
|
|
37
|
+
export declare const TaskItemSchema: Type.TObject<{
|
|
38
38
|
id: Type.TOptional<Type.TInteger>;
|
|
39
39
|
ref: Type.TOptional<Type.TString>;
|
|
40
40
|
subject: Type.TOptional<Type.TString>;
|
|
@@ -47,11 +47,24 @@ declare const TaskItemSchema: Type.TObject<{
|
|
|
47
47
|
owner: Type.TOptional<Type.TString>;
|
|
48
48
|
metadata: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
|
|
49
49
|
}>;
|
|
50
|
+
/** One task-to-agent handoff in a native assignment batch. */
|
|
51
|
+
export declare const TaskAssignmentSchema: Type.TObject<{
|
|
52
|
+
id: Type.TInteger;
|
|
53
|
+
agent: Type.TString;
|
|
54
|
+
inlineAgent: Type.TOptional<Type.TObject<{
|
|
55
|
+
systemPrompt: Type.TString;
|
|
56
|
+
}>>;
|
|
57
|
+
instructions: Type.TOptional<Type.TString>;
|
|
58
|
+
relevantFiles: Type.TOptional<Type.TArray<Type.TString>>;
|
|
59
|
+
priorFindings: Type.TOptional<Type.TString>;
|
|
60
|
+
model: Type.TOptional<Type.TString>;
|
|
61
|
+
context: Type.TOptional<Type.TString>;
|
|
62
|
+
}>;
|
|
50
63
|
/**
|
|
51
64
|
* Tool parameters. Every `description` doubles as LLM-facing prompt copy, so
|
|
52
65
|
* wording changes here change model behaviour.
|
|
53
66
|
*/
|
|
54
|
-
declare const TaskParamsSchema: Type.TObject<{
|
|
67
|
+
export declare const TaskParamsSchema: Type.TObject<{
|
|
55
68
|
action: Type.TString;
|
|
56
69
|
tasks: Type.TOptional<Type.TArray<Type.TObject<{
|
|
57
70
|
id: Type.TOptional<Type.TInteger>;
|
|
@@ -66,21 +79,25 @@ declare const TaskParamsSchema: Type.TObject<{
|
|
|
66
79
|
owner: Type.TOptional<Type.TString>;
|
|
67
80
|
metadata: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
|
|
68
81
|
}>>>;
|
|
82
|
+
assignments: Type.TOptional<Type.TArray<Type.TObject<{
|
|
83
|
+
id: Type.TInteger;
|
|
84
|
+
agent: Type.TString;
|
|
85
|
+
inlineAgent: Type.TOptional<Type.TObject<{
|
|
86
|
+
systemPrompt: Type.TString;
|
|
87
|
+
}>>;
|
|
88
|
+
instructions: Type.TOptional<Type.TString>;
|
|
89
|
+
relevantFiles: Type.TOptional<Type.TArray<Type.TString>>;
|
|
90
|
+
priorFindings: Type.TOptional<Type.TString>;
|
|
91
|
+
model: Type.TOptional<Type.TString>;
|
|
92
|
+
context: Type.TOptional<Type.TString>;
|
|
93
|
+
}>>>;
|
|
69
94
|
id: Type.TOptional<Type.TInteger>;
|
|
70
95
|
status: Type.TOptional<Type.TString>;
|
|
71
96
|
includeDeleted: Type.TOptional<Type.TBoolean>;
|
|
72
|
-
agent: Type.TOptional<Type.TString>;
|
|
73
|
-
inlineAgent: Type.TOptional<Type.TObject<{
|
|
74
|
-
systemPrompt: Type.TString;
|
|
75
|
-
}>>;
|
|
76
|
-
instructions: Type.TOptional<Type.TString>;
|
|
77
|
-
relevantFiles: Type.TOptional<Type.TArray<Type.TString>>;
|
|
78
|
-
priorFindings: Type.TOptional<Type.TString>;
|
|
79
|
-
model: Type.TOptional<Type.TString>;
|
|
80
|
-
context: Type.TOptional<Type.TString>;
|
|
81
97
|
}>;
|
|
82
|
-
type TaskItemParams = Static<typeof TaskItemSchema>;
|
|
83
|
-
type
|
|
98
|
+
export type TaskItemParams = Static<typeof TaskItemSchema>;
|
|
99
|
+
export type TaskAssignmentParams = Static<typeof TaskAssignmentSchema>;
|
|
100
|
+
export type TaskParams = Static<typeof TaskParamsSchema>;
|
|
84
101
|
//#endregion
|
|
85
|
-
export { COMMAND_NAME
|
|
86
|
-
//# sourceMappingURL=
|
|
102
|
+
export { COMMAND_NAME };
|
|
103
|
+
//# sourceMappingURL=task.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.cts","names":[],"sources":["../../src/schemas/task.ts"],"mappings":";;;;qBAOa;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBACA;;;;;;;;;qBAUA;;;;;;;;;wBAUG,uBAAuB,QAAQ,YAAY;;qBAK9C;;;;;;qBAcA,gBAAc,KAAA;;;;;;;;;;;;;;qBA2Dd,sBAAoB,KAAA;;;;;;;;;;;;;;;;qBA6BpB,kBAAgB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAgCjB,iBAAiB,cAAc;YAC/B,uBAAuB,cAAc;YACrC,aAAa,cAAc"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { TaskAction } from "../
|
|
1
|
+
import { TaskAction } from "../models/task.mjs";
|
|
2
|
+
import { COMMAND_NAME } from "../constants/task.mjs";
|
|
2
3
|
import { Static, Type } from "typebox";
|
|
3
|
-
//#region src/
|
|
4
|
-
declare const TASK_ACTIONS: readonly [
|
|
5
|
-
declare const TASK_STATUSES: readonly [
|
|
6
|
-
declare const TASK_CONTEXTS: readonly [
|
|
7
|
-
declare const TOOL_NAME = "task";
|
|
8
|
-
declare const TOOL_LABEL = "Task";
|
|
9
|
-
declare const
|
|
10
|
-
declare const
|
|
11
|
-
declare const MSG_NO_TASKS = "No tasks yet. Ask the agent to add some!";
|
|
4
|
+
//#region src/schemas/task.d.ts
|
|
5
|
+
export declare const TASK_ACTIONS: readonly ['upsert', 'list', 'get', 'delete', 'clear', 'assign', 'cancel'];
|
|
6
|
+
export declare const TASK_STATUSES: readonly ['pending', 'in_progress', 'completed', 'failed', 'deleted'];
|
|
7
|
+
export declare const TASK_CONTEXTS: readonly ['fresh', 'fork'];
|
|
8
|
+
export declare const TOOL_NAME = "task";
|
|
9
|
+
export declare const TOOL_LABEL = "Task";
|
|
10
|
+
export declare const ERR_REQUIRES_INTERACTIVE = "/tasks requires interactive mode";
|
|
11
|
+
export declare const MSG_NO_TASKS = "No tasks yet. Ask the agent to add some!";
|
|
12
12
|
/**
|
|
13
13
|
* Which top-level fields each action accepts.
|
|
14
14
|
*
|
|
@@ -17,24 +17,24 @@ declare const MSG_NO_TASKS = "No tasks yet. Ask the agent to add some!";
|
|
|
17
17
|
* `{"action":"upsert","id":3,"tasks":[{"status":"completed"}]}` would otherwise
|
|
18
18
|
* silently create a duplicate task, because the entry itself carries no id.
|
|
19
19
|
*/
|
|
20
|
-
declare const TASK_ACTION_FIELDS: {
|
|
20
|
+
export declare const TASK_ACTION_FIELDS: {
|
|
21
21
|
readonly upsert: readonly ["action", "tasks"];
|
|
22
22
|
readonly list: readonly ["action", "status", "includeDeleted"];
|
|
23
23
|
readonly get: readonly ["action", "id"];
|
|
24
24
|
readonly delete: readonly ["action", "id"];
|
|
25
25
|
readonly clear: readonly ["action"];
|
|
26
|
-
readonly assign: readonly ["action", "
|
|
26
|
+
readonly assign: readonly ["action", "assignments"];
|
|
27
27
|
readonly cancel: readonly ["action", "id"];
|
|
28
28
|
};
|
|
29
|
-
declare function taskActionAcceptsField(action: TaskAction, field: string): boolean;
|
|
29
|
+
export declare function taskActionAcceptsField(action: TaskAction, field: string): boolean;
|
|
30
30
|
/** Correction hint appended when a per-task field lands at the top level. */
|
|
31
|
-
declare const MSG_UPSERT_FIELD_MISPLACED = "Per-task fields belong inside each tasks[] entry, not at the top level: {\"action\":\"upsert\",\"tasks\":[{\"id\":3,\"status\":\"completed\"}]}.";
|
|
31
|
+
export declare const MSG_UPSERT_FIELD_MISPLACED = "Per-task fields belong inside each tasks[] entry, not at the top level: {\"action\":\"upsert\",\"tasks\":[{\"id\":3,\"status\":\"completed\"}]}.";
|
|
32
32
|
/**
|
|
33
33
|
* One entry of an upsert. `additionalProperties: false` is load-bearing: pi
|
|
34
34
|
* validates tool arguments against this schema before `execute` runs, so a
|
|
35
35
|
* stray `{"action":"update"}` inside an entry is rejected at the boundary.
|
|
36
36
|
*/
|
|
37
|
-
declare const TaskItemSchema: Type.TObject<{
|
|
37
|
+
export declare const TaskItemSchema: Type.TObject<{
|
|
38
38
|
id: Type.TOptional<Type.TInteger>;
|
|
39
39
|
ref: Type.TOptional<Type.TString>;
|
|
40
40
|
subject: Type.TOptional<Type.TString>;
|
|
@@ -47,11 +47,24 @@ declare const TaskItemSchema: Type.TObject<{
|
|
|
47
47
|
owner: Type.TOptional<Type.TString>;
|
|
48
48
|
metadata: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
|
|
49
49
|
}>;
|
|
50
|
+
/** One task-to-agent handoff in a native assignment batch. */
|
|
51
|
+
export declare const TaskAssignmentSchema: Type.TObject<{
|
|
52
|
+
id: Type.TInteger;
|
|
53
|
+
agent: Type.TString;
|
|
54
|
+
inlineAgent: Type.TOptional<Type.TObject<{
|
|
55
|
+
systemPrompt: Type.TString;
|
|
56
|
+
}>>;
|
|
57
|
+
instructions: Type.TOptional<Type.TString>;
|
|
58
|
+
relevantFiles: Type.TOptional<Type.TArray<Type.TString>>;
|
|
59
|
+
priorFindings: Type.TOptional<Type.TString>;
|
|
60
|
+
model: Type.TOptional<Type.TString>;
|
|
61
|
+
context: Type.TOptional<Type.TString>;
|
|
62
|
+
}>;
|
|
50
63
|
/**
|
|
51
64
|
* Tool parameters. Every `description` doubles as LLM-facing prompt copy, so
|
|
52
65
|
* wording changes here change model behaviour.
|
|
53
66
|
*/
|
|
54
|
-
declare const TaskParamsSchema: Type.TObject<{
|
|
67
|
+
export declare const TaskParamsSchema: Type.TObject<{
|
|
55
68
|
action: Type.TString;
|
|
56
69
|
tasks: Type.TOptional<Type.TArray<Type.TObject<{
|
|
57
70
|
id: Type.TOptional<Type.TInteger>;
|
|
@@ -66,21 +79,25 @@ declare const TaskParamsSchema: Type.TObject<{
|
|
|
66
79
|
owner: Type.TOptional<Type.TString>;
|
|
67
80
|
metadata: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
|
|
68
81
|
}>>>;
|
|
82
|
+
assignments: Type.TOptional<Type.TArray<Type.TObject<{
|
|
83
|
+
id: Type.TInteger;
|
|
84
|
+
agent: Type.TString;
|
|
85
|
+
inlineAgent: Type.TOptional<Type.TObject<{
|
|
86
|
+
systemPrompt: Type.TString;
|
|
87
|
+
}>>;
|
|
88
|
+
instructions: Type.TOptional<Type.TString>;
|
|
89
|
+
relevantFiles: Type.TOptional<Type.TArray<Type.TString>>;
|
|
90
|
+
priorFindings: Type.TOptional<Type.TString>;
|
|
91
|
+
model: Type.TOptional<Type.TString>;
|
|
92
|
+
context: Type.TOptional<Type.TString>;
|
|
93
|
+
}>>>;
|
|
69
94
|
id: Type.TOptional<Type.TInteger>;
|
|
70
95
|
status: Type.TOptional<Type.TString>;
|
|
71
96
|
includeDeleted: Type.TOptional<Type.TBoolean>;
|
|
72
|
-
agent: Type.TOptional<Type.TString>;
|
|
73
|
-
inlineAgent: Type.TOptional<Type.TObject<{
|
|
74
|
-
systemPrompt: Type.TString;
|
|
75
|
-
}>>;
|
|
76
|
-
instructions: Type.TOptional<Type.TString>;
|
|
77
|
-
relevantFiles: Type.TOptional<Type.TArray<Type.TString>>;
|
|
78
|
-
priorFindings: Type.TOptional<Type.TString>;
|
|
79
|
-
model: Type.TOptional<Type.TString>;
|
|
80
|
-
context: Type.TOptional<Type.TString>;
|
|
81
97
|
}>;
|
|
82
|
-
type TaskItemParams = Static<typeof TaskItemSchema>;
|
|
83
|
-
type
|
|
98
|
+
export type TaskItemParams = Static<typeof TaskItemSchema>;
|
|
99
|
+
export type TaskAssignmentParams = Static<typeof TaskAssignmentSchema>;
|
|
100
|
+
export type TaskParams = Static<typeof TaskParamsSchema>;
|
|
84
101
|
//#endregion
|
|
85
|
-
export { COMMAND_NAME
|
|
86
|
-
//# sourceMappingURL=
|
|
102
|
+
export { COMMAND_NAME };
|
|
103
|
+
//# sourceMappingURL=task.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.mts","names":[],"sources":["../../src/schemas/task.ts"],"mappings":";;;;qBAOa;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBACA;;;;;;;;;qBAUA;;;;;;;;;wBAUG,uBAAuB,QAAQ,YAAY;;qBAK9C;;;;;;qBAcA,gBAAc,KAAA;;;;;;;;;;;;;;qBA2Dd,sBAAoB,KAAA;;;;;;;;;;;;;;;;qBA6BpB,kBAAgB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAgCjB,iBAAiB,cAAc;YAC/B,uBAAuB,cAAc;YACrC,aAAa,cAAc"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"../types/delegation.mjs";import{COMMAND_NAME as e}from"../constants/task.mjs";import{Type as t}from"typebox";import{InlineAgentSchema as n}from"@agimon-ai/doompi-core/delegation";const r=[`upsert`,`list`,`get`,`delete`,`clear`,`assign`,`cancel`],i=[`pending`,`in_progress`,`completed`,`failed`,`deleted`],a=[`fresh`,`fork`],o=`task`,s=`Task`,c=`/tasks requires interactive mode`,l=`No tasks yet. Ask the agent to add some!`,u={upsert:[`action`,`tasks`],list:[`action`,`status`,`includeDeleted`],get:[`action`,`id`],delete:[`action`,`id`],clear:[`action`],assign:[`action`,`assignments`],cancel:[`action`,`id`]};function d(e,t){return u[e].includes(t)}const f=`Per-task fields belong inside each tasks[] entry, not at the top level: {"action":"upsert","tasks":[{"id":3,"status":"completed"}]}.`,p=t.Union([t.Integer(),t.String()]),m=t.Object({id:t.Optional(t.Integer({description:`Existing task id to change. Omit to create. An unknown id fails only that entry; it never creates.`})),ref:t.Optional(t.String({description:`Temporary name for a task created by this entry, so a LATER entry in this array can list it in blockedBy. Must start with a letter; never stored.`})),subject:t.Optional(t.String({description:`Short imperative subject. Required when the entry has no id; on an entry with an id it renames.`})),description:t.Optional(t.String({description:`Long-form detail; becomes the brief handed to the subagent on assign.`})),activeForm:t.Optional(t.String({description:`Present-continuous label shown while in_progress (e.g. 'writing tests')`})),status:t.Optional(t.String({enum:[...i],description:`New entries default to pending and cannot start deleted; on an entry with an id the transition must be legal.`})),blockedBy:t.Optional(t.Array(p,{description:`Dependencies for a NEW entry: task ids, or refs of tasks created EARLIER in this array. On an entry with an id use addBlockedBy / removeBlockedBy instead.`})),addBlockedBy:t.Optional(t.Array(p,{description:`Dependencies to add (ids or earlier refs). Additive; do not resend the full array.`})),removeBlockedBy:t.Optional(t.Array(p,{description:`Dependencies to remove. Additive; do not resend the full array.`})),owner:t.Optional(t.String({description:`Owner label; assign sets it to the subagent name.`})),metadata:t.Optional(t.Record(t.String(),t.Unknown(),{description:`Merged into the task; a null value deletes that key.`}))},{additionalProperties:!1}),h=t.Object({id:t.Integer({description:`Pending, unblocked task id to delegate`}),agent:t.String({description:`Exact discovered subagent name`}),inlineAgent:t.Optional(n),instructions:t.Optional(t.String({description:`Extra instructions appended to this delegated brief`})),relevantFiles:t.Optional(t.Array(t.String(),{description:`Files already read or located, relative to the working directory; at most 12 are used.`})),priorFindings:t.Optional(t.String({description:`Established facts this child should consume rather than re-derive`})),model:t.Optional(t.String({description:`Model override for this delegated run`})),context:t.Optional(t.String({enum:[...a],description:`Starting context for this child: 'fresh' or 'fork'`}))},{additionalProperties:!1}),g=t.Object({action:t.String({enum:[...r]}),tasks:t.Optional(t.Array(m,{minItems:1,description:`upsert only. An entry with an id changes that task, an entry without an id creates one. Entries apply in array order, so a later entry can depend on an earlier one by ref.`})),assignments:t.Optional(t.Array(h,{minItems:1,description:`Required for assign, one entry per task, including when there is only one.`})),id:t.Optional(t.Integer({description:`Task id, for get, delete and cancel. Not accepted by upsert or assign: those carry ids inside tasks[] and assignments[] entries.`})),status:t.Optional(t.String({enum:[...i],description:`list only: return just the tasks in this status. To SET a status, upsert the task by id.`})),includeDeleted:t.Optional(t.Boolean({description:`list only: also return deleted tombstones. Default false.`}))});export{e as COMMAND_NAME,c as ERR_REQUIRES_INTERACTIVE,l as MSG_NO_TASKS,f as MSG_UPSERT_FIELD_MISPLACED,r as TASK_ACTIONS,u as TASK_ACTION_FIELDS,a as TASK_CONTEXTS,i as TASK_STATUSES,s as TOOL_LABEL,o as TOOL_NAME,h as TaskAssignmentSchema,m as TaskItemSchema,g as TaskParamsSchema,d as taskActionAcceptsField};
|
|
2
|
+
//# sourceMappingURL=task.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.mjs","names":[],"sources":["../../src/schemas/task.ts"],"sourcesContent":["export { COMMAND_NAME } from '../constants/task';\nimport { InlineAgentSchema } from '@agimon-ai/doompi-core/delegation';\nimport { type Static, Type } from 'typebox';\n\nimport type { TaskAction } from '../models/task';\nimport { MAX_BRIEF_FILES } from '../types/delegation';\n\nexport const TASK_ACTIONS = ['upsert', 'list', 'get', 'delete', 'clear', 'assign', 'cancel'] as const;\nexport const TASK_STATUSES = ['pending', 'in_progress', 'completed', 'failed', 'deleted'] as const;\nexport const TASK_CONTEXTS = ['fresh', 'fork'] as const;\n\nexport const TOOL_NAME = 'task';\nexport const TOOL_LABEL = 'Task';\n\nexport const ERR_REQUIRES_INTERACTIVE = '/tasks requires interactive mode';\nexport const MSG_NO_TASKS = 'No tasks yet. Ask the agent to add some!';\n\n/**\n * Which top-level fields each action accepts.\n *\n * The params object is flat and shared across every action, so the schema alone\n * cannot express \"upsert has no top-level id\". That gap matters: a call like\n * `{\"action\":\"upsert\",\"id\":3,\"tasks\":[{\"status\":\"completed\"}]}` would otherwise\n * silently create a duplicate task, because the entry itself carries no id.\n */\nexport const TASK_ACTION_FIELDS = {\n upsert: ['action', 'tasks'],\n list: ['action', 'status', 'includeDeleted'],\n get: ['action', 'id'],\n delete: ['action', 'id'],\n clear: ['action'],\n assign: ['action', 'assignments'],\n cancel: ['action', 'id'],\n} as const satisfies Record<TaskAction, readonly string[]>;\n\nexport function taskActionAcceptsField(action: TaskAction, field: string): boolean {\n return (TASK_ACTION_FIELDS[action] as readonly string[]).includes(field);\n}\n\n/** Correction hint appended when a per-task field lands at the top level. */\nexport const MSG_UPSERT_FIELD_MISPLACED =\n 'Per-task fields belong inside each tasks[] entry, not at the top level: {\"action\":\"upsert\",\"tasks\":[{\"id\":3,\"status\":\"completed\"}]}.';\n\n/**\n * A dependency target: an existing task id, or the `ref` of a task created\n * earlier in the same call.\n */\nconst DepTokenSchema = Type.Union([Type.Integer(), Type.String()]);\n\n/**\n * One entry of an upsert. `additionalProperties: false` is load-bearing: pi\n * validates tool arguments against this schema before `execute` runs, so a\n * stray `{\"action\":\"update\"}` inside an entry is rejected at the boundary.\n */\nexport const TaskItemSchema = Type.Object(\n {\n id: Type.Optional(\n Type.Integer({\n description:\n 'Existing task id to change. Omit to create. An unknown id fails only that entry; it never creates.',\n }),\n ),\n ref: Type.Optional(\n Type.String({\n description:\n 'Temporary name for a task created by this entry, so a LATER entry in this array can list it in blockedBy. Must start with a letter; never stored.',\n }),\n ),\n subject: Type.Optional(\n Type.String({\n description: 'Short imperative subject. Required when the entry has no id; on an entry with an id it renames.',\n }),\n ),\n description: Type.Optional(\n Type.String({ description: 'Long-form detail; becomes the brief handed to the subagent on assign.' }),\n ),\n activeForm: Type.Optional(\n Type.String({ description: \"Present-continuous label shown while in_progress (e.g. 'writing tests')\" }),\n ),\n status: Type.Optional(\n Type.String({\n enum: [...TASK_STATUSES],\n description:\n 'New entries default to pending and cannot start deleted; on an entry with an id the transition must be legal.',\n }),\n ),\n blockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description:\n 'Dependencies for a NEW entry: task ids, or refs of tasks created EARLIER in this array. On an entry with an id use addBlockedBy / removeBlockedBy instead.',\n }),\n ),\n addBlockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description: 'Dependencies to add (ids or earlier refs). Additive; do not resend the full array.',\n }),\n ),\n removeBlockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description: 'Dependencies to remove. Additive; do not resend the full array.',\n }),\n ),\n owner: Type.Optional(Type.String({ description: 'Owner label; assign sets it to the subagent name.' })),\n metadata: Type.Optional(\n Type.Record(Type.String(), Type.Unknown(), {\n description: 'Merged into the task; a null value deletes that key.',\n }),\n ),\n },\n { additionalProperties: false },\n);\n\n/** One task-to-agent handoff in a native assignment batch. */\nexport const TaskAssignmentSchema = Type.Object(\n {\n id: Type.Integer({ description: 'Pending, unblocked task id to delegate' }),\n agent: Type.String({ description: 'Exact discovered subagent name' }),\n inlineAgent: Type.Optional(InlineAgentSchema),\n instructions: Type.Optional(Type.String({ description: 'Extra instructions appended to this delegated brief' })),\n relevantFiles: Type.Optional(\n Type.Array(Type.String(), {\n description: `Files already read or located, relative to the working directory; at most ${MAX_BRIEF_FILES} are used.`,\n }),\n ),\n priorFindings: Type.Optional(\n Type.String({ description: 'Established facts this child should consume rather than re-derive' }),\n ),\n model: Type.Optional(Type.String({ description: 'Model override for this delegated run' })),\n context: Type.Optional(\n Type.String({\n enum: [...TASK_CONTEXTS],\n description: \"Starting context for this child: 'fresh' or 'fork'\",\n }),\n ),\n },\n { additionalProperties: false },\n);\n\n/**\n * Tool parameters. Every `description` doubles as LLM-facing prompt copy, so\n * wording changes here change model behaviour.\n */\nexport const TaskParamsSchema = Type.Object({\n action: Type.String({ enum: [...TASK_ACTIONS] }),\n tasks: Type.Optional(\n Type.Array(TaskItemSchema, {\n minItems: 1,\n description:\n 'upsert only. An entry with an id changes that task, an entry without an id creates one. Entries apply in array order, so a later entry can depend on an earlier one by ref.',\n }),\n ),\n assignments: Type.Optional(\n Type.Array(TaskAssignmentSchema, {\n minItems: 1,\n description: 'Required for assign, one entry per task, including when there is only one.',\n }),\n ),\n id: Type.Optional(\n Type.Integer({\n description:\n 'Task id, for get, delete and cancel. Not accepted by upsert or assign: those carry ids inside tasks[] and assignments[] entries.',\n }),\n ),\n status: Type.Optional(\n Type.String({\n enum: [...TASK_STATUSES],\n description: 'list only: return just the tasks in this status. To SET a status, upsert the task by id.',\n }),\n ),\n includeDeleted: Type.Optional(\n Type.Boolean({ description: 'list only: also return deleted tombstones. Default false.' }),\n ),\n});\n\nexport type TaskItemParams = Static<typeof TaskItemSchema>;\nexport type TaskAssignmentParams = Static<typeof TaskAssignmentSchema>;\nexport type TaskParams = Static<typeof TaskParamsSchema>;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=`DOOM_TASK_MAX_TASKS`,t=`DOOM_TASK_COLLAPSE_KEY`,n=`DOOM_TASK_STORE_TTL_MS`,r=`DOOM_TASK_DELEGATION_TIMEOUT_MS`,i=`ctrl+shift+t`,a=2592e6,o=12e5;function s(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}function c(e){let t=s(e),n=typeof t.maxWidgetLines==`number`&&Number.isFinite(t.maxWidgetLines)?Math.min(Math.max(t.maxWidgetLines,3),60):12,r=typeof t.maxTasks==`number`&&Number.isSafeInteger(t.maxTasks)&&t.maxTasks>0?t.maxTasks:15,c=typeof t.storeTtlMs==`number`&&Number.isFinite(t.storeTtlMs)&&t.storeTtlMs>0?t.storeTtlMs:a,l=typeof t.delegationTimeoutMs==`number`&&Number.isFinite(t.delegationTimeoutMs)&&t.delegationTimeoutMs>0?t.delegationTimeoutMs:o;return{maxWidgetLines:n,maxTasks:r,storeTtlMs:c,collapseKey:typeof t.collapseKey==`string`&&t.collapseKey.trim()?t.collapseKey.trim().toLowerCase()===`off`?`off`:t.collapseKey.trim():i,delegationTimeoutMs:l}}function l(e=process.env){let t=Number.parseInt(e.DOOM_TASK_MAX_WIDGET_LINES??``,10);return Number.isFinite(t)?Math.min(Math.max(t,3),60):12}function u(t=process.env){let n=Number(t[e]);return Number.isSafeInteger(n)&&n>0?n:15}function d(e=process.env){let t=Number(e[n]);return Number.isFinite(t)&&t>0?t:a}function f(e=process.env){let t=Number(e[r]);return Number.isFinite(t)&&t>0?t:o}function p(e=process.env){let n=e[t]?.trim();return n?n.toLowerCase()===`off`?`off`:n:i}exports.COLLAPSE_KEY_ENV=t,exports.COLLAPSE_KEY_OFF=`off`,exports.DEFAULT_COLLAPSE_KEY=i,exports.DEFAULT_DELEGATION_TIMEOUT_MS=o,exports.DEFAULT_MAX_TASKS=15,exports.DEFAULT_MAX_WIDGET_LINES=12,exports.DEFAULT_STORE_TTL_MS=a,exports.DELEGATION_TIMEOUT_MS_ENV=r,exports.MAX_TASKS_ENV=e,exports.MAX_WIDGET_LINES_ENV=`DOOM_TASK_MAX_WIDGET_LINES`,exports.STORE_TTL_MS_ENV=n,exports.getDelegationTimeoutMs=f,exports.getMaxTasks=u,exports.getMaxWidgetLines=l,exports.getStoreTtlMs=d,exports.parsePiTaskConfig=c,exports.resolveCollapseKey=p;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/services/config/index.ts"],"sourcesContent":["/**\n * Extension configuration, read from the environment.\n *\n * Env rather than a config file: doom-pi already carries per-launch state to Pi\n * through env vars, so this keeps doom-task consistent with how the harness\n * configures the rest of the extension set.\n */\n\nexport const MAX_WIDGET_LINES_ENV = 'DOOM_TASK_MAX_WIDGET_LINES';\nexport const MAX_TASKS_ENV = 'DOOM_TASK_MAX_TASKS';\nexport const COLLAPSE_KEY_ENV = 'DOOM_TASK_COLLAPSE_KEY';\nexport const STORE_TTL_MS_ENV = 'DOOM_TASK_STORE_TTL_MS';\nexport const DELEGATION_TIMEOUT_MS_ENV = 'DOOM_TASK_DELEGATION_TIMEOUT_MS';\n\nexport const DEFAULT_MAX_WIDGET_LINES = 12;\nexport const DEFAULT_MAX_TASKS = 15;\nexport const DEFAULT_COLLAPSE_KEY = 'ctrl+shift+t';\nexport const DEFAULT_STORE_TTL_MS = 30 * 24 * 60 * 60 * 1000;\n/** Deliberately under the subagents auto-drain ceiling (30 min) so a headless\n * session still gets the failure and a model turn before draining gives up. */\nexport const DEFAULT_DELEGATION_TIMEOUT_MS = 20 * 60 * 1000;\nexport const COLLAPSE_KEY_OFF = 'off';\n\nconst MIN_WIDGET_LINES = 3;\nconst MAX_WIDGET_LINES = 60;\n\nexport interface PiTaskConfig {\n maxWidgetLines: number;\n maxTasks: number;\n storeTtlMs: number;\n collapseKey: string;\n delegationTimeoutMs: number;\n}\n\nfunction configRecord(value: unknown): Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : {};\n}\n\n/** Parse configuration only after the Pi host has applied its project-trust policy. */\nexport function parsePiTaskConfig(value: unknown): PiTaskConfig {\n const config = configRecord(value);\n const maxWidgetLines =\n typeof config.maxWidgetLines === 'number' && Number.isFinite(config.maxWidgetLines)\n ? Math.min(Math.max(config.maxWidgetLines, MIN_WIDGET_LINES), MAX_WIDGET_LINES)\n : DEFAULT_MAX_WIDGET_LINES;\n const maxTasks =\n typeof config.maxTasks === 'number' && Number.isSafeInteger(config.maxTasks) && config.maxTasks > 0\n ? config.maxTasks\n : DEFAULT_MAX_TASKS;\n const storeTtlMs =\n typeof config.storeTtlMs === 'number' && Number.isFinite(config.storeTtlMs) && config.storeTtlMs > 0\n ? config.storeTtlMs\n : DEFAULT_STORE_TTL_MS;\n const delegationTimeoutMs =\n typeof config.delegationTimeoutMs === 'number' &&\n Number.isFinite(config.delegationTimeoutMs) &&\n config.delegationTimeoutMs > 0\n ? config.delegationTimeoutMs\n : DEFAULT_DELEGATION_TIMEOUT_MS;\n const collapseKey =\n typeof config.collapseKey === 'string' && config.collapseKey.trim()\n ? config.collapseKey.trim().toLowerCase() === COLLAPSE_KEY_OFF\n ? COLLAPSE_KEY_OFF\n : config.collapseKey.trim()\n : DEFAULT_COLLAPSE_KEY;\n\n return { maxWidgetLines, maxTasks, storeTtlMs, collapseKey, delegationTimeoutMs };\n}\n\n/** Rows the overlay may use for content, clamped to a sane range. */\nexport function getMaxWidgetLines(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number.parseInt(env[MAX_WIDGET_LINES_ENV] ?? '', 10);\n if (!Number.isFinite(raw)) return DEFAULT_MAX_WIDGET_LINES;\n return Math.min(Math.max(raw, MIN_WIDGET_LINES), MAX_WIDGET_LINES);\n}\n\n/** Maximum number of non-deleted tasks retained on one board. */\nexport function getMaxTasks(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[MAX_TASKS_ENV]);\n return Number.isSafeInteger(raw) && raw > 0 ? raw : DEFAULT_MAX_TASKS;\n}\n\n/** Retention window for inactive session-tree stores. */\nexport function getStoreTtlMs(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[STORE_TTL_MS_ENV]);\n return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_STORE_TTL_MS;\n}\n\n/** How long a delegated run may go without reporting a result. */\nexport function getDelegationTimeoutMs(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[DELEGATION_TIMEOUT_MS_ENV]);\n return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_DELEGATION_TIMEOUT_MS;\n}\n\n/** Collapse shortcut, or the `off` sentinel when the user disabled it. */\nexport function resolveCollapseKey(env: NodeJS.ProcessEnv = process.env): string {\n const configured = env[COLLAPSE_KEY_ENV]?.trim();\n if (!configured) return DEFAULT_COLLAPSE_KEY;\n return configured.toLowerCase() === COLLAPSE_KEY_OFF ? COLLAPSE_KEY_OFF : configured;\n}\n"],"mappings":"AAQA,MACa,EAAgB,sBAChB,EAAmB,yBACnB,EAAmB,yBACnB,EAA4B,kCAI5B,EAAuB,eACvB,EAAuB,OAGvB,EAAgC,KAc7C,SAAS,EAAa,EAAyC,CAC7D,OAAyB,OAAO,GAAU,UAAnC,GAA+C,CAAC,MAAM,QAAQ,CAAK,EAAK,EAAoC,CAAC,CACtH,CAGA,SAAgB,EAAkB,EAA8B,CAC9D,IAAM,EAAS,EAAa,CAAK,EAC3B,EACJ,OAAO,EAAO,gBAAmB,UAAY,OAAO,SAAS,EAAO,cAAc,EAC9E,KAAK,IAAI,KAAK,IAAI,EAAO,eAAgB,CAAgB,EAAG,EAAgB,EAAA,GAE5E,EACJ,OAAO,EAAO,UAAa,UAAY,OAAO,cAAc,EAAO,QAAQ,GAAK,EAAO,SAAW,EAC9F,EAAO,SAAA,GAEP,EACJ,OAAO,EAAO,YAAe,UAAY,OAAO,SAAS,EAAO,UAAU,GAAK,EAAO,WAAa,EAC/F,EAAO,WACP,EACA,EACJ,OAAO,EAAO,qBAAwB,UACtC,OAAO,SAAS,EAAO,mBAAmB,GAC1C,EAAO,oBAAsB,EACzB,EAAO,oBACP,EAQN,MAAO,CAAE,iBAAgB,WAAU,aAAY,YAN7C,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,KAAK,EAC9D,EAAO,YAAY,KAAK,CAAC,CAAC,YAAY,IAAA,MAAA,MAEpC,EAAO,YAAY,KAAK,EAC1B,EAEsD,qBAAoB,CAClF,CAGA,SAAgB,EAAkB,EAAyB,QAAQ,IAAa,CAC9E,IAAM,EAAM,OAAO,SAAS,EAAA,4BAA6B,GAAI,EAAE,EAE/D,OADK,OAAO,SAAS,CAAG,EACjB,KAAK,IAAI,KAAK,IAAI,EAAK,CAAgB,EAAG,EAAgB,EADtC,EAE7B,CAGA,SAAgB,EAAY,EAAyB,QAAQ,IAAa,CACxE,IAAM,EAAM,OAAO,EAAI,EAAc,EACrC,OAAO,OAAO,cAAc,CAAG,GAAK,EAAM,EAAI,EAAA,EAChD,CAGA,SAAgB,EAAc,EAAyB,QAAQ,IAAa,CAC1E,IAAM,EAAM,OAAO,EAAI,EAAiB,EACxC,OAAO,OAAO,SAAS,CAAG,GAAK,EAAM,EAAI,EAAM,CACjD,CAGA,SAAgB,EAAuB,EAAyB,QAAQ,IAAa,CACnF,IAAM,EAAM,OAAO,EAAI,EAA0B,EACjD,OAAO,OAAO,SAAS,CAAG,GAAK,EAAM,EAAI,EAAM,CACjD,CAGA,SAAgB,EAAmB,EAAyB,QAAQ,IAAa,CAC/E,IAAM,EAAa,EAAI,EAAiB,EAAE,KAAK,EAE/C,OADK,EACE,EAAW,YAAY,IAAA,MAAA,MAA4C,EADlD,CAE1B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//#region src/services/config/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Extension configuration, read from the environment.
|
|
4
|
+
*
|
|
5
|
+
* Env rather than a config file: doom-pi already carries per-launch state to Pi
|
|
6
|
+
* through env vars, so this keeps doom-task consistent with how the harness
|
|
7
|
+
* configures the rest of the extension set.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MAX_WIDGET_LINES_ENV = "DOOM_TASK_MAX_WIDGET_LINES";
|
|
10
|
+
export declare const MAX_TASKS_ENV = "DOOM_TASK_MAX_TASKS";
|
|
11
|
+
export declare const COLLAPSE_KEY_ENV = "DOOM_TASK_COLLAPSE_KEY";
|
|
12
|
+
export declare const STORE_TTL_MS_ENV = "DOOM_TASK_STORE_TTL_MS";
|
|
13
|
+
export declare const DELEGATION_TIMEOUT_MS_ENV = "DOOM_TASK_DELEGATION_TIMEOUT_MS";
|
|
14
|
+
export declare const DEFAULT_MAX_WIDGET_LINES = 12;
|
|
15
|
+
export declare const DEFAULT_MAX_TASKS = 15;
|
|
16
|
+
export declare const DEFAULT_COLLAPSE_KEY = "ctrl+shift+t";
|
|
17
|
+
export declare const DEFAULT_STORE_TTL_MS: number;
|
|
18
|
+
/** Deliberately under the subagents auto-drain ceiling (30 min) so a headless
|
|
19
|
+
* session still gets the failure and a model turn before draining gives up. */
|
|
20
|
+
export declare const DEFAULT_DELEGATION_TIMEOUT_MS: number;
|
|
21
|
+
export declare const COLLAPSE_KEY_OFF = "off";
|
|
22
|
+
export interface PiTaskConfig {
|
|
23
|
+
maxWidgetLines: number;
|
|
24
|
+
maxTasks: number;
|
|
25
|
+
storeTtlMs: number;
|
|
26
|
+
collapseKey: string;
|
|
27
|
+
delegationTimeoutMs: number;
|
|
28
|
+
}
|
|
29
|
+
/** Parse configuration only after the Pi host has applied its project-trust policy. */
|
|
30
|
+
export declare function parsePiTaskConfig(value: unknown): PiTaskConfig;
|
|
31
|
+
/** Rows the overlay may use for content, clamped to a sane range. */
|
|
32
|
+
export declare function getMaxWidgetLines(env?: NodeJS.ProcessEnv): number;
|
|
33
|
+
/** Maximum number of non-deleted tasks retained on one board. */
|
|
34
|
+
export declare function getMaxTasks(env?: NodeJS.ProcessEnv): number;
|
|
35
|
+
/** Retention window for inactive session-tree stores. */
|
|
36
|
+
export declare function getStoreTtlMs(env?: NodeJS.ProcessEnv): number;
|
|
37
|
+
/** How long a delegated run may go without reporting a result. */
|
|
38
|
+
export declare function getDelegationTimeoutMs(env?: NodeJS.ProcessEnv): number;
|
|
39
|
+
/** Collapse shortcut, or the `off` sentinel when the user disabled it. */
|
|
40
|
+
export declare function resolveCollapseKey(env?: NodeJS.ProcessEnv): string;
|
|
41
|
+
//#endregion
|
|
42
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/services/config/index.ts"],"mappings":";;;;;;;;qBAQa;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA;qBACA;;;qBAGA;qBACA;iBAKI;EACf;EACA;EACA;EACA;EACA;;;wBAQc,kBAAkB,iBAAiB;;wBA+BnC,kBAAkB,MAAK,OAAO;;wBAO9B,YAAY,MAAK,OAAO;;wBAMxB,cAAc,MAAK,OAAO;;wBAM1B,uBAAuB,MAAK,OAAO;;wBAMnC,mBAAmB,MAAK,OAAO"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//#region src/services/config/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Extension configuration, read from the environment.
|
|
4
|
+
*
|
|
5
|
+
* Env rather than a config file: doom-pi already carries per-launch state to Pi
|
|
6
|
+
* through env vars, so this keeps doom-task consistent with how the harness
|
|
7
|
+
* configures the rest of the extension set.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MAX_WIDGET_LINES_ENV = "DOOM_TASK_MAX_WIDGET_LINES";
|
|
10
|
+
export declare const MAX_TASKS_ENV = "DOOM_TASK_MAX_TASKS";
|
|
11
|
+
export declare const COLLAPSE_KEY_ENV = "DOOM_TASK_COLLAPSE_KEY";
|
|
12
|
+
export declare const STORE_TTL_MS_ENV = "DOOM_TASK_STORE_TTL_MS";
|
|
13
|
+
export declare const DELEGATION_TIMEOUT_MS_ENV = "DOOM_TASK_DELEGATION_TIMEOUT_MS";
|
|
14
|
+
export declare const DEFAULT_MAX_WIDGET_LINES = 12;
|
|
15
|
+
export declare const DEFAULT_MAX_TASKS = 15;
|
|
16
|
+
export declare const DEFAULT_COLLAPSE_KEY = "ctrl+shift+t";
|
|
17
|
+
export declare const DEFAULT_STORE_TTL_MS: number;
|
|
18
|
+
/** Deliberately under the subagents auto-drain ceiling (30 min) so a headless
|
|
19
|
+
* session still gets the failure and a model turn before draining gives up. */
|
|
20
|
+
export declare const DEFAULT_DELEGATION_TIMEOUT_MS: number;
|
|
21
|
+
export declare const COLLAPSE_KEY_OFF = "off";
|
|
22
|
+
export interface PiTaskConfig {
|
|
23
|
+
maxWidgetLines: number;
|
|
24
|
+
maxTasks: number;
|
|
25
|
+
storeTtlMs: number;
|
|
26
|
+
collapseKey: string;
|
|
27
|
+
delegationTimeoutMs: number;
|
|
28
|
+
}
|
|
29
|
+
/** Parse configuration only after the Pi host has applied its project-trust policy. */
|
|
30
|
+
export declare function parsePiTaskConfig(value: unknown): PiTaskConfig;
|
|
31
|
+
/** Rows the overlay may use for content, clamped to a sane range. */
|
|
32
|
+
export declare function getMaxWidgetLines(env?: NodeJS.ProcessEnv): number;
|
|
33
|
+
/** Maximum number of non-deleted tasks retained on one board. */
|
|
34
|
+
export declare function getMaxTasks(env?: NodeJS.ProcessEnv): number;
|
|
35
|
+
/** Retention window for inactive session-tree stores. */
|
|
36
|
+
export declare function getStoreTtlMs(env?: NodeJS.ProcessEnv): number;
|
|
37
|
+
/** How long a delegated run may go without reporting a result. */
|
|
38
|
+
export declare function getDelegationTimeoutMs(env?: NodeJS.ProcessEnv): number;
|
|
39
|
+
/** Collapse shortcut, or the `off` sentinel when the user disabled it. */
|
|
40
|
+
export declare function resolveCollapseKey(env?: NodeJS.ProcessEnv): string;
|
|
41
|
+
//#endregion
|
|
42
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/config/index.ts"],"mappings":";;;;;;;;qBAQa;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA;qBACA;;;qBAGA;qBACA;iBAKI;EACf;EACA;EACA;EACA;EACA;;;wBAQc,kBAAkB,iBAAiB;;wBA+BnC,kBAAkB,MAAK,OAAO;;wBAO9B,YAAY,MAAK,OAAO;;wBAMxB,cAAc,MAAK,OAAO;;wBAM1B,uBAAuB,MAAK,OAAO;;wBAMnC,mBAAmB,MAAK,OAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=`DOOM_TASK_MAX_WIDGET_LINES`,t=`DOOM_TASK_MAX_TASKS`,n=`DOOM_TASK_COLLAPSE_KEY`,r=`DOOM_TASK_STORE_TTL_MS`,i=`DOOM_TASK_DELEGATION_TIMEOUT_MS`,a=12,o=15,s=`ctrl+shift+t`,c=2592e6,l=12e5,u=`off`;function d(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}function f(e){let t=d(e),n=typeof t.maxWidgetLines==`number`&&Number.isFinite(t.maxWidgetLines)?Math.min(Math.max(t.maxWidgetLines,3),60):12,r=typeof t.maxTasks==`number`&&Number.isSafeInteger(t.maxTasks)&&t.maxTasks>0?t.maxTasks:15,i=typeof t.storeTtlMs==`number`&&Number.isFinite(t.storeTtlMs)&&t.storeTtlMs>0?t.storeTtlMs:c,a=typeof t.delegationTimeoutMs==`number`&&Number.isFinite(t.delegationTimeoutMs)&&t.delegationTimeoutMs>0?t.delegationTimeoutMs:l;return{maxWidgetLines:n,maxTasks:r,storeTtlMs:i,collapseKey:typeof t.collapseKey==`string`&&t.collapseKey.trim()?t.collapseKey.trim().toLowerCase()===`off`?`off`:t.collapseKey.trim():s,delegationTimeoutMs:a}}function p(e=process.env){let t=Number.parseInt(e.DOOM_TASK_MAX_WIDGET_LINES??``,10);return Number.isFinite(t)?Math.min(Math.max(t,3),60):12}function m(e=process.env){let n=Number(e[t]);return Number.isSafeInteger(n)&&n>0?n:15}function h(e=process.env){let t=Number(e[r]);return Number.isFinite(t)&&t>0?t:c}function g(e=process.env){let t=Number(e[i]);return Number.isFinite(t)&&t>0?t:l}function _(e=process.env){let t=e[n]?.trim();return t?t.toLowerCase()===`off`?`off`:t:s}export{n as COLLAPSE_KEY_ENV,u as COLLAPSE_KEY_OFF,s as DEFAULT_COLLAPSE_KEY,l as DEFAULT_DELEGATION_TIMEOUT_MS,o as DEFAULT_MAX_TASKS,a as DEFAULT_MAX_WIDGET_LINES,c as DEFAULT_STORE_TTL_MS,i as DELEGATION_TIMEOUT_MS_ENV,t as MAX_TASKS_ENV,e as MAX_WIDGET_LINES_ENV,r as STORE_TTL_MS_ENV,g as getDelegationTimeoutMs,m as getMaxTasks,p as getMaxWidgetLines,h as getStoreTtlMs,f as parsePiTaskConfig,_ as resolveCollapseKey};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/config/index.ts"],"sourcesContent":["/**\n * Extension configuration, read from the environment.\n *\n * Env rather than a config file: doom-pi already carries per-launch state to Pi\n * through env vars, so this keeps doom-task consistent with how the harness\n * configures the rest of the extension set.\n */\n\nexport const MAX_WIDGET_LINES_ENV = 'DOOM_TASK_MAX_WIDGET_LINES';\nexport const MAX_TASKS_ENV = 'DOOM_TASK_MAX_TASKS';\nexport const COLLAPSE_KEY_ENV = 'DOOM_TASK_COLLAPSE_KEY';\nexport const STORE_TTL_MS_ENV = 'DOOM_TASK_STORE_TTL_MS';\nexport const DELEGATION_TIMEOUT_MS_ENV = 'DOOM_TASK_DELEGATION_TIMEOUT_MS';\n\nexport const DEFAULT_MAX_WIDGET_LINES = 12;\nexport const DEFAULT_MAX_TASKS = 15;\nexport const DEFAULT_COLLAPSE_KEY = 'ctrl+shift+t';\nexport const DEFAULT_STORE_TTL_MS = 30 * 24 * 60 * 60 * 1000;\n/** Deliberately under the subagents auto-drain ceiling (30 min) so a headless\n * session still gets the failure and a model turn before draining gives up. */\nexport const DEFAULT_DELEGATION_TIMEOUT_MS = 20 * 60 * 1000;\nexport const COLLAPSE_KEY_OFF = 'off';\n\nconst MIN_WIDGET_LINES = 3;\nconst MAX_WIDGET_LINES = 60;\n\nexport interface PiTaskConfig {\n maxWidgetLines: number;\n maxTasks: number;\n storeTtlMs: number;\n collapseKey: string;\n delegationTimeoutMs: number;\n}\n\nfunction configRecord(value: unknown): Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : {};\n}\n\n/** Parse configuration only after the Pi host has applied its project-trust policy. */\nexport function parsePiTaskConfig(value: unknown): PiTaskConfig {\n const config = configRecord(value);\n const maxWidgetLines =\n typeof config.maxWidgetLines === 'number' && Number.isFinite(config.maxWidgetLines)\n ? Math.min(Math.max(config.maxWidgetLines, MIN_WIDGET_LINES), MAX_WIDGET_LINES)\n : DEFAULT_MAX_WIDGET_LINES;\n const maxTasks =\n typeof config.maxTasks === 'number' && Number.isSafeInteger(config.maxTasks) && config.maxTasks > 0\n ? config.maxTasks\n : DEFAULT_MAX_TASKS;\n const storeTtlMs =\n typeof config.storeTtlMs === 'number' && Number.isFinite(config.storeTtlMs) && config.storeTtlMs > 0\n ? config.storeTtlMs\n : DEFAULT_STORE_TTL_MS;\n const delegationTimeoutMs =\n typeof config.delegationTimeoutMs === 'number' &&\n Number.isFinite(config.delegationTimeoutMs) &&\n config.delegationTimeoutMs > 0\n ? config.delegationTimeoutMs\n : DEFAULT_DELEGATION_TIMEOUT_MS;\n const collapseKey =\n typeof config.collapseKey === 'string' && config.collapseKey.trim()\n ? config.collapseKey.trim().toLowerCase() === COLLAPSE_KEY_OFF\n ? COLLAPSE_KEY_OFF\n : config.collapseKey.trim()\n : DEFAULT_COLLAPSE_KEY;\n\n return { maxWidgetLines, maxTasks, storeTtlMs, collapseKey, delegationTimeoutMs };\n}\n\n/** Rows the overlay may use for content, clamped to a sane range. */\nexport function getMaxWidgetLines(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number.parseInt(env[MAX_WIDGET_LINES_ENV] ?? '', 10);\n if (!Number.isFinite(raw)) return DEFAULT_MAX_WIDGET_LINES;\n return Math.min(Math.max(raw, MIN_WIDGET_LINES), MAX_WIDGET_LINES);\n}\n\n/** Maximum number of non-deleted tasks retained on one board. */\nexport function getMaxTasks(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[MAX_TASKS_ENV]);\n return Number.isSafeInteger(raw) && raw > 0 ? raw : DEFAULT_MAX_TASKS;\n}\n\n/** Retention window for inactive session-tree stores. */\nexport function getStoreTtlMs(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[STORE_TTL_MS_ENV]);\n return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_STORE_TTL_MS;\n}\n\n/** How long a delegated run may go without reporting a result. */\nexport function getDelegationTimeoutMs(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[DELEGATION_TIMEOUT_MS_ENV]);\n return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_DELEGATION_TIMEOUT_MS;\n}\n\n/** Collapse shortcut, or the `off` sentinel when the user disabled it. */\nexport function resolveCollapseKey(env: NodeJS.ProcessEnv = process.env): string {\n const configured = env[COLLAPSE_KEY_ENV]?.trim();\n if (!configured) return DEFAULT_COLLAPSE_KEY;\n return configured.toLowerCase() === COLLAPSE_KEY_OFF ? COLLAPSE_KEY_OFF : configured;\n}\n"],"mappings":"AAQA,MAAa,EAAuB,6BACvB,EAAgB,sBAChB,EAAmB,yBACnB,EAAmB,yBACnB,EAA4B,kCAE5B,EAA2B,GAC3B,EAAoB,GACpB,EAAuB,eACvB,EAAuB,OAGvB,EAAgC,KAChC,EAAmB,MAahC,SAAS,EAAa,EAAyC,CAC7D,OAAyB,OAAO,GAAU,UAAnC,GAA+C,CAAC,MAAM,QAAQ,CAAK,EAAK,EAAoC,CAAC,CACtH,CAGA,SAAgB,EAAkB,EAA8B,CAC9D,IAAM,EAAS,EAAa,CAAK,EAC3B,EACJ,OAAO,EAAO,gBAAmB,UAAY,OAAO,SAAS,EAAO,cAAc,EAC9E,KAAK,IAAI,KAAK,IAAI,EAAO,eAAgB,CAAgB,EAAG,EAAgB,EAAA,GAE5E,EACJ,OAAO,EAAO,UAAa,UAAY,OAAO,cAAc,EAAO,QAAQ,GAAK,EAAO,SAAW,EAC9F,EAAO,SAAA,GAEP,EACJ,OAAO,EAAO,YAAe,UAAY,OAAO,SAAS,EAAO,UAAU,GAAK,EAAO,WAAa,EAC/F,EAAO,WACP,EACA,EACJ,OAAO,EAAO,qBAAwB,UACtC,OAAO,SAAS,EAAO,mBAAmB,GAC1C,EAAO,oBAAsB,EACzB,EAAO,oBACP,EAQN,MAAO,CAAE,iBAAgB,WAAU,aAAY,YAN7C,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,KAAK,EAC9D,EAAO,YAAY,KAAK,CAAC,CAAC,YAAY,IAAA,MAAA,MAEpC,EAAO,YAAY,KAAK,EAC1B,EAEsD,qBAAoB,CAClF,CAGA,SAAgB,EAAkB,EAAyB,QAAQ,IAAa,CAC9E,IAAM,EAAM,OAAO,SAAS,EAAA,4BAA6B,GAAI,EAAE,EAE/D,OADK,OAAO,SAAS,CAAG,EACjB,KAAK,IAAI,KAAK,IAAI,EAAK,CAAgB,EAAG,EAAgB,EADtC,EAE7B,CAGA,SAAgB,EAAY,EAAyB,QAAQ,IAAa,CACxE,IAAM,EAAM,OAAO,EAAI,EAAc,EACrC,OAAO,OAAO,cAAc,CAAG,GAAK,EAAM,EAAI,EAAA,EAChD,CAGA,SAAgB,EAAc,EAAyB,QAAQ,IAAa,CAC1E,IAAM,EAAM,OAAO,EAAI,EAAiB,EACxC,OAAO,OAAO,SAAS,CAAG,GAAK,EAAM,EAAI,EAAM,CACjD,CAGA,SAAgB,EAAuB,EAAyB,QAAQ,IAAa,CACnF,IAAM,EAAM,OAAO,EAAI,EAA0B,EACjD,OAAO,OAAO,SAAS,CAAG,GAAK,EAAM,EAAI,EAAM,CACjD,CAGA,SAAgB,EAAmB,EAAyB,QAAQ,IAAa,CAC/E,IAAM,EAAa,EAAI,EAAiB,EAAE,KAAK,EAE/C,OADK,EACE,EAAW,YAAY,IAAA,MAAA,MAA4C,EADlD,CAE1B"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const e=`@agimon-ai/doompi-task`,t=`active-tasks`,n=`Active tasks`;function r(e){return e.filter(e=>e.status===`pending`||e.status===`in_progress`||e.status===`failed`).map(e=>({id:e.id,status:e.status,subject:e.subject,...e.activeForm?{activeForm:e.activeForm}:{},...e.owner?{owner:e.owner}:{},...e.blockedBy?.length?{blockedBy:e.blockedBy}:{},...e.delegation?{delegation:{agent:e.delegation.agent,state:e.delegation.state,...e.delegation.result?.error?{error:e.delegation.result.error}:{}}}:{}}))}function i(e){return e.length===0?`(no active tasks)`:e.map(e=>{let t=[e.activeForm?`active: ${e.activeForm}`:void 0,e.owner?`owner: ${e.owner}`:void 0,e.blockedBy?.length?`blocked by: ${e.blockedBy.join(`, `)}`:void 0,e.delegation?`delegation: ${e.delegation.agent} (${e.delegation.state})`:void 0,e.delegation?.error?`error: ${e.delegation.error}`:void 0].filter(e=>!!e);return`- #${e.id} [${e.status}] ${e.subject}${t.length>0?` | ${t.join(` | `)}`:``}`}).join(`
|
|
2
|
+
`)}function a(a){return Object.freeze({source:e,id:t,label:n,order:100,snapshot:()=>i(r(a()))})}exports.TASK_CONTEXT_CONTRIBUTION_ID=t,exports.TASK_CONTEXT_CONTRIBUTION_LABEL=n,exports.TASK_CONTEXT_CONTRIBUTION_SOURCE=e,exports.createTaskContextContribution=a;
|
|
3
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/services/contextContribution/index.ts"],"sourcesContent":["import type { DoomContextContribution } from '@agimon-ai/doompi-core/context-contributions';\n\nimport type { Task } from '../../models/task';\n\nexport const TASK_CONTEXT_CONTRIBUTION_SOURCE = '@agimon-ai/doompi-task';\nexport const TASK_CONTEXT_CONTRIBUTION_ID = 'active-tasks';\nexport const TASK_CONTEXT_CONTRIBUTION_LABEL = 'Active tasks';\nexport const TASK_CONTEXT_CONTRIBUTION_ORDER = 100;\n\ninterface TaskContextSnapshot {\n readonly id: number;\n readonly status: Task['status'];\n readonly subject: string;\n readonly activeForm?: string;\n readonly owner?: string;\n readonly blockedBy?: readonly number[];\n readonly delegation?: {\n readonly agent: string;\n readonly state: NonNullable<Task['delegation']>['state'];\n readonly error?: string;\n };\n}\n\nfunction activeTaskSnapshots(tasks: readonly Task[]): TaskContextSnapshot[] {\n return tasks\n .filter((task) => task.status === 'pending' || task.status === 'in_progress' || task.status === 'failed')\n .map((task) => ({\n id: task.id,\n status: task.status,\n subject: task.subject,\n ...(task.activeForm ? { activeForm: task.activeForm } : {}),\n ...(task.owner ? { owner: task.owner } : {}),\n ...(task.blockedBy?.length ? { blockedBy: task.blockedBy } : {}),\n ...(task.delegation\n ? {\n delegation: {\n agent: task.delegation.agent,\n state: task.delegation.state,\n ...(task.delegation.result?.error ? { error: task.delegation.result.error } : {}),\n },\n }\n : {}),\n }));\n}\n\nfunction formatTaskSnapshots(tasks: readonly TaskContextSnapshot[]): string {\n if (tasks.length === 0) return '(no active tasks)';\n return tasks\n .map((task) => {\n const details = [\n task.activeForm ? `active: ${task.activeForm}` : undefined,\n task.owner ? `owner: ${task.owner}` : undefined,\n task.blockedBy?.length ? `blocked by: ${task.blockedBy.join(', ')}` : undefined,\n task.delegation ? `delegation: ${task.delegation.agent} (${task.delegation.state})` : undefined,\n task.delegation?.error ? `error: ${task.delegation.error}` : undefined,\n ].filter((value): value is string => Boolean(value));\n return `- #${task.id} [${task.status}] ${task.subject}${details.length > 0 ? ` | ${details.join(' | ')}` : ''}`;\n })\n .join('\\n');\n}\n\n/** Builds Task's bounded, synchronous contribution from its in-memory store snapshot. */\nexport function createTaskContextContribution(readTasks: () => readonly Task[]): DoomContextContribution {\n return Object.freeze({\n source: TASK_CONTEXT_CONTRIBUTION_SOURCE,\n id: TASK_CONTEXT_CONTRIBUTION_ID,\n label: TASK_CONTEXT_CONTRIBUTION_LABEL,\n order: TASK_CONTEXT_CONTRIBUTION_ORDER,\n snapshot: () => formatTaskSnapshots(activeTaskSnapshots(readTasks())),\n });\n}\n"],"mappings":"AAIA,MAAa,EAAmC,yBACnC,EAA+B,eAC/B,EAAkC,eAiB/C,SAAS,EAAoB,EAA+C,CAC1E,OAAO,EACJ,OAAQ,GAAS,EAAK,SAAW,WAAa,EAAK,SAAW,eAAiB,EAAK,SAAW,QAAQ,CAAC,CACxG,IAAK,IAAU,CACd,GAAI,EAAK,GACT,OAAQ,EAAK,OACb,QAAS,EAAK,QACd,GAAI,EAAK,WAAa,CAAE,WAAY,EAAK,UAAW,EAAI,CAAC,EACzD,GAAI,EAAK,MAAQ,CAAE,MAAO,EAAK,KAAM,EAAI,CAAC,EAC1C,GAAI,EAAK,WAAW,OAAS,CAAE,UAAW,EAAK,SAAU,EAAI,CAAC,EAC9D,GAAI,EAAK,WACL,CACE,WAAY,CACV,MAAO,EAAK,WAAW,MACvB,MAAO,EAAK,WAAW,MACvB,GAAI,EAAK,WAAW,QAAQ,MAAQ,CAAE,MAAO,EAAK,WAAW,OAAO,KAAM,EAAI,CAAC,CACjF,CACF,EACA,CAAC,CACP,EAAE,CACN,CAEA,SAAS,EAAoB,EAA+C,CAE1E,OADI,EAAM,SAAW,EAAU,oBACxB,EACJ,IAAK,GAAS,CACb,IAAM,EAAU,CACd,EAAK,WAAa,WAAW,EAAK,aAAe,IAAA,GACjD,EAAK,MAAQ,UAAU,EAAK,QAAU,IAAA,GACtC,EAAK,WAAW,OAAS,eAAe,EAAK,UAAU,KAAK,IAAI,IAAM,IAAA,GACtE,EAAK,WAAa,eAAe,EAAK,WAAW,MAAM,IAAI,EAAK,WAAW,MAAM,GAAK,IAAA,GACtF,EAAK,YAAY,MAAQ,UAAU,EAAK,WAAW,QAAU,IAAA,EAC/D,CAAC,CAAC,OAAQ,GAA2B,EAAQ,CAAM,EACnD,MAAO,MAAM,EAAK,GAAG,IAAI,EAAK,OAAO,IAAI,EAAK,UAAU,EAAQ,OAAS,EAAI,MAAM,EAAQ,KAAK,KAAK,IAAM,IAC7G,CAAC,CAAC,CACD,KAAK;CAAI,CACd,CAGA,SAAgB,EAA8B,EAA2D,CACvG,OAAO,OAAO,OAAO,CACnB,OAAQ,EACR,GAAI,EACJ,MAAO,EACP,MAAA,IACA,aAAgB,EAAoB,EAAoB,EAAU,CAAC,CAAC,CACtE,CAAC,CACH"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const e=`@agimon-ai/doompi-task`,t=`active-tasks`,n=`Active tasks`;function r(e){return e.filter(e=>e.status===`pending`||e.status===`in_progress`||e.status===`failed`).map(e=>({id:e.id,status:e.status,subject:e.subject,...e.activeForm?{activeForm:e.activeForm}:{},...e.owner?{owner:e.owner}:{},...e.blockedBy?.length?{blockedBy:e.blockedBy}:{},...e.delegation?{delegation:{agent:e.delegation.agent,state:e.delegation.state,...e.delegation.result?.error?{error:e.delegation.result.error}:{}}}:{}}))}function i(e){return e.length===0?`(no active tasks)`:e.map(e=>{let t=[e.activeForm?`active: ${e.activeForm}`:void 0,e.owner?`owner: ${e.owner}`:void 0,e.blockedBy?.length?`blocked by: ${e.blockedBy.join(`, `)}`:void 0,e.delegation?`delegation: ${e.delegation.agent} (${e.delegation.state})`:void 0,e.delegation?.error?`error: ${e.delegation.error}`:void 0].filter(e=>!!e);return`- #${e.id} [${e.status}] ${e.subject}${t.length>0?` | ${t.join(` | `)}`:``}`}).join(`
|
|
2
|
+
`)}function a(a){return Object.freeze({source:e,id:t,label:n,order:100,snapshot:()=>i(r(a()))})}export{t as TASK_CONTEXT_CONTRIBUTION_ID,n as TASK_CONTEXT_CONTRIBUTION_LABEL,e as TASK_CONTEXT_CONTRIBUTION_SOURCE,a as createTaskContextContribution};
|
|
3
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/contextContribution/index.ts"],"sourcesContent":["import type { DoomContextContribution } from '@agimon-ai/doompi-core/context-contributions';\n\nimport type { Task } from '../../models/task';\n\nexport const TASK_CONTEXT_CONTRIBUTION_SOURCE = '@agimon-ai/doompi-task';\nexport const TASK_CONTEXT_CONTRIBUTION_ID = 'active-tasks';\nexport const TASK_CONTEXT_CONTRIBUTION_LABEL = 'Active tasks';\nexport const TASK_CONTEXT_CONTRIBUTION_ORDER = 100;\n\ninterface TaskContextSnapshot {\n readonly id: number;\n readonly status: Task['status'];\n readonly subject: string;\n readonly activeForm?: string;\n readonly owner?: string;\n readonly blockedBy?: readonly number[];\n readonly delegation?: {\n readonly agent: string;\n readonly state: NonNullable<Task['delegation']>['state'];\n readonly error?: string;\n };\n}\n\nfunction activeTaskSnapshots(tasks: readonly Task[]): TaskContextSnapshot[] {\n return tasks\n .filter((task) => task.status === 'pending' || task.status === 'in_progress' || task.status === 'failed')\n .map((task) => ({\n id: task.id,\n status: task.status,\n subject: task.subject,\n ...(task.activeForm ? { activeForm: task.activeForm } : {}),\n ...(task.owner ? { owner: task.owner } : {}),\n ...(task.blockedBy?.length ? { blockedBy: task.blockedBy } : {}),\n ...(task.delegation\n ? {\n delegation: {\n agent: task.delegation.agent,\n state: task.delegation.state,\n ...(task.delegation.result?.error ? { error: task.delegation.result.error } : {}),\n },\n }\n : {}),\n }));\n}\n\nfunction formatTaskSnapshots(tasks: readonly TaskContextSnapshot[]): string {\n if (tasks.length === 0) return '(no active tasks)';\n return tasks\n .map((task) => {\n const details = [\n task.activeForm ? `active: ${task.activeForm}` : undefined,\n task.owner ? `owner: ${task.owner}` : undefined,\n task.blockedBy?.length ? `blocked by: ${task.blockedBy.join(', ')}` : undefined,\n task.delegation ? `delegation: ${task.delegation.agent} (${task.delegation.state})` : undefined,\n task.delegation?.error ? `error: ${task.delegation.error}` : undefined,\n ].filter((value): value is string => Boolean(value));\n return `- #${task.id} [${task.status}] ${task.subject}${details.length > 0 ? ` | ${details.join(' | ')}` : ''}`;\n })\n .join('\\n');\n}\n\n/** Builds Task's bounded, synchronous contribution from its in-memory store snapshot. */\nexport function createTaskContextContribution(readTasks: () => readonly Task[]): DoomContextContribution {\n return Object.freeze({\n source: TASK_CONTEXT_CONTRIBUTION_SOURCE,\n id: TASK_CONTEXT_CONTRIBUTION_ID,\n label: TASK_CONTEXT_CONTRIBUTION_LABEL,\n order: TASK_CONTEXT_CONTRIBUTION_ORDER,\n snapshot: () => formatTaskSnapshots(activeTaskSnapshots(readTasks())),\n });\n}\n"],"mappings":"AAIA,MAAa,EAAmC,yBACnC,EAA+B,eAC/B,EAAkC,eAiB/C,SAAS,EAAoB,EAA+C,CAC1E,OAAO,EACJ,OAAQ,GAAS,EAAK,SAAW,WAAa,EAAK,SAAW,eAAiB,EAAK,SAAW,QAAQ,CAAC,CACxG,IAAK,IAAU,CACd,GAAI,EAAK,GACT,OAAQ,EAAK,OACb,QAAS,EAAK,QACd,GAAI,EAAK,WAAa,CAAE,WAAY,EAAK,UAAW,EAAI,CAAC,EACzD,GAAI,EAAK,MAAQ,CAAE,MAAO,EAAK,KAAM,EAAI,CAAC,EAC1C,GAAI,EAAK,WAAW,OAAS,CAAE,UAAW,EAAK,SAAU,EAAI,CAAC,EAC9D,GAAI,EAAK,WACL,CACE,WAAY,CACV,MAAO,EAAK,WAAW,MACvB,MAAO,EAAK,WAAW,MACvB,GAAI,EAAK,WAAW,QAAQ,MAAQ,CAAE,MAAO,EAAK,WAAW,OAAO,KAAM,EAAI,CAAC,CACjF,CACF,EACA,CAAC,CACP,EAAE,CACN,CAEA,SAAS,EAAoB,EAA+C,CAE1E,OADI,EAAM,SAAW,EAAU,oBACxB,EACJ,IAAK,GAAS,CACb,IAAM,EAAU,CACd,EAAK,WAAa,WAAW,EAAK,aAAe,IAAA,GACjD,EAAK,MAAQ,UAAU,EAAK,QAAU,IAAA,GACtC,EAAK,WAAW,OAAS,eAAe,EAAK,UAAU,KAAK,IAAI,IAAM,IAAA,GACtE,EAAK,WAAa,eAAe,EAAK,WAAW,MAAM,IAAI,EAAK,WAAW,MAAM,GAAK,IAAA,GACtF,EAAK,YAAY,MAAQ,UAAU,EAAK,WAAW,QAAU,IAAA,EAC/D,CAAC,CAAC,OAAQ,GAA2B,EAAQ,CAAM,EACnD,MAAO,MAAM,EAAK,GAAG,IAAI,EAAK,OAAO,IAAI,EAAK,UAAU,EAAQ,OAAS,EAAI,MAAM,EAAQ,KAAK,KAAK,IAAM,IAC7G,CAAC,CAAC,CACD,KAAK;CAAI,CACd,CAGA,SAAgB,EAA8B,EAA2D,CACvG,OAAO,OAAO,OAAO,CACnB,OAAQ,EACR,GAAI,EACJ,MAAO,EACP,MAAA,IACA,aAAgB,EAAoB,EAAoB,EAAU,CAAC,CAAC,CACtE,CAAC,CACH"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const e=require("../../models/taskGraph.cjs"),t=require("../../types/delegation.cjs"),n=require("../../types/telemetry.cjs"),r=require("../../models/task.cjs"),i=require("../reconcile/index.cjs");let a=require("@agimon-ai/doompi-core/delegation");const o=`doom-task-notify`,s=`completed`,c=`failed`,l=`cancelled`,u=`task.id`,d=`delegation.request_id`,f=`delegation.agent_name`,p=`delegation.context_present`,m=`delegation.context_file_count`,h=`delegation.context_notes_length`,g=`No subagent runtime responded. Delegation needs the subagents extension — relaunch doom-pi with agents enabled.`,_=`assign is only available in the main session. Update this task directly instead of re-delegating it.`,v=`Subagent did not acknowledge the cancel request`;function y(e,t=4e3){if(e)return e.length<=t?e:`${e.slice(0,t)}\n… (truncated)`}function b(e){return e instanceof Error?e.message:String(e)}function x(e,t,n){let r=new Set;for(let i of e.relevantFiles??[]){if(r.size>=12)break;let e=n.formatBriefPath(i.trim(),t);e&&e!==`.`&&r.add(e)}return{files:[...r],notes:y(e.priorFindings?.trim(),1500)}}function S(e,t,n){let r=[`Task #${e.id}: ${e.subject}`];if(e.description&&r.push(e.description),t&&r.push(t),n.files.length>0||n.notes){let e=[`Parent context — consume before repository discovery:`];n.files.length>0&&e.push(`- Parent-verified files (read these first with direct reads): ${n.files.join(`, `)}`),n.notes&&e.push(`- Established facts (do not re-derive unless direct evidence contradicts them): ${n.notes}`),e.push(`This pack satisfies initial repository/context exploration. Do not begin with repository-wide listing, find, or grep. Expand only after consuming the pack and naming a concrete missing dependency or invalid path; search narrowly for that item and state why.`),r.push(e.join(`
|
|
2
|
+
`))}return r.push(`Coordination: work directly without changing the task record; ask main through intercom only for blockers or decisions; report changed files and verification when done.`),r.join(`
|
|
3
|
+
|
|
4
|
+
`)}var C=class t{options;progress=new Map;pendingTasks=new Map;settlingRequests=new Set;timers=new Map;subscriptions=[];service;constructor(e){this.options=e}now(){return this.options.now?.()??new Date().toISOString()}nowMs(){return this.options.nowMs?.()??Date.now()}get runTimeoutMs(){return this.options.runTimeoutMs??12e5}report(e,t,n){this.options.report?.error(e,t,n)}get isChildSession(){return!!this.options.platform.environment.PI_SUBAGENT_CHILD}progressFor(e){let t=e.delegation?.requestId;return t?this.progress.get(t):void 0}static elapsedMs(e,t=Date.now()){let n=e.durationMs??0,r=e.durationObservedAt??t;return n+Math.max(0,t-r)}bind(e,t){return this.unbind(),this.service=t,this.subscriptions.push(e.on(a.DOOM_DELEGATION_ACCEPTED_EVENT,e=>{this.handleAccepted(e)}),e.on(a.DOOM_DELEGATION_STARTED_EVENT,e=>{this.handleStarted(e)}),e.on(a.DOOM_DELEGATION_UPDATED_EVENT,e=>{this.handleUpdate(e)}),e.on(a.DOOM_DELEGATION_FINISHED_EVENT,e=>{this.handleResponse(e).catch(t=>{this.report(n.TASK_EVENT.delegationResponseFailed,t,{[d]:e.requestId})})})),()=>{this.service===t&&this.unbind()}}unbind(){for(let e of this.subscriptions.splice(0))e();this.service=void 0}listActiveWork(){return[...this.pendingTasks.entries()].flatMap(([e,t])=>t.sessionId?[{id:`task-${t.taskId}:${e}`,sessionId:t.sessionId}]:[])}async reconcile(e=()=>!0){let{value:t}=await this.options.store.mutate(t=>{if(!e())return{value:[]};let n=i.reconcileOrphanedDelegations(t,this.now(),void 0,{pid:this.options.platform.processId,liveRequestIds:new Set(this.pendingTasks.keys())});return n.orphaned.length===0?{value:[]}:{document:n.document,value:n.orphaned}});if(!e())return[];for(let e of t)this.options.report?.warn(n.TASK_EVENT.delegationOrphaned,Error(e.delegation?.result?.error??``),{[u]:e.id,...e.delegation?.agent?{[f]:e.delegation.agent}:{},...e.delegation?.pid===void 0?{}:{"delegation.pid":e.delegation.pid}});return t.length>0&&this.options.onChange?.(),t}async assign(t,i){let a=i.agent?.trim();if(!a)return{ok:!1,message:`agent required for assign`};if(this.isChildSession)return{ok:!1,message:_};if(i.signal?.aborted)return{ok:!1,message:`delegation cancelled before it started`};let o=this.options.platform.createRequestId(),l=this.now(),v=this.options.getSessionId?.(),y=x(i,this.options.cwd,this.options.platform),{value:C}=await this.options.store.mutate(n=>{let c=n.tasks.findIndex(e=>e.id===t);if(c===-1)return{value:{ok:!1,message:`#${t} not found`}};let u=n.tasks[c];if(u.status===`deleted`)return{value:{ok:!1,message:`#${t} is deleted`}};if(u.status===s)return{value:{ok:!1,message:`#${t} is already completed`}};if(r.isDelegationActive(u))return{value:{ok:!1,message:`#${t} is already delegated to ${u.delegation?.agent}`}};if(e.isBlocked(n.tasks,u))return{value:{ok:!1,message:`#${t} is blocked by ${(u.blockedBy??[]).map(e=>`#${e}`).join(`, `)}`}};let d={requestId:o,agent:a,state:`requested`,pid:this.options.platform.processId,startedAt:l,...v?{sessionId:v}:{},...i.model?{model:i.model}:{}},f=[...n.tasks];return f[c]={...u,owner:a,updatedAt:l,delegation:d},{document:{...n,tasks:f},value:{ok:!0,message:``,task:f[c]}}});if(!C.ok||!C.task)return{ok:!1,message:C.message};let w=y.notes?.length??0;this.pendingTasks.set(o,{taskId:t,sessionId:v}),this.progress.set(o,{agent:a,contextFileCount:y.files.length,contextNotesLength:w}),this.armStartedTimeout(o),this.options.onChange?.();let T={requestId:o,taskId:t,agent:a,...i.inlineAgent?{inlineAgent:i.inlineAgent}:{},prompt:S(C.task,i.instructions,y),...i.context?{context:i.context}:{},cwd:this.options.cwd,artifacts:!0,timeoutMs:this.runTimeoutMs,runMode:`detached`,teamTask:{id:String(C.task.id),subject:C.task.subject},...i.model?{model:i.model}:{}};try{let e=this.service;if(!e)throw Error(g);e.request(T).catch(e=>{this.report(n.TASK_EVENT.delegationRequestFailed,e,{[u]:t,[d]:o,[f]:a}),this.settleDetached(o,c,{status:c,error:`Delegation request failed: ${b(e)}`})})}catch(e){this.report(n.TASK_EVENT.delegationRequestFailed,e,{[u]:t,[d]:o,[f]:a});let r=b(e);return await this.settle(o,c,{status:c,error:`Delegation request failed: ${r}`}),{ok:!1,message:`Could not dispatch #${t} to ${a}: ${r}`}}return this.options.report?.event(n.TASK_EVENT.delegationAssigned,{[u]:t,[d]:o,[f]:a,[p]:y.files.length>0||w>0,[m]:y.files.length,[h]:w,"delegation.brief_length":T.prompt.length}),{ok:!0,message:`Delegated #${t} to ${a} in the background. It runs independently of this turn and will notify you when it finishes. Continue non-overlapping work, or end your turn.`}}async cancel(e){let t=this.options.store.read().tasks.find(t=>t.id===e);if(!t)return{ok:!1,message:`#${e} not found`};if(!t.delegation||!r.isDelegationActive(t))return{ok:!1,message:`#${e} has no running delegation`};let{requestId:n}=t.delegation;return this.service?.cancel({requestId:n}),this.armCancelTimeout(n),{ok:!0,message:`Cancelling delegation for #${e} (${t.delegation.agent})`}}settleDetached(e,t,r,i=n.TASK_EVENT.delegationSettleFailed){this.settle(e,t,r).catch(t=>{this.report(i,t,{[d]:e})})}armStartedTimeout(e){this.armTimer(e,this.options.startedTimeoutMs??5e3,()=>{this.settleDetached(e,c,{status:c,error:g})})}armRunTimeout(e){let t=Math.min(6e4,this.runTimeoutMs);this.armTimer(e,this.runTimeoutMs+t,()=>{let t=this.pendingTasks.get(e)?.taskId,r=this.progress.get(e)?.agent,i=Error(`Delegation produced no result within ${this.runTimeoutMs}ms`);this.options.report?.warn(n.TASK_EVENT.delegationTimedOut,i,{...t===void 0?{}:{[u]:t},[d]:e,...r?{[f]:r}:{}}),this.service?.cancel({requestId:e,reason:i.message}),this.settleDetached(e,c,{status:`timed_out`,error:i.message})})}armCancelTimeout(e){this.pendingTasks.has(e)&&this.armTimer(e,this.options.cancelTimeoutMs??1e4,()=>{this.settleDetached(e,l,{status:l,error:v})})}armTimer(e,t,n){this.clearTimer(e);let r=setTimeout(n,t);r.unref?.(),this.timers.set(e,r)}clearTimer(e){let t=this.timers.get(e);t&&clearTimeout(t),this.timers.delete(e)}handleAccepted(e){this.pendingTasks.has(e.requestId)&&this.armRunTimeout(e.requestId)}handleStarted(e){let{runId:t}=e,r=this.pendingTasks.get(e.requestId)?.taskId;if(r===void 0)return;this.armRunTimeout(e.requestId);let i=this.progress.get(e.requestId);i&&this.progress.set(e.requestId,{...i,durationMs:i.durationMs??0,durationObservedAt:i.durationObservedAt??this.nowMs()}),this.options.store.mutate(n=>this.patchDelegation(n,e.requestId,(e,n)=>({...e,status:e.status===s?e.status:`in_progress`,delegation:{...n,state:`running`,startedAt:n.startedAt??this.now(),...t?{runId:t}:{}}}))).then(()=>this.options.onChange?.()).catch(t=>{this.report(n.TASK_EVENT.delegationStartFailed,t,{[u]:r,[d]:e.requestId})})}handleUpdate(e){let n=this.progress.get(e.requestId);if(!n)return;let r=this.nowMs(),i=t.elapsedMs(n,r),a=e.durationMs!==void 0;this.progress.set(e.requestId,{...n,currentTool:e.currentTool??n.currentTool,toolCount:e.toolCount===void 0?n.toolCount:Math.max(n.toolCount??0,e.toolCount),tokens:e.tokens===void 0?n.tokens:Math.max(n.tokens??0,e.tokens),durationMs:a?Math.max(i,e.durationMs):n.durationMs,durationObservedAt:a?r:n.durationObservedAt}),this.options.onChange?.()}async handleResponse(e){if(!this.pendingTasks.has(e.requestId))return;let t=e.status===s&&!e.error?s:e.status===l?l:c;await this.settle(e.requestId,t,{status:e.status,error:e.error,output:y(e.output),outputPath:e.outputPath,sessionFile:e.sessionFile,durationMs:e.durationMs,toolCount:e.toolCount})}async settle(t,r,i){let a=this.pendingTasks.get(t);if(!a||this.settlingRequests.has(t))return;this.settlingRequests.add(t),this.clearTimer(t);let{taskId:o}=a,g=this.progress.get(t);try{let a=this.now(),_;try{let{value:e}=await this.options.store.mutate(e=>this.patchDelegation(e,t,(e,t)=>({...e,status:r===s?s:r===l?`pending`:c,updatedAt:a,delegation:{...t,state:r,endedAt:a,...i?{result:i}:{}}})));_=e}catch(e){this.report(n.TASK_EVENT.delegationSettleFailed,e,{[u]:o,[d]:t})}let v=_?.delegation?.agent??g?.agent??`subagent`,y=_?.subject??`#${o}`;this.options.report?.event(n.TASK_EVENT.delegationCompleted,{[u]:o,[d]:t,[f]:v,"delegation.outcome":r,[p]:(g?.contextFileCount??0)>0||(g?.contextNotesLength??0)>0,[m]:g?.contextFileCount??0,[h]:g?.contextNotesLength??0,...i?.toolCount===void 0?{}:{"delegation.tool_count":i.toolCount},...i?.durationMs===void 0?{}:{"delegation.duration_ms":i.durationMs}});let b=r===s&&_!==void 0&&e.isTaskListComplete(this.options.store.snapshot.tasks);this.notifyModel(r,o,y,v,i,b)}finally{this.pendingTasks.delete(t),this.progress.delete(t),this.settlingRequests.delete(t),this.options.onChange?.()}}notifyModel(e,t,n,r,i,a){let c=this.options.notify;if(!c)return;let u=[e===s?`Subagent ${r} completed task #${t}: ${n}`:e===l?`Subagent ${r} was cancelled on task #${t}: ${n} (returned to pending)`:`Subagent ${r} failed task #${t}: ${n}`];a&&u.push(``,`All tasks are completed. Review the full task list once more, then close it with task {"action":"clear"}.`),i?.error&&u.push(`Error: ${i.error}`),i?.output&&u.push(``,i.output),i?.outputPath&&u.push(``,`Full output: ${i.outputPath}`);try{c({customType:o,content:u.join(`
|
|
5
|
+
`),display:!0},{triggerTurn:!0,deliverAs:`steer`})}catch(e){this.options.onNotifyError(e,t)}}patchDelegation(e,t,n){let i=e.tasks.findIndex(e=>e.delegation?.requestId===t);if(i===-1)return{value:void 0};let a=e.tasks[i];if(!r.isDelegationActive(a))return{value:a};let o=n(a,a.delegation);if(o===a)return{value:a};let s=[...e.tasks];return s[i]=o,{document:{...e,tasks:s},value:o}}dispose(){this.unbind(),this.reset()}reset(){let e=this.pendingTasks.size>0||this.progress.size>0;for(let e of this.timers.values())clearTimeout(e);this.timers.clear(),this.pendingTasks.clear(),this.settlingRequests.clear(),this.progress.clear(),e&&this.options.onChange?.()}};exports.BACKGROUND_WORK_PROVIDER=`doom-task`,exports.DelegationManager=C,exports.ERR_CANCEL_UNACKNOWLEDGED=v,exports.ERR_CHILD_SESSION=_,exports.ERR_NO_RUNTIME=g,exports.MAX_BRIEF_FILES=t.MAX_BRIEF_FILES,exports.NOTIFY_CUSTOM_TYPE=o;
|
|
6
|
+
//# sourceMappingURL=index.cjs.map
|