@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
package/dist/commands/orient.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* pb orient — prints workspace stage and all orient sections per ARCH-25.
|
|
3
|
+
* BET-181 Slice 0: routes through runCliCommand for JSON-default output.
|
|
3
4
|
*/
|
|
4
5
|
import { getConfigOrGuide } from '../lib/config.js';
|
|
5
6
|
import { mcpCall } from '../lib/client.js';
|
|
7
|
+
import { runCliCommand } from '../lib/runner.js';
|
|
6
8
|
import { formatOrient, formatOrientBrief } from '../formatters/orient.js';
|
|
7
9
|
function normalizeView(raw) {
|
|
8
10
|
return {
|
|
@@ -29,13 +31,16 @@ export async function runOrient(options = {}) {
|
|
|
29
31
|
const config = await getConfigOrGuide(() => runOrient(options));
|
|
30
32
|
if (!config)
|
|
31
33
|
return;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
await runCliCommand({
|
|
35
|
+
fn: async () => {
|
|
36
|
+
const raw = await mcpCall('chain.getOrientView', {});
|
|
37
|
+
// Normalize before output in any mode — ensures JSON keys are stable
|
|
38
|
+
// for agent consumers (optional sections become empty arrays, not absent).
|
|
39
|
+
return normalizeView(raw);
|
|
40
|
+
},
|
|
41
|
+
formatPretty: (view) => {
|
|
42
|
+
return options.brief ? formatOrientBrief(view) : formatOrient(view);
|
|
43
|
+
},
|
|
44
|
+
});
|
|
40
45
|
}
|
|
41
46
|
//# sourceMappingURL=orient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orient.js","sourceRoot":"","sources":["../../src/commands/orient.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"orient.js","sourceRoot":"","sources":["../../src/commands/orient.ts"],"names":[],"mappings":"AAAA;;;GAGG;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,EAAE,iBAAiB,EAAmB,MAAM,yBAAyB,CAAC;AA4D3F,SAAS,aAAa,CAAC,GAAsB;IAC3C,OAAO;QACL,GAAG,GAAG;QACN,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI;YAC5B,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,EAAE;SAClB;QACD,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE;QAC5B,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QAC9C,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;QAC9B,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE;QACxC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI;YAC9B,iBAAiB,EAAE,EAAE;YACrB,iBAAiB,EAAE,EAAE;YACrB,YAAY,EAAE,EAAE;SACjB;QACD,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;QACtC,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAA+B,EAAE;IAC/D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,aAAa,CAAa;QAC9B,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,GAAG,GAAG,MAAM,OAAO,CAAoB,qBAAqB,EAAE,EAAE,CAAC,CAAC;YACxE,qEAAqE;YACrE,2EAA2E;YAC3E,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb relate / pb unrelate — manage typed relations between Chain entries.
|
|
3
|
+
* Resolves TEN-704. Requires active session (DEC-9, BR-8).
|
|
4
|
+
* BET-181 Slice 0: routes through runCliCommand for JSON-default output.
|
|
5
|
+
* Thin client: relation type validation lives in Convex (BR-104).
|
|
6
|
+
*/
|
|
7
|
+
interface RelateOptions {
|
|
8
|
+
fromId: string;
|
|
9
|
+
type: string;
|
|
10
|
+
toId: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function runRelate(options: RelateOptions): Promise<void>;
|
|
13
|
+
export declare function runUnrelate(options: RelateOptions): Promise<void>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=relate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relate.d.ts","sourceRoot":"","sources":["../../src/commands/relate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AASD,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCrE;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCvE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb relate / pb unrelate — manage typed relations between Chain entries.
|
|
3
|
+
* Resolves TEN-704. Requires active session (DEC-9, BR-8).
|
|
4
|
+
* BET-181 Slice 0: routes through runCliCommand for JSON-default output.
|
|
5
|
+
* Thin client: relation type validation lives in Convex (BR-104).
|
|
6
|
+
*/
|
|
7
|
+
import { getConfigOrGuide } from '../lib/config.js';
|
|
8
|
+
import { mcpCallWithSession } from '../lib/client.js';
|
|
9
|
+
import { readSession } from '../lib/session.js';
|
|
10
|
+
import { runCliCommand } from '../lib/runner.js';
|
|
11
|
+
import { formatRelateReceipt, formatUnrelateReceipt } from '../formatters/relate.js';
|
|
12
|
+
export async function runRelate(options) {
|
|
13
|
+
const config = await getConfigOrGuide(() => runRelate(options));
|
|
14
|
+
if (!config)
|
|
15
|
+
return;
|
|
16
|
+
// Require active session
|
|
17
|
+
const session = readSession();
|
|
18
|
+
if (!session) {
|
|
19
|
+
process.stderr.write('No active session. Run `pb session start` first.\n');
|
|
20
|
+
process.stderr.write('Write access requires a tracked session (DEC-9).\n');
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
const fromId = options.fromId.trim();
|
|
24
|
+
const type = options.type.trim();
|
|
25
|
+
const toId = options.toId.trim();
|
|
26
|
+
if (!fromId || !type || !toId) {
|
|
27
|
+
process.stderr.write('All arguments required. Usage: pb relate <from-id> <type> <to-id>\n');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
await runCliCommand({
|
|
31
|
+
fn: async () => {
|
|
32
|
+
await mcpCallWithSession('chain.createEntryRelation', {
|
|
33
|
+
fromEntryId: fromId,
|
|
34
|
+
toEntryId: toId,
|
|
35
|
+
type,
|
|
36
|
+
});
|
|
37
|
+
return { fromId, type, toId, action: 'related' };
|
|
38
|
+
},
|
|
39
|
+
formatPretty: (result) => formatRelateReceipt(result),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export async function runUnrelate(options) {
|
|
43
|
+
const config = await getConfigOrGuide(() => runUnrelate(options));
|
|
44
|
+
if (!config)
|
|
45
|
+
return;
|
|
46
|
+
// Require active session
|
|
47
|
+
const session = readSession();
|
|
48
|
+
if (!session) {
|
|
49
|
+
process.stderr.write('No active session. Run `pb session start` first.\n');
|
|
50
|
+
process.stderr.write('Write access requires a tracked session (DEC-9).\n');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const fromId = options.fromId.trim();
|
|
54
|
+
const type = options.type.trim();
|
|
55
|
+
const toId = options.toId.trim();
|
|
56
|
+
if (!fromId || !type || !toId) {
|
|
57
|
+
process.stderr.write('All arguments required. Usage: pb unrelate <from-id> <type> <to-id>\n');
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
await runCliCommand({
|
|
61
|
+
fn: async () => {
|
|
62
|
+
await mcpCallWithSession('chain.removeEntryRelation', {
|
|
63
|
+
fromEntryId: fromId,
|
|
64
|
+
toEntryId: toId,
|
|
65
|
+
type,
|
|
66
|
+
});
|
|
67
|
+
return { fromId, type, toId, action: 'unrelated' };
|
|
68
|
+
},
|
|
69
|
+
formatPretty: (result) => formatUnrelateReceipt(result),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=relate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relate.js","sourceRoot":"","sources":["../../src/commands/relate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,wBAAsB,SAAS,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzE"}
|
package/dist/commands/search.js
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* pb search — full-text search across all collections via chain.searchEntries.
|
|
3
|
+
* BET-181 Slice 0: routes through runCliCommand for JSON-default output.
|
|
3
4
|
*/
|
|
4
5
|
import { getConfigOrGuide } from '../lib/config.js';
|
|
5
6
|
import { mcpCall } from '../lib/client.js';
|
|
7
|
+
import { runCliCommand } from '../lib/runner.js';
|
|
6
8
|
import { formatSearchResults } from '../formatters/search.js';
|
|
7
9
|
export async function runSearch(options) {
|
|
8
10
|
const config = await getConfigOrGuide(() => runSearch(options));
|
|
9
11
|
if (!config)
|
|
10
12
|
return;
|
|
11
|
-
|
|
12
|
-
query: options.query,
|
|
13
|
+
await runCliCommand({
|
|
14
|
+
fn: () => mcpCall('chain.searchEntries', { query: options.query }),
|
|
15
|
+
formatPretty: (results) => formatSearchResults(results ?? []),
|
|
13
16
|
});
|
|
14
|
-
console.log(formatSearchResults(results ?? []));
|
|
15
17
|
}
|
|
16
18
|
//# sourceMappingURL=search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;GAGG;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,EAAqB,MAAM,yBAAyB,CAAC;AAEjF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA0B;IACxD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,aAAa,CAAiB;QAClC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAiB,qBAAqB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QAClF,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,IAAI,EAAE,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb session start / close — CLI write session lifecycle.
|
|
3
|
+
* Opens a tracked agent session (DEC-9, BR-8) with clientKind: 'cli' (DEC-184).
|
|
4
|
+
* Session ID persisted to .productbrain/session.json (TEN-264 option 1).
|
|
5
|
+
* BET-181 Slice 0: uses isJsonMode() for output branching. Existing --json flag
|
|
6
|
+
* on session start preserved for backward compatibility.
|
|
7
|
+
*/
|
|
8
|
+
export declare function runSessionStart(options?: {
|
|
9
|
+
/** @deprecated Use global --json flag instead. Preserved for backward compatibility. */
|
|
10
|
+
json?: boolean;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* pb session id — print current session ID bare to stdout (machine-readable).
|
|
14
|
+
* Resolves TEN-707. Zero network call — reads local session.json only.
|
|
15
|
+
*/
|
|
16
|
+
export declare function runSessionId(): void;
|
|
17
|
+
export declare function runSessionClose(options?: {
|
|
18
|
+
force?: boolean;
|
|
19
|
+
}): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0BH,wBAAsB,eAAe,CAAC,OAAO,GAAE;IAC7C,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAA;CACV,GAAG,OAAO,CAAC,IAAI,CAAC,CAsErB;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAOnC;AAED,wBAAsB,eAAe,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDtF"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb session start / close — CLI write session lifecycle.
|
|
3
|
+
* Opens a tracked agent session (DEC-9, BR-8) with clientKind: 'cli' (DEC-184).
|
|
4
|
+
* Session ID persisted to .productbrain/session.json (TEN-264 option 1).
|
|
5
|
+
* BET-181 Slice 0: uses isJsonMode() for output branching. Existing --json flag
|
|
6
|
+
* on session start preserved for backward compatibility.
|
|
7
|
+
*/
|
|
8
|
+
import { getConfigOrGuide } from '../lib/config.js';
|
|
9
|
+
import { mcpCall } from '../lib/client.js';
|
|
10
|
+
import { readSession, writeSession, clearSession } from '../lib/session.js';
|
|
11
|
+
import { isJsonMode } from '../lib/runner.js';
|
|
12
|
+
import { formatSessionStart, formatSessionClose } from '../formatters/session.js';
|
|
13
|
+
import { runHandshake } from './handshake.js';
|
|
14
|
+
export async function runSessionStart(options = {}) {
|
|
15
|
+
const config = await getConfigOrGuide(() => runSessionStart(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
|
+
// Check for existing session
|
|
21
|
+
const existing = readSession();
|
|
22
|
+
if (existing) {
|
|
23
|
+
if (json) {
|
|
24
|
+
process.stdout.write(JSON.stringify({
|
|
25
|
+
sessionId: existing.sessionId,
|
|
26
|
+
workspaceName: existing.workspaceName,
|
|
27
|
+
startedAt: existing.startedAt,
|
|
28
|
+
alreadyActive: true,
|
|
29
|
+
}) + '\n');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
process.stdout.write(`Session already active: ${existing.sessionId}\n`);
|
|
33
|
+
process.stdout.write(`Started: ${existing.startedAt}\n`);
|
|
34
|
+
process.stdout.write(`Entries captured: ${existing.entriesCaptured.length}\n`);
|
|
35
|
+
process.stdout.write('\n');
|
|
36
|
+
process.stdout.write('Run `pb session close` to end it, or `pb session close --force` to force-close.\n');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// Resolve workspace + keyId
|
|
40
|
+
const workspace = await mcpCall('resolveWorkspace', {});
|
|
41
|
+
if (!workspace?.keyId) {
|
|
42
|
+
throw new Error('API key has read-only scope. Write operations require a readwrite key.\n' +
|
|
43
|
+
'Generate one: Product Brain app → Settings → API Keys.');
|
|
44
|
+
}
|
|
45
|
+
// Start agent session with clientKind attribution (DEC-184)
|
|
46
|
+
if (!json)
|
|
47
|
+
process.stdout.write('Starting session...\n');
|
|
48
|
+
const result = await mcpCall('agent.startSession', {
|
|
49
|
+
workspaceId: workspace._id,
|
|
50
|
+
apiKeyId: workspace.keyId,
|
|
51
|
+
clientKind: 'cli',
|
|
52
|
+
});
|
|
53
|
+
// Persist session state
|
|
54
|
+
const state = {
|
|
55
|
+
sessionId: result.sessionId,
|
|
56
|
+
workspaceId: workspace._id,
|
|
57
|
+
workspaceName: result.workspaceName,
|
|
58
|
+
startedAt: new Date().toISOString(),
|
|
59
|
+
entriesCaptured: [],
|
|
60
|
+
};
|
|
61
|
+
writeSession(state);
|
|
62
|
+
if (json) {
|
|
63
|
+
process.stdout.write(JSON.stringify({
|
|
64
|
+
sessionId: state.sessionId,
|
|
65
|
+
workspaceName: state.workspaceName,
|
|
66
|
+
startedAt: state.startedAt,
|
|
67
|
+
}) + '\n');
|
|
68
|
+
// Refresh silently in JSON mode
|
|
69
|
+
await runHandshake({ force: false, dryRun: false, quiet: true });
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
process.stdout.write(formatSessionStart(state, result.superseded) + '\n');
|
|
73
|
+
// Refresh context files
|
|
74
|
+
process.stdout.write('Refreshing context...\n');
|
|
75
|
+
await runHandshake({ force: false, dryRun: false });
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* pb session id — print current session ID bare to stdout (machine-readable).
|
|
79
|
+
* Resolves TEN-707. Zero network call — reads local session.json only.
|
|
80
|
+
*/
|
|
81
|
+
export function runSessionId() {
|
|
82
|
+
const session = readSession();
|
|
83
|
+
if (!session) {
|
|
84
|
+
process.stderr.write('No active session. Run `pb session start` first.\n');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
process.stdout.write(session.sessionId + '\n');
|
|
88
|
+
}
|
|
89
|
+
export async function runSessionClose(options = {}) {
|
|
90
|
+
const config = await getConfigOrGuide(() => runSessionClose(options));
|
|
91
|
+
if (!config)
|
|
92
|
+
return;
|
|
93
|
+
const session = readSession();
|
|
94
|
+
if (!session) {
|
|
95
|
+
process.stdout.write('No active session. Run `pb session start` to begin.\n');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Record wrapup metrics
|
|
99
|
+
const entriesCount = session.entriesCaptured.length;
|
|
100
|
+
if (entriesCount > 0) {
|
|
101
|
+
try {
|
|
102
|
+
await mcpCall('agent.recordWrapup', {
|
|
103
|
+
sessionId: session.sessionId,
|
|
104
|
+
draftsReviewed: entriesCount,
|
|
105
|
+
draftsCommitted: 0, // CLI captures are drafts; user commits in Studio
|
|
106
|
+
linksCreated: 0,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
// Wrapup recording is non-critical — don't block close
|
|
111
|
+
process.stdout.write(`Note: wrapup recording skipped (${err instanceof Error ? err.message : 'unknown error'})\n`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Close the session
|
|
115
|
+
try {
|
|
116
|
+
await mcpCall('agent.closeSession', {
|
|
117
|
+
sessionId: session.sessionId,
|
|
118
|
+
status: 'closed',
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
if (!options.force) {
|
|
123
|
+
throw new Error(`Failed to close session: ${err instanceof Error ? err.message : String(err)}\n` +
|
|
124
|
+
'Use `pb session close --force` to clear local state anyway.');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
process.stdout.write(formatSessionClose(session) + '\n');
|
|
128
|
+
// Clear local state
|
|
129
|
+
clearSession();
|
|
130
|
+
// Refresh context files so next session starts with updated knowledge
|
|
131
|
+
process.stdout.write('Refreshing context...\n');
|
|
132
|
+
await runHandshake({ force: false, dryRun: false });
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb update <entry-id> — update fields on existing Chain entries.
|
|
3
|
+
* Resolves TEN-703. Requires active session (DEC-9, BR-8).
|
|
4
|
+
* BET-181 Slice 0: uses isJsonMode() for output branching.
|
|
5
|
+
* Thin client: validation lives in Convex (BR-104).
|
|
6
|
+
*/
|
|
7
|
+
interface UpdateOptions {
|
|
8
|
+
entryId: string;
|
|
9
|
+
field?: string[];
|
|
10
|
+
name?: string;
|
|
11
|
+
status?: string;
|
|
12
|
+
note?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function runUpdate(options: UpdateOptions): Promise<void>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAiCD,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgErE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb update <entry-id> — update fields on existing Chain entries.
|
|
3
|
+
* Resolves TEN-703. Requires active session (DEC-9, BR-8).
|
|
4
|
+
* BET-181 Slice 0: uses isJsonMode() for output branching.
|
|
5
|
+
* Thin client: validation lives in Convex (BR-104).
|
|
6
|
+
*/
|
|
7
|
+
import { getConfigOrGuide } from '../lib/config.js';
|
|
8
|
+
import { mcpCallWithSession } from '../lib/client.js';
|
|
9
|
+
import { readSession } from '../lib/session.js';
|
|
10
|
+
import { isJsonMode } from '../lib/runner.js';
|
|
11
|
+
import { stripConvexInternals } from '../lib/strip.js';
|
|
12
|
+
import { formatUpdateReceipt } from '../formatters/update.js';
|
|
13
|
+
/**
|
|
14
|
+
* Parse --field key=value pairs into a data object.
|
|
15
|
+
* Splits on first `=` only to handle values containing `=`.
|
|
16
|
+
*/
|
|
17
|
+
function parseFields(fields) {
|
|
18
|
+
const data = {};
|
|
19
|
+
for (const f of fields) {
|
|
20
|
+
const eqIndex = f.indexOf('=');
|
|
21
|
+
if (eqIndex === -1) {
|
|
22
|
+
throw new Error(`Invalid --field format: "${f}". Expected key=value.`);
|
|
23
|
+
}
|
|
24
|
+
const key = f.slice(0, eqIndex).trim();
|
|
25
|
+
const value = f.slice(eqIndex + 1).trim();
|
|
26
|
+
if (!key) {
|
|
27
|
+
throw new Error(`Invalid --field format: "${f}". Key cannot be empty.`);
|
|
28
|
+
}
|
|
29
|
+
data[key] = value;
|
|
30
|
+
}
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
export async function runUpdate(options) {
|
|
34
|
+
const config = await getConfigOrGuide(() => runUpdate(options));
|
|
35
|
+
if (!config)
|
|
36
|
+
return;
|
|
37
|
+
const json = isJsonMode();
|
|
38
|
+
// Require active session (DEC-9, BR-8)
|
|
39
|
+
const session = readSession();
|
|
40
|
+
if (!session) {
|
|
41
|
+
process.stderr.write('No active session. Run `pb session start` first.\n');
|
|
42
|
+
process.stderr.write('Write access requires a tracked session (DEC-9).\n');
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
// Validate entryId
|
|
46
|
+
const entryId = options.entryId.trim();
|
|
47
|
+
if (!entryId) {
|
|
48
|
+
process.stderr.write('Entry ID is required. Usage: pb update <entry-id> [options]\n');
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
// Build update args
|
|
52
|
+
const args = { entryId };
|
|
53
|
+
if (options.name) {
|
|
54
|
+
args.name = options.name;
|
|
55
|
+
}
|
|
56
|
+
if (options.status) {
|
|
57
|
+
args.status = options.status;
|
|
58
|
+
}
|
|
59
|
+
if (options.field && options.field.length > 0) {
|
|
60
|
+
args.data = parseFields(options.field);
|
|
61
|
+
}
|
|
62
|
+
if (options.note) {
|
|
63
|
+
args.changeNote = options.note;
|
|
64
|
+
}
|
|
65
|
+
// Must have at least one thing to update
|
|
66
|
+
if (!options.name && !options.status && (!options.field || options.field.length === 0)) {
|
|
67
|
+
process.stderr.write('Nothing to update. Provide at least one of: --field, --name, --status\n');
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
if (!json)
|
|
71
|
+
process.stdout.write(`Updating ${entryId}...\n`);
|
|
72
|
+
const result = await mcpCallWithSession('chain.updateEntry', args);
|
|
73
|
+
if (json) {
|
|
74
|
+
process.stdout.write(JSON.stringify(stripConvexInternals(result)) + '\n');
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
process.stdout.write('\n');
|
|
78
|
+
process.stdout.write(formatUpdateReceipt({
|
|
79
|
+
entryId,
|
|
80
|
+
changeNote: options.note,
|
|
81
|
+
fieldsChanged: options.field ?? [],
|
|
82
|
+
name: options.name,
|
|
83
|
+
status: options.status,
|
|
84
|
+
normalizationWarnings: result.normalizationWarnings ?? [],
|
|
85
|
+
validationWarnings: result.validationWarnings ?? [],
|
|
86
|
+
}) + '\n');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capture receipt formatter — rich feedback per FEAT-126.
|
|
3
|
+
* Shows entry ID, collection, confidence, warnings, and correction hint.
|
|
4
|
+
*/
|
|
5
|
+
export interface CaptureReceiptData {
|
|
6
|
+
entryId: string;
|
|
7
|
+
name: string;
|
|
8
|
+
collection: string;
|
|
9
|
+
status: string;
|
|
10
|
+
classification: {
|
|
11
|
+
collection: string;
|
|
12
|
+
confidence: number;
|
|
13
|
+
tier: string;
|
|
14
|
+
alternatives?: Array<{
|
|
15
|
+
collection: string;
|
|
16
|
+
confidence: number;
|
|
17
|
+
}>;
|
|
18
|
+
reasoning?: string;
|
|
19
|
+
} | null;
|
|
20
|
+
warnings?: string[];
|
|
21
|
+
normalization?: {
|
|
22
|
+
remapped: Record<string, unknown>;
|
|
23
|
+
rejected: Record<string, unknown>;
|
|
24
|
+
accepted: Record<string, unknown>;
|
|
25
|
+
};
|
|
26
|
+
linkedTo?: string;
|
|
27
|
+
relationType?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function formatCaptureReceipt(data: CaptureReceiptData): string;
|
|
30
|
+
//# sourceMappingURL=capture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/formatters/capture.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,CAAC,EAAE,KAAK,CAAC;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACjE,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CA2DrE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capture receipt formatter — rich feedback per FEAT-126.
|
|
3
|
+
* Shows entry ID, collection, confidence, warnings, and correction hint.
|
|
4
|
+
*/
|
|
5
|
+
export function formatCaptureReceipt(data) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
// Entry ID and status
|
|
8
|
+
lines.push(`→ ${data.entryId} captured as ${data.status}`);
|
|
9
|
+
// Collection and classification
|
|
10
|
+
if (data.classification) {
|
|
11
|
+
const conf = data.classification.tier ?? 'unknown';
|
|
12
|
+
lines.push(` Collection: ${data.collection} (confidence: ${conf})`);
|
|
13
|
+
if (data.classification.reasoning) {
|
|
14
|
+
lines.push(` Reasoning: ${data.classification.reasoning.slice(0, 120)}${data.classification.reasoning.length > 120 ? '…' : ''}`);
|
|
15
|
+
}
|
|
16
|
+
if (data.classification.alternatives && data.classification.alternatives.length > 0) {
|
|
17
|
+
const alts = data.classification.alternatives
|
|
18
|
+
.slice(0, 3)
|
|
19
|
+
.map((a) => a.collection)
|
|
20
|
+
.join(', ');
|
|
21
|
+
lines.push(` Alternatives: ${alts}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
lines.push(` Collection: ${data.collection} (explicit)`);
|
|
26
|
+
}
|
|
27
|
+
// Name
|
|
28
|
+
lines.push(` Name: ${data.name.slice(0, 100)}${data.name.length > 100 ? '…' : ''}`);
|
|
29
|
+
// Warnings
|
|
30
|
+
if (data.warnings && data.warnings.length > 0) {
|
|
31
|
+
lines.push('');
|
|
32
|
+
for (const w of data.warnings) {
|
|
33
|
+
lines.push(` Warning: ${w}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Normalization info
|
|
37
|
+
if (data.normalization) {
|
|
38
|
+
const remapped = Object.keys(data.normalization.remapped ?? {});
|
|
39
|
+
const rejected = Object.keys(data.normalization.rejected ?? {});
|
|
40
|
+
if (remapped.length > 0) {
|
|
41
|
+
lines.push(` Remapped fields: ${remapped.join(', ')}`);
|
|
42
|
+
}
|
|
43
|
+
if (rejected.length > 0) {
|
|
44
|
+
lines.push(` Rejected fields: ${rejected.join(', ')}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Link info
|
|
48
|
+
if (data.linkedTo) {
|
|
49
|
+
lines.push('');
|
|
50
|
+
lines.push(` Linked: → ${data.linkedTo} (${data.relationType ?? 'surfaces_tension_in'})`);
|
|
51
|
+
}
|
|
52
|
+
// Correction hint
|
|
53
|
+
lines.push('');
|
|
54
|
+
lines.push(` View: pb get ${data.entryId}`);
|
|
55
|
+
lines.push(` Wrong collection? Recapture with: pb capture --collection <slug> --name "..." --description "..."`);
|
|
56
|
+
return lines.join('\n');
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/formatters/capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constellation formatter — grouped relation view for pb constellation <entry-id>.
|
|
3
|
+
* BET-181 Slice 3: human-readable grouped view for TTY; JSON handled by runner.
|
|
4
|
+
*
|
|
5
|
+
* Chain: STD-65 (structured, parseable, minimal), DEC-299 (agent-native output)
|
|
6
|
+
*
|
|
7
|
+
* Relation types are derived from the server response — never hardcoded here.
|
|
8
|
+
* The formatter renders whatever relation types the query returns.
|
|
9
|
+
*/
|
|
10
|
+
export interface ConstellationRelatedEntry {
|
|
11
|
+
entryId: string | null;
|
|
12
|
+
name: string;
|
|
13
|
+
collectionSlug: string;
|
|
14
|
+
collectionName: string;
|
|
15
|
+
direction: 'outgoing' | 'incoming';
|
|
16
|
+
}
|
|
17
|
+
export interface ConstellationResult {
|
|
18
|
+
entry: {
|
|
19
|
+
entryId: string | null;
|
|
20
|
+
name: string;
|
|
21
|
+
collectionSlug: string;
|
|
22
|
+
collectionName: string;
|
|
23
|
+
status: string;
|
|
24
|
+
};
|
|
25
|
+
/** Keys are relation type strings (e.g. 'part_of', 'informed_by'). Derived from server. */
|
|
26
|
+
relations: Record<string, ConstellationRelatedEntry[]>;
|
|
27
|
+
summary: {
|
|
28
|
+
totalRelations: number;
|
|
29
|
+
relationTypes: string[];
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** Format constellation for terminal (readable grouped output). */
|
|
33
|
+
export declare function formatConstellation(result: ConstellationResult): string;
|
|
34
|
+
//# sourceMappingURL=constellation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constellation.d.ts","sourceRoot":"","sources":["../../src/formatters/constellation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,2FAA2F;IAC3F,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAC;IACvD,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;CACH;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CA+BvE"}
|