@moonmath-ai/zro 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +87 -0
- package/dist/args.d.ts +8 -0
- package/dist/args.js +110 -0
- package/dist/args.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants.d.ts +21 -0
- package/dist/constants.js +20 -0
- package/dist/constants.js.map +1 -0
- package/dist/files.d.ts +2 -0
- package/dist/files.js +17 -0
- package/dist/files.js.map +1 -0
- package/dist/key.d.ts +25 -0
- package/dist/key.js +146 -0
- package/dist/key.js.map +1 -0
- package/dist/models.d.ts +6 -0
- package/dist/models.js +128 -0
- package/dist/models.js.map +1 -0
- package/dist/run.d.ts +13 -0
- package/dist/run.js +235 -0
- package/dist/run.js.map +1 -0
- package/dist/serializers.d.ts +7 -0
- package/dist/serializers.js +35 -0
- package/dist/serializers.js.map +1 -0
- package/dist/tools/claude.d.ts +2 -0
- package/dist/tools/claude.js +24 -0
- package/dist/tools/claude.js.map +1 -0
- package/dist/tools/codex.d.ts +2 -0
- package/dist/tools/codex.js +82 -0
- package/dist/tools/codex.js.map +1 -0
- package/dist/tools/helpers.d.ts +2 -0
- package/dist/tools/helpers.js +17 -0
- package/dist/tools/helpers.js.map +1 -0
- package/dist/tools/hermes.d.ts +2 -0
- package/dist/tools/hermes.js +64 -0
- package/dist/tools/hermes.js.map +1 -0
- package/dist/tools/openclaw.d.ts +2 -0
- package/dist/tools/openclaw.js +84 -0
- package/dist/tools/openclaw.js.map +1 -0
- package/dist/tools/opencode.d.ts +2 -0
- package/dist/tools/opencode.js +65 -0
- package/dist/tools/opencode.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { BASE_URL, PROVIDER_ID, PROVIDER_NAME, ZRO_ENV_KEY, ZRO_MODELS } from "../constants.js";
|
|
3
|
+
import { readConfig } from "../files.js";
|
|
4
|
+
import { jsonSerializer } from "../serializers.js";
|
|
5
|
+
import { asPlainObject, objectAt } from "./helpers.js";
|
|
6
|
+
export const opencodeTool = {
|
|
7
|
+
id: "opencode",
|
|
8
|
+
label: "opencode",
|
|
9
|
+
async launch(ctx) {
|
|
10
|
+
const configRoot = path.join(ctx.tempDir, "xdg");
|
|
11
|
+
const filePath = path.join(configRoot, "opencode", "opencode.json");
|
|
12
|
+
const userConfigRoot = process.env.XDG_CONFIG_HOME ?? path.join(ctx.homeDir, ".config");
|
|
13
|
+
const existing = await readConfig(path.join(userConfigRoot, "opencode", "opencode.json"), jsonSerializer);
|
|
14
|
+
const nextConfig = buildOpenCodeConfig(existing, ctx.apiKey, true);
|
|
15
|
+
nextConfig.model = `${PROVIDER_ID}/${ctx.model}`;
|
|
16
|
+
return {
|
|
17
|
+
tool: "opencode",
|
|
18
|
+
label: "opencode",
|
|
19
|
+
model: ctx.model,
|
|
20
|
+
command: "opencode",
|
|
21
|
+
args: ctx.extraArgs,
|
|
22
|
+
env: {
|
|
23
|
+
XDG_CONFIG_HOME: configRoot,
|
|
24
|
+
[ZRO_ENV_KEY]: ctx.apiKey
|
|
25
|
+
},
|
|
26
|
+
files: [{
|
|
27
|
+
path: filePath,
|
|
28
|
+
contents: jsonSerializer.stringify(nextConfig)
|
|
29
|
+
}],
|
|
30
|
+
message: "Launch opencode with Zro"
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
function buildOpenCodeConfig(existing, apiKey, useEnvReference = false) {
|
|
35
|
+
const next = { ...existing };
|
|
36
|
+
if (typeof next.$schema !== "string") {
|
|
37
|
+
next.$schema = "https://opencode.ai/config.json";
|
|
38
|
+
}
|
|
39
|
+
const provider = objectAt(next, "provider");
|
|
40
|
+
provider[PROVIDER_ID] = openAiCompatibleProvider(provider[PROVIDER_ID], apiKey, ZRO_MODELS.map((model) => model.id), useEnvReference);
|
|
41
|
+
return next;
|
|
42
|
+
}
|
|
43
|
+
function openAiCompatibleProvider(existing, apiKey, modelIds, useEnvReference = false) {
|
|
44
|
+
const existingProvider = asPlainObject(existing) ?? {};
|
|
45
|
+
const existingOptions = asPlainObject(existingProvider.options) ?? {};
|
|
46
|
+
const models = { ...(asPlainObject(existingProvider.models) ?? {}) };
|
|
47
|
+
for (const model of modelIds) {
|
|
48
|
+
models[model] = {
|
|
49
|
+
...(asPlainObject(models[model]) ?? {}),
|
|
50
|
+
name: model
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
...existingProvider,
|
|
55
|
+
npm: "@ai-sdk/openai-compatible",
|
|
56
|
+
name: PROVIDER_NAME,
|
|
57
|
+
options: {
|
|
58
|
+
...existingOptions,
|
|
59
|
+
baseURL: BASE_URL,
|
|
60
|
+
apiKey: useEnvReference ? `{env:${ZRO_ENV_KEY}}` : apiKey
|
|
61
|
+
},
|
|
62
|
+
models
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/tools/opencode.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Readable, Writable } from "node:stream";
|
|
2
|
+
import type { ChildProcess } from "node:child_process";
|
|
3
|
+
import type { SUPPORTED_TOOLS } from "./constants.js";
|
|
4
|
+
export type ToolId = (typeof SUPPORTED_TOOLS)[number];
|
|
5
|
+
export type ApiKeySource = "flag" | "env" | "stored";
|
|
6
|
+
export type CliArgs = {
|
|
7
|
+
command: "launch";
|
|
8
|
+
tool: string;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
model?: string;
|
|
11
|
+
print: boolean;
|
|
12
|
+
extraArgs: string[];
|
|
13
|
+
} | {
|
|
14
|
+
command: "login";
|
|
15
|
+
apiKey?: string;
|
|
16
|
+
} | {
|
|
17
|
+
command: "logout";
|
|
18
|
+
} | {
|
|
19
|
+
command: "auth-status";
|
|
20
|
+
};
|
|
21
|
+
export interface LaunchContext {
|
|
22
|
+
apiKey: string;
|
|
23
|
+
apiKeySource: ApiKeySource;
|
|
24
|
+
model: string;
|
|
25
|
+
print: boolean;
|
|
26
|
+
extraArgs: string[];
|
|
27
|
+
homeDir: string;
|
|
28
|
+
cwd: string;
|
|
29
|
+
tempDir: string;
|
|
30
|
+
stdin: Readable;
|
|
31
|
+
stdout: Writable;
|
|
32
|
+
stderr: Writable;
|
|
33
|
+
}
|
|
34
|
+
export interface LaunchFile {
|
|
35
|
+
path: string;
|
|
36
|
+
contents: string;
|
|
37
|
+
}
|
|
38
|
+
export interface LaunchPlan {
|
|
39
|
+
tool: ToolId;
|
|
40
|
+
label: string;
|
|
41
|
+
model: string;
|
|
42
|
+
command: string;
|
|
43
|
+
args: string[];
|
|
44
|
+
env?: Record<string, string>;
|
|
45
|
+
files?: LaunchFile[];
|
|
46
|
+
message?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface ToolModule {
|
|
49
|
+
id: ToolId;
|
|
50
|
+
label: string;
|
|
51
|
+
launch(ctx: LaunchContext): Promise<LaunchPlan>;
|
|
52
|
+
}
|
|
53
|
+
export interface SpawnOptions {
|
|
54
|
+
cwd: string;
|
|
55
|
+
env: NodeJS.ProcessEnv;
|
|
56
|
+
stdio: "inherit";
|
|
57
|
+
}
|
|
58
|
+
export type SpawnProcess = (command: string, args: string[], options: SpawnOptions) => ChildProcess;
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@moonmath-ai/zro",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Launch coding tools with the Zro OpenAI-compatible endpoint.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"zro": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"os": [
|
|
14
|
+
"!win32"
|
|
15
|
+
],
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=18"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "rm -rf dist && tsc -p tsconfig.json && chmod +x dist/cli.js",
|
|
21
|
+
"prepack": "npm run build",
|
|
22
|
+
"test": "vitest run"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"json5": "^2.2.3",
|
|
26
|
+
"yaml": "^2.8.1"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^20.19.0",
|
|
30
|
+
"typescript": "^5.9.3",
|
|
31
|
+
"vitest": "^4.0.15"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [
|
|
34
|
+
"zro",
|
|
35
|
+
"cli",
|
|
36
|
+
"claude",
|
|
37
|
+
"codex",
|
|
38
|
+
"hermes",
|
|
39
|
+
"openclaw",
|
|
40
|
+
"opencode"
|
|
41
|
+
],
|
|
42
|
+
"license": "MIT"
|
|
43
|
+
}
|