@sudosandwich/limps 2.0.0 → 2.2.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 (100) hide show
  1. package/README.md +69 -7
  2. package/dist/agent-parser.d.ts +10 -2
  3. package/dist/agent-parser.d.ts.map +1 -1
  4. package/dist/agent-parser.js +0 -3
  5. package/dist/agent-parser.js.map +1 -1
  6. package/dist/cli/list-plans.d.ts.map +1 -1
  7. package/dist/cli/list-plans.js +4 -2
  8. package/dist/cli/list-plans.js.map +1 -1
  9. package/dist/cli/status.d.ts.map +1 -1
  10. package/dist/cli/status.js +3 -1
  11. package/dist/cli/status.js.map +1 -1
  12. package/dist/indexer.d.ts.map +1 -1
  13. package/dist/indexer.js +40 -69
  14. package/dist/indexer.js.map +1 -1
  15. package/dist/resources/plans-full.d.ts.map +1 -1
  16. package/dist/resources/plans-full.js +4 -3
  17. package/dist/resources/plans-full.js.map +1 -1
  18. package/dist/resources/plans-index.d.ts.map +1 -1
  19. package/dist/resources/plans-index.js +8 -4
  20. package/dist/resources/plans-index.js.map +1 -1
  21. package/dist/resources/plans-summary.d.ts.map +1 -1
  22. package/dist/resources/plans-summary.js +3 -2
  23. package/dist/resources/plans-summary.js.map +1 -1
  24. package/dist/rlm/extractors.d.ts +1 -0
  25. package/dist/rlm/extractors.d.ts.map +1 -1
  26. package/dist/rlm/extractors.js +17 -198
  27. package/dist/rlm/extractors.js.map +1 -1
  28. package/dist/rlm/helpers.js +10 -10
  29. package/dist/rlm/helpers.js.map +1 -1
  30. package/dist/server-main.js +1 -1
  31. package/dist/server-main.js.map +1 -1
  32. package/dist/tools/create-doc.d.ts +1 -0
  33. package/dist/tools/create-doc.d.ts.map +1 -1
  34. package/dist/tools/create-doc.js +23 -6
  35. package/dist/tools/create-doc.js.map +1 -1
  36. package/dist/tools/create-plan.d.ts.map +1 -1
  37. package/dist/tools/create-plan.js +4 -3
  38. package/dist/tools/create-plan.js.map +1 -1
  39. package/dist/tools/get-next-task.d.ts +1 -0
  40. package/dist/tools/get-next-task.d.ts.map +1 -1
  41. package/dist/tools/get-next-task.js +7 -3
  42. package/dist/tools/get-next-task.js.map +1 -1
  43. package/dist/tools/index.d.ts.map +1 -1
  44. package/dist/tools/index.js +18 -2
  45. package/dist/tools/index.js.map +1 -1
  46. package/dist/tools/list-docs.d.ts +1 -0
  47. package/dist/tools/list-docs.d.ts.map +1 -1
  48. package/dist/tools/list-docs.js +6 -2
  49. package/dist/tools/list-docs.js.map +1 -1
  50. package/dist/tools/list-plans.d.ts +4 -2
  51. package/dist/tools/list-plans.d.ts.map +1 -1
  52. package/dist/tools/list-plans.js +9 -3
  53. package/dist/tools/list-plans.js.map +1 -1
  54. package/dist/tools/manage-tags.d.ts +39 -0
  55. package/dist/tools/manage-tags.d.ts.map +1 -0
  56. package/dist/tools/manage-tags.js +203 -0
  57. package/dist/tools/manage-tags.js.map +1 -0
  58. package/dist/tools/process-doc.d.ts +1 -0
  59. package/dist/tools/process-doc.d.ts.map +1 -1
  60. package/dist/tools/process-doc.js +6 -2
  61. package/dist/tools/process-doc.js.map +1 -1
  62. package/dist/tools/process-docs.js +2 -2
  63. package/dist/tools/process-docs.js.map +1 -1
  64. package/dist/tools/search-docs.d.ts +25 -5
  65. package/dist/tools/search-docs.d.ts.map +1 -1
  66. package/dist/tools/search-docs.js +187 -57
  67. package/dist/tools/search-docs.js.map +1 -1
  68. package/dist/tools/update-doc.d.ts +12 -0
  69. package/dist/tools/update-doc.d.ts.map +1 -1
  70. package/dist/tools/update-doc.js +127 -24
  71. package/dist/tools/update-doc.js.map +1 -1
  72. package/dist/tools/update-task-status.js +1 -1
  73. package/dist/utils/errors.d.ts +37 -6
  74. package/dist/utils/errors.d.ts.map +1 -1
  75. package/dist/utils/errors.js +49 -8
  76. package/dist/utils/errors.js.map +1 -1
  77. package/dist/utils/frontmatter.d.ts +74 -0
  78. package/dist/utils/frontmatter.d.ts.map +1 -0
  79. package/dist/utils/frontmatter.js +153 -0
  80. package/dist/utils/frontmatter.js.map +1 -0
  81. package/dist/utils/index.d.ts +3 -0
  82. package/dist/utils/index.d.ts.map +1 -1
  83. package/dist/utils/index.js +3 -0
  84. package/dist/utils/index.js.map +1 -1
  85. package/dist/utils/obsidian-vault.d.ts +31 -0
  86. package/dist/utils/obsidian-vault.d.ts.map +1 -0
  87. package/dist/utils/obsidian-vault.js +172 -0
  88. package/dist/utils/obsidian-vault.js.map +1 -0
  89. package/dist/utils/pathfilter.d.ts +53 -0
  90. package/dist/utils/pathfilter.d.ts.map +1 -0
  91. package/dist/utils/pathfilter.js +107 -0
  92. package/dist/utils/pathfilter.js.map +1 -0
  93. package/dist/utils/paths.d.ts +17 -0
  94. package/dist/utils/paths.d.ts.map +1 -1
  95. package/dist/utils/paths.js +55 -2
  96. package/dist/utils/paths.js.map +1 -1
  97. package/dist/watcher.d.ts.map +1 -1
  98. package/dist/watcher.js +50 -16
  99. package/dist/watcher.js.map +1 -1
  100. package/package.json +2 -1
