@jun133/kitty 0.0.13 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -133
- package/dist/{App-V6SLDWQH.mjs → App-CBTIS4IK.mjs} +30 -18
- package/dist/{chunk-MMIH75OY.mjs → chunk-7FDXKNTM.mjs} +1612 -767
- package/dist/{chunk-DWGFLIQA.mjs → chunk-AQEMM5VH.mjs} +1 -1
- package/dist/{chunk-4BN45TQG.mjs → chunk-KUP5OMPB.mjs} +1 -1
- package/dist/{chunk-4HIVDFN5.mjs → chunk-NBKU7KA4.mjs} +1 -12
- package/dist/{chunk-3KMC6H5K.mjs → chunk-S4QTRPZ7.mjs} +238 -1221
- package/dist/{chunk-6WGSABUQ.mjs → chunk-WIKLME2V.mjs} +82 -14
- package/dist/cli.js +1477 -1438
- package/dist/cli.js.map +1 -1
- package/dist/{interactive-RSJ35TB5.mjs → interactive-BQMJFYHZ.mjs} +5 -5
- package/dist/{oneShot-7P5FDWFX.mjs → oneShot-4QBXBCNN.mjs} +3 -3
- package/dist/{session-XKWJHRVY.mjs → session-V7AYOK2Q.mjs} +2 -2
- package/dist/tui.mjs +106 -97
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,45 +19,17 @@
|
|
|
19
19
|

