Skip to content

Commit 98a81ed

Browse files
committed
docs(internal): add 2026-03-09 competitor notes
1 parent a163904 commit 98a81ed

3 files changed

Lines changed: 74 additions & 2 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
/.venv-docs/
1818
/tasks/
1919
**/__pycache__/
20+
/docs/internal/_assets/
2021

2122
# OS files
2223
.DS_Store
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# 2026-03-09 笔记(内部)
2+
3+
> Internal-only note: do not publish from `docs-site/` or link from `mkdocs.yml`.
4+
5+
## 今日竞品/对标工作进展
6+
7+
- 已完成竞品更新扫描(内部留档):`docs/internal/competitive/2026-03-09-competitor-update-scan.zh-CN.md`
8+
- 今日落地的“可借鉴点”优先项:**Cron 重启 catch-up + 削峰语义(第一版)**
9+
- 补充:OpenClaw 近期修复了 `kimi-coding` 的工具 schema 兼容(Anthropic tools 需要保持 native),避免 tool 调用退化成 XML/plain-text 伪调用(见同上扫描)
10+
11+
## Cron runner(第一版)落地内容
12+
13+
背景:LoopForge 之前的 `cron_create/cron_list/cron_cancel` 仅持久化定义,不会自动执行。为了把“重启补跑 + 削峰(stagger)”这类可靠性语义落到可用的最小闭环,本次新增一个**显式启用**的 cron runner(CLI worker)。
14+
15+
### 1) 新增 CLI 入口(显式运行)
16+
17+
- `loopforge cron tick`:执行一次 tick(只跑一批 due job)
18+
- `loopforge cron worker`:常驻 worker(按 interval tick)
19+
20+
### 2) Runner 支持的最小子集(安全默认)
21+
22+
为了避免一开始把 schema 和执行面铺太大,先支持一个小而明确的子集:
23+
24+
- Schedule:
25+
- `{ "kind": "every", "every_secs": <seconds> }`
26+
- `{ "kind": "at", "at_epoch_seconds": <epoch_seconds> }`
27+
- Action:
28+
- `{ "kind": "system_event", ... }` → 走 `event_publish`
29+
- `{ "kind": "channel_send", ... }` → 走 `channel_send`(使用 `delivery`/action 合并得到消息参数)
30+
31+
### 3) 重启 catch-up + 削峰(stagger)语义(第一版)
32+
33+
- **全局削峰**:每个 tick 只处理 `max_due_per_tick` 个 due job,避免重启瞬间把 backlog 一次性打爆。
34+
- **每 job catch-up 裁剪**:对 `every` job,当 backlog slot 过大时,只保留最近 `max_catchup_slots_per_job` 个 slot,避免无界补跑。
35+
- **中断恢复**:用 `running_*` 标记检测上次执行中断;重启后:
36+
- recurring job:把 `next_run_at` 回拨到中断的 `scheduled_at`,下一轮补跑
37+
- one-shot/at job:不重放中断 slot,直接 disable(避免重复触发)
38+
- **失败保护**:连续失败达到阈值后自动 disable;失败重试至少延迟 `min_retry_delay_secs`,避免紧密重试风暴。
39+
- **超时保护**:每个 job 有 `job_timeout_ms` 超时,防止单个 job hang 住 tick。
40+
41+
### 4) 状态字段(持久化)
42+
43+
`rexos.cron.jobs` 的记录新增了运行期字段(有 `serde(default)`,兼容旧数据):
44+
45+
- `last_run_at` / `next_run_at`
46+
- `last_status` / `consecutive_errors`
47+
- `running_started_at` / `running_scheduled_at`
48+
49+
## 参考图(本地提取,不进 git)
50+
51+
来源:`/Users/molei/Downloads/instagram-images(1).zip`(已解压 8 张到 `docs/internal/_assets/2026-03-09-instagram-images/`;今日精选 5 张如下)。
52+
53+
> 说明:`docs/internal/_assets/` 已加入 `.gitignore`,避免把参考图提交进仓库历史。
54+
55+
1) ![ref-1](./_assets/2026-03-09-instagram-images/648958743_18314601115271883_1170263968650945927_n.jpg)
56+
2) ![ref-2](./_assets/2026-03-09-instagram-images/648656196_18314601082271883_4560139866227249880_n.jpg)
57+
3) ![ref-3](./_assets/2026-03-09-instagram-images/649233195_18314601064271883_6537515686607741056_n.jpg)
58+
4) ![ref-4](./_assets/2026-03-09-instagram-images/649218998_18314601103271883_5520950502404381841_n.jpg)
59+
5) ![ref-5](./_assets/2026-03-09-instagram-images/645844049_18314601094271883_1538834545523498296_n.jpg)

docs/internal/competitive/2026-03-09-competitor-update-scan.zh-CN.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
1313
## 已同步到的版本(本机)
1414

15-
- OpenClaw:`f2f561fab`(tag 见 `v2026.3.8`, `v2026.3.8-beta.1`
15+
- OpenClaw:`98ea71aca``v2026.3.8-8`;包含 `51bae7512` kimi-coding 工具 schema 修复
1616
- IronClaw:`d73e35c``feat: add AWS Bedrock LLM provider via native Converse API`
1717
- OpenFang:`385aee8``fix streaming`;本地改动已先 stash)
1818

@@ -54,7 +54,19 @@
5454

5555
建议:**Extend(中期)**
5656

57-
### 4) ACP provenance(来源元数据)与可见回执
57+
### 4) Provider 工具 schema 兼容:Anthropic tools 保持 native(不要误转成 OpenAI function)
58+
59+
证据:
60+
- commit:`51bae7512``fix(kimi-coding): ... use native Anthropic tool schema`
61+
- CHANGELOG:`Models/Kimi Coding: ... send anthropic-messages tools in native Anthropic format again`(避免 tool 调用退化成 XML/plain-text 伪调用)
62+
63+
对 LoopForge 的映射:
64+
- LoopForge 已经区分 OpenAI-compat 与 Anthropic 等 provider 协议;当/若引入“Anthropic API 但厂商实现不一致”的 endpoint 时,建议引入**按 provider 的 capability**(例如 `anthropic_tool_schema_mode`)而不是全局 rewrite。
65+
- 安全默认:Anthropic 协议 → 原生 `input_schema` 工具定义;避免把工具强制改写为 OpenAI function,从而触发服务端降级或解析偏差。
66+
67+
建议:**Extend(按需补 capability)**
68+
69+
### 5) ACP provenance(来源元数据)与可见回执
5870

5971
证据:
6072
- CHANGELOG:`ACP/Provenance``openclaw acp --provenance ...`

0 commit comments

Comments
 (0)