@sudosandwich/limps 0.2.1 → 1.0.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 (212) hide show
  1. package/README.md +250 -15
  2. package/dist/cli/config-cmd.d.ts +68 -0
  3. package/dist/cli/config-cmd.d.ts.map +1 -0
  4. package/dist/cli/config-cmd.js +206 -0
  5. package/dist/cli/config-cmd.js.map +1 -0
  6. package/dist/cli/index.d.ts +11 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +12 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/init-project.d.ts +12 -0
  11. package/dist/cli/init-project.d.ts.map +1 -0
  12. package/dist/cli/init-project.js +104 -0
  13. package/dist/cli/init-project.js.map +1 -0
  14. package/dist/cli/list-agents.d.ts +66 -0
  15. package/dist/cli/list-agents.d.ts.map +1 -0
  16. package/dist/cli/list-agents.js +147 -0
  17. package/dist/cli/list-agents.js.map +1 -0
  18. package/dist/cli/list-plans.d.ts +63 -0
  19. package/dist/cli/list-plans.d.ts.map +1 -0
  20. package/dist/cli/list-plans.js +218 -0
  21. package/dist/cli/list-plans.js.map +1 -0
  22. package/dist/cli/next-task.d.ts +83 -0
  23. package/dist/cli/next-task.d.ts.map +1 -0
  24. package/dist/cli/next-task.js +201 -0
  25. package/dist/cli/next-task.js.map +1 -0
  26. package/dist/cli/registry.d.ts +94 -0
  27. package/dist/cli/registry.d.ts.map +1 -0
  28. package/dist/cli/registry.js +150 -0
  29. package/dist/cli/registry.js.map +1 -0
  30. package/dist/cli/status.d.ts +35 -0
  31. package/dist/cli/status.d.ts.map +1 -0
  32. package/dist/cli/status.js +110 -0
  33. package/dist/cli/status.js.map +1 -0
  34. package/dist/cli.d.ts +3 -0
  35. package/dist/cli.d.ts.map +1 -0
  36. package/dist/cli.js +10 -0
  37. package/dist/cli.js.map +1 -0
  38. package/dist/commands/config/add.d.ts +9 -0
  39. package/dist/commands/config/add.d.ts.map +1 -0
  40. package/dist/commands/config/add.js +20 -0
  41. package/dist/commands/config/add.js.map +1 -0
  42. package/dist/commands/config/discover.d.ts +3 -0
  43. package/dist/commands/config/discover.d.ts.map +1 -0
  44. package/dist/commands/config/discover.js +9 -0
  45. package/dist/commands/config/discover.js.map +1 -0
  46. package/dist/commands/config/index.d.ts +3 -0
  47. package/dist/commands/config/index.d.ts.map +1 -0
  48. package/dist/commands/config/index.js +7 -0
  49. package/dist/commands/config/index.js.map +1 -0
  50. package/dist/commands/config/list.d.ts +3 -0
  51. package/dist/commands/config/list.d.ts.map +1 -0
  52. package/dist/commands/config/list.js +9 -0
  53. package/dist/commands/config/list.js.map +1 -0
  54. package/dist/commands/config/path.d.ts +3 -0
  55. package/dist/commands/config/path.d.ts.map +1 -0
  56. package/dist/commands/config/path.js +10 -0
  57. package/dist/commands/config/path.js.map +1 -0
  58. package/dist/commands/config/remove.d.ts +9 -0
  59. package/dist/commands/config/remove.d.ts.map +1 -0
  60. package/dist/commands/config/remove.js +17 -0
  61. package/dist/commands/config/remove.js.map +1 -0
  62. package/dist/commands/config/set.d.ts +9 -0
  63. package/dist/commands/config/set.d.ts.map +1 -0
  64. package/dist/commands/config/set.js +17 -0
  65. package/dist/commands/config/set.js.map +1 -0
  66. package/dist/commands/config/show.d.ts +3 -0
  67. package/dist/commands/config/show.d.ts.map +1 -0
  68. package/dist/commands/config/show.js +15 -0
  69. package/dist/commands/config/show.js.map +1 -0
  70. package/dist/commands/config/use.d.ts +9 -0
  71. package/dist/commands/config/use.d.ts.map +1 -0
  72. package/dist/commands/config/use.js +17 -0
  73. package/dist/commands/config/use.js.map +1 -0
  74. package/dist/commands/index.d.ts +3 -0
  75. package/dist/commands/index.d.ts.map +1 -0
  76. package/dist/commands/index.js +7 -0
  77. package/dist/commands/index.js.map +1 -0
  78. package/dist/commands/init.d.ts +13 -0
  79. package/dist/commands/init.d.ts.map +1 -0
  80. package/dist/commands/init.js +20 -0
  81. package/dist/commands/init.js.map +1 -0
  82. package/dist/commands/list-agents.d.ts +13 -0
  83. package/dist/commands/list-agents.d.ts.map +1 -0
  84. package/dist/commands/list-agents.js +31 -0
  85. package/dist/commands/list-agents.js.map +1 -0
  86. package/dist/commands/list-plans.d.ts +11 -0
  87. package/dist/commands/list-plans.d.ts.map +1 -0
  88. package/dist/commands/list-plans.js +21 -0
  89. package/dist/commands/list-plans.js.map +1 -0
  90. package/dist/commands/next-task.d.ts +13 -0
  91. package/dist/commands/next-task.d.ts.map +1 -0
  92. package/dist/commands/next-task.js +46 -0
  93. package/dist/commands/next-task.js.map +1 -0
  94. package/dist/commands/serve.d.ts +11 -0
  95. package/dist/commands/serve.d.ts.map +1 -0
  96. package/dist/commands/serve.js +31 -0
  97. package/dist/commands/serve.js.map +1 -0
  98. package/dist/commands/status.d.ts +13 -0
  99. package/dist/commands/status.d.ts.map +1 -0
  100. package/dist/commands/status.js +28 -0
  101. package/dist/commands/status.js.map +1 -0
  102. package/dist/components/AgentsList.d.ts +19 -0
  103. package/dist/components/AgentsList.d.ts.map +1 -0
  104. package/dist/components/AgentsList.js +29 -0
  105. package/dist/components/AgentsList.js.map +1 -0
  106. package/dist/components/Error.d.ts +6 -0
  107. package/dist/components/Error.d.ts.map +1 -0
  108. package/dist/components/Error.js +6 -0
  109. package/dist/components/Error.js.map +1 -0
  110. package/dist/components/NextTask.d.ts +12 -0
  111. package/dist/components/NextTask.d.ts.map +1 -0
  112. package/dist/components/NextTask.js +11 -0
  113. package/dist/components/NextTask.js.map +1 -0
  114. package/dist/components/PlanStatus.d.ts +11 -0
  115. package/dist/components/PlanStatus.d.ts.map +1 -0
  116. package/dist/components/PlanStatus.js +18 -0
  117. package/dist/components/PlanStatus.js.map +1 -0
  118. package/dist/components/PlansList.d.ts +12 -0
  119. package/dist/components/PlansList.d.ts.map +1 -0
  120. package/dist/components/PlansList.js +23 -0
  121. package/dist/components/PlansList.js.map +1 -0
  122. package/dist/components/Success.d.ts +6 -0
  123. package/dist/components/Success.d.ts.map +1 -0
  124. package/dist/components/Success.js +6 -0
  125. package/dist/components/Success.js.map +1 -0
  126. package/dist/index.d.ts +6 -0
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +9 -246
  129. package/dist/index.js.map +1 -1
  130. package/dist/server-main.d.ts +11 -0
  131. package/dist/server-main.d.ts.map +1 -0
  132. package/dist/server-main.js +81 -0
  133. package/dist/server-main.js.map +1 -0
  134. package/dist/server.js +1 -1
  135. package/dist/server.js.map +1 -1
  136. package/dist/theme/colors.d.ts +64 -0
  137. package/dist/theme/colors.d.ts.map +1 -0
  138. package/dist/theme/colors.js +85 -0
  139. package/dist/theme/colors.js.map +1 -0
  140. package/dist/theme/index.d.ts +6 -0
  141. package/dist/theme/index.d.ts.map +1 -0
  142. package/dist/theme/index.js +6 -0
  143. package/dist/theme/index.js.map +1 -0
  144. package/dist/tools/claim-task.d.ts +7 -10
  145. package/dist/tools/claim-task.d.ts.map +1 -1
  146. package/dist/tools/create-doc.d.ts +7 -10
  147. package/dist/tools/create-doc.d.ts.map +1 -1
  148. package/dist/tools/create-plan.d.ts +1 -7
  149. package/dist/tools/create-plan.d.ts.map +1 -1
  150. package/dist/tools/delete-doc.d.ts +1 -9
  151. package/dist/tools/delete-doc.d.ts.map +1 -1
  152. package/dist/tools/get-next-task.d.ts +19 -9
  153. package/dist/tools/get-next-task.d.ts.map +1 -1
  154. package/dist/tools/get-next-task.js +64 -1
  155. package/dist/tools/get-next-task.js.map +1 -1
  156. package/dist/tools/get-plan-status.d.ts +24 -0
  157. package/dist/tools/get-plan-status.d.ts.map +1 -0
  158. package/dist/tools/get-plan-status.js +48 -0
  159. package/dist/tools/get-plan-status.js.map +1 -0
  160. package/dist/tools/index.d.ts.map +1 -1
  161. package/dist/tools/index.js +66 -18
  162. package/dist/tools/index.js.map +1 -1
  163. package/dist/tools/list-agents.d.ts +24 -0
  164. package/dist/tools/list-agents.d.ts.map +1 -0
  165. package/dist/tools/list-agents.js +60 -0
  166. package/dist/tools/list-agents.js.map +1 -0
  167. package/dist/tools/list-docs.d.ts +1 -11
  168. package/dist/tools/list-docs.d.ts.map +1 -1
  169. package/dist/tools/list-plans.d.ts +23 -0
  170. package/dist/tools/list-plans.d.ts.map +1 -0
  171. package/dist/tools/list-plans.js +44 -0
  172. package/dist/tools/list-plans.js.map +1 -0
  173. package/dist/tools/open-document-in-cursor.d.ts +1 -9
  174. package/dist/tools/open-document-in-cursor.d.ts.map +1 -1
  175. package/dist/tools/process-doc.d.ts +43 -0
  176. package/dist/tools/process-doc.d.ts.map +1 -0
  177. package/dist/tools/process-doc.js +227 -0
  178. package/dist/tools/process-doc.js.map +1 -0
  179. package/dist/tools/process-docs.d.ts +54 -0
  180. package/dist/tools/process-docs.d.ts.map +1 -0
  181. package/dist/tools/process-docs.js +348 -0
  182. package/dist/tools/process-docs.js.map +1 -0
  183. package/dist/tools/read-doc.d.ts +1 -7
  184. package/dist/tools/read-doc.d.ts.map +1 -1
  185. package/dist/tools/release-task.d.ts +5 -10
  186. package/dist/tools/release-task.d.ts.map +1 -1
  187. package/dist/tools/rlm-multi-query.d.ts +5 -61
  188. package/dist/tools/rlm-multi-query.d.ts.map +1 -1
  189. package/dist/tools/rlm-query.d.ts +1 -13
  190. package/dist/tools/rlm-query.d.ts.map +1 -1
  191. package/dist/tools/search-docs.d.ts +1 -7
  192. package/dist/tools/search-docs.d.ts.map +1 -1
  193. package/dist/tools/update-doc.d.ts +6 -90
  194. package/dist/tools/update-doc.d.ts.map +1 -1
  195. package/dist/tools/update-task-status.d.ts +7 -12
  196. package/dist/tools/update-task-status.d.ts.map +1 -1
  197. package/dist/utils/config-resolver.d.ts +19 -0
  198. package/dist/utils/config-resolver.d.ts.map +1 -0
  199. package/dist/utils/config-resolver.js +65 -0
  200. package/dist/utils/config-resolver.js.map +1 -0
  201. package/dist/utils/index.d.ts +1 -0
  202. package/dist/utils/index.d.ts.map +1 -1
  203. package/dist/utils/index.js +1 -0
  204. package/dist/utils/index.js.map +1 -1
  205. package/dist/utils/markdown.d.ts +15 -0
  206. package/dist/utils/markdown.d.ts.map +1 -0
  207. package/dist/utils/markdown.js +20 -0
  208. package/dist/utils/markdown.js.map +1 -0
  209. package/dist/utils/os-paths.d.ts +4 -4
  210. package/dist/utils/os-paths.js +5 -5
  211. package/dist/utils/os-paths.js.map +1 -1
  212. package/package.json +22 -11
