@sudosandwich/limps 0.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 (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +190 -0
  3. package/dist/agent-parser.d.ts +146 -0
  4. package/dist/agent-parser.d.ts.map +1 -0
  5. package/dist/agent-parser.js +448 -0
  6. package/dist/agent-parser.js.map +1 -0
  7. package/dist/config.d.ts +54 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +146 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/coordination.d.ts +102 -0
  12. package/dist/coordination.d.ts.map +1 -0
  13. package/dist/coordination.js +157 -0
  14. package/dist/coordination.js.map +1 -0
  15. package/dist/index.d.ts +3 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +256 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/indexer.d.ts +83 -0
  20. package/dist/indexer.d.ts.map +1 -0
  21. package/dist/indexer.js +467 -0
  22. package/dist/indexer.js.map +1 -0
  23. package/dist/resources/agents-status.d.ts +32 -0
  24. package/dist/resources/agents-status.d.ts.map +1 -0
  25. package/dist/resources/agents-status.js +73 -0
  26. package/dist/resources/agents-status.js.map +1 -0
  27. package/dist/resources/decisions-log.d.ts +21 -0
  28. package/dist/resources/decisions-log.d.ts.map +1 -0
  29. package/dist/resources/decisions-log.js +146 -0
  30. package/dist/resources/decisions-log.js.map +1 -0
  31. package/dist/resources/index.d.ts +10 -0
  32. package/dist/resources/index.d.ts.map +1 -0
  33. package/dist/resources/index.js +74 -0
  34. package/dist/resources/index.js.map +1 -0
  35. package/dist/resources/plans-full.d.ts +11 -0
  36. package/dist/resources/plans-full.d.ts.map +1 -0
  37. package/dist/resources/plans-full.js +71 -0
  38. package/dist/resources/plans-full.js.map +1 -0
  39. package/dist/resources/plans-index.d.ts +30 -0
  40. package/dist/resources/plans-index.d.ts.map +1 -0
  41. package/dist/resources/plans-index.js +177 -0
  42. package/dist/resources/plans-index.js.map +1 -0
  43. package/dist/resources/plans-summary.d.ts +33 -0
  44. package/dist/resources/plans-summary.d.ts.map +1 -0
  45. package/dist/resources/plans-summary.js +238 -0
  46. package/dist/resources/plans-summary.js.map +1 -0
  47. package/dist/rlm/extractors.d.ts +39 -0
  48. package/dist/rlm/extractors.d.ts.map +1 -0
  49. package/dist/rlm/extractors.js +291 -0
  50. package/dist/rlm/extractors.js.map +1 -0
  51. package/dist/rlm/helpers-inject.d.ts +13 -0
  52. package/dist/rlm/helpers-inject.d.ts.map +1 -0
  53. package/dist/rlm/helpers-inject.js +586 -0
  54. package/dist/rlm/helpers-inject.js.map +1 -0
  55. package/dist/rlm/helpers.d.ts +124 -0
  56. package/dist/rlm/helpers.d.ts.map +1 -0
  57. package/dist/rlm/helpers.js +381 -0
  58. package/dist/rlm/helpers.js.map +1 -0
  59. package/dist/rlm/index.d.ts +12 -0
  60. package/dist/rlm/index.d.ts.map +1 -0
  61. package/dist/rlm/index.js +19 -0
  62. package/dist/rlm/index.js.map +1 -0
  63. package/dist/rlm/parallel.d.ts +45 -0
  64. package/dist/rlm/parallel.d.ts.map +1 -0
  65. package/dist/rlm/parallel.js +76 -0
  66. package/dist/rlm/parallel.js.map +1 -0
  67. package/dist/rlm/recursion.d.ts +96 -0
  68. package/dist/rlm/recursion.d.ts.map +1 -0
  69. package/dist/rlm/recursion.js +113 -0
  70. package/dist/rlm/recursion.js.map +1 -0
  71. package/dist/rlm/sampling.d.ts +100 -0
  72. package/dist/rlm/sampling.d.ts.map +1 -0
  73. package/dist/rlm/sampling.js +96 -0
  74. package/dist/rlm/sampling.js.map +1 -0
  75. package/dist/rlm/sandbox.d.ts +73 -0
  76. package/dist/rlm/sandbox.d.ts.map +1 -0
  77. package/dist/rlm/sandbox.js +160 -0
  78. package/dist/rlm/sandbox.js.map +1 -0
  79. package/dist/rlm/security.d.ts +28 -0
  80. package/dist/rlm/security.d.ts.map +1 -0
  81. package/dist/rlm/security.js +154 -0
  82. package/dist/rlm/security.js.map +1 -0
  83. package/dist/server.d.ts +21 -0
  84. package/dist/server.d.ts.map +1 -0
  85. package/dist/server.js +107 -0
  86. package/dist/server.js.map +1 -0
  87. package/dist/task-parser.d.ts +47 -0
  88. package/dist/task-parser.d.ts.map +1 -0
  89. package/dist/task-parser.js +112 -0
  90. package/dist/task-parser.js.map +1 -0
  91. package/dist/test-setup.d.ts +6 -0
  92. package/dist/test-setup.d.ts.map +1 -0
  93. package/dist/test-setup.js +37 -0
  94. package/dist/test-setup.js.map +1 -0
  95. package/dist/tools/claim-task.d.ts +28 -0
  96. package/dist/tools/claim-task.d.ts.map +1 -0
  97. package/dist/tools/claim-task.js +288 -0
  98. package/dist/tools/claim-task.js.map +1 -0
  99. package/dist/tools/create-doc.d.ts +47 -0
  100. package/dist/tools/create-doc.d.ts.map +1 -0
  101. package/dist/tools/create-doc.js +137 -0
  102. package/dist/tools/create-doc.js.map +1 -0
  103. package/dist/tools/create-plan.d.ts +25 -0
  104. package/dist/tools/create-plan.d.ts.map +1 -0
  105. package/dist/tools/create-plan.js +179 -0
  106. package/dist/tools/create-plan.js.map +1 -0
  107. package/dist/tools/delete-doc.d.ts +51 -0
  108. package/dist/tools/delete-doc.d.ts.map +1 -0
  109. package/dist/tools/delete-doc.js +194 -0
  110. package/dist/tools/delete-doc.js.map +1 -0
  111. package/dist/tools/get-next-task.d.ts +49 -0
  112. package/dist/tools/get-next-task.d.ts.map +1 -0
  113. package/dist/tools/get-next-task.js +204 -0
  114. package/dist/tools/get-next-task.js.map +1 -0
  115. package/dist/tools/index.d.ts +10 -0
  116. package/dist/tools/index.d.ts.map +1 -0
  117. package/dist/tools/index.js +122 -0
  118. package/dist/tools/index.js.map +1 -0
  119. package/dist/tools/list-docs.d.ts +53 -0
  120. package/dist/tools/list-docs.d.ts.map +1 -0
  121. package/dist/tools/list-docs.js +236 -0
  122. package/dist/tools/list-docs.js.map +1 -0
  123. package/dist/tools/open-document-in-cursor.d.ts +62 -0
  124. package/dist/tools/open-document-in-cursor.d.ts.map +1 -0
  125. package/dist/tools/open-document-in-cursor.js +211 -0
  126. package/dist/tools/open-document-in-cursor.js.map +1 -0
  127. package/dist/tools/read-doc.d.ts +44 -0
  128. package/dist/tools/read-doc.d.ts.map +1 -0
  129. package/dist/tools/read-doc.js +174 -0
  130. package/dist/tools/read-doc.js.map +1 -0
  131. package/dist/tools/release-task.d.ts +28 -0
  132. package/dist/tools/release-task.d.ts.map +1 -0
  133. package/dist/tools/release-task.js +154 -0
  134. package/dist/tools/release-task.js.map +1 -0
  135. package/dist/tools/rlm-multi-query.d.ts +110 -0
  136. package/dist/tools/rlm-multi-query.d.ts.map +1 -0
  137. package/dist/tools/rlm-multi-query.js +348 -0
  138. package/dist/tools/rlm-multi-query.js.map +1 -0
  139. package/dist/tools/rlm-query.d.ts +56 -0
  140. package/dist/tools/rlm-query.d.ts.map +1 -0
  141. package/dist/tools/rlm-query.js +228 -0
  142. package/dist/tools/rlm-query.js.map +1 -0
  143. package/dist/tools/search-docs.d.ts +34 -0
  144. package/dist/tools/search-docs.d.ts.map +1 -0
  145. package/dist/tools/search-docs.js +292 -0
  146. package/dist/tools/search-docs.js.map +1 -0
  147. package/dist/tools/update-doc.d.ts +149 -0
  148. package/dist/tools/update-doc.d.ts.map +1 -0
  149. package/dist/tools/update-doc.js +195 -0
  150. package/dist/tools/update-doc.js.map +1 -0
  151. package/dist/tools/update-task-status.d.ts +31 -0
  152. package/dist/tools/update-task-status.d.ts.map +1 -0
  153. package/dist/tools/update-task-status.js +303 -0
  154. package/dist/tools/update-task-status.js.map +1 -0
  155. package/dist/types.d.ts +50 -0
  156. package/dist/types.d.ts.map +1 -0
  157. package/dist/types.js +2 -0
  158. package/dist/types.js.map +1 -0
  159. package/dist/utils/backup.d.ts +76 -0
  160. package/dist/utils/backup.d.ts.map +1 -0
  161. package/dist/utils/backup.js +172 -0
  162. package/dist/utils/backup.js.map +1 -0
  163. package/dist/utils/errors.d.ts +93 -0
  164. package/dist/utils/errors.d.ts.map +1 -0
  165. package/dist/utils/errors.js +125 -0
  166. package/dist/utils/errors.js.map +1 -0
  167. package/dist/utils/index.d.ts +8 -0
  168. package/dist/utils/index.d.ts.map +1 -0
  169. package/dist/utils/index.js +9 -0
  170. package/dist/utils/index.js.map +1 -0
  171. package/dist/utils/os-paths.d.ts +45 -0
  172. package/dist/utils/os-paths.d.ts.map +1 -0
  173. package/dist/utils/os-paths.js +81 -0
  174. package/dist/utils/os-paths.js.map +1 -0
  175. package/dist/utils/paths.d.ts +71 -0
  176. package/dist/utils/paths.d.ts.map +1 -0
  177. package/dist/utils/paths.js +165 -0
  178. package/dist/utils/paths.js.map +1 -0
  179. package/dist/watcher.d.ts +19 -0
  180. package/dist/watcher.d.ts.map +1 -0
  181. package/dist/watcher.js +109 -0
  182. package/dist/watcher.js.map +1 -0
  183. package/package.json +85 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * open_document_in_cursor tool: Open files in Cursor editor using URI protocol with CLI fallback.
3
+ */
4
+ import { z } from 'zod';
5
+ import type { ToolContext, ToolResult } from '../types.js';
6
+ /**
7
+ * Input schema for open_document_in_cursor tool.
8
+ */
9
+ export declare const OpenDocumentInputSchema: z.ZodObject<{
10
+ path: z.ZodString;
11
+ line: z.ZodOptional<z.ZodNumber>;
12
+ column: z.ZodOptional<z.ZodNumber>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ path: string;
15
+ line?: number | undefined;
16
+ column?: number | undefined;
17
+ }, {
18
+ path: string;
19
+ line?: number | undefined;
20
+ column?: number | undefined;
21
+ }>;
22
+ export type OpenDocumentInput = z.infer<typeof OpenDocumentInputSchema>;
23
+ /**
24
+ * Output interface for open_document_in_cursor tool.
25
+ */
26
+ export interface OpenDocumentOutput {
27
+ success: boolean;
28
+ method?: 'uri' | 'cli';
29
+ message?: string;
30
+ error?: string;
31
+ }
32
+ /**
33
+ * Check if cursor CLI is available on the system.
34
+ *
35
+ * @returns true if cursor command is available, false otherwise
36
+ */
37
+ export declare function isCursorCliAvailable(): boolean;
38
+ /**
39
+ * Open a file in Cursor using URI protocol with CLI fallback.
40
+ *
41
+ * @param filePath - Absolute path to the file
42
+ * @param options - Optional line and column numbers
43
+ * @returns Result indicating success and method used
44
+ */
45
+ export declare function openInCursor(filePath: string, options?: {
46
+ line?: number;
47
+ column?: number;
48
+ }): Promise<{
49
+ success: boolean;
50
+ method: 'uri' | 'cli' | 'failed';
51
+ error?: string;
52
+ }>;
53
+ /**
54
+ * Handle open_document_in_cursor tool request.
55
+ * Opens a file in Cursor editor at an optional line/column position.
56
+ *
57
+ * @param input - Tool input
58
+ * @param context - Tool context
59
+ * @returns Tool result
60
+ */
61
+ export declare function handleOpenDocumentInCursor(input: OpenDocumentInput, context: ToolContext): Promise<ToolResult>;
62
+ //# sourceMappingURL=open-document-in-cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-document-in-cursor.d.ts","sourceRoot":"","sources":["../../src/tools/open-document-in-cursor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI3D;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuBD;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAO9C;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwDjF;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAuHrB"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * open_document_in_cursor tool: Open files in Cursor editor using URI protocol with CLI fallback.
3
+ */
4
+ import { z } from 'zod';
5
+ import { existsSync } from 'fs';
6
+ import { dirname } from 'path';
7
+ import { spawn } from 'child_process';
8
+ import open from 'open';
9
+ import which from 'which';
10
+ import { validatePath } from '../utils/paths.js';
11
+ import { notFound } from '../utils/errors.js';
12
+ /**
13
+ * Input schema for open_document_in_cursor tool.
14
+ */
15
+ export const OpenDocumentInputSchema = z.object({
16
+ path: z.string().min(1).describe('Path relative to repo root'),
17
+ line: z.number().int().positive().optional().describe('Optional line number to jump to'),
18
+ column: z.number().int().positive().optional().describe('Optional column number'),
19
+ });
20
+ /**
21
+ * Get repository root from config.
22
+ * Uses the first docsPath entry as the repo root, or derives from plansPath.
23
+ */
24
+ function getRepoRoot(config) {
25
+ // Prefer docsPaths[0] if it exists (it's the repo root)
26
+ if (config.docsPaths && config.docsPaths.length > 0) {
27
+ return config.docsPaths[0];
28
+ }
29
+ // Fallback: use plansPath parent directory
30
+ return dirname(config.plansPath);
31
+ }
32
+ /**
33
+ * URL encode special characters in path for URI protocol.
34
+ * Encodes: # → %23, ? → %3F, spaces → %20
35
+ */
36
+ function encodePathForUri(path) {
37
+ return path.replace(/#/g, '%23').replace(/\?/g, '%3F').replace(/ /g, '%20');
38
+ }
39
+ /**
40
+ * Check if cursor CLI is available on the system.
41
+ *
42
+ * @returns true if cursor command is available, false otherwise
43
+ */
44
+ export function isCursorCliAvailable() {
45
+ try {
46
+ which.sync('cursor');
47
+ return true;
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ }
53
+ /**
54
+ * Open a file in Cursor using URI protocol with CLI fallback.
55
+ *
56
+ * @param filePath - Absolute path to the file
57
+ * @param options - Optional line and column numbers
58
+ * @returns Result indicating success and method used
59
+ */
60
+ export async function openInCursor(filePath, options) {
61
+ // Try URI protocol first
62
+ try {
63
+ // URL encode the path portion only
64
+ const encodedPath = encodePathForUri(filePath);
65
+ let uri = `cursor://file${encodedPath}`;
66
+ if (options?.line !== undefined) {
67
+ uri += `:${options.line}`;
68
+ if (options.column !== undefined) {
69
+ uri += `:${options.column}`;
70
+ }
71
+ }
72
+ await open(uri, { wait: false });
73
+ return { success: true, method: 'uri' };
74
+ }
75
+ catch (uriError) {
76
+ // URI failed, try CLI fallback
77
+ if (isCursorCliAvailable()) {
78
+ try {
79
+ const args = [];
80
+ if (options?.line !== undefined) {
81
+ const location = `${filePath}:${options.line}${options.column !== undefined ? `:${options.column}` : ''}`;
82
+ args.push('-g', location);
83
+ }
84
+ else {
85
+ args.push(filePath);
86
+ }
87
+ const child = spawn('cursor', args, {
88
+ detached: true,
89
+ stdio: 'ignore',
90
+ shell: process.platform === 'win32',
91
+ });
92
+ child.unref();
93
+ return { success: true, method: 'cli' };
94
+ }
95
+ catch (cliError) {
96
+ return {
97
+ success: false,
98
+ method: 'failed',
99
+ error: `CLI fallback failed: ${cliError instanceof Error ? cliError.message : String(cliError)}`,
100
+ };
101
+ }
102
+ }
103
+ return {
104
+ success: false,
105
+ method: 'failed',
106
+ error: `URI protocol failed and cursor CLI is not available: ${uriError instanceof Error ? uriError.message : String(uriError)}`,
107
+ };
108
+ }
109
+ }
110
+ /**
111
+ * Handle open_document_in_cursor tool request.
112
+ * Opens a file in Cursor editor at an optional line/column position.
113
+ *
114
+ * @param input - Tool input
115
+ * @param context - Tool context
116
+ * @returns Tool result
117
+ */
118
+ export async function handleOpenDocumentInCursor(input, context) {
119
+ const { path, line, column } = input;
120
+ const { config } = context;
121
+ try {
122
+ // Get repo root
123
+ const repoRoot = getRepoRoot(config);
124
+ // Validate path first
125
+ const validated = validatePath(path, repoRoot);
126
+ // Check if file exists
127
+ if (!existsSync(validated.absolute)) {
128
+ throw notFound(path);
129
+ }
130
+ // Open file in Cursor
131
+ const result = await openInCursor(validated.absolute, { line, column });
132
+ if (!result.success) {
133
+ return {
134
+ content: [
135
+ {
136
+ type: 'text',
137
+ text: JSON.stringify({
138
+ success: false,
139
+ error: result.error || 'Failed to open file in Cursor',
140
+ }, null, 2),
141
+ },
142
+ ],
143
+ isError: true,
144
+ };
145
+ }
146
+ // Format success output (result.method is 'uri' | 'cli' at this point since success is true)
147
+ const output = {
148
+ success: true,
149
+ method: result.method,
150
+ message: `Opened ${validated.relative}${line ? ` at line ${line}` : ''}${column ? `, column ${column}` : ''} using ${result.method} method`,
151
+ };
152
+ return {
153
+ content: [
154
+ {
155
+ type: 'text',
156
+ text: JSON.stringify(output, null, 2),
157
+ },
158
+ ],
159
+ };
160
+ }
161
+ catch (error) {
162
+ // Handle DocumentError
163
+ if (error instanceof Error && 'code' in error) {
164
+ const docError = error;
165
+ return {
166
+ content: [
167
+ {
168
+ type: 'text',
169
+ text: JSON.stringify({
170
+ success: false,
171
+ error: docError.message,
172
+ }, null, 2),
173
+ },
174
+ ],
175
+ isError: true,
176
+ };
177
+ }
178
+ // Handle file system errors
179
+ if (error instanceof Error) {
180
+ // Check for ENOENT (file not found)
181
+ if ('code' in error && error.code === 'ENOENT') {
182
+ throw notFound(path);
183
+ }
184
+ return {
185
+ content: [
186
+ {
187
+ type: 'text',
188
+ text: JSON.stringify({
189
+ success: false,
190
+ error: `Error opening file: ${error.message}`,
191
+ }, null, 2),
192
+ },
193
+ ],
194
+ isError: true,
195
+ };
196
+ }
197
+ return {
198
+ content: [
199
+ {
200
+ type: 'text',
201
+ text: JSON.stringify({
202
+ success: false,
203
+ error: `Unknown error: ${String(error)}`,
204
+ }, null, 2),
205
+ },
206
+ ],
207
+ isError: true,
208
+ };
209
+ }
210
+ }
211
+ //# sourceMappingURL=open-document-in-cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-document-in-cursor.js","sourceRoot":"","sources":["../../src/tools/open-document-in-cursor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * read_doc tool: Read full content of any document in the repository.
3
+ */
4
+ import { z } from 'zod';
5
+ import type { ToolContext, ToolResult } from '../types.js';
6
+ /**
7
+ * Input schema for read_doc tool.
8
+ */
9
+ export declare const ReadDocInputSchema: z.ZodObject<{
10
+ path: z.ZodString;
11
+ lines: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ path: string;
14
+ lines?: [number, number] | undefined;
15
+ }, {
16
+ path: string;
17
+ lines?: [number, number] | undefined;
18
+ }>;
19
+ export type ReadDocInput = z.infer<typeof ReadDocInputSchema>;
20
+ /**
21
+ * Output interface for read_doc tool.
22
+ */
23
+ export interface ReadDocOutput {
24
+ path: string;
25
+ content: string;
26
+ metadata: {
27
+ size: number;
28
+ lines: number;
29
+ modified: string;
30
+ type: 'md' | 'jsx' | 'tsx' | 'ts' | 'json' | 'yaml' | 'other';
31
+ partial?: boolean;
32
+ range?: [number, number];
33
+ };
34
+ }
35
+ /**
36
+ * Handle read_doc tool request.
37
+ * Reads full file content with optional line range.
38
+ *
39
+ * @param input - Tool input
40
+ * @param context - Tool context
41
+ * @returns Tool result
42
+ */
43
+ export declare function handleReadDoc(input: ReadDocInput, context: ToolContext): Promise<ToolResult>;
44
+ //# sourceMappingURL=read-doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-doc.d.ts","sourceRoot":"","sources":["../../src/tools/read-doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI3D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;EAM7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAC9D,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC1B,CAAC;CACH;AAeD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAuJrB"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * read_doc tool: Read full content of any document in the repository.
3
+ */
4
+ import { z } from 'zod';
5
+ import { readFile, stat } from 'fs/promises';
6
+ import { existsSync } from 'fs';
7
+ import { dirname } from 'path';
8
+ import { validatePath } from '../utils/paths.js';
9
+ import { notFound } from '../utils/errors.js';
10
+ /**
11
+ * Input schema for read_doc tool.
12
+ */
13
+ export const ReadDocInputSchema = z.object({
14
+ path: z.string().min(1).describe('Path relative to repo root'),
15
+ lines: z
16
+ .tuple([z.number().int().positive(), z.number().int().positive()])
17
+ .optional()
18
+ .describe('Optional line range [start, end], 1-indexed'),
19
+ });
20
+ /**
21
+ * Get repository root from config.
22
+ * Uses the first docsPath entry as the repo root, or derives from plansPath.
23
+ */
24
+ function getRepoRoot(config) {
25
+ // Prefer docsPaths[0] if it exists (it's the repo root)
26
+ if (config.docsPaths && config.docsPaths.length > 0) {
27
+ return config.docsPaths[0];
28
+ }
29
+ // Fallback: use plansPath parent directory
30
+ return dirname(config.plansPath);
31
+ }
32
+ /**
33
+ * Handle read_doc tool request.
34
+ * Reads full file content with optional line range.
35
+ *
36
+ * @param input - Tool input
37
+ * @param context - Tool context
38
+ * @returns Tool result
39
+ */
40
+ export async function handleReadDoc(input, context) {
41
+ const { path, lines } = input;
42
+ const { config } = context;
43
+ try {
44
+ // Get repo root
45
+ const repoRoot = getRepoRoot(config);
46
+ // Validate path first
47
+ const validated = validatePath(path, repoRoot);
48
+ // Check if file exists
49
+ if (!existsSync(validated.absolute)) {
50
+ throw notFound(path);
51
+ }
52
+ // Read file stats
53
+ const stats = await stat(validated.absolute);
54
+ // Read file content
55
+ const content = await readFile(validated.absolute, 'utf-8');
56
+ // Count lines (empty file has 0 lines, not 1)
57
+ const lineCount = content === '' ? 0 : content.split('\n').length;
58
+ // Handle line range if specified
59
+ let finalContent = content;
60
+ let partial = false;
61
+ let range;
62
+ if (lines) {
63
+ const [start, end] = lines;
64
+ // Validate range
65
+ if (start > end) {
66
+ return {
67
+ content: [
68
+ {
69
+ type: 'text',
70
+ text: `Invalid line range: start (${start}) must be <= end (${end})`,
71
+ },
72
+ ],
73
+ isError: true,
74
+ };
75
+ }
76
+ if (start < 1 || end < 1) {
77
+ return {
78
+ content: [
79
+ {
80
+ type: 'text',
81
+ text: `Invalid line range: line numbers must be >= 1`,
82
+ },
83
+ ],
84
+ isError: true,
85
+ };
86
+ }
87
+ // Convert 1-indexed to 0-indexed
88
+ const startIdx = start - 1;
89
+ const endIdx = end; // end is inclusive, so we use it directly for slice
90
+ // Split into lines
91
+ const contentLines = content.split('\n');
92
+ // Validate range against file
93
+ if (startIdx > contentLines.length) {
94
+ return {
95
+ content: [
96
+ {
97
+ type: 'text',
98
+ text: `Line range [${start}, ${end}] exceeds file length (${lineCount} lines)`,
99
+ },
100
+ ],
101
+ isError: true,
102
+ };
103
+ }
104
+ // Extract range (endIdx is exclusive in slice, so we add 1)
105
+ const endSlice = Math.min(endIdx, contentLines.length);
106
+ const selectedLines = contentLines.slice(startIdx, endSlice);
107
+ // Rejoin lines
108
+ finalContent = selectedLines.join('\n');
109
+ partial = true;
110
+ range = [start, Math.min(end, lineCount)];
111
+ }
112
+ // Format output
113
+ const output = {
114
+ path: validated.relative,
115
+ content: finalContent,
116
+ metadata: {
117
+ size: stats.size,
118
+ lines: lineCount,
119
+ modified: stats.mtime.toISOString(),
120
+ type: validated.type,
121
+ ...(partial && { partial: true, range }),
122
+ },
123
+ };
124
+ return {
125
+ content: [
126
+ {
127
+ type: 'text',
128
+ text: JSON.stringify(output, null, 2),
129
+ },
130
+ ],
131
+ };
132
+ }
133
+ catch (error) {
134
+ // Handle DocumentError
135
+ if (error instanceof Error && 'code' in error) {
136
+ const docError = error;
137
+ return {
138
+ content: [
139
+ {
140
+ type: 'text',
141
+ text: `Error: ${docError.message}${docError.path ? ` (path: ${docError.path})` : ''}`,
142
+ },
143
+ ],
144
+ isError: true,
145
+ };
146
+ }
147
+ // Handle file system errors
148
+ if (error instanceof Error) {
149
+ // Check for ENOENT (file not found)
150
+ if ('code' in error && error.code === 'ENOENT') {
151
+ throw notFound(path);
152
+ }
153
+ return {
154
+ content: [
155
+ {
156
+ type: 'text',
157
+ text: `Error reading file: ${error.message}`,
158
+ },
159
+ ],
160
+ isError: true,
161
+ };
162
+ }
163
+ return {
164
+ content: [
165
+ {
166
+ type: 'text',
167
+ text: `Unknown error: ${String(error)}`,
168
+ },
169
+ ],
170
+ isError: true,
171
+ };
172
+ }
173
+ }
174
+ //# sourceMappingURL=read-doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-doc.js","sourceRoot":"","sources":["../../src/tools/read-doc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ import type { ToolContext, ToolResult } from '../types.js';
3
+ /**
4
+ * Input schema for release_task tool.
5
+ */
6
+ export declare const ReleaseTaskInputSchema: z.ZodObject<{
7
+ taskId: z.ZodString;
8
+ agentId: z.ZodString;
9
+ finalStatus: z.ZodOptional<z.ZodEnum<["PASS", "BLOCKED"]>>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ taskId: string;
12
+ agentId: string;
13
+ finalStatus?: "PASS" | "BLOCKED" | undefined;
14
+ }, {
15
+ taskId: string;
16
+ agentId: string;
17
+ finalStatus?: "PASS" | "BLOCKED" | undefined;
18
+ }>;
19
+ /**
20
+ * Handle release_task tool request.
21
+ * Frees a task and associated file locks when agent completes or abandons work.
22
+ *
23
+ * @param input - Tool input
24
+ * @param context - Tool context
25
+ * @returns Tool result
26
+ */
27
+ export declare function handleReleaseTask(input: z.infer<typeof ReleaseTaskInputSchema>, context: ToolContext): Promise<ToolResult>;
28
+ //# sourceMappingURL=release-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-task.d.ts","sourceRoot":"","sources":["../../src/tools/release-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAIjC,CAAC;AAEH;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,EAC7C,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAqJrB"}