@@ -5,8 +5,9 @@ import { z } from 'zod';
5
5
  import { existsSync, readFileSync, writeFileSync, statSync } from 'fs';
6
6
  import { dirname } from 'path';
7
7
  import { validatePath, isProtectedPlanFile } from '../utils/paths.js';
8
- import { notFound } from '../utils/errors.js';
8
+ import { notFound, permissionDenied, noSpaceError } from '../utils/errors.js';
9
9
  import { createBackup } from '../utils/backup.js';
10
+ import { FrontmatterHandler } from '../utils/frontmatter.js';
10
11
  import { indexDocument } from '../indexer.js';
11
12
  /**
12
13
  * Patch operation schema.
@@ -21,15 +22,35 @@ export const PatchSchema = z.object({
21
22
  */
22
23
  export const UpdateDocInputBaseSchema = z.object({
23
24
  path: z.string().min(1).describe('Path to existing file'),
24
- content: z.string().optional().describe('Full replacement content'),
25
+ content: z
26
+ .string()
27
+ .optional()
28
+ .describe('Content to write (required for overwrite/append/prepend modes)'),
25
29
  patch: PatchSchema.optional().describe('Search/replace patch'),
30
+ mode: z
31
+ .enum(['overwrite', 'append', 'prepend'])
32
+ .default('overwrite')
33
+ .describe('Write mode: overwrite (default), append, or prepend'),
26
34
  createBackup: z.boolean().default(true).describe('Create backup before update'),
27
35
  force: z.boolean().default(false).describe('Skip validation warnings'),
36
+ prettyPrint: z
37
+ .boolean()
38
+ .default(false)
39
+ .describe('Format JSON response with indentation (default: false)'),
28
40
  });
29
41
  /**
30
42
  * Input schema for update_doc tool (with validation).
31
43
  */