@@ -0,0 +1,44 @@
1
+ /**
2
+ * MCP tool: list_plans
3
+ *
4
+ * Lists all plans with structured data for LLM consumption.
5
+ * Wraps the CLI getPlansData() function to provide consistent experience.
6
+ */
7
+ import { z } from 'zod';
8
+ import { getPlansData } from '../cli/list-plans.js';
9
+ /**
10
+ * Input schema for list_plans tool.
11
+ * Currently accepts no parameters but schema is extensible.
12
+ */
13
+ export const ListPlansInputSchema = z.object({});
14
+ /**
15
+ * Handle list_plans tool request.
16
+ * Returns all plans with number, name, workType, overview, and status.
17
+ *
18
+ * @param _input - Tool input (currently unused)
19
+ * @param context - Tool context with config
20
+ * @returns Tool result with plan list or error
21
+ */
22
+ export async function handleListPlans(_input, context) {
23
+ const result = getPlansData(context.config);
24
+ if ('error' in result) {
25
+ return {
26
+ content: [
27
+ {
28
+ type: 'text',
29
+ text: result.error,
30
+ },
31
+ ],
32
+ isError: true,
33
+ };
34
+ }
35
+ return {
36
+ content: [
37
+ {
38
+ type: 'text',
39
+ text: JSON.stringify(result, null, 2),
40
+ },
41
+ ],
42
+ };
43
+ }
44
+ //# sourceMappingURL=list-plans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-plans.js","sourceRoot":"","sources":["../../src/tools/list-plans.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAA4C,EAC5C,OAAoB;IAEpB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,CAAC,KAAK;iBACnB;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -10,15 +10,7 @@ export declare const OpenDocumentInputSchema: z.ZodObject<{
10
10
  path: z.ZodString;
