xcode-copilot-server 3.3.2 → 3.4.1
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/banner.d.ts +4 -4
- package/dist/banner.js +48 -12
- package/dist/banner.js.map +1 -1
- package/dist/bridge-constants.d.ts +2 -0
- package/dist/bridge-constants.js +3 -0
- package/dist/bridge-constants.js.map +1 -0
- package/dist/cli-validators.d.ts +2 -2
- package/dist/cli-validators.js +7 -2
- package/dist/cli-validators.js.map +1 -1
- package/dist/config-schema.d.ts +107 -0
- package/dist/config-schema.js +53 -0
- package/dist/config-schema.js.map +1 -0
- package/dist/config.d.ts +8 -28
- package/dist/config.js +39 -60
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +3 -1
- package/dist/conversation-manager.d.ts +9 -4
- package/dist/conversation-manager.js +44 -61
- package/dist/conversation-manager.js.map +1 -1
- package/dist/index.js +31 -12
- package/dist/index.js.map +1 -1
- package/dist/launchd/agent.d.ts +9 -13
- package/dist/launchd/agent.js +33 -26
- package/dist/launchd/agent.js.map +1 -1
- package/dist/launchd/index.d.ts +3 -3
- package/dist/launchd/index.js +1 -1
- package/dist/launchd/index.js.map +1 -1
- package/dist/launchd/socket.d.ts +2 -1
- package/dist/providers/claude/provider.js +40 -64
- package/dist/providers/claude/provider.js.map +1 -1
- package/dist/providers/claude/streaming.d.ts +10 -1
- package/dist/providers/claude/streaming.js +7 -3
- package/dist/providers/claude/streaming.js.map +1 -1
- package/dist/providers/claude/tool-results.js +1 -1
- package/dist/providers/claude/tool-results.js.map +1 -1
- package/dist/providers/codex/provider.js +28 -60
- package/dist/providers/codex/provider.js.map +1 -1
- package/dist/providers/codex/streaming.d.ts +12 -3
- package/dist/providers/codex/streaming.js +6 -6
- package/dist/providers/codex/streaming.js.map +1 -1
- package/dist/providers/codex/tool-results.js +1 -1
- package/dist/providers/codex/tool-results.js.map +1 -1
- package/dist/providers/index.d.ts +5 -19
- package/dist/providers/index.js +25 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/names.d.ts +4 -0
- package/dist/providers/names.js +7 -0
- package/dist/providers/names.js.map +1 -0
- package/dist/providers/openai/provider.js +5 -14
- package/dist/providers/openai/provider.js.map +1 -1
- package/dist/providers/shared/continuation.d.ts +10 -0
- package/dist/providers/shared/continuation.js +18 -0
- package/dist/providers/shared/continuation.js.map +1 -0
- package/dist/providers/shared/prompt-utils.d.ts +0 -11
- package/dist/providers/shared/prompt-utils.js +0 -11
- package/dist/providers/shared/prompt-utils.js.map +1 -1
- package/dist/providers/shared/session-config.d.ts +12 -3
- package/dist/providers/shared/session-config.js +24 -7
- package/dist/providers/shared/session-config.js.map +1 -1
- package/dist/providers/shared/streaming-core.d.ts +12 -2
- package/dist/providers/shared/streaming-core.js +183 -161
- package/dist/providers/shared/streaming-core.js.map +1 -1
- package/dist/providers/shared/streaming-orchestrator.d.ts +11 -0
- package/dist/providers/shared/streaming-orchestrator.js +11 -0
- package/dist/providers/shared/streaming-orchestrator.js.map +1 -0
- package/dist/providers/shared/user-agent-guard.d.ts +3 -0
- package/dist/providers/shared/user-agent-guard.js +17 -0
- package/dist/providers/shared/user-agent-guard.js.map +1 -0
- package/dist/settings-patcher/claude.d.ts +1 -2
- package/dist/settings-patcher/claude.js +35 -13
- package/dist/settings-patcher/claude.js.map +1 -1
- package/dist/settings-patcher/codex.d.ts +1 -20
- package/dist/settings-patcher/codex.js +58 -31
- package/dist/settings-patcher/codex.js.map +1 -1
- package/dist/settings-patcher/index.d.ts +5 -14
- package/dist/settings-patcher/index.js +26 -6
- package/dist/settings-patcher/index.js.map +1 -1
- package/dist/settings-patcher/types.d.ts +21 -0
- package/dist/settings-patcher/url-utils.d.ts +1 -0
- package/dist/settings-patcher/url-utils.js +6 -0
- package/dist/settings-patcher/url-utils.js.map +1 -0
- package/dist/shutdown.d.ts +16 -0
- package/dist/shutdown.js +53 -0
- package/dist/shutdown.js.map +1 -0
- package/dist/startup.d.ts +1 -1
- package/dist/startup.js +74 -133
- package/dist/startup.js.map +1 -1
- package/dist/tool-bridge/constants.d.ts +4 -2
- package/dist/tool-bridge/constants.js +4 -2
- package/dist/tool-bridge/constants.js.map +1 -1
- package/dist/tool-bridge/index.d.ts +2 -1
- package/dist/tool-bridge/index.js +5 -1
- package/dist/tool-bridge/index.js.map +1 -1
- package/dist/tool-bridge/routes.d.ts +2 -2
- package/dist/tool-bridge/routes.js +24 -22
- package/dist/tool-bridge/routes.js.map +1 -1
- package/dist/tool-bridge/session-lifecycle.js +6 -3
- package/dist/tool-bridge/session-lifecycle.js.map +1 -1
- package/dist/tool-bridge/state.d.ts +4 -25
- package/dist/tool-bridge/state.js +6 -65
- package/dist/tool-bridge/state.js.map +1 -1
- package/dist/tool-bridge/tool-router.d.ts +1 -0
- package/dist/tool-bridge/tool-router.js +26 -19
- package/dist/tool-bridge/tool-router.js.map +1 -1
- package/dist/utils/child-process.d.ts +2 -0
- package/dist/utils/child-process.js +8 -0
- package/dist/utils/child-process.js.map +1 -0
- package/dist/utils/type-guards.d.ts +2 -0
- package/dist/utils/type-guards.js +7 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/package.json +2 -2
package/dist/banner.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import type { Logger } from "copilot-sdk-proxy";
|
|
2
|
+
import type { ProxyMode } from "./providers/index.js";
|
|
1
3
|
export interface ProxyBannerInfo {
|
|
2
4
|
providerName: string;
|
|
3
|
-
proxyFlag:
|
|
5
|
+
proxyFlag: ProxyMode;
|
|
4
6
|
routes: string[];
|
|
5
7
|
cwd: string;
|
|
6
8
|
autoPatch?: boolean | undefined;
|
|
7
|
-
|
|
8
|
-
agentBinaryName?: string | undefined;
|
|
9
|
-
agentsDir?: string | undefined;
|
|
9
|
+
logger?: Logger | undefined;
|
|
10
10
|
}
|
|
11
11
|
export declare function printProxyBanner(info: ProxyBannerInfo): void;
|
package/dist/banner.js
CHANGED
|
@@ -1,20 +1,56 @@
|
|
|
1
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
1
4
|
import { dim } from "copilot-sdk-proxy";
|
|
5
|
+
const AGENTS_DIR = join(homedir(), "Library/Developer/Xcode/CodingAssistant/Agents/Versions");
|
|
6
|
+
const AGENT_BINARY_NAMES = {
|
|
7
|
+
claude: "claude",
|
|
8
|
+
codex: "codex",
|
|
9
|
+
};
|
|
10
|
+
function findAgentBinary(proxy, logger) {
|
|
11
|
+
const binaryName = AGENT_BINARY_NAMES[proxy];
|
|
12
|
+
if (!binaryName)
|
|
13
|
+
return null;
|
|
14
|
+
if (!existsSync(AGENTS_DIR))
|
|
15
|
+
return null;
|
|
16
|
+
let versions;
|
|
17
|
+
try {
|
|
18
|
+
versions = readdirSync(AGENTS_DIR);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
logger?.debug(`Failed to read agents directory: ${String(err)}`);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
for (const version of versions) {
|
|
25
|
+
const binaryPath = join(AGENTS_DIR, version, binaryName);
|
|
26
|
+
if (existsSync(binaryPath))
|
|
27
|
+
return binaryPath;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
2
31
|
export function printProxyBanner(info) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
32
|
+
const providerHint = info.proxyFlag === "auto"
|
|
33
|
+
? ""
|
|
34
|
+
: ` ${dim(`(--proxy ${info.proxyFlag})`)}`;
|
|
35
|
+
const lines = [
|
|
36
|
+
"",
|
|
37
|
+
` ${dim("Provider")} ${info.providerName}${providerHint}`,
|
|
38
|
+
` ${dim("Routes")} ${info.routes.join(dim(", "))}`,
|
|
39
|
+
` ${dim("Directory")} ${info.cwd}`,
|
|
40
|
+
];
|
|
7
41
|
if (info.autoPatch) {
|
|
8
|
-
|
|
42
|
+
lines.push(` ${dim("Auto-patch")} enabled`);
|
|
9
43
|
}
|
|
10
|
-
if (info.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
44
|
+
if (info.proxyFlag !== "auto") {
|
|
45
|
+
const binaryName = AGENT_BINARY_NAMES[info.proxyFlag];
|
|
46
|
+
if (binaryName) {
|
|
47
|
+
const agentPath = findAgentBinary(info.proxyFlag, info.logger);
|
|
48
|
+
lines.push(agentPath
|
|
49
|
+
? ` ${dim("Agent")} ${agentPath}`
|
|
50
|
+
: ` ${dim("Agent")} ${dim(`not found (expected at ${AGENTS_DIR}/<version>/${binaryName})`)}`);
|
|
16
51
|
}
|
|
17
52
|
}
|
|
18
|
-
|
|
53
|
+
lines.push("");
|
|
54
|
+
console.log(lines.join("\n"));
|
|
19
55
|
}
|
|
20
56
|
//# sourceMappingURL=banner.js.map
|
package/dist/banner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAIxC,MAAM,UAAU,GAAG,IAAI,CACrB,OAAO,EAAE,EACT,yDAAyD,CAC1D,CAAC;AAEF,MAAM,kBAAkB,GAAuC;IAC7D,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,SAAS,eAAe,CAAC,KAAgB,EAAE,MAAe;IACxD,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,KAAK,CAAC,oCAAoC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACzD,IAAI,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,UAAU,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAWD,MAAM,UAAU,gBAAgB,CAAC,IAAqB;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,KAAK,MAAM;QAC5C,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;IAE7C,MAAM,KAAK,GAAG;QACZ,EAAE;QACF,KAAK,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,GAAG,YAAY,EAAE;QAC5D,KAAK,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;QACvD,KAAK,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;KACrC,CAAC;IAEF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,SAAS;gBAClB,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,SAAS,EAAE;gBACvC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,0BAA0B,UAAU,cAAc,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-constants.js","sourceRoot":"","sources":["../src/bridge-constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,kBAAkB,GAAG,CAAC"}
|
package/dist/cli-validators.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { parsePort, parseLogLevel, parseIdleTimeout } from "copilot-sdk-proxy";
|
|
2
|
-
import { type ProxyName } from "./providers/index.js";
|
|
2
|
+
import { type ProxyName, type ProxyMode } from "./providers/index.js";
|
|
3
3
|
export { parsePort, parseLogLevel, parseIdleTimeout };
|
|
4
|
-
export type { ProxyName };
|
|
5
4
|
export declare function isProxyName(value: string): value is ProxyName;
|
|
6
5
|
export declare function parseProxy(value: string): ProxyName;
|
|
6
|
+
export declare function parseProxyMode(value: string): ProxyMode;
|
|
7
7
|
export declare function validateAutoPatch(proxy: ProxyName, autoPatch: boolean): void;
|
package/dist/cli-validators.js
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import { parsePort, parseLogLevel, parseIdleTimeout } from "copilot-sdk-proxy";
|
|
2
2
|
import { providers } from "./providers/index.js";
|
|
3
|
+
import { PROVIDER_NAMES } from "./providers/names.js";
|
|
3
4
|
export { parsePort, parseLogLevel, parseIdleTimeout };
|
|
4
|
-
const VALID_PROXIES = Object.keys(providers);
|
|
5
5
|
export function isProxyName(value) {
|
|
6
6
|
return value in providers;
|
|
7
7
|
}
|
|
8
8
|
export function parseProxy(value) {
|
|
9
9
|
if (!isProxyName(value)) {
|
|
10
|
-
throw new Error(`Invalid proxy "${value}". Valid: ${
|
|
10
|
+
throw new Error(`Invalid proxy "${value}". Valid: ${PROVIDER_NAMES.join(", ")}`);
|
|
11
11
|
}
|
|
12
12
|
return value;
|
|
13
13
|
}
|
|
14
|
+
export function parseProxyMode(value) {
|
|
15
|
+
if (value === "auto")
|
|
16
|
+
return "auto";
|
|
17
|
+
return parseProxy(value);
|
|
18
|
+
}
|
|
14
19
|
const PATCHABLE_PROXIES = new Set(["claude", "codex"]);
|
|
15
20
|
export function validateAutoPatch(proxy, autoPatch) {
|
|
16
21
|
if (autoPatch && !PATCHABLE_PROXIES.has(proxy)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-validators.js","sourceRoot":"","sources":["../src/cli-validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"cli-validators.js","sourceRoot":"","sources":["../src/cli-validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAkC,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;AAEtD,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK,IAAI,SAAS,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,aAAa,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACpC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5E,MAAM,UAAU,iBAAiB,CAAC,KAAgB,EAAE,SAAkB;IACpE,IAAI,SAAS,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,uCAAuC,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3E,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { MCPServer } from "copilot-sdk-proxy";
|
|
3
|
+
export type { MCPLocalServer } from "copilot-sdk-proxy";
|
|
4
|
+
export declare const BYTES_PER_MIB: number;
|
|
5
|
+
declare const ApprovalRuleSchema: z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodEnum<{
|
|
6
|
+
url: "url";
|
|
7
|
+
read: "read";
|
|
8
|
+
write: "write";
|
|
9
|
+
shell: "shell";
|
|
10
|
+
mcp: "mcp";
|
|
11
|
+
}>>]>;
|
|
12
|
+
declare const ReasoningEffortSchema: z.ZodEnum<{
|
|
13
|
+
low: "low";
|
|
14
|
+
medium: "medium";
|
|
15
|
+
high: "high";
|
|
16
|
+
xhigh: "xhigh";
|
|
17
|
+
}>;
|
|
18
|
+
export declare const ServerConfigSchema: z.ZodObject<{
|
|
19
|
+
openai: z.ZodDefault<z.ZodObject<{
|
|
20
|
+
toolBridge: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
21
|
+
mcpServers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodObject<{
|
|
22
|
+
type: z.ZodUnion<readonly [z.ZodLiteral<"local">, z.ZodLiteral<"stdio">]>;
|
|
23
|
+
command: z.ZodString;
|
|
24
|
+
args: z.ZodArray<z.ZodString>;
|
|
25
|
+
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
26
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
27
|
+
allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
28
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
29
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
30
|
+
type: z.ZodUnion<readonly [z.ZodLiteral<"http">, z.ZodLiteral<"sse">]>;
|
|
31
|
+
url: z.ZodURL;
|
|
32
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
33
|
+
allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
34
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
35
|
+
}, z.core.$strip>]>>>;
|
|
36
|
+
}, z.core.$strip>>;
|
|
37
|
+
claude: z.ZodDefault<z.ZodObject<{
|
|
38
|
+
toolBridge: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
39
|
+
mcpServers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodObject<{
|
|
40
|
+
type: z.ZodUnion<readonly [z.ZodLiteral<"local">, z.ZodLiteral<"stdio">]>;
|
|
41
|
+
command: z.ZodString;
|
|
42
|
+
args: z.ZodArray<z.ZodString>;
|
|
43
|
+
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
44
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
45
|
+
allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
46
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
48
|
+
type: z.ZodUnion<readonly [z.ZodLiteral<"http">, z.ZodLiteral<"sse">]>;
|
|
49
|
+
url: z.ZodURL;
|
|
50
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
51
|
+
allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
52
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
53
|
+
}, z.core.$strip>]>>>;
|
|
54
|
+
}, z.core.$strip>>;
|
|
55
|
+
codex: z.ZodDefault<z.ZodObject<{
|
|
56
|
+
toolBridge: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
57
|
+
mcpServers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodObject<{
|
|
58
|
+
type: z.ZodUnion<readonly [z.ZodLiteral<"local">, z.ZodLiteral<"stdio">]>;
|
|
59
|
+
command: z.ZodString;
|
|
60
|
+
args: z.ZodArray<z.ZodString>;
|
|
61
|
+
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
62
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
63
|
+
allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
64
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
65
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
66
|
+
type: z.ZodUnion<readonly [z.ZodLiteral<"http">, z.ZodLiteral<"sse">]>;
|
|
67
|
+
url: z.ZodURL;
|
|
68
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
69
|
+
allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
70
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
71
|
+
}, z.core.$strip>]>>>;
|
|
72
|
+
}, z.core.$strip>>;
|
|
73
|
+
allowedCliTools: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
74
|
+
excludedFilePatterns: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
75
|
+
bodyLimitMiB: z.ZodDefault<z.ZodNumber>;
|
|
76
|
+
reasoningEffort: z.ZodOptional<z.ZodEnum<{
|
|
77
|
+
low: "low";
|
|
78
|
+
medium: "medium";
|
|
79
|
+
high: "high";
|
|
80
|
+
xhigh: "xhigh";
|
|
81
|
+
}>>;
|
|
82
|
+
autoApprovePermissions: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodEnum<{
|
|
83
|
+
url: "url";
|
|
84
|
+
read: "read";
|
|
85
|
+
write: "write";
|
|
86
|
+
shell: "shell";
|
|
87
|
+
mcp: "mcp";
|
|
88
|
+
}>>]>>;
|
|
89
|
+
}, z.core.$strip>;
|
|
90
|
+
type ApprovalRule = z.infer<typeof ApprovalRuleSchema>;
|
|
91
|
+
export type ServerConfig = {
|
|
92
|
+
toolBridge: boolean;
|
|
93
|
+
mcpServers: Record<string, MCPServer>;
|
|
94
|
+
allowedCliTools: string[];
|
|
95
|
+
excludedFilePatterns: string[];
|
|
96
|
+
bodyLimit: number;
|
|
97
|
+
autoApprovePermissions: ApprovalRule;
|
|
98
|
+
reasoningEffort?: z.infer<typeof ReasoningEffortSchema> | undefined;
|
|
99
|
+
};
|
|
100
|
+
export declare const DEFAULT_CONFIG: {
|
|
101
|
+
toolBridge: false;
|
|
102
|
+
mcpServers: {};
|
|
103
|
+
allowedCliTools: never[];
|
|
104
|
+
excludedFilePatterns: never[];
|
|
105
|
+
bodyLimit: number;
|
|
106
|
+
autoApprovePermissions: ("read" | "mcp")[];
|
|
107
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const BYTES_PER_MIB = 1024 * 1024;
|
|
3
|
+
const MCPLocalServerSchema = z.object({
|
|
4
|
+
type: z.union([z.literal("local"), z.literal("stdio")]),
|
|
5
|
+
command: z.string().min(1, "MCP server command cannot be empty"),
|
|
6
|
+
args: z.array(z.string()),
|
|
7
|
+
env: z.record(z.string(), z.string()).optional(),
|
|
8
|
+
cwd: z.string().optional(),
|
|
9
|
+
allowedTools: z.array(z.string()).optional(),
|
|
10
|
+
timeout: z.number().positive().optional(),
|
|
11
|
+
});
|
|
12
|
+
const MCPRemoteServerSchema = z.object({
|
|
13
|
+
type: z.union([z.literal("http"), z.literal("sse")]),
|
|
14
|
+
url: z.url(),
|
|
15
|
+
headers: z.record(z.string(), z.string()).optional(),
|
|
16
|
+
allowedTools: z.array(z.string()).optional(),
|
|
17
|
+
timeout: z.number().positive().optional(),
|
|
18
|
+
});
|
|
19
|
+
const MCPServerSchema = z.union([MCPLocalServerSchema, MCPRemoteServerSchema]);
|
|
20
|
+
const VALID_PERMISSION_KINDS = ["read", "write", "shell", "mcp", "url"];
|
|
21
|
+
const ApprovalRuleSchema = z.union([
|
|
22
|
+
z.boolean(),
|
|
23
|
+
z.array(z.enum(VALID_PERMISSION_KINDS)),
|
|
24
|
+
]);
|
|
25
|
+
const VALID_REASONING_EFFORTS = ["low", "medium", "high", "xhigh"];
|
|
26
|
+
const ReasoningEffortSchema = z.enum(VALID_REASONING_EFFORTS);
|
|
27
|
+
const ProviderConfigSchema = z.object({
|
|
28
|
+
toolBridge: z.boolean().optional().default(false),
|
|
29
|
+
mcpServers: z.record(z.string(), MCPServerSchema).default({}),
|
|
30
|
+
});
|
|
31
|
+
export const ServerConfigSchema = z.object({
|
|
32
|
+
openai: ProviderConfigSchema.default({ toolBridge: false, mcpServers: {} }),
|
|
33
|
+
claude: ProviderConfigSchema.default({ toolBridge: false, mcpServers: {} }),
|
|
34
|
+
codex: ProviderConfigSchema.default({ toolBridge: false, mcpServers: {} }),
|
|
35
|
+
allowedCliTools: z.array(z.string()).refine((arr) => !arr.includes("*") || arr.length === 1, 'allowedCliTools: use ["*"] alone to allow all tools, don\'t mix with other entries').default([]),
|
|
36
|
+
excludedFilePatterns: z.array(z.string()).default([]),
|
|
37
|
+
bodyLimitMiB: z
|
|
38
|
+
.number()
|
|
39
|
+
.positive()
|
|
40
|
+
.max(100, "bodyLimitMiB cannot exceed 100")
|
|
41
|
+
.default(10),
|
|
42
|
+
reasoningEffort: ReasoningEffortSchema.optional(),
|
|
43
|
+
autoApprovePermissions: ApprovalRuleSchema.default(["read", "mcp"]),
|
|
44
|
+
});
|
|
45
|
+
export const DEFAULT_CONFIG = {
|
|
46
|
+
toolBridge: false,
|
|
47
|
+
mcpServers: {},
|
|
48
|
+
allowedCliTools: [],
|
|
49
|
+
excludedFilePatterns: [],
|
|
50
|
+
bodyLimit: 10 * BYTES_PER_MIB,
|
|
51
|
+
autoApprovePermissions: ["read", "mcp"],
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=config-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,30 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
import type { ProxyName } from "./providers/index.js";
|
|
5
|
-
export type { ProxyName };
|
|
6
|
-
declare const ApprovalRuleSchema: z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodEnum<{
|
|
7
|
-
url: "url";
|
|
8
|
-
read: "read";
|
|
9
|
-
write: "write";
|
|
10
|
-
shell: "shell";
|
|
11
|
-
mcp: "mcp";
|
|
12
|
-
}>>]>;
|
|
13
|
-
declare const ReasoningEffortSchema: z.ZodEnum<{
|
|
14
|
-
low: "low";
|
|
15
|
-
medium: "medium";
|
|
16
|
-
high: "high";
|
|
17
|
-
xhigh: "xhigh";
|
|
18
|
-
}>;
|
|
19
|
-
type ApprovalRule = z.infer<typeof ApprovalRuleSchema>;
|
|
20
|
-
export type ServerConfig = {
|
|
21
|
-
toolBridge: boolean;
|
|
22
|
-
mcpServers: Record<string, MCPServer>;
|
|
23
|
-
allowedCliTools: string[];
|
|
24
|
-
excludedFilePatterns: string[];
|
|
25
|
-
bodyLimit: number;
|
|
26
|
-
autoApprovePermissions: ApprovalRule;
|
|
27
|
-
reasoningEffort?: z.infer<typeof ReasoningEffortSchema> | undefined;
|
|
28
|
-
};
|
|
1
|
+
import type { Logger } from "copilot-sdk-proxy";
|
|
2
|
+
import type { ProxyName } from "./providers/names.js";
|
|
3
|
+
import type { ServerConfig } from "./config-schema.js";
|
|
29
4
|
export declare function resolveConfigPath(projectCwd: string | undefined, processCwd: string, defaultPath: string): string;
|
|
30
5
|
export declare function loadConfig(configPath: string, logger: Logger, proxy: ProxyName): Promise<ServerConfig>;
|
|
6
|
+
export type AllProviderConfigs = {
|
|
7
|
+
providers: Record<ProxyName, ServerConfig>;
|
|
8
|
+
shared: ServerConfig;
|
|
9
|
+
};
|
|
10
|
+
export declare function loadAllProviderConfigs(configPath: string, logger: Logger): Promise<AllProviderConfigs>;
|
package/dist/config.js
CHANGED
|
@@ -1,59 +1,11 @@
|
|
|
1
|
+
// resolveConfigPath is sync (runs once at startup). The loaders are async because they read disk.
|
|
1
2
|
import { existsSync } from "node:fs";
|
|
2
3
|
import { readFile } from "node:fs/promises";
|
|
3
4
|
import { resolve, dirname, isAbsolute } from "node:path";
|
|
4
5
|
import JSON5 from "json5";
|
|
5
6
|
import { z } from "zod";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
type: z.union([z.literal("local"), z.literal("stdio")]),
|
|
9
|
-
command: z.string().min(1, "MCP server command cannot be empty"),
|
|
10
|
-
args: z.array(z.string()),
|
|
11
|
-
env: z.record(z.string(), z.string()).optional(),
|
|
12
|
-
cwd: z.string().optional(),
|
|
13
|
-
allowedTools: z.array(z.string()).optional(),
|
|
14
|
-
timeout: z.number().positive().optional(),
|
|
15
|
-
});
|
|
16
|
-
const MCPRemoteServerSchema = z.object({
|
|
17
|
-
type: z.union([z.literal("http"), z.literal("sse")]),
|
|
18
|
-
url: z.url(),
|
|
19
|
-
headers: z.record(z.string(), z.string()).optional(),
|
|
20
|
-
allowedTools: z.array(z.string()).optional(),
|
|
21
|
-
timeout: z.number().positive().optional(),
|
|
22
|
-
});
|
|
23
|
-
const MCPServerSchema = z.union([MCPLocalServerSchema, MCPRemoteServerSchema]);
|
|
24
|
-
const VALID_PERMISSION_KINDS = ["read", "write", "shell", "mcp", "url"];
|
|
25
|
-
const ApprovalRuleSchema = z.union([
|
|
26
|
-
z.boolean(),
|
|
27
|
-
z.array(z.enum(VALID_PERMISSION_KINDS)),
|
|
28
|
-
]);
|
|
29
|
-
const VALID_REASONING_EFFORTS = ["low", "medium", "high", "xhigh"];
|
|
30
|
-
const ReasoningEffortSchema = z.enum(VALID_REASONING_EFFORTS);
|
|
31
|
-
const ProviderConfigSchema = z.object({
|
|
32
|
-
toolBridge: z.boolean().optional().default(false),
|
|
33
|
-
mcpServers: z.record(z.string(), MCPServerSchema).default({}),
|
|
34
|
-
});
|
|
35
|
-
const ServerConfigSchema = z.object({
|
|
36
|
-
openai: ProviderConfigSchema.default({ toolBridge: false, mcpServers: {} }),
|
|
37
|
-
claude: ProviderConfigSchema.default({ toolBridge: false, mcpServers: {} }),
|
|
38
|
-
codex: ProviderConfigSchema.default({ toolBridge: false, mcpServers: {} }),
|
|
39
|
-
allowedCliTools: z.array(z.string()).refine((arr) => !arr.includes("*") || arr.length === 1, 'allowedCliTools: use ["*"] alone to allow all tools, don\'t mix with other entries').default([]),
|
|
40
|
-
excludedFilePatterns: z.array(z.string()).default([]),
|
|
41
|
-
bodyLimitMiB: z
|
|
42
|
-
.number()
|
|
43
|
-
.positive()
|
|
44
|
-
.max(100, "bodyLimitMiB cannot exceed 100")
|
|
45
|
-
.default(10),
|
|
46
|
-
reasoningEffort: ReasoningEffortSchema.optional(),
|
|
47
|
-
autoApprovePermissions: ApprovalRuleSchema.default(["read", "mcp"]),
|
|
48
|
-
});
|
|
49
|
-
const DEFAULT_CONFIG = {
|
|
50
|
-
toolBridge: false,
|
|
51
|
-
mcpServers: {},
|
|
52
|
-
allowedCliTools: [],
|
|
53
|
-
excludedFilePatterns: [],
|
|
54
|
-
bodyLimit: 10 * 1024 * 1024,
|
|
55
|
-
autoApprovePermissions: ["read", "mcp"],
|
|
56
|
-
};
|
|
7
|
+
import { ServerConfigSchema, DEFAULT_CONFIG, BYTES_PER_MIB } from "./config-schema.js";
|
|
8
|
+
import { isErrnoException } from "./utils/type-guards.js";
|
|
57
9
|
function resolveServerPaths(servers, configDir) {
|
|
58
10
|
return Object.fromEntries(Object.entries(servers).map(([name, server]) => [
|
|
59
11
|
name,
|
|
@@ -78,7 +30,7 @@ export function resolveConfigPath(projectCwd, processCwd, defaultPath) {
|
|
|
78
30
|
return localConfig;
|
|
79
31
|
return defaultPath;
|
|
80
32
|
}
|
|
81
|
-
|
|
33
|
+
async function parseConfigFile(configPath, logger) {
|
|
82
34
|
const absolutePath = isAbsolute(configPath)
|
|
83
35
|
? configPath
|
|
84
36
|
: resolve(process.cwd(), configPath);
|
|
@@ -87,11 +39,11 @@ export async function loadConfig(configPath, logger, proxy) {
|
|
|
87
39
|
text = await readFile(absolutePath, "utf-8");
|
|
88
40
|
}
|
|
89
41
|
catch (err) {
|
|
90
|
-
if (err
|
|
42
|
+
if (isErrnoException(err) && err.code === "ENOENT") {
|
|
91
43
|
logger.warn(`No config file at ${absolutePath}, using defaults`);
|
|
92
|
-
return
|
|
44
|
+
return null;
|
|
93
45
|
}
|
|
94
|
-
throw err;
|
|
46
|
+
throw new Error(`Failed to read config file at ${absolutePath}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
95
47
|
}
|
|
96
48
|
let raw;
|
|
97
49
|
try {
|
|
@@ -112,18 +64,45 @@ export async function loadConfig(configPath, logger, proxy) {
|
|
|
112
64
|
const path = firstError.path.join(".");
|
|
113
65
|
throw new Error(`Invalid config${path ? ` at "${path}"` : ""}: ${firstError.message}`);
|
|
114
66
|
}
|
|
115
|
-
|
|
116
|
-
|
|
67
|
+
return { data: parseResult.data, configDir: dirname(absolutePath) };
|
|
68
|
+
}
|
|
69
|
+
function buildServerConfig(parsed, configDir, proxy) {
|
|
117
70
|
const provider = parsed[proxy];
|
|
118
|
-
|
|
71
|
+
return {
|
|
119
72
|
allowedCliTools: parsed.allowedCliTools,
|
|
120
73
|
excludedFilePatterns: parsed.excludedFilePatterns,
|
|
121
74
|
autoApprovePermissions: parsed.autoApprovePermissions,
|
|
122
75
|
reasoningEffort: parsed.reasoningEffort,
|
|
123
|
-
bodyLimit: parsed.bodyLimitMiB *
|
|
76
|
+
bodyLimit: parsed.bodyLimitMiB * BYTES_PER_MIB,
|
|
124
77
|
toolBridge: provider.toolBridge,
|
|
125
78
|
mcpServers: resolveServerPaths(provider.mcpServers, configDir),
|
|
126
79
|
};
|
|
127
|
-
|
|
80
|
+
}
|
|
81
|
+
export async function loadConfig(configPath, logger, proxy) {
|
|
82
|
+
const result = await parseConfigFile(configPath, logger);
|
|
83
|
+
if (!result)
|
|
84
|
+
return DEFAULT_CONFIG;
|
|
85
|
+
return buildServerConfig(result.data, result.configDir, proxy);
|
|
86
|
+
}
|
|
87
|
+
export async function loadAllProviderConfigs(configPath, logger) {
|
|
88
|
+
const result = await parseConfigFile(configPath, logger);
|
|
89
|
+
const providers = {
|
|
90
|
+
openai: result ? buildServerConfig(result.data, result.configDir, "openai") : DEFAULT_CONFIG,
|
|
91
|
+
claude: result ? buildServerConfig(result.data, result.configDir, "claude") : DEFAULT_CONFIG,
|
|
92
|
+
codex: result ? buildServerConfig(result.data, result.configDir, "codex") : DEFAULT_CONFIG,
|
|
93
|
+
};
|
|
94
|
+
// Common fields only, no per-provider toolBridge / mcpServers.
|
|
95
|
+
const shared = result
|
|
96
|
+
? {
|
|
97
|
+
allowedCliTools: result.data.allowedCliTools,
|
|
98
|
+
excludedFilePatterns: result.data.excludedFilePatterns,
|
|
99
|
+
autoApprovePermissions: result.data.autoApprovePermissions,
|
|
100
|
+
reasoningEffort: result.data.reasoningEffort,
|
|
101
|
+
bodyLimit: result.data.bodyLimitMiB * BYTES_PER_MIB,
|
|
102
|
+
toolBridge: false,
|
|
103
|
+
mcpServers: {},
|
|
104
|
+
}
|
|
105
|
+
: DEFAULT_CONFIG;
|
|
106
|
+
return { providers, shared };
|
|
128
107
|
}
|
|
129
108
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/context.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { CopilotService, Logger, Stats } from "copilot-sdk-proxy";
|
|
2
|
-
import type { ServerConfig } from "./config.js";
|
|
2
|
+
import type { ServerConfig } from "./config-schema.js";
|
|
3
|
+
import type { ConversationManager } from "./conversation-manager.js";
|
|
3
4
|
export interface AppContext {
|
|
4
5
|
service: CopilotService;
|
|
5
6
|
logger: Logger;
|
|
6
7
|
config: ServerConfig;
|
|
7
8
|
port: number;
|
|
8
9
|
stats: Stats;
|
|
10
|
+
toolBridgeManager?: ConversationManager | undefined;
|
|
9
11
|
}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { ToolBridgeState } from "./tool-bridge/state.js";
|
|
2
|
-
import type { Conversation as CoreConversation,
|
|
2
|
+
import type { Conversation as CoreConversation, Logger } from "copilot-sdk-proxy";
|
|
3
3
|
export interface Conversation extends CoreConversation {
|
|
4
4
|
state: ToolBridgeState;
|
|
5
5
|
}
|
|
6
|
-
export
|
|
6
|
+
export interface ToolStateProvider {
|
|
7
|
+
getState(convId: string): ToolBridgeState | undefined;
|
|
8
|
+
findByExpectedTool(name: string): ToolBridgeState | undefined;
|
|
9
|
+
}
|
|
10
|
+
export declare function asConversation(conv: CoreConversation): Conversation;
|
|
11
|
+
export declare class ConversationManager implements ToolStateProvider {
|
|
7
12
|
private readonly conversations;
|
|
8
13
|
private readonly logger;
|
|
9
14
|
private primaryId;
|
|
@@ -11,13 +16,13 @@ export declare class ConversationManager {
|
|
|
11
16
|
create(options?: {
|
|
12
17
|
isPrimary?: boolean;
|
|
13
18
|
}): Conversation;
|
|
14
|
-
getPrimary(): Conversation |
|
|
19
|
+
getPrimary(): Conversation | undefined;
|
|
15
20
|
clearPrimary(): void;
|
|
21
|
+
private evictStale;
|
|
16
22
|
findForNewRequest(): {
|
|
17
23
|
conversation: Conversation;
|
|
18
24
|
isReuse: boolean;
|
|
19
25
|
};
|
|
20
|
-
findByContinuation(messages: AnthropicMessage[]): Conversation | undefined;
|
|
21
26
|
findByContinuationIds(callIds: string[]): Conversation | undefined;
|
|
22
27
|
findByExpectedTool(name: string): ToolBridgeState | undefined;
|
|
23
28
|
getState(convId: string): ToolBridgeState | undefined;
|