@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,96 @@
1
+ import { readdir, stat } from "fs/promises";
2
+ import { join } from "path";
3
+ import { resolveSessionExportsDir } from "./session-export.js";
4
+ const DEFAULT_EXPORT_COUNT = 10;
5
+ const MAX_EXPORT_COUNT = 50;
6
+ export function parseSessionExportCount(value) {
7
+ if (value === undefined || value === null || value === "")
8
+ return DEFAULT_EXPORT_COUNT;
9
+ const parsed = Number(value);
10
+ if (!Number.isFinite(parsed) || parsed <= 0)
11
+ return DEFAULT_EXPORT_COUNT;
12
+ return Math.min(Math.floor(parsed), MAX_EXPORT_COUNT);
13
+ }
14
+ function isNotFoundError(error) {
15
+ return Boolean(error && typeof error === "object" && error.code === "ENOENT");
16
+ }
17
+ function formatBytes(bytes) {
18
+ if (bytes < 1024)
19
+ return `${bytes} B`;
20
+ const units = ["KB", "MB", "GB"];
21
+ let value = bytes / 1024;
22
+ let unitIndex = 0;
23
+ while (value >= 1024 && unitIndex < units.length - 1) {
24
+ value /= 1024;
25
+ unitIndex += 1;
26
+ }
27
+ return `${value.toFixed(value >= 10 ? 0 : 1)} ${units[unitIndex]}`;
28
+ }
29
+ export async function listSessionExportFiles(context, options = {}) {
30
+ const requestedCount = parseSessionExportCount(options.count);
31
+ const exportsDir = resolveSessionExportsDir(context, options.env ?? process.env);
32
+ let names;
33
+ try {
34
+ names = await readdir(exportsDir);
35
+ }
36
+ catch (error) {
37
+ if (isNotFoundError(error)) {
38
+ return { exportsDir, entries: [], total: 0, requestedCount, truncated: false };
39
+ }
40
+ throw error;
41
+ }
42
+ const entries = [];
43
+ for (const name of names) {
44
+ if (!name.toLowerCase().endsWith(".md"))
45
+ continue;
46
+ const path = join(exportsDir, name);
47
+ const fileStat = await stat(path);
48
+ if (!fileStat.isFile())
49
+ continue;
50
+ entries.push({
51
+ name,
52
+ path,
53
+ sizeBytes: fileStat.size,
54
+ modifiedAt: fileStat.mtime.toISOString(),
55
+ modifiedAtMs: fileStat.mtimeMs,
56
+ });
57
+ }
58
+ entries.sort((left, right) => right.modifiedAtMs - left.modifiedAtMs || left.name.localeCompare(right.name));
59
+ return {
60
+ exportsDir,
61
+ entries: entries.slice(0, requestedCount),
62
+ total: entries.length,
63
+ requestedCount,
64
+ truncated: entries.length > requestedCount,
65
+ };
66
+ }
67
+ export function formatSessionExportIndex(report) {
68
+ const lines = [
69
+ "",
70
+ "📚 本地导出列表",
71
+ "-----------------------------------------",
72
+ `Dir : ${report.exportsDir}`,
73
+ `Count : ${report.entries.length}/${report.total}`,
74
+ ];
75
+ if (!report.entries.length) {
76
+ lines.push("Status : 还没有导出;使用 /export 生成本地 Markdown。");
77
+ lines.push("-----------------------------------------");
78
+ lines.push("");
79
+ return lines;
80
+ }
81
+ if (report.truncated) {
82
+ lines.push(`Limit : 显示最近 ${report.requestedCount} 条`);
83
+ }
84
+ lines.push("");
85
+ report.entries.forEach((entry, index) => {
86
+ lines.push(`${index + 1}.`);
87
+ lines.push(` 文件名 : ${entry.name}`);
88
+ lines.push(` 修改时间 : ${entry.modifiedAt}`);
89
+ lines.push(` 大小 : ${formatBytes(entry.sizeBytes)}`);
90
+ lines.push(` 绝对路径 : ${entry.path}`);
91
+ });
92
+ lines.push("-----------------------------------------");
93
+ lines.push("说明 : 仅读取本地文件元数据,不读取导出正文、不调用模型、不联网。");
94
+ lines.push("");
95
+ return lines;
96
+ }
@@ -0,0 +1,28 @@
1
+ import type { SlashCommandContext } from "./commands/runtime.js";
2
+ interface ExportMessage {
3
+ role?: string;
4
+ content?: unknown;
5
+ }
6
+ export interface SessionExportSnapshot {
7
+ sessionId: string;
8
+ workspaceDir: string;
9
+ exportedAt: string;
10
+ turnCount: number;
11
+ tokens: number;
12
+ compactions: number;
13
+ messages: ExportMessage[];
14
+ }
15
+ export interface SessionExportOptions {
16
+ now?: () => Date;
17
+ env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
18
+ }
19
+ export interface SessionExportResult {
20
+ path: string;
21
+ messageCount: number;
22
+ }
23
+ export declare function resolveSessionExportsDir(context: SlashCommandContext, env?: SessionExportOptions["env"]): string;
24
+ export declare function formatSessionExportMarkdown(snapshot: SessionExportSnapshot): string;
25
+ export declare function buildSessionExportSnapshot(context: SlashCommandContext, options?: SessionExportOptions): Promise<SessionExportSnapshot>;
26
+ export declare function writeSessionExport(context: SlashCommandContext, options?: SessionExportOptions): Promise<SessionExportResult>;
27
+ export {};
28
+ //# sourceMappingURL=session-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-export.d.ts","sourceRoot":"","sources":["../src/session-export.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AA6BD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,GAAG,GAAE,oBAAoB,CAAC,KAAK,CAAe,GAC7C,MAAM,CAER;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAkCnF;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,qBAAqB,CAAC,CAwBhC;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAa9B"}
@@ -0,0 +1,99 @@
1
+ import { mkdir, writeFile } from "fs/promises";
2
+ import { homedir } from "os";
3
+ import { join, resolve } from "path";
4
+ function stringifyContent(content) {
5
+ if (typeof content === "string")
6
+ return content;
7
+ try {
8
+ return JSON.stringify(content, null, 2);
9
+ }
10
+ catch {
11
+ return String(content);
12
+ }
13
+ }
14
+ function sanitizeFilePart(value) {
15
+ return (value || "session")
16
+ .replace(/[^a-zA-Z0-9._-]+/g, "-")
17
+ .replace(/^-+|-+$/g, "")
18
+ .slice(0, 80) || "session";
19
+ }
20
+ function timestampForFile(date) {
21
+ return date.toISOString().replace(/[:.]/g, "-");
22
+ }
23
+ function resolveStateDir(context, env) {
24
+ const agentLoop = context.agentLoop;
25
+ return env?.QLING_FILE_STATE_DIR
26
+ || agentLoop.getRuntimeRootDir?.()
27
+ || join(homedir(), ".qling");
28
+ }
29
+ export function resolveSessionExportsDir(context, env = process.env) {
30
+ return resolve(resolveStateDir(context, env), "exports");
31
+ }
32
+ export function formatSessionExportMarkdown(snapshot) {
33
+ const lines = [
34
+ "# qling Session Export",
35
+ "",
36
+ `- session: ${snapshot.sessionId || "-"}`,
37
+ `- workspace: ${snapshot.workspaceDir || "-"}`,
38
+ `- exportedAt: ${snapshot.exportedAt}`,
39
+ `- turns: ${Number(snapshot.turnCount ?? 0)}`,
40
+ `- tokens: ${Number(snapshot.tokens ?? 0).toLocaleString()}`,
41
+ `- compactions: ${Number(snapshot.compactions ?? 0)}`,
42
+ "",
43
+ "> This file was exported locally by qling. No model call or network request is required for export.",
44
+ "",
45
+ "# Messages",
46
+ "",
47
+ ];
48
+ if (!snapshot.messages.length) {
49
+ lines.push("_No messages in current session._");
50
+ lines.push("");
51
+ return lines.join("\n");
52
+ }
53
+ snapshot.messages.forEach((message, index) => {
54
+ const role = String(message.role || "unknown");
55
+ lines.push(`## ${role} ${index + 1}`);
56
+ lines.push("");
57
+ lines.push("```text");
58
+ lines.push(stringifyContent(message.content ?? ""));
59
+ lines.push("```");
60
+ lines.push("");
61
+ });
62
+ return lines.join("\n");
63
+ }
64
+ export async function buildSessionExportSnapshot(context, options = {}) {
65
+ const agentLoop = context.agentLoop;
66
+ const stats = typeof agentLoop.getSessionStats === "function"
67
+ ? await agentLoop.getSessionStats()
68
+ : {
69
+ sessionId: agentLoop.getSessionId?.() ?? "session",
70
+ turnCount: 0,
71
+ tokens: 0,
72
+ compactions: 0,
73
+ };
74
+ const messages = typeof agentLoop.getMessagesSnapshot === "function"
75
+ ? await agentLoop.getMessagesSnapshot()
76
+ : [];
77
+ const now = options.now?.() ?? new Date();
78
+ return {
79
+ sessionId: stats.sessionId || agentLoop.getSessionId?.() || "session",
80
+ workspaceDir: context.workspaceDir || agentLoop.getWorkspaceDir?.() || process.cwd(),
81
+ exportedAt: now.toISOString(),
82
+ turnCount: Number(stats.turnCount ?? 0),
83
+ tokens: Number(stats.tokens ?? 0),
84
+ compactions: Number(stats.compactions ?? stats.compactionCount ?? 0),
85
+ messages: Array.isArray(messages) ? messages : [],
86
+ };
87
+ }
88
+ export async function writeSessionExport(context, options = {}) {
89
+ const snapshot = await buildSessionExportSnapshot(context, options);
90
+ const exportsDir = resolveSessionExportsDir(context, options.env ?? process.env);
91
+ await mkdir(exportsDir, { recursive: true });
92
+ const fileName = `${sanitizeFilePart(snapshot.sessionId)}-${timestampForFile(new Date(snapshot.exportedAt))}.md`;
93
+ const targetPath = join(exportsDir, fileName);
94
+ await writeFile(targetPath, formatSessionExportMarkdown(snapshot), { encoding: "utf8", flag: "wx" });
95
+ return {
96
+ path: targetPath,
97
+ messageCount: snapshot.messages.length,
98
+ };
99
+ }
@@ -0,0 +1,37 @@
1
+ import { type SessionGoalRunner, type SessionGoalState } from "./session/session-goal-manager.js";
2
+ export interface LocalSessionGoal {
3
+ sessionId: string;
4
+ filePath: string;
5
+ goal: SessionGoalState;
6
+ }
7
+ export interface SessionGoalReport {
8
+ stateDir: string;
9
+ goalsDir: string;
10
+ sessionRef: string | null;
11
+ totalGoals: number;
12
+ goals: LocalSessionGoal[];
13
+ warnings: string[];
14
+ }
15
+ export interface SessionGoalMutation {
16
+ sessionId: string;
17
+ sessionName: string;
18
+ workspaceDir: string | null;
19
+ goal: SessionGoalState;
20
+ }
21
+ export interface SetLocalSessionGoalOptions {
22
+ sessionRef?: string;
23
+ runner?: SessionGoalRunner;
24
+ clock?: () => number;
25
+ }
26
+ export interface ClearLocalSessionGoalOptions {
27
+ sessionRef?: string;
28
+ clock?: () => number;
29
+ }
30
+ export declare function listLocalSessionGoals(stateDir: string, options?: {
31
+ sessionRef?: string;
32
+ }): Promise<SessionGoalReport>;
33
+ export declare function setLocalSessionGoal(stateDir: string, condition: string, options?: SetLocalSessionGoalOptions): Promise<SessionGoalMutation>;
34
+ export declare function clearLocalSessionGoal(stateDir: string, options?: ClearLocalSessionGoalOptions): Promise<SessionGoalMutation>;
35
+ export declare function formatSessionGoalReport(report: SessionGoalReport): string[];
36
+ export declare function formatSessionGoalMutation(action: "set" | "clear", result: SessionGoalMutation): string[];
37
+ //# sourceMappingURL=session-goal-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-goal-report.d.ts","sourceRoot":"","sources":["../src/session-goal-report.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAGtH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAUD,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,OAAO,CAAC,iBAAiB,CAAC,CA8C5B;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,mBAAmB,CAAC,CAgC9B;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,mBAAmB,CAAC,CAgB9B;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAgC3E;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,KAAK,GAAG,OAAO,EACvB,MAAM,EAAE,mBAAmB,GAC1B,MAAM,EAAE,CAsBV"}
@@ -0,0 +1,219 @@
1
+ import * as fs from "fs/promises";
2
+ import { existsSync } from "fs";
3
+ import * as path from "path";
4
+ import { SessionGoalManager } from "./session/session-goal-manager.js";
5
+ import { SessionRegistry } from "./session/session-registry.js";
6
+ export async function listLocalSessionGoals(stateDir, options = {}) {
7
+ const goalsDir = path.join(stateDir, "session-goals");
8
+ const warnings = [];
9
+ const sessionRef = normalizeOptionalRef(options.sessionRef);
10
+ if (sessionRef) {
11
+ const sessionId = await resolveStatusSessionId(stateDir, sessionRef);
12
+ const goal = await readGoalFile(goalsDir, sessionId, warnings);
13
+ return {
14
+ stateDir,
15
+ goalsDir,
16
+ sessionRef,
17
+ totalGoals: goal ? 1 : 0,
18
+ goals: goal ? [goal] : [],
19
+ warnings,
20
+ };
21
+ }
22
+ if (!existsSync(goalsDir)) {
23
+ return {
24
+ stateDir,
25
+ goalsDir,
26
+ sessionRef: null,
27
+ totalGoals: 0,
28
+ goals: [],
29
+ warnings,
30
+ };
31
+ }
32
+ const files = (await fs.readdir(goalsDir)).filter((file) => file.endsWith(".json")).sort();
33
+ const goals = [];
34
+ for (const file of files) {
35
+ const sessionId = path.basename(file, ".json");
36
+ const goal = await readGoalFile(goalsDir, sessionId, warnings);
37
+ if (goal)
38
+ goals.push(goal);
39
+ }
40
+ goals.sort(compareGoals);
41
+ return {
42
+ stateDir,
43
+ goalsDir,
44
+ sessionRef: null,
45
+ totalGoals: goals.length,
46
+ goals,
47
+ warnings,
48
+ };
49
+ }
50
+ export async function setLocalSessionGoal(stateDir, condition, options = {}) {
51
+ const normalizedCondition = condition.trim();
52
+ if (!normalizedCondition) {
53
+ throw new Error("goal condition is required");
54
+ }
55
+ const target = await resolveSessionTarget(stateDir, options.sessionRef);
56
+ const runner = options.runner ?? "daemon";
57
+ const manager = new SessionGoalManager({
58
+ stateDir,
59
+ sessionId: target.sessionId,
60
+ clock: options.clock,
61
+ });
62
+ await manager.init();
63
+ const goal = await manager.setGoal(normalizedCondition, {
64
+ turnCount: target.turnCount,
65
+ tokens: target.tokens,
66
+ }, {
67
+ runner,
68
+ pending: runner === "daemon",
69
+ });
70
+ return {
71
+ sessionId: target.sessionId,
72
+ sessionName: target.name,
73
+ workspaceDir: target.workspaceDir,
74
+ goal,
75
+ };
76
+ }
77
+ export async function clearLocalSessionGoal(stateDir, options = {}) {
78
+ const target = await resolveSessionTarget(stateDir, options.sessionRef);
79
+ const manager = new SessionGoalManager({
80
+ stateDir,
81
+ sessionId: target.sessionId,
82
+ clock: options.clock,
83
+ });
84
+ await manager.init();
85
+ const goal = await manager.clearGoal("cli_clear");
86
+ return {
87
+ sessionId: target.sessionId,
88
+ sessionName: target.name,
89
+ workspaceDir: target.workspaceDir,
90
+ goal,
91
+ };
92
+ }
93
+ export function formatSessionGoalReport(report) {
94
+ const lines = [
95
+ "◎ 本地目标列表",
96
+ "-----------------------------------------",
97
+ `State dir : ${report.stateDir}`,
98
+ `Goals : ${report.goalsDir}`,
99
+ `Count : ${report.goals.length}/${report.totalGoals}`,
100
+ ];
101
+ if (report.sessionRef) {
102
+ lines.push(`Target : ${report.sessionRef}`);
103
+ }
104
+ if (report.goals.length === 0) {
105
+ lines.push("(无本地目标。可使用 `qling goal set \"完成条件\"` 创建 daemon goal。)");
106
+ }
107
+ else {
108
+ lines.push("");
109
+ for (const item of report.goals) {
110
+ lines.push(`- [${item.goal.status.toUpperCase()}] ${item.sessionId}`);
111
+ lines.push(` Runner : ${item.goal.runner ?? "session"} | pending=${item.goal.pending ? "yes" : "no"}`);
112
+ lines.push(` 条件 : ${item.goal.condition || "(空)"}`);
113
+ lines.push(` 创建 : ${formatTimestamp(item.goal.createdAt)} | 更新: ${formatTimestamp(item.goal.updatedAt)}`);
114
+ lines.push(` 评估 : ${item.goal.evaluatedTurns ?? 0} | 最近原因: ${item.goal.lastReason ?? "-"}`);
115
+ }
116
+ }
117
+ for (const warning of report.warnings) {
118
+ lines.push(`⚠️ ${warning}`);
119
+ }
120
+ lines.push("-----------------------------------------");
121
+ lines.push("说明: 只读取本地 goal 状态与会话摘要,不输出会话正文、不联网、不调用模型。");
122
+ return lines;
123
+ }
124
+ export function formatSessionGoalMutation(action, result) {
125
+ const title = action === "set" ? "◎ 已设置本地目标" : "◎ 已清除本地目标";
126
+ const lines = [
127
+ title,
128
+ "-----------------------------------------",
129
+ `Session : ${result.sessionId}`,
130
+ `Name : ${result.sessionName}`,
131
+ `状态 : ${result.goal.status}`,
132
+ `Runner : ${result.goal.runner ?? "session"} | pending=${result.goal.pending ? "yes" : "no"}`,
133
+ `条件 : ${result.goal.condition || "(空)"}`,
134
+ `更新 : ${formatTimestamp(result.goal.updatedAt)}`,
135
+ ];
136
+ if (result.workspaceDir) {
137
+ lines.push(`Workspace: ${result.workspaceDir}`);
138
+ }
139
+ lines.push("-----------------------------------------");
140
+ lines.push(action === "set"
141
+ ? "说明: 已写入本地 session-goals;默认 daemon runner,需 qlingd 运行后继续推进。"
142
+ : "说明: 仅更新本地 session-goals 状态,不删除历史记录。");
143
+ return lines;
144
+ }
145
+ async function resolveStatusSessionId(stateDir, sessionRef) {
146
+ if (sessionRef === "latest") {
147
+ return (await resolveSessionTarget(stateDir, sessionRef)).sessionId;
148
+ }
149
+ const registry = new SessionRegistry({ stateDir });
150
+ const sessions = await registry.list();
151
+ const normalized = normalizeRef(sessionRef);
152
+ const matched = sessions.find((session) => normalizeRef(session.name) === normalized || session.sessionId === sessionRef);
153
+ return matched?.sessionId ?? normalized;
154
+ }
155
+ async function resolveSessionTarget(stateDir, sessionRef) {
156
+ const registry = new SessionRegistry({ stateDir });
157
+ const sessions = await registry.list();
158
+ if (sessions.length === 0) {
159
+ throw new Error("no saved sessions found; start or resume a chat session first");
160
+ }
161
+ const normalized = normalizeOptionalRef(sessionRef);
162
+ const summary = !normalized || normalized === "latest"
163
+ ? sessions[0]
164
+ : findSession(sessions, normalized);
165
+ if (!summary) {
166
+ throw new Error(`session not found: ${sessionRef}`);
167
+ }
168
+ return {
169
+ sessionId: summary.sessionId,
170
+ name: summary.name,
171
+ workspaceDir: summary.workspaceDir,
172
+ turnCount: summary.turnCount,
173
+ tokens: summary.sessionTokens,
174
+ };
175
+ }
176
+ function findSession(sessions, sessionRef) {
177
+ const normalized = normalizeRef(sessionRef);
178
+ return (sessions.find((session) => normalizeRef(session.name) === normalized || session.sessionId === sessionRef) ?? null);
179
+ }
180
+ async function readGoalFile(goalsDir, sessionId, warnings) {
181
+ const filePath = path.join(goalsDir, `${normalizeRef(sessionId)}.json`);
182
+ if (!existsSync(filePath))
183
+ return null;
184
+ try {
185
+ const parsed = JSON.parse(await fs.readFile(filePath, "utf8"));
186
+ return {
187
+ sessionId: normalizeRef(sessionId),
188
+ filePath,
189
+ goal: {
190
+ ...parsed,
191
+ runner: parsed.runner ?? "session",
192
+ pending: parsed.pending ?? false,
193
+ },
194
+ };
195
+ }
196
+ catch (err) {
197
+ warnings.push(`${path.basename(filePath)}: ${err instanceof Error ? err.message : String(err)}`);
198
+ return null;
199
+ }
200
+ }
201
+ function normalizeOptionalRef(value) {
202
+ if (!value || !value.trim())
203
+ return null;
204
+ return normalizeRef(value.trim());
205
+ }
206
+ function normalizeRef(value) {
207
+ return path.basename(value).replace(/\.json$/i, "");
208
+ }
209
+ function compareGoals(left, right) {
210
+ const updated = (right.goal.updatedAt ?? 0) - (left.goal.updatedAt ?? 0);
211
+ if (updated !== 0)
212
+ return updated;
213
+ return left.sessionId.localeCompare(right.sessionId);
214
+ }
215
+ function formatTimestamp(ts) {
216
+ if (!ts)
217
+ return "-";
218
+ return new Date(ts).toLocaleString();
219
+ }
@@ -0,0 +1,16 @@
1
+ import { type SavedSessionSummary } from "./session/session-registry.js";
2
+ export interface SessionListReport {
3
+ stateDir: string;
4
+ sessionsDir: string;
5
+ sessions: SavedSessionSummary[];
6
+ total: number;
7
+ requestedCount: number;
8
+ truncated: boolean;
9
+ }
10
+ export interface SessionListOptions {
11
+ count?: string | number;
12
+ }
13
+ export declare function parseSessionListCount(value?: string | number): number;
14
+ export declare function listLocalSessions(stateDir: string, options?: SessionListOptions): Promise<SessionListReport>;
15
+ export declare function formatSessionListReport(report: SessionListReport): string[];
16
+ //# sourceMappingURL=session-list-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-list-report.d.ts","sourceRoot":"","sources":["../src/session-list-report.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAK1F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAKrE;AAOD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAa5B;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAoC3E"}
@@ -0,0 +1,60 @@
1
+ import { join } from "path";
2
+ import { SessionRegistry } from "./session/session-registry.js";
3
+ const DEFAULT_SESSION_COUNT = 20;
4
+ const MAX_SESSION_COUNT = 100;
5
+ export function parseSessionListCount(value) {
6
+ if (value === undefined || value === null || value === "")
7
+ return DEFAULT_SESSION_COUNT;
8
+ const parsed = Number(value);
9
+ if (!Number.isFinite(parsed) || parsed <= 0)
10
+ return DEFAULT_SESSION_COUNT;
11
+ return Math.min(Math.floor(parsed), MAX_SESSION_COUNT);
12
+ }
13
+ function formatTime(value) {
14
+ const ts = Date.parse(value);
15
+ return Number.isNaN(ts) ? value : new Date(ts).toLocaleString();
16
+ }
17
+ export async function listLocalSessions(stateDir, options = {}) {
18
+ const requestedCount = parseSessionListCount(options.count);
19
+ const registry = new SessionRegistry({ stateDir });
20
+ const allSessions = await registry.list();
21
+ return {
22
+ stateDir,
23
+ sessionsDir: join(stateDir, "sessions"),
24
+ sessions: allSessions.slice(0, requestedCount),
25
+ total: allSessions.length,
26
+ requestedCount,
27
+ truncated: allSessions.length > requestedCount,
28
+ };
29
+ }
30
+ export function formatSessionListReport(report) {
31
+ const lines = [
32
+ "",
33
+ "🗂️ 本地会话列表",
34
+ "-----------------------------------------",
35
+ `State dir : ${report.stateDir}`,
36
+ `Sessions : ${report.sessionsDir}`,
37
+ `Count : ${report.sessions.length}/${report.total}`,
38
+ ];
39
+ if (!report.sessions.length) {
40
+ lines.push("(无)");
41
+ lines.push("-----------------------------------------");
42
+ lines.push("说明 : 仅读取本地会话快照摘要,不调用模型、不联网。");
43
+ lines.push("");
44
+ return lines;
45
+ }
46
+ if (report.truncated) {
47
+ lines.push(`Limit : 显示最近 ${report.requestedCount} 条`);
48
+ }
49
+ lines.push("");
50
+ report.sessions.forEach((session, index) => {
51
+ lines.push(`${index + 1}. ${session.name} | ${session.sessionId}`);
52
+ lines.push(` 更新 : ${formatTime(session.updatedAt)} | turns=${session.turnCount} | messages=${session.messageCount} | tokens=${session.sessionTokens.toLocaleString()}`);
53
+ lines.push(` 压缩 : ${session.compactionCount}`);
54
+ lines.push(` Workspace: ${session.workspaceDir ?? "-"}`);
55
+ });
56
+ lines.push("-----------------------------------------");
57
+ lines.push("说明 : 输出只包含本地摘要字段,不输出消息正文;不调用模型、不联网。");
58
+ lines.push("");
59
+ return lines;
60
+ }
@@ -0,0 +1,23 @@
1
+ import type { SessionTask } from "./session/session-scheduler.js";
2
+ export interface LocalSessionTask extends SessionTask {
3
+ sessionId: string;
4
+ filePath: string;
5
+ }
6
+ export interface SessionTaskReport {
7
+ tasksDir: string;
8
+ totalFiles: number;
9
+ totalTasks: number;
10
+ shownTasks: number;
11
+ tasks: LocalSessionTask[];
12
+ warnings: string[];
13
+ }
14
+ export declare function parseSessionTaskCount(value?: string): number;
15
+ export declare function listLocalSessionTasks(stateDir: string, options?: {
16
+ count?: number;
17
+ }): Promise<SessionTaskReport>;
18
+ export declare function cancelLocalSessionTask(stateDir: string, taskId: string, options?: {
19
+ clock?: () => number;
20
+ }): Promise<LocalSessionTask>;
21
+ export declare function formatSessionTaskReport(report: SessionTaskReport): string[];
22
+ export declare function formatCanceledSessionTask(task: LocalSessionTask): string[];
23
+ //# sourceMappingURL=session-task-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-task-report.d.ts","sourceRoot":"","sources":["../src/session-task-report.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAKlE,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CA8D5B;AAED,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GACrC,OAAO,CAAC,gBAAgB,CAAC,CA0C3B;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAkC3E;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAY1E"}