makefx 0.1.0 → 0.1.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.
- package/README.md +120 -128
- package/{dist/cli/makefx.mjs → makefx.mjs} +58 -3
- package/package.json +13 -99
package/README.md
CHANGED
|
@@ -1,62 +1,34 @@
|
|
|
1
|
-
#
|
|
1
|
+
# makefx
|
|
2
2
|
|
|
3
|
-
Make Effects
|
|
4
|
-
|
|
5
|
-
track, and hand off production assets across images, audio, and video.
|
|
3
|
+
Command-line interface for [Make Effects](https://makefx.app), an AI media
|
|
4
|
+
production workspace for game assets, production references, and handoff files.
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
local
|
|
10
|
-
|
|
11
|
-
results, curate variants, and export production handoff data.
|
|
6
|
+
`makefx` lets local developers, scripts, and coding agents create and manage
|
|
7
|
+
website-backed assets from the terminal: generate images, audio, and video;
|
|
8
|
+
upload local media; inspect variants; download outputs; watch real-time space
|
|
9
|
+
events; and export production records.
|
|
12
10
|
|
|
13
|
-
##
|
|
14
|
-
|
|
15
|
-
- Generate images, audio, and video through website-backed jobs.
|
|
16
|
-
- Track every result as an asset variant with prompt, provider metadata, and
|
|
17
|
-
lineage.
|
|
18
|
-
- Refine an existing variant or derive new assets from references.
|
|
19
|
-
- Upload local media into a collaborative space so generated and hand-made
|
|
20
|
-
assets live together.
|
|
21
|
-
- Let automation agents use the CLI as a stable control surface instead of
|
|
22
|
-
touching database or storage internals.
|
|
23
|
-
- Export production records for downstream render, game, or editorial tools.
|
|
24
|
-
|
|
25
|
-
## Features
|
|
26
|
-
|
|
27
|
-
- **Authentication**: Google OAuth with JWT tokens, OIDC-compliant
|
|
28
|
-
- **Dual-Worker Architecture**: Separate workers for HTTP/frontend and media generation
|
|
29
|
-
- **React 19 Frontend**: Vite, TanStack Router, Zustand, CSS Modules
|
|
30
|
-
- **D1 Database**: SQLite with migrations and Kysely query builder
|
|
31
|
-
- **R2 Media Storage**: Durable media artifacts for generated and uploaded files
|
|
32
|
-
- **Dependency Injection**: InversifyJS for clean architecture
|
|
33
|
-
- **Make Effects CLI**: Command-line access through the `makefx` package and command
|
|
34
|
-
- **TypeScript**: End-to-end type safety
|
|
35
|
-
|
|
36
|
-
## CLI Quick Start
|
|
37
|
-
|
|
38
|
-
Install the CLI from npm:
|
|
11
|
+
## Install
|
|
39
12
|
|
|
40
13
|
```bash
|
|
41
14
|
npm install -g makefx
|
|
15
|
+
makefx --version
|
|
42
16
|
```
|
|
43
17
|
|
|
44
|
-
|
|
18
|
+
Requirements:
|
|
45
19
|
|
|
46
|
-
|
|
47
|
-
makefx
|
|
48
|
-
|
|
20
|
+
- Node.js 20 or newer
|
|
21
|
+
- A Make Effects account at https://makefx.app
|
|
22
|
+
|
|
23
|
+
The npm package installs a bundled executable and does not declare runtime
|
|
24
|
+
dependencies.
|
|
49
25
|
|
|
50
|
-
|
|
26
|
+
## Quick Start
|
|
51
27
|
|
|
52
28
|
```bash
|
|
29
|
+
makefx login
|
|
53
30
|
makefx spaces create "My Game Assets" --init
|
|
54
|
-
makefx init --space YOUR_SPACE_ID
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Generate media and download completed outputs:
|
|
58
31
|
|
|
59
|
-
```bash
|
|
60
32
|
makefx generate "A cozy pixel-art market background" \
|
|
61
33
|
--name "Market Background" \
|
|
62
34
|
--type scene \
|
|
@@ -73,113 +45,133 @@ makefx video generate "A looping idle animation for a tiny robot" \
|
|
|
73
45
|
-o video/robot-idle.mp4
|
|
74
46
|
```
|
|
75
47
|
|
|
76
|
-
|
|
48
|
+
## Authentication
|
|
77
49
|
|
|
78
50
|
```bash
|
|
79
|
-
makefx
|
|
80
|
-
makefx
|
|
81
|
-
makefx assets download VARIANT_ID -o references/variant.png
|
|
82
|
-
makefx listen --space YOUR_SPACE_ID
|
|
83
|
-
makefx rotation --variant VARIANT_ID --config 8-directional
|
|
84
|
-
makefx tileset "cohesive grass, path, and stone terrain tiles" --type terrain --grid 3x3
|
|
51
|
+
makefx login
|
|
52
|
+
makefx logout
|
|
85
53
|
```
|
|
86
54
|
|
|
87
|
-
|
|
55
|
+
`login` opens a browser-based sign-in flow and stores CLI credentials in the
|
|
56
|
+
user config directory. Credentials are separate from project bindings and are
|
|
57
|
+
not written into your repository.
|
|
58
|
+
|
|
59
|
+
## Project Binding
|
|
60
|
+
|
|
61
|
+
Bind the current directory to a Make Effects space:
|
|
88
62
|
|
|
89
63
|
```bash
|
|
90
|
-
makefx
|
|
91
|
-
makefx runs show --latest --debug --json
|
|
64
|
+
makefx init --space YOUR_SPACE_ID
|
|
92
65
|
```
|
|
93
66
|
|
|
67
|
+
This writes `.inventory/config.json` with the target environment and space ID.
|
|
68
|
+
It does not store assets, prompts, media files, provider keys, or auth tokens.
|
|
69
|
+
Inside an initialized project, commands can omit `--space` and `--env`.
|
|
70
|
+
|
|
94
71
|
The CLI defaults to production at `https://makefx.app`. Use `--env stage` for
|
|
95
|
-
staging or `--local` for a local development server.
|
|
96
|
-
|
|
97
|
-
## CLI Commands
|
|
98
|
-
|
|
99
|
-
| Command | Description |
|
|
100
|
-
|---------|-------------|
|
|
101
|
-
| `makefx login` | Authenticate with makefx.app |
|
|
102
|
-
| `makefx spaces` | List, view, or create collaborative spaces |
|
|
103
|
-
| `makefx init` | Bind the current directory to a website space |
|
|
104
|
-
| `makefx generate` | Generate a new image asset |
|
|
105
|
-
| `makefx refine` | Refine an existing image variant |
|
|
106
|
-
| `makefx derive` | Create a new image asset from variant IDs or local refs |
|
|
107
|
-
| `makefx batch` | Generate multiple images and write a debug run manifest |
|
|
108
|
-
| `makefx audio` | Generate speech, dialogue, music, or sound effects |
|
|
109
|
-
| `makefx video` | Generate, refine, or derive video assets |
|
|
110
|
-
| `makefx upload` | Upload local image, audio, or video files |
|
|
111
|
-
| `makefx assets` | List, show, download, rename, delete, and set active assets |
|
|
112
|
-
| `makefx variants` | Retry, star, rate, or delete variants |
|
|
113
|
-
| `makefx rotation` | Generate and monitor rotation views from a completed image variant |
|
|
114
|
-
| `makefx tileset` | Generate and monitor consistent tile sets |
|
|
115
|
-
| `makefx listen` | Stream real-time space events |
|
|
116
|
-
| `makefx productions` | Place, list, and export production records |
|
|
117
|
-
| `makefx runs` | Inspect debug-only local generation manifests |
|
|
118
|
-
|
|
119
|
-
See [docs/cli.md](./docs/cli.md) and
|
|
120
|
-
[docs/cli-generation.md](./docs/cli-generation.md) for the full command guide.
|
|
121
|
-
|
|
122
|
-
## Local Development
|
|
72
|
+
staging, or `--local` for a local development server.
|
|
123
73
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
74
|
+
## Common Workflows
|
|
75
|
+
|
|
76
|
+
Inspect and download tracked assets:
|
|
127
77
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
78
|
+
```bash
|
|
79
|
+
makefx assets
|
|
80
|
+
makefx assets show ASSET_ID --json
|
|
81
|
+
makefx assets download VARIANT_ID -o references/variant.png
|
|
82
|
+
```
|
|
131
83
|
|
|
132
|
-
|
|
133
|
-
pnpm run db:migrate
|
|
84
|
+
Upload local media:
|
|
134
85
|
|
|
135
|
-
|
|
136
|
-
|
|
86
|
+
```bash
|
|
87
|
+
makefx upload hero.png --name "Hero Character" --type character
|
|
88
|
+
makefx upload theme.mp3 --name "Theme Music" --type audio
|
|
89
|
+
makefx upload cutscene.mp4 --name "Cutscene" --type video
|
|
137
90
|
```
|
|
138
91
|
|
|
139
|
-
|
|
92
|
+
Refine or derive from references:
|
|
140
93
|
|
|
141
|
-
|
|
94
|
+
```bash
|
|
95
|
+
makefx refine --variant VARIANT_ID "make it evening, with warmer lights" \
|
|
96
|
+
-o art/market-evening.png
|
|
142
97
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
| `pnpm run typecheck` | TypeScript type checking |
|
|
151
|
-
| `pnpm run lint` | ESLint |
|
|
152
|
-
| `pnpm run deploy:stage` | Deploy to stage environment |
|
|
153
|
-
| `pnpm run deploy:production` | Deploy to production |
|
|
98
|
+
makefx derive \
|
|
99
|
+
--refs CHARACTER_VARIANT_ID,BACKGROUND_VARIANT_ID \
|
|
100
|
+
--name "Hero In Market" \
|
|
101
|
+
--type scene \
|
|
102
|
+
"Place the hero naturally in the market" \
|
|
103
|
+
-o art/hero-market.png
|
|
104
|
+
```
|
|
154
105
|
|
|
155
|
-
|
|
106
|
+
Create production helpers:
|
|
156
107
|
|
|
108
|
+
```bash
|
|
109
|
+
makefx rotation --variant VARIANT_ID --config 8-directional
|
|
110
|
+
makefx tileset "grass and stone path tiles" --type terrain --grid 3x3
|
|
111
|
+
makefx productions export --production-id trailer-01 -o handoff/scenes.args
|
|
157
112
|
```
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
└── worker/ # Cloudflare Worker entry points
|
|
113
|
+
|
|
114
|
+
Watch real-time space activity:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
makefx listen --space YOUR_SPACE_ID
|
|
118
|
+
makefx listen --space YOUR_SPACE_ID --json
|
|
165
119
|
```
|
|
166
120
|
|
|
167
|
-
##
|
|
121
|
+
## Agent And Script Usage
|
|
168
122
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
- [docs/architecture.md](./docs/architecture.md) - system architecture
|
|
172
|
-
- [PRD.md](./PRD.md) - product requirements and core concepts
|
|
123
|
+
Many commands support `--json` for stable machine-readable output. Use JSON
|
|
124
|
+
outputs for automation instead of parsing human-readable tables.
|
|
173
125
|
|
|
174
|
-
|
|
126
|
+
```bash
|
|
127
|
+
makefx spaces create "Agent Test Space" --init --json
|
|
128
|
+
makefx assets --json
|
|
129
|
+
makefx runs show --latest --debug --json
|
|
130
|
+
```
|
|
175
131
|
|
|
176
|
-
|
|
177
|
-
- **Database**: Cloudflare D1 (SQLite)
|
|
178
|
-
- **Frontend**: React 19, Vite, Zustand
|
|
179
|
-
- **Backend**: Hono, InversifyJS, Kysely
|
|
180
|
-
- **Auth**: Google OAuth, JWT (jose)
|
|
181
|
-
- **Testing**: Node.js test runner
|
|
132
|
+
Debug run manifests are local troubleshooting traces for generation commands:
|
|
182
133
|
|
|
183
|
-
|
|
134
|
+
```bash
|
|
135
|
+
makefx runs --debug
|
|
136
|
+
makefx runs show --latest --debug
|
|
137
|
+
```
|
|
184
138
|
|
|
185
|
-
|
|
139
|
+
The website remains the source of truth for spaces, assets, variants, recipes,
|
|
140
|
+
lineage, and stored media.
|
|
141
|
+
|
|
142
|
+
## Command Groups
|
|
143
|
+
|
|
144
|
+
| Command | Purpose |
|
|
145
|
+
|---------|---------|
|
|
146
|
+
| `login`, `logout` | Manage CLI authentication |
|
|
147
|
+
| `spaces`, `init` | Create spaces and bind local projects |
|
|
148
|
+
| `generate`, `refine`, `derive`, `batch` | Generate image assets |
|
|
149
|
+
| `audio` | Generate speech, dialogue, music, and sound effects |
|
|
150
|
+
| `video` | Generate, refine, and derive video assets |
|
|
151
|
+
| `upload` | Upload local image, audio, or video files |
|
|
152
|
+
| `assets`, `variants` | Inspect, download, curate, retry, or delete outputs |
|
|
153
|
+
| `rotation`, `tileset` | Generate game-ready reference sets |
|
|
154
|
+
| `productions` | Place and export production handoff records |
|
|
155
|
+
| `listen` | Stream real-time space events |
|
|
156
|
+
| `runs` | Inspect local debug manifests |
|
|
157
|
+
| `billing` | Inspect billing sync and operational status |
|
|
158
|
+
|
|
159
|
+
Run `makefx --help` or `makefx help <command>` for command-specific options.
|
|
160
|
+
|
|
161
|
+
## Troubleshooting
|
|
162
|
+
|
|
163
|
+
- If a command says you are not authenticated, run `makefx login`.
|
|
164
|
+
- If a command cannot find a space, run `makefx init --space YOUR_SPACE_ID` or
|
|
165
|
+
pass `--space YOUR_SPACE_ID`.
|
|
166
|
+
- If a generation command times out after creating a variant, resume with
|
|
167
|
+
`--follow VARIANT_ID` and the same output path.
|
|
168
|
+
- If automation needs stable output, add `--json` where supported.
|
|
169
|
+
|
|
170
|
+
## Links
|
|
171
|
+
|
|
172
|
+
- App: https://makefx.app
|
|
173
|
+
- CLI docs: https://makefx.app/docs/cli
|
|
174
|
+
- Media generation guide: https://makefx.app/docs/media-playbooks
|
|
175
|
+
- Source: https://github.com/krasnoperov/inventory
|
|
176
|
+
|
|
177
|
+
Version: 0.1.1
|
|
@@ -488,6 +488,9 @@ async function handleBilling(parsed) {
|
|
|
488
488
|
case "ops-check":
|
|
489
489
|
await handleBillingOpsCheck(env);
|
|
490
490
|
break;
|
|
491
|
+
case "reconcile":
|
|
492
|
+
await handleBillingReconcile(env, parsed);
|
|
493
|
+
break;
|
|
491
494
|
case "retry":
|
|
492
495
|
case "retry-failed":
|
|
493
496
|
await handleBillingRetry(env);
|
|
@@ -510,6 +513,7 @@ Usage:
|
|
|
510
513
|
Subcommands:
|
|
511
514
|
status Show sync status (pending, failed, synced events)
|
|
512
515
|
check Run operational checks for workers, Polar meters, and sync health
|
|
516
|
+
reconcile Compare local billable usage with Polar usage for one user
|
|
513
517
|
retry-failed Reset failed events for retry (next cron will sync them)
|
|
514
518
|
|
|
515
519
|
Options:
|
|
@@ -520,6 +524,7 @@ Examples:
|
|
|
520
524
|
makefx billing status Show production sync status
|
|
521
525
|
makefx billing status --env stage Show stage sync status
|
|
522
526
|
makefx billing check Run production operational checks
|
|
527
|
+
makefx billing reconcile --user-id 42 Reconcile one customer usage period
|
|
523
528
|
makefx billing retry-failed Reset failed events for retry
|
|
524
529
|
|
|
525
530
|
Note: Requires login first. Run 'makefx login' to authenticate.
|
|
@@ -656,15 +661,35 @@ function secondsSummary(seconds) {
|
|
|
656
661
|
}
|
|
657
662
|
async function handleBillingOpsCheck(env) {
|
|
658
663
|
console.log(`Running billing operational checks for ${env}...\n`);
|
|
659
|
-
const
|
|
664
|
+
const workerChecks = await checkWorkerHealth(env);
|
|
660
665
|
console.log("=== Billing Operational Checks ===\n");
|
|
661
666
|
console.log("Workers:");
|
|
662
667
|
for (const check of workerChecks) console.log(` ${statusLabel(check.status)} ${check.name.padEnd(12)} ${check.message}`);
|
|
668
|
+
let billingChecks;
|
|
669
|
+
try {
|
|
670
|
+
billingChecks = await callBillingApi(env, "/api/billing/operational-checks");
|
|
671
|
+
} catch (error) {
|
|
672
|
+
console.log("\nAuthenticated billing checks:");
|
|
673
|
+
console.log(` ${statusLabel("critical")} ${error instanceof Error ? error.message : String(error)}`);
|
|
674
|
+
console.log("\nResult: CRITICAL - billing checks need an authenticated admin session.");
|
|
675
|
+
process$1.exitCode = 1;
|
|
676
|
+
return;
|
|
677
|
+
}
|
|
663
678
|
const meterCheck = billingChecks.checks.polarMeters;
|
|
664
679
|
console.log("\nPolar meters:");
|
|
665
680
|
console.log(` ${statusLabel(meterCheck.status)} configured=${meterCheck.configured} active=${meterCheck.active.length} expected=${meterCheck.expected.length}`);
|
|
666
681
|
if (meterCheck.error) console.log(` Error: ${meterCheck.error}`);
|
|
667
682
|
if (meterCheck.missing.length > 0) console.log(` Missing: ${meterCheck.missing.join(", ")}`);
|
|
683
|
+
if (meterCheck.invalid.length > 0) console.log(` Invalid: ${meterCheck.invalid.map((meter) => meter.name).join(", ")}`);
|
|
684
|
+
const productCheck = billingChecks.checks.paidGenerationProduct;
|
|
685
|
+
if (productCheck) {
|
|
686
|
+
console.log("\nPaid generation product:");
|
|
687
|
+
const product = productCheck.product;
|
|
688
|
+
console.log(` ${statusLabel(productCheck.status)} configured=${product?.configured ?? false} recurring=${product?.isRecurring ?? "n/a"} archived=${product?.isArchived ?? "n/a"}`);
|
|
689
|
+
if (product?.productId) console.log(` Product: ${product.productId}${product.name ? ` (${product.name})` : ""}`);
|
|
690
|
+
console.log(` Metered prices: ${product?.meteredPriceMeters.length ?? 0}/${productCheck.expectedMeteredPriceMeters.length}`);
|
|
691
|
+
if (productCheck.missingMeteredPriceMeters.length > 0) console.log(` Missing metered prices: ${productCheck.missingMeteredPriceMeters.join(", ")}`);
|
|
692
|
+
}
|
|
668
693
|
const syncCheck = billingChecks.checks.syncHealth;
|
|
669
694
|
console.log("\nSync health:");
|
|
670
695
|
console.log(` ${statusLabel(syncCheck.status)} pending=${syncCheck.events.pending} failed=${syncCheck.events.failed} synced=${syncCheck.events.synced}`);
|
|
@@ -677,11 +702,38 @@ async function handleBillingOpsCheck(env) {
|
|
|
677
702
|
const hasCriticalBilling = billingChecks.status === "critical";
|
|
678
703
|
const hasWarning = workerChecks.some((check) => check.status === "warning") || billingChecks.status === "warning";
|
|
679
704
|
if (hasCriticalWorker || hasCriticalBilling) {
|
|
680
|
-
console.log("\nResult: CRITICAL -
|
|
705
|
+
console.log("\nResult: CRITICAL - billing operations need attention.");
|
|
681
706
|
process$1.exitCode = 1;
|
|
682
707
|
} else if (hasWarning) console.log("\nResult: WARNING - billing is operational but has lag or cleanup work.");
|
|
683
708
|
else console.log("\nResult: OK - billing workers, meters, and sync health are ready.");
|
|
684
709
|
}
|
|
710
|
+
async function handleBillingReconcile(env, parsed) {
|
|
711
|
+
const userId = parsed.options["user-id"] || parsed.options.userId || parsed.positionals[1];
|
|
712
|
+
if (!userId) {
|
|
713
|
+
console.error("Missing user id. Use: makefx billing reconcile --user-id <id>");
|
|
714
|
+
process$1.exitCode = 1;
|
|
715
|
+
return;
|
|
716
|
+
}
|
|
717
|
+
console.log(`Reconciling billing usage for user ${userId} in ${env}...\n`);
|
|
718
|
+
try {
|
|
719
|
+
const data = await callBillingApi(env, `/api/billing/reconcile?user_id=${encodeURIComponent(userId)}`);
|
|
720
|
+
console.log("=== Billing Reconciliation ===\n");
|
|
721
|
+
console.log(`Period: ${data.period.start} → ${data.period.end}`);
|
|
722
|
+
console.log(`Status: ${data.status.toUpperCase()}`);
|
|
723
|
+
console.log("\nMeters:");
|
|
724
|
+
for (const meter of data.meters) {
|
|
725
|
+
const marker = meter.matched ? "OK " : "MISMATCH";
|
|
726
|
+
console.log(` ${marker} ${meter.name.padEnd(22)} local=${meter.local} polar=${meter.polar} delta=${meter.delta}`);
|
|
727
|
+
}
|
|
728
|
+
if (data.mismatches.length > 0) {
|
|
729
|
+
console.log("\nMismatched meters need sync/retry investigation before billing is considered reconciled.");
|
|
730
|
+
process$1.exitCode = 1;
|
|
731
|
+
}
|
|
732
|
+
} catch (error) {
|
|
733
|
+
console.error("Reconciliation failed:", error instanceof Error ? error.message : error);
|
|
734
|
+
process$1.exitCode = 1;
|
|
735
|
+
}
|
|
736
|
+
}
|
|
685
737
|
async function handleBillingRetry(env) {
|
|
686
738
|
console.log(`Resetting failed events for ${env}...\n`);
|
|
687
739
|
try {
|
|
@@ -23513,7 +23565,7 @@ Options:
|
|
|
23513
23565
|
}
|
|
23514
23566
|
//#endregion
|
|
23515
23567
|
//#region src/cli/index.ts
|
|
23516
|
-
var CLI_VERSION = "0.1.
|
|
23568
|
+
var CLI_VERSION = "0.1.1+fe5390f9d193";
|
|
23517
23569
|
async function main() {
|
|
23518
23570
|
const [, , command, ...args] = process$1.argv;
|
|
23519
23571
|
if (command === "--version" || command === "version") {
|
|
@@ -23702,6 +23754,8 @@ Project:
|
|
|
23702
23754
|
Billing (Polar.sh):
|
|
23703
23755
|
billing status Show sync status (pending, failed, synced events)
|
|
23704
23756
|
billing check Run operational checks for workers, meters, and sync health
|
|
23757
|
+
billing reconcile --user-id <id>
|
|
23758
|
+
Compare local billable usage with Polar usage
|
|
23705
23759
|
billing retry-failed Retry all failed events
|
|
23706
23760
|
|
|
23707
23761
|
Spaces:
|
|
@@ -23800,6 +23854,7 @@ Usage:
|
|
|
23800
23854
|
Subcommands:
|
|
23801
23855
|
status Show sync status (pending, failed, synced events)
|
|
23802
23856
|
check Run operational checks for workers, Polar meters, and sync health
|
|
23857
|
+
reconcile Compare local billable usage with Polar usage for one user
|
|
23803
23858
|
retry-failed Reset failed events for retry (next cron will sync them)
|
|
23804
23859
|
|
|
23805
23860
|
Options:
|
package/package.json
CHANGED
|
@@ -1,111 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "makefx",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Command-line interface for AI-assisted game asset production with Make Effects.",
|
|
5
|
+
"license": "MIT",
|
|
5
6
|
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/krasnoperov/inventory.git"
|
|
10
|
+
},
|
|
6
11
|
"bin": {
|
|
7
|
-
"makefx": "
|
|
12
|
+
"makefx": "./makefx.mjs"
|
|
8
13
|
},
|
|
9
14
|
"files": [
|
|
10
|
-
"
|
|
15
|
+
"makefx.mjs",
|
|
11
16
|
"README.md"
|
|
12
17
|
],
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=20"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {},
|
|
13
22
|
"publishConfig": {
|
|
14
23
|
"access": "public"
|
|
15
|
-
},
|
|
16
|
-
"packageManager": "pnpm@11.1.1",
|
|
17
|
-
"scripts": {
|
|
18
|
-
"bootstrap:worktree": "node ./scripts/bootstrap-worktree.mjs",
|
|
19
|
-
"dev": "CLOUDFLARE_VITE_CONFIG_PATH=wrangler.dev.toml vite",
|
|
20
|
-
"build": "vite build && pnpm run package:frontend-start && pnpm run build:cli",
|
|
21
|
-
"package:frontend-start": "node scripts/package-frontend-start.mjs",
|
|
22
|
-
"build:cli": "node scripts/build-cli.mjs",
|
|
23
|
-
"deploy": "pnpm run build && pnpm exec wrangler deploy",
|
|
24
|
-
"deploy:production": "CLOUDFLARE_ENV=production pnpm run build && pnpm exec wrangler deploy --env production",
|
|
25
|
-
"deploy:stage": "pnpm run build && pnpm exec wrangler deploy",
|
|
26
|
-
"test": "node ./scripts/run-node-tests.mjs",
|
|
27
|
-
"test:components": "playwright test --config playwright.component.config.ts",
|
|
28
|
-
"test:components:ci": "node ./scripts/run-component-ci.mjs",
|
|
29
|
-
"test:e2e:media-foundation": "pnpm run build && node scripts/e2e-media-foundation.mjs",
|
|
30
|
-
"test:e2e:cli-forge": "pnpm run build && node scripts/e2e-cli-forge.mjs",
|
|
31
|
-
"auth:session-state": "node scripts/auth/mint-session.mjs",
|
|
32
|
-
"lint": "oxlint --config .oxlintrc.json src scripts && pnpm d1:guard && pnpm lint:tokens",
|
|
33
|
-
"lint:tokens": "pnpm tokens:guard && pnpm tokens:snapshot:check && pnpm tokens:roundtrip",
|
|
34
|
-
"tokens:guard": "node scripts/check-design-tokens.mjs",
|
|
35
|
-
"tokens:snapshot": "node scripts/snapshot-design-tokens.mjs",
|
|
36
|
-
"tokens:snapshot:check": "node scripts/snapshot-design-tokens.mjs --check",
|
|
37
|
-
"tokens:roundtrip": "node scripts/generate-css-from-tokens.mjs --check",
|
|
38
|
-
"d1:guard": "node scripts/check-no-d1-transactions.mjs",
|
|
39
|
-
"typecheck": "tsc --noEmit",
|
|
40
|
-
"ci:pre-push": "pnpm run typecheck && pnpm run lint && pnpm run build && pnpm test --test-reporter=dot && pnpm run test:components:ci",
|
|
41
|
-
"db:migrate": "node --import @swc-node/register/esm-register scripts/db-migrate.ts",
|
|
42
|
-
"db:migrate:stage": "node --import @swc-node/register/esm-register scripts/db-migrate.ts stage remote",
|
|
43
|
-
"db:migrate:production": "node --import @swc-node/register/esm-register scripts/db-migrate.ts production remote",
|
|
44
|
-
"cli": "node dist/cli/makefx.mjs",
|
|
45
|
-
"cli:dev": "node --import @swc-node/register/esm-register src/cli/index.ts",
|
|
46
|
-
"stories": "LADLE=true ladle serve",
|
|
47
|
-
"stories:build": "LADLE=true ladle build",
|
|
48
|
-
"style-reference": "node scripts/export-style-reference.mjs",
|
|
49
|
-
"style-reference:rebuild": "node scripts/export-style-reference.mjs --rebuild"
|
|
50
|
-
},
|
|
51
|
-
"dependencies": {
|
|
52
|
-
"@anthropic-ai/sdk": "^0.71.0",
|
|
53
|
-
"@google/genai": "^1.30.0",
|
|
54
|
-
"@hono/zod-openapi": "^1.4.0",
|
|
55
|
-
"@openai/agents": "^0.3.3",
|
|
56
|
-
"@polar-sh/sdk": "^0.41.5",
|
|
57
|
-
"@react-oauth/google": "^0.12.2",
|
|
58
|
-
"@tanstack/react-query": "^5.90.11",
|
|
59
|
-
"@tanstack/react-router": "^1.170.15",
|
|
60
|
-
"@tanstack/react-start": "^1.168.25",
|
|
61
|
-
"@types/d3-force": "^3.0.10",
|
|
62
|
-
"@types/dagre": "^0.7.53",
|
|
63
|
-
"@xyflow/react": "^12.9.3",
|
|
64
|
-
"better-sqlite3": "^12.4.6",
|
|
65
|
-
"d3-force": "^3.0.0",
|
|
66
|
-
"dagre": "^0.8.5",
|
|
67
|
-
"dotenv": "^17.2.3",
|
|
68
|
-
"fflate": "^0.8.2",
|
|
69
|
-
"hono": "^4.10.6",
|
|
70
|
-
"inversify": "^7.10.4",
|
|
71
|
-
"jose": "^6.1.2",
|
|
72
|
-
"kysely": "^0.28.8",
|
|
73
|
-
"kysely-d1": "^0.4.0",
|
|
74
|
-
"nanoid": "^5.1.11",
|
|
75
|
-
"react": "^19.2.0",
|
|
76
|
-
"react-dom": "^19.2.0",
|
|
77
|
-
"react-markdown": "^10.1.0",
|
|
78
|
-
"reflect-metadata": "^0.2.2",
|
|
79
|
-
"remark-gfm": "^4.0.1",
|
|
80
|
-
"standardwebhooks": "1.0.0",
|
|
81
|
-
"uuid": "^13.0.0",
|
|
82
|
-
"ws": "^8.21.0",
|
|
83
|
-
"zod": "^4.4.3",
|
|
84
|
-
"zustand": "^5.0.8"
|
|
85
|
-
},
|
|
86
|
-
"devDependencies": {
|
|
87
|
-
"@cloudflare/ai": "^1.2.2",
|
|
88
|
-
"@cloudflare/vite-plugin": "^1.39.0",
|
|
89
|
-
"@cloudflare/workers-types": "4.20260317.1",
|
|
90
|
-
"@csstools/postcss-light-dark-function": "^3.0.0",
|
|
91
|
-
"@ladle/react": "^5.1.1",
|
|
92
|
-
"@playwright/test": "^1.59.1",
|
|
93
|
-
"@swc-node/register": "^1.11.1",
|
|
94
|
-
"@tanstack/router-plugin": "^1.168.18",
|
|
95
|
-
"@types/better-sqlite3": "^7.6.13",
|
|
96
|
-
"@types/node": "^24.10.1",
|
|
97
|
-
"@types/react": "^19.2.7",
|
|
98
|
-
"@types/react-dom": "^19.2.3",
|
|
99
|
-
"@types/ws": "^8.18.1",
|
|
100
|
-
"@vitejs/plugin-react": "^5.1.1",
|
|
101
|
-
"express": "^5.1.0",
|
|
102
|
-
"oxlint": "1.67.0",
|
|
103
|
-
"postcss": "^8.5.6",
|
|
104
|
-
"postcss-preset-env": "^10.4.0",
|
|
105
|
-
"prettier": "^3.6.2",
|
|
106
|
-
"rollup-plugin-visualizer": "^6.0.5",
|
|
107
|
-
"typescript": "^5.9.3",
|
|
108
|
-
"vite": "^8.0.14",
|
|
109
|
-
"wrangler": "4.95.0"
|
|
110
24
|
}
|
|
111
25
|
}
|