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
|
@@ -35,16 +35,20 @@ class BridgeAnthropicProtocol extends AnthropicProtocol {
|
|
|
35
35
|
this.emitToolUseBlocks(r, tools);
|
|
36
36
|
this.sendEpilogue(r, "tool_use");
|
|
37
37
|
}
|
|
38
|
+
teardown() {
|
|
39
|
+
// Nothing to clean up (unlike ResponsesProtocol), but required by BridgeStreamProtocol.
|
|
40
|
+
}
|
|
38
41
|
reset() {
|
|
39
42
|
this.textBlockStarted = false;
|
|
40
43
|
}
|
|
41
44
|
}
|
|
42
|
-
export
|
|
43
|
-
const
|
|
45
|
+
export function handleAnthropicStreaming(opts) {
|
|
46
|
+
const { state, session, prompt, model, logger, hasBridge, stats } = opts;
|
|
47
|
+
const reply = state.replies.currentReply;
|
|
44
48
|
if (!reply)
|
|
45
49
|
throw new Error("No reply set on bridge state");
|
|
46
50
|
startReply(reply, model);
|
|
47
51
|
const protocol = new BridgeAnthropicProtocol();
|
|
48
|
-
return runSessionStreaming(state, session, prompt, logger, hasBridge, protocol, reply, stats);
|
|
52
|
+
return runSessionStreaming({ state, session, prompt, logger, hasBridge, protocol, initialReply: reply, stats });
|
|
49
53
|
}
|
|
50
54
|
//# sourceMappingURL=streaming.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/providers/claude/streaming.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,IAAI,SAAS,EACzB,UAAU,EACV,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,MAAM,uBAAwB,SAAQ,iBAAiB;IAC7C,iBAAiB,CACvB,CAAe,EACf,YAAmC;QAEnC,IAAI,UAAkB,CAAC;QACvB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACtB,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,KAAK,GAAG,UAAU,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,SAAS,CAAC,CAAC,EAAE,qBAAqB,EAAE;gBAClC,IAAI,EAAE,qBAAqB;gBAC3B,KAAK;gBACL,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;aACjF,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5E,SAAS,CAAC,CAAC,EAAE,qBAAqB,EAAE;gBAClC,IAAI,EAAE,qBAAqB;gBAC3B,KAAK;gBACL,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,YAAY,EAAE,QAAQ,EAAE;aAC5D,CAAC,CAAC;YAEH,SAAS,CAAC,CAAC,EAAE,oBAAoB,EAAE;gBACjC,IAAI,EAAE,oBAAoB;gBAC1B,KAAK;aAC0B,CAAC,CAAC;YAEnC,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,CAAe,EAAE,KAA4B;QAC9D,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/providers/claude/streaming.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,IAAI,SAAS,EACzB,UAAU,EACV,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,MAAM,uBAAwB,SAAQ,iBAAiB;IAC7C,iBAAiB,CACvB,CAAe,EACf,YAAmC;QAEnC,IAAI,UAAkB,CAAC;QACvB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACtB,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,KAAK,GAAG,UAAU,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,SAAS,CAAC,CAAC,EAAE,qBAAqB,EAAE;gBAClC,IAAI,EAAE,qBAAqB;gBAC3B,KAAK;gBACL,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;aACjF,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5E,SAAS,CAAC,CAAC,EAAE,qBAAqB,EAAE;gBAClC,IAAI,EAAE,qBAAqB;gBAC3B,KAAK;gBACL,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,YAAY,EAAE,QAAQ,EAAE;aAC5D,CAAC,CAAC;YAEH,SAAS,CAAC,CAAC,EAAE,oBAAoB,EAAE;gBACjC,IAAI,EAAE,oBAAoB;gBAC1B,KAAK;aAC0B,CAAC,CAAC;YAEnC,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,CAAe,EAAE,KAA4B;QAC9D,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;IAEQ,QAAQ;QACf,wFAAwF;IAC1F,CAAC;IAED,KAAK;QACH,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;CACF;AAYD,MAAM,UAAU,wBAAwB,CAAC,IAA+B;IACtE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACzE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC5D,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEzB,MAAM,QAAQ,GAAG,IAAI,uBAAuB,EAAE,CAAC;IAC/C,OAAO,mBAAmB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAClH,CAAC"}
|
|
@@ -10,7 +10,7 @@ export function resolveToolResults(messages, state, logger) {
|
|
|
10
10
|
? block.content.map((b) => b.text).join("\n")
|
|
11
11
|
: "";
|
|
12
12
|
logger.debug(`Resolving tool result for ${block.tool_use_id}`);
|
|
13
|
-
if (!state.resolveToolCall(block.tool_use_id, resultText)) {
|
|
13
|
+
if (!state.toolRouter.resolveToolCall(block.tool_use_id, resultText)) {
|
|
14
14
|
logger.warn(`No pending MCP request for tool_use_id ${block.tool_use_id}`);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-results.js","sourceRoot":"","sources":["../../../src/providers/claude/tool-results.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,kBAAkB,CAChC,QAA4B,EAC5B,KAAsB,EACtB,MAAc;IAEd,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO;IAEvF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;gBAClD,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;oBAC5B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC7C,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-results.js","sourceRoot":"","sources":["../../../src/providers/claude/tool-results.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,kBAAkB,CAChC,QAA4B,EAC5B,KAAsB,EACtB,MAAc;IAEd,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO;IAEvF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;gBAClD,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;oBAC5B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC7C,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;gBACrE,MAAM,CAAC,IAAI,CAAC,0CAA0C,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,56 +1,40 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolveToolBridgeManager } from "../../tool-bridge/index.js";
|
|
2
2
|
import { createResponsesHandler, extractFunctionCallOutputs, filterFunctionTools, genId, } from "copilot-sdk-proxy";
|
|
3
|
+
import { asConversation } from "../../conversation-manager.js";
|
|
3
4
|
import { resolveResponsesToolResults } from "./tool-results.js";
|
|
4
5
|
import { handleResponsesStreaming, startResponseStream } 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";
|
|
7
12
|
export const codexProvider = {
|
|
8
13
|
name: "Codex",
|
|
9
14
|
routes: ["POST /v1/responses"],
|
|
10
15
|
register(app, ctx) {
|
|
11
|
-
app
|
|
12
|
-
|
|
13
|
-
done();
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
const ua = request.headers["user-agent"] ?? "";
|
|
17
|
-
if (!ua.startsWith("Xcode/")) {
|
|
18
|
-
ctx.logger.warn(`Rejected request from unexpected user-agent: ${ua}`);
|
|
19
|
-
void reply.code(403).type("application/json").send('{"error":"Forbidden"}\n');
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
done();
|
|
23
|
-
});
|
|
24
|
-
const manager = ctx.toolBridgeManager ?? registerToolBridge(app, ctx.logger);
|
|
16
|
+
addUserAgentGuard(app, UA_PREFIXES.codex, ctx.logger);
|
|
17
|
+
const manager = resolveToolBridgeManager(app, ctx.toolBridgeManager, ctx.logger);
|
|
25
18
|
const { logger, config, port, stats } = ctx;
|
|
26
19
|
app.post("/v1/responses", createResponsesHandler(ctx, manager, {
|
|
27
20
|
beforeHandler: async (req, reply) => {
|
|
28
21
|
const callOutputs = extractFunctionCallOutputs(req.input);
|
|
29
|
-
logger.debug(`function_call_output items: ${String(callOutputs.length)}${callOutputs.length > 0 ? ` (call_ids: ${callOutputs.map((o) => o.call_id).join(", ")})` : ""}`);
|
|
30
22
|
if (callOutputs.length === 0)
|
|
31
23
|
return false;
|
|
32
24
|
const existingConv = manager.findByContinuationIds(callOutputs.map((o) => o.call_id));
|
|
33
25
|
if (!existingConv)
|
|
34
26
|
return false;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
reply.raw.on("close", () => {
|
|
40
|
-
if (state.currentReply === reply) {
|
|
41
|
-
logger.info("Client disconnected during continuation");
|
|
42
|
-
state.cleanup();
|
|
43
|
-
state.notifyStreamingDone();
|
|
44
|
-
}
|
|
27
|
+
return handleContinuation(asConversation(existingConv), reply, logger, {
|
|
28
|
+
startStream: () => startResponseStream(reply, genId("resp"), req.model),
|
|
29
|
+
resolveResults: () => { resolveResponsesToolResults(callOutputs, existingConv.state, logger); },
|
|
30
|
+
countMessages: () => Array.isArray(req.input) ? req.input.length : 1,
|
|
45
31
|
});
|
|
46
|
-
resolveResponsesToolResults(callOutputs, state, logger);
|
|
47
|
-
await state.waitForStreamingDone();
|
|
48
|
-
existingConv.sentMessageCount = Array.isArray(req.input) ? req.input.length : 1;
|
|
49
|
-
return true;
|
|
50
32
|
},
|
|
51
33
|
onConversationReady: (conversation, req) => {
|
|
52
|
-
const { state } = conversation;
|
|
34
|
+
const { state } = asConversation(conversation);
|
|
53
35
|
const tools = req.tools ? filterFunctionTools(req.tools) : undefined;
|
|
36
|
+
if (tools)
|
|
37
|
+
state.setFilteredTools(tools);
|
|
54
38
|
// Responses API tools use `parameters`, bridge uses `input_schema`
|
|
55
39
|
if (tools?.length) {
|
|
56
40
|
const bridgeTools = tools.map((t) => ({
|
|
@@ -58,40 +42,24 @@ export const codexProvider = {
|
|
|
58
42
|
description: t.description,
|
|
59
43
|
input_schema: t.parameters ?? {},
|
|
60
44
|
}));
|
|
61
|
-
state.cacheTools(bridgeTools);
|
|
45
|
+
state.toolCache.cacheTools(bridgeTools);
|
|
62
46
|
}
|
|
63
47
|
},
|
|
64
48
|
transformPrompt: (prompt) => filterExcludedFiles(prompt, config.excludedFilePatterns),
|
|
65
|
-
createSessionConfig: (baseOptions, conversation
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
if (tools) {
|
|
69
|
-
logger.debug(`Tools in request: ${String(tools.length)}`);
|
|
70
|
-
logger.debug(`Tool names: ${tools.map((t) => t.name).join(", ")}`);
|
|
71
|
-
}
|
|
72
|
-
if (hasBridge) {
|
|
73
|
-
logger.info("Tool bridge active (in-process MCP)");
|
|
74
|
-
}
|
|
75
|
-
return createSessionConfig({
|
|
76
|
-
...baseOptions,
|
|
77
|
-
config,
|
|
78
|
-
hasToolBridge: hasBridge,
|
|
79
|
-
port,
|
|
80
|
-
conversationId: conversation.id,
|
|
81
|
-
});
|
|
49
|
+
createSessionConfig: (baseOptions, conversation) => {
|
|
50
|
+
const { state } = asConversation(conversation);
|
|
51
|
+
return createProviderSessionConfig(baseOptions, { conversationId: conversation.id, tools: state.filteredTools, config, logger, port });
|
|
82
52
|
},
|
|
83
53
|
handleStreaming: async ({ conversation, session, prompt, model, reply, req, responseId }) => {
|
|
84
|
-
const
|
|
85
|
-
const tools =
|
|
54
|
+
const conv = asConversation(conversation);
|
|
55
|
+
const tools = conv.state.filteredTools;
|
|
86
56
|
const hasBridge = !!tools?.length && config.toolBridge;
|
|
87
|
-
state.setReply(reply);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
manager.clearPrimary();
|
|
94
|
-
}
|
|
57
|
+
conv.state.replies.setReply(reply);
|
|
58
|
+
await orchestrateStreaming({
|
|
59
|
+
conversation: conv, logger, manager,
|
|
60
|
+
messageCount: Array.isArray(req.input) ? req.input.length : 1,
|
|
61
|
+
runStreaming: () => handleResponsesStreaming({ state: conv.state, session, prompt, model, logger, hasBridge, responseId, stats }),
|
|
62
|
+
});
|
|
95
63
|
},
|
|
96
64
|
}));
|
|
97
65
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/codex/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/codex/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import type { CopilotSession, Logger, Stats } from "copilot-sdk-proxy";
|
|
2
2
|
import { startResponseStream } from "copilot-sdk-proxy";
|
|
3
|
-
import type { SeqCounter } from "copilot-sdk-proxy";
|
|
4
3
|
import type { ToolBridgeState } from "../../tool-bridge/state.js";
|
|
5
|
-
export {
|
|
6
|
-
|
|
4
|
+
export { startResponseStream };
|
|
5
|
+
interface ResponsesStreamingOptions {
|
|
6
|
+
state: ToolBridgeState;
|
|
7
|
+
session: CopilotSession;
|
|
8
|
+
prompt: string;
|
|
9
|
+
model: string;
|
|
10
|
+
logger: Logger;
|
|
11
|
+
hasBridge: boolean;
|
|
12
|
+
responseId: string;
|
|
13
|
+
stats: Stats;
|
|
14
|
+
}
|
|
15
|
+
export declare function handleResponsesStreaming(opts: ResponsesStreamingOptions): Promise<void>;
|
|
@@ -7,8 +7,7 @@ class BridgeResponsesProtocol extends ResponsesProtocol {
|
|
|
7
7
|
constructor(responseId, model, seq, createdAt, getReply) {
|
|
8
8
|
super(responseId, model, seq, createdAt);
|
|
9
9
|
this.getReply = getReply;
|
|
10
|
-
// Keepalive every 15s so the client doesn't time out
|
|
11
|
-
// waiting for internal tool execution to finish
|
|
10
|
+
// Keepalive every 15s so the client doesn't time out waiting for tool execution.
|
|
12
11
|
this.keepaliveInterval = setInterval(() => {
|
|
13
12
|
const r = this.getReply();
|
|
14
13
|
if (r)
|
|
@@ -59,12 +58,13 @@ class BridgeResponsesProtocol extends ResponsesProtocol {
|
|
|
59
58
|
// within the same response, so we deliberately leave seq alone.
|
|
60
59
|
}
|
|
61
60
|
}
|
|
62
|
-
export
|
|
63
|
-
const
|
|
61
|
+
export function handleResponsesStreaming(opts) {
|
|
62
|
+
const { state, session, prompt, model, logger, hasBridge, responseId, stats } = opts;
|
|
63
|
+
const reply = state.replies.currentReply;
|
|
64
64
|
if (!reply)
|
|
65
65
|
throw new Error("No reply set on bridge state");
|
|
66
66
|
const { seq, createdAt } = startResponseStream(reply, responseId, model);
|
|
67
|
-
const protocol = new BridgeResponsesProtocol(responseId, model, seq, createdAt, () => state.currentReply);
|
|
68
|
-
return runSessionStreaming(state, session, prompt, logger, hasBridge, protocol, reply, stats);
|
|
67
|
+
const protocol = new BridgeResponsesProtocol(responseId, model, seq, createdAt, () => state.replies.currentReply);
|
|
68
|
+
return runSessionStreaming({ state, session, prompt, logger, hasBridge, protocol, initialReply: reply, stats });
|
|
69
69
|
}
|
|
70
70
|
//# sourceMappingURL=streaming.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/providers/codex/streaming.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,IAAI,SAAS,EACzB,cAAc,EACd,KAAK,EACL,OAAO,EACP,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,
|
|
1
|
+
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/providers/codex/streaming.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,IAAI,SAAS,EACzB,cAAc,EACd,KAAK,EACL,OAAO,EACP,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,MAAM,uBAAwB,SAAQ,iBAAiB;IACpC,iBAAiB,CAAiC;IAClD,QAAQ,CAA4B;IAErD,YACE,UAAkB,EAClB,KAAa,EACb,GAAe,EACf,SAAiB,EACjB,QAAmC;QAEnC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,iFAAiF;QACjF,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;YACxC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC;gBAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC,EAAE,MAAM,CAAC,CAAC;IACb,CAAC;IAEO,qBAAqB,CAC3B,CAAe,EACf,YAAmC;QAEnC,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC;YAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,QAAQ,GAAG,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAE5E,MAAM,MAAM,GAA2B;gBACrC,IAAI,EAAE,eAAe;gBACrB,EAAE,EAAE,MAAM;gBACV,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,SAAS,EAAE,QAAQ;gBACnB,MAAM,EAAE,aAAa;aACtB,CAAC;YAEF,SAAS,CAAC,CAAC,EAAE,4BAA4B,EAAE;gBACzC,YAAY,EAAE,IAAI,CAAC,WAAW;gBAC9B,IAAI,EAAE,MAAM;aACb,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAEtB,MAAM,QAAQ,GAA2B,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YAC5E,SAAS,CAAC,CAAC,EAAE,2BAA2B,EAAE;gBACxC,YAAY,EAAE,IAAI,CAAC,WAAW;gBAC9B,IAAI,EAAE,QAAQ;aACf,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,CAAe,EAAE,KAA4B;QAC9D,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC5C,CAAC;IAEQ,QAAQ;QACf,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,kEAAkE;QAClE,gEAAgE;IAClE,CAAC;CACF;AAaD,MAAM,UAAU,wBAAwB,CAAC,IAA+B;IACtE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACrF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC5D,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IAEzE,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAClH,OAAO,mBAAmB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAClH,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export function resolveResponsesToolResults(outputs, state, logger) {
|
|
2
2
|
for (const item of outputs) {
|
|
3
3
|
logger.debug(`Resolving tool result for ${item.call_id}`);
|
|
4
|
-
if (!state.resolveToolCall(item.call_id, item.output)) {
|
|
4
|
+
if (!state.toolRouter.resolveToolCall(item.call_id, item.output)) {
|
|
5
5
|
logger.warn(`No pending MCP request for call_id ${item.call_id}`);
|
|
6
6
|
}
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-results.js","sourceRoot":"","sources":["../../../src/providers/codex/tool-results.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,2BAA2B,CACzC,OAAkC,EAClC,KAAsB,EACtB,MAAc;IAEd,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,6BAA6B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-results.js","sourceRoot":"","sources":["../../../src/providers/codex/tool-results.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,2BAA2B,CACzC,OAAkC,EAClC,KAAsB,EACtB,MAAc;IAEd,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,6BAA6B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,sCAAsC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,25 +1,6 @@
|
|
|
1
1
|
import type { Provider } from "./types.js";
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
export type {
|
|
5
|
-
export declare const providers:
|
|
6
|
-
openai: {
|
|
7
|
-
name: string;
|
|
8
|
-
routes: string[];
|
|
9
|
-
register(app: import("fastify").FastifyInstance<import("fastify").RawServerDefault, import("node:http").IncomingMessage, import("node:http").ServerResponse<import("node:http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>, ctx: AppContext): void;
|
|
10
|
-
};
|
|
11
|
-
claude: {
|
|
12
|
-
name: string;
|
|
13
|
-
routes: string[];
|
|
14
|
-
register(app: import("fastify").FastifyInstance<import("fastify").RawServerDefault, import("node:http").IncomingMessage, import("node:http").ServerResponse<import("node:http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>, ctx: AppContext): void;
|
|
15
|
-
};
|
|
16
|
-
codex: {
|
|
17
|
-
name: string;
|
|
18
|
-
routes: string[];
|
|
19
|
-
register(app: import("fastify").FastifyInstance<import("fastify").RawServerDefault, import("node:http").IncomingMessage, import("node:http").ServerResponse<import("node:http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>, ctx: AppContext): void;
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
export type ProxyName = keyof typeof providers;
|
|
23
|
-
export type ProxyMode = ProxyName | "auto";
|
|
24
|
-
export declare const PROVIDER_NAMES: ProxyName[];
|
|
2
|
+
import type { ServerConfig } from "../config-schema.js";
|
|
3
|
+
import type { ProxyName } from "./names.js";
|
|
4
|
+
export type { ProxyName, ProxyMode } from "./names.js";
|
|
5
|
+
export declare const providers: Record<ProxyName, Provider>;
|
|
25
6
|
export declare function createAutoProvider(configs: Record<ProxyName, ServerConfig>): Provider;
|
package/dist/providers/index.js
CHANGED
|
@@ -2,12 +2,12 @@ import { openaiProvider } from "./openai/provider.js";
|
|
|
2
2
|
import { claudeProvider } from "./claude/provider.js";
|
|
3
3
|
import { codexProvider } from "./codex/provider.js";
|
|
4
4
|
import { registerToolBridge } from "../tool-bridge/index.js";
|
|
5
|
+
import { PROVIDER_NAMES } from "./names.js";
|
|
5
6
|
export const providers = {
|
|
6
7
|
openai: openaiProvider,
|
|
7
8
|
claude: claudeProvider,
|
|
8
9
|
codex: codexProvider,
|
|
9
10
|
};
|
|
10
|
-
export const PROVIDER_NAMES = Object.keys(providers);
|
|
11
11
|
export function createAutoProvider(configs) {
|
|
12
12
|
return {
|
|
13
13
|
name: "Auto",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAK5C,MAAM,CAAC,MAAM,SAAS,GAAgC;IACpD,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE,aAAa;CACrB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAChC,OAAwC;IAExC,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACzD,QAAQ,CAAC,GAAG,EAAE,OAAO;YACnB,qDAAqD;YACrD,wDAAwD;YACxD,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAE9D,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,GAAG,GAAe;oBACtB,GAAG,OAAO;oBACV,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;oBACrB,iBAAiB,EAAE,aAAa;iBACjC,CAAC;gBACF,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;oBACnC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBAC/B,IAAI,EAAE,CAAC;gBACT,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/providers/names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAKrE,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,QAAQ;CAChB,CAAC"}
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
import { createModelsHandler, createCompletionsHandler } from "copilot-sdk-proxy";
|
|
2
|
-
import {
|
|
2
|
+
import { resolveToolBridgeManager } from "../../tool-bridge/index.js";
|
|
3
3
|
import { filterExcludedFiles } from "../shared/prompt-utils.js";
|
|
4
|
+
import { addUserAgentGuard } from "../shared/user-agent-guard.js";
|
|
5
|
+
import { UA_PREFIXES } from "../names.js";
|
|
4
6
|
export const openaiProvider = {
|
|
5
7
|
name: "OpenAI",
|
|
6
8
|
routes: ["GET /v1/models", "POST /v1/chat/completions"],
|
|
7
9
|
register(app, ctx) {
|
|
8
|
-
app
|
|
9
|
-
|
|
10
|
-
if (!ua.startsWith("Xcode/")) {
|
|
11
|
-
ctx.logger.warn(`Rejected request from unexpected user-agent: ${ua}`);
|
|
12
|
-
void reply
|
|
13
|
-
.code(403)
|
|
14
|
-
.type("application/json")
|
|
15
|
-
.send('{"error":"Forbidden"}\n');
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
done();
|
|
19
|
-
});
|
|
20
|
-
const manager = new ConversationManager(ctx.logger);
|
|
10
|
+
addUserAgentGuard(app, UA_PREFIXES.openai, ctx.logger);
|
|
11
|
+
const manager = resolveToolBridgeManager(app, ctx.toolBridgeManager, ctx.logger);
|
|
21
12
|
app.get("/v1/models", createModelsHandler(ctx));
|
|
22
13
|
app.post("/v1/chat/completions", createCompletionsHandler(ctx, manager, {
|
|
23
14
|
transformPrompt: (prompt) => filterExcludedFiles(prompt, ctx.config.excludedFilePatterns),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/openai/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/openai/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;IAEvD,QAAQ,CAAC,GAAG,EAAE,GAAG;QACf,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACjF,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,GAAG,EAAE,OAAO,EAAE;YACtE,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC;SAC1F,CAAC,CAAC,CAAC;IACN,CAAC;CACiB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FastifyReply } from "fastify";
|
|
2
|
+
import type { Logger } from "copilot-sdk-proxy";
|
|
3
|
+
import type { Conversation } from "../../conversation-manager.js";
|
|
4
|
+
interface ContinuationCallbacks {
|
|
5
|
+
startStream: () => void;
|
|
6
|
+
resolveResults: () => void;
|
|
7
|
+
countMessages: () => number;
|
|
8
|
+
}
|
|
9
|
+
export declare function handleContinuation(existingConv: Conversation, reply: FastifyReply, logger: Logger, callbacks: ContinuationCallbacks): Promise<boolean>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export async function handleContinuation(existingConv, reply, logger, callbacks) {
|
|
2
|
+
const { state } = existingConv;
|
|
3
|
+
logger.info(`Continuation for conversation ${existingConv.id} (hasPending=${String(state.toolRouter.hasPending)}, sessionActive=${String(state.session.sessionActive)})`);
|
|
4
|
+
state.replies.setReply(reply);
|
|
5
|
+
callbacks.startStream();
|
|
6
|
+
reply.raw.on("close", () => {
|
|
7
|
+
if (state.replies.currentReply === reply) {
|
|
8
|
+
logger.info("Client disconnected during continuation");
|
|
9
|
+
state.session.cleanup();
|
|
10
|
+
state.replies.notifyStreamingDone();
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
callbacks.resolveResults();
|
|
14
|
+
await state.replies.waitForStreamingDone();
|
|
15
|
+
existingConv.sentMessageCount = callbacks.countMessages();
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=continuation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuation.js","sourceRoot":"","sources":["../../../src/providers/shared/continuation.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAA0B,EAC1B,KAAmB,EACnB,MAAc,EACd,SAAgC;IAEhC,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC;IAE/B,MAAM,CAAC,IAAI,CAAC,iCAAiC,YAAY,CAAC,EAAE,gBAAgB,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,mBAAmB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1K,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,SAAS,CAAC,WAAW,EAAE,CAAC;IAExB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACvD,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,cAAc,EAAE,CAAC;IAC3B,MAAM,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAC3C,YAAY,CAAC,gBAAgB,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,12 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Strips fenced code blocks whose filename header matches any of the given
|
|
3
|
-
* patterns (case-insensitive). A fenced block looks like:
|
|
4
|
-
*
|
|
5
|
-
* ```swift:MockHelper.swift
|
|
6
|
-
* class MockHelper {}
|
|
7
|
-
* ```
|
|
8
|
-
*
|
|
9
|
-
* If the filename portion ("MockHelper.swift") contains any pattern, the entire
|
|
10
|
-
* block (including the surrounding newlines) is removed.
|
|
11
|
-
*/
|
|
12
1
|
export declare function filterExcludedFiles(s: string, patterns: string[]): string;
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Strips fenced code blocks whose filename header matches any of the given
|
|
3
|
-
* patterns (case-insensitive). A fenced block looks like:
|
|
4
|
-
*
|
|
5
|
-
* ```swift:MockHelper.swift
|
|
6
|
-
* class MockHelper {}
|
|
7
|
-
* ```
|
|
8
|
-
*
|
|
9
|
-
* If the filename portion ("MockHelper.swift") contains any pattern, the entire
|
|
10
|
-
* block (including the surrounding newlines) is removed.
|
|
11
|
-
*/
|
|
12
1
|
export function filterExcludedFiles(s, patterns) {
|
|
13
2
|
if (patterns.length === 0)
|
|
14
3
|
return s;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-utils.js","sourceRoot":"","sources":["../../../src/providers/shared/prompt-utils.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"prompt-utils.js","sourceRoot":"","sources":["../../../src/providers/shared/prompt-utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,CAAS,EAAE,QAAkB;IAC/D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAG,mCAAmC,CAAC;IAEpD,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAClC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAE5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC3D,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { SessionConfig, Logger } from "copilot-sdk-proxy";
|
|
2
|
-
import type { ServerConfig } from "../../config.js";
|
|
3
|
-
|
|
1
|
+
import type { SessionConfig, Logger, SessionConfigOptions as BaseSessionConfigOptions } from "copilot-sdk-proxy";
|
|
2
|
+
import type { ServerConfig } from "../../config-schema.js";
|
|
3
|
+
interface SessionConfigOptions {
|
|
4
4
|
model: string;
|
|
5
5
|
systemMessage?: string | undefined;
|
|
6
6
|
logger: Logger;
|
|
@@ -11,4 +11,13 @@ export interface SessionConfigOptions {
|
|
|
11
11
|
port: number;
|
|
12
12
|
conversationId: string;
|
|
13
13
|
}
|
|
14
|
+
interface ProviderContext {
|
|
15
|
+
conversationId: string;
|
|
16
|
+
tools: unknown[] | undefined;
|
|
17
|
+
config: ServerConfig;
|
|
18
|
+
logger: Logger;
|
|
19
|
+
port: number;
|
|
20
|
+
}
|
|
21
|
+
export declare function createProviderSessionConfig(baseOptions: BaseSessionConfigOptions, ctx: ProviderContext): SessionConfig;
|
|
14
22
|
export declare function createSessionConfig({ model, systemMessage, logger, config, supportsReasoningEffort, cwd, hasToolBridge, port, conversationId, }: SessionConfigOptions): SessionConfig;
|
|
23
|
+
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createSessionConfig as createBaseSessionConfig } from "copilot-sdk-proxy";
|
|
2
|
-
import { BRIDGE_SERVER_NAME, BRIDGE_TOOL_PREFIX } from "../../
|
|
2
|
+
import { BRIDGE_SERVER_NAME, BRIDGE_TOOL_PREFIX } from "../../bridge-constants.js";
|
|
3
3
|
const SDK_BUILT_IN_TOOLS = [
|
|
4
4
|
// shell
|
|
5
5
|
"bash", "write_bash", "read_bash", "stop_bash", "list_bash",
|
|
@@ -14,6 +14,26 @@ const SDK_BUILT_IN_TOOLS = [
|
|
|
14
14
|
// misc
|
|
15
15
|
"skill", "web_fetch", "fetch_copilot_cli_documentation",
|
|
16
16
|
];
|
|
17
|
+
function resolveToolBridge({ tools, config, logger }) {
|
|
18
|
+
if (tools) {
|
|
19
|
+
logger.debug(`Tools in request: ${String(tools.length)}`);
|
|
20
|
+
}
|
|
21
|
+
const hasBridge = !!tools?.length && config.toolBridge;
|
|
22
|
+
if (hasBridge) {
|
|
23
|
+
logger.info("Tool bridge active (in-process MCP)");
|
|
24
|
+
}
|
|
25
|
+
return hasBridge;
|
|
26
|
+
}
|
|
27
|
+
export function createProviderSessionConfig(baseOptions, ctx) {
|
|
28
|
+
const hasBridge = resolveToolBridge({ tools: ctx.tools, config: ctx.config, logger: ctx.logger });
|
|
29
|
+
return createSessionConfig({
|
|
30
|
+
...baseOptions,
|
|
31
|
+
config: ctx.config,
|
|
32
|
+
hasToolBridge: hasBridge,
|
|
33
|
+
port: ctx.port,
|
|
34
|
+
conversationId: ctx.conversationId,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
17
37
|
export function createSessionConfig({ model, systemMessage, logger, config, supportsReasoningEffort, cwd, hasToolBridge, port, conversationId, }) {
|
|
18
38
|
const base = createBaseSessionConfig({
|
|
19
39
|
model,
|
|
@@ -25,11 +45,9 @@ export function createSessionConfig({ model, systemMessage, logger, config, supp
|
|
|
25
45
|
});
|
|
26
46
|
if (!hasToolBridge)
|
|
27
47
|
return base;
|
|
28
|
-
// Layer bridge-specific config on top of what core already provides.
|
|
29
48
|
const originalOnPreToolUse = base.hooks?.onPreToolUse;
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
// destructure it out.
|
|
49
|
+
// Bridge controls tool visibility, so remove availableTools.
|
|
50
|
+
// Can't assign undefined with exactOptionalPropertyTypes, so destructure.
|
|
33
51
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
34
52
|
const { availableTools, ...baseWithoutAvailableTools } = base;
|
|
35
53
|
return {
|
|
@@ -42,8 +60,7 @@ export function createSessionConfig({ model, systemMessage, logger, config, supp
|
|
|
42
60
|
tools: ["*"],
|
|
43
61
|
},
|
|
44
62
|
},
|
|
45
|
-
// Hide SDK built-
|
|
46
|
-
// which get forwarded to Xcode for execution.
|
|
63
|
+
// Hide SDK built-ins so the model uses bridge tools (forwarded to Xcode).
|
|
47
64
|
excludedTools: SDK_BUILT_IN_TOOLS.filter((t) => !config.allowedCliTools.includes("*") && !config.allowedCliTools.includes(t)),
|
|
48
65
|
hooks: {
|
|
49
66
|
...base.hooks,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-config.js","sourceRoot":"","sources":["../../../src/providers/shared/session-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,IAAI,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEnF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"session-config.js","sourceRoot":"","sources":["../../../src/providers/shared/session-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { FastifyReply } from "fastify";
|
|
2
2
|
import type { CopilotSession, Logger, Stats } from "copilot-sdk-proxy";
|
|
3
3
|
import type { ToolBridgeState } from "../../tool-bridge/state.js";
|
|
4
|
-
export declare function stripBridgePrefix(name: string): string;
|
|
5
4
|
export interface StrippedToolRequest {
|
|
6
5
|
toolCallId: string;
|
|
7
6
|
name: string;
|
|
@@ -15,4 +14,15 @@ export interface BridgeStreamProtocol {
|
|
|
15
14
|
teardown(): void;
|
|
16
15
|
reset(): void;
|
|
17
16
|
}
|
|
18
|
-
|
|
17
|
+
interface SessionStreamingOptions {
|
|
18
|
+
state: ToolBridgeState;
|
|
19
|
+
session: CopilotSession;
|
|
20
|
+
prompt: string;
|
|
21
|
+
logger: Logger;
|
|
22
|
+
hasBridge: boolean;
|
|
23
|
+
protocol: BridgeStreamProtocol;
|
|
24
|
+
initialReply: FastifyReply;
|
|
25
|
+
stats: Stats;
|
|
26
|
+
}
|
|
27
|
+
export declare function runSessionStreaming(opts: SessionStreamingOptions): Promise<void>;
|
|
28
|
+
export {};
|