@orion-agents/orion-code 0.1.4 → 0.1.5

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 (525) hide show
  1. package/README.md +52 -21
  2. package/README.zh-CN.md +14 -7
  3. package/dist/agents/coder.d.ts.map +1 -1
  4. package/dist/agents/coder.js.map +1 -1
  5. package/dist/agents/fork.d.ts +12 -4
  6. package/dist/agents/fork.d.ts.map +1 -1
  7. package/dist/agents/fork.js +28 -32
  8. package/dist/agents/fork.js.map +1 -1
  9. package/dist/agents/leader.d.ts.map +1 -1
  10. package/dist/agents/leader.js.map +1 -1
  11. package/dist/agents/worker-pool.d.ts.map +1 -1
  12. package/dist/agents/worker-pool.js +38 -29
  13. package/dist/agents/worker-pool.js.map +1 -1
  14. package/dist/cli.d.ts +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +4 -1
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/context-commands.d.ts +4 -0
  19. package/dist/commands/context-commands.d.ts.map +1 -0
  20. package/dist/commands/context-commands.js +74 -0
  21. package/dist/commands/context-commands.js.map +1 -0
  22. package/dist/commands/context-tool-command-handlers.d.ts +13 -0
  23. package/dist/commands/context-tool-command-handlers.d.ts.map +1 -0
  24. package/dist/commands/context-tool-command-handlers.js +580 -0
  25. package/dist/commands/context-tool-command-handlers.js.map +1 -0
  26. package/dist/commands/core-command-handlers.d.ts +12 -0
  27. package/dist/commands/core-command-handlers.d.ts.map +1 -0
  28. package/dist/commands/core-command-handlers.js +805 -0
  29. package/dist/commands/core-command-handlers.js.map +1 -0
  30. package/dist/commands/diagnostic-command-handlers.d.ts +14 -0
  31. package/dist/commands/diagnostic-command-handlers.d.ts.map +1 -0
  32. package/dist/commands/diagnostic-command-handlers.js +1043 -0
  33. package/dist/commands/diagnostic-command-handlers.js.map +1 -0
  34. package/dist/commands/diagnostic-commands.d.ts +4 -0
  35. package/dist/commands/diagnostic-commands.d.ts.map +1 -0
  36. package/dist/commands/diagnostic-commands.js +175 -0
  37. package/dist/commands/diagnostic-commands.js.map +1 -0
  38. package/dist/commands/index.d.ts +9 -10
  39. package/dist/commands/index.d.ts.map +1 -1
  40. package/dist/commands/index.js +42 -3563
  41. package/dist/commands/index.js.map +1 -1
  42. package/dist/commands/legacy-commands.d.ts +4 -0
  43. package/dist/commands/legacy-commands.d.ts.map +1 -0
  44. package/dist/commands/legacy-commands.js +44 -0
  45. package/dist/commands/legacy-commands.js.map +1 -0
  46. package/dist/commands/model-command-handlers.d.ts +15 -0
  47. package/dist/commands/model-command-handlers.d.ts.map +1 -0
  48. package/dist/commands/model-command-handlers.js +526 -0
  49. package/dist/commands/model-command-handlers.js.map +1 -0
  50. package/dist/commands/model-commands.d.ts +4 -0
  51. package/dist/commands/model-commands.d.ts.map +1 -0
  52. package/dist/commands/model-commands.js +85 -0
  53. package/dist/commands/model-commands.js.map +1 -0
  54. package/dist/commands/parser.d.ts +12 -0
  55. package/dist/commands/parser.d.ts.map +1 -1
  56. package/dist/commands/parser.js +48 -7
  57. package/dist/commands/parser.js.map +1 -1
  58. package/dist/commands/registry.d.ts +4 -0
  59. package/dist/commands/registry.d.ts.map +1 -0
  60. package/dist/commands/registry.js +566 -0
  61. package/dist/commands/registry.js.map +1 -0
  62. package/dist/commands/session-command-handlers.d.ts +10 -0
  63. package/dist/commands/session-command-handlers.d.ts.map +1 -0
  64. package/dist/commands/session-command-handlers.js +626 -0
  65. package/dist/commands/session-command-handlers.js.map +1 -0
  66. package/dist/commands/session-commands.d.ts +4 -0
  67. package/dist/commands/session-commands.d.ts.map +1 -0
  68. package/dist/commands/session-commands.js +102 -0
  69. package/dist/commands/session-commands.js.map +1 -0
  70. package/dist/commands/system-commands.d.ts +4 -0
  71. package/dist/commands/system-commands.d.ts.map +1 -0
  72. package/dist/commands/system-commands.js +80 -0
  73. package/dist/commands/system-commands.js.map +1 -0
  74. package/dist/commands/target-command.d.ts.map +1 -1
  75. package/dist/commands/target-command.js +29 -2
  76. package/dist/commands/target-command.js.map +1 -1
  77. package/dist/commands/tool-commands.d.ts +4 -0
  78. package/dist/commands/tool-commands.d.ts.map +1 -0
  79. package/dist/commands/tool-commands.js +49 -0
  80. package/dist/commands/tool-commands.js.map +1 -0
  81. package/dist/commands/types.d.ts +69 -5
  82. package/dist/commands/types.d.ts.map +1 -1
  83. package/dist/commands/types.js +3 -4
  84. package/dist/commands/types.js.map +1 -1
  85. package/dist/commands/workflow-command-handlers.d.ts +7 -0
  86. package/dist/commands/workflow-command-handlers.d.ts.map +1 -0
  87. package/dist/commands/workflow-command-handlers.js +32 -0
  88. package/dist/commands/workflow-command-handlers.js.map +1 -0
  89. package/dist/commands/workflow-commands.d.ts +4 -0
  90. package/dist/commands/workflow-commands.d.ts.map +1 -0
  91. package/dist/commands/workflow-commands.js +124 -0
  92. package/dist/commands/workflow-commands.js.map +1 -0
  93. package/dist/core/checkpoint.d.ts +12 -4
  94. package/dist/core/checkpoint.d.ts.map +1 -1
  95. package/dist/core/checkpoint.js +114 -28
  96. package/dist/core/checkpoint.js.map +1 -1
  97. package/dist/core/cost-tracker.d.ts +17 -1
  98. package/dist/core/cost-tracker.d.ts.map +1 -1
  99. package/dist/core/cost-tracker.js +24 -8
  100. package/dist/core/cost-tracker.js.map +1 -1
  101. package/dist/core/warn-dedup.d.ts +3 -0
  102. package/dist/core/warn-dedup.d.ts.map +1 -1
  103. package/dist/core/warn-dedup.js +6 -6
  104. package/dist/core/warn-dedup.js.map +1 -1
  105. package/dist/framework/index.d.ts +1 -1
  106. package/dist/framework/index.d.ts.map +1 -1
  107. package/dist/framework/index.js.map +1 -1
  108. package/dist/framework/prompt.d.ts +2 -2
  109. package/dist/framework/query.d.ts +2 -2
  110. package/dist/framework/query.d.ts.map +1 -1
  111. package/dist/framework/query.js +57 -10
  112. package/dist/framework/query.js.map +1 -1
  113. package/dist/framework/store.d.ts +15 -6
  114. package/dist/framework/store.d.ts.map +1 -1
  115. package/dist/framework/store.js +18 -0
  116. package/dist/framework/store.js.map +1 -1
  117. package/dist/framework/tool-scheduler.d.ts +16 -13
  118. package/dist/framework/tool-scheduler.d.ts.map +1 -1
  119. package/dist/framework/tool-scheduler.js +155 -38
  120. package/dist/framework/tool-scheduler.js.map +1 -1
  121. package/dist/framework/tool.d.ts +39 -2
  122. package/dist/framework/tool.d.ts.map +1 -1
  123. package/dist/framework/tool.js +27 -1
  124. package/dist/framework/tool.js.map +1 -1
  125. package/dist/harness/assembler.d.ts.map +1 -1
  126. package/dist/harness/assembler.js +4 -2
  127. package/dist/harness/assembler.js.map +1 -1
  128. package/dist/harness/evidence.d.ts.map +1 -1
  129. package/dist/harness/evidence.js +3 -2
  130. package/dist/harness/evidence.js.map +1 -1
  131. package/dist/harness/safety.d.ts +11 -1
  132. package/dist/harness/safety.d.ts.map +1 -1
  133. package/dist/harness/safety.js +112 -16
  134. package/dist/harness/safety.js.map +1 -1
  135. package/dist/index.d.ts +1 -4
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js.map +1 -1
  138. package/dist/init.d.ts +4 -8
  139. package/dist/init.d.ts.map +1 -1
  140. package/dist/init.js +4 -4
  141. package/dist/init.js.map +1 -1
  142. package/dist/ink-ui/App.d.ts +2 -2
  143. package/dist/ink-ui/components/Markdown.d.ts.map +1 -1
  144. package/dist/ink-ui/components/Markdown.js.map +1 -1
  145. package/dist/ink-ui/components/PixelHorseBanner.d.ts +2 -2
  146. package/dist/ink-ui/components/StatusLine.d.ts +2 -2
  147. package/dist/ink-ui/launch.d.ts +2 -2
  148. package/dist/ink-ui/screens/ReplScreen.d.ts +4 -3
  149. package/dist/ink-ui/screens/ReplScreen.d.ts.map +1 -1
  150. package/dist/ink-ui/screens/ReplScreen.js +103 -31
  151. package/dist/ink-ui/screens/ReplScreen.js.map +1 -1
  152. package/dist/memory/relevant-finder.d.ts +2 -1
  153. package/dist/memory/relevant-finder.d.ts.map +1 -1
  154. package/dist/memory/relevant-finder.js +17 -8
  155. package/dist/memory/relevant-finder.js.map +1 -1
  156. package/dist/memory/semantic-config.d.ts +9 -0
  157. package/dist/memory/semantic-config.d.ts.map +1 -0
  158. package/dist/memory/semantic-config.js +16 -0
  159. package/dist/memory/semantic-config.js.map +1 -0
  160. package/dist/memory/semantic-search.d.ts +1 -6
  161. package/dist/memory/semantic-search.d.ts.map +1 -1
  162. package/dist/memory/semantic-search.js +3 -15
  163. package/dist/memory/semantic-search.js.map +1 -1
  164. package/dist/memory/storage.d.ts +23 -0
  165. package/dist/memory/storage.d.ts.map +1 -1
  166. package/dist/memory/storage.js +116 -9
  167. package/dist/memory/storage.js.map +1 -1
  168. package/dist/memory/vector-store.d.ts +30 -0
  169. package/dist/memory/vector-store.d.ts.map +1 -1
  170. package/dist/memory/vector-store.js +160 -21
  171. package/dist/memory/vector-store.js.map +1 -1
  172. package/dist/migration/command.d.ts.map +1 -1
  173. package/dist/migration/command.js +0 -1
  174. package/dist/migration/command.js.map +1 -1
  175. package/dist/migration/migrate.d.ts.map +1 -1
  176. package/dist/migration/migrate.js +47 -103
  177. package/dist/migration/migrate.js.map +1 -1
  178. package/dist/migration/types.d.ts +0 -1
  179. package/dist/migration/types.d.ts.map +1 -1
  180. package/dist/print-ui/launch.d.ts +13 -3
  181. package/dist/print-ui/launch.d.ts.map +1 -1
  182. package/dist/print-ui/launch.js +28 -3
  183. package/dist/print-ui/launch.js.map +1 -1
  184. package/dist/product/environment.d.ts +3 -5
  185. package/dist/product/environment.d.ts.map +1 -1
  186. package/dist/product/environment.js +4 -32
  187. package/dist/product/environment.js.map +1 -1
  188. package/dist/product/index.d.ts +1 -1
  189. package/dist/product/index.d.ts.map +1 -1
  190. package/dist/product/index.js +1 -3
  191. package/dist/product/index.js.map +1 -1
  192. package/dist/product/paths.d.ts.map +1 -1
  193. package/dist/product/paths.js +16 -11
  194. package/dist/product/paths.js.map +1 -1
  195. package/dist/runtime/agent-runtime-controller.d.ts +4 -2
  196. package/dist/runtime/agent-runtime-controller.d.ts.map +1 -1
  197. package/dist/runtime/agent-runtime-controller.js +127 -14
  198. package/dist/runtime/agent-runtime-controller.js.map +1 -1
  199. package/dist/runtime/agent-runtime-protocol.d.ts +15 -0
  200. package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
  201. package/dist/runtime/agent-runtime-protocol.js +6 -0
  202. package/dist/runtime/agent-runtime-protocol.js.map +1 -1
  203. package/dist/runtime/chat-checkpoint.d.ts +17 -0
  204. package/dist/runtime/chat-checkpoint.d.ts.map +1 -0
  205. package/dist/runtime/chat-checkpoint.js +108 -0
  206. package/dist/runtime/chat-checkpoint.js.map +1 -0
  207. package/dist/runtime/chat-controller.d.ts +10 -51
  208. package/dist/runtime/chat-controller.d.ts.map +1 -1
  209. package/dist/runtime/chat-controller.js +256 -1070
  210. package/dist/runtime/chat-controller.js.map +1 -1
  211. package/dist/runtime/chat-effort.d.ts +5 -0
  212. package/dist/runtime/chat-effort.d.ts.map +1 -0
  213. package/dist/runtime/chat-effort.js +47 -0
  214. package/dist/runtime/chat-effort.js.map +1 -0
  215. package/dist/runtime/chat-presentation.d.ts +60 -0
  216. package/dist/runtime/chat-presentation.d.ts.map +1 -0
  217. package/dist/runtime/chat-presentation.js +537 -0
  218. package/dist/runtime/chat-presentation.js.map +1 -0
  219. package/dist/runtime/chat-trace.d.ts +52 -0
  220. package/dist/runtime/chat-trace.d.ts.map +1 -0
  221. package/dist/runtime/chat-trace.js +234 -0
  222. package/dist/runtime/chat-trace.js.map +1 -0
  223. package/dist/runtime/chat-workspace.d.ts +22 -0
  224. package/dist/runtime/chat-workspace.d.ts.map +1 -0
  225. package/dist/runtime/chat-workspace.js +154 -0
  226. package/dist/runtime/chat-workspace.js.map +1 -0
  227. package/dist/runtime/goals/accounting.js +1 -1
  228. package/dist/runtime/goals/accounting.js.map +1 -1
  229. package/dist/runtime/goals/completion-audit.d.ts.map +1 -1
  230. package/dist/runtime/goals/completion-audit.js +5 -4
  231. package/dist/runtime/goals/completion-audit.js.map +1 -1
  232. package/dist/runtime/goals/coordinator.d.ts +3 -0
  233. package/dist/runtime/goals/coordinator.d.ts.map +1 -1
  234. package/dist/runtime/goals/coordinator.js +30 -2
  235. package/dist/runtime/goals/coordinator.js.map +1 -1
  236. package/dist/runtime/goals/prompt.d.ts +1 -1
  237. package/dist/runtime/goals/prompt.d.ts.map +1 -1
  238. package/dist/runtime/goals/prompt.js +4 -3
  239. package/dist/runtime/goals/prompt.js.map +1 -1
  240. package/dist/runtime/goals/tools.d.ts +21 -8
  241. package/dist/runtime/goals/tools.d.ts.map +1 -1
  242. package/dist/runtime/goals/tools.js +141 -10
  243. package/dist/runtime/goals/tools.js.map +1 -1
  244. package/dist/runtime/loop-budget.d.ts +2 -2
  245. package/dist/runtime/rich-text/markdown-parser.d.ts +2 -0
  246. package/dist/runtime/rich-text/markdown-parser.d.ts.map +1 -1
  247. package/dist/runtime/rich-text/markdown-parser.js +50 -10
  248. package/dist/runtime/rich-text/markdown-parser.js.map +1 -1
  249. package/dist/runtime/subagents/index.d.ts +2 -2
  250. package/dist/runtime/subagents/index.d.ts.map +1 -1
  251. package/dist/runtime/subagents/index.js +2 -1
  252. package/dist/runtime/subagents/index.js.map +1 -1
  253. package/dist/runtime/subagents/policy.d.ts +1 -1
  254. package/dist/runtime/subagents/policy.d.ts.map +1 -1
  255. package/dist/runtime/subagents/policy.js.map +1 -1
  256. package/dist/runtime/subagents/presets.d.ts +2 -2
  257. package/dist/runtime/subagents/research-artifact.d.ts +7 -0
  258. package/dist/runtime/subagents/research-artifact.d.ts.map +1 -1
  259. package/dist/runtime/subagents/research-artifact.js +73 -27
  260. package/dist/runtime/subagents/research-artifact.js.map +1 -1
  261. package/dist/runtime/subagents/research-contract.d.ts +18 -4
  262. package/dist/runtime/subagents/research-contract.d.ts.map +1 -1
  263. package/dist/runtime/subagents/research-contract.js +122 -17
  264. package/dist/runtime/subagents/research-contract.js.map +1 -1
  265. package/dist/runtime/subagents/research-renderer.d.ts +27 -11
  266. package/dist/runtime/subagents/research-renderer.d.ts.map +1 -1
  267. package/dist/runtime/subagents/research-renderer.js +34 -2
  268. package/dist/runtime/subagents/research-renderer.js.map +1 -1
  269. package/dist/runtime/subagents/result-parser.d.ts +1 -5
  270. package/dist/runtime/subagents/result-parser.d.ts.map +1 -1
  271. package/dist/runtime/subagents/result-parser.js +5 -72
  272. package/dist/runtime/subagents/result-parser.js.map +1 -1
  273. package/dist/runtime/subagents/runtime-integration.d.ts +13 -7
  274. package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -1
  275. package/dist/runtime/subagents/runtime-integration.js +112 -2
  276. package/dist/runtime/subagents/runtime-integration.js.map +1 -1
  277. package/dist/runtime/subagents/supervisor.d.ts +15 -1
  278. package/dist/runtime/subagents/supervisor.d.ts.map +1 -1
  279. package/dist/runtime/subagents/supervisor.js +58 -3
  280. package/dist/runtime/subagents/supervisor.js.map +1 -1
  281. package/dist/runtime/subagents/tool.d.ts +2 -2
  282. package/dist/runtime/subagents/tool.d.ts.map +1 -1
  283. package/dist/runtime/subagents/tool.js +129 -9
  284. package/dist/runtime/subagents/tool.js.map +1 -1
  285. package/dist/runtime/subagents/types.d.ts +20 -0
  286. package/dist/runtime/subagents/types.d.ts.map +1 -1
  287. package/dist/runtime/subagents/types.js.map +1 -1
  288. package/dist/runtime/subagents/web-research-adapter.d.ts +4 -2
  289. package/dist/runtime/subagents/web-research-adapter.d.ts.map +1 -1
  290. package/dist/runtime/subagents/web-research-adapter.js +81 -15
  291. package/dist/runtime/subagents/web-research-adapter.js.map +1 -1
  292. package/dist/runtime/ui-events.d.ts +36 -8
  293. package/dist/runtime/ui-events.d.ts.map +1 -1
  294. package/dist/runtime/ui-events.js.map +1 -1
  295. package/dist/runtime/ui-view-model.d.ts +53 -4
  296. package/dist/runtime/ui-view-model.d.ts.map +1 -1
  297. package/dist/runtime/ui-view-model.js +190 -10
  298. package/dist/runtime/ui-view-model.js.map +1 -1
  299. package/dist/services/agent-runner.d.ts +5 -2
  300. package/dist/services/agent-runner.d.ts.map +1 -1
  301. package/dist/services/agent-runner.js +18 -18
  302. package/dist/services/agent-runner.js.map +1 -1
  303. package/dist/services/atomic-write.d.ts +9 -1
  304. package/dist/services/atomic-write.d.ts.map +1 -1
  305. package/dist/services/atomic-write.js +55 -2
  306. package/dist/services/atomic-write.js.map +1 -1
  307. package/dist/services/auth/auth.d.ts +11 -7
  308. package/dist/services/auth/auth.d.ts.map +1 -1
  309. package/dist/services/auth/auth.js +117 -31
  310. package/dist/services/auth/auth.js.map +1 -1
  311. package/dist/services/auth/aws.d.ts +2 -0
  312. package/dist/services/auth/aws.d.ts.map +1 -1
  313. package/dist/services/auth/aws.js +126 -12
  314. package/dist/services/auth/aws.js.map +1 -1
  315. package/dist/services/auth/index.d.ts +1 -1
  316. package/dist/services/auth/index.d.ts.map +1 -1
  317. package/dist/services/auth/index.js +2 -1
  318. package/dist/services/auth/index.js.map +1 -1
  319. package/dist/services/auto-fix/autoFixConfig.d.ts +0 -3
  320. package/dist/services/auto-fix/autoFixConfig.d.ts.map +1 -1
  321. package/dist/services/auto-fix/autoFixConfig.js +25 -8
  322. package/dist/services/auto-fix/autoFixConfig.js.map +1 -1
  323. package/dist/services/auto-fix/autoFixHook.d.ts +7 -0
  324. package/dist/services/auto-fix/autoFixHook.d.ts.map +1 -1
  325. package/dist/services/auto-fix/autoFixHook.js +10 -1
  326. package/dist/services/auto-fix/autoFixHook.js.map +1 -1
  327. package/dist/services/compact/auto-compact.d.ts +2 -0
  328. package/dist/services/compact/auto-compact.d.ts.map +1 -1
  329. package/dist/services/compact/auto-compact.js +15 -1
  330. package/dist/services/compact/auto-compact.js.map +1 -1
  331. package/dist/services/compact/compact.d.ts.map +1 -1
  332. package/dist/services/compact/compact.js +9 -11
  333. package/dist/services/compact/compact.js.map +1 -1
  334. package/dist/services/compact/summary-generator.d.ts.map +1 -1
  335. package/dist/services/compact/summary-generator.js +28 -4
  336. package/dist/services/compact/summary-generator.js.map +1 -1
  337. package/dist/services/compact/tool-call-groups.d.ts +19 -0
  338. package/dist/services/compact/tool-call-groups.d.ts.map +1 -0
  339. package/dist/services/compact/tool-call-groups.js +105 -0
  340. package/dist/services/compact/tool-call-groups.js.map +1 -0
  341. package/dist/services/concurrent-sessions.d.ts +4 -0
  342. package/dist/services/concurrent-sessions.d.ts.map +1 -1
  343. package/dist/services/concurrent-sessions.js +59 -12
  344. package/dist/services/concurrent-sessions.js.map +1 -1
  345. package/dist/services/config.d.ts +8 -4
  346. package/dist/services/config.d.ts.map +1 -1
  347. package/dist/services/config.js +15 -71
  348. package/dist/services/config.js.map +1 -1
  349. package/dist/services/doctor.d.ts +2 -2
  350. package/dist/services/doctor.js.map +1 -1
  351. package/dist/services/effort.d.ts +40 -0
  352. package/dist/services/effort.d.ts.map +1 -0
  353. package/dist/services/effort.js +88 -0
  354. package/dist/services/effort.js.map +1 -0
  355. package/dist/services/file-glob.d.ts.map +1 -1
  356. package/dist/services/file-glob.js +22 -2
  357. package/dist/services/file-glob.js.map +1 -1
  358. package/dist/services/file-lock.d.ts +7 -0
  359. package/dist/services/file-lock.d.ts.map +1 -0
  360. package/dist/services/file-lock.js +193 -0
  361. package/dist/services/file-lock.js.map +1 -0
  362. package/dist/services/global-config.d.ts +9 -0
  363. package/dist/services/global-config.d.ts.map +1 -1
  364. package/dist/services/global-config.js +79 -4
  365. package/dist/services/global-config.js.map +1 -1
  366. package/dist/services/goal-storage.d.ts.map +1 -1
  367. package/dist/services/goal-storage.js +30 -11
  368. package/dist/services/goal-storage.js.map +1 -1
  369. package/dist/services/llm.d.ts +35 -17
  370. package/dist/services/llm.d.ts.map +1 -1
  371. package/dist/services/llm.js +249 -113
  372. package/dist/services/llm.js.map +1 -1
  373. package/dist/services/mcp/transports.d.ts +0 -1
  374. package/dist/services/mcp/transports.d.ts.map +1 -1
  375. package/dist/services/mcp/transports.js +12 -13
  376. package/dist/services/mcp/transports.js.map +1 -1
  377. package/dist/services/model-context.d.ts +8 -0
  378. package/dist/services/model-context.d.ts.map +1 -1
  379. package/dist/services/model-context.js +111 -7
  380. package/dist/services/model-context.js.map +1 -1
  381. package/dist/services/model-registry.d.ts +3 -0
  382. package/dist/services/model-registry.d.ts.map +1 -1
  383. package/dist/services/model-registry.js +59 -2
  384. package/dist/services/model-registry.js.map +1 -1
  385. package/dist/services/provider-diagnostics.d.ts +1 -1
  386. package/dist/services/provider-diagnostics.d.ts.map +1 -1
  387. package/dist/services/provider-diagnostics.js +30 -16
  388. package/dist/services/provider-diagnostics.js.map +1 -1
  389. package/dist/services/provider-resilience/coordinator.d.ts +8 -3
  390. package/dist/services/provider-resilience/coordinator.d.ts.map +1 -1
  391. package/dist/services/provider-resilience/coordinator.js +86 -19
  392. package/dist/services/provider-resilience/coordinator.js.map +1 -1
  393. package/dist/services/provider-resilience/error-classifier.d.ts +1 -0
  394. package/dist/services/provider-resilience/error-classifier.d.ts.map +1 -1
  395. package/dist/services/provider-resilience/error-classifier.js +50 -26
  396. package/dist/services/provider-resilience/error-classifier.js.map +1 -1
  397. package/dist/services/provider-resilience/index.d.ts +3 -3
  398. package/dist/services/provider-resilience/index.d.ts.map +1 -1
  399. package/dist/services/provider-resilience/index.js +3 -1
  400. package/dist/services/provider-resilience/index.js.map +1 -1
  401. package/dist/services/provider-resilience/request-gate.d.ts +6 -0
  402. package/dist/services/provider-resilience/request-gate.d.ts.map +1 -1
  403. package/dist/services/provider-resilience/request-gate.js +24 -9
  404. package/dist/services/provider-resilience/request-gate.js.map +1 -1
  405. package/dist/services/provider-resilience/types.d.ts +10 -1
  406. package/dist/services/provider-resilience/types.d.ts.map +1 -1
  407. package/dist/services/provider-resilience/types.js.map +1 -1
  408. package/dist/services/redaction.d.ts.map +1 -1
  409. package/dist/services/redaction.js +29 -1
  410. package/dist/services/redaction.js.map +1 -1
  411. package/dist/services/session-index.d.ts.map +1 -1
  412. package/dist/services/session-index.js +75 -44
  413. package/dist/services/session-index.js.map +1 -1
  414. package/dist/services/session-memory/sessionMemory.d.ts.map +1 -1
  415. package/dist/services/session-memory/sessionMemory.js +6 -3
  416. package/dist/services/session-memory/sessionMemory.js.map +1 -1
  417. package/dist/services/session-storage.d.ts +12 -0
  418. package/dist/services/session-storage.d.ts.map +1 -1
  419. package/dist/services/session-storage.js +301 -230
  420. package/dist/services/session-storage.js.map +1 -1
  421. package/dist/services/storage-maintenance.d.ts.map +1 -1
  422. package/dist/services/storage-maintenance.js +25 -7
  423. package/dist/services/storage-maintenance.js.map +1 -1
  424. package/dist/services/task-manager.d.ts +6 -1
  425. package/dist/services/task-manager.d.ts.map +1 -1
  426. package/dist/services/task-manager.js +18 -4
  427. package/dist/services/task-manager.js.map +1 -1
  428. package/dist/services/tool-allowlist.d.ts +20 -10
  429. package/dist/services/tool-allowlist.d.ts.map +1 -1
  430. package/dist/services/tool-allowlist.js +64 -15
  431. package/dist/services/tool-allowlist.js.map +1 -1
  432. package/dist/services/usage-state.d.ts +10 -0
  433. package/dist/services/usage-state.d.ts.map +1 -1
  434. package/dist/services/usage-state.js +116 -45
  435. package/dist/services/usage-state.js.map +1 -1
  436. package/dist/services/verification-profile.d.ts.map +1 -1
  437. package/dist/services/verification-profile.js +23 -3
  438. package/dist/services/verification-profile.js.map +1 -1
  439. package/dist/services/workspace-diff.d.ts +14 -0
  440. package/dist/services/workspace-diff.d.ts.map +1 -1
  441. package/dist/services/workspace-diff.js +60 -11
  442. package/dist/services/workspace-diff.js.map +1 -1
  443. package/dist/skills/loader.d.ts.map +1 -1
  444. package/dist/skills/loader.js +23 -9
  445. package/dist/skills/loader.js.map +1 -1
  446. package/dist/skills/runtime.d.ts +3 -3
  447. package/dist/skills/runtime.d.ts.map +1 -1
  448. package/dist/skills/runtime.js +37 -4
  449. package/dist/skills/runtime.js.map +1 -1
  450. package/dist/skills/types.d.ts +1 -1
  451. package/dist/skills/types.d.ts.map +1 -1
  452. package/dist/terminal-ui/launch.d.ts +26 -8
  453. package/dist/terminal-ui/launch.d.ts.map +1 -1
  454. package/dist/terminal-ui/launch.js +79 -37
  455. package/dist/terminal-ui/launch.js.map +1 -1
  456. package/dist/tools/bash_security.d.ts +17 -0
  457. package/dist/tools/bash_security.d.ts.map +1 -1
  458. package/dist/tools/bash_security.js +233 -27
  459. package/dist/tools/bash_security.js.map +1 -1
  460. package/dist/tools/git.d.ts +8 -8
  461. package/dist/tools/git.d.ts.map +1 -1
  462. package/dist/tools/git.js +248 -55
  463. package/dist/tools/git.js.map +1 -1
  464. package/dist/tools/index.d.ts +13 -3
  465. package/dist/tools/index.d.ts.map +1 -1
  466. package/dist/tools/index.js +245 -25
  467. package/dist/tools/index.js.map +1 -1
  468. package/dist/tools/lsp.d.ts +74 -6
  469. package/dist/tools/lsp.d.ts.map +1 -1
  470. package/dist/tools/lsp.js +24 -5
  471. package/dist/tools/lsp.js.map +1 -1
  472. package/dist/tools/mcp.d.ts +11 -4
  473. package/dist/tools/mcp.d.ts.map +1 -1
  474. package/dist/tools/mcp.js +99 -3
  475. package/dist/tools/mcp.js.map +1 -1
  476. package/dist/tools/plan.d.ts +4 -4
  477. package/dist/tools/sandbox.d.ts +3 -1
  478. package/dist/tools/sandbox.d.ts.map +1 -1
  479. package/dist/tools/sandbox.js +28 -13
  480. package/dist/tools/sandbox.js.map +1 -1
  481. package/dist/tools/todo.d.ts +3 -3
  482. package/dist/tools/web.d.ts +15 -4
  483. package/dist/tools/web.d.ts.map +1 -1
  484. package/dist/tools/web.js +240 -26
  485. package/dist/tools/web.js.map +1 -1
  486. package/dist/tui-ui/launch.d.ts +3 -3
  487. package/dist/tui-ui/launch.d.ts.map +1 -1
  488. package/dist/tui-ui/launch.js +3 -3
  489. package/dist/tui-ui/launch.js.map +1 -1
  490. package/dist/tui-ui/layout.d.ts.map +1 -1
  491. package/dist/tui-ui/layout.js +9 -3
  492. package/dist/tui-ui/layout.js.map +1 -1
  493. package/dist/tui-ui/pickers.d.ts.map +1 -1
  494. package/dist/tui-ui/pickers.js +1 -0
  495. package/dist/tui-ui/pickers.js.map +1 -1
  496. package/dist/tui-ui/runner.d.ts +2 -1
  497. package/dist/tui-ui/runner.d.ts.map +1 -1
  498. package/dist/tui-ui/runner.js +18 -29
  499. package/dist/tui-ui/runner.js.map +1 -1
  500. package/dist/tui-ui/state.d.ts +13 -1
  501. package/dist/tui-ui/state.d.ts.map +1 -1
  502. package/dist/tui-ui/state.js +28 -1
  503. package/dist/tui-ui/state.js.map +1 -1
  504. package/dist/ui/markdown.js.map +1 -1
  505. package/dist/utils/debug-log.d.ts +3 -3
  506. package/dist/utils/debug-log.d.ts.map +1 -1
  507. package/dist/utils/debug-log.js +7 -4
  508. package/dist/utils/debug-log.js.map +1 -1
  509. package/dist/utils/json.d.ts +6 -0
  510. package/dist/utils/json.d.ts.map +1 -0
  511. package/dist/utils/json.js +66 -0
  512. package/dist/utils/json.js.map +1 -0
  513. package/dist/utils/mask.d.ts +8 -1
  514. package/dist/utils/mask.d.ts.map +1 -1
  515. package/dist/utils/mask.js +10 -12
  516. package/dist/utils/mask.js.map +1 -1
  517. package/dist/utils/observability.d.ts +22 -0
  518. package/dist/utils/observability.d.ts.map +1 -0
  519. package/dist/utils/observability.js +80 -0
  520. package/dist/utils/observability.js.map +1 -0
  521. package/dist/utils/token-estimate.d.ts +8 -0
  522. package/dist/utils/token-estimate.d.ts.map +1 -1
  523. package/dist/utils/token-estimate.js +30 -17
  524. package/dist/utils/token-estimate.js.map +1 -1
  525. package/package.json +9 -8
