@productbrain/cli 0.1.0-beta.1 → 0.1.0-beta.15
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 +167 -0
- package/dist/__tests__/audit.test.d.ts +2 -0
- package/dist/__tests__/audit.test.d.ts.map +1 -0
- package/dist/__tests__/audit.test.js +394 -0
- package/dist/__tests__/audit.test.js.map +1 -0
- 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__/context-strategy.test.d.ts +2 -0
- package/dist/__tests__/context-strategy.test.d.ts.map +1 -0
- package/dist/__tests__/context-strategy.test.js +79 -0
- package/dist/__tests__/context-strategy.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__/ingest.test.d.ts +2 -0
- package/dist/__tests__/ingest.test.d.ts.map +1 -0
- package/dist/__tests__/ingest.test.js +185 -0
- package/dist/__tests__/ingest.test.js.map +1 -0
- package/dist/__tests__/promote.test.d.ts +2 -0
- package/dist/__tests__/promote.test.d.ts.map +1 -0
- package/dist/__tests__/promote.test.js +139 -0
- package/dist/__tests__/promote.test.js.map +1 -0
- package/dist/__tests__/proposals.test.d.ts +2 -0
- package/dist/__tests__/proposals.test.d.ts.map +1 -0
- package/dist/__tests__/proposals.test.js +190 -0
- package/dist/__tests__/proposals.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 +105 -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 +237 -0
- package/dist/__tests__/update.test.js.map +1 -0
- package/dist/commands/accept.d.ts +18 -0
- package/dist/commands/accept.d.ts.map +1 -0
- package/dist/commands/accept.js +72 -0
- package/dist/commands/accept.js.map +1 -0
- package/dist/commands/audit.d.ts +25 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +188 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/brand-pack.d.ts +2 -0
- package/dist/commands/brand-pack.d.ts.map +1 -0
- package/dist/commands/brand-pack.js +25 -0
- package/dist/commands/brand-pack.js.map +1 -0
- package/dist/commands/brief.d.ts +28 -0
- package/dist/commands/brief.d.ts.map +1 -0
- package/dist/commands/brief.js +70 -0
- package/dist/commands/brief.js.map +1 -0
- package/dist/commands/capture.d.ts +25 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +103 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/chain-walk.d.ts +14 -0
- package/dist/commands/chain-walk.d.ts.map +1 -0
- package/dist/commands/chain-walk.js +33 -0
- package/dist/commands/chain-walk.js.map +1 -0
- package/dist/commands/changes.d.ts +11 -0
- package/dist/commands/changes.d.ts.map +1 -0
- package/dist/commands/changes.js +41 -0
- package/dist/commands/changes.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 +19 -9
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/cross-cut.d.ts +11 -0
- package/dist/commands/cross-cut.d.ts.map +1 -0
- package/dist/commands/cross-cut.js +23 -0
- package/dist/commands/cross-cut.js.map +1 -0
- 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 +55 -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 +14 -0
- package/dist/commands/ingest.d.ts.map +1 -0
- package/dist/commands/ingest.js +181 -0
- package/dist/commands/ingest.js.map +1 -0
- package/dist/commands/login.d.ts +5 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +53 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/orient.d.ts +2 -0
- package/dist/commands/orient.d.ts.map +1 -1
- package/dist/commands/orient.js +17 -8
- package/dist/commands/orient.js.map +1 -1
- package/dist/commands/promote.d.ts +12 -0
- package/dist/commands/promote.d.ts.map +1 -0
- package/dist/commands/promote.js +48 -0
- package/dist/commands/promote.js.map +1 -0
- package/dist/commands/proposals.d.ts +9 -0
- package/dist/commands/proposals.d.ts.map +1 -0
- package/dist/commands/proposals.js +24 -0
- package/dist/commands/proposals.js.map +1 -0
- package/dist/commands/reject.d.ts +14 -0
- package/dist/commands/reject.d.ts.map +1 -0
- package/dist/commands/reject.js +37 -0
- package/dist/commands/reject.js.map +1 -0
- package/dist/commands/relate.d.ts +16 -0
- package/dist/commands/relate.d.ts.map +1 -0
- package/dist/commands/relate.js +80 -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 +9 -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 +139 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +13 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +43 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/formatters/audit.d.ts +46 -0
- package/dist/formatters/audit.d.ts.map +1 -0
- package/dist/formatters/audit.js +81 -0
- package/dist/formatters/audit.js.map +1 -0
- package/dist/formatters/brief.d.ts +112 -0
- package/dist/formatters/brief.d.ts.map +1 -0
- package/dist/formatters/brief.js +179 -0
- package/dist/formatters/brief.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/chain-walk.d.ts +33 -0
- package/dist/formatters/chain-walk.d.ts.map +1 -0
- package/dist/formatters/chain-walk.js +54 -0
- package/dist/formatters/chain-walk.js.map +1 -0
- package/dist/formatters/changes.d.ts +25 -0
- package/dist/formatters/changes.d.ts.map +1 -0
- package/dist/formatters/changes.js +60 -0
- package/dist/formatters/changes.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/cross-cut.d.ts +21 -0
- package/dist/formatters/cross-cut.d.ts.map +1 -0
- package/dist/formatters/cross-cut.js +32 -0
- package/dist/formatters/cross-cut.js.map +1 -0
- package/dist/formatters/entry.d.ts +11 -0
- package/dist/formatters/entry.d.ts.map +1 -1
- package/dist/formatters/entry.js +14 -1
- package/dist/formatters/entry.js.map +1 -1
- 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/orient.d.ts +1 -0
- package/dist/formatters/orient.d.ts.map +1 -1
- package/dist/formatters/orient.js +4 -2
- package/dist/formatters/orient.js.map +1 -1
- package/dist/formatters/promote.d.ts +29 -0
- package/dist/formatters/promote.d.ts.map +1 -0
- package/dist/formatters/promote.js +38 -0
- package/dist/formatters/promote.js.map +1 -0
- package/dist/formatters/proposals.d.ts +45 -0
- package/dist/formatters/proposals.d.ts.map +1 -0
- package/dist/formatters/proposals.js +62 -0
- package/dist/formatters/proposals.js.map +1 -0
- package/dist/formatters/relate.d.ts +12 -0
- package/dist/formatters/relate.d.ts.map +1 -0
- package/dist/formatters/relate.js +13 -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/formatters/verify.d.ts +11 -0
- package/dist/formatters/verify.d.ts.map +1 -0
- package/dist/formatters/verify.js +11 -0
- package/dist/formatters/verify.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 +466 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts +34 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +114 -9
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/config.d.ts +19 -2
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +95 -14
- package/dist/lib/config.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 +8 -4
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb audit <BET-ID> [BET-ID...] — automated STD-113 hygiene checker.
|
|
3
|
+
* BET-182 Slice 2: CLI command + auto-fix.
|
|
4
|
+
*
|
|
5
|
+
* Calls chain.auditBet via MCP, formats result for TTY or JSON,
|
|
6
|
+
* and exits with code based on verdict:
|
|
7
|
+
* 0 = pass, 1 = fail, 2 = warn, 3 = error
|
|
8
|
+
*
|
|
9
|
+
* Flags:
|
|
10
|
+
* --phase shaping|handoff — override phase detection
|
|
11
|
+
* --gate gate-name — run only specified gate(s), repeatable
|
|
12
|
+
* --fix — auto-execute "exact" fixType fixes via pb update
|
|
13
|
+
* --verbose — show all gates including PASS detail
|
|
14
|
+
*
|
|
15
|
+
* Chain: BET-182, STD-113, STD-65 (structured output), STD-101
|
|
16
|
+
*/
|
|
17
|
+
import { getConfigOrGuide } from '../lib/config.js';
|
|
18
|
+
import { mcpCall, mcpCallWithSession } from '../lib/client.js';
|
|
19
|
+
import { isJsonMode } from '../lib/runner.js';
|
|
20
|
+
import { readSession } from '../lib/session.js';
|
|
21
|
+
import { stripConvexInternals } from '../lib/strip.js';
|
|
22
|
+
import { formatAudit, formatBatchSummary } from '../formatters/audit.js';
|
|
23
|
+
// Exit codes
|
|
24
|
+
const EXIT_PASS = 0;
|
|
25
|
+
const EXIT_FAIL = 1;
|
|
26
|
+
const EXIT_WARN = 2;
|
|
27
|
+
const EXIT_ERROR = 3;
|
|
28
|
+
function parseExactFixes(entryId, gates) {
|
|
29
|
+
const actions = [];
|
|
30
|
+
for (const gate of gates) {
|
|
31
|
+
if (gate.status !== 'fail' && gate.status !== 'warn')
|
|
32
|
+
continue;
|
|
33
|
+
if (gate.fixType !== 'exact' || !gate.fix)
|
|
34
|
+
continue;
|
|
35
|
+
// Parse "Set field '<key>' to '<value>'" pattern
|
|
36
|
+
const fieldMatch = gate.fix.match(/^Set field '([^']+)' to '([^']+)'$/);
|
|
37
|
+
if (fieldMatch) {
|
|
38
|
+
actions.push({
|
|
39
|
+
type: 'field',
|
|
40
|
+
entryId,
|
|
41
|
+
fieldKey: fieldMatch[1],
|
|
42
|
+
fieldValue: fieldMatch[2],
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return actions;
|
|
47
|
+
}
|
|
48
|
+
async function executeFixActions(actions, json) {
|
|
49
|
+
let applied = 0;
|
|
50
|
+
for (const action of actions) {
|
|
51
|
+
if (action.type === 'field') {
|
|
52
|
+
try {
|
|
53
|
+
await mcpCallWithSession('chain.updateEntry', {
|
|
54
|
+
entryId: action.entryId,
|
|
55
|
+
data: { [action.fieldKey]: action.fieldValue },
|
|
56
|
+
changeNote: `Auto-fix via pb audit: set ${action.fieldKey}`,
|
|
57
|
+
});
|
|
58
|
+
applied++;
|
|
59
|
+
if (!json) {
|
|
60
|
+
process.stderr.write(` Fixed: ${action.fieldKey} = ${action.fieldValue}\n`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
65
|
+
if (!json) {
|
|
66
|
+
process.stderr.write(` Fix failed (${action.fieldKey}): ${msg}\n`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return applied;
|
|
72
|
+
}
|
|
73
|
+
// ─── Single audit ───────────────────────────────────────────────────────────
|
|
74
|
+
async function auditOne(entryId, options) {
|
|
75
|
+
const { phase, gate: gateFilter, fix, verbose } = options;
|
|
76
|
+
const json = isJsonMode();
|
|
77
|
+
// Build MCP args
|
|
78
|
+
const args = { entryId };
|
|
79
|
+
if (phase)
|
|
80
|
+
args.phase = phase;
|
|
81
|
+
let result;
|
|
82
|
+
try {
|
|
83
|
+
result = await mcpCall('chain.auditBet', args);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
87
|
+
if (json) {
|
|
88
|
+
process.stderr.write(JSON.stringify({ error: msg, entryId }) + '\n');
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
process.stderr.write(`Error auditing ${entryId}: ${msg}\n`);
|
|
92
|
+
}
|
|
93
|
+
return { result: null, exitCode: EXIT_ERROR };
|
|
94
|
+
}
|
|
95
|
+
// --fix: auto-execute exact fixes, then rerun once
|
|
96
|
+
if (fix) {
|
|
97
|
+
const session = readSession();
|
|
98
|
+
if (!session) {
|
|
99
|
+
if (!json) {
|
|
100
|
+
process.stderr.write('--fix requires an active session. Run `pb session start` first.\n');
|
|
101
|
+
}
|
|
102
|
+
// Still show the result, just skip fixing
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
const exactFixes = parseExactFixes(entryId, result.gates);
|
|
106
|
+
if (exactFixes.length > 0) {
|
|
107
|
+
if (!json)
|
|
108
|
+
process.stderr.write(`\nAuto-fixing ${exactFixes.length} issue(s) on ${entryId}...\n`);
|
|
109
|
+
const applied = await executeFixActions(exactFixes, json);
|
|
110
|
+
if (applied > 0) {
|
|
111
|
+
// Rerun audit once after fixes
|
|
112
|
+
if (!json)
|
|
113
|
+
process.stderr.write(`\nRe-auditing ${entryId} after ${applied} fix(es)...\n`);
|
|
114
|
+
try {
|
|
115
|
+
result = await mcpCall('chain.auditBet', args);
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
119
|
+
if (!json)
|
|
120
|
+
process.stderr.write(`Re-audit failed: ${msg}\n`);
|
|
121
|
+
// Use original result
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Output
|
|
128
|
+
if (json) {
|
|
129
|
+
// Apply gate filter for JSON output too
|
|
130
|
+
const output = { ...stripConvexInternals(result) };
|
|
131
|
+
if (gateFilter && gateFilter.length > 0) {
|
|
132
|
+
output.gates = result.gates.filter((g) => gateFilter.includes(g.gate));
|
|
133
|
+
}
|
|
134
|
+
process.stdout.write(JSON.stringify(output) + '\n');
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
process.stdout.write(formatAudit(result, { verbose, gateFilter }) + '\n');
|
|
138
|
+
}
|
|
139
|
+
// Map verdict to exit code
|
|
140
|
+
const exitCode = result.verdict === 'pass' ? EXIT_PASS
|
|
141
|
+
: result.verdict === 'fail' ? EXIT_FAIL
|
|
142
|
+
: EXIT_WARN;
|
|
143
|
+
return { result, exitCode };
|
|
144
|
+
}
|
|
145
|
+
// ─── Entry point ────────────────────────────────────────────────────────────
|
|
146
|
+
export async function runAudit(options) {
|
|
147
|
+
const config = await getConfigOrGuide(() => runAudit(options));
|
|
148
|
+
if (!config)
|
|
149
|
+
return;
|
|
150
|
+
const { entryIds, ...rest } = options;
|
|
151
|
+
if (entryIds.length === 1) {
|
|
152
|
+
// Single audit
|
|
153
|
+
const { exitCode } = await auditOne(entryIds[0], rest);
|
|
154
|
+
process.exit(exitCode);
|
|
155
|
+
}
|
|
156
|
+
// Batch mode: audit multiple bets sequentially
|
|
157
|
+
const json = isJsonMode();
|
|
158
|
+
const results = [];
|
|
159
|
+
let worstExit = EXIT_PASS;
|
|
160
|
+
for (const entryId of entryIds) {
|
|
161
|
+
const { result, exitCode } = await auditOne(entryId, rest);
|
|
162
|
+
if (result)
|
|
163
|
+
results.push(result);
|
|
164
|
+
if (exitCode > worstExit)
|
|
165
|
+
worstExit = exitCode;
|
|
166
|
+
// Separator between entries in TTY mode
|
|
167
|
+
if (!json && entryIds.indexOf(entryId) < entryIds.length - 1) {
|
|
168
|
+
process.stdout.write('\n---\n\n');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Batch summary
|
|
172
|
+
if (results.length > 1) {
|
|
173
|
+
if (json) {
|
|
174
|
+
process.stdout.write(JSON.stringify({
|
|
175
|
+
batch: true,
|
|
176
|
+
count: results.length,
|
|
177
|
+
passed: results.filter((r) => r.verdict === 'pass').length,
|
|
178
|
+
failed: results.filter((r) => r.verdict === 'fail').length,
|
|
179
|
+
warned: results.filter((r) => r.verdict === 'warn').length,
|
|
180
|
+
}) + '\n');
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
process.stdout.write(formatBatchSummary(results) + '\n');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
process.exit(worstExit);
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-pack.d.ts","sourceRoot":"","sources":["../../src/commands/brand-pack.ts"],"names":[],"mappings":"AAeA,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAaxD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin wrapper: forwards argv to repo scripts/brand-pack.mjs (internal marketing, OpenRouter).
|
|
3
|
+
* Not a Chain feature — no session required.
|
|
4
|
+
*/
|
|
5
|
+
import { spawnSync } from 'node:child_process';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { dirname, resolve } from 'node:path';
|
|
8
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
/** dist/commands -> dist -> packages/cli -> packages -> repo root */
|
|
10
|
+
function repoRootFromCliCommands() {
|
|
11
|
+
return resolve(__dirname, '../../../..');
|
|
12
|
+
}
|
|
13
|
+
export function runBrandPack(processArgv) {
|
|
14
|
+
const idx = processArgv.findIndex((a) => a === 'brand-pack');
|
|
15
|
+
const forwarded = idx >= 0 ? processArgv.slice(idx + 1) : [];
|
|
16
|
+
const root = repoRootFromCliCommands();
|
|
17
|
+
const script = resolve(root, 'scripts/brand-pack.mjs');
|
|
18
|
+
const result = spawnSync(process.execPath, [script, ...forwarded], {
|
|
19
|
+
cwd: root,
|
|
20
|
+
stdio: 'inherit',
|
|
21
|
+
env: process.env,
|
|
22
|
+
});
|
|
23
|
+
process.exit(result.status === null ? 1 : result.status);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=brand-pack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-pack.js","sourceRoot":"","sources":["../../src/commands/brand-pack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,qEAAqE;AACrE,SAAS,uBAAuB;IAC/B,OAAO,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAqB;IACjD,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE;QAClE,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;KAChB,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb brief — incremental brief delta or compound intelligence query.
|
|
3
|
+
* BET-239 Slice 4 (incremental) + Slice 5 (compound queries).
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* pb brief --skill <name> --since-last — incremental delta for a skill (E4)
|
|
7
|
+
* pb brief steering — compound steering brief (E6)
|
|
8
|
+
* pb brief confidence — compound confidence pass (E6)
|
|
9
|
+
* pb brief delta [--since <ISO>] — compound delta sync (E6)
|
|
10
|
+
*
|
|
11
|
+
* Chain: DEC-299 (agent-native, JSON-default), STD-65 (structured, parseable, minimal)
|
|
12
|
+
*/
|
|
13
|
+
declare const COMPOUND_TYPES: readonly ["steering", "confidence", "delta"];
|
|
14
|
+
type CompoundType = (typeof COMPOUND_TYPES)[number];
|
|
15
|
+
declare function isCompoundType(value: string): value is CompoundType;
|
|
16
|
+
/** Run incremental brief for a skill (existing E4 behavior). */
|
|
17
|
+
export declare function runBrief(options: {
|
|
18
|
+
skill: string;
|
|
19
|
+
sinceLast?: boolean;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
/** Run compound brief query (E6 — steering, confidence, delta). */
|
|
22
|
+
export declare function runCompoundBrief(options: {
|
|
23
|
+
type: CompoundType;
|
|
24
|
+
since?: string;
|
|
25
|
+
}): Promise<void>;
|
|
26
|
+
export { isCompoundType, COMPOUND_TYPES };
|
|
27
|
+
export type { CompoundType };
|
|
28
|
+
//# sourceMappingURL=brief.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brief.d.ts","sourceRoot":"","sources":["../../src/commands/brief.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,QAAA,MAAM,cAAc,8CAA+C,CAAC;AACpE,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAE5D;AAED,gEAAgE;AAChE,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB7F;AAED,mEAAmE;AACnE,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhB;AAED,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb brief — incremental brief delta or compound intelligence query.
|
|
3
|
+
* BET-239 Slice 4 (incremental) + Slice 5 (compound queries).
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* pb brief --skill <name> --since-last — incremental delta for a skill (E4)
|
|
7
|
+
* pb brief steering — compound steering brief (E6)
|
|
8
|
+
* pb brief confidence — compound confidence pass (E6)
|
|
9
|
+
* pb brief delta [--since <ISO>] — compound delta sync (E6)
|
|
10
|
+
*
|
|
11
|
+
* Chain: DEC-299 (agent-native, JSON-default), STD-65 (structured, parseable, minimal)
|
|
12
|
+
*/
|
|
13
|
+
import { getConfigOrGuide } from '../lib/config.js';
|
|
14
|
+
import { mcpCall } from '../lib/client.js';
|
|
15
|
+
import { runCliCommand } from '../lib/runner.js';
|
|
16
|
+
import { formatBrief, formatCompoundBrief, } from '../formatters/brief.js';
|
|
17
|
+
const COMPOUND_TYPES = ['steering', 'confidence', 'delta'];
|
|
18
|
+
function isCompoundType(value) {
|
|
19
|
+
return COMPOUND_TYPES.includes(value);
|
|
20
|
+
}
|
|
21
|
+
/** Run incremental brief for a skill (existing E4 behavior). */
|
|
22
|
+
export async function runBrief(options) {
|
|
23
|
+
const config = await getConfigOrGuide(() => runBrief(options));
|
|
24
|
+
if (!config)
|
|
25
|
+
return;
|
|
26
|
+
await runCliCommand({
|
|
27
|
+
fn: async () => {
|
|
28
|
+
const result = await mcpCall('chain.incrementalChanges', {
|
|
29
|
+
skill: options.skill,
|
|
30
|
+
});
|
|
31
|
+
// Record the brief run so the next call sees an updated "since last brief" timestamp.
|
|
32
|
+
// Fire-and-forget: recording failure should not block the CLI output.
|
|
33
|
+
const surfacedIds = result.newEntries
|
|
34
|
+
.map((e) => e.entryId)
|
|
35
|
+
.filter((id) => id !== null);
|
|
36
|
+
mcpCall('chain.recordBriefRun', {
|
|
37
|
+
skill: options.skill,
|
|
38
|
+
entriesSurfaced: surfacedIds,
|
|
39
|
+
timestamp: Date.now(),
|
|
40
|
+
}).catch(() => { });
|
|
41
|
+
return result;
|
|
42
|
+
},
|
|
43
|
+
formatPretty: (result) => formatBrief(result, options.skill),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/** Run compound brief query (E6 — steering, confidence, delta). */
|
|
47
|
+
export async function runCompoundBrief(options) {
|
|
48
|
+
const config = await getConfigOrGuide(() => runCompoundBrief(options));
|
|
49
|
+
if (!config)
|
|
50
|
+
return;
|
|
51
|
+
await runCliCommand({
|
|
52
|
+
fn: async () => {
|
|
53
|
+
const args = {
|
|
54
|
+
type: options.type,
|
|
55
|
+
};
|
|
56
|
+
// For delta type, parse the --since option
|
|
57
|
+
if (options.type === 'delta' && options.since) {
|
|
58
|
+
const sinceMs = Date.parse(options.since);
|
|
59
|
+
if (isNaN(sinceMs)) {
|
|
60
|
+
throw new Error(`Invalid --since timestamp: '${options.since}'. Use ISO 8601 format (e.g. '2026-03-24T00:00:00Z').`);
|
|
61
|
+
}
|
|
62
|
+
args.since = sinceMs;
|
|
63
|
+
}
|
|
64
|
+
return await mcpCall('chain.compoundQuery', args);
|
|
65
|
+
},
|
|
66
|
+
formatPretty: (result) => formatCompoundBrief(result),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
export { isCompoundType, COMPOUND_TYPES };
|
|
70
|
+
//# sourceMappingURL=brief.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/commands/brief.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,WAAW,EACX,mBAAmB,GAGpB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAU,CAAC;AAGpE,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,cAAc,CAAC,QAAQ,CAAC,KAAqB,CAAC,CAAC;AACxD,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAA+C;IAC5E,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,aAAa,CAAc;QAC/B,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,MAAM,GAAG,MAAM,OAAO,CAAc,0BAA0B,EAAE;gBACpE,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;YAEH,sFAAsF;YACtF,sEAAsE;YACtE,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU;iBAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;iBACrB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;YAC7C,OAAO,CAAC,sBAAsB,EAAE;gBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,eAAe,EAAE,WAAW;gBAC5B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEnB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;KAC7D,CAAC,CAAC;AACL,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAGtC;IACC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,aAAa,CAAsB;QACvC,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,IAAI,GAA4B;gBACpC,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;YAEF,2CAA2C;YAC3C,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CACb,+BAA+B,OAAO,CAAC,KAAK,uDAAuD,CACpG,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACvB,CAAC;YAED,OAAO,MAAM,OAAO,CAAsB,qBAAqB,EAAE,IAAI,CAAC,CAAC;QACzE,CAAC;QACD,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;KACtD,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
/** BET-240 E2: Source reference URI (e.g. "meeting-2026-03-28.md"). */
|
|
17
|
+
sourceRef?: string;
|
|
18
|
+
/** BET-240 E2: Verbatim excerpt from the source. */
|
|
19
|
+
sourceExcerpt?: string;
|
|
20
|
+
/** @deprecated Use global --json flag instead. Preserved for backward compatibility. */
|
|
21
|
+
json?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function runCapture(options: CaptureOptions): Promise<void>;
|
|
24
|
+
export {};
|
|
25
|
+
//# 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,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+FvE"}
|
|
@@ -0,0 +1,103 @@
|
|
|
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
|
+
// BET-240 E2: source provenance — pass through when provided
|
|
62
|
+
...(options.sourceRef ? { sourceRef: options.sourceRef } : {}),
|
|
63
|
+
...(options.sourceExcerpt ? { sourceExcerpt: options.sourceExcerpt } : {}),
|
|
64
|
+
});
|
|
65
|
+
// Track in session state
|
|
66
|
+
addCapturedEntry(result.entryId);
|
|
67
|
+
// Phase 3: Link to existing entry if --link provided (TEN-705)
|
|
68
|
+
if (options.link) {
|
|
69
|
+
const linkTarget = options.link.trim();
|
|
70
|
+
const relationType = options.type ?? 'surfaces_tension_in';
|
|
71
|
+
if (linkTarget) {
|
|
72
|
+
await mcpCallWithSession('chain.createEntryRelation', {
|
|
73
|
+
fromEntryId: result.entryId,
|
|
74
|
+
toEntryId: linkTarget,
|
|
75
|
+
type: relationType,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Output
|
|
80
|
+
if (json) {
|
|
81
|
+
// Machine-readable output (TEN-709, DEC-299)
|
|
82
|
+
process.stdout.write(JSON.stringify({
|
|
83
|
+
id: result.entryId,
|
|
84
|
+
collection: collectionSlug,
|
|
85
|
+
confidence: classification?.tier ?? 'explicit',
|
|
86
|
+
}) + '\n');
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
process.stdout.write('\n');
|
|
90
|
+
process.stdout.write(formatCaptureReceipt({
|
|
91
|
+
entryId: result.entryId,
|
|
92
|
+
name: entryName,
|
|
93
|
+
collection: collectionSlug,
|
|
94
|
+
status: 'draft',
|
|
95
|
+
classification,
|
|
96
|
+
warnings: result.warnings,
|
|
97
|
+
normalization: result.normalization,
|
|
98
|
+
linkedTo: options.link,
|
|
99
|
+
relationType: options.link ? (options.type ?? 'surfaces_tension_in') : undefined,
|
|
100
|
+
}) + '\n');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# 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,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb walk <entry-id> — directed deep traversal along one relation type.
|
|
3
|
+
* BET-239 Slice 2: deep chain walk with cycle detection.
|
|
4
|
+
*
|
|
5
|
+
* Traverses to depth 4, fan-out cap 10 per hop, total node cap 100.
|
|
6
|
+
* Chain: DEC-299 (agent-native, JSON-default), STD-65 (structured, parseable, minimal)
|
|
7
|
+
*/
|
|
8
|
+
export declare function runChainWalk(options: {
|
|
9
|
+
entryId: string;
|
|
10
|
+
depth: number;
|
|
11
|
+
direction: string;
|
|
12
|
+
type?: string;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=chain-walk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-walk.d.ts","sourceRoot":"","sources":["../../src/commands/chain-walk.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb walk <entry-id> — directed deep traversal along one relation type.
|
|
3
|
+
* BET-239 Slice 2: deep chain walk with cycle detection.
|
|
4
|
+
*
|
|
5
|
+
* Traverses to depth 4, fan-out cap 10 per hop, total node cap 100.
|
|
6
|
+
* Chain: DEC-299 (agent-native, JSON-default), STD-65 (structured, parseable, minimal)
|
|
7
|
+
*/
|
|
8
|
+
import { getConfigOrGuide } from '../lib/config.js';
|
|
9
|
+
import { mcpCall } from '../lib/client.js';
|
|
10
|
+
import { runCliCommand } from '../lib/runner.js';
|
|
11
|
+
import { formatChainWalk } from '../formatters/chain-walk.js';
|
|
12
|
+
export async function runChainWalk(options) {
|
|
13
|
+
const config = await getConfigOrGuide(() => runChainWalk(options));
|
|
14
|
+
if (!config)
|
|
15
|
+
return;
|
|
16
|
+
const { entryId, depth, direction, type } = options;
|
|
17
|
+
// Validate direction
|
|
18
|
+
if (direction !== 'outgoing' && direction !== 'incoming') {
|
|
19
|
+
throw new Error(`Invalid direction: "${direction}". Must be 'outgoing' or 'incoming'.`);
|
|
20
|
+
}
|
|
21
|
+
// Validate depth
|
|
22
|
+
const clampedDepth = Math.max(1, Math.min(4, depth));
|
|
23
|
+
await runCliCommand({
|
|
24
|
+
fn: () => mcpCall('chain.deepChainWalk', {
|
|
25
|
+
entryId,
|
|
26
|
+
direction,
|
|
27
|
+
maxHops: clampedDepth,
|
|
28
|
+
...(type ? { relationType: type } : {}),
|
|
29
|
+
}),
|
|
30
|
+
formatPretty: (result) => formatChainWalk(result, entryId, direction, clampedDepth, type),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=chain-walk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-walk.js","sourceRoot":"","sources":["../../src/commands/chain-walk.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAwB,MAAM,6BAA6B,CAAC;AAEpF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAKlC;IACC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEpD,qBAAqB;IACrB,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,sCAAsC,CAAC,CAAC;IAC1F,CAAC;IAED,iBAAiB;IACjB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAErD,MAAM,aAAa,CAAkB;QACnC,EAAE,EAAE,GAAG,EAAE,CACP,OAAO,CAAkB,qBAAqB,EAAE;YAC9C,OAAO;YACP,SAAS;YACT,OAAO,EAAE,YAAY;YACrB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC;QACJ,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC;KAC1F,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb changes --since <duration> — detect entries and relations modified recently.
|
|
3
|
+
* BET-239 Slice 0: change detection pipeline.
|
|
4
|
+
*
|
|
5
|
+
* Duration format: 1h, 6h, 1d, 7d, 30d (numeric + h/d suffix).
|
|
6
|
+
* Chain: DEC-299 (agent-native, JSON-default), STD-65 (structured, parseable, minimal)
|
|
7
|
+
*/
|
|
8
|
+
export declare function runChanges(options: {
|
|
9
|
+
since: string;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=changes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../../src/commands/changes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB1E"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb changes --since <duration> — detect entries and relations modified recently.
|
|
3
|
+
* BET-239 Slice 0: change detection pipeline.
|
|
4
|
+
*
|
|
5
|
+
* Duration format: 1h, 6h, 1d, 7d, 30d (numeric + h/d suffix).
|
|
6
|
+
* Chain: DEC-299 (agent-native, JSON-default), STD-65 (structured, parseable, minimal)
|
|
7
|
+
*/
|
|
8
|
+
import { getConfigOrGuide } from '../lib/config.js';
|
|
9
|
+
import { mcpCall } from '../lib/client.js';
|
|
10
|
+
import { runCliCommand } from '../lib/runner.js';
|
|
11
|
+
import { formatChanges } from '../formatters/changes.js';
|
|
12
|
+
/** Parse a human-friendly duration string into milliseconds. */
|
|
13
|
+
function parseDuration(input) {
|
|
14
|
+
const match = input.match(/^(\d+)(h|d)$/i);
|
|
15
|
+
if (!match)
|
|
16
|
+
return null;
|
|
17
|
+
const value = parseInt(match[1], 10);
|
|
18
|
+
const unit = match[2].toLowerCase();
|
|
19
|
+
if (unit === 'h')
|
|
20
|
+
return value * 3_600_000;
|
|
21
|
+
if (unit === 'd')
|
|
22
|
+
return value * 86_400_000;
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
export async function runChanges(options) {
|
|
26
|
+
const config = await getConfigOrGuide(() => runChanges(options));
|
|
27
|
+
if (!config)
|
|
28
|
+
return;
|
|
29
|
+
const durationMs = parseDuration(options.since);
|
|
30
|
+
if (durationMs === null) {
|
|
31
|
+
throw new Error(`Invalid duration: "${options.since}". Use format: 1h, 6h, 1d, 7d, 30d (numeric + h/d suffix).`);
|
|
32
|
+
}
|
|
33
|
+
const sinceTimestamp = Date.now() - durationMs;
|
|
34
|
+
await runCliCommand({
|
|
35
|
+
fn: () => mcpCall('chain.changeDetection', {
|
|
36
|
+
since: sinceTimestamp,
|
|
37
|
+
}),
|
|
38
|
+
formatPretty: (result) => formatChanges(result, options.since),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../../src/commands/changes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAE7E,gEAAgE;AAChE,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,KAAK,GAAG,SAAS,CAAC;IAC3C,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,KAAK,GAAG,UAAU,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,sBAAsB,OAAO,CAAC,KAAK,4DAA4D,CAChG,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAE/C,MAAM,aAAa,CAAgB;QACjC,EAAE,EAAE,GAAG,EAAE,CACP,OAAO,CAAgB,uBAAuB,EAAE;YAC9C,KAAK,EAAE,cAAc;SACtB,CAAC;QACJ,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -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"}
|