@a5c-ai/agent-mux-adapters 0.4.0 → 0.4.2

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 (158) hide show
  1. package/README.md +3 -1
  2. package/dist/agent-mux-remote-adapter.d.ts.map +1 -1
  3. package/dist/agent-mux-remote-adapter.js +4 -0
  4. package/dist/agent-mux-remote-adapter.js.map +1 -1
  5. package/dist/amp-adapter.d.ts +2 -1
  6. package/dist/amp-adapter.d.ts.map +1 -1
  7. package/dist/amp-adapter.js +93 -17
  8. package/dist/amp-adapter.js.map +1 -1
  9. package/dist/babysitter-adapter.d.ts +29 -0
  10. package/dist/babysitter-adapter.d.ts.map +1 -0
  11. package/dist/babysitter-adapter.js +338 -0
  12. package/dist/babysitter-adapter.js.map +1 -0
  13. package/dist/base-adapter.d.ts +7 -0
  14. package/dist/base-adapter.d.ts.map +1 -1
  15. package/dist/base-adapter.js +113 -1
  16. package/dist/base-adapter.js.map +1 -1
  17. package/dist/claude-adapter.d.ts +14 -3
  18. package/dist/claude-adapter.d.ts.map +1 -1
  19. package/dist/claude-adapter.js +222 -25
  20. package/dist/claude-adapter.js.map +1 -1
  21. package/dist/claude-agent-sdk-adapter.d.ts +21 -34
  22. package/dist/claude-agent-sdk-adapter.d.ts.map +1 -1
  23. package/dist/claude-agent-sdk-adapter.js +629 -397
  24. package/dist/claude-agent-sdk-adapter.js.map +1 -1
  25. package/dist/claude-code/runtime-hooks/ephemeral-config.d.ts +12 -0
  26. package/dist/claude-code/runtime-hooks/ephemeral-config.d.ts.map +1 -0
  27. package/dist/claude-code/runtime-hooks/ephemeral-config.js +143 -0
  28. package/dist/claude-code/runtime-hooks/ephemeral-config.js.map +1 -0
  29. package/dist/claude-code/runtime-hooks/hook-socket-server.d.ts +10 -0
  30. package/dist/claude-code/runtime-hooks/hook-socket-server.d.ts.map +1 -0
  31. package/dist/claude-code/runtime-hooks/hook-socket-server.js +79 -0
  32. package/dist/claude-code/runtime-hooks/hook-socket-server.js.map +1 -0
  33. package/dist/claude-code/runtime-hooks/lifecycle.d.ts +3 -0
  34. package/dist/claude-code/runtime-hooks/lifecycle.d.ts.map +1 -0
  35. package/dist/claude-code/runtime-hooks/lifecycle.js +24 -0
  36. package/dist/claude-code/runtime-hooks/lifecycle.js.map +1 -0
  37. package/dist/claude-remote-control-adapter.d.ts +43 -0
  38. package/dist/claude-remote-control-adapter.d.ts.map +1 -0
  39. package/dist/claude-remote-control-adapter.js +505 -0
  40. package/dist/claude-remote-control-adapter.js.map +1 -0
  41. package/dist/codex-adapter.d.ts.map +1 -1
  42. package/dist/codex-adapter.js +64 -41
  43. package/dist/codex-adapter.js.map +1 -1
  44. package/dist/codex-sdk-adapter.d.ts.map +1 -1
  45. package/dist/codex-sdk-adapter.js +6 -2
  46. package/dist/codex-sdk-adapter.js.map +1 -1
  47. package/dist/codex-websocket-adapter.d.ts +11 -18
  48. package/dist/codex-websocket-adapter.d.ts.map +1 -1
  49. package/dist/codex-websocket-adapter.js +199 -90
  50. package/dist/codex-websocket-adapter.js.map +1 -1
  51. package/dist/codex-websocket-connection.d.ts +60 -40
  52. package/dist/codex-websocket-connection.d.ts.map +1 -1
  53. package/dist/codex-websocket-connection.js +692 -203
  54. package/dist/codex-websocket-connection.js.map +1 -1
  55. package/dist/copilot-adapter.d.ts.map +1 -1
  56. package/dist/copilot-adapter.js +4 -0
  57. package/dist/copilot-adapter.js.map +1 -1
  58. package/dist/cursor-adapter.d.ts +3 -1
  59. package/dist/cursor-adapter.d.ts.map +1 -1
  60. package/dist/cursor-adapter.js +5 -1
  61. package/dist/cursor-adapter.js.map +1 -1
  62. package/dist/droid-adapter.d.ts +4 -2
  63. package/dist/droid-adapter.d.ts.map +1 -1
  64. package/dist/droid-adapter.js +12 -11
  65. package/dist/droid-adapter.js.map +1 -1
  66. package/dist/gemini-adapter.d.ts +3 -1
  67. package/dist/gemini-adapter.d.ts.map +1 -1
  68. package/dist/gemini-adapter.js +5 -1
  69. package/dist/gemini-adapter.js.map +1 -1
  70. package/dist/hermes-adapter.d.ts.map +1 -1
  71. package/dist/hermes-adapter.js +4 -0
  72. package/dist/hermes-adapter.js.map +1 -1
  73. package/dist/index.d.ts +4 -1
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +3 -10
  76. package/dist/index.js.map +1 -1
  77. package/dist/mcp-plugins.d.ts +5 -3
  78. package/dist/mcp-plugins.d.ts.map +1 -1
  79. package/dist/mcp-plugins.js +58 -24
  80. package/dist/mcp-plugins.js.map +1 -1
  81. package/dist/omp-adapter.d.ts.map +1 -1
  82. package/dist/omp-adapter.js +4 -0
  83. package/dist/omp-adapter.js.map +1 -1
  84. package/dist/openclaw-adapter.d.ts +3 -1
  85. package/dist/openclaw-adapter.d.ts.map +1 -1
  86. package/dist/openclaw-adapter.js +5 -1
  87. package/dist/openclaw-adapter.js.map +1 -1
  88. package/dist/opencode-adapter.d.ts +3 -1
  89. package/dist/opencode-adapter.d.ts.map +1 -1
  90. package/dist/opencode-adapter.js +7 -3
  91. package/dist/opencode-adapter.js.map +1 -1
  92. package/dist/opencode-http-adapter.d.ts +3 -1
  93. package/dist/opencode-http-adapter.d.ts.map +1 -1
  94. package/dist/opencode-http-adapter.js +5 -1
  95. package/dist/opencode-http-adapter.js.map +1 -1
  96. package/dist/pi-adapter.d.ts.map +1 -1
  97. package/dist/pi-adapter.js +4 -0
  98. package/dist/pi-adapter.js.map +1 -1
  99. package/dist/pi-sdk-adapter.d.ts.map +1 -1
  100. package/dist/pi-sdk-adapter.js +4 -0
  101. package/dist/pi-sdk-adapter.js.map +1 -1
  102. package/dist/provider-translation.d.ts +10 -0
  103. package/dist/provider-translation.d.ts.map +1 -0
  104. package/dist/provider-translation.js +2 -0
  105. package/dist/provider-translation.js.map +1 -0
  106. package/dist/qwen-adapter.d.ts +3 -1
  107. package/dist/qwen-adapter.d.ts.map +1 -1
  108. package/dist/qwen-adapter.js +5 -1
  109. package/dist/qwen-adapter.js.map +1 -1
  110. package/dist/session-fs.d.ts +15 -5
  111. package/dist/session-fs.d.ts.map +1 -1
  112. package/dist/session-fs.js +249 -0
  113. package/dist/session-fs.js.map +1 -1
  114. package/dist/shared/runtime-hooks-virtual.d.ts +3 -0
  115. package/dist/shared/runtime-hooks-virtual.d.ts.map +1 -0
  116. package/dist/shared/runtime-hooks-virtual.js +13 -0
  117. package/dist/shared/runtime-hooks-virtual.js.map +1 -0
  118. package/dist/translate-for-harness.d.ts +6 -0
  119. package/dist/translate-for-harness.d.ts.map +1 -0
  120. package/dist/translate-for-harness.js +36 -0
  121. package/dist/translate-for-harness.js.map +1 -0
  122. package/dist/translations/claude-translation.d.ts +4 -0
  123. package/dist/translations/claude-translation.d.ts.map +1 -0
  124. package/dist/translations/claude-translation.js +50 -0
  125. package/dist/translations/claude-translation.js.map +1 -0
  126. package/dist/translations/codex-translation.d.ts +4 -0
  127. package/dist/translations/codex-translation.d.ts.map +1 -0
  128. package/dist/translations/codex-translation.js +32 -0
  129. package/dist/translations/codex-translation.js.map +1 -0
  130. package/dist/translations/gemini-translation.d.ts +4 -0
  131. package/dist/translations/gemini-translation.d.ts.map +1 -0
  132. package/dist/translations/gemini-translation.js +20 -0
  133. package/dist/translations/gemini-translation.js.map +1 -0
  134. package/dist/translations/generic-openai-translation.d.ts +4 -0
  135. package/dist/translations/generic-openai-translation.d.ts.map +1 -0
  136. package/dist/translations/generic-openai-translation.js +19 -0
  137. package/dist/translations/generic-openai-translation.js.map +1 -0
  138. package/dist/translations/opencode-translation.d.ts +4 -0
  139. package/dist/translations/opencode-translation.d.ts.map +1 -0
  140. package/dist/translations/opencode-translation.js +51 -0
  141. package/dist/translations/opencode-translation.js.map +1 -0
  142. package/package.json +4 -2
  143. package/dist/mocks/index.d.ts +0 -60
  144. package/dist/mocks/index.d.ts.map +0 -1
  145. package/dist/mocks/index.js +0 -203
  146. package/dist/mocks/index.js.map +0 -1
  147. package/dist/mocks/mock-types.d.ts +0 -260
  148. package/dist/mocks/mock-types.d.ts.map +0 -1
  149. package/dist/mocks/mock-types.js +0 -12
  150. package/dist/mocks/mock-types.js.map +0 -1
  151. package/dist/mocks/programmatic-mocks.d.ts +0 -50
  152. package/dist/mocks/programmatic-mocks.d.ts.map +0 -1
  153. package/dist/mocks/programmatic-mocks.js +0 -330
  154. package/dist/mocks/programmatic-mocks.js.map +0 -1
  155. package/dist/mocks/remote-mocks.d.ts +0 -52
  156. package/dist/mocks/remote-mocks.d.ts.map +0 -1
  157. package/dist/mocks/remote-mocks.js +0 -436
  158. package/dist/mocks/remote-mocks.js.map +0 -1
