Refactor 导读
Ingress core deletion plan:先抓住它真正发力的那一下
这一页不是在堆术语,它像把“Ingress core deletion plan”这台小机器搬到桌上,当着你的面拆开给你看。你先不用全记住,先抓住它到底在忙什么:Ingress core deletion plan。
先听这页的人话版
Ingress core deletion plan
这一页不是在堆术语,它像把“Ingress core deletion plan”这台小机器搬到桌上,当着你的面拆开给你看。你先不用全记住,先抓住它到底在忙什么:Ingress core deletion plan。
如果把这页当成“给普通人看的版本”,你最应该带走的是:它到底在教你一件什么事、什么时候要这样做、以及哪里最容易踩坑。
第 1 站
Start Here
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Ingress core deletion plan The ingress refactor is not healthy while it adds thousands of net lines. Core centralizatio…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Ingress core deletion plan。
# Ingress core deletion plan
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The ingress refactor is not healthy while it adds thousands of net lines. Core centralization only counts when bundled…。
The ingress refactor is not healthy while it adds thousands of net lines. Core centralization only counts when bundled plugin production code gets smaller and old third-party SDK compatibility is quarantined to SDK/core shims.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Desired runtime shape:。
Desired runtime shape:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“bundled plugin event”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“-> extract platform facts locally”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“-> resolve shared ingress once when facts are available”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
bundled plugin event
-> extract platform facts locally
-> resolve shared ingress once when facts are available
-> branch on generic ingress projections/outcomes
-> perform platform side effects locally
old third-party helper
-> SDK compatibility shim
-> shared ingress-compatible projection where possible
-> old return shape preserved
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Bundled 新本领插件s should not translate ingress back into local AccessResult, 大家一起的房间AccessDecision, 魔法口令AuthDecision, Dm魔法…。
Bundled plugins should not translate ingress back into local AccessResult, GroupAccessDecision, CommandAuthDecision, DmCommandAccess, or { allowed, reasonCode } shapes unless that type is public plugin API.
第 2 站
Budget
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Measured against the PR merge-base with origin/main, including untracked files. Minimum remaining cleanup: Comment-only…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Measured against the PR merge-base with origin/main, including untracked files.
Measured against the PR merge-base with origin/main, including untracked files.
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“merge-base 1671e7532adb”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这里在给“current”挂牌子,告诉系统它该指向“”。
- 这一行“core production +3,922 / -546 = +3,376”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
merge-base 1671e7532adb
current:
core production +3,922 / -546 = +3,376
docs +601 / -17 = +584
other +145 / -2 = +143
plugin production +4,148 / -5,388 = -1,240
tests +2,326 / -2,414 = -88
total +11,142 / -8,367 = +2,775
required:
plugin production <= -1,500
core production <= +1,500, or paid for by larger plugin deletion
tests <= +1,000
total <= +2,000
stretch:
plugin production <= -2,500
core production <= +1,200
total <= 0
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Minimum remaining cleanup:。
Minimum remaining cleanup:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“plugin production needs 260 more net deleted lines”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“total needs 775 more net deleted lines”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“core production still +1,876 over standalone budget, unless paid down by plugin deletion”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
plugin production needs 260 more net deleted lines
total needs 775 more net deleted lines
core production still +1,876 over standalone budget, unless paid down by plugin deletion
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Comment-only deletion does not count as cleanup. The previous budget pass was too generous because it included restored…。
Comment-only deletion does not count as cleanup. The previous budget pass was too generous because it included restored QQBot explanatory comments; this document tracks executable/docs/test code movement only.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Re-measure after each cleanup wave:。
Re-measure after each cleanup wave:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“base=$(git merge-base HEAD origin/main)”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“git diff --shortstat "$base"”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“git diff --numstat "$base" -- src/channels/message-access src/plugin-sdk extensions | sort -nr -k1 | head -n 80”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
base=$(git merge-base HEAD origin/main)
git diff --shortstat "$base"
git diff --numstat "$base" -- src/channels/message-access src/plugin-sdk extensions | sort -nr -k1 | head -n 80
pnpm lint:extensions:no-deprecated-channel-access
第 3 站
Diagnosis
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The first pass added the shared ingress kernel, then left too much 新本领插件-local authorization beside it: That duplicates…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The first pass added the shared ingress kernel, then left too much 新本领插件-local authorization beside it:。
The first pass added the shared ingress kernel, then left too much plugin-local authorization beside it:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“platform facts”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“-> shared ingress state and decision”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“-> plugin-local DTO or legacy projection”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
platform facts
-> shared ingress state and decision
-> plugin-local DTO or legacy projection
-> plugin-local if/else ladder
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:That duplicates the 聪明脑袋模型. Core production grew by about 3,376 lines, while bundled 新本领插件 production is 1,240 lines sm…。
That duplicates the model. Core production grew by about 3,376 lines, while bundled plugin production is 1,240 lines smaller. That is better than the first pass, but it is not inside the minimum budget. The fix remains deletion-first:
这一串条目别硬背,把它当成“Diagnosis”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:delete 新本领插件 DTOs that only rename ingres…、delete tests that only assert wrapper sha…、add core helpers only when the same patch…、keep old SDK compatibility in SDK/core sh…。
- delete plugin DTOs that only rename ingress fields
- delete tests that only assert wrapper shape
- add core helpers only when the same patch deletes bundled plugin code
- keep old SDK compatibility in SDK/core shims only
- repack core after wrapper deletion exposes the stable shape
第 4 站
Hotspots
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Positive bundled production files that still need to shrink: The branch is not inside the minimum budget yet. The remai…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Positive bundled production files that still need to shrink:。
Positive bundled production files that still need to shrink:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“extensions/telegram/src/ingress.ts +126”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“extensions/discord/src/monitor/dm-command-auth.ts +101”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“extensions/signal/src/monitor/access-policy.ts +92”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
extensions/telegram/src/ingress.ts +126
extensions/discord/src/monitor/dm-command-auth.ts +101
extensions/signal/src/monitor/access-policy.ts +92
extensions/feishu/src/policy.ts +85
extensions/slack/src/monitor/auth.ts +64
extensions/googlechat/src/monitor-access.ts +59
extensions/nextcloud-talk/src/inbound.ts +51
extensions/matrix/src/matrix/monitor/access-state.ts +49
extensions/irc/src/inbound.ts +44
extensions/imessage/src/monitor/inbound-processing.ts +36
extensions/qa-channel/src/inbound.ts +34
extensions/qqbot/src/bridge/sdk-adapter.ts +33
extensions/tlon/src/monitor/utils.ts +30
extensions/twitch/src/access-control.ts +22
extensions/qqbot/src/engine/commands/slash-command-handler.ts +20
extensions/telegram/src/bot-handlers.runtime.ts +19
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The branch is not inside the minimum budget yet. The remaining review-relevant work should delete repeated authorizatio…。
The branch is not inside the minimum budget yet. The remaining review-relevant work should delete repeated authorization flow, turn scaffolding, or wrapper tests before adding another core abstraction.
第 5 站
Current Code Read
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The healthy core seam already exists in src/消息通道s/小纸条消息-access/runtime.ts: it owns identity adapters, effective allowli…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The healthy core seam already exists in src/消息通道s/小纸条消息-access/runtime.ts: it owns identity adapters, effective allowli…。
The healthy core seam already exists in src/channels/message-access/runtime.ts: it owns identity adapters, effective allowlists, pairing-store reads, route descriptors, command/event presets, access groups, and the final resolved ResolvedChannelMessageIngress projection.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The remaining growth is mostly 新本领插件 glue layered on top of that seam:。
The remaining growth is mostly plugin glue layered on top of that seam:
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:魔法口令/event helpers, then call sites still pass precomputed normalized allowlists and owner lists.
command/event helpers, then call sites still pass precomputed normalized allowlists and owner lists.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:extensions/feishu/src/policy.ts, extensions/googlechat/src/monitor-access.ts, and extensions/matrix/src/matrix/monitor/…。
extensions/feishu/src/policy.ts, extensions/googlechat/src/monitor-access.ts, and extensions/matrix/src/matrix/monitor/access-state.ts still keep local policy DTOs or legacy decision names beside ingress.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:identity normalization and pairing replies local, but still has a wrapper seam that should collapse into direct ingress…。
identity normalization and pairing replies local, but still has a wrapper seam that should collapse into direct ingress consumption.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:extensions/qa-消息通道/src/inbound.ts, extensions/zalo/src/monitor.ts, and extensions/zalouser/src/monitor.ts still repeat…。
extensions/qa-channel/src/inbound.ts, extensions/zalo/src/monitor.ts, and extensions/zalouser/src/monitor.ts still repeat route/envelope/turn assembly that can move to shared turn helpers outside the ingress kernel.
这一串条目别硬背,把它当成“Current Code Read”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:extensions/telegram/src/ingress.ts wraps…、extensions/discord/src/monitor/dm-魔法口令-au…、extensions/signal/src/monitor/access-poli…、extensions/nextcloud-talk/src/inbound.ts,…。
extensions/telegram/src/ingress.tswraps core decisions in Telegram-specificextensions/discord/src/monitor/dm-command-auth.ts,extensions/signal/src/monitor/access-policy.tscorrectly keeps Signalextensions/nextcloud-talk/src/inbound.ts,extensions/irc/src/inbound.ts,
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Conclusion: moving more code into core is only useful if it deletes these 新本领插件 wrapper layers in the same patch. Addin…。
Conclusion: moving more code into core is only useful if it deletes these plugin wrapper layers in the same patch. Adding another abstraction while leaving wrapper returns in place repeats the mistake.
第 6 站
Boundary
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Core owns generic policy: and outcomes 新本领插件s own transport facts and side effects: setup, doctor, status, logs, and us…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Core owns generic policy:。
Core owns generic policy:
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:and outcomes。
and outcomes
这一串条目别硬背,把它当成“Boundary”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:allowlist normalization and matching、access-大家一起的房间 expansion and diagnostics、pairing-store DM allowlist reads、route, sender, 魔法口令, event, and activatio…。
- allowlist normalization and matching
- access-group expansion and diagnostics
- pairing-store DM allowlist reads
- route, sender, command, event, and activation gates
- admission mapping: dispatch, drop, skip, observe, pairing
- redacted state, decisions, diagnostics, and SDK compatibility projections
- reusable generic descriptors for identity, route, command, event, activation,
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:新本领插件s own transport facts and side effects:。
Plugins own transport facts and side effects:
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:setup, doctor, status, logs, and user-facing copy。
setup, doctor, status, logs, and user-facing copy
这一串条目别硬背,把它当成“Boundary”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:小铃铛通知/socket/request authenticity、platform identity extraction and 对话接口 loo…、消息通道-specific policy defaults、pairing challenge delivery, replies, acks…。
- webhook/socket/request authenticity
- platform identity extraction and API lookups
- channel-specific policy defaults
- pairing challenge delivery, replies, acks, reactions, typing, media, history,
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Core must stay 消息通道-agnostic: no Discord, Slack, Telegram, Matrix, room, guild, space, 对话接口 来帮忙的小伙伴, or 新本领插件-specific…。
Core must stay channel-agnostic: no Discord, Slack, Telegram, Matrix, room, guild, space, API client, or plugin-specific default in src/channels/message-access.
第 7 站
Acceptance Rule
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Every new core helper must delete bundled 新本领插件 production code immediately. Stop and redesign if: 消息通道-specific default。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Every new core helper must delete bundled 新本领插件 production code immediately.
Every new core helper must delete bundled plugin production code immediately.
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“one bundled caller reject; keep plugin-local”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“two bundled callers accept only if plugin production LOC drops”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“three or more callers plugin deletion must be at least 2x new core LOC”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
one bundled caller reject; keep plugin-local
two bundled callers accept only if plugin production LOC drops
three or more callers plugin deletion must be at least 2x new core LOC
compatibility-only helper SDK/core shim only; never bundled hot paths
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Stop and redesign if:。
Stop and redesign if:
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:消息通道-specific default。
channel-specific default
这一串条目别硬背,把它当成“Acceptance Rule”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:新本领插件 production LOC increases、tests grow faster than production shrinks、a bundled hot path returns a DTO that onl…、a core helper needs a 消息通道 id, platform o…。
- plugin production LOC increases
- tests grow faster than production shrinks
- a bundled hot path returns a DTO that only renames
ResolvedChannelMessageIngress - a core helper needs a channel id, platform object, API client, or
第 8 站
Work Packages
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Freeze the budget. Put LOC in the PR, keep deprecated-ingress lint green, and include before/after LOC in cleanup co…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Freeze the budget. Put LOC in the PR, keep deprecated-ingress lint green, and include before/after LOC in cleanup co…。
1. Freeze the budget. Put LOC in the PR, keep deprecated-ingress lint green, and include before/after LOC in cleanup commits.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:2. Delete thin DTO seams. Replace 新本领插件-local wrapper returns with Resolved消息通道小纸条消息Ingress, senderAccess, 魔法口令Access,…。
2. Delete thin DTO seams. Replace plugin-local wrapper returns with ResolvedChannelMessageIngress, senderAccess, commandAccess, routeAccess, or ingress directly. Start with QQBot, Telegram, Slack, Discord, Signal, Feishu, Matrix, iMessage, and Tlon. Delete wrapper-shape tests; keep behavior tests.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:3. Add outcome classification only with deletions. A generic classifier may expose dispatch, pairing-required, skip-act…。
3. Add outcome classification only with deletions. A generic classifier may expose dispatch, pairing-required, skip-activation, drop-command, drop-route, drop-sender, and drop-ingress. It must derive from the decision graph, not reason strings, and migrate at least three plugins in the same patch.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:4. Add route descriptor builders only with deletions. Generic route target and route sender helpers are acceptable only…。
4. Add route descriptor builders only with deletions. Generic route target and route sender helpers are acceptable only if they immediately shrink route-heavy plugins: Google Chat, IRC, Microsoft Teams, Nextcloud Talk, Mattermost, Slack, Zalo, and Zalo Personal.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:5. Add 魔法口令/event presets only with deletions. Centralize text-魔法口令, native-魔法口令, callback, and origin-subject shapes.…。
5. Add command/event presets only with deletions. Centralize text-command, native-command, callback, and origin-subject shapes. Command consumers must default to unauthorized when no command gate ran; events must not start pairing.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:6. Add identity presets only where they remove boilerplate. Stable-id, stable-id-plus-aliases, phone/e164, and multi-id…。
6. Add identity presets only where they remove boilerplate. Stable-id, stable-id-plus-aliases, phone/e164, and multi-identifier helpers are allowed when raw values enter only adapter input and redacted state keeps opaque ids/counts.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:7. Share authorized turn assembly. Outside the ingress kernel, remove repeated route/envelope/context/reply scaffolding…。
7. Share authorized turn assembly. Outside the ingress kernel, remove repeated route/envelope/context/reply scaffolding from QA Channel, IRC, Nextcloud Talk, Zalo, and Zalo Personal. Core may own route/session/envelope/dispatch sequencing; plugins keep delivery and channel-specific context.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:8. Quarantine compatibility. Deprecated SDK helpers stay source-compatible, but bundled hot paths must not import depre…。
8. Quarantine compatibility. Deprecated SDK helpers stay source-compatible, but bundled hot paths must not import deprecated ingress or command-auth facades. Compatibility tests should use fake third-party plugins, not bundled-plugin internals.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:9. Repack core. After wrapper deletion, collapse one-use modules, remove unused exports, move compatibility projection…。
9. Repack core. After wrapper deletion, collapse one-use modules, remove unused exports, move compatibility projection out of hot paths, and keep focused tests for identity, route, command/event, activation, access groups, and compatibility shims.
第 9 站
Deletion Waves
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Run these in order. Each wave must lower bundled production LOC. 1. Wrapper collapse, expected 新本领插件 delta: -400 to -60…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Run these in order. Each wave must lower bundled production LOC.
Run these in order. Each wave must lower bundled production LOC.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Wrapper collapse, expected 新本领插件 delta: -400 to -600. Replace 新本领插件-local resolveXAccess, resolveX魔法口令Access, and ac…。
1. Wrapper collapse, expected plugin delta: -400 to -600. Replace plugin-local resolveXAccess, resolveXCommandAccess, and accessFromIngress result types with direct reads from ResolvedChannelMessageIngress. First targets: Discord DM command auth, Feishu policy, Matrix access state, Telegram ingress, Signal access policy, QQBot SDK adapter.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:2. Shared outcome helpers, expected 新本领插件 delta: -200 to -350. Add one generic classifier only if it deletes repeated s…。
2. Shared outcome helpers, expected plugin delta: -200 to -350. Add one generic classifier only if it deletes repeated shouldBlockControlCommand, pairing, activation skip, route block, and sender block ladders across at least three plugins.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:3. Route descriptor builders, expected 新本领插件 delta: -200 to -350. Move repeated route target and route sender descripto…。
3. Route descriptor builders, expected plugin delta: -200 to -350. Move repeated route target and route sender descriptor assembly into core helpers. First targets: Google Chat, IRC, Microsoft Teams, Nextcloud Talk, Mattermost, Slack, Zalo, Zalo Personal.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:4. Turn assembly sharing, expected 新本领插件 delta: -250 to -450. Use common route/session/envelope/dispatch sequencing for…。
4. Turn assembly sharing, expected plugin delta: -250 to -450. Use common route/session/envelope/dispatch sequencing for simple inbound plugins. First targets: QA Channel, IRC, Nextcloud Talk, Zalo, Zalo Personal.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:5. Core repack, expected core delta: -300 to -700. After 新本领插件s consume runtime projections directly, delete one-use mo…。
5. Core repack, expected core delta: -300 to -700. After plugins consume runtime projections directly, delete one-use modules, merge tiny files back into runtime.ts or focused siblings, and keep SDK compatibility files separate from bundled hot paths.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:6. Test pruning, expected test delta: -300 to -600. Delete tests that only assert removed wrapper shapes. Keep behavior…。
6. Test pruning, expected test delta: -300 to -600. Delete tests that only assert removed wrapper shapes. Keep behavior tests for command denial, group fallback, origin-subject matching, activation skip, access groups, pairing, and redaction.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Expected minimum landing shape after these waves:。
Expected minimum landing shape after these waves:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“plugin production <= -1,500”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“core production about +1,800 to +2,200 before final repack”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“tests <= +500”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
plugin production <= -1,500
core production about +1,800 to +2,200 before final repack
tests <= +500
total <= +2,000
第 10 站
Do Not Move
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Do not move platform 设置说明书 defaults, setup UX, doctor/fix copy, 对话接口 lookups, Slack owner-presence checks, Matrix alias…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Do not move platform 设置说明书 defaults, setup UX, doctor/fix copy, 对话接口 lookups, Slack owner-presence checks, Matrix alias…。
Do not move platform config defaults, setup UX, doctor/fix copy, API lookups, Slack owner-presence checks, Matrix alias/verification handling, Telegram callback parsing, command syntax parsing, native command registration, reaction payload parsing, pairing replies, command replies, acks, typing, media, history, or logs.
第 11 站
Verification
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Targeted local loop: Use Testbox for broad changed gates/full-suite proof once the LOC trend is inside budget. Each wor…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Targeted local loop:。
Targeted local loop:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这里在给“pnpm lint”挂牌子,告诉系统它该指向“extensions:no-deprecated-channel-access”。
- 这一句像在终端上按下启动钮:“pnpm test src/channels/message-access/message-access.test.ts src/plugin-sdk/channel-ingress-runtime.test.ts src/plugin-sdk/access-groups.test.ts”。它会让电脑去请求、安装或者把东西搭起来。
- 这一句像在终端上按下启动钮:“pnpm test extensions/<changed-plugin>/src/...”。它会让电脑去请求、安装或者把东西搭起来。
pnpm lint:extensions:no-deprecated-channel-access
pnpm test src/channels/message-access/message-access.test.ts src/plugin-sdk/channel-ingress-runtime.test.ts src/plugin-sdk/access-groups.test.ts
pnpm test extensions/<changed-plugin>/src/...
pnpm plugin-sdk:api:check
pnpm config:docs:check
pnpm check:docs
git diff --check
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Use Testbox for broad changed gates/full-suite proof once the LOC trend is inside budget.
Use Testbox for broad changed gates/full-suite proof once the LOC trend is inside budget.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Each work package records:。
Each work package records:
这一串条目别硬背,把它当成“Verification”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:before/after LOC by category、deleted 新本领插件 wrappers、new core helper LOC, if any、targeted tests run。
- before/after LOC by category
- deleted plugin wrappers
- new core helper LOC, if any
- targeted tests run
- remaining hotspot list
第 12 站
Exit Criteria
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:stays <= +2,000 access-大家一起的房间, and 消息通道-specific fallback behavior ---。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:stays <= +2,000。
stays <= +2,000
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:access-大家一起的房间, and 消息通道-specific fallback behavior。
access-group, and channel-specific fallback behavior
这一串条目别硬背,把它当成“Exit Criteria”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:bundled production imports no deprecated…、compatibility code is isolated to SDK/cor…、bundled 新本领插件s consume ingress projection…、新本领插件 production LOC is at least 1,500 ne…。
- bundled production imports no deprecated channel-access or command-auth facades
- compatibility code is isolated to SDK/core seams
- bundled plugins consume ingress projections or generic outcomes directly
- plugin production LOC is at least 1,500 net negative against
origin/main - core production LOC is
<= +1,500, or any excess is paid for while total - representative tests cover redaction, route, command/event, activation,
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:---。
---
AdSense 连接验证已经放在页面头部;广告单元等站点审批通过后再启用。
google-adsense-account: ca-pub-3833673520933536