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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B1D"}
|
package/dist/commands/init.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
2
|
-
import chalk from "chalk";
|
|
3
|
-
import { getMulchDir, initMulchDir } from "../utils/config.js";
|
|
4
|
-
import { outputJson } from "../utils/json-output.js";
|
|
5
|
-
export function registerInitCommand(program) {
|
|
6
|
-
program
|
|
7
|
-
.command("init")
|
|
8
|
-
.description("Initialize .mulch/ in the current project")
|
|
9
|
-
.action(async () => {
|
|
10
|
-
const jsonMode = program.opts().json === true;
|
|
11
|
-
const mulchDir = getMulchDir();
|
|
12
|
-
const alreadyExists = existsSync(mulchDir);
|
|
13
|
-
await initMulchDir();
|
|
14
|
-
if (jsonMode) {
|
|
15
|
-
outputJson({
|
|
16
|
-
success: true,
|
|
17
|
-
command: "init",
|
|
18
|
-
created: !alreadyExists,
|
|
19
|
-
path: mulchDir,
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
else if (alreadyExists) {
|
|
23
|
-
console.log(chalk.green("Updated .mulch/ — filled in any missing artifacts."));
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
console.log(chalk.green(`Initialized .mulch/ in ${process.cwd()}`));
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=init.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;QAC9C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE3C,MAAM,YAAY,EAAE,CAAC;QAErB,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC;gBACT,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,CAAC,aAAa;gBACvB,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,aAAa,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAClE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/commands/learn.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
interface DomainMatch {
|
|
3
|
-
domain: string;
|
|
4
|
-
matchedFiles: string[];
|
|
5
|
-
}
|
|
6
|
-
export declare function matchFilesToDomains(changedFiles: string[], cwd?: string): Promise<{
|
|
7
|
-
matches: DomainMatch[];
|
|
8
|
-
unmatched: string[];
|
|
9
|
-
}>;
|
|
10
|
-
export declare function registerLearnCommand(program: Command): void;
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=learn.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"learn.d.ts","sourceRoot":"","sources":["../../src/commands/learn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAgD1D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4G3D"}
|
package/dist/commands/learn.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
|
-
import { readConfig, getExpertisePath } from "../utils/config.js";
|
|
3
|
-
import { readExpertiseFile } from "../utils/expertise.js";
|
|
4
|
-
import { outputJson, outputJsonError } from "../utils/json-output.js";
|
|
5
|
-
import { isGitRepo, getChangedFiles } from "../utils/git.js";
|
|
6
|
-
export async function matchFilesToDomains(changedFiles, cwd) {
|
|
7
|
-
const config = await readConfig(cwd);
|
|
8
|
-
const matched = new Set();
|
|
9
|
-
const matches = [];
|
|
10
|
-
for (const domain of config.domains) {
|
|
11
|
-
const filePath = getExpertisePath(domain, cwd);
|
|
12
|
-
const records = await readExpertiseFile(filePath);
|
|
13
|
-
// Collect all file paths from pattern and reference records
|
|
14
|
-
const domainFiles = new Set();
|
|
15
|
-
for (const record of records) {
|
|
16
|
-
if ((record.type === "pattern" || record.type === "reference") &&
|
|
17
|
-
record.files) {
|
|
18
|
-
for (const f of record.files) {
|
|
19
|
-
domainFiles.add(f);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
// Match changed files against domain file paths
|
|
24
|
-
const domainMatched = [];
|
|
25
|
-
for (const changedFile of changedFiles) {
|
|
26
|
-
for (const domainFile of domainFiles) {
|
|
27
|
-
if (changedFile === domainFile ||
|
|
28
|
-
changedFile.endsWith(domainFile) ||
|
|
29
|
-
domainFile.endsWith(changedFile)) {
|
|
30
|
-
domainMatched.push(changedFile);
|
|
31
|
-
matched.add(changedFile);
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
if (domainMatched.length > 0) {
|
|
37
|
-
matches.push({ domain, matchedFiles: domainMatched });
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
// Sort by match count descending
|
|
41
|
-
matches.sort((a, b) => b.matchedFiles.length - a.matchedFiles.length);
|
|
42
|
-
const unmatched = changedFiles.filter((f) => !matched.has(f));
|
|
43
|
-
return { matches, unmatched };
|
|
44
|
-
}
|
|
45
|
-
export function registerLearnCommand(program) {
|
|
46
|
-
program
|
|
47
|
-
.command("learn")
|
|
48
|
-
.description("Show changed files and suggest domains for recording learnings")
|
|
49
|
-
.option("--since <ref>", "git ref to diff against", "HEAD~1")
|
|
50
|
-
.action(async (options) => {
|
|
51
|
-
const jsonMode = program.opts().json === true;
|
|
52
|
-
const cwd = process.cwd();
|
|
53
|
-
if (!isGitRepo(cwd)) {
|
|
54
|
-
if (jsonMode) {
|
|
55
|
-
outputJsonError("learn", "Not in a git repository. Run this command from within a git repository.");
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
console.error(chalk.red("Error: not in a git repository."));
|
|
59
|
-
}
|
|
60
|
-
process.exitCode = 1;
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
try {
|
|
64
|
-
const changedFiles = getChangedFiles(cwd, options.since);
|
|
65
|
-
if (changedFiles.length === 0) {
|
|
66
|
-
if (jsonMode) {
|
|
67
|
-
outputJson({
|
|
68
|
-
success: true,
|
|
69
|
-
command: "learn",
|
|
70
|
-
changedFiles: [],
|
|
71
|
-
suggestedDomains: [],
|
|
72
|
-
unmatchedFiles: [],
|
|
73
|
-
message: "No changed files found",
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
console.log("No changed files found. Nothing to learn from.");
|
|
78
|
-
}
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const { matches, unmatched } = await matchFilesToDomains(changedFiles);
|
|
82
|
-
if (jsonMode) {
|
|
83
|
-
outputJson({
|
|
84
|
-
success: true,
|
|
85
|
-
command: "learn",
|
|
86
|
-
changedFiles,
|
|
87
|
-
suggestedDomains: matches.map((m) => ({
|
|
88
|
-
domain: m.domain,
|
|
89
|
-
matchCount: m.matchedFiles.length,
|
|
90
|
-
files: m.matchedFiles,
|
|
91
|
-
})),
|
|
92
|
-
unmatchedFiles: unmatched,
|
|
93
|
-
});
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
// Plain text output
|
|
97
|
-
console.log(chalk.bold("\nSession learnings check\n"));
|
|
98
|
-
console.log(chalk.cyan(`Changed files (${changedFiles.length}):`));
|
|
99
|
-
for (const f of changedFiles) {
|
|
100
|
-
console.log(` ${f}`);
|
|
101
|
-
}
|
|
102
|
-
if (matches.length > 0) {
|
|
103
|
-
console.log(chalk.cyan(`\nSuggested domains:`));
|
|
104
|
-
for (const m of matches) {
|
|
105
|
-
const label = m.matchedFiles.length === 1 ? "file matches" : "files match";
|
|
106
|
-
console.log(` ${chalk.bold(m.domain)} (${m.matchedFiles.length} ${label} existing records)`);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
if (unmatched.length > 0) {
|
|
110
|
-
console.log(chalk.yellow(`\nUnmatched files (no domain association):`));
|
|
111
|
-
for (const f of unmatched) {
|
|
112
|
-
console.log(` ${f}`);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
console.log(chalk.dim("\nRecord learnings with:"));
|
|
116
|
-
console.log(chalk.dim(' mulch record <domain> --type <type> --description "..."'));
|
|
117
|
-
console.log();
|
|
118
|
-
}
|
|
119
|
-
catch (err) {
|
|
120
|
-
if (jsonMode) {
|
|
121
|
-
outputJsonError("learn", err.message);
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
console.error(`Error: ${err.message}`);
|
|
125
|
-
}
|
|
126
|
-
process.exitCode = 1;
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=learn.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"learn.js","sourceRoot":"","sources":["../../src/commands/learn.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
export declare function runOnboard(options: {
|
|
3
|
-
stdout?: boolean;
|
|
4
|
-
provider?: string;
|
|
5
|
-
check?: boolean;
|
|
6
|
-
cwd?: string;
|
|
7
|
-
jsonMode?: boolean;
|
|
8
|
-
}): Promise<void>;
|
|
9
|
-
export declare function registerOnboardCommand(program: Command): void;
|
|
10
|
-
//# sourceMappingURL=onboard.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyLpC,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiIhB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyB7D"}
|
package/dist/commands/onboard.js
DELETED
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
import { readFile, writeFile, access, mkdir } from "node:fs/promises";
|
|
2
|
-
import { join, dirname } from "node:path";
|
|
3
|
-
import chalk from "chalk";
|
|
4
|
-
import { outputJson, outputJsonError } from "../utils/json-output.js";
|
|
5
|
-
import { MARKER_START, MARKER_END, hasMarkerSection, replaceMarkerSection, wrapInMarkers, } from "../utils/markers.js";
|
|
6
|
-
const SNIPPET_DEFAULT = `## Project Expertise (Mulch)
|
|
7
|
-
|
|
8
|
-
This project uses [Mulch](https://github.com/jayminwest/mulch) for structured expertise management.
|
|
9
|
-
|
|
10
|
-
**At the start of every session**, run:
|
|
11
|
-
\`\`\`bash
|
|
12
|
-
mulch prime
|
|
13
|
-
\`\`\`
|
|
14
|
-
|
|
15
|
-
This injects project-specific conventions, patterns, decisions, and other learnings into your context.
|
|
16
|
-
Use \`mulch prime --files src/foo.ts\` to load only records relevant to specific files.
|
|
17
|
-
|
|
18
|
-
**Before completing your task**, review your work for insights worth preserving — conventions discovered,
|
|
19
|
-
patterns applied, failures encountered, or decisions made — and record them:
|
|
20
|
-
\`\`\`bash
|
|
21
|
-
mulch record <domain> --type <convention|pattern|failure|decision|reference|guide> --description "..."
|
|
22
|
-
\`\`\`
|
|
23
|
-
|
|
24
|
-
Link evidence when available: \`--evidence-commit <sha>\`, \`--evidence-bead <id>\`
|
|
25
|
-
|
|
26
|
-
Run \`mulch status\` to check domain health and entry counts.
|
|
27
|
-
Run \`mulch --help\` for full usage.
|
|
28
|
-
Mulch write commands use file locking and atomic writes — multiple agents can safely record to the same domain concurrently.
|
|
29
|
-
|
|
30
|
-
### Before You Finish
|
|
31
|
-
|
|
32
|
-
1. Discover what to record:
|
|
33
|
-
\`\`\`bash
|
|
34
|
-
mulch learn
|
|
35
|
-
\`\`\`
|
|
36
|
-
2. Store insights from this work session:
|
|
37
|
-
\`\`\`bash
|
|
38
|
-
mulch record <domain> --type <convention|pattern|failure|decision|reference|guide> --description "..."
|
|
39
|
-
\`\`\`
|
|
40
|
-
3. Validate and commit:
|
|
41
|
-
\`\`\`bash
|
|
42
|
-
mulch sync
|
|
43
|
-
\`\`\`
|
|
44
|
-
`;
|
|
45
|
-
const LEGACY_HEADER = "## Project Expertise (Mulch)";
|
|
46
|
-
const LEGACY_TAIL = 'mulch validate && git add .mulch/ && git commit -m "mulch: record learnings"';
|
|
47
|
-
function getSnippet(provider) {
|
|
48
|
-
if (!provider || provider === "default") {
|
|
49
|
-
return SNIPPET_DEFAULT;
|
|
50
|
-
}
|
|
51
|
-
// All providers use the same standardized snippet
|
|
52
|
-
return SNIPPET_DEFAULT;
|
|
53
|
-
}
|
|
54
|
-
async function fileExists(filePath) {
|
|
55
|
-
try {
|
|
56
|
-
await access(filePath);
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
function hasLegacySnippet(content) {
|
|
64
|
-
return content.includes(LEGACY_HEADER);
|
|
65
|
-
}
|
|
66
|
-
function replaceLegacySnippet(content, newSection) {
|
|
67
|
-
const headerIdx = content.indexOf(LEGACY_HEADER);
|
|
68
|
-
if (headerIdx === -1)
|
|
69
|
-
return content;
|
|
70
|
-
const tailIdx = content.indexOf(LEGACY_TAIL, headerIdx);
|
|
71
|
-
let endIdx;
|
|
72
|
-
if (tailIdx !== -1) {
|
|
73
|
-
// Find the closing ``` after the tail line
|
|
74
|
-
const afterTail = content.indexOf("```", tailIdx + LEGACY_TAIL.length);
|
|
75
|
-
if (afterTail !== -1) {
|
|
76
|
-
endIdx = afterTail + 3;
|
|
77
|
-
// Consume trailing newlines
|
|
78
|
-
while (endIdx < content.length && content[endIdx] === "\n") {
|
|
79
|
-
endIdx++;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
endIdx = content.length;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
// Tail not found (user edited the snippet): take from header to EOF
|
|
88
|
-
endIdx = content.length;
|
|
89
|
-
}
|
|
90
|
-
const before = content.substring(0, headerIdx);
|
|
91
|
-
const after = content.substring(endIdx);
|
|
92
|
-
return before + newSection + after;
|
|
93
|
-
}
|
|
94
|
-
function isSnippetCurrent(content, currentSnippet) {
|
|
95
|
-
const startIdx = content.indexOf(MARKER_START);
|
|
96
|
-
const endIdx = content.indexOf(MARKER_END);
|
|
97
|
-
if (startIdx === -1 || endIdx === -1)
|
|
98
|
-
return false;
|
|
99
|
-
const existingInner = content.substring(startIdx + MARKER_START.length + 1, // +1 for newline after marker
|
|
100
|
-
endIdx);
|
|
101
|
-
return existingInner.trim() === currentSnippet.trim();
|
|
102
|
-
}
|
|
103
|
-
async function findSnippetLocations(cwd) {
|
|
104
|
-
const candidates = [
|
|
105
|
-
{ fileName: "CLAUDE.md", path: join(cwd, "CLAUDE.md") },
|
|
106
|
-
{ fileName: ".claude/CLAUDE.md", path: join(cwd, ".claude", "CLAUDE.md") },
|
|
107
|
-
{ fileName: "AGENTS.md", path: join(cwd, "AGENTS.md") },
|
|
108
|
-
];
|
|
109
|
-
const results = [];
|
|
110
|
-
for (const c of candidates) {
|
|
111
|
-
const exists = await fileExists(c.path);
|
|
112
|
-
if (exists) {
|
|
113
|
-
const content = await readFile(c.path, "utf-8");
|
|
114
|
-
if (hasMarkerSection(content) || hasLegacySnippet(content)) {
|
|
115
|
-
results.push({ ...c, exists: true });
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return results;
|
|
120
|
-
}
|
|
121
|
-
async function resolveTargetFile(cwd) {
|
|
122
|
-
const withSnippet = await findSnippetLocations(cwd);
|
|
123
|
-
// If snippet found in one or more locations, use the first; others are duplicates
|
|
124
|
-
if (withSnippet.length > 0) {
|
|
125
|
-
return {
|
|
126
|
-
target: withSnippet[0],
|
|
127
|
-
duplicates: withSnippet.slice(1),
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
// No snippet found anywhere. Prefer existing CLAUDE.md, else AGENTS.md
|
|
131
|
-
if (await fileExists(join(cwd, "CLAUDE.md"))) {
|
|
132
|
-
return {
|
|
133
|
-
target: { fileName: "CLAUDE.md", path: join(cwd, "CLAUDE.md"), exists: true },
|
|
134
|
-
duplicates: [],
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
const agentsExists = await fileExists(join(cwd, "AGENTS.md"));
|
|
138
|
-
return {
|
|
139
|
-
target: { fileName: "AGENTS.md", path: join(cwd, "AGENTS.md"), exists: agentsExists },
|
|
140
|
-
duplicates: [],
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
export async function runOnboard(options) {
|
|
144
|
-
const cwd = options.cwd ?? process.cwd();
|
|
145
|
-
const snippet = getSnippet(options.provider);
|
|
146
|
-
const wrappedSnippet = wrapInMarkers(snippet);
|
|
147
|
-
if (options.stdout) {
|
|
148
|
-
process.stdout.write(wrappedSnippet);
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
const { target, duplicates } = await resolveTargetFile(cwd);
|
|
152
|
-
// --check: read-only inspection
|
|
153
|
-
if (options.check) {
|
|
154
|
-
let action;
|
|
155
|
-
if (!target.exists) {
|
|
156
|
-
action = "not_installed";
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
const content = await readFile(target.path, "utf-8");
|
|
160
|
-
if (hasMarkerSection(content)) {
|
|
161
|
-
action = isSnippetCurrent(content, snippet) ? "up_to_date" : "outdated";
|
|
162
|
-
}
|
|
163
|
-
else if (hasLegacySnippet(content)) {
|
|
164
|
-
action = "legacy";
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
action = "not_installed";
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
if (options.jsonMode) {
|
|
171
|
-
outputJson({
|
|
172
|
-
success: true,
|
|
173
|
-
command: "onboard",
|
|
174
|
-
file: target.fileName,
|
|
175
|
-
action,
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
const messages = {
|
|
180
|
-
not_installed: `Mulch snippet is not installed in ${target.fileName}.`,
|
|
181
|
-
up_to_date: `Mulch snippet in ${target.fileName} is up to date.`,
|
|
182
|
-
outdated: `Mulch snippet in ${target.fileName} is outdated. Run \`mulch onboard\` to update.`,
|
|
183
|
-
legacy: `Mulch snippet in ${target.fileName} uses legacy format (no markers). Run \`mulch onboard\` to migrate.`,
|
|
184
|
-
};
|
|
185
|
-
const colors = {
|
|
186
|
-
not_installed: chalk.yellow,
|
|
187
|
-
up_to_date: chalk.green,
|
|
188
|
-
outdated: chalk.yellow,
|
|
189
|
-
legacy: chalk.yellow,
|
|
190
|
-
};
|
|
191
|
-
console.log(colors[action](messages[action]));
|
|
192
|
-
}
|
|
193
|
-
if (duplicates.length > 0) {
|
|
194
|
-
const names = duplicates.map((d) => d.fileName).join(", ");
|
|
195
|
-
if (!options.jsonMode) {
|
|
196
|
-
console.log(chalk.yellow(`Warning: mulch snippet also found in: ${names}`));
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
// Write path
|
|
202
|
-
let action;
|
|
203
|
-
if (!target.exists) {
|
|
204
|
-
// Create new file
|
|
205
|
-
await mkdir(dirname(target.path), { recursive: true });
|
|
206
|
-
await writeFile(target.path, wrappedSnippet + "\n", "utf-8");
|
|
207
|
-
action = "created";
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
const content = await readFile(target.path, "utf-8");
|
|
211
|
-
if (hasMarkerSection(content)) {
|
|
212
|
-
// Check if current
|
|
213
|
-
if (isSnippetCurrent(content, snippet)) {
|
|
214
|
-
action = "up_to_date";
|
|
215
|
-
}
|
|
216
|
-
else {
|
|
217
|
-
// Replace marker section
|
|
218
|
-
const updated = replaceMarkerSection(content, wrappedSnippet);
|
|
219
|
-
if (updated !== null) {
|
|
220
|
-
await writeFile(target.path, updated, "utf-8");
|
|
221
|
-
}
|
|
222
|
-
action = "updated";
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
else if (hasLegacySnippet(content)) {
|
|
226
|
-
// Migrate legacy snippet
|
|
227
|
-
const migrated = replaceLegacySnippet(content, wrappedSnippet + "\n");
|
|
228
|
-
await writeFile(target.path, migrated, "utf-8");
|
|
229
|
-
action = "migrated";
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
// Append to existing file
|
|
233
|
-
await writeFile(target.path, content.trimEnd() + "\n\n" + wrappedSnippet + "\n", "utf-8");
|
|
234
|
-
action = "appended";
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
if (options.jsonMode) {
|
|
238
|
-
outputJson({
|
|
239
|
-
success: true,
|
|
240
|
-
command: "onboard",
|
|
241
|
-
file: target.fileName,
|
|
242
|
-
action,
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
const messages = {
|
|
247
|
-
created: `Mulch onboarding snippet written to ${target.fileName}.`,
|
|
248
|
-
appended: `Mulch onboarding snippet appended to ${target.fileName}.`,
|
|
249
|
-
updated: `Mulch onboarding snippet updated in ${target.fileName}.`,
|
|
250
|
-
migrated: `Mulch onboarding snippet migrated to marker format in ${target.fileName}.`,
|
|
251
|
-
up_to_date: `Mulch snippet in ${target.fileName} is already up to date. No changes made.`,
|
|
252
|
-
};
|
|
253
|
-
const color = action === "up_to_date" ? chalk.yellow : chalk.green;
|
|
254
|
-
console.log(color(messages[action]));
|
|
255
|
-
}
|
|
256
|
-
if (duplicates.length > 0) {
|
|
257
|
-
const names = duplicates.map((d) => d.fileName).join(", ");
|
|
258
|
-
if (!options.jsonMode) {
|
|
259
|
-
console.log(chalk.yellow(`Warning: mulch snippet also found in: ${names}`));
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
export function registerOnboardCommand(program) {
|
|
264
|
-
program
|
|
265
|
-
.command("onboard")
|
|
266
|
-
.description("Generate or update an AGENTS.md/CLAUDE.md snippet pointing to mulch prime")
|
|
267
|
-
.option("--stdout", "print snippet to stdout instead of writing to file")
|
|
268
|
-
.option("--provider <provider>", "customize snippet for a specific provider (e.g. claude)")
|
|
269
|
-
.option("--check", "check if onboarding snippet is installed and up to date")
|
|
270
|
-
.action(async (options) => {
|
|
271
|
-
const jsonMode = program.opts().json === true;
|
|
272
|
-
try {
|
|
273
|
-
await runOnboard({ ...options, jsonMode });
|
|
274
|
-
}
|
|
275
|
-
catch (err) {
|
|
276
|
-
if (jsonMode) {
|
|
277
|
-
outputJsonError("onboard", err.message);
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
console.error(`Error: ${err.message}`);
|
|
281
|
-
}
|
|
282
|
-
process.exitCode = 1;
|
|
283
|
-
}
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
//# sourceMappingURL=onboard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/prime.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prime.d.ts","sourceRoot":"","sources":["../../src/commands/prime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAiE5C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoO3D"}
|