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.
Files changed (110) hide show
  1. package/dist/banner.d.ts +4 -4
  2. package/dist/banner.js +45 -12
  3. package/dist/banner.js.map +1 -1
  4. package/dist/bridge-constants.d.ts +2 -0
  5. package/dist/bridge-constants.js +3 -0
  6. package/dist/bridge-constants.js.map +1 -0
  7. package/dist/cli-validators.d.ts +0 -1
  8. package/dist/cli-validators.js +2 -2
  9. package/dist/cli-validators.js.map +1 -1
  10. package/dist/config-schema.d.ts +107 -0
  11. package/dist/config-schema.js +53 -0
  12. package/dist/config-schema.js.map +1 -0
  13. package/dist/config.d.ts +3 -28
  14. package/dist/config.js +23 -62
  15. package/dist/config.js.map +1 -1
  16. package/dist/context.d.ts +1 -1
  17. package/dist/conversation-manager.d.ts +9 -4
  18. package/dist/conversation-manager.js +44 -61
  19. package/dist/conversation-manager.js.map +1 -1
  20. package/dist/index.js +9 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/launchd/agent.d.ts +5 -9
  23. package/dist/launchd/agent.js +13 -12
  24. package/dist/launchd/agent.js.map +1 -1
  25. package/dist/launchd/index.d.ts +3 -3
  26. package/dist/launchd/index.js +1 -1
  27. package/dist/launchd/index.js.map +1 -1
  28. package/dist/launchd/socket.d.ts +2 -1
  29. package/dist/providers/claude/provider.js +40 -64
  30. package/dist/providers/claude/provider.js.map +1 -1
  31. package/dist/providers/claude/streaming.d.ts +10 -1
  32. package/dist/providers/claude/streaming.js +7 -3
  33. package/dist/providers/claude/streaming.js.map +1 -1
  34. package/dist/providers/claude/tool-results.js +1 -1
  35. package/dist/providers/claude/tool-results.js.map +1 -1
  36. package/dist/providers/codex/provider.js +28 -60
  37. package/dist/providers/codex/provider.js.map +1 -1
  38. package/dist/providers/codex/streaming.d.ts +12 -3
  39. package/dist/providers/codex/streaming.js +6 -6
  40. package/dist/providers/codex/streaming.js.map +1 -1
  41. package/dist/providers/codex/tool-results.js +1 -1
  42. package/dist/providers/codex/tool-results.js.map +1 -1
  43. package/dist/providers/index.d.ts +4 -23
  44. package/dist/providers/index.js +1 -1
  45. package/dist/providers/index.js.map +1 -1
  46. package/dist/providers/names.d.ts +4 -0
  47. package/dist/providers/names.js +7 -0
  48. package/dist/providers/names.js.map +1 -0
  49. package/dist/providers/openai/provider.js +5 -14
  50. package/dist/providers/openai/provider.js.map +1 -1
  51. package/dist/providers/shared/continuation.d.ts +10 -0
  52. package/dist/providers/shared/continuation.js +18 -0
  53. package/dist/providers/shared/continuation.js.map +1 -0
  54. package/dist/providers/shared/prompt-utils.d.ts +0 -11
  55. package/dist/providers/shared/prompt-utils.js +0 -11
  56. package/dist/providers/shared/prompt-utils.js.map +1 -1
  57. package/dist/providers/shared/session-config.d.ts +12 -3
  58. package/dist/providers/shared/session-config.js +24 -7
  59. package/dist/providers/shared/session-config.js.map +1 -1
  60. package/dist/providers/shared/streaming-core.d.ts +12 -2
  61. package/dist/providers/shared/streaming-core.js +183 -161
  62. package/dist/providers/shared/streaming-core.js.map +1 -1
  63. package/dist/providers/shared/streaming-orchestrator.d.ts +11 -0
  64. package/dist/providers/shared/streaming-orchestrator.js +11 -0
  65. package/dist/providers/shared/streaming-orchestrator.js.map +1 -0
  66. package/dist/providers/shared/user-agent-guard.d.ts +3 -0
  67. package/dist/providers/shared/user-agent-guard.js +17 -0
  68. package/dist/providers/shared/user-agent-guard.js.map +1 -0
  69. package/dist/settings-patcher/claude.d.ts +1 -2
  70. package/dist/settings-patcher/claude.js +35 -13
  71. package/dist/settings-patcher/claude.js.map +1 -1
  72. package/dist/settings-patcher/codex.d.ts +1 -20
  73. package/dist/settings-patcher/codex.js +58 -31
  74. package/dist/settings-patcher/codex.js.map +1 -1
  75. package/dist/settings-patcher/index.d.ts +2 -15
  76. package/dist/settings-patcher/index.js +15 -36
  77. package/dist/settings-patcher/index.js.map +1 -1
  78. package/dist/settings-patcher/types.d.ts +21 -0
  79. package/dist/settings-patcher/url-utils.d.ts +1 -0
  80. package/dist/settings-patcher/url-utils.js +6 -0
  81. package/dist/settings-patcher/url-utils.js.map +1 -0
  82. package/dist/shutdown.d.ts +16 -0
  83. package/dist/shutdown.js +53 -0
  84. package/dist/shutdown.js.map +1 -0
  85. package/dist/startup.js +65 -139
  86. package/dist/startup.js.map +1 -1
  87. package/dist/tool-bridge/constants.d.ts +4 -2
  88. package/dist/tool-bridge/constants.js +4 -2
  89. package/dist/tool-bridge/constants.js.map +1 -1
  90. package/dist/tool-bridge/index.d.ts +2 -2
  91. package/dist/tool-bridge/index.js +6 -5
  92. package/dist/tool-bridge/index.js.map +1 -1
  93. package/dist/tool-bridge/routes.d.ts +2 -2
  94. package/dist/tool-bridge/routes.js +24 -22
  95. package/dist/tool-bridge/routes.js.map +1 -1
  96. package/dist/tool-bridge/session-lifecycle.js +6 -3
  97. package/dist/tool-bridge/session-lifecycle.js.map +1 -1
  98. package/dist/tool-bridge/state.d.ts +4 -25
  99. package/dist/tool-bridge/state.js +6 -65
  100. package/dist/tool-bridge/state.js.map +1 -1
  101. package/dist/tool-bridge/tool-router.d.ts +1 -0
  102. package/dist/tool-bridge/tool-router.js +26 -19
  103. package/dist/tool-bridge/tool-router.js.map +1 -1
  104. package/dist/utils/child-process.d.ts +2 -0
  105. package/dist/utils/child-process.js +8 -0
  106. package/dist/utils/child-process.js.map +1 -0
  107. package/dist/utils/type-guards.d.ts +2 -0
  108. package/dist/utils/type-guards.js +7 -0
  109. package/dist/utils/type-guards.js.map +1 -0
  110. 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 async function handleAnthropicStreaming(state, session, prompt, model, logger, hasBridge, stats) {
43
- const reply = state.currentReply;
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;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAsB,EACtB,OAAuB,EACvB,MAAc,EACd,KAAa,EACb,MAAc,EACd,SAAkB,EAClB,KAAY;IAEZ,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;IACjC,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,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAChG,CAAC"}
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;gBAC1D,MAAM,CAAC,IAAI,CAAC,0CAA0C,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;AACH,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 { registerToolBridge } from "../../tool-bridge/index.js";
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 { createSessionConfig } from "../shared/session-config.js";
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.addHook("onRequest", (request, reply, done) => {
12
- if (request.url.startsWith("/mcp/")) {
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
- const state = existingConv.state;
36
- logger.info(`Continuation for conversation ${existingConv.id} (hasPending=${String(state.hasPending)}, sessionActive=${String(state.sessionActive)})`);
37
- state.setReply(reply);
38
- startResponseStream(reply, genId("resp"), req.model);
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, req) => {
66
- const tools = req.tools ? filterFunctionTools(req.tools) : undefined;
67
- const hasBridge = !!tools?.length && config.toolBridge;
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 { state } = conversation;
85
- const tools = req.tools ? filterFunctionTools(req.tools) : undefined;
54
+ const conv = asConversation(conversation);
55
+ const tools = conv.state.filteredTools;
86
56
  const hasBridge = !!tools?.length && config.toolBridge;
87
- state.setReply(reply);
88
- const inputLength = Array.isArray(req.input) ? req.input.length : 1;
89
- logger.info(`Streaming response for conversation ${conversation.id}`);
90
- await handleResponsesStreaming(state, session, prompt, model, logger, hasBridge, responseId, stats);
91
- conversation.sentMessageCount = inputLength;
92
- if (conversation.isPrimary && state.hadError) {
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":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/codex/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,GACN,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,CAAC,oBAAoB,CAAC;IAE9B,QAAQ,CAAC,GAAG,EAAE,GAAG;QACf,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAEtD,MAAM,OAAO,GAAG,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACjF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QAE5C,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE;YAC7D,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;gBAClC,MAAM,WAAW,GAAG,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC1D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAE3C,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,CAChD,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAClC,CAAC;gBACF,IAAI,CAAC,YAAY;oBAAE,OAAO,KAAK,CAAC;gBAEhC,OAAO,kBAAkB,CACvB,cAAc,CAAC,YAAY,CAAC,EAC5B,KAAK,EACL,MAAM,EACN;oBACE,WAAW,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC;oBACvE,cAAc,EAAE,GAAG,EAAE,GAAG,2BAA2B,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC/F,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;iBACrE,CACF,CAAC;YACJ,CAAC;YAED,mBAAmB,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE;gBACzC,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;gBAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrE,IAAI,KAAK;oBAAE,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAEzC,mEAAmE;gBACnE,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;oBAClB,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACpC,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,YAAY,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;qBACjC,CAAC,CAAC,CAAC;oBACJ,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;YAED,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE,CAC1B,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC;YAE1D,mBAAmB,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE;gBACjD,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;gBAC/C,OAAO,2BAA2B,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACzI,CAAC;YAED,eAAe,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE;gBAC1F,MAAM,IAAI,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;gBACvC,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC;gBACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAEnC,MAAM,oBAAoB,CAAC;oBACzB,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO;oBACnC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC7D,YAAY,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;iBAClI,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;CACiB,CAAC"}
@@ -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 { type SeqCounter, startResponseStream };
6
- export declare function handleResponsesStreaming(state: ToolBridgeState, session: CopilotSession, prompt: string, model: string, logger: Logger, hasBridge: boolean, responseId: string, stats: Stats): Promise<void>;
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 while
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 async function handleResponsesStreaming(state, session, prompt, model, logger, hasBridge, responseId, stats) {
63
- const reply = state.currentReply;
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":"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"}
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/providers/codex/streaming.ts"],"names":[],"mappings":"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"}
@@ -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;YACtD,MAAM,CAAC,IAAI,CAAC,sCAAsC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;AACH,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 { AppContext } from "../context.js";
3
- import type { ServerConfig } from "../config.js";
4
- export type { Provider };
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;
@@ -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;AAI7D,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE,aAAa;CACc,CAAC;AAKrC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAgB,CAAC;AAEpE,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"}
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,4 @@
1
+ export declare const PROVIDER_NAMES: readonly ["openai", "claude", "codex"];
2
+ export type ProxyName = (typeof PROVIDER_NAMES)[number];
3
+ export type ProxyMode = ProxyName | "auto";
4
+ export declare const UA_PREFIXES: Record<ProxyName, string>;
@@ -0,0 +1,7 @@
1
+ export const PROVIDER_NAMES = ["openai", "claude", "codex"];
2
+ export const UA_PREFIXES = {
3
+ openai: "Xcode/",
4
+ claude: "claude-cli/",
5
+ codex: "Xcode/",
6
+ };
7
+ //# sourceMappingURL=names.js.map
@@ -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 { ConversationManager } from "../../conversation-manager.js";
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.addHook("onRequest", (request, reply, done) => {
9
- const ua = request.headers["user-agent"] ?? "";
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;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;IAEvD,QAAQ,CAAC,GAAG,EAAE,GAAG;QACf,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAChD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,gDAAgD,EAAE,EAAE,CACrD,CAAC;gBACF,KAAK,KAAK;qBACP,IAAI,CAAC,GAAG,CAAC;qBACT,IAAI,CAAC,kBAAkB,CAAC;qBACxB,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpD,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"}
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;;;;;;;;;;GAUG;AACH,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
+ {"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
- export interface SessionConfigOptions {
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 "../../tool-bridge/index.js";
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
- // Strip availableTools so the bridge controls tool visibility instead.
31
- // With exactOptionalPropertyTypes we can't assign undefined, so we
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-in tools so the model uses bridge tools instead,
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,4BAA4B,CAAC;AAEpF,MAAM,kBAAkB,GAAa;IACnC,QAAQ;IACR,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW;IAC3D,WAAW;IACX,MAAM,EAAE,aAAa;IACrB,SAAS;IACT,IAAI,EAAE,MAAM;IACZ,2BAA2B;IAC3B,MAAM,EAAE,aAAa,EAAE,eAAe;IACtC,cAAc;IACd,UAAU;IACV,OAAO;IACP,OAAO,EAAE,WAAW,EAAE,iCAAiC;CACxD,CAAC;AAcF,MAAM,UAAU,mBAAmB,CAAC,EAClC,KAAK,EACL,aAAa,EACb,MAAM,EACN,MAAM,EACN,uBAAuB,EACvB,GAAG,EACH,aAAa,EACb,IAAI,EACJ,cAAc,GACO;IACrB,MAAM,IAAI,GAAG,uBAAuB,CAAC;QACnC,KAAK;QACL,aAAa;QACb,MAAM;QACN,MAAM;QACN,uBAAuB;QACvB,GAAG;KACJ,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,qEAAqE;IACrE,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC;IAEtD,uEAAuE;IACvE,mEAAmE;IACnE,sBAAsB;IACtB,6DAA6D;IAC7D,MAAM,EAAE,cAAc,EAAE,GAAG,yBAAyB,EAAE,GAAG,IAAI,CAAC;IAE9D,OAAO;QACL,GAAG,yBAAyB;QAC5B,UAAU,EAAE;YACV,GAAG,IAAI,CAAC,UAAU;YAClB,CAAC,kBAAkB,CAAC,EAAE;gBACpB,IAAI,EAAE,MAAe;gBACrB,GAAG,EAAE,oBAAoB,MAAM,CAAC,IAAI,CAAC,QAAQ,cAAc,EAAE;gBAC7D,KAAK,EAAE,CAAC,GAAG,CAAC;aACb;SACF;QACD,kEAAkE;QAClE,8CAA8C;QAC9C,aAAa,EAAE,kBAAkB,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpF;QACD,KAAK,EAAE;YACL,GAAG,IAAI,CAAC,KAAK;YACb,YAAY,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;gBAClC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAClD,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,QAAQ,qBAAqB,CAAC,CAAC;oBAC3D,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,kBAAkB,EAAE,OAAgB,EAAE,CAAC,CAAC;gBACnE,CAAC;gBACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC1B,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,kBAAkB,EAAE,OAAgB,EAAE,CAAC,CAAC;gBACnE,CAAC;gBACD,OAAO,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACjD,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
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
- export declare function runSessionStreaming(state: ToolBridgeState, session: CopilotSession, prompt: string, logger: Logger, hasBridge: boolean, protocol: BridgeStreamProtocol, initialReply: FastifyReply, stats: Stats): Promise<void>;
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 {};