mulch-cli 0.4.3 → 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 (193) hide show
  1. package/README.md +24 -4
  2. package/package.json +11 -16
  3. package/src/api.ts +310 -0
  4. package/src/cli.ts +54 -0
  5. package/src/commands/add.ts +61 -0
  6. package/src/commands/compact.ts +924 -0
  7. package/src/commands/delete.ts +103 -0
  8. package/src/commands/diff.ts +209 -0
  9. package/src/commands/doctor.ts +586 -0
  10. package/src/commands/edit.ts +253 -0
  11. package/src/commands/init.ts +33 -0
  12. package/src/commands/learn.ts +170 -0
  13. package/src/commands/onboard.ts +362 -0
  14. package/src/commands/prime.ts +327 -0
  15. package/src/commands/prune.ts +128 -0
  16. package/src/commands/query.ts +177 -0
  17. package/src/commands/ready.ts +194 -0
  18. package/src/commands/record.ts +959 -0
  19. package/src/commands/search.ts +234 -0
  20. package/src/commands/setup.ts +823 -0
  21. package/src/commands/status.ts +83 -0
  22. package/src/commands/sync.ts +224 -0
  23. package/src/commands/update.ts +112 -0
  24. package/src/commands/validate.ts +107 -0
  25. package/src/index.ts +50 -0
  26. package/src/schemas/config.ts +31 -0
  27. package/src/schemas/index.ts +18 -0
  28. package/src/schemas/record-schema.ts +177 -0
  29. package/src/schemas/record.ts +83 -0
  30. package/src/utils/bm25.ts +243 -0
  31. package/src/utils/budget.ts +157 -0
  32. package/src/utils/config.ts +117 -0
  33. package/src/utils/expertise.ts +379 -0
  34. package/src/utils/format.ts +767 -0
  35. package/src/utils/git.ts +89 -0
  36. package/src/utils/index.ts +54 -0
  37. package/src/utils/json-output.ts +13 -0
  38. package/src/utils/lock.ts +82 -0
  39. package/src/utils/markers.ts +51 -0
  40. package/src/utils/scoring.ts +101 -0
  41. package/src/utils/version.ts +46 -0
  42. package/dist/cli.d.ts +0 -3
  43. package/dist/cli.d.ts.map +0 -1
  44. package/dist/cli.js +0 -50
  45. package/dist/cli.js.map +0 -1
  46. package/dist/commands/add.d.ts +0 -3
  47. package/dist/commands/add.d.ts.map +0 -1
  48. package/dist/commands/add.js +0 -47
  49. package/dist/commands/add.js.map +0 -1
  50. package/dist/commands/compact.d.ts +0 -5
  51. package/dist/commands/compact.d.ts.map +0 -1
  52. package/dist/commands/compact.js +0 -709
  53. package/dist/commands/compact.js.map +0 -1
  54. package/dist/commands/delete.d.ts +0 -3
  55. package/dist/commands/delete.d.ts.map +0 -1
  56. package/dist/commands/delete.js +0 -82
  57. package/dist/commands/delete.js.map +0 -1
  58. package/dist/commands/diff.d.ts +0 -11
  59. package/dist/commands/diff.d.ts.map +0 -1
  60. package/dist/commands/diff.js +0 -170
  61. package/dist/commands/diff.js.map +0 -1
  62. package/dist/commands/doctor.d.ts +0 -3
  63. package/dist/commands/doctor.d.ts.map +0 -1
  64. package/dist/commands/doctor.js +0 -391
  65. package/dist/commands/doctor.js.map +0 -1
  66. package/dist/commands/edit.d.ts +0 -3
  67. package/dist/commands/edit.d.ts.map +0 -1
  68. package/dist/commands/edit.js +0 -210
  69. package/dist/commands/edit.js.map +0 -1
  70. package/dist/commands/init.d.ts +0 -3
  71. package/dist/commands/init.d.ts.map +0 -1
  72. package/dist/commands/init.js +0 -30
  73. package/dist/commands/init.js.map +0 -1
  74. package/dist/commands/learn.d.ts +0 -12
  75. package/dist/commands/learn.d.ts.map +0 -1
  76. package/dist/commands/learn.js +0 -130
  77. package/dist/commands/learn.js.map +0 -1
  78. package/dist/commands/onboard.d.ts +0 -10
  79. package/dist/commands/onboard.d.ts.map +0 -1
  80. package/dist/commands/onboard.js +0 -286
  81. package/dist/commands/onboard.js.map +0 -1
  82. package/dist/commands/prime.d.ts +0 -3
  83. package/dist/commands/prime.d.ts.map +0 -1
  84. package/dist/commands/prime.js +0 -242
  85. package/dist/commands/prime.js.map +0 -1
  86. package/dist/commands/prune.d.ts +0 -8
  87. package/dist/commands/prune.d.ts.map +0 -1
  88. package/dist/commands/prune.js +0 -90
  89. package/dist/commands/prune.js.map +0 -1
  90. package/dist/commands/query.d.ts +0 -3
  91. package/dist/commands/query.d.ts.map +0 -1
  92. package/dist/commands/query.js +0 -118
  93. package/dist/commands/query.js.map +0 -1
  94. package/dist/commands/ready.d.ts +0 -3
  95. package/dist/commands/ready.d.ts.map +0 -1
  96. package/dist/commands/ready.js +0 -160
  97. package/dist/commands/ready.js.map +0 -1
  98. package/dist/commands/record.d.ts +0 -13
  99. package/dist/commands/record.d.ts.map +0 -1
  100. package/dist/commands/record.js +0 -688
  101. package/dist/commands/record.js.map +0 -1
  102. package/dist/commands/search.d.ts +0 -3
  103. package/dist/commands/search.d.ts.map +0 -1
  104. package/dist/commands/search.js +0 -163
  105. package/dist/commands/search.js.map +0 -1
  106. package/dist/commands/setup.d.ts +0 -29
  107. package/dist/commands/setup.d.ts.map +0 -1
  108. package/dist/commands/setup.js +0 -548
  109. package/dist/commands/setup.js.map +0 -1
  110. package/dist/commands/status.d.ts +0 -3
  111. package/dist/commands/status.d.ts.map +0 -1
  112. package/dist/commands/status.js +0 -61
  113. package/dist/commands/status.js.map +0 -1
  114. package/dist/commands/sync.d.ts +0 -3
  115. package/dist/commands/sync.d.ts.map +0 -1
  116. package/dist/commands/sync.js +0 -176
  117. package/dist/commands/sync.js.map +0 -1
  118. package/dist/commands/update.d.ts +0 -3
  119. package/dist/commands/update.d.ts.map +0 -1
  120. package/dist/commands/update.js +0 -72
  121. package/dist/commands/update.js.map +0 -1
  122. package/dist/commands/validate.d.ts +0 -3
  123. package/dist/commands/validate.d.ts.map +0 -1
  124. package/dist/commands/validate.js +0 -86
  125. package/dist/commands/validate.js.map +0 -1
  126. package/dist/index.d.ts +0 -7
  127. package/dist/index.d.ts.map +0 -1
  128. package/dist/index.js +0 -8
  129. package/dist/index.js.map +0 -1
  130. package/dist/schemas/config.d.ts +0 -17
  131. package/dist/schemas/config.d.ts.map +0 -1
  132. package/dist/schemas/config.js +0 -16
  133. package/dist/schemas/config.js.map +0 -1
  134. package/dist/schemas/index.d.ts +0 -5
  135. package/dist/schemas/index.d.ts.map +0 -1
  136. package/dist/schemas/index.js +0 -3
  137. package/dist/schemas/index.js.map +0 -1
  138. package/dist/schemas/record-schema.d.ts +0 -379
  139. package/dist/schemas/record-schema.d.ts.map +0 -1
  140. package/dist/schemas/record-schema.js +0 -148
  141. package/dist/schemas/record-schema.js.map +0 -1
  142. package/dist/schemas/record.d.ts +0 -60
  143. package/dist/schemas/record.d.ts.map +0 -1
  144. package/dist/schemas/record.js +0 -2
  145. package/dist/schemas/record.js.map +0 -1
  146. package/dist/utils/bm25.d.ts +0 -39
  147. package/dist/utils/bm25.d.ts.map +0 -1
  148. package/dist/utils/bm25.js +0 -171
  149. package/dist/utils/bm25.js.map +0 -1
  150. package/dist/utils/budget.d.ts +0 -35
  151. package/dist/utils/budget.d.ts.map +0 -1
  152. package/dist/utils/budget.js +0 -114
  153. package/dist/utils/budget.js.map +0 -1
  154. package/dist/utils/config.d.ts +0 -12
  155. package/dist/utils/config.d.ts.map +0 -1
  156. package/dist/utils/config.js +0 -89
  157. package/dist/utils/config.js.map +0 -1
  158. package/dist/utils/expertise.d.ts +0 -57
  159. package/dist/utils/expertise.d.ts.map +0 -1
  160. package/dist/utils/expertise.js +0 -264
  161. package/dist/utils/expertise.js.map +0 -1
  162. package/dist/utils/format.d.ts +0 -31
  163. package/dist/utils/format.d.ts.map +0 -1
  164. package/dist/utils/format.js +0 -556
  165. package/dist/utils/format.js.map +0 -1
  166. package/dist/utils/git.d.ts +0 -6
  167. package/dist/utils/git.d.ts.map +0 -1
  168. package/dist/utils/git.js +0 -81
  169. package/dist/utils/git.js.map +0 -1
  170. package/dist/utils/index.d.ts +0 -8
  171. package/dist/utils/index.d.ts.map +0 -1
  172. package/dist/utils/index.js +0 -8
  173. package/dist/utils/index.js.map +0 -1
  174. package/dist/utils/json-output.d.ts +0 -8
  175. package/dist/utils/json-output.d.ts.map +0 -1
  176. package/dist/utils/json-output.js +0 -7
  177. package/dist/utils/json-output.js.map +0 -1
  178. package/dist/utils/lock.d.ts +0 -6
  179. package/dist/utils/lock.d.ts.map +0 -1
  180. package/dist/utils/lock.js +0 -70
  181. package/dist/utils/lock.js.map +0 -1
  182. package/dist/utils/markers.d.ts +0 -22
  183. package/dist/utils/markers.d.ts.map +0 -1
  184. package/dist/utils/markers.js +0 -42
  185. package/dist/utils/markers.js.map +0 -1
  186. package/dist/utils/scoring.d.ts +0 -73
  187. package/dist/utils/scoring.d.ts.map +0 -1
  188. package/dist/utils/scoring.js +0 -80
  189. package/dist/utils/scoring.js.map +0 -1
  190. package/dist/utils/version.d.ts +0 -15
  191. package/dist/utils/version.d.ts.map +0 -1
  192. package/dist/utils/version.js +0 -48
  193. package/dist/utils/version.js.map +0 -1
