@qlingzzy/qling 1.0.0 → 1.1.0

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.
Files changed (254) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/README.en.md +82 -17
  3. package/README.md +15 -7
  4. package/dist/agent/main-loop.d.ts +120 -0
  5. package/dist/agent/main-loop.d.ts.map +1 -0
  6. package/dist/agent/main-loop.js +279 -0
  7. package/dist/agent/subtask-parallel.d.ts +29 -0
  8. package/dist/agent/subtask-parallel.d.ts.map +1 -0
  9. package/dist/agent/subtask-parallel.js +107 -0
  10. package/dist/agent/subtask.d.ts +13 -0
  11. package/dist/agent/subtask.d.ts.map +1 -1
  12. package/dist/agent/subtask.js +79 -24
  13. package/dist/agent/system-prompt.d.ts +39 -0
  14. package/dist/agent/system-prompt.d.ts.map +1 -0
  15. package/dist/agent/system-prompt.js +89 -0
  16. package/dist/agent/tool-orchestrator.d.ts +66 -0
  17. package/dist/agent/tool-orchestrator.d.ts.map +1 -0
  18. package/dist/agent/tool-orchestrator.js +355 -0
  19. package/dist/agent-loop.d.ts +29 -16
  20. package/dist/agent-loop.d.ts.map +1 -1
  21. package/dist/agent-loop.js +262 -807
  22. package/dist/agents/roles.d.ts +57 -0
  23. package/dist/agents/roles.d.ts.map +1 -0
  24. package/dist/agents/roles.js +198 -0
  25. package/dist/commands/agents.d.ts.map +1 -1
  26. package/dist/commands/agents.js +17 -3
  27. package/dist/commands/claude-style.d.ts.map +1 -1
  28. package/dist/commands/claude-style.js +19 -10
  29. package/dist/commands/help.d.ts.map +1 -1
  30. package/dist/commands/help.js +3 -2
  31. package/dist/commands/index.d.ts.map +1 -1
  32. package/dist/commands/index.js +6 -0
  33. package/dist/commands/mode.d.ts +16 -0
  34. package/dist/commands/mode.d.ts.map +1 -0
  35. package/dist/commands/mode.js +67 -0
  36. package/dist/commands/recover.d.ts +3 -0
  37. package/dist/commands/recover.d.ts.map +1 -0
  38. package/dist/commands/recover.js +69 -0
  39. package/dist/commands/runtime.d.ts +2 -0
  40. package/dist/commands/runtime.d.ts.map +1 -1
  41. package/dist/commands/runtime.js +2 -0
  42. package/dist/commands/trace.d.ts +3 -0
  43. package/dist/commands/trace.d.ts.map +1 -0
  44. package/dist/commands/trace.js +45 -0
  45. package/dist/commands/verify.js +2 -2
  46. package/dist/config-report.d.ts +0 -1
  47. package/dist/config-report.d.ts.map +1 -1
  48. package/dist/config-report.js +1 -2
  49. package/dist/config.d.ts +0 -1
  50. package/dist/config.d.ts.map +1 -1
  51. package/dist/config.js +0 -1
  52. package/dist/context-report.d.ts +13 -7
  53. package/dist/context-report.d.ts.map +1 -1
  54. package/dist/context-report.js +64 -61
  55. package/dist/context-tool-hygiene.d.ts +36 -0
  56. package/dist/context-tool-hygiene.d.ts.map +1 -0
  57. package/dist/context-tool-hygiene.js +125 -0
  58. package/dist/dashboard/client.d.ts +2 -0
  59. package/dist/dashboard/client.d.ts.map +1 -0
  60. package/dist/dashboard/client.js +305 -0
  61. package/dist/dashboard/model.d.ts +13 -0
  62. package/dist/dashboard/model.d.ts.map +1 -0
  63. package/dist/dashboard/model.js +112 -0
  64. package/dist/dashboard/page.d.ts +3 -0
  65. package/dist/dashboard/page.d.ts.map +1 -0
  66. package/dist/dashboard/page.js +204 -0
  67. package/dist/dashboard/types.d.ts +63 -0
  68. package/dist/dashboard/types.d.ts.map +1 -0
  69. package/dist/dashboard/types.js +1 -0
  70. package/dist/dashboard-server.d.ts +24 -4
  71. package/dist/dashboard-server.d.ts.map +1 -1
  72. package/dist/dashboard-server.js +397 -302
  73. package/dist/discovery-registry.d.ts +17 -3
  74. package/dist/discovery-registry.d.ts.map +1 -1
  75. package/dist/discovery-registry.js +78 -3
  76. package/dist/doctor.d.ts +8 -0
  77. package/dist/doctor.d.ts.map +1 -1
  78. package/dist/doctor.js +116 -0
  79. package/dist/eval/llm-tasks.d.ts +5 -0
  80. package/dist/eval/llm-tasks.d.ts.map +1 -0
  81. package/dist/eval/llm-tasks.js +125 -0
  82. package/dist/eval/repo-tasks.d.ts +12 -0
  83. package/dist/eval/repo-tasks.d.ts.map +1 -0
  84. package/dist/eval/repo-tasks.js +220 -0
  85. package/dist/eval/runner.d.ts +3 -1
  86. package/dist/eval/runner.d.ts.map +1 -1
  87. package/dist/eval/runner.js +23 -4
  88. package/dist/eval/tasks.d.ts.map +1 -1
  89. package/dist/eval/tasks.js +186 -0
  90. package/dist/eval/types.d.ts +8 -5
  91. package/dist/eval/types.d.ts.map +1 -1
  92. package/dist/execution/event-bus.d.ts +44 -0
  93. package/dist/execution/event-bus.d.ts.map +1 -0
  94. package/dist/execution/event-bus.js +76 -0
  95. package/dist/execution/failure-classifier.d.ts +11 -0
  96. package/dist/execution/failure-classifier.d.ts.map +1 -0
  97. package/dist/execution/failure-classifier.js +66 -0
  98. package/dist/execution/progress-detector.d.ts +3 -0
  99. package/dist/execution/progress-detector.d.ts.map +1 -0
  100. package/dist/execution/progress-detector.js +23 -0
  101. package/dist/execution/recovery-controller.d.ts +24 -0
  102. package/dist/execution/recovery-controller.d.ts.map +1 -0
  103. package/dist/execution/recovery-controller.js +114 -0
  104. package/dist/execution/recovery-messages.d.ts +24 -0
  105. package/dist/execution/recovery-messages.d.ts.map +1 -0
  106. package/dist/execution/recovery-messages.js +48 -0
  107. package/dist/execution/recovery-metrics.d.ts +16 -0
  108. package/dist/execution/recovery-metrics.d.ts.map +1 -0
  109. package/dist/execution/recovery-metrics.js +73 -0
  110. package/dist/execution/recovery-strategy-planner.d.ts +6 -0
  111. package/dist/execution/recovery-strategy-planner.d.ts.map +1 -0
  112. package/dist/execution/recovery-strategy-planner.js +24 -0
  113. package/dist/execution/run-trace-store.d.ts +29 -0
  114. package/dist/execution/run-trace-store.d.ts.map +1 -0
  115. package/dist/execution/run-trace-store.js +140 -0
  116. package/dist/execution/staged-verifier.d.ts +33 -0
  117. package/dist/execution/staged-verifier.d.ts.map +1 -0
  118. package/dist/execution/staged-verifier.js +39 -0
  119. package/dist/execution/types.d.ts +58 -0
  120. package/dist/execution/types.d.ts.map +1 -0
  121. package/dist/execution/types.js +1 -0
  122. package/dist/execution/verification-loop.d.ts +58 -0
  123. package/dist/execution/verification-loop.d.ts.map +1 -0
  124. package/dist/execution/verification-loop.js +195 -0
  125. package/dist/execution/verification-stages.d.ts +17 -0
  126. package/dist/execution/verification-stages.d.ts.map +1 -0
  127. package/dist/execution/verification-stages.js +102 -0
  128. package/dist/help-topics.d.ts.map +1 -1
  129. package/dist/help-topics.js +11 -0
  130. package/dist/index.js +0 -8
  131. package/dist/lsp/ts-service.d.ts +36 -0
  132. package/dist/lsp/ts-service.d.ts.map +1 -0
  133. package/dist/lsp/ts-service.js +291 -0
  134. package/dist/memory/lifecycle.d.ts +19 -0
  135. package/dist/memory/lifecycle.d.ts.map +1 -0
  136. package/dist/memory/lifecycle.js +53 -0
  137. package/dist/memory.d.ts +0 -16
  138. package/dist/memory.d.ts.map +1 -1
  139. package/dist/memory.js +0 -36
  140. package/dist/metrics/collector.d.ts +7 -0
  141. package/dist/metrics/collector.d.ts.map +1 -1
  142. package/dist/metrics/collector.js +60 -0
  143. package/dist/mission/manager.d.ts +1 -0
  144. package/dist/mission/manager.d.ts.map +1 -1
  145. package/dist/mission/manager.js +9 -0
  146. package/dist/mission/progress-notify.d.ts +39 -0
  147. package/dist/mission/progress-notify.d.ts.map +1 -0
  148. package/dist/mission/progress-notify.js +386 -0
  149. package/dist/pipeline/hooks.d.ts +1 -1
  150. package/dist/pipeline/hooks.d.ts.map +1 -1
  151. package/dist/pipeline/hooks.js +1 -0
  152. package/dist/pipeline/sections.d.ts +8 -4
  153. package/dist/pipeline/sections.d.ts.map +1 -1
  154. package/dist/pipeline/sections.js +70 -27
  155. package/dist/pipeline/verification.d.ts +1 -0
  156. package/dist/pipeline/verification.d.ts.map +1 -1
  157. package/dist/pipeline/verification.js +10 -7
  158. package/dist/providers/llm-client.d.ts +38 -0
  159. package/dist/providers/llm-client.d.ts.map +1 -0
  160. package/dist/providers/llm-client.js +105 -0
  161. package/dist/sdk.d.ts +1 -0
  162. package/dist/sdk.d.ts.map +1 -1
  163. package/dist/sdk.js +1 -0
  164. package/dist/session/durable-session-supervisor.d.ts.map +1 -1
  165. package/dist/session/durable-session-supervisor.js +13 -6
  166. package/dist/session/session-persistence.d.ts +29 -0
  167. package/dist/session/session-persistence.d.ts.map +1 -0
  168. package/dist/session/session-persistence.js +45 -0
  169. package/dist/session/session-scheduler.d.ts +8 -1
  170. package/dist/session/session-scheduler.d.ts.map +1 -1
  171. package/dist/session/session-scheduler.js +33 -4
  172. package/dist/session-task-report.d.ts +1 -0
  173. package/dist/session-task-report.d.ts.map +1 -1
  174. package/dist/session-task-report.js +2 -1
  175. package/dist/shortcuts.d.ts.map +1 -1
  176. package/dist/shortcuts.js +1 -0
  177. package/dist/skills/registry.d.ts.map +1 -1
  178. package/dist/skills/registry.js +10 -0
  179. package/dist/skills/security-scan.d.ts +15 -0
  180. package/dist/skills/security-scan.d.ts.map +1 -0
  181. package/dist/skills/security-scan.js +95 -0
  182. package/dist/skills/types.d.ts +2 -0
  183. package/dist/skills/types.d.ts.map +1 -1
  184. package/dist/statusline.d.ts +3 -3
  185. package/dist/statusline.d.ts.map +1 -1
  186. package/dist/statusline.js +9 -17
  187. package/dist/token-usage.d.ts +27 -0
  188. package/dist/token-usage.d.ts.map +1 -0
  189. package/dist/token-usage.js +107 -0
  190. package/dist/tools/bash.d.ts.map +1 -1
  191. package/dist/tools/bash.js +5 -3
  192. package/dist/tools/browser-act-session.d.ts +48 -0
  193. package/dist/tools/browser-act-session.d.ts.map +1 -0
  194. package/dist/tools/browser-act-session.js +168 -0
  195. package/dist/tools/browser-act.d.ts +14 -0
  196. package/dist/tools/browser-act.d.ts.map +1 -0
  197. package/dist/tools/browser-act.js +297 -0
  198. package/dist/tools/code-symbols.d.ts +35 -0
  199. package/dist/tools/code-symbols.d.ts.map +1 -0
  200. package/dist/tools/code-symbols.js +257 -0
  201. package/dist/tools/index.d.ts +4 -1
  202. package/dist/tools/index.d.ts.map +1 -1
  203. package/dist/tools/index.js +22 -2
  204. package/dist/tools/lsp.d.ts +13 -0
  205. package/dist/tools/lsp.d.ts.map +1 -0
  206. package/dist/tools/lsp.js +136 -0
  207. package/dist/tools/patch.d.ts +5 -0
  208. package/dist/tools/patch.d.ts.map +1 -1
  209. package/dist/tools/patch.js +25 -4
  210. package/dist/tools/search.d.ts +7 -0
  211. package/dist/tools/search.d.ts.map +1 -1
  212. package/dist/tools/search.js +20 -3
  213. package/dist/tools/skill.d.ts +2 -0
  214. package/dist/tools/skill.d.ts.map +1 -1
  215. package/dist/tools/skill.js +47 -14
  216. package/dist/tools/subtask.d.ts +3 -1
  217. package/dist/tools/subtask.d.ts.map +1 -1
  218. package/dist/tools/subtask.js +151 -56
  219. package/dist/tui/shell.d.ts +12 -0
  220. package/dist/tui/shell.d.ts.map +1 -1
  221. package/dist/tui/shell.js +36 -3
  222. package/dist/tui/streaming-repl.d.ts +1 -0
  223. package/dist/tui/streaming-repl.d.ts.map +1 -1
  224. package/dist/tui/streaming-repl.js +27 -4
  225. package/dist/tui/streaming-tui.d.ts +10 -0
  226. package/dist/tui/streaming-tui.d.ts.map +1 -1
  227. package/dist/tui/streaming-tui.js +70 -12
  228. package/dist/types.d.ts +0 -8
  229. package/dist/types.d.ts.map +1 -1
  230. package/dist/workflow-runtime.d.ts.map +1 -1
  231. package/dist/workflow-runtime.js +10 -2
  232. package/dist/workflow-types.d.ts +2 -0
  233. package/dist/workflow-types.d.ts.map +1 -1
  234. package/docs/install.md +29 -8
  235. package/docs/skills.md +56 -7
  236. package/docs/web-routing.md +83 -0
  237. package/package.json +18 -4
  238. package/scripts/dep-layers.mjs +275 -0
  239. package/scripts/eval-llm.mjs +27 -0
  240. package/scripts/eval-recovery.mjs +101 -0
  241. package/scripts/eval-tasks.mjs +20 -0
  242. package/scripts/validate-packaging.mjs +51 -0
  243. package/skills/examples/README.md +23 -0
  244. package/skills/examples/add-function/SKILL.md +31 -0
  245. package/skills/examples/fix-failing-test/SKILL.md +32 -0
  246. package/skills/examples/pr-summary/SKILL.md +34 -0
  247. package/skills/lifecycle-build/SKILL.md +22 -0
  248. package/skills/lifecycle-plan/SKILL.md +32 -0
  249. package/skills/lifecycle-review/SKILL.md +25 -0
  250. package/skills/lifecycle-ship/SKILL.md +22 -0
  251. package/skills/lifecycle-spec/SKILL.md +24 -0
  252. package/skills/lifecycle-test/SKILL.md +21 -0
  253. package/skills/opencli/SKILL.md +222 -0
  254. package/skills/qling.md +14 -3
