@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.
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/dist/agent-parser.d.ts +146 -0
- package/dist/agent-parser.d.ts.map +1 -0
- package/dist/agent-parser.js +448 -0
- package/dist/agent-parser.js.map +1 -0
- package/dist/config.d.ts +54 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +146 -0
- package/dist/config.js.map +1 -0
- package/dist/coordination.d.ts +102 -0
- package/dist/coordination.d.ts.map +1 -0
- package/dist/coordination.js +157 -0
- package/dist/coordination.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +256 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.d.ts +83 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +467 -0
- package/dist/indexer.js.map +1 -0
- package/dist/resources/agents-status.d.ts +32 -0
- package/dist/resources/agents-status.d.ts.map +1 -0
- package/dist/resources/agents-status.js +73 -0
- package/dist/resources/agents-status.js.map +1 -0
- package/dist/resources/decisions-log.d.ts +21 -0
- package/dist/resources/decisions-log.d.ts.map +1 -0
- package/dist/resources/decisions-log.js +146 -0
- package/dist/resources/decisions-log.js.map +1 -0
- package/dist/resources/index.d.ts +10 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +74 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/plans-full.d.ts +11 -0
- package/dist/resources/plans-full.d.ts.map +1 -0
- package/dist/resources/plans-full.js +71 -0
- package/dist/resources/plans-full.js.map +1 -0
- package/dist/resources/plans-index.d.ts +30 -0
- package/dist/resources/plans-index.d.ts.map +1 -0
- package/dist/resources/plans-index.js +177 -0
- package/dist/resources/plans-index.js.map +1 -0
- package/dist/resources/plans-summary.d.ts +33 -0
- package/dist/resources/plans-summary.d.ts.map +1 -0
- package/dist/resources/plans-summary.js +238 -0
- package/dist/resources/plans-summary.js.map +1 -0
- package/dist/rlm/extractors.d.ts +39 -0
- package/dist/rlm/extractors.d.ts.map +1 -0
- package/dist/rlm/extractors.js +291 -0
- package/dist/rlm/extractors.js.map +1 -0
- package/dist/rlm/helpers-inject.d.ts +13 -0
- package/dist/rlm/helpers-inject.d.ts.map +1 -0
- package/dist/rlm/helpers-inject.js +586 -0
- package/dist/rlm/helpers-inject.js.map +1 -0
- package/dist/rlm/helpers.d.ts +124 -0
- package/dist/rlm/helpers.d.ts.map +1 -0
- package/dist/rlm/helpers.js +381 -0
- package/dist/rlm/helpers.js.map +1 -0
- package/dist/rlm/index.d.ts +12 -0
- package/dist/rlm/index.d.ts.map +1 -0
- package/dist/rlm/index.js +19 -0
- package/dist/rlm/index.js.map +1 -0
- package/dist/rlm/parallel.d.ts +45 -0
- package/dist/rlm/parallel.d.ts.map +1 -0
- package/dist/rlm/parallel.js +76 -0
- package/dist/rlm/parallel.js.map +1 -0
- package/dist/rlm/recursion.d.ts +96 -0
- package/dist/rlm/recursion.d.ts.map +1 -0
- package/dist/rlm/recursion.js +113 -0
- package/dist/rlm/recursion.js.map +1 -0
- package/dist/rlm/sampling.d.ts +100 -0
- package/dist/rlm/sampling.d.ts.map +1 -0
- package/dist/rlm/sampling.js +96 -0
- package/dist/rlm/sampling.js.map +1 -0
- package/dist/rlm/sandbox.d.ts +73 -0
- package/dist/rlm/sandbox.d.ts.map +1 -0
- package/dist/rlm/sandbox.js +160 -0
- package/dist/rlm/sandbox.js.map +1 -0
- package/dist/rlm/security.d.ts +28 -0
- package/dist/rlm/security.d.ts.map +1 -0
- package/dist/rlm/security.js +154 -0
- package/dist/rlm/security.js.map +1 -0
- package/dist/server.d.ts +21 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +107 -0
- package/dist/server.js.map +1 -0
- package/dist/task-parser.d.ts +47 -0
- package/dist/task-parser.d.ts.map +1 -0
- package/dist/task-parser.js +112 -0
- package/dist/task-parser.js.map +1 -0
- package/dist/test-setup.d.ts +6 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +37 -0
- package/dist/test-setup.js.map +1 -0
- package/dist/tools/claim-task.d.ts +28 -0
- package/dist/tools/claim-task.d.ts.map +1 -0
- package/dist/tools/claim-task.js +288 -0
- package/dist/tools/claim-task.js.map +1 -0
- package/dist/tools/create-doc.d.ts +47 -0
- package/dist/tools/create-doc.d.ts.map +1 -0
- package/dist/tools/create-doc.js +137 -0
- package/dist/tools/create-doc.js.map +1 -0
- package/dist/tools/create-plan.d.ts +25 -0
- package/dist/tools/create-plan.d.ts.map +1 -0
- package/dist/tools/create-plan.js +179 -0
- package/dist/tools/create-plan.js.map +1 -0
- package/dist/tools/delete-doc.d.ts +51 -0
- package/dist/tools/delete-doc.d.ts.map +1 -0
- package/dist/tools/delete-doc.js +194 -0
- package/dist/tools/delete-doc.js.map +1 -0
- package/dist/tools/get-next-task.d.ts +49 -0
- package/dist/tools/get-next-task.d.ts.map +1 -0
- package/dist/tools/get-next-task.js +204 -0
- package/dist/tools/get-next-task.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +122 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-docs.d.ts +53 -0
- package/dist/tools/list-docs.d.ts.map +1 -0
- package/dist/tools/list-docs.js +236 -0
- package/dist/tools/list-docs.js.map +1 -0
- package/dist/tools/open-document-in-cursor.d.ts +62 -0
- package/dist/tools/open-document-in-cursor.d.ts.map +1 -0
- package/dist/tools/open-document-in-cursor.js +211 -0
- package/dist/tools/open-document-in-cursor.js.map +1 -0
- package/dist/tools/read-doc.d.ts +44 -0
- package/dist/tools/read-doc.d.ts.map +1 -0
- package/dist/tools/read-doc.js +174 -0
- package/dist/tools/read-doc.js.map +1 -0
- package/dist/tools/release-task.d.ts +28 -0
- package/dist/tools/release-task.d.ts.map +1 -0
- package/dist/tools/release-task.js +154 -0
- package/dist/tools/release-task.js.map +1 -0
- package/dist/tools/rlm-multi-query.d.ts +110 -0
- package/dist/tools/rlm-multi-query.d.ts.map +1 -0
- package/dist/tools/rlm-multi-query.js +348 -0
- package/dist/tools/rlm-multi-query.js.map +1 -0
- package/dist/tools/rlm-query.d.ts +56 -0
- package/dist/tools/rlm-query.d.ts.map +1 -0
- package/dist/tools/rlm-query.js +228 -0
- package/dist/tools/rlm-query.js.map +1 -0
- package/dist/tools/search-docs.d.ts +34 -0
- package/dist/tools/search-docs.d.ts.map +1 -0
- package/dist/tools/search-docs.js +292 -0
- package/dist/tools/search-docs.js.map +1 -0
- package/dist/tools/update-doc.d.ts +149 -0
- package/dist/tools/update-doc.d.ts.map +1 -0
- package/dist/tools/update-doc.js +195 -0
- package/dist/tools/update-doc.js.map +1 -0
- package/dist/tools/update-task-status.d.ts +31 -0
- package/dist/tools/update-task-status.d.ts.map +1 -0
- package/dist/tools/update-task-status.js +303 -0
- package/dist/tools/update-task-status.js.map +1 -0
- package/dist/types.d.ts +50 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/backup.d.ts +76 -0
- package/dist/utils/backup.d.ts.map +1 -0
- package/dist/utils/backup.js +172 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/utils/errors.d.ts +93 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +125 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/os-paths.d.ts +45 -0
- package/dist/utils/os-paths.d.ts.map +1 -0
- package/dist/utils/os-paths.js +81 -0
- package/dist/utils/os-paths.js.map +1 -0
- package/dist/utils/paths.d.ts +71 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +165 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/watcher.d.ts +19 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +109 -0
- package/dist/watcher.js.map +1 -0
- 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"}
|