@bitmagic/cli 0.1.68-dev.3 → 0.1.68-dev.5
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 +7 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/event.d.ts +4 -0
- package/dist/commands/event.js +264 -0
- package/dist/commands/event.js.map +1 -0
- package/dist/event/budget.d.ts +10 -0
- package/dist/event/budget.js +47 -0
- package/dist/event/budget.js.map +1 -0
- package/dist/event/codex-home.d.ts +18 -0
- package/dist/event/codex-home.js +90 -0
- package/dist/event/codex-home.js.map +1 -0
- package/dist/event/launch.d.ts +75 -0
- package/dist/event/launch.js +188 -0
- package/dist/event/launch.js.map +1 -0
- package/dist/event/preflight.d.ts +10 -0
- package/dist/event/preflight.js +104 -0
- package/dist/event/preflight.js.map +1 -0
- package/dist/event/resolve-agent.d.ts +8 -0
- package/dist/event/resolve-agent.js +68 -0
- package/dist/event/resolve-agent.js.map +1 -0
- package/dist/event/store.d.ts +13 -0
- package/dist/event/store.js +86 -0
- package/dist/event/store.js.map +1 -0
- package/dist/project/reference.d.ts +6 -29
- package/dist/project/reference.js +3 -25
- package/dist/project/reference.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -218,6 +218,7 @@ browser reloads itself on every change and the assets panel shows each generatio
|
|
|
218
218
|
| `bitmagic forge --prompt "..." [--city\|--dungeon\|--platformer\|--freeform] [--name <name>] [--resume <jobId>]` | Design and bake a whole playable level into `world.json`. Costs sparks, and takes many minutes — the bake alone can take twenty. `--resume <jobId>` picks a failed run back up from the last step that finished, rather than redoing the whole thing. |
|
|
219
219
|
| `bitmagic forge --edit "..." [--level <id or name>]` | Change a detail of a level this project forged — a door style, the light fixtures, a prop — without re-forging it. The stored design is patched and only what the change touches is re-made; the level is replaced in place. See [Editing a forged level](#editing-a-forged-level). |
|
|
220
220
|
| `bitmagic tools <list\|path\|install> [bundle]` | The script bundles the CLI ships for skills that drive Blender, Python or Node (`blender-level`, `unity-import`, `metahuman`): what they are, where this install keeps them, and `install` to copy one into the project's `tools/`. Local, no network, no sparks. |
|
|
221
|
+
| `bitmagic event <setup\|claude\|codex\|status\|env\|clear> ...` | **Sponsored events only.** `setup --key sk-…` stores the API key from your event card and checks it works; `claude` / `codex` start that agent pointed at the event endpoint; `status` shows what is left of your budget. Nothing you own is modified: Claude Code is configured purely through the environment of the process it starts, and Codex gets a separate profile of ours (your `~/.codex/config.toml` is untouched and still applies when you run `codex` yourself). `clear` removes both. `env` prints the variables for wiring an agent up by hand, in your shell's syntax (`--shell posix\|powershell\|cmd`). Plain `claude` keeps using your own account — the event endpoint is only used when you start the agent through `bitmagic event`. Works on macOS, Linux and native Windows; participants who have no Node or agent at all are set up in one command by the bootstrap at `portal/public/event/install.sh` (`install.ps1` on Windows). |
|
|
221
222
|
| `bitmagic levels <list\|add\|rename\|set-start\|remove> ...` | Manage the levels `forge` creates: which one boots, their names, registering a bake you already have, deleting one. Local, no network, no sparks. See **Managing levels** below. |
|
|
222
223
|
|
|
223
224
|
Every command exits non-zero on failure with a single-line message (no stack trace) and, where a
|
|
@@ -597,6 +598,12 @@ accepted reference. The same flag is on the four image generators, `cover`, and
|
|
|
597
598
|
game's look outright, accept it directly: `bitmagic reference accept ./that-photo.jpg`.
|
|
598
599
|
|
|
599
600
|
Candidates cost sparks like any image generation; `accept`, `show` and `clear` are free.
|
|
601
|
+
|
|
602
|
+
The Creator web app has the same feature (the **Reference** button beside its prompt box) and its
|
|
603
|
+
AI reads the same accepted URL — from the game's `game.json` (`referenceImage`) rather than
|
|
604
|
+
`.bitmagic/reference.json`, so a `bitmagic reference accept` is not seen by the Creator, nor the
|
|
605
|
+
Creator's accept by the CLI. Candidates are per lane too: the CLI's under `.bitmagic/reference/`,
|
|
606
|
+
the Creator's on the server.
|
|
600
607
|
`.bitmagic/` is not committed, so paste the accepted URL into `GAME-DESIGN.md` — on a fresh clone,
|
|
601
608
|
`bitmagic reference accept <url>` re-accepts the same image from that line.
|
|
602
609
|
|
package/dist/cli.d.ts
CHANGED
|
@@ -306,6 +306,7 @@ declare const rawCommands: {
|
|
|
306
306
|
readonly description: "Serve --mobile over http instead of a self-signed certificate (no WebGPU on the device).";
|
|
307
307
|
};
|
|
308
308
|
}>;
|
|
309
|
+
event: CommandDef<ArgsDef>;
|
|
309
310
|
reload: CommandDef<{
|
|
310
311
|
readonly 'original-prompt': {
|
|
311
312
|
readonly type: "string";
|
package/dist/cli.js
CHANGED
|
@@ -18,6 +18,7 @@ import { upgradeCommand } from './commands/upgrade.js';
|
|
|
18
18
|
import { selfUpdateCommand } from './commands/self-update.js';
|
|
19
19
|
import { checkCommand } from './commands/check.js';
|
|
20
20
|
import { devCommand } from './commands/dev.js';
|
|
21
|
+
import { eventCommand } from './commands/event.js';
|
|
21
22
|
import { reloadCommand } from './commands/reload.js';
|
|
22
23
|
import { verifyCommand } from './commands/verify.js';
|
|
23
24
|
import { buildCommand } from './commands/build.js';
|
|
@@ -211,6 +212,7 @@ const rawCommands = {
|
|
|
211
212
|
'self-update': selfUpdateCommand,
|
|
212
213
|
check: checkCommand,
|
|
213
214
|
dev: devCommand,
|
|
215
|
+
event: eventCommand,
|
|
214
216
|
reload: reloadCommand,
|
|
215
217
|
verify: verifyCommand,
|
|
216
218
|
build: buildCommand,
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAA0B,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAsB,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,6FAA6F;AAC7F,2FAA2F;AAC3F,+FAA+F;AAC/F,gGAAgG;AAChG,8FAA8F;AAC9F,4EAA4E;AAE5E,gGAAgG;AAChG,+FAA+F;AAC/F,iFAAiF;AACjF,MAAM,WAAW,GAAG,IAAI,OAAO,EAAU,CAAC;AAE1C;;;;;GAKG;AACH,SAAS,aAAa,CACpB,OAAsB;IAEtB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACxD,OAAO,IAA2C,CAAC;AACrD,CAAC;AAeD,MAAM,WAAW,GAAmB;IAClC,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,kBAAkB;IAC1B,eAAe,EAAE,qBAAqB;IACtC,GAAG,EAAE,IAAI,CAAC,GAAG;CACd,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,SAAS,iBAAiB,CACxB,OAAsB,EACtB,IAAyC,EACzC,IAAY;IAEZ,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IACjE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAoB,OAAsB;IAC9D,6FAA6F;IAC7F,8FAA8F;IAC9F,MAAM,IAAI,GAAY,OAAO,CAAC,IAAI,CAAC;IACnC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,IAAI,GAAI,IAA2B,CAAC,IAAI,CAAC;IAC/C,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAsB,EACtB,OAAe,aAAa,CAAC,OAAO,CAAC,EACrC,OAAuB,WAAW;IAElC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAChC,MAAM,OAAO,GAAkB,EAAE,GAAG,OAAO,EAAE,CAAC;IAE9C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;YACzC,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACpE,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;YAClF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,uFAAuF;YACvF,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACtE,sFAAsF;YACtF,sEAAsE;YACtE,EAAE;YACF,yFAAyF;YACzF,wFAAwF;YACxF,uFAAuF;YACvF,0BAA0B;YAC1B,uFAAuF;YACvF,wFAAwF;YACxF,qFAAqF;YACrF,qFAAqF;YACrF,mDAAmD;YACnD,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAoD,EAAE,EAAE;gBAC9E,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;gBACtG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/B,CAAC,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC1C,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7B,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;oBAC9B,kFAAkF;oBAClF,uFAAuF;oBACvF,uFAAuF;oBACvF,yDAAyD;oBACzD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC7B,IAAI,IAAI,EAAE,CAAC;wBACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC9E,CAAC;oBACD,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;oBAC5F,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC/B,CAAC;gBACD,uFAAuF;gBACvF,yFAAyF;gBACzF,yCAAyC;gBACzC,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC1E,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QACF,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,8FAA8F;IAC9F,+FAA+F;IAC/F,+FAA+F;IAC/F,8FAA8F;IAC9F,yFAAyF;IACzF,iFAAiF;IACjF,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CACtC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAC1G,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAA4B;IACnE,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;AACvE,CAAC;AAED,4FAA4F;AAC5F,+FAA+F;AAC/F,+DAA+D;AAC/D,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,aAAa;IACrB,eAAe,EAAE,mBAAmB;IACpC,MAAM,EAAE,aAAa;IACrB,SAAS,EAAE,gBAAgB;IAC3B,KAAK,EAAE,YAAY;IACnB,SAAS,EAAE,gBAAgB;IAC3B,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,aAAa;IACrB,0FAA0F;IAC1F,+FAA+F;IAC/F,2DAA2D;IAC3D,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,cAAc;IACvB,aAAa,EAAE,iBAAiB;IAChC,KAAK,EAAE,YAAY;IACnB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,YAAY;IACnB,QAAQ,EAAE,eAAe;IACzB,SAAS,EAAE,gBAAgB;IAC3B,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,gBAAgB;IAC3B,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,cAAc;IACvB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,YAAY;CACpB,CAAC;AAIF,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAC1C,MAAM,CAAC,OAAO,CAAC,WAAW,CAA+C,CAAC,GAAG,CAC5E,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAC5D,CAC0C,CAAC;AAE9C,iGAAiG;AACjG,8FAA8F;AAC9F,uFAAuF;AACvF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;IAChC,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,gDAAgD;KAC9D;IACD,WAAW;CACZ,CAAC,CAAC;AAEH,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;GAKG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,OAAgB;IACjD,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;QACjD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/D,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChG,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,OAAiB,EAAE,OAAgB;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC,CAAC;QACjD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;gBAAE,CAAC,EAAE,CAAC;YACzD,SAAS;QACX,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,uGAAuG;AACvG,SAAS,cAAc,CACrB,IAAyC,EACzC,IAAY;IAEZ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;QACtC,MAAM,IAAI,GAAY,GAAG,CAAC,IAAI,CAAC;QAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC5D,MAAM,KAAK,GAAI,IAA4B,CAAC,KAAK,CAAC;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAChF,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4FAA4F;AAC5F,SAAS,aAAa,CAAC,IAAyC;IAC9D,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE;QAClB,MAAM,IAAI,GAAY,GAAG,CAAC,IAAI,CAAC;QAC/B,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAK,IAA6B,CAAC,MAAM,KAAK,IAAI,CAAC;IACrG,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAiB,EACjB,OAA4B,IAA2B;IAEvD,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,SAAS,GAAG,OAAO,CAAC;IACxB,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAE1B,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtE,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAY,CAAC,CAAC;QAC1E,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAE9B,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAW,CAAC;QACxC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,OAAO,CACL,oBAAoB,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI;gBAC3E,cAAc,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;gBACjD,qBAAqB,MAAM,IAAI,IAAI,2CAA2C;gBAC9E,4DAA4D,CAC7D,CAAC;QACJ,CAAC;QAED,OAAO,GAAG,KAAK,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `bitmagic event` — the sponsored-event lane.
|
|
3
|
+
*
|
|
4
|
+
* bitmagic event setup --key sk-… store the key, prove it works, report the budget
|
|
5
|
+
* bitmagic event claude [args…] launch Claude Code against the event proxy
|
|
6
|
+
* bitmagic event codex [args…] launch Codex against the event proxy
|
|
7
|
+
* bitmagic event status spend and remaining budget
|
|
8
|
+
* bitmagic event env the exports, for wiring it up by hand
|
|
9
|
+
* bitmagic event clear forget the key
|
|
10
|
+
*
|
|
11
|
+
* This exists because the manual setup — six exports in the right terminal, plus a hand-edited
|
|
12
|
+
* ~/.codex/config.toml — is the biggest source of "it doesn't work" across a room of fifty
|
|
13
|
+
* people, and its failures are quiet: exports run in a different tab than the agent, or only the
|
|
14
|
+
* first two of six lines copied.
|
|
15
|
+
*
|
|
16
|
+
* Neither launcher touches configuration the participant owns. Claude Code is configured purely
|
|
17
|
+
* through the environment (event/launch.ts); Codex gets an isolated CODEX_HOME we generate and
|
|
18
|
+
* own (event/codex-home.ts), because its built-in apps otherwise contribute tool names longer
|
|
19
|
+
* than Bedrock accepts. Both are removed by `bitmagic event clear`, so nothing of ours outlives
|
|
20
|
+
* the event — which matters, because the keys stop working when the proxy is torn down.
|
|
21
|
+
*
|
|
22
|
+
* Event-scoped on purpose: the endpoint is the event proxy, and this command is expected to be
|
|
23
|
+
* deleted along with it. No general model-provider concept enters the shipped CLI.
|
|
24
|
+
*/
|
|
25
|
+
import { defineCommand } from 'citty';
|
|
26
|
+
import { spawn } from 'node:child_process';
|
|
27
|
+
import { CliError, errnoCode } from '../errors.js';
|
|
28
|
+
import { createOutput } from '../output.js';
|
|
29
|
+
import { binInvocation } from '../project/spawn-bin.js';
|
|
30
|
+
import { fetchBudget, usd } from '../event/budget.js';
|
|
31
|
+
import { CODEX_KEY_ENV, defaultEnvShell, exportLines, launchSpec, } from '../event/launch.js';
|
|
32
|
+
import { codexHomePath, ensureCodexHome, removeCodexHome } from '../event/codex-home.js';
|
|
33
|
+
import { preflight } from '../event/preflight.js';
|
|
34
|
+
import { resolveAgentBinary } from '../event/resolve-agent.js';
|
|
35
|
+
import { clearEventKey, eventKeyPath, readEventKey, writeEventKey } from '../event/store.js';
|
|
36
|
+
/** The event proxy. Hard-coded because this command is scoped to one event. */
|
|
37
|
+
const EVENT_PROXY_URL = 'https://event-proxy.bitmagic.ai';
|
|
38
|
+
const JSON_ARG = {
|
|
39
|
+
json: { type: 'boolean', description: 'Print the result as JSON on stdout; all progress goes to stderr.' },
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* How to install a missing agent.
|
|
43
|
+
*
|
|
44
|
+
* The vendors' own installers, not `npm install -g`, for two reasons. They need no Node, so they
|
|
45
|
+
* work for the participant who has nothing — which is exactly the participant reading this message.
|
|
46
|
+
* And on Windows they write a real `.exe` rather than the `.cmd` batch shim npm produces, which is
|
|
47
|
+
* the launch path that actually works (event/resolve-agent.ts).
|
|
48
|
+
*/
|
|
49
|
+
const INSTALL_HINT = {
|
|
50
|
+
claude: {
|
|
51
|
+
posix: 'curl -fsSL https://claude.ai/install.sh | bash',
|
|
52
|
+
windows: 'irm https://claude.ai/install.ps1 | iex',
|
|
53
|
+
},
|
|
54
|
+
codex: {
|
|
55
|
+
posix: 'curl -fsSL https://chatgpt.com/codex/install.sh | sh',
|
|
56
|
+
windows: 'irm https://chatgpt.com/codex/install.ps1 | iex',
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
export function installHint(agent, platform = process.platform) {
|
|
60
|
+
return platform === 'win32' ? INSTALL_HINT[agent].windows : INSTALL_HINT[agent].posix;
|
|
61
|
+
}
|
|
62
|
+
function agentMissing(agent, bin) {
|
|
63
|
+
return new CliError(`${bin} is not installed, or not on your PATH.\nInstall it with: ${installHint(agent)}`, 1, 'event_agent_missing');
|
|
64
|
+
}
|
|
65
|
+
function requireKey() {
|
|
66
|
+
const stored = readEventKey();
|
|
67
|
+
if (stored === null) {
|
|
68
|
+
throw new CliError('No event key stored yet.\nRun: bitmagic event setup --key sk-… (the key is on your card)', 1, 'event_key_missing');
|
|
69
|
+
}
|
|
70
|
+
return { key: stored.key, baseUrl: stored.baseUrl };
|
|
71
|
+
}
|
|
72
|
+
/** Spend line shared by `setup` and `status`, so both phrase the budget the same way. */
|
|
73
|
+
function budgetLine(spend, maxBudget) {
|
|
74
|
+
if (maxBudget === undefined)
|
|
75
|
+
return `Spent ${usd(spend)}.`;
|
|
76
|
+
const remaining = Math.max(0, maxBudget - spend);
|
|
77
|
+
return `Spent ${usd(spend)} of ${usd(maxBudget)} — ${usd(remaining)} left.`;
|
|
78
|
+
}
|
|
79
|
+
const setupCommand = defineCommand({
|
|
80
|
+
meta: { name: 'setup', description: 'Store your event API key and check it works.' },
|
|
81
|
+
args: {
|
|
82
|
+
...JSON_ARG,
|
|
83
|
+
key: { type: 'string', description: 'The sk-… key from your event card.', required: true },
|
|
84
|
+
},
|
|
85
|
+
async run({ args }) {
|
|
86
|
+
const output = createOutput(args.json === true);
|
|
87
|
+
const key = String(args.key).trim();
|
|
88
|
+
if (!key.startsWith('sk-')) {
|
|
89
|
+
throw new CliError('That does not look like an event key — it should start with "sk-".', 1, 'event_key_malformed');
|
|
90
|
+
}
|
|
91
|
+
output.info('Checking the key against the event proxy…');
|
|
92
|
+
const check = await preflight(key, EVENT_PROXY_URL);
|
|
93
|
+
writeEventKey({ baseUrl: EVENT_PROXY_URL, key, savedAt: Date.now() });
|
|
94
|
+
const budget = await fetchBudget(key, EVENT_PROXY_URL);
|
|
95
|
+
// The 0600/0700 modes store.ts sets are a no-op on Windows, where `chmod` only toggles the
|
|
96
|
+
// read-only bit — so the promise is not made on the platform that cannot keep it.
|
|
97
|
+
const privacy = process.platform === 'win32' ? '' : ' (readable only by you)';
|
|
98
|
+
output.info(`Key stored in ${eventKeyPath()}${privacy}.`);
|
|
99
|
+
output.info(budgetLine(budget.spend, budget.maxBudget));
|
|
100
|
+
output.info('');
|
|
101
|
+
output.info('Start your agent with:');
|
|
102
|
+
output.info(' bitmagic event claude (or: bitmagic event codex)');
|
|
103
|
+
output.info('');
|
|
104
|
+
output.info('Both run against the event proxy. Codex uses a separate Codex profile for the');
|
|
105
|
+
output.info('event, so your own ~/.codex settings are untouched and still apply elsewhere.');
|
|
106
|
+
output.result({
|
|
107
|
+
ok: true,
|
|
108
|
+
servedModel: check.servedModel,
|
|
109
|
+
spend: budget.spend,
|
|
110
|
+
maxBudget: budget.maxBudget,
|
|
111
|
+
keyPath: eventKeyPath(),
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
const statusCommand = defineCommand({
|
|
116
|
+
meta: { name: 'status', description: 'Show how much of your event budget is left.' },
|
|
117
|
+
args: JSON_ARG,
|
|
118
|
+
async run({ args }) {
|
|
119
|
+
const output = createOutput(args.json === true);
|
|
120
|
+
const { key, baseUrl } = requireKey();
|
|
121
|
+
const budget = await fetchBudget(key, baseUrl);
|
|
122
|
+
output.info(budgetLine(budget.spend, budget.maxBudget));
|
|
123
|
+
if (budget.expires !== undefined)
|
|
124
|
+
output.info(`Key expires: ${budget.expires}`);
|
|
125
|
+
output.result({
|
|
126
|
+
spend: budget.spend,
|
|
127
|
+
maxBudget: budget.maxBudget,
|
|
128
|
+
remaining: budget.maxBudget === undefined ? undefined : Math.max(0, budget.maxBudget - budget.spend),
|
|
129
|
+
expires: budget.expires,
|
|
130
|
+
alias: budget.alias,
|
|
131
|
+
});
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
const ENV_SHELLS = ['posix', 'powershell', 'cmd'];
|
|
135
|
+
const envCommand = defineCommand({
|
|
136
|
+
meta: { name: 'env', description: 'Print the environment variables, for setting up an agent by hand.' },
|
|
137
|
+
args: {
|
|
138
|
+
...JSON_ARG,
|
|
139
|
+
shell: {
|
|
140
|
+
type: 'string',
|
|
141
|
+
description: `Which shell to print for: ${ENV_SHELLS.join(', ')}. Defaults to this machine's.`,
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
run({ args }) {
|
|
145
|
+
const output = createOutput(args.json === true);
|
|
146
|
+
const { key, baseUrl } = requireKey();
|
|
147
|
+
const requested = args.shell === undefined ? defaultEnvShell() : String(args.shell);
|
|
148
|
+
if (!ENV_SHELLS.includes(requested)) {
|
|
149
|
+
throw new CliError(`Unknown --shell "${requested}". Expected one of: ${ENV_SHELLS.join(', ')}.`, 1, 'event_env_shell');
|
|
150
|
+
}
|
|
151
|
+
const lines = exportLines(key, baseUrl, requested);
|
|
152
|
+
// Deliberately stdout even in human mode: this output is meant to be piped or eval'd.
|
|
153
|
+
for (const line of lines)
|
|
154
|
+
console.log(line);
|
|
155
|
+
output.result({ exports: lines });
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
const clearCommand = defineCommand({
|
|
159
|
+
meta: { name: 'clear', description: 'Forget the stored event key.' },
|
|
160
|
+
args: JSON_ARG,
|
|
161
|
+
run({ args }) {
|
|
162
|
+
const output = createOutput(args.json === true);
|
|
163
|
+
const removed = clearEventKey();
|
|
164
|
+
const codexRemoved = removeCodexHome();
|
|
165
|
+
output.info(removed ? `Removed ${eventKeyPath()}.` : 'No event key was stored.');
|
|
166
|
+
if (codexRemoved)
|
|
167
|
+
output.info(`Removed ${codexHomePath()}.`);
|
|
168
|
+
output.result({ removed, codexHomeRemoved: codexRemoved });
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
/**
|
|
172
|
+
* Spawns the agent with the event environment and exits with its code.
|
|
173
|
+
*
|
|
174
|
+
* stdio is inherited so the agent owns the terminal exactly as if it had been started directly —
|
|
175
|
+
* the point of this command is that everything after it feels normal.
|
|
176
|
+
*/
|
|
177
|
+
async function runAgent(agent, passthrough, skipCheck) {
|
|
178
|
+
const { key, baseUrl } = requireKey();
|
|
179
|
+
if (!skipCheck) {
|
|
180
|
+
// Before handing the terminal over: a broken key or a degraded proxy is far cheaper to learn
|
|
181
|
+
// about here than as a wall of agent errors thirty seconds in.
|
|
182
|
+
await preflight(key, baseUrl, agent);
|
|
183
|
+
}
|
|
184
|
+
// Codex runs against a Codex home we own, rewritten here so it can never be stale. Claude
|
|
185
|
+
// Code needs no equivalent: its whole configuration is the environment.
|
|
186
|
+
const codexHome = agent === 'codex' ? ensureCodexHome(baseUrl) : codexHomePath();
|
|
187
|
+
const spec = launchSpec(agent, key, baseUrl, codexHome, passthrough);
|
|
188
|
+
// Resolve the name to a file before spawning, because on Windows `spawn('claude')` finds nothing
|
|
189
|
+
// whatever is installed — PATHEXT is not consulted. Refusing here, with the install line, beats
|
|
190
|
+
// the same discovery arriving as an errno the participant has to interpret.
|
|
191
|
+
const resolved = resolveAgentBinary(spec.bin, spec.env);
|
|
192
|
+
if (resolved === null)
|
|
193
|
+
throw agentMissing(agent, spec.bin);
|
|
194
|
+
// `binInvocation` adds `shell: true` for a `.cmd`/`.bat` shim, which cannot run without it, and
|
|
195
|
+
// leaves a real `.exe` alone — no cmd.exe wrapped around an interactive terminal UI.
|
|
196
|
+
const invocation = binInvocation(resolved, spec.argv);
|
|
197
|
+
return new Promise((_resolve, reject) => {
|
|
198
|
+
const child = spawn(invocation.command, invocation.args, {
|
|
199
|
+
stdio: 'inherit',
|
|
200
|
+
env: spec.env,
|
|
201
|
+
shell: invocation.shell,
|
|
202
|
+
});
|
|
203
|
+
child.on('error', (error) => {
|
|
204
|
+
// EINVAL is what Node throws for a batch file spawned without a shell (CVE-2024-27980), and
|
|
205
|
+
// ENOENT is the pre-fix form of the same thing. Both mean "could not be launched", and
|
|
206
|
+
// neither should be reported as a mystery.
|
|
207
|
+
const code = errnoCode(error);
|
|
208
|
+
if (code === 'ENOENT' || code === 'EINVAL') {
|
|
209
|
+
reject(agentMissing(agent, spec.bin));
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
reject(new CliError(`Could not start ${spec.bin}: ${error instanceof Error ? error.message : String(error)}`));
|
|
213
|
+
});
|
|
214
|
+
// The agent's exit code is the command's exit code; a signal is reported as the conventional
|
|
215
|
+
// 128+n so a Ctrl-C inside the agent does not look like a clean exit.
|
|
216
|
+
child.on('close', (code, signal) => {
|
|
217
|
+
process.exit(signal !== null ? 128 : (code ?? 0));
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
const AGENT_ARGS = {
|
|
222
|
+
'skip-check': {
|
|
223
|
+
type: 'boolean',
|
|
224
|
+
description: 'Skip the proxy check before starting (use only if the check is being a nuisance).',
|
|
225
|
+
},
|
|
226
|
+
_: { type: 'positional', required: false, description: 'Arguments passed through to the agent.' },
|
|
227
|
+
};
|
|
228
|
+
const claudeCommand = defineCommand({
|
|
229
|
+
meta: { name: 'claude', description: 'Start Claude Code using your event key.' },
|
|
230
|
+
args: AGENT_ARGS,
|
|
231
|
+
async run({ args, rawArgs }) {
|
|
232
|
+
await runAgent('claude', passthroughArgs(rawArgs), args['skip-check'] === true);
|
|
233
|
+
},
|
|
234
|
+
});
|
|
235
|
+
const codexCommand = defineCommand({
|
|
236
|
+
meta: { name: 'codex', description: 'Start Codex using your event key.' },
|
|
237
|
+
args: AGENT_ARGS,
|
|
238
|
+
async run({ args, rawArgs }) {
|
|
239
|
+
await runAgent('codex', passthroughArgs(rawArgs), args['skip-check'] === true);
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
/**
|
|
243
|
+
* Everything the participant typed after the subcommand, minus our own flags, handed to the
|
|
244
|
+
* agent untouched — so `bitmagic event claude --resume` behaves like `claude --resume`.
|
|
245
|
+
*/
|
|
246
|
+
function passthroughArgs(rawArgs) {
|
|
247
|
+
return rawArgs.filter((arg) => arg !== '--skip-check');
|
|
248
|
+
}
|
|
249
|
+
export const eventCommand = defineCommand({
|
|
250
|
+
meta: {
|
|
251
|
+
name: 'event',
|
|
252
|
+
description: 'Sponsored-event lane: store your event key and start your agent with it.',
|
|
253
|
+
},
|
|
254
|
+
subCommands: {
|
|
255
|
+
setup: setupCommand,
|
|
256
|
+
claude: claudeCommand,
|
|
257
|
+
codex: codexCommand,
|
|
258
|
+
status: statusCommand,
|
|
259
|
+
env: envCommand,
|
|
260
|
+
clear: clearCommand,
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
export { CODEX_KEY_ENV };
|
|
264
|
+
//# sourceMappingURL=event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/commands/event.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface EventBudget {
|
|
2
|
+
alias: string | undefined;
|
|
3
|
+
spend: number;
|
|
4
|
+
maxBudget: number | undefined;
|
|
5
|
+
/** ISO timestamp at which the key stops working, when the key carries one. */
|
|
6
|
+
expires: string | undefined;
|
|
7
|
+
}
|
|
8
|
+
export declare function fetchBudget(key: string, baseUrl: string): Promise<EventBudget>;
|
|
9
|
+
/** `$12.34` — the one place the CLI formats event dollars, so every surface agrees. */
|
|
10
|
+
export declare function usd(value: number): string;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a participant's own key can tell them about their budget.
|
|
3
|
+
*
|
|
4
|
+
* A LiteLLM key may read its own `/key/info` — verified against the live event proxy — so the
|
|
5
|
+
* CLI can show spend and remaining budget without the master key ever leaving the organisers'
|
|
6
|
+
* hands. That matters: the master key mints keys, and nothing that ships to a laptop may hold it.
|
|
7
|
+
*/
|
|
8
|
+
import { CliError } from '../errors.js';
|
|
9
|
+
import { anthropicBaseUrl } from './launch.js';
|
|
10
|
+
function isRecord(value) {
|
|
11
|
+
return typeof value === 'object' && value !== null;
|
|
12
|
+
}
|
|
13
|
+
function optionalNumber(value) {
|
|
14
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
15
|
+
}
|
|
16
|
+
function optionalString(value) {
|
|
17
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
18
|
+
}
|
|
19
|
+
export async function fetchBudget(key, baseUrl) {
|
|
20
|
+
let response;
|
|
21
|
+
try {
|
|
22
|
+
response = await fetch(`${anthropicBaseUrl(baseUrl)}/key/info`, {
|
|
23
|
+
headers: { Authorization: `Bearer ${key}` },
|
|
24
|
+
signal: AbortSignal.timeout(15_000),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
throw new CliError(`Cannot reach the event proxy: ${error instanceof Error ? error.message : String(error)}`, 1, 'event_proxy_unreachable');
|
|
29
|
+
}
|
|
30
|
+
if (!response.ok) {
|
|
31
|
+
throw new CliError(`The event proxy returned HTTP ${response.status} for /key/info.`, 1, 'event_proxy_error');
|
|
32
|
+
}
|
|
33
|
+
const body = await response.json();
|
|
34
|
+
// The payload is either the info object itself or wrapped in `info`, depending on version.
|
|
35
|
+
const info = isRecord(body) && isRecord(body.info) ? body.info : isRecord(body) ? body : {};
|
|
36
|
+
return {
|
|
37
|
+
alias: optionalString(info.key_alias),
|
|
38
|
+
spend: optionalNumber(info.spend) ?? 0,
|
|
39
|
+
maxBudget: optionalNumber(info.max_budget),
|
|
40
|
+
expires: optionalString(info.expires),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** `$12.34` — the one place the CLI formats event dollars, so every surface agrees. */
|
|
44
|
+
export function usd(value) {
|
|
45
|
+
return `$${value.toFixed(2)}`;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/event/budget.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAU/C,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,OAAe;IAC5D,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE;YAC9D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE;YAC3C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAChB,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACzF,CAAC,EACD,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAAC,iCAAiC,QAAQ,CAAC,MAAM,iBAAiB,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAChH,CAAC;IAED,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC5C,2FAA2F;IAC3F,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5F,OAAO;QACL,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACrC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACtC,SAAS,EAAE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1C,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,GAAG,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare function codexHomePath(baseDir?: string): string;
|
|
2
|
+
/** The whole config, generated from the endpoint. No merge, no parse — we own every line. */
|
|
3
|
+
export declare function renderCodexConfig(baseUrl: string): string;
|
|
4
|
+
/**
|
|
5
|
+
* Writes the config and returns the directory to use as CODEX_HOME.
|
|
6
|
+
*
|
|
7
|
+
* Rewritten every launch rather than only when missing: the endpoint could change between event
|
|
8
|
+
* days, and a stale file would point at a proxy that no longer answers while looking fine.
|
|
9
|
+
*/
|
|
10
|
+
export declare function ensureCodexHome(baseUrl: string, baseDir?: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Removed by `bitmagic event clear`, so nothing of ours outlives the event.
|
|
13
|
+
*
|
|
14
|
+
* A failure here is reported as a CliError rather than thrown raw: on Windows a Codex still holding
|
|
15
|
+
* the directory open makes `rmSync` throw EBUSY/EPERM, and `clear` is the command someone runs when
|
|
16
|
+
* things have already gone wrong. It must not add a stack trace to their day.
|
|
17
|
+
*/
|
|
18
|
+
export declare function removeCodexHome(baseDir?: string): boolean;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Codex home of our own, for the duration of the event.
|
|
3
|
+
*
|
|
4
|
+
* Codex is not configured with `-c` overrides here, the way cli/lab/drivers/codex.ts does it,
|
|
5
|
+
* because overrides layer ON TOP of the participant's `~/.codex/config.toml` and cannot remove
|
|
6
|
+
* what is already there. Two things in a real installation then break the event lane:
|
|
7
|
+
*
|
|
8
|
+
* - Codex's built-in apps contribute tool names like
|
|
9
|
+
* `mcp__codex_apps__codex_document_control___execute_document_command`, and **Bedrock
|
|
10
|
+
* rejects any tool name over 64 characters**. Every request 400s with a validation error
|
|
11
|
+
* naming four tools. Observed on a stock install; `-c mcp_servers={}` does not clear them,
|
|
12
|
+
* because apps are a separate subsystem from `mcp_servers`.
|
|
13
|
+
* - Any MCP server the participant has configured is dragged into the event's budget, and may
|
|
14
|
+
* hit the same limit.
|
|
15
|
+
*
|
|
16
|
+
* Pointing `CODEX_HOME` at a directory we own makes the lane deterministic: the same clean
|
|
17
|
+
* environment on every laptop, whatever the participant has installed. This is the isolation the
|
|
18
|
+
* original Codex spike used, which is why the spike never saw the tool-name failure.
|
|
19
|
+
*
|
|
20
|
+
* Note this DOES write a TOML file — but one we generate whole and own outright, in our own
|
|
21
|
+
* directory. That is a different act from merging into the participant's `~/.codex/config.toml`,
|
|
22
|
+
* which would need a TOML parser the repo does not have and would outlive the event.
|
|
23
|
+
*
|
|
24
|
+
* The participant's own Codex settings, MCP servers and login do not apply inside the event lane.
|
|
25
|
+
* For a sponsored event that is the intent, not a limitation.
|
|
26
|
+
*/
|
|
27
|
+
import * as fs from 'fs';
|
|
28
|
+
import * as path from 'path';
|
|
29
|
+
import { CliError } from '../errors.js';
|
|
30
|
+
import { CODEX_KEY_ENV, CODEX_MODEL, openAiBaseUrl } from './launch.js';
|
|
31
|
+
import { defaultBaseDir } from './store.js';
|
|
32
|
+
const DIR_MODE = 0o700;
|
|
33
|
+
export function codexHomePath(baseDir = defaultBaseDir()) {
|
|
34
|
+
return path.join(baseDir, 'codex-event');
|
|
35
|
+
}
|
|
36
|
+
/** The whole config, generated from the endpoint. No merge, no parse — we own every line. */
|
|
37
|
+
export function renderCodexConfig(baseUrl) {
|
|
38
|
+
return `# Generated by \`bitmagic event\`. Rewritten on every launch — edits here are lost.
|
|
39
|
+
# This is a Codex home owned by Bitmagic for the duration of the event; your own
|
|
40
|
+
# ~/.codex/config.toml is untouched and still applies when you run codex directly.
|
|
41
|
+
model = "${CODEX_MODEL}"
|
|
42
|
+
model_provider = "bitmagic"
|
|
43
|
+
|
|
44
|
+
[model_providers.bitmagic]
|
|
45
|
+
name = "bitmagic event proxy"
|
|
46
|
+
base_url = "${openAiBaseUrl(baseUrl)}"
|
|
47
|
+
env_key = "${CODEX_KEY_ENV}"
|
|
48
|
+
wire_api = "responses"
|
|
49
|
+
request_max_retries = 2
|
|
50
|
+
`;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Writes the config and returns the directory to use as CODEX_HOME.
|
|
54
|
+
*
|
|
55
|
+
* Rewritten every launch rather than only when missing: the endpoint could change between event
|
|
56
|
+
* days, and a stale file would point at a proxy that no longer answers while looking fine.
|
|
57
|
+
*/
|
|
58
|
+
export function ensureCodexHome(baseUrl, baseDir = defaultBaseDir()) {
|
|
59
|
+
const home = codexHomePath(baseDir);
|
|
60
|
+
try {
|
|
61
|
+
fs.mkdirSync(home, { recursive: true, mode: DIR_MODE });
|
|
62
|
+
fs.writeFileSync(path.join(home, 'config.toml'), renderCodexConfig(baseUrl), 'utf-8');
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
throw new CliError(`Could not prepare the Codex configuration at ${home}: ${error instanceof Error ? error.message : String(error)}`, 1, 'event_codex_home_failed');
|
|
66
|
+
}
|
|
67
|
+
return home;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Removed by `bitmagic event clear`, so nothing of ours outlives the event.
|
|
71
|
+
*
|
|
72
|
+
* A failure here is reported as a CliError rather than thrown raw: on Windows a Codex still holding
|
|
73
|
+
* the directory open makes `rmSync` throw EBUSY/EPERM, and `clear` is the command someone runs when
|
|
74
|
+
* things have already gone wrong. It must not add a stack trace to their day.
|
|
75
|
+
*/
|
|
76
|
+
export function removeCodexHome(baseDir = defaultBaseDir()) {
|
|
77
|
+
const home = codexHomePath(baseDir);
|
|
78
|
+
if (!fs.existsSync(home))
|
|
79
|
+
return false;
|
|
80
|
+
try {
|
|
81
|
+
fs.rmSync(home, { recursive: true, force: true });
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
throw new CliError(`Could not remove the event Codex configuration at ${home}: ` +
|
|
85
|
+
`${error instanceof Error ? error.message : String(error)}\n` +
|
|
86
|
+
'Close any running Codex and try again, or delete that directory yourself.', 1, 'event_codex_home_remove_failed');
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=codex-home.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-home.js","sourceRoot":"","sources":["../../src/event/codex-home.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC;AAEvB,MAAM,UAAU,aAAa,CAAC,UAAkB,cAAc,EAAE;IAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAC3C,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO;;;WAGE,WAAW;;;;;cAKR,aAAa,CAAC,OAAO,CAAC;aACvB,aAAa;;;CAGzB,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,UAAkB,cAAc,EAAE;IACjF,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACxF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAChB,gDAAgD,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACjH,CAAC,EACD,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,cAAc,EAAE;IAChE,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAChB,qDAAqD,IAAI,IAAI;YAC3D,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;YAC7D,2EAA2E,EAC7E,CAAC,EACD,gCAAgC,CACjC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|