gobananas-cli 1.0.1

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.
Files changed (103) hide show
  1. package/bin/gobananas-mcp.js +10 -0
  2. package/bin/gobananas.js +8 -0
  3. package/dist/commands/account.d.ts +8 -0
  4. package/dist/commands/account.d.ts.map +1 -0
  5. package/dist/commands/account.js +200 -0
  6. package/dist/commands/account.js.map +1 -0
  7. package/dist/commands/character.d.ts +8 -0
  8. package/dist/commands/character.d.ts.map +1 -0
  9. package/dist/commands/character.js +493 -0
  10. package/dist/commands/character.js.map +1 -0
  11. package/dist/commands/config.d.ts +8 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +232 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/edit.d.ts +19 -0
  16. package/dist/commands/edit.d.ts.map +1 -0
  17. package/dist/commands/edit.js +279 -0
  18. package/dist/commands/edit.js.map +1 -0
  19. package/dist/commands/generate.d.ts +8 -0
  20. package/dist/commands/generate.d.ts.map +1 -0
  21. package/dist/commands/generate.js +177 -0
  22. package/dist/commands/generate.js.map +1 -0
  23. package/dist/commands/image.d.ts +8 -0
  24. package/dist/commands/image.d.ts.map +1 -0
  25. package/dist/commands/image.js +212 -0
  26. package/dist/commands/image.js.map +1 -0
  27. package/dist/commands/index.d.ts +19 -0
  28. package/dist/commands/index.d.ts.map +1 -0
  29. package/dist/commands/index.js +19 -0
  30. package/dist/commands/index.js.map +1 -0
  31. package/dist/commands/mcp-help.d.ts +8 -0
  32. package/dist/commands/mcp-help.d.ts.map +1 -0
  33. package/dist/commands/mcp-help.js +264 -0
  34. package/dist/commands/mcp-help.js.map +1 -0
  35. package/dist/commands/mcp.d.ts +9 -0
  36. package/dist/commands/mcp.d.ts.map +1 -0
  37. package/dist/commands/mcp.js +25 -0
  38. package/dist/commands/mcp.js.map +1 -0
  39. package/dist/commands/product.d.ts +8 -0
  40. package/dist/commands/product.d.ts.map +1 -0
  41. package/dist/commands/product.js +316 -0
  42. package/dist/commands/product.js.map +1 -0
  43. package/dist/commands/scene.d.ts +8 -0
  44. package/dist/commands/scene.d.ts.map +1 -0
  45. package/dist/commands/scene.js +448 -0
  46. package/dist/commands/scene.js.map +1 -0
  47. package/dist/commands/search.d.ts +8 -0
  48. package/dist/commands/search.d.ts.map +1 -0
  49. package/dist/commands/search.js +123 -0
  50. package/dist/commands/search.js.map +1 -0
  51. package/dist/commands/session.d.ts +8 -0
  52. package/dist/commands/session.d.ts.map +1 -0
  53. package/dist/commands/session.js +167 -0
  54. package/dist/commands/session.js.map +1 -0
  55. package/dist/commands/style.d.ts +8 -0
  56. package/dist/commands/style.d.ts.map +1 -0
  57. package/dist/commands/style.js +297 -0
  58. package/dist/commands/style.js.map +1 -0
  59. package/dist/commands/usage.d.ts +8 -0
  60. package/dist/commands/usage.d.ts.map +1 -0
  61. package/dist/commands/usage.js +144 -0
  62. package/dist/commands/usage.js.map +1 -0
  63. package/dist/config/config.d.ts +65 -0
  64. package/dist/config/config.d.ts.map +1 -0
  65. package/dist/config/config.js +156 -0
  66. package/dist/config/config.js.map +1 -0
  67. package/dist/index.d.ts +22 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +130 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/mcp/stdio-proxy.d.ts +8 -0
  72. package/dist/mcp/stdio-proxy.d.ts.map +1 -0
  73. package/dist/mcp/stdio-proxy.js +297 -0
  74. package/dist/mcp/stdio-proxy.js.map +1 -0
  75. package/dist/mcp-stdio.d.ts +3 -0
  76. package/dist/mcp-stdio.d.ts.map +1 -0
  77. package/dist/mcp-stdio.js +8 -0
  78. package/dist/mcp-stdio.js.map +1 -0
  79. package/dist/transport/index.d.ts +29 -0
  80. package/dist/transport/index.d.ts.map +1 -0
  81. package/dist/transport/index.js +72 -0
  82. package/dist/transport/index.js.map +1 -0
  83. package/dist/transport/mcp-client.d.ts +342 -0
  84. package/dist/transport/mcp-client.d.ts.map +1 -0
  85. package/dist/transport/mcp-client.js +478 -0
  86. package/dist/transport/mcp-client.js.map +1 -0
  87. package/dist/transport/rest-client.d.ts +297 -0
  88. package/dist/transport/rest-client.d.ts.map +1 -0
  89. package/dist/transport/rest-client.js +461 -0
  90. package/dist/transport/rest-client.js.map +1 -0
  91. package/dist/types/responses.d.ts +230 -0
  92. package/dist/types/responses.d.ts.map +1 -0
  93. package/dist/types/responses.js +46 -0
  94. package/dist/types/responses.js.map +1 -0
  95. package/dist/utils/file-handler.d.ts +51 -0
  96. package/dist/utils/file-handler.d.ts.map +1 -0
  97. package/dist/utils/file-handler.js +189 -0
  98. package/dist/utils/file-handler.js.map +1 -0
  99. package/dist/utils/output.d.ts +111 -0
  100. package/dist/utils/output.d.ts.map +1 -0
  101. package/dist/utils/output.js +240 -0
  102. package/dist/utils/output.js.map +1 -0
  103. package/package.json +54 -0
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Config Commands
3
+ *
4
+ * Commands for managing CLI configuration.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { getConfig, setConfig, hasApiKey, getConfigPath, clearConfig, } from '../config/config.js';
8
+ import { RestClient } from '../transport/rest-client.js';
9
+ import * as output from '../utils/output.js';
10
+ export function createConfigCommand() {
11
+ const cmd = new Command('config')
12
+ .alias('cfg')
13
+ .description('Manage CLI configuration');
14
+ // Generic setter (matches README usage: `gb config set apiKey ...`)
15
+ cmd
16
+ .command('set <key> <value>')
17
+ .description('Set a configuration value (apiKey, serverUrl, transport, outputDir, defaultAspectRatio)')
18
+ .action(async (key, value) => {
19
+ const normalized = key.trim();
20
+ if (normalized === 'apiKey' || normalized === 'api-key' || normalized === 'key') {
21
+ // Delegate to the canonical handler (includes connection test)
22
+ await setApiKey(value);
23
+ return;
24
+ }
25
+ if (normalized === 'serverUrl' || normalized === 'server-url' || normalized === 'server') {
26
+ setServerUrl(value);
27
+ return;
28
+ }
29
+ if (normalized === 'transport') {
30
+ setTransport(value);
31
+ return;
32
+ }
33
+ if (normalized === 'outputDir' || normalized === 'output-dir' || normalized === 'dir') {
34
+ setOutputDir(value);
35
+ return;
36
+ }
37
+ if (normalized === 'defaultAspectRatio' || normalized === 'aspect' || normalized === 'ratio') {
38
+ setAspectRatio(value);
39
+ return;
40
+ }
41
+ output.error(`Unknown config key: ${key}`);
42
+ output.info('Valid keys: apiKey, serverUrl, transport, outputDir, defaultAspectRatio');
43
+ process.exit(1);
44
+ });
45
+ // Show current config
46
+ cmd
47
+ .command('show')
48
+ .alias('get')
49
+ .description('Show current configuration')
50
+ .option('--path', 'Show config file path only')
51
+ .action((options) => {
52
+ if (options.path) {
53
+ console.log(getConfigPath());
54
+ return;
55
+ }
56
+ const config = getConfig();
57
+ output.header('Go Bananas CLI Configuration');
58
+ output.keyValue('Config File', getConfigPath());
59
+ output.newline();
60
+ output.keyValue('Server URL', config.serverUrl);
61
+ output.keyValue('API Key', config.apiKey ? maskApiKey(config.apiKey) : '(not set)');
62
+ output.keyValue('Transport', config.transport);
63
+ output.keyValue('Output Dir', config.outputDir);
64
+ output.keyValue('Default Aspect', config.defaultAspectRatio);
65
+ output.keyValue('Session ID', config.sessionId || '(none)');
66
+ });
67
+ // Set server URL
68
+ cmd
69
+ .command('server <url>')
70
+ .description('Set the Go Bananas server URL')
71
+ .action((url) => {
72
+ setServerUrl(url);
73
+ });
74
+ // Set API key
75
+ cmd
76
+ .command('key <apiKey>')
77
+ .alias('api-key')
78
+ .description('Set your Go Bananas API key')
79
+ .action(async (apiKey) => {
80
+ await setApiKey(apiKey);
81
+ });
82
+ // Set transport mode
83
+ cmd
84
+ .command('transport <mode>')
85
+ .description('Set transport mode: auto, mcp, or rest')
86
+ .action((mode) => {
87
+ setTransport(mode);
88
+ });
89
+ // Set output directory
90
+ cmd
91
+ .command('output-dir <path>')
92
+ .alias('dir')
93
+ .description('Set default output directory for downloaded images')
94
+ .action((path) => {
95
+ setOutputDir(path);
96
+ });
97
+ // Set default aspect ratio
98
+ cmd
99
+ .command('aspect <ratio>')
100
+ .description('Set default aspect ratio')
101
+ .action((ratio) => {
102
+ setAspectRatio(ratio);
103
+ });
104
+ // Quick setup
105
+ cmd
106
+ .command('setup')
107
+ .description('Interactive configuration setup')
108
+ .action(async () => {
109
+ output.header('Go Bananas CLI Setup');
110
+ output.info('Configure your CLI settings\n');
111
+ // For now, just show instructions since we don't have readline
112
+ const config = getConfig();
113
+ output.info('Current settings:');
114
+ output.keyValue(' Server URL', config.serverUrl);
115
+ output.keyValue(' API Key', config.apiKey ? 'Set' : 'Not set');
116
+ output.keyValue(' Transport', config.transport);
117
+ output.newline();
118
+ output.info('To configure, use these commands:');
119
+ console.log(' gb config server <url> - Set server URL');
120
+ console.log(' gb config key <api-key> - Set API key');
121
+ console.log(' gb config transport <mode> - Set transport (auto/mcp/rest)');
122
+ console.log(' gb config output-dir <dir> - Set download directory');
123
+ output.newline();
124
+ if (!hasApiKey()) {
125
+ output.warn('API key not set. You must set an API key to use Go Bananas.');
126
+ output.tip('Get your API key from your Go Bananas console.');
127
+ }
128
+ });
129
+ // Reset config
130
+ cmd
131
+ .command('reset')
132
+ .description('Reset all configuration to defaults')
133
+ .option('--force', 'Skip confirmation')
134
+ .action((options) => {
135
+ if (!options.force) {
136
+ output.warn('This will clear all configuration including your API key.');
137
+ output.info('Use --force to confirm.');
138
+ return;
139
+ }
140
+ clearConfig();
141
+ output.success('Configuration reset to defaults.');
142
+ });
143
+ // Test connection
144
+ cmd
145
+ .command('test')
146
+ .description('Test connection to Go Bananas server')
147
+ .action(async () => {
148
+ if (!hasApiKey()) {
149
+ output.error('API key not set. Use "gb config key <api-key>" first.');
150
+ process.exit(1);
151
+ }
152
+ const config = getConfig();
153
+ const spin = output.spinner(`Testing connection to ${config.serverUrl}...`);
154
+ const client = new RestClient();
155
+ const canConnect = await client.testConnection();
156
+ spin.stop();
157
+ if (canConnect) {
158
+ output.success('Connection successful!');
159
+ output.keyValue('Server', config.serverUrl);
160
+ output.keyValue('Transport', config.transport);
161
+ }
162
+ else {
163
+ output.error('Connection failed. Check your server URL and API key.');
164
+ process.exit(1);
165
+ }
166
+ });
167
+ return cmd;
168
+ }
169
+ /**
170
+ * Mask API key for display
171
+ */
172
+ function maskApiKey(key) {
173
+ if (key.length <= 12)
174
+ return '***';
175
+ return key.substring(0, 8) + '...' + key.substring(key.length - 4);
176
+ }
177
+ function setServerUrl(url) {
178
+ // Validate URL format
179
+ try {
180
+ new URL(url);
181
+ }
182
+ catch {
183
+ output.error('Invalid URL format');
184
+ process.exit(1);
185
+ }
186
+ // Remove trailing slash
187
+ const cleanUrl = url.replace(/\/+$/, '');
188
+ setConfig('serverUrl', cleanUrl);
189
+ output.success(`Server URL set to: ${cleanUrl}`);
190
+ }
191
+ async function setApiKey(apiKey) {
192
+ // Validate API key format
193
+ if (!apiKey.startsWith('sk_live_') && !apiKey.startsWith('sk_test_')) {
194
+ output.warn('API key should start with sk_live_ or sk_test_');
195
+ }
196
+ setConfig('apiKey', apiKey);
197
+ output.success('API key saved!');
198
+ // Test connection
199
+ output.newline();
200
+ const spin = output.spinner('Testing connection...');
201
+ const client = new RestClient();
202
+ const canConnect = await client.testConnection();
203
+ spin.stop();
204
+ if (canConnect) {
205
+ output.success('Connection successful!');
206
+ }
207
+ else {
208
+ output.warn('Could not verify connection. Check your server URL and API key.');
209
+ }
210
+ }
211
+ function setTransport(mode) {
212
+ const validModes = ['auto', 'mcp', 'rest'];
213
+ if (!validModes.includes(mode)) {
214
+ output.error(`Invalid transport mode. Must be one of: ${validModes.join(', ')}`);
215
+ process.exit(1);
216
+ }
217
+ setConfig('transport', mode);
218
+ output.success(`Transport mode set to: ${mode}`);
219
+ }
220
+ function setOutputDir(path) {
221
+ setConfig('outputDir', path);
222
+ output.success(`Output directory set to: ${path}`);
223
+ }
224
+ function setAspectRatio(ratio) {
225
+ const validRatios = ['square', 'portrait', 'landscape', '16:9', '9:16', '4:3', '3:4', '1:1'];
226
+ if (!validRatios.includes(ratio)) {
227
+ output.warn(`Uncommon aspect ratio. Standard ratios: ${validRatios.join(', ')}`);
228
+ }
229
+ setConfig('defaultAspectRatio', ratio);
230
+ output.success(`Default aspect ratio set to: ${ratio}`);
231
+ }
232
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,aAAa,EACb,WAAW,GAEZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAE7C,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SAC9B,KAAK,CAAC,KAAK,CAAC;SACZ,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAE3C,oEAAoE;IACpE,GAAG;SACA,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CACV,yFAAyF,CAC1F;SACA,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,KAAa,EAAE,EAAE;QAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YAChF,+DAA+D;YAC/D,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,YAAY,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YACzF,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YAC/B,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,YAAY,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YACtF,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,UAAU,KAAK,oBAAoB,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC7F,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,sBAAsB;IACtB,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,KAAK,CAAC,KAAK,CAAC;SACZ,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;SAC9C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACpF,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC7D,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,GAAG;SACA,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE;QACtB,YAAY,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,GAAG;SACA,OAAO,CAAC,cAAc,CAAC;SACvB,KAAK,CAAC,SAAS,CAAC;SAChB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QAC/B,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,qBAAqB;IACrB,GAAG;SACA,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;QACvB,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEL,uBAAuB;IACvB,GAAG;SACA,OAAO,CAAC,mBAAmB,CAAC;SAC5B,KAAK,CAAC,KAAK,CAAC;SACZ,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;QACvB,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEL,2BAA2B;IAC3B,GAAG;SACA,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE;QACxB,cAAc,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAE7C,+DAA+D;QAC/D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChE,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YAC3E,MAAM,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,eAAe;IACf,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC;SACtC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YACzE,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,WAAW,EAAE,CAAC;QACd,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEL,kBAAkB;IAClB,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,yBAAyB,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;QAEjD,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;YACzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,sBAAsB;IACtB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,wBAAwB;IACxB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACjC,MAAM,CAAC,OAAO,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAc;IACrC,0BAA0B;IAC1B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;IAED,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEjC,kBAAkB;IAClB,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;IACjD,IAAI,CAAC,IAAI,EAAE,CAAC;IAEZ,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,2CAA2C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,SAAS,CAAC,WAAW,EAAE,IAA+B,CAAC,CAAC;IACxD,MAAM,CAAC,OAAO,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC7B,MAAM,CAAC,OAAO,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7F,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,2CAA2C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,SAAS,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,OAAO,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Edit Commands
3
+ *
4
+ * Commands for editing images: edit, continue, upload
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Edit image by ID
9
+ */
10
+ export declare function createEditCommand(): Command;
11
+ /**
12
+ * Continue editing the last image in session
13
+ */
14
+ export declare function createContinueCommand(): Command;
15
+ /**
16
+ * Upload an image for editing (from URL or local file)
17
+ */
18
+ export declare function createUploadCommand(): Command;
19
+ //# sourceMappingURL=edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CA8E3C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CA6E/C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CA6G7C"}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Edit Commands
3
+ *
4
+ * Commands for editing images: edit, continue, upload
5
+ */
6
+ import { Command } from 'commander';
7
+ import { createTransport, getTransportName } from '../transport/index.js';
8
+ import { downloadImage, isUrl, readLocalImageAsBase64 } from '../utils/file-handler.js';
9
+ import * as output from '../utils/output.js';
10
+ /**
11
+ * Format bytes to human-readable string
12
+ */
13
+ function formatBytes(bytes) {
14
+ if (bytes < 1024)
15
+ return `${bytes} B`;
16
+ if (bytes < 1024 * 1024)
17
+ return `${(bytes / 1024).toFixed(1)} KB`;
18
+ return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
19
+ }
20
+ /**
21
+ * Edit image by ID
22
+ */
23
+ export function createEditCommand() {
24
+ const cmd = new Command('edit')
25
+ .alias('e')
26
+ .description('Edit an existing image by ID')
27
+ .argument('<imageId>', 'ID of the image to edit')
28
+ .argument('<prompt>', 'Editing instruction')
29
+ .option('--negative <prompt>', 'Negative prompt - what to avoid')
30
+ .option('-a, --aspect <ratio>', 'Aspect ratio for edited image')
31
+ .option('-d, --download', 'Download the edited image to local disk')
32
+ .option('-o, --output <path>', 'Output path for downloaded image')
33
+ .option('--json', 'Output raw JSON response')
34
+ .action(async (imageId, prompt, options) => {
35
+ const spin = output.spinner('Connecting to Go Bananas...');
36
+ try {
37
+ const transport = await createTransport();
38
+ spin.text = `Connected via ${getTransportName(transport.type)}. Editing image...`;
39
+ const params = {
40
+ imageId: parseInt(imageId, 10),
41
+ prompt,
42
+ negativePrompt: options.negative,
43
+ aspectRatio: options.aspect,
44
+ };
45
+ let result;
46
+ if (transport.type === 'mcp' && transport.mcp) {
47
+ const mcpResult = await transport.mcp.editImage(params);
48
+ const text = mcpResult.content?.[0]?.text || '';
49
+ const urlMatch = text.match(/https?:\/\/[^\s)]+/);
50
+ const idMatch = text.match(/ID:\s*(\d+)/);
51
+ result = {
52
+ url: urlMatch?.[0],
53
+ id: idMatch ? parseInt(idMatch[1], 10) : undefined,
54
+ raw: text,
55
+ };
56
+ }
57
+ else if (transport.rest) {
58
+ const restResult = await transport.rest.editImage(params);
59
+ result = restResult.data;
60
+ }
61
+ else {
62
+ throw new Error('No transport available');
63
+ }
64
+ spin.stop();
65
+ if (options.json) {
66
+ output.json(result);
67
+ }
68
+ else {
69
+ const r = result;
70
+ output.success('Image edited successfully!');
71
+ if (r.id)
72
+ output.keyValue('New ID', r.id);
73
+ const url = (r.url || r.fullUrl);
74
+ if (url)
75
+ output.keyValue('URL', url);
76
+ if (options.download && url) {
77
+ output.newline();
78
+ const downloadSpin = output.spinner('Downloading image...');
79
+ try {
80
+ const savedPath = await downloadImage(url, options.output);
81
+ downloadSpin.succeed(`Saved to: ${savedPath}`);
82
+ }
83
+ catch (err) {
84
+ downloadSpin.fail(`Download failed: ${err instanceof Error ? err.message : 'Unknown error'}`);
85
+ }
86
+ }
87
+ if (r.raw && !url) {
88
+ output.newline();
89
+ console.log(r.raw);
90
+ }
91
+ }
92
+ }
93
+ catch (err) {
94
+ spin.stop();
95
+ output.error(err instanceof Error ? err.message : 'Edit failed');
96
+ process.exit(1);
97
+ }
98
+ });
99
+ return cmd;
100
+ }
101
+ /**
102
+ * Continue editing the last image in session
103
+ */
104
+ export function createContinueCommand() {
105
+ const cmd = new Command('continue')
106
+ .alias('cont')
107
+ .alias('c')
108
+ .description('Continue editing the last generated/edited image')
109
+ .argument('<prompt>', 'Editing instruction')
110
+ .option('--negative <prompt>', 'Negative prompt - what to avoid')
111
+ .option('-a, --aspect <ratio>', 'Aspect ratio for edited image')
112
+ .option('-d, --download', 'Download the edited image to local disk')
113
+ .option('-o, --output <path>', 'Output path for downloaded image')
114
+ .option('--json', 'Output raw JSON response')
115
+ .action(async (prompt, options) => {
116
+ const spin = output.spinner('Connecting to Go Bananas...');
117
+ try {
118
+ const transport = await createTransport();
119
+ spin.text = `Connected via ${getTransportName(transport.type)}. Continuing edit...`;
120
+ const params = {
121
+ prompt,
122
+ negativePrompt: options.negative,
123
+ aspectRatio: options.aspect,
124
+ };
125
+ let result;
126
+ if (transport.type === 'mcp' && transport.mcp) {
127
+ const mcpResult = await transport.mcp.continueEditing(params);
128
+ const text = mcpResult.content?.[0]?.text || '';
129
+ const urlMatch = text.match(/https?:\/\/[^\s)]+/);
130
+ const idMatch = text.match(/ID:\s*(\d+)/);
131
+ result = {
132
+ url: urlMatch?.[0],
133
+ id: idMatch ? parseInt(idMatch[1], 10) : undefined,
134
+ raw: text,
135
+ };
136
+ }
137
+ else if (transport.rest) {
138
+ const restResult = await transport.rest.continueEditing(params);
139
+ result = restResult.data;
140
+ }
141
+ else {
142
+ throw new Error('No transport available');
143
+ }
144
+ spin.stop();
145
+ if (options.json) {
146
+ output.json(result);
147
+ }
148
+ else {
149
+ const r = result;
150
+ output.success('Image edited successfully!');
151
+ if (r.id)
152
+ output.keyValue('New ID', r.id);
153
+ const url = (r.url || r.fullUrl);
154
+ if (url)
155
+ output.keyValue('URL', url);
156
+ if (options.download && url) {
157
+ output.newline();
158
+ const downloadSpin = output.spinner('Downloading image...');
159
+ try {
160
+ const savedPath = await downloadImage(url, options.output);
161
+ downloadSpin.succeed(`Saved to: ${savedPath}`);
162
+ }
163
+ catch (err) {
164
+ downloadSpin.fail(`Download failed: ${err instanceof Error ? err.message : 'Unknown error'}`);
165
+ }
166
+ }
167
+ if (r.raw && !url) {
168
+ output.newline();
169
+ console.log(r.raw);
170
+ }
171
+ }
172
+ }
173
+ catch (err) {
174
+ spin.stop();
175
+ output.error(err instanceof Error ? err.message : 'Continue edit failed');
176
+ process.exit(1);
177
+ }
178
+ });
179
+ return cmd;
180
+ }
181
+ /**
182
+ * Upload an image for editing (from URL or local file)
183
+ */
184
+ export function createUploadCommand() {
185
+ const cmd = new Command('upload')
186
+ .alias('up')
187
+ .description('Upload an image for editing (URL or local file)')
188
+ .argument('<source>', 'URL or local file path of the image to upload')
189
+ .option('--filename <name>', 'Optional filename override')
190
+ .option('--mime <type>', 'MIME type (auto-detected if not provided)')
191
+ .option('--json', 'Output raw JSON response')
192
+ .action(async (source, options) => {
193
+ const spin = output.spinner('Connecting to Go Bananas...');
194
+ try {
195
+ const transport = await createTransport();
196
+ // Determine if source is URL or local file
197
+ const isUrlSource = isUrl(source);
198
+ let result;
199
+ if (isUrlSource) {
200
+ // URL-based upload (existing behavior)
201
+ spin.text = `Connected via ${getTransportName(transport.type)}. Uploading from URL...`;
202
+ const params = {
203
+ imageUrl: source,
204
+ fileName: options.filename,
205
+ mimeType: options.mime,
206
+ };
207
+ if (transport.type === 'mcp' && transport.mcp) {
208
+ const mcpResult = await transport.mcp.uploadImageForEditing(params);
209
+ const text = mcpResult.content?.[0]?.text || '';
210
+ const idMatch = text.match(/Image ID:\s*(\d+)/i) || text.match(/image_id:\s*(\d+)/i);
211
+ result = {
212
+ imageId: idMatch ? parseInt(idMatch[1], 10) : undefined,
213
+ raw: text,
214
+ };
215
+ }
216
+ else if (transport.rest) {
217
+ const restResult = await transport.rest.uploadImage(params);
218
+ result = restResult.data;
219
+ }
220
+ else {
221
+ throw new Error('No transport available');
222
+ }
223
+ }
224
+ else {
225
+ // Local file upload (NEW - REST only, MCP blocks base64)
226
+ spin.text = 'Reading local file...';
227
+ // Read and validate local file
228
+ const localImage = await readLocalImageAsBase64(source);
229
+ spin.text = `Uploading ${localImage.fileName} (${formatBytes(localImage.sizeBytes)})...`;
230
+ // Local file upload MUST use REST (MCP blocks base64 due to token limits)
231
+ if (!transport.rest) {
232
+ throw new Error('Local file upload requires REST transport. ' +
233
+ 'Configure your API key to enable REST API access.');
234
+ }
235
+ const restResult = await transport.rest.uploadImageFromFile({
236
+ imageData: localImage.base64Data,
237
+ fileName: options.filename || localImage.fileName,
238
+ mimeType: options.mime || localImage.mimeType,
239
+ });
240
+ // Handle both wrapped {data: ...} and direct response formats
241
+ result = restResult.data || restResult;
242
+ }
243
+ spin.stop();
244
+ if (options.json) {
245
+ output.json(result);
246
+ }
247
+ else {
248
+ const r = result;
249
+ output.success('Image uploaded successfully!');
250
+ // Handle both camelCase and snake_case response fields
251
+ const imageId = (r.imageId || r.image_id);
252
+ if (imageId) {
253
+ output.keyValue('Image ID', imageId);
254
+ output.newline();
255
+ output.tip(`Use "gb edit ${imageId} '<instruction>'" to edit this image`);
256
+ }
257
+ const publicUrl = (r.publicUrl || r.public_url);
258
+ if (publicUrl) {
259
+ output.keyValue('URL', publicUrl);
260
+ }
261
+ const sizeBytes = (r.sizeBytes || r.size_bytes);
262
+ if (sizeBytes) {
263
+ output.keyValue('Size', formatBytes(sizeBytes));
264
+ }
265
+ if (r.raw && !imageId) {
266
+ output.newline();
267
+ console.log(r.raw);
268
+ }
269
+ }
270
+ }
271
+ catch (err) {
272
+ spin.stop();
273
+ output.error(err instanceof Error ? err.message : 'Upload failed');
274
+ process.exit(1);
275
+ }
276
+ });
277
+ return cmd;
278
+ }
279
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Generate Command
3
+ *
4
+ * Generate new images from text prompts using Go Bananas.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function createGenerateCommand(): Command;
8
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,IAAI,OAAO,CAwL/C"}