xcode-copilot-server 3.4.0 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/banner.d.ts +4 -4
- package/dist/banner.js +45 -12
- package/dist/banner.js.map +1 -1
- package/dist/bridge-constants.d.ts +2 -0
- package/dist/bridge-constants.js +3 -0
- package/dist/bridge-constants.js.map +1 -0
- package/dist/cli-validators.d.ts +0 -1
- package/dist/cli-validators.js +2 -2
- package/dist/cli-validators.js.map +1 -1
- package/dist/config-schema.d.ts +107 -0
- package/dist/config-schema.js +53 -0
- package/dist/config-schema.js.map +1 -0
- package/dist/config.d.ts +3 -28
- package/dist/config.js +23 -62
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +1 -1
- package/dist/conversation-manager.d.ts +9 -4
- package/dist/conversation-manager.js +44 -61
- package/dist/conversation-manager.js.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/launchd/agent.d.ts +5 -9
- package/dist/launchd/agent.js +13 -12
- package/dist/launchd/agent.js.map +1 -1
- package/dist/launchd/index.d.ts +3 -3
- package/dist/launchd/index.js +1 -1
- package/dist/launchd/index.js.map +1 -1
- package/dist/launchd/socket.d.ts +2 -1
- package/dist/providers/claude/provider.js +40 -64
- package/dist/providers/claude/provider.js.map +1 -1
- package/dist/providers/claude/streaming.d.ts +10 -1
- package/dist/providers/claude/streaming.js +7 -3
- package/dist/providers/claude/streaming.js.map +1 -1
- package/dist/providers/claude/tool-results.js +1 -1
- package/dist/providers/claude/tool-results.js.map +1 -1
- package/dist/providers/codex/provider.js +28 -60
- package/dist/providers/codex/provider.js.map +1 -1
- package/dist/providers/codex/streaming.d.ts +12 -3
- package/dist/providers/codex/streaming.js +6 -6
- package/dist/providers/codex/streaming.js.map +1 -1
- package/dist/providers/codex/tool-results.js +1 -1
- package/dist/providers/codex/tool-results.js.map +1 -1
- package/dist/providers/index.d.ts +4 -23
- package/dist/providers/index.js +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/names.d.ts +4 -0
- package/dist/providers/names.js +7 -0
- package/dist/providers/names.js.map +1 -0
- package/dist/providers/openai/provider.js +5 -14
- package/dist/providers/openai/provider.js.map +1 -1
- package/dist/providers/shared/continuation.d.ts +10 -0
- package/dist/providers/shared/continuation.js +18 -0
- package/dist/providers/shared/continuation.js.map +1 -0
- package/dist/providers/shared/prompt-utils.d.ts +0 -11
- package/dist/providers/shared/prompt-utils.js +0 -11
- package/dist/providers/shared/prompt-utils.js.map +1 -1
- package/dist/providers/shared/session-config.d.ts +12 -3
- package/dist/providers/shared/session-config.js +24 -7
- package/dist/providers/shared/session-config.js.map +1 -1
- package/dist/providers/shared/streaming-core.d.ts +12 -2
- package/dist/providers/shared/streaming-core.js +183 -161
- package/dist/providers/shared/streaming-core.js.map +1 -1
- package/dist/providers/shared/streaming-orchestrator.d.ts +11 -0
- package/dist/providers/shared/streaming-orchestrator.js +11 -0
- package/dist/providers/shared/streaming-orchestrator.js.map +1 -0
- package/dist/providers/shared/user-agent-guard.d.ts +3 -0
- package/dist/providers/shared/user-agent-guard.js +17 -0
- package/dist/providers/shared/user-agent-guard.js.map +1 -0
- package/dist/settings-patcher/claude.d.ts +1 -2
- package/dist/settings-patcher/claude.js +35 -13
- package/dist/settings-patcher/claude.js.map +1 -1
- package/dist/settings-patcher/codex.d.ts +1 -20
- package/dist/settings-patcher/codex.js +58 -31
- package/dist/settings-patcher/codex.js.map +1 -1
- package/dist/settings-patcher/index.d.ts +2 -15
- package/dist/settings-patcher/index.js +15 -36
- package/dist/settings-patcher/index.js.map +1 -1
- package/dist/settings-patcher/types.d.ts +21 -0
- package/dist/settings-patcher/url-utils.d.ts +1 -0
- package/dist/settings-patcher/url-utils.js +6 -0
- package/dist/settings-patcher/url-utils.js.map +1 -0
- package/dist/shutdown.d.ts +16 -0
- package/dist/shutdown.js +53 -0
- package/dist/shutdown.js.map +1 -0
- package/dist/startup.js +65 -139
- package/dist/startup.js.map +1 -1
- package/dist/tool-bridge/constants.d.ts +4 -2
- package/dist/tool-bridge/constants.js +4 -2
- package/dist/tool-bridge/constants.js.map +1 -1
- package/dist/tool-bridge/index.d.ts +2 -2
- package/dist/tool-bridge/index.js +6 -5
- package/dist/tool-bridge/index.js.map +1 -1
- package/dist/tool-bridge/routes.d.ts +2 -2
- package/dist/tool-bridge/routes.js +24 -22
- package/dist/tool-bridge/routes.js.map +1 -1
- package/dist/tool-bridge/session-lifecycle.js +6 -3
- package/dist/tool-bridge/session-lifecycle.js.map +1 -1
- package/dist/tool-bridge/state.d.ts +4 -25
- package/dist/tool-bridge/state.js +6 -65
- package/dist/tool-bridge/state.js.map +1 -1
- package/dist/tool-bridge/tool-router.d.ts +1 -0
- package/dist/tool-bridge/tool-router.js +26 -19
- package/dist/tool-bridge/tool-router.js.map +1 -1
- package/dist/utils/child-process.d.ts +2 -0
- package/dist/utils/child-process.js +8 -0
- package/dist/utils/child-process.js.map +1 -0
- package/dist/utils/type-guards.d.ts +2 -0
- package/dist/utils/type-guards.js +7 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { ToolBridgeState } from "./tool-bridge/state.js";
|
|
3
|
+
function isConversation(conv) {
|
|
4
|
+
return "state" in conv && conv.state instanceof ToolBridgeState;
|
|
5
|
+
}
|
|
6
|
+
export function asConversation(conv) {
|
|
7
|
+
if (!isConversation(conv))
|
|
8
|
+
throw new Error("Expected extended Conversation with state");
|
|
9
|
+
return conv;
|
|
10
|
+
}
|
|
3
11
|
export class ConversationManager {
|
|
4
12
|
conversations = new Map();
|
|
5
13
|
logger;
|
|
@@ -18,63 +26,69 @@ export class ConversationManager {
|
|
|
18
26
|
sentMessageCount: 0,
|
|
19
27
|
isPrimary,
|
|
20
28
|
model: null,
|
|
21
|
-
get sessionActive() { return state.sessionActive; },
|
|
29
|
+
get sessionActive() { return state.session.sessionActive; },
|
|
22
30
|
set sessionActive(active) {
|
|
23
31
|
if (active) {
|
|
24
|
-
state.markSessionActive();
|
|
32
|
+
state.session.markSessionActive();
|
|
25
33
|
}
|
|
26
34
|
else {
|
|
27
|
-
state.markSessionInactive();
|
|
35
|
+
state.session.markSessionInactive();
|
|
28
36
|
}
|
|
29
37
|
},
|
|
30
|
-
get hadError() { return state.hadError; },
|
|
31
|
-
set hadError(
|
|
38
|
+
get hadError() { return state.session.hadError; },
|
|
39
|
+
set hadError(errored) { if (errored)
|
|
40
|
+
state.session.markSessionErrored(); },
|
|
32
41
|
};
|
|
33
42
|
this.conversations.set(id, conversation);
|
|
34
|
-
if (
|
|
35
|
-
|
|
43
|
+
if (isPrimary) {
|
|
44
|
+
this.primaryId = id;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
state.session.onSessionEnd(() => {
|
|
36
48
|
this.logger.debug(`Conversation ${id} session ended, removing`);
|
|
37
49
|
this.conversations.delete(id);
|
|
38
50
|
});
|
|
39
51
|
}
|
|
40
|
-
|
|
41
|
-
this.primaryId = id;
|
|
42
|
-
}
|
|
43
|
-
this.logger.debug(`Created conversation ${id} (primary=${String(isPrimary)}, active: ${String(this.conversations.size)})`);
|
|
52
|
+
this.logger.debug(`Created conversation ${id} (primary=${String(isPrimary)})`);
|
|
44
53
|
return conversation;
|
|
45
54
|
}
|
|
46
55
|
getPrimary() {
|
|
47
56
|
if (!this.primaryId)
|
|
48
|
-
return
|
|
49
|
-
return this.conversations.get(this.primaryId)
|
|
57
|
+
return undefined;
|
|
58
|
+
return this.conversations.get(this.primaryId);
|
|
50
59
|
}
|
|
51
60
|
clearPrimary() {
|
|
52
61
|
if (this.primaryId) {
|
|
53
62
|
const conv = this.conversations.get(this.primaryId);
|
|
54
63
|
if (conv) {
|
|
55
|
-
conv.state.cleanup();
|
|
64
|
+
conv.state.session.cleanup();
|
|
56
65
|
this.conversations.delete(this.primaryId);
|
|
57
|
-
this.logger.debug(`Cleared primary conversation ${this.primaryId}
|
|
66
|
+
this.logger.debug(`Cleared primary conversation ${this.primaryId}`);
|
|
58
67
|
}
|
|
59
68
|
this.primaryId = null;
|
|
60
69
|
}
|
|
61
70
|
}
|
|
62
|
-
|
|
63
|
-
// Isolated conversations pile up when the primary is busy, so clean
|
|
64
|
-
// up any that finished before we allocate more (the onSessionEnd
|
|
65
|
-
// callback usually handles this, but this catches edge cases where
|
|
66
|
-
// the callback never fired)
|
|
71
|
+
evictStale() {
|
|
67
72
|
for (const [id, conv] of this.conversations) {
|
|
68
|
-
if (!conv.isPrimary && !conv.state.sessionActive) {
|
|
69
|
-
conv.state.cleanup();
|
|
73
|
+
if (!conv.isPrimary && !conv.state.session.sessionActive) {
|
|
74
|
+
conv.state.session.cleanup();
|
|
70
75
|
this.conversations.delete(id);
|
|
71
|
-
this.logger.debug(`Evicted stale conversation ${id}
|
|
76
|
+
this.logger.debug(`Evicted stale conversation ${id}`);
|
|
72
77
|
}
|
|
73
78
|
}
|
|
79
|
+
}
|
|
80
|
+
findForNewRequest() {
|
|
81
|
+
this.evictStale();
|
|
74
82
|
const primary = this.getPrimary();
|
|
75
83
|
if (primary) {
|
|
76
|
-
if (primary.state.sessionActive
|
|
77
|
-
this.logger.debug(`Primary ${primary.id} is
|
|
84
|
+
if (primary.state.session.sessionActive) {
|
|
85
|
+
this.logger.debug(`Primary ${primary.id} is busy, creating isolated conversation`);
|
|
86
|
+
return { conversation: this.create(), isReuse: false };
|
|
87
|
+
}
|
|
88
|
+
if (!primary.session) {
|
|
89
|
+
// No SDK session yet. Create an isolated conversation so the primary
|
|
90
|
+
// stays available for the first real request.
|
|
91
|
+
this.logger.debug(`Primary ${primary.id} has no session, creating isolated conversation`);
|
|
78
92
|
return { conversation: this.create(), isReuse: false };
|
|
79
93
|
}
|
|
80
94
|
this.logger.debug(`Reusing primary conversation ${primary.id}`);
|
|
@@ -82,50 +96,19 @@ export class ConversationManager {
|
|
|
82
96
|
}
|
|
83
97
|
return { conversation: this.create({ isPrimary: true }), isReuse: false };
|
|
84
98
|
}
|
|
85
|
-
findByContinuation(messages) {
|
|
86
|
-
const lastMsg = messages[messages.length - 1];
|
|
87
|
-
if (!lastMsg || lastMsg.role !== "user" || typeof lastMsg.content === "string") {
|
|
88
|
-
return undefined;
|
|
89
|
-
}
|
|
90
|
-
const toolUseIds = [];
|
|
91
|
-
for (const block of lastMsg.content) {
|
|
92
|
-
if (block.type === "tool_result") {
|
|
93
|
-
toolUseIds.push(block.tool_use_id);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (toolUseIds.length === 0)
|
|
97
|
-
return undefined;
|
|
98
|
-
for (const [, conv] of this.conversations) {
|
|
99
|
-
for (const toolUseId of toolUseIds) {
|
|
100
|
-
if (conv.state.hasPendingToolCall(toolUseId)) {
|
|
101
|
-
this.logger.debug(`Continuation matched conversation ${conv.id} via tool_use_id ${toolUseId}`);
|
|
102
|
-
return conv;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
// The model sometimes retries a tool after an internal failure so the
|
|
107
|
-
// tool_use_id won't match anything, but we can still route by session
|
|
108
|
-
for (const [, conv] of this.conversations) {
|
|
109
|
-
if (conv.state.sessionActive) {
|
|
110
|
-
this.logger.debug(`Continuation matched conversation ${conv.id} via sessionActive fallback`);
|
|
111
|
-
return conv;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return undefined;
|
|
115
|
-
}
|
|
116
99
|
findByContinuationIds(callIds) {
|
|
117
100
|
if (callIds.length === 0)
|
|
118
101
|
return undefined;
|
|
119
102
|
for (const [, conv] of this.conversations) {
|
|
120
103
|
for (const callId of callIds) {
|
|
121
|
-
if (conv.state.hasPendingToolCall(callId)) {
|
|
104
|
+
if (conv.state.toolRouter.hasPendingToolCall(callId)) {
|
|
122
105
|
this.logger.debug(`Continuation matched conversation ${conv.id} via call_id ${callId}`);
|
|
123
106
|
return conv;
|
|
124
107
|
}
|
|
125
108
|
}
|
|
126
109
|
}
|
|
127
110
|
for (const [, conv] of this.conversations) {
|
|
128
|
-
if (conv.state.sessionActive) {
|
|
111
|
+
if (conv.state.session.sessionActive) {
|
|
129
112
|
this.logger.debug(`Continuation matched conversation ${conv.id} via sessionActive fallback`);
|
|
130
113
|
return conv;
|
|
131
114
|
}
|
|
@@ -134,7 +117,7 @@ export class ConversationManager {
|
|
|
134
117
|
}
|
|
135
118
|
findByExpectedTool(name) {
|
|
136
119
|
for (const [, conv] of this.conversations) {
|
|
137
|
-
if (conv.state.hasExpectedTool(name)) {
|
|
120
|
+
if (conv.state.toolRouter.hasExpectedTool(name)) {
|
|
138
121
|
return conv.state;
|
|
139
122
|
}
|
|
140
123
|
}
|
|
@@ -146,12 +129,12 @@ export class ConversationManager {
|
|
|
146
129
|
remove(convId) {
|
|
147
130
|
const conv = this.conversations.get(convId);
|
|
148
131
|
if (conv) {
|
|
149
|
-
conv.state.cleanup();
|
|
132
|
+
conv.state.session.cleanup();
|
|
150
133
|
this.conversations.delete(convId);
|
|
151
134
|
if (convId === this.primaryId) {
|
|
152
135
|
this.primaryId = null;
|
|
153
136
|
}
|
|
154
|
-
this.logger.debug(`Removed conversation ${convId}
|
|
137
|
+
this.logger.debug(`Removed conversation ${convId}`);
|
|
155
138
|
}
|
|
156
139
|
}
|
|
157
140
|
get size() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-manager.js","sourceRoot":"","sources":["../src/conversation-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation-manager.js","sourceRoot":"","sources":["../src/conversation-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,14 @@ import { installAgent, uninstallAgent } from "./launchd/index.js";
|
|
|
11
11
|
const PACKAGE_ROOT = dirname(import.meta.dirname);
|
|
12
12
|
const DEFAULT_CONFIG_PATH = join(PACKAGE_ROOT, "config.json5");
|
|
13
13
|
// Can't use a JSON import here because rootDir is src/ and package.json lives at the root
|
|
14
|
-
|
|
14
|
+
let version;
|
|
15
|
+
try {
|
|
16
|
+
const raw = JSON.parse(await readFile(join(PACKAGE_ROOT, "package.json"), "utf-8"));
|
|
17
|
+
version = z.object({ version: z.string() }).parse(raw).version;
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
throw new Error(`Failed to read package.json: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
21
|
+
}
|
|
15
22
|
async function patchSettingsCommand(options) {
|
|
16
23
|
const logLevel = parseLogLevel(options.logLevel);
|
|
17
24
|
const logger = new Logger(logLevel);
|
|
@@ -116,7 +123,7 @@ program
|
|
|
116
123
|
.option("-l, --log-level <level>", "log verbosity", "info")
|
|
117
124
|
.action((options) => uninstallAgentCommand(options));
|
|
118
125
|
program.parseAsync().catch((err) => {
|
|
119
|
-
|
|
126
|
+
process.stderr.write(`Fatal error: ${String(err)}\n`);
|
|
120
127
|
process.exit(1);
|
|
121
128
|
});
|
|
122
129
|
//# sourceMappingURL=index.js.map
|
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,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChH,OAAO,EAAE,WAAW,EAAqB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClD,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAE/D,0FAA0F;AAC1F,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/launchd/agent.d.ts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import type { Logger } from "copilot-sdk-proxy";
|
|
2
2
|
import type { ProxyMode } from "../providers/index.js";
|
|
3
|
-
|
|
3
|
+
import { type ExecFn } from "../utils/child-process.js";
|
|
4
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
5
|
export interface PlistOptions {
|
|
11
6
|
nodePath: string;
|
|
12
7
|
entryPoint: string;
|
|
@@ -24,12 +19,12 @@ export interface PlistOptions {
|
|
|
24
19
|
} | undefined;
|
|
25
20
|
}
|
|
26
21
|
export declare function generatePlist(options: PlistOptions): string;
|
|
27
|
-
|
|
22
|
+
interface ParsedPlistArgs {
|
|
28
23
|
proxy: ProxyMode | null;
|
|
29
24
|
autoPatch: boolean;
|
|
30
25
|
}
|
|
31
26
|
export declare function parsePlistArgs(plistContent: string): ParsedPlistArgs;
|
|
32
|
-
|
|
27
|
+
interface InstallAgentOptions {
|
|
33
28
|
port: number;
|
|
34
29
|
proxy: ProxyMode;
|
|
35
30
|
logLevel: string;
|
|
@@ -44,9 +39,10 @@ export interface InstallAgentOptions {
|
|
|
44
39
|
entryPoint?: string | undefined;
|
|
45
40
|
}
|
|
46
41
|
export declare function installAgent(options: InstallAgentOptions): Promise<void>;
|
|
47
|
-
|
|
42
|
+
interface UninstallAgentOptions {
|
|
48
43
|
logger: Logger;
|
|
49
44
|
exec?: ExecFn | undefined;
|
|
50
45
|
plistPath?: string | undefined;
|
|
51
46
|
}
|
|
52
47
|
export declare function uninstallAgent(options: UninstallAgentOptions): Promise<void>;
|
|
48
|
+
export {};
|
package/dist/launchd/agent.js
CHANGED
|
@@ -1,23 +1,18 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
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
3
|
import { dirname, join, resolve } from "node:path";
|
|
6
4
|
import { homedir } from "node:os";
|
|
7
5
|
import { Command } from "commander";
|
|
8
6
|
import plist, {} from "plist";
|
|
9
7
|
import { isProxyName } from "../cli-validators.js";
|
|
10
8
|
import { patchSettings, restoreSettings } from "../settings-patcher/index.js";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const { stdout } = await execFileAsync(cmd, args);
|
|
14
|
-
return stdout;
|
|
15
|
-
}
|
|
9
|
+
import { defaultExec } from "../utils/child-process.js";
|
|
10
|
+
import { isRecord } from "../utils/type-guards.js";
|
|
16
11
|
export const AGENT_LABEL = "com.xcode-copilot-server";
|
|
17
|
-
|
|
12
|
+
function defaultPlistPath() {
|
|
18
13
|
return join(homedir(), "Library/LaunchAgents", `${AGENT_LABEL}.plist`);
|
|
19
14
|
}
|
|
20
|
-
|
|
15
|
+
function defaultLogPaths() {
|
|
21
16
|
const dir = join(homedir(), "Library/Logs");
|
|
22
17
|
return {
|
|
23
18
|
out: join(dir, "xcode-copilot-server.out.log"),
|
|
@@ -81,9 +76,10 @@ export function parsePlistArgs(plistContent) {
|
|
|
81
76
|
raw = plist.parse(plistContent);
|
|
82
77
|
}
|
|
83
78
|
catch {
|
|
79
|
+
// Malformed plist, fall back to safe defaults
|
|
84
80
|
return { proxy: null, autoPatch: false };
|
|
85
81
|
}
|
|
86
|
-
if (
|
|
82
|
+
if (!isRecord(raw)) {
|
|
87
83
|
return { proxy: null, autoPatch: false };
|
|
88
84
|
}
|
|
89
85
|
const parsed = raw;
|
|
@@ -91,7 +87,6 @@ export function parsePlistArgs(plistContent) {
|
|
|
91
87
|
if (!Array.isArray(args)) {
|
|
92
88
|
return { proxy: null, autoPatch: false };
|
|
93
89
|
}
|
|
94
|
-
// First two entries are the node binary and entry point, everything after is flags
|
|
95
90
|
const flagArgs = args.slice(2).filter((a) => typeof a === "string");
|
|
96
91
|
const cmd = new Command()
|
|
97
92
|
.exitOverride()
|
|
@@ -104,6 +99,7 @@ export function parsePlistArgs(plistContent) {
|
|
|
104
99
|
cmd.parse(flagArgs, { from: "user" });
|
|
105
100
|
}
|
|
106
101
|
catch {
|
|
102
|
+
// Unparsable flags, fall back to safe defaults
|
|
107
103
|
return { proxy: null, autoPatch: false };
|
|
108
104
|
}
|
|
109
105
|
const opts = cmd.opts();
|
|
@@ -182,7 +178,12 @@ export async function uninstallAgent(options) {
|
|
|
182
178
|
catch (err) {
|
|
183
179
|
logger.warn(`launchctl unload failed: ${String(err)}`);
|
|
184
180
|
}
|
|
185
|
-
|
|
181
|
+
try {
|
|
182
|
+
await unlink(plistPath);
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
logger.warn(`Failed to remove plist file: ${String(err)}`);
|
|
186
|
+
}
|
|
186
187
|
if (parsed.autoPatch) {
|
|
187
188
|
await restoreSettings(parsed.proxy, logger);
|
|
188
189
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/launchd/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/launchd/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/launchd/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { activateSocket } from "./socket.js";
|
|
2
|
-
export type { NativeActivateFn
|
|
3
|
-
export { installAgent, uninstallAgent, generatePlist, parsePlistArgs,
|
|
4
|
-
export type {
|
|
2
|
+
export type { NativeActivateFn } from "./socket.js";
|
|
3
|
+
export { installAgent, uninstallAgent, generatePlist, parsePlistArgs, AGENT_LABEL, } from "./agent.js";
|
|
4
|
+
export type { PlistOptions } from "./agent.js";
|
package/dist/launchd/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { activateSocket } from "./socket.js";
|
|
2
|
-
export { installAgent, uninstallAgent, generatePlist, parsePlistArgs,
|
|
2
|
+
export { installAgent, uninstallAgent, generatePlist, parsePlistArgs, AGENT_LABEL, } from "./agent.js";
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +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,
|
|
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,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
package/dist/launchd/socket.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export type NativeActivateFn = (name: string) => number[];
|
|
2
|
-
|
|
2
|
+
interface ActivateSocketOptions {
|
|
3
3
|
nativeActivate?: NativeActivateFn;
|
|
4
4
|
}
|
|
5
5
|
export declare function activateSocket(name: string, options?: ActivateSocketOptions): number[];
|
|
6
|
+
export {};
|
|
@@ -1,90 +1,66 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolveToolBridgeManager } from "../../tool-bridge/index.js";
|
|
2
2
|
import { createMessagesHandler, createCountTokensHandler, } from "copilot-sdk-proxy";
|
|
3
|
+
import { asConversation } from "../../conversation-manager.js";
|
|
3
4
|
import { resolveToolResults } from "./tool-results.js";
|
|
4
5
|
import { handleAnthropicStreaming, startReply } from "./streaming.js";
|
|
5
|
-
import {
|
|
6
|
+
import { createProviderSessionConfig } from "../shared/session-config.js";
|
|
6
7
|
import { filterExcludedFiles } from "../shared/prompt-utils.js";
|
|
8
|
+
import { addUserAgentGuard } from "../shared/user-agent-guard.js";
|
|
9
|
+
import { handleContinuation } from "../shared/continuation.js";
|
|
10
|
+
import { orchestrateStreaming } from "../shared/streaming-orchestrator.js";
|
|
11
|
+
import { UA_PREFIXES } from "../names.js";
|
|
12
|
+
function extractToolResultIds(messages) {
|
|
13
|
+
const lastMsg = messages[messages.length - 1];
|
|
14
|
+
if (!lastMsg || lastMsg.role !== "user" || typeof lastMsg.content === "string") {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
const ids = [];
|
|
18
|
+
for (const block of lastMsg.content) {
|
|
19
|
+
if (block.type === "tool_result") {
|
|
20
|
+
ids.push(block.tool_use_id);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return ids;
|
|
24
|
+
}
|
|
7
25
|
export const claudeProvider = {
|
|
8
26
|
name: "Claude",
|
|
9
27
|
routes: ["POST /v1/messages", "POST /v1/messages/count_tokens"],
|
|
10
28
|
register(app, ctx) {
|
|
11
|
-
app
|
|
12
|
-
|
|
13
|
-
// won't have the claude-cli/ user-agent
|
|
14
|
-
if (request.url.startsWith("/mcp/")) {
|
|
15
|
-
done();
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
const ua = request.headers["user-agent"] ?? "";
|
|
19
|
-
if (!ua.startsWith("claude-cli/")) {
|
|
20
|
-
ctx.logger.warn(`Rejected request from unexpected user-agent: ${ua}`);
|
|
21
|
-
void reply.code(403).type("application/json").send('{"error":"Forbidden"}\n');
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
done();
|
|
25
|
-
});
|
|
26
|
-
const manager = ctx.toolBridgeManager ?? registerToolBridge(app, ctx.logger);
|
|
29
|
+
addUserAgentGuard(app, UA_PREFIXES.claude, ctx.logger);
|
|
30
|
+
const manager = resolveToolBridgeManager(app, ctx.toolBridgeManager, ctx.logger);
|
|
27
31
|
const { logger, config, port, stats } = ctx;
|
|
28
32
|
app.post("/v1/messages", createMessagesHandler(ctx, manager, {
|
|
29
33
|
beforeHandler: async (req, reply) => {
|
|
30
|
-
const
|
|
34
|
+
const toolResultIds = extractToolResultIds(req.messages);
|
|
35
|
+
if (toolResultIds.length === 0)
|
|
36
|
+
return false;
|
|
37
|
+
const existingConv = manager.findByContinuationIds(toolResultIds);
|
|
31
38
|
if (!existingConv)
|
|
32
39
|
return false;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
// TODO: the continuation doesn't own the session so we can't abort it
|
|
38
|
-
// here. The original streaming handler will let it run to idle harmlessly
|
|
39
|
-
// because it guards against null replies, but ideally we'd abort it too.
|
|
40
|
-
reply.raw.on("close", () => {
|
|
41
|
-
if (state.currentReply === reply) {
|
|
42
|
-
logger.info("Client disconnected during continuation");
|
|
43
|
-
state.cleanup();
|
|
44
|
-
state.notifyStreamingDone();
|
|
45
|
-
}
|
|
40
|
+
return handleContinuation(asConversation(existingConv), reply, logger, {
|
|
41
|
+
startStream: () => { startReply(reply, req.model); },
|
|
42
|
+
resolveResults: () => { resolveToolResults(req.messages, existingConv.state, logger); },
|
|
43
|
+
countMessages: () => req.messages.length,
|
|
46
44
|
});
|
|
47
|
-
resolveToolResults(req.messages, state, logger);
|
|
48
|
-
await state.waitForStreamingDone();
|
|
49
|
-
existingConv.sentMessageCount = req.messages.length;
|
|
50
|
-
return true;
|
|
51
45
|
},
|
|
52
46
|
onConversationReady: (conversation, req) => {
|
|
53
|
-
const { state } = conversation;
|
|
47
|
+
const { state } = asConversation(conversation);
|
|
54
48
|
const tools = req.tools;
|
|
55
49
|
if (tools?.length) {
|
|
56
|
-
state.cacheTools(tools);
|
|
50
|
+
state.toolCache.cacheTools(tools);
|
|
57
51
|
}
|
|
58
52
|
},
|
|
59
53
|
transformPrompt: (prompt) => filterExcludedFiles(prompt, config.excludedFilePatterns),
|
|
60
|
-
createSessionConfig: (baseOptions, conversation, req) => {
|
|
61
|
-
const tools = req.tools;
|
|
62
|
-
const hasBridge = !!tools?.length && config.toolBridge;
|
|
63
|
-
if (tools) {
|
|
64
|
-
logger.debug(`Tools in request: ${String(tools.length)}`);
|
|
65
|
-
logger.debug(`Tool names: ${tools.map((t) => t.name).join(", ")}`);
|
|
66
|
-
}
|
|
67
|
-
if (hasBridge) {
|
|
68
|
-
logger.info("Tool bridge active (in-process MCP)");
|
|
69
|
-
}
|
|
70
|
-
return createSessionConfig({
|
|
71
|
-
...baseOptions,
|
|
72
|
-
config,
|
|
73
|
-
hasToolBridge: hasBridge,
|
|
74
|
-
port,
|
|
75
|
-
conversationId: conversation.id,
|
|
76
|
-
});
|
|
77
|
-
},
|
|
54
|
+
createSessionConfig: (baseOptions, conversation, req) => createProviderSessionConfig(baseOptions, { conversationId: conversation.id, tools: req.tools, config, logger, port }),
|
|
78
55
|
handleStreaming: async ({ conversation, session, prompt, model, reply, req }) => {
|
|
79
|
-
const
|
|
56
|
+
const conv = asConversation(conversation);
|
|
80
57
|
const hasBridge = !!req.tools?.length && config.toolBridge;
|
|
81
|
-
state.setReply(reply);
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
58
|
+
conv.state.replies.setReply(reply);
|
|
59
|
+
await orchestrateStreaming({
|
|
60
|
+
conversation: conv, logger, manager,
|
|
61
|
+
messageCount: req.messages.length,
|
|
62
|
+
runStreaming: () => handleAnthropicStreaming({ state: conv.state, session, prompt, model, logger, hasBridge, stats }),
|
|
63
|
+
});
|
|
88
64
|
},
|
|
89
65
|
}));
|
|
90
66
|
app.post("/v1/messages/count_tokens", createCountTokensHandler(ctx));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/claude/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/claude/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,4 +2,13 @@ import type { CopilotSession, Logger, Stats } from "copilot-sdk-proxy";
|
|
|
2
2
|
import { startReply } from "copilot-sdk-proxy";
|
|
3
3
|
import type { ToolBridgeState } from "../../tool-bridge/state.js";
|
|
4
4
|
export { startReply };
|
|
5
|
-
|
|
5
|
+
interface AnthropicStreamingOptions {
|
|
6
|
+
state: ToolBridgeState;
|
|
7
|
+
session: CopilotSession;
|
|
8
|
+
prompt: string;
|
|
9
|
+
model: string;
|
|
10
|
+
logger: Logger;
|
|
11
|
+
hasBridge: boolean;
|
|
12
|
+
stats: Stats;
|
|
13
|
+
}
|
|
14
|
+
export declare function handleAnthropicStreaming(opts: AnthropicStreamingOptions): Promise<void>;
|