@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
|
@@ -3,9 +3,16 @@ import * as fs from "node:fs/promises";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { logger, resolveEquivalentPath } from "@gajae-code/utils";
|
|
5
5
|
import { nativeProcessBindings } from "@gajae-code/utils/native-process";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
describeRetainedLockTransition,
|
|
8
|
+
FILE_LOCK_ORPHAN_TRANSITION_ADOPTION_AGE_MS,
|
|
9
|
+
type FileLockOptions,
|
|
10
|
+
isFileLockAcquireTimeout,
|
|
11
|
+
withFileLock,
|
|
12
|
+
} from "../../config/file-lock";
|
|
7
13
|
import { repo } from "../../utils/git";
|
|
8
14
|
import { endpointIncarnation } from "./endpoint-authority";
|
|
15
|
+
import { brokerLockHostIdentity } from "./lock-host-identity";
|
|
9
16
|
import { processIncarnation } from "./process-incarnation";
|
|
10
17
|
import {
|
|
11
18
|
assertSupportedSessionIndexEventVersion,
|
|
@@ -574,6 +581,7 @@ function projectIdentity(
|
|
|
574
581
|
ambiguous: boolean,
|
|
575
582
|
now: number,
|
|
576
583
|
probedIncarnations?: ReadonlyMap<string, string | undefined>,
|
|
584
|
+
skipOsProcessProbes = false,
|
|
577
585
|
): IndexedSession {
|
|
578
586
|
const { latest, heartbeat } = state;
|
|
579
587
|
const terminal = isTerminalEvent(latest);
|
|
@@ -582,7 +590,7 @@ function projectIdentity(
|
|
|
582
590
|
latest.hostUnregisteredReason === "process_exited" || latest.hostUnregisteredReason === "detached_idle"
|
|
583
591
|
? latest.hostUnregisteredReason
|
|
584
592
|
: undefined;
|
|
585
|
-
const pidAlive = alive(latest.pid);
|
|
593
|
+
const pidAlive = !skipOsProcessProbes && alive(latest.pid);
|
|
586
594
|
// Liveness evidence is host-written: a checkpointed heartbeat, or the
|
|
587
595
|
// `host_registered` event the host appended itself. Counting registration
|
|
588
596
|
// closes the up-to-one-interval window where a just-registered session
|
|
@@ -602,7 +610,7 @@ function projectIdentity(
|
|
|
602
610
|
// costing a powershell.exe spawn per stale registration on Windows.
|
|
603
611
|
const probeKey = `${latest.sessionId}\u0000${latest.endpointGeneration}\u0000${latest.pid}`;
|
|
604
612
|
const currentIncarnation =
|
|
605
|
-
recordedIncarnation === undefined || !pidAlive
|
|
613
|
+
skipOsProcessProbes || recordedIncarnation === undefined || !pidAlive
|
|
606
614
|
? undefined
|
|
607
615
|
: probedIncarnations !== undefined
|
|
608
616
|
? probedIncarnations.get(probeKey)
|
|
@@ -654,7 +662,9 @@ function reduceEvents(
|
|
|
654
662
|
agentDir: string,
|
|
655
663
|
probedIncarnations?: ReadonlyMap<string, string | undefined>,
|
|
656
664
|
sessionIds?: ReadonlySet<string>,
|
|
665
|
+
options: { readonly skipOsProcessProbes?: boolean } = {},
|
|
657
666
|
): SessionIndexProjection {
|
|
667
|
+
const skipOsProcessProbes = options.skipOsProcessProbes === true;
|
|
658
668
|
// Resolved once: the fence-row check runs per root, and only this side of the
|
|
659
669
|
// comparison is ours to normalize.
|
|
660
670
|
const agentDirIdentity = resolveEquivalentPath(agentDir);
|
|
@@ -741,7 +751,8 @@ function reduceEvents(
|
|
|
741
751
|
const fencing = fencingRoots.get(sessionId);
|
|
742
752
|
const unresolved = unresolvedRoots.get(sessionId);
|
|
743
753
|
const ambiguous = (fencing?.size ?? 0) > 1;
|
|
744
|
-
for (const state of states)
|
|
754
|
+
for (const state of states)
|
|
755
|
+
identities.push(projectIdentity(state, ambiguous, now, probedIncarnations, skipOsProcessProbes));
|
|
745
756
|
const defaultAuthority = preferredIdentity(states);
|
|
746
757
|
if (defaultAuthority === undefined || defaultAuthority.latest.type === "session_deleted") continue;
|
|
747
758
|
let authority = defaultAuthority;
|
|
@@ -754,14 +765,42 @@ function reduceEvents(
|
|
|
754
765
|
const survivingAuthority = onlyRoot ? preferredIdentity(onlyRoot) : undefined;
|
|
755
766
|
if (survivingAuthority !== undefined) authority = survivingAuthority;
|
|
756
767
|
}
|
|
757
|
-
sessions.push(projectIdentity(authority, ambiguous, now, probedIncarnations));
|
|
768
|
+
sessions.push(projectIdentity(authority, ambiguous, now, probedIncarnations, skipOsProcessProbes));
|
|
758
769
|
}
|
|
759
770
|
return { identities, sessions };
|
|
760
771
|
}
|
|
761
772
|
|
|
762
773
|
// Global launch bursts may queue behind legitimate long index transactions. Keep
|
|
763
774
|
// this bounded at one minute while the shared lock's exact dead-owner recovery runs.
|
|
764
|
-
const SESSION_INDEX_LOCK_OPTIONS = {
|
|
775
|
+
const SESSION_INDEX_LOCK_OPTIONS = {
|
|
776
|
+
retries: 600,
|
|
777
|
+
retryDelayMs: 100,
|
|
778
|
+
orphanTransitionAgeMs: FILE_LOCK_ORPHAN_TRANSITION_ADOPTION_AGE_MS,
|
|
779
|
+
} as const;
|
|
780
|
+
// Leave one retry interval beyond the transition's safe-adoption age so a fresh
|
|
781
|
+
// ownerless transition can be reclaimed during ordinary startup.
|
|
782
|
+
const SESSION_INDEX_STARTUP_LOCK_WAIT_MS =
|
|
783
|
+
FILE_LOCK_ORPHAN_TRANSITION_ADOPTION_AGE_MS + SESSION_INDEX_LOCK_OPTIONS.retryDelayMs * 2;
|
|
784
|
+
|
|
785
|
+
/** Bound ordinary bootstrap waits; authorized doctor successors may use the full prepared window. */
|
|
786
|
+
export function sessionIndexStartupLockOptions(
|
|
787
|
+
deadline: number,
|
|
788
|
+
signal?: AbortSignal,
|
|
789
|
+
policy: "ordinary" | "authorized-successor" = "ordinary",
|
|
790
|
+
): FileLockOptions {
|
|
791
|
+
const boundedDeadline =
|
|
792
|
+
policy === "authorized-successor"
|
|
793
|
+
? deadline
|
|
794
|
+
: Math.min(deadline, performance.now() + SESSION_INDEX_STARTUP_LOCK_WAIT_MS);
|
|
795
|
+
return {
|
|
796
|
+
...SESSION_INDEX_LOCK_OPTIONS,
|
|
797
|
+
retries: Math.min(
|
|
798
|
+
SESSION_INDEX_LOCK_OPTIONS.retries,
|
|
799
|
+
Math.max(1, Math.ceil((boundedDeadline - performance.now()) / SESSION_INDEX_LOCK_OPTIONS.retryDelayMs)),
|
|
800
|
+
),
|
|
801
|
+
...(signal === undefined ? {} : { signal }),
|
|
802
|
+
};
|
|
803
|
+
}
|
|
765
804
|
|
|
766
805
|
/**
|
|
767
806
|
* Observation window for one locked index transaction (#4544). This never times
|
|
@@ -811,7 +850,7 @@ const SESSION_INDEX_REPLAY_FRESHNESS_MS = 2_000;
|
|
|
811
850
|
*/
|
|
812
851
|
const SESSION_HEARTBEAT_CHECKPOINT_ATTEMPTS = 4;
|
|
813
852
|
/** One elapsed budget for queueing, probing and every reacquisition in a pass. */
|
|
814
|
-
const SESSION_HEARTBEAT_CHECKPOINT_BUDGET_MS = 15_000;
|
|
853
|
+
export const SESSION_HEARTBEAT_CHECKPOINT_BUDGET_MS = 15_000;
|
|
815
854
|
const STALE_OBSERVATION: unique symbol = Symbol("stale-heartbeat-observation");
|
|
816
855
|
/** Maximum distinct live identity probes admitted by one public status query. */
|
|
817
856
|
const SESSION_GENERATION_PROBE_LIMIT = 32;
|
|
@@ -822,13 +861,26 @@ const SESSION_GENERATION_PROBE_LIMIT = 32;
|
|
|
822
861
|
* is named in a slow-operation warning when it holds the lock beyond the
|
|
823
862
|
* observation window and (b) the lock budget cannot silently drift per call
|
|
824
863
|
* site.
|
|
864
|
+
*
|
|
865
|
+
* Every acquisition also carries this installation's host identity.
|
|
866
|
+
* `staleLockSnapshot` treats a host-qualified owner as foreign when the acquirer
|
|
867
|
+
* omits `ownerHostId`, so a same-host process that died holding the lock is never
|
|
868
|
+
* reclaimed and broker startup burns its whole retry budget. Identity is applied
|
|
869
|
+
* under the options a caller passed for budget and cancellation, so startup,
|
|
870
|
+
* heartbeat, and ordinary index transactions share one reclaim rule: a proven-dead
|
|
871
|
+
* same-host owner can be recovered, and a live or cross-host owner cannot.
|
|
825
872
|
*/
|
|
826
|
-
function
|
|
873
|
+
async function sessionIndexLockOptions(agentDir: string, options: FileLockOptions): Promise<FileLockOptions> {
|
|
874
|
+
return { ...options, ...(await brokerLockHostIdentity(agentDir)) };
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
async function withSessionIndexLock<T>(
|
|
827
878
|
operation: string,
|
|
828
879
|
agentDir: string,
|
|
829
880
|
callback: () => Promise<T>,
|
|
830
881
|
options: FileLockOptions = SESSION_INDEX_LOCK_OPTIONS,
|
|
831
882
|
): Promise<T> {
|
|
883
|
+
const lockOptions = await sessionIndexLockOptions(agentDir, options);
|
|
832
884
|
return withFileLock(
|
|
833
885
|
logFor(agentDir),
|
|
834
886
|
async () => {
|
|
@@ -848,7 +900,7 @@ function withSessionIndexLock<T>(
|
|
|
848
900
|
clearTimeout(note);
|
|
849
901
|
}
|
|
850
902
|
},
|
|
851
|
-
|
|
903
|
+
lockOptions,
|
|
852
904
|
);
|
|
853
905
|
}
|
|
854
906
|
function isValidSnapshot(snapshot: unknown): snapshot is { indexSeq: number; events: SessionIndexEvent[] } {
|
|
@@ -1183,7 +1235,7 @@ export class SessionIndex {
|
|
|
1183
1235
|
});
|
|
1184
1236
|
return promise;
|
|
1185
1237
|
}
|
|
1186
|
-
async open(): Promise<this> {
|
|
1238
|
+
async open(options: FileLockOptions = SESSION_INDEX_LOCK_OPTIONS): Promise<this> {
|
|
1187
1239
|
const indexPath = path.resolve(logFor(this.#agentDir));
|
|
1188
1240
|
let group = SessionIndex.#openGroups.get(indexPath);
|
|
1189
1241
|
if (!group || group.closed) {
|
|
@@ -1193,7 +1245,7 @@ export class SessionIndex {
|
|
|
1193
1245
|
}
|
|
1194
1246
|
await group.promise;
|
|
1195
1247
|
await SessionIndex.#enqueue(indexPath, () =>
|
|
1196
|
-
withSessionIndexLock("replay", this.#agentDir, () => this.#replayUnderLock()),
|
|
1248
|
+
withSessionIndexLock("replay", this.#agentDir, () => this.#replayUnderLock(), options),
|
|
1197
1249
|
);
|
|
1198
1250
|
return this;
|
|
1199
1251
|
}
|
|
@@ -2408,7 +2460,17 @@ export class SessionIndex {
|
|
|
2408
2460
|
// so startup readiness never overtakes lock release.
|
|
2409
2461
|
return await checkpoint();
|
|
2410
2462
|
} catch (error) {
|
|
2411
|
-
if (signal.aborted && error === signal.reason)
|
|
2463
|
+
if (signal.aborted && error === signal.reason) {
|
|
2464
|
+
// The budget abort can beat the lock layer's own exhaustion. Asking
|
|
2465
|
+
// directly keeps a retained removal transition from being reported as
|
|
2466
|
+
// an idle cycle: the blocked-renewal caller needs the reason and path.
|
|
2467
|
+
const blocked = await describeRetainedLockTransition(
|
|
2468
|
+
path.resolve(logFor(this.#agentDir)),
|
|
2469
|
+
await sessionIndexLockOptions(this.#agentDir, SESSION_INDEX_LOCK_OPTIONS),
|
|
2470
|
+
);
|
|
2471
|
+
if (blocked) throw blocked;
|
|
2472
|
+
return 0;
|
|
2473
|
+
}
|
|
2412
2474
|
if (
|
|
2413
2475
|
performance.now() >= deadline &&
|
|
2414
2476
|
isFileLockAcquireTimeout(error) &&
|
|
@@ -2455,14 +2517,25 @@ export class SessionIndex {
|
|
|
2455
2517
|
// revalidation that never probes the OS under the lock: the next pass
|
|
2456
2518
|
// re-probes from scratch.
|
|
2457
2519
|
const probed = new Map<string, string | undefined>();
|
|
2458
|
-
|
|
2520
|
+
// This projection is only used to select structurally eligible rows; its
|
|
2521
|
+
// `live` field is not consumed here. Skip OS probes during projection so
|
|
2522
|
+
// the deadline-aware loop below performs only the required observations.
|
|
2523
|
+
const candidates = reduceEvents(this.#events, now, this.#agentDir, undefined, undefined, {
|
|
2524
|
+
skipOsProcessProbes: true,
|
|
2525
|
+
}).sessions;
|
|
2526
|
+
if (signal.aborted || performance.now() >= deadline) return 0;
|
|
2527
|
+
for (const row of candidates) {
|
|
2528
|
+
if (signal.aborted || performance.now() >= deadline) return 0;
|
|
2459
2529
|
if (!isSessionAuthorityEligible(row) || row.terminal || row.terminalUncertain) continue;
|
|
2460
2530
|
if (row.lastHeartbeatAt !== undefined && now - row.lastHeartbeatAt < SESSION_HEARTBEAT_INTERVAL_MS)
|
|
2461
2531
|
continue;
|
|
2462
|
-
if (!alive(row.pid)) continue;
|
|
2463
2532
|
const recordedIncarnation = row.hostIncarnation ?? row.processIncarnation;
|
|
2464
2533
|
if (recordedIncarnation === undefined) continue;
|
|
2465
|
-
|
|
2534
|
+
if (!alive(row.pid)) continue;
|
|
2535
|
+
if (signal.aborted || performance.now() >= deadline) return 0;
|
|
2536
|
+
const currentIncarnation = processIncarnation(row.pid);
|
|
2537
|
+
if (signal.aborted || performance.now() >= deadline) return 0;
|
|
2538
|
+
probed.set(`${row.sessionId}\u0000${row.endpointGeneration}\u0000${row.pid}`, currentIncarnation);
|
|
2466
2539
|
}
|
|
2467
2540
|
const probedAt = performance.now();
|
|
2468
2541
|
if (signal.aborted || probedAt >= deadline) return 0;
|
|
@@ -2492,7 +2565,9 @@ export class SessionIndex {
|
|
|
2492
2565
|
if (performance.now() - probedAt > SESSION_INDEX_REPLAY_FRESHNESS_MS) return STALE_OBSERVATION;
|
|
2493
2566
|
if (this.#corruptSuffix) return 0;
|
|
2494
2567
|
const events: SessionIndexEvent[] = [];
|
|
2495
|
-
const rows = reduceEvents(this.#events, now, this.#agentDir, probed
|
|
2568
|
+
const rows = reduceEvents(this.#events, now, this.#agentDir, probed, undefined, {
|
|
2569
|
+
skipOsProcessProbes: true,
|
|
2570
|
+
}).sessions;
|
|
2496
2571
|
for (const row of rows) {
|
|
2497
2572
|
if (!isSessionAuthorityEligible(row) || row.terminal || row.terminalUncertain) continue;
|
|
2498
2573
|
if (row.lastHeartbeatAt !== undefined && now - row.lastHeartbeatAt < SESSION_HEARTBEAT_INTERVAL_MS)
|
|
@@ -66,6 +66,7 @@ export class BrokerTransport {
|
|
|
66
66
|
readonly #requestedPort: number;
|
|
67
67
|
#server: Bun.Server<undefined> | null = null;
|
|
68
68
|
#port = 0;
|
|
69
|
+
readonly #clients = new Set<ServerWebSocket<unknown>>();
|
|
69
70
|
readonly #shutdownBackpressured = new WeakSet<ServerWebSocket<unknown>>();
|
|
70
71
|
#shutdownRequested = false;
|
|
71
72
|
constructor(broker: Broker, token: string, port = 0) {
|
|
@@ -77,6 +78,10 @@ export class BrokerTransport {
|
|
|
77
78
|
if (!this.#server) throw new Error("Broker transport is not running");
|
|
78
79
|
return this.#port;
|
|
79
80
|
}
|
|
81
|
+
/** Sockets a client holds open right now; the broker outlives every one of them. */
|
|
82
|
+
get clientCount(): number {
|
|
83
|
+
return this.#clients.size;
|
|
84
|
+
}
|
|
80
85
|
async start(): Promise<number> {
|
|
81
86
|
if (this.#server) return this.#port;
|
|
82
87
|
this.#server = Bun.serve({
|
|
@@ -95,8 +100,13 @@ export class BrokerTransport {
|
|
|
95
100
|
websocket: {
|
|
96
101
|
maxPayloadLength: MAX_BROKER_JSON_FRAME_BYTES * 2,
|
|
97
102
|
open: socket => {
|
|
103
|
+
this.#clients.add(socket);
|
|
98
104
|
send(socket, { type: "broker_hello", protocolVersion: PROTOCOL_VERSION });
|
|
99
105
|
},
|
|
106
|
+
close: socket => {
|
|
107
|
+
this.#clients.delete(socket);
|
|
108
|
+
this.#shutdownBackpressured.delete(socket);
|
|
109
|
+
},
|
|
100
110
|
message: (socket, message) => void this.#handleMessage(socket, message),
|
|
101
111
|
drain: socket => {
|
|
102
112
|
if (this.#shutdownBackpressured.delete(socket)) this.#scheduleStopAfterShutdownResponse();
|
|
@@ -147,7 +157,13 @@ export class BrokerTransport {
|
|
|
147
157
|
sendError(socket, frame.id, "invalid_input", "idempotencyKey must be a string");
|
|
148
158
|
return;
|
|
149
159
|
}
|
|
150
|
-
|
|
160
|
+
// After initial publication, the owner retains the authenticated endpoint
|
|
161
|
+
// so it can stop this exact broker even after discovery is lost. Before
|
|
162
|
+
// publication readiness, shutdown remains unavailable.
|
|
163
|
+
if (
|
|
164
|
+
!this.#broker.ownsDiscovery &&
|
|
165
|
+
!(frame.operation === "broker.shutdown" && this.#broker.hasPublishedDiscovery)
|
|
166
|
+
) {
|
|
151
167
|
sendError(socket, frame.id, "unavailable", "broker publication is unavailable");
|
|
152
168
|
return;
|
|
153
169
|
}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type AdapterValidationError,
|
|
3
|
+
validateAdapterControl,
|
|
4
|
+
validateAdapterSecretFields,
|
|
5
|
+
} from "../protocol/adapter-validation";
|
|
2
6
|
import { type Adapter, OPERATIONS, type Operation, type OperationKind } from "../protocol/operation-registry";
|
|
3
7
|
|
|
4
8
|
export type ChatTransport = Extract<Adapter, "telegram" | "discord" | "slack">;
|
|
5
9
|
export type ChatOperationDisposition = "allowed" | "unsupported_on_chat";
|
|
6
10
|
|
|
7
11
|
export interface ChatCommandError {
|
|
8
|
-
code: "unsupported_on_chat" | "secret_input_forbidden";
|
|
12
|
+
code: "unsupported_on_chat" | "secret_input_forbidden" | "ultrafast_tier_forbidden" | AdapterValidationError["code"];
|
|
9
13
|
message: string;
|
|
10
14
|
}
|
|
11
15
|
|
|
@@ -57,12 +61,21 @@ export function authorizeChatOperation(transport: ChatTransport, request: ChatOp
|
|
|
57
61
|
candidate => candidate.kind === request.kind && candidate.sdkId === request.operation,
|
|
58
62
|
);
|
|
59
63
|
if (!operation) return unsupported();
|
|
60
|
-
|
|
64
|
+
const secretValidation = validateAdapterSecretFields(
|
|
65
|
+
operation.sdkId,
|
|
66
|
+
(request.input ?? {}) as Record<string, unknown>,
|
|
67
|
+
);
|
|
68
|
+
if (secretValidation?.code === "secret_field_forbidden") {
|
|
61
69
|
return {
|
|
62
70
|
ok: false,
|
|
63
71
|
error: { code: "secret_input_forbidden", message: "Secret configuration input is forbidden on chat." },
|
|
64
72
|
};
|
|
65
73
|
}
|
|
74
|
+
if (secretValidation) return { ok: false, error: secretValidation };
|
|
75
|
+
if (operation.kind === "control") {
|
|
76
|
+
const invalid = validateAdapterControl(operation.sdkId, (request.input ?? {}) as Record<string, unknown>);
|
|
77
|
+
if (invalid) return { ok: false, error: invalid };
|
|
78
|
+
}
|
|
66
79
|
return CHAT_OPERATION_POLICY[transport][operation.id] === "allowed" ? { ok: true } : unsupported();
|
|
67
80
|
}
|
|
68
81
|
|
|
@@ -141,8 +141,8 @@ export type ChatDaemonAction = "stop" | "reload";
|
|
|
141
141
|
* crashes, recovery, and attachment retirement cannot replay ambiguous work.
|
|
142
142
|
*/
|
|
143
143
|
export const CHAT_DAEMON_GENERATIONS: Readonly<Record<ChatDaemonKind, number>> = {
|
|
144
|
-
discord:
|
|
145
|
-
slack:
|
|
144
|
+
discord: 85,
|
|
145
|
+
slack: 93,
|
|
146
146
|
};
|
|
147
147
|
|
|
148
148
|
export function chatDaemonGeneration(kind: ChatDaemonKind): number {
|