@productbrain/cli 0.1.0-beta.32 → 0.1.0-beta.35
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__/capture.test.js +2 -11
- package/dist/__tests__/capture.test.js.map +1 -1
- package/dist/__tests__/config.test.d.ts +8 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +166 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/constellation.test.js +2 -8
- package/dist/__tests__/constellation.test.js.map +1 -1
- package/dist/__tests__/fields.test.js +14 -14
- package/dist/__tests__/fields.test.js.map +1 -1
- package/dist/__tests__/handshake.test.js +9 -17
- package/dist/__tests__/handshake.test.js.map +1 -1
- package/dist/__tests__/init.test.d.ts +7 -0
- package/dist/__tests__/init.test.d.ts.map +1 -0
- package/dist/__tests__/init.test.js +146 -0
- package/dist/__tests__/init.test.js.map +1 -0
- package/dist/__tests__/login.test.js +28 -29
- package/dist/__tests__/login.test.js.map +1 -1
- package/dist/__tests__/onboarding.test.d.ts +6 -0
- package/dist/__tests__/onboarding.test.d.ts.map +1 -0
- package/dist/__tests__/onboarding.test.js +199 -0
- package/dist/__tests__/onboarding.test.js.map +1 -0
- package/dist/__tests__/promote.test.js +4 -16
- package/dist/__tests__/promote.test.js.map +1 -1
- package/dist/__tests__/prompts.test.d.ts +6 -0
- package/dist/__tests__/prompts.test.d.ts.map +1 -0
- package/dist/__tests__/prompts.test.js +146 -0
- package/dist/__tests__/prompts.test.js.map +1 -0
- package/dist/__tests__/proposals.test.js +6 -29
- package/dist/__tests__/proposals.test.js.map +1 -1
- package/dist/__tests__/relate.test.js +6 -23
- package/dist/__tests__/relate.test.js.map +1 -1
- package/dist/__tests__/runner.test.js +19 -15
- package/dist/__tests__/runner.test.js.map +1 -1
- package/dist/__tests__/session.test.js +2 -8
- package/dist/__tests__/session.test.js.map +1 -1
- package/dist/__tests__/setup.test.js +39 -25
- package/dist/__tests__/setup.test.js.map +1 -1
- package/dist/__tests__/spinner-labels.test.d.ts +2 -0
- package/dist/__tests__/spinner-labels.test.d.ts.map +1 -0
- package/dist/__tests__/spinner-labels.test.js +23 -0
- package/dist/__tests__/spinner-labels.test.js.map +1 -0
- package/dist/__tests__/update.test.js +27 -61
- package/dist/__tests__/update.test.js.map +1 -1
- package/dist/__tests__/workspace.test.d.ts +2 -0
- package/dist/__tests__/workspace.test.d.ts.map +1 -0
- package/dist/__tests__/workspace.test.js +308 -0
- package/dist/__tests__/workspace.test.js.map +1 -0
- package/dist/commands/accept.d.ts.map +1 -1
- package/dist/commands/accept.js +6 -2
- package/dist/commands/accept.js.map +1 -1
- package/dist/commands/brief.d.ts.map +1 -1
- package/dist/commands/brief.js +6 -1
- package/dist/commands/brief.js.map +1 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +17 -10
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/chain-walk.d.ts.map +1 -1
- package/dist/commands/chain-walk.js +6 -1
- package/dist/commands/chain-walk.js.map +1 -1
- package/dist/commands/changes.d.ts.map +1 -1
- package/dist/commands/changes.js +6 -1
- package/dist/commands/changes.js.map +1 -1
- package/dist/commands/codex-prep.d.ts.map +1 -1
- package/dist/commands/codex-prep.js +6 -2
- package/dist/commands/codex-prep.js.map +1 -1
- package/dist/commands/collections.d.ts.map +1 -1
- package/dist/commands/collections.js +6 -2
- package/dist/commands/collections.js.map +1 -1
- package/dist/commands/constellation.d.ts.map +1 -1
- package/dist/commands/constellation.js +6 -1
- package/dist/commands/constellation.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +6 -1
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +30 -20
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctor.test.d.ts +1 -0
- package/dist/commands/doctor.test.d.ts.map +1 -1
- package/dist/commands/doctor.test.js +54 -21
- package/dist/commands/doctor.test.js.map +1 -1
- package/dist/commands/fields.d.ts.map +1 -1
- package/dist/commands/fields.js +6 -2
- package/dist/commands/fields.js.map +1 -1
- package/dist/commands/get.d.ts.map +1 -1
- package/dist/commands/get.js +11 -3
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/handshake.d.ts.map +1 -1
- package/dist/commands/handshake.js +21 -22
- package/dist/commands/handshake.js.map +1 -1
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +11 -3
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +117 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +32 -20
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/promote.d.ts.map +1 -1
- package/dist/commands/promote.js +21 -7
- package/dist/commands/promote.js.map +1 -1
- package/dist/commands/reject.d.ts.map +1 -1
- package/dist/commands/reject.js +11 -5
- package/dist/commands/reject.js.map +1 -1
- package/dist/commands/relate.d.ts.map +1 -1
- package/dist/commands/relate.js +21 -10
- package/dist/commands/relate.js.map +1 -1
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +16 -6
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/setup.d.ts +1 -2
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +17 -38
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +45 -27
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +11 -5
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/workspace.d.ts +41 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +239 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/index.js +109 -21
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts +2 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +113 -57
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/config.d.ts +57 -4
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +189 -32
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +1 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +2 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/format.d.ts +10 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +27 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/onboarding.d.ts +19 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +373 -0
- package/dist/lib/onboarding.js.map +1 -0
- package/dist/lib/prompts.d.ts +38 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +90 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +4 -19
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/spinner.d.ts +27 -0
- package/dist/lib/spinner.d.ts.map +1 -0
- package/dist/lib/spinner.js +76 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/spinner.test.d.ts +2 -0
- package/dist/lib/spinner.test.d.ts.map +1 -0
- package/dist/lib/spinner.test.js +39 -0
- package/dist/lib/spinner.test.js.map +1 -0
- package/dist/lib/workspace-probe.d.ts +16 -0
- package/dist/lib/workspace-probe.d.ts.map +1 -0
- package/dist/lib/workspace-probe.js +33 -0
- package/dist/lib/workspace-probe.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb init — intelligent entry point that detects setup state and guides the user.
|
|
3
|
+
*
|
|
4
|
+
* WP-303 Slice 4 (Keystone): 4-state machine (fresh → has-key → has-workspace → ready).
|
|
5
|
+
* Uses getConfig() for key check, mcpCall for workspace validation.
|
|
6
|
+
*/
|
|
7
|
+
export type InitState = 'fresh' | 'has-key' | 'ready';
|
|
8
|
+
/**
|
|
9
|
+
* Detect the current setup state without throwing.
|
|
10
|
+
* Sync check only — does not hit the network.
|
|
11
|
+
*/
|
|
12
|
+
export declare function detectState(): InitState;
|
|
13
|
+
export declare function runInit(): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,WAAW,IAAI,SAAS,CAevC;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA6F7C"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb init — intelligent entry point that detects setup state and guides the user.
|
|
3
|
+
*
|
|
4
|
+
* WP-303 Slice 4 (Keystone): 4-state machine (fresh → has-key → has-workspace → ready).
|
|
5
|
+
* Uses getConfig() for key check, mcpCall for workspace validation.
|
|
6
|
+
*/
|
|
7
|
+
import { getConfig } from '../lib/config.js';
|
|
8
|
+
import { readSession } from '../lib/session.js';
|
|
9
|
+
import { isJsonMode } from '../lib/runner.js';
|
|
10
|
+
import { hint, heading, bold, dim, green, icons } from '../lib/style.js';
|
|
11
|
+
import { formatElapsed } from '../lib/format.js';
|
|
12
|
+
import { probeWorkspace } from '../lib/workspace-probe.js';
|
|
13
|
+
import { runOnboardingConversation } from '../lib/onboarding.js';
|
|
14
|
+
/**
|
|
15
|
+
* Detect the current setup state without throwing.
|
|
16
|
+
* Sync check only — does not hit the network.
|
|
17
|
+
*/
|
|
18
|
+
export function detectState() {
|
|
19
|
+
try {
|
|
20
|
+
getConfig(); // throws CLIError if no valid key
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return 'fresh';
|
|
24
|
+
}
|
|
25
|
+
// Key is valid. Check if we have a local session (proxy for workspace connectivity).
|
|
26
|
+
const session = readSession();
|
|
27
|
+
if (session?.workspaceId) {
|
|
28
|
+
return 'ready';
|
|
29
|
+
}
|
|
30
|
+
// Has key but no session — network probe needed to determine workspace connectivity.
|
|
31
|
+
return 'has-key';
|
|
32
|
+
}
|
|
33
|
+
export async function runInit() {
|
|
34
|
+
const json = isJsonMode();
|
|
35
|
+
const localState = detectState();
|
|
36
|
+
if (json) {
|
|
37
|
+
// For JSON mode, try to enrich with network probe if we have a key
|
|
38
|
+
if (localState === 'fresh') {
|
|
39
|
+
process.stdout.write(JSON.stringify({
|
|
40
|
+
state: 'fresh',
|
|
41
|
+
configured: false,
|
|
42
|
+
next: 'pb login',
|
|
43
|
+
}) + '\n');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const workspace = await probeWorkspace();
|
|
47
|
+
const session = readSession();
|
|
48
|
+
const state = workspace ? 'ready' : 'has-key';
|
|
49
|
+
process.stdout.write(JSON.stringify({
|
|
50
|
+
state,
|
|
51
|
+
configured: true,
|
|
52
|
+
workspace: workspace?.name ?? null,
|
|
53
|
+
session: session ? { id: session.sessionId, startedAt: session.startedAt } : null,
|
|
54
|
+
entryCount: workspace?.entryCount ?? null,
|
|
55
|
+
next: state === 'ready' ? 'pb orient -b' : 'pb setup',
|
|
56
|
+
}) + '\n');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Human mode
|
|
60
|
+
if (localState === 'fresh') {
|
|
61
|
+
process.stdout.write('\n');
|
|
62
|
+
process.stdout.write(`${bold('Welcome to Product Brain!')}\n\n`);
|
|
63
|
+
process.stdout.write(` Let's get you connected.\n\n`);
|
|
64
|
+
process.stdout.write(`${heading('Next steps')}\n\n`);
|
|
65
|
+
hint('1. pb login Save your API key');
|
|
66
|
+
hint('2. pb setup Connect a workspace');
|
|
67
|
+
hint('3. pb orient -b See what\'s happening');
|
|
68
|
+
process.stdout.write('\n');
|
|
69
|
+
hint(`Get a key: Product Brain app ${dim(icons.arrow)} Settings ${dim(icons.arrow)} API Keys`);
|
|
70
|
+
process.stdout.write('\n');
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// Has key — probe workspace
|
|
74
|
+
process.stdout.write('\n');
|
|
75
|
+
process.stdout.write(`${bold('Product Brain')} — checking workspace...\n\n`);
|
|
76
|
+
const workspace = await probeWorkspace();
|
|
77
|
+
const session = readSession();
|
|
78
|
+
if (!workspace) {
|
|
79
|
+
// has-key state — key works but can't reach workspace
|
|
80
|
+
process.stdout.write(` ${green(icons.pass)} API key configured\n`);
|
|
81
|
+
process.stdout.write(` ${dim('Could not reach workspace — check your connection.')}\n\n`);
|
|
82
|
+
process.stdout.write(`${heading('Next steps')}\n\n`);
|
|
83
|
+
hint('pb setup Connect a workspace');
|
|
84
|
+
hint('pb doctor Diagnose connection issues');
|
|
85
|
+
process.stdout.write('\n');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// ready state
|
|
89
|
+
process.stdout.write(` ${green(icons.pass)} Connected to ${bold(workspace.name)}\n`);
|
|
90
|
+
if (session) {
|
|
91
|
+
const elapsed = formatElapsed(session.startedAt);
|
|
92
|
+
process.stdout.write(` ${green(icons.pass)} Session active (started ${elapsed})\n`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
process.stdout.write(` ${dim(icons.dot)} No active session\n`);
|
|
96
|
+
}
|
|
97
|
+
// WP-304: Blank workspace → LLM onboarding conversation
|
|
98
|
+
const isBlank = !workspace.entryCount || workspace.entryCount < 3;
|
|
99
|
+
if (isBlank) {
|
|
100
|
+
process.stdout.write('\n');
|
|
101
|
+
await runOnboardingConversation(workspace.name);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if ((workspace.entryCount ?? 0) > 0) {
|
|
105
|
+
process.stdout.write(` ${dim(icons.dot)} ${workspace.entryCount} entries on the Chain\n`);
|
|
106
|
+
}
|
|
107
|
+
process.stdout.write('\n');
|
|
108
|
+
process.stdout.write(`${heading('You\'re all set!')}\n\n`);
|
|
109
|
+
if (!session) {
|
|
110
|
+
hint('pb session start Start a write session');
|
|
111
|
+
}
|
|
112
|
+
hint('pb orient -b Workspace overview');
|
|
113
|
+
hint('pb search <q> Search the Chain');
|
|
114
|
+
hint('pb capture <text> Capture knowledge');
|
|
115
|
+
process.stdout.write('\n');
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAIjE;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,SAAS,EAAE,CAAC,CAAC,kCAAkC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,qFAAqF;IACrF,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,qFAAqF;IACrF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC;IAEjC,IAAI,IAAI,EAAE,CAAC;QACT,mEAAmE;QACnE,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;gBAClC,KAAK,EAAE,OAAO;gBACd,UAAU,EAAE,KAAK;gBACjB,IAAI,EAAE,UAAU;aACjB,CAAC,GAAG,IAAI,CAAC,CAAC;YACX,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,cAAc,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAClC,KAAK;YACL,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,IAAI;YAClC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI;YACjF,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,IAAI;YACzC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU;SACtD,CAAC,GAAG,IAAI,CAAC,CAAC;QACX,OAAO;IACT,CAAC;IAED,aAAa;IACb,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAC5C,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC9C,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,gCAAgC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,4BAA4B;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC;IAE7E,MAAM,SAAS,GAAG,MAAM,cAAc,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAE9B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,sDAAsD;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,oDAAoD,CAAC,MAAM,CAAC,CAAC;QAC3F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACzC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,cAAc;IACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtF,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,OAAO,KAAK,CAAC,CAAC;IACvF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAClE,CAAC;IAED,wDAAwD;IACxD,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC;IAClE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,yBAAyB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,yBAAyB,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAC7C,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAC3C,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4BH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAiE9C"}
|
package/dist/commands/login.js
CHANGED
|
@@ -5,17 +5,13 @@
|
|
|
5
5
|
* error + signup URL and does NOT save. On network/timeout, warns but saves
|
|
6
6
|
* (don't block offline users).
|
|
7
7
|
*/
|
|
8
|
-
import { createInterface } from 'readline';
|
|
9
8
|
import { mkdirSync, writeFileSync } from 'fs';
|
|
10
9
|
import { HOME_CONFIG_DIR, HOME_ENV_PATH } from '../lib/config.js';
|
|
11
10
|
import { DEFAULT_SITE_URL, resolveAppUrl } from '../lib/constants.js';
|
|
12
11
|
import { validateKey } from '../lib/client.js';
|
|
12
|
+
import { password as promptPassword } from '../lib/prompts.js';
|
|
13
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
13
14
|
const SIGNUP_URL = resolveAppUrl();
|
|
14
|
-
function question(rl, prompt) {
|
|
15
|
-
return new Promise((resolve) => {
|
|
16
|
-
rl.question(prompt, (answer) => resolve((answer ?? '').trim()));
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
15
|
function saveKey(apiKey, siteUrl) {
|
|
20
16
|
const content = [
|
|
21
17
|
`# Product Brain CLI — saved by "pb login"`,
|
|
@@ -31,20 +27,32 @@ function saveKey(apiKey, siteUrl) {
|
|
|
31
27
|
process.env.CONVEX_SITE_URL = siteUrl;
|
|
32
28
|
}
|
|
33
29
|
export async function runLogin() {
|
|
34
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
35
30
|
console.log('Product Brain — sign in with your API key');
|
|
36
31
|
console.log(` Get a key: ${SIGNUP_URL} → Settings → API Keys\n`);
|
|
37
|
-
const apiKey = await
|
|
38
|
-
|
|
32
|
+
const apiKey = await promptPassword({
|
|
33
|
+
message: 'Paste your API key (pb_sk_...)',
|
|
34
|
+
validate: (v) => {
|
|
35
|
+
if (!v)
|
|
36
|
+
return 'No key entered.';
|
|
37
|
+
if (!v.startsWith('pb_sk_'))
|
|
38
|
+
return `Key must start with pb_sk_. Get one from ${SIGNUP_URL} → Settings → API Keys.`;
|
|
39
|
+
return undefined;
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
// Defensive guard — also catches non-interactive / mocked scenarios
|
|
39
43
|
if (!apiKey) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
throw new CLIError('No key entered.', {
|
|
45
|
+
code: ErrorCode.AUTH_MISSING,
|
|
46
|
+
category: 'auth',
|
|
47
|
+
guidance: `Get a key from ${SIGNUP_URL} → Settings → API Keys, then run \`pb login\`.`,
|
|
48
|
+
});
|
|
43
49
|
}
|
|
44
50
|
if (!apiKey.startsWith('pb_sk_')) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
51
|
+
throw new CLIError('Key must start with pb_sk_.', {
|
|
52
|
+
code: ErrorCode.AUTH_INVALID,
|
|
53
|
+
category: 'auth',
|
|
54
|
+
guidance: `Get a valid key from ${SIGNUP_URL} → Settings → API Keys.`,
|
|
55
|
+
});
|
|
48
56
|
}
|
|
49
57
|
// Use CONVEX_SITE_URL env var if set (advanced users), otherwise default
|
|
50
58
|
const siteUrl = (process.env.CONVEX_SITE_URL || DEFAULT_SITE_URL).replace(/\/$/, '');
|
|
@@ -60,13 +68,17 @@ export async function runLogin() {
|
|
|
60
68
|
}
|
|
61
69
|
else {
|
|
62
70
|
process.stdout.write(' failed.\n\n');
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
throw new CLIError(`Invalid key: ${result.error}`, {
|
|
72
|
+
code: ErrorCode.AUTH_INVALID,
|
|
73
|
+
category: 'auth',
|
|
74
|
+
guidance: `Get a valid key: ${SIGNUP_URL} → Settings → API Keys.`,
|
|
75
|
+
});
|
|
67
76
|
}
|
|
68
77
|
}
|
|
69
|
-
catch {
|
|
78
|
+
catch (err) {
|
|
79
|
+
// Re-throw CLIErrors (validation failures) — don't treat them as network errors
|
|
80
|
+
if (err instanceof CLIError)
|
|
81
|
+
throw err;
|
|
70
82
|
// Network error or timeout — save anyway, don't block offline users
|
|
71
83
|
process.stdout.write(' could not reach server.\n\n');
|
|
72
84
|
console.warn('Could not reach server — key saved but not verified.\n' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/commands/promote.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/commands/promote.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAyBD,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFvE"}
|
package/dist/commands/promote.js
CHANGED
|
@@ -9,6 +9,7 @@ import { readSession } from '../lib/session.js';
|
|
|
9
9
|
import { runCliCommand } from '../lib/runner.js';
|
|
10
10
|
import { formatPromoteReceipt } from '../formatters/promote.js';
|
|
11
11
|
import { copy } from '../lib/style.js';
|
|
12
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
12
13
|
const BLOCKING_CONTRADICTION_THRESHOLD = 0.75;
|
|
13
14
|
export async function runPromote(options) {
|
|
14
15
|
const config = await getConfigOrGuide(() => runPromote(options));
|
|
@@ -17,20 +18,29 @@ export async function runPromote(options) {
|
|
|
17
18
|
// Require active session (DEC-9, BR-8)
|
|
18
19
|
const session = readSession();
|
|
19
20
|
if (!session) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
throw new CLIError(copy.noSession, {
|
|
22
|
+
code: ErrorCode.SESSION_REQUIRED,
|
|
23
|
+
category: 'session',
|
|
24
|
+
guidance: copy.sessionRequired,
|
|
25
|
+
});
|
|
23
26
|
}
|
|
24
27
|
const entryId = options.entryId.trim();
|
|
25
28
|
if (!entryId) {
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
throw new CLIError('Entry ID is required.', {
|
|
30
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
31
|
+
category: 'validation',
|
|
32
|
+
guidance: 'Usage: pb promote <entry-id>',
|
|
33
|
+
});
|
|
28
34
|
}
|
|
29
35
|
await runCliCommand({
|
|
30
36
|
fn: async () => {
|
|
31
37
|
const entry = await mcpCallWithSession('chain.getEntry', { entryId });
|
|
32
38
|
if (!entry) {
|
|
33
|
-
throw new
|
|
39
|
+
throw new CLIError(`Entry ${entryId} not found.`, {
|
|
40
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
41
|
+
category: 'validation',
|
|
42
|
+
guidance: 'Check the entry ID and try again. Use `pb search` to find entries.',
|
|
43
|
+
});
|
|
34
44
|
}
|
|
35
45
|
const description = (typeof entry.data?.description === 'string' ? entry.data.description : undefined) ??
|
|
36
46
|
(typeof entry.data?.rationale === 'string' ? entry.data.rationale : undefined) ??
|
|
@@ -48,7 +58,11 @@ export async function runPromote(options) {
|
|
|
48
58
|
}
|
|
49
59
|
const blockingContradiction = conflicts.find((conflict) => conflict.type === 'contradiction' && conflict.confidence >= BLOCKING_CONTRADICTION_THRESHOLD);
|
|
50
60
|
if (blockingContradiction) {
|
|
51
|
-
throw new
|
|
61
|
+
throw new CLIError(`Commit blocked by contradiction with ${blockingContradiction.chainEntryId}: ${blockingContradiction.explanation}`, {
|
|
62
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
63
|
+
category: 'validation',
|
|
64
|
+
guidance: 'Resolve the contradiction before committing. Use `pb get` to inspect the conflicting entry.',
|
|
65
|
+
});
|
|
52
66
|
}
|
|
53
67
|
const args = {
|
|
54
68
|
entryId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/commands/promote.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAA0B,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/commands/promote.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reject.d.ts","sourceRoot":"","sources":["../../src/commands/reject.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"reject.d.ts","sourceRoot":"","sources":["../../src/commands/reject.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BrE"}
|
package/dist/commands/reject.js
CHANGED
|
@@ -9,19 +9,25 @@ import { getConfigOrGuide } from '../lib/config.js';
|
|
|
9
9
|
import { mcpCall } from '../lib/client.js';
|
|
10
10
|
import { runCliCommand } from '../lib/runner.js';
|
|
11
11
|
import { formatRejectReceipt } from '../formatters/proposals.js';
|
|
12
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
12
13
|
export async function runReject(options) {
|
|
13
14
|
const config = await getConfigOrGuide(() => runReject(options));
|
|
14
15
|
if (!config)
|
|
15
16
|
return;
|
|
16
17
|
const proposalId = options.proposalId?.trim();
|
|
17
18
|
if (!proposalId) {
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
throw new CLIError('Proposal ID is required.', {
|
|
20
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
21
|
+
category: 'validation',
|
|
22
|
+
guidance: 'Usage: pb reject <id> --reason "..."',
|
|
23
|
+
});
|
|
20
24
|
}
|
|
21
25
|
if (!options.reason?.trim()) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
throw new CLIError('A reason is required when rejecting.', {
|
|
27
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
28
|
+
category: 'validation',
|
|
29
|
+
guidance: 'Governance requires that objections are explained (BR-7). Usage: pb reject <id> --reason "..."',
|
|
30
|
+
});
|
|
25
31
|
}
|
|
26
32
|
await runCliCommand({
|
|
27
33
|
fn: async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reject.js","sourceRoot":"","sources":["../../src/commands/reject.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAA0B,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"reject.js","sourceRoot":"","sources":["../../src/commands/reject.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAA0B,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAOvD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAsB;IACpD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,QAAQ,CAAC,0BAA0B,EAAE;YAC7C,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,sCAAsC;SACjD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,QAAQ,CAAC,sCAAsC,EAAE;YACzD,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,gGAAgG;SAC3G,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,CAAoB;QACrC,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,OAAO,MAAM,OAAO,CAAoB,8BAA8B,EAAE;gBACtE,UAAU;gBACV,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;KAClD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relate.d.ts","sourceRoot":"","sources":["../../src/commands/relate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"relate.d.ts","sourceRoot":"","sources":["../../src/commands/relate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAWD,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDrE;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCvE"}
|
package/dist/commands/relate.js
CHANGED
|
@@ -9,6 +9,7 @@ import { mcpCallWithSession } from '../lib/client.js';
|
|
|
9
9
|
import { readSession } from '../lib/session.js';
|
|
10
10
|
import { runCliCommand } from '../lib/runner.js';
|
|
11
11
|
import { formatRelateReceipt, formatUnrelateReceipt } from '../formatters/relate.js';
|
|
12
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
12
13
|
export async function runRelate(options) {
|
|
13
14
|
const config = await getConfigOrGuide(() => runRelate(options));
|
|
14
15
|
if (!config)
|
|
@@ -16,16 +17,21 @@ export async function runRelate(options) {
|
|
|
16
17
|
// Require active session
|
|
17
18
|
const session = readSession();
|
|
18
19
|
if (!session) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
throw new CLIError('No active session.', {
|
|
21
|
+
code: ErrorCode.SESSION_REQUIRED,
|
|
22
|
+
category: 'session',
|
|
23
|
+
guidance: 'Run `pb session start` first. Write access requires a tracked session (DEC-9).',
|
|
24
|
+
});
|
|
22
25
|
}
|
|
23
26
|
const fromId = options.fromId.trim();
|
|
24
27
|
const type = options.type.trim();
|
|
25
28
|
const toId = options.toId.trim();
|
|
26
29
|
if (!fromId || !type || !toId) {
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
throw new CLIError('All arguments required.', {
|
|
31
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
32
|
+
category: 'validation',
|
|
33
|
+
guidance: 'Usage: pb relate <from-id> <type> <to-id>',
|
|
34
|
+
});
|
|
29
35
|
}
|
|
30
36
|
await runCliCommand({
|
|
31
37
|
fn: async () => {
|
|
@@ -61,16 +67,21 @@ export async function runUnrelate(options) {
|
|
|
61
67
|
// Require active session
|
|
62
68
|
const session = readSession();
|
|
63
69
|
if (!session) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
throw new CLIError('No active session.', {
|
|
71
|
+
code: ErrorCode.SESSION_REQUIRED,
|
|
72
|
+
category: 'session',
|
|
73
|
+
guidance: 'Run `pb session start` first. Write access requires a tracked session (DEC-9).',
|
|
74
|
+
});
|
|
67
75
|
}
|
|
68
76
|
const fromId = options.fromId.trim();
|
|
69
77
|
const type = options.type.trim();
|
|
70
78
|
const toId = options.toId.trim();
|
|
71
79
|
if (!fromId || !type || !toId) {
|
|
72
|
-
|
|
73
|
-
|
|
80
|
+
throw new CLIError('All arguments required.', {
|
|
81
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
82
|
+
category: 'validation',
|
|
83
|
+
guidance: 'Usage: pb unrelate <from-id> <type> <to-id>',
|
|
84
|
+
});
|
|
74
85
|
}
|
|
75
86
|
await runCliCommand({
|
|
76
87
|
fn: async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relate.js","sourceRoot":"","sources":["../../src/commands/relate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"relate.js","sourceRoot":"","sources":["../../src/commands/relate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2BH,wBAAsB,eAAe,CAAC,OAAO,GAAE;IAC7C,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAA;CACV,GAAG,OAAO,CAAC,IAAI,CAAC,CAuErB;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED,wBAAsB,eAAe,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDtF"}
|
package/dist/commands/session.js
CHANGED
|
@@ -11,6 +11,7 @@ import { readSession, writeSession, clearSession } from '../lib/session.js';
|
|
|
11
11
|
import { isJsonMode } from '../lib/runner.js';
|
|
12
12
|
import { formatSessionStart, formatSessionClose } from '../formatters/session.js';
|
|
13
13
|
import { runHandshake } from './handshake.js';
|
|
14
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
14
15
|
export async function runSessionStart(options = {}) {
|
|
15
16
|
const config = await getConfigOrGuide(() => runSessionStart(options));
|
|
16
17
|
if (!config)
|
|
@@ -39,8 +40,11 @@ export async function runSessionStart(options = {}) {
|
|
|
39
40
|
// Resolve workspace + keyId
|
|
40
41
|
const workspace = await mcpCall('resolveWorkspace', {});
|
|
41
42
|
if (!workspace?.keyId) {
|
|
42
|
-
throw new
|
|
43
|
-
|
|
43
|
+
throw new CLIError('API key has read-only scope. Write operations require a readwrite key.', {
|
|
44
|
+
code: ErrorCode.AUTH_INVALID,
|
|
45
|
+
category: 'auth',
|
|
46
|
+
guidance: 'Generate a readwrite key: Product Brain app → Settings → API Keys.',
|
|
47
|
+
});
|
|
44
48
|
}
|
|
45
49
|
// Start agent session with clientKind attribution (DEC-184)
|
|
46
50
|
if (!json)
|
|
@@ -81,8 +85,11 @@ export async function runSessionStart(options = {}) {
|
|
|
81
85
|
export function runSessionId() {
|
|
82
86
|
const session = readSession();
|
|
83
87
|
if (!session) {
|
|
84
|
-
|
|
85
|
-
|
|
88
|
+
throw new CLIError('No active session.', {
|
|
89
|
+
code: ErrorCode.SESSION_REQUIRED,
|
|
90
|
+
category: 'session',
|
|
91
|
+
guidance: 'Run `pb session start` first.',
|
|
92
|
+
});
|
|
86
93
|
}
|
|
87
94
|
process.stdout.write(session.sessionId + '\n');
|
|
88
95
|
}
|
|
@@ -120,8 +127,11 @@ export async function runSessionClose(options = {}) {
|
|
|
120
127
|
}
|
|
121
128
|
catch (err) {
|
|
122
129
|
if (!options.force) {
|
|
123
|
-
throw new
|
|
124
|
-
|
|
130
|
+
throw new CLIError(`Failed to close session: ${err instanceof Error ? err.message : String(err)}`, {
|
|
131
|
+
code: ErrorCode.NETWORK_UNREACHABLE,
|
|
132
|
+
category: 'network',
|
|
133
|
+
guidance: 'Use `pb session close --force` to clear local state anyway.',
|
|
134
|
+
});
|
|
125
135
|
}
|
|
126
136
|
}
|
|
127
137
|
process.stdout.write(formatSessionClose(session) + '\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAqB,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/setup.d.ts
CHANGED
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
* 3. Guided first capture (starts a session, captures via MCP)
|
|
10
10
|
* 4. Summary with next-step hint
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
* No new npm dependencies.
|
|
12
|
+
* WP-303 Slice 1: migrated from readline to @clack/prompts via lib/prompts.ts.
|
|
14
13
|
*/
|
|
15
14
|
export declare function runSetup(): Promise<void>;
|
|
16
15
|
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAkCH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9C"}
|