@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,138 @@
1
+ // ============================================================
2
+ // 轻灵 - Verification Agent(精简版)
3
+ // - 简单操作跳过 LLM,直接规则判断
4
+ // - LLM 输出严格限制在 150 tokens 内
5
+ // - 只返回判决 + 一句话说明
6
+ // ============================================================
7
+ const VERIFICATION_PROMPT = `你是轻灵的验证 Agent,负责判断操作是否成功。
8
+
9
+ 【输出规则】必须严格遵循以下格式,禁止添加任何额外内容:
10
+
11
+ PASS // 操作完全成功
12
+ FAIL // 操作明显失败
13
+ PARTIAL // 部分成功,有警告
14
+
15
+ 一行说明:原因
16
+
17
+ 【判断标准】
18
+ - PASS: 达到了预期结果,无错误
19
+ - FAIL: 错误、异常、或未达到预期
20
+ - PARTIAL: 达到了核心目标,但有小问题
21
+
22
+ 请直接返回判决和说明,不要解释验证过程。`;
23
+ export class VerificationAgent {
24
+ apiKey;
25
+ model;
26
+ constructor(apiKey, model = "deepseek-chat") {
27
+ this.apiKey = apiKey;
28
+ this.model = model;
29
+ }
30
+ async verify(operation, expectedOutcome, actualOutput, context) {
31
+ // 规则验证(快速路径)
32
+ const ruleResult = this.ruleBasedVerify(operation, expectedOutcome, actualOutput);
33
+ // 如果 output 很短(bash 无输出、权限拒绝等),直接用规则结果
34
+ const isSimple = actualOutput.length < 100 || actualOutput.includes("denied") || actualOutput.includes("not found") || actualOutput.includes("Error");
35
+ if (isSimple && this.apiKey) {
36
+ try {
37
+ const llmResult = await this.verifyWithLLM(operation, actualOutput, ruleResult);
38
+ return llmResult;
39
+ }
40
+ catch {
41
+ // LLM 失败,降级到规则
42
+ return ruleResult;
43
+ }
44
+ }
45
+ return ruleResult;
46
+ }
47
+ async verifyWithLLM(operation, actualOutput, fallback) {
48
+ const prompt = `${VERIFICATION_PROMPT}
49
+
50
+ 【操作类型】${operation}
51
+ 【实际输出】${actualOutput.slice(0, 500)}${actualOutput.length > 500 ? "..." : ""}`;
52
+ try {
53
+ const response = await this.callLLM(prompt);
54
+ return this.parseResponse(response);
55
+ }
56
+ catch {
57
+ return fallback;
58
+ }
59
+ }
60
+ async callLLM(prompt) {
61
+ const resp = await fetch("https://api.deepseek.com/chat/completions", {
62
+ method: "POST",
63
+ headers: {
64
+ "Content-Type": "application/json",
65
+ Authorization: `Bearer ${this.apiKey}`,
66
+ },
67
+ body: JSON.stringify({
68
+ model: this.model,
69
+ messages: [{ role: "user", content: prompt }],
70
+ max_tokens: 150,
71
+ temperature: 0,
72
+ }),
73
+ });
74
+ if (!resp.ok)
75
+ throw new Error(`API error: ${resp.status}`);
76
+ const data = await resp.json();
77
+ return data.choices?.[0]?.message?.content ?? "";
78
+ }
79
+ parseResponse(response) {
80
+ const lines = response.split("\n").map((l) => l.trim()).filter(Boolean);
81
+ let verdict = "PARTIAL";
82
+ let details = response;
83
+ const steps = [];
84
+ for (const line of lines) {
85
+ if (line.startsWith("PASS")) {
86
+ verdict = "PASS";
87
+ details = line.replace(/^PASS\s*/, "").replace(/^一行说明:/, "").trim();
88
+ steps.push({ description: "通过", passed: true });
89
+ }
90
+ else if (line.startsWith("FAIL")) {
91
+ verdict = "FAIL";
92
+ details = line.replace(/^FAIL\s*/, "").replace(/^一行说明:/, "").trim();
93
+ steps.push({ description: "失败", passed: false });
94
+ }
95
+ else if (line.startsWith("PARTIAL")) {
96
+ verdict = "PARTIAL";
97
+ details = line.replace(/^PARTIAL\s*/, "").replace(/^一行说明:/, "").trim();
98
+ steps.push({ description: "部分成功", passed: true });
99
+ }
100
+ }
101
+ return { verdict, details, steps };
102
+ }
103
+ // 规则验证(无 LLM 时降级,也作为快速路径)
104
+ ruleBasedVerify(operation, expected, actual) {
105
+ const steps = [];
106
+ let failedChecks = 0;
107
+ // 检查明显的错误标记
108
+ const errorPatterns = [
109
+ "error", "Error", "ERROR", "failed", "Failed", "FAILED",
110
+ "denied", "permission", "not found", "NotADirectory",
111
+ "WinError", "Traceback", "SyntaxError", "cannot",
112
+ ];
113
+ const hasError = errorPatterns.some((p) => actual.toLowerCase().includes(p.toLowerCase()));
114
+ if (hasError) {
115
+ steps.push({ description: "输出包含错误标记", passed: false });
116
+ failedChecks++;
117
+ }
118
+ else {
119
+ steps.push({ description: "无错误标记", passed: true });
120
+ }
121
+ // 检查 exit code 标记
122
+ if (actual.includes("exit code: 0") || actual.includes("✅")) {
123
+ steps.push({ description: "成功退出", passed: true });
124
+ }
125
+ else if (/\bexit code: [1-9]\b/.test(actual) || /\bexit code: null\b/.test(actual)) {
126
+ steps.push({ description: "非零退出码", passed: false });
127
+ failedChecks++;
128
+ }
129
+ const verdict = failedChecks === 0 ? "PASS" : failedChecks < steps.length ? "PARTIAL" : "FAIL";
130
+ return {
131
+ verdict,
132
+ details: failedChecks === 0
133
+ ? "规则验证通过"
134
+ : `规则验证: ${failedChecks} 项失败`,
135
+ steps,
136
+ };
137
+ }
138
+ }
@@ -0,0 +1,24 @@
1
+ import type { SlashCommandContext } from "./commands/runtime.js";
2
+ import { type EnvSecretHit } from "./config.js";
3
+ export interface PrivacyReport {
4
+ workspaceDir: string;
5
+ stateDir: string;
6
+ sessionsDir: string;
7
+ cacheDir: string;
8
+ savedSessionCount: number;
9
+ model: string;
10
+ plaintextSecretHits: EnvSecretHit[];
11
+ }
12
+ export interface PrivacyReportOptions {
13
+ env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
14
+ }
15
+ export interface LocalPrivacyReportOptions {
16
+ workspaceDir: string;
17
+ stateDir: string;
18
+ cacheDir?: string;
19
+ model?: string;
20
+ }
21
+ export declare function buildPrivacyReport(context: SlashCommandContext, options?: PrivacyReportOptions): Promise<PrivacyReport>;
22
+ export declare function buildLocalPrivacyReport(options: LocalPrivacyReportOptions): Promise<PrivacyReport>;
23
+ export declare function formatPrivacyReport(report: PrivacyReport): string[];
24
+ //# sourceMappingURL=privacy-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-report.d.ts","sourceRoot":"","sources":["../src/privacy-report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAG1E,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,YAAY,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAYD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAgBxB;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC,CAcxG;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAkCnE"}
@@ -0,0 +1,78 @@
1
+ import { homedir } from "os";
2
+ import { join } from "path";
3
+ import { SessionRegistry } from "./session/session-registry.js";
4
+ import { scanRuntimeDotEnvSecrets } from "./config.js";
5
+ import { getLocalizedText } from "./i18n/index.js";
6
+ function resolveStateDir(env, agentLoop) {
7
+ return env?.QLING_FILE_STATE_DIR
8
+ || agentLoop.getRuntimeRootDir?.()
9
+ || join(homedir(), ".qling");
10
+ }
11
+ function resolveCacheDir(env, stateDir) {
12
+ return env?.QLING_FILE_CACHE_DIR || join(stateDir, "cache");
13
+ }
14
+ export async function buildPrivacyReport(context, options = {}) {
15
+ const env = options.env ?? process.env;
16
+ const agentLoop = context.agentLoop;
17
+ const stateDir = resolveStateDir(env, agentLoop);
18
+ const savedSessions = context.listSavedSessions ? await context.listSavedSessions() : [];
19
+ const hits = await scanRuntimeDotEnvSecrets(stateDir);
20
+ return {
21
+ workspaceDir: context.workspaceDir || agentLoop.getWorkspaceDir?.() || process.cwd(),
22
+ stateDir,
23
+ sessionsDir: join(stateDir, "sessions"),
24
+ cacheDir: resolveCacheDir(env, stateDir),
25
+ savedSessionCount: Array.isArray(savedSessions) ? savedSessions.length : 0,
26
+ model: agentLoop.getModel?.() || "unknown",
27
+ plaintextSecretHits: hits,
28
+ };
29
+ }
30
+ export async function buildLocalPrivacyReport(options) {
31
+ const registry = new SessionRegistry({ stateDir: options.stateDir });
32
+ const savedSessions = await registry.list();
33
+ const hits = await scanRuntimeDotEnvSecrets(options.stateDir);
34
+ return {
35
+ workspaceDir: options.workspaceDir,
36
+ stateDir: options.stateDir,
37
+ sessionsDir: join(options.stateDir, "sessions"),
38
+ cacheDir: options.cacheDir || join(options.stateDir, "cache"),
39
+ savedSessionCount: savedSessions.length,
40
+ model: options.model || "unknown",
41
+ plaintextSecretHits: hits,
42
+ };
43
+ }
44
+ export function formatPrivacyReport(report) {
45
+ const secretLines = [];
46
+ if (report.plaintextSecretHits && report.plaintextSecretHits.length > 0) {
47
+ const byFile = new Map();
48
+ for (const h of report.plaintextSecretHits) {
49
+ if (!byFile.has(h.file))
50
+ byFile.set(h.file, []);
51
+ byFile.get(h.file).push(h.varName);
52
+ }
53
+ secretLines.push("");
54
+ secretLines.push("⚠️ 检测到运行时明文密钥(仅显示变量名):");
55
+ for (const [f, vars] of byFile.entries()) {
56
+ secretLines.push(` ${f} : ${vars.join(", ")}`);
57
+ }
58
+ secretLines.push(" 建议:轮换密钥 → 移至系统环境变量 → 删除 .env 中对应行 → 重新运行 /privacy 或 /doctor 确认。");
59
+ }
60
+ const t = getLocalizedText();
61
+ return [
62
+ "",
63
+ `🔒 【${t.privacy?.title || "本地数据留存"}】`,
64
+ "-----------------------------------------",
65
+ `${t.privacy?.workspaceDir || "Workspace"} : ${report.workspaceDir}`,
66
+ `${t.privacy?.stateDir || "State dir"} : ${report.stateDir}`,
67
+ `${t.privacy?.sessionsDir || "Sessions"} : ${report.sessionsDir}`,
68
+ `${t.privacy?.cacheDir || "Cache dir"} : ${report.cacheDir}`,
69
+ `已存快照 : ${report.savedSessionCount}`,
70
+ `${t.labels.model || "模型配置"} : ${report.model}`,
71
+ ...secretLines,
72
+ "-----------------------------------------",
73
+ "本命令只读取本地状态,不上传诊断数据,也不扫描消息正文。",
74
+ "边界说明: 模型请求仍按 provider 配置发送必要上下文;如需完全离线,需要配置本地模型/provider。",
75
+ "提示: 用 /context 查看上下文占用,用 /doctor 检查本地稳定性。",
76
+ "",
77
+ ];
78
+ }
@@ -0,0 +1,25 @@
1
+ export interface ProviderPreset {
2
+ /** 稳定 id,用于 /model use <id> */
3
+ id: string;
4
+ /** 展示名(中文优先) */
5
+ displayName: string;
6
+ /** QLING_LLM_PROVIDER 写入值 */
7
+ provider: string;
8
+ endpoint: string;
9
+ model: string;
10
+ keyHint?: string;
11
+ /** 本地/无密钥场景为 false */
12
+ requiresApiKey: boolean;
13
+ tags?: string[];
14
+ }
15
+ /** setup 数字菜单用的有序列表(1-based 由调用方映射) */
16
+ export declare const PROVIDER_PRESET_ORDER: string[];
17
+ export declare function listProviderPresets(options?: {
18
+ includeAliases?: boolean;
19
+ }): ProviderPreset[];
20
+ export declare function getProviderPreset(idOrAlias: string): ProviderPreset | undefined;
21
+ export declare function resolveModelCandidates(): string[];
22
+ export declare function isLoopbackEndpoint(endpoint: string): boolean;
23
+ export declare function apiKeyRequiredForEndpoint(endpoint: string, provider?: string): boolean;
24
+ export declare function formatPresetTableLines(): string[];
25
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/providers/presets.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,uCAAuC;AACvC,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAWzC,CAAC;AA6HF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,cAAc,EAAE,CAOhG;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAmB/E;AAED,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAUjD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAMtF;AAED,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAYjD"}
@@ -0,0 +1,205 @@
1
+ // ============================================================
2
+ // 轻灵 - Provider 预设(单一真相源)
3
+ // setup / /model / doctor 共用,避免各处硬编码分叉
4
+ // ============================================================
5
+ /** setup 数字菜单用的有序列表(1-based 由调用方映射) */
6
+ export const PROVIDER_PRESET_ORDER = [
7
+ "deepseek",
8
+ "dashscope",
9
+ "zhipu",
10
+ "moonshot",
11
+ "minimax",
12
+ "mimo",
13
+ "mimo-token-plan",
14
+ "siliconflow",
15
+ "openai",
16
+ "ollama",
17
+ ];
18
+ const PRESET_MAP = {
19
+ deepseek: {
20
+ id: "deepseek",
21
+ displayName: "DeepSeek",
22
+ provider: "deepseek",
23
+ endpoint: "https://api.deepseek.com",
24
+ model: "deepseek-chat",
25
+ requiresApiKey: true,
26
+ tags: ["china", "recommended"],
27
+ },
28
+ dashscope: {
29
+ id: "dashscope",
30
+ displayName: "阿里云百炼 (Qwen)",
31
+ provider: "dashscope",
32
+ endpoint: "https://dashscope.aliyuncs.com/compatible-mode/v1",
33
+ model: "qwen-plus",
34
+ keyHint: "阿里云 API Key",
35
+ requiresApiKey: true,
36
+ tags: ["china"],
37
+ },
38
+ zhipu: {
39
+ id: "zhipu",
40
+ displayName: "智谱清言 (GLM)",
41
+ provider: "zhipu",
42
+ endpoint: "https://open.bigmodel.cn/api/paas/v4",
43
+ model: "glm-4",
44
+ keyHint: "智谱 AI Key",
45
+ requiresApiKey: true,
46
+ tags: ["china"],
47
+ },
48
+ moonshot: {
49
+ id: "moonshot",
50
+ displayName: "月之暗面 (Kimi)",
51
+ provider: "moonshot",
52
+ endpoint: "https://api.moonshot.cn/v1",
53
+ model: "moonshot-v1-8k",
54
+ keyHint: "Kimi API Key",
55
+ requiresApiKey: true,
56
+ tags: ["china"],
57
+ },
58
+ minimax: {
59
+ id: "minimax",
60
+ displayName: "MiniMax (海螺)",
61
+ provider: "minimax",
62
+ endpoint: "https://api.minimaxi.com/v1",
63
+ model: "MiniMax-M2.7",
64
+ keyHint: "MiniMax API Key",
65
+ requiresApiKey: true,
66
+ tags: ["china"],
67
+ },
68
+ mimo: {
69
+ id: "mimo",
70
+ displayName: "Xiaomi MiMo (按量计费)",
71
+ provider: "mimo",
72
+ endpoint: "https://api.xiaomimimo.com/v1",
73
+ model: "MiMo-V2.5-Pro",
74
+ keyHint: "小米 MiMo sk-xxx",
75
+ requiresApiKey: true,
76
+ tags: ["china"],
77
+ },
78
+ "mimo-token-plan": {
79
+ id: "mimo-token-plan",
80
+ displayName: "Xiaomi MiMo (Token Plan 订阅)",
81
+ provider: "mimo",
82
+ endpoint: "https://token-plan-cn.xiaomimimo.com/v1",
83
+ model: "MiMo-V2.5-Pro",
84
+ keyHint: "小米 MiMo tp-xxx",
85
+ requiresApiKey: true,
86
+ tags: ["china"],
87
+ },
88
+ siliconflow: {
89
+ id: "siliconflow",
90
+ displayName: "硅基流动 (SiliconFlow)",
91
+ provider: "siliconflow",
92
+ endpoint: "https://api.siliconflow.cn/v1",
93
+ model: "Qwen/Qwen2.5-7B-Instruct",
94
+ keyHint: "硅基流动 Key",
95
+ requiresApiKey: true,
96
+ tags: ["china"],
97
+ },
98
+ openai: {
99
+ id: "openai",
100
+ displayName: "OpenAI",
101
+ provider: "openai",
102
+ endpoint: "https://api.openai.com/v1",
103
+ model: "gpt-4o",
104
+ requiresApiKey: true,
105
+ tags: ["global"],
106
+ },
107
+ ollama: {
108
+ id: "ollama",
109
+ displayName: "本地 Ollama",
110
+ provider: "ollama",
111
+ endpoint: "http://localhost:11434/v1",
112
+ model: "llama3",
113
+ keyHint: "Ollama(可留空)",
114
+ requiresApiKey: false,
115
+ tags: ["local"],
116
+ },
117
+ // 别名:历史 setup 用 local 命名
118
+ local: {
119
+ id: "local",
120
+ displayName: "本地部署 (Ollama)",
121
+ provider: "ollama",
122
+ endpoint: "http://localhost:11434/v1",
123
+ model: "llama3",
124
+ keyHint: "Ollama(可留空)",
125
+ requiresApiKey: false,
126
+ tags: ["local", "alias"],
127
+ },
128
+ };
129
+ const ALIASES = {
130
+ local: "ollama",
131
+ ollama: "ollama",
132
+ "llama": "ollama",
133
+ "openai-compat": "openai",
134
+ qwen: "dashscope",
135
+ kimi: "moonshot",
136
+ glm: "zhipu",
137
+ deepseek: "deepseek",
138
+ };
139
+ export function listProviderPresets(options = {}) {
140
+ const includeAliases = options.includeAliases === true;
141
+ const ordered = PROVIDER_PRESET_ORDER.map((id) => PRESET_MAP[id]).filter(Boolean);
142
+ if (includeAliases) {
143
+ return Object.values(PRESET_MAP);
144
+ }
145
+ return ordered;
146
+ }
147
+ export function getProviderPreset(idOrAlias) {
148
+ const raw = String(idOrAlias ?? "").trim().toLowerCase();
149
+ if (!raw)
150
+ return undefined;
151
+ // 数字索引 1..N → 有序列表
152
+ if (/^\d+$/.test(raw)) {
153
+ const index = Number(raw) - 1;
154
+ const ordered = listProviderPresets();
155
+ return ordered[index];
156
+ }
157
+ const canonical = ALIASES[raw] ?? raw;
158
+ if (PRESET_MAP[canonical])
159
+ return PRESET_MAP[canonical];
160
+ if (PRESET_MAP[raw])
161
+ return PRESET_MAP[raw];
162
+ // 允许用 provider 字段模糊匹配第一个
163
+ return listProviderPresets().find((p) => p.provider.toLowerCase() === raw || p.id.toLowerCase() === raw);
164
+ }
165
+ export function resolveModelCandidates() {
166
+ const seen = new Set();
167
+ const out = [];
168
+ for (const p of listProviderPresets()) {
169
+ if (!seen.has(p.model)) {
170
+ seen.add(p.model);
171
+ out.push(p.model);
172
+ }
173
+ }
174
+ return out;
175
+ }
176
+ export function isLoopbackEndpoint(endpoint) {
177
+ try {
178
+ const url = new URL(endpoint);
179
+ return ["localhost", "127.0.0.1", "::1"].includes(url.hostname);
180
+ }
181
+ catch {
182
+ return false;
183
+ }
184
+ }
185
+ export function apiKeyRequiredForEndpoint(endpoint, provider) {
186
+ if (provider && (provider === "ollama" || provider === "local"))
187
+ return false;
188
+ if (endpoint && isLoopbackEndpoint(endpoint))
189
+ return false;
190
+ const preset = provider ? getProviderPreset(provider) : undefined;
191
+ if (preset)
192
+ return preset.requiresApiKey;
193
+ return true;
194
+ }
195
+ export function formatPresetTableLines() {
196
+ const lines = [];
197
+ const presets = listProviderPresets();
198
+ presets.forEach((p, i) => {
199
+ const key = p.requiresApiKey ? "key" : "no-key";
200
+ lines.push(`${String(i + 1).padStart(2, " ")}. ${p.id.padEnd(16)} ${p.displayName}`);
201
+ lines.push(` provider=${p.provider} model=${p.model}`);
202
+ lines.push(` endpoint=${p.endpoint} (${key})`);
203
+ });
204
+ return lines;
205
+ }
@@ -0,0 +1,38 @@
1
+ import type { SlashCommandContext } from "./commands/runtime.js";
2
+ interface RecapMessage {
3
+ role?: string;
4
+ content?: unknown;
5
+ }
6
+ interface RecapStats {
7
+ sessionId?: string;
8
+ turnCount?: number;
9
+ tokens?: number;
10
+ compactions?: number;
11
+ }
12
+ interface LocalRecapInput {
13
+ stats: RecapStats;
14
+ workspaceDir?: string;
15
+ goalStatus?: {
16
+ status?: string;
17
+ condition?: string;
18
+ } | null;
19
+ activeTasks: Array<{
20
+ id?: string;
21
+ status?: string;
22
+ prompt?: string;
23
+ }>;
24
+ messages: RecapMessage[];
25
+ limit: number;
26
+ }
27
+ export interface SavedSessionRecapRequest {
28
+ sessionRef: string;
29
+ count: number;
30
+ }
31
+ export declare function resolveRecapLimit(value?: string): number;
32
+ export declare function parseSavedSessionRecapArgs(args?: string[]): SavedSessionRecapRequest;
33
+ export declare function formatRecapMessage(message: RecapMessage, maxLength?: number): string;
34
+ export declare function formatLocalRecap(input: LocalRecapInput): string;
35
+ export declare function buildSavedSessionRecap(stateDir: string, request: SavedSessionRecapRequest): Promise<string>;
36
+ export declare function buildLocalRecap(context: SlashCommandContext, limit?: number): Promise<string>;
37
+ export {};
38
+ //# sourceMappingURL=recap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recap.d.ts","sourceRoot":"","sources":["../src/recap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAoBD,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAIxD;AAQD,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,wBAAwB,CAYxF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,SAAM,GAAG,MAAM,CAIjF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA6B/D;AAsCD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAkC9F"}
package/dist/recap.js ADDED
@@ -0,0 +1,154 @@
1
+ import { SessionRegistry } from "./session/session-registry.js";
2
+ function stringifyContent(content) {
3
+ if (typeof content === "string")
4
+ return content;
5
+ try {
6
+ return JSON.stringify(content);
7
+ }
8
+ catch {
9
+ return String(content);
10
+ }
11
+ }
12
+ function compactOneLine(value) {
13
+ return value.replace(/\s+/g, " ").trim();
14
+ }
15
+ function truncate(value, maxLength) {
16
+ if (value.length <= maxLength)
17
+ return value;
18
+ return value.slice(0, Math.max(0, maxLength - 1)) + "...";
19
+ }
20
+ export function resolveRecapLimit(value) {
21
+ const parsed = Number.parseInt(String(value ?? ""), 10);
22
+ if (!Number.isFinite(parsed) || parsed <= 0)
23
+ return 6;
24
+ return Math.min(parsed, 20);
25
+ }
26
+ function isCountArg(value) {
27
+ if (!value)
28
+ return false;
29
+ const parsed = Number.parseInt(value, 10);
30
+ return Number.isFinite(parsed) && String(parsed) === value.trim();
31
+ }
32
+ export function parseSavedSessionRecapArgs(args = []) {
33
+ const [first, second] = args;
34
+ if (!first) {
35
+ return { sessionRef: "latest", count: resolveRecapLimit(undefined) };
36
+ }
37
+ if (isCountArg(first)) {
38
+ return { sessionRef: "latest", count: resolveRecapLimit(first) };
39
+ }
40
+ return {
41
+ sessionRef: first,
42
+ count: resolveRecapLimit(second),
43
+ };
44
+ }
45
+ export function formatRecapMessage(message, maxLength = 120) {
46
+ const role = compactOneLine(String(message.role || "unknown")) || "unknown";
47
+ const content = truncate(compactOneLine(stringifyContent(message.content ?? "")), maxLength);
48
+ return `${role}: ${content}`;
49
+ }
50
+ export function formatLocalRecap(input) {
51
+ const stats = input.stats ?? {};
52
+ const messages = Array.isArray(input.messages) ? input.messages : [];
53
+ const recent = messages.slice(-Math.max(0, input.limit));
54
+ const goal = input.goalStatus?.status
55
+ ? `${input.goalStatus.status}${input.goalStatus.condition ? ` (${input.goalStatus.condition})` : ""}`
56
+ : "none";
57
+ const lines = [
58
+ "",
59
+ "📌 【本地会话回顾】",
60
+ "-----------------------------------------",
61
+ `session=${stats.sessionId || "-"} turns=${Number(stats.turnCount ?? 0)} tokens=${Number(stats.tokens ?? 0).toLocaleString()} compactions=${Number(stats.compactions ?? 0)}`,
62
+ `goal=${goal} tasks=${input.activeTasks.length}`,
63
+ `workspace=${input.workspaceDir || "-"}`,
64
+ "最近消息:",
65
+ ];
66
+ if (recent.length === 0) {
67
+ lines.push(" 最近消息: 无");
68
+ }
69
+ else {
70
+ for (const message of recent) {
71
+ lines.push(` ${formatRecapMessage(message)}`);
72
+ }
73
+ }
74
+ lines.push("-----------------------------------------");
75
+ lines.push("说明: 本回顾只读取当前本地会话状态,不调用模型、不联网、不写远端。");
76
+ lines.push("");
77
+ return lines.join("\n");
78
+ }
79
+ function formatMissingSavedSessionRecap(stateDir, sessionRef) {
80
+ const lines = [
81
+ "",
82
+ "📌 【本地会话回顾】",
83
+ "-----------------------------------------",
84
+ `stateDir=${stateDir}`,
85
+ `session=${sessionRef || "latest"}`,
86
+ "未找到本地会话快照。",
87
+ "提示: 先完成一次交互会话,或使用 `qling sessions` / `/sessions` 查看已保存快照。",
88
+ "-----------------------------------------",
89
+ "说明: 本命令只读取本地已保存会话快照,不调用模型、不联网、不写远端。",
90
+ "",
91
+ ];
92
+ return lines.join("\n");
93
+ }
94
+ function formatSavedSessionRecap(snapshot, limit) {
95
+ const text = formatLocalRecap({
96
+ stats: {
97
+ sessionId: snapshot.sessionId,
98
+ turnCount: snapshot.turnCount,
99
+ tokens: snapshot.sessionTokens,
100
+ compactions: snapshot.compactionCount,
101
+ },
102
+ workspaceDir: snapshot.workspaceDir ?? undefined,
103
+ goalStatus: null,
104
+ activeTasks: [],
105
+ messages: snapshot.messages,
106
+ limit,
107
+ });
108
+ return text.replace("说明: 本回顾只读取当前本地会话状态,不调用模型、不联网、不写远端。", "说明: 本命令只读取本地已保存会话快照,不调用模型、不联网、不写远端。");
109
+ }
110
+ export async function buildSavedSessionRecap(stateDir, request) {
111
+ const registry = new SessionRegistry({ stateDir });
112
+ const sessionRef = request.sessionRef || "latest";
113
+ const snapshot = sessionRef === "latest"
114
+ ? await registry.loadLatest()
115
+ : await registry.load(sessionRef);
116
+ if (!snapshot) {
117
+ return formatMissingSavedSessionRecap(stateDir, sessionRef);
118
+ }
119
+ return formatSavedSessionRecap(snapshot, request.count);
120
+ }
121
+ export async function buildLocalRecap(context, limit = 6) {
122
+ const agentLoop = context.agentLoop;
123
+ const stats = typeof agentLoop.getSessionStats === "function"
124
+ ? await agentLoop.getSessionStats()
125
+ : {
126
+ sessionId: typeof agentLoop.getSessionId === "function" ? agentLoop.getSessionId() : "",
127
+ turnCount: 0,
128
+ tokens: 0,
129
+ compactions: 0,
130
+ };
131
+ const messages = typeof agentLoop.getMessagesSnapshot === "function"
132
+ ? await agentLoop.getMessagesSnapshot()
133
+ : [];
134
+ const tasks = context.scheduler && typeof context.scheduler.listTasks === "function"
135
+ ? await context.scheduler.listTasks()
136
+ : [];
137
+ const activeTasks = Array.isArray(tasks)
138
+ ? tasks.filter((task) => task.status !== "completed" && task.status !== "canceled")
139
+ : [];
140
+ const goalStatus = context.goalController && typeof context.goalController.getGoalStatus === "function"
141
+ ? await context.goalController.getGoalStatus()
142
+ : null;
143
+ const workspaceDir = typeof agentLoop.getWorkspaceDir === "function"
144
+ ? agentLoop.getWorkspaceDir()
145
+ : context.workspaceDir;
146
+ return formatLocalRecap({
147
+ stats,
148
+ workspaceDir,
149
+ goalStatus,
150
+ activeTasks,
151
+ messages: Array.isArray(messages) ? messages : [],
152
+ limit,
153
+ });
154
+ }