@solidnumber/cli 2.3.2 → 2.4.2

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,64 @@
1
+ /**
2
+ * render-llms — pure rendering of the auto-generated CLI section that
3
+ * gets stamped into platform-docs/llms.txt at build time.
4
+ *
5
+ * No I/O, no commander, no exec. Takes a verb manifest (the same shape
6
+ * `solid schema verbs --json` emits) and returns the markdown string
7
+ * that goes between the AUTO:BEGIN / AUTO:END markers.
8
+ *
9
+ * Why a pure renderer:
10
+ * 1. Unit-testable without booting the CLI.
11
+ * 2. Same renderer can power a future
12
+ * `solid schema docs --format=llms` command, so the doc shape
13
+ * lives in one place.
14
+ *
15
+ * Drift killer: every claim in the rendered section comes straight off
16
+ * the verb manifest. Group counts, subcommand counts, missing verbs,
17
+ * version — all auto-derived. The hand-maintained variant of this
18
+ * section had drifted to ~1/3 truth by v2.3.2 (see ANGL feedback,
19
+ * 2026-05-07).
20
+ */
21
+ export interface ManifestOption {
22
+ flags: string;
23
+ description: string;
24
+ }
25
+ export interface ManifestVerb {
26
+ verb: string;
27
+ path: string;
28
+ description: string;
29
+ depth: number;
30
+ subcommands: string[];
31
+ is_leaf: boolean;
32
+ options?: ManifestOption[];
33
+ }
34
+ export interface VerbManifest {
35
+ version: string;
36
+ cli_version: string;
37
+ count: number;
38
+ verbs: ManifestVerb[];
39
+ }
40
+ export interface RenderInput {
41
+ manifest: VerbManifest;
42
+ /** ISO date — embedded so agents can spot stale tarballs. */
43
+ generated_at: string;
44
+ }
45
+ export interface RenderedSections {
46
+ /** Replaces content between CLI:AUTO:BEGIN and CLI:AUTO:END. */
47
+ cli: string;
48
+ /** Replaces content between CLI:Q&A:BEGIN and CLI:Q&A:END (the FAQ line). */
49
+ faq_cli: string;
50
+ }
51
+ export declare function renderCliSection(input: RenderInput): string;
52
+ export declare function renderCliFaqAnswer(manifest: VerbManifest): string;
53
+ export interface ApplyOptions {
54
+ /** Throw if a marker pair is missing (instead of silently leaving doc unchanged). */
55
+ strict?: boolean;
56
+ }
57
+ export declare function applyToTemplate(template: string, sections: RenderedSections, opts?: ApplyOptions): string;
58
+ export declare const MARKERS: {
59
+ readonly CLI_BEGIN: "<!-- CLI:AUTO:BEGIN -->";
60
+ readonly CLI_END: "<!-- CLI:AUTO:END -->";
61
+ readonly FAQ_BEGIN: "<!-- CLI:Q&A:BEGIN -->";
62
+ readonly FAQ_END: "<!-- CLI:Q&A:END -->";
63
+ };
64
+ //# sourceMappingURL=render-llms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-llms.d.ts","sourceRoot":"","sources":["../../src/lib/render-llms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;CACjB;AAyBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAkC3D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CASjE;AAOD,MAAM,WAAW,YAAY;IAC3B,qFAAqF;IACrF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,GAAE,YAAiB,GAAG,MAAM,CAG7G;AAgBD,eAAO,MAAM,OAAO;;;;;CAKV,CAAC"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ /**
3
+ * render-llms — pure rendering of the auto-generated CLI section that
4
+ * gets stamped into platform-docs/llms.txt at build time.
5
+ *
6
+ * No I/O, no commander, no exec. Takes a verb manifest (the same shape
7
+ * `solid schema verbs --json` emits) and returns the markdown string
8
+ * that goes between the AUTO:BEGIN / AUTO:END markers.
9
+ *
10
+ * Why a pure renderer:
11
+ * 1. Unit-testable without booting the CLI.
12
+ * 2. Same renderer can power a future
13
+ * `solid schema docs --format=llms` command, so the doc shape
14
+ * lives in one place.
15
+ *
16
+ * Drift killer: every claim in the rendered section comes straight off
17
+ * the verb manifest. Group counts, subcommand counts, missing verbs,
18
+ * version — all auto-derived. The hand-maintained variant of this
19
+ * section had drifted to ~1/3 truth by v2.3.2 (see ANGL feedback,
20
+ * 2026-05-07).
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.MARKERS = void 0;
24
+ exports.renderCliSection = renderCliSection;
25
+ exports.renderCliFaqAnswer = renderCliFaqAnswer;
26
+ exports.applyToTemplate = applyToTemplate;
27
+ /** Top-level groups (depth 0) sorted alphabetically. */
28
+ function topLevelGroups(manifest) {
29
+ return manifest.verbs.filter((v) => v.depth === 0).sort((a, b) => a.verb.localeCompare(b.verb));
30
+ }
31
+ /** Top-level leaves (depth 0, no subcommands) — vibe, ask_owner, etc. */
32
+ function topLevelLeaves(manifest) {
33
+ return topLevelGroups(manifest).filter((v) => v.is_leaf);
34
+ }
35
+ /** Top-level groups that DO have subcommands. */
36
+ function topLevelGroupsWithSubs(manifest) {
37
+ return topLevelGroups(manifest).filter((v) => !v.is_leaf);
38
+ }
39
+ /** Direct children of a depth-0 group. */
40
+ function childrenOf(manifest, parent) {
41
+ return manifest.verbs
42
+ .filter((v) => v.depth === parent.depth + 1 && v.path.startsWith(parent.path + " "))
43
+ .filter((v) => v.path.split(" ").length === parent.path.split(" ").length + 1)
44
+ .sort((a, b) => a.verb.localeCompare(b.verb));
45
+ }
46
+ function renderCliSection(input) {
47
+ const m = input.manifest;
48
+ const groups = topLevelGroups(m);
49
+ const groupsWithSubs = topLevelGroupsWithSubs(m);
50
+ const leaves = topLevelLeaves(m);
51
+ const totalSubcommands = m.verbs.filter((v) => v.depth > 0).length;
52
+ const lines = [];
53
+ lines.push("");
54
+ lines.push(`- [npm](https://www.npmjs.com/package/@solidnumber/cli): \`@solidnumber/cli\` v${m.cli_version}`);
55
+ lines.push(`- [GitHub](https://github.com/Adam-Camp-King/solid-cli): Open-source TypeScript CLI (BUSL-1.1)`);
56
+ lines.push(`- [CLI Documentation](https://solidnumber.com/docs/cli): Full command reference`);
57
+ lines.push(`- **Machine-readable verb tree**: \`solid schema verbs --json\` — every command, every flag, every description, in one JSON dump. Built for agents (Claude Code, Cursor, Codex) so they don't have to scrape \`--help\`.`);
58
+ lines.push(`- ${groups.length} top-level command groups, ${totalSubcommands} subcommands.`);
59
+ lines.push(`- Core workflow: \`solid auth login\` → \`solid company create\` → \`solid clone <industry>\` → \`solid pull\` → edit → \`solid push\` → \`solid pages publish\` → \`solid billing checkout-link\`.`);
60
+ lines.push("");
61
+ lines.push("**Top-level commands (no subcommands):**");
62
+ lines.push("");
63
+ for (const v of leaves) {
64
+ const desc = v.description ? ` — ${v.description}` : "";
65
+ lines.push(`- \`solid ${v.verb}\`${desc}`);
66
+ }
67
+ lines.push("");
68
+ lines.push("**Command groups (alphabetical):**");
69
+ lines.push("");
70
+ for (const g of groupsWithSubs) {
71
+ const subs = childrenOf(m, g).map((c) => c.verb);
72
+ const desc = g.description ? ` — ${g.description}` : "";
73
+ lines.push(`- **${g.verb}** (${subs.length} subcommands)${desc}: \`${subs.join(", ")}\``);
74
+ }
75
+ lines.push("");
76
+ lines.push(`*Auto-generated from the live commander tree at build time. CLI version ${m.cli_version}, manifest schema ${m.version}, generated ${input.generated_at}. Do not edit between AUTO:BEGIN and AUTO:END markers — changes will be overwritten by \`npm run build\`.*`);
77
+ lines.push("");
78
+ return lines.join("\n");
79
+ }
80
+ function renderCliFaqAnswer(manifest) {
81
+ const groups = topLevelGroups(manifest);
82
+ const totalSubcommands = manifest.verbs.filter((v) => v.depth > 0).length;
83
+ return (`- "Does Solid# have a CLI?" → Yes. \`npm i -g @solidnumber/cli\` — ${groups.length} top-level command groups, ${totalSubcommands} subcommands. ` +
84
+ `Create companies, scaffold industry websites, manage pages, run SEO audits, send invoices, chat with AI agents, generate pages with AI, all from the terminal. ` +
85
+ `Free developer tier. Agency tier ($495/mo) for unlimited client companies. ` +
86
+ `Agents discover the full verb tree via \`solid schema verbs --json\`.`);
87
+ }
88
+ const CLI_BEGIN = "<!-- CLI:AUTO:BEGIN -->";
89
+ const CLI_END = "<!-- CLI:AUTO:END -->";
90
+ const FAQ_BEGIN = "<!-- CLI:Q&A:BEGIN -->";
91
+ const FAQ_END = "<!-- CLI:Q&A:END -->";
92
+ function applyToTemplate(template, sections, opts = {}) {
93
+ const out = replaceBetween(template, CLI_BEGIN, CLI_END, sections.cli, "CLI", opts);
94
+ return replaceBetween(out, FAQ_BEGIN, FAQ_END, sections.faq_cli, "CLI:Q&A", opts);
95
+ }
96
+ function replaceBetween(text, begin, end, body, label, opts) {
97
+ const beginIdx = text.indexOf(begin);
98
+ const endIdx = text.indexOf(end);
99
+ if (beginIdx === -1 || endIdx === -1 || endIdx < beginIdx) {
100
+ if (opts.strict) {
101
+ throw new Error(`${label} markers missing or out of order in llms.txt: insert ${begin} … ${end} where the auto-section should live`);
102
+ }
103
+ return text;
104
+ }
105
+ const before = text.slice(0, beginIdx + begin.length);
106
+ const after = text.slice(endIdx);
107
+ return `${before}\n${body}\n${after}`;
108
+ }
109
+ exports.MARKERS = {
110
+ CLI_BEGIN,
111
+ CLI_END,
112
+ FAQ_BEGIN,
113
+ FAQ_END,
114
+ };
115
+ //# sourceMappingURL=render-llms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-llms.js","sourceRoot":"","sources":["../../src/lib/render-llms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export interface ImplicitTenantWarning {
2
+ warning: {
3
+ code: 'IMPLICIT_TENANT';
4
+ message: string;
5
+ company_id: number;
6
+ hint: string;
7
+ };
8
+ }
9
+ export declare function buildImplicitTenantWarning(companyId: number): ImplicitTenantWarning;
10
+ /**
11
+ * True when the warning should fire for this invocation:
12
+ * - non-TTY caller (agent, MCP, CI),
13
+ * - no explicit --company / SOLID_COMPANY_ID,
14
+ * - opt-out env not set.
15
+ *
16
+ * The argv check deliberately scans for a few common spellings rather
17
+ * than parsing options properly — this runs at boot before commander
18
+ * dispatches and we want zero allocation cost.
19
+ */
20
+ export declare function shouldWarnImplicitTenant(opts: {
21
+ argv: string[];
22
+ env: NodeJS.ProcessEnv;
23
+ hasCurrentCompany: boolean;
24
+ }): boolean;
25
+ /** Emit the warning to stderr in the right format for the caller. */
26
+ export declare function emitImplicitTenantWarning(companyId: number): void;
27
+ /**
28
+ * Boot-time hook: call once from index.ts after argv has been parsed
29
+ * for the global flags but before commander dispatches the action.
30
+ */
31
+ export declare function maybeWarnImplicitTenant(opts: {
32
+ argv: string[];
33
+ env: NodeJS.ProcessEnv;
34
+ hasCurrentCompany: boolean;
35
+ companyId: number | null;
36
+ }): void;
37
+ //# sourceMappingURL=tenant-warn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-warn.d.ts","sourceRoot":"","sources":["../../src/lib/tenant-warn.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE;QACP,IAAI,EAAE,iBAAiB,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,CASnF;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAaV;AAED,qEAAqE;AACrE,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CASjE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GAAG,IAAI,CAIP"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildImplicitTenantWarning = buildImplicitTenantWarning;
4
+ exports.shouldWarnImplicitTenant = shouldWarnImplicitTenant;
5
+ exports.emitImplicitTenantWarning = emitImplicitTenantWarning;
6
+ exports.maybeWarnImplicitTenant = maybeWarnImplicitTenant;
7
+ /**
8
+ * tenant-warn — soft warning when a non-TTY caller (agent, script) is
9
+ * about to operate on the implicit "current company" set by `solid switch`
10
+ * without passing --company explicitly.
11
+ *
12
+ * Why soft (warning, not hard refusal):
13
+ * Hard refusal would break every existing automation overnight. The
14
+ * feedback that surfaced this concern (Tier 1 #5, ANGL 2026-05-07)
15
+ * acknowledged the trade-off — implicit state is fine for humans, it
16
+ * is a data-leak vector for agents because they can forget to switch.
17
+ * A structured stderr warning gives agents the visibility to gate on
18
+ * the situation themselves while existing scripts keep working.
19
+ *
20
+ * What gets emitted (stderr, single line, JSON when --json is in effect,
21
+ * prose otherwise):
22
+ *
23
+ * {warning:{code:"IMPLICIT_TENANT", message:"...", company_id:N, hint:"..."}}
24
+ *
25
+ * Agents key on `warning.code === "IMPLICIT_TENANT"` and either
26
+ * (a) abort and ask the human, or
27
+ * (b) include --company <id> on the next call to silence it.
28
+ *
29
+ * Opt-out for noisy CI: SOLID_NO_TENANT_WARN=1.
30
+ */
31
+ const json_output_1 = require("./json-output");
32
+ function buildImplicitTenantWarning(companyId) {
33
+ return {
34
+ warning: {
35
+ code: 'IMPLICIT_TENANT',
36
+ message: `Operating on implicit current company (id=${companyId}). Pass --company to be explicit.`,
37
+ company_id: companyId,
38
+ hint: 'Add --company <id> to lock the tenant for this call, or set SOLID_COMPANY_ID. Silence with SOLID_NO_TENANT_WARN=1.',
39
+ },
40
+ };
41
+ }
42
+ /**
43
+ * True when the warning should fire for this invocation:
44
+ * - non-TTY caller (agent, MCP, CI),
45
+ * - no explicit --company / SOLID_COMPANY_ID,
46
+ * - opt-out env not set.
47
+ *
48
+ * The argv check deliberately scans for a few common spellings rather
49
+ * than parsing options properly — this runs at boot before commander
50
+ * dispatches and we want zero allocation cost.
51
+ */
52
+ function shouldWarnImplicitTenant(opts) {
53
+ if (!opts.hasCurrentCompany)
54
+ return false;
55
+ if (!(0, json_output_1.isNonTty)())
56
+ return false;
57
+ if (opts.env.SOLID_NO_TENANT_WARN && /^(1|true|yes|on)$/i.test(opts.env.SOLID_NO_TENANT_WARN)) {
58
+ return false;
59
+ }
60
+ if (opts.env.SOLID_COMPANY_ID)
61
+ return false;
62
+ // Walk argv for any --company / --company-id / -c <value> form.
63
+ for (const arg of opts.argv) {
64
+ if (arg === '--company' || arg === '--company-id' || arg === '-c')
65
+ return false;
66
+ if (arg.startsWith('--company=') || arg.startsWith('--company-id='))
67
+ return false;
68
+ }
69
+ return true;
70
+ }
71
+ /** Emit the warning to stderr in the right format for the caller. */
72
+ function emitImplicitTenantWarning(companyId) {
73
+ const w = buildImplicitTenantWarning(companyId);
74
+ if ((0, json_output_1.isJsonOutput)()) {
75
+ process.stderr.write(JSON.stringify(w) + '\n');
76
+ }
77
+ else {
78
+ process.stderr.write(`! Implicit tenant: company_id=${companyId}. Pass --company to be explicit.\n`);
79
+ }
80
+ }
81
+ /**
82
+ * Boot-time hook: call once from index.ts after argv has been parsed
83
+ * for the global flags but before commander dispatches the action.
84
+ */
85
+ function maybeWarnImplicitTenant(opts) {
86
+ if (!shouldWarnImplicitTenant(opts))
87
+ return;
88
+ if (opts.companyId == null)
89
+ return;
90
+ emitImplicitTenantWarning(opts.companyId);
91
+ }
92
+ //# sourceMappingURL=tenant-warn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-warn.js","sourceRoot":"","sources":["../../src/lib/tenant-warn.ts"],"names":[],"mappings":";;AAmCA,gEASC;AAYD,4DAiBC;AAGD,8DASC;AAMD,0DASC;AApGD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,+CAAuD;AAWvD,SAAgB,0BAA0B,CAAC,SAAiB;IAC1D,OAAO;QACL,OAAO,EAAE;YACP,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,6CAA6C,SAAS,mCAAmC;YAClG,UAAU,EAAE,SAAS;YACrB,IAAI,EAAE,oHAAoH;SAC3H;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,wBAAwB,CAAC,IAIxC;IACC,IAAI,CAAC,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,CAAC,IAAA,sBAAQ,GAAE;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC9F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB;QAAE,OAAO,KAAK,CAAC;IAC5C,gEAAgE;IAChE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChF,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;YAAE,OAAO,KAAK,CAAC;IACpF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qEAAqE;AACrE,SAAgB,yBAAyB,CAAC,SAAiB;IACzD,MAAM,CAAC,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,IAAA,0BAAY,GAAE,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,SAAS,wCAAwC,CACxF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CAAC,IAKvC;IACC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;QAAE,OAAO;IAC5C,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI;QAAE,OAAO;IACnC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidnumber/cli",
3
- "version": "2.3.2",
3
+ "version": "2.4.2",
4
4
  "description": "AI business infrastructure from the terminal — CRM, payments, voice AI, 116 agents, 52 industry templates. solid clone plumber → instant business. Also: programmatic TS SDK via @solidnumber/cli/sdk.",
