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.
- package/README.md +24 -4
- package/package.json +11 -16
- package/src/api.ts +310 -0
- package/src/cli.ts +54 -0
- package/src/commands/add.ts +61 -0
- package/src/commands/compact.ts +924 -0
- package/src/commands/delete.ts +103 -0
- package/src/commands/diff.ts +209 -0
- package/src/commands/doctor.ts +586 -0
- package/src/commands/edit.ts +253 -0
- package/src/commands/init.ts +33 -0
- package/src/commands/learn.ts +170 -0
- package/src/commands/onboard.ts +362 -0
- package/src/commands/prime.ts +327 -0
- package/src/commands/prune.ts +128 -0
- package/src/commands/query.ts +177 -0
- package/src/commands/ready.ts +194 -0
- package/src/commands/record.ts +959 -0
- package/src/commands/search.ts +234 -0
- package/src/commands/setup.ts +823 -0
- package/src/commands/status.ts +83 -0
- package/src/commands/sync.ts +224 -0
- package/src/commands/update.ts +112 -0
- package/src/commands/validate.ts +107 -0
- package/src/index.ts +50 -0
- package/src/schemas/config.ts +31 -0
- package/src/schemas/index.ts +18 -0
- package/src/schemas/record-schema.ts +177 -0
- package/src/schemas/record.ts +83 -0
- package/src/utils/bm25.ts +243 -0
- package/src/utils/budget.ts +157 -0
- package/src/utils/config.ts +117 -0
- package/src/utils/expertise.ts +379 -0
- package/src/utils/format.ts +767 -0
- package/src/utils/git.ts +89 -0
- package/src/utils/index.ts +54 -0
- package/src/utils/json-output.ts +13 -0
- package/src/utils/lock.ts +82 -0
- package/src/utils/markers.ts +51 -0
- package/src/utils/scoring.ts +101 -0
- package/src/utils/version.ts +46 -0
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -50
- package/dist/cli.js.map +0 -1
- package/dist/commands/add.d.ts +0 -3
- package/dist/commands/add.d.ts.map +0 -1
- package/dist/commands/add.js +0 -47
- package/dist/commands/add.js.map +0 -1
- package/dist/commands/compact.d.ts +0 -5
- package/dist/commands/compact.d.ts.map +0 -1
- package/dist/commands/compact.js +0 -709
- package/dist/commands/compact.js.map +0 -1
- package/dist/commands/delete.d.ts +0 -3
- package/dist/commands/delete.d.ts.map +0 -1
- package/dist/commands/delete.js +0 -82
- package/dist/commands/delete.js.map +0 -1
- package/dist/commands/diff.d.ts +0 -11
- package/dist/commands/diff.d.ts.map +0 -1
- package/dist/commands/diff.js +0 -170
- package/dist/commands/diff.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -3
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -391
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/edit.d.ts +0 -3
- package/dist/commands/edit.d.ts.map +0 -1
- package/dist/commands/edit.js +0 -210
- package/dist/commands/edit.js.map +0 -1
- package/dist/commands/init.d.ts +0 -3
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -30
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/learn.d.ts +0 -12
- package/dist/commands/learn.d.ts.map +0 -1
- package/dist/commands/learn.js +0 -130
- package/dist/commands/learn.js.map +0 -1
- package/dist/commands/onboard.d.ts +0 -10
- package/dist/commands/onboard.d.ts.map +0 -1
- package/dist/commands/onboard.js +0 -286
- package/dist/commands/onboard.js.map +0 -1
- package/dist/commands/prime.d.ts +0 -3
- package/dist/commands/prime.d.ts.map +0 -1
- package/dist/commands/prime.js +0 -242
- package/dist/commands/prime.js.map +0 -1
- package/dist/commands/prune.d.ts +0 -8
- package/dist/commands/prune.d.ts.map +0 -1
- package/dist/commands/prune.js +0 -90
- package/dist/commands/prune.js.map +0 -1
- package/dist/commands/query.d.ts +0 -3
- package/dist/commands/query.d.ts.map +0 -1
- package/dist/commands/query.js +0 -118
- package/dist/commands/query.js.map +0 -1
- package/dist/commands/ready.d.ts +0 -3
- package/dist/commands/ready.d.ts.map +0 -1
- package/dist/commands/ready.js +0 -160
- package/dist/commands/ready.js.map +0 -1
- package/dist/commands/record.d.ts +0 -13
- package/dist/commands/record.d.ts.map +0 -1
- package/dist/commands/record.js +0 -688
- package/dist/commands/record.js.map +0 -1
- package/dist/commands/search.d.ts +0 -3
- package/dist/commands/search.d.ts.map +0 -1
- package/dist/commands/search.js +0 -163
- package/dist/commands/search.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -29
- package/dist/commands/setup.d.ts.map +0 -1
- package/dist/commands/setup.js +0 -548
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/status.d.ts +0 -3
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -61
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/sync.d.ts +0 -3
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js +0 -176
- package/dist/commands/sync.js.map +0 -1
- package/dist/commands/update.d.ts +0 -3
- package/dist/commands/update.d.ts.map +0 -1
- package/dist/commands/update.js +0 -72
- package/dist/commands/update.js.map +0 -1
- package/dist/commands/validate.d.ts +0 -3
- package/dist/commands/validate.d.ts.map +0 -1
- package/dist/commands/validate.js +0 -86
- package/dist/commands/validate.js.map +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -8
- package/dist/index.js.map +0 -1
- package/dist/schemas/config.d.ts +0 -17
- package/dist/schemas/config.d.ts.map +0 -1
- package/dist/schemas/config.js +0 -16
- package/dist/schemas/config.js.map +0 -1
- package/dist/schemas/index.d.ts +0 -5
- package/dist/schemas/index.d.ts.map +0 -1
- package/dist/schemas/index.js +0 -3
- package/dist/schemas/index.js.map +0 -1
- package/dist/schemas/record-schema.d.ts +0 -379
- package/dist/schemas/record-schema.d.ts.map +0 -1
- package/dist/schemas/record-schema.js +0 -148
- package/dist/schemas/record-schema.js.map +0 -1
- package/dist/schemas/record.d.ts +0 -60
- package/dist/schemas/record.d.ts.map +0 -1
- package/dist/schemas/record.js +0 -2
- package/dist/schemas/record.js.map +0 -1
- package/dist/utils/bm25.d.ts +0 -39
- package/dist/utils/bm25.d.ts.map +0 -1
- package/dist/utils/bm25.js +0 -171
- package/dist/utils/bm25.js.map +0 -1
- package/dist/utils/budget.d.ts +0 -35
- package/dist/utils/budget.d.ts.map +0 -1
- package/dist/utils/budget.js +0 -114
- package/dist/utils/budget.js.map +0 -1
- package/dist/utils/config.d.ts +0 -12
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -89
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/expertise.d.ts +0 -57
- package/dist/utils/expertise.d.ts.map +0 -1
- package/dist/utils/expertise.js +0 -264
- package/dist/utils/expertise.js.map +0 -1
- package/dist/utils/format.d.ts +0 -31
- package/dist/utils/format.d.ts.map +0 -1
- package/dist/utils/format.js +0 -556
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/git.d.ts +0 -6
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -81
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/index.d.ts +0 -8
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -8
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/json-output.d.ts +0 -8
- package/dist/utils/json-output.d.ts.map +0 -1
- package/dist/utils/json-output.js +0 -7
- package/dist/utils/json-output.js.map +0 -1
- package/dist/utils/lock.d.ts +0 -6
- package/dist/utils/lock.d.ts.map +0 -1
- package/dist/utils/lock.js +0 -70
- package/dist/utils/lock.js.map +0 -1
- package/dist/utils/markers.d.ts +0 -22
- package/dist/utils/markers.d.ts.map +0 -1
- package/dist/utils/markers.js +0 -42
- package/dist/utils/markers.js.map +0 -1
- package/dist/utils/scoring.d.ts +0 -73
- package/dist/utils/scoring.d.ts.map +0 -1
- package/dist/utils/scoring.js +0 -80
- package/dist/utils/scoring.js.map +0 -1
- package/dist/utils/version.d.ts +0 -15
- package/dist/utils/version.d.ts.map +0 -1
- package/dist/utils/version.js +0 -48
- package/dist/utils/version.js.map +0 -1
package/dist/commands/prime.js
DELETED
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
import { writeFile } from "node:fs/promises";
|
|
2
|
-
import { Option } from "commander";
|
|
3
|
-
import chalk from "chalk";
|
|
4
|
-
import { readConfig, getExpertisePath } from "../utils/config.js";
|
|
5
|
-
import { readExpertiseFile, getFileModTime } from "../utils/expertise.js";
|
|
6
|
-
import { formatDomainExpertise, formatPrimeOutput, formatDomainExpertiseXml, formatPrimeOutputXml, formatDomainExpertisePlain, formatPrimeOutputPlain, formatDomainExpertiseCompact, formatPrimeOutputCompact, formatMcpOutput, getSessionEndReminder, } from "../utils/format.js";
|
|
7
|
-
import { outputJsonError } from "../utils/json-output.js";
|
|
8
|
-
import { isGitRepo, getChangedFiles, filterByContext } from "../utils/git.js";
|
|
9
|
-
import { DEFAULT_BUDGET, applyBudget, formatBudgetSummary, } from "../utils/budget.js";
|
|
10
|
-
/**
|
|
11
|
-
* Produce a rough text representation of a record for token estimation.
|
|
12
|
-
* Uses a simple format similar to compact lines.
|
|
13
|
-
*/
|
|
14
|
-
function estimateRecordText(record) {
|
|
15
|
-
switch (record.type) {
|
|
16
|
-
case "convention":
|
|
17
|
-
return `[convention] ${record.content}`;
|
|
18
|
-
case "pattern": {
|
|
19
|
-
const files = record.files && record.files.length > 0 ? ` (${record.files.join(", ")})` : "";
|
|
20
|
-
return `[pattern] ${record.name}: ${record.description}${files}`;
|
|
21
|
-
}
|
|
22
|
-
case "failure":
|
|
23
|
-
return `[failure] ${record.description} -> ${record.resolution}`;
|
|
24
|
-
case "decision":
|
|
25
|
-
return `[decision] ${record.title}: ${record.rationale}`;
|
|
26
|
-
case "reference": {
|
|
27
|
-
const refFiles = record.files && record.files.length > 0 ? `: ${record.files.join(", ")}` : `: ${record.description}`;
|
|
28
|
-
return `[reference] ${record.name}${refFiles}`;
|
|
29
|
-
}
|
|
30
|
-
case "guide":
|
|
31
|
-
return `[guide] ${record.name}: ${record.description}`;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
export function registerPrimeCommand(program) {
|
|
35
|
-
program
|
|
36
|
-
.command("prime")
|
|
37
|
-
.description("Generate a priming prompt from expertise records")
|
|
38
|
-
.argument("[domains...]", "optional domain(s) to scope output to")
|
|
39
|
-
.option("--full", "include full record details (classification, evidence)")
|
|
40
|
-
.option("-v, --verbose", "full output with section headers and recording instructions")
|
|
41
|
-
.option("--mcp", "output in MCP-compatible JSON format")
|
|
42
|
-
.option("--domain <domains...>", "domain(s) to include")
|
|
43
|
-
.option("--exclude-domain <domains...>", "domain(s) to exclude")
|
|
44
|
-
.addOption(new Option("--format <format>", "output format")
|
|
45
|
-
.choices(["markdown", "xml", "plain"])
|
|
46
|
-
.default("markdown"))
|
|
47
|
-
.option("--context", "filter records to only those relevant to changed files")
|
|
48
|
-
.option("--files <paths...>", "filter records to only those relevant to specified files")
|
|
49
|
-
.option("--export <path>", "export output to a file")
|
|
50
|
-
.option("--budget <tokens>", `token budget for output (default: ${DEFAULT_BUDGET})`)
|
|
51
|
-
.option("--no-limit", "disable token budget limit")
|
|
52
|
-
.action(async (domainsArg, options) => {
|
|
53
|
-
const jsonMode = program.opts().json === true;
|
|
54
|
-
try {
|
|
55
|
-
const config = await readConfig();
|
|
56
|
-
const format = options.format ?? "markdown";
|
|
57
|
-
const requested = [...domainsArg, ...(options.domain ?? [])];
|
|
58
|
-
const unique = [...new Set(requested)];
|
|
59
|
-
for (const d of unique) {
|
|
60
|
-
if (!config.domains.includes(d)) {
|
|
61
|
-
if (jsonMode) {
|
|
62
|
-
outputJsonError("prime", `Domain "${d}" not found in config. Available domains: ${config.domains.join(", ")}`);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
console.error(`Error: Domain "${d}" not found in config. Available domains: ${config.domains.join(", ")}`);
|
|
66
|
-
}
|
|
67
|
-
process.exitCode = 1;
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
const excluded = options.excludeDomain ?? [];
|
|
72
|
-
for (const d of excluded) {
|
|
73
|
-
if (!config.domains.includes(d)) {
|
|
74
|
-
if (jsonMode) {
|
|
75
|
-
outputJsonError("prime", `Excluded domain "${d}" not found in config. Available domains: ${config.domains.join(", ")}`);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
console.error(`Error: Excluded domain "${d}" not found in config. Available domains: ${config.domains.join(", ")}`);
|
|
79
|
-
}
|
|
80
|
-
process.exitCode = 1;
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
let targetDomains = unique.length > 0
|
|
85
|
-
? unique
|
|
86
|
-
: config.domains;
|
|
87
|
-
targetDomains = targetDomains.filter(d => !excluded.includes(d));
|
|
88
|
-
// Resolve changed files for --context or --files filtering
|
|
89
|
-
let filesToFilter;
|
|
90
|
-
if (options.context) {
|
|
91
|
-
const cwd = process.cwd();
|
|
92
|
-
if (!isGitRepo(cwd)) {
|
|
93
|
-
const msg = "Not in a git repository. --context requires git.";
|
|
94
|
-
if (jsonMode) {
|
|
95
|
-
outputJsonError("prime", msg);
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
console.error(`Error: ${msg}`);
|
|
99
|
-
}
|
|
100
|
-
process.exitCode = 1;
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
filesToFilter = getChangedFiles(cwd, "HEAD~1");
|
|
104
|
-
if (filesToFilter.length === 0) {
|
|
105
|
-
if (jsonMode) {
|
|
106
|
-
outputJsonError("prime", "No changed files found. Nothing to filter by.");
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
console.log("No changed files found. Nothing to filter by.");
|
|
110
|
-
}
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
else if (options.files && options.files.length > 0) {
|
|
115
|
-
filesToFilter = options.files;
|
|
116
|
-
}
|
|
117
|
-
// Determine budget settings
|
|
118
|
-
const isMachineOutput = options.mcp === true || jsonMode;
|
|
119
|
-
const budgetEnabled = !isMachineOutput && options.noLimit !== true;
|
|
120
|
-
const budget = options.budget ? parseInt(options.budget, 10) : DEFAULT_BUDGET;
|
|
121
|
-
let output;
|
|
122
|
-
if (isMachineOutput) {
|
|
123
|
-
// --json and --mcp produce the same structured output — no budget
|
|
124
|
-
const domains = [];
|
|
125
|
-
for (const domain of targetDomains) {
|
|
126
|
-
const filePath = getExpertisePath(domain);
|
|
127
|
-
let records = await readExpertiseFile(filePath);
|
|
128
|
-
if (filesToFilter) {
|
|
129
|
-
records = filterByContext(records, filesToFilter);
|
|
130
|
-
}
|
|
131
|
-
if (!filesToFilter || records.length > 0) {
|
|
132
|
-
domains.push({ domain, entry_count: records.length, records });
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
output = formatMcpOutput(domains);
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
// Load all records per domain
|
|
139
|
-
const allDomainRecords = [];
|
|
140
|
-
const modTimes = new Map();
|
|
141
|
-
for (const domain of targetDomains) {
|
|
142
|
-
const filePath = getExpertisePath(domain);
|
|
143
|
-
let records = await readExpertiseFile(filePath);
|
|
144
|
-
if (filesToFilter) {
|
|
145
|
-
records = filterByContext(records, filesToFilter);
|
|
146
|
-
if (records.length === 0)
|
|
147
|
-
continue;
|
|
148
|
-
}
|
|
149
|
-
allDomainRecords.push({ domain, records });
|
|
150
|
-
const lastUpdated = await getFileModTime(filePath);
|
|
151
|
-
modTimes.set(domain, lastUpdated);
|
|
152
|
-
}
|
|
153
|
-
// Apply budget filtering
|
|
154
|
-
let domainRecordsToFormat;
|
|
155
|
-
let droppedCount = 0;
|
|
156
|
-
let droppedDomainCount = 0;
|
|
157
|
-
if (budgetEnabled) {
|
|
158
|
-
const result = applyBudget(allDomainRecords, budget, (record) => estimateRecordText(record));
|
|
159
|
-
domainRecordsToFormat = result.kept;
|
|
160
|
-
droppedCount = result.droppedCount;
|
|
161
|
-
droppedDomainCount = result.droppedDomainCount;
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
domainRecordsToFormat = allDomainRecords;
|
|
165
|
-
}
|
|
166
|
-
// Format domain sections
|
|
167
|
-
const domainSections = [];
|
|
168
|
-
for (const { domain, records } of domainRecordsToFormat) {
|
|
169
|
-
const lastUpdated = modTimes.get(domain) ?? null;
|
|
170
|
-
if (options.verbose || options.full || format !== "markdown") {
|
|
171
|
-
switch (format) {
|
|
172
|
-
case "xml":
|
|
173
|
-
domainSections.push(formatDomainExpertiseXml(domain, records, lastUpdated));
|
|
174
|
-
break;
|
|
175
|
-
case "plain":
|
|
176
|
-
domainSections.push(formatDomainExpertisePlain(domain, records, lastUpdated));
|
|
177
|
-
break;
|
|
178
|
-
default:
|
|
179
|
-
domainSections.push(formatDomainExpertise(domain, records, lastUpdated, {
|
|
180
|
-
full: options.full,
|
|
181
|
-
}));
|
|
182
|
-
break;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
domainSections.push(formatDomainExpertiseCompact(domain, records, lastUpdated));
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
if (options.verbose || options.full || format !== "markdown") {
|
|
190
|
-
switch (format) {
|
|
191
|
-
case "xml":
|
|
192
|
-
output = formatPrimeOutputXml(domainSections);
|
|
193
|
-
break;
|
|
194
|
-
case "plain":
|
|
195
|
-
output = formatPrimeOutputPlain(domainSections);
|
|
196
|
-
break;
|
|
197
|
-
default:
|
|
198
|
-
output = formatPrimeOutput(domainSections);
|
|
199
|
-
break;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
output = formatPrimeOutputCompact(domainSections);
|
|
204
|
-
}
|
|
205
|
-
// Append truncation summary before session reminder
|
|
206
|
-
if (droppedCount > 0) {
|
|
207
|
-
output += "\n\n" + formatBudgetSummary(droppedCount, droppedDomainCount);
|
|
208
|
-
}
|
|
209
|
-
output += "\n\n" + getSessionEndReminder(format);
|
|
210
|
-
}
|
|
211
|
-
if (options.export) {
|
|
212
|
-
await writeFile(options.export, output + "\n", "utf-8");
|
|
213
|
-
if (!jsonMode) {
|
|
214
|
-
console.log(chalk.green(`Exported to ${options.export}`));
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
console.log(output);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
catch (err) {
|
|
222
|
-
if (err.code === "ENOENT") {
|
|
223
|
-
if (jsonMode) {
|
|
224
|
-
outputJsonError("prime", "No .mulch/ directory found. Run `mulch init` first.");
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
console.error("Error: No .mulch/ directory found. Run `mulch init` first.");
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
if (jsonMode) {
|
|
232
|
-
outputJsonError("prime", err.message);
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
console.error(`Error: ${err.message}`);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
process.exitCode = 1;
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
//# sourceMappingURL=prime.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prime.js","sourceRoot":"","sources":["../../src/commands/prime.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/prune.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import type { ExpertiseRecord } from "../schemas/record.js";
|
|
3
|
-
export declare function isStale(record: ExpertiseRecord, now: Date, shelfLife: {
|
|
4
|
-
tactical: number;
|
|
5
|
-
observational: number;
|
|
6
|
-
}): boolean;
|
|
7
|
-
export declare function registerPruneCommand(program: Command): void;
|
|
8
|
-
//# sourceMappingURL=prune.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../../src/commands/prune.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,sBAAsB,CAAC;AAU5E,wBAAgB,OAAO,CACrB,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,IAAI,EACT,SAAS,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACrD,OAAO,CAqBT;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmF3D"}
|
package/dist/commands/prune.js
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
|
-
import { readConfig, getExpertisePath } from "../utils/config.js";
|
|
3
|
-
import { readExpertiseFile, writeExpertiseFile } from "../utils/expertise.js";
|
|
4
|
-
import { withFileLock } from "../utils/lock.js";
|
|
5
|
-
import { outputJson } from "../utils/json-output.js";
|
|
6
|
-
export function isStale(record, now, shelfLife) {
|
|
7
|
-
const classification = record.classification;
|
|
8
|
-
if (classification === "foundational") {
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
const recordedAt = new Date(record.recorded_at);
|
|
12
|
-
const ageInDays = Math.floor((now.getTime() - recordedAt.getTime()) / (1000 * 60 * 60 * 24));
|
|
13
|
-
if (classification === "tactical") {
|
|
14
|
-
return ageInDays > shelfLife.tactical;
|
|
15
|
-
}
|
|
16
|
-
if (classification === "observational") {
|
|
17
|
-
return ageInDays > shelfLife.observational;
|
|
18
|
-
}
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
export function registerPruneCommand(program) {
|
|
22
|
-
program
|
|
23
|
-
.command("prune")
|
|
24
|
-
.description("Remove outdated or low-value expertise records")
|
|
25
|
-
.option("--dry-run", "Show what would be pruned without removing", false)
|
|
26
|
-
.action(async (options) => {
|
|
27
|
-
const jsonMode = program.opts().json === true;
|
|
28
|
-
const config = await readConfig();
|
|
29
|
-
const now = new Date();
|
|
30
|
-
const shelfLife = config.classification_defaults.shelf_life;
|
|
31
|
-
const results = [];
|
|
32
|
-
let totalPruned = 0;
|
|
33
|
-
for (const domain of config.domains) {
|
|
34
|
-
const filePath = getExpertisePath(domain);
|
|
35
|
-
const domainResult = await withFileLock(filePath, async () => {
|
|
36
|
-
const records = await readExpertiseFile(filePath);
|
|
37
|
-
if (records.length === 0) {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
const kept = [];
|
|
41
|
-
let pruned = 0;
|
|
42
|
-
for (const record of records) {
|
|
43
|
-
if (isStale(record, now, shelfLife)) {
|
|
44
|
-
pruned++;
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
kept.push(record);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
if (pruned > 0) {
|
|
51
|
-
if (!options.dryRun) {
|
|
52
|
-
await writeExpertiseFile(filePath, kept);
|
|
53
|
-
}
|
|
54
|
-
return {
|
|
55
|
-
domain,
|
|
56
|
-
before: records.length,
|
|
57
|
-
pruned,
|
|
58
|
-
after: kept.length,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
return null;
|
|
62
|
-
});
|
|
63
|
-
if (domainResult) {
|
|
64
|
-
results.push(domainResult);
|
|
65
|
-
totalPruned += domainResult.pruned;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if (jsonMode) {
|
|
69
|
-
outputJson({
|
|
70
|
-
success: true,
|
|
71
|
-
command: "prune",
|
|
72
|
-
dryRun: options.dryRun,
|
|
73
|
-
totalPruned,
|
|
74
|
-
results,
|
|
75
|
-
});
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
if (totalPruned === 0) {
|
|
79
|
-
console.log(chalk.green("No stale records found. All records are current."));
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
const label = options.dryRun ? "Would prune" : "Pruned";
|
|
83
|
-
const prefix = options.dryRun ? chalk.yellow("[DRY RUN] ") : "";
|
|
84
|
-
for (const result of results) {
|
|
85
|
-
console.log(`${prefix}${chalk.cyan(result.domain)}: ${label} ${chalk.red(String(result.pruned))} of ${result.before} records (${result.after} remaining)`);
|
|
86
|
-
}
|
|
87
|
-
console.log(`\n${prefix}${chalk.bold(`Total: ${label.toLowerCase()} ${totalPruned} stale ${totalPruned === 1 ? "record" : "records"}.`)}`);
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=prune.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/commands/prune.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/query.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAM5C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0G3D"}
|
package/dist/commands/query.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { Option } from "commander";
|
|
2
|
-
import { readConfig, getExpertisePath } from "../utils/config.js";
|
|
3
|
-
import { readExpertiseFile, getFileModTime, filterByType, filterByClassification, filterByFile } from "../utils/expertise.js";
|
|
4
|
-
import { formatDomainExpertise } from "../utils/format.js";
|
|
5
|
-
import { outputJson, outputJsonError } from "../utils/json-output.js";
|
|
6
|
-
export function registerQueryCommand(program) {
|
|
7
|
-
program
|
|
8
|
-
.command("query")
|
|
9
|
-
.argument("[domain]", "expertise domain to query")
|
|
10
|
-
.description("Query expertise records")
|
|
11
|
-
.option("--type <type>", "filter by record type")
|
|
12
|
-
.addOption(new Option("--classification <classification>", "filter by classification").choices([
|
|
13
|
-
"foundational",
|
|
14
|
-
"tactical",
|
|
15
|
-
"observational",
|
|
16
|
-
]))
|
|
17
|
-
.option("--file <file>", "filter by associated file path (substring match)")
|
|
18
|
-
.option("--all", "show all domains")
|
|
19
|
-
.action(async (domain, options) => {
|
|
20
|
-
const jsonMode = program.opts().json === true;
|
|
21
|
-
try {
|
|
22
|
-
const config = await readConfig();
|
|
23
|
-
const domainsToQuery = [];
|
|
24
|
-
if (options.all) {
|
|
25
|
-
domainsToQuery.push(...config.domains);
|
|
26
|
-
if (domainsToQuery.length === 0) {
|
|
27
|
-
if (jsonMode) {
|
|
28
|
-
outputJson({ success: true, command: "query", domains: [] });
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
console.log("No domains configured. Run `mulch add <domain>` to get started.");
|
|
32
|
-
}
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
else if (domain) {
|
|
37
|
-
if (!config.domains.includes(domain)) {
|
|
38
|
-
if (jsonMode) {
|
|
39
|
-
outputJsonError("query", `Domain "${domain}" not found in config. Available domains: ${config.domains.join(", ") || "(none)"}`);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
console.error(`Error: Domain "${domain}" not found in config. Available domains: ${config.domains.join(", ") || "(none)"}`);
|
|
43
|
-
}
|
|
44
|
-
process.exitCode = 1;
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
domainsToQuery.push(domain);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
if (jsonMode) {
|
|
51
|
-
outputJsonError("query", "Please specify a domain or use --all to query all domains.");
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
console.error("Error: Please specify a domain or use --all to query all domains.");
|
|
55
|
-
}
|
|
56
|
-
process.exitCode = 1;
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
if (jsonMode) {
|
|
60
|
-
const result = [];
|
|
61
|
-
for (const d of domainsToQuery) {
|
|
62
|
-
const filePath = getExpertisePath(d);
|
|
63
|
-
let records = await readExpertiseFile(filePath);
|
|
64
|
-
if (options.type) {
|
|
65
|
-
records = filterByType(records, options.type);
|
|
66
|
-
}
|
|
67
|
-
if (options.classification) {
|
|
68
|
-
records = filterByClassification(records, options.classification);
|
|
69
|
-
}
|
|
70
|
-
if (options.file) {
|
|
71
|
-
records = filterByFile(records, options.file);
|
|
72
|
-
}
|
|
73
|
-
result.push({ domain: d, records });
|
|
74
|
-
}
|
|
75
|
-
outputJson({ success: true, command: "query", domains: result });
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
const sections = [];
|
|
79
|
-
for (const d of domainsToQuery) {
|
|
80
|
-
const filePath = getExpertisePath(d);
|
|
81
|
-
let records = await readExpertiseFile(filePath);
|
|
82
|
-
const lastUpdated = await getFileModTime(filePath);
|
|
83
|
-
if (options.type) {
|
|
84
|
-
records = filterByType(records, options.type);
|
|
85
|
-
}
|
|
86
|
-
if (options.classification) {
|
|
87
|
-
records = filterByClassification(records, options.classification);
|
|
88
|
-
}
|
|
89
|
-
if (options.file) {
|
|
90
|
-
records = filterByFile(records, options.file);
|
|
91
|
-
}
|
|
92
|
-
sections.push(formatDomainExpertise(d, records, lastUpdated));
|
|
93
|
-
}
|
|
94
|
-
console.log(sections.join("\n\n"));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
if (err.code === "ENOENT") {
|
|
99
|
-
if (jsonMode) {
|
|
100
|
-
outputJsonError("query", "No .mulch/ directory found. Run `mulch init` first.");
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
console.error("Error: No .mulch/ directory found. Run `mulch init` first.");
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
if (jsonMode) {
|
|
108
|
-
outputJsonError("query", err.message);
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
console.error(`Error: ${err.message}`);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
process.exitCode = 1;
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=query.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/ready.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ready.d.ts","sourceRoot":"","sources":["../../src/commands/ready.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwI3D"}
|