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.
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +2 -2
- package/README.md +153 -23
- package/commands/sessions.md +80 -65
- package/commands/summary.md +140 -79
- package/install.sh +3 -3
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/server/app/_not-found.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/assist-resources.html +1 -1
- package/web/.next/server/app/assist-resources.rsc +1 -1
- package/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk/assist-resources/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk/assist-resources.segment.rsc +1 -1
- package/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/assist-resources.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/assist-resources.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/assist-resources.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/assist-resources.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/auth.html +1 -1
- package/web/.next/server/app/auth.rsc +1 -1
- package/web/.next/server/app/auth.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/auth.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/auth.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/auth.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/auth.segments/auth/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/auth.segments/auth.segment.rsc +1 -1
- package/web/.next/server/app/console.html +1 -1
- package/web/.next/server/app/console.rsc +1 -1
- package/web/.next/server/app/console.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/console.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/console.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/console.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/console.segments/console/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/console.segments/console.segment.rsc +1 -1
- package/web/.next/server/app/knowledge.html +1 -1
- package/web/.next/server/app/knowledge.rsc +1 -1
- package/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk/knowledge/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk/knowledge.segment.rsc +1 -1
- package/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/knowledge.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/knowledge.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/knowledge.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/knowledge.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/lan-blocked.html +1 -1
- package/web/.next/server/app/lan-blocked.rsc +1 -1
- package/web/.next/server/app/lan-blocked.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/lan-blocked.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/lan-blocked.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/lan-blocked.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/lan-blocked.segments/lan-blocked/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/lan-blocked.segments/lan-blocked.segment.rsc +1 -1
- package/web/.next/server/app/machines.html +1 -1
- package/web/.next/server/app/machines.rsc +1 -1
- package/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk/machines/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk/machines.segment.rsc +1 -1
- package/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/machines.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/machines.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/machines.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/machines.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/process-dashboard.html +1 -1
- package/web/.next/server/app/process-dashboard.rsc +1 -1
- package/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk/process-dashboard/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk/process-dashboard.segment.rsc +1 -1
- package/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/process-dashboard.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/process-dashboard.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/process-dashboard.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/process-dashboard.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/projects.html +1 -1
- package/web/.next/server/app/projects.rsc +1 -1
- package/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects.segment.rsc +1 -1
- package/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/projects.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/projects.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/projects.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/search.html +1 -1
- package/web/.next/server/app/search.rsc +1 -1
- package/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk/search/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk/search.segment.rsc +1 -1
- package/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/search.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/search.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/search.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/search.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/session-dashboard.html +1 -1
- package/web/.next/server/app/session-dashboard.rsc +1 -1
- package/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk/session-dashboard/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk/session-dashboard.segment.rsc +1 -1
- package/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/session-dashboard.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/session-dashboard.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/session-dashboard.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/session-dashboard.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/sessions.html +1 -1
- package/web/.next/server/app/sessions.rsc +1 -1
- package/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions.segment.rsc +1 -1
- package/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/sessions.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/sessions.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/sessions.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/settings.html +1 -1
- package/web/.next/server/app/settings.rsc +1 -1
- package/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
- package/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/skills.html +1 -1
- package/web/.next/server/app/skills.rsc +1 -1
- package/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills.segment.rsc +1 -1
- package/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/skills.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/skills.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/skills.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/skills.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/tasks.html +1 -1
- package/web/.next/server/app/tasks.rsc +1 -1
- package/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk/tasks/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk/tasks.segment.rsc +1 -1
- package/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/terminal-dashboard.html +1 -1
- package/web/.next/server/app/terminal-dashboard.rsc +1 -1
- package/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk/terminal-dashboard/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk/terminal-dashboard.segment.rsc +1 -1
- package/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/server/app/terminal-dashboard.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/terminal-dashboard.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/terminal-dashboard.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/terminal-dashboard.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/pages/404.html +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/assist-resources.html +1 -1
- package/web/.next/standalone/web/.next/server/app/assist-resources.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk/assist-resources/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk/assist-resources.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/assist-resources.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/assist-resources.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/assist-resources.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/assist-resources.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/auth.html +1 -1
- package/web/.next/standalone/web/.next/server/app/auth.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/auth.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/auth.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/auth.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/auth.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/auth.segments/auth/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/auth.segments/auth.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/console.html +1 -1
- package/web/.next/standalone/web/.next/server/app/console.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/console.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/console.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/console.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/console.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/console.segments/console/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/console.segments/console.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/knowledge.html +1 -1
- package/web/.next/standalone/web/.next/server/app/knowledge.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk/knowledge/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk/knowledge.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/knowledge.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/knowledge.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/knowledge.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/knowledge.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/lan-blocked.html +1 -1
- package/web/.next/standalone/web/.next/server/app/lan-blocked.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/lan-blocked/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/lan-blocked.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/machines.html +1 -1
- package/web/.next/standalone/web/.next/server/app/machines.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk/machines/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk/machines.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/machines.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/machines.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/machines.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/machines.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/process-dashboard.html +1 -1
- package/web/.next/standalone/web/.next/server/app/process-dashboard.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk/process-dashboard/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk/process-dashboard.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/projects.html +1 -1
- package/web/.next/standalone/web/.next/server/app/projects.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/projects.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/projects.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/projects.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/search.html +1 -1
- package/web/.next/standalone/web/.next/server/app/search.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk/search/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk/search.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/search.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/search.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/search.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/search.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/session-dashboard.html +1 -1
- package/web/.next/standalone/web/.next/server/app/session-dashboard.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk/session-dashboard/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk/session-dashboard.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/sessions.html +1 -1
- package/web/.next/standalone/web/.next/server/app/sessions.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/sessions.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/sessions.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/sessions.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.html +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/skills.html +1 -1
- package/web/.next/standalone/web/.next/server/app/skills.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/skills.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/skills.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/skills.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/skills.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/tasks.html +1 -1
- package/web/.next/standalone/web/.next/server/app/tasks.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk/tasks/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk/tasks.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.html +1 -1
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk/terminal-dashboard/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk/terminal-dashboard.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- /package/web/.next/static/{Zx5sHPa3X0Xd4H0apvz9y → sEsMPdcMwDZtdS32AZhn2}/_buildManifest.js +0 -0
- /package/web/.next/static/{Zx5sHPa3X0Xd4H0apvz9y → sEsMPdcMwDZtdS32AZhn2}/_clientMiddlewareManifest.json +0 -0
- /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 —
|
|
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.
|
|
15
|
+
"version": "0.1.68",
|
|
16
16
|
"source": "./",
|
|
17
|
-
"description": "
|
|
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.
|
|
4
|
-
"description": "
|
|
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
|
-
###
|
|
182
|
+
### Plugin install (recommended)
|
|
183
183
|
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
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,
|
|
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 .`
|
|
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 |
|
|
216
|
-
| Context hook |
|
|
217
|
-
|
|
|
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
|
-
##
|
|
247
|
+
## Skills & Commands
|
|
235
248
|
|
|
236
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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`:
|
package/commands/sessions.md
CHANGED
|
@@ -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
|
-
##
|
|
15
|
+
## Execution
|
|
16
16
|
|
|
17
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
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
|
-
|
|
43
|
+
const data = await api('/projects/sessions');
|
|
44
|
+
if (!data?.data?.sessions) { console.log('Failed to fetch sessions.'); return; }
|
|
81
45
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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.
|