opengoat 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +96 -0
  3. package/bin/opengoat +33 -0
  4. package/dist/apps/cli/cli.d.ts +1 -0
  5. package/dist/apps/cli/cli.js +57 -0
  6. package/dist/apps/cli/cli.js.map +1 -0
  7. package/dist/apps/cli/commands/agent-create.command.d.ts +2 -0
  8. package/dist/apps/cli/commands/agent-create.command.js +22 -0
  9. package/dist/apps/cli/commands/agent-create.command.js.map +1 -0
  10. package/dist/apps/cli/commands/agent-list.command.d.ts +2 -0
  11. package/dist/apps/cli/commands/agent-list.command.js +16 -0
  12. package/dist/apps/cli/commands/agent-list.command.js.map +1 -0
  13. package/dist/apps/cli/commands/agent-provider-get.command.d.ts +2 -0
  14. package/dist/apps/cli/commands/agent-provider-get.command.js +15 -0
  15. package/dist/apps/cli/commands/agent-provider-get.command.js.map +1 -0
  16. package/dist/apps/cli/commands/agent-provider-set.command.d.ts +2 -0
  17. package/dist/apps/cli/commands/agent-provider-set.command.js +16 -0
  18. package/dist/apps/cli/commands/agent-provider-set.command.js.map +1 -0
  19. package/dist/apps/cli/commands/agent-run.command.d.ts +2 -0
  20. package/dist/apps/cli/commands/agent-run.command.js +65 -0
  21. package/dist/apps/cli/commands/agent-run.command.js.map +1 -0
  22. package/dist/apps/cli/commands/agent-run.shared.d.ts +9 -0
  23. package/dist/apps/cli/commands/agent-run.shared.js +76 -0
  24. package/dist/apps/cli/commands/agent-run.shared.js.map +1 -0
  25. package/dist/apps/cli/commands/agent.command.d.ts +2 -0
  26. package/dist/apps/cli/commands/agent.command.js +96 -0
  27. package/dist/apps/cli/commands/agent.command.js.map +1 -0
  28. package/dist/apps/cli/commands/init.command.d.ts +2 -0
  29. package/dist/apps/cli/commands/init.command.js +17 -0
  30. package/dist/apps/cli/commands/init.command.js.map +1 -0
  31. package/dist/apps/cli/commands/onboard.command.d.ts +2 -0
  32. package/dist/apps/cli/commands/onboard.command.js +365 -0
  33. package/dist/apps/cli/commands/onboard.command.js.map +1 -0
  34. package/dist/apps/cli/commands/provider-list.command.d.ts +2 -0
  35. package/dist/apps/cli/commands/provider-list.command.js +16 -0
  36. package/dist/apps/cli/commands/provider-list.command.js.map +1 -0
  37. package/dist/apps/cli/framework/command.d.ts +11 -0
  38. package/dist/apps/cli/framework/command.js +2 -0
  39. package/dist/apps/cli/framework/command.js.map +1 -0
  40. package/dist/apps/cli/framework/router.d.ts +8 -0
  41. package/dist/apps/cli/framework/router.js +51 -0
  42. package/dist/apps/cli/framework/router.js.map +1 -0
  43. package/dist/apps/cli/index.d.ts +2 -0
  44. package/dist/apps/cli/index.js +14 -0
  45. package/dist/apps/cli/index.js.map +1 -0
  46. package/dist/core/agents/application/agent.service.d.ts +24 -0
  47. package/dist/core/agents/application/agent.service.js +139 -0
  48. package/dist/core/agents/application/agent.service.js.map +1 -0
  49. package/dist/core/agents/application/workspace-context.service.d.ts +28 -0
  50. package/dist/core/agents/application/workspace-context.service.js +157 -0
  51. package/dist/core/agents/application/workspace-context.service.js.map +1 -0
  52. package/dist/core/agents/domain/workspace-context.d.ts +13 -0
  53. package/dist/core/agents/domain/workspace-context.js +14 -0
  54. package/dist/core/agents/domain/workspace-context.js.map +1 -0
  55. package/dist/core/agents/index.d.ts +3 -0
  56. package/dist/core/agents/index.js +4 -0
  57. package/dist/core/agents/index.js.map +1 -0
  58. package/dist/core/bootstrap/application/bootstrap.service.d.ts +24 -0
  59. package/dist/core/bootstrap/application/bootstrap.service.js +104 -0
  60. package/dist/core/bootstrap/application/bootstrap.service.js.map +1 -0
  61. package/dist/core/bootstrap/index.d.ts +1 -0
  62. package/dist/core/bootstrap/index.js +2 -0
  63. package/dist/core/bootstrap/index.js.map +1 -0
  64. package/dist/core/domain/agent.d.ts +13 -0
  65. package/dist/core/domain/agent.js +2 -0
  66. package/dist/core/domain/agent.js.map +1 -0
  67. package/dist/core/domain/opengoat-paths.d.ts +26 -0
  68. package/dist/core/domain/opengoat-paths.js +2 -0
  69. package/dist/core/domain/opengoat-paths.js.map +1 -0
  70. package/dist/core/opengoat/application/opengoat.service.d.ts +34 -0
  71. package/dist/core/opengoat/application/opengoat.service.js +89 -0
  72. package/dist/core/opengoat/application/opengoat.service.js.map +1 -0
  73. package/dist/core/opengoat/index.d.ts +1 -0
  74. package/dist/core/opengoat/index.js +2 -0
  75. package/dist/core/opengoat/index.js.map +1 -0
  76. package/dist/core/ports/file-system.port.d.ts +7 -0
  77. package/dist/core/ports/file-system.port.js +2 -0
  78. package/dist/core/ports/file-system.port.js.map +1 -0
  79. package/dist/core/ports/path.port.d.ts +3 -0
  80. package/dist/core/ports/path.port.js +2 -0
  81. package/dist/core/ports/path.port.js.map +1 -0
  82. package/dist/core/ports/paths-provider.port.d.ts +4 -0
  83. package/dist/core/ports/paths-provider.port.js +2 -0
  84. package/dist/core/ports/paths-provider.port.js.map +1 -0
  85. package/dist/core/providers/application/provider.service.d.ts +53 -0
  86. package/dist/core/providers/application/provider.service.js +204 -0
  87. package/dist/core/providers/application/provider.service.js.map +1 -0
  88. package/dist/core/providers/base-provider.d.ts +18 -0
  89. package/dist/core/providers/base-provider.js +38 -0
  90. package/dist/core/providers/base-provider.js.map +1 -0
  91. package/dist/core/providers/builtins/claude.provider.d.ts +7 -0
  92. package/dist/core/providers/builtins/claude.provider.js +34 -0
  93. package/dist/core/providers/builtins/claude.provider.js.map +1 -0
  94. package/dist/core/providers/builtins/codex.provider.d.ts +7 -0
  95. package/dist/core/providers/builtins/codex.provider.js +31 -0
  96. package/dist/core/providers/builtins/codex.provider.js.map +1 -0
  97. package/dist/core/providers/builtins/cursor.provider.d.ts +9 -0
  98. package/dist/core/providers/builtins/cursor.provider.js +44 -0
  99. package/dist/core/providers/builtins/cursor.provider.js.map +1 -0
  100. package/dist/core/providers/builtins/openai.provider.d.ts +7 -0
  101. package/dist/core/providers/builtins/openai.provider.js +143 -0
  102. package/dist/core/providers/builtins/openai.provider.js.map +1 -0
  103. package/dist/core/providers/builtins/openclaw.provider.d.ts +7 -0
  104. package/dist/core/providers/builtins/openclaw.provider.js +38 -0
  105. package/dist/core/providers/builtins/openclaw.provider.js.map +1 -0
  106. package/dist/core/providers/builtins/openrouter.provider.d.ts +7 -0
  107. package/dist/core/providers/builtins/openrouter.provider.js +101 -0
  108. package/dist/core/providers/builtins/openrouter.provider.js.map +1 -0
  109. package/dist/core/providers/cli-provider.d.ts +19 -0
  110. package/dist/core/providers/cli-provider.js +91 -0
  111. package/dist/core/providers/cli-provider.js.map +1 -0
  112. package/dist/core/providers/command-executor.d.ts +11 -0
  113. package/dist/core/providers/command-executor.js +31 -0
  114. package/dist/core/providers/command-executor.js.map +1 -0
  115. package/dist/core/providers/errors.d.ts +24 -0
  116. package/dist/core/providers/errors.js +42 -0
  117. package/dist/core/providers/errors.js.map +1 -0
  118. package/dist/core/providers/index.d.ts +16 -0
  119. package/dist/core/providers/index.js +26 -0
  120. package/dist/core/providers/index.js.map +1 -0
  121. package/dist/core/providers/loader.d.ts +2 -0
  122. package/dist/core/providers/loader.js +42 -0
  123. package/dist/core/providers/loader.js.map +1 -0
  124. package/dist/core/providers/provider-module.d.ts +19 -0
  125. package/dist/core/providers/provider-module.js +2 -0
  126. package/dist/core/providers/provider-module.js.map +1 -0
  127. package/dist/core/providers/providers/claude/index.d.ts +4 -0
  128. package/dist/core/providers/providers/claude/index.js +19 -0
  129. package/dist/core/providers/providers/claude/index.js.map +1 -0
  130. package/dist/core/providers/providers/claude/provider.d.ts +7 -0
  131. package/dist/core/providers/providers/claude/provider.js +34 -0
  132. package/dist/core/providers/providers/claude/provider.js.map +1 -0
  133. package/dist/core/providers/providers/codex/index.d.ts +4 -0
  134. package/dist/core/providers/providers/codex/index.js +19 -0
  135. package/dist/core/providers/providers/codex/index.js.map +1 -0
  136. package/dist/core/providers/providers/codex/provider.d.ts +7 -0
  137. package/dist/core/providers/providers/codex/provider.js +31 -0
  138. package/dist/core/providers/providers/codex/provider.js.map +1 -0
  139. package/dist/core/providers/providers/cursor/index.d.ts +4 -0
  140. package/dist/core/providers/providers/cursor/index.js +19 -0
  141. package/dist/core/providers/providers/cursor/index.js.map +1 -0
  142. package/dist/core/providers/providers/cursor/provider.d.ts +9 -0
  143. package/dist/core/providers/providers/cursor/provider.js +44 -0
  144. package/dist/core/providers/providers/cursor/provider.js.map +1 -0
  145. package/dist/core/providers/providers/gemini/index.d.ts +4 -0
  146. package/dist/core/providers/providers/gemini/index.js +33 -0
  147. package/dist/core/providers/providers/gemini/index.js.map +1 -0
  148. package/dist/core/providers/providers/gemini/provider.d.ts +7 -0
  149. package/dist/core/providers/providers/gemini/provider.js +36 -0
  150. package/dist/core/providers/providers/gemini/provider.js.map +1 -0
  151. package/dist/core/providers/providers/grok/index.d.ts +4 -0
  152. package/dist/core/providers/providers/grok/index.js +41 -0
  153. package/dist/core/providers/providers/grok/index.js.map +1 -0
  154. package/dist/core/providers/providers/grok/provider.d.ts +7 -0
  155. package/dist/core/providers/providers/grok/provider.js +162 -0
  156. package/dist/core/providers/providers/grok/provider.js.map +1 -0
  157. package/dist/core/providers/providers/openai/index.d.ts +4 -0
  158. package/dist/core/providers/providers/openai/index.js +41 -0
  159. package/dist/core/providers/providers/openai/index.js.map +1 -0
  160. package/dist/core/providers/providers/openai/provider.d.ts +7 -0
  161. package/dist/core/providers/providers/openai/provider.js +229 -0
  162. package/dist/core/providers/providers/openai/provider.js.map +1 -0
  163. package/dist/core/providers/providers/openclaw/index.d.ts +4 -0
  164. package/dist/core/providers/providers/openclaw/index.js +19 -0
  165. package/dist/core/providers/providers/openclaw/index.js.map +1 -0
  166. package/dist/core/providers/providers/openclaw/provider.d.ts +7 -0
  167. package/dist/core/providers/providers/openclaw/provider.js +38 -0
  168. package/dist/core/providers/providers/openclaw/provider.js.map +1 -0
  169. package/dist/core/providers/providers/openrouter/index.d.ts +4 -0
  170. package/dist/core/providers/providers/openrouter/index.js +37 -0
  171. package/dist/core/providers/providers/openrouter/index.js.map +1 -0
  172. package/dist/core/providers/providers/openrouter/provider.d.ts +7 -0
  173. package/dist/core/providers/providers/openrouter/provider.js +113 -0
  174. package/dist/core/providers/providers/openrouter/provider.js.map +1 -0
  175. package/dist/core/providers/registry.d.ts +13 -0
  176. package/dist/core/providers/registry.js +36 -0
  177. package/dist/core/providers/registry.js.map +1 -0
  178. package/dist/core/providers/types.d.ts +52 -0
  179. package/dist/core/providers/types.js +2 -0
  180. package/dist/core/providers/types.js.map +1 -0
  181. package/dist/core/services/agent.service.d.ts +23 -0
  182. package/dist/core/services/agent.service.js +117 -0
  183. package/dist/core/services/agent.service.js.map +1 -0
  184. package/dist/core/services/bootstrap.service.d.ts +25 -0
  185. package/dist/core/services/bootstrap.service.js +112 -0
  186. package/dist/core/services/bootstrap.service.js.map +1 -0
  187. package/dist/core/services/opengoat.service.d.ts +29 -0
  188. package/dist/core/services/opengoat.service.js +65 -0
  189. package/dist/core/services/opengoat.service.js.map +1 -0
  190. package/dist/core/services/provider.service.d.ts +24 -0
  191. package/dist/core/services/provider.service.js +79 -0
  192. package/dist/core/services/provider.service.js.map +1 -0
  193. package/dist/core/templates/default-templates.d.ts +18 -0
  194. package/dist/core/templates/default-templates.js +166 -0
  195. package/dist/core/templates/default-templates.js.map +1 -0
  196. package/dist/index.d.ts +11 -0
  197. package/dist/index.js +12 -0
  198. package/dist/index.js.map +1 -0
  199. package/dist/platform/node/dotenv.d.ts +6 -0
  200. package/dist/platform/node/dotenv.js +67 -0
  201. package/dist/platform/node/dotenv.js.map +1 -0
  202. package/dist/platform/node/node-file-system.d.ts +8 -0
  203. package/dist/platform/node/node-file-system.js +41 -0
  204. package/dist/platform/node/node-file-system.js.map +1 -0
  205. package/dist/platform/node/node-path.port.d.ts +9 -0
  206. package/dist/platform/node/node-path.port.js +38 -0
  207. package/dist/platform/node/node-path.port.js.map +1 -0
  208. package/package.json +36 -0
