@edwardlee5423/magi 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +184 -0
  3. package/dist/agent/headless-agent.d.ts +15 -0
  4. package/dist/agent/headless-agent.js +105 -0
  5. package/dist/agent/headless-agent.js.map +1 -0
  6. package/dist/agent/local-plan.d.ts +20 -0
  7. package/dist/agent/local-plan.js +30 -0
  8. package/dist/agent/local-plan.js.map +1 -0
  9. package/dist/agent/query-engine.d.ts +71 -0
  10. package/dist/agent/query-engine.js +938 -0
  11. package/dist/agent/query-engine.js.map +1 -0
  12. package/dist/agent/query.d.ts +128 -0
  13. package/dist/agent/query.js +674 -0
  14. package/dist/agent/query.js.map +1 -0
  15. package/dist/agent/system-prompt.d.ts +12 -0
  16. package/dist/agent/system-prompt.js +104 -0
  17. package/dist/agent/system-prompt.js.map +1 -0
  18. package/dist/agent/tools.d.ts +71 -0
  19. package/dist/agent/tools.js +37 -0
  20. package/dist/agent/tools.js.map +1 -0
  21. package/dist/agents/roles.d.ts +9 -0
  22. package/dist/agents/roles.js +18 -0
  23. package/dist/agents/roles.js.map +1 -0
  24. package/dist/agents/task-queue.d.ts +13 -0
  25. package/dist/agents/task-queue.js +50 -0
  26. package/dist/agents/task-queue.js.map +1 -0
  27. package/dist/cli.d.ts +7 -0
  28. package/dist/cli.js +1540 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/colors.d.ts +20 -0
  31. package/dist/colors.js +92 -0
  32. package/dist/colors.js.map +1 -0
  33. package/dist/commands/agents.d.ts +9 -0
  34. package/dist/commands/agents.js +37 -0
  35. package/dist/commands/agents.js.map +1 -0
  36. package/dist/commands/clear.d.ts +9 -0
  37. package/dist/commands/clear.js +20 -0
  38. package/dist/commands/clear.js.map +1 -0
  39. package/dist/commands/commit.d.ts +8 -0
  40. package/dist/commands/commit.js +35 -0
  41. package/dist/commands/commit.js.map +1 -0
  42. package/dist/commands/compact.d.ts +8 -0
  43. package/dist/commands/compact.js +29 -0
  44. package/dist/commands/compact.js.map +1 -0
  45. package/dist/commands/copy.d.ts +8 -0
  46. package/dist/commands/copy.js +49 -0
  47. package/dist/commands/copy.js.map +1 -0
  48. package/dist/commands/cost.d.ts +8 -0
  49. package/dist/commands/cost.js +94 -0
  50. package/dist/commands/cost.js.map +1 -0
  51. package/dist/commands/diff.d.ts +8 -0
  52. package/dist/commands/diff.js +38 -0
  53. package/dist/commands/diff.js.map +1 -0
  54. package/dist/commands/doctor.d.ts +8 -0
  55. package/dist/commands/doctor.js +23 -0
  56. package/dist/commands/doctor.js.map +1 -0
  57. package/dist/commands/export.d.ts +8 -0
  58. package/dist/commands/export.js +42 -0
  59. package/dist/commands/export.js.map +1 -0
  60. package/dist/commands/fork.d.ts +8 -0
  61. package/dist/commands/fork.js +20 -0
  62. package/dist/commands/fork.js.map +1 -0
  63. package/dist/commands/goal.d.ts +9 -0
  64. package/dist/commands/goal.js +54 -0
  65. package/dist/commands/goal.js.map +1 -0
  66. package/dist/commands/help.d.ts +8 -0
  67. package/dist/commands/help.js +65 -0
  68. package/dist/commands/help.js.map +1 -0
  69. package/dist/commands/hooks.d.ts +8 -0
  70. package/dist/commands/hooks.js +56 -0
  71. package/dist/commands/hooks.js.map +1 -0
  72. package/dist/commands/image.d.ts +17 -0
  73. package/dist/commands/image.js +74 -0
  74. package/dist/commands/image.js.map +1 -0
  75. package/dist/commands/init.d.ts +26 -0
  76. package/dist/commands/init.js +214 -0
  77. package/dist/commands/init.js.map +1 -0
  78. package/dist/commands/mcp.d.ts +8 -0
  79. package/dist/commands/mcp.js +217 -0
  80. package/dist/commands/mcp.js.map +1 -0
  81. package/dist/commands/memory.d.ts +8 -0
  82. package/dist/commands/memory.js +79 -0
  83. package/dist/commands/memory.js.map +1 -0
  84. package/dist/commands/model.d.ts +8 -0
  85. package/dist/commands/model.js +21 -0
  86. package/dist/commands/model.js.map +1 -0
  87. package/dist/commands/permissions.d.ts +9 -0
  88. package/dist/commands/permissions.js +30 -0
  89. package/dist/commands/permissions.js.map +1 -0
  90. package/dist/commands/proactive.d.ts +9 -0
  91. package/dist/commands/proactive.js +24 -0
  92. package/dist/commands/proactive.js.map +1 -0
  93. package/dist/commands/register-all.d.ts +1 -0
  94. package/dist/commands/register-all.js +68 -0
  95. package/dist/commands/register-all.js.map +1 -0
  96. package/dist/commands/registry.d.ts +64 -0
  97. package/dist/commands/registry.js +235 -0
  98. package/dist/commands/registry.js.map +1 -0
  99. package/dist/commands/rename.d.ts +8 -0
  100. package/dist/commands/rename.js +16 -0
  101. package/dist/commands/rename.js.map +1 -0
  102. package/dist/commands/review.d.ts +8 -0
  103. package/dist/commands/review.js +13 -0
  104. package/dist/commands/review.js.map +1 -0
  105. package/dist/commands/rewind.d.ts +8 -0
  106. package/dist/commands/rewind.js +45 -0
  107. package/dist/commands/rewind.js.map +1 -0
  108. package/dist/commands/route.d.ts +9 -0
  109. package/dist/commands/route.js +83 -0
  110. package/dist/commands/route.js.map +1 -0
  111. package/dist/commands/sessions.d.ts +9 -0
  112. package/dist/commands/sessions.js +25 -0
  113. package/dist/commands/sessions.js.map +1 -0
  114. package/dist/commands/skill.d.ts +9 -0
  115. package/dist/commands/skill.js +46 -0
  116. package/dist/commands/skill.js.map +1 -0
  117. package/dist/commands/status.d.ts +8 -0
  118. package/dist/commands/status.js +41 -0
  119. package/dist/commands/status.js.map +1 -0
  120. package/dist/commands/summary.d.ts +8 -0
  121. package/dist/commands/summary.js +39 -0
  122. package/dist/commands/summary.js.map +1 -0
  123. package/dist/commands/tasks.d.ts +9 -0
  124. package/dist/commands/tasks.js +70 -0
  125. package/dist/commands/tasks.js.map +1 -0
  126. package/dist/commands/todos.d.ts +9 -0
  127. package/dist/commands/todos.js +27 -0
  128. package/dist/commands/todos.js.map +1 -0
  129. package/dist/commands/tutorial.d.ts +8 -0
  130. package/dist/commands/tutorial.js +159 -0
  131. package/dist/commands/tutorial.js.map +1 -0
  132. package/dist/commands/upgrade.d.ts +9 -0
  133. package/dist/commands/upgrade.js +73 -0
  134. package/dist/commands/upgrade.js.map +1 -0
  135. package/dist/commands/usage.d.ts +8 -0
  136. package/dist/commands/usage.js +54 -0
  137. package/dist/commands/usage.js.map +1 -0
  138. package/dist/commands/vim.d.ts +10 -0
  139. package/dist/commands/vim.js +34 -0
  140. package/dist/commands/vim.js.map +1 -0
  141. package/dist/config.d.ts +104 -0
  142. package/dist/config.js +533 -0
  143. package/dist/config.js.map +1 -0
  144. package/dist/context/compaction.d.ts +66 -0
  145. package/dist/context/compaction.js +353 -0
  146. package/dist/context/compaction.js.map +1 -0
  147. package/dist/context/layers.d.ts +32 -0
  148. package/dist/context/layers.js +114 -0
  149. package/dist/context/layers.js.map +1 -0
  150. package/dist/context/token-budget.d.ts +21 -0
  151. package/dist/context/token-budget.js +70 -0
  152. package/dist/context/token-budget.js.map +1 -0
  153. package/dist/control/auth.d.ts +17 -0
  154. package/dist/control/auth.js +31 -0
  155. package/dist/control/auth.js.map +1 -0
  156. package/dist/control/daemon.d.ts +38 -0
  157. package/dist/control/daemon.js +135 -0
  158. package/dist/control/daemon.js.map +1 -0
  159. package/dist/control/mdns.d.ts +51 -0
  160. package/dist/control/mdns.js +344 -0
  161. package/dist/control/mdns.js.map +1 -0
  162. package/dist/control/peer-client.d.ts +49 -0
  163. package/dist/control/peer-client.js +170 -0
  164. package/dist/control/peer-client.js.map +1 -0
  165. package/dist/control/server.d.ts +30 -0
  166. package/dist/control/server.js +887 -0
  167. package/dist/control/server.js.map +1 -0
  168. package/dist/cost.d.ts +23 -0
  169. package/dist/cost.js +80 -0
  170. package/dist/cost.js.map +1 -0
  171. package/dist/doctor.d.ts +8 -0
  172. package/dist/doctor.js +22 -0
  173. package/dist/doctor.js.map +1 -0
  174. package/dist/env.d.ts +7 -0
  175. package/dist/env.js +70 -0
  176. package/dist/env.js.map +1 -0
  177. package/dist/errors.d.ts +6 -0
  178. package/dist/errors.js +13 -0
  179. package/dist/errors.js.map +1 -0
  180. package/dist/events.d.ts +19 -0
  181. package/dist/events.js +236 -0
  182. package/dist/events.js.map +1 -0
  183. package/dist/fs-utils.d.ts +21 -0
  184. package/dist/fs-utils.js +48 -0
  185. package/dist/fs-utils.js.map +1 -0
  186. package/dist/goal.d.ts +32 -0
  187. package/dist/goal.js +172 -0
  188. package/dist/goal.js.map +1 -0
  189. package/dist/headless.d.ts +38 -0
  190. package/dist/headless.js +547 -0
  191. package/dist/headless.js.map +1 -0
  192. package/dist/history.d.ts +8 -0
  193. package/dist/history.js +77 -0
  194. package/dist/history.js.map +1 -0
  195. package/dist/hooks/events.d.ts +14 -0
  196. package/dist/hooks/events.js +37 -0
  197. package/dist/hooks/events.js.map +1 -0
  198. package/dist/hooks/runner.d.ts +73 -0
  199. package/dist/hooks/runner.js +256 -0
  200. package/dist/hooks/runner.js.map +1 -0
  201. package/dist/hooks/trigger.d.ts +9 -0
  202. package/dist/hooks/trigger.js +18 -0
  203. package/dist/hooks/trigger.js.map +1 -0
  204. package/dist/index.d.ts +61 -0
  205. package/dist/index.js +62 -0
  206. package/dist/index.js.map +1 -0
  207. package/dist/interactions.d.ts +102 -0
  208. package/dist/interactions.js +250 -0
  209. package/dist/interactions.js.map +1 -0
  210. package/dist/logger.d.ts +32 -0
  211. package/dist/logger.js +115 -0
  212. package/dist/logger.js.map +1 -0
  213. package/dist/markdown.d.ts +18 -0
  214. package/dist/markdown.js +293 -0
  215. package/dist/markdown.js.map +1 -0
  216. package/dist/mcp/approval.d.ts +9 -0
  217. package/dist/mcp/approval.js +27 -0
  218. package/dist/mcp/approval.js.map +1 -0
  219. package/dist/mcp/client.d.ts +61 -0
  220. package/dist/mcp/client.js +276 -0
  221. package/dist/mcp/client.js.map +1 -0
  222. package/dist/mcp/connection-manager.d.ts +30 -0
  223. package/dist/mcp/connection-manager.js +126 -0
  224. package/dist/mcp/connection-manager.js.map +1 -0
  225. package/dist/mcp/oauth-callback.d.ts +23 -0
  226. package/dist/mcp/oauth-callback.js +108 -0
  227. package/dist/mcp/oauth-callback.js.map +1 -0
  228. package/dist/mcp/oauth-flow.d.ts +45 -0
  229. package/dist/mcp/oauth-flow.js +145 -0
  230. package/dist/mcp/oauth-flow.js.map +1 -0
  231. package/dist/mcp/oauth.d.ts +82 -0
  232. package/dist/mcp/oauth.js +169 -0
  233. package/dist/mcp/oauth.js.map +1 -0
  234. package/dist/mcp/tool-registry.d.ts +29 -0
  235. package/dist/mcp/tool-registry.js +207 -0
  236. package/dist/mcp/tool-registry.js.map +1 -0
  237. package/dist/mcp/transport.d.ts +33 -0
  238. package/dist/mcp/transport.js +493 -0
  239. package/dist/mcp/transport.js.map +1 -0
  240. package/dist/mcp/types.d.ts +57 -0
  241. package/dist/mcp/types.js +2 -0
  242. package/dist/mcp/types.js.map +1 -0
  243. package/dist/memdir.d.ts +58 -0
  244. package/dist/memdir.js +219 -0
  245. package/dist/memdir.js.map +1 -0
  246. package/dist/memory-selection.d.ts +30 -0
  247. package/dist/memory-selection.js +102 -0
  248. package/dist/memory-selection.js.map +1 -0
  249. package/dist/memory.d.ts +85 -0
  250. package/dist/memory.js +259 -0
  251. package/dist/memory.js.map +1 -0
  252. package/dist/paths.d.ts +25 -0
  253. package/dist/paths.js +99 -0
  254. package/dist/paths.js.map +1 -0
  255. package/dist/permissions.d.ts +17 -0
  256. package/dist/permissions.js +72 -0
  257. package/dist/permissions.js.map +1 -0
  258. package/dist/plugins/manifest.d.ts +17 -0
  259. package/dist/plugins/manifest.js +98 -0
  260. package/dist/plugins/manifest.js.map +1 -0
  261. package/dist/plugins/marketplace.d.ts +22 -0
  262. package/dist/plugins/marketplace.js +98 -0
  263. package/dist/plugins/marketplace.js.map +1 -0
  264. package/dist/proactive.d.ts +15 -0
  265. package/dist/proactive.js +49 -0
  266. package/dist/proactive.js.map +1 -0
  267. package/dist/providers/errors.d.ts +14 -0
  268. package/dist/providers/errors.js +66 -0
  269. package/dist/providers/errors.js.map +1 -0
  270. package/dist/providers/format-proxy.d.ts +100 -0
  271. package/dist/providers/format-proxy.js +235 -0
  272. package/dist/providers/format-proxy.js.map +1 -0
  273. package/dist/providers/http.d.ts +4 -0
  274. package/dist/providers/http.js +21 -0
  275. package/dist/providers/http.js.map +1 -0
  276. package/dist/providers/ir.d.ts +84 -0
  277. package/dist/providers/ir.js +76 -0
  278. package/dist/providers/ir.js.map +1 -0
  279. package/dist/providers/messages-compatible.d.ts +19 -0
  280. package/dist/providers/messages-compatible.js +592 -0
  281. package/dist/providers/messages-compatible.js.map +1 -0
  282. package/dist/providers/openai.d.ts +18 -0
  283. package/dist/providers/openai.js +430 -0
  284. package/dist/providers/openai.js.map +1 -0
  285. package/dist/providers/registry.d.ts +10 -0
  286. package/dist/providers/registry.js +16 -0
  287. package/dist/providers/registry.js.map +1 -0
  288. package/dist/providers/sse.d.ts +6 -0
  289. package/dist/providers/sse.js +104 -0
  290. package/dist/providers/sse.js.map +1 -0
  291. package/dist/routing/model-alias.d.ts +8 -0
  292. package/dist/routing/model-alias.js +23 -0
  293. package/dist/routing/model-alias.js.map +1 -0
  294. package/dist/routing/model-router.d.ts +55 -0
  295. package/dist/routing/model-router.js +233 -0
  296. package/dist/routing/model-router.js.map +1 -0
  297. package/dist/routing/router.d.ts +26 -0
  298. package/dist/routing/router.js +63 -0
  299. package/dist/routing/router.js.map +1 -0
  300. package/dist/rules/agents-loader.d.ts +12 -0
  301. package/dist/rules/agents-loader.js +61 -0
  302. package/dist/rules/agents-loader.js.map +1 -0
  303. package/dist/runner/client.d.ts +67 -0
  304. package/dist/runner/client.js +175 -0
  305. package/dist/runner/client.js.map +1 -0
  306. package/dist/session-store.d.ts +250 -0
  307. package/dist/session-store.js +629 -0
  308. package/dist/session-store.js.map +1 -0
  309. package/dist/skills/bundled.d.ts +14 -0
  310. package/dist/skills/bundled.js +148 -0
  311. package/dist/skills/bundled.js.map +1 -0
  312. package/dist/skills/loader.d.ts +11 -0
  313. package/dist/skills/loader.js +73 -0
  314. package/dist/skills/loader.js.map +1 -0
  315. package/dist/slash-menu.d.ts +14 -0
  316. package/dist/slash-menu.js +166 -0
  317. package/dist/slash-menu.js.map +1 -0
  318. package/dist/slash.d.ts +75 -0
  319. package/dist/slash.js +126 -0
  320. package/dist/slash.js.map +1 -0
  321. package/dist/spinner.d.ts +27 -0
  322. package/dist/spinner.js +68 -0
  323. package/dist/spinner.js.map +1 -0
  324. package/dist/ssh/exec.d.ts +20 -0
  325. package/dist/ssh/exec.js +39 -0
  326. package/dist/ssh/exec.js.map +1 -0
  327. package/dist/ssh/file.d.ts +32 -0
  328. package/dist/ssh/file.js +60 -0
  329. package/dist/ssh/file.js.map +1 -0
  330. package/dist/syntax-highlight.d.ts +19 -0
  331. package/dist/syntax-highlight.js +181 -0
  332. package/dist/syntax-highlight.js.map +1 -0
  333. package/dist/tools/agent-tool.d.ts +53 -0
  334. package/dist/tools/agent-tool.js +62 -0
  335. package/dist/tools/agent-tool.js.map +1 -0
  336. package/dist/tools/archive-create.d.ts +35 -0
  337. package/dist/tools/archive-create.js +37 -0
  338. package/dist/tools/archive-create.js.map +1 -0
  339. package/dist/tools/archive-extract.d.ts +28 -0
  340. package/dist/tools/archive-extract.js +36 -0
  341. package/dist/tools/archive-extract.js.map +1 -0
  342. package/dist/tools/base64.d.ts +27 -0
  343. package/dist/tools/base64.js +19 -0
  344. package/dist/tools/base64.js.map +1 -0
  345. package/dist/tools/browser.d.ts +125 -0
  346. package/dist/tools/browser.js +241 -0
  347. package/dist/tools/browser.js.map +1 -0
  348. package/dist/tools/config-tool.d.ts +31 -0
  349. package/dist/tools/config-tool.js +167 -0
  350. package/dist/tools/config-tool.js.map +1 -0
  351. package/dist/tools/cron.d.ts +110 -0
  352. package/dist/tools/cron.js +299 -0
  353. package/dist/tools/cron.js.map +1 -0
  354. package/dist/tools/date.d.ts +24 -0
  355. package/dist/tools/date.js +26 -0
  356. package/dist/tools/date.js.map +1 -0
  357. package/dist/tools/dir-create.d.ts +21 -0
  358. package/dist/tools/dir-create.js +19 -0
  359. package/dist/tools/dir-create.js.map +1 -0
  360. package/dist/tools/dir-list.d.ts +36 -0
  361. package/dist/tools/dir-list.js +47 -0
  362. package/dist/tools/dir-list.js.map +1 -0
  363. package/dist/tools/disk-usage.d.ts +30 -0
  364. package/dist/tools/disk-usage.js +22 -0
  365. package/dist/tools/disk-usage.js.map +1 -0
  366. package/dist/tools/download-file.d.ts +28 -0
  367. package/dist/tools/download-file.js +42 -0
  368. package/dist/tools/download-file.js.map +1 -0
  369. package/dist/tools/environment.d.ts +31 -0
  370. package/dist/tools/environment.js +33 -0
  371. package/dist/tools/environment.js.map +1 -0
  372. package/dist/tools/errors.d.ts +5 -0
  373. package/dist/tools/errors.js +9 -0
  374. package/dist/tools/errors.js.map +1 -0
  375. package/dist/tools/file-copy.d.ts +34 -0
  376. package/dist/tools/file-copy.js +45 -0
  377. package/dist/tools/file-copy.js.map +1 -0
  378. package/dist/tools/file-delete.d.ts +34 -0
  379. package/dist/tools/file-delete.js +42 -0
  380. package/dist/tools/file-delete.js.map +1 -0
  381. package/dist/tools/file-find.d.ts +46 -0
  382. package/dist/tools/file-find.js +33 -0
  383. package/dist/tools/file-find.js.map +1 -0
  384. package/dist/tools/file-move.d.ts +33 -0
  385. package/dist/tools/file-move.js +32 -0
  386. package/dist/tools/file-move.js.map +1 -0
  387. package/dist/tools/files.d.ts +38 -0
  388. package/dist/tools/files.js +123 -0
  389. package/dist/tools/files.js.map +1 -0
  390. package/dist/tools/git-branch-delete.d.ts +27 -0
  391. package/dist/tools/git-branch-delete.js +25 -0
  392. package/dist/tools/git-branch-delete.js.map +1 -0
  393. package/dist/tools/git-reset.d.ts +30 -0
  394. package/dist/tools/git-reset.js +28 -0
  395. package/dist/tools/git-reset.js.map +1 -0
  396. package/dist/tools/git-stash.d.ts +28 -0
  397. package/dist/tools/git-stash.js +24 -0
  398. package/dist/tools/git-stash.js.map +1 -0
  399. package/dist/tools/git.d.ts +77 -0
  400. package/dist/tools/git.js +300 -0
  401. package/dist/tools/git.js.map +1 -0
  402. package/dist/tools/github.d.ts +68 -0
  403. package/dist/tools/github.js +77 -0
  404. package/dist/tools/github.js.map +1 -0
  405. package/dist/tools/head-tail.d.ts +34 -0
  406. package/dist/tools/head-tail.js +23 -0
  407. package/dist/tools/head-tail.js.map +1 -0
  408. package/dist/tools/http-request.d.ts +44 -0
  409. package/dist/tools/http-request.js +57 -0
  410. package/dist/tools/http-request.js.map +1 -0
  411. package/dist/tools/json-query.d.ts +27 -0
  412. package/dist/tools/json-query.js +90 -0
  413. package/dist/tools/json-query.js.map +1 -0
  414. package/dist/tools/kill-process.d.ts +32 -0
  415. package/dist/tools/kill-process.js +51 -0
  416. package/dist/tools/kill-process.js.map +1 -0
  417. package/dist/tools/lsp.d.ts +98 -0
  418. package/dist/tools/lsp.js +398 -0
  419. package/dist/tools/lsp.js.map +1 -0
  420. package/dist/tools/monitor.d.ts +29 -0
  421. package/dist/tools/monitor.js +78 -0
  422. package/dist/tools/monitor.js.map +1 -0
  423. package/dist/tools/network-check.d.ts +34 -0
  424. package/dist/tools/network-check.js +57 -0
  425. package/dist/tools/network-check.js.map +1 -0
  426. package/dist/tools/notebook.d.ts +63 -0
  427. package/dist/tools/notebook.js +158 -0
  428. package/dist/tools/notebook.js.map +1 -0
  429. package/dist/tools/plan-mode.d.ts +48 -0
  430. package/dist/tools/plan-mode.js +57 -0
  431. package/dist/tools/plan-mode.js.map +1 -0
  432. package/dist/tools/process-list.d.ts +35 -0
  433. package/dist/tools/process-list.js +42 -0
  434. package/dist/tools/process-list.js.map +1 -0
  435. package/dist/tools/registry.d.ts +132 -0
  436. package/dist/tools/registry.js +2262 -0
  437. package/dist/tools/registry.js.map +1 -0
  438. package/dist/tools/search.d.ts +38 -0
  439. package/dist/tools/search.js +327 -0
  440. package/dist/tools/search.js.map +1 -0
  441. package/dist/tools/shell.d.ts +18 -0
  442. package/dist/tools/shell.js +249 -0
  443. package/dist/tools/shell.js.map +1 -0
  444. package/dist/tools/skill-tool.d.ts +22 -0
  445. package/dist/tools/skill-tool.js +66 -0
  446. package/dist/tools/skill-tool.js.map +1 -0
  447. package/dist/tools/sleep.d.ts +16 -0
  448. package/dist/tools/sleep.js +24 -0
  449. package/dist/tools/sleep.js.map +1 -0
  450. package/dist/tools/snip.d.ts +26 -0
  451. package/dist/tools/snip.js +95 -0
  452. package/dist/tools/snip.js.map +1 -0
  453. package/dist/tools/system-info.d.ts +17 -0
  454. package/dist/tools/system-info.js +33 -0
  455. package/dist/tools/system-info.js.map +1 -0
  456. package/dist/tools/tasks.d.ts +191 -0
  457. package/dist/tools/tasks.js +348 -0
  458. package/dist/tools/tasks.js.map +1 -0
  459. package/dist/tools/text-stats.d.ts +25 -0
  460. package/dist/tools/text-stats.js +25 -0
  461. package/dist/tools/text-stats.js.map +1 -0
  462. package/dist/tools/todo.d.ts +69 -0
  463. package/dist/tools/todo.js +197 -0
  464. package/dist/tools/todo.js.map +1 -0
  465. package/dist/tools/tool-search.d.ts +29 -0
  466. package/dist/tools/tool-search.js +114 -0
  467. package/dist/tools/tool-search.js.map +1 -0
  468. package/dist/tools/tree-view.d.ts +34 -0
  469. package/dist/tools/tree-view.js +39 -0
  470. package/dist/tools/tree-view.js.map +1 -0
  471. package/dist/tools/user-message.d.ts +39 -0
  472. package/dist/tools/user-message.js +70 -0
  473. package/dist/tools/user-message.js.map +1 -0
  474. package/dist/tools/user-question.d.ts +88 -0
  475. package/dist/tools/user-question.js +236 -0
  476. package/dist/tools/user-question.js.map +1 -0
  477. package/dist/tools/web-browser.d.ts +53 -0
  478. package/dist/tools/web-browser.js +373 -0
  479. package/dist/tools/web-browser.js.map +1 -0
  480. package/dist/tools/web-fetch.d.ts +22 -0
  481. package/dist/tools/web-fetch.js +146 -0
  482. package/dist/tools/web-fetch.js.map +1 -0
  483. package/dist/tools/web-search.d.ts +51 -0
  484. package/dist/tools/web-search.js +198 -0
  485. package/dist/tools/web-search.js.map +1 -0
  486. package/dist/tools/which.d.ts +22 -0
  487. package/dist/tools/which.js +21 -0
  488. package/dist/tools/which.js.map +1 -0
  489. package/dist/tools/whoami.d.ts +17 -0
  490. package/dist/tools/whoami.js +24 -0
  491. package/dist/tools/whoami.js.map +1 -0
  492. package/dist/tools/workspace-diagnostics.d.ts +62 -0
  493. package/dist/tools/workspace-diagnostics.js +421 -0
  494. package/dist/tools/workspace-diagnostics.js.map +1 -0
  495. package/dist/tools/workspace.d.ts +14 -0
  496. package/dist/tools/workspace.js +65 -0
  497. package/dist/tools/workspace.js.map +1 -0
  498. package/dist/tools/worktree.d.ts +70 -0
  499. package/dist/tools/worktree.js +150 -0
  500. package/dist/tools/worktree.js.map +1 -0
  501. package/dist/tui/interactions.d.ts +25 -0
  502. package/dist/tui/interactions.js +232 -0
  503. package/dist/tui/interactions.js.map +1 -0
  504. package/dist/tui/multiline-input.d.ts +14 -0
  505. package/dist/tui/multiline-input.js +550 -0
  506. package/dist/tui/multiline-input.js.map +1 -0
  507. package/dist/tui/paste.d.ts +40 -0
  508. package/dist/tui/paste.js +113 -0
  509. package/dist/tui/paste.js.map +1 -0
  510. package/dist/tui/prompt-reader.d.ts +26 -0
  511. package/dist/tui/prompt-reader.js +553 -0
  512. package/dist/tui/prompt-reader.js.map +1 -0
  513. package/dist/tui/transcript.d.ts +34 -0
  514. package/dist/tui/transcript.js +275 -0
  515. package/dist/tui/transcript.js.map +1 -0
  516. package/dist/tui.d.ts +53 -0
  517. package/dist/tui.js +669 -0
  518. package/dist/tui.js.map +1 -0
  519. package/dist/version.d.ts +1 -0
  520. package/dist/version.js +2 -0
  521. package/dist/version.js.map +1 -0
  522. package/dist/vim/lineEditor.d.ts +18 -0
  523. package/dist/vim/lineEditor.js +420 -0
  524. package/dist/vim/lineEditor.js.map +1 -0
  525. package/dist/web/panel-html.d.ts +1 -0
  526. package/dist/web/panel-html.js +532 -0
  527. package/dist/web/panel-html.js.map +1 -0
  528. package/dist/web/panel.d.ts +4 -0
  529. package/dist/web/panel.js +121 -0
  530. package/dist/web/panel.js.map +1 -0
  531. package/package.json +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/commands/route.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SlashCommandInput } from "./registry.js";
