@gajae-code/coding-agent 0.11.0 → 0.11.2
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/CHANGELOG.md +63 -1
- package/dist/types/async/job-manager.d.ts +46 -7
- package/dist/types/cli/config-cli.d.ts +11 -1
- package/dist/types/cli/notify-cli.d.ts +1 -0
- package/dist/types/cli/session-picker.d.ts +2 -1
- package/dist/types/cli/setup-cli.d.ts +1 -1
- package/dist/types/commands/mcp-serve.d.ts +33 -0
- package/dist/types/commands/mcp.d.ts +1 -1
- package/dist/types/commands/notify.d.ts +0 -2
- package/dist/types/commands/sdk.d.ts +1 -1
- package/dist/types/config/atomic-yaml-patch.d.ts +18 -0
- package/dist/types/config/file-lock.d.ts +14 -4
- package/dist/types/config/keybindings.d.ts +42 -1
- package/dist/types/config/model-auth.d.ts +3 -0
- package/dist/types/config/model-bindings-applier.d.ts +13 -0
- package/dist/types/config/model-discovery-manager.d.ts +49 -0
- package/dist/types/config/model-equivalence.d.ts +20 -0
- package/dist/types/config/model-registry.d.ts +16 -15
- package/dist/types/config/model-resolver.d.ts +28 -18
- package/dist/types/config/models-config-schema.d.ts +11 -0
- package/dist/types/config/settings-schema.d.ts +56 -1
- package/dist/types/config/settings.d.ts +14 -11
- package/dist/types/coordinator-mcp/policy.d.ts +5 -0
- package/dist/types/coordinator-mcp/question-gate-codec.d.ts +129 -0
- package/dist/types/coordinator-mcp/question-state.d.ts +356 -0
- package/dist/types/coordinator-mcp/server.d.ts +4 -0
- package/dist/types/discovery/helpers.d.ts +0 -6
- package/dist/types/edit/index.d.ts +3 -0
- package/dist/types/eval/py/env.d.ts +9 -0
- package/dist/types/extensibility/extensions/loader.d.ts +2 -1
- package/dist/types/extensibility/extensions/runner.d.ts +2 -2
- package/dist/types/extensibility/extensions/types.d.ts +34 -3
- package/dist/types/extensibility/hooks/runner.d.ts +1 -1
- package/dist/types/extensibility/shared-events.d.ts +2 -0
- package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +10 -1
- package/dist/types/gjc-runtime/deep-interview-state.d.ts +44 -0
- package/dist/types/gjc-runtime/goal-mode-request.d.ts +11 -1
- package/dist/types/gjc-runtime/launch-worktree.d.ts +4 -2
- package/dist/types/gjc-runtime/linux-proc.d.ts +29 -0
- package/dist/types/gjc-runtime/session-resolution.d.ts +2 -2
- package/dist/types/gjc-runtime/state-migrations.d.ts +1 -1
- package/dist/types/gjc-runtime/state-writer.d.ts +2 -1
- package/dist/types/gjc-runtime/team-launch.d.ts +59 -0
- package/dist/types/gjc-runtime/team-notify.d.ts +45 -0
- package/dist/types/gjc-runtime/team-runtime.d.ts +29 -121
- package/dist/types/gjc-runtime/team-store.d.ts +160 -0
- package/dist/types/gjc-runtime/team-workers.d.ts +78 -0
- package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +8 -0
- package/dist/types/gjc-runtime/ultragoal-change-set.d.ts +13 -0
- package/dist/types/gjc-runtime/ultragoal-evidence.d.ts +38 -0
- package/dist/types/gjc-runtime/ultragoal-guard.d.ts +7 -0
- package/dist/types/gjc-runtime/ultragoal-pipeline.d.ts +23 -0
- package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +11 -0
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +55 -33
- package/dist/types/gjc-runtime/workflow-cli-common.d.ts +8 -0
- package/dist/types/gjc-runtime/workflow-manifest.d.ts +3 -0
- package/dist/types/goals/continuation-timeout-guard.d.ts +22 -0
- package/dist/types/goals/runtime.d.ts +1 -0
- package/dist/types/goals/state.d.ts +8 -0
- package/dist/types/harness-control-plane/lifecycle-reconciliation.d.ts +17 -0
- package/dist/types/harness-control-plane/phase-rollup.d.ts +4 -7
- package/dist/types/harness-control-plane/receipt-ingest.d.ts +5 -0
- package/dist/types/harness-control-plane/receipt-spool.d.ts +4 -0
- package/dist/types/hindsight/state.d.ts +11 -4
- package/dist/types/lsp/lspmux.d.ts +5 -3
- package/dist/types/lsp/path-trust.d.ts +1 -0
- package/dist/types/main.d.ts +3 -2
- package/dist/types/memories/storage.d.ts +1 -0
- package/dist/types/modes/action-registry.d.ts +29 -0
- package/dist/types/modes/components/chrome.d.ts +14 -0
- package/dist/types/modes/components/command-palette.d.ts +27 -0
- package/dist/types/modes/components/custom-provider-wizard.d.ts +1 -0
- package/dist/types/modes/components/index.d.ts +2 -1
- package/dist/types/modes/components/pet-selector.d.ts +1 -1
- package/dist/types/modes/components/plan-preview-overlay.d.ts +43 -0
- package/dist/types/modes/components/queue-mode-selector.d.ts +1 -1
- package/dist/types/modes/components/queue-pane.d.ts +12 -0
- package/dist/types/modes/components/read-tool-group.d.ts +6 -0
- package/dist/types/modes/components/session-observer-overlay.d.ts +3 -4
- package/dist/types/modes/components/sessions-dashboard.d.ts +32 -0
- package/dist/types/modes/components/settings-selector.d.ts +1 -1
- package/dist/types/modes/components/show-images-selector.d.ts +1 -1
- package/dist/types/modes/components/status-line/types.d.ts +1 -1
- package/dist/types/modes/components/status-line.d.ts +1 -94
- package/dist/types/modes/components/tasks-pane.d.ts +15 -0
- package/dist/types/modes/components/theme-selector.d.ts +1 -1
- package/dist/types/modes/components/tool-execution.d.ts +15 -0
- package/dist/types/modes/components/tool-status-header.d.ts +111 -0
- package/dist/types/modes/components/transcript-viewer-overlay.d.ts +42 -0
- package/dist/types/modes/controllers/command-controller.d.ts +2 -2
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -0
- package/dist/types/modes/controllers/goal-mode-controller.d.ts +62 -0
- package/dist/types/modes/controllers/input-controller.d.ts +8 -1
- package/dist/types/modes/controllers/mode-gate.d.ts +8 -0
- package/dist/types/modes/controllers/plan-mode-controller.d.ts +65 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +15 -3
- package/dist/types/modes/controllers/stt-controller.d.ts +26 -0
- package/dist/types/modes/interactive-mode.d.ts +21 -19
- package/dist/types/modes/jobs-observer.d.ts +2 -0
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -11
- package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +21 -2
- package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +31 -0
- package/dist/types/modes/tasks-aggregator.d.ts +39 -0
- package/dist/types/modes/transcript-item-registry.d.ts +60 -0
- package/dist/types/modes/types.d.ts +22 -15
- package/dist/types/modes/utils/ui-helpers.d.ts +2 -2
- package/dist/types/runtime-mcp/manager.d.ts +1 -1
- package/dist/types/sdk/broker/broker.d.ts +78 -12
- package/dist/types/sdk/broker/ensure.d.ts +9 -0
- package/dist/types/sdk/broker/lifecycle-codec.d.ts +4 -0
- package/dist/types/sdk/broker/lifecycle-ledger.d.ts +15 -1
- package/dist/types/sdk/broker/lifecycle.d.ts +6 -2
- package/dist/types/sdk/broker/process-incarnation.d.ts +2 -0
- package/dist/types/sdk/broker/session-index.d.ts +0 -1
- package/dist/types/sdk/broker/state-version.d.ts +2 -0
- package/dist/types/sdk/bus/chat-effect-journal.d.ts +1 -0
- package/dist/types/sdk/bus/config-commands.d.ts +1 -1
- package/dist/types/sdk/bus/config.d.ts +11 -0
- package/dist/types/sdk/bus/daemon-paths.d.ts +1 -0
- package/dist/types/sdk/bus/discord-daemon.d.ts +5 -0
- package/dist/types/sdk/bus/html-format.d.ts +3 -2
- package/dist/types/sdk/bus/index.d.ts +27 -0
- package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +4 -0
- package/dist/types/sdk/bus/notification-service.d.ts +20 -0
- package/dist/types/sdk/bus/rate-limit-pool.d.ts +13 -2
- package/dist/types/sdk/bus/recent-activity.d.ts +21 -12
- package/dist/types/sdk/bus/rich-document.d.ts +7 -0
- package/dist/types/sdk/bus/rich-render.d.ts +18 -41
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +9 -4
- package/dist/types/sdk/bus/telegram-daemon.d.ts +69 -3
- package/dist/types/sdk/bus/threaded-inbound.d.ts +1 -1
- package/dist/types/sdk/bus/threaded-render.d.ts +13 -0
- package/dist/types/sdk/bus/topic-registry.d.ts +24 -2
- package/dist/types/sdk/host/control/operations.d.ts +1 -1
- package/dist/types/sdk/host/host.d.ts +2 -0
- package/dist/types/sdk/index.d.ts +1 -0
- package/dist/types/sdk/session-directory.d.ts +56 -0
- package/dist/types/session/agent-session.d.ts +82 -47
- package/dist/types/session/agent-storage.d.ts +7 -0
- package/dist/types/session/fallback-chain-controller.d.ts +10 -2
- package/dist/types/session/internal/managed-session-scope.d.ts +102 -0
- package/dist/types/session/internal/managed-session-storage.d.ts +38 -0
- package/dist/types/session/messages.d.ts +16 -0
- package/dist/types/session/session-manager-internal.d.ts +14 -0
- package/dist/types/session/session-manager.d.ts +82 -12
- package/dist/types/session/session-storage.d.ts +43 -3
- package/dist/types/session/volatile-context-pruning.d.ts +15 -0
- package/dist/types/skill-state/{deep-interview-mutation-guard.d.ts → workflow-mutation-guard.d.ts} +24 -8
- package/dist/types/skill-state/workflow-state-contract.d.ts +1 -3
- package/dist/types/slash-commands/builtin-registry.d.ts +4 -1
- package/dist/types/system-prompt.d.ts +2 -11
- package/dist/types/task/executor.d.ts +3 -1
- package/dist/types/thinking.d.ts +7 -0
- package/dist/types/tool-discovery/tool-index.d.ts +1 -50
- package/dist/types/tools/ask.d.ts +64 -2
- package/dist/types/tools/bash.d.ts +3 -0
- package/dist/types/tools/browser/dead-tab-recovery.d.ts +24 -0
- package/dist/types/tools/browser/tab-supervisor.d.ts +21 -0
- package/dist/types/tools/cron.d.ts +2 -0
- package/dist/types/tools/fetch.d.ts +1 -0
- package/dist/types/tools/index.d.ts +30 -15
- package/dist/types/tools/output-meta.d.ts +1 -0
- package/dist/types/tools/read.d.ts +3 -0
- package/dist/types/tools/search-tool-bm25.d.ts +3 -4
- package/dist/types/tools/subagent-render.d.ts +1 -0
- package/dist/types/tools/subagent.d.ts +6 -1
- package/dist/types/utils/event-bus.d.ts +1 -1
- package/dist/types/web/search/index.d.ts +3 -1
- package/package.json +21 -9
- package/scripts/build-sdk-package-smoke.ts +39 -1
- package/scripts/generate-hotkeys-docs.ts +74 -0
- package/scripts/generate-sdk-operation-inventory.ts +64 -20
- package/scripts/verify-gjc-sdk-canonicalization.ts +182 -2
- package/src/async/job-manager.ts +455 -69
- package/src/cli/config-cli.ts +75 -2
- package/src/cli/notify-cli.ts +92 -26
- package/src/cli/session-picker.ts +20 -3
- package/src/cli/setup-cli.ts +1 -1
- package/src/cli.ts +1 -1
- package/src/commands/config.ts +1 -1
- package/src/commands/harness.ts +34 -106
- package/src/commands/launch.ts +6 -4
- package/src/commands/mcp-serve.ts +85 -8
- package/src/commands/mcp.ts +2 -2
- package/src/commands/notify.ts +8 -4
- package/src/commands/sdk.ts +61 -40
- package/src/commands/ultragoal.ts +4 -1
- package/src/config/atomic-yaml-patch.ts +80 -13
- package/src/config/file-lock.ts +105 -43
- package/src/config/keybindings.ts +64 -20
- package/src/config/model-auth.ts +9 -0
- package/src/config/model-bindings-applier.ts +139 -0
- package/src/config/model-discovery-manager.ts +224 -0
- package/src/config/model-equivalence.ts +66 -0
- package/src/config/model-registry.ts +169 -302
- package/src/config/model-resolver.ts +361 -369
- package/src/config/models-config-schema.ts +5 -4
- package/src/config/settings-schema.ts +159 -2
- package/src/config/settings.ts +458 -482
- package/src/coordinator-mcp/policy.ts +76 -11
- package/src/coordinator-mcp/question-gate-codec.ts +274 -0
- package/src/coordinator-mcp/question-state.ts +778 -0
- package/src/coordinator-mcp/server.ts +1702 -238
- package/src/debug/index.ts +1 -1
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +13 -1
- package/src/defaults/gjc/skills/team/SKILL.md +16 -0
- package/src/discovery/helpers.ts +1 -50
- package/src/edit/index.ts +64 -0
- package/src/eval/py/env.ts +26 -0
- package/src/eval/py/kernel.ts +5 -3
- package/src/extensibility/extensions/loader.ts +9 -1
- package/src/extensibility/extensions/runner.ts +12 -3
- package/src/extensibility/extensions/types.ts +39 -1
- package/src/extensibility/gjc-plugins/installer.ts +16 -16
- package/src/extensibility/hooks/runner.ts +2 -2
- package/src/extensibility/runtime-skill-discovery.ts +33 -13
- package/src/extensibility/shared-events.ts +2 -0
- package/src/gjc-runtime/deep-interview-recorder.ts +63 -3
- package/src/gjc-runtime/deep-interview-runtime.ts +76 -27
- package/src/gjc-runtime/deep-interview-state.ts +317 -5
- package/src/gjc-runtime/goal-mode-request.ts +55 -8
- package/src/gjc-runtime/launch-tmux.ts +2 -5
- package/src/gjc-runtime/launch-worktree.ts +5 -5
- package/src/gjc-runtime/linux-proc.ts +71 -0
- package/src/gjc-runtime/ralplan-runtime.ts +74 -90
- package/src/gjc-runtime/session-resolution.ts +18 -3
- package/src/gjc-runtime/session-state-sidecar.ts +6 -107
- package/src/gjc-runtime/state-migrations.ts +1 -1
- package/src/gjc-runtime/state-runtime.ts +320 -249
- package/src/gjc-runtime/state-writer.ts +36 -40
- package/src/gjc-runtime/team-launch.ts +319 -0
- package/src/gjc-runtime/team-notify.ts +326 -0
- package/src/gjc-runtime/team-runtime.ts +1099 -1482
- package/src/gjc-runtime/team-store.ts +828 -0
- package/src/gjc-runtime/team-workers.ts +962 -0
- package/src/gjc-runtime/tmux-owner-isolation-cli.ts +2 -11
- package/src/gjc-runtime/tmux-owner-isolation.ts +14 -9
- package/src/gjc-runtime/tmux-sessions.ts +4 -21
- package/src/gjc-runtime/ultragoal-change-set.ts +172 -0
- package/src/gjc-runtime/ultragoal-evidence.ts +874 -0
- package/src/gjc-runtime/ultragoal-guard.ts +83 -12
- package/src/gjc-runtime/ultragoal-pipeline.ts +306 -0
- package/src/gjc-runtime/ultragoal-receipt-freshness.ts +102 -1
- package/src/gjc-runtime/ultragoal-runtime.ts +156 -1319
- package/src/gjc-runtime/workflow-cli-common.ts +30 -0
- package/src/gjc-runtime/workflow-manifest.generated.json +58 -0
- package/src/gjc-runtime/workflow-manifest.ts +18 -0
- package/src/goals/continuation-timeout-guard.ts +79 -0
- package/src/goals/runtime.ts +7 -5
- package/src/goals/state.ts +18 -0
- package/src/harness-control-plane/lifecycle-reconciliation.ts +64 -0
- package/src/harness-control-plane/phase-rollup.ts +4 -7
- package/src/harness-control-plane/receipt-ingest.ts +5 -0
- package/src/harness-control-plane/receipt-spool.ts +51 -7
- package/src/harness-control-plane/session-lease.ts +12 -130
- package/src/hindsight/backend.ts +26 -27
- package/src/hindsight/state.ts +101 -32
- package/src/hooks/skill-state.ts +17 -11
- package/src/internal-urls/docs-index.generated.ts +21 -18
- package/src/lsp/client.ts +1 -1
- package/src/lsp/config.ts +145 -26
- package/src/lsp/index.ts +1 -1
- package/src/lsp/lspmux.ts +39 -10
- package/src/lsp/path-trust.ts +81 -0
- package/src/main.ts +28 -8
- package/src/memories/index.ts +1 -0
- package/src/memories/storage.ts +6 -2
- package/src/modes/action-registry.ts +165 -0
- package/src/modes/components/chrome.ts +40 -0
- package/src/modes/components/command-palette.ts +168 -0
- package/src/modes/components/custom-editor.ts +1 -1
- package/src/modes/components/custom-provider-wizard.ts +51 -14
- package/src/modes/components/index.ts +2 -1
- package/src/modes/components/pet-selector.ts +11 -17
- package/src/modes/components/plan-preview-overlay.ts +295 -0
- package/src/modes/components/queue-mode-selector.ts +10 -27
- package/src/modes/components/queue-pane.ts +79 -0
- package/src/modes/components/read-tool-group.ts +13 -0
- package/src/modes/components/session-observer-overlay.ts +207 -772
- package/src/modes/components/sessions-dashboard.ts +181 -0
- package/src/modes/components/settings-selector.ts +1 -1
- package/src/modes/components/show-images-selector.ts +10 -24
- package/src/modes/components/status-line/types.ts +1 -1
- package/src/modes/components/status-line.ts +1 -969
- package/src/modes/components/tasks-pane.ts +73 -0
- package/src/modes/components/theme-selector.ts +11 -31
- package/src/modes/components/tool-execution.ts +22 -0
- package/src/modes/components/tool-status-header.ts +1056 -0
- package/src/modes/components/transcript-viewer-overlay.ts +384 -0
- package/src/modes/controllers/btw-controller.ts +1 -0
- package/src/modes/controllers/command-controller.ts +9 -15
- package/src/modes/controllers/event-controller.ts +3 -2
- package/src/modes/controllers/extension-ui-controller.ts +72 -25
- package/src/modes/controllers/goal-mode-controller.ts +474 -0
- package/src/modes/controllers/input-controller.ts +764 -229
- package/src/modes/controllers/mode-gate.ts +24 -0
- package/src/modes/controllers/plan-mode-controller.ts +517 -0
- package/src/modes/controllers/selector-controller.ts +225 -10
- package/src/modes/controllers/stt-controller.ts +125 -0
- package/src/modes/interactive-mode.ts +302 -1151
- package/src/modes/jobs-observer.ts +3 -0
- package/src/modes/runtime-init.ts +8 -0
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +31 -106
- package/src/modes/shared/agent-wire/workflow-gate-broker.ts +78 -19
- package/src/modes/shared/agent-wire/workflow-gate-types.ts +177 -0
- package/src/modes/tasks-aggregator.ts +199 -0
- package/src/modes/transcript-item-registry.ts +229 -0
- package/src/modes/types.ts +47 -20
- package/src/modes/utils/ui-helpers.ts +17 -9
- package/src/prompts/agent-fragments/ralplan-persistence.md +6 -0
- package/src/prompts/agent-fragments/restricted-bash.md +1 -0
- package/src/prompts/agents/architect.md +2 -8
- package/src/prompts/agents/critic.md +2 -8
- package/src/prompts/agents/executor.md +3 -0
- package/src/prompts/agents/planner.md +4 -12
- package/src/prompts/system/custom-system-prompt.md +1 -23
- package/src/prompts/system/plan-mode-approved.md +8 -0
- package/src/prompts/system/system-prompt.md +17 -96
- package/src/prompts/tools/bash.md +4 -4
- package/src/prompts/tools/browser.md +15 -52
- package/src/prompts/tools/find.md +2 -2
- package/src/prompts/tools/hashline.md +13 -55
- package/src/prompts/tools/read.md +3 -6
- package/src/prompts/tools/search-tool-bm25.md +0 -2
- package/src/prompts/tools/search.md +2 -4
- package/src/prompts/tools/skill-discovery.md +1 -2
- package/src/prompts/tools/task.md +1 -1
- package/src/runtime-mcp/manager.ts +1 -1
- package/src/sdk/broker/broker.ts +206 -78
- package/src/sdk/broker/discovery.ts +21 -2
- package/src/sdk/broker/ensure.ts +85 -25
- package/src/sdk/broker/lifecycle-codec.ts +11 -0
- package/src/sdk/broker/lifecycle-ledger.ts +371 -74
- package/src/sdk/broker/lifecycle.ts +1399 -142
- package/src/sdk/broker/process-incarnation.ts +5 -13
- package/src/sdk/broker/session-index.ts +145 -56
- package/src/sdk/broker/state-version.ts +21 -0
- package/src/sdk/broker/transport.ts +1 -1
- package/src/sdk/bus/chat-daemon-cli.ts +2 -0
- package/src/sdk/bus/chat-daemon-control.ts +8 -28
- package/src/sdk/bus/chat-effect-journal.ts +14 -4
- package/src/sdk/bus/config-commands.ts +5 -4
- package/src/sdk/bus/config.ts +98 -0
- package/src/sdk/bus/conversation-store.ts +5 -29
- package/src/sdk/bus/daemon-paths.ts +2 -0
- package/src/sdk/bus/discord-daemon.ts +25 -8
- package/src/sdk/bus/html-format.ts +20 -3
- package/src/sdk/bus/index.ts +834 -113
- package/src/sdk/bus/lifecycle-control-runtime.ts +91 -33
- package/src/sdk/bus/native-runtime-compatibility.ts +1 -1
- package/src/sdk/bus/natives-augment.d.ts +26 -1
- package/src/sdk/bus/notification-service.ts +168 -20
- package/src/sdk/bus/rate-limit-pool.ts +58 -14
- package/src/sdk/bus/recent-activity.ts +188 -74
- package/src/sdk/bus/rich-document.ts +258 -0
- package/src/sdk/bus/rich-render.ts +62 -70
- package/src/sdk/bus/telegram-daemon-cli.ts +15 -59
- package/src/sdk/bus/telegram-daemon-contract.ts +9 -4
- package/src/sdk/bus/telegram-daemon.ts +1491 -247
- package/src/sdk/bus/threaded-inbound.ts +8 -3
- package/src/sdk/bus/threaded-render.ts +57 -1
- package/src/sdk/bus/topic-registry.ts +120 -13
- package/src/sdk/host/control/dispatch.ts +14 -2
- package/src/sdk/host/control/operations.ts +6 -1
- package/src/sdk/host/host.ts +31 -1
- package/src/sdk/host/query/handlers.ts +20 -22
- package/src/sdk/host/query/revision-store.ts +80 -57
- package/src/sdk/index.ts +1 -0
- package/src/sdk/protocol/operation-inventory.generated.json +943 -1907
- package/src/sdk/session-directory.ts +141 -0
- package/src/sdk/session.ts +458 -479
- package/src/session/agent-session.ts +1901 -637
- package/src/session/agent-storage.ts +18 -0
- package/src/session/cache-economics.ts +25 -8
- package/src/session/fallback-chain-controller.ts +53 -3
- package/src/session/internal/managed-session-scope.ts +2226 -0
- package/src/session/internal/managed-session-storage.ts +453 -0
- package/src/session/messages.ts +91 -2
- package/src/session/session-manager-internal.ts +33 -0
- package/src/session/session-manager.ts +1112 -333
- package/src/session/session-storage.ts +444 -39
- package/src/session/volatile-context-pruning.ts +78 -0
- package/src/setup/credential-auto-import.ts +2 -1
- package/src/setup/hermes/templates/operator-instructions.v1.md +1 -1
- package/src/setup/provider-onboarding.ts +36 -61
- package/src/setup/provider-presets.json +5 -0
- package/src/skill-state/active-state.ts +3 -13
- package/src/skill-state/{deep-interview-mutation-guard.ts → workflow-mutation-guard.ts} +47 -29
- package/src/skill-state/workflow-state-contract.ts +6 -41
- package/src/slash-commands/builtin-registry.ts +46 -11
- package/src/system-prompt.ts +37 -44
- package/src/task/agents.ts +19 -1
- package/src/task/executor.ts +90 -6
- package/src/task/index.ts +62 -37
- package/src/thinking.ts +21 -6
- package/src/tool-discovery/tool-index.ts +2 -134
- package/src/tools/ask.ts +157 -21
- package/src/tools/ast-edit.ts +1 -1
- package/src/tools/bash.ts +38 -0
- package/src/tools/browser/dead-tab-recovery.ts +78 -0
- package/src/tools/browser/tab-supervisor.ts +282 -36
- package/src/tools/computer.ts +10 -3
- package/src/tools/cron.ts +30 -16
- package/src/tools/eval.ts +1 -2
- package/src/tools/fetch.ts +11 -4
- package/src/tools/index.ts +76 -24
- package/src/tools/output-meta.ts +13 -5
- package/src/tools/read.ts +37 -1
- package/src/tools/resource-gc.ts +2 -2
- package/src/tools/search-tool-bm25.ts +11 -74
- package/src/tools/subagent-render.ts +19 -8
- package/src/tools/subagent.ts +84 -32
- package/src/utils/event-bus.ts +9 -4
- package/src/web/search/index.ts +3 -3
- package/dist/types/discovery/plugin-dir-roots.d.ts +0 -15
- package/dist/types/runtime-mcp/discoverable-tool-metadata.d.ts +0 -7
- package/src/discovery/plugin-dir-roots.ts +0 -28
- package/src/runtime-mcp/discoverable-tool-metadata.ts +0 -25
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Goal } from "../goals/state";
|
|
1
|
+
import { type Goal, type GoalProvenance } from "../goals/state";
|
|
2
2
|
export declare const GJC_SESSION_FILE_ENV = "GJC_SESSION_FILE";
|
|
3
3
|
export declare const GJC_SESSION_ID_ENV = "GJC_SESSION_ID";
|
|
4
4
|
export declare const GJC_SESSION_CWD_ENV = "GJC_SESSION_CWD";
|
|
@@ -11,6 +11,9 @@ export interface PendingGoalModeRequest {
|
|
|
11
11
|
objective: string;
|
|
12
12
|
createdAt: string;
|
|
13
13
|
goalsPath?: string;
|
|
14
|
+
provenance: Extract<GoalProvenance, {
|
|
15
|
+
source: "ultragoal";
|
|
16
|
+
}>;
|
|
14
17
|
/**
|
|
15
18
|
* Session id that produced this request (from GJC_SESSION_ID). When present,
|
|
16
19
|
* only the originating session may consume it, so concurrent sessions sharing
|
|
@@ -33,16 +36,23 @@ export declare function isUltragoalCreateGoalsInvocation(args: readonly string[]
|
|
|
33
36
|
export declare function readUltragoalGjcObjective(cwd: string, sessionId?: string | null): Promise<{
|
|
34
37
|
objective: string;
|
|
35
38
|
goalsPath: string;
|
|
39
|
+
provenance: Extract<GoalProvenance, {
|
|
40
|
+
source: "ultragoal";
|
|
41
|
+
}>;
|
|
36
42
|
}>;
|
|
37
43
|
export declare function writePendingGoalModeRequest(input: {
|
|
38
44
|
cwd: string;
|
|
39
45
|
objective: string;
|
|
40
46
|
goalsPath?: string;
|
|
41
47
|
sessionId?: string | null;
|
|
48
|
+
provenance?: Extract<GoalProvenance, {
|
|
49
|
+
source: "ultragoal";
|
|
50
|
+
}>;
|
|
42
51
|
}): Promise<PendingGoalModeRequest>;
|
|
43
52
|
export declare function writeCurrentSessionGoalModeState(input: {
|
|
44
53
|
sessionFile?: string | null;
|
|
45
54
|
objective: string;
|
|
55
|
+
provenance?: Goal["provenance"];
|
|
46
56
|
}): Promise<CurrentSessionGoalModeWriteResult>;
|
|
47
57
|
export declare function consumePendingGoalModeRequest(cwd: string, currentSessionId?: string | null): Promise<PendingGoalModeRequest | null>;
|
|
48
58
|
export declare function buildGjcRuntimeSessionEnv(input: {
|
|
@@ -37,10 +37,12 @@ export declare function ensureLaunchWorktree(plan: GjcLaunchWorktreePlan | {
|
|
|
37
37
|
enabled: false;
|
|
38
38
|
};
|
|
39
39
|
export declare function ensureReusableNodeModules(sourceRoot: string, worktreePath: string): "symlink" | "present" | "missing";
|
|
40
|
-
|
|
40
|
+
/** Result of {@link prepareLaunchWorktree}: the effective working directory, remaining args, and resolved worktree plan. */
|
|
41
|
+
export interface PreparedLaunchWorktree {
|
|
41
42
|
cwd: string;
|
|
42
43
|
args: string[];
|
|
43
44
|
worktree: GjcLaunchWorktreeResult | {
|
|
44
45
|
enabled: false;
|
|
45
46
|
};
|
|
46
|
-
}
|
|
47
|
+
}
|
|
48
|
+
export declare function prepareLaunchWorktree(cwd: string, args: string[]): PreparedLaunchWorktree;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for reading Linux `/proc/<pid>/stat` process start time.
|
|
3
|
+
*
|
|
4
|
+
* The `comm` field (field 2, wrapped in parentheses) may itself contain spaces
|
|
5
|
+
* and parentheses, so the only robust anchor is the *last* `)` in the stat
|
|
6
|
+
* string. Field 22 (the process start time in clock ticks since boot) is the
|
|
7
|
+
* 20th whitespace-separated token after that closing paren (index 19).
|
|
8
|
+
*
|
|
9
|
+
* Every caller previously parsed this format independently, with subtly
|
|
10
|
+
* different failure handling. This module fails closed: any malformed input
|
|
11
|
+
* (missing `)`, non-numeric field 22, unreadable `/proc` file, non-Linux
|
|
12
|
+
* platform) yields `null` rather than an inconsistent sentinel.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Parse field 22 (process start time, in clock ticks since boot) from one
|
|
16
|
+
* `/proc/<pid>/stat` record. Returns the raw numeric token, or `null` when the
|
|
17
|
+
* record shape is malformed or field 22 is absent/non-numeric.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseLinuxProcStartTime(stat: string | null | undefined): string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Read `/proc/<pid>/stat` synchronously and return the parsed start time.
|
|
22
|
+
* Returns `null` on non-Linux platforms, unreadable files, or malformed input.
|
|
23
|
+
*/
|
|
24
|
+
export declare function readLinuxProcStartTimeSync(pid: number): string | null;
|
|
25
|
+
/**
|
|
26
|
+
* Read `/proc/<pid>/stat` asynchronously and return the parsed start time.
|
|
27
|
+
* Returns `null` on non-Linux platforms, unreadable files, or malformed input.
|
|
28
|
+
*/
|
|
29
|
+
export declare function readLinuxProcStartTime(pid: number): Promise<string | null>;
|
|
@@ -8,8 +8,8 @@ export interface SessionIdSources {
|
|
|
8
8
|
envSessionId?: string | undefined;
|
|
9
9
|
}
|
|
10
10
|
export declare class SessionResolutionError extends Error {
|
|
11
|
-
readonly code: "blank_flag" | "no_session" | "ambiguous" | "missing_for_write";
|
|
12
|
-
constructor(message: string, code: "blank_flag" | "no_session" | "ambiguous" | "missing_for_write");
|
|
11
|
+
readonly code: "blank_flag" | "unsafe_session" | "no_session" | "ambiguous" | "missing_for_write";
|
|
12
|
+
constructor(message: string, code: "blank_flag" | "unsafe_session" | "no_session" | "ambiguous" | "missing_for_write");
|
|
13
13
|
}
|
|
14
14
|
interface ResolvedFromSources {
|
|
15
15
|
gjcSessionId: string;
|
|
@@ -21,7 +21,7 @@ export interface StateWriterReceiptContext {
|
|
|
21
21
|
skill: CanonicalGjcWorkflowSkill;
|
|
22
22
|
owner: WorkflowStateMutationOwner;
|
|
23
23
|
command: string;
|
|
24
|
-
sessionId
|
|
24
|
+
sessionId: string;
|
|
25
25
|
mutationId?: string;
|
|
26
26
|
nowIso?: string;
|
|
27
27
|
verb?: string;
|
|
@@ -62,6 +62,7 @@ export interface GuardedStateWriterOptions extends StateWriterOptions {
|
|
|
62
62
|
policy: StateWritePolicy;
|
|
63
63
|
expectedRevision?: number;
|
|
64
64
|
sourceRevision?: number;
|
|
65
|
+
lockHeld?: boolean;
|
|
65
66
|
}
|
|
66
67
|
export type GuardedWriteResult = {
|
|
67
68
|
path: string;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { GjcTeamConfig, GjcTeamSnapshot, GjcTeamStartOptions, GjcTeamTask, GjcTeamWorker, GjcTeamWorkerCli, GjcTeamWorkerLifecycle, GjcTeamWorktreeMode } from "./team-runtime";
|
|
2
|
+
/** Launch-specific option wiring kept separate from runtime dispatch. */
|
|
3
|
+
export declare function withTeamLaunchTransport(options: GjcTeamStartOptions, mailboxDeliveryTransport: GjcTeamStartOptions["mailboxDeliveryTransport"]): GjcTeamStartOptions;
|
|
4
|
+
/** @internal Exported for unit tests. */
|
|
5
|
+
export declare function buildWorkerCommand(config: GjcTeamConfig, worker: GjcTeamWorker, platform?: NodeJS.Platform): string;
|
|
6
|
+
interface GjcTmuxBinary {
|
|
7
|
+
command: string;
|
|
8
|
+
isPsmux: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface GjcTmuxLeaderContext {
|
|
11
|
+
sessionName: string;
|
|
12
|
+
windowIndex: string;
|
|
13
|
+
leaderPaneId: string;
|
|
14
|
+
target: string;
|
|
15
|
+
}
|
|
16
|
+
export interface GjcTeamLaunchRuntime {
|
|
17
|
+
maxWorkers: number;
|
|
18
|
+
resolveWorkerCliPlan(workerCount: number, env: NodeJS.ProcessEnv): GjcTeamWorkerCli[];
|
|
19
|
+
resolveStateRoot(cwd: string, env: NodeJS.ProcessEnv): string;
|
|
20
|
+
sanitizeName(value: string): string;
|
|
21
|
+
makeTeamName(task: string, env: NodeJS.ProcessEnv): string;
|
|
22
|
+
teamDir(stateRoot: string, teamName: string): string;
|
|
23
|
+
resolveDefaultWorktreeMode(mode?: GjcTeamWorktreeMode): GjcTeamWorktreeMode;
|
|
24
|
+
resolveTmuxBinary(input: {
|
|
25
|
+
env: NodeJS.ProcessEnv;
|
|
26
|
+
platform: NodeJS.Platform;
|
|
27
|
+
}): GjcTmuxBinary;
|
|
28
|
+
readTmuxLeaderContext(tmuxCommand: string, env: NodeJS.ProcessEnv): GjcTmuxLeaderContext;
|
|
29
|
+
buildWorkers(workerCount: number, agentType: string, stateRoot: string): GjcTeamWorker[];
|
|
30
|
+
buildInitialTasks(task: string, workers: GjcTeamWorker[]): GjcTeamTask[];
|
|
31
|
+
ensureWorkerWorktree(cwd: string, dir: string, teamName: string, worker: GjcTeamWorker, mode: GjcTeamWorktreeMode, platform: NodeJS.Platform, isPsmux: boolean): Promise<GjcTeamWorker>;
|
|
32
|
+
rollbackCreatedWorktrees(workers: GjcTeamWorker[]): Promise<void>;
|
|
33
|
+
resolveWorkerCommand(cwd: string, env: NodeJS.ProcessEnv): string;
|
|
34
|
+
mailboxDirPath(dir: string, worker: string): string;
|
|
35
|
+
mailboxPath(dir: string, worker: string): string;
|
|
36
|
+
workerDir(dir: string, worker: string): string;
|
|
37
|
+
workerLifecyclePath(dir: string, worker: string): string;
|
|
38
|
+
writeJson(filePath: string, value: unknown): Promise<void>;
|
|
39
|
+
now(): string;
|
|
40
|
+
writePhase(dir: string, phase: "starting" | "running" | "failed"): Promise<void>;
|
|
41
|
+
writeTask(dir: string, task: GjcTeamTask): Promise<void>;
|
|
42
|
+
appendEvent(dir: string, event: {
|
|
43
|
+
type: string;
|
|
44
|
+
message: string;
|
|
45
|
+
data?: Record<string, unknown>;
|
|
46
|
+
}): Promise<unknown>;
|
|
47
|
+
appendTelemetry(dir: string, event: {
|
|
48
|
+
type: string;
|
|
49
|
+
message: string;
|
|
50
|
+
data?: Record<string, unknown>;
|
|
51
|
+
}): Promise<unknown>;
|
|
52
|
+
startTmuxSession(config: GjcTeamConfig, dir: string, dryRun: boolean, env: NodeJS.ProcessEnv): Promise<GjcTeamWorker[]>;
|
|
53
|
+
killWorkerPanes(config: GjcTeamConfig): void;
|
|
54
|
+
writeWorkerLifecycleForConfig(dir: string, config: GjcTeamConfig, state: "starting", updates: (worker: GjcTeamWorker) => Partial<GjcTeamWorkerLifecycle>): Promise<unknown>;
|
|
55
|
+
readSnapshot(teamName: string, cwd: string, env: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot>;
|
|
56
|
+
}
|
|
57
|
+
/** Creates persistent team state, worktrees, and tmux worker panes. */
|
|
58
|
+
export declare function startGjcTeamLaunch(runtime: GjcTeamLaunchRuntime, options: GjcTeamStartOptions): Promise<GjcTeamSnapshot>;
|
|
59
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { GjcTeamConfig, GjcTeamMailboxMessage } from "./team-runtime";
|
|
2
|
+
import type { GjcTeamMailboxDeliveryInput, GjcTeamMailboxDeliveryResult, GjcTeamMailboxDeliveryTransport, GjcTeamNotification, GjcTeamNotificationDeliveryState, GjcTeamNotificationSummary } from "./team-store";
|
|
3
|
+
/** Runtime-owned filesystem and participant operations used by notification delivery. */
|
|
4
|
+
export interface TeamNotificationRuntime {
|
|
5
|
+
findTeamDir(teamName: string, cwd: string, env: NodeJS.ProcessEnv): Promise<string>;
|
|
6
|
+
readConfig(dir: string): Promise<GjcTeamConfig>;
|
|
7
|
+
assertKnownParticipant(config: GjcTeamConfig, participant: string): void;
|
|
8
|
+
messageId(input: {
|
|
9
|
+
teamName: string;
|
|
10
|
+
fromWorker: string;
|
|
11
|
+
toWorker: string;
|
|
12
|
+
body: string;
|
|
13
|
+
idempotencyKey?: string;
|
|
14
|
+
createdKey: string;
|
|
15
|
+
}): string;
|
|
16
|
+
messageNotificationId(teamName: string, recipient: string, messageId: string): string;
|
|
17
|
+
now(): string;
|
|
18
|
+
randomId(): string;
|
|
19
|
+
appendEvent(dir: string, event: {
|
|
20
|
+
type: string;
|
|
21
|
+
worker?: string;
|
|
22
|
+
message?: string;
|
|
23
|
+
data?: Record<string, unknown>;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
readMailbox(dir: string, worker: string): Promise<{
|
|
26
|
+
messages: GjcTeamMailboxMessage[];
|
|
27
|
+
}>;
|
|
28
|
+
writeMailboxMessage(dir: string, worker: string, message: GjcTeamMailboxMessage): Promise<GjcTeamMailboxMessage>;
|
|
29
|
+
listNotifications(dir: string): Promise<GjcTeamNotification[]>;
|
|
30
|
+
readNotification(dir: string, id: string): Promise<GjcTeamNotification>;
|
|
31
|
+
writeNotification(dir: string, notification: GjcTeamNotification): Promise<GjcTeamNotification>;
|
|
32
|
+
}
|
|
33
|
+
export declare function deliverTeamMailboxMessage(transport: GjcTeamMailboxDeliveryTransport | undefined, input: GjcTeamMailboxDeliveryInput): Promise<GjcTeamMailboxDeliveryResult | null>;
|
|
34
|
+
export declare function emptyTeamNotificationSummary(): GjcTeamNotificationSummary;
|
|
35
|
+
export declare function isReplayEligibleTeamNotification(state: GjcTeamNotificationDeliveryState): boolean;
|
|
36
|
+
export declare function summarizeTeamNotifications(notifications: GjcTeamNotification[]): GjcTeamNotificationSummary;
|
|
37
|
+
export declare function createTeamMessageNotification(runtime: TeamNotificationRuntime, dir: string, teamName: string, message: GjcTeamMailboxMessage, state?: GjcTeamNotificationDeliveryState): Promise<GjcTeamNotification>;
|
|
38
|
+
export declare function reconcileTeamNotifications(runtime: TeamNotificationRuntime, dir: string, config: GjcTeamConfig): Promise<GjcTeamNotificationSummary>;
|
|
39
|
+
export declare function replayTeamNotifications(runtime: TeamNotificationRuntime, teamName: string, cwd: string, env: NodeJS.ProcessEnv, transport?: GjcTeamMailboxDeliveryTransport): Promise<{
|
|
40
|
+
notifications: GjcTeamNotification[];
|
|
41
|
+
summary: GjcTeamNotificationSummary;
|
|
42
|
+
}>;
|
|
43
|
+
export declare function sendTeamMessage(runtime: TeamNotificationRuntime, teamName: string, fromWorker: string, toWorker: string, body: string, cwd: string, env: NodeJS.ProcessEnv, idempotencyKey?: string, transport?: GjcTeamMailboxDeliveryTransport): Promise<GjcTeamMailboxMessage>;
|
|
44
|
+
export declare function listTeamMailbox(runtime: TeamNotificationRuntime, teamName: string, worker: string, cwd: string, env: NodeJS.ProcessEnv): Promise<GjcTeamMailboxMessage[]>;
|
|
45
|
+
export declare function markTeamMailboxMessage(runtime: TeamNotificationRuntime, teamName: string, worker: string, messageId: string, field: "delivered_at" | "notified_at", cwd: string, env: NodeJS.ProcessEnv): Promise<GjcTeamMailboxMessage>;
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import type { WorkflowHudSummary } from "../skill-state/active-state";
|
|
2
2
|
import type { GcPidProbe, GcRecord } from "./gc-runtime";
|
|
3
|
-
|
|
4
|
-
export type
|
|
5
|
-
export type GjcWorkerStatusState = "idle" | "working" | "blocked" | "done" | "failed" | "draining" | "unknown";
|
|
6
|
-
export type GjcTeamWorkerLifecycleState = "starting" | "ready" | "working" | "draining" | "stopped" | "failed" | "unknown";
|
|
7
|
-
export type GjcTeamShutdownMode = "graceful" | "force" | "abort";
|
|
3
|
+
import type { GjcTeamApiClaimResult, GjcTeamMailboxDeliveryTransport, GjcTeamNotification, GjcTeamNotificationSummary, GjcTeamTask, GjcTeamTaskMetadataInput, GjcTeamTaskStatus } from "./team-store";
|
|
4
|
+
export type { GjcTeamApiClaimResult, GjcTeamMailboxDeliveryInput, GjcTeamMailboxDeliveryResult, GjcTeamMailboxDeliveryTransport, GjcTeamMailboxDeliveryTransportKind, GjcTeamNotification, GjcTeamNotificationDeliveryState, GjcTeamNotificationSummary, GjcTeamPaneAttemptResult, GjcTeamTask, GjcTeamTaskClaim, GjcTeamTaskMetadataInput, GjcTeamTaskStatus, } from "./team-store";
|
|
8
5
|
export declare const GJC_TEAM_DEFAULT_WORKERS = 3;
|
|
9
6
|
export declare const GJC_TEAM_MAX_WORKERS = 20;
|
|
10
7
|
export type GjcTeamWorkerCli = "gjc";
|
|
@@ -31,53 +28,10 @@ export interface GjcTeamWorker {
|
|
|
31
28
|
worktree_base_ref?: string;
|
|
32
29
|
team_state_root?: string;
|
|
33
30
|
}
|
|
34
|
-
export
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
export type GjcTeamTaskCompletionEvidenceKind = "command" | "inspection" | "artifact";
|
|
40
|
-
export type GjcTeamTaskCompletionEvidenceStatus = "passed" | "failed" | "not_run" | "verified" | "rejected";
|
|
41
|
-
export interface GjcTeamTaskCompletionEvidenceItem {
|
|
42
|
-
kind: GjcTeamTaskCompletionEvidenceKind;
|
|
43
|
-
status: GjcTeamTaskCompletionEvidenceStatus;
|
|
44
|
-
summary: string;
|
|
45
|
-
command?: string;
|
|
46
|
-
artifact?: string;
|
|
47
|
-
location?: string;
|
|
48
|
-
output?: string;
|
|
49
|
-
}
|
|
50
|
-
export interface GjcTeamTaskCompletionEvidence {
|
|
51
|
-
summary: string;
|
|
52
|
-
items: GjcTeamTaskCompletionEvidenceItem[];
|
|
53
|
-
files?: string[];
|
|
54
|
-
notes?: string;
|
|
55
|
-
recorded_by: string;
|
|
56
|
-
recorded_at: string;
|
|
57
|
-
}
|
|
58
|
-
export interface GjcTeamTask {
|
|
59
|
-
id: string;
|
|
60
|
-
subject: string;
|
|
61
|
-
description: string;
|
|
62
|
-
title: string;
|
|
63
|
-
objective: string;
|
|
64
|
-
status: GjcTeamTaskStatus;
|
|
65
|
-
assignee?: string;
|
|
66
|
-
owner?: string;
|
|
67
|
-
result?: string;
|
|
68
|
-
completion_evidence?: GjcTeamTaskCompletionEvidence;
|
|
69
|
-
error?: string;
|
|
70
|
-
blocked_by?: string[];
|
|
71
|
-
depends_on?: string[];
|
|
72
|
-
lane?: string;
|
|
73
|
-
required_role?: string;
|
|
74
|
-
allowed_roles?: string[];
|
|
75
|
-
version: number;
|
|
76
|
-
claim?: GjcTeamTaskClaim;
|
|
77
|
-
created_at: string;
|
|
78
|
-
updated_at: string;
|
|
79
|
-
completed_at?: string;
|
|
80
|
-
}
|
|
31
|
+
export type GjcTeamPhase = "starting" | "running" | "awaiting_integration" | "complete" | "failed" | "cancelled";
|
|
32
|
+
export type GjcWorkerStatusState = "idle" | "working" | "blocked" | "done" | "failed" | "draining" | "unknown";
|
|
33
|
+
export type GjcTeamWorkerLifecycleState = "starting" | "ready" | "working" | "draining" | "stopped" | "failed" | "unknown";
|
|
34
|
+
export type GjcTeamShutdownMode = "graceful" | "force" | "abort";
|
|
81
35
|
export type GjcTeamWorktreeMode = {
|
|
82
36
|
enabled: false;
|
|
83
37
|
} | {
|
|
@@ -98,6 +52,7 @@ export interface GjcTeamConfig {
|
|
|
98
52
|
worker_count: number;
|
|
99
53
|
max_workers: number;
|
|
100
54
|
state_root: string;
|
|
55
|
+
gjc_session_id?: string;
|
|
101
56
|
worker_command: string;
|
|
102
57
|
worker_cli_plan: GjcTeamWorkerCli[];
|
|
103
58
|
tmux_command: string;
|
|
@@ -144,55 +99,6 @@ export interface GjcTeamWorkerLifecycle {
|
|
|
144
99
|
shutdown_ack_status?: string;
|
|
145
100
|
shutdown_mode?: GjcTeamShutdownMode;
|
|
146
101
|
}
|
|
147
|
-
export type GjcTeamNotificationDeliveryState = "pending" | "sent" | "queued" | "deferred" | "failed" | "delivered" | "acknowledged";
|
|
148
|
-
export type GjcTeamPaneAttemptResult = "sent" | "queued" | "deferred" | "failed";
|
|
149
|
-
export type GjcTeamMailboxDeliveryTransportKind = "sdk" | "pane";
|
|
150
|
-
export interface GjcTeamNotification {
|
|
151
|
-
id: string;
|
|
152
|
-
kind: "mailbox_message" | "worker_lifecycle" | "invalid_attempt";
|
|
153
|
-
team_name: string;
|
|
154
|
-
recipient: string;
|
|
155
|
-
source: {
|
|
156
|
-
type: "message" | "task" | "worker" | "event";
|
|
157
|
-
id: string;
|
|
158
|
-
};
|
|
159
|
-
idempotency_key?: string;
|
|
160
|
-
delivery_state: GjcTeamNotificationDeliveryState;
|
|
161
|
-
pane_attempt_result?: GjcTeamPaneAttemptResult;
|
|
162
|
-
pane_attempt_reason?: string;
|
|
163
|
-
pane_attempt_at?: string;
|
|
164
|
-
created_at: string;
|
|
165
|
-
updated_at: string;
|
|
166
|
-
replay_count: number;
|
|
167
|
-
}
|
|
168
|
-
export interface GjcTeamMailboxDeliveryInput {
|
|
169
|
-
team_name: string;
|
|
170
|
-
state_dir: string;
|
|
171
|
-
config: GjcTeamConfig;
|
|
172
|
-
notification: GjcTeamNotification;
|
|
173
|
-
message: GjcTeamMailboxMessage;
|
|
174
|
-
cwd: string;
|
|
175
|
-
env: NodeJS.ProcessEnv;
|
|
176
|
-
}
|
|
177
|
-
export type GjcTeamMailboxDeliveryResult = {
|
|
178
|
-
transport: "sdk";
|
|
179
|
-
state: GjcTeamNotificationDeliveryState;
|
|
180
|
-
reason?: string;
|
|
181
|
-
} | {
|
|
182
|
-
transport: "pane";
|
|
183
|
-
state: GjcTeamPaneAttemptResult;
|
|
184
|
-
reason?: string;
|
|
185
|
-
};
|
|
186
|
-
export interface GjcTeamMailboxDeliveryTransport {
|
|
187
|
-
deliverMailboxMessage(input: GjcTeamMailboxDeliveryInput): Promise<GjcTeamMailboxDeliveryResult | null>;
|
|
188
|
-
}
|
|
189
|
-
export declare function setGjcTeamMailboxDeliveryTransport(transport: GjcTeamMailboxDeliveryTransport | undefined): () => void;
|
|
190
|
-
export declare function setGjcTeamMailboxDeliveryTransportForTest(transport: GjcTeamMailboxDeliveryTransport | undefined): () => void;
|
|
191
|
-
export interface GjcTeamNotificationSummary {
|
|
192
|
-
total: number;
|
|
193
|
-
replay_eligible: number;
|
|
194
|
-
by_state: Record<GjcTeamNotificationDeliveryState, number>;
|
|
195
|
-
}
|
|
196
102
|
export interface GjcTeamSnapshot {
|
|
197
103
|
team_name: string;
|
|
198
104
|
display_name: string;
|
|
@@ -224,13 +130,6 @@ export interface GjcTeamStartOptions {
|
|
|
224
130
|
platform?: NodeJS.Platform;
|
|
225
131
|
mailboxDeliveryTransport?: GjcTeamMailboxDeliveryTransport;
|
|
226
132
|
}
|
|
227
|
-
export interface GjcTeamApiClaimResult {
|
|
228
|
-
ok: boolean;
|
|
229
|
-
task?: GjcTeamTask;
|
|
230
|
-
worker_id?: string;
|
|
231
|
-
claim_token?: string;
|
|
232
|
-
reason?: string;
|
|
233
|
-
}
|
|
234
133
|
export type GjcTeamLivenessRecoveryReason = "claim_expired" | "stale_heartbeat" | "missing_pane" | "worker_lifecycle_failed" | "worker_lifecycle_stopped";
|
|
235
134
|
export interface GjcTeamRecoveredClaim {
|
|
236
135
|
task_id: string;
|
|
@@ -276,13 +175,13 @@ export interface GjcTeamTraceEvent {
|
|
|
276
175
|
evidence_refs?: string[];
|
|
277
176
|
data?: Record<string, unknown>;
|
|
278
177
|
}
|
|
279
|
-
interface WorkerStatusFile {
|
|
178
|
+
export interface WorkerStatusFile {
|
|
280
179
|
state: GjcWorkerStatusState;
|
|
281
180
|
current_task_id?: string;
|
|
282
181
|
reason?: string;
|
|
283
182
|
updated_at: string;
|
|
284
183
|
}
|
|
285
|
-
interface WorkerHeartbeatFile {
|
|
184
|
+
export interface WorkerHeartbeatFile {
|
|
286
185
|
pid: number;
|
|
287
186
|
last_turn_at: string;
|
|
288
187
|
turn_count: number;
|
|
@@ -297,7 +196,19 @@ export interface GjcWorkerIntegrationAttemptRequestResult {
|
|
|
297
196
|
head?: string | null;
|
|
298
197
|
status?: GjcWorkerCheckpointClassification["kind"];
|
|
299
198
|
}
|
|
199
|
+
export interface GjcWorkerIntegrationAttemptOptions {
|
|
200
|
+
signal?: AbortSignal;
|
|
201
|
+
}
|
|
300
202
|
export declare const GJC_TEAM_API_OPERATIONS: readonly ["send-message", "broadcast", "mailbox-list", "mailbox-mark-delivered", "mailbox-mark-notified", "notification-list", "notification-read", "notification-replay", "notification-mark-pane-attempt", "worker-startup-ack", "create-task", "read-task", "list-tasks", "update-task", "claim-task", "transition-task-status", "transition-task", "release-task-claim", "read-config", "read-manifest", "read-worker-status", "update-worker-status", "read-worker-heartbeat", "recover-stale-claims", "update-worker-heartbeat", "write-worker-inbox", "write-worker-identity", "append-event", "read-events", "read-traces", "await-event", "write-shutdown-request", "read-shutdown-ack", "read-monitor-snapshot", "write-monitor-snapshot", "read-task-approval", "write-task-approval"];
|
|
203
|
+
export interface GjcTeamRuntimeTestSeams {
|
|
204
|
+
nowMs?: () => number;
|
|
205
|
+
continuationTmuxDispatch?: (command: string, args: readonly string[]) => {
|
|
206
|
+
exitCode?: number;
|
|
207
|
+
};
|
|
208
|
+
continuationBeforeDispatch?: () => Promise<void>;
|
|
209
|
+
}
|
|
210
|
+
/** @internal Test-only seam; production code leaves the real clock and tmux dispatch intact. */
|
|
211
|
+
export declare function __setGjcTeamRuntimeTestSeamsForTests(seams: GjcTeamRuntimeTestSeams | undefined): void;
|
|
301
212
|
export declare function resolveGjcTeamStateRoot(cwd?: string, env?: NodeJS.ProcessEnv): string;
|
|
302
213
|
/** @internal */
|
|
303
214
|
export declare function listTeamWorkerGcRecords(teamRoot: string, probe: GcPidProbe): Promise<GcRecord[]>;
|
|
@@ -305,7 +216,6 @@ export declare function listTeamWorkerGcRecords(teamRoot: string, probe: GcPidPr
|
|
|
305
216
|
export declare function pruneTeamWorkerGcRecord(record: GcRecord, probe: GcPidProbe): Promise<boolean>;
|
|
306
217
|
export declare function persistGjcTeamModeStateSummary(snapshot: GjcTeamSnapshot, cwd?: string): Promise<void>;
|
|
307
218
|
export declare function recoverGjcTeamStaleClaims(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamLivenessRecoveryResult>;
|
|
308
|
-
type GjcTeamTaskMetadataInput = Partial<Pick<GjcTeamTask, "owner" | "lane" | "required_role" | "allowed_roles" | "depends_on" | "blocked_by">>;
|
|
309
219
|
export declare function resolveWorkerWorktreePath(input: {
|
|
310
220
|
repoRoot: string;
|
|
311
221
|
stateDir: string;
|
|
@@ -315,8 +225,7 @@ export declare function resolveWorkerWorktreePath(input: {
|
|
|
315
225
|
isPsmux: boolean;
|
|
316
226
|
}): string;
|
|
317
227
|
export declare function resolveGjcWorkerCommand(cwd?: string, env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, argv?: string[], execPath?: string): string;
|
|
318
|
-
|
|
319
|
-
export declare function buildWorkerCommand(config: GjcTeamConfig, worker: GjcTeamWorker, platform?: NodeJS.Platform): string;
|
|
228
|
+
export { buildWorkerCommand } from "./team-launch";
|
|
320
229
|
export type GjcWorkerCheckpointClassification = {
|
|
321
230
|
kind: "clean";
|
|
322
231
|
files: string[];
|
|
@@ -339,11 +248,11 @@ export declare function classifyGjcTeamCheckpointFiles(files: string[]): {
|
|
|
339
248
|
protected: string[];
|
|
340
249
|
};
|
|
341
250
|
export declare function classifyWorkerCheckpointStatus(cwd: string): GjcWorkerCheckpointClassification;
|
|
342
|
-
export declare function classifyWorkerCheckpointStatusAsync(cwd: string): Promise<GjcWorkerCheckpointClassification>;
|
|
251
|
+
export declare function classifyWorkerCheckpointStatusAsync(cwd: string, signal?: AbortSignal): Promise<GjcWorkerCheckpointClassification>;
|
|
343
252
|
export declare function startGjcTeam(options: GjcTeamStartOptions): Promise<GjcTeamSnapshot>;
|
|
344
253
|
export declare function readGjcTeamSnapshot(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv, options?: GjcTeamSnapshotOptions): Promise<GjcTeamSnapshot>;
|
|
345
254
|
export declare function monitorGjcTeamSnapshot(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot>;
|
|
346
|
-
export declare function requestGjcWorkerIntegrationAttempt(cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcWorkerIntegrationAttemptRequestResult>;
|
|
255
|
+
export declare function requestGjcWorkerIntegrationAttempt(cwd?: string, env?: NodeJS.ProcessEnv, options?: GjcWorkerIntegrationAttemptOptions): Promise<GjcWorkerIntegrationAttemptRequestResult>;
|
|
347
256
|
export declare function buildTeamHudSummary(snapshot: GjcTeamSnapshot, latestEvent?: GjcTeamEvent, latestMessage?: GjcTeamMailboxMessage): Promise<WorkflowHudSummary>;
|
|
348
257
|
export declare function monitorGjcTeam(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot>;
|
|
349
258
|
export declare function listGjcTeams(cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot[]>;
|
|
@@ -356,17 +265,17 @@ export declare function claimGjcTeamTask(teamName: string, workerId: string, cwd
|
|
|
356
265
|
export declare function transitionGjcTeamTaskStatus(teamName: string, taskId: string, status: GjcTeamTaskStatus, cwd?: string, env?: NodeJS.ProcessEnv, claimToken?: string, workerId?: string, completionEvidenceInput?: unknown): Promise<GjcTeamTask>;
|
|
357
266
|
export declare function transitionGjcTeamTask(teamName: string, taskId: string, status: GjcTeamTaskStatus | "complete", cwd?: string, env?: NodeJS.ProcessEnv, claimToken?: string, completionEvidenceInput?: unknown): Promise<GjcTeamTask>;
|
|
358
267
|
export declare function releaseGjcTeamTaskClaim(teamName: string, taskId: string, claimToken: string, workerId: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamTask>;
|
|
359
|
-
export declare function replayGjcTeamNotifications(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<{
|
|
268
|
+
export declare function replayGjcTeamNotifications(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv, transport?: GjcTeamMailboxDeliveryTransport): Promise<{
|
|
360
269
|
notifications: GjcTeamNotification[];
|
|
361
270
|
summary: GjcTeamNotificationSummary;
|
|
362
271
|
}>;
|
|
363
|
-
export declare function sendGjcTeamMessage(teamName: string, fromWorker: string, toWorker: string, body: string, cwd?: string, env?: NodeJS.ProcessEnv, idempotencyKey?: string): Promise<GjcTeamMailboxMessage>;
|
|
272
|
+
export declare function sendGjcTeamMessage(teamName: string, fromWorker: string, toWorker: string, body: string, cwd?: string, env?: NodeJS.ProcessEnv, idempotencyKey?: string, transport?: GjcTeamMailboxDeliveryTransport): Promise<GjcTeamMailboxMessage>;
|
|
364
273
|
export declare function broadcastGjcTeamMessage(teamName: string, fromWorker: string, body: string, cwd?: string, env?: NodeJS.ProcessEnv, idempotencyKey?: string): Promise<GjcTeamMailboxMessage[]>;
|
|
365
274
|
export declare function listGjcTeamMailbox(teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamMailboxMessage[]>;
|
|
366
275
|
export declare function markGjcTeamMailboxMessage(teamName: string, worker: string, messageId: string, field: "delivered_at" | "notified_at", cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamMailboxMessage>;
|
|
367
|
-
export declare
|
|
276
|
+
export declare const readGjcWorkerStatus: (teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv) => Promise<WorkerStatusFile>;
|
|
368
277
|
export declare function updateGjcWorkerStatus(teamName: string, worker: string, status: GjcWorkerStatusState, cwd?: string, env?: NodeJS.ProcessEnv, currentTaskId?: string, reason?: string): Promise<WorkerStatusFile>;
|
|
369
|
-
export declare
|
|
278
|
+
export declare const readGjcWorkerHeartbeat: (teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv) => Promise<WorkerHeartbeatFile | null>;
|
|
370
279
|
export declare function updateGjcWorkerHeartbeat(teamName: string, worker: string, heartbeat: WorkerHeartbeatFile, cwd?: string, env?: NodeJS.ProcessEnv): Promise<WorkerHeartbeatFile>;
|
|
371
280
|
export declare function writeGjcWorkerInbox(teamName: string, worker: string, content: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<{
|
|
372
281
|
path: string;
|
|
@@ -384,7 +293,6 @@ export declare function readGjcMonitorSnapshot(teamName: string, cwd?: string, e
|
|
|
384
293
|
export declare function writeGjcTaskApproval(teamName: string, taskId: string, approval: Record<string, unknown>, cwd?: string, env?: NodeJS.ProcessEnv): Promise<Record<string, unknown>>;
|
|
385
294
|
export declare function readGjcTaskApproval(teamName: string, taskId: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<Record<string, unknown> | null>;
|
|
386
295
|
export declare function writeGjcShutdownRequest(teamName: string, worker: string, requestedBy: string, cwd?: string, env?: NodeJS.ProcessEnv, requestId?: string, mode?: GjcTeamShutdownMode, requestedAt?: string): Promise<Record<string, unknown>>;
|
|
387
|
-
export declare
|
|
296
|
+
export declare const readGjcShutdownAck: (teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv) => Promise<Record<string, unknown> | null>;
|
|
388
297
|
export declare function executeGjcTeamApiOperation(operation: string, input: Record<string, unknown>, cwd?: string, env?: NodeJS.ProcessEnv): Promise<unknown>;
|
|
389
298
|
export declare function parseTeamLaunchArgs(argv: string[]): GjcTeamStartOptions;
|
|
390
|
-
export {};
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import type { GjcTeamConfig, GjcTeamMailboxMessage } from "./team-runtime";
|
|
2
|
+
export type GjcTeamNotificationDeliveryState = "pending" | "sent" | "queued" | "deferred" | "failed" | "delivered" | "acknowledged";
|
|
3
|
+
export type GjcTeamPaneAttemptResult = "sent" | "queued" | "deferred" | "failed";
|
|
4
|
+
export type GjcTeamMailboxDeliveryTransportKind = "sdk" | "pane";
|
|
5
|
+
export interface GjcTeamNotification {
|
|
6
|
+
id: string;
|
|
7
|
+
kind: "mailbox_message" | "worker_lifecycle" | "invalid_attempt";
|
|
8
|
+
team_name: string;
|
|
9
|
+
recipient: string;
|
|
10
|
+
source: {
|
|
11
|
+
type: "message" | "task" | "worker" | "event";
|
|
12
|
+
id: string;
|
|
13
|
+
};
|
|
14
|
+
idempotency_key?: string;
|
|
15
|
+
delivery_state: GjcTeamNotificationDeliveryState;
|
|
16
|
+
pane_attempt_result?: GjcTeamPaneAttemptResult;
|
|
17
|
+
pane_attempt_reason?: string;
|
|
18
|
+
pane_attempt_at?: string;
|
|
19
|
+
created_at: string;
|
|
20
|
+
updated_at: string;
|
|
21
|
+
replay_count: number;
|
|
22
|
+
}
|
|
23
|
+
export interface GjcTeamNotificationSummary {
|
|
24
|
+
total: number;
|
|
25
|
+
replay_eligible: number;
|
|
26
|
+
by_state: Record<GjcTeamNotificationDeliveryState, number>;
|
|
27
|
+
}
|
|
28
|
+
export interface GjcTeamMailboxDeliveryInput {
|
|
29
|
+
team_name: string;
|
|
30
|
+
state_dir: string;
|
|
31
|
+
config: GjcTeamConfig;
|
|
32
|
+
notification: GjcTeamNotification;
|
|
33
|
+
message: GjcTeamMailboxMessage;
|
|
34
|
+
cwd: string;
|
|
35
|
+
env: NodeJS.ProcessEnv;
|
|
36
|
+
}
|
|
37
|
+
export type GjcTeamMailboxDeliveryResult = {
|
|
38
|
+
transport: "sdk";
|
|
39
|
+
state: GjcTeamNotificationDeliveryState;
|
|
40
|
+
reason?: string;
|
|
41
|
+
} | {
|
|
42
|
+
transport: "pane";
|
|
43
|
+
state: GjcTeamPaneAttemptResult;
|
|
44
|
+
reason?: string;
|
|
45
|
+
};
|
|
46
|
+
export interface GjcTeamMailboxDeliveryTransport {
|
|
47
|
+
deliverMailboxMessage(input: GjcTeamMailboxDeliveryInput): Promise<GjcTeamMailboxDeliveryResult | null>;
|
|
48
|
+
}
|
|
49
|
+
export type GjcTeamTaskStatus = "pending" | "blocked" | "in_progress" | "completed" | "failed";
|
|
50
|
+
export interface GjcTeamTaskClaim {
|
|
51
|
+
owner: string;
|
|
52
|
+
token: string;
|
|
53
|
+
leased_until: string;
|
|
54
|
+
}
|
|
55
|
+
export type GjcTeamTaskCompletionEvidenceKind = "command" | "inspection" | "artifact";
|
|
56
|
+
export type GjcTeamTaskCompletionEvidenceStatus = "passed" | "failed" | "not_run" | "verified" | "rejected";
|
|
57
|
+
export interface GjcTeamTaskCompletionEvidenceItem {
|
|
58
|
+
kind: GjcTeamTaskCompletionEvidenceKind;
|
|
59
|
+
status: GjcTeamTaskCompletionEvidenceStatus;
|
|
60
|
+
summary: string;
|
|
61
|
+
command?: string;
|
|
62
|
+
artifact?: string;
|
|
63
|
+
location?: string;
|
|
64
|
+
output?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface GjcTeamTaskCompletionEvidence {
|
|
67
|
+
summary: string;
|
|
68
|
+
items: GjcTeamTaskCompletionEvidenceItem[];
|
|
69
|
+
files?: string[];
|
|
70
|
+
notes?: string;
|
|
71
|
+
recorded_by: string;
|
|
72
|
+
recorded_at: string;
|
|
73
|
+
}
|
|
74
|
+
export interface GjcTeamTask {
|
|
75
|
+
id: string;
|
|
76
|
+
subject: string;
|
|
77
|
+
description: string;
|
|
78
|
+
title: string;
|
|
79
|
+
objective: string;
|
|
80
|
+
status: GjcTeamTaskStatus;
|
|
81
|
+
assignee?: string;
|
|
82
|
+
owner?: string;
|
|
83
|
+
result?: string;
|
|
84
|
+
completion_evidence?: GjcTeamTaskCompletionEvidence;
|
|
85
|
+
error?: string;
|
|
86
|
+
blocked_by?: string[];
|
|
87
|
+
depends_on?: string[];
|
|
88
|
+
lane?: string;
|
|
89
|
+
required_role?: string;
|
|
90
|
+
allowed_roles?: string[];
|
|
91
|
+
version: number;
|
|
92
|
+
claim?: GjcTeamTaskClaim;
|
|
93
|
+
created_at: string;
|
|
94
|
+
updated_at: string;
|
|
95
|
+
completed_at?: string;
|
|
96
|
+
}
|
|
97
|
+
export type GjcTeamTaskMetadataInput = Partial<Pick<GjcTeamTask, "owner" | "lane" | "required_role" | "allowed_roles" | "depends_on" | "blocked_by">>;
|
|
98
|
+
export interface GjcTeamTaskWorker {
|
|
99
|
+
id: string;
|
|
100
|
+
role: string;
|
|
101
|
+
agent_type: string;
|
|
102
|
+
}
|
|
103
|
+
export interface GjcTeamApiClaimResult {
|
|
104
|
+
ok: boolean;
|
|
105
|
+
task?: GjcTeamTask;
|
|
106
|
+
worker_id?: string;
|
|
107
|
+
claim_token?: string;
|
|
108
|
+
reason?: string;
|
|
109
|
+
}
|
|
110
|
+
type EventAppender = (event: {
|
|
111
|
+
type: string;
|
|
112
|
+
task_id?: string;
|
|
113
|
+
worker?: string;
|
|
114
|
+
message: string;
|
|
115
|
+
data?: Record<string, unknown>;
|
|
116
|
+
}) => Promise<void>;
|
|
117
|
+
/** The sole strict schema gate for persisted task and claim authority records. */
|
|
118
|
+
export declare function isCanonicalPersistedGjcTeamTaskClaim(value: unknown): value is GjcTeamTaskClaim;
|
|
119
|
+
export declare function isCanonicalPersistedGjcTeamTask(value: unknown, fileId?: string): value is GjcTeamTask;
|
|
120
|
+
/**
|
|
121
|
+
* Serializes mutable team facts across processes. Callers must not re-enter this
|
|
122
|
+
* fence; use unlocked helpers when composing operations under one transaction.
|
|
123
|
+
*/
|
|
124
|
+
export declare function withGjcTeamMutationFence<T>(dir: string, fn: () => Promise<T>): Promise<T>;
|
|
125
|
+
export declare function taskMetadataFromInput(input: Record<string, unknown>, includeOwner?: boolean): GjcTeamTaskMetadataInput;
|
|
126
|
+
export declare function normalizeGjcTeamTask(raw: GjcTeamTask): GjcTeamTask;
|
|
127
|
+
export declare function normalizeGjcTeamTaskCompletionEvidence(id: string, owner: string, input: unknown, recordedAt?: string): GjcTeamTaskCompletionEvidence;
|
|
128
|
+
export declare function getGjcTeamTaskCompletionEvidenceFailure(task: GjcTeamTask): string | null;
|
|
129
|
+
export declare const isGjcTeamTaskCompletionVerified: (task: GjcTeamTask) => boolean;
|
|
130
|
+
export declare function readGjcTeamTasksFromDir(dir: string): Promise<GjcTeamTask[]>;
|
|
131
|
+
declare const teamTaskMutationCapability: unique symbol;
|
|
132
|
+
/**
|
|
133
|
+
* This is intentionally structural only: callers can invoke methods supplied by
|
|
134
|
+
* `withGjcTeamTaskMutation`, but cannot create an active capability. Each method
|
|
135
|
+
* closes over a private brand and is revoked when that callback settles.
|
|
136
|
+
*/
|
|
137
|
+
export interface GjcTeamTaskMutationCapability {
|
|
138
|
+
create(subject: string, description: string, options: GjcTeamTaskMetadataInput): Promise<GjcTeamTask>;
|
|
139
|
+
update(id: string, updates: Partial<Pick<GjcTeamTask, "subject" | "description" | "blocked_by" | "depends_on" | "lane" | "required_role" | "allowed_roles">>): Promise<GjcTeamTask>;
|
|
140
|
+
claim(worker: GjcTeamTaskWorker, id?: string): Promise<GjcTeamApiClaimResult>;
|
|
141
|
+
transition(id: string, status: GjcTeamTaskStatus, token?: string, workerId?: string, evidenceInput?: unknown): Promise<GjcTeamTask>;
|
|
142
|
+
release(id: string, token: string, workerId: string): Promise<GjcTeamTask>;
|
|
143
|
+
writeRecovered(task: GjcTeamTask): Promise<void>;
|
|
144
|
+
}
|
|
145
|
+
export declare function withGjcTeamTaskMutation<T>(store: GjcTeamTaskStore, fn: (capability: GjcTeamTaskMutationCapability) => Promise<T>): Promise<T>;
|
|
146
|
+
export declare class GjcTeamTaskStore {
|
|
147
|
+
#private;
|
|
148
|
+
readonly dir: string;
|
|
149
|
+
readonly appendEvent: EventAppender;
|
|
150
|
+
constructor(dir: string, appendEvent: EventAppender);
|
|
151
|
+
withMutationCapability<T>(capabilityBrand: typeof teamTaskMutationCapability, fn: (capability: GjcTeamTaskMutationCapability) => Promise<T>): Promise<T>;
|
|
152
|
+
list(): Promise<GjcTeamTask[]>;
|
|
153
|
+
read(id: string): Promise<GjcTeamTask>;
|
|
154
|
+
create(subject: string, description: string, options: GjcTeamTaskMetadataInput): Promise<GjcTeamTask>;
|
|
155
|
+
update(id: string, updates: Partial<Pick<GjcTeamTask, "subject" | "description" | "blocked_by" | "depends_on" | "lane" | "required_role" | "allowed_roles">>): Promise<GjcTeamTask>;
|
|
156
|
+
claim(worker: GjcTeamTaskWorker, id?: string): Promise<GjcTeamApiClaimResult>;
|
|
157
|
+
transition(id: string, status: GjcTeamTaskStatus, token?: string, workerId?: string, evidenceInput?: unknown): Promise<GjcTeamTask>;
|
|
158
|
+
release(id: string, token: string, workerId: string): Promise<GjcTeamTask>;
|
|
159
|
+
}
|
|
160
|
+
export {};
|