Context 是当前模型调用的工作集,不是长期存储。kxen 把 Session 历史、Rules、显式附件、Notes、Memory 和运行状态按不同方式装入上下文;确定性组合、Provider-neutral record 和副作用恢复边界由 DCP 统一定义。
flowchart LR Session["Session 历史"] --> Select["选择和限制"] Rules["Rules"] --> Select Attachments["显式附件"] --> Select Notes["Notes"] --> Retrieve["相关性检索"] Memory["Memory"] --> Retrieve References["References"] --> Demand["按需读取"] Retrieve --> Select Demand --> Select Select --> Compact["窗口阈值和 Compaction"] Compact --> Context["模型调用上下文"]
显式附件
Composer 的 @ 引用支持 Workspace 内文件和目录。图片、拖入文件和大段粘贴内容通过附件系统加入。Web 和 Docs 类型上下文由对应工具入口提供,不由 @ 文件搜索生成。
当前限制:
- 单个文件超过 16 KB 时只注入前 1 KB,并提示使用
read。 - 单个文件超过 64 KB 时不直接注入。
- 一次上下文附件总量上限为 200 KB。
- 目录列表最多 200 项。
- 公网图片上限为 5 MB。
路径先 canonicalize,再检查 Workspace 边界、symlink 逃逸和 Safety 保护路径。通过原生文件选择器授权的外部文件可以进入上下文,但不能越过 Safety。
Composer 候选上下文
Composer 主动推荐与发送时模型 context 是两条不同链路。Local 候选排序可以使用完整 draft、最近 Session Text、附件路径、ContextSources、最近 involved 文件、Git status/diff 和 Workspace 文件摘要,但候选只有在用户接受后才转换为 chip 或文本。候选本身不会自动进入下一次模型请求。
默认路径不访问网络。未信任 Workspace 不读取候选文件正文;敏感路径、.git、.agents/kxen、依赖和构建目录被排除,Walk 索引尊重 .gitignore 且不跟随 symlink。Embedding 和 LLM 只在用户级配置显式开启时运行,并且只处理本地 shortlist。LLM 返回的文件 identity 必须由后端对本地候选 id 做闭集验证。
项目指令
AGENTS.md 和 Rules 保存需要持续生效的约束。References 只在任务需要时读取,避免把全部资料注入每一轮。
历史压缩
模型上下文使用 catalog 中的 context window,找不到时回落到 200000 token。估算用字符数除以 4,每张图片按固定估值 1000 token 计入(base64 长度与实际 token 无稳定换算,宁高估勿漏估),超过窗口的 80% 时触发 compaction。
Compaction:
- 保留 system message。
- 保留最近消息。
- 把更旧的 Text 和 Context 蒸馏为工作摘要。
- 不改原始 Session JSONL。
- 保存 compaction checkpoint,用于重建模型视图。
摘要失败时保留旧段首尾,不丢最近上下文。用户也可以在 Composer 使用 /compact 立即尝试一次相同的持久压缩。
Knowledge 和 Memory
Knowledge Library 是统一管理界面。Notes 和 Memory 通过相关性检索进入上下文,References 按需读取。它们都不应无条件加载全部正文。
可见失败
附件读取失败、URL 获取失败和超限必须同时对用户和模型可见。静默丢失上下文会让模型在错误前提下继续执行。