@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.
Files changed (278) hide show
  1. package/README.md +167 -0
  2. package/dist/__tests__/audit.test.d.ts +2 -0
  3. package/dist/__tests__/audit.test.d.ts.map +1 -0
  4. package/dist/__tests__/audit.test.js +394 -0
  5. package/dist/__tests__/audit.test.js.map +1 -0
  6. package/dist/__tests__/capture.test.d.ts +2 -0
  7. package/dist/__tests__/capture.test.d.ts.map +1 -0
  8. package/dist/__tests__/capture.test.js +86 -0
  9. package/dist/__tests__/capture.test.js.map +1 -0
  10. package/dist/__tests__/constellation.test.d.ts +2 -0
  11. package/dist/__tests__/constellation.test.d.ts.map +1 -0
  12. package/dist/__tests__/constellation.test.js +260 -0
  13. package/dist/__tests__/constellation.test.js.map +1 -0
  14. package/dist/__tests__/context-strategy.test.d.ts +2 -0
  15. package/dist/__tests__/context-strategy.test.d.ts.map +1 -0
  16. package/dist/__tests__/context-strategy.test.js +79 -0
  17. package/dist/__tests__/context-strategy.test.js.map +1 -0
  18. package/dist/__tests__/fields.test.d.ts +2 -0
  19. package/dist/__tests__/fields.test.d.ts.map +1 -0
  20. package/dist/__tests__/fields.test.js +238 -0
  21. package/dist/__tests__/fields.test.js.map +1 -0
  22. package/dist/__tests__/handshake.test.d.ts +2 -0
  23. package/dist/__tests__/handshake.test.d.ts.map +1 -0
  24. package/dist/__tests__/handshake.test.js +187 -0
  25. package/dist/__tests__/handshake.test.js.map +1 -0
  26. package/dist/__tests__/ingest.test.d.ts +2 -0
  27. package/dist/__tests__/ingest.test.d.ts.map +1 -0
  28. package/dist/__tests__/ingest.test.js +185 -0
  29. package/dist/__tests__/ingest.test.js.map +1 -0
  30. package/dist/__tests__/promote.test.d.ts +2 -0
  31. package/dist/__tests__/promote.test.d.ts.map +1 -0
  32. package/dist/__tests__/promote.test.js +139 -0
  33. package/dist/__tests__/promote.test.js.map +1 -0
  34. package/dist/__tests__/proposals.test.d.ts +2 -0
  35. package/dist/__tests__/proposals.test.d.ts.map +1 -0
  36. package/dist/__tests__/proposals.test.js +190 -0
  37. package/dist/__tests__/proposals.test.js.map +1 -0
  38. package/dist/__tests__/relate.test.d.ts +2 -0
  39. package/dist/__tests__/relate.test.d.ts.map +1 -0
  40. package/dist/__tests__/relate.test.js +105 -0
  41. package/dist/__tests__/relate.test.js.map +1 -0
  42. package/dist/__tests__/repo-detect.test.d.ts +2 -0
  43. package/dist/__tests__/repo-detect.test.d.ts.map +1 -0
  44. package/dist/__tests__/repo-detect.test.js +119 -0
  45. package/dist/__tests__/repo-detect.test.js.map +1 -0
  46. package/dist/__tests__/runner.test.d.ts +2 -0
  47. package/dist/__tests__/runner.test.d.ts.map +1 -0
  48. package/dist/__tests__/runner.test.js +215 -0
  49. package/dist/__tests__/runner.test.js.map +1 -0
  50. package/dist/__tests__/session-touch.test.d.ts +2 -0
  51. package/dist/__tests__/session-touch.test.d.ts.map +1 -0
  52. package/dist/__tests__/session-touch.test.js +134 -0
  53. package/dist/__tests__/session-touch.test.js.map +1 -0
  54. package/dist/__tests__/session.test.d.ts +2 -0
  55. package/dist/__tests__/session.test.d.ts.map +1 -0
  56. package/dist/__tests__/session.test.js +52 -0
  57. package/dist/__tests__/session.test.js.map +1 -0
  58. package/dist/__tests__/strip.test.d.ts +2 -0
  59. package/dist/__tests__/strip.test.d.ts.map +1 -0
  60. package/dist/__tests__/strip.test.js +136 -0
  61. package/dist/__tests__/strip.test.js.map +1 -0
  62. package/dist/__tests__/update.test.d.ts +2 -0
  63. package/dist/__tests__/update.test.d.ts.map +1 -0
  64. package/dist/__tests__/update.test.js +237 -0
  65. package/dist/__tests__/update.test.js.map +1 -0
  66. package/dist/commands/accept.d.ts +18 -0
  67. package/dist/commands/accept.d.ts.map +1 -0
  68. package/dist/commands/accept.js +72 -0
  69. package/dist/commands/accept.js.map +1 -0
  70. package/dist/commands/audit.d.ts +25 -0
  71. package/dist/commands/audit.d.ts.map +1 -0
  72. package/dist/commands/audit.js +188 -0
  73. package/dist/commands/audit.js.map +1 -0
  74. package/dist/commands/brand-pack.d.ts +2 -0
  75. package/dist/commands/brand-pack.d.ts.map +1 -0
  76. package/dist/commands/brand-pack.js +25 -0
  77. package/dist/commands/brand-pack.js.map +1 -0
  78. package/dist/commands/brief.d.ts +28 -0
  79. package/dist/commands/brief.d.ts.map +1 -0
  80. package/dist/commands/brief.js +70 -0
  81. package/dist/commands/brief.js.map +1 -0
  82. package/dist/commands/capture.d.ts +25 -0
  83. package/dist/commands/capture.d.ts.map +1 -0
  84. package/dist/commands/capture.js +103 -0
  85. package/dist/commands/capture.js.map +1 -0
  86. package/dist/commands/chain-walk.d.ts +14 -0
  87. package/dist/commands/chain-walk.d.ts.map +1 -0
  88. package/dist/commands/chain-walk.js +33 -0
  89. package/dist/commands/chain-walk.js.map +1 -0
  90. package/dist/commands/changes.d.ts +11 -0
  91. package/dist/commands/changes.d.ts.map +1 -0
  92. package/dist/commands/changes.js +41 -0
  93. package/dist/commands/changes.js.map +1 -0
  94. package/dist/commands/constellation.d.ts +11 -0
  95. package/dist/commands/constellation.d.ts.map +1 -0
  96. package/dist/commands/constellation.js +28 -0
  97. package/dist/commands/constellation.js.map +1 -0
  98. package/dist/commands/context.d.ts +2 -1
  99. package/dist/commands/context.d.ts.map +1 -1
  100. package/dist/commands/context.js +19 -9
  101. package/dist/commands/context.js.map +1 -1
  102. package/dist/commands/cross-cut.d.ts +11 -0
  103. package/dist/commands/cross-cut.d.ts.map +1 -0
  104. package/dist/commands/cross-cut.js +23 -0
  105. package/dist/commands/cross-cut.js.map +1 -0
  106. package/dist/commands/fields.d.ts +9 -0
  107. package/dist/commands/fields.d.ts.map +1 -0
  108. package/dist/commands/fields.js +26 -0
  109. package/dist/commands/fields.js.map +1 -0
  110. package/dist/commands/get.d.ts +8 -1
  111. package/dist/commands/get.d.ts.map +1 -1
  112. package/dist/commands/get.js +55 -6
  113. package/dist/commands/get.js.map +1 -1
  114. package/dist/commands/handshake.d.ts +18 -0
  115. package/dist/commands/handshake.d.ts.map +1 -0
  116. package/dist/commands/handshake.js +378 -0
  117. package/dist/commands/handshake.js.map +1 -0
  118. package/dist/commands/ingest.d.ts +14 -0
  119. package/dist/commands/ingest.d.ts.map +1 -0
  120. package/dist/commands/ingest.js +181 -0
  121. package/dist/commands/ingest.js.map +1 -0
  122. package/dist/commands/login.d.ts +5 -0
  123. package/dist/commands/login.d.ts.map +1 -0
  124. package/dist/commands/login.js +53 -0
  125. package/dist/commands/login.js.map +1 -0
  126. package/dist/commands/orient.d.ts +2 -0
  127. package/dist/commands/orient.d.ts.map +1 -1
  128. package/dist/commands/orient.js +17 -8
  129. package/dist/commands/orient.js.map +1 -1
  130. package/dist/commands/promote.d.ts +12 -0
  131. package/dist/commands/promote.d.ts.map +1 -0
  132. package/dist/commands/promote.js +48 -0
  133. package/dist/commands/promote.js.map +1 -0
  134. package/dist/commands/proposals.d.ts +9 -0
  135. package/dist/commands/proposals.d.ts.map +1 -0
  136. package/dist/commands/proposals.js +24 -0
  137. package/dist/commands/proposals.js.map +1 -0
  138. package/dist/commands/reject.d.ts +14 -0
  139. package/dist/commands/reject.d.ts.map +1 -0
  140. package/dist/commands/reject.js +37 -0
  141. package/dist/commands/reject.js.map +1 -0
  142. package/dist/commands/relate.d.ts +16 -0
  143. package/dist/commands/relate.d.ts.map +1 -0
  144. package/dist/commands/relate.js +80 -0
  145. package/dist/commands/relate.js.map +1 -0
  146. package/dist/commands/search.d.ts +1 -0
  147. package/dist/commands/search.d.ts.map +1 -1
  148. package/dist/commands/search.js +9 -3
  149. package/dist/commands/search.js.map +1 -1
  150. package/dist/commands/session.d.ts +20 -0
  151. package/dist/commands/session.d.ts.map +1 -0
  152. package/dist/commands/session.js +134 -0
  153. package/dist/commands/session.js.map +1 -0
  154. package/dist/commands/update.d.ts +16 -0
  155. package/dist/commands/update.d.ts.map +1 -0
  156. package/dist/commands/update.js +139 -0
  157. package/dist/commands/update.js.map +1 -0
  158. package/dist/commands/verify.d.ts +13 -0
  159. package/dist/commands/verify.d.ts.map +1 -0
  160. package/dist/commands/verify.js +43 -0
  161. package/dist/commands/verify.js.map +1 -0
  162. package/dist/formatters/audit.d.ts +46 -0
  163. package/dist/formatters/audit.d.ts.map +1 -0
  164. package/dist/formatters/audit.js +81 -0
  165. package/dist/formatters/audit.js.map +1 -0
  166. package/dist/formatters/brief.d.ts +112 -0
  167. package/dist/formatters/brief.d.ts.map +1 -0
  168. package/dist/formatters/brief.js +179 -0
  169. package/dist/formatters/brief.js.map +1 -0
  170. package/dist/formatters/capture.d.ts +30 -0
  171. package/dist/formatters/capture.d.ts.map +1 -0
  172. package/dist/formatters/capture.js +58 -0
  173. package/dist/formatters/capture.js.map +1 -0
  174. package/dist/formatters/chain-walk.d.ts +33 -0
  175. package/dist/formatters/chain-walk.d.ts.map +1 -0
  176. package/dist/formatters/chain-walk.js +54 -0
  177. package/dist/formatters/chain-walk.js.map +1 -0
  178. package/dist/formatters/changes.d.ts +25 -0
  179. package/dist/formatters/changes.d.ts.map +1 -0
  180. package/dist/formatters/changes.js +60 -0
  181. package/dist/formatters/changes.js.map +1 -0
  182. package/dist/formatters/constellation.d.ts +34 -0
  183. package/dist/formatters/constellation.d.ts.map +1 -0
  184. package/dist/formatters/constellation.js +38 -0
  185. package/dist/formatters/constellation.js.map +1 -0
  186. package/dist/formatters/cross-cut.d.ts +21 -0
  187. package/dist/formatters/cross-cut.d.ts.map +1 -0
  188. package/dist/formatters/cross-cut.js +32 -0
  189. package/dist/formatters/cross-cut.js.map +1 -0
  190. package/dist/formatters/entry.d.ts +11 -0
  191. package/dist/formatters/entry.d.ts.map +1 -1
  192. package/dist/formatters/entry.js +14 -1
  193. package/dist/formatters/entry.js.map +1 -1
  194. package/dist/formatters/fields.d.ts +32 -0
  195. package/dist/formatters/fields.d.ts.map +1 -0
  196. package/dist/formatters/fields.js +49 -0
  197. package/dist/formatters/fields.js.map +1 -0
  198. package/dist/formatters/handshake.d.ts +17 -0
  199. package/dist/formatters/handshake.d.ts.map +1 -0
  200. package/dist/formatters/handshake.js +51 -0
  201. package/dist/formatters/handshake.js.map +1 -0
  202. package/dist/formatters/orient.d.ts +1 -0
  203. package/dist/formatters/orient.d.ts.map +1 -1
  204. package/dist/formatters/orient.js +4 -2
  205. package/dist/formatters/orient.js.map +1 -1
  206. package/dist/formatters/promote.d.ts +29 -0
  207. package/dist/formatters/promote.d.ts.map +1 -0
  208. package/dist/formatters/promote.js +38 -0
  209. package/dist/formatters/promote.js.map +1 -0
  210. package/dist/formatters/proposals.d.ts +45 -0
  211. package/dist/formatters/proposals.d.ts.map +1 -0
  212. package/dist/formatters/proposals.js +62 -0
  213. package/dist/formatters/proposals.js.map +1 -0
  214. package/dist/formatters/relate.d.ts +12 -0
  215. package/dist/formatters/relate.d.ts.map +1 -0
  216. package/dist/formatters/relate.js +13 -0
  217. package/dist/formatters/relate.js.map +1 -0
  218. package/dist/formatters/session.d.ts +11 -0
  219. package/dist/formatters/session.d.ts.map +1 -0
  220. package/dist/formatters/session.js +51 -0
  221. package/dist/formatters/session.js.map +1 -0
  222. package/dist/formatters/update.d.ts +17 -0
  223. package/dist/formatters/update.d.ts.map +1 -0
  224. package/dist/formatters/update.js +43 -0
  225. package/dist/formatters/update.js.map +1 -0
  226. package/dist/formatters/verify.d.ts +11 -0
  227. package/dist/formatters/verify.d.ts.map +1 -0
  228. package/dist/formatters/verify.js +11 -0
  229. package/dist/formatters/verify.js.map +1 -0
  230. package/dist/generators/adapters.d.ts +10 -0
  231. package/dist/generators/adapters.d.ts.map +1 -0
  232. package/dist/generators/adapters.js +102 -0
  233. package/dist/generators/adapters.js.map +1 -0
  234. package/dist/generators/briefing-md.d.ts +8 -0
  235. package/dist/generators/briefing-md.d.ts.map +1 -0
  236. package/dist/generators/briefing-md.js +51 -0
  237. package/dist/generators/briefing-md.js.map +1 -0
  238. package/dist/generators/context-md.d.ts +8 -0
  239. package/dist/generators/context-md.d.ts.map +1 -0
  240. package/dist/generators/context-md.js +123 -0
  241. package/dist/generators/context-md.js.map +1 -0
  242. package/dist/generators/portable-knowledge.d.ts +72 -0
  243. package/dist/generators/portable-knowledge.d.ts.map +1 -0
  244. package/dist/generators/portable-knowledge.js +246 -0
  245. package/dist/generators/portable-knowledge.js.map +1 -0
  246. package/dist/generators/portable-knowledge.test.d.ts +2 -0
  247. package/dist/generators/portable-knowledge.test.d.ts.map +1 -0
  248. package/dist/generators/portable-knowledge.test.js +399 -0
  249. package/dist/generators/portable-knowledge.test.js.map +1 -0
  250. package/dist/index.d.ts +3 -2
  251. package/dist/index.d.ts.map +1 -1
  252. package/dist/index.js +466 -6
  253. package/dist/index.js.map +1 -1
  254. package/dist/lib/client.d.ts +34 -0
  255. package/dist/lib/client.d.ts.map +1 -1
  256. package/dist/lib/client.js +114 -9
  257. package/dist/lib/client.js.map +1 -1
  258. package/dist/lib/config.d.ts +19 -2
  259. package/dist/lib/config.d.ts.map +1 -1
  260. package/dist/lib/config.js +95 -14
  261. package/dist/lib/config.js.map +1 -1
  262. package/dist/lib/repo-detect.d.ts +14 -0
  263. package/dist/lib/repo-detect.d.ts.map +1 -0
  264. package/dist/lib/repo-detect.js +58 -0
  265. package/dist/lib/repo-detect.js.map +1 -0
  266. package/dist/lib/runner.d.ts +31 -0
  267. package/dist/lib/runner.d.ts.map +1 -0
  268. package/dist/lib/runner.js +65 -0
  269. package/dist/lib/runner.js.map +1 -0
  270. package/dist/lib/session.d.ts +17 -0
  271. package/dist/lib/session.d.ts.map +1 -0
  272. package/dist/lib/session.js +43 -0
  273. package/dist/lib/session.js.map +1 -0
  274. package/dist/lib/strip.d.ts +11 -0
  275. package/dist/lib/strip.d.ts.map +1 -0
  276. package/dist/lib/strip.js +26 -0
  277. package/dist/lib/strip.js.map +1 -0
  278. 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,2 @@
1
+ export declare function runBrandPack(processArgv: string[]): void;
2
+ //# sourceMappingURL=brand-pack.d.ts.map
@@ -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"}