@productbrain/cli 0.1.0-beta.7 → 0.1.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +84 -1
- package/dist/__tests__/capture.test.d.ts +2 -0
- package/dist/__tests__/capture.test.d.ts.map +1 -0
- package/dist/__tests__/capture.test.js +86 -0
- package/dist/__tests__/capture.test.js.map +1 -0
- package/dist/__tests__/constellation.test.d.ts +2 -0
- package/dist/__tests__/constellation.test.d.ts.map +1 -0
- package/dist/__tests__/constellation.test.js +260 -0
- package/dist/__tests__/constellation.test.js.map +1 -0
- package/dist/__tests__/fields.test.d.ts +2 -0
- package/dist/__tests__/fields.test.d.ts.map +1 -0
- package/dist/__tests__/fields.test.js +238 -0
- package/dist/__tests__/fields.test.js.map +1 -0
- package/dist/__tests__/handshake.test.d.ts +2 -0
- package/dist/__tests__/handshake.test.d.ts.map +1 -0
- package/dist/__tests__/handshake.test.js +187 -0
- package/dist/__tests__/handshake.test.js.map +1 -0
- package/dist/__tests__/relate.test.d.ts +2 -0
- package/dist/__tests__/relate.test.d.ts.map +1 -0
- package/dist/__tests__/relate.test.js +79 -0
- package/dist/__tests__/relate.test.js.map +1 -0
- package/dist/__tests__/repo-detect.test.d.ts +2 -0
- package/dist/__tests__/repo-detect.test.d.ts.map +1 -0
- package/dist/__tests__/repo-detect.test.js +119 -0
- package/dist/__tests__/repo-detect.test.js.map +1 -0
- package/dist/__tests__/runner.test.d.ts +2 -0
- package/dist/__tests__/runner.test.d.ts.map +1 -0
- package/dist/__tests__/runner.test.js +215 -0
- package/dist/__tests__/runner.test.js.map +1 -0
- package/dist/__tests__/session-touch.test.d.ts +2 -0
- package/dist/__tests__/session-touch.test.d.ts.map +1 -0
- package/dist/__tests__/session-touch.test.js +134 -0
- package/dist/__tests__/session-touch.test.js.map +1 -0
- package/dist/__tests__/session.test.d.ts +2 -0
- package/dist/__tests__/session.test.d.ts.map +1 -0
- package/dist/__tests__/session.test.js +52 -0
- package/dist/__tests__/session.test.js.map +1 -0
- package/dist/__tests__/strip.test.d.ts +2 -0
- package/dist/__tests__/strip.test.d.ts.map +1 -0
- package/dist/__tests__/strip.test.js +136 -0
- package/dist/__tests__/strip.test.js.map +1 -0
- package/dist/__tests__/update.test.d.ts +2 -0
- package/dist/__tests__/update.test.d.ts.map +1 -0
- package/dist/__tests__/update.test.js +148 -0
- package/dist/__tests__/update.test.js.map +1 -0
- package/dist/commands/capture.d.ts +21 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +100 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/constellation.d.ts +11 -0
- package/dist/commands/constellation.d.ts.map +1 -0
- package/dist/commands/constellation.js +28 -0
- package/dist/commands/constellation.js.map +1 -0
- package/dist/commands/context.d.ts +2 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +15 -9
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/fields.d.ts +9 -0
- package/dist/commands/fields.d.ts.map +1 -0
- package/dist/commands/fields.js +26 -0
- package/dist/commands/fields.js.map +1 -0
- package/dist/commands/get.d.ts +8 -1
- package/dist/commands/get.d.ts.map +1 -1
- package/dist/commands/get.js +51 -6
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/handshake.d.ts +18 -0
- package/dist/commands/handshake.d.ts.map +1 -0
- package/dist/commands/handshake.js +378 -0
- package/dist/commands/handshake.js.map +1 -0
- package/dist/commands/ingest.d.ts +1 -0
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +25 -8
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/orient.d.ts +1 -0
- package/dist/commands/orient.d.ts.map +1 -1
- package/dist/commands/orient.js +13 -8
- package/dist/commands/orient.js.map +1 -1
- package/dist/commands/relate.d.ts +15 -0
- package/dist/commands/relate.d.ts.map +1 -0
- package/dist/commands/relate.js +72 -0
- package/dist/commands/relate.js.map +1 -0
- package/dist/commands/search.d.ts +1 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +5 -3
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/session.d.ts +20 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +134 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/update.d.ts +16 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +89 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/formatters/capture.d.ts +30 -0
- package/dist/formatters/capture.d.ts.map +1 -0
- package/dist/formatters/capture.js +58 -0
- package/dist/formatters/capture.js.map +1 -0
- package/dist/formatters/constellation.d.ts +34 -0
- package/dist/formatters/constellation.d.ts.map +1 -0
- package/dist/formatters/constellation.js +38 -0
- package/dist/formatters/constellation.js.map +1 -0
- package/dist/formatters/fields.d.ts +32 -0
- package/dist/formatters/fields.d.ts.map +1 -0
- package/dist/formatters/fields.js +49 -0
- package/dist/formatters/fields.js.map +1 -0
- package/dist/formatters/handshake.d.ts +17 -0
- package/dist/formatters/handshake.d.ts.map +1 -0
- package/dist/formatters/handshake.js +51 -0
- package/dist/formatters/handshake.js.map +1 -0
- package/dist/formatters/relate.d.ts +11 -0
- package/dist/formatters/relate.d.ts.map +1 -0
- package/dist/formatters/relate.js +10 -0
- package/dist/formatters/relate.js.map +1 -0
- package/dist/formatters/session.d.ts +11 -0
- package/dist/formatters/session.d.ts.map +1 -0
- package/dist/formatters/session.js +51 -0
- package/dist/formatters/session.js.map +1 -0
- package/dist/formatters/update.d.ts +17 -0
- package/dist/formatters/update.d.ts.map +1 -0
- package/dist/formatters/update.js +43 -0
- package/dist/formatters/update.js.map +1 -0
- package/dist/generators/adapters.d.ts +10 -0
- package/dist/generators/adapters.d.ts.map +1 -0
- package/dist/generators/adapters.js +102 -0
- package/dist/generators/adapters.js.map +1 -0
- package/dist/generators/briefing-md.d.ts +8 -0
- package/dist/generators/briefing-md.d.ts.map +1 -0
- package/dist/generators/briefing-md.js +51 -0
- package/dist/generators/briefing-md.js.map +1 -0
- package/dist/generators/context-md.d.ts +8 -0
- package/dist/generators/context-md.d.ts.map +1 -0
- package/dist/generators/context-md.js +123 -0
- package/dist/generators/context-md.js.map +1 -0
- package/dist/generators/portable-knowledge.d.ts +72 -0
- package/dist/generators/portable-knowledge.d.ts.map +1 -0
- package/dist/generators/portable-knowledge.js +246 -0
- package/dist/generators/portable-knowledge.js.map +1 -0
- package/dist/generators/portable-knowledge.test.d.ts +2 -0
- package/dist/generators/portable-knowledge.test.d.ts.map +1 -0
- package/dist/generators/portable-knowledge.test.js +399 -0
- package/dist/generators/portable-knowledge.test.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +231 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts +19 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +102 -8
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/repo-detect.d.ts +14 -0
- package/dist/lib/repo-detect.d.ts.map +1 -0
- package/dist/lib/repo-detect.js +58 -0
- package/dist/lib/repo-detect.js.map +1 -0
- package/dist/lib/runner.d.ts +31 -0
- package/dist/lib/runner.d.ts.map +1 -0
- package/dist/lib/runner.js +65 -0
- package/dist/lib/runner.js.map +1 -0
- package/dist/lib/session.d.ts +17 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +43 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/strip.d.ts +11 -0
- package/dist/lib/strip.d.ts.map +1 -0
- package/dist/lib/strip.js +26 -0
- package/dist/lib/strip.js.map +1 -0
- package/package.json +6 -3
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stripConvexInternals — unit tests.
|
|
3
|
+
* BET-181 Slice 0: TEN-340 (Convex internal exposure), DEC-299 (JSON-default output).
|
|
4
|
+
*
|
|
5
|
+
* Verifies: removes _id and _creationTime, preserves entryId and all other fields,
|
|
6
|
+
* handles nested objects and arrays, does not mutate input.
|
|
7
|
+
*/
|
|
8
|
+
import { describe, expect, it } from 'vitest';
|
|
9
|
+
import { stripConvexInternals } from '../lib/strip.js';
|
|
10
|
+
describe('stripConvexInternals', () => {
|
|
11
|
+
it('removes _id from a flat object', () => {
|
|
12
|
+
const input = { _id: 'j57abc', entryId: 'BET-181', name: 'Test' };
|
|
13
|
+
const result = stripConvexInternals(input);
|
|
14
|
+
expect(result).not.toHaveProperty('_id');
|
|
15
|
+
expect(result).toHaveProperty('entryId', 'BET-181');
|
|
16
|
+
expect(result).toHaveProperty('name', 'Test');
|
|
17
|
+
});
|
|
18
|
+
it('removes _creationTime from a flat object', () => {
|
|
19
|
+
const input = { _creationTime: 1700000000000, entryId: 'BET-181', name: 'Test' };
|
|
20
|
+
const result = stripConvexInternals(input);
|
|
21
|
+
expect(result).not.toHaveProperty('_creationTime');
|
|
22
|
+
expect(result).toHaveProperty('entryId', 'BET-181');
|
|
23
|
+
});
|
|
24
|
+
it('removes both _id and _creationTime simultaneously', () => {
|
|
25
|
+
const input = {
|
|
26
|
+
_id: 'j57abc',
|
|
27
|
+
_creationTime: 1700000000000,
|
|
28
|
+
entryId: 'BET-181',
|
|
29
|
+
name: 'Test',
|
|
30
|
+
status: 'active',
|
|
31
|
+
};
|
|
32
|
+
const result = stripConvexInternals(input);
|
|
33
|
+
expect(result).not.toHaveProperty('_id');
|
|
34
|
+
expect(result).not.toHaveProperty('_creationTime');
|
|
35
|
+
expect(result).toEqual({ entryId: 'BET-181', name: 'Test', status: 'active' });
|
|
36
|
+
});
|
|
37
|
+
it('preserves entryId (human-readable) unconditionally', () => {
|
|
38
|
+
const input = { _id: 'sys1', _creationTime: 123, entryId: 'DEC-299' };
|
|
39
|
+
const result = stripConvexInternals(input);
|
|
40
|
+
expect(result).toHaveProperty('entryId', 'DEC-299');
|
|
41
|
+
});
|
|
42
|
+
it('preserves all other fields untouched', () => {
|
|
43
|
+
const input = {
|
|
44
|
+
_id: 'sys1',
|
|
45
|
+
name: 'My entry',
|
|
46
|
+
status: 'draft',
|
|
47
|
+
collectionSlug: 'bets',
|
|
48
|
+
data: { description: 'hello' },
|
|
49
|
+
};
|
|
50
|
+
const result = stripConvexInternals(input);
|
|
51
|
+
expect(result).toEqual({
|
|
52
|
+
name: 'My entry',
|
|
53
|
+
status: 'draft',
|
|
54
|
+
collectionSlug: 'bets',
|
|
55
|
+
data: { description: 'hello' },
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
it('recursively strips _id and _creationTime from nested objects', () => {
|
|
59
|
+
const input = {
|
|
60
|
+
entryId: 'BET-181',
|
|
61
|
+
relations: [
|
|
62
|
+
{ _id: 'rel1', _creationTime: 111, type: 'part_of', otherEntryId: 'INI-1' },
|
|
63
|
+
],
|
|
64
|
+
data: {
|
|
65
|
+
_id: 'should-be-removed',
|
|
66
|
+
description: 'keep this',
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
const result = stripConvexInternals(input);
|
|
70
|
+
// Top level
|
|
71
|
+
expect(result).toHaveProperty('entryId', 'BET-181');
|
|
72
|
+
// Nested in array
|
|
73
|
+
const rel = result.relations[0];
|
|
74
|
+
expect(rel).not.toHaveProperty('_id');
|
|
75
|
+
expect(rel).not.toHaveProperty('_creationTime');
|
|
76
|
+
expect(rel).toHaveProperty('type', 'part_of');
|
|
77
|
+
expect(rel).toHaveProperty('otherEntryId', 'INI-1');
|
|
78
|
+
// Nested in object
|
|
79
|
+
const data = result.data;
|
|
80
|
+
expect(data).not.toHaveProperty('_id');
|
|
81
|
+
expect(data).toHaveProperty('description', 'keep this');
|
|
82
|
+
});
|
|
83
|
+
it('handles arrays of objects', () => {
|
|
84
|
+
const input = [
|
|
85
|
+
{ _id: 'a', entryId: 'BET-1', name: 'Bet 1' },
|
|
86
|
+
{ _id: 'b', _creationTime: 999, entryId: 'TEN-1', name: 'Tension 1' },
|
|
87
|
+
];
|
|
88
|
+
const result = stripConvexInternals(input);
|
|
89
|
+
expect(result).toHaveLength(2);
|
|
90
|
+
expect(result[0]).not.toHaveProperty('_id');
|
|
91
|
+
expect(result[0]).toHaveProperty('entryId', 'BET-1');
|
|
92
|
+
expect(result[1]).not.toHaveProperty('_id');
|
|
93
|
+
expect(result[1]).not.toHaveProperty('_creationTime');
|
|
94
|
+
expect(result[1]).toHaveProperty('entryId', 'TEN-1');
|
|
95
|
+
});
|
|
96
|
+
it('handles null values without error', () => {
|
|
97
|
+
const result = stripConvexInternals(null);
|
|
98
|
+
expect(result).toBeNull();
|
|
99
|
+
});
|
|
100
|
+
it('handles primitive values (string, number, boolean) as pass-through', () => {
|
|
101
|
+
expect(stripConvexInternals('hello')).toBe('hello');
|
|
102
|
+
expect(stripConvexInternals(42)).toBe(42);
|
|
103
|
+
expect(stripConvexInternals(true)).toBe(true);
|
|
104
|
+
});
|
|
105
|
+
it('does not mutate the input object', () => {
|
|
106
|
+
const input = { _id: 'sys1', entryId: 'BET-1', name: 'Test' };
|
|
107
|
+
const inputCopy = { ...input };
|
|
108
|
+
stripConvexInternals(input);
|
|
109
|
+
expect(input).toEqual(inputCopy);
|
|
110
|
+
});
|
|
111
|
+
it('handles empty objects and arrays', () => {
|
|
112
|
+
expect(stripConvexInternals({})).toEqual({});
|
|
113
|
+
expect(stripConvexInternals([])).toEqual([]);
|
|
114
|
+
});
|
|
115
|
+
it('handles deeply nested structures', () => {
|
|
116
|
+
const input = {
|
|
117
|
+
_id: 'top',
|
|
118
|
+
level1: {
|
|
119
|
+
_id: 'l1',
|
|
120
|
+
level2: {
|
|
121
|
+
_id: 'l2',
|
|
122
|
+
_creationTime: 123,
|
|
123
|
+
value: 'deep',
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
const result = stripConvexInternals(input);
|
|
128
|
+
expect(result).not.toHaveProperty('_id');
|
|
129
|
+
const r = result;
|
|
130
|
+
expect(r.level1).not.toHaveProperty('_id');
|
|
131
|
+
expect(r.level1.level2).not.toHaveProperty('_id');
|
|
132
|
+
expect(r.level1.level2).not.toHaveProperty('_creationTime');
|
|
133
|
+
expect(r.level1.level2['value']).toBe('deep');
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=strip.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip.test.js","sourceRoot":"","sources":["../../src/__tests__/strip.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/update.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb update — verify mcpCallWithSession sequence and args.
|
|
3
|
+
* TEN-341 test contract: happy path, no session, empty entryId.
|
|
4
|
+
*/
|
|
5
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
6
|
+
import { runUpdate } from '../commands/update.js';
|
|
7
|
+
const mcpCallWithSessionMock = vi.fn();
|
|
8
|
+
vi.mock('../lib/client.js', () => ({
|
|
9
|
+
mcpCallWithSession: (...args) => mcpCallWithSessionMock(...args),
|
|
10
|
+
}));
|
|
11
|
+
vi.mock('../lib/config.js', () => ({
|
|
12
|
+
getConfigOrGuide: vi.fn(() => Promise.resolve({ apiKey: 'pb_sk_test', siteUrl: 'https://test.convex.site' })),
|
|
13
|
+
}));
|
|
14
|
+
// Force pretty mode for all tests so formatUpdateReceipt output is tested (not JSON)
|
|
15
|
+
vi.mock('../lib/runner.js', () => ({
|
|
16
|
+
isJsonMode: () => false,
|
|
17
|
+
}));
|
|
18
|
+
// Session mock — controlled per test
|
|
19
|
+
let mockSession = { sessionId: 'sess-test' };
|
|
20
|
+
vi.mock('../lib/session.js', () => ({
|
|
21
|
+
readSession: () => mockSession,
|
|
22
|
+
}));
|
|
23
|
+
describe('runUpdate', () => {
|
|
24
|
+
beforeEach(() => {
|
|
25
|
+
vi.clearAllMocks();
|
|
26
|
+
mockSession = { sessionId: 'sess-test' };
|
|
27
|
+
// BET-192: updateEntry returns warnings + normalization breakdown (symmetric with createEntry)
|
|
28
|
+
mcpCallWithSessionMock.mockResolvedValue({
|
|
29
|
+
id: 'j571abc123def456',
|
|
30
|
+
warnings: [],
|
|
31
|
+
normalization: { remapped: {}, rejected: [], accepted: [] },
|
|
32
|
+
normalizationWarnings: [],
|
|
33
|
+
validationWarnings: [],
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
it('calls chain.updateEntry with correct args (happy path)', async () => {
|
|
37
|
+
const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
38
|
+
await runUpdate({
|
|
39
|
+
entryId: 'BET-151',
|
|
40
|
+
field: ['description=new description'],
|
|
41
|
+
note: 'Updated description',
|
|
42
|
+
});
|
|
43
|
+
writeSpy.mockRestore();
|
|
44
|
+
expect(mcpCallWithSessionMock).toHaveBeenCalledWith('chain.updateEntry', {
|
|
45
|
+
entryId: 'BET-151',
|
|
46
|
+
data: { description: 'new description' },
|
|
47
|
+
changeNote: 'Updated description',
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
it('passes name and status when provided', async () => {
|
|
51
|
+
const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
52
|
+
await runUpdate({
|
|
53
|
+
entryId: 'TEN-703',
|
|
54
|
+
name: 'New name',
|
|
55
|
+
status: 'active',
|
|
56
|
+
note: 'Resolved',
|
|
57
|
+
});
|
|
58
|
+
writeSpy.mockRestore();
|
|
59
|
+
expect(mcpCallWithSessionMock).toHaveBeenCalledWith('chain.updateEntry', {
|
|
60
|
+
entryId: 'TEN-703',
|
|
61
|
+
name: 'New name',
|
|
62
|
+
status: 'active',
|
|
63
|
+
changeNote: 'Resolved',
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
it('handles --field values containing = signs', async () => {
|
|
67
|
+
const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
68
|
+
await runUpdate({
|
|
69
|
+
entryId: 'DEC-264',
|
|
70
|
+
field: ['rationale=a=b=c'],
|
|
71
|
+
});
|
|
72
|
+
writeSpy.mockRestore();
|
|
73
|
+
expect(mcpCallWithSessionMock).toHaveBeenCalledWith('chain.updateEntry', {
|
|
74
|
+
entryId: 'DEC-264',
|
|
75
|
+
data: { rationale: 'a=b=c' },
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
it('exits 1 with no active session', async () => {
|
|
79
|
+
mockSession = null;
|
|
80
|
+
const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('exit'); });
|
|
81
|
+
const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
82
|
+
await expect(runUpdate({ entryId: 'BET-151', field: ['x=1'] })).rejects.toThrow('exit');
|
|
83
|
+
expect(exitSpy).toHaveBeenCalledWith(1);
|
|
84
|
+
const stderrOutput = stderrSpy.mock.calls.map(c => String(c[0])).join('');
|
|
85
|
+
expect(stderrOutput).toContain('No active session');
|
|
86
|
+
expect(mcpCallWithSessionMock).not.toHaveBeenCalled();
|
|
87
|
+
exitSpy.mockRestore();
|
|
88
|
+
stderrSpy.mockRestore();
|
|
89
|
+
});
|
|
90
|
+
it('exits 1 with empty entryId', async () => {
|
|
91
|
+
const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('exit'); });
|
|
92
|
+
const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
93
|
+
await expect(runUpdate({ entryId: ' ', field: ['x=1'] })).rejects.toThrow('exit');
|
|
94
|
+
expect(exitSpy).toHaveBeenCalledWith(1);
|
|
95
|
+
expect(mcpCallWithSessionMock).not.toHaveBeenCalled();
|
|
96
|
+
exitSpy.mockRestore();
|
|
97
|
+
stderrSpy.mockRestore();
|
|
98
|
+
});
|
|
99
|
+
it('exits 1 when nothing to update', async () => {
|
|
100
|
+
const exitSpy = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('exit'); });
|
|
101
|
+
const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
102
|
+
await expect(runUpdate({ entryId: 'BET-151' })).rejects.toThrow('exit');
|
|
103
|
+
expect(exitSpy).toHaveBeenCalledWith(1);
|
|
104
|
+
const stderrOutput = stderrSpy.mock.calls.map(c => String(c[0])).join('');
|
|
105
|
+
expect(stderrOutput).toContain('Nothing to update');
|
|
106
|
+
expect(mcpCallWithSessionMock).not.toHaveBeenCalled();
|
|
107
|
+
exitSpy.mockRestore();
|
|
108
|
+
stderrSpy.mockRestore();
|
|
109
|
+
});
|
|
110
|
+
// ── BET-192 / FEAT-575: Normalization warning tests ──────────────────────
|
|
111
|
+
it('displays normalization warnings when fields are rejected (BET-192)', async () => {
|
|
112
|
+
mcpCallWithSessionMock.mockResolvedValue({
|
|
113
|
+
id: 'j571abc123def456',
|
|
114
|
+
warnings: ['Unknown field "foo" dropped. Available fields: description, doneWhen'],
|
|
115
|
+
normalization: { remapped: {}, rejected: ['foo'], accepted: ['description'] },
|
|
116
|
+
normalizationWarnings: ['Unknown field "foo" dropped. Available fields: description, doneWhen'],
|
|
117
|
+
validationWarnings: [],
|
|
118
|
+
});
|
|
119
|
+
const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
120
|
+
await runUpdate({
|
|
121
|
+
entryId: 'BET-192',
|
|
122
|
+
field: ['foo=bar'],
|
|
123
|
+
});
|
|
124
|
+
const output = writeSpy.mock.calls.map(c => String(c[0])).join('');
|
|
125
|
+
writeSpy.mockRestore();
|
|
126
|
+
expect(output).toContain('Normalization warnings');
|
|
127
|
+
expect(output).toContain('foo');
|
|
128
|
+
});
|
|
129
|
+
it('displays no warnings when all fields are valid (BET-192)', async () => {
|
|
130
|
+
mcpCallWithSessionMock.mockResolvedValue({
|
|
131
|
+
id: 'j571abc123def456',
|
|
132
|
+
warnings: [],
|
|
133
|
+
normalization: { remapped: {}, rejected: [], accepted: ['description'] },
|
|
134
|
+
normalizationWarnings: [],
|
|
135
|
+
validationWarnings: [],
|
|
136
|
+
});
|
|
137
|
+
const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
138
|
+
await runUpdate({
|
|
139
|
+
entryId: 'BET-192',
|
|
140
|
+
field: ['description=valid value'],
|
|
141
|
+
});
|
|
142
|
+
const output = writeSpy.mock.calls.map(c => String(c[0])).join('');
|
|
143
|
+
writeSpy.mockRestore();
|
|
144
|
+
expect(output).not.toContain('Normalization warnings');
|
|
145
|
+
expect(output).not.toContain('Validation warnings');
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
//# sourceMappingURL=update.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.test.js","sourceRoot":"","sources":["../../src/__tests__/update.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAa,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAIzE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,sBAAsB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAEvC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,kBAAkB,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;CAC5E,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAC3B,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAC/E;CACF,CAAC,CAAC,CAAC;AAEJ,qFAAqF;AACrF,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK;CACxB,CAAC,CAAC,CAAC;AAEJ,qCAAqC;AACrC,IAAI,WAAW,GAAiC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AAC3E,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW;CAC/B,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,WAAW,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;QACzC,+FAA+F;QAC/F,sBAAsB,CAAC,iBAAiB,CAAC;YACvC,EAAE,EAAE,kBAAkB;YACtB,QAAQ,EAAE,EAAE;YACZ,aAAa,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC3D,qBAAqB,EAAE,EAAE;YACzB,kBAAkB,EAAE,EAAE;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAElF,MAAM,SAAS,CAAC;YACd,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,CAAC,6BAA6B,CAAC;YACtC,IAAI,EAAE,qBAAqB;SAC5B,CAAC,CAAC;QAEH,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEvB,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CAAC,mBAAmB,EAAE;YACvE,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE;YACxC,UAAU,EAAE,qBAAqB;SAClC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAElF,MAAM,SAAS,CAAC;YACd,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;QAEH,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEvB,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CAAC,mBAAmB,EAAE;YACvE,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAElF,MAAM,SAAS,CAAC;YACd,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,CAAC,iBAAiB,CAAC;SAC3B,CAAC,CAAC;QAEH,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEvB,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CAAC,mBAAmB,EAAE;YACvE,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,WAAW,GAAG,IAAI,CAAC;QACnB,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEnF,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAExF,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACpD,MAAM,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAEtD,OAAO,CAAC,WAAW,EAAE,CAAC;QACtB,SAAS,CAAC,WAAW,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEnF,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEnF,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAEtD,OAAO,CAAC,WAAW,EAAE,CAAC;QACtB,SAAS,CAAC,WAAW,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEnF,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAExE,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACpD,MAAM,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAEtD,OAAO,CAAC,WAAW,EAAE,CAAC;QACtB,SAAS,CAAC,WAAW,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAE5E,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,sBAAsB,CAAC,iBAAiB,CAAC;YACvC,EAAE,EAAE,kBAAkB;YACtB,QAAQ,EAAE,CAAC,sEAAsE,CAAC;YAClF,aAAa,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE;YAC7E,qBAAqB,EAAE,CAAC,sEAAsE,CAAC;YAC/F,kBAAkB,EAAE,EAAE;SACvB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAElF,MAAM,SAAS,CAAC;YACd,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,CAAC,SAAS,CAAC;SACnB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEvB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,sBAAsB,CAAC,iBAAiB,CAAC;YACvC,EAAE,EAAE,kBAAkB;YACtB,QAAQ,EAAE,EAAE;YACZ,aAAa,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE;YACxE,qBAAqB,EAAE,EAAE;YACzB,kBAAkB,EAAE,EAAE;SACvB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAElF,MAAM,SAAS,CAAC;YACd,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,CAAC,yBAAyB,CAAC;SACnC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEvB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb capture — write knowledge to the Chain during a CLI session.
|
|
3
|
+
* Calls resolveCollection (classification) → createEntry (draft).
|
|
4
|
+
* Shows rich receipt per FEAT-126 (capture receipts with correction affordance).
|
|
5
|
+
* Requires active session (DEC-9, BR-8).
|
|
6
|
+
* BET-181 Slice 0: uses isJsonMode() for output branching. Existing --json flag
|
|
7
|
+
* is preserved for backward compatibility (it sets output mode via the runner).
|
|
8
|
+
*/
|
|
9
|
+
interface CaptureOptions {
|
|
10
|
+
text: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
collection?: string;
|
|
14
|
+
link?: string;
|
|
15
|
+
type?: string;
|
|
16
|
+
/** @deprecated Use global --json flag instead. Preserved for backward compatibility. */
|
|
17
|
+
json?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function runCapture(options: CaptureOptions): Promise<void>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=capture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4BH,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,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4FvE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb capture — write knowledge to the Chain during a CLI session.
|
|
3
|
+
* Calls resolveCollection (classification) → createEntry (draft).
|
|
4
|
+
* Shows rich receipt per FEAT-126 (capture receipts with correction affordance).
|
|
5
|
+
* Requires active session (DEC-9, BR-8).
|
|
6
|
+
* BET-181 Slice 0: uses isJsonMode() for output branching. Existing --json flag
|
|
7
|
+
* is preserved for backward compatibility (it sets output mode via the runner).
|
|
8
|
+
*/
|
|
9
|
+
import { getConfigOrGuide } from '../lib/config.js';
|
|
10
|
+
import { mcpCallWithSession } from '../lib/client.js';
|
|
11
|
+
import { readSession, addCapturedEntry } from '../lib/session.js';
|
|
12
|
+
import { isJsonMode } from '../lib/runner.js';
|
|
13
|
+
import { formatCaptureReceipt } from '../formatters/capture.js';
|
|
14
|
+
export async function runCapture(options) {
|
|
15
|
+
const config = await getConfigOrGuide(() => runCapture(options));
|
|
16
|
+
if (!config)
|
|
17
|
+
return;
|
|
18
|
+
// Support both legacy --json flag and global output mode (DEC-299, backward compat)
|
|
19
|
+
const json = isJsonMode() || options.json === true;
|
|
20
|
+
// Require active session (DEC-9, BR-8)
|
|
21
|
+
const session = readSession();
|
|
22
|
+
if (!session) {
|
|
23
|
+
process.stderr.write('No active session. Run `pb session start` first.\n');
|
|
24
|
+
process.stderr.write('Write access requires a tracked session (DEC-9).\n');
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
const entryName = options.name ?? options.text;
|
|
28
|
+
const entryDescription = options.description ?? options.text;
|
|
29
|
+
// Phase 1: Resolve collection (classification)
|
|
30
|
+
let collectionSlug;
|
|
31
|
+
let classification = null;
|
|
32
|
+
if (options.collection) {
|
|
33
|
+
// Explicit collection — skip classification
|
|
34
|
+
collectionSlug = options.collection;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
if (!json)
|
|
38
|
+
process.stdout.write('Classifying...\n');
|
|
39
|
+
classification = await mcpCallWithSession('chain.resolveCollection', {
|
|
40
|
+
entryName,
|
|
41
|
+
entryDescription,
|
|
42
|
+
});
|
|
43
|
+
collectionSlug = classification.collection;
|
|
44
|
+
}
|
|
45
|
+
// Phase 2: Create entry as draft
|
|
46
|
+
if (!json)
|
|
47
|
+
process.stdout.write(`Capturing to ${collectionSlug}...\n`);
|
|
48
|
+
const data = { description: entryDescription };
|
|
49
|
+
// Add date for collections that use it
|
|
50
|
+
const datedCollections = ['tensions', 'decisions', 'insights', 'standards', 'business-rules'];
|
|
51
|
+
if (datedCollections.includes(collectionSlug)) {
|
|
52
|
+
data.date = new Date().toISOString().split('T')[0];
|
|
53
|
+
}
|
|
54
|
+
const result = await mcpCallWithSession('chain.createEntry', {
|
|
55
|
+
collectionSlug,
|
|
56
|
+
name: entryName,
|
|
57
|
+
status: 'draft',
|
|
58
|
+
data,
|
|
59
|
+
sessionId: session.sessionId,
|
|
60
|
+
createdBy: `agent:${session.sessionId}`,
|
|
61
|
+
});
|
|
62
|
+
// Track in session state
|
|
63
|
+
addCapturedEntry(result.entryId);
|
|
64
|
+
// Phase 3: Link to existing entry if --link provided (TEN-705)
|
|
65
|
+
if (options.link) {
|
|
66
|
+
const linkTarget = options.link.trim();
|
|
67
|
+
const relationType = options.type ?? 'surfaces_tension_in';
|
|
68
|
+
if (linkTarget) {
|
|
69
|
+
await mcpCallWithSession('chain.createEntryRelation', {
|
|
70
|
+
fromEntryId: result.entryId,
|
|
71
|
+
toEntryId: linkTarget,
|
|
72
|
+
type: relationType,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Output
|
|
77
|
+
if (json) {
|
|
78
|
+
// Machine-readable output (TEN-709, DEC-299)
|
|
79
|
+
process.stdout.write(JSON.stringify({
|
|
80
|
+
id: result.entryId,
|
|
81
|
+
collection: collectionSlug,
|
|
82
|
+
confidence: classification?.tier ?? 'explicit',
|
|
83
|
+
}) + '\n');
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
process.stdout.write('\n');
|
|
87
|
+
process.stdout.write(formatCaptureReceipt({
|
|
88
|
+
entryId: result.entryId,
|
|
89
|
+
name: entryName,
|
|
90
|
+
collection: collectionSlug,
|
|
91
|
+
status: 'draft',
|
|
92
|
+
classification,
|
|
93
|
+
warnings: result.warnings,
|
|
94
|
+
normalization: result.normalization,
|
|
95
|
+
linkedTo: options.link,
|
|
96
|
+
relationType: options.link ? (options.type ?? 'surfaces_tension_in') : undefined,
|
|
97
|
+
}) + '\n');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb constellation <entry-id> — compound view: entry + grouped relations.
|
|
3
|
+
* BET-181 Slice 3: agents can assess a shaped bet from this single output.
|
|
4
|
+
*
|
|
5
|
+
* Chain: DEC-299 (agent-native, JSON-default), STD-65 (structured, parseable, minimal),
|
|
6
|
+
* ARCH-25 (orient view model pattern), DEC-99 (ALLOWED_RELATION_TYPES as SSOT)
|
|
7
|
+
*/
|
|
8
|
+
export declare function runConstellation(options: {
|
|
9
|
+
entryId: string;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=constellation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constellation.d.ts","sourceRoot":"","sources":["../../src/commands/constellation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBlF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb constellation <entry-id> — compound view: entry + grouped relations.
|
|
3
|
+
* BET-181 Slice 3: agents can assess a shaped bet from this single output.
|
|
4
|
+
*
|
|
5
|
+
* Chain: DEC-299 (agent-native, JSON-default), STD-65 (structured, parseable, minimal),
|
|
6
|
+
* ARCH-25 (orient view model pattern), DEC-99 (ALLOWED_RELATION_TYPES as SSOT)
|
|
7
|
+
*/
|
|
8
|
+
import { getConfigOrGuide } from '../lib/config.js';
|
|
9
|
+
import { mcpCall } from '../lib/client.js';
|
|
10
|
+
import { runCliCommand } from '../lib/runner.js';
|
|
11
|
+
import { formatConstellation } from '../formatters/constellation.js';
|
|
12
|
+
export async function runConstellation(options) {
|
|
13
|
+
const config = await getConfigOrGuide(() => runConstellation(options));
|
|
14
|
+
if (!config)
|
|
15
|
+
return;
|
|
16
|
+
await runCliCommand({
|
|
17
|
+
fn: () => mcpCall('chain.getConstellation', {
|
|
18
|
+
entryId: options.entryId,
|
|
19
|
+
}),
|
|
20
|
+
formatPretty: (result) => {
|
|
21
|
+
if (!result?.entry) {
|
|
22
|
+
throw new Error(`Entry "${options.entryId}" not found.`);
|
|
23
|
+
}
|
|
24
|
+
return formatConstellation(result);
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=constellation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constellation.js","sourceRoot":"","sources":["../../src/commands/constellation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAA4B,MAAM,gCAAgC,CAAC;AAE/F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA4B;IACjE,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,GAAG,EAAE,CACP,OAAO,CAAsB,wBAAwB,EAAE;YACrD,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QACJ,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;YACvB,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,CAAC,OAAO,cAAc,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* pb context <entry-id> — gather and display constellation context.
|
|
3
|
-
*
|
|
3
|
+
* BET-181 Slice 0: routes through runCliCommand for JSON-default output.
|
|
4
|
+
* Previously: pipe-friendly via process.stdout.isTTY — now delegated to runner.
|
|
4
5
|
*/
|
|
5
6
|
export declare function runContext(options: {
|
|
6
7
|
entryId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB5E"}
|
package/dist/commands/context.js
CHANGED
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* pb context <entry-id> — gather and display constellation context.
|
|
3
|
-
*
|
|
3
|
+
* BET-181 Slice 0: routes through runCliCommand for JSON-default output.
|
|
4
|
+
* Previously: pipe-friendly via process.stdout.isTTY — now delegated to runner.
|
|
4
5
|
*/
|
|
5
6
|
import { getConfigOrGuide } from '../lib/config.js';
|
|
6
7
|
import { mcpCall } from '../lib/client.js';
|
|
8
|
+
import { runCliCommand, isJsonMode } from '../lib/runner.js';
|
|
7
9
|
import { formatContext } from '../formatters/context.js';
|
|
8
10
|
export async function runContext(options) {
|
|
9
11
|
const config = await getConfigOrGuide(() => runContext(options));
|
|
10
12
|
if (!config)
|
|
11
13
|
return;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
await runCliCommand({
|
|
15
|
+
fn: () => mcpCall('chain.gatherContext', {
|
|
16
|
+
entryId: options.entryId,
|
|
17
|
+
maxHops: 2,
|
|
18
|
+
}),
|
|
19
|
+
formatPretty: (result) => {
|
|
20
|
+
if (!result?.root) {
|
|
21
|
+
throw new Error(`Entry "${options.entryId}" not found.`);
|
|
22
|
+
}
|
|
23
|
+
// In pretty mode, use tty: true for rich terminal output
|
|
24
|
+
return formatContext(result, { tty: !isJsonMode() });
|
|
25
|
+
},
|
|
15
26
|
});
|
|
16
|
-
if (!result?.root) {
|
|
17
|
-
throw new Error(`Entry "${options.entryId}" not found.`);
|
|
18
|
-
}
|
|
19
|
-
const tty = Boolean(process.stdout.isTTY);
|
|
20
|
-
console.log(formatContext(result, { tty }));
|
|
21
27
|
}
|
|
22
28
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA4B;IAC3D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,aAAa,CAAgB;QACjC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAgB,qBAAqB,EAAE;YACtD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,CAAC;SACX,CAAC;QACF,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;YACvB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,CAAC,OAAO,cAAc,CAAC,CAAC;YAC3D,CAAC;YACD,yDAAyD;YACzD,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACvD,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb fields <collection> — display all field definitions for a collection.
|
|
3
|
+
* BET-181 Slice 2: Schema discovery for CLI agents (DEC-299).
|
|
4
|
+
* Chain: BET-181, STD-101 (SSOT — fields derive from collection doc, no hardcoded lists)
|
|
5
|
+
*/
|
|
6
|
+
export declare function runFields(options: {
|
|
7
|
+
collectionSlug: string;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/commands/fields.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,wBAAsB,SAAS,CAAC,OAAO,EAAE;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBlF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb fields <collection> — display all field definitions for a collection.
|
|
3
|
+
* BET-181 Slice 2: Schema discovery for CLI agents (DEC-299).
|
|
4
|
+
* Chain: BET-181, STD-101 (SSOT — fields derive from collection doc, no hardcoded lists)
|
|
5
|
+
*/
|
|
6
|
+
import { getConfigOrGuide } from '../lib/config.js';
|
|
7
|
+
import { mcpCall } from '../lib/client.js';
|
|
8
|
+
import { runCliCommand } from '../lib/runner.js';
|
|
9
|
+
import { formatFields } from '../formatters/fields.js';
|
|
10
|
+
export async function runFields(options) {
|
|
11
|
+
const config = await getConfigOrGuide(() => runFields(options));
|
|
12
|
+
if (!config)
|
|
13
|
+
return;
|
|
14
|
+
await runCliCommand({
|
|
15
|
+
fn: async () => {
|
|
16
|
+
const result = await mcpCall('chain.getCollectionFields', { slug: options.collectionSlug });
|
|
17
|
+
if (!result) {
|
|
18
|
+
throw new Error(`Collection '${options.collectionSlug}' not found. ` +
|
|
19
|
+
`Run 'pb fields' with a valid collection slug (e.g. bets, decisions, tensions).`);
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
},
|
|
23
|
+
formatPretty: (result) => formatFields(result),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/commands/fields.ts"],"names":[],"mappings":"AAAA;;;;GAIG;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,YAAY,EAA+B,MAAM,yBAAyB,CAAC;AAEpF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAmC;IACjE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,aAAa,CAAyB;QAC1C,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,2BAA2B,EAC3B,EAAE,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE,CACjC,CAAC;YACF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACb,eAAe,OAAO,CAAC,cAAc,eAAe;oBACpD,gFAAgF,CACjF,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC"}
|
package/dist/commands/get.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* pb get — display full entry by ID (data, relations, last 10 history events).
|
|
3
|
-
* BET-108 Slice 3.
|
|
3
|
+
* BET-108 Slice 3. BET-181 Slice 0: routes through runCliCommand for JSON-default output.
|
|
4
4
|
*/
|
|
5
5
|
export declare function runGet(options: {
|
|
6
6
|
entryId: string;
|
|
7
7
|
}): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* pb get-many — fetch multiple entries in parallel.
|
|
10
|
+
* Resolves TEN-703 context-loading gap for multi-agent orchestration startup.
|
|
11
|
+
*/
|
|
12
|
+
export declare function runGetMany(options: {
|
|
13
|
+
entryIds: string[];
|
|
14
|
+
}): Promise<void>;
|
|
8
15
|
//# sourceMappingURL=get.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/commands/get.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/commands/get.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,wBAAsB,MAAM,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxE;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2C/E"}
|