@productbrain/cli 0.1.0-beta.30 → 0.1.0-beta.34
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/README.md +62 -178
- 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__/constants.test.js +1 -1
- package/dist/__tests__/constants.test.js.map +1 -1
- package/dist/__tests__/constellation.test.js +2 -8
- package/dist/__tests__/constellation.test.js.map +1 -1
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +117 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/fields.test.js +14 -14
- package/dist/__tests__/fields.test.js.map +1 -1
- package/dist/__tests__/glossary.test.d.ts +2 -0
- package/dist/__tests__/glossary.test.d.ts.map +1 -0
- package/dist/__tests__/glossary.test.js +32 -0
- package/dist/__tests__/glossary.test.js.map +1 -0
- 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 +29 -30
- 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__/profiles.test.d.ts +2 -0
- package/dist/__tests__/profiles.test.d.ts.map +1 -0
- package/dist/__tests__/profiles.test.js +168 -0
- package/dist/__tests__/profiles.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 +20 -12
- 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 +9 -2
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +125 -28
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctor.test.d.ts +3 -1
- package/dist/commands/doctor.test.d.ts.map +1 -1
- package/dist/commands/doctor.test.js +206 -10
- 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/profile.d.ts +24 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +82 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/promote.d.ts.map +1 -1
- package/dist/commands/promote.js +22 -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/formatters/promote.d.ts +1 -0
- package/dist/formatters/promote.d.ts.map +1 -1
- package/dist/formatters/promote.js +1 -0
- package/dist/formatters/promote.js.map +1 -1
- package/dist/index.js +328 -299
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts +4 -2
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +143 -68
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/config.d.ts +63 -4
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +230 -36
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +1 -1
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +1 -1
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/errors.d.ts +58 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +67 -0
- package/dist/lib/errors.js.map +1 -0
- 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/glossary.d.ts +19 -0
- package/dist/lib/glossary.d.ts.map +1 -0
- package/dist/lib/glossary.js +53 -0
- package/dist/lib/glossary.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/profiles.d.ts +34 -0
- package/dist/lib/profiles.d.ts.map +1 -0
- package/dist/lib/profiles.js +173 -0
- package/dist/lib/profiles.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 +2 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +21 -7
- 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/style.d.ts +65 -0
- package/dist/lib/style.d.ts.map +1 -0
- package/dist/lib/style.js +108 -0
- package/dist/lib/style.js.map +1 -0
- package/dist/lib/style.test.d.ts +7 -0
- package/dist/lib/style.test.d.ts.map +1 -0
- package/dist/lib/style.test.js +195 -0
- package/dist/lib/style.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
package/dist/commands/ingest.js
CHANGED
|
@@ -13,6 +13,7 @@ import { getConfigOrGuide } from '../lib/config.js';
|
|
|
13
13
|
import { mcpCall } from '../lib/client.js';
|
|
14
14
|
import { isJsonMode } from '../lib/runner.js';
|
|
15
15
|
import { stripConvexInternals } from '../lib/strip.js';
|
|
16
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
16
17
|
/** Max concurrency limit to prevent overwhelming the backend. */
|
|
17
18
|
const MAX_CONCURRENCY = 5;
|
|
18
19
|
function expandGlob(pattern) {
|
|
@@ -49,14 +50,21 @@ export async function runIngest(options) {
|
|
|
49
50
|
const concurrency = Math.max(1, Math.min(options.concurrency ?? 1, MAX_CONCURRENCY));
|
|
50
51
|
let files = expandGlob(options.pattern);
|
|
51
52
|
if (files.length === 0) {
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
throw new CLIError(`No files matched: ${options.pattern}`, {
|
|
54
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
55
|
+
category: 'validation',
|
|
56
|
+
guidance: 'Check the glob pattern. Example: pb ingest "docs/**/*.md"',
|
|
57
|
+
});
|
|
54
58
|
}
|
|
55
59
|
const ingestionRunId = randomUUID();
|
|
56
60
|
// Resolve workspace + keyId — startSession requires apiKeyId (MCP server passes it; CLI gets from resolveWorkspace)
|
|
57
61
|
const workspace = await mcpCall('resolveWorkspace', {});
|
|
58
62
|
if (!workspace?.keyId) {
|
|
59
|
-
throw new
|
|
63
|
+
throw new CLIError('API key has no keyId.', {
|
|
64
|
+
code: ErrorCode.AUTH_INVALID,
|
|
65
|
+
category: 'auth',
|
|
66
|
+
guidance: 'Use a readwrite key from Settings → API Keys.',
|
|
67
|
+
});
|
|
60
68
|
}
|
|
61
69
|
// --resume: filter out files whose sourceRef is already committed in staging
|
|
62
70
|
let resumeSkipped = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/commands/ingest.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/commands/ingest.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb profile — workspace profile management commands.
|
|
3
|
+
* WP-302 Slice 2: list, create, use, delete profiles.
|
|
4
|
+
*
|
|
5
|
+
* Uses runCliCommand pattern from runner.ts for JSON/pretty output.
|
|
6
|
+
* Uses CLIError from errors.ts for structured error reporting.
|
|
7
|
+
*/
|
|
8
|
+
/** pb profile list — show all profiles, mark active one. */
|
|
9
|
+
export declare function runProfileList(): Promise<void>;
|
|
10
|
+
/** pb profile create <name> --api-key <key> [--url <url>] */
|
|
11
|
+
export declare function runProfileCreate(opts: {
|
|
12
|
+
name: string;
|
|
13
|
+
apiKey: string;
|
|
14
|
+
url?: string;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
/** pb profile use <name> — switch active profile, close any active session. */
|
|
17
|
+
export declare function runProfileUse(opts: {
|
|
18
|
+
name: string;
|
|
19
|
+
}): Promise<void>;
|
|
20
|
+
/** pb profile delete <name> */
|
|
21
|
+
export declare function runProfileDelete(opts: {
|
|
22
|
+
name: string;
|
|
23
|
+
}): Promise<void>;
|
|
24
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,4DAA4D;AAC5D,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBpD;AAED,6DAA6D;AAC7D,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhB;AAED,+EAA+E;AAC/E,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BzE;AAED,+BAA+B;AAC/B,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5E"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb profile — workspace profile management commands.
|
|
3
|
+
* WP-302 Slice 2: list, create, use, delete profiles.
|
|
4
|
+
*
|
|
5
|
+
* Uses runCliCommand pattern from runner.ts for JSON/pretty output.
|
|
6
|
+
* Uses CLIError from errors.ts for structured error reporting.
|
|
7
|
+
*/
|
|
8
|
+
import { runCliCommand } from '../lib/runner.js';
|
|
9
|
+
import { listProfiles, getActiveProfile, createProfile, useProfile, deleteProfile, } from '../lib/profiles.js';
|
|
10
|
+
import { readSession, clearSession } from '../lib/session.js';
|
|
11
|
+
import { resetConfigCache } from '../lib/config.js';
|
|
12
|
+
/** pb profile list — show all profiles, mark active one. */
|
|
13
|
+
export async function runProfileList() {
|
|
14
|
+
await runCliCommand({
|
|
15
|
+
fn: async () => {
|
|
16
|
+
const profiles = listProfiles();
|
|
17
|
+
const active = getActiveProfile();
|
|
18
|
+
return { profiles, active };
|
|
19
|
+
},
|
|
20
|
+
formatPretty: (data) => {
|
|
21
|
+
if (data.profiles.length === 0) {
|
|
22
|
+
return 'No profiles configured. Run: pb profile create <name> --api-key <key>';
|
|
23
|
+
}
|
|
24
|
+
const lines = data.profiles.map((name) => {
|
|
25
|
+
const marker = name === data.active ? ' (active)' : '';
|
|
26
|
+
return ` ${name}${marker}`;
|
|
27
|
+
});
|
|
28
|
+
return `Profiles:\n${lines.join('\n')}`;
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/** pb profile create <name> --api-key <key> [--url <url>] */
|
|
33
|
+
export async function runProfileCreate(opts) {
|
|
34
|
+
await runCliCommand({
|
|
35
|
+
fn: async () => {
|
|
36
|
+
createProfile(opts.name, opts.apiKey, opts.url);
|
|
37
|
+
return { name: opts.name, created: true };
|
|
38
|
+
},
|
|
39
|
+
formatPretty: (data) => `Profile "${data.name}" created.`,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/** pb profile use <name> — switch active profile, close any active session. */
|
|
43
|
+
export async function runProfileUse(opts) {
|
|
44
|
+
await runCliCommand({
|
|
45
|
+
fn: async () => {
|
|
46
|
+
// Close active session before switching (TEN-1277: session orphaning)
|
|
47
|
+
const session = readSession();
|
|
48
|
+
if (session) {
|
|
49
|
+
clearSession();
|
|
50
|
+
}
|
|
51
|
+
useProfile(opts.name);
|
|
52
|
+
// Reset config cache so next getConfig() reads the new profile
|
|
53
|
+
resetConfigCache();
|
|
54
|
+
// Clear env vars so they get re-read from the new profile
|
|
55
|
+
delete process.env.PRODUCTBRAIN_API_KEY;
|
|
56
|
+
delete process.env.CONVEX_SITE_URL;
|
|
57
|
+
return {
|
|
58
|
+
name: opts.name,
|
|
59
|
+
active: true,
|
|
60
|
+
sessionClosed: session !== null,
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
formatPretty: (data) => {
|
|
64
|
+
let msg = `Switched to profile "${data.name}".`;
|
|
65
|
+
if (data.sessionClosed) {
|
|
66
|
+
msg += ' (previous session closed)';
|
|
67
|
+
}
|
|
68
|
+
return msg;
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/** pb profile delete <name> */
|
|
73
|
+
export async function runProfileDelete(opts) {
|
|
74
|
+
await runCliCommand({
|
|
75
|
+
fn: async () => {
|
|
76
|
+
deleteProfile(opts.name);
|
|
77
|
+
return { name: opts.name, deleted: true };
|
|
78
|
+
},
|
|
79
|
+
formatPretty: (data) => `Profile "${data.name}" deleted.`,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.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
|
@@ -8,6 +8,8 @@ import { mcpCallWithSession } from '../lib/client.js';
|
|
|
8
8
|
import { readSession } from '../lib/session.js';
|
|
9
9
|
import { runCliCommand } from '../lib/runner.js';
|
|
10
10
|
import { formatPromoteReceipt } from '../formatters/promote.js';
|
|
11
|
+
import { copy } from '../lib/style.js';
|
|
12
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
11
13
|
const BLOCKING_CONTRADICTION_THRESHOLD = 0.75;
|
|
12
14
|
export async function runPromote(options) {
|
|
13
15
|
const config = await getConfigOrGuide(() => runPromote(options));
|
|
@@ -16,20 +18,29 @@ export async function runPromote(options) {
|
|
|
16
18
|
// Require active session (DEC-9, BR-8)
|
|
17
19
|
const session = readSession();
|
|
18
20
|
if (!session) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
throw new CLIError(copy.noSession, {
|
|
22
|
+
code: ErrorCode.SESSION_REQUIRED,
|
|
23
|
+
category: 'session',
|
|
24
|
+
guidance: copy.sessionRequired,
|
|
25
|
+
});
|
|
22
26
|
}
|
|
23
27
|
const entryId = options.entryId.trim();
|
|
24
28
|
if (!entryId) {
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
throw new CLIError('Entry ID is required.', {
|
|
30
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
31
|
+
category: 'validation',
|
|
32
|
+
guidance: 'Usage: pb promote <entry-id>',
|
|
33
|
+
});
|
|
27
34
|
}
|
|
28
35
|
await runCliCommand({
|
|
29
36
|
fn: async () => {
|
|
30
37
|
const entry = await mcpCallWithSession('chain.getEntry', { entryId });
|
|
31
38
|
if (!entry) {
|
|
32
|
-
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
|
+
});
|
|
33
44
|
}
|
|
34
45
|
const description = (typeof entry.data?.description === 'string' ? entry.data.description : undefined) ??
|
|
35
46
|
(typeof entry.data?.rationale === 'string' ? entry.data.rationale : undefined) ??
|
|
@@ -47,7 +58,11 @@ export async function runPromote(options) {
|
|
|
47
58
|
}
|
|
48
59
|
const blockingContradiction = conflicts.find((conflict) => conflict.type === 'contradiction' && conflict.confidence >= BLOCKING_CONTRADICTION_THRESHOLD);
|
|
49
60
|
if (blockingContradiction) {
|
|
50
|
-
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
|
+
});
|
|
51
66
|
}
|
|
52
67
|
const args = {
|
|
53
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;
|
|
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"}
|