2
+ export declare const command: {
3
+ name: string;
4
+ aliases: string[];
5
+ description: string;
6
+ usage: string;
7
+ group: string;
8
+ handler: (args: string[], input: SlashCommandInput) => string;
9
+ };
@@ -0,0 +1,25 @@
1
+ import { formatSessionSearch, resolveSessionPickerSelection } from "./registry.js";
2
+ export const command = {
3
+ name: "sessions",
4
+ aliases: ["resume"],
5
+ description: "List recent sessions or search and resume a session",
6
+ usage: "/sessions\n/resume [query|id|number]",
7
+ group: "Session",
8
+ handler: (args, input) => {
9
+ if (args.length > 0) {
10
+ const selected = resolveSessionPickerSelection(input.store, args[0]);
11
+ if (selected) {
12
+ return `Resumed ${selected.id}: ${selected.title ?? "(untitled)"}`;
13
+ }
14
+ return formatSessionSearch(input.store, args[0]);
15
+ }
16
+ // No args: /sessions shows short list, /resume shows search prompt
17
+ // We can't detect which alias was used, so show the search format (the richer output)
18
+ const sessions = input.store.listSessions(10);
19
+ if (sessions.length === 0) {
20
+ return "No sessions";
21
+ }
22
+ return formatSessionSearch(input.store, "");
23
+ }
24
+ };
25
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAqB,MAAM,eAAe,CAAC;AAEtG,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,WAAW,EAAE,qDAAqD;IAClE,KAAK,EAAE,sCAAsC;IAC7C,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,CAAC,IAAc,EAAE,KAAwB,EAAU,EAAE;QAC5D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,6BAA6B,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,WAAW,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,KAAK,IAAI,YAAY,EAAE,CAAC;YACrE,CAAC;YACD,OAAO,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,mEAAmE;QACnE,sFAAsF;QACtF,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,OAAO,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;CACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { SlashCommandInput } from "./registry.js";
2
+ export declare const command: {
3
+ name: string;
4
+ aliases: string[];
5
+ description: string;
6
+ usage: string;
7
+ group: string;
8
+ handler: (args: string[], input: SlashCommandInput) => string;
9
+ };
@@ -0,0 +1,46 @@
1
+ import { listSkills, findSkill } from "../skills/loader.js";
2
+ export const command = {
3
+ name: "skill",
4
+ aliases: ["skills"],
5
+ description: "List installed skills or show details for one",
6
+ usage: "/skill [name]",
7
+ group: "Skills",
8
+ handler: (args, input) => {
9
+ if (!input.paths) {
10
+ return "Skills require a configured paths root (run from a normal session).";
11
+ }
12
+ if (args.length === 0) {
13
+ const skills = listSkills(input.paths);
14
+ if (skills.length === 0) {
15
+ return [
16
+ "No skills installed.",
17
+ "",
18
+ `Skills directory: ${input.paths.skillsRoot}`,
19
+ "Add a skill by creating a directory with a SKILL.md file under that path.",
20
+ "Example: ~/.magi-next/skills/my-skill/SKILL.md"
21
+ ].join("\n");
22
+ }
23
+ return [
24
+ "Installed skills:",
25
+ ...skills.map((s) => ` /${s.name.padEnd(24)} ${s.summary}`),
26
+ "",
27
+ "Use /skill <name> to view a skill's contents.",
28
+ "Use /<name> directly to invoke a skill in conversation."
29
+ ].join("\n");
30
+ }
31
+ const name = args[0].replace(/^\//, "");
32
+ const skill = findSkill(input.paths, name);
33
+ if (!skill) {
34
+ return `Skill not found: ${name}. Use /skill to list installed skills.`;
35
+ }
36
+ return [
37
+ `Skill: ${skill.name}`,
38
+ `Root: ${skill.root}`,
39
+ `Summary: ${skill.summary}`,
40
+ "",
41
+ "--- SKILL.md ---",
42
+ skill.body ?? "(no body)"
43
+ ].join("\n");
44
+ }
45
+ };
46
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAmB,MAAM,qBAAqB,CAAC;AAG7E,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,WAAW,EAAE,+CAA+C;IAC5D,KAAK,EAAE,eAAe;IACtB,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,CAAC,IAAc,EAAE,KAAwB,EAAU,EAAE;QAC5D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,qEAAqE,CAAC;QAC/E,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO;oBACL,sBAAsB;oBACtB,EAAE;oBACF,qBAAqB,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE;oBAC7C,2EAA2E;oBAC3E,gDAAgD;iBACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;YACD,OAAO;gBACL,mBAAmB;gBACnB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC5D,EAAE;gBACF,+CAA+C;gBAC/C,yDAAyD;aAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,oBAAoB,IAAI,wCAAwC,CAAC;QAC1E,CAAC;QACD,OAAO;YACL,UAAU,KAAK,CAAC,IAAI,EAAE;YACtB,UAAU,KAAK,CAAC,IAAI,EAAE;YACtB,YAAY,KAAK,CAAC,OAAO,EAAE;YAC3B,EAAE;YACF,kBAAkB;YAClB,KAAK,CAAC,IAAI,IAAI,WAAW;SAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { SlashCommandInput } from "./registry.js";
2
+ export declare const command: {
3
+ name: string;
4
+ description: string;
5
+ usage: string;
6
+ group: string;
7
+ handler: (_args: string[], input: SlashCommandInput) => string;
8
+ };
@@ -0,0 +1,41 @@
1
+ import { formatEventList, toEventView } from "../events.js";
2
+ export const command = {
3
+ name: "status",
4
+ description: "Show cwd, providers, aliases, and state",
5
+ usage: "/status",
6
+ group: "Session",
7
+ handler: (_args, input) => {
8
+ const recentRecords = input.sessionId
9
+ ? input.store.listSessionAuditEvents(input.sessionId, 50)
10
+ : input.store.listAuditEvents(50);
11
+ const views = recentRecords.map(toEventView);
12
+ const pending = views
13
+ .filter((event) => event.status === "pending" && (event.category === "approval" || event.category === "question"));
14
+ const events = views.slice(0, 5);
15
+ return [
16
+ `cwd: ${input.cwd}`,
17
+ `session: ${input.sessionId ?? "none"}`,
18
+ `model: ${input.currentModel ?? "main"} (${formatModelTarget(input.config, input.currentModel ?? "main")})`,
19
+ `providers: ${Object.keys(input.config.providers).join(", ") || "none"}`,
20
+ `aliases: ${Object.keys(input.config.models.aliases).join(", ") || "none"}`,
21
+ formatPendingInteractions(pending),
22
+ formatEventList(events)
23
+ ].join("\n");
24
+ }
25
+ };
26
+ function formatModelTarget(config, alias) {
27
+ return config.models.aliases[alias] ?? alias;
28
+ }
29
+ function formatPendingInteractions(events) {
30
+ if (events.length === 0) {
31
+ return "Pending interactions: none";
32
+ }
33
+ return [
34
+ "Pending interactions:",
35
+ ...events.map((event) => {
36
+ const toolUseId = typeof event.metadata.toolUseId === "string" ? event.metadata.toolUseId : event.target ?? "unknown";
37
+ return `- ${event.category} ${toolUseId} job=${event.metadata.jobId ?? "unknown"} ${event.message}`;
38
+ })
39
+ ].join("\n");
40
+ }
41
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG5D,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,yCAAyC;IACtD,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,CAAC,KAAe,EAAE,KAAwB,EAAU,EAAE;QAC7D,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS;YACnC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;YACzD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK;aAClB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC;QACrH,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,OAAO;YACL,QAAQ,KAAK,CAAC,GAAG,EAAE;YACnB,YAAY,KAAK,CAAC,SAAS,IAAI,MAAM,EAAE;YACvC,UAAU,KAAK,CAAC,YAAY,IAAI,MAAM,KAAK,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,IAAI,MAAM,CAAC,GAAG;YAC3G,cAAc,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;YACxE,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;YAC3E,yBAAyB,CAAC,OAAO,CAAC;YAClC,eAAe,CAAC,MAAM,CAAC;SACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF,CAAC;AAEF,SAAS,iBAAiB,CAAC,MAAuD,EAAE,KAAa;IAC/F,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AAC/C,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAwC;IACzE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,4BAA4B,CAAC;IACtC,CAAC;IACD,OAAO;QACL,uBAAuB;QACvB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACtB,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC;YACtH,OAAO,KAAK,KAAK,CAAC,QAAQ,IAAI,SAAS,QAAQ,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACtG,CAAC,CAAC;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { SlashCommandInput } from "./registry.js";
2
+ export declare const command: {
3
+ name: string;
4
+ description: string;
5
+ usage: string;
6
+ group: string;
7
+ handler: (_args: string[], input: SlashCommandInput) => string;
8
+ };
@@ -0,0 +1,39 @@
1
+ export const command = {
2
+ name: "summary",
3
+ description: "Show session summary with message count and job info",
4
+ usage: "/summary",
5
+ group: "Session",
6
+ handler: (_args, input) => {
7
+ if (!input.sessionId) {
8
+ return "No active session.";
9
+ }
10
+ const session = input.store.getSession(input.sessionId);
11
+ if (!session) {
12
+ return "Session not found.";
13
+ }
14
+ const messageCount = session.messages.length;
15
+ const jobs = input.store.listJobs(100).filter(j => j.sessionId === input.sessionId);
16
+ const elapsed = getElapsed(session.createdAt, session.updatedAt);
17
+ return [
18
+ `Session: ${input.sessionId}`,
19
+ `Title: ${session.title ?? "(untitled)"}`,
20
+ `Created: ${session.createdAt}`,
21
+ `Updated: ${session.updatedAt}`,
22
+ `Elapsed: ${elapsed}`,
23
+ `Messages: ${messageCount}`,
24
+ `Jobs: ${jobs.length}`
25
+ ].join("\n");
26
+ }
27
+ };
28
+ function getElapsed(start, end) {
29
+ const ms = new Date(end).getTime() - new Date(start).getTime();
30
+ if (ms < 0)
31
+ return "0s";
32
+ const seconds = Math.floor(ms / 1000);
33
+ if (seconds < 60)
34
+ return `${seconds}s`;
35
+ const minutes = Math.floor(seconds / 60);
36
+ const remainSec = seconds % 60;
37
+ return `${minutes}m ${remainSec}s`;
38
+ }
39
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/commands/summary.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,sDAAsD;IACnE,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,CAAC,KAAe,EAAE,KAAwB,EAAU,EAAE;QAC7D,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEjE,OAAO;YACL,YAAY,KAAK,CAAC,SAAS,EAAE;YAC7B,UAAU,OAAO,CAAC,KAAK,IAAI,YAAY,EAAE;YACzC,YAAY,OAAO,CAAC,SAAS,EAAE;YAC/B,YAAY,OAAO,CAAC,SAAS,EAAE;YAC/B,YAAY,OAAO,EAAE;YACrB,aAAa,YAAY,EAAE;YAC3B,SAAS,IAAI,CAAC,MAAM,EAAE;SACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF,CAAC;AAEF,SAAS,UAAU,CAAC,KAAa,EAAE,GAAW;IAC5C,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/D,IAAI,EAAE,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,GAAG,EAAE,CAAC;IAC/B,OAAO,GAAG,OAAO,KAAK,SAAS,GAAG,CAAC;AACrC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { SlashCommandInput } from "./registry.js";
2
+ export declare const command: {
3
+ name: string;
4
+ aliases: string[];
5
+ description: string;
6
+ usage: string;
7
+ group: string;
8
+ handler: (args: string[], input: SlashCommandInput) => string;
9
+ };
@@ -0,0 +1,70 @@
1
+ import path from "node:path";
2
+ import { existsSync } from "node:fs";
3
+ import { SessionStore } from "../session-store.js";
4
+ export const command = {
5
+ name: "tasks",
6
+ aliases: ["jobs"],
7
+ description: "List background tasks (sub-agent jobs)",
8
+ usage: "/tasks [show <id>]",
9
+ group: "State",
10
+ handler: (args, input) => {
11
+ if (!input.paths) {
12
+ return "Tasks require a configured paths root.";
13
+ }
14
+ const dbPath = path.join(input.paths.stateRoot, "sessions.sqlite");
15
+ if (!existsSync(dbPath)) {
16
+ return "No sessions database found yet.";
17
+ }
18
+ const store = new SessionStore(dbPath);
19
+ const sub = args[0];
20
+ if (sub === "show" || sub === "view") {
21
+ const id = args[1];
22
+ if (!id)
23
+ return "Usage: /tasks show <id>";
24
+ const job = store.getJob(id);
25
+ if (!job)
26
+ return `Task not found: ${id}`;
27
+ const meta = (job.metadata ?? {});
28
+ const lines = [
29
+ `Task: ${job.id}`,
30
+ `Status: ${job.status}`,
31
+ `Kind: ${job.kind}`,
32
+ `Session: ${job.sessionId}`,
33
+ `Created: ${new Date(job.createdAt).toISOString()}`
34
+ ];
35
+ if (job.updatedAt)
36
+ lines.push(`Updated: ${new Date(job.updatedAt).toISOString()}`);
37
+ if (typeof meta.description === "string")
38
+ lines.push(`Description: ${meta.description}`);
39
+ if (typeof meta.subagentType === "string")
40
+ lines.push(`Sub-agent type: ${meta.subagentType}`);
41
+ if (typeof meta.result === "string") {
42
+ lines.push("");
43
+ lines.push("Result:");
44
+ lines.push(meta.result);
45
+ }
46
+ if (typeof meta.error === "string") {
47
+ lines.push("");
48
+ lines.push("Error:");
49
+ lines.push(meta.error);
50
+ }
51
+ return lines.join("\n");
52
+ }
53
+ const jobs = store.listJobs(50);
54
+ if (jobs.length === 0) {
55
+ return "No background tasks found.";
56
+ }
57
+ const lines = ["Background tasks (most recent first):"];
58
+ lines.push("");
59
+ lines.push(` ${"ID".padEnd(38)} ${"Status".padEnd(10)} ${"Kind".padEnd(12)} Description`);
60
+ for (const job of jobs) {
61
+ const meta = (job.metadata ?? {});
62
+ const desc = typeof meta.description === "string" ? meta.description : (typeof meta.subagentType === "string" ? `[${meta.subagentType}]` : "");
63
+ lines.push(` ${job.id.padEnd(38)} ${job.status.padEnd(10)} ${job.kind.padEnd(12)} ${desc}`);
64
+ }
65
+ lines.push("");
66
+ lines.push("Use /tasks show <id> to view a task's full output.");
67
+ return lines.join("\n");
68
+ }
69
+ };
70
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SlashCommandInput } from "./registry.js";
2
+ export declare const command: {
3
+ name: string;
4
+ aliases: string[];
5
+ description: string;
6
+ usage: string;
7
+ group: string;
8
+ handler: (_args: string[], input: SlashCommandInput) => string;
9
+ };
@@ -0,0 +1,27 @@
1
+ import { executeTaskList, formatTaskListResult } from "../tools/tasks.js";
2
+ export const command = {
3
+ name: "todos",
4
+ aliases: ["todo"],
5
+ description: "Show the current session's task list",
6
+ usage: "/todos",
7
+ group: "State",
8
+ handler: (_args, input) => {
9
+ if (!input.sessionId)
10
+ return "No active session.";
11
+ if (!input.paths)
12
+ return "Paths not configured.";
13
+ const result = executeTaskList({
14
+ stateRoot: input.paths.stateRoot,
15
+ sessionId: input.sessionId
16
+ });
17
+ if (!result.tasks || result.tasks.length === 0) {
18
+ return [
19
+ "No tasks in this session yet.",
20
+ "",
21
+ "The agent uses TaskCreate/TaskUpdate to track work on multi-step jobs."
22
+ ].join("\n");
23
+ }
24
+ return formatTaskListResult(result);
25
+ }
26
+ };
27
+ //# sourceMappingURL=todos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todos.js","sourceRoot":"","sources":["../../src/commands/todos.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE1E,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,WAAW,EAAE,sCAAsC;IACnD,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,CAAC,KAAe,EAAE,KAAwB,EAAU,EAAE;QAC7D,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,oBAAoB,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,uBAAuB,CAAC;QACjD,MAAM,MAAM,GAAG,eAAe,CAAC;YAC7B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;YAChC,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO;gBACL,+BAA+B;gBAC/B,EAAE;gBACF,wEAAwE;aACzE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QACD,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;CACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `magi tutorial` — a 5-minute interactive walkthrough.
3
+ *
4
+ * Prints a guided overview of the most useful commands and concepts.
5
+ * No real model calls; just text + asks the user to press Enter between sections
6
+ * so they can absorb each step. Press `q` at any prompt to skip out early.
7
+ */
8
+ export declare function runTutorial(): Promise<void>;
@@ -0,0 +1,159 @@
1
+ /**
2
+ * `magi tutorial` — a 5-minute interactive walkthrough.
3
+ *
4
+ * Prints a guided overview of the most useful commands and concepts.
5
+ * No real model calls; just text + asks the user to press Enter between sections
6
+ * so they can absorb each step. Press `q` at any prompt to skip out early.
7
+ */
8
+ import readline from "node:readline/promises";
9
+ import { stdin, stdout } from "node:process";
10
+ const HEADER = "\x1b[1m\x1b[36m";
11
+ const RESET = "\x1b[0m";
12
+ const DIM = "\x1b[2m";
13
+ const CYAN = "\x1b[36m";
14
+ const BOLD = "\x1b[1m";
15
+ const SECTIONS = [
16
+ {
17
+ title: "1. The basics",
18
+ body: [
19
+ "Magi is a TUI for AI-assisted coding.",
20
+ "",
21
+ " magi Start the interactive TUI",
22
+ " magi -p \"hello\" Run a one-shot prompt and exit",
23
+ " magi --version Show version",
24
+ " magi doctor Show config paths and runtime info",
25
+ "",
26
+ "Inside the TUI, type a question and Enter to send. Use Ctrl+C to interrupt.",
27
+ "Type /help anytime to list commands."
28
+ ]
29
+ },
30
+ {
31
+ title: "2. Models and routing",
32
+ body: [
33
+ "Configure a provider with `magi init` first (sets up aliases: fast/main/review/deep).",
34
+ "",
35
+ " /model Show current model + picker",
36
+ " /model fast Use the haiku alias (cheap)",
37
+ " /model auto Smart routing — picks model per task",
38
+ " /route test \"<prompt>\" Preview which model auto would pick",
39
+ "",
40
+ "Auto picks haiku for short questions, sonnet for code, opus for planning."
41
+ ]
42
+ },
43
+ {
44
+ title: "3. Files and editing",
45
+ body: [
46
+ "Magi has tools to read/edit files in the current workspace.",
47
+ "",
48
+ " Read a file: ask \"show me src/index.ts\"",
49
+ " Edit a file: ask \"add error handling to src/foo.ts:42\"",
50
+ " Search the repo: ask \"find all uses of fooBar\"",
51
+ "",
52
+ "After non-trivial changes, ask \"verify\" to run the verify skill —",
53
+ "it builds and tests automatically."
54
+ ]
55
+ },
56
+ {
57
+ title: "4. Sessions",
58
+ body: [
59
+ "Each conversation is a session, persisted to ~/.magi-next/state/sessions.sqlite.",
60
+ "",
61
+ " /sessions List recent sessions (in TUI)",
62
+ " magi sessions Same, from CLI",
63
+ " magi resume <id> Resume a session",
64
+ " /clear Start a new session",
65
+ " /export <path> Save current session as markdown",
66
+ " /fork Branch off a copy",
67
+ " /rewind Drop the last assistant turn"
68
+ ]
69
+ },
70
+ {
71
+ title: "5. Skills (reusable workflows)",
72
+ body: [
73
+ "Skills are markdown files that the agent invokes for repeatable tasks.",
74
+ "",
75
+ " /skill List installed skills",
76
+ " /verify Built-in skill: build + test + verdict",
77
+ " /debug Built-in skill: investigate a bug",
78
+ " /commit-msg Built-in skill: draft commit message",
79
+ "",
80
+ "Add your own at ~/.magi-next/skills/<name>/SKILL.md."
81
+ ]
82
+ },
83
+ {
84
+ title: "6. Memory",
85
+ body: [
86
+ "Magi remembers durable facts across sessions in ~/.magi-next/memdir/.",
87
+ "",
88
+ " /memory List your saved memories",
89
+ " /memory show <name> View a memory",
90
+ " /memory delete <name> Remove one",
91
+ "",
92
+ "The agent uses the Memorize tool to save things automatically",
93
+ "(user role, project decisions, your preferences)."
94
+ ]
95
+ },
96
+ {
97
+ title: "7. Multi-machine + remote control",
98
+ body: [
99
+ "Each Magi can run as a daemon and discover others on the LAN.",
100
+ "",
101
+ " magi daemon start Run control API + mDNS in background",
102
+ " magi peers Discover other Magi instances",
103
+ " magi pair <name> Generate a token for your phone",
104
+ " /tasks See running background jobs",
105
+ "",
106
+ "Open the panel URL on your phone — control your dev machine remotely."
107
+ ]
108
+ },
109
+ {
110
+ title: "8. Sub-agents and parallel work",
111
+ body: [
112
+ "The Agent tool lets the model spawn sub-agents for sub-tasks.",
113
+ "",
114
+ " Agent({ subagent_type: 'explore', prompt: '...' }) cheap research",
115
+ " Agent({ subagent_type: 'verification', prompt: '...' }) build/test",
116
+ " Agent({ target: 'peer-X', ... }) dispatch to a peer",
117
+ "",
118
+ "Multiple Agent calls in the same response run in parallel."
119
+ ]
120
+ },
121
+ {
122
+ title: "Done",
123
+ body: [
124
+ "That's the core. A few more starting points:",
125
+ "",
126
+ " /help Full slash-command list",
127
+ " magi config Show effective config",
128
+ " ~/.magi-next/ Your config + state",
129
+ "",
130
+ "Have fun. Run /tutorial again any time to refresh."
131
+ ]
132
+ }
133
+ ];
134
+ export async function runTutorial() {
135
+ const rl = readline.createInterface({ input: stdin, output: stdout });
136
+ try {
137
+ stdout.write(`\n${HEADER}Magi tutorial${RESET}\n`);
138
+ stdout.write(`${DIM}Press Enter to advance, q to quit.${RESET}\n\n`);
139
+ for (let i = 0; i < SECTIONS.length; i++) {
140
+ const s = SECTIONS[i];
141
+ stdout.write(`\n${BOLD}${CYAN}${s.title}${RESET}\n`);
142
+ for (const line of s.body) {
143
+ stdout.write(`${line}\n`);
144
+ }
145
+ if (i < SECTIONS.length - 1) {
146
+ const answer = await rl.question(`\n${DIM}— Enter to continue, q to quit —${RESET} `);
147
+ if (answer.trim().toLowerCase() === "q" || answer.trim().toLowerCase() === "quit") {
148
+ stdout.write(`\nGoodbye!\n`);
149
+ return;
150
+ }
151
+ }
152
+ }
153
+ stdout.write(`\n`);
154
+ }
155
+ finally {
156
+ rl.close();
157
+ }
158
+ }
159
+ //# sourceMappingURL=tutorial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tutorial.js","sourceRoot":"","sources":["../../src/commands/tutorial.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SlashCommandInput } from "./registry.js";
2
+ export declare const command: {
3
+ name: string;
4
+ aliases: string[];
5
+ description: string;
6
+ usage: string;
7
+ group: string;
8
+ handler: (_args: string[], _input: SlashCommandInput) => Promise<string>;
9
+ };
@@ -0,0 +1,73 @@
1
+ export const command = {
2
+ name: "upgrade",
3
+ aliases: ["update"],
4
+ description: "Show the installed Magi Next version and update instructions",
5
+ usage: "/upgrade",
6
+ group: "Help",
7
+ handler: async (_args, _input) => {
8
+ const lines = [];
9
+ let installedVersion = "unknown";
10
+ try {
11
+ const fs = await import("node:fs");
12
+ const path = await import("node:path");
13
+ const url = await import("node:url");
14
+ const here = url.fileURLToPath(import.meta.url);
15
+ // Find package.json by walking up
16
+ let dir = path.dirname(here);
17
+ for (let i = 0; i < 6; i++) {
18
+ const pkg = path.join(dir, "package.json");
19
+ if (fs.existsSync(pkg)) {
20
+ const data = JSON.parse(fs.readFileSync(pkg, "utf8"));
21
+ installedVersion = data.version ?? "unknown";
22
+ break;
23
+ }
24
+ const parent = path.dirname(dir);
25
+ if (parent === dir)
26
+ break;
27
+ dir = parent;
28
+ }
29
+ }
30
+ catch {
31
+ // best-effort
32
+ }
33
+ lines.push(`Magi Next: ${installedVersion}`);
34
+ lines.push("");
35
+ // Try to fetch latest from npm registry (best-effort, short timeout)
36
+ try {
37
+ const controller = new AbortController();
38
+ const timer = setTimeout(() => controller.abort(), 3000);
39
+ const response = await fetch("https://registry.npmjs.org/@magi/cli/latest", {
40
+ signal: controller.signal
41
+ });
42
+ clearTimeout(timer);
43
+ if (response.ok) {
44
+ const info = await response.json();
45
+ if (info.version) {
46
+ lines.push(`Latest on npm: ${info.version}`);
47
+ if (info.version !== installedVersion) {
48
+ lines.push("");
49
+ lines.push("A newer version is available. To update:");
50
+ lines.push(" npm install -g @magi/cli@latest");
51
+ }
52
+ else {
53
+ lines.push("");
54
+ lines.push("You're on the latest version.");
55
+ }
56
+ return lines.join("\n");
57
+ }
58
+ }
59
+ }
60
+ catch {
61
+ // fall through to manual instructions
62
+ }
63
+ lines.push("Could not check the npm registry (offline or rate-limited).");
64
+ lines.push("");
65
+ lines.push("To update manually:");
66
+ lines.push(" npm install -g @magi/cli@latest");
67
+ lines.push("");
68
+ lines.push("Or rebuild from source:");
69
+ lines.push(" cd <magi-next-source> && git pull && npm install && npm run build");
70
+ return lines.join("\n");
71
+ }
72
+ };
73
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { SlashCommandInput } from "./registry.js";
2
+ export declare const command: {
3
+ name: string;
4
+ description: string;
5
+ usage: string;
6
+ group: string;
7
+ handler: (args: string[], input: SlashCommandInput) => string;
8
+ };