nikcli 0.0.6

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 (602) hide show
  1. package/.turbo/turbo-typecheck.log +1 -0
  2. package/AGENTS.md +27 -0
  3. package/Dockerfile +18 -0
  4. package/README.md +15 -0
  5. package/bin/nikcli +84 -0
  6. package/config.json +13 -0
  7. package/docs/tailscale-mobile/01-tailscale-setup.md +94 -0
  8. package/docs/tailscale-mobile/02-host-setup.md +115 -0
  9. package/docs/tailscale-mobile/03-phone-and-serve.md +134 -0
  10. package/docs/tailscale-mobile/README.md +59 -0
  11. package/examples/README.md +54 -0
  12. package/package.json +147 -0
  13. package/parsers-config.ts +253 -0
  14. package/script/build.ts +179 -0
  15. package/script/postinstall.mjs +125 -0
  16. package/script/publish-registries.ts +187 -0
  17. package/script/publish.ts +100 -0
  18. package/script/schema.ts +47 -0
  19. package/script/seed-e2e.ts +50 -0
  20. package/sequential-prancing-forest.md +373 -0
  21. package/src/acp/README.md +164 -0
  22. package/src/acp/agent.ts +1303 -0
  23. package/src/acp/session.ts +105 -0
  24. package/src/acp/types.ts +22 -0
  25. package/src/agent/agent.ts +528 -0
  26. package/src/agent/generate.txt +32 -0
  27. package/src/agent/prompt/compaction.txt +14 -0
  28. package/src/agent/prompt/explore.txt +18 -0
  29. package/src/agent/prompt/summary.txt +11 -0
  30. package/src/agent/prompt/title.txt +44 -0
  31. package/src/auth/index.ts +73 -0
  32. package/src/bun/index.ts +119 -0
  33. package/src/bun/registry.ts +54 -0
  34. package/src/bus/bus-event.ts +43 -0
  35. package/src/bus/global.ts +10 -0
  36. package/src/bus/index.ts +105 -0
  37. package/src/chatbot/handlers.ts +150 -0
  38. package/src/chatbot/index.ts +132 -0
  39. package/src/cli/bootstrap.ts +17 -0
  40. package/src/cli/cmd/acp.ts +69 -0
  41. package/src/cli/cmd/ads.ts +377 -0
  42. package/src/cli/cmd/agent.ts +259 -0
  43. package/src/cli/cmd/auth.ts +400 -0
  44. package/src/cli/cmd/chatbot.ts +420 -0
  45. package/src/cli/cmd/cmd.ts +7 -0
  46. package/src/cli/cmd/companion.ts +81 -0
  47. package/src/cli/cmd/connectors.ts +593 -0
  48. package/src/cli/cmd/debug/agent.ts +166 -0
  49. package/src/cli/cmd/debug/config.ts +16 -0
  50. package/src/cli/cmd/debug/file.ts +97 -0
  51. package/src/cli/cmd/debug/index.ts +48 -0
  52. package/src/cli/cmd/debug/lsp.ts +52 -0
  53. package/src/cli/cmd/debug/ripgrep.ts +87 -0
  54. package/src/cli/cmd/debug/scrap.ts +16 -0
  55. package/src/cli/cmd/debug/skill.ts +16 -0
  56. package/src/cli/cmd/debug/snapshot.ts +52 -0
  57. package/src/cli/cmd/export.ts +88 -0
  58. package/src/cli/cmd/generate.ts +38 -0
  59. package/src/cli/cmd/github.ts +412 -0
  60. package/src/cli/cmd/image-model.ts +128 -0
  61. package/src/cli/cmd/import.ts +201 -0
  62. package/src/cli/cmd/lovable.ts +128 -0
  63. package/src/cli/cmd/mcp.ts +738 -0
  64. package/src/cli/cmd/mobile.ts +223 -0
  65. package/src/cli/cmd/models.ts +77 -0
  66. package/src/cli/cmd/plug.ts +231 -0
  67. package/src/cli/cmd/pr.ts +104 -0
  68. package/src/cli/cmd/rag-model.ts +167 -0
  69. package/src/cli/cmd/remote.ts +416 -0
  70. package/src/cli/cmd/run.ts +589 -0
  71. package/src/cli/cmd/serve.ts +51 -0
  72. package/src/cli/cmd/session.ts +133 -0
  73. package/src/cli/cmd/speak-model.ts +204 -0
  74. package/src/cli/cmd/stats.ts +402 -0
  75. package/src/cli/cmd/tui/app.tsx +841 -0
  76. package/src/cli/cmd/tui/attach.ts +31 -0
  77. package/src/cli/cmd/tui/component/border.tsx +75 -0
  78. package/src/cli/cmd/tui/component/dialog-agent.tsx +31 -0
  79. package/src/cli/cmd/tui/component/dialog-command.tsx +172 -0
  80. package/src/cli/cmd/tui/component/dialog-config.tsx +291 -0
  81. package/src/cli/cmd/tui/component/dialog-connectors.tsx +440 -0
  82. package/src/cli/cmd/tui/component/dialog-image-model.tsx +97 -0
  83. package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
  84. package/src/cli/cmd/tui/component/dialog-model.tsx +234 -0
  85. package/src/cli/cmd/tui/component/dialog-provider.tsx +260 -0
  86. package/src/cli/cmd/tui/component/dialog-rag-model.tsx +217 -0
  87. package/src/cli/cmd/tui/component/dialog-remote.tsx +489 -0
  88. package/src/cli/cmd/tui/component/dialog-session-list.tsx +170 -0
  89. package/src/cli/cmd/tui/component/dialog-session-rename.tsx +31 -0
  90. package/src/cli/cmd/tui/component/dialog-settings/index.tsx +59 -0
  91. package/src/cli/cmd/tui/component/dialog-settings/prompt.tsx +40 -0
  92. package/src/cli/cmd/tui/component/dialog-settings/sidebar.tsx +39 -0
  93. package/src/cli/cmd/tui/component/dialog-settings/spinner.tsx +62 -0
  94. package/src/cli/cmd/tui/component/dialog-settings/ui.tsx +58 -0
  95. package/src/cli/cmd/tui/component/dialog-skills.tsx +117 -0
  96. package/src/cli/cmd/tui/component/dialog-speak-model.tsx +304 -0
  97. package/src/cli/cmd/tui/component/dialog-stash.tsx +87 -0
  98. package/src/cli/cmd/tui/component/dialog-status.tsx +165 -0
  99. package/src/cli/cmd/tui/component/dialog-tag.tsx +44 -0
  100. package/src/cli/cmd/tui/component/dialog-theme-create.tsx +717 -0
  101. package/src/cli/cmd/tui/component/dialog-theme-list.tsx +52 -0
  102. package/src/cli/cmd/tui/component/dialog-workspace-list.tsx +350 -0
  103. package/src/cli/cmd/tui/component/error-component.tsx +91 -0
  104. package/src/cli/cmd/tui/component/logo.tsx +103 -0
  105. package/src/cli/cmd/tui/component/plugin-route-missing.tsx +14 -0
  106. package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +669 -0
  107. package/src/cli/cmd/tui/component/prompt/frecency.tsx +89 -0
  108. package/src/cli/cmd/tui/component/prompt/history.tsx +108 -0
  109. package/src/cli/cmd/tui/component/prompt/index.tsx +2165 -0
  110. package/src/cli/cmd/tui/component/prompt/stash.tsx +63 -0
  111. package/src/cli/cmd/tui/component/spinner.tsx +24 -0
  112. package/src/cli/cmd/tui/component/startup-loading.tsx +63 -0
  113. package/src/cli/cmd/tui/component/table/markdown-table.tsx +267 -0
  114. package/src/cli/cmd/tui/component/table-db/db/connections.ts +75 -0
  115. package/src/cli/cmd/tui/component/table-db/db/db-connection.ts +223 -0
  116. package/src/cli/cmd/tui/component/table-db/db/db-preview.ts +202 -0
  117. package/src/cli/cmd/tui/component/table-db/db/factory.ts +77 -0
  118. package/src/cli/cmd/tui/component/table-db/db/index.ts +9 -0
  119. package/src/cli/cmd/tui/component/table-db/db/mysql-connection.ts +330 -0
  120. package/src/cli/cmd/tui/component/table-db/db/postgres-connection.ts +338 -0
  121. package/src/cli/cmd/tui/component/table-db/db/sqlite-connection.ts +302 -0
  122. package/src/cli/cmd/tui/component/table-db/db/types.ts +108 -0
  123. package/src/cli/cmd/tui/component/table-db/table/dbedit-hooks.ts +74 -0
  124. package/src/cli/cmd/tui/component/table-db/table/index.ts +15 -0
  125. package/src/cli/cmd/tui/component/table-db/table/table-events.ts +54 -0
  126. package/src/cli/cmd/tui/component/table-db/table/table-formatters.ts +191 -0
  127. package/src/cli/cmd/tui/component/table-db/table/table-hooks.ts +105 -0
  128. package/src/cli/cmd/tui/component/table-db/table/table-keyboard-handler.ts +255 -0
  129. package/src/cli/cmd/tui/component/table-db/table/table-layout-engine.ts +208 -0
  130. package/src/cli/cmd/tui/component/table-db/table/table-renderable.ts +486 -0
  131. package/src/cli/cmd/tui/component/table-db/table/table-selection-manager.ts +136 -0
  132. package/src/cli/cmd/tui/component/table-db/table/table-state.ts +198 -0
  133. package/src/cli/cmd/tui/component/table-db/table/types.ts +69 -0
  134. package/src/cli/cmd/tui/component/table-db/ui/db-visualizer.tsx +71 -0
  135. package/src/cli/cmd/tui/component/table-db/ui/index.ts +2 -0
  136. package/src/cli/cmd/tui/component/table-db/ui/table-renderer.ts +607 -0
  137. package/src/cli/cmd/tui/component/textarea-keybindings.ts +73 -0
  138. package/src/cli/cmd/tui/component/tips.tsx +195 -0
  139. package/src/cli/cmd/tui/component/todo-item.tsx +32 -0
  140. package/src/cli/cmd/tui/context/args.tsx +14 -0
  141. package/src/cli/cmd/tui/context/directory.ts +13 -0
  142. package/src/cli/cmd/tui/context/exit.tsx +24 -0
  143. package/src/cli/cmd/tui/context/helper.tsx +25 -0
  144. package/src/cli/cmd/tui/context/keybind.tsx +102 -0
  145. package/src/cli/cmd/tui/context/kv.tsx +52 -0
  146. package/src/cli/cmd/tui/context/local.tsx +458 -0
  147. package/src/cli/cmd/tui/context/plugin-keybinds.ts +41 -0
  148. package/src/cli/cmd/tui/context/prompt.tsx +18 -0
  149. package/src/cli/cmd/tui/context/route.tsx +54 -0
  150. package/src/cli/cmd/tui/context/sdk.tsx +128 -0
  151. package/src/cli/cmd/tui/context/server.tsx +8 -0
  152. package/src/cli/cmd/tui/context/sync.tsx +510 -0
  153. package/src/cli/cmd/tui/context/theme/abyss.json +233 -0
  154. package/src/cli/cmd/tui/context/theme/apple.json +235 -0
  155. package/src/cli/cmd/tui/context/theme/arctic.json +232 -0
  156. package/src/cli/cmd/tui/context/theme/aura.json +69 -0
  157. package/src/cli/cmd/tui/context/theme/ayu.json +80 -0
  158. package/src/cli/cmd/tui/context/theme/ayuai.json +229 -0
  159. package/src/cli/cmd/tui/context/theme/blood.json +229 -0
  160. package/src/cli/cmd/tui/context/theme/carbonfox.json +248 -0
  161. package/src/cli/cmd/tui/context/theme/catmoe.json +235 -0
  162. package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +233 -0
  163. package/src/cli/cmd/tui/context/theme/catppuccin-latte.json +233 -0
  164. package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +233 -0
  165. package/src/cli/cmd/tui/context/theme/catppuccin.json +259 -0
  166. package/src/cli/cmd/tui/context/theme/charcoal.json +230 -0
  167. package/src/cli/cmd/tui/context/theme/chromatic.json +235 -0
  168. package/src/cli/cmd/tui/context/theme/cobalt2.json +228 -0
  169. package/src/cli/cmd/tui/context/theme/cosmic.json +234 -0
  170. package/src/cli/cmd/tui/context/theme/cursor.json +249 -0
  171. package/src/cli/cmd/tui/context/theme/cyber.json +235 -0
  172. package/src/cli/cmd/tui/context/theme/dawnfox.json +229 -0
  173. package/src/cli/cmd/tui/context/theme/dimension.json +235 -0
  174. package/src/cli/cmd/tui/context/theme/dracula-official.json +222 -0
  175. package/src/cli/cmd/tui/context/theme/dracula.json +219 -0
  176. package/src/cli/cmd/tui/context/theme/dream.json +235 -0
  177. package/src/cli/cmd/tui/context/theme/duo.json +235 -0
  178. package/src/cli/cmd/tui/context/theme/dusk.json +235 -0
  179. package/src/cli/cmd/tui/context/theme/ebony.json +232 -0
  180. package/src/cli/cmd/tui/context/theme/equilibrium.json +232 -0
  181. package/src/cli/cmd/tui/context/theme/ethereal.json +235 -0
  182. package/src/cli/cmd/tui/context/theme/everforest.json +241 -0
  183. package/src/cli/cmd/tui/context/theme/flexoki.json +237 -0
  184. package/src/cli/cmd/tui/context/theme/fusion.json +235 -0
  185. package/src/cli/cmd/tui/context/theme/ghost.json +235 -0
  186. package/src/cli/cmd/tui/context/theme/github-dark.json +229 -0
  187. package/src/cli/cmd/tui/context/theme/github-dimmed.json +231 -0
  188. package/src/cli/cmd/tui/context/theme/github-light.json +229 -0
  189. package/src/cli/cmd/tui/context/theme/github.json +233 -0
  190. package/src/cli/cmd/tui/context/theme/glass.json +235 -0
  191. package/src/cli/cmd/tui/context/theme/gold.json +235 -0
  192. package/src/cli/cmd/tui/context/theme/gone.json +234 -0
  193. package/src/cli/cmd/tui/context/theme/greyscale.json +229 -0
  194. package/src/cli/cmd/tui/context/theme/gruvbox.json +242 -0
  195. package/src/cli/cmd/tui/context/theme/hacker.json +229 -0
  196. package/src/cli/cmd/tui/context/theme/holo.json +235 -0
  197. package/src/cli/cmd/tui/context/theme/ink.json +235 -0
  198. package/src/cli/cmd/tui/context/theme/jet.json +233 -0
  199. package/src/cli/cmd/tui/context/theme/kanagawa.json +227 -0
  200. package/src/cli/cmd/tui/context/theme/lavender.json +236 -0
  201. package/src/cli/cmd/tui/context/theme/lightph.json +235 -0
  202. package/src/cli/cmd/tui/context/theme/lucent-orng.json +237 -0
  203. package/src/cli/cmd/tui/context/theme/material-ocean.json +230 -0
  204. package/src/cli/cmd/tui/context/theme/material.json +235 -0
  205. package/src/cli/cmd/tui/context/theme/matrix.json +227 -0
  206. package/src/cli/cmd/tui/context/theme/mercury.json +245 -0
  207. package/src/cli/cmd/tui/context/theme/midnight.json +235 -0
  208. package/src/cli/cmd/tui/context/theme/modern.json +235 -0
  209. package/src/cli/cmd/tui/context/theme/monokai.json +221 -0
  210. package/src/cli/cmd/tui/context/theme/muted.json +229 -0
  211. package/src/cli/cmd/tui/context/theme/neon.json +229 -0
  212. package/src/cli/cmd/tui/context/theme/neonfusion.json +235 -0
  213. package/src/cli/cmd/tui/context/theme/neutral.json +235 -0
  214. package/src/cli/cmd/tui/context/theme/nightowl.json +221 -0
  215. package/src/cli/cmd/tui/context/theme/nikcli.json +245 -0
  216. package/src/cli/cmd/tui/context/theme/nord.json +223 -0
  217. package/src/cli/cmd/tui/context/theme/nordic.json +235 -0
  218. package/src/cli/cmd/tui/context/theme/nova.json +235 -0
  219. package/src/cli/cmd/tui/context/theme/obsidian.json +234 -0
  220. package/src/cli/cmd/tui/context/theme/one-dark.json +231 -0
  221. package/src/cli/cmd/tui/context/theme/one-pro.json +229 -0
  222. package/src/cli/cmd/tui/context/theme/onyx.json +233 -0
  223. package/src/cli/cmd/tui/context/theme/orng.json +249 -0
  224. package/src/cli/cmd/tui/context/theme/osaka-jade.json +240 -0
  225. package/src/cli/cmd/tui/context/theme/oxocarbon.json +229 -0
  226. package/src/cli/cmd/tui/context/theme/palenight.json +222 -0
  227. package/src/cli/cmd/tui/context/theme/poimandres.json +230 -0
  228. package/src/cli/cmd/tui/context/theme/prism.json +235 -0
  229. package/src/cli/cmd/tui/context/theme/radiant.json +235 -0
  230. package/src/cli/cmd/tui/context/theme/rosepine.json +234 -0
  231. package/src/cli/cmd/tui/context/theme/shadow.json +235 -0
  232. package/src/cli/cmd/tui/context/theme/silicon.json +235 -0
  233. package/src/cli/cmd/tui/context/theme/slate.json +233 -0
  234. package/src/cli/cmd/tui/context/theme/soft.json +235 -0
  235. package/src/cli/cmd/tui/context/theme/solarized.json +223 -0
  236. package/src/cli/cmd/tui/context/theme/spectrum.json +235 -0
  237. package/src/cli/cmd/tui/context/theme/starlight.json +233 -0
  238. package/src/cli/cmd/tui/context/theme/sunrise.json +235 -0
  239. package/src/cli/cmd/tui/context/theme/synthwave84.json +226 -0
  240. package/src/cli/cmd/tui/context/theme/tech.json +235 -0
  241. package/src/cli/cmd/tui/context/theme/tokyonight-storm.json +245 -0
  242. package/src/cli/cmd/tui/context/theme/tokyonight.json +243 -0
  243. package/src/cli/cmd/tui/context/theme/vapor.json +235 -0
  244. package/src/cli/cmd/tui/context/theme/vercel.json +245 -0
  245. package/src/cli/cmd/tui/context/theme/vesper.json +218 -0
  246. package/src/cli/cmd/tui/context/theme/vivid.json +232 -0
  247. package/src/cli/cmd/tui/context/theme/void.json +235 -0
  248. package/src/cli/cmd/tui/context/theme/vscode.json +235 -0
  249. package/src/cli/cmd/tui/context/theme/zenburn.json +223 -0
  250. package/src/cli/cmd/tui/context/theme/zinc.json +236 -0
  251. package/src/cli/cmd/tui/context/theme.tsx +1303 -0
  252. package/src/cli/cmd/tui/event.ts +48 -0
  253. package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +152 -0
  254. package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +50 -0
  255. package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +63 -0
  256. package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +62 -0
  257. package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +93 -0
  258. package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +66 -0
  259. package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +96 -0
  260. package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +48 -0
  261. package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +288 -0
  262. package/src/cli/cmd/tui/plugin/api.tsx +407 -0
  263. package/src/cli/cmd/tui/plugin/index.ts +3 -0
  264. package/src/cli/cmd/tui/plugin/internal.ts +25 -0
  265. package/src/cli/cmd/tui/plugin/runtime.ts +1048 -0
  266. package/src/cli/cmd/tui/plugin/slots.tsx +61 -0
  267. package/src/cli/cmd/tui/routes/home.tsx +153 -0
  268. package/src/cli/cmd/tui/routes/session/dbedit.tsx +474 -0
  269. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +65 -0
  270. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +110 -0
  271. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +105 -0
  272. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
  273. package/src/cli/cmd/tui/routes/session/footer.tsx +75 -0
  274. package/src/cli/cmd/tui/routes/session/header.tsx +177 -0
  275. package/src/cli/cmd/tui/routes/session/index.tsx +2280 -0
  276. package/src/cli/cmd/tui/routes/session/permission.tsx +540 -0
  277. package/src/cli/cmd/tui/routes/session/question.tsx +435 -0
  278. package/src/cli/cmd/tui/routes/session/sidebar.tsx +313 -0
  279. package/src/cli/cmd/tui/thread.ts +174 -0
  280. package/src/cli/cmd/tui/ui/dialog-alert.tsx +57 -0
  281. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +83 -0
  282. package/src/cli/cmd/tui/ui/dialog-export-options.tsx +204 -0
  283. package/src/cli/cmd/tui/ui/dialog-help.tsx +38 -0
  284. package/src/cli/cmd/tui/ui/dialog-prompt.tsx +102 -0
  285. package/src/cli/cmd/tui/ui/dialog-select.tsx +389 -0
  286. package/src/cli/cmd/tui/ui/dialog.tsx +180 -0
  287. package/src/cli/cmd/tui/ui/link.tsx +34 -0
  288. package/src/cli/cmd/tui/ui/spinner.ts +368 -0
  289. package/src/cli/cmd/tui/ui/toast.tsx +138 -0
  290. package/src/cli/cmd/tui/util/clipboard.ts +154 -0
  291. package/src/cli/cmd/tui/util/editor.ts +32 -0
  292. package/src/cli/cmd/tui/util/signal.ts +7 -0
  293. package/src/cli/cmd/tui/util/terminal.ts +114 -0
  294. package/src/cli/cmd/tui/util/transcript.ts +98 -0
  295. package/src/cli/cmd/tui/win32.ts +110 -0
  296. package/src/cli/cmd/tui/worker.ts +156 -0
  297. package/src/cli/cmd/uninstall.ts +357 -0
  298. package/src/cli/cmd/upgrade.ts +72 -0
  299. package/src/cli/cmd/web.ts +87 -0
  300. package/src/cli/cmd/workspace-serve.ts +16 -0
  301. package/src/cli/error.ts +57 -0
  302. package/src/cli/network.ts +55 -0
  303. package/src/cli/remote/index.ts +36 -0
  304. package/src/cli/remote/notifications.ts +104 -0
  305. package/src/cli/remote/qr-renderer.ts +86 -0
  306. package/src/cli/remote/remote-service.ts +757 -0
  307. package/src/cli/remote/session-manager.ts +284 -0
  308. package/src/cli/remote/subagent-hooks.ts +151 -0
  309. package/src/cli/remote/types.ts +121 -0
  310. package/src/cli/ui.ts +96 -0
  311. package/src/cli/upgrade.ts +25 -0
  312. package/src/command/index.ts +174 -0
  313. package/src/command/template/initialize.txt +10 -0
  314. package/src/command/template/review.txt +99 -0
  315. package/src/config/config.ts +1760 -0
  316. package/src/config/markdown.ts +88 -0
  317. package/src/config/migrate-tui-config.ts +155 -0
  318. package/src/config/paths.ts +174 -0
  319. package/src/config/tui-schema.ts +36 -0
  320. package/src/config/tui.ts +209 -0
  321. package/src/connectors/api/base.ts +75 -0
  322. package/src/connectors/api/figma.ts +103 -0
  323. package/src/connectors/api/github.ts +247 -0
  324. package/src/connectors/api/lovable.ts +126 -0
  325. package/src/connectors/api/slack.ts +137 -0
  326. package/src/connectors/auth.ts +68 -0
  327. package/src/connectors/cache.ts +119 -0
  328. package/src/connectors/credentials.ts +81 -0
  329. package/src/connectors/index.ts +202 -0
  330. package/src/connectors/registry.ts +358 -0
  331. package/src/docs/context.ts +120 -0
  332. package/src/docs/library.ts +189 -0
  333. package/src/env/index.ts +26 -0
  334. package/src/file/ignore.ts +83 -0
  335. package/src/file/index.ts +411 -0
  336. package/src/file/ripgrep.ts +402 -0
  337. package/src/file/time.ts +65 -0
  338. package/src/file/watcher.ts +127 -0
  339. package/src/flag/flag.ts +128 -0
  340. package/src/format/formatter.ts +356 -0
  341. package/src/format/index.ts +137 -0
  342. package/src/global/index.ts +57 -0
  343. package/src/id/id.ts +83 -0
  344. package/src/ide/index.ts +76 -0
  345. package/src/index.ts +184 -0
  346. package/src/installation/index.ts +246 -0
  347. package/src/lsp/client.ts +250 -0
  348. package/src/lsp/index.ts +483 -0
  349. package/src/lsp/language.ts +119 -0
  350. package/src/lsp/server.ts +2046 -0
  351. package/src/mcp/auth.ts +121 -0
  352. package/src/mcp/index.ts +860 -0
  353. package/src/mcp/oauth-callback.ts +198 -0
  354. package/src/mcp/oauth-provider.ts +148 -0
  355. package/src/mobile/auth.ts +97 -0
  356. package/src/mobile/github-repo.ts +185 -0
  357. package/src/patch/index.ts +631 -0
  358. package/src/permission/arity.ts +150 -0
  359. package/src/permission/dbedit.ts +236 -0
  360. package/src/permission/index.ts +210 -0
  361. package/src/permission/next.ts +287 -0
  362. package/src/plugin/codex.ts +493 -0
  363. package/src/plugin/copilot.ts +261 -0
  364. package/src/plugin/index.ts +714 -0
  365. package/src/plugin/install.ts +379 -0
  366. package/src/plugin/meta.ts +165 -0
  367. package/src/plugin/shared.ts +188 -0
  368. package/src/project/bootstrap.ts +35 -0
  369. package/src/project/instance.ts +84 -0
  370. package/src/project/project.ts +373 -0
  371. package/src/project/state.ts +66 -0
  372. package/src/project/vcs.ts +76 -0
  373. package/src/prompt/stash-store.ts +93 -0
  374. package/src/provider/auth.ts +147 -0
  375. package/src/provider/models-macro.ts +22 -0
  376. package/src/provider/models.ts +216 -0
  377. package/src/provider/provider.ts +1483 -0
  378. package/src/provider/sdk/openai-compatible/src/README.md +5 -0
  379. package/src/provider/sdk/openai-compatible/src/index.ts +2 -0
  380. package/src/provider/sdk/openai-compatible/src/openai-compatible-provider.ts +100 -0
  381. package/src/provider/sdk/openai-compatible/src/responses/convert-to-openai-responses-input.ts +303 -0
  382. package/src/provider/sdk/openai-compatible/src/responses/map-openai-responses-finish-reason.ts +22 -0
  383. package/src/provider/sdk/openai-compatible/src/responses/openai-config.ts +18 -0
  384. package/src/provider/sdk/openai-compatible/src/responses/openai-error.ts +22 -0
  385. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-api-types.ts +207 -0
  386. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-language-model.ts +1732 -0
  387. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-prepare-tools.ts +177 -0
  388. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-settings.ts +1 -0
  389. package/src/provider/sdk/openai-compatible/src/responses/tool/code-interpreter.ts +88 -0
  390. package/src/provider/sdk/openai-compatible/src/responses/tool/file-search.ts +128 -0
  391. package/src/provider/sdk/openai-compatible/src/responses/tool/image-generation.ts +115 -0
  392. package/src/provider/sdk/openai-compatible/src/responses/tool/local-shell.ts +65 -0
  393. package/src/provider/sdk/openai-compatible/src/responses/tool/web-search-preview.ts +104 -0
  394. package/src/provider/sdk/openai-compatible/src/responses/tool/web-search.ts +103 -0
  395. package/src/provider/transform.ts +828 -0
  396. package/src/pty/index.ts +241 -0
  397. package/src/question/index.ts +171 -0
  398. package/src/rag/chunk.ts +43 -0
  399. package/src/rag/embed.ts +179 -0
  400. package/src/rag/index.ts +376 -0
  401. package/src/rag/storage.ts +76 -0
  402. package/src/scheduler/index.ts +61 -0
  403. package/src/server/error.ts +36 -0
  404. package/src/server/event.ts +7 -0
  405. package/src/server/mdns.ts +59 -0
  406. package/src/server/routes/chatbot.ts +205 -0
  407. package/src/server/routes/companion.ts +729 -0
  408. package/src/server/routes/config.ts +92 -0
  409. package/src/server/routes/connectors.ts +121 -0
  410. package/src/server/routes/dbedit.ts +76 -0
  411. package/src/server/routes/experimental.ts +210 -0
  412. package/src/server/routes/file.ts +197 -0
  413. package/src/server/routes/global.ts +135 -0
  414. package/src/server/routes/mcp.ts +225 -0
  415. package/src/server/routes/mobile.ts +2044 -0
  416. package/src/server/routes/permission.ts +68 -0
  417. package/src/server/routes/project.ts +82 -0
  418. package/src/server/routes/provider.ts +235 -0
  419. package/src/server/routes/pty.ts +169 -0
  420. package/src/server/routes/question.ts +98 -0
  421. package/src/server/routes/session.ts +968 -0
  422. package/src/server/routes/tui.ts +379 -0
  423. package/src/server/routes/workspace.ts +104 -0
  424. package/src/server/server.ts +761 -0
  425. package/src/server/ssh.ts +207 -0
  426. package/src/session/auth.ts +402 -0
  427. package/src/session/compaction.ts +253 -0
  428. package/src/session/generate.ts +38 -0
  429. package/src/session/index.ts +598 -0
  430. package/src/session/llm.ts +273 -0
  431. package/src/session/message-v2.ts +836 -0
  432. package/src/session/message.ts +189 -0
  433. package/src/session/processor.ts +408 -0
  434. package/src/session/prompt/anthropic-20250930.txt +165 -0
  435. package/src/session/prompt/anthropic.txt +105 -0
  436. package/src/session/prompt/anthropic_spoof.txt +1 -0
  437. package/src/session/prompt/beast.txt +147 -0
  438. package/src/session/prompt/build-switch.txt +5 -0
  439. package/src/session/prompt/codex_header.txt +79 -0
  440. package/src/session/prompt/copilot-gpt-5.txt +143 -0
  441. package/src/session/prompt/gemini.txt +155 -0
  442. package/src/session/prompt/max-steps.txt +16 -0
  443. package/src/session/prompt/plan-reminder-anthropic.txt +67 -0
  444. package/src/session/prompt/plan.txt +25 -0
  445. package/src/session/prompt/qwen.txt +108 -0
  446. package/src/session/prompt.ts +1942 -0
  447. package/src/session/retry.ts +90 -0
  448. package/src/session/revert.ts +120 -0
  449. package/src/session/stats.ts +404 -0
  450. package/src/session/status.ts +84 -0
  451. package/src/session/summary.ts +184 -0
  452. package/src/session/system.ts +195 -0
  453. package/src/session/toast.tsx +105 -0
  454. package/src/session/todo.ts +258 -0
  455. package/src/session/uninstall.ts +357 -0
  456. package/src/share/share-next.ts +421 -0
  457. package/src/share/share.ts +92 -0
  458. package/src/shell/shell.ts +65 -0
  459. package/src/skill/index.ts +1 -0
  460. package/src/skill/skill.ts +232 -0
  461. package/src/snapshot/index.ts +297 -0
  462. package/src/storage/storage.ts +227 -0
  463. package/src/tool/apply_patch.ts +288 -0
  464. package/src/tool/apply_patch.txt +33 -0
  465. package/src/tool/bash.ts +252 -0
  466. package/src/tool/bash.txt +115 -0
  467. package/src/tool/batch.ts +175 -0
  468. package/src/tool/batch.txt +24 -0
  469. package/src/tool/codesearch.ts +132 -0
  470. package/src/tool/codesearch.txt +12 -0
  471. package/src/tool/context_collect.ts +152 -0
  472. package/src/tool/context_collect.txt +9 -0
  473. package/src/tool/context_diagnostics.ts +81 -0
  474. package/src/tool/context_diagnostics.txt +5 -0
  475. package/src/tool/context_related.ts +117 -0
  476. package/src/tool/context_related.txt +5 -0
  477. package/src/tool/context_search.ts +108 -0
  478. package/src/tool/context_search.txt +8 -0
  479. package/src/tool/db-diff.ts +434 -0
  480. package/src/tool/db-table.txt +15 -0
  481. package/src/tool/docs_add.ts +50 -0
  482. package/src/tool/docs_add.txt +5 -0
  483. package/src/tool/docs_context.ts +56 -0
  484. package/src/tool/docs_context.txt +4 -0
  485. package/src/tool/docs_gap_report.ts +79 -0
  486. package/src/tool/docs_gap_report.txt +7 -0
  487. package/src/tool/docs_load.ts +41 -0
  488. package/src/tool/docs_load.txt +4 -0
  489. package/src/tool/docs_request.ts +129 -0
  490. package/src/tool/docs_request.txt +7 -0
  491. package/src/tool/docs_search.ts +51 -0
  492. package/src/tool/docs_search.txt +6 -0
  493. package/src/tool/docs_unload.ts +38 -0
  494. package/src/tool/docs_unload.txt +5 -0
  495. package/src/tool/edit.ts +614 -0
  496. package/src/tool/edit.txt +10 -0
  497. package/src/tool/external-directory.ts +32 -0
  498. package/src/tool/generate_image.ts +174 -0
  499. package/src/tool/generate_image.txt +12 -0
  500. package/src/tool/glob.ts +79 -0
  501. package/src/tool/glob.txt +6 -0
  502. package/src/tool/grep.ts +153 -0
  503. package/src/tool/grep.txt +8 -0
  504. package/src/tool/invalid.ts +17 -0
  505. package/src/tool/ls.ts +116 -0
  506. package/src/tool/ls.txt +1 -0
  507. package/src/tool/lsp.ts +96 -0
  508. package/src/tool/lsp.txt +19 -0
  509. package/src/tool/memory_search.ts +141 -0
  510. package/src/tool/memory_search.txt +8 -0
  511. package/src/tool/multiedit.ts +46 -0
  512. package/src/tool/multiedit.txt +41 -0
  513. package/src/tool/plan-enter.txt +14 -0
  514. package/src/tool/plan-exit.txt +13 -0
  515. package/src/tool/plan.ts +130 -0
  516. package/src/tool/question.ts +33 -0
  517. package/src/tool/question.txt +10 -0
  518. package/src/tool/rag_index.ts +77 -0
  519. package/src/tool/rag_index.txt +10 -0
  520. package/src/tool/rag_reset.ts +26 -0
  521. package/src/tool/rag_reset.txt +4 -0
  522. package/src/tool/rag_search.ts +62 -0
  523. package/src/tool/rag_search.txt +6 -0
  524. package/src/tool/rag_status.ts +45 -0
  525. package/src/tool/rag_status.txt +4 -0
  526. package/src/tool/read.ts +203 -0
  527. package/src/tool/read.txt +12 -0
  528. package/src/tool/registry.ts +214 -0
  529. package/src/tool/skill.ts +169 -0
  530. package/src/tool/skill.txt +3 -0
  531. package/src/tool/smart_docs.ts +74 -0
  532. package/src/tool/smart_docs.txt +7 -0
  533. package/src/tool/speak/elevenlabs.ts +201 -0
  534. package/src/tool/speak/openrouter.ts +240 -0
  535. package/src/tool/speak/provider.ts +83 -0
  536. package/src/tool/speak.ts +440 -0
  537. package/src/tool/task.ts +194 -0
  538. package/src/tool/task.txt +60 -0
  539. package/src/tool/todo.ts +53 -0
  540. package/src/tool/todoread.txt +14 -0
  541. package/src/tool/todowrite.txt +167 -0
  542. package/src/tool/tool.ts +87 -0
  543. package/src/tool/tree.ts +218 -0
  544. package/src/tool/tree.txt +8 -0
  545. package/src/tool/truncation.ts +106 -0
  546. package/src/tool/use-connector.ts +47 -0
  547. package/src/tool/voice.ts +188 -0
  548. package/src/tool/webfetch.ts +205 -0
  549. package/src/tool/webfetch.txt +13 -0
  550. package/src/tool/websearch.ts +150 -0
  551. package/src/tool/websearch.txt +14 -0
  552. package/src/tool/write.ts +80 -0
  553. package/src/tool/write.txt +8 -0
  554. package/src/util/archive.ts +16 -0
  555. package/src/util/color.ts +19 -0
  556. package/src/util/context.ts +25 -0
  557. package/src/util/defer.ts +12 -0
  558. package/src/util/error.ts +77 -0
  559. package/src/util/eventloop.ts +20 -0
  560. package/src/util/filesystem.ts +125 -0
  561. package/src/util/flock.ts +329 -0
  562. package/src/util/fn.ts +11 -0
  563. package/src/util/format.ts +20 -0
  564. package/src/util/hash.ts +7 -0
  565. package/src/util/iife.ts +3 -0
  566. package/src/util/keybind.ts +103 -0
  567. package/src/util/lazy.ts +18 -0
  568. package/src/util/locale.ts +81 -0
  569. package/src/util/lock.ts +98 -0
  570. package/src/util/log.ts +180 -0
  571. package/src/util/network.ts +9 -0
  572. package/src/util/process.ts +15 -0
  573. package/src/util/queue.ts +32 -0
  574. package/src/util/record.ts +3 -0
  575. package/src/util/rpc.ts +66 -0
  576. package/src/util/scrap.ts +10 -0
  577. package/src/util/signal.ts +12 -0
  578. package/src/util/timeout.ts +14 -0
  579. package/src/util/token.ts +7 -0
  580. package/src/util/wildcard.ts +56 -0
  581. package/src/workspace/adaptors/index.ts +271 -0
  582. package/src/workspace/adaptors/types.ts +14 -0
  583. package/src/workspace/adaptors/worktree.ts +31 -0
  584. package/src/workspace/config.ts +19 -0
  585. package/src/workspace/index.ts +223 -0
  586. package/src/workspace/session-proxy-middleware.ts +97 -0
  587. package/src/workspace/sse.ts +66 -0
  588. package/src/workspace/workspace-context.ts +23 -0
  589. package/src/workspace/workspace-server/routes.ts +33 -0
  590. package/src/workspace/workspace-server/server.ts +47 -0
  591. package/src/worktree/index.ts +487 -0
  592. package/sst-env.d.ts +10 -0
  593. package/test/benchmark.test.ts +121 -0
  594. package/test/build-optimizations.test.ts +124 -0
  595. package/test/id-benchmark.test.ts +132 -0
  596. package/test/optimizations.test.ts +302 -0
  597. package/test/preload.ts +1 -0
  598. package/test/solidjs-benchmark.test.ts +262 -0
  599. package/test/solidjs-optimizations.test.ts +259 -0
  600. package/test/tui-benchmark.test.ts +230 -0
  601. package/test/wildcard-benchmark.test.ts +180 -0
  602. package/tsconfig.json +26 -0
