@opengoat/core 2026.2.9 → 2026.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/core/acp/application/acp-agent.js +4 -8
- package/dist/core/acp/application/acp-agent.js.map +1 -1
- package/dist/core/agents/application/agent-manifest.service.d.ts +1 -4
- package/dist/core/agents/application/agent-manifest.service.js +39 -52
- package/dist/core/agents/application/agent-manifest.service.js.map +1 -1
- package/dist/core/agents/application/agent.service.d.ts +43 -4
- package/dist/core/agents/application/agent.service.js +476 -55
- package/dist/core/agents/application/agent.service.js.map +1 -1
- package/dist/core/agents/domain/agent-manifest.d.ts +10 -4
- package/dist/core/agents/domain/agent-manifest.js +118 -25
- package/dist/core/agents/domain/agent-manifest.js.map +1 -1
- package/dist/core/agents/index.d.ts +1 -3
- package/dist/core/agents/index.js +1 -3
- package/dist/core/agents/index.js.map +1 -1
- package/dist/core/boards/application/board.service.d.ts +64 -0
- package/dist/core/boards/application/board.service.js +590 -0
- package/dist/core/boards/application/board.service.js.map +1 -0
- package/dist/core/boards/domain/board.d.ts +30 -0
- package/dist/core/boards/domain/board.js +2 -0
- package/dist/core/boards/domain/board.js.map +1 -0
- package/dist/core/boards/index.d.ts +2 -0
- package/dist/core/boards/index.js +2 -0
- package/dist/core/boards/index.js.map +1 -0
- package/dist/core/bootstrap/application/bootstrap.service.d.ts +5 -2
- package/dist/core/bootstrap/application/bootstrap.service.js +32 -17
- package/dist/core/bootstrap/application/bootstrap.service.js.map +1 -1
- package/dist/core/domain/agent-id.d.ts +1 -1
- package/dist/core/domain/agent-id.js +1 -1
- package/dist/core/domain/agent-id.js.map +1 -1
- package/dist/core/domain/agent.d.ts +31 -8
- package/dist/core/domain/opengoat-paths.d.ts +1 -0
- package/dist/core/opengoat/application/opengoat.service.d.ts +111 -27
- package/dist/core/opengoat/application/opengoat.service.js +1048 -136
- package/dist/core/opengoat/application/opengoat.service.js.map +1 -1
- package/dist/core/opengoat/index.d.ts +1 -0
- package/dist/core/orchestration/application/orchestration.service.d.ts +8 -21
- package/dist/core/orchestration/application/orchestration.service.js +59 -871
- package/dist/core/orchestration/application/orchestration.service.js.map +1 -1
- package/dist/core/orchestration/application/routing.service.js +10 -8
- package/dist/core/orchestration/application/routing.service.js.map +1 -1
- package/dist/core/orchestration/domain/routing.d.ts +0 -17
- package/dist/core/orchestration/domain/run-events.d.ts +1 -1
- package/dist/core/orchestration/index.d.ts +0 -2
- package/dist/core/orchestration/index.js +0 -1
- package/dist/core/orchestration/index.js.map +1 -1
- package/dist/core/providers/application/provider.service.d.ts +16 -32
- package/dist/core/providers/application/provider.service.js +178 -202
- package/dist/core/providers/application/provider.service.js.map +1 -1
- package/dist/core/providers/cli-provider.d.ts +1 -0
- package/dist/core/providers/cli-provider.js +66 -1
- package/dist/core/providers/cli-provider.js.map +1 -1
- package/dist/core/providers/image-input.d.ts +16 -0
- package/dist/core/providers/image-input.js +158 -0
- package/dist/core/providers/image-input.js.map +1 -0
- package/dist/core/providers/index.d.ts +1 -7
- package/dist/core/providers/index.js +0 -13
- package/dist/core/providers/index.js.map +1 -1
- package/dist/core/providers/loader.js +1 -95
- package/dist/core/providers/loader.js.map +1 -1
- package/dist/core/providers/providers/openclaw/provider.js +213 -32
- package/dist/core/providers/providers/openclaw/provider.js.map +1 -1
- package/dist/core/providers/types.d.ts +8 -3
- package/dist/core/scenarios/application/scenario-runner.service.d.ts +0 -1
- package/dist/core/scenarios/application/scenario-runner.service.js +30 -87
- package/dist/core/scenarios/application/scenario-runner.service.js.map +1 -1
- package/dist/core/scenarios/domain/scenario.d.ts +0 -15
- package/dist/core/sessions/application/session.service.d.ts +10 -4
- package/dist/core/sessions/application/session.service.js +87 -89
- package/dist/core/sessions/application/session.service.js.map +1 -1
- package/dist/core/sessions/domain/session.d.ts +3 -3
- package/dist/core/sessions/domain/transcript.d.ts +1 -1
- package/dist/core/sessions/index.d.ts +1 -1
- package/dist/core/sessions/index.js.map +1 -1
- package/dist/core/skills/application/skill.service.d.ts +2 -3
- package/dist/core/skills/application/skill.service.js +153 -56
- package/dist/core/skills/application/skill.service.js.map +1 -1
- package/dist/core/skills/domain/skill.d.ts +2 -2
- package/dist/core/skills/domain/skill.js +4 -2
- package/dist/core/skills/domain/skill.js.map +1 -1
- package/dist/core/templates/assets/ceo/BOOTSTRAP.md +41 -0
- package/dist/core/templates/assets/ceo/ROLE.md +15 -0
- package/dist/core/templates/assets/organization/MISSION.md +73 -0
- package/dist/core/templates/assets/organization/STRATEGY.md +107 -0
- package/dist/core/templates/assets/organization/VISION.md +80 -0
- package/dist/core/templates/assets/organization/wiki/index.md +15 -0
- package/dist/core/templates/assets/skills/og-board-individual/SKILL.md +148 -0
- package/dist/core/templates/assets/skills/og-board-manager/SKILL.md +140 -0
- package/dist/core/templates/default-templates.d.ts +17 -14
- package/dist/core/templates/default-templates.js +115 -212
- package/dist/core/templates/default-templates.js.map +1 -1
- package/dist/index.d.ts +1 -4
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/platform/node/node-path.port.js +1 -0
- package/dist/platform/node/node-path.port.js.map +1 -1
- package/package.json +16 -13
- package/dist/core/agents/application/workspace-context.service.d.ts +0 -28
- package/dist/core/agents/application/workspace-context.service.js +0 -157
- package/dist/core/agents/application/workspace-context.service.js.map +0 -1
- package/dist/core/agents/domain/workspace-context.d.ts +0 -13
- package/dist/core/agents/domain/workspace-context.js +0 -14
- package/dist/core/agents/domain/workspace-context.js.map +0 -1
- package/dist/core/gateway/domain/protocol.d.ts +0 -113
- package/dist/core/gateway/domain/protocol.js +0 -394
- package/dist/core/gateway/domain/protocol.js.map +0 -1
- package/dist/core/gateway/index.d.ts +0 -2
- package/dist/core/gateway/index.js +0 -2
- package/dist/core/gateway/index.js.map +0 -1
- package/dist/core/llm/application/vercel-ai-text-runtime.d.ts +0 -26
- package/dist/core/llm/application/vercel-ai-text-runtime.js +0 -223
- package/dist/core/llm/application/vercel-ai-text-runtime.js.map +0 -1
- package/dist/core/llm/domain/text-runtime.d.ts +0 -22
- package/dist/core/llm/domain/text-runtime.js +0 -2
- package/dist/core/llm/domain/text-runtime.js.map +0 -1
- package/dist/core/llm/index.d.ts +0 -2
- package/dist/core/llm/index.js +0 -2
- package/dist/core/llm/index.js.map +0 -1
- package/dist/core/orchestration/application/orchestration-planner.service.d.ts +0 -28
- package/dist/core/orchestration/application/orchestration-planner.service.js +0 -279
- package/dist/core/orchestration/application/orchestration-planner.service.js.map +0 -1
- package/dist/core/orchestration/domain/loop.d.ts +0 -119
- package/dist/core/orchestration/domain/loop.js +0 -2
- package/dist/core/orchestration/domain/loop.js.map +0 -1
- package/dist/core/plugins/application/plugin.service.d.ts +0 -32
- package/dist/core/plugins/application/plugin.service.js +0 -236
- package/dist/core/plugins/application/plugin.service.js.map +0 -1
- package/dist/core/plugins/domain/openclaw-compat.d.ts +0 -60
- package/dist/core/plugins/domain/openclaw-compat.js +0 -9
- package/dist/core/plugins/domain/openclaw-compat.js.map +0 -1
- package/dist/core/plugins/index.d.ts +0 -3
- package/dist/core/plugins/index.js +0 -3
- package/dist/core/plugins/index.js.map +0 -1
- package/dist/core/providers/onboarding.d.ts +0 -13
- package/dist/core/providers/onboarding.js +0 -149
- package/dist/core/providers/onboarding.js.map +0 -1
- package/dist/core/providers/providers/claude/index.d.ts +0 -4
- package/dist/core/providers/providers/claude/index.js +0 -19
- package/dist/core/providers/providers/claude/index.js.map +0 -1
- package/dist/core/providers/providers/claude/provider.d.ts +0 -8
- package/dist/core/providers/providers/claude/provider.js +0 -106
- package/dist/core/providers/providers/claude/provider.js.map +0 -1
- package/dist/core/providers/providers/codex/index.d.ts +0 -4
- package/dist/core/providers/providers/codex/index.js +0 -19
- package/dist/core/providers/providers/codex/index.js.map +0 -1
- package/dist/core/providers/providers/codex/provider.d.ts +0 -7
- package/dist/core/providers/providers/codex/provider.js +0 -31
- package/dist/core/providers/providers/codex/provider.js.map +0 -1
- package/dist/core/providers/providers/cursor/index.d.ts +0 -4
- package/dist/core/providers/providers/cursor/index.js +0 -19
- package/dist/core/providers/providers/cursor/index.js.map +0 -1
- package/dist/core/providers/providers/cursor/provider.d.ts +0 -11
- package/dist/core/providers/providers/cursor/provider.js +0 -90
- package/dist/core/providers/providers/cursor/provider.js.map +0 -1
- package/dist/core/providers/providers/extended-http/catalog.d.ts +0 -40
- package/dist/core/providers/providers/extended-http/catalog.js +0 -728
- package/dist/core/providers/providers/extended-http/catalog.js.map +0 -1
- package/dist/core/providers/providers/extended-http/index.d.ts +0 -5
- package/dist/core/providers/providers/extended-http/index.js +0 -13
- package/dist/core/providers/providers/extended-http/index.js.map +0 -1
- package/dist/core/providers/providers/extended-http/provider.d.ts +0 -31
- package/dist/core/providers/providers/extended-http/provider.js +0 -580
- package/dist/core/providers/providers/extended-http/provider.js.map +0 -1
- package/dist/core/providers/providers/gemini/index.d.ts +0 -4
- package/dist/core/providers/providers/gemini/index.js +0 -37
- package/dist/core/providers/providers/gemini/index.js.map +0 -1
- package/dist/core/providers/providers/gemini/provider.d.ts +0 -7
- package/dist/core/providers/providers/gemini/provider.js +0 -59
- package/dist/core/providers/providers/gemini/provider.js.map +0 -1
- package/dist/core/providers/providers/grok/index.d.ts +0 -4
- package/dist/core/providers/providers/grok/index.js +0 -41
- package/dist/core/providers/providers/grok/index.js.map +0 -1
- package/dist/core/providers/providers/grok/provider.d.ts +0 -13
- package/dist/core/providers/providers/grok/provider.js +0 -95
- package/dist/core/providers/providers/grok/provider.js.map +0 -1
- package/dist/core/providers/providers/openai/index.d.ts +0 -4
- package/dist/core/providers/providers/openai/index.js +0 -45
- package/dist/core/providers/providers/openai/index.js.map +0 -1
- package/dist/core/providers/providers/openai/provider.d.ts +0 -14
- package/dist/core/providers/providers/openai/provider.js +0 -203
- package/dist/core/providers/providers/openai/provider.js.map +0 -1
- package/dist/core/providers/providers/opencode/index.d.ts +0 -4
- package/dist/core/providers/providers/opencode/index.js +0 -23
- package/dist/core/providers/providers/opencode/index.js.map +0 -1
- package/dist/core/providers/providers/opencode/provider.d.ts +0 -11
- package/dist/core/providers/providers/opencode/provider.js +0 -215
- package/dist/core/providers/providers/opencode/provider.js.map +0 -1
- package/dist/core/providers/providers/openrouter/index.d.ts +0 -4
- package/dist/core/providers/providers/openrouter/index.js +0 -37
- package/dist/core/providers/providers/openrouter/index.js.map +0 -1
- package/dist/core/providers/providers/openrouter/provider.d.ts +0 -13
- package/dist/core/providers/providers/openrouter/provider.js +0 -80
- package/dist/core/providers/providers/openrouter/provider.js.map +0 -1
- package/dist/platform/node/opengoat-gateway-client.d.ts +0 -19
- package/dist/platform/node/opengoat-gateway-client.js +0 -194
- package/dist/platform/node/opengoat-gateway-client.js.map +0 -1
- package/dist/platform/node/opengoat-gateway-server.d.ts +0 -53
- package/dist/platform/node/opengoat-gateway-server.js +0 -906
- package/dist/platform/node/opengoat-gateway-server.js.map +0 -1
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import { mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
1
4
|
import { executeCommand } from "./command-executor.js";
|
|
2
5
|
import { ProviderCommandNotFoundError, UnsupportedProviderActionError } from "./errors.js";
|
|
3
6
|
import { BaseProvider } from "./base-provider.js";
|
|
7
|
+
import { imageExtensionForMediaType, renderImagePathContext, resolveProviderImageInputs } from "./image-input.js";
|
|
4
8
|
export class BaseCliProvider extends BaseProvider {
|
|
5
9
|
command;
|
|
6
10
|
commandEnvVar;
|
|
@@ -51,7 +55,8 @@ export class BaseCliProvider extends BaseProvider {
|
|
|
51
55
|
}
|
|
52
56
|
async invoke(options) {
|
|
53
57
|
const env = this.prepareExecutionEnv(options.env ?? process.env);
|
|
54
|
-
const
|
|
58
|
+
const prepared = await this.prepareImageInvocationOptions(options);
|
|
59
|
+
const invocation = this.buildInvocation(prepared.options, env);
|
|
55
60
|
try {
|
|
56
61
|
return await executeCommand({
|
|
57
62
|
command: invocation.command,
|
|
@@ -69,6 +74,9 @@ export class BaseCliProvider extends BaseProvider {
|
|
|
69
74
|
}
|
|
70
75
|
throw error;
|
|
71
76
|
}
|
|
77
|
+
finally {
|
|
78
|
+
await cleanupTempDirs(prepared.tempDirs);
|
|
79
|
+
}
|
|
72
80
|
}
|
|
73
81
|
async invokeAuth(options = {}) {
|
|
74
82
|
const env = this.prepareExecutionEnv(options.env ?? process.env);
|
|
@@ -140,6 +148,49 @@ export class BaseCliProvider extends BaseProvider {
|
|
|
140
148
|
message: `${systemPrompt}\n\n# User Message\n${options.message}`
|
|
141
149
|
};
|
|
142
150
|
}
|
|
151
|
+
async prepareImageInvocationOptions(options) {
|
|
152
|
+
const resolvedImages = await resolveProviderImageInputs({
|
|
153
|
+
providerId: this.id,
|
|
154
|
+
images: options.images,
|
|
155
|
+
cwd: options.cwd
|
|
156
|
+
});
|
|
157
|
+
if (resolvedImages.length === 0) {
|
|
158
|
+
return { options, tempDirs: [] };
|
|
159
|
+
}
|
|
160
|
+
const imagePaths = [];
|
|
161
|
+
const tempDirs = [];
|
|
162
|
+
let tempDir;
|
|
163
|
+
for (let index = 0; index < resolvedImages.length; index += 1) {
|
|
164
|
+
const image = resolvedImages[index];
|
|
165
|
+
if (!image) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
if (image.sourcePath) {
|
|
169
|
+
imagePaths.push(image.sourcePath);
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (!tempDir) {
|
|
173
|
+
tempDir = await mkdtemp(path.join(os.tmpdir(), "opengoat-cli-image-"));
|
|
174
|
+
tempDirs.push(tempDir);
|
|
175
|
+
}
|
|
176
|
+
const extension = imageExtensionForMediaType(image.mediaType);
|
|
177
|
+
const baseName = sanitizeFileStem(image.name || `image-${index + 1}`);
|
|
178
|
+
const targetPath = path.join(tempDir, `${baseName}.${extension}`);
|
|
179
|
+
await writeFile(targetPath, Buffer.from(image.base64Data, "base64"));
|
|
180
|
+
imagePaths.push(targetPath);
|
|
181
|
+
}
|
|
182
|
+
const imageContext = renderImagePathContext(imagePaths);
|
|
183
|
+
if (!imageContext) {
|
|
184
|
+
return { options, tempDirs };
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
options: {
|
|
188
|
+
...options,
|
|
189
|
+
message: `${options.message.trim()}\n\n${imageContext}`
|
|
190
|
+
},
|
|
191
|
+
tempDirs
|
|
192
|
+
};
|
|
193
|
+
}
|
|
143
194
|
}
|
|
144
195
|
function isSpawnPermissionOrMissing(error) {
|
|
145
196
|
return (typeof error === "object" &&
|
|
@@ -148,4 +199,18 @@ function isSpawnPermissionOrMissing(error) {
|
|
|
148
199
|
((error.code ?? "") === "ENOENT" ||
|
|
149
200
|
(error.code ?? "") === "EACCES"));
|
|
150
201
|
}
|
|
202
|
+
async function cleanupTempDirs(tempDirs) {
|
|
203
|
+
await Promise.all(tempDirs.map((tempDir) => rm(tempDir, {
|
|
204
|
+
recursive: true,
|
|
205
|
+
force: true
|
|
206
|
+
}).catch(() => undefined)));
|
|
207
|
+
}
|
|
208
|
+
function sanitizeFileStem(value) {
|
|
209
|
+
const compact = value
|
|
210
|
+
.trim()
|
|
211
|
+
.toLowerCase()
|
|
212
|
+
.replace(/[^a-z0-9._-]+/g, "-")
|
|
213
|
+
.replace(/^-+|-+$/g, "");
|
|
214
|
+
return compact || "image";
|
|
215
|
+
}
|
|
151
216
|
//# sourceMappingURL=cli-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-provider.js","sourceRoot":"","sources":["../../../src/core/providers/cli-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,YAAY,EAA2B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-provider.js","sourceRoot":"","sources":["../../../src/core/providers/cli-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ProviderImageInput } from "./types.js";
|
|
2
|
+
export interface ResolvedProviderImageInput {
|
|
3
|
+
name?: string;
|
|
4
|
+
mediaType: string;
|
|
5
|
+
base64Data: string;
|
|
6
|
+
sourcePath?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function resolveProviderImageInputs(params: {
|
|
9
|
+
providerId: string;
|
|
10
|
+
images?: ProviderImageInput[];
|
|
11
|
+
cwd?: string;
|
|
12
|
+
maxCount?: number;
|
|
13
|
+
maxBytesPerImage?: number;
|
|
14
|
+
}): Promise<ResolvedProviderImageInput[]>;
|
|
15
|
+
export declare function imageExtensionForMediaType(mediaType: string): string;
|
|
16
|
+
export declare function renderImagePathContext(imagePaths: string[]): string;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ProviderRuntimeError } from "./errors.js";
|
|
4
|
+
const DEFAULT_MAX_IMAGE_COUNT = 8;
|
|
5
|
+
const DEFAULT_MAX_IMAGE_BYTES = 10 * 1024 * 1024;
|
|
6
|
+
const IMAGE_EXTENSION_TO_MEDIA_TYPE = {
|
|
7
|
+
".avif": "image/avif",
|
|
8
|
+
".bmp": "image/bmp",
|
|
9
|
+
".gif": "image/gif",
|
|
10
|
+
".heic": "image/heic",
|
|
11
|
+
".heif": "image/heif",
|
|
12
|
+
".jpeg": "image/jpeg",
|
|
13
|
+
".jpg": "image/jpeg",
|
|
14
|
+
".png": "image/png",
|
|
15
|
+
".svg": "image/svg+xml",
|
|
16
|
+
".tif": "image/tiff",
|
|
17
|
+
".tiff": "image/tiff",
|
|
18
|
+
".webp": "image/webp"
|
|
19
|
+
};
|
|
20
|
+
const IMAGE_MEDIA_TYPE_TO_EXTENSION = {
|
|
21
|
+
"image/avif": "avif",
|
|
22
|
+
"image/bmp": "bmp",
|
|
23
|
+
"image/gif": "gif",
|
|
24
|
+
"image/heic": "heic",
|
|
25
|
+
"image/heif": "heif",
|
|
26
|
+
"image/jpeg": "jpg",
|
|
27
|
+
"image/png": "png",
|
|
28
|
+
"image/svg+xml": "svg",
|
|
29
|
+
"image/tiff": "tiff",
|
|
30
|
+
"image/webp": "webp"
|
|
31
|
+
};
|
|
32
|
+
export async function resolveProviderImageInputs(params) {
|
|
33
|
+
const images = params.images ?? [];
|
|
34
|
+
if (images.length === 0) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
const maxCount = params.maxCount ?? DEFAULT_MAX_IMAGE_COUNT;
|
|
38
|
+
if (images.length > maxCount) {
|
|
39
|
+
throw new ProviderRuntimeError(params.providerId, `too many images provided (${images.length}); the maximum is ${maxCount}`);
|
|
40
|
+
}
|
|
41
|
+
const resolved = [];
|
|
42
|
+
for (let index = 0; index < images.length; index += 1) {
|
|
43
|
+
const image = images[index];
|
|
44
|
+
if (!image || typeof image !== "object") {
|
|
45
|
+
throw new ProviderRuntimeError(params.providerId, `image #${index + 1} is invalid`);
|
|
46
|
+
}
|
|
47
|
+
const name = image.name?.trim() || undefined;
|
|
48
|
+
const explicitMediaType = normalizeMediaType(image.mediaType);
|
|
49
|
+
const inputPath = image.path?.trim();
|
|
50
|
+
const dataUrl = image.dataUrl?.trim();
|
|
51
|
+
if (!inputPath && !dataUrl) {
|
|
52
|
+
throw new ProviderRuntimeError(params.providerId, `image #${index + 1} must include either "path" or "dataUrl"`);
|
|
53
|
+
}
|
|
54
|
+
if (inputPath) {
|
|
55
|
+
const absolutePath = path.isAbsolute(inputPath)
|
|
56
|
+
? inputPath
|
|
57
|
+
: path.resolve(params.cwd ?? process.cwd(), inputPath);
|
|
58
|
+
const fileStat = await stat(absolutePath).catch(() => null);
|
|
59
|
+
if (!fileStat || !fileStat.isFile()) {
|
|
60
|
+
throw new ProviderRuntimeError(params.providerId, `image #${index + 1} could not be found at ${absolutePath}`);
|
|
61
|
+
}
|
|
62
|
+
const maxBytesPerImage = params.maxBytesPerImage ?? DEFAULT_MAX_IMAGE_BYTES;
|
|
63
|
+
if (fileStat.size > maxBytesPerImage) {
|
|
64
|
+
throw new ProviderRuntimeError(params.providerId, `image #${index + 1} is too large (${fileStat.size} bytes); max allowed is ${maxBytesPerImage} bytes`);
|
|
65
|
+
}
|
|
66
|
+
const mediaType = explicitMediaType || inferMediaTypeFromPath(absolutePath);
|
|
67
|
+
if (!mediaType || !isImageMediaType(mediaType)) {
|
|
68
|
+
throw new ProviderRuntimeError(params.providerId, `image #${index + 1} has unsupported media type (${mediaType ?? "unknown"})`);
|
|
69
|
+
}
|
|
70
|
+
const fileBuffer = await readFile(absolutePath);
|
|
71
|
+
resolved.push({
|
|
72
|
+
name,
|
|
73
|
+
mediaType,
|
|
74
|
+
base64Data: fileBuffer.toString("base64"),
|
|
75
|
+
sourcePath: absolutePath
|
|
76
|
+
});
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const parsedDataUrl = parseDataUrl(dataUrl);
|
|
80
|
+
if (!parsedDataUrl) {
|
|
81
|
+
throw new ProviderRuntimeError(params.providerId, `image #${index + 1} contains an invalid data URL`);
|
|
82
|
+
}
|
|
83
|
+
const mediaType = explicitMediaType || parsedDataUrl.mediaType;
|
|
84
|
+
if (!mediaType || !isImageMediaType(mediaType)) {
|
|
85
|
+
throw new ProviderRuntimeError(params.providerId, `image #${index + 1} has unsupported media type (${mediaType ?? "unknown"})`);
|
|
86
|
+
}
|
|
87
|
+
const imageBytes = Buffer.from(parsedDataUrl.base64Data, "base64");
|
|
88
|
+
const maxBytesPerImage = params.maxBytesPerImage ?? DEFAULT_MAX_IMAGE_BYTES;
|
|
89
|
+
if (imageBytes.byteLength > maxBytesPerImage) {
|
|
90
|
+
throw new ProviderRuntimeError(params.providerId, `image #${index + 1} is too large (${imageBytes.byteLength} bytes); max allowed is ${maxBytesPerImage} bytes`);
|
|
91
|
+
}
|
|
92
|
+
resolved.push({
|
|
93
|
+
name,
|
|
94
|
+
mediaType,
|
|
95
|
+
base64Data: imageBytes.toString("base64")
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return resolved;
|
|
99
|
+
}
|
|
100
|
+
export function imageExtensionForMediaType(mediaType) {
|
|
101
|
+
return IMAGE_MEDIA_TYPE_TO_EXTENSION[mediaType.toLowerCase()] ?? "bin";
|
|
102
|
+
}
|
|
103
|
+
export function renderImagePathContext(imagePaths) {
|
|
104
|
+
if (imagePaths.length === 0) {
|
|
105
|
+
return "";
|
|
106
|
+
}
|
|
107
|
+
return [
|
|
108
|
+
"## Attached Images",
|
|
109
|
+
"The user attached image files you can inspect locally:",
|
|
110
|
+
...imagePaths.map((imagePath, index) => `${index + 1}. ${imagePath}`)
|
|
111
|
+
].join("\n");
|
|
112
|
+
}
|
|
113
|
+
function normalizeMediaType(value) {
|
|
114
|
+
const trimmed = value?.trim().toLowerCase();
|
|
115
|
+
return trimmed ? trimmed : undefined;
|
|
116
|
+
}
|
|
117
|
+
function inferMediaTypeFromPath(filePath) {
|
|
118
|
+
const extension = path.extname(filePath).toLowerCase();
|
|
119
|
+
return IMAGE_EXTENSION_TO_MEDIA_TYPE[extension];
|
|
120
|
+
}
|
|
121
|
+
function isImageMediaType(mediaType) {
|
|
122
|
+
return mediaType.toLowerCase().startsWith("image/");
|
|
123
|
+
}
|
|
124
|
+
function parseDataUrl(value) {
|
|
125
|
+
if (!value.startsWith("data:")) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
const commaIndex = value.indexOf(",");
|
|
129
|
+
if (commaIndex < 0) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
const header = value.slice(5, commaIndex).trim();
|
|
133
|
+
const payload = value.slice(commaIndex + 1).trim();
|
|
134
|
+
if (!payload) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
const headerParts = header.split(";").map((part) => part.trim()).filter(Boolean);
|
|
138
|
+
const mediaType = normalizeMediaType(headerParts[0]);
|
|
139
|
+
const isBase64 = headerParts.some((part) => part.toLowerCase() === "base64");
|
|
140
|
+
if (!isBase64) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const compactPayload = payload.replace(/\s+/g, "");
|
|
144
|
+
if (!isLikelyBase64(compactPayload)) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
mediaType,
|
|
149
|
+
base64Data: compactPayload
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function isLikelyBase64(value) {
|
|
153
|
+
if (!value) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
return /^[a-zA-Z0-9+/]+=*$/.test(value);
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=image-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-input.js","sourceRoot":"","sources":["../../../src/core/providers/image-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import type { ProviderSummary } from "./types.js";
|
|
2
1
|
import { ProviderRegistry } from "./registry.js";
|
|
3
|
-
export declare const DEFAULT_PROVIDER_ID = "codex";
|
|
4
2
|
export declare function createDefaultProviderRegistry(): Promise<ProviderRegistry>;
|
|
5
|
-
export declare function registerBuiltinProviders(registry: ProviderRegistry): Promise<void>;
|
|
6
|
-
export declare function listProviderSummaries(registry: ProviderRegistry): ProviderSummary[];
|
|
7
3
|
export { ProviderRegistry, type ProviderFactory } from "./registry.js";
|
|
8
4
|
export { BaseProvider } from "./base-provider.js";
|
|
9
5
|
export { BaseCliProvider, type BaseCliProviderConfig } from "./cli-provider.js";
|
|
10
6
|
export { ProviderService } from "./application/provider.service.js";
|
|
11
|
-
export type { AgentRuntimeProfile, ProviderStoredConfig } from "./application/provider.service.js";
|
|
12
|
-
export { buildProviderFamilies, filterProvidersForOnboarding, isDefaultOnboardingAgent, resolveOnboardingProviderSetupUrl, selectProvidersForOnboarding, sortProvidersForOnboarding } from "./onboarding.js";
|
|
13
|
-
export type { ProviderOnboardingFamily } from "./onboarding.js";
|
|
7
|
+
export type { AgentRuntimeProfile, OpenClawGatewayConfig, ProviderStoredConfig } from "./application/provider.service.js";
|
|
14
8
|
export { loadProviderModules } from "./loader.js";
|
|
15
9
|
export type { ProviderModule } from "./provider-module.js";
|
|
16
10
|
export type { ProviderOnboardingEnvField, ProviderOnboardingSpec } from "./provider-module.js";
|
|
@@ -1,27 +1,14 @@
|
|
|
1
1
|
import { loadProviderModules } from "./loader.js";
|
|
2
2
|
import { ProviderRegistry } from "./registry.js";
|
|
3
|
-
export const DEFAULT_PROVIDER_ID = "codex";
|
|
4
3
|
export async function createDefaultProviderRegistry() {
|
|
5
4
|
const registry = new ProviderRegistry();
|
|
6
5
|
await loadProviderModules(registry);
|
|
7
6
|
return registry;
|
|
8
7
|
}
|
|
9
|
-
export async function registerBuiltinProviders(registry) {
|
|
10
|
-
await loadProviderModules(registry);
|
|
11
|
-
}
|
|
12
|
-
export function listProviderSummaries(registry) {
|
|
13
|
-
return registry.listProviders().map((provider) => ({
|
|
14
|
-
id: provider.id,
|
|
15
|
-
displayName: provider.displayName,
|
|
16
|
-
kind: provider.kind,
|
|
17
|
-
capabilities: provider.capabilities
|
|
18
|
-
}));
|
|
19
|
-
}
|
|
20
8
|
export { ProviderRegistry } from "./registry.js";
|
|
21
9
|
export { BaseProvider } from "./base-provider.js";
|
|
22
10
|
export { BaseCliProvider } from "./cli-provider.js";
|
|
23
11
|
export { ProviderService } from "./application/provider.service.js";
|
|
24
|
-
export { buildProviderFamilies, filterProvidersForOnboarding, isDefaultOnboardingAgent, resolveOnboardingProviderSetupUrl, selectProvidersForOnboarding, sortProvidersForOnboarding } from "./onboarding.js";
|
|
25
12
|
export { loadProviderModules } from "./loader.js";
|
|
26
13
|
export { AgentConfigNotFoundError, InvalidAgentConfigError, InvalidProviderConfigError, OpenGoatProviderError, ProviderAuthenticationError, ProviderCommandNotFoundError, ProviderNotFoundError, ProviderRuntimeError, UnsupportedProviderActionError, UnsupportedProviderOptionError } from "./errors.js";
|
|
27
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/providers/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAwB,MAAM,eAAe,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,6BAA6B;IACjD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACxC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAwB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAA8B,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAMpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAkBlD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,oBAAoB,EACpB,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,aAAa,CAAC"}
|
|
@@ -1,99 +1,5 @@
|
|
|
1
|
-
import { access, readdir } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
4
|
-
import { providerModule as claudeProviderModule } from "./providers/claude/index.js";
|
|
5
|
-
import { providerModule as codexProviderModule } from "./providers/codex/index.js";
|
|
6
|
-
import { providerModule as cursorProviderModule } from "./providers/cursor/index.js";
|
|
7
|
-
import { providerModule as geminiProviderModule } from "./providers/gemini/index.js";
|
|
8
|
-
import { providerModule as grokProviderModule } from "./providers/grok/index.js";
|
|
9
|
-
import { providerModule as openaiProviderModule } from "./providers/openai/index.js";
|
|
10
1
|
import { providerModule as openclawProviderModule } from "./providers/openclaw/index.js";
|
|
11
|
-
import { providerModules as extendedHttpProviderModules } from "./providers/extended-http/index.js";
|
|
12
|
-
import { providerModule as opencodeProviderModule } from "./providers/opencode/index.js";
|
|
13
|
-
import { providerModule as openrouterProviderModule } from "./providers/openrouter/index.js";
|
|
14
|
-
const providersRootDir = path.join(path.dirname(fileURLToPath(import.meta.url)), "providers");
|
|
15
|
-
const staticProviderModules = [
|
|
16
|
-
claudeProviderModule,
|
|
17
|
-
codexProviderModule,
|
|
18
|
-
cursorProviderModule,
|
|
19
|
-
geminiProviderModule,
|
|
20
|
-
grokProviderModule,
|
|
21
|
-
openaiProviderModule,
|
|
22
|
-
openclawProviderModule,
|
|
23
|
-
opencodeProviderModule,
|
|
24
|
-
openrouterProviderModule,
|
|
25
|
-
...extendedHttpProviderModules
|
|
26
|
-
];
|
|
27
2
|
export async function loadProviderModules(registry) {
|
|
28
|
-
|
|
29
|
-
let providersDirMissing = false;
|
|
30
|
-
try {
|
|
31
|
-
const entries = await readdir(providersRootDir, { withFileTypes: true });
|
|
32
|
-
for (const entry of entries) {
|
|
33
|
-
if (!entry.isDirectory()) {
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
const providerDir = path.join(providersRootDir, entry.name);
|
|
37
|
-
const modulePath = await resolveModulePath(providerDir);
|
|
38
|
-
if (!modulePath) {
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
const imported = (await import(pathToFileURL(modulePath).href));
|
|
42
|
-
loadedCount += registerProviderModules(registry, resolveProviderModules(imported));
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
if (!isMissingProvidersDirError(error)) {
|
|
47
|
-
throw error;
|
|
48
|
-
}
|
|
49
|
-
providersDirMissing = true;
|
|
50
|
-
}
|
|
51
|
-
if (providersDirMissing || loadedCount === 0) {
|
|
52
|
-
registerProviderModules(registry, staticProviderModules);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function resolveProviderModules(imported) {
|
|
56
|
-
if (Array.isArray(imported.providerModules) && imported.providerModules.length > 0) {
|
|
57
|
-
return imported.providerModules;
|
|
58
|
-
}
|
|
59
|
-
if (imported.providerModule) {
|
|
60
|
-
return [imported.providerModule];
|
|
61
|
-
}
|
|
62
|
-
return [];
|
|
63
|
-
}
|
|
64
|
-
function registerProviderModules(registry, providerModules) {
|
|
65
|
-
if (providerModules.length === 0) {
|
|
66
|
-
return 0;
|
|
67
|
-
}
|
|
68
|
-
for (const providerModule of providerModules) {
|
|
69
|
-
registry.register(providerModule.id, providerModule.create, providerModule);
|
|
70
|
-
}
|
|
71
|
-
return providerModules.length;
|
|
72
|
-
}
|
|
73
|
-
async function resolveModulePath(providerDir) {
|
|
74
|
-
const candidates = ["index.js", "index.ts"];
|
|
75
|
-
for (const candidate of candidates) {
|
|
76
|
-
const fullPath = path.join(providerDir, candidate);
|
|
77
|
-
if (await exists(fullPath)) {
|
|
78
|
-
return fullPath;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
async function exists(filePath) {
|
|
84
|
-
try {
|
|
85
|
-
await access(filePath);
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
return false;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
function isMissingProvidersDirError(error) {
|
|
93
|
-
if (!(error instanceof Error)) {
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
const withCode = error;
|
|
97
|
-
return withCode.code === "ENOENT";
|
|
3
|
+
registry.register(openclawProviderModule.id, openclawProviderModule.create, openclawProviderModule);
|
|
98
4
|
}
|
|
99
5
|
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/providers/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/providers/loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,IAAI,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEzF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAA0B;IAClE,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,EAAE,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;AACtG,CAAC"}
|