32
- export const UpdateDocInputSchema = UpdateDocInputBaseSchema.refine((data) => data.content !== undefined || data.patch !== undefined, { message: 'Either content or patch must be provided' });
44
+ export const UpdateDocInputSchema = UpdateDocInputBaseSchema.refine((data) => {
45
+ // For append/prepend modes, content is required
46
+ if ((data.mode === 'append' || data.mode === 'prepend') && data.content === undefined) {
47
+ return false;
48
+ }
49
+ // For overwrite mode or patch, either content or patch must be provided
50
+ return data.content !== undefined || data.patch !== undefined;
51
+ }, {
52
+ message: 'Content is required for append/prepend modes. For overwrite mode, either content or patch must be provided.',
53
+ });
33
54
  /**
34
55
  * Get repository root from config.
35
56
  */
@@ -70,17 +91,22 @@ function applyPatch(content, patch) {
70
91
  * @returns Tool result
71
92
  */
72
93
  export async function handleUpdateDoc(input, context) {
73
- const { path, content, patch, createBackup: shouldBackup, force } = input;
94
+ const { path, content, patch, mode = 'overwrite', createBackup: shouldBackup, force, prettyPrint, } = input;
74
95
  const repoRoot = getRepoRoot(context.config);
96
+ const frontmatterHandler = new FrontmatterHandler();
75
97
  try {
76
98
  // Validate path
77
99
  const validated = validatePath(path, repoRoot);
78
- // Check if file exists
79
- if (!existsSync(validated.absolute)) {
100
+ // Check if file exists (required for append/prepend modes)
101
+ const fileExists = existsSync(validated.absolute);
102
+ if (!fileExists && (mode === 'append' || mode === 'prepend')) {
103
+ throw notFound(path);
104
+ }
105
+ if (!fileExists && mode === 'overwrite' && patch === undefined) {
80
106
  throw notFound(path);
81
107
  }
82
108
  // Check if this is a protected plan file
83
- if (isProtectedPlanFile(validated.relative) && !force) {
109
+ if (fileExists && isProtectedPlanFile(validated.relative) && !force) {
84
110
  return {
85
111
  content: [
86
112
  {
@@ -88,38 +114,102 @@ export async function handleUpdateDoc(input, context) {
88
114
  text: JSON.stringify({
89
115
  warning: 'Protected plan file - confirm with force: true',
90
116
  path: validated.relative,
91
- }, null, 2),
117
+ }, null, prettyPrint ? 2 : undefined),
92
118
  },
93
119
  ],
94
120
  isError: true,
95
121
  };
96
122
  }
97
- // Read existing content
98
- const oldContent = readFileSync(validated.absolute, 'utf-8');
123
+ // Read existing content if file exists
124
+ const oldContent = fileExists ? readFileSync(validated.absolute, 'utf-8') : '';
99
125
  const hadFrontmatter = hasFrontmatter(oldContent);
100
126
  // Determine new content
101
127
  let newContent;
102
128
  if (content !== undefined) {
103
- // Full replacement
104
- newContent = content;
105
- // Warn if frontmatter was removed (unless force is true)
106
- if (hadFrontmatter && !hasFrontmatter(newContent) && !force) {
129
+ if (mode === 'overwrite') {
130
+ // Full replacement
131
+ newContent = content;
132
+ // Warn if frontmatter was removed (unless force is true)
133
+ if (hadFrontmatter && !hasFrontmatter(newContent) && !force) {
134
+ return {
135
+ content: [
136
+ {
137
+ type: 'text',
138
+ text: JSON.stringify({
139
+ warning: 'Frontmatter removed - confirm with force: true',
140
+ path: validated.relative,
141
+ }, null, prettyPrint ? 2 : undefined),
142
+ },
143
+ ],
144
+ isError: true,
145
+ };
146
+ }
147
+ }
148
+ else if (mode === 'append' || mode === 'prepend') {
149
+ // Append or prepend mode - merge frontmatter and content
150
+ if (!fileExists) {
151
+ // File doesn't exist, treat as overwrite
152
+ newContent = content;
153
+ }
154
+ else {
155
+ // Parse existing note
156
+ const existingNote = frontmatterHandler.parse(oldContent);
157
+ const newNote = frontmatterHandler.parse(content);
158
+ // Merge frontmatter
159
+ const mergedFrontmatter = {
160
+ ...existingNote.frontmatter,
161
+ ...newNote.frontmatter,
162
+ };
163
+ // Combine content based on mode
164
+ let combinedContent;
165
+ if (mode === 'append') {
166
+ combinedContent = existingNote.content + newNote.content;
167
+ }
168
+ else {
169
+ // prepend
170
+ combinedContent = newNote.content + existingNote.content;
171
+ }
172
+ // Validate merged frontmatter
173
+ const validation = frontmatterHandler.validate(mergedFrontmatter);
174
+ if (!validation.isValid) {
175
+ return {
176
+ content: [
177
+ {
178
+ type: 'text',
179
+ text: JSON.stringify({
180
+ error: `Invalid frontmatter after merge: ${validation.errors.join(', ')}`,
181
+ path: validated.relative,
182
+ }, null, prettyPrint ? 2 : undefined),
183
+ },
184
+ ],
185
+ isError: true,
186
+ };
187
+ }
188
+ // Stringify with merged frontmatter and combined content
189
+ newContent = frontmatterHandler.stringify(mergedFrontmatter, combinedContent);
190
+ }
191
+ }
192
+ else {
193
+ // This should never happen due to schema validation
194
+ throw new Error(`Invalid mode: ${mode}`);
195
+ }
196
+ }
197
+ else if (patch !== undefined) {
198
+ // Patch operation (only works with overwrite mode)
199
+ if (mode !== 'overwrite') {
107
200
  return {
108
201
  content: [
109
202
  {
110
203
  type: 'text',
111
204
  text: JSON.stringify({
112
- warning: 'Frontmatter removed - confirm with force: true',
205
+ error: 'Patch operations only work with overwrite mode',
113
206
  path: validated.relative,
114
- }, null, 2),
207
+ }, null, prettyPrint ? 2 : undefined),
115
208
  },
116
209
  ],
117
210
  isError: true,
118
211
  };
119
212
  }
120
- }
121
- else if (patch !== undefined) {
122
- // Patch operation
123
213
  newContent = applyPatch(oldContent, patch);
124
214
  // Warn if patch had no matches
125
215
  if (newContent === oldContent) {
@@ -131,7 +221,7 @@ export async function handleUpdateDoc(input, context) {
131
221
  warning: 'Patch had no matches - file unchanged',
132
222
  path: validated.relative,
133
223
  search: patch.search,
134
- }, null, 2),
224
+ }, null, prettyPrint ? 2 : undefined),
135
225
  },
136
226
  ],
