@qlingzzy/qling 1.0.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 (512) hide show
  1. package/CHANGELOG.md +122 -0
  2. package/LICENSE +21 -0
  3. package/README.en.md +129 -0
  4. package/README.md +416 -0
  5. package/dist/agent/subtask.d.ts +21 -0
  6. package/dist/agent/subtask.d.ts.map +1 -0
  7. package/dist/agent/subtask.js +55 -0
  8. package/dist/agent-loop.d.ts +151 -0
  9. package/dist/agent-loop.d.ts.map +1 -0
  10. package/dist/agent-loop.js +1498 -0
  11. package/dist/agents/isolation-policy.d.ts +14 -0
  12. package/dist/agents/isolation-policy.d.ts.map +1 -0
  13. package/dist/agents/isolation-policy.js +52 -0
  14. package/dist/channels/console-channel.d.ts +15 -0
  15. package/dist/channels/console-channel.d.ts.map +1 -0
  16. package/dist/channels/console-channel.js +66 -0
  17. package/dist/channels/registry.d.ts +10 -0
  18. package/dist/channels/registry.d.ts.map +1 -0
  19. package/dist/channels/registry.js +25 -0
  20. package/dist/channels/slack-channel.d.ts +35 -0
  21. package/dist/channels/slack-channel.d.ts.map +1 -0
  22. package/dist/channels/slack-channel.js +232 -0
  23. package/dist/channels/telegram-channel.d.ts +32 -0
  24. package/dist/channels/telegram-channel.d.ts.map +1 -0
  25. package/dist/channels/telegram-channel.js +167 -0
  26. package/dist/channels/types.d.ts +31 -0
  27. package/dist/channels/types.d.ts.map +1 -0
  28. package/dist/channels/types.js +4 -0
  29. package/dist/cli/bootstrap.d.ts +39 -0
  30. package/dist/cli/bootstrap.d.ts.map +1 -0
  31. package/dist/cli/bootstrap.js +138 -0
  32. package/dist/cli/channel-bootstrap.d.ts +23 -0
  33. package/dist/cli/channel-bootstrap.d.ts.map +1 -0
  34. package/dist/cli/channel-bootstrap.js +46 -0
  35. package/dist/cli/daemon-control.d.ts +31 -0
  36. package/dist/cli/daemon-control.d.ts.map +1 -0
  37. package/dist/cli/daemon-control.js +177 -0
  38. package/dist/cli/guidance-panel.d.ts +11 -0
  39. package/dist/cli/guidance-panel.d.ts.map +1 -0
  40. package/dist/cli/guidance-panel.js +16 -0
  41. package/dist/cli/mcp-control.d.ts +7 -0
  42. package/dist/cli/mcp-control.d.ts.map +1 -0
  43. package/dist/cli/mcp-control.js +119 -0
  44. package/dist/cli/mission-views.d.ts +13 -0
  45. package/dist/cli/mission-views.d.ts.map +1 -0
  46. package/dist/cli/mission-views.js +82 -0
  47. package/dist/cli/setup.d.ts +9 -0
  48. package/dist/cli/setup.d.ts.map +1 -0
  49. package/dist/cli/setup.js +140 -0
  50. package/dist/cli/startup-contract.d.ts +23 -0
  51. package/dist/cli/startup-contract.d.ts.map +1 -0
  52. package/dist/cli/startup-contract.js +694 -0
  53. package/dist/commands/agents.d.ts +3 -0
  54. package/dist/commands/agents.d.ts.map +1 -0
  55. package/dist/commands/agents.js +44 -0
  56. package/dist/commands/checkpoint.d.ts +3 -0
  57. package/dist/commands/checkpoint.d.ts.map +1 -0
  58. package/dist/commands/checkpoint.js +52 -0
  59. package/dist/commands/claude-style.d.ts +12 -0
  60. package/dist/commands/claude-style.d.ts.map +1 -0
  61. package/dist/commands/claude-style.js +560 -0
  62. package/dist/commands/clear.d.ts +3 -0
  63. package/dist/commands/clear.d.ts.map +1 -0
  64. package/dist/commands/clear.js +20 -0
  65. package/dist/commands/compact.d.ts +3 -0
  66. package/dist/commands/compact.d.ts.map +1 -0
  67. package/dist/commands/compact.js +23 -0
  68. package/dist/commands/config.d.ts +3 -0
  69. package/dist/commands/config.d.ts.map +1 -0
  70. package/dist/commands/config.js +22 -0
  71. package/dist/commands/connect.d.ts +3 -0
  72. package/dist/commands/connect.d.ts.map +1 -0
  73. package/dist/commands/connect.js +102 -0
  74. package/dist/commands/context.d.ts +3 -0
  75. package/dist/commands/context.d.ts.map +1 -0
  76. package/dist/commands/context.js +13 -0
  77. package/dist/commands/dashboard.d.ts +3 -0
  78. package/dist/commands/dashboard.d.ts.map +1 -0
  79. package/dist/commands/dashboard.js +22 -0
  80. package/dist/commands/detach.d.ts +3 -0
  81. package/dist/commands/detach.d.ts.map +1 -0
  82. package/dist/commands/detach.js +44 -0
  83. package/dist/commands/distill.d.ts +3 -0
  84. package/dist/commands/distill.d.ts.map +1 -0
  85. package/dist/commands/distill.js +23 -0
  86. package/dist/commands/doctor.d.ts +3 -0
  87. package/dist/commands/doctor.d.ts.map +1 -0
  88. package/dist/commands/doctor.js +13 -0
  89. package/dist/commands/dream.d.ts +3 -0
  90. package/dist/commands/dream.d.ts.map +1 -0
  91. package/dist/commands/dream.js +59 -0
  92. package/dist/commands/export.d.ts +3 -0
  93. package/dist/commands/export.d.ts.map +1 -0
  94. package/dist/commands/export.js +18 -0
  95. package/dist/commands/exports.d.ts +3 -0
  96. package/dist/commands/exports.d.ts.map +1 -0
  97. package/dist/commands/exports.js +15 -0
  98. package/dist/commands/goal.d.ts +3 -0
  99. package/dist/commands/goal.d.ts.map +1 -0
  100. package/dist/commands/goal.js +147 -0
  101. package/dist/commands/help.d.ts +4 -0
  102. package/dist/commands/help.d.ts.map +1 -0
  103. package/dist/commands/help.js +75 -0
  104. package/dist/commands/hooks.d.ts +3 -0
  105. package/dist/commands/hooks.d.ts.map +1 -0
  106. package/dist/commands/hooks.js +14 -0
  107. package/dist/commands/index.d.ts +29 -0
  108. package/dist/commands/index.d.ts.map +1 -0
  109. package/dist/commands/index.js +417 -0
  110. package/dist/commands/knowledge.d.ts +8 -0
  111. package/dist/commands/knowledge.d.ts.map +1 -0
  112. package/dist/commands/knowledge.js +191 -0
  113. package/dist/commands/loop.d.ts +3 -0
  114. package/dist/commands/loop.d.ts.map +1 -0
  115. package/dist/commands/loop.js +138 -0
  116. package/dist/commands/mcp.d.ts +3 -0
  117. package/dist/commands/mcp.d.ts.map +1 -0
  118. package/dist/commands/mcp.js +57 -0
  119. package/dist/commands/memory.d.ts +3 -0
  120. package/dist/commands/memory.d.ts.map +1 -0
  121. package/dist/commands/memory.js +215 -0
  122. package/dist/commands/mission.d.ts +3 -0
  123. package/dist/commands/mission.d.ts.map +1 -0
  124. package/dist/commands/mission.js +129 -0
  125. package/dist/commands/permissions.d.ts +3 -0
  126. package/dist/commands/permissions.d.ts.map +1 -0
  127. package/dist/commands/permissions.js +82 -0
  128. package/dist/commands/privacy.d.ts +3 -0
  129. package/dist/commands/privacy.d.ts.map +1 -0
  130. package/dist/commands/privacy.js +13 -0
  131. package/dist/commands/recap.d.ts +3 -0
  132. package/dist/commands/recap.d.ts.map +1 -0
  133. package/dist/commands/recap.js +11 -0
  134. package/dist/commands/repomap.d.ts +3 -0
  135. package/dist/commands/repomap.d.ts.map +1 -0
  136. package/dist/commands/repomap.js +146 -0
  137. package/dist/commands/resume.d.ts +3 -0
  138. package/dist/commands/resume.d.ts.map +1 -0
  139. package/dist/commands/resume.js +42 -0
  140. package/dist/commands/runtime.d.ts +61 -0
  141. package/dist/commands/runtime.d.ts.map +1 -0
  142. package/dist/commands/runtime.js +20 -0
  143. package/dist/commands/sessions.d.ts +3 -0
  144. package/dist/commands/sessions.d.ts.map +1 -0
  145. package/dist/commands/sessions.js +34 -0
  146. package/dist/commands/shortcuts.d.ts +3 -0
  147. package/dist/commands/shortcuts.d.ts.map +1 -0
  148. package/dist/commands/shortcuts.js +12 -0
  149. package/dist/commands/skill.d.ts +3 -0
  150. package/dist/commands/skill.d.ts.map +1 -0
  151. package/dist/commands/skill.js +20 -0
  152. package/dist/commands/status.d.ts +3 -0
  153. package/dist/commands/status.d.ts.map +1 -0
  154. package/dist/commands/status.js +31 -0
  155. package/dist/commands/statusline.d.ts +3 -0
  156. package/dist/commands/statusline.d.ts.map +1 -0
  157. package/dist/commands/statusline.js +40 -0
  158. package/dist/commands/storage.d.ts +3 -0
  159. package/dist/commands/storage.d.ts.map +1 -0
  160. package/dist/commands/storage.js +122 -0
  161. package/dist/commands/tasks.d.ts +3 -0
  162. package/dist/commands/tasks.d.ts.map +1 -0
  163. package/dist/commands/tasks.js +117 -0
  164. package/dist/commands/types.d.ts +14 -0
  165. package/dist/commands/types.d.ts.map +1 -0
  166. package/dist/commands/types.js +1 -0
  167. package/dist/commands/verify.d.ts +3 -0
  168. package/dist/commands/verify.d.ts.map +1 -0
  169. package/dist/commands/verify.js +86 -0
  170. package/dist/config-report.d.ts +35 -0
  171. package/dist/config-report.d.ts.map +1 -0
  172. package/dist/config-report.js +100 -0
  173. package/dist/config.d.ts +217 -0
  174. package/dist/config.d.ts.map +1 -0
  175. package/dist/config.js +690 -0
  176. package/dist/context-compactor.d.ts +27 -0
  177. package/dist/context-compactor.d.ts.map +1 -0
  178. package/dist/context-compactor.js +489 -0
  179. package/dist/context-report.d.ts +35 -0
  180. package/dist/context-report.d.ts.map +1 -0
  181. package/dist/context-report.js +172 -0
  182. package/dist/daemon.d.ts +2 -0
  183. package/dist/daemon.d.ts.map +1 -0
  184. package/dist/daemon.js +316 -0
  185. package/dist/dashboard-server.d.ts +18 -0
  186. package/dist/dashboard-server.d.ts.map +1 -0
  187. package/dist/dashboard-server.js +325 -0
  188. package/dist/discovery-registry.d.ts +28 -0
  189. package/dist/discovery-registry.d.ts.map +1 -0
  190. package/dist/discovery-registry.js +106 -0
  191. package/dist/discovery-types.d.ts +54 -0
  192. package/dist/discovery-types.d.ts.map +1 -0
  193. package/dist/discovery-types.js +5 -0
  194. package/dist/doctor.d.ts +31 -0
  195. package/dist/doctor.d.ts.map +1 -0
  196. package/dist/doctor.js +343 -0
  197. package/dist/eval/runner.d.ts +10 -0
  198. package/dist/eval/runner.d.ts.map +1 -0
  199. package/dist/eval/runner.js +78 -0
  200. package/dist/eval/tasks.d.ts +3 -0
  201. package/dist/eval/tasks.d.ts.map +1 -0
  202. package/dist/eval/tasks.js +179 -0
  203. package/dist/eval/types.d.ts +31 -0
  204. package/dist/eval/types.d.ts.map +1 -0
  205. package/dist/eval/types.js +4 -0
  206. package/dist/git/auto-commit.d.ts +28 -0
  207. package/dist/git/auto-commit.d.ts.map +1 -0
  208. package/dist/git/auto-commit.js +112 -0
  209. package/dist/guard/approval.d.ts +16 -0
  210. package/dist/guard/approval.d.ts.map +1 -0
  211. package/dist/guard/approval.js +68 -0
  212. package/dist/guard/content-filter.d.ts +15 -0
  213. package/dist/guard/content-filter.d.ts.map +1 -0
  214. package/dist/guard/content-filter.js +102 -0
  215. package/dist/guard/permissions.d.ts +17 -0
  216. package/dist/guard/permissions.d.ts.map +1 -0
  217. package/dist/guard/permissions.js +54 -0
  218. package/dist/guard/rate-limit.d.ts +14 -0
  219. package/dist/guard/rate-limit.d.ts.map +1 -0
  220. package/dist/guard/rate-limit.js +47 -0
  221. package/dist/guard.d.ts +21 -0
  222. package/dist/guard.d.ts.map +1 -0
  223. package/dist/guard.js +144 -0
  224. package/dist/help-topics.d.ts +19 -0
  225. package/dist/help-topics.d.ts.map +1 -0
  226. package/dist/help-topics.js +391 -0
  227. package/dist/hooks-report.d.ts +23 -0
  228. package/dist/hooks-report.d.ts.map +1 -0
  229. package/dist/hooks-report.js +44 -0
  230. package/dist/i18n/index.d.ts +5 -0
  231. package/dist/i18n/index.d.ts.map +1 -0
  232. package/dist/i18n/index.js +4 -0
  233. package/dist/i18n/zh-cn.d.ts +180 -0
  234. package/dist/i18n/zh-cn.d.ts.map +1 -0
  235. package/dist/i18n/zh-cn.js +184 -0
  236. package/dist/index.d.ts +3 -0
  237. package/dist/index.d.ts.map +1 -0
  238. package/dist/index.js +1157 -0
  239. package/dist/knowledge-agent.d.ts +47 -0
  240. package/dist/knowledge-agent.d.ts.map +1 -0
  241. package/dist/knowledge-agent.js +320 -0
  242. package/dist/local-status-report.d.ts +23 -0
  243. package/dist/local-status-report.d.ts.map +1 -0
  244. package/dist/local-status-report.js +63 -0
  245. package/dist/local-storage-report.d.ts +32 -0
  246. package/dist/local-storage-report.d.ts.map +1 -0
  247. package/dist/local-storage-report.js +171 -0
  248. package/dist/mcp/bridge.d.ts +11 -0
  249. package/dist/mcp/bridge.d.ts.map +1 -0
  250. package/dist/mcp/bridge.js +37 -0
  251. package/dist/mcp/client.d.ts +26 -0
  252. package/dist/mcp/client.d.ts.map +1 -0
  253. package/dist/mcp/client.js +209 -0
  254. package/dist/mcp/http-transport.d.ts +21 -0
  255. package/dist/mcp/http-transport.d.ts.map +1 -0
  256. package/dist/mcp/http-transport.js +126 -0
  257. package/dist/mcp/presets.d.ts +22 -0
  258. package/dist/mcp/presets.d.ts.map +1 -0
  259. package/dist/mcp/presets.js +80 -0
  260. package/dist/mcp/registry.d.ts +23 -0
  261. package/dist/mcp/registry.d.ts.map +1 -0
  262. package/dist/mcp/registry.js +85 -0
  263. package/dist/mcp/stdio-transport.d.ts +25 -0
  264. package/dist/mcp/stdio-transport.d.ts.map +1 -0
  265. package/dist/mcp/stdio-transport.js +92 -0
  266. package/dist/mcp/store.d.ts +41 -0
  267. package/dist/mcp/store.d.ts.map +1 -0
  268. package/dist/mcp/store.js +100 -0
  269. package/dist/mcp/types.d.ts +40 -0
  270. package/dist/mcp/types.d.ts.map +1 -0
  271. package/dist/mcp/types.js +4 -0
  272. package/dist/mcp-report.d.ts +30 -0
  273. package/dist/mcp-report.d.ts.map +1 -0
  274. package/dist/mcp-report.js +104 -0
  275. package/dist/memory/cognitive-index.d.ts +56 -0
  276. package/dist/memory/cognitive-index.d.ts.map +1 -0
  277. package/dist/memory/cognitive-index.js +265 -0
  278. package/dist/memory/compactor.d.ts +28 -0
  279. package/dist/memory/compactor.d.ts.map +1 -0
  280. package/dist/memory/compactor.js +92 -0
  281. package/dist/memory/consolidation.d.ts +13 -0
  282. package/dist/memory/consolidation.d.ts.map +1 -0
  283. package/dist/memory/consolidation.js +77 -0
  284. package/dist/memory/embedding.d.ts +15 -0
  285. package/dist/memory/embedding.d.ts.map +1 -0
  286. package/dist/memory/embedding.js +59 -0
  287. package/dist/memory/memory-llm-dream.d.ts +3 -0
  288. package/dist/memory/memory-llm-dream.d.ts.map +1 -0
  289. package/dist/memory/memory-llm-dream.js +59 -0
  290. package/dist/memory/projection-worker.d.ts +30 -0
  291. package/dist/memory/projection-worker.d.ts.map +1 -0
  292. package/dist/memory/projection-worker.js +92 -0
  293. package/dist/memory/semantic-index.d.ts +18 -0
  294. package/dist/memory/semantic-index.d.ts.map +1 -0
  295. package/dist/memory/semantic-index.js +86 -0
  296. package/dist/memory/wal.d.ts +33 -0
  297. package/dist/memory/wal.d.ts.map +1 -0
  298. package/dist/memory/wal.js +131 -0
  299. package/dist/memory-report.d.ts +120 -0
  300. package/dist/memory-report.d.ts.map +1 -0
  301. package/dist/memory-report.js +726 -0
  302. package/dist/memory.d.ts +149 -0
  303. package/dist/memory.d.ts.map +1 -0
  304. package/dist/memory.js +632 -0
  305. package/dist/metrics/agent-telemetry.d.ts +14 -0
  306. package/dist/metrics/agent-telemetry.d.ts.map +1 -0
  307. package/dist/metrics/agent-telemetry.js +44 -0
  308. package/dist/metrics/collector.d.ts +17 -0
  309. package/dist/metrics/collector.d.ts.map +1 -0
  310. package/dist/metrics/collector.js +137 -0
  311. package/dist/metrics/types.d.ts +14 -0
  312. package/dist/metrics/types.d.ts.map +1 -0
  313. package/dist/metrics/types.js +4 -0
  314. package/dist/mission/manager.d.ts +28 -0
  315. package/dist/mission/manager.d.ts.map +1 -0
  316. package/dist/mission/manager.js +208 -0
  317. package/dist/mission/types.d.ts +37 -0
  318. package/dist/mission/types.d.ts.map +1 -0
  319. package/dist/mission/types.js +5 -0
  320. package/dist/onboarding/tutorial.d.ts +33 -0
  321. package/dist/onboarding/tutorial.d.ts.map +1 -0
  322. package/dist/onboarding/tutorial.js +96 -0
  323. package/dist/output-style.d.ts +14 -0
  324. package/dist/output-style.d.ts.map +1 -0
  325. package/dist/output-style.js +29 -0
  326. package/dist/package-version.d.ts +12 -0
  327. package/dist/package-version.d.ts.map +1 -0
  328. package/dist/package-version.js +42 -0
  329. package/dist/permissions-report.d.ts +42 -0
  330. package/dist/permissions-report.d.ts.map +1 -0
  331. package/dist/permissions-report.js +120 -0
  332. package/dist/pipeline/consistency-checker.d.ts +8 -0
  333. package/dist/pipeline/consistency-checker.d.ts.map +1 -0
  334. package/dist/pipeline/consistency-checker.js +40 -0
  335. package/dist/pipeline/example-generator.d.ts +4 -0
  336. package/dist/pipeline/example-generator.d.ts.map +1 -0
  337. package/dist/pipeline/example-generator.js +64 -0
  338. package/dist/pipeline/hooks.d.ts +68 -0
  339. package/dist/pipeline/hooks.d.ts.map +1 -0
  340. package/dist/pipeline/hooks.js +377 -0
  341. package/dist/pipeline/sections.d.ts +41 -0
  342. package/dist/pipeline/sections.d.ts.map +1 -0
  343. package/dist/pipeline/sections.js +244 -0
  344. package/dist/pipeline/verification.d.ts +12 -0
  345. package/dist/pipeline/verification.d.ts.map +1 -0
  346. package/dist/pipeline/verification.js +138 -0
  347. package/dist/privacy-report.d.ts +24 -0
  348. package/dist/privacy-report.d.ts.map +1 -0
  349. package/dist/privacy-report.js +78 -0
  350. package/dist/providers/presets.d.ts +25 -0
  351. package/dist/providers/presets.d.ts.map +1 -0
  352. package/dist/providers/presets.js +205 -0
  353. package/dist/recap.d.ts +38 -0
  354. package/dist/recap.d.ts.map +1 -0
  355. package/dist/recap.js +154 -0
  356. package/dist/repl.d.ts +41 -0
  357. package/dist/repl.d.ts.map +1 -0
  358. package/dist/repl.js +396 -0
  359. package/dist/runtime-paths.d.ts +32 -0
  360. package/dist/runtime-paths.d.ts.map +1 -0
  361. package/dist/runtime-paths.js +134 -0
  362. package/dist/sdk.d.ts +12 -0
  363. package/dist/sdk.d.ts.map +1 -0
  364. package/dist/sdk.js +18 -0
  365. package/dist/session/daemon-session-api.d.ts +22 -0
  366. package/dist/session/daemon-session-api.d.ts.map +1 -0
  367. package/dist/session/daemon-session-api.js +48 -0
  368. package/dist/session/durable-session-supervisor.d.ts +24 -0
  369. package/dist/session/durable-session-supervisor.d.ts.map +1 -0
  370. package/dist/session/durable-session-supervisor.js +195 -0
  371. package/dist/session/goal-controller.d.ts +43 -0
  372. package/dist/session/goal-controller.d.ts.map +1 -0
  373. package/dist/session/goal-controller.js +77 -0
  374. package/dist/session/goal-evaluator.d.ts +29 -0
  375. package/dist/session/goal-evaluator.d.ts.map +1 -0
  376. package/dist/session/goal-evaluator.js +100 -0
  377. package/dist/session/loop-prompt.d.ts +14 -0
  378. package/dist/session/loop-prompt.d.ts.map +1 -0
  379. package/dist/session/loop-prompt.js +49 -0
  380. package/dist/session/session-goal-manager.d.ts +51 -0
  381. package/dist/session/session-goal-manager.d.ts.map +1 -0
  382. package/dist/session/session-goal-manager.js +118 -0
  383. package/dist/session/session-registry.d.ts +40 -0
  384. package/dist/session/session-registry.d.ts.map +1 -0
  385. package/dist/session/session-registry.js +124 -0
  386. package/dist/session/session-scheduler.d.ts +59 -0
  387. package/dist/session/session-scheduler.d.ts.map +1 -0
  388. package/dist/session/session-scheduler.js +170 -0
  389. package/dist/session-checkpoint-report.d.ts +22 -0
  390. package/dist/session-checkpoint-report.d.ts.map +1 -0
  391. package/dist/session-checkpoint-report.js +99 -0
  392. package/dist/session-export-index.d.ts +23 -0
  393. package/dist/session-export-index.d.ts.map +1 -0
  394. package/dist/session-export-index.js +96 -0
  395. package/dist/session-export.d.ts +28 -0
  396. package/dist/session-export.d.ts.map +1 -0
  397. package/dist/session-export.js +99 -0
  398. package/dist/session-goal-report.d.ts +37 -0
  399. package/dist/session-goal-report.d.ts.map +1 -0
  400. package/dist/session-goal-report.js +219 -0
  401. package/dist/session-list-report.d.ts +16 -0
  402. package/dist/session-list-report.d.ts.map +1 -0
  403. package/dist/session-list-report.js +60 -0
  404. package/dist/session-task-report.d.ts +23 -0
  405. package/dist/session-task-report.d.ts.map +1 -0
  406. package/dist/session-task-report.js +183 -0
  407. package/dist/shortcuts.d.ts +2 -0
  408. package/dist/shortcuts.d.ts.map +1 -0
  409. package/dist/shortcuts.js +32 -0
  410. package/dist/skills/registry.d.ts +8 -0
  411. package/dist/skills/registry.d.ts.map +1 -0
  412. package/dist/skills/registry.js +119 -0
  413. package/dist/skills/types.d.ts +7 -0
  414. package/dist/skills/types.d.ts.map +1 -0
  415. package/dist/skills/types.js +4 -0
  416. package/dist/statusline.d.ts +37 -0
  417. package/dist/statusline.d.ts.map +1 -0
  418. package/dist/statusline.js +207 -0
  419. package/dist/tools/bash.d.ts +10 -0
  420. package/dist/tools/bash.d.ts.map +1 -0
  421. package/dist/tools/bash.js +278 -0
  422. package/dist/tools/browser-fetch.d.ts +7 -0
  423. package/dist/tools/browser-fetch.d.ts.map +1 -0
  424. package/dist/tools/browser-fetch.js +133 -0
  425. package/dist/tools/error-utils.d.ts +9 -0
  426. package/dist/tools/error-utils.d.ts.map +1 -0
  427. package/dist/tools/error-utils.js +35 -0
  428. package/dist/tools/index.d.ts +27 -0
  429. package/dist/tools/index.d.ts.map +1 -0
  430. package/dist/tools/index.js +86 -0
  431. package/dist/tools/patch.d.ts +22 -0
  432. package/dist/tools/patch.d.ts.map +1 -0
  433. package/dist/tools/patch.js +458 -0
  434. package/dist/tools/planner.d.ts +7 -0
  435. package/dist/tools/planner.d.ts.map +1 -0
  436. package/dist/tools/planner.js +148 -0
  437. package/dist/tools/read.d.ts +8 -0
  438. package/dist/tools/read.d.ts.map +1 -0
  439. package/dist/tools/read.js +114 -0
  440. package/dist/tools/search.d.ts +11 -0
  441. package/dist/tools/search.d.ts.map +1 -0
  442. package/dist/tools/search.js +636 -0
  443. package/dist/tools/skill.d.ts +8 -0
  444. package/dist/tools/skill.d.ts.map +1 -0
  445. package/dist/tools/skill.js +181 -0
  446. package/dist/tools/subtask.d.ts +9 -0
  447. package/dist/tools/subtask.d.ts.map +1 -0
  448. package/dist/tools/subtask.js +120 -0
  449. package/dist/tools/todo.d.ts +8 -0
  450. package/dist/tools/todo.d.ts.map +1 -0
  451. package/dist/tools/todo.js +170 -0
  452. package/dist/tools/url-fetch.d.ts +11 -0
  453. package/dist/tools/url-fetch.d.ts.map +1 -0
  454. package/dist/tools/url-fetch.js +208 -0
  455. package/dist/tools/vision-analyze.d.ts +9 -0
  456. package/dist/tools/vision-analyze.d.ts.map +1 -0
  457. package/dist/tools/vision-analyze.js +179 -0
  458. package/dist/tools/write.d.ts +7 -0
  459. package/dist/tools/write.d.ts.map +1 -0
  460. package/dist/tools/write.js +128 -0
  461. package/dist/tui/chrome.d.ts +7 -0
  462. package/dist/tui/chrome.d.ts.map +1 -0
  463. package/dist/tui/chrome.js +22 -0
  464. package/dist/tui/input-buffer.d.ts +37 -0
  465. package/dist/tui/input-buffer.d.ts.map +1 -0
  466. package/dist/tui/input-buffer.js +228 -0
  467. package/dist/tui/input-history.d.ts +11 -0
  468. package/dist/tui/input-history.d.ts.map +1 -0
  469. package/dist/tui/input-history.js +69 -0
  470. package/dist/tui/input-queue.d.ts +27 -0
  471. package/dist/tui/input-queue.d.ts.map +1 -0
  472. package/dist/tui/input-queue.js +85 -0
  473. package/dist/tui/markdown.d.ts +10 -0
  474. package/dist/tui/markdown.d.ts.map +1 -0
  475. package/dist/tui/markdown.js +396 -0
  476. package/dist/tui/progress.d.ts +3 -0
  477. package/dist/tui/progress.d.ts.map +1 -0
  478. package/dist/tui/progress.js +13 -0
  479. package/dist/tui/shell.d.ts +67 -0
  480. package/dist/tui/shell.d.ts.map +1 -0
  481. package/dist/tui/shell.js +271 -0
  482. package/dist/tui/streaming-repl.d.ts +39 -0
  483. package/dist/tui/streaming-repl.d.ts.map +1 -0
  484. package/dist/tui/streaming-repl.js +460 -0
  485. package/dist/tui/streaming-tui.d.ts +174 -0
  486. package/dist/tui/streaming-tui.d.ts.map +1 -0
  487. package/dist/tui/streaming-tui.js +1049 -0
  488. package/dist/types.d.ts +221 -0
  489. package/dist/types.d.ts.map +1 -0
  490. package/dist/types.js +37 -0
  491. package/dist/utils/symbol-extractor.d.ts +8 -0
  492. package/dist/utils/symbol-extractor.d.ts.map +1 -0
  493. package/dist/utils/symbol-extractor.js +190 -0
  494. package/dist/workflow-runtime.d.ts +45 -0
  495. package/dist/workflow-runtime.d.ts.map +1 -0
  496. package/dist/workflow-runtime.js +146 -0
  497. package/dist/workflow-types.d.ts +73 -0
  498. package/dist/workflow-types.d.ts.map +1 -0
  499. package/dist/workflow-types.js +34 -0
  500. package/docs/docker.md +66 -0
  501. package/docs/install.md +159 -0
  502. package/docs/sdk.md +67 -0
  503. package/docs/skills.md +51 -0
  504. package/package.json +102 -0
  505. package/scripts/bootstrap.mjs +63 -0
  506. package/scripts/check_image.ps1 +18 -0
  507. package/scripts/clean-dist.mjs +18 -0
  508. package/scripts/copy_image.ps1 +5 -0
  509. package/scripts/eval-smoke.mjs +17 -0
  510. package/skills/examples/repo-triage/SKILL.md +50 -0
  511. package/skills/qling.md +42 -0
  512. package/skills/templates/SKILL.md +37 -0
