@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.
- package/dist/__tests__/config-prod-fallthrough.test.js +23 -12
- package/dist/__tests__/config-prod-fallthrough.test.js.map +1 -1
- package/dist/__tests__/config.test.js +343 -11
- package/dist/__tests__/config.test.js.map +1 -1
- package/dist/__tests__/init.test.js +51 -14
- package/dist/__tests__/init.test.js.map +1 -1
- package/dist/__tests__/state.test.js +21 -1
- package/dist/__tests__/state.test.js.map +1 -1
- package/dist/commands/__tests__/setup-state.test.js +1 -1
- package/dist/commands/__tests__/setup-state.test.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +101 -35
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctor.test.js +182 -6
- package/dist/commands/doctor.test.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +20 -9
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +102 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/status.test.d.ts +2 -0
- package/dist/commands/status.test.d.ts.map +1 -0
- package/dist/commands/status.test.js +75 -0
- package/dist/commands/status.test.js.map +1 -0
- package/dist/commands/welcome.d.ts.map +1 -1
- package/dist/commands/welcome.js +5 -2
- package/dist/commands/welcome.js.map +1 -1
- package/dist/index.js +3 -112
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +9 -22
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +37 -99
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/configResult.d.ts +80 -0
- package/dist/lib/configResult.d.ts.map +1 -0
- package/dist/lib/configResult.js +176 -0
- package/dist/lib/configResult.js.map +1 -0
- package/dist/lib/localBinding.d.ts +51 -0
- package/dist/lib/localBinding.d.ts.map +1 -0
- package/dist/lib/localBinding.js +90 -0
- package/dist/lib/localBinding.js.map +1 -0
- package/dist/lib/projectConfig.d.ts +6 -0
- package/dist/lib/projectConfig.d.ts.map +1 -1
- package/dist/lib/projectConfig.js +14 -2
- package/dist/lib/projectConfig.js.map +1 -1
- package/dist/lib/state.d.ts +7 -0
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +7 -2
- package/dist/lib/state.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/init.js
CHANGED
|
@@ -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
|
|
5
|
+
* Uses getConfigSafe() for key diagnosis, then probes workspace connectivity.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
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
|
-
|
|
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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,
|
|
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 @@
|
|
|
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;
|
|
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"}
|
package/dist/commands/welcome.js
CHANGED
|
@@ -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":";AAeA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAalD,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,SAAS,WAAW,CAAC,EAAE,OAAO,EAAuB;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3C,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,IAAI,IAAC,IAAI,kBAAE,UAAU,GAAQ,EAC9B,KAAC,IAAI,IAAC,IAAI,kBAAE,UAAU,GAAQ,EAC9B,KAAC,IAAI,IAAC,IAAI,kBAAE,UAAU,GAAQ,EAC9B,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,IAAI,oCAAqB,EAC/B,KAAC,IAAI,cAAE,IAAI,GAAQ,EACnB,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,OAAO,EAAE,GAAQ,IACjC,IACF,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,IAAI,kBAAE,kBAAkB,OAAO,EAAE,GAAQ,GAC3C,CACP,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,IAAI,EAAoB;IAC1C,OAAO,CACL,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,IAAI,EAAE,GAAQ,GAC/B,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,SAAS,kBAAkB;
|
|
1
|
+
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/commands/welcome.tsx"],"names":[],"mappings":";AAeA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAalD,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,SAAS,WAAW,CAAC,EAAE,OAAO,EAAuB;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3C,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,IAAI,IAAC,IAAI,kBAAE,UAAU,GAAQ,EAC9B,KAAC,IAAI,IAAC,IAAI,kBAAE,UAAU,GAAQ,EAC9B,KAAC,IAAI,IAAC,IAAI,kBAAE,UAAU,GAAQ,EAC9B,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,IAAI,oCAAqB,EAC/B,KAAC,IAAI,cAAE,IAAI,GAAQ,EACnB,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,OAAO,EAAE,GAAQ,IACjC,IACF,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,IAAI,kBAAE,kBAAkB,OAAO,EAAE,GAAQ,GAC3C,CACP,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,IAAI,EAAoB;IAC1C,OAAO,CACL,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,IAAI,EAAE,GAAQ,GAC/B,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,SAAS,kBAAkB,CAAC,EAAE,KAAK,EAAyB;IAC1D,IAAI,KAAK,CAAC,kBAAkB,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;QACrD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,KAAC,IAAI,IAAC,IAAI,oCAAqB,EAC/B,KAAC,IAAI,IAAC,QAAQ,4DAAwC,IAClD,EACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,YACzC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,KAAK,CAAC,kBAAkB,EAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,GAAQ,GACnF,EACN,KAAC,QAAQ,IAAC,IAAI,EAAE,KAAK,CAAC,UAAU,GAAI,EACpC,KAAC,QAAQ,IAAC,IAAI,EAAC,4CAA4C,GAAG,IAC1D,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,KAAC,IAAI,IAAC,IAAI,oCAAqB,EAC/B,KAAC,IAAI,IAAC,QAAQ,4CAAwB,IAClC,EACN,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,4BAAmB,GACtC,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,QAAQ,IAAC,IAAI,EAAC,oCAAoC,GAAG,EACtD,KAAC,QAAQ,IAAC,IAAI,EAAC,sCAAsC,GAAG,EACxD,KAAC,QAAQ,IAAC,IAAI,EAAC,uCAAuC,GAAG,IACrD,EACN,KAAC,QAAQ,IAAC,IAAI,EAAC,oCAAoC,GAAG,IAClD,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,SAAS,mBAAmB;IAC1B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,KAAC,IAAI,IAAC,IAAI,oCAAqB,EAC/B,KAAC,IAAI,IAAC,QAAQ,iDAA6B,IACvC,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAS,EAC5B,KAAC,IAAI,mCAAwB,IACzB,EACN,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,kBAAS,EAC7B,KAAC,IAAI,mDAAmC,EACxC,KAAC,IAAI,IAAC,IAAI,gCAAiB,EAC3B,KAAC,IAAI,+BAAoB,IACrB,IACF,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,QAAQ,IAAC,IAAI,EAAC,2CAA2C,GAAG,EAC7D,KAAC,QAAQ,IAAC,IAAI,EAAC,gDAAgD,GAAG,EAClE,KAAC,QAAQ,IAAC,IAAI,EAAC,uCAAuC,GAAG,IACrD,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,SAAS,eAAe,CAAC,EAAE,KAAK,EAAyB;IACvD,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,IAAI,SAAS,CAAC;IAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;IAEhD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,KAAC,IAAI,IAAC,IAAI,oCAAqB,EAC/B,KAAC,IAAI,IAAC,QAAQ,+BAAW,EACzB,KAAC,IAAI,IAAC,IAAI,kBAAE,IAAI,GAAQ,IACpB,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAS,EAC5B,KAAC,IAAI,mCAAwB,IACzB,EACN,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAS,EAC5B,KAAC,IAAI,cAAE,eAAe,IAAI,MAAM,UAAU,WAAW,GAAQ,IACzD,EACL,UAAU,CAAC,CAAC,CAAC,CACZ,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAS,EAC5B,KAAC,IAAI,mCAAwB,IACzB,CACP,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,QAAQ,sCAAuB,GACjC,CACP,IACG,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,CAAC,UAAU,IAAI,CACd,KAAC,QAAQ,IAAC,IAAI,EAAC,2CAA2C,GAAG,CAC9D,EACD,KAAC,QAAQ,IAAC,IAAI,EAAC,wCAAwC,GAAG,EAC1D,KAAC,QAAQ,IAAC,IAAI,EAAC,uCAAuC,GAAG,IACrD,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAuB;IAC5E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAE1B,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,KAAC,WAAW,IAAC,OAAO,EAAE,OAAO,GAAI,EAChC,KAAK,CAAC,KAAK,KAAK,cAAc,IAAI,KAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,GAAI,EACtE,KAAK,CAAC,KAAK,KAAK,eAAe,IAAI,KAAC,mBAAmB,KAAG,EAC1D,CAAC,KAAK,CAAC,KAAK,KAAK,iBAAiB,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,CAClE,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,GAAI,CAClC,EACD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,sCAAuB,GACjC,IACF,CACP,CAAC;AACJ,CAAC"}
|
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 {
|
|
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
|
-
|
|
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>')
|