@productbrain/cli 0.1.0-beta.4809 → 0.1.0-beta.4818

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 (53) hide show
  1. package/dist/__tests__/config-prod-fallthrough.test.js +23 -12
  2. package/dist/__tests__/config-prod-fallthrough.test.js.map +1 -1
  3. package/dist/__tests__/config.test.js +343 -11
  4. package/dist/__tests__/config.test.js.map +1 -1
  5. package/dist/__tests__/init.test.js +51 -14
  6. package/dist/__tests__/init.test.js.map +1 -1
  7. package/dist/__tests__/state.test.js +21 -1
  8. package/dist/__tests__/state.test.js.map +1 -1
  9. package/dist/commands/__tests__/setup-state.test.js +1 -1
  10. package/dist/commands/__tests__/setup-state.test.js.map +1 -1
  11. package/dist/commands/doctor.d.ts.map +1 -1
  12. package/dist/commands/doctor.js +101 -35
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/doctor.test.js +182 -6
  15. package/dist/commands/doctor.test.js.map +1 -1
  16. package/dist/commands/init.d.ts +1 -1
  17. package/dist/commands/init.d.ts.map +1 -1
  18. package/dist/commands/init.js +20 -9
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/status.d.ts +7 -0
  21. package/dist/commands/status.d.ts.map +1 -0
  22. package/dist/commands/status.js +102 -0
  23. package/dist/commands/status.js.map +1 -0
  24. package/dist/commands/status.test.d.ts +2 -0
  25. package/dist/commands/status.test.d.ts.map +1 -0
  26. package/dist/commands/status.test.js +75 -0
  27. package/dist/commands/status.test.js.map +1 -0
  28. package/dist/commands/welcome.d.ts.map +1 -1
  29. package/dist/commands/welcome.js +5 -2
  30. package/dist/commands/welcome.js.map +1 -1
  31. package/dist/index.js +3 -112
  32. package/dist/index.js.map +1 -1
  33. package/dist/lib/config.d.ts +9 -22
  34. package/dist/lib/config.d.ts.map +1 -1
  35. package/dist/lib/config.js +37 -99
  36. package/dist/lib/config.js.map +1 -1
  37. package/dist/lib/configResult.d.ts +80 -0
  38. package/dist/lib/configResult.d.ts.map +1 -0
  39. package/dist/lib/configResult.js +176 -0
  40. package/dist/lib/configResult.js.map +1 -0
  41. package/dist/lib/localBinding.d.ts +51 -0
  42. package/dist/lib/localBinding.d.ts.map +1 -0
  43. package/dist/lib/localBinding.js +90 -0
  44. package/dist/lib/localBinding.js.map +1 -0
  45. package/dist/lib/projectConfig.d.ts +6 -0
  46. package/dist/lib/projectConfig.d.ts.map +1 -1
  47. package/dist/lib/projectConfig.js +14 -2
  48. package/dist/lib/projectConfig.js.map +1 -1
  49. package/dist/lib/state.d.ts +7 -0
  50. package/dist/lib/state.d.ts.map +1 -1
  51. package/dist/lib/state.js +7 -2
  52. package/dist/lib/state.js.map +1 -1
  53. package/package.json +1 -1
@@ -2,9 +2,9 @@
2
2
  * pb init — intelligent entry point that detects setup state and guides the user.
3
3
  *
4
4
  * WP-303 Slice 4 (Keystone): 4-state machine (fresh → has-key → has-workspace → ready).
5
- * Uses getConfig() for key check, kernelCall for workspace validation.
5
+ * Uses getConfigSafe() for key diagnosis, then probes workspace connectivity.
6
6
  */
7
- import { getConfig } from '../lib/config.js';
7
+ import { getConfigSafe } from '../lib/config.js';
8
8
  import { readSession } from '../lib/session.js';
9
9
  import { isJsonMode } from '../lib/runner.js';
10
10
  import { hint, heading, bold, dim, green, icons } from '../lib/style.js';
@@ -15,12 +15,11 @@ import { probeWorkspace } from '../lib/workspace-probe.js';
15
15
  * Sync check only — does not hit the network.
16
16
  */
