@opengoat/core 2026.2.9 → 2026.2.13

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 (193) hide show
  1. package/README.md +3 -3
  2. package/dist/core/acp/application/acp-agent.js +4 -8
  3. package/dist/core/acp/application/acp-agent.js.map +1 -1
  4. package/dist/core/agents/application/agent-manifest.service.d.ts +1 -4
  5. package/dist/core/agents/application/agent-manifest.service.js +39 -52
  6. package/dist/core/agents/application/agent-manifest.service.js.map +1 -1
  7. package/dist/core/agents/application/agent.service.d.ts +42 -4
  8. package/dist/core/agents/application/agent.service.js +439 -55
  9. package/dist/core/agents/application/agent.service.js.map +1 -1
  10. package/dist/core/agents/domain/agent-manifest.d.ts +10 -4
  11. package/dist/core/agents/domain/agent-manifest.js +118 -25
  12. package/dist/core/agents/domain/agent-manifest.js.map +1 -1
  13. package/dist/core/agents/index.d.ts +1 -3
  14. package/dist/core/agents/index.js +1 -3
  15. package/dist/core/agents/index.js.map +1 -1
  16. package/dist/core/boards/application/board.service.d.ts +64 -0
  17. package/dist/core/boards/application/board.service.js +590 -0
  18. package/dist/core/boards/application/board.service.js.map +1 -0
  19. package/dist/core/boards/domain/board.d.ts +30 -0
  20. package/dist/core/boards/domain/board.js +2 -0
  21. package/dist/core/boards/domain/board.js.map +1 -0
  22. package/dist/core/boards/index.d.ts +2 -0
  23. package/dist/core/boards/index.js +2 -0
  24. package/dist/core/boards/index.js.map +1 -0
  25. package/dist/core/bootstrap/application/bootstrap.service.d.ts +1 -2
  26. package/dist/core/bootstrap/application/bootstrap.service.js +14 -19
  27. package/dist/core/bootstrap/application/bootstrap.service.js.map +1 -1
  28. package/dist/core/domain/agent-id.d.ts +1 -1
  29. package/dist/core/domain/agent-id.js +1 -1
  30. package/dist/core/domain/agent-id.js.map +1 -1
  31. package/dist/core/domain/agent.d.ts +31 -8
  32. package/dist/core/opengoat/application/opengoat.service.d.ts +106 -27
  33. package/dist/core/opengoat/application/opengoat.service.js +1006 -136
  34. package/dist/core/opengoat/application/opengoat.service.js.map +1 -1
  35. package/dist/core/opengoat/index.d.ts +1 -0
  36. package/dist/core/orchestration/application/orchestration.service.d.ts +8 -21
  37. package/dist/core/orchestration/application/orchestration.service.js +59 -871
  38. package/dist/core/orchestration/application/orchestration.service.js.map +1 -1
  39. package/dist/core/orchestration/application/routing.service.js +10 -8
  40. package/dist/core/orchestration/application/routing.service.js.map +1 -1
  41. package/dist/core/orchestration/domain/routing.d.ts +0 -17
  42. package/dist/core/orchestration/domain/run-events.d.ts +1 -1
  43. package/dist/core/orchestration/index.d.ts +0 -2
  44. package/dist/core/orchestration/index.js +0 -1
  45. package/dist/core/orchestration/index.js.map +1 -1
  46. package/dist/core/providers/application/provider.service.d.ts +15 -32
  47. package/dist/core/providers/application/provider.service.js +115 -201
  48. package/dist/core/providers/application/provider.service.js.map +1 -1
  49. package/dist/core/providers/cli-provider.d.ts +1 -0
  50. package/dist/core/providers/cli-provider.js +66 -1
  51. package/dist/core/providers/cli-provider.js.map +1 -1
  52. package/dist/core/providers/image-input.d.ts +16 -0
  53. package/dist/core/providers/image-input.js +158 -0
  54. package/dist/core/providers/image-input.js.map +1 -0
  55. package/dist/core/providers/index.d.ts +1 -7
  56. package/dist/core/providers/index.js +0 -13
  57. package/dist/core/providers/index.js.map +1 -1
  58. package/dist/core/providers/loader.js +1 -95
  59. package/dist/core/providers/loader.js.map +1 -1
  60. package/dist/core/providers/providers/openclaw/provider.js +213 -32
  61. package/dist/core/providers/providers/openclaw/provider.js.map +1 -1
  62. package/dist/core/providers/types.d.ts +8 -3
  63. package/dist/core/scenarios/application/scenario-runner.service.d.ts +0 -1
  64. package/dist/core/scenarios/application/scenario-runner.service.js +30 -87
  65. package/dist/core/scenarios/application/scenario-runner.service.js.map +1 -1
  66. package/dist/core/scenarios/domain/scenario.d.ts +0 -15
  67. package/dist/core/sessions/application/session.service.d.ts +10 -4
  68. package/dist/core/sessions/application/session.service.js +87 -89
  69. package/dist/core/sessions/application/session.service.js.map +1 -1
  70. package/dist/core/sessions/domain/session.d.ts +3 -3
  71. package/dist/core/sessions/domain/transcript.d.ts +1 -1
  72. package/dist/core/sessions/index.d.ts +1 -1
  73. package/dist/core/sessions/index.js.map +1 -1
  74. package/dist/core/skills/application/skill.service.d.ts +2 -3
  75. package/dist/core/skills/application/skill.service.js +153 -56
  76. package/dist/core/skills/application/skill.service.js.map +1 -1
  77. package/dist/core/skills/domain/skill.d.ts +2 -2
  78. package/dist/core/skills/domain/skill.js +4 -2
  79. package/dist/core/skills/domain/skill.js.map +1 -1
  80. package/dist/core/templates/assets/ceo/AGENTS.md +20 -0
  81. package/dist/core/templates/assets/ceo/ROLE.md +13 -0
  82. package/dist/core/templates/assets/ceo/SOUL.md +15 -0
  83. package/dist/core/templates/assets/skills/og-board-individual/SKILL.md +148 -0
  84. package/dist/core/templates/assets/skills/og-board-manager/SKILL.md +140 -0
  85. package/dist/core/templates/default-templates.d.ts +12 -14
  86. package/dist/core/templates/default-templates.js +81 -213
  87. package/dist/core/templates/default-templates.js.map +1 -1
  88. package/dist/index.d.ts +1 -4
  89. package/dist/index.js +1 -4
  90. package/dist/index.js.map +1 -1
  91. package/package.json +16 -13
  92. package/dist/core/agents/application/workspace-context.service.d.ts +0 -28
  93. package/dist/core/agents/application/workspace-context.service.js +0 -157
  94. package/dist/core/agents/application/workspace-context.service.js.map +0 -1
  95. package/dist/core/agents/domain/workspace-context.d.ts +0 -13
  96. package/dist/core/agents/domain/workspace-context.js +0 -14
  97. package/dist/core/agents/domain/workspace-context.js.map +0 -1
  98. package/dist/core/gateway/domain/protocol.d.ts +0 -113
  99. package/dist/core/gateway/domain/protocol.js +0 -394
  100. package/dist/core/gateway/domain/protocol.js.map +0 -1
  101. package/dist/core/gateway/index.d.ts +0 -2
  102. package/dist/core/gateway/index.js +0 -2
  103. package/dist/core/gateway/index.js.map +0 -1
  104. package/dist/core/llm/application/vercel-ai-text-runtime.d.ts +0 -26
  105. package/dist/core/llm/application/vercel-ai-text-runtime.js +0 -223
  106. package/dist/core/llm/application/vercel-ai-text-runtime.js.map +0 -1
  107. package/dist/core/llm/domain/text-runtime.d.ts +0 -22
  108. package/dist/core/llm/domain/text-runtime.js +0 -2
  109. package/dist/core/llm/domain/text-runtime.js.map +0 -1
  110. package/dist/core/llm/index.d.ts +0 -2
  111. package/dist/core/llm/index.js +0 -2
  112. package/dist/core/llm/index.js.map +0 -1
  113. package/dist/core/orchestration/application/orchestration-planner.service.d.ts +0 -28
  114. package/dist/core/orchestration/application/orchestration-planner.service.js +0 -279
  115. package/dist/core/orchestration/application/orchestration-planner.service.js.map +0 -1
  116. package/dist/core/orchestration/domain/loop.d.ts +0 -119
  117. package/dist/core/orchestration/domain/loop.js +0 -2
  118. package/dist/core/orchestration/domain/loop.js.map +0 -1
  119. package/dist/core/plugins/application/plugin.service.d.ts +0 -32
  120. package/dist/core/plugins/application/plugin.service.js +0 -236
  121. package/dist/core/plugins/application/plugin.service.js.map +0 -1
  122. package/dist/core/plugins/domain/openclaw-compat.d.ts +0 -60
  123. package/dist/core/plugins/domain/openclaw-compat.js +0 -9
  124. package/dist/core/plugins/domain/openclaw-compat.js.map +0 -1
  125. package/dist/core/plugins/index.d.ts +0 -3
  126. package/dist/core/plugins/index.js +0 -3
  127. package/dist/core/plugins/index.js.map +0 -1
  128. package/dist/core/providers/onboarding.d.ts +0 -13
  129. package/dist/core/providers/onboarding.js +0 -149
  130. package/dist/core/providers/onboarding.js.map +0 -1
  131. package/dist/core/providers/providers/claude/index.d.ts +0 -4
  132. package/dist/core/providers/providers/claude/index.js +0 -19
  133. package/dist/core/providers/providers/claude/index.js.map +0 -1
  134. package/dist/core/providers/providers/claude/provider.d.ts +0 -8
  135. package/dist/core/providers/providers/claude/provider.js +0 -106
  136. package/dist/core/providers/providers/claude/provider.js.map +0 -1
  137. package/dist/core/providers/providers/codex/index.d.ts +0 -4
  138. package/dist/core/providers/providers/codex/index.js +0 -19
  139. package/dist/core/providers/providers/codex/index.js.map +0 -1
  140. package/dist/core/providers/providers/codex/provider.d.ts +0 -7
  141. package/dist/core/providers/providers/codex/provider.js +0 -31
  142. package/dist/core/providers/providers/codex/provider.js.map +0 -1
  143. package/dist/core/providers/providers/cursor/index.d.ts +0 -4
  144. package/dist/core/providers/providers/cursor/index.js +0 -19
  145. package/dist/core/providers/providers/cursor/index.js.map +0 -1
  146. package/dist/core/providers/providers/cursor/provider.d.ts +0 -11
  147. package/dist/core/providers/providers/cursor/provider.js +0 -90
  148. package/dist/core/providers/providers/cursor/provider.js.map +0 -1
  149. package/dist/core/providers/providers/extended-http/catalog.d.ts +0 -40
  150. package/dist/core/providers/providers/extended-http/catalog.js +0 -728
  151. package/dist/core/providers/providers/extended-http/catalog.js.map +0 -1
  152. package/dist/core/providers/providers/extended-http/index.d.ts +0 -5
  153. package/dist/core/providers/providers/extended-http/index.js +0 -13
  154. package/dist/core/providers/providers/extended-http/index.js.map +0 -1
  155. package/dist/core/providers/providers/extended-http/provider.d.ts +0 -31
  156. package/dist/core/providers/providers/extended-http/provider.js +0 -580
  157. package/dist/core/providers/providers/extended-http/provider.js.map +0 -1
  158. package/dist/core/providers/providers/gemini/index.d.ts +0 -4
  159. package/dist/core/providers/providers/gemini/index.js +0 -37
  160. package/dist/core/providers/providers/gemini/index.js.map +0 -1
  161. package/dist/core/providers/providers/gemini/provider.d.ts +0 -7
  162. package/dist/core/providers/providers/gemini/provider.js +0 -59
  163. package/dist/core/providers/providers/gemini/provider.js.map +0 -1
  164. package/dist/core/providers/providers/grok/index.d.ts +0 -4
  165. package/dist/core/providers/providers/grok/index.js +0 -41
  166. package/dist/core/providers/providers/grok/index.js.map +0 -1
  167. package/dist/core/providers/providers/grok/provider.d.ts +0 -13
  168. package/dist/core/providers/providers/grok/provider.js +0 -95
  169. package/dist/core/providers/providers/grok/provider.js.map +0 -1
  170. package/dist/core/providers/providers/openai/index.d.ts +0 -4
  171. package/dist/core/providers/providers/openai/index.js +0 -45
  172. package/dist/core/providers/providers/openai/index.js.map +0 -1
  173. package/dist/core/providers/providers/openai/provider.d.ts +0 -14
  174. package/dist/core/providers/providers/openai/provider.js +0 -203
  175. package/dist/core/providers/providers/openai/provider.js.map +0 -1
  176. package/dist/core/providers/providers/opencode/index.d.ts +0 -4
  177. package/dist/core/providers/providers/opencode/index.js +0 -23
  178. package/dist/core/providers/providers/opencode/index.js.map +0 -1
  179. package/dist/core/providers/providers/opencode/provider.d.ts +0 -11
  180. package/dist/core/providers/providers/opencode/provider.js +0 -215
  181. package/dist/core/providers/providers/opencode/provider.js.map +0 -1
  182. package/dist/core/providers/providers/openrouter/index.d.ts +0 -4
  183. package/dist/core/providers/providers/openrouter/index.js +0 -37
  184. package/dist/core/providers/providers/openrouter/index.js.map +0 -1
  185. package/dist/core/providers/providers/openrouter/provider.d.ts +0 -13
  186. package/dist/core/providers/providers/openrouter/provider.js +0 -80
  187. package/dist/core/providers/providers/openrouter/provider.js.map +0 -1
  188. package/dist/platform/node/opengoat-gateway-client.d.ts +0 -19
  189. package/dist/platform/node/opengoat-gateway-client.js +0 -194
  190. package/dist/platform/node/opengoat-gateway-client.js.map +0 -1
  191. package/dist/platform/node/opengoat-gateway-server.d.ts +0 -53
  192. package/dist/platform/node/opengoat-gateway-server.js +0 -906
  193. package/dist/platform/node/opengoat-gateway-server.js.map +0 -1