package/CHANGELOG.md CHANGED
@@ -1,7 +1,161 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ### Phase 7.0 — Sprint 4 分发与生态
6
+
7
+ - **`eval:tasks`**:10 个本地 repo fixture(修测试 / 改文案 / 加函数 / 重命名 / 修 import / package scripts / JSON / 文档节 / 多文件一致 / 中文路径),不依赖 LLM。
8
+ - **`validate:packaging`**:校验 Scoop / winget 草案版本与 `package.json` 对齐。
9
+ - **Scoop / winget 文档**:`docs/install.md` 与 `packaging/README.md` 补充本地校验步骤;清单版本钉到 1.1.0。
10
+ - **Skills 示例包**:`fix-failing-test` / `add-function` / `pr-summary` + `skills/examples/README.md`。
11
+ - **英文 README**:补齐 1.1 能力、eval、分发与 skills 说明。
12
+ - **Demo 说明**:`docs/demo.md`(文字演示路径;GIF 另录不入库)。
13
+ - **`ci:check`**:纳入 `eval:tasks` 与 `validate:packaging`。
14
+
15
+ ## v1.1.0 (2026-07-14)
16
+
17
+ 1.1 聚焦:**可证明的执行韧性**、**可维护的内核分层**、**编码/TUI 精度** 与 **Windows CI**。
18
+
19
+ ### Highlights
20
+
21
+ - 执行韧性:确定性恢复策略、`/recover`、验证闭环、脱敏 trace、`eval:recovery`
22
+ - 架构:从 `agent-loop` 抽出 LLM 客户端、工具编排、主循环、system prompt、session 持久、验证闭环
23
+ - 编码精度:patch 原子写、repo-map/search 预算、工具输出折叠与 CJK 宽度
24
+ - CI:ubuntu 全量 + windows unit
25
+
26
+ ### Phase 6.0 — Sprint 3 编码精度 / TUI / Windows CI
27
+
28
+ - **patch 原子写**:`writeFileAtomic`(temp + rename,Windows 回退直写),降低半截写入风险。
29
+ - **repo map 预算**:`buildRepoMapSection` 支持 `maxSymbols`/`maxChars`(默认 200 / 6000),超限截断并提示。
30
+ - **search 上下文卫生**:默认 limit 40;`truncateSearchLine` 截断过长匹配行。
31
+ - **TUI**:工具输出折叠 footer 中英双语;底部提示含 Shift+Tab / `/mode`;CJK `visibleWidth` 回归测试。
32
+ - **CI**:ubuntu 全量 `ci:check` + `windows-latest` 跑 unit(`npm run test`)。
33
+
34
+ ### Phase 5.2 — 巨石拆分预备
35
+
36
+ - **LLM 客户端抽出**:`src/providers/llm-client.ts`(`LlmHttpClient`)
37
+ - **记忆 lifecycle 抽出**:`src/memory/lifecycle.ts` 的 `runAutoDream`
38
+ - **Dashboard 解耦**:对 `dashboard-server` 动态 import
39
+ - **工具编排抽出**:`src/agent/tool-orchestrator.ts`
40
+ - **验证闭环抽出**:`src/execution/verification-loop.ts` + `recovery-messages.ts`
41
+ - **Session 持久抽出**:`src/session/session-persistence.ts`
42
+ - **主循环 / system prompt 抽出**:`src/agent/main-loop.ts`、`src/agent/system-prompt.ts`
43
+
44
+ ### Phase 5.1 — 验证闭环统一 + Doctor
45
+
46
+ - 写操作恢复只走 `StagedVerifier`;多阶段 env 配置
47
+ - Progress 含 `changedFiles` / 策略字段
48
+ - Doctor Phase5:`recovery_budget` / `run_traces` / `verifier_stages` / `verify_llm_advisory`
49
+ - Metrics:`pausedRuns`、`averageTimeToPauseMs`
50
+
51
+ ### Phase 5.0 — 执行韧性收口
52
+
53
+ - `RecoveryStrategyPlanner` + 暂停动作语义
54
+ - TUI 订阅 execution events
55
+ - `eval:recovery` 扩充
56
+
57
+ ### TUI / Dashboard / Phase 3–4(延续)
58
+
59
+ - Shift+Tab 模式循环、Slash 输入框修复、Dashboard 任务工作台
60
+ - Harness lean、progressive skills、角色 sub-agent、browser_act、LSP 可选等(详见下方历史与 v1.0.0)
61
+
62
+ ### Phase 3.4 — Eval harness 指标(smoke 增量)
63
+
64
+ - `eval:smoke` 新增:工具输出折叠、explore 只读、回传契约、skill 扫描、角色别名等本地任务。
65
+
66
+ ### Phase 3.3 — 浏览器 / 外联路由
67
+
68
+ - **`docs/web-routing.md`**:opencli / url_fetch / browser_fetch / browser_act 决策树。
69
+ - **`browser_act` 工具**:有限 goto/click/type/wait_for/extract/press;**默认关闭**(`QLING_BROWSER_ACT=1` 启用);共用网络 Guard;Plan Mode 禁止。
70
+ - opencli skill 与 system Restrictions 同步分工说明。
71
+
72
+ ### Phase 3.3.1 — browser_act 跨步会话
73
+
74
+ - **`session` 保活**:`open` / `close` / `status` + 同 session 上 click/type/extract。
75
+ - 空闲回收:`QLING_BROWSER_ACT_IDLE_TTL_MS`(默认 10min);上限 `QLING_BROWSER_ACT_MAX_SESSIONS`(默认 3)。
76
+ - 模块:`src/tools/browser-act-session.ts`。
77
+
78
+ ### Phase 3.2.1 — explore 并行(默认关)
79
+
80
+ - `subtask tasks=["…","…"]` + `role=explore|review`,须 `QLING_SUBTASK_PARALLEL=1`。
81
+ - implement 禁止并行;上限 `QLING_SUBTASK_PARALLEL_MAX`(默认 3)。
82
+ - 模块:`src/agent/subtask-parallel.ts`。
83
+
84
+ ### Phase 3.5 — Mission 进度通知
85
+
86
+ - 使命状态变更可推送 Telegram / Slack(需已配置 channel token + chat/channel id)。
87
+ - `QLING_MISSION_NOTIFY=off` 可关;`QLING_MISSION_TELEGRAM_CHAT_ID` / `QLING_MISSION_SLACK_CHANNEL_ID` 可选覆盖。
88
+
89
+ ### Phase 3.5.1 — 通知结构化卡片
90
+
91
+ - 默认 `QLING_MISSION_NOTIFY_STYLE=rich`:Telegram HTML、Slack Block Kit;`plain` 回退纯文本。
92
+ - 状态 emoji 前缀;失败带错误摘要。
93
+
94
+ ### Phase 3.5.2 — 使命日志推送 + Doctor Phase3
95
+
96
+ - **日志推送**:`appendLog` 可推送通道;`QLING_MISSION_NOTIFY_LOGS=off|milestone|all`(默认 milestone)。
97
+ - **`qling doctor`**:展示 browser_act / subtask_parallel / mission_notify 开关摘要。
98
+ - **可选 e2e**:`QLING_BROWSER_ACT_E2E=1` + `QLING_BROWSER_ACT=1` 跑真实 Playwright 冒烟(默认 skip)。
99
+
100
+ ### Phase 4.0–4.2 — 路线 + LLM eval + code_symbols
101
+
102
+ - **路线**:`docs/superpowers/specs/20260710-phase4-capability-roadmap-spec.md`
103
+ - **可选 LLM 评测**:`npm run eval:llm`(需 `QLING_EVAL_LLM=1` + API key;默认 skip,不进 ci:check)
104
+ - **工具 `code_symbols`**:工作区符号名检索(静态提取,非完整 LSP);explore/implement/review 可用
105
+ - eval:smoke 增加 code_symbols 本地任务
106
+
107
+ ### Phase 4.3 — 可选 TypeScript 语义查询(lsp)
108
+
109
+ - **工具 `lsp`**:`definition` / `hover` / `references` / `document_symbols`
110
+ - **默认关闭**:`QLING_LSP=1` 启用;动态加载 `typescript`(缺包时明确报错)
111
+ - 进程内 LanguageService(非 stdio 多语言 LSP 协议);`doctor` 展示 phase4:lsp
112
+ - 通用符号扫描仍用 `code_symbols`
113
+
114
+ ### Phase 4.4 — 模块分层与包边界
115
+
116
+ - **文档**:`docs/architecture-layers.md`(目标分层、禁止边、拆包门槛)
117
+ - **扫描**:`npm run dep:layers` → `scripts/dep-layers.mjs`(`--json` / `--write-doc` / `--strict`)
118
+ - **诚实债务**:记录 adapters→cli、eval/runtime 等反向依赖;strict 暂不进 ci:check
119
+
120
+ ### 审计收尾 — 本地优先与恢复边界
121
+
122
+ - Memory Dream LLM 改为仅在 `QLING_MEMORY_DREAM_LLM_ENABLED=true|1|on|yes` 时启用,SDK 直接构造默认不额外调用模型。
123
+ - 远程 discovery 默认拒绝未签名清单,并接入 network Guard、禁止自动重定向、限制 1 MiB 响应;需审批 source 在无审批回调时 fail-closed。
124
+ - Discovery 工具清单与运行时可执行工具分离,未绑定 handler/MCP transport 的 metadata 不再向模型宣称可调用。
125
+ - Workflow checkpoint 持久化状态机定义,恢复后迁移继续有效;非法 `runId` 和缺失定义的旧 checkpoint 明确拒绝。
126
+ - `browser_act` 在创建会话前完成 URL Guard 检查,拒绝目标不再留下空白 Playwright 会话。
127
+
3
128
  ## v1.0.0 (2026-07-09)
