friction-log 0.0.0-stage → 0.6.0

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 (107) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/LICENSE +21 -0
  3. package/README.md +98 -2
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +504 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/bilanz.d.ts +23 -0
  8. package/dist/commands/bilanz.js +106 -0
  9. package/dist/commands/bilanz.js.map +1 -0
  10. package/dist/commands/digest.d.ts +36 -0
  11. package/dist/commands/digest.js +288 -0
  12. package/dist/commands/digest.js.map +1 -0
  13. package/dist/commands/export.d.ts +36 -0
  14. package/dist/commands/export.js +118 -0
  15. package/dist/commands/export.js.map +1 -0
  16. package/dist/commands/file.d.ts +18 -0
  17. package/dist/commands/file.js +51 -0
  18. package/dist/commands/file.js.map +1 -0
  19. package/dist/commands/import.d.ts +31 -0
  20. package/dist/commands/import.js +283 -0
  21. package/dist/commands/import.js.map +1 -0
  22. package/dist/commands/init.d.ts +44 -0
  23. package/dist/commands/init.js +256 -0
  24. package/dist/commands/init.js.map +1 -0
  25. package/dist/commands/list.d.ts +16 -0
  26. package/dist/commands/list.js +57 -0
  27. package/dist/commands/list.js.map +1 -0
  28. package/dist/commands/log.d.ts +18 -0
  29. package/dist/commands/log.js +52 -0
  30. package/dist/commands/log.js.map +1 -0
  31. package/dist/commands/rm.d.ts +9 -0
  32. package/dist/commands/rm.js +22 -0
  33. package/dist/commands/rm.js.map +1 -0
  34. package/dist/commands/scan.d.ts +25 -0
  35. package/dist/commands/scan.js +73 -0
  36. package/dist/commands/scan.js.map +1 -0
  37. package/dist/commands/search.d.ts +15 -0
  38. package/dist/commands/search.js +37 -0
  39. package/dist/commands/search.js.map +1 -0
  40. package/dist/commands/sync-export.d.ts +46 -0
  41. package/dist/commands/sync-export.js +80 -0
  42. package/dist/commands/sync-export.js.map +1 -0
  43. package/dist/commands/update.d.ts +12 -0
  44. package/dist/commands/update.js +24 -0
  45. package/dist/commands/update.js.map +1 -0
  46. package/dist/config.d.ts +31 -0
  47. package/dist/config.js +145 -0
  48. package/dist/config.js.map +1 -0
  49. package/dist/db.d.ts +81 -0
  50. package/dist/db.js +548 -0
  51. package/dist/db.js.map +1 -0
  52. package/dist/index.d.ts +15 -0
  53. package/dist/index.js +16 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/paths.d.ts +12 -0
  56. package/dist/paths.js +34 -0
  57. package/dist/paths.js.map +1 -0
  58. package/dist/scanners/claude-code.d.ts +6 -0
  59. package/dist/scanners/claude-code.js +202 -0
  60. package/dist/scanners/claude-code.js.map +1 -0
  61. package/dist/scanners/index.d.ts +4 -0
  62. package/dist/scanners/index.js +12 -0
  63. package/dist/scanners/index.js.map +1 -0
  64. package/dist/sinks/agent-tasks.d.ts +36 -0
  65. package/dist/sinks/agent-tasks.js +153 -0
  66. package/dist/sinks/agent-tasks.js.map +1 -0
  67. package/dist/sinks/github-issues.d.ts +20 -0
  68. package/dist/sinks/github-issues.js +98 -0
  69. package/dist/sinks/github-issues.js.map +1 -0
  70. package/dist/sinks/index.d.ts +11 -0
  71. package/dist/sinks/index.js +48 -0
  72. package/dist/sinks/index.js.map +1 -0
  73. package/dist/sinks/linear.d.ts +25 -0
  74. package/dist/sinks/linear.js +157 -0
  75. package/dist/sinks/linear.js.map +1 -0
  76. package/dist/sinks/markdown-file.d.ts +7 -0
  77. package/dist/sinks/markdown-file.js +54 -0
  78. package/dist/sinks/markdown-file.js.map +1 -0
  79. package/dist/sinks/stdout-json.d.ts +15 -0
  80. package/dist/sinks/stdout-json.js +49 -0
  81. package/dist/sinks/stdout-json.js.map +1 -0
  82. package/dist/templates/auth-expiry.yml +30 -0
  83. package/dist/templates/doc-gap.yml +30 -0
  84. package/dist/templates/output-overflow.yml +25 -0
  85. package/dist/templates/schema-drift.yml +26 -0
  86. package/dist/templates/tool-error.yml +34 -0
  87. package/dist/templates/tool-missing-capability.yml +26 -0
  88. package/dist/templates/workflow-friction.yml +26 -0
  89. package/dist/templates.d.ts +5 -0
  90. package/dist/templates.js +88 -0
  91. package/dist/templates.js.map +1 -0
  92. package/dist/types.d.ts +79 -0
  93. package/dist/types.js +2 -0
  94. package/dist/types.js.map +1 -0
  95. package/docs/commands.md +74 -0
  96. package/docs/design.md +25 -0
  97. package/docs/sinks.md +79 -0
  98. package/docs/storage.md +20 -0
  99. package/docs/sync-export.md +23 -0
  100. package/package.json +64 -4
  101. package/templates/auth-expiry.yml +30 -0
  102. package/templates/doc-gap.yml +30 -0
  103. package/templates/output-overflow.yml +25 -0
  104. package/templates/schema-drift.yml +26 -0
  105. package/templates/tool-error.yml +34 -0
  106. package/templates/tool-missing-capability.yml +26 -0
  107. package/templates/workflow-friction.yml +26 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Friction, Session, Task } from "../types.js";
