@cat-factory/cli 0.10.4 → 0.10.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.js CHANGED
@@ -4,6 +4,10 @@ import { fileURLToPath } from 'node:url';
4
4
  import { ArgError, HELP_TEXT, parseArgs } from './args.js';
5
5
  import { bootstrap } from './bootstrap.js';
6
6
  import { generateEnv } from './envCommand.js';
7
+ // Kernel's describer, COPIED into this package rather than imported: `@cat-factory/kernel` is a
8
+ // devDependency here and this file is the published `bin`, so a runtime import would resolve
9
+ // through pnpm's workspace link locally and fail with ERR_MODULE_NOT_FOUND off the registry.
10
+ import { getErrorMessage } from './errorText.js';
7
11
  import { setupK3s } from './k3s.js';
8
12
  import { supervise } from './superviseCommand.js';
9
13
  function readVersion() {
@@ -51,7 +55,9 @@ async function main() {
51
55
  await bootstrap(options);
52
56
  }
53
57
  main().catch((err) => {
54
- process.stderr.write(`\ncat-factory: ${err instanceof Error ? err.message : String(err)}\n`);
58
+ // An error that describes itself as nothing (an empty message with no cause) says so as an
59
+ // empty string, so the fallback is what stops the last line of a failed run being a bare prefix.
60
+ process.stderr.write(`\ncat-factory: ${getErrorMessage(err) || 'failed for an unreported reason'}\n`);
55
61
  process.exit(1);
56
62
  });
57
63
  //# sourceMappingURL=bin.js.map
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,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD,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;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACpC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;QACxB,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,gGAAgG;AAChG,6FAA6F;AAC7F,6FAA6F;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD,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;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACpC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;QACxB,OAAM;IACR,CAAC;IAED,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,2FAA2F;IAC3F,iGAAiG;IACjG,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kBAAkB,eAAe,CAAC,GAAG,CAAC,IAAI,iCAAiC,IAAI,CAChF,CAAA;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * A thrown value as ONE line: its own message, then each cause beneath it, scrubbed and capped.
3
+ * Byte-for-byte kernel's `getErrorMessage` — see the header, and the conformity test beside it.
4
+ */
5
+ export declare function getErrorMessage(error: unknown): string;
6
+ //# sourceMappingURL=errorText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorText.d.ts","sourceRoot":"","sources":["../src/errorText.ts"],"names":[],"mappings":"AA4KA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQtD"}
@@ -0,0 +1,175 @@
1
+ // How the CLI turns a THROWN VALUE into the one line it writes to stderr before exiting.
2
+ //
3
+ // This is a deliberate COPY of `getErrorMessage` in `@cat-factory/kernel`
4
+ // (`src/shared/error-chain.logic.ts` over `src/shared/redact-secrets.logic.ts`), for the same
5
+ // reason the executor-harness copies `hostMarkdown`: this package is PUBLISHED and stays runtime
6
+ // dependency-free (its only `dependencies` entry is `@clack/prompts`), so a `workspace:*` package
7
+ // it imports at runtime would resolve locally through pnpm's link and be missing the moment
8
+ // someone runs `npx cat-factory` off the registry. `errorText.conformity.test.ts` pins the two to
9
+ // byte-identical output over a shared corpus, so the copy cannot drift: change one, change the
10
+ // other. Kernel stays a devDependency, which is what lets that test import it.
11
+ //
12
+ // Why the CLI wants the chain at all: on Node a transport failure IS a bare `TypeError: fetch
13
+ // failed`, and what actually happened (`connect ECONNREFUSED`, `self-signed certificate`,
14
+ // `getaddrinfo ENOTFOUND`) hangs off `.cause`. `cat-factory` bootstraps against GitHub, a Docker
15
+ // daemon and a k3s cluster, so "fetch failed" as the last thing a failed bootstrap prints is the
16
+ // least useful sentence available.
17
+ const REPLACEMENT = '[REDACTED]';
18
+ const PEM_PRIVATE_KEY_BEGIN = /-----BEGIN[ A-Z0-9]*PRIVATE KEY[ A-Z0-9]*-----/g;
19
+ const PEM_PRIVATE_KEY_END = /-----END[ A-Z0-9]*PRIVATE KEY[ A-Z0-9]*-----/g;
20
+ /** Drop PEM-armored private keys pasted verbatim, block and all (kernel's `redactPrivateKeyBlocks`). */
21
+ function redactPrivateKeyBlocks(value) {
22
+ PEM_PRIVATE_KEY_BEGIN.lastIndex = 0;
23
+ let begin = PEM_PRIVATE_KEY_BEGIN.exec(value);
24
+ if (begin === null)
25
+ return value;
26
+ let out = '';
27
+ let copiedTo = 0;
28
+ while (begin !== null) {
29
+ PEM_PRIVATE_KEY_END.lastIndex = begin.index + begin[0].length;
30
+ const end = PEM_PRIVATE_KEY_END.exec(value);
31
+ if (end === null)
32
+ break;
33
+ out += value.slice(copiedTo, begin.index) + REPLACEMENT;
34
+ copiedTo = end.index + end[0].length;
35
+ PEM_PRIVATE_KEY_BEGIN.lastIndex = copiedTo;
36
+ begin = PEM_PRIVATE_KEY_BEGIN.exec(value);
37
+ }
38
+ return copiedTo === 0 ? value : out + value.slice(copiedTo);
39
+ }
40
+ const ENV_VAR_NAME = /^[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)+$/;
41
+ const PROSE_WORD = /^(?:[a-z]+|[A-Z]+|[A-Z][a-z]+)$/;
42
+ const MIN_ALPHABETIC_SECRET_CHARS = 16;
43
+ /** Whether a field-name rule's captured value is a credential rather than the next word of a sentence. */
44
+ function looksLikeSecretValue(value) {
45
+ if (ENV_VAR_NAME.test(value))
46
+ return false;
47
+ return !(value.length < MIN_ALPHABETIC_SECRET_CHARS && PROSE_WORD.test(value));
48
+ }
49
+ const RULES = [
50
+ {
51
+ pattern: /\b(bearer|basic|token)\s+([A-Za-z0-9._+/=~-]{8,})/gi,
52
+ replace: (m) => (looksLikeSecretValue(m[2] ?? '') ? `${m[1]} ${REPLACEMENT}` : (m[0] ?? '')),
53
+ },
54
+ {
55
+ pattern: /\b(authorization|x-api-key|x-auth-token|proxy-authorization)(["']?\s*[:=]\s*["']?)([^\s"',}]+)/gi,
56
+ replace: (m) => `${m[1]}${m[2]}${REPLACEMENT}`,
57
+ },
58
+ {
59
+ pattern: /(?<=[a-z][a-z0-9+.-]{0,39}:\/\/)([^/\s:@]+):([^/\s@]+)@/gi,
60
+ replace: (m) => `${m[1]}:${REPLACEMENT}@`,
61
+ },
62
+ {
63
+ pattern: /\b((?:access[_-]?)?(?:api[_-]?)?(?:client[_-]?)?(?:token|secret|password|passwd|pwd|sig|signature|key|apikey|auth))(["']?\s*[:=]\s*["']?)([^\s"',&}@/]{4,})/gi,
64
+ replace: (m) => looksLikeSecretValue(m[3] ?? '') ? `${m[1]}${m[2]}${REPLACEMENT}` : (m[0] ?? ''),
65
+ },
66
+ { pattern: /\b(sk|rk|pk)-[A-Za-z0-9_-]{16,}/g, replace: () => REPLACEMENT },
67
+ { pattern: /\bgh[pousr]_[A-Za-z0-9]{20,}/g, replace: () => REPLACEMENT },
68
+ { pattern: /\bgithub_pat_[A-Za-z0-9_]{20,}/g, replace: () => REPLACEMENT },
69
+ { pattern: /\bxox[baprs]-[A-Za-z0-9-]{10,}/g, replace: () => REPLACEMENT },
70
+ { pattern: /\bAKIA[0-9A-Z]{16}\b/g, replace: () => REPLACEMENT },
71
+ {
72
+ pattern: /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,
73
+ replace: () => REPLACEMENT,
74
+ },
75
+ ];
76
+ /** Best-effort scrub of credentials from a string (kernel's `redactSecrets`, non-null input only). */
77
+ function redactSecrets(value) {
78
+ let out = redactPrivateKeyBlocks(value);
79
+ for (const rule of RULES) {
80
+ out = out.replace(rule.pattern, (...args) => {
81
+ const groups = args.slice(0, -2);
82
+ return rule.replace(groups);
83
+ });
84
+ }
85
+ return out;
86
+ }
87
+ const MAX_ERROR_CHAIN_CHARS = 400;
88
+ const MAX_CHAIN_DEPTH = 6;
89
+ const MAX_AGGREGATE_BRANCHES = 8;
90
+ const TRANSPORT_CODE = /^[A-Z][A-Z0-9_]*$/;
91
+ function readProperty(value, key) {
92
+ if (value === null || (typeof value !== 'object' && typeof value !== 'function'))
93
+ return undefined;
94
+ try {
95
+ return value[key];
96
+ }
97
+ catch {
98
+ return undefined;
99
+ }
100
+ }
101
+ function safeText(value) {
102
+ try {
103
+ return String(value);
104
+ }
105
+ catch {
106
+ return '';
107
+ }
108
+ }
109
+ function errorCode(error) {
110
+ const code = readProperty(error, 'code');
111
+ return typeof code === 'string' && code ? code : undefined;
112
+ }
113
+ function aggregated(error) {
114
+ const errors = readProperty(error, 'errors');
115
+ return Array.isArray(errors) ? errors : [];
116
+ }
117
+ function flattenErrorChain(error, depth = 0, out = [], seen = new Set()) {
118
+ if (error === null || error === undefined || depth > MAX_CHAIN_DEPTH)
119
+ return out;
120
+ if (typeof error === 'object') {
121
+ if (seen.has(error))
122
+ return out;
123
+ seen.add(error);
124
+ }
125
+ out.push(error);
126
+ const branches = aggregated(error);
127
+ for (const branch of branches.slice(0, MAX_AGGREGATE_BRANCHES))
128
+ flattenErrorChain(branch, depth + 1, out, seen);
129
+ if (branches.length > MAX_AGGREGATE_BRANCHES)
130
+ out.push(`[…${branches.length - MAX_AGGREGATE_BRANCHES} more branches not read]`);
131
+ flattenErrorChain(readProperty(error, 'cause'), depth + 1, out, seen);
132
+ return out;
133
+ }
134
+ function describeErrorLink(link) {
135
+ const message = link instanceof Error ? readProperty(link, 'message') : link;
136
+ const code = errorCode(link);
137
+ const text = safeText(message ?? '').trim();
138
+ if (!code || !TRANSPORT_CODE.test(code))
139
+ return text || code || '';
140
+ if (!text)
141
+ return code;
142
+ return text.includes(code) ? text : `${text} (${code})`;
143
+ }
144
+ function renderErrorChainLinks(links) {
145
+ const counts = new Map();
146
+ for (const link of links) {
147
+ const text = describeErrorLink(link);
148
+ if (!text)
149
+ continue;
150
+ counts.set(text, (counts.get(text) ?? 0) + 1);
151
+ }
152
+ return [...counts].map(([text, count]) => (count > 1 ? `${text} (x${count})` : text));
153
+ }
154
+ function joinErrorChain(parts) {
155
+ const text = redactSecrets(parts.join(': '));
156
+ if (text.length <= MAX_ERROR_CHAIN_CHARS)
157
+ return text;
158
+ const dropped = text.length - MAX_ERROR_CHAIN_CHARS;
159
+ return `${text.slice(0, MAX_ERROR_CHAIN_CHARS)} […${dropped} more characters of the cause chain]`;
160
+ }
161
+ /**
162
+ * A thrown value as ONE line: its own message, then each cause beneath it, scrubbed and capped.
163
+ * Byte-for-byte kernel's `getErrorMessage` — see the header, and the conformity test beside it.
164
+ */
165
+ export function getErrorMessage(error) {
166
+ const parts = renderErrorChainLinks(flattenErrorChain(error));
167
+ if (parts.length > 0)
168
+ return joinErrorChain(parts);
169
+ if (error instanceof Error) {
170
+ const name = readProperty(error, 'name');
171
+ return typeof name === 'string' && name && name !== Error.name ? joinErrorChain([name]) : '';
172
+ }
173
+ return joinErrorChain([safeText(error)]);
174
+ }
175
+ //# sourceMappingURL=errorText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorText.js","sourceRoot":"","sources":["../src/errorText.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.10.4",
3
+ "version": "0.10.5",
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",
@@ -41,8 +41,8 @@
41
41
  "typescript": "7.0.2",
42
42
  "valibot": "^1.4.2",
43
43
  "vitest": "^4.1.10",
44
- "@cat-factory/contracts": "0.292.1",
45
- "@cat-factory/kernel": "0.285.2"
44
+ "@cat-factory/contracts": "0.293.0",
45
+ "@cat-factory/kernel": "0.286.1"
46
46
  },
47
47
  "scripts": {
48
48
  "build": "tsc -b tsconfig.build.json",