fix: address PR #159 #181 #154 - reasoning_content in toolloop, Discord MESSAGE_CONTENT intent, minimax config example

This commit is contained in:
OpenClaw-User 2026-03-14 16:25:23 +08:00
parent 0c5d7500e8
commit 99b1bdb305
4 changed files with 127 additions and 2 deletions

114
PR_SUBMIT_INSTRUCTIONS.md Normal file
View file

@ -0,0 +1,114 @@
# 向 sipeed/picoclaw 提交 PR 指南
## 当前状态
**已完成**
- 安全修复已提交到分支 `security-and-prs-merge`(修复 #1525#1527#1529
- 前 5 个 PR 已拉取到本地pr-110, pr-154, pr-159, pr-181, pr-182
⚠️ **PR 合并冲突**:前 5 个 PR 与 main 存在较大冲突(尤其是 #110 对 http_provider 的重构),自动合并会破坏代码。建议单独提交安全修复 PR。
---
## 步骤 1Fork 仓库
1. 打开 https://github.com/sipeed/picoclaw
2. 点击右上角 **Fork** 按钮
3. 等待 Fork 完成,得到 `https://github.com/你的用户名/picoclaw`
---
## 步骤 2添加 Fork 为远程仓库
```powershell
cd d:\AIbiaoshu\picoclaw_zt
# 将 YOUR_GITHUB_USERNAME 替换为你的 GitHub 用户名
git remote add myfork https://github.com/YOUR_GITHUB_USERNAME/picoclaw.git
```
---
## 步骤 3推送到你的 Fork
```powershell
# 推送 security-and-prs-merge 分支到你的 fork
git push myfork security-and-prs-merge:security-fixes-1525-1527-1529
```
---
## 步骤 4在 GitHub 创建 Pull Request
1. 打开 `https://github.com/你的用户名/picoclaw`
2. 会看到 "security-fixes-1525-1527-1529 had recent pushes" 的提示
3. 点击 **Compare & pull request**
4. 填写 PR 信息:
**标题**
```
fix: address security issues #1525, #1527, #1529
```
**描述**
```markdown
## Summary
Addresses security issues reported in the picoclaw repository.
## Changes
### #1525 - exec.allow_remote default to false
- Changed default from `true` to `false` to restrict exec tool to local context
- Reduces risk of remote shell execution from non-local sessions
### #1527 - Tighten JSONL session store permissions
- Sessions directory: 0755 → 0700 (owner only)
- JSONL and meta files: 0644 → 0600 (owner read/write only)
### #1529 - Refuse public web mode without allowed_cidrs
- Prevents binding to 0.0.0.0 without explicit CIDR restrictions
- Fails at startup with clear error message when public=true and allowed_cidrs is empty
## Files Modified
- pkg/config/defaults.go
- pkg/config/config_test.go
- pkg/memory/jsonl.go
- web/backend/main.go
- web/backend/api/config_test.go
- web/frontend/src/components/config/form-model.ts
- pkg/migrate/sources/openclaw/openclaw_config_test.go
```
5. 点击 **Create pull request**
---
## 关于前 5 个 PR 的合并
前 5 个 PR按创建时间排序
| # | 标题 | 作者 | 状态 |
|---|------|------|------|
| 110 | feat(provider): add gemini google-generative-ai compatibility | fuhao009 | 与 main 有冲突 |
| 154 | feat: add minimax provider support | Danieldd28 | 待合并 |
| 159 | fix: preserve reasoning_content for thinking models | siciyuan404 | 待合并 |
| 181 | Enable Discord message intents | Paraguanads | 待合并 |
| 182 | feat: add slash command support | Tuzfucius | 待合并 |
PR #110 与当前 main 的 `pkg/providers/http_provider.go``pkg/config/config.go` 存在结构性冲突,需要人工审查后合并。
如需合并其他 PR可手动执行
```powershell
git merge pr-154 # 逐个尝试
# 解决冲突后
git add -A
git commit -m "Merge PR 154"
```
---
## 若 git commit 报错 "unknown option trailer"
你的 Git 可能配置了 commit 模板或别名。使用完整路径绕过:
```powershell
& "C:\Program Files\Git\bin\git.exe" commit -m "your message"
```

View file

@ -53,6 +53,13 @@
"api_key": "your-modelscope-access-token",
"api_base": "https://api-inference.modelscope.cn/v1"
},
{
"_comment": "MiniMax - https://api.minimaxi.com/ (PR #154)",
"model_name": "minimax",
"model": "minimax/MiniMax-M2.5",
"api_key": "your-minimax-api-key",
"api_base": "https://api.minimaxi.com/v1"
},
{
"model_name": "loadbalanced-gpt-5.4",
"model": "openai/gpt-5.4",

View file

@ -57,6 +57,8 @@ func NewDiscordChannel(cfg config.DiscordConfig, bus *bus.MessageBus) (*DiscordC
if err != nil {
return nil, fmt.Errorf("failed to create discord session: %w", err)
}
// Enable MESSAGE_CONTENT intent to read message content (PR #181)
session.Identify.Intents |= discordgo.IntentMessageContent
if err := applyDiscordProxy(session, cfg.Proxy); err != nil {
return nil, err

View file

@ -103,9 +103,11 @@ func RunToolLoop(
})
// 6. Build assistant message with tool calls
// Preserve ReasoningContent for thinking models (e.g., GLM-Z1, Kimi K2.5) in multi-turn
assistantMsg := providers.Message{
Role: "assistant",
Content: response.Content,
Role: "assistant",
Content: response.Content,
ReasoningContent: response.ReasoningContent,
}
for _, tc := range normalizedToolCalls {
argumentsJSON, _ := json.Marshal(tc.Arguments)