@productbrain/cli 0.1.0-beta.7278 → 0.1.0-beta.7288

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 (101) hide show
  1. package/dist/__tests__/onboarding.test.js +4 -1
  2. package/dist/__tests__/onboarding.test.js.map +1 -1
  3. package/dist/__tests__/session-close-loop.test.js +0 -2
  4. package/dist/__tests__/session-close-loop.test.js.map +1 -1
  5. package/dist/commands/handshake.js +2 -2
  6. package/dist/commands/handshake.js.map +1 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +2 -4
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/session.d.ts.map +1 -1
  11. package/dist/commands/session.js +0 -18
  12. package/dist/commands/session.js.map +1 -1
  13. package/dist/formatters/digest.d.ts.map +1 -1
  14. package/dist/formatters/digest.js +9 -5
  15. package/dist/formatters/digest.js.map +1 -1
  16. package/dist/index.js +1 -62
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  19. package/dist/lib/onboarding-shared.js +8 -9
  20. package/dist/lib/onboarding-shared.js.map +1 -1
  21. package/dist/lib/onboarding-topics.js +1 -1
  22. package/dist/lib/onboarding.d.ts.map +1 -1
  23. package/dist/lib/onboarding.js +7 -13
  24. package/dist/lib/onboarding.js.map +1 -1
  25. package/package.json +1 -1
  26. package/dist/__tests__/migrate-setup-session-refusal.test.d.ts +0 -2
  27. package/dist/__tests__/migrate-setup-session-refusal.test.d.ts.map +0 -1
  28. package/dist/__tests__/migrate-setup-session-refusal.test.js +0 -65
  29. package/dist/__tests__/migrate-setup-session-refusal.test.js.map +0 -1
  30. package/dist/__tests__/setup-ingest.test.d.ts +0 -2
  31. package/dist/__tests__/setup-ingest.test.d.ts.map +0 -1
  32. package/dist/__tests__/setup-ingest.test.js +0 -71
  33. package/dist/__tests__/setup-ingest.test.js.map +0 -1
  34. package/dist/__tests__/setup-resolver.test.d.ts +0 -14
  35. package/dist/__tests__/setup-resolver.test.d.ts.map +0 -1
  36. package/dist/__tests__/setup-resolver.test.js +0 -228
  37. package/dist/__tests__/setup-resolver.test.js.map +0 -1
  38. package/dist/__tests__/setupShFallbackWarning.test.d.ts +0 -2
  39. package/dist/__tests__/setupShFallbackWarning.test.d.ts.map +0 -1
  40. package/dist/__tests__/setupShFallbackWarning.test.js +0 -15
  41. package/dist/__tests__/setupShFallbackWarning.test.js.map +0 -1
  42. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +0 -15
  43. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +0 -1
  44. package/dist/commands/__tests__/setup-detect-surfaces.test.js +0 -149
  45. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +0 -1
  46. package/dist/commands/__tests__/setup-state.test.d.ts +0 -2
  47. package/dist/commands/__tests__/setup-state.test.d.ts.map +0 -1
  48. package/dist/commands/__tests__/setup-state.test.js +0 -194
  49. package/dist/commands/__tests__/setup-state.test.js.map +0 -1
  50. package/dist/commands/migrate-setup.d.ts +0 -18
  51. package/dist/commands/migrate-setup.d.ts.map +0 -1
  52. package/dist/commands/migrate-setup.js +0 -162
  53. package/dist/commands/migrate-setup.js.map +0 -1
  54. package/dist/commands/setup-audit.d.ts +0 -59
  55. package/dist/commands/setup-audit.d.ts.map +0 -1
  56. package/dist/commands/setup-audit.js +0 -250
  57. package/dist/commands/setup-audit.js.map +0 -1
  58. package/dist/commands/setup-detect-surfaces.d.ts +0 -38
  59. package/dist/commands/setup-detect-surfaces.d.ts.map +0 -1
  60. package/dist/commands/setup-detect-surfaces.js +0 -76
  61. package/dist/commands/setup-detect-surfaces.js.map +0 -1
  62. package/dist/commands/setup-ingest.d.ts +0 -17
  63. package/dist/commands/setup-ingest.d.ts.map +0 -1
  64. package/dist/commands/setup-ingest.js +0 -179
  65. package/dist/commands/setup-ingest.js.map +0 -1
  66. package/dist/commands/setup-resolver.d.ts +0 -58
  67. package/dist/commands/setup-resolver.d.ts.map +0 -1
  68. package/dist/commands/setup-resolver.js +0 -150
  69. package/dist/commands/setup-resolver.js.map +0 -1
  70. package/dist/commands/setup-state.d.ts +0 -42
  71. package/dist/commands/setup-state.d.ts.map +0 -1
  72. package/dist/commands/setup-state.js +0 -93
  73. package/dist/commands/setup-state.js.map +0 -1
  74. package/dist/commands/setup.d.ts +0 -23
  75. package/dist/commands/setup.d.ts.map +0 -1
  76. package/dist/commands/setup.js +0 -69
  77. package/dist/commands/setup.js.map +0 -1
  78. package/dist/setup/__tests__/coach-traces.test.d.ts +0 -2
  79. package/dist/setup/__tests__/coach-traces.test.d.ts.map +0 -1
  80. package/dist/setup/__tests__/coach-traces.test.js +0 -189
  81. package/dist/setup/__tests__/coach-traces.test.js.map +0 -1
  82. package/dist/setup/__tests__/setup-commands.test.d.ts +0 -2
  83. package/dist/setup/__tests__/setup-commands.test.d.ts.map +0 -1
  84. package/dist/setup/__tests__/setup-commands.test.js +0 -177
  85. package/dist/setup/__tests__/setup-commands.test.js.map +0 -1
  86. package/dist/setup/__tests__/state-machine.test.d.ts +0 -2
  87. package/dist/setup/__tests__/state-machine.test.d.ts.map +0 -1
  88. package/dist/setup/__tests__/state-machine.test.js +0 -341
  89. package/dist/setup/__tests__/state-machine.test.js.map +0 -1
  90. package/dist/setup/detect-surfaces.d.ts +0 -21
  91. package/dist/setup/detect-surfaces.d.ts.map +0 -1
  92. package/dist/setup/detect-surfaces.js +0 -39
  93. package/dist/setup/detect-surfaces.js.map +0 -1
  94. package/dist/setup/manifest-writer.d.ts +0 -17
  95. package/dist/setup/manifest-writer.d.ts.map +0 -1
  96. package/dist/setup/manifest-writer.js +0 -153
  97. package/dist/setup/manifest-writer.js.map +0 -1
  98. package/dist/setup/state-machine.d.ts +0 -67
  99. package/dist/setup/state-machine.d.ts.map +0 -1
  100. package/dist/setup/state-machine.js +0 -124
  101. package/dist/setup/state-machine.js.map +0 -1