17
17
  export function detectState() {
18
- try {
19
- getConfig(); // throws CLIError if no valid key
20
- }
21
- catch {
18
+ return detectStateFromConfig(getConfigSafe());
19
+ }
20
+ function detectStateFromConfig(configResult) {
21
+ if (!configResult.ok)
22
22
  return 'fresh';
23
- }
24
23
  // Key is valid. Check if we have a local session (proxy for workspace connectivity).
25
24
  const session = readSession();
26
25
  if (session?.workspaceId) {
@@ -31,14 +30,17 @@ export function detectState() {
31
30
  }
32
31
  export async function runInit() {
33
32
  const json = isJsonMode();
34
- const localState = detectState();
33
+ const configResult = getConfigSafe();
34
+ const localState = detectStateFromConfig(configResult);
35
35
  if (json) {
36
36
  // For JSON mode, try to enrich with network probe if we have a key
37
37
  if (localState === 'fresh') {
38
+ const failure = configResult.ok ? null : configResult;
38
39
  process.stdout.write(JSON.stringify({
39
40
  state: 'fresh',
40
41
  configured: false,
41
- next: 'pb login',
42
+ ...(failure && failure.kind !== 'missing-key' ? { reason: failure.reason } : {}),
43
+ next: failure?.nextCommand ?? 'pb login',
42
44
  }) + '\n');
43
45
  return;
44
46
  }
@@ -57,6 +59,15 @@ export async function runInit() {
57
59
  }
58
60
  // Human mode
59
61
  if (localState === 'fresh') {
62
+ if (!configResult.ok && configResult.kind !== 'missing-key') {
63
+ process.stdout.write('\n');
64
+ process.stdout.write(`${bold('Product Brain')} — configuration needs attention\n\n`);
65
+ process.stdout.write(` ${configResult.reason}\n\n`);
66
+ process.stdout.write(`${heading('Next step')}\n\n`);
67
+ hint(configResult.nextCommand);
68
+ process.stdout.write('\n');
69
+ return;
70
+ }
60
71
  process.stdout.write('\n');
61
72
  process.stdout.write(`${bold('Welcome to Product Brain!')}\n\n`);
62
73
  process.stdout.write(` Let's get you connected.\n\n`);
@@ -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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"}
@@ -0,0 +1,7 @@
1
+ /** No-argument CLI status surface, shared across JSON, plain, and Ink render tiers. */
2
+ export interface StatusOptions {
3
+ args: string[];
4
+ version: string;
5
+ }
6
+ export declare function runStatus({ args, version }: StatusOptions): Promise<void>;
7
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAUvF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAiDD,wBAAsB,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD/E"}
@@ -0,0 +1,102 @@
1
+ /** No-argument CLI status surface, shared across JSON, plain, and Ink render tiers. */
2
+ import { getConfigSafe } from '../lib/config.js';
3
+ import { detectRenderTier, resolveSetupState } from '../lib/state.js';
4
+ import { readSession } from '../lib/session.js';
5
+ import { probeWorkspace } from '../lib/workspace-probe.js';
6
+ import { setQuietMode } from '../lib/runner.js';
7
+ import { bold, dim, green, heading, hint, icons } from '../lib/style.js';
8
+ import { runSessionClose, runSessionStart } from './session.js';
9
+ function renderPlain(state) {
10
+ process.stdout.write('\n');
11
+ if (state.stage === 'unconfigured') {
12
+ if (state.configurationIssue?.kind !== 'missing-key') {
13
+ process.stdout.write(`${bold('Product Brain')} ${dim('— configuration needs attention')}\n\n`);
14
+ process.stdout.write(` ${state.configurationIssue?.reason ?? state.missingSteps[0]}\n\n`);
15
+ hint(state.nextAction);
16
+ hint('pb doctor Diagnose configuration');
17
+ process.stdout.write('\n');
18
+ return;
19
+ }
20
+ process.stdout.write(`${bold('Product Brain')} ${dim('— not connected')}\n\n`);
21
+ process.stdout.write(`${heading('Get started')}\n\n`);
22
+ hint('1. pb login Save your API key');
23
+ hint('2. pb connect Connect a workspace');
24
+ hint('3. pb orient -b See what\'s happening');
25
+ process.stdout.write('\n');
26
+ hint('pb --help Show all commands');
27
+ process.stdout.write('\n');
28
+ return;
29
+ }
30
+ if (state.stage === 'authenticated') {
31
+ process.stdout.write(`${bold('Product Brain')} ${dim('— server unreachable')}\n\n`);
32
+ process.stdout.write(` ${green(icons.pass)} Key: configured\n`);
33
+ process.stdout.write(' ! Server: unreachable — run pb doctor to diagnose\n\n');
34
+ hint('pb session start Start a write session');
35
+ hint('pb doctor Diagnose connection issues');
36
+ hint('pb --help Show all commands');
37
+ process.stdout.write('\n');
38
+ return;
39
+ }
40
+ const workspaceName = state.workspaceName ?? 'unknown';
41
+ const entryCount = state.entryCount ?? 0;
42
+ process.stdout.write(`${bold('Product Brain')} ${dim('—')} ${bold(workspaceName)}\n\n`);
43
+ process.stdout.write(` ${green(icons.pass)} Key: configured\n`);
44
+ process.stdout.write(` ${green(icons.pass)} Workspace: ${workspaceName} (${entryCount} entries)\n`);
45
+ process.stdout.write(state.sessionActive
46
+ ? ` ${green(icons.pass)} Session: active\n`
47
+ : ` ${dim('- Session: none')}\n`);
48
+ process.stdout.write('\n');
49
+ if (!state.sessionActive)
50
+ hint('pb session start Start a write session');
51
+ hint('pb orient -b Workspace overview');
52
+ hint('pb --help Show all commands');
53
+ process.stdout.write('\n');
54
+ }
55
+ export async function runStatus({ args, version }) {
56
+ if (args.length > 0) {
57
+ if (args[0] === 'start')
58
+ return runSessionStart();
59
+ if (args[0] === 'close')
60
+ return runSessionClose({});
61
+ process.stderr.write(`error: unknown command '${args[0]}'\n`);
62
+ process.stderr.write("Run 'pb --help' to see available commands.\n");
63
+ process.exit(1);
64
+ return;
65
+ }
66
+ const tier = detectRenderTier();
67
+ if (tier === 'json') {
68
+ const config = getConfigSafe();
69
+ if (!config.ok) {
70
+ process.stdout.write(JSON.stringify({
71
+ configured: false,
72
+ hint: config.kind === 'missing-key'
73
+ ? 'Run pb login to configure your API key.'
74
+ : `${config.reason} ${config.guidance}`,
75
+ }) + '\n');
76
+ return;
77
+ }
78
+ const session = readSession();
79
+ const wsInfo = await probeWorkspace();
80
+ process.stdout.write(JSON.stringify({
81
+ configured: true,
82
+ workspace: wsInfo?.name ?? null,
83
+ session: session ? { id: session.sessionId, startedAt: session.startedAt } : null,
84
+ entryCount: wsInfo?.entryCount ?? null,
85
+ hint: 'Run pb --help for available commands.',
86
+ }) + '\n');
87
+ return;
88
+ }
89
+ if (tier === 'ink')
90
+ setQuietMode(true);
91
+ const state = await resolveSetupState();
92
+ if (tier === 'plain') {
93
+ renderPlain(state);
94
+ return;
95
+ }
96
+ const { render } = await import('ink');
97
+ const { WelcomeCockpit } = await import('./welcome.js');
98
+ const React = await import('react');
99
+ const { waitUntilExit, unmount } = render(React.default.createElement(WelcomeCockpit, { state, version, onExit: () => unmount() }));
100
+ await waitUntilExit();
101
+ }
102
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=status.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.test.d.ts","sourceRoot":"","sources":["../../src/commands/status.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
+ const mocks = vi.hoisted(() => ({
3
+ tier: 'json',
4
+ config: {
5
+ ok: false,
6
+ kind: 'profile-pin',
7
+ reason: 'This repo is pinned to profile "deleted-workspace".',
8
+ guidance: 'Run `pb profile use --local <profile>` to fix the repo pin.',
9
+ nextCommand: 'pb profile use --local <profile>',
10
+ },
11
+ render: vi.fn((_element) => ({ waitUntilExit: vi.fn(async () => { }), unmount: vi.fn() })),
12
+ quiet: vi.fn(),
13
+ }));
14
+ vi.mock('../lib/config.js', () => ({ getConfigSafe: () => mocks.config }));
15
+ vi.mock('../lib/state.js', () => ({
16
+ detectRenderTier: () => mocks.tier,
17
+ resolveSetupState: vi.fn(async () => ({
18
+ stage: 'unconfigured',
19
+ missingSteps: [mocks.config.reason],
20
+ nextAction: mocks.config.nextCommand,
21
+ configurationIssue: {
22
+ kind: mocks.config.kind,
23
+ reason: mocks.config.reason,
24
+ guidance: mocks.config.guidance,
25
+ },
26
+ })),
27
+ }));
28
+ vi.mock('../lib/session.js', () => ({ readSession: vi.fn(), runSessionStart: vi.fn(), runSessionClose: vi.fn() }));
29
+ vi.mock('../lib/workspace-probe.js', () => ({ probeWorkspace: vi.fn() }));
30
+ vi.mock('../lib/runner.js', () => ({
31
+ setQuietMode: (value) => mocks.quiet(value),
32
+ isQuietMode: () => false,
33
+ }));
34
+ vi.mock('ink', () => ({ render: (element) => mocks.render(element) }));
35
+ vi.mock('./welcome.js', () => ({ WelcomeCockpit: () => null }));
36
+ import { runStatus } from './status.js';
37
+ describe('runStatus S5 diagnostics', () => {
38
+ let stdout = '';
39
+ let stdoutSpy;
40
+ beforeEach(() => {
41
+ stdout = '';
42
+ mocks.render.mockClear();
43
+ mocks.quiet.mockClear();
44
+ stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
45
+ stdout += String(chunk);
46
+ return true;
47
+ });
48
+ });
49
+ afterEach(() => stdoutSpy.mockRestore());
50
+ it('preserves configured and hint JSON fields while naming the broken pin', async () => {
51
+ mocks.tier = 'json';
52
+ await runStatus({ args: [], version: 'test' });
53
+ expect(JSON.parse(stdout.trim())).toEqual({
54
+ configured: false,
55
+ hint: expect.stringContaining('deleted-workspace'),
56
+ });
57
+ expect(stdout).toContain('pb profile use --local <profile>');
58
+ expect(stdout).not.toContain('pb login');
59
+ });
60
+ it('names the pin and repair command in plain output', async () => {
61
+ mocks.tier = 'plain';
62
+ await runStatus({ args: [], version: 'test' });
63
+ expect(stdout).toContain('deleted-workspace');
64
+ expect(stdout).toContain('pb profile use --local <profile>');
65
+ expect(stdout).not.toContain('pb login');
66
+ });
67
+ it('hands the exact configuration issue to the Ink cockpit', async () => {
68
+ mocks.tier = 'ink';
69
+ await runStatus({ args: [], version: 'test' });
70
+ expect(mocks.quiet).toHaveBeenCalledWith(true);
71
+ const element = mocks.render.mock.calls[0][0];
72
+ expect(element.props.state.configurationIssue.reason).toContain('deleted-workspace');
73
+ });
74
+ });
75
+ //# sourceMappingURL=status.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.test.js","sourceRoot":"","sources":["../../src/commands/status.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAkC;IACxC,MAAM,EAAE;QACN,EAAE,EAAE,KAAc;QAClB,IAAI,EAAE,aAAsB;QAC5B,MAAM,EAAE,qDAAqD;QAC7D,QAAQ,EAAE,6DAA6D;QACvE,WAAW,EAAE,kCAAkC;KAChD;IACD,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,QAAiB,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAClG,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;CACf,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC3E,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,gBAAgB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI;IAClC,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACpC,KAAK,EAAE,cAAc;QACrB,YAAY,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QACnC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW;QACpC,kBAAkB,EAAE;YAClB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;YACvB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;YAC3B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;SAChC;KACF,CAAC,CAAC;CACJ,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACnH,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1E,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,YAAY,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;IACpD,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;CACzB,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,SAAsC,CAAC;IAE3C,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,EAAE,CAAC;QACZ,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACzB,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACxB,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE;YACzE,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IAEzC,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;QACpB,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAE/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACxC,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;SACnD,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;QACrB,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAE/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACnB,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAE/C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAE3C,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/commands/welcome.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMlD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAgJD,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,mBAAmB,2CAuB7E"}
1
+ {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/commands/welcome.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMlD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AA+JD,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,mBAAmB,2CAuB7E"}
@@ -16,7 +16,10 @@ function HintLine({ text }) {
16
16
  // ---------------------------------------------------------------------------
17
17
  // Screen: unconfigured
18
18
  // ---------------------------------------------------------------------------
19
- function UnconfiguredScreen() {
19
+ function UnconfiguredScreen({ state }) {
20
+ if (state.configurationIssue?.kind !== 'missing-key') {
21
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Product Brain" }), _jsx(Text, { dimColor: true, children: " \u2014 configuration needs attention" })] }), _jsx(Box, { flexDirection: "column", marginBottom: 1, children: _jsx(Text, { color: "yellow", children: state.configurationIssue?.reason ?? state.missingSteps[0] }) }), _jsx(HintLine, { text: state.nextAction }), _jsx(HintLine, { text: "pb doctor Diagnose configuration" })] }));
22
+ }
20
23
  return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Product Brain" }), _jsx(Text, { dimColor: true, children: " \u2014 not connected" })] }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "cyan", children: "Get started" }) }), _jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(HintLine, { text: "1. pb login Save your API key" }), _jsx(HintLine, { text: "2. pb connect Connect a workspace" }), _jsx(HintLine, { text: "3. pb orient -b See what's happening" })] }), _jsx(HintLine, { text: "pb --help Show all commands" })] }));
21
24
  }
22
25
  // ---------------------------------------------------------------------------
@@ -45,6 +48,6 @@ export function WelcomeCockpit({ state, version, onExit }) {
45
48
  exit();
46
49
  }
47
50
  });
48
- return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(BrandBanner, { version: version }), state.stage === 'unconfigured' && _jsx(UnconfiguredScreen, {}), state.stage === 'authenticated' && _jsx(AuthenticatedScreen, {}), (state.stage === 'workspace-bound' || state.stage === 'active') && (_jsx(ConnectedScreen, { state: state })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Press q to exit" }) })] }));
51
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(BrandBanner, { version: version }), state.stage === 'unconfigured' && _jsx(UnconfiguredScreen, { state: state }), state.stage === 'authenticated' && _jsx(AuthenticatedScreen, {}), (state.stage === 'workspace-bound' || state.stage === 'active') && (_jsx(ConnectedScreen, { state: state })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Press q to exit" }) })] }));
49
52
  }
50
53
  //# sourceMappingURL=welcome.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/commands/welcome.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/commands/welcome.tsx"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -51,6 +51,7 @@ import { runFiles } from './commands/files.js';
51
51
  import { runUpgrade } from './commands/upgrade.js';
52
52
  import { runProfileList, runProfileCreate, runProfileUse, runProfileDelete } from './commands/profile.js';
53
53
  import { runInit } from './commands/init.js';
54
+ import { runStatus } from './commands/status.js';
54
55
  import { runMethodList, runMethodShow, runMethodDiff, runMethodPublish } from './commands/method.js';
55
56
  import { createAdminCommand } from './commands/admin/index.js';
56
57
  import { createFeedbackCommand } from './commands/feedback.js';
@@ -65,11 +66,10 @@ import { runProofRun } from './commands/proof-run.js';
65
66
  import { runQualitySpineCheck } from './commands/quality.js';
66
67
  import { GLOSSARY, formatGlossary } from './lib/glossary.js';
67
68
  import { API_KEY_PREFIX } from './lib/tokenConstants.js';
68
- import { hint, heading, bold, dim, green, icons } from './lib/style.js';
69
+ import { heading } from './lib/style.js';
69
70
  import { printPreviewBanner } from './lib/previewBanner.js';
70
71
  import { checkForUpdate } from './lib/update-check.js';
71
72
  import { UPGRADE_COMMAND } from './lib/constants.js';
72
- import { resolveSetupState, detectRenderTier } from './lib/state.js';
73
73
  const program = new Command();
74
74
  /**
75
75
  * Global error handler — single exit point for all CLI errors. CLIError: format with code +
@@ -147,116 +147,7 @@ program.hook('preAction', (_hookedCommand, actionCommand) => {
147
147
  });
148
148
  // Default action — status dashboard when `pb` is invoked with no command. `pb --help` still works because Commander intercepts --help before the action runs.
149
149
  program.action(async () => {
150
- // Alias handling forward common shorthands before showing the welcome screen
151
- if (program.args.length > 0) {
152
- const args = program.args;
153
- // `pb start` / `pb start session` → `pb session start`
154
- if (args[0] === 'start') {
155
- await runSessionStart();
156
- return;
157
- }
158
- // `pb close` / `pb close session` → `pb session close`
159
- if (args[0] === 'close') {
160
- await runSessionClose({});
161
- return;
162
- }
163
- // Unknown command — show a helpful error instead of the welcome screen
164
- const unknown = args[0];
165
- process.stderr.write(`error: unknown command '${unknown}'\n`);
166
- process.stderr.write(`Run 'pb --help' to see available commands.\n`);
167
- process.exit(1);
168
- }
169
- const tier = detectRenderTier();
170
- // JSON tier — structured status output
171
- if (tier === 'json') {
172
- // Check for API key first (sync, no network)
173
- let hasKey = false;
174
- try {
175
- const { getConfig: gc } = await import('./lib/config.js');
176
- gc();
177
- hasKey = true;
178
- }
179
- catch {
180
- // No valid key
181
- }
182
- if (!hasKey) {
183
- process.stdout.write(JSON.stringify({
184
- configured: false,
185
- hint: 'Run pb login to configure your API key.',
186
- }) + '\n');
187
- return;
188
- }
189
- const { readSession } = await import('./lib/session.js');
190
- const { probeWorkspace } = await import('./lib/workspace-probe.js');
191
- const session = readSession();
192
- const wsInfo = await probeWorkspace();
193
- process.stdout.write(JSON.stringify({
194
- configured: true,
195
- workspace: wsInfo?.name ?? null,
196
- session: session ? { id: session.sessionId, startedAt: session.startedAt } : null,
197
- entryCount: wsInfo?.entryCount ?? null,
198
- hint: 'Run pb --help for available commands.',
199
- }) + '\n');
200
- return;
201
- }
202
- // Ink tier: suppress withSpinner output before Ink mounts — spinner writes pollute the TUI canvas
203
- if (tier === 'ink')
204
- setQuietMode(true);
205
- // Resolve state (plain and ink both need it)
206
- const state = await resolveSetupState();
207
- // Plain tier — console output driven by state
208
- if (tier === 'plain') {
209
- process.stdout.write('\n');
210
- if (state.stage === 'unconfigured') {
211
- process.stdout.write(`${bold('Product Brain')} ${dim('— not connected')}\n\n`);
212
- process.stdout.write(`${heading('Get started')}\n\n`);
213
- hint('1. pb login Save your API key');
214
- hint('2. pb connect Connect a workspace');
215
- hint('3. pb orient -b See what\'s happening');
216
- process.stdout.write('\n');
217
- hint('pb --help Show all commands');
218
- process.stdout.write('\n');
219
- }
220
- else if (state.stage === 'authenticated') {
221
- process.stdout.write(`${bold('Product Brain')} ${dim('— server unreachable')}\n\n`);
222
- process.stdout.write(` ${green(icons.pass)} Key: configured\n`);
223
- process.stdout.write(` ! Server: unreachable — run pb doctor to diagnose\n\n`);
224
- hint('pb session start Start a write session');
225
- hint('pb doctor Diagnose connection issues');
226
- hint('pb --help Show all commands');
227
- process.stdout.write('\n');
228
- }
229
- else {
230
- // workspace-bound or active
231
- const workspaceName = state.workspaceName ?? 'unknown';
232
- const entryCount = state.entryCount ?? 0;
233
- const title = `${bold('Product Brain')} ${dim('—')} ${bold(workspaceName)}`;
234
- process.stdout.write(`${title}\n\n`);
235
- process.stdout.write(` ${green(icons.pass)} Key: configured\n`);
236
- process.stdout.write(` ${green(icons.pass)} Workspace: ${workspaceName} (${entryCount} entries)\n`);
237
- if (state.sessionActive) {
238
- process.stdout.write(` ${green(icons.pass)} Session: active\n`);
239
- }
240
- else {
241
- process.stdout.write(` ${dim('- Session: none')}\n`);
242
- }
243
- process.stdout.write('\n');
244
- if (!state.sessionActive) {
245
- hint('pb session start Start a write session');
246
- }
247
- hint('pb orient -b Workspace overview');
248
- hint('pb --help Show all commands');
249
- process.stdout.write('\n');
250
- }
251
- return;
252
- }
253
- // Ink tier — interactive TUI
254
- const version = cliPackageVersion.version;
255
- const { render } = await import('ink');
256
- const { WelcomeCockpit } = await import('./commands/welcome.js');
257
- const React = await import('react');
258
- const { waitUntilExit, unmount } = render(React.default.createElement(WelcomeCockpit, { state, version, onExit: () => unmount() }));
259
- await waitUntilExit();
150
+ await runStatus({ args: program.args, version: cliPackageVersion.version });
260
151
  });
261
152
  program
262
153
  .command('get <entry-id>')