opencode-img 0.1.0 → 0.2.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 +64 -16
- package/dist/config.d.ts +4 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -15
- package/dist/config.js.map +1 -1
- package/dist/gemini-provider.d.ts +17 -0
- package/dist/gemini-provider.d.ts.map +1 -0
- package/dist/gemini-provider.js +130 -0
- package/dist/gemini-provider.js.map +1 -0
- package/dist/grok-provider.d.ts +17 -0
- package/dist/grok-provider.d.ts.map +1 -0
- package/dist/grok-provider.js +94 -0
- package/dist/grok-provider.js.map +1 -0
- package/dist/http.d.ts +23 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +55 -0
- package/dist/http.js.map +1 -0
- package/dist/image.d.ts +11 -2
- package/dist/image.d.ts.map +1 -1
- package/dist/image.js +42 -15
- package/dist/image.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -6
- package/dist/index.js.map +1 -1
- package/dist/openai-provider.d.ts +12 -7
- package/dist/openai-provider.d.ts.map +1 -1
- package/dist/openai-provider.js +34 -48
- package/dist/openai-provider.js.map +1 -1
- package/dist/provider.d.ts +9 -3
- package/dist/provider.d.ts.map +1 -1
- package/dist/providers.d.ts +32 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +60 -0
- package/dist/providers.js.map +1 -0
- package/dist/tool.d.ts +9 -5
- package/dist/tool.d.ts.map +1 -1
- package/dist/tool.js +27 -31
- package/dist/tool.js.map +1 -1
- package/package.json +12 -9
package/dist/tool.js
CHANGED
|
@@ -1,26 +1,11 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { basename } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { OUTPUT_FORMAT_VALUES, QUALITY_VALUES } from "./config.js";
|
|
4
4
|
import { ImageToolError, invalidArgument, requireNonEmptyString } from "./errors.js";
|
|
5
5
|
import { SUPPORTED_REFERENCE_EXTENSIONS, mimeTypeForReferencePath } from "./image.js";
|
|
6
|
-
import { createOpenAIImageProvider } from "./openai-provider.js";
|
|
7
6
|
import { resolveOutputPath, writeImageWithoutOverwrite } from "./paths.js";
|
|
7
|
+
import { DEFAULT_PROVIDER, getProvider, resolveProviderKey } from "./providers.js";
|
|
8
8
|
export const TOOL_NAME = "gpt_imagegen";
|
|
9
|
-
/**
|
|
10
|
-
* Find the OpenAI API key, in precedence order: the `OPENAI_API_KEY`
|
|
11
|
-
* environment variable, then OpenCode's OpenAI connection. Fails before any
|
|
12
|
-
* network request when neither is present.
|
|
13
|
-
*/
|
|
14
|
-
async function resolveApiKey(dependencies) {
|
|
15
|
-
const env = dependencies.env ?? process.env;
|
|
16
|
-
const fromEnv = env.OPENAI_API_KEY;
|
|
17
|
-
if (typeof fromEnv === "string" && fromEnv !== "")
|
|
18
|
-
return fromEnv;
|
|
19
|
-
const fromConnection = await dependencies.resolveApiKey?.();
|
|
20
|
-
if (typeof fromConnection === "string" && fromConnection !== "")
|
|
21
|
-
return fromConnection;
|
|
22
|
-
throw new ImageToolError("missing_api_key", "validate API key", "No OpenAI API key was found. Connect OpenAI in OpenCode (run /connect) or set OPENAI_API_KEY.");
|
|
23
|
-
}
|
|
24
9
|
const INPUT_SCHEMA = {
|
|
25
10
|
type: "object",
|
|
26
11
|
properties: {
|
|
@@ -32,28 +17,32 @@ const INPUT_SCHEMA = {
|
|
|
32
17
|
type: "string",
|
|
33
18
|
description: "Where to save the image. Relative paths resolve against the session directory; an existing file is never replaced.",
|
|
34
19
|
},
|
|
20
|
+
provider: {
|
|
21
|
+
type: "string",
|
|
22
|
+
description: `Image provider. Defaults to ${DEFAULT_PROVIDER}.`,
|
|
23
|
+
},
|
|
35
24
|
model: {
|
|
36
25
|
type: "string",
|
|
37
|
-
description:
|
|
26
|
+
description: "Image model. Defaults to the provider's default.",
|
|
38
27
|
},
|
|
39
28
|
quality: {
|
|
40
29
|
type: "string",
|
|
41
30
|
enum: [...QUALITY_VALUES],
|
|
42
|
-
description: "Generation quality. Defaults to the model's own default.",
|
|
31
|
+
description: "Generation quality (OpenAI models only). Defaults to the model's own default.",
|
|
43
32
|
},
|
|
44
33
|
size: {
|
|
45
34
|
type: "string",
|
|
46
|
-
description: "Image size as WIDTHxHEIGHT, or auto. Defaults to the model's own default.",
|
|
35
|
+
description: "Image size as WIDTHxHEIGHT, or auto (OpenAI models only). Defaults to the model's own default.",
|
|
47
36
|
},
|
|
48
37
|
outputFormat: {
|
|
49
38
|
type: "string",
|
|
50
39
|
enum: [...OUTPUT_FORMAT_VALUES],
|
|
51
|
-
description: "Output format
|
|
40
|
+
description: "Output format. OpenAI: png, jpeg, or webp; Gemini: png or jpeg. Defaults to the format implied by the output path extension.",
|
|
52
41
|
},
|
|
53
42
|
referenceImages: {
|
|
54
43
|
type: "array",
|
|
55
44
|
items: { type: "string" },
|
|
56
|
-
description: "Local reference image paths. When present the tool edits them through the
|
|
45
|
+
description: "Local reference image paths. When present the tool edits them through the provider's edit endpoint.",
|
|
57
46
|
},
|
|
58
47
|
},
|
|
59
48
|
required: ["prompt", "outputPath"],
|
|
@@ -105,29 +94,35 @@ async function loadReferences(paths, sessionDirectory) {
|
|
|
105
94
|
export function createGptImagegenTool(dependencies) {
|
|
106
95
|
return {
|
|
107
96
|
name: TOOL_NAME,
|
|
108
|
-
description: "Generate a new bitmap image from a prompt, or edit one from local reference images
|
|
97
|
+
description: "Generate a new bitmap image from a prompt, or edit one from local reference images. Saves one image to disk and returns its path.",
|
|
109
98
|
input: INPUT_SCHEMA,
|
|
110
99
|
options: { codemode: true },
|
|
111
100
|
async execute(input, context) {
|
|
112
|
-
const apiKey = await resolveApiKey(dependencies);
|
|
113
101
|
const record = (input ?? {});
|
|
114
102
|
const prompt = requireNonEmptyString(record.prompt, "prompt");
|
|
115
103
|
const outputPath = requireNonEmptyString(record.outputPath, "outputPath");
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
104
|
+
const providerId = record.provider === undefined
|
|
105
|
+
? (dependencies.defaultProvider ?? DEFAULT_PROVIDER).toLowerCase()
|
|
106
|
+
: requireNonEmptyString(record.provider, "provider").toLowerCase();
|
|
107
|
+
const providerDefinition = getProvider(providerId);
|
|
108
|
+
const apiKey = await resolveProviderKey(providerDefinition, {
|
|
109
|
+
env: dependencies.env ?? process.env,
|
|
110
|
+
connectionKey: dependencies.resolveConnectionKey,
|
|
121
111
|
});
|
|
122
112
|
const referencePaths = readReferencePaths(record.referenceImages);
|
|
123
113
|
const sessionDirectory = await dependencies.resolveSessionDirectory(context.sessionID);
|
|
124
114
|
const targetPath = resolveOutputPath(outputPath, sessionDirectory);
|
|
125
|
-
const settings =
|
|
115
|
+
const settings = providerDefinition.resolveSettings({
|
|
116
|
+
model: record.model ?? dependencies.defaultModels?.[providerId],
|
|
117
|
+
quality: record.quality,
|
|
118
|
+
size: record.size,
|
|
119
|
+
outputFormat: record.outputFormat,
|
|
120
|
+
}, targetPath);
|
|
126
121
|
const references = await loadReferences(referencePaths, sessionDirectory);
|
|
127
122
|
await context.progress({
|
|
128
123
|
status: references.length > 0 ? "editing image" : "generating image",
|
|
129
124
|
});
|
|
130
|
-
const provider =
|
|
125
|
+
const provider = providerDefinition.create({
|
|
131
126
|
apiKey,
|
|
132
127
|
baseUrl: dependencies.baseUrl,
|
|
133
128
|
fetch: dependencies.fetch,
|
|
@@ -140,6 +135,7 @@ export function createGptImagegenTool(dependencies) {
|
|
|
140
135
|
const savedPath = await writeImageWithoutOverwrite(targetPath, result.data);
|
|
141
136
|
const metadata = {
|
|
142
137
|
path: savedPath,
|
|
138
|
+
provider: providerDefinition.id,
|
|
143
139
|
model: settings.model,
|
|
144
140
|
mimeType: result.mimeType,
|
|
145
141
|
bytes: result.data.byteLength,
|
package/dist/tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-img",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "An OpenCode V2 plugin that generates and edits
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "An OpenCode V2 plugin that generates and edits images through OpenAI and Gemini image APIs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -16,11 +16,19 @@
|
|
|
16
16
|
"README.md",
|
|
17
17
|
"LICENSE"
|
|
18
18
|
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"test": "node --test \"test/**/*.test.ts\"",
|
|
21
|
+
"typecheck": "tsc --noEmit",
|
|
22
|
+
"build": "tsc -p tsconfig.build.json",
|
|
23
|
+
"prepublishOnly": "pnpm typecheck && pnpm test && pnpm build"
|
|
24
|
+
},
|
|
19
25
|
"keywords": [
|
|
20
26
|
"opencode",
|
|
21
27
|
"opencode-plugin",
|
|
28
|
+
"image-generation",
|
|
22
29
|
"openai",
|
|
23
|
-
"
|
|
30
|
+
"gemini",
|
|
31
|
+
"nano-banana"
|
|
24
32
|
],
|
|
25
33
|
"license": "MIT",
|
|
26
34
|
"repository": {
|
|
@@ -40,10 +48,5 @@
|
|
|
40
48
|
"devDependencies": {
|
|
41
49
|
"@types/node": "^24.0.0",
|
|
42
50
|
"typescript": "^5.9.0"
|
|
43
|
-
},
|
|
44
|
-
"scripts": {
|
|
45
|
-
"test": "node --test \"test/**/*.test.ts\"",
|
|
46
|
-
"typecheck": "tsc --noEmit",
|
|
47
|
-
"build": "tsc -p tsconfig.build.json"
|
|
48
51
|
}
|
|
49
|
-
}
|
|
52
|
+
}
|