aigma 0.1.4 → 0.1.6
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/AGENTS.md +47 -2
- package/README.md +12 -0
- package/dist/commands/config.js +47 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create-node.js +47 -5
- package/dist/commands/create-node.js.map +1 -1
- package/dist/commands/describe-canvas.js +5 -3
- package/dist/commands/describe-canvas.js.map +1 -1
- package/dist/commands/list-nodes.js +61 -0
- package/dist/commands/list-nodes.js.map +1 -0
- package/dist/commands/upload-asset.js +25 -0
- package/dist/commands/upload-asset.js.map +1 -0
- package/dist/index.js +77 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/upload.js +59 -0
- package/dist/lib/upload.js.map +1 -0
- package/dist/lib/user-config.js +48 -0
- package/dist/lib/user-config.js.map +1 -0
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -28,9 +28,31 @@ Once the user has logged in, credentials live at `~/.aigma/credentials.json` and
|
|
|
28
28
|
3. aigma describe-canvas <id> --json # frames + node count for the
|
|
29
29
|
# ones you're considering
|
|
30
30
|
4. Choose / create a canvas (see below)
|
|
31
|
-
5. aigma
|
|
31
|
+
5. (Optional) aigma upload-asset <file> # ONE upload-asset per file you
|
|
32
|
+
# want to appear in the HTML.
|
|
33
|
+
# Or use create-node --asset to
|
|
34
|
+
# do uploads inline.
|
|
35
|
+
6. aigma create-node --prompt "..." --canvas <id> --json [--asset file ...]
|
|
32
36
|
```
|
|
33
37
|
|
|
38
|
+
### Assets — ALWAYS upload first
|
|
39
|
+
|
|
40
|
+
The CLI's prompt is text-only (max 4000 chars). **Do NOT base64-encode images
|
|
41
|
+
or other binary content into the prompt** — it will be truncated and the
|
|
42
|
+
model can't render it anyway. Instead:
|
|
43
|
+
|
|
44
|
+
1. Upload each file with `aigma upload-asset <file>` → returns a stable
|
|
45
|
+
public URL.
|
|
46
|
+
2. Either pass the URL into your prompt directly, or use
|
|
47
|
+
`aigma create-node --asset <file>` (repeatable). With `--asset`, the CLI
|
|
48
|
+
uploads each file and appends a structured `AVAILABLE ASSETS` block to
|
|
49
|
+
your prompt; the model embeds the URLs in the generated HTML
|
|
50
|
+
(`<img src=…>`, `<video src=…>`, etc.) so the asset is visually part of
|
|
51
|
+
the page on the canvas.
|
|
52
|
+
|
|
53
|
+
Anything fits — images, PDFs, audio, video, text, JSON. The bucket is
|
|
54
|
+
public-read and capped at 25 MB per upload.
|
|
55
|
+
|
|
34
56
|
### Step 1 — list canvases
|
|
35
57
|
|
|
36
58
|
```bash
|
|
@@ -179,6 +201,17 @@ AIGMA_SUPABASE_ANON_KEY=...
|
|
|
179
201
|
AIGMA_WEB_BASE=...
|
|
180
202
|
```
|
|
181
203
|
|
|
204
|
+
## Long prompts — `--prompt-file` or stdin
|
|
205
|
+
|
|
206
|
+
For prompts beyond a couple of sentences, prefer `--prompt-file <path>` (or
|
|
207
|
+
piping via stdin) over `--prompt "..."` in shell. Avoids quoting bugs with
|
|
208
|
+
backticks/quotes in the prompt:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
aigma create-node --prompt-file ./brief.md --canvas <id> --json
|
|
212
|
+
cat brief.md | aigma create-node --canvas <id> --json
|
|
213
|
+
```
|
|
214
|
+
|
|
182
215
|
## Quickref
|
|
183
216
|
|
|
184
217
|
```bash
|
|
@@ -186,9 +219,21 @@ aigma login # interactive — user only
|
|
|
186
219
|
aigma whoami --json # exit code 3 if not signed in
|
|
187
220
|
aigma list-canvases --json
|
|
188
221
|
aigma describe-canvas <id-or-name> --json
|
|
222
|
+
aigma list-nodes --canvas <id> --json
|
|
189
223
|
aigma create-canvas --name "Project" --json
|
|
190
|
-
|
|
224
|
+
|
|
225
|
+
# Assets — upload first, then reference
|
|
226
|
+
aigma upload-asset ./photo.jpg # prints the URL
|
|
227
|
+
aigma create-node --asset ./photo.jpg --asset ./logo.svg \
|
|
228
|
+
--prompt "..." --canvas <id> --json # auto-uploads + injects URLs
|
|
229
|
+
|
|
230
|
+
# Long prompts
|
|
231
|
+
aigma create-node --prompt-file ./brief.md --canvas <id> --json
|
|
232
|
+
cat brief.md | aigma create-node --canvas <id> --json
|
|
233
|
+
|
|
234
|
+
# Other
|
|
191
235
|
aigma create-node --prompt "..." --canvas <id> --output out.html
|
|
236
|
+
aigma config set default-canvas <id> # skip --canvas every call
|
|
192
237
|
aigma open # open /nodes in browser
|
|
193
238
|
aigma open --published <slug> # open /p/{slug}
|
|
194
239
|
aigma open --draft <id> # open /nodes?draft=<id>
|
package/README.md
CHANGED
|
@@ -32,6 +32,18 @@ aigma create-node --prompt "Hero section for an AI photo editor"
|
|
|
32
32
|
# Or target a specific canvas (by UUID or exact name)
|
|
33
33
|
aigma create-node --prompt "Pricing section" --canvas "My Project"
|
|
34
34
|
|
|
35
|
+
# Long prompts: read from a file or stdin
|
|
36
|
+
aigma create-node --prompt-file brief.md --canvas "My Project"
|
|
37
|
+
cat brief.md | aigma create-node --canvas "My Project"
|
|
38
|
+
|
|
39
|
+
# Attach assets — uploads each file, then references the URL in the prompt
|
|
40
|
+
aigma create-node --prompt "Personal CV with my photo" \
|
|
41
|
+
--asset ./me.jpg --canvas "My Project"
|
|
42
|
+
|
|
43
|
+
# Or upload separately and reference the URL yourself
|
|
44
|
+
URL=$(aigma upload-asset ./logo.svg)
|
|
45
|
+
aigma create-node --prompt "Header with our logo: $URL" --canvas "My Project"
|
|
46
|
+
|
|
35
47
|
# Save the generated HTML to a file
|
|
36
48
|
aigma create-node --prompt "Pricing section" --output pricing.html
|
|
37
49
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { readConfig, setConfigValue, unsetConfigValue, isValidKey, listKeys, } from '../lib/user-config.js';
|
|
2
|
+
import { info, json, success, error, ExitCode } from '../lib/output.js';
|
|
3
|
+
export async function runConfigGet(args) {
|
|
4
|
+
const cfg = await readConfig();
|
|
5
|
+
if (!args.key) {
|
|
6
|
+
if (args.json)
|
|
7
|
+
return json(cfg);
|
|
8
|
+
if (Object.keys(cfg).length === 0)
|
|
9
|
+
return info('(no config set)');
|
|
10
|
+
for (const [k, v] of Object.entries(cfg))
|
|
11
|
+
info(` ${k.replace(/_/g, '-')} = ${v}`);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (!isValidKey(args.key)) {
|
|
15
|
+
error(`Unknown key "${args.key}". Valid: ${listKeys().join(', ')}`);
|
|
16
|
+
process.exit(ExitCode.Validation);
|
|
17
|
+
}
|
|
18
|
+
const field = args.key.replace(/-/g, '_');
|
|
19
|
+
const v = cfg[field];
|
|
20
|
+
if (args.json)
|
|
21
|
+
return json({ key: args.key, value: v ?? null });
|
|
22
|
+
if (v === undefined)
|
|
23
|
+
info(`${args.key} is not set`);
|
|
24
|
+
else
|
|
25
|
+
process.stdout.write(`${v}\n`);
|
|
26
|
+
}
|
|
27
|
+
export async function runConfigSet(args) {
|
|
28
|
+
if (!isValidKey(args.key)) {
|
|
29
|
+
error(`Unknown key "${args.key}". Valid: ${listKeys().join(', ')}`);
|
|
30
|
+
process.exit(ExitCode.Validation);
|
|
31
|
+
}
|
|
32
|
+
await setConfigValue(args.key, args.value);
|
|
33
|
+
success(`Set ${args.key} = ${args.value}`);
|
|
34
|
+
if (args.json)
|
|
35
|
+
json({ ok: true, key: args.key, value: args.value });
|
|
36
|
+
}
|
|
37
|
+
export async function runConfigUnset(args) {
|
|
38
|
+
if (!isValidKey(args.key)) {
|
|
39
|
+
error(`Unknown key "${args.key}". Valid: ${listKeys().join(', ')}`);
|
|
40
|
+
process.exit(ExitCode.Validation);
|
|
41
|
+
}
|
|
42
|
+
await unsetConfigValue(args.key);
|
|
43
|
+
success(`Unset ${args.key}`);
|
|
44
|
+
if (args.json)
|
|
45
|
+
json({ ok: true, key: args.key });
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,36 @@
|
|
|
1
1
|
import { promises as fs } from 'node:fs';
|
|
2
2
|
import { authenticatedClient } from '../lib/session.js';
|
|
3
3
|
import { FUNCTIONS_BASE, SUPABASE_ANON_KEY } from '../lib/config.js';
|
|
4
|
+
import { getDefaultCanvas } from '../lib/user-config.js';
|
|
5
|
+
import { uploadAsset } from '../lib/upload.js';
|
|
4
6
|
import { info, success, json, error, ExitCode } from '../lib/output.js';
|
|
7
|
+
async function resolvePrompt(opts) {
|
|
8
|
+
if (opts.prompt && opts.prompt.trim())
|
|
9
|
+
return opts.prompt.trim();
|
|
10
|
+
if (opts.promptFile) {
|
|
11
|
+
const txt = await fs.readFile(opts.promptFile, 'utf8');
|
|
12
|
+
return txt.trim();
|
|
13
|
+
}
|
|
14
|
+
// Fall back to stdin if it's a pipe (not a TTY).
|
|
15
|
+
if (!process.stdin.isTTY) {
|
|
16
|
+
const chunks = [];
|
|
17
|
+
for await (const chunk of process.stdin) {
|
|
18
|
+
chunks.push(chunk);
|
|
19
|
+
}
|
|
20
|
+
return Buffer.concat(chunks).toString('utf8').trim();
|
|
21
|
+
}
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
function injectAssets(prompt, assets) {
|
|
25
|
+
if (assets.length === 0)
|
|
26
|
+
return prompt;
|
|
27
|
+
const lines = assets.map((a) => `- ${a.url} (${a.content_type}, ${a.filename})`);
|
|
28
|
+
return `${prompt}\n\nAVAILABLE ASSETS — embed appropriate ones in the HTML (e.g. <img src=\"…\"> for images). URLs are public and stable:\n${lines.join('\n')}`;
|
|
29
|
+
}
|
|
5
30
|
export async function runCreateNode(opts) {
|
|
6
|
-
|
|
7
|
-
|
|
31
|
+
const promptText = await resolvePrompt(opts);
|
|
32
|
+
if (!promptText) {
|
|
33
|
+
error('prompt is required: pass --prompt, --prompt-file, or pipe via stdin');
|
|
8
34
|
process.exit(ExitCode.Validation);
|
|
9
35
|
}
|
|
10
36
|
const auth = await authenticatedClient();
|
|
@@ -12,7 +38,23 @@ export async function runCreateNode(opts) {
|
|
|
12
38
|
error('Not authenticated. Run `aigma login` first.');
|
|
13
39
|
process.exit(ExitCode.AuthRequired);
|
|
14
40
|
}
|
|
15
|
-
|
|
41
|
+
// Resolve canvas: explicit flag > stored default > server-side fallback (most-recent).
|
|
42
|
+
const canvas = opts.canvas ?? (await getDefaultCanvas());
|
|
43
|
+
// Upload any --asset files first, then weave URLs into the prompt.
|
|
44
|
+
const uploaded = [];
|
|
45
|
+
for (const file of opts.asset ?? []) {
|
|
46
|
+
info(`Uploading asset ${file}…`);
|
|
47
|
+
try {
|
|
48
|
+
uploaded.push(await uploadAsset(file));
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
error(`Failed to upload ${file}: ${err.message}`);
|
|
52
|
+
process.exit(ExitCode.Generic);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const finalPrompt = injectAssets(promptText, uploaded);
|
|
56
|
+
info(canvas ? `Generating node on canvas "${canvas}"…` : 'Generating node (most-recent canvas)…');
|
|
57
|
+
info(' (this can take 10–30s depending on prompt length)');
|
|
16
58
|
let res;
|
|
17
59
|
try {
|
|
18
60
|
res = await fetch(`${FUNCTIONS_BASE}/cli-create-node`, {
|
|
@@ -23,8 +65,8 @@ export async function runCreateNode(opts) {
|
|
|
23
65
|
apikey: SUPABASE_ANON_KEY,
|
|
24
66
|
},
|
|
25
67
|
body: JSON.stringify({
|
|
26
|
-
prompt:
|
|
27
|
-
...(
|
|
68
|
+
prompt: finalPrompt,
|
|
69
|
+
...(canvas ? { canvas } : {}),
|
|
28
70
|
}),
|
|
29
71
|
});
|
|
30
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-node.js","sourceRoot":"","sources":["../../src/commands/create-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-node.js","sourceRoot":"","sources":["../../src/commands/create-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { authenticatedClient } from '../lib/session.js';
|
|
2
2
|
import { FUNCTIONS_BASE, SUPABASE_ANON_KEY } from '../lib/config.js';
|
|
3
|
+
import { getDefaultCanvas } from '../lib/user-config.js';
|
|
3
4
|
import { info, json, error, ExitCode } from '../lib/output.js';
|
|
4
5
|
export async function runDescribeCanvas(opts) {
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
const canvas = opts.canvas?.trim() || (await getDefaultCanvas());
|
|
7
|
+
if (!canvas) {
|
|
8
|
+
error('canvas (id or name) is required — pass one or run `aigma config set default-canvas <id>`');
|
|
7
9
|
process.exit(ExitCode.Validation);
|
|
8
10
|
}
|
|
9
11
|
const auth = await authenticatedClient();
|
|
@@ -20,7 +22,7 @@ export async function runDescribeCanvas(opts) {
|
|
|
20
22
|
Authorization: `Bearer ${auth.accessToken}`,
|
|
21
23
|
apikey: SUPABASE_ANON_KEY,
|
|
22
24
|
},
|
|
23
|
-
body: JSON.stringify({ canvas
|
|
25
|
+
body: JSON.stringify({ canvas }),
|
|
24
26
|
});
|
|
25
27
|
}
|
|
26
28
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describe-canvas.js","sourceRoot":"","sources":["../../src/commands/describe-canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAiB/D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"describe-canvas.js","sourceRoot":"","sources":["../../src/commands/describe-canvas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { authenticatedClient } from '../lib/session.js';
|
|
2
|
+
import { FUNCTIONS_BASE, SUPABASE_ANON_KEY } from '../lib/config.js';
|
|
3
|
+
import { getDefaultCanvas } from '../lib/user-config.js';
|
|
4
|
+
import { info, json, error, ExitCode } from '../lib/output.js';
|
|
5
|
+
export async function runListNodes(opts) {
|
|
6
|
+
const canvas = opts.canvas?.trim() || (await getDefaultCanvas());
|
|
7
|
+
if (!canvas) {
|
|
8
|
+
error('--canvas is required — pass one or set a default with `aigma config set default-canvas <id>`');
|
|
9
|
+
process.exit(ExitCode.Validation);
|
|
10
|
+
}
|
|
11
|
+
const auth = await authenticatedClient();
|
|
12
|
+
if (!auth) {
|
|
13
|
+
error('Not authenticated. Run `aigma login` first.');
|
|
14
|
+
process.exit(ExitCode.AuthRequired);
|
|
15
|
+
}
|
|
16
|
+
let res;
|
|
17
|
+
try {
|
|
18
|
+
res = await fetch(`${FUNCTIONS_BASE}/cli-describe-canvas`, {
|
|
19
|
+
method: 'POST',
|
|
20
|
+
headers: {
|
|
21
|
+
'Content-Type': 'application/json',
|
|
22
|
+
Authorization: `Bearer ${auth.accessToken}`,
|
|
23
|
+
apikey: SUPABASE_ANON_KEY,
|
|
24
|
+
},
|
|
25
|
+
body: JSON.stringify({ canvas }),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
error(`Network error: ${err.message}`);
|
|
30
|
+
process.exit(ExitCode.Generic);
|
|
31
|
+
}
|
|
32
|
+
let payload;
|
|
33
|
+
try {
|
|
34
|
+
payload = (await res.json());
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
error(`Server returned non-JSON (status ${res.status})`);
|
|
38
|
+
process.exit(ExitCode.Generic);
|
|
39
|
+
}
|
|
40
|
+
if (!res.ok || payload.error || !payload.canvas) {
|
|
41
|
+
const msg = payload.detail ? `${payload.error}: ${payload.detail}` : payload.error || `Request failed (status ${res.status})`;
|
|
42
|
+
error(msg);
|
|
43
|
+
if (payload.matches?.length) {
|
|
44
|
+
for (const m of payload.matches)
|
|
45
|
+
info(` ${m.id} ${m.name}`);
|
|
46
|
+
}
|
|
47
|
+
process.exit(res.status === 401 ? ExitCode.AuthRequired : ExitCode.Generic);
|
|
48
|
+
}
|
|
49
|
+
if (opts.json) {
|
|
50
|
+
json({ ok: true, canvas: payload.canvas.id, frames: payload.canvas.frames });
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (payload.canvas.frames.length === 0) {
|
|
54
|
+
info(`(no frames on canvas ${payload.canvas.name})`);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
for (const f of payload.canvas.frames) {
|
|
58
|
+
info(`${f.id}\t${f.type}\t${f.name}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=list-nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-nodes.js","sourceRoot":"","sources":["../../src/commands/list-nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { uploadAsset } from '../lib/upload.js';
|
|
2
|
+
import { info, success, json, error, ExitCode } from '../lib/output.js';
|
|
3
|
+
export async function runUploadAsset(opts) {
|
|
4
|
+
if (!opts.file) {
|
|
5
|
+
error('file path is required');
|
|
6
|
+
process.exit(ExitCode.Validation);
|
|
7
|
+
}
|
|
8
|
+
let asset;
|
|
9
|
+
try {
|
|
10
|
+
asset = await uploadAsset(opts.file);
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
const msg = err.message;
|
|
14
|
+
error(msg);
|
|
15
|
+
process.exit(/Not authenticated/.test(msg) ? ExitCode.AuthRequired : ExitCode.Generic);
|
|
16
|
+
}
|
|
17
|
+
if (opts.json) {
|
|
18
|
+
json(asset);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
success(`Uploaded ${asset.filename} (${asset.size_bytes} bytes)`);
|
|
22
|
+
info(` URL: ${asset.url}`);
|
|
23
|
+
process.stdout.write(asset.url + '\n');
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=upload-asset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-asset.js","sourceRoot":"","sources":["../../src/commands/upload-asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAsC;IACzE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,CAAC;QACnC,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,OAAO;IACT,CAAC;IAED,OAAO,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,UAAU,SAAS,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,8 +8,11 @@ import { runCreateNode } from './commands/create-node.js';
|
|
|
8
8
|
import { runListCanvases } from './commands/list-canvases.js';
|
|
9
9
|
import { runCreateCanvas } from './commands/create-canvas.js';
|
|
10
10
|
import { runDescribeCanvas } from './commands/describe-canvas.js';
|
|
11
|
+
import { runListNodes } from './commands/list-nodes.js';
|
|
11
12
|
import { runWhoami } from './commands/whoami.js';
|
|
12
13
|
import { runOpen } from './commands/open.js';
|
|
14
|
+
import { runConfigGet, runConfigSet, runConfigUnset } from './commands/config.js';
|
|
15
|
+
import { runUploadAsset } from './commands/upload-asset.js';
|
|
13
16
|
import { runAgentHelp } from './commands/agent-help.js';
|
|
14
17
|
import { exitWith } from './lib/output.js';
|
|
15
18
|
function readVersion() {
|
|
@@ -67,8 +70,8 @@ program
|
|
|
67
70
|
});
|
|
68
71
|
program
|
|
69
72
|
.command('describe-canvas')
|
|
70
|
-
.description('Show frames + node count for one canvas (UUID or name)')
|
|
71
|
-
.argument('
|
|
73
|
+
.description('Show frames + node count for one canvas (UUID or name; defaults to config default-canvas)')
|
|
74
|
+
.argument('[canvas]', 'canvas UUID or exact name')
|
|
72
75
|
.option('--json', 'output JSON on stdout')
|
|
73
76
|
.action(async (canvas, opts) => {
|
|
74
77
|
try {
|
|
@@ -78,6 +81,60 @@ program
|
|
|
78
81
|
exitWith(1, err.message);
|
|
79
82
|
}
|
|
80
83
|
});
|
|
84
|
+
program
|
|
85
|
+
.command('list-nodes')
|
|
86
|
+
.description('List frames on a canvas (TSV: id\\ttype\\tname; defaults to config default-canvas)')
|
|
87
|
+
.option('-c, --canvas <id-or-name>', 'target canvas (UUID or exact name)')
|
|
88
|
+
.option('--json', 'output JSON on stdout')
|
|
89
|
+
.action(async (opts) => {
|
|
90
|
+
try {
|
|
91
|
+
await runListNodes({ canvas: opts.canvas, json: !!opts.json });
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
exitWith(1, err.message);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
const config = program.command('config').description('Read or write CLI config (~/.aigma/config.json)');
|
|
98
|
+
config
|
|
99
|
+
.command('get')
|
|
100
|
+
.description('Print a config value, or all values if no key passed')
|
|
101
|
+
.argument('[key]', 'config key (e.g. default-canvas)')
|
|
102
|
+
.option('--json', 'output JSON on stdout')
|
|
103
|
+
.action(async (key, opts) => {
|
|
104
|
+
try {
|
|
105
|
+
await runConfigGet({ key, json: !!opts.json });
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
exitWith(1, err.message);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
config
|
|
112
|
+
.command('set')
|
|
113
|
+
.description('Set a config value')
|
|
114
|
+
.argument('<key>', 'config key (e.g. default-canvas)')
|
|
115
|
+
.argument('<value>', 'value to set')
|
|
116
|
+
.option('--json', 'output JSON on stdout')
|
|
117
|
+
.action(async (key, value, opts) => {
|
|
118
|
+
try {
|
|
119
|
+
await runConfigSet({ key, value, json: !!opts.json });
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
exitWith(1, err.message);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
config
|
|
126
|
+
.command('unset')
|
|
127
|
+
.description('Remove a config value')
|
|
128
|
+
.argument('<key>', 'config key')
|
|
129
|
+
.option('--json', 'output JSON on stdout')
|
|
130
|
+
.action(async (key, opts) => {
|
|
131
|
+
try {
|
|
132
|
+
await runConfigUnset({ key, json: !!opts.json });
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
exitWith(1, err.message);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
81
138
|
program
|
|
82
139
|
.command('whoami')
|
|
83
140
|
.description('Show the currently signed-in user')
|
|
@@ -103,18 +160,35 @@ program
|
|
|
103
160
|
exitWith(1, err.message);
|
|
104
161
|
}
|
|
105
162
|
});
|
|
163
|
+
program
|
|
164
|
+
.command('upload-asset')
|
|
165
|
+
.description('Upload a file to your assets bucket; prints the public URL')
|
|
166
|
+
.argument('<file>', 'path to a local file')
|
|
167
|
+
.option('--json', 'output JSON on stdout')
|
|
168
|
+
.action(async (file, opts) => {
|
|
169
|
+
try {
|
|
170
|
+
await runUploadAsset({ file, json: !!opts.json });
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
exitWith(1, err.message);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
106
176
|
program
|
|
107
177
|
.command('create-node')
|
|
108
178
|
.description('Generate an HTML node from a prompt')
|
|
109
|
-
.
|
|
179
|
+
.option('-p, --prompt <text>', 'prompt describing the node (required unless --prompt-file or stdin)')
|
|
180
|
+
.option('-f, --prompt-file <path>', 'read the prompt from a file (handy for long prompts)')
|
|
110
181
|
.option('-c, --canvas <id-or-name>', 'target canvas (UUID or exact name)')
|
|
182
|
+
.option('-a, --asset <file>', 'attach a local asset (uploads first, then references it in the prompt) — repeatable', (val, prev = []) => [...prev, val], [])
|
|
111
183
|
.option('-o, --output <file>', 'write generated HTML to a file')
|
|
112
184
|
.option('--json', 'output JSON on stdout')
|
|
113
185
|
.action(async (opts) => {
|
|
114
186
|
try {
|
|
115
187
|
await runCreateNode({
|
|
116
188
|
prompt: opts.prompt,
|
|
189
|
+
promptFile: opts.promptFile,
|
|
117
190
|
canvas: opts.canvas,
|
|
191
|
+
asset: opts.asset,
|
|
118
192
|
output: opts.output,
|
|
119
193
|
json: !!opts.json,
|
|
120
194
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,kCAAkC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/E,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,2BAA2B,CAAC;KACxC,cAAc,CAAC,mBAAmB,EAAE,aAAa,CAAC;KAClD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,2FAA2F,CAAC;KACxG,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;KACjD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;IAC7B,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,oFAAoF,CAAC;KACjG,MAAM,CAAC,2BAA2B,EAAE,oCAAoC,CAAC;KACzE,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,iDAAiD,CAAC,CAAC;AACxG,MAAM;KACH,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,sDAAsD,CAAC;KACnE,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAC;KACrD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC1B,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AACL,MAAM;KACH,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,oBAAoB,CAAC;KACjC,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAC;KACrD,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;KACnC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IACjC,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AACL,MAAM;KACH,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uBAAuB,CAAC;KACpC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;KAC/B,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC1B,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4EAA4E,CAAC;KACzF,MAAM,CAAC,oBAAoB,EAAE,iCAAiC,CAAC;KAC/D,MAAM,CAAC,cAAc,EAAE,oCAAoC,CAAC;KAC5D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,4DAA4D,CAAC;KACzE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;KAC1C,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC3B,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,qBAAqB,EAAE,qEAAqE,CAAC;KACpG,MAAM,CAAC,0BAA0B,EAAE,sDAAsD,CAAC;KAC1F,MAAM,CAAC,2BAA2B,EAAE,oCAAoC,CAAC;KACzE,MAAM,CAAC,oBAAoB,EAAE,qFAAqF,EAAE,CAAC,GAAW,EAAE,OAAiB,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;KAC7K,MAAM,CAAC,qBAAqB,EAAE,gCAAgC,CAAC;KAC/D,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,aAAa,CAAC;YAClB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,CAAC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import { basename, extname } from 'node:path';
|
|
3
|
+
import { authenticatedClient } from './session.js';
|
|
4
|
+
import { FUNCTIONS_BASE, SUPABASE_ANON_KEY } from './config.js';
|
|
5
|
+
const MIME_BY_EXT = {
|
|
6
|
+
png: 'image/png',
|
|
7
|
+
jpg: 'image/jpeg',
|
|
8
|
+
jpeg: 'image/jpeg',
|
|
9
|
+
webp: 'image/webp',
|
|
10
|
+
gif: 'image/gif',
|
|
11
|
+
svg: 'image/svg+xml',
|
|
12
|
+
pdf: 'application/pdf',
|
|
13
|
+
txt: 'text/plain',
|
|
14
|
+
md: 'text/markdown',
|
|
15
|
+
csv: 'text/csv',
|
|
16
|
+
json: 'application/json',
|
|
17
|
+
html: 'text/html',
|
|
18
|
+
htm: 'text/html',
|
|
19
|
+
mp3: 'audio/mpeg',
|
|
20
|
+
wav: 'audio/wav',
|
|
21
|
+
mp4: 'video/mp4',
|
|
22
|
+
mov: 'video/quicktime',
|
|
23
|
+
webm: 'video/webm',
|
|
24
|
+
};
|
|
25
|
+
function detectMime(path) {
|
|
26
|
+
const ext = extname(path).slice(1).toLowerCase();
|
|
27
|
+
return MIME_BY_EXT[ext] ?? 'application/octet-stream';
|
|
28
|
+
}
|
|
29
|
+
export async function uploadAsset(filePath) {
|
|
30
|
+
const auth = await authenticatedClient();
|
|
31
|
+
if (!auth)
|
|
32
|
+
throw new Error('Not authenticated. Run `aigma login` first.');
|
|
33
|
+
const buf = await fs.readFile(filePath);
|
|
34
|
+
const filename = basename(filePath);
|
|
35
|
+
const content_type = detectMime(filePath);
|
|
36
|
+
const data_base64 = buf.toString('base64');
|
|
37
|
+
const res = await fetch(`${FUNCTIONS_BASE}/cli-upload-asset`, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
headers: {
|
|
40
|
+
'Content-Type': 'application/json',
|
|
41
|
+
Authorization: `Bearer ${auth.accessToken}`,
|
|
42
|
+
apikey: SUPABASE_ANON_KEY,
|
|
43
|
+
},
|
|
44
|
+
body: JSON.stringify({ filename, content_type, data_base64 }),
|
|
45
|
+
});
|
|
46
|
+
let payload;
|
|
47
|
+
try {
|
|
48
|
+
payload = await res.json();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
throw new Error(`Server returned non-JSON (status ${res.status})`);
|
|
52
|
+
}
|
|
53
|
+
if (!res.ok || payload.error) {
|
|
54
|
+
const detail = payload.detail ? `: ${payload.detail}` : '';
|
|
55
|
+
throw new Error(`${payload.error ?? 'Upload failed'}${detail}`);
|
|
56
|
+
}
|
|
57
|
+
return payload;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,GAA2B;IAC1C,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,eAAe;IACnB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,iBAAiB;IACtB,IAAI,EAAE,YAAY;CACnB,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,0BAA0B,CAAC;AACxD,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAE1E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE3C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,cAAc,mBAAmB,EAAE;QAC5D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,IAAI,CAAC,WAAW,EAAE;YAC3C,MAAM,EAAE,iBAAiB;SAC1B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;KAC9D,CAAC,CAAC;IAEH,IAAI,OAAY,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,GAAG,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,OAAwB,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
const CONFIG_DIR = join(homedir(), '.aigma');
|
|
5
|
+
const CONFIG_PATH = join(CONFIG_DIR, 'config.json');
|
|
6
|
+
const VALID_KEYS = ['default-canvas'];
|
|
7
|
+
export function isValidKey(key) {
|
|
8
|
+
return VALID_KEYS.includes(key);
|
|
9
|
+
}
|
|
10
|
+
export function listKeys() {
|
|
11
|
+
return VALID_KEYS;
|
|
12
|
+
}
|
|
13
|
+
function keyToField(key) {
|
|
14
|
+
return key.replace(/-/g, '_');
|
|
15
|
+
}
|
|
16
|
+
export async function readConfig() {
|
|
17
|
+
try {
|
|
18
|
+
const raw = await fs.readFile(CONFIG_PATH, 'utf8');
|
|
19
|
+
return JSON.parse(raw);
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
if (err.code === 'ENOENT')
|
|
23
|
+
return {};
|
|
24
|
+
throw err;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function writeConfig(cfg) {
|
|
28
|
+
await fs.mkdir(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
29
|
+
await fs.writeFile(CONFIG_PATH, JSON.stringify(cfg, null, 2), { mode: 0o600 });
|
|
30
|
+
}
|
|
31
|
+
export async function getConfigValue(key) {
|
|
32
|
+
const cfg = await readConfig();
|
|
33
|
+
return cfg[keyToField(key)];
|
|
34
|
+
}
|
|
35
|
+
export async function setConfigValue(key, value) {
|
|
36
|
+
const cfg = await readConfig();
|
|
37
|
+
cfg[keyToField(key)] = value;
|
|
38
|
+
await writeConfig(cfg);
|
|
39
|
+
}
|
|
40
|
+
export async function unsetConfigValue(key) {
|
|
41
|
+
const cfg = await readConfig();
|
|
42
|
+
delete cfg[keyToField(key)];
|
|
43
|
+
await writeConfig(cfg);
|
|
44
|
+
}
|
|
45
|
+
export async function getDefaultCanvas() {
|
|
46
|
+
return getConfigValue('default-canvas');
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=user-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-config.js","sourceRoot":"","sources":["../../src/lib/user-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAMpD,MAAM,UAAU,GAAG,CAAC,gBAAgB,CAAU,CAAC;AAG/C,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAQ,UAAgC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,UAAU,CAAC,GAAc;IAChC,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAqB,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;IACvC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACrC,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAe;IACxC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAc;IACjD,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAc,EAAE,KAAa;IAChE,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAC7B,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAc;IACnD,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAC1C,CAAC"}
|