@aexol/spectral 0.8.0 → 0.8.5
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/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- 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/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/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/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/kanban-bridge.d.ts +24 -0
- package/dist/extensions/kanban-bridge.d.ts.map +1 -0
- package/dist/extensions/kanban-bridge.js +668 -0
- package/dist/extensions/openrouter-attribution.d.ts +12 -0
- package/dist/extensions/openrouter-attribution.d.ts.map +1 -0
- 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 -22
- 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/config.d.ts +78 -0
- package/dist/mcp/config.d.ts.map +1 -0
- 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/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/init.d.ts +10 -0
- package/dist/mcp/init.d.ts.map +1 -0
- package/dist/mcp/init.js +1 -9
- 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/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/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/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/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-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/utils.d.ts +17 -0
- package/dist/mcp/utils.d.ts.map +1 -0
- 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 +2 -1
- 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/view.d.ts +4 -0
- package/dist/memory/commands/view.d.ts.map +1 -0
- 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-trigger.d.ts +4 -0
- package/dist/memory/hooks/compaction-trigger.d.ts.map +1 -0
- package/dist/memory/hooks/observer-trigger.d.ts +4 -0
- package/dist/memory/hooks/observer-trigger.d.ts.map +1 -0
- 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 +2 -0
- 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/recall-observation.d.ts +63 -0
- package/dist/memory/tools/recall-observation.d.ts.map +1 -0
- 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 +60 -0
- 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 +3 -1
- 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 +208 -69
- package/dist/relay/client.d.ts +126 -0
- package/dist/relay/client.d.ts.map +1 -0
- package/dist/relay/dispatcher.d.ts +207 -0
- package/dist/relay/dispatcher.d.ts.map +1 -0
- 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/env-api-keys.js +9 -49
- 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/anthropic.js +1 -1
- 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 +1 -1
- 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/config.js +2 -69
- 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/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/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/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/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/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 +3 -35
- 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 -2
- 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-utils.js +8 -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/model-resolver.js +1 -1
- 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/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/resource-loader.js +1 -1
- 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/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/settings-manager.js +1 -170
- 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 +3 -1
- 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/theme.js +202 -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 +17 -18
- 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/edit.js +7 -8
- 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/find.js +9 -13
- 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/grep.js +10 -14
- 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/ls.js +9 -10
- 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/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 +33 -35
- 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/{modes/interactive/components/diff.js → core/tools/render-diff.js} +18 -31
- 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/core/tools/write.js +10 -11
- 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/index.js +7 -5
- 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/modes/index.d.ts +8 -0
- package/dist/sdk/coding-agent/modes/index.d.ts.map +1 -0
- package/dist/sdk/coding-agent/modes/index.js +0 -1
- 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/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-mode.js +2 -2
- 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-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/photon.js +2 -10
- package/dist/sdk/coding-agent/utils/pi-user-agent.d.ts +2 -0
- package/dist/sdk/coding-agent/utils/pi-user-agent.d.ts.map +1 -0
- package/dist/sdk/coding-agent/utils/pi-user-agent.js +1 -2
- 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/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/windows-self-update.d.ts +3 -0
- package/dist/sdk/coding-agent/utils/windows-self-update.d.ts.map +1 -0
- 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 +2 -1
- package/dist/server/handlers/errors.d.ts +26 -0
- package/dist/server/handlers/errors.d.ts.map +1 -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/paths.d.ts +51 -0
- package/dist/server/paths.d.ts.map +1 -0
- package/dist/server/session-stream.d.ts +379 -0
- package/dist/server/session-stream.d.ts.map +1 -0
- package/dist/server/shutdown.d.ts +102 -0
- package/dist/server/shutdown.d.ts.map +1 -0
- package/dist/server/storage.d.ts +287 -0
- package/dist/server/storage.d.ts.map +1 -0
- 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/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/bun/cli.js +0 -7
- package/dist/sdk/coding-agent/bun/restore-sandbox-env.js +0 -31
- package/dist/sdk/coding-agent/cli/args.js +0 -340
- package/dist/sdk/coding-agent/cli/file-processor.js +0 -82
- package/dist/sdk/coding-agent/cli/initial-message.js +0 -21
- package/dist/sdk/coding-agent/core/footer-data-provider.js +0 -309
- package/dist/sdk/coding-agent/modes/interactive/components/keybinding-hints.js +0 -35
- package/dist/sdk/coding-agent/modes/interactive/components/visual-truncate.js +0 -26
- package/dist/sdk/coding-agent/modes/interactive/interactive-mode.js +0 -3
- package/dist/sdk/coding-agent/modes/interactive/theme/theme.js +0 -1022
package/CHANGELOG.md
CHANGED
|
@@ -1,75 +1,100 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to `@aexol/spectral` are documented here.
|
|
4
|
-
|
|
3
|
+
All notable changes to `@aexol/spectral` are documented here. Format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.8.4] - 2026-06-02
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Added `contextWindow` override field to the Built-in UserModels admin form,
|
|
13
|
+
allowing admins to set a custom context window for built-in models.
|
|
14
|
+
The field appears between Credits and System Prompt in the edit/create
|
|
15
|
+
form. Also added to model config export/import and GraphQL selector.
|
|
16
|
+
|
|
17
|
+
## [0.8.3] - 2026-06-02
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- Fixed aggressive context compaction on every turn when using built-in models
|
|
22
|
+
(e.g. "Aexol Coder"). The `contextWindow` was always `null` for built-in
|
|
23
|
+
`UserModel` entries because the lookup used pipe-separated keys
|
|
24
|
+
(`provider|modelId`) but `UserModel.baseModel` stores values with a colon
|
|
25
|
+
separator (`anthropic:claude-sonnet-4-20250514`). The backend now correctly
|
|
26
|
+
inherits `contextWindow` from the linked `BaseModel`.
|
|
27
|
+
|
|
8
28
|
## [0.7.2] - 2026-05-25
|
|
9
29
|
|
|
10
30
|
### Changed
|
|
31
|
+
|
|
11
32
|
- Version bump for monorepo release
|
|
12
33
|
|
|
13
34
|
### Added
|
|
35
|
+
|
|
14
36
|
- Admin OpenRouter catalog picker in `/studio/admin/models` (Base Models tab):
|
|
15
|
-
search across 368 models from `https://openrouter.ai/api/v1/models` and add
|
|
16
|
-
|
|
37
|
+
search across 368 models from `https://openrouter.ai/api/v1/models` and add to
|
|
38
|
+
the whitelist with one click. Picker marks models already present in the
|
|
17
39
|
whitelist (disabled add) regardless of their enabled state.
|
|
18
|
-
- `Query.adminOpenRouterCatalog: [OpenRouterModel!]!` — admin-gated, with a
|
|
19
|
-
|
|
20
|
-
- `Mutation.adminCreateBaseModel(input: BaseModelCreateInput!): BaseModel!`
|
|
21
|
-
|
|
40
|
+
- `Query.adminOpenRouterCatalog: [OpenRouterModel!]!` — admin-gated, with a 1h
|
|
41
|
+
in-memory TTL cache of the upstream catalog.
|
|
42
|
+
- `Mutation.adminCreateBaseModel(input: BaseModelCreateInput!): BaseModel!` with
|
|
43
|
+
duplicate guard on `(provider, modelId)`. Defaults `enabled=true`.
|
|
22
44
|
- Verbatim `modelId` routing for `provider="openrouter"` in the backend
|
|
23
45
|
inference proxy: no `${provider}/${modelId}` rebuild — picker-sourced rows
|
|
24
46
|
carry the canonical OR ID and are sent through unchanged. Legacy rebuild
|
|
25
|
-
fallback is preserved for older naive-provider rows
|
|
26
|
-
|
|
47
|
+
fallback is preserved for older naive-provider rows (`provider="deepseek"`,
|
|
48
|
+
`"google"`, etc.).
|
|
27
49
|
- Per-session model selection: choose AI model from a whitelist managed by
|
|
28
50
|
admins. Selection persists per session in localStorage and is sent in the
|
|
29
51
|
`prompt` envelope to apply via pi `setModel()`.
|
|
30
|
-
- New SQLite column `sessions.model_id` for cross-restart recovery of
|
|
31
|
-
|
|
32
|
-
- Synthetic pi providers `spectral-proxy-anthropic` and
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
- Backend `/v1/messages` and `/v1/chat/completions` machine-JWT auth branch
|
|
37
|
-
|
|
52
|
+
- New SQLite column `sessions.model_id` for cross-restart recovery of selected
|
|
53
|
+
model.
|
|
54
|
+
- Synthetic pi providers `spectral-proxy-anthropic` and `spectral-proxy-openai`,
|
|
55
|
+
registered at `PiBridge` start, that point pi's `ModelRegistry` at the
|
|
56
|
+
backend's `/v1` proxy. `AuthStorage.inMemory()` and `ModelRegistry.inMemory()`
|
|
57
|
+
skip on-disk pi credentials in `serve` mode.
|
|
58
|
+
- Backend `/v1/messages` and `/v1/chat/completions` machine-JWT auth branch with
|
|
59
|
+
raw `modelId` resolution against the `BaseModel` whitelist.
|
|
38
60
|
- TTL-cached `fetchAllowedModels` GraphQL query used by `spectral serve` to
|
|
39
61
|
discover the team's allowed models from the backend at startup.
|
|
40
62
|
- Startup info log on `spectral serve`:
|
|
41
63
|
`✓ Inference routed via backend proxy (N model(s) available)`.
|
|
42
64
|
|
|
43
65
|
### Changed
|
|
66
|
+
|
|
44
67
|
- Soft-remove a model from the whitelist by reusing the existing per-row
|
|
45
|
-
`Switch` toggle (no separate Remove button). Disabled rows remain visible
|
|
46
|
-
|
|
47
|
-
- Available models are now read from a backend-managed `BaseModel` table
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
- `spectral serve` inference now routes through the backend proxy
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
68
|
+
`Switch` toggle (no separate Remove button). Disabled rows remain visible in
|
|
69
|
+
the admin table and can be re-enabled with the same Switch.
|
|
70
|
+
- Available models are now read from a backend-managed `BaseModel` table (synced
|
|
71
|
+
from https://models.dev/api.json by admins) instead of a hardcoded frontend
|
|
72
|
+
whitelist.
|
|
73
|
+
- `spectral serve` inference now routes through the backend proxy (centralized
|
|
74
|
+
API keys) instead of reading `~/.pi/agent/auth.json`. CLI machines no longer
|
|
75
|
+
need provider API keys locally; the backend manages them. The per-machine
|
|
76
|
+
machine JWT carries auth, and the per-team `BaseModel` whitelist gates which
|
|
77
|
+
models can be used.
|
|
55
78
|
|
|
56
79
|
### Fixed
|
|
80
|
+
|
|
57
81
|
- Admin "Add from OpenRouter" picker GraphQL syntax error
|
|
58
|
-
(`Expected Name, found String "modalities"`). Mutations
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
correctly server-side.
|
|
82
|
+
(`Expected Name, found String "modalities"`). Mutations `adminCreateBaseModel`
|
|
83
|
+
and `adminUpdateBaseModel` now pass their input objects via Zeus `$()`
|
|
84
|
+
variables instead of inline serialization, so nested array fields
|
|
85
|
+
(`modalities`, `supportedParameters`) parse correctly server-side.
|
|
63
86
|
|
|
64
87
|
### Removed
|
|
65
|
-
|
|
66
|
-
|
|
88
|
+
|
|
89
|
+
- Hardcoded `landing/config/model-whitelist.ts` allowlist (replaced by the
|
|
90
|
+
DB-backed whitelist).
|
|
67
91
|
|
|
68
92
|
### Migration
|
|
93
|
+
|
|
69
94
|
- `spectral` (CLI / TUI subprocess mode): no change — still uses local
|
|
70
95
|
`~/.pi/agent/auth.json`.
|
|
71
|
-
- `spectral serve`: ensure the backend has the relevant provider keys
|
|
72
|
-
|
|
96
|
+
- `spectral serve`: ensure the backend has the relevant provider keys configured
|
|
97
|
+
(`ANTHROPIC_API_KEY`, `OPENROUTER_API_KEY`, etc.). Local
|
|
73
98
|
`~/.pi/agent/auth.json` is ignored when running `serve`.
|
|
74
99
|
|
|
75
100
|
## [0.1.0] — 2026-04-29
|
|
@@ -77,35 +102,37 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
77
102
|
Initial release.
|
|
78
103
|
|
|
79
104
|
### Added
|
|
105
|
+
|
|
80
106
|
- `spectral login` — interactive authentication. Verifies the team API key
|
|
81
107
|
against the Aexol MCP backend before persisting credentials to
|
|
82
108
|
`~/.spectral/config.json` (mode `0600`).
|
|
83
109
|
- `spectral logout` — removes stored credentials. Idempotent.
|
|
84
|
-
- `spectral serve` — always-on agent that connects this machine to the
|
|
85
|
-
|
|
86
|
-
- Registers a machine identity with your team on first run; reuses the
|
|
87
|
-
|
|
110
|
+
- `spectral serve` — always-on agent that connects this machine to the Aexol
|
|
111
|
+
relay over a single long-lived WebSocket.
|
|
112
|
+
- Registers a machine identity with your team on first run; reuses the issued
|
|
113
|
+
JWT on subsequent runs.
|
|
88
114
|
- Reconnects automatically with exponential backoff.
|
|
89
|
-
- Graceful shutdown on `SIGINT` / `SIGTERM`: drains in-flight responses
|
|
90
|
-
|
|
115
|
+
- Graceful shutdown on `SIGINT` / `SIGTERM`: drains in-flight responses and
|
|
116
|
+
closes the relay cleanly before exiting.
|
|
91
117
|
- `--machine-name <name>` overrides the default `os.hostname()`.
|
|
92
118
|
- Browser-driven sessions through the Aexol web UI:
|
|
93
119
|
- Machine picker for switching between paired devices.
|
|
94
|
-
- Multi-tab sync of project and session lifecycle changes (create,
|
|
95
|
-
|
|
120
|
+
- Multi-tab sync of project and session lifecycle changes (create, rename,
|
|
121
|
+
delete) via a per-machine meta channel.
|
|
96
122
|
- Stuck-turn watchdog re-enables the composer after 60s of silence.
|
|
97
123
|
- Local-first storage: projects, sessions, and messages live in a SQLite
|
|
98
124
|
database at `~/.spectral/sessions.db`. They never leave the machine.
|
|
99
|
-
- Bundled Aexol MCP extension auto-loaded for the local TUI path so
|
|
100
|
-
|
|
101
|
-
- Plain pi pass-through: any flag that isn't a Spectral subcommand is
|
|
102
|
-
|
|
125
|
+
- Bundled Aexol MCP extension auto-loaded for the local TUI path so `spectral`
|
|
126
|
+
(no subcommand) acts as a fully-configured pi session.
|
|
127
|
+
- Plain pi pass-through: any flag that isn't a Spectral subcommand is forwarded
|
|
128
|
+
verbatim to `pi`.
|
|
103
129
|
|
|
104
130
|
### Notes
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
131
|
+
|
|
132
|
+
- Backend storage is identity + machine metadata only. Message content, code,
|
|
133
|
+
and model API keys never leave your machine.
|
|
134
|
+
- One SQLite database per machine — switching machines in the browser shows a
|
|
135
|
+
different project list, by design.
|
|
136
|
+
- Pi auth tokens (Anthropic, OpenAI, Cerebras, Google, custom endpoints) are
|
|
137
|
+
managed by pi itself in `~/.pi/agent/auth.json` and are not read or
|
|
111
138
|
transmitted by Spectral.
|
package/README.md
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
## What is Spectral?
|
|
6
6
|
|
|
7
|
-
Spectral is the always-on coding agent for [Aexol](https://aexol.com). You
|
|
8
|
-
it on every machine you want to code on, run `spectral serve`, and your
|
|
9
|
-
appear in the Aexol web UI as live agents you can drive from any browser
|
|
10
|
-
port forwarding, no SSH, no exposing localhost.
|
|
7
|
+
Spectral is the always-on coding agent for [Aexol](https://aexol.com). You
|
|
8
|
+
install it on every machine you want to code on, run `spectral serve`, and your
|
|
9
|
+
devices appear in the Aexol web UI as live agents you can drive from any browser
|
|
10
|
+
tab — no port forwarding, no SSH, no exposing localhost.
|
|
11
11
|
|
|
12
12
|
Under the hood, Spectral is a thin branded wrapper around
|
|
13
13
|
[pi](https://www.npmjs.com/package/@mariozechner/pi-coding-agent) by Mario
|
|
@@ -33,9 +33,9 @@ Requires Node.js **20 or newer**.
|
|
|
33
33
|
spectral login
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
You'll be prompted for your Aexol MCP URL (defaults to
|
|
37
|
-
and a team API key (`sk-aexol-team-…`).
|
|
38
|
-
`~/.spectral/config.json` with mode `0600`.
|
|
36
|
+
You'll be prompted for your Aexol MCP URL (defaults to
|
|
37
|
+
`https://api.aexol.ai/mcp`) and a team API key (`sk-aexol-team-…`).
|
|
38
|
+
Credentials are written to `~/.spectral/config.json` with mode `0600`.
|
|
39
39
|
|
|
40
40
|
2. **Start the agent**
|
|
41
41
|
|
|
@@ -59,44 +59,44 @@ Aexol MCP extension auto-loaded.
|
|
|
59
59
|
|
|
60
60
|
## Commands
|
|
61
61
|
|
|
62
|
-
| Command
|
|
63
|
-
|
|
64
|
-
| `spectral`
|
|
65
|
-
| `spectral login`
|
|
66
|
-
| `spectral logout`
|
|
67
|
-
| `spectral serve`
|
|
62
|
+
| Command | Description |
|
|
63
|
+
| -------------------- | --------------------------------------------------------------------------- |
|
|
64
|
+
| `spectral` | Local TUI. Forwards all flags to pi; loads the bundled Aexol MCP extension. |
|
|
65
|
+
| `spectral login` | Interactive auth. Verifies the key against the MCP backend and stores it. |
|
|
66
|
+
| `spectral logout` | Removes `~/.spectral/config.json`. Idempotent. |
|
|
67
|
+
| `spectral serve` | Connect this machine to the Aexol relay. Stays up; survives reconnects. |
|
|
68
68
|
| `spectral --version` | Print version. |
|
|
69
|
-
| `spectral --help`
|
|
69
|
+
| `spectral --help` | Print Spectral header, then pi's full help. |
|
|
70
70
|
|
|
71
71
|
### `spectral serve` flags
|
|
72
72
|
|
|
73
|
-
| Flag
|
|
74
|
-
|
|
75
|
-
| `--machine-name <name>`
|
|
73
|
+
| Flag | Description |
|
|
74
|
+
| ----------------------- | ----------------------------------------------------- |
|
|
75
|
+
| `--machine-name <name>` | Override the display name (default: `os.hostname()`). |
|
|
76
76
|
|
|
77
|
-
Anything that isn't a Spectral subcommand is forwarded verbatim to pi, so any
|
|
78
|
-
|
|
77
|
+
Anything that isn't a Spectral subcommand is forwarded verbatim to pi, so any pi
|
|
78
|
+
flag you know works. Example: `spectral -p "summarize this repo"`.
|
|
79
79
|
|
|
80
80
|
## How it works
|
|
81
81
|
|
|
82
82
|
```
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
83
|
+
┌────────────────┐ ┌─────────────────┐ ┌────────────────┐
|
|
84
|
+
│ Browser tab │────────▶│ Aexol backend │◀────────│ spectral serve │
|
|
85
|
+
│ (Aexol web UI) │ WSS │ (relay) │ WSS │ (your machine) │
|
|
86
|
+
└────────────────┘ └─────────────────┘ └────────────────┘
|
|
87
|
+
│
|
|
88
|
+
identity + routing only
|
|
89
|
+
(no message content, no code)
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
- Your machine runs `spectral serve` and registers with the relay using a
|
|
93
93
|
machine JWT issued at first run.
|
|
94
|
-
- Browser sessions for that machine open a WebSocket to the backend. The
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
- All your local state — projects, sessions, messages, pi auth tokens —
|
|
98
|
-
|
|
99
|
-
|
|
94
|
+
- Browser sessions for that machine open a WebSocket to the backend. The backend
|
|
95
|
+
forwards every frame to your machine and back — it never reads or stores
|
|
96
|
+
message content.
|
|
97
|
+
- All your local state — projects, sessions, messages, pi auth tokens — lives on
|
|
98
|
+
the device. The backend only knows machine identity (id, display name,
|
|
99
|
+
hostname, last-seen) and team membership.
|
|
100
100
|
|
|
101
101
|
## How inference is routed
|
|
102
102
|
|
|
@@ -116,88 +116,86 @@ direct call to provider backend uses centralized API keys
|
|
|
116
116
|
scoped to team's BaseModel whitelist
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
- **`spectral` (CLI subprocess mode)** — pi runs as a normal subprocess and
|
|
120
|
-
|
|
119
|
+
- **`spectral` (CLI subprocess mode)** — pi runs as a normal subprocess and uses
|
|
120
|
+
whatever provider keys you've stored locally in `~/.pi/agent/auth.json`
|
|
121
121
|
(Anthropic, OpenAI, Cerebras, Google, custom OpenAI-compatible endpoints).
|
|
122
|
-
Spectral never reads or transmits these. This is the classic local-only
|
|
123
|
-
flow.
|
|
122
|
+
Spectral never reads or transmits these. This is the classic local-only flow.
|
|
124
123
|
- **`spectral serve` (relay mode)** — pi runs in-process inside the serve
|
|
125
124
|
daemon. All inference traffic is proxied through the Aexol backend's
|
|
126
125
|
`/v1/messages` and `/v1/chat/completions` endpoints, authenticated with the
|
|
127
126
|
per-machine machine JWT. The backend holds the upstream provider keys and
|
|
128
127
|
enforces a per-team `BaseModel` whitelist server-side. The local
|
|
129
|
-
`~/.pi/agent/auth.json` is **not read** in this mode
|
|
128
|
+
`~/.pi/agent/auth.json` is **not read** in this mode
|
|
129
|
+
(`AuthStorage.inMemory()`).
|
|
130
130
|
|
|
131
|
-
Why two paths? `spectral serve` is designed for shared / managed machines
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
131
|
+
Why two paths? `spectral serve` is designed for shared / managed machines where
|
|
132
|
+
the team controls which models are usable and operators don't want provider keys
|
|
133
|
+
sitting on every box. `spectral` (no subcommand) is the unmanaged TUI path and
|
|
134
|
+
behaves like a vanilla pi install.
|
|
135
135
|
|
|
136
136
|
## Configuration
|
|
137
137
|
|
|
138
|
-
| Path / variable
|
|
139
|
-
|
|
140
|
-
| `~/.spectral/config.json`
|
|
141
|
-
| `~/.spectral/machine.json`
|
|
142
|
-
| `~/.spectral/sessions.db`
|
|
143
|
-
| `SPECTRAL_CONFIG_DIR`
|
|
144
|
-
| `SPECTRAL_MCP_URL`
|
|
145
|
-
| `SPECTRAL_BACKEND_URL`
|
|
146
|
-
| `SPECTRAL_RELAY_URL`
|
|
147
|
-
|
|
148
|
-
Pi's own auth state for the local TUI path (Anthropic, OpenAI, etc.) lives
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
138
|
+
| Path / variable | Purpose |
|
|
139
|
+
| -------------------------- | ----------------------------------------------------------------------- |
|
|
140
|
+
| `~/.spectral/config.json` | Aexol MCP URL + team API key. Created by `spectral login`. Mode `0600`. |
|
|
141
|
+
| `~/.spectral/machine.json` | Machine identity + relay JWT. Created on first `spectral serve`. |
|
|
142
|
+
| `~/.spectral/sessions.db` | Local SQLite for projects, sessions, messages. |
|
|
143
|
+
| `SPECTRAL_CONFIG_DIR` | Override the directory above. |
|
|
144
|
+
| `SPECTRAL_MCP_URL` | Override the MCP URL at login time. |
|
|
145
|
+
| `SPECTRAL_BACKEND_URL` | Override the backend HTTP base for `spectral serve`. |
|
|
146
|
+
| `SPECTRAL_RELAY_URL` | Override the derived relay WebSocket URL. |
|
|
147
|
+
|
|
148
|
+
Pi's own auth state for the local TUI path (Anthropic, OpenAI, etc.) lives in
|
|
149
|
+
`~/.pi/agent/auth.json` on the same machine. Spectral never reads it and never
|
|
150
|
+
sends it anywhere. Note that `spectral serve` does **not** use this file — it
|
|
151
|
+
routes inference through the backend proxy instead (see
|
|
152
152
|
[How inference is routed](#how-inference-is-routed)).
|
|
153
153
|
|
|
154
154
|
## Multiple machines
|
|
155
155
|
|
|
156
156
|
You can run `spectral serve` on as many machines as you like under one team —
|
|
157
|
-
each gets its own machine identity and its own SQLite. The browser picker
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
157
|
+
each gets its own machine identity and its own SQLite. The browser picker lists
|
|
158
|
+
all of them; switching machines shows that machine's project list and session
|
|
159
|
+
history. Switching is a hard context change: the previous selection is cleared
|
|
160
|
+
so you don't accidentally talk to the wrong device.
|
|
161
161
|
|
|
162
162
|
## Troubleshooting
|
|
163
163
|
|
|
164
|
-
- **My machine isn't showing up in the browser picker.**
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
164
|
+
- **My machine isn't showing up in the browser picker.** Make sure
|
|
165
|
+
`spectral serve` is still running (it logs reconnect attempts to stderr). If
|
|
166
|
+
`spectral login` was run a long time ago and the team key was rotated, re-run
|
|
167
|
+
`spectral login`.
|
|
168
168
|
|
|
169
|
-
- **WebSocket keeps disconnecting.**
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
outbound WebSocket connections to the configured backend.
|
|
169
|
+
- **WebSocket keeps disconnecting.** The relay client reconnects automatically
|
|
170
|
+
with exponential backoff. Brief network blips are expected and handled. If the
|
|
171
|
+
backoff loop is constant, check that your team API key is still valid and that
|
|
172
|
+
your network allows outbound WebSocket connections to the configured backend.
|
|
174
173
|
|
|
175
|
-
- **`better-sqlite3` errors on first `spectral serve`.**
|
|
176
|
-
|
|
174
|
+
- **`better-sqlite3` errors on first `spectral serve`.** This usually means the
|
|
175
|
+
native module didn't compile during install. Try
|
|
177
176
|
`cd ~/.spectral && npm rebuild better-sqlite3`, or reinstall Spectral after
|
|
178
177
|
ensuring you have a working C/C++ toolchain (`make`, a C compiler, Python).
|
|
179
178
|
|
|
180
|
-
- **I want to revoke a machine.**
|
|
181
|
-
|
|
182
|
-
is
|
|
183
|
-
|
|
179
|
+
- **I want to revoke a machine.** Stop `spectral serve` on that device. Machine
|
|
180
|
+
revocation from the Aexol UI is on the roadmap; today the most reliable
|
|
181
|
+
approach is to rotate the team API key, which invalidates every machine's
|
|
182
|
+
relay JWT for that team.
|
|
184
183
|
|
|
185
184
|
## Privacy & data
|
|
186
185
|
|
|
187
186
|
- **Model API keys**:
|
|
188
187
|
- For `spectral` (CLI / TUI mode): live ONLY on the machine, in pi's own
|
|
189
188
|
`~/.pi/agent/auth.json`. Never read or transmitted by Spectral.
|
|
190
|
-
- For `spectral serve` (relay mode): live on the **backend**, not the
|
|
191
|
-
|
|
192
|
-
|
|
189
|
+
- For `spectral serve` (relay mode): live on the **backend**, not the machine.
|
|
190
|
+
The local machine holds only its machine JWT; provider keys are managed
|
|
191
|
+
centrally and scoped to the team's `BaseModel` whitelist.
|
|
193
192
|
- **Code, messages, file contents, generated artifacts** live ONLY on the
|
|
194
193
|
machine, in `~/.spectral/sessions.db` and the working directory you point
|
|
195
194
|
`spectral serve` at.
|
|
196
195
|
- **The backend stores**: machine identity (id, display name, hostname,
|
|
197
196
|
last-seen timestamps), the relay JWT issued at registration, and team
|
|
198
|
-
membership. For `spectral serve`, it also holds the centralized provider
|
|
199
|
-
|
|
200
|
-
machines.
|
|
197
|
+
membership. For `spectral serve`, it also holds the centralized provider API
|
|
198
|
+
keys used to fulfil inference requests on behalf of authorized machines.
|
|
201
199
|
- **The backend does not store**: prompts, responses, tool calls, files,
|
|
202
200
|
artifacts, or any other message-channel content.
|
|
203
201
|
|
|
@@ -209,5 +207,5 @@ MIT — see [LICENSE](./LICENSE).
|
|
|
209
207
|
|
|
210
208
|
- Website: <https://aexol.com>
|
|
211
209
|
- Source is currently hosted in an internal Aexol repository; public mirror TBD.
|
|
212
|
-
- Issues: please file them with your Aexol contact (a public issue tracker
|
|
213
|
-
|
|
210
|
+
- Issues: please file them with your Aexol contact (a public issue tracker is
|
|
211
|
+
not yet available).
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent discovery and configuration for the subagent delegation extension.
|
|
3
|
+
*
|
|
4
|
+
* Agent definitions are markdown files with YAML frontmatter:
|
|
5
|
+
*
|
|
6
|
+
* ---
|
|
7
|
+
* name: my-agent
|
|
8
|
+
* description: What this agent does
|
|
9
|
+
* tools: read, grep, find, ls
|
|
10
|
+
* model: claude-haiku-4-5
|
|
11
|
+
* ---
|
|
12
|
+
* System prompt for the agent goes here.
|
|
13
|
+
*
|
|
14
|
+
* Locations:
|
|
15
|
+
* ~/.spectral/agent/agents/*.md — User-level (always loaded)
|
|
16
|
+
* .spectral/agents/*.md — Project-level (opt-in via agentScope)
|
|
17
|
+
*/
|
|
18
|
+
export type AgentScope = "user" | "project" | "both";
|
|
19
|
+
export interface AgentConfig {
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
tools?: string[];
|
|
23
|
+
model?: string;
|
|
24
|
+
systemPrompt: string;
|
|
25
|
+
source: "user" | "project";
|
|
26
|
+
filePath: string;
|
|
27
|
+
}
|
|
28
|
+
export interface AgentDiscoveryResult {
|
|
29
|
+
agents: AgentConfig[];
|
|
30
|
+
projectAgentsDir: string | null;
|
|
31
|
+
}
|
|
32
|
+
export declare function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult;
|
|
33
|
+
export declare function formatAgentList(agents: AgentConfig[], maxItems: number): {
|
|
34
|
+
text: string;
|
|
35
|
+
remaining: number;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/agent/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAyED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,oBAAoB,CAoBnF;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAQrC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subagent Delegation Extension for Spectral
|
|
3
|
+
*
|
|
4
|
+
* Registers a `subagent` tool that allows the coding agent to delegate tasks
|
|
5
|
+
* to specialized sub-agents running in-process via `agentLoop()`.
|
|
6
|
+
*
|
|
7
|
+
* Each subagent invocation runs with its own fresh AgentContext (isolated
|
|
8
|
+
* context window), keeping the main conversation lean and focused.
|
|
9
|
+
*
|
|
10
|
+
* Three execution modes:
|
|
11
|
+
* - Single: { agent: "name", task: "..." }
|
|
12
|
+
* - Parallel: { tasks: [{ agent, task }, ...] } (max 8, 4 concurrent)
|
|
13
|
+
* - Chain: { chain: [{ agent, task: "... {previous} ..." }, ...] }
|
|
14
|
+
*
|
|
15
|
+
* Agent definitions live as markdown files with YAML frontmatter:
|
|
16
|
+
* - ~/.spectral/agent/agents/*.md (user-level, always loaded)
|
|
17
|
+
* - .spectral/agents/*.md (project-level, opt-in via agentScope)
|
|
18
|
+
*
|
|
19
|
+
* Subagents use an in-process `agentLoop()` for:
|
|
20
|
+
* - Clean context isolation (fresh messages array)
|
|
21
|
+
* - Combined system prompt (main agent + subagent-specific instructions)
|
|
22
|
+
* - Tool filtering (only the tools specified in agent config)
|
|
23
|
+
* - Model selection (session model preferred, agent-configured as fallback)
|
|
24
|
+
* - Signal propagation (abort passthrough)
|
|
25
|
+
* - Access to observational memory via the recall tool
|
|
26
|
+
*/
|
|
27
|
+
import { type ExtensionAPI } from "../sdk/coding-agent/index.js";
|
|
28
|
+
export default function subagentExtension(pi: ExtensionAPI): void;
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAWH,OAAO,EACN,KAAK,YAAY,EAEjB,MAAM,8BAA8B,CAAC;AAqetC,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAqThE"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @aexol/spectral — Coding agent that never sleeps
|
|
4
|
+
*
|
|
5
|
+
* Headless CLI wrapper — no TUI mode supported.
|
|
6
|
+
*
|
|
7
|
+
* Subcommand routing:
|
|
8
|
+
* - `spectral login` → interactive auth flow (writes ~/.spectral/config.json)
|
|
9
|
+
* - `spectral logout` → deletes ~/.spectral/config.json
|
|
10
|
+
* - `spectral serve` → start the Aexol relay WebSocket server (headless)
|
|
11
|
+
* - `spectral bind` → link directory to an Aexol Studio project
|
|
12
|
+
* - `spectral unbind` → remove Aexol Studio project binding
|
|
13
|
+
* - `spectral --version` / `--help` → branded short-circuits, no auth needed.
|
|
14
|
+
* - anything else → error with usage hint.
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `spectral bind` — link the current directory to an Aexol Studio project.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* spectral bind <project-id> [--team-id <id>] [--name <name>] [--force]
|
|
6
|
+
*
|
|
7
|
+
* Writes `.aexol/aexol.jsonc` so that `spectral` knows which Studio project
|
|
8
|
+
* this repository belongs to. By default it refuses to overwrite an existing
|
|
9
|
+
* binding; pass `--force` to rebind.
|
|
10
|
+
*/
|
|
11
|
+
export declare function runBind(args: string[]): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=bind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../src/commands/bind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyF3D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth login for CLI machine ownership (called from interactive `spectral login`).
|
|
3
|
+
*
|
|
4
|
+
* Flow:
|
|
5
|
+
* 1. Start a temporary HTTP server on a random localhost port.
|
|
6
|
+
* 2. Open the browser to `https://aexol.ai/cli-auth?port=<PORT>`.
|
|
7
|
+
* 3. Wait for the browser to redirect to `http://localhost:<PORT>?token=<JWT>`.
|
|
8
|
+
* 4. Save the token to `~/.spectral/config.json` as `userJwt`.
|
|
9
|
+
* 5. Shutdown the HTTP server and exit.
|
|
10
|
+
*
|
|
11
|
+
* On failure (timeout, network error, user closes browser), the server shuts
|
|
12
|
+
* down after a configurable timeout (default 120s).
|
|
13
|
+
*/
|
|
14
|
+
export declare function runLoginOAuth(): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=login-oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-oauth.d.ts","sourceRoot":"","sources":["../../src/commands/login-oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAsEH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA4EnD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `spectral login` — interactive authentication against the Aexol MCP backend.
|
|
3
|
+
*
|
|
4
|
+
* Flow:
|
|
5
|
+
* 1. Choose auth method: Team API key or OAuth (browser).
|
|
6
|
+
* 2a. API key: prompt for team API key (masked input). Verify the
|
|
7
|
+
* sk-aexol-team- prefix locally so we don't send obviously-wrong
|
|
8
|
+
* credentials. The API URL is taken from env or the hard default.
|
|
9
|
+
* 2b. OAuth: open browser for Aexol Studio authorization.
|
|
10
|
+
* 3. Verify reachability + auth by calling tools/list against the URL.
|
|
11
|
+
* 4. On success: persist to ~/.spectral/config.json (mode 0600).
|
|
12
|
+
*
|
|
13
|
+
* Exits non-zero on any failure so shell scripts can detect it.
|
|
14
|
+
*
|
|
15
|
+
* NOTE: pure logic lives in `performLogin` — the interactive `runLogin`
|
|
16
|
+
* wrapper delegates to it after collecting prompts. Tests target
|
|
17
|
+
* `performLogin` directly so we don't have to drive `@inquirer/prompts`.
|
|
18
|
+
*/
|
|
19
|
+
export interface PerformLoginOptions {
|
|
20
|
+
apiUrl: string;
|
|
21
|
+
teamApiKey: string;
|
|
22
|
+
}
|
|
23
|
+
export interface PerformLoginResult {
|
|
24
|
+
toolCount: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Pure login logic. Throws `Error` with one of these stable message prefixes:
|
|
28
|
+
* - "Invalid API key prefix" — local validation failed
|
|
29
|
+
* - "Invalid token" — server returned 401/403
|
|
30
|
+
* - "Authentication failed" — server rejected the request (other 4xx/5xx)
|
|
31
|
+
* - "Could not reach" — network error (DNS, refused connection, timeout)
|
|
32
|
+
*
|
|
33
|
+
* Tests assert on these substrings.
|
|
34
|
+
*/
|
|
35
|
+
export declare function performLogin(opts: PerformLoginOptions): Promise<PerformLoginResult>;
|
|
36
|
+
export declare function runLogin(): Promise<void>;
|
|
37
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAgBH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqCzF;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAyE9C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `spectral logout` — remove the persisted Aexol credentials.
|
|
3
|
+
*
|
|
4
|
+
* Idempotent: missing config is not an error. Always exits 0 unless the
|
|
5
|
+
* filesystem itself misbehaves (in which case we surface the OS error).
|
|
6
|
+
*/
|
|
7
|
+
export declare function runLogout(): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=logout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAa/C"}
|