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 +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"}
@@ -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"}
@@ -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"}
@@ -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"}
@@ -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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"}
@@ -1,3 +0,0 @@
1
- import { Command } from "commander";
2
- export declare function registerPrimeCommand(program: Command): void;
3
- //# sourceMappingURL=prime.d.ts.map
@@ -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"}