@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.
- 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 +42 -4
- package/dist/core/agents/application/agent.service.js +439 -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 +1 -2
- package/dist/core/bootstrap/application/bootstrap.service.js +14 -19
- 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/opengoat/application/opengoat.service.d.ts +106 -27
- package/dist/core/opengoat/application/opengoat.service.js +1006 -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 +15 -32
- package/dist/core/providers/application/provider.service.js +115 -201
- 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/AGENTS.md +20 -0
- package/dist/core/templates/assets/ceo/ROLE.md +13 -0
- package/dist/core/templates/assets/ceo/SOUL.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 +12 -14
- package/dist/core/templates/default-templates.js +81 -213
- 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/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
|
@@ -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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { BaseCliProvider } from "../../cli-provider.js";
|
|
2
2
|
import { attachProviderSessionId } from "../../provider-session.js";
|
|
3
|
-
import {
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { delimiter, dirname, join } from "node:path";
|
|
4
6
|
export class OpenClawProvider extends BaseCliProvider {
|
|
5
7
|
constructor() {
|
|
6
8
|
super({
|
|
@@ -20,36 +22,18 @@ export class OpenClawProvider extends BaseCliProvider {
|
|
|
20
22
|
});
|
|
21
23
|
}
|
|
22
24
|
buildInvocationArgs(options) {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
args.push("--session-id", options.providerSessionId.trim());
|
|
29
|
-
}
|
|
30
|
-
if (options.model) {
|
|
31
|
-
args.push("--model", options.model);
|
|
25
|
+
const runtime = resolveGatewayInvocationRuntime(options.env);
|
|
26
|
+
const sessionKey = buildOpenClawSessionKey(options.agent, options.providerSessionId);
|
|
27
|
+
const args = [...runtime.globalArgs, "gateway", "call", "agent"];
|
|
28
|
+
if (runtime.gatewayUrl && runtime.gatewayToken) {
|
|
29
|
+
args.push("--url", runtime.gatewayUrl, "--token", runtime.gatewayToken);
|
|
32
30
|
}
|
|
33
31
|
args.push(...(options.passthroughArgs ?? []));
|
|
34
|
-
args.push("--
|
|
35
|
-
// Inject extra arguments from env if present
|
|
36
|
-
const extraArgs = options.env?.OPENCLAW_ARGUMENTS?.trim();
|
|
37
|
-
if (extraArgs) {
|
|
38
|
-
// Simple splitting by space - for more complex cases user should use shell script wrapper
|
|
39
|
-
// or we might need a proper argv parser, but this suffices for simple flags like --remote
|
|
40
|
-
args.push(...extraArgs.split(" ").filter((arg) => arg.trim().length > 0));
|
|
41
|
-
}
|
|
32
|
+
args.push("--expect-final", "--json", "--timeout", "630000", "--params", JSON.stringify(buildGatewayAgentParams(options, sessionKey)));
|
|
42
33
|
return args;
|
|
43
34
|
}
|
|
44
35
|
prepareExecutionEnv(env) {
|
|
45
|
-
|
|
46
|
-
return env;
|
|
47
|
-
}
|
|
48
|
-
const preferredNodePaths = [
|
|
49
|
-
"/opt/homebrew/bin",
|
|
50
|
-
"/opt/homebrew/opt/node@22/bin",
|
|
51
|
-
"/usr/local/opt/node@22/bin",
|
|
52
|
-
];
|
|
36
|
+
const preferredNodePaths = resolvePreferredCommandPaths(env);
|
|
53
37
|
const mergedPath = dedupePathEntries([
|
|
54
38
|
...preferredNodePaths,
|
|
55
39
|
...(env.PATH?.split(delimiter) ?? []),
|
|
@@ -62,9 +46,15 @@ export class OpenClawProvider extends BaseCliProvider {
|
|
|
62
46
|
buildAuthInvocationArgs(options) {
|
|
63
47
|
const passthrough = options.passthroughArgs ?? [];
|
|
64
48
|
if (passthrough.length > 0) {
|
|
65
|
-
return [
|
|
49
|
+
return [
|
|
50
|
+
...resolveOpenClawArguments(options.env),
|
|
51
|
+
"models",
|
|
52
|
+
"auth",
|
|
53
|
+
"login",
|
|
54
|
+
...passthrough,
|
|
55
|
+
];
|
|
66
56
|
}
|
|
67
|
-
return ["onboard"];
|
|
57
|
+
return [...resolveOpenClawArguments(options.env), "onboard"];
|
|
68
58
|
}
|
|
69
59
|
buildCreateAgentInvocationArgs(options) {
|
|
70
60
|
const args = [
|
|
@@ -81,16 +71,181 @@ export class OpenClawProvider extends BaseCliProvider {
|
|
|
81
71
|
if (model) {
|
|
82
72
|
args.push("--model", model);
|
|
83
73
|
}
|
|
84
|
-
return args;
|
|
74
|
+
return [...resolveOpenClawArguments(options.env), ...args];
|
|
85
75
|
}
|
|
86
76
|
buildDeleteAgentInvocationArgs(options) {
|
|
87
|
-
return [
|
|
77
|
+
return [
|
|
78
|
+
...resolveOpenClawArguments(options.env),
|
|
79
|
+
"agents",
|
|
80
|
+
"delete",
|
|
81
|
+
options.agentId,
|
|
82
|
+
"--force",
|
|
83
|
+
];
|
|
88
84
|
}
|
|
89
85
|
async invoke(options) {
|
|
90
|
-
const
|
|
86
|
+
const sessionKey = buildOpenClawSessionKey(options.agent, options.providerSessionId);
|
|
91
87
|
const result = await super.invoke(options);
|
|
92
|
-
|
|
88
|
+
const parsed = parseGatewayAgentResponse(result.stdout);
|
|
89
|
+
const normalizedStdout = parsed?.assistantText || result.stdout;
|
|
90
|
+
return attachProviderSessionId({
|
|
91
|
+
...result,
|
|
92
|
+
stdout: normalizedStdout,
|
|
93
|
+
}, sessionKey ?? parsed?.providerSessionId);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function buildOpenClawSessionKey(agentId, providerSessionId) {
|
|
97
|
+
const raw = providerSessionId?.trim();
|
|
98
|
+
if (!raw) {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
if (raw.includes(":")) {
|
|
102
|
+
return raw.toLowerCase();
|
|
93
103
|
}
|
|
104
|
+
return `agent:${normalizeSessionSegment(agentId) || "main"}:${normalizeSessionSegment(raw) || "main"}`;
|
|
105
|
+
}
|
|
106
|
+
function buildGatewayAgentParams(options, sessionKey) {
|
|
107
|
+
const idempotencyKey = options.idempotencyKey?.trim() || randomUUID().toLowerCase();
|
|
108
|
+
const params = {
|
|
109
|
+
message: options.message,
|
|
110
|
+
idempotencyKey,
|
|
111
|
+
};
|
|
112
|
+
const agentId = options.agent?.trim();
|
|
113
|
+
if (agentId) {
|
|
114
|
+
params.agentId = agentId;
|
|
115
|
+
}
|
|
116
|
+
const model = options.model?.trim();
|
|
117
|
+
if (model) {
|
|
118
|
+
params.model = model;
|
|
119
|
+
}
|
|
120
|
+
const providerSessionId = options.providerSessionId?.trim();
|
|
121
|
+
if (providerSessionId) {
|
|
122
|
+
params.sessionId = providerSessionId;
|
|
123
|
+
}
|
|
124
|
+
if (sessionKey) {
|
|
125
|
+
params.sessionKey = sessionKey;
|
|
126
|
+
}
|
|
127
|
+
return params;
|
|
128
|
+
}
|
|
129
|
+
function resolveOpenClawArguments(env) {
|
|
130
|
+
const raw = env?.OPENCLAW_ARGUMENTS?.trim();
|
|
131
|
+
if (!raw) {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
return raw
|
|
135
|
+
.split(" ")
|
|
136
|
+
.map((part) => part.trim())
|
|
137
|
+
.filter((part) => part.length > 0);
|
|
138
|
+
}
|
|
139
|
+
function resolveGatewayInvocationRuntime(env) {
|
|
140
|
+
const parsed = tokenizeArguments(env?.OPENCLAW_ARGUMENTS);
|
|
141
|
+
let gatewayUrl = env?.OPENCLAW_GATEWAY_URL?.trim();
|
|
142
|
+
let gatewayToken = env?.OPENCLAW_GATEWAY_PASSWORD?.trim();
|
|
143
|
+
const globalArgs = [];
|
|
144
|
+
for (let index = 0; index < parsed.length; index += 1) {
|
|
145
|
+
const token = parsed[index]?.trim();
|
|
146
|
+
if (!token) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (token === "--remote") {
|
|
150
|
+
const next = parsed[index + 1]?.trim();
|
|
151
|
+
if (next && !next.startsWith("--")) {
|
|
152
|
+
if (!gatewayUrl) {
|
|
153
|
+
gatewayUrl = next;
|
|
154
|
+
}
|
|
155
|
+
index += 1;
|
|
156
|
+
}
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (token === "--token") {
|
|
160
|
+
const next = parsed[index + 1]?.trim();
|
|
161
|
+
if (next && !next.startsWith("--")) {
|
|
162
|
+
if (!gatewayToken) {
|
|
163
|
+
gatewayToken = next;
|
|
164
|
+
}
|
|
165
|
+
index += 1;
|
|
166
|
+
}
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
globalArgs.push(token);
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
globalArgs,
|
|
173
|
+
gatewayUrl,
|
|
174
|
+
gatewayToken,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function tokenizeArguments(raw) {
|
|
178
|
+
const value = raw?.trim();
|
|
179
|
+
if (!value) {
|
|
180
|
+
return [];
|
|
181
|
+
}
|
|
182
|
+
return value
|
|
183
|
+
.split(" ")
|
|
184
|
+
.map((part) => part.trim())
|
|
185
|
+
.filter((part) => part.length > 0);
|
|
186
|
+
}
|
|
187
|
+
function normalizeSessionSegment(value) {
|
|
188
|
+
const normalized = (value ?? "")
|
|
189
|
+
.trim()
|
|
190
|
+
.toLowerCase()
|
|
191
|
+
.replace(/[^a-z0-9:-]+/g, "-")
|
|
192
|
+
.replace(/^-+|-+$/g, "");
|
|
193
|
+
return normalized;
|
|
194
|
+
}
|
|
195
|
+
function parseGatewayAgentResponse(raw) {
|
|
196
|
+
const trimmed = raw.trim();
|
|
197
|
+
if (!trimmed) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
let parsed;
|
|
201
|
+
try {
|
|
202
|
+
parsed = JSON.parse(trimmed);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
if (!parsed || typeof parsed !== "object") {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
const record = parsed;
|
|
211
|
+
const lines = [];
|
|
212
|
+
for (const payload of record.result?.payloads ?? []) {
|
|
213
|
+
const text = typeof payload?.text === "string" ? payload.text.trim() : "";
|
|
214
|
+
if (text) {
|
|
215
|
+
lines.push(text);
|
|
216
|
+
}
|
|
217
|
+
for (const mediaUrl of normalizeMediaUrls(payload?.mediaUrl, payload?.mediaUrls)) {
|
|
218
|
+
lines.push(`MEDIA:${mediaUrl}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
assistantText: lines.join("\n\n").trim(),
|
|
223
|
+
providerSessionId: typeof record.result?.meta?.agentMeta?.sessionId === "string"
|
|
224
|
+
? record.result.meta.agentMeta.sessionId.trim() || undefined
|
|
225
|
+
: undefined,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
function normalizeMediaUrls(mediaUrl, mediaUrls) {
|
|
229
|
+
const urls = [];
|
|
230
|
+
if (typeof mediaUrl === "string") {
|
|
231
|
+
const normalized = mediaUrl.trim();
|
|
232
|
+
if (normalized) {
|
|
233
|
+
urls.push(normalized);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (!Array.isArray(mediaUrls)) {
|
|
237
|
+
return urls;
|
|
238
|
+
}
|
|
239
|
+
for (const entry of mediaUrls) {
|
|
240
|
+
if (typeof entry !== "string") {
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
const normalized = entry.trim();
|
|
244
|
+
if (normalized) {
|
|
245
|
+
urls.push(normalized);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return urls;
|
|
94
249
|
}
|
|
95
250
|
function dedupePathEntries(entries) {
|
|
96
251
|
const seen = new Set();
|
|
@@ -105,4 +260,30 @@ function dedupePathEntries(entries) {
|
|
|
105
260
|
}
|
|
106
261
|
return result;
|
|
107
262
|
}
|
|
263
|
+
function resolvePreferredCommandPaths(env) {
|
|
264
|
+
const homeDir = homedir();
|
|
265
|
+
const preferredPaths = [
|
|
266
|
+
dirname(process.execPath),
|
|
267
|
+
join(homeDir, ".npm-global", "bin"),
|
|
268
|
+
join(homeDir, ".npm", "bin"),
|
|
269
|
+
join(homeDir, ".local", "bin"),
|
|
270
|
+
join(homeDir, ".volta", "bin"),
|
|
271
|
+
join(homeDir, ".fnm", "current", "bin"),
|
|
272
|
+
join(homeDir, ".asdf", "shims"),
|
|
273
|
+
join(homeDir, "bin"),
|
|
274
|
+
];
|
|
275
|
+
const npmPrefixCandidates = dedupePathEntries([
|
|
276
|
+
env.npm_config_prefix ?? "",
|
|
277
|
+
env.NPM_CONFIG_PREFIX ?? "",
|
|
278
|
+
process.env.npm_config_prefix ?? "",
|
|
279
|
+
process.env.NPM_CONFIG_PREFIX ?? "",
|
|
280
|
+
]);
|
|
281
|
+
for (const prefix of npmPrefixCandidates) {
|
|
282
|
+
preferredPaths.push(join(prefix, "bin"));
|
|
283
|
+
}
|
|
284
|
+
if (process.platform === "darwin") {
|
|
285
|
+
preferredPaths.push("/opt/homebrew/bin", "/opt/homebrew/opt/node@22/bin", "/usr/local/opt/node@22/bin");
|
|
286
|
+
}
|
|
287
|
+
return preferredPaths;
|
|
288
|
+
}
|
|
108
289
|
//# sourceMappingURL=provider.js.map
|