@solidnumber/cli 2.13.1 → 2.15.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.
@@ -44,7 +44,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
44
44
  return (mod && mod.__esModule) ? mod : { "default": mod };
45
45
  };
46
46
  Object.defineProperty(exports, "__esModule", { value: true });
47
- exports.initCommand = void 0;
47
+ exports.initCommand = exports.STARTER_VERSION = void 0;
48
+ exports.renderStarterClaudeMd = renderStarterClaudeMd;
49
+ exports.renderSolidConfig = renderSolidConfig;
50
+ exports.buildStarterFiles = buildStarterFiles;
48
51
  const commander_1 = require("commander");
49
52
  const chalk_1 = __importDefault(require("chalk"));
50
53
  const fs = __importStar(require("fs"));
@@ -292,10 +295,129 @@ Manage all your Solid# client companies from one place.
292
295
  },
293
296
  },
294
297
  };
298
+ // ---------------------------------------------------------------------------
299
+ // Starter-kit layer — the tenant stamp + operating rules + connector wiring
300
+ // that turn a bare template into a project bound to ONE business (company_id).
301
+ // Kept as pure builders so the real output is unit-tested, not simulated.
302
+ // ---------------------------------------------------------------------------
303
+ /** Bumped when the scaffold's shape changes; recorded in .solid/config.json. */
304
+ exports.STARTER_VERSION = '1.0.0';
305
+ const DEFAULT_API_URL = 'https://api.solidnumber.com';
306
+ const DEFAULT_CONNECTOR_URL = 'https://api.solidnumber.com/mcp/connector';
307
+ /**
308
+ * The operating-rules CLAUDE.md — the sleeper feature. Every local AI session
309
+ * that opens this project inherits the SAME discipline the Solid# connector runs
310
+ * by (`_OPERATING_RULES` in solid-backend), so client work grounds and persists
311
+ * instead of hallucinating and evaporating. Keep these five in parity with the
312
+ * backend contract.
313
+ */
314
+ function renderStarterClaudeMd(ctx) {
315
+ const cid = ctx.companyId != null ? String(ctx.companyId) : '<set in .solid/config.json>';
316
+ return `# ${ctx.name}
317
+
318
+ This project was scaffolded by Solid# for **company_id ${cid}** and is bound to that one
319
+ business. It builds ON Solid# infrastructure — the same CRM, brand, knowledge base, pages,
320
+ and AI the company already runs — reached through the Solid# connector.
321
+
322
+ > Your source lives in YOUR git. Solid#'s platform is never handed to you. The only Solid#
323
+ > credential in this project is a scoped token in \`.env\` that can touch company_id ${cid}
324
+ > and nothing else. It is gitignored — never commit it.
325
+
326
+ ## Operating rules — how to work in this project
327
+
328
+ You are an AI building for a real business. Nothing you make here is throwaway. Follow these
329
+ five rules; they are the same rules the Solid# connector runs by.
330
+
331
+ 1. **Ground, don't guess.** Write only facts that come from a Solid# tool result (company
332
+ profile, brand truth, knowledge base). Never invent a partner, payment processor,
333
+ certification, price, award, or year in business. If it isn't in a tool result, say you
334
+ don't have it and ask the owner.
335
+
336
+ 2. **Persist everything — nothing is session-ephemeral.** Every design, brand decision, page,
337
+ and durable fact must be WRITTEN BACK to company_id ${cid} through the connector
338
+ (\`set_brand_truth\`, \`set_capability\`, \`edit_page_content\`, \`add_memory\`, …). Generating a
339
+ preview is NOT persisting: if you generate and don't commit, the work evaporates and the
340
+ business is left exactly as un-changed as before.
341
+
342
+ 3. **Preview → confirm → written.** Solid# write tools preview by default; call again with
343
+ \`confirm=true\` to commit. Money and irreversible actions also need the owner to type the
344
+ approval phrase. Every write is auditable and reversible (\`list_changes\` / \`approve_change\`
345
+ / \`rollback_change\`).
346
+
347
+ 4. **Close the grounding gaps first.** If the company's brand/positioning is unconfigured, do
348
+ NOT write public copy yet — ask the owner the grounding questions and persist each answer
349
+ with \`set_brand_truth\` / \`set_capability\`.
350
+
351
+ 5. **Leave a handoff.** Open every Solid# session with \`start_here\` (it orients you to this
352
+ business) and close it with \`end_session\` (it persists what you did and what's next), so
353
+ the next session — and the owner — continue from where you stopped instead of starting cold.
354
+
355
+ ## The connector
356
+
357
+ - Connector URL: ${ctx.connectorUrl}
358
+ - Bound company_id: ${cid}
359
+ - Config: \`.solid/config.json\`
360
+
361
+ **Call \`start_here\` before you build. Call \`end_session\` when you finish.**
362
+
363
+ ## Deploy
364
+
365
+ Your build deploys back to THIS company's own slot (keyed by company_id ${cid}) — never to a
366
+ shared or wrong place:
367
+
368
+ \`\`\`bash
369
+ solid deploy
370
+ \`\`\`
371
+
372
+ ## Resources
373
+ - CLI: \`npm i -g @solidnumber/cli\`
374
+ - Docs: https://solidnumber.com/docs
375
+ - App type: ${ctx.typeLabel}
376
+ `;
377
+ }
378
+ /** The tenant stamp — who this project is, so every tool call is scoped right. */
379
+ function renderSolidConfig(ctx) {
380
+ return JSON.stringify({
381
+ companyId: ctx.companyId,
382
+ connectorUrl: ctx.connectorUrl,
383
+ apiUrl: ctx.apiUrl,
384
+ appType: ctx.type,
385
+ starterVersion: exports.STARTER_VERSION,
386
+ createdWith: '@solidnumber/cli',
387
+ }, null, 2) + '\n';
388
+ }
389
+ /**
390
+ * Build EVERY file the starter lands on the client's drive — template files plus
391
+ * the starter-kit layer (CLAUDE.md operating rules, .solid/config.json tenant
392
+ * stamp, token-safe .gitignore, tenant-stamped .env.example). Pure → testable.
393
+ */
394
+ function buildStarterFiles(ctx) {
395
+ const appType = APP_TYPES[ctx.type];
396
+ const files = {};
397
+ // 1. Template files, {{name}}-rendered.
398
+ for (const [filename, content] of Object.entries(appType.files)) {
399
+ files[filename] = content.replace(/\{\{name\}\}/g, ctx.name);
400
+ }
401
+ // 2. Tenant stamp — the scoped token slot + bound company_id. Never a real secret.
402
+ const cidEnv = ctx.companyId != null ? String(ctx.companyId) : '';
403
+ files['.env.example'] =
404
+ `# Scoped Solid# token — can touch company_id ${cidEnv || '<yours>'} ONLY.\n` +
405
+ `# Get one: solid auth token create -n "${ctx.name}"\n` +
406
+ `# Copy this file to .env and fill it in. NEVER commit .env.\n` +
407
+ `SOLID_TOKEN=\n` +
408
+ `SOLID_COMPANY_ID=${cidEnv}\n`;
409
+ // 3. Config, CLAUDE.md, .gitignore (token-safe).
410
+ files['.solid/config.json'] = renderSolidConfig(ctx);
411
+ files['CLAUDE.md'] = renderStarterClaudeMd(ctx);
412
+ files['.gitignore'] = ['node_modules/', 'dist/', '.env', '.env.local', '.solid/token', '*.log', ''].join('\n');
413
+ return files;
414
+ }
295
415
  exports.initCommand = new commander_1.Command('init')
