xcode-copilot-server 3.0.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/dist/cli-validators.d.ts +2 -0
- package/dist/cli-validators.js +8 -1
- package/dist/cli-validators.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/index.js +48 -2
- 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/startup.d.ts +2 -0
- package/dist/startup.js +44 -5
- package/dist/startup.js.map +1 -1
- package/package.json +8 -5
- package/LICENSE +0 -21
- package/README.md +0 -269
- 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.d.ts +0 -4
- package/dist/handlers/completions/streaming.js +0 -121
- package/dist/handlers/completions/streaming.js.map +0 -1
- package/dist/handlers/completions.d.ts +0 -4
- package/dist/handlers/completions.js +0 -120
- package/dist/handlers/completions.js.map +0 -1
- package/dist/handlers/errors.d.ts +0 -5
- package/dist/handlers/errors.js +0 -10
- package/dist/handlers/errors.js.map +0 -1
- package/dist/handlers/messages/count-tokens.d.ts +0 -3
- package/dist/handlers/messages/count-tokens.js +0 -72
- package/dist/handlers/messages/count-tokens.js.map +0 -1
- package/dist/handlers/messages/streaming.d.ts +0 -6
- package/dist/handlers/messages/streaming.js +0 -274
- package/dist/handlers/messages/streaming.js.map +0 -1
- package/dist/handlers/messages/tool-result-handler.d.ts +0 -4
- package/dist/handlers/messages/tool-result-handler.js +0 -19
- package/dist/handlers/messages/tool-result-handler.js.map +0 -1
- package/dist/handlers/messages.d.ts +0 -4
- package/dist/handlers/messages.js +0 -150
- package/dist/handlers/messages.js.map +0 -1
- package/dist/handlers/models.d.ts +0 -3
- package/dist/handlers/models.js +0 -28
- package/dist/handlers/models.js.map +0 -1
- package/dist/handlers/responses/streaming.d.ts +0 -6
- package/dist/handlers/responses/streaming.js +0 -265
- package/dist/handlers/responses/streaming.js.map +0 -1
- package/dist/handlers/responses/tool-result-handler.d.ts +0 -4
- package/dist/handlers/responses/tool-result-handler.js +0 -9
- package/dist/handlers/responses/tool-result-handler.js.map +0 -1
- package/dist/handlers/responses.d.ts +0 -4
- package/dist/handlers/responses.js +0 -164
- package/dist/handlers/responses.js.map +0 -1
- package/dist/handlers/session-config.d.ts +0 -15
- package/dist/handlers/session-config.js +0 -79
- package/dist/handlers/session-config.js.map +0 -1
- package/dist/handlers/streaming-utils.d.ts +0 -10
- package/dist/handlers/streaming-utils.js +0 -22
- package/dist/handlers/streaming-utils.js.map +0 -1
- package/dist/providers/anthropic.d.ts +0 -5
- package/dist/providers/anthropic.js +0 -28
- package/dist/providers/anthropic.js.map +0 -1
- package/dist/providers/codex.d.ts +0 -5
- package/dist/providers/codex.js +0 -24
- package/dist/providers/codex.js.map +0 -1
- package/dist/providers/openai.d.ts +0 -5
- package/dist/providers/openai.js +0 -25
- package/dist/providers/openai.js.map +0 -1
- package/dist/schemas/anthropic.d.ts +0 -140
- package/dist/schemas/anthropic.js +0 -58
- package/dist/schemas/anthropic.js.map +0 -1
- package/dist/schemas/openai.d.ts +0 -98
- package/dist/schemas/openai.js +0 -76
- package/dist/schemas/openai.js.map +0 -1
- package/dist/schemas/responses.d.ts +0 -122
- package/dist/schemas/responses.js +0 -54
- package/dist/schemas/responses.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/anthropic.d.ts +0 -5
- package/dist/settings-patcher/anthropic.js +0 -75
- package/dist/settings-patcher/anthropic.js.map +0 -1
- package/dist/types.d.ts +0 -83
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/utils/anthropic-prompt.d.ts +0 -2
- package/dist/utils/anthropic-prompt.js +0 -52
- package/dist/utils/anthropic-prompt.js.map +0 -1
- package/dist/utils/model-resolver.d.ts +0 -3
- package/dist/utils/model-resolver.js +0 -45
- package/dist/utils/model-resolver.js.map +0 -1
- package/dist/utils/prompt.d.ts +0 -3
- package/dist/utils/prompt.js +0 -50
- package/dist/utils/prompt.js.map +0 -1
- package/dist/utils/responses-prompt.d.ts +0 -4
- package/dist/utils/responses-prompt.js +0 -58
- package/dist/utils/responses-prompt.js.map +0 -1
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,6 +27,13 @@ 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
38
|
if (autoPatch && proxy !== "claude" && proxy !== "codex") {
|
|
32
39
|
throw new Error("--auto-patch can only be used with --proxy claude or --proxy codex");
|
|
@@ -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.js
CHANGED
|
@@ -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":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,8 +5,9 @@ import { z } from "zod";
|
|
|
5
5
|
import { Command } from "commander";
|
|
6
6
|
import { Logger } from "./logger.js";
|
|
7
7
|
import { patcherByProxy } from "./settings-patcher/index.js";
|
|
8
|
-
import { parsePort, parseLogLevel, parseProxy } from "./cli-validators.js";
|
|
8
|
+
import { parsePort, parseLogLevel, parseProxy, parseIdleTimeout, validateAutoPatch } from "./cli-validators.js";
|
|
9
9
|
import { startServer } from "./startup.js";
|
|
10
|
+
import { installAgent, uninstallAgent } from "./launchd/index.js";
|
|
10
11
|
const PACKAGE_ROOT = dirname(import.meta.dirname);
|
|
11
12
|
const DEFAULT_CONFIG_PATH = join(PACKAGE_ROOT, "config.json5");
|
|
12
13
|
// Can't use a JSON import here because rootDir is src/ and package.json lives at the root
|
|
@@ -32,10 +33,37 @@ async function restoreSettingsCommand(options) {
|
|
|
32
33
|
}
|
|
33
34
|
await patcher.restore({ logger });
|
|
34
35
|
}
|
|
36
|
+
async function installAgentCommand(options) {
|
|
37
|
+
const logLevel = parseLogLevel(options.logLevel);
|
|
38
|
+
const logger = new Logger(logLevel);
|
|
39
|
+
const port = parsePort(options.port);
|
|
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
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async function uninstallAgentCommand(options) {
|
|
57
|
+
const logLevel = parseLogLevel(options.logLevel);
|
|
58
|
+
const logger = new Logger(logLevel);
|
|
59
|
+
await uninstallAgent({ logger });
|
|
60
|
+
}
|
|
35
61
|
const program = new Command()
|
|
36
62
|
.name("xcode-copilot-server")
|
|
37
63
|
.description("Proxy API server for Xcode, powered by GitHub Copilot")
|
|
38
|
-
.version(version, "-v, --version")
|
|
64
|
+
.version(version, "-v, --version")
|
|
65
|
+
.enablePositionalOptions()
|
|
66
|
+
.passThroughOptions();
|
|
39
67
|
program
|
|
40
68
|
.option("-p, --port <number>", "port to listen on", "8080")
|
|
41
69
|
.option("--proxy <provider>", "API format: openai, claude, codex", "openai")
|
|
@@ -43,6 +71,8 @@ program
|
|
|
43
71
|
.option("-c, --config <path>", "path to config file")
|
|
44
72
|
.option("--cwd <path>", "working directory for Copilot sessions")
|
|
45
73
|
.option("--auto-patch", "auto-patch settings.json on start, restore on exit")
|
|
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)")
|
|
46
76
|
.action((options) => startServer({ ...options, version, defaultConfigPath: DEFAULT_CONFIG_PATH }));
|
|
47
77
|
program
|
|
48
78
|
.command("patch-settings")
|
|
@@ -57,6 +87,22 @@ program
|
|
|
57
87
|
.option("--proxy <provider>", "which provider to restore: claude, codex", "claude")
|
|
58
88
|
.option("-l, --log-level <level>", "log verbosity", "info")
|
|
59
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));
|
|
60
106
|
program.parseAsync().catch((err) => {
|
|
61
107
|
console.error("Fatal error:", err);
|
|
62
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,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
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>;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { readFile, writeFile, unlink, mkdir } from "node:fs/promises";
|
|
3
|
+
import { execFile as execFileCb } from "node:child_process";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { dirname, join, resolve } from "node:path";
|
|
6
|
+
import { homedir } from "node:os";
|
|
7
|
+
import { Command } from "commander";
|
|
8
|
+
import plist, {} from "plist";
|
|
9
|
+
import { isProxyName } from "../cli-validators.js";
|
|
10
|
+
import { patcherByProxy } from "../settings-patcher/index.js";
|
|
11
|
+
const execFileAsync = promisify(execFileCb);
|
|
12
|
+
async function defaultExec(cmd, args) {
|
|
13
|
+
const { stdout } = await execFileAsync(cmd, args);
|
|
14
|
+
return stdout;
|
|
15
|
+
}
|
|
16
|
+
export const AGENT_LABEL = "com.xcode-copilot-server";
|
|
17
|
+
export function defaultPlistPath() {
|
|
18
|
+
return join(homedir(), "Library/LaunchAgents", `${AGENT_LABEL}.plist`);
|
|
19
|
+
}
|
|
20
|
+
export function defaultLogPaths() {
|
|
21
|
+
const dir = join(homedir(), "Library/Logs");
|
|
22
|
+
return {
|
|
23
|
+
out: join(dir, "xcode-copilot-server.out.log"),
|
|
24
|
+
err: join(dir, "xcode-copilot-server.err.log"),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function generatePlist(options) {
|
|
28
|
+
const args = [
|
|
29
|
+
options.nodePath,
|
|
30
|
+
options.entryPoint,
|
|
31
|
+
"--launchd",
|
|
32
|
+
"--proxy", options.proxy,
|
|
33
|
+
"--port", String(options.port),
|
|
34
|
+
"--log-level", options.logLevel,
|
|
35
|
+
];
|
|
36
|
+
if (options.config) {
|
|
37
|
+
args.push("--config", options.config);
|
|
38
|
+
}
|
|
39
|
+
if (options.cwd) {
|
|
40
|
+
args.push("--cwd", options.cwd);
|
|
41
|
+
}
|
|
42
|
+
if (options.autoPatch) {
|
|
43
|
+
args.push("--auto-patch");
|
|
44
|
+
}
|
|
45
|
+
if (options.idleTimeout !== undefined && options.idleTimeout > 0) {
|
|
46
|
+
args.push("--idle-timeout", String(options.idleTimeout));
|
|
47
|
+
}
|
|
48
|
+
const logPaths = options.logPaths ?? defaultLogPaths();
|
|
49
|
+
const envVars = { ...options.environmentVariables };
|
|
50
|
+
if (!envVars["PATH"] && process.env["PATH"]) {
|
|
51
|
+
envVars["PATH"] = process.env["PATH"];
|
|
52
|
+
}
|
|
53
|
+
// GITHUB_TOKEN is written in cleartext into the plist so the agent can authenticate.
|
|
54
|
+
// The file lives in ~/Library/LaunchAgents/ which is user-readable only by default.
|
|
55
|
+
if (!envVars["GITHUB_TOKEN"] && process.env["GITHUB_TOKEN"]) {
|
|
56
|
+
envVars["GITHUB_TOKEN"] = process.env["GITHUB_TOKEN"];
|
|
57
|
+
}
|
|
58
|
+
const hasEnv = Object.keys(envVars).length > 0;
|
|
59
|
+
const obj = {
|
|
60
|
+
Label: AGENT_LABEL,
|
|
61
|
+
ProgramArguments: args,
|
|
62
|
+
Sockets: {
|
|
63
|
+
Listeners: {
|
|
64
|
+
SockServiceName: String(options.port),
|
|
65
|
+
SockNodeName: "127.0.0.1",
|
|
66
|
+
SockFamily: "IPv4",
|
|
67
|
+
SockType: "stream",
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
StandardOutPath: logPaths.out,
|
|
71
|
+
StandardErrorPath: logPaths.err,
|
|
72
|
+
...(hasEnv ? { EnvironmentVariables: envVars } : {}),
|
|
73
|
+
};
|
|
74
|
+
return plist.build(obj) + "\n";
|
|
75
|
+
}
|
|
76
|
+
export function parsePlistArgs(plistContent) {
|
|
77
|
+
let raw;
|
|
78
|
+
try {
|
|
79
|
+
raw = plist.parse(plistContent);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return { proxy: null, autoPatch: false };
|
|
83
|
+
}
|
|
84
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
85
|
+
return { proxy: null, autoPatch: false };
|
|
86
|
+
}
|
|
87
|
+
const parsed = raw;
|
|
88
|
+
const args = parsed["ProgramArguments"];
|
|
89
|
+
if (!Array.isArray(args)) {
|
|
90
|
+
return { proxy: null, autoPatch: false };
|
|
91
|
+
}
|
|
92
|
+
// First two entries are the node binary and entry point, everything after is flags
|
|
93
|
+
const flagArgs = args.slice(2).filter((a) => typeof a === "string");
|
|
94
|
+
const cmd = new Command()
|
|
95
|
+
.exitOverride()
|
|
96
|
+
.configureOutput({ writeOut: () => { }, writeErr: () => { } })
|
|
97
|
+
.option("--proxy <provider>")
|
|
98
|
+
.option("--auto-patch")
|
|
99
|
+
.allowUnknownOption()
|
|
100
|
+
.allowExcessArguments();
|
|
101
|
+
try {
|
|
102
|
+
cmd.parse(flagArgs, { from: "user" });
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return { proxy: null, autoPatch: false };
|
|
106
|
+
}
|
|
107
|
+
const opts = cmd.opts();
|
|
108
|
+
const proxy = opts.proxy && isProxyName(opts.proxy) ? opts.proxy : null;
|
|
109
|
+
return { proxy, autoPatch: opts.autoPatch === true };
|
|
110
|
+
}
|
|
111
|
+
export async function installAgent(options) {
|
|
112
|
+
const { port, proxy, logLevel, logger, autoPatch = false, } = options;
|
|
113
|
+
const exec = options.exec ?? defaultExec;
|
|
114
|
+
const plistPath = options.plistPath ?? defaultPlistPath();
|
|
115
|
+
const nodePath = options.nodePath ?? process.execPath;
|
|
116
|
+
// import.meta.dirname at runtime is dist/launchd/, so go up two levels to the package root
|
|
117
|
+
const entryPoint = options.entryPoint ?? resolve(dirname(dirname(import.meta.dirname)), "dist/index.js");
|
|
118
|
+
if (existsSync(plistPath)) {
|
|
119
|
+
try {
|
|
120
|
+
await exec("launchctl", ["unload", plistPath]);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
logger.debug(`launchctl unload skipped: ${String(err)}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const plistXml = generatePlist({
|
|
127
|
+
nodePath,
|
|
128
|
+
entryPoint,
|
|
129
|
+
port,
|
|
130
|
+
proxy,
|
|
131
|
+
logLevel,
|
|
132
|
+
config: options.config,
|
|
133
|
+
cwd: options.cwd,
|
|
134
|
+
autoPatch,
|
|
135
|
+
idleTimeout: options.idleTimeout,
|
|
136
|
+
});
|
|
137
|
+
await mkdir(dirname(plistPath), { recursive: true });
|
|
138
|
+
await writeFile(plistPath, plistXml, "utf-8");
|
|
139
|
+
await exec("launchctl", ["load", plistPath]);
|
|
140
|
+
if (autoPatch) {
|
|
141
|
+
const patcher = patcherByProxy[proxy];
|
|
142
|
+
if (patcher) {
|
|
143
|
+
await patcher.patch({ port, logger });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const logPaths = defaultLogPaths();
|
|
147
|
+
logger.info(`Launchd agent installed: ${AGENT_LABEL}`);
|
|
148
|
+
logger.info(` Port: ${String(port)}, Proxy: ${proxy}`);
|
|
149
|
+
logger.info(` Plist: ${plistPath}`);
|
|
150
|
+
logger.info(` Logs: ${logPaths.out}`);
|
|
151
|
+
}
|
|
152
|
+
export async function uninstallAgent(options) {
|
|
153
|
+
const { logger } = options;
|
|
154
|
+
const exec = options.exec ?? defaultExec;
|
|
155
|
+
const plistPath = options.plistPath ?? defaultPlistPath();
|
|
156
|
+
if (!existsSync(plistPath)) {
|
|
157
|
+
throw new Error(`No launchd agent found at ${plistPath}`);
|
|
158
|
+
}
|
|
159
|
+
// Read config before deleting so we know whether to restore settings.
|
|
160
|
+
// If the file is unreadable (e.g. permissions), default so uninstall can still proceed.
|
|
161
|
+
let parsed;
|
|
162
|
+
try {
|
|
163
|
+
const plistContent = await readFile(plistPath, "utf-8");
|
|
164
|
+
parsed = parsePlistArgs(plistContent);
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
logger.warn(`Could not read plist, skipping settings restore: ${String(err)}`);
|
|
168
|
+
parsed = { proxy: null, autoPatch: false };
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
await exec("launchctl", ["unload", plistPath]);
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
logger.warn(`launchctl unload failed: ${String(err)}`);
|
|
175
|
+
}
|
|
176
|
+
await unlink(plistPath);
|
|
177
|
+
if (parsed.autoPatch && parsed.proxy) {
|
|
178
|
+
const patcher = patcherByProxy[parsed.proxy];
|
|
179
|
+
if (patcher) {
|
|
180
|
+
await patcher.restore({ logger });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
logger.info(`Launchd agent uninstalled: ${AGENT_LABEL}`);
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/launchd/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { activateSocket } from "./socket.js";
|
|
2
|
+
export type { NativeActivateFn, ActivateSocketOptions } from "./socket.js";
|
|
3
|
+
export { installAgent, uninstallAgent, generatePlist, parsePlistArgs, defaultPlistPath, defaultLogPaths, AGENT_LABEL, } from "./agent.js";
|
|
4
|
+
export type { ExecFn, PlistOptions, ParsedPlistArgs, InstallAgentOptions, UninstallAgentOptions, } from "./agent.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/launchd/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import koffi from "koffi";
|
|
2
|
+
function defaultNativeActivate(name) {
|
|
3
|
+
const lib = koffi.load("/usr/lib/libSystem.B.dylib");
|
|
4
|
+
const launch_activate_socket = lib.func("int launch_activate_socket(const char *name, _Out_ int **fds, _Out_ size_t *cnt)");
|
|
5
|
+
const fdsOut = [null];
|
|
6
|
+
const cntOut = [0];
|
|
7
|
+
const ret = launch_activate_socket(name, fdsOut, cntOut);
|
|
8
|
+
if (ret !== 0) {
|
|
9
|
+
const messages = {
|
|
10
|
+
3: "Socket name not found in launchd job (ESRCH)",
|
|
11
|
+
2: "No socket with that name (ENOENT)",
|
|
12
|
+
};
|
|
13
|
+
const msg = messages[ret] ?? `errno ${String(ret)}`;
|
|
14
|
+
throw new Error(`launch_activate_socket failed: ${msg}`);
|
|
15
|
+
}
|
|
16
|
+
const cnt = cntOut[0];
|
|
17
|
+
if (cnt === 0) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
const ptr = fdsOut[0];
|
|
21
|
+
const fds = koffi.decode(ptr, "int", cnt);
|
|
22
|
+
// launch_activate_socket malloc's the fd array; caller must free it
|
|
23
|
+
const free = lib.func("void free(void *ptr)");
|
|
24
|
+
free(ptr);
|
|
25
|
+
return fds;
|
|
26
|
+
}
|
|
27
|
+
export function activateSocket(name, options) {
|
|
28
|
+
const activate = options?.nativeActivate ?? defaultNativeActivate;
|
|
29
|
+
return activate(name);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/launchd/socket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAErD,MAAM,sBAAsB,GAAG,GAAG,CAAC,IAAI,CACrC,kFAAkF,CACnF,CAAC;IAEF,MAAM,MAAM,GAAc,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAEnB,MAAM,GAAG,GAAG,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAW,CAAC;IAEnE,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,MAAM,QAAQ,GAA2B;YACvC,CAAC,EAAE,8CAA8C;YACjD,CAAC,EAAE,mCAAmC;SACvC,CAAC;QACF,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAW,CAAC;IAChC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAa,CAAC;IAEtD,oEAAoE;IACpE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,GAAG,CAAC;AACb,CAAC;AAMD,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,OAA+B;IAE/B,MAAM,QAAQ,GAAG,OAAO,EAAE,cAAc,IAAI,qBAAqB,CAAC;IAClE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
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: string;
|
|
15
|
+
logLevel: string;
|
|
16
|
+
config?: string | undefined;
|
|
17
|
+
cwd?: string | undefined;
|
|
18
|
+
autoPatch?: boolean | undefined;
|
|
19
|
+
environmentVariables?: Record<string, string> | undefined;
|
|
20
|
+
logPaths?: {
|
|
21
|
+
out: string;
|
|
22
|
+
err: string;
|
|
23
|
+
} | undefined;
|
|
24
|
+
}
|
|
25
|
+
export declare function generatePlist(options: PlistOptions): string;
|
|
26
|
+
export interface ParsedPlistArgs {
|
|
27
|
+
proxy: ProxyName | null;
|
|
28
|
+
autoPatch: boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare function parsePlistArgs(plistContent: string): ParsedPlistArgs;
|
|
31
|
+
export interface InstallAgentOptions {
|
|
32
|
+
port: number;
|
|
33
|
+
proxy: ProxyName;
|
|
34
|
+
logLevel: string;
|
|
35
|
+
logger: Logger;
|
|
36
|
+
config?: string | undefined;
|
|
37
|
+
cwd?: string | undefined;
|
|
38
|
+
autoPatch?: boolean | undefined;
|
|
39
|
+
exec?: ExecFn | undefined;
|
|
40
|
+
plistPath?: string | undefined;
|
|
41
|
+
nodePath?: string | undefined;
|
|
42
|
+
entryPoint?: string | undefined;
|
|
43
|
+
}
|
|
44
|
+
export declare function installAgent(options: InstallAgentOptions): Promise<void>;
|
|
45
|
+
export interface UninstallAgentOptions {
|
|
46
|
+
logger: Logger;
|
|
47
|
+
exec?: ExecFn | undefined;
|
|
48
|
+
plistPath?: string | undefined;
|
|
49
|
+
}
|
|
50
|
+
export declare function uninstallAgent(options: UninstallAgentOptions): Promise<void>;
|