137
227
  isError: true,
@@ -148,8 +238,21 @@ export async function handleUpdateDoc(input, context) {
148
238
  const backupResult = await createBackup(validated.absolute, repoRoot);
149
239
  backupPath = backupResult.backupPath;
150
240
  }
151
- // Write new content
152
- writeFileSync(validated.absolute, newContent, 'utf-8');
241
+ // Write new content with error handling
242
+ try {
243
+ writeFileSync(validated.absolute, newContent, 'utf-8');
244
+ }
245
+ catch (error) {
246
+ if (error instanceof Error && 'code' in error) {
247
+ if (error.code === 'EACCES' || error.code === 'EPERM') {
248
+ throw permissionDenied(validated.relative, undefined, 'write');
249
+ }
250
+ if (error.code === 'ENOSPC') {
251
+ throw noSpaceError(validated.relative);
252
+ }
253
+ }
254
+ throw error;
255
+ }
153
256
  // Get file size
154
257
  const stats = statSync(validated.absolute);
155
258
  const size = stats.size;
@@ -168,7 +271,7 @@ export async function handleUpdateDoc(input, context) {
168
271
  content: [
169
272
  {
170
273
  type: 'text',
171
- text: JSON.stringify(output, null, 2),
274
+ text: JSON.stringify(output, null, prettyPrint ? 2 : undefined),
172
275
  },
173
276
  ],
174
277
  };
