## 主要变更 ### 1. Context Window 可配置化(v0.3.1 延续) - DeepSeek/Agnes contextWindow 不再写死 1M,可在设置中配置(min 4096) - 修复 Engine 128K vs Adapter 1M 不一致 bug,Engine 从 adapter.getContextWindow() 读取 - 热重载 configSig 加入 contextWindow,配置变化即时生效 ### 2. 新增 11 个工具(15 → 26 个) - Git 工具集(4):git_status, git_diff, git_log, git_commit - 开发工具集(3):lint_code, run_tests, project_info - HTTP 请求(1):http_request(Node 18+ fetch + AbortController) - TODO 管理(1):todo_write(会话级内存 + LRU 淘汰) - 结构化思考(1):think(无副作用思考空间) - 图片查看(1):view_image(base64 data URL,多模态 LLM 支持) ### 3. 审计修复(2 FAIL + 14 WARN) - FAIL-1: registry.ts truncateResult 添加 dataUrl 白名单(图片不被截断) - FAIL-2: todo.ts 添加 LRU 策略 + clearSession 静态方法 - WARN-1: run_tests filter 字符白名单校验,防 cmd 元字符注入 - WARN-2: dataUrl 检测前置到 stringify 之前,避免大图片无意义序列化 - WARN-3: todo.ts 实现真正 LRU(访问刷新位置,非 FIFO) - WARN-4: git_diff maxBuffer 提升至 5MB,支持超大变更集 - WARN-5: log.info 移至 DelegateTaskTool 注册后,输出正确的 26 - WARN-6: riskColors 添加 critical: 'error' 键 - WARN-7: 所有 execFileAsync 显式设置 encoding: 'utf-8' - WARN-8: git_log --author 拆分为独立参数 - WARN-9: todo_write 权限从 WRITE 改为 READ - WARN-10: description 区分与 task_manager 的不同用途 ### 4. PolicyEngine 策略 - 新增 11 条策略,26 个工具 + mcp_* 全覆盖 - git_commit: WRITE + requireConfirmation - todo_write: READ(内存操作)
52 lines
1.9 KiB
TypeScript
52 lines
1.9 KiB
TypeScript
/**
|
|
* 思考工具(1 个)
|
|
*
|
|
* think — 结构化思考空间(无副作用)
|
|
*
|
|
* 参考 Claude Code 的 think 工具设计。
|
|
* 帮助 LLM 在工具调用上下文中组织思路。
|
|
*/
|
|
|
|
import type { IMetonaTool, ToolExecutionContext } from '../../types/metona-tool';
|
|
import type { MetonaToolDef } from '../../../harness/types';
|
|
import { MetonaToolCategory, MetonaRiskLevel } from '../../../harness/types';
|
|
|
|
export class ThinkTool implements IMetonaTool {
|
|
readonly definition: MetonaToolDef = {
|
|
name: 'think',
|
|
description:
|
|
'Use this tool for structured thinking. It helps you organize your thoughts before complex actions. This tool has no side effects — it simply returns your input for your own reference. Use it when: 1) Breaking down complex tasks into steps, 2) Evaluating multiple approaches, 3) Planning before writing code, 4) Reviewing your work before completing.',
|
|
parameters: {
|
|
type: 'object',
|
|
properties: {
|
|
thought: { type: 'string', description: 'The thought content' },
|
|
nextAction: { type: 'string', description: 'Next action plan' },
|
|
reasoning: { type: 'string', description: 'Reasoning process' },
|
|
},
|
|
required: ['thought'],
|
|
},
|
|
category: MetonaToolCategory.CUSTOM,
|
|
riskLevel: MetonaRiskLevel.SAFE,
|
|
requiresPermission: false,
|
|
timeoutMs: 1_000,
|
|
};
|
|
|
|
async execute(args: Record<string, unknown>, _context: ToolExecutionContext): Promise<unknown> {
|
|
try {
|
|
const thought = args.thought as string;
|
|
const nextAction = (args.nextAction as string) ?? null;
|
|
const reasoning = (args.reasoning as string) ?? null;
|
|
|
|
return {
|
|
thought,
|
|
nextAction,
|
|
reasoning,
|
|
timestamp: Date.now(),
|
|
};
|
|
} catch (error) {
|
|
const errMsg = error instanceof Error ? error.message : String(error);
|
|
return { error: errMsg, success: false };
|
|
}
|
|
}
|
|
}
|