296
- .description('Scaffold a LOCAL app template (boilerplate files only does NOT create a company; use `solid company create` or `solid demo create` for that)')
416
+ .description('Scaffold a LOCAL starter project bound to one Solid# company (tenant-stamped, operating-rules + connector wired). Does NOT create a company; use `solid company create` or `solid demo create` for that.')
297
417
  .argument('<name>', 'Project name')
298
418
  .option('-t, --type <type>', 'App type (basic, marketplace, saas, agency-dashboard)', 'basic')
419
+ .option('-c, --company <id>', 'Bind the project to this Solid# company_id (tenant stamp)')
420
+ .option('--no-git', 'Skip initializing a local git repo for the project')
299
421
  .option('--list', 'List available app types')
300
422
  .action(async (name, options) => {
301
423
  if (options.list) {
@@ -324,54 +446,67 @@ exports.initCommand = new commander_1.Command('init')
324
446
  }
325
447
  const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
326
448
  const spinner = ora(`Scaffolding ${appType.name}...`).start();
449
+ // Resolve the tenant stamp: --company > stored config > env > unset.
450
+ const rawCompany = options.company
451
+ ?? config_1.config.companyId
452
+ ?? process.env.SOLID_COMPANY_ID;
453
+ const hasCompany = rawCompany != null && String(rawCompany).trim() !== '';
454
+ const companyId = hasCompany ? parseInt(String(rawCompany), 10) : null;
455
+ if (hasCompany && Number.isNaN(companyId)) {
456
+ console.error(chalk_1.default.red(`Invalid --company id: ${rawCompany}`));
457
+ process.exit(1);
458
+ }
459
+ const ctx = {
460
+ name,
461
+ type: options.type,
462
+ typeLabel: appType.name,
463
+ companyId,
464
+ apiUrl: config_1.config.apiUrl || DEFAULT_API_URL,
465
+ connectorUrl: DEFAULT_CONNECTOR_URL,
466
+ };
327
467
  fs.mkdirSync(projectDir, { recursive: true });
328
- for (const [filename, content] of Object.entries(appType.files)) {
468
+ const files = buildStarterFiles(ctx);
469
+ for (const [filename, content] of Object.entries(files)) {
329
470
  const filePath = path.join(projectDir, filename);
330
- const rendered = content.replace(/\{\{name\}\}/g, name);
331
- fs.writeFileSync(filePath, rendered);
471
+ fs.mkdirSync(path.dirname(filePath), { recursive: true }); // nested .solid/
472
+ fs.writeFileSync(filePath, content);
473
+ }
474
+ // The client's OWN git — their source, their repo, never ours. --no-git opts out.
475
+ let gitInitialized = false;
476
+ if (options.git !== false) {
477
+ try {
478
+ const { execFileSync } = await Promise.resolve().then(() => __importStar(require('node:child_process')));
479
+ const gopts = { cwd: projectDir, stdio: 'ignore' };
480
+ execFileSync('git', ['init', '-q'], gopts);
481
+ execFileSync('git', ['add', '-A'], gopts);
482
+ execFileSync('git', ['commit', '-q', '-m',
483
+ `chore: scaffold ${name} (Solid# starter${companyId != null ? `, company ${companyId}` : ''})`], gopts);
484
+ gitInitialized = true;
485
+ }
486
+ catch {
487
+ // git absent, or commit blocked (no identity) — non-fatal.
488
+ }
332
489
  }
333
- // Copy .gitignore
334
- fs.writeFileSync(path.join(projectDir, '.gitignore'), 'node_modules/\n.env\ndist/\n');
335
- // Generate CLAUDE.md for AI context
336
- const claudeMd = `# ${name}
337
-
338
- Built on [Solid#](https://solidnumber.com) infrastructure.
339
-
340
- ## Architecture
341
- - Backend: Solid# API (${config_1.config.apiUrl || 'https://api.solidnumber.com'})
342
- - SDK: @solidnumber/sdk
343
- - Type: ${appType.name}
344
-
345
- ## API Key
346
- Set \`SOLID_API_KEY\` in \`.env\`. Create one with:
347
- \`\`\`bash
348
- solid auth token create -n "${name}" -s "crm:read,pages:read,kb:read,agents:read"
349
- \`\`\`
350
-
351
- ## Solid# Resources
352
- - API Docs: https://solidnumber.com/docs/api
353
- - SDK Docs: https://solidnumber.com/docs/sdks
354
- - CLI: npm i -g @solidnumber/cli
355
- `;
356
- fs.writeFileSync(path.join(projectDir, 'CLAUDE.md'), claudeMd);
357
490
  spinner.succeed(chalk_1.default.green(`${appType.name} scaffolded`));
358
491
  console.log('');
359
- console.log(` ${chalk_1.default.bold('Project:')} ${name}`);
360
- console.log(` ${chalk_1.default.bold('Type:')} ${appType.name}`);
361
- console.log(` ${chalk_1.default.bold('Path:')} ${projectDir}`);
492
+ console.log(` ${chalk_1.default.bold('Project:')} ${name}`);
493
+ console.log(` ${chalk_1.default.bold('Type:')} ${appType.name}`);
494
+ console.log(` ${chalk_1.default.bold('Company:')} ${companyId != null ? companyId : chalk_1.default.yellow('unset — add it to .solid/config.json')}`);
495
+ console.log(` ${chalk_1.default.bold('Path:')} ${projectDir}`);
362
496
  console.log('');
363
- const files = Object.keys(appType.files);
364
- for (const f of files) {
497
+ for (const f of Object.keys(files).sort()) {
365
498
  console.log(chalk_1.default.dim(` ${f}`));
366
499
  }
367
- console.log(chalk_1.default.dim(' .gitignore'));
368
- console.log(chalk_1.default.dim(' CLAUDE.md'));
500
+ console.log('');
501
+ console.log(gitInitialized
502
+ ? chalk_1.default.dim(' ✓ git initialized — your source, your git (Solid# is never in it)')
503
+ : chalk_1.default.dim(' (no git repo — run `git init` yourself, or drop --no-git)'));
369
504
  console.log('');
370
505
  console.log(chalk_1.default.bold(' Next steps:'));
371
506
  console.log(` ${chalk_1.default.cyan(`cd ${name}`)}`);
372
507
  console.log(` ${chalk_1.default.cyan('npm install')}`);
373
- console.log(` ${chalk_1.default.cyan('cp .env.example .env')} ${chalk_1.default.dim('← add your API key')}`);
374
- console.log(` ${chalk_1.default.cyan('npm start')}`);
508
+ console.log(` ${chalk_1.default.cyan('cp .env.example .env')} ${chalk_1.default.dim('← add your scoped token')}`);
509
+ console.log(` ${chalk_1.default.dim('Open in Claude Code — CLAUDE.md carries the operating rules; call start_here first.')}`);
375
510
  console.log('');
376
511
  });
377
512
  const command_kit_1 = require("../lib/command-kit");
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -139,8 +139,65 @@ exports.insightsCommand
139
139
  successText: `Insight ${id} rejected`,
140
140
  });
