xcode-copilot-server 2.2.0 → 3.1.0

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 (173) hide show
  1. package/config.json5 +13 -8
  2. package/dist/cli-validators.d.ts +2 -0
  3. package/dist/cli-validators.js +10 -3
  4. package/dist/cli-validators.js.map +1 -1
  5. package/dist/config.d.ts +1 -1
  6. package/dist/config.js +2 -2
  7. package/dist/config.js.map +1 -1
  8. package/dist/conversation-manager.d.ts +2 -1
  9. package/dist/conversation-manager.js +20 -1
  10. package/dist/conversation-manager.js.map +1 -1
  11. package/dist/index.js +66 -105
  12. package/dist/index.js.map +1 -1
  13. package/dist/launchd/agent.d.ts +52 -0
  14. package/dist/launchd/agent.js +185 -0
  15. package/dist/launchd/agent.js.map +1 -0
  16. package/dist/launchd/index.d.ts +4 -0
  17. package/dist/launchd/index.js +3 -0
  18. package/dist/launchd/index.js.map +1 -0
  19. package/dist/launchd/socket.d.ts +5 -0
  20. package/dist/launchd/socket.js +31 -0
  21. package/dist/launchd/socket.js.map +1 -0
  22. package/dist/launchd-agent.d.ts +50 -0
  23. package/dist/launchd-agent.js +175 -0
  24. package/dist/launchd-agent.js.map +1 -0
  25. package/dist/launchd-socket.d.ts +5 -0
  26. package/dist/launchd-socket.js +33 -0
  27. package/dist/launchd-socket.js.map +1 -0
  28. package/dist/{handlers/messages → providers/claude}/count-tokens.js +2 -2
  29. package/dist/providers/claude/count-tokens.js.map +1 -0
  30. package/dist/{handlers/messages.d.ts → providers/claude/handler.d.ts} +2 -2
  31. package/dist/{handlers/messages.js → providers/claude/handler.js} +8 -8
  32. package/dist/providers/claude/handler.js.map +1 -0
  33. package/dist/{utils/anthropic-prompt.d.ts → providers/claude/prompt.d.ts} +1 -1
  34. package/dist/{utils/anthropic-prompt.js → providers/claude/prompt.js} +2 -2
  35. package/dist/providers/claude/prompt.js.map +1 -0
  36. package/dist/providers/{anthropic.d.ts → claude/provider.d.ts} +2 -2
  37. package/dist/providers/{anthropic.js → claude/provider.js} +8 -8
  38. package/dist/providers/claude/provider.js.map +1 -0
  39. package/dist/{schemas/anthropic.js → providers/claude/schemas.js} +1 -1
  40. package/dist/providers/claude/schemas.js.map +1 -0
  41. package/dist/providers/claude/streaming.js +116 -0
  42. package/dist/providers/claude/streaming.js.map +1 -0
  43. package/dist/{handlers/messages/tool-result-handler.d.ts → providers/claude/tool-results.d.ts} +1 -1
  44. package/dist/{handlers/messages/tool-result-handler.js → providers/claude/tool-results.js} +1 -1
  45. package/dist/providers/claude/tool-results.js.map +1 -0
  46. package/dist/providers/codex/handler.d.ts +4 -0
  47. package/dist/providers/codex/handler.js +164 -0
  48. package/dist/providers/codex/handler.js.map +1 -0
  49. package/dist/providers/codex/prompt.d.ts +4 -0
  50. package/dist/providers/codex/prompt.js +58 -0
  51. package/dist/providers/codex/prompt.js.map +1 -0
  52. package/dist/providers/codex/provider.d.ts +5 -0
  53. package/dist/providers/codex/provider.js +24 -0
  54. package/dist/providers/codex/provider.js.map +1 -0
  55. package/dist/providers/codex/schemas.d.ts +122 -0
  56. package/dist/providers/codex/schemas.js +55 -0
  57. package/dist/providers/codex/schemas.js.map +1 -0
  58. package/dist/providers/codex/streaming.d.ts +9 -0
  59. package/dist/providers/codex/streaming.js +172 -0
  60. package/dist/providers/codex/streaming.js.map +1 -0
  61. package/dist/providers/codex/tool-results.d.ts +4 -0
  62. package/dist/providers/codex/tool-results.js +9 -0
  63. package/dist/providers/codex/tool-results.js.map +1 -0
  64. package/dist/providers/index.d.ts +6 -1
  65. package/dist/providers/index.js +5 -3
  66. package/dist/providers/index.js.map +1 -1
  67. package/dist/{handlers/completions.d.ts → providers/openai/handler.d.ts} +2 -2
  68. package/dist/{handlers/completions.js → providers/openai/handler.js} +6 -6
  69. package/dist/providers/openai/handler.js.map +1 -0
  70. package/dist/{handlers → providers/openai}/models.d.ts +1 -1
  71. package/dist/{handlers → providers/openai}/models.js +1 -1
  72. package/dist/providers/openai/models.js.map +1 -0
  73. package/dist/providers/openai/prompt.d.ts +3 -0
  74. package/dist/{utils → providers/openai}/prompt.js +3 -15
  75. package/dist/providers/openai/prompt.js.map +1 -0
  76. package/dist/providers/{openai.d.ts → openai/provider.d.ts} +1 -1
  77. package/dist/providers/{openai.js → openai/provider.js} +4 -4
  78. package/dist/providers/openai/provider.js.map +1 -0
  79. package/dist/{schemas/openai.js → providers/openai/schemas.js} +1 -1
  80. package/dist/providers/openai/schemas.js.map +1 -0
  81. package/dist/{handlers/completions → providers/openai}/streaming.js +3 -3
  82. package/dist/providers/openai/streaming.js.map +1 -0
  83. package/dist/providers/shared/errors.js.map +1 -0
  84. package/dist/{utils → providers/shared}/model-resolver.d.ts +1 -1
  85. package/dist/providers/shared/model-resolver.js.map +1 -0
  86. package/dist/providers/shared/prompt-utils.d.ts +1 -0
  87. package/dist/providers/shared/prompt-utils.js +15 -0
  88. package/dist/providers/shared/prompt-utils.js.map +1 -0
  89. package/dist/{handlers → providers/shared}/session-config.d.ts +2 -2
  90. package/dist/{handlers → providers/shared}/session-config.js +24 -5
  91. package/dist/providers/shared/session-config.js.map +1 -0
  92. package/dist/providers/shared/streaming-core.d.ts +19 -0
  93. package/dist/providers/shared/streaming-core.js +176 -0
  94. package/dist/providers/shared/streaming-core.js.map +1 -0
  95. package/dist/{handlers → providers/shared}/streaming-utils.d.ts +2 -1
  96. package/dist/{handlers → providers/shared}/streaming-utils.js +11 -2
  97. package/dist/providers/shared/streaming-utils.js.map +1 -0
  98. package/dist/schemas/config.d.ts +19 -1
  99. package/dist/schemas/config.js +2 -1
  100. package/dist/schemas/config.js.map +1 -1
  101. package/dist/server.js +1 -2
  102. package/dist/server.js.map +1 -1
  103. package/dist/settings-patcher/claude.d.ts +5 -0
  104. package/dist/{settings-patcher.js → settings-patcher/claude.js} +4 -8
  105. package/dist/settings-patcher/claude.js.map +1 -0
  106. package/dist/settings-patcher/codex.d.ts +23 -0
  107. package/dist/settings-patcher/codex.js +114 -0
  108. package/dist/settings-patcher/codex.js.map +1 -0
  109. package/dist/settings-patcher/index.d.ts +15 -0
  110. package/dist/settings-patcher/index.js +9 -0
  111. package/dist/settings-patcher/index.js.map +1 -0
  112. package/dist/{settings-patcher.d.ts → settings-patcher/types.d.ts} +1 -5
  113. package/dist/settings-patcher/types.js.map +1 -0
  114. package/dist/startup.d.ts +13 -0
  115. package/dist/startup.js +193 -0
  116. package/dist/startup.js.map +1 -0
  117. package/dist/tool-bridge/constants.d.ts +2 -0
  118. package/dist/tool-bridge/constants.js +3 -0
  119. package/dist/tool-bridge/constants.js.map +1 -0
  120. package/dist/tool-bridge/index.d.ts +1 -0
  121. package/dist/tool-bridge/index.js +1 -0
  122. package/dist/tool-bridge/index.js.map +1 -1
  123. package/dist/tool-bridge/routes.js +2 -1
  124. package/dist/tool-bridge/routes.js.map +1 -1
  125. package/dist/tool-bridge/session-lifecycle.js +1 -1
  126. package/dist/tool-bridge/state.d.ts +1 -1
  127. package/dist/tool-bridge/tool-cache.d.ts +1 -1
  128. package/dist/ui.d.ts +7 -0
  129. package/dist/ui.js +8 -0
  130. package/dist/ui.js.map +1 -1
  131. package/package.json +8 -5
  132. package/LICENSE +0 -21
  133. package/README.md +0 -212
  134. package/dist/config-schema.d.ts +0 -85
  135. package/dist/config-schema.js +0 -38
  136. package/dist/config-schema.js.map +0 -1
  137. package/dist/handlers/completions/session-config.d.ts +0 -12
  138. package/dist/handlers/completions/session-config.js +0 -63
  139. package/dist/handlers/completions/session-config.js.map +0 -1
  140. package/dist/handlers/completions/streaming.js.map +0 -1
  141. package/dist/handlers/completions.js.map +0 -1
  142. package/dist/handlers/errors.js.map +0 -1
  143. package/dist/handlers/messages/count-tokens.js.map +0 -1
  144. package/dist/handlers/messages/streaming.js +0 -274
  145. package/dist/handlers/messages/streaming.js.map +0 -1
  146. package/dist/handlers/messages/tool-result-handler.js.map +0 -1
  147. package/dist/handlers/messages.js.map +0 -1
  148. package/dist/handlers/models.js.map +0 -1
  149. package/dist/handlers/session-config.js.map +0 -1
  150. package/dist/handlers/streaming-utils.js.map +0 -1
  151. package/dist/providers/anthropic.js.map +0 -1
  152. package/dist/providers/openai.js.map +0 -1
  153. package/dist/schemas/anthropic.js.map +0 -1
  154. package/dist/schemas/openai.js.map +0 -1
  155. package/dist/schemas.d.ts +0 -49
  156. package/dist/schemas.js +0 -75
  157. package/dist/schemas.js.map +0 -1
  158. package/dist/settings-patcher.js.map +0 -1
  159. package/dist/types.d.ts +0 -83
  160. package/dist/types.js.map +0 -1
  161. package/dist/utils/anthropic-prompt.js.map +0 -1
  162. package/dist/utils/model-resolver.js.map +0 -1
  163. package/dist/utils/prompt.d.ts +0 -3
  164. package/dist/utils/prompt.js.map +0 -1
  165. /package/dist/{handlers/messages → providers/claude}/count-tokens.d.ts +0 -0
  166. /package/dist/{schemas/anthropic.d.ts → providers/claude/schemas.d.ts} +0 -0
  167. /package/dist/{handlers/messages → providers/claude}/streaming.d.ts +0 -0
  168. /package/dist/{schemas/openai.d.ts → providers/openai/schemas.d.ts} +0 -0
  169. /package/dist/{handlers/completions → providers/openai}/streaming.d.ts +0 -0
  170. /package/dist/{handlers → providers/shared}/errors.d.ts +0 -0
  171. /package/dist/{handlers → providers/shared}/errors.js +0 -0
  172. /package/dist/{utils → providers/shared}/model-resolver.js +0 -0
  173. /package/dist/{types.js → settings-patcher/types.js} +0 -0