@@ -0,0 +1,42 @@
1
+ import { access, readdir } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { fileURLToPath, pathToFileURL } from "node:url";
4
+ const providersRootDir = path.join(path.dirname(fileURLToPath(import.meta.url)), "providers");
5
+ export async function loadProviderModules(registry) {
6
+ const entries = await readdir(providersRootDir, { withFileTypes: true });
7
+ for (const entry of entries) {
8
+ if (!entry.isDirectory()) {
9
+ continue;
10
+ }
11
+ const providerDir = path.join(providersRootDir, entry.name);
12
+ const modulePath = await resolveModulePath(providerDir);
13
+ if (!modulePath) {
14
+ continue;
15
+ }
16
+ const imported = (await import(pathToFileURL(modulePath).href));
17
+ if (!imported.providerModule) {
18
+ continue;
19
+ }
20
+ registry.register(imported.providerModule.id, imported.providerModule.create, imported.providerModule);
21
+ }
22
+ }
23
+ async function resolveModulePath(providerDir) {
24
+ const candidates = ["index.js", "index.ts"];
25
+ for (const candidate of candidates) {
26
+ const fullPath = path.join(providerDir, candidate);
27
+ if (await exists(fullPath)) {
28
+ return fullPath;
29
+ }
30
+ }
31
+ return null;
32
+ }
33
+ async function exists(filePath) {
34
+ try {
35
+ await access(filePath);
36
+ return true;
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/providers/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIxD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AAE9F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAA0B;IAClE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAE7D,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACzG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAE5C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,QAAgB;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Provider } from "./types.js";
2
+ export interface ProviderOnboardingEnvField {
3
+ key: string;
4
+ description: string;
5
+ required?: boolean;
6
+ secret?: boolean;
7
+ }
8
+ export interface ProviderOnboardingSpec {
9
+ env?: ProviderOnboardingEnvField[];
10
+ auth?: {
11
+ supported: boolean;
12
+ description: string;
13
+ };
14
+ }
15
+ export interface ProviderModule {
16
+ id: string;
17
+ create: () => Provider;
18
+ onboarding?: ProviderOnboardingSpec;
19
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=provider-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-module.js","sourceRoot":"","sources":["../../../src/core/providers/provider-module.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { ProviderModule } from "../../provider-module.js";
2
+ import { ClaudeProvider } from "./provider.js";
3
+ export declare const providerModule: ProviderModule;
4
+ export { ClaudeProvider };
@@ -0,0 +1,19 @@
1
+ import { ClaudeProvider } from "./provider.js";
2
+ export const providerModule = {
3
+ id: "claude",
4
+ create: () => new ClaudeProvider(),
5
+ onboarding: {
6
+ env: [
7
+ {
8
+ key: "CLAUDE_CMD",
9
+ description: "Optional claude binary path override"
10
+ }
11
+ ],
12
+ auth: {
13
+ supported: true,
14
+ description: "Runs `claude setup-token`."
15
+ }
16
+ }
17
+ };
18
+ export { ClaudeProvider };
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/claude/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;IAClC,UAAU,EAAE;QACV,GAAG,EAAE;YACH;gBACE,GAAG,EAAE,YAAY;gBACjB,WAAW,EAAE,sCAAsC;aACpD;SACF;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,4BAA4B;SAC1C;KACF;CACF,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ProviderAuthOptions, ProviderInvokeOptions } from "../../types.js";
2
+ import { BaseCliProvider } from "../../cli-provider.js";
3
+ export declare class ClaudeProvider extends BaseCliProvider {
4
+ constructor();
5
+ protected buildInvocationArgs(options: ProviderInvokeOptions): string[];
6
+ protected buildAuthInvocationArgs(options: ProviderAuthOptions): string[];
7
+ }
@@ -0,0 +1,34 @@
1
+ import { BaseCliProvider } from "../../cli-provider.js";
2
+ export class ClaudeProvider extends BaseCliProvider {
3
+ constructor() {
4
+ super({
5
+ id: "claude",
6
+ displayName: "Claude Code",
7
+ kind: "cli",
8
+ command: "claude",
9
+ commandEnvVar: "CLAUDE_CMD",
10
+ capabilities: {
11
+ agent: true,
12
+ model: true,
13
+ auth: true,
14
+ passthrough: true
15
+ }
16
+ });
17
+ }
18
+ buildInvocationArgs(options) {
19
+ const args = ["--print"];
20
+ if (options.agent) {
21
+ args.push("--agent", options.agent);
22
+ }
23
+ if (options.model) {
24
+ args.push("--model", options.model);
25
+ }
26
+ args.push(...(options.passthroughArgs ?? []));
27
+ args.push(options.message);
28
+ return args;
29
+ }
30
+ buildAuthInvocationArgs(options) {
31
+ return ["setup-token", ...(options.passthroughArgs ?? [])];
32
+ }
33
+ }
34
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/claude/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,OAAO,cAAe,SAAQ,eAAe;IACjD;QACE,KAAK,CAAC;YACJ,EAAE,EAAE,QAAQ;YACZ,WAAW,EAAE,aAAa;YAC1B,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,QAAQ;YACjB,aAAa,EAAE,YAAY;YAC3B,YAAY,EAAE;gBACZ,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAES,mBAAmB,CAAC,OAA8B;QAC1D,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAEzB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE3B,OAAO,IAAI,CAAC;IACd,CAAC;IAEkB,uBAAuB,CAAC,OAA4B;QACrE,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderModule } from "../../provider-module.js";
2
+ import { CodexProvider } from "./provider.js";
3
+ export declare const providerModule: ProviderModule;
4
+ export { CodexProvider };
@@ -0,0 +1,19 @@
1
+ import { CodexProvider } from "./provider.js";
2
+ export const providerModule = {
3
+ id: "codex",
4
+ create: () => new CodexProvider(),
5
+ onboarding: {
6
+ env: [
7
+ {
8
+ key: "CODEX_CMD",
9
+ description: "Optional codex binary path override"
10
+ }
11
+ ],
12
+ auth: {
13
+ supported: true,
14
+ description: "Runs `codex login`."
15
+ }
16
+ }
17
+ };
18
+ export { CodexProvider };
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/codex/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,EAAE,EAAE,OAAO;IACX,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE;IACjC,UAAU,EAAE;QACV,GAAG,EAAE;YACH;gBACE,GAAG,EAAE,WAAW;gBAChB,WAAW,EAAE,qCAAqC;aACnD;SACF;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,qBAAqB;SACnC;KACF;CACF,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ProviderAuthOptions, ProviderInvokeOptions } from "../../types.js";
2
+ import { BaseCliProvider } from "../../cli-provider.js";
3
+ export declare class CodexProvider extends BaseCliProvider {
4
+ constructor();
5
+ protected buildInvocationArgs(options: ProviderInvokeOptions): string[];
6
+ protected buildAuthInvocationArgs(options: ProviderAuthOptions): string[];
7
+ }
@@ -0,0 +1,31 @@
1
+ import { BaseCliProvider } from "../../cli-provider.js";
2
+ export class CodexProvider extends BaseCliProvider {
3
+ constructor() {
4
+ super({
5
+ id: "codex",
6
+ displayName: "Codex CLI",
7
+ kind: "cli",
8
+ command: "codex",
9
+ commandEnvVar: "CODEX_CMD",
10
+ capabilities: {
11
+ agent: false,
12
+ model: true,
13
+ auth: true,
14
+ passthrough: true
15
+ }
16
+ });
17
+ }
18
+ buildInvocationArgs(options) {
19
+ const args = ["exec", "--skip-git-repo-check"];
20
+ if (options.model) {
21
+ args.push("--model", options.model);
22
+ }
23
+ args.push(...(options.passthroughArgs ?? []));
24
+ args.push(options.message);
25
+ return args;
26
+ }
27
+ buildAuthInvocationArgs(options) {
28
+ return ["login", ...(options.passthroughArgs ?? [])];
29
+ }
30
+ }
31
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/codex/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,OAAO,aAAc,SAAQ,eAAe;IAChD;QACE,KAAK,CAAC;YACJ,EAAE,EAAE,OAAO;YACX,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,WAAW;YAC1B,YAAY,EAAE;gBACZ,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAES,mBAAmB,CAAC,OAA8B;QAC1D,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAE/C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE3B,OAAO,IAAI,CAAC;IACd,CAAC;IAEkB,uBAAuB,CAAC,OAA4B;QACrE,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderModule } from "../../provider-module.js";
2
+ import { CursorProvider } from "./provider.js";
3
+ export declare const providerModule: ProviderModule;
4
+ export { CursorProvider };
@@ -0,0 +1,19 @@
1
+ import { CursorProvider } from "./provider.js";
2
+ export const providerModule = {
3
+ id: "cursor",
4
+ create: () => new CursorProvider(),
5
+ onboarding: {
6
+ env: [
7
+ {
8
+ key: "CURSOR_CMD",
9
+ description: "Optional cursor binary path override"
10
+ }
11
+ ],
12
+ auth: {
13
+ supported: true,
14
+ description: "Runs `cursor agent login` (or `cursor-agent login`)."
15
+ }
16
+ }
17
+ };
18
+ export { CursorProvider };
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/cursor/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;IAClC,UAAU,EAAE;QACV,GAAG,EAAE;YACH;gBACE,GAAG,EAAE,YAAY;gBACjB,WAAW,EAAE,sCAAsC;aACpD;SACF;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,sDAAsD;SACpE;KACF;CACF,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ProviderAuthOptions, ProviderInvocation, ProviderInvokeOptions } from "../../types.js";
2
+ import { BaseCliProvider } from "../../cli-provider.js";
3
+ export declare class CursorProvider extends BaseCliProvider {
4
+ constructor();
5
+ protected buildInvocationArgs(options: ProviderInvokeOptions, command: string): string[];
6
+ protected buildAuthInvocationArgs(options: ProviderAuthOptions, command: string): string[];
7
+ buildInvocation(options: ProviderInvokeOptions, env?: NodeJS.ProcessEnv): ProviderInvocation;
8
+ buildAuthInvocation(options?: ProviderAuthOptions, env?: NodeJS.ProcessEnv): ProviderInvocation;
9
+ }
@@ -0,0 +1,44 @@
1
+ import path from "node:path";
2
+ import { BaseCliProvider } from "../../cli-provider.js";
3
+ export class CursorProvider extends BaseCliProvider {
4
+ constructor() {
5
+ super({
6
+ id: "cursor",
7
+ displayName: "Cursor",
8
+ kind: "cli",
9
+ command: "cursor",
10
+ commandEnvVar: "CURSOR_CMD",
11
+ capabilities: {
12
+ agent: false,
13
+ model: false,
14
+ auth: true,
15
+ passthrough: true
16
+ }
17
+ });
18
+ }
19
+ buildInvocationArgs(options, command) {
20
+ const payload = [...(options.passthroughArgs ?? []), options.message];
21
+ if (isCursorAgentCommand(command)) {
22
+ return payload;
23
+ }
24
+ return ["agent", ...payload];
25
+ }
26
+ buildAuthInvocationArgs(options, command) {
27
+ const payload = ["login", ...(options.passthroughArgs ?? [])];
28
+ if (isCursorAgentCommand(command)) {
29
+ return payload;
30
+ }
31
+ return ["agent", ...payload];
32
+ }
33
+ buildInvocation(options, env = process.env) {
34
+ return super.buildInvocation(options, env);
35
+ }
36
+ buildAuthInvocation(options = {}, env = process.env) {
37
+ return super.buildAuthInvocation(options, env);
38
+ }
39
+ }
40
+ function isCursorAgentCommand(command) {
41
+ const executable = path.basename(command).toLowerCase();
42
+ return executable === "cursor-agent" || executable === "cursor-agent.exe";
43
+ }
44
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/cursor/provider.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,OAAO,cAAe,SAAQ,eAAe;IACjD;QACE,KAAK,CAAC;YACJ,EAAE,EAAE,QAAQ;YACZ,WAAW,EAAE,QAAQ;YACrB,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,QAAQ;YACjB,aAAa,EAAE,YAAY;YAC3B,YAAY,EAAE;gBACZ,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAES,mBAAmB,CAAC,OAA8B,EAAE,OAAe;QAC3E,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEtE,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IAC/B,CAAC;IAEkB,uBAAuB,CAAC,OAA4B,EAAE,OAAe;QACtF,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;QAE9D,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IAC/B,CAAC;IAEe,eAAe,CAC7B,OAA8B,EAC9B,MAAyB,OAAO,CAAC,GAAG;QAEpC,OAAO,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAEe,mBAAmB,CACjC,UAA+B,EAAE,EACjC,MAAyB,OAAO,CAAC,GAAG;QAEpC,OAAO,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;CACF;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,OAAO,UAAU,KAAK,cAAc,IAAI,UAAU,KAAK,kBAAkB,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderModule } from "../../provider-module.js";
2
+ import { GeminiProvider } from "./provider.js";
3
+ export declare const providerModule: ProviderModule;
4
+ export { GeminiProvider };
@@ -0,0 +1,33 @@
1
+ import { GeminiProvider } from "./provider.js";
2
+ export const providerModule = {
3
+ id: "gemini",
4
+ create: () => new GeminiProvider(),
5
+ onboarding: {
6
+ env: [
7
+ {
8
+ key: "GEMINI_CMD",
9
+ description: "Optional gemini binary path override"
10
+ },
11
+ {
12
+ key: "GEMINI_MODEL",
13
+ description: "Optional default model id"
14
+ },
15
+ {
16
+ key: "GEMINI_API_KEY",
17
+ description: "Optional Gemini API key",
18
+ secret: true
19
+ },
20
+ {
21
+ key: "GOOGLE_API_KEY",
22
+ description: "Optional Google API key",
23
+ secret: true
24
+ }
25
+ ],
26
+ auth: {
27
+ supported: false,
28
+ description: "Gemini CLI uses environment credentials or interactive first-run login."
29
+ }
30
+ }
31
+ };
32
+ export { GeminiProvider };
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/gemini/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,EAAE,EAAE,QAAQ;IACZ,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;IAClC,UAAU,EAAE;QACV,GAAG,EAAE;YACH;gBACE,GAAG,EAAE,YAAY;gBACjB,WAAW,EAAE,sCAAsC;aACpD;YACD;gBACE,GAAG,EAAE,cAAc;gBACnB,WAAW,EAAE,2BAA2B;aACzC;YACD;gBACE,GAAG,EAAE,gBAAgB;gBACrB,WAAW,EAAE,yBAAyB;gBACtC,MAAM,EAAE,IAAI;aACb;YACD;gBACE,GAAG,EAAE,gBAAgB;gBACrB,WAAW,EAAE,yBAAyB;gBACtC,MAAM,EAAE,IAAI;aACb;SACF;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,yEAAyE;SACvF;KACF;CACF,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ProviderInvokeOptions } from "../../types.js";
2
+ import { BaseCliProvider } from "../../cli-provider.js";
3
+ export declare class GeminiProvider extends BaseCliProvider {
4
+ constructor();
5
+ protected buildInvocationArgs(options: ProviderInvokeOptions): string[];
6
+ buildInvocation(options: ProviderInvokeOptions, env?: NodeJS.ProcessEnv): import("../../types.js").ProviderInvocation;
7
+ }
@@ -0,0 +1,36 @@
1
+ import { BaseCliProvider } from "../../cli-provider.js";
2
+ export class GeminiProvider extends BaseCliProvider {
3
+ constructor() {
4
+ super({
5
+ id: "gemini",
6
+ displayName: "Gemini CLI",
7
+ kind: "cli",
8
+ command: "gemini",
9
+ commandEnvVar: "GEMINI_CMD",
10
+ capabilities: {
11
+ agent: false,
12
+ model: true,
13
+ auth: false,
14
+ passthrough: true
15
+ }
16
+ });
17
+ }
18
+ buildInvocationArgs(options) {
19
+ const args = [];
20
+ const model = options.model?.trim();
21
+ if (model) {
22
+ args.push("--model", model);
23
+ }
24
+ args.push(...(options.passthroughArgs ?? []));
25
+ args.push("--prompt", options.message);
26
+ return args;
27
+ }
28
+ buildInvocation(options, env = process.env) {
29
+ const defaultModel = env.GEMINI_MODEL?.trim();
30
+ return super.buildInvocation({
31
+ ...options,
32
+ model: options.model?.trim() || defaultModel || undefined
33
+ }, env);
34
+ }
35
+ }
36
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/gemini/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,OAAO,cAAe,SAAQ,eAAe;IACjD;QACE,KAAK,CAAC;YACJ,EAAE,EAAE,QAAQ;YACZ,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,QAAQ;YACjB,aAAa,EAAE,YAAY;YAC3B,YAAY,EAAE;gBACZ,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,KAAK;gBACX,WAAW,EAAE,IAAI;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAES,mBAAmB,CAAC,OAA8B;QAC1D,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,eAAe,CAC7B,OAA8B,EAC9B,MAAyB,OAAO,CAAC,GAAG;QAEpC,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC,eAAe,CAC1B;YACE,GAAG,OAAO;YACV,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,YAAY,IAAI,SAAS;SAC1D,EACD,GAAG,CACJ,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderModule } from "../../provider-module.js";
2
+ import { GrokProvider } from "./provider.js";
3
+ export declare const providerModule: ProviderModule;
4
+ export { GrokProvider };
@@ -0,0 +1,41 @@
1
+ import { GrokProvider } from "./provider.js";
2
+ export const providerModule = {
3
+ id: "grok",
4
+ create: () => new GrokProvider(),
5
+ onboarding: {
6
+ env: [
7
+ {
8
+ key: "XAI_API_KEY",
9
+ description: "xAI API key",
10
+ required: true,
11
+ secret: true
12
+ },
13
+ {
14
+ key: "GROK_BASE_URL",
15
+ description: "Optional Grok-compatible base URL"
16
+ },
17
+ {
18
+ key: "GROK_ENDPOINT_PATH",
19
+ description: "Optional endpoint path (default: /responses)"
20
+ },
21
+ {
22
+ key: "GROK_ENDPOINT",
23
+ description: "Optional full endpoint override"
24
+ },
25
+ {
26
+ key: "GROK_MODEL",
27
+ description: "Optional default model id"
28
+ },
29
+ {
30
+ key: "GROK_API_STYLE",
31
+ description: "Optional API style override: responses or chat"
32
+ }
33
+ ],
34
+ auth: {
35
+ supported: false,
36
+ description: "Grok uses API keys."
37
+ }
38
+ }
39
+ };
40
+ export { GrokProvider };
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/grok/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,EAAE,EAAE,MAAM;IACV,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE;IAChC,UAAU,EAAE;QACV,GAAG,EAAE;YACH;gBACE,GAAG,EAAE,aAAa;gBAClB,WAAW,EAAE,aAAa;gBAC1B,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,IAAI;aACb;YACD;gBACE,GAAG,EAAE,eAAe;gBACpB,WAAW,EAAE,mCAAmC;aACjD;YACD;gBACE,GAAG,EAAE,oBAAoB;gBACzB,WAAW,EAAE,8CAA8C;aAC5D;YACD;gBACE,GAAG,EAAE,eAAe;gBACpB,WAAW,EAAE,iCAAiC;aAC/C;YACD;gBACE,GAAG,EAAE,YAAY;gBACjB,WAAW,EAAE,2BAA2B;aACzC;YACD;gBACE,GAAG,EAAE,gBAAgB;gBACrB,WAAW,EAAE,gDAAgD;aAC9D;SACF;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,qBAAqB;SACnC;KACF;CACF,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseProvider } from "../../base-provider.js";
2
+ import type { ProviderExecutionResult, ProviderInvokeOptions } from "../../types.js";
3
+ export declare class GrokProvider extends BaseProvider {
4
+ constructor();
5
+ invoke(options: ProviderInvokeOptions): Promise<ProviderExecutionResult>;
6
+ invokeAuth(): Promise<ProviderExecutionResult>;
7
+ }
@@ -0,0 +1,162 @@
1
+ import { ProviderAuthenticationError, ProviderRuntimeError, UnsupportedProviderActionError } from "../../errors.js";
2
+ import { BaseProvider } from "../../base-provider.js";
3
+ const DEFAULT_GROK_BASE_URL = "https://api.x.ai/v1";
4
+ const DEFAULT_GROK_ENDPOINT_PATH = "/responses";
5
+ const DEFAULT_GROK_MODEL = "grok-4";
6
+ export class GrokProvider extends BaseProvider {
7
+ constructor() {
8
+ super({
9
+ id: "grok",
10
+ displayName: "Grok",
11
+ kind: "http",
12
+ capabilities: {
13
+ agent: false,
14
+ model: true,
15
+ auth: false,
16
+ passthrough: false
17
+ }
18
+ });
19
+ }
20
+ async invoke(options) {
21
+ this.validateInvokeOptions(options);
22
+ const env = options.env ?? process.env;
23
+ const apiKey = env.XAI_API_KEY?.trim();
24
+ if (!apiKey) {
25
+ throw new ProviderAuthenticationError(this.id, "set XAI_API_KEY");
26
+ }
27
+ const endpoint = resolveGrokEndpoint(env);
28
+ const model = options.model || env.GROK_MODEL || DEFAULT_GROK_MODEL;
29
+ const style = resolveApiStyle(env, endpoint);
30
+ const response = await fetch(endpoint, {
31
+ method: "POST",
32
+ headers: {
33
+ Authorization: `Bearer ${apiKey}`,
34
+ "Content-Type": "application/json"
35
+ },
36
+ body: JSON.stringify(buildRequestPayload(style, model, options.message, options.systemPrompt))
37
+ });
38
+ const responseText = await response.text();
39
+ if (!response.ok) {
40
+ return {
41
+ code: 1,
42
+ stdout: "",
43
+ stderr: formatHttpError(response.status, responseText)
44
+ };
45
+ }
46
+ const output = extractGrokResponseText(responseText, style);
47
+ options.onStdout?.(output);
48
+ return {
49
+ code: 0,
50
+ stdout: output,
51
+ stderr: ""
52
+ };
53
+ }
54
+ invokeAuth() {
55
+ throw new UnsupportedProviderActionError(this.id, "auth");
56
+ }
57
+ }
58
+ function resolveGrokEndpoint(env) {
59
+ const endpointOverride = env.GROK_ENDPOINT?.trim();
60
+ if (endpointOverride) {
61
+ return endpointOverride;
62
+ }
63
+ const baseUrl = (env.GROK_BASE_URL?.trim() || DEFAULT_GROK_BASE_URL).replace(/\/+$/, "");
64
+ const endpointPath = env.GROK_ENDPOINT_PATH?.trim() || DEFAULT_GROK_ENDPOINT_PATH;
65
+ return `${baseUrl}${endpointPath.startsWith("/") ? "" : "/"}${endpointPath}`;
66
+ }
67
+ function resolveApiStyle(env, endpoint) {
68
+ const explicit = env.GROK_API_STYLE?.trim().toLowerCase();
69
+ if (explicit === "responses" || explicit === "chat") {
70
+ return explicit;
71
+ }
72
+ if (endpoint.toLowerCase().includes("/chat/completions")) {
73
+ return "chat";
74
+ }
75
+ return "responses";
76
+ }
77
+ function buildRequestPayload(style, model, message, systemPrompt) {
78
+ const trimmedSystemPrompt = systemPrompt?.trim();
79
+ if (style === "chat") {
80
+ const messages = [];
81
+ if (trimmedSystemPrompt) {
82
+ messages.push({ role: "system", content: trimmedSystemPrompt });
83
+ }
84
+ messages.push({ role: "user", content: message });
85
+ return {
86
+ model,
87
+ messages
88
+ };
89
+ }
90
+ if (trimmedSystemPrompt) {
91
+ return {
92
+ model,
93
+ input: [
94
+ { role: "system", content: trimmedSystemPrompt },
95
+ { role: "user", content: message }
96
+ ]
97
+ };
98
+ }
99
+ return {
100
+ model,
101
+ input: message
102
+ };
103
+ }
104
+ function extractGrokResponseText(raw, style) {
105
+ let payload;
106
+ try {
107
+ payload = JSON.parse(raw);
108
+ }
109
+ catch {
110
+ throw new ProviderRuntimeError("grok", "received non-JSON response");
111
+ }
112
+ if (typeof payload !== "object" || payload === null) {
113
+ throw new ProviderRuntimeError("grok", "received invalid response payload");
114
+ }
115
+ if (style === "chat") {
116
+ return extractGrokChatText(payload);
117
+ }
118
+ return extractGrokResponsesText(payload);
119
+ }
120
+ function extractGrokResponsesText(payload) {
121
+ const record = payload;
122
+ if (typeof record.output_text === "string" && record.output_text.length > 0) {
123
+ return ensureTrailingNewline(record.output_text);
124
+ }
125
+ const textBlocks = (record.output ?? [])
126
+ .flatMap((entry) => entry.content ?? [])
127
+ .filter((entry) => entry.type === "output_text" && typeof entry.text === "string")
128
+ .map((entry) => entry.text)
129
+ .join("\n");
130
+ if (!textBlocks) {
131
+ throw new ProviderRuntimeError("grok", "no textual output found in response");
132
+ }
133
+ return ensureTrailingNewline(textBlocks);
134
+ }
135
+ function extractGrokChatText(payload) {
136
+ const record = payload;
137
+ const content = record.choices?.[0]?.message?.content;
138
+ if (typeof content === "string" && content.length > 0) {
139
+ return ensureTrailingNewline(content);
140
+ }
141
+ if (Array.isArray(content)) {
142
+ const text = content
143
+ .filter((entry) => entry.type === "text" && typeof entry.text === "string")
144
+ .map((entry) => entry.text)
145
+ .join("\n");
146
+ if (text) {
147
+ return ensureTrailingNewline(text);
148
+ }
149
+ }
150
+ throw new ProviderRuntimeError("grok", "no textual output found in response");
151
+ }
152
+ function ensureTrailingNewline(value) {
153
+ return value.endsWith("\n") ? value : `${value}\n`;
154
+ }
155
+ function formatHttpError(status, body) {
156
+ const content = body.trim();
157
+ if (!content) {
158
+ return `HTTP ${status}\n`;
159
+ }
160
+ return `HTTP ${status}: ${content}\n`;
161
+ }
162
+ //# sourceMappingURL=provider.js.map