@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.
Files changed (214) hide show
  1. package/README.md +62 -178
  2. package/dist/__tests__/capture.test.js +2 -11
  3. package/dist/__tests__/capture.test.js.map +1 -1
  4. package/dist/__tests__/config.test.d.ts +8 -0
  5. package/dist/__tests__/config.test.d.ts.map +1 -0
  6. package/dist/__tests__/config.test.js +166 -0
  7. package/dist/__tests__/config.test.js.map +1 -0
  8. package/dist/__tests__/constants.test.js +1 -1
  9. package/dist/__tests__/constants.test.js.map +1 -1
  10. package/dist/__tests__/constellation.test.js +2 -8
  11. package/dist/__tests__/constellation.test.js.map +1 -1
  12. package/dist/__tests__/errors.test.d.ts +2 -0
  13. package/dist/__tests__/errors.test.d.ts.map +1 -0
  14. package/dist/__tests__/errors.test.js +117 -0
  15. package/dist/__tests__/errors.test.js.map +1 -0
  16. package/dist/__tests__/fields.test.js +14 -14
  17. package/dist/__tests__/fields.test.js.map +1 -1
  18. package/dist/__tests__/glossary.test.d.ts +2 -0
  19. package/dist/__tests__/glossary.test.d.ts.map +1 -0
  20. package/dist/__tests__/glossary.test.js +32 -0
  21. package/dist/__tests__/glossary.test.js.map +1 -0
  22. package/dist/__tests__/handshake.test.js +9 -17
  23. package/dist/__tests__/handshake.test.js.map +1 -1
  24. package/dist/__tests__/init.test.d.ts +7 -0
  25. package/dist/__tests__/init.test.d.ts.map +1 -0
  26. package/dist/__tests__/init.test.js +146 -0
  27. package/dist/__tests__/init.test.js.map +1 -0
  28. package/dist/__tests__/login.test.js +29 -30
  29. package/dist/__tests__/login.test.js.map +1 -1
  30. package/dist/__tests__/onboarding.test.d.ts +6 -0
  31. package/dist/__tests__/onboarding.test.d.ts.map +1 -0
  32. package/dist/__tests__/onboarding.test.js +199 -0
  33. package/dist/__tests__/onboarding.test.js.map +1 -0
  34. package/dist/__tests__/profiles.test.d.ts +2 -0
  35. package/dist/__tests__/profiles.test.d.ts.map +1 -0
  36. package/dist/__tests__/profiles.test.js +168 -0
  37. package/dist/__tests__/profiles.test.js.map +1 -0
  38. package/dist/__tests__/promote.test.js +4 -16
  39. package/dist/__tests__/promote.test.js.map +1 -1
  40. package/dist/__tests__/prompts.test.d.ts +6 -0
  41. package/dist/__tests__/prompts.test.d.ts.map +1 -0
  42. package/dist/__tests__/prompts.test.js +146 -0
  43. package/dist/__tests__/prompts.test.js.map +1 -0
  44. package/dist/__tests__/proposals.test.js +6 -29
  45. package/dist/__tests__/proposals.test.js.map +1 -1
  46. package/dist/__tests__/relate.test.js +6 -23
  47. package/dist/__tests__/relate.test.js.map +1 -1
  48. package/dist/__tests__/runner.test.js +19 -15
  49. package/dist/__tests__/runner.test.js.map +1 -1
  50. package/dist/__tests__/session.test.js +2 -8
  51. package/dist/__tests__/session.test.js.map +1 -1
  52. package/dist/__tests__/setup.test.js +39 -25
  53. package/dist/__tests__/setup.test.js.map +1 -1
  54. package/dist/__tests__/spinner-labels.test.d.ts +2 -0
  55. package/dist/__tests__/spinner-labels.test.d.ts.map +1 -0
  56. package/dist/__tests__/spinner-labels.test.js +23 -0
  57. package/dist/__tests__/spinner-labels.test.js.map +1 -0
  58. package/dist/__tests__/update.test.js +27 -61
  59. package/dist/__tests__/update.test.js.map +1 -1
  60. package/dist/__tests__/workspace.test.d.ts +2 -0
  61. package/dist/__tests__/workspace.test.d.ts.map +1 -0
  62. package/dist/__tests__/workspace.test.js +308 -0
  63. package/dist/__tests__/workspace.test.js.map +1 -0
  64. package/dist/commands/accept.d.ts.map +1 -1
  65. package/dist/commands/accept.js +6 -2
  66. package/dist/commands/accept.js.map +1 -1
  67. package/dist/commands/brief.d.ts.map +1 -1
  68. package/dist/commands/brief.js +6 -1
  69. package/dist/commands/brief.js.map +1 -1
  70. package/dist/commands/capture.d.ts.map +1 -1
  71. package/dist/commands/capture.js +20 -12
  72. package/dist/commands/capture.js.map +1 -1
  73. package/dist/commands/chain-walk.d.ts.map +1 -1
  74. package/dist/commands/chain-walk.js +6 -1
  75. package/dist/commands/chain-walk.js.map +1 -1
  76. package/dist/commands/changes.d.ts.map +1 -1
  77. package/dist/commands/changes.js +6 -1
  78. package/dist/commands/changes.js.map +1 -1
  79. package/dist/commands/codex-prep.d.ts.map +1 -1
  80. package/dist/commands/codex-prep.js +6 -2
  81. package/dist/commands/codex-prep.js.map +1 -1
  82. package/dist/commands/collections.d.ts.map +1 -1
  83. package/dist/commands/collections.js +6 -2
  84. package/dist/commands/collections.js.map +1 -1
  85. package/dist/commands/constellation.d.ts.map +1 -1
  86. package/dist/commands/constellation.js +6 -1
  87. package/dist/commands/constellation.js.map +1 -1
  88. package/dist/commands/context.d.ts.map +1 -1
  89. package/dist/commands/context.js +6 -1
  90. package/dist/commands/context.js.map +1 -1
  91. package/dist/commands/doctor.d.ts +9 -2
  92. package/dist/commands/doctor.d.ts.map +1 -1
  93. package/dist/commands/doctor.js +125 -28
  94. package/dist/commands/doctor.js.map +1 -1
  95. package/dist/commands/doctor.test.d.ts +3 -1
  96. package/dist/commands/doctor.test.d.ts.map +1 -1
  97. package/dist/commands/doctor.test.js +206 -10
  98. package/dist/commands/doctor.test.js.map +1 -1
  99. package/dist/commands/fields.d.ts.map +1 -1
  100. package/dist/commands/fields.js +6 -2
  101. package/dist/commands/fields.js.map +1 -1
  102. package/dist/commands/get.d.ts.map +1 -1
  103. package/dist/commands/get.js +11 -3
  104. package/dist/commands/get.js.map +1 -1
  105. package/dist/commands/handshake.d.ts.map +1 -1
  106. package/dist/commands/handshake.js +21 -22
  107. package/dist/commands/handshake.js.map +1 -1
  108. package/dist/commands/ingest.d.ts.map +1 -1
  109. package/dist/commands/ingest.js +11 -3
  110. package/dist/commands/ingest.js.map +1 -1
  111. package/dist/commands/init.d.ts +14 -0
  112. package/dist/commands/init.d.ts.map +1 -0
  113. package/dist/commands/init.js +117 -0
  114. package/dist/commands/init.js.map +1 -0
  115. package/dist/commands/login.d.ts.map +1 -1
  116. package/dist/commands/login.js +32 -20
  117. package/dist/commands/login.js.map +1 -1
  118. package/dist/commands/profile.d.ts +24 -0
  119. package/dist/commands/profile.d.ts.map +1 -0
  120. package/dist/commands/profile.js +82 -0
  121. package/dist/commands/profile.js.map +1 -0
  122. package/dist/commands/promote.d.ts.map +1 -1
  123. package/dist/commands/promote.js +22 -7
  124. package/dist/commands/promote.js.map +1 -1
  125. package/dist/commands/reject.d.ts.map +1 -1
  126. package/dist/commands/reject.js +11 -5
  127. package/dist/commands/reject.js.map +1 -1
  128. package/dist/commands/relate.d.ts.map +1 -1
  129. package/dist/commands/relate.js +21 -10
  130. package/dist/commands/relate.js.map +1 -1
  131. package/dist/commands/session.d.ts.map +1 -1
  132. package/dist/commands/session.js +16 -6
  133. package/dist/commands/session.js.map +1 -1
  134. package/dist/commands/setup.d.ts +1 -2
  135. package/dist/commands/setup.d.ts.map +1 -1
  136. package/dist/commands/setup.js +17 -38
  137. package/dist/commands/setup.js.map +1 -1
  138. package/dist/commands/update.d.ts.map +1 -1
  139. package/dist/commands/update.js +45 -27
  140. package/dist/commands/update.js.map +1 -1
  141. package/dist/commands/verify.d.ts.map +1 -1
  142. package/dist/commands/verify.js +11 -5
  143. package/dist/commands/verify.js.map +1 -1
  144. package/dist/commands/workspace.d.ts +41 -0
  145. package/dist/commands/workspace.d.ts.map +1 -0
  146. package/dist/commands/workspace.js +239 -0
  147. package/dist/commands/workspace.js.map +1 -0
  148. package/dist/formatters/promote.d.ts +1 -0
  149. package/dist/formatters/promote.d.ts.map +1 -1
  150. package/dist/formatters/promote.js +1 -0
  151. package/dist/formatters/promote.js.map +1 -1
  152. package/dist/index.js +328 -299
  153. package/dist/index.js.map +1 -1
  154. package/dist/lib/client.d.ts +4 -2
  155. package/dist/lib/client.d.ts.map +1 -1
  156. package/dist/lib/client.js +143 -68
  157. package/dist/lib/client.js.map +1 -1
  158. package/dist/lib/config.d.ts +63 -4
  159. package/dist/lib/config.d.ts.map +1 -1
  160. package/dist/lib/config.js +230 -36
  161. package/dist/lib/config.js.map +1 -1
  162. package/dist/lib/constants.d.ts +1 -1
  163. package/dist/lib/constants.d.ts.map +1 -1
  164. package/dist/lib/constants.js +1 -1
  165. package/dist/lib/constants.js.map +1 -1
  166. package/dist/lib/errors.d.ts +58 -0
  167. package/dist/lib/errors.d.ts.map +1 -0
  168. package/dist/lib/errors.js +67 -0
  169. package/dist/lib/errors.js.map +1 -0
  170. package/dist/lib/format.d.ts +10 -0
  171. package/dist/lib/format.d.ts.map +1 -0
  172. package/dist/lib/format.js +27 -0
  173. package/dist/lib/format.js.map +1 -0
  174. package/dist/lib/glossary.d.ts +19 -0
  175. package/dist/lib/glossary.d.ts.map +1 -0
  176. package/dist/lib/glossary.js +53 -0
  177. package/dist/lib/glossary.js.map +1 -0
  178. package/dist/lib/onboarding.d.ts +19 -0
  179. package/dist/lib/onboarding.d.ts.map +1 -0
  180. package/dist/lib/onboarding.js +373 -0
  181. package/dist/lib/onboarding.js.map +1 -0
  182. package/dist/lib/profiles.d.ts +34 -0
  183. package/dist/lib/profiles.d.ts.map +1 -0
  184. package/dist/lib/profiles.js +173 -0
  185. package/dist/lib/profiles.js.map +1 -0
  186. package/dist/lib/prompts.d.ts +38 -0
  187. package/dist/lib/prompts.d.ts.map +1 -0
  188. package/dist/lib/prompts.js +90 -0
  189. package/dist/lib/prompts.js.map +1 -0
  190. package/dist/lib/runner.d.ts +2 -0
  191. package/dist/lib/runner.d.ts.map +1 -1
  192. package/dist/lib/runner.js +21 -7
  193. package/dist/lib/runner.js.map +1 -1
  194. package/dist/lib/spinner.d.ts +27 -0
  195. package/dist/lib/spinner.d.ts.map +1 -0
  196. package/dist/lib/spinner.js +76 -0
  197. package/dist/lib/spinner.js.map +1 -0
  198. package/dist/lib/spinner.test.d.ts +2 -0
  199. package/dist/lib/spinner.test.d.ts.map +1 -0
  200. package/dist/lib/spinner.test.js +39 -0
  201. package/dist/lib/spinner.test.js.map +1 -0
  202. package/dist/lib/style.d.ts +65 -0
  203. package/dist/lib/style.d.ts.map +1 -0
  204. package/dist/lib/style.js +108 -0
  205. package/dist/lib/style.js.map +1 -0
  206. package/dist/lib/style.test.d.ts +7 -0
  207. package/dist/lib/style.test.d.ts.map +1 -0
  208. package/dist/lib/style.test.js +195 -0
  209. package/dist/lib/style.test.js.map +1 -0
  210. package/dist/lib/workspace-probe.d.ts +16 -0
  211. package/dist/lib/workspace-probe.d.ts.map +1 -0
  212. package/dist/lib/workspace-probe.js +33 -0
  213. package/dist/lib/workspace-probe.js.map +1 -0
  214. package/package.json +2 -1