4
129
 
130
+ ### opencli 小红书路由补强
131
+
132
+ - skill `opencli` 增加小红书专节:`note`/`comments` 必须使用含 `xsec_token` 的完整 URL(禁止裸 note-id)。
133
+ - Restrictions 同步提示 xiaohongshu 正确传参。
134
+
135
+ ### Agent 任务执行基本规则
136
+
137
+ - 常驻 system prompt(Workflow / Restrictions / Tone)固化三条规则:
138
+ 1. 调用外部工具前先做工具与任务的关联分析
139
+ 2. 成功后总结正确可复现流程
140
+ 3. 单流程失败或未准确执行时实事求是承认
141
+
142
+ ### Agent 路由(opencli)
143
+
144
+ - **内置 skill `opencli`**:教模型用 `bash` + `opencli <site> … -f json` 获取平台数据;明确抖音≠TikTok、禁止 `url_fetch` 强反爬站。
145
+ - **system prompt 短路由**:Restrictions 中写入网页/社交平台调用规则。
146
+ - **skill 扫描路径**:包内 `skills/` + `~/.qling/skills/` + 工作区 skills,全局安装后仍能加载内置 skill。
147
+
148
+ ### Token 与预算
149
+
150
+ - **官方 usage 计数**:会话 token 仅累加模型 API 返回的 `prompt_tokens` / `completion_tokens` / `total_tokens`(及 Anthropic/Ollama 等价字段);不再用字符×4 估算账单。
151
+ - **删除预算功能**:移除 `TokenBudgetManager`、预算 nudge、system prompt Token 预算节、`max_token_budget` 配置接线与百分比水位。
152
+ - **展示**:`/usage`、`/context`、statusline 显示 total/in/out 与 `provider|unknown` 来源。
153
+
154
+ ### TUI 体验(结果聚焦)
155
+
156
+ - **输入区去噪**:输入框上方不再打印 statusline 与快捷键黑灰提示行;详情仍用 `/statusline`、`/shortcuts` 与顶栏。
157
+ - **结果高亮**:任务最终答复以「结果」边框强调;完成态改为醒目的「任务完成」+ 耗时。
158
+
5
159
  ### 发布收尾(发布就绪补丁)