@@ -0,0 +1,47 @@
1
+ import { ToolCall, ToolResult } from "./types.js";
2
+ import { MemoryStore } from "./memory.js";
3
+ export interface Observation {
4
+ type: "tool_use" | "file_created" | "file_modified" | "error" | "concept" | "decision";
5
+ content: string;
6
+ metadata?: Record<string, string>;
7
+ timestamp: number;
8
+ confidence: number;
9
+ }
10
+ export interface KnowledgeItem {
11
+ id: string;
12
+ observation: Observation;
13
+ promoted: boolean;
14
+ tags: string[];
15
+ }
16
+ export declare class KnowledgeObserver {
17
+ private observations;
18
+ private pendingItems;
19
+ private memoryStore;
20
+ private turnCount;
21
+ private toolUseCounts;
22
+ private errorCounts;
23
+ constructor(memoryStore: MemoryStore);
24
+ observeUserMessage(content: string): void;
25
+ observeToolCall(toolCall: ToolCall): void;
26
+ observeToolResult(result: ToolResult, toolName: string): void;
27
+ observeAssistantMessage(content: string): void;
28
+ getContextualObservations(query: string, limit?: number): Observation[];
29
+ promoteToMemory(force?: boolean): Promise<number>;
30
+ generateReport(): string;
31
+ private addObservation;
32
+ private extractTags;
33
+ private isAlreadyInMemory;
34
+ }
35
+ export declare class KnowledgeAgentAdapter {
36
+ private observer;
37
+ private memoryStore;
38
+ private reportInterval;
39
+ constructor(memoryStore: MemoryStore);
40
+ onUserMessage(content: string): void;
41
+ onToolCall(toolCall: ToolCall): void;
42
+ onToolResult(result: ToolResult, toolName: string): void;
43
+ onAssistantMessage(content: string): void;
44
+ onTurnEnd(turnCount: number): Promise<void>;
45
+ getObserver(): KnowledgeObserver;
46
+ }
47
+ //# sourceMappingURL=knowledge-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-agent.d.ts","sourceRoot":"","sources":["../src/knowledge-agent.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAwB,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,eAAe,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;IACvF,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AA6CD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,WAAW,CAAkC;gBAEzC,WAAW,EAAE,WAAW;IAKpC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAkCzC,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA0CzC,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAoC7D,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAgB9C,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,WAAW,EAAE;IAkBpE,eAAe,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAiC9D,cAAc,IAAI,MAAM;IA0CxB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,WAAW;YAYL,iBAAiB;CAKhC;AAID,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAc;gBAExB,WAAW,EAAE,WAAW;IAMpC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKpC,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKpC,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKxD,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKnC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAejD,WAAW,IAAI,iBAAiB;CAGjC"}
@@ -0,0 +1,320 @@
1
+ // ============================================================
2
+ // 轻灵 - s07 Knowledge Agent(观察者模式)
3
+ // 参考 Microsoft AI Agents for Beginners Lesson 13 & 14
4
+ // 将 AutoDream 升级为知识观察者,主动学习项目上下文
5
+ // ============================================================
6
+ // --- 工具使用模式库 ---
7
+ const TOOL_USE_PATTERNS = [
8
+ // Git 操作
9
+ { tool: "bash", pattern: /\b(git\s+(add|commit|push|pull|merge|rebase|clone))\b/, tag: "git" },
10
+ // 包管理
11
+ { tool: "bash", pattern: /\b(npm\s+(install|run|test|build)|pip\s+install|yarn\s+(add|install))\b/, tag: "package-manager" },
12
+ // Docker
13
+ { tool: "bash", pattern: /\b(docker\s+(build|run|pull|ps|exec|logs))\b/, tag: "docker" },
14
+ // Kubernetes
15
+ { tool: "bash", pattern: /\b(kubectl\s+(get|apply|describe|logs|exec))\b/, tag: "kubernetes" },
16
+ // Python
17
+ { tool: "bash", pattern: /\b(python3?|pip3?|uv\s+)/, tag: "python" },
18
+ // TypeScript
19
+ { tool: "bash", pattern: /\b(npx|tsc|yarn\s+(dev|build))\b/, tag: "typescript" },
20
+ // 文件操作
21
+ { tool: "bash", pattern: /\b(ls|mkdir|rm|cp|mv|chmod|chown)\b/, tag: "file-ops" },
22
+ // 进程/服务
23
+ { tool: "bash", pattern: /\b(ps|kill|pkill|grep|top|htop)\b/, tag: "process" },
24
+ ];
25
+ // --- 文件变化模式 ---
26
+ const FILE_CREATED_PATTERNS = [
27
+ /文件已写入:\s*(.+)/,
28
+ /✅.*已创建:\s*(.+)/,
29
+ /created:\s*(.+)/i,
30
+ ];
31
+ const FILE_MODIFIED_PATTERNS = [
32
+ /修改了\s*(.+)/,
33
+ /updated:\s*(.+)/i,
34
+ /patched:\s*(.+)/i,
35
+ ];
36
+ // --- 错误模式 ---
37
+ const ERROR_PATTERNS = [
38
+ { pattern: /Error:\s*(.+)/i, tag: "generic-error" },
39
+ { pattern: /Traceback\s*\([^)]*\):\s*(.+)/i, tag: "python-error" },
40
+ { pattern: /SyntaxError:\s*(.+)/i, tag: "syntax-error" },
41
+ { pattern: /NotADirectoryError/i, tag: "path-error" },
42
+ { pattern: /WinError:\s*(.+)/i, tag: "windows-error" },
43
+ { pattern: /ModuleNotFoundError:\s*(.+)/i, tag: "import-error" },
44
+ ];
45
+ export class KnowledgeObserver {
46
+ observations = [];
47
+ pendingItems = [];
48
+ memoryStore;
49
+ turnCount = 0;
50
+ toolUseCounts = new Map();
51
+ errorCounts = new Map();
52
+ constructor(memoryStore) {
53
+ this.memoryStore = memoryStore;
54
+ }
55
+ // --- 观察用户消息 ---
56
+ observeUserMessage(content) {
57
+ this.turnCount++;
58
+ // 提取概念和决策
59
+ const conceptPatterns = [
60
+ /(?:使用|采用)\s+(\S+)\s+(?:框架|库|工具|方案)/g,
61
+ /(?:决定|选定)\s+(\S+)/g,
62
+ /(?:目标|计划)\s+[:-]\s*(.+)/g,
63
+ ];
64
+ for (const pat of conceptPatterns) {
65
+ let match;
66
+ while ((match = pat.exec(content)) !== null) {
67
+ this.addObservation({
68
+ type: "concept",
69
+ content: `用户提到: ${match[1].trim()}`,
70
+ timestamp: Date.now(),
71
+ confidence: 0.7,
72
+ });
73
+ }
74
+ }
75
+ // 观察是否有明确的决策
76
+ if (/决定|选定|采用|选择|不|不要/i.test(content)) {
77
+ this.addObservation({
78
+ type: "decision",
79
+ content: content.slice(0, 200),
80
+ timestamp: Date.now(),
81
+ confidence: 0.8,
82
+ });
83
+ }
84
+ }
85
+ // --- 观察工具调用 ---
86
+ observeToolCall(toolCall) {
87
+ const toolName = toolCall.name;
88
+ // 记录工具使用次数
89
+ this.toolUseCounts.set(toolName, (this.toolUseCounts.get(toolName) ?? 0) + 1);
90
+ // 提取工具使用模式
91
+ for (const entry of TOOL_USE_PATTERNS) {
92
+ if (entry.tool !== toolName)
93
+ continue;
94
+ const cmd = String(toolCall.arguments.command ?? "");
95
+ const match = entry.pattern.exec(cmd);
96
+ if (match) {
97
+ this.addObservation({
98
+ type: "tool_use",
99
+ content: `使用 ${entry.tag}: ${cmd.slice(0, 100)}`,
100
+ metadata: { tool: toolName, tag: entry.tag, command: cmd.slice(0, 100) },
101
+ timestamp: Date.now(),
102
+ confidence: 0.9,
103
+ });
104
+ }
105
+ }
106
+ // 文件路径提取
107
+ const pathPatterns = [
108
+ /([\/.a-zA-Z0-9_-]+\.(ts|js|py|json|md|yaml|yml|sh|bash))/g,
109
+ ];
110
+ for (const pat of pathPatterns) {
111
+ let match;
112
+ const argsStr = JSON.stringify(toolCall.arguments);
113
+ while ((match = pat.exec(argsStr)) !== null) {
114
+ this.addObservation({
115
+ type: "file_modified",
116
+ content: `涉及文件: ${match[1]}`,
117
+ metadata: { file: match[1] },
118
+ timestamp: Date.now(),
119
+ confidence: 0.8,
120
+ });
121
+ }
122
+ }
123
+ }
124
+ // --- 观察工具结果 ---
125
+ observeToolResult(result, toolName) {
126
+ if (result.is_error) {
127
+ // 错误观察
128
+ for (const ep of ERROR_PATTERNS) {
129
+ const match = ep.pattern.exec(result.output);
130
+ if (match) {
131
+ const tag = ep.tag;
132
+ this.errorCounts.set(tag, (this.errorCounts.get(tag) ?? 0) + 1);
133
+ this.addObservation({
134
+ type: "error",
135
+ content: `错误 [${tag}]: ${match[1].slice(0, 150)}`,
136
+ metadata: { errorType: tag, errorDetail: match[1].slice(0, 150) },
137
+ timestamp: Date.now(),
138
+ confidence: 0.9,
139
+ });
140
+ }
141
+ }
142
+ }
143
+ else {
144
+ // 成功结果 — 检查是否有文件创建
145
+ for (const pat of FILE_CREATED_PATTERNS) {
146
+ const match = pat.exec(result.output);
147
+ if (match) {
148
+ this.addObservation({
149
+ type: "file_created",
150
+ content: `创建文件: ${match[1]}`,
151
+ metadata: { file: match[1] },
152
+ timestamp: Date.now(),
153
+ confidence: 0.85,
154
+ });
155
+ }
156
+ }
157
+ }
158
+ }
159
+ // --- 观察 assistant 回复 ---
160
+ observeAssistantMessage(content) {
161
+ // 检查是否提到了某个工具的使用意图
162
+ const toolMentions = content.match(/\b(read|write|bash|todo|skill)\b/g);
163
+ if (toolMentions) {
164
+ const unique = Array.from(new Set(toolMentions));
165
+ this.addObservation({
166
+ type: "tool_use",
167
+ content: `助手计划使用工具: ${unique.join(", ")}`,
168
+ metadata: { plannedTools: unique.join(",") },
169
+ timestamp: Date.now(),
170
+ confidence: 0.5, // 低置信度,因为只是计划
171
+ });
172
+ }
173
+ }
174
+ // --- 主动观察:从记忆获取上下文 ---
175
+ getContextualObservations(query, limit = 5) {
176
+ const keywords = query.toLowerCase().split(/\s+/);
177
+ const scored = this.observations.map((obs) => {
178
+ let score = obs.confidence;
179
+ const content = obs.content.toLowerCase();
180
+ for (const kw of keywords) {
181
+ if (content.includes(kw))
182
+ score += 0.2;
183
+ }
184
+ return { obs, score };
185
+ });
186
+ return scored
187
+ .sort((a, b) => b.score - a.score)
188
+ .slice(0, limit)
189
+ .map((s) => s.obs);
190
+ }
191
+ // --- 定期将观察提升为记忆 ---
192
+ async promoteToMemory(force = false) {
193
+ const threshold = this.turnCount > 0 ? Math.max(5, this.turnCount / 4) : 5;
194
+ if (!force && this.turnCount < threshold) {
195
+ return 0;
196
+ }
197
+ const observationsToPromote = [];
198
+ for (const o of this.observations) {
199
+ if (o.confidence >= 0.8 && !(await this.isAlreadyInMemory(o))) {
200
+ observationsToPromote.push(o);
201
+ }
202
+ }
203
+ let promoted = 0;
204
+ for (const obs of observationsToPromote) {
205
+ const tags = this.extractTags(obs);
206
+ this.memoryStore.add(`[知识观察] ${obs.content}`, "auto-dream", obs.confidence);
207
+ promoted++;
208
+ }
209
+ if (promoted > 0) {
210
+ await this.memoryStore.saveToDisk();
211
+ }
212
+ return promoted;
213
+ }
214
+ // --- 生成观察报告 ---
215
+ generateReport() {
216
+ const lines = [];
217
+ lines.push(`📊 知识观察报告(第 ${this.turnCount} 轮)`);
218
+ lines.push("");
219
+ // 工具使用统计
220
+ if (this.toolUseCounts.size > 0) {
221
+ lines.push("🔧 工具使用统计:");
222
+ const sorted = Array.from(this.toolUseCounts.entries()).sort((a, b) => b[1] - a[1]);
223
+ for (const [tool, count] of sorted) {
224
+ lines.push(` • ${tool}: ${count} 次`);
225
+ }
226
+ lines.push("");
227
+ }
228
+ // 错误统计
229
+ if (this.errorCounts.size > 0) {
230
+ lines.push("❌ 错误统计:");
231
+ for (const [err, count] of Array.from(this.errorCounts.entries())) {
232
+ lines.push(` • ${err}: ${count} 次`);
233
+ }
234
+ lines.push("");
235
+ }
236
+ // 最近观察
237
+ if (this.observations.length > 0) {
238
+ lines.push("🧠 最近观察:");
239
+ const recent = this.observations.slice(-5).reverse();
240
+ for (const obs of recent) {
241
+ const icon = obs.type === "error" ? "❌" : obs.type === "tool_use" ? "🔧" : obs.type === "concept" ? "💡" : "📄";
242
+ lines.push(` ${icon} ${obs.content.slice(0, 80)}`);
243
+ }
244
+ }
245
+ return lines.join("\n");
246
+ }
247
+ // --- Private ---
248
+ addObservation(obs) {
249
+ // 去重
250
+ const exists = this.observations.some((o) => o.content === obs.content && o.type === obs.type);
251
+ if (!exists) {
252
+ this.observations.push(obs);
253
+ // 保留最近 200 条观察
254
+ if (this.observations.length > 200) {
255
+ this.observations = this.observations.slice(-200);
256
+ }
257
+ }
258
+ }
259
+ extractTags(obs) {
260
+ const tags = [];
261
+ if (obs.metadata) {
262
+ if (obs.metadata.tag)
263
+ tags.push(obs.metadata.tag);
264
+ if (obs.metadata.errorType)
265
+ tags.push(obs.metadata.errorType);
266
+ if (obs.metadata.plannedTools) {
267
+ tags.push(...obs.metadata.plannedTools.split(","));
268
+ }
269
+ }
270
+ return tags;
271
+ }
272
+ async isAlreadyInMemory(obs) {
273
+ // 检查 content 是否已在持久化记忆中
274
+ const existing = await this.memoryStore.getRelevant(obs.content, 20);
275
+ return existing.some((e) => e.content.includes(obs.content.slice(0, 50)));
276
+ }
277
+ }
278
+ // --- 与 AgentLoop 集成的观察者适配器 ---
279
+ export class KnowledgeAgentAdapter {
280
+ observer;
281
+ memoryStore;
282
+ reportInterval = 10; // 每 N 轮输出一次报告
283
+ constructor(memoryStore) {
284
+ this.memoryStore = memoryStore;
285
+ this.observer = new KnowledgeObserver(memoryStore);
286
+ }
287
+ // 在每次 user message 后调用
288
+ onUserMessage(content) {
289
+ this.observer.observeUserMessage(content);
290
+ }
291
+ // 在每次 tool call 前调用
292
+ onToolCall(toolCall) {
293
+ this.observer.observeToolCall(toolCall);
294
+ }
295
+ // 在每次 tool result 后调用
296
+ onToolResult(result, toolName) {
297
+ this.observer.observeToolResult(result, toolName);
298
+ }
299
+ // 在每次 assistant message 后调用
300
+ onAssistantMessage(content) {
301
+ this.observer.observeAssistantMessage(content);
302
+ }
303
+ // 在每个 turn 结束时调用(由 AgentLoop 调用)
304
+ async onTurnEnd(turnCount) {
305
+ if (turnCount % this.reportInterval === 0) {
306
+ const report = this.observer.generateReport();
307
+ console.error(`\n${report}\n`);
308
+ }
309
+ // 每 20 轮自动将观察提升为记忆
310
+ if (turnCount % 20 === 0) {
311
+ const promoted = await this.observer.promoteToMemory(false);
312
+ if (promoted > 0) {
313
+ console.error(`💾 [KnowledgeAgent] 已将 ${promoted} 条观察提升为记忆`);
314
+ }
315
+ }
316
+ }
317
+ getObserver() {
318
+ return this.observer;
319
+ }
320
+ }
@@ -0,0 +1,23 @@
1
+ import type { QlingConfig } from "./config.js";
2
+ export interface LocalStatusReport {
3
+ provider: string;
4
+ model: string;
5
+ endpoint: string;
6
+ apiKeyStatus: "missing" | "set(redacted)";
7
+ workspaceDir: string;
8
+ stateDir: string;
9
+ cacheDir: string;
10
+ branch: string;
11
+ sessionsCount: number;
12
+ exportsCount: number;
13
+ permissionMode: string;
14
+ mcpEnabled: number;
15
+ mcpTotal: number;
16
+ hooksEnabled: boolean;
17
+ }
18
+ export interface LocalStatusOptions {
19
+ gitBranch?: (workspaceDir?: string) => string | null;
20
+ }
21
+ export declare function buildLocalStatusReport(config: QlingConfig, options?: LocalStatusOptions): Promise<LocalStatusReport>;
22
+ export declare function formatLocalStatusReport(report: LocalStatusReport): string[];
23
+ //# sourceMappingURL=local-status-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-status-report.d.ts","sourceRoot":"","sources":["../src/local-status-report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,GAAG,eAAe,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACtD;AAeD,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CA6B5B;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAgB3E"}
@@ -0,0 +1,63 @@
1
+ import { readdir } from "fs/promises";
2
+ import { join } from "path";
3
+ import { sanitizeEndpoint } from "./config-report.js";
4
+ import { buildLocalHooksReport } from "./hooks-report.js";
5
+ import { buildLocalMcpReport } from "./mcp-report.js";
6
+ import { resolveGitBranch } from "./statusline.js";
7
+ function safeText(value, fallback = "-") {
8
+ return typeof value === "string" && value.trim() ? value.trim() : fallback;
9
+ }
10
+ async function countFilesByExtension(dir, extension) {
11
+ try {
12
+ const entries = await readdir(dir, { withFileTypes: true });
13
+ return entries.filter((entry) => entry.isFile() && entry.name.toLowerCase().endsWith(extension)).length;
14
+ }
15
+ catch {
16
+ return 0;
17
+ }
18
+ }
19
+ export async function buildLocalStatusReport(config, options = {}) {
20
+ const workspaceDir = safeText(config.runtime.workspace_dir, process.cwd());
21
+ const stateDir = safeText(config.runtime.file_state_dir);
22
+ const cacheDir = safeText(config.runtime.file_cache_dir);
23
+ const branch = (options.gitBranch ?? resolveGitBranch)(workspaceDir);
24
+ const mcp = buildLocalMcpReport(config.mcp);
25
+ const hooks = buildLocalHooksReport(config.guard);
26
+ const [sessionsCount, exportsCount] = await Promise.all([
27
+ countFilesByExtension(join(stateDir, "sessions"), ".json"),
28
+ countFilesByExtension(join(stateDir, "exports"), ".md"),
29
+ ]);
30
+ return {
31
+ provider: safeText(config.llm.provider),
32
+ model: safeText(config.llm.model),
33
+ endpoint: sanitizeEndpoint(config.llm.endpoint),
34
+ apiKeyStatus: safeText(config.llm.api_key, "") ? "set(redacted)" : "missing",
35
+ workspaceDir,
36
+ stateDir,
37
+ cacheDir,
38
+ branch: branch ?? "-",
39
+ sessionsCount,
40
+ exportsCount,
41
+ permissionMode: safeText(config.guard.permissions.default, "allow"),
42
+ mcpEnabled: mcp.enabled,
43
+ mcpTotal: mcp.total,
44
+ hooksEnabled: hooks.guardEnabled,
45
+ };
46
+ }
47
+ export function formatLocalStatusReport(report) {
48
+ return [
49
+ "",
50
+ "📍 本地状态",
51
+ "-----------------------------------------",
52
+ `Runtime : provider=${report.provider} model=${report.model} endpoint=${report.endpoint} api_key=${report.apiKeyStatus}`,
53
+ `Workspace : ${report.workspaceDir}`,
54
+ `State : ${report.stateDir}`,
55
+ `Cache : ${report.cacheDir}`,
56
+ `Git : branch=${report.branch}`,
57
+ `Local data: sessions=${report.sessionsCount} exports=${report.exportsCount}`,
58
+ `Control : permission=${report.permissionMode} MCP=${report.mcpEnabled}/${report.mcpTotal} hooks=${report.hooksEnabled ? "on" : "off"}`,
59
+ "-----------------------------------------",
60
+ "边界 : 只读取本地配置和文件元数据;不读取会话/导出正文、不连接 MCP、不运行 hooks、不调用模型、不联网、不写配置。",
61
+ "",
62
+ ];
63
+ }
@@ -0,0 +1,32 @@
1
+ import type { SlashCommandContext } from "./commands/runtime.js";
2
+ export type LocalStorageBucketId = "state" | "sessions" | "exports" | "cache";
3
+ export interface LocalStorageBucket {
4
+ id: LocalStorageBucketId;
5
+ label: string;
6
+ path: string;
7
+ exists: boolean;
8
+ fileCount: number;
9
+ dirCount: number;
10
+ otherCount: number;
11
+ sizeBytes: number;
12
+ scannedEntries: number;
13
+ truncated: boolean;
14
+ error: string | null;
15
+ }
16
+ export interface LocalStorageReport {
17
+ workspaceDir: string;
18
+ stateDir: string;
19
+ sessionsDir: string;
20
+ exportsDir: string;
21
+ cacheDir: string;
22
+ scanLimit: number;
23
+ buckets: LocalStorageBucket[];
24
+ }
25
+ export interface LocalStorageReportOptions {
26
+ env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
27
+ maxEntries?: number;
28
+ }
29
+ export declare function formatBytes(bytes: number): string;
30
+ export declare function buildLocalStorageReport(context: SlashCommandContext, options?: LocalStorageReportOptions): Promise<LocalStorageReport>;
31
+ export declare function formatLocalStorageReport(report: LocalStorageReport): string[];
32
+ //# sourceMappingURL=local-storage-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-storage-report.d.ts","sourceRoot":"","sources":["../src/local-storage-report.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAKjE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9E,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,oBAAoB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA8BD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWjD;AA8ED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,kBAAkB,CAAC,CA+B7B;AASD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAyB7E"}
@@ -0,0 +1,171 @@
1
+ import { lstat, readdir } from "fs/promises";
2
+ import { homedir } from "os";
3
+ import { join } from "path";
4
+ import { resolveSessionExportsDir } from "./session-export.js";
5
+ const DEFAULT_SCAN_LIMIT = 5000;
6
+ function resolveStateDir(context, env) {
7
+ const agentLoop = context.agentLoop;
8
+ return env?.QLING_FILE_STATE_DIR
9
+ || agentLoop.getRuntimeRootDir?.()
10
+ || join(homedir(), ".qling");
11
+ }
12
+ function resolveCacheDir(env, stateDir) {
13
+ return env?.QLING_FILE_CACHE_DIR || join(stateDir, "cache");
14
+ }
15
+ function resolveScanLimit(value) {
16
+ return typeof value === "number" && Number.isFinite(value) && value > 0
17
+ ? Math.floor(value)
18
+ : DEFAULT_SCAN_LIMIT;
19
+ }
20
+ function isNotFoundError(error) {
21
+ return Boolean(error && typeof error === "object" && error.code === "ENOENT");
22
+ }
23
+ function errorToString(error) {
24
+ return error instanceof Error ? error.message : String(error);
25
+ }
26
+ export function formatBytes(bytes) {
27
+ const safeBytes = Math.max(0, Number(bytes) || 0);
28
+ if (safeBytes < 1024)
29
+ return `${safeBytes} B`;
30
+ const units = ["KB", "MB", "GB", "TB"];
31
+ let value = safeBytes / 1024;
32
+ let unitIndex = 0;
33
+ while (value >= 1024 && unitIndex < units.length - 1) {
34
+ value /= 1024;
35
+ unitIndex += 1;
36
+ }
37
+ return `${value.toFixed(value >= 10 ? 0 : 1)} ${units[unitIndex]}`;
38
+ }
39
+ async function scanBucket(id, label, path, scanLimit) {
40
+ const bucket = {
41
+ id,
42
+ label,
43
+ path,
44
+ exists: true,
45
+ fileCount: 0,
46
+ dirCount: 0,
47
+ otherCount: 0,
48
+ sizeBytes: 0,
49
+ scannedEntries: 0,
50
+ truncated: false,
51
+ error: null,
52
+ };
53
+ async function walk(targetPath) {
54
+ if (bucket.scannedEntries >= scanLimit) {
55
+ bucket.truncated = true;
56
+ return;
57
+ }
58
+ let entry;
59
+ try {
60
+ entry = await lstat(targetPath);
61
+ }
62
+ catch (error) {
63
+ if (isNotFoundError(error) && targetPath === path) {
64
+ bucket.exists = false;
65
+ return;
66
+ }
67
+ bucket.error = errorToString(error);
68
+ return;
69
+ }
70
+ bucket.scannedEntries += 1;
71
+ if (entry.isDirectory()) {
72
+ bucket.dirCount += 1;
73
+ let children;
74
+ try {
75
+ children = await readdir(targetPath);
76
+ }
77
+ catch (error) {
78
+ bucket.error = errorToString(error);
79
+ return;
80
+ }
81
+ for (const child of children) {
82
+ if (bucket.scannedEntries >= scanLimit) {
83
+ bucket.truncated = true;
84
+ break;
85
+ }
86
+ await walk(join(targetPath, child));
87
+ }
88
+ return;
89
+ }
90
+ if (entry.isFile()) {
91
+ bucket.fileCount += 1;
92
+ bucket.sizeBytes += entry.size;
93
+ return;
94
+ }
95
+ bucket.otherCount += 1;
96
+ bucket.sizeBytes += entry.size;
97
+ }
98
+ await walk(path);
99
+ if (!bucket.exists) {
100
+ bucket.fileCount = 0;
101
+ bucket.dirCount = 0;
102
+ bucket.otherCount = 0;
103
+ bucket.sizeBytes = 0;
104
+ bucket.scannedEntries = 0;
105
+ bucket.truncated = false;
106
+ bucket.error = null;
107
+ }
108
+ return bucket;
109
+ }
110
+ export async function buildLocalStorageReport(context, options = {}) {
111
+ const env = options.env ?? process.env;
112
+ const stateDir = resolveStateDir(context, env);
113
+ const sessionsDir = join(stateDir, "sessions");
114
+ const exportsDir = resolveSessionExportsDir(context, env);
115
+ const cacheDir = resolveCacheDir(env, stateDir);
116
+ const scanLimit = resolveScanLimit(options.maxEntries);
117
+ const agentLoop = context.agentLoop;
118
+ const workspaceDir = context.workspaceDir || agentLoop.getWorkspaceDir?.() || process.cwd();
119
+ const bucketDefs = [
120
+ ["state", "State dir", stateDir],
121
+ ["sessions", "Sessions", sessionsDir],
122
+ ["exports", "Exports", exportsDir],
123
+ ["cache", "Cache", cacheDir],
124
+ ];
125
+ const buckets = [];
126
+ for (const [id, label, path] of bucketDefs) {
127
+ buckets.push(await scanBucket(id, label, path, scanLimit));
128
+ }
129
+ return {
130
+ workspaceDir,
131
+ stateDir,
132
+ sessionsDir,
133
+ exportsDir,
134
+ cacheDir,
135
+ scanLimit,
136
+ buckets,
137
+ };
138
+ }
139
+ function bucketStatus(bucket) {
140
+ if (!bucket.exists)
141
+ return "missing";
142
+ if (bucket.error)
143
+ return `warn (${bucket.error})`;
144
+ if (bucket.truncated)
145
+ return "truncated";
146
+ return "ok";
147
+ }
148
+ export function formatLocalStorageReport(report) {
149
+ const lines = [
150
+ "",
151
+ "💾 本地存储盘点",
152
+ "-----------------------------------------",
153
+ `Workspace : ${report.workspaceDir}`,
154
+ `Scan cap : ${report.scanLimit} entries per bucket`,
155
+ "",
156
+ ];
157
+ for (const bucket of report.buckets) {
158
+ lines.push(`${bucket.label}`);
159
+ lines.push(` Status : ${bucketStatus(bucket)}`);
160
+ lines.push(` Files : ${bucket.fileCount}`);
161
+ lines.push(` Dirs : ${bucket.dirCount}`);
162
+ lines.push(` Other : ${bucket.otherCount}`);
163
+ lines.push(` Size : ${formatBytes(bucket.sizeBytes)}`);
164
+ lines.push(` Path : ${bucket.path}`);
165
+ }
166
+ lines.push("-----------------------------------------");
167
+ lines.push("说明 : 只读取本地文件元数据,不读取文件正文、不调用模型、不联网。");
168
+ lines.push("提示 : 用 /privacy 看数据边界,用 /exports 查看 Markdown 导出。");
169
+ lines.push("");
170
+ return lines;
171
+ }
@@ -0,0 +1,11 @@
1
+ import type { MCPToolDefinition, MCPServerConfig } from "./types.js";
2
+ import type { ToolDefinition } from "../types.js";
3
+ export declare function mcpToolFullName(serverName: string, toolName: string): string;
4
+ export declare function isMCPTool(toolName: string): boolean;
5
+ export declare function parseMCPToolName(toolName: string): {
6
+ serverName: string;
7
+ toolName: string;
8
+ } | null;
9
+ export declare function mcpToolsToNativeDefinitions(mcpTools: MCPToolDefinition[]): ToolDefinition[];
10
+ export declare function buildMCPServersFromConfig(config: Record<string, MCPServerConfig>): MCPServerConfig[];
11
+ //# sourceMappingURL=bridge.d.ts.map