@@ -0,0 +1,308 @@
1
+ /**
2
+ * WP-305 Slice 4 tests: workspace.ts CLI formatting and utilities.
3
+ *
4
+ * Tests pure functions only — no Convex or network calls.
5
+ * formatWorkspaceVerify, formatWorkspaceRepair, formatDefinitionsDiff,
6
+ * deepEqual, and stripConvexMeta are exercised via the exported formatting
7
+ * surface (format* functions are unexported internals invoked through the
8
+ * runCliCommand mock pattern used in other CLI tests).
9
+ *
10
+ * Because the format functions are unexported, we test via the runCliCommand
11
+ * mock and capture stdout exactly as other CLI tests do.
12
+ */
13
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
14
+ import { runWorkspaceVerify, runWorkspaceRepair, runDefinitionsDiff } from '../commands/workspace.js';
15
+ // ── Mocks ──────────────────────────────────────────────────────────────────
16
+ const mcpCallMock = vi.fn();
17
+ vi.mock('../lib/client.js', () => ({
18
+ mcpCall: (...args) => mcpCallMock(...args),
19
+ }));
20
+ vi.mock('../lib/config.js', () => ({
21
+ getConfigOrGuide: vi.fn(() => Promise.resolve({ apiKey: 'pb_sk_test', siteUrl: 'https://test.convex.site' })),
22
+ }));
23
+ vi.mock('../lib/runner.js', () => ({
24
+ runCliCommand: vi.fn(async ({ fn, formatPretty }) => {
25
+ const data = await fn();
26
+ process.stdout.write(formatPretty(data) + '\n');
27
+ }),
28
+ }));
29
+ // ── Helpers ────────────────────────────────────────────────────────────────
30
+ function captureStdout(fn) {
31
+ return new Promise((resolve, reject) => {
32
+ const chunks = [];
33
+ const spy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
34
+ chunks.push(String(chunk));
35
+ return true;
36
+ });
37
+ fn()
38
+ .then(() => {
39
+ spy.mockRestore();
40
+ resolve(chunks.join(''));
41
+ })
42
+ .catch((err) => {
43
+ spy.mockRestore();
44
+ reject(err);
45
+ });
46
+ });
47
+ }
48
+ // ── Fixtures ───────────────────────────────────────────────────────────────
49
+ const healthyResult = {
50
+ workspaceId: 'ws-1',
51
+ workspaceName: 'Acme Workspace',
52
+ collectionsAligned: true,
53
+ glossarySeeded: true,
54
+ semanticTypesSeeded: true,
55
+ defaultCircleSeeded: true,
56
+ gaps: [],
57
+ status: 'healthy',
58
+ };
59
+ const incompletResult = {
60
+ workspaceId: 'ws-2',
61
+ workspaceName: 'Broken Workspace',
62
+ collectionsAligned: true,
63
+ glossarySeeded: false,
64
+ semanticTypesSeeded: false,
65
+ defaultCircleSeeded: false,
66
+ gaps: [
67
+ 'seedSystemEntries incomplete — missing glossary keys: circle, role',
68
+ 'seedSemanticTypes incomplete — semantic-types collection or entries missing',
69
+ 'seedDefaultCircle incomplete — product-team-circle entry missing',
70
+ ],
71
+ status: 'incomplete',
72
+ };
73
+ const missingSeedsResult = {
74
+ workspaceId: 'ws-3',
75
+ workspaceName: 'Empty Workspace',
76
+ collectionsAligned: false,
77
+ glossarySeeded: false,
78
+ semanticTypesSeeded: false,
79
+ defaultCircleSeeded: false,
80
+ gaps: ['collections missing: bets, tensions'],
81
+ status: 'missing-seeds',
82
+ };
83
+ // ── formatWorkspaceVerify ──────────────────────────────────────────────────
84
+ describe('formatWorkspaceVerify', () => {
85
+ beforeEach(() => vi.clearAllMocks());
86
+ it('renders workspace name in the heading', async () => {
87
+ mcpCallMock.mockResolvedValue(healthyResult);
88
+ const output = await captureStdout(() => runWorkspaceVerify());
89
+ expect(output).toContain('Acme Workspace');
90
+ });
91
+ it('shows healthy status when all checks pass', async () => {
92
+ mcpCallMock.mockResolvedValue(healthyResult);
93
+ const output = await captureStdout(() => runWorkspaceVerify());
94
+ expect(output).toContain('healthy');
95
+ // No gaps section
96
+ expect(output).not.toContain('Gaps');
97
+ expect(output).not.toContain('pb workspace repair');
98
+ });
99
+ it('shows all four check labels', async () => {
100
+ mcpCallMock.mockResolvedValue(healthyResult);
101
+ const output = await captureStdout(() => runWorkspaceVerify());
102
+ expect(output).toContain('Collections aligned');
103
+ expect(output).toContain('Glossary seeded');
104
+ expect(output).toContain('Semantic types');
105
+ expect(output).toContain('Default circle');
106
+ });
107
+ it('shows incomplete status with gaps section', async () => {
108
+ mcpCallMock.mockResolvedValue(incompletResult);
109
+ const output = await captureStdout(() => runWorkspaceVerify());
110
+ expect(output).toContain('incomplete');
111
+ expect(output).toContain('Gaps');
112
+ expect(output).toContain('seedSystemEntries incomplete');
113
+ expect(output).toContain('pb workspace repair');
114
+ });
115
+ it('shows missing-seeds status', async () => {
116
+ mcpCallMock.mockResolvedValue(missingSeedsResult);
117
+ const output = await captureStdout(() => runWorkspaceVerify());
118
+ expect(output).toContain('missing-seeds');
119
+ expect(output).toContain('collections missing');
120
+ });
121
+ it('lists all gaps individually', async () => {
122
+ mcpCallMock.mockResolvedValue(incompletResult);
123
+ const output = await captureStdout(() => runWorkspaceVerify());
124
+ for (const gap of incompletResult.gaps) {
125
+ expect(output).toContain(gap);
126
+ }
127
+ });
128
+ });
129
+ // ── formatWorkspaceRepair ──────────────────────────────────────────────────
130
+ describe('formatWorkspaceRepair', () => {
131
+ beforeEach(() => vi.clearAllMocks());
132
+ const alreadyHealthyResult = {
133
+ workspaceId: 'ws-1',
134
+ workspaceName: 'Healthy Workspace',
135
+ scheduled: [],
136
+ skipped: ['seedSystemEntries', 'seedSemanticTypes', 'seedDefaultCircle'],
137
+ alreadyHealthy: true,
138
+ };
139
+ const repairedResult = {
140
+ workspaceId: 'ws-2',
141
+ workspaceName: 'Fixed Workspace',
142
+ scheduled: ['seedSystemEntries', 'seedSemanticTypes'],
143
+ skipped: ['seedDefaultCircle'],
144
+ alreadyHealthy: false,
145
+ };
146
+ it('renders already-healthy message when alreadyHealthy is true', async () => {
147
+ mcpCallMock.mockResolvedValue(alreadyHealthyResult);
148
+ const output = await captureStdout(() => runWorkspaceRepair());
149
+ expect(output).toContain('already healthy');
150
+ expect(output).not.toContain('Scheduled');
151
+ });
152
+ it('lists scheduled jobs when seeds were missing', async () => {
153
+ mcpCallMock.mockResolvedValue(repairedResult);
154
+ const output = await captureStdout(() => runWorkspaceRepair());
155
+ expect(output).toContain('Scheduled');
156
+ expect(output).toContain('seedSystemEntries');
157
+ expect(output).toContain('seedSemanticTypes');
158
+ });
159
+ it('lists skipped jobs when already present', async () => {
160
+ mcpCallMock.mockResolvedValue(repairedResult);
161
+ const output = await captureStdout(() => runWorkspaceRepair());
162
+ expect(output).toContain('Skipped');
163
+ expect(output).toContain('seedDefaultCircle');
164
+ });
165
+ it('shows async-confirmation hint when seeds were scheduled', async () => {
166
+ mcpCallMock.mockResolvedValue(repairedResult);
167
+ const output = await captureStdout(() => runWorkspaceRepair());
168
+ expect(output).toContain('pb workspace verify');
169
+ });
170
+ it('renders workspace name', async () => {
171
+ mcpCallMock.mockResolvedValue(repairedResult);
172
+ const output = await captureStdout(() => runWorkspaceRepair());
173
+ expect(output).toContain('Fixed Workspace');
174
+ });
175
+ });
176
+ // ── formatDefinitionsDiff ──────────────────────────────────────────────────
177
+ describe('formatDefinitionsDiff — via runDefinitionsDiff mock', () => {
178
+ /**
179
+ * runDefinitionsDiff reads a file and calls the MCP — too much plumbing.
180
+ * Instead we test the pure format logic by importing it indirectly via a
181
+ * helper that calls the underlying formatter directly.
182
+ *
183
+ * The formatter is unexported so we exercise it via the runCliCommand mock:
184
+ * we intercept the formatPretty argument and invoke it with fixture data.
185
+ */
186
+ // Override runCliCommand to capture the formatter, not just stdout.
187
+ let capturedFormatter = null;
188
+ beforeEach(() => {
189
+ vi.clearAllMocks();
190
+ capturedFormatter = null;
191
+ });
192
+ function makeFormatterCapture() {
193
+ const { runCliCommand } = vi.mocked(
194
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
195
+ require('../lib/runner.js'));
196
+ void runCliCommand;
197
+ // Re-mock inline for this describe block to capture the formatter
198
+ vi.doMock('../lib/runner.js', () => ({
199
+ runCliCommand: vi.fn(async ({ fn, formatPretty }) => {
200
+ capturedFormatter = formatPretty;
201
+ await fn();
202
+ }),
203
+ }));
204
+ }
205
+ void makeFormatterCapture;
206
+ // Since the formatter is not exported, test it through output capture.
207
+ // We control the MCP response to shape what diffResult looks like.
208
+ it('shows "no definitions found" when both sides are empty', async () => {
209
+ // The MCP returns empty server list; local file has no slugs.
210
+ // We achieve this by returning an empty array from the MCP and providing
211
+ // a temp file with an empty array.
212
+ const { mkdtempSync, writeFileSync, rmSync } = await import('node:fs');
213
+ const { join } = await import('node:path');
214
+ const { tmpdir } = await import('node:os');
215
+ const dir = mkdtempSync(join(tmpdir(), 'pb-test-'));
216
+ const file = join(dir, 'defs.json');
217
+ writeFileSync(file, JSON.stringify([]));
218
+ mcpCallMock.mockResolvedValue([]);
219
+ const output = await captureStdout(() => runDefinitionsDiff({ file }));
220
+ expect(output).toContain('No definitions found');
221
+ rmSync(dir, { recursive: true, force: true });
222
+ });
223
+ it('shows identical count when local and server match', async () => {
224
+ const { mkdtempSync, writeFileSync, rmSync } = await import('node:fs');
225
+ const { join } = await import('node:path');
226
+ const { tmpdir } = await import('node:os');
227
+ const dir = mkdtempSync(join(tmpdir(), 'pb-test-'));
228
+ const file = join(dir, 'defs.json');
229
+ const def = { slug: 'bets', name: 'Bets', description: 'Work packages' };
230
+ writeFileSync(file, JSON.stringify([def]));
231
+ mcpCallMock.mockResolvedValue([def]);
232
+ const output = await captureStdout(() => runDefinitionsDiff({ file }));
233
+ expect(output).toContain('Identical');
234
+ expect(output).toContain('1');
235
+ expect(output).toContain('All definitions match');
236
+ rmSync(dir, { recursive: true, force: true });
237
+ });
238
+ it('shows onlyLocal when slug not on server', async () => {
239
+ const { mkdtempSync, writeFileSync, rmSync } = await import('node:fs');
240
+ const { join } = await import('node:path');
241
+ const { tmpdir } = await import('node:os');
242
+ const dir = mkdtempSync(join(tmpdir(), 'pb-test-'));
243
+ const file = join(dir, 'defs.json');
244
+ writeFileSync(file, JSON.stringify([{ slug: 'experiments', name: 'Experiments' }]));
245
+ mcpCallMock.mockResolvedValue([]);
246
+ const output = await captureStdout(() => runDefinitionsDiff({ file }));
247
+ expect(output).toContain('Only local');
248
+ expect(output).toContain('experiments');
249
+ rmSync(dir, { recursive: true, force: true });
250
+ });
251
+ it('shows onlyServer when slug not in local file', async () => {
252
+ const { mkdtempSync, writeFileSync, rmSync } = await import('node:fs');
253
+ const { join } = await import('node:path');
254
+ const { tmpdir } = await import('node:os');
255
+ const dir = mkdtempSync(join(tmpdir(), 'pb-test-'));
256
+ const file = join(dir, 'defs.json');
257
+ writeFileSync(file, JSON.stringify([]));
258
+ mcpCallMock.mockResolvedValue([{ slug: 'tensions', name: 'Tensions' }]);
259
+ const output = await captureStdout(() => runDefinitionsDiff({ file }));
260
+ expect(output).toContain('Only server');
261
+ expect(output).toContain('tensions');
262
+ rmSync(dir, { recursive: true, force: true });
263
+ });
264
+ it('shows different when slug exists on both but metadata differs', async () => {
265
+ const { mkdtempSync, writeFileSync, rmSync } = await import('node:fs');
266
+ const { join } = await import('node:path');
267
+ const { tmpdir } = await import('node:os');
268
+ const dir = mkdtempSync(join(tmpdir(), 'pb-test-'));
269
+ const file = join(dir, 'defs.json');
270
+ writeFileSync(file, JSON.stringify([{ slug: 'bets', name: 'Old name' }]));
271
+ mcpCallMock.mockResolvedValue([{ slug: 'bets', name: 'New name' }]);
272
+ const output = await captureStdout(() => runDefinitionsDiff({ file }));
273
+ expect(output).toContain('Different');
274
+ expect(output).toContain('bets');
275
+ rmSync(dir, { recursive: true, force: true });
276
+ });
277
+ it('strips _id and _creationTime from server defs before comparing', async () => {
278
+ const { mkdtempSync, writeFileSync, rmSync } = await import('node:fs');
279
+ const { join } = await import('node:path');
280
+ const { tmpdir } = await import('node:os');
281
+ const dir = mkdtempSync(join(tmpdir(), 'pb-test-'));
282
+ const file = join(dir, 'defs.json');
283
+ const localDef = { slug: 'bets', name: 'Bets' };
284
+ writeFileSync(file, JSON.stringify([localDef]));
285
+ // Server returns same data but with Convex metadata — should still be identical
286
+ mcpCallMock.mockResolvedValue([{ ...localDef, _id: 'abc123', _creationTime: 1234567890 }]);
287
+ const output = await captureStdout(() => runDefinitionsDiff({ file }));
288
+ expect(output).toContain('Identical');
289
+ expect(output).toContain('All definitions match');
290
+ rmSync(dir, { recursive: true, force: true });
291
+ });
292
+ it('shows summary ratio when there are issues', async () => {
293
+ const { mkdtempSync, writeFileSync, rmSync } = await import('node:fs');
294
+ const { join } = await import('node:path');
295
+ const { tmpdir } = await import('node:os');
296
+ const dir = mkdtempSync(join(tmpdir(), 'pb-test-'));
297
+ const file = join(dir, 'defs.json');
298
+ const identical = { slug: 'bets', name: 'Bets' };
299
+ const changed = { slug: 'tensions', name: 'Old tensions' };
300
+ writeFileSync(file, JSON.stringify([identical, changed]));
301
+ mcpCallMock.mockResolvedValue([identical, { slug: 'tensions', name: 'New tensions' }]);
302
+ const output = await captureStdout(() => runDefinitionsDiff({ file }));
303
+ // 1 identical / 2 total
304
+ expect(output).toContain('1/2');
305
+ rmSync(dir, { recursive: true, force: true });
306
+ });
307
+ });
308
+ //# sourceMappingURL=workspace.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.test.js","sourceRoot":"","sources":["../../src/__tests__/workspace.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH,UAAU,aAAa;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DrE"}
1
+ {"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,UAAU,aAAa;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiErE"}
@@ -12,6 +12,7 @@
12
12
  import { getConfigOrGuide } from '../lib/config.js';