141
141
  });
142
+ // ── Communications master report (Insights suite) ───────────────────
143
+ // The SAME payload the web Insights Overview renders and the
144
+ // insights.master_summary verb returns — one aggregation layer.
145
+ exports.insightsCommand
146
+ .command('report')
147
+ .description('Master communications report — sentiment, evaluation, needs-attention')
148
+ .option('-d, --days <n>', 'Window in days (1-90)', '7')
149
+ .option('--json', 'Output as JSON')
150
+ .action(async (options) => {
151
+ const chalk = (await Promise.resolve().then(() => __importStar(require('chalk')))).default;
152
+ const ora = (await Promise.resolve().then(() => __importStar(require('ora')))).default;
153
+ const spinner = ora('Building the master report...').start();
154
+ try {
155
+ const res = await api_client_1.apiClient.get('/api/v1/communications/insights/summary', {
156
+ params: { days: options.days },
157
+ });
158
+ const d = res.data;
159
+ if ((0, json_output_1.isJsonOutput)(options)) {
160
+ spinner.stop();
161
+ console.log(JSON.stringify(d, null, 2));
162
+ return;
163
+ }
164
+ const s = d.sentiment || {};
165
+ const all = s.all_communications || {};
166
+ const e = d.evaluation || {};
167
+ spinner.succeed(chalk.green(`Last ${d.period_days} days — ${all.total || 0} communications, overall ${s.overall || 'neutral'}`));
168
+ console.log(` Mood: ${chalk.green(`${all.positive || 0} positive`)} · ${chalk.dim(`${all.neutral || 0} neutral`)} · ${chalk.red(`${all.negative || 0} negative`)}` +
169
+ (all.unscored ? chalk.dim(` · ${all.unscored} unscored`) : ''));
170
+ const ch = s.channels || {};
171
+ const chan = (k, label) => (ch[k]?.total ? `${label} ${ch[k].total}` : null);
172
+ const parts = [chan('voice', 'calls'), chan('sms', 'texts'), chan('email', 'emails'), chan('chat', 'chats')].filter(Boolean);
173
+ if (parts.length)
174
+ console.log(chalk.dim(` Channels: ${parts.join(' · ')}`));
175
+ if (e.calls_scored) {
176
+ console.log(chalk.dim(` Calls: avg quality ${e.avg_quality}/100 · resolution ${Math.round((e.resolution_rate || 0) * 100)}% · escalation ${Math.round((e.escalation_rate || 0) * 100)}%`));
177
+ }
178
+ const attention = d.needs_attention || [];
179
+ if (attention.length) {
180
+ console.log(chalk.red(` Needs attention (${attention.length}):`));
181
+ for (const a of attention.slice(0, 5)) {
182
+ console.log(` ${chalk.yellow(a.channel)} ${a.summary || 'negative communication'} ${chalk.dim(a.line || '')}`);
183
+ }
184
+ }
185
+ else {
186
+ console.log(chalk.dim(' Nothing negative needs attention.'));
187
+ }
188
+ const reply = e.needs_reply || [];
189
+ if (reply.length)
190
+ console.log(chalk.red(` Unanswered negatives: ${reply.length} — reply first.`));
191
+ }
192
+ catch (error) {
193
+ spinner.fail('Failed to build the report');
194
+ console.error(error instanceof Error ? error.message : String(error));
195
+ process.exitCode = 1;
196
+ }
197
+ });
142
198
  const command_kit_2 = require("../lib/command-kit");