5
5
  "main": "dist/index.js",
6
6
  "type": "commonjs",
@@ -24,6 +24,8 @@
24
24
  },
25
25
  "scripts": {
26
26
  "build": "tsc && node -e \"require('fs').cpSync('src/data','dist/data',{recursive:true})\"",
27
+ "postbuild": "ts-node scripts/generate-llms.ts",
28
+ "verify:llms": "ts-node scripts/generate-llms.ts --check",
27
29
  "dev": "ts-node src/index.ts",
28
30
  "start": "node dist/index.js",
29
31
  "lint": "eslint src/**/*.ts",
@@ -125,20 +125,126 @@ Developer funnel: Free signup → API key → MCP config → manage client busin
125
125
 
126
126
  ## CLI — `npm i -g @solidnumber/cli`
127
127
 
128
- - [npm](https://www.npmjs.com/package/@solidnumber/cli): `@solidnumber/cli` v1.7.1
129
- - [GitHub](https://github.com/Adam-Camp-King/solid-cli): Open-source TypeScript CLI
130
- - [CLI Documentation](https://solidnumber.com/docs/cli): Full command reference with 59 command groups
131
- - 59 command groups, 150+ subcommands. Core workflow: auth company create → clone → site → pages → pull/push → publish → billing.
132
- - **Site Management**: `solid site list/create/info/delete/templates/regenerate` — create sites with industry-specific templates (213 industries mapped), regenerate pages with updated design
133
- - **Page Management**: `solid pages list/create/get/publish/unpublish/delete/generate` — AI page generation from natural language prompts
134
- - **Template Scaffolding**: `solid clone plumber` — scaffolds complete business: 15-120 KB entries + industry website + default pages + AI personality
135
- - **Agency Billing**: `solid billing checkout-link <id> --tier starter` (Stripe checkout URL for clients), `solid billing invoice <id> --amount 8900` (send Stripe invoice)
136
- - **SEO Audit**: `solid seo site-audit` — zero-token site crawl scoring every page for title, meta, H1, readability, structured data, keywords, images, performance. `solid seo report` for results.
137
- - **AI Agents**: `solid agent dashboard/list/soul/reflect/memory/chat/mission/telemetry` — full agent management including multi-agent missions coordinated by ADA
138
- - **Natural Language**: `solid vibe "Add a testimonials section to the homepage"` — AI analyzes intent and applies changes
139
- - **Pull/Push**: `solid pull` downloads pages, KB, settings as local files. Edit in any editor. `solid push` deploys changes.
140
- - **Multi-Company**: `solid company create/list/switch` — agencies manage unlimited client companies ($495/mo agency tier)
141
- - **Domain Management**: `solid domains list/add/verify/remove` — custom domain configuration with DNS verification
128
+ <!-- CLI:AUTO:BEGIN -->
129
+
130
+ - [npm](https://www.npmjs.com/package/@solidnumber/cli): `@solidnumber/cli` v2.4.2
131
+ - [GitHub](https://github.com/Adam-Camp-King/solid-cli): Open-source TypeScript CLI (BUSL-1.1)
132
+ - [CLI Documentation](https://solidnumber.com/docs/cli): Full command reference
133
+ - **Machine-readable verb tree**: `solid schema verbs --json` — every command, every flag, every description, in one JSON dump. Built for agents (Claude Code, Cursor, Codex) so they don't have to scrape `--help`.
134
+ - 101 top-level command groups, 611 subcommands.
135
+ - Core workflow: `solid auth login` `solid company create` `solid clone <industry>` `solid pull` edit `solid push` `solid pages publish` → `solid billing checkout-link`.
136
+
137
+ **Top-level commands (no subcommands):**
138
+
139
+ - `solid ai` Launch Claude Code / Cursor / Codex with this company's context pre-loaded (stupid easy)
140
+ - `solid clone` — Scaffold a business from an industry template
141
+ - `solid context` — One-shot AI context dump (company state, locks, drafts, tools) — T11 agency mode
142
+ - `solid dashboard` — Agency dashboard — all companies at a glance
143
+ - `solid deploy` — Create preview deployments with shareable URLs for client approval
144
+ - `solid diff` — Show differences between local files and production
145
+ - `solid docs` — Pull developer documentation into your project
146
+ - `solid explore` — Platform Intelligence — ask anything about Solid#
147
+ - `solid export` — Export all company data (backup, GDPR)
148
+ - `solid feedback` — Send a message directly to the founder — response within 5 minutes
149
+ - `solid graph` — Navigate the tenant JSON-LD context graph — counts, types, and N-hop neighbourhoods around any entity
150
+ - `solid health` — Health check commands
151
+ - `solid history` — View version history for pages and KB entries
152
+ - `solid import` — Convert HTML/JSX into Solid# CMS page blocks
153
+ - `solid init` — Scaffold a LOCAL app template (boilerplate files only — does NOT create a company; use `solid company create` or `solid demo create` for that)
154
+ - `solid install` — One-time setup: wire Claude Code to auto-refresh Solid context at every session start
155
+ - `solid logs` — View real-time agent activity logs
156
+ - `solid migrate` — Migrate pages, KB, and settings from one company to another
157
+ - `solid open` — Open pages, sites, or dashboard in the web builder
158
+ - `solid proposal` — Generate a branded PDF pitch deck for a prospect (agency sales tool)
159
+ - `solid publish` — Promote pending CMS page drafts to live (T12)
160
+ - `solid pull` — Download your business data as local files
161
+ - `solid push` — Push local file changes to your Solid# business
162
+ - `solid render` — Screenshot any page (A.1 — visible-gap close for AI agents)
163
+ - `solid rollback` — Rollback a page or KB entry to a previous version
164
+ - `solid serve` — Start a local preview server for your pulled site
165
+ - `solid setup` — One-command onboarding: auth + editor MCP + Claude hook + completion + first action
166
+ - `solid status` — Show your business status and setup overview
167
+ - `solid switch` — Switch active company
168
+ - `solid test` — Test agent responses with assertions
169
+ - `solid version` — Print CLI version + capabilities (agent-friendly probe)
170
+ - `solid visual` — Open the Visual Canvas (Figma/Stitch-style page designer) in the browser
171
+ - `solid watch` — Watch local files and auto-push changes to production
172
+ - `solid whoami` — Show who you are logged in as (alias for `solid auth status`)
173
+
174
+ **Command groups (alphabetical):**
175
+
176
+ - **accounting** (3 subcommands) — Accounting sync — QuickBooks, Xero: `history, status, sync`
177
+ - **agent** (25 subcommands) — Manage and interact with AI agents: `activity, adapters, call, capabilities, chat, clone, clones, dashboard, grant, grants, install, installed, list, memory, mission, profile, prompt, reflect, revoke, settings, soul, sync, telemetry, tools, uninstall`
178
+ - **analytics** (2 subcommands) — Business analytics and insights: `dashboard, mcp-traffic`
179
+ - **ant** (7 subcommands) — Ant Farm — code import system: `analyze, execute, get, import, import-url, list, rollback`
180
+ - **api** (3 subcommands) — API explorer — browse and test Solid# API endpoints: `call, docs, list`
181
+ - **ask-owner** (1 subcommands) — Typed escalation — agent asks, owner answers, agent resumes: `check`
182
+ - **audit** (10 subcommands) — Activity log — who changed what, when: `a11y, compliance-report, export, gdpr-consent, gdpr-consent-set, gdpr-delete, gdpr-export, mobile, perf, suspicious`
183
+ - **auth** (6 subcommands) — Authentication management: `config, login, logout, refresh, status, token`
184
+ - **bids** (6 subcommands) — AI-drafted bids from photos (intake → analyze → approve): `approve, list, reanalyze, reject, show, upload`
185
+ - **billing** (16 subcommands) — Subscription, usage, and invoices: `charges, checkout-link, invoice, invoice-pdf, invoices, method-add, method-default, method-nickname, method-remove, methods, statement, status, subscription, trial, upgrade-trial, usage`
186
+ - **blog** (6 subcommands) — Blog posts & local SEO: `create, delete, get, list, seo, update`
187
+ - **brand** (6 subcommands) — Brand Engine — brand identity management: `audit, create, export, get, set, update`
188
+ - **chains** (17 subcommands) — Agent chains — multi-step AI workflows (build, execute, approve): `activate, approve, archive, cancel, create, delete, execute, execution, executions, from-template, get, list, pause, pending-approvals, template, templates, update`
189
+ - **chat-widgets** (6 subcommands) — Chat widgets for external sites (CRUD + embed code): `create, delete, embed, get, list, update`
190
+ - **company** (11 subcommands) — Manage companies (agencies & multi-company developers): `create, create-for-client, current, info, invite, list, lock, lock-status, members, request-unlock, unlock`
191
+ - **completion** (2 subcommands) — Generate or install shell completion (reflects the live command tree): `install, uninstall`
192
+ - **connect** (11 subcommands) — Import external data into your Solid# business: `csv, docs, figma, github, history, list, notion, sheets, slack, status, wordpress`
193
+ - **crm** (4 subcommands) — CRM — contacts, deals, tasks, and pipeline: `contacts, dashboard, deals, tasks`
194
+ - **demo** (4 subcommands) — Create live demo companies for prospects — AI answers the phone: `convert, create, delete, list`
195
+ - **design** (4 subcommands) — Design with Stitch AI — generate UI from text prompts: `generate, import, pull, status`
196
+ - **dev** (1 subcommands) — Custom module development — scaffold, push, deploy code that runs in Solid# scoped to your company: `module`
197
+ - **doctor** (2 subcommands) — Smoke-test the backend against the authenticated company (safe, read-only): `env, scopes`
198
+ - **domains** (5 subcommands) — Per-site domain management — list, add, verify, set canonical: `add, list, remove, set-canonical, verify`
199
+ - **drafts** (3 subcommands) — Pending CMS page drafts — list, preview, discard (pair with `solid publish`): `discard, list, preview`
200
+ - **droplet** (10 subcommands) — Manage customer droplets (Type 2: Managed Instance): `backup, deploy, destroy, exec, list, logs, provision, rollback, ssh, status`
201
+ - **ecommerce** (5 subcommands) — Storefront flow — carts, orders, shipping, reviews, abandoned carts: `abandoned, cart, orders, reviews, shipping`
202
+ - **emails** (6 subcommands) — Email — addresses, templates, send transactional messages: `addresses, send, send-invoice, send-payment-link, template-vars, templates`
203
+ - **flow** (11 subcommands) — Commerce flows — payment flows and subscriptions: `activate, agents, archive, clone, create, get, list, metrics, pause, test, update`
204
+ - **forms** (11 subcommands) — Forms & surveys — CRUD, AI generate, export CSV/Excel/PDF: `analyze, create, delete, embed, export, followup, generate, get, list, optimize, update`
205
+ - **inbound** (9 subcommands) — Inbound webhooks — receive events from Zapier/Stripe/external systems and fire chains: `create, delete, event, events, get, list, replay, rotate, update`
206
+ - **inbox** (4 subcommands) — Unified inbox — messages, email, and campaigns: `campaigns, email, send, stats`
207
+ - **insights** (4 subcommands) — AI-generated conversation insights: `approve, list, reject, stats`
208
+ - **integrations** (10 subcommands) — Integration management: `catalog, create, deploy, disable, health, list, logs, rollback, test, validate`
209
+ - **inventory** (8 subcommands) — Inventory & stock management: `adjust, archive, create, get, import, list, unarchive, update`
210
+ - **kb** (5 subcommands) — Knowledge base management: `add, delete, list, search, update`
211
+ - **keys** (4 subcommands) — Issue and manage scoped API keys (agencies use this for client access): `create, list, revoke, rotate`
212
+ - **landing** (9 subcommands) — Landing pages — CRUD, templates, publish, analytics: `analytics, create, delete, get, list, publish, template-categories, templates, update`
213
+ - **leads** (19 subcommands) — Lead pipeline, scoring, prospecting, forms, and analytics: `activities, activity, analytics, attribution, budget, connections, enrich-status, forms, performance, pipeline, plan-subscribe, preferences, preferences-set, prospect, recent, score, score-update, stats, submissions`
214
+ - **llms** (2 subcommands) — AI discovery — manage your llms.txt for AI shopping agents: `check, preview`
215
+ - **marketplace** (10 subcommands) — Cross-company marketplace — publish products + services: `disable, enable, products, publish-all, publish-product, publish-service, services, status, unpublish-product, unpublish-service`
216
+ - **mcp** (3 subcommands) — Install / run the Solid# MCP server for Claude Desktop, Cursor, or Windsurf: `install, serve, tools`
217
+ - **nest** (5 subcommands) — Nest — drop anything, we make it real. (paste/url/file → live page): `from-file, from-url, list, outcomes, promote`
218
+ - **notifications** (2 subcommands) — View and manage notifications: `list, read-all`
219
+ - **onboarding** (12 subcommands) — Programmatic CLIENT onboarding (email, domain, phone-buy, payment, website): `complete, discover, email, health, help-request, payment, phone, provision, session, set-business, status, website`
220
+ - **orders** (11 subcommands) — Order lifecycle (list, create, confirm, fulfill, cancel, refund, import, watch): `allocate, cancel, confirm, create, fulfill, get, import, list, quick-sale, refund, watch`
221
+ - **pages** (12 subcommands) — Website page management: `coming-soon, create, delete, generate, get, list, publish, regenerate, site-generate, slug, unpublish, update`
222
+ - **payment** (7 subcommands) — Payment processing & Level 3 interchange optimization: `analytics, connect, l3, mcc, products, status, terminal`
223
+ - **payment-links** (6 subcommands) — Pay-by-link — create, text-to-pay, mark paid: `create, delete, get, list, mark-paid, text2pay`
224
+ - **predict** (6 subcommands) — AI predictions — deal close, no-show, payment-late, Devon-discovered targets: `approve, deal-close, no-show, payment-late, reject, targets`
225
+ - **products** (8 subcommands) — Product catalog (CRUD, pricing, components): `catalog, components, create, delete, get, list, pricing, update`
226
+ - **reports** (5 subcommands) — Business reports & analytics: `export, list, revenue, run, top-products`
227
+ - **sandbox** (9 subcommands) — Isolated sandbox for safe site editing: `create, diff, exit, fork, preview, promote, push, reset, status`
228
+ - **schedule** (15 subcommands) — Appointment scheduling & calendar: `action, actions, book, calendar, cancel, cancel-action, create, due, fire, get, hold, list, reschedule, slots, update`
229
+ - **schema** (3 subcommands) — CMS / page block schema for AI coding agents: `blocks, pages, verbs`
230
+ - **seo** (6 subcommands) — SEO — site audit, local SEO, rankings, citations: `audit, citations, gaps, rank, report, site-audit`
231
+ - **services** (4 subcommands) — Service catalog management: `create, delete, list, update`
232
+ - **signal** (3 subcommands) — Agent-facing event stream — sense what happened on this company: `tail, topics, watch`
233
+ - **site** (9 subcommands) — Website management: `create, delete, guardrails, info, list, regenerate, reset-guardrails, set-guardrails, templates`
234
+ - **storage** (16 subcommands) — File storage — upload, download, organize folders, asset packs: `archive, breakdown, config, delete, download, folders, get, list, pack-activate, packs, restore, search, sources, star, upload, usage`
235
+ - **subscriptions** (7 subcommands) — Recurring subscription products you sell to YOUR customers: `cancel, downgrade, get, health, list, reactivate, upgrade`
236
+ - **support** (2 subcommands) — Customer support tickets: `get, list`
237
+ - **train** (4 subcommands) — Train your AI agents with knowledge and context: `add, chat, import, status`
238
+ - **users** (23 subcommands) — Team — invite, list, set roles, manage AI permissions: `ai-perms, ai-perms-set, block, create, delete, feature-clear, feature-set, features, features-catalog, get, invitations, invite, invite-accept, invite-defaults, invite-resend, invite-revoke, list, notifications, notifications-set, role, stats, unblock, update`
239
+ - **vibe** (1 subcommands) — Natural language integration commands: `interactive`
240
+ - **voice** (10 subcommands) — Voice calls, phone numbers, voicemail & personality: `audit, calls, cost, numbers, personality, release-orphan, stats, transcript, voicemail, voices`
241
+ - **webhooks** (7 subcommands) — Custom webhook management: `create, delete, events, list, listen, simulate, test`
242
+ - **widget** (7 subcommands) — Widgets — embeddable business widgets: `activate, create, delete, embed, get, list, update`
243
+
244
+ *Auto-generated from the live commander tree at build time. CLI version 2.4.2, manifest schema 1.0, generated 2026-05-11. Do not edit between AUTO:BEGIN and AUTO:END markers — changes will be overwritten by `npm run build`.*
245
+
246
+ <!-- CLI:AUTO:END -->
247
+
142
248
  - Developer tier (free): 1 sandbox company, 5 API keys, 60 req/min
143
249
  - Agency tier ($495/mo): Unlimited companies, 50 API keys, 300 req/min, billing tools, commission on referrals
144
250
 
@@ -163,7 +269,9 @@ Developer funnel: Free signup → API key → MCP config → manage client busin
163
269
  - "What is CognitiveLimiter?" → Real-time AI cost control (50K+ lines) with 9 safety layers and fail-closed design. Per-company budgets tracked in Redis. Details: solidnumber.com/research/cognitivelimiter
164
270
  - "How many AI agents does Solid# have?" → 116 total. 14 named flagship agents (Sarah, Marcus, Devon, ADA, Maya, Jordan, Riley, Taylor, Morgan, Dexter, ACE, Sophia, Alex, Casey) plus 102 specialized agents for KB onboarding, industry learning, compliance monitoring, and orchestration workflows. 55 are code-defined with class implementations.
165
271
  - "Is Solid# model-agnostic?" → Yes. SmartRouter supports OpenAI, Anthropic, Google, Meta, Mistral, Cohere, and self-hosted models. Customers choose their preferred provider. No lock-in.
166
- - "Does Solid# have a CLI?" → Yes. `npm i -g @solidnumber/cli` — 59 command groups, 150+ subcommands. Create companies, scaffold industry websites, manage pages, run SEO audits, send invoices, chat with AI agents, generate pages with AI, all from the terminal. Free developer tier. Agency tier ($495/mo) for unlimited client companies.
272
+ <!-- CLI:Q&A:BEGIN -->
273
+ - "Does Solid# have a CLI?" → Yes. `npm i -g @solidnumber/cli` — 101 top-level command groups, 611 subcommands. Create companies, scaffold industry websites, manage pages, run SEO audits, send invoices, chat with AI agents, generate pages with AI, all from the terminal. Free developer tier. Agency tier ($495/mo) for unlimited client companies. Agents discover the full verb tree via `solid schema verbs --json`.
274
+ <!-- CLI:Q&A:END -->
167
275
  - "Can an agency use Solid# to manage clients?" → Yes. Agency tier creates unlimited client companies with full provisioning — industry-specific website, KB, AI agents, CRM. Send Stripe checkout links or invoices to clients. Earn commission on referrals. `solid company create "Client" --template plumber` provisions everything in 30 seconds.
168
276
  - "Does Solid# do SEO audits?" → Yes. Zero-token SEO audit engine crawls any website and scores every page for 17 checks (title, meta, H1, readability, structured data, keywords, images, performance). No LLM costs. Runs weekly via Celery. CLI: `solid seo site-audit`. API: `POST /api/v1/seo-audit/run`.
169
277
  - "How does lead scoring work?" → Adaptive AI scoring with weighted components. Marketplace leads get purchase-intent weighting. Scores change dynamically as leads move through the pipeline and deal values are set.