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

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 (59) hide show
  1. package/dist/__tests__/capture.test.js +97 -0
  2. package/dist/__tests__/capture.test.js.map +1 -1
  3. package/dist/__tests__/config-prod-fallthrough.test.js +23 -12
  4. package/dist/__tests__/config-prod-fallthrough.test.js.map +1 -1
  5. package/dist/__tests__/config.test.js +343 -11
  6. package/dist/__tests__/config.test.js.map +1 -1
  7. package/dist/__tests__/init.test.js +51 -14
  8. package/dist/__tests__/init.test.js.map +1 -1
  9. package/dist/__tests__/state.test.js +21 -1
  10. package/dist/__tests__/state.test.js.map +1 -1
  11. package/dist/commands/__tests__/setup-state.test.js +1 -1
  12. package/dist/commands/__tests__/setup-state.test.js.map +1 -1
  13. package/dist/commands/capture.d.ts +4 -5
  14. package/dist/commands/capture.d.ts.map +1 -1
  15. package/dist/commands/capture.js +11 -10
  16. package/dist/commands/capture.js.map +1 -1
  17. package/dist/commands/doctor.d.ts.map +1 -1
  18. package/dist/commands/doctor.js +101 -35
  19. package/dist/commands/doctor.js.map +1 -1
  20. package/dist/commands/doctor.test.js +182 -6
  21. package/dist/commands/doctor.test.js.map +1 -1
  22. package/dist/commands/init.d.ts +1 -1
  23. package/dist/commands/init.d.ts.map +1 -1
  24. package/dist/commands/init.js +20 -9
  25. package/dist/commands/init.js.map +1 -1
  26. package/dist/commands/status.d.ts +7 -0
  27. package/dist/commands/status.d.ts.map +1 -0
  28. package/dist/commands/status.js +102 -0
  29. package/dist/commands/status.js.map +1 -0
  30. package/dist/commands/status.test.d.ts +2 -0
  31. package/dist/commands/status.test.d.ts.map +1 -0
  32. package/dist/commands/status.test.js +75 -0
  33. package/dist/commands/status.test.js.map +1 -0
  34. package/dist/commands/welcome.d.ts.map +1 -1
  35. package/dist/commands/welcome.js +5 -2
  36. package/dist/commands/welcome.js.map +1 -1
  37. package/dist/index.js +6 -115
  38. package/dist/index.js.map +1 -1
  39. package/dist/lib/config.d.ts +9 -22
  40. package/dist/lib/config.d.ts.map +1 -1
  41. package/dist/lib/config.js +37 -99
  42. package/dist/lib/config.js.map +1 -1
  43. package/dist/lib/configResult.d.ts +80 -0
  44. package/dist/lib/configResult.d.ts.map +1 -0
  45. package/dist/lib/configResult.js +176 -0
  46. package/dist/lib/configResult.js.map +1 -0
  47. package/dist/lib/localBinding.d.ts +51 -0
  48. package/dist/lib/localBinding.d.ts.map +1 -0
  49. package/dist/lib/localBinding.js +90 -0
  50. package/dist/lib/localBinding.js.map +1 -0
  51. package/dist/lib/projectConfig.d.ts +6 -0
  52. package/dist/lib/projectConfig.d.ts.map +1 -1
  53. package/dist/lib/projectConfig.js +14 -2
  54. package/dist/lib/projectConfig.js.map +1 -1
  55. package/dist/lib/state.d.ts +7 -0
  56. package/dist/lib/state.d.ts.map +1 -1
  57. package/dist/lib/state.js +7 -2
  58. package/dist/lib/state.js.map +1 -1
  59. 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":"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"}
@@ -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>')
@@ -578,13 +469,13 @@ program
578
469
  .option('-t, --type <relation-type>', 'Relation type for --link (default: surfaces_tension_in)')
579
470
  .option('--source-ref <ref>', 'Source reference URI (BET-240 E2: e.g. "meeting-2026-03-28.md")')
580
471
  .option('--source-excerpt <text>', 'Verbatim source excerpt (BET-240 E2)')
581
- // TEN-2226 / WP-456 E1: opt-in override keeps the entry a draft even in Open governance mode.
582
- .option('--draft', 'Force the entry to draft regardless of workspace governance mode (TEN-2226)')
472
+ .option('--draft', 'Force the entry to draft regardless of workspace governance mode — opt-in override, keeps it draft even in Open mode (TEN-2226 / WP-456 E1)')
583
473
  .option('--json', 'Output machine-readable JSON (deprecated: use global --json flag)')
584
474
  .option('--suggest-only', 'Show grounding preview (possible duplicates, related entries) without creating entry (WP-319)')
585
475
  .option('--strict', 'Prompt y/N before capturing when a possible duplicate is detected (WP-319)')
586
476
  .option('--owner-team <entry-id>', 'Existing Team entry ID to create AS OWNER of (WP-513 rung 2; pair with --owner-role)')
587
477
  .option('--owner-role <entry-id>', 'Existing Role entry ID to create AS OWNER of (WP-513 rung 2; pair with --owner-team)')
478
+ .option('--entry-type <canonical-key>', 'Explicit canonical type for the new entry (e.g. objective, key_result) — bypasses classification; -t/--type is the --link relation type (WP-684 TASK-77)')
588
479
  .action(async (textParts = [], opts) => {
589
480
  const text = textParts.join(' ').trim();
590
481
  if (!text && !opts.name) {
@@ -595,7 +486,7 @@ program
595
486
  text: text || opts.name || '', name: opts.name, description: opts.description, collection: opts.collection,
596
487
  field: opts.field, link: opts.link, type: opts.type, sourceRef: opts.sourceRef, sourceExcerpt: opts.sourceExcerpt,
597
488
  draft: opts.draft, json: opts.json, suggestOnly: opts.suggestOnly, strict: opts.strict,
598
- ownerTeam: opts.ownerTeam, ownerRole: opts.ownerRole,
489
+ ownerTeam: opts.ownerTeam, ownerRole: opts.ownerRole, entryType: opts.entryType,
599
490
  });
600
491
  });
601
492
  // --- Update command (TEN-703) ---