@aexol/spectral 0.8.5 → 0.8.7
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/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +11 -11
- package/dist/cli.js +1 -1
- package/dist/commands/serve.d.ts +3 -3
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +5 -2
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/designer/index.d.ts +3 -3
- package/dist/designer/index.d.ts.map +1 -1
- package/dist/designer/index.js +9 -9
- package/dist/extensions/aexol-mcp.d.ts +6 -6
- package/dist/extensions/aexol-mcp.d.ts.map +1 -1
- package/dist/extensions/aexol-mcp.js +12 -12
- package/dist/extensions/kanban-bridge.d.ts +2 -2
- package/dist/extensions/kanban-bridge.d.ts.map +1 -1
- package/dist/extensions/kanban-bridge.js +3 -3
- package/dist/extensions/openrouter-attribution.d.ts +1 -1
- package/dist/extensions/openrouter-attribution.d.ts.map +1 -1
- package/dist/extensions/openrouter-attribution.js +2 -2
- package/dist/extensions/spectral-vision-fallback.d.ts +1 -1
- package/dist/extensions/spectral-vision-fallback.d.ts.map +1 -1
- package/dist/extensions/spectral-vision-fallback.js +3 -3
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/mcp/commands.d.ts +1 -1
- package/dist/mcp/commands.d.ts.map +1 -1
- package/dist/mcp/commands.js +1 -1
- package/dist/mcp/config.d.ts +5 -5
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +15 -15
- package/dist/mcp/host-html-template.js +3 -3
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +15 -13
- package/dist/mcp/init.d.ts +1 -1
- package/dist/mcp/init.d.ts.map +1 -1
- package/dist/mcp/init.js +4 -4
- package/dist/mcp/mcp-oauth-provider.js +1 -1
- package/dist/mcp/proxy-modes.d.ts +1 -1
- package/dist/mcp/proxy-modes.d.ts.map +1 -1
- package/dist/mcp/proxy-modes.js +2 -2
- 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/tool-registrar.js +1 -1
- package/dist/mcp/ui-server.js +1 -1
- package/dist/mcp/ui-stream-types.d.ts +11 -11
- package/dist/mcp/ui-stream-types.d.ts.map +1 -1
- package/dist/mcp/ui-stream-types.js +5 -5
- package/dist/mcp/utils.d.ts +2 -2
- package/dist/mcp/utils.d.ts.map +1 -1
- package/dist/mcp/utils.js +10 -10
- package/dist/mcp-client.d.ts +1 -1
- package/dist/mcp-client.js +1 -1
- package/dist/memory/commands/status.d.ts +1 -1
- package/dist/memory/commands/status.d.ts.map +1 -1
- package/dist/memory/commands/status.js +2 -2
- package/dist/memory/commands/view.d.ts +1 -1
- package/dist/memory/commands/view.d.ts.map +1 -1
- package/dist/memory/commands/view.js +2 -2
- package/dist/memory/hooks/compaction-hook.d.ts +1 -1
- package/dist/memory/hooks/compaction-hook.d.ts.map +1 -1
- package/dist/memory/hooks/compaction-hook.js +5 -5
- package/dist/memory/hooks/compaction-trigger.d.ts +1 -1
- package/dist/memory/hooks/compaction-trigger.d.ts.map +1 -1
- package/dist/memory/hooks/compaction-trigger.js +3 -3
- package/dist/memory/hooks/observer-trigger.d.ts +1 -1
- package/dist/memory/hooks/observer-trigger.d.ts.map +1 -1
- package/dist/memory/hooks/observer-trigger.js +4 -4
- package/dist/memory/index.d.ts +1 -1
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +9 -9
- package/dist/memory/tools/read-project-observations.d.ts +1 -1
- package/dist/memory/tools/read-project-observations.d.ts.map +1 -1
- package/dist/memory/tools/read-project-observations.js +2 -2
- package/dist/memory/tools/recall-observation.d.ts +1 -1
- package/dist/memory/tools/recall-observation.d.ts.map +1 -1
- package/dist/memory/tools/recall-observation.js +2 -2
- package/dist/memory/tools/write-project-observation.d.ts +1 -1
- package/dist/memory/tools/write-project-observation.d.ts.map +1 -1
- package/dist/memory/tools/write-project-observation.js +2 -2
- package/dist/preflight.d.ts +1 -1
- package/dist/preflight.js +1 -1
- package/dist/relay/auto-research.d.ts +2 -2
- package/dist/relay/auto-research.js +34 -34
- package/dist/relay/dispatcher.d.ts +15 -6
- package/dist/relay/dispatcher.d.ts.map +1 -1
- package/dist/relay/dispatcher.js +33 -6
- package/dist/relay/models-fetch.d.ts +1 -1
- package/dist/relay/models-fetch.js +4 -4
- package/dist/sdk/ai/types.d.ts +1 -1
- package/dist/sdk/ai/utils/oauth/openai-codex.d.ts +1 -1
- package/dist/sdk/ai/utils/oauth/openai-codex.js +2 -2
- package/dist/sdk/coding-agent/core/agent-session.d.ts +2 -2
- package/dist/sdk/coding-agent/core/agent-session.js +3 -3
- package/dist/sdk/coding-agent/core/auth-storage.d.ts +2 -2
- package/dist/sdk/coding-agent/core/auth-storage.js +2 -2
- package/dist/sdk/coding-agent/core/bash-executor.js +1 -1
- package/dist/sdk/coding-agent/core/compaction/branch-summarization.js +1 -1
- package/dist/sdk/coding-agent/core/compaction/compaction.js +1 -1
- package/dist/sdk/coding-agent/core/extensions/loader.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/extensions/loader.js +18 -22
- package/dist/sdk/coding-agent/core/extensions/runner.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/extensions/runner.js +1 -1
- package/dist/sdk/coding-agent/core/extensions/types.d.ts +9 -9
- package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/package-manager.d.ts +1 -1
- package/dist/sdk/coding-agent/core/package-manager.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/package-manager.js +14 -14
- package/dist/sdk/coding-agent/core/sdk.d.ts +1 -1
- package/dist/sdk/coding-agent/core/sdk.js +2 -2
- package/dist/sdk/coding-agent/core/session-manager.d.ts +2 -2
- package/dist/sdk/coding-agent/core/session-manager.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/system-prompt.js +7 -7
- package/dist/sdk/coding-agent/core/tools/bash.d.ts +2 -2
- package/dist/sdk/coding-agent/core/tools/bash.js +3 -3
- package/dist/sdk/coding-agent/core/tools/output-accumulator.js +1 -1
- package/dist/sdk/coding-agent/migrations.d.ts +1 -1
- package/dist/sdk/coding-agent/migrations.js +4 -4
- package/dist/sdk/coding-agent/modes/print-mode.d.ts +2 -2
- package/dist/sdk/coding-agent/modes/print-mode.js +2 -2
- package/dist/sdk/coding-agent/utils/clipboard-image.js +1 -1
- 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/version-check.d.ts +5 -5
- package/dist/sdk/coding-agent/utils/version-check.d.ts.map +1 -1
- package/dist/sdk/coding-agent/utils/version-check.js +7 -7
- package/dist/sdk/coding-agent/utils/windows-self-update.js +1 -1
- package/dist/server/agent-bridge.d.ts +35 -35
- package/dist/server/agent-bridge.d.ts.map +1 -1
- package/dist/server/agent-bridge.js +59 -59
- 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/sessions.d.ts +1 -1
- 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 +2 -2
- package/dist/server/paths.js +2 -2
- package/dist/server/session-stream.d.ts +25 -25
- package/dist/server/session-stream.d.ts.map +1 -1
- package/dist/server/session-stream.js +66 -38
- package/dist/server/shutdown.d.ts +3 -3
- package/dist/server/shutdown.d.ts.map +1 -1
- package/dist/server/shutdown.js +3 -3
- package/dist/server/storage.d.ts +4 -4
- package/dist/server/storage.js +6 -6
- package/dist/server/wire.d.ts +8 -8
- package/dist/server/wire.d.ts.map +1 -1
- package/dist/server/wire.js +1 -1
- package/package.json +1 -1
- package/dist/sdk/coding-agent/utils/pi-user-agent.d.ts +0 -2
- package/dist/sdk/coding-agent/utils/pi-user-agent.d.ts.map +0 -1
- package/dist/sdk/coding-agent/utils/pi-user-agent.js +0 -3
package/dist/mcp/config.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { McpConfig, ServerEntry, ImportKind, ServerProvenance } from "./types.js";
|
|
2
2
|
interface ConfigSourceSpec {
|
|
3
|
-
id: "shared-global" | "
|
|
3
|
+
id: "shared-global" | "spectral-global" | "shared-project" | "spectral-project";
|
|
4
4
|
label: string;
|
|
5
5
|
readPath: string;
|
|
6
6
|
writePath: string;
|
|
@@ -21,7 +21,7 @@ export interface DiscoveredImportConfig {
|
|
|
21
21
|
export interface ConfigDiscoverySource extends ConfigDiscoveryPath {
|
|
22
22
|
id: ConfigSourceSpec["id"];
|
|
23
23
|
scope: ConfigSourceSpec["scope"];
|
|
24
|
-
kind: "shared" | "
|
|
24
|
+
kind: "shared" | "spectral";
|
|
25
25
|
serverCount: number;
|
|
26
26
|
}
|
|
27
27
|
export interface ImportConfigSummary extends DiscoveredImportConfig {
|
|
@@ -41,7 +41,7 @@ export interface McpDiscoverySummary {
|
|
|
41
41
|
hasAnyConfig: boolean;
|
|
42
42
|
hasAnyDetectedPaths: boolean;
|
|
43
43
|
hasSharedServers: boolean;
|
|
44
|
-
|
|
44
|
+
hasSpectralOwnedServers: boolean;
|
|
45
45
|
totalServerCount: number;
|
|
46
46
|
fingerprint: string;
|
|
47
47
|
repoPrompt: RepoPromptDiscovery;
|
|
@@ -54,10 +54,10 @@ export interface ConfigWritePreview {
|
|
|
54
54
|
afterText: string;
|
|
55
55
|
diffText: string;
|
|
56
56
|
}
|
|
57
|
-
export declare function
|
|
57
|
+
export declare function getSpectralGlobalConfigPath(overridePath?: string): string;
|
|
58
58
|
export declare function getGenericGlobalConfigPath(): string;
|
|
59
59
|
export declare function getProjectConfigPath(cwd?: string): string;
|
|
60
|
-
export declare function
|
|
60
|
+
export declare function getProjectSpectralConfigPath(cwd?: string): string;
|
|
61
61
|
export declare function getConfigDiscoveryPaths(overridePath?: string): ConfigDiscoveryPath[];
|
|
62
62
|
export declare function findAvailableImportConfigs(cwd?: string): DiscoveredImportConfig[];
|
|
63
63
|
export declare function getMcpDiscoverySummary(overridePath?: string, cwd?: string): McpDiscoverySummary;
|
package/dist/mcp/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAe,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAuBpG,UAAU,gBAAgB;IACxB,EAAE,EAAE,eAAe,GAAG,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/config.js
CHANGED
|
@@ -22,7 +22,7 @@ const IMPORT_PATHS = {
|
|
|
22
22
|
windsurf: [join(homedir(), ".windsurf", "mcp.json")],
|
|
23
23
|
vscode: [".vscode/mcp.json"],
|
|
24
24
|
};
|
|
25
|
-
export function
|
|
25
|
+
export function getSpectralGlobalConfigPath(overridePath) {
|
|
26
26
|
return overridePath ? resolve(overridePath) : getAgentPath("mcp.json");
|
|
27
27
|
}
|
|
28
28
|
export function getGenericGlobalConfigPath() {
|
|
@@ -31,7 +31,7 @@ export function getGenericGlobalConfigPath() {
|
|
|
31
31
|
export function getProjectConfigPath(cwd = process.cwd()) {
|
|
32
32
|
return resolve(cwd, PROJECT_CONFIG_NAME);
|
|
33
33
|
}
|
|
34
|
-
export function
|
|
34
|
+
export function getProjectSpectralConfigPath(cwd = process.cwd()) {
|
|
35
35
|
return resolve(cwd, PROJECT_MCP_CONFIG_NAME);
|
|
36
36
|
}
|
|
37
37
|
export function getConfigDiscoveryPaths(overridePath) {
|
|
@@ -60,7 +60,7 @@ export function getMcpDiscoverySummary(overridePath, cwd = process.cwd()) {
|
|
|
60
60
|
path: source.readPath,
|
|
61
61
|
exists: existsSync(source.readPath),
|
|
62
62
|
scope: source.scope,
|
|
63
|
-
kind: source.shared ? "shared" : "
|
|
63
|
+
kind: source.shared ? "shared" : "spectral",
|
|
64
64
|
serverCount: loaded ? Object.keys(loaded.mcpServers).length : 0,
|
|
65
65
|
};
|
|
66
66
|
});
|
|
@@ -78,7 +78,7 @@ export function getMcpDiscoverySummary(overridePath, cwd = process.cwd()) {
|
|
|
78
78
|
.filter((value) => value !== null);
|
|
79
79
|
const totalServerCount = sources.reduce((sum, source) => sum + source.serverCount, 0);
|
|
80
80
|
const hasSharedServers = sources.some((source) => source.kind === "shared" && source.serverCount > 0);
|
|
81
|
-
const
|
|
81
|
+
const hasSpectralOwnedServers = sources.some((source) => source.kind === "spectral" && source.serverCount > 0);
|
|
82
82
|
const hasAnyDetectedPaths = sources.some((source) => source.exists) || imports.length > 0;
|
|
83
83
|
const hasAnyConfig = totalServerCount > 0 || imports.some((entry) => entry.serverCount > 0) || hasAnyDetectedPaths;
|
|
84
84
|
const summaryWithoutRepoPrompt = {
|
|
@@ -87,7 +87,7 @@ export function getMcpDiscoverySummary(overridePath, cwd = process.cwd()) {
|
|
|
87
87
|
hasAnyConfig,
|
|
88
88
|
hasAnyDetectedPaths,
|
|
89
89
|
hasSharedServers,
|
|
90
|
-
|
|
90
|
+
hasSpectralOwnedServers,
|
|
91
91
|
totalServerCount,
|
|
92
92
|
};
|
|
93
93
|
const fingerprint = JSON.stringify({
|
|
@@ -111,9 +111,9 @@ export function loadMcpConfig(overridePath) {
|
|
|
111
111
|
return config;
|
|
112
112
|
}
|
|
113
113
|
function getConfigSources(overridePath, cwd = process.cwd()) {
|
|
114
|
-
const userPath =
|
|
114
|
+
const userPath = getSpectralGlobalConfigPath(overridePath);
|
|
115
115
|
const projectPath = getProjectConfigPath(cwd);
|
|
116
|
-
const
|
|
116
|
+
const projectSpectralPath = getProjectSpectralConfigPath(cwd);
|
|
117
117
|
const sources = [];
|
|
118
118
|
if (GENERIC_GLOBAL_CONFIG_PATH !== userPath) {
|
|
119
119
|
sources.push({
|
|
@@ -128,7 +128,7 @@ function getConfigSources(overridePath, cwd = process.cwd()) {
|
|
|
128
128
|
});
|
|
129
129
|
}
|
|
130
130
|
sources.push({
|
|
131
|
-
id: "
|
|
131
|
+
id: "spectral-global",
|
|
132
132
|
label: "Pi global override",
|
|
133
133
|
readPath: userPath,
|
|
134
134
|
writePath: userPath,
|
|
@@ -147,12 +147,12 @@ function getConfigSources(overridePath, cwd = process.cwd()) {
|
|
|
147
147
|
scope: "project",
|
|
148
148
|
});
|
|
149
149
|
}
|
|
150
|
-
if (
|
|
150
|
+
if (projectSpectralPath !== userPath && projectSpectralPath !== projectPath) {
|
|
151
151
|
sources.push({
|
|
152
|
-
id: "
|
|
152
|
+
id: "spectral-project",
|
|
153
153
|
label: "project Pi override",
|
|
154
|
-
readPath:
|
|
155
|
-
writePath:
|
|
154
|
+
readPath: projectSpectralPath,
|
|
155
|
+
writePath: projectSpectralPath,
|
|
156
156
|
kind: "project",
|
|
157
157
|
shared: false,
|
|
158
158
|
scope: "project",
|
|
@@ -412,7 +412,7 @@ function detectRepoPrompt(summary, cwd = process.cwd()) {
|
|
|
412
412
|
};
|
|
413
413
|
}
|
|
414
414
|
export function previewCompatibilityImports(importKinds, overridePath) {
|
|
415
|
-
const targetPath =
|
|
415
|
+
const targetPath = getSpectralGlobalConfigPath(overridePath);
|
|
416
416
|
const raw = readRawConfigObject(targetPath);
|
|
417
417
|
const currentImports = Array.isArray(raw.imports) ? raw.imports.filter((value) => typeof value === "string") : [];
|
|
418
418
|
const merged = [...new Set([...currentImports, ...importKinds])];
|
|
@@ -421,7 +421,7 @@ export function previewCompatibilityImports(importKinds, overridePath) {
|
|
|
421
421
|
return buildConfigWritePreview(targetPath, nextRaw);
|
|
422
422
|
}
|
|
423
423
|
export function ensureCompatibilityImports(importKinds, overridePath) {
|
|
424
|
-
const targetPath =
|
|
424
|
+
const targetPath = getSpectralGlobalConfigPath(overridePath);
|
|
425
425
|
const raw = readRawConfigObject(targetPath);
|
|
426
426
|
const currentImports = Array.isArray(raw.imports) ? raw.imports.filter((value) => typeof value === "string") : [];
|
|
427
427
|
const merged = [...new Set([...currentImports, ...importKinds])];
|
|
@@ -469,7 +469,7 @@ export function writeSharedServerEntry(filePath, serverName, entry) {
|
|
|
469
469
|
}
|
|
470
470
|
export function getServerProvenance(overridePath) {
|
|
471
471
|
const provenance = new Map();
|
|
472
|
-
const userPath =
|
|
472
|
+
const userPath = getSpectralGlobalConfigPath(overridePath);
|
|
473
473
|
for (const source of getConfigSources(overridePath)) {
|
|
474
474
|
const loaded = readValidatedConfig(source.readPath, `MCP config from ${source.readPath}`);
|
|
475
475
|
if (!loaded)
|
|
@@ -102,8 +102,8 @@ export function buildHostHtmlTemplate(input) {
|
|
|
102
102
|
const ALLOW_ATTRIBUTE = ${allowAttribute};
|
|
103
103
|
const REQUIRE_TOOL_CONSENT = ${requireToolConsent};
|
|
104
104
|
const CACHE_TOOL_CONSENT = ${cacheToolConsent};
|
|
105
|
-
const STREAM_CONTEXT_KEY = "
|
|
106
|
-
const STREAM_PATCH_METHOD = "notifications/
|
|
105
|
+
const STREAM_CONTEXT_KEY = "spectral-mcp-adapter/stream";
|
|
106
|
+
const STREAM_PATCH_METHOD = "notifications/spectral-mcp-adapter/ui-result-patch";
|
|
107
107
|
|
|
108
108
|
const iframe = document.getElementById("mcp-app");
|
|
109
109
|
const statusNode = document.getElementById("status");
|
|
@@ -147,7 +147,7 @@ export function buildHostHtmlTemplate(input) {
|
|
|
147
147
|
|
|
148
148
|
const bridge = new AppBridge(
|
|
149
149
|
null,
|
|
150
|
-
{ name: "
|
|
150
|
+
{ name: "spectral", version: "1.0.0" },
|
|
151
151
|
{ serverTools: {}, openLinks: {}, logging: {}, updateModelContext: {}, message: {} },
|
|
152
152
|
{ hostContext: HOST_CONTEXT }
|
|
153
153
|
);
|
package/dist/mcp/index.d.ts
CHANGED
package/dist/mcp/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,8BAA8B,CAAC;AAa3E,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,GAAG,EAAE,YAAY,QAySnD"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { setLiveMcpStateGetter } from "./state-getter.js";
|
|
1
2
|
import { Type } from "typebox";
|
|
2
3
|
import { showTools, reconnectServers, authenticateServer, showSetupStatus } from "./commands.js";
|
|
3
4
|
import { loadMcpConfig } from "./config.js";
|
|
@@ -7,8 +8,9 @@ import { loadMetadataCache } from "./metadata-cache.js";
|
|
|
7
8
|
import { executeCall, executeConnect, executeDescribe, executeList, executeSearch, executeStatus, executeUiMessages } from "./proxy-modes.js";
|
|
8
9
|
import { getConfigPathFromArgv, truncateAtWord } from "./utils.js";
|
|
9
10
|
import { initializeOAuth, shutdownOAuth } from "./mcp-auth-flow.js";
|
|
10
|
-
export default function mcpAdapter(
|
|
11
|
+
export default function mcpAdapter(ext) {
|
|
11
12
|
let state = null;
|
|
13
|
+
setLiveMcpStateGetter(() => state);
|
|
12
14
|
let initPromise = null;
|
|
13
15
|
let lifecycleGeneration = 0;
|
|
14
16
|
async function shutdownState(currentState, reason) {
|
|
@@ -53,7 +55,7 @@ export default function mcpAdapter(pi) {
|
|
|
53
55
|
|| directSpecs.length === 0
|
|
54
56
|
|| missingConfiguredDirectToolServers.length > 0;
|
|
55
57
|
for (const spec of directSpecs) {
|
|
56
|
-
|
|
58
|
+
ext.registerTool({
|
|
57
59
|
name: spec.prefixedName,
|
|
58
60
|
label: `MCP: ${spec.originalName}`,
|
|
59
61
|
description: spec.description || "(no description)",
|
|
@@ -62,12 +64,12 @@ export default function mcpAdapter(pi) {
|
|
|
62
64
|
execute: createDirectToolExecutor(() => state, () => initPromise, spec),
|
|
63
65
|
});
|
|
64
66
|
}
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
+
const getSpectralTools = () => ext.getAllTools();
|
|
68
|
+
ext.registerFlag("mcp-config", {
|
|
67
69
|
description: "Path to MCP config file",
|
|
68
70
|
type: "string",
|
|
69
71
|
});
|
|
70
|
-
|
|
72
|
+
ext.on("session_start", async (_event, ctx) => {
|
|
71
73
|
const generation = ++lifecycleGeneration;
|
|
72
74
|
const previousState = state;
|
|
73
75
|
state = null;
|
|
@@ -87,7 +89,7 @@ export default function mcpAdapter(pi) {
|
|
|
87
89
|
await initializeOAuth().catch(err => {
|
|
88
90
|
console.error("MCP OAuth initialization failed:", err);
|
|
89
91
|
});
|
|
90
|
-
const promise = initializeMcp(
|
|
92
|
+
const promise = initializeMcp(ext, ctx);
|
|
91
93
|
initPromise = promise;
|
|
92
94
|
promise.then(async (nextState) => {
|
|
93
95
|
if (generation !== lifecycleGeneration || initPromise !== promise) {
|
|
@@ -113,7 +115,7 @@ export default function mcpAdapter(pi) {
|
|
|
113
115
|
initPromise = null;
|
|
114
116
|
});
|
|
115
117
|
});
|
|
116
|
-
|
|
118
|
+
ext.on("session_shutdown", async () => {
|
|
117
119
|
++lifecycleGeneration;
|
|
118
120
|
const currentState = state;
|
|
119
121
|
state = null;
|
|
@@ -128,7 +130,7 @@ export default function mcpAdapter(pi) {
|
|
|
128
130
|
console.error("MCP: session shutdown cleanup failed", error);
|
|
129
131
|
}
|
|
130
132
|
});
|
|
131
|
-
|
|
133
|
+
ext.registerCommand("mcp", {
|
|
132
134
|
description: "Show MCP server status",
|
|
133
135
|
handler: async (args, ctx) => {
|
|
134
136
|
if (!state && initPromise) {
|
|
@@ -158,17 +160,17 @@ export default function mcpAdapter(pi) {
|
|
|
158
160
|
await showTools(state, ctx);
|
|
159
161
|
break;
|
|
160
162
|
case "setup":
|
|
161
|
-
await showSetupStatus(state,
|
|
163
|
+
await showSetupStatus(state, ext, ctx, earlyConfigPath);
|
|
162
164
|
break;
|
|
163
165
|
case "status":
|
|
164
166
|
case "":
|
|
165
167
|
default:
|
|
166
|
-
await showSetupStatus(state,
|
|
168
|
+
await showSetupStatus(state, ext, ctx, earlyConfigPath);
|
|
167
169
|
break;
|
|
168
170
|
}
|
|
169
171
|
},
|
|
170
172
|
});
|
|
171
|
-
|
|
173
|
+
ext.registerCommand("mcp-auth", {
|
|
172
174
|
description: "Authenticate with an MCP server (OAuth)",
|
|
173
175
|
handler: async (args, ctx) => {
|
|
174
176
|
const serverName = args?.trim();
|
|
@@ -197,7 +199,7 @@ export default function mcpAdapter(pi) {
|
|
|
197
199
|
},
|
|
198
200
|
});
|
|
199
201
|
if (shouldRegisterProxyTool) {
|
|
200
|
-
|
|
202
|
+
ext.registerTool({
|
|
201
203
|
name: "mcp",
|
|
202
204
|
label: "MCP",
|
|
203
205
|
description: buildProxyDescription(earlyConfig, earlyCache, directSpecs),
|
|
@@ -253,7 +255,7 @@ export default function mcpAdapter(pi) {
|
|
|
253
255
|
return executeUiMessages(state);
|
|
254
256
|
}
|
|
255
257
|
if (params.tool) {
|
|
256
|
-
return executeCall(state, params.tool, parsedArgs, params.server,
|
|
258
|
+
return executeCall(state, params.tool, parsedArgs, params.server, getSpectralTools);
|
|
257
259
|
}
|
|
258
260
|
if (params.restart) {
|
|
259
261
|
return executeConnect(state, params.restart);
|
package/dist/mcp/init.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ExtensionAPI, ExtensionContext } from "../sdk/coding-agent/index.js";
|
|
2
2
|
import type { McpExtensionState } from "./state.js";
|
|
3
|
-
export declare function initializeMcp(
|
|
3
|
+
export declare function initializeMcp(ext: ExtensionAPI, ctx: ExtensionContext): Promise<McpExtensionState>;
|
|
4
4
|
export declare function updateServerMetadata(state: McpExtensionState, serverName: string): void;
|
|
5
5
|
export declare function updateMetadataCache(state: McpExtensionState, serverName: string): void;
|
|
6
6
|
export declare function flushMetadataCache(state: McpExtensionState): void;
|
package/dist/mcp/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/mcp/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA0BpD,wBAAsB,aAAa,CACjC,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/mcp/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA0BpD,wBAAsB,aAAa,CACjC,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAsL5B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAWvF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CA+BtF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAMjE;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAU9D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhG;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoChG"}
|
package/dist/mcp/init.js
CHANGED
|
@@ -10,8 +10,8 @@ import { openUrl, parallelLimit } from "./utils.js";
|
|
|
10
10
|
import { logger } from "./logger.js";
|
|
11
11
|
import { getMissingConfiguredDirectToolServers } from "./direct-tools.js";
|
|
12
12
|
const FAILURE_BACKOFF_MS = 60 * 1000;
|
|
13
|
-
export async function initializeMcp(
|
|
14
|
-
const configPath =
|
|
13
|
+
export async function initializeMcp(ext, ctx) {
|
|
14
|
+
const configPath = ext.getFlag("mcp-config");
|
|
15
15
|
const config = loadMcpConfig(configPath);
|
|
16
16
|
const manager = new McpServerManager();
|
|
17
17
|
const samplingAutoApprove = config.settings?.samplingAutoApprove === true;
|
|
@@ -40,9 +40,9 @@ export async function initializeMcp(pi, ctx) {
|
|
|
40
40
|
consentManager,
|
|
41
41
|
uiServer: null,
|
|
42
42
|
completedUiSessions: [],
|
|
43
|
-
openBrowser: (url) => openUrl(
|
|
43
|
+
openBrowser: (url) => openUrl(ext, url, process.env.BROWSER),
|
|
44
44
|
ui,
|
|
45
|
-
sendMessage: (message, options) =>
|
|
45
|
+
sendMessage: (message, options) => ext.sendMessage(message, options),
|
|
46
46
|
};
|
|
47
47
|
const serverEntries = Object.entries(config.mcpServers);
|
|
48
48
|
if (serverEntries.length === 0) {
|
|
@@ -75,7 +75,7 @@ export class McpOAuthProvider {
|
|
|
75
75
|
return {
|
|
76
76
|
redirect_uris: [redirectUrl],
|
|
77
77
|
client_name: "Pi Coding Agent",
|
|
78
|
-
client_uri: "https://github.com/nicobailon/
|
|
78
|
+
client_uri: "https://github.com/nicobailon/spectral-mcp-adapter",
|
|
79
79
|
grant_types: ["authorization_code", "refresh_token"],
|
|
80
80
|
response_types: ["code"],
|
|
81
81
|
token_endpoint_auth_method: this.config.clientSecret ? "client_secret_post" : "none",
|
|
@@ -7,6 +7,6 @@ export declare function executeDescribe(state: McpExtensionState, toolName: stri
|
|
|
7
7
|
export declare function executeSearch(state: McpExtensionState, query: string, regex?: boolean, server?: string, includeSchemas?: boolean): ProxyToolResult;
|
|
8
8
|
export declare function executeList(state: McpExtensionState, server: string): ProxyToolResult;
|
|
9
9
|
export declare function executeConnect(state: McpExtensionState, serverName: string): Promise<ProxyToolResult>;
|
|
10
|
-
export declare function executeCall(state: McpExtensionState, toolName: string, args?: Record<string, unknown>, serverOverride?: string,
|
|
10
|
+
export declare function executeCall(state: McpExtensionState, toolName: string, args?: Record<string, unknown>, serverOverride?: string, getSpectralTools?: () => ToolInfo[]): Promise<ProxyToolResult>;
|
|
11
11
|
export {};
|
|
12
12
|
//# sourceMappingURL=proxy-modes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-modes.d.ts","sourceRoot":"","sources":["../../src/mcp/proxy-modes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAUpD,KAAK,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAoDhE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,eAAe,CA4E3E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,eAAe,CAsDvE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAuC3F;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,OAAO,GACvB,eAAe,CAiFjB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAqDrF;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAsD3G;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,cAAc,CAAC,EAAE,MAAM,EACvB,
|
|
1
|
+
{"version":3,"file":"proxy-modes.d.ts","sourceRoot":"","sources":["../../src/mcp/proxy-modes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAUpD,KAAK,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAoDhE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,eAAe,CA4E3E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,eAAe,CAsDvE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAuC3F;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,OAAO,GACvB,eAAe,CAiFjB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAqDrF;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAsD3G;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,cAAc,CAAC,EAAE,MAAM,EACvB,gBAAgB,CAAC,EAAE,MAAM,QAAQ,EAAE,GAClC,OAAO,CAAC,eAAe,CAAC,CAkW1B"}
|
package/dist/mcp/proxy-modes.js
CHANGED
|
@@ -377,7 +377,7 @@ export async function executeConnect(state, serverName) {
|
|
|
377
377
|
};
|
|
378
378
|
}
|
|
379
379
|
}
|
|
380
|
-
export async function executeCall(state, toolName, args, serverOverride,
|
|
380
|
+
export async function executeCall(state, toolName, args, serverOverride, getSpectralTools) {
|
|
381
381
|
let serverName = serverOverride;
|
|
382
382
|
let toolMeta;
|
|
383
383
|
let autoAuthAttempted = false;
|
|
@@ -492,7 +492,7 @@ export async function executeCall(state, toolName, args, serverOverride, getPiTo
|
|
|
492
492
|
}
|
|
493
493
|
if (!serverName || !toolMeta) {
|
|
494
494
|
const nativeTool = !serverOverride
|
|
495
|
-
?
|
|
495
|
+
? getSpectralTools?.().find((tool) => tool.name === toolName && tool.name !== "mcp")
|
|
496
496
|
: undefined;
|
|
497
497
|
if (nativeTool) {
|
|
498
498
|
return {
|
|
@@ -114,7 +114,7 @@ export class McpServerManager {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
createClient(serverName) {
|
|
117
|
-
const client = new Client({ name: `
|
|
117
|
+
const client = new Client({ name: `spectral-mcp-${serverName}`, version: "1.0.0" }, this.samplingConfig ? { capabilities: { sampling: {} } } : undefined);
|
|
118
118
|
if (this.samplingConfig) {
|
|
119
119
|
registerSamplingHandler(client, { ...this.samplingConfig, serverName });
|
|
120
120
|
}
|
|
@@ -157,7 +157,7 @@ export class McpServerManager {
|
|
|
157
157
|
});
|
|
158
158
|
try {
|
|
159
159
|
// Create a test client to verify the transport works
|
|
160
|
-
const testClient = new Client({ name: "
|
|
160
|
+
const testClient = new Client({ name: "spectral-mcp-probe", version: "2.1.2" });
|
|
161
161
|
await testClient.connect(streamableTransport);
|
|
162
162
|
await testClient.close().catch(() => { });
|
|
163
163
|
// Close probe transport before creating fresh one
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny shared getter for the live `McpExtensionState`.
|
|
3
|
+
*
|
|
4
|
+
* Set by the MCP adapter extension factory (`mcp/index.ts`) on construction
|
|
5
|
+
* so `serve.ts` can read the current state snapshot without importing the
|
|
6
|
+
* full adapter module. Separated into a standalone file so neither side
|
|
7
|
+
* picks up the other's transitive dependencies.
|
|
8
|
+
*/
|
|
9
|
+
import type { McpExtensionState } from "../mcp/state.js";
|
|
10
|
+
/** Read the live MCP state. Returns null until the adapter is constructed. */
|
|
11
|
+
export declare function getLiveMcpState(): McpExtensionState | null;
|
|
12
|
+
/** Set by the MCP adapter factory at construction time. */
|
|
13
|
+
export declare function setLiveMcpStateGetter(getter: () => McpExtensionState | null): void;
|
|
14
|
+
//# sourceMappingURL=state-getter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-getter.d.ts","sourceRoot":"","sources":["../../src/mcp/state-getter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAQzD,8EAA8E;AAC9E,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAE1D;AAED,2DAA2D;AAC3D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAElF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny shared getter for the live `McpExtensionState`.
|
|
3
|
+
*
|
|
4
|
+
* Set by the MCP adapter extension factory (`mcp/index.ts`) on construction
|
|
5
|
+
* so `serve.ts` can read the current state snapshot without importing the
|
|
6
|
+
* full adapter module. Separated into a standalone file so neither side
|
|
7
|
+
* picks up the other's transitive dependencies.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Current getter, injected by `mcp/index.ts` at adapter construction time.
|
|
11
|
+
* `null` means the adapter hasn't loaded yet or hasn't run `session_start`.
|
|
12
|
+
*/
|
|
13
|
+
let _getter = null;
|
|
14
|
+
/** Read the live MCP state. Returns null until the adapter is constructed. */
|
|
15
|
+
export function getLiveMcpState() {
|
|
16
|
+
return _getter?.() ?? null;
|
|
17
|
+
}
|
|
18
|
+
/** Set by the MCP adapter factory at construction time. */
|
|
19
|
+
export function setLiveMcpStateGetter(getter) {
|
|
20
|
+
_getter = getter;
|
|
21
|
+
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* MCP tools (especially Playwright's browser_snapshot, browser_evaluate,
|
|
8
8
|
* browser_network_requests) can return massive content — accessibility
|
|
9
9
|
* trees of 100-500KB, large JSON arrays, etc. When passed untruncated into
|
|
10
|
-
*
|
|
10
|
+
* spectral's ToolResultMessage.content, they blow up the LLM context window,
|
|
11
11
|
* causing API errors (400/413) and dead sessions ("skipping empty
|
|
12
12
|
* intermediate message" loops).
|
|
13
13
|
*
|
package/dist/mcp/ui-server.js
CHANGED
|
@@ -42,7 +42,7 @@ export async function startUiServer(options) {
|
|
|
42
42
|
// Only include toolInfo if caller provides full tool definition with inputSchema
|
|
43
43
|
// The App validates toolInfo.tool.inputSchema as required object
|
|
44
44
|
};
|
|
45
|
-
const initialStreamContext = hostContext["
|
|
45
|
+
const initialStreamContext = hostContext["spectral-mcp-adapter/stream"];
|
|
46
46
|
if (initialStreamContext && typeof initialStreamContext === "object") {
|
|
47
47
|
const streamId = initialStreamContext.streamId;
|
|
48
48
|
const mode = initialStreamContext.mode;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
export declare const UI_STREAM_HOST_CONTEXT_KEY = "
|
|
3
|
-
export declare const UI_STREAM_REQUEST_META_KEY = "
|
|
4
|
-
export declare const UI_STREAM_RESULT_PATCH_METHOD = "notifications/
|
|
5
|
-
export declare const SERVER_STREAM_RESULT_PATCH_METHOD = "notifications/
|
|
6
|
-
export declare const UI_STREAM_STRUCTURED_CONTENT_KEY = "
|
|
2
|
+
export declare const UI_STREAM_HOST_CONTEXT_KEY = "spectral-mcp-adapter/stream";
|
|
3
|
+
export declare const UI_STREAM_REQUEST_META_KEY = "spectral-mcp-adapter/stream-token";
|
|
4
|
+
export declare const UI_STREAM_RESULT_PATCH_METHOD = "notifications/spectral-mcp-adapter/ui-result-patch";
|
|
5
|
+
export declare const SERVER_STREAM_RESULT_PATCH_METHOD = "notifications/spectral-mcp-adapter/result-patch";
|
|
6
|
+
export declare const UI_STREAM_STRUCTURED_CONTENT_KEY = "spectral-mcp-adapter/stream";
|
|
7
7
|
export declare const uiStreamModeSchema: z.ZodEnum<["eager", "stream-first"]>;
|
|
8
8
|
export type UiStreamMode = z.infer<typeof uiStreamModeSchema>;
|
|
9
9
|
export declare const visualizationStreamPhaseSchema: z.ZodEnum<["shell", "narrative", "structure", "detail", "settled"]>;
|
|
@@ -76,7 +76,7 @@ export declare const uiStreamCallToolResultSchema: z.ZodObject<{
|
|
|
76
76
|
}, z.ZodTypeAny, "passthrough">>;
|
|
77
77
|
export type UiStreamCallToolResult = z.infer<typeof uiStreamCallToolResultSchema>;
|
|
78
78
|
export declare const uiStreamResultPatchNotificationSchema: z.ZodObject<{
|
|
79
|
-
method: z.ZodLiteral<"notifications/
|
|
79
|
+
method: z.ZodLiteral<"notifications/spectral-mcp-adapter/ui-result-patch">;
|
|
80
80
|
params: z.ZodObject<{
|
|
81
81
|
content: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
|
|
82
82
|
structuredContent: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
@@ -94,7 +94,7 @@ export declare const uiStreamResultPatchNotificationSchema: z.ZodObject<{
|
|
|
94
94
|
_meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
95
95
|
}, z.ZodTypeAny, "passthrough">>;
|
|
96
96
|
}, "strip", z.ZodTypeAny, {
|
|
97
|
-
method: "notifications/
|
|
97
|
+
method: "notifications/spectral-mcp-adapter/ui-result-patch";
|
|
98
98
|
params: {
|
|
99
99
|
content?: unknown[] | undefined;
|
|
100
100
|
isError?: boolean | undefined;
|
|
@@ -104,7 +104,7 @@ export declare const uiStreamResultPatchNotificationSchema: z.ZodObject<{
|
|
|
104
104
|
[k: string]: unknown;
|
|
105
105
|
};
|
|
106
106
|
}, {
|
|
107
|
-
method: "notifications/
|
|
107
|
+
method: "notifications/spectral-mcp-adapter/ui-result-patch";
|
|
108
108
|
params: {
|
|
109
109
|
content?: unknown[] | undefined;
|
|
110
110
|
isError?: boolean | undefined;
|
|
@@ -116,7 +116,7 @@ export declare const uiStreamResultPatchNotificationSchema: z.ZodObject<{
|
|
|
116
116
|
}>;
|
|
117
117
|
export type UiStreamResultPatchNotification = z.infer<typeof uiStreamResultPatchNotificationSchema>;
|
|
118
118
|
export declare const serverStreamResultPatchNotificationSchema: z.ZodObject<{
|
|
119
|
-
method: z.ZodLiteral<"notifications/
|
|
119
|
+
method: z.ZodLiteral<"notifications/spectral-mcp-adapter/result-patch">;
|
|
120
120
|
params: z.ZodObject<{
|
|
121
121
|
streamToken: z.ZodString;
|
|
122
122
|
result: z.ZodObject<{
|
|
@@ -157,7 +157,7 @@ export declare const serverStreamResultPatchNotificationSchema: z.ZodObject<{
|
|
|
157
157
|
streamToken: string;
|
|
158
158
|
}>;
|
|
159
159
|
}, "strip", z.ZodTypeAny, {
|
|
160
|
-
method: "notifications/
|
|
160
|
+
method: "notifications/spectral-mcp-adapter/result-patch";
|
|
161
161
|
params: {
|
|
162
162
|
result: {
|
|
163
163
|
content?: unknown[] | undefined;
|
|
@@ -170,7 +170,7 @@ export declare const serverStreamResultPatchNotificationSchema: z.ZodObject<{
|
|
|
170
170
|
streamToken: string;
|
|
171
171
|
};
|
|
172
172
|
}, {
|
|
173
|
-
method: "notifications/
|
|
173
|
+
method: "notifications/spectral-mcp-adapter/result-patch";
|
|
174
174
|
params: {
|
|
175
175
|
result: {
|
|
176
176
|
content?: unknown[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-stream-types.d.ts","sourceRoot":"","sources":["../../src/mcp/ui-stream-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,0BAA0B,
|
|
1
|
+
{"version":3,"file":"ui-stream-types.d.ts","sourceRoot":"","sources":["../../src/mcp/ui-stream-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,0BAA0B,gCAAgC,CAAC;AACxE,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAC9E,eAAO,MAAM,6BAA6B,uDAAuD,CAAC;AAClG,eAAO,MAAM,iCAAiC,oDAAoD,CAAC;AACnG,eAAO,MAAM,gCAAgC,gCAAgC,CAAC;AAE9E,eAAO,MAAM,kBAAkB,sCAAoC,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,8BAA8B,qEAAmE,CAAC;AAC/G,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,eAAO,MAAM,kCAAkC,6CAA2C,CAAC;AAC3F,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE9F,eAAO,MAAM,+BAA+B,4BAA0B,CAAC;AACvE,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAKxF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;EAKpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS5C,CAAC;AACH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;gCAKzB,CAAC;AACjB,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGhD,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAEpG,eAAO,MAAM,yCAAyC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMpD,CAAC;AACH,MAAM,MAAM,mCAAmC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yCAAyC,CAAC,CAAC;AAE5G,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,mBAAmB,GAAG,SAAS,CAIxH;AAED,wBAAgB,8BAA8B,CAAC,iBAAiB,EAAE,OAAO,GAAG,2BAA2B,GAAG,SAAS,CAOlH"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
export const UI_STREAM_HOST_CONTEXT_KEY = "
|
|
3
|
-
export const UI_STREAM_REQUEST_META_KEY = "
|
|
4
|
-
export const UI_STREAM_RESULT_PATCH_METHOD = "notifications/
|
|
5
|
-
export const SERVER_STREAM_RESULT_PATCH_METHOD = "notifications/
|
|
6
|
-
export const UI_STREAM_STRUCTURED_CONTENT_KEY = "
|
|
2
|
+
export const UI_STREAM_HOST_CONTEXT_KEY = "spectral-mcp-adapter/stream";
|
|
3
|
+
export const UI_STREAM_REQUEST_META_KEY = "spectral-mcp-adapter/stream-token";
|
|
4
|
+
export const UI_STREAM_RESULT_PATCH_METHOD = "notifications/spectral-mcp-adapter/ui-result-patch";
|
|
5
|
+
export const SERVER_STREAM_RESULT_PATCH_METHOD = "notifications/spectral-mcp-adapter/result-patch";
|
|
6
|
+
export const UI_STREAM_STRUCTURED_CONTENT_KEY = "spectral-mcp-adapter/stream";
|
|
7
7
|
export const uiStreamModeSchema = z.enum(["eager", "stream-first"]);
|
|
8
8
|
export const visualizationStreamPhaseSchema = z.enum(["shell", "narrative", "structure", "detail", "settled"]);
|
|
9
9
|
export const visualizationStreamFrameTypeSchema = z.enum(["patch", "checkpoint", "final"]);
|
package/dist/mcp/utils.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ExtensionAPI } from "../sdk/coding-agent/index.js";
|
|
2
2
|
import type { McpConfig, ServerEntry } from "./types.js";
|
|
3
|
-
export declare function openUrl(
|
|
4
|
-
export declare function openPath(
|
|
3
|
+
export declare function openUrl(ext: ExtensionAPI, url: string, browser?: string): Promise<void>;
|
|
4
|
+
export declare function openPath(ext: ExtensionAPI, targetPath: string): Promise<void>;
|
|
5
5
|
export declare function parallelLimit<T, R>(items: T[], limit: number, fn: (item: T) => Promise<R>): Promise<R[]>;
|
|
6
6
|
export declare function getConfigPathFromArgv(): string | undefined;
|
|
7
7
|
export declare function interpolateEnvVars(value: string): string;
|
package/dist/mcp/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/mcp/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAgBzD,wBAAsB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/mcp/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAgBzD,wBAAsB,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7F;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKnF;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,CAAC,EACtC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC,CAcd;AAED,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAM1D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAQnH;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAS/E;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,gBAAgB,CAAC,GAAG,MAAM,GAAG,SAAS,CAKtH;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAWnE;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EACnC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,SAAS,CAQ3H"}
|