143
199
  (0, command_kit_2.appendExamples)(exports.insightsCommand, [
200
+ { cmd: 'solid insights report', why: 'How are my customer communications doing?' },
144
201
  { cmd: 'solid insights list', why: 'AI-generated insights from conversations' },
145
202
  { cmd: 'solid insights stats', why: 'Insight volume + top themes' },
146
203
  { cmd: 'solid insights approve <id>', why: 'Send insight → KB' },
@@ -1 +1 @@
1
- {"version":3,"file":"insights.js","sourceRoot":"","sources":["../../src/commands/insights.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"insights.js","sourceRoot":"","sources":["../../src/commands/insights.ts"],"names":[],"mappings":"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"}
@@ -219,6 +219,150 @@ numbersCmd
219
219
  fail(spinner, 'Failed to remove phone number', error);
220
220
  }
221
221
  });
222
+ // ── Lines (Telephony Platform: shared human+AI lines) ───────────────
223
+ const ROUTING_LABELS = {
224
+ ring: 'Ring me — my phone first, AI backs up',
225
+ ask: 'Ask me — I decide per call',
226
+ ai: 'All to AI — the agent answers',
227
+ off: 'Off — the AI never touches this line',
228
+ };
229
+ const linesCmd = exports.voiceCommand
230
+ .command('lines')
231
+ .description('My phone lines — owner, routing mode, agent')
232
+ .option('--company', 'Every company line (admins; default: lines you may see)')
233
+ .option('--json', 'Output as JSON')
234
+ .action(async (options) => {
235
+ requireAuth();
236
+ const spinner = (0, ora_1.default)('Loading lines...').start();
237
+ try {
238
+ const scope = options.company ? 'company' : 'mine';
239
+ const response = await api_client_1.apiClient.get('/api/v1/phone/numbers', { params: { scope } });
240
+ const lines = Array.isArray(response.data) ? response.data : response.data?.items || [];
241
+ if ((0, json_output_1.isJsonOutput)(options)) {
242
+ spinner.stop();
243
+ console.log(JSON.stringify(response.data, null, 2));
244
+ return;
245
+ }
246
+ spinner.succeed(chalk_1.default.green(`${lines.length} line${lines.length === 1 ? '' : 's'}`));
247
+ console.log('');
248
+ for (const l of lines) {
249
+ const owner = l.owner_type === 'user' ? chalk_1.default.blue(`personal · ${l.user_name || 'unassigned'}`)
250
+ : l.owner_type === 'agent' ? chalk_1.default.magenta(`agent · ${l.agent_name || '—'}`)
251
+ : chalk_1.default.dim('company');
252
+ const mode = l.routing_mode ? chalk_1.default.cyan(l.routing_mode) : chalk_1.default.dim('—');
253
+ const def = l.is_default ? chalk_1.default.yellow(' ★default') : '';
254
+ console.log(` ${chalk_1.default.bold(l.phone_number)}${def} — ${owner}`);
255
+ console.log(chalk_1.default.dim(` ID: ${l.id} routing: `) + mode + (l.agent_name && l.owner_type !== 'agent' ? chalk_1.default.dim(` AI: ${l.agent_name}`) : ''));
256
+ }
257
+ }
258
+ catch (error) {
259
+ fail(spinner, 'Failed to load lines', error);
260
+ }
261
+ });
262
+ linesCmd
263
+ .command('routing <line_id> <mode>')
264
+ .description('Set who fields a line: ring | ask | ai | off')
265
+ .action(async (lineId, mode) => {
266
+ requireAuth();
267
+ if (!ROUTING_LABELS[mode]) {
268
+ console.error(chalk_1.default.red(` mode must be one of: ${Object.keys(ROUTING_LABELS).join(' | ')}`));
269
+ process.exitCode = 1;
270
+ return;
271
+ }
272
+ const spinner = (0, ora_1.default)(`Setting routing on line ${lineId}...`).start();
273
+ try {
274
+ await api_client_1.apiClient.patch(`/api/v1/phone/settings/${lineId}`, { routing_mode: mode });
275
+ spinner.succeed(chalk_1.default.green(`Line ${lineId} → ${ROUTING_LABELS[mode]}`));
276
+ }
277
+ catch (error) {
278
+ fail(spinner, 'Failed to set routing mode', error);
279
+ }
280
+ });
281
+ linesCmd
282
+ .command('context')
283
+ .description('My default line + today\'s counts (one call)')
284
+ .option('--json', 'Output as JSON')
285
+ .action(async (options) => {
286
+ requireAuth();
287
+ const spinner = (0, ora_1.default)('Loading my line...').start();
288
+ try {
289
+ const response = await api_client_1.apiClient.get('/api/v1/phone/me/context');
290
+ const d = response.data;
291
+ if ((0, json_output_1.isJsonOutput)(options)) {
292
+ spinner.stop();
293
+ console.log(JSON.stringify(d, null, 2));
294
+ return;
295
+ }
296
+ spinner.succeed(chalk_1.default.green('My line'));
297
+ const line = d.default_line;
298
+ if (!line) {
299
+ console.log(chalk_1.default.dim(' No line visible to you yet.'));
300
+ return;
301
+ }
302
+ console.log(` ${chalk_1.default.bold(line.phone_number)} — ${chalk_1.default.cyan(line.routing_mode || 'ai')}${line.agent_name ? chalk_1.default.dim(` AI: ${line.agent_name}`) : ''}`);
303
+ const t = d.today || {};
304
+ console.log(chalk_1.default.dim(` Today: ${t.calls || 0} calls · AI ${t.ai_handled || 0} · human ${t.human_handled || 0} · missed ${t.missed || 0}`));
305
+ }
306
+ catch (error) {
307
+ fail(spinner, 'Failed to load line context', error);
308
+ }
309
+ });
310
+ exports.voiceCommand
311
+ .command('spend')
312
+ .description('Usage & spend per line/user/agent (customer charges)')
313
+ .option('-m, --months <n>', 'Trailing months incl. current', '1')
314
+ .option('--json', 'Output as JSON')
315
+ .action(async (options) => {
316
+ requireAuth();
317
+ const spinner = (0, ora_1.default)('Loading spend...').start();
318
+ try {
319
+ const response = await api_client_1.apiClient.get('/api/v1/phone/billing/by-owner', { params: { months: options.months } });
320
+ const d = response.data;
321
+ if ((0, json_output_1.isJsonOutput)(options)) {
322
+ spinner.stop();
323
+ console.log(JSON.stringify(d, null, 2));
324
+ return;
325
+ }
326
+ const t = d.totals || {};
327
+ spinner.succeed(chalk_1.default.green(`Last ${d.months} month${d.months === 1 ? '' : 's'}: $${((t.charge_cents || 0) / 100).toFixed(2)}`));
328
+ console.log(chalk_1.default.dim(` ${t.calls || 0} calls · ${t.minutes || 0} min · ${t.sms || 0} texts · ${Math.round((t.transcription_seconds || 0) / 60)} min transcribed`));
329
+ for (const row of (d.lines || [])) {
330
+ const who = row.user_name ? chalk_1.default.blue(row.user_name) : row.agent_name ? chalk_1.default.magenta(row.agent_name) : chalk_1.default.dim('company');
331
+ console.log(` ${chalk_1.default.bold(row.phone_number || '(company)')} ${chalk_1.default.dim(row.period)} — ${who} — $${((row.charge_cents || 0) / 100).toFixed(2)} ${chalk_1.default.dim(`(${row.calls} calls, ${row.minutes} min, ${row.sms} sms)`)}`);
332
+ }
333
+ }
334
+ catch (error) {
335
+ fail(spinner, 'Failed to load spend', error);
336
+ }
337
+ });
338
+ exports.voiceCommand
339
+ .command('pricing')
340
+ .description('Phone pricing — rentals, plans, transcription')
341
+ .option('--json', 'Output as JSON')
342
+ .action(async (options) => {
343
+ requireAuth();
344
+ const spinner = (0, ora_1.default)('Loading pricing...').start();
345
+ try {
346
+ const response = await api_client_1.apiClient.get('/api/v1/phone/pricing');
347
+ const d = response.data;
348
+ if ((0, json_output_1.isJsonOutput)(options)) {
349
+ spinner.stop();
350
+ console.log(JSON.stringify(d, null, 2));
351
+ return;
352
+ }
353
+ spinner.succeed(chalk_1.default.green('Phone pricing'));
354
+ console.log(` Local number: ${chalk_1.default.bold(d.rental?.local?.display || '—')} Toll-free: ${chalk_1.default.bold(d.rental?.toll_free?.display || '—')}`);
355
+ for (const p of (d.plans || [])) {
356
+ console.log(chalk_1.default.dim(` ${p.name}: $${(p.price_cents / 100).toFixed(0)}/mo — ${p.minutes_included} min included`));
357
+ }
358
+ if (d.transcription?.price_cents_per_minute) {
359
+ console.log(chalk_1.default.dim(` Call transcription: ${d.transcription.price_cents_per_minute}¢/min`));
360
+ }
361
+ }
362
+ catch (error) {
363
+ fail(spinner, 'Failed to load pricing', error);
364
+ }
365
+ });
222
366
  // ── Voicemail ────────────────────────────────────────────────────────
223
367
  const voicemailCmd = exports.voiceCommand
224
368
  .command('voicemail')