lm-assist 0.1.66 → 0.1.68

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 (315) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/README.md +153 -23
  4. package/commands/sessions.md +80 -65
  5. package/commands/summary.md +140 -79
  6. package/install.sh +3 -3
  7. package/package.json +1 -1
  8. package/web/.next/BUILD_ID +1 -1
  9. package/web/.next/build-manifest.json +2 -2
  10. package/web/.next/fallback-build-manifest.json +2 -2
  11. package/web/.next/server/app/_global-error.html +2 -2
  12. package/web/.next/server/app/_global-error.rsc +1 -1
  13. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  14. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/web/.next/server/app/_not-found.html +1 -1
  19. package/web/.next/server/app/_not-found.rsc +1 -1
  20. package/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  21. package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  22. package/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  23. package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  24. package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  25. package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  26. package/web/.next/server/app/assist-resources.html +1 -1
  27. package/web/.next/server/app/assist-resources.rsc +1 -1
  28. package/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk/assist-resources/__PAGE__.segment.rsc +1 -1
  29. package/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk/assist-resources.segment.rsc +1 -1
  30. package/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  31. package/web/.next/server/app/assist-resources.segments/_full.segment.rsc +1 -1
  32. package/web/.next/server/app/assist-resources.segments/_head.segment.rsc +1 -1
  33. package/web/.next/server/app/assist-resources.segments/_index.segment.rsc +1 -1
  34. package/web/.next/server/app/assist-resources.segments/_tree.segment.rsc +1 -1
  35. package/web/.next/server/app/auth.html +1 -1
  36. package/web/.next/server/app/auth.rsc +1 -1
  37. package/web/.next/server/app/auth.segments/_full.segment.rsc +1 -1
  38. package/web/.next/server/app/auth.segments/_head.segment.rsc +1 -1
  39. package/web/.next/server/app/auth.segments/_index.segment.rsc +1 -1
  40. package/web/.next/server/app/auth.segments/_tree.segment.rsc +1 -1
  41. package/web/.next/server/app/auth.segments/auth/__PAGE__.segment.rsc +1 -1
  42. package/web/.next/server/app/auth.segments/auth.segment.rsc +1 -1
  43. package/web/.next/server/app/console.html +1 -1
  44. package/web/.next/server/app/console.rsc +1 -1
  45. package/web/.next/server/app/console.segments/_full.segment.rsc +1 -1
  46. package/web/.next/server/app/console.segments/_head.segment.rsc +1 -1
  47. package/web/.next/server/app/console.segments/_index.segment.rsc +1 -1
  48. package/web/.next/server/app/console.segments/_tree.segment.rsc +1 -1
  49. package/web/.next/server/app/console.segments/console/__PAGE__.segment.rsc +1 -1
  50. package/web/.next/server/app/console.segments/console.segment.rsc +1 -1
  51. package/web/.next/server/app/knowledge.html +1 -1
  52. package/web/.next/server/app/knowledge.rsc +1 -1
  53. package/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk/knowledge/__PAGE__.segment.rsc +1 -1
  54. package/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk/knowledge.segment.rsc +1 -1
  55. package/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  56. package/web/.next/server/app/knowledge.segments/_full.segment.rsc +1 -1
  57. package/web/.next/server/app/knowledge.segments/_head.segment.rsc +1 -1
  58. package/web/.next/server/app/knowledge.segments/_index.segment.rsc +1 -1
  59. package/web/.next/server/app/knowledge.segments/_tree.segment.rsc +1 -1
  60. package/web/.next/server/app/lan-blocked.html +1 -1
  61. package/web/.next/server/app/lan-blocked.rsc +1 -1
  62. package/web/.next/server/app/lan-blocked.segments/_full.segment.rsc +1 -1
  63. package/web/.next/server/app/lan-blocked.segments/_head.segment.rsc +1 -1
  64. package/web/.next/server/app/lan-blocked.segments/_index.segment.rsc +1 -1
  65. package/web/.next/server/app/lan-blocked.segments/_tree.segment.rsc +1 -1
  66. package/web/.next/server/app/lan-blocked.segments/lan-blocked/__PAGE__.segment.rsc +1 -1
  67. package/web/.next/server/app/lan-blocked.segments/lan-blocked.segment.rsc +1 -1
  68. package/web/.next/server/app/machines.html +1 -1
  69. package/web/.next/server/app/machines.rsc +1 -1
  70. package/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk/machines/__PAGE__.segment.rsc +1 -1
  71. package/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk/machines.segment.rsc +1 -1
  72. package/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  73. package/web/.next/server/app/machines.segments/_full.segment.rsc +1 -1
  74. package/web/.next/server/app/machines.segments/_head.segment.rsc +1 -1
  75. package/web/.next/server/app/machines.segments/_index.segment.rsc +1 -1
  76. package/web/.next/server/app/machines.segments/_tree.segment.rsc +1 -1
  77. package/web/.next/server/app/process-dashboard.html +1 -1
  78. package/web/.next/server/app/process-dashboard.rsc +1 -1
  79. package/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk/process-dashboard/__PAGE__.segment.rsc +1 -1
  80. package/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk/process-dashboard.segment.rsc +1 -1
  81. package/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  82. package/web/.next/server/app/process-dashboard.segments/_full.segment.rsc +1 -1
  83. package/web/.next/server/app/process-dashboard.segments/_head.segment.rsc +1 -1
  84. package/web/.next/server/app/process-dashboard.segments/_index.segment.rsc +1 -1
  85. package/web/.next/server/app/process-dashboard.segments/_tree.segment.rsc +1 -1
  86. package/web/.next/server/app/projects.html +1 -1
  87. package/web/.next/server/app/projects.rsc +1 -1
  88. package/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects/__PAGE__.segment.rsc +1 -1
  89. package/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects.segment.rsc +1 -1
  90. package/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  91. package/web/.next/server/app/projects.segments/_full.segment.rsc +1 -1
  92. package/web/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  93. package/web/.next/server/app/projects.segments/_index.segment.rsc +1 -1
  94. package/web/.next/server/app/projects.segments/_tree.segment.rsc +1 -1
  95. package/web/.next/server/app/search.html +1 -1
  96. package/web/.next/server/app/search.rsc +1 -1
  97. package/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk/search/__PAGE__.segment.rsc +1 -1
  98. package/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk/search.segment.rsc +1 -1
  99. package/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  100. package/web/.next/server/app/search.segments/_full.segment.rsc +1 -1
  101. package/web/.next/server/app/search.segments/_head.segment.rsc +1 -1
  102. package/web/.next/server/app/search.segments/_index.segment.rsc +1 -1
  103. package/web/.next/server/app/search.segments/_tree.segment.rsc +1 -1
  104. package/web/.next/server/app/session-dashboard.html +1 -1
  105. package/web/.next/server/app/session-dashboard.rsc +1 -1
  106. package/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk/session-dashboard/__PAGE__.segment.rsc +1 -1
  107. package/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk/session-dashboard.segment.rsc +1 -1
  108. package/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  109. package/web/.next/server/app/session-dashboard.segments/_full.segment.rsc +1 -1
  110. package/web/.next/server/app/session-dashboard.segments/_head.segment.rsc +1 -1
  111. package/web/.next/server/app/session-dashboard.segments/_index.segment.rsc +1 -1
  112. package/web/.next/server/app/session-dashboard.segments/_tree.segment.rsc +1 -1
  113. package/web/.next/server/app/sessions.html +1 -1
  114. package/web/.next/server/app/sessions.rsc +1 -1
  115. package/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions/__PAGE__.segment.rsc +1 -1
  116. package/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions.segment.rsc +1 -1
  117. package/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  118. package/web/.next/server/app/sessions.segments/_full.segment.rsc +1 -1
  119. package/web/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  120. package/web/.next/server/app/sessions.segments/_index.segment.rsc +1 -1
  121. package/web/.next/server/app/sessions.segments/_tree.segment.rsc +1 -1
  122. package/web/.next/server/app/settings.html +1 -1
  123. package/web/.next/server/app/settings.rsc +1 -1
  124. package/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +1 -1
  125. package/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  126. package/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  127. package/web/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  128. package/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  129. package/web/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  130. package/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  131. package/web/.next/server/app/skills.html +1 -1
  132. package/web/.next/server/app/skills.rsc +1 -1
  133. package/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills/__PAGE__.segment.rsc +1 -1
  134. package/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills.segment.rsc +1 -1
  135. package/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  136. package/web/.next/server/app/skills.segments/_full.segment.rsc +1 -1
  137. package/web/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  138. package/web/.next/server/app/skills.segments/_index.segment.rsc +1 -1
  139. package/web/.next/server/app/skills.segments/_tree.segment.rsc +1 -1
  140. package/web/.next/server/app/tasks.html +1 -1
  141. package/web/.next/server/app/tasks.rsc +1 -1
  142. package/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk/tasks/__PAGE__.segment.rsc +1 -1
  143. package/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk/tasks.segment.rsc +1 -1
  144. package/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  145. package/web/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
  146. package/web/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  147. package/web/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  148. package/web/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  149. package/web/.next/server/app/terminal-dashboard.html +1 -1
  150. package/web/.next/server/app/terminal-dashboard.rsc +1 -1
  151. package/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk/terminal-dashboard/__PAGE__.segment.rsc +1 -1
  152. package/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk/terminal-dashboard.segment.rsc +1 -1
  153. package/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  154. package/web/.next/server/app/terminal-dashboard.segments/_full.segment.rsc +1 -1
  155. package/web/.next/server/app/terminal-dashboard.segments/_head.segment.rsc +1 -1
  156. package/web/.next/server/app/terminal-dashboard.segments/_index.segment.rsc +1 -1
  157. package/web/.next/server/app/terminal-dashboard.segments/_tree.segment.rsc +1 -1
  158. package/web/.next/server/pages/404.html +1 -1
  159. package/web/.next/server/pages/500.html +2 -2
  160. package/web/.next/standalone/web/.next/BUILD_ID +1 -1
  161. package/web/.next/standalone/web/.next/build-manifest.json +2 -2
  162. package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
  163. package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
  164. package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  165. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  166. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  167. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  168. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  169. package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
  170. package/web/.next/standalone/web/.next/server/app/_not-found.rsc +1 -1
  171. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  172. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  173. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  174. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  175. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  176. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  177. package/web/.next/standalone/web/.next/server/app/assist-resources.html +1 -1
  178. package/web/.next/standalone/web/.next/server/app/assist-resources.rsc +1 -1
  179. package/web/.next/standalone/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk/assist-resources/__PAGE__.segment.rsc +1 -1
  180. package/web/.next/standalone/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk/assist-resources.segment.rsc +1 -1
  181. package/web/.next/standalone/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  182. package/web/.next/standalone/web/.next/server/app/assist-resources.segments/_full.segment.rsc +1 -1
  183. package/web/.next/standalone/web/.next/server/app/assist-resources.segments/_head.segment.rsc +1 -1
  184. package/web/.next/standalone/web/.next/server/app/assist-resources.segments/_index.segment.rsc +1 -1
  185. package/web/.next/standalone/web/.next/server/app/assist-resources.segments/_tree.segment.rsc +1 -1
  186. package/web/.next/standalone/web/.next/server/app/auth.html +1 -1
  187. package/web/.next/standalone/web/.next/server/app/auth.rsc +1 -1
  188. package/web/.next/standalone/web/.next/server/app/auth.segments/_full.segment.rsc +1 -1
  189. package/web/.next/standalone/web/.next/server/app/auth.segments/_head.segment.rsc +1 -1
  190. package/web/.next/standalone/web/.next/server/app/auth.segments/_index.segment.rsc +1 -1
  191. package/web/.next/standalone/web/.next/server/app/auth.segments/_tree.segment.rsc +1 -1
  192. package/web/.next/standalone/web/.next/server/app/auth.segments/auth/__PAGE__.segment.rsc +1 -1
  193. package/web/.next/standalone/web/.next/server/app/auth.segments/auth.segment.rsc +1 -1
  194. package/web/.next/standalone/web/.next/server/app/console.html +1 -1
  195. package/web/.next/standalone/web/.next/server/app/console.rsc +1 -1
  196. package/web/.next/standalone/web/.next/server/app/console.segments/_full.segment.rsc +1 -1
  197. package/web/.next/standalone/web/.next/server/app/console.segments/_head.segment.rsc +1 -1
  198. package/web/.next/standalone/web/.next/server/app/console.segments/_index.segment.rsc +1 -1
  199. package/web/.next/standalone/web/.next/server/app/console.segments/_tree.segment.rsc +1 -1
  200. package/web/.next/standalone/web/.next/server/app/console.segments/console/__PAGE__.segment.rsc +1 -1
  201. package/web/.next/standalone/web/.next/server/app/console.segments/console.segment.rsc +1 -1
  202. package/web/.next/standalone/web/.next/server/app/knowledge.html +1 -1
  203. package/web/.next/standalone/web/.next/server/app/knowledge.rsc +1 -1
  204. package/web/.next/standalone/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk/knowledge/__PAGE__.segment.rsc +1 -1
  205. package/web/.next/standalone/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk/knowledge.segment.rsc +1 -1
  206. package/web/.next/standalone/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  207. package/web/.next/standalone/web/.next/server/app/knowledge.segments/_full.segment.rsc +1 -1
  208. package/web/.next/standalone/web/.next/server/app/knowledge.segments/_head.segment.rsc +1 -1
  209. package/web/.next/standalone/web/.next/server/app/knowledge.segments/_index.segment.rsc +1 -1
  210. package/web/.next/standalone/web/.next/server/app/knowledge.segments/_tree.segment.rsc +1 -1
  211. package/web/.next/standalone/web/.next/server/app/lan-blocked.html +1 -1
  212. package/web/.next/standalone/web/.next/server/app/lan-blocked.rsc +1 -1
  213. package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/_full.segment.rsc +1 -1
  214. package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/_head.segment.rsc +1 -1
  215. package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/_index.segment.rsc +1 -1
  216. package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/_tree.segment.rsc +1 -1
  217. package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/lan-blocked/__PAGE__.segment.rsc +1 -1
  218. package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/lan-blocked.segment.rsc +1 -1
  219. package/web/.next/standalone/web/.next/server/app/machines.html +1 -1
  220. package/web/.next/standalone/web/.next/server/app/machines.rsc +1 -1
  221. package/web/.next/standalone/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk/machines/__PAGE__.segment.rsc +1 -1
  222. package/web/.next/standalone/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk/machines.segment.rsc +1 -1
  223. package/web/.next/standalone/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  224. package/web/.next/standalone/web/.next/server/app/machines.segments/_full.segment.rsc +1 -1
  225. package/web/.next/standalone/web/.next/server/app/machines.segments/_head.segment.rsc +1 -1
  226. package/web/.next/standalone/web/.next/server/app/machines.segments/_index.segment.rsc +1 -1
  227. package/web/.next/standalone/web/.next/server/app/machines.segments/_tree.segment.rsc +1 -1
  228. package/web/.next/standalone/web/.next/server/app/process-dashboard.html +1 -1
  229. package/web/.next/standalone/web/.next/server/app/process-dashboard.rsc +1 -1
  230. package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk/process-dashboard/__PAGE__.segment.rsc +1 -1
  231. package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk/process-dashboard.segment.rsc +1 -1
  232. package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  233. package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/_full.segment.rsc +1 -1
  234. package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/_head.segment.rsc +1 -1
  235. package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/_index.segment.rsc +1 -1
  236. package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/_tree.segment.rsc +1 -1
  237. package/web/.next/standalone/web/.next/server/app/projects.html +1 -1
  238. package/web/.next/standalone/web/.next/server/app/projects.rsc +1 -1
  239. package/web/.next/standalone/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects/__PAGE__.segment.rsc +1 -1
  240. package/web/.next/standalone/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects.segment.rsc +1 -1
  241. package/web/.next/standalone/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  242. package/web/.next/standalone/web/.next/server/app/projects.segments/_full.segment.rsc +1 -1
  243. package/web/.next/standalone/web/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  244. package/web/.next/standalone/web/.next/server/app/projects.segments/_index.segment.rsc +1 -1
  245. package/web/.next/standalone/web/.next/server/app/projects.segments/_tree.segment.rsc +1 -1
  246. package/web/.next/standalone/web/.next/server/app/search.html +1 -1
  247. package/web/.next/standalone/web/.next/server/app/search.rsc +1 -1
  248. package/web/.next/standalone/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk/search/__PAGE__.segment.rsc +1 -1
  249. package/web/.next/standalone/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk/search.segment.rsc +1 -1
  250. package/web/.next/standalone/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  251. package/web/.next/standalone/web/.next/server/app/search.segments/_full.segment.rsc +1 -1
  252. package/web/.next/standalone/web/.next/server/app/search.segments/_head.segment.rsc +1 -1
  253. package/web/.next/standalone/web/.next/server/app/search.segments/_index.segment.rsc +1 -1
  254. package/web/.next/standalone/web/.next/server/app/search.segments/_tree.segment.rsc +1 -1
  255. package/web/.next/standalone/web/.next/server/app/session-dashboard.html +1 -1
  256. package/web/.next/standalone/web/.next/server/app/session-dashboard.rsc +1 -1
  257. package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk/session-dashboard/__PAGE__.segment.rsc +1 -1
  258. package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk/session-dashboard.segment.rsc +1 -1
  259. package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  260. package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/_full.segment.rsc +1 -1
  261. package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/_head.segment.rsc +1 -1
  262. package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/_index.segment.rsc +1 -1
  263. package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/_tree.segment.rsc +1 -1
  264. package/web/.next/standalone/web/.next/server/app/sessions.html +1 -1
  265. package/web/.next/standalone/web/.next/server/app/sessions.rsc +1 -1
  266. package/web/.next/standalone/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions/__PAGE__.segment.rsc +1 -1
  267. package/web/.next/standalone/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions.segment.rsc +1 -1
  268. package/web/.next/standalone/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  269. package/web/.next/standalone/web/.next/server/app/sessions.segments/_full.segment.rsc +1 -1
  270. package/web/.next/standalone/web/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  271. package/web/.next/standalone/web/.next/server/app/sessions.segments/_index.segment.rsc +1 -1
  272. package/web/.next/standalone/web/.next/server/app/sessions.segments/_tree.segment.rsc +1 -1
  273. package/web/.next/standalone/web/.next/server/app/settings.html +1 -1
  274. package/web/.next/standalone/web/.next/server/app/settings.rsc +1 -1
  275. package/web/.next/standalone/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +1 -1
  276. package/web/.next/standalone/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  277. package/web/.next/standalone/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  278. package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  279. package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  280. package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  281. package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  282. package/web/.next/standalone/web/.next/server/app/skills.html +1 -1
  283. package/web/.next/standalone/web/.next/server/app/skills.rsc +1 -1
  284. package/web/.next/standalone/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills/__PAGE__.segment.rsc +1 -1
  285. package/web/.next/standalone/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills.segment.rsc +1 -1
  286. package/web/.next/standalone/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  287. package/web/.next/standalone/web/.next/server/app/skills.segments/_full.segment.rsc +1 -1
  288. package/web/.next/standalone/web/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  289. package/web/.next/standalone/web/.next/server/app/skills.segments/_index.segment.rsc +1 -1
  290. package/web/.next/standalone/web/.next/server/app/skills.segments/_tree.segment.rsc +1 -1
  291. package/web/.next/standalone/web/.next/server/app/tasks.html +1 -1
  292. package/web/.next/standalone/web/.next/server/app/tasks.rsc +1 -1
  293. package/web/.next/standalone/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk/tasks/__PAGE__.segment.rsc +1 -1
  294. package/web/.next/standalone/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk/tasks.segment.rsc +1 -1
  295. package/web/.next/standalone/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  296. package/web/.next/standalone/web/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
  297. package/web/.next/standalone/web/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  298. package/web/.next/standalone/web/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  299. package/web/.next/standalone/web/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  300. package/web/.next/standalone/web/.next/server/app/terminal-dashboard.html +1 -1
  301. package/web/.next/standalone/web/.next/server/app/terminal-dashboard.rsc +1 -1
  302. package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk/terminal-dashboard/__PAGE__.segment.rsc +1 -1
  303. package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk/terminal-dashboard.segment.rsc +1 -1
  304. package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  305. package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/_full.segment.rsc +1 -1
  306. package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/_head.segment.rsc +1 -1
  307. package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/_index.segment.rsc +1 -1
  308. package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/_tree.segment.rsc +1 -1
  309. package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
  310. package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
  311. package/web/.next/trace +1 -1
  312. package/web/.next/trace-build +1 -1
  313. /package/web/.next/static/{Zx5sHPa3X0Xd4H0apvz9y → sEsMPdcMwDZtdS32AZhn2}/_buildManifest.js +0 -0
  314. /package/web/.next/static/{Zx5sHPa3X0Xd4H0apvz9y → sEsMPdcMwDZtdS32AZhn2}/_clientMiddlewareManifest.json +0 -0
  315. /package/web/.next/static/{Zx5sHPa3X0Xd4H0apvz9y → sEsMPdcMwDZtdS32AZhn2}/_ssgManifest.js +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
