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.
Files changed (111) hide show
  1. package/dist/banner.d.ts +4 -4
  2. package/dist/banner.js +48 -12
  3. package/dist/banner.js.map +1 -1
  4. package/dist/bridge-constants.d.ts +2 -0
  5. package/dist/bridge-constants.js +3 -0
  6. package/dist/bridge-constants.js.map +1 -0
  7. package/dist/cli-validators.d.ts +2 -2
  8. package/dist/cli-validators.js +7 -2
  9. package/dist/cli-validators.js.map +1 -1
  10. package/dist/config-schema.d.ts +107 -0
  11. package/dist/config-schema.js +53 -0
  12. package/dist/config-schema.js.map +1 -0
  13. package/dist/config.d.ts +8 -28
  14. package/dist/config.js +39 -60
  15. package/dist/config.js.map +1 -1
  16. package/dist/context.d.ts +3 -1
  17. package/dist/conversation-manager.d.ts +9 -4
  18. package/dist/conversation-manager.js +44 -61
  19. package/dist/conversation-manager.js.map +1 -1
  20. package/dist/index.js +31 -12
  21. package/dist/index.js.map +1 -1
  22. package/dist/launchd/agent.d.ts +9 -13
  23. package/dist/launchd/agent.js +33 -26
  24. package/dist/launchd/agent.js.map +1 -1
  25. package/dist/launchd/index.d.ts +3 -3
  26. package/dist/launchd/index.js +1 -1
  27. package/dist/launchd/index.js.map +1 -1
  28. package/dist/launchd/socket.d.ts +2 -1
  29. package/dist/providers/claude/provider.js +40 -64
  30. package/dist/providers/claude/provider.js.map +1 -1
  31. package/dist/providers/claude/streaming.d.ts +10 -1
  32. package/dist/providers/claude/streaming.js +7 -3
  33. package/dist/providers/claude/streaming.js.map +1 -1
  34. package/dist/providers/claude/tool-results.js +1 -1
  35. package/dist/providers/claude/tool-results.js.map +1 -1
  36. package/dist/providers/codex/provider.js +28 -60
  37. package/dist/providers/codex/provider.js.map +1 -1
  38. package/dist/providers/codex/streaming.d.ts +12 -3
  39. package/dist/providers/codex/streaming.js +6 -6
  40. package/dist/providers/codex/streaming.js.map +1 -1
  41. package/dist/providers/codex/tool-results.js +1 -1
  42. package/dist/providers/codex/tool-results.js.map +1 -1
  43. package/dist/providers/index.d.ts +5 -19
  44. package/dist/providers/index.js +25 -0
  45. package/dist/providers/index.js.map +1 -1
  46. package/dist/providers/names.d.ts +4 -0
  47. package/dist/providers/names.js +7 -0
  48. package/dist/providers/names.js.map +1 -0
  49. package/dist/providers/openai/provider.js +5 -14
  50. package/dist/providers/openai/provider.js.map +1 -1
  51. package/dist/providers/shared/continuation.d.ts +10 -0
  52. package/dist/providers/shared/continuation.js +18 -0
  53. package/dist/providers/shared/continuation.js.map +1 -0
  54. package/dist/providers/shared/prompt-utils.d.ts +0 -11
  55. package/dist/providers/shared/prompt-utils.js +0 -11
  56. package/dist/providers/shared/prompt-utils.js.map +1 -1
  57. package/dist/providers/shared/session-config.d.ts +12 -3
  58. package/dist/providers/shared/session-config.js +24 -7
  59. package/dist/providers/shared/session-config.js.map +1 -1
  60. package/dist/providers/shared/streaming-core.d.ts +12 -2
  61. package/dist/providers/shared/streaming-core.js +183 -161
  62. package/dist/providers/shared/streaming-core.js.map +1 -1
  63. package/dist/providers/shared/streaming-orchestrator.d.ts +11 -0
  64. package/dist/providers/shared/streaming-orchestrator.js +11 -0
  65. package/dist/providers/shared/streaming-orchestrator.js.map +1 -0
  66. package/dist/providers/shared/user-agent-guard.d.ts +3 -0
  67. package/dist/providers/shared/user-agent-guard.js +17 -0
  68. package/dist/providers/shared/user-agent-guard.js.map +1 -0
  69. package/dist/settings-patcher/claude.d.ts +1 -2
  70. package/dist/settings-patcher/claude.js +35 -13
  71. package/dist/settings-patcher/claude.js.map +1 -1
  72. package/dist/settings-patcher/codex.d.ts +1 -20
  73. package/dist/settings-patcher/codex.js +58 -31
  74. package/dist/settings-patcher/codex.js.map +1 -1
  75. package/dist/settings-patcher/index.d.ts +5 -14
  76. package/dist/settings-patcher/index.js +26 -6
  77. package/dist/settings-patcher/index.js.map +1 -1
  78. package/dist/settings-patcher/types.d.ts +21 -0
  79. package/dist/settings-patcher/url-utils.d.ts +1 -0
  80. package/dist/settings-patcher/url-utils.js +6 -0
  81. package/dist/settings-patcher/url-utils.js.map +1 -0
  82. package/dist/shutdown.d.ts +16 -0
  83. package/dist/shutdown.js +53 -0
  84. package/dist/shutdown.js.map +1 -0
  85. package/dist/startup.d.ts +1 -1
  86. package/dist/startup.js +74 -133
  87. package/dist/startup.js.map +1 -1
  88. package/dist/tool-bridge/constants.d.ts +4 -2
  89. package/dist/tool-bridge/constants.js +4 -2
  90. package/dist/tool-bridge/constants.js.map +1 -1
  91. package/dist/tool-bridge/index.d.ts +2 -1
  92. package/dist/tool-bridge/index.js +5 -1
  93. package/dist/tool-bridge/index.js.map +1 -1
  94. package/dist/tool-bridge/routes.d.ts +2 -2
  95. package/dist/tool-bridge/routes.js +24 -22
  96. package/dist/tool-bridge/routes.js.map +1 -1
  97. package/dist/tool-bridge/session-lifecycle.js +6 -3
  98. package/dist/tool-bridge/session-lifecycle.js.map +1 -1
  99. package/dist/tool-bridge/state.d.ts +4 -25
  100. package/dist/tool-bridge/state.js +6 -65
  101. package/dist/tool-bridge/state.js.map +1 -1
  102. package/dist/tool-bridge/tool-router.d.ts +1 -0
  103. package/dist/tool-bridge/tool-router.js +26 -19
  104. package/dist/tool-bridge/tool-router.js.map +1 -1
  105. package/dist/utils/child-process.d.ts +2 -0
  106. package/dist/utils/child-process.js +8 -0
  107. package/dist/utils/child-process.js.map +1 -0
  108. package/dist/utils/type-guards.d.ts +2 -0
  109. package/dist/utils/type-guards.js +7 -0
  110. package/dist/utils/type-guards.js.map +1 -0
  111. 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: string;
