@gajae-code/coding-agent 0.11.1 → 0.11.3
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 +64 -0
- package/dist/types/cli/config-cli.d.ts +11 -1
- package/dist/types/cli/launch-disposition.d.ts +23 -0
- 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 +141 -11
- 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-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 +4 -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/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 +19 -17
- package/dist/types/modes/jobs-observer.d.ts +2 -0
- package/dist/types/modes/prompt-action-autocomplete.d.ts +4 -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 +20 -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 +20 -13
- 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/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/html-format.d.ts +3 -2
- package/dist/types/sdk/bus/index.d.ts +29 -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 +46 -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/sdk/session.d.ts +2 -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 +5 -0
- package/dist/types/tools/search-tool-bm25.d.ts +3 -4
- package/dist/types/tools/subagent.d.ts +1 -0
- package/dist/types/utils/event-bus.d.ts +1 -1
- package/dist/types/utils/file-mentions.d.ts +3 -3
- package/dist/types/web/search/index.d.ts +3 -1
- package/package.json +21 -9
- package/scripts/build-sdk-package-smoke.ts +34 -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 +49 -6
- package/src/cli/config-cli.ts +75 -2
- package/src/cli/launch-disposition.ts +42 -0
- 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 +214 -12
- 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 +327 -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 +29 -5
- package/src/gjc-runtime/ultragoal-pipeline.ts +306 -0
- package/src/gjc-runtime/ultragoal-runtime.ts +84 -1311
- 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 +127 -30
- 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/event-controller.ts +3 -2
- package/src/modes/controllers/extension-ui-controller.ts +24 -1
- 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 +289 -1150
- package/src/modes/jobs-observer.ts +3 -0
- package/src/modes/prompt-action-autocomplete.ts +7 -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 +71 -16
- 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 +45 -18
- 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 +1 -1
- package/src/sdk/broker/ensure.ts +3 -1
- 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 +10 -2
- 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/html-format.ts +20 -3
- package/src/sdk/bus/index.ts +782 -94
- package/src/sdk/bus/lifecycle-control-runtime.ts +91 -33
- 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 +1389 -237
- 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 +44 -2
- 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 +462 -480
- package/src/session/agent-session.ts +1700 -583
- 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 +36 -21
- 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 +19 -7
- package/src/tools/read.ts +219 -64
- package/src/tools/resource-gc.ts +2 -2
- package/src/tools/search-tool-bm25.ts +11 -74
- package/src/tools/subagent.ts +43 -2
- package/src/utils/event-bus.ts +9 -4
- package/src/utils/file-mentions.ts +4 -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,5 +1,6 @@
|
|
|
1
1
|
/** Internal JSON-line facade for the tmux owner-isolation contract. */
|
|
2
2
|
import * as fs from "node:fs/promises";
|
|
3
|
+
import { readLinuxProcStartTime } from "./linux-proc";
|
|
3
4
|
import {
|
|
4
5
|
type BootstrapRequest,
|
|
5
6
|
bootstrapTmuxOwnerIsolation,
|
|
@@ -31,17 +32,7 @@ async function readCgroup(pid = "self"): Promise<string | null> {
|
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
async function readProcessStartTime(pid: number): Promise<string | null> {
|
|
34
|
-
|
|
35
|
-
const stat = await fs.readFile(`/proc/${pid}/stat`, "utf8");
|
|
36
|
-
return (
|
|
37
|
-
stat
|
|
38
|
-
.slice(stat.lastIndexOf(")") + 2)
|
|
39
|
-
.trim()
|
|
40
|
-
.split(/\s+/)[19] ?? null
|
|
41
|
-
);
|
|
42
|
-
} catch {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
35
|
+
return readLinuxProcStartTime(pid);
|
|
45
36
|
}
|
|
46
37
|
|
|
47
38
|
function isKnownNoServerDiagnostic(stderr: string): boolean {
|
|
@@ -12,6 +12,7 @@ import * as fs from "node:fs/promises";
|
|
|
12
12
|
|
|
13
13
|
import * as path from "node:path";
|
|
14
14
|
import { isCompiledBinary } from "@gajae-code/utils/env";
|
|
15
|
+
import { parseLinuxProcStartTime } from "./linux-proc";
|
|
15
16
|
|
|
16
17
|
export const TMUX_OWNER_ISOLATION_SCHEMA_VERSION = 1;
|
|
17
18
|
export const TMUX_OWNER_ISOLATION_MAX_LINE_BYTES = 16 * 1024;
|
|
@@ -99,14 +100,7 @@ export function classifyCgroup(input: { platform: NodeJS.Platform; cgroupText?:
|
|
|
99
100
|
|
|
100
101
|
export function ownerProcessStartTime(platform: NodeJS.Platform, stat: string | null): string | null {
|
|
101
102
|
if (platform !== "linux") return "not_applicable";
|
|
102
|
-
|
|
103
|
-
const close = stat.lastIndexOf(")");
|
|
104
|
-
if (close < 0) return null;
|
|
105
|
-
const startTime = stat
|
|
106
|
-
.slice(close + 2)
|
|
107
|
-
.trim()
|
|
108
|
-
.split(/\s+/)[19];
|
|
109
|
-
return startTime && /^\d+$/.test(startTime) ? startTime : null;
|
|
103
|
+
return parseLinuxProcStartTime(stat);
|
|
110
104
|
}
|
|
111
105
|
|
|
112
106
|
export interface TmuxServerProof {
|
|
@@ -312,7 +306,7 @@ function validArgv(argv: unknown): argv is string[] {
|
|
|
312
306
|
);
|
|
313
307
|
}
|
|
314
308
|
|
|
315
|
-
function isSafeServerProof(
|
|
309
|
+
export function isSafeServerProof(
|
|
316
310
|
server: TmuxServerProof,
|
|
317
311
|
platform: NodeJS.Platform = "linux",
|
|
318
312
|
): server is TmuxServerProof & {
|
|
@@ -331,6 +325,17 @@ function isSafeServerProof(
|
|
|
331
325
|
(platform !== "linux" && server.cgroup?.classification === "not_applicable"))
|
|
332
326
|
);
|
|
333
327
|
}
|
|
328
|
+
|
|
329
|
+
/** Compares the stable identity fields of independently observed tmux servers. */
|
|
330
|
+
export function sameServerIdentity(left: TmuxServerProof, right: TmuxServerProof): boolean {
|
|
331
|
+
return (
|
|
332
|
+
left.pid === right.pid &&
|
|
333
|
+
left.startTime === right.startTime &&
|
|
334
|
+
left.cgroup?.classification === right.cgroup?.classification &&
|
|
335
|
+
left.cgroup?.scope === right.cgroup?.scope &&
|
|
336
|
+
left.cgroup?.diagnostic === right.cgroup?.diagnostic
|
|
337
|
+
);
|
|
338
|
+
}
|
|
334
339
|
/**
|
|
335
340
|
* Synchronous equivalent of the target-server truth table for managed callers.
|
|
336
341
|
* Attempt persistence is injected so a caller can use its existing atomic state writer.
|
|
@@ -3,6 +3,7 @@ import * as crypto from "node:crypto";
|
|
|
3
3
|
import * as fsSync from "node:fs";
|
|
4
4
|
import * as fs from "node:fs/promises";
|
|
5
5
|
import * as path from "node:path";
|
|
6
|
+
import { readLinuxProcStartTime, readLinuxProcStartTimeSync } from "./linux-proc";
|
|
6
7
|
import { resolveGjcTmuxBinary } from "./psmux-detect";
|
|
7
8
|
import { tmuxRuntimeSessionPath } from "./session-layout";
|
|
8
9
|
import {
|
|
@@ -420,11 +421,7 @@ export function createGjcTmuxSession(
|
|
|
420
421
|
const pid = Number(result.stdout.toString().trim());
|
|
421
422
|
if (!Number.isSafeInteger(pid) || pid <= 0) return { state: "unverifiable" };
|
|
422
423
|
try {
|
|
423
|
-
const
|
|
424
|
-
const startTime = stat
|
|
425
|
-
.slice(stat.lastIndexOf(")") + 2)
|
|
426
|
-
.trim()
|
|
427
|
-
.split(/\s+/)[19];
|
|
424
|
+
const startTime = readLinuxProcStartTimeSync(pid);
|
|
428
425
|
if (!startTime) return { state: "unverifiable" };
|
|
429
426
|
const cgroup = classifyCgroup({
|
|
430
427
|
platform,
|
|
@@ -750,11 +747,7 @@ function requireSafeTmuxServerForMutation(
|
|
|
750
747
|
const pid = Number(result.stdout.toString().trim());
|
|
751
748
|
if (!Number.isSafeInteger(pid) || pid <= 0) throw new Error("gjc_tmux_owner_isolation_server_unverifiable");
|
|
752
749
|
try {
|
|
753
|
-
const
|
|
754
|
-
const startTime = stat
|
|
755
|
-
.slice(stat.lastIndexOf(")") + 2)
|
|
756
|
-
.trim()
|
|
757
|
-
.split(/\s+/)[19];
|
|
750
|
+
const startTime = readLinuxProcStartTimeSync(pid);
|
|
758
751
|
const cgroup = classifyCgroup({
|
|
759
752
|
platform: process.platform,
|
|
760
753
|
cgroupText: fsSync.readFileSync(`/proc/${pid}/cgroup`, "utf8"),
|
|
@@ -967,17 +960,7 @@ export function removeGjcTmuxSession(
|
|
|
967
960
|
}
|
|
968
961
|
|
|
969
962
|
async function readProcessStartTime(pid: number): Promise<string | null> {
|
|
970
|
-
|
|
971
|
-
const stat = await fs.readFile(`/proc/${pid}/stat`, "utf8");
|
|
972
|
-
const close = stat.lastIndexOf(")");
|
|
973
|
-
const fields = stat
|
|
974
|
-
.slice(close + 2)
|
|
975
|
-
.trim()
|
|
976
|
-
.split(/\s+/);
|
|
977
|
-
return fields[19] ?? null;
|
|
978
|
-
} catch {
|
|
979
|
-
return null;
|
|
980
|
-
}
|
|
963
|
+
return readLinuxProcStartTime(pid);
|
|
981
964
|
}
|
|
982
965
|
|
|
983
966
|
async function readCurrentGeneration(stateDir: string, sessionId: string): Promise<string | null> {
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import {
|
|
2
|
+
categorizeComputerChangePath,
|
|
3
|
+
isSettingsSchemaPath,
|
|
4
|
+
normalizeRepoPath,
|
|
5
|
+
type UltragoalChangeCategory,
|
|
6
|
+
type UltragoalChangeSet,
|
|
7
|
+
type UltragoalChangeSetPath,
|
|
8
|
+
type UltragoalChangeStatus,
|
|
9
|
+
} from "./ultragoal-runtime";
|
|
10
|
+
|
|
11
|
+
export async function spawnText(
|
|
12
|
+
command: string[],
|
|
13
|
+
options: { cwd: string; timeoutMs?: number },
|
|
14
|
+
): Promise<{ ok: boolean; stdout: string; stderr: string }> {
|
|
15
|
+
try {
|
|
16
|
+
const proc = Bun.spawn(command, { cwd: options.cwd, stdout: "pipe", stderr: "pipe" });
|
|
17
|
+
const timeout = setTimeout(() => proc.kill(), options.timeoutMs ?? 5000);
|
|
18
|
+
const [stdout, stderr, exitCode] = await Promise.all([
|
|
19
|
+
new Response(proc.stdout).text(),
|
|
20
|
+
new Response(proc.stderr).text(),
|
|
21
|
+
proc.exited,
|
|
22
|
+
]);
|
|
23
|
+
clearTimeout(timeout);
|
|
24
|
+
return { ok: exitCode === 0, stdout, stderr };
|
|
25
|
+
} catch (error) {
|
|
26
|
+
return { ok: false, stdout: "", stderr: error instanceof Error ? error.message : String(error) };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export async function resolveGitBase(cwd: string, branch?: string): Promise<string> {
|
|
31
|
+
if (branch) {
|
|
32
|
+
const exists = await spawnText(["git", "rev-parse", "--verify", branch], { cwd, timeoutMs: 3000 });
|
|
33
|
+
if (exists.ok) return branch;
|
|
34
|
+
} else {
|
|
35
|
+
// Prefer the NEAREST integration base (the branch this work actually forks
|
|
36
|
+
// from) rather than always `main`. A branch opened against `dev` must be
|
|
37
|
+
// scoped to `dev`; using a stale `main` sweeps in unrelated trunk history
|
|
38
|
+
// and mis-attributes other people's changes to this story (e.g. falsely
|
|
39
|
+
// tripping change-scoped gates). Among existing candidates, pick the one
|
|
40
|
+
// whose merge-base with HEAD is closest to HEAD (fewest commits ahead).
|
|
41
|
+
const candidates = ["origin/dev", "dev", "origin/main", "origin/master", "main", "master"];
|
|
42
|
+
let best: { ref: string; ahead: number } | undefined;
|
|
43
|
+
for (const candidate of candidates) {
|
|
44
|
+
const exists = await spawnText(["git", "rev-parse", "--verify", candidate], { cwd, timeoutMs: 3000 });
|
|
45
|
+
if (!exists.ok) continue;
|
|
46
|
+
const mergeBase = await spawnText(["git", "merge-base", "HEAD", candidate], { cwd, timeoutMs: 3000 });
|
|
47
|
+
if (!mergeBase.ok || !mergeBase.stdout.trim()) continue;
|
|
48
|
+
const count = await spawnText(["git", "rev-list", "--count", `${mergeBase.stdout.trim()}..HEAD`], {
|
|
49
|
+
cwd,
|
|
50
|
+
timeoutMs: 3000,
|
|
51
|
+
});
|
|
52
|
+
const ahead = Number.parseInt(count.stdout.trim(), 10);
|
|
53
|
+
if (!Number.isFinite(ahead)) continue;
|
|
54
|
+
if (!best || ahead < best.ahead) best = { ref: candidate, ahead };
|
|
55
|
+
}
|
|
56
|
+
if (best) return best.ref;
|
|
57
|
+
}
|
|
58
|
+
const mergeBase = await spawnText(["git", "merge-base", "HEAD", "origin/main"], { cwd, timeoutMs: 3000 });
|
|
59
|
+
if (mergeBase.ok && mergeBase.stdout.trim()) return mergeBase.stdout.trim();
|
|
60
|
+
return "HEAD~1";
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function parseGitNameStatus(output: string): UltragoalChangeSetPath[] {
|
|
64
|
+
const rows: UltragoalChangeSetPath[] = [];
|
|
65
|
+
for (const line of output.split("\n")) {
|
|
66
|
+
const trimmed = line.trim();
|
|
67
|
+
if (!trimmed) continue;
|
|
68
|
+
const parts = trimmed.split(/\s+/);
|
|
69
|
+
const statusCode = parts[0] ?? "";
|
|
70
|
+
let status: UltragoalChangeStatus = "unknown";
|
|
71
|
+
if (statusCode.startsWith("A")) status = "added";
|
|
72
|
+
else if (statusCode.startsWith("M")) status = "modified";
|
|
73
|
+
else if (statusCode.startsWith("D")) status = "deleted";
|
|
74
|
+
else if (statusCode.startsWith("R")) status = "renamed";
|
|
75
|
+
else if (statusCode.startsWith("C")) status = "copied";
|
|
76
|
+
const pathValue = status === "renamed" || status === "copied" ? parts[2] : parts[1];
|
|
77
|
+
if (!pathValue) continue;
|
|
78
|
+
const oldPath = status === "renamed" || status === "copied" ? parts[1] : undefined;
|
|
79
|
+
rows.push({
|
|
80
|
+
path: normalizeRepoPath(pathValue),
|
|
81
|
+
oldPath: oldPath ? normalizeRepoPath(oldPath) : undefined,
|
|
82
|
+
status,
|
|
83
|
+
category: categorizeComputerChangePath(pathValue),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return rows;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function categorizeCiChangedPath(value: string): UltragoalChangeCategory {
|
|
90
|
+
// CI_DEV_CHANGED_PATHS intentionally carries path names only. Mixed registries
|
|
91
|
+
// such as settings-schema.ts require diff-level narrowing; without the diff,
|
|
92
|
+
// treating the whole registry as computer-control source forces the mandatory
|
|
93
|
+
// computer red-team suite on unrelated settings changes.
|
|
94
|
+
if (isSettingsSchemaPath(value)) return "other";
|
|
95
|
+
return categorizeComputerChangePath(value);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function ciDevChangedPathRows(): UltragoalChangeSetPath[] {
|
|
99
|
+
const raw = process.env.CI_DEV_CHANGED_PATHS;
|
|
100
|
+
if (!raw) return [];
|
|
101
|
+
return raw
|
|
102
|
+
.split(/\r?\n/)
|
|
103
|
+
.map(row => row.trim())
|
|
104
|
+
.filter(Boolean)
|
|
105
|
+
.map(pathValue => ({
|
|
106
|
+
path: normalizeRepoPath(pathValue),
|
|
107
|
+
status: "unknown" as UltragoalChangeStatus,
|
|
108
|
+
category: categorizeCiChangedPath(pathValue),
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function mergeChangeSetPaths(groups: UltragoalChangeSetPath[][]): UltragoalChangeSetPath[] {
|
|
113
|
+
const byKey = new Map<string, UltragoalChangeSetPath>();
|
|
114
|
+
for (const row of groups.flat()) byKey.set(`${row.oldPath ?? ""}\u0000${row.path}`, row);
|
|
115
|
+
return [...byKey.values()];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export async function computeCheckpointChangeSet(cwd: string): Promise<UltragoalChangeSet | undefined> {
|
|
119
|
+
const ciChangedPaths = ciDevChangedPathRows();
|
|
120
|
+
const inGit = await spawnText(["git", "rev-parse", "--is-inside-work-tree"], { cwd, timeoutMs: 3000 });
|
|
121
|
+
if (!inGit.ok || inGit.stdout.trim() !== "true") {
|
|
122
|
+
if (ciChangedPaths.length === 0) return undefined;
|
|
123
|
+
return { source: "checkpoint-git", paths: ciChangedPaths, trusted: true };
|
|
124
|
+
}
|
|
125
|
+
const baseRef = await resolveGitBase(cwd);
|
|
126
|
+
const base = baseRef;
|
|
127
|
+
const mergeBase = await spawnText(["git", "merge-base", "HEAD", baseRef], { cwd, timeoutMs: 3000 });
|
|
128
|
+
const [committed, unstaged, staged, stat, committedDiff, unstagedDiff, stagedDiff] = await Promise.all([
|
|
129
|
+
spawnText(["git", "diff", "--name-status", `${base}...HEAD`], { cwd, timeoutMs: 5000 }),
|
|
130
|
+
spawnText(["git", "diff", "--name-status"], { cwd, timeoutMs: 5000 }),
|
|
131
|
+
spawnText(["git", "diff", "--cached", "--name-status"], { cwd, timeoutMs: 5000 }),
|
|
132
|
+
spawnText(["git", "diff", "--stat", `${base}...HEAD`], { cwd, timeoutMs: 5000 }),
|
|
133
|
+
spawnText(["git", "diff", `${base}...HEAD`], { cwd, timeoutMs: 5000 }),
|
|
134
|
+
spawnText(["git", "diff"], { cwd, timeoutMs: 5000 }),
|
|
135
|
+
spawnText(["git", "diff", "--cached"], { cwd, timeoutMs: 5000 }),
|
|
136
|
+
]);
|
|
137
|
+
if (!committed.ok && !unstaged.ok && !staged.ok && ciChangedPaths.length === 0) return undefined;
|
|
138
|
+
const gitPaths = mergeChangeSetPaths([
|
|
139
|
+
parseGitNameStatus(committed.stdout),
|
|
140
|
+
parseGitNameStatus(unstaged.stdout),
|
|
141
|
+
parseGitNameStatus(staged.stdout),
|
|
142
|
+
]);
|
|
143
|
+
const paths = gitPaths.length > 0 ? gitPaths : ciChangedPaths;
|
|
144
|
+
return {
|
|
145
|
+
source: "checkpoint-git",
|
|
146
|
+
baseRef,
|
|
147
|
+
mergeBase: mergeBase.ok && mergeBase.stdout.trim() ? mergeBase.stdout.trim() : undefined,
|
|
148
|
+
headRef: "HEAD",
|
|
149
|
+
paths,
|
|
150
|
+
rawDiffStat: stat.stdout,
|
|
151
|
+
rawDiff: [committedDiff.stdout, unstagedDiff.stdout, stagedDiff.stdout].filter(Boolean).join("\n"),
|
|
152
|
+
trusted: true,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export function parseUnifiedDiffPaths(diff: string): UltragoalChangeSetPath[] {
|
|
157
|
+
const paths: UltragoalChangeSetPath[] = [];
|
|
158
|
+
for (const line of diff.split("\n")) {
|
|
159
|
+
if (!line.startsWith("diff --git ")) continue;
|
|
160
|
+
const match = /^diff --git a\/(.+?) b\/(.+)$/.exec(line);
|
|
161
|
+
if (!match) continue;
|
|
162
|
+
const oldPath = normalizeRepoPath(match[1]!);
|
|
163
|
+
const newPath = normalizeRepoPath(match[2]!);
|
|
164
|
+
paths.push({
|
|
165
|
+
path: newPath,
|
|
166
|
+
oldPath: oldPath === newPath ? undefined : oldPath,
|
|
167
|
+
status: oldPath === newPath ? "modified" : "renamed",
|
|
168
|
+
category: categorizeComputerChangePath(newPath),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return paths;
|
|
172
|
+
}
|