@defai.digital/ax-cli 3.15.26 → 4.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.
- package/README.md +56 -21
- package/dist/commands/init.d.ts +3 -3
- package/dist/commands/init.js +175 -25
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/setup.d.ts +0 -1
- package/dist/commands/setup.js +7 -139
- package/dist/commands/setup.js.map +1 -1
- package/dist/llm/tools.d.ts +14 -0
- package/dist/llm/tools.js +17 -4
- package/dist/llm/tools.js.map +1 -1
- package/dist/planner/types.d.ts +4 -4
- package/dist/tools/definitions/ask-user.d.ts +8 -0
- package/dist/tools/definitions/ask-user.js +168 -0
- package/dist/tools/definitions/ask-user.js.map +1 -0
- package/dist/tools/definitions/ax-agent.d.ts +7 -0
- package/dist/tools/definitions/ax-agent.js +149 -0
- package/dist/tools/definitions/ax-agent.js.map +1 -0
- package/dist/tools/definitions/bash-output.d.ts +7 -0
- package/dist/tools/definitions/bash-output.js +78 -0
- package/dist/tools/definitions/bash-output.js.map +1 -0
- package/dist/tools/definitions/bash.d.ts +8 -0
- package/dist/tools/definitions/bash.js +152 -0
- package/dist/tools/definitions/bash.js.map +1 -0
- package/dist/tools/definitions/create-file.d.ts +7 -0
- package/dist/tools/definitions/create-file.js +129 -0
- package/dist/tools/definitions/create-file.js.map +1 -0
- package/dist/tools/definitions/design.d.ts +12 -0
- package/dist/tools/definitions/design.js +368 -0
- package/dist/tools/definitions/design.js.map +1 -0
- package/dist/tools/definitions/index.d.ts +48 -0
- package/dist/tools/definitions/index.js +96 -0
- package/dist/tools/definitions/index.js.map +1 -0
- package/dist/tools/definitions/multi-edit.d.ts +7 -0
- package/dist/tools/definitions/multi-edit.js +123 -0
- package/dist/tools/definitions/multi-edit.js.map +1 -0
- package/dist/tools/definitions/search.d.ts +7 -0
- package/dist/tools/definitions/search.js +159 -0
- package/dist/tools/definitions/search.js.map +1 -0
- package/dist/tools/definitions/str-replace-editor.d.ts +7 -0
- package/dist/tools/definitions/str-replace-editor.js +145 -0
- package/dist/tools/definitions/str-replace-editor.js.map +1 -0
- package/dist/tools/definitions/todo.d.ts +8 -0
- package/dist/tools/definitions/todo.js +261 -0
- package/dist/tools/definitions/todo.js.map +1 -0
- package/dist/tools/definitions/view-file.d.ts +7 -0
- package/dist/tools/definitions/view-file.js +111 -0
- package/dist/tools/definitions/view-file.js.map +1 -0
- package/dist/tools/format-generators.d.ts +62 -0
- package/dist/tools/format-generators.js +291 -0
- package/dist/tools/format-generators.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/result-enhancer.d.ts +64 -0
- package/dist/tools/result-enhancer.js +215 -0
- package/dist/tools/result-enhancer.js.map +1 -0
- package/dist/tools/types.d.ts +249 -0
- package/dist/tools/types.js +11 -0
- package/dist/tools/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View File Tool Definition - Claude Code Quality
|
|
3
|
+
*
|
|
4
|
+
* Read and display file contents or directory listings.
|
|
5
|
+
*/
|
|
6
|
+
export const viewFileTool = {
|
|
7
|
+
name: 'view_file',
|
|
8
|
+
displayName: 'View File',
|
|
9
|
+
description: `Read and display file contents or directory listings.
|
|
10
|
+
|
|
11
|
+
This tool reads files from the local filesystem and displays their contents with line numbers. It can also list directory contents when given a directory path.
|
|
12
|
+
|
|
13
|
+
For files:
|
|
14
|
+
- Displays content with line numbers (1-indexed)
|
|
15
|
+
- Supports partial reading with start_line/end_line
|
|
16
|
+
- Handles text files, images, PDFs, and Jupyter notebooks
|
|
17
|
+
- Lines over 2000 characters are truncated
|
|
18
|
+
|
|
19
|
+
For directories:
|
|
20
|
+
- Lists files and subdirectories
|
|
21
|
+
- Shows file types and sizes
|
|
22
|
+
- Respects .gitignore patterns
|
|
23
|
+
|
|
24
|
+
IMPORTANT: Always use this tool to read a file BEFORE attempting to edit it. This ensures you have the exact current content and correct indentation for str_replace_editor.`,
|
|
25
|
+
parameters: {
|
|
26
|
+
type: 'object',
|
|
27
|
+
properties: {
|
|
28
|
+
path: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
description: 'Absolute or relative path to file or directory. Use absolute paths for reliability.',
|
|
31
|
+
format: 'file-path',
|
|
32
|
+
examples: ['/project/src/index.ts', 'package.json', './src/'],
|
|
33
|
+
},
|
|
34
|
+
start_line: {
|
|
35
|
+
type: 'number',
|
|
36
|
+
description: 'Starting line number for partial file view (1-indexed). Only for files.',
|
|
37
|
+
constraints: ['Must be >= 1', 'Must be <= end_line if end_line is specified'],
|
|
38
|
+
},
|
|
39
|
+
end_line: {
|
|
40
|
+
type: 'number',
|
|
41
|
+
description: 'Ending line number for partial file view (inclusive). Only for files.',
|
|
42
|
+
constraints: ['Must be >= start_line'],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
required: ['path'],
|
|
46
|
+
},
|
|
47
|
+
usageNotes: [
|
|
48
|
+
'ALWAYS read a file before attempting to edit it with str_replace_editor',
|
|
49
|
+
'Use absolute paths for reliability across different working directories',
|
|
50
|
+
'For large files, use start_line/end_line to read specific sections',
|
|
51
|
+
'When viewing a directory, returns a listing instead of contents',
|
|
52
|
+
'Supports various file types:',
|
|
53
|
+
' - Text files: displayed with line numbers',
|
|
54
|
+
' - Images (PNG, JPG, etc.): displayed visually',
|
|
55
|
+
' - PDFs: extracted text and visual content',
|
|
56
|
+
' - Jupyter notebooks (.ipynb): cells with outputs',
|
|
57
|
+
' - Binary files: shows file type information',
|
|
58
|
+
'Line numbers in output start at 1, matching editor conventions',
|
|
59
|
+
'Empty files return a system reminder warning',
|
|
60
|
+
'When editing code from view_file output, copy the exact content after the line number prefix',
|
|
61
|
+
],
|
|
62
|
+
constraints: [
|
|
63
|
+
'Cannot modify files (use str_replace_editor or create_file)',
|
|
64
|
+
'Do not view potentially sensitive files unless necessary:',
|
|
65
|
+
' - .env files with secrets',
|
|
66
|
+
' - credential files',
|
|
67
|
+
' - private keys',
|
|
68
|
+
'Lines over 2000 characters are truncated',
|
|
69
|
+
'Maximum default read is 2000 lines from start',
|
|
70
|
+
],
|
|
71
|
+
antiPatterns: [
|
|
72
|
+
'Using bash cat/head/tail instead of view_file',
|
|
73
|
+
'Modifying files (use str_replace_editor instead)',
|
|
74
|
+
'Creating files (use create_file instead)',
|
|
75
|
+
'Viewing binary files expecting text content',
|
|
76
|
+
'Editing without reading first',
|
|
77
|
+
],
|
|
78
|
+
examples: [
|
|
79
|
+
{
|
|
80
|
+
description: 'Read entire file',
|
|
81
|
+
scenario: 'Understand a source file before editing',
|
|
82
|
+
input: { path: '/project/src/utils.ts' },
|
|
83
|
+
expectedBehavior: 'Returns file contents with line numbers',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
description: 'Read specific lines',
|
|
87
|
+
scenario: 'Focus on a particular function or section',
|
|
88
|
+
input: { path: '/project/src/utils.ts', start_line: 50, end_line: 75 },
|
|
89
|
+
expectedBehavior: 'Returns lines 50-75 with line numbers',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
description: 'List directory contents',
|
|
93
|
+
scenario: 'Explore project structure',
|
|
94
|
+
input: { path: '/project/src/' },
|
|
95
|
+
expectedBehavior: 'Returns listing of files and directories',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
description: 'Read package.json',
|
|
99
|
+
scenario: 'Check project dependencies and scripts',
|
|
100
|
+
input: { path: 'package.json' },
|
|
101
|
+
expectedBehavior: 'Returns package.json contents',
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
tokenCost: 500,
|
|
105
|
+
safetyLevel: 'safe',
|
|
106
|
+
requiresConfirmation: false,
|
|
107
|
+
categories: ['file-operations'],
|
|
108
|
+
alternatives: [],
|
|
109
|
+
relatedTools: ['str_replace_editor', 'create_file', 'search'],
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=view-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-file.js","sourceRoot":"","sources":["../../../src/tools/definitions/view-file.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,WAAW;IAExB,WAAW,EAAE;;;;;;;;;;;;;;;6KAe8J;IAE3K,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qFAAqF;gBACvF,MAAM,EAAE,WAAW;gBACnB,QAAQ,EAAE,CAAC,uBAAuB,EAAE,cAAc,EAAE,QAAQ,CAAC;aAC9D;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,yEAAyE;gBAC3E,WAAW,EAAE,CAAC,cAAc,EAAE,8CAA8C,CAAC;aAC9E;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,uEAAuE;gBACzE,WAAW,EAAE,CAAC,uBAAuB,CAAC;aACvC;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IAED,UAAU,EAAE;QACV,yEAAyE;QACzE,yEAAyE;QACzE,oEAAoE;QACpE,iEAAiE;QACjE,8BAA8B;QAC9B,6CAA6C;QAC7C,iDAAiD;QACjD,6CAA6C;QAC7C,oDAAoD;QACpD,+CAA+C;QAC/C,gEAAgE;QAChE,8CAA8C;QAC9C,8FAA8F;KAC/F;IAED,WAAW,EAAE;QACX,6DAA6D;QAC7D,2DAA2D;QAC3D,6BAA6B;QAC7B,sBAAsB;QACtB,kBAAkB;QAClB,0CAA0C;QAC1C,+CAA+C;KAChD;IAED,YAAY,EAAE;QACZ,+CAA+C;QAC/C,kDAAkD;QAClD,0CAA0C;QAC1C,6CAA6C;QAC7C,+BAA+B;KAChC;IAED,QAAQ,EAAE;QACR;YACE,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,yCAAyC;YACnD,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE;YACxC,gBAAgB,EAAE,yCAAyC;SAC5D;QACD;YACE,WAAW,EAAE,qBAAqB;YAClC,QAAQ,EAAE,2CAA2C;YACrD,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YACtE,gBAAgB,EAAE,uCAAuC;SAC1D;QACD;YACE,WAAW,EAAE,yBAAyB;YACtC,QAAQ,EAAE,2BAA2B;YACrC,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;YAChC,gBAAgB,EAAE,0CAA0C;SAC7D;QACD;YACE,WAAW,EAAE,mBAAmB;YAChC,QAAQ,EAAE,wCAAwC;YAClD,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;YAC/B,gBAAgB,EAAE,+BAA+B;SAClD;KACF;IAED,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,MAAM;IACnB,oBAAoB,EAAE,KAAK;IAE3B,UAAU,EAAE,CAAC,iBAAiB,CAAC;IAC/B,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,CAAC,oBAAoB,EAAE,aAAa,EAAE,QAAQ,CAAC;CAC9D,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format Generators for Tool Definitions
|
|
3
|
+
*
|
|
4
|
+
* Converts rich ToolDefinition objects to various output formats:
|
|
5
|
+
* - OpenAI function calling format
|
|
6
|
+
* - Anthropic tool format
|
|
7
|
+
* - System prompt sections
|
|
8
|
+
*
|
|
9
|
+
* These are DERIVED formats - the ToolDefinition is the source of truth.
|
|
10
|
+
*/
|
|
11
|
+
import type { ToolDefinition, AnthropicTool } from './types.js';
|
|
12
|
+
import type { LLMTool } from '../llm/client.js';
|
|
13
|
+
/**
|
|
14
|
+
* Generate a compact description suitable for API calls
|
|
15
|
+
*
|
|
16
|
+
* The compact description is the first paragraph plus key constraints
|
|
17
|
+
* for dangerous tools.
|
|
18
|
+
*/
|
|
19
|
+
export declare function generateCompactDescription(tool: ToolDefinition): string;
|
|
20
|
+
/**
|
|
21
|
+
* Convert rich ToolDefinition to OpenAI function calling format
|
|
22
|
+
*
|
|
23
|
+
* This is a DERIVED format for API calls. The full tool details
|
|
24
|
+
* should be provided in the system prompt.
|
|
25
|
+
*/
|
|
26
|
+
export declare function toOpenAIFormat(tool: ToolDefinition): LLMTool;
|
|
27
|
+
/**
|
|
28
|
+
* Convert rich ToolDefinition to Anthropic tool format
|
|
29
|
+
*/
|
|
30
|
+
export declare function toAnthropicFormat(tool: ToolDefinition): AnthropicTool;
|
|
31
|
+
/**
|
|
32
|
+
* Generate a full system prompt section for a tool
|
|
33
|
+
*
|
|
34
|
+
* This includes all the rich metadata: description, parameters,
|
|
35
|
+
* usage notes, constraints, anti-patterns, and examples.
|
|
36
|
+
*/
|
|
37
|
+
export declare function toSystemPromptSection(tool: ToolDefinition): string;
|
|
38
|
+
/**
|
|
39
|
+
* Generate the complete tool instructions section for system prompt
|
|
40
|
+
*
|
|
41
|
+
* @param tools - Array of tool definitions
|
|
42
|
+
* @returns Formatted markdown string with all tool documentation
|
|
43
|
+
*/
|
|
44
|
+
export declare function generateToolInstructions(tools: ToolDefinition[]): string;
|
|
45
|
+
/**
|
|
46
|
+
* Calculate total token cost for a set of tools
|
|
47
|
+
*
|
|
48
|
+
* Useful for budget planning and deciding which tools to include
|
|
49
|
+
*/
|
|
50
|
+
export declare function calculateTotalTokenCost(tools: ToolDefinition[]): number;
|
|
51
|
+
/**
|
|
52
|
+
* Filter tools by category
|
|
53
|
+
*/
|
|
54
|
+
export declare function filterByCategory(tools: ToolDefinition[], categories: string[]): ToolDefinition[];
|
|
55
|
+
/**
|
|
56
|
+
* Filter tools by safety level
|
|
57
|
+
*/
|
|
58
|
+
export declare function filterBySafetyLevel(tools: ToolDefinition[], levels: Array<'safe' | 'moderate' | 'dangerous'>): ToolDefinition[];
|
|
59
|
+
/**
|
|
60
|
+
* Get tools that require confirmation
|
|
61
|
+
*/
|
|
62
|
+
export declare function getToolsRequiringConfirmation(tools: ToolDefinition[]): ToolDefinition[];
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format Generators for Tool Definitions
|
|
3
|
+
*
|
|
4
|
+
* Converts rich ToolDefinition objects to various output formats:
|
|
5
|
+
* - OpenAI function calling format
|
|
6
|
+
* - Anthropic tool format
|
|
7
|
+
* - System prompt sections
|
|
8
|
+
*
|
|
9
|
+
* These are DERIVED formats - the ToolDefinition is the source of truth.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Convert ParameterDefinition to JSON Schema format for OpenAI
|
|
13
|
+
*/
|
|
14
|
+
function toJSONSchemaProperty(param) {
|
|
15
|
+
// Build the base schema
|
|
16
|
+
const baseSchema = {
|
|
17
|
+
type: param.type,
|
|
18
|
+
description: param.description,
|
|
19
|
+
};
|
|
20
|
+
if (param.default !== undefined) {
|
|
21
|
+
baseSchema.default = param.default;
|
|
22
|
+
}
|
|
23
|
+
if (param.enum) {
|
|
24
|
+
baseSchema.enum = param.enum;
|
|
25
|
+
}
|
|
26
|
+
if (param.items && param.type === 'array') {
|
|
27
|
+
const items = param.items;
|
|
28
|
+
if (items.type === 'object' && items.properties) {
|
|
29
|
+
baseSchema.items = {
|
|
30
|
+
type: 'object',
|
|
31
|
+
properties: Object.fromEntries(Object.entries(items.properties).map(([key, val]) => [
|
|
32
|
+
key,
|
|
33
|
+
toJSONSchemaProperty(val),
|
|
34
|
+
])),
|
|
35
|
+
required: items.required || [],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
baseSchema.items = { type: items.type };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return baseSchema;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generate a compact description suitable for API calls
|
|
46
|
+
*
|
|
47
|
+
* The compact description is the first paragraph plus key constraints
|
|
48
|
+
* for dangerous tools.
|
|
49
|
+
*/
|
|
50
|
+
export function generateCompactDescription(tool) {
|
|
51
|
+
// Get first paragraph (up to first double newline or 500 chars)
|
|
52
|
+
const firstParagraph = tool.description.split('\n\n')[0].slice(0, 500);
|
|
53
|
+
// For dangerous tools, add the most important constraint
|
|
54
|
+
if (tool.safetyLevel === 'dangerous' && tool.constraints.length > 0) {
|
|
55
|
+
return `${firstParagraph} IMPORTANT: ${tool.constraints[0]}`;
|
|
56
|
+
}
|
|
57
|
+
return firstParagraph;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Convert rich ToolDefinition to OpenAI function calling format
|
|
61
|
+
*
|
|
62
|
+
* This is a DERIVED format for API calls. The full tool details
|
|
63
|
+
* should be provided in the system prompt.
|
|
64
|
+
*/
|
|
65
|
+
export function toOpenAIFormat(tool) {
|
|
66
|
+
const properties = {};
|
|
67
|
+
for (const [name, param] of Object.entries(tool.parameters.properties)) {
|
|
68
|
+
properties[name] = toJSONSchemaProperty(param);
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
type: 'function',
|
|
72
|
+
function: {
|
|
73
|
+
name: tool.name,
|
|
74
|
+
description: generateCompactDescription(tool),
|
|
75
|
+
parameters: {
|
|
76
|
+
type: 'object',
|
|
77
|
+
properties,
|
|
78
|
+
required: tool.parameters.required,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Convert rich ToolDefinition to Anthropic tool format
|
|
85
|
+
*/
|
|
86
|
+
export function toAnthropicFormat(tool) {
|
|
87
|
+
const properties = {};
|
|
88
|
+
for (const [name, param] of Object.entries(tool.parameters.properties)) {
|
|
89
|
+
properties[name] = toJSONSchemaProperty(param);
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
name: tool.name,
|
|
93
|
+
description: generateCompactDescription(tool),
|
|
94
|
+
input_schema: {
|
|
95
|
+
type: 'object',
|
|
96
|
+
properties,
|
|
97
|
+
required: tool.parameters.required,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Generate a full system prompt section for a tool
|
|
103
|
+
*
|
|
104
|
+
* This includes all the rich metadata: description, parameters,
|
|
105
|
+
* usage notes, constraints, anti-patterns, and examples.
|
|
106
|
+
*/
|
|
107
|
+
export function toSystemPromptSection(tool) {
|
|
108
|
+
const sections = [];
|
|
109
|
+
// Header
|
|
110
|
+
sections.push(`## ${tool.displayName}`);
|
|
111
|
+
sections.push('');
|
|
112
|
+
sections.push(tool.description);
|
|
113
|
+
sections.push('');
|
|
114
|
+
// Parameters
|
|
115
|
+
sections.push('### Parameters');
|
|
116
|
+
sections.push('');
|
|
117
|
+
for (const [name, param] of Object.entries(tool.parameters.properties)) {
|
|
118
|
+
const required = tool.parameters.required.includes(name) ? '(required)' : '(optional)';
|
|
119
|
+
sections.push(`- \`${name}\` ${required}: ${param.description}`);
|
|
120
|
+
if (param.default !== undefined) {
|
|
121
|
+
sections.push(` - Default: \`${JSON.stringify(param.default)}\``);
|
|
122
|
+
}
|
|
123
|
+
if (param.enum) {
|
|
124
|
+
sections.push(` - Options: ${param.enum.map(e => `\`${e}\``).join(', ')}`);
|
|
125
|
+
}
|
|
126
|
+
if (param.examples && param.examples.length > 0) {
|
|
127
|
+
sections.push(` - Examples: ${param.examples.map(e => `\`${JSON.stringify(e)}\``).join(', ')}`);
|
|
128
|
+
}
|
|
129
|
+
if (param.constraints && param.constraints.length > 0) {
|
|
130
|
+
param.constraints.forEach(c => sections.push(` - ${c}`));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
sections.push('');
|
|
134
|
+
// Usage Notes
|
|
135
|
+
if (tool.usageNotes.length > 0) {
|
|
136
|
+
sections.push('### Usage Notes');
|
|
137
|
+
sections.push('');
|
|
138
|
+
tool.usageNotes.forEach(note => sections.push(`- ${note}`));
|
|
139
|
+
sections.push('');
|
|
140
|
+
}
|
|
141
|
+
// Constraints
|
|
142
|
+
if (tool.constraints.length > 0) {
|
|
143
|
+
sections.push('### Constraints');
|
|
144
|
+
sections.push('');
|
|
145
|
+
tool.constraints.forEach(c => sections.push(`- ${c}`));
|
|
146
|
+
sections.push('');
|
|
147
|
+
}
|
|
148
|
+
// Anti-patterns (when NOT to use)
|
|
149
|
+
if (tool.antiPatterns && tool.antiPatterns.length > 0) {
|
|
150
|
+
sections.push('### Do NOT Use When');
|
|
151
|
+
sections.push('');
|
|
152
|
+
tool.antiPatterns.forEach(ap => sections.push(`- ${ap}`));
|
|
153
|
+
sections.push('');
|
|
154
|
+
}
|
|
155
|
+
// Examples
|
|
156
|
+
if (tool.examples.length > 0) {
|
|
157
|
+
sections.push('### Examples');
|
|
158
|
+
sections.push('');
|
|
159
|
+
tool.examples.forEach(ex => {
|
|
160
|
+
sections.push(`**${ex.description}**`);
|
|
161
|
+
sections.push(`- Scenario: ${ex.scenario}`);
|
|
162
|
+
sections.push(`- Input: \`${JSON.stringify(ex.input)}\``);
|
|
163
|
+
sections.push(`- Expected: ${ex.expectedBehavior}`);
|
|
164
|
+
if (ex.notes) {
|
|
165
|
+
sections.push(`- Note: ${ex.notes}`);
|
|
166
|
+
}
|
|
167
|
+
sections.push('');
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
// Related tools
|
|
171
|
+
if (tool.relatedTools && tool.relatedTools.length > 0) {
|
|
172
|
+
sections.push(`**Related tools:** ${tool.relatedTools.join(', ')}`);
|
|
173
|
+
sections.push('');
|
|
174
|
+
}
|
|
175
|
+
// Alternatives
|
|
176
|
+
if (tool.alternatives && tool.alternatives.length > 0) {
|
|
177
|
+
sections.push(`**Alternatives:** ${tool.alternatives.join(', ')}`);
|
|
178
|
+
sections.push('');
|
|
179
|
+
}
|
|
180
|
+
return sections.join('\n');
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Generate the complete tool instructions section for system prompt
|
|
184
|
+
*
|
|
185
|
+
* @param tools - Array of tool definitions
|
|
186
|
+
* @returns Formatted markdown string with all tool documentation
|
|
187
|
+
*/
|
|
188
|
+
export function generateToolInstructions(tools) {
|
|
189
|
+
const sections = [];
|
|
190
|
+
sections.push('# Available Tools');
|
|
191
|
+
sections.push('');
|
|
192
|
+
sections.push('The following tools are available. Read each description carefully before using.');
|
|
193
|
+
sections.push('');
|
|
194
|
+
// Group tools by category
|
|
195
|
+
const byCategory = new Map();
|
|
196
|
+
for (const tool of tools) {
|
|
197
|
+
for (const category of tool.categories) {
|
|
198
|
+
if (!byCategory.has(category)) {
|
|
199
|
+
byCategory.set(category, []);
|
|
200
|
+
}
|
|
201
|
+
const categoryTools = byCategory.get(category);
|
|
202
|
+
if (categoryTools) {
|
|
203
|
+
categoryTools.push(tool);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Generate sections by category
|
|
208
|
+
const categoryOrder = [
|
|
209
|
+
'file-operations',
|
|
210
|
+
'command-execution',
|
|
211
|
+
'search',
|
|
212
|
+
'task-management',
|
|
213
|
+
'user-interaction',
|
|
214
|
+
'agent-delegation',
|
|
215
|
+
'design',
|
|
216
|
+
'web',
|
|
217
|
+
];
|
|
218
|
+
for (const category of categoryOrder) {
|
|
219
|
+
const categoryTools = byCategory.get(category);
|
|
220
|
+
if (categoryTools && categoryTools.length > 0) {
|
|
221
|
+
sections.push(`---`);
|
|
222
|
+
sections.push('');
|
|
223
|
+
sections.push(`# ${formatCategoryName(category)}`);
|
|
224
|
+
sections.push('');
|
|
225
|
+
// Deduplicate tools (a tool might be in multiple categories)
|
|
226
|
+
const seen = new Set();
|
|
227
|
+
for (const tool of categoryTools) {
|
|
228
|
+
if (!seen.has(tool.name)) {
|
|
229
|
+
seen.add(tool.name);
|
|
230
|
+
sections.push(toSystemPromptSection(tool));
|
|
231
|
+
sections.push('---');
|
|
232
|
+
sections.push('');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Add general tool usage principles
|
|
238
|
+
sections.push('# Tool Usage Principles');
|
|
239
|
+
sections.push('');
|
|
240
|
+
sections.push('1. **Use specialized tools over general tools** - Use view_file instead of bash cat');
|
|
241
|
+
sections.push('2. **Read before editing** - Always view_file before str_replace_editor');
|
|
242
|
+
sections.push('3. **Parallel execution** - Make independent tool calls in parallel');
|
|
243
|
+
sections.push('4. **Sequential for dependencies** - Chain dependent calls with proper ordering');
|
|
244
|
+
sections.push('5. **Never guess parameters** - Ask if unsure about required values');
|
|
245
|
+
sections.push('6. **Match exact content** - For str_replace_editor, copy exact text from file');
|
|
246
|
+
sections.push('');
|
|
247
|
+
return sections.join('\n');
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Format category name for display
|
|
251
|
+
*/
|
|
252
|
+
function formatCategoryName(category) {
|
|
253
|
+
const names = {
|
|
254
|
+
'file-operations': 'File Operations',
|
|
255
|
+
'command-execution': 'Command Execution',
|
|
256
|
+
'search': 'Search',
|
|
257
|
+
'task-management': 'Task Management',
|
|
258
|
+
'user-interaction': 'User Interaction',
|
|
259
|
+
'agent-delegation': 'Agent Delegation',
|
|
260
|
+
'design': 'Design Tools',
|
|
261
|
+
'web': 'Web Tools',
|
|
262
|
+
};
|
|
263
|
+
return names[category] || category;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Calculate total token cost for a set of tools
|
|
267
|
+
*
|
|
268
|
+
* Useful for budget planning and deciding which tools to include
|
|
269
|
+
*/
|
|
270
|
+
export function calculateTotalTokenCost(tools) {
|
|
271
|
+
return tools.reduce((sum, tool) => sum + tool.tokenCost, 0);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Filter tools by category
|
|
275
|
+
*/
|
|
276
|
+
export function filterByCategory(tools, categories) {
|
|
277
|
+
return tools.filter(tool => tool.categories.some(c => categories.includes(c)));
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Filter tools by safety level
|
|
281
|
+
*/
|
|
282
|
+
export function filterBySafetyLevel(tools, levels) {
|
|
283
|
+
return tools.filter(tool => levels.includes(tool.safetyLevel));
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Get tools that require confirmation
|
|
287
|
+
*/
|
|
288
|
+
export function getToolsRequiringConfirmation(tools) {
|
|
289
|
+
return tools.filter(tool => tool.requiresConfirmation);
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=format-generators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-generators.js","sourceRoot":"","sources":["../../src/tools/format-generators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH;;GAEG;AACH,SAAS,oBAAoB,CAAC,KAA0B;IACtD,wBAAwB;IACxB,MAAM,UAAU,GAAkE;QAChF,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;IAEF,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACrC,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAgG,CAAC;QACrH,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YAChD,UAAU,CAAC,KAAK,GAAG;gBACjB,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,MAAM,CAAC,WAAW,CAC5B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;oBACnD,GAAG;oBACH,oBAAoB,CAAC,GAAG,CAAC;iBAC1B,CAAC,CACH;gBACD,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;aAC/B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,UAA6B,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAoB;IAC7D,gEAAgE;IAChE,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEvE,yDAAyD;IACzD,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,OAAO,GAAG,cAAc,eAAe,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAoB;IACjD,MAAM,UAAU,GAAoC,EAAE,CAAC;IAEvD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACvE,UAAU,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,0BAA0B,CAAC,IAAI,CAAC;YAC7C,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU;gBACV,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ;aACnC;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAoB;IACpD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAE/C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACvE,UAAU,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,0BAA0B,CAAC,IAAI,CAAC;QAC7C,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU;YACV,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ;SACnC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAoB;IACxD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,SAAS;IACT,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,aAAa;IACb,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;QACvF,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,QAAQ,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACjE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,QAAQ,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,cAAc;IACd,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,cAAc;IACd,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,kCAAkC;IAClC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,WAAW;IACX,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACzB,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,IAAI,CAAC,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1D,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACpD,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,eAAe;IACf,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAuB;IAC9D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAClG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,0BAA0B;IAC1B,MAAM,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC/B,CAAC;YACD,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,aAAa,EAAE,CAAC;gBAClB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,MAAM,aAAa,GAAa;QAC9B,iBAAiB;QACjB,mBAAmB;QACnB,QAAQ;QACR,iBAAiB;QACjB,kBAAkB;QAClB,kBAAkB;QAClB,QAAQ;QACR,KAAK;KACN,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAElB,6DAA6D;YAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpB,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC3C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;IACrG,QAAQ,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IACzF,QAAQ,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IACrF,QAAQ,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IACjG,QAAQ,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IACrF,QAAQ,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;IAChG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAA2B;QACpC,iBAAiB,EAAE,iBAAiB;QACpC,mBAAmB,EAAE,mBAAmB;QACxC,QAAQ,EAAE,QAAQ;QAClB,iBAAiB,EAAE,iBAAiB;QACpC,kBAAkB,EAAE,kBAAkB;QACtC,kBAAkB,EAAE,kBAAkB;QACtC,QAAQ,EAAE,cAAc;QACxB,KAAK,EAAE,WAAW;KACnB,CAAC;IACF,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAuB;IAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAuB,EACvB,UAAoB;IAEpB,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAClD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAuB,EACvB,MAAgD;IAEhD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAuB;IACnE,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACzD,CAAC"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -3,3 +3,7 @@ export { TextEditorTool } from "./text-editor.js";
|
|
|
3
3
|
export { TodoTool } from "./todo-tool.js";
|
|
4
4
|
export { ConfirmationTool } from "./confirmation-tool.js";
|
|
5
5
|
export { SearchTool } from "./search.js";
|
|
6
|
+
export * from "./types.js";
|
|
7
|
+
export * from "./format-generators.js";
|
|
8
|
+
export * from "./result-enhancer.js";
|
|
9
|
+
export { TOOL_DEFINITIONS, getToolDefinition, getToolsByCategory } from "./definitions/index.js";
|
package/dist/tools/index.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
// Tool implementations
|
|
1
2
|
export { BashTool } from "./bash.js";
|
|
2
3
|
export { TextEditorTool } from "./text-editor.js";
|
|
3
4
|
export { TodoTool } from "./todo-tool.js";
|
|
4
5
|
export { ConfirmationTool } from "./confirmation-tool.js";
|
|
5
6
|
export { SearchTool } from "./search.js";
|
|
7
|
+
// Tool System v3.0 - Rich definitions and utilities
|
|
8
|
+
export * from "./types.js";
|
|
9
|
+
export * from "./format-generators.js";
|
|
10
|
+
export * from "./result-enhancer.js";
|
|
11
|
+
export { TOOL_DEFINITIONS, getToolDefinition, getToolsByCategory } from "./definitions/index.js";
|
|
6
12
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,oDAAoD;AACpD,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Result Enhancer
|
|
3
|
+
*
|
|
4
|
+
* Enhances tool results with embedded instructions, security reminders,
|
|
5
|
+
* and contextual guidance based on the tool definition and result content.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolDefinition, EnhancedToolResult, ResultEnhancerConfig } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Result Enhancer Class
|
|
10
|
+
*
|
|
11
|
+
* Enhances tool results with:
|
|
12
|
+
* - Security reminders for potentially dangerous content
|
|
13
|
+
* - Failure guidance based on tool constraints
|
|
14
|
+
* - Format reminders for large outputs
|
|
15
|
+
*/
|
|
16
|
+
export declare class ToolResultEnhancer {
|
|
17
|
+
private config;
|
|
18
|
+
constructor(config?: Partial<ResultEnhancerConfig>);
|
|
19
|
+
/**
|
|
20
|
+
* Enhance a tool result with embedded instructions
|
|
21
|
+
*
|
|
22
|
+
* @param toolName - Name of the tool that was executed
|
|
23
|
+
* @param result - Raw result from tool execution
|
|
24
|
+
* @param success - Whether the tool executed successfully
|
|
25
|
+
* @param definition - Tool definition with metadata
|
|
26
|
+
* @returns Enhanced result with reminders
|
|
27
|
+
*/
|
|
28
|
+
enhance(toolName: string, result: string, success: boolean, definition?: ToolDefinition): EnhancedToolResult;
|
|
29
|
+
/**
|
|
30
|
+
* Get security reminders based on content patterns
|
|
31
|
+
*/
|
|
32
|
+
private getSecurityReminders;
|
|
33
|
+
/**
|
|
34
|
+
* Get failure guidance from tool constraints
|
|
35
|
+
*/
|
|
36
|
+
private getFailureGuidance;
|
|
37
|
+
/**
|
|
38
|
+
* Get format reminders for output handling
|
|
39
|
+
*/
|
|
40
|
+
private getFormatReminders;
|
|
41
|
+
/**
|
|
42
|
+
* Get tool-specific reminders based on tool and context
|
|
43
|
+
*/
|
|
44
|
+
private getToolSpecificReminders;
|
|
45
|
+
/**
|
|
46
|
+
* Update configuration
|
|
47
|
+
*/
|
|
48
|
+
setConfig(config: Partial<ResultEnhancerConfig>): void;
|
|
49
|
+
/**
|
|
50
|
+
* Get current configuration
|
|
51
|
+
*/
|
|
52
|
+
getConfig(): ResultEnhancerConfig;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a default result enhancer instance
|
|
56
|
+
*/
|
|
57
|
+
export declare function createResultEnhancer(config?: Partial<ResultEnhancerConfig>): ToolResultEnhancer;
|
|
58
|
+
/**
|
|
59
|
+
* Format reminders for inclusion in tool result message
|
|
60
|
+
*
|
|
61
|
+
* @param reminders - Array of reminder strings
|
|
62
|
+
* @returns Formatted string to append to result
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatReminders(reminders: string[]): string;
|