predictable-ai 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,266 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { nextCommandHint, previewInstruction } from '../diagnostics.js';
3
+ import { CliError, EXIT } from '../errors.js';
4
+ import { classify, routeUnavailableReason, send } from '../http.js';
5
+ import { renderJson, renderText } from '../output.js';
6
+ import { pathBindings } from '../registry.js';
7
+ import { EXPORT_PURPOSES, writeCampaignBundle } from './bundle.js';
8
+ /** Substitute `[token]` segments from the command's flag bindings. */
9
+ function concretePath(spec, route, args) {
10
+ const bind = pathBindings(spec.name);
11
+ return route.path.replace(/\[([^\]]+)\]/g, (_match, token) => {
12
+ const flag = bind[token];
13
+ const value = flag ? args.flags.get(flag) : undefined;
14
+ if (!value) {
15
+ throw new CliError(EXIT.USAGE, `--${flag ?? token} is required for ${route.method} ${route.path}.`);
16
+ }
17
+ return encodeURIComponent(value);
18
+ });
19
+ }
20
+ function queryFor(spec, args) {
21
+ const query = {};
22
+ for (const param of spec.params) {
23
+ if (!param.query)
24
+ continue;
25
+ const value = args.flags.get(param.name);
26
+ if (value !== undefined && value !== '')
27
+ query[param.query] = value;
28
+ }
29
+ return query;
30
+ }
31
+ function checkRequired(spec, args) {
32
+ for (const param of spec.params) {
33
+ if (!param.required)
34
+ continue;
35
+ const value = args.flags.get(param.name);
36
+ if (value === undefined || value === '') {
37
+ throw new CliError(EXIT.USAGE, `--${param.name} ${param.placeholder} is required.`);
38
+ }
39
+ }
40
+ }
41
+ async function bodyFor(args, io) {
42
+ const raw = args.flags.get('body');
43
+ if (raw === undefined)
44
+ return undefined;
45
+ const text = raw === '-' ? await io.readStdin() : raw;
46
+ try {
47
+ JSON.parse(text);
48
+ }
49
+ catch {
50
+ throw new CliError(EXIT.USAGE, '--body must be JSON (or - to read JSON from stdin).');
51
+ }
52
+ return text;
53
+ }
54
+ /** The short column label a multi-route command prefixes its lines with. */
55
+ function labelFor(route) {
56
+ const segments = route.path.split('/').filter((s) => s && !s.startsWith('['));
57
+ return segments[segments.length - 1] ?? route.path;
58
+ }
59
+ async function callOne(ctx, spec, route, args, body) {
60
+ const path = concretePath(spec, route, args);
61
+ const call = {
62
+ method: route.method,
63
+ path,
64
+ // The request goes to `path`; error text names `template` instead, so an
65
+ // id the caller typed never reaches stderr.
66
+ template: route.path,
67
+ query: queryFor(spec, args),
68
+ ...(body !== undefined ? { body } : {}),
69
+ };
70
+ const response = await send(ctx, call);
71
+ let failure = classify(response, call);
72
+ if (failure && response.status === 404) {
73
+ const reason = await routeUnavailableReason(ctx, route);
74
+ if (reason)
75
+ failure = classify(response, call, reason);
76
+ }
77
+ if (failure)
78
+ throw failure;
79
+ return { path: route.path, label: labelFor(route), body: response.text };
80
+ }
81
+ function emit(results, args, io) {
82
+ if (args.booleans.has('json')) {
83
+ io.stdout(`${renderJson(results)}\n`);
84
+ return;
85
+ }
86
+ const text = renderText(results);
87
+ if (text.length > 0)
88
+ io.stdout(`${text}\n`);
89
+ }
90
+ /** A free read: every planned read route whose `when` flags were supplied. */
91
+ async function runRead(ctx, spec, args, io) {
92
+ const routes = spec.routes.filter((r) => r.role === 'read' && (r.when ?? []).every((flag) => args.flags.get(flag)));
93
+ if (routes.length === 0)
94
+ throw new CliError(EXIT.USAGE, `${spec.name} has no route to call with those flags.`);
95
+ const results = [];
96
+ for (const route of routes)
97
+ results.push(await callOne(ctx, spec, route, args));
98
+ emit(results, args, io);
99
+ }
100
+ /** A single named call, body from --body or stdin. */
101
+ async function runAction(ctx, spec, args, io) {
102
+ const actionable = spec.routes.filter((r) => r.role === 'action');
103
+ const routes = actionable.length > 0 ? actionable : spec.routes;
104
+ const wanted = args.flags.get('action') ?? spec.defaultAction;
105
+ const route = routes.length === 1
106
+ ? routes[0]
107
+ : routes.find((r) => r.action === wanted);
108
+ if (!route) {
109
+ const names = [...new Set(routes.map((r) => r.action).filter(Boolean))].join(', ');
110
+ throw new CliError(EXIT.USAGE, `--action must be one of: ${names}.`);
111
+ }
112
+ const body = await bodyFor(args, io);
113
+ emit([await callOne(ctx, spec, route, args, body ?? '{}')], args, io);
114
+ }
115
+ /** The quote fields a preview must surface, in the order they are printed. */
116
+ const QUOTE_FIELDS = ['quote_id', 'total_price_credits', 'unit_price_credits', 'expires_at'];
117
+ function renderQuote(spec, body) {
118
+ let parsed;
119
+ try {
120
+ parsed = JSON.parse(body);
121
+ }
122
+ catch {
123
+ throw new CliError(EXIT.SERVER, 'the preview did not return a quote', 'response was not JSON');
124
+ }
125
+ const quoteId = parsed.quote_id;
126
+ if (typeof quoteId !== 'string' || quoteId.length === 0) {
127
+ throw new CliError(EXIT.SERVER, 'the preview did not return a quote', 'no quote_id in the response');
128
+ }
129
+ const named = new Set(QUOTE_FIELDS);
130
+ const lines = [
131
+ ...QUOTE_FIELDS.map((field) => `${field}\t${parsed[field] ?? ''}`),
132
+ ...Object.entries(parsed)
133
+ .filter(([key, value]) => !named.has(key) && (value === null || typeof value !== 'object'))
134
+ .map(([key, value]) => `${key}\t${value ?? ''}`),
135
+ ];
136
+ return { lines: lines.join('\n'), quoteId };
137
+ }
138
+ /**
139
+ * The paid two-step (ticket AC4, spec §5.2).
140
+ *
141
+ * The refusal is LOCAL AND UNCONDITIONAL: with no --quote, this returns before
142
+ * anything is sent, so no acting POST leaves the process. Server-side quote
143
+ * enforcement is T5's (ga-mfacl.5) and is the authority; this is the client
144
+ * half, and it exists so an agent that forgets the preview gets a usable
145
+ * instruction instead of a 400 it has to parse.
146
+ */
147
+ async function runPaid(ctx, spec, args, io) {
148
+ const preview = spec.routes.find((r) => r.role === 'preview');
149
+ const acting = spec.routes.find((r) => r.role === 'act');
150
+ if (args.booleans.has('preview')) {
151
+ if (!preview)
152
+ throw new CliError(EXIT.USAGE, `${spec.name} has no preview route in this manifest.`);
153
+ const body = await bodyFor(args, io);
154
+ const result = await callOne(ctx, spec, preview, args, body ?? '{}');
155
+ // BOTH MODES GET THE HINT. --json used to return here, so the one caller
156
+ // most likely to be a script — the one piping to jq — was the one never
157
+ // told the next command. stdout still differs by mode (the verbatim body
158
+ // or the quote lines); the hint is a diagnostic and goes to stderr either
159
+ // way. In --json the body is written FIRST, so a preview that minted no
160
+ // quote still hands the caller the bytes it got before failing the way the
161
+ // default mode fails on the same response.
162
+ const json = args.booleans.has('json');
163
+ if (json)
164
+ io.stdout(`${renderJson([result])}\n`);
165
+ const { lines, quoteId } = renderQuote(spec, result.body);
166
+ if (!json)
167
+ io.stdout(`${lines}\n`);
168
+ io.stderr(nextCommandHint(spec.name, args, quoteId));
169
+ return;
170
+ }
171
+ const quote = args.flags.get('quote');
172
+ if (quote === undefined || quote.length === 0) {
173
+ throw new CliError(EXIT.QUOTE_REQUIRED, `${spec.name} spends credits and needs a quote.`, previewInstruction(spec.name, args));
174
+ }
175
+ if (!acting)
176
+ throw new CliError(EXIT.USAGE, `${spec.name} has no acting route in this manifest.`);
177
+ const supplied = await bodyFor(args, io);
178
+ const merged = {
179
+ ...(supplied ? JSON.parse(supplied) : {}),
180
+ quote_id: quote,
181
+ request_key: args.flags.get('request-key') ?? randomUUID(),
182
+ };
183
+ emit([await callOne(ctx, spec, acting, args, JSON.stringify(merged))], args, io);
184
+ }
185
+ /**
186
+ * `guide <topic>` — the manifest's coaching text.
187
+ *
188
+ * IT READS THE DEPLOYMENT, NOT THE BUNDLE, and that is the point. T15
189
+ * (ga-mfacl.17) serves each topic's body at `manifest.guides[<topic>]`; a CLI
190
+ * older than the deployment therefore prints the deployment's CURRENT coaching
191
+ * instead of a stale copy compiled into itself, and there is no hand-written
192
+ * second copy of text that has one source of truth.
193
+ *
194
+ * A deployment that serves no body for a registered topic gets the honest
195
+ * refusal below rather than a bundled fallback — see `test/guide.test.ts`.
196
+ */
197
+ async function runGuide(ctx, spec, args, io) {
198
+ const response = await send(ctx, { method: 'GET', path: '/api/agent/manifest' });
199
+ const failure = classify(response, { method: 'GET', path: '/api/agent/manifest' });
200
+ if (failure)
201
+ throw failure;
202
+ const manifest = JSON.parse(response.text);
203
+ const content = manifest.guides?.[spec.topic ?? ''];
204
+ if (content === undefined) {
205
+ throw new CliError(EXIT.SERVER, 'not available on this deployment yet', `the manifest serves no content for guide topic "${spec.topic}".`);
206
+ }
207
+ if (args.booleans.has('json')) {
208
+ io.stdout(`${JSON.stringify(content, null, 2)}\n`);
209
+ return;
210
+ }
211
+ io.stdout(`${typeof content === 'string' ? content : JSON.stringify(content, null, 2)}\n`);
212
+ }
213
+ /**
214
+ * `export campaign` — write the §3.4 bundle to `--out` (ticket AC2-AC5).
215
+ *
216
+ * The command prints a RECEIPT, not the data: the data is on disk, and echoing
217
+ * a hundred thousand contacts to stdout on the way there is how a caller's
218
+ * terminal becomes the bundle. `--json` gets the same receipt as JSON.
219
+ */
220
+ async function runBundle(ctx, spec, args, io, env, now) {
221
+ const listId = args.flags.get('list');
222
+ const outDir = args.flags.get('out');
223
+ const requested = args.flags.get('purpose') ?? 'prospecting_activation';
224
+ if (!EXPORT_PURPOSES.includes(requested)) {
225
+ throw new CliError(EXIT.USAGE, `--purpose must be one of: ${EXPORT_PURPOSES.join(', ')}.`);
226
+ }
227
+ const purpose = requested;
228
+ const sequenceId = args.flags.get('sequence');
229
+ const result = await writeCampaignBundle({
230
+ ctx,
231
+ listId,
232
+ outDir,
233
+ purpose,
234
+ env,
235
+ now,
236
+ ...(sequenceId ? { sequenceId } : {}),
237
+ });
238
+ if (args.booleans.has('json')) {
239
+ io.stdout(`${JSON.stringify({ directory: result.directory, files: result.files }, null, 2)}\n`);
240
+ return;
241
+ }
242
+ const lines = Object.entries(result.files).map(([file, bytes]) => `${file}\t${bytes}`);
243
+ io.stdout(`${[result.directory, ...lines].join('\n')}\n`);
244
+ // `reporting_history` skips the suppression filter by design (§6). A bundle
245
+ // that did so says so on stderr, every time — a deliberate bypass that leaves
246
+ // no trace in the operator's terminal is a bypass nobody remembers making.
247
+ if (purpose === 'reporting_history') {
248
+ io.stderr('note: --purpose reporting_history bypasses suppression filtering; manifest.json records it.\n');
249
+ }
250
+ }
251
+ export async function executeCommand(ctx, spec, args, io, env = process.env, now = new Date().toISOString()) {
252
+ checkRequired(spec, args);
253
+ switch (spec.mode) {
254
+ case 'read':
255
+ return runRead(ctx, spec, args, io);
256
+ case 'action':
257
+ return runAction(ctx, spec, args, io);
258
+ case 'paid':
259
+ return runPaid(ctx, spec, args, io);
260
+ case 'bundle':
261
+ return runBundle(ctx, spec, args, io, env, now);
262
+ case 'guide':
263
+ return runGuide(ctx, spec, args, io);
264
+ }
265
+ }
266
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"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"}
package/dist/config.js ADDED
@@ -0,0 +1,93 @@
1
+ import { readFileSync, statSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ /**
5
+ * Token and base-URL resolution (spec D-k, ticket AC5).
6
+ *
7
+ * THE TOKEN IS NEVER READ FROM ARGV. There is no --token flag and no positional
8
+ * token anywhere in this CLI: a token on a command line lands in the shell
9
+ * history, in `ps` output for every user on the box, and in CI logs. The two
10
+ * sanctioned channels are the environment and a file the user owns.
11
+ * `test/hygiene.test.ts` asserts that no --help text and no README example ever
12
+ * puts one on a command line.
13
+ */
14
+ export const TOKEN_ENV_VAR = 'PREDICTABLE_TOKEN';
15
+ export const BASE_URL_ENV_VAR = 'PREDICTABLE_BASE_URL';
16
+ /** Spec D-k: the base URL defaults to production and is overridable. */
17
+ export const DEFAULT_BASE_URL = 'https://www.predictable.ai';
18
+ export const CONFIG_DIR_NAME = '.predictable';
19
+ export const CONFIG_FILE_NAME = 'config.json';
20
+ export function configPath(home = homedir()) {
21
+ return join(home, CONFIG_DIR_NAME, CONFIG_FILE_NAME);
22
+ }
23
+ /**
24
+ * Resolve the token: PREDICTABLE_TOKEN first, then ~/.predictable/config.json.
25
+ *
26
+ * A config file that is group- or world-readable is a finding, not a failure:
27
+ * refusing to run would strand a user mid-script with a credential they can
28
+ * still see, so the CLI warns on stderr and proceeds. The warning names the
29
+ * mode and the path — never the token.
30
+ */
31
+ export function resolveToken({ env, home }) {
32
+ const warnings = [];
33
+ const fromEnv = env[TOKEN_ENV_VAR];
34
+ if (typeof fromEnv === 'string' && fromEnv.trim().length > 0) {
35
+ return { token: fromEnv.trim(), source: 'env', warnings };
36
+ }
37
+ const path = configPath(home ?? homedir());
38
+ let raw;
39
+ try {
40
+ const stat = statSync(path);
41
+ // 0o077 = any permission bit for group or other.
42
+ if ((stat.mode & 0o077) !== 0) {
43
+ warnings.push(`${path} is readable beyond its owner (mode ${(stat.mode & 0o777).toString(8)}); run chmod 600 on it.`);
44
+ }
45
+ raw = readFileSync(path, 'utf8');
46
+ }
47
+ catch {
48
+ return { token: undefined, source: 'none', warnings };
49
+ }
50
+ let parsed;
51
+ try {
52
+ parsed = JSON.parse(raw);
53
+ }
54
+ catch {
55
+ warnings.push(`${path} is not valid JSON; ignoring it.`);
56
+ return { token: undefined, source: 'none', warnings };
57
+ }
58
+ const token = parsed?.token;
59
+ if (typeof token !== 'string' || token.trim().length === 0) {
60
+ return { token: undefined, source: 'none', warnings };
61
+ }
62
+ return { token: token.trim(), source: 'config-file', warnings };
63
+ }
64
+ /** The deployment to talk to. Every test overrides this to a local stub. */
65
+ export function resolveBaseUrl(env) {
66
+ const override = env[BASE_URL_ENV_VAR];
67
+ const chosen = typeof override === 'string' && override.trim().length > 0 ? override.trim() : DEFAULT_BASE_URL;
68
+ return chosen.replace(/\/+$/, '');
69
+ }
70
+ /**
71
+ * An extra header for QA against a protected preview deployment, e.g.
72
+ * `PREDICTABLE_EXTRA_HEADER='x-vercel-protection-bypass: <secret>'`. It exists
73
+ * so the token-mode run against a preview needs no code change; it is never
74
+ * required against production.
75
+ */
76
+ export const EXTRA_HEADER_ENV_VAR = 'PREDICTABLE_EXTRA_HEADER';
77
+ export function resolveExtraHeaders(env) {
78
+ const raw = env[EXTRA_HEADER_ENV_VAR];
79
+ if (typeof raw !== 'string' || raw.trim().length === 0)
80
+ return {};
81
+ const headers = {};
82
+ for (const pair of raw.split('\n')) {
83
+ const at = pair.indexOf(':');
84
+ if (at <= 0)
85
+ continue;
86
+ const name = pair.slice(0, at).trim();
87
+ const value = pair.slice(at + 1).trim();
88
+ if (name && value)
89
+ headers[name] = value;
90
+ }
91
+ return headers;
92
+ }
93
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAA;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAA;AAEtD,wEAAwE;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAA4B,CAAA;AAE5D,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAA;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAA;AAe7C,MAAM,UAAU,UAAU,CAAC,IAAI,GAAG,OAAO,EAAE;IACzC,OAAO,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAA;AACtD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,GAAG,EAAE,IAAI,EAAO;IAC7C,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,CAAA;IAClC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;IAC3D,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAA;IAC1C,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC3B,iDAAiD;QACjD,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CACX,GAAG,IAAI,uCAAuC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CACvG,CAAA;QACH,CAAC;QACD,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IACvD,CAAC;IAED,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,kCAAkC,CAAC,CAAA;QACxD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IACvD,CAAC;IAED,MAAM,KAAK,GAAI,MAAqC,EAAE,KAAK,CAAA;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IACvD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAA;AACjE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,GAAsB;IACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IACtC,MAAM,MAAM,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAA;IAC9G,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,0BAA0B,CAAA;AAE9D,MAAM,UAAU,mBAAmB,CAAC,GAAsB;IACxD,MAAM,GAAG,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACrC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACjE,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,EAAE,IAAI,CAAC;YAAE,SAAQ;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACvC,IAAI,IAAI,IAAI,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;IAC1C,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,99 @@
1
+ import { CONFIG_DIR_NAME, CONFIG_FILE_NAME, TOKEN_ENV_VAR } from './config.js';
2
+ /**
3
+ * Every message that could carry something the user typed, in one place.
4
+ *
5
+ * THE RULE (owner ruling, round 2). A diagnostic NEVER prints a value the user
6
+ * supplied on the command line. It prints the SHAPE — how many words, how many
7
+ * flags — and the command to run for the real answer. The reason is a
8
+ * credential: a caller who types `predictable --token agt_...` has already put
9
+ * a secret on a command line, and a CLI that answers `unknown command: agt_...`
10
+ * copies it into stderr, which in CI is a log file somebody keeps.
11
+ *
12
+ * WHY ONE MODULE. Ticket AC5's hygiene proof was a lint over help text, and a
13
+ * lint over text cannot see a runtime echo. The durable fence is that there is
14
+ * exactly ONE place a diagnostic string gets built from input, so a later
15
+ * branch cannot re-introduce an echo by writing its own template literal:
16
+ * `test/argv-hygiene.test.ts` then proves the whole set behaviorally, by
17
+ * spawning the shipped binary and reading both streams.
18
+ *
19
+ * WHAT MAY BE PRINTED. Flag names we declare are ours and are printed freely.
20
+ * A value is printed only through `hintFlags`, and only for the identifying
21
+ * flags a copy-pasteable next command needs — never for an unknown flag, an
22
+ * unknown command, or a leftover word, whose text is by definition whatever
23
+ * the caller typed.
24
+ */
25
+ /**
26
+ * Our own credential prefix, measured from `dashboard/src/middleware.ts`
27
+ * (`AGENT_TOKEN_PREFIX`): a minted token is `agt_` + 32 hex. It is here so the
28
+ * one place that may echo a value can still refuse to echo a credential that
29
+ * was typed into the wrong flag.
30
+ */
31
+ export const CREDENTIAL_PREFIX = 'agt_';
32
+ /** What a value is replaced by when it must not be printed. */
33
+ export const REDACTED = '<redacted>';
34
+ function words(count) {
35
+ return `${count} word${count === 1 ? '' : 's'}`;
36
+ }
37
+ /** A value is safe to repeat back only when it is not one of our credentials. */
38
+ export function redactCredential(value) {
39
+ return value.startsWith(CREDENTIAL_PREFIX) ? REDACTED : value;
40
+ }
41
+ /**
42
+ * The command line named no command this CLI knows.
43
+ *
44
+ * The root help follows this line and lists every command, so naming the count
45
+ * rather than the words costs the caller nothing they cannot see on their own
46
+ * screen.
47
+ */
48
+ export function unknownCommandLine(count) {
49
+ if (count === 0)
50
+ return 'unknown command; the commands this CLI knows are below.\n';
51
+ return `unknown command (${words(count)}); the commands this CLI knows are below.\n`;
52
+ }
53
+ /** Words left over after a command name. Commands take no positionals. */
54
+ export function unexpectedArgumentLine(command, count) {
55
+ return `unexpected argument after ${command} (${words(count)}); this command takes flags only.\n`;
56
+ }
57
+ /**
58
+ * Flags this command does not declare.
59
+ *
60
+ * The NAMES are not printed: an unknown flag's name is whatever the caller
61
+ * typed, so `--agt_deadbeef` would echo a credential just as surely as a value
62
+ * would. `--help` below prints every flag the command does declare.
63
+ */
64
+ export function unknownFlagLine(command, count) {
65
+ return `${count} unknown flag${count === 1 ? '' : 's'} for ${command}; it accepts only the flags in its --help.\n`;
66
+ }
67
+ /** The two sanctioned token channels, for a caller who put one in argv. */
68
+ export function tokenFlagRefusalLine() {
69
+ return (`there is no --token flag: set ${TOKEN_ENV_VAR}, or put {"token": "..."} in ` +
70
+ `~/${CONFIG_DIR_NAME}/${CONFIG_FILE_NAME}\n`);
71
+ }
72
+ /** Point the caller at the help that answers what they got wrong. */
73
+ export function runHelpLine(command) {
74
+ return `Run: predictable ${command ? `${command} ` : ''}--help\n`;
75
+ }
76
+ /**
77
+ * The identifying flags a suggested next command has to repeat.
78
+ *
79
+ * This is the ONE place a value the caller typed is printed back, and the list
80
+ * is closed: a list, a column and a sequence id name WHICH records the next
81
+ * command acts on, and a next command missing them is not runnable. Anything
82
+ * carrying our credential prefix is redacted even here — a token typed into
83
+ * `--list` is still a token.
84
+ */
85
+ const HINT_FLAGS = ['list', 'column', 'sequence'];
86
+ export function hintFlags(args) {
87
+ return HINT_FLAGS.filter((name) => args.flags.get(name))
88
+ .map((name) => ` --${name} ${redactCredential(args.flags.get(name))}`)
89
+ .join('');
90
+ }
91
+ /** After a preview: the exact command that spends against the minted quote. */
92
+ export function nextCommandHint(command, args, quoteId) {
93
+ return `Next: predictable ${command} --quote ${quoteId}${hintFlags(args)}\n`;
94
+ }
95
+ /** Before a paid call with no quote: the preview command that mints one. */
96
+ export function previewInstruction(command, args) {
97
+ return `Run: predictable ${command} --preview${hintFlags(args)} then re-run with --quote <id>. Nothing was sent.`;
98
+ }
99
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE9E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAEvC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAA;AAEpC,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,GAAG,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;AACjD,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAA;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,2DAA2D,CAAA;IACnF,OAAO,oBAAoB,KAAK,CAAC,KAAK,CAAC,6CAA6C,CAAA;AACtF,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,KAAa;IACnE,OAAO,6BAA6B,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAA;AACnG,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,KAAa;IAC5D,OAAO,GAAG,KAAK,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,8CAA8C,CAAA;AACpH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB;IAClC,OAAO,CACL,iCAAiC,aAAa,+BAA+B;QAC7E,KAAK,eAAe,IAAI,gBAAgB,IAAI,CAC7C,CAAA;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO,oBAAoB,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAA;AACnE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAA;AAE1D,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACrD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,EAAE,CAAC;SACtE,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,IAAgB,EAAE,OAAe;IAChF,OAAO,qBAAqB,OAAO,YAAY,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAA;AAC9E,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,IAAgB;IAClE,OAAO,oBAAoB,OAAO,aAAa,SAAS,CAAC,IAAI,CAAC,qDAAqD,CAAA;AACrH,CAAC"}
package/dist/errors.js ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Exit codes are part of the CLI's contract: a caller pipes `predictable` in a
3
+ * script and branches on the code. They are documented in README.md and
4
+ * asserted in `test/output.test.ts`.
5
+ */
6
+ export const EXIT = {
7
+ OK: 0,
8
+ /** Bad flags, unknown command, missing required argument. */
9
+ USAGE: 1,
10
+ /** The server refused the credential: 401 or 403. */
11
+ AUTH: 2,
12
+ /** 429. The Retry-After the server sent is echoed on stderr. */
13
+ RATE_LIMITED: 3,
14
+ /** 5xx, an unreachable host, or a verb not available on this deployment. */
15
+ SERVER: 4,
16
+ /** A paid acting command was invoked without --quote. Nothing was sent. */
17
+ QUOTE_REQUIRED: 5,
18
+ };
19
+ /** An error that carries the exit code the process should end with. */
20
+ export class CliError extends Error {
21
+ code;
22
+ detail;
23
+ constructor(code, message, detail) {
24
+ super(message);
25
+ this.name = 'CliError';
26
+ this.code = code;
27
+ this.detail = detail;
28
+ }
29
+ }
30
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,EAAE,EAAE,CAAC;IACL,6DAA6D;IAC7D,KAAK,EAAE,CAAC;IACR,qDAAqD;IACrD,IAAI,EAAE,CAAC;IACP,gEAAgE;IAChE,YAAY,EAAE,CAAC;IACf,4EAA4E;IAC5E,MAAM,EAAE,CAAC;IACT,2EAA2E;IAC3E,cAAc,EAAE,CAAC;CACT,CAAA;AAIV,uEAAuE;AACvE,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAU;IACd,MAAM,CAAoB;IAEnC,YAAY,IAAc,EAAE,OAAe,EAAE,MAAe;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF"}