@yuaone/tools 0.1.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 +663 -0
- package/README.md +15 -0
- package/dist/__tests__/file-edit.test.d.ts +8 -0
- package/dist/__tests__/file-edit.test.d.ts.map +1 -0
- package/dist/__tests__/file-edit.test.js +125 -0
- package/dist/__tests__/file-edit.test.js.map +1 -0
- package/dist/__tests__/registry.test.d.ts +7 -0
- package/dist/__tests__/registry.test.d.ts.map +1 -0
- package/dist/__tests__/registry.test.js +83 -0
- package/dist/__tests__/registry.test.js.map +1 -0
- package/dist/__tests__/validators.test.d.ts +8 -0
- package/dist/__tests__/validators.test.d.ts.map +1 -0
- package/dist/__tests__/validators.test.js +189 -0
- package/dist/__tests__/validators.test.js.map +1 -0
- package/dist/base-tool.d.ts +45 -0
- package/dist/base-tool.d.ts.map +1 -0
- package/dist/base-tool.js +87 -0
- package/dist/base-tool.js.map +1 -0
- package/dist/browser-tool.d.ts +39 -0
- package/dist/browser-tool.d.ts.map +1 -0
- package/dist/browser-tool.js +518 -0
- package/dist/browser-tool.js.map +1 -0
- package/dist/code-search.d.ts +42 -0
- package/dist/code-search.d.ts.map +1 -0
- package/dist/code-search.js +298 -0
- package/dist/code-search.js.map +1 -0
- package/dist/design-tools.d.ts +70 -0
- package/dist/design-tools.d.ts.map +1 -0
- package/dist/design-tools.js +471 -0
- package/dist/design-tools.js.map +1 -0
- package/dist/dev-server-manager.d.ts +32 -0
- package/dist/dev-server-manager.d.ts.map +1 -0
- package/dist/dev-server-manager.js +183 -0
- package/dist/dev-server-manager.js.map +1 -0
- package/dist/file-edit.d.ts +19 -0
- package/dist/file-edit.d.ts.map +1 -0
- package/dist/file-edit.js +217 -0
- package/dist/file-edit.js.map +1 -0
- package/dist/file-read.d.ts +19 -0
- package/dist/file-read.d.ts.map +1 -0
- package/dist/file-read.js +142 -0
- package/dist/file-read.js.map +1 -0
- package/dist/file-write.d.ts +18 -0
- package/dist/file-write.d.ts.map +1 -0
- package/dist/file-write.js +139 -0
- package/dist/file-write.js.map +1 -0
- package/dist/git-ops.d.ts +25 -0
- package/dist/git-ops.d.ts.map +1 -0
- package/dist/git-ops.js +219 -0
- package/dist/git-ops.js.map +1 -0
- package/dist/glob.d.ts +18 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +91 -0
- package/dist/glob.js.map +1 -0
- package/dist/grep.d.ts +19 -0
- package/dist/grep.d.ts.map +1 -0
- package/dist/grep.js +177 -0
- package/dist/grep.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/security-scan.d.ts +62 -0
- package/dist/security-scan.d.ts.map +1 -0
- package/dist/security-scan.js +445 -0
- package/dist/security-scan.js.map +1 -0
- package/dist/shell-exec.d.ts +20 -0
- package/dist/shell-exec.d.ts.map +1 -0
- package/dist/shell-exec.js +206 -0
- package/dist/shell-exec.js.map +1 -0
- package/dist/test-run.d.ts +51 -0
- package/dist/test-run.d.ts.map +1 -0
- package/dist/test-run.js +359 -0
- package/dist/test-run.js.map +1 -0
- package/dist/tool-registry.d.ts +70 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +181 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/types.d.ts +137 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/validators.d.ts +57 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +218 -0
- package/dist/validators.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @yuaone/tools — Tool Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for all YUAN agent tools.
|
|
5
|
+
* - Register/retrieve tools by name
|
|
6
|
+
* - Generate LLM-ready tool definitions
|
|
7
|
+
* - Execute tools by name
|
|
8
|
+
* - toExecutor() bridges to @yuaone/core's ToolExecutor interface
|
|
9
|
+
*/
|
|
10
|
+
import type { ToolDefinition, ToolResult, ToolExecutor } from '@yuaone/core';
|
|
11
|
+
import type { BaseTool } from './base-tool.js';
|
|
12
|
+
export declare class ToolRegistry {
|
|
13
|
+
private tools;
|
|
14
|
+
/** Register a tool instance. */
|
|
15
|
+
register(tool: BaseTool): void;
|
|
16
|
+
/** Register multiple tools at once. */
|
|
17
|
+
registerAll(tools: BaseTool[]): void;
|
|
18
|
+
/** Get a tool by name. */
|
|
19
|
+
get(name: string): BaseTool | undefined;
|
|
20
|
+
/** Check if a tool is registered. */
|
|
21
|
+
has(name: string): boolean;
|
|
22
|
+
/** List all registered tool names. */
|
|
23
|
+
listNames(): string[];
|
|
24
|
+
/** Generate tool definitions for LLM consumption (core-compatible JSON Schema). */
|
|
25
|
+
toDefinitions(): ToolDefinition[];
|
|
26
|
+
/**
|
|
27
|
+
* Execute a tool by name (internal use).
|
|
28
|
+
* @param name - Tool name
|
|
29
|
+
* @param args - Tool arguments (must include _toolCallId)
|
|
30
|
+
* @param workDir - Project working directory
|
|
31
|
+
*/
|
|
32
|
+
execute(name: string, args: Record<string, unknown>, workDir: string): Promise<ToolResult>;
|
|
33
|
+
/**
|
|
34
|
+
* Execute a tool by name, passing an optional AbortSignal for interrupt support.
|
|
35
|
+
* @param name - Tool name
|
|
36
|
+
* @param args - Tool arguments
|
|
37
|
+
* @param workDir - Project working directory
|
|
38
|
+
* @param abortSignal - Optional AbortSignal for cancellation
|
|
39
|
+
*/
|
|
40
|
+
executeWithSignal(name: string, args: Record<string, unknown>, workDir: string, abortSignal?: AbortSignal): Promise<ToolResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Create a ToolExecutor adapter that implements @yuaone/core's ToolExecutor interface.
|
|
43
|
+
*
|
|
44
|
+
* The adapter:
|
|
45
|
+
* - Provides tool definitions in JSON Schema format
|
|
46
|
+
* - Parses ToolCall.arguments (string → object if needed)
|
|
47
|
+
* - Injects _toolCallId into args
|
|
48
|
+
* - Measures execution duration
|
|
49
|
+
* - Returns core-compatible ToolResult
|
|
50
|
+
*
|
|
51
|
+
* @param workDir - Project working directory for tool execution
|
|
52
|
+
*/
|
|
53
|
+
toExecutor(workDir: string): ToolExecutor;
|
|
54
|
+
/** Get the number of registered tools. */
|
|
55
|
+
get size(): number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Create a ToolRegistry pre-loaded with all built-in YUAN tools.
|
|
59
|
+
*/
|
|
60
|
+
export declare function createDefaultRegistry(): ToolRegistry;
|
|
61
|
+
/**
|
|
62
|
+
* Create a ToolRegistry with all standard tools + design mode tools.
|
|
63
|
+
*
|
|
64
|
+
* Design tools (snapshot, screenshot, navigate, resize, inspect, scroll)
|
|
65
|
+
* are loaded via dynamic import to avoid circular dependencies.
|
|
66
|
+
*
|
|
67
|
+
* @param workDir - Project working directory (reserved for future use)
|
|
68
|
+
*/
|
|
69
|
+
export declare function createDesignRegistry(workDir: string): Promise<ToolRegistry>;
|
|
70
|
+
//# sourceMappingURL=tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAY,YAAY,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA+B;IAE5C,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAO9B,uCAAuC;IACvC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAMpC,0BAA0B;IAC1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIvC,qCAAqC;IACrC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,sCAAsC;IACtC,SAAS,IAAI,MAAM,EAAE;IAIrB,mFAAmF;IACnF,aAAa,IAAI,cAAc,EAAE;IAIjC;;;;;OAKG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC;IAetB;;;;;;OAMG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,UAAU,CAAC;IAetB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY;IA0CzC,0CAA0C;IAC1C,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAeD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,CAepD;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAOjF"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @yuaone/tools — Tool Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for all YUAN agent tools.
|
|
5
|
+
* - Register/retrieve tools by name
|
|
6
|
+
* - Generate LLM-ready tool definitions
|
|
7
|
+
* - Execute tools by name
|
|
8
|
+
* - toExecutor() bridges to @yuaone/core's ToolExecutor interface
|
|
9
|
+
*/
|
|
10
|
+
export class ToolRegistry {
|
|
11
|
+
tools = new Map();
|
|
12
|
+
/** Register a tool instance. */
|
|
13
|
+
register(tool) {
|
|
14
|
+
if (this.tools.has(tool.name)) {
|
|
15
|
+
throw new Error(`Tool already registered: ${tool.name}`);
|
|
16
|
+
}
|
|
17
|
+
this.tools.set(tool.name, tool);
|
|
18
|
+
}
|
|
19
|
+
/** Register multiple tools at once. */
|
|
20
|
+
registerAll(tools) {
|
|
21
|
+
for (const tool of tools) {
|
|
22
|
+
this.register(tool);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Get a tool by name. */
|
|
26
|
+
get(name) {
|
|
27
|
+
return this.tools.get(name);
|
|
28
|
+
}
|
|
29
|
+
/** Check if a tool is registered. */
|
|
30
|
+
has(name) {
|
|
31
|
+
return this.tools.has(name);
|
|
32
|
+
}
|
|
33
|
+
/** List all registered tool names. */
|
|
34
|
+
listNames() {
|
|
35
|
+
return [...this.tools.keys()];
|
|
36
|
+
}
|
|
37
|
+
/** Generate tool definitions for LLM consumption (core-compatible JSON Schema). */
|
|
38
|
+
toDefinitions() {
|
|
39
|
+
return [...this.tools.values()].map((t) => t.toDefinition());
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Execute a tool by name (internal use).
|
|
43
|
+
* @param name - Tool name
|
|
44
|
+
* @param args - Tool arguments (must include _toolCallId)
|
|
45
|
+
* @param workDir - Project working directory
|
|
46
|
+
*/
|
|
47
|
+
async execute(name, args, workDir) {
|
|
48
|
+
const tool = this.tools.get(name);
|
|
49
|
+
if (!tool) {
|
|
50
|
+
return {
|
|
51
|
+
tool_call_id: args._toolCallId ?? '',
|
|
52
|
+
name,
|
|
53
|
+
success: false,
|
|
54
|
+
output: `Error: Unknown tool: ${name}. Available tools: ${this.listNames().join(', ')}`,
|
|
55
|
+
durationMs: 0,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return tool.execute(args, workDir);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Execute a tool by name, passing an optional AbortSignal for interrupt support.
|
|
62
|
+
* @param name - Tool name
|
|
63
|
+
* @param args - Tool arguments
|
|
64
|
+
* @param workDir - Project working directory
|
|
65
|
+
* @param abortSignal - Optional AbortSignal for cancellation
|
|
66
|
+
*/
|
|
67
|
+
async executeWithSignal(name, args, workDir, abortSignal) {
|
|
68
|
+
const tool = this.tools.get(name);
|
|
69
|
+
if (!tool) {
|
|
70
|
+
return {
|
|
71
|
+
tool_call_id: args._toolCallId ?? '',
|
|
72
|
+
name,
|
|
73
|
+
success: false,
|
|
74
|
+
output: `Error: Unknown tool: ${name}. Available tools: ${this.listNames().join(', ')}`,
|
|
75
|
+
durationMs: 0,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return tool.execute(args, workDir, abortSignal);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create a ToolExecutor adapter that implements @yuaone/core's ToolExecutor interface.
|
|
82
|
+
*
|
|
83
|
+
* The adapter:
|
|
84
|
+
* - Provides tool definitions in JSON Schema format
|
|
85
|
+
* - Parses ToolCall.arguments (string → object if needed)
|
|
86
|
+
* - Injects _toolCallId into args
|
|
87
|
+
* - Measures execution duration
|
|
88
|
+
* - Returns core-compatible ToolResult
|
|
89
|
+
*
|
|
90
|
+
* @param workDir - Project working directory for tool execution
|
|
91
|
+
*/
|
|
92
|
+
toExecutor(workDir) {
|
|
93
|
+
const registry = this;
|
|
94
|
+
const definitions = this.toDefinitions();
|
|
95
|
+
return {
|
|
96
|
+
definitions,
|
|
97
|
+
async execute(call, abortSignal) {
|
|
98
|
+
// Parse arguments: core ToolCall.arguments can be string or object
|
|
99
|
+
let args;
|
|
100
|
+
if (typeof call.arguments === 'string') {
|
|
101
|
+
try {
|
|
102
|
+
args = JSON.parse(call.arguments);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return {
|
|
106
|
+
tool_call_id: call.id,
|
|
107
|
+
name: call.name,
|
|
108
|
+
output: `Error: Failed to parse tool arguments as JSON: ${call.arguments}`,
|
|
109
|
+
success: false,
|
|
110
|
+
durationMs: 0,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
args = { ...call.arguments };
|
|
116
|
+
}
|
|
117
|
+
// Inject toolCallId for BaseTool.execute
|
|
118
|
+
args._toolCallId = call.id;
|
|
119
|
+
const startTime = Date.now();
|
|
120
|
+
const result = await registry.executeWithSignal(call.name, args, workDir, abortSignal);
|
|
121
|
+
const durationMs = Date.now() - startTime;
|
|
122
|
+
// Ensure result has correct durationMs
|
|
123
|
+
return {
|
|
124
|
+
...result,
|
|
125
|
+
durationMs,
|
|
126
|
+
};
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/** Get the number of registered tools. */
|
|
131
|
+
get size() {
|
|
132
|
+
return this.tools.size;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// ─── Factory: create a registry with all built-in tools ──────────────
|
|
136
|
+
import { FileReadTool } from './file-read.js';
|
|
137
|
+
import { FileWriteTool } from './file-write.js';
|
|
138
|
+
import { FileEditTool } from './file-edit.js';
|
|
139
|
+
import { ShellExecTool } from './shell-exec.js';
|
|
140
|
+
import { GrepTool } from './grep.js';
|
|
141
|
+
import { GlobTool } from './glob.js';
|
|
142
|
+
import { GitOpsTool } from './git-ops.js';
|
|
143
|
+
import { TestRunTool } from './test-run.js';
|
|
144
|
+
import { CodeSearchTool } from './code-search.js';
|
|
145
|
+
import { SecurityScanTool } from './security-scan.js';
|
|
146
|
+
/**
|
|
147
|
+
* Create a ToolRegistry pre-loaded with all built-in YUAN tools.
|
|
148
|
+
*/
|
|
149
|
+
export function createDefaultRegistry() {
|
|
150
|
+
const registry = new ToolRegistry();
|
|
151
|
+
registry.registerAll([
|
|
152
|
+
new FileReadTool(),
|
|
153
|
+
new FileWriteTool(),
|
|
154
|
+
new FileEditTool(),
|
|
155
|
+
new ShellExecTool(),
|
|
156
|
+
new GrepTool(),
|
|
157
|
+
new GlobTool(),
|
|
158
|
+
new GitOpsTool(),
|
|
159
|
+
new TestRunTool(),
|
|
160
|
+
new CodeSearchTool(),
|
|
161
|
+
new SecurityScanTool(),
|
|
162
|
+
]);
|
|
163
|
+
return registry;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Create a ToolRegistry with all standard tools + design mode tools.
|
|
167
|
+
*
|
|
168
|
+
* Design tools (snapshot, screenshot, navigate, resize, inspect, scroll)
|
|
169
|
+
* are loaded via dynamic import to avoid circular dependencies.
|
|
170
|
+
*
|
|
171
|
+
* @param workDir - Project working directory (reserved for future use)
|
|
172
|
+
*/
|
|
173
|
+
export async function createDesignRegistry(workDir) {
|
|
174
|
+
const registry = createDefaultRegistry();
|
|
175
|
+
const { createDesignTools } = await import('./design-tools.js');
|
|
176
|
+
for (const tool of createDesignTools()) {
|
|
177
|
+
registry.register(tool);
|
|
178
|
+
}
|
|
179
|
+
return registry;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @yuaone/tools — Type definitions
|
|
3
|
+
*
|
|
4
|
+
* Core types (ToolDefinition, ToolCall, ToolResult, etc.) are re-exported from @yuaone/core.
|
|
5
|
+
* Tool-specific I/O types remain here.
|
|
6
|
+
*/
|
|
7
|
+
export type { ToolDefinition, ToolCall, ToolResult, ToolParameterSchema, } from '@yuaone/core';
|
|
8
|
+
export interface ParameterDef {
|
|
9
|
+
type: 'string' | 'number' | 'boolean' | 'array' | 'object';
|
|
10
|
+
description: string;
|
|
11
|
+
required?: boolean;
|
|
12
|
+
default?: unknown;
|
|
13
|
+
enum?: string[];
|
|
14
|
+
items?: ParameterDef;
|
|
15
|
+
}
|
|
16
|
+
export type RiskLevel = 'low' | 'medium' | 'high' | 'critical';
|
|
17
|
+
export interface FileReadInput {
|
|
18
|
+
path: string;
|
|
19
|
+
offset?: number;
|
|
20
|
+
limit?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface FileReadOutput {
|
|
23
|
+
content: string;
|
|
24
|
+
totalLines: number;
|
|
25
|
+
language: string;
|
|
26
|
+
truncated: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface FileWriteInput {
|
|
29
|
+
path: string;
|
|
30
|
+
content: string;
|
|
31
|
+
createDirectories?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface FileWriteOutput {
|
|
34
|
+
bytesWritten: number;
|
|
35
|
+
created: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface FileEditInput {
|
|
38
|
+
path: string;
|
|
39
|
+
old_string: string;
|
|
40
|
+
new_string: string;
|
|
41
|
+
replace_all?: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface FileEditOutput {
|
|
44
|
+
replacements: number;
|
|
45
|
+
preview: string;
|
|
46
|
+
}
|
|
47
|
+
export interface ShellExecInput {
|
|
48
|
+
executable: string;
|
|
49
|
+
args: string[];
|
|
50
|
+
cwd?: string;
|
|
51
|
+
timeout?: number;
|
|
52
|
+
env?: Record<string, string>;
|
|
53
|
+
}
|
|
54
|
+
export interface ShellExecOutput {
|
|
55
|
+
exitCode: number;
|
|
56
|
+
stdout: string;
|
|
57
|
+
stderr: string;
|
|
58
|
+
timedOut: boolean;
|
|
59
|
+
durationMs: number;
|
|
60
|
+
}
|
|
61
|
+
export interface GrepInput {
|
|
62
|
+
pattern: string;
|
|
63
|
+
path?: string;
|
|
64
|
+
glob?: string;
|
|
65
|
+
maxResults?: number;
|
|
66
|
+
context?: number;
|
|
67
|
+
}
|
|
68
|
+
export interface GrepMatch {
|
|
69
|
+
file: string;
|
|
70
|
+
line: number;
|
|
71
|
+
content: string;
|
|
72
|
+
contextBefore?: string[];
|
|
73
|
+
contextAfter?: string[];
|
|
74
|
+
}
|
|
75
|
+
export interface GrepOutput {
|
|
76
|
+
matches: GrepMatch[];
|
|
77
|
+
totalMatches: number;
|
|
78
|
+
truncated: boolean;
|
|
79
|
+
}
|
|
80
|
+
export interface GlobInput {
|
|
81
|
+
pattern: string;
|
|
82
|
+
path?: string;
|
|
83
|
+
maxResults?: number;
|
|
84
|
+
}
|
|
85
|
+
export interface GlobOutput {
|
|
86
|
+
files: string[];
|
|
87
|
+
totalMatches: number;
|
|
88
|
+
truncated: boolean;
|
|
89
|
+
}
|
|
90
|
+
export type GitOperation = 'status' | 'diff' | 'log' | 'add' | 'commit' | 'create_branch' | 'stash' | 'restore';
|
|
91
|
+
export interface GitOpsInput {
|
|
92
|
+
operation: GitOperation;
|
|
93
|
+
message?: string;
|
|
94
|
+
files?: string[];
|
|
95
|
+
count?: number;
|
|
96
|
+
branch?: string;
|
|
97
|
+
}
|
|
98
|
+
export interface GitOpsOutput {
|
|
99
|
+
result: string;
|
|
100
|
+
success: boolean;
|
|
101
|
+
}
|
|
102
|
+
export interface TestRunInput {
|
|
103
|
+
testPath?: string;
|
|
104
|
+
framework?: 'jest' | 'vitest' | 'pytest' | 'auto';
|
|
105
|
+
coverage?: boolean;
|
|
106
|
+
}
|
|
107
|
+
export interface TestRunOutput {
|
|
108
|
+
passed: number;
|
|
109
|
+
failed: number;
|
|
110
|
+
skipped: number;
|
|
111
|
+
coverage?: number;
|
|
112
|
+
failedTests: Array<{
|
|
113
|
+
name: string;
|
|
114
|
+
error: string;
|
|
115
|
+
}>;
|
|
116
|
+
stdout: string;
|
|
117
|
+
}
|
|
118
|
+
export type CodeSearchMode = 'symbol' | 'reference' | 'definition';
|
|
119
|
+
export interface CodeSearchInput {
|
|
120
|
+
query: string;
|
|
121
|
+
mode?: CodeSearchMode;
|
|
122
|
+
path?: string;
|
|
123
|
+
language?: string;
|
|
124
|
+
maxResults?: number;
|
|
125
|
+
}
|
|
126
|
+
export interface CodeSearchResult {
|
|
127
|
+
file: string;
|
|
128
|
+
line: number;
|
|
129
|
+
column: number;
|
|
130
|
+
content: string;
|
|
131
|
+
kind: string;
|
|
132
|
+
}
|
|
133
|
+
export interface CodeSearchOutput {
|
|
134
|
+
results: CodeSearchResult[];
|
|
135
|
+
totalCount: number;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @yuaone/tools — Common validation utilities
|
|
3
|
+
*
|
|
4
|
+
* Security-first validators for path traversal, shell injection,
|
|
5
|
+
* sensitive file detection, binary detection, and output truncation.
|
|
6
|
+
*
|
|
7
|
+
* Security rules SSOT: @yuaone/core/security.ts
|
|
8
|
+
* This module delegates to the SSOT and provides tool-specific wrappers.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Resolve a path and verify that it (and its symlink target) stays within the
|
|
12
|
+
* allowed project directory. Defends against symlink-based path traversal.
|
|
13
|
+
*
|
|
14
|
+
* @returns `{ valid, resolved, reason? }` — `resolved` is the real path if valid.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveAndValidatePath(filePath: string, projectRoot: string): {
|
|
17
|
+
valid: boolean;
|
|
18
|
+
resolved: string;
|
|
19
|
+
reason?: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Resolve and validate a path to ensure it stays within workDir.
|
|
23
|
+
* Returns the resolved absolute path.
|
|
24
|
+
* Throws on path traversal attempts (including symlink-based).
|
|
25
|
+
*/
|
|
26
|
+
export declare function validatePath(inputPath: string, workDir: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Validate that neither executable nor args contain shell metacharacters.
|
|
29
|
+
* Prevents shell injection when using execFile.
|
|
30
|
+
* Delegates to SHELL_META_PATTERN from @yuaone/core/security (SSOT).
|
|
31
|
+
*/
|
|
32
|
+
export declare function validateNoShellMeta(executable: string, args: string[]): void;
|
|
33
|
+
/**
|
|
34
|
+
* Check whether an executable + args combination is blocked.
|
|
35
|
+
* Throws with explanation if blocked.
|
|
36
|
+
* Delegates to @yuaone/core/security.validateCommand (SSOT).
|
|
37
|
+
*/
|
|
38
|
+
export declare function validateCommand(executable: string, args: string[]): void;
|
|
39
|
+
/**
|
|
40
|
+
* Check whether a file path matches known sensitive file patterns.
|
|
41
|
+
* Delegates to @yuaone/core/security.isSensitiveFile (SSOT).
|
|
42
|
+
*/
|
|
43
|
+
export declare function isSensitiveFile(filePath: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Check whether a file is likely binary by extension and (optionally) content sniffing.
|
|
46
|
+
*/
|
|
47
|
+
export declare function isBinaryFile(filePath: string): Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* Check whether a file is an image.
|
|
50
|
+
*/
|
|
51
|
+
export declare function isImageFile(filePath: string): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Truncate output to maxBytes. Uses head/tail strategy.
|
|
54
|
+
*/
|
|
55
|
+
export declare function truncateOutput(output: string, maxBytes?: number): string;
|
|
56
|
+
export declare function detectLanguage(filePath: string): string;
|
|
57
|
+
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAyCvD;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAyBvE;AAID;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAS5E;AAID;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAKxE;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAwBD;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBrE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGrD;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAA0B,GAAG,MAAM,CAY3F;AAqBD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQvD"}
|