@cat-factory/cli 0.13.7 → 0.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -3
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +13 -0
- package/dist/bootstrap.js.map +1 -1
- package/dist/composeProject.d.ts +31 -0
- package/dist/composeProject.d.ts.map +1 -0
- package/dist/composeProject.js +60 -0
- package/dist/composeProject.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/io.d.ts.map +1 -1
- package/dist/io.js +20 -2
- package/dist/io.js.map +1 -1
- package/dist/plan.d.ts +7 -0
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +14 -1
- package/dist/plan.js.map +1 -1
- package/dist/slug.d.ts +13 -0
- package/dist/slug.d.ts.map +1 -1
- package/dist/slug.js +31 -5
- package/dist/slug.js.map +1 -1
- package/dist/templates.d.ts +10 -1
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +29 -8
- package/dist/templates.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -209,7 +209,7 @@ npx @cat-factory/cli init \
|
|
|
209
209
|
local/ # backend - @cat-factory/local-server
|
|
210
210
|
package.json
|
|
211
211
|
src/main.ts # one-line startLocal() entry
|
|
212
|
-
docker-compose.yml # local Postgres (creds
|
|
212
|
+
docker-compose.yml # local Postgres (creds from --db-url, Compose project from --dir)
|
|
213
213
|
tsconfig.json
|
|
214
214
|
.env # generated, gitignored: DATABASE_URL, secrets, PAT, harness image
|
|
215
215
|
.env.example # documented template
|
|
@@ -243,6 +243,24 @@ selectable, so no pipeline can start. The quickest is Cloudflare Workers AI over
|
|
|
243
243
|
`ANTHROPIC_API_KEY`. Put it in `local/.env` before you start, or sign in and add it through the
|
|
244
244
|
UI, whichever you prefer.
|
|
245
245
|
|
|
246
|
+
### Each deployment gets its own Compose project
|
|
247
|
+
|
|
248
|
+
`local/docker-compose.yml` declares a `name:`, derived from the deployment directory
|
|
249
|
+
(`--dir`, or the project name when you omit it) plus a `-local` suffix: scaffolding into
|
|
250
|
+
`~/deploy-a` gives the Compose project `deploy-a-local`. That name keys the Postgres container
|
|
251
|
+
and the `deploy-a-local_cat-factory-pg` volume, so `npm run db:up` in one deployment can never
|
|
252
|
+
bring up another's database. Compose's own default is the compose file's directory, which is
|
|
253
|
+
`local/` in every deployment, so without the declared name the second deployment you scaffold
|
|
254
|
+
migrates and serves the first one's data. Two deployment directories with the SAME basename
|
|
255
|
+
still land in one project, so give each deployment its own directory name.
|
|
256
|
+
|
|
257
|
+
Re-scaffolding an existing deployment with `--force` after changing its directory name moves it
|
|
258
|
+
to a new Compose project. The CLI then prints the project it leaves behind and the
|
|
259
|
+
`docker compose -p <old> down` that stops it: until you do, the old container holds the
|
|
260
|
+
published Postgres port and `npm run db:down` no longer reaches it. The same rule, with the
|
|
261
|
+
recovery step spelled out:
|
|
262
|
+
[One Compose project per deployment](https://www.catfactory.ai/deploy/local.html#one-compose-project-per-deployment).
|
|
263
|
+
|
|
246
264
|
The generated `README.md` repeats these steps with your chosen values, and links to the full
|
|
247
265
|
[local-mode docs](https://github.com/kibertoad/cat-factory/blob/main/deploy/local/README.md) (container-runtime matrix, repo linking, the
|
|
248
266
|
Tester's Docker-in-Docker / ephemeral environments, the warm container pool, etc.).
|
|
@@ -262,10 +280,17 @@ Tester's Docker-in-Docker / ephemeral environments, the warm container pool, etc
|
|
|
262
280
|
The bin is a thin shell over the package's exported functions, which are pure and reusable:
|
|
263
281
|
|
|
264
282
|
```ts
|
|
265
|
-
import { buildPlan, generateSecrets, patCreationUrl } from '@cat-factory/cli'
|
|
283
|
+
import { buildPlan, composeProjectNameFor, generateSecrets, patCreationUrl } from '@cat-factory/cli'
|
|
266
284
|
|
|
285
|
+
const targetDir = '/home/me/deploy-a'
|
|
267
286
|
const secrets = generateSecrets()
|
|
268
|
-
const files = buildPlan({
|
|
287
|
+
const files = buildPlan({
|
|
288
|
+
projectName: 'my-cats',
|
|
289
|
+
// Keys the deployment's container + database volume: derive it from the directory you are
|
|
290
|
+
// about to write into, or two deployments end up sharing one Postgres.
|
|
291
|
+
composeProjectName: composeProjectNameFor(targetDir, 'cat-factory'),
|
|
292
|
+
/* … */ ...secrets,
|
|
293
|
+
})
|
|
269
294
|
// files: { path, content, secret? }[] - write them wherever you like
|
|
270
295
|
```
|
|
271
296
|
|
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,WAAW,CAAA;AAO5D,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,CA8G9F"}
|
package/dist/bootstrap.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { dirname, join, resolve } from 'node:path';
|
|
2
2
|
import { OPTION_DEFAULTS } from './args.js';
|
|
3
|
+
import { COMPOSE_FILE_PATH, composeProjectNameFor, orphanedComposeProjectNote, } from './composeProject.js';
|
|
3
4
|
import { ALL_NATIVE_HARNESSES, NATIVE_HARNESS_INFO } from './execution.js';
|
|
4
5
|
import { realFs } from './fs.js';
|
|
5
6
|
import { createConsoleIo } from './io.js';
|
|
@@ -26,6 +27,9 @@ export async function bootstrap(options, deps = {}) {
|
|
|
26
27
|
io.warn(`Using "${projectName}" as the project slug (npm package names must be lowercased).`);
|
|
27
28
|
}
|
|
28
29
|
const targetDir = resolve(cwd, options.dir ?? projectName);
|
|
30
|
+
// Resolved here, beside the npm slug, because it is the only place the target directory is
|
|
31
|
+
// known. Both names identify the same deployment and each obeys its own charset rule.
|
|
32
|
+
const composeProjectName = composeProjectNameFor(targetDir, OPTION_DEFAULTS.projectName);
|
|
29
33
|
const appTitle = options.appTitle ??
|
|
30
34
|
(options.yes
|
|
31
35
|
? OPTION_DEFAULTS.appTitle
|
|
@@ -55,8 +59,15 @@ export async function bootstrap(options, deps = {}) {
|
|
|
55
59
|
const existingGitignore = fs.existsSync(gitignorePath)
|
|
56
60
|
? fs.readFileSync(gitignorePath, 'utf8')
|
|
57
61
|
: undefined;
|
|
62
|
+
// Only a --force run rewrites the compose file, so only a --force run can move the deployment
|
|
63
|
+
// to another Compose project and leave the old one's container and volume behind.
|
|
64
|
+
const composePath = join(targetDir, ...COMPOSE_FILE_PATH.split('/'));
|
|
65
|
+
const orphanedProject = options.force && fs.existsSync(composePath)
|
|
66
|
+
? orphanedComposeProjectNote(fs.readFileSync(composePath, 'utf8'), composeProjectName)
|
|
67
|
+
: undefined;
|
|
58
68
|
const plan = buildPlan({
|
|
59
69
|
projectName,
|
|
70
|
+
composeProjectName,
|
|
60
71
|
appTitle,
|
|
61
72
|
provider,
|
|
62
73
|
token,
|
|
@@ -75,6 +86,8 @@ export async function bootstrap(options, deps = {}) {
|
|
|
75
86
|
existingGitignore,
|
|
76
87
|
});
|
|
77
88
|
writePlan(plan, targetDir, fs, io, options.force);
|
|
89
|
+
if (orphanedProject !== undefined)
|
|
90
|
+
io.warn(orphanedProject);
|
|
78
91
|
printNextSteps(io, {
|
|
79
92
|
targetDir,
|
|
80
93
|
projectName,
|
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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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** Where the scaffold writes the deployment's compose file, relative to the project root. */
|
|
2
|
+
export declare const COMPOSE_FILE_PATH = "local/docker-compose.yml";
|
|
3
|
+
/**
|
|
4
|
+
* The Compose project name for a scaffolded deployment, complete with its suffix so the value is
|
|
5
|
+
* assembled in exactly one place. It keys the deployment's Postgres container, its network and
|
|
6
|
+
* its `<project>_cat-factory-pg` database volume.
|
|
7
|
+
*
|
|
8
|
+
* Derived from the DEPLOYMENT DIRECTORY, which is the field a user varies per deployment
|
|
9
|
+
* (`--dir`, or the project name when `--dir` is omitted). The project name on its own would not
|
|
10
|
+
* do: it defaults to a constant that `-y` and a bare Enter both take, so two deployments would
|
|
11
|
+
* still meet in one project. Two deployment directories that share a basename do still collide,
|
|
12
|
+
* one level up from where Compose's own default (the compose file's `local/` directory, shared by
|
|
13
|
+
* every deployment) collided.
|
|
14
|
+
*
|
|
15
|
+
* Compose accepts `[a-z0-9][a-z0-9_-]*`, so a dot becomes `_` rather than `-`: folding it onto a
|
|
16
|
+
* hyphen would map `acme.site` and `acme site` onto one project, which is the collision the name
|
|
17
|
+
* exists to prevent. The npm slug it starts from never begins with `.`, `_` or `-`, so the result
|
|
18
|
+
* satisfies Compose's first-character rule.
|
|
19
|
+
*/
|
|
20
|
+
export declare function composeProjectNameFor(deploymentDir: string, fallback: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* What a regenerate owes the operator: the Compose project the deployment already in the target
|
|
23
|
+
* directory runs under, once rewriting its compose file moves it to a different one. Returns
|
|
24
|
+
* `undefined` when the name does not move, which is every fresh scaffold and every plain rerun.
|
|
25
|
+
*
|
|
26
|
+
* Without this the containers and the database volume are simply left behind under a name nothing
|
|
27
|
+
* prints: `npm run db:down` no longer reaches them, the old container keeps the published
|
|
28
|
+
* Postgres port until it is stopped, and the board comes up on an empty database.
|
|
29
|
+
*/
|
|
30
|
+
export declare function orphanedComposeProjectNote(existingCompose: string, nextName: string): string | undefined;
|
|
31
|
+
//# sourceMappingURL=composeProject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composeProject.d.ts","sourceRoot":"","sources":["../src/composeProject.ts"],"names":[],"mappings":"AAGA,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,6BAA6B,CAAA;AAS3D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAapB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { basename, posix } from 'node:path';
|
|
2
|
+
import { slugifyProjectName } from './slug.js';
|
|
3
|
+
/** Where the scaffold writes the deployment's compose file, relative to the project root. */
|
|
4
|
+
export const COMPOSE_FILE_PATH = 'local/docker-compose.yml';
|
|
5
|
+
/**
|
|
6
|
+
* The project name Compose falls back to when a compose file declares none: the file's own
|
|
7
|
+
* directory. Every scaffolded deployment keeps its compose file in the same place, so this one
|
|
8
|
+
* name is what any deployment with an undeclared project is running under.
|
|
9
|
+
*/
|
|
10
|
+
const COMPOSE_DIRECTORY_DEFAULT = posix.dirname(COMPOSE_FILE_PATH);
|
|
11
|
+
/**
|
|
12
|
+
* The Compose project name for a scaffolded deployment, complete with its suffix so the value is
|
|
13
|
+
* assembled in exactly one place. It keys the deployment's Postgres container, its network and
|
|
14
|
+
* its `<project>_cat-factory-pg` database volume.
|
|
15
|
+
*
|
|
16
|
+
* Derived from the DEPLOYMENT DIRECTORY, which is the field a user varies per deployment
|
|
17
|
+
* (`--dir`, or the project name when `--dir` is omitted). The project name on its own would not
|
|
18
|
+
* do: it defaults to a constant that `-y` and a bare Enter both take, so two deployments would
|
|
19
|
+
* still meet in one project. Two deployment directories that share a basename do still collide,
|
|
20
|
+
* one level up from where Compose's own default (the compose file's `local/` directory, shared by
|
|
21
|
+
* every deployment) collided.
|
|
22
|
+
*
|
|
23
|
+
* Compose accepts `[a-z0-9][a-z0-9_-]*`, so a dot becomes `_` rather than `-`: folding it onto a
|
|
24
|
+
* hyphen would map `acme.site` and `acme site` onto one project, which is the collision the name
|
|
25
|
+
* exists to prevent. The npm slug it starts from never begins with `.`, `_` or `-`, so the result
|
|
26
|
+
* satisfies Compose's first-character rule.
|
|
27
|
+
*/
|
|
28
|
+
export function composeProjectNameFor(deploymentDir, fallback) {
|
|
29
|
+
const slug = slugifyProjectName(basename(deploymentDir), fallback).replace(/\./g, '_');
|
|
30
|
+
return `${slug}-local`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* What a regenerate owes the operator: the Compose project the deployment already in the target
|
|
34
|
+
* directory runs under, once rewriting its compose file moves it to a different one. Returns
|
|
35
|
+
* `undefined` when the name does not move, which is every fresh scaffold and every plain rerun.
|
|
36
|
+
*
|
|
37
|
+
* Without this the containers and the database volume are simply left behind under a name nothing
|
|
38
|
+
* prints: `npm run db:down` no longer reaches them, the old container keeps the published
|
|
39
|
+
* Postgres port until it is stopped, and the board comes up on an empty database.
|
|
40
|
+
*/
|
|
41
|
+
export function orphanedComposeProjectNote(existingCompose, nextName) {
|
|
42
|
+
const previous = declaredComposeProject(existingCompose) ?? COMPOSE_DIRECTORY_DEFAULT;
|
|
43
|
+
if (previous === nextName)
|
|
44
|
+
return undefined;
|
|
45
|
+
return [
|
|
46
|
+
`The deployment already in this directory runs under Compose project "${previous}"; it now`,
|
|
47
|
+
`declares "${nextName}". Its container and its "${previous}_cat-factory-pg" volume stay`,
|
|
48
|
+
'behind under the old name, out of reach of `npm run db:down`, and while that container runs',
|
|
49
|
+
'it holds the published Postgres port:',
|
|
50
|
+
'',
|
|
51
|
+
` docker compose -p ${previous} down # add -v to delete that database as well`,
|
|
52
|
+
'',
|
|
53
|
+
`Afterwards \`npm run db:up\` brings up a FRESH database under "${nextName}".`,
|
|
54
|
+
].join('\n');
|
|
55
|
+
}
|
|
56
|
+
/** The top-level `name:` a compose file declares, if any (quoted or bare). */
|
|
57
|
+
function declaredComposeProject(compose) {
|
|
58
|
+
return /^name:[ \t]*['"]?([^'"\s#]+)/m.exec(compose)?.[1];
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=composeProject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composeProject.js","sourceRoot":"","sources":["../src/composeProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAE9C,6FAA6F;AAC7F,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAA;AAE3D;;;;GAIG;AACH,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAElE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,qBAAqB,CAAC,aAAqB,EAAE,QAAgB;IAC3E,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACtF,OAAO,GAAG,IAAI,QAAQ,CAAA;AACxB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CACxC,eAAuB,EACvB,QAAgB;IAEhB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,eAAe,CAAC,IAAI,yBAAyB,CAAA;IACrF,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC3C,OAAO;QACL,wEAAwE,QAAQ,WAAW;QAC3F,aAAa,QAAQ,6BAA6B,QAAQ,8BAA8B;QACxF,6FAA6F;QAC7F,uCAAuC;QACvC,EAAE;QACF,yBAAyB,QAAQ,oDAAoD;QACrF,EAAE;QACF,kEAAkE,QAAQ,IAAI;KAC/E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,8EAA8E;AAC9E,SAAS,sBAAsB,CAAC,OAAe;IAC7C,OAAO,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC3D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export { type Io, createConsoleIo } from './io.js';
|
|
|
16
16
|
export { type BootstrapInput, buildPlan, type PlannedFile } from './plan.js';
|
|
17
17
|
export { generateSecrets, type GeneratedSecrets, type RandomBytes } from './secrets.js';
|
|
18
18
|
export { slugifyProjectName } from './slug.js';
|
|
19
|
+
export { composeProjectNameFor } from './composeProject.js';
|
|
19
20
|
export { CONTAINER_RUNTIMES, type ContainerRuntime, EXECUTION_MODES, type ExecutionMode, HARNESS_IMAGE_EXAMPLE, HARNESS_IMAGE_GUIDANCE, harnessImageEnvLines, NATIVE_HARNESSES, type NativeHarness, } from './templates.js';
|
|
20
21
|
export { EXECUTION_MODE_TRADEOFFS, NATIVE_HARNESS_INFO, type NativeHarnessInfo, type NativeModel, NATIVE_MODELS, nativeModelsFor, nativeModelSummary, } from './execution.js';
|
|
21
22
|
export { githubPatCreationUrl, gitlabPatCreationUrl, patCreationUrl, patEnvVar, providerLabel, VCS_PROVIDERS, type VcsProvider, } from './vcs.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,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,KAAK,OAAO,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAC1B,KAAK,SAAS,EACd,iBAAiB,EACjB,UAAU,EACV,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,0BAA0B,EAC1B,YAAY,EACZ,KAAK,eAAe,EACpB,+BAA+B,GAChC,MAAM,kBAAkB,CAAA;AAUzB,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAK3B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,KAAK,QAAQ,GACd,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,eAAe,EACf,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,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;AAKjB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,KAAK,QAAQ,EACb,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -38,6 +38,10 @@ export { createConsoleIo } from './io.js';
|
|
|
38
38
|
export { buildPlan } from './plan.js';
|
|
39
39
|
export { generateSecrets } from './secrets.js';
|
|
40
40
|
export { slugifyProjectName } from './slug.js';
|
|
41
|
+
// Travels with `buildPlan`: `BootstrapInput.composeProjectName` is what keeps two deployments out
|
|
42
|
+
// of one Compose project, so a programmatic caller needs the same derivation `bootstrap()` uses
|
|
43
|
+
// rather than a name of its own invention.
|
|
44
|
+
export { composeProjectNameFor } from './composeProject.js';
|
|
41
45
|
export { CONTAINER_RUNTIMES, EXECUTION_MODES, HARNESS_IMAGE_EXAMPLE, HARNESS_IMAGE_GUIDANCE, harnessImageEnvLines, NATIVE_HARNESSES, } from './templates.js';
|
|
42
46
|
export { EXECUTION_MODE_TRADEOFFS, NATIVE_HARNESS_INFO, NATIVE_MODELS, nativeModelsFor, nativeModelSummary, } from './execution.js';
|
|
43
47
|
export { githubPatCreationUrl, gitlabPatCreationUrl, patCreationUrl, patEnvVar, providerLabel, VCS_PROVIDERS, } from './vcs.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,EAAsB,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC9E,OAAO,EAAuB,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACnF,OAAO,EAAmB,MAAM,SAAS,CAAA;AACzC,OAAO,EAEL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAE1B,iBAAiB,EACjB,UAAU,GAEX,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAAgC,QAAQ,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,0BAA0B,EAC1B,YAAY,EAEZ,+BAA+B,GAChC,MAAM,kBAAkB,CAAA;AACzB,gGAAgG;AAChG,iGAAiG;AACjG,kGAAkG;AAClG,6FAA6F;AAC7F,EAAE;AACF,kGAAkG;AAClG,kGAAkG;AAClG,6FAA6F;AAC7F,qFAAqF;AACrF,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAC3B,kGAAkG;AAClG,mGAAmG;AACnG,oGAAoG;AACpG,wFAAwF;AACxF,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EAKrB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,GAEb,MAAM,kBAAkB,CAAA;AACzB,6FAA6F;AAC7F,6FAA6F;AAC7F,kGAAkG;AAClG,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,gBAAgB,EAGhB,eAAe,EAGf,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,wBAAwB,GAEzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,gBAAgB,EAChB,aAAa,EAIb,aAAa,GACd,MAAM,UAAU,CAAA;AACjB,iGAAiG;AACjG,gGAAgG;AAChG,iGAAiG;AACjG,2DAA2D;AAC3D,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,aAAa,EAEb,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,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,eAAe,EAEf,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,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"}
|
|
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,EAEL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAE1B,iBAAiB,EACjB,UAAU,GAEX,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAAgC,QAAQ,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,0BAA0B,EAC1B,YAAY,EAEZ,+BAA+B,GAChC,MAAM,kBAAkB,CAAA;AACzB,gGAAgG;AAChG,iGAAiG;AACjG,kGAAkG;AAClG,6FAA6F;AAC7F,EAAE;AACF,kGAAkG;AAClG,kGAAkG;AAClG,6FAA6F;AAC7F,qFAAqF;AACrF,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAC3B,kGAAkG;AAClG,mGAAmG;AACnG,oGAAoG;AACpG,wFAAwF;AACxF,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EAKrB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,GAEb,MAAM,kBAAkB,CAAA;AACzB,6FAA6F;AAC7F,6FAA6F;AAC7F,kGAAkG;AAClG,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,gBAAgB,EAGhB,eAAe,EAGf,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,wBAAwB,GAEzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,gBAAgB,EAChB,aAAa,EAIb,aAAa,GACd,MAAM,UAAU,CAAA;AACjB,iGAAiG;AACjG,gGAAgG;AAChG,iGAAiG;AACjG,2DAA2D;AAC3D,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,aAAa,EAEb,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,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,kGAAkG;AAClG,gGAAgG;AAChG,2CAA2C;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EACL,kBAAkB,EAElB,eAAe,EAEf,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,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/io.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,MAAM,WAAW,EAAE;IACjB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAChE,+DAA+D;IAC/D,MAAM,CAAC,CAAC,SAAS,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,EAC/C,YAAY,EAAE,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAAA;IACb,yFAAyF;IACzF,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACvC,qBAAqB;IACrB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAChE,yFAAyF;IACzF,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACxC;AAED,gGAAgG;AAChG,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,EAAE,CAAA;IACd;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,kBAAkB,CActF;
|
|
1
|
+
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,MAAM,WAAW,EAAE;IACjB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAChE,+DAA+D;IAC/D,MAAM,CAAC,CAAC,SAAS,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,EAC/C,YAAY,EAAE,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAAA;IACb,yFAAyF;IACzF,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACvC,qBAAqB;IACrB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAChE,yFAAyF;IACzF,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACxC;AAED,gGAAgG;AAChG,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,EAAE,CAAA;IACd;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,kBAAkB,CActF;AA6BD,8EAA8E;AAC9E,wBAAgB,eAAe,IAAI,EAAE,CA4DpC"}
|
package/dist/io.js
CHANGED
|
@@ -39,9 +39,27 @@ export function openCommand(url, platform) {
|
|
|
39
39
|
return { cmd: 'xdg-open', args: [href] };
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* A clack prompt resolved to a cancel symbol (Ctrl-C / Esc): print a notice and exit cleanly. The
|
|
44
|
+
* ONE seam every prompt result passes through, so it is the only place that has to know about it.
|
|
45
|
+
*
|
|
46
|
+
* The guard is TWO conditions, and the second is what keeps the return total with no assertion.
|
|
47
|
+
* Each prompt is declared as `Promise<T | symbol>`, with the WIDE `symbol`, while `isCancel`
|
|
48
|
+
* narrows to `value is typeof CANCEL_SYMBOL`, one UNIQUE symbol belonging to the `@clack/core`
|
|
49
|
+
* module instance that minted it. Control flow cannot subtract a unique symbol from the wide type,
|
|
50
|
+
* so `isCancel` alone leaves the surviving branch at `T | symbol`; `typeof value === 'symbol'`
|
|
51
|
+
* subtracts the rest, and TypeScript narrows to `T` on its own.
|
|
52
|
+
*
|
|
53
|
+
* That second condition also catches a cancel `isCancel` does not recognise. Two copies of
|
|
54
|
+
* `@clack/core` in the graph (a direct dependency and a transitive one on a different range) are
|
|
55
|
+
* two unique symbols, and the guard only knows the one its own copy exported. Asserting `as T`
|
|
56
|
+
* over that case hands the symbol back as a value: `question` calls `.trim()` on it and dies with
|
|
57
|
+
* a `TypeError` where this seam exists to exit 130, and `select` returns it as a `T extends string`
|
|
58
|
+
* for the caller to branch on. Exiting on ANY symbol is right whichever copy produced it, since
|
|
59
|
+
* none of these prompts resolves to a symbol for any other reason.
|
|
60
|
+
*/
|
|
43
61
|
function bailIfCancelled(value) {
|
|
44
|
-
if (isCancel(value)) {
|
|
62
|
+
if (isCancel(value) || typeof value === 'symbol') {
|
|
45
63
|
cancel('Cancelled.');
|
|
46
64
|
process.exit(130);
|
|
47
65
|
}
|
package/dist/io.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EACL,MAAM,EACN,OAAO,IAAI,YAAY,EACvB,QAAQ,EACR,GAAG,EAEH,QAAQ,EACR,MAAM,IAAI,WAAW,EACrB,IAAI,GACL,MAAM,gBAAgB,CAAA;AAqCvB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,QAAyB;IAChE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;IAC9B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAA;QACtC,KAAK,OAAO;YACV,OAAO;gBACL,GAAG,EAAE,KAAK;gBACV,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC;gBACxC,wBAAwB,EAAE,IAAI;aAC/B,CAAA;QACH;YACE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAA;IAC5C,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"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"}
|
package/dist/plan.d.ts
CHANGED
|
@@ -10,6 +10,13 @@ export interface PlannedFile {
|
|
|
10
10
|
/** Everything the orchestrator needs to render the full project. Fully resolved (no prompting). */
|
|
11
11
|
export interface BootstrapInput {
|
|
12
12
|
projectName: string;
|
|
13
|
+
/**
|
|
14
|
+
* The Compose project name keying this deployment's container, network and database volume,
|
|
15
|
+
* resolved by `composeProjectNameFor` from the target DIRECTORY. Required rather than derived
|
|
16
|
+
* here because the planner never sees that directory, and a defaulted one would silently put
|
|
17
|
+
* two deployments back in a single Compose project.
|
|
18
|
+
*/
|
|
19
|
+
composeProjectName: string;
|
|
13
20
|
appTitle: string;
|
|
14
21
|
provider: VcsProvider;
|
|
15
22
|
token: string;
|
package/dist/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAcA,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;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,CAAA;IAC1B,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,8FAA8F;IAC9F,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,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,CA0D9D"}
|
package/dist/plan.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { COMPOSE_FILE_PATH } from './composeProject.js';
|
|
1
2
|
import { buildFrontendEnv, buildLocalEnv } from './env.js';
|
|
2
3
|
import { buildGitignore, mergeGitignore } from './gitignore.js';
|
|
3
4
|
import { dockerCompose, frontendEnvExample, frontendNuxtConfig, frontendPackageJson, frontendWranglerToml, localEnvExample, localMainTs, localPackageJson, tsconfigJson, } from './templates.js';
|
|
@@ -29,7 +30,13 @@ export function buildPlan(input) {
|
|
|
29
30
|
// Local-mode backend.
|
|
30
31
|
{ path: 'local/package.json', content: localPackageJson(input.projectName) },
|
|
31
32
|
{ path: 'local/src/main.ts', content: localMainTs },
|
|
32
|
-
{
|
|
33
|
+
{
|
|
34
|
+
path: COMPOSE_FILE_PATH,
|
|
35
|
+
content: dockerCompose({
|
|
36
|
+
databaseUrl: input.databaseUrl,
|
|
37
|
+
composeProjectName: input.composeProjectName,
|
|
38
|
+
}),
|
|
39
|
+
},
|
|
33
40
|
{ path: 'local/tsconfig.json', content: tsconfigJson },
|
|
34
41
|
{
|
|
35
42
|
path: 'local/.env.example',
|
|
@@ -114,6 +121,12 @@ cd local
|
|
|
114
121
|
npm run db:up # start local Postgres (docker compose)
|
|
115
122
|
npm start # migrate + serve the API on :${input.port}
|
|
116
123
|
\`\`\`
|
|
124
|
+
|
|
125
|
+
Both scripts act on the Compose project \`${input.composeProjectName}\`, declared as \`name:\` in
|
|
126
|
+
\`local/docker-compose.yml\`, so this deployment's Postgres container and its
|
|
127
|
+
\`${input.composeProjectName}_cat-factory-pg\` volume are its own. Inspect them from anywhere with
|
|
128
|
+
\`docker compose -p ${input.composeProjectName} ps\`. Another deployment scaffolded into a
|
|
129
|
+
directory of the same name would share them, so give each one its own directory name.
|
|
117
130
|
${dbUpRuntimeNote(input.containerRuntime)}
|
|
118
131
|
At least one **model provider** must be configured or no model is selectable. The simplest is
|
|
119
132
|
Cloudflare Workers AI over REST — set \`CLOUDFLARE_ACCOUNT_ID\` + \`CLOUDFLARE_API_TOKEN\` in
|
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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"}
|
package/dist/slug.d.ts
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
/** Coerce arbitrary text into a valid npm-name slug. Returns `fallback` if nothing usable remains. */
|
|
2
2
|
export declare function slugifyProjectName(input: string, fallback?: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* The generated SPA's Cloudflare Pages project name, complete with its suffix so the value is
|
|
5
|
+
* assembled in exactly one place.
|
|
6
|
+
*
|
|
7
|
+
* Pages accepts only lowercase letters, digits and hyphens, which is stricter than the npm slug
|
|
8
|
+
* this narrows: `acme.site` and `my_app` are valid npm names that `wrangler pages deploy`
|
|
9
|
+
* rejects, so leaving them in place ships a deploy target that is dead on arrival.
|
|
10
|
+
*
|
|
11
|
+
* Takes a slug already resolved by {@link slugifyProjectName}, whose first and last characters
|
|
12
|
+
* are therefore `[a-z0-9]`: that is what keeps the narrowed name non-empty and free of the
|
|
13
|
+
* leading/trailing hyphen Pages also refuses.
|
|
14
|
+
*/
|
|
15
|
+
export declare function pagesProjectName(projectSlug: string): string;
|
|
3
16
|
//# sourceMappingURL=slug.d.ts.map
|
package/dist/slug.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"AAgBA,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAgB,GAAG,MAAM,CAWlF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG5D"}
|
package/dist/slug.js
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
// The project name
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
1
|
+
// The names the scaffold derives from the project name answered at setup. Each target has its
|
|
2
|
+
// OWN charset rule, and sharing one rule across two of them is how a name that is legal in one
|
|
3
|
+
// system silently breaks (or changes meaning) in another:
|
|
4
|
+
//
|
|
5
|
+
// - npm package names (`<slug>-local` / `<slug>-frontend` in the generated `package.json`s):
|
|
6
|
+
// lowercase, no spaces, `.` and `_` allowed but never leading. `slugifyProjectName`, the
|
|
7
|
+
// value carried as `BootstrapInput.projectName`.
|
|
8
|
+
// - the Cloudflare Pages project (`frontend/wrangler.toml`): lowercase letters, digits and
|
|
9
|
+
// hyphens only, so the npm slug's `.`/`_` cannot survive. `pagesProjectName`.
|
|
10
|
+
// - the Compose project that keys the deployment's containers and database volume: derived
|
|
11
|
+
// from the deployment DIRECTORY rather than from this slug, so it lives in
|
|
12
|
+
// `composeProject.ts`.
|
|
13
|
+
//
|
|
14
|
+
// A free-text answer like "My Cats" would otherwise produce `"My Cats-local"`, which
|
|
15
|
+
// `npm install` rejects.
|
|
6
16
|
/** Coerce arbitrary text into a valid npm-name slug. Returns `fallback` if nothing usable remains. */
|
|
7
17
|
export function slugifyProjectName(input, fallback = 'cat-factory') {
|
|
8
18
|
const slug = input
|
|
@@ -16,4 +26,20 @@ export function slugifyProjectName(input, fallback = 'cat-factory') {
|
|
|
16
26
|
.replace(/[._-]+$/, '');
|
|
17
27
|
return slug.length > 0 ? slug : fallback;
|
|
18
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* The generated SPA's Cloudflare Pages project name, complete with its suffix so the value is
|
|
31
|
+
* assembled in exactly one place.
|
|
32
|
+
*
|
|
33
|
+
* Pages accepts only lowercase letters, digits and hyphens, which is stricter than the npm slug
|
|
34
|
+
* this narrows: `acme.site` and `my_app` are valid npm names that `wrangler pages deploy`
|
|
35
|
+
* rejects, so leaving them in place ships a deploy target that is dead on arrival.
|
|
36
|
+
*
|
|
37
|
+
* Takes a slug already resolved by {@link slugifyProjectName}, whose first and last characters
|
|
38
|
+
* are therefore `[a-z0-9]`: that is what keeps the narrowed name non-empty and free of the
|
|
39
|
+
* leading/trailing hyphen Pages also refuses.
|
|
40
|
+
*/
|
|
41
|
+
export function pagesProjectName(projectSlug) {
|
|
42
|
+
const narrowed = projectSlug.replace(/[^a-z0-9-]+/g, '-').replace(/-+/g, '-');
|
|
43
|
+
return `${narrowed}-frontend`;
|
|
44
|
+
}
|
|
19
45
|
//# sourceMappingURL=slug.js.map
|
package/dist/slug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,+FAA+F;AAC/F,0DAA0D;AAC1D,EAAE;AACF,+FAA+F;AAC/F,6FAA6F;AAC7F,qDAAqD;AACrD,6FAA6F;AAC7F,kFAAkF;AAClF,6FAA6F;AAC7F,+EAA+E;AAC/E,2BAA2B;AAC3B,EAAE;AACF,qFAAqF;AACrF,yBAAyB;AAEzB,sGAAsG;AACtG,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,QAAQ,GAAG,aAAa;IACxE,MAAM,IAAI,GAAG,KAAK;SACf,IAAI,EAAE;SACN,WAAW,EAAE;QACd,sDAAsD;SACrD,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;QAC/B,2FAA2F;SAC1F,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACzB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;AAC1C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC7E,OAAO,GAAG,QAAQ,WAAW,CAAA;AAC/B,CAAC"}
|
package/dist/templates.d.ts
CHANGED
|
@@ -23,7 +23,16 @@ export declare const NATIVE_HARNESSES: readonly ['claude-code', 'codex'];
|
|
|
23
23
|
export type NativeHarness = (typeof NATIVE_HARNESSES)[number];
|
|
24
24
|
export declare const localPackageJson: (projectName: string) => string;
|
|
25
25
|
export declare const localMainTs = "// Local-mode backend entry point.\n//\n// Calls the reusable @cat-factory/local-server library's startLocal(): connect to the local\n// Postgres (DATABASE_URL), run the schema migration, boot pg-boss + the durable execution\n// worker, and serve the shared Hono app. Agent jobs run as per-run local containers and GitHub\n// is reached via the PAT in .env. Node 24+ runs this TypeScript directly via type stripping\n// (npm start = `node --env-file-if-exists=.env src/main.ts`), so edits here take effect with no\n// build step.\nimport { startLocal } from '@cat-factory/local-server'\n\nstartLocal().catch((err: unknown) => {\n console.error('failed to start cat-factory local server:', err)\n process.exit(1)\n})\n";
|
|
26
|
-
export
|
|
26
|
+
export interface DockerComposeInput {
|
|
27
|
+
/** The deployment's `DATABASE_URL`: the Postgres credentials/db/port are read back off it. */
|
|
28
|
+
databaseUrl: string;
|
|
29
|
+
/**
|
|
30
|
+
* The deployment's Compose project name, ALREADY resolved by `composeProjectNameFor` (it is
|
|
31
|
+
* derived from the deployment directory, which the templates never see). Written verbatim.
|
|
32
|
+
*/
|
|
33
|
+
composeProjectName: string;
|
|
34
|
+
}
|
|
35
|
+
export declare const dockerCompose: (input: DockerComposeInput) => string;
|
|
27
36
|
/** Non-secret inputs shown in `local/.env.example`, kept in sync with the populated `.env`. */
|
|
28
37
|
export interface LocalEnvExampleInput {
|
|
29
38
|
provider?: 'github' | 'gitlab';
|
package/dist/templates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,oBAAoB,YAAY,CAAA;AAC7C,eAAO,MAAM,WAAW,YAAY,CAAA;AAMpC;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,qDAAqD,CAAA;AAEvF,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,MAAM,WAAW,kBAAkB;IACjC,8FAA8F;IAC9F,WAAW,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAcD,eAAO,MAAM,aAAa,UAAW,kBAAkB,KAAG,MA8CzD,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;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,eAAe,CAAC,EAAE,aAAa,EAAE,CAAA;CAClC;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YACjC,sFAAsF,EACtF,uFAAuF,EACvF,uFAAuF,EACvF,wFAAwF,EACxF,sFAAsF,EACtF,qFAAqF,EACrF,yCAAyC,CACjC,CAAA;AAEV;;;GAGG;AACH,eAAO,MAAM,oBAAoB,kBAAmB,MAAM,KAAG,MAAM,EAKlE,CAAA;AAED,eAAO,MAAM,eAAe,WAAW,oBAAoB,KAAQ,MA6ElE,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,MAY1D,CAAA;AAED,eAAO,MAAM,kBAAkB,wBAAwC,MAItE,CAAA;AAED,eAAO,MAAM,YAAY,sNAUxB,CAAA"}
|
package/dist/templates.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { pagesProjectName } from './slug.js';
|
|
1
2
|
// Static file templates for the scaffolded deployment. These mirror `deploy/local` and
|
|
2
3
|
// `deploy/frontend` in this repo, but depend on the PUBLISHED libraries (not `workspace:*`) so
|
|
3
4
|
// the generated project works standalone outside the monorepo.
|
|
@@ -74,17 +75,27 @@ startLocal().catch((err: unknown) => {
|
|
|
74
75
|
process.exit(1)
|
|
75
76
|
})
|
|
76
77
|
`;
|
|
77
|
-
|
|
78
|
+
/**
|
|
79
|
+
* YAML-quote a value read out of the DATABASE_URL and escape it for Compose's OWN `${}`
|
|
80
|
+
* interpolation. Both halves are load-bearing: as a bare scalar a password holding `: ` breaks
|
|
81
|
+
* the parse and one starting with `[`/`{`/`*` becomes a flow collection or an alias, and a `$`
|
|
82
|
+
* in a quoted value is still read as a variable reference, so Compose would create the container
|
|
83
|
+
* with a password that no longer matches the DATABASE_URL the backend authenticates with.
|
|
84
|
+
*/
|
|
85
|
+
const composeValue = (value) => JSON.stringify(value).replace(/\$/g, '$$$$');
|
|
86
|
+
/** Quote a value that reaches a SHELL, inside the healthcheck's `CMD-SHELL` command. */
|
|
87
|
+
const shellArg = (value) => `'${value.replace(/'/g, `'\\''`)}'`;
|
|
88
|
+
export const dockerCompose = (input) => {
|
|
78
89
|
// Derive the compose credentials/db from the DATABASE_URL so the two always agree.
|
|
79
90
|
let user = 'cat';
|
|
80
91
|
let password = 'cat';
|
|
81
92
|
let db = 'catfactory';
|
|
82
93
|
let port = '5432';
|
|
83
94
|
try {
|
|
84
|
-
const u = new URL(
|
|
95
|
+
const u = new URL(input.databaseUrl);
|
|
85
96
|
user = decodeURIComponent(u.username) || user;
|
|
86
97
|
password = decodeURIComponent(u.password) || password;
|
|
87
|
-
db = u.pathname.replace(/^\//, '') || db;
|
|
98
|
+
db = decodeURIComponent(u.pathname.replace(/^\//, '')) || db;
|
|
88
99
|
port = u.port || port;
|
|
89
100
|
}
|
|
90
101
|
catch {
|
|
@@ -94,19 +105,26 @@ export const dockerCompose = (dbUrl) => {
|
|
|
94
105
|
# (so it can drive the container runtime to spawn agent containers), so only Postgres lives here.
|
|
95
106
|
#
|
|
96
107
|
# docker compose up -d postgres # or: pnpm db:up
|
|
108
|
+
#
|
|
109
|
+
# The project name below keys this deployment's container, network and database volume. It is
|
|
110
|
+
# declared rather than left to Compose's default (this file's own \`local/\` directory), which
|
|
111
|
+
# every generated deployment shares: two of them would then claim one Postgres volume and the
|
|
112
|
+
# second would serve the first one's data.
|
|
113
|
+
name: ${input.composeProjectName}
|
|
114
|
+
|
|
97
115
|
services:
|
|
98
116
|
postgres:
|
|
99
117
|
image: postgres:18
|
|
100
118
|
environment:
|
|
101
|
-
POSTGRES_USER: ${user}
|
|
102
|
-
POSTGRES_PASSWORD: ${password}
|
|
103
|
-
POSTGRES_DB: ${db}
|
|
119
|
+
POSTGRES_USER: ${composeValue(user)}
|
|
120
|
+
POSTGRES_PASSWORD: ${composeValue(password)}
|
|
121
|
+
POSTGRES_DB: ${composeValue(db)}
|
|
104
122
|
ports:
|
|
105
123
|
- '${port}:5432'
|
|
106
124
|
volumes:
|
|
107
125
|
- cat-factory-pg:/var/lib/postgresql
|
|
108
126
|
healthcheck:
|
|
109
|
-
test: ['CMD-SHELL',
|
|
127
|
+
test: ['CMD-SHELL', ${composeValue(`pg_isready -U ${shellArg(user)} -d ${shellArg(db)}`)}]
|
|
110
128
|
interval: 5s
|
|
111
129
|
timeout: 5s
|
|
112
130
|
retries: 10
|
|
@@ -249,7 +267,10 @@ export const frontendWranglerToml = (projectName) => `# Cloudflare Pages config
|
|
|
249
267
|
# The SPA's backend URL is baked in at BUILD time (NUXT_PUBLIC_API_BASE), NOT here — Pages
|
|
250
268
|
# [vars] only reach Functions at runtime and this is a pure static SPA. Change \`name\` to your
|
|
251
269
|
# own Pages project.
|
|
252
|
-
|
|
270
|
+
#
|
|
271
|
+
# Pages project names take lowercase letters, digits and hyphens only, which is narrower than the
|
|
272
|
+
# npm name the rest of the scaffold uses, so this one is normalized separately.
|
|
273
|
+
name = "${pagesProjectName(projectName)}"
|
|
253
274
|
pages_build_output_dir = ".output/public"
|
|
254
275
|
compatibility_date = "2025-06-01"
|
|
255
276
|
`;
|
package/dist/templates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,+FAA+F;AAC/F,+DAA+D;AAE/D,gGAAgG;AAChG,iGAAiG;AACjG,4FAA4F;AAC5F,gGAAgG;AAChG,iGAAiG;AACjG,8FAA8F;AAC9F,gGAAgG;AAChG,8FAA8F;AAC9F,qFAAqF;AACrF,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAA;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAA;AACpC,MAAM,YAAY,GAAG,QAAQ,CAAA;AAC7B,MAAM,kBAAkB,GAAG,SAAS,CAAA;AACpC,MAAM,kBAAkB,GAAG,UAAU,CAAA;AACrC,MAAM,gBAAgB,GAAG,UAAU,CAAA;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,kDAAkD,CAAA;AAEvF,uFAAuF;AACvF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAA;AAG9F;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAU,CAAA;AAG1D,wGAAwG;AACxG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,aAAa,EAAE,OAAO,CAAU,CAAA;AAGjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,WAAmB,EAAU,EAAE,CAC9D,GAAG,IAAI,CAAC,SAAS,CACf;IACE,IAAI,EAAE,GAAG,WAAW,QAAQ;IAC5B,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,6DAA6D;IAC1E,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE;QACP,0FAA0F;QAC1F,6CAA6C;QAC7C,IAAI,EAAE,MAAM;KACb;IACD,OAAO,EAAE;QACP,KAAK,EAAE,4CAA4C;QACnD,GAAG,EAAE,oDAAoD;QACzD,OAAO,EAAE,+BAA+B;QACxC,SAAS,EAAE,qBAAqB;KACjC;IACD,YAAY,EAAE;QACZ,2BAA2B,EAAE,oBAAoB;KAClD;IACD,eAAe,EAAE;QACf,aAAa,EAAE,kBAAkB;QACjC,UAAU,EAAE,kBAAkB;KAC/B;CACF,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CAAA;AAEP,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;CAc1B,CAAA;
|
|
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.14.1",
|
|
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,12 +34,12 @@
|
|
|
34
34
|
"access": "public"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@clack/prompts": "^1.
|
|
37
|
+
"@clack/prompts": "^1.8.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@cat-factory/contracts": "0.
|
|
41
|
-
"@cat-factory/kernel": "0.
|
|
42
|
-
"@types/node": "^26.
|
|
40
|
+
"@cat-factory/contracts": "0.349.0",
|
|
41
|
+
"@cat-factory/kernel": "0.342.0",
|
|
42
|
+
"@types/node": "^26.5.0",
|
|
43
43
|
"typescript": "7.0.2",
|
|
44
44
|
"valibot": "^1.4.2",
|
|
45
45
|
"vitest": "^4.1.11"
|