11
11
  line: z.ZodOptional<z.ZodNumber>;
12
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
- }>;
13
+ }, z.core.$strip>;
22
14
  export type OpenDocumentInput = z.infer<typeof OpenDocumentInputSchema>;
23
15
  /**
24
16
  * Output interface for open_document_in_cursor tool.
@@ -1 +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"}
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;;;;iBAIlC,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,43 @@
1
+ /**
2
+ * process_doc tool: Process a document with JavaScript code (read, filter, transform, extract).
3
+ *
4
+ * Enables LLMs to load documents as environment variables and execute
5
+ * filter/transform code before LLM reasoning.
6
+ */
7
+ import { z } from 'zod';
8
+ import type { ToolContext, ToolResult } from '../types.js';
9
+ /**
10
+ * Input schema for process_doc tool.
11
+ */
12
+ export declare const ProcessDocInputSchema: z.ZodObject<{
13
+ path: z.ZodString;
14
+ code: z.ZodString;
15
+ sub_query: z.ZodOptional<z.ZodString>;
16
+ timeout: z.ZodDefault<z.ZodNumber>;
17
+ max_depth: z.ZodDefault<z.ZodNumber>;
18
+ }, z.core.$strip>;
19
+ export type ProcessDocInput = z.infer<typeof ProcessDocInputSchema>;
20
+ /**
21
+ * Output interface for process_doc tool.
22
+ */
23
+ export interface ProcessDocOutput {
24
+ result: unknown;
25
+ sub_results?: unknown[];
26
+ execution_time_ms: number;
27
+ tokens_saved?: number;
28
+ metadata: {
29
+ path: string;
30
+ doc_size: number;
31
+ result_size: number;
32
+ depth: number;
33
+ };
34
+ }
35
+ /**
36
+ * Handle process_doc tool request.
37
+ *
38
+ * @param input - Tool input
39
+ * @param context - Tool context
40
+ * @returns Tool result
41
+ */
42
+ export declare function handleProcessDoc(input: ProcessDocInput, context: ToolContext): Promise<ToolResult>;
43
+ //# sourceMappingURL=process-doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-doc.d.ts","sourceRoot":"","sources":["../../src/tools/process-doc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQ3D;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;iBAYhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAqBD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA6LrB"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * process_doc tool: Process a document with JavaScript code (read, filter, transform, extract).
3
+ *
4
+ * Enables LLMs to load documents as environment variables and execute
5
+ * filter/transform code before LLM reasoning.
6
+ */
7
+ import { z } from 'zod';
8
+ import { readFile, stat } from 'fs/promises';
9
+ import { existsSync } from 'fs';
10
+ import { dirname } from 'path';
11
+ import { validatePath } from '../utils/paths.js';
12
+ import { notFound } from '../utils/errors.js';
13
+ import { createEnvironment } from '../rlm/sandbox.js';
14
+ import { validateCode } from '../rlm/security.js';
15
+ import { processSubCalls } from '../rlm/recursion.js';
16
+ /**
17
+ * Input schema for process_doc tool.
18
+ */
19
+ export const ProcessDocInputSchema = z.object({
20
+ path: z.string().min(1).describe('Document path relative to repo root'),
21
+ code: z.string().min(1).describe('JavaScript code to execute (doc variable available)'),
22
+ sub_query: z.string().optional().describe('Prompt for recursive LLM processing of results'),
23
+ timeout: z.number().int().min(100).max(30000).default(5000).describe('Execution timeout in ms'),
24
+ max_depth: z
25
+ .number()
26
+ .int()
27
+ .min(1)
28
+ .max(3)
29
+ .default(1)
30
+ .describe('Maximum recursion depth for sub_query'),
31
+ });
32
+ /**
33
+ * Get repository root from config.
34
+ */
35
+ function getRepoRoot(config) {
36
+ if (config.docsPaths && config.docsPaths.length > 0) {
37
+ return config.docsPaths[0];
38
+ }
39
+ return dirname(config.plansPath);
40
+ }
41
+ /**
42
+ * Estimate tokens saved by filtering.
43
+ * Rough approximation: 4 characters per token.
44
+ */
45
+ function estimateTokensSaved(docSize, resultSize) {
46
+ const charsSaved = docSize - resultSize;
47
+ return Math.max(0, Math.floor(charsSaved / 4));
48
+ }
49
+ /**
50
+ * Handle process_doc tool request.
51
+ *
52
+ * @param input - Tool input
53
+ * @param context - Tool context
54
+ * @returns Tool result
55
+ */
56
+ export async function handleProcessDoc(input, context) {
57
+ const { path, code, sub_query, timeout = 5000 } = input;
58
+ const { config } = context;
59
+ try {
60
+ // Get repo root
61
+ const repoRoot = getRepoRoot(config);
62
+ // Validate path BEFORE loading (per gotchas)
63
+ const validated = validatePath(path, repoRoot);
64
+ // Check if file exists
65
+ if (!existsSync(validated.absolute)) {
66
+ throw notFound(path);
67
+ }
68
+ // Read file stats and content
69
+ const stats = await stat(validated.absolute);
70
+ const content = await readFile(validated.absolute, 'utf-8');
71
+ const docSize = Buffer.byteLength(content, 'utf-8');
72
+ // Create DocVariable
73
+ const docVar = {
74
+ content,
75
+ metadata: {
76
+ path: validated.relative,
77
+ size: docSize,
78
+ lines: content === '' ? 0 : content.split('\n').length,
79
+ modified: stats.mtime.toISOString(),
80
+ },
81
+ path: validated.relative,
82
+ };
83
+ // Validate code before execution (per TDD requirement)
84
+ validateCode(code);
85
+ // Create sandbox environment
86
+ const env = await createEnvironment(docVar, { timeout });
87
+ try {
88
+ // Execute code
89
+ const execResult = await env.execute(code);
90
+ // Calculate result size (serialize to estimate)
91
+ const resultJson = JSON.stringify(execResult.result);
92
+ const resultSize = Buffer.byteLength(resultJson, 'utf-8');
93
+ // Estimate tokens saved
94
+ const tokensSaved = estimateTokensSaved(docSize, resultSize);
95
+ // Build output
96
+ const output = {
97
+ result: execResult.result,
98
+ execution_time_ms: Math.max(1, Math.round(execResult.executionTimeMs)), // Ensure at least 1ms
99
+ tokens_saved: tokensSaved,
100
+ metadata: {
101
+ path: validated.relative,
102
+ doc_size: docSize,
103
+ result_size: resultSize,
104
+ depth: 0, // Current depth (updated if sub_query is processed)
105
+ },
106
+ };
107
+ // Handle sub_query (Agent 3 implementation)
108
+ if (sub_query) {
109
+ try {
110
+ // Get sampling client from context (if available)
111
+ // For now, this will be undefined in real server, but tests can provide mock client
112
+ const samplingClient = context
113
+ .samplingClient;
114
+ // Normalize items to array
115
+ const items = Array.isArray(execResult.result) ? execResult.result : [execResult.result];
116
+ // Process sub-calls
117
+ const subResults = await processSubCalls(items, sub_query, {
118
+ maxDepth: input.max_depth ?? 1,
119
+ concurrency: 5,
120
+ timeout: timeout,
121
+ samplingClient,
122
+ });
123
+ // Map results to output format
124
+ output.sub_results = subResults.map((r) => (r.success ? r.result : { error: r.error }));
125
+ output.metadata.depth = 1; // Update depth after processing sub-calls
126
+ }
127
+ catch (error) {
128
+ // If sub-call processing fails, include error in sub_results
129
+ const errorMessage = error instanceof Error ? error.message : String(error);
130
+ output.sub_results = [
131
+ {
132
+ error: `Sub-call processing failed: ${errorMessage}`,
133
+ },
134
+ ];
135
+ }
136
+ }
137
+ return {
138
+ content: [
139
+ {
140
+ type: 'text',
141
+ text: JSON.stringify(output, null, 2),
142
+ },
143
+ ],
144
+ };
145
+ }
146
+ finally {
147
+ // Always dispose environment
148
+ env.dispose();
149
+ }
150
+ }
151
+ catch (error) {
152
+ // Handle DocumentError
153
+ if (error instanceof Error && 'code' in error) {
154
+ const docError = error;
155
+ return {
156
+ content: [
157
+ {
158
+ type: 'text',
159
+ text: `Error: ${docError.message}${docError.path ? ` (path: ${docError.path})` : ''}`,
160
+ },
161
+ ],
162
+ isError: true,
163
+ };
164
+ }
165
+ // Handle security errors
166
+ if (error instanceof Error && error.name === 'SecurityError') {
167
+ return {
168
+ content: [
169
+ {
170
+ type: 'text',
171
+ text: `Security error: ${error.message}`,
172
+ },
173
+ ],
174
+ isError: true,
175
+ };
176
+ }
177
+ // Handle timeout errors
178
+ if (error instanceof Error && error.name === 'TimeoutError') {
179
+ return {
180
+ content: [
181
+ {
182
+ type: 'text',
183
+ text: `Execution timeout: ${error.message}`,
184
+ },
185
+ ],
186
+ isError: true,
187
+ };
188
+ }
189
+ // Handle memory errors
190
+ if (error instanceof Error && error.name === 'MemoryError') {
191
+ return {
192
+ content: [
193
+ {
194
+ type: 'text',
195
+ text: `Memory limit exceeded: ${error.message}`,
196
+ },
197
+ ],
198
+ isError: true,
199
+ };
200
+ }
201
+ // Handle file system errors
202
+ if (error instanceof Error) {
203
+ if ('code' in error && error.code === 'ENOENT') {
204
+ throw notFound(path);
205
+ }
206
+ return {
207
+ content: [
208
+ {
209
+ type: 'text',
210
+ text: `Error executing query: ${error.message}`,
211
+ },
212
+ ],
213
+ isError: true,
214
+ };
215
+ }
216
+ return {
217
+ content: [
218
+ {
219
+ type: 'text',
220
+ text: `Unknown error: ${String(error)}`,
221
+ },
222
+ ],
223
+ isError: true,
224
+ };
225
+ }
226
+ }
227
+ //# sourceMappingURL=process-doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-doc.js","sourceRoot":"","sources":["../../src/tools/process-doc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * process_docs tool: Process multiple documents with JavaScript code for cross-document analysis.
3
+ * Use glob patterns or explicit paths.
4
+ *
5
+ * Enables cross-document analysis with glob patterns or explicit paths.
6
+ */
7
+ import { z } from 'zod';
8
+ import type { ToolContext, ToolResult } from '../types.js';
9
+ /**
10
+ * Base input schema for process_docs tool (for registration).
11
+ */
12
+ export declare const ProcessDocsInputBaseSchema: z.ZodObject<{
13
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
14
+ pattern: z.ZodOptional<z.ZodString>;
15
+ code: z.ZodString;
16
+ sub_query: z.ZodOptional<z.ZodString>;
17
+ timeout: z.ZodDefault<z.ZodNumber>;
18
+ max_docs: z.ZodDefault<z.ZodNumber>;
19
+ }, z.core.$strip>;
20
+ /**
21
+ * Input schema for process_docs tool (with validation).
22
+ */
23
+ export declare const ProcessDocsInputSchema: z.ZodObject<{
24
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ pattern: z.ZodOptional<z.ZodString>;
26
+ code: z.ZodString;
27
+ sub_query: z.ZodOptional<z.ZodString>;
28
+ timeout: z.ZodDefault<z.ZodNumber>;
29
+ max_docs: z.ZodDefault<z.ZodNumber>;
30
+ }, z.core.$strip>;
31
+ export type ProcessDocsInput = z.infer<typeof ProcessDocsInputSchema>;
32
+ /**
33
+ * Output interface for process_docs tool.
34
+ */
35
+ export interface ProcessDocsOutput {
36
+ result: unknown;
37
+ docs_loaded: number;
38
+ execution_time_ms: number;
39
+ sub_results?: unknown[];
40
+ metadata: {
41
+ paths: string[];
42
+ total_size: number;
43
+ result_size: number;
44
+ };
45
+ }
46
+ /**
47
+ * Handle process_docs tool request.
48
+ *
49
+ * @param input - Tool input
50
+ * @param context - Tool context
51
+ * @returns Tool result
52
+ */
53
+ export declare function handleProcessDocs(input: ProcessDocsInput, context: ToolContext): Promise<ToolResult>;
54
+ //# sourceMappingURL=process-docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-docs.d.ts","sourceRoot":"","sources":["../../src/tools/process-docs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQ3D;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;iBAOrC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;iBAOjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AA0GD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAmPrB"}