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
package/config.json5
CHANGED
|
@@ -5,12 +5,11 @@
|
|
|
5
5
|
// exists in both CLI and MCP tools then they can't have different permissions.
|
|
6
6
|
|
|
7
7
|
{
|
|
8
|
-
//
|
|
9
|
-
// section is used at runtime.
|
|
8
|
+
// Which section gets used depends on the --proxy flag.
|
|
10
9
|
|
|
11
10
|
openai: {
|
|
12
11
|
// No tool bridge needed for OpenAI because Xcode drives tool execution
|
|
13
|
-
// directly.
|
|
12
|
+
// directly.
|
|
14
13
|
toolBridge: false,
|
|
15
14
|
|
|
16
15
|
mcpServers: {
|
|
@@ -25,17 +24,23 @@
|
|
|
25
24
|
},
|
|
26
25
|
},
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
// so Claude Agent can drive tool execution through the IDE instead.
|
|
32
|
-
// Set to false or remove to disable the tool bridge.
|
|
27
|
+
claude: {
|
|
28
|
+
// Intercepts tool calls and forwards them to Xcode so Claude Agent
|
|
29
|
+
// drives tool execution through the IDE instead of the Copilot CLI.
|
|
33
30
|
toolBridge: true,
|
|
34
31
|
|
|
35
32
|
// No MCP servers needed, because Claude Agent handles tools natively.
|
|
36
33
|
mcpServers: {},
|
|
37
34
|
},
|
|
38
35
|
|
|
36
|
+
codex: {
|
|
37
|
+
// Same as Claude: intercepts tool calls and forwards them to Xcode
|
|
38
|
+
// so Codex drives tool execution through the IDE.
|
|
39
|
+
toolBridge: true,
|
|
40
|
+
|
|
41
|
+
mcpServers: {},
|
|
42
|
+
},
|
|
43
|
+
|
|
39
44
|
// Built-in Copilot CLI tools allowlist (glob, grep, bash, etc). Use ["*"] to allow
|
|
40
45
|
// all, [] to deny all, or list specific tools like ["glob", "grep"].
|
|
41
46
|
//
|
package/dist/cli-validators.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type LogLevel } from "./logger.js";
|
|
2
2
|
import { type ProxyName } from "./providers/index.js";
|
|
3
|
+
export declare function isProxyName(value: string): value is ProxyName;
|
|
3
4
|
export declare function parsePort(value: string): number;
|
|
4
5
|
export declare function parseLogLevel(value: string): LogLevel;
|
|
5
6
|
export declare function parseProxy(value: string): ProxyName;
|
|
7
|
+
export declare function parseIdleTimeout(value: string): number;
|
|
6
8
|
export declare function validateAutoPatch(proxy: ProxyName, autoPatch: boolean): void;
|
package/dist/cli-validators.js
CHANGED
|
@@ -5,7 +5,7 @@ const VALID_PROXIES = Object.keys(providers);
|
|
|
5
5
|
function isLogLevel(value) {
|
|
6
6
|
return value in LEVEL_PRIORITY;
|
|
7
7
|
}
|
|
8
|
-
function isProxyName(value) {
|
|
8
|
+
export function isProxyName(value) {
|
|
9
9
|
return value in providers;
|
|
10
10
|
}
|
|
11
11
|
export function parsePort(value) {
|
|
@@ -27,9 +27,16 @@ export function parseProxy(value) {
|
|
|
27
27
|
}
|
|
28
28
|
return value;
|
|
29
29
|
}
|
|
30
|
+
export function parseIdleTimeout(value) {
|
|
31
|
+
const minutes = parseInt(value, 10);
|
|
32
|
+
if (isNaN(minutes) || minutes < 0) {
|
|
33
|
+
throw new Error(`Invalid idle timeout "${value}". Must be a non-negative integer (minutes).`);
|
|
34
|
+
}
|
|
35
|
+
return minutes;
|
|
36
|
+
}
|
|
30
37
|
export function validateAutoPatch(proxy, autoPatch) {
|
|
31
|
-
if (autoPatch && proxy !== "
|
|
32
|
-
throw new Error("--auto-patch can only be used with --proxy
|
|
38
|
+
if (autoPatch && proxy !== "claude" && proxy !== "codex") {
|
|
39
|
+
throw new Error("--auto-patch can only be used with --proxy claude or --proxy codex");
|
|
33
40
|
}
|
|
34
41
|
}
|
|
35
42
|
//# sourceMappingURL=cli-validators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-validators.js","sourceRoot":"","sources":["../src/cli-validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAkB,MAAM,sBAAsB,CAAC;AAEjE,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAe,CAAC;AACnE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAgB,CAAC;AAE5D,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,IAAI,cAAc,CAAC;AACjC,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"cli-validators.js","sourceRoot":"","sources":["../src/cli-validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAkB,MAAM,sBAAsB,CAAC;AAEjE,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAe,CAAC;AACnE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAgB,CAAC;AAE5D,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,IAAI,cAAc,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK,IAAI,SAAS,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,qBAAqB,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,sBAAsB,KAAK,aAAa,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,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,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,8CAA8C,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAgB,EAAE,SAAkB;IACpE,IAAI,SAAS,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { ProxyName } from "./providers/index.js";
|
|
|
3
3
|
import { type MCPServer, type RawServerConfig } from "./schemas/config.js";
|
|
4
4
|
export type { MCPLocalServer, MCPRemoteServer, MCPServer, ApprovalRule, ReasoningEffort, } from "./schemas/config.js";
|
|
5
5
|
export type { ProxyName };
|
|
6
|
-
export type ServerConfig = Omit<RawServerConfig, "bodyLimitMiB" | "openai" | "
|
|
6
|
+
export type ServerConfig = Omit<RawServerConfig, "bodyLimitMiB" | "openai" | "claude" | "codex"> & {
|
|
7
7
|
toolBridge: boolean;
|
|
8
8
|
mcpServers: Record<string, MCPServer>;
|
|
9
9
|
bodyLimit: number;
|
package/dist/config.js
CHANGED
|
@@ -8,7 +8,7 @@ const DEFAULT_CONFIG = {
|
|
|
8
8
|
mcpServers: {},
|
|
9
9
|
allowedCliTools: [],
|
|
10
10
|
excludedFilePatterns: [],
|
|
11
|
-
bodyLimit: 10 * 1024 * 1024,
|
|
11
|
+
bodyLimit: 10 * 1024 * 1024,
|
|
12
12
|
autoApprovePermissions: ["read", "mcp"],
|
|
13
13
|
};
|
|
14
14
|
function resolveServerPaths(servers, configDir) {
|
|
@@ -55,7 +55,7 @@ export async function loadConfig(configPath, logger, proxy) {
|
|
|
55
55
|
raw = JSON5.parse(text);
|
|
56
56
|
}
|
|
57
57
|
catch (err) {
|
|
58
|
-
throw new Error(`Failed to parse config file: ${err instanceof Error ? err.message : String(err)}
|
|
58
|
+
throw new Error(`Failed to parse config file: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
59
59
|
}
|
|
60
60
|
if (!raw || typeof raw !== "object") {
|
|
61
61
|
throw new Error("Config file must contain a JSON5 object");
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EACL,kBAAkB,GAGnB,MAAM,qBAAqB,CAAC;AAiB7B,MAAM,cAAc,GAAG;IACrB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,EAAE;IACd,eAAe,EAAE,EAAE;IACnB,oBAAoB,EAAE,EAAE;IACxB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CopilotSession } from "@github/copilot-sdk";
|
|
2
2
|
import { ToolBridgeState } from "./tool-bridge/state.js";
|
|
3
|
-
import type { AnthropicMessage } from "./schemas
|
|
3
|
+
import type { AnthropicMessage } from "./providers/claude/schemas.js";
|
|
4
4
|
import type { Logger } from "./logger.js";
|
|
5
5
|
export interface Conversation {
|
|
6
6
|
id: string;
|
|
@@ -25,6 +25,7 @@ export declare class ConversationManager {
|
|
|
25
25
|
isReuse: boolean;
|
|
26
26
|
};
|
|
27
27
|
findByContinuation(messages: AnthropicMessage[]): Conversation | undefined;
|
|
28
|
+
findByContinuationIds(callIds: string[]): Conversation | undefined;
|
|
28
29
|
findByExpectedTool(name: string): ToolBridgeState | undefined;
|
|
29
30
|
getState(convId: string): ToolBridgeState | undefined;
|
|
30
31
|
remove(convId: string): void;
|
|
@@ -81,7 +81,7 @@ export class ConversationManager {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
-
//
|
|
84
|
+
// The model sometimes retries a tool after an internal failure so the
|
|
85
85
|
// tool_use_id won't match anything, but we can still route by session
|
|
86
86
|
for (const [, conv] of this.conversations) {
|
|
87
87
|
if (conv.state.sessionActive) {
|
|
@@ -91,6 +91,25 @@ export class ConversationManager {
|
|
|
91
91
|
}
|
|
92
92
|
return undefined;
|
|
93
93
|
}
|
|
94
|
+
findByContinuationIds(callIds) {
|
|
95
|
+
if (callIds.length === 0)
|
|
96
|
+
return undefined;
|
|
97
|
+
for (const [, conv] of this.conversations) {
|
|
98
|
+
for (const callId of callIds) {
|
|
99
|
+
if (conv.state.hasPendingToolCall(callId)) {
|
|
100
|
+
this.logger.debug(`Continuation matched conversation ${conv.id} via call_id ${callId}`);
|
|
101
|
+
return conv;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
for (const [, conv] of this.conversations) {
|
|
106
|
+
if (conv.state.sessionActive) {
|
|
107
|
+
this.logger.debug(`Continuation matched conversation ${conv.id} via sessionActive fallback`);
|
|
108
|
+
return conv;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
94
113
|
findByExpectedTool(name) {
|
|
95
114
|
for (const [, conv] of this.conversations) {
|
|
96
115
|
if (conv.state.hasExpectedTool(name)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-manager.js","sourceRoot":"","sources":["../src/conversation-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conversation-manager.js","sourceRoot":"","sources":["../src/conversation-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,145 +3,106 @@ import { join, dirname } from "node:path";
|
|
|
3
3
|
import { readFile } from "node:fs/promises";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { Command } from "commander";
|
|
6
|
-
import { CopilotService } from "./copilot-service.js";
|
|
7
|
-
import { loadConfig, resolveConfigPath } from "./config.js";
|
|
8
|
-
import { createServer } from "./server.js";
|
|
9
6
|
import { Logger } from "./logger.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
7
|
+
import { patcherByProxy } from "./settings-patcher/index.js";
|
|
8
|
+
import { parsePort, parseLogLevel, parseProxy, parseIdleTimeout, validateAutoPatch } from "./cli-validators.js";
|
|
9
|
+
import { startServer } from "./startup.js";
|
|
10
|
+
import { installAgent, uninstallAgent } from "./launchd/index.js";
|
|
14
11
|
const PACKAGE_ROOT = dirname(import.meta.dirname);
|
|
15
12
|
const DEFAULT_CONFIG_PATH = join(PACKAGE_ROOT, "config.json5");
|
|
16
|
-
|
|
13
|
+
// Can't use a JSON import here because rootDir is src/ and package.json lives at the root
|
|
14
|
+
const { version } = z.object({ version: z.string() }).parse(JSON.parse(await readFile(join(PACKAGE_ROOT, "package.json"), "utf-8")));
|
|
15
|
+
async function patchSettingsCommand(options) {
|
|
17
16
|
const logLevel = parseLogLevel(options.logLevel);
|
|
18
17
|
const logger = new Logger(logLevel);
|
|
19
18
|
const port = parsePort(options.port);
|
|
20
19
|
const proxy = parseProxy(options.proxy);
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const configPath = options.config ?? resolveConfigPath(options.cwd, process.cwd(), DEFAULT_CONFIG_PATH);
|
|
25
|
-
const config = await loadConfig(configPath, logger, proxy);
|
|
26
|
-
const cwd = options.cwd;
|
|
27
|
-
const service = new CopilotService({
|
|
28
|
-
logLevel,
|
|
29
|
-
logger,
|
|
30
|
-
cwd,
|
|
31
|
-
});
|
|
32
|
-
const quiet = logLevel === "none";
|
|
33
|
-
if (!quiet) {
|
|
34
|
-
console.log();
|
|
35
|
-
console.log(` ${bold("xcode-copilot-server")} ${dim(`v${version}`)}`);
|
|
36
|
-
console.log();
|
|
37
|
-
}
|
|
38
|
-
const bootSpinner = quiet ? null : createSpinner("Starting Copilot SDK...");
|
|
39
|
-
await service.start();
|
|
40
|
-
bootSpinner?.succeed("Copilot SDK started");
|
|
41
|
-
const authSpinner = quiet ? null : createSpinner("Authenticating...");
|
|
42
|
-
const auth = await service.getAuthStatus();
|
|
43
|
-
if (!auth.isAuthenticated) {
|
|
44
|
-
authSpinner?.fail("Not authenticated");
|
|
45
|
-
logger.error("Sign in with the Copilot CLI (copilot login) or GitHub CLI (gh auth login), or set a GITHUB_TOKEN environment variable.");
|
|
46
|
-
await service.stop();
|
|
47
|
-
process.exit(1);
|
|
48
|
-
}
|
|
49
|
-
const login = auth.login ?? "unknown";
|
|
50
|
-
const authType = auth.authType ?? "unknown";
|
|
51
|
-
authSpinner?.succeed(`Authenticated as ${bold(login)} ${dim(`(${authType})`)}`);
|
|
52
|
-
if (autoPatch) {
|
|
53
|
-
await patchSettings({ port, logger });
|
|
20
|
+
const patcher = patcherByProxy[proxy];
|
|
21
|
+
if (!patcher) {
|
|
22
|
+
throw new Error(`No settings patcher for --proxy ${proxy}`);
|
|
54
23
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
printBanner({
|
|
65
|
-
port,
|
|
66
|
-
proxy,
|
|
67
|
-
providerName: provider.name,
|
|
68
|
-
routes: provider.routes,
|
|
69
|
-
cwd: service.cwd,
|
|
70
|
-
autoPatch,
|
|
71
|
-
});
|
|
24
|
+
await patcher.patch({ port, logger });
|
|
25
|
+
}
|
|
26
|
+
async function restoreSettingsCommand(options) {
|
|
27
|
+
const logLevel = parseLogLevel(options.logLevel);
|
|
28
|
+
const logger = new Logger(logLevel);
|
|
29
|
+
const proxy = parseProxy(options.proxy);
|
|
30
|
+
const patcher = patcherByProxy[proxy];
|
|
31
|
+
if (!patcher) {
|
|
32
|
+
throw new Error(`No settings patcher for --proxy ${proxy}`);
|
|
72
33
|
}
|
|
73
|
-
|
|
74
|
-
const mcpCount = Object.keys(config.mcpServers).length;
|
|
75
|
-
const cliToolsSummary = config.allowedCliTools.includes("*")
|
|
76
|
-
? "all CLI tools allowed"
|
|
77
|
-
: `${String(config.allowedCliTools.length)} allowed CLI tool(s)`;
|
|
78
|
-
logger.debug(`${String(mcpCount)} MCP server(s), ${cliToolsSummary}`);
|
|
79
|
-
const shutdown = async (signal) => {
|
|
80
|
-
logger.info(`Got ${signal}, shutting down...`);
|
|
81
|
-
if (autoPatch) {
|
|
82
|
-
try {
|
|
83
|
-
await restoreSettings({ logger });
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
logger.error(`Failed to restore settings.json: ${String(err)}`);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
await app.close();
|
|
90
|
-
const stopPromise = service.stop().then(() => {
|
|
91
|
-
logger.info("Clean shutdown complete");
|
|
92
|
-
});
|
|
93
|
-
const timeoutPromise = new Promise((resolve) => setTimeout(() => {
|
|
94
|
-
logger.warn("Copilot client didn't stop in time, forcing exit");
|
|
95
|
-
resolve();
|
|
96
|
-
}, 3000));
|
|
97
|
-
await Promise.race([stopPromise, timeoutPromise]);
|
|
98
|
-
process.exit(0);
|
|
99
|
-
};
|
|
100
|
-
const onSignal = (signal) => {
|
|
101
|
-
shutdown(signal).catch((err) => {
|
|
102
|
-
console.error("Shutdown error:", err);
|
|
103
|
-
process.exit(1);
|
|
104
|
-
});
|
|
105
|
-
};
|
|
106
|
-
process.on("SIGINT", () => { onSignal("SIGINT"); });
|
|
107
|
-
process.on("SIGTERM", () => { onSignal("SIGTERM"); });
|
|
34
|
+
await patcher.restore({ logger });
|
|
108
35
|
}
|
|
109
|
-
async function
|
|
36
|
+
async function installAgentCommand(options) {
|
|
110
37
|
const logLevel = parseLogLevel(options.logLevel);
|
|
111
38
|
const logger = new Logger(logLevel);
|
|
112
39
|
const port = parsePort(options.port);
|
|
113
|
-
|
|
40
|
+
const proxy = parseProxy(options.proxy);
|
|
41
|
+
const idleTimeout = parseIdleTimeout(options.idleTimeout);
|
|
42
|
+
if (options.autoPatch) {
|
|
43
|
+
validateAutoPatch(proxy, true);
|
|
44
|
+
}
|
|
45
|
+
await installAgent({
|
|
46
|
+
port,
|
|
47
|
+
proxy,
|
|
48
|
+
logLevel: options.logLevel,
|
|
49
|
+
logger,
|
|
50
|
+
config: options.config,
|
|
51
|
+
cwd: options.cwd,
|
|
52
|
+
autoPatch: options.autoPatch === true,
|
|
53
|
+
idleTimeout,
|
|
54
|
+
});
|
|
114
55
|
}
|
|
115
|
-
async function
|
|
56
|
+
async function uninstallAgentCommand(options) {
|
|
116
57
|
const logLevel = parseLogLevel(options.logLevel);
|
|
117
58
|
const logger = new Logger(logLevel);
|
|
118
|
-
await
|
|
59
|
+
await uninstallAgent({ logger });
|
|
119
60
|
}
|
|
120
|
-
// Can't use JSON import because rootDir is src/ and package.json is at the project root.
|
|
121
|
-
const { version } = z.object({ version: z.string() }).parse(JSON.parse(await readFile(join(PACKAGE_ROOT, "package.json"), "utf-8")));
|
|
122
61
|
const program = new Command()
|
|
123
62
|
.name("xcode-copilot-server")
|
|
124
63
|
.description("Proxy API server for Xcode, powered by GitHub Copilot")
|
|
125
|
-
.version(version, "-v, --version")
|
|
64
|
+
.version(version, "-v, --version")
|
|
65
|
+
.enablePositionalOptions()
|
|
66
|
+
.passThroughOptions();
|
|
126
67
|
program
|
|
127
68
|
.option("-p, --port <number>", "port to listen on", "8080")
|
|
128
|
-
.option("--proxy <provider>", "API format: openai,
|
|
69
|
+
.option("--proxy <provider>", "API format: openai, claude, codex", "openai")
|
|
129
70
|
.option("-l, --log-level <level>", "log verbosity", "info")
|
|
130
71
|
.option("-c, --config <path>", "path to config file")
|
|
131
72
|
.option("--cwd <path>", "working directory for Copilot sessions")
|
|
132
73
|
.option("--auto-patch", "auto-patch settings.json on start, restore on exit")
|
|
133
|
-
.
|
|
74
|
+
.option("--idle-timeout <minutes>", "shut down after N minutes of inactivity", "0")
|
|
75
|
+
.option("--launchd", "run in launchd mode (socket activation, no TTY output)")
|
|
76
|
+
.action((options) => startServer({ ...options, version, defaultConfigPath: DEFAULT_CONFIG_PATH }));
|
|
134
77
|
program
|
|
135
78
|
.command("patch-settings")
|
|
136
|
-
.description("Patch settings
|
|
137
|
-
.option("-p, --port <number>", "port to write into settings
|
|
79
|
+
.description("Patch settings to point to this server, then exit")
|
|
80
|
+
.option("-p, --port <number>", "port to write into settings", "8080")
|
|
81
|
+
.option("--proxy <provider>", "which provider to patch: claude, codex", "claude")
|
|
138
82
|
.option("-l, --log-level <level>", "log verbosity", "info")
|
|
139
83
|
.action((options) => patchSettingsCommand(options));
|
|
140
84
|
program
|
|
141
85
|
.command("restore-settings")
|
|
142
|
-
.description("Restore settings
|
|
86
|
+
.description("Restore settings from backup, then exit")
|
|
87
|
+
.option("--proxy <provider>", "which provider to restore: claude, codex", "claude")
|
|
143
88
|
.option("-l, --log-level <level>", "log verbosity", "info")
|
|
144
89
|
.action((options) => restoreSettingsCommand(options));
|
|
90
|
+
program
|
|
91
|
+
.command("install-agent")
|
|
92
|
+
.description("Install a launchd agent with socket activation")
|
|
93
|
+
.option("-p, --port <number>", "port to listen on", "8080")
|
|
94
|
+
.option("--proxy <provider>", "API format: openai, claude, codex", "openai")
|
|
95
|
+
.option("-l, --log-level <level>", "log verbosity for the agent", "info")
|
|
96
|
+
.option("-c, --config <path>", "path to config file")
|
|
97
|
+
.option("--cwd <path>", "working directory for Copilot sessions")
|
|
98
|
+
.option("--auto-patch", "patch settings on install, restore on uninstall")
|
|
99
|
+
.option("--idle-timeout <minutes>", "shut down agent after N minutes of inactivity", "60")
|
|
100
|
+
.action((options) => installAgentCommand(options));
|
|
101
|
+
program
|
|
102
|
+
.command("uninstall-agent")
|
|
103
|
+
.description("Uninstall the launchd agent and restore settings")
|
|
104
|
+
.option("-l, --log-level <level>", "log verbosity", "info")
|
|
105
|
+
.action((options) => uninstallAgentCommand(options));
|
|
145
106
|
program.parseAsync().catch((err) => {
|
|
146
107
|
console.error("Fatal error:", err);
|
|
147
108
|
process.exit(1);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Logger } from "../logger.js";
|
|
2
|
+
import type { ProxyName } from "../providers/index.js";
|
|
3
|
+
export type ExecFn = (cmd: string, args: string[]) => Promise<string>;
|
|
4
|
+
export declare const AGENT_LABEL = "com.xcode-copilot-server";
|
|
5
|
+
export declare function defaultPlistPath(): string;
|
|
6
|
+
export declare function defaultLogPaths(): {
|
|
7
|
+
out: string;
|
|
8
|
+
err: string;
|
|
9
|
+
};
|
|
10
|
+
export interface PlistOptions {
|
|
11
|
+
nodePath: string;
|
|
12
|
+
entryPoint: string;
|
|
13
|
+
port: number;
|
|
14
|
+
proxy: ProxyName;
|
|
15
|
+
logLevel: string;
|
|
16
|
+
config?: string | undefined;
|
|
17
|
+
cwd?: string | undefined;
|
|
18
|
+
autoPatch?: boolean | undefined;
|
|
19
|
+
idleTimeout?: number | undefined;
|
|
20
|
+
environmentVariables?: Record<string, string> | undefined;
|
|
21
|
+
logPaths?: {
|
|
22
|
+
out: string;
|
|
23
|
+
err: string;
|
|
24
|
+
} | undefined;
|
|
25
|
+
}
|
|
26
|
+
export declare function generatePlist(options: PlistOptions): string;
|
|
27
|
+
export interface ParsedPlistArgs {
|
|
28
|
+
proxy: ProxyName | null;
|
|
29
|
+
autoPatch: boolean;
|
|
30
|
+
}
|
|
31
|
+
export declare function parsePlistArgs(plistContent: string): ParsedPlistArgs;
|
|
32
|
+
export interface InstallAgentOptions {
|
|
33
|
+
port: number;
|
|
34
|
+
proxy: ProxyName;
|
|
35
|
+
logLevel: string;
|
|
36
|
+
logger: Logger;
|
|
37
|
+
config?: string | undefined;
|
|
38
|
+
cwd?: string | undefined;
|
|
39
|
+
autoPatch?: boolean | undefined;
|
|
40
|
+
idleTimeout?: number | undefined;
|
|
41
|
+
exec?: ExecFn | undefined;
|
|
42
|
+
plistPath?: string | undefined;
|
|
43
|
+
nodePath?: string | undefined;
|
|
44
|
+
entryPoint?: string | undefined;
|
|
45
|
+
}
|
|
46
|
+
export declare function installAgent(options: InstallAgentOptions): Promise<void>;
|
|
47
|
+
export interface UninstallAgentOptions {
|
|
48
|
+
logger: Logger;
|
|
49
|
+
exec?: ExecFn | undefined;
|
|
50
|
+
plistPath?: string | undefined;
|
|
51
|
+
}
|
|
52
|
+
export declare function uninstallAgent(options: UninstallAgentOptions): Promise<void>;
|