@@ -1,23 +0,0 @@
1
- import { OpenCodeProvider } from "./provider.js";
2
- export const providerModule = {
3
- id: "opencode",
4
- create: () => new OpenCodeProvider(),
5
- onboarding: {
6
- env: [
7
- {
8
- key: "OPENCODE_CMD",
9
- description: "Optional opencode binary path override"
10
- },
11
- {
12
- key: "OPENCODE_MODEL",
13
- description: "Optional default model id in provider/model format"
14
- }
15
- ],
16
- auth: {
17
- supported: true,
18
- description: "Runs `opencode auth login`."
19
- }
20
- }
21
- };
22
- export { OpenCodeProvider };
23
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/opencode/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,EAAE,EAAE,UAAU;IACd,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,gBAAgB,EAAE;IACpC,UAAU,EAAE;QACV,GAAG,EAAE;YACH;gBACE,GAAG,EAAE,cAAc;gBACnB,WAAW,EAAE,wCAAwC;aACtD;YACD;gBACE,GAAG,EAAE,gBAAgB;gBACrB,WAAW,EAAE,oDAAoD;aAClE;SACF;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,6BAA6B;SAC3C;KACF;CACF,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,11 +0,0 @@
1
- import { BaseCliProvider } from "../../cli-provider.js";
2
- import type { ProviderAuthOptions, ProviderCreateAgentOptions, ProviderExecutionResult, ProviderInvokeOptions } from "../../types.js";
3
- export declare class OpenCodeProvider extends BaseCliProvider {
4
- constructor();
5
- protected buildInvocationArgs(options: ProviderInvokeOptions): string[];
6
- protected buildAuthInvocationArgs(options: ProviderAuthOptions): string[];
7
- createAgent(options: ProviderCreateAgentOptions): Promise<ProviderExecutionResult>;
8
- buildInvocation(options: ProviderInvokeOptions, env?: NodeJS.ProcessEnv): import("../../types.js").ProviderInvocation;
9
- invoke(options: ProviderInvokeOptions): Promise<ProviderExecutionResult>;
10
- private readRecentSessionIds;
11
- }
@@ -1,215 +0,0 @@
1
- import { mkdir, writeFile } from "node:fs/promises";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import { executeCommand } from "../../command-executor.js";
5
- import { BaseCliProvider } from "../../cli-provider.js";
6
- import { attachProviderSessionId } from "../../provider-session.js";
7
- export class OpenCodeProvider extends BaseCliProvider {
8
- constructor() {
9
- super({
10
- id: "opencode",
11
- displayName: "OpenCode",
12
- kind: "cli",
13
- command: "opencode",
14
- commandEnvVar: "OPENCODE_CMD",
15
- capabilities: {
16
- agent: false,
17
- model: true,
18
- auth: true,
19
- passthrough: true,
20
- agentCreate: true
21
- }
22
- });
23
- }
24
- buildInvocationArgs(options) {
25
- const args = ["run"];
26
- if (options.providerSessionId?.trim()) {
27
- args.push("--session", options.providerSessionId.trim());
28
- }
29
- if (options.model) {
30
- args.push("--model", options.model);
31
- }
32
- args.push(...(options.passthroughArgs ?? []));
33
- args.push(options.message);
34
- return args;
35
- }
36
- buildAuthInvocationArgs(options) {
37
- return ["auth", "login", ...(options.passthroughArgs ?? [])];
38
- }
39
- async createAgent(options) {
40
- const env = options.env ?? process.env;
41
- const agentFilePath = resolveOpenCodeAgentFilePath(options.agentId, env);
42
- try {
43
- await mkdir(path.dirname(agentFilePath), { recursive: true });
44
- const definition = renderOpenCodeAgentDefinition(options.displayName);
45
- await writeFile(agentFilePath, definition, { encoding: "utf-8", flag: "wx" });
46
- return {
47
- code: 0,
48
- stdout: `Created OpenCode agent '${options.agentId}' at ${agentFilePath}\n`,
49
- stderr: ""
50
- };
51
- }
52
- catch (error) {
53
- if (isAlreadyExistsError(error)) {
54
- return {
55
- code: 0,
56
- stdout: `OpenCode agent '${options.agentId}' already exists at ${agentFilePath}\n`,
57
- stderr: ""
58
- };
59
- }
60
- return {
61
- code: 1,
62
- stdout: "",
63
- stderr: `Failed to create OpenCode agent '${options.agentId}': ${formatErrorMessage(error)}\n`
64
- };
65
- }
66
- }
67
- buildInvocation(options, env = process.env) {
68
- const defaultModel = env.OPENCODE_MODEL?.trim();
69
- return super.buildInvocation({
70
- ...options,
71
- model: options.model?.trim() || defaultModel || undefined
72
- }, env);
73
- }
74
- async invoke(options) {
75
- const env = options.env ?? process.env;
76
- const requestedSessionId = options.providerSessionId?.trim();
77
- const beforeSnapshot = requestedSessionId
78
- ? []
79
- : await this.readRecentSessionIds(env, options.cwd, options.abortSignal);
80
- const result = await super.invoke(options);
81
- if (requestedSessionId) {
82
- return attachProviderSessionId(result, requestedSessionId);
83
- }
84
- const afterSnapshot = await this.readRecentSessionIds(env, options.cwd, options.abortSignal);
85
- const inferredSessionId = inferNewSessionId(beforeSnapshot, afterSnapshot);
86
- return attachProviderSessionId(result, inferredSessionId);
87
- }
88
- async readRecentSessionIds(env, cwd, abortSignal) {
89
- try {
90
- const result = await executeCommand({
91
- command: this.resolveCommand(env),
92
- args: ["session", "list", "--format", "json", "--max-count", "20"],
93
- cwd,
94
- env,
95
- abortSignal
96
- });
97
- if (result.code !== 0) {
98
- return [];
99
- }
100
- return extractSessionIdsFromListOutput(result.stdout);
101
- }
102
- catch (error) {
103
- if (error instanceof Error && error.name === "AbortError") {
104
- throw error;
105
- }
106
- return [];
107
- }
108
- }
109
- }
110
- function resolveOpenCodeAgentFilePath(agentId, env) {
111
- const configDir = resolveOpenCodeConfigDir(env);
112
- return path.join(configDir, "agent", `${agentId}.md`);
113
- }
114
- function resolveOpenCodeConfigDir(env) {
115
- const explicitConfigDir = env.OPENCODE_CONFIG_DIR?.trim();
116
- if (explicitConfigDir) {
117
- return explicitConfigDir;
118
- }
119
- if (process.platform === "win32") {
120
- const appDataDir = env.APPDATA?.trim();
121
- if (appDataDir) {
122
- return path.join(appDataDir, "opencode");
123
- }
124
- }
125
- const xdgConfigHome = env.XDG_CONFIG_HOME?.trim();
126
- if (xdgConfigHome) {
127
- return path.join(xdgConfigHome, "opencode");
128
- }
129
- return path.join(resolveHomeDir(env), ".config", "opencode");
130
- }
131
- function resolveHomeDir(env) {
132
- return env.HOME?.trim() || env.USERPROFILE?.trim() || os.homedir();
133
- }
134
- function renderOpenCodeAgentDefinition(displayName) {
135
- const safeDescription = JSON.stringify(`${displayName} agent managed by OpenGoat`);
136
- return [
137
- "---",
138
- `description: ${safeDescription}`,
139
- "mode: subagent",
140
- "---",
141
- "",
142
- `You are ${displayName}, an agent managed by OpenGoat.`,
143
- "Follow instructions from OpenGoat and the user."
144
- ].join("\n");
145
- }
146
- function isAlreadyExistsError(error) {
147
- return Boolean(error &&
148
- typeof error === "object" &&
149
- "code" in error &&
150
- error.code === "EEXIST");
151
- }
152
- function formatErrorMessage(error) {
153
- if (error instanceof Error && error.message.trim()) {
154
- return error.message.trim();
155
- }
156
- return "unknown error";
157
- }
158
- function inferNewSessionId(before, after) {
159
- if (after.length === 0) {
160
- return undefined;
161
- }
162
- const prior = new Set(before);
163
- const created = after.find((sessionId) => !prior.has(sessionId));
164
- return created ?? after[0];
165
- }
166
- function extractSessionIdsFromListOutput(raw) {
167
- const trimmed = raw.trim();
168
- if (!trimmed) {
169
- return [];
170
- }
171
- let payload;
172
- try {
173
- payload = JSON.parse(trimmed);
174
- }
175
- catch {
176
- return [];
177
- }
178
- return collectSessionIds(payload);
179
- }
180
- function collectSessionIds(value) {
181
- const unique = new Set();
182
- const walk = (node) => {
183
- if (Array.isArray(node)) {
184
- for (const entry of node) {
185
- walk(entry);
186
- }
187
- return;
188
- }
189
- if (!node || typeof node !== "object") {
190
- return;
191
- }
192
- const record = node;
193
- const directId = readSessionId(record.id) ||
194
- readSessionId(record.sessionId) ||
195
- readSessionId(record.sessionID);
196
- if (directId) {
197
- unique.add(directId);
198
- }
199
- for (const nested of Object.values(record)) {
200
- if (nested && typeof nested === "object") {
201
- walk(nested);
202
- }
203
- }
204
- };
205
- walk(value);
206
- return [...unique];
207
- }
208
- function readSessionId(value) {
209
- if (typeof value !== "string") {
210
- return undefined;
211
- }
212
- const trimmed = value.trim();
213
- return trimmed || undefined;
214
- }
215
- //# sourceMappingURL=provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/opencode/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAQpE,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IACnD;QACE,KAAK,CAAC;YACJ,EAAE,EAAE,UAAU;YACd,WAAW,EAAE,UAAU;YACvB,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,UAAU;YACnB,aAAa,EAAE,cAAc;YAC7B,YAAY,EAAE;gBACZ,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI;gBACjB,WAAW,EAAE,IAAI;aAClB;SACF,CAAC,CAAC;IACL,CAAC;IAES,mBAAmB,CAAC,OAA8B;QAC1D,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAErB,IAAI,OAAO,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,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,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEe,KAAK,CAAC,WAAW,CAC/B,OAAmC;QAEnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACvC,MAAM,aAAa,GAAG,4BAA4B,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAEzE,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,MAAM,UAAU,GAAG,6BAA6B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACtE,MAAM,SAAS,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,OAAO;gBACL,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,2BAA2B,OAAO,CAAC,OAAO,QAAQ,aAAa,IAAI;gBAC3E,MAAM,EAAE,EAAE;aACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO;oBACL,IAAI,EAAE,CAAC;oBACP,MAAM,EAAE,mBAAmB,OAAO,CAAC,OAAO,uBAAuB,aAAa,IAAI;oBAClF,MAAM,EAAE,EAAE;iBACX,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,oCAAoC,OAAO,CAAC,OAAO,MAAM,kBAAkB,CAAC,KAAK,CAAC,IAAI;aAC/F,CAAC;QACJ,CAAC;IACH,CAAC;IAEe,eAAe,CAC7B,OAA8B,EAC9B,MAAyB,OAAO,CAAC,GAAG;QAEpC,MAAM,YAAY,GAAG,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;QAChD,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;IAEe,KAAK,CAAC,MAAM,CAAC,OAA8B;QACzD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACvC,MAAM,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;QAC7D,MAAM,cAAc,GAAG,kBAAkB;YACvC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QAC7F,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAC3E,OAAO,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,GAAsB,EACtB,GAAY,EACZ,WAAyB;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;gBAClC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;gBACjC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC;gBAClE,GAAG;gBACH,GAAG;gBACH,WAAW;aACZ,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,+BAA+B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1D,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAED,SAAS,4BAA4B,CAAC,OAAe,EAAE,GAAsB;IAC3E,MAAM,SAAS,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAsB;IACtD,MAAM,iBAAiB,GAAG,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QACvC,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAClD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,cAAc,CAAC,GAAsB;IAC5C,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,6BAA6B,CAAC,WAAmB;IACxD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,4BAA4B,CAAC,CAAC;IACnF,OAAO;QACL,KAAK;QACL,gBAAgB,eAAe,EAAE;QACjC,gBAAgB;QAChB,KAAK;QACL,EAAE;QACF,WAAW,WAAW,iCAAiC;QACvD,iDAAiD;KAClD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,OAAO,CACZ,KAAK;QACH,OAAO,KAAK,KAAK,QAAQ;QACzB,MAAM,IAAI,KAAK;QACd,KAA+B,CAAC,IAAI,KAAK,QAAQ,CACrD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAgB,EAAE,KAAe;IAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACjE,OAAO,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,+BAA+B,CAAC,GAAW;IAClD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjC,MAAM,IAAI,GAAG,CAAC,IAAa,EAAQ,EAAE;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,CAAC;YACd,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAA+B,CAAC;QAC/C,MAAM,QAAQ,GACZ,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;YAC/B,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACzC,IAAI,CAAC,MAAM,CAAC,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,KAAK,CAAC,CAAC;IACZ,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { ProviderModule } from "../../provider-module.js";
2
- import { OpenRouterProvider } from "./provider.js";
3
- export declare const providerModule: ProviderModule;
4
- export { OpenRouterProvider };
@@ -1,37 +0,0 @@
1
- import { OpenRouterProvider } from "./provider.js";
2
- export const providerModule = {
3
- id: "openrouter",
4
- create: () => new OpenRouterProvider(),
5
- onboarding: {
6
- env: [
7
- {
8
- key: "OPENROUTER_API_KEY",
9
- description: "OpenRouter API key",
10
- required: true,
11
- secret: true
12
- },
13
- {
14
- key: "OPENROUTER_ENDPOINT",
15
- description: "Optional endpoint override"
16
- },
17
- {
18
- key: "OPENROUTER_MODEL",
19
- description: "Optional default model id"
20
- },
21
- {
22
- key: "OPENROUTER_HTTP_REFERER",
23
- description: "Optional HTTP-Referer header"
24
- },
25
- {
26
- key: "OPENROUTER_X_TITLE",
27
- description: "Optional X-Title header"
28
- }
29
- ],
30
- auth: {
31
- supported: false,
32
- description: "OpenRouter uses API keys."
33
- }
34
- }
35
- };
36
- export { OpenRouterProvider };
37
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/openrouter/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,EAAE,EAAE,YAAY;IAChB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,EAAE;IACtC,UAAU,EAAE;QACV,GAAG,EAAE;YACH;gBACE,GAAG,EAAE,oBAAoB;gBACzB,WAAW,EAAE,oBAAoB;gBACjC,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,IAAI;aACb;YACD;gBACE,GAAG,EAAE,qBAAqB;gBAC1B,WAAW,EAAE,4BAA4B;aAC1C;YACD;gBACE,GAAG,EAAE,kBAAkB;gBACvB,WAAW,EAAE,2BAA2B;aACzC;YACD;gBACE,GAAG,EAAE,yBAAyB;gBAC9B,WAAW,EAAE,8BAA8B;aAC5C;YACD;gBACE,GAAG,EAAE,oBAAoB;gBACzB,WAAW,EAAE,yBAAyB;aACvC;SACF;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,2BAA2B;SACzC;KACF;CACF,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,13 +0,0 @@
1
- import { type OpenAiCompatibleTextRuntime } from "../../../llm/index.js";
2
- import { BaseProvider } from "../../base-provider.js";
3
- import type { ProviderExecutionResult, ProviderInvokeOptions } from "../../types.js";
4
- interface OpenRouterProviderDeps {
5
- runtime?: OpenAiCompatibleTextRuntime;
6
- }
7
- export declare class OpenRouterProvider extends BaseProvider {
8
- private readonly runtime;
9
- constructor(deps?: OpenRouterProviderDeps);
10
- invoke(options: ProviderInvokeOptions): Promise<ProviderExecutionResult>;
11
- invokeAuth(): Promise<ProviderExecutionResult>;
12
- }
13
- export {};
@@ -1,80 +0,0 @@
1
- import { VercelAiTextRuntime, parseLlmRuntimeError } from "../../../llm/index.js";
2
- import { ProviderAuthenticationError, UnsupportedProviderActionError } from "../../errors.js";
3
- import { BaseProvider } from "../../base-provider.js";
4
- const DEFAULT_OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
5
- const DEFAULT_OPENROUTER_MODEL = "openai/gpt-4o-mini";
6
- export class OpenRouterProvider extends BaseProvider {
7
- runtime;
8
- constructor(deps = {}) {
9
- super({
10
- id: "openrouter",
11
- displayName: "OpenRouter",
12
- kind: "http",
13
- capabilities: {
14
- agent: false,
15
- model: true,
16
- auth: false,
17
- passthrough: false
18
- }
19
- });
20
- this.runtime = deps.runtime ?? new VercelAiTextRuntime();
21
- }
22
- async invoke(options) {
23
- this.validateInvokeOptions(options);
24
- const env = options.env ?? process.env;
25
- const apiKey = env.OPENROUTER_API_KEY?.trim();
26
- if (!apiKey) {
27
- throw new ProviderAuthenticationError(this.id, "set OPENROUTER_API_KEY");
28
- }
29
- const model = options.model || env.OPENROUTER_MODEL || DEFAULT_OPENROUTER_MODEL;
30
- const headers = resolveHeaders(env);
31
- try {
32
- const result = await this.runtime.generateText({
33
- providerName: this.id,
34
- apiKey,
35
- baseURL: DEFAULT_OPENROUTER_BASE_URL,
36
- endpointOverride: env.OPENROUTER_ENDPOINT?.trim(),
37
- style: "chat",
38
- model,
39
- message: options.message,
40
- systemPrompt: options.systemPrompt,
41
- headers,
42
- abortSignal: options.abortSignal
43
- });
44
- options.onStdout?.(result.text);
45
- return {
46
- code: 0,
47
- stdout: result.text,
48
- stderr: "",
49
- providerSessionId: result.providerSessionId
50
- };
51
- }
52
- catch (error) {
53
- const details = parseLlmRuntimeError(error);
54
- return {
55
- code: 1,
56
- stdout: "",
57
- stderr: ensureTrailingNewline(details.message)
58
- };
59
- }
60
- }
61
- invokeAuth() {
62
- throw new UnsupportedProviderActionError(this.id, "auth");
63
- }
64
- }
65
- function resolveHeaders(env) {
66
- const headers = {};
67
- const referer = env.OPENROUTER_HTTP_REFERER?.trim();
68
- if (referer) {
69
- headers["HTTP-Referer"] = referer;
70
- }
71
- const title = env.OPENROUTER_X_TITLE?.trim();
72
- if (title) {
73
- headers["X-Title"] = title;
74
- }
75
- return headers;
76
- }
77
- function ensureTrailingNewline(value) {
78
- return value.endsWith("\n") ? value : `${value}\n`;
79
- }
80
- //# sourceMappingURL=provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../../src/core/providers/providers/openrouter/provider.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- export interface OpenGoatGatewayCallOptions {
2
- url: string;
3
- method: string;
4
- params?: unknown;
5
- token?: string;
6
- timeoutMs?: number;
7
- abortSignal?: AbortSignal;
8
- clientId?: string;
9
- clientDisplayName?: string;
10
- clientVersion?: string;
11
- platform?: string;
12
- mode?: string;
13
- instanceId?: string;
14
- }
15
- export interface OpenGoatGatewayConnectResult<T = unknown> {
16
- hello: unknown;
17
- payload: T;
18
- }
19
- export declare function callOpenGoatGateway<T = unknown>(options: OpenGoatGatewayCallOptions): Promise<OpenGoatGatewayConnectResult<T>>;
@@ -1,194 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { WebSocket } from "ws";
3
- import { OPENGOAT_GATEWAY_DEFAULTS, OPENGOAT_GATEWAY_PROTOCOL_VERSION } from "../../core/gateway/index.js";
4
- export async function callOpenGoatGateway(options) {
5
- const timeoutMs = resolveTimeout(options.timeoutMs);
6
- return await new Promise((resolve, reject) => {
7
- if (options.abortSignal?.aborted) {
8
- reject(createAbortError());
9
- return;
10
- }
11
- const socket = new WebSocket(options.url, {
12
- maxPayload: OPENGOAT_GATEWAY_DEFAULTS.maxPayloadBytes
13
- });
14
- const connectRequestId = randomUUID();
15
- const callRequestId = randomUUID();
16
- let settled = false;
17
- let handshakeSent = false;
18
- let helloPayload;
19
- const timeout = setTimeout(() => {
20
- finish(new Error(`Gateway timeout after ${timeoutMs}ms.`));
21
- }, timeoutMs);
22
- function onAbort() {
23
- finish(createAbortError());
24
- }
25
- const cleanup = () => {
26
- clearTimeout(timeout);
27
- socket.removeAllListeners();
28
- options.abortSignal?.removeEventListener("abort", onAbort);
29
- };
30
- const finish = (error, result) => {
31
- if (settled) {
32
- return;
33
- }
34
- settled = true;
35
- cleanup();
36
- try {
37
- socket.close();
38
- }
39
- catch {
40
- // ignore close failure
41
- }
42
- if (error) {
43
- reject(error);
44
- return;
45
- }
46
- if (!result) {
47
- reject(new Error("Gateway call completed without a result."));
48
- return;
49
- }
50
- resolve(result);
51
- };
52
- options.abortSignal?.addEventListener("abort", onAbort, { once: true });
53
- socket.on("error", (error) => {
54
- finish(error instanceof Error ? error : new Error(String(error)));
55
- });
56
- socket.on("close", (code, reasonRaw) => {
57
- if (settled) {
58
- return;
59
- }
60
- const reason = toUtf8String(reasonRaw) ?? "no close reason";
61
- finish(new Error(`Gateway closed (${code}): ${reason}`));
62
- });
63
- socket.on("message", (raw) => {
64
- const text = toUtf8String(raw);
65
- if (!text) {
66
- finish(new Error("Received invalid gateway frame payload."));
67
- return;
68
- }
69
- let frame;
70
- try {
71
- frame = JSON.parse(text);
72
- }
73
- catch {
74
- finish(new Error("Received invalid JSON from gateway."));
75
- return;
76
- }
77
- if (!isRecord(frame)) {
78
- return;
79
- }
80
- if (frame.type === "event" && frame.event === "connect.challenge") {
81
- if (handshakeSent) {
82
- return;
83
- }
84
- handshakeSent = true;
85
- const nonce = extractNonce(frame.payload);
86
- const connectPayload = {
87
- minProtocol: OPENGOAT_GATEWAY_PROTOCOL_VERSION,
88
- maxProtocol: OPENGOAT_GATEWAY_PROTOCOL_VERSION,
89
- client: {
90
- id: options.clientId ?? "opengoat-cli",
91
- displayName: options.clientDisplayName,
92
- version: options.clientVersion ?? "dev",
93
- platform: options.platform ?? process.platform,
94
- mode: options.mode ?? "operator",
95
- instanceId: options.instanceId
96
- },
97
- auth: options.token
98
- ? {
99
- token: options.token
100
- }
101
- : undefined,
102
- nonce
103
- };
104
- sendFrame(socket, {
105
- type: "req",
106
- id: connectRequestId,
107
- method: "connect",
108
- params: connectPayload
109
- });
110
- return;
111
- }
112
- if (frame.type !== "res" || typeof frame.id !== "string") {
113
- return;
114
- }
115
- const ok = frame.ok === true;
116
- if (frame.id === connectRequestId) {
117
- if (!ok) {
118
- finish(new Error(formatGatewayError(frame.error, "Gateway connect failed.")));
119
- return;
120
- }
121
- helloPayload = frame.payload;
122
- sendFrame(socket, {
123
- type: "req",
124
- id: callRequestId,
125
- method: options.method,
126
- params: options.params
127
- });
128
- return;
129
- }
130
- if (frame.id === callRequestId) {
131
- if (!ok) {
132
- finish(new Error(formatGatewayError(frame.error, `Gateway method ${options.method} failed.`)));
133
- return;
134
- }
135
- finish(undefined, {
136
- hello: helloPayload,
137
- payload: frame.payload
138
- });
139
- }
140
- });
141
- });
142
- }
143
- function createAbortError() {
144
- const error = new Error("Gateway request aborted.");
145
- error.name = "AbortError";
146
- return error;
147
- }
148
- function sendFrame(socket, frame) {
149
- socket.send(JSON.stringify(frame));
150
- }
151
- function formatGatewayError(error, fallback) {
152
- if (!isRecord(error)) {
153
- return fallback;
154
- }
155
- const message = typeof error.message === "string" && error.message.trim() ? error.message.trim() : fallback;
156
- const code = typeof error.code === "string" && error.code.trim() ? error.code.trim() : undefined;
157
- return code ? `${code}: ${message}` : message;
158
- }
159
- function extractNonce(payload) {
160
- if (!isRecord(payload)) {
161
- return undefined;
162
- }
163
- const nonce = payload.nonce;
164
- if (typeof nonce !== "string") {
165
- return undefined;
166
- }
167
- const trimmed = nonce.trim();
168
- return trimmed || undefined;
169
- }
170
- function resolveTimeout(timeoutMs) {
171
- if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs) || timeoutMs <= 0) {
172
- return 10_000;
173
- }
174
- return Math.floor(timeoutMs);
175
- }
176
- function isRecord(value) {
177
- return Boolean(value) && typeof value === "object" && !Array.isArray(value);
178
- }
179
- function toUtf8String(raw) {
180
- if (typeof raw === "string") {
181
- return raw;
182
- }
183
- if (Buffer.isBuffer(raw)) {
184
- return raw.toString("utf-8");
185
- }
186
- if (Array.isArray(raw)) {
187
- return Buffer.concat(raw).toString("utf-8");
188
- }
189
- if (raw instanceof ArrayBuffer) {
190
- return Buffer.from(raw).toString("utf-8");
191
- }
192
- return null;
193
- }
194
- //# sourceMappingURL=opengoat-gateway-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opengoat-gateway-client.js","sourceRoot":"","sources":["../../../src/platform/node/opengoat-gateway-client.ts"],"names":[],"mappings":"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"}