@@ -1,65 +0,0 @@
1
- /**
2
- * WP-712 review fix (Cursor Bugbot, PR #810) — a moved-pin refusal from the shared kernelCall
3
- * guard fires identically on every remaining asset in `runMigrateSetup`'s per-asset loop. Before
4
- * the fix, the per-item try/catch swallowed it N times into `errors[]` and the command exited
5
- * with a generic INTERNAL "completed with N error(s)", burying the `pb session start` guidance.
6
- * This proves a SESSION_REQUIRED refusal now escapes the loop as ONE clean CLIError instead.
7
- */
8
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
9
- import { CLIError, ErrorCode } from '../lib/errors.js';
10
- const kernelCallMock = vi.fn();
11
- const trackEventMock = vi.fn();
12
- const { fileContents } = vi.hoisted(() => ({
13
- fileContents: {},
14
- }));
15
- vi.mock('node:fs', () => ({
16
- existsSync: vi.fn((path) => path in fileContents || path === '/repo/.productbrain' || path === '/repo/.productbrain/skills'),
17
- readdirSync: vi.fn((dir) => {
18
- if (dir === '/repo/.productbrain/skills')
19
- return ['one.md', 'two.md'];
20
- return [];
21
- }),
22
- readFileSync: vi.fn((path) => fileContents[path] ?? '---\nname: Asset\n---\nBody'),
23
- }));
24
- vi.mock('../lib/client.js', () => ({
25
- kernelCall: (...args) => kernelCallMock(...args),
26
- }));
27
- vi.mock('../lib/session.js', () => ({
28
- readSession: vi.fn(() => ({
29
- sessionId: 'sess-1',
30
- workspaceId: 'workspace-1',
31
- workspaceName: 'Test Workspace',
32
- startedAt: new Date(0).toISOString(),
33
- entriesCaptured: [],
34
- })),
35
- }));
36
- vi.mock('../lib/runner.js', () => ({
37
- isJsonMode: vi.fn(() => true),
38
- }));
39
- vi.mock('../lib/telemetry.js', () => ({
40
- trackEvent: (...args) => trackEventMock(...args),
41
- }));
42
- import { runMigrateSetup } from '../commands/migrate-setup.js';
43
- describe('runMigrateSetup — session refusal escapes the per-asset loop', () => {
44
- let cwdSpy;
45
- beforeEach(() => {
46
- vi.clearAllMocks();
47
- cwdSpy = vi.spyOn(process, 'cwd').mockReturnValue('/repo');
48
- });
49
- afterEach(() => {
50
- cwdSpy.mockRestore();
51
- });
52
- it('rethrows a SESSION_REQUIRED refusal as ONE CLIError, not N accumulated per-asset errors', async () => {
53
- const refusal = new CLIError('The workspace credential changed after this session started — expected "A", found "B" — so this call would land in a different workspace than the session belongs to.', { code: ErrorCode.SESSION_REQUIRED, category: 'session', guidance: 'Run `pb session start` to open a session against the current workspace.' });
54
- kernelCallMock.mockRejectedValue(refusal);
55
- await expect(runMigrateSetup({})).rejects.toBe(refusal);
56
- // Escapes on the FIRST asset — it must not run through both assets accumulating errors.
57
- expect(kernelCallMock).toHaveBeenCalledTimes(1);
58
- });
59
- it('still accumulates a genuine per-asset failure (not a session refusal) across every asset', async () => {
60
- kernelCallMock.mockRejectedValue(new Error('server validation failed'));
61
- await expect(runMigrateSetup({})).rejects.toThrow('migrate:setup completed with 2 error(s)');
62
- expect(kernelCallMock).toHaveBeenCalledTimes(2);
63
- });
64
- });
65
- //# sourceMappingURL=migrate-setup-session-refusal.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-setup-session-refusal.test.js","sourceRoot":"","sources":["../../src/__tests__/migrate-setup-session-refusal.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=setup-ingest.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup-ingest.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/setup-ingest.test.ts"],"names":[],"mappings":""}
@@ -1,71 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
- const kernelCallMock = vi.fn();
3
- const trackEventMock = vi.fn();
4
- const { fileContents } = vi.hoisted(() => ({
5
- fileContents: {},
6
- }));
7
- vi.mock('node:fs', () => ({
8
- existsSync: vi.fn((path) => path in fileContents),
9
- readFileSync: vi.fn((path) => fileContents[path]),
10
- }));
11
- vi.mock('../lib/client.js', () => ({
12
- kernelCall: (...args) => kernelCallMock(...args),
13
- }));
14
- vi.mock('../lib/session.js', () => ({
15
- readSession: vi.fn(() => ({
16
- sessionId: 'sess-1',
17
- workspaceId: 'workspace-1',
18
- workspaceName: 'Test Workspace',
19
- startedAt: new Date(0).toISOString(),
20
- entriesCaptured: [],
21
- })),
22
- }));
23
- vi.mock('../lib/runner.js', () => ({
24
- isJsonMode: vi.fn(() => false),
25
- }));
26
- vi.mock('../lib/telemetry.js', () => ({
27
- trackEvent: (...args) => trackEventMock(...args),
28
- }));
29
- import { runSetupIngest } from '../commands/setup-ingest.js';
30
- describe('runSetupIngest', () => {
31
- let cwdSpy;
32
- beforeEach(() => {
33
- vi.clearAllMocks();
34
- Object.keys(fileContents).forEach((key) => delete fileContents[key]);
35
- cwdSpy = vi.spyOn(process, 'cwd').mockReturnValue('/repo');
36
- });
37
- afterEach(() => {
38
- cwdSpy.mockRestore();
39
- });
40
- it('rejects bundle assets before calling generic setup ingest even under a skills directory', async () => {
41
- fileContents['/repo/skills/bundle.md'] = `---
42
- name: Demo Bundle
43
- assetKind: bundle
44
- ---
45
- # Demo Bundle
46
- `;
47
- await expect(runSetupIngest('skills/bundle.md')).rejects.toThrow('Bundle assets must be committed via the UI');
48
- expect(kernelCallMock).not.toHaveBeenCalled();
49
- expect(trackEventMock).toHaveBeenCalledWith('setup.bundle.commit.failed', {
50
- reason: 'bundle_cli_not_supported',
51
- path: '/repo/skills/bundle.md',
52
- });
53
- });
54
- it('forwards frontmatter id to setup.ingestSetupAsset', async () => {
55
- kernelCallMock.mockResolvedValue({ action: 'created', entryId: 'SETUP-SKILL-FM' });
56
- fileContents['/repo/.productbrain/skills/local.md'] = `---
57
- id: SETUP-SKILL-FM
58
- name: Local
59
- ---
60
- # Local
61
- `;
62
- await runSetupIngest('.productbrain/skills/local.md');
63
- expect(kernelCallMock).toHaveBeenCalledWith('setup.ingestSetupAsset', expect.objectContaining({
64
- entryId: 'SETUP-SKILL-LOCAL',
65
- frontmatterId: 'SETUP-SKILL-FM',
66
- name: 'Local',
67
- assetKind: 'skill',
68
- }));
69
- });
70
- });
71
- //# sourceMappingURL=setup-ingest.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup-ingest.test.js","sourceRoot":"","sources":["../../src/__tests__/setup-ingest.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC/B,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAE/B,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,YAAY,EAAE,EAA4B;CAC3C,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC;IACzD,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;CAC1D,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,UAAU,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;CAC5D,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACxB,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,aAAa;QAC1B,aAAa,EAAE,gBAAgB;QAC/B,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QACpC,eAAe,EAAE,EAAE;KACpB,CAAC,CAAC;CACJ,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;CAC/B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,UAAU,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;CAC5D,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,MAAmC,CAAC;IAExC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACvG,YAAY,CAAC,wBAAwB,CAAC,GAAG;;;;;CAK5C,CAAC;QAEE,MAAM,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;QAC/G,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,4BAA4B,EAAE;YACxE,MAAM,EAAE,0BAA0B;YAClC,IAAI,EAAE,wBAAwB;SAC/B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,cAAc,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACnF,YAAY,CAAC,qCAAqC,CAAC,GAAG;;;;;CAKzD,CAAC;QAEE,MAAM,cAAc,CAAC,+BAA+B,CAAC,CAAC;QAEtD,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,MAAM,CAAC,gBAAgB,CAAC;YAC5F,OAAO,EAAE,mBAAmB;YAC5B,aAAa,EAAE,gBAAgB;YAC/B,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,OAAO;SACnB,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,14 +0,0 @@
1
- /**
2
- * WP-336 E2 — setup-resolver contract tests.
3
- *
4
- * Three test groups:
5
- * 1. getSetupMode() — reads PB_SETUP_MODE env var correctly
6
- * 2. local mode — resolveSetupAssets returns assets from .productbrain/
7
- * 3. chain mode — resolveSetupAssets calls kernelCall with the right args
8
- *
9
- * Done-when coverage:
10
- * - WP-336 #3: local mode returns same asset names as what's in .productbrain/
11
- * - WP-336 #2: chain mode calls kernelCall('setup.getActiveSurface', {...})
12
- */
13
- export {};
14
- //# sourceMappingURL=setup-resolver.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup-resolver.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/setup-resolver.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -1,228 +0,0 @@
1
- /**
2
- * WP-336 E2 — setup-resolver contract tests.
3
- *
4
- * Three test groups:
5
- * 1. getSetupMode() — reads PB_SETUP_MODE env var correctly
6
- * 2. local mode — resolveSetupAssets returns assets from .productbrain/
7
- * 3. chain mode — resolveSetupAssets calls kernelCall with the right args
8
- *
9
- * Done-when coverage:
10
- * - WP-336 #3: local mode returns same asset names as what's in .productbrain/
11
- * - WP-336 #2: chain mode calls kernelCall('setup.getActiveSurface', {...})
12
- */
13
- import { beforeEach, afterEach, describe, expect, it, vi } from 'vitest';
14
- import { join } from 'path';
15
- // ── VFS (virtual filesystem) ──────────────────────────────────────────────────
16
- // Declared with vi.hoisted so the mock factory can reference them.
17
- const { vfs } = vi.hoisted(() => ({
18
- vfs: {},
19
- }));
20
- vi.mock('fs', () => ({
21
- existsSync: vi.fn((p) => {
22
- // A path "exists" if it's directly in the VFS (file) or is a directory prefix of any VFS key.
23
- if (p in vfs)
24
- return true;
25
- const prefix = p.endsWith('/') ? p : p + '/';
26
- return Object.keys(vfs).some((k) => k.startsWith(prefix));
27
- }),
28
- readdirSync: vi.fn((p) => {
29
- // Return the basenames of direct children under <p> (no sub-directories).
30
- const prefix = p.endsWith('/') ? p : p + '/';
31
- const keys = Object.keys(vfs).filter((k) => k.startsWith(prefix) && !k.slice(prefix.length).includes('/'));
32
- return keys.map((k) => k.slice(prefix.length));
33
- }),
34
- readFileSync: vi.fn((p, _enc) => {
35
- if (p in vfs)
36
- return vfs[p];
37
- throw Object.assign(new Error(`ENOENT: no such file '${p}'`), { code: 'ENOENT' });
38
- }),
39
- }));
40
- // ── Module under test ─────────────────────────────────────────────────────────
41
- import { getSetupMode, resolveSetupAssets } from '../commands/setup-resolver.js';
42
- // ── Helpers ───────────────────────────────────────────────────────────────────
43
- const MOCK_CWD = '/tmp/resolver-test';
44
- const PB_DIR = join(MOCK_CWD, '.productbrain');
45
- const SKILLS_DIR = join(PB_DIR, 'skills');
46
- const RULES_DIR = join(PB_DIR, 'rules');
47
- /** Populate VFS with a fake skill file. */
48
- function seedSkill(name, body) {
49
- vfs[join(SKILLS_DIR, `${name}.md`)] = body;
50
- }
51
- /** Populate VFS with a fake rule file. */
52
- function seedRule(name, body) {
53
- vfs[join(RULES_DIR, `${name}.md`)] = body;
54
- }
55
- /** No-op kernelCall stub (used when we don't expect it to be called). */
56
- const noopKernel = vi.fn();
57
- // ── Tests ─────────────────────────────────────────────────────────────────────
58
- describe('getSetupMode()', () => {
59
- const originalEnv = process.env.PB_SETUP_MODE;
60
- afterEach(() => {
61
- if (originalEnv === undefined) {
62
- delete process.env.PB_SETUP_MODE;
63
- }
64
- else {
65
- process.env.PB_SETUP_MODE = originalEnv;
66
- }
67
- });
68
- it('returns "local" when PB_SETUP_MODE is unset', () => {
69
- delete process.env.PB_SETUP_MODE;
70
- expect(getSetupMode()).toBe('local');
71
- });
72
- it('returns "local" when PB_SETUP_MODE=local', () => {
73
- process.env.PB_SETUP_MODE = 'local';
74
- expect(getSetupMode()).toBe('local');
75
- });
76
- it('returns "chain" when PB_SETUP_MODE=chain', () => {
77
- process.env.PB_SETUP_MODE = 'chain';
78
- expect(getSetupMode()).toBe('chain');
79
- });
80
- it('returns "local" for unknown values (fail-open)', () => {
81
- process.env.PB_SETUP_MODE = 'unknown-value';
82
- expect(getSetupMode()).toBe('local');
83
- });
84
- });
85
- describe('resolveSetupAssets — local mode', () => {
86
- beforeEach(() => {
87
- Object.keys(vfs).forEach((k) => delete vfs[k]);
88
- // Reset call counts only — do NOT clearAllMocks() as that wipes fs mock implementations
89
- noopKernel.mockClear();
90
- });
91
- it('returns an empty array when .productbrain/ has no skills or rules', async () => {
92
- // existsSync returns false for all paths (vfs is empty)
93
- const assets = await resolveSetupAssets('local', noopKernel, MOCK_CWD);
94
- expect(assets).toEqual([]);
95
- expect(noopKernel).not.toHaveBeenCalled();
96
- });
97
- it('returns skill assets from .productbrain/skills/', async () => {
98
- seedSkill('triage', '# Triage\nClassify and route work.');
99
- seedSkill('review', '# Review\nFive-path trace.');
100
- const assets = await resolveSetupAssets('local', noopKernel, MOCK_CWD);
101
- const skillAssets = assets.filter((a) => a.assetKind === 'skill');
102
- const skillNames = skillAssets.map((a) => a.displayName);
103
- expect(skillNames).toContain('triage');
104
- expect(skillNames).toContain('review');
105
- expect(noopKernel).not.toHaveBeenCalled();
106
- });
107
- it('returns rule assets from .productbrain/rules/', async () => {
108
- seedRule('git-workflow', '# Git Workflow\nTwo-track development.');
109
- const assets = await resolveSetupAssets('local', noopKernel, MOCK_CWD);
110
- const ruleAssets = assets.filter((a) => a.assetKind === 'rule');
111
- expect(ruleAssets).toHaveLength(1);
112
- expect(ruleAssets[0].displayName).toBe('git-workflow');
113
- expect(ruleAssets[0].assetKind).toBe('rule');
114
- expect(ruleAssets[0].source).toBe('authored');
115
- });
116
- it('strips frontmatter from skill body', async () => {
117
- seedSkill('commit', '---\nname: commit\ndescription: Commit skill\n---\n# Commit\nVerify and push.');
118
- const assets = await resolveSetupAssets('local', noopKernel, MOCK_CWD);
119
- const commitSkill = assets.find((a) => a.displayName === 'commit');
120
- expect(commitSkill).toBeDefined();
121
- // Body should not include the frontmatter block
122
- expect(commitSkill.body).not.toContain('description: Commit skill');
123
- expect(commitSkill.body).toContain('# Commit');
124
- });
125
- it('returns skills + rules together', async () => {
126
- seedSkill('triage', '# Triage');
127
- seedRule('git-workflow', '# Git Workflow');
128
- const assets = await resolveSetupAssets('local', noopKernel, MOCK_CWD);
129
- const kinds = assets.map((a) => a.assetKind);
130
- expect(kinds).toContain('skill');
131
- expect(kinds).toContain('rule');
132
- });
133
- it('contract test — local asset displayNames match .productbrain/ file basenames', async () => {
134
- // WP-336 done-when #3: local mode produces asset names identical to what's in .productbrain/
135
- const expectedSkills = ['diagnostic-fix', 'handoff', 'preflight'];
136
- const expectedRules = ['chain-policies', 'git-workflow', 'architecture-boundaries'];
137
- for (const name of expectedSkills)
138
- seedSkill(name, `# ${name}`);
139
- for (const name of expectedRules)
140
- seedRule(name, `# ${name}`);
141
- const assets = await resolveSetupAssets('local', noopKernel, MOCK_CWD);
142
- const assetSkillNames = assets
143
- .filter((a) => a.assetKind === 'skill')
144
- .map((a) => a.displayName);
145
- const assetRuleNames = assets
146
- .filter((a) => a.assetKind === 'rule')
147
- .map((a) => a.displayName);
148
- for (const name of expectedSkills)
149
- expect(assetSkillNames).toContain(name);
150
- for (const name of expectedRules)
151
- expect(assetRuleNames).toContain(name);
152
- });
153
- });
154
- describe('resolveSetupAssets — chain mode', () => {
155
- beforeEach(() => {
156
- Object.keys(vfs).forEach((k) => delete vfs[k]);
157
- // Reset call counts only — do NOT clearAllMocks() as that wipes fs mock implementations
158
- });
159
- it('calls kernelCall with "setup.getActiveSurface" (WP-336 done-when #2)', async () => {
160
- const mockKernel = vi.fn().mockResolvedValue([]);
161
- await resolveSetupAssets('chain', mockKernel, MOCK_CWD);
162
- expect(mockKernel).toHaveBeenCalledWith('setup.getActiveSurface', expect.any(Object));
163
- });
164
- it('does NOT read from .productbrain/ in chain mode', async () => {
165
- seedSkill('triage', '# Triage');
166
- const mockKernel = vi.fn().mockResolvedValue([]);
167
- // Track readFileSync calls from this point forward
168
- const { readFileSync } = await import('fs');
169
- readFileSync.mockClear();
170
- await resolveSetupAssets('chain', mockKernel, MOCK_CWD);
171
- // readFileSync should not be called in chain mode (only kernelCall)
172
- expect(readFileSync).not.toHaveBeenCalled();
173
- });
174
- it('maps chain results to SetupAsset shape', async () => {
175
- const chainResult = [
176
- {
177
- assetId: 'SETUP-SKILL-TRIAGE',
178
- assetKind: 'skill',
179
- displayName: 'Triage',
180
- shortDescription: 'Classify and route work.',
181
- body: '# Triage\nClassify and route.',
182
- version: 1,
183
- source: 'seeded',
184
- },
185
- {
186
- assetId: 'SETUP-RULE-GIT',
187
- assetKind: 'rule',
188
- displayName: 'Git Workflow',
189
- shortDescription: 'Two-track development.',
190
- body: '# Git Workflow',
191
- version: 1,
192
- source: 'seeded',
193
- },
194
- ];
195
- const mockKernel = vi.fn().mockResolvedValue(chainResult);
196
- const assets = await resolveSetupAssets('chain', mockKernel, MOCK_CWD);
197
- expect(assets).toHaveLength(2);
198
- const [skill, rule] = assets;
199
- expect(skill.assetKind).toBe('skill');
200
- expect(skill.displayName).toBe('Triage');
201
- expect(skill.body).toContain('# Triage');
202
- expect(skill.source).toBe('seeded');
203
- expect(rule.assetKind).toBe('rule');
204
- expect(rule.displayName).toBe('Git Workflow');
205
- });
206
- it('defaults unknown assetKind to "skill"', async () => {
207
- const chainResult = [
208
- {
209
- assetId: 'SETUP-X-UNKNOWN',
210
- assetKind: 'unknown-future-type',
211
- displayName: 'Mystery Asset',
212
- shortDescription: '',
213
- body: '# Mystery',
214
- version: 1,
215
- source: 'seeded',
216
- },
217
- ];
218
- const mockKernel = vi.fn().mockResolvedValue(chainResult);
219
- const assets = await resolveSetupAssets('chain', mockKernel, MOCK_CWD);
220
- expect(assets[0].assetKind).toBe('skill');
221
- });
222
- it('calls kernelCall with empty args object (gateway injects personId server-side)', async () => {
223
- const mockKernel = vi.fn().mockResolvedValue([]);
224
- await resolveSetupAssets('chain', mockKernel, MOCK_CWD);
225
- expect(mockKernel).toHaveBeenCalledWith('setup.getActiveSurface', {});
226
- });
227
- });
228
- //# sourceMappingURL=setup-resolver.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup-resolver.test.js","sourceRoot":"","sources":["../../src/__tests__/setup-resolver.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=setupShFallbackWarning.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setupShFallbackWarning.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/setupShFallbackWarning.test.ts"],"names":[],"mappings":""}
@@ -1,15 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { readFileSync } from 'fs';
3
- import { resolve } from 'path';
4
- describe('setup.sh pin-skip warning', () => {
5
- const src = readFileSync(resolve(__dirname, '../../../../.superset/setup.sh'), 'utf8');
6
- const match = src.match(/fallback_warning="([^"]+)"/);
7
- it('tells the operator pb will refuse, and names the pin repair', () => {
8
- expect(match).not.toBeNull();
9
- const warning = match[1];
10
- expect(warning).not.toMatch(/GLOBAL active profile/);
11
- expect(warning).toMatch(/refus/i);
12
- expect(warning).toContain('pb profile use --local');
13
- });
14
- });
15
- //# sourceMappingURL=setupShFallbackWarning.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setupShFallbackWarning.test.js","sourceRoot":"","sources":["../../src/__tests__/setupShFallbackWarning.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,gCAAgC,CAAC,EAAE,MAAM,CAAC,CAAC;IACvF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAEtD,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAM,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * WP-433 S5 — `formatDetectSurfacesSummary` pure unit tests.
3
- *
4
- * Per INS-1420: runSetupDetectSurfaces makes live server calls via getConfigSafe()
5
- * and kernelCall. These tests ONLY exercise the pure formatter on hand-crafted
6
- * SetupDetectSurfacesResult objects — runSetupDetectSurfaces is never called.
7
- *
8
- * Test cases:
9
- * 1. Bare-repo (zero detected, zero existing) → appends locked guidance question
10
- * 2. Normal detect (new surfaces detected) → does NOT append
11
- * 3. Idempotent re-run (existing surfaces, zero new) → does NOT append
12
- * 4. Server-stamp-error case → surfaces error in summary, does NOT append extra question
13
- */
14
- export {};
15
- //# sourceMappingURL=setup-detect-surfaces.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup-detect-surfaces.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/setup-detect-surfaces.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -1,149 +0,0 @@
1
- /**
2
- * WP-433 S5 — `formatDetectSurfacesSummary` pure unit tests.
3
- *
4
- * Per INS-1420: runSetupDetectSurfaces makes live server calls via getConfigSafe()
5
- * and kernelCall. These tests ONLY exercise the pure formatter on hand-crafted
6
- * SetupDetectSurfacesResult objects — runSetupDetectSurfaces is never called.
7
- *
8
- * Test cases:
9
- * 1. Bare-repo (zero detected, zero existing) → appends locked guidance question
10
- * 2. Normal detect (new surfaces detected) → does NOT append
11
- * 3. Idempotent re-run (existing surfaces, zero new) → does NOT append
12
- * 4. Server-stamp-error case → surfaces error in summary, does NOT append extra question
13
- */
14
- import { describe, expect, it } from 'vitest';
15
- import { formatDetectSurfacesSummary, } from '../setup-detect-surfaces.js';
16
- const LOCKED_QUESTION = "I don't see Claude Code or Cursor — which AI tool do you use?";
17
- /** Helper: build a minimal SetupDetectSurfacesResult */
18
- function makeResult(overrides = {}) {
19
- return {
20
- detected: [],
21
- existing: [],
22
- newlyAdded: [],
23
- union: [],
24
- manifestUpdated: false,
25
- manifestPath: '/repo/.productbrain/manifest.json',
26
- serverStamp: null,
27
- serverStampError: null,
28
- ...overrides,
29
- };
30
- }
31
- describe('formatDetectSurfacesSummary — WP-433 S5 bare-repo guidance', () => {
32
- it('bare-repo (zero detected, zero existing) appends locked guidance question', () => {
33
- const result = makeResult({
34
- detected: [],
35
- existing: [],
36
- newlyAdded: [],
37
- union: [],
38
- manifestUpdated: false,
39
- });
40
- const summary = formatDetectSurfacesSummary(result);
41
- expect(summary).toContain(LOCKED_QUESTION);
42
- // Confirm the question is on a separate line
43
- expect(summary).toContain('\n' + LOCKED_QUESTION);
44
- });
45
- it('normal detect (new surfaces detected) does NOT append locked question', () => {
46
- const result = makeResult({
47
- detected: ['claude'],
48
- existing: [],
49
- newlyAdded: ['claude'],
50
- union: ['claude'],
51
- manifestUpdated: true,
52
- serverStamp: { stamped: true, surfaces: ['claude'] },
53
- });
54
- const summary = formatDetectSurfacesSummary(result);
55
- expect(summary).not.toContain(LOCKED_QUESTION);
56
- // Confirm surfaces are mentioned
57
- expect(summary).toContain('claude');
58
- });
59
- it('STD-235 remnant (zero detected, existing surfaces remain in manifest) does NOT append locked question', () => {
60
- // Marker dir deleted from disk; STD-235 forward-only keeps the surface in manifest.
61
- // Detected is empty but existing is not — guard must NOT trigger bare-repo guidance.
62
- const result = makeResult({
63
- detected: [],
64
- existing: ['claude'],
65
- newlyAdded: [],
66
- union: ['claude'],
67
- manifestUpdated: false,
68
- });
69
- const summary = formatDetectSurfacesSummary(result);
70
- expect(summary).not.toContain(LOCKED_QUESTION);
71
- expect(summary).toContain('Detected: none');
72
- expect(summary).toContain('Existing: claude');
73
- });
74
- it('idempotent re-run (existing surfaces, zero new detected) does NOT append locked question', () => {
75
- const result = makeResult({
76
- detected: ['claude'],
77
- existing: ['claude'],
78
- newlyAdded: [],
79
- union: ['claude'],
80
- manifestUpdated: false,
81
- serverStamp: { stamped: false, surfaces: ['claude'] },
82
- });
83
- const summary = formatDetectSurfacesSummary(result);
84
- expect(summary).not.toContain(LOCKED_QUESTION);
85
- // Existing should appear in summary
86
- expect(summary).toContain('claude');
87
- });
88
- it('server-stamp-error case surfaces the error and does NOT append the locked question', () => {
89
- // If detect-surfaces fails at the server stamp but DID find surfaces locally,
90
- // the error should appear but the bare-repo question should not.
91
- const result = makeResult({
92
- detected: ['cursor'],
93
- existing: [],
94
- newlyAdded: ['cursor'],
95
- union: ['cursor'],
96
- manifestUpdated: true,
97
- serverStamp: null,
98
- serverStampError: 'Network timeout connecting to workspace',
99
- });
100
- const summary = formatDetectSurfacesSummary(result);
101
- // Error is surfaced
102
- expect(summary).toContain('Server stamp failed: Network timeout connecting to workspace');
103
- // Bare-repo question is NOT appended (surfaces were found)
104
- expect(summary).not.toContain(LOCKED_QUESTION);
105
- });
106
- it('bare-repo with server-stamp-error (edge case: zero surfaces + server error) appends locked question', () => {
107
- // Zero detected + zero existing → bare-repo. Server stamp would not have been
108
- // called (union is empty), but if serverStampError somehow populated, the
109
- // bare-repo signal still dominates and the question should appear.
110
- const result = makeResult({
111
- detected: [],
112
- existing: [],
113
- newlyAdded: [],
114
- union: [],
115
- manifestUpdated: false,
116
- serverStamp: null,
117
- serverStampError: 'Config missing',
118
- });
119
- const summary = formatDetectSurfacesSummary(result);
120
- // Server stamp error is surfaced
121
- expect(summary).toContain('Server stamp failed: Config missing');
122
- // Bare-repo guidance still applies
123
- expect(summary).toContain(LOCKED_QUESTION);
124
- });
125
- it('summary has correct shape for bare-repo result', () => {
126
- const result = makeResult();
127
- const summary = formatDetectSurfacesSummary(result);
128
- // Base line before the question
129
- expect(summary).toMatch(/^Detected: none \(new: none\)\. Existing: none\. Manifest unchanged\./);
130
- });
131
- it('summary has correct shape for normal detect', () => {
132
- const result = makeResult({
133
- detected: ['claude', 'cursor'],
134
- existing: ['claude'],
135
- newlyAdded: ['cursor'],
136
- union: ['claude', 'cursor'],
137
- manifestUpdated: true,
138
- serverStamp: { stamped: true, surfaces: ['claude', 'cursor'] },
139
- });
140
- const summary = formatDetectSurfacesSummary(result);
141
- expect(summary).toContain('Detected: claude, cursor');
142
- expect(summary).toContain('new: cursor');
143
- expect(summary).toContain('Existing: claude');
144
- expect(summary).toContain('Manifest updated.');
145
- expect(summary).toContain('Server stamped.');
146
- expect(summary).not.toContain(LOCKED_QUESTION);
147
- });
148
- });
149
- //# sourceMappingURL=setup-detect-surfaces.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup-detect-surfaces.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/setup-detect-surfaces.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=setup-state.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup-state.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/setup-state.test.ts"],"names":[],"mappings":""}