@@ -0,0 +1,105 @@
1
+ import { RequestError, type McpServer } from "@agentclientprotocol/sdk"
2
+ import type { ACPSessionState } from "./types"
3
+ import { Log } from "@/util/log"
4
+ import type { NikcliClient } from "@nikcli-ai/sdk/v2"
5
+
6
+ const log = Log.create({ service: "acp-session-manager" })
7
+
8
+ export class ACPSessionManager {
9
+ private sessions = new Map<string, ACPSessionState>()
10
+ private sdk: NikcliClient
11
+
12
+ constructor(sdk: NikcliClient) {
13
+ this.sdk = sdk
14
+ }
15
+
16
+ tryGet(sessionId: string): ACPSessionState | undefined {
17
+ return this.sessions.get(sessionId)
18
+ }
19
+
20
+ async create(cwd: string, mcpServers: McpServer[], model?: ACPSessionState["model"]): Promise<ACPSessionState> {
21
+ const session = await this.sdk.session
22
+ .create(
23
+ {
24
+ title: `ACP Session ${crypto.randomUUID()}`,
25
+ directory: cwd,
26
+ },
27
+ { throwOnError: true },
28
+ )
29
+ .then((x) => x.data!)
30
+
31
+ const sessionId = session.id
32
+ const resolvedModel = model
33
+
34
+ const state: ACPSessionState = {
35
+ id: sessionId,
36
+ cwd,
37
+ mcpServers,
38
+ createdAt: new Date(),
39
+ model: resolvedModel,
40
+ }
41
+ log.info("creating_session", { state })
42
+
43
+ this.sessions.set(sessionId, state)
44
+ return state
45
+ }
46
+
47
+ async load(
48
+ sessionId: string,
49
+ cwd: string,
50
+ mcpServers: McpServer[],
51
+ model?: ACPSessionState["model"],
52
+ ): Promise<ACPSessionState> {
53
+ const session = await this.sdk.session
54
+ .get(
55
+ {
56
+ sessionID: sessionId,
57
+ directory: cwd,
58
+ },
59
+ { throwOnError: true },
60
+ )
61
+ .then((x) => x.data!)
62
+
63
+ const resolvedModel = model
64
+
65
+ const state: ACPSessionState = {
66
+ id: sessionId,
67
+ cwd,
68
+ mcpServers,
69
+ createdAt: new Date(session.time.created),
70
+ model: resolvedModel,
71
+ }
72
+ log.info("loading_session", { state })
73
+
74
+ this.sessions.set(sessionId, state)
75
+ return state
76
+ }
77
+
78
+ get(sessionId: string): ACPSessionState {
79
+ const session = this.sessions.get(sessionId)
80
+ if (!session) {
81
+ log.error("session not found", { sessionId })
82
+ throw RequestError.invalidParams(JSON.stringify({ error: `Session not found: ${sessionId}` }))
83
+ }
84
+ return session
85
+ }
86
+
87
+ getModel(sessionId: string) {
88
+ const session = this.get(sessionId)
89
+ return session.model
90
+ }
91
+
92
+ setModel(sessionId: string, model: ACPSessionState["model"]) {
93
+ const session = this.get(sessionId)
94
+ session.model = model
95
+ this.sessions.set(sessionId, session)
96
+ return session
97
+ }
98
+
99
+ setMode(sessionId: string, modeId: string) {
100
+ const session = this.get(sessionId)
101
+ session.modeId = modeId
102
+ this.sessions.set(sessionId, session)
103
+ return session
104
+ }
105
+ }
@@ -0,0 +1,22 @@
1
+ import type { McpServer } from "@agentclientprotocol/sdk"
2
+ import type { NikcliClient } from "@nikcli-ai/sdk/v2"
3
+
4
+ export interface ACPSessionState {
5
+ id: string
6
+ cwd: string
7
+ mcpServers: McpServer[]
8
+ createdAt: Date
9
+ model?: {
10
+ providerID: string
11
+ modelID: string
12
+ }
13
+ modeId?: string
14
+ }
15
+
16
+ export interface ACPConfig {
17
+ sdk: NikcliClient
18
+ defaultModel?: {
19
+ providerID: string
20
+ modelID: string
21
+ }
22
+ }
@@ -0,0 +1,528 @@
1
+ import { Config } from "../config/config"
2
+ import z from "zod"
3
+ import { Provider } from "../provider/provider"
4
+ import { generateObject, streamObject, type ModelMessage } from "ai"
5
+ import { SystemPrompt } from "../session/system"
6
+ import { Instance } from "../project/instance"
7
+ import { Truncate } from "../tool/truncation"
8
+ import { Auth } from "../auth"
9
+ import { ProviderTransform } from "../provider/transform"
10
+
11
+ import PROMPT_GENERATE from "./generate.txt"
12
+ import PROMPT_COMPACTION from "./prompt/compaction.txt"
13
+ import PROMPT_EXPLORE from "./prompt/explore.txt"
14
+ import PROMPT_SUMMARY from "./prompt/summary.txt"
15
+ import PROMPT_TITLE from "./prompt/title.txt"
16
+ import { PermissionNext } from "@/permission/next"
17
+ import { mergeDeep, pipe, sortBy, values } from "remeda"
18
+ import { Global } from "@/global"
19
+ import path from "path"
20
+
21
+ export namespace Agent {
22
+ export const Info = z
23
+ .object({
24
+ name: z.string(),
25
+ description: z.string().optional(),
26
+ mode: z.enum(["subagent", "primary", "all"]),
27
+ native: z.boolean().optional(),
28
+ hidden: z.boolean().optional(),
29
+ topP: z.number().optional(),
30
+ temperature: z.number().optional(),
31
+ color: z.string().optional(),
32
+ permission: PermissionNext.Ruleset,
33
+ model: z
34
+ .object({
35
+ modelID: z.string(),
36
+ providerID: z.string(),
37
+ })
38
+ .optional(),
39
+ variant: z.string().optional(),
40
+ prompt: z.string().optional(),
41
+ options: z.record(z.string(), z.any()),
42
+ steps: z.number().int().positive().optional(),
43
+ })
44
+ .meta({
45
+ ref: "Agent",
46
+ })
47
+ export type Info = z.infer<typeof Info>
48
+
49
+ export const SUBAGENT_TOOLSETS: Record<string, string[]> = {
50
+ "fast-explore": ["read", "grep", "glob", "list", "tree"],
51
+ planner: ["read", "grep", "glob", "list", "tree", "websearch", "codesearch", "webfetch"],
52
+ general: [],
53
+ explore: ["read", "grep", "glob", "list", "bash", "webfetch", "websearch", "codesearch"],
54
+ "code-reviewer": ["read", "grep", "glob", "list", "bash"],
55
+ debugger: ["read", "grep", "glob", "list", "bash", "edit"],
56
+ "test-runner": ["read", "grep", "list", "bash", "edit", "write"],
57
+ refactor: ["read", "grep", "glob", "list", "bash", "edit", "write", "apply_patch"],
58
+ }
59
+
60
+ const state = Instance.state(async () => {
61
+ const cfg = await Config.get()
62
+
63
+ const defaults = PermissionNext.fromConfig({
64
+ "*": "allow",
65
+ doom_loop: "ask",
66
+ external_directory: {
67
+ "*": "ask",
68
+ [Truncate.DIR]: "allow",
69
+ [Truncate.GLOB]: "allow",
70
+ },
71
+ question: "deny",
72
+ plan_enter: "deny",
73
+ plan_exit: "deny",
74
+ read: {
75
+ "*": "allow",
76
+ "*.env": "ask",
77
+ "*.env.*": "ask",
78
+ "*.env.example": "allow",
79
+ },
80
+ })
81
+ const user = PermissionNext.fromConfig(cfg.permission ?? {})
82
+
83
+ const result: Record<string, Info> = {
84
+ ralph: {
85
+ name: "ralph",
86
+ description:
87
+ "Autonomous loop agent that iterates on a task until complete. Best for large refactors, migrations, and multi-step tasks with clear done criteria.",
88
+ options: {},
89
+ permission: PermissionNext.merge(
90
+ defaults,
91
+ PermissionNext.fromConfig({
92
+ question: "allow",
93
+ }),
94
+ user,
95
+ ),
96
+ mode: "primary",
97
+ native: true,
98
+ color: "#FF6B35",
99
+ },
100
+ build: {
101
+ name: "build",
102
+ options: {},
103
+ permission: PermissionNext.merge(
104
+ defaults,
105
+ PermissionNext.fromConfig({
106
+ question: "allow",
107
+ plan_enter: "allow",
108
+ }),
109
+ user,
110
+ ),
111
+ mode: "primary",
112
+ native: true,
113
+ },
114
+ plan: {
115
+ name: "plan",
116
+ options: {},
117
+ permission: PermissionNext.merge(
118
+ defaults,
119
+ PermissionNext.fromConfig({
120
+ question: "allow",
121
+ plan_exit: "allow",
122
+ external_directory: {
123
+ [path.join(Global.Path.data, "plans", "*")]: "allow",
124
+ },
125
+ edit: {
126
+ "*": "deny",
127
+ [path.join(".nikcli", "plans", "*.md")]: "allow",
128
+ [path.relative(Instance.worktree, path.join(Global.Path.data, path.join("plans", "*.md")))]: "allow",
129
+ },
130
+ }),
131
+ user,
132
+ ),
133
+ mode: "primary",
134
+ native: true,
135
+ },
136
+ general: {
137
+ name: "general",
138
+ description: `General-purpose agent for researching complex questions and executing multi-step tasks. Use this agent to execute multiple units of work in parallel.`,
139
+ permission: PermissionNext.merge(
140
+ defaults,
141
+ PermissionNext.fromConfig({
142
+ todoread: "deny",
143
+ todowrite: "deny",
144
+ }),
145
+ user,
146
+ ),
147
+ options: {},
148
+ mode: "all",
149
+ native: true,
150
+ },
151
+ explore: {
152
+ name: "explore",
153
+ permission: PermissionNext.merge(
154
+ defaults,
155
+ PermissionNext.fromConfig({
156
+ "*": "deny",
157
+ grep: "allow",
158
+ glob: "allow",
159
+ list: "allow",
160
+ bash: "allow",
161
+ webfetch: "allow",
162
+ websearch: "allow",
163
+ codesearch: "allow",
164
+ read: "allow",
165
+ external_directory: {
166
+ [Truncate.DIR]: "allow",
167
+ [Truncate.GLOB]: "allow",
168
+ },
169
+ }),
170
+ user,
171
+ ),
172
+ description: `Fast agent specialized for exploring codebases.`,
173
+ prompt: PROMPT_EXPLORE,
174
+ options: {},
175
+ mode: "all",
176
+ native: true,
177
+ },
178
+ "fast-explore": {
179
+ name: "fast-explore",
180
+ description: "Fast read-only explorer for quick codebase inspection.",
181
+ prompt: `You are a fast exploration agent.
182
+
183
+ Use tools: read, grep, glob, list, tree.
184
+ Do not modify files.
185
+ Report findings with exact file paths and concise notes.`,
186
+ permission: PermissionNext.merge(
187
+ defaults,
188
+ PermissionNext.fromConfig({
189
+ "*": "deny",
190
+ read: "allow",
191
+ grep: "allow",
192
+ glob: "allow",
193
+ list: "allow",
194
+ tree: "allow",
195
+ external_directory: {
196
+ [Truncate.DIR]: "allow",
197
+ [Truncate.GLOB]: "allow",
198
+ },
199
+ }),
200
+ user,
201
+ ),
202
+ options: {},
203
+ mode: "all",
204
+ native: true,
205
+ },
206
+ planner: {
207
+ name: "planner",
208
+ description: "Planning agent for multi-step implementation strategies.",
209
+ prompt: `You are a planning agent.
210
+
211
+ Use tools: read, grep, glob, list, tree, websearch, codesearch, webfetch.
212
+ Do not modify files.
213
+ Produce a clear, step-by-step plan with file paths.`,
214
+ permission: PermissionNext.merge(
215
+ defaults,
216
+ PermissionNext.fromConfig({
217
+ "*": "deny",
218
+ read: "allow",
219
+ grep: "allow",
220
+ glob: "allow",
221
+ list: "allow",
222
+ tree: "allow",
223
+ webfetch: "allow",
224
+ websearch: "allow",
225
+ codesearch: "allow",
226
+ external_directory: {
227
+ [Truncate.DIR]: "allow",
228
+ [Truncate.GLOB]: "allow",
229
+ },
230
+ }),
231
+ user,
232
+ ),
233
+ options: {},
234
+ mode: "all",
235
+ native: true,
236
+ },
237
+ "code-reviewer": {
238
+ name: "code-reviewer",
239
+ description: "Code review agent focused on quality and safety.",
240
+ prompt: `You are a code reviewer.
241
+
242
+ Use tools: read, grep, glob, list, bash.
243
+ Review changes and report issues with file paths and fixes.`,
244
+ permission: PermissionNext.merge(
245
+ defaults,
246
+ PermissionNext.fromConfig({
247
+ "*": "deny",
248
+ read: "allow",
249
+ grep: "allow",
250
+ glob: "allow",
251
+ list: "allow",
252
+ bash: "allow",
253
+ external_directory: {
254
+ [Truncate.DIR]: "allow",
255
+ [Truncate.GLOB]: "allow",
256
+ },
257
+ }),
258
+ user,
259
+ ),
260
+ options: {},
261
+ mode: "all",
262
+ native: true,
263
+ },
264
+ debugger: {
265
+ name: "debugger",
266
+ description: "Debugging agent for failures and runtime issues.",
267
+ prompt: `You are a debugging agent.
268
+
269
+ Use tools: read, grep, glob, list, bash, edit.
270
+ Identify root cause and apply minimal fixes.`,
271
+ permission: PermissionNext.merge(
272
+ defaults,
273
+ PermissionNext.fromConfig({
274
+ "*": "deny",
275
+ read: "allow",
276
+ grep: "allow",
277
+ glob: "allow",
278
+ list: "allow",
279
+ bash: "allow",
280
+ edit: "allow",
281
+ external_directory: {
282
+ [Truncate.DIR]: "allow",
283
+ [Truncate.GLOB]: "allow",
284
+ },
285
+ }),
286
+ user,
287
+ ),
288
+ options: {},
289
+ mode: "all",
290
+ native: true,
291
+ },
292
+ "test-runner": {
293
+ name: "test-runner",
294
+ description: "Test runner for executing and analyzing tests.",
295
+ prompt: `You are a test runner agent.
296
+
297
+ Use tools: read, grep, list, bash, edit.
298
+ Run tests, analyze failures, and propose fixes.`,
299
+ permission: PermissionNext.merge(
300
+ defaults,
301
+ PermissionNext.fromConfig({
302
+ "*": "deny",
303
+ read: "allow",
304
+ grep: "allow",
305
+ list: "allow",
306
+ bash: "allow",
307
+ edit: "allow",
308
+ external_directory: {
309
+ [Truncate.DIR]: "allow",
310
+ [Truncate.GLOB]: "allow",
311
+ },
312
+ }),
313
+ user,
314
+ ),
315
+ options: {},
316
+ mode: "all",
317
+ native: true,
318
+ },
319
+ refactor: {
320
+ name: "refactor",
321
+ description: "Refactor agent for cleanups without behavior changes.",
322
+ prompt: `You are a refactor agent.
323
+
324
+ Use tools: read, grep, glob, list, bash, edit.
325
+ Apply small, safe refactors and verify results.`,
326
+ permission: PermissionNext.merge(
327
+ defaults,
328
+ PermissionNext.fromConfig({
329
+ "*": "deny",
330
+ read: "allow",
331
+ grep: "allow",
332
+ glob: "allow",
333
+ list: "allow",
334
+ bash: "allow",
335
+ edit: "allow",
336
+ external_directory: {
337
+ [Truncate.DIR]: "allow",
338
+ [Truncate.GLOB]: "allow",
339
+ },
340
+ }),
341
+ user,
342
+ ),
343
+ options: {},
344
+ mode: "all",
345
+ native: true,
346
+ },
347
+ compaction: {
348
+ name: "compaction",
349
+ mode: "primary",
350
+ native: true,
351
+ hidden: true,
352
+ prompt: PROMPT_COMPACTION,
353
+ permission: PermissionNext.merge(
354
+ defaults,
355
+ PermissionNext.fromConfig({
356
+ "*": "deny",
357
+ }),
358
+ user,
359
+ ),
360
+ options: {},
361
+ },
362
+ title: {
363
+ name: "title",
364
+ mode: "primary",
365
+ options: {},
366
+ native: true,
367
+ hidden: true,
368
+ temperature: 0.5,
369
+ permission: PermissionNext.merge(
370
+ defaults,
371
+ PermissionNext.fromConfig({
372
+ "*": "deny",
373
+ }),
374
+ user,
375
+ ),
376
+ prompt: PROMPT_TITLE,
377
+ },
378
+ summary: {
379
+ name: "summary",
380
+ mode: "primary",
381
+ options: {},
382
+ native: true,
383
+ hidden: true,
384
+ permission: PermissionNext.merge(
385
+ defaults,
386
+ PermissionNext.fromConfig({
387
+ "*": "deny",
388
+ }),
389
+ user,
390
+ ),
391
+ prompt: PROMPT_SUMMARY,
392
+ },
393
+ }
394
+
395
+ for (const [key, value] of Object.entries(cfg.agent ?? {})) {
396
+ if (value.disable) {
397
+ delete result[key]
398
+ continue
399
+ }
400
+ let item = result[key]
401
+ if (!item)
402
+ item = result[key] = {
403
+ name: key,
404
+ mode: "all",
405
+ permission: PermissionNext.merge(defaults, user),
406
+ options: {},
407
+ native: false,
408
+ }
409
+ if (value.model) item.model = Provider.parseModel(value.model)
410
+ item.variant = value.variant ?? item.variant
411
+ item.prompt = value.prompt ?? item.prompt
412
+ item.description = value.description ?? item.description
413
+ item.temperature = value.temperature ?? item.temperature
414
+ item.topP = value.top_p ?? item.topP
415
+ item.mode = value.mode ?? item.mode
416
+ item.color = value.color ?? item.color
417
+ item.hidden = value.hidden ?? item.hidden
418
+ item.name = value.name ?? item.name
419
+ item.steps = value.steps ?? item.steps
420
+ item.options = mergeDeep(item.options, value.options ?? {})
421
+ item.permission = PermissionNext.merge(item.permission, PermissionNext.fromConfig(value.permission ?? {}))
422
+ }
423
+
424
+ for (const name in result) {
425
+ const agent = result[name]
426
+ const explicit = agent.permission.some((r) => {
427
+ if (r.permission !== "external_directory") return false
428
+ if (r.action !== "deny") return false
429
+ return r.pattern === Truncate.DIR || r.pattern === Truncate.GLOB
430
+ })
431
+ if (explicit) continue
432
+
433
+ result[name].permission = PermissionNext.merge(
434
+ result[name].permission,
435
+ PermissionNext.fromConfig({ external_directory: { [Truncate.DIR]: "allow", [Truncate.GLOB]: "allow" } }),
436
+ )
437
+ }
438
+
439
+ return result
440
+ })
441
+
442
+ export async function get(agent: string) {
443
+ return state().then((x) => x[agent])
444
+ }
445
+
446
+ export async function list() {
447
+ const cfg = await Config.get()
448
+ return pipe(
449
+ await state(),
450
+ values(),
451
+ sortBy([(x) => (cfg.default_agent ? x.name === cfg.default_agent : x.name === "build"), "desc"]),
452
+ )
453
+ }
454
+
455
+ export async function defaultAgent() {
456
+ const cfg = await Config.get()
457
+ const agents = await state()
458
+
459
+ if (cfg.default_agent) {
460
+ const agent = agents[cfg.default_agent]
461
+ if (!agent) throw new Error(`default agent "${cfg.default_agent}" not found`)
462
+ if (agent.mode === "subagent") throw new Error(`default agent "${cfg.default_agent}" is a subagent`)
463
+ if (agent.hidden === true) throw new Error(`default agent "${cfg.default_agent}" is hidden`)
464
+ return agent.name
465
+ }
466
+
467
+ const primaryVisible = Object.values(agents).find((a) => a.mode !== "subagent" && a.hidden !== true)
468
+ if (!primaryVisible) throw new Error("no primary visible agent found")
469
+ return primaryVisible.name
470
+ }
471
+
472
+ export async function generate(input: { description: string; model?: { providerID: string; modelID: string } }) {
473
+ const cfg = await Config.get()
474
+ const defaultModel = input.model ?? (await Provider.defaultModel())
475
+ const model = await Provider.getModel(defaultModel.providerID, defaultModel.modelID)
476
+ const language = await Provider.getLanguage(model)
477
+
478
+ const system = SystemPrompt.header(defaultModel.providerID)
479
+ system.push(PROMPT_GENERATE)
480
+ const existing = await list()
481
+
482
+ const params = {
483
+ experimental_telemetry: {
484
+ isEnabled: cfg.experimental?.openTelemetry,
485
+ metadata: {
486
+ userId: cfg.username ?? "unknown",
487
+ },
488
+ },
489
+ temperature: 0.3,
490
+ messages: [
491
+ ...system.map(
492
+ (item): ModelMessage => ({
493
+ role: "system",
494
+ content: item,
495
+ }),
496
+ ),
497
+ {
498
+ role: "user",
499
+ content: `Create an agent configuration based on this request: \"${input.description}\".\n\nIMPORTANT: The following identifiers already exist and must NOT be used: ${existing.map((i) => i.name).join(", ")}\n Return ONLY the JSON object, no other text, do not wrap in backticks`,
500
+ },
501
+ ],
502
+ model: language,
503
+ schema: z.object({
504
+ identifier: z.string(),
505
+ whenToUse: z.string(),
506
+ systemPrompt: z.string(),
507
+ }),
508
+ } satisfies Parameters<typeof generateObject>[0]
509
+
510
+ if (defaultModel.providerID === "openai" && (await Auth.get(defaultModel.providerID))?.type === "oauth") {
511
+ const result = streamObject({
512
+ ...params,
513
+ providerOptions: ProviderTransform.providerOptions(model, {
514
+ instructions: SystemPrompt.instructions(),
515
+ store: false,
516
+ }),
517
+ onError: () => {},
518
+ })
519
+ for await (const part of result.fullStream) {
520
+ if (part.type === "error") throw part.error
521
+ }
522
+ return result.object
523
+ }
524
+
525
+ const result = await generateObject(params)
526
+ return result.object
527
+ }
528
+ }
@@ -0,0 +1,32 @@
1
+ You are an elite AI agent architect specializing in crafting high-performance agent configurations. Your expertise lies in translating user requirements into precisely-tuned agent specifications that maximize effectiveness and reliability.
2
+
3
+ When a user describes what they want an agent to do, you will:
4
+
5
+ 1. **Extract Core Intent**: Identify the fundamental purpose, key responsibilities, and success criteria for the agent. Look for both explicit requirements and implicit needs.
6
+
7
+ 2. **Design Expert Persona**: Create a compelling expert identity that embodies deep domain knowledge relevant to the task.
8
+
9
+ 3. **Architect Comprehensive Instructions**: Develop a system prompt that:
10
+ - Establishes clear behavioral boundaries and operational parameters
11
+ - Provides specific methodologies and best practices for task execution
12
+ - Anticipates edge cases and provides guidance for handling them
13
+ - Defines output format expectations when relevant
14
+
15
+ 4. **Optimize for Performance**: Include:
16
+ - Decision-making frameworks appropriate to the domain
17
+ - Quality control mechanisms and self-verification steps
18
+ - Efficient workflow patterns
19
+
20
+ 5. **Create Identifier**: Design a concise, descriptive identifier that:
21
+ - Uses lowercase letters, numbers, and hyphens only
22
+ - Is typically 2-4 words joined by hyphens
23
+ - Clearly indicates the agent's primary function
24
+
25
+ Your output must be a valid JSON object with exactly these fields:
26
+ {
27
+ "identifier": "A unique, descriptive identifier using lowercase letters, numbers, and hyphens",
28
+ "whenToUse": "A precise, actionable description starting with 'Use this agent when...'",
29
+ "systemPrompt": "The complete system prompt that will govern the agent's behavior"
30
+ }
31
+
32
+ Remember: The agents you create should be autonomous experts capable of handling their designated tasks with minimal additional guidance.
@@ -0,0 +1,14 @@
1
+ You are a helpful AI assistant tasked with summarizing conversations.
2
+
3
+ When asked to summarize, provide a detailed but concise summary of the conversation.
4
+ Focus on information that would be helpful for continuing the conversation, including:
5
+ - What was done
6
+ - What is currently being worked on
7
+ - Which files are being modified
8
+ - What needs to be done next
9
+ - Key user requests, constraints, or preferences that should persist
10
+ - Important technical decisions and why they were made
11
+
12
+ Your summary should be comprehensive enough to provide context but concise enough to be quickly understood.
13
+
14
+ Do not respond to any questions in the conversation, only output the summary.