2
+ export interface BilanzCommandInput {
3
+ sessionId?: string;
4
+ dbPath?: string;
5
+ }
6
+ export interface BilanzCommandOutput {
7
+ session: Session;
8
+ toolsExercised: string[];
9
+ frictions: Array<Friction & {
10
+ tasks: Task[];
11
+ }>;
12
+ formatted: string;
13
+ }
14
+ export declare function runBilanz(input: BilanzCommandInput): Promise<BilanzCommandOutput>;
15
+ interface BilanzInput {
16
+ session: Session;
17
+ toolsExercised: string[];
18
+ frictions: Array<Friction & {
19
+ tasks: Task[];
20
+ }>;
21
+ }
22
+ export declare function formatBilanz(b: BilanzInput): string;
23
+ export {};
@@ -0,0 +1,106 @@
1
+ import { FrictionDb } from "../db.js";
2
+ import { defaultDbPath } from "../paths.js";
3
+ import { loadScanner } from "../scanners/index.js";
4
+ export async function runBilanz(input) {
5
+ const db = new FrictionDb(input.dbPath ?? defaultDbPath());
6
+ try {
7
+ const session = input.sessionId
8
+ ? db.getSession(input.sessionId)
9
+ : db.getMostRecentSession();
10
+ if (!session) {
11
+ throw new Error(input.sessionId
12
+ ? `friction-log: session ${input.sessionId} not found in db`
13
+ : `friction-log: no sessions in db yet. Run friction-log scan first.`);
14
+ }
15
+ const frictions = db.listFrictionsForSession(session.id);
16
+ const withTasks = frictions.map((f) => ({
17
+ ...f,
18
+ tasks: db.listTasksForFriction(f.id),
19
+ }));
20
+ const toolsExercised = await extractToolsExercised(session);
21
+ const formatted = formatBilanz({
22
+ session,
23
+ toolsExercised,
24
+ frictions: withTasks,
25
+ });
26
+ return { session, toolsExercised, frictions: withTasks, formatted };
27
+ }
28
+ finally {
29
+ db.close();
30
+ }
31
+ }
32
+ async function extractToolsExercised(session) {
33
+ if (!session.transcriptPath)
34
+ return [];
35
+ try {
36
+ const scanner = loadScanner(session.adapter);
37
+ const result = await scanner.scan({
38
+ sessionId: session.id,
39
+ transcriptPath: session.transcriptPath,
40
+ });
41
+ const tools = new Set();
42
+ for (const c of result.frictionCandidates) {
43
+ if (c.toolSurface)
44
+ tools.add(c.toolSurface);
45
+ }
46
+ return [...tools].sort();
47
+ }
48
+ catch {
49
+ return [];
50
+ }
51
+ }
52
+ export function formatBilanz(b) {
53
+ const lines = [];
54
+ lines.push(`## Dogfood bilanz`);
55
+ lines.push("");
56
+ lines.push(`Session: \`${b.session.id}\` (${b.session.startedAt}${b.session.endedAt ? ` to ${b.session.endedAt}` : ""})`);
57
+ if (b.session.projectPaths && b.session.projectPaths.length > 0) {
58
+ lines.push(`Project paths: ${b.session.projectPaths.map((p) => `\`${p}\``).join(", ")}`);
59
+ }
60
+ lines.push("");
61
+ lines.push(`**Tools exercised** (${b.toolsExercised.length}):`);
62
+ if (b.toolsExercised.length === 0) {
63
+ lines.push(" _none captured by the scan adapter_");
64
+ }
65
+ else {
66
+ for (const t of b.toolsExercised) {
67
+ lines.push(` - ${t}`);
68
+ }
69
+ }
70
+ lines.push("");
71
+ const filed = b.frictions.filter((f) => f.tasks.length > 0);
72
+ const unfiled = b.frictions.filter((f) => f.tasks.length === 0 && f.status === "open");
73
+ lines.push(`**Frictions noticed** (${b.frictions.length}):`);
74
+ if (b.frictions.length === 0) {
75
+ lines.push(" _none recorded for this session_");
76
+ }
77
+ else {
78
+ for (const f of b.frictions) {
79
+ const marker = f.tasks.length > 0 ? "filed" : f.status;
80
+ lines.push(` - [${marker}] id=${f.id} ${f.toolSurface ? `(${f.toolSurface}) ` : ""}${f.title}`);
81
+ }
82
+ }
83
+ lines.push("");
84
+ lines.push(`**Tasks filed** (${filed.length}):`);
85
+ if (filed.length === 0) {
86
+ lines.push(" _none yet_");
87
+ }
88
+ else {
89
+ for (const f of filed) {
90
+ for (const t of f.tasks) {
91
+ const ref = t.externalRef ?? t.sinkTarget ?? "?";
92
+ lines.push(` - friction id=${f.id} -> ${t.sinkName}: ${ref}`);
93
+ }
94
+ }
95
+ }
96
+ lines.push("");
97
+ if (unfiled.length > 0) {
98
+ lines.push(`**Open frictions without a filed task** (${unfiled.length}) -- consider \`friction-log file <id>\`:`);
99
+ for (const f of unfiled) {
100
+ lines.push(` - id=${f.id} ${f.toolSurface ? `(${f.toolSurface}) ` : ""}${f.title}`);
101
+ }
102
+ lines.push("");
103
+ }
104
+ return lines.join("\n").trimEnd() + "\n";
105
+ }
106
+ //# sourceMappingURL=bilanz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bilanz.js","sourceRoot":"","sources":["../../src/commands/bilanz.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type DigestGroupBy, type DigestRow } from "../db.js";
2
+ export interface DigestCommandInput {
3
+ groupBy: DigestGroupBy;
4
+ last?: string;
5
+ dbPath?: string;
6
+ configPath?: string;
7
+ includePeers?: boolean;
8
+ }
9
+ /**
10
+ * One peer's contribution to `digest --include-peers`. `rows` is always
11
+ * computed with the identical GROUP BY SQL as the local digest (see
12
+ * buildPeerSection), so the two are directly comparable, except for the
13
+ * `recurrences` column which is patched in from the raw export data (see
14
+ * countPeerRecurrences). A missing/corrupt peer file degrades to an empty,
15
+ * error-annotated section rather than throwing; a peer file with some
16
+ * malformed individual records degrades those specific records only,
17
+ * reported via `skipped`.
18
+ */
19
+ export interface DigestPeerSection {
20
+ origin: string;
21
+ sourcePath: string;
22
+ rows: DigestRow[];
23
+ /** Count of raw entries in the peer's `records` array that failed
24
+ * validation (missing/non-string title, unknown status, unparseable
25
+ * capturedAt) and were dropped rather than silently miscounted. */
26
+ skipped: number;
27
+ error?: string;
28
+ }
29
+ export interface DigestCommandOutput {
30
+ groupBy: DigestGroupBy;
31
+ sinceIso: string | null;
32
+ rows: DigestRow[];
33
+ peers?: DigestPeerSection[];
34
+ }
35
+ export declare function runDigest(input: DigestCommandInput): DigestCommandOutput;
36
+ export declare function formatDigest(output: DigestCommandOutput): string;
@@ -0,0 +1,288 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { basename } from "node:path";
3
+ import { loadConfig } from "../config.js";
4
+ import { FrictionDb } from "../db.js";
5
+ import { defaultDbPath } from "../paths.js";
6
+ import { parseAge } from "./list.js";
7
+ export function runDigest(input) {
8
+ const db = new FrictionDb(input.dbPath ?? defaultDbPath());
9
+ try {
10
+ const sinceIso = parseAge(input.last) ?? null;
11
+ const rows = db.digest(input.groupBy, sinceIso ?? undefined);
12
+ const out = { groupBy: input.groupBy, sinceIso, rows };
13
+ if (input.includePeers) {
14
+ const config = loadConfig(input.configPath);
15
+ const peerPaths = config.syncExport?.peerPaths ?? [];
16
+ out.peers = peerPaths.map((p) => buildPeerSection(p, input.groupBy, sinceIso));
17
+ }
18
+ return out;
19
+ }
20
+ finally {
21
+ db.close();
22
+ }
23
+ }
24
+ /**
25
+ * Validates one raw JSON array entry from a peer's `records`. Returns null
26
+ * (caller counts it as `skipped`) rather than silently defaulting a bad
27
+ * field, because a wrong default here would otherwise corrupt the digest
28
+ * numbers without any visible sign: an unknown/missing `status` used to
29
+ * fall through to the db's default of 'open', and a non-ISO `capturedAt`
30
+ * used to pass a `--last` window check unpredictably (it is compared as a
31
+ * plain string against another ISO string, and most garbage strings sort
32
+ * after any real date).
33
+ */
34
+ function normalizePeerRecord(raw) {
35
+ if (!raw || typeof raw !== "object")
36
+ return null;
37
+ const rec = raw;
38
+ if (typeof rec.title !== "string" || rec.title.trim() === "")
39
+ return null;
40
+ if (!isFrictionStatus(rec.status))
41
+ return null;
42
+ if (typeof rec.capturedAt !== "string")
43
+ return null;
44
+ // Lenient on input, canonical in storage: Date.parse accepts many
45
+ // non-ISO spellings ('Jan 1 1999'), and every downstream comparison
46
+ // (--last windows, recurrence cutoffs) is a plain string compare
47
+ // against ISO timestamps — so a parseable-but-non-ISO value must be
48
+ // re-rendered as ISO or it sorts above every real date.
49
+ const capturedAtDate = new Date(rec.capturedAt);
50
+ if (Number.isNaN(capturedAtDate.getTime()))
51
+ return null;
52
+ return {
53
+ toolSurface: typeof rec.toolSurface === "string" ? rec.toolSurface : null,
54
+ title: rec.title,
55
+ description: typeof rec.description === "string" ? rec.description : null,
56
+ capturedAt: capturedAtDate.toISOString(),
57
+ severity: isSeverity(rec.severity) ? rec.severity : null,
58
+ category: typeof rec.category === "string" ? rec.category : null,
59
+ status: rec.status,
60
+ // Unlike status/capturedAt/title, an invalid severity or source
61
+ // degrades gracefully to a legitimate "unknown" value instead of
62
+ // dropping the whole record: severity is already nullable in the
63
+ // schema, and 'import' is a real, meaningful "unclassified" source.
64
+ source: isFrictionSource(rec.source) ? rec.source : "import",
65
+ recurrenceOfId: typeof rec.recurrenceOfId === "number" ? rec.recurrenceOfId : null,
66
+ };
67
+ }
68
+ /**
69
+ * Reads one peer's sync-export JSON (read-only; never mutates it), replays
70
+ * its valid records into a throwaway :memory: FrictionDb via insertFriction,
71
+ * and reuses db.digest() so peer totals/open/filed/resolved/wontfix/
72
+ * avg-hours numbers are computed with exactly the same SQL as the local
73
+ * digest. `tasks` is never populated for peer data (the export payload
74
+ * carries no task history), so avgHoursToTriage is always null for peer
75
+ * rows: expected, not a bug.
76
+ *
77
+ * `recurrences` is the one column NOT taken from the scratch db's own
78
+ * recurrence_of_id (see countPeerRecurrences for why) and is patched onto
79
+ * the rows afterward.
80
+ */
81
+ function buildPeerSection(peerPath, groupBy, sinceIso) {
82
+ const fallbackOrigin = basename(peerPath);
83
+ let raw;
84
+ try {
85
+ raw = readFileSync(peerPath, "utf8");
86
+ }
87
+ catch (err) {
88
+ return {
89
+ origin: fallbackOrigin,
90
+ sourcePath: peerPath,
91
+ rows: [],
92
+ skipped: 0,
93
+ error: `could not read peer file: ${err.message}`,
94
+ };
95
+ }
96
+ let payload;
97
+ try {
98
+ payload = JSON.parse(raw);
99
+ }
100
+ catch (err) {
101
+ return {
102
+ origin: fallbackOrigin,
103
+ sourcePath: peerPath,
104
+ rows: [],
105
+ skipped: 0,
106
+ error: `could not parse peer file as JSON: ${err.message}`,
107
+ };
108
+ }
109
+ const origin = typeof payload.origin === "string" && payload.origin.trim()
110
+ ? payload.origin
111
+ : fallbackOrigin;
112
+ if (!Array.isArray(payload.records)) {
113
+ return {
114
+ origin,
115
+ sourcePath: peerPath,
116
+ rows: [],
117
+ skipped: 0,
118
+ error: 'peer file is missing a "records" array',
119
+ };
120
+ }
121
+ let skipped = 0;
122
+ const validRecords = [];
123
+ for (const rawRecord of payload.records) {
124
+ const normalized = normalizePeerRecord(rawRecord);
125
+ if (!normalized) {
126
+ skipped++;
127
+ continue;
128
+ }
129
+ validRecords.push(normalized);
130
+ }
131
+ const scratch = new FrictionDb(":memory:");
132
+ try {
133
+ for (const rec of validRecords) {
134
+ const inserted = scratch.insertFriction({
135
+ toolSurface: rec.toolSurface,
136
+ title: rec.title,
137
+ description: rec.description,
138
+ capturedAt: rec.capturedAt,
139
+ severity: rec.severity,
140
+ category: rec.category,
141
+ source: rec.source,
142
+ });
143
+ if (rec.status !== "open") {
144
+ scratch.updateFrictionStatus(inserted.id, rec.status);
145
+ }
146
+ }
147
+ const rows = scratch.digest(groupBy, sinceIso ?? undefined);
148
+ const recurrenceCounts = countPeerRecurrences(validRecords, groupBy, sinceIso);
149
+ const withRecurrences = rows.map((r) => ({
150
+ ...r,
151
+ recurrences: recurrenceCounts.get(r.group) ?? 0,
152
+ }));
153
+ return { origin, sourcePath: peerPath, rows: withRecurrences, skipped };
154
+ }
155
+ catch (err) {
156
+ return {
157
+ origin,
158
+ sourcePath: peerPath,
159
+ rows: [],
160
+ skipped,
161
+ error: `could not replay peer records: ${err.message}`,
162
+ };
163
+ }
164
+ finally {
165
+ scratch.close();
166
+ }
167
+ }
168
+ /**
169
+ * Derives the `recurrences` count directly from the exported records' own
170
+ * `recurrenceOfId !== null` flag, grouped exactly like db.digest()'s SQL
171
+ * (`coalesce(column, '(unset)')`) and filtered by the same `--last` window.
172
+ *
173
+ * This does NOT read the scratch db's recurrence_of_id column, and
174
+ * deliberately never re-derives or dereferences one. Two independent
175
+ * reasons: (1) a peer's numeric recurrenceOfId is a different machine's
176
+ * AUTOINCREMENT id, meaningless (and possibly FK-invalid) once replayed
177
+ * into another database; (2) recomputing it via insertFriction's own
178
+ * open-root heuristic against the replayed subset actively disagrees with
179
+ * the origin's real bookkeeping (a friction the origin explicitly linked as
180
+ * a recurrence can fail to re-derive as one once replayed with a different
181
+ * insertion order or status mix, silently changing the count). Counting the
182
+ * boolean flag from the source data sidesteps both problems.
183
+ */
184
+ function countPeerRecurrences(records, groupBy, sinceIso) {
185
+ const counts = new Map();
186
+ for (const rec of records) {
187
+ if (sinceIso && rec.capturedAt < sinceIso)
188
+ continue;
189
+ if (rec.recurrenceOfId == null)
190
+ continue;
191
+ const group = groupValueFor(rec, groupBy);
192
+ counts.set(group, (counts.get(group) ?? 0) + 1);
193
+ }
194
+ return counts;
195
+ }
196
+ function groupValueFor(rec, groupBy) {
197
+ switch (groupBy) {
198
+ case "tool":
199
+ return rec.toolSurface ?? "(unset)";
200
+ case "category":
201
+ return rec.category ?? "(unset)";
202
+ case "severity":
203
+ return rec.severity ?? "(unset)";
204
+ case "source":
205
+ return rec.source;
206
+ }
207
+ }
208
+ const SEVERITIES = ["low", "medium", "high", "critical"];
209
+ const SOURCES = ["scan", "manual", "import"];
210
+ const STATUSES = [
211
+ "open",
212
+ "filed",
213
+ "resolved",
214
+ "wontfix",
215
+ ];
216
+ function isSeverity(v) {
217
+ return typeof v === "string" && SEVERITIES.includes(v);
218
+ }
219
+ function isFrictionSource(v) {
220
+ return typeof v === "string" && SOURCES.includes(v);
221
+ }
222
+ function isFrictionStatus(v) {
223
+ return typeof v === "string" && STATUSES.includes(v);
224
+ }
225
+ export function formatDigest(output) {
226
+ const { groupBy, sinceIso, rows, peers } = output;
227
+ const window = sinceIso ? `since ${sinceIso}` : "all-time";
228
+ const parts = [];
229
+ if (rows.length === 0) {
230
+ parts.push(`digest by ${groupBy} (${window}): no frictions match`);
231
+ }
232
+ else {
233
+ parts.push(`digest by ${groupBy} (${window})`, "", renderDigestTable(rows));
234
+ }
235
+ if (peers) {
236
+ for (const peer of peers) {
237
+ const skippedNote = peer.skipped > 0
238
+ ? `, ${peer.skipped} record(s) skipped as malformed`
239
+ : "";
240
+ parts.push("", `peer origin=${peer.origin} (${peer.sourcePath})${skippedNote}:`);
241
+ if (peer.error) {
242
+ parts.push(` WARNING: ${peer.error}`);
243
+ }
244
+ else if (peer.rows.length === 0) {
245
+ parts.push(" no frictions match");
246
+ }
247
+ else {
248
+ parts.push(indent(renderDigestTable(peer.rows), " "));
249
+ }
250
+ }
251
+ }
252
+ return parts.join("\n");
253
+ }
254
+ function renderDigestTable(rows) {
255
+ const header = [
256
+ "group",
257
+ "total",
258
+ "open",
259
+ "filed",
260
+ "resolved",
261
+ "wontfix",
262
+ "open%",
263
+ "recurrences",
264
+ "avg-h-triage",
265
+ ];
266
+ const body = rows.map((r) => [
267
+ r.group,
268
+ String(r.total),
269
+ String(r.open),
270
+ String(r.filed),
271
+ String(r.resolved),
272
+ String(r.wontfix),
273
+ r.total > 0 ? `${Math.round((r.open / r.total) * 100)}%` : "-",
274
+ String(r.recurrences),
275
+ r.avgHoursToTriage == null ? "-" : r.avgHoursToTriage.toFixed(1),
276
+ ]);
277
+ const widths = header.map((h, i) => Math.max(h.length, ...body.map((row) => row[i].length)));
278
+ const sep = widths.map((w) => "-".repeat(w)).join(" ");
279
+ const fmt = (row) => row.map((c, i) => c.padEnd(widths[i])).join(" ");
280
+ return [fmt(header), sep, ...body.map(fmt)].join("\n");
281
+ }
282
+ function indent(text, prefix) {
283
+ return text
284
+ .split("\n")
285
+ .map((line) => prefix + line)
286
+ .join("\n");
287
+ }
288
+ //# sourceMappingURL=digest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.js","sourceRoot":"","sources":["../../src/commands/digest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { Friction, FrictionSource, FrictionStatus } from "../types.js";
2
+ export type ExportFormat = "json" | "csv" | "md";
3
+ export interface ExportCommandInput {
4
+ format: ExportFormat;
5
+ out?: string;
6
+ query?: string;
7
+ status?: FrictionStatus;
8
+ tool?: string;
9
+ category?: string;
10
+ source?: FrictionSource;
11
+ age?: string;
12
+ limit?: number;
13
+ dbPath?: string;
14
+ }
15
+ export interface ExportRecord {
16
+ id: number;
17
+ sessionId: string | null;
18
+ toolSurface: string | null;
19
+ title: string;
20
+ description: string | null;
21
+ capturedAt: string;
22
+ severity: string | null;
23
+ category: string | null;
24
+ status: string;
25
+ recurrenceOfId: number | null;
26
+ source: string;
27
+ tags: string[];
28
+ }
29
+ export interface ExportCommandOutput {
30
+ format: ExportFormat;
31
+ rendered: string;
32
+ out: string | null;
33
+ count: number;
34
+ }
35
+ export declare function runExport(input: ExportCommandInput): ExportCommandOutput;
36
+ export declare function frictionToExport(f: Friction): Omit<ExportRecord, "tags">;