@@ -0,0 +1,13 @@
1
+ const NONBLOCKING = 'nonblocking';
2
+ export function createVirtualRuntimeHookCapabilities(overrides = {}) {
3
+ return {
4
+ preToolUse: NONBLOCKING,
5
+ postToolUse: NONBLOCKING,
6
+ sessionStart: NONBLOCKING,
7
+ sessionEnd: NONBLOCKING,
8
+ stop: NONBLOCKING,
9
+ userPromptSubmit: NONBLOCKING,
10
+ ...overrides,
11
+ };
12
+ }
13
+ //# sourceMappingURL=runtime-hooks-virtual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-hooks-virtual.js","sourceRoot":"","sources":["../../src/shared/runtime-hooks-virtual.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAoB,aAAa,CAAC;AAEnD,MAAM,UAAU,oCAAoC,CAClD,YAA8C,EAAE;IAEhD,OAAO;QACL,UAAU,EAAE,WAAW;QACvB,WAAW,EAAE,WAAW;QACxB,YAAY,EAAE,WAAW;QACzB,UAAU,EAAE,WAAW;QACvB,IAAI,EAAE,WAAW;QACjB,gBAAgB,EAAE,WAAW;QAC7B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { AgentName, ProviderConfig } from '@a5c-ai/agent-mux-core';
2
+ import type { HarnessProviderTranslation } from './provider-translation.js';
3
+ export declare function translateForHarness(agent: AgentName, config: ProviderConfig, adapter?: {
4
+ translateProvider?(config: Record<string, unknown>): any;
5
+ }): HarnessProviderTranslation;
6
+ //# sourceMappingURL=translate-for-harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translate-for-harness.d.ts","sourceRoot":"","sources":["../src/translate-for-harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAO5E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE;IAAE,iBAAiB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAA;CAAE,GAAG,0BAA0B,CA4BhL"}
@@ -0,0 +1,36 @@
1
+ import { getHarnessDefaultTransport } from '@a5c-ai/agent-mux-core';
2
+ import { translateForClaude } from './translations/claude-translation.js';
3
+ import { translateForCodex } from './translations/codex-translation.js';
4
+ import { translateForGemini } from './translations/gemini-translation.js';
5
+ import { translateForOpenCode } from './translations/opencode-translation.js';
6
+ import { translateForGenericOpenAI } from './translations/generic-openai-translation.js';
7
+ export function translateForHarness(agent, config, adapter) {
8
+ // Check adapter-level override first
9
+ if (adapter?.translateProvider) {
10
+ return adapter.translateProvider(config);
11
+ }
12
+ switch (agent) {
13
+ case 'claude': return translateForClaude(config);
14
+ case 'codex': return translateForCodex(config);
15
+ case 'gemini': return translateForGemini(config);
16
+ case 'qwen': return translateForGemini(config);
17
+ case 'opencode': return translateForOpenCode(config);
18
+ case 'cursor':
19
+ case 'pi':
20
+ case 'omp':
21
+ case 'openclaw':
22
+ case 'hermes':
23
+ case 'droid':
24
+ case 'amp':
25
+ return translateForGenericOpenAI(config);
26
+ // copilot stays with the default (proxy-always, GitHub-locked)
27
+ default:
28
+ return {
29
+ env: {},
30
+ args: [],
31
+ proxyRequired: true,
32
+ proxyExposedTransport: getHarnessDefaultTransport(agent),
33
+ };
34
+ }
35
+ }
36
+ //# sourceMappingURL=translate-for-harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translate-for-harness.js","sourceRoot":"","sources":["../src/translate-for-harness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AAEzF,MAAM,UAAU,mBAAmB,CAAC,KAAgB,EAAE,MAAsB,EAAE,OAAsE;IAClJ,qCAAqC;IACrC,IAAI,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,iBAAiB,CAAC,MAA4C,CAAC,CAAC;IACjF,CAAC;IACD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACjD,KAAK,OAAO,CAAC,CAAC,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACjD,KAAK,MAAM,CAAC,CAAC,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,UAAU,CAAC,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACrD,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,KAAK,CAAC;QACX,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,KAAK;YACR,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;QAC3C,+DAA+D;QAC/D;YACE,OAAO;gBACL,GAAG,EAAE,EAAE;gBACP,IAAI,EAAE,EAAE;gBACR,aAAa,EAAE,IAAI;gBACnB,qBAAqB,EAAE,0BAA0B,CAAC,KAAK,CAAC;aACzD,CAAC;IACN,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderConfig } from '@a5c-ai/agent-mux-core';
2
+ import type { HarnessProviderTranslation } from '../provider-translation.js';
3
+ export declare function translateForClaude(config: ProviderConfig): HarnessProviderTranslation;
4
+ //# sourceMappingURL=claude-translation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-translation.d.ts","sourceRoot":"","sources":["../../src/translations/claude-translation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,0BAA0B,CA0CrF"}
@@ -0,0 +1,50 @@
1
+ export function translateForClaude(config) {
2
+ const env = {};
3
+ const args = [];
4
+ switch (config.provider) {
5
+ case 'anthropic':
6
+ if (config.auth.apiKey)
7
+ env['ANTHROPIC_API_KEY'] = config.auth.apiKey;
8
+ if (config.model)
9
+ env['ANTHROPIC_MODEL'] = config.model;
10
+ return { env, args, proxyRequired: false };
11
+ case 'bedrock':
12
+ env['CLAUDE_CODE_USE_BEDROCK'] = '1';
13
+ if (config.params['region'])
14
+ env['AWS_REGION'] = String(config.params['region']);
15
+ if (config.auth.awsProfile)
16
+ env['AWS_PROFILE'] = config.auth.awsProfile;
17
+ return { env, args, proxyRequired: false };
18
+ case 'vertex':
19
+ env['CLAUDE_CODE_USE_VERTEX'] = '1';
20
+ if (config.params['project'])
21
+ env['GOOGLE_CLOUD_PROJECT'] = String(config.params['project']);
22
+ if (config.params['region'])
23
+ env['GOOGLE_CLOUD_LOCATION'] = String(config.params['region']);
24
+ return { env, args, proxyRequired: false };
25
+ case 'foundry':
26
+ env['CLAUDE_CODE_USE_FOUNDRY'] = '1';
27
+ if (config.auth.apiKey)
28
+ env['AZURE_API_KEY'] = config.auth.apiKey;
29
+ return { env, args, proxyRequired: false };
30
+ case 'ollama': {
31
+ const apiBase = config.params['apiBase'] ? String(config.params['apiBase']) : 'http://localhost:11434';
32
+ env['ANTHROPIC_BASE_URL'] = apiBase;
33
+ env['ANTHROPIC_API_KEY'] = '';
34
+ env['ANTHROPIC_AUTH_TOKEN'] = 'ollama';
35
+ env['CLAUDE_CODE_ATTRIBUTION_HEADER'] = '0';
36
+ // Set all model tier env vars to the Ollama model so Claude doesn't try
37
+ // to use a real Anthropic model name
38
+ if (config.model) {
39
+ env['ANTHROPIC_DEFAULT_SONNET_MODEL'] = config.model;
40
+ env['ANTHROPIC_DEFAULT_OPUS_MODEL'] = config.model;
41
+ env['ANTHROPIC_DEFAULT_HAIKU_MODEL'] = config.model;
42
+ }
43
+ env['CLAUDE_CODE_AUTO_COMPACT_WINDOW'] = '8192';
44
+ return { env, args, proxyRequired: false };
45
+ }
46
+ default:
47
+ return { env, args, proxyRequired: true, proxyExposedTransport: 'anthropic' };
48
+ }
49
+ }
50
+ //# sourceMappingURL=claude-translation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-translation.js","sourceRoot":"","sources":["../../src/translations/claude-translation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderConfig } from '@a5c-ai/agent-mux-core';
2
+ import type { HarnessProviderTranslation } from '../provider-translation.js';
3
+ export declare function translateForCodex(config: ProviderConfig): HarnessProviderTranslation;
4
+ //# sourceMappingURL=codex-translation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-translation.d.ts","sourceRoot":"","sources":["../../src/translations/codex-translation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,0BAA0B,CA4BpF"}
@@ -0,0 +1,32 @@
1
+ export function translateForCodex(config) {
2
+ const env = {};
3
+ const args = [];
4
+ switch (config.provider) {
5
+ case 'openai':
6
+ if (config.auth.apiKey)
7
+ env['OPENAI_API_KEY'] = config.auth.apiKey;
8
+ return { env, args, proxyRequired: false };
9
+ case 'ollama':
10
+ // Codex requires v0.81.0+ for --oss / custom provider support (ref: ollama/cmd/launch/codex.go)
11
+ env['OPENAI_API_KEY'] = 'ollama';
12
+ args.push('--oss');
13
+ return { env, args, proxyRequired: false };
14
+ case 'custom':
15
+ case 'groq':
16
+ case 'fireworks':
17
+ case 'together':
18
+ case 'deepseek':
19
+ case 'mistral':
20
+ case 'cerebras':
21
+ case 'sambanova':
22
+ case 'openrouter':
23
+ if (config.params['apiBase'])
24
+ env['OPENAI_BASE_URL'] = String(config.params['apiBase']);
25
+ if (config.auth.apiKey)
26
+ env['OPENAI_API_KEY'] = config.auth.apiKey;
27
+ return { env, args, proxyRequired: false };
28
+ default:
29
+ return { env, args, proxyRequired: true, proxyExposedTransport: 'openai-responses' };
30
+ }
31
+ }
32
+ //# sourceMappingURL=codex-translation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-translation.js","sourceRoot":"","sources":["../../src/translations/codex-translation.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;gBAAE,GAAG,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YACnE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAC7C,KAAK,QAAQ;YACX,gGAAgG;YAChG,GAAG,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAC7C,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,YAAY;YACf,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;gBAAE,GAAG,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACxF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;gBAAE,GAAG,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YACnE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAC7C;YACE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC;IACzF,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderConfig } from '@a5c-ai/agent-mux-core';
2
+ import type { HarnessProviderTranslation } from '../provider-translation.js';
3
+ export declare function translateForGemini(config: ProviderConfig): HarnessProviderTranslation;
4
+ //# sourceMappingURL=gemini-translation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-translation.d.ts","sourceRoot":"","sources":["../../src/translations/gemini-translation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,0BAA0B,CAgBrF"}
@@ -0,0 +1,20 @@
1
+ export function translateForGemini(config) {
2
+ const env = {};
3
+ const args = [];
4
+ switch (config.provider) {
5
+ case 'google':
6
+ if (config.auth.apiKey)
7
+ env['GEMINI_API_KEY'] = config.auth.apiKey;
8
+ return { env, args, proxyRequired: false };
9
+ case 'vertex':
10
+ env['GOOGLE_GENAI_USE_VERTEXAI'] = 'true';
11
+ if (config.params['project'])
12
+ env['GOOGLE_CLOUD_PROJECT'] = String(config.params['project']);
13
+ if (config.params['region'])
14
+ env['GOOGLE_CLOUD_LOCATION'] = String(config.params['region']);
15
+ return { env, args, proxyRequired: false };
16
+ default:
17
+ return { env, args, proxyRequired: true, proxyExposedTransport: 'google' };
18
+ }
19
+ }
20
+ //# sourceMappingURL=gemini-translation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-translation.js","sourceRoot":"","sources":["../../src/translations/gemini-translation.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;gBAAE,GAAG,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YACnE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAC7C,KAAK,QAAQ;YACX,GAAG,CAAC,2BAA2B,CAAC,GAAG,MAAM,CAAC;YAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;gBAAE,GAAG,CAAC,sBAAsB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC7F,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAAE,GAAG,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5F,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAC7C;YACE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC;IAC/E,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderConfig } from '@a5c-ai/agent-mux-core';
2
+ import type { HarnessProviderTranslation } from '../provider-translation.js';
3
+ export declare function translateForGenericOpenAI(config: ProviderConfig): HarnessProviderTranslation;
4
+ //# sourceMappingURL=generic-openai-translation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-openai-translation.d.ts","sourceRoot":"","sources":["../../src/translations/generic-openai-translation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,cAAc,GAAG,0BAA0B,CAqB5F"}
@@ -0,0 +1,19 @@
1
+ export function translateForGenericOpenAI(config) {
2
+ const env = {};
3
+ const args = [];
4
+ // OpenAI-compatible providers can be reached directly
5
+ if (config.params['apiBase']) {
6
+ env['OPENAI_BASE_URL'] = String(config.params['apiBase']);
7
+ }
8
+ if (config.auth.apiKey) {
9
+ env['OPENAI_API_KEY'] = config.auth.apiKey;
10
+ }
11
+ const directProviders = ['openai', 'groq', 'fireworks', 'together', 'deepseek',
12
+ 'mistral', 'cerebras', 'sambanova', 'openrouter', 'ollama', 'local',
13
+ 'lmstudio', 'vllm', 'custom'];
14
+ if (directProviders.includes(config.provider)) {
15
+ return { env, args, proxyRequired: false };
16
+ }
17
+ return { env, args, proxyRequired: true, proxyExposedTransport: 'openai-chat' };
18
+ }
19
+ //# sourceMappingURL=generic-openai-translation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-openai-translation.js","sourceRoot":"","sources":["../../src/translations/generic-openai-translation.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,yBAAyB,CAAC,MAAsB;IAC9D,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,sDAAsD;IACtD,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,GAAG,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU;QAC5E,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO;QACnE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEhC,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,qBAAqB,EAAE,aAAa,EAAE,CAAC;AAClF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderConfig } from '@a5c-ai/agent-mux-core';
2
+ import type { HarnessProviderTranslation } from '../provider-translation.js';
3
+ export declare function translateForOpenCode(config: ProviderConfig): HarnessProviderTranslation;
4
+ //# sourceMappingURL=opencode-translation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-translation.d.ts","sourceRoot":"","sources":["../../src/translations/opencode-translation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AA6B7E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,0BAA0B,CA2BvF"}
@@ -0,0 +1,51 @@
1
+ import * as fs from 'node:fs';
2
+ const OPENCODE_SDK_MAP = {
3
+ anthropic: '@ai-sdk/anthropic',
4
+ openai: '@ai-sdk/openai',
5
+ google: '@ai-sdk/google',
6
+ vertex: '@ai-sdk/google-vertex',
7
+ bedrock: '@ai-sdk/amazon-bedrock',
8
+ azure: '@ai-sdk/azure',
9
+ };
10
+ function mergeWithExistingConfig(generatedConfig) {
11
+ try {
12
+ const existing = JSON.parse(fs.readFileSync('opencode.json', 'utf-8'));
13
+ const generated = JSON.parse(generatedConfig);
14
+ return JSON.stringify({ ...existing, ...generated });
15
+ }
16
+ catch {
17
+ return generatedConfig;
18
+ }
19
+ }
20
+ function buildOpenCodeConfig(npm, model, options) {
21
+ return JSON.stringify({
22
+ $schema: 'https://opencode.ai/config.json',
23
+ provider: { amux: { npm, options: options ?? {} } },
24
+ model: { default: `amux/${model}` },
25
+ });
26
+ }
27
+ export function translateForOpenCode(config) {
28
+ const env = {};
29
+ const args = [];
30
+ const nativeSdk = OPENCODE_SDK_MAP[config.provider];
31
+ if (nativeSdk) {
32
+ if (config.auth.apiKey) {
33
+ const envKeyMap = {
34
+ anthropic: 'ANTHROPIC_API_KEY',
35
+ openai: 'OPENAI_API_KEY',
36
+ google: 'GOOGLE_GENERATIVE_AI_API_KEY',
37
+ };
38
+ const envKey = envKeyMap[config.provider];
39
+ if (envKey)
40
+ env[envKey] = config.auth.apiKey;
41
+ }
42
+ env['OPENCODE_CONFIG_CONTENT'] = mergeWithExistingConfig(buildOpenCodeConfig(nativeSdk, config.model));
43
+ return { env, args, proxyRequired: false };
44
+ }
45
+ const apiBase = config.params['apiBase'] ? String(config.params['apiBase']) : '';
46
+ env['OPENCODE_CONFIG_CONTENT'] = mergeWithExistingConfig(buildOpenCodeConfig('@ai-sdk/openai-compatible', config.model, apiBase ? { baseURL: apiBase } : undefined));
47
+ if (config.auth.apiKey)
48
+ env['OPENAI_API_KEY'] = config.auth.apiKey;
49
+ return { env, args, proxyRequired: false };
50
+ }
51
+ //# sourceMappingURL=opencode-translation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-translation.js","sourceRoot":"","sources":["../../src/translations/opencode-translation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAI9B,MAAM,gBAAgB,GAAwC;IAC5D,SAAS,EAAE,mBAAmB;IAC9B,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,uBAAuB;IAC/B,OAAO,EAAE,wBAAwB;IACjC,KAAK,EAAE,eAAe;CACvB,CAAC;AAEF,SAAS,uBAAuB,CAAC,eAAuB;IACtD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,KAAa,EAAE,OAAiC;IACxF,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,OAAO,EAAE,iCAAiC;QAC1C,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,EAAE;QACnD,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,KAAK,EAAE,EAAE;KACpC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACzD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEpD,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,SAAS,GAAwC;gBACrD,SAAS,EAAE,mBAAmB;gBAC9B,MAAM,EAAE,gBAAgB;gBACxB,MAAM,EAAE,8BAA8B;aACvC,CAAC;YACF,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,MAAM;gBAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/C,CAAC;QACD,GAAG,CAAC,yBAAyB,CAAC,GAAG,uBAAuB,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACvG,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,GAAG,CAAC,yBAAyB,CAAC,GAAG,uBAAuB,CAAC,mBAAmB,CAC1E,2BAA2B,EAC3B,MAAM,CAAC,KAAK,EACZ,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IACnE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC7C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a5c-ai/agent-mux-adapters",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Built-in agent adapters for agent-mux",
@@ -51,6 +51,8 @@
51
51
  "prepublishOnly": "npm run build"
