@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,694 @@
1
+ import { formatFocusedHelp } from "../help-topics.js";
2
+ import { formatLocalGuidancePanel } from "./guidance-panel.js";
3
+ import { getLocalizedText } from "../i18n/index.js";
4
+ import { formatCliVersion, getPackageVersion } from "../package-version.js";
5
+ const KNOWN_MODES = ["help", "version", "run", "chat", "repl", "workflow", "memory", "dashboard", "discovery", "setup", "bootstrap", "mission", "daemon", "agents", "logs", "doctor", "status", "storage", "exports", "sessions", "checkpoint", "tasks", "goal", "privacy", "context", "shortcuts", "statusline", "recap", "permissions", "config", "mcp", "hooks", "knowledge", "connect"];
6
+ const MANAGEMENT_MODES = ["help", "version", "workflow", "memory", "dashboard", "discovery", "setup", "bootstrap", "mission", "daemon", "agents", "logs", "doctor", "status", "storage", "exports", "sessions", "checkpoint", "tasks", "goal", "privacy", "context", "shortcuts", "statusline", "recap", "permissions", "config", "mcp", "hooks", "knowledge", "connect"];
7
+ const TOP_LEVEL_MODE_ALIASES = {
8
+ "帮助": "help",
9
+ "版本": "version",
10
+ "启动": "bootstrap",
11
+ "初始化": "bootstrap",
12
+ "诊断": "doctor",
13
+ "状态": "status",
14
+ "存储": "storage",
15
+ "导出列表": "exports",
16
+ "会话列表": "sessions",
17
+ "检查点": "checkpoint",
18
+ "任务": "tasks",
19
+ "目标": "goal",
20
+ "隐私": "privacy",
21
+ "上下文": "context",
22
+ "快捷键": "shortcuts",
23
+ "状态线": "statusline",
24
+ "回顾": "recap",
25
+ "权限": "permissions",
26
+ "配置": "config",
27
+ "MCP": "mcp",
28
+ "外部工具": "mcp",
29
+ "钩子": "hooks",
30
+ "记忆": "memory",
31
+ "使命": "mission",
32
+ "代理": "agents",
33
+ "日志": "logs",
34
+ "知识": "knowledge",
35
+ "知识库": "knowledge",
36
+ "kb": "knowledge",
37
+ "rag": "knowledge",
38
+ "连接": "connect",
39
+ "connect": "connect",
40
+ "连接器": "connect",
41
+ };
42
+ const TOP_LEVEL_COMMAND_SUGGESTION_THRESHOLD = 0.74;
43
+ const TOP_LEVEL_COMMAND_CANDIDATES = [
44
+ ...KNOWN_MODES.map((mode) => ({ command: mode, helpTopic: mode, rank: 0 })),
45
+ ...Object.keys(TOP_LEVEL_MODE_ALIASES).map((alias) => ({
46
+ command: alias,
47
+ helpTopic: alias,
48
+ rank: 1,
49
+ })),
50
+ ];
51
+ function resolveTopLevelMode(arg) {
52
+ if (KNOWN_MODES.includes(arg)) {
53
+ return arg;
54
+ }
55
+ return TOP_LEVEL_MODE_ALIASES[arg] ?? null;
56
+ }
57
+ function isManagementMode(mode) {
58
+ return !!mode && MANAGEMENT_MODES.includes(mode);
59
+ }
60
+ function isHelpFlag(arg) {
61
+ return arg === "--help" || arg === "-h";
62
+ }
63
+ function isVersionFlag(arg) {
64
+ return arg === "--version" || arg === "-V" || arg === "-v";
65
+ }
66
+ /** 打印给 stdout 的版本行(qling/1.0.0) */
67
+ export function buildVersionText(binName = "qling") {
68
+ return formatCliVersion(binName);
69
+ }
70
+ function resolveHelpTopicArgs(mode, positional) {
71
+ if (mode && mode !== "help" && isManagementMode(mode)) {
72
+ return [mode];
73
+ }
74
+ if (positional.length > 0) {
75
+ return [positional.join(" ")];
76
+ }
77
+ return [];
78
+ }
79
+ function normalizeCommandName(value) {
80
+ return value.trim().replace(/^\/+/, "").toLowerCase();
81
+ }
82
+ function calculateEditDistance(sourceValue, targetValue) {
83
+ const source = Array.from(sourceValue);
84
+ const target = Array.from(targetValue);
85
+ const initialRow = Array.from({ length: target.length + 1 }, (_, index) => index);
86
+ const finalRow = source.reduce((previousRow, sourceChar, sourceIndex) => target.reduce((currentRow, targetChar, targetIndex) => [
87
+ ...currentRow,
88
+ Math.min(currentRow[targetIndex] + 1, previousRow[targetIndex + 1] + 1, previousRow[targetIndex] + (sourceChar === targetChar ? 0 : 1)),
89
+ ], [sourceIndex + 1]), initialRow);
90
+ return finalRow[target.length];
91
+ }
92
+ function countCommandNameCharacters(value) {
93
+ return Array.from(value).length;
94
+ }
95
+ function scoreCommandCandidate(input, candidate) {
96
+ const normalizedInput = normalizeCommandName(input);
97
+ const normalizedCandidate = normalizeCommandName(candidate);
98
+ if (!normalizedInput || !normalizedCandidate)
99
+ return 0;
100
+ if (normalizedInput === normalizedCandidate)
101
+ return 1;
102
+ const inputLength = countCommandNameCharacters(normalizedInput);
103
+ const candidateLength = countCommandNameCharacters(normalizedCandidate);
104
+ const maxLength = Math.max(inputLength, candidateLength);
105
+ if (normalizedCandidate.startsWith(normalizedInput) || normalizedInput.startsWith(normalizedCandidate)) {
106
+ return 1 - Math.abs(inputLength - candidateLength) / maxLength;
107
+ }
108
+ const distance = calculateEditDistance(normalizedInput, normalizedCandidate);
109
+ return 1 - distance / maxLength;
110
+ }
111
+ function findTopLevelCommandSuggestion(input) {
112
+ if (!input.trim() || input.startsWith("-"))
113
+ return null;
114
+ const suggestions = TOP_LEVEL_COMMAND_CANDIDATES.map((candidate) => ({
115
+ ...candidate,
116
+ score: scoreCommandCandidate(input, candidate.command),
117
+ }))
118
+ .filter((suggestion) => suggestion.score >= TOP_LEVEL_COMMAND_SUGGESTION_THRESHOLD)
119
+ .sort((left, right) => right.score - left.score || left.rank - right.rank || left.command.localeCompare(right.command));
120
+ const best = suggestions[0];
121
+ if (!best)
122
+ return null;
123
+ return { command: best.command, helpTopic: best.helpTopic, score: best.score };
124
+ }
125
+ function quoteTaskForRun(task) {
126
+ return `"${task.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
127
+ }
128
+ function formatTopLevelCommandSuggestion(input, suggestion) {
129
+ return formatLocalGuidancePanel({
130
+ title: `未知命令: ${input}`,
131
+ reason: "输入看起来像命令,但不是轻灵已注册的顶层命令。",
132
+ next: `你是不是想用: qling ${suggestion.command}`,
133
+ example: `qling help ${suggestion.helpTopic} 或 qling run ${quoteTaskForRun(input)}`,
134
+ boundary: getLocalizedText().boundaries.localNoModel,
135
+ });
136
+ }
137
+ export function formatCliError(code, message) {
138
+ const t = getLocalizedText();
139
+ if (message.includes("\n原因:") || message.includes(t.labels.reason + ":")) {
140
+ return `Error: [${code}]\n${message}`;
141
+ }
142
+ return `Error: [${code}]\n${formatLocalGuidancePanel({
143
+ title: message,
144
+ reason: "命令参数组合或取值不符合轻灵 CLI 约定。",
145
+ next: "运行 `qling help` 查看可用命令,或改用推荐的新手路径。",
146
+ example: "qling help",
147
+ boundary: t.boundaries.localValidation,
148
+ })}`;
149
+ }
150
+ export function parseCliArgs(args) {
151
+ const global = {};
152
+ const warnings = [];
153
+ const positional = [];
154
+ const subArgs = [];
155
+ let hasHelp = false;
156
+ let hasVersion = false;
157
+ let modeFromSubcommand = null;
158
+ let modeFromAliasChat = false;
159
+ let modeFromAliasRepl = false;
160
+ let onceTask = null;
161
+ for (let i = 0; i < args.length; i++) {
162
+ const arg = args[i];
163
+ if (isHelpFlag(arg)) {
164
+ hasHelp = true;
165
+ continue;
166
+ }
167
+ if (isVersionFlag(arg)) {
168
+ hasVersion = true;
169
+ continue;
170
+ }
171
+ if (!arg.startsWith("-") && modeFromSubcommand === null && positional.length === 0) {
172
+ const resolvedMode = resolveTopLevelMode(arg);
173
+ if (resolvedMode) {
174
+ modeFromSubcommand = resolvedMode;
175
+ if (isManagementMode(resolvedMode)) {
176
+ subArgs.push(...args.slice(i + 1));
177
+ break;
178
+ }
179
+ continue;
180
+ }
181
+ }
182
+ if (arg === "--tui" || arg === "-t") {
183
+ modeFromAliasChat = true;
184
+ warnings.push("`--tui` is deprecated, use `qling chat` instead.");
185
+ continue;
186
+ }
187
+ if (arg === "--repl" || arg === "-r") {
188
+ modeFromAliasRepl = true;
189
+ warnings.push("`--repl` is deprecated, use `qling repl` instead.");
190
+ continue;
191
+ }
192
+ if (arg === "--once") {
193
+ const next = args[i + 1];
194
+ if (!next) {
195
+ return {
196
+ kind: "error",
197
+ code: "CLI_MISSING_TASK",
198
+ message: formatLocalGuidancePanel({
199
+ title: "缺少任务内容",
200
+ reason: "`--once` 后面需要一个任务字符串。",
201
+ next: "改用推荐形式 `qling run \"任务\"`。",
202
+ example: "qling run \"分析这个仓库\"",
203
+ boundary: getLocalizedText().boundaries.localValidation,
204
+ }),
205
+ exitCode: 2,
206
+ };
207
+ }
208
+ onceTask = next;
209
+ warnings.push("`--once` is deprecated, use `qling run \"task\"` instead.");
210
+ i++;
211
+ continue;
212
+ }
213
+ if (arg.startsWith("--once=")) {
214
+ const value = arg.slice("--once=".length).trim();
215
+ if (!value) {
216
+ return {
217
+ kind: "error",
218
+ code: "CLI_MISSING_TASK",
219
+ message: formatLocalGuidancePanel({
220
+ title: "缺少任务内容",
221
+ reason: "`--once` 后面需要一个非空任务字符串。",
222
+ next: "改用推荐形式 `qling run \"任务\"`。",
223
+ example: "qling run \"分析这个仓库\"",
224
+ boundary: getLocalizedText().boundaries.localValidation,
225
+ }),
226
+ exitCode: 2,
227
+ };
228
+ }
229
+ onceTask = value;
230
+ warnings.push("`--once` is deprecated, use `qling run \"task\"` instead.");
231
+ continue;
232
+ }
233
+ if (arg === "--no-workspace") {
234
+ global.noWorkspace = true;
235
+ continue;
236
+ }
237
+ if (arg === "--continue") {
238
+ global.continueSession = true;
239
+ continue;
240
+ }
241
+ if (arg === "--resume" || arg.startsWith("--resume=")) {
242
+ const resume = parseResumeOption(args, i, arg);
243
+ if (resume.error) {
244
+ return {
245
+ kind: "error",
246
+ code: resume.error.code,
247
+ message: resume.error.message,
248
+ exitCode: 2,
249
+ };
250
+ }
251
+ global.resumeSession = resume.value;
252
+ if (resume.consumeNext)
253
+ i++;
254
+ continue;
255
+ }
256
+ if (arg === "--inspect-prompt") {
257
+ global.inspectPrompt = true;
258
+ continue;
259
+ }
260
+ if (arg === "--inspect-request") {
261
+ global.inspectRequest = true;
262
+ continue;
263
+ }
264
+ const maybeErr = parseValueOption(args, i, arg, global);
265
+ if (maybeErr) {
266
+ if (maybeErr.consumeNext)
267
+ i++;
268
+ if (maybeErr.error) {
269
+ return {
270
+ kind: "error",
271
+ code: maybeErr.error.code,
272
+ message: maybeErr.error.message,
273
+ exitCode: 2,
274
+ };
275
+ }
276
+ continue;
277
+ }
278
+ positional.push(arg);
279
+ }
280
+ // --version / -V 优先于普通任务,但不覆盖 --help
281
+ if (hasHelp) {
282
+ return { kind: "ok", mode: "help", subArgs: resolveHelpTopicArgs(modeFromSubcommand, positional), global, warnings };
283
+ }
284
+ if (hasVersion || modeFromSubcommand === "version") {
285
+ return { kind: "ok", mode: "version", subArgs: [], global, warnings };
286
+ }
287
+ if (modeFromSubcommand && modeFromSubcommand !== "help" && isManagementMode(modeFromSubcommand) && subArgs.some(isHelpFlag)) {
288
+ return { kind: "ok", mode: "help", subArgs: [modeFromSubcommand], global, warnings };
289
+ }
290
+ if (global.continueSession && global.resumeSession) {
291
+ const t = getLocalizedText();
292
+ return {
293
+ kind: "error",
294
+ code: "CLI_INVALID_MODE_COMBINATION",
295
+ message: formatLocalGuidancePanel({
296
+ title: t.errors.cli.invalidModeTitle,
297
+ reason: t.errors.cli.invalidModeReason,
298
+ next: t.errors.cli.invalidModeNext,
299
+ example: t.errors.cli.invalidModeExample,
300
+ boundary: t.boundaries.localValidation,
301
+ }),
302
+ exitCode: 2,
303
+ };
304
+ }
305
+ const hasOnce = onceTask !== null;
306
+ const hasPositional = positional.length > 0;
307
+ const hasModeByAlias = modeFromAliasChat || modeFromAliasRepl;
308
+ const explicitModeCount = (modeFromSubcommand ? 1 : 0) + (modeFromAliasChat ? 1 : 0) + (modeFromAliasRepl ? 1 : 0) + (hasOnce ? 1 : 0);
309
+ if (explicitModeCount > 1) {
310
+ const t = getLocalizedText();
311
+ return {
312
+ kind: "error",
313
+ code: "CLI_INVALID_MODE_COMBINATION",
314
+ message: formatLocalGuidancePanel({
315
+ title: t.errors.cli.invalidModeTitle,
316
+ reason: t.errors.cli.invalidModeReason,
317
+ next: t.errors.cli.invalidModeNext,
318
+ example: t.errors.cli.invalidModeExample,
319
+ boundary: t.boundaries.localValidation,
320
+ }),
321
+ exitCode: 2,
322
+ };
323
+ }
324
+ if (modeFromSubcommand === "run") {
325
+ if (global.continueSession || global.resumeSession) {
326
+ const t = getLocalizedText();
327
+ return {
328
+ kind: "error",
329
+ code: "CLI_INVALID_MODE_COMBINATION",
330
+ message: formatLocalGuidancePanel({
331
+ title: t.errors.cli.invalidModeTitle,
332
+ reason: t.errors.cli.invalidModeReason,
333
+ next: t.errors.cli.invalidModeNext,
334
+ example: t.errors.cli.invalidModeExample,
335
+ boundary: t.boundaries.localValidation,
336
+ }),
337
+ exitCode: 2,
338
+ };
339
+ }
340
+ const task = onceTask ?? positional.join(" ").trim();
341
+ if (!task) {
342
+ return {
343
+ kind: "error",
344
+ code: "CLI_MISSING_TASK",
345
+ message: formatLocalGuidancePanel({
346
+ title: "缺少任务内容",
347
+ reason: "`run` 需要一个任务字符串。",
348
+ next: "在命令后写清楚要执行的任务。",
349
+ example: "qling run \"分析这个仓库\"",
350
+ boundary: getLocalizedText().boundaries.localValidation,
351
+ }),
352
+ exitCode: 2,
353
+ };
354
+ }
355
+ return { kind: "ok", mode: "run", task, subArgs: [], global, warnings };
356
+ }
357
+ if (isManagementMode(modeFromSubcommand)) {
358
+ if (global.continueSession || global.resumeSession) {
359
+ const t = getLocalizedText();
360
+ return {
361
+ kind: "error",
362
+ code: "CLI_INVALID_MODE_COMBINATION",
363
+ message: formatLocalGuidancePanel({
364
+ title: t.errors.cli.invalidModeTitle,
365
+ reason: t.errors.cli.invalidModeReason,
366
+ next: t.errors.cli.invalidModeNext,
367
+ example: t.errors.cli.invalidModeExample,
368
+ boundary: t.boundaries.localValidation,
369
+ }),
370
+ exitCode: 2,
371
+ };
372
+ }
373
+ return { kind: "ok", mode: modeFromSubcommand, subArgs, global, warnings };
374
+ }
375
+ if (modeFromSubcommand === "chat") {
376
+ if (hasPositional) {
377
+ const t = getLocalizedText();
378
+ return {
379
+ kind: "error",
380
+ code: "CLI_INVALID_MODE_COMBINATION",
381
+ message: formatLocalGuidancePanel({
382
+ title: t.errors.cli.invalidModeTitle,
383
+ reason: "`chat` 模式不接受单次任务字符串。",
384
+ next: "使用 `qling run \"task\"` 执行单次任务。",
385
+ example: "qling run \"分析这个仓库\"",
386
+ boundary: t.boundaries.localValidation,
387
+ }),
388
+ exitCode: 2,
389
+ };
390
+ }
391
+ return { kind: "ok", mode: "chat", subArgs: [], global, warnings };
392
+ }
393
+ if (modeFromSubcommand === "repl") {
394
+ if (hasPositional) {
395
+ const t = getLocalizedText();
396
+ return {
397
+ kind: "error",
398
+ code: "CLI_INVALID_MODE_COMBINATION",
399
+ message: formatLocalGuidancePanel({
400
+ title: t.errors.cli.invalidModeTitle,
401
+ reason: "`repl` 模式不接受单次任务字符串。",
402
+ next: "使用 `qling run \"task\"` 执行单次任务。",
403
+ example: "qling run \"分析这个仓库\"",
404
+ boundary: t.boundaries.localValidation,
405
+ }),
406
+ exitCode: 2,
407
+ };
408
+ }
409
+ return { kind: "ok", mode: "repl", subArgs: [], global, warnings };
410
+ }
411
+ if (modeFromAliasChat) {
412
+ if (hasPositional) {
413
+ const t = getLocalizedText();
414
+ return {
415
+ kind: "error",
416
+ code: "CLI_INVALID_MODE_COMBINATION",
417
+ message: formatLocalGuidancePanel({
418
+ title: t.errors.cli.invalidModeTitle,
419
+ reason: "`--tui` 模式不接受单次任务字符串。",
420
+ next: "使用 `qling run \"task\"` 执行单次任务。",
421
+ example: "qling run \"分析这个仓库\"",
422
+ boundary: t.boundaries.localValidation,
423
+ }),
424
+ exitCode: 2,
425
+ };
426
+ }
427
+ return { kind: "ok", mode: "chat", subArgs: [], global, warnings };
428
+ }
429
+ if (modeFromAliasRepl) {
430
+ if (hasPositional) {
431
+ const t = getLocalizedText();
432
+ return {
433
+ kind: "error",
434
+ code: "CLI_INVALID_MODE_COMBINATION",
435
+ message: formatLocalGuidancePanel({
436
+ title: t.errors.cli.invalidModeTitle,
437
+ reason: "`--repl` 模式不接受单次任务字符串。",
438
+ next: "使用 `qling run \"task\"` 执行单次任务。",
439
+ example: "qling run \"分析这个仓库\"",
440
+ boundary: t.boundaries.localValidation,
441
+ }),
442
+ exitCode: 2,
443
+ };
444
+ }
445
+ return { kind: "ok", mode: "repl", subArgs: [], global, warnings };
446
+ }
447
+ if (hasOnce) {
448
+ if (global.continueSession || global.resumeSession) {
449
+ const t = getLocalizedText();
450
+ return {
451
+ kind: "error",
452
+ code: "CLI_INVALID_MODE_COMBINATION",
453
+ message: formatLocalGuidancePanel({
454
+ title: t.errors.cli.invalidModeTitle,
455
+ reason: t.errors.cli.invalidModeReason,
456
+ next: t.errors.cli.invalidModeNext,
457
+ example: t.errors.cli.invalidModeExample,
458
+ boundary: t.boundaries.localValidation,
459
+ }),
460
+ exitCode: 2,
461
+ };
462
+ }
463
+ return { kind: "ok", mode: "run", task: onceTask, subArgs: [], global, warnings };
464
+ }
465
+ if (hasPositional) {
466
+ if (global.continueSession || global.resumeSession) {
467
+ const t = getLocalizedText();
468
+ return {
469
+ kind: "error",
470
+ code: "CLI_INVALID_MODE_COMBINATION",
471
+ message: formatLocalGuidancePanel({
472
+ title: t.errors.cli.invalidModeTitle,
473
+ reason: t.errors.cli.invalidModeReason,
474
+ next: t.errors.cli.invalidModeNext,
475
+ example: t.errors.cli.invalidModeExample,
476
+ boundary: t.boundaries.localValidation,
477
+ }),
478
+ exitCode: 2,
479
+ };
480
+ }
481
+ if (positional.length === 1) {
482
+ const suggestion = findTopLevelCommandSuggestion(positional[0]);
483
+ if (suggestion) {
484
+ return {
485
+ kind: "error",
486
+ code: "CLI_UNKNOWN_COMMAND_SUGGESTION",
487
+ message: formatTopLevelCommandSuggestion(positional[0], suggestion),
488
+ exitCode: 2,
489
+ };
490
+ }
491
+ }
492
+ warnings.push("positional one-shot form is deprecated, prefer `qling run \"task\"`.");
493
+ return { kind: "ok", mode: "run", task: positional.join(" "), subArgs: [], global, warnings };
494
+ }
495
+ return { kind: "ok", mode: "chat", subArgs: [], global, warnings };
496
+ }
497
+ export function buildHelpText(binName = "qling", topic) {
498
+ if (topic?.trim()) {
499
+ return formatFocusedHelp(topic, { surface: "cli", binName }).join("\n");
500
+ }
501
+ const version = getPackageVersion();
502
+ return `
503
+ ${binName} ${version} - 本地优先 AI Agent CLI 工作台
504
+
505
+ 新手路径:
506
+ ${binName} bootstrap # 本机一键启动检查:目录、配置、诊断和下一步
507
+ ${binName} setup # 快速配置 Provider / Model / Endpoint(密钥放系统环境变量)
508
+ ${binName} run "分析这个仓库" # 单次执行,验证模型和工具链
509
+ ${binName} # 进入 TUI,输入 / 打开命令面板
510
+ ${binName} doctor # 本地诊断
511
+ ${binName} privacy # 查看本地数据边界
512
+
513
+ 主要用法:
514
+ ${binName} # 默认进入流式 TUI(chat)
515
+ ${binName} chat # 显式进入流式 TUI
516
+ ${binName} --continue # 恢复最近一次交互会话
517
+ ${binName} --resume <session> # 恢复指定交互会话
518
+ ${binName} repl # 简易 REPL
519
+ ${binName} run "你的任务" # 单次执行(推荐)
520
+ ${binName} bootstrap # 本机一键启动检查
521
+ ${binName} setup # 快速配置 LLM 提供商(不保存 API key 到 .env)
522
+ ${binName} --version # 打印版本(亦支持 -V / version)
523
+ ${binName} help # 显示帮助
524
+
525
+ 管理命令:
526
+ ${binName} daemon start # 启动后台守护进程
527
+ ${binName} daemon status # 查看守护进程状态
528
+ ${binName} daemon stop # 停止后台守护进程
529
+ ${binName} doctor # 本地稳定性与数据留存诊断
530
+ ${binName} status # 查看本地状态摘要
531
+ ${binName} storage # 只读盘点本地 state/sessions/exports/cache
532
+ ${binName} exports [count] # 查看本地 Markdown 会话导出
533
+ ${binName} sessions [count] # 查看本地保存的会话快照
534
+ ${binName} checkpoint [name] # 复制最近会话为本地恢复检查点
535
+ ${binName} tasks list [count] # 查看本地持久化 loop/daemon 任务
536
+ ${binName} tasks cancel <id> # 取消本地持久化任务
537
+ ${binName} goal status [session] # 查看本地 session goal 状态
538
+ ${binName} goal set "完成条件" # 为最近会话设置 daemon goal
539
+ ${binName} goal clear [session] # 清除本地 session goal
540
+ ${binName} privacy # 查看本地数据留存路径与隐私边界
541
+ ${binName} context # 查看本地上下文与快照状态
542
+ ${binName} shortcuts # 查看 TUI 输入快捷键
543
+ ${binName} statusline # 查看本地状态线
544
+ ${binName} recap [session|latest] [count] # 查看本地保存会话回顾
545
+ ${binName} permissions # 查看本地权限默认策略与规则
546
+ ${binName} permissions explain <tool> # 解释指定工具的权限决策
547
+ ${binName} config # 查看本地配置摘要(密钥脱敏)
548
+ ${binName} mcp # MCP 状态 / list / presets / add / remove
549
+ ${binName} hooks # 查看本地 hooks/guard 配置摘要
550
+ ${binName} agents # 按状态分组查看后台任务
551
+ ${binName} 代理 # agents 的中文别名
552
+ ${binName} logs <id> # 查看特定使命日志(top-level alias)
553
+ ${binName} 日志 <id> # logs 的中文别名
554
+ ${binName} workflow resume <id> # 从状态机 Checkpoint 恢复执行
555
+ ${binName} memory status [count] # 查看本地持久化记忆索引
556
+ ${binName} memory list [count] # memory status 的列表别名
557
+ ${binName} memory search <query> [count] # 搜索本地持久化记忆
558
+ ${binName} memory sources # 查看本地上下文记忆来源与边界
559
+ ${binName} memory practices [count] # 查看本地蒸馏实践摘要
560
+ ${binName} memory graph [count] # 查看本地知识图谱节点摘要
561
+ ${binName} memory show <id> # 查看指定本地记忆详情
562
+ ${binName} memory reindex [--full] # 重新构建语义记忆向量索引
563
+ ${binName} dashboard start [--port] # 启动本地白盒化观测控制台
564
+ ${binName} discovery sync # 同步动态插件与技能
565
+
566
+ 使命管理:
567
+ ${binName} mission start "任务" # 开启一个后台使命
568
+ ${binName} mission list # 列出当前所有使命
569
+ ${binName} mission show <id> # 查看特定使命详情
570
+ ${binName} mission logs <id> # 查看特定使命日志
571
+ ${binName} mission attach <id> # 以只读模式跟随使命输出直到结束
572
+ ${binName} mission pause <id> # 暂停待执行/运行中的使命
573
+ ${binName} mission resume <id> # 恢复已暂停的使命
574
+ ${binName} mission cancel <id> # 取消未完成的使命
575
+ ${binName} mission stop <id> # cancel 的直观别名
576
+ ${binName} mission terminate <id> # cancel 的安全控制面别名
577
+ ${binName} mission retry <id> # 从终态使命创建重试任务
578
+ ${binName} mission respawn <id> # retry 的直观别名
579
+ ${binName} 使命 列表 # mission list 的中文别名
580
+ ${binName} 使命 终止 <id> # mission cancel 的中文别名
581
+ ${binName} --help # 显示帮助
582
+ ${binName} --version # 显示版本
583
+
584
+ 全局参数:
585
+ --config <path> # 指定配置文件(json/yaml)
586
+ --workspace <path> # 指定 workspace 根
587
+ --no-workspace # 禁用 workspace 根
588
+ --continue # 恢复最近一次 chat/repl 会话
589
+ --resume <session> # 恢复指定 chat/repl 会话
590
+ --file-cache-dir <path> # 指定 file cache 根
591
+ --file-state-dir <path> # 指定 file state 根
592
+ --inspect-prompt # 落盘 prompt 调试信息
593
+ --inspect-request # 落盘 request 调试信息
594
+ --version, -V # 打印版本并退出
595
+ --log-format <text|json> # 日志格式
596
+ --log-level <debug|info|warn|error> # 日志级别
597
+
598
+ 兼容别名:
599
+ ${binName} --tui, --repl, --once "task", "task"
600
+ 中文别名:
601
+ ${binName} 帮助 | 诊断 | 状态 | 存储 | 导出列表 [count] | 会话列表 [count] | 检查点 [name] | 任务 | 目标 | 隐私 | 上下文 | 快捷键 | 状态线 | 回顾 | 权限 | 配置 | 外部工具 | 钩子 | 记忆 | 使命 | 代理 | 日志 <id>
602
+
603
+ 本地边界:
604
+ help / doctor / privacy / config 只读本地状态;不会调用模型或联网。
605
+ API key 推荐配置到系统用户环境变量,例如 QLING_LLM_API_KEY;setup 不会写入 .env。
606
+
607
+ 模式冲突示例:
608
+ ${binName} repl --once "x" # Error: [CLI_INVALID_MODE_COMBINATION]
609
+ `.trim();
610
+ }
611
+ function parseResumeOption(args, index, arg) {
612
+ if (arg.startsWith("--resume=")) {
613
+ const value = arg.slice("--resume=".length).trim();
614
+ if (!value) {
615
+ return invalidOption("--resume", value);
616
+ }
617
+ return { consumeNext: false, value };
618
+ }
619
+ const next = args[index + 1];
620
+ if (!next) {
621
+ return invalidOption("--resume", "");
622
+ }
623
+ return { consumeNext: true, value: next };
624
+ }
625
+ function parseValueOption(args, index, arg, global) {
626
+ const setValue = (name, setter, validator) => {
627
+ if (arg.startsWith(`${name}=`)) {
628
+ const v = arg.slice(name.length + 1).trim();
629
+ if (!v || (validator && !validator(v))) {
630
+ return invalidOption(name, v);
631
+ }
632
+ setter(v);
633
+ return { consumeNext: false };
634
+ }
635
+ if (arg === name) {
636
+ const next = args[index + 1];
637
+ if (!next || (validator && !validator(next))) {
638
+ return invalidOption(name, next ?? "");
639
+ }
640
+ setter(next);
641
+ return { consumeNext: true };
642
+ }
643
+ return { consumeNext: false };
644
+ };
645
+ if (arg === "--config" || arg.startsWith("--config=")) {
646
+ return setValue("--config", (v) => (global.configPath = v));
647
+ }
648
+ if (arg === "--workspace" || arg.startsWith("--workspace=")) {
649
+ return setValue("--workspace", (v) => (global.workspaceDir = v));
650
+ }
651
+ if (arg === "--file-cache-dir" || arg.startsWith("--file-cache-dir=")) {
652
+ return setValue("--file-cache-dir", (v) => (global.fileCacheDir = v));
653
+ }
654
+ if (arg === "--file-state-dir" || arg.startsWith("--file-state-dir=")) {
655
+ return setValue("--file-state-dir", (v) => (global.fileStateDir = v));
656
+ }
657
+ if (arg === "--log-format" || arg.startsWith("--log-format=")) {
658
+ return setValue("--log-format", (v) => (global.logFormat = v), (v) => v === "text" || v === "json");
659
+ }
660
+ if (arg === "--log-level" || arg.startsWith("--log-level=")) {
661
+ return setValue("--log-level", (v) => (global.logLevel = v), (v) => v === "debug" || v === "info" || v === "warn" || v === "error");
662
+ }
663
+ if (arg === "--model" || arg.startsWith("--model=")) {
664
+ return setValue("--model", (v) => (global.model = v));
665
+ }
666
+ if (arg === "--provider" || arg.startsWith("--provider=")) {
667
+ return setValue("--provider", (v) => (global.provider = v));
668
+ }
669
+ if (arg === "--endpoint" || arg.startsWith("--endpoint=")) {
670
+ return setValue("--endpoint", (v) => (global.endpoint = v));
671
+ }
672
+ if (arg === "--api-key" || arg.startsWith("--api-key=")) {
673
+ return setValue("--api-key", (v) => (global.apiKey = v));
674
+ }
675
+ return null;
676
+ }
677
+ function invalidOption(name, value) {
678
+ const t = getLocalizedText();
679
+ const displayValue = value || "(empty)";
680
+ const guidance = formatLocalGuidancePanel({
681
+ title: t.errors.cli.invalidOptionTitle,
682
+ reason: `${t.errors.cli.invalidOptionReason} (${name}=${displayValue})`,
683
+ next: "检查选项值是否正确,使用 `qling help` 查看用法。",
684
+ example: `${name}=<有效值>`,
685
+ boundary: t.boundaries.localValidation,
686
+ });
687
+ return {
688
+ consumeNext: false,
689
+ error: {
690
+ code: "CLI_INVALID_OPTION_VALUE",
691
+ message: guidance,
692
+ },
693
+ };
694
+ }