lm-assist 0.1.64 → 0.1.66
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 +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +138 -135
- package/bin/lm-assist.js +0 -0
- package/commands/run.md +106 -0
- package/commands/sessions.md +87 -0
- package/commands/summary.md +131 -0
- package/core/dist/agent-session-store.d.ts +9 -1
- package/core/dist/agent-session-store.d.ts.map +1 -1
- package/core/dist/agent-session-store.js +30 -0
- package/core/dist/agent-session-store.js.map +1 -1
- package/core/dist/api/agent-api.d.ts +3 -0
- package/core/dist/api/agent-api.d.ts.map +1 -1
- package/core/dist/api/agent-api.js +51 -4
- package/core/dist/api/agent-api.js.map +1 -1
- package/core/dist/api/sessions-api.d.ts.map +1 -1
- package/core/dist/api/sessions-api.js +13 -1
- package/core/dist/api/sessions-api.js.map +1 -1
- package/core/dist/cli.js +32 -18
- package/core/dist/cli.js.map +1 -1
- package/core/dist/detached-runner.d.ts +57 -0
- package/core/dist/detached-runner.d.ts.map +1 -0
- package/core/dist/detached-runner.js +625 -0
- package/core/dist/detached-runner.js.map +1 -0
- package/core/dist/learning-store.d.ts +83 -0
- package/core/dist/learning-store.d.ts.map +1 -0
- package/core/dist/learning-store.js +206 -0
- package/core/dist/learning-store.js.map +1 -0
- package/core/dist/project-settings.d.ts +2 -0
- package/core/dist/project-settings.d.ts.map +1 -1
- package/core/dist/project-settings.js +3 -0
- package/core/dist/project-settings.js.map +1 -1
- package/core/dist/project-summary-store.d.ts +47 -0
- package/core/dist/project-summary-store.d.ts.map +1 -0
- package/core/dist/project-summary-store.js +108 -0
- package/core/dist/project-summary-store.js.map +1 -0
- package/core/dist/projects-service.d.ts +6 -0
- package/core/dist/projects-service.d.ts.map +1 -1
- package/core/dist/projects-service.js +3 -0
- package/core/dist/projects-service.js.map +1 -1
- package/core/dist/prompt-queue-store.d.ts +107 -0
- package/core/dist/prompt-queue-store.d.ts.map +1 -0
- package/core/dist/prompt-queue-store.js +215 -0
- package/core/dist/prompt-queue-store.js.map +1 -0
- package/core/dist/routes/core/knowledge-settings.routes.d.ts.map +1 -1
- package/core/dist/routes/core/knowledge-settings.routes.js +3 -0
- package/core/dist/routes/core/knowledge-settings.routes.js.map +1 -1
- package/core/dist/routes/core/knowledge.routes.d.ts.map +1 -1
- package/core/dist/routes/core/knowledge.routes.js +16 -0
- package/core/dist/routes/core/knowledge.routes.js.map +1 -1
- package/core/dist/routes/core/project-settings.routes.d.ts +1 -1
- package/core/dist/routes/core/project-settings.routes.d.ts.map +1 -1
- package/core/dist/routes/core/project-settings.routes.js +31 -1
- package/core/dist/routes/core/project-settings.routes.js.map +1 -1
- package/core/dist/routes/core/sessions.routes.d.ts.map +1 -1
- package/core/dist/routes/core/sessions.routes.js +357 -0
- package/core/dist/routes/core/sessions.routes.js.map +1 -1
- package/core/dist/routes/core/vector.routes.d.ts.map +1 -1
- package/core/dist/routes/core/vector.routes.js +6 -0
- package/core/dist/routes/core/vector.routes.js.map +1 -1
- package/core/dist/session-cache.d.ts +6 -0
- package/core/dist/session-cache.d.ts.map +1 -1
- package/core/dist/session-cache.js +80 -0
- package/core/dist/session-cache.js.map +1 -1
- package/core/dist/session-summary-store.d.ts +68 -0
- package/core/dist/session-summary-store.d.ts.map +1 -0
- package/core/dist/session-summary-store.js +175 -0
- package/core/dist/session-summary-store.js.map +1 -0
- package/core/dist/vector/embedder.d.ts +2 -0
- package/core/dist/vector/embedder.d.ts.map +1 -1
- package/core/dist/vector/embedder.js +17 -0
- package/core/dist/vector/embedder.js.map +1 -1
- package/core/dist/vector/vector-store.d.ts +2 -0
- package/core/dist/vector/vector-store.d.ts.map +1 -1
- package/core/dist/vector/vector-store.js +8 -0
- package/core/dist/vector/vector-store.js.map +1 -1
- package/core/hooks/statusline-worktree.js +26 -0
- 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/(dashboard)/assist-resources/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/knowledge/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/machines/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/process-dashboard/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/search/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/session-dashboard/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/sessions/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/tasks/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/terminal-dashboard/page_client-reference-manifest.js +1 -1
- 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/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/server/app/_not-found.rsc +4 -4
- package/web/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk/assist-resources/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/server/app/assist-resources.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/assist-resources.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/assist-resources.segments/_index.segment.rsc +4 -4
- package/web/.next/server/app/assist-resources.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/auth/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/auth.html +1 -1
- package/web/.next/server/app/auth.rsc +5 -5
- package/web/.next/server/app/auth.segments/_full.segment.rsc +5 -5
- package/web/.next/server/app/auth.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/auth.segments/_index.segment.rsc +4 -4
- package/web/.next/server/app/auth.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/auth.segments/auth/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/auth.segments/auth.segment.rsc +1 -1
- package/web/.next/server/app/console/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/console.html +1 -1
- package/web/.next/server/app/console.rsc +5 -5
- package/web/.next/server/app/console.segments/_full.segment.rsc +5 -5
- package/web/.next/server/app/console.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/console.segments/_index.segment.rsc +4 -4
- package/web/.next/server/app/console.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/console.segments/console/__PAGE__.segment.rsc +2 -2
- 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 +6 -6
- package/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk/knowledge/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk/knowledge.segment.rsc +1 -1
- package/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/web/.next/server/app/knowledge.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/knowledge.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/knowledge.segments/_index.segment.rsc +4 -4
- package/web/.next/server/app/knowledge.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/lan-blocked/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/lan-blocked.html +1 -1
- package/web/.next/server/app/lan-blocked.rsc +5 -5
- package/web/.next/server/app/lan-blocked.segments/_full.segment.rsc +5 -5
- package/web/.next/server/app/lan-blocked.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/lan-blocked.segments/_index.segment.rsc +4 -4
- 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 +2 -2
- 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 +6 -6
- package/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk/machines/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk/machines.segment.rsc +1 -1
- package/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/web/.next/server/app/machines.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/machines.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/machines.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk/process-dashboard/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/server/app/process-dashboard.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/process-dashboard.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/process-dashboard.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects.segment.rsc +1 -1
- package/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/web/.next/server/app/projects.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/projects.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk/search/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk/search.segment.rsc +1 -1
- package/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/web/.next/server/app/search.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/search.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/search.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk/session-dashboard/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/server/app/session-dashboard.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/session-dashboard.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/session-dashboard.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions.segment.rsc +1 -1
- package/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/web/.next/server/app/sessions.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/sessions.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
- package/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/web/.next/server/app/settings.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/settings.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills.segment.rsc +1 -1
- package/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/web/.next/server/app/skills.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/skills.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/skills.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk/tasks/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk/tasks.segment.rsc +1 -1
- package/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/web/.next/server/app/tasks.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/tasks.segments/_index.segment.rsc +4 -4
- 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 +6 -6
- package/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk/terminal-dashboard/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/server/app/terminal-dashboard.segments/_full.segment.rsc +6 -6
- package/web/.next/server/app/terminal-dashboard.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/terminal-dashboard.segments/_index.segment.rsc +4 -4
- package/web/.next/server/app/terminal-dashboard.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b2689499._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b2689499._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_src_app_(dashboard)_session-dashboard_page_tsx_b154ddfc._.js +1 -1
- package/web/.next/server/chunks/ssr/web_src_app_(dashboard)_session-dashboard_page_tsx_b154ddfc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_src_app_(dashboard)_sessions_page_tsx_a4b86be9._.js +1 -1
- package/web/.next/server/chunks/ssr/web_src_app_(dashboard)_sessions_page_tsx_a4b86be9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_src_app_(dashboard)_settings_page_tsx_229c549c._.js +1 -1
- package/web/.next/server/chunks/ssr/web_src_app_(dashboard)_settings_page_tsx_229c549c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_src_lib_api-client_ts_05c71051._.js +1 -1
- package/web/.next/server/chunks/ssr/web_src_lib_api-client_ts_05c71051._.js.map +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/(dashboard)/assist-resources/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(dashboard)/knowledge/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(dashboard)/machines/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(dashboard)/process-dashboard/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(dashboard)/search/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(dashboard)/session-dashboard/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(dashboard)/sessions/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(dashboard)/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(dashboard)/tasks/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/(dashboard)/terminal-dashboard/page_client-reference-manifest.js +1 -1
- 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/page_client-reference-manifest.js +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 +4 -4
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- 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 +4 -4
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/assist-resources.segments/!KGRhc2hib2FyZCk/assist-resources/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/assist-resources.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- 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/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/auth.html +1 -1
- package/web/.next/standalone/web/.next/server/app/auth.rsc +5 -5
- package/web/.next/standalone/web/.next/server/app/auth.segments/_full.segment.rsc +5 -5
- 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 +4 -4
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/auth.segments/auth.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/console/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/console.html +1 -1
- package/web/.next/standalone/web/.next/server/app/console.rsc +5 -5
- package/web/.next/standalone/web/.next/server/app/console.segments/_full.segment.rsc +5 -5
- 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 +4 -4
- 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 +2 -2
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/knowledge.segments/!KGRhc2hib2FyZCk/knowledge/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/knowledge.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- 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/page_client-reference-manifest.js +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 +5 -5
- package/web/.next/standalone/web/.next/server/app/lan-blocked.segments/_full.segment.rsc +5 -5
- 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 +4 -4
- 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 +2 -2
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/machines.segments/!KGRhc2hib2FyZCk/machines/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/machines.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/!KGRhc2hib2FyZCk/process-dashboard/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/process-dashboard.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/projects.segments/!KGRhc2hib2FyZCk/projects/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/projects.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/search.segments/!KGRhc2hib2FyZCk/search/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/search.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/!KGRhc2hib2FyZCk/session-dashboard/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/session-dashboard.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/sessions.segments/!KGRhc2hib2FyZCk/sessions/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/sessions.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/skills.segments/!KGRhc2hib2FyZCk/skills/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/skills.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/tasks.segments/!KGRhc2hib2FyZCk/tasks/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/tasks.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- 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 +6 -6
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/!KGRhc2hib2FyZCk/terminal-dashboard/__PAGE__.segment.rsc +2 -2
- 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 +2 -2
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/_full.segment.rsc +6 -6
- 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 +4 -4
- package/web/.next/standalone/web/.next/server/app/terminal-dashboard.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__b2689499._.js +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(dashboard)_session-dashboard_page_tsx_b154ddfc._.js +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(dashboard)_sessions_page_tsx_a4b86be9._.js +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(dashboard)_settings_page_tsx_229c549c._.js +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_lib_api-client_ts_05c71051._.js +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/static/chunks/1e86b4dd7fddd3da.js +1 -0
- package/web/.next/static/chunks/5937d0a7953952c1.js +1 -0
- package/web/.next/static/chunks/7e98fe3eef4fb4b2.js +2 -0
- package/web/.next/static/chunks/caf4f6e3f7bd8d7b.js +1 -0
- package/web/.next/static/chunks/d0ba26dc2e7b6503.js +1 -0
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/static/chunks/2b797c854eca072c.js +0 -1
- package/web/.next/static/chunks/7a29f0dfd963cffc.js +0 -2
- package/web/.next/static/chunks/8a3cbd218373f849.js +0 -1
- package/web/.next/static/chunks/c97796410bdb8bb9.js +0 -1
- package/web/.next/static/chunks/d019311db3907071.js +0 -1
- /package/web/.next/static/{NExu_smoV2Kb7tSWP09gh → Zx5sHPa3X0Xd4H0apvz9y}/_buildManifest.js +0 -0
- /package/web/.next/static/{NExu_smoV2Kb7tSWP09gh → Zx5sHPa3X0Xd4H0apvz9y}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{NExu_smoV2Kb7tSWP09gh → Zx5sHPa3X0Xd4H0apvz9y}/_ssgManifest.js +0 -0
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
14
14
|
"name": "lm-assist",
|
|
15
|
-
"version": "0.1.
|
|
15
|
+
"version": "0.1.66",
|
|
16
16
|
"source": "./",
|
|
17
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.",
|
|
18
18
|
"category": "productivity",
|
package/README.md
CHANGED
|
@@ -1,59 +1,83 @@
|
|
|
1
1
|
# lm-assist
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## The Observability Platform for Claude Code & Agent SDK
|
|
4
|
+
|
|
5
|
+
Monitor, debug, and control AI coding agents with full session visibility, real-time execution tracking, and 155+ REST API endpoints.
|
|
4
6
|
|
|
5
7
|
[](https://discord.gg/xb2BNnk4)
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
- **Monitor** — real-time execution tracking, per-model cost & token breakdown, SSE event stream
|
|
10
|
+
- **Debug** — 15 insight views per session: Chat, Thinking, Agents, Plans, Team, DAG, Files, Git & more
|
|
11
|
+
- **Control** — web terminal from any browser, start/abort agents via API, remote access from anywhere
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
<a href="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/architecture-observability.svg"><img src="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/architecture-observability.svg" alt="lm-assist Architecture — Observability Platform for Claude Code & Agent SDK" width="700"></a>
|
|
14
|
+
|
|
15
|
+
### Install
|
|
10
16
|
|
|
11
17
|
```
|
|
12
18
|
/plugin marketplace add langmartai/lm-assist
|
|
13
|
-
|
|
14
19
|
/plugin install lm-assist@langmartai
|
|
15
20
|
```
|
|
16
21
|
|
|
17
|
-
Then **open a new Claude Code session** and run
|
|
22
|
+
Then **open a new Claude Code session** and run `/assist-setup`.
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
/assist-setup
|
|
21
|
-
```
|
|
24
|
+
> **Read:** [Inside Claude Code: The Session File Format and How to Inspect It](https://databunny.medium.com/inside-claude-code-the-session-file-format-and-how-to-inspect-it-b9998e66d56b) — technical breakdown of the JSONL session format, message types, subagent trees, and how lm-assist surfaces it all.
|
|
22
25
|
|
|
23
|
-
|
|
24
|
-
- **MCP server** — `search`, `detail`, `feedback` tools available in Claude Code
|
|
25
|
-
- **Context hook** — injects relevant knowledge into each prompt
|
|
26
|
-
- **Slash commands** — 6 commands for managing lm-assist
|
|
26
|
+
---
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
## Why lm-assist
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
Claude Code and the Agent SDK have no built-in dashboard. You get a terminal or logs. When you're running multiple agents, debugging a failed execution, or tracking costs across a fleet of machines — you need full visibility into every session, every subagent, every tool call, every token spent.
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
| Without lm-assist | With lm-assist |
|
|
33
|
+
|-------------------|---------------|
|
|
34
|
+
| Scroll through terminal output | 15 specialized views per session |
|
|
35
|
+
| No cost visibility | Per-model token & cost breakdown |
|
|
36
|
+
| Can't see what agents are doing | Real-time execution dashboard |
|
|
37
|
+
| No way to inspect subagent trees | Full DAG visualization |
|
|
38
|
+
| Terminal-only access | Web UI from any device, anywhere |
|
|
39
|
+
| Agent SDK runs are black boxes | Same session inspection as CLI |
|
|
33
40
|
|
|
34
|
-
|
|
41
|
+
---
|
|
35
42
|
|
|
36
|
-
|
|
43
|
+
## Three Pillars
|
|
37
44
|
|
|
38
|
-
|
|
45
|
+
### 1. Monitor
|
|
39
46
|
|
|
40
|
-
|
|
47
|
+
Real-time execution dashboard with live session tracking, cost analytics, and multi-machine fleet management.
|
|
41
48
|
|
|
42
|
-
|
|
49
|
+
<a href="https://langmart.ai/images/assist/session-browser.png"><img src="https://langmart.ai/images/assist/session-browser.png" alt="Session Browser — live sessions with cost and token tracking" width="700"></a>
|
|
43
50
|
|
|
44
|
-
|
|
51
|
+
> *Browse all sessions with human-readable names, live status, per-model cost breakdown — from any browser, anywhere*
|
|
45
52
|
|
|
46
|
-
|
|
53
|
+
- Session list with human-readable slug names, live status, and running process detection
|
|
54
|
+
- Per-session and per-project cost tracking — total cost in gold at a glance
|
|
55
|
+
- Per-model token breakdown (input, output, cache read, cache creation) in Meta tab
|
|
56
|
+
- SSE event stream for real-time updates
|
|
57
|
+
- Multi-machine fleet dashboard via LangMart Hub
|
|
47
58
|
|
|
48
|
-
|
|
59
|
+
**Statusline** — optional status bar showing context %, rate limits (5h/7d usage with time remaining), session cost, RAM, PID, and uptime. Color-coded: green < 50%, yellow 50-80%, red > 80%.
|
|
49
60
|
|
|
50
|
-
|
|
61
|
+
```
|
|
62
|
+
wt: no worktrees ctx:42% $12.34 5h:23% 2h14m left 7d:41% ram:565M free:6.1G pid:12345 up:3h22m
|
|
63
|
+
```
|
|
51
64
|
|
|
52
|
-
|
|
65
|
+
**Key endpoints:** `GET /monitor/executions` · `GET /stream` · `GET /sessions` · `GET /projects/sessions`
|
|
53
66
|
|
|
54
|
-
|
|
67
|
+
### 2. Debug
|
|
55
68
|
|
|
56
|
-
|
|
69
|
+
15 specialized views per session. Trace any decision through conversation flow, extended thinking, subagent hierarchy, tool calls, file changes, and git operations.
|
|
70
|
+
|
|
71
|
+
<table>
|
|
72
|
+
<tr>
|
|
73
|
+
<td><a href="https://langmart.ai/images/assist/agent-tree.png"><img src="https://langmart.ai/images/assist/agent-tree.png" alt="Agent Tree" width="340"></a><br><sub>Subagent hierarchy</sub></td>
|
|
74
|
+
<td><a href="https://langmart.ai/images/assist/plan-view.png"><img src="https://langmart.ai/images/assist/plan-view.png" alt="Plan View" width="340"></a><br><sub>Plan mode tracking</sub></td>
|
|
75
|
+
</tr>
|
|
76
|
+
<tr>
|
|
77
|
+
<td><a href="https://langmart.ai/images/assist/task-kanban.png"><img src="https://langmart.ai/images/assist/task-kanban.png" alt="Task Kanban" width="340"></a><br><sub>Task kanban board</sub></td>
|
|
78
|
+
<td><a href="https://langmart.ai/images/assist/team-view.png"><img src="https://langmart.ai/images/assist/team-view.png" alt="Team View" width="340"></a><br><sub>Multi-agent team coordination</sub></td>
|
|
79
|
+
</tr>
|
|
80
|
+
</table>
|
|
57
81
|
|
|
58
82
|
<details>
|
|
59
83
|
<summary><strong>All 15 tabs at a glance</strong></summary>
|
|
@@ -64,72 +88,83 @@ Every session gets a full breakdown across **15 specialized tabs** — Chat, Thi
|
|
|
64
88
|
| **Thinking** | Claude's extended thinking / chain-of-thought |
|
|
65
89
|
| **Agents** | Subagent tree — Explore, Plan, Bash, and custom agents |
|
|
66
90
|
| **Skills** | Skill invocation timeline with chain flow, span attribution, and deep trace |
|
|
67
|
-
| **Commands** | Slash command invocations
|
|
68
|
-
| **Tasks** |
|
|
91
|
+
| **Commands** | Slash command invocations with args and timing |
|
|
92
|
+
| **Tasks** | Task lists with dependency tracking |
|
|
69
93
|
| **Plans** | Plan mode entries with approval status |
|
|
70
|
-
| **Team** | Team/swarm coordination (
|
|
94
|
+
| **Team** | Team/swarm coordination (multi-agent teams) |
|
|
71
95
|
| **Files** | All files read, written, or edited during the session |
|
|
72
96
|
| **Git** | Commits, pushes, and diffs from the session |
|
|
73
97
|
| **Console** | Terminal output and process management |
|
|
74
98
|
| **Summary** | AI-generated session summary |
|
|
75
|
-
| **Meta** | Session metadata — timing, model, token usage |
|
|
99
|
+
| **Meta** | Session metadata — slug, timing, model, token usage |
|
|
76
100
|
| **JSON** | Raw session JSONL data |
|
|
77
101
|
| **DB** | Internal cache and index data |
|
|
78
102
|
|
|
79
103
|
</details>
|
|
80
104
|
|
|
81
|
-
|
|
105
|
+
- Session DAG visualization (message graph + cross-session subagent/team graph)
|
|
106
|
+
- Fork tracking and branch visualization
|
|
107
|
+
- Tool call traces with full inputs and results
|
|
108
|
+
|
|
109
|
+
**Key endpoints:** `GET /sessions/:id` · `GET /sessions/:id/dag` · `GET /sessions/:id/subagents` · `GET /sessions/:id/conversation`
|
|
82
110
|
|
|
83
|
-
|
|
111
|
+
### 3. Control
|
|
84
112
|
|
|
85
|
-
|
|
113
|
+
Full runtime management API. Start, stop, and monitor agent executions from any device. Web terminal access to running Claude Code sessions.
|
|
86
114
|
|
|
87
|
-
|
|
115
|
+
<a href="https://langmart.ai/images/assist/session-terminal.png"><img src="https://langmart.ai/images/assist/session-terminal.png" alt="Web Terminal — control Claude Code from any browser" width="700"></a>
|
|
88
116
|
|
|
89
|
-
|
|
90
|
-
1. **Generate** — Analyzes your sessions and extracts reusable knowledge (patterns, decisions, debugging insights)
|
|
91
|
-
2. **Search** — Indexed with BM25 + vector similarity for fast retrieval
|
|
92
|
-
3. **Inject** — On every prompt, the context-injection hook finds relevant knowledge and injects it as context
|
|
93
|
-
4. **MCP tools** — Claude Code can also actively search and retrieve knowledge using `search`, `detail`, and `feedback` tools
|
|
117
|
+
> *Live terminal access to running Claude Code sessions — from any browser, anywhere*
|
|
94
118
|
|
|
95
|
-
|
|
119
|
+
- Start and abort agent executions via REST API
|
|
120
|
+
- Web terminal (ttyd) from any browser — control Claude Code remotely
|
|
121
|
+
- SDK runner for programmatic headless execution
|
|
122
|
+
- Session cache warm/clear for performance tuning
|
|
123
|
+
- Remote access via LangMart Hub — no VPN or port forwarding needed
|
|
96
124
|
|
|
97
|
-
|
|
125
|
+
**Key endpoints:** `POST /monitor/abort/:executionId` · `POST /ttyd/start` · `POST /agent/execute` · `POST /hub/connect`
|
|
98
126
|
|
|
99
127
|
### Settings
|
|
100
128
|
|
|
101
129
|
<a href="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshots/settings.png"><img src="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshots/preview/settings.png" alt="Settings" width="700"></a>
|
|
102
130
|
|
|
103
|
-
> *Settings —
|
|
131
|
+
> *Settings — connection status, Claude Code config, knowledge kill switch, and more*
|
|
104
132
|
|
|
105
133
|
### Mobile & Tablet Support
|
|
106
134
|
|
|
107
|
-
The web UI is fully responsive.
|
|
135
|
+
The web UI is fully responsive. Monitor sessions, debug agents, and control terminals from your phone or tablet.
|
|
108
136
|
|
|
109
137
|
<table>
|
|
110
138
|
<tr>
|
|
111
139
|
<td align="center"><a href="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/session-terminal%20(mobile).png"><img src="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/session-terminal%20(mobile).png" alt="Terminal on mobile" width="180"></a><br><sub>Live Terminal</sub></td>
|
|
112
140
|
<td align="center"><a href="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/session-detail-chat%20(mobile).png"><img src="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/session-detail-chat%20(mobile).png" alt="Session detail on mobile" width="180"></a><br><sub>Session Detail</sub></td>
|
|
113
141
|
<td align="center"><a href="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/task-kanban%20(mobile).png"><img src="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/task-kanban%20(mobile).png" alt="Task kanban on mobile" width="180"></a><br><sub>Task Kanban</sub></td>
|
|
114
|
-
<td align="center"><a href="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/knowledge-list%20(mobile).png"><img src="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/knowledge-list%20(mobile).png" alt="Knowledge list on mobile" width="180"></a><br><sub>Knowledge Base</sub></td>
|
|
115
|
-
</tr>
|
|
116
|
-
<tr>
|
|
117
|
-
<td align="center"><a href="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/knowledge-detail-full%20(mobile).png"><img src="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/knowledge-detail-full%20(mobile).png" alt="Knowledge detail on mobile" width="180"></a><br><sub>Knowledge Detail</sub></td>
|
|
118
|
-
<td align="center"><a href="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/context-hook-logs%20(mobile).png"><img src="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/context-hook-logs%20(mobile).png" alt="Context hook logs on mobile" width="180"></a><br><sub>Context Injection Logs</sub></td>
|
|
119
142
|
<td align="center"><a href="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/settings-connection%20(mobile).png"><img src="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/settings-connection%20(mobile).png" alt="Settings on mobile" width="180"></a><br><sub>Settings</sub></td>
|
|
120
|
-
<td align="center"><a href="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/settings-claude-code%20(mobile).png"><img src="https://raw.githubusercontent.com/langmartai/lm-assist/main/docs/screenshot/settings-claude-code%20(mobile).png" alt="Claude Code settings on mobile" width="180"></a><br><sub>Claude Code Config</sub></td>
|
|
121
143
|
</tr>
|
|
122
144
|
</table>
|
|
123
145
|
|
|
124
|
-
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Data Sources
|
|
149
|
+
|
|
150
|
+
lm-assist reads the same JSONL session files regardless of how they were created:
|
|
151
|
+
|
|
152
|
+
| Source | What It Produces | lm-assist Coverage |
|
|
153
|
+
|--------|-----------------|-------------------|
|
|
154
|
+
| **Claude Code CLI** | Interactive sessions with subagents, teams, worktrees | Full parsing — all message types, tool calls, metadata |
|
|
155
|
+
| **Agent SDK** (Python/TypeScript) | Programmatic agent executions | Same JSONL format — full session inspection |
|
|
156
|
+
| **Headless mode** (`claude -p`) | Background/CI runs | Detected via process status store |
|
|
157
|
+
| **Running processes** | Live PID, tmux, terminal state | Real-time monitoring with zero polling overhead |
|
|
125
158
|
|
|
126
|
-
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Knowledge (Optional)
|
|
127
162
|
|
|
128
|
-
|
|
163
|
+
lm-assist includes an optional knowledge subsystem that auto-extracts reusable knowledge from your sessions and injects it into future prompts via MCP tools and a context hook. Enable or disable it at runtime from Settings — the kill switch unloads the embedder and vector store to save ~100MB of memory.
|
|
129
164
|
|
|
130
|
-
|
|
165
|
+
> **Read:** [Your Claude Sessions Are Gold: Stop Paying Twice for the Same Knowledge](https://databunny.medium.com/your-claude-sessions-are-gold-stop-paying-twice-for-the-same-knowledge-7632ac6ddb88)
|
|
131
166
|
|
|
132
|
-
|
|
167
|
+
When enabled, any MCP-compatible IDE can access the knowledge base:
|
|
133
168
|
|
|
134
169
|
| IDE | MCP Config |
|
|
135
170
|
|-----|-----------|
|
|
@@ -139,9 +174,6 @@ One-click activation from the Settings page:
|
|
|
139
174
|
| **Windsurf** | `~/.windsurf/mcp.json` |
|
|
140
175
|
| **Codex CLI** (OpenAI) | `~/.codex/config.toml` |
|
|
141
176
|
| **Gemini CLI** (Google) | `~/.gemini/settings.json` |
|
|
142
|
-
| **Google Antigravity** | `~/.gemini/antigravity/settings.json` |
|
|
143
|
-
|
|
144
|
-
All IDEs get access to the same 3 MCP tools (`search`, `detail`, `feedback`) and the same knowledge base. Generate knowledge once in Claude Code, use it everywhere.
|
|
145
177
|
|
|
146
178
|
---
|
|
147
179
|
|
|
@@ -153,12 +185,17 @@ All IDEs get access to the same 3 MCP tools (`search`, `detail`, `feedback`) and
|
|
|
153
185
|
curl -fsSL https://raw.githubusercontent.com/langmartai/lm-assist/main/install.sh | bash
|
|
154
186
|
```
|
|
155
187
|
|
|
156
|
-
|
|
188
|
+
Then **open a new Claude Code session** and run `/assist-setup`.
|
|
157
189
|
|
|
158
|
-
|
|
159
|
-
|
|
190
|
+
### Install via npm
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
npm install -g lm-assist
|
|
194
|
+
lm-assist start
|
|
160
195
|
```
|
|
161
196
|
|
|
197
|
+
Then in Claude Code, run `/assist-setup`.
|
|
198
|
+
|
|
162
199
|
### Install from source
|
|
163
200
|
|
|
164
201
|
```bash
|
|
@@ -168,32 +205,48 @@ npm install && npm run build
|
|
|
168
205
|
./core.sh start
|
|
169
206
|
```
|
|
170
207
|
|
|
171
|
-
Then in Claude Code, run `/plugin install .`
|
|
208
|
+
Then in Claude Code, run `/plugin install .` and `/assist-setup`.
|
|
172
209
|
|
|
173
|
-
###
|
|
210
|
+
### What gets installed
|
|
211
|
+
|
|
212
|
+
| Component | Auto-installed | Purpose |
|
|
213
|
+
|-----------|---------------|---------|
|
|
214
|
+
| 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 |
|
|
219
|
+
|
|
220
|
+
## Services
|
|
221
|
+
|
|
222
|
+
| Service | Port | Description |
|
|
223
|
+
|---------|------|-------------|
|
|
224
|
+
| Core API | 3100 | REST API — sessions, monitor, agents, tasks, knowledge |
|
|
225
|
+
| Web UI | 3848 | Next.js dashboard — 15 insight tabs, terminal, settings |
|
|
174
226
|
|
|
175
227
|
```bash
|
|
176
|
-
|
|
177
|
-
lm-assist
|
|
228
|
+
lm-assist start # Start both services
|
|
229
|
+
lm-assist stop # Stop all services
|
|
230
|
+
lm-assist status # Health check + process info
|
|
231
|
+
lm-assist upgrade # Upgrade to latest version
|
|
178
232
|
```
|
|
179
233
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
### What gets installed
|
|
234
|
+
## Key API Endpoints
|
|
183
235
|
|
|
184
|
-
|
|
|
185
|
-
|
|
186
|
-
|
|
|
187
|
-
|
|
|
188
|
-
|
|
|
189
|
-
|
|
|
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) |
|
|
190
245
|
|
|
191
|
-
|
|
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).
|
|
192
247
|
|
|
193
248
|
## Slash Commands
|
|
194
249
|
|
|
195
|
-
Use these from within any Claude Code session:
|
|
196
|
-
|
|
197
250
|
| Command | Description |
|
|
198
251
|
|---------|-------------|
|
|
199
252
|
| `/assist` | Open the web UI in your browser |
|
|
@@ -203,70 +256,15 @@ Use these from within any Claude Code session:
|
|
|
203
256
|
| `/assist-logs` | View context-inject hook logs |
|
|
204
257
|
| `/assist-mcp-logs` | View MCP tool call logs |
|
|
205
258
|
|
|
206
|
-
## MCP Server
|
|
207
|
-
|
|
208
|
-
The MCP server (`lm-assist`) provides 3 tools that any MCP-compatible IDE can use directly (Claude Code, VS Code, Cursor, Codex CLI, Gemini CLI, Antigravity):
|
|
209
|
-
|
|
210
|
-
| Tool | Description |
|
|
211
|
-
|------|-------------|
|
|
212
|
-
| `search` | Unified search across knowledge and file history |
|
|
213
|
-
| `detail` | Progressive disclosure — expand any item by ID (e.g., `K001`, `arch:component`) |
|
|
214
|
-
| `feedback` | Flag context as outdated, wrong, irrelevant, or useful |
|
|
215
|
-
|
|
216
|
-
When installed as a plugin, the MCP server is registered automatically. For non-plugin installs:
|
|
217
|
-
|
|
218
|
-
```bash
|
|
219
|
-
curl -X POST http://localhost:3100/claude-code/mcp/install
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
## Services
|
|
223
|
-
|
|
224
|
-
lm-assist runs two services:
|
|
225
|
-
|
|
226
|
-
| Service | Port | Description |
|
|
227
|
-
|---------|------|-------------|
|
|
228
|
-
| Core API | 3100 | REST API — sessions, knowledge, tasks |
|
|
229
|
-
| Web UI | 3848 | Next.js dashboard — accessible from any device on your network |
|
|
230
|
-
|
|
231
|
-
```bash
|
|
232
|
-
./core.sh start # Start both services
|
|
233
|
-
./core.sh stop # Stop all services
|
|
234
|
-
./core.sh restart # Restart (auto-rebuilds if TypeScript changed)
|
|
235
|
-
./core.sh status # Health check
|
|
236
|
-
./core.sh logs core # View API logs
|
|
237
|
-
./core.sh logs web # View web logs
|
|
238
|
-
```
|
|
239
|
-
|
|
240
259
|
## Configuration
|
|
241
260
|
|
|
242
|
-
No API key
|
|
261
|
+
No API key needed — lm-assist works entirely with your local Claude Code session data. Optionally copy `.env.example` to `.env`:
|
|
243
262
|
|
|
244
263
|
```bash
|
|
245
264
|
API_PORT=3100 # Core API port (default: 3100)
|
|
246
265
|
WEB_PORT=3848 # Web UI port (default: 3848)
|
|
247
266
|
```
|
|
248
267
|
|
|
249
|
-
## Project Structure
|
|
250
|
-
|
|
251
|
-
```
|
|
252
|
-
lm-assist/
|
|
253
|
-
├── core/ ← Backend API (TypeScript)
|
|
254
|
-
│ ├── src/
|
|
255
|
-
│ │ ├── mcp-server/ ← MCP server (search, detail, feedback tools)
|
|
256
|
-
│ │ ├── routes/core/ ← REST API routes (155 endpoints)
|
|
257
|
-
│ │ ├── knowledge/ ← Knowledge generation pipeline
|
|
258
|
-
│ │ └── vector/ ← Embeddings + vector store
|
|
259
|
-
│ └── hooks/ ← Claude Code hook scripts (Node.js, cross-platform)
|
|
260
|
-
├── web/ ← Web UI (Next.js, React 19)
|
|
261
|
-
├── commands/ ← Slash command definitions
|
|
262
|
-
├── hooks/ ← Plugin hook registration
|
|
263
|
-
├── docs/screenshots/ ← Product screenshots
|
|
264
|
-
├── .claude-plugin/ ← Claude Code plugin metadata
|
|
265
|
-
├── .mcp.json ← MCP server auto-registration
|
|
266
|
-
├── core.sh ← Service manager
|
|
267
|
-
└── bin/lm-assist.js ← CLI entry point
|
|
268
|
-
```
|
|
269
|
-
|
|
270
268
|
## Platform Support
|
|
271
269
|
|
|
272
270
|
| Platform | Support | Notes |
|
|
@@ -274,9 +272,14 @@ lm-assist/
|
|
|
274
272
|
| Linux | Full | All features including web terminal |
|
|
275
273
|
| macOS | Full | All features including web terminal |
|
|
276
274
|
| Windows | Partial | Everything except console/terminal access (ttyd not available) |
|
|
277
|
-
| Mobile / Tablet | Web UI |
|
|
275
|
+
| Mobile / Tablet | Web UI | Monitor, debug, and control from any device on your network |
|
|
276
|
+
|
|
277
|
+
## Who It's For
|
|
278
278
|
|
|
279
|
-
|
|
279
|
+
- **Solo developers** using Claude Code — see what's happening across all your sessions
|
|
280
|
+
- **Teams building with Agent SDK** — observability for your agent pipelines
|
|
281
|
+
- **DevOps managing agent fleets** — multi-machine dashboard, cost tracking, process management
|
|
282
|
+
- **AI product builders** — debug agent behavior with 15 insight views
|
|
280
283
|
|
|
281
284
|
## Changelog
|
|
282
285
|
|
package/bin/lm-assist.js
CHANGED
|
File without changes
|
package/commands/run.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash
|
|
3
|
+
description: Execute an agent on current or specified project
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /run — Execute Agent
|
|
7
|
+
|
|
8
|
+
Launch an agent execution on the current project or a specified project path.
|
|
9
|
+
|
|
10
|
+
## Arguments
|
|
11
|
+
|
|
12
|
+
- `$ARGUMENTS`: The prompt/task for the agent to execute
|
|
13
|
+
- `--project /path/to/project`: Optional — override the target project (default: current working directory)
|
|
14
|
+
|
|
15
|
+
## Steps
|
|
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`.
|
|
22
|
+
|
|
23
|
+
2. **Parse arguments:**
|
|
24
|
+
- Extract `--project` value if present, otherwise use the current working directory as `PROJECT_CWD`
|
|
25
|
+
- Everything else is the user's prompt
|
|
26
|
+
|
|
27
|
+
3. **Check for running executions on the target project:**
|
|
28
|
+
```bash
|
|
29
|
+
curl -s --max-time 3 http://localhost:3100/monitor/executions | python3 -c "
|
|
30
|
+
import sys,json
|
|
31
|
+
execs = json.load(sys.stdin).get('data',{}).get('executions',[])
|
|
32
|
+
running = [e for e in execs if e.get('isRunning')]
|
|
33
|
+
if running:
|
|
34
|
+
print(f'WARNING: {len(running)} execution(s) already running:')
|
|
35
|
+
for e in running:
|
|
36
|
+
eid = e.get('executionId','')[:12]
|
|
37
|
+
turns = e.get('turnCount',0)
|
|
38
|
+
cost = e.get('costUsd',0)
|
|
39
|
+
elapsed = (e.get('elapsedMs',0) or 0) // 1000
|
|
40
|
+
print(f' {eid} T:{turns} \${cost:.2f} {elapsed}s elapsed')
|
|
41
|
+
print()
|
|
42
|
+
print('Options:')
|
|
43
|
+
print(' - Proceed anyway (runs in parallel)')
|
|
44
|
+
print(' - Abort the running execution first')
|
|
45
|
+
else:
|
|
46
|
+
print('OK: No running executions.')
|
|
47
|
+
"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
If executions are running, **ask the user** whether to proceed, abort first, or cancel. Do NOT auto-proceed.
|
|
51
|
+
|
|
52
|
+
4. **Format the prompt:**
|
|
53
|
+
Take the user's input and expand it into a clear, actionable prompt. Examples:
|
|
54
|
+
- "review auth" → "Review the authentication module for security vulnerabilities, code quality issues, and test coverage gaps. Report findings with severity ratings."
|
|
55
|
+
- "fix the tests" → "Investigate and fix failing tests. Run the test suite, identify failures, analyze root causes, and implement fixes. Verify all tests pass after changes."
|
|
56
|
+
- "add error handling to the API" → "Add comprehensive error handling to all API endpoints. Include input validation, proper HTTP status codes, error response formatting, and logging for debugging."
|
|
57
|
+
|
|
58
|
+
5. **Execute the agent:**
|
|
59
|
+
```bash
|
|
60
|
+
curl -s -X POST http://localhost:3100/agent/execute \
|
|
61
|
+
-H 'Content-Type: application/json' \
|
|
62
|
+
-d '{"prompt":"FORMATTED_PROMPT","cwd":"PROJECT_CWD"}' | python3 -c "
|
|
63
|
+
import sys,json
|
|
64
|
+
d = json.load(sys.stdin)
|
|
65
|
+
if d.get('success'):
|
|
66
|
+
data = d.get('data',{})
|
|
67
|
+
eid = data.get('executionId','')
|
|
68
|
+
print(f'Execution started: {eid}')
|
|
69
|
+
else:
|
|
70
|
+
err = d.get('error',{})
|
|
71
|
+
print(f'Failed: {err.get(\"message\",\"unknown error\")}')
|
|
72
|
+
"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
6. **Confirm execution started (wait 3 seconds, then check):**
|
|
76
|
+
```bash
|
|
77
|
+
sleep 3 && curl -s --max-time 3 http://localhost:3100/monitor/executions | python3 -c "
|
|
78
|
+
import sys,json
|
|
79
|
+
execs = json.load(sys.stdin).get('data',{}).get('executions',[])
|
|
80
|
+
running = [e for e in execs if e.get('isRunning')]
|
|
81
|
+
if running:
|
|
82
|
+
e = running[0]
|
|
83
|
+
eid = e.get('executionId','')[:12]
|
|
84
|
+
status = e.get('status','')
|
|
85
|
+
turns = e.get('turnCount',0)
|
|
86
|
+
print(f'Confirmed running: {eid} status:{status} T:{turns}')
|
|
87
|
+
print(f'Monitor with: /sessions')
|
|
88
|
+
print(f'Or open web UI: http://localhost:3848')
|
|
89
|
+
else:
|
|
90
|
+
print('Execution may still be starting. Check with /sessions.')
|
|
91
|
+
"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Output
|
|
95
|
+
|
|
96
|
+
Report the execution status clearly:
|
|
97
|
+
- Execution ID
|
|
98
|
+
- Status (running/queued)
|
|
99
|
+
- How to monitor progress (`/sessions` or web UI URL)
|
|
100
|
+
|
|
101
|
+
If the API is not running, show:
|
|
102
|
+
```
|
|
103
|
+
lm-assist API is not running.
|
|
104
|
+
Start with: lm-assist start
|
|
105
|
+
Or run: /assist-setup
|
|
106
|
+
```
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash
|
|
3
|
+
description: List recent Claude Code sessions with costs and status
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /sessions — Session List
|
|
7
|
+
|
|
8
|
+
Show recent Claude Code sessions with costs, turns, model, and running status.
|
|
9
|
+
|
|
10
|
+
## Arguments
|
|
11
|
+
|
|
12
|
+
- No arguments: show sessions across all projects
|
|
13
|
+
- `$ARGUMENTS[0]`: filter by project name (partial match)
|
|
14
|
+
|
|
15
|
+
## Steps
|
|
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`.
|
|
22
|
+
|
|
23
|
+
2. **Fetch sessions:**
|
|
24
|
+
```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
|
+
```
|
|
58
|
+
|
|
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
|
+
```
|
|
77
|
+
|
|
78
|
+
## Output
|
|
79
|
+
|
|
80
|
+
Present the table output from the python script directly. Do NOT reformat as markdown — show it as-is from the terminal output.
|
|
81
|
+
|
|
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
|
|
87
|
+
```
|