@@ -0,0 +1,626 @@
1
+ "use strict";
2
+ /** Handler implementations for the session-command-handlers boundary. */
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.handleResume = handleResume;
8
+ exports.handleSessions = handleSessions;
9
+ exports.handleSessionInfo = handleSessionInfo;
10
+ exports.handleSessionRename = handleSessionRename;
11
+ exports.handleCompact = handleCompact;
12
+ exports.handleContextClear = handleContextClear;
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const ui_view_model_1 = require("../runtime/ui-view-model");
15
+ const format_1 = require("../services/format");
16
+ const framework_1 = require("../framework");
17
+ const session_storage_1 = require("../services/session-storage");
18
+ const session_index_1 = require("../services/session-index");
19
+ const coordinator_1 = require("../services/compact/coordinator");
20
+ const model_context_1 = require("../services/model-context");
21
+ const token_estimate_1 = require("../utils/token-estimate");
22
+ const agent_status_1 = require("../runtime/agent-status");
23
+ // ============================================================================
24
+ // 颜色常量
25
+ // ============================================================================
26
+ const BRAND = chalk_1.default.hex('#FF6B35');
27
+ const ACCENT = chalk_1.default.hex('#00D4AA');
28
+ const DIM = chalk_1.default.dim;
29
+ const ERROR = chalk_1.default.red;
30
+ const WARN = chalk_1.default.yellow;
31
+ const SUCCESS = chalk_1.default.green;
32
+ const HEADER = chalk_1.default.cyan.bold;
33
+ function commandUICapabilities(ctx) {
34
+ return (0, ui_view_model_1.createStatusSnapshot)({
35
+ renderer: ctx.uiRenderer ?? ctx.config.ui?.renderer ?? 'terminal',
36
+ capabilities: ctx.uiCapabilities,
37
+ }).renderer.capabilities;
38
+ }
39
+ function hasCommandFlag(args, flag) {
40
+ return args.trim().split(/\s+/u).includes(flag);
41
+ }
42
+ function handleContextClear(ctx, args) {
43
+ const history = ctx.store.getSnapshot().conversationHistory;
44
+ if (history.length === 0) {
45
+ return { success: true, output: 'Current in-memory model context is already empty.' };
46
+ }
47
+ if (!hasCommandFlag(args, '--yes')) {
48
+ return {
49
+ success: false,
50
+ error: [
51
+ `This will clear ${history.length} message(s) from the current in-memory model context.`,
52
+ 'Saved session history will not be deleted and can still be restored with /resume.',
53
+ 'Run /context clear --yes to continue.',
54
+ ].join('\n'),
55
+ };
56
+ }
57
+ ctx.store.resetConversation();
58
+ (0, framework_1.resetToolState)();
59
+ return {
60
+ success: true,
61
+ output: [
62
+ `Cleared ${history.length} messages from current model context.`,
63
+ 'Saved session history, configuration, and system state were preserved.',
64
+ ].join('\n'),
65
+ };
66
+ }
67
+ async function handleCompact(ctx, args) {
68
+ const lines = [];
69
+ const console = {
70
+ log: (...values) => {
71
+ lines.push(values.map(value => String(value)).join(' '));
72
+ },
73
+ };
74
+ const finish = (success) => ({
75
+ success,
76
+ output: lines.join('\n'),
77
+ });
78
+ const history = ctx.store.getSnapshot().conversationHistory;
79
+ if (history.length === 0) {
80
+ console.log(DIM('Conversation history is empty, nothing to compact'));
81
+ console.log();
82
+ return finish(true);
83
+ }
84
+ // 解析参数
85
+ const thresholdArg = parseInt(args.trim(), 10);
86
+ const threshold = thresholdArg > 0 ? thresholdArg : 50;
87
+ console.log();
88
+ console.log(HEADER('Compacting Conversation'));
89
+ console.log(DIM('─'.repeat(40)));
90
+ console.log(` Current messages: ${history.length}`);
91
+ console.log(` Threshold: ${threshold}`);
92
+ console.log();
93
+ if (history.length <= threshold) {
94
+ console.log(DIM(`Conversation has ${history.length} messages, below compact threshold ${threshold}.`));
95
+ console.log(DIM('Nothing compacted.'));
96
+ console.log();
97
+ return finish(true);
98
+ }
99
+ console.log(DIM((0, agent_status_1.compactStatus)()));
100
+ try {
101
+ const modelId = ctx.llm?.getModel() ?? ctx.store.getSnapshot().currentModel;
102
+ const coordinator = ctx.compactCoordinator ??
103
+ new coordinator_1.CompactCoordinator({
104
+ modelId,
105
+ llm: ctx.llm,
106
+ outputReserveTokens: ctx.llm?.getMaxTokens?.(),
107
+ getContextCapsule: () => ctx.store.getSnapshot().harnessState?.capsule,
108
+ getHarnessState: () => ctx.store.getSnapshot().harnessState,
109
+ });
110
+ coordinator.configure({
111
+ modelId,
112
+ llm: ctx.llm,
113
+ outputReserveTokens: ctx.llm?.getMaxTokens?.(),
114
+ getContextCapsule: () => ctx.store.getSnapshot().harnessState?.capsule,
115
+ getHarnessState: () => ctx.store.getSnapshot().harnessState,
116
+ });
117
+ const beforeTokens = (0, token_estimate_1.estimateMessagesTokens)(history);
118
+ const automaticStats = coordinator.getAutomatic().getStats();
119
+ const beforeUsage = (0, model_context_1.createContextUsageSnapshot)({
120
+ modelId,
121
+ usedTokens: beforeTokens,
122
+ source: 'estimated',
123
+ outputReserveTokens: ctx.llm?.getMaxTokens?.(),
124
+ warningThreshold: automaticStats.preCompactThreshold,
125
+ autoCompactThreshold: automaticStats.threshold,
126
+ autoCompactEnabled: automaticStats.enabled,
127
+ });
128
+ const result = await coordinator.compactManual(history, threshold);
129
+ const compacted = result.messages;
130
+ const compactedTokens = (0, token_estimate_1.estimateMessagesTokens)(compacted);
131
+ const afterUsage = (0, model_context_1.createContextUsageSnapshot)({
132
+ modelId,
133
+ usedTokens: compactedTokens,
134
+ source: 'estimated',
135
+ outputReserveTokens: ctx.llm?.getMaxTokens?.(),
136
+ warningThreshold: automaticStats.preCompactThreshold,
137
+ autoCompactThreshold: automaticStats.threshold,
138
+ autoCompactEnabled: automaticStats.enabled,
139
+ });
140
+ const reduction = history.length - compacted.length;
141
+ const percent = Math.round((reduction / history.length) * 100);
142
+ const sessionId = ctx.getSession?.()?.id ?? ctx.sessionId;
143
+ if (sessionId) {
144
+ const sourceMessageCount = (0, session_storage_1.readSessionMessages)(sessionId).length;
145
+ const checkpoint = (0, session_storage_1.commitSessionCompactCheckpoint)({
146
+ sessionId,
147
+ mode: 'manual',
148
+ modelId,
149
+ sourceMessageCount,
150
+ transcriptStartMessageIndex: Math.max(0, sourceMessageCount - threshold),
151
+ modelHistory: compacted,
152
+ summary: {
153
+ text: result.summary,
154
+ generatedAt: result.summaryGeneratedAt,
155
+ source: result.summarySource,
156
+ },
157
+ beforeUsage,
158
+ afterUsage,
159
+ });
160
+ ctx.store.setState({ conversationHistory: checkpoint.modelHistory });
161
+ }
162
+ else {
163
+ ctx.store.setState({ conversationHistory: compacted });
164
+ }
165
+ ctx.store.setContextUsage(afterUsage);
166
+ console.log(SUCCESS(`✔ Compacted ${history.length} → ${compacted.length} messages`));
167
+ console.log(DIM(` Reduced by ${reduction} messages (${percent}%)`));
168
+ console.log();
169
+ return finish(true);
170
+ }
171
+ catch (err) {
172
+ const message = err instanceof Error ? err.message : String(err);
173
+ console.log(ERROR(`✗ Compact failed: ${message}`));
174
+ console.log();
175
+ return finish(false);
176
+ }
177
+ }
178
+ // ============================================================================
179
+ // Session 命令
180
+ // ============================================================================
181
+ function parseSessionScopeArgs(args, cwd) {
182
+ const parts = args.trim().split(/\s+/).filter(Boolean);
183
+ let allProjects = false;
184
+ let last = false;
185
+ let projectPath = (0, session_storage_1.resolveProjectPath)(cwd);
186
+ const queryParts = [];
187
+ for (let i = 0; i < parts.length; i++) {
188
+ const part = parts[i];
189
+ if (part === '--all' || part === '-a') {
190
+ allProjects = true;
191
+ continue;
192
+ }
193
+ if (part === '--last' || part === '-l') {
194
+ last = true;
195
+ continue;
196
+ }
197
+ if ((part === '--project' || part === '-p') && parts[i + 1]) {
198
+ projectPath = (0, session_storage_1.resolveProjectPath)(parts[i + 1]);
199
+ i++;
200
+ continue;
201
+ }
202
+ queryParts.push(part);
203
+ }
204
+ return {
205
+ allProjects,
206
+ projectPath,
207
+ last,
208
+ query: queryParts.join(' '),
209
+ };
210
+ }
211
+ function sessionTitle(session) {
212
+ return session.name || session.taskSummary || '(untitled)';
213
+ }
214
+ function truncateText(text, max) {
215
+ return text.length > max ? text.slice(0, max - 3) + '...' : text;
216
+ }
217
+ const writeSessionLineToConsole = (text = '') => console.log(text);
218
+ function printSessionRows(sessions, options = {}, write = writeSessionLineToConsole) {
219
+ for (let i = 0; i < sessions.length; i++) {
220
+ const session = sessions[i];
221
+ const startTime = new Date(session.startTime).toLocaleString();
222
+ const updatedTime = new Date(session.updatedAt ?? session.startTime).toLocaleString();
223
+ const duration = session.endTime
224
+ ? Math.round((session.endTime - session.startTime) / 1000) + 's'
225
+ : 'active';
226
+ const status = session.endTime ? DIM('completed') : ACCENT('active');
227
+ const index = options.indexed ? `${String(i + 1).padStart(2, ' ')}. ` : ' ';
228
+ const name = session.name ? ` ${ACCENT(`"${session.name}"`)}` : '';
229
+ write(`${index}${status} ${BRAND(session.id.slice(0, 8))}${name} ${DIM(session.model)}`);
230
+ write(` ${truncateText(sessionTitle(session), 96)}`);
231
+ write(` ${DIM(`Started: ${startTime}`)} ${DIM(`Updated: ${updatedTime}`)} ${DIM(`Duration: ${duration}`)}`);
232
+ write(` ${DIM(`Messages: ${session.messageCount ?? 0}`)} ${DIM(`Size: ${(0, format_1.formatBytes)(session.historySizeBytes ?? 0)}`)} ${DIM(`Tokens: ${session.tokenCount}`)} ${DIM(`Cost: $${session.cost.toFixed(4)}`)}`);
233
+ if (options.showIndexSummary) {
234
+ const indexSummary = (0, session_index_1.loadSessionIndex)(session.id, session.projectPath);
235
+ if (indexSummary) {
236
+ const toolCount = Object.values(indexSummary.tools).reduce((total, count) => total + count, 0);
237
+ write(` ${DIM(`Index: ${indexSummary.files.length} files, ${toolCount} tool calls, ${indexSummary.topics.length} topics`)}`);
238
+ }
239
+ else {
240
+ write(` ${DIM('Index: not built')}`);
241
+ }
242
+ }
243
+ if (options.showProject) {
244
+ write(` ${DIM(`Project: ${session.projectPath}`)}`);
245
+ }
246
+ write();
247
+ }
248
+ }
249
+ function parsePickerIndex(ref, max) {
250
+ const trimmed = ref.trim();
251
+ const match = trimmed.match(/^#?(\d+)$/);
252
+ if (!match)
253
+ return null;
254
+ const index = Number(match[1]);
255
+ if (!Number.isInteger(index) || index < 1 || index > max)
256
+ return null;
257
+ return index - 1;
258
+ }
259
+ function printSessionConflict(ref, matches, write = writeSessionLineToConsole) {
260
+ write(ERROR(`Session reference is ambiguous: ${ref}`));
261
+ write(DIM('Use a longer id prefix, exact session name, or pick one of these:'));
262
+ write();
263
+ printSessionRows(matches.slice(0, 10), { indexed: true, showProject: true }, write);
264
+ write(DIM('Example: /resume <longer-session-id>'));
265
+ write();
266
+ }
267
+ function printSessionPicker(sessions, options, write = writeSessionLineToConsole) {
268
+ write(HEADER(options.title));
269
+ write(DIM('─'.repeat(Math.min(process.stdout.columns || 80, 96))));
270
+ printSessionRows(sessions, { indexed: true, showProject: options.showProject }, write);
271
+ if (options.moreCount && options.moreCount > 0) {
272
+ write(DIM(`... ${options.moreCount} more sessions. Use /session list to list them, or /resume <session-id>.`));
273
+ }
274
+ write(DIM('Use /resume <number|session-id|name> or /resume --last.'));
275
+ }
276
+ function handleSessions(ctx, args = '') {
277
+ const scope = parseSessionScopeArgs(args, ctx.cwd);
278
+ const query = scope.query?.trim();
279
+ // If there's a search query, use the session index
280
+ if (query && !query.startsWith('--')) {
281
+ const allSessions = scope.allProjects ? (0, session_storage_1.listSessions)() : (0, session_storage_1.listProjectSessions)(scope.projectPath);
282
+ const matchedIds = (0, session_index_1.searchSessions)(query, allSessions.map(session => ({
283
+ id: session.id,
284
+ projectPath: session.projectPath,
285
+ })));
286
+ if (matchedIds.length === 0) {
287
+ console.log();
288
+ console.log(HEADER(`Sessions (search: "${query}")`));
289
+ console.log(DIM('─'.repeat(40)));
290
+ console.log(DIM(' No matching sessions found'));
291
+ console.log();
292
+ console.log(DIM('Tip: search by file path, tool name, or topic keyword'));
293
+ console.log();
294
+ return { success: true };
295
+ }
296
+ // Rebuild session list in matched order
297
+ const sessionMap = new Map(allSessions.map(s => [s.id, s]));
298
+ const matchedSessions = matchedIds
299
+ .map(id => sessionMap.get(id))
300
+ .filter(Boolean);
301
+ console.log();
302
+ console.log(HEADER(`Sessions (search: "${query}") — ${matchedSessions.length} matches`));
303
+ console.log(DIM('─'.repeat(40)));
304
+ console.log();
305
+ printSessionRows(matchedSessions, {
306
+ indexed: true,
307
+ showProject: scope.allProjects,
308
+ showIndexSummary: true,
309
+ });
310
+ console.log();
311
+ console.log(DIM(`Searched ${allSessions.length} sessions, found ${matchedSessions.length} matches`));
312
+ console.log(DIM('Use /resume <number|session-id|name> to restore a session'));
313
+ console.log();
314
+ return { success: true };
315
+ }
316
+ console.log();
317
+ console.log(HEADER(scope.allProjects ? 'Sessions (all projects)' : 'Sessions'));
318
+ console.log(DIM('─'.repeat(40)));
319
+ const sessions = scope.allProjects
320
+ ? (0, session_storage_1.listSessions)(10)
321
+ : (0, session_storage_1.listProjectSessions)(scope.projectPath, 10);
322
+ if (sessions.length === 0) {
323
+ console.log(DIM(scope.allProjects ? ' No sessions found' : ' No sessions found for this project'));
324
+ console.log();
325
+ return { success: true };
326
+ }
327
+ console.log();
328
+ printSessionRows(sessions, { indexed: true, showProject: scope.allProjects });
329
+ console.log(DIM('Use /resume <number|session-id|name> to restore a session'));
330
+ console.log(DIM('Use /session-rename <number|session-id|name> <new name> to rename'));
331
+ console.log(DIM('Use /sessions --all to list sessions from every project'));
332
+ console.log(DIM('Use /sessions <query> to search by file, tool, or keyword'));
333
+ console.log();
334
+ return { success: true };
335
+ }
336
+ function handleSessionInfo(ctx, args = '') {
337
+ const scope = parseSessionScopeArgs(args, ctx.cwd);
338
+ const active = ctx.getSession?.() ?? null;
339
+ let session = null;
340
+ if (!scope.query) {
341
+ session = active ?? (0, session_storage_1.listProjectSessions)(scope.projectPath)[0] ?? null;
342
+ }
343
+ else {
344
+ const found = (0, session_storage_1.lookupSessionRef)(scope.query, scope.projectPath, {
345
+ allProjects: scope.allProjects,
346
+ });
347
+ if (found.status === 'ambiguous') {
348
+ return {
349
+ success: false,
350
+ error: `Session reference is ambiguous: ${scope.query}. Matches: ${found.matches
351
+ .slice(0, 5)
352
+ .map(item => item.id.slice(0, 8))
353
+ .join(', ')}.`,
354
+ };
355
+ }
356
+ if (found.status === 'not_found') {
357
+ return { success: false, error: `Session not found: ${scope.query}.` };
358
+ }
359
+ session = found.session;
360
+ }
361
+ if (!session)
362
+ return { success: false, error: 'No session is available for this project.' };
363
+ return {
364
+ success: true,
365
+ output: [
366
+ `Session ${session.id}`,
367
+ `Name: ${session.name ?? '(untitled)'}`,
368
+ `Status: ${session.endTime ? 'completed' : 'active'}`,
369
+ `Model: ${session.model}`,
370
+ `Project: ${session.projectPath}`,
371
+ `Started: ${new Date(session.startTime).toISOString()}`,
372
+ `Updated: ${new Date(session.updatedAt ?? session.startTime).toISOString()}`,
373
+ `Messages: ${session.messageCount ?? 0}`,
374
+ `History size: ${(0, format_1.formatBytes)(session.historySizeBytes ?? 0)}`,
375
+ `Effort: ${session.effortPreference ?? 'auto'}`,
376
+ ].join('\n'),
377
+ };
378
+ }
379
+ function handleResume(ctx, args) {
380
+ const lines = [];
381
+ const write = (text = '') => lines.push(text);
382
+ const output = (success) => ({ success, output: lines.join('\n') });
383
+ const ui = commandUICapabilities(ctx);
384
+ const scope = parseSessionScopeArgs(args, ctx.cwd);
385
+ const sessionRef = scope.query;
386
+ const scopedSessions = (scope.allProjects ? (0, session_storage_1.listSessions)() : (0, session_storage_1.listProjectSessions)(scope.projectPath)).filter(session => (session.messageCount ?? 0) > 0);
387
+ if (!sessionRef) {
388
+ const lastSession = scopedSessions[0];
389
+ if (!lastSession) {
390
+ return {
391
+ success: false,
392
+ error: 'No previous session found for this project. Use /session list --all to list all sessions.',
393
+ };
394
+ }
395
+ if (scope.last || scopedSessions.length === 1) {
396
+ return restoreSession(ctx, lastSession, true);
397
+ }
398
+ const picker = {
399
+ title: scope.allProjects ? 'Pick a Session (all projects)' : 'Pick a Session',
400
+ showProject: scope.allProjects,
401
+ moreCount: 0,
402
+ sessions: scopedSessions,
403
+ allProjects: scope.allProjects,
404
+ maxVisibleItems: 10,
405
+ };
406
+ if (ui.structuredPickers) {
407
+ return { success: true, sessionPicker: picker };
408
+ }
409
+ const visibleSessions = scopedSessions.slice(0, 10);
410
+ write();
411
+ printSessionPicker(visibleSessions, {
412
+ title: picker.title,
413
+ showProject: picker.showProject,
414
+ moreCount: Math.max(0, scopedSessions.length - visibleSessions.length),
415
+ }, write);
416
+ write();
417
+ return output(true);
418
+ }
419
+ const pickerIndex = parsePickerIndex(sessionRef, scopedSessions.length);
420
+ if (pickerIndex !== null) {
421
+ return restoreSession(ctx, scopedSessions[pickerIndex], false);
422
+ }
423
+ // Resume specific session
424
+ const result = (0, session_storage_1.lookupSessionRef)(sessionRef, scope.projectPath, {
425
+ allProjects: scope.allProjects,
426
+ });
427
+ if (result.status === 'ambiguous') {
428
+ printSessionConflict(sessionRef, result.matches, write);
429
+ return output(false);
430
+ }
431
+ if (result.status === 'not_found') {
432
+ return {
433
+ success: false,
434
+ error: scope.allProjects
435
+ ? `Session not found: ${sessionRef}. Use /session list --all to list sessions.`
436
+ : `Session not found: ${sessionRef}. Use /session list, or /resume <id> --all.`,
437
+ };
438
+ }
439
+ return restoreSession(ctx, result.session, false);
440
+ }
441
+ function restoreSession(ctx, session, isLast) {
442
+ const resumed = (0, session_storage_1.resumeSession)(session.id) ?? session;
443
+ // Swap in the resumed session's transcript BEFORE emitting any command output,
444
+ // so the output is appended after the history rather than wiped by the
445
+ // transcript replacement below.
446
+ ctx.setSession?.(resumed);
447
+ // Load history and notify runtime/TUI consumers.
448
+ const history = (0, session_storage_1.loadSessionHistory)(resumed.id);
449
+ const transcriptMessages = (0, session_storage_1.loadSessionTranscriptMessages)(resumed.id);
450
+ const rawMessages = (0, session_storage_1.readSessionMessages)(resumed.id);
451
+ const checkpoint = (0, session_storage_1.loadSessionCompactCheckpoint)(resumed.id);
452
+ const resumeGeneratedAt = Date.now();
453
+ const summary = checkpoint?.summary.text ?? (history.length > 0 ? generateHistorySummary(history) : '');
454
+ const summaryGeneratedAt = checkpoint?.summary.generatedAt ?? resumeGeneratedAt;
455
+ const summarySource = checkpoint?.summary.source ?? 'resume_heuristic';
456
+ const summaryCoveredMessages = checkpoint?.summary.sourceMessageCount ?? rawMessages.length;
457
+ if (history.length > 0) {
458
+ const eventSummary = checkpoint?.summary.text ?? generateRestoredSessionEventSummary(history);
459
+ ctx.store.setState({ conversationHistory: history });
460
+ ctx.store.setState({
461
+ harnessState: (0, session_storage_1.loadSessionHarnessState)(resumed.id) ?? resumed.harnessState,
462
+ });
463
+ (0, framework_1.resetToolState)();
464
+ ctx.sessionRestored?.({
465
+ sessionId: resumed.id,
466
+ projectPath: resumed.projectPath,
467
+ model: resumed.model,
468
+ restoredMessages: history.length,
469
+ messageCount: resumed.messageCount,
470
+ summary: eventSummary,
471
+ summaryGeneratedAt,
472
+ summarySource,
473
+ summaryCoveredMessages,
474
+ checkpointId: checkpoint?.checkpointId,
475
+ transcriptMessages: transcriptMessages.length,
476
+ });
477
+ }
478
+ else {
479
+ ctx.sessionRestored?.({
480
+ sessionId: resumed.id,
481
+ projectPath: resumed.projectPath,
482
+ model: resumed.model,
483
+ restoredMessages: 0,
484
+ messageCount: resumed.messageCount,
485
+ summaryGeneratedAt,
486
+ summarySource,
487
+ summaryCoveredMessages,
488
+ checkpointId: checkpoint?.checkpointId,
489
+ transcriptMessages: transcriptMessages.length,
490
+ });
491
+ }
492
+ // Emit the resume summary. In TUI (inline-surface) mode, route through the
493
+ // command-output sink instead of raw console.log: a bare console.log writes
494
+ // directly to stdout and desyncs the surface's cursor tracking, leaving the
495
+ // live region mis-positioned (blank lower screen, content stuck at top).
496
+ // Plain text is used so no raw ANSI escapes leak into the TUI frame.
497
+ const bannerLines = [
498
+ isLast ? 'Resuming last session' : `Resuming session ${resumed.id.slice(0, 8)}`,
499
+ ` ID: ${resumed.id}`,
500
+ ` Model: ${resumed.model}`,
501
+ ` Project: ${resumed.projectPath}`,
502
+ ` Started: ${new Date(resumed.startTime).toLocaleString()}`,
503
+ ];
504
+ if (history.length > 0) {
505
+ bannerLines.push(` Summary: ${summary}`);
506
+ bannerLines.push(` Generated: ${new Date(summaryGeneratedAt).toLocaleString()} (${checkpoint ? 'compact checkpoint' : 'generated on resume'})`);
507
+ bannerLines.push(` Covers: ${summaryCoveredMessages} source messages`);
508
+ bannerLines.push(`✔ Restored ${history.length} model-context messages / ${transcriptMessages.length} transcript messages`);
509
+ }
510
+ else {
511
+ bannerLines.push(' No messages in session');
512
+ }
513
+ if (ctx.uiRenderer === 'tui' || ctx.uiRenderer === 'ink') {
514
+ if (!ctx.sessionRestored) {
515
+ for (const line of bannerLines)
516
+ ctx.writeLine?.(line);
517
+ }
518
+ return { success: true };
519
+ }
520
+ return {
521
+ success: true,
522
+ output: [
523
+ '',
524
+ HEADER(bannerLines[0]),
525
+ ...bannerLines.slice(1).map(line => (line.startsWith('✔') ? SUCCESS(line) : DIM(line))),
526
+ '',
527
+ ].join('\n'),
528
+ };
529
+ }
530
+ function handleSessionRename(ctx, args) {
531
+ const scope = parseSessionScopeArgs(args, ctx.cwd);
532
+ const parts = scope.query.split(/\s+/).filter(Boolean);
533
+ const ref = parts.shift();
534
+ const newName = parts.join(' ').trim();
535
+ if (!ref || !newName) {
536
+ console.log(ERROR('Usage: /session-rename <number|session-id|name> <new name>'));
537
+ console.log(DIM('Run /sessions first to see picker numbers for this project.'));
538
+ console.log();
539
+ return { success: false };
540
+ }
541
+ const scopedSessions = scope.allProjects
542
+ ? (0, session_storage_1.listSessions)()
543
+ : (0, session_storage_1.listProjectSessions)(scope.projectPath);
544
+ const pickerIndex = parsePickerIndex(ref, scopedSessions.length);
545
+ let session = pickerIndex !== null ? scopedSessions[pickerIndex] : null;
546
+ if (!session) {
547
+ const result = (0, session_storage_1.lookupSessionRef)(ref, scope.projectPath, { allProjects: scope.allProjects });
548
+ if (result.status === 'ambiguous') {
549
+ printSessionConflict(ref, result.matches);
550
+ return { success: false };
551
+ }
552
+ if (result.status === 'not_found') {
553
+ console.log(ERROR(`Session not found: ${ref}`));
554
+ console.log(DIM(scope.allProjects
555
+ ? 'Use /sessions --all to list sessions'
556
+ : 'Use /sessions to list project sessions'));
557
+ console.log();
558
+ return { success: false };
559
+ }
560
+ session = result.session;
561
+ }
562
+ const duplicate = scopedSessions.find(s => s.id !== session.id && s.name === newName);
563
+ const renamed = (0, session_storage_1.renameSession)(session.id, newName);
564
+ if (!renamed) {
565
+ console.log(ERROR(`Session not found: ${ref}`));
566
+ console.log();
567
+ return { success: false };
568
+ }
569
+ if (ctx.getSession?.()?.id === renamed.id) {
570
+ ctx.setSession?.(renamed);
571
+ }
572
+ console.log();
573
+ console.log(SUCCESS(`✔ Renamed session ${renamed.id.slice(0, 8)} to "${newName}"`));
574
+ if (duplicate) {
575
+ console.log(WARN(` Name already exists on ${duplicate.id.slice(0, 8)}; /resume "${newName}" will be ambiguous.`));
576
+ }
577
+ console.log();
578
+ return { success: true };
579
+ }
580
+ /** Generate a brief summary of conversation history */
581
+ function truncateRedactedSummary(text, maxLength) {
582
+ const redacted = (0, session_storage_1.redactTraceText)(text);
583
+ if (redacted.length <= maxLength)
584
+ return redacted;
585
+ let truncated = redacted.slice(0, maxLength);
586
+ for (const marker of ['[REDACTED_SECRET]']) {
587
+ const markerStart = truncated.indexOf(marker.slice(0, 6));
588
+ if (markerStart >= 0 && !truncated.includes(marker)) {
589
+ truncated = `${truncated.slice(0, markerStart)}${marker}`;
590
+ break;
591
+ }
592
+ }
593
+ return `${truncated}...`;
594
+ }
595
+ function generateHistorySummary(messages) {
596
+ const userMsgs = messages.filter(m => m.role === 'user' && m.content);
597
+ const assistantMsgsWithTools = messages.filter(m => m.role === 'assistant' && m.tool_calls && m.tool_calls.length > 0);
598
+ // Extract topics from first few user messages
599
+ const topics = userMsgs.slice(0, 3).map(m => {
600
+ return truncateRedactedSummary(m.content || '', 40);
601
+ });
602
+ // Extract tools used
603
+ const toolsUsed = assistantMsgsWithTools.flatMap(m => m.tool_calls?.map(tc => tc.function.name) || []);
604
+ const uniqueTools = [...new Set(toolsUsed)];
605
+ // Build summary
606
+ const parts = [];
607
+ if (topics.length > 0) {
608
+ parts.push(`Topics: ${topics.join('; ')}`);
609
+ }
610
+ if (uniqueTools.length > 0) {
611
+ parts.push(`Tools: ${uniqueTools.join(', ')}`);
612
+ }
613
+ if (parts.length === 0) {
614
+ return 'No significant activity';
615
+ }
616
+ return parts.join('. ');
617
+ }
618
+ function generateRestoredSessionEventSummary(messages) {
619
+ const assistantMsgsWithTools = messages.filter(m => m.role === 'assistant' && m.tool_calls && m.tool_calls.length > 0);
620
+ const toolsUsed = assistantMsgsWithTools.flatMap(m => m.tool_calls?.map(tc => tc.function.name) || []);
621
+ const uniqueTools = [...new Set(toolsUsed)].slice(0, 8);
622
+ if (uniqueTools.length === 0)
623
+ return undefined;
624
+ return `Tools: ${uniqueTools.join(', ')}`;
625
+ }
626
+ //# sourceMappingURL=session-command-handlers.js.map