|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
小猫智能体是给本地代码仓库使用的 agent harness。
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
|
|
33
|
-
## ✨ 为什么是小猫智能体
|
|
34
|
-
|
|
35
|
-
小猫智能体的核心体验很明确:
|
|
36
|
-
|
|
37
|
-
- 🧭 一个 agent 主循环负责推进任务。
|
|
38
|
-
- 🛠️ 四个 core 工具完成基础编程闭环。
|
|
39
|
-
- 🧩 扩展能力通过 extension 进入,保持核心清楚。
|
|
40
|
-
- 🧠 Context 和 Session 专门负责连续性。
|
|
41
|
-
- 📌 机器层执行、记录、恢复事实;模型基于目标和证据判断路线。
|
|
42
|
-
|
|
43
|
-
## 🚀 当前能力
|
|
44
|
-
|
|
45
|
-
| 能力 | 当前事实 |
|
|
46
|
-
| --- | --- |
|
|
47
|
-
| 🧭 Agent 循环 | 模型、工具、session、收尾都在同一个主循环里推进 |
|
|
48
|
-
| 🧠 Context | 近场可见对话、项目上下文、项目地图、运行时上下文、工作记忆、工作集、长上下文压缩和预算报告 |
|
|
49
|
-
| 💾 Session | 会话记录、checkpoint、todo、工作集、恢复现场、结构化可审阅 memory assets |
|
|
50
|
-
| 🗺️ Project Map | 目录、入口、脚本、测试、仓库文档和 git 事实进入短项目地图 |
|
|
51
|
-
| 🔌 Provider | OpenAI-compatible provider、请求恢复、连接诊断 |
|
|
52
|
-
| ❄️ Cost Kernel | 稳定前缀和易变尾部分离,Tool Output Kernel 保存原始输出并给模型短证据,skill 默认只给索引,读取 provider usage 里的 cache hit / miss / read / write,status 显示稳定比例、工具输出节省和最近请求命中状态 |
|
|
53
|
-
| 🛠️ Core tools | `read`、`edit`、`write`、`bash` |
|
|
54
|
-
| 🧩 Extensions | `todo`、`worktree`、`network`、`background`、`subagent`、`skills` |
|
|
55
|
-
| 🧾 Control plane | SQLite 账本记录 task lifecycle、execution、deadline、输出健康、wait policy、pid、状态和 wake 事实;host 负责等待和恢复 lead |
|
|
56
|
-
| 🧯 Production scene | `status` 把 session、background、subagent、memory、skills、cache、wake 和失败边界投影成当前现场、下一步和阻塞原因 |
|
|
57
|
-
| 📋 Plan 工作流 | `plan.md` 是当前任务总管,配合 plan skill 管理需求、事实、失败测试、目标、设计、任务、验证和收口 |
|
|
58
|
-
| 💬 产品面 | CLI、交互终端、Telegram 私聊服务 |
|
|
59
|
-
| 📎 证据记录 | session events、终端日志、崩溃记录、文件变更记录 |
|
|
60
|
-
| 🧪 Evaluation | `kitty eval` 暴露产品验收场景,`--run` 会跑本地可验证检查闭环 |
|
|
22
|
+
小猫智能体是给本地代码仓库使用的 agent harness。
|
|
23
|
+
|
|
24
|
+
它把本地对话、任务现场、恢复能力和验证事实收进一个稳定的编程工作台,让长任务可以继续,失败可以看见,现场可以审阅。
|
|
25
|
+
|
|
26
|
+
## ✨ 你能得到什么
|
|
27
|
+
|
|
28
|
+
- 本地 agent 交互
|
|
29
|
+
- 可恢复的 session 现场
|
|
30
|
+
- CLI、TUI、Telegram 三种入口
|
|
31
|
+
- 当前现场、后台任务、会话事件、memory 和 eval
|
|
32
|
+
- 省 token 的上下文与输出治理
|
|
61
33
|
|
|
62
34
|
## ⚡ 快速开始
|
|
63
35
|
|
|
@@ -138,47 +110,7 @@ kitty "检查这个仓库并修复失败测试"
|
|
|
138
110
|
| `kitty eval` | 查看产品验收场景;`kitty eval --run` 运行本地机器验收 |
|
|
139
111
|
| `kitty telegram serve` | 启动 Telegram 私聊服务 |
|
|
140
112
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
Core 工具固定为四个:
|
|
144
|
-
|
|
145
|
-
| Tool | 作用 |
|
|
146
|
-
| --- | --- |
|
|
147
|
-
| `read` | 读取文件和上下文事实 |
|
|
148
|
-
| `edit` | 精确修改已有文件 |
|
|
149
|
-
| `write` | 写入新文件或完整内容 |
|
|
150
|
-
| `bash` | 搜索、Git、构建、测试和本地命令 |
|
|
151
|
-
|
|
152
|
-
Extension 是可启用、可禁用、独立存在的工具集合:
|
|
153
|
-
|
|
154
|
-
| Extension | 作用 |
|
|
155
|
-
| --- | --- |
|
|
156
|
-
| `todo` | 会话级 todo 写入和可见 checklist |
|
|
157
|
-
| `worktree` | Git worktree 事实、创建、保留和删除 |
|
|
158
|
-
| `network` | HTTP session、请求、探测、下载、trace、OpenAPI 检查 |
|
|
159
|
-
| `background` | 后台命令执行、运行输出摘要、deadline、last output、检查、等待、停止和生命周期记录 |
|
|
160
|
-
| `subagent` | 聚焦子执行启动、派工边界、deadline、状态检查、worker 结论回传、wait policy、lead 挂起与 wake 恢复 |
|
|
161
|
-
| `skills` | 项目运行时 skill 包索引、正文加载、资源读取和脚本运行;使用事实进入 observability 和 task lifecycle |
|
|
162
|
-
|
|
163
|
-
默认 agent 会启用 `todo`、`worktree`、`network`、`background`、`subagent`、`skills`。
|
|
164
|
-
|
|
165
|
-
Runtime skills 放在项目 `SKILL.md`、`.skills/**/SKILL.md` 或 `skills/**/SKILL.md`。默认上下文只显示 skill 名称、说明、路径、健康状态和资源索引;完整正文必须由模型明确调用 `skill_load` 后进入当前轮。Skill 包内的 `references/`、`scripts/`、`examples/` 和 `assets/` 会作为资源分组出现,需要时用 `skill_read_resource` 读取资源,或用 `skill_run_script` 运行已声明的 `scripts/` 资源。Skill frontmatter 可用 `requires` 声明命令依赖,运行时用 `skill_check` 检查包健康和依赖可用性。`.codex/skills/**` 是 Codex 维护本仓库用的开发规范,不属于小猫运行时 skill。
|
|
166
|
-
|
|
167
|
-
当前仓库内置四个开发阶段 runtime skill:`research`、`plan`、`do`、`verification`。其中 `plan` 强制把 `plan.md` 写成单文件规格驱动执行合同:需求文档、当前事实、失败测试、目标、不做范围、设计、实施任务、验证计划和收口记录都在一个文件里闭环。
|
|
168
|
-
|
|
169
|
-
Provider 请求优先携带同 session 的近场可见对话。短会话不靠账本拼上下文;长会话超预算时摘要旧对话,保留最近对话 tail。Session memory 由模型在 turn 收口时按固定 Markdown 区块写出:`Current Focus`、`User Constraints`、`Decisions`、`Open Threads`、`Verification Facts`、`Reusable Lessons`。机器只维护格式和保存边界,不替模型判断事实重要性。
|
|
170
|
-
|
|
171
|
-
Cost Kernel 的边界很硬:省钱不靠模型路由,不靠把能力关掉,而靠上下文结构。稳定内容放在前缀,易变事实放在尾部;Tool Output Kernel 把原始工具输出保存成可恢复证据,把测试、构建、typecheck、搜索和 git diff 输出投影成短证据,再记录估算节省;skill 正文、resources、examples 不默认注入,模型需要时再加载。
|
|
172
|
-
|
|
173
|
-
Provider usage 会归一化缓存事实:DeepSeek 的 `prompt_cache_hit_tokens` / `prompt_cache_miss_tokens`,OpenAI 的 `prompt_tokens_details.cached_tokens`,Anthropic 的 `cache_read_input_tokens` / `cache_creation_input_tokens`,以及 Gemini cached content tokens。`model.request` observability 事件会记录这些字段,`tool.output` observability 事件会记录工具输出原始 token 估算、投影 token 估算、节省比例、是否截断和完整输出路径。`kitty status` 会显示最近模型请求的缓存命中、context cache layout 和工具输出治理现场。OpenAI 请求会使用同 session 稳定 `prompt_cache_key`;DeepSeek 不写无效 `cache_control`,优先保持稳定前缀和命中观测。
|
|
174
|
-
|
|
175
|
-
`kitty eval` 是产品验收合同:每个场景都说明用户路径和机器证据。`kitty eval --run` 包含生产现场、恢复演练、远程入口、cache economy、skill/memory readiness 和失败边界检查。usage 字段解析、provider cache policy、stable prefix fingerprint、volatile tail、skill index boundary 和大输出压缩都必须能机器验证。真实省钱仍取决于 provider 是否返回 usage,以及同一 session 的前缀是否真的被上游缓存命中。
|
|
176
|
-
|
|
177
|
-
Session workset 记录当前会话实际读过和改过的文件。`read` 成功后记录读取事实,`edit` / `write` 成功后记录变更事实和 change id。工作集会进入 session、working memory 和 `kitty status`,让用户看到当前任务真正碰过哪些文件。
|
|
178
|
-
|
|
179
|
-
Memory assets 分为 `session`、`project`、`user` 和 `evidence`。每条 asset 暴露 kind、id、title、scope、tags、路径和 evidence references。Session memory 由模型写,project/user/evidence assets 通过 `kitty memory --create <kind> --title <title> --content <content>` 创建成可审阅 Markdown 资产。`kitty memory -q <query>` 做多词候选召回,只返回命中的资产和证据行,不替模型判断语义重要性。`kitty memory <memoryId> --append-to-skill <skillName>` 可以写入该 skill 的 `references/`。这条路径只沉淀已保存事实,不替模型判断哪些经验值得复用。
|
|
180
|
-
|
|
181
|
-
查看配置:
|
|
113
|
+
查看配置:
|
|
182
114
|
|
|
183
115
|
```bash
|
|
184
116
|
kitty config show
|
|
@@ -208,57 +140,11 @@ kitty config show
|
|
|
208
140
|
- `KITTY_TELEGRAM_PROXY_URL`
|
|
209
141
|
- `KITTY_TELEGRAM_API_BASE_URL`
|
|
210
142
|
|
|
211
|
-
##
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
| Provider / Config | `src/provider/`, `src/config/` |
|
|
219
|
-
| Core tools | `src/tools/` |
|
|
220
|
-
| Extensions | `src/extensions/` |
|
|
221
|
-
| Runtime skills | `src/skills/`, `skills/` |
|
|
222
|
-
| Project map | `src/project/map.ts` |
|
|
223
|
-
| Memory assets | `.kitty/memory/sessions/`, `.kitty/memory/project/`, `.kitty/memory/user/`, `.kitty/memory/evidence/` |
|
|
224
|
-
| Control plane | `src/control/`, `src/execution/` |
|
|
225
|
-
| Host 边界 | `src/host/` |
|
|
226
|
-
| Session events | `.kitty/events/`, `src/session/events.ts` |
|
|
227
|
-
| CLI / Shell / Telegram | `src/cli/`, `src/shell/`, `src/telegram/` |
|
|
228
|
-
| Runtime UI | `src/runtime-ui/` |
|
|
229
|
-
| Observability | `src/observability/` |
|
|
230
|
-
| Evaluation | `src/evaluation/`, `tests/evaluation/` |
|
|
231
|
-
| 产品宣传页 | `site/` |
|
|
232
|
-
| GitHub Pages 发布 | `.github/workflows/pages.yml` |
|
|
233
|
-
| 项目文档 | `spec/` |
|
|
234
|
-
| Tests | `tests/` |
|
|
235
|
-
|
|
236
|
-
## 🧪 开发
|
|
237
|
-
|
|
238
|
-
```bash
|
|
239
|
-
npm.cmd run typecheck
|
|
240
|
-
npm.cmd run build
|
|
241
|
-
npm.cmd run test:core
|
|
242
|
-
npm.cmd run verify
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
交付前运行:
|
|
246
|
-
|
|
247
|
-
```bash
|
|
248
|
-
npm.cmd run verify
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
## 📜 规则与规范
|
|
252
|
-
|
|
253
|
-
当前架构事实和宪法原则在 `spec/`。运行时 agent 规则在 `AGENTS.md`。维护本仓库源码的 Codex 开发规范在 `.codex/skills/kitty-agent-development/SKILL.md`。
|
|
254
|
-
|
|
255
|
-
重要入口:
|
|
256
|
-
|
|
257
|
-
- `AGENTS.md`
|
|
258
|
-
- `.codex/skills/kitty-agent-development/SKILL.md`
|
|
259
|
-
- `spec/用户审阅/系统核心/核心地图.md`
|
|
260
|
-
- `spec/用户审阅/宪法原则/`
|
|
261
|
-
- `spec/技术实现/`
|
|
262
|
-
|
|
263
|
-
项目文档、代码和测试共同描述同一个当前现实。项目入口、配置、文档和测试都跟随当前实现同步维护。
|
|
143
|
+
## 📜 文档
|
|
144
|
+
|
|
145
|
+
- `AGENTS.md`
|
|
146
|
+
- `spec/`
|
|
147
|
+
- `.codex/skills/kitty-agent-development/SKILL.md`
|
|
148
|
+
|
|
149
|
+
项目文档、代码和测试共同描述同一个当前现实。
|
|
264
150
|
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
TRANSCRIPT_OUTER_PADDING_X,
|
|
3
3
|
TUI_COLORS,
|
|
4
4
|
renderTranscriptLineViews
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NBKU7KA4.mjs";
|
|
6
6
|
|
|
7
7
|
// src/shell/tui/layout.ts
|
|
8
8
|
var TUI_MIN_WIDTH = 48;
|
|
@@ -338,32 +338,44 @@ function createComposerComponent(kit) {
|
|
|
338
338
|
function createRuntimeDockComponent(kit) {
|
|
339
339
|
const { React, Box, Text } = kit;
|
|
340
340
|
return function RuntimeDock(props) {
|
|
341
|
+
const facts = [];
|
|
342
|
+
if (props.dock.background) {
|
|
343
|
+
facts.push({ label: "\u540E\u53F0", value: props.dock.background });
|
|
344
|
+
}
|
|
345
|
+
if (props.dock.subagent) {
|
|
346
|
+
facts.push({ label: "\u5B50\u4EE3\u7406", value: props.dock.subagent });
|
|
347
|
+
}
|
|
348
|
+
if (props.dock.context) {
|
|
349
|
+
facts.push({ label: "\u4E0A\u4E0B\u6587", value: props.dock.context });
|
|
350
|
+
}
|
|
341
351
|
return React.createElement(
|
|
342
352
|
Box,
|
|
343
353
|
{
|
|
344
354
|
flexDirection: "column",
|
|
345
|
-
width: "100%"
|
|
355
|
+
width: "100%",
|
|
356
|
+
height: TUI_DOCK_ROWS
|
|
346
357
|
},
|
|
347
|
-
React.createElement(
|
|
358
|
+
props.dock.current ? React.createElement(
|
|
348
359
|
Box,
|
|
349
360
|
{ flexDirection: "row" },
|
|
350
|
-
|
|
351
|
-
React.createElement(Text, { color:
|
|
352
|
-
|
|
353
|
-
|
|
361
|
+
React.createElement(Text, { color: TUI_COLORS.user }, "\u25A3 "),
|
|
362
|
+
React.createElement(Text, { color: TUI_COLORS.text }, props.dock.current)
|
|
363
|
+
) : React.createElement(
|
|
364
|
+
Box,
|
|
365
|
+
{ flexDirection: "row", height: 1 },
|
|
366
|
+
React.createElement(Text, { color: TUI_COLORS.muted }, "\u7A7A\u95F2\u4E2D")
|
|
354
367
|
),
|
|
355
|
-
React.createElement(
|
|
368
|
+
facts.length > 0 ? React.createElement(
|
|
369
|
+
Box,
|
|
370
|
+
{ height: 1, marginTop: 0 },
|
|
371
|
+
...facts.flatMap(({ label, value }, index) => [
|
|
372
|
+
index > 0 ? React.createElement(Text, { color: TUI_COLORS.muted, key: `${label}-gap` }, " ") : null,
|
|
373
|
+
React.createElement(Text, { color: TUI_COLORS.muted, key: `${label}-label` }, `${label} `),
|
|
374
|
+
React.createElement(Text, { color: readFactColor(value), key: `${label}-value` }, value)
|
|
375
|
+
])
|
|
376
|
+
) : React.createElement(
|
|
356
377
|
Box,
|
|
357
|
-
{ marginTop: 0 }
|
|
358
|
-
null,
|
|
359
|
-
React.createElement(Text, { color: TUI_COLORS.muted }, "\u540E\u53F0\u4EFB\u52A1 "),
|
|
360
|
-
React.createElement(Text, { color: readFactColor(props.dock.background) }, props.dock.background),
|
|
361
|
-
React.createElement(Text, { color: TUI_COLORS.muted }, " "),
|
|
362
|
-
React.createElement(Text, { color: TUI_COLORS.muted }, "\u5B50\u4EE3\u7406 "),
|
|
363
|
-
React.createElement(Text, { color: readFactColor(props.dock.subagent) }, props.dock.subagent),
|
|
364
|
-
React.createElement(Text, { color: TUI_COLORS.muted }, " "),
|
|
365
|
-
React.createElement(Text, { color: TUI_COLORS.muted }, "\u4E0A\u4E0B\u6587 "),
|
|
366
|
-
React.createElement(Text, { color: TUI_COLORS.text }, props.dock.context)
|
|
378
|
+
{ marginTop: 0 }
|
|
367
379
|
)
|
|
368
380
|
);
|
|
369
381
|
};
|