@autonav/core 1.3.4 → 1.5.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 (74) hide show
  1. package/dist/adapter/claude-adapter.d.ts.map +1 -1
  2. package/dist/adapter/claude-adapter.js +6 -20
  3. package/dist/adapter/claude-adapter.js.map +1 -1
  4. package/dist/cli/autonav.js +6 -0
  5. package/dist/cli/autonav.js.map +1 -1
  6. package/dist/cli/nav-chat.js +1 -1
  7. package/dist/cli/nav-chat.js.map +1 -1
  8. package/dist/cli/nav-init.js +222 -47
  9. package/dist/cli/nav-init.js.map +1 -1
  10. package/dist/cli/nav-install.js +4 -12
  11. package/dist/cli/nav-install.js.map +1 -1
  12. package/dist/cli/nav-mend.d.ts +3 -0
  13. package/dist/cli/nav-mend.d.ts.map +1 -0
  14. package/dist/cli/nav-mend.js +157 -0
  15. package/dist/cli/nav-mend.js.map +1 -0
  16. package/dist/cli/nav-query.js +42 -15
  17. package/dist/cli/nav-query.js.map +1 -1
  18. package/dist/cli/nav-uninstall.js +4 -4
  19. package/dist/cli/nav-uninstall.js.map +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +2 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/interview/ui/test-indicator.js +0 -0
  25. package/dist/mend/index.d.ts +47 -0
  26. package/dist/mend/index.d.ts.map +1 -0
  27. package/dist/mend/index.js +457 -0
  28. package/dist/mend/index.js.map +1 -0
  29. package/dist/mend/llm-review.d.ts +18 -0
  30. package/dist/mend/llm-review.d.ts.map +1 -0
  31. package/dist/mend/llm-review.js +81 -0
  32. package/dist/mend/llm-review.js.map +1 -0
  33. package/dist/migrations/index.d.ts.map +1 -1
  34. package/dist/migrations/index.js +10 -0
  35. package/dist/migrations/index.js.map +1 -1
  36. package/dist/migrations/versions/v1.3.1-submit-answer.d.ts.map +1 -1
  37. package/dist/migrations/versions/v1.3.1-submit-answer.js +27 -23
  38. package/dist/migrations/versions/v1.3.1-submit-answer.js.map +1 -1
  39. package/dist/migrations/versions/v1.3.5-navigator-authority.d.ts +15 -0
  40. package/dist/migrations/versions/v1.3.5-navigator-authority.d.ts.map +1 -0
  41. package/dist/migrations/versions/v1.3.5-navigator-authority.js +153 -0
  42. package/dist/migrations/versions/v1.3.5-navigator-authority.js.map +1 -0
  43. package/dist/migrations/versions/v1.4.0-agent-identity.d.ts +15 -0
  44. package/dist/migrations/versions/v1.4.0-agent-identity.d.ts.map +1 -0
  45. package/dist/migrations/versions/v1.4.0-agent-identity.js +410 -0
  46. package/dist/migrations/versions/v1.4.0-agent-identity.js.map +1 -0
  47. package/dist/migrations/versions/v1.4.1-update-skill.d.ts +16 -0
  48. package/dist/migrations/versions/v1.4.1-update-skill.d.ts.map +1 -0
  49. package/dist/migrations/versions/v1.4.1-update-skill.js +146 -0
  50. package/dist/migrations/versions/v1.4.1-update-skill.js.map +1 -0
  51. package/dist/migrations/versions/v1.5.0-rfc2119-skills.d.ts +18 -0
  52. package/dist/migrations/versions/v1.5.0-rfc2119-skills.d.ts.map +1 -0
  53. package/dist/migrations/versions/v1.5.0-rfc2119-skills.js +207 -0
  54. package/dist/migrations/versions/v1.5.0-rfc2119-skills.js.map +1 -0
  55. package/dist/migrations/versions/v1.5.1-mend-instruction.d.ts +13 -0
  56. package/dist/migrations/versions/v1.5.1-mend-instruction.d.ts.map +1 -0
  57. package/dist/migrations/versions/v1.5.1-mend-instruction.js +156 -0
  58. package/dist/migrations/versions/v1.5.1-mend-instruction.js.map +1 -0
  59. package/dist/query-engine/navigator-loader.js +1 -1
  60. package/dist/query-engine/navigator-loader.js.map +1 -1
  61. package/dist/query-engine/output-formatter.d.ts +1 -1
  62. package/dist/query-engine/output-formatter.d.ts.map +1 -1
  63. package/dist/query-engine/output-formatter.js +2 -0
  64. package/dist/query-engine/output-formatter.js.map +1 -1
  65. package/dist/query-engine/response-validator.d.ts.map +1 -1
  66. package/dist/query-engine/response-validator.js +6 -7
  67. package/dist/query-engine/response-validator.js.map +1 -1
  68. package/dist/skill-generator/index.d.ts +13 -8
  69. package/dist/skill-generator/index.d.ts.map +1 -1
  70. package/dist/skill-generator/index.js +74 -30
  71. package/dist/skill-generator/index.js.map +1 -1
  72. package/dist/templates/CLAUDE-pack.md.template +71 -0
  73. package/dist/templates/CLAUDE.md.template +71 -0
  74. package/package.json +1 -1
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Navigator Health Check and Repair (Mend)
3
+ *
4
+ * Validates navigator configuration and health, auto-fixes issues when possible.
5
+ */
6
+ export interface MendCheckResult {
7
+ check: string;
8
+ status: "pass" | "fail" | "warning";
9
+ message: string;
10
+ details?: string;
11
+ autoFixable: boolean;
12
+ }
13
+ export interface MendResult {
14
+ healthy: boolean;
15
+ checks: MendCheckResult[];
16
+ fixes: Array<{
17
+ check: string;
18
+ action: string;
19
+ success: boolean;
20
+ }>;
21
+ }
22
+ /**
23
+ * Run all health checks on a navigator
24
+ */
25
+ export declare function checkNavigatorHealth(navPath: string): Promise<MendResult>;
26
+ /**
27
+ * Auto-fix issues that can be fixed automatically
28
+ */
29
+ export declare function autoFixNavigator(navPath: string, checks: MendCheckResult[]): Promise<Array<{
30
+ check: string;
31
+ action: string;
32
+ success: boolean;
33
+ }>>;
34
+ /**
35
+ * Run LLM-powered quality review on CLAUDE.md
36
+ * Uses Claude Opus to check for contradictions, best practices, hallucination risks, etc.
37
+ */
38
+ export declare function reviewNavigatorQuality(navPath: string): Promise<MendCheckResult[]>;
39
+ /**
40
+ * Run full mend operation: check health and auto-fix issues
41
+ */
42
+ export declare function mendNavigator(navPath: string, options?: {
43
+ autoFix?: boolean;
44
+ quiet?: boolean;
45
+ review?: boolean;
46
+ }): Promise<MendResult>;
47
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mend/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACnE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA6Q/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,EAAE,GACxB,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAwGrE;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA4CxF;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CACb,GACL,OAAO,CAAC,UAAU,CAAC,CA6BrB"}
@@ -0,0 +1,457 @@
1
+ /**
2
+ * Navigator Health Check and Repair (Mend)
3
+ *
4
+ * Validates navigator configuration and health, auto-fixes issues when possible.
5
+ */
6
+ import * as fs from "node:fs";
7
+ import * as path from "node:path";
8
+ import { NavigatorConfigSchema, getSkillName, getUpdateSkillName, localSkillExists, skillExists, isSkillSymlink, createAndSymlinkSkill, createAndSymlinkUpdateSkill, } from "@autonav/communication-layer";
9
+ import { reviewClaudeMd } from "./llm-review.js";
10
+ /**
11
+ * Run all health checks on a navigator
12
+ */
13
+ export async function checkNavigatorHealth(navPath) {
14
+ const checks = [];
15
+ const fixes = [];
16
+ // 1. Check navigator directory exists
17
+ if (!fs.existsSync(navPath)) {
18
+ checks.push({
19
+ check: "Navigator directory",
20
+ status: "fail",
21
+ message: "Navigator directory does not exist",
22
+ details: `Path: ${navPath}`,
23
+ autoFixable: false,
24
+ });
25
+ return { healthy: false, checks, fixes };
26
+ }
27
+ // 2. Check config.json exists and is valid
28
+ const configPath = path.join(navPath, "config.json");
29
+ let config = null;
30
+ if (!fs.existsSync(configPath)) {
31
+ checks.push({
32
+ check: "config.json",
33
+ status: "fail",
34
+ message: "config.json not found",
35
+ autoFixable: false,
36
+ });
37
+ }
38
+ else {
39
+ try {
40
+ const configContent = fs.readFileSync(configPath, "utf-8");
41
+ config = JSON.parse(configContent);
42
+ // Validate against schema
43
+ const parseResult = NavigatorConfigSchema.safeParse(config);
44
+ if (!parseResult.success) {
45
+ checks.push({
46
+ check: "config.json schema",
47
+ status: "fail",
48
+ message: "config.json schema validation failed",
49
+ details: parseResult.error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join("; "),
50
+ autoFixable: false,
51
+ });
52
+ }
53
+ else {
54
+ checks.push({
55
+ check: "config.json",
56
+ status: "pass",
57
+ message: "Valid configuration",
58
+ autoFixable: false,
59
+ });
60
+ }
61
+ }
62
+ catch (error) {
63
+ checks.push({
64
+ check: "config.json",
65
+ status: "fail",
66
+ message: "Failed to parse config.json",
67
+ details: error instanceof Error ? error.message : String(error),
68
+ autoFixable: false,
69
+ });
70
+ }
71
+ }
72
+ if (!config) {
73
+ return { healthy: false, checks, fixes };
74
+ }
75
+ // 3. Check CLAUDE.md exists
76
+ const claudeMdPath = path.join(navPath, "CLAUDE.md");
77
+ let claudeMdContent = null;
78
+ if (!fs.existsSync(claudeMdPath)) {
79
+ checks.push({
80
+ check: "CLAUDE.md",
81
+ status: "fail",
82
+ message: "CLAUDE.md not found",
83
+ autoFixable: false,
84
+ });
85
+ }
86
+ else {
87
+ // Check for required sections
88
+ claudeMdContent = fs.readFileSync(claudeMdPath, "utf-8");
89
+ const requiredSections = ["## Grounding Rules"];
90
+ const missingSections = requiredSections.filter(section => !claudeMdContent.includes(section));
91
+ if (missingSections.length > 0) {
92
+ checks.push({
93
+ check: "CLAUDE.md sections",
94
+ status: "warning",
95
+ message: "Missing recommended sections",
96
+ details: `Missing: ${missingSections.join(", ")}`,
97
+ autoFixable: false,
98
+ });
99
+ }
100
+ else {
101
+ checks.push({
102
+ check: "CLAUDE.md",
103
+ status: "pass",
104
+ message: "CLAUDE.md exists with required sections",
105
+ autoFixable: false,
106
+ });
107
+ }
108
+ // 3a. Check CLAUDE.md doesn't have submit_answer instructions
109
+ // (submit_answer is injected at query-time by createAnswerQuestionPrompt)
110
+ if (claudeMdContent.includes("submit_answer")) {
111
+ checks.push({
112
+ check: "submit_answer in CLAUDE.md",
113
+ status: "warning",
114
+ message: "CLAUDE.md contains submit_answer instructions",
115
+ details: "submit_answer is injected at query-time and should not be in CLAUDE.md. Run 'autonav migrate' to fix, or manually remove the references.",
116
+ autoFixable: false, // Migration v1.3.1 handles this
117
+ });
118
+ }
119
+ else {
120
+ checks.push({
121
+ check: "submit_answer in CLAUDE.md",
122
+ status: "pass",
123
+ message: "CLAUDE.md correctly omits submit_answer (injected at query-time)",
124
+ autoFixable: false,
125
+ });
126
+ }
127
+ // 3b. Check CLAUDE.md has autonav mend instruction
128
+ if (!claudeMdContent.includes("autonav mend")) {
129
+ checks.push({
130
+ check: "autonav mend instruction",
131
+ status: "warning",
132
+ message: "CLAUDE.md missing 'autonav mend' instruction",
133
+ details: "Navigators should remind users to run mend after config changes. Consider regenerating CLAUDE.md or adding the instruction manually.",
134
+ autoFixable: false,
135
+ });
136
+ }
137
+ else {
138
+ checks.push({
139
+ check: "autonav mend instruction",
140
+ status: "pass",
141
+ message: "CLAUDE.md includes mend instruction",
142
+ autoFixable: false,
143
+ });
144
+ }
145
+ }
146
+ // 4. Check knowledge base directory exists
147
+ const knowledgePath = config.knowledgeBasePath
148
+ ? path.join(navPath, config.knowledgeBasePath)
149
+ : path.join(navPath, "knowledge");
150
+ if (!fs.existsSync(knowledgePath)) {
151
+ checks.push({
152
+ check: "Knowledge base",
153
+ status: "fail",
154
+ message: "Knowledge base directory not found",
155
+ details: `Expected at: ${knowledgePath}`,
156
+ autoFixable: true,
157
+ });
158
+ }
159
+ else {
160
+ // Check if it has any content
161
+ const files = fs.readdirSync(knowledgePath);
162
+ if (files.length === 0) {
163
+ checks.push({
164
+ check: "Knowledge base",
165
+ status: "warning",
166
+ message: "Knowledge base is empty",
167
+ autoFixable: false,
168
+ });
169
+ }
170
+ else {
171
+ checks.push({
172
+ check: "Knowledge base",
173
+ status: "pass",
174
+ message: `Knowledge base has ${files.length} file(s)`,
175
+ autoFixable: false,
176
+ });
177
+ }
178
+ }
179
+ // 5. Check ask-<nav> skill exists
180
+ const askSkillName = getSkillName(config.name);
181
+ const askSkillLocalExists = localSkillExists(navPath, askSkillName);
182
+ const askSkillGlobalExists = skillExists(askSkillName);
183
+ const askSkillIsSymlink = askSkillGlobalExists && isSkillSymlink(askSkillName);
184
+ if (!askSkillLocalExists) {
185
+ checks.push({
186
+ check: `ask-${config.name} skill (local)`,
187
+ status: "fail",
188
+ message: "Local skill not found",
189
+ details: `Expected in ${navPath}/.autonav/skills/${askSkillName}`,
190
+ autoFixable: true,
191
+ });
192
+ }
193
+ else if (!askSkillGlobalExists) {
194
+ checks.push({
195
+ check: `ask-${config.name} skill (global)`,
196
+ status: "fail",
197
+ message: "Global skill not found (symlink missing)",
198
+ autoFixable: true,
199
+ });
200
+ }
201
+ else if (!askSkillIsSymlink) {
202
+ checks.push({
203
+ check: `ask-${config.name} skill (symlink)`,
204
+ status: "warning",
205
+ message: "Global skill exists but is not a symlink",
206
+ details: "Should be a symlink to local skill for version control",
207
+ autoFixable: false,
208
+ });
209
+ }
210
+ else {
211
+ checks.push({
212
+ check: `ask-${config.name} skill`,
213
+ status: "pass",
214
+ message: "Skill exists and is properly symlinked",
215
+ autoFixable: false,
216
+ });
217
+ }
218
+ // 6. Check update-<nav> skill exists
219
+ const updateSkillName = getUpdateSkillName(config.name);
220
+ const updateSkillLocalExists = localSkillExists(navPath, updateSkillName);
221
+ const updateSkillGlobalExists = skillExists(updateSkillName);
222
+ const updateSkillIsSymlink = updateSkillGlobalExists && isSkillSymlink(updateSkillName);
223
+ if (!updateSkillLocalExists) {
224
+ checks.push({
225
+ check: `update-${config.name} skill (local)`,
226
+ status: "fail",
227
+ message: "Local skill not found",
228
+ details: `Expected in ${navPath}/.autonav/skills/${updateSkillName}`,
229
+ autoFixable: true,
230
+ });
231
+ }
232
+ else if (!updateSkillGlobalExists) {
233
+ checks.push({
234
+ check: `update-${config.name} skill (global)`,
235
+ status: "fail",
236
+ message: "Global skill not found (symlink missing)",
237
+ autoFixable: true,
238
+ });
239
+ }
240
+ else if (!updateSkillIsSymlink) {
241
+ checks.push({
242
+ check: `update-${config.name} skill (symlink)`,
243
+ status: "warning",
244
+ message: "Global skill exists but is not a symlink",
245
+ details: "Should be a symlink to local skill for version control",
246
+ autoFixable: false,
247
+ });
248
+ }
249
+ else {
250
+ checks.push({
251
+ check: `update-${config.name} skill`,
252
+ status: "pass",
253
+ message: "Skill exists and is properly symlinked",
254
+ autoFixable: false,
255
+ });
256
+ }
257
+ // 7. Check .autonav directory exists
258
+ const autonavDir = path.join(navPath, ".autonav");
259
+ if (!fs.existsSync(autonavDir)) {
260
+ checks.push({
261
+ check: ".autonav directory",
262
+ status: "fail",
263
+ message: ".autonav directory not found",
264
+ autoFixable: true,
265
+ });
266
+ }
267
+ else {
268
+ checks.push({
269
+ check: ".autonav directory",
270
+ status: "pass",
271
+ message: ".autonav directory exists",
272
+ autoFixable: false,
273
+ });
274
+ }
275
+ // Determine overall health
276
+ const hasFailures = checks.some(c => c.status === "fail");
277
+ const healthy = !hasFailures;
278
+ return { healthy, checks, fixes };
279
+ }
280
+ /**
281
+ * Auto-fix issues that can be fixed automatically
282
+ */
283
+ export async function autoFixNavigator(navPath, checks) {
284
+ const fixes = [];
285
+ // Load config for fixes that need it
286
+ const configPath = path.join(navPath, "config.json");
287
+ let config = null;
288
+ try {
289
+ const configContent = fs.readFileSync(configPath, "utf-8");
290
+ config = JSON.parse(configContent);
291
+ }
292
+ catch {
293
+ return fixes;
294
+ }
295
+ // Fix 1: Create missing .autonav directory
296
+ const autonavDirCheck = checks.find(c => c.check === ".autonav directory" && c.status === "fail");
297
+ if (autonavDirCheck && autonavDirCheck.autoFixable) {
298
+ try {
299
+ const autonavDir = path.join(navPath, ".autonav");
300
+ fs.mkdirSync(autonavDir, { recursive: true });
301
+ fixes.push({
302
+ check: ".autonav directory",
303
+ action: "Created .autonav directory",
304
+ success: true,
305
+ });
306
+ }
307
+ catch (error) {
308
+ fixes.push({
309
+ check: ".autonav directory",
310
+ action: "Failed to create .autonav directory",
311
+ success: false,
312
+ });
313
+ }
314
+ }
315
+ // Fix 2: Create missing knowledge base directory
316
+ const knowledgeCheck = checks.find(c => c.check === "Knowledge base" && c.status === "fail");
317
+ if (knowledgeCheck && knowledgeCheck.autoFixable) {
318
+ try {
319
+ const knowledgePath = config.knowledgeBasePath
320
+ ? path.join(navPath, config.knowledgeBasePath)
321
+ : path.join(navPath, "knowledge");
322
+ fs.mkdirSync(knowledgePath, { recursive: true });
323
+ fixes.push({
324
+ check: "Knowledge base",
325
+ action: "Created knowledge base directory",
326
+ success: true,
327
+ });
328
+ }
329
+ catch (error) {
330
+ fixes.push({
331
+ check: "Knowledge base",
332
+ action: "Failed to create knowledge base directory",
333
+ success: false,
334
+ });
335
+ }
336
+ }
337
+ // Fix 3: Create missing skills
338
+ // Skills should be created from navigator's config for proper templating
339
+ const skillConfig = {
340
+ navigatorName: config.name,
341
+ navigatorPath: navPath,
342
+ description: config.description || "Knowledge navigator",
343
+ scope: config.scope,
344
+ audience: config.audience,
345
+ };
346
+ const askSkillCheck = checks.find(c => c.check.startsWith(`ask-${config.name}`) && c.status === "fail");
347
+ if (askSkillCheck && askSkillCheck.autoFixable) {
348
+ try {
349
+ await createAndSymlinkSkill(navPath, skillConfig, { force: true, quiet: true });
350
+ fixes.push({
351
+ check: `ask-${config.name} skill`,
352
+ action: "Created and symlinked ask skill",
353
+ success: true,
354
+ });
355
+ }
356
+ catch (error) {
357
+ fixes.push({
358
+ check: `ask-${config.name} skill`,
359
+ action: "Failed to create ask skill",
360
+ success: false,
361
+ });
362
+ }
363
+ }
364
+ // Fix 4: Create missing update skill
365
+ const updateSkillCheck = checks.find(c => c.check.startsWith(`update-${config.name}`) && c.status === "fail");
366
+ if (updateSkillCheck && updateSkillCheck.autoFixable) {
367
+ try {
368
+ await createAndSymlinkUpdateSkill(navPath, skillConfig, { force: true, quiet: true });
369
+ fixes.push({
370
+ check: `update-${config.name} skill`,
371
+ action: "Created and symlinked update skill",
372
+ success: true,
373
+ });
374
+ }
375
+ catch (error) {
376
+ fixes.push({
377
+ check: `update-${config.name} skill`,
378
+ action: "Failed to create update skill",
379
+ success: false,
380
+ });
381
+ }
382
+ }
383
+ return fixes;
384
+ }
385
+ /**
386
+ * Run LLM-powered quality review on CLAUDE.md
387
+ * Uses Claude Opus to check for contradictions, best practices, hallucination risks, etc.
388
+ */
389
+ export async function reviewNavigatorQuality(navPath) {
390
+ const checks = [];
391
+ const claudeMdPath = path.join(navPath, "CLAUDE.md");
392
+ if (!fs.existsSync(claudeMdPath)) {
393
+ return checks; // Skip review if no CLAUDE.md
394
+ }
395
+ const content = fs.readFileSync(claudeMdPath, "utf-8");
396
+ const review = await reviewClaudeMd(content);
397
+ if (review.passed && review.issues.length === 0) {
398
+ checks.push({
399
+ check: "CLAUDE.md quality review",
400
+ status: "pass",
401
+ message: review.summary,
402
+ autoFixable: false,
403
+ });
404
+ }
405
+ else {
406
+ // Add a check for each issue
407
+ for (const issue of review.issues) {
408
+ checks.push({
409
+ check: `CLAUDE.md: ${issue.category}`,
410
+ status: issue.severity === "error" ? "fail" : "warning",
411
+ message: issue.description,
412
+ details: issue.suggestion
413
+ ? `${issue.location ? `Location: ${issue.location}. ` : ""}Suggestion: ${issue.suggestion}`
414
+ : issue.location,
415
+ autoFixable: false,
416
+ });
417
+ }
418
+ // Add summary as info
419
+ if (review.summary) {
420
+ checks.push({
421
+ check: "CLAUDE.md quality summary",
422
+ status: review.passed ? "pass" : "warning",
423
+ message: review.summary,
424
+ autoFixable: false,
425
+ });
426
+ }
427
+ }
428
+ return checks;
429
+ }
430
+ /**
431
+ * Run full mend operation: check health and auto-fix issues
432
+ */
433
+ export async function mendNavigator(navPath, options = {}) {
434
+ // Run health checks
435
+ const result = await checkNavigatorHealth(navPath);
436
+ // Auto-fix if requested and there are fixable issues
437
+ if (options.autoFix) {
438
+ const fixableChecks = result.checks.filter(c => c.status === "fail" && c.autoFixable);
439
+ if (fixableChecks.length > 0) {
440
+ const fixes = await autoFixNavigator(navPath, result.checks);
441
+ result.fixes = fixes;
442
+ // Re-run health checks to verify fixes
443
+ const recheckResult = await checkNavigatorHealth(navPath);
444
+ result.healthy = recheckResult.healthy;
445
+ result.checks = recheckResult.checks;
446
+ }
447
+ }
448
+ // Run LLM quality review if requested
449
+ if (options.review) {
450
+ const reviewChecks = await reviewNavigatorQuality(navPath);
451
+ result.checks.push(...reviewChecks);
452
+ // Re-evaluate overall health (review errors can affect health)
453
+ result.healthy = !result.checks.some(c => c.status === "fail");
454
+ }
455
+ return result;
456
+ }
457
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mend/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * LLM-powered quality review of CLAUDE.md files
3
+ * Uses Claude Opus to check for issues that static analysis can't catch
4
+ */
5
+ export interface QualityIssue {
6
+ severity: "error" | "warning" | "suggestion";
7
+ category: string;
8
+ description: string;
9
+ location?: string;
10
+ suggestion?: string;
11
+ }
12
+ export interface QualityReviewResult {
13
+ passed: boolean;
14
+ issues: QualityIssue[];
15
+ summary: string;
16
+ }
17
+ export declare function reviewClaudeMd(claudeMdContent: string): Promise<QualityReviewResult>;
18
+ //# sourceMappingURL=llm-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-review.d.ts","sourceRoot":"","sources":["../../src/mend/llm-review.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAsCD,wBAAsB,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0C1F"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * LLM-powered quality review of CLAUDE.md files
3
+ * Uses Claude Opus to check for issues that static analysis can't catch
4
+ */
5
+ import Anthropic from "@anthropic-ai/sdk";
6
+ const REVIEW_PROMPT = `You are reviewing a CLAUDE.md file for a knowledge navigator. Analyze it for quality issues.
7
+
8
+ Check for:
9
+ 1. **Contradictions**: Instructions that conflict with each other
10
+ 2. **Prompt Engineering Best Practices** (per Anthropic guidelines):
11
+ - Clear role definition
12
+ - Specific, actionable instructions
13
+ - No vague or ambiguous language
14
+ - Proper use of formatting (headers, lists)
15
+ - Instructions are ordered by importance
16
+ 3. **Completeness**: Missing essential sections (grounding rules, response format, etc.)
17
+ 4. **Hallucination Risks**: Instructions that might encourage making things up
18
+ 5. **Consistency**: Tone, terminology, and style are consistent throughout
19
+
20
+ CLAUDE.md content:
21
+ \`\`\`markdown
22
+ {content}
23
+ \`\`\`
24
+
25
+ Respond with a JSON object:
26
+ {
27
+ "passed": boolean,
28
+ "issues": [
29
+ {
30
+ "severity": "error" | "warning" | "suggestion",
31
+ "category": "contradiction" | "best-practice" | "completeness" | "hallucination-risk" | "consistency",
32
+ "description": "what's wrong",
33
+ "location": "section or context where issue occurs",
34
+ "suggestion": "how to fix it"
35
+ }
36
+ ],
37
+ "summary": "1-2 sentence overall assessment"
38
+ }
39
+
40
+ Only include actual issues found. An empty issues array means the file passes review.`;
41
+ export async function reviewClaudeMd(claudeMdContent) {
42
+ const client = new Anthropic();
43
+ const response = await client.messages.create({
44
+ model: "claude-opus-4-20250514",
45
+ max_tokens: 2000,
46
+ messages: [{
47
+ role: "user",
48
+ content: REVIEW_PROMPT.replace("{content}", claudeMdContent)
49
+ }],
50
+ });
51
+ // Extract JSON from response
52
+ const firstBlock = response.content[0];
53
+ const text = firstBlock && firstBlock.type === "text" ? firstBlock.text : "";
54
+ const jsonMatch = text.match(/\{[\s\S]*\}/);
55
+ if (!jsonMatch) {
56
+ return {
57
+ passed: false,
58
+ issues: [{
59
+ severity: "error",
60
+ category: "review-failed",
61
+ description: "Failed to parse LLM review response",
62
+ }],
63
+ summary: "Review could not be completed",
64
+ };
65
+ }
66
+ try {
67
+ return JSON.parse(jsonMatch[0]);
68
+ }
69
+ catch {
70
+ return {
71
+ passed: false,
72
+ issues: [{
73
+ severity: "error",
74
+ category: "review-failed",
75
+ description: "Failed to parse LLM review response as JSON",
76
+ }],
77
+ summary: "Review could not be completed",
78
+ };
79
+ }
80
+ }
81
+ //# sourceMappingURL=llm-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-review.js","sourceRoot":"","sources":["../../src/mend/llm-review.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAgB1C,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sFAkCgE,CAAC;AAEvF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,eAAuB;IAC1D,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;IAE/B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,KAAK,EAAE,wBAAwB;QAC/B,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC;aAC7D,CAAC;KACH,CAAC,CAAC;IAEH,6BAA6B;IAC7B,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAE5C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,CAAC;oBACP,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,eAAe;oBACzB,WAAW,EAAE,qCAAqC;iBACnD,CAAC;YACF,OAAO,EAAE,+BAA+B;SACzC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAwB,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,CAAC;oBACP,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,eAAe;oBACzB,WAAW,EAAE,6CAA6C;iBAC3D,CAAC;YACF,OAAO,EAAE,+BAA+B;SACzC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAU7E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAalE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC,CAAC,CAWtH;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC7D,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC7D,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAiBlG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,SAAS,EAAE,CAE9C;AAGD,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAoB7E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAalE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC,CAAC,CAWtH;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC7D,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC7D,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAiBlG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,SAAS,EAAE,CAE9C;AAGD,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
@@ -7,11 +7,21 @@
7
7
  import * as fs from "node:fs";
8
8
  import * as path from "node:path";
9
9
  import { migration as v1_3_1_submitAnswer } from "./versions/v1.3.1-submit-answer.js";
10
+ import { migration as v1_3_5_navigatorAuthority } from "./versions/v1.3.5-navigator-authority.js";
11
+ import { migration as v1_4_0_agentIdentity } from "./versions/v1.4.0-agent-identity.js";
12
+ import { migration as v1_4_1_updateSkill } from "./versions/v1.4.1-update-skill.js";
13
+ import { migration as v1_5_0_rfc2119Skills } from "./versions/v1.5.0-rfc2119-skills.js";
14
+ import { migration as v1_5_1_mendInstruction } from "./versions/v1.5.1-mend-instruction.js";
10
15
  /**
11
16
  * All available migrations in order
12
17
  */
13
18
  const MIGRATIONS = [
14
19
  v1_3_1_submitAnswer,
20
+ v1_3_5_navigatorAuthority,
21
+ v1_4_0_agentIdentity,
22
+ v1_4_1_updateSkill,
23
+ v1_5_0_rfc2119Skills,
24
+ v1_5_1_mendInstruction,
15
25
  ];
16
26
  /**
17
27
  * Get the current version of a navigator