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/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 { DEFAULT_MODEL, OUTPUT_FORMAT_VALUES, QUALITY_VALUES, reconcileOutputFormat, resolveSettings, } from "./config.js";
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: `OpenAI image model. Defaults to ${DEFAULT_MODEL}.`,
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 for GPT image models. Defaults to the format implied by the output path extension.",
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 OpenAI edits endpoint.",
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, using the OpenAI Image API. Saves one image to disk and returns its path.",
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 requestedSettings = resolveSettings({
117
- model: record.model,
118
- quality: record.quality,
119
- size: record.size,
120
- outputFormat: record.outputFormat,
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 = reconcileOutputFormat(requestedSettings, targetPath);
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 = createOpenAIImageProvider({
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":"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"}
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.1.0",
4
- "description": "An OpenCode V2 plugin that generates and edits bitmap images through the OpenAI Image API.",
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
- "image-generation"
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
+ }