@gajae-code/coding-agent 0.18.11 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +760 -0
- package/dist/types/async/job-manager.d.ts +7 -3
- package/dist/types/async/result-formatting.d.ts +2 -0
- package/dist/types/autoresearch/git.d.ts +1 -1
- package/dist/types/capability/fs.d.ts +2 -2
- package/dist/types/capability/rule.d.ts +7 -2
- package/dist/types/cli/accounts-cli.d.ts +2 -2
- package/dist/types/cli/append-system-prompt.d.ts +6 -0
- package/dist/types/cli/args.d.ts +7 -2
- package/dist/types/cli/customize-doctor-precedence.d.ts +16 -0
- package/dist/types/cli/customize-doctor.d.ts +4 -3
- package/dist/types/cli/doctor/install-repairs.d.ts +4 -1
- package/dist/types/cli/install-activation.d.ts +10 -4
- package/dist/types/cli/public-command-errors.d.ts +2 -0
- package/dist/types/cli/root-flags.d.ts +0 -12
- package/dist/types/cli/update-cli.d.ts +21 -3
- package/dist/types/cli-main.d.ts +0 -6
- package/dist/types/cli-ordinary.d.ts +2 -2
- package/dist/types/commands/accounts.d.ts +2 -1
- package/dist/types/commands/launch.d.ts +0 -6
- package/dist/types/commands/migrate.d.ts +1 -1
- package/dist/types/commands/sdk.d.ts +13 -0
- package/dist/types/commit/changelog/index.d.ts +1 -0
- package/dist/types/commit/map-reduce/index.d.ts +4 -4
- package/dist/types/config/autorouting-tier-map.d.ts +53 -1
- package/dist/types/config/config-hot-reload-trust.d.ts +12 -0
- package/dist/types/config/config-hot-reload.d.ts +44 -0
- package/dist/types/config/file-lock.d.ts +52 -3
- package/dist/types/config/model-discovery-manager.d.ts +2 -0
- package/dist/types/config/model-profile-activation.d.ts +79 -9
- package/dist/types/config/model-registry.d.ts +72 -8
- package/dist/types/config/model-resolver.d.ts +7 -4
- package/dist/types/config/models-config-schema.d.ts +10 -0
- package/dist/types/config/settings-schema.d.ts +57 -4
- package/dist/types/config/settings.d.ts +33 -1
- package/dist/types/coordinator-mcp/server.d.ts +4 -0
- package/dist/types/customization/import.d.ts +2 -0
- package/dist/types/customization/types.d.ts +1 -1
- package/dist/types/dap/config.d.ts +8 -4
- package/dist/types/dap/session.d.ts +11 -2
- package/dist/types/debug/system-info.d.ts +6 -1
- package/dist/types/discovery/helpers.d.ts +7 -2
- package/dist/types/discovery/mcp-compat.d.ts +3 -1
- package/dist/types/edit/index.d.ts +5 -0
- package/dist/types/edit/modes/patch.d.ts +14 -0
- package/dist/types/edit/modes/replace.d.ts +3 -0
- package/dist/types/eval/py/runtime.d.ts +9 -0
- package/dist/types/exec/bash-executor.d.ts +12 -0
- package/dist/types/export/ttsr.d.ts +19 -0
- package/dist/types/extensibility/extensions/types.d.ts +5 -1
- package/dist/types/extensibility/slash-commands.d.ts +1 -0
- package/dist/types/gjc-runtime/managed-owner-admission.d.ts +3 -0
- package/dist/types/gjc-runtime/ralplan-current-final.d.ts +54 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +5 -0
- package/dist/types/gjc-runtime/session-state-lock.d.ts +2 -0
- package/dist/types/gjc-runtime/state-runtime.d.ts +0 -2
- package/dist/types/gjc-runtime/tmux-sessions.d.ts +24 -0
- package/dist/types/gjc-runtime/ultragoal-change-set.d.ts +6 -0
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +1 -0
- package/dist/types/harness-control-plane/receipt-spool.d.ts +4 -0
- package/dist/types/hindsight/content.d.ts +5 -6
- package/dist/types/internal-urls/types.d.ts +2 -0
- package/dist/types/lsp/clients/swiftlint-client.d.ts +0 -4
- package/dist/types/main.d.ts +23 -18
- package/dist/types/migrate/action-planner.d.ts +10 -1
- package/dist/types/migrate/adapters/codex.d.ts +2 -1
- package/dist/types/migrate/adapters/index.d.ts +42 -1
- package/dist/types/migrate/executor.d.ts +3 -1
- package/dist/types/migrate/hook-module.d.ts +23 -0
- package/dist/types/migrate/report.d.ts +2 -1
- package/dist/types/migrate/types.d.ts +82 -3
- package/dist/types/modes/components/agent-dashboard.d.ts +1 -1
- package/dist/types/modes/components/model-selector.d.ts +43 -0
- package/dist/types/modes/components/settings-selector.d.ts +6 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +2 -0
- package/dist/types/modes/prompt-suggestion-controller.d.ts +1 -1
- package/dist/types/modes/theme/theme.d.ts +1 -0
- package/dist/types/modes/utils/host-status.d.ts +15 -11
- package/dist/types/runtime-mcp/content-limits.d.ts +4 -0
- package/dist/types/runtime-mcp/manager.d.ts +7 -0
- package/dist/types/runtime-mcp/plugin-mcp-name-filter.d.ts +22 -0
- package/dist/types/runtime-mcp/project-host-values.d.ts +11 -5
- package/dist/types/runtime-mcp/tool-bridge.d.ts +4 -0
- package/dist/types/sdk/broker/broker-exit.d.ts +3 -3
- package/dist/types/sdk/broker/broker.d.ts +29 -2
- package/dist/types/sdk/broker/daemon-entry.d.ts +11 -1
- package/dist/types/sdk/broker/doctor-restart.d.ts +1 -1
- package/dist/types/sdk/broker/ensure.d.ts +141 -9
- package/dist/types/sdk/broker/hop.d.ts +45 -0
- package/dist/types/sdk/broker/lifecycle-ledger.d.ts +18 -10
- package/dist/types/sdk/broker/lifecycle.d.ts +22 -0
- package/dist/types/sdk/broker/lock-host-identity.d.ts +5 -0
- package/dist/types/sdk/broker/session-index.d.ts +6 -1
- package/dist/types/sdk/broker/transport.d.ts +2 -0
- package/dist/types/sdk/bus/chat-command-policy.d.ts +2 -1
- package/dist/types/sdk/bus/index.d.ts +44 -0
- package/dist/types/sdk/bus/reconciliation-store.d.ts +10 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +9 -1
- package/dist/types/sdk/bus/telegram-daemon.d.ts +2 -0
- package/dist/types/sdk/bus/threaded-render.d.ts +2 -1
- package/dist/types/sdk/cli/session-cli.d.ts +0 -1
- package/dist/types/sdk/host/control/operations.d.ts +5 -1
- package/dist/types/sdk/host/events.d.ts +4 -0
- package/dist/types/sdk/host/host.d.ts +2 -1
- package/dist/types/sdk/host/prompt-image-upload.d.ts +43 -0
- package/dist/types/sdk/host/session-runtime.d.ts +40 -8
- package/dist/types/sdk/host/surface-policy.d.ts +2 -1
- package/dist/types/sdk/lifecycle/service.d.ts +12 -0
- package/dist/types/sdk/prompt-deadline-flush.d.ts +42 -4
- package/dist/types/sdk/prompt-deadline-manager.d.ts +2 -0
- package/dist/types/sdk/prompt-status.d.ts +11 -4
- package/dist/types/sdk/protocol/adapter-validation.d.ts +10 -4
- package/dist/types/sdk/reconciliation-extensions.d.ts +1 -1
- package/dist/types/sdk/session-list.d.ts +1 -1
- package/dist/types/session/agent-session.d.ts +107 -9
- package/dist/types/session/internal/managed-session-scope.d.ts +2 -2
- package/dist/types/session/internal/managed-session-storage.d.ts +1 -1
- package/dist/types/session/internal/native-publish-outcome.d.ts +1 -1
- package/dist/types/session/messages.d.ts +5 -1
- package/dist/types/session/session-manager.d.ts +29 -3
- package/dist/types/session/startup-auth-config.d.ts +24 -2
- package/dist/types/session/streaming-output.d.ts +11 -0
- package/dist/types/session/terminal-abort.d.ts +3 -1
- package/dist/types/session-import/service.d.ts +1 -1
- package/dist/types/skill-state/workflow-mutation-guard.d.ts +20 -4
- package/dist/types/slash-commands/helpers/mcp.d.ts +5 -0
- package/dist/types/slash-commands/helpers/provider-auth-status.d.ts +8 -0
- package/dist/types/ssh/ssh-executor.d.ts +8 -1
- package/dist/types/system-prompt.d.ts +3 -2
- package/dist/types/task/executor.d.ts +19 -2
- package/dist/types/task/role-body.d.ts +11 -0
- package/dist/types/tools/ast-edit-write-path.d.ts +10 -0
- package/dist/types/tools/atomic-file-write.d.ts +9 -7
- package/dist/types/tools/awaiting-input.d.ts +28 -0
- package/dist/types/tools/bash-allowed-prefixes.d.ts +17 -0
- package/dist/types/tools/bash-skill-urls.d.ts +4 -0
- package/dist/types/tools/bash.d.ts +7 -0
- package/dist/types/tools/descriptors.d.ts +15 -2
- package/dist/types/tools/fetch.d.ts +7 -1
- package/dist/types/tools/index.d.ts +2 -0
- package/dist/types/tools/irc.d.ts +5 -3
- package/dist/types/tools/python.d.ts +1 -1
- package/dist/types/tools/report-issue.d.ts +41 -0
- package/dist/types/tools/subagent.d.ts +23 -0
- package/dist/types/tools/tmux-self-injection-guard.d.ts +2 -0
- package/dist/types/tools/ultragoal-ask-guard.d.ts +1 -1
- package/dist/types/tools/write.d.ts +2 -0
- package/dist/types/utils/file-mentions.d.ts +5 -0
- package/dist/types/utils/image-limits.d.ts +7 -0
- package/dist/types/utils/image-loading.d.ts +0 -1
- package/dist/types/utils/open.d.ts +0 -1
- package/dist/types/utils/pasted-image-loading.d.ts +1 -5
- package/dist/types/utils/prompt-suggestion.d.ts +2 -2
- package/dist/types/utils/shell-snapshot.d.ts +2 -0
- package/dist/types/utils/title-generator.d.ts +13 -3
- package/dist/types/web/scrapers/types.d.ts +8 -1
- package/dist/types/web/search/providers/codex.d.ts +6 -7
- package/dist/types/web/search/providers/insane.d.ts +7 -1
- package/dist/types/web/search/providers/searxng.d.ts +5 -0
- package/package.json +10 -9
- package/scripts/acp-conformance-agent.ts +12 -2
- package/scripts/build-binary.ts +2 -1
- package/scripts/capture-subagent-compact-panel-showcase.ts +105 -0
- package/scripts/generate-docs-index.ts +8 -1
- package/scripts/generate-sdk-operation-inventory.ts +38 -4
- package/src/async/job-manager.ts +356 -56
- package/src/async/result-formatting.ts +40 -0
- package/src/autoresearch/git.ts +9 -2
- package/src/autoresearch/prompts/prompt-setup.md +1 -1
- package/src/capability/fs.ts +58 -22
- package/src/capability/index.ts +2 -2
- package/src/capability/rule.ts +11 -2
- package/src/cli/accounts-cli.ts +176 -8
- package/src/cli/append-system-prompt.ts +12 -0
- package/src/cli/args.ts +11 -7
- package/src/cli/auth-broker-cli.ts +21 -11
- package/src/cli/customize-doctor-precedence.ts +31 -0
- package/src/cli/customize-doctor.ts +49 -39
- package/src/cli/doctor/install-repairs.ts +35 -5
- package/src/cli/fast-help.ts +1 -3
- package/src/cli/install-activation.ts +47 -4
- package/src/cli/migrate-cli.ts +19 -6
- package/src/cli/public-command-errors.ts +6 -0
- package/src/cli/root-flags.ts +2 -4
- package/src/cli/stats-cli.ts +9 -5
- package/src/cli/update-cli.ts +471 -13
- package/src/cli-ordinary.ts +7 -2
- package/src/commands/accounts.ts +10 -5
- package/src/commands/harness.ts +25 -15
- package/src/commands/migrate.ts +3 -3
- package/src/commands/sdk.ts +277 -50
- package/src/commands/ultragoal.ts +16 -8
- package/src/commit/agentic/agent.ts +6 -6
- package/src/commit/analysis/conventional.ts +14 -5
- package/src/commit/changelog/index.ts +39 -1
- package/src/commit/map-reduce/index.ts +7 -7
- package/src/commit/message.ts +10 -3
- package/src/commit/pipeline.ts +12 -12
- package/src/config/autorouting-tier-map.ts +50 -1
- package/src/config/config-file.ts +106 -3
- package/src/config/config-hot-reload-trust.ts +148 -0
- package/src/config/config-hot-reload.ts +742 -0
- package/src/config/file-lock.ts +1615 -328
- package/src/config/keybindings.ts +154 -7
- package/src/config/model-bindings-applier.ts +85 -47
- package/src/config/model-discovery-manager.ts +10 -0
- package/src/config/model-profile-activation.ts +889 -148
- package/src/config/model-registry.ts +1706 -205
- package/src/config/model-resolver.ts +52 -22
- package/src/config/models-config-schema.ts +6 -0
- package/src/config/settings-schema.ts +73 -4
- package/src/config/settings.ts +460 -24
- package/src/coordinator-mcp/policy.ts +26 -1
- package/src/coordinator-mcp/server.ts +37 -2
- package/src/crash/sanitize.ts +7 -1
- package/src/customization/import.ts +279 -8
- package/src/customization/inventory.ts +24 -8
- package/src/customization/types.ts +1 -0
- package/src/dap/client.ts +3 -2
- package/src/dap/config.ts +31 -11
- package/src/dap/defaults.json +1 -1
- package/src/dap/session.ts +161 -36
- package/src/debug/crash-diagnostics.ts +89 -6
- package/src/debug/report-bundle.ts +90 -2
- package/src/debug/system-info.ts +8 -3
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/shared/base-url.ts +21 -7
- package/src/discovery/agents-md.ts +1 -1
- package/src/discovery/builtin.ts +4 -3
- package/src/discovery/helpers.ts +25 -16
- package/src/discovery/mcp-compat.ts +120 -17
- package/src/edit/apply-patch/index.ts +12 -1
- package/src/edit/index.ts +204 -22
- package/src/edit/modes/patch.ts +214 -8
- package/src/edit/modes/replace.ts +136 -0
- package/src/eval/js/context-manager.ts +29 -3
- package/src/eval/js/worker-entry.ts +51 -18
- package/src/eval/py/executor.ts +14 -4
- package/src/eval/py/runner.py +144 -5
- package/src/eval/py/runtime.ts +44 -4
- package/src/exec/bash-executor.ts +81 -4
- package/src/exec/bash-shell-guardian.ts +4 -1
- package/src/exec/bash-shell-supervisor.ts +8 -4
- package/src/exec/isolated-shell.ts +5 -1
- package/src/exec/non-interactive-env.ts +0 -1
- package/src/export/html/index.ts +86 -6
- package/src/export/ttsr.ts +176 -1
- package/src/extensibility/custom-tools/wrapper.ts +3 -1
- package/src/extensibility/extensions/loader.ts +10 -1
- package/src/extensibility/extensions/ouroboros-ooo-bridge.ts +63 -1
- package/src/extensibility/extensions/types.ts +5 -1
- package/src/extensibility/hooks/loader.ts +10 -2
- package/src/extensibility/plugins/marketplace/fetcher.ts +2 -2
- package/src/extensibility/plugins/marketplace/manager.ts +36 -10
- package/src/extensibility/slash-commands.ts +5 -0
- package/src/gjc-runtime/gc-runtime.ts +37 -7
- package/src/gjc-runtime/launch-tmux.ts +30 -15
- package/src/gjc-runtime/launch-worktree.test.ts +148 -0
- package/src/gjc-runtime/launch-worktree.ts +101 -14
- package/src/gjc-runtime/managed-owner-admission.ts +46 -2
- package/src/gjc-runtime/ralplan-current-final.ts +294 -0
- package/src/gjc-runtime/ralplan-runtime.ts +95 -1
- package/src/gjc-runtime/session-resolution.ts +38 -6
- package/src/gjc-runtime/session-state-lock.ts +59 -14
- package/src/gjc-runtime/state-runtime.ts +23 -19
- package/src/gjc-runtime/state-writer.ts +109 -5
- package/src/gjc-runtime/tmux-sessions.ts +93 -13
- package/src/gjc-runtime/ultragoal-change-set.ts +90 -11
- package/src/gjc-runtime/ultragoal-guard.ts +9 -1
- package/src/gjc-runtime/ultragoal-runtime.ts +15 -5
- package/src/harness-control-plane/finalize.ts +11 -0
- package/src/harness-control-plane/receipt-spool.ts +105 -28
- package/src/harness-control-plane/storage.ts +124 -6
- package/src/hindsight/content.ts +116 -16
- package/src/hindsight/mental-models.ts +22 -10
- package/src/hindsight/state.ts +7 -4
- package/src/hooks/native-skill-hook.ts +17 -12
- package/src/internal-urls/artifact-protocol.ts +3 -1
- package/src/internal-urls/docs-index.generated.ts +23 -22
- package/src/internal-urls/local-protocol.ts +167 -8
- package/src/internal-urls/types.ts +2 -0
- package/src/lsp/client.ts +2 -1
- package/src/lsp/clients/biome-client.ts +2 -0
- package/src/lsp/clients/swiftlint-client.ts +2 -0
- package/src/lsp/index.ts +29 -0
- package/src/lsp/workspace-path.ts +23 -0
- package/src/main.ts +330 -92
- package/src/memories/index.ts +25 -2
- package/src/migrate/action-planner.ts +574 -2
- package/src/migrate/adapters/claude-code.ts +162 -5
- package/src/migrate/adapters/codex.ts +77 -7
- package/src/migrate/adapters/index.ts +258 -5
- package/src/migrate/adapters/opencode.ts +10 -1
- package/src/migrate/executor.ts +222 -7
- package/src/migrate/hook-module.ts +193 -0
- package/src/migrate/report.ts +63 -2
- package/src/migrate/types.ts +84 -4
- package/src/modes/DESIGN.md +51 -0
- package/src/modes/acp/acp-agent.ts +10 -1
- package/src/modes/acp/permission-mode.ts +18 -1
- package/src/modes/components/agent-dashboard.ts +20 -4
- package/src/modes/components/assistant-message.ts +55 -1
- package/src/modes/components/customization/customization-dashboard.ts +7 -0
- package/src/modes/components/customization/import-wizard.ts +29 -3
- package/src/modes/components/model-selector.ts +157 -103
- package/src/modes/components/settings-selector.ts +103 -37
- package/src/modes/components/welcome.ts +3 -1
- package/src/modes/controllers/command-controller.ts +300 -9
- package/src/modes/controllers/event-controller.ts +1 -1
- package/src/modes/controllers/extension-ui-controller.ts +31 -1
- package/src/modes/controllers/goal-mode-controller.ts +79 -10
- package/src/modes/controllers/input-controller.ts +2 -0
- package/src/modes/controllers/plan-mode-controller.ts +66 -11
- package/src/modes/controllers/runtime-mcp-command-controller.ts +7 -6
- package/src/modes/controllers/selector-controller.ts +76 -7
- package/src/modes/interactive-mode.ts +123 -4
- package/src/modes/prompt-suggestion-controller.ts +1 -1
- package/src/modes/runtime-init.ts +5 -1
- package/src/modes/theme/theme.ts +15 -0
- package/src/modes/utils/host-status.ts +21 -10
- package/src/prompts/agent-fragments/browser-aside.md +2 -2
- package/src/prompts/system/irc-incoming.md +3 -1
- package/src/prompts/tools/debug.md +1 -1
- package/src/prompts/tools/irc.md +1 -1
- package/src/prompts/tools/read.md +1 -1
- package/src/prompts/tools/report-issue.md +13 -0
- package/src/prompts/tools/task.md +1 -1
- package/src/runtime-credential-selector.ts +2 -2
- package/src/runtime-mcp/content-limits.ts +7 -0
- package/src/runtime-mcp/manager-pool.test.ts +5 -4
- package/src/runtime-mcp/manager.ts +40 -3
- package/src/runtime-mcp/oauth-flow.ts +32 -6
- package/src/runtime-mcp/plugin-mcp-name-filter.ts +62 -0
- package/src/runtime-mcp/project-host-values.ts +12 -8
- package/src/runtime-mcp/render.ts +16 -1
- package/src/runtime-mcp/tool-bridge.ts +194 -21
- package/src/runtime-mcp/transports/stdio.ts +2 -1
- package/src/sdk/broker/broker-exit.ts +10 -5
- package/src/sdk/broker/broker.ts +484 -85
- package/src/sdk/broker/daemon-entry.ts +338 -116
- package/src/sdk/broker/doctor-restart.ts +2 -1
- package/src/sdk/broker/ensure.ts +1214 -268
- package/src/sdk/broker/hop.ts +286 -0
- package/src/sdk/broker/lifecycle-ledger.ts +38 -11
- package/src/sdk/broker/lifecycle.ts +102 -6
- package/src/sdk/broker/lock-host-identity.ts +29 -0
- package/src/sdk/broker/session-index.ts +91 -16
- package/src/sdk/broker/transport.ts +17 -1
- package/src/sdk/bus/chat-command-policy.ts +16 -3
- package/src/sdk/bus/chat-daemon-control.ts +2 -2
- package/src/sdk/bus/index.ts +460 -35
- package/src/sdk/bus/reconciliation-store.ts +201 -8
- package/src/sdk/bus/session-control.ts +2 -0
- package/src/sdk/bus/slack-daemon.ts +105 -9
- package/src/sdk/bus/telegram-daemon-contract.ts +9 -1
- package/src/sdk/bus/telegram-daemon.ts +10 -2
- package/src/sdk/bus/threaded-render.ts +20 -1
- package/src/sdk/cli/session-cli.ts +23 -6
- package/src/sdk/host/control/dispatch.ts +13 -1
- package/src/sdk/host/control/operations.ts +10 -1
- package/src/sdk/host/events.ts +67 -4
- package/src/sdk/host/host.ts +8 -2
- package/src/sdk/host/prompt-image-upload.ts +438 -0
- package/src/sdk/host/sdk-surface-parity.test.ts +15 -0
- package/src/sdk/host/session-runtime.test.ts +1737 -129
- package/src/sdk/host/session-runtime.ts +684 -83
- package/src/sdk/host/surface-policy.ts +4 -0
- package/src/sdk/host/websocket-transport.lifecycle.test.ts +90 -2
- package/src/sdk/host/websocket-transport.ts +19 -7
- package/src/sdk/lifecycle/service.ts +15 -1
- package/src/sdk/prompt-deadline-flush.ts +78 -5
- package/src/sdk/prompt-deadline-manager.ts +68 -14
- package/src/sdk/prompt-status.ts +6 -4
- package/src/sdk/protocol/adapter-validation.ts +81 -12
- package/src/sdk/protocol/operation-inventory.generated.json +261 -2
- package/src/sdk/protocol/operation-registry.ts +33 -3
- package/src/sdk/reconciliation-extensions.ts +1 -0
- package/src/sdk/session-list.ts +1 -0
- package/src/sdk/session.ts +237 -97
- package/src/session/agent-session.ts +2726 -479
- package/src/session/history-storage.ts +182 -12
- package/src/session/internal/managed-session-scope.ts +173 -57
- package/src/session/internal/managed-session-storage.ts +85 -12
- package/src/session/internal/native-publish-outcome.ts +5 -1
- package/src/session/messages.ts +47 -6
- package/src/session/session-manager.ts +326 -19
- package/src/session/startup-auth-config.ts +116 -8
- package/src/session/streaming-output.ts +262 -4
- package/src/session/terminal-abort.ts +14 -2
- package/src/session-import/redact.ts +53 -2
- package/src/session-import/service.ts +1 -0
- package/src/skill-state/workflow-mutation-guard.ts +2145 -206
- package/src/slash-commands/builtin-registry.ts +21 -6
- package/src/slash-commands/helpers/credential-switch.ts +10 -5
- package/src/slash-commands/helpers/mcp.ts +11 -3
- package/src/slash-commands/helpers/provider-auth-status.ts +456 -0
- package/src/ssh/ssh-executor.ts +9 -2
- package/src/stt/recorder.ts +26 -9
- package/src/system-prompt.ts +61 -16
- package/src/task/executor.ts +115 -20
- package/src/task/index.ts +389 -175
- package/src/task/role-body.ts +84 -0
- package/src/task/token-log-mode.test.ts +162 -0
- package/src/task/token-log.ts +91 -2
- package/src/tools/archive-reader.ts +650 -37
- package/src/tools/ask.ts +1 -0
- package/src/tools/ast-edit-write-path.ts +64 -0
- package/src/tools/ast-edit.ts +18 -1
- package/src/tools/ast-grep.ts +7 -2
- package/src/tools/atomic-file-write.ts +46 -15
- package/src/tools/auto-generated-guard.ts +15 -3
- package/src/tools/awaiting-input.ts +114 -0
- package/src/tools/bash-allowed-prefixes.ts +214 -6
- package/src/tools/bash-interactive.ts +14 -2
- package/src/tools/bash-skill-urls.ts +58 -5
- package/src/tools/bash.ts +113 -26
- package/src/tools/browser/tab-worker.ts +39 -13
- package/src/tools/browser.ts +17 -7
- package/src/tools/cron.ts +10 -1
- package/src/tools/debug.ts +16 -8
- package/src/tools/descriptors.test.ts +44 -0
- package/src/tools/descriptors.ts +50 -6
- package/src/tools/eval.ts +15 -0
- package/src/tools/fetch.ts +93 -4
- package/src/tools/gh.ts +27 -12
- package/src/tools/image-gen.ts +20 -6
- package/src/tools/index.ts +2 -0
- package/src/tools/irc.ts +5 -3
- package/src/tools/monitor.ts +9 -1
- package/src/tools/output-meta.ts +74 -5
- package/src/tools/python.ts +1 -1
- package/src/tools/read.ts +26 -37
- package/src/tools/recipe/runner.ts +23 -12
- package/src/tools/render-utils.ts +2 -2
- package/src/tools/report-issue.ts +184 -0
- package/src/tools/search.ts +3 -2
- package/src/tools/ssh.ts +274 -8
- package/src/tools/subagent-render.ts +114 -12
- package/src/tools/subagent.ts +118 -5
- package/src/tools/tmux-self-injection-guard.ts +3301 -122
- package/src/tools/todo-write.ts +41 -3
- package/src/tools/tool-catalog.generated.ts +32 -4
- package/src/tools/ultragoal-ask-guard.ts +13 -1
- package/src/tools/write.ts +42 -3
- package/src/tui/tree-list.ts +15 -1
- package/src/utils/commit-message-generator.ts +12 -4
- package/src/utils/external-editor.ts +21 -7
- package/src/utils/file-mentions.ts +75 -7
- package/src/utils/git.ts +38 -7
- package/src/utils/image-limits.ts +8 -0
- package/src/utils/image-loading.ts +1 -1
- package/src/utils/open.ts +73 -4
- package/src/utils/pasted-image-loading.ts +9 -8
- package/src/utils/prompt-suggestion.ts +5 -4
- package/src/utils/shell-snapshot.ts +9 -1
- package/src/utils/title-generator.ts +72 -22
- package/src/web/scrapers/index.ts +3 -1
- package/src/web/scrapers/types.ts +8 -0
- package/src/web/scrapers/youtube.ts +3 -2
- package/src/web/search/index.ts +2 -1
- package/src/web/search/providers/codex.ts +29 -32
- package/src/web/search/providers/insane.ts +91 -28
- package/src/web/search/providers/searxng.ts +62 -10
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
export declare const MCP_MAX_CONTENT_BYTES: number;
|
|
2
|
+
export declare const MCP_MAX_IMAGES = 16;
|
|
3
|
+
export declare const MCP_MAX_IMAGE_SOURCE_DIMENSION = 8192;
|
|
4
|
+
export declare const MCP_MAX_IMAGE_SOURCE_PIXELS = 16000000;
|
|
5
|
+
export declare const MCP_MAX_IMAGE_OUTPUT_BYTES: number;
|
|
2
6
|
export declare const MCP_MAX_ERROR_BYTES: number;
|
|
3
7
|
export declare const MCP_MAX_SSE_REQUEST_MESSAGES = 1024;
|
|
4
8
|
export declare const MCP_MAX_SSE_BATCH_MESSAGES = 1024;
|
|
@@ -71,6 +71,8 @@ export interface MCPToolCatalogSnapshot {
|
|
|
71
71
|
publication: MCPToolCatalogPublication;
|
|
72
72
|
generation: number;
|
|
73
73
|
}
|
|
74
|
+
/** Drop project stdio servers unless the user/global opt-in is set. */
|
|
75
|
+
export declare function omitUnapprovedProjectStdio(configs: Record<string, MCPServerConfig>, sources: Record<string, SourceMeta>, allowProjectStdio: boolean, toolsOnly?: boolean): void;
|
|
74
76
|
/** Options for discovering and connecting to MCP servers */
|
|
75
77
|
export interface MCPDiscoverOptions {
|
|
76
78
|
/** Whether to load project-level config (default: true) */
|
|
@@ -97,6 +99,11 @@ export interface MCPDiscoverOptions {
|
|
|
97
99
|
export interface MCPManagerOptions {
|
|
98
100
|
/** Restrict this instance to tools from an explicit MCP config. */
|
|
99
101
|
toolsOnly?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Spawn stdio servers loaded from a project MCP file. Default false.
|
|
104
|
+
* User-scope servers and an explicit `--mcp-config` file are unaffected.
|
|
105
|
+
*/
|
|
106
|
+
allowUntrustedProjectStdio?: boolean;
|
|
100
107
|
/**
|
|
101
108
|
* Ceiling for the startup wait, in milliseconds. ACP lifecycle launches and
|
|
102
109
|
* plugin MCP startup use bounded caller-owned budgets; other consumers keep
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const GJC_PLUGIN_MCP_PROVIDER = "gjc-plugins";
|
|
2
|
+
/**
|
|
3
|
+
* A repository plugin MCP server must not occupy a normalized tool name that a
|
|
4
|
+
* non-plugin server already published. The whole plugin server is omitted so a
|
|
5
|
+
* sibling tool from that server is not left registered. Non-plugin collisions
|
|
6
|
+
* and the input order stay unchanged.
|
|
7
|
+
*/
|
|
8
|
+
export declare function omitPluginMcpNameShadows<T extends {
|
|
9
|
+
name: string;
|
|
10
|
+
}>(tools: readonly T[]): T[];
|
|
11
|
+
/** Normalized names of plugin tools that remain after shadow omission. */
|
|
12
|
+
export declare function survivingPluginMcpToolNames<T extends {
|
|
13
|
+
name: string;
|
|
14
|
+
}>(tools: readonly T[]): string[];
|
|
15
|
+
/**
|
|
16
|
+
* The required-name list is the plugin tools that survived the name filter,
|
|
17
|
+
* plus requested names this batch did not omit. An omitted plugin tool, including
|
|
18
|
+
* a sibling that does not itself collide, is not required.
|
|
19
|
+
*/
|
|
20
|
+
export declare function retainPluginMcpMandatoryNames(tools: readonly {
|
|
21
|
+
name: string;
|
|
22
|
+
}[], requested: readonly string[]): string[];
|
|
@@ -2,14 +2,20 @@
|
|
|
2
2
|
* Host-value policy for MCP config that comes from an untrusted project file.
|
|
3
3
|
*
|
|
4
4
|
* User mcp.json and an explicit `--mcp-config` file may still substitute
|
|
5
|
-
* secret-named environment variables and run `!` shell commands.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* into server env or headers, and
|
|
5
|
+
* secret-named environment variables and run `!` shell commands. Any
|
|
6
|
+
* project-level source, including providers other than native `.gjc/mcp.json`
|
|
7
|
+
* and repo-root `mcp.json`, uses the same sensitive-name rule as project
|
|
8
|
+
* `ssh.json`: do not copy those host values into server env or headers, and
|
|
9
|
+
* do not execute `!`.
|
|
9
10
|
*/
|
|
10
11
|
import type { SourceMeta } from "../capability/types";
|
|
11
12
|
export declare function nativeMcpSource(level: "user" | "project", filePath: string): SourceMeta;
|
|
12
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* True when this server was loaded from untrusted project MCP config.
|
|
15
|
+
* Every project-level provider is untrusted, including providers other than
|
|
16
|
+
* native `.gjc/mcp.json` and repo-root `mcp.json`. User scope and a tools-only
|
|
17
|
+
* load stay on the previous path.
|
|
18
|
+
*/
|
|
13
19
|
export declare function isUntrustedProjectMcpSource(source: SourceMeta | undefined, toolsOnly: boolean): boolean;
|
|
14
20
|
export type ProjectHostValueDecision = {
|
|
15
21
|
action: "resolve";
|
|
@@ -72,6 +72,8 @@ export declare class MCPTool implements CustomTool<TSchema, MCPToolDetails> {
|
|
|
72
72
|
readonly mcpToolName: string;
|
|
73
73
|
/** Server name */
|
|
74
74
|
readonly mcpServerName: string;
|
|
75
|
+
/** True when this tool came from a repository GJC plugin bundle. */
|
|
76
|
+
readonly gjcPluginBundle: boolean;
|
|
75
77
|
private connection;
|
|
76
78
|
invalidateForSessionControl(): void;
|
|
77
79
|
/** Create MCPTool instances for all tools from an MCP server lease/connection. */
|
|
@@ -98,6 +100,8 @@ export declare class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetai
|
|
|
98
100
|
readonly mcpToolName: string;
|
|
99
101
|
/** Server name */
|
|
100
102
|
readonly mcpServerName: string;
|
|
103
|
+
/** True when this tool came from a repository GJC plugin bundle. */
|
|
104
|
+
readonly gjcPluginBundle: boolean;
|
|
101
105
|
invalidateForSessionControl(): void;
|
|
102
106
|
/** Create DeferredMCPTool instances for all tools from an MCP server */
|
|
103
107
|
static fromTools(serverName: string, tools: MCPToolDefinition[], getConnection: () => Promise<MCPServerConnection>, source?: SourceMeta, reconnect?: MCPReconnect, options?: MCPToolOptions): DeferredMCPTool[];
|
|
@@ -4,7 +4,7 @@ export type { BrokerExitWriterTestBarrier } from "./broker-exit-writer-worker";
|
|
|
4
4
|
export declare function setBrokerExitWriterBarrierForTest(barrier?: BrokerExitWriterTestBarrier): void;
|
|
5
5
|
export type BrokerExitMode = "owned-root" | "lost-root";
|
|
6
6
|
export type BrokerFenceReason = "suspect-unpublished" | "observation-ambiguous" | "heartbeat-ambiguous";
|
|
7
|
-
export type BrokerExitReason = "ownership-fence-expired" | "publication-liveness-timeout" | "heartbeat-renewal-blocked" | "restart-committed" | "shutdown-request" | "startup-failure" | "signal";
|
|
7
|
+
export type BrokerExitReason = "ownership-fence-expired" | "publication-liveness-timeout" | "heartbeat-renewal-blocked" | "restart-committed" | "shutdown-request" | "startup-failure" | "abandoned" | "signal";
|
|
8
8
|
export type BrokerStopRequest = {
|
|
9
9
|
kind: "shutdown-request";
|
|
10
10
|
} | {
|
|
@@ -29,7 +29,7 @@ export interface BrokerExitRecord {
|
|
|
29
29
|
export interface BrokerStartupExitRecord {
|
|
30
30
|
version: 1;
|
|
31
31
|
mode: "startup";
|
|
32
|
-
reason: "startup-deadline" | "startup-signal" | "startup-lock-blocked";
|
|
32
|
+
reason: "startup-deadline" | "startup-signal" | "startup-lock-blocked" | "startup-lock-unavailable";
|
|
33
33
|
fenceReason: null;
|
|
34
34
|
fencedForMs: 0;
|
|
35
35
|
uptimeMs: number;
|
|
@@ -38,7 +38,7 @@ export interface BrokerStartupExitRecord {
|
|
|
38
38
|
exitCode: 1 | 130 | 143;
|
|
39
39
|
timeoutMs: number | null;
|
|
40
40
|
writtenAt: number;
|
|
41
|
-
/** For lock
|
|
41
|
+
/** For lock refusal reasons: path to the transition or lock that blocked startup. */
|
|
42
42
|
blockingLockPath?: string;
|
|
43
43
|
}
|
|
44
44
|
export type BrokerStartupExitWriteStatus = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NativeDirectoryTreeSnapshot } from "@gajae-code/natives";
|
|
2
2
|
import type { ModelProfileErrorDetails } from "../../config/model-profile-contract";
|
|
3
3
|
import type { TaskArtifactOwnerDeletionEvidence, TaskArtifactOwnerRetirementContinuation } from "../../session/task-artifact-owner-codec";
|
|
4
4
|
import { type SdkHostModelResolver } from "../host/model-pin";
|
|
@@ -26,6 +26,21 @@ export interface BrokerSettings {
|
|
|
26
26
|
masterCapabilityVerifier?: MasterCapabilityVerifier;
|
|
27
27
|
/** Grace before an orphaned spawn child closes; schema-bounded in production. */
|
|
28
28
|
masterOrphanGraceMs?: number;
|
|
29
|
+
/**
|
|
30
|
+
* Grace before a broker nobody is left to use exits on its own. The clock only
|
|
31
|
+
* runs while the index proves no live session host and no open spawn authority,
|
|
32
|
+
* so a broker whose client died without closing exits instead of holding its
|
|
33
|
+
* port, its publication, and its lock for the life of the machine.
|
|
34
|
+
*/
|
|
35
|
+
abandonedGraceMs?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Whether this broker may end itself once nobody is left to use it. Only the
|
|
38
|
+
* detached autostart entry point enables this: an operator-supervised
|
|
39
|
+
* `gjc sdk broker run` service owns its own lifetime, and its supervisor reads an
|
|
40
|
+
* owned-root completion as a clean exit, so self-reaping would quietly retire a
|
|
41
|
+
* service that was meant to keep serving.
|
|
42
|
+
*/
|
|
43
|
+
reapWhenAbandoned?: boolean;
|
|
29
44
|
/** Host model resolver override for lifecycle tests and embedders. */
|
|
30
45
|
resolveModelPin?: SdkHostModelResolver;
|
|
31
46
|
/**
|
|
@@ -62,10 +77,12 @@ type ResolvedBrokerSettings = {
|
|
|
62
77
|
spawnSubstrateProvider?: SpawnSubstrateProvider;
|
|
63
78
|
spawnPromptLayer?: SpawnPromptLayer;
|
|
64
79
|
masterOrphanGraceMs: number;
|
|
80
|
+
abandonedGraceMs: number;
|
|
81
|
+
reapWhenAbandoned: boolean;
|
|
65
82
|
restartRequestId?: string;
|
|
66
83
|
};
|
|
67
84
|
export declare function resolveBrokerPackageGeneration(): string;
|
|
68
|
-
export type BrokerErrorCode = "idempotency_conflict" | "terminal_uncertain" | "broker_restarting" | "unavailable" | "endpoint_stale" | "resource_gone" | "invalid_input" | "spawn_failed" | "ready_then_exited" | "endpoint_unreadable" | "startup_admission_timeout" | "startup_admission_refused" | "readiness_timeout" | "worktree_preparation_timeout" | "dependency_preparation_timeout" | "worktree_in_use" | "incarnation_unavailable" | "close_refused" | "not_found" | "live_session" | "cleanup_pending" | (string & {});
|
|
85
|
+
export type BrokerErrorCode = "idempotency_conflict" | "legacy_lifecycle_ambiguous" | "terminal_uncertain" | "broker_restarting" | "unavailable" | "endpoint_stale" | "resource_gone" | "invalid_input" | "spawn_failed" | "ready_then_exited" | "endpoint_unreadable" | "startup_admission_timeout" | "startup_admission_refused" | "readiness_timeout" | "worktree_preparation_timeout" | "dependency_preparation_timeout" | "worktree_in_use" | "incarnation_unavailable" | "close_refused" | "not_found" | "live_session" | "cleanup_pending" | (string & {});
|
|
69
86
|
export type BrokerCleanupIdentity = {
|
|
70
87
|
dev: string;
|
|
71
88
|
ino: string;
|
|
@@ -283,6 +300,7 @@ export declare function reapStaleBrokerLockArtifacts(input: {
|
|
|
283
300
|
now?: number;
|
|
284
301
|
graceMs?: number;
|
|
285
302
|
pidAlive?: (pid: number) => boolean;
|
|
303
|
+
processIncarnation?: (pid: number) => string | undefined;
|
|
286
304
|
}): Promise<BrokerLockArtifactReapResult>;
|
|
287
305
|
export interface StartupAdmissionTiming {
|
|
288
306
|
now(): number;
|
|
@@ -372,6 +390,8 @@ export declare class Broker {
|
|
|
372
390
|
runStartup<T>(queueWaitMs: number, timing: StartupAdmissionTiming, task: (admittedAt: number) => Promise<T>): Promise<StartupAdmissionResult<T>>;
|
|
373
391
|
start(): Promise<BrokerDiscovery>;
|
|
374
392
|
get ownsDiscovery(): boolean;
|
|
393
|
+
/** Whether this broker completed its initial retained discovery publication. */
|
|
394
|
+
get hasPublishedDiscovery(): boolean;
|
|
375
395
|
get completion(): Promise<void>;
|
|
376
396
|
/** Why this broker completed, or null while it is still running. */
|
|
377
397
|
get terminalExit(): {
|
|
@@ -412,6 +432,13 @@ export declare function setTerminalPersistenceHookForTest(broker: Broker, hook:
|
|
|
412
432
|
export declare function setAmbiguityGraceForTest(broker: Broker, graceMs: number | undefined): void;
|
|
413
433
|
/** Test-only hook for shortening the startup lock-artifact reap bound. */
|
|
414
434
|
export declare function setLockArtifactGraceForTest(broker: Broker, graceMs: number | undefined): void;
|
|
435
|
+
/** Test-only barriers for exercising the cross-process broker-lock reclaim fence. */
|
|
436
|
+
export declare function setBrokerLockReclaimHooksForTest(broker: Broker, hooks: {
|
|
437
|
+
beforeQuarantine?: () => Promise<void>;
|
|
438
|
+
onContended?: () => void;
|
|
439
|
+
} | undefined): void;
|
|
440
|
+
/** Test-only hook for shortening the bounded abandonment grace. */
|
|
441
|
+
export declare function setAbandonedGraceForTest(broker: Broker, graceMs: number | undefined): void;
|
|
415
442
|
/** Test-only hook for shortening the bounded liveness deadline. */
|
|
416
443
|
export declare function setLivenessGraceForTest(broker: Broker, graceMs: number | undefined): void;
|
|
417
444
|
/** Test-only hook for shortening the bounded wait before a deferred managed close is queued. */
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type * as childProcess from "node:child_process";
|
|
1
2
|
import { type BrokerDiscovery } from "./discovery";
|
|
3
|
+
import { type BrokerLaunchHandoff, type BrokerLaunchResult } from "./ensure";
|
|
2
4
|
export interface AuthorizedBrokerSuccessorOptions {
|
|
3
5
|
agentDir: string;
|
|
4
6
|
requestId: string;
|
|
@@ -11,10 +13,14 @@ export type AuthorizedBrokerSuccessorResult = {
|
|
|
11
13
|
discovery: BrokerDiscovery;
|
|
12
14
|
} | {
|
|
13
15
|
kind: "spawned";
|
|
16
|
+
child: childProcess.ChildProcess;
|
|
17
|
+
realBrokerPid: number | undefined;
|
|
18
|
+
realBrokerIncarnation: string | undefined;
|
|
19
|
+
handoff: BrokerLaunchHandoff | undefined;
|
|
14
20
|
discovery: BrokerDiscovery;
|
|
15
21
|
} | {
|
|
16
22
|
kind: "refused";
|
|
17
|
-
reason: "deadline_elapsed" | "intent_not_committed" | "spawn_failed" | "spawn_exited_before_publication" | "publication_timeout";
|
|
23
|
+
reason: "deadline_elapsed" | "intent_not_committed" | "spawn_failed" | "spawn_exited_before_publication" | "publication_timeout" | "startup_lock_unavailable";
|
|
18
24
|
detail?: string;
|
|
19
25
|
};
|
|
20
26
|
/**
|
|
@@ -30,6 +36,10 @@ export type AuthorizedBrokerSuccessorResult = {
|
|
|
30
36
|
* has been released.
|
|
31
37
|
*/
|
|
32
38
|
export declare function launchAuthorizedBrokerSuccessor(options: AuthorizedBrokerSuccessorOptions): Promise<AuthorizedBrokerSuccessorResult>;
|
|
39
|
+
/** Test hook: retries exact cleanup before mapping a launch error to refusal. */
|
|
40
|
+
export declare function refuseFailedBrokerLaunchForTest(launched: BrokerLaunchResult): Promise<Extract<AuthorizedBrokerSuccessorResult, {
|
|
41
|
+
kind: "refused";
|
|
42
|
+
}>>;
|
|
33
43
|
/**
|
|
34
44
|
* Positive OS-confirmed absence of the exact prior owner, distinguished from
|
|
35
45
|
* every merely-inconclusive outcome (permission denial, PID reuse ambiguity,
|
|
@@ -44,7 +44,7 @@ export type DoctorBrokerRestartOutcome = {
|
|
|
44
44
|
kind: "successor_refused";
|
|
45
45
|
requestId: string;
|
|
46
46
|
oldOwner: BrokerRestartOwnerIdentity;
|
|
47
|
-
reason: "deadline_elapsed" | "intent_not_committed" | "spawn_failed" | "spawn_exited_before_publication" | "publication_timeout";
|
|
47
|
+
reason: "deadline_elapsed" | "intent_not_committed" | "spawn_failed" | "spawn_exited_before_publication" | "publication_timeout" | "startup_lock_unavailable";
|
|
48
48
|
detail?: string;
|
|
49
49
|
};
|
|
50
50
|
export declare function prepareDoctorBrokerRestart(client: SdkClient, discovery: BrokerDiscovery, options: DoctorBrokerRestartOptions & {
|
|
@@ -1,9 +1,102 @@
|
|
|
1
1
|
import { type ChildProcess } from "node:child_process";
|
|
2
2
|
import type { FileHandle } from "node:fs/promises";
|
|
3
|
+
import { type ProjectEnvSnapshot } from "@gajae-code/utils/env-file";
|
|
3
4
|
import { type FileLockOptions } from "../../config/file-lock";
|
|
5
|
+
import { type BrokerStartupExitRecord } from "./broker-exit";
|
|
4
6
|
import { type BrokerDiscovery } from "./discovery";
|
|
7
|
+
import { type ProcessIncarnationObservation } from "./process-incarnation";
|
|
5
8
|
import { type SdkInternalSpawnCommand } from "./runtime";
|
|
6
9
|
import { type BrokerStartupFailureMarker } from "./startup-failure";
|
|
10
|
+
/** Result of launching a broker through a hop/trampoline or as an exact fixture child. */
|
|
11
|
+
export interface BrokerSpawnResult {
|
|
12
|
+
/** The launcher process, or the exact broker process for fixture leases. */
|
|
13
|
+
process: ChildProcess;
|
|
14
|
+
/** The real broker's pid (from the launcher reply or exact child). */
|
|
15
|
+
realBrokerPid: number | undefined;
|
|
16
|
+
/** Kernel identity returned by the POSIX trampoline when available. */
|
|
17
|
+
realBrokerIncarnation?: string;
|
|
18
|
+
handoff?: BrokerLaunchHandoff;
|
|
19
|
+
}
|
|
20
|
+
export interface BrokerLaunchHandoff {
|
|
21
|
+
release(): Promise<void>;
|
|
22
|
+
terminate(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Typed error returned when a Windows broker hop fails.
|
|
26
|
+
* The hop is mandatory on Windows for broker detachment; failure is unrecoverable.
|
|
27
|
+
*/
|
|
28
|
+
export declare class BrokerHopError extends Error {
|
|
29
|
+
readonly code = "broker_hop_failed";
|
|
30
|
+
readonly hopExitCode: number | null;
|
|
31
|
+
readonly hopStdout: string;
|
|
32
|
+
readonly hopStderr: string;
|
|
33
|
+
readonly reason: string;
|
|
34
|
+
constructor(fields: {
|
|
35
|
+
exitCode: number | null;
|
|
36
|
+
stdout: string;
|
|
37
|
+
stderr: string;
|
|
38
|
+
reason: string;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
export declare function resolveBrokerLaunchMode(platform: NodeJS.Platform, initiator: "discovery" | "fixture-lease"): "windows-hop" | "posix-trampoline" | "darwin-trampoline" | "direct";
|
|
42
|
+
/** What the parent sends the Windows hop. The broker environment is never serialized here. */
|
|
43
|
+
export interface BrokerHopMessage {
|
|
44
|
+
command: {
|
|
45
|
+
file: string;
|
|
46
|
+
args: string[];
|
|
47
|
+
};
|
|
48
|
+
cwd?: string;
|
|
49
|
+
/** Path (never an inherited fd number) the hop opens for the broker's stderr. */
|
|
50
|
+
stderrLogPath?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface BrokerLaunchResult {
|
|
53
|
+
process: ChildProcess;
|
|
54
|
+
realBrokerPid: number | undefined;
|
|
55
|
+
realBrokerIncarnation?: string;
|
|
56
|
+
error: Error | undefined;
|
|
57
|
+
handoff?: BrokerLaunchHandoff;
|
|
58
|
+
}
|
|
59
|
+
/** Test hook: proves a stuck launcher is terminated at its deadline. */
|
|
60
|
+
export declare function awaitBrokerLauncherForTest(child: ChildProcess, timeoutMs: number, onTimeout?: () => void): Promise<{
|
|
61
|
+
kind: "closed";
|
|
62
|
+
} | {
|
|
63
|
+
kind: "timeout";
|
|
64
|
+
terminated: boolean;
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* Windows only: launch the broker through the internal hop and await its reply.
|
|
68
|
+
*
|
|
69
|
+
* `taskkill /T /F` walks ParentProcessId, so a broker spawned directly by the client
|
|
70
|
+
* dies with it even when detached. The hop spawns the broker and exits after
|
|
71
|
+
* the parent acknowledges the complete reply, leaving the broker without a
|
|
72
|
+
* live parent in the client's tree. The broker inherits the environment set on
|
|
73
|
+
* the hop, never passed on the command line; stderr is passed as a path because
|
|
74
|
+
* a parent fd number does not exist inside the hop.
|
|
75
|
+
*/
|
|
76
|
+
export declare function launchBrokerViaHop(message: BrokerHopMessage, options: {
|
|
77
|
+
env: NodeJS.ProcessEnv;
|
|
78
|
+
cwd?: string;
|
|
79
|
+
timeoutMs?: number;
|
|
80
|
+
}): Promise<BrokerLaunchResult>;
|
|
81
|
+
/** Parses the hop's single-line pid/incarnation reply into broker identity or a typed error. */
|
|
82
|
+
export declare function parseBrokerHopReply(code: number | null, stdout: string, spawnError?: Error, stderr?: string): {
|
|
83
|
+
realBrokerPid: number | undefined;
|
|
84
|
+
realBrokerIncarnation?: string;
|
|
85
|
+
error: Error | undefined;
|
|
86
|
+
};
|
|
87
|
+
/** POSIX only: the trampoline holds its exact broker child until the publication decision. */
|
|
88
|
+
export declare function launchBrokerViaPosixTrampoline(agentDir: string, options: {
|
|
89
|
+
env: NodeJS.ProcessEnv;
|
|
90
|
+
cwd?: string;
|
|
91
|
+
stderrFd?: number;
|
|
92
|
+
timeoutMs?: number;
|
|
93
|
+
retainChildUntilPublication?: boolean;
|
|
94
|
+
}): Promise<BrokerLaunchResult>;
|
|
95
|
+
export declare function parseBrokerTrampolineReply(code: number | null, stdout: string, spawnError?: Error): {
|
|
96
|
+
realBrokerPid: number | undefined;
|
|
97
|
+
realBrokerIncarnation?: string;
|
|
98
|
+
error: Error | undefined;
|
|
99
|
+
};
|
|
7
100
|
export declare function isBrokerGenerationCompatible(discovery: BrokerDiscovery | null): boolean;
|
|
8
101
|
/**
|
|
9
102
|
* A live incumbent stops being reusable once the runtime image it launches
|
|
@@ -29,14 +122,16 @@ export interface EnsureBrokerSettings {
|
|
|
29
122
|
*/
|
|
30
123
|
env?: NodeJS.ProcessEnv;
|
|
31
124
|
}
|
|
32
|
-
export interface
|
|
125
|
+
export interface BrokerStartupLockOptions {
|
|
126
|
+
/** Stop waiting for the startup lock at this absolute wall-clock deadline. */
|
|
127
|
+
deadlineAt?: number;
|
|
33
128
|
onAcquired?: () => void;
|
|
34
129
|
onContended?: () => void;
|
|
35
130
|
}
|
|
36
131
|
/**
|
|
37
132
|
* Test-only phase observation for detached broker startup regressions. The
|
|
38
|
-
*
|
|
39
|
-
* ownership or error handling when the
|
|
133
|
+
* directory is opt-in through a trusted operator environment and never affects
|
|
134
|
+
* broker ownership or error handling when the seam is absent.
|
|
40
135
|
*/
|
|
41
136
|
export declare function emitBrokerStartupTestSignal(signal: string): Promise<void>;
|
|
42
137
|
/**
|
|
@@ -48,7 +143,7 @@ export declare function emitBrokerStartupTestSignal(signal: string): Promise<voi
|
|
|
48
143
|
*/
|
|
49
144
|
export declare const BROKER_DISCOVERY_BUDGET: {
|
|
50
145
|
readonly staleRetirementMs: 5000;
|
|
51
|
-
readonly startupLockWaitMs:
|
|
146
|
+
readonly startupLockWaitMs: number;
|
|
52
147
|
readonly publicationMs: 15000;
|
|
53
148
|
/** What the startup fence grants its holder: retirement plus one publication attempt. */
|
|
54
149
|
readonly fenceOperationMs: number;
|
|
@@ -94,7 +189,7 @@ declare function acquireSpawnLock(agentDir: string, options?: SpawnLockOptions):
|
|
|
94
189
|
* The parent-held spawn lock prevents ordinary stampedes; this second fence keeps
|
|
95
190
|
* startup single-flight if that detached child's launcher dies and its lock is reclaimed.
|
|
96
191
|
*/
|
|
97
|
-
export declare function withBrokerStartupLock<T>(agentDir: string, operation: (deadline: number) => Promise<T>,
|
|
192
|
+
export declare function withBrokerStartupLock<T>(agentDir: string, operation: (deadline: number) => Promise<T>, options?: BrokerStartupLockOptions): Promise<T>;
|
|
98
193
|
/**
|
|
99
194
|
* Tail of the detached broker's stderr folded into a discovery failure.
|
|
100
195
|
*
|
|
@@ -138,13 +233,27 @@ export interface StartedFixtureBroker {
|
|
|
138
233
|
interface BrokerOwner {
|
|
139
234
|
stop(): Promise<void>;
|
|
140
235
|
canReuse(discovery: BrokerDiscovery | null): boolean;
|
|
141
|
-
markReady(discovery: BrokerDiscovery): boolean
|
|
142
|
-
setTarget(pid: number, incarnation: string): void;
|
|
236
|
+
markReady(discovery: BrokerDiscovery): Promise<boolean>;
|
|
143
237
|
}
|
|
144
238
|
interface ReapTiming {
|
|
145
239
|
gracefulMs: number;
|
|
146
240
|
killVerifyMs: number;
|
|
147
241
|
}
|
|
242
|
+
type DetachedBrokerSignal = (pid: number, brokerIncarnation: string, signal: NodeJS.Signals) => boolean;
|
|
243
|
+
/**
|
|
244
|
+
* Reap a broker launched by a short-lived hop or trampoline. The launcher has
|
|
245
|
+
* already exited, so its ChildProcess carries no signal to await: the real broker
|
|
246
|
+
* is targeted by the reported pid, and every poll is fenced by incarnation.
|
|
247
|
+
* Signals use a pinned OS process handle; unsupported platforms fail closed.
|
|
248
|
+
*/
|
|
249
|
+
interface PinnedBrokerProcess {
|
|
250
|
+
readonly incarnation: string;
|
|
251
|
+
signalRoot(signal: number): boolean;
|
|
252
|
+
}
|
|
253
|
+
/** Reap a failed launch through its pending trampoline lease or retained broker handle. */
|
|
254
|
+
export declare function reapFailedBrokerLaunch(launch: Pick<BrokerLaunchResult, "process" | "realBrokerPid" | "realBrokerIncarnation" | "handoff">): Promise<void>;
|
|
255
|
+
/** Reap the direct broker child held by the startup trampoline before publication. */
|
|
256
|
+
export declare function reapBrokerTrampolineChild(child: ChildProcess, brokerPid: number | undefined, brokerIncarnation?: string): Promise<void>;
|
|
148
257
|
type BrokerOwnerIdentity = Pick<BrokerDiscovery, "ownerId" | "pid" | "incarnation">;
|
|
149
258
|
/** Start client teardown, but never await it past the retirement operation's absolute deadline. */
|
|
150
259
|
export declare function closeBrokerClientBeforeDeadline(client: {
|
|
@@ -173,6 +282,10 @@ export declare function startFixtureBrokerWithLeaseForTest(settings: EnsureBroke
|
|
|
173
282
|
* Test-only launch surface for topology fixtures. It accepts an already-resolved
|
|
174
283
|
* command and retains the exact spawned child; no production selection path
|
|
175
284
|
* reaches this function.
|
|
285
|
+
*
|
|
286
|
+
* Note: This function does NOT use the Windows broker hop. Fixtures are test-only
|
|
287
|
+
* and do not require Windows process-tree detachment; the fixture needs to retain
|
|
288
|
+
* exact ownership of the actual broker process to control its stdio[3] control pipe.
|
|
176
289
|
*/
|
|
177
290
|
export declare function startFixtureBrokerCommandWithLeaseForTest(command: FixtureBrokerCommand): StartedFixtureBrokerCommand;
|
|
178
291
|
/** Test hook: returns a stop handle for the detached broker this process spawned. */
|
|
@@ -183,11 +296,30 @@ export declare function brokerOwnerForTest(agentDir: string): BrokerOwner | unde
|
|
|
183
296
|
/** Test hook: verifies the complete broker owner identity used during stale retirement. */
|
|
184
297
|
export declare function brokerOwnerIdentityMatchesForTest(left: BrokerOwnerIdentity | null, right: BrokerOwnerIdentity): boolean;
|
|
185
298
|
/** Test hook: drives the detached-broker reap on a controllable child surface. */
|
|
186
|
-
export declare function reapSpawnedBrokerForTest(child: ChildProcess, timing?: ReapTiming): Promise<void>;
|
|
299
|
+
export declare function reapSpawnedBrokerForTest(child: ChildProcess, realBrokerPid?: number, brokerIncarnation?: string, timing?: ReapTiming): Promise<void>;
|
|
300
|
+
/** Test hook: verifies detached PID reaping fences every signal and poll by incarnation. */
|
|
301
|
+
export declare function reapDetachedBrokerPidForTest(pid: number, brokerIncarnation: string | undefined, timing?: ReapTiming, observe?: (pid: number) => ProcessIncarnationObservation, signalProcess?: DetachedBrokerSignal): Promise<void>;
|
|
302
|
+
/** Test hook: verifies a pinned process handle matches before sending a signal. */
|
|
303
|
+
export declare function signalPinnedBrokerProcessForTest(reference: PinnedBrokerProcess | null, expectedIncarnation: string, signal: NodeJS.Signals): boolean;
|
|
304
|
+
/** Test hook: verifies platforms without identity-bound signaling fail closed. */
|
|
305
|
+
export declare function signalDetachedBrokerProcessForTest(pid: number, brokerIncarnation: string, signal: NodeJS.Signals, platform: NodeJS.Platform): boolean;
|
|
306
|
+
/** Test hook: the signal directory accepted from this environment and snapshot. */
|
|
307
|
+
export declare function trustedBrokerSignalDirectoryForTest(env: NodeJS.ProcessEnv, snapshot: ProjectEnvSnapshot | readonly ProjectEnvSnapshot[]): string | undefined;
|
|
187
308
|
/** Test hook: resolves the complete broker environment without spawning. */
|
|
188
309
|
export declare function brokerSpawnEnvironmentForTest(command: SdkInternalSpawnCommand, override?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
189
310
|
/** Test hook: installs an exact controllable owner to exercise replacement fencing. */
|
|
190
|
-
export declare function registerBrokerOwnerForTest(agentDir: string, child: ChildProcess, timing?: ReapTiming): BrokerOwner;
|
|
311
|
+
export declare function registerBrokerOwnerForTest(agentDir: string, child: ChildProcess, realBrokerPid?: number, brokerIncarnation?: string, timing?: ReapTiming): BrokerOwner;
|
|
191
312
|
/** Test hook: exercises the same trusted-marker reason reconstruction used by ensureBroker. */
|
|
192
313
|
export declare function brokerStartupFailureReasonForTest(marker: BrokerStartupFailureMarker | undefined): string;
|
|
314
|
+
/** Test hook: verifies typed hop errors survive ensureBroker's spawn-failure mapping. */
|
|
315
|
+
export declare function brokerSpawnFailureErrorForTest(spawnError: Error): Error;
|
|
316
|
+
/** Test hook: preserves and reaps a verified broker reply captured at the hop deadline. */
|
|
317
|
+
export declare function brokerHopTimeoutResultForTest(hop: ChildProcess, stdout: string, stderr: string, timeoutMs: number, launcherTerminated: boolean): Promise<BrokerLaunchResult>;
|
|
318
|
+
/** Test hook: preserves and reaps a verified POSIX trampoline reply at its deadline. */
|
|
319
|
+
export declare function brokerTrampolineTimeoutResultForTest(trampoline: ChildProcess, stdout: string, timeoutMs: number, trampolineTerminated: boolean): Promise<BrokerLaunchResult>;
|
|
320
|
+
/** Test hook: verifies broker exit evidence takes precedence over the launcher's status. */
|
|
321
|
+
export declare function brokerStartupExitStatusForTest(childExitCode: number | null, childSignal: NodeJS.Signals | null, startupExitRecord: Pick<BrokerStartupExitRecord, "exitCode" | "signal"> | undefined, startupFailureMarker: Pick<BrokerStartupFailureMarker, "exitCode" | "signal"> | undefined): {
|
|
322
|
+
exitCode: number | null;
|
|
323
|
+
signal: string | null;
|
|
324
|
+
};
|
|
193
325
|
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as childProcess from "node:child_process";
|
|
2
|
+
import type * as stream from "node:stream";
|
|
3
|
+
import type { Process } from "@gajae-code/natives";
|
|
4
|
+
/** Handoff protocol frames written to the trampoline's stdin. */
|
|
5
|
+
export declare const BROKER_HANDOFF_ACKNOWLEDGEMENT = "GJC_BROKER_HANDOFF_ACK\n";
|
|
6
|
+
export declare const BROKER_HANDOFF_COMMIT = "GJC_BROKER_HANDOFF_COMMIT\n";
|
|
7
|
+
export declare const BROKER_HANDOFF_ABORT = "GJC_BROKER_HANDOFF_ABORT\n";
|
|
8
|
+
/**
|
|
9
|
+
* Backstop for a retained trampoline whose parent never sends a decision. It must
|
|
10
|
+
* outlive the parent's own broker discovery deadline (which is derived from the
|
|
11
|
+
* publication budget and can double across a guarded retry), otherwise the
|
|
12
|
+
* trampoline reaps the broker first and the parent misreports its own discovery
|
|
13
|
+
* timeout as an "exited before discovery" startup failure.
|
|
14
|
+
*/
|
|
15
|
+
export declare const BROKER_HANDOFF_DECISION_TIMEOUT_MS = 120000;
|
|
16
|
+
/**
|
|
17
|
+
* Windows broker hop: spawns the real broker with detached:true and reports its pid.
|
|
18
|
+
*
|
|
19
|
+
* The hop is needed because a broker spawned with detached:true IS still killed when the
|
|
20
|
+
* parent process tree is terminated (e.g., by taskkill /T /F on Windows). Using an
|
|
21
|
+
* intermediate hop process that exits after spawning the real broker allows the broker
|
|
22
|
+
* to survive, because the hop's parent (the initiating client) can be killed without
|
|
23
|
+
* affecting the broker (the hop's pid is no longer valid).
|
|
24
|
+
*
|
|
25
|
+
* Invoked by gjc internals only. Usage:
|
|
26
|
+
* gjc internal broker-hop <json-encoded-args>
|
|
27
|
+
*
|
|
28
|
+
* Exits with code 0 after writing the broker pid/incarnation to stdout and
|
|
29
|
+
* receiving the parent's acknowledgement. If stdin closes first, it terminates
|
|
30
|
+
* the pinned broker and exits with code 1.
|
|
31
|
+
*/
|
|
32
|
+
export declare function runBrokerHopFromArgv(argv: string[]): Promise<void>;
|
|
33
|
+
type BrokerHopWriteCallback = (error?: Error | null) => void;
|
|
34
|
+
type BrokerHopWriter = (chunk: string, callback: BrokerHopWriteCallback) => void;
|
|
35
|
+
type BrokerHopAcknowledger = () => Promise<boolean>;
|
|
36
|
+
export declare function writeBrokerHopReplyForTest(child: childProcess.ChildProcess, reference: Process, pid: number, write: BrokerHopWriter, waitForAcknowledgement?: BrokerHopAcknowledger): Promise<{
|
|
37
|
+
kind: "written";
|
|
38
|
+
} | {
|
|
39
|
+
kind: "failed";
|
|
40
|
+
reason: string;
|
|
41
|
+
}>;
|
|
42
|
+
export declare function waitForBrokerHandoffAcknowledgement(input: stream.Readable): Promise<boolean>;
|
|
43
|
+
/** Wait for a validated identity ACK followed by the parent's publication decision. */
|
|
44
|
+
export declare function waitForBrokerHandoffDecision(input: stream.Readable, timeoutMs?: number): Promise<"commit" | "abort">;
|
|
45
|
+
export {};
|
|
@@ -144,19 +144,27 @@ export declare class LifecycleLedger {
|
|
|
144
144
|
findByOperationKey(operationKey: string, fingerprint?: string): LifecycleLedgerEntry | undefined;
|
|
145
145
|
findAnyByOperationKey(operationKey: string): LifecycleLedgerEntry | undefined;
|
|
146
146
|
/**
|
|
147
|
-
* Live
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
147
|
+
* Live legacy rows predate the operation/key index. Their opaque identities
|
|
148
|
+
* cannot establish that a different target is safe, so callers must reject
|
|
149
|
+
* rather than create a second admission. A fresh session.create may ignore
|
|
150
|
+
* final legacy rows: exact legacy identities are still resolved before this
|
|
151
|
+
* check, and uncertain rows retain their session-scoped fences.
|
|
152
|
+
*
|
|
153
|
+
* A session-targeted request passes `sessionTarget` to ignore terminal legacy
|
|
154
|
+
* rows that record only other sessions, unless the row is the caller's key
|
|
155
|
+
* reused across targets (`keyReuseIdentities`). Terminal rows recording the
|
|
156
|
+
* target or no session, uncertain rows, and live rows keep the fence because
|
|
157
|
+
* they cannot prove the requested target is unrelated.
|
|
156
158
|
*/
|
|
157
159
|
hasLegacyIdentity(excludedIdentities?: ReadonlySet<string>, options?: {
|
|
158
|
-
|
|
160
|
+
ignoreFinalRows?: boolean;
|
|
161
|
+
sessionTarget?: {
|
|
162
|
+
sessionId: string;
|
|
163
|
+
keyReuseIdentities: ReadonlySet<string>;
|
|
164
|
+
};
|
|
159
165
|
}): boolean;
|
|
166
|
+
/** Sessions recorded by terminal legacy rows, for deriving key-reuse identities. */
|
|
167
|
+
terminalLegacySessionIds(): Set<string>;
|
|
160
168
|
migrateIdentity(from: string, to: string, metadata: {
|
|
161
169
|
operationKey: string;
|
|
162
170
|
fingerprint: string;
|
|
@@ -133,6 +133,28 @@ export type SessionLifecycleLaunchRequest = SessionLifecycleLaunchRequestBase &
|
|
|
133
133
|
coordinatorSidecarSigningKey?: undefined;
|
|
134
134
|
});
|
|
135
135
|
export declare function readSessionLifecycleLaunchRequest(value: string | undefined, now?: number): SessionLifecycleLaunchRequest;
|
|
136
|
+
/**
|
|
137
|
+
* Validates the optional per-session `env`/`unsetEnv` pair (#6735). Returns
|
|
138
|
+
* null when either is malformed so the caller fails the launch closed.
|
|
139
|
+
*/
|
|
140
|
+
export declare function lifecycleSessionEnv(input: {
|
|
141
|
+
env?: unknown;
|
|
142
|
+
unsetEnv?: unknown;
|
|
143
|
+
}): {
|
|
144
|
+
env?: Record<string, string>;
|
|
145
|
+
unsetEnv?: string[];
|
|
146
|
+
} | null;
|
|
147
|
+
/**
|
|
148
|
+
* Composes the inherited part of a lifecycle session host's environment:
|
|
149
|
+
* drops the process-local master capability, every `unsetEnv` name, and any
|
|
150
|
+
* inherited name an explicit per-session `env` entry replaces (case-folded on
|
|
151
|
+
* Windows so `Path` and `PATH` never both reach the child), then layers the
|
|
152
|
+
* per-session `env` on top. Broker-issued `GJC_*` keys are applied after this.
|
|
153
|
+
*/
|
|
154
|
+
export declare function lifecycleSessionHostBaseEnv(inherited: NodeJS.ProcessEnv | Readonly<Record<string, string | undefined>>, launch: {
|
|
155
|
+
env?: Readonly<Record<string, string>>;
|
|
156
|
+
unsetEnv?: readonly string[];
|
|
157
|
+
}): Record<string, string>;
|
|
136
158
|
type CleanupEvidence = BrokerCleanupEvidence;
|
|
137
159
|
export declare function validateBrokerModelPresetSync(agentDir: string, requestedProfile: string): string | BrokerResponse;
|
|
138
160
|
export declare function validateBrokerModelPresetForTest(agentDir: string, requestedProfile: string): string | BrokerResponse;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type FileLockOptions } from "../../config/file-lock";
|
|
1
2
|
import { SDK_STATE_VERSION, SESSION_INDEX_EVENT_VERSION } from "./state-version";
|
|
2
3
|
export type SessionIndexEventType = "host_registered" | "host_heartbeat" | "host_unregistered" | "lifecycle_started" | "lifecycle_terminal" | "session_closed" | "session_deleted" | "record_reconciled";
|
|
3
4
|
export type SessionActivityState = "active" | "idle";
|
|
@@ -182,10 +183,14 @@ export declare const SESSION_HEARTBEAT_INTERVAL_MS = 60000;
|
|
|
182
183
|
export declare const DEAD_HOST_HEARTBEAT_SILENCE_MS: number;
|
|
183
184
|
export declare const DEFAULT_SESSION_RETENTION_MAX_AGE_MS: number;
|
|
184
185
|
export declare const DEFAULT_SESSION_RETENTION_MAX_ROWS = 25000;
|
|
186
|
+
/** Bound ordinary bootstrap waits; authorized doctor successors may use the full prepared window. */
|
|
187
|
+
export declare function sessionIndexStartupLockOptions(deadline: number, signal?: AbortSignal, policy?: "ordinary" | "authorized-successor"): FileLockOptions;
|
|
188
|
+
/** One elapsed budget for queueing, probing and every reacquisition in a pass. */
|
|
189
|
+
export declare const SESSION_HEARTBEAT_CHECKPOINT_BUDGET_MS = 15000;
|
|
185
190
|
export declare class SessionIndex {
|
|
186
191
|
#private;
|
|
187
192
|
constructor(agentDir: string, policy?: RetentionPolicy, observationDeps?: SessionIndexObservationDeps);
|
|
188
|
-
open(): Promise<this>;
|
|
193
|
+
open(options?: FileLockOptions): Promise<this>;
|
|
189
194
|
replay(): Promise<void>;
|
|
190
195
|
/**
|
|
191
196
|
* Polling-path refresh (#4689): when both index files carry the exact change
|
|
@@ -6,6 +6,8 @@ export declare class BrokerTransport {
|
|
|
6
6
|
#private;
|
|
7
7
|
constructor(broker: Broker, token: string, port?: number);
|
|
8
8
|
get port(): number;
|
|
9
|
+
/** Sockets a client holds open right now; the broker outlives every one of them. */
|
|
10
|
+
get clientCount(): number;
|
|
9
11
|
start(): Promise<number>;
|
|
10
12
|
stop(): Promise<void>;
|
|
11
13
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { type AdapterValidationError } from "../protocol/adapter-validation";
|
|
1
2
|
import { type Adapter, type OperationKind } from "../protocol/operation-registry";
|
|
2
3
|
export type ChatTransport = Extract<Adapter, "telegram" | "discord" | "slack">;
|
|
3
4
|
export type ChatOperationDisposition = "allowed" | "unsupported_on_chat";
|
|
4
5
|
export interface ChatCommandError {
|
|
5
|
-
code: "unsupported_on_chat" | "secret_input_forbidden";
|
|
6
|
+
code: "unsupported_on_chat" | "secret_input_forbidden" | "ultrafast_tier_forbidden" | AdapterValidationError["code"];
|
|
6
7
|
message: string;
|
|
7
8
|
}
|
|
8
9
|
export type ChatCommandDecision = {
|