@cortexkit/aft-opencode 0.2.0 → 0.4.1
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/dist/bridge.d.ts +8 -0
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +45 -2
- package/dist/bridge.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -1
- package/dist/downloader.d.ts.map +1 -1
- package/dist/downloader.js +51 -15
- package/dist/downloader.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +73 -15
- package/dist/index.js.map +1 -1
- package/dist/metadata-store.d.ts +29 -0
- package/dist/metadata-store.d.ts.map +1 -0
- package/dist/metadata-store.js +53 -0
- package/dist/metadata-store.js.map +1 -0
- package/dist/normalize-schemas.d.ts +16 -0
- package/dist/normalize-schemas.d.ts.map +1 -0
- package/dist/normalize-schemas.js +45 -0
- package/dist/normalize-schemas.js.map +1 -0
- package/dist/patch-parser.d.ts +33 -0
- package/dist/patch-parser.d.ts.map +1 -0
- package/dist/patch-parser.js +247 -0
- package/dist/patch-parser.js.map +1 -0
- package/dist/platform.d.ts +21 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +31 -0
- package/dist/platform.js.map +1 -0
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +14 -5
- package/dist/pool.js.map +1 -1
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +6 -9
- package/dist/resolver.js.map +1 -1
- package/dist/tools/ast.d.ts.map +1 -1
- package/dist/tools/ast.js +179 -89
- package/dist/tools/ast.js.map +1 -1
- package/dist/tools/hoisted.d.ts +26 -0
- package/dist/tools/hoisted.d.ts.map +1 -0
- package/dist/tools/hoisted.js +852 -0
- package/dist/tools/hoisted.js.map +1 -0
- package/dist/tools/imports.d.ts.map +1 -1
- package/dist/tools/imports.js +41 -21
- package/dist/tools/imports.js.map +1 -1
- package/dist/tools/lsp.d.ts +1 -2
- package/dist/tools/lsp.d.ts.map +1 -1
- package/dist/tools/lsp.js +45 -110
- package/dist/tools/lsp.js.map +1 -1
- package/dist/tools/navigation.d.ts.map +1 -1
- package/dist/tools/navigation.js +25 -10
- package/dist/tools/navigation.js.map +1 -1
- package/dist/tools/permissions.d.ts +8 -0
- package/dist/tools/permissions.d.ts.map +1 -0
- package/dist/tools/permissions.js +50 -0
- package/dist/tools/permissions.js.map +1 -0
- package/dist/tools/reading.d.ts +1 -1
- package/dist/tools/reading.d.ts.map +1 -1
- package/dist/tools/reading.js +170 -54
- package/dist/tools/reading.js.map +1 -1
- package/dist/tools/refactoring.d.ts.map +1 -1
- package/dist/tools/refactoring.js +73 -24
- package/dist/tools/refactoring.js.map +1 -1
- package/dist/tools/safety.d.ts.map +1 -1
- package/dist/tools/safety.js +38 -11
- package/dist/tools/safety.js.map +1 -1
- package/dist/tools/structure.d.ts.map +1 -1
- package/dist/tools/structure.js +70 -20
- package/dist/tools/structure.js.map +1 -1
- package/package.json +7 -7
- package/dist/tools/editing.d.ts +0 -7
- package/dist/tools/editing.d.ts.map +0 -1
- package/dist/tools/editing.js +0 -150
- package/dist/tools/editing.js.map +0 -1
package/dist/tools/ast.js
CHANGED
|
@@ -5,98 +5,188 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { tool } from "@opencode-ai/plugin";
|
|
7
7
|
const z = tool.schema;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"yaml",
|
|
34
|
-
];
|
|
8
|
+
import { askEditPermission, resolveAbsolutePath, resolveRelativePatterns, workspacePattern, } from "./permissions.js";
|
|
9
|
+
/** Show output in opencode UI via metadata callback. */
|
|
10
|
+
function showOutputToUser(context, output) {
|
|
11
|
+
const ctx = context;
|
|
12
|
+
ctx.metadata?.({ metadata: { output } });
|
|
13
|
+
}
|
|
14
|
+
/** Provide helpful hints when a pattern returns 0 matches. */
|
|
15
|
+
function getEmptyResultHint(pattern, lang) {
|
|
16
|
+
const src = pattern.trim();
|
|
17
|
+
if (lang === "python") {
|
|
18
|
+
if (src.startsWith("class ") && src.endsWith(":")) {
|
|
19
|
+
return `Hint: Python class patterns need a body. Try: "${src.slice(0, -1)}" or "${src}\n $$$"`;
|
|
20
|
+
}
|
|
21
|
+
if ((src.startsWith("def ") || src.startsWith("async def ")) && src.endsWith(":")) {
|
|
22
|
+
return `Hint: Python function patterns need a body. Try adding "\\n $$$" after the colon.`;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (["javascript", "typescript", "tsx"].includes(lang)) {
|
|
26
|
+
if (/^(export\s+)?(async\s+)?function\s+\$[A-Z_]+\s*$/i.test(src)) {
|
|
27
|
+
return `Hint: Function patterns need params and body. Try: "function $NAME($$$) { $$$ }"`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const SUPPORTED_LANGS = ["typescript", "tsx", "javascript", "python", "rust", "go"];
|
|
35
33
|
export function astTools(ctx) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
34
|
+
const searchTool = {
|
|
35
|
+
description: "Search code patterns across filesystem using AST-aware matching. Supports 6 languages.\n\n" +
|
|
36
|
+
"Use meta-variables: $VAR matches a single AST node, $$$ matches multiple nodes (variadic).\n" +
|
|
37
|
+
"IMPORTANT: Patterns must be complete AST nodes (valid code fragments).\n" +
|
|
38
|
+
"For functions, include params and body: 'export async function $NAME($$$) { $$$ }' not just 'export async function $NAME'.\n\n" +
|
|
39
|
+
"Examples: pattern='console.log($MSG)' lang='typescript', pattern='async function $NAME($$$) { $$$ }' lang='javascript', pattern='def $FUNC($$$): $$$' lang='python'\n\n" +
|
|
40
|
+
"Returns: Text summary — 'Found N match(es) across M file(s)' followed by file:line blocks with matched text and captured meta-variables.",
|
|
41
|
+
args: {
|
|
42
|
+
pattern: z
|
|
43
|
+
.string()
|
|
44
|
+
.describe("AST pattern with meta-variables ($VAR, $$$). Must be complete AST node."),
|
|
45
|
+
lang: z.enum(SUPPORTED_LANGS).describe("Target language"),
|
|
46
|
+
paths: z.array(z.string()).optional().describe("Paths to search (default: ['.'])"),
|
|
47
|
+
globs: z.array(z.string()).optional().describe("Include/exclude globs (prefix ! to exclude)"),
|
|
48
|
+
contextLines: z
|
|
49
|
+
.number()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Number of context lines to show around each match"),
|
|
52
|
+
},
|
|
53
|
+
execute: async (args, context) => {
|
|
54
|
+
const bridge = ctx.pool.getBridge(context.directory);
|
|
55
|
+
const params = {
|
|
56
|
+
pattern: args.pattern,
|
|
57
|
+
lang: args.lang,
|
|
58
|
+
};
|
|
59
|
+
if (args.paths)
|
|
60
|
+
params.paths = args.paths;
|
|
61
|
+
if (args.globs)
|
|
62
|
+
params.globs = args.globs;
|
|
63
|
+
if (args.contextLines !== undefined)
|
|
64
|
+
params.context = Number(args.contextLines);
|
|
65
|
+
const response = await bridge.send("ast_search", params);
|
|
66
|
+
// Format output for readability
|
|
67
|
+
const data = response;
|
|
68
|
+
const matchCount = data.total_matches ?? data.matches?.length ?? 0;
|
|
69
|
+
const filesSearched = data.files_searched ?? 0;
|
|
70
|
+
const filesWithMatches = data.files_with_matches ?? filesSearched;
|
|
71
|
+
let output;
|
|
72
|
+
if (matchCount === 0) {
|
|
73
|
+
// Zero-match format is intentionally not documented in the description — it's
|
|
74
|
+
// self-explanatory text and documenting it would bloat the Returns section.
|
|
75
|
+
output = `No matches found (searched ${filesSearched} files)`;
|
|
76
|
+
// Add hints for common pattern mistakes
|
|
77
|
+
const hint = getEmptyResultHint(args.pattern, args.lang);
|
|
78
|
+
if (hint) {
|
|
79
|
+
output += `\n\n${hint}`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
output = `Found ${matchCount} match(es) in ${filesWithMatches} file(s) (${filesSearched} searched)\n\n`;
|
|
84
|
+
if (data.matches) {
|
|
85
|
+
for (const m of data.matches) {
|
|
86
|
+
const relFile = m.file ?? "unknown";
|
|
87
|
+
const line = m.line ?? 0;
|
|
88
|
+
output += `${relFile}:${line}\n`;
|
|
89
|
+
if (m.text) {
|
|
90
|
+
output += ` ${m.text.trim()}\n`;
|
|
91
|
+
}
|
|
92
|
+
if (m.meta_variables && Object.keys(m.meta_variables).length > 0) {
|
|
93
|
+
for (const [k, v] of Object.entries(m.meta_variables)) {
|
|
94
|
+
output += ` ${k}: ${v}\n`;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
output += "\n";
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Show output in UI
|
|
102
|
+
showOutputToUser(context, output);
|
|
103
|
+
return output;
|
|
70
104
|
},
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
105
|
+
};
|
|
106
|
+
const replaceTool = {
|
|
107
|
+
description: "Replace code patterns across filesystem with AST-aware rewriting. Applies changes by default — set dryRun=true to preview.\n\n" +
|
|
108
|
+
"Use meta-variables in the rewrite pattern to preserve matched content from the pattern.\n" +
|
|
109
|
+
"IMPORTANT: Patterns must be complete AST nodes (valid code fragments).\n\n" +
|
|
110
|
+
"Example: pattern='console.log($MSG)' rewrite='logger.info($MSG)' lang='typescript' — replaces all console.log calls with logger.info across TypeScript files.\n\n" +
|
|
111
|
+
"**Warning: This tool modifies files directly.** Use dryRun=true to preview. Consider creating an aft_safety checkpoint before bulk replacements.\n\n" +
|
|
112
|
+
"Returns: Text summary — 'Replaced N match(es) across M file(s)' (or '[DRY RUN] Would replace...') followed by file:line blocks with before/after text.",
|
|
113
|
+
args: {
|
|
114
|
+
pattern: z
|
|
115
|
+
.string()
|
|
116
|
+
.describe("AST pattern with meta-variables ($VAR, $$$). Must be complete AST node."),
|
|
117
|
+
rewrite: z.string().describe("Replacement pattern (can use $VAR from pattern)"),
|
|
118
|
+
lang: z.enum(SUPPORTED_LANGS).describe("Target language"),
|
|
119
|
+
paths: z.array(z.string()).optional().describe("Paths to search (default: ['.'])"),
|
|
120
|
+
globs: z.array(z.string()).optional().describe("Include/exclude globs (prefix ! to exclude)"),
|
|
121
|
+
dryRun: z.boolean().optional().describe("Preview changes without applying (default: false)"),
|
|
122
|
+
},
|
|
123
|
+
execute: async (args, context) => {
|
|
124
|
+
const bridge = ctx.pool.getBridge(context.directory);
|
|
125
|
+
const isDryRun = args.dryRun === true;
|
|
126
|
+
if (!isDryRun) {
|
|
127
|
+
const explicitPaths = Array.isArray(args.paths)
|
|
128
|
+
? resolveRelativePatterns(context, args.paths)
|
|
129
|
+
: [];
|
|
130
|
+
const positiveGlobs = Array.isArray(args.globs)
|
|
131
|
+
? args.globs.filter((glob) => !glob.startsWith("!"))
|
|
132
|
+
: [];
|
|
133
|
+
const patterns = [...explicitPaths, ...positiveGlobs];
|
|
134
|
+
const metadata = explicitPaths.length === 1 && positiveGlobs.length === 0 && Array.isArray(args.paths)
|
|
135
|
+
? { filepath: resolveAbsolutePath(context, args.paths[0]) }
|
|
136
|
+
: {};
|
|
137
|
+
const permissionError = await askEditPermission(context, patterns.length > 0 ? patterns : [workspacePattern(context)], metadata);
|
|
138
|
+
if (permissionError) {
|
|
139
|
+
const output = `Permission denied: ${permissionError}`;
|
|
140
|
+
showOutputToUser(context, output);
|
|
141
|
+
return output;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const params = {
|
|
145
|
+
pattern: args.pattern,
|
|
146
|
+
rewrite: args.rewrite,
|
|
147
|
+
lang: args.lang,
|
|
148
|
+
};
|
|
149
|
+
if (args.paths)
|
|
150
|
+
params.paths = args.paths;
|
|
151
|
+
if (args.globs)
|
|
152
|
+
params.globs = args.globs;
|
|
153
|
+
params.dry_run = args.dryRun === true;
|
|
154
|
+
const response = await bridge.send("ast_replace", params);
|
|
155
|
+
const data = response;
|
|
156
|
+
const matchCount = data.total_replacements ?? data.total_matches ?? data.matches?.length ?? 0;
|
|
157
|
+
const filesSearched = data.files_searched ?? data.total_files ?? 0;
|
|
158
|
+
const filesWithMatches = data.files_with_matches ?? data.total_files ?? filesSearched;
|
|
159
|
+
let output;
|
|
160
|
+
if (matchCount === 0) {
|
|
161
|
+
output = `No matches found (searched ${filesSearched} files)`;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
output = isDryRun
|
|
165
|
+
? `[DRY RUN] Would replace ${matchCount} match(es) in ${filesWithMatches} file(s) (${filesSearched} searched)\n\n`
|
|
166
|
+
: `Replaced ${matchCount} match(es) in ${filesWithMatches} file(s) (${filesSearched} searched)\n\n`;
|
|
167
|
+
if (data.matches) {
|
|
168
|
+
for (const m of data.matches) {
|
|
169
|
+
const relFile = m.file ?? "unknown";
|
|
170
|
+
const line = m.line ?? 0;
|
|
171
|
+
output += `${relFile}:${line}\n`;
|
|
172
|
+
if (m.text && m.replacement) {
|
|
173
|
+
output += ` - ${m.text.trim()}\n`;
|
|
174
|
+
output += ` + ${m.replacement.trim()}\n`;
|
|
175
|
+
}
|
|
176
|
+
output += "\n";
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
showOutputToUser(context, output);
|
|
181
|
+
return output;
|
|
99
182
|
},
|
|
100
183
|
};
|
|
184
|
+
// When hoisting: register as ast_grep_search/ast_grep_replace (override oh-my-opencode's)
|
|
185
|
+
// When not hoisting: register as aft_ast_search/aft_ast_replace
|
|
186
|
+
const hoisting = ctx.config.hoist_builtin_tools !== false;
|
|
187
|
+
return {
|
|
188
|
+
[hoisting ? "ast_grep_search" : "aft_ast_search"]: searchTool,
|
|
189
|
+
[hoisting ? "ast_grep_replace" : "aft_ast_replace"]: replaceTool,
|
|
190
|
+
};
|
|
101
191
|
}
|
|
102
192
|
//# sourceMappingURL=ast.js.map
|
package/dist/tools/ast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/tools/ast.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/tools/ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hoisted tools that replace opencode's built-in tools (read, write, edit, apply_patch).
|
|
3
|
+
*
|
|
4
|
+
* When hoist_builtin_tools is enabled (default), these tools are registered with
|
|
5
|
+
* the SAME names as opencode's built-in tools, effectively overriding them.
|
|
6
|
+
* When disabled, they're registered with aft_ prefix (e.g., aft_read).
|
|
7
|
+
*
|
|
8
|
+
* All file operations go through AFT's Rust binary for better performance,
|
|
9
|
+
* backup tracking, formatting, and inline diagnostics.
|
|
10
|
+
*/
|
|
11
|
+
import type { ToolDefinition } from "@opencode-ai/plugin";
|
|
12
|
+
import type { PluginContext } from "../types.js";
|
|
13
|
+
/**
|
|
14
|
+
* Creates the simple read tool. Registers as "read" when hoisted, "aft_read" when not.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createReadTool(ctx: PluginContext): ToolDefinition;
|
|
17
|
+
/**
|
|
18
|
+
* Returns hoisted tools keyed by opencode's built-in names.
|
|
19
|
+
* Overrides: read, write, edit, apply_patch.
|
|
20
|
+
*/
|
|
21
|
+
export declare function hoistedTools(ctx: PluginContext): Record<string, ToolDefinition>;
|
|
22
|
+
/**
|
|
23
|
+
* Returns the same tools with aft_ prefix (for when hoisting is disabled).
|
|
24
|
+
*/
|
|
25
|
+
export declare function aftPrefixedTools(ctx: PluginContext): Record<string, ToolDefinition>;
|
|
26
|
+
//# sourceMappingURL=hoisted.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hoisted.d.ts","sourceRoot":"","sources":["../../src/tools/hoisted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAuEjD;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,cAAc,CAwIjE;AAgqBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAS/E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAuBnF"}
|