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,144 @@
1
+ /**
2
+ * Usage Commands
3
+ *
4
+ * Commands for viewing usage statistics and account summary.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { createTransport } from '../transport/index.js';
8
+ import * as output from '../utils/output.js';
9
+ export function createUsageCommand() {
10
+ const cmd = new Command('usage')
11
+ .description('View usage statistics and account summary');
12
+ // Get usage stats
13
+ cmd
14
+ .command('stats')
15
+ .alias('s')
16
+ .description('View usage statistics')
17
+ .option('--days <number>', 'Lookback period in days', '30')
18
+ .option('--granularity <type>', 'Bucket size: hour, day, week', 'day')
19
+ .option('--operation <name>', 'Filter by operation type')
20
+ .option('-l, --limit <number>', 'Maximum buckets to return', '100')
21
+ .option('--json', 'Output raw JSON response')
22
+ .action(async (options) => {
23
+ const spin = output.spinner('Loading usage stats...');
24
+ try {
25
+ const transport = await createTransport();
26
+ let result;
27
+ if (transport.type === 'mcp' && transport.mcp) {
28
+ const mcpResult = await transport.mcp.getUsageStats({
29
+ lookbackDays: parseInt(options.days, 10),
30
+ granularity: options.granularity,
31
+ operation: options.operation,
32
+ limit: parseInt(options.limit, 10),
33
+ });
34
+ result = { raw: mcpResult.content?.[0]?.text };
35
+ }
36
+ else if (transport.rest) {
37
+ const restResult = await transport.rest.getUsage({
38
+ limit: parseInt(options.days, 10),
39
+ });
40
+ result = restResult;
41
+ }
42
+ else {
43
+ throw new Error('No transport available');
44
+ }
45
+ spin.stop();
46
+ if (options.json) {
47
+ output.json(result);
48
+ }
49
+ else {
50
+ const r = result;
51
+ if (r.raw) {
52
+ console.log(r.raw);
53
+ }
54
+ else if (r.data) {
55
+ const data = r.data;
56
+ output.header('Usage Statistics');
57
+ if (data.summary) {
58
+ const summary = data.summary;
59
+ output.keyValue('Total Operations', summary.total_operations || summary.totalOperations || 0);
60
+ output.keyValue('Total Images', summary.total_images || summary.totalImages || 0);
61
+ output.keyValue('Total Size', output.formatBytes(summary.total_size_bytes || summary.totalSizeBytes || 0));
62
+ if (summary.average_duration_ms || summary.averageDurationMs) {
63
+ output.keyValue('Avg Duration', output.formatDuration(summary.average_duration_ms || summary.averageDurationMs || 0));
64
+ }
65
+ }
66
+ if (data.buckets && Array.isArray(data.buckets)) {
67
+ output.newline();
68
+ output.info(`${data.buckets.length} time buckets`);
69
+ }
70
+ }
71
+ }
72
+ }
73
+ catch (err) {
74
+ spin.stop();
75
+ output.error(err instanceof Error ? err.message : 'Failed to load usage stats');
76
+ process.exit(1);
77
+ }
78
+ });
79
+ // Get account summary
80
+ cmd
81
+ .command('summary')
82
+ .alias('sum')
83
+ .description('Get comprehensive account overview')
84
+ .option('--json', 'Output raw JSON response')
85
+ .action(async (options) => {
86
+ const spin = output.spinner('Loading account summary...');
87
+ try {
88
+ const transport = await createTransport();
89
+ let result;
90
+ if (transport.type === 'mcp' && transport.mcp) {
91
+ const mcpResult = await transport.mcp.getAccountSummary();
92
+ result = { raw: mcpResult.content?.[0]?.text };
93
+ }
94
+ else if (transport.rest) {
95
+ const restResult = await transport.rest.getProfile();
96
+ result = restResult;
97
+ }
98
+ else {
99
+ throw new Error('No transport available');
100
+ }
101
+ spin.stop();
102
+ if (options.json) {
103
+ output.json(result);
104
+ }
105
+ else {
106
+ const r = result;
107
+ if (r.raw) {
108
+ console.log(r.raw);
109
+ }
110
+ else if (r.data) {
111
+ const data = r.data;
112
+ output.header('Account Summary');
113
+ // Tenant info
114
+ if (data.tenantName)
115
+ output.keyValue('Account', data.tenantName);
116
+ if (data.tenantId)
117
+ output.keyValue('Tenant ID', data.tenantId);
118
+ if (data.isActive !== undefined) {
119
+ output.keyValue('Status', data.isActive ? 'Active' : 'Inactive');
120
+ }
121
+ // Quotas
122
+ if (data.monthlyQuotaMb !== undefined) {
123
+ output.newline();
124
+ output.info('Quotas:');
125
+ output.keyValue(' Monthly Quota', `${data.monthlyQuotaMb} MB`);
126
+ if (data.storageUsedMb !== undefined) {
127
+ const used = data.storageUsedMb;
128
+ const quota = data.monthlyQuotaMb;
129
+ const percent = quota > 0 ? ((used / quota) * 100).toFixed(1) : '0';
130
+ output.keyValue(' Used', `${used.toFixed(2)} MB (${percent}%)`);
131
+ }
132
+ }
133
+ }
134
+ }
135
+ }
136
+ catch (err) {
137
+ spin.stop();
138
+ output.error(err instanceof Error ? err.message : 'Failed to load account summary');
139
+ process.exit(1);
140
+ }
141
+ });
142
+ return cmd;
143
+ }
144
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Configuration management for Go Bananas CLI
3
+ *
4
+ * Handles persistent storage of API keys, server URL, and preferences.
5
+ * Uses the `conf` package for cross-platform config storage.
6
+ */
7
+ import Conf from 'conf';
8
+ export interface CliConfig {
9
+ serverUrl: string;
10
+ apiKey: string;
11
+ transport: 'mcp' | 'rest' | 'auto';
12
+ outputDir: string;
13
+ defaultAspectRatio: string;
14
+ sessionId?: string;
15
+ }
16
+ export declare const config: Conf<CliConfig>;
17
+ /**
18
+ * Get current configuration
19
+ */
20
+ export declare function getConfig(): CliConfig;
21
+ /**
22
+ * Set a configuration value
23
+ */
24
+ export declare function setConfig<K extends keyof CliConfig>(key: K, value: CliConfig[K]): void;
25
+ /**
26
+ * Validate API key format
27
+ */
28
+ export declare function validateApiKey(key: string): {
29
+ valid: boolean;
30
+ error?: string;
31
+ };
32
+ /**
33
+ * Check if API key is configured
34
+ */
35
+ export declare function hasApiKey(): boolean;
36
+ /**
37
+ * Check if using a production API key
38
+ */
39
+ export declare function isProductionKey(): boolean;
40
+ /**
41
+ * Check if server URL is using HTTPS
42
+ */
43
+ export declare function isSecureConnection(): boolean;
44
+ /**
45
+ * Warn if using production key over insecure connection
46
+ */
47
+ export declare function getSecurityWarning(): string | null;
48
+ /**
49
+ * Get or create a session ID for this CLI instance
50
+ * Session ID is persisted and reused until explicitly reset
51
+ */
52
+ export declare function getOrCreateSessionId(): string;
53
+ /**
54
+ * Reset session ID (start fresh session)
55
+ */
56
+ export declare function resetSession(): string;
57
+ /**
58
+ * Get the config file path (for debugging)
59
+ */
60
+ export declare function getConfigPath(): string;
61
+ /**
62
+ * Clear all configuration
63
+ */
64
+ export declare function clearConfig(): void;
65
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8BD,eAAO,MAAM,MAAM,iBAGjB,CAAC;AAcH;;GAEG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAYrC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAEtF;AAOD;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAQ9E;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAGnC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAG5C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAKlD;AAUD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAO7C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Configuration management for Go Bananas CLI
3
+ *
4
+ * Handles persistent storage of API keys, server URL, and preferences.
5
+ * Uses the `conf` package for cross-platform config storage.
6
+ */
7
+ import Conf from 'conf';
8
+ import { randomBytes } from 'crypto';
9
+ const schema = {
10
+ serverUrl: {
11
+ type: 'string',
12
+ default: 'https://gobananasai.com',
13
+ },
14
+ apiKey: {
15
+ type: 'string',
16
+ default: '',
17
+ },
18
+ transport: {
19
+ type: 'string',
20
+ enum: ['mcp', 'rest', 'auto'],
21
+ default: 'auto',
22
+ },
23
+ outputDir: {
24
+ type: 'string',
25
+ default: './generated',
26
+ },
27
+ defaultAspectRatio: {
28
+ type: 'string',
29
+ default: 'square',
30
+ },
31
+ sessionId: {
32
+ type: 'string',
33
+ default: undefined,
34
+ },
35
+ };
36
+ export const config = new Conf({
37
+ projectName: 'gobananas-cli',
38
+ schema,
39
+ });
40
+ function getEnvServerUrl() {
41
+ const raw = process.env.GO_BANANAS_SERVER_URL;
42
+ if (!raw) {
43
+ return undefined;
44
+ }
45
+ return raw.replace(/\/+$/, '');
46
+ }
47
+ function getEnvApiKey() {
48
+ return process.env.GO_BANANAS_API_KEY || process.env.MCP_API_KEY;
49
+ }
50
+ /**
51
+ * Get current configuration
52
+ */
53
+ export function getConfig() {
54
+ const envServerUrl = getEnvServerUrl();
55
+ const envApiKey = getEnvApiKey();
56
+ return {
57
+ serverUrl: envServerUrl ?? config.get('serverUrl'),
58
+ apiKey: envApiKey ?? config.get('apiKey'),
59
+ transport: config.get('transport'),
60
+ outputDir: config.get('outputDir'),
61
+ defaultAspectRatio: config.get('defaultAspectRatio'),
62
+ sessionId: config.get('sessionId'),
63
+ };
64
+ }
65
+ /**
66
+ * Set a configuration value
67
+ */
68
+ export function setConfig(key, value) {
69
+ config.set(key, value);
70
+ }
71
+ /**
72
+ * API key format regex - must start with sk_live_ or sk_test_ followed by 20+ chars
73
+ */
74
+ const API_KEY_REGEX = /^sk_(live|test)_[a-zA-Z0-9_]{20,}$/;
75
+ /**
76
+ * Validate API key format
77
+ */
78
+ export function validateApiKey(key) {
79
+ if (!key || key.length === 0) {
80
+ return { valid: false, error: 'API key is required' };
81
+ }
82
+ if (!API_KEY_REGEX.test(key)) {
83
+ return { valid: false, error: 'Invalid API key format. Must start with sk_live_ or sk_test_ followed by at least 20 characters' };
84
+ }
85
+ return { valid: true };
86
+ }
87
+ /**
88
+ * Check if API key is configured
89
+ */
90
+ export function hasApiKey() {
91
+ const apiKey = getEnvApiKey() ?? config.get('apiKey');
92
+ return Boolean(apiKey && apiKey.length > 0);
93
+ }
94
+ /**
95
+ * Check if using a production API key
96
+ */
97
+ export function isProductionKey() {
98
+ const apiKey = getEnvApiKey() ?? config.get('apiKey');
99
+ return apiKey?.startsWith('sk_live_') ?? false;
100
+ }
101
+ /**
102
+ * Check if server URL is using HTTPS
103
+ */
104
+ export function isSecureConnection() {
105
+ const serverUrl = getEnvServerUrl() ?? config.get('serverUrl');
106
+ return serverUrl?.startsWith('https://') ?? false;
107
+ }
108
+ /**
109
+ * Warn if using production key over insecure connection
110
+ */
111
+ export function getSecurityWarning() {
112
+ if (isProductionKey() && !isSecureConnection()) {
113
+ return 'WARNING: Using production API key (sk_live_) over insecure HTTP connection. Consider using HTTPS.';
114
+ }
115
+ return null;
116
+ }
117
+ /**
118
+ * Generate a cryptographically secure session ID
119
+ */
120
+ function generateSecureSessionId() {
121
+ const randomPart = randomBytes(12).toString('hex');
122
+ return `cli-${Date.now()}-${randomPart}`;
123
+ }
124
+ /**
125
+ * Get or create a session ID for this CLI instance
126
+ * Session ID is persisted and reused until explicitly reset
127
+ */
128
+ export function getOrCreateSessionId() {
129
+ let sessionId = config.get('sessionId');
130
+ if (!sessionId) {
131
+ sessionId = generateSecureSessionId();
132
+ config.set('sessionId', sessionId);
133
+ }
134
+ return sessionId;
135
+ }
136
+ /**
137
+ * Reset session ID (start fresh session)
138
+ */
139
+ export function resetSession() {
140
+ const sessionId = generateSecureSessionId();
141
+ config.set('sessionId', sessionId);
142
+ return sessionId;
143
+ }
144
+ /**
145
+ * Get the config file path (for debugging)
146
+ */
147
+ export function getConfigPath() {
148
+ return config.path;
149
+ }
150
+ /**
151
+ * Clear all configuration
152
+ */
153
+ export function clearConfig() {
154
+ config.clear();
155
+ }
156
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Go Bananas CLI
4
+ *
5
+ * Command-line interface for Go Bananas! AI Image Generation
6
+ *
7
+ * Usage:
8
+ * gb generate "a sunset over mountains"
9
+ * gb edit 42 "add clouds"
10
+ * gb continue "make it brighter"
11
+ * gb char create "Hero" --prompt "..."
12
+ * gb char use "Hero" "flying over city"
13
+ * gb prod create "Widget" --url "..."
14
+ * gb prod use "Widget" "on a desk"
15
+ * gb scene create "Neon Alley" --prompt "..." --ref-urls "https://..."
16
+ * gb scene use "Neon Alley" "a futuristic motorcycle"
17
+ * gb style create "Watercolor" --instruction "..."
18
+ * gb usage stats
19
+ * gb config key "sk_live_xxx"
20
+ */
21
+ export {};
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;GAkBG"}
package/dist/index.js ADDED
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Go Bananas CLI
4
+ *
5
+ * Command-line interface for Go Bananas! AI Image Generation
6
+ *
7
+ * Usage:
8
+ * gb generate "a sunset over mountains"
9
+ * gb edit 42 "add clouds"
10
+ * gb continue "make it brighter"
11
+ * gb char create "Hero" --prompt "..."
12
+ * gb char use "Hero" "flying over city"
13
+ * gb prod create "Widget" --url "..."
14
+ * gb prod use "Widget" "on a desk"
15
+ * gb scene create "Neon Alley" --prompt "..." --ref-urls "https://..."
16
+ * gb scene use "Neon Alley" "a futuristic motorcycle"
17
+ * gb style create "Watercolor" --instruction "..."
18
+ * gb usage stats
19
+ * gb config key "sk_live_xxx"
20
+ */
21
+ import { Command } from 'commander';
22
+ import chalk from 'chalk';
23
+ import { hasApiKey, getConfig } from './config/config.js';
24
+ import { createGenerateCommand } from './commands/generate.js';
25
+ import { createEditCommand, createContinueCommand, createUploadCommand } from './commands/edit.js';
26
+ import { createCharacterCommand } from './commands/character.js';
27
+ import { createProductCommand } from './commands/product.js';
28
+ import { createSceneCommand } from './commands/scene.js';
29
+ import { createStyleCommand } from './commands/style.js';
30
+ import { createSessionCommand } from './commands/session.js';
31
+ import { createUsageCommand } from './commands/usage.js';
32
+ import { createConfigCommand } from './commands/config.js';
33
+ import { createSearchCommand } from './commands/search.js';
34
+ import { createImageCommand } from './commands/image.js';
35
+ import { createAccountCommand } from './commands/account.js';
36
+ import { createMcpHelpCommand } from './commands/mcp-help.js';
37
+ import { createMcpProxyCommand } from './commands/mcp.js';
38
+ import * as output from './utils/output.js';
39
+ // Package version
40
+ const VERSION = '1.0.0';
41
+ // ASCII art banner
42
+ const BANNER = `
43
+ ██████╗ ██████╗ ██████╗ █████╗ ███╗ ██╗ █████╗ ███╗ ██╗ █████╗ ███████╗
44
+ ██╔════╝ ██╔═══██╗ ██╔══██╗██╔══██╗████╗ ██║██╔══██╗████╗ ██║██╔══██╗██╔════╝
45
+ ██║ ███╗██║ ██║ ██████╔╝███████║██╔██╗ ██║███████║██╔██╗ ██║███████║███████╗
46
+ ██║ ██║██║ ██║ ██╔══██╗██╔══██║██║╚██╗██║██╔══██║██║╚██╗██║██╔══██║╚════██║
47
+ ╚██████╔╝╚██████╔╝ ██████╔╝██║ ██║██║ ╚████║██║ ██║██║ ╚████║██║ ██║███████║
48
+ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝
49
+ `;
50
+ // Create the main program
51
+ const program = new Command();
52
+ program
53
+ .name('gobananas')
54
+ .alias('gb')
55
+ .version(VERSION)
56
+ .description('Go Bananas! CLI - AI Image Generation')
57
+ .option('-v, --verbose', 'Enable verbose output')
58
+ .hook('preAction', (thisCommand) => {
59
+ // Check for API key before running most commands
60
+ const commandName = thisCommand.args[0];
61
+ const configCommands = ['config', 'cfg', 'help', 'mcp', '--help', '-h', '--version', '-V'];
62
+ if (!configCommands.includes(commandName) && !hasApiKey()) {
63
+ output.error('API key not configured.');
64
+ output.info('Run "gb config key <your-api-key>" to set your API key.');
65
+ process.exit(1);
66
+ }
67
+ });
68
+ // Add all commands
69
+ program.addCommand(createGenerateCommand());
70
+ program.addCommand(createEditCommand());
71
+ program.addCommand(createContinueCommand());
72
+ program.addCommand(createUploadCommand());
73
+ program.addCommand(createCharacterCommand());
74
+ program.addCommand(createProductCommand());
75
+ program.addCommand(createSceneCommand());
76
+ program.addCommand(createStyleCommand());
77
+ program.addCommand(createSessionCommand());
78
+ program.addCommand(createUsageCommand());
79
+ program.addCommand(createConfigCommand());
80
+ program.addCommand(createSearchCommand());
81
+ program.addCommand(createImageCommand());
82
+ program.addCommand(createAccountCommand());
83
+ program.addCommand(createMcpHelpCommand());
84
+ program.addCommand(createMcpProxyCommand());
85
+ // Add info command
86
+ program
87
+ .command('info')
88
+ .description('Show CLI information and status')
89
+ .action(() => {
90
+ console.log(chalk.yellow(BANNER));
91
+ console.log(chalk.bold('Go Bananas! CLI') + ` v${VERSION}`);
92
+ console.log(chalk.gray('AI Image Generation powered by Google Gemini'));
93
+ console.log();
94
+ const config = getConfig();
95
+ output.keyValue('Server', config.serverUrl);
96
+ output.keyValue('Transport', config.transport);
97
+ output.keyValue('API Key', hasApiKey() ? chalk.green('Configured') : chalk.red('Not set'));
98
+ output.keyValue('Output Dir', config.outputDir);
99
+ console.log();
100
+ output.info('Quick Start:');
101
+ console.log(' gb generate "a sunset over mountains" Generate an image');
102
+ console.log(' gb continue "add clouds" Edit the last image');
103
+ console.log(' gb char create "Hero" -p "..." Save a character');
104
+ console.log(' gb char use "Hero" "flying" Use saved character');
105
+ console.log(' gb scene create "Neon Alley" -p "..." Save a scene preset');
106
+ console.log(' gb scene use "Neon Alley" "subject" Use saved scene preset');
107
+ console.log(' gb help Show all commands');
108
+ });
109
+ // Add help examples
110
+ program.on('--help', () => {
111
+ console.log('');
112
+ console.log('Examples:');
113
+ console.log(' $ gb generate "a photorealistic sunset over mountains"');
114
+ console.log(' $ gb generate "logo design" --aspect 1:1 --style "minimalist"');
115
+ console.log(' $ gb edit 42 "add storm clouds"');
116
+ console.log(' $ gb continue "make the colors more vibrant"');
117
+ console.log(' $ gb char create "Hero Henry" --prompt "10-year-old boy with red cape"');
118
+ console.log(' $ gb char use "Hero Henry" "flying over the city at sunset"');
119
+ console.log(' $ gb prod create "Smartwatch" --url "https://example.com/watch.png"');
120
+ console.log(' $ gb prod use "Smartwatch" "on a wooden desk with laptop"');
121
+ console.log(' $ gb scene create "Neon Alley" --prompt "rainy night, neon lights"');
122
+ console.log(' $ gb scene use "Neon Alley" "a courier on a motorbike"');
123
+ console.log(' $ gb config key sk_live_your_api_key');
124
+ console.log('');
125
+ console.log('For more help on a command, run:');
126
+ console.log(' $ gb <command> --help');
127
+ });
128
+ // Parse arguments
129
+ program.parse();
130
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type UpstreamTransportMode = 'auto' | 'streamable-http' | 'sse';
2
+ export interface McpStdioProxyOptions {
3
+ serverUrl?: string;
4
+ apiKey?: string;
5
+ transport?: UpstreamTransportMode;
6
+ }
7
+ export declare function runGoBananasMcpStdioProxy(options?: McpStdioProxyOptions): Promise<void>;
8
+ //# sourceMappingURL=stdio-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio-proxy.d.ts","sourceRoot":"","sources":["../../src/mcp/stdio-proxy.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,iBAAiB,GAAG,KAAK,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACnC;AAqQD,wBAAsB,yBAAyB,CAAC,OAAO,GAAE,oBAAyB,iBAyFjF"}