@@ -1,264 +0,0 @@
1
- import { readFile, appendFile, writeFile, stat, rename, unlink } from "node:fs/promises";
2
- import { createHash, randomBytes } from "node:crypto";
3
- import { searchBM25, DEFAULT_BM25_PARAMS } from "./bm25.js";
4
- export async function readExpertiseFile(filePath) {
5
- let content;
6
- try {
7
- content = await readFile(filePath, "utf-8");
8
- }
9
- catch {
10
- return [];
11
- }
12
- const records = [];
13
- const lines = content.split("\n").filter((line) => line.trim().length > 0);
14
- for (const line of lines) {
15
- records.push(JSON.parse(line));
16
- }
17
- return records;
18
- }
19
- export function generateRecordId(record) {
20
- let key;
21
- switch (record.type) {
22
- case "convention":
23
- key = `convention:${record.content}`;
24
- break;
25
- case "pattern":
26
- key = `pattern:${record.name}`;
27
- break;
28
- case "failure":
29
- key = `failure:${record.description}`;
30
- break;
31
- case "decision":
32
- key = `decision:${record.title}`;
33
- break;
34
- case "reference":
35
- key = `reference:${record.name}`;
36
- break;
37
- case "guide":
38
- key = `guide:${record.name}`;
39
- break;
40
- }
41
- return `mx-${createHash("sha256").update(key).digest("hex").slice(0, 6)}`;
42
- }
43
- export async function appendRecord(filePath, record) {
44
- if (!record.id) {
45
- record.id = generateRecordId(record);
46
- }
47
- const line = JSON.stringify(record) + "\n";
48
- await appendFile(filePath, line, "utf-8");
49
- }
50
- export async function createExpertiseFile(filePath) {
51
- await writeFile(filePath, "", "utf-8");
52
- }
53
- export async function getFileModTime(filePath) {
54
- try {
55
- const stats = await stat(filePath);
56
- return stats.mtime;
57
- }
58
- catch {
59
- return null;
60
- }
61
- }
62
- export async function writeExpertiseFile(filePath, records) {
63
- for (const r of records) {
64
- if (!r.id) {
65
- r.id = generateRecordId(r);
66
- }
67
- }
68
- const content = records.map((r) => JSON.stringify(r)).join("\n") + (records.length > 0 ? "\n" : "");
69
- const tmpPath = `${filePath}.tmp.${randomBytes(8).toString("hex")}`;
70
- await writeFile(tmpPath, content, "utf-8");
71
- try {
72
- await rename(tmpPath, filePath);
73
- }
74
- catch (err) {
75
- try {
76
- await unlink(tmpPath);
77
- }
78
- catch { /* best-effort cleanup */ }
79
- throw err;
80
- }
81
- }
82
- export function countRecords(records) {
83
- return records.length;
84
- }
85
- export function filterByType(records, type) {
86
- return records.filter((r) => r.type === type);
87
- }
88
- export function filterByClassification(records, classification) {
89
- return records.filter((r) => r.classification === classification);
90
- }
91
- export function filterByFile(records, file) {
92
- const fileLower = file.toLowerCase();
93
- return records.filter((r) => {
94
- if ("files" in r && r.files) {
95
- return r.files.some((f) => f.toLowerCase().includes(fileLower));
96
- }
97
- return false;
98
- });
99
- }
100
- export function findDuplicate(existing, newRecord) {
101
- for (let i = 0; i < existing.length; i++) {
102
- const record = existing[i];
103
- if (record.type !== newRecord.type)
104
- continue;
105
- switch (record.type) {
106
- case "pattern":
107
- if (newRecord.type === "pattern" &&
108
- record.name === newRecord.name) {
109
- return { index: i, record };
110
- }
111
- break;
112
- case "decision":
113
- if (newRecord.type === "decision" &&
114
- record.title === newRecord.title) {
115
- return { index: i, record };
116
- }
117
- break;
118
- case "convention":
119
- if (newRecord.type === "convention" &&
120
- record.content === newRecord.content) {
121
- return { index: i, record };
122
- }
123
- break;
124
- case "failure":
125
- if (newRecord.type === "failure" &&
126
- record.description === newRecord.description) {
127
- return { index: i, record };
128
- }
129
- break;
130
- case "reference":
131
- if (newRecord.type === "reference" &&
132
- record.name === newRecord.name) {
133
- return { index: i, record };
134
- }
135
- break;
136
- case "guide":
137
- if (newRecord.type === "guide" &&
138
- record.name === newRecord.name) {
139
- return { index: i, record };
140
- }
141
- break;
142
- }
143
- }
144
- return null;
145
- }
146
- /**
147
- * Resolve an identifier to a record within a domain.
148
- * Accepts: full ID (mx-abc123), bare hash (abc123), or prefix (abc / mx-abc).
149
- * Returns the unique matching record or an error if not found / ambiguous.
150
- */
151
- export function resolveRecordId(records, identifier) {
152
- // Normalize: strip mx- prefix if present to get the hash part
153
- const hash = identifier.startsWith("mx-")
154
- ? identifier.slice(3)
155
- : identifier;
156
- // Try exact match first
157
- const exactIndex = records.findIndex((r) => r.id === `mx-${hash}`);
158
- if (exactIndex !== -1) {
159
- return { ok: true, index: exactIndex, record: records[exactIndex] };
160
- }
161
- // Try prefix match
162
- const matches = [];
163
- for (let i = 0; i < records.length; i++) {
164
- const rid = records[i].id;
165
- if (rid && rid.startsWith(`mx-${hash}`)) {
166
- matches.push({ index: i, record: records[i] });
167
- }
168
- }
169
- if (matches.length === 1) {
170
- return { ok: true, index: matches[0].index, record: matches[0].record };
171
- }
172
- if (matches.length > 1) {
173
- const ids = matches.map((m) => m.record.id).join(", ");
174
- return {
175
- ok: false,
176
- error: `Ambiguous identifier "${identifier}" matches ${matches.length} records: ${ids}. Use more characters to disambiguate.`,
177
- };
178
- }
179
- return {
180
- ok: false,
181
- error: `Record "${identifier}" not found. Run \`mulch query\` to see record IDs.`,
182
- };
183
- }
184
- /**
185
- * Search records using BM25 ranking algorithm.
186
- * Returns records sorted by relevance (highest score first).
187
- */
188
- export function searchRecords(records, query) {
189
- const results = searchBM25(records, query, DEFAULT_BM25_PARAMS);
190
- return results.map((r) => r.record);
191
- }
192
- /**
193
- * Check if a record is stale based on classification and shelf life.
194
- */
195
- export function isRecordStale(record, now, shelfLife) {
196
- const classification = record.classification;
197
- if (classification === "foundational") {
198
- return false;
199
- }
200
- const recordedAt = new Date(record.recorded_at);
201
- const ageInDays = Math.floor((now.getTime() - recordedAt.getTime()) / (1000 * 60 * 60 * 24));
202
- if (classification === "tactical") {
203
- return ageInDays > shelfLife.tactical;
204
- }
205
- if (classification === "observational") {
206
- return ageInDays > shelfLife.observational;
207
- }
208
- return false;
209
- }
210
- /**
211
- * Calculate comprehensive health metrics for a domain.
212
- */
213
- export function calculateDomainHealth(records, maxEntries, shelfLife) {
214
- const now = new Date();
215
- // Initialize distributions
216
- const typeDistribution = {
217
- convention: 0,
218
- pattern: 0,
219
- failure: 0,
220
- decision: 0,
221
- reference: 0,
222
- guide: 0,
223
- };
224
- const classificationDistribution = {
225
- foundational: 0,
226
- tactical: 0,
227
- observational: 0,
228
- };
229
- let staleCount = 0;
230
- let oldestTimestamp = null;
231
- let newestTimestamp = null;
232
- // Calculate metrics
233
- for (const record of records) {
234
- // Type distribution
235
- typeDistribution[record.type]++;
236
- // Classification distribution
237
- classificationDistribution[record.classification]++;
238
- // Stale count
239
- if (isRecordStale(record, now, shelfLife)) {
240
- staleCount++;
241
- }
242
- // Oldest/newest timestamps
243
- const recordedAt = record.recorded_at;
244
- if (!oldestTimestamp || recordedAt < oldestTimestamp) {
245
- oldestTimestamp = recordedAt;
246
- }
247
- if (!newestTimestamp || recordedAt > newestTimestamp) {
248
- newestTimestamp = recordedAt;
249
- }
250
- }
251
- // Governance utilization (as percentage, 0-100)
252
- const governanceUtilization = maxEntries > 0
253
- ? Math.round((records.length / maxEntries) * 100)
254
- : 0;
255
- return {
256
- governance_utilization: governanceUtilization,
257
- stale_count: staleCount,
258
- type_distribution: typeDistribution,
259
- classification_distribution: classificationDistribution,
260
- oldest_timestamp: oldestTimestamp,
261
- newest_timestamp: newestTimestamp,
262
- };
263
- }
264
- //# sourceMappingURL=expertise.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expertise.js","sourceRoot":"","sources":["../../src/utils/expertise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB;IAEhB,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,IAAI,GAAW,CAAC;IAChB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,YAAY;YACf,GAAG,GAAG,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM;QACR,KAAK,SAAS;YACZ,GAAG,GAAG,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM;QACR,KAAK,SAAS;YACZ,GAAG,GAAG,WAAW,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM;QACR,KAAK,UAAU;YACb,GAAG,GAAG,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM;QACR,KAAK,WAAW;YACd,GAAG,GAAG,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM;QACR,KAAK,OAAO;YACV,GAAG,GAAG,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM;IACV,CAAC;IACD,OAAO,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,MAAuB;IAEvB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC3C,MAAM,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,OAA0B;IAE1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACV,CAAC,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpG,MAAM,OAAO,GAAG,GAAG,QAAQ,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IACpE,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;QAClE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAA0B;IACrD,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAA0B,EAC1B,IAAY;IAEZ,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAA0B,EAC1B,cAAsB;IAEtB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,cAAc,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAA0B,EAC1B,IAAY;IAEZ,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAA2B,EAC3B,SAA0B;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;YAAE,SAAS;QAE7C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,SAAS;gBACZ,IACE,SAAS,CAAC,IAAI,KAAK,SAAS;oBAC5B,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAC9B,CAAC;oBACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC9B,CAAC;gBACD,MAAM;YACR,KAAK,UAAU;gBACb,IACE,SAAS,CAAC,IAAI,KAAK,UAAU;oBAC7B,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,EAChC,CAAC;oBACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC9B,CAAC;gBACD,MAAM;YACR,KAAK,YAAY;gBACf,IACE,SAAS,CAAC,IAAI,KAAK,YAAY;oBAC/B,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,EACpC,CAAC;oBACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC9B,CAAC;gBACD,MAAM;YACR,KAAK,SAAS;gBACZ,IACE,SAAS,CAAC,IAAI,KAAK,SAAS;oBAC5B,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW,EAC5C,CAAC;oBACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC9B,CAAC;gBACD,MAAM;YACR,KAAK,WAAW;gBACd,IACE,SAAS,CAAC,IAAI,KAAK,WAAW;oBAC9B,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAC9B,CAAC;oBACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC9B,CAAC;gBACD,MAAM;YACR,KAAK,OAAO;gBACV,IACE,SAAS,CAAC,IAAI,KAAK,OAAO;oBAC1B,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAC9B,CAAC;oBACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC9B,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAMD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA0B,EAC1B,UAAkB;IAElB,8DAA8D;IAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;QACvC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,UAAU,CAAC;IAEf,wBAAwB;IACxB,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,IAAI,EAAE,CAAC,CAAC;IACnE,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,mBAAmB;IACnB,MAAM,OAAO,GAAsD,EAAE,CAAC;IACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1E,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,yBAAyB,UAAU,aAAa,OAAO,CAAC,MAAM,aAAa,GAAG,wCAAwC;SAC9H,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,WAAW,UAAU,qDAAqD;KAClF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA0B,EAC1B,KAAa;IAEb,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAChE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAWD;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAuB,EACvB,GAAS,EACT,SAAsD;IAEtD,MAAM,cAAc,GAAmB,MAAM,CAAC,cAAc,CAAC;IAE7D,IAAI,cAAc,KAAK,cAAc,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAC1B,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAC/D,CAAC;IAEF,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC;IACxC,CAAC;IAED,IAAI,cAAc,KAAK,eAAe,EAAE,CAAC;QACvC,OAAO,SAAS,GAAG,SAAS,CAAC,aAAa,CAAC;IAC7C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA0B,EAC1B,UAAkB,EAClB,SAAsD;IAEtD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,2BAA2B;IAC3B,MAAM,gBAAgB,GAA+B;QACnD,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,CAAC;QACZ,KAAK,EAAE,CAAC;KACT,CAAC;IAEF,MAAM,0BAA0B,GAAmC;QACjE,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,CAAC;KACjB,CAAC;IAEF,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,eAAe,GAAkB,IAAI,CAAC;IAE1C,oBAAoB;IACpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,oBAAoB;QACpB,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAEhC,8BAA8B;QAC9B,0BAA0B,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QAEpD,cAAc;QACd,IAAI,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;YAC1C,UAAU,EAAE,CAAC;QACf,CAAC;QAED,2BAA2B;QAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,eAAe,IAAI,UAAU,GAAG,eAAe,EAAE,CAAC;YACrD,eAAe,GAAG,UAAU,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,eAAe,IAAI,UAAU,GAAG,eAAe,EAAE,CAAC;YACrD,eAAe,GAAG,UAAU,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,MAAM,qBAAqB,GAAG,UAAU,GAAG,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC;QACjD,CAAC,CAAC,CAAC,CAAC;IAEN,OAAO;QACL,sBAAsB,EAAE,qBAAqB;QAC7C,WAAW,EAAE,UAAU;QACvB,iBAAiB,EAAE,gBAAgB;QACnC,2BAA2B,EAAE,0BAA0B;QACvD,gBAAgB,EAAE,eAAe;QACjC,gBAAgB,EAAE,eAAe;KAClC,CAAC;AACJ,CAAC"}
@@ -1,31 +0,0 @@
1
- import type { ExpertiseRecord } from "../schemas/record.js";
2
- export declare function formatTimeAgo(date: Date): string;
3
- export declare function getRecordSummary(record: ExpertiseRecord): string;
4
- export declare function formatDomainExpertiseCompact(domain: string, records: ExpertiseRecord[], lastUpdated: Date | null): string;
5
- export declare function formatPrimeOutputCompact(domainSections: string[]): string;
6
- export declare function formatDomainExpertise(domain: string, records: ExpertiseRecord[], lastUpdated: Date | null, options?: {
7
- full?: boolean;
8
- }): string;
9
- export declare function formatPrimeOutput(domainSections: string[]): string;
10
- export type PrimeFormat = "markdown" | "xml" | "plain";
11
- export declare function formatDomainExpertiseXml(domain: string, records: ExpertiseRecord[], lastUpdated: Date | null): string;
12
- export declare function formatPrimeOutputXml(domainSections: string[]): string;
13
- export declare function formatDomainExpertisePlain(domain: string, records: ExpertiseRecord[], lastUpdated: Date | null): string;
14
- export declare function formatPrimeOutputPlain(domainSections: string[]): string;
15
- export interface McpDomain {
16
- domain: string;
17
- entry_count: number;
18
- records: ExpertiseRecord[];
19
- }
20
- export declare function formatMcpOutput(domains: McpDomain[]): string;
21
- export declare function getSessionEndReminder(format: PrimeFormat): string;
22
- export declare function formatStatusOutput(domainStats: Array<{
23
- domain: string;
24
- count: number;
25
- lastUpdated: Date | null;
26
- }>, governance: {
27
- max_entries: number;
28
- warn_entries: number;
29
- hard_limit: number;
30
- }): string;
31
- //# sourceMappingURL=format.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAQhB,MAAM,sBAAsB,CAAC;AAE9B,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAWhD;AAuHD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAehE;AA8BD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EAAE,EAC1B,WAAW,EAAE,IAAI,GAAG,IAAI,GACvB,MAAM,CAUR;AAED,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EAAE,GACvB,MAAM,CAwBR;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EAAE,EAC1B,WAAW,EAAE,IAAI,GAAG,IAAI,EACxB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/B,MAAM,CAuCR;AAED,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EAAE,GACvB,MAAM,CA6FR;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,CAAC;AAWvD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EAAE,EAC1B,WAAW,EAAE,IAAI,GAAG,IAAI,GACvB,MAAM,CA6DR;AAED,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,MAAM,EAAE,GACvB,MAAM,CAYR;AAID,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EAAE,EAC1B,WAAW,EAAE,IAAI,GAAG,IAAI,GACvB,MAAM,CAyFR;AAED,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,MAAM,EAAE,GACvB,MAAM,CAaR;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,EAAE,GACnB,MAAM,CAER;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAyCjE;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B,CAAC,EACF,UAAU,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC5E,MAAM,CAyBR"}