52
52
  },
53
53
  "dependencies": {
54
- "@a5c-ai/agent-mux-core": "0.4.0"
54
+ "@a5c-ai/agent-mux-core": "0.4.2",
55
+ "@anthropic-ai/claude-agent-sdk": "^0.2.113",
56
+ "ws": "^8.20.0"
55
57
  }
56
58
  }
@@ -1,60 +0,0 @@
1
- /**
2
- * Unified mock system for new adapter types (programmatic, remote, WebSocket).
3
- *
4
- * This package extends the existing harness-mock system to support:
5
- * - Programmatic adapters (SDK integration mocking)
6
- * - Remote HTTP adapters (server/API mocking)
7
- * - WebSocket adapters (real-time connection mocking)
8
- *
9
- * Use this alongside @a5c-ai/agent-mux-harness-mock for subprocess adapters.
10
- */
11
- export type { ProgrammaticMockConfig, RemoteMockConfig, MockStreamEvent, ProgrammaticMockResponse, MockServerInfo, MockConnection, ProgrammaticMockBuilder, RemoteMockBuilder, MockConfigFactory, MockScenarios, } from './mock-types.js';
12
- export { ProgrammaticMockEngine, createProgrammaticMockBuilder, ClaudeAgentSdkMock, CodexSdkMock, PiSdkMock, programmaticMocks, } from './programmatic-mocks.js';
13
- export { MockServer, createMockServer, createRemoteMockBuilder, OpenCodeHttpMock, CodexWebSocketMock, remoteMocks, } from './remote-mocks.js';
14
- import { createProgrammaticMockBuilder, ClaudeAgentSdkMock, CodexSdkMock, PiSdkMock } from './programmatic-mocks.js';
15
- import { createRemoteMockBuilder, OpenCodeHttpMock, CodexWebSocketMock } from './remote-mocks.js';
16
- import type { MockConfigFactory, MockScenarios } from './mock-types.js';
17
- /**
18
- * Unified factory for creating all types of adapter mocks.
19
- */
20
- export declare class AdapterMockFactory implements MockConfigFactory {
21
- claudeAgentSdk(): import("./mock-types.js").ProgrammaticMockBuilder;
22
- codexSdk(): import("./mock-types.js").ProgrammaticMockBuilder;
23
- piSdk(): import("./mock-types.js").ProgrammaticMockBuilder;
24
- opencodeHttp(): import("./mock-types.js").RemoteMockBuilder;
25
- codexWebSocket(): import("./mock-types.js").RemoteMockBuilder;
26
- programmatic(): import("./mock-types.js").ProgrammaticMockBuilder;
27
- remote(): import("./mock-types.js").RemoteMockBuilder;
28
- }
29
- /**
30
- * Pre-built mock scenarios for common testing patterns.
31
- */
32
- export declare const mockScenarios: MockScenarios;
33
- /**
34
- * Create a complete mock configuration for a specific adapter.
35
- */
36
- export declare function createAdapterMock(adapterName: 'claude-agent-sdk' | 'codex-sdk' | 'pi-sdk' | 'opencode-http' | 'codex-websocket', scenario?: 'basic' | 'tools' | 'error' | 'performance'): import("./mock-types.js").ProgrammaticMockConfig | import("./mock-types.js").RemoteMockConfig;
37
- /**
38
- * Test helper to verify mock behavior matches expected patterns.
39
- */
40
- export declare function testMockScenario(mockConfig: any, // ProgrammaticMockConfig | RemoteMockConfig
41
- expectedEventTypes: string[], timeoutMs?: number): Promise<boolean>;
42
- /**
43
- * Main entry point for all adapter mocking functionality.
44
- */
45
- export declare const adapterMocks: {
46
- factory: AdapterMockFactory;
47
- claude: typeof ClaudeAgentSdkMock;
48
- codex: {
49
- sdk: typeof CodexSdkMock;
50
- websocket: typeof CodexWebSocketMock;
51
- };
52
- pi: typeof PiSdkMock;
53
- opencode: typeof OpenCodeHttpMock;
54
- scenarios: MockScenarios;
55
- createMock: typeof createAdapterMock;
56
- testScenario: typeof testMockScenario;
57
- programmatic: typeof createProgrammaticMockBuilder;
58
- remote: typeof createRemoteMockBuilder;
59
- };
60
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mocks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,YAAY,EAEV,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EAGf,wBAAwB,EACxB,cAAc,EACd,cAAc,EAGd,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EAGjB,aAAa,GACd,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EAEL,sBAAsB,EACtB,6BAA6B,EAG7B,kBAAkB,EAClB,YAAY,EACZ,SAAS,EAGT,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EAEL,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EAGvB,gBAAgB,EAChB,kBAAkB,EAGlB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EACL,6BAA6B,EAC7B,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACV,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAExE;;GAEG;AACH,qBAAa,kBAAmB,YAAW,iBAAiB;IAC1D,cAAc;IAKd,QAAQ;IAKR,KAAK;IAKL,YAAY;IAKZ,cAAc;IAKd,YAAY;IAIZ,MAAM;CAGP;AAMD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAgD3B,CAAC;AAMF;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,kBAAkB,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,iBAAiB,EAC9F,QAAQ,GAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,aAAuB,iGA6ChE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,GAAG,EAAE,4CAA4C;AAC7D,kBAAkB,EAAE,MAAM,EAAE,EAC5B,SAAS,SAAO,GACf,OAAO,CAAC,OAAO,CAAC,CAalB;AAMD;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;CAuBxB,CAAC"}
@@ -1,203 +0,0 @@
1
- /**
2
- * Unified mock system for new adapter types (programmatic, remote, WebSocket).
3
- *
4
- * This package extends the existing harness-mock system to support:
5
- * - Programmatic adapters (SDK integration mocking)
6
- * - Remote HTTP adapters (server/API mocking)
7
- * - WebSocket adapters (real-time connection mocking)
8
- *
9
- * Use this alongside @a5c-ai/agent-mux-harness-mock for subprocess adapters.
10
- */
11
- // ---------------------------------------------------------------------------
12
- // Programmatic Mocks
13
- // ---------------------------------------------------------------------------
14
- export {
15
- // Engine and builders
16
- ProgrammaticMockEngine, createProgrammaticMockBuilder,
17
- // Adapter-specific factories
18
- ClaudeAgentSdkMock, CodexSdkMock, PiSdkMock,
19
- // Unified export
20
- programmaticMocks, } from './programmatic-mocks.js';
21
- // ---------------------------------------------------------------------------
22
- // Remote Mocks
23
- // ---------------------------------------------------------------------------
24
- export {
25
- // Server and connection mocking
26
- MockServer, createMockServer, createRemoteMockBuilder,
27
- // Adapter-specific factories
28
- OpenCodeHttpMock, CodexWebSocketMock,
29
- // Unified export
30
- remoteMocks, } from './remote-mocks.js';
31
- // ---------------------------------------------------------------------------
32
- // Unified Mock Factory
33
- // ---------------------------------------------------------------------------
34
- import { createProgrammaticMockBuilder, ClaudeAgentSdkMock, CodexSdkMock, PiSdkMock } from './programmatic-mocks.js';
35
- import { createRemoteMockBuilder, OpenCodeHttpMock, CodexWebSocketMock } from './remote-mocks.js';
36
- /**
37
- * Unified factory for creating all types of adapter mocks.
38
- */
39
- export class AdapterMockFactory {
40
- claudeAgentSdk() {
41
- return createProgrammaticMockBuilder()
42
- .name('claude-agent-sdk-default');
43
- }
44
- codexSdk() {
45
- return createProgrammaticMockBuilder()
46
- .name('codex-sdk-default');
47
- }
48
- piSdk() {
49
- return createProgrammaticMockBuilder()
50
- .name('pi-sdk-default');
51
- }
52
- opencodeHttp() {
53
- return createRemoteMockBuilder()
54
- .name('opencode-http-default');
55
- }
56
- codexWebSocket() {
57
- return createRemoteMockBuilder()
58
- .name('codex-websocket-default');
59
- }
60
- programmatic() {
61
- return createProgrammaticMockBuilder();
62
- }
63
- remote() {
64
- return createRemoteMockBuilder();
65
- }
66
- }
67
- // ---------------------------------------------------------------------------
68
- // Preset Scenarios
69
- // ---------------------------------------------------------------------------
70
- /**
71
- * Pre-built mock scenarios for common testing patterns.
72
- */
73
- export const mockScenarios = {
74
- basicSuccess: {
75
- programmatic: ClaudeAgentSdkMock.basicSuccess(),
76
- remote: OpenCodeHttpMock.basicSuccess(),
77
- },
78
- toolCalling: {
79
- programmatic: ClaudeAgentSdkMock.toolCalling(),
80
- remote: OpenCodeHttpMock.basicSuccess(), // Remote doesn't have tool calling variant
81
- },
82
- errors: {
83
- authFailure: ClaudeAgentSdkMock.authFailure(),
84
- networkTimeout: OpenCodeHttpMock.networkTimeout(),
85
- connectionDrop: CodexWebSocketMock.connectionDrop(),
86
- invalidResponse: createRemoteMockBuilder()
87
- .name('invalid-response')
88
- .withErrors({ invalidResponse: true })
89
- .build(),
90
- },
91
- performance: {
92
- highThroughput: CodexWebSocketMock.highThroughput(),
93
- lowLatency: createProgrammaticMockBuilder()
94
- .name('low-latency')
95
- .addTextStream('Fast response', 50, 10)
96
- .withCost(10, 15)
97
- .build(),
98
- largeBatch: createProgrammaticMockBuilder()
99
- .name('large-batch')
100
- .addTextStream('Lorem ipsum '.repeat(100), 20, 25)
101
- .withCost(500, 200)
102
- .build(),
103
- },
104
- edgeCases: {
105
- emptyResponse: createProgrammaticMockBuilder()
106
- .name('empty-response')
107
- .withCost(5, 0)
108
- .build(),
109
- malformedEvents: createRemoteMockBuilder()
110
- .name('malformed-events')
111
- .addEvents([
112
- { type: 'invalid_event_type', data: { malformed: true }, delayMs: 100 },
113
- ])
114
- .build(),
115
- reconnection: CodexWebSocketMock.connectionDrop(),
116
- },
117
- };
118
- // ---------------------------------------------------------------------------
119
- // Quick Access Functions
120
- // ---------------------------------------------------------------------------
121
- /**
122
- * Create a complete mock configuration for a specific adapter.
123
- */
124
- export function createAdapterMock(adapterName, scenario = 'basic') {
125
- const factory = new AdapterMockFactory();
126
- switch (adapterName) {
127
- case 'claude-agent-sdk':
128
- switch (scenario) {
129
- case 'basic': return ClaudeAgentSdkMock.basicSuccess();
130
- case 'tools': return ClaudeAgentSdkMock.toolCalling();
131
- case 'error': return ClaudeAgentSdkMock.authFailure();
132
- default: return ClaudeAgentSdkMock.basicSuccess();
133
- }
134
- case 'codex-sdk':
135
- switch (scenario) {
136
- case 'basic': return CodexSdkMock.basicSuccess();
137
- case 'tools': return CodexSdkMock.codeGeneration();
138
- default: return CodexSdkMock.basicSuccess();
139
- }
140
- case 'pi-sdk':
141
- switch (scenario) {
142
- case 'basic': return PiSdkMock.basicSuccess();
143
- case 'tools': return PiSdkMock.webSearch();
144
- default: return PiSdkMock.basicSuccess();
145
- }
146
- case 'opencode-http':
147
- switch (scenario) {
148
- case 'basic': return OpenCodeHttpMock.basicSuccess();
149
- case 'error': return OpenCodeHttpMock.networkTimeout();
150
- default: return OpenCodeHttpMock.basicSuccess();
151
- }
152
- case 'codex-websocket':
153
- switch (scenario) {
154
- case 'basic': return CodexWebSocketMock.basicSuccess();
155
- case 'performance': return CodexWebSocketMock.highThroughput();
156
- case 'error': return CodexWebSocketMock.connectionDrop();
157
- default: return CodexWebSocketMock.basicSuccess();
158
- }
159
- default:
160
- throw new Error(`Unknown adapter: ${adapterName}`);
161
- }
162
- }
163
- /**
164
- * Test helper to verify mock behavior matches expected patterns.
165
- */
166
- export async function testMockScenario(mockConfig, // ProgrammaticMockConfig | RemoteMockConfig
167
- expectedEventTypes, timeoutMs = 5000) {
168
- // This would be implemented to validate that a mock config produces
169
- // the expected sequence of events within the timeout period
170
- // Basic validation - return false for null/undefined configs
171
- if (!mockConfig) {
172
- return false;
173
- }
174
- return (Array.isArray(mockConfig.events) &&
175
- mockConfig.events.length > 0);
176
- }
177
- // ---------------------------------------------------------------------------
178
- // Main Export
179
- // ---------------------------------------------------------------------------
180
- /**
181
- * Main entry point for all adapter mocking functionality.
182
- */
183
- export const adapterMocks = {
184
- // Factories
185
- factory: new AdapterMockFactory(),
186
- // Direct access to adapter-specific mocks
187
- claude: ClaudeAgentSdkMock,
188
- codex: {
189
- sdk: CodexSdkMock,
190
- websocket: CodexWebSocketMock,
191
- },
192
- pi: PiSdkMock,
193
- opencode: OpenCodeHttpMock,
194
- // Scenarios
195
- scenarios: mockScenarios,
196
- // Utilities
197
- createMock: createAdapterMock,
198
- testScenario: testMockScenario,
199
- // Builders
200
- programmatic: createProgrammaticMockBuilder,
201
- remote: createRemoteMockBuilder,
202
- };
203
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mocks/index.ts"],"names":[],"mappings":"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"}