@productbrain/cli 0.1.0-beta.32 → 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/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
package/dist/commands/setup.js
CHANGED
|
@@ -9,21 +9,14 @@
|
|
|
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
|
-
import { createInterface } from 'readline';
|
|
16
14
|
import { getConfig } from '../lib/config.js';
|
|
17
15
|
import { mcpCall, mcpCallWithSession } from '../lib/client.js';
|
|
18
16
|
import { readSession, writeSession } from '../lib/session.js';
|
|
19
17
|
import { trackEvent } from '../lib/telemetry.js';
|
|
20
18
|
import { runLogin } from './login.js';
|
|
21
|
-
|
|
22
|
-
function question(rl, prompt) {
|
|
23
|
-
return new Promise((resolve) => {
|
|
24
|
-
rl.question(prompt, (answer) => resolve((answer ?? '').trim()));
|
|
25
|
-
});
|
|
26
|
-
}
|
|
19
|
+
import { confirm as promptConfirm, ask as promptAsk } from '../lib/prompts.js';
|
|
27
20
|
/** Mask an API key for display: show prefix + last 4 chars. */
|
|
28
21
|
function maskKey(key) {
|
|
29
22
|
if (key.length <= 10)
|
|
@@ -31,15 +24,9 @@ function maskKey(key) {
|
|
|
31
24
|
return key.slice(0, 6) + '...' + key.slice(-4);
|
|
32
25
|
}
|
|
33
26
|
export async function runSetup() {
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
await runSetupFlow(rl);
|
|
37
|
-
}
|
|
38
|
-
finally {
|
|
39
|
-
rl.close();
|
|
40
|
-
}
|
|
27
|
+
await runSetupFlow();
|
|
41
28
|
}
|
|
42
|
-
async function runSetupFlow(
|
|
29
|
+
async function runSetupFlow() {
|
|
43
30
|
trackEvent('setup_started');
|
|
44
31
|
console.log('');
|
|
45
32
|
console.log('Product Brain — Setup');
|
|
@@ -69,8 +56,8 @@ async function runSetupFlow(rl) {
|
|
|
69
56
|
console.log('Run `pb login` to re-enter your API key.');
|
|
70
57
|
}
|
|
71
58
|
console.log('');
|
|
72
|
-
const
|
|
73
|
-
if (
|
|
59
|
+
const skipToCapture = await promptConfirm({ message: 'Skip to first capture?', initialValue: true });
|
|
60
|
+
if (!skipToCapture) {
|
|
74
61
|
console.log('');
|
|
75
62
|
console.log('Setup complete. Try: pb orient -b');
|
|
76
63
|
trackEvent('setup_completed');
|
|
@@ -84,33 +71,25 @@ async function runSetupFlow(rl) {
|
|
|
84
71
|
if (!hasValidConfig) {
|
|
85
72
|
console.log('To get started, you need a Product Brain account and API key.');
|
|
86
73
|
console.log('');
|
|
87
|
-
const hasAccount = await
|
|
88
|
-
if (hasAccount
|
|
74
|
+
const hasAccount = await promptConfirm({ message: 'Do you have a Product Brain account?', initialValue: false });
|
|
75
|
+
if (!hasAccount) {
|
|
89
76
|
console.log('');
|
|
90
77
|
console.log('Create an account at: https://productbrain.io');
|
|
91
78
|
console.log('Then come back and run: pb setup');
|
|
92
79
|
console.log('');
|
|
93
80
|
return;
|
|
94
81
|
}
|
|
95
|
-
// Run login flow —
|
|
82
|
+
// Run login flow — handles key prompt, validation, and saving
|
|
96
83
|
console.log('');
|
|
97
|
-
rl.close(); // Close our rl so login.ts can create its own
|
|
98
84
|
await runLogin();
|
|
99
85
|
trackEvent('key_validated');
|
|
100
|
-
|
|
101
|
-
const newRl = createInterface({ input: process.stdin, output: process.stdout });
|
|
102
|
-
try {
|
|
103
|
-
await runSetupPostLogin(newRl);
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
newRl.close();
|
|
107
|
-
}
|
|
86
|
+
await runSetupPostLogin();
|
|
108
87
|
return;
|
|
109
88
|
}
|
|
110
89
|
// If we already had config, go straight to first capture
|
|
111
|
-
await runFirstCapture(
|
|
90
|
+
await runFirstCapture();
|
|
112
91
|
}
|
|
113
|
-
async function runSetupPostLogin(
|
|
92
|
+
async function runSetupPostLogin() {
|
|
114
93
|
// Step 3: Workspace binding — the API key already binds to a workspace
|
|
115
94
|
console.log('');
|
|
116
95
|
try {
|
|
@@ -128,13 +107,13 @@ async function runSetupPostLogin(rl) {
|
|
|
128
107
|
console.log('You can still try commands. Run `pb orient -b` to test.');
|
|
129
108
|
}
|
|
130
109
|
// Step 4: First capture
|
|
131
|
-
await runFirstCapture(
|
|
110
|
+
await runFirstCapture();
|
|
132
111
|
}
|
|
133
|
-
async function runFirstCapture(
|
|
112
|
+
async function runFirstCapture() {
|
|
134
113
|
console.log('');
|
|
135
|
-
const wantCapture = await
|
|
114
|
+
const wantCapture = await promptConfirm({ message: 'Ready to capture your first piece of knowledge?', initialValue: true });
|
|
136
115
|
trackEvent('first_capture_prompted');
|
|
137
|
-
if (wantCapture
|
|
116
|
+
if (!wantCapture) {
|
|
138
117
|
console.log('');
|
|
139
118
|
console.log('Setup complete! Try: pb orient -b');
|
|
140
119
|
trackEvent('setup_completed');
|
|
@@ -175,7 +154,7 @@ async function runFirstCapture(rl) {
|
|
|
175
154
|
// Prompt for capture text
|
|
176
155
|
console.log('');
|
|
177
156
|
console.log('Type a short insight, decision, or tension:');
|
|
178
|
-
const captureText = await
|
|
157
|
+
const captureText = await promptAsk({ message: '>', placeholder: 'e.g. DEC: We chose Svelte because...' });
|
|
179
158
|
if (!captureText) {
|
|
180
159
|
console.log('No text entered. You can capture later: pb capture "your insight here"');
|
|
181
160
|
console.log('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAyCD,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJrE"}
|
package/dist/commands/update.js
CHANGED
|
@@ -11,6 +11,7 @@ import { isJsonMode } from '../lib/runner.js';
|
|
|
11
11
|
import { stripConvexInternals } from '../lib/strip.js';
|
|
12
12
|
import { formatUpdateReceipt } from '../formatters/update.js';
|
|
13
13
|
import { formatEntry } from '../formatters/entry.js';
|
|
14
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
14
15
|
/**
|
|
15
16
|
* Parse --field key=value pairs into a data object.
|
|
16
17
|
* Splits on first `=` only to handle values containing `=`.
|
|
@@ -20,12 +21,20 @@ function parseFields(fields) {
|
|
|
20
21
|
for (const f of fields) {
|
|
21
22
|
const eqIndex = f.indexOf('=');
|
|
22
23
|
if (eqIndex === -1) {
|
|
23
|
-
throw new
|
|
24
|
+
throw new CLIError(`Invalid --field format: "${f}". Expected key=value.`, {
|
|
25
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
26
|
+
category: 'validation',
|
|
27
|
+
guidance: 'Use --field key=value (split on first "=").',
|
|
28
|
+
});
|
|
24
29
|
}
|
|
25
30
|
const key = f.slice(0, eqIndex).trim();
|
|
26
31
|
const value = f.slice(eqIndex + 1).trim();
|
|
27
32
|
if (!key) {
|
|
28
|
-
throw new
|
|
33
|
+
throw new CLIError(`Invalid --field format: "${f}". Key cannot be empty.`, {
|
|
34
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
35
|
+
category: 'validation',
|
|
36
|
+
guidance: 'Provide a non-empty key before the "=" sign.',
|
|
37
|
+
});
|
|
29
38
|
}
|
|
30
39
|
data[key] = value;
|
|
31
40
|
}
|
|
@@ -39,15 +48,20 @@ export async function runUpdate(options) {
|
|
|
39
48
|
// Require active session (DEC-9, BR-8)
|
|
40
49
|
const session = readSession();
|
|
41
50
|
if (!session) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
throw new CLIError('No active session.', {
|
|
52
|
+
code: ErrorCode.SESSION_REQUIRED,
|
|
53
|
+
category: 'session',
|
|
54
|
+
guidance: 'Run `pb session start` first. Write access requires a tracked session (DEC-9).',
|
|
55
|
+
});
|
|
45
56
|
}
|
|
46
57
|
// Validate entryId
|
|
47
58
|
const entryId = options.entryId.trim();
|
|
48
59
|
if (!entryId) {
|
|
49
|
-
|
|
50
|
-
|
|
60
|
+
throw new CLIError('Entry ID is required.', {
|
|
61
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
62
|
+
category: 'validation',
|
|
63
|
+
guidance: 'Usage: pb update <entry-id> [options]',
|
|
64
|
+
});
|
|
51
65
|
}
|
|
52
66
|
// Build update args
|
|
53
67
|
const args = { entryId };
|
|
@@ -69,8 +83,11 @@ export async function runUpdate(options) {
|
|
|
69
83
|
}
|
|
70
84
|
// Must have at least one thing to update
|
|
71
85
|
if (!options.name && !options.status && !options.workflowStatus && (!options.field || options.field.length === 0)) {
|
|
72
|
-
|
|
73
|
-
|
|
86
|
+
throw new CLIError('Nothing to update.', {
|
|
87
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
88
|
+
category: 'validation',
|
|
89
|
+
guidance: 'Provide at least one of: --field, --name, --status, --workflow-status',
|
|
90
|
+
});
|
|
74
91
|
}
|
|
75
92
|
if (!json)
|
|
76
93
|
process.stdout.write(`Updating ${entryId}...\n`);
|
|
@@ -86,22 +103,22 @@ export async function runUpdate(options) {
|
|
|
86
103
|
// Render structured validation errors for select/multi-select fields.
|
|
87
104
|
if (mcpErr.details && mcpErr.details.length > 0) {
|
|
88
105
|
const selectErrors = mcpErr.details.filter((d) => d.errorType === 'invalid_option' && d.validOptions);
|
|
89
|
-
if (selectErrors.length > 0
|
|
90
|
-
|
|
91
|
-
for (const d of selectErrors) {
|
|
106
|
+
if (selectErrors.length > 0) {
|
|
107
|
+
const fieldMessages = selectErrors.map((d) => {
|
|
92
108
|
const got = typeof d.invalidValue === 'string' ? d.invalidValue : JSON.stringify(d.invalidValue);
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
process.exit(1);
|
|
109
|
+
return `Field '${d.fieldLabel}' must be one of: ${d.validOptions.join(', ')}. Got: '${got}'`;
|
|
110
|
+
});
|
|
111
|
+
throw new CLIError(`Validation failed: ${fieldMessages.join('; ')}`, {
|
|
112
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
113
|
+
category: 'validation',
|
|
114
|
+
});
|
|
100
115
|
}
|
|
101
116
|
}
|
|
102
|
-
// Fallback: plain error
|
|
103
|
-
|
|
104
|
-
|
|
117
|
+
// Fallback: plain MCP error
|
|
118
|
+
throw new CLIError(mcpErr.message, {
|
|
119
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
120
|
+
category: 'validation',
|
|
121
|
+
});
|
|
105
122
|
}
|
|
106
123
|
throw err;
|
|
107
124
|
}
|
|
@@ -149,12 +166,13 @@ export async function runUpdate(options) {
|
|
|
149
166
|
process.stdout.write(formatEntry(refreshedEntry) + '\n');
|
|
150
167
|
}
|
|
151
168
|
}
|
|
152
|
-
// BET-271 S1:
|
|
169
|
+
// BET-271 S1: Throw when fields were rejected — signals "not everything you asked for happened."
|
|
153
170
|
if (hasRejected) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
171
|
+
throw new CLIError(`Fields rejected: ${rejectedFields.join(', ')}.`, {
|
|
172
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
173
|
+
category: 'validation',
|
|
174
|
+
guidance: `Run \`pb fields${collectionHint}\` to see valid fields.`,
|
|
175
|
+
});
|
|
158
176
|
}
|
|
159
177
|
}
|
|
160
178
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAqB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCrE"}
|
package/dist/commands/verify.js
CHANGED
|
@@ -10,6 +10,7 @@ import { mcpCallWithSession } from '../lib/client.js';
|
|
|
10
10
|
import { readSession } from '../lib/session.js';
|
|
11
11
|
import { runCliCommand } from '../lib/runner.js';
|
|
12
12
|
import { formatVerifyReceipt } from '../formatters/verify.js';
|
|
13
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
13
14
|
export async function runVerify(options) {
|
|
14
15
|
const config = await getConfigOrGuide(() => runVerify(options));
|
|
15
16
|
if (!config)
|
|
@@ -17,14 +18,19 @@ export async function runVerify(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('No active session.', {
|
|
22
|
+
code: ErrorCode.SESSION_REQUIRED,
|
|
23
|
+
category: 'session',
|
|
24
|
+
guidance: 'Run `pb session start` first. Write access requires a tracked session (DEC-9).',
|
|
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 verify <entry-id>',
|
|
33
|
+
});
|
|
28
34
|
}
|
|
29
35
|
await runCliCommand({
|
|
30
36
|
fn: async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;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,EAA0B,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;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,EAA0B,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAMvD,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,uCAAuC;IACvC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE;YACvC,IAAI,EAAE,SAAS,CAAC,gBAAgB;YAChC,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,gFAAgF;SAC3F,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAAC,uBAAuB,EAAE;YAC1C,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,6BAA6B;SACxC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,CAAoB;QACrC,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAoB,mBAAmB,EAAE;gBAC9E,OAAO;aACR,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO;gBAClC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;gBAC7C,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC;QACJ,CAAC;QACD,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;KAClD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb workspace — operator commands for workspace health and repair.
|
|
3
|
+
* pb definitions diff — compare local collection definitions against server.
|
|
4
|
+
*
|
|
5
|
+
* WP-305 Slice 4: CLI operator surface for workspace parity checks.
|
|
6
|
+
* Chain: WP-305, STD-101 (derive from system, never hardcode).
|
|
7
|
+
*
|
|
8
|
+
* Subcommands:
|
|
9
|
+
* pb workspace verify — health check for the active workspace
|
|
10
|
+
* pb workspace repair — backfill missing seeds for the active workspace
|
|
11
|
+
* pb definitions diff [file] — compare local dev-system-collections.json vs server
|
|
12
|
+
*/
|
|
13
|
+
export interface WorkspaceHealthResult {
|
|
14
|
+
workspaceId: string;
|
|
15
|
+
workspaceName: string;
|
|
16
|
+
collectionsAligned: boolean;
|
|
17
|
+
glossarySeeded: boolean;
|
|
18
|
+
semanticTypesSeeded: boolean;
|
|
19
|
+
defaultCircleSeeded: boolean;
|
|
20
|
+
gaps: string[];
|
|
21
|
+
status: 'healthy' | 'incomplete' | 'missing-seeds';
|
|
22
|
+
}
|
|
23
|
+
export interface BackfillResult {
|
|
24
|
+
workspaceId: string;
|
|
25
|
+
workspaceName: string;
|
|
26
|
+
scheduled: string[];
|
|
27
|
+
skipped: string[];
|
|
28
|
+
alreadyHealthy: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface DefinitionsDiffResult {
|
|
31
|
+
onlyLocal: string[];
|
|
32
|
+
onlyServer: string[];
|
|
33
|
+
different: string[];
|
|
34
|
+
identical: string[];
|
|
35
|
+
}
|
|
36
|
+
export declare function runWorkspaceVerify(): Promise<void>;
|
|
37
|
+
export declare function runWorkspaceRepair(): Promise<void>;
|
|
38
|
+
export declare function runDefinitionsDiff(options: {
|
|
39
|
+
file?: string;
|
|
40
|
+
}): Promise<void>;
|
|
41
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsBH,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,eAAe,CAAC;CACpD;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAiDD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQxD;AAyCD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQxD;AA+ED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+ElF"}
|