@@ -185,7 +288,7 @@ export async function handleUpdateDoc(input, context) {
185
288
  type: 'text',
186
289
  text: JSON.stringify({
187
290
  error: error instanceof Error ? error.message : String(error),
188
- }, null, 2),
291
+ }, null, prettyPrint ? 2 : undefined),
189
292
  },
190
293
  ],
191
294
  isError: true,
@@ -1 +1 @@
1
- {"version":3,"file":"update-doc.js","sourceRoot":"","sources":["../../src/tools/update-doc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-doc.js","sourceRoot":"","sources":["../../src/tools/update-doc.ts"],"names":[],"mappings":"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"}
@@ -101,7 +101,7 @@ function findPlanDocument(db, plansPath, planId) {
101
101
  SELECT path
102
102
  FROM documents
103
103
  WHERE path LIKE ?
104
- AND path LIKE '%/plan.md'
104
+ AND (path LIKE '%-plan.md' OR path LIKE '%/plan.md')
105
105
  `)
106
106
  .all(`${plansPath}%${planId}%`);
107
107
  if (plans.length === 0) {
@@ -5,8 +5,9 @@
5
5
  import type { JsonError } from '../cli/json-output.js';
6
6
  /**
7
7
  * Error codes for document operations.
8
+ * Includes filesystem error codes (ENOENT, EACCES, etc.) for better error handling.
8
9
  */
9
- export type ErrorCode = 'NOT_FOUND' | 'ALREADY_EXISTS' | 'PERMISSION_DENIED' | 'VALIDATION_ERROR' | 'RESTRICTED_PATH' | 'INTERNAL_ERROR';
10
+ export type ErrorCode = 'NOT_FOUND' | 'ENOENT' | 'ALREADY_EXISTS' | 'EEXIST' | 'PERMISSION_DENIED' | 'EACCES' | 'VALIDATION_ERROR' | 'RESTRICTED_PATH' | 'INTERNAL_ERROR' | 'EISDIR' | 'ENOTDIR' | 'ENOSPC';
10
11
  /**
11
12
  * MCP-compatible error shape for JSON responses.
12
13
  */
@@ -34,12 +35,34 @@ export declare class DocumentError extends Error {
34
35
  * Factory: File not found error.
35
36
  *
36
37
  * @param path - Path to the file that was not found
38
+ * @param suggestion - Optional custom suggestion
37
39
  * @returns DocumentError with NOT_FOUND code
38
40
  * @example
39
41
  * throw notFound('research/missing.md');
40
42
  * // DocumentError: File not found: research/missing.md
41
43
  */
42
- export declare function notFound(path: string): DocumentError;
44
+ export declare function notFound(path: string, suggestion?: string): DocumentError;
45
+ /**
46
+ * Factory: Directory not found error.
47
+ *
48
+ * @param path - Path to the directory that was not found
49
+ * @returns DocumentError with ENOENT code
50
+ */
51
+ export declare function directoryNotFound(path: string): DocumentError;
52
+ /**
53
+ * Factory: Cannot read directory as file error.
54
+ *
55
+ * @param path - Path that is a directory, not a file
56
+ * @returns DocumentError with EISDIR code
57
+ */
58
+ export declare function isDirectoryError(path: string): DocumentError;
59
+ /**
60
+ * Factory: Not a directory error.
61
+ *
62
+ * @param path - Path that points to a file, not a directory
63
+ * @returns DocumentError with ENOTDIR code
64
+ */
65
+ export declare function notDirectoryError(path: string): DocumentError;
43
66
  /**
44
67
  * Factory: File already exists error.
45
68
  *
@@ -55,12 +78,13 @@ export declare function alreadyExists(path: string): DocumentError;
55
78
  *
56
79
  * @param path - Path to the file
57
80
  * @param reason - Reason for the permission denial
58
- * @returns DocumentError with PERMISSION_DENIED code
81
+ * @param operation - Operation that was denied (read, write, delete, etc.)
82
+ * @returns DocumentError with EACCES code
59
83
  * @example
60
- * throw permissionDenied('config.json', 'File is read-only');
61
- * // DocumentError: Permission denied for config.json: File is read-only
84
+ * throw permissionDenied('config.json', 'File is read-only', 'write');
85
+ * // DocumentError: Permission denied: config.json. The file exists but cannot be written due to filesystem permissions.
62
86
  */
63
- export declare function permissionDenied(path: string, reason: string): DocumentError;
87
+ export declare function permissionDenied(path: string, reason?: string, operation?: string): DocumentError;
64
88
  /**
65
89
  * Factory: Restricted path error.
66
90
  *
@@ -82,6 +106,13 @@ export declare function restrictedPath(path: string): DocumentError;
82
106
  * // DocumentError: Validation failed for 'path': must be relative to repo root
83
107
  */
84
108
  export declare function validationError(field: string, message: string): DocumentError;
109
+ /**
110
+ * Factory: No space left on device error.
111
+ *
112
+ * @param path - Path where write failed
113
+ * @returns DocumentError with ENOSPC code
114
+ */
115
+ export declare function noSpaceError(path: string): DocumentError;
85
116
  /**
86
117
  * Error thrown when recursion depth limit is exceeded.
87
118
  * Used by RLM sub-call processing.
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvD;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,WAAW,GACX,gBAAgB,GAChB,mBAAmB,GACnB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAEjB,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAgBhF;;OAEG;IACH,MAAM,IAAI,QAAQ;CAgBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAOpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAOzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAO5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAO1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAE7E;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAElB,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;CAcnD;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB;IAexD;;OAEG;IACH,MAAM,IAAI,SAAS;CAgBpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,UAAU,CAoBvF;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,UAAU,CAoBtF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -45,13 +45,41 @@ export class DocumentError extends Error {
45
45
  * Factory: File not found error.
46
46
  *
47
47
  * @param path - Path to the file that was not found
48
+ * @param suggestion - Optional custom suggestion
48
49
  * @returns DocumentError with NOT_FOUND code
49
50
  * @example
50
51
  * throw notFound('research/missing.md');
51
52
  * // DocumentError: File not found: research/missing.md
52
53
  */
53
- export function notFound(path) {
54
- return new DocumentError('NOT_FOUND', `File not found: ${path}`, path, 'Use create_doc to create a new file, or check that the path is correct.');
54
+ export function notFound(path, suggestion) {
55
+ return new DocumentError('NOT_FOUND', `File not found: ${path}. Use list_directory to see available files, or check the path spelling.`, path, suggestion || 'Use create_doc to create a new file, or check that the path is correct.');
56
+ }
57
+ /**
58
+ * Factory: Directory not found error.
59
+ *
60
+ * @param path - Path to the directory that was not found
61
+ * @returns DocumentError with ENOENT code
62
+ */
63
+ export function directoryNotFound(path) {
64
+ return new DocumentError('ENOENT', `Directory not found: ${path}. Use list_directory with no path or '/' to see root folders.`, path, 'Check that the directory path is correct and exists.');
65
+ }
66
+ /**
67
+ * Factory: Cannot read directory as file error.
68
+ *
69
+ * @param path - Path that is a directory, not a file
70
+ * @returns DocumentError with EISDIR code
71
+ */
72
+ export function isDirectoryError(path) {
73
+ return new DocumentError('EISDIR', `Cannot read directory as file: ${path}. Use list_directory tool instead.`, path, 'Use list_directory to list files in a directory, or read_note to read a file.');
74
+ }
75
+ /**
76
+ * Factory: Not a directory error.
77
+ *
78
+ * @param path - Path that points to a file, not a directory
79
+ * @returns DocumentError with ENOTDIR code
80
+ */
81
+ export function notDirectoryError(path) {
82
+ return new DocumentError('ENOTDIR', `Not a directory: ${path}. This path points to a file, not a folder. Use read_note to read files.`, path, 'Use read_note to read files, or list_directory to list directory contents.');
55
83
  }
56
84
  /**
57
85
  * Factory: File already exists error.
@@ -70,13 +98,17 @@ export function alreadyExists(path) {
70
98
  *
71
99
  * @param path - Path to the file
72
100
  * @param reason - Reason for the permission denial
73
- * @returns DocumentError with PERMISSION_DENIED code
101
+ * @param operation - Operation that was denied (read, write, delete, etc.)
102
+ * @returns DocumentError with EACCES code
74
103
  * @example
75
- * throw permissionDenied('config.json', 'File is read-only');
76
- * // DocumentError: Permission denied for config.json: File is read-only
104
+ * throw permissionDenied('config.json', 'File is read-only', 'write');
105
+ * // DocumentError: Permission denied: config.json. The file exists but cannot be written due to filesystem permissions.
77
106
  */
78
- export function permissionDenied(path, reason) {
79
- return new DocumentError('PERMISSION_DENIED', `Permission denied for ${path}: ${reason}`, path, 'Check file permissions or ensure the file is not locked.');
107
+ export function permissionDenied(path, reason, operation) {
108
+ const operationText = operation ? ` (${operation})` : '';
109
+ const reasonText = reason ? `: ${reason}` : '';
110
+ const message = `Permission denied${operationText}: ${path}${reasonText}. The file exists but cannot be ${operation || 'accessed'} due to filesystem permissions.`;
111
+ return new DocumentError('EACCES', message, path, 'Check file permissions or ensure the file is not locked.');
80
112
  }
81
113
  /**
82
114
  * Factory: Restricted path error.
@@ -101,7 +133,16 @@ export function restrictedPath(path) {
101
133
  * // DocumentError: Validation failed for 'path': must be relative to repo root
102
134
  */
103
135
  export function validationError(field, message) {
104
- return new DocumentError('VALIDATION_ERROR', `Validation failed for '${field}': ${message}`);
136
+ return new DocumentError('VALIDATION_ERROR', `Validation failed for '${field}': ${message}`, undefined, 'Check the input format and try again.');
137
+ }
138
+ /**
139
+ * Factory: No space left on device error.
140
+ *
141
+ * @param path - Path where write failed
142
+ * @returns DocumentError with ENOSPC code
143
+ */
144
+ export function noSpaceError(path) {
145
+ return new DocumentError('ENOSPC', `No space left on device: ${path}`, path, 'Free up disk space and try again.');
105
146
  }
106
147
  /**
107
148
  * Error thrown when recursion depth limit is exceeded.
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAuB/C;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAY;IAChB,IAAI,CAAU;IACd,UAAU,CAAU;IAE7B,YAAY,IAAe,EAAE,OAAe,EAAE,IAAa,EAAE,UAAmB;QAC9E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QAErD,mCAAmC;QACnC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,MAAM,MAAM,GAAa;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACtC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,aAAa,CACtB,WAAW,EACX,mBAAmB,IAAI,EAAE,EACzB,IAAI,EACJ,yEAAyE,CAC1E,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,aAAa,CACtB,gBAAgB,EAChB,wBAAwB,IAAI,EAAE,EAC9B,IAAI,EACJ,0CAA0C,CAC3C,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAc;IAC3D,OAAO,IAAI,aAAa,CACtB,mBAAmB,EACnB,yBAAyB,IAAI,KAAK,MAAM,EAAE,EAC1C,IAAI,EACJ,0DAA0D,CAC3D,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,aAAa,CACtB,iBAAiB,EACjB,kCAAkC,IAAI,EAAE,EACxC,IAAI,EACJ,8EAA8E,CAC/E,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,OAAe;IAC5D,OAAO,IAAI,aAAa,CAAC,kBAAkB,EAAE,0BAA0B,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,QAAQ,CAAS;IACjB,YAAY,CAAS;IAE9B,YAAY,QAAgB,EAAE,YAAoB;QAChD,KAAK,CAAC,iCAAiC,YAAY,MAAM,QAAQ,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;QAEvD,mCAAmC;QACnC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;CACF;AAcD;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAS;IACb,WAAW,CAAW;IAE/B,YAAY,OAAe,EAAE,OAA2B;QACtD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,eAAe,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,EAAE,CAAC;QAE9C,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAElD,mCAAmC;QACnC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,MAAM,MAAM,GAAc;YACxB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,CAAC,OAAO;SACpB,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACxC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,eAAyB;IACzE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACnF,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,WAAW,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC9D,WAAW,CAAC,IAAI,CAAC,qBAAqB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;SAAM,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,WAAW,CAAC,IAAI,CACd,qBAAqB,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,eAAe,CAAC,MAAM,GAAG,CAAC,QAAQ,CACvG,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,UAAU,CAAC,mBAAmB,MAAM,EAAE,EAAE;QACjD,IAAI,EAAE,gBAAgB;QACtB,WAAW;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,cAAwB;IACxE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAClF,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,WAAW,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5D,WAAW,CAAC,IAAI,CAAC,oBAAoB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;SAAM,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,WAAW,CAAC,IAAI,CACd,oBAAoB,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,cAAc,CAAC,MAAM,GAAG,CAAC,QAAQ,CACpG,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,UAAU,CAAC,mBAAmB,MAAM,EAAE,EAAE;QACjD,IAAI,EAAE,gBAAgB;QACtB,WAAW;KACZ,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Frontmatter handling utilities with validation.
3
+ * Based on patterns from mcp-obsidian for safe YAML frontmatter parsing.
4
+ */
5
+ /**
6
+ * Parsed note with frontmatter and content separated.
7
+ */
8
+ export interface ParsedNote {
9
+ frontmatter: Record<string, unknown>;
10
+ content: string;
11
+ originalContent: string;
12
+ }
13
+ /**
14
+ * Result of frontmatter validation.
15
+ */
16
+ export interface FrontmatterValidationResult {
17
+ isValid: boolean;
18
+ errors: string[];
19
+ warnings: string[];
20
+ }
21
+ /**
22
+ * Frontmatter handler with validation and safe parsing.
23
+ * Prevents functions, symbols, and other dangerous objects in frontmatter.
24
+ */
25
+ export declare class FrontmatterHandler {
26
+ /**
27
+ * Parse frontmatter from content.
28
+ * Returns parsed frontmatter and content separated.
29
+ *
30
+ * @param content - Content with optional YAML frontmatter
31
+ * @returns Parsed note with frontmatter and content
32
+ */
33
+ parse(content: string): ParsedNote;
34
+ /**
35
+ * Stringify frontmatter and content back to markdown.
36
+ *
37
+ * @param frontmatterData - Frontmatter object
38
+ * @param content - Content body
39
+ * @returns Complete markdown with frontmatter
40
+ */
41
+ stringify(frontmatterData: Record<string, unknown>, content: string): string;
42
+ /**
43
+ * Validate frontmatter for security and correctness.
44
+ * Prevents functions, symbols, and other dangerous objects.
45
+ *
46
+ * @param frontmatterData - Frontmatter object to validate
47
+ * @returns Validation result with errors and warnings
48
+ */
49
+ validate(frontmatterData: Record<string, unknown>): FrontmatterValidationResult;
50
+ /**
51
+ * Recursively check for problematic values in frontmatter.
52
+ *
53
+ * @param obj - Object to check
54
+ * @param result - Validation result to update
55
+ * @param path - Current path in the object (for error messages)
56
+ */
57
+ private checkForProblematicValues;
58
+ /**
59
+ * Extract only frontmatter from content without parsing body.
60
+ *
61
+ * @param content - Content with optional YAML frontmatter
62
+ * @returns Frontmatter object
63
+ */
64
+ extractFrontmatter(content: string): Record<string, unknown>;
65
+ /**
66
+ * Update frontmatter in content, preserving body.
67
+ *
68
+ * @param content - Original content
69
+ * @param updates - Frontmatter updates to merge
70
+ * @returns Updated content with new frontmatter
71
+ */
72
+ updateFrontmatter(content: string, updates: Record<string, unknown>): string;
73
+ }
74
+ //# sourceMappingURL=frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAkBlC;;;;;;OAMG;IACH,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAe5E;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,2BAA2B;IAuB/E;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IAmDjC;;;;;OAKG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAK5D;;;;;;OAMG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CAW7E"}