@solidnumber/cli 2.11.11 → 2.11.13

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.
Files changed (87) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/ant.d.ts.map +1 -1
  3. package/dist/commands/ant.js +10 -16
  4. package/dist/commands/ant.js.map +1 -1
  5. package/dist/commands/auth.d.ts +1 -0
  6. package/dist/commands/auth.d.ts.map +1 -1
  7. package/dist/commands/auth.js +11 -23
  8. package/dist/commands/auth.js.map +1 -1
  9. package/dist/commands/billing.d.ts.map +1 -1
  10. package/dist/commands/billing.js +10 -2
  11. package/dist/commands/billing.js.map +1 -1
  12. package/dist/commands/deploy.d.ts.map +1 -1
  13. package/dist/commands/deploy.js +4 -2
  14. package/dist/commands/deploy.js.map +1 -1
  15. package/dist/commands/dispatch_shortcuts.d.ts.map +1 -1
  16. package/dist/commands/dispatch_shortcuts.js +3 -9
  17. package/dist/commands/dispatch_shortcuts.js.map +1 -1
  18. package/dist/commands/droplet.d.ts.map +1 -1
  19. package/dist/commands/droplet.js +13 -19
  20. package/dist/commands/droplet.js.map +1 -1
  21. package/dist/commands/import.d.ts +5 -0
  22. package/dist/commands/import.d.ts.map +1 -1
  23. package/dist/commands/import.js +38 -38
  24. package/dist/commands/import.js.map +1 -1
  25. package/dist/commands/mcp.js +86 -0
  26. package/dist/commands/mcp.js.map +1 -1
  27. package/dist/commands/orders.d.ts.map +1 -1
  28. package/dist/commands/orders.js +10 -0
  29. package/dist/commands/orders.js.map +1 -1
  30. package/dist/commands/payment.d.ts.map +1 -1
  31. package/dist/commands/payment.js +5 -2
  32. package/dist/commands/payment.js.map +1 -1
  33. package/dist/commands/publish.d.ts.map +1 -1
  34. package/dist/commands/publish.js +4 -2
  35. package/dist/commands/publish.js.map +1 -1
  36. package/dist/commands/push.d.ts +2 -0
  37. package/dist/commands/push.d.ts.map +1 -1
  38. package/dist/commands/push.js +9 -87
  39. package/dist/commands/push.js.map +1 -1
  40. package/dist/commands/sales.d.ts +19 -0
  41. package/dist/commands/sales.d.ts.map +1 -0
  42. package/dist/commands/sales.js +890 -0
  43. package/dist/commands/sales.js.map +1 -0
  44. package/dist/commands/schema.js +208 -1
  45. package/dist/commands/schema.js.map +1 -1
  46. package/dist/commands/status.d.ts.map +1 -1
  47. package/dist/commands/status.js +93 -0
  48. package/dist/commands/status.js.map +1 -1
  49. package/dist/commands/webhooks.d.ts.map +1 -1
  50. package/dist/commands/webhooks.js +4 -0
  51. package/dist/commands/webhooks.js.map +1 -1
  52. package/dist/data/verb-overrides.json +18 -0
  53. package/dist/data/workflow-recipes.json +133 -0
  54. package/dist/index.js +4 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/lib/agent-mode.d.ts.map +1 -1
  57. package/dist/lib/agent-mode.js +3 -0
  58. package/dist/lib/agent-mode.js.map +1 -1
  59. package/dist/lib/api-client.d.ts.map +1 -1
  60. package/dist/lib/api-client.js +13 -9
  61. package/dist/lib/api-client.js.map +1 -1
  62. package/dist/lib/command-kit.d.ts +10 -0
  63. package/dist/lib/command-kit.d.ts.map +1 -1
  64. package/dist/lib/command-kit.js +17 -0
  65. package/dist/lib/command-kit.js.map +1 -1
  66. package/dist/lib/offline-queue.d.ts +1 -1
  67. package/dist/lib/offline-queue.d.ts.map +1 -1
  68. package/dist/lib/offline-queue.js +2 -2
  69. package/dist/lib/offline-queue.js.map +1 -1
  70. package/dist/lib/persona-groups.d.ts +1 -1
  71. package/dist/lib/persona-groups.d.ts.map +1 -1
  72. package/dist/lib/persona-groups.js +4 -1
  73. package/dist/lib/persona-groups.js.map +1 -1
  74. package/dist/lib/push-utils.d.ts +39 -0
  75. package/dist/lib/push-utils.d.ts.map +1 -0
  76. package/dist/lib/push-utils.js +120 -0
  77. package/dist/lib/push-utils.js.map +1 -0
  78. package/dist/lib/url-utils.d.ts +5 -0
  79. package/dist/lib/url-utils.d.ts.map +1 -0
  80. package/dist/lib/url-utils.js +23 -0
  81. package/dist/lib/url-utils.js.map +1 -0
  82. package/dist/lib/verb-metadata.d.ts +105 -0
  83. package/dist/lib/verb-metadata.d.ts.map +1 -0
  84. package/dist/lib/verb-metadata.js +171 -0
  85. package/dist/lib/verb-metadata.js.map +1 -0
  86. package/package.json +3 -2
  87. package/platform-docs/llms.txt +7 -6
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * Pure functions for the push command — no CLI deps (ora/chalk/commander).
4
+ * Testable in isolation.
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.parseKbMarkdown = parseKbMarkdown;
41
+ exports.detectChanges = detectChanges;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ function parseKbMarkdown(content) {
45
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
46
+ if (!frontmatterMatch) {
47
+ return { title: 'Untitled', category: 'general', content: content.trim() };
48
+ }
49
+ const frontmatter = frontmatterMatch[1];
50
+ const body = frontmatterMatch[2].trim();
51
+ let id;
52
+ let title = 'Untitled';
53
+ let category = 'general';
54
+ for (const line of frontmatter.split('\n')) {
55
+ const [key, ...valueParts] = line.split(':');
56
+ const value = valueParts.join(':').trim();
57
+ if (key.trim() === 'id')
58
+ id = parseInt(value, 10);
59
+ if (key.trim() === 'title')
60
+ title = value.replace(/^["']|["']$/g, '');
61
+ if (key.trim() === 'category')
62
+ category = value;
63
+ }
64
+ return { id, title, category, content: body };
65
+ }
66
+ function detectChanges(baseDir, manifest) {
67
+ const changes = {
68
+ pages: [],
69
+ kb: [],
70
+ settings: { changed: false, data: {} },
71
+ summary: { creates: 0, updates: 0, settings: false },
72
+ };
73
+ const pagesDir = path.join(baseDir, 'pages');
74
+ if (fs.existsSync(pagesDir)) {
75
+ const pageFiles = fs.readdirSync(pagesDir).filter((f) => f.endsWith('.json'));
76
+ for (const file of pageFiles) {
77
+ const filePath = path.join(pagesDir, file);
78
+ const content = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
79
+ if (manifest.pages[file]) {
80
+ changes.pages.push({ file, action: 'update', data: content });
81
+ changes.summary.updates++;
82
+ }
83
+ else {
84
+ changes.pages.push({ file, action: 'create', data: content });
85
+ changes.summary.creates++;
86
+ }
87
+ }
88
+ }
89
+ const kbDir = path.join(baseDir, 'kb');
90
+ if (fs.existsSync(kbDir)) {
91
+ const kbFiles = fs.readdirSync(kbDir).filter((f) => f.endsWith('.md'));
92
+ for (const file of kbFiles) {
93
+ const filePath = path.join(kbDir, file);
94
+ const raw = fs.readFileSync(filePath, 'utf-8');
95
+ const parsed = parseKbMarkdown(raw);
96
+ if (manifest.kb[file]) {
97
+ changes.kb.push({
98
+ file,
99
+ action: 'update',
100
+ data: { ...parsed, id: manifest.kb[file].id },
101
+ });
102
+ changes.summary.updates++;
103
+ }
104
+ else {
105
+ changes.kb.push({ file, action: 'create', data: parsed });
106
+ changes.summary.creates++;
107
+ }
108
+ }
109
+ }
110
+ const configPath = path.join(baseDir, 'solid.config.json');
111
+ if (fs.existsSync(configPath)) {
112
+ const localConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
113
+ if (localConfig.website_settings && Object.keys(localConfig.website_settings).length > 0) {
114
+ changes.settings = { changed: true, data: localConfig.website_settings };
115
+ changes.summary.settings = true;
116
+ }
117
+ }
118
+ return changes;
119
+ }
120
+ //# sourceMappingURL=push-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-utils.js","sourceRoot":"","sources":["../../src/lib/push-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * URL utility functions — no CLI deps. Testable in isolation.
3
+ */
4
+ export declare function frontendUrlFor(apiUrl: string): string;
5
+ //# sourceMappingURL=url-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-utils.d.ts","sourceRoot":"","sources":["../../src/lib/url-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAarD"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * URL utility functions — no CLI deps. Testable in isolation.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.frontendUrlFor = frontendUrlFor;
7
+ const url_1 = require("url");
8
+ function frontendUrlFor(apiUrl) {
9
+ try {
10
+ const u = new url_1.URL(apiUrl);
11
+ if (u.hostname === 'localhost' || u.hostname === '127.0.0.1') {
12
+ return `${u.protocol}//${u.hostname}:3000`;
13
+ }
14
+ if (u.hostname.startsWith('api.')) {
15
+ return `${u.protocol}//app.${u.hostname.slice(4)}`;
16
+ }
17
+ return `${u.protocol}//${u.hostname}`;
18
+ }
19
+ catch {
20
+ return 'https://app.solidnumber.com';
21
+ }
22
+ }
23
+ //# sourceMappingURL=url-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-utils.js","sourceRoot":"","sources":["../../src/lib/url-utils.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAIH,wCAaC;AAfD,6BAA0B;AAE1B,SAAgB,cAAc,CAAC,MAAc;IAC3C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,SAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC7D,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,OAAO,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,OAAO,GAAG,CAAC,CAAC,QAAQ,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,CAAC;QACD,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,6BAA6B,CAAC;IACvC,CAAC;AACH,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Verb metadata inference.
3
+ *
4
+ * Enriches VerbEntry with inferred metadata that agents need to make
5
+ * decisions without guessing: does this command mutate? what envelope
6
+ * does it return? what errors can it throw? is it idempotent?
7
+ *
8
+ * Inference is heuristic — based on verb naming conventions. Override
9
+ * with explicit metadata in verb-overrides.json for special cases.
10
+ */
11
+ import type { VerbEntry } from './verb-manifest';
12
+ export interface VerbContract {
13
+ verb: string;
14
+ path: string;
15
+ description: string;
16
+ /** Input: options and positional args with types. */
17
+ input: {
18
+ options: {
19
+ flag: string;
20
+ type: string;
21
+ required: boolean;
22
+ default?: unknown;
23
+ description: string;
24
+ }[];
25
+ args: {
26
+ name: string;
27
+ type: string;
28
+ required: boolean;
29
+ description?: string;
30
+ }[];
31
+ };
32
+ /** Inferred output envelope type. */
33
+ output_envelope: 'list' | 'detail' | 'mutation' | 'status' | 'stream' | 'unknown';
34
+ /** Standard errors this command can return. */
35
+ errors: string[];
36
+ /** Does this command change state? */
37
+ mutates: boolean;
38
+ /** Safe to retry without side effects? */
39
+ idempotent: boolean;
40
+ /** Does this command require authentication? */
41
+ requires_auth: boolean;
42
+ /** Command category for filtering. */
43
+ category: string;
44
+ /** Example invocation. */
45
+ example: string;
46
+ }
47
+ export declare function inferVerbContract(entry: VerbEntry): VerbContract;
48
+ export declare function inferAllContracts(entries: VerbEntry[]): VerbContract[];
49
+ /**
50
+ * Standard envelope schemas documented for agents.
51
+ * Agents can call `solid schema envelopes --json` to get these.
52
+ */
53
+ export declare const ENVELOPE_SCHEMAS: {
54
+ list: {
55
+ description: string;
56
+ shape: {
57
+ items: string;
58
+ total: string;
59
+ page: string;
60
+ has_more: string;
61
+ _source_key: string;
62
+ };
63
+ note: string;
64
+ };
65
+ detail: {
66
+ description: string;
67
+ shape: {
68
+ id: string;
69
+ '...fields': string;
70
+ };
71
+ note: string;
72
+ };
73
+ mutation: {
74
+ description: string;
75
+ shape: {
76
+ success: string;
77
+ id: string;
78
+ message: string;
79
+ };
80
+ note: string;
81
+ };
82
+ status: {
83
+ description: string;
84
+ shape: {
85
+ status: string;
86
+ '...checks': string;
87
+ };
88
+ note: string;
89
+ };
90
+ error: {
91
+ description: string;
92
+ shape: {
93
+ error: {
94
+ code: string;
95
+ status: string;
96
+ message: string;
97
+ hint: string;
98
+ docs_url: string;
99
+ upgrade_to: string;
100
+ };
101
+ };
102
+ note: string;
103
+ };
104
+ };
105
+ //# sourceMappingURL=verb-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verb-metadata.d.ts","sourceRoot":"","sources":["../../src/lib/verb-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IAEpB,qDAAqD;IACrD,KAAK,EAAE;QACL,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACrG,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACjF,CAAC;IAEF,qCAAqC;IACrC,eAAe,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAElF,+CAA+C;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IAEjB,0CAA0C;IAC1C,UAAU,EAAE,OAAO,CAAC;IAEpB,gDAAgD;IAChD,aAAa,EAAE,OAAO,CAAC;IAEvB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IAEjB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAiED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAiDhE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,YAAY,EAAE,CAEtE;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmD5B,CAAC"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ENVELOPE_SCHEMAS = void 0;
4
+ exports.inferVerbContract = inferVerbContract;
5
+ exports.inferAllContracts = inferAllContracts;
6
+ const READ_VERBS = new Set([
7
+ 'list', 'get', 'show', 'status', 'info', 'check', 'health',
8
+ 'view', 'describe', 'inspect', 'search', 'find', 'count',
9
+ 'export', 'download', 'pull', 'diff', 'compare', 'audit',
10
+ 'verbs', 'pages', 'blocks', 'workflows', 'schema',
11
+ ]);
12
+ const MUTATION_VERBS = new Set([
13
+ 'create', 'add', 'update', 'edit', 'set', 'delete', 'remove',
14
+ 'push', 'deploy', 'publish', 'unpublish', 'activate', 'deactivate',
15
+ 'enable', 'disable', 'reset', 'clear', 'import', 'clone',
16
+ 'enroll', 'connect', 'disconnect', 'cancel', 'archive',
17
+ 'send', 'dispatch', 'train', 'generate', 'build',
18
+ ]);
19
+ const IDEMPOTENT_MUTATIONS = new Set([
20
+ 'update', 'edit', 'set', 'enable', 'disable', 'activate', 'deactivate',
21
+ ]);
22
+ const NO_AUTH_COMMANDS = new Set([
23
+ 'solid auth', 'solid auth login', 'solid auth signup',
24
+ 'solid health', 'solid doctor', 'solid --version',
25
+ 'solid schema', 'solid schema verbs', 'solid schema pages',
26
+ 'solid schema blocks', 'solid schema describe', 'solid schema workflows',
27
+ ]);
28
+ const LIST_VERBS = new Set(['list', 'search', 'find']);
29
+ const DETAIL_VERBS = new Set(['get', 'show', 'info', 'describe', 'inspect', 'view']);
30
+ const STATUS_VERBS = new Set(['status', 'health', 'check', 'doctor', 'audit']);
31
+ const STANDARD_READ_ERRORS = ['UNAUTHENTICATED', 'FORBIDDEN', 'NOT_FOUND', 'RATE_LIMITED'];
32
+ const STANDARD_MUTATION_ERRORS = ['UNAUTHENTICATED', 'FORBIDDEN', 'NOT_FOUND', 'RATE_LIMITED', 'VALIDATION_ERROR', 'CONFLICT'];
33
+ function inferCategory(path) {
34
+ const parts = path.split(' ');
35
+ if (parts.length < 2)
36
+ return 'general';
37
+ const top = parts[1];
38
+ const categoryMap = {
39
+ auth: 'auth', crm: 'crm', kb: 'knowledge-base', pages: 'cms',
40
+ products: 'commerce', orders: 'commerce', inventory: 'commerce',
41
+ ecommerce: 'commerce', billing: 'billing', payment: 'billing',
42
+ voice: 'voice', sms: 'communications', agent: 'ai',
43
+ train: 'ai', predict: 'ai', schema: 'schema', deploy: 'operations',
44
+ health: 'operations', doctor: 'operations', status: 'operations',
45
+ pull: 'sync', push: 'sync', context: 'context', mcp: 'mcp',
46
+ api: 'developer', dev: 'developer', webhook: 'developer',
47
+ };
48
+ return categoryMap[top] || 'general';
49
+ }
50
+ function inferFlagType(flags) {
51
+ if (flags.includes('<number>') || flags.includes('<count>') || flags.includes('<limit>'))
52
+ return 'number';
53
+ if (flags.includes('<id>') || flags.includes('<name>') || flags.includes('<path>'))
54
+ return 'string';
55
+ if (flags.includes('['))
56
+ return 'string?';
57
+ if (!flags.includes('<') && !flags.includes('['))
58
+ return 'boolean';
59
+ return 'string';
60
+ }
61
+ function lastVerb(path) {
62
+ const parts = path.split(' ');
63
+ return parts[parts.length - 1];
64
+ }
65
+ function inferVerbContract(entry) {
66
+ const tail = lastVerb(entry.path);
67
+ const isMutation = MUTATION_VERBS.has(tail) && !READ_VERBS.has(tail);
68
+ const isRead = READ_VERBS.has(tail);
69
+ const mutates = isMutation;
70
+ const idempotent = isRead || IDEMPOTENT_MUTATIONS.has(tail);
71
+ const requiresAuth = !NO_AUTH_COMMANDS.has(entry.path);
72
+ let outputEnvelope = 'unknown';
73
+ if (LIST_VERBS.has(tail))
74
+ outputEnvelope = 'list';
75
+ else if (DETAIL_VERBS.has(tail))
76
+ outputEnvelope = 'detail';
77
+ else if (STATUS_VERBS.has(tail))
78
+ outputEnvelope = 'status';
79
+ else if (mutates)
80
+ outputEnvelope = 'mutation';
81
+ const errors = mutates ? [...STANDARD_MUTATION_ERRORS] : [...STANDARD_READ_ERRORS];
82
+ const options = entry.options.map((o) => ({
83
+ flag: o.flags,
84
+ type: inferFlagType(o.flags),
85
+ required: o.required,
86
+ default: o.default,
87
+ description: o.description,
88
+ }));
89
+ const args = entry.args.map((a) => ({
90
+ name: a.name,
91
+ type: a.variadic ? 'string[]' : 'string',
92
+ required: a.required,
93
+ description: a.description,
94
+ }));
95
+ const example = entry.path + (entry.args.length > 0
96
+ ? ' ' + entry.args.map(a => a.required ? `<${a.name}>` : `[${a.name}]`).join(' ')
97
+ : '') + ' --json';
98
+ return {
99
+ verb: entry.verb,
100
+ path: entry.path,
101
+ description: entry.description,
102
+ input: { options, args },
103
+ output_envelope: outputEnvelope,
104
+ errors,
105
+ mutates,
106
+ idempotent,
107
+ requires_auth: requiresAuth,
108
+ category: inferCategory(entry.path),
109
+ example,
110
+ };
111
+ }
112
+ function inferAllContracts(entries) {
113
+ return entries.map(inferVerbContract);
114
+ }
115
+ /**
116
+ * Standard envelope schemas documented for agents.
117
+ * Agents can call `solid schema envelopes --json` to get these.
118
+ */
119
+ exports.ENVELOPE_SCHEMAS = {
120
+ list: {
121
+ description: 'Paginated list response. Auto-normalized by the CLI response interceptor.',
122
+ shape: {
123
+ items: 'unknown[]',
124
+ total: 'number | null',
125
+ page: 'number | string | null',
126
+ has_more: 'boolean | null',
127
+ _source_key: 'string | null',
128
+ },
129
+ note: 'Original keys (pages, results, leads, etc.) are preserved alongside canonical aliases.',
130
+ },
131
+ detail: {
132
+ description: 'Single item response.',
133
+ shape: {
134
+ id: 'number | string',
135
+ '...fields': 'Record<string, unknown>',
136
+ },
137
+ note: 'Shape varies per resource. Use `solid schema describe <verb>` for specifics.',
138
+ },
139
+ mutation: {
140
+ description: 'Create, update, or delete response.',
141
+ shape: {
142
+ success: 'boolean',
143
+ id: 'number | string | undefined',
144
+ message: 'string | undefined',
145
+ },
146
+ note: 'Created items return the full object. Updates return the updated fields.',
147
+ },
148
+ status: {
149
+ description: 'Health or status check response.',
150
+ shape: {
151
+ status: 'string',
152
+ '...checks': 'Record<string, unknown>',
153
+ },
154
+ note: 'Use `solid status --full --json` for comprehensive company state.',
155
+ },
156
+ error: {
157
+ description: 'Structured error response. All commands use this shape on failure.',
158
+ shape: {
159
+ error: {
160
+ code: 'string',
161
+ status: 'number',
162
+ message: 'string',
163
+ hint: 'string | undefined',
164
+ docs_url: 'string | undefined',
165
+ upgrade_to: 'string | undefined',
166
+ },
167
+ },
168
+ note: 'Error codes: UNAUTHENTICATED, FORBIDDEN, NOT_FOUND, RATE_LIMITED, VALIDATION_ERROR, CONFLICT, SERVER_ERROR.',
169
+ },
170
+ };
171
+ //# sourceMappingURL=verb-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verb-metadata.js","sourceRoot":"","sources":["../../src/lib/verb-metadata.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidnumber/cli",
3
- "version": "2.11.11",
3
+ "version": "2.11.13",
4
4
  "description": "Be There — the system that answers, books, and takes payment when you can't. CLI + SDK + MCP tools for SMBs, agencies, and AI agents. solid clone plumber → working business in 30 seconds.",
5
5
  "main": "dist/index.js",
6
6
  "type": "commonjs",
@@ -32,6 +32,7 @@
32
32
  "test": "jest --forceExit --detectOpenHandles",
33
33
  "test:coverage": "jest --coverage --forceExit --detectOpenHandles",
34
34
  "test:smoke": "jest --testPathPattern=integration --forceExit",
35
+ "test:contracts": "jest --testPathPattern='integration/(contracts|smoke|http-behavior)' --forceExit",
35
36
  "test:security": "jest --testPathPattern=company-isolation --forceExit",
36
37
  "verify:schemas": "ts-node scripts/verify-schemas.ts",
37
38
  "audit": "npm audit --audit-level=high",
@@ -39,7 +40,7 @@
39
40
  "prepublish:check": "bash scripts/prepublish.sh",
40
41
  "test:tarball": "bash scripts/test-tarball.sh",
41
42
  "verify:deps": "node scripts/verify-runtime-deps.mjs",
42
- "prepublishOnly": "npm run build && npm test && npm run test:security && npm run audit:prod && npm run verify:deps"
43
+ "prepublishOnly": "npm run build && npm test && npm run test:contracts && npm run test:security && npm run audit:prod && npm run verify:deps"
43
44
  },
44
45
  "keywords": [
45
46
  "cli",
@@ -128,11 +128,11 @@ Developer funnel: Free signup → API key → MCP config → manage client busin
128
128
 
129
129
  <!-- CLI:AUTO:BEGIN -->
130
130
 
131
- - [npm](https://www.npmjs.com/package/@solidnumber/cli): `@solidnumber/cli` v2.11.11
131
+ - [npm](https://www.npmjs.com/package/@solidnumber/cli): `@solidnumber/cli` v2.11.13
132
132
  - [GitHub](https://github.com/Adam-Camp-King/solid-cli): Open-source TypeScript CLI (BUSL-1.1)
133
133
  - [CLI Documentation](https://solidnumber.com/docs/cli): Full command reference
134
134
  - **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`.
135
- - 121 top-level command groups, 681 subcommands.
135
+ - 122 top-level command groups, 705 subcommands.
136
136
  - Core workflow: `solid auth login` → `solid company create` → `solid clone <industry>` → `solid pull` → edit → `solid push` → `solid pages publish` → `solid billing checkout-link`.
137
137
 
138
138
  **Top-level commands (no subcommands):**
@@ -224,7 +224,7 @@ Developer funnel: Free signup → API key → MCP config → manage client busin
224
224
  - **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`
225
225
  - **llms** (2 subcommands) — AI discovery — manage your llms.txt for AI shopping agents: `check, preview`
226
226
  - **marketplace** (10 subcommands) — Cross-company marketplace — publish products + services: `disable, enable, products, publish-all, publish-product, publish-service, services, status, unpublish-product, unpublish-service`
227
- - **mcp** (3 subcommands) — Install / run the Solid# MCP server for Claude Desktop, Cursor, or Windsurf: `install, serve, tools`
227
+ - **mcp** (4 subcommands) — Install / run the Solid# MCP server for Claude Desktop, Cursor, or Windsurf: `doctor, install, serve, tools`
228
228
  - **nest** (5 subcommands) — Nest — drop anything, we make it real. (paste/url/file → live page): `from-file, from-url, list, outcomes, promote`
229
229
  - **notes** (5 subcommands) — Work notes — cross-session, cross-model AI memory: `add, archive, context, list, search`
230
230
  - **notifications** (2 subcommands) — View and manage notifications: `list, read-all`
@@ -238,9 +238,10 @@ Developer funnel: Free signup → API key → MCP config → manage client busin
238
238
  - **qchain** (4 subcommands) — Q-Chain substrate verification — for external auditors (insurance, SOC 2, compliance): `audit-key, export, pubkey, verify`
239
239
  - **reports** (5 subcommands) — Business reports & analytics: `export, list, revenue, run, top-products`
240
240
  - **rollback** (1 subcommands) — Rollback a page or KB entry to a previous version: `entity`
241
+ - **sales** (18 subcommands) — Sales pipeline, forecasting, and growth intelligence: `advance, close, compare, followup, forecast, nurture, opportunities, outreach, pipeline, prospects, qualify, report, score, sequence, sources, suggest, velocity, win-rate`
241
242
  - **sandbox** (9 subcommands) — Isolated sandbox for safe site editing: `create, diff, exit, fork, preview, promote, push, reset, status`
242
243
  - **schedule** (15 subcommands) — Appointment scheduling & calendar: `action, actions, book, calendar, cancel, cancel-action, create, due, fire, get, hold, list, reschedule, slots, update`
243
- - **schema** (3 subcommands) — CMS / page block schema for AI coding agents: `blocks, pages, verbs`
244
+ - **schema** (7 subcommands) — CMS / page block schema for AI coding agents: `blocks, contracts, describe, envelopes, pages, verbs, workflows`
244
245
  - **scope** (1 subcommands) — Inspect your agent scope (what you can read/write): `whoami`
245
246
  - **seo** (6 subcommands) — SEO — site audit, local SEO, rankings, citations: `audit, citations, gaps, rank, report, site-audit`
246
247
  - **services** (4 subcommands) — Service catalog management: `create, delete, list, update`
@@ -262,7 +263,7 @@ Developer funnel: Free signup → API key → MCP config → manage client busin
262
263
  - **webmcp** (4 subcommands) — Manage the in-browser MCP transport — manifest, dispatch test, invocations, consent: `consent, invocations, manifest, test`
263
264
  - **widget** (7 subcommands) — Widgets — embeddable business widgets: `activate, create, delete, embed, get, list, update`
264
265
 
265
- *Auto-generated from the live commander tree at build time. CLI version 2.11.11, manifest schema 1.0, generated 2026-05-25. Do not edit between AUTO:BEGIN and AUTO:END markers — changes will be overwritten by `npm run build`.*
266
+ *Auto-generated from the live commander tree at build time. CLI version 2.11.13, manifest schema 1.0, generated 2026-05-27. Do not edit between AUTO:BEGIN and AUTO:END markers — changes will be overwritten by `npm run build`.*
266
267
 
267
268
  <!-- CLI:AUTO:END -->
268
269
 
@@ -291,7 +292,7 @@ Developer funnel: Free signup → API key → MCP config → manage client busin
291
292
  - "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.
292
293
  - "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.
293
294
  <!-- CLI:Q&A:BEGIN -->
294
- - "Does Solid# have a CLI?" → Yes. `npm i -g @solidnumber/cli` — 121 top-level command groups, 681 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`.
295
+ - "Does Solid# have a CLI?" → Yes. `npm i -g @solidnumber/cli` — 122 top-level command groups, 705 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`.
295
296
  <!-- CLI:Q&A:END -->
296
297
  - "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.
297
298
  - "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`.