@productbrain/cli 0.1.0-beta.9934 → 0.1.0-beta.9944

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 (55) hide show
  1. package/dist/__tests__/gateway-timeout-body-phase.test.js +3 -8
  2. package/dist/__tests__/gateway-timeout-body-phase.test.js.map +1 -1
  3. package/dist/__tests__/orient.test.js +1 -13
  4. package/dist/__tests__/orient.test.js.map +1 -1
  5. package/dist/__tests__/read-target-notice.test.js +3 -7
  6. package/dist/__tests__/read-target-notice.test.js.map +1 -1
  7. package/dist/commands/orient.d.ts +0 -4
  8. package/dist/commands/orient.d.ts.map +1 -1
  9. package/dist/commands/orient.js.map +1 -1
  10. package/dist/commands/outcome.d.ts +2 -2
  11. package/dist/commands/outcome.d.ts.map +1 -1
  12. package/dist/commands/questions.js +2 -2
  13. package/dist/commands/questions.js.map +1 -1
  14. package/dist/commands/questions.test.js +1 -1
  15. package/dist/formatters/orient.d.ts +2 -17
  16. package/dist/formatters/orient.d.ts.map +1 -1
  17. package/dist/formatters/orient.js +1 -16
  18. package/dist/formatters/orient.js.map +1 -1
  19. package/dist/formatters/orientDirection.d.ts +1 -23
  20. package/dist/formatters/orientDirection.d.ts.map +1 -1
  21. package/dist/formatters/orientDirection.js +2 -18
  22. package/dist/formatters/orientDirection.js.map +1 -1
  23. package/dist/formatters/orientDirection.test.js +0 -22
  24. package/dist/formatters/orientDirection.test.js.map +1 -1
  25. package/dist/formatters/questions.d.ts +1 -1
  26. package/dist/formatters/questions.js +2 -2
  27. package/dist/index.js +0 -2
  28. package/dist/index.js.map +1 -1
  29. package/dist/lib/client.d.ts +0 -15
  30. package/dist/lib/client.d.ts.map +1 -1
  31. package/dist/lib/client.js +0 -12
  32. package/dist/lib/client.js.map +1 -1
  33. package/dist/lib/workspaceNotice.d.ts +2 -2
  34. package/dist/lib/workspaceNotice.js +2 -2
  35. package/package.json +1 -1
  36. package/dist/commands/shape.d.ts +0 -16
  37. package/dist/commands/shape.d.ts.map +0 -1
  38. package/dist/commands/shape.js +0 -149
  39. package/dist/commands/shape.js.map +0 -1
  40. package/dist/commands/shape.test.d.ts +0 -2
  41. package/dist/commands/shape.test.d.ts.map +0 -1
  42. package/dist/commands/shape.test.js +0 -148
  43. package/dist/commands/shape.test.js.map +0 -1
  44. package/dist/formatters/orient.shapeAdvisorySummary.test.d.ts +0 -2
  45. package/dist/formatters/orient.shapeAdvisorySummary.test.d.ts.map +0 -1
  46. package/dist/formatters/orient.shapeAdvisorySummary.test.js +0 -59
  47. package/dist/formatters/orient.shapeAdvisorySummary.test.js.map +0 -1
  48. package/dist/formatters/shape.d.ts +0 -54
  49. package/dist/formatters/shape.d.ts.map +0 -1
  50. package/dist/formatters/shape.js +0 -97
  51. package/dist/formatters/shape.js.map +0 -1
  52. package/dist/formatters/shape.test.d.ts +0 -2
  53. package/dist/formatters/shape.test.d.ts.map +0 -1
  54. package/dist/formatters/shape.test.js +0 -80
  55. package/dist/formatters/shape.test.js.map +0 -1
