ecomcoder-cli 1.3.14 → 1.3.16
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/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/collection/get-product-collections.d.ts +7 -0
- package/dist/commands/collection/get-product-collections.d.ts.map +1 -0
- package/dist/commands/collection/get-product-collections.js +99 -0
- package/dist/commands/collection/get-product-collections.js.map +1 -0
- package/dist/commands/collection/get.d.ts +7 -0
- package/dist/commands/collection/get.d.ts.map +1 -0
- package/dist/commands/collection/get.js +80 -0
- package/dist/commands/collection/get.js.map +1 -0
- package/dist/commands/collection/index.d.ts +10 -0
- package/dist/commands/collection/index.d.ts.map +1 -0
- package/dist/commands/collection/index.js +54 -0
- package/dist/commands/collection/index.js.map +1 -0
- package/dist/commands/collection/list-products.d.ts +7 -0
- package/dist/commands/collection/list-products.d.ts.map +1 -0
- package/dist/commands/collection/list-products.js +105 -0
- package/dist/commands/collection/list-products.js.map +1 -0
- package/dist/commands/collection/list.d.ts +7 -0
- package/dist/commands/collection/list.d.ts.map +1 -0
- package/dist/commands/collection/list.js +105 -0
- package/dist/commands/collection/list.js.map +1 -0
- package/dist/commands/collection/queries.d.ts +32 -0
- package/dist/commands/collection/queries.d.ts.map +1 -0
- package/dist/commands/collection/queries.js +158 -0
- package/dist/commands/collection/queries.js.map +1 -0
- package/dist/commands/collection/service.d.ts +53 -0
- package/dist/commands/collection/service.d.ts.map +1 -0
- package/dist/commands/collection/service.js +232 -0
- package/dist/commands/collection/service.js.map +1 -0
- package/dist/commands/collection/types.d.ts +156 -0
- package/dist/commands/collection/types.d.ts.map +1 -0
- package/dist/commands/collection/types.js +6 -0
- package/dist/commands/collection/types.js.map +1 -0
- package/dist/commands/collection/utils.d.ts +33 -0
- package/dist/commands/collection/utils.d.ts.map +1 -0
- package/dist/commands/collection/utils.js +84 -0
- package/dist/commands/collection/utils.js.map +1 -0
- package/dist/commands/image/generate.d.ts +6 -0
- package/dist/commands/image/generate.d.ts.map +1 -0
- package/dist/commands/image/generate.js +195 -0
- package/dist/commands/image/generate.js.map +1 -0
- package/dist/commands/image/index.d.ts +5 -0
- package/dist/commands/image/index.d.ts.map +1 -0
- package/dist/commands/image/index.js +25 -0
- package/dist/commands/image/index.js.map +1 -0
- package/dist/commands/image/openai.d.ts +19 -0
- package/dist/commands/image/openai.d.ts.map +1 -0
- package/dist/commands/image/openai.js +35 -0
- package/dist/commands/image/openai.js.map +1 -0
- package/dist/commands/image/service.d.ts +31 -0
- package/dist/commands/image/service.d.ts.map +1 -0
- package/dist/commands/image/service.js +72 -0
- package/dist/commands/image/service.js.map +1 -0
- package/dist/lib/types.d.ts +5 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Utility Functions
|
|
3
|
+
* Pure functions for data transformation and validation
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Normalize collection ID to both GID and numeric formats
|
|
7
|
+
*/
|
|
8
|
+
export function normalizeCollectionId(id) {
|
|
9
|
+
if (id.startsWith('gid://shopify/Collection/')) {
|
|
10
|
+
return {
|
|
11
|
+
gid: id,
|
|
12
|
+
numeric: id.split('/').pop() || ''
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
gid: `gid://shopify/Collection/${id}`,
|
|
17
|
+
numeric: id
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Normalize product ID to both GID and numeric formats
|
|
22
|
+
*/
|
|
23
|
+
export function normalizeProductId(id) {
|
|
24
|
+
if (id.startsWith('gid://shopify/Product/')) {
|
|
25
|
+
return {
|
|
26
|
+
gid: id,
|
|
27
|
+
numeric: id.split('/').pop() || ''
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
gid: `gid://shopify/Product/${id}`,
|
|
32
|
+
numeric: id
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Format collection for CLI output
|
|
37
|
+
*/
|
|
38
|
+
export function formatCollection(collection) {
|
|
39
|
+
return {
|
|
40
|
+
id: collection.id,
|
|
41
|
+
title: collection.title,
|
|
42
|
+
handle: collection.handle,
|
|
43
|
+
description: collection.description,
|
|
44
|
+
productsCount: collection.productsCount,
|
|
45
|
+
sortOrder: collection.sortOrder,
|
|
46
|
+
updatedAt: collection.updatedAt,
|
|
47
|
+
image: collection.image ? {
|
|
48
|
+
url: collection.image.url,
|
|
49
|
+
altText: collection.image.altText
|
|
50
|
+
} : undefined
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if GraphQL response has errors
|
|
55
|
+
*/
|
|
56
|
+
export function hasGraphQLErrors(response) {
|
|
57
|
+
return !!(response.errors && response.errors.length > 0);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Extract GraphQL error messages
|
|
61
|
+
*/
|
|
62
|
+
export function extractGraphQLErrors(response) {
|
|
63
|
+
if (!response.errors || response.errors.length === 0) {
|
|
64
|
+
return 'Unknown GraphQL error';
|
|
65
|
+
}
|
|
66
|
+
return response.errors
|
|
67
|
+
.map((err) => err.message)
|
|
68
|
+
.join(', ');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Format Shopify user errors
|
|
72
|
+
*/
|
|
73
|
+
export function formatUserErrors(errors) {
|
|
74
|
+
if (!errors || errors.length === 0) {
|
|
75
|
+
return 'Unknown error';
|
|
76
|
+
}
|
|
77
|
+
return errors
|
|
78
|
+
.map(err => {
|
|
79
|
+
const field = err.field ? err.field.join('.') : 'general';
|
|
80
|
+
return `${field}: ${err.message}`;
|
|
81
|
+
})
|
|
82
|
+
.join(', ');
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/collection/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAU;IAC9C,IAAI,EAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,EAAE,CAAC;QAC/C,OAAO;YACL,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE;SACnC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,EAAE,4BAA4B,EAAE,EAAE;QACrC,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAC5C,OAAO;YACL,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE;SACnC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,EAAE,yBAAyB,EAAE,EAAE;QAClC,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAe;IAC9C,OAAO;QACL,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YACxB,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG;YACzB,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO;SAClC,CAAC,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAa;IAC5C,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAa;IAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM;SACnB,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;SAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoD;IACnF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,OAAO,MAAM;SACV,GAAG,CAAC,GAAG,CAAC,EAAE;QACT,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,OAAO,GAAG,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/commands/image/generate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqEH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBA4I/D"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate AI Image Command
|
|
3
|
+
* Generate custom images using DALL-E 3
|
|
4
|
+
*/
|
|
5
|
+
import { getCredentials, getSessionId } from '../../lib/api-client.js';
|
|
6
|
+
import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
|
|
7
|
+
import { ImageGenerationService } from './service.js';
|
|
8
|
+
function showHelp() {
|
|
9
|
+
console.log(`
|
|
10
|
+
Generate AI Image
|
|
11
|
+
|
|
12
|
+
USAGE:
|
|
13
|
+
ecomcoder image generate --prompt=<description> [OPTIONS]
|
|
14
|
+
|
|
15
|
+
REQUIRED OPTIONS:
|
|
16
|
+
--prompt <text> Description of image to generate
|
|
17
|
+
|
|
18
|
+
OPTIONAL OPTIONS:
|
|
19
|
+
--size <size> Image size (default: 1024x1024)
|
|
20
|
+
Options: 1024x1024, 1792x1024, 1024x1792
|
|
21
|
+
--quality <quality> Image quality (default: standard)
|
|
22
|
+
Options: standard, hd
|
|
23
|
+
--style <style> Image style (default: vivid)
|
|
24
|
+
Options: vivid, natural
|
|
25
|
+
--session-id <id> Session ID (auto-provided by AI agent)
|
|
26
|
+
--backend-url <url> Backend URL override
|
|
27
|
+
--jwt <token> JWT token override
|
|
28
|
+
--help, -h Show this help
|
|
29
|
+
|
|
30
|
+
EXAMPLES:
|
|
31
|
+
# Generate hero banner
|
|
32
|
+
ecomcoder image generate --prompt="Tropical beach sunset with palm trees"
|
|
33
|
+
|
|
34
|
+
# Generate with specific size and quality
|
|
35
|
+
ecomcoder image generate \\
|
|
36
|
+
--prompt="Modern minimalist product photo" \\
|
|
37
|
+
--size=1792x1024 \\
|
|
38
|
+
--quality=hd
|
|
39
|
+
|
|
40
|
+
# Generate lifestyle photo
|
|
41
|
+
ecomcoder image generate \\
|
|
42
|
+
--prompt="Woman using skincare product in bathroom" \\
|
|
43
|
+
--style=natural
|
|
44
|
+
|
|
45
|
+
SETUP:
|
|
46
|
+
Set environment variable: OPENAI_API_KEY=sk-proj-...
|
|
47
|
+
|
|
48
|
+
NOTES:
|
|
49
|
+
- Generated images are automatically uploaded to Shopify
|
|
50
|
+
- Returns permanent Shopify CDN URL
|
|
51
|
+
- AI may revise your prompt for safety/quality
|
|
52
|
+
- Standard quality: ~15s generation time
|
|
53
|
+
- HD quality: ~20s generation time
|
|
54
|
+
|
|
55
|
+
OUTPUT:
|
|
56
|
+
{
|
|
57
|
+
"success": true,
|
|
58
|
+
"data": {
|
|
59
|
+
"asset": {
|
|
60
|
+
"shopifyUrl": "https://cdn.shopify.com/...",
|
|
61
|
+
"alt": "AI-revised description",
|
|
62
|
+
"originalPrompt": "Your original prompt",
|
|
63
|
+
"revisedPrompt": "AI-improved prompt"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
`);
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
export async function run(argv = process.argv.slice(2)) {
|
|
71
|
+
if (hasHelpFlag(argv)) {
|
|
72
|
+
showHelp();
|
|
73
|
+
}
|
|
74
|
+
const args = parseArgs(argv);
|
|
75
|
+
// Validate required arguments
|
|
76
|
+
if (!args.prompt) {
|
|
77
|
+
console.error(JSON.stringify({
|
|
78
|
+
success: false,
|
|
79
|
+
error: 'Missing required argument: --prompt'
|
|
80
|
+
}));
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
// Validate size
|
|
84
|
+
const validSizes = ['1024x1024', '1792x1024', '1024x1792'];
|
|
85
|
+
if (args.size && !validSizes.includes(args.size)) {
|
|
86
|
+
console.error(JSON.stringify({
|
|
87
|
+
success: false,
|
|
88
|
+
error: `Invalid --size. Must be one of: ${validSizes.join(', ')}`
|
|
89
|
+
}));
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
// Validate quality
|
|
93
|
+
const validQualities = ['standard', 'hd'];
|
|
94
|
+
if (args.quality && !validQualities.includes(args.quality)) {
|
|
95
|
+
console.error(JSON.stringify({
|
|
96
|
+
success: false,
|
|
97
|
+
error: `Invalid --quality. Must be one of: ${validQualities.join(', ')}`
|
|
98
|
+
}));
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
// Validate style
|
|
102
|
+
const validStyles = ['vivid', 'natural'];
|
|
103
|
+
if (args.style && !validStyles.includes(args.style)) {
|
|
104
|
+
console.error(JSON.stringify({
|
|
105
|
+
success: false,
|
|
106
|
+
error: `Invalid --style. Must be one of: ${validStyles.join(', ')}`
|
|
107
|
+
}));
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
// Get credentials and session ID
|
|
112
|
+
const sessionId = getSessionId(args.sessionId);
|
|
113
|
+
const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
|
|
114
|
+
// User machine API (runs locally on port 8080)
|
|
115
|
+
// BACKEND_URL is set by user-machine when spawning CLI processes
|
|
116
|
+
const apiUrl = args.backendUrl || process.env.BACKEND_URL || 'http://localhost:8080';
|
|
117
|
+
// Common headers (no JWT needed - user-machine already knows the environment)
|
|
118
|
+
const headers = {
|
|
119
|
+
'Content-Type': 'application/json'
|
|
120
|
+
};
|
|
121
|
+
// Step 1: Check spending limits via user machine API
|
|
122
|
+
const limitCheck = await fetch(`${apiUrl}/api/image-generation/check-limits`, {
|
|
123
|
+
method: 'POST',
|
|
124
|
+
headers,
|
|
125
|
+
body: JSON.stringify({
|
|
126
|
+
size: args.size || '1024x1024',
|
|
127
|
+
quality: args.quality || 'standard'
|
|
128
|
+
})
|
|
129
|
+
});
|
|
130
|
+
const limitResult = await limitCheck.json();
|
|
131
|
+
if (!limitResult.success || !limitResult.data?.allowed) {
|
|
132
|
+
console.error(JSON.stringify({
|
|
133
|
+
success: false,
|
|
134
|
+
error: limitResult.data?.reason || 'Image generation not allowed'
|
|
135
|
+
}));
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
// Step 2: Generate image and upload to Shopify
|
|
139
|
+
const result = await ImageGenerationService.generate(credentials, {
|
|
140
|
+
prompt: args.prompt,
|
|
141
|
+
size: args.size,
|
|
142
|
+
quality: args.quality,
|
|
143
|
+
style: args.style,
|
|
144
|
+
sessionId
|
|
145
|
+
});
|
|
146
|
+
if (!result.success) {
|
|
147
|
+
// Track failed generation
|
|
148
|
+
await fetch(`${apiUrl}/api/image-generation/track-failed`, {
|
|
149
|
+
method: 'POST',
|
|
150
|
+
headers,
|
|
151
|
+
body: JSON.stringify({
|
|
152
|
+
sessionId,
|
|
153
|
+
prompt: args.prompt,
|
|
154
|
+
revisedPrompt: args.prompt,
|
|
155
|
+
size: args.size || '1024x1024',
|
|
156
|
+
quality: args.quality || 'standard',
|
|
157
|
+
errorMessage: result.error || 'Unknown error',
|
|
158
|
+
metadata: {
|
|
159
|
+
style: args.style || 'vivid'
|
|
160
|
+
}
|
|
161
|
+
})
|
|
162
|
+
});
|
|
163
|
+
console.error(JSON.stringify(result));
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
// Step 3: Track successful generation via user machine API
|
|
167
|
+
if (result.data) {
|
|
168
|
+
await fetch(`${apiUrl}/api/image-generation/track`, {
|
|
169
|
+
method: 'POST',
|
|
170
|
+
headers,
|
|
171
|
+
body: JSON.stringify({
|
|
172
|
+
sessionId,
|
|
173
|
+
prompt: args.prompt,
|
|
174
|
+
revisedPrompt: result.data.asset.revisedPrompt,
|
|
175
|
+
size: args.size || '1024x1024',
|
|
176
|
+
quality: args.quality || 'standard',
|
|
177
|
+
imageUrl: result.data.asset.shopifyUrl,
|
|
178
|
+
metadata: {
|
|
179
|
+
style: args.style || 'vivid',
|
|
180
|
+
originalPrompt: result.data.asset.originalPrompt
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
console.log(JSON.stringify(result, null, 2));
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
console.error(JSON.stringify({
|
|
189
|
+
success: false,
|
|
190
|
+
error: error.message || 'Unknown error occurred'
|
|
191
|
+
}));
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/image/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/image/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAgB,qBAAqB,IAAI,IAAI,CAmB5C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image Command Registration
|
|
3
|
+
*/
|
|
4
|
+
import { registry } from '../../lib/command-registry.js';
|
|
5
|
+
import { HelpGenerator } from '../../lib/help-generator.js';
|
|
6
|
+
export function registerImageCommands() {
|
|
7
|
+
// Register group
|
|
8
|
+
registry.registerGroup({
|
|
9
|
+
command: 'image',
|
|
10
|
+
description: 'AI image generation and management',
|
|
11
|
+
showHelp: () => {
|
|
12
|
+
console.log(HelpGenerator.generateGroupHelp('image'));
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
// Register generate command
|
|
16
|
+
registry.register({
|
|
17
|
+
command: 'image',
|
|
18
|
+
subcommand: 'generate',
|
|
19
|
+
description: 'Generate AI image using DALL-E 3',
|
|
20
|
+
category: 'Create',
|
|
21
|
+
quickExample: 'ecomcoder image generate --prompt="tropical sunset"',
|
|
22
|
+
handler: async () => await import('./generate.js')
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/image/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,UAAU,qBAAqB;IACnC,iBAAiB;IACjB,QAAQ,CAAC,aAAa,CAAC;QACrB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,oCAAoC;QACjD,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,CAAC;KACF,CAAC,CAAC;IAEH,4BAA4B;IAC5B,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,kCAAkC;QAC/C,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,qDAAqD;QACnE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC;KACnD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI DALL-E 3 Integration
|
|
3
|
+
* Handles image generation via OpenAI API
|
|
4
|
+
*/
|
|
5
|
+
export interface GenerateImageInput {
|
|
6
|
+
prompt: string;
|
|
7
|
+
size?: '1024x1024' | '1792x1024' | '1024x1792';
|
|
8
|
+
quality?: 'standard' | 'hd';
|
|
9
|
+
style?: 'vivid' | 'natural';
|
|
10
|
+
}
|
|
11
|
+
export interface GeneratedImage {
|
|
12
|
+
url: string;
|
|
13
|
+
revisedPrompt: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Generate image using OpenAI DALL-E 3
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateImage(input: GenerateImageInput): Promise<GeneratedImage>;
|
|
19
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/commands/image/openai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IAC/C,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgCtF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI DALL-E 3 Integration
|
|
3
|
+
* Handles image generation via OpenAI API
|
|
4
|
+
*/
|
|
5
|
+
import OpenAI from 'openai';
|
|
6
|
+
/**
|
|
7
|
+
* Generate image using OpenAI DALL-E 3
|
|
8
|
+
*/
|
|
9
|
+
export async function generateImage(input) {
|
|
10
|
+
const apiKey = process.env.OPENAI_API_KEY;
|
|
11
|
+
if (!apiKey) {
|
|
12
|
+
throw new Error('OPENAI_API_KEY environment variable not set');
|
|
13
|
+
}
|
|
14
|
+
const openai = new OpenAI({ apiKey });
|
|
15
|
+
const response = await openai.images.generate({
|
|
16
|
+
model: 'dall-e-3',
|
|
17
|
+
prompt: input.prompt,
|
|
18
|
+
n: 1,
|
|
19
|
+
size: input.size || '1024x1024',
|
|
20
|
+
quality: input.quality || 'standard',
|
|
21
|
+
style: input.style || 'vivid'
|
|
22
|
+
});
|
|
23
|
+
if (!response.data || response.data.length === 0) {
|
|
24
|
+
throw new Error('No images returned from OpenAI');
|
|
25
|
+
}
|
|
26
|
+
const imageData = response.data[0];
|
|
27
|
+
if (!imageData || !imageData.url) {
|
|
28
|
+
throw new Error('No image returned from OpenAI');
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
url: imageData.url,
|
|
32
|
+
revisedPrompt: imageData.revised_prompt || input.prompt
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/commands/image/openai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAc5B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAyB;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAE1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC5C,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,CAAC,EAAE,CAAC;QACJ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,WAAW;QAC/B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,UAAU;QACpC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,OAAO;KAC9B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,OAAO;QACL,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,aAAa,EAAE,SAAS,CAAC,cAAc,IAAI,KAAK,CAAC,MAAM;KACxD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image Generation Service
|
|
3
|
+
* Orchestrates: OpenAI generation → Download → Shopify upload
|
|
4
|
+
*/
|
|
5
|
+
import { ShopifyCredentials, CommandResult } from '../../lib/types.js';
|
|
6
|
+
import { GenerateImageInput } from './openai.js';
|
|
7
|
+
export interface ImageGenerationInput extends GenerateImageInput {
|
|
8
|
+
sessionId?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface GeneratedAsset {
|
|
11
|
+
id: string;
|
|
12
|
+
shopifyUrl: string;
|
|
13
|
+
alt: string;
|
|
14
|
+
originalPrompt: string;
|
|
15
|
+
revisedPrompt: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class ImageGenerationService {
|
|
18
|
+
/**
|
|
19
|
+
* Generate image and upload to Shopify
|
|
20
|
+
*
|
|
21
|
+
* Flow:
|
|
22
|
+
* 1. Generate image via OpenAI DALL-E 3
|
|
23
|
+
* 2. Download from Azure blob (temporary URL)
|
|
24
|
+
* 3. Upload to Shopify Files
|
|
25
|
+
* 4. Return Shopify CDN URL
|
|
26
|
+
*/
|
|
27
|
+
static generate(credentials: ShopifyCredentials, input: ImageGenerationInput): Promise<CommandResult<{
|
|
28
|
+
asset: GeneratedAsset;
|
|
29
|
+
}>>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/commands/image/service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAiB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAIhE,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,sBAAsB;IACjC;;;;;;;;OAQG;WACU,QAAQ,CACnB,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;CAyDrD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image Generation Service
|
|
3
|
+
* Orchestrates: OpenAI generation → Download → Shopify upload
|
|
4
|
+
*/
|
|
5
|
+
import { generateImage } from './openai.js';
|
|
6
|
+
import { AssetService } from '../asset/service.js';
|
|
7
|
+
import { downloadUrlToTemp } from '../asset/utils.js';
|
|
8
|
+
export class ImageGenerationService {
|
|
9
|
+
/**
|
|
10
|
+
* Generate image and upload to Shopify
|
|
11
|
+
*
|
|
12
|
+
* Flow:
|
|
13
|
+
* 1. Generate image via OpenAI DALL-E 3
|
|
14
|
+
* 2. Download from Azure blob (temporary URL)
|
|
15
|
+
* 3. Upload to Shopify Files
|
|
16
|
+
* 4. Return Shopify CDN URL
|
|
17
|
+
*/
|
|
18
|
+
static async generate(credentials, input) {
|
|
19
|
+
try {
|
|
20
|
+
// Step 1: Generate image via OpenAI
|
|
21
|
+
const generated = await generateImage({
|
|
22
|
+
prompt: input.prompt,
|
|
23
|
+
size: input.size,
|
|
24
|
+
quality: input.quality,
|
|
25
|
+
style: input.style
|
|
26
|
+
});
|
|
27
|
+
// Step 2: Download from Azure blob to temp file
|
|
28
|
+
const downloaded = await downloadUrlToTemp(generated.url);
|
|
29
|
+
try {
|
|
30
|
+
// Step 3: Upload to Shopify
|
|
31
|
+
// Truncate alt text to 512 characters (Shopify limit)
|
|
32
|
+
const altText = generated.revisedPrompt.length > 512
|
|
33
|
+
? generated.revisedPrompt.substring(0, 509) + '...'
|
|
34
|
+
: generated.revisedPrompt;
|
|
35
|
+
const uploadResult = await AssetService.upload(credentials, {
|
|
36
|
+
file: downloaded.path,
|
|
37
|
+
alt: altText,
|
|
38
|
+
contentType: 'IMAGE'
|
|
39
|
+
});
|
|
40
|
+
if (!uploadResult.success) {
|
|
41
|
+
throw new Error(uploadResult.error);
|
|
42
|
+
}
|
|
43
|
+
const asset = uploadResult.data.asset;
|
|
44
|
+
return {
|
|
45
|
+
success: true,
|
|
46
|
+
data: {
|
|
47
|
+
asset: {
|
|
48
|
+
id: asset.id,
|
|
49
|
+
shopifyUrl: asset.url,
|
|
50
|
+
alt: altText,
|
|
51
|
+
originalPrompt: input.prompt,
|
|
52
|
+
revisedPrompt: generated.revisedPrompt
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
// Step 4: Cleanup temp file
|
|
59
|
+
if (downloaded.cleanup) {
|
|
60
|
+
downloaded.cleanup();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
error: error.message || 'Image generation failed'
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/commands/image/service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AActD,MAAM,OAAO,sBAAsB;IACjC;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CACnB,WAA+B,EAC/B,KAA2B;QAE3B,IAAI,CAAC;YACH,oCAAoC;YACpC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC;gBACpC,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC,CAAC;YAEH,gDAAgD;YAChD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAE1D,IAAI,CAAC;gBACH,4BAA4B;gBAC5B,sDAAsD;gBACtD,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,GAAG;oBAClD,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;oBACnD,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC;gBAE5B,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE;oBAC1D,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,GAAG,EAAE,OAAO;oBACZ,WAAW,EAAE,OAAO;iBACrB,CAAC,CAAC;gBAEH,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtC,CAAC;gBAED,MAAM,KAAK,GAAG,YAAY,CAAC,IAAK,CAAC,KAAK,CAAC;gBAEvC,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE;wBACJ,KAAK,EAAE;4BACL,EAAE,EAAE,KAAK,CAAC,EAAE;4BACZ,UAAU,EAAE,KAAK,CAAC,GAAG;4BACrB,GAAG,EAAE,OAAO;4BACZ,cAAc,EAAE,KAAK,CAAC,MAAM;4BAC5B,aAAa,EAAE,SAAS,CAAC,aAAa;yBACvC;qBACF;iBACF,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,4BAA4B;gBAC5B,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACvB,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,yBAAyB;aAClD,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -10,6 +10,11 @@ export interface BackendAPIResponse<T = any> {
|
|
|
10
10
|
data?: T;
|
|
11
11
|
error?: string;
|
|
12
12
|
}
|
|
13
|
+
export interface CommandResult<T = any> {
|
|
14
|
+
success: boolean;
|
|
15
|
+
data?: T;
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
13
18
|
export interface ProductCreateInput {
|
|
14
19
|
product: {
|
|
15
20
|
title: string;
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,EAAE,KAAK,CAAC;QACX,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;IACH,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,KAAK,CAAC;YACX,IAAI,EAAE;gBACJ,EAAE,EAAE,MAAM,CAAC;gBACX,KAAK,EAAE,MAAM,CAAC;aACf,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC,GAAG,GAAG;IAC7C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,GAAG,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,EAAE,KAAK,CAAC;QACX,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;IACH,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,KAAK,CAAC;YACX,IAAI,EAAE;gBACJ,EAAE,EAAE,MAAM,CAAC;gBACX,KAAK,EAAE,MAAM,CAAC;aACf,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC,GAAG,GAAG;IAC7C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,GAAG,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ecomcoder-cli",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI tools for EcomCoder - Shopify development utilities",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -51,7 +51,8 @@
|
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@pinecone-database/pinecone": "^6.1.3",
|
|
53
53
|
"@supabase/supabase-js": "^2.87.0",
|
|
54
|
-
"form-data": "^4.0.0"
|
|
54
|
+
"form-data": "^4.0.0",
|
|
55
|
+
"openai": "^6.17.0"
|
|
55
56
|
},
|
|
56
57
|
"devDependencies": {
|
|
57
58
|
"@types/form-data": "^2.2.1",
|