6
160
 
7
161
  - **跨平台 CI**:`write-sandbox` 单测改用 `path.resolve`/`tmpdir`,去掉硬编码 `C:\\` 路径。
package/README.en.md CHANGED
@@ -2,13 +2,14 @@
2
2
 
3
3
  [![Node](https://img.shields.io/badge/Node-%E2%89%A518-339933?logo=node.js&logoColor=white)](#requirements)
4
4
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
5
- [![Version](https://img.shields.io/badge/version-1.0.0-orange.svg)](CHANGELOG.md)
5
+ [![Version](https://img.shields.io/badge/version-1.1.0-orange.svg)](CHANGELOG.md)
6
+ [![Release](https://img.shields.io/github/v/release/Zzy-min/qling?display_name=tag&sort=semver)](https://github.com/Zzy-min/qling/releases)
6
7
 
7
8
  **Qling** is a **local-first** AI Agent CLI workbench. It keeps sessions, tools, skills, permissions, diagnostics, long-running missions, and recovery controls in one auditable terminal console.
8
9
 
9
10
  > One line: Qling turns the agent into a local workbench—not a black-box chat window.
10
11
 
11
- **Chinese docs:** [README.md](README.md) · **Install details:** [docs/install.md](docs/install.md)
12
+ **Chinese docs:** [README.md](README.md) · **Install:** [docs/install.md](docs/install.md) · **Skills:** [docs/skills.md](docs/skills.md) · **Demo notes:** [docs/demo.md](docs/demo.md)
12
13
 
13
14
  ## Why Qling
14
15
 
@@ -16,15 +17,23 @@
16
17
  |---|---|
17
18
  | Local-first | Sessions, checkpoints, exports, memory, and diagnostics stay on disk; `qling privacy` shows boundaries. |
18
19
  | Chinese UX | TUI, help, and slash aliases target Chinese terminals (English works too). |
19
- | Recoverable | `/checkpoint`, `/resume`, daemon + mission state machines. |
20
+ | Recoverable | `/checkpoint`, `/resume`, `/recover`, staged verification, execution traces. |
20
21
  | Governed tools | Permission matrix, approval gate, content filter, audit log. |
21
22
  | Honest boundaries | Unsupported cloud features are explained—never faked. |
22
23
 
24
+ ## What's new in 1.1
25
+
26
+ - Deterministic recovery strategies + staged verification (`eval:recovery`)
27
+ - Leaner agent core: LLM client, tool orchestration, main loop, system prompt extracted from the monolith
28
+ - Coding precision: atomic patch writes, repo-map/search budgets, bilingual tool-output fold, CJK width
29
+ - Windows unit CI alongside full Ubuntu `ci:check`
30
+ - Sprint 4 ecosystem: `eval:tasks` fixtures, packaging validators, example skills pack
31
+
23
32
  ## Requirements
24
33
 
25
34
  - Node.js ≥ 18
26
35
  - npm ≥ 9
27
- - Optional: Playwright Chromium for `browser_fetch`
36
+ - Optional: Playwright Chromium for `browser_fetch` / `browser_act`
28
37
 
29
38
  ## Install
30
39
 
@@ -36,27 +45,37 @@ cd qling
36
45
  npm run bootstrap
37
46
  # optional browser tools:
38
47
  npm run bootstrap -- --with-browser
39
- ```
40
-
41
- Link the CLI globally:
42
-
43
- ```bash
44
48
  npm link
45
- qling
49
+ qling --version
46
50
  ```
47
51
 
48
52
  ### From npm
49
53
 
54
+ Package name is scoped: **`@qlingzzy/qling`** (CLI binary remains `qling`):
55
+
50
56
  ```bash
51
57
  npm install -g @qlingzzy/qling
52
- # CLI binary is still: qling
53
58
  qling bootstrap
54
59
  qling setup
55
60
  ```
56
61
 
57
- ### Windows notes
62
+ From GitHub without npm registry:
63
+
64
+ ```bash
65
+ npm install -g github:Zzy-min/qling
66
+ ```
67
+
68
+ > `better-sqlite3` is a native module. On Windows install [VS Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) if prebuilds are unavailable.
69
+
70
+ ### Windows: Scoop / winget drafts
71
+
72
+ Drafts live under `packaging/` and are **not** in official catalogs yet:
73
+
74
+ ```powershell
75
+ npm run validate:packaging
76
+ ```
58
77
 
59
- See [docs/install.md](docs/install.md) for PowerShell env vars, Scoop draft, and winget draft.
78
+ See [docs/install.md](docs/install.md) for PowerShell env vars, Scoop notes, and winget submission checklist.
60
79
 
61
80
  ## Minimal config
62
81
 
@@ -76,7 +95,7 @@ Interactive wizard (does **not** write secrets into `.env`):
76
95
  qling setup
77
96
  ```
78
97
 
79
- Any OpenAI-compatible endpoint works via `QLING_LLM_ENDPOINT` + `QLING_LLM_MODEL`.
98
+ Any OpenAI-compatible endpoint works via `QLING_LLM_ENDPOINT` + `QLING_LLM_MODEL`. Local models: `/model use ollama`.
80
99
 
81
100
  ## Four commands to try
82
101
 
@@ -105,24 +124,70 @@ qling privacy # data retention paths
105
124
  /model list provider presets
106
125
  /model use ollama
107
126
  /plan on read-only plan mode
127
+ /skill list progressive skills index
108
128
  /expand expand long tool output
129
+ /recover execution recovery controls
130
+ /verify verification command / stages
109
131
  /doctor environment check
110
132
  /privacy data boundaries
111
133
  ```
112
134
 
135
+ Shift+Tab cycles agent modes in the TUI.
136
+
137
+ ## Skills
138
+
139
+ Progressive skills: short index in the system prompt; full body loaded on demand via `skill` tool or `/skill`.
140
+
141
+ Bundled examples (`skills/examples/`):
142
+
143
+ | Skill | Use when |
144
+ |-------|----------|
145
+ | `repo-triage` | Onboarding an unfamiliar repo |
146
+ | `fix-failing-test` | Red unit tests |
147
+ | `add-function` | Small exported API addition |
148
+ | `pr-summary` | PR / release notes from git |
149
+
150
+ Also: `opencli`, lifecycle suite (`lifecycle-spec` … `lifecycle-ship`), template at `skills/templates/SKILL.md`.
151
+
152
+ Details: [docs/skills.md](docs/skills.md).
153
+
154
+ ## Eval & quality gates
155
+
156
+ ```bash
157
+ npm test # unit
158
+ npm run test:smoke
159
+ npm run eval:smoke # local policy/presets smoke
160
+ npm run eval:recovery # recovery planner fixtures
161
+ npm run eval:tasks # 10 coding repo fixtures (no LLM)
162
+ npm run validate:packaging
163
+ npm run ci:check # CI entry (ubuntu); windows runs unit
164
+ # optional with key:
165
+ QLING_EVAL_LLM=1 npm run eval:llm
166
+ ```
167
+
113
168
  ## Design principles
114
169
 
115
170
  - **Local-first** — valuable state stays on the machine.
116
171
  - **Slash-first** — discover controls from `/`.
117
- - **Recoverable** — checkpoint / resume / recap.
172
+ - **Recoverable** — checkpoint / resume / recover / verify.
118
173
  - **Honest boundaries** — no fake success for unsupported features.
119
174
  - **Terminal-native** — enhance TUI without heavy GUI deps.
120
175
 
176
+ ## Packaging status (honest)
177
+
178
+ | Channel | Status |
179
+ |---------|--------|
180
+ | Source + bootstrap | Ready |
181
+ | npm `@qlingzzy/qling` | Ready when published (`npm login` required on publisher machine) |
182
+ | Scoop | Draft manifest only |
183
+ | winget | Draft YAML only |
184
+ | Portable zip / single binary | Not yet |
185
+
121
186
  ## Version
122
187
 
123
- - Current: `1.0.0`
188
+ - Package: `1.1.0` (see latest tag on GitHub for hotfixes)
124
189
  - Changelog: [CHANGELOG.md](CHANGELOG.md)
125
- - Roadmap specs: `docs/superpowers/specs/`
190
+ - Specs / plans: `docs/superpowers/`
126
191
 
127
192
  ## License
128
193
 
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Node](https://img.shields.io/badge/Node-%E2%89%A518-339933?logo=node.js&logoColor=white)](#环境要求)
4
4
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
5
- [![Version](https://img.shields.io/badge/version-1.0.0-orange.svg)](CHANGELOG.md)
5
+ [![Version](https://img.shields.io/badge/version-1.1.0-orange.svg)](CHANGELOG.md)
6
6
 
7
7
  [English](README.en.md) · [安装指南](docs/install.md) · [CHANGELOG](CHANGELOG.md)
8
8
 
@@ -20,10 +20,10 @@
20
20
  | 可恢复长任务 | `/checkpoint`、`/resume`、`/rewind`、`--continue`、`qling workflow resume` 让中断后的上下文可以接上。 |
21
21
  | 本地 skill | `skills/` 与 `.qling/skills/` 中的 Markdown skill 可被 `/skill` 或 `/<skill-name>` 直接读取;内置命令优先级高于 skill。 |
22
22
  | 后台使命 | `qling daemon` + `qling mission` 提供长任务状态机、暂停 / 恢复 / 重试 / attach。 |
23
- | 观测台 | `qling dashboard start` 打开本地白盒化观测控制台,串起 thinking / tool / token 链路。 |
23
+ | 任务工作台 | `qling dashboard start` 打开仅监听本机的任务中心,统一查看 Mission、循环任务、Workflow、执行来源与最近活动。 |
24
24
  | 通道与扩展 | `src/channels/` 内置 console / Telegram / Slack 通道;`qling discovery sync` 动态同步插件与技能。 |
25
25
  | 权限可解释 | `/permissions`、`/permissions explain <tool>`、guard、内容过滤、速率限制和密钥脱敏都以本地规则呈现。 |
26
- | 上下文透明 | `/context`、`/usage` 显示 token 来源、估算、上下文预算和压缩状态。 |
26
+ | 上下文透明 | `/context`、`/usage` 显示 provider 官方 token usage 与压缩状态(无预算)。 |
27
27
  | 诊断内建 | `/doctor`、`/config`、`/mcp`、`/hooks`、`/diff` 用于快速判断当前项目和运行时状态。 |
28
28
  | 诚实边界 | 平台专属命令会被识别并给出本地边界说明,不会伪装成功。 |
29
29
 
@@ -219,7 +219,7 @@ qling 日志 <id> # logs <id>
219
219
  | Command | Purpose |
220
220
  |---|---|
221
221
  | `/model [model]` | 显示或切换当前 session 模型;不写入配置文件。 |
222
- | `/usage`, `/cost`, `/stats` | token 来源、用量、上下文预算和压缩状态。 |
222
+ | `/usage`, `/cost`, `/stats` | provider 官方 token usage(input/output/total)与压缩次数。 |
223
223
  | `/context` | 本地上下文和 token 使用情况。 |
224
224
  | `/statusline [on\|off]` | 显示或切换输入区状态线。 |
225
225
 
@@ -401,14 +401,22 @@ npm audit --registry=https://registry.npmjs.org --audit-level=high
401
401
 
402
402
  ## 版本与变更
403
403
 
404
- - 当前版本:`1.0.0`
404
+ - 当前版本:`1.1.0`(Sprint 4 分发/生态见 CHANGELOG Unreleased)
405
405
  - 完整变更历史:见 [CHANGELOG.md](CHANGELOG.md)
406
406
  - 安装与分发:见 [docs/install.md](docs/install.md)、[packaging/](packaging/)
407
407
  - Skills:见 [docs/skills.md](docs/skills.md)
408
+ - 演示路径:见 [docs/demo.md](docs/demo.md)
409
+ - 评测:`npm run eval:smoke` / `eval:recovery` / `eval:tasks`
410
+ - 网页/平台路由:见 [docs/web-routing.md](docs/web-routing.md)
408
411
  - SDK:见 [docs/sdk.md](docs/sdk.md)
409
- - 本地评测:`npm run eval:smoke`
412
+ - 本地评测:`npm run eval:smoke`(无 LLM);可选 `QLING_EVAL_LLM=1 npm run eval:llm`
413
+ - Phase 4 路线:`docs/superpowers/specs/20260710-phase4-capability-roadmap-spec.md`
414
+ - 可选 TS 语义:`QLING_LSP=1` 后使用工具 `lsp`(definition/hover/…)
415
+ - 模块分层:`docs/architecture-layers.md`;`npm run dep:layers`
410
416
  - 英文说明:见 [README.en.md](README.en.md)
411
- - 竞品对标与提升路线:见 `docs/superpowers/specs/20260709-agent-cli-competitive-analysis-and-v1-roadmap-spec.md`
417
+ - 竞品对标与 1.0 路线:见 `docs/superpowers/specs/20260709-agent-cli-competitive-analysis-and-v1-roadmap-spec.md`
418
+ - **2026-07 生态续调研与 Phase 3 路线**:见 `docs/superpowers/specs/20260710-agent-ecosystem-refresh-and-phase3-roadmap-spec.md`
419
+ - Phase 3 实施计划:见 `docs/superpowers/plans/20260710-phase3-harness-lean-skills-orchestration-plan.md`
412
420
  - 设计 / 实施文档:见 `docs/superpowers/specs/`、`docs/superpowers/plans/`
413
421
 
414
422
  ## License
@@ -0,0 +1,120 @@
1
+ import { type ChatUsage, type TokenUsageSource } from "../token-usage.js";
2
+ import type { Message, ToolCall, ToolDefinition } from "../types.js";
3
+ import type { ToolPipeline } from "../pipeline/hooks.js";
4
+ import type { GuardConfig } from "../config.js";
5
+ import type { Channel } from "../channels/types.js";
6
+ import type { ApprovalGate } from "../guard/approval.js";
7
+ import type { KnowledgeAgentAdapter } from "../knowledge-agent.js";
8
+ import type { MemoryStore } from "../memory.js";
9
+ import type { WorkflowRuntime } from "../workflow-runtime.js";
10
+ import type { ContextCompactor } from "../context-compactor.js";
11
+ import type { VerificationAgent } from "../pipeline/verification.js";
12
+ import type { ExecutionEventBus } from "../execution/event-bus.js";
13
+ import type { RecoveryController } from "../execution/recovery-controller.js";
14
+ import type { FailureClassification, RecoveryState } from "../execution/types.js";
15
+ import { type ReflectionDecision } from "./tool-orchestrator.js";
16
+ import type { LlmChatResponse } from "../providers/llm-client.js";
17
+ export interface TurnTelemetry {
18
+ turn: number;
19
+ toolCalls: number;
20
+ toolFailures: number;
21
+ }
22
+ export interface TokenCounters {
23
+ sessionTokens: number;
24
+ sessionPromptTokens: number;
25
+ sessionCompletionTokens: number;
26
+ tokenUsageSource: TokenUsageSource;
27
+ }
28
+ export declare function applyProviderUsage(counters: TokenCounters, usage: ChatUsage | undefined): TokenCounters;
29
+ export declare function logTurnTelemetry(metrics: TurnTelemetry, totals: {
30
+ toolCallTotal: number;
31
+ toolFailureTotal: number;
32
+ compactionCount: number;
33
+ retryCountTotal: number;
34
+ format: "text" | "json";
35
+ }): {
36
+ toolCallTotal: number;
37
+ toolFailureTotal: number;
38
+ };
39
+ export declare function distillSuccessfulBashPractices(preparedCalls: Array<{
40
+ call: ToolCall;
41
+ immediateResult?: {
42
+ is_error?: boolean;
43
+ };
44
+ }>, messages: Message[], memoryStore: MemoryStore): void;
45
+ export interface InnerLoopHost {
46
+ messages: Message[];
47
+ turnCount: number;
48
+ sessionId: string;
49
+ maxIterations: number;
50
+ toolRepeatLimit: number;
51
+ parseRetries: number;
52
+ verificationCommand: string | null;
53
+ counters: TokenCounters;
54
+ compactionCount: number;
55
+ toolCallTotal: number;
56
+ toolFailureTotal: number;
57
+ retryCountTotal: number;
58
+ loggingFormat: "text" | "json";
59
+ activeRunId?: string;
60
+ compactor: ContextCompactor;
61
+ pipeline: ToolPipeline;
62
+ tools: ToolDefinition[];
63
+ guardConfig: GuardConfig;
64
+ channel: Channel | null;
65
+ approvalGate: ApprovalGate;
66
+ knowledgeAdapter: KnowledgeAgentAdapter;
67
+ memoryStore: MemoryStore;
68
+ workspaceDir: string;
69
+ workflowRuntime: WorkflowRuntime;
70
+ executionEventBus: ExecutionEventBus;
71
+ recoveryController: RecoveryController;
72
+ verifier: VerificationAgent;
73
+ buildSystemPrompt: () => Promise<string>;
74
+ chat: (systemPrompt: string, overrides?: Record<string, unknown>) => Promise<LlmChatResponse>;
75
+ emit: (event: string, ...args: unknown[]) => void;
76
+ runVerificationCommand: (cmd: string) => Promise<{
77
+ code: number;
78
+ stdout: string;
79
+ stderr: string;
80
+ }>;
81
+ getRecoveryState: () => RecoveryState | null;
82
+ reflectiveThink: (tc: ToolCall) => Promise<{
83
+ decision: ReflectionDecision;
84
+ reason: string;
85
+ }>;
86
+ checkAutoDream: () => Promise<void>;
87
+ }
88
+ /**
89
+ * Inner maxIterations loop: compact → prompt → chat → tools → verify.
90
+ * Mutates host.messages / counters / turnCount in place.
91
+ */
92
+ export declare function runInnerIterationLoop(host: InnerLoopHost): Promise<string>;
93
+ export interface OuterLoopHost {
94
+ sessionId: string;
95
+ activeRun: {
96
+ runId: string;
97
+ sessionId: string;
98
+ originalTask: string;
99
+ startedAt: number;
100
+ } | null;
101
+ messages: Message[];
102
+ executionEventBus: ExecutionEventBus;
103
+ recoveryController: RecoveryController;
104
+ emit: (event: string, ...args: unknown[]) => void;
105
+ getRecoveryState: () => RecoveryState | null;
106
+ formatRecoveryPause: (reason: string, next: string) => string;
107
+ applyRecoveryStrategy: (failure: FailureClassification, strategy?: string) => Promise<void>;
108
+ executeInner: () => Promise<string>;
109
+ setActiveRun: (run: {
110
+ runId: string;
111
+ sessionId: string;
112
+ originalTask: string;
113
+ startedAt: number;
114
+ } | null) => void;
115
+ }
116
+ /**
117
+ * Outer loop: start run, handle provider transport retries + recovery strategy.
118
+ */
119
+ export declare function runOuterAgentLoop(host: OuterLoopHost): Promise<string>;
120
+ //# sourceMappingURL=main-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-loop.d.ts","sourceRoot":"","sources":["../../src/agent/main-loop.ts"],"names":[],"mappings":"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"}