13
13
  import { mcpCall } from '../lib/client.js';
14
14
  import { runCliCommand } from '../lib/runner.js';
15
+ import { CLIError, ErrorCode } from '../lib/errors.js';
15
16
  import { formatAcceptReceipt, formatAutoAcceptReport, } from '../formatters/proposals.js';
16
17
  export async function runAccept(options) {
17
18
  const config = await getConfigOrGuide(() => runAccept(options));
@@ -56,8 +57,11 @@ export async function runAccept(options) {
56
57
  }
57
58
  // ── Single proposal approve ────────────────────────────────────────
58
59
  if (!options.proposalId) {
59
- process.stderr.write('Proposal ID is required. Usage: pb accept <id> or pb accept --auto\n');
60
- process.exit(1);
60
+ throw new CLIError('Proposal ID is required.', {
61
+ code: ErrorCode.VALIDATION_FAILED,
62
+ category: 'validation',
63
+ guidance: 'Usage: pb accept <id> or pb accept --auto',
64
+ });
61
65
  }
62
66
  await runCliCommand({
63
67
  fn: async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"brief.d.ts","sourceRoot":"","sources":["../../src/commands/brief.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,QAAA,MAAM,cAAc,8CAA+C,CAAC;AACpE,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAE5D;AAED,gEAAgE;AAChE,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB7F;AAED,mEAAmE;AACnE,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhB;AAED,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"brief.d.ts","sourceRoot":"","sources":["../../src/commands/brief.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,QAAA,MAAM,cAAc,8CAA+C,CAAC;AACpE,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAE5D;AAED,gEAAgE;AAChE,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB7F;AAED,mEAAmE;AACnE,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BhB;AAED,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -14,6 +14,7 @@ import { getConfigOrGuide } from '../lib/config.js';
14
14
  import { mcpCall } from '../lib/client.js';
15
15
  import { runCliCommand } from '../lib/runner.js';
16
16
  import { formatBrief, formatCompoundBrief, } from '../formatters/brief.js';
17
+ import { CLIError, ErrorCode } from '../lib/errors.js';
17
18
  const COMPOUND_TYPES = ['steering', 'confidence', 'delta'];
18
19
  function isCompoundType(value) {
19
20
  return COMPOUND_TYPES.includes(value);
@@ -57,7 +58,11 @@ export async function runCompoundBrief(options) {
57
58
  if (options.type === 'delta' && options.since) {
58
59
  const sinceMs = Date.parse(options.since);
59
60
  if (isNaN(sinceMs)) {
60
- throw new Error(`Invalid --since timestamp: '${options.since}'. Use ISO 8601 format (e.g. '2026-03-24T00:00:00Z').`);
61
+ throw new CLIError(`Invalid --since timestamp: '${options.since}'.`, {
62
+ code: ErrorCode.VALIDATION_FAILED,
63
+ category: 'validation',
64
+ guidance: `Use ISO 8601 format (e.g. '2026-03-24T00:00:00Z').`,
65
+ });
61
66
  }
62
67
  args.since = sinceMs;
63
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/commands/brief.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;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,EACL,WAAW,EACX,mBAAmB,GAGpB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAU,CAAC;AAGpE,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,cAAc,CAAC,QAAQ,CAAC,KAAqB,CAAC,CAAC;AACxD,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAA+C;IAC5E,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,aAAa,CAAc;QAC/B,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,MAAM,GAAG,MAAM,OAAO,CAAc,0BAA0B,EAAE;gBACpE,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;YAEH,sFAAsF;YACtF,sEAAsE;YACtE,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU;iBAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;iBACrB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;YAC7C,OAAO,CAAC,sBAAsB,EAAE;gBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,eAAe,EAAE,WAAW;gBAC5B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEnB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;KAC7D,CAAC,CAAC;AACL,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAGtC;IACC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,aAAa,CAAsB;QACvC,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,IAAI,GAA4B;gBACpC,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;YAEF,2CAA2C;YAC3C,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CACb,+BAA+B,OAAO,CAAC,KAAK,uDAAuD,CACpG,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACvB,CAAC;YAED,OAAO,MAAM,OAAO,CAAsB,qBAAqB,EAAE,IAAI,CAAC,CAAC;QACzE,CAAC;QACD,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;KACtD,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/commands/brief.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiDH,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA4ED,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAqJvE"}
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmDH,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA4ED,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyJvE"}
@@ -12,6 +12,8 @@ import { readSession, addCapturedEntry } from '../lib/session.js';
12
12
  import { isJsonMode } from '../lib/runner.js';
13
13
  import { formatCaptureReceipt } from '../formatters/capture.js';
14
14
  import { checkActivation } from '../lib/activation.js';
15
+ import { progress } from '../lib/style.js';
16
+ import { CLIError, ErrorCode } from '../lib/errors.js';
15
17
  /**
16
18
  * Infer an ISO date (YYYY-MM-DD) from free-text values.
17
19
  *
@@ -91,9 +93,11 @@ export async function runCapture(options) {
91
93
  // Require active session (DEC-9, BR-8)
92
94
  const session = readSession();
93
95
  if (!session) {
94
- process.stderr.write('No active session. Run `pb session start` first.\n');
95
- process.stderr.write('Write access requires a tracked session (DEC-9).\n');
96
- process.exit(1);
96
+ throw new CLIError('No active session.', {
97
+ code: ErrorCode.SESSION_REQUIRED,
98
+ category: 'session',
99
+ guidance: 'Run `pb session start` first. Write access requires a tracked session (DEC-9).',
100
+ });
97
101
  }
98
102
  // BET-277 fix: Extract known ID prefix hints (e.g. "FLO: description" → collection=flows).
99
103
  // When the user explicitly prefixes with a known entry ID prefix, treat it as a collection
@@ -114,20 +118,23 @@ export async function runCapture(options) {
114
118
  }
115
119
  else {
116
120
  if (!json)
117
- process.stdout.write('Classifying...\n');
121
+ progress('Classifying...');
118
122
  classification = await mcpCallWithSession('chain.resolveCollection', {
119
123
  entryName,
120
124
  entryDescription,
121
125
  });
122
126
  if (!classification) {
123
- process.stderr.write('Classification needs review before capture can continue. Re-run with `--collection <slug>`.\n');
124
- process.exit(1);
127
+ throw new CLIError('Classification needs review before capture can continue.', {
128
+ code: ErrorCode.VALIDATION_FAILED,
129
+ category: 'validation',
130
+ guidance: 'Re-run with `--collection <slug>` to specify the collection explicitly.',
131
+ });
125
132
  }
126
133
  collectionSlug = classification.collection;
127
134
  }
128
135
  // Phase 2: Create entry as draft
129
136
  if (!json)
130
- process.stdout.write(`Capturing to ${collectionSlug}...\n`);
137
+ progress(`Capturing to ${collectionSlug}...`);
131
138
  const data = { description: entryDescription };
132
139
  // Only set date when we can infer a source date from the capture itself.
133
140
  const datedCollections = ['tensions', 'decisions', 'insights', 'standards', 'business-rules'];
@@ -213,12 +220,13 @@ export async function runCapture(options) {
213
220
  relationSuggestions: result.relationSuggestions,
214
221
  }) + '\n');
215
222
  }
216
- // BET-271 S1: Exit 1 when fields were rejected — signals "not everything you asked for happened."
223
+ // BET-271 S1: Throw when fields were rejected — signals "not everything you asked for happened."
217
224
  if (hasRejected) {
218
- if (!json) {
219
- process.stderr.write(`\nFields rejected: ${rejectedFields.join(', ')}. Run \`pb fields ${collectionSlug}\` to see valid fields.\n`);
220
- }
221
- process.exit(1);
225
+ throw new CLIError(`Fields rejected: ${rejectedFields.join(', ')}.`, {
226
+ code: ErrorCode.VALIDATION_FAILED,
227
+ category: 'validation',
228
+ guidance: `Run \`pb fields ${collectionSlug}\` to see valid fields.`,
229
+ });
222
230
  }
223
231
  }
224
232
  //# sourceMappingURL=capture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chain-walk.d.ts","sourceRoot":"","sources":["../../src/commands/chain-walk.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhB"}
1
+ {"version":3,"file":"chain-walk.d.ts","sourceRoot":"","sources":["../../src/commands/chain-walk.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BhB"}
@@ -9,6 +9,7 @@ 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 { formatChainWalk } from '../formatters/chain-walk.js';
12
+ import { CLIError, ErrorCode } from '../lib/errors.js';
12
13
  export async function runChainWalk(options) {
13
14
  const config = await getConfigOrGuide(() => runChainWalk(options));
14
15
  if (!config)
@@ -16,7 +17,11 @@ export async function runChainWalk(options) {
16
17
  const { entryId, depth, direction, type } = options;
17
18
  // Validate direction
18
19
  if (direction !== 'outgoing' && direction !== 'incoming') {
19
- throw new Error(`Invalid direction: "${direction}". Must be 'outgoing' or 'incoming'.`);
20
+ throw new CLIError(`Invalid direction: "${direction}".`, {
21
+ code: ErrorCode.VALIDATION_FAILED,
22
+ category: 'validation',
23
+ guidance: `Must be 'outgoing' or 'incoming'.`,
24
+ });
20
25
  }
21
26
  // Validate depth
22
27
  const clampedDepth = Math.max(1, Math.min(4, depth));
@@ -1 +1 @@
1
- {"version":3,"file":"chain-walk.js","sourceRoot":"","sources":["../../src/commands/chain-walk.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,eAAe,EAAwB,MAAM,6BAA6B,CAAC;AAEpF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAKlC;IACC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEpD,qBAAqB;IACrB,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,sCAAsC,CAAC,CAAC;IAC1F,CAAC;IAED,iBAAiB;IACjB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAErD,MAAM,aAAa,CAAkB;QACnC,EAAE,EAAE,GAAG,EAAE,CACP,OAAO,CAAkB,qBAAqB,EAAE;YAC9C,OAAO;YACP,SAAS;YACT,OAAO,EAAE,YAAY;YACrB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC;QACJ,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC;KAC1F,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"chain-walk.js","sourceRoot":"","sources":["../../src/commands/chain-walk.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,eAAe,EAAwB,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAKlC;IACC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEpD,qBAAqB;IACrB,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACzD,MAAM,IAAI,QAAQ,CAAC,uBAAuB,SAAS,IAAI,EAAE;YACvD,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,mCAAmC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB;IACjB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAErD,MAAM,aAAa,CAAkB;QACnC,EAAE,EAAE,GAAG,EAAE,CACP,OAAO,CAAkB,qBAAqB,EAAE;YAC9C,OAAO;YACP,SAAS;YACT,OAAO,EAAE,YAAY;YACrB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC;QACJ,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC;KAC1F,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../../src/commands/changes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB1E"}
1
+ {"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../../src/commands/changes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB1E"}
@@ -9,6 +9,7 @@ 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 { formatChanges } from '../formatters/changes.js';
12
+ import { CLIError, ErrorCode } from '../lib/errors.js';
12
13
  /** Parse a human-friendly duration string into milliseconds. */
13
14
  function parseDuration(input) {
14
15
  const match = input.match(/^(\d+)(h|d)$/i);
@@ -28,7 +29,11 @@ export async function runChanges(options) {
28
29
  return;
29
30
  const durationMs = parseDuration(options.since);
30
31
  if (durationMs === null) {
31
- throw new Error(`Invalid duration: "${options.since}". Use format: 1h, 6h, 1d, 7d, 30d (numeric + h/d suffix).`);
32
+ throw new CLIError(`Invalid duration: "${options.since}".`, {
33
+ code: ErrorCode.VALIDATION_FAILED,
34
+ category: 'validation',
35
+ guidance: 'Use format: 1h, 6h, 1d, 7d, 30d (numeric + h/d suffix).',
36
+ });
32
37
  }
33
38
  const sinceTimestamp = Date.now() - durationMs;
34
39
  await runCliCommand({
@@ -1 +1 @@
1
- {"version":3,"file":"changes.js","sourceRoot":"","sources":["../../src/commands/changes.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,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAE7E,gEAAgE;AAChE,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,KAAK,GAAG,SAAS,CAAC;IAC3C,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,KAAK,GAAG,UAAU,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,sBAAsB,OAAO,CAAC,KAAK,4DAA4D,CAChG,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAE/C,MAAM,aAAa,CAAgB;QACjC,EAAE,EAAE,GAAG,EAAE,CACP,OAAO,CAAgB,uBAAuB,EAAE;YAC9C,KAAK,EAAE,cAAc;SACtB,CAAC;QACJ,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"changes.js","sourceRoot":"","sources":["../../src/commands/changes.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,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEvD,gEAAgE;AAChE,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,KAAK,GAAG,SAAS,CAAC;IAC3C,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,KAAK,GAAG,UAAU,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,QAAQ,CAChB,sBAAsB,OAAO,CAAC,KAAK,IAAI,EACvC;YACE,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,yDAAyD;SACpE,CACF,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAE/C,MAAM,aAAa,CAAgB;QACjC,EAAE,EAAE,GAAG,EAAE,CACP,OAAO,CAAgB,uBAAuB,EAAE;YAC9C,KAAK,EAAE,cAAc;SACtB,CAAC;QACJ,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"codex-prep.d.ts","sourceRoot":"","sources":["../../src/commands/codex-prep.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B3E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAyFpF"}
1
+ {"version":3,"file":"codex-prep.d.ts","sourceRoot":"","sources":["../../src/commands/codex-prep.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B3E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAyFpF"}