5
+ proxyFlag: ProxyMode;
4
6
  routes: string[];
5
7
  cwd: string;
6
8
  autoPatch?: boolean | undefined;
7
- agentPath?: string | null | undefined;
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
- console.log();
4
- console.log(` ${dim("Provider")} ${info.providerName} ${dim(`(--proxy ${info.proxyFlag})`)}`);
5
- console.log(` ${dim("Routes")} ${info.routes.join(dim(", "))}`);
6
- console.log(` ${dim("Directory")} ${info.cwd}`);
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
- console.log(` ${dim("Auto-patch")} enabled`);
42
+ lines.push(` ${dim("Auto-patch")} enabled`);
9
43
  }
10
- if (info.agentBinaryName) {
11
- if (info.agentPath) {
12
- console.log(` ${dim("Agent")} ${info.agentPath}`);
13
- }
14
- else {
15
- console.log(` ${dim("Agent")} ${dim(`not found (expected at ${info.agentsDir ?? ""}/<version>/${info.agentBinaryName})`)}`);
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
- console.log();
53
+ lines.push("");
54
+ console.log(lines.join("\n"));
19
55
  }
20
56
  //# sourceMappingURL=banner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAaxC,MAAM,UAAU,gBAAgB,CAAC,IAAqB;IACpD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,0BAA0B,IAAI,CAAC,SAAS,IAAI,EAAE,cAAc,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC,CAAC;QACpI,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
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,2 @@
1
+ export declare const BRIDGE_SERVER_NAME = "xcode-bridge";
2
+ export declare const BRIDGE_TOOL_PREFIX = "xcode-bridge-";
@@ -0,0 +1,3 @@
1
+ export const BRIDGE_SERVER_NAME = "xcode-bridge";
2
+ export const BRIDGE_TOOL_PREFIX = `${BRIDGE_SERVER_NAME}-`;
3
+ //# sourceMappingURL=bridge-constants.js.map
@@ -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"}
@@ -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;
@@ -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: ${VALID_PROXIES.join(", ")}`);
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,EAAkB,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;AAGtD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAgB,CAAC;AAE5D,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,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,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"}
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 { z } from "zod";
2
- import type { Logger, MCPServer } from "copilot-sdk-proxy";
3
- export type { MCPLocalServer, MCPRemoteServer, MCPServer, ApprovalRule, ReasoningEffort, } from "copilot-sdk-proxy";
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
- // Xcode config schema, extends core with per-provider toolBridge + mcpServers
7
- const MCPLocalServerSchema = z.object({
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
- export async function loadConfig(configPath, logger, proxy) {
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 instanceof Error && "code" in err && err.code === "ENOENT") {
42
+ if (isErrnoException(err) && err.code === "ENOENT") {
91
43
  logger.warn(`No config file at ${absolutePath}, using defaults`);
92
- return DEFAULT_CONFIG;
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
- const configDir = dirname(absolutePath);
116
- const parsed = parseResult.data;
67
+ return { data: parseResult.data, configDir: dirname(absolutePath) };
68
+ }
69
+ function buildServerConfig(parsed, configDir, proxy) {
117
70
  const provider = parsed[proxy];
118
- const config = {
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 * 1024 * 1024,
76
+ bodyLimit: parsed.bodyLimitMiB * BYTES_PER_MIB,
124
77
  toolBridge: provider.toolBridge,
125
78
  mcpServers: resolveServerPaths(provider.mcpServers, configDir),
126
79
  };
127
- return config;
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
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
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, AnthropicMessage, Logger } from "copilot-sdk-proxy";
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 declare class ConversationManager {
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 | null;
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;