@@ -1,149 +0,0 @@
1
- import { Command } from 'commander';
2
- import { getConfigOrGuide } from '../lib/config.js';
3
- import { kernelCall, kernelCallEnvelope, kernelCallWithSession } from '../lib/client.js';
4
- import { CLIError, ErrorCode } from '../lib/errors.js';
5
- import { runCliCommand } from '../lib/runner.js';
6
- import { readSession } from '../lib/session.js';
7
- import { formatShapeAdvisoriesList, formatShapeAdvisoryShow, formatShapeDispositionReceipt, } from '../formatters/shape.js';
8
- /**
9
- * `pb shape` — the disposition ledger surface (WP-559, Slice 2 of WP-557, TEN-2532).
10
- * Structurally mirrors packages/cli/src/commands/conflicts.ts: `list`/`show` are plain reads
11
- * (kernelCall, no session), `agree`/`dismiss` are workspace writes that are session-attributed
12
- * (kernelCallWithSession + a requireShapeSession-style gate) — same shape as conflicts'
13
- * list/resolve split. Identity for the write itself is gateway-derived
14
- * (workspaceId/personId/apiKeyId injection, `chain.dispositionShapeAdvisory`), never sessionId.
15
- */
16
- function requireShapeSession() {
17
- const session = readSession();
18
- if (!session) {
19
- throw new CLIError('No active session.', {
20
- code: ErrorCode.SESSION_REQUIRED,
21
- category: 'session',
22
- guidance: 'Run `pb session start` before dispositioning a shape advisory.',
23
- });
24
- }
25
- return session;
26
- }
27
- const LIST_DISPOSITIONS = ['pending', 'agreed', 'dismissed', 'expired'];
28
- const LIST_OUTCOMES = ['not_candidate', 'atomic', 'compound', 'unavailable'];
29
- export async function runShapeList(options) {
30
- if (options.disposition && !LIST_DISPOSITIONS.includes(options.disposition)) {
31
- throw new CLIError(`--disposition must be one of ${LIST_DISPOSITIONS.join(', ')} (got "${options.disposition}").`, {
32
- code: ErrorCode.VALIDATION_FAILED,
33
- category: 'validation',
34
- guidance: 'Usage: pb shape list [--disposition <disposition>] [--outcome <outcome>]',
35
- });
36
- }
37
- if (options.outcome && !LIST_OUTCOMES.includes(options.outcome)) {
38
- throw new CLIError(`--outcome must be one of ${LIST_OUTCOMES.join(', ')} (got "${options.outcome}").`, {
39
- code: ErrorCode.VALIDATION_FAILED,
40
- category: 'validation',
41
- guidance: 'Usage: pb shape list [--disposition <disposition>] [--outcome <outcome>]',
42
- });
43
- }
44
- const config = await getConfigOrGuide(() => runShapeList(options));
45
- if (!config)
46
- return;
47
- // Review round 4 (Codex P2, mirrors the MCP `shape` tool's own S4 fix): a bare `pb shape
48
- // list` — the normal first call of the documented list/show/agree flow — requests every
49
- // ledger outcome; the backend returns only the newest 50 subjects, so recent
50
- // not_candidate/atomic/unavailable rows can push an older PENDING COMPOUND row (the only
51
- // outcome the disposition mutation can actually act on) out of the page. Default a
52
- // fully-unfiltered call to the actionable set; any explicitly requested --disposition/--outcome
53
- // is honored as-is, with no override.
54
- const noFiltersGiven = options.disposition === undefined && options.outcome === undefined;
55
- const effectiveDisposition = options.disposition ?? (noFiltersGiven ? 'pending' : undefined);
56
- const effectiveOutcome = options.outcome ?? (noFiltersGiven ? 'compound' : undefined);
57
- // WP-571 sweep fix (P1 review finding on PR #520): `chain.shapeAdvisories` was ALREADY
58
- // live (auto-deployed/published on every merge to main) returning a BARE ARRAY — both as
59
- // the HTTP wire `data` AND as this command's own `--json` stdout shape (a separate,
60
- // ALSO-already-published contract scripts/agents may pipe). Both stay a bare array.
61
- // The LIST_SCAN_CAP truncation signal rides `_meta.truncated` on the wire
62
- // (convex/lib/envelopeContract.ts) and is surfaced ONLY in pretty/TTY mode here via the
63
- // closure variable below — kernelCallEnvelope (not kernelCall, which strips to `.data`
64
- // only) is needed to read `_meta` back.
65
- let truncated = false;
66
- await runCliCommand({
67
- fn: async () => {
68
- const envelope = await kernelCallEnvelope('chain.shapeAdvisories', {
69
- ...(effectiveDisposition ? { disposition: effectiveDisposition } : {}),
70
- ...(effectiveOutcome ? { outcome: effectiveOutcome } : {}),
71
- ...(options.limit ? { limit: Number(options.limit) } : {}),
72
- });
73
- truncated = Boolean(envelope._meta?.truncated);
74
- return envelope.data;
75
- },
76
- formatPretty: (value) => formatShapeAdvisoriesList(value, undefined, truncated),
77
- });
78
- }
79
- export async function runShapeShow(rowId) {
80
- const config = await getConfigOrGuide(() => runShapeShow(rowId));
81
- if (!config)
82
- return;
83
- await runCliCommand({
84
- fn: async () => {
85
- const value = await kernelCall('chain.showShapeAdvisory', { rowId });
86
- // Review round 1 (Codex P2): a missing/cross-workspace row must fail the command (exit
87
- // non-zero), not print "not found" and exit 0 — matches the MCP show action's structured
88
- // failure, and lets scripts/agents distinguish "found" from "doesn't exist" reliably.
89
- if (!value) {
90
- throw new CLIError(`Advisory '${rowId}' not found (missing, or belongs to a different workspace).`, {
91
- code: ErrorCode.VALIDATION_FAILED,
92
- category: 'validation',
93
- guidance: 'Use `pb shape list` to find valid ids.',
94
- });
95
- }
96
- return value;
97
- },
98
- formatPretty: (value) => formatShapeAdvisoryShow(value),
99
- });
100
- }
101
- const DISPOSITION_ALIASES = {
102
- agree: 'agreed',
103
- dismiss: 'dismissed',
104
- };
105
- async function runShapeDisposition(verb, rowId, options) {
106
- const config = await getConfigOrGuide(() => runShapeDisposition(verb, rowId, options));
107
- if (!config)
108
- return;
109
- // Client-side session gate only (matches requireConflictsSession's discipline) — identity
110
- // for the write itself is gateway-derived, never sessionId.
111
- requireShapeSession();
112
- const disposition = DISPOSITION_ALIASES[verb];
113
- await runCliCommand({
114
- fn: () => kernelCallWithSession('chain.dispositionShapeAdvisory', {
115
- rowId,
116
- disposition,
117
- ...(options.reason ? { dispositionReason: options.reason } : {}),
118
- }),
119
- formatPretty: (value) => formatShapeDispositionReceipt(value),
120
- });
121
- }
122
- export async function runShapeAgree(rowId, options) {
123
- await runShapeDisposition('agree', rowId, options);
124
- }
125
- export async function runShapeDismiss(rowId, options) {
126
- await runShapeDisposition('dismiss', rowId, options);
127
- }
128
- export function createShapeCommand() {
129
- const command = new Command('shape').description('Review and disposition shape-advisory (single-concern) suggestions (WP-559, TEN-2532)');
130
- command.command('list')
131
- .description('List shape advisories for this workspace, latest per subject (no filters defaults to disposition:pending + outcome:compound)')
132
- .option('--disposition <disposition>', `Filter by disposition (${LIST_DISPOSITIONS.join('|')}); omitting both filters defaults to pending`)
133
- .option('--outcome <outcome>', `Filter by outcome (${LIST_OUTCOMES.join('|')}); omitting both filters defaults to compound`)
134
- .option('--limit <limit>', 'Max rows to return (default 50, max 200)')
135
- .action(runShapeList);
136
- command.command('show <id>')
137
- .description('Show one shape advisory by id')
138
- .action(runShapeShow);
139
- command.command('agree <id>')
140
- .description('Agree with a compound advisory\'s split verdict')
141
- .option('--reason <reason>', 'Optional reason (capped at 1000 chars)')
142
- .action(runShapeAgree);
143
- command.command('dismiss <id>')
144
- .description('Dismiss a compound advisory\'s split verdict')
145
- .option('--reason <reason>', 'Optional reason (capped at 1000 chars)')
146
- .action(runShapeDismiss);
147
- return command;
148
- }
149
- //# sourceMappingURL=shape.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shape.js","sourceRoot":"","sources":["../../src/commands/shape.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=shape.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shape.test.d.ts","sourceRoot":"","sources":["../../src/commands/shape.test.ts"],"names":[],"mappings":""}
@@ -1,148 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- const { getConfigOrGuide, kernelCall, kernelCallEnvelope, kernelCallWithSession, readSession, runCliCommand } = vi.hoisted(() => ({
3
- getConfigOrGuide: vi.fn(),
4
- kernelCall: vi.fn(),
5
- // WP-571 sweep fix (P1, PR #520): runShapeList now reads chain.shapeAdvisories via
6
- // kernelCallEnvelope (not kernelCall) so it can see `_meta.truncated` without changing
7
- // the route's published bare-array `data` shape.
8
- kernelCallEnvelope: vi.fn(),
9
- kernelCallWithSession: vi.fn(),
10
- readSession: vi.fn(),
11
- runCliCommand: vi.fn(async ({ fn }) => fn()),
12
- }));
13
- vi.mock('../lib/config.js', () => ({ getConfigOrGuide }));
14
- vi.mock('../lib/client.js', () => ({ kernelCall, kernelCallEnvelope, kernelCallWithSession }));
15
- vi.mock('../lib/runner.js', () => ({ runCliCommand }));
16
- vi.mock('../lib/session.js', () => ({ readSession }));
17
- import { createShapeCommand, runShapeList, runShapeShow, runShapeAgree, runShapeDismiss } from './shape.js';
18
- describe('pb shape command surface (WP-559, TEN-2532)', () => {
19
- beforeEach(() => {
20
- vi.clearAllMocks();
21
- getConfigOrGuide.mockResolvedValue({ apiKey: 'pb_sk_test', siteUrl: 'https://example.test' });
22
- kernelCall.mockResolvedValue([]);
23
- kernelCallEnvelope.mockResolvedValue({ data: [], _meta: { truncated: false } });
24
- kernelCallWithSession.mockResolvedValue({ ok: true });
25
- readSession.mockReturnValue(null);
26
- });
27
- it('exposes list, show, agree, and dismiss in help metadata', () => {
28
- const command = createShapeCommand();
29
- expect(command.commands.map((item) => item.name())).toEqual(['list', 'show', 'agree', 'dismiss']);
30
- });
31
- it('routes list/show/agree/dismiss through the guided config flow (Codex P2 pattern) — an unconfigured caller gets the guided setup, not a raw AUTH_MISSING', async () => {
32
- readSession.mockReturnValue({ sessionId: 'session-1' });
33
- getConfigOrGuide.mockResolvedValueOnce(null);
34
- await runShapeList({});
35
- expect(kernelCall).not.toHaveBeenCalled();
36
- getConfigOrGuide.mockResolvedValueOnce(null);
37
- await runShapeShow('row-1');
38
- expect(kernelCall).not.toHaveBeenCalled();
39
- getConfigOrGuide.mockResolvedValueOnce(null);
40
- await runShapeAgree('row-1', {});
41
- expect(kernelCallWithSession).not.toHaveBeenCalled();
42
- getConfigOrGuide.mockResolvedValueOnce(null);
43
- await runShapeDismiss('row-1', {});
44
- expect(kernelCallWithSession).not.toHaveBeenCalled();
45
- });
46
- it('lists shape advisories via a plain read — no session required', async () => {
47
- await runShapeList({});
48
- expect(kernelCallEnvelope).toHaveBeenCalledWith('chain.shapeAdvisories', { disposition: 'pending', outcome: 'compound' });
49
- expect(kernelCallWithSession).not.toHaveBeenCalled();
50
- });
51
- it('forwards --disposition/--outcome/--limit filters', async () => {
52
- await runShapeList({ disposition: 'pending', outcome: 'compound', limit: '10' });
53
- expect(kernelCallEnvelope).toHaveBeenCalledWith('chain.shapeAdvisories', {
54
- disposition: 'pending', outcome: 'compound', limit: 10,
55
- });
56
- });
57
- it('review round 4 (Codex P2 fix): a no-filter call defaults to the actionable set (disposition:pending, outcome:compound)', async () => {
58
- await runShapeList({});
59
- expect(kernelCallEnvelope).toHaveBeenCalledWith('chain.shapeAdvisories', { disposition: 'pending', outcome: 'compound' });
60
- });
61
- it('review round 4 (Codex P2 fix): an explicit --disposition-only filter is honored as-is, without the --outcome default applied', async () => {
62
- await runShapeList({ disposition: 'agreed' });
63
- expect(kernelCallEnvelope).toHaveBeenCalledWith('chain.shapeAdvisories', { disposition: 'agreed' });
64
- });
65
- it('review round 4 (Codex P2 fix): an explicit --outcome-only filter is honored as-is, without the --disposition default applied', async () => {
66
- await runShapeList({ outcome: 'not_candidate' });
67
- expect(kernelCallEnvelope).toHaveBeenCalledWith('chain.shapeAdvisories', { outcome: 'not_candidate' });
68
- });
69
- // WP-571 sweep, P1 revision (PR #520): chain.shapeAdvisories' `data` stays a bare array
70
- // (already-published/deployed shape) — `truncated` now rides `_meta`, read via
71
- // kernelCallEnvelope, and is still surfaced in pretty/TTY output via a closure variable.
72
- it('surfaces a truncation note in pretty output when _meta.truncated is true', async () => {
73
- kernelCallEnvelope.mockResolvedValue({
74
- data: [{ id: 'row-1', outcome: 'compound', disposition: 'pending', subjectEntryId: 'INB-1', collectionSlug: 'inbox', source: 'cli', at: Date.now() }],
75
- _meta: { truncated: true },
76
- });
77
- await runShapeList({});
78
- expect(runCliCommand).toHaveBeenCalled();
79
- const options = runCliCommand.mock.calls[0][0];
80
- const rendered = options.formatPretty([{ id: 'row-1', outcome: 'compound', disposition: 'pending', subjectEntryId: 'INB-1', collectionSlug: 'inbox', source: 'cli', at: Date.now() }]);
81
- expect(rendered).toMatch(/incomplete/i);
82
- });
83
- it('rejects an unsupported --disposition value client-side before calling the gateway', async () => {
84
- await expect(runShapeList({ disposition: 'bogus' })).rejects.toThrow(/pending|agreed|dismissed|expired/);
85
- expect(kernelCallEnvelope).not.toHaveBeenCalled();
86
- });
87
- it('rejects an unsupported --outcome value client-side before calling the gateway', async () => {
88
- await expect(runShapeList({ outcome: 'bogus' })).rejects.toThrow(/not_candidate|atomic|compound|unavailable/);
89
- expect(kernelCallEnvelope).not.toHaveBeenCalled();
90
- });
91
- it('shows a single advisory via a plain read — no session required', async () => {
92
- await runShapeShow('row-1');
93
- expect(kernelCall).toHaveBeenCalledWith('chain.showShapeAdvisory', { rowId: 'row-1' });
94
- expect(kernelCallWithSession).not.toHaveBeenCalled();
95
- });
96
- it('review round 1 (Codex P2 fix): a missing/cross-workspace advisory FAILS the command (throws) rather than printing "not found" and exiting 0', async () => {
97
- kernelCall.mockResolvedValueOnce(null);
98
- await expect(runShapeShow('row-missing')).rejects.toThrow(/not found/i);
99
- });
100
- it('requires an active session before agreeing (workspace write, session-attributed)', async () => {
101
- await expect(runShapeAgree('row-1', {})).rejects.toMatchObject({ code: 'SESSION_REQUIRED' });
102
- expect(kernelCallWithSession).not.toHaveBeenCalled();
103
- });
104
- it('requires an active session before dismissing (workspace write, session-attributed)', async () => {
105
- await expect(runShapeDismiss('row-1', {})).rejects.toMatchObject({ code: 'SESSION_REQUIRED' });
106
- expect(kernelCallWithSession).not.toHaveBeenCalled();
107
- });
108
- it('agrees, forwarding disposition:agreed — never forwards sessionId as a wire arg (dispositionShapeAdvisory declares no such field; kernelCallWithSession touches the session internally via readSession())', async () => {
109
- readSession.mockReturnValue({ sessionId: 'session-1' });
110
- await runShapeAgree('row-1', {});
111
- expect(kernelCallWithSession).toHaveBeenCalledWith('chain.dispositionShapeAdvisory', {
112
- rowId: 'row-1', disposition: 'agreed',
113
- });
114
- });
115
- it('dismisses, forwarding disposition:dismissed', async () => {
116
- readSession.mockReturnValue({ sessionId: 'session-1' });
117
- await runShapeDismiss('row-1', {});
118
- expect(kernelCallWithSession).toHaveBeenCalledWith('chain.dispositionShapeAdvisory', {
119
- rowId: 'row-1', disposition: 'dismissed',
120
- });
121
- });
122
- it('forwards an optional --reason on agree/dismiss', async () => {
123
- readSession.mockReturnValue({ sessionId: 'session-1' });
124
- await runShapeAgree('row-1', { reason: 'looks right' });
125
- expect(kernelCallWithSession).toHaveBeenCalledWith('chain.dispositionShapeAdvisory', {
126
- rowId: 'row-1', disposition: 'agreed', dispositionReason: 'looks right',
127
- });
128
- });
129
- it('parses the Commander agree surface and forwards the mapped disposition', async () => {
130
- readSession.mockReturnValue({ sessionId: 'session-1' });
131
- const command = createShapeCommand();
132
- command.exitOverride();
133
- await command.parseAsync(['agree', 'row-42', '--reason', 'yep'], { from: 'user' });
134
- expect(kernelCallWithSession).toHaveBeenCalledWith('chain.dispositionShapeAdvisory', {
135
- rowId: 'row-42', disposition: 'agreed', dispositionReason: 'yep',
136
- });
137
- });
138
- it('parses the Commander dismiss surface and forwards the mapped disposition', async () => {
139
- readSession.mockReturnValue({ sessionId: 'session-1' });
140
- const command = createShapeCommand();
141
- command.exitOverride();
142
- await command.parseAsync(['dismiss', 'row-42'], { from: 'user' });
143
- expect(kernelCallWithSession).toHaveBeenCalledWith('chain.dispositionShapeAdvisory', {
144
- rowId: 'row-42', disposition: 'dismissed',
145
- });
146
- });
147
- });
148
- //# sourceMappingURL=shape.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shape.test.js","sourceRoot":"","sources":["../../src/commands/shape.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=orient.shapeAdvisorySummary.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orient.shapeAdvisorySummary.test.d.ts","sourceRoot":"","sources":["../../src/formatters/orient.shapeAdvisorySummary.test.ts"],"names":[],"mappings":""}
@@ -1,59 +0,0 @@
1
- /**
2
- * WP-557 occupancy (done-audit finding): `pb orient` (human output) never printed the
3
- * shape-advisory scoreboard line — this file had 0 hits on `shapeAdvisor`. Proves
4
- * formatShapeAdvisorySummaryLine reuses the MCP line format verbatim (byte-identical text for
5
- * the same server payload) and that formatOrient/formatOrientBrief now render it.
6
- */
7
- import { describe, expect, it } from 'vitest';
8
- import { formatOrient, formatOrientBrief, formatShapeAdvisorySummaryLine } from './orient.js';
9
- function mkShapeSummary(over) {
10
- return {
11
- windowDays: 14, compoundTotal: 4, pendingCount: 1, pendingRate: 0.25,
12
- precisionAgent: 0.6667, precisionAgentN: 3,
13
- precisionHuman: null, precisionHumanN: 0, precisionHumanNote: 'no human verdicts yet (n=0)',
14
- candidateRateBySource: {},
15
- scanTruncated: false,
16
- ...over,
17
- };
18
- }
19
- function mkView(shapeAdvisorySummary) {
20
- return {
21
- strategicContext: { vision: null, purpose: null, activeBetCount: 0, activeWorkPackageCount: 0, currentWorkPackage: null, activeTensionCount: 0 },
22
- activeWorkPackages: [],
23
- tensions: [],
24
- architectureNotes: [],
25
- absenceSignals: [],
26
- priorSessions: [],
27
- recoveryBlock: null,
28
- plannedWork: { uncommittedDrafts: [], inProgressEntries: [], openTensions: [] },
29
- ...(shapeAdvisorySummary ? { shapeAdvisorySummary } : {}),
30
- };
31
- }
32
- describe('formatShapeAdvisorySummaryLine (CLI mirror of mcp-server/orient-shared.ts)', () => {
33
- it('matches the MCP line format byte-for-byte for an identical payload', () => {
34
- const line = formatShapeAdvisorySummaryLine(mkShapeSummary({
35
- candidateRateBySource: { cli: 0.8333, mcp: null },
36
- candidateCountBySource: { cli: 6, mcp: 1 },
37
- }));
38
- expect(line).toBe('Shape advisories (14d): 1 pending / 4 compound (25% pending) — precisionAgent 67% (n=3), precisionHuman no human verdicts yet (n=0). candidateRateBySource: cli 83% (n=6), mcp n/a (n=1).');
39
- });
40
- it('returns undefined when there is nothing to show', () => {
41
- expect(formatShapeAdvisorySummaryLine(undefined)).toBeUndefined();
42
- expect(formatShapeAdvisorySummaryLine(mkShapeSummary({ compoundTotal: 0 }))).toBeUndefined();
43
- });
44
- });
45
- describe('formatOrient / formatOrientBrief render the shape-advisory line', () => {
46
- it('formatOrient (full mode) includes the line when shapeAdvisorySummary is present', () => {
47
- const text = formatOrient(mkView(mkShapeSummary({})));
48
- expect(text).toContain('Shape advisories (14d):');
49
- });
50
- it('formatOrient omits the section entirely when shapeAdvisorySummary is absent', () => {
51
- const text = formatOrient(mkView(undefined));
52
- expect(text).not.toContain('Shape advisories');
53
- });
54
- it('formatOrientBrief includes the line when shapeAdvisorySummary is present', () => {
55
- const text = formatOrientBrief(mkView(mkShapeSummary({})));
56
- expect(text).toContain('Shape advisories (14d):');
57
- });
58
- });
59
- //# sourceMappingURL=orient.shapeAdvisorySummary.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orient.shapeAdvisorySummary.test.js","sourceRoot":"","sources":["../../src/formatters/orient.shapeAdvisorySummary.test.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- export interface ShapeAdvisoryItem {
2
- /** Non-underscore twin of the row's `_id` (TEN-340) — the field `pb shape show`/`agree`/
3
- * `dismiss` target. */
4
- id: string;
5
- outcome: 'not_candidate' | 'atomic' | 'compound' | 'unavailable' | 'reserved';
6
- disposition: 'pending' | 'agreed' | 'dismissed' | 'expired';
7
- subjectEntryId: string;
8
- collectionSlug: string;
9
- source: string;
10
- confidence?: number;
11
- reason?: string;
12
- gateDisposition?: string;
13
- unavailableReason?: string;
14
- at: number;
15
- dispositionAt?: number;
16
- dispositionBy?: {
17
- kind: 'human' | 'agent' | 'system';
18
- personId?: string;
19
- agentId?: string;
20
- };
21
- dispositionReason?: string;
22
- proposedAtoms?: Array<{
23
- title: string;
24
- concern: string;
25
- bodyExcerpt: string;
26
- suggestedCollection?: string;
27
- }>;
28
- proposedLinks?: Array<{
29
- fromIdx: number;
30
- toIdx: number;
31
- relation: string;
32
- }>;
33
- [key: string]: unknown;
34
- }
35
- export declare function formatShapeAdvisoryItem(item: ShapeAdvisoryItem, now?: number): string;
36
- /**
37
- * WP-571 sweep fix (review finding on PR #513/#517): `truncated` surfaces the backend's
38
- * LIST_SCAN_CAP safety-bound signal (`convex/shape/listAdvisories.ts`) — without it, a short
39
- * or empty list was indistinguishable from "no more advisories exist" vs. "the scan gave up
40
- * at the cap before finding enough." Optional + defaulted false so every pre-existing call
41
- * site (and both formatter tests) keeps working unchanged.
42
- */
43
- export declare function formatShapeAdvisoriesList(items: ShapeAdvisoryItem[], now?: number, truncated?: boolean): string;
44
- export declare function formatShapeAdvisoryShow(item: ShapeAdvisoryItem | null): string;
45
- export interface ShapeDispositionReceipt {
46
- rowId: string;
47
- disposition: 'agreed' | 'dismissed';
48
- dispositionBy: {
49
- kind: 'human' | 'agent';
50
- personId?: string;
51
- };
52
- }
53
- export declare function formatShapeDispositionReceipt(value: ShapeDispositionReceipt): string;
54
- //# sourceMappingURL=shape.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../../src/formatters/shape.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,iBAAiB;IAChC;4BACwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;IAC9E,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5D,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5F,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7G,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAeD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAKrF;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,MAAM,CAO7G;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAG,MAAM,CAqC9E;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,QAAQ,GAAG,WAAW,CAAC;IACpC,aAAa,EAAE;QAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAKpF"}
@@ -1,97 +0,0 @@
1
- import { stripControlChars } from '../lib/strip.js';
2
- /**
3
- * Human-formatted rendering for the `pb shape` verb group (WP-559, Slice 2 of WP-557,
4
- * TEN-2532). Mirrors formatters/conflicts.ts's shape: one entry point per verb, no math
5
- * here — every field is rendered exactly as the deployed queries/mutations return it.
6
- */
7
- function singleLine(value) {
8
- return stripControlChars(value).replace(/\s+/g, ' ').trim();
9
- }
10
- /** Age is derived at render time — never a stored field (mirrors formatConflictAge). */
11
- function formatAge(at, now = Date.now()) {
12
- const deltaMs = Math.max(0, now - at);
13
- const deltaSec = Math.floor(deltaMs / 1000);
14
- if (deltaSec < 60)
15
- return `${deltaSec}s ago`;
16
- const deltaMin = Math.floor(deltaSec / 60);
17
- if (deltaMin < 60)
18
- return `${deltaMin}m ago`;
19
- const deltaHour = Math.floor(deltaMin / 60);
20
- if (deltaHour < 24)
21
- return `${deltaHour}h ago`;
22
- const deltaDay = Math.floor(deltaHour / 24);
23
- return `${deltaDay}d ago`;
24
- }
25
- export function formatShapeAdvisoryItem(item, now) {
26
- const verdict = item.outcome === 'unavailable' && item.unavailableReason
27
- ? `unavailable(${item.unavailableReason})`
28
- : item.outcome;
29
- return `${singleLine(item.id)} · ${singleLine(item.subjectEntryId)} · ${verdict} · disposition:${item.disposition} · ${singleLine(item.source)} · ${formatAge(item.at, now)}`;
30
- }
31
- /**
32
- * WP-571 sweep fix (review finding on PR #513/#517): `truncated` surfaces the backend's
33
- * LIST_SCAN_CAP safety-bound signal (`convex/shape/listAdvisories.ts`) — without it, a short
34
- * or empty list was indistinguishable from "no more advisories exist" vs. "the scan gave up
35
- * at the cap before finding enough." Optional + defaulted false so every pre-existing call
36
- * site (and both formatter tests) keeps working unchanged.
37
- */
38
- export function formatShapeAdvisoriesList(items, now, truncated = false) {
39
- const header = items.length ? `Shape advisories (${items.length})` : 'No shape advisories match.';
40
- const truncationNote = truncated
41
- ? 'Note: this list may be incomplete — the scan stopped at its safety bound before finding every match. Narrow with --disposition/--outcome or raise --limit and re-run.'
42
- : null;
43
- if (!items.length)
44
- return [header, ...(truncationNote ? ['', truncationNote] : [])].join('\n');
45
- return [header, '', ...items.map((item) => formatShapeAdvisoryItem(item, now)), ...(truncationNote ? ['', truncationNote] : [])].join('\n');
46
- }
47
- export function formatShapeAdvisoryShow(item) {
48
- if (!item)
49
- return 'Advisory not found (missing, or belongs to a different workspace).';
50
- const lines = [
51
- `# ${item.id}`,
52
- `- Subject: ${singleLine(item.subjectEntryId)} (${singleLine(item.collectionSlug)})`,
53
- `- Outcome: ${item.outcome}${item.unavailableReason ? ` (${item.unavailableReason})` : ''}`,
54
- `- Disposition: ${item.disposition}`,
55
- `- Source: ${singleLine(item.source)}`,
56
- ];
57
- if (item.confidence !== undefined)
58
- lines.push(`- Confidence: ${item.confidence.toFixed(2)}`);
59
- if (item.reason)
60
- lines.push(`- Reason: ${singleLine(item.reason)}`);
61
- if (item.gateDisposition)
62
- lines.push(`- Gate disposition: ${item.gateDisposition}`);
63
- // Review round 1 (Codex P2): a human deciding whether to agree/dismiss needs to see WHAT
64
- // the judge actually proposed splitting this entry into — not just the high-level verdict.
65
- if (item.proposedAtoms?.length) {
66
- lines.push('', `Proposed split (${item.proposedAtoms.length} atom(s)):`);
67
- item.proposedAtoms.forEach((atom, idx) => {
68
- lines.push(` [${idx}] ${singleLine(atom.title)} — ${singleLine(atom.concern)}`);
69
- lines.push(` "${singleLine(atom.bodyExcerpt)}"`);
70
- if (atom.suggestedCollection)
71
- lines.push(` suggested collection: ${singleLine(atom.suggestedCollection)}`);
72
- });
73
- }
74
- if (item.proposedLinks?.length) {
75
- lines.push('', 'Proposed links:');
76
- for (const link of item.proposedLinks) {
77
- const from = link.fromIdx === -1 ? 'original' : `[${link.fromIdx}]`;
78
- lines.push(` ${from} --${singleLine(link.relation)}--> [${link.toIdx}]`);
79
- }
80
- }
81
- if (item.dispositionBy) {
82
- const who = item.dispositionBy.personId
83
- ? `${item.dispositionBy.kind} (${item.dispositionBy.personId})`
84
- : item.dispositionBy.kind;
85
- lines.push('', `- Dispositioned by: ${who}`);
86
- if (item.dispositionReason)
87
- lines.push(`- Disposition reason: ${singleLine(item.dispositionReason)}`);
88
- }
89
- return lines.join('\n');
90
- }
91
- export function formatShapeDispositionReceipt(value) {
92
- const who = value.dispositionBy.personId
93
- ? `${value.dispositionBy.kind} (${value.dispositionBy.personId})`
94
- : value.dispositionBy.kind;
95
- return `Advisory ${singleLine(value.rowId)} dispositioned: ${value.disposition} (by ${who})`;
96
- }
97
- //# sourceMappingURL=shape.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shape.js","sourceRoot":"","sources":["../../src/formatters/shape.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=shape.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shape.test.d.ts","sourceRoot":"","sources":["../../src/formatters/shape.test.ts"],"names":[],"mappings":""}