3
  "name": "langmartai",
4
- "description": "LM Assist — knowledge management, session inspector, and web terminal control for Claude Code",
4
+ "description": "LM Assist — observability platform for Claude Code and Agent SDK",
5
5
  "owner": {
6
6
  "name": "langmartai"
7
7
  },
@@ -12,9 +12,9 @@
12
12
  "plugins": [
13
13
  {
14
14
  "name": "lm-assist",
15
- "version": "0.1.66",
15
+ "version": "0.1.68",
16
16
  "source": "./",
17
- "description": "Auto-build knowledge from Claude Code sessions and inject it as context. Inspect sessions with deep views into agents, tasks, teams, plans, and tool calls. Access and control all Claude Code terminals from any device via web browser. Includes MCP server (search, detail, feedback), context-injection hook, and 6 slash commands.",
17
+ "description": "Monitor, debug, and control AI coding agents. Skills for session intelligence (observe, route), commands (/sessions, /summary, /run), 15 insight views per session, web terminal, project/session summaries, cross-project routing, prompt queue, auto-learning. Optional: MCP knowledge tools, context-injection hook.",
18
18
  "category": "productivity",
19
19
  "homepage": "https://github.com/langmartai/lm-assist"
20
20
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "lm-assist",
3
- "version": "0.1.66",
4
- "description": "Knowledge management, session inspector, and web terminal control for Claude Code",
3
+ "version": "0.1.68",
4
+ "description": "Observability platform for Claude Code and Agent SDK — monitor, debug, and control AI coding agents",
5
5
  "author": {
6
6
  "name": "langmartai"
7
7
  },
package/README.md CHANGED
@@ -179,22 +179,34 @@ When enabled, any MCP-compatible IDE can access the knowledge base:
179
179
 
180
180
  ## Install
181
181
 
182
- ### One-line install
182
+ ### Plugin install (recommended)
183
183
 
184
- ```bash
185
- curl -fsSL https://raw.githubusercontent.com/langmartai/lm-assist/main/install.sh | bash
184
+ In Claude Code, run:
185
+
186
+ ```
187
+ /plugin marketplace add langmartai/lm-assist
188
+
189
+ /plugin install lm-assist@langmartai
186
190
  ```
187
191
 
188
192
  Then **open a new Claude Code session** and run `/assist-setup`.
189
193
 
190
- ### Install via npm
194
+ This registers skills, commands, MCP tools, and hooks automatically.
195
+
196
+ ### Install via npm (for the API + Web services)
191
197
 
192
198
  ```bash
193
199
  npm install -g lm-assist
194
200
  lm-assist start
195
201
  ```
196
202
 
197
- Then in Claude Code, run `/assist-setup`.
203
+ Then in Claude Code, install the plugin as above.
204
+
205
+ ### One-line install (clone + build + plugin)
206
+
207
+ ```bash
208
+ curl -fsSL https://raw.githubusercontent.com/langmartai/lm-assist/main/install.sh | bash
209
+ ```
198
210
 
199
211
  ### Install from source
200
212
 
@@ -205,17 +217,18 @@ npm install && npm run build
205
217
  ./core.sh start
206
218
  ```
207
219
 
208
- Then in Claude Code, run `/plugin install .` and `/assist-setup`.
220
+ Then in Claude Code, run `/plugin install .` to register from source.
209
221
 
210
222
  ### What gets installed
211
223
 
212
224
  | Component | Auto-installed | Purpose |
213
225
  |-----------|---------------|---------|
226
+ | Skills | Yes (via plugin) | `observe` (session intelligence) + `route` (cross-project routing) |
227
+ | Commands | Yes (via plugin) | `/sessions`, `/summary`, `/run` + 6 `/assist-*` commands |
214
228
  | Core API + Web UI | Yes (via npm/source) | 155+ endpoint REST API + Next.js dashboard |
215
- | MCP server | Yes (via plugin) | `search`, `detail`, `feedback` tools |
216
- | Context hook | Yes (via plugin) | Knowledge injection (optional) |
217
- | Slash commands | Yes (via plugin) | 6 `/assist-*` commands |
218
- | Statusline | Optional | Git branch, context %, rate limits, process stats |
229
+ | MCP server | Optional (via plugin) | `search`, `detail`, `feedback` knowledge tools |
230
+ | Context hook | Optional (via plugin) | Knowledge injection into prompts |
231
+ | Statusline | Optional | Git branch, context %, rate limits, cost, process stats |
219
232
 
220
233
  ## Services
221
234
 
@@ -231,31 +244,148 @@ lm-assist status # Health check + process info
231
244
  lm-assist upgrade # Upgrade to latest version
232
245
  ```
233
246
 
234
- ## Key API Endpoints
247
+ ## Skills & Commands
235
248
 
236
- | Category | Endpoints | Highlights |
237
- |----------|-----------|------------|
238
- | **Sessions** | 27 | List, detail, delta fetch, batch-check, conversation, subagents, forks, DAG |
239
- | **Monitor** | 6 | Running executions, summary, abort, SSE stream |
240
- | **Projects** | 12 | List projects, sessions per project, git info, worktree detection |
241
- | **Terminal** | 13 | ttyd start/stop/status, WebSocket proxy, tmux attach |
242
- | **Tasks** | 22 | Task lists, aggregated tasks, ready tasks, dependency tracking |
243
- | **Knowledge** | 21 | List, search, generate, review (optional — can be disabled) |
244
- | **Vectors** | 6 | Semantic search, index, reindex (optional) |
249
+ lm-assist ships with **2 auto-triggered skills** and **9 slash commands** that work inside Claude Code.
245
250
 
246
- All endpoints support `ifModifiedSince` for efficient polling. Session data supports three indexing dimensions: `lineIndex` (JSONL position), `turnIndex` (conversation turn), and `userPromptIndex` (user message count).
251
+ ### Skills (auto-triggered)
252
+
253
+ Skills activate automatically when Claude detects relevant intent — no slash command needed.
254
+
255
+ | Skill | Triggers on | What it does |
256
+ |-------|------------|--------------|
257
+ | **observe** | "what's running?", "session costs", "show subagents", "run this on project X" | Full observability — monitor sessions, debug agents, control executions, manage summaries |
258
+ | **route** | Prompt mentions another project's features or codebase | Cross-project routing — evaluates whether to stay, resume, fork, queue, or start new |
247
259
 
248
- ## Slash Commands
260
+ ### Commands
249
261
 
250
262
  | Command | Description |
251
263
  |---------|-------------|
264
+ | `/sessions` | Session list with costs, turns, running status |
265
+ | `/summary` | Summarize current session, generate display name, record learning |
266
+ | `/run <prompt>` | Execute an agent with pre-flight checks |
252
267
  | `/assist` | Open the web UI in your browser |
253
268
  | `/assist-status` | Show status of all components |
254
269
  | `/assist-setup` | Start services and verify integrations |
255
- | `/assist-search <query>` | Search the knowledge base |
270
+ | `/assist-search` | Search the knowledge base |
256
271
  | `/assist-logs` | View context-inject hook logs |
257
272
  | `/assist-mcp-logs` | View MCP tool call logs |
258
273
 
274
+ ### Use Cases with Examples
275
+
276
+ **"What sessions are running and how much have they cost?"**
277
+ ```
278
+ > /sessions
279
+ Sessions (3 running, 415 total)
280
+ ───────────────────────────────────────────────────────────────────────
281
+ Status Name Project Model Cost Turns
282
+ ───────────────────────────────────────────────────────────────────────
283
+ [RUN] observability-platform-build lm-assist opus $307.66 1462
284
+ [RUN] trade-delta-analysis lm-unified-trade opus $153.20 822
285
+ [RUN] anti-kelly-system lm-unified-trade opus $35.49 433
286
+ two-track-dashboard lm-unified-trade opus $107.43 516
287
+ skill-validation-test lm-assist opus $0.63 11
288
+ ───────────────────────────────────────────────────────────────────────
289
+ Total cost: $604.41
290
+ ```
291
+
292
+ **"Summarize what this session has been doing"**
293
+ ```
294
+ > /summary
295
+ Session Summary
296
+ ═══════════════
297
+ Name: observability-platform-build
298
+ Project: lm-assist
299
+ Turns: 1462 | Cost: $307.66
300
+ Status: in progress
301
+
302
+ What this session is about:
303
+ Building the lm-assist observability platform — session summaries,
304
+ cross-project routing, prompt queue, auto-learning.
305
+
306
+ What was accomplished:
307
+ • Session slug/customTitle parsing from Claude Code JSONL
308
+ • Knowledge system kill switch (saves ~100MB)
309
+ • Observability skill + routing skill + 3 new commands
310
+ • Persistent session summaries with delta tracking
311
+ • Universal prompt queue with source/target context
312
+ • Auto-learning signals that evolve routing over time
313
+ ```
314
+
315
+ **"Fix the delta analysis bug in the trading pipeline"**
316
+
317
+ The route skill auto-detects this belongs to another project:
318
+ ```
319
+ This task appears to belong to lm-unified-trade, not the current project.
320
+
321
+ Relevant session found: trade-delta-analysis
322
+ Summary: Implemented delta analysis mode for /trade-analyze command...
323
+ Status: idle (not running)
324
+
325
+ Recommendation: RESUME
326
+ Reason: This session built all existing delta modes and knows the spec,
327
+ flag table, and pre-launch copy patterns.
328
+
329
+ To resume: claude --resume 36a30ba6-4bd1-4587-8bb3-c1d21a2ab616
330
+ ```
331
+
332
+ **"Run a security review on this project"**
333
+ ```
334
+ > /run review all API endpoints for security vulnerabilities
335
+ Checking running executions... OK: none running.
336
+
337
+ Execution started: agent-1774468578687-1p2cnh
338
+ Session: nifty-wishing-boole
339
+ Status: running
340
+ Monitor with: /sessions
341
+ Web UI: http://localhost:3848
342
+ ```
343
+
344
+ **"What's the cost breakdown by project?"**
345
+
346
+ The observe skill activates:
347
+ ```
348
+ Project costs:
349
+ lm-assist $308.29 (80 sessions)
350
+ lm-unified-trade $892.15 (440 sessions)
351
+ LangMartDesign $45.20 (12 sessions)
352
+ tier-agent $23.50 (15 sessions)
353
+ ```
354
+
355
+ ### Session Intelligence
356
+
357
+ lm-assist learns from every interaction to route prompts smarter over time:
358
+
359
+ - **Session summaries** — LLM-generated descriptions stored with delta tracking. Updated incrementally as sessions grow.
360
+ - **Project summaries** — Comprehensive reference generated by agents that explore each project's CLAUDE.md, scripts, configs, and codebase.
361
+ - **Prompt queue** — When a session is busy, new work is queued with full context (original intent, formatted prompt, routing reason, context hint).
362
+ - **Auto-learning** — Keywords, commands, and routing patterns accumulate with frequency counts. After a few interactions, routing skips deep scans entirely.
363
+
364
+ ```
365
+ Learning context for lm-unified-trade:
366
+ Frequently mentioned: delta analysis(3x), anti-kelly(2x), regime analysis(1x)
367
+ Areas worked in: analysis pipeline(1x)
368
+ Routing patterns: delta analysis → trade-delta-analysis session
369
+ ```
370
+
371
+ ## Key API Endpoints
372
+
373
+ | Category | Endpoints | Highlights |
374
+ |----------|-----------|------------|
375
+ | **Sessions** | 27 | List, detail, delta fetch, batch-check, conversation, subagents, forks, DAG |
376
+ | **Monitor** | 6 | Running executions, summary, abort, SSE stream |
377
+ | **Projects** | 12 | List projects, sessions per project, git info, worktree detection, costs |
378
+ | **Terminal** | 13 | ttyd start/stop/status, WebSocket proxy, tmux attach |
379
+ | **Tasks** | 22 | Task lists, aggregated tasks, ready tasks, dependency tracking |
380
+ | **Summaries** | 10 | Session summaries, project summaries, needs-update check |
381
+ | **Queue** | 10 | Prompt queue with source/target, priority, dispatch/complete lifecycle |
382
+ | **Learning** | 4 | Record signals, query by project, learning context generation |
383
+ | **Search** | 4 | Session content search, recent sessions, vector search |
384
+ | **Skills** | 9 | Skills analytics, chains, traces, per-session breakdown |
385
+ | **Knowledge** | 21 | List, search, generate, review (optional — can be disabled) |
386
+
387
+ All endpoints support `ifModifiedSince` for efficient polling. Session data supports three indexing dimensions: `lineIndex` (JSONL position), `turnIndex` (conversation turn), and `userPromptIndex` (user message count).
388
+
259
389
  ## Configuration
260
390
 
261
391
  No API key needed — lm-assist works entirely with your local Claude Code session data. Optionally copy `.env.example` to `.env`:
@@ -12,76 +12,91 @@ Show recent Claude Code sessions with costs, turns, model, and running status.
12
12
  - No arguments: show sessions across all projects
13
13
  - `$ARGUMENTS[0]`: filter by project name (partial match)
14
14
 
15
- ## Steps
15
+ ## Execution
16
16
 
17
- 1. **Check API health:**
18
- ```bash
19
- curl -s --max-time 2 http://localhost:3100/health
20
- ```
21
- If not healthy, tell the user to start lm-assist with `lm-assist start` or `/assist-setup`.
17
+ Run this single script. It handles health check, session fetch, and execution monitoring in one call:
22
18
 
23
- 2. **Fetch sessions:**
24
19
  ```bash
25
- curl -s --max-time 5 http://localhost:3100/projects/sessions | python3 -c "
26
- import sys,json
27
- data = json.load(sys.stdin).get('data',{})
28
- sessions = data.get('sessions',[])
29
- total = data.get('total', len(sessions))
30
-
31
- # Filter by project if argument provided
32
- project_filter = '''$ARGUMENTS[0]'''.strip()
33
- if project_filter:
34
- sessions = [s for s in sessions if project_filter.lower() in (s.get('projectPath','') + s.get('projectName','')).lower()]
35
-
36
- # Separate running from completed
37
- running = [s for s in sessions if s.get('isRunning')]
38
- rest = [s for s in sessions if not s.get('isRunning')][:10 - len(running)]
39
- show = running + rest
40
-
41
- print(f'Sessions ({len(show)} of {total})')
42
- if project_filter:
43
- print(f'Filtered: {project_filter}')
44
- print('─' * 95)
45
- fmt = '{:<7} {:<28} {:<18} {:<8} {:>8} {:>6}'
46
- print(fmt.format('Status', 'Name', 'Project', 'Model', 'Cost', 'Turns'))
47
- print('─' * 95)
48
- for s in show:
49
- status = '[RUN]' if s.get('isRunning') else ''
50
- name = (s.get('customTitle') or s.get('slug') or s['sessionId'][:12])[:26]
51
- project = (s.get('projectPath','').split('/')[-1] or '-')[:16]
52
- model = (s.get('model','') or '-').replace('claude-','').replace('opus-4-6','opus').replace('sonnet-4-6','sonnet')[:7]
53
- cost = f'\${s[\"totalCostUsd\"]:.2f}' if s.get('totalCostUsd') else '-'
54
- turns = str(s.get('numTurns','')) or '-'
55
- print(fmt.format(status, name, project, model, cost, turns))
56
- "
57
- ```
20
+ node -e "
21
+ const http = require('http');
22
+ const filter = process.argv[1] || '';
58
23
 
59
- 3. **Check running executions:**
60
- ```bash
61
- curl -s --max-time 3 http://localhost:3100/monitor/executions | python3 -c "
62
- import sys,json
63
- execs = json.load(sys.stdin).get('data',{}).get('executions',[])
64
- running = [e for e in execs if e.get('isRunning')]
65
- if running:
66
- print(f'\nRunning Executions ({len(running)}):')
67
- for e in running:
68
- eid = e.get('executionId','')[:12]
69
- turns = e.get('turnCount',0)
70
- cost = e.get('costUsd',0)
71
- elapsed = (e.get('elapsedMs',0) or 0) // 1000
72
- mins = elapsed // 60
73
- secs = elapsed % 60
74
- print(f' {eid} T:{turns} \${cost:.2f} {mins}m{secs}s')
75
- "
76
- ```
24
+ function api(path) {
25
+ return new Promise((resolve) => {
26
+ const req = http.get('http://localhost:3100' + path, { timeout: 5000 }, (res) => {
27
+ let data = '';
28
+ res.on('data', c => data += c);
29
+ res.on('end', () => { try { resolve(JSON.parse(data)); } catch { resolve(null); } });
30
+ });
31
+ req.on('error', () => resolve(null));
32
+ req.on('timeout', () => { req.destroy(); resolve(null); });
33
+ });
34
+ }
77
35
 
78
- ## Output
36
+ (async () => {
37
+ const health = await api('/health');
38
+ if (!health?.success) {
39
+ console.log('lm-assist API is not running.\nStart with: lm-assist start\nOr run: /assist-setup');
40
+ return;
41
+ }
79
42
 
80
- Present the table output from the python script directly. Do NOT reformat as markdown — show it as-is from the terminal output.
43
+ const data = await api('/projects/sessions');
44
+ if (!data?.data?.sessions) { console.log('Failed to fetch sessions.'); return; }
81
45
 
82
- If the API is not running, show:
83
- ```
84
- lm-assist API is not running.
85
- Start with: lm-assist start
86
- Or run: /assist-setup
46
+ let sessions = data.data.sessions;
47
+ const total = data.data.total || sessions.length;
48
+
49
+ if (filter) {
50
+ sessions = sessions.filter(s => ((s.projectPath || '') + (s.projectName || '')).toLowerCase().includes(filter.toLowerCase()));
51
+ }
52
+
53
+ const running = sessions.filter(s => s.isRunning);
54
+ const rest = sessions.filter(s => !s.isRunning).slice(0, 15);
55
+ const show = [...running, ...rest];
56
+
57
+ console.log('Sessions (' + running.length + ' running, ' + total + ' total)');
58
+ if (filter) console.log('Filtered: ' + filter);
59
+ console.log('\u2500'.repeat(95));
60
+ const hdr = (s,n) => (s + ' '.repeat(n)).slice(0,n);
61
+ const rgt = (s,n) => (' '.repeat(n) + s).slice(-n);
62
+ console.log(hdr('Status',7) + hdr('Name',28) + hdr('Project',18) + hdr('Model',8) + rgt('Cost',8) + rgt('Turns',6));
63
+ console.log('\u2500'.repeat(95));
64
+
65
+ for (const s of show) {
66
+ const status = s.isRunning ? '[RUN]' : '';
67
+ const name = (s.customTitle || s.slug || s.sessionId.slice(0,12)).slice(0,26);
68
+ const project = ((s.projectPath || '').split('/').pop() || '-').slice(0,16);
69
+ const model = (s.model || '-').replace('claude-','').replace('opus-4-6','opus').replace('sonnet-4-6','sonnet').slice(0,7);
70
+ const cost = s.totalCostUsd ? '\$' + s.totalCostUsd.toFixed(2) : '-';
71
+ const turns = String(s.numTurns || '-');
72
+ console.log(hdr(status,7) + hdr(name,28) + hdr(project,18) + hdr(model,8) + rgt(cost,8) + rgt(turns,6));
73
+ }
74
+
75
+ // Running executions
76
+ const exData = await api('/monitor/executions');
77
+ if (exData?.data?.executions) {
78
+ const re = exData.data.executions.filter(e => e.isRunning);
79
+ if (re.length) {
80
+ console.log('\nRunning Executions (' + re.length + '):');
81
+ for (const e of re) {
82
+ const eid = (e.executionId || '').slice(0,12);
83
+ const t = e.turnCount || 0;
84
+ const c = (e.costUsd || 0).toFixed(2);
85
+ const elapsed = Math.floor((e.elapsedMs || 0) / 1000);
86
+ const mins = Math.floor(elapsed / 60);
87
+ const secs = elapsed % 60;
88
+ console.log(' ' + eid + ' T:' + t + ' \$' + c + ' ' + mins + 'm' + secs + 's');
89
+ }
90
+ }
91
+ }
92
+
93
+ const totalCost = sessions.reduce((a, s) => a + (s.totalCostUsd || 0), 0);
94
+ console.log('\u2500'.repeat(95));
95
+ console.log('Total cost: \$' + totalCost.toFixed(2));
96
+ })();
97
+ " -- "$ARGUMENTS[0]"
87
98
  ```
99
+
100
+ ## Output
101
+
102
+ Present the script output directly. Do NOT reformat as markdown — show it as-is from the terminal.