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.
- package/config.json5 +13 -8
- package/dist/cli-validators.d.ts +2 -0
- package/dist/cli-validators.js +10 -3
- package/dist/cli-validators.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/conversation-manager.d.ts +2 -1
- package/dist/conversation-manager.js +20 -1
- package/dist/conversation-manager.js.map +1 -1
- package/dist/index.js +66 -105
- package/dist/index.js.map +1 -1
- package/dist/launchd/agent.d.ts +52 -0
- package/dist/launchd/agent.js +185 -0
- package/dist/launchd/agent.js.map +1 -0
- package/dist/launchd/index.d.ts +4 -0
- package/dist/launchd/index.js +3 -0
- package/dist/launchd/index.js.map +1 -0
- package/dist/launchd/socket.d.ts +5 -0
- package/dist/launchd/socket.js +31 -0
- package/dist/launchd/socket.js.map +1 -0
- package/dist/launchd-agent.d.ts +50 -0
- package/dist/launchd-agent.js +175 -0
- package/dist/launchd-agent.js.map +1 -0
- package/dist/launchd-socket.d.ts +5 -0
- package/dist/launchd-socket.js +33 -0
- package/dist/launchd-socket.js.map +1 -0
- package/dist/{handlers/messages → providers/claude}/count-tokens.js +2 -2
- package/dist/providers/claude/count-tokens.js.map +1 -0
- package/dist/{handlers/messages.d.ts → providers/claude/handler.d.ts} +2 -2
- package/dist/{handlers/messages.js → providers/claude/handler.js} +8 -8
- package/dist/providers/claude/handler.js.map +1 -0
- package/dist/{utils/anthropic-prompt.d.ts → providers/claude/prompt.d.ts} +1 -1
- package/dist/{utils/anthropic-prompt.js → providers/claude/prompt.js} +2 -2
- package/dist/providers/claude/prompt.js.map +1 -0
- package/dist/providers/{anthropic.d.ts → claude/provider.d.ts} +2 -2
- package/dist/providers/{anthropic.js → claude/provider.js} +8 -8
- package/dist/providers/claude/provider.js.map +1 -0
- package/dist/{schemas/anthropic.js → providers/claude/schemas.js} +1 -1
- package/dist/providers/claude/schemas.js.map +1 -0
- package/dist/providers/claude/streaming.js +116 -0
- package/dist/providers/claude/streaming.js.map +1 -0
- package/dist/{handlers/messages/tool-result-handler.d.ts → providers/claude/tool-results.d.ts} +1 -1
- package/dist/{handlers/messages/tool-result-handler.js → providers/claude/tool-results.js} +1 -1
- package/dist/providers/claude/tool-results.js.map +1 -0
- package/dist/providers/codex/handler.d.ts +4 -0
- package/dist/providers/codex/handler.js +164 -0
- package/dist/providers/codex/handler.js.map +1 -0
- package/dist/providers/codex/prompt.d.ts +4 -0
- package/dist/providers/codex/prompt.js +58 -0
- package/dist/providers/codex/prompt.js.map +1 -0
- package/dist/providers/codex/provider.d.ts +5 -0
- package/dist/providers/codex/provider.js +24 -0
- package/dist/providers/codex/provider.js.map +1 -0
- package/dist/providers/codex/schemas.d.ts +122 -0
- package/dist/providers/codex/schemas.js +55 -0
- package/dist/providers/codex/schemas.js.map +1 -0
- package/dist/providers/codex/streaming.d.ts +9 -0
- package/dist/providers/codex/streaming.js +172 -0
- package/dist/providers/codex/streaming.js.map +1 -0
- package/dist/providers/codex/tool-results.d.ts +4 -0
- package/dist/providers/codex/tool-results.js +9 -0
- package/dist/providers/codex/tool-results.js.map +1 -0
- package/dist/providers/index.d.ts +6 -1
- package/dist/providers/index.js +5 -3
- package/dist/providers/index.js.map +1 -1
- package/dist/{handlers/completions.d.ts → providers/openai/handler.d.ts} +2 -2
- package/dist/{handlers/completions.js → providers/openai/handler.js} +6 -6
- package/dist/providers/openai/handler.js.map +1 -0
- package/dist/{handlers → providers/openai}/models.d.ts +1 -1
- package/dist/{handlers → providers/openai}/models.js +1 -1
- package/dist/providers/openai/models.js.map +1 -0
- package/dist/providers/openai/prompt.d.ts +3 -0
- package/dist/{utils → providers/openai}/prompt.js +3 -15
- package/dist/providers/openai/prompt.js.map +1 -0
- package/dist/providers/{openai.d.ts → openai/provider.d.ts} +1 -1
- package/dist/providers/{openai.js → openai/provider.js} +4 -4
- package/dist/providers/openai/provider.js.map +1 -0
- package/dist/{schemas/openai.js → providers/openai/schemas.js} +1 -1
- package/dist/providers/openai/schemas.js.map +1 -0
- package/dist/{handlers/completions → providers/openai}/streaming.js +3 -3
- package/dist/providers/openai/streaming.js.map +1 -0
- package/dist/providers/shared/errors.js.map +1 -0
- package/dist/{utils → providers/shared}/model-resolver.d.ts +1 -1
- package/dist/providers/shared/model-resolver.js.map +1 -0
- package/dist/providers/shared/prompt-utils.d.ts +1 -0
- package/dist/providers/shared/prompt-utils.js +15 -0
- package/dist/providers/shared/prompt-utils.js.map +1 -0
- package/dist/{handlers → providers/shared}/session-config.d.ts +2 -2
- package/dist/{handlers → providers/shared}/session-config.js +24 -5
- package/dist/providers/shared/session-config.js.map +1 -0
- package/dist/providers/shared/streaming-core.d.ts +19 -0
- package/dist/providers/shared/streaming-core.js +176 -0
- package/dist/providers/shared/streaming-core.js.map +1 -0
- package/dist/{handlers → providers/shared}/streaming-utils.d.ts +2 -1
- package/dist/{handlers → providers/shared}/streaming-utils.js +11 -2
- package/dist/providers/shared/streaming-utils.js.map +1 -0
- package/dist/schemas/config.d.ts +19 -1
- package/dist/schemas/config.js +2 -1
- package/dist/schemas/config.js.map +1 -1
- package/dist/server.js +1 -2
- package/dist/server.js.map +1 -1
- package/dist/settings-patcher/claude.d.ts +5 -0
- package/dist/{settings-patcher.js → settings-patcher/claude.js} +4 -8
- package/dist/settings-patcher/claude.js.map +1 -0
- package/dist/settings-patcher/codex.d.ts +23 -0
- package/dist/settings-patcher/codex.js +114 -0
- package/dist/settings-patcher/codex.js.map +1 -0
- package/dist/settings-patcher/index.d.ts +15 -0
- package/dist/settings-patcher/index.js +9 -0
- package/dist/settings-patcher/index.js.map +1 -0
- package/dist/{settings-patcher.d.ts → settings-patcher/types.d.ts} +1 -5
- package/dist/settings-patcher/types.js.map +1 -0
- package/dist/startup.d.ts +13 -0
- package/dist/startup.js +193 -0
- package/dist/startup.js.map +1 -0
- package/dist/tool-bridge/constants.d.ts +2 -0
- package/dist/tool-bridge/constants.js +3 -0
- package/dist/tool-bridge/constants.js.map +1 -0
- package/dist/tool-bridge/index.d.ts +1 -0
- package/dist/tool-bridge/index.js +1 -0
- package/dist/tool-bridge/index.js.map +1 -1
- package/dist/tool-bridge/routes.js +2 -1
- package/dist/tool-bridge/routes.js.map +1 -1
- package/dist/tool-bridge/session-lifecycle.js +1 -1
- package/dist/tool-bridge/state.d.ts +1 -1
- package/dist/tool-bridge/tool-cache.d.ts +1 -1
- package/dist/ui.d.ts +7 -0
- package/dist/ui.js +8 -0
- package/dist/ui.js.map +1 -1
- package/package.json +8 -5
- package/LICENSE +0 -21
- package/README.md +0 -212
- package/dist/config-schema.d.ts +0 -85
- package/dist/config-schema.js +0 -38
- package/dist/config-schema.js.map +0 -1
- package/dist/handlers/completions/session-config.d.ts +0 -12
- package/dist/handlers/completions/session-config.js +0 -63
- package/dist/handlers/completions/session-config.js.map +0 -1
- package/dist/handlers/completions/streaming.js.map +0 -1
- package/dist/handlers/completions.js.map +0 -1
- package/dist/handlers/errors.js.map +0 -1
- package/dist/handlers/messages/count-tokens.js.map +0 -1
- package/dist/handlers/messages/streaming.js +0 -274
- package/dist/handlers/messages/streaming.js.map +0 -1
- package/dist/handlers/messages/tool-result-handler.js.map +0 -1
- package/dist/handlers/messages.js.map +0 -1
- package/dist/handlers/models.js.map +0 -1
- package/dist/handlers/session-config.js.map +0 -1
- package/dist/handlers/streaming-utils.js.map +0 -1
- package/dist/providers/anthropic.js.map +0 -1
- package/dist/providers/openai.js.map +0 -1
- package/dist/schemas/anthropic.js.map +0 -1
- package/dist/schemas/openai.js.map +0 -1
- package/dist/schemas.d.ts +0 -49
- package/dist/schemas.js +0 -75
- package/dist/schemas.js.map +0 -1
- package/dist/settings-patcher.js.map +0 -1
- package/dist/types.d.ts +0 -83
- package/dist/types.js.map +0 -1
- package/dist/utils/anthropic-prompt.js.map +0 -1
- package/dist/utils/model-resolver.js.map +0 -1
- package/dist/utils/prompt.d.ts +0 -3
- package/dist/utils/prompt.js.map +0 -1
- /package/dist/{handlers/messages → providers/claude}/count-tokens.d.ts +0 -0
- /package/dist/{schemas/anthropic.d.ts → providers/claude/schemas.d.ts} +0 -0
- /package/dist/{handlers/messages → providers/claude}/streaming.d.ts +0 -0
- /package/dist/{schemas/openai.d.ts → providers/openai/schemas.d.ts} +0 -0
- /package/dist/{handlers/completions → providers/openai}/streaming.d.ts +0 -0
- /package/dist/{handlers → providers/shared}/errors.d.ts +0 -0
- /package/dist/{handlers → providers/shared}/errors.js +0 -0
- /package/dist/{utils → providers/shared}/model-resolver.js +0 -0
- /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:
|
|
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
|
-
|
|
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"}
|
package/dist/schemas/config.d.ts
CHANGED
|
@@ -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
|
-
|
|
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">]>;
|
package/dist/schemas/config.js
CHANGED
|
@@ -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
|
-
|
|
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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;IAChE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAChD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE;IACZ,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAE/E,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAEjF,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC;IACjC,CAAC,CAAC,OAAO,EAAE;IACX,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;CACxC,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAE5E,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAE9D,MAAM,sBAAsB,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAS3C,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE,sBAAsB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC9D,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC3E,
|
|
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
|
-
//
|
|
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],
|
package/dist/server.js.map
CHANGED
|
@@ -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,
|
|
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
|
|
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
|
|
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
|
|
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=
|
|
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 "
|
|
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>;
|