opencode-nanobanana 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/index.d.ts +1 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -12
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +19 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +259 -0
- package/dist/plugin.js.map +1 -0
- package/package.json +2 -1
- package/.ralph-events.json +0 -151
- package/.ralph-last-branch +0 -1
- package/.ralph-monitor-state.json +0 -7
- package/.ralph-monitor.pid +0 -1
- package/.ralph-timing.json +0 -26
- package/dist/tools/docs/architecture-diagram.d.ts +0 -12
- package/dist/tools/docs/architecture-diagram.d.ts.map +0 -1
- package/dist/tools/docs/architecture-diagram.js +0 -179
- package/dist/tools/docs/architecture-diagram.js.map +0 -1
- package/dist/tools/docs/readme-banner.d.ts +0 -6
- package/dist/tools/docs/readme-banner.d.ts.map +0 -1
- package/dist/tools/docs/readme-banner.js +0 -108
- package/dist/tools/docs/readme-banner.js.map +0 -1
- package/dist/tools/docs/sequence-diagram.d.ts +0 -12
- package/dist/tools/docs/sequence-diagram.d.ts.map +0 -1
- package/dist/tools/docs/sequence-diagram.js +0 -161
- package/dist/tools/docs/sequence-diagram.js.map +0 -1
- package/dist/tools/docs/social-preview.d.ts +0 -11
- package/dist/tools/docs/social-preview.d.ts.map +0 -1
- package/dist/tools/docs/social-preview.js +0 -111
- package/dist/tools/docs/social-preview.js.map +0 -1
- package/docs/PLUGIN-VERIFICATION.md +0 -182
- package/logs/notifications.jsonl +0 -46
- package/prd.json +0 -216
- package/progress.txt +0 -145
- package/ralph-report.html +0 -297
- package/src/index.ts +0 -23
- package/src/platforms/android/.gitkeep +0 -0
- package/src/platforms/ios/.gitkeep +0 -0
- package/src/platforms/web/.gitkeep +0 -0
- package/src/providers/.gitkeep +0 -0
- package/src/providers/gemini.ts +0 -288
- package/src/tools/core/.gitkeep +0 -0
- package/src/tools/platform/.gitkeep +0 -0
- package/src/tools/video/extend-video.ts +0 -71
- package/src/tools/video/generate-video.ts +0 -70
- package/src/tools/video/image-to-video.ts +0 -76
- package/src/tools/video/storyboard-video.ts +0 -325
- package/src/utils/.gitkeep +0 -0
- package/src/utils/ffmpeg.ts +0 -266
- package/src/utils/file-handler.ts +0 -10
- package/src/utils/image-processing.ts +0 -10
- package/templates/.gitkeep +0 -0
- package/test-analyze-screenshot.ts +0 -50
- package/test-app-icons.ts +0 -55
- package/test-cat-sunset.ts +0 -30
- package/test-full-plugin.ts +0 -88
- package/test-icon-gen.ts +0 -30
- package/test-output/test-edit.png +0 -0
- package/test-output/test-generate.png +0 -0
- package/test-output/test-video.mp4 +0 -0
- package/test-princess-emma-continue.ts +0 -35
- package/test-princess-emma-full.ts +0 -38
- package/test-princess-emma-short.ts +0 -32
- package/test-princess-emma-with-reference.ts +0 -34
- package/test-princess-emma.ts +0 -38
- package/test-product-ad.ts +0 -66
- package/test-ralph-droid.ts +0 -30
- package/test-social-preview.ts +0 -61
- package/test-veo31-live.ts +0 -187
- package/test-video-gen.ts +0 -40
- package/test-video-veo.ts +0 -73
- package/test-zurich-video.ts +0 -64
- package/tests/.gitkeep +0 -0
- package/tests/providers/gemini.test.ts +0 -388
- package/tests/utils/ffmpeg.test.ts +0 -328
- package/tests/video/storyboard.test.ts +0 -469
- package/tsconfig.json +0 -25
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenCode Visual Toolkit
|
|
3
|
-
*
|
|
4
|
-
* A comprehensive plugin providing visual capabilities:
|
|
5
|
-
* - Image generation (Nano Banana)
|
|
6
|
-
* - Visual analysis
|
|
7
|
-
* - Design-to-code
|
|
8
|
-
* - App asset pipelines (iOS, Android, macOS, Web)
|
|
9
|
-
*/
|
|
10
1
|
export * from './providers/gemini.js';
|
|
11
2
|
export * from './utils/file-handler.js';
|
|
12
3
|
export * from './utils/image-processing.js';
|
|
@@ -15,4 +6,5 @@ export * from './tools/video/generate-video.js';
|
|
|
15
6
|
export * from './tools/video/image-to-video.js';
|
|
16
7
|
export * from './tools/video/storyboard-video.js';
|
|
17
8
|
export * from './tools/video/extend-video.js';
|
|
9
|
+
export { default } from './plugin.js';
|
|
18
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenCode Visual Toolkit
|
|
3
|
-
*
|
|
4
|
-
* A comprehensive plugin providing visual capabilities:
|
|
5
|
-
* - Image generation (Nano Banana)
|
|
6
|
-
* - Visual analysis
|
|
7
|
-
* - Design-to-code
|
|
8
|
-
* - App asset pipelines (iOS, Android, macOS, Web)
|
|
9
|
-
*/
|
|
10
|
-
// Re-export providers
|
|
11
1
|
export * from './providers/gemini.js';
|
|
12
|
-
// Re-export utilities
|
|
13
2
|
export * from './utils/file-handler.js';
|
|
14
3
|
export * from './utils/image-processing.js';
|
|
15
4
|
export * from './utils/ffmpeg.js';
|
|
16
|
-
// Re-export tools
|
|
17
5
|
export * from './tools/video/generate-video.js';
|
|
18
6
|
export * from './tools/video/image-to-video.js';
|
|
19
7
|
export * from './tools/video/storyboard-video.js';
|
|
20
8
|
export * from './tools/video/extend-video.js';
|
|
9
|
+
export { default } from './plugin.js';
|
|
21
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode Plugin Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Exposes Nanobanana's visual capabilities as OpenCode tools.
|
|
5
|
+
* Uses the @opencode-ai/plugin SDK for tool definitions.
|
|
6
|
+
*/
|
|
7
|
+
import type { Plugin } from '@opencode-ai/plugin';
|
|
8
|
+
/**
|
|
9
|
+
* Nanobanana Plugin for OpenCode
|
|
10
|
+
*
|
|
11
|
+
* Provides visual AI capabilities:
|
|
12
|
+
* - Video generation (Veo 3)
|
|
13
|
+
* - Image to video animation
|
|
14
|
+
* - Storyboard video generation
|
|
15
|
+
* - Video extension
|
|
16
|
+
*/
|
|
17
|
+
declare const plugin: Plugin;
|
|
18
|
+
export default plugin;
|
|
19
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAoBlD;;;;;;;;GAQG;AACH,QAAA,MAAM,MAAM,EAAE,MAoQb,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode Plugin Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Exposes Nanobanana's visual capabilities as OpenCode tools.
|
|
5
|
+
* Uses the @opencode-ai/plugin SDK for tool definitions.
|
|
6
|
+
*/
|
|
7
|
+
import { tool } from '@opencode-ai/plugin/tool';
|
|
8
|
+
import { generateVideo } from './tools/video/generate-video.js';
|
|
9
|
+
import { imageToVideo } from './tools/video/image-to-video.js';
|
|
10
|
+
import { generateStoryboardVideo } from './tools/video/storyboard-video.js';
|
|
11
|
+
import { extendVideo } from './tools/video/extend-video.js';
|
|
12
|
+
/**
|
|
13
|
+
* Get Gemini API key from environment
|
|
14
|
+
*/
|
|
15
|
+
function getApiKey() {
|
|
16
|
+
const apiKey = process.env.GEMINI_API_KEY;
|
|
17
|
+
if (!apiKey) {
|
|
18
|
+
throw new Error('GEMINI_API_KEY environment variable is required. ' +
|
|
19
|
+
'Get one at https://aistudio.google.com/app/apikey');
|
|
20
|
+
}
|
|
21
|
+
return apiKey;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Nanobanana Plugin for OpenCode
|
|
25
|
+
*
|
|
26
|
+
* Provides visual AI capabilities:
|
|
27
|
+
* - Video generation (Veo 3)
|
|
28
|
+
* - Image to video animation
|
|
29
|
+
* - Storyboard video generation
|
|
30
|
+
* - Video extension
|
|
31
|
+
*/
|
|
32
|
+
const plugin = async (_input) => {
|
|
33
|
+
return {
|
|
34
|
+
tool: {
|
|
35
|
+
/**
|
|
36
|
+
* Generate video from text prompt using Veo 3
|
|
37
|
+
*/
|
|
38
|
+
mcp_generate_video: tool({
|
|
39
|
+
description: 'Generate a video from a text prompt using Google Veo 3. ' +
|
|
40
|
+
'Creates high-quality video content with native audio generation. ' +
|
|
41
|
+
'Supports various aspect ratios (16:9, 9:16) and resolutions (720p, 1080p). ' +
|
|
42
|
+
'Duration can be 4, 6, or 8 seconds.',
|
|
43
|
+
args: {
|
|
44
|
+
prompt: tool.schema.string().describe('Description of the video to generate. Be specific about action, scene, lighting, mood, etc. ' +
|
|
45
|
+
'Example: "A serene mountain landscape at sunrise with fog rolling through the valley"'),
|
|
46
|
+
aspectRatio: tool.schema
|
|
47
|
+
.enum(['16:9', '9:16'])
|
|
48
|
+
.optional()
|
|
49
|
+
.describe('Aspect ratio for the video. Defaults to 16:9 (landscape)'),
|
|
50
|
+
resolution: tool.schema
|
|
51
|
+
.enum(['720p', '1080p'])
|
|
52
|
+
.optional()
|
|
53
|
+
.describe('Video resolution. Defaults to 720p'),
|
|
54
|
+
duration: tool.schema
|
|
55
|
+
.enum(['4', '6', '8'])
|
|
56
|
+
.optional()
|
|
57
|
+
.describe('Video duration in seconds. Defaults to 8'),
|
|
58
|
+
outputPath: tool.schema
|
|
59
|
+
.string()
|
|
60
|
+
.optional()
|
|
61
|
+
.describe('Path where the video should be saved. If not provided, saves to temp directory'),
|
|
62
|
+
},
|
|
63
|
+
async execute(args, _context) {
|
|
64
|
+
const apiKey = getApiKey();
|
|
65
|
+
const result = await generateVideo({
|
|
66
|
+
apiKey,
|
|
67
|
+
prompt: args.prompt,
|
|
68
|
+
aspectRatio: args.aspectRatio,
|
|
69
|
+
resolution: args.resolution,
|
|
70
|
+
duration: args.duration
|
|
71
|
+
? parseInt(args.duration, 10)
|
|
72
|
+
: undefined,
|
|
73
|
+
outputPath: args.outputPath,
|
|
74
|
+
});
|
|
75
|
+
return JSON.stringify({
|
|
76
|
+
success: true,
|
|
77
|
+
videoPath: result.videoPath,
|
|
78
|
+
generationTime: `${(result.generationTime / 1000).toFixed(1)}s`,
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
}),
|
|
82
|
+
/**
|
|
83
|
+
* Animate a static image into video
|
|
84
|
+
*/
|
|
85
|
+
mcp_image_to_video: tool({
|
|
86
|
+
description: 'Animate a static image into a video using Google Veo 3. ' +
|
|
87
|
+
'Takes an existing image and brings it to life with motion and audio. ' +
|
|
88
|
+
'Useful for animating photos, product images, logos, or artwork.',
|
|
89
|
+
args: {
|
|
90
|
+
imagePath: tool.schema
|
|
91
|
+
.string()
|
|
92
|
+
.describe('Path to the image file to animate'),
|
|
93
|
+
prompt: tool.schema.string().describe('Description of the animation to apply. ' +
|
|
94
|
+
'Example: "Slow camera pan from left to right" or "Product rotates 360 degrees"'),
|
|
95
|
+
aspectRatio: tool.schema
|
|
96
|
+
.enum(['16:9', '9:16'])
|
|
97
|
+
.optional()
|
|
98
|
+
.describe('Aspect ratio for the video. Defaults to 16:9'),
|
|
99
|
+
resolution: tool.schema
|
|
100
|
+
.enum(['720p', '1080p'])
|
|
101
|
+
.optional()
|
|
102
|
+
.describe('Video resolution. Defaults to 720p'),
|
|
103
|
+
duration: tool.schema
|
|
104
|
+
.enum(['4', '6', '8'])
|
|
105
|
+
.optional()
|
|
106
|
+
.describe('Video duration in seconds. Defaults to 8'),
|
|
107
|
+
outputPath: tool.schema
|
|
108
|
+
.string()
|
|
109
|
+
.optional()
|
|
110
|
+
.describe('Path where the video should be saved'),
|
|
111
|
+
},
|
|
112
|
+
async execute(args, _context) {
|
|
113
|
+
const apiKey = getApiKey();
|
|
114
|
+
const result = await imageToVideo({
|
|
115
|
+
apiKey,
|
|
116
|
+
imagePath: args.imagePath,
|
|
117
|
+
prompt: args.prompt,
|
|
118
|
+
aspectRatio: args.aspectRatio,
|
|
119
|
+
resolution: args.resolution,
|
|
120
|
+
duration: args.duration
|
|
121
|
+
? parseInt(args.duration, 10)
|
|
122
|
+
: undefined,
|
|
123
|
+
outputPath: args.outputPath,
|
|
124
|
+
});
|
|
125
|
+
return JSON.stringify({
|
|
126
|
+
success: true,
|
|
127
|
+
videoPath: result.videoPath,
|
|
128
|
+
generationTime: `${(result.generationTime / 1000).toFixed(1)}s`,
|
|
129
|
+
});
|
|
130
|
+
},
|
|
131
|
+
}),
|
|
132
|
+
/**
|
|
133
|
+
* Generate multi-scene storyboard video
|
|
134
|
+
*/
|
|
135
|
+
mcp_generate_storyboard_video: tool({
|
|
136
|
+
description: 'Generate a multi-scene storyboard video by creating individual scenes ' +
|
|
137
|
+
'and stitching them together with transitions. Perfect for commercials, ' +
|
|
138
|
+
'narratives, product demos, or any video requiring multiple scenes. ' +
|
|
139
|
+
'Supports character consistency across scenes using reference images. ' +
|
|
140
|
+
'Requires FFmpeg to be installed.',
|
|
141
|
+
args: {
|
|
142
|
+
scenes: tool.schema
|
|
143
|
+
.array(tool.schema.string())
|
|
144
|
+
.describe('Array of scene descriptions. Each scene will be generated as a separate video segment. ' +
|
|
145
|
+
'Example: ["A coffee shop in the morning", "Barista making latte art", "Customer enjoying coffee"]'),
|
|
146
|
+
style: tool.schema
|
|
147
|
+
.string()
|
|
148
|
+
.optional()
|
|
149
|
+
.describe('Visual style to apply to all scenes. Examples: "cinematic", "commercial", "documentary"'),
|
|
150
|
+
characterDescription: tool.schema
|
|
151
|
+
.string()
|
|
152
|
+
.optional()
|
|
153
|
+
.describe('Description of the main character to maintain consistency across scenes. ' +
|
|
154
|
+
'Example: "A young woman with long brown hair wearing a red jacket"'),
|
|
155
|
+
referenceImages: tool.schema
|
|
156
|
+
.array(tool.schema.string())
|
|
157
|
+
.optional()
|
|
158
|
+
.describe('Array of paths to reference images for character/scene consistency (max 3)'),
|
|
159
|
+
aspectRatio: tool.schema
|
|
160
|
+
.enum(['16:9', '9:16'])
|
|
161
|
+
.optional()
|
|
162
|
+
.describe('Aspect ratio for all scenes. Defaults to 16:9'),
|
|
163
|
+
transition: tool.schema
|
|
164
|
+
.enum(['cut', 'crossfade', 'fade'])
|
|
165
|
+
.optional()
|
|
166
|
+
.describe('Transition type between scenes. Defaults to crossfade'),
|
|
167
|
+
transitionDuration: tool.schema
|
|
168
|
+
.number()
|
|
169
|
+
.optional()
|
|
170
|
+
.describe('Transition duration in seconds. Defaults to 0.5'),
|
|
171
|
+
backgroundMusic: tool.schema
|
|
172
|
+
.string()
|
|
173
|
+
.optional()
|
|
174
|
+
.describe('Path to background music audio file'),
|
|
175
|
+
musicVolume: tool.schema
|
|
176
|
+
.number()
|
|
177
|
+
.optional()
|
|
178
|
+
.describe('Volume level for background music (0.0-1.0). Defaults to 0.3'),
|
|
179
|
+
outputPath: tool.schema
|
|
180
|
+
.string()
|
|
181
|
+
.optional()
|
|
182
|
+
.describe('Path where the final video should be saved'),
|
|
183
|
+
},
|
|
184
|
+
async execute(args, _context) {
|
|
185
|
+
const apiKey = getApiKey();
|
|
186
|
+
const result = await generateStoryboardVideo({
|
|
187
|
+
apiKey,
|
|
188
|
+
scenes: args.scenes,
|
|
189
|
+
style: args.style,
|
|
190
|
+
characterDescription: args.characterDescription,
|
|
191
|
+
referenceImages: args.referenceImages,
|
|
192
|
+
aspectRatio: args.aspectRatio,
|
|
193
|
+
transition: args.transition,
|
|
194
|
+
transitionDuration: args.transitionDuration,
|
|
195
|
+
backgroundMusic: args.backgroundMusic,
|
|
196
|
+
musicVolume: args.musicVolume,
|
|
197
|
+
outputPath: args.outputPath,
|
|
198
|
+
});
|
|
199
|
+
return JSON.stringify({
|
|
200
|
+
success: true,
|
|
201
|
+
videoPath: result.videoPath,
|
|
202
|
+
totalTime: `${(result.totalTime / 1000).toFixed(1)}s`,
|
|
203
|
+
scenesGenerated: result.successCount,
|
|
204
|
+
scenesFailed: result.failureCount,
|
|
205
|
+
sceneTimes: result.sceneTimes.map((s) => ({
|
|
206
|
+
scene: s.scene,
|
|
207
|
+
time: `${(s.time / 1000).toFixed(1)}s`,
|
|
208
|
+
})),
|
|
209
|
+
});
|
|
210
|
+
},
|
|
211
|
+
}),
|
|
212
|
+
/**
|
|
213
|
+
* Extend an existing video with new content
|
|
214
|
+
*/
|
|
215
|
+
mcp_extend_video: tool({
|
|
216
|
+
description: 'Extend an existing video with new content using Google Veo 3. ' +
|
|
217
|
+
'Seamlessly continues the video with AI-generated content matching the original style. ' +
|
|
218
|
+
'Useful for adding scenes, extending clips, or continuing narratives.',
|
|
219
|
+
args: {
|
|
220
|
+
videoPath: tool.schema
|
|
221
|
+
.string()
|
|
222
|
+
.describe('Path to the existing video to extend'),
|
|
223
|
+
prompt: tool.schema.string().describe('Description of what should happen in the extension. ' +
|
|
224
|
+
'Example: "Camera pans to reveal a stunning sunset" or "Text appears: Available now"'),
|
|
225
|
+
aspectRatio: tool.schema
|
|
226
|
+
.enum(['16:9', '9:16'])
|
|
227
|
+
.optional()
|
|
228
|
+
.describe('Aspect ratio for the extended video. Defaults to 16:9'),
|
|
229
|
+
resolution: tool.schema
|
|
230
|
+
.enum(['720p', '1080p'])
|
|
231
|
+
.optional()
|
|
232
|
+
.describe('Resolution for the extended video. Defaults to 720p'),
|
|
233
|
+
outputPath: tool.schema
|
|
234
|
+
.string()
|
|
235
|
+
.optional()
|
|
236
|
+
.describe('Path where the extended video should be saved'),
|
|
237
|
+
},
|
|
238
|
+
async execute(args, _context) {
|
|
239
|
+
const apiKey = getApiKey();
|
|
240
|
+
const result = await extendVideo({
|
|
241
|
+
apiKey,
|
|
242
|
+
videoPath: args.videoPath,
|
|
243
|
+
prompt: args.prompt,
|
|
244
|
+
aspectRatio: args.aspectRatio,
|
|
245
|
+
resolution: args.resolution,
|
|
246
|
+
outputPath: args.outputPath,
|
|
247
|
+
});
|
|
248
|
+
return JSON.stringify({
|
|
249
|
+
success: true,
|
|
250
|
+
videoPath: result.videoPath,
|
|
251
|
+
generationTime: `${(result.generationTime / 1000).toFixed(1)}s`,
|
|
252
|
+
});
|
|
253
|
+
},
|
|
254
|
+
}),
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
};
|
|
258
|
+
export default plugin;
|
|
259
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D;;GAEG;AACH,SAAS,SAAS;IAChB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,mDAAmD;YACjD,mDAAmD,CACtD,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,GAAW,KAAK,EAAE,MAAM,EAAE,EAAE;IACtC,OAAO;QACL,IAAI,EAAE;YACJ;;eAEG;YACH,kBAAkB,EAAE,IAAI,CAAC;gBACvB,WAAW,EACT,0DAA0D;oBAC1D,mEAAmE;oBACnE,6EAA6E;oBAC7E,qCAAqC;gBACvC,IAAI,EAAE;oBACJ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CACnC,8FAA8F;wBAC5F,uFAAuF,CAC1F;oBACD,WAAW,EAAE,IAAI,CAAC,MAAM;yBACrB,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;yBACtB,QAAQ,EAAE;yBACV,QAAQ,CAAC,0DAA0D,CAAC;oBACvE,UAAU,EAAE,IAAI,CAAC,MAAM;yBACpB,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;yBACvB,QAAQ,EAAE;yBACV,QAAQ,CAAC,oCAAoC,CAAC;oBACjD,QAAQ,EAAE,IAAI,CAAC,MAAM;yBAClB,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;yBACrB,QAAQ,EAAE;yBACV,QAAQ,CAAC,0CAA0C,CAAC;oBACvD,UAAU,EAAE,IAAI,CAAC,MAAM;yBACpB,MAAM,EAAE;yBACR,QAAQ,EAAE;yBACV,QAAQ,CACP,gFAAgF,CACjF;iBACJ;gBACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ;oBAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;oBAE3B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;wBACjC,MAAM;wBACN,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,WAAW,EAAE,IAAI,CAAC,WAA0C;wBAC5D,UAAU,EAAE,IAAI,CAAC,UAA0C;wBAC3D,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACrB,CAAC,CAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAe;4BAC5C,CAAC,CAAC,SAAS;wBACb,UAAU,EAAE,IAAI,CAAC,UAAU;qBAC5B,CAAC,CAAC;oBAEH,OAAO,IAAI,CAAC,SAAS,CAAC;wBACpB,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;qBAChE,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;YAEF;;eAEG;YACH,kBAAkB,EAAE,IAAI,CAAC;gBACvB,WAAW,EACT,0DAA0D;oBAC1D,uEAAuE;oBACvE,iEAAiE;gBACnE,IAAI,EAAE;oBACJ,SAAS,EAAE,IAAI,CAAC,MAAM;yBACnB,MAAM,EAAE;yBACR,QAAQ,CAAC,mCAAmC,CAAC;oBAChD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CACnC,yCAAyC;wBACvC,gFAAgF,CACnF;oBACD,WAAW,EAAE,IAAI,CAAC,MAAM;yBACrB,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;yBACtB,QAAQ,EAAE;yBACV,QAAQ,CAAC,8CAA8C,CAAC;oBAC3D,UAAU,EAAE,IAAI,CAAC,MAAM;yBACpB,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;yBACvB,QAAQ,EAAE;yBACV,QAAQ,CAAC,oCAAoC,CAAC;oBACjD,QAAQ,EAAE,IAAI,CAAC,MAAM;yBAClB,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;yBACrB,QAAQ,EAAE;yBACV,QAAQ,CAAC,0CAA0C,CAAC;oBACvD,UAAU,EAAE,IAAI,CAAC,MAAM;yBACpB,MAAM,EAAE;yBACR,QAAQ,EAAE;yBACV,QAAQ,CAAC,sCAAsC,CAAC;iBACpD;gBACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ;oBAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;oBAE3B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;wBAChC,MAAM;wBACN,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,WAAW,EAAE,IAAI,CAAC,WAA0C;wBAC5D,UAAU,EAAE,IAAI,CAAC,UAA0C;wBAC3D,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACrB,CAAC,CAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAe;4BAC5C,CAAC,CAAC,SAAS;wBACb,UAAU,EAAE,IAAI,CAAC,UAAU;qBAC5B,CAAC,CAAC;oBAEH,OAAO,IAAI,CAAC,SAAS,CAAC;wBACpB,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;qBAChE,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;YAEF;;eAEG;YACH,6BAA6B,EAAE,IAAI,CAAC;gBAClC,WAAW,EACT,wEAAwE;oBACxE,yEAAyE;oBACzE,qEAAqE;oBACrE,uEAAuE;oBACvE,kCAAkC;gBACpC,IAAI,EAAE;oBACJ,MAAM,EAAE,IAAI,CAAC,MAAM;yBAChB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;yBAC3B,QAAQ,CACP,yFAAyF;wBACvF,mGAAmG,CACtG;oBACH,KAAK,EAAE,IAAI,CAAC,MAAM;yBACf,MAAM,EAAE;yBACR,QAAQ,EAAE;yBACV,QAAQ,CACP,yFAAyF,CAC1F;oBACH,oBAAoB,EAAE,IAAI,CAAC,MAAM;yBAC9B,MAAM,EAAE;yBACR,QAAQ,EAAE;yBACV,QAAQ,CACP,2EAA2E;wBACzE,oEAAoE,CACvE;oBACH,eAAe,EAAE,IAAI,CAAC,MAAM;yBACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;yBAC3B,QAAQ,EAAE;yBACV,QAAQ,CACP,4EAA4E,CAC7E;oBACH,WAAW,EAAE,IAAI,CAAC,MAAM;yBACrB,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;yBACtB,QAAQ,EAAE;yBACV,QAAQ,CAAC,+CAA+C,CAAC;oBAC5D,UAAU,EAAE,IAAI,CAAC,MAAM;yBACpB,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;yBAClC,QAAQ,EAAE;yBACV,QAAQ,CACP,uDAAuD,CACxD;oBACH,kBAAkB,EAAE,IAAI,CAAC,MAAM;yBAC5B,MAAM,EAAE;yBACR,QAAQ,EAAE;yBACV,QAAQ,CAAC,iDAAiD,CAAC;oBAC9D,eAAe,EAAE,IAAI,CAAC,MAAM;yBACzB,MAAM,EAAE;yBACR,QAAQ,EAAE;yBACV,QAAQ,CAAC,qCAAqC,CAAC;oBAClD,WAAW,EAAE,IAAI,CAAC,MAAM;yBACrB,MAAM,EAAE;yBACR,QAAQ,EAAE;yBACV,QAAQ,CACP,8DAA8D,CAC/D;oBACH,UAAU,EAAE,IAAI,CAAC,MAAM;yBACpB,MAAM,EAAE;yBACR,QAAQ,EAAE;yBACV,QAAQ,CAAC,4CAA4C,CAAC;iBAC1D;gBACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ;oBAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;oBAE3B,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;wBAC3C,MAAM;wBACN,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;wBAC/C,eAAe,EAAE,IAAI,CAAC,eAAe;wBACrC,WAAW,EAAE,IAAI,CAAC,WAA0C;wBAC5D,UAAU,EAAE,IAAI,CAAC,UAAsD;wBACvE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;wBAC3C,eAAe,EAAE,IAAI,CAAC,eAAe;wBACrC,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;qBAC5B,CAAC,CAAC;oBAEH,OAAO,IAAI,CAAC,SAAS,CAAC;wBACpB,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;wBACrD,eAAe,EAAE,MAAM,CAAC,YAAY;wBACpC,YAAY,EAAE,MAAM,CAAC,YAAY;wBACjC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACxC,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;yBACvC,CAAC,CAAC;qBACJ,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;YAEF;;eAEG;YACH,gBAAgB,EAAE,IAAI,CAAC;gBACrB,WAAW,EACT,gEAAgE;oBAChE,wFAAwF;oBACxF,sEAAsE;gBACxE,IAAI,EAAE;oBACJ,SAAS,EAAE,IAAI,CAAC,MAAM;yBACnB,MAAM,EAAE;yBACR,QAAQ,CAAC,sCAAsC,CAAC;oBACnD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CACnC,sDAAsD;wBACpD,qFAAqF,CACxF;oBACD,WAAW,EAAE,IAAI,CAAC,MAAM;yBACrB,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;yBACtB,QAAQ,EAAE;yBACV,QAAQ,CAAC,uDAAuD,CAAC;oBACpE,UAAU,EAAE,IAAI,CAAC,MAAM;yBACpB,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;yBACvB,QAAQ,EAAE;yBACV,QAAQ,CAAC,qDAAqD,CAAC;oBAClE,UAAU,EAAE,IAAI,CAAC,MAAM;yBACpB,MAAM,EAAE;yBACR,QAAQ,EAAE;yBACV,QAAQ,CAAC,+CAA+C,CAAC;iBAC7D;gBACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ;oBAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;oBAE3B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;wBAC/B,MAAM;wBACN,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,WAAW,EAAE,IAAI,CAAC,WAA0C;wBAC5D,UAAU,EAAE,IAAI,CAAC,UAA0C;wBAC3D,UAAU,EAAE,IAAI,CAAC,UAAU;qBAC5B,CAAC,CAAC;oBAEH,OAAO,IAAI,CAAC,SAAS,CAAC;wBACpB,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;qBAChE,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;SACH;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-nanobanana",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "OpenCode plugin for visual AI: video generation (Veo 3), image generation (Imagen 3), storyboards, app icons, and visual analysis powered by Google Gemini",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@google/genai": "^1.36.0",
|
|
53
|
+
"@opencode-ai/plugin": "^1.1.23",
|
|
53
54
|
"sharp": "^0.33.0",
|
|
54
55
|
"zod": "^3.22.0"
|
|
55
56
|
},
|
package/.ralph-events.json
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"started": "2026-01-15T22:01:15+01:00",
|
|
3
|
-
"project": "opencode-nanobanana",
|
|
4
|
-
"platform": "macos",
|
|
5
|
-
"events": [
|
|
6
|
-
{
|
|
7
|
-
"timestamp": "2026-01-15T22:01:15+01:00",
|
|
8
|
-
"type": "started",
|
|
9
|
-
"message": "Monitor started for opencode-nanobanana",
|
|
10
|
-
"story": ""
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"timestamp": "2026-01-15T22:01:18+01:00",
|
|
14
|
-
"type": "start",
|
|
15
|
-
"message": "Ralph started",
|
|
16
|
-
"story": "VEO3-001"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"timestamp": "2026-01-15T22:11:20+01:00",
|
|
20
|
-
"type": "story_complete",
|
|
21
|
-
"message": "Completed: VEO3-001 in 10m",
|
|
22
|
-
"story": "VEO3-001"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"timestamp": "2026-01-15T22:16:23+01:00",
|
|
26
|
-
"type": "story_complete",
|
|
27
|
-
"message": "Completed: FFMPEG-001 in 5m",
|
|
28
|
-
"story": "FFMPEG-001"
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"timestamp": "2026-01-15T22:21:26+01:00",
|
|
32
|
-
"type": "story_complete",
|
|
33
|
-
"message": "Completed: STORY-002 in 5m",
|
|
34
|
-
"story": "STORY-002"
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"timestamp": "2026-01-15T22:26:28+01:00",
|
|
38
|
-
"type": "story_complete",
|
|
39
|
-
"message": "Completed: STORY-003 in 5m",
|
|
40
|
-
"story": "STORY-003"
|
|
41
|
-
}
|
|
42
|
-
],
|
|
43
|
-
"stories_completed": [
|
|
44
|
-
{
|
|
45
|
-
"timestamp": "2026-01-15T22:11:20+01:00",
|
|
46
|
-
"story": "VEO3-001",
|
|
47
|
-
"duration": 10,
|
|
48
|
-
"estimate": 20,
|
|
49
|
-
"git": {
|
|
50
|
-
"start_commit": "e2c7cdc",
|
|
51
|
-
"end_commit": "9fae5fd",
|
|
52
|
-
"files_changed": 7,
|
|
53
|
-
"lines_added": 834,
|
|
54
|
-
"lines_removed": 219,
|
|
55
|
-
"files": [
|
|
56
|
-
"prd-storyboard.json",
|
|
57
|
-
"prd.json",
|
|
58
|
-
"progress.txt",
|
|
59
|
-
"src/providers/gemini.ts",
|
|
60
|
-
"src/utils/file-handler.ts",
|
|
61
|
-
"src/utils/image-processing.ts",
|
|
62
|
-
"tests/providers/gemini.test.ts"
|
|
63
|
-
]
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"timestamp": "2026-01-15T22:16:23+01:00",
|
|
68
|
-
"story": "FFMPEG-001",
|
|
69
|
-
"duration": 5,
|
|
70
|
-
"estimate": 20,
|
|
71
|
-
"git": {
|
|
72
|
-
"start_commit": "9fae5fd",
|
|
73
|
-
"end_commit": "0a2ad94",
|
|
74
|
-
"files_changed": 6,
|
|
75
|
-
"lines_added": 829,
|
|
76
|
-
"lines_removed": 3,
|
|
77
|
-
"files": [
|
|
78
|
-
"prd.json",
|
|
79
|
-
"progress.txt",
|
|
80
|
-
"src/index.ts",
|
|
81
|
-
"src/tools/video/storyboard-video.ts",
|
|
82
|
-
"src/utils/ffmpeg.ts",
|
|
83
|
-
"tests/utils/ffmpeg.test.ts"
|
|
84
|
-
]
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
"timestamp": "2026-01-15T22:21:26+01:00",
|
|
89
|
-
"story": "STORY-002",
|
|
90
|
-
"duration": 5,
|
|
91
|
-
"estimate": 20,
|
|
92
|
-
"git": {
|
|
93
|
-
"start_commit": "0a2ad94",
|
|
94
|
-
"end_commit": "fa16746",
|
|
95
|
-
"files_changed": 22,
|
|
96
|
-
"lines_added": 1204,
|
|
97
|
-
"lines_removed": 13,
|
|
98
|
-
"files": [
|
|
99
|
-
".ralph-events.json",
|
|
100
|
-
".ralph-last-branch",
|
|
101
|
-
".ralph-monitor-state.json",
|
|
102
|
-
".ralph-monitor.pid",
|
|
103
|
-
".ralph-timing.json",
|
|
104
|
-
"docs/PLUGIN-VERIFICATION.md",
|
|
105
|
-
"logs/notifications.jsonl",
|
|
106
|
-
"prd.json",
|
|
107
|
-
"progress.txt",
|
|
108
|
-
"ralph-report.html",
|
|
109
|
-
"src/tools/video/storyboard-video.ts",
|
|
110
|
-
"test-analyze-screenshot.ts",
|
|
111
|
-
"test-app-icons.ts",
|
|
112
|
-
"test-cat-sunset.ts",
|
|
113
|
-
"test-icon-gen.ts",
|
|
114
|
-
"test-plugin-load.js",
|
|
115
|
-
"test-product-ad.ts",
|
|
116
|
-
"test-ralph-droid.ts",
|
|
117
|
-
"test-social-preview.ts",
|
|
118
|
-
"test-video-gen.ts",
|
|
119
|
-
"test-video-veo.ts",
|
|
120
|
-
"test-zurich-video.ts"
|
|
121
|
-
]
|
|
122
|
-
}
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
"timestamp": "2026-01-15T22:26:28+01:00",
|
|
126
|
-
"story": "STORY-003",
|
|
127
|
-
"duration": 5,
|
|
128
|
-
"estimate": 20,
|
|
129
|
-
"git": {
|
|
130
|
-
"start_commit": "fa16746",
|
|
131
|
-
"end_commit": "4dcd788",
|
|
132
|
-
"files_changed": 8,
|
|
133
|
-
"lines_added": 163,
|
|
134
|
-
"lines_removed": 28,
|
|
135
|
-
"files": [
|
|
136
|
-
".ralph-events.json",
|
|
137
|
-
".ralph-monitor-state.json",
|
|
138
|
-
".ralph-timing.json",
|
|
139
|
-
"logs/notifications.jsonl",
|
|
140
|
-
"prd.json",
|
|
141
|
-
"progress.txt",
|
|
142
|
-
"ralph-report.html",
|
|
143
|
-
"src/tools/video/storyboard-video.ts"
|
|
144
|
-
]
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
],
|
|
148
|
-
"restarts": [],
|
|
149
|
-
"total_restarts": 0,
|
|
150
|
-
"final_status": "running"
|
|
151
|
-
}
|
package/.ralph-last-branch
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ralph/storyboard-video
|
package/.ralph-monitor.pid
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
76110
|
package/.ralph-timing.json
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"stories": {
|
|
3
|
-
"VEO3-001": {
|
|
4
|
-
"actual": 10,
|
|
5
|
-
"estimate": 20
|
|
6
|
-
},
|
|
7
|
-
"FFMPEG-001": {
|
|
8
|
-
"actual": 5,
|
|
9
|
-
"estimate": 20
|
|
10
|
-
},
|
|
11
|
-
"STORY-002": {
|
|
12
|
-
"actual": 5,
|
|
13
|
-
"estimate": 20
|
|
14
|
-
},
|
|
15
|
-
"STORY-003": {
|
|
16
|
-
"actual": 5,
|
|
17
|
-
"estimate": 20
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
"averages": {
|
|
21
|
-
"simple": 20,
|
|
22
|
-
"medium": 30,
|
|
23
|
-
"complex": 45,
|
|
24
|
-
"heavy": 60
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Architecture Diagram Tool
|
|
3
|
-
*
|
|
4
|
-
* Generates architecture diagrams from text descriptions using Gemini.
|
|
5
|
-
* Supports multiple output formats: PNG (visual), SVG, or Mermaid (text-based).
|
|
6
|
-
*/
|
|
7
|
-
import { type ToolDefinition } from '@opencode-ai/plugin/tool';
|
|
8
|
-
/**
|
|
9
|
-
* Tool definition for generate_architecture_diagram
|
|
10
|
-
*/
|
|
11
|
-
export declare const generateArchitectureDiagramTool: ToolDefinition;
|
|
12
|
-
//# sourceMappingURL=architecture-diagram.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"architecture-diagram.d.ts","sourceRoot":"","sources":["../../../src/tools/docs/architecture-diagram.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAmGrE;;GAEG;AACH,eAAO,MAAM,+BAA+B,EAAE,cAgG5C,CAAC"}
|