@@ -0,0 +1,176 @@
1
+ import { BRIDGE_TOOL_PREFIX } from "../../tool-bridge/index.js";
2
+ import { formatCompaction } from "./streaming-utils.js";
3
+ // Xcode doesn't know about the bridge prefix so we strip it
4
+ export function stripBridgePrefix(name) {
5
+ return name.startsWith(BRIDGE_TOOL_PREFIX) ? name.slice(BRIDGE_TOOL_PREFIX.length) : name;
6
+ }
7
+ export async function runSessionStreaming(state, session, prompt, logger, hasBridge, protocol, initialReply) {
8
+ state.markSessionActive();
9
+ let pendingDeltas = [];
10
+ let sessionDone = false;
11
+ const toolNames = new Map();
12
+ function getReply() {
13
+ return state.currentReply;
14
+ }
15
+ function flushToProtocol() {
16
+ if (pendingDeltas.length === 0)
17
+ return;
18
+ const r = getReply();
19
+ if (!r)
20
+ return;
21
+ protocol.flushDeltas(r, pendingDeltas);
22
+ pendingDeltas = [];
23
+ }
24
+ const unsubscribe = session.on((event) => {
25
+ logger.debug(`Session event: ${event.type}`);
26
+ if (event.type === "tool.execution_start") {
27
+ const d = event.data;
28
+ toolNames.set(d.toolCallId, d.toolName);
29
+ logger.debug(`Running ${d.toolName} (id=${d.toolCallId}, args=${JSON.stringify(d.arguments)})`);
30
+ return;
31
+ }
32
+ if (event.type === "tool.execution_complete") {
33
+ const d = event.data;
34
+ const name = toolNames.get(d.toolCallId) ?? d.toolCallId;
35
+ toolNames.delete(d.toolCallId);
36
+ const detail = d.success
37
+ ? JSON.stringify(d.result?.content)
38
+ : d.error?.message ?? "failed";
39
+ logger.debug(`${name} done (success=${String(d.success)}, ${detail})`);
40
+ return;
41
+ }
42
+ switch (event.type) {
43
+ case "assistant.message_delta":
44
+ if (event.data.deltaContent) {
45
+ logger.debug(`Delta: ${event.data.deltaContent}`);
46
+ pendingDeltas.push(event.data.deltaContent);
47
+ }
48
+ break;
49
+ case "assistant.message": {
50
+ logger.debug(`assistant.message: toolRequests=${String(event.data.toolRequests?.length ?? 0)}`);
51
+ if (event.data.toolRequests && event.data.toolRequests.length > 0) {
52
+ const bridgeRequests = hasBridge
53
+ ? event.data.toolRequests.filter((tr) => tr.name.startsWith(BRIDGE_TOOL_PREFIX))
54
+ : event.data.toolRequests;
55
+ if (hasBridge && bridgeRequests.length < event.data.toolRequests.length) {
56
+ const skipped = event.data.toolRequests.length - bridgeRequests.length;
57
+ logger.debug(`Skipped ${String(skipped)} non-bridge tool request(s) (handled internally by CLI)`);
58
+ }
59
+ const stripped = bridgeRequests.map((tr) => {
60
+ const resolved = state.resolveToolName(stripBridgePrefix(tr.name));
61
+ return {
62
+ toolCallId: tr.toolCallId,
63
+ name: resolved,
64
+ arguments: state.normalizeArgs(resolved, (tr.arguments ?? {})),
65
+ };
66
+ });
67
+ if (stripped.length > 0) {
68
+ for (const tr of stripped) {
69
+ logger.info(`Tool request: name="${tr.name}", id="${tr.toolCallId}", args=${JSON.stringify(tr.arguments)}`);
70
+ state.registerExpected(tr.toolCallId, tr.name);
71
+ }
72
+ const r = getReply();
73
+ if (r) {
74
+ flushToProtocol();
75
+ protocol.emitToolsAndFinish(r, stripped);
76
+ r.raw.end();
77
+ state.clearReply();
78
+ protocol.reset();
79
+ state.notifyStreamingDone();
80
+ }
81
+ else {
82
+ logger.debug("Tool requests but no reply (internal retry), registered expected tools");
83
+ }
84
+ }
85
+ else {
86
+ logger.debug("All tool requests were non-bridge, none emitted");
87
+ }
88
+ }
89
+ else {
90
+ const r = getReply();
91
+ if (r) {
92
+ logger.debug(`Flushing ${String(pendingDeltas.length)} pending deltas`);
93
+ flushToProtocol();
94
+ }
95
+ }
96
+ break;
97
+ }
98
+ case "session.idle": {
99
+ logger.info(`Done, wrapping up stream (pendingDeltas=${String(pendingDeltas.length)})`);
100
+ sessionDone = true;
101
+ state.markSessionInactive();
102
+ flushToProtocol();
103
+ const r = getReply();
104
+ if (r) {
105
+ protocol.sendCompleted(r);
106
+ protocol.teardown();
107
+ r.raw.end();
108
+ state.clearReply();
109
+ state.notifyStreamingDone();
110
+ }
111
+ unsubscribe();
112
+ break;
113
+ }
114
+ case "session.compaction_start":
115
+ logger.info("Compacting context...");
116
+ break;
117
+ case "session.compaction_complete":
118
+ logger.info(`Context compacted: ${formatCompaction(event.data)}`);
119
+ break;
120
+ case "session.error": {
121
+ logger.error(`Session error: ${event.data.message}`);
122
+ sessionDone = true;
123
+ state.markSessionErrored();
124
+ state.markSessionInactive();
125
+ const r = getReply();
126
+ if (r) {
127
+ protocol.sendFailed(r);
128
+ protocol.teardown();
129
+ r.raw.end();
130
+ state.clearReply();
131
+ }
132
+ else {
133
+ protocol.teardown();
134
+ }
135
+ state.notifyStreamingDone();
136
+ unsubscribe();
137
+ break;
138
+ }
139
+ default:
140
+ logger.debug(`Unhandled event: ${event.type}, data=${JSON.stringify(event.data)}`);
141
+ break;
142
+ }
143
+ });
144
+ initialReply.raw.on("close", () => {
145
+ if (!sessionDone && state.currentReply === initialReply) {
146
+ logger.info("Client disconnected, aborting session");
147
+ protocol.teardown();
148
+ protocol.reset();
149
+ state.markSessionErrored();
150
+ state.cleanup();
151
+ unsubscribe();
152
+ session.abort().catch((err) => {
153
+ logger.error("Failed to abort session:", err);
154
+ });
155
+ state.notifyStreamingDone();
156
+ }
157
+ });
158
+ const done = state.waitForStreamingDone();
159
+ session.send({ prompt }).catch((err) => {
160
+ if (sessionDone)
161
+ return;
162
+ logger.error("Failed to send prompt:", err);
163
+ sessionDone = true;
164
+ protocol.teardown();
165
+ protocol.reset();
166
+ const r = getReply();
167
+ if (r) {
168
+ r.raw.end();
169
+ state.clearReply();
170
+ }
171
+ unsubscribe();
172
+ state.notifyStreamingDone();
173
+ });
174
+ return done;
175
+ }
176
+ //# sourceMappingURL=streaming-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-core.js","sourceRoot":"","sources":["../../../src/providers/shared/streaming-core.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,6 @@ export declare const SSE_HEADERS: {
5
5
  readonly Connection: "keep-alive";
6
6
  readonly "X-Accel-Buffering": "no";
7
7
  };
8
- export declare function sendSSEEvent(reply: FastifyReply, type: string, data: unknown): void;
8
+ export declare function sendSSEEvent(reply: FastifyReply, type: string, data: object, sequenceNumber?: number): void;
9
+ export declare function sendSSEComment(reply: FastifyReply): void;
9
10
  export declare function formatCompaction(data: unknown): string;
@@ -4,8 +4,17 @@ export const SSE_HEADERS = {
4
4
  Connection: "keep-alive",
5
5
  "X-Accel-Buffering": "no",
6
6
  };
7
- export function sendSSEEvent(reply, type, data) {
8
- reply.raw.write(`event: ${type}\ndata: ${JSON.stringify(data)}\n\n`);
7
+ export function sendSSEEvent(reply, type, data, sequenceNumber) {
8
+ if (sequenceNumber != null) {
9
+ const payload = { ...data, type, sequence_number: sequenceNumber };
10
+ reply.raw.write(`event: ${type}\ndata: ${JSON.stringify(payload)}\n\n`);
11
+ }
12
+ else {
13
+ reply.raw.write(`event: ${type}\ndata: ${JSON.stringify(data)}\n\n`);
14
+ }
15
+ }
16
+ export function sendSSEComment(reply) {
17
+ reply.raw.write(": keepalive\n\n");
9
18
  }
10
19
  export function formatCompaction(data) {
11
20
  if (!data ||
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-utils.js","sourceRoot":"","sources":["../../../src/providers/shared/streaming-utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,cAAc,EAAE,mBAAmB;IACnC,eAAe,EAAE,UAAU;IAC3B,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,IAAI;CACgB,CAAC;AAE5C,MAAM,UAAU,YAAY,CAC1B,KAAmB,EACnB,IAAY,EACZ,IAAY,EACZ,cAAuB;IAEvB,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,EAAE,GAAI,IAAgC,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;QAChG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,IACE,CAAC,IAAI;QACL,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,CAAC,qBAAqB,IAAI,IAAI,CAAC;QAChC,CAAC,CAAC,sBAAsB,IAAI,IAAI,CAAC,EACjC,CAAC;QACD,OAAO,6BAA6B,CAAC;IACvC,CAAC;IACD,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;AAC9F,CAAC"}
@@ -88,7 +88,25 @@ export declare const ServerConfigSchema: z.ZodObject<{
88
88
  timeout: z.ZodOptional<z.ZodNumber>;
89
89
  }, z.core.$strip>]>>>;
90
90
  }, z.core.$strip>>;
91
- anthropic: z.ZodDefault<z.ZodObject<{
91
+ claude: z.ZodDefault<z.ZodObject<{
92
+ toolBridge: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
93
+ mcpServers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodObject<{
94
+ type: z.ZodUnion<readonly [z.ZodLiteral<"local">, z.ZodLiteral<"stdio">]>;
95
+ command: z.ZodString;
96
+ args: z.ZodArray<z.ZodString>;
97
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
98
+ cwd: z.ZodOptional<z.ZodString>;
99
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
100
+ timeout: z.ZodOptional<z.ZodNumber>;
101
+ }, z.core.$strip>, z.ZodObject<{
102
+ type: z.ZodUnion<readonly [z.ZodLiteral<"http">, z.ZodLiteral<"sse">]>;
103
+ url: z.ZodURL;
104
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
105
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
106
+ timeout: z.ZodOptional<z.ZodNumber>;
107
+ }, z.core.$strip>]>>>;
108
+ }, z.core.$strip>>;
109
+ codex: z.ZodDefault<z.ZodObject<{
92
110
  toolBridge: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
93
111
  mcpServers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodObject<{
94
112
  type: z.ZodUnion<readonly [z.ZodLiteral<"local">, z.ZodLiteral<"stdio">]>;
@@ -30,7 +30,8 @@ const ProviderConfigSchema = z.object({
30
30
  });
31
31
  export const ServerConfigSchema = z.object({
32
32
  openai: ProviderConfigSchema.default({ toolBridge: false, mcpServers: {} }),
33
- anthropic: ProviderConfigSchema.default({ toolBridge: false, mcpServers: {} }),
33
+ claude: ProviderConfigSchema.default({ toolBridge: false, mcpServers: {} }),
34
+ codex: ProviderConfigSchema.default({ toolBridge: false, mcpServers: {} }),
34
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([]),
35
36
  excludedFilePatterns: z.array(z.string()).default([]),
36
37
  bodyLimitMiB: z
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/schemas/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/schemas/config.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -11,8 +11,7 @@ const PINO_LEVEL = {
11
11
  export async function createServer(ctx, provider) {
12
12
  const app = Fastify({
13
13
  bodyLimit: ctx.config.bodyLimit,
14
- // Destroy active connections immediately on close() so shutdown doesn't
15
- // hang waiting for SSE streams or pending tool bridge requests to drain.
14
+ // Without this, shutdown hangs waiting for SSE streams to drain
16
15
  forceCloseConnections: true,
17
16
  logger: {
18
17
  level: PINO_LEVEL[ctx.logger.level],
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAwB,MAAM,SAAS,CAAC;AACxD,OAAO,IAAI,MAAM,eAAe,CAAC;AAKjC,MAAM,UAAU,GAAG;IACjB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,OAAO;CACsB,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAe,EACf,QAAkB;IAElB,MAAM,GAAG,GAAG,OAAO,CAAC;QAClB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS;QAC/B,wEAAwE;QACxE,yEAAyE;QACzE,qBAAqB,EAAE,IAAI;QAC3B,MAAM,EAAE;YACN,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;SACpC;KACF,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QACvB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC;QACnC,cAAc,EAAE;YACd,cAAc;YACd,eAAe;YACf,gBAAgB;YAChB,mBAAmB;YACnB,WAAW;SACZ;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE5B,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAwB,MAAM,SAAS,CAAC;AACxD,OAAO,IAAI,MAAM,eAAe,CAAC;AAKjC,MAAM,UAAU,GAAG;IACjB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,OAAO;CACsB,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAe,EACf,QAAkB;IAElB,MAAM,GAAG,GAAG,OAAO,CAAC;QAClB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS;QAC/B,gEAAgE;QAChE,qBAAqB,EAAE,IAAI;QAC3B,MAAM,EAAE;YACN,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;SACpC;KACF,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QACvB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC;QACnC,cAAc,EAAE;YACd,cAAc;YACd,eAAe;YACf,gBAAgB;YAChB,mBAAmB;YACnB,WAAW;SACZ;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE5B,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { SettingsPaths, PatchResult, PatchOptions, RestoreOptions, DetectOptions } from "./types.js";
2
+ export declare function defaultSettingsPaths(): SettingsPaths;
3
+ export declare function detectPatchState(options: DetectOptions): Promise<PatchResult>;
4
+ export declare function patchClaudeSettings(options: PatchOptions): Promise<void>;
5
+ export declare function restoreClaudeSettings(options: RestoreOptions): Promise<void>;
@@ -41,14 +41,13 @@ export async function detectPatchState(options) {
41
41
  }
42
42
  return { patched: true };
43
43
  }
44
- export async function patchSettings(options) {
44
+ export async function patchClaudeSettings(options) {
45
45
  const { logger } = options;
46
46
  const p = options.paths ?? defaultSettingsPaths();
47
47
  await mkdir(p.dir, { recursive: true });
48
- // Only back up once so crash recovery doesn't overwrite the original.
48
+ // Only back up once so a crash doesn't clobber the real original
49
49
  if (existsSync(p.file) && !existsSync(p.backup)) {
50
50
  await copyFile(p.file, p.backup);
51
- logger.info("Backed up settings.json");
52
51
  }
53
52
  let settings = {};
54
53
  try {
@@ -63,17 +62,14 @@ export async function patchSettings(options) {
63
62
  ANTHROPIC_AUTH_TOKEN: options.authToken ?? "12345",
64
63
  };
65
64
  await writeFile(p.file, JSON.stringify(settings, null, 2) + "\n", "utf-8");
66
- logger.info(`Patched settings.json to point to http://localhost:${String(options.port)}`);
67
65
  }
68
- export async function restoreSettings(options) {
69
- const { logger } = options;
66
+ export async function restoreClaudeSettings(options) {
70
67
  const p = options.paths ?? defaultSettingsPaths();
71
68
  if (existsSync(p.file)) {
72
69
  await unlink(p.file);
73
70
  }
74
71
  if (existsSync(p.backup)) {
75
72
  await rename(p.backup, p.file);
76
- logger.info("Restored settings.json from backup");
77
73
  }
78
74
  }
79
- //# sourceMappingURL=settings-patcher.js.map
75
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/settings-patcher/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Logger } from "../logger.js";
2
+ import type { PatchResult } from "./types.js";
3
+ export type ExecFn = (cmd: string, args: string[]) => Promise<string>;
4
+ export declare function defaultCodexBackupPath(): string;
5
+ export interface CodexPatchOptions {
6
+ port: number;
7
+ logger: Logger;
8
+ exec?: ExecFn;
9
+ backupFile?: string;
10
+ }
11
+ export interface CodexRestoreOptions {
12
+ logger: Logger;
13
+ exec?: ExecFn;
14
+ backupFile?: string;
15
+ }
16
+ export interface CodexDetectOptions {
17
+ logger: Logger;
18
+ exec?: ExecFn;
19
+ backupFile?: string;
20
+ }
21
+ export declare function detectCodexPatchState(options: CodexDetectOptions): Promise<PatchResult>;
22
+ export declare function patchCodexSettings(options: CodexPatchOptions): Promise<void>;
23
+ export declare function restoreCodexSettings(options: CodexRestoreOptions): Promise<void>;
@@ -0,0 +1,114 @@
1
+ // Config.toml doesn't work here because the built-in "openai" provider
2
+ // always takes priority over custom [model_providers.openai] entries:
3
+ // https://github.com/openai/codex/blob/abeafbdca17f6102099ac5b792761b6883c52d35/codex-rs/core/src/config/mod.rs#L1544
4
+ //
5
+ // So we set OPENAI_BASE_URL via launchctl instead, that way Xcode (and
6
+ // any Codex process it spawns) can see it without a shell restart.
7
+ import { existsSync } from "node:fs";
8
+ import { readFile, writeFile, unlink, mkdir } from "node:fs/promises";
9
+ import { execFile as execFileCb } from "node:child_process";
10
+ import { promisify } from "node:util";
11
+ import { join } from "node:path";
12
+ import { homedir } from "node:os";
13
+ const execFileAsync = promisify(execFileCb);
14
+ async function defaultExec(cmd, args) {
15
+ const { stdout } = await execFileAsync(cmd, args);
16
+ return stdout;
17
+ }
18
+ export function defaultCodexBackupPath() {
19
+ return join(homedir(), "Library/Developer/Xcode/CodingAssistant/codex", "env.backup.json");
20
+ }
21
+ async function launchctlGetenv(exec, name) {
22
+ try {
23
+ const value = (await exec("launchctl", ["getenv", name])).trim();
24
+ return value || null;
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
30
+ export async function detectCodexPatchState(options) {
31
+ const { logger } = options;
32
+ const exec = options.exec ?? defaultExec;
33
+ const backupFile = options.backupFile ?? defaultCodexBackupPath();
34
+ if (!existsSync(backupFile)) {
35
+ return { patched: false };
36
+ }
37
+ try {
38
+ const url = await launchctlGetenv(exec, "OPENAI_BASE_URL");
39
+ if (url) {
40
+ const match = /localhost:(\d+)/.exec(url);
41
+ if (match?.[1]) {
42
+ return { patched: true, port: parseInt(match[1], 10) };
43
+ }
44
+ }
45
+ }
46
+ catch (err) {
47
+ logger.warn(`Could not read OPENAI_BASE_URL: ${String(err)}`);
48
+ }
49
+ return { patched: true };
50
+ }
51
+ export async function patchCodexSettings(options) {
52
+ const { port } = options;
53
+ const exec = options.exec ?? defaultExec;
54
+ const backupFile = options.backupFile ?? defaultCodexBackupPath();
55
+ const baseUrl = `http://localhost:${String(port)}/v1`;
56
+ // Only back up once so a crash doesn't clobber the real originals
57
+ if (!existsSync(backupFile)) {
58
+ const backup = {
59
+ OPENAI_BASE_URL: await launchctlGetenv(exec, "OPENAI_BASE_URL"),
60
+ OPENAI_API_KEY: await launchctlGetenv(exec, "OPENAI_API_KEY"),
61
+ };
62
+ const dir = join(backupFile, "..");
63
+ await mkdir(dir, { recursive: true });
64
+ await writeFile(backupFile, JSON.stringify(backup, null, 2) + "\n", "utf-8");
65
+ }
66
+ await exec("launchctl", ["setenv", "OPENAI_BASE_URL", baseUrl]);
67
+ await exec("launchctl", ["setenv", "OPENAI_API_KEY", "xcode-copilot"]);
68
+ }
69
+ export async function restoreCodexSettings(options) {
70
+ const { logger } = options;
71
+ const exec = options.exec ?? defaultExec;
72
+ const backupFile = options.backupFile ?? defaultCodexBackupPath();
73
+ if (!existsSync(backupFile)) {
74
+ // No backup found, just unset to be safe
75
+ try {
76
+ await exec("launchctl", ["unsetenv", "OPENAI_BASE_URL"]);
77
+ await exec("launchctl", ["unsetenv", "OPENAI_API_KEY"]);
78
+ }
79
+ catch (err) {
80
+ logger.warn(`Failed to unset env vars: ${String(err)}`);
81
+ }
82
+ return;
83
+ }
84
+ try {
85
+ const raw = await readFile(backupFile, "utf-8");
86
+ const backup = JSON.parse(raw);
87
+ if (backup.OPENAI_BASE_URL != null) {
88
+ await exec("launchctl", ["setenv", "OPENAI_BASE_URL", backup.OPENAI_BASE_URL]);
89
+ }
90
+ else {
91
+ await exec("launchctl", ["unsetenv", "OPENAI_BASE_URL"]);
92
+ }
93
+ if (backup.OPENAI_API_KEY != null) {
94
+ await exec("launchctl", ["setenv", "OPENAI_API_KEY", backup.OPENAI_API_KEY]);
95
+ }
96
+ else {
97
+ await exec("launchctl", ["unsetenv", "OPENAI_API_KEY"]);
98
+ }
99
+ await unlink(backupFile);
100
+ logger.info("Restored env vars from backup");
101
+ }
102
+ catch (err) {
103
+ logger.warn(`Failed to restore env vars: ${String(err)}`);
104
+ // Restore failed, just try to unset both
105
+ try {
106
+ await exec("launchctl", ["unsetenv", "OPENAI_BASE_URL"]);
107
+ await exec("launchctl", ["unsetenv", "OPENAI_API_KEY"]);
108
+ }
109
+ catch (unsetErr) {
110
+ logger.warn(`Failed to unset env vars during recovery: ${String(unsetErr)}`);
111
+ }
112
+ }
113
+ }
114
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/settings-patcher/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Logger } from "../logger.js";
2
+ import type { ProxyName } from "../providers/index.js";
3
+ export type { SettingsPaths, Settings, PatchResult, PatchOptions, RestoreOptions, DetectOptions, } from "./types.js";
4
+ export { defaultSettingsPaths, detectPatchState, patchClaudeSettings, restoreClaudeSettings, } from "./claude.js";
5
+ export type { ExecFn, CodexPatchOptions, CodexRestoreOptions, CodexDetectOptions, } from "./codex.js";
6
+ export { defaultCodexBackupPath, detectCodexPatchState, patchCodexSettings, restoreCodexSettings, } from "./codex.js";
7
+ export declare const patcherByProxy: Partial<Record<ProxyName, {
8
+ patch: (opts: {
9
+ port: number;
10
+ logger: Logger;
11
+ }) => Promise<void>;
12
+ restore: (opts: {
13
+ logger: Logger;
14
+ }) => Promise<void>;
15
+ }>>;
@@ -0,0 +1,9 @@
1
+ import { patchClaudeSettings, restoreClaudeSettings } from "./claude.js";
2
+ import { patchCodexSettings, restoreCodexSettings } from "./codex.js";
3
+ export { defaultSettingsPaths, detectPatchState, patchClaudeSettings, restoreClaudeSettings, } from "./claude.js";
4
+ export { defaultCodexBackupPath, detectCodexPatchState, patchCodexSettings, restoreCodexSettings, } from "./codex.js";
5
+ export const patcherByProxy = {
6
+ claude: { patch: patchClaudeSettings, restore: restoreClaudeSettings },
7
+ codex: { patch: patchCodexSettings, restore: restoreCodexSettings },
8
+ };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/settings-patcher/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAWtE,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AASrB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,cAAc,GAGrB;IACJ,MAAM,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,qBAAqB,EAAE;IACtE,KAAK,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,oBAAoB,EAAE;CACpE,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Logger } from "./logger.js";
1
+ import type { Logger } from "../logger.js";
2
2
  export interface SettingsPaths {
3
3
  dir: string;
4
4
  file: string;
@@ -22,8 +22,4 @@ export interface PatchOptions extends BaseOptions {
22
22
  }
23
23
  export type RestoreOptions = BaseOptions;
24
24
  export type DetectOptions = BaseOptions;
25
- export declare function defaultSettingsPaths(): SettingsPaths;
26
- export declare function detectPatchState(options: DetectOptions): Promise<PatchResult>;
27
- export declare function patchSettings(options: PatchOptions): Promise<void>;
28
- export declare function restoreSettings(options: RestoreOptions): Promise<void>;
29
25
  export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/settings-patcher/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ export interface StartOptions {
2
+ port: string;
3
+ proxy: string;
4
+ logLevel: string;
5
+ version: string;
6
+ defaultConfigPath: string;
7
+ config?: string;
8
+ cwd?: string;
9
+ autoPatch?: true;
10
+ launchd?: true;
11
+ idleTimeout?: string;
12
+ }
13
+ export declare function startServer(options: StartOptions): Promise<void>;