@cat-factory/cli 0.6.1 → 0.7.0
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 +20 -5
- package/dist/args.d.ts +6 -3
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +25 -0
- package/dist/args.js.map +1 -1
- package/dist/bin.js +5 -0
- package/dist/bin.js.map +1 -1
- package/dist/bootstrap.d.ts +1 -9
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +6 -158
- package/dist/bootstrap.js.map +1 -1
- package/dist/env.d.ts +2 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +9 -1
- package/dist/env.js.map +1 -1
- package/dist/envCommand.d.ts +25 -0
- package/dist/envCommand.d.ts.map +1 -0
- package/dist/envCommand.js +128 -0
- package/dist/envCommand.js.map +1 -0
- package/dist/fs.d.ts +12 -0
- package/dist/fs.d.ts.map +1 -0
- package/dist/fs.js +13 -0
- package/dist/fs.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/plan.d.ts +2 -0
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +3 -1
- package/dist/plan.js.map +1 -1
- package/dist/resolve.d.ts +33 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +153 -0
- package/dist/resolve.js.map +1 -0
- package/dist/secrets.d.ts +10 -5
- package/dist/secrets.d.ts.map +1 -1
- package/dist/secrets.js +2 -1
- package/dist/secrets.js.map +1 -1
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +3 -0
- package/dist/templates.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -10,8 +10,9 @@ the **published** libraries, so the generated project stands alone outside the m
|
|
|
10
10
|
It does the fiddly setup for you:
|
|
11
11
|
|
|
12
12
|
- **Offers to generate the crypto secrets** in the exact formats the server requires —
|
|
13
|
-
`AUTH_SESSION_SECRET` (32 random bytes, hex)
|
|
14
|
-
|
|
13
|
+
`AUTH_SESSION_SECRET` (32 random bytes, hex), `ENCRYPTION_KEY` (32 random bytes, base64) and
|
|
14
|
+
`HARNESS_SHARED_SECRET` (32 random bytes, hex). All three are required to boot. On by default;
|
|
15
|
+
decline to leave them blank and paste your own.
|
|
15
16
|
- **Lets you choose how agents run** — a **prewarmed Docker pool** (isolated per-run containers
|
|
16
17
|
from the executor image, the default) or **native host agents** (a host process driving your
|
|
17
18
|
own installed `claude`/`codex` CLI: no container, no leased credential, but no sandbox and only
|
|
@@ -31,6 +32,20 @@ It does the fiddly setup for you:
|
|
|
31
32
|
secrets, your PAT, the harness image) and `frontend/.env` (`NUXT_PUBLIC_API_BASE`), and writes
|
|
32
33
|
(or merges into) a `.gitignore` so those secret files are never committed.
|
|
33
34
|
|
|
35
|
+
## Commands
|
|
36
|
+
|
|
37
|
+
- **`cat-factory init`** (the default) — scaffolds the whole deployment (`local/` + `frontend/`),
|
|
38
|
+
described above.
|
|
39
|
+
- **`cat-factory env`** — generates **only** a ready-to-run local-mode `.env` in the current
|
|
40
|
+
directory (or `--dir`), using the same secret generation, PAT flow, and pool-vs-native choice.
|
|
41
|
+
Use it when the deployment already exists (e.g. inside [`deploy/local`](../../../deploy/local),
|
|
42
|
+
or an already-scaffolded project) and you just need a fresh, complete `.env`. It refuses to
|
|
43
|
+
overwrite an existing `.env` unless you pass `--force`, and (like `init`) it creates or merges
|
|
44
|
+
the target dir's `.gitignore` so the secret `.env` can never be committed. A model-provider key
|
|
45
|
+
is **not** needed to boot — add providers/keys through the UI after sign-in (the `.env` leaves
|
|
46
|
+
them as commented hints) — so the generated file runs local mode with no manual edits.
|
|
47
|
+
- **`cat-factory k3s`** — guided local Kubernetes setup for ephemeral environments (see `--help`).
|
|
48
|
+
|
|
34
49
|
## Usage
|
|
35
50
|
|
|
36
51
|
No install needed — run it with your package manager's runner:
|
|
@@ -131,9 +146,9 @@ Tester's Docker-in-Docker / ephemeral environments, the warm container pool, etc
|
|
|
131
146
|
commit them. If you scaffold into an existing git repo, the CLI **merges** the required ignore
|
|
132
147
|
rules into your existing `.gitignore` rather than clobbering it.
|
|
133
148
|
- The pasted token is **not echoed** to the terminal.
|
|
134
|
-
- Keep `AUTH_SESSION_SECRET` and `
|
|
135
|
-
forces a re-login, and regenerating the encryption key orphans every
|
|
136
|
-
credential.
|
|
149
|
+
- Keep `AUTH_SESSION_SECRET`, `ENCRYPTION_KEY` and `HARNESS_SHARED_SECRET` **stable**: regenerating
|
|
150
|
+
the session secret forces a re-login, and regenerating the encryption key orphans every
|
|
151
|
+
encrypted-at-rest credential.
|
|
137
152
|
|
|
138
153
|
## Programmatic API
|
|
139
154
|
|
package/dist/args.d.ts
CHANGED
|
@@ -5,8 +5,11 @@ export declare const K3S_RUNTIMES: readonly ['k3d', 'kind', 'k3s'];
|
|
|
5
5
|
export type K3sRuntime = (typeof K3S_RUNTIMES)[number];
|
|
6
6
|
/** Parsed, validated CLI options. Unset optionals are resolved later (defaults / prompts). */
|
|
7
7
|
export interface CliOptions {
|
|
8
|
-
/**
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* The subcommand. `init` (the default when omitted) scaffolds a full project; `env` writes just
|
|
10
|
+
* a ready-to-run local-mode `.env`; `k3s` is the guided local-cluster setup.
|
|
11
|
+
*/
|
|
12
|
+
command: 'init' | 'env' | 'k3s' | 'help' | 'version';
|
|
10
13
|
dir?: string;
|
|
11
14
|
projectName?: string;
|
|
12
15
|
appTitle?: string;
|
|
@@ -55,5 +58,5 @@ export declare const OPTION_DEFAULTS: {
|
|
|
55
58
|
readonly k3sRuntime: K3sRuntime;
|
|
56
59
|
readonly appUrl: 'http://localhost:3000';
|
|
57
60
|
};
|
|
58
|
-
export declare const HELP_TEXT = "cat-factory \u2014 bootstrap a local cat-factory deployment\n\nUsage:\n cat-factory [init] [options]\n cat-factory k3s [options]\n\nCommands:\n init Scaffold a local-mode backend (local/) + frontend SPA (frontend/): generate the\n crypto secrets, mint a GitHub/GitLab PAT (opens your browser), write gitignored .env.\n k3s Guided local Kubernetes setup: probe the host for a usable cluster, then create (or\n reuse) one + a least-privilege ServiceAccount and print the values to wire the\n Local k3s environment handler. A k3s install needs sudo, so it is only ever printed.\n\nOptions (init):\n -d, --dir <path> Target directory (default: ./<name>)\n --name <name> Project name slug (default: cat-factory)\n --title <title> Frontend app title (default: Agent Architecture Board)\n --provider <p> Source control: github | gitlab (default: github)\n --token <token> PAT value (skips the browser/paste flow)\n --db-url <url> Postgres DATABASE_URL\n --api-base <url> Backend API base for the SPA (default: http://localhost:<port>)\n --port <n> Backend HTTP port (default: 8787; also sets the SPA's api-base)\n --harness-image <ref> Executor-harness image (default: ghcr.io ...:latest)\n --container-runtime <r> Agent container runtime: docker | podman | orbstack | colima | apple\n --execution-mode <m> How agents run: pool (Docker container pool) | native (host CLI)\n --native-harnesses <l> Native mode: harnesses to run natively (claude-code,codex)\n --harness-entry <p> Native mode: path to the executor-harness server entry\n --no-open Don't open the browser (just print the token URL)\n -y, --yes Non-interactive: use defaults/flags, never prompt\n -f, --force Overwrite existing files\n -h, --help Show this help\n -v, --version Show the CLI version\n\nOptions (k3s):\n --cluster-name <n> Name for a provisioned local cluster (default: cat-factory)\n --runtime <r> Kubernetes distribution: k3d | kind | k3s (default: k3d)\n --app-url <url> SPA base URL to deep-link for wiring (default: http://localhost:3000)\n --no-open Don't open the browser at the pre-filled connect form (still prints it)\n -y, --yes Non-interactive: pick the recommended path + skip confirms\n\n After provisioning, the values are printed and the SPA's Local k3s connect form is opened\n pre-filled (paste the token, then Test -> Save). A hands-free --register flag that POSTs the\n handler to the local API directly is a planned follow-up.\n";
|
|
61
|
+
export declare const HELP_TEXT = "cat-factory \u2014 bootstrap a local cat-factory deployment\n\nUsage:\n cat-factory [init] [options]\n cat-factory env [options]\n cat-factory k3s [options]\n\nCommands:\n init Scaffold a local-mode backend (local/) + frontend SPA (frontend/): generate the\n crypto secrets, mint a GitHub/GitLab PAT (opens your browser), write gitignored .env.\n env Generate ONLY a ready-to-run local-mode .env in the current dir (or --dir): all three\n crypto secrets, a minted GitHub/GitLab PAT, and the execution mode \u2014 so local mode\n boots with no manual edits. Use it in an existing deployment dir (e.g. deploy/local).\n k3s Guided local Kubernetes setup: probe the host for a usable cluster, then create (or\n reuse) one + a least-privilege ServiceAccount and print the values to wire the\n Local k3s environment handler. A k3s install needs sudo, so it is only ever printed.\n\nOptions (init):\n -d, --dir <path> Target directory (default: ./<name>)\n --name <name> Project name slug (default: cat-factory)\n --title <title> Frontend app title (default: Agent Architecture Board)\n --provider <p> Source control: github | gitlab (default: github)\n --token <token> PAT value (skips the browser/paste flow)\n --db-url <url> Postgres DATABASE_URL\n --api-base <url> Backend API base for the SPA (default: http://localhost:<port>)\n --port <n> Backend HTTP port (default: 8787; also sets the SPA's api-base)\n --harness-image <ref> Executor-harness image (default: ghcr.io ...:latest)\n --container-runtime <r> Agent container runtime: docker | podman | orbstack | colima | apple\n --execution-mode <m> How agents run: pool (Docker container pool) | native (host CLI)\n --native-harnesses <l> Native mode: harnesses to run natively (claude-code,codex)\n --harness-entry <p> Native mode: path to the executor-harness server entry\n --no-open Don't open the browser (just print the token URL)\n -y, --yes Non-interactive: use defaults/flags, never prompt\n -f, --force Overwrite existing files\n -h, --help Show this help\n -v, --version Show the CLI version\n\nOptions (env):\n -d, --dir <path> Directory to write .env into (default: current directory)\n --provider <p> Source control: github | gitlab (default: github)\n --token <token> PAT value (skips the browser/paste flow)\n --db-url <url> Postgres DATABASE_URL\n --port <n> Backend HTTP port (default: 8787)\n --harness-image <ref> Executor-harness image (default: ghcr.io ...:latest)\n --container-runtime <r> Agent container runtime: docker | podman | orbstack | colima | apple\n --execution-mode <m> How agents run: pool (Docker container pool) | native (host CLI)\n --native-harnesses <l> Native mode: harnesses to run natively (claude-code,codex)\n --harness-entry <p> Native mode: path to the executor-harness server entry\n --no-open Don't open the browser (just print the token URL)\n -y, --yes Non-interactive: use defaults/flags, never prompt\n -f, --force Overwrite an existing .env\n\nOptions (k3s):\n --cluster-name <n> Name for a provisioned local cluster (default: cat-factory)\n --runtime <r> Kubernetes distribution: k3d | kind | k3s (default: k3d)\n --app-url <url> SPA base URL to deep-link for wiring (default: http://localhost:3000)\n --no-open Don't open the browser at the pre-filled connect form (still prints it)\n -y, --yes Non-interactive: pick the recommended path + skip confirms\n\n After provisioning, the values are printed and the SPA's Local k3s connect form is opened\n pre-filled (paste the token, then Test -> Save). A hands-free --register flag that POSTs the\n handler to the local API directly is a planned follow-up.\n";
|
|
59
62
|
//# sourceMappingURL=args.d.ts.map
|
package/dist/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAGrB,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAE1D,0EAA0E;AAC1E,eAAO,MAAM,YAAY,YAAI,KAAK,EAAE,MAAM,EAAE,KAAK,CAAU,CAAA;AAC3D,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAEtD,8FAA8F;AAC9F,MAAM,WAAW,UAAU;IACzB
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAGrB,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAE1D,0EAA0E;AAC1E,eAAO,MAAM,YAAY,YAAI,KAAK,EAAE,MAAM,EAAE,KAAK,CAAU,CAAA;AAC3D,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAEtD,8FAA8F;AAC9F,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAA;IACpD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,uFAAuF;IACvF,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,4FAA4F;IAC5F,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,4FAA4F;IAC5F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4EAA4E;IAC5E,MAAM,EAAE,OAAO,CAAA;IACf,+FAA+F;IAC/F,GAAG,EAAE,OAAO,CAAA;IACZ,oDAAoD;IACpD,KAAK,EAAE,OAAO,CAAA;CACf;AAQD,qBAAa,QAAS,SAAQ,KAAK;CAAG;AAEtC,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAkHpD;AAoFD,qEAAqE;AACrE,eAAO,MAAM,eAAe;aAC1B,WAAW,EAAE,aAAa;aAC1B,QAAQ,EAAE,0BAA0B;aACpC,QAAQ,EAAc,WAAW;aACjC,WAAW,EAAE,8CAA8C;aAI3D,IAAI,EAAE,IAAI;aACV,YAAY;aACZ,gBAAgB,EAAc,gBAAgB;aAC9C,aAAa,EAAY,aAAa;aAEtC,cAAc,EAAE,aAAa;aAC7B,UAAU,EAAW,UAAU;aAG/B,MAAM,EAAE,uBAAuB;CACvB,CAAA;AAEV,eAAO,MAAM,SAAS,47HA8DrB,CAAA"}
|
package/dist/args.js
CHANGED
|
@@ -34,6 +34,12 @@ export function parseArgs(argv) {
|
|
|
34
34
|
commandSet = true;
|
|
35
35
|
}
|
|
36
36
|
break;
|
|
37
|
+
case 'env':
|
|
38
|
+
if (!commandSet) {
|
|
39
|
+
opts.command = 'env';
|
|
40
|
+
commandSet = true;
|
|
41
|
+
}
|
|
42
|
+
break;
|
|
37
43
|
case 'k3s':
|
|
38
44
|
if (!commandSet) {
|
|
39
45
|
opts.command = 'k3s';
|
|
@@ -214,11 +220,15 @@ export const HELP_TEXT = `cat-factory — bootstrap a local cat-factory deployme
|
|
|
214
220
|
|
|
215
221
|
Usage:
|
|
216
222
|
cat-factory [init] [options]
|
|
223
|
+
cat-factory env [options]
|
|
217
224
|
cat-factory k3s [options]
|
|
218
225
|
|
|
219
226
|
Commands:
|
|
220
227
|
init Scaffold a local-mode backend (local/) + frontend SPA (frontend/): generate the
|
|
221
228
|
crypto secrets, mint a GitHub/GitLab PAT (opens your browser), write gitignored .env.
|
|
229
|
+
env Generate ONLY a ready-to-run local-mode .env in the current dir (or --dir): all three
|
|
230
|
+
crypto secrets, a minted GitHub/GitLab PAT, and the execution mode — so local mode
|
|
231
|
+
boots with no manual edits. Use it in an existing deployment dir (e.g. deploy/local).
|
|
222
232
|
k3s Guided local Kubernetes setup: probe the host for a usable cluster, then create (or
|
|
223
233
|
reuse) one + a least-privilege ServiceAccount and print the values to wire the
|
|
224
234
|
Local k3s environment handler. A k3s install needs sudo, so it is only ever printed.
|
|
@@ -243,6 +253,21 @@ Options (init):
|
|
|
243
253
|
-h, --help Show this help
|
|
244
254
|
-v, --version Show the CLI version
|
|
245
255
|
|
|
256
|
+
Options (env):
|
|
257
|
+
-d, --dir <path> Directory to write .env into (default: current directory)
|
|
258
|
+
--provider <p> Source control: github | gitlab (default: github)
|
|
259
|
+
--token <token> PAT value (skips the browser/paste flow)
|
|
260
|
+
--db-url <url> Postgres DATABASE_URL
|
|
261
|
+
--port <n> Backend HTTP port (default: 8787)
|
|
262
|
+
--harness-image <ref> Executor-harness image (default: ghcr.io ...:latest)
|
|
263
|
+
--container-runtime <r> Agent container runtime: docker | podman | orbstack | colima | apple
|
|
264
|
+
--execution-mode <m> How agents run: pool (Docker container pool) | native (host CLI)
|
|
265
|
+
--native-harnesses <l> Native mode: harnesses to run natively (claude-code,codex)
|
|
266
|
+
--harness-entry <p> Native mode: path to the executor-harness server entry
|
|
267
|
+
--no-open Don't open the browser (just print the token URL)
|
|
268
|
+
-y, --yes Non-interactive: use defaults/flags, never prompt
|
|
269
|
+
-f, --force Overwrite an existing .env
|
|
270
|
+
|
|
246
271
|
Options (k3s):
|
|
247
272
|
--cluster-name <n> Name for a provisioned local cluster (default: cat-factory)
|
|
248
273
|
--runtime <r> Kubernetes distribution: k3d | kind | k3s (default: k3d)
|
package/dist/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,eAAe,EAEf,gBAAgB,GAEjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,aAAa,EAAoB,MAAM,UAAU,CAAA;AAE1D,0EAA0E;AAC1E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
|
package/dist/bin.js
CHANGED
|
@@ -3,6 +3,7 @@ import { readFileSync } from 'node:fs';
|
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { ArgError, HELP_TEXT, parseArgs } from './args.js';
|
|
5
5
|
import { bootstrap } from './bootstrap.js';
|
|
6
|
+
import { generateEnv } from './envCommand.js';
|
|
6
7
|
import { setupK3s } from './k3s.js';
|
|
7
8
|
function readVersion() {
|
|
8
9
|
try {
|
|
@@ -34,6 +35,10 @@ async function main() {
|
|
|
34
35
|
process.stdout.write(`${readVersion()}\n`);
|
|
35
36
|
return;
|
|
36
37
|
}
|
|
38
|
+
if (options.command === 'env') {
|
|
39
|
+
await generateEnv(options);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
37
42
|
if (options.command === 'k3s') {
|
|
38
43
|
await setupK3s(options);
|
|
39
44
|
return;
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAyB,CAAA;QAC3F,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAA;IAChB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,OAAO,CAAA;IACX,IAAI,CAAC;QACH,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,OAAO,SAAS,EAAE,CAAC,CAAA;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC/B,OAAM;IACR,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,CAAA;QAC1C,OAAM;IACR,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC9B,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;QACvB,OAAM;IACR,CAAC;IAED,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAyB,CAAA;QAC3F,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAA;IAChB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,OAAO,CAAA;IACX,IAAI,CAAC;QACH,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,OAAO,SAAS,EAAE,CAAC,CAAA;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC/B,OAAM;IACR,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,CAAA;QAC1C,OAAM;IACR,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC9B,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;QAC1B,OAAM;IACR,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC9B,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;QACvB,OAAM;IACR,CAAC;IAED,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
package/dist/bootstrap.d.ts
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import { type CliOptions } from './args.js';
|
|
2
|
+
import { type FileSystem } from './fs.js';
|
|
2
3
|
import { type Io } from './io.js';
|
|
3
4
|
import { type RandomBytes } from './secrets.js';
|
|
4
|
-
/** The filesystem operations the writer needs — injectable so the flow is testable. */
|
|
5
|
-
export interface FileSystem {
|
|
6
|
-
existsSync(path: string): boolean;
|
|
7
|
-
mkdirSync(path: string, options: {
|
|
8
|
-
recursive: true;
|
|
9
|
-
}): void;
|
|
10
|
-
readFileSync(path: string, encoding: 'utf8'): string;
|
|
11
|
-
writeFileSync(path: string, data: string): void;
|
|
12
|
-
}
|
|
13
5
|
export interface BootstrapDeps {
|
|
14
6
|
io?: Io;
|
|
15
7
|
fs?: FileSystem;
|
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,WAAW,CAAA;AAE5D,OAAO,EAAE,KAAK,UAAU,EAAU,MAAM,SAAS,CAAA;AACjD,OAAO,EAAmB,KAAK,EAAE,EAAE,MAAM,SAAS,CAAA;AAUlD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAI/C,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,EAAE,CAAA;IACP,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAE5C,wFAAwF;AACxF,wBAAsB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6F9F"}
|
package/dist/bootstrap.js
CHANGED
|
@@ -1,23 +1,13 @@
|
|
|
1
|
-
import * as nodeFs from 'node:fs';
|
|
2
1
|
import { dirname, join, resolve } from 'node:path';
|
|
3
2
|
import { OPTION_DEFAULTS } from './args.js';
|
|
4
|
-
import { ALL_NATIVE_HARNESSES,
|
|
3
|
+
import { ALL_NATIVE_HARNESSES, NATIVE_HARNESS_INFO } from './execution.js';
|
|
4
|
+
import { realFs } from './fs.js';
|
|
5
5
|
import { createConsoleIo } from './io.js';
|
|
6
6
|
import { buildPlan } from './plan.js';
|
|
7
|
-
import {
|
|
7
|
+
import { resolveContainerRuntime, resolveExecution, resolveProvider, resolveSecrets, resolveToken, } from './resolve.js';
|
|
8
|
+
import {} from './secrets.js';
|
|
8
9
|
import { slugifyProjectName } from './slug.js';
|
|
9
|
-
import {
|
|
10
|
-
import { patCreationUrl, providerLabel, VCS_PROVIDERS } from './vcs.js';
|
|
11
|
-
const realFs = {
|
|
12
|
-
existsSync: (p) => nodeFs.existsSync(p),
|
|
13
|
-
mkdirSync: (p, o) => {
|
|
14
|
-
nodeFs.mkdirSync(p, o);
|
|
15
|
-
},
|
|
16
|
-
readFileSync: (p, e) => nodeFs.readFileSync(p, e),
|
|
17
|
-
writeFileSync: (p, d) => {
|
|
18
|
-
nodeFs.writeFileSync(p, d);
|
|
19
|
-
},
|
|
20
|
-
};
|
|
10
|
+
import { providerLabel } from './vcs.js';
|
|
21
11
|
export class BootstrapError extends Error {
|
|
22
12
|
}
|
|
23
13
|
/** Run the interactive (or flag-driven) bootstrap. Returns the absolute project dir. */
|
|
@@ -79,6 +69,7 @@ export async function bootstrap(options, deps = {}) {
|
|
|
79
69
|
harnessEntry: execution.harnessEntry,
|
|
80
70
|
authSessionSecret: secrets.authSessionSecret,
|
|
81
71
|
encryptionKey: secrets.encryptionKey,
|
|
72
|
+
harnessSharedSecret: secrets.harnessSharedSecret,
|
|
82
73
|
existingGitignore,
|
|
83
74
|
});
|
|
84
75
|
writePlan(plan, targetDir, fs, io, options.force);
|
|
@@ -94,149 +85,6 @@ export async function bootstrap(options, deps = {}) {
|
|
|
94
85
|
});
|
|
95
86
|
return targetDir;
|
|
96
87
|
}
|
|
97
|
-
async function resolveProvider(options, io) {
|
|
98
|
-
if (options.provider)
|
|
99
|
-
return options.provider;
|
|
100
|
-
if (options.yes)
|
|
101
|
-
return OPTION_DEFAULTS.provider;
|
|
102
|
-
return io.select('Source control', VCS_PROVIDERS.map((value) => ({ value, label: providerLabel(value) })), OPTION_DEFAULTS.provider);
|
|
103
|
-
}
|
|
104
|
-
async function resolveContainerRuntime(options, io) {
|
|
105
|
-
if (options.containerRuntime)
|
|
106
|
-
return options.containerRuntime;
|
|
107
|
-
if (options.yes)
|
|
108
|
-
return OPTION_DEFAULTS.containerRuntime;
|
|
109
|
-
return io.select('Container runtime that spawns agent jobs', CONTAINER_RUNTIMES.map((value) => ({ value, label: value })), OPTION_DEFAULTS.containerRuntime);
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Resolve how agent jobs execute — a prewarmed Docker pool (default) or native host agents —
|
|
113
|
-
* plus, for native mode, which harnesses run natively and the harness server entry path. In
|
|
114
|
-
* interactive mode the tradeoffs of each mode are printed before the choice, and (native only)
|
|
115
|
-
* the developer can list which models actually run natively before committing.
|
|
116
|
-
*/
|
|
117
|
-
/** Whether any native-only flag (`--native-harnesses` / `--harness-entry`) was supplied. */
|
|
118
|
-
function nativeFlagsProvided(options) {
|
|
119
|
-
return Boolean(options.nativeHarnesses?.length) || options.harnessEntry !== undefined;
|
|
120
|
-
}
|
|
121
|
-
async function resolveExecution(options, io) {
|
|
122
|
-
const mode = await resolveExecutionMode(options, io);
|
|
123
|
-
if (mode !== 'native') {
|
|
124
|
-
// Native-only flags carry no meaning in pool mode; warn rather than silently drop them so a
|
|
125
|
-
// `--execution-mode pool --native-harnesses …` (or the same via prompt) isn't a quiet no-op.
|
|
126
|
-
if (nativeFlagsProvided(options))
|
|
127
|
-
io.warn('Ignoring --native-harnesses / --harness-entry: they only apply to --execution-mode native.');
|
|
128
|
-
return { mode };
|
|
129
|
-
}
|
|
130
|
-
const nativeHarnesses = await resolveNativeHarnesses(options, io);
|
|
131
|
-
if (!options.yes)
|
|
132
|
-
await maybeShowNativeModels(io, nativeHarnesses);
|
|
133
|
-
const harnessEntry = await resolveHarnessEntry(options, io);
|
|
134
|
-
return { mode, nativeHarnesses, harnessEntry };
|
|
135
|
-
}
|
|
136
|
-
async function resolveExecutionMode(options, io) {
|
|
137
|
-
if (options.executionMode)
|
|
138
|
-
return options.executionMode;
|
|
139
|
-
// A native-only flag with no explicit --execution-mode clearly means native: infer it rather
|
|
140
|
-
// than defaulting to pool and dropping the flag on the floor.
|
|
141
|
-
if (nativeFlagsProvided(options)) {
|
|
142
|
-
io.info('Assuming --execution-mode native (a native-only flag was provided).');
|
|
143
|
-
return 'native';
|
|
144
|
-
}
|
|
145
|
-
if (options.yes)
|
|
146
|
-
return OPTION_DEFAULTS.executionMode;
|
|
147
|
-
// Print both modes' tradeoffs so the choice is informed, not a bare two-item menu.
|
|
148
|
-
io.info(['\nHow should agent jobs run locally?', '', ...EXECUTION_MODES.flatMap(tradeoffBlock)].join('\n'));
|
|
149
|
-
return io.select('Execution mode', [
|
|
150
|
-
{ value: 'pool', label: 'Prewarmed Docker pool (recommended)' },
|
|
151
|
-
{ value: 'native', label: 'Native host agents (your own claude/codex CLI)' },
|
|
152
|
-
], OPTION_DEFAULTS.executionMode);
|
|
153
|
-
}
|
|
154
|
-
/** Render one execution mode's tradeoff bullet block for the pre-prompt info. */
|
|
155
|
-
function tradeoffBlock(mode) {
|
|
156
|
-
return [...EXECUTION_MODE_TRADEOFFS[mode], ''];
|
|
157
|
-
}
|
|
158
|
-
async function resolveNativeHarnesses(options, io) {
|
|
159
|
-
if (options.nativeHarnesses?.length)
|
|
160
|
-
return options.nativeHarnesses;
|
|
161
|
-
if (options.yes)
|
|
162
|
-
return [...ALL_NATIVE_HARNESSES];
|
|
163
|
-
const choice = await io.select('Which installed CLI(s) should run agents natively?', [
|
|
164
|
-
{ value: 'both', label: 'Both — Claude Code and Codex' },
|
|
165
|
-
{ value: 'claude-code', label: NATIVE_HARNESS_INFO['claude-code'].label },
|
|
166
|
-
{ value: 'codex', label: NATIVE_HARNESS_INFO.codex.label },
|
|
167
|
-
], 'both');
|
|
168
|
-
return choice === 'both' ? [...ALL_NATIVE_HARNESSES] : [choice];
|
|
169
|
-
}
|
|
170
|
-
/** Offer to list the models that will actually run natively for the chosen harnesses. */
|
|
171
|
-
async function maybeShowNativeModels(io, harnesses) {
|
|
172
|
-
const show = await io.confirm('List the models that will run natively in this mode?', true);
|
|
173
|
-
if (!show)
|
|
174
|
-
return;
|
|
175
|
-
const models = nativeModelsFor(harnesses);
|
|
176
|
-
const lines = [
|
|
177
|
-
'\nModels that run natively (through your ambient CLI):',
|
|
178
|
-
...models.map((m) => ` - ${m.label} [id: ${m.id}] via ${m.harness}`),
|
|
179
|
-
'',
|
|
180
|
-
'Any OTHER model a step selects (Cloudflare, direct keys, or GLM/Kimi/DeepSeek — which',
|
|
181
|
-
'reuse the claude-code harness against their own endpoint) still runs in a container,',
|
|
182
|
-
'so the executor image is still used for those steps.',
|
|
183
|
-
];
|
|
184
|
-
io.info(lines.join('\n'));
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Resolve the executor-harness server entry path for native mode. Optional: when left blank,
|
|
188
|
-
* native mode defaults to the bundled `@cat-factory/executor-harness` (a dependency of
|
|
189
|
-
* `@cat-factory/local-server`), so no configuration is needed. A value is only used to point at
|
|
190
|
-
* a custom or source-checkout build.
|
|
191
|
-
*/
|
|
192
|
-
async function resolveHarnessEntry(options, io) {
|
|
193
|
-
if (options.harnessEntry !== undefined)
|
|
194
|
-
return options.harnessEntry;
|
|
195
|
-
// Non-interactive (--yes): leave it blank; the bundled harness default kicks in at boot.
|
|
196
|
-
if (options.yes)
|
|
197
|
-
return '';
|
|
198
|
-
return (await io.question('Path to a custom executor-harness server entry (LOCAL_HARNESS_ENTRY; blank = bundled default)')).trim();
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Resolve the two mandatory crypto secrets. By default (and always in `--yes` mode) they are
|
|
202
|
-
* generated for the developer in the server's required formats. Interactively the developer can
|
|
203
|
-
* decline (e.g. to paste their own), leaving them blank with a note on how to fill them in.
|
|
204
|
-
*/
|
|
205
|
-
async function resolveSecrets(options, io, randomBytes) {
|
|
206
|
-
const generate = options.yes ||
|
|
207
|
-
(await io.confirm('Generate AUTH_SESSION_SECRET and ENCRYPTION_KEY for you?', true));
|
|
208
|
-
if (!generate) {
|
|
209
|
-
io.warn('Left AUTH_SESSION_SECRET / ENCRYPTION_KEY blank — fill them in before starting ' +
|
|
210
|
-
'(see local/.env.example for the generate commands). Keep both stable once set.');
|
|
211
|
-
return { authSessionSecret: '', encryptionKey: '' };
|
|
212
|
-
}
|
|
213
|
-
const secrets = generateSecrets(randomBytes);
|
|
214
|
-
io.info('\nGenerated AUTH_SESSION_SECRET (hex) and ENCRYPTION_KEY (base64).');
|
|
215
|
-
return secrets;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Resolve the PAT: an explicit `--token` wins; otherwise (interactive only) print the pre-scoped
|
|
219
|
-
* creation URL, open the browser at it, and read the pasted token back. In `--yes` mode with no
|
|
220
|
-
* token, leave it blank (the var is still written, present-but-empty).
|
|
221
|
-
*/
|
|
222
|
-
async function resolveToken(options, provider, io) {
|
|
223
|
-
if (options.token !== undefined)
|
|
224
|
-
return options.token;
|
|
225
|
-
if (options.yes)
|
|
226
|
-
return '';
|
|
227
|
-
const url = patCreationUrl(provider);
|
|
228
|
-
const label = providerLabel(provider);
|
|
229
|
-
io.info(`\nCreate a ${label} personal access token (scopes pre-selected):\n ${url}`);
|
|
230
|
-
if (!options.noOpen) {
|
|
231
|
-
const open = await io.confirm('Open this URL in your browser now?', true);
|
|
232
|
-
if (open)
|
|
233
|
-
await io.openBrowser(url);
|
|
234
|
-
}
|
|
235
|
-
const token = await io.secret(`Paste your ${label} token here (or leave blank to add later)`);
|
|
236
|
-
if (token === '')
|
|
237
|
-
io.warn('No token entered — the var will be written blank; set it before running agents.');
|
|
238
|
-
return token;
|
|
239
|
-
}
|
|
240
88
|
function writePlan(plan, targetDir, fs, io, force) {
|
|
241
89
|
io.info(`\nWriting to ${targetDir}`);
|
|
242
90
|
for (const file of plan) {
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export interface LocalEnvInput {
|
|
|
18
18
|
databaseUrl: string;
|
|
19
19
|
authSessionSecret: string;
|
|
20
20
|
encryptionKey: string;
|
|
21
|
+
/** Shared HMAC secret between the backend and the executor-harness (`HARNESS_SHARED_SECRET`). */
|
|
22
|
+
harnessSharedSecret: string;
|
|
21
23
|
harnessImage: string;
|
|
22
24
|
port: number;
|
|
23
25
|
corsAllowedOrigins: string;
|
package/dist/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAErE,2FAA2F;AAC3F,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAMzD;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,kBAAkB,EAAE,MAAM,CAAA;IAC1B,QAAQ,EAAE,WAAW,CAAA;IACrB,4EAA4E;IAC5E,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,uFAAuF;IACvF,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,6EAA6E;IAC7E,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAErE,2FAA2F;AAC3F,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAMzD;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,iGAAiG;IACjG,mBAAmB,EAAE,MAAM,CAAA;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,kBAAkB,EAAE,MAAM,CAAA;IAC1B,QAAQ,EAAE,WAAW,CAAA;IACrB,4EAA4E;IAC5E,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,uFAAuF;IACvF,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,6EAA6E;IAC7E,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAwF1D;AAqLD,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAWhE"}
|
package/dist/env.js
CHANGED
|
@@ -20,7 +20,7 @@ export function buildLocalEnv(input) {
|
|
|
20
20
|
const entries = [
|
|
21
21
|
{
|
|
22
22
|
comment: [
|
|
23
|
-
'Local-mode backend (@cat-factory/local-server). Generated by
|
|
23
|
+
'Local-mode backend (@cat-factory/local-server). Generated by the cat-factory CLI.',
|
|
24
24
|
'This file is gitignored — it holds secrets. Keep the generated values STABLE.',
|
|
25
25
|
'Postgres connection string (matches the bundled docker-compose.yml).',
|
|
26
26
|
],
|
|
@@ -52,6 +52,14 @@ export function buildLocalEnv(input) {
|
|
|
52
52
|
key: 'ENCRYPTION_KEY',
|
|
53
53
|
value: input.encryptionKey,
|
|
54
54
|
},
|
|
55
|
+
{
|
|
56
|
+
comment: [
|
|
57
|
+
'Shared HMAC secret signing traffic between the backend and the executor-harness',
|
|
58
|
+
'(>= 16 chars). Required to boot; keep it stable.',
|
|
59
|
+
],
|
|
60
|
+
key: 'HARNESS_SHARED_SECRET',
|
|
61
|
+
value: input.harnessSharedSecret,
|
|
62
|
+
},
|
|
55
63
|
{
|
|
56
64
|
comment: [
|
|
57
65
|
`${label} personal access token. Agent containers clone/push/open PRs with it.`,
|
package/dist/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EACL,kBAAkB,EAGlB,gBAAgB,GAEjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAoB,MAAM,UAAU,CAAA;AAUrE;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAmB;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QAChE,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;AACnC,CAAC;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type CliOptions } from './args.js';
|
|
2
|
+
import { type FileSystem } from './fs.js';
|
|
3
|
+
import { type Io } from './io.js';
|
|
4
|
+
import { type RandomBytes } from './secrets.js';
|
|
5
|
+
/** Injectable seams so the whole flow is driveable by fakes in tests. */
|
|
6
|
+
export interface EnvCommandDeps {
|
|
7
|
+
io?: Io;
|
|
8
|
+
fs?: FileSystem;
|
|
9
|
+
cwd?: string;
|
|
10
|
+
randomBytes?: RandomBytes;
|
|
11
|
+
}
|
|
12
|
+
export declare class EnvCommandError extends Error {
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Generate a ready-to-run local-mode `.env` (and nothing else). Unlike `init` (which scaffolds a
|
|
16
|
+
* whole project), this writes ONE `.env` into the target directory (default: the cwd), populated
|
|
17
|
+
* so `@cat-factory/local-server` boots with no manual edits: all three required crypto secrets
|
|
18
|
+
* (`AUTH_SESSION_SECRET`, `ENCRYPTION_KEY`, `HARNESS_SHARED_SECRET`) generated in the server's
|
|
19
|
+
* required formats, the chosen VCS PAT (minted via the pre-scoped browser flow), and the
|
|
20
|
+
* execution mode (prewarmed Docker pool vs native host agents). Model-provider keys are left as
|
|
21
|
+
* commented hints — they are added through the UI after boot, so the file is runnable without
|
|
22
|
+
* them. Returns the absolute path of the written `.env`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function generateEnv(options: CliOptions, deps?: EnvCommandDeps): Promise<string>;
|
|
25
|
+
//# sourceMappingURL=envCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envCommand.d.ts","sourceRoot":"","sources":["../src/envCommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,WAAW,CAAA;AAG5D,OAAO,EAAE,KAAK,UAAU,EAAU,MAAM,SAAS,CAAA;AAEjD,OAAO,EAAmB,KAAK,EAAE,EAAE,MAAM,SAAS,CAAA;AASlD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAG/C,yEAAyE;AACzE,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,EAAE,CAAA;IACP,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,qBAAa,eAAgB,SAAQ,KAAK;CAAG;AAE7C;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+DjG"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { dirname, join, resolve } from 'node:path';
|
|
2
|
+
import { OPTION_DEFAULTS } from './args.js';
|
|
3
|
+
import { buildLocalEnv } from './env.js';
|
|
4
|
+
import { ALL_NATIVE_HARNESSES, NATIVE_HARNESS_INFO } from './execution.js';
|
|
5
|
+
import { realFs } from './fs.js';
|
|
6
|
+
import { buildGitignore, mergeGitignore } from './gitignore.js';
|
|
7
|
+
import { createConsoleIo } from './io.js';
|
|
8
|
+
import { resolveContainerRuntime, resolveExecution, resolveProvider, resolveSecrets, resolveToken, } from './resolve.js';
|
|
9
|
+
import {} from './secrets.js';
|
|
10
|
+
import { patEnvVar, providerLabel } from './vcs.js';
|
|
11
|
+
export class EnvCommandError extends Error {
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate a ready-to-run local-mode `.env` (and nothing else). Unlike `init` (which scaffolds a
|
|
15
|
+
* whole project), this writes ONE `.env` into the target directory (default: the cwd), populated
|
|
16
|
+
* so `@cat-factory/local-server` boots with no manual edits: all three required crypto secrets
|
|
17
|
+
* (`AUTH_SESSION_SECRET`, `ENCRYPTION_KEY`, `HARNESS_SHARED_SECRET`) generated in the server's
|
|
18
|
+
* required formats, the chosen VCS PAT (minted via the pre-scoped browser flow), and the
|
|
19
|
+
* execution mode (prewarmed Docker pool vs native host agents). Model-provider keys are left as
|
|
20
|
+
* commented hints — they are added through the UI after boot, so the file is runnable without
|
|
21
|
+
* them. Returns the absolute path of the written `.env`.
|
|
22
|
+
*/
|
|
23
|
+
export async function generateEnv(options, deps = {}) {
|
|
24
|
+
const io = deps.io ?? createConsoleIo();
|
|
25
|
+
const fs = deps.fs ?? realFs;
|
|
26
|
+
const cwd = deps.cwd ?? process.cwd();
|
|
27
|
+
io.info('\ncat-factory — generate a ready-to-run local-mode .env\n');
|
|
28
|
+
const outDir = resolve(cwd, options.dir ?? '.');
|
|
29
|
+
const envPath = join(outDir, '.env');
|
|
30
|
+
// A `.env` holds secrets — never clobber an existing one silently. Refuse loudly (with the
|
|
31
|
+
// --force escape hatch) rather than overwrite generated secrets a developer is relying on.
|
|
32
|
+
if (fs.existsSync(envPath) && !options.force) {
|
|
33
|
+
throw new EnvCommandError(`${envPath} already exists — pass --force to overwrite it.`);
|
|
34
|
+
}
|
|
35
|
+
const provider = await resolveProvider(options, io);
|
|
36
|
+
const databaseUrl = options.databaseUrl ??
|
|
37
|
+
(options.yes
|
|
38
|
+
? OPTION_DEFAULTS.databaseUrl
|
|
39
|
+
: await io.question('Postgres DATABASE_URL', OPTION_DEFAULTS.databaseUrl));
|
|
40
|
+
const port = options.port ?? OPTION_DEFAULTS.port;
|
|
41
|
+
const harnessImage = options.harnessImage ?? OPTION_DEFAULTS.harnessImage;
|
|
42
|
+
const containerRuntime = await resolveContainerRuntime(options, io);
|
|
43
|
+
const corsAllowedOrigins = 'http://localhost:3000';
|
|
44
|
+
const execution = await resolveExecution(options, io);
|
|
45
|
+
const token = await resolveToken(options, provider, io);
|
|
46
|
+
const secrets = await resolveSecrets(options, io, deps.randomBytes);
|
|
47
|
+
const content = buildLocalEnv({
|
|
48
|
+
databaseUrl,
|
|
49
|
+
authSessionSecret: secrets.authSessionSecret,
|
|
50
|
+
encryptionKey: secrets.encryptionKey,
|
|
51
|
+
harnessSharedSecret: secrets.harnessSharedSecret,
|
|
52
|
+
harnessImage,
|
|
53
|
+
port,
|
|
54
|
+
corsAllowedOrigins,
|
|
55
|
+
provider,
|
|
56
|
+
containerRuntime,
|
|
57
|
+
executionMode: execution.mode,
|
|
58
|
+
nativeHarnesses: execution.nativeHarnesses,
|
|
59
|
+
harnessEntry: execution.harnessEntry,
|
|
60
|
+
token,
|
|
61
|
+
});
|
|
62
|
+
fs.mkdirSync(dirname(envPath), { recursive: true });
|
|
63
|
+
fs.writeFileSync(envPath, content);
|
|
64
|
+
io.info(`\nWrote ${envPath} (secret — gitignore it, never commit it)`);
|
|
65
|
+
// A `.env` written into a bare dir is only safe if something ignores it. Rather than rely on a
|
|
66
|
+
// printed reminder (or a parent `.gitignore` that may not exist), guarantee it the same way
|
|
67
|
+
// `init` does: create/merge the required ignore rules into the target dir's own `.gitignore`.
|
|
68
|
+
const gitignoreWritten = ensureGitignore(fs, io, outDir);
|
|
69
|
+
printNextSteps(io, {
|
|
70
|
+
gitignoreWritten,
|
|
71
|
+
envPath,
|
|
72
|
+
provider,
|
|
73
|
+
port,
|
|
74
|
+
tokenProvided: token !== '',
|
|
75
|
+
execution,
|
|
76
|
+
});
|
|
77
|
+
return envPath;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Guarantee the freshly written `.env` can't be committed: create the target dir's `.gitignore`
|
|
81
|
+
* (or merge the required rules into an existing one). Idempotent — merging into a dir that already
|
|
82
|
+
* ignores `.env` (e.g. `deploy/local`) appends nothing. Returns whether the file was (re)written.
|
|
83
|
+
*/
|
|
84
|
+
function ensureGitignore(fs, io, outDir) {
|
|
85
|
+
const gitignorePath = join(outDir, '.gitignore');
|
|
86
|
+
const existing = fs.existsSync(gitignorePath) ? fs.readFileSync(gitignorePath, 'utf8') : undefined;
|
|
87
|
+
const next = existing === undefined ? buildGitignore() : mergeGitignore(existing);
|
|
88
|
+
if (next === existing)
|
|
89
|
+
return false;
|
|
90
|
+
fs.writeFileSync(gitignorePath, next);
|
|
91
|
+
io.info(`Ensured ${gitignorePath} ignores .env`);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
function printNextSteps(io, input) {
|
|
95
|
+
const lines = [
|
|
96
|
+
'',
|
|
97
|
+
'Done. Your local-mode .env is ready to run from a scaffolded deployment dir',
|
|
98
|
+
'(one made by `cat-factory init`, or deploy/local in the repo) that provides these scripts:',
|
|
99
|
+
'',
|
|
100
|
+
' npm run db:up # start local Postgres (docker compose)',
|
|
101
|
+
' npm start # migrate + serve the API on :' + String(input.port),
|
|
102
|
+
'',
|
|
103
|
+
'If you ran this in a bare directory, wire up a deployment first (see `cat-factory init`).',
|
|
104
|
+
'',
|
|
105
|
+
'Reminders:',
|
|
106
|
+
` - Pull the executor image: docker pull ${OPTION_DEFAULTS.harnessImage}`,
|
|
107
|
+
' - No model-provider key is needed to boot — add providers/keys in the UI after sign-in',
|
|
108
|
+
' (or uncomment CLOUDFLARE_* / ANTHROPIC_API_KEY / OPENAI_API_KEY in the .env).',
|
|
109
|
+
];
|
|
110
|
+
if (input.execution.mode === 'native') {
|
|
111
|
+
const clis = (input.execution.nativeHarnesses ?? [...ALL_NATIVE_HARNESSES])
|
|
112
|
+
.map((h) => NATIVE_HARNESS_INFO[h].cli)
|
|
113
|
+
.join(' / ');
|
|
114
|
+
lines.push(` - Native mode: install + log in to the ${clis} CLI on this host (the harness server`, ' is bundled; the image above still runs non-native steps).');
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
lines.push(' - Warm pool (faster starts) is optional — configure it in the UI under Integrations >', ' "Local mode" (recommended to start: size 3, pre-warm 1).');
|
|
118
|
+
}
|
|
119
|
+
if (!input.tokenProvided) {
|
|
120
|
+
lines.push(` - Set your ${providerLabel(input.provider)} token (${patEnvVar(input.provider)}) in the ` +
|
|
121
|
+
'.env before running agents.');
|
|
122
|
+
}
|
|
123
|
+
lines.push(input.gitignoreWritten
|
|
124
|
+
? ' - The .env holds secrets; the .gitignore now keeps it out of git — never commit it.'
|
|
125
|
+
: ' - The .env holds secrets and must stay gitignored — never commit it.');
|
|
126
|
+
io.info(lines.join('\n'));
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=envCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envCommand.js","sourceRoot":"","sources":["../src/envCommand.ts"],"names":[],"mappings":"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"}
|
package/dist/fs.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** The filesystem operations the writers need — injectable so the flows are testable. */
|
|
2
|
+
export interface FileSystem {
|
|
3
|
+
existsSync(path: string): boolean;
|
|
4
|
+
mkdirSync(path: string, options: {
|
|
5
|
+
recursive: true;
|
|
6
|
+
}): void;
|
|
7
|
+
readFileSync(path: string, encoding: 'utf8'): string;
|
|
8
|
+
writeFileSync(path: string, data: string): void;
|
|
9
|
+
}
|
|
10
|
+
/** The real, `node:fs`-backed {@link FileSystem}. */
|
|
11
|
+
export declare const realFs: FileSystem;
|
|
12
|
+
//# sourceMappingURL=fs.d.ts.map
|
package/dist/fs.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAEA,yFAAyF;AACzF,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACjC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,SAAS,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAA;IAC3D,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACpD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAChD;AAED,qDAAqD;AACrD,eAAO,MAAM,MAAM,EAAE,UASpB,CAAA"}
|
package/dist/fs.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as nodeFs from 'node:fs';
|
|
2
|
+
/** The real, `node:fs`-backed {@link FileSystem}. */
|
|
3
|
+
export const realFs = {
|
|
4
|
+
existsSync: (p) => nodeFs.existsSync(p),
|
|
5
|
+
mkdirSync: (p, o) => {
|
|
6
|
+
nodeFs.mkdirSync(p, o);
|
|
7
|
+
},
|
|
8
|
+
readFileSync: (p, e) => nodeFs.readFileSync(p, e),
|
|
9
|
+
writeFileSync: (p, d) => {
|
|
10
|
+
nodeFs.writeFileSync(p, d);
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=fs.js.map
|
package/dist/fs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,SAAS,CAAA;AAUjC,qDAAqD;AACrD,MAAM,CAAC,MAAM,MAAM,GAAe;IAChC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAClB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACxB,CAAC;IACD,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IACjD,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5B,CAAC;CACF,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { type CliOptions, HELP_TEXT, K3S_RUNTIMES, type K3sRuntime, OPTION_DEFAULTS, parseArgs, ArgError, } from './args.js';
|
|
2
|
-
export { bootstrap, type BootstrapDeps,
|
|
2
|
+
export { bootstrap, type BootstrapDeps, BootstrapError } from './bootstrap.js';
|
|
3
|
+
export { type EnvCommandDeps, EnvCommandError, generateEnv } from './envCommand.js';
|
|
4
|
+
export { type FileSystem } from './fs.js';
|
|
3
5
|
export { COMMAND_NOT_FOUND, COMMAND_TIMED_OUT, createNodeShell, DEFAULT_COMMAND_TIMEOUT_MS, type HostShell, type ShellResult, } from './host-shell.js';
|
|
4
6
|
export { K3S_INSTALL_COMMAND, type K3sDeps, type K3sResult, setupK3s } from './k3s.js';
|
|
5
7
|
export { buildK3sHandler, buildK3sSetupUrl, DEFAULT_INGRESS_HOST_TEMPLATE, DEFAULT_NAMESPACE_TEMPLATE, handlerLabel, type K3sHandlerInput, KUBERNETES_ENV_TOKEN_SECRET_KEY, } from './k3s-handler.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,UAAU,EACf,SAAS,EACT,YAAY,EACZ,KAAK,UAAU,EACf,eAAe,EACf,SAAS,EACT,QAAQ,GACT,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,UAAU,EACf,SAAS,EACT,YAAY,EACZ,KAAK,UAAU,EACf,eAAe,EACf,SAAS,EACT,QAAQ,GACT,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC9E,OAAO,EAAE,KAAK,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACnF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAC1B,KAAK,SAAS,EACd,KAAK,WAAW,GACjB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,6BAA6B,EAC7B,0BAA0B,EAC1B,YAAY,EACZ,KAAK,eAAe,EACpB,+BAA+B,GAChC,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,aAAa,GACd,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACzF,OAAO,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,KAAK,cAAc,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5E,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EACL,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,qBAAqB,EACrB,eAAe,EACf,KAAK,aAAa,EAClB,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,aAAa,EACb,eAAe,EACf,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,aAAa,EACb,aAAa,EACb,KAAK,WAAW,GACjB,MAAM,UAAU,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// shell over these; they are also exported so the bootstrap can be embedded in other tooling.
|
|
3
3
|
export { HELP_TEXT, K3S_RUNTIMES, OPTION_DEFAULTS, parseArgs, ArgError, } from './args.js';
|
|
4
4
|
export { bootstrap, BootstrapError } from './bootstrap.js';
|
|
5
|
+
export { EnvCommandError, generateEnv } from './envCommand.js';
|
|
6
|
+
export {} from './fs.js';
|
|
5
7
|
export { COMMAND_NOT_FOUND, COMMAND_TIMED_OUT, createNodeShell, DEFAULT_COMMAND_TIMEOUT_MS, } from './host-shell.js';
|
|
6
8
|
export { K3S_INSTALL_COMMAND, setupK3s } from './k3s.js';
|
|
7
9
|
export { buildK3sHandler, buildK3sSetupUrl, DEFAULT_INGRESS_HOST_TEMPLATE, DEFAULT_NAMESPACE_TEMPLATE, handlerLabel, KUBERNETES_ENV_TOKEN_SECRET_KEY, } from './k3s-handler.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,8FAA8F;AAC9F,OAAO,EAEL,SAAS,EACT,YAAY,EAEZ,eAAe,EACf,SAAS,EACT,QAAQ,GACT,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,8FAA8F;AAC9F,OAAO,EAEL,SAAS,EACT,YAAY,EAEZ,eAAe,EACf,SAAS,EACT,QAAQ,GACT,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,SAAS,EAAsB,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC9E,OAAO,EAAuB,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACnF,OAAO,EAAmB,MAAM,SAAS,CAAA;AACzC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,0BAA0B,GAG3B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAAgC,QAAQ,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,6BAA6B,EAC7B,0BAA0B,EAC1B,YAAY,EAEZ,+BAA+B,GAChC,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAKhB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,GAEV,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,gBAAgB,EAChB,aAAa,EAIb,aAAa,GACd,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACzF,OAAO,EAAW,eAAe,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAuB,SAAS,EAAoB,MAAM,WAAW,CAAA;AAC5E,OAAO,EAAE,eAAe,EAA2C,MAAM,cAAc,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,eAAe,EAEf,gBAAgB,GAEjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EAGnB,aAAa,EACb,eAAe,EACf,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,aAAa,EACb,aAAa,GAEd,MAAM,UAAU,CAAA"}
|
package/dist/plan.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export interface BootstrapInput {
|
|
|
27
27
|
harnessEntry?: string;
|
|
28
28
|
authSessionSecret: string;
|
|
29
29
|
encryptionKey: string;
|
|
30
|
+
/** Shared HMAC secret between the backend and the executor-harness (`HARNESS_SHARED_SECRET`). */
|
|
31
|
+
harnessSharedSecret: string;
|
|
30
32
|
/** Existing root `.gitignore` content, if the target dir already has one (rules are merged in). */
|
|
31
33
|
existingGitignore?: string;
|
|
32
34
|
}
|
package/dist/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACpF,OAAO,EAA4C,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAErF,8FAA8F;AAC9F,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,kGAAkG;IAClG,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,mGAAmG;AACnG,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,WAAW,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,uFAAuF;IACvF,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,4FAA4F;IAC5F,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,mGAAmG;IACnG,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACpF,OAAO,EAA4C,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAErF,8FAA8F;AAC9F,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,kGAAkG;IAClG,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,mGAAmG;AACnG,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,WAAW,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,uFAAuF;IACvF,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,4FAA4F;IAC5F,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,iGAAiG;IACjG,mBAAmB,EAAE,MAAM,CAAA;IAC3B,mGAAmG;IACnG,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,WAAW,EAAE,CAoD9D"}
|
package/dist/plan.js
CHANGED
|
@@ -8,6 +8,7 @@ export function buildPlan(input) {
|
|
|
8
8
|
databaseUrl: input.databaseUrl,
|
|
9
9
|
authSessionSecret: input.authSessionSecret,
|
|
10
10
|
encryptionKey: input.encryptionKey,
|
|
11
|
+
harnessSharedSecret: input.harnessSharedSecret,
|
|
11
12
|
harnessImage: input.harnessImage,
|
|
12
13
|
port: input.port,
|
|
13
14
|
corsAllowedOrigins: input.corsAllowedOrigins,
|
|
@@ -86,7 +87,8 @@ with \`cat-factory init\`. It has two parts:
|
|
|
86
87
|
via a personal access token.
|
|
87
88
|
- **\`frontend/\`** — the board SPA (extends the \`@cat-factory/app\` Nuxt layer).
|
|
88
89
|
|
|
89
|
-
> The \`.env\` files hold generated secrets (\`AUTH_SESSION_SECRET\`, \`ENCRYPTION_KEY
|
|
90
|
+
> The \`.env\` files hold generated secrets (\`AUTH_SESSION_SECRET\`, \`ENCRYPTION_KEY\`,
|
|
91
|
+
> \`HARNESS_SHARED_SECRET\`) and your
|
|
90
92
|
> ${label} token (\`${tokenVar}\`). They are gitignored — **keep the values stable and never
|
|
91
93
|
> commit them.** Regenerating \`AUTH_SESSION_SECRET\` forces a re-login; regenerating
|
|
92
94
|
> \`ENCRYPTION_KEY\` orphans every encrypted credential.
|
package/dist/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,YAAY,GACb,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAoB,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type CliOptions } from './args.js';
|
|
2
|
+
import type { Io } from './io.js';
|
|
3
|
+
import { type GeneratedSecrets, type RandomBytes } from './secrets.js';
|
|
4
|
+
import { type ContainerRuntime, type ExecutionMode, type NativeHarness } from './templates.js';
|
|
5
|
+
import { type VcsProvider } from './vcs.js';
|
|
6
|
+
export declare function resolveProvider(options: CliOptions, io: Io): Promise<VcsProvider>;
|
|
7
|
+
export declare function resolveContainerRuntime(options: CliOptions, io: Io): Promise<ContainerRuntime>;
|
|
8
|
+
/** The resolved execution configuration threaded into the env. */
|
|
9
|
+
export interface ExecutionChoice {
|
|
10
|
+
mode: ExecutionMode;
|
|
11
|
+
nativeHarnesses?: NativeHarness[];
|
|
12
|
+
harnessEntry?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Resolve how agent jobs execute — a prewarmed Docker pool (default) or native host agents —
|
|
16
|
+
* plus, for native mode, which harnesses run natively and the harness server entry path. In
|
|
17
|
+
* interactive mode the tradeoffs of each mode are printed before the choice, and (native only)
|
|
18
|
+
* the developer can list which models actually run natively before committing.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveExecution(options: CliOptions, io: Io): Promise<ExecutionChoice>;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve the three mandatory crypto secrets. By default (and always in `--yes` mode) they are
|
|
23
|
+
* generated for the developer in the server's required formats. Interactively the developer can
|
|
24
|
+
* decline (e.g. to paste their own), leaving them blank with a note on how to fill them in.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveSecrets(options: CliOptions, io: Io, randomBytes: RandomBytes | undefined): Promise<GeneratedSecrets>;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the PAT: an explicit `--token` wins; otherwise (interactive only) print the pre-scoped
|
|
29
|
+
* creation URL, open the browser at it, and read the pasted token back. In `--yes` mode with no
|
|
30
|
+
* token, leave it blank (the var is still written, present-but-empty).
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveToken(options: CliOptions, provider: VcsProvider, io: Io): Promise<string>;
|
|
33
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,WAAW,CAAA;AAO5D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAmB,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AACvF,OAAO,EAEL,KAAK,gBAAgB,EAErB,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAgD,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAEzF,wBAAsB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAQvF;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,UAAU,EACnB,EAAE,EAAE,EAAE,GACL,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAED,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAA;IACnB,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAOD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB5F;AAgFD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,UAAU,EACnB,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,WAAW,GAAG,SAAS,GACnC,OAAO,CAAC,gBAAgB,CAAC,CAmB3B;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,WAAW,EACrB,EAAE,EAAE,EAAE,GACL,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
|
package/dist/resolve.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
// Shared interactive resolvers — the prompt-or-flag logic that turns partial {@link CliOptions}
|
|
2
|
+
// into the concrete values a local-mode `.env` needs. Extracted from the `init` orchestrator so
|
|
3
|
+
// the `env` command (which writes only the `.env`, not a whole scaffold) reuses the SAME prompts
|
|
4
|
+
// rather than duplicating them. Every resolver is IO-seam driven, so the flows stay testable.
|
|
5
|
+
import { OPTION_DEFAULTS } from './args.js';
|
|
6
|
+
import { ALL_NATIVE_HARNESSES, EXECUTION_MODE_TRADEOFFS, NATIVE_HARNESS_INFO, nativeModelsFor, } from './execution.js';
|
|
7
|
+
import { generateSecrets } from './secrets.js';
|
|
8
|
+
import { CONTAINER_RUNTIMES, EXECUTION_MODES, } from './templates.js';
|
|
9
|
+
import { patCreationUrl, providerLabel, VCS_PROVIDERS } from './vcs.js';
|
|
10
|
+
export async function resolveProvider(options, io) {
|
|
11
|
+
if (options.provider)
|
|
12
|
+
return options.provider;
|
|
13
|
+
if (options.yes)
|
|
14
|
+
return OPTION_DEFAULTS.provider;
|
|
15
|
+
return io.select('Source control', VCS_PROVIDERS.map((value) => ({ value, label: providerLabel(value) })), OPTION_DEFAULTS.provider);
|
|
16
|
+
}
|
|
17
|
+
export async function resolveContainerRuntime(options, io) {
|
|
18
|
+
if (options.containerRuntime)
|
|
19
|
+
return options.containerRuntime;
|
|
20
|
+
if (options.yes)
|
|
21
|
+
return OPTION_DEFAULTS.containerRuntime;
|
|
22
|
+
return io.select('Container runtime that spawns agent jobs', CONTAINER_RUNTIMES.map((value) => ({ value, label: value })), OPTION_DEFAULTS.containerRuntime);
|
|
23
|
+
}
|
|
24
|
+
/** Whether any native-only flag (`--native-harnesses` / `--harness-entry`) was supplied. */
|
|
25
|
+
function nativeFlagsProvided(options) {
|
|
26
|
+
return Boolean(options.nativeHarnesses?.length) || options.harnessEntry !== undefined;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolve how agent jobs execute — a prewarmed Docker pool (default) or native host agents —
|
|
30
|
+
* plus, for native mode, which harnesses run natively and the harness server entry path. In
|
|
31
|
+
* interactive mode the tradeoffs of each mode are printed before the choice, and (native only)
|
|
32
|
+
* the developer can list which models actually run natively before committing.
|
|
33
|
+
*/
|
|
34
|
+
export async function resolveExecution(options, io) {
|
|
35
|
+
const mode = await resolveExecutionMode(options, io);
|
|
36
|
+
if (mode !== 'native') {
|
|
37
|
+
// Native-only flags carry no meaning in pool mode; warn rather than silently drop them so a
|
|
38
|
+
// `--execution-mode pool --native-harnesses …` (or the same via prompt) isn't a quiet no-op.
|
|
39
|
+
if (nativeFlagsProvided(options))
|
|
40
|
+
io.warn('Ignoring --native-harnesses / --harness-entry: they only apply to --execution-mode native.');
|
|
41
|
+
return { mode };
|
|
42
|
+
}
|
|
43
|
+
const nativeHarnesses = await resolveNativeHarnesses(options, io);
|
|
44
|
+
if (!options.yes)
|
|
45
|
+
await maybeShowNativeModels(io, nativeHarnesses);
|
|
46
|
+
const harnessEntry = await resolveHarnessEntry(options, io);
|
|
47
|
+
return { mode, nativeHarnesses, harnessEntry };
|
|
48
|
+
}
|
|
49
|
+
async function resolveExecutionMode(options, io) {
|
|
50
|
+
if (options.executionMode)
|
|
51
|
+
return options.executionMode;
|
|
52
|
+
// A native-only flag with no explicit --execution-mode clearly means native: infer it rather
|
|
53
|
+
// than defaulting to pool and dropping the flag on the floor.
|
|
54
|
+
if (nativeFlagsProvided(options)) {
|
|
55
|
+
io.info('Assuming --execution-mode native (a native-only flag was provided).');
|
|
56
|
+
return 'native';
|
|
57
|
+
}
|
|
58
|
+
if (options.yes)
|
|
59
|
+
return OPTION_DEFAULTS.executionMode;
|
|
60
|
+
// Print both modes' tradeoffs so the choice is informed, not a bare two-item menu.
|
|
61
|
+
io.info(['\nHow should agent jobs run locally?', '', ...EXECUTION_MODES.flatMap(tradeoffBlock)].join('\n'));
|
|
62
|
+
return io.select('Execution mode', [
|
|
63
|
+
{ value: 'pool', label: 'Prewarmed Docker pool (recommended)' },
|
|
64
|
+
{ value: 'native', label: 'Native host agents (your own claude/codex CLI)' },
|
|
65
|
+
], OPTION_DEFAULTS.executionMode);
|
|
66
|
+
}
|
|
67
|
+
/** Render one execution mode's tradeoff bullet block for the pre-prompt info. */
|
|
68
|
+
function tradeoffBlock(mode) {
|
|
69
|
+
return [...EXECUTION_MODE_TRADEOFFS[mode], ''];
|
|
70
|
+
}
|
|
71
|
+
async function resolveNativeHarnesses(options, io) {
|
|
72
|
+
if (options.nativeHarnesses?.length)
|
|
73
|
+
return options.nativeHarnesses;
|
|
74
|
+
if (options.yes)
|
|
75
|
+
return [...ALL_NATIVE_HARNESSES];
|
|
76
|
+
const choice = await io.select('Which installed CLI(s) should run agents natively?', [
|
|
77
|
+
{ value: 'both', label: 'Both — Claude Code and Codex' },
|
|
78
|
+
{ value: 'claude-code', label: NATIVE_HARNESS_INFO['claude-code'].label },
|
|
79
|
+
{ value: 'codex', label: NATIVE_HARNESS_INFO.codex.label },
|
|
80
|
+
], 'both');
|
|
81
|
+
return choice === 'both' ? [...ALL_NATIVE_HARNESSES] : [choice];
|
|
82
|
+
}
|
|
83
|
+
/** Offer to list the models that will actually run natively for the chosen harnesses. */
|
|
84
|
+
async function maybeShowNativeModels(io, harnesses) {
|
|
85
|
+
const show = await io.confirm('List the models that will run natively in this mode?', true);
|
|
86
|
+
if (!show)
|
|
87
|
+
return;
|
|
88
|
+
const models = nativeModelsFor(harnesses);
|
|
89
|
+
const lines = [
|
|
90
|
+
'\nModels that run natively (through your ambient CLI):',
|
|
91
|
+
...models.map((m) => ` - ${m.label} [id: ${m.id}] via ${m.harness}`),
|
|
92
|
+
'',
|
|
93
|
+
'Any OTHER model a step selects (Cloudflare, direct keys, or GLM/Kimi/DeepSeek — which',
|
|
94
|
+
'reuse the claude-code harness against their own endpoint) still runs in a container,',
|
|
95
|
+
'so the executor image is still used for those steps.',
|
|
96
|
+
];
|
|
97
|
+
io.info(lines.join('\n'));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Resolve the executor-harness server entry path for native mode. Optional: when left blank,
|
|
101
|
+
* native mode defaults to the bundled `@cat-factory/executor-harness` (a dependency of
|
|
102
|
+
* `@cat-factory/local-server`), so no configuration is needed. A value is only used to point at
|
|
103
|
+
* a custom or source-checkout build.
|
|
104
|
+
*/
|
|
105
|
+
async function resolveHarnessEntry(options, io) {
|
|
106
|
+
if (options.harnessEntry !== undefined)
|
|
107
|
+
return options.harnessEntry;
|
|
108
|
+
// Non-interactive (--yes): leave it blank; the bundled harness default kicks in at boot.
|
|
109
|
+
if (options.yes)
|
|
110
|
+
return '';
|
|
111
|
+
return (await io.question('Path to a custom executor-harness server entry (LOCAL_HARNESS_ENTRY; blank = bundled default)')).trim();
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Resolve the three mandatory crypto secrets. By default (and always in `--yes` mode) they are
|
|
115
|
+
* generated for the developer in the server's required formats. Interactively the developer can
|
|
116
|
+
* decline (e.g. to paste their own), leaving them blank with a note on how to fill them in.
|
|
117
|
+
*/
|
|
118
|
+
export async function resolveSecrets(options, io, randomBytes) {
|
|
119
|
+
const generate = options.yes ||
|
|
120
|
+
(await io.confirm('Generate AUTH_SESSION_SECRET, ENCRYPTION_KEY and HARNESS_SHARED_SECRET for you?', true));
|
|
121
|
+
if (!generate) {
|
|
122
|
+
io.warn('Left AUTH_SESSION_SECRET / ENCRYPTION_KEY / HARNESS_SHARED_SECRET blank — fill them in ' +
|
|
123
|
+
'before starting (see .env.example for the generate commands). Keep all three stable once set.');
|
|
124
|
+
return { authSessionSecret: '', encryptionKey: '', harnessSharedSecret: '' };
|
|
125
|
+
}
|
|
126
|
+
const secrets = generateSecrets(randomBytes);
|
|
127
|
+
io.info('\nGenerated AUTH_SESSION_SECRET (hex), ENCRYPTION_KEY (base64) and HARNESS_SHARED_SECRET (hex).');
|
|
128
|
+
return secrets;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Resolve the PAT: an explicit `--token` wins; otherwise (interactive only) print the pre-scoped
|
|
132
|
+
* creation URL, open the browser at it, and read the pasted token back. In `--yes` mode with no
|
|
133
|
+
* token, leave it blank (the var is still written, present-but-empty).
|
|
134
|
+
*/
|
|
135
|
+
export async function resolveToken(options, provider, io) {
|
|
136
|
+
if (options.token !== undefined)
|
|
137
|
+
return options.token;
|
|
138
|
+
if (options.yes)
|
|
139
|
+
return '';
|
|
140
|
+
const url = patCreationUrl(provider);
|
|
141
|
+
const label = providerLabel(provider);
|
|
142
|
+
io.info(`\nCreate a ${label} personal access token (scopes pre-selected):\n ${url}`);
|
|
143
|
+
if (!options.noOpen) {
|
|
144
|
+
const open = await io.confirm('Open this URL in your browser now?', true);
|
|
145
|
+
if (open)
|
|
146
|
+
await io.openBrowser(url);
|
|
147
|
+
}
|
|
148
|
+
const token = await io.secret(`Paste your ${label} token here (or leave blank to add later)`);
|
|
149
|
+
if (token === '')
|
|
150
|
+
io.warn('No token entered — the var will be written blank; set it before running agents.');
|
|
151
|
+
return token;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/secrets.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
* the server's config loader expects
|
|
2
|
+
* The three mandatory crypto secrets a cat-factory deployment needs, in the EXACT formats
|
|
3
|
+
* the server's config loader expects (all validated by `requireStableSecret` in
|
|
4
|
+
* `@cat-factory/local-server`'s config loader — a deployment missing any of them fails to boot):
|
|
4
5
|
*
|
|
5
6
|
* - `authSessionSecret` — signs the session JWT. The loader requires `>= 32` characters;
|
|
6
7
|
* we emit 32 random bytes as **hex** (64 chars), matching `deploy/local`'s
|
|
@@ -9,17 +10,21 @@
|
|
|
9
10
|
* The cipher requires valid **base64 of at least 32 decoded bytes** (a non-base64 value
|
|
10
11
|
* like `dummy` fails the cipher at boot with `InvalidCharacterError`); we emit 32 random
|
|
11
12
|
* bytes as base64.
|
|
13
|
+
* - `harnessSharedSecret` — the shared HMAC secret the backend and the executor-harness sign
|
|
14
|
+
* their traffic with (`HARNESS_SHARED_SECRET`). The loader requires `>= 16` characters; we
|
|
15
|
+
* emit 32 random bytes as **hex** (64 chars), matching `deploy/local`'s `generate-secrets.mjs`.
|
|
12
16
|
*
|
|
13
|
-
*
|
|
17
|
+
* All three MUST stay STABLE once chosen: regenerating `authSessionSecret` forces a re-login and
|
|
14
18
|
* regenerating `encryptionKey` orphans every encrypted-at-rest credential. The CLI generates
|
|
15
|
-
* them once
|
|
19
|
+
* them once and writes them into `.env` so the developer keeps the values.
|
|
16
20
|
*/
|
|
17
21
|
export interface GeneratedSecrets {
|
|
18
22
|
authSessionSecret: string;
|
|
19
23
|
encryptionKey: string;
|
|
24
|
+
harnessSharedSecret: string;
|
|
20
25
|
}
|
|
21
26
|
/** Injectable RNG seam so the generator is deterministic in tests. */
|
|
22
27
|
export type RandomBytes = (size: number) => Buffer;
|
|
23
|
-
/** Generate a fresh {@link GeneratedSecrets}
|
|
28
|
+
/** Generate a fresh {@link GeneratedSecrets} set in the server's required formats. */
|
|
24
29
|
export declare function generateSecrets(randomBytes?: RandomBytes): GeneratedSecrets;
|
|
25
30
|
//# sourceMappingURL=secrets.d.ts.map
|
package/dist/secrets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAED,sEAAsE;AACtE,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;AAElD,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,WAAW,GAAE,WAA6B,GAAG,gBAAgB,CAM5F"}
|
package/dist/secrets.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { randomBytes as nodeRandomBytes } from 'node:crypto';
|
|
2
|
-
/** Generate a fresh {@link GeneratedSecrets}
|
|
2
|
+
/** Generate a fresh {@link GeneratedSecrets} set in the server's required formats. */
|
|
3
3
|
export function generateSecrets(randomBytes = nodeRandomBytes) {
|
|
4
4
|
return {
|
|
5
5
|
authSessionSecret: randomBytes(32).toString('hex'),
|
|
6
6
|
encryptionKey: randomBytes(32).toString('base64'),
|
|
7
|
+
harnessSharedSecret: randomBytes(32).toString('hex'),
|
|
7
8
|
};
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=secrets.js.map
|
package/dist/secrets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,aAAa,CAAA;AA+B5D,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,WAAW,GAAgB,eAAe;IACxE,OAAO;QACL,iBAAiB,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClD,aAAa,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjD,mBAAmB,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;KACrD,CAAA;AACH,CAAC"}
|
package/dist/templates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,oBAAoB,YAAY,CAAA;AAC7C,eAAO,MAAM,WAAW,YAAY,CAAA;AACpC,eAAO,MAAM,YAAY,WAAW,CAAA;AACpC,eAAO,MAAM,kBAAkB,YAAY,CAAA;AAC3C,eAAO,MAAM,kBAAkB,aAAa,CAAA;AAC5C,eAAO,MAAM,gBAAgB,aAAa,CAAA;AAE1C,2EAA2E;AAC3E,eAAO,MAAM,qBAAqB,kDAAkD,CAAA;AAEpF,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,YAAI,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAA;AAC9F,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,YAAI,MAAM,EAAE,QAAQ,CAAU,CAAA;AAC1D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE5D,wGAAwG;AACxG,eAAO,MAAM,gBAAgB,YAAI,aAAa,EAAE,OAAO,CAAU,CAAA;AACjE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D,eAAO,MAAM,gBAAgB,gBAAiB,MAAM,KAAG,MA6BhD,CAAA;AAEP,eAAO,MAAM,WAAW,otBAcvB,CAAA;AAED,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAuC7C,CAAA;AAED,+FAA+F;AAC/F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;CAClC;AAED,eAAO,MAAM,eAAe,WAAW,oBAAoB,KAAQ,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,oBAAoB,YAAY,CAAA;AAC7C,eAAO,MAAM,WAAW,YAAY,CAAA;AACpC,eAAO,MAAM,YAAY,WAAW,CAAA;AACpC,eAAO,MAAM,kBAAkB,YAAY,CAAA;AAC3C,eAAO,MAAM,kBAAkB,aAAa,CAAA;AAC5C,eAAO,MAAM,gBAAgB,aAAa,CAAA;AAE1C,2EAA2E;AAC3E,eAAO,MAAM,qBAAqB,kDAAkD,CAAA;AAEpF,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,YAAI,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAA;AAC9F,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,YAAI,MAAM,EAAE,QAAQ,CAAU,CAAA;AAC1D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE5D,wGAAwG;AACxG,eAAO,MAAM,gBAAgB,YAAI,aAAa,EAAE,OAAO,CAAU,CAAA;AACjE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D,eAAO,MAAM,gBAAgB,gBAAiB,MAAM,KAAG,MA6BhD,CAAA;AAEP,eAAO,MAAM,WAAW,otBAcvB,CAAA;AAED,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAuC7C,CAAA;AAED,+FAA+F;AAC/F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;CAClC;AAED,eAAO,MAAM,eAAe,WAAW,oBAAoB,KAAQ,MA8DlE,CAAA;AAED,eAAO,MAAM,mBAAmB,gBAAiB,MAAM,KAAG,MA4BnD,CAAA;AAEP,eAAO,MAAM,kBAAkB,UAAW,MAAM,KAAG,MAalD,CAAA;AAED,eAAO,MAAM,oBAAoB,gBAAiB,MAAM,KAAG,MAS1D,CAAA;AAED,eAAO,MAAM,kBAAkB,wBAAwC,MAItE,CAAA;AAED,eAAO,MAAM,YAAY,sNAUxB,CAAA"}
|
package/dist/templates.js
CHANGED
|
@@ -146,6 +146,9 @@ CORS_ALLOWED_ORIGINS=http://localhost:3000
|
|
|
146
146
|
AUTH_SESSION_SECRET=
|
|
147
147
|
# Generate with: openssl rand -base64 32
|
|
148
148
|
ENCRYPTION_KEY=
|
|
149
|
+
# Shared HMAC secret between the backend and the executor-harness (>= 16 chars). Required to boot.
|
|
150
|
+
# Generate with: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
|
|
151
|
+
HARNESS_SHARED_SECRET=
|
|
149
152
|
# A GitHub (classic, scopes: repo,workflow) or GitLab (scope: api,read_user) personal access token.
|
|
150
153
|
${tokenLines.join('\n')}
|
|
151
154
|
# For a self-managed GitLab instance, also set GITLAB_API_BASE (e.g. https://gitlab.example.com/api/v4).
|
package/dist/templates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Bootstrap CLI for the Agent Architecture Board: scaffold a local-mode deployment (Node/local backend + frontend SPA) on your own machine — generates the crypto secrets, populates and gitignores the .env files, and mints a GitHub/GitLab personal access token by opening the browser at the right pre-scoped URL.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bootstrap",
|
|
@@ -34,15 +34,15 @@
|
|
|
34
34
|
"access": "public"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@clack/prompts": "^1.
|
|
37
|
+
"@clack/prompts": "^1.7.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@types/node": "^26.0
|
|
40
|
+
"@types/node": "^26.1.0",
|
|
41
41
|
"typescript": "7.0.1-rc",
|
|
42
42
|
"valibot": "^1.4.2",
|
|
43
43
|
"vitest": "^4.1.9",
|
|
44
|
-
"@cat-factory/contracts": "0.
|
|
45
|
-
"@cat-factory/kernel": "0.
|
|
44
|
+
"@cat-factory/contracts": "0.120.0",
|
|
45
|
+
"@cat-factory/kernel": "0.110.0"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
48
|
"build": "tsc -b tsconfig.build.json",
|