refactor: 删除 config.json + 内置工具抽离 + 统一接口

删除:
  - config.rs / config.json(AppConfig/LmStudioConfig)
  - LM Studio 残留(lmstudio.rs 已在之前删除)
  - main.rs 中散落的内置工具 match arms

新增:
  - src/tools/builtin.rs — BuiltinRegistry 统一切入
    get_current_datetime、manage_memos 为核心内置工具
    统一参数校验、风险等级、错误返回

改动:
  - 模型名直接从 DEEPSEEK_MODEL 环境变量读取
  - builtin 工具与 skills 工具统一经过 SkillRegistry 审批
  - query_capabilities 合并内置 + 外部技能列表
This commit is contained in:
2026-06-02 15:07:33 +08:00
parent a32593bc25
commit 079150b1d0
9 changed files with 106 additions and 404 deletions
+2 -20
View File
@@ -1,26 +1,8 @@
# get_current_datetime
获取当前日期时间(北京时间 UTC+8)。
获取当前日期时间(UTC+8)。内置 Rust 实现,无脚本依赖。
## Risk Level
Low
## Parameters
```json
{
"type": "object",
"properties": {
"format": {
"type": "string",
"description": "时间格式: full | date | time",
"enum": ["full", "date", "time"],
"default": "full"
}
}
}
```
## Execute
```bash
scripts/datetime.sh
# Builtin: Rust
```
@@ -1,16 +0,0 @@
#!/bin/bash
# 读取 stdin JSON 参数
read -r input
format=$(echo "$input" | python3 -c "
import sys, json
try:
d = json.load(sys.stdin)
print(d.get('format', 'full'))
except: print('full')
" 2>/dev/null || echo "full")
case "$format" in
date) TZ='Asia/Shanghai' date '+{"datetime": "%Y-%m-%d"}' ;;
time) TZ='Asia/Shanghai' date '+{"datetime": "%H:%M:%S"}' ;;
*) TZ='Asia/Shanghai' date '+{"datetime": "%Y-%m-%d %H:%M:%S"}' ;;
esac
+2 -30
View File
@@ -1,36 +1,8 @@
# manage_memos
管理备忘录:添加、列出、删除。
备忘录存储在 `.data/memos.json` 文件中。
管理备忘录(添加/列出/删除)。内置 Rust 实现,无脚本依赖。
## Risk Level
High
## Parameters
```json
{
"type": "object",
"properties": {
"action": {
"type": "string",
"description": "操作类型",
"enum": ["add", "list", "delete"]
},
"content": {
"type": "string",
"description": "备忘内容(add 时需要)"
},
"id": {
"type": "integer",
"description": "备忘编号(delete 时需要)"
}
},
"required": ["action"]
}
```
## Execute
```bash
scripts/memo.sh
# Builtin: Rust
```
@@ -1,58 +0,0 @@
#!/bin/bash
# 备忘录管理 — 存储 .data/memos.json
MEMO_FILE=".data/memos.json"
mkdir -p "$(dirname "$MEMO_FILE")"
[ ! -f "$MEMO_FILE" ] && echo '[]' > "$MEMO_FILE"
read -r INPUT
export MEMO_INPUT="$INPUT"
python3 - "$MEMO_FILE" << 'PYEOF'
import sys, json, os, datetime
path = sys.argv[1]
input_raw = os.environ.get('MEMO_INPUT', '{}')
try: req = json.loads(input_raw)
except:
print('无效的 JSON 输入')
sys.exit(1)
action = req.get('action', 'list')
content = req.get('content', '')
memo_id = req.get('id', '')
data = json.load(open(path)) if os.path.exists(path) and os.path.getsize(path) > 0 else []
if action == 'add':
if not content:
print('请提供 content 参数')
sys.exit(1)
next_id = max([m.get('id', 0) for m in data], default=0) + 1
data.append({'id': next_id, 'content': content, 'created_at': datetime.datetime.now().isoformat()})
json.dump(data, open(path, 'w'), ensure_ascii=False, indent=2)
print(f'已添加备忘录 #{next_id}')
elif action == 'list':
if not data:
print('暂无备忘录')
else:
for m in data:
ts = m.get('created_at', '?')[:16]
print(f"#{m['id']} [{ts}] {m['content']}")
elif action == 'delete':
if not memo_id:
print('请提供 id 参数')
sys.exit(1)
new = [m for m in data if str(m.get('id', '')) != str(memo_id)]
if len(new) == len(data):
print(f'未找到备忘 #{memo_id}')
else:
json.dump(new, open(path, 'w'), ensure_ascii=False, indent=2)
print(f'已删除备忘 #{memo_id}')
else:
print(f'未知操作: {action}(支持: add, list, delete')
sys.exit(1)
PYEOF