@aexol/spectral 0.8.2 → 0.8.6
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 +82 -55
- package/README.md +80 -82
- package/dist/agent/agents.d.ts +37 -0
- package/dist/agent/agents.d.ts.map +1 -0
- package/dist/agent/index.d.ts +29 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +11 -11
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/commands/bind.d.ts +12 -0
- package/dist/commands/bind.d.ts.map +1 -0
- package/dist/commands/login-oauth.d.ts +15 -0
- package/dist/commands/login-oauth.d.ts.map +1 -0
- package/dist/commands/login.d.ts +37 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/logout.d.ts +8 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/serve.d.ts +112 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +5 -2
- package/dist/commands/unbind.d.ts +8 -0
- package/dist/commands/unbind.d.ts.map +1 -0
- package/dist/config.d.ts +49 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +1 -1
- package/dist/designer/guidelines.d.ts +23 -0
- package/dist/designer/guidelines.d.ts.map +1 -0
- package/dist/designer/index.d.ts +26 -0
- package/dist/designer/index.d.ts.map +1 -0
- package/dist/designer/index.js +9 -9
- package/dist/designer/philosophies.d.ts +33 -0
- package/dist/designer/philosophies.d.ts.map +1 -0
- package/dist/designer/skills.d.ts +27 -0
- package/dist/designer/skills.d.ts.map +1 -0
- package/dist/designer/systems.d.ts +36 -0
- package/dist/designer/systems.d.ts.map +1 -0
- package/dist/extensions/aexol-mcp.d.ts +25 -0
- package/dist/extensions/aexol-mcp.d.ts.map +1 -0
- package/dist/extensions/aexol-mcp.js +12 -12
- package/dist/extensions/kanban-bridge.d.ts +24 -0
- package/dist/extensions/kanban-bridge.d.ts.map +1 -0
- package/dist/extensions/kanban-bridge.js +3 -3
- package/dist/extensions/openrouter-attribution.d.ts +12 -0
- package/dist/extensions/openrouter-attribution.d.ts.map +1 -0
- package/dist/extensions/openrouter-attribution.js +2 -2
- package/dist/extensions/spectral-vision-fallback.d.ts +23 -0
- package/dist/extensions/spectral-vision-fallback.d.ts.map +1 -0
- package/dist/extensions/spectral-vision-fallback.js +32 -23
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/mcp/agent-dir.d.ts +3 -0
- package/dist/mcp/agent-dir.d.ts.map +1 -0
- package/dist/mcp/commands.d.ts +9 -0
- package/dist/mcp/commands.d.ts.map +1 -0
- package/dist/mcp/commands.js +1 -1
- package/dist/mcp/config.d.ts +78 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +15 -15
- package/dist/mcp/consent-manager.d.ts +14 -0
- package/dist/mcp/consent-manager.d.ts.map +1 -0
- package/dist/mcp/direct-tools.d.ts +11 -0
- package/dist/mcp/direct-tools.d.ts.map +1 -0
- package/dist/mcp/errors.d.ts +100 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/glimpse-ui.d.ts +10 -0
- package/dist/mcp/glimpse-ui.d.ts.map +1 -0
- package/dist/mcp/host-html-template.d.ts +17 -0
- package/dist/mcp/host-html-template.d.ts.map +1 -0
- package/dist/mcp/host-html-template.js +3 -3
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +15 -13
- package/dist/mcp/init.d.ts +10 -0
- package/dist/mcp/init.d.ts.map +1 -0
- package/dist/mcp/init.js +4 -4
- package/dist/mcp/lifecycle.d.ts +30 -0
- package/dist/mcp/lifecycle.d.ts.map +1 -0
- package/dist/mcp/logger.d.ts +52 -0
- package/dist/mcp/logger.d.ts.map +1 -0
- package/dist/mcp/mcp-auth-flow.d.ts +69 -0
- package/dist/mcp/mcp-auth-flow.d.ts.map +1 -0
- package/dist/mcp/mcp-auth.d.ts +100 -0
- package/dist/mcp/mcp-auth.d.ts.map +1 -0
- package/dist/mcp/mcp-callback-server.d.ts +40 -0
- package/dist/mcp/mcp-callback-server.d.ts.map +1 -0
- package/dist/mcp/mcp-oauth-provider.d.ts +101 -0
- package/dist/mcp/mcp-oauth-provider.d.ts.map +1 -0
- package/dist/mcp/mcp-oauth-provider.js +1 -1
- package/dist/mcp/metadata-cache.d.ts +32 -0
- package/dist/mcp/metadata-cache.d.ts.map +1 -0
- package/dist/mcp/npx-resolver.d.ts +7 -0
- package/dist/mcp/npx-resolver.d.ts.map +1 -0
- package/dist/mcp/oauth-handler.d.ts +19 -0
- package/dist/mcp/oauth-handler.d.ts.map +1 -0
- package/dist/mcp/onboarding-state.d.ts +13 -0
- package/dist/mcp/onboarding-state.d.ts.map +1 -0
- package/dist/mcp/proxy-modes.d.ts +12 -0
- package/dist/mcp/proxy-modes.d.ts.map +1 -0
- package/dist/mcp/proxy-modes.js +2 -2
- package/dist/mcp/resource-tools.d.ts +2 -0
- package/dist/mcp/resource-tools.d.ts.map +1 -0
- package/dist/mcp/sampling-handler.d.ts +16 -0
- package/dist/mcp/sampling-handler.d.ts.map +1 -0
- package/dist/mcp/server-manager.d.ts +42 -0
- package/dist/mcp/server-manager.d.ts.map +1 -0
- package/dist/mcp/server-manager.js +2 -2
- package/dist/mcp/state-getter.d.ts +14 -0
- package/dist/mcp/state-getter.d.ts.map +1 -0
- package/dist/mcp/state-getter.js +21 -0
- package/dist/mcp/state.d.ts +41 -0
- package/dist/mcp/state.d.ts.map +1 -0
- package/dist/mcp/tool-metadata.d.ts +11 -0
- package/dist/mcp/tool-metadata.d.ts.map +1 -0
- package/dist/mcp/tool-registrar.d.ts +9 -0
- package/dist/mcp/tool-registrar.d.ts.map +1 -0
- package/dist/mcp/tool-registrar.js +1 -1
- package/dist/mcp/types.d.ts +263 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/ui-resource-handler.d.ts +10 -0
- package/dist/mcp/ui-resource-handler.d.ts.map +1 -0
- package/dist/mcp/ui-server.d.ts +37 -0
- package/dist/mcp/ui-server.d.ts.map +1 -0
- package/dist/mcp/ui-server.js +1 -1
- package/dist/mcp/ui-session.d.ts +27 -0
- package/dist/mcp/ui-session.d.ts.map +1 -0
- package/dist/mcp/ui-stream-types.d.ts +197 -0
- package/dist/mcp/ui-stream-types.d.ts.map +1 -0
- package/dist/mcp/ui-stream-types.js +5 -5
- package/dist/mcp/utils.d.ts +17 -0
- package/dist/mcp/utils.d.ts.map +1 -0
- package/dist/mcp/utils.js +10 -10
- package/dist/mcp/vitest.config.d.ts +3 -0
- package/dist/mcp/vitest.config.d.ts.map +1 -0
- package/dist/mcp-client.d.ts +58 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +3 -2
- package/dist/memory/branch.d.ts +124 -0
- package/dist/memory/branch.d.ts.map +1 -0
- package/dist/memory/commands/status.d.ts +4 -0
- package/dist/memory/commands/status.d.ts.map +1 -0
- package/dist/memory/commands/status.js +2 -2
- package/dist/memory/commands/view.d.ts +4 -0
- package/dist/memory/commands/view.d.ts.map +1 -0
- package/dist/memory/commands/view.js +2 -2
- package/dist/memory/compaction.d.ts +113 -0
- package/dist/memory/compaction.d.ts.map +1 -0
- package/dist/memory/config.d.ts +27 -0
- package/dist/memory/config.d.ts.map +1 -0
- package/dist/memory/debug-log.d.ts +12 -0
- package/dist/memory/debug-log.d.ts.map +1 -0
- package/dist/memory/hooks/compaction-hook.d.ts +4 -0
- package/dist/memory/hooks/compaction-hook.d.ts.map +1 -0
- package/dist/memory/hooks/compaction-hook.js +5 -5
- package/dist/memory/hooks/compaction-trigger.d.ts +4 -0
- package/dist/memory/hooks/compaction-trigger.d.ts.map +1 -0
- package/dist/memory/hooks/compaction-trigger.js +3 -3
- package/dist/memory/hooks/observer-trigger.d.ts +4 -0
- package/dist/memory/hooks/observer-trigger.d.ts.map +1 -0
- package/dist/memory/hooks/observer-trigger.js +4 -4
- package/dist/memory/ids.d.ts +2 -0
- package/dist/memory/ids.d.ts.map +1 -0
- package/dist/memory/index.d.ts +3 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +9 -9
- package/dist/memory/model-budget.d.ts +4 -0
- package/dist/memory/model-budget.d.ts.map +1 -0
- package/dist/memory/observer.d.ts +21 -0
- package/dist/memory/observer.d.ts.map +1 -0
- package/dist/memory/project-observations-store.d.ts +24 -0
- package/dist/memory/project-observations-store.d.ts.map +1 -0
- package/dist/memory/prompts.d.ts +11 -0
- package/dist/memory/prompts.d.ts.map +1 -0
- package/dist/memory/relevance.d.ts +4 -0
- package/dist/memory/relevance.d.ts.map +1 -0
- package/dist/memory/runtime.d.ts +40 -0
- package/dist/memory/runtime.d.ts.map +1 -0
- package/dist/memory/serialize.d.ts +26 -0
- package/dist/memory/serialize.d.ts.map +1 -0
- package/dist/memory/tokens.d.ts +8 -0
- package/dist/memory/tokens.d.ts.map +1 -0
- package/dist/memory/tools/read-project-observations.d.ts +8 -0
- package/dist/memory/tools/read-project-observations.d.ts.map +1 -0
- package/dist/memory/tools/read-project-observations.js +2 -2
- package/dist/memory/tools/recall-observation.d.ts +63 -0
- package/dist/memory/tools/recall-observation.d.ts.map +1 -0
- package/dist/memory/tools/recall-observation.js +2 -2
- package/dist/memory/tools/write-project-observation.d.ts +9 -0
- package/dist/memory/tools/write-project-observation.d.ts.map +1 -0
- package/dist/memory/tools/write-project-observation.js +2 -2
- package/dist/memory/types.d.ts +65 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/preflight.d.ts +27 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +4 -2
- package/dist/relay/auto-research.d.ts +64 -0
- package/dist/relay/auto-research.d.ts.map +1 -0
- package/dist/relay/auto-research.js +184 -79
- package/dist/relay/client.d.ts +126 -0
- package/dist/relay/client.d.ts.map +1 -0
- package/dist/relay/dispatcher.d.ts +216 -0
- package/dist/relay/dispatcher.d.ts.map +1 -0
- package/dist/relay/dispatcher.js +33 -6
- package/dist/relay/machine-store.d.ts +68 -0
- package/dist/relay/machine-store.d.ts.map +1 -0
- package/dist/relay/models-fetch.d.ts +75 -0
- package/dist/relay/models-fetch.d.ts.map +1 -0
- package/dist/relay/registration.d.ts +81 -0
- package/dist/relay/registration.d.ts.map +1 -0
- package/dist/sdk/agent-core/agent-loop.d.ts +24 -0
- package/dist/sdk/agent-core/agent-loop.d.ts.map +1 -0
- package/dist/sdk/agent-core/agent.d.ts +125 -0
- package/dist/sdk/agent-core/agent.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/agent-harness.d.ts +92 -0
- package/dist/sdk/agent-core/harness/agent-harness.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/compaction/branch-summarization.d.ts +53 -0
- package/dist/sdk/agent-core/harness/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/compaction/compaction.d.ts +95 -0
- package/dist/sdk/agent-core/harness/compaction/compaction.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/compaction/utils.d.ts +25 -0
- package/dist/sdk/agent-core/harness/compaction/utils.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/env/nodejs.d.ts +51 -0
- package/dist/sdk/agent-core/harness/env/nodejs.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/messages.d.ts +51 -0
- package/dist/sdk/agent-core/harness/messages.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/prompt-templates.d.ts +48 -0
- package/dist/sdk/agent-core/harness/prompt-templates.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/session/jsonl-repo.d.ts +26 -0
- package/dist/sdk/agent-core/harness/session/jsonl-repo.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/session/jsonl-storage.d.ts +33 -0
- package/dist/sdk/agent-core/harness/session/jsonl-storage.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/session/memory-repo.d.ts +18 -0
- package/dist/sdk/agent-core/harness/session/memory-repo.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/session/memory-storage.d.ts +25 -0
- package/dist/sdk/agent-core/harness/session/memory-storage.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/session/repo-utils.d.ts +11 -0
- package/dist/sdk/agent-core/harness/session/repo-utils.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/session/session.d.ts +32 -0
- package/dist/sdk/agent-core/harness/session/session.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/session/uuid.d.ts +2 -0
- package/dist/sdk/agent-core/harness/session/uuid.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/skills.d.ts +44 -0
- package/dist/sdk/agent-core/harness/skills.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/system-prompt.d.ts +3 -0
- package/dist/sdk/agent-core/harness/system-prompt.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/types.d.ts +601 -0
- package/dist/sdk/agent-core/harness/types.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/utils/shell-output.d.ts +14 -0
- package/dist/sdk/agent-core/harness/utils/shell-output.d.ts.map +1 -0
- package/dist/sdk/agent-core/harness/utils/truncate.d.ts +70 -0
- package/dist/sdk/agent-core/harness/utils/truncate.d.ts.map +1 -0
- package/dist/sdk/agent-core/index.d.ts +20 -0
- package/dist/sdk/agent-core/index.d.ts.map +1 -0
- package/dist/sdk/agent-core/node.d.ts +3 -0
- package/dist/sdk/agent-core/node.d.ts.map +1 -0
- package/dist/sdk/agent-core/proxy.d.ts +69 -0
- package/dist/sdk/agent-core/proxy.d.ts.map +1 -0
- package/dist/sdk/agent-core/types.d.ts +393 -0
- package/dist/sdk/agent-core/types.d.ts.map +1 -0
- package/dist/sdk/ai/api-registry.d.ts +20 -0
- package/dist/sdk/ai/api-registry.d.ts.map +1 -0
- package/dist/sdk/ai/cli.d.ts +3 -0
- package/dist/sdk/ai/cli.d.ts.map +1 -0
- package/dist/sdk/ai/env-api-keys.d.ts +18 -0
- package/dist/sdk/ai/env-api-keys.d.ts.map +1 -0
- package/dist/sdk/ai/image-models.d.ts +10 -0
- package/dist/sdk/ai/image-models.d.ts.map +1 -0
- package/dist/sdk/ai/image-models.generated.d.ts +440 -0
- package/dist/sdk/ai/image-models.generated.d.ts.map +1 -0
- package/dist/sdk/ai/images-api-registry.d.ts +14 -0
- package/dist/sdk/ai/images-api-registry.d.ts.map +1 -0
- package/dist/sdk/ai/images.d.ts +4 -0
- package/dist/sdk/ai/images.d.ts.map +1 -0
- package/dist/sdk/ai/index.d.ts +21 -0
- package/dist/sdk/ai/index.d.ts.map +1 -0
- package/dist/sdk/ai/models.d.ts +18 -0
- package/dist/sdk/ai/models.d.ts.map +1 -0
- package/dist/sdk/ai/models.generated.d.ts +17349 -0
- package/dist/sdk/ai/models.generated.d.ts.map +1 -0
- package/dist/sdk/ai/oauth.d.ts +2 -0
- package/dist/sdk/ai/oauth.d.ts.map +1 -0
- package/dist/sdk/ai/providers/anthropic.d.ts +54 -0
- package/dist/sdk/ai/providers/anthropic.d.ts.map +1 -0
- package/dist/sdk/ai/providers/faux.d.ts +56 -0
- package/dist/sdk/ai/providers/faux.d.ts.map +1 -0
- package/dist/sdk/ai/providers/github-copilot-headers.d.ts +8 -0
- package/dist/sdk/ai/providers/github-copilot-headers.d.ts.map +1 -0
- package/dist/sdk/ai/providers/openai-completions.d.ts +19 -0
- package/dist/sdk/ai/providers/openai-completions.d.ts.map +1 -0
- package/dist/sdk/ai/providers/openai-prompt-cache.d.ts +3 -0
- package/dist/sdk/ai/providers/openai-prompt-cache.d.ts.map +1 -0
- package/dist/sdk/ai/providers/register-builtins.d.ts +15 -0
- package/dist/sdk/ai/providers/register-builtins.d.ts.map +1 -0
- package/dist/sdk/ai/providers/simple-options.d.ts +8 -0
- package/dist/sdk/ai/providers/simple-options.d.ts.map +1 -0
- package/dist/sdk/ai/providers/transform-messages.d.ts +8 -0
- package/dist/sdk/ai/providers/transform-messages.d.ts.map +1 -0
- package/dist/sdk/ai/session-resources.d.ts +4 -0
- package/dist/sdk/ai/session-resources.d.ts.map +1 -0
- package/dist/sdk/ai/stream.d.ts +8 -0
- package/dist/sdk/ai/stream.d.ts.map +1 -0
- package/dist/sdk/ai/types.d.ts +488 -0
- package/dist/sdk/ai/types.d.ts.map +1 -0
- package/dist/sdk/ai/utils/diagnostics.d.ts +19 -0
- package/dist/sdk/ai/utils/diagnostics.d.ts.map +1 -0
- package/dist/sdk/ai/utils/event-stream.d.ts +21 -0
- package/dist/sdk/ai/utils/event-stream.d.ts.map +1 -0
- package/dist/sdk/ai/utils/hash.d.ts +3 -0
- package/dist/sdk/ai/utils/hash.d.ts.map +1 -0
- package/dist/sdk/ai/utils/headers.d.ts +2 -0
- package/dist/sdk/ai/utils/headers.d.ts.map +1 -0
- package/dist/sdk/ai/utils/json-parse.d.ts +16 -0
- package/dist/sdk/ai/utils/json-parse.d.ts.map +1 -0
- package/dist/sdk/ai/utils/node-http-proxy.d.ts +10 -0
- package/dist/sdk/ai/utils/node-http-proxy.d.ts.map +1 -0
- package/dist/sdk/ai/utils/oauth/anthropic.d.ts +25 -0
- package/dist/sdk/ai/utils/oauth/anthropic.d.ts.map +1 -0
- package/dist/sdk/ai/utils/oauth/device-code.d.ts +19 -0
- package/dist/sdk/ai/utils/oauth/device-code.d.ts.map +1 -0
- package/dist/sdk/ai/utils/oauth/github-copilot.d.ts +30 -0
- package/dist/sdk/ai/utils/oauth/github-copilot.d.ts.map +1 -0
- package/dist/sdk/ai/utils/oauth/index.d.ts +58 -0
- package/dist/sdk/ai/utils/oauth/index.d.ts.map +1 -0
- package/dist/sdk/ai/utils/oauth/oauth-page.d.ts +3 -0
- package/dist/sdk/ai/utils/oauth/oauth-page.d.ts.map +1 -0
- package/dist/sdk/ai/utils/oauth/openai-codex.d.ts +34 -0
- package/dist/sdk/ai/utils/oauth/openai-codex.d.ts.map +1 -0
- package/dist/sdk/ai/utils/oauth/openai-codex.js +2 -2
- package/dist/sdk/ai/utils/oauth/pkce.d.ts +13 -0
- package/dist/sdk/ai/utils/oauth/pkce.d.ts.map +1 -0
- package/dist/sdk/ai/utils/oauth/types.d.ts +64 -0
- package/dist/sdk/ai/utils/oauth/types.d.ts.map +1 -0
- package/dist/sdk/ai/utils/overflow.d.ts +56 -0
- package/dist/sdk/ai/utils/overflow.d.ts.map +1 -0
- package/dist/sdk/ai/utils/sanitize-unicode.d.ts +22 -0
- package/dist/sdk/ai/utils/sanitize-unicode.d.ts.map +1 -0
- package/dist/sdk/ai/utils/typebox-helpers.d.ts +17 -0
- package/dist/sdk/ai/utils/typebox-helpers.d.ts.map +1 -0
- package/dist/sdk/ai/utils/validation.d.ts +18 -0
- package/dist/sdk/ai/utils/validation.d.ts.map +1 -0
- package/dist/sdk/coding-agent/cli.d.ts +3 -0
- package/dist/sdk/coding-agent/cli.d.ts.map +1 -0
- package/dist/sdk/coding-agent/config.d.ts +71 -0
- package/dist/sdk/coding-agent/config.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/agent-session-runtime.d.ts +117 -0
- package/dist/sdk/coding-agent/core/agent-session-runtime.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/agent-session-services.d.ts +86 -0
- package/dist/sdk/coding-agent/core/agent-session-services.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/agent-session.d.ts +626 -0
- package/dist/sdk/coding-agent/core/agent-session.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/agent-session.js +3 -3
- package/dist/sdk/coding-agent/core/auth-guidance.d.ts +5 -0
- package/dist/sdk/coding-agent/core/auth-guidance.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/auth-storage.d.ts +145 -0
- package/dist/sdk/coding-agent/core/auth-storage.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/auth-storage.js +2 -2
- package/dist/sdk/coding-agent/core/bash-executor.d.ts +32 -0
- package/dist/sdk/coding-agent/core/bash-executor.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/bash-executor.js +1 -1
- package/dist/sdk/coding-agent/core/compaction/branch-summarization.d.ts +88 -0
- package/dist/sdk/coding-agent/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/compaction/branch-summarization.js +1 -1
- package/dist/sdk/coding-agent/core/compaction/compaction.d.ts +142 -0
- package/dist/sdk/coding-agent/core/compaction/compaction.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/compaction/compaction.js +1 -1
- package/dist/sdk/coding-agent/core/compaction/index.d.ts +7 -0
- package/dist/sdk/coding-agent/core/compaction/index.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/compaction/utils.d.ts +38 -0
- package/dist/sdk/coding-agent/core/compaction/utils.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/defaults.d.ts +3 -0
- package/dist/sdk/coding-agent/core/defaults.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/diagnostics.d.ts +15 -0
- package/dist/sdk/coding-agent/core/diagnostics.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/event-bus.d.ts +9 -0
- package/dist/sdk/coding-agent/core/event-bus.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/exec.d.ts +29 -0
- package/dist/sdk/coding-agent/core/exec.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/extensions/index.d.ts +12 -0
- package/dist/sdk/coding-agent/core/extensions/index.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/extensions/loader.d.ts +24 -0
- package/dist/sdk/coding-agent/core/extensions/loader.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/extensions/loader.js +18 -21
- package/dist/sdk/coding-agent/core/extensions/runner.d.ts +161 -0
- package/dist/sdk/coding-agent/core/extensions/runner.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/extensions/runner.js +1 -1
- package/dist/sdk/coding-agent/core/extensions/types.d.ts +1181 -0
- package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/extensions/wrapper.d.ts +20 -0
- package/dist/sdk/coding-agent/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/http-dispatcher.d.ts +21 -0
- package/dist/sdk/coding-agent/core/http-dispatcher.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/index.d.ts +12 -0
- package/dist/sdk/coding-agent/core/index.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/keybindings.d.ts +371 -0
- package/dist/sdk/coding-agent/core/keybindings.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/messages.d.ts +77 -0
- package/dist/sdk/coding-agent/core/messages.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/model-registry.d.ts +150 -0
- package/dist/sdk/coding-agent/core/model-registry.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/model-resolver-utils.d.ts +7 -0
- package/dist/sdk/coding-agent/core/model-resolver-utils.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/model-resolver.d.ts +110 -0
- package/dist/sdk/coding-agent/core/model-resolver.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/output-guard.d.ts +6 -0
- package/dist/sdk/coding-agent/core/output-guard.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package-manager.d.ts +204 -0
- package/dist/sdk/coding-agent/core/package-manager.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package-manager.js +14 -14
- package/dist/sdk/coding-agent/core/prompt-templates.d.ts +52 -0
- package/dist/sdk/coding-agent/core/prompt-templates.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/provider-display-names.d.ts +2 -0
- package/dist/sdk/coding-agent/core/provider-display-names.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/resolve-config-value.d.ts +23 -0
- package/dist/sdk/coding-agent/core/resolve-config-value.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/resource-loader.d.ts +194 -0
- package/dist/sdk/coding-agent/core/resource-loader.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/sdk.d.ts +107 -0
- package/dist/sdk/coding-agent/core/sdk.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/sdk.js +2 -2
- package/dist/sdk/coding-agent/core/session-cwd.d.ts +19 -0
- package/dist/sdk/coding-agent/core/session-cwd.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/session-manager.d.ts +333 -0
- package/dist/sdk/coding-agent/core/session-manager.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/settings-manager.d.ts +209 -0
- package/dist/sdk/coding-agent/core/settings-manager.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/skills.d.ts +60 -0
- package/dist/sdk/coding-agent/core/skills.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/slash-commands.d.ts +14 -0
- package/dist/sdk/coding-agent/core/slash-commands.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/source-info.d.ts +18 -0
- package/dist/sdk/coding-agent/core/source-info.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/system-prompt.d.ts +28 -0
- package/dist/sdk/coding-agent/core/system-prompt.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/system-prompt.js +7 -7
- package/dist/sdk/coding-agent/core/telemetry.d.ts +3 -0
- package/dist/sdk/coding-agent/core/telemetry.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/theme.d.ts +28 -0
- package/dist/sdk/coding-agent/core/theme.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/timings.d.ts +8 -0
- package/dist/sdk/coding-agent/core/timings.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/bash.d.ts +63 -0
- package/dist/sdk/coding-agent/core/tools/bash.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/bash.js +3 -3
- package/dist/sdk/coding-agent/core/tools/edit-diff.d.ts +87 -0
- package/dist/sdk/coding-agent/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/edit.d.ts +39 -0
- package/dist/sdk/coding-agent/core/tools/edit.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/file-mutation-queue.d.ts +6 -0
- package/dist/sdk/coding-agent/core/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/find.d.ts +35 -0
- package/dist/sdk/coding-agent/core/tools/find.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/grep.d.ts +37 -0
- package/dist/sdk/coding-agent/core/tools/grep.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/index.d.ts +40 -0
- package/dist/sdk/coding-agent/core/tools/index.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/ls.d.ts +37 -0
- package/dist/sdk/coding-agent/core/tools/ls.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/output-accumulator.d.ts +52 -0
- package/dist/sdk/coding-agent/core/tools/output-accumulator.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/output-accumulator.js +1 -1
- package/dist/sdk/coding-agent/core/tools/path-utils.d.ts +8 -0
- package/dist/sdk/coding-agent/core/tools/path-utils.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/read.d.ts +35 -0
- package/dist/sdk/coding-agent/core/tools/read.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/read.js +18 -10
- package/dist/sdk/coding-agent/core/tools/render-diff.d.ts +17 -0
- package/dist/sdk/coding-agent/core/tools/render-diff.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/render-utils.d.ts +21 -0
- package/dist/sdk/coding-agent/core/tools/render-utils.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/sdk/coding-agent/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/truncate.d.ts +70 -0
- package/dist/sdk/coding-agent/core/tools/truncate.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/tools/write.d.ts +26 -0
- package/dist/sdk/coding-agent/core/tools/write.d.ts.map +1 -0
- package/dist/sdk/coding-agent/index.d.ts +29 -0
- package/dist/sdk/coding-agent/index.d.ts.map +1 -0
- package/dist/sdk/coding-agent/main.d.ts +2 -0
- package/dist/sdk/coding-agent/main.d.ts.map +1 -0
- package/dist/sdk/coding-agent/migrations.d.ts +33 -0
- package/dist/sdk/coding-agent/migrations.d.ts.map +1 -0
- package/dist/sdk/coding-agent/migrations.js +4 -4
- package/dist/sdk/coding-agent/modes/index.d.ts +8 -0
- package/dist/sdk/coding-agent/modes/index.d.ts.map +1 -0
- package/dist/sdk/coding-agent/modes/print-mode.d.ts +28 -0
- package/dist/sdk/coding-agent/modes/print-mode.d.ts.map +1 -0
- package/dist/sdk/coding-agent/modes/print-mode.js +2 -2
- package/dist/sdk/coding-agent/modes/rpc/jsonl.d.ts +17 -0
- package/dist/sdk/coding-agent/modes/rpc/jsonl.d.ts.map +1 -0
- package/dist/sdk/coding-agent/modes/rpc/rpc-client.d.ts +224 -0
- package/dist/sdk/coding-agent/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/sdk/coding-agent/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/sdk/coding-agent/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/sdk/coding-agent/modes/rpc/rpc-types.d.ts +419 -0
- package/dist/sdk/coding-agent/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/ansi.d.ts +2 -0
- package/dist/sdk/coding-agent/utils/ansi.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/changelog.d.ts +21 -0
- package/dist/sdk/coding-agent/utils/changelog.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/child-process.d.ts +15 -0
- package/dist/sdk/coding-agent/utils/child-process.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/clipboard-image.d.ts +11 -0
- package/dist/sdk/coding-agent/utils/clipboard-image.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/clipboard-image.js +1 -1
- package/dist/sdk/coding-agent/utils/clipboard-native.d.ts +8 -0
- package/dist/sdk/coding-agent/utils/clipboard-native.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/clipboard.d.ts +2 -0
- package/dist/sdk/coding-agent/utils/clipboard.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/exif-orientation.d.ts +5 -0
- package/dist/sdk/coding-agent/utils/exif-orientation.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/frontmatter.d.ts +8 -0
- package/dist/sdk/coding-agent/utils/frontmatter.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/fs-watch.d.ts +5 -0
- package/dist/sdk/coding-agent/utils/fs-watch.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/git.d.ts +26 -0
- package/dist/sdk/coding-agent/utils/git.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/html.d.ts +7 -0
- package/dist/sdk/coding-agent/utils/html.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/image-convert.d.ts +9 -0
- package/dist/sdk/coding-agent/utils/image-convert.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/image-resize.d.ts +36 -0
- package/dist/sdk/coding-agent/utils/image-resize.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/mime.d.ts +3 -0
- package/dist/sdk/coding-agent/utils/mime.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/paths.d.ts +31 -0
- package/dist/sdk/coding-agent/utils/paths.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/photon.d.ts +13 -0
- package/dist/sdk/coding-agent/utils/photon.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/shell.d.ts +30 -0
- package/dist/sdk/coding-agent/utils/shell.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/sleep.d.ts +5 -0
- package/dist/sdk/coding-agent/utils/sleep.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/spectral-user-agent.d.ts +2 -0
- package/dist/sdk/coding-agent/utils/spectral-user-agent.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/spectral-user-agent.js +3 -0
- package/dist/sdk/coding-agent/utils/syntax-highlight.d.ts +12 -0
- package/dist/sdk/coding-agent/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/tools-manager.d.ts +3 -0
- package/dist/sdk/coding-agent/utils/tools-manager.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/version-check.d.ts +15 -0
- package/dist/sdk/coding-agent/utils/version-check.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/version-check.js +7 -7
- package/dist/sdk/coding-agent/utils/windows-self-update.d.ts +3 -0
- package/dist/sdk/coding-agent/utils/windows-self-update.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/windows-self-update.js +1 -1
- package/dist/server/agent-bridge.d.ts +308 -0
- package/dist/server/agent-bridge.d.ts.map +1 -0
- package/dist/server/agent-bridge.js +58 -58
- package/dist/server/handlers/errors.d.ts +26 -0
- package/dist/server/handlers/errors.d.ts.map +1 -0
- package/dist/server/handlers/mcp-status.d.ts +21 -0
- package/dist/server/handlers/mcp-status.d.ts.map +1 -0
- package/dist/server/handlers/mcp-status.js +52 -0
- package/dist/server/handlers/paths-autocomplete.d.ts +45 -0
- package/dist/server/handlers/paths-autocomplete.d.ts.map +1 -0
- package/dist/server/handlers/projects.d.ts +58 -0
- package/dist/server/handlers/projects.d.ts.map +1 -0
- package/dist/server/handlers/queue.d.ts +27 -0
- package/dist/server/handlers/queue.d.ts.map +1 -0
- package/dist/server/handlers/sessions.d.ts +50 -0
- package/dist/server/handlers/sessions.d.ts.map +1 -0
- package/dist/server/handlers/sessions.js +1 -1
- package/dist/server/handlers/settings.d.ts +30 -0
- package/dist/server/handlers/settings.d.ts.map +1 -0
- package/dist/server/handlers/settings.js +123 -0
- package/dist/server/paths.d.ts +51 -0
- package/dist/server/paths.d.ts.map +1 -0
- package/dist/server/paths.js +2 -2
- package/dist/server/session-stream.d.ts +379 -0
- package/dist/server/session-stream.d.ts.map +1 -0
- package/dist/server/session-stream.js +43 -34
- package/dist/server/shutdown.d.ts +102 -0
- package/dist/server/shutdown.d.ts.map +1 -0
- package/dist/server/shutdown.js +3 -3
- package/dist/server/storage.d.ts +287 -0
- package/dist/server/storage.d.ts.map +1 -0
- package/dist/server/storage.js +6 -6
- package/dist/server/title-generator.d.ts +25 -0
- package/dist/server/title-generator.d.ts.map +1 -0
- package/dist/server/wire.d.ts +448 -0
- package/dist/server/wire.d.ts.map +1 -0
- package/dist/server/wire.js +1 -1
- package/dist/studio-binding.d.ts +44 -0
- package/dist/studio-binding.d.ts.map +1 -0
- package/dist/studio-binding.js +1 -1
- package/package.json +11 -1
- package/dist/sdk/coding-agent/utils/pi-user-agent.js +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-stream.d.ts","sourceRoot":"","sources":["../../src/server/session-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
* Background: prior to this module each WebSocket owned its own `AgentBridge`
|
|
5
5
|
* instance and the routes layer enforced single-writer-wins (4001 eviction)
|
|
6
6
|
* to keep that bridge unique per session. That model lost data on browser
|
|
7
|
-
* refresh — the WS close torn down the
|
|
7
|
+
* refresh — the WS close torn down the spectral process mid-stream, and a re-open
|
|
8
8
|
* couldn't recover what hadn't yet hit `agent_end` (and thus SQLite).
|
|
9
9
|
*
|
|
10
10
|
* New model:
|
|
11
11
|
* - Pi lifecycle is per **Spectral session**, not per WS.
|
|
12
12
|
* - 0..N WebSockets may attach to the same session simultaneously. Each
|
|
13
13
|
* gets the same broadcast stream of events.
|
|
14
|
-
* - When a WS detaches (close, error, refresh), the
|
|
14
|
+
* - When a WS detaches (close, error, refresh), the spectral process keeps
|
|
15
15
|
* running. Closing every tab does NOT cancel the in-flight turn —
|
|
16
16
|
* it runs to completion and persists on `agent_end` as before.
|
|
17
17
|
* - On `attach`, the manager hands back a replay payload: full DB history
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* for MVP.
|
|
25
25
|
*
|
|
26
26
|
* Failure modes:
|
|
27
|
-
* -
|
|
27
|
+
* - spectral throws synchronously in `prompt()` → bridge surfaces as `error`
|
|
28
28
|
* event; manager broadcasts and clears `currentTurn`.
|
|
29
29
|
* - One subscriber's `ws.send` throws → caught, logged, removed from the
|
|
30
30
|
* subscriber set; broadcast continues to the rest.
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
*
|
|
34
34
|
* TODO (future): idle GC. A `SessionStream` with `subscribers.size === 0`
|
|
35
35
|
* and no current turn could be disposed after some grace window (e.g. 5
|
|
36
|
-
* minutes) to release
|
|
36
|
+
* minutes) to release spectral resources for chronically-idle sessions. Skipped
|
|
37
37
|
* for now — streams accumulate for the lifetime of the server process.
|
|
38
38
|
*/
|
|
39
39
|
import { randomUUID } from "node:crypto";
|
|
@@ -54,13 +54,13 @@ const MAX_LOOP_ITERATIONS = 100;
|
|
|
54
54
|
const LOOP_COMPACTION_THRESHOLD_TOKENS = 50_000;
|
|
55
55
|
/**
|
|
56
56
|
* Defensive cap for fresh-bridge history replay when we already have a
|
|
57
|
-
* persisted observational-memory snapshot.
|
|
57
|
+
* persisted observational-memory snapshot. spectral's own compaction keeps a
|
|
58
58
|
* recent live tail verbatim and summarizes the older prefix; replaying the
|
|
59
59
|
* entire SQLite transcript after restart defeats that and can explode the
|
|
60
60
|
* next prompt. We therefore rehydrate only an approximate recent tail.
|
|
61
61
|
*
|
|
62
62
|
* Keep this conservative — the tail is rehydrated as raw user/assistant
|
|
63
|
-
* messages PLUS
|
|
63
|
+
* messages PLUS spectral reconstructs tool-result messages from events_jsonl,
|
|
64
64
|
* so the actual context inflation is 3-8× the stored token estimate.
|
|
65
65
|
*/
|
|
66
66
|
const REHYDRATION_TAIL_TOKEN_BUDGET = 20_000;
|
|
@@ -251,7 +251,7 @@ export class SessionStreamManager {
|
|
|
251
251
|
});
|
|
252
252
|
}
|
|
253
253
|
/**
|
|
254
|
-
* Attach a subscriber to a session. Lazily creates the underlying
|
|
254
|
+
* Attach a subscriber to a session. Lazily creates the underlying spectral
|
|
255
255
|
* session on first attach. The caller is responsible for sending the
|
|
256
256
|
* initial `session_ready` frame using the returned replay payload (this
|
|
257
257
|
* keeps wire-protocol concerns in the routes layer).
|
|
@@ -281,7 +281,7 @@ export class SessionStreamManager {
|
|
|
281
281
|
};
|
|
282
282
|
}
|
|
283
283
|
/**
|
|
284
|
-
* Detach a subscriber. Idempotent. Does NOT dispose the underlying
|
|
284
|
+
* Detach a subscriber. Idempotent. Does NOT dispose the underlying spectral
|
|
285
285
|
* session — even when subscribers reach zero, the in-flight turn must
|
|
286
286
|
* complete and persist.
|
|
287
287
|
*/
|
|
@@ -454,11 +454,12 @@ export class SessionStreamManager {
|
|
|
454
454
|
finally {
|
|
455
455
|
if (stream.compacting)
|
|
456
456
|
stream.compacting = false;
|
|
457
|
+
this.maybeAutoDequeue(stream);
|
|
457
458
|
}
|
|
458
459
|
}
|
|
459
460
|
/**
|
|
460
|
-
* Persist a user message and forward it to
|
|
461
|
-
* message is persisted +
|
|
461
|
+
* Persist a user message and forward it to spectral. Resolves after the user
|
|
462
|
+
* message is persisted + spectral is invoked (NOT after the turn completes —
|
|
462
463
|
* the turn lifetime is observed via the broadcast stream).
|
|
463
464
|
*
|
|
464
465
|
* Broadcast ordering:
|
|
@@ -473,15 +474,15 @@ export class SessionStreamManager {
|
|
|
473
474
|
* - When `modelId` is provided, we apply it via `bridge.setModel()` and
|
|
474
475
|
* persist to SQLite for cross-restart recovery, BEFORE invoking
|
|
475
476
|
* `bridge.prompt()`. If `setModel` fails (unknown model, registry
|
|
476
|
-
* unavailable,
|
|
477
|
+
* unavailable, agent-side error) the bridge has already emitted an
|
|
477
478
|
* `error` wire event and we drop the prompt to avoid running it
|
|
478
479
|
* against the wrong model.
|
|
479
480
|
* - When `modelId` is omitted, we look up SQLite. If a previous turn
|
|
480
481
|
* persisted a value, we reapply it on this turn (this is the
|
|
481
|
-
* cross-restart recovery path: a fresh server process has lost
|
|
482
|
+
* cross-restart recovery path: a fresh server process has lost spectral's
|
|
482
483
|
* in-memory model state, so we re-pin from durable storage).
|
|
483
484
|
* - When neither envelope nor SQLite have a value, we leave model
|
|
484
|
-
* selection to
|
|
485
|
+
* selection to spectral's own settings file (pre-Phase-3 behaviour).
|
|
485
486
|
*/
|
|
486
487
|
async prompt(sessionId, content, modelId, images, reasoningEffort) {
|
|
487
488
|
if (this.disposed)
|
|
@@ -531,7 +532,7 @@ export class SessionStreamManager {
|
|
|
531
532
|
this.store.deleteMessage(messageId);
|
|
532
533
|
},
|
|
533
534
|
onError: (err) => {
|
|
534
|
-
console.error(`[spectral] error:
|
|
535
|
+
console.error(`[spectral] error: agent bridge error: ${err.message}`);
|
|
535
536
|
},
|
|
536
537
|
};
|
|
537
538
|
stream.bridge = this.bridgeFactory(bridgeOpts);
|
|
@@ -548,7 +549,7 @@ export class SessionStreamManager {
|
|
|
548
549
|
throw e;
|
|
549
550
|
});
|
|
550
551
|
}
|
|
551
|
-
// Wait for
|
|
552
|
+
// Wait for spectral to be ready before we persist + invoke. If start failed,
|
|
552
553
|
// surface to all subscribers instead of throwing into the route handler.
|
|
553
554
|
try {
|
|
554
555
|
await stream.ready;
|
|
@@ -562,7 +563,7 @@ export class SessionStreamManager {
|
|
|
562
563
|
// whitelist). Order:
|
|
563
564
|
// a) If envelope carried a `modelId`, use it.
|
|
564
565
|
// b) Else, look up the per-session persisted modelId in SQLite
|
|
565
|
-
// (cross-restart recovery — server restart wipes
|
|
566
|
+
// (cross-restart recovery — server restart wipes spectral's in-memory
|
|
566
567
|
// session model state, but our durable store has the last value).
|
|
567
568
|
// c) Else, ask the bridge for the first available model from the
|
|
568
569
|
// backend whitelist (same sortOrder the frontend uses for its
|
|
@@ -602,7 +603,7 @@ export class SessionStreamManager {
|
|
|
602
603
|
// Sticky reasoning-effort resolution. Same order as modelId:
|
|
603
604
|
// a) Envelope-supplied value → apply + persist.
|
|
604
605
|
// b) Otherwise, look up the persisted value from SQLite.
|
|
605
|
-
// c) When neither is present, leave
|
|
606
|
+
// c) When neither is present, leave spectral's current thinking level unchanged.
|
|
606
607
|
// We apply BEFORE persisting the user message so the turn runs with the
|
|
607
608
|
// correct reasoning level.
|
|
608
609
|
const effectiveReasoningEffort = reasoningEffort ?? this.store.getSessionReasoningEffort(sessionId) ?? undefined;
|
|
@@ -637,7 +638,7 @@ export class SessionStreamManager {
|
|
|
637
638
|
// 2. Broadcast the persisted message so every tab — including the one
|
|
638
639
|
// that sent the prompt — appends an authoritative user turn.
|
|
639
640
|
this.broadcast(stream, { type: "user_message_appended", message: stored });
|
|
640
|
-
// 3. Open a new in-flight turn. Allocated even before
|
|
641
|
+
// 3. Open a new in-flight turn. Allocated even before spectral emits anything
|
|
641
642
|
// so a re-attach immediately after `prompt` sees the turn.
|
|
642
643
|
stream.currentTurn = {
|
|
643
644
|
turnId: randomUUID(),
|
|
@@ -645,7 +646,7 @@ export class SessionStreamManager {
|
|
|
645
646
|
events: [],
|
|
646
647
|
assistantText: "",
|
|
647
648
|
};
|
|
648
|
-
// 4. Fire
|
|
649
|
+
// 4. Fire spectral. `prompt` resolves on agent_end; errors are handled inside
|
|
649
650
|
// AgentBridge (it emits `error` for us). We don't await — broadcast is
|
|
650
651
|
// driven by the bridge's emit callback.
|
|
651
652
|
void stream.bridge.prompt(content, images);
|
|
@@ -694,7 +695,7 @@ export class SessionStreamManager {
|
|
|
694
695
|
}
|
|
695
696
|
/**
|
|
696
697
|
* Cancel the in-flight turn for a session (user pressed Stop in the UI).
|
|
697
|
-
* Disposes the
|
|
698
|
+
* Disposes the agent bridge and broadcasts `agent_end` so all subscribers
|
|
698
699
|
* see the turn close. The stream itself is kept alive — the next user
|
|
699
700
|
* message (via `prompt()`) will lazily create a fresh bridge.
|
|
700
701
|
*
|
|
@@ -712,12 +713,12 @@ export class SessionStreamManager {
|
|
|
712
713
|
stream.loopGoal = null;
|
|
713
714
|
stream.loopIterationCount = 0;
|
|
714
715
|
// Capture whether a turn is in-flight BEFORE we dispose the bridge.
|
|
715
|
-
// dispose() tears down
|
|
716
|
+
// dispose() tears down spectral, which can cause the in-flight prompt()
|
|
716
717
|
// promise to reject synchronously/microtask and emit an error event
|
|
717
718
|
// through handleBridgeEvent — which clears currentTurn. We must
|
|
718
719
|
// broadcast agent_end regardless of what dispose() does to currentTurn.
|
|
719
720
|
const hadTurn = stream.currentTurn != null;
|
|
720
|
-
// Dispose the
|
|
721
|
+
// Dispose the agent bridge immediately — this tears down spectral's session and
|
|
721
722
|
// unsubscribe. The bridge's own event handler is detached; no further
|
|
722
723
|
// events will flow. We broadcast agent_end ourselves below.
|
|
723
724
|
try {
|
|
@@ -738,10 +739,11 @@ export class SessionStreamManager {
|
|
|
738
739
|
// Broadcast agent_end so all subscribers close their open turn and
|
|
739
740
|
// re-enable their composers. Use the pre-disposal flag — dispose()
|
|
740
741
|
// may have cleared currentTurn via an error event from the torn-down
|
|
741
|
-
//
|
|
742
|
+
// spectral session.
|
|
742
743
|
if (hadTurn) {
|
|
743
744
|
this.broadcast(stream, { type: "agent_end" });
|
|
744
745
|
stream.currentTurn = null;
|
|
746
|
+
this.maybeAutoDequeue(stream);
|
|
745
747
|
}
|
|
746
748
|
// Don't delete the stream — the subscribers are still attached and the
|
|
747
749
|
// next `prompt()` call will create a fresh bridge via `createStream()`.
|
|
@@ -749,10 +751,10 @@ export class SessionStreamManager {
|
|
|
749
751
|
// recreate one.
|
|
750
752
|
}
|
|
751
753
|
/**
|
|
752
|
-
* Tear down a single session's stream — disposes the
|
|
754
|
+
* Tear down a single session's stream — disposes the agent bridge and clears
|
|
753
755
|
* subscribers. Idempotent. Called by the routes layer right before
|
|
754
756
|
* `DELETE /api/sessions/:id` so the SQL cascade doesn't leave a zombie
|
|
755
|
-
*
|
|
757
|
+
* spectral process driving events at a session that no longer exists.
|
|
756
758
|
*
|
|
757
759
|
* Does NOT remove the session from the store — that's the caller's job.
|
|
758
760
|
*/
|
|
@@ -771,7 +773,7 @@ export class SessionStreamManager {
|
|
|
771
773
|
// ignore
|
|
772
774
|
}
|
|
773
775
|
// Best-effort: notify any still-open subscribers so they close cleanly
|
|
774
|
-
// rather than hanging on a dead
|
|
776
|
+
// rather than hanging on a dead spectral process. We don't broadcast through
|
|
775
777
|
// `broadcast()` because that would re-enter the dead-subscriber pruning
|
|
776
778
|
// loop on a stream we're about to drop anyway.
|
|
777
779
|
for (const sub of stream.subscribers) {
|
|
@@ -791,7 +793,7 @@ export class SessionStreamManager {
|
|
|
791
793
|
* Tear down every stream whose session belongs to the given list of ids.
|
|
792
794
|
* Used by the project-delete path: the route layer reads the project's
|
|
793
795
|
* session ids from `deleteProject()` and passes them here BEFORE the SQL
|
|
794
|
-
* cascade fires, so no
|
|
796
|
+
* cascade fires, so no spectral process ever observes the FK cascade.
|
|
795
797
|
*/
|
|
796
798
|
disposeProjectStreams(sessionIds) {
|
|
797
799
|
for (const sid of sessionIds) {
|
|
@@ -827,7 +829,7 @@ export class SessionStreamManager {
|
|
|
827
829
|
}
|
|
828
830
|
/**
|
|
829
831
|
* Fork & Compact: trigger compaction after the first assistant turn of a
|
|
830
|
-
* forked session. Uses
|
|
832
|
+
* forked session. Uses spectral's built-in `compact()` which generates a summary
|
|
831
833
|
* of older context, retaining the most recent ~20K tokens (including the
|
|
832
834
|
* user's new message + the assistant's response).
|
|
833
835
|
*
|
|
@@ -861,6 +863,7 @@ export class SessionStreamManager {
|
|
|
861
863
|
// best-effort
|
|
862
864
|
}
|
|
863
865
|
console.log(`[spectral] fork-compact completed for ${stream.sessionId}`);
|
|
866
|
+
this.maybeAutoDequeue(stream);
|
|
864
867
|
})
|
|
865
868
|
.catch((err) => {
|
|
866
869
|
stream.compacting = false;
|
|
@@ -877,6 +880,7 @@ export class SessionStreamManager {
|
|
|
877
880
|
catch {
|
|
878
881
|
// best-effort
|
|
879
882
|
}
|
|
883
|
+
this.maybeAutoDequeue(stream);
|
|
880
884
|
});
|
|
881
885
|
}
|
|
882
886
|
/**
|
|
@@ -888,11 +892,11 @@ export class SessionStreamManager {
|
|
|
888
892
|
* so we poll stream.compacting briefly. If compaction hasn't started after
|
|
889
893
|
* a short grace period, we check whether the context window exceeds the
|
|
890
894
|
* threshold and proactively trigger compaction via the bridge (which
|
|
891
|
-
* invokes
|
|
895
|
+
* invokes spectral's full pipeline, including the session_before_compact hook
|
|
892
896
|
* where the observational memory extension provides its summary).
|
|
893
897
|
*
|
|
894
898
|
* A duplicate call from the extension's delayed compaction trigger is
|
|
895
|
-
* harmless —
|
|
899
|
+
* harmless — spectral throws "Already compacted" which the extension catches.
|
|
896
900
|
*/
|
|
897
901
|
/**
|
|
898
902
|
* Send the next prompt for an autonomous loop iteration, compacting first
|
|
@@ -1019,14 +1023,14 @@ export class SessionStreamManager {
|
|
|
1019
1023
|
this.store.deleteMessage(messageId);
|
|
1020
1024
|
},
|
|
1021
1025
|
onError: (err) => {
|
|
1022
|
-
console.error(`[spectral] error:
|
|
1026
|
+
console.error(`[spectral] error: agent bridge error: ${err.message}`);
|
|
1023
1027
|
},
|
|
1024
1028
|
};
|
|
1025
1029
|
stream.bridge = this.bridgeFactory(bridgeOpts);
|
|
1026
1030
|
stream.ready = stream.bridge
|
|
1027
1031
|
.start()
|
|
1028
1032
|
.then(() => {
|
|
1029
|
-
// After
|
|
1033
|
+
// After spectral has replayed history into its session manager, populate
|
|
1030
1034
|
// context window state from its built-in getContextUsage() estimator.
|
|
1031
1035
|
// Historical sessions need this — without it, the initial
|
|
1032
1036
|
// session_ready carries null fields and the context-window bar
|
|
@@ -1064,6 +1068,7 @@ export class SessionStreamManager {
|
|
|
1064
1068
|
}
|
|
1065
1069
|
}
|
|
1066
1070
|
}
|
|
1071
|
+
this.maybeAutoDequeue(stream);
|
|
1067
1072
|
})
|
|
1068
1073
|
.catch((err) => {
|
|
1069
1074
|
const e = err instanceof Error ? err : new Error(String(err));
|
|
@@ -1080,7 +1085,7 @@ export class SessionStreamManager {
|
|
|
1080
1085
|
}
|
|
1081
1086
|
handleBridgeEvent(stream, event) {
|
|
1082
1087
|
// Buffer replayable events into the in-flight turn. We intentionally
|
|
1083
|
-
// accept events even if currentTurn is null (rare race:
|
|
1088
|
+
// accept events even if currentTurn is null (rare race: spectral emits before
|
|
1084
1089
|
// prompt() opened the turn), in which case we open one defensively so
|
|
1085
1090
|
// late attachers see the events. The first event in such a case is
|
|
1086
1091
|
// typically `message_start`.
|
|
@@ -1131,7 +1136,7 @@ export class SessionStreamManager {
|
|
|
1131
1136
|
// which fires before agent_end).
|
|
1132
1137
|
//
|
|
1133
1138
|
// Track context window state from token_usage events — the bridge emits
|
|
1134
|
-
// cumulative session-wide values from
|
|
1139
|
+
// cumulative session-wide values from spectral's getContextUsage(). This lets
|
|
1135
1140
|
// late-attaching subsribers (reconnects / multi-tab) get the latest
|
|
1136
1141
|
// context window state via session_ready.
|
|
1137
1142
|
if (event.type === "token_usage") {
|
|
@@ -1388,6 +1393,10 @@ export class SessionStreamManager {
|
|
|
1388
1393
|
* Returns true if a prompt was dequeued and a turn started.
|
|
1389
1394
|
*/
|
|
1390
1395
|
maybeAutoDequeue(stream) {
|
|
1396
|
+
if (stream.currentTurn || stream.compacting)
|
|
1397
|
+
return false;
|
|
1398
|
+
if (stream.loopActive && stream.loopOriginalPrompt)
|
|
1399
|
+
return false;
|
|
1391
1400
|
const next = this.store.dequeuePrompt(stream.sessionId);
|
|
1392
1401
|
if (!next)
|
|
1393
1402
|
return false;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graceful shutdown helper for `spectral serve`.
|
|
3
|
+
*
|
|
4
|
+
* Why a separate module:
|
|
5
|
+
* - The shutdown flag (`shutdownState.isShuttingDown`) is read by the relay
|
|
6
|
+
* dispatcher to reject new `client_message` envelopes. Putting it on
|
|
7
|
+
* `serve.ts` would create a circular import (dispatcher → serve → relay
|
|
8
|
+
* client → …); pulling it out keeps the dependency graph linear.
|
|
9
|
+
* - The orchestration is small but has enough edge cases (idempotent on a
|
|
10
|
+
* second SIGTERM, bounded wait for in-flight streams, best-effort store
|
|
11
|
+
* close) that it's worth one focused unit test.
|
|
12
|
+
*
|
|
13
|
+
* Behaviour summary (matches the contract in the Batch 6 brief):
|
|
14
|
+
* 1. First SIGINT/SIGTERM:
|
|
15
|
+
* - Log "Shutting down…" to stderr.
|
|
16
|
+
* - Flip `shutdownState.isShuttingDown = true`. From this point on the
|
|
17
|
+
* dispatcher refuses new `client_message` frames with an error
|
|
18
|
+
* wrapped as a `ws_event` (so the browser sees the rejection on the
|
|
19
|
+
* same stream it was using).
|
|
20
|
+
* - Wait up to `gracePeriodMs` (default 5_000 ms) for the in-flight
|
|
21
|
+
* stream count reported by `inFlightCount()` to drain to 0. Polled
|
|
22
|
+
* every 100 ms — any non-zero value indicates an active turn.
|
|
23
|
+
* - Close the relay (code 1000, reason "shutdown") and dispose the
|
|
24
|
+
* manager. The dispose order matters: relay first so the backend
|
|
25
|
+
* sees a clean close before our local state goes; manager second so
|
|
26
|
+
* any spectral processes get torn down deterministically.
|
|
27
|
+
* - Close the SQLite store (best-effort — a failure here just gets
|
|
28
|
+
* logged; the process is exiting anyway).
|
|
29
|
+
* - Exit with the supplied code (default 0).
|
|
30
|
+
* 2. Second SIGINT/SIGTERM during the grace period: skip the wait, force
|
|
31
|
+
* immediate exit with code 1. We don't want a hung spectral process to
|
|
32
|
+
* prevent operators from killing the server with a second Ctrl-C.
|
|
33
|
+
*
|
|
34
|
+
* The function is intentionally framework-free — it takes plain callbacks
|
|
35
|
+
* for everything I/O-shaped so the unit test can exercise the orchestration
|
|
36
|
+
* without spawning a real relay or sqlite handle.
|
|
37
|
+
*/
|
|
38
|
+
/**
|
|
39
|
+
* Process-wide shutdown flag. Read by the dispatcher to gate new
|
|
40
|
+
* `client_message` envelopes; written by `gracefulShutdown` (and by tests
|
|
41
|
+
* via `resetShutdownState`).
|
|
42
|
+
*
|
|
43
|
+
* Module-level singleton because there is exactly one server process per
|
|
44
|
+
* `spectral serve` invocation; co-locating with serve.ts would require
|
|
45
|
+
* threading the flag through the dispatcher's deps (already a small
|
|
46
|
+
* object) and risks dispatcher tests carrying serve.ts state.
|
|
47
|
+
*/
|
|
48
|
+
export declare const shutdownState: {
|
|
49
|
+
isShuttingDown: boolean;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Reset the singleton flag. Tests use this in `beforeEach` so a previous
|
|
53
|
+
* test's shutdown doesn't bleed into the next. Production code must NOT
|
|
54
|
+
* call this — once the process is shutting down, it's shutting down.
|
|
55
|
+
*/
|
|
56
|
+
export declare function resetShutdownState(): void;
|
|
57
|
+
export interface GracefulShutdownOptions {
|
|
58
|
+
/** Logger; defaults to `console`. Tests inject a noop or a recorder. */
|
|
59
|
+
logger?: Pick<Console, "log" | "warn" | "error">;
|
|
60
|
+
/**
|
|
61
|
+
* Reports in-flight stream count (e.g. `() => manager.activeTurnCount()`).
|
|
62
|
+
* Polled every 100 ms until it returns 0 or `gracePeriodMs` elapses.
|
|
63
|
+
* If omitted we skip the wait entirely (treated as "nothing in flight").
|
|
64
|
+
*/
|
|
65
|
+
inFlightCount?: () => number;
|
|
66
|
+
/** Close the relay with code 1000 / reason "shutdown". */
|
|
67
|
+
closeRelay?: () => void | Promise<void>;
|
|
68
|
+
/** Dispose the SessionStreamManager (kills spectral processes). */
|
|
69
|
+
disposeManager?: () => void | Promise<void>;
|
|
70
|
+
/** Close the SQLite store. Failures are logged, not rethrown. */
|
|
71
|
+
closeStore?: () => void;
|
|
72
|
+
/** Bound on how long to wait for in-flight streams. Default 5_000 ms. */
|
|
73
|
+
gracePeriodMs?: number;
|
|
74
|
+
/** Polling interval for the in-flight wait. Default 100 ms. */
|
|
75
|
+
pollIntervalMs?: number;
|
|
76
|
+
/** Exit code on a clean first-signal shutdown. Default 0. */
|
|
77
|
+
exitCode?: number;
|
|
78
|
+
/**
|
|
79
|
+
* Override `process.exit` for tests. Not called as a function reference
|
|
80
|
+
* directly so the test can assert on what was requested without actually
|
|
81
|
+
* killing vitest.
|
|
82
|
+
*/
|
|
83
|
+
exitFn?: (code: number) => void;
|
|
84
|
+
/**
|
|
85
|
+
* Sleep helper. Tests inject a mock clock; production uses real
|
|
86
|
+
* `setTimeout`. Resolves after `ms` milliseconds.
|
|
87
|
+
*/
|
|
88
|
+
sleep?: (ms: number) => Promise<void>;
|
|
89
|
+
}
|
|
90
|
+
/** Test-only: reset the entry counter alongside `shutdownState`. */
|
|
91
|
+
export declare function resetShutdownEntryCount(): void;
|
|
92
|
+
/**
|
|
93
|
+
* Run the graceful shutdown sequence. Idempotent on the entry-count
|
|
94
|
+
* dimension: the second concurrent call resolves immediately after
|
|
95
|
+
* triggering an immediate exit.
|
|
96
|
+
*
|
|
97
|
+
* Returns once the supplied `exitFn` has been invoked (or would have been
|
|
98
|
+
* invoked in production where `process.exit` does not return). Tests can
|
|
99
|
+
* await it to assert ordering.
|
|
100
|
+
*/
|
|
101
|
+
export declare function gracefulShutdown(opts?: GracefulShutdownOptions): Promise<void>;
|
|
102
|
+
//# sourceMappingURL=shutdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/server/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,EAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAEpD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACjD;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAaD,oEAAoE;AACpE,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,GAAE,uBAA4B,GACjC,OAAO,CAAC,IAAI,CAAC,CAmGf"}
|
package/dist/server/shutdown.js
CHANGED
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
* - Close the relay (code 1000, reason "shutdown") and dispose the
|
|
24
24
|
* manager. The dispose order matters: relay first so the backend
|
|
25
25
|
* sees a clean close before our local state goes; manager second so
|
|
26
|
-
* any
|
|
26
|
+
* any spectral processes get torn down deterministically.
|
|
27
27
|
* - Close the SQLite store (best-effort — a failure here just gets
|
|
28
28
|
* logged; the process is exiting anyway).
|
|
29
29
|
* - Exit with the supplied code (default 0).
|
|
30
30
|
* 2. Second SIGINT/SIGTERM during the grace period: skip the wait, force
|
|
31
|
-
* immediate exit with code 1. We don't want a hung
|
|
31
|
+
* immediate exit with code 1. We don't want a hung spectral process to
|
|
32
32
|
* prevent operators from killing the server with a second Ctrl-C.
|
|
33
33
|
*
|
|
34
34
|
* The function is intentionally framework-free — it takes plain callbacks
|
|
@@ -89,7 +89,7 @@ export async function gracefulShutdown(opts = {}) {
|
|
|
89
89
|
entryCount += 1;
|
|
90
90
|
// Second signal during a graceful shutdown: don't wait around, just go.
|
|
91
91
|
// Code 1 signals "abnormal exit" — operators wanted out NOW, not after
|
|
92
|
-
//
|
|
92
|
+
// spectral finishes its turn.
|
|
93
93
|
if (entryCount > 1) {
|
|
94
94
|
try {
|
|
95
95
|
logger.error("Shutdown forced by repeated signal — exiting immediately.");
|