@phuetz/code-buddy 0.1.25 → 0.1.26
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 +1049 -741
- package/dist/agent/codebuddy-agent.d.ts +5 -0
- package/dist/agent/codebuddy-agent.js +46 -1
- package/dist/agent/codebuddy-agent.js.map +1 -1
- package/dist/agent/execution/agent-executor.d.ts +12 -0
- package/dist/agent/execution/agent-executor.js +147 -6
- package/dist/agent/execution/agent-executor.js.map +1 -1
- package/dist/agent/lessons-tracker.d.ts +50 -0
- package/dist/agent/lessons-tracker.js +234 -0
- package/dist/agent/lessons-tracker.js.map +1 -0
- package/dist/agent/message-queue.d.ts +39 -2
- package/dist/agent/message-queue.js +67 -2
- package/dist/agent/message-queue.js.map +1 -1
- package/dist/agent/middleware/index.d.ts +1 -0
- package/dist/agent/middleware/index.js +1 -0
- package/dist/agent/middleware/index.js.map +1 -1
- package/dist/agent/middleware/workflow-guard.d.ts +21 -0
- package/dist/agent/middleware/workflow-guard.js +94 -0
- package/dist/agent/middleware/workflow-guard.js.map +1 -0
- package/dist/agent/repo-profiler.d.ts +61 -0
- package/dist/agent/repo-profiler.js +295 -0
- package/dist/agent/repo-profiler.js.map +1 -0
- package/dist/agent/response-constraint.d.ts +61 -0
- package/dist/agent/response-constraint.js +91 -0
- package/dist/agent/response-constraint.js.map +1 -0
- package/dist/agent/todo-tracker.d.ts +67 -0
- package/dist/agent/todo-tracker.js +245 -0
- package/dist/agent/todo-tracker.js.map +1 -0
- package/dist/agent/tool-handler.d.ts +11 -0
- package/dist/agent/tool-handler.js +79 -1
- package/dist/agent/tool-handler.js.map +1 -1
- package/dist/agent/types.d.ts +20 -2
- package/dist/agent/wide-research.d.ts +93 -0
- package/dist/agent/wide-research.js +232 -0
- package/dist/agent/wide-research.js.map +1 -0
- package/dist/channels/index.d.ts +2 -0
- package/dist/channels/index.js +2 -0
- package/dist/channels/index.js.map +1 -1
- package/dist/channels/pro/callback-router.d.ts +54 -0
- package/dist/channels/pro/callback-router.js +178 -0
- package/dist/channels/pro/callback-router.js.map +1 -0
- package/dist/channels/pro/ci-watcher.d.ts +86 -0
- package/dist/channels/pro/ci-watcher.js +343 -0
- package/dist/channels/pro/ci-watcher.js.map +1 -0
- package/dist/channels/pro/diff-first.d.ts +63 -0
- package/dist/channels/pro/diff-first.js +187 -0
- package/dist/channels/pro/diff-first.js.map +1 -0
- package/dist/channels/pro/enhanced-commands.d.ts +83 -0
- package/dist/channels/pro/enhanced-commands.js +218 -0
- package/dist/channels/pro/enhanced-commands.js.map +1 -0
- package/dist/channels/pro/index.d.ts +19 -0
- package/dist/channels/pro/index.js +21 -0
- package/dist/channels/pro/index.js.map +1 -0
- package/dist/channels/pro/pro-features.d.ts +79 -0
- package/dist/channels/pro/pro-features.js +203 -0
- package/dist/channels/pro/pro-features.js.map +1 -0
- package/dist/channels/pro/run-commands.d.ts +59 -0
- package/dist/channels/pro/run-commands.js +122 -0
- package/dist/channels/pro/run-commands.js.map +1 -0
- package/dist/channels/pro/run-tracker.d.ts +74 -0
- package/dist/channels/pro/run-tracker.js +252 -0
- package/dist/channels/pro/run-tracker.js.map +1 -0
- package/dist/channels/pro/scoped-auth.d.ts +97 -0
- package/dist/channels/pro/scoped-auth.js +340 -0
- package/dist/channels/pro/scoped-auth.js.map +1 -0
- package/dist/channels/pro/text-formatter.d.ts +27 -0
- package/dist/channels/pro/text-formatter.js +269 -0
- package/dist/channels/pro/text-formatter.js.map +1 -0
- package/dist/channels/pro/types.d.ts +242 -0
- package/dist/channels/pro/types.js +14 -0
- package/dist/channels/pro/types.js.map +1 -0
- package/dist/channels/streaming-policy.d.ts +66 -0
- package/dist/channels/streaming-policy.js +266 -0
- package/dist/channels/streaming-policy.js.map +1 -0
- package/dist/channels/telegram/ci-watcher.d.ts +5 -0
- package/dist/channels/telegram/ci-watcher.js +5 -0
- package/dist/channels/telegram/ci-watcher.js.map +1 -0
- package/dist/channels/telegram/client.d.ts +28 -0
- package/dist/channels/telegram/client.js +147 -1
- package/dist/channels/telegram/client.js.map +1 -1
- package/dist/channels/telegram/diff-first.d.ts +5 -0
- package/dist/channels/telegram/diff-first.js +5 -0
- package/dist/channels/telegram/diff-first.js.map +1 -0
- package/dist/channels/telegram/enhanced-commands.d.ts +6 -0
- package/dist/channels/telegram/enhanced-commands.js +6 -0
- package/dist/channels/telegram/enhanced-commands.js.map +1 -0
- package/dist/channels/telegram/index.d.ts +6 -0
- package/dist/channels/telegram/index.js +6 -0
- package/dist/channels/telegram/index.js.map +1 -1
- package/dist/channels/telegram/pro-formatter.d.ts +30 -0
- package/dist/channels/telegram/pro-formatter.js +276 -0
- package/dist/channels/telegram/pro-formatter.js.map +1 -0
- package/dist/channels/telegram/run-commands.d.ts +5 -0
- package/dist/channels/telegram/run-commands.js +6 -0
- package/dist/channels/telegram/run-commands.js.map +1 -0
- package/dist/channels/telegram/run-tracker.d.ts +5 -0
- package/dist/channels/telegram/run-tracker.js +5 -0
- package/dist/channels/telegram/run-tracker.js.map +1 -0
- package/dist/channels/telegram/scoped-auth.d.ts +6 -0
- package/dist/channels/telegram/scoped-auth.js +5 -0
- package/dist/channels/telegram/scoped-auth.js.map +1 -0
- package/dist/channels/telegram/types.d.ts +34 -0
- package/dist/codebuddy/client.js +14 -1
- package/dist/codebuddy/client.js.map +1 -1
- package/dist/commands/dev/index.d.ts +12 -0
- package/dist/commands/dev/index.js +231 -0
- package/dist/commands/dev/index.js.map +1 -0
- package/dist/commands/dev/workflows.d.ts +31 -0
- package/dist/commands/dev/workflows.js +214 -0
- package/dist/commands/dev/workflows.js.map +1 -0
- package/dist/commands/execpolicy.d.ts +17 -0
- package/dist/commands/execpolicy.js +155 -0
- package/dist/commands/execpolicy.js.map +1 -0
- package/dist/commands/knowledge.d.ts +13 -0
- package/dist/commands/knowledge.js +142 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/lessons.d.ts +11 -0
- package/dist/commands/lessons.js +129 -0
- package/dist/commands/lessons.js.map +1 -0
- package/dist/commands/pairing.d.ts +14 -0
- package/dist/commands/pairing.js +132 -0
- package/dist/commands/pairing.js.map +1 -0
- package/dist/commands/research/index.d.ts +13 -0
- package/dist/commands/research/index.js +91 -0
- package/dist/commands/research/index.js.map +1 -0
- package/dist/commands/run-cli/index.d.ts +11 -0
- package/dist/commands/run-cli/index.js +49 -0
- package/dist/commands/run-cli/index.js.map +1 -0
- package/dist/commands/todos.d.ts +9 -0
- package/dist/commands/todos.js +119 -0
- package/dist/commands/todos.js.map +1 -0
- package/dist/config/toml-config.d.ts +21 -0
- package/dist/config/toml-config.js +15 -0
- package/dist/config/toml-config.js.map +1 -1
- package/dist/context/enhanced-compression.js +12 -1
- package/dist/context/enhanced-compression.js.map +1 -1
- package/dist/context/observation-variator.d.ts +44 -0
- package/dist/context/observation-variator.js +83 -0
- package/dist/context/observation-variator.js.map +1 -0
- package/dist/context/precompaction-flush.d.ts +40 -0
- package/dist/context/precompaction-flush.js +134 -0
- package/dist/context/precompaction-flush.js.map +1 -0
- package/dist/context/restorable-compression.d.ts +80 -0
- package/dist/context/restorable-compression.js +228 -0
- package/dist/context/restorable-compression.js.map +1 -0
- package/dist/daemon/daily-reset.d.ts +77 -0
- package/dist/daemon/daily-reset.js +175 -0
- package/dist/daemon/daily-reset.js.map +1 -0
- package/dist/daemon/index.d.ts +1 -0
- package/dist/daemon/index.js +1 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -1
- package/dist/knowledge/knowledge-manager.d.ts +77 -0
- package/dist/knowledge/knowledge-manager.js +244 -0
- package/dist/knowledge/knowledge-manager.js.map +1 -0
- package/dist/observability/run-store.d.ts +133 -0
- package/dist/observability/run-store.js +419 -0
- package/dist/observability/run-store.js.map +1 -0
- package/dist/observability/run-viewer.d.ts +33 -0
- package/dist/observability/run-viewer.js +254 -0
- package/dist/observability/run-viewer.js.map +1 -0
- package/dist/optimization/cache-breakpoints.d.ts +52 -0
- package/dist/optimization/cache-breakpoints.js +97 -0
- package/dist/optimization/cache-breakpoints.js.map +1 -0
- package/dist/persistence/session-store.d.ts +3 -1
- package/dist/persistence/session-store.js +1 -1
- package/dist/persistence/session-store.js.map +1 -1
- package/dist/prompts/system-base.js +51 -7
- package/dist/prompts/system-base.js.map +1 -1
- package/dist/prompts/variation-injector.d.ts +55 -0
- package/dist/prompts/variation-injector.js +171 -0
- package/dist/prompts/variation-injector.js.map +1 -0
- package/dist/prompts/workflow-rules.d.ts +10 -0
- package/dist/prompts/workflow-rules.js +79 -0
- package/dist/prompts/workflow-rules.js.map +1 -0
- package/dist/sandbox/execpolicy.d.ts +45 -0
- package/dist/sandbox/execpolicy.js +80 -0
- package/dist/sandbox/execpolicy.js.map +1 -1
- package/dist/sandbox/os-sandbox.d.ts +25 -0
- package/dist/sandbox/os-sandbox.js +73 -0
- package/dist/sandbox/os-sandbox.js.map +1 -1
- package/dist/security/security-audit.d.ts +10 -0
- package/dist/security/security-audit.js +116 -0
- package/dist/security/security-audit.js.map +1 -1
- package/dist/security/shell-env-policy.d.ts +45 -0
- package/dist/security/shell-env-policy.js +141 -0
- package/dist/security/shell-env-policy.js.map +1 -0
- package/dist/security/ssrf-guard.d.ts +61 -0
- package/dist/security/ssrf-guard.js +382 -0
- package/dist/security/ssrf-guard.js.map +1 -0
- package/dist/security/write-policy.d.ts +57 -0
- package/dist/security/write-policy.js +117 -0
- package/dist/security/write-policy.js.map +1 -0
- package/dist/services/prompt-builder.js +37 -0
- package/dist/services/prompt-builder.js.map +1 -1
- package/dist/themes/theme-schema.d.ts +10 -10
- package/dist/tools/ask-human-tool.d.ts +62 -0
- package/dist/tools/ask-human-tool.js +112 -0
- package/dist/tools/ask-human-tool.js.map +1 -0
- package/dist/tools/bash/bash-tool.d.ts +15 -0
- package/dist/tools/bash/bash-tool.js +62 -0
- package/dist/tools/bash/bash-tool.js.map +1 -1
- package/dist/tools/bash/command-validator.d.ts +1 -0
- package/dist/tools/bash/command-validator.js +5 -0
- package/dist/tools/bash/command-validator.js.map +1 -1
- package/dist/tools/create-skill-tool.d.ts +87 -0
- package/dist/tools/create-skill-tool.js +142 -0
- package/dist/tools/create-skill-tool.js.map +1 -0
- package/dist/tools/fetch-tool.js +5 -3
- package/dist/tools/fetch-tool.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/plan-tool.d.ts +22 -0
- package/dist/tools/plan-tool.js +128 -0
- package/dist/tools/plan-tool.js.map +1 -0
- package/dist/tools/registry/attention-tools.d.ts +32 -0
- package/dist/tools/registry/attention-tools.js +225 -0
- package/dist/tools/registry/attention-tools.js.map +1 -0
- package/dist/tools/registry/index.d.ts +9 -1
- package/dist/tools/registry/index.js +30 -2
- package/dist/tools/registry/index.js.map +1 -1
- package/dist/tools/registry/knowledge-tools.d.ts +46 -0
- package/dist/tools/registry/knowledge-tools.js +293 -0
- package/dist/tools/registry/knowledge-tools.js.map +1 -0
- package/dist/tools/registry/lessons-tools.d.ts +48 -0
- package/dist/tools/registry/lessons-tools.js +359 -0
- package/dist/tools/registry/lessons-tools.js.map +1 -0
- package/dist/tools/registry/plan-tools.d.ts +2 -0
- package/dist/tools/registry/plan-tools.js +7 -0
- package/dist/tools/registry/plan-tools.js.map +1 -0
- package/dist/tools/registry/script-tools.d.ts +2 -0
- package/dist/tools/registry/script-tools.js +7 -0
- package/dist/tools/registry/script-tools.js.map +1 -0
- package/dist/tools/registry/tool-aliases.d.ts +44 -0
- package/dist/tools/registry/tool-aliases.js +130 -0
- package/dist/tools/registry/tool-aliases.js.map +1 -0
- package/dist/tools/run-script-tool.d.ts +13 -0
- package/dist/tools/run-script-tool.js +146 -0
- package/dist/tools/run-script-tool.js.map +1 -0
- package/dist/tools/web-search.d.ts +25 -0
- package/dist/tools/web-search.js +68 -6
- package/dist/tools/web-search.js.map +1 -1
- package/dist/utils/config-validation/schema.d.ts +2 -2
- package/dist/utils/debug-logger.d.ts +1 -1
- package/dist/utils/stable-json.d.ts +27 -0
- package/dist/utils/stable-json.js +50 -0
- package/dist/utils/stable-json.js.map +1 -0
- package/dist/webhooks/webhook-manager.d.ts +7 -0
- package/dist/webhooks/webhook-manager.js +29 -0
- package/dist/webhooks/webhook-manager.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lessons Tool Adapters
|
|
3
|
+
*
|
|
4
|
+
* ITool-compliant adapters for the self-improvement loop:
|
|
5
|
+
* - LessonsAddTool (`lessons_add`) — capture a lesson after a correction
|
|
6
|
+
* - LessonsSearchTool (`lessons_search`) — find relevant lessons before a task
|
|
7
|
+
* - LessonsListTool (`lessons_list`) — list all lessons (with optional filter)
|
|
8
|
+
* - TaskVerifyTool (`task_verify`) — run tsc/tests/lint verification contract
|
|
9
|
+
*/
|
|
10
|
+
import { spawnSync } from 'child_process';
|
|
11
|
+
import { getLessonsTracker } from '../../agent/lessons-tracker.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// LessonsAddTool
|
|
14
|
+
// ============================================================================
|
|
15
|
+
export class LessonsAddTool {
|
|
16
|
+
name = 'lessons_add';
|
|
17
|
+
description = [
|
|
18
|
+
'Capture a lesson learned into the persistent lessons.md file.',
|
|
19
|
+
'Use category=PATTERN for "what went wrong → correct approach" after a user correction.',
|
|
20
|
+
'Use category=RULE for invariants to always follow.',
|
|
21
|
+
'Use category=CONTEXT for project/domain-specific facts.',
|
|
22
|
+
'Use category=INSIGHT for non-obvious observations.',
|
|
23
|
+
'Call this immediately after any user correction to prevent the same mistake.',
|
|
24
|
+
].join(' ');
|
|
25
|
+
async execute(input) {
|
|
26
|
+
const category = input.category ?? 'INSIGHT';
|
|
27
|
+
const content = input.content;
|
|
28
|
+
const context = input.context;
|
|
29
|
+
const source = input.source ?? 'manual';
|
|
30
|
+
if (!content)
|
|
31
|
+
return { success: false, error: 'content is required' };
|
|
32
|
+
const validCats = ['PATTERN', 'RULE', 'CONTEXT', 'INSIGHT'];
|
|
33
|
+
if (!validCats.includes(category)) {
|
|
34
|
+
return { success: false, error: `category must be one of: ${validCats.join(', ')}` };
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const tracker = getLessonsTracker(process.cwd());
|
|
38
|
+
const item = tracker.add(category, content, source, context);
|
|
39
|
+
return {
|
|
40
|
+
success: true,
|
|
41
|
+
output: `Lesson saved [${item.id}] (${category}): ${content}`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
return {
|
|
46
|
+
success: false,
|
|
47
|
+
error: `lessons_add failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
getSchema() {
|
|
52
|
+
return {
|
|
53
|
+
name: this.name,
|
|
54
|
+
description: this.description,
|
|
55
|
+
parameters: {
|
|
56
|
+
type: 'object',
|
|
57
|
+
properties: {
|
|
58
|
+
category: {
|
|
59
|
+
type: 'string',
|
|
60
|
+
enum: ['PATTERN', 'RULE', 'CONTEXT', 'INSIGHT'],
|
|
61
|
+
description: 'Lesson category',
|
|
62
|
+
},
|
|
63
|
+
content: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
description: 'The lesson content. For PATTERN: "[what went wrong] → [correct behaviour]"',
|
|
66
|
+
},
|
|
67
|
+
context: {
|
|
68
|
+
type: 'string',
|
|
69
|
+
description: 'Optional domain context (e.g. "TypeScript", "bash", "React")',
|
|
70
|
+
},
|
|
71
|
+
source: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
enum: ['user_correction', 'self_observed', 'manual'],
|
|
74
|
+
description: 'Source of this lesson (default: manual)',
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
required: ['content'],
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
validate(input) {
|
|
82
|
+
if (!input.content) {
|
|
83
|
+
return { isValid: false, errors: ['content is required'] };
|
|
84
|
+
}
|
|
85
|
+
const validCats = ['PATTERN', 'RULE', 'CONTEXT', 'INSIGHT'];
|
|
86
|
+
if (input.category && !validCats.includes(input.category)) {
|
|
87
|
+
return { isValid: false, errors: [`category must be one of: ${validCats.join(', ')}`] };
|
|
88
|
+
}
|
|
89
|
+
return { isValid: true, errors: [] };
|
|
90
|
+
}
|
|
91
|
+
getMetadata() {
|
|
92
|
+
return {
|
|
93
|
+
name: this.name,
|
|
94
|
+
version: '1.0.0',
|
|
95
|
+
author: 'Code Buddy',
|
|
96
|
+
category: 'planning',
|
|
97
|
+
tags: ['lessons', 'self-improvement', 'patterns', 'learning'],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async isAvailable() {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// ============================================================================
|
|
105
|
+
// LessonsSearchTool
|
|
106
|
+
// ============================================================================
|
|
107
|
+
export class LessonsSearchTool {
|
|
108
|
+
name = 'lessons_search';
|
|
109
|
+
description = [
|
|
110
|
+
'Search lessons learned by keyword and optional category filter.',
|
|
111
|
+
'Call this before starting tasks similar to previous ones to avoid repeating mistakes.',
|
|
112
|
+
'Returns matching lessons sorted by recency.',
|
|
113
|
+
].join(' ');
|
|
114
|
+
async execute(input) {
|
|
115
|
+
const query = input.query;
|
|
116
|
+
const category = input.category;
|
|
117
|
+
const limit = Math.min(Number(input.limit ?? 10), 50);
|
|
118
|
+
if (!query)
|
|
119
|
+
return { success: false, error: 'query is required' };
|
|
120
|
+
try {
|
|
121
|
+
const tracker = getLessonsTracker(process.cwd());
|
|
122
|
+
const results = tracker.search(query, category).slice(0, limit);
|
|
123
|
+
if (results.length === 0) {
|
|
124
|
+
return { success: true, output: `No lessons found matching "${query}".` };
|
|
125
|
+
}
|
|
126
|
+
const lines = results.map(l => `[${l.id}] **${l.category}** ${l.context ? `_(${l.context})_ ` : ''}${l.content}`);
|
|
127
|
+
return { success: true, output: `Found ${results.length} lesson(s):\n\n${lines.join('\n')}` };
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
return {
|
|
131
|
+
success: false,
|
|
132
|
+
error: `lessons_search failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
getSchema() {
|
|
137
|
+
return {
|
|
138
|
+
name: this.name,
|
|
139
|
+
description: this.description,
|
|
140
|
+
parameters: {
|
|
141
|
+
type: 'object',
|
|
142
|
+
properties: {
|
|
143
|
+
query: {
|
|
144
|
+
type: 'string',
|
|
145
|
+
description: 'Keyword(s) to search for in lesson content',
|
|
146
|
+
},
|
|
147
|
+
category: {
|
|
148
|
+
type: 'string',
|
|
149
|
+
enum: ['PATTERN', 'RULE', 'CONTEXT', 'INSIGHT'],
|
|
150
|
+
description: 'Optional: filter to a specific category',
|
|
151
|
+
},
|
|
152
|
+
limit: {
|
|
153
|
+
type: 'number',
|
|
154
|
+
description: 'Maximum number of results (default: 10)',
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
required: ['query'],
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
validate(input) {
|
|
162
|
+
if (!input.query) {
|
|
163
|
+
return { isValid: false, errors: ['query is required'] };
|
|
164
|
+
}
|
|
165
|
+
return { isValid: true, errors: [] };
|
|
166
|
+
}
|
|
167
|
+
getMetadata() {
|
|
168
|
+
return {
|
|
169
|
+
name: this.name,
|
|
170
|
+
version: '1.0.0',
|
|
171
|
+
author: 'Code Buddy',
|
|
172
|
+
category: 'planning',
|
|
173
|
+
tags: ['lessons', 'search', 'self-improvement'],
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
async isAvailable() {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// ============================================================================
|
|
181
|
+
// LessonsListTool
|
|
182
|
+
// ============================================================================
|
|
183
|
+
export class LessonsListTool {
|
|
184
|
+
name = 'lessons_list';
|
|
185
|
+
description = 'List all lessons learned, optionally filtered by category (PATTERN|RULE|CONTEXT|INSIGHT).';
|
|
186
|
+
async execute(input) {
|
|
187
|
+
const category = input.category;
|
|
188
|
+
try {
|
|
189
|
+
const tracker = getLessonsTracker(process.cwd());
|
|
190
|
+
const items = tracker.list(category);
|
|
191
|
+
if (items.length === 0) {
|
|
192
|
+
return { success: true, output: 'No lessons recorded yet.' };
|
|
193
|
+
}
|
|
194
|
+
const lines = items.map(l => `[${l.id}] **${l.category}** ${l.context ? `_(${l.context})_ ` : ''}${l.content}`);
|
|
195
|
+
return { success: true, output: `${items.length} lesson(s):\n\n${lines.join('\n')}` };
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
return {
|
|
199
|
+
success: false,
|
|
200
|
+
error: `lessons_list failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
getSchema() {
|
|
205
|
+
return {
|
|
206
|
+
name: this.name,
|
|
207
|
+
description: this.description,
|
|
208
|
+
parameters: {
|
|
209
|
+
type: 'object',
|
|
210
|
+
properties: {
|
|
211
|
+
category: {
|
|
212
|
+
type: 'string',
|
|
213
|
+
enum: ['PATTERN', 'RULE', 'CONTEXT', 'INSIGHT'],
|
|
214
|
+
description: 'Optional: filter to a specific category',
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
required: [],
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
validate(_input) {
|
|
222
|
+
return { isValid: true, errors: [] };
|
|
223
|
+
}
|
|
224
|
+
getMetadata() {
|
|
225
|
+
return {
|
|
226
|
+
name: this.name,
|
|
227
|
+
version: '1.0.0',
|
|
228
|
+
author: 'Code Buddy',
|
|
229
|
+
category: 'planning',
|
|
230
|
+
tags: ['lessons', 'list', 'self-improvement'],
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
async isAvailable() {
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function runCheck(cmd, args, cwd, timeoutMs = 60_000) {
|
|
238
|
+
const result = spawnSync(cmd, args, {
|
|
239
|
+
cwd,
|
|
240
|
+
encoding: 'utf-8',
|
|
241
|
+
timeout: timeoutMs,
|
|
242
|
+
shell: false,
|
|
243
|
+
});
|
|
244
|
+
const raw = [result.stdout ?? '', result.stderr ?? ''].join('\n').trim();
|
|
245
|
+
// Truncate to last 2000 chars to keep output manageable
|
|
246
|
+
const output = raw.length > 2000 ? '...(truncated)\n' + raw.slice(-2000) : raw;
|
|
247
|
+
const pass = result.status === 0 && !result.error;
|
|
248
|
+
return { pass, output };
|
|
249
|
+
}
|
|
250
|
+
export class TaskVerifyTool {
|
|
251
|
+
name = 'task_verify';
|
|
252
|
+
description = [
|
|
253
|
+
'Run verification checks before marking a task complete (Verification Contract).',
|
|
254
|
+
'Checks: typescript (npx tsc --noEmit), tests (auto-detected from package.json), lint (eslint).',
|
|
255
|
+
'Returns pass/fail per check with truncated output.',
|
|
256
|
+
'Call this before every task completion to satisfy the Verification Contract.',
|
|
257
|
+
].join(' ');
|
|
258
|
+
async execute(input) {
|
|
259
|
+
const checksInput = input.checks;
|
|
260
|
+
const workDir = input.workDir ?? process.cwd();
|
|
261
|
+
const checks = checksInput ?? ['typescript', 'tests'];
|
|
262
|
+
const validChecks = ['typescript', 'tests', 'lint'];
|
|
263
|
+
const invalid = checks.filter(c => !validChecks.includes(c));
|
|
264
|
+
if (invalid.length > 0) {
|
|
265
|
+
return { success: false, error: `Invalid checks: ${invalid.join(', ')}. Valid: ${validChecks.join(', ')}` };
|
|
266
|
+
}
|
|
267
|
+
const results = [];
|
|
268
|
+
for (const check of checks) {
|
|
269
|
+
let res;
|
|
270
|
+
if (check === 'typescript') {
|
|
271
|
+
res = runCheck('npx', ['tsc', '--noEmit'], workDir);
|
|
272
|
+
}
|
|
273
|
+
else if (check === 'tests') {
|
|
274
|
+
// Try to detect test command from RepoProfiler cache
|
|
275
|
+
let testCmd = 'npm';
|
|
276
|
+
let testArgs = ['test', '--', '--passWithNoTests'];
|
|
277
|
+
try {
|
|
278
|
+
const { getRepoProfiler } = await import('../../agent/repo-profiler.js');
|
|
279
|
+
const profile = await getRepoProfiler(workDir).getProfile();
|
|
280
|
+
if (profile.commands.test) {
|
|
281
|
+
const parts = profile.commands.test.split(/\s+/);
|
|
282
|
+
testCmd = parts[0];
|
|
283
|
+
testArgs = parts.slice(1);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
// use default npm test
|
|
288
|
+
}
|
|
289
|
+
res = runCheck(testCmd, testArgs, workDir, 120_000);
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
// lint
|
|
293
|
+
res = runCheck('npx', ['eslint', '.', '--max-warnings=0'], workDir, 60_000);
|
|
294
|
+
}
|
|
295
|
+
results.push({ check, pass: res.pass, output: res.output });
|
|
296
|
+
}
|
|
297
|
+
const allPass = results.every(r => r.pass);
|
|
298
|
+
const lines = results.map(r => {
|
|
299
|
+
const icon = r.pass ? '✅' : '❌';
|
|
300
|
+
return `${icon} **${r.check}**: ${r.pass ? 'PASS' : 'FAIL'}\n${r.output ? r.output + '\n' : ''}`;
|
|
301
|
+
});
|
|
302
|
+
return {
|
|
303
|
+
success: allPass,
|
|
304
|
+
output: lines.join('\n---\n'),
|
|
305
|
+
error: allPass ? undefined : `Verification failed for: ${results.filter(r => !r.pass).map(r => r.check).join(', ')}`,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
getSchema() {
|
|
309
|
+
return {
|
|
310
|
+
name: this.name,
|
|
311
|
+
description: this.description,
|
|
312
|
+
parameters: {
|
|
313
|
+
type: 'object',
|
|
314
|
+
properties: {
|
|
315
|
+
checks: {
|
|
316
|
+
type: 'array',
|
|
317
|
+
items: {
|
|
318
|
+
type: 'string',
|
|
319
|
+
enum: ['typescript', 'tests', 'lint'],
|
|
320
|
+
},
|
|
321
|
+
description: 'List of checks to run (default: ["typescript", "tests"])',
|
|
322
|
+
},
|
|
323
|
+
workDir: {
|
|
324
|
+
type: 'string',
|
|
325
|
+
description: 'Working directory to run checks in (default: current directory)',
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
required: [],
|
|
329
|
+
},
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
validate(_input) {
|
|
333
|
+
return { isValid: true, errors: [] };
|
|
334
|
+
}
|
|
335
|
+
getMetadata() {
|
|
336
|
+
return {
|
|
337
|
+
name: this.name,
|
|
338
|
+
version: '1.0.0',
|
|
339
|
+
author: 'Code Buddy',
|
|
340
|
+
category: 'testing',
|
|
341
|
+
tags: ['verify', 'typescript', 'tests', 'lint', 'quality'],
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
async isAvailable() {
|
|
345
|
+
return true;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// ============================================================================
|
|
349
|
+
// Factory
|
|
350
|
+
// ============================================================================
|
|
351
|
+
export function createLessonsTools() {
|
|
352
|
+
return [
|
|
353
|
+
new LessonsAddTool(),
|
|
354
|
+
new LessonsSearchTool(),
|
|
355
|
+
new LessonsListTool(),
|
|
356
|
+
new TaskVerifyTool(),
|
|
357
|
+
];
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=lessons-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lessons-tools.js","sourceRoot":"","sources":["../../../src/tools/registry/lessons-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-tools.js","sourceRoot":"","sources":["../../../src/tools/registry/plan-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,IAAI,QAAQ,EAAE;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-tools.js","sourceRoot":"","sources":["../../../src/tools/registry/script-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,IAAI,aAAa,EAAE;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Prefix Naming Convention — Codex-inspired canonical tool names.
|
|
3
|
+
*
|
|
4
|
+
* Codex CLI uses a strict `<namespace>_<action>` naming scheme so models
|
|
5
|
+
* can reason about tool categories by prefix (e.g. all `shell_*` tools
|
|
6
|
+
* spawn subprocesses; all `file_*` tools touch the filesystem).
|
|
7
|
+
*
|
|
8
|
+
* This module registers backward-compatible alias ITool wrappers so both
|
|
9
|
+
* the original names (e.g. `bash`, `view_file`) and the new canonical names
|
|
10
|
+
* (e.g. `shell_exec`, `file_read`) route to the same underlying implementation.
|
|
11
|
+
*
|
|
12
|
+
* Convention:
|
|
13
|
+
* shell_* → subprocess / terminal execution (bash, git, docker, process)
|
|
14
|
+
* file_* → read / write / edit filesystem files
|
|
15
|
+
* browser_* → web requests, browser control, screenshots
|
|
16
|
+
* search_* → code search, symbol lookup, find
|
|
17
|
+
* plan_* → persistent planning (PLAN.md)
|
|
18
|
+
* todo_* → attention todo list
|
|
19
|
+
* knowledge_*→ knowledge base operations
|
|
20
|
+
* agent_* → human-in-the-loop / skill authoring
|
|
21
|
+
*
|
|
22
|
+
* To add new aliases simply append to TOOL_ALIASES below.
|
|
23
|
+
*/
|
|
24
|
+
import type { ITool } from './types.js';
|
|
25
|
+
export declare const TOOL_ALIASES: Record<string, string>;
|
|
26
|
+
/** Reverse map: legacy_name → canonical_name */
|
|
27
|
+
export declare const CANONICAL_NAME: Record<string, string>;
|
|
28
|
+
/**
|
|
29
|
+
* Given a list of registered tools, build alias ITool wrappers for each
|
|
30
|
+
* entry in TOOL_ALIASES that points to an existing primary tool.
|
|
31
|
+
*
|
|
32
|
+
* Aliases that point to missing primaries are silently skipped.
|
|
33
|
+
*/
|
|
34
|
+
export declare function createAliasTools(primaryTools: ITool[]): ITool[];
|
|
35
|
+
/**
|
|
36
|
+
* Resolve a tool name to its canonical prefixed form.
|
|
37
|
+
* Returns the canonical name if a mapping exists, otherwise the original name.
|
|
38
|
+
*/
|
|
39
|
+
export declare function toCanonicalName(name: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Resolve a canonical tool name to its legacy name (for backward compat lookup).
|
|
42
|
+
* Returns the legacy name if a mapping exists, otherwise the original name.
|
|
43
|
+
*/
|
|
44
|
+
export declare function toLegacyName(canonical: string): string;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Prefix Naming Convention — Codex-inspired canonical tool names.
|
|
3
|
+
*
|
|
4
|
+
* Codex CLI uses a strict `<namespace>_<action>` naming scheme so models
|
|
5
|
+
* can reason about tool categories by prefix (e.g. all `shell_*` tools
|
|
6
|
+
* spawn subprocesses; all `file_*` tools touch the filesystem).
|
|
7
|
+
*
|
|
8
|
+
* This module registers backward-compatible alias ITool wrappers so both
|
|
9
|
+
* the original names (e.g. `bash`, `view_file`) and the new canonical names
|
|
10
|
+
* (e.g. `shell_exec`, `file_read`) route to the same underlying implementation.
|
|
11
|
+
*
|
|
12
|
+
* Convention:
|
|
13
|
+
* shell_* → subprocess / terminal execution (bash, git, docker, process)
|
|
14
|
+
* file_* → read / write / edit filesystem files
|
|
15
|
+
* browser_* → web requests, browser control, screenshots
|
|
16
|
+
* search_* → code search, symbol lookup, find
|
|
17
|
+
* plan_* → persistent planning (PLAN.md)
|
|
18
|
+
* todo_* → attention todo list
|
|
19
|
+
* knowledge_*→ knowledge base operations
|
|
20
|
+
* agent_* → human-in-the-loop / skill authoring
|
|
21
|
+
*
|
|
22
|
+
* To add new aliases simply append to TOOL_ALIASES below.
|
|
23
|
+
*/
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// Alias map: canonical_name → legacy_name
|
|
26
|
+
// ============================================================================
|
|
27
|
+
export const TOOL_ALIASES = {
|
|
28
|
+
// shell_* — subprocess execution
|
|
29
|
+
shell_exec: 'bash',
|
|
30
|
+
shell_git: 'git',
|
|
31
|
+
shell_docker: 'docker',
|
|
32
|
+
shell_k8s: 'kubernetes',
|
|
33
|
+
shell_process: 'process',
|
|
34
|
+
// file_* — filesystem operations
|
|
35
|
+
file_read: 'view_file',
|
|
36
|
+
file_write: 'create_file',
|
|
37
|
+
file_edit: 'str_replace_editor',
|
|
38
|
+
// browser_* — web / browser
|
|
39
|
+
browser_search: 'web_search',
|
|
40
|
+
browser_fetch: 'web_fetch',
|
|
41
|
+
browser_control: 'browser',
|
|
42
|
+
browser_screen: 'screenshot',
|
|
43
|
+
// search_* — code intelligence
|
|
44
|
+
search_code: 'search',
|
|
45
|
+
search_symbol: 'find_symbols',
|
|
46
|
+
search_refs: 'find_references',
|
|
47
|
+
search_definition: 'find_definition',
|
|
48
|
+
search_multi: 'search_multi', // already has prefix
|
|
49
|
+
// agent_* — agent capabilities
|
|
50
|
+
agent_reason: 'reason',
|
|
51
|
+
agent_ask_human: 'ask_human',
|
|
52
|
+
agent_create_skill: 'create_skill',
|
|
53
|
+
agent_skill_search: 'skill_discover',
|
|
54
|
+
agent_device: 'device_manage',
|
|
55
|
+
// todo_* (already prefixed, kept for completeness)
|
|
56
|
+
todo_attention: 'todo_update',
|
|
57
|
+
context_restore: 'restore_context',
|
|
58
|
+
};
|
|
59
|
+
/** Reverse map: legacy_name → canonical_name */
|
|
60
|
+
export const CANONICAL_NAME = Object.fromEntries(Object.entries(TOOL_ALIASES).map(([canonical, legacy]) => [legacy, canonical]));
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// AliasITool — lightweight wrapper that delegates to the primary tool
|
|
63
|
+
// ============================================================================
|
|
64
|
+
class AliasITool {
|
|
65
|
+
name;
|
|
66
|
+
primary;
|
|
67
|
+
constructor(aliasName, primaryTool) {
|
|
68
|
+
this.name = aliasName;
|
|
69
|
+
this.primary = primaryTool;
|
|
70
|
+
}
|
|
71
|
+
get metadata() {
|
|
72
|
+
return {
|
|
73
|
+
...this.primary.metadata,
|
|
74
|
+
name: this.name,
|
|
75
|
+
description: `[alias → ${this.primary.name}] ${this.primary.metadata.description}`,
|
|
76
|
+
tags: [...(this.primary.metadata.tags ?? []), 'alias'],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
get schema() {
|
|
80
|
+
return {
|
|
81
|
+
...this.primary.schema,
|
|
82
|
+
name: this.name,
|
|
83
|
+
description: `[alias → ${this.primary.name}] ${this.primary.schema.description ?? ''}`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
validate(input) {
|
|
87
|
+
return this.primary.validate(input);
|
|
88
|
+
}
|
|
89
|
+
async execute(input, context) {
|
|
90
|
+
return this.primary.execute(input, context);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// ============================================================================
|
|
94
|
+
// Factory
|
|
95
|
+
// ============================================================================
|
|
96
|
+
/**
|
|
97
|
+
* Given a list of registered tools, build alias ITool wrappers for each
|
|
98
|
+
* entry in TOOL_ALIASES that points to an existing primary tool.
|
|
99
|
+
*
|
|
100
|
+
* Aliases that point to missing primaries are silently skipped.
|
|
101
|
+
*/
|
|
102
|
+
export function createAliasTools(primaryTools) {
|
|
103
|
+
const byName = new Map(primaryTools.map(t => [t.name, t]));
|
|
104
|
+
const aliases = [];
|
|
105
|
+
for (const [canonical, legacy] of Object.entries(TOOL_ALIASES)) {
|
|
106
|
+
const primary = byName.get(legacy);
|
|
107
|
+
if (!primary)
|
|
108
|
+
continue;
|
|
109
|
+
// Don't create an alias if the canonical name is already registered
|
|
110
|
+
if (byName.has(canonical))
|
|
111
|
+
continue;
|
|
112
|
+
aliases.push(new AliasITool(canonical, primary));
|
|
113
|
+
}
|
|
114
|
+
return aliases;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Resolve a tool name to its canonical prefixed form.
|
|
118
|
+
* Returns the canonical name if a mapping exists, otherwise the original name.
|
|
119
|
+
*/
|
|
120
|
+
export function toCanonicalName(name) {
|
|
121
|
+
return CANONICAL_NAME[name] ?? name;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Resolve a canonical tool name to its legacy name (for backward compat lookup).
|
|
125
|
+
* Returns the legacy name if a mapping exists, otherwise the original name.
|
|
126
|
+
*/
|
|
127
|
+
export function toLegacyName(canonical) {
|
|
128
|
+
return TOOL_ALIASES[canonical] ?? canonical;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=tool-aliases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-aliases.js","sourceRoot":"","sources":["../../../src/tools/registry/tool-aliases.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseTool } from './base-tool.js';
|
|
2
|
+
import { ToolResult } from '../types/index.js';
|
|
3
|
+
import { ParameterDefinition } from './base-tool.js';
|
|
4
|
+
export declare class RunScriptTool extends BaseTool {
|
|
5
|
+
readonly name = "run_script";
|
|
6
|
+
readonly description = "Execute a Python, TypeScript, or JavaScript script in a secure sandboxed environment (Docker). Supports external dependencies.";
|
|
7
|
+
private workspacePath;
|
|
8
|
+
constructor(workspacePath?: string);
|
|
9
|
+
protected getParameters(): Record<string, ParameterDefinition>;
|
|
10
|
+
execute(input: Record<string, unknown>): Promise<ToolResult>;
|
|
11
|
+
private getExtension;
|
|
12
|
+
private getDockerImage;
|
|
13
|
+
}
|