@agentuity/cli 1.0.1 → 1.0.3

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 (331) hide show
  1. package/AGENTS.md +40 -24
  2. package/bin/cli.ts +47 -22
  3. package/dist/agent-detection.d.ts +23 -38
  4. package/dist/agent-detection.d.ts.map +1 -1
  5. package/dist/agent-detection.js +412 -153
  6. package/dist/agent-detection.js.map +1 -1
  7. package/dist/ai-help.d.ts +23 -0
  8. package/dist/ai-help.d.ts.map +1 -0
  9. package/dist/ai-help.js +328 -0
  10. package/dist/ai-help.js.map +1 -0
  11. package/dist/api.js +1 -1
  12. package/dist/api.js.map +1 -1
  13. package/dist/auth.d.ts +10 -1
  14. package/dist/auth.d.ts.map +1 -1
  15. package/dist/auth.js +176 -16
  16. package/dist/auth.js.map +1 -1
  17. package/dist/banner.d.ts.map +1 -1
  18. package/dist/banner.js +5 -0
  19. package/dist/banner.js.map +1 -1
  20. package/dist/cache/agent-intro.d.ts +13 -0
  21. package/dist/cache/agent-intro.d.ts.map +1 -0
  22. package/dist/cache/agent-intro.js +54 -0
  23. package/dist/cache/agent-intro.js.map +1 -0
  24. package/dist/cache/index.d.ts +1 -0
  25. package/dist/cache/index.d.ts.map +1 -1
  26. package/dist/cache/index.js +1 -0
  27. package/dist/cache/index.js.map +1 -1
  28. package/dist/cache/resource-region.d.ts +3 -2
  29. package/dist/cache/resource-region.d.ts.map +1 -1
  30. package/dist/cache/resource-region.js +13 -4
  31. package/dist/cache/resource-region.js.map +1 -1
  32. package/dist/catalyst.d.ts +7 -0
  33. package/dist/catalyst.d.ts.map +1 -0
  34. package/dist/catalyst.js +15 -0
  35. package/dist/catalyst.js.map +1 -0
  36. package/dist/cli.d.ts +12 -1
  37. package/dist/cli.d.ts.map +1 -1
  38. package/dist/cli.js +290 -67
  39. package/dist/cli.js.map +1 -1
  40. package/dist/cmd/ai/detect.d.ts +3 -0
  41. package/dist/cmd/ai/detect.d.ts.map +1 -0
  42. package/dist/cmd/ai/detect.js +49 -0
  43. package/dist/cmd/ai/detect.js.map +1 -0
  44. package/dist/cmd/ai/index.d.ts.map +1 -1
  45. package/dist/cmd/ai/index.js +18 -1
  46. package/dist/cmd/ai/index.js.map +1 -1
  47. package/dist/cmd/ai/intro.d.ts +7 -0
  48. package/dist/cmd/ai/intro.d.ts.map +1 -0
  49. package/dist/cmd/ai/intro.js +141 -0
  50. package/dist/cmd/ai/intro.js.map +1 -0
  51. package/dist/cmd/ai/opencode/run.d.ts.map +1 -1
  52. package/dist/cmd/ai/opencode/run.js +5 -0
  53. package/dist/cmd/ai/opencode/run.js.map +1 -1
  54. package/dist/cmd/build/ast.d.ts.map +1 -1
  55. package/dist/cmd/build/ast.js +79 -0
  56. package/dist/cmd/build/ast.js.map +1 -1
  57. package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
  58. package/dist/cmd/build/vite/bun-dev-server.js +2 -0
  59. package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
  60. package/dist/cmd/build/vite/docs-generator.d.ts.map +1 -1
  61. package/dist/cmd/build/vite/docs-generator.js +15 -1
  62. package/dist/cmd/build/vite/docs-generator.js.map +1 -1
  63. package/dist/cmd/build/vite/env-types-generator.d.ts +26 -0
  64. package/dist/cmd/build/vite/env-types-generator.d.ts.map +1 -0
  65. package/dist/cmd/build/vite/env-types-generator.js +110 -0
  66. package/dist/cmd/build/vite/env-types-generator.js.map +1 -0
  67. package/dist/cmd/build/vite/index.d.ts +2 -0
  68. package/dist/cmd/build/vite/index.d.ts.map +1 -1
  69. package/dist/cmd/build/vite/index.js +12 -1
  70. package/dist/cmd/build/vite/index.js.map +1 -1
  71. package/dist/cmd/build/vite/public-asset-path-plugin.d.ts.map +1 -1
  72. package/dist/cmd/build/vite/public-asset-path-plugin.js.map +1 -1
  73. package/dist/cmd/build/vite/vite-builder.d.ts +2 -0
  74. package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
  75. package/dist/cmd/build/vite/vite-builder.js +10 -1
  76. package/dist/cmd/build/vite/vite-builder.js.map +1 -1
  77. package/dist/cmd/cloud/db/create.js.map +1 -1
  78. package/dist/cmd/cloud/db/delete.js.map +1 -1
  79. package/dist/cmd/cloud/db/get.d.ts.map +1 -1
  80. package/dist/cmd/cloud/db/get.js +27 -12
  81. package/dist/cmd/cloud/db/get.js.map +1 -1
  82. package/dist/cmd/cloud/deploy-fork.d.ts.map +1 -1
  83. package/dist/cmd/cloud/deploy-fork.js +2 -0
  84. package/dist/cmd/cloud/deploy-fork.js.map +1 -1
  85. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  86. package/dist/cmd/cloud/deploy.js +17 -0
  87. package/dist/cmd/cloud/deploy.js.map +1 -1
  88. package/dist/cmd/cloud/env/import.js.map +1 -1
  89. package/dist/cmd/cloud/env/list.js.map +1 -1
  90. package/dist/cmd/cloud/env/push.js.map +1 -1
  91. package/dist/cmd/cloud/keyvalue/util.d.ts.map +1 -1
  92. package/dist/cmd/cloud/keyvalue/util.js +3 -3
  93. package/dist/cmd/cloud/keyvalue/util.js.map +1 -1
  94. package/dist/cmd/cloud/machine/list.js +3 -3
  95. package/dist/cmd/cloud/machine/list.js.map +1 -1
  96. package/dist/cmd/cloud/region/index.js.map +1 -1
  97. package/dist/cmd/cloud/region-lookup.d.ts +7 -4
  98. package/dist/cmd/cloud/region-lookup.d.ts.map +1 -1
  99. package/dist/cmd/cloud/region-lookup.js +59 -14
  100. package/dist/cmd/cloud/region-lookup.js.map +1 -1
  101. package/dist/cmd/cloud/sandbox/cp.d.ts.map +1 -1
  102. package/dist/cmd/cloud/sandbox/cp.js +7 -5
  103. package/dist/cmd/cloud/sandbox/cp.js.map +1 -1
  104. package/dist/cmd/cloud/sandbox/create.js +2 -2
  105. package/dist/cmd/cloud/sandbox/create.js.map +1 -1
  106. package/dist/cmd/cloud/sandbox/delete.d.ts.map +1 -1
  107. package/dist/cmd/cloud/sandbox/delete.js +8 -7
  108. package/dist/cmd/cloud/sandbox/delete.js.map +1 -1
  109. package/dist/cmd/cloud/sandbox/download.d.ts.map +1 -1
  110. package/dist/cmd/cloud/sandbox/download.js +7 -5
  111. package/dist/cmd/cloud/sandbox/download.js.map +1 -1
  112. package/dist/cmd/cloud/sandbox/env.d.ts.map +1 -1
  113. package/dist/cmd/cloud/sandbox/env.js +7 -5
  114. package/dist/cmd/cloud/sandbox/env.js.map +1 -1
  115. package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -1
  116. package/dist/cmd/cloud/sandbox/exec.js +7 -5
  117. package/dist/cmd/cloud/sandbox/exec.js.map +1 -1
  118. package/dist/cmd/cloud/sandbox/get.d.ts.map +1 -1
  119. package/dist/cmd/cloud/sandbox/get.js +12 -7
  120. package/dist/cmd/cloud/sandbox/get.js.map +1 -1
  121. package/dist/cmd/cloud/sandbox/list.d.ts.map +1 -1
  122. package/dist/cmd/cloud/sandbox/list.js +40 -63
  123. package/dist/cmd/cloud/sandbox/list.js.map +1 -1
  124. package/dist/cmd/cloud/sandbox/ls.d.ts.map +1 -1
  125. package/dist/cmd/cloud/sandbox/ls.js +7 -5
  126. package/dist/cmd/cloud/sandbox/ls.js.map +1 -1
  127. package/dist/cmd/cloud/sandbox/mkdir.d.ts.map +1 -1
  128. package/dist/cmd/cloud/sandbox/mkdir.js +7 -5
  129. package/dist/cmd/cloud/sandbox/mkdir.js.map +1 -1
  130. package/dist/cmd/cloud/sandbox/rm.d.ts.map +1 -1
  131. package/dist/cmd/cloud/sandbox/rm.js +7 -5
  132. package/dist/cmd/cloud/sandbox/rm.js.map +1 -1
  133. package/dist/cmd/cloud/sandbox/rmdir.d.ts.map +1 -1
  134. package/dist/cmd/cloud/sandbox/rmdir.js +7 -5
  135. package/dist/cmd/cloud/sandbox/rmdir.js.map +1 -1
  136. package/dist/cmd/cloud/sandbox/run.js +1 -1
  137. package/dist/cmd/cloud/sandbox/run.js.map +1 -1
  138. package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
  139. package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
  140. package/dist/cmd/cloud/sandbox/upload.d.ts.map +1 -1
  141. package/dist/cmd/cloud/sandbox/upload.js +7 -5
  142. package/dist/cmd/cloud/sandbox/upload.js.map +1 -1
  143. package/dist/cmd/cloud/sandbox/util.d.ts +2 -2
  144. package/dist/cmd/cloud/sandbox/util.d.ts.map +1 -1
  145. package/dist/cmd/cloud/sandbox/util.js +14 -13
  146. package/dist/cmd/cloud/sandbox/util.js.map +1 -1
  147. package/dist/cmd/cloud/ssh.d.ts.map +1 -1
  148. package/dist/cmd/cloud/ssh.js +3 -3
  149. package/dist/cmd/cloud/ssh.js.map +1 -1
  150. package/dist/cmd/cloud/storage/create.js.map +1 -1
  151. package/dist/cmd/cloud/storage/delete.js.map +1 -1
  152. package/dist/cmd/cloud/storage/get.d.ts.map +1 -1
  153. package/dist/cmd/cloud/storage/get.js +5 -11
  154. package/dist/cmd/cloud/storage/get.js.map +1 -1
  155. package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
  156. package/dist/cmd/cloud/storage/list.js +6 -6
  157. package/dist/cmd/cloud/storage/list.js.map +1 -1
  158. package/dist/cmd/cloud/stream/create.d.ts.map +1 -1
  159. package/dist/cmd/cloud/stream/create.js +7 -4
  160. package/dist/cmd/cloud/stream/create.js.map +1 -1
  161. package/dist/cmd/cloud/stream/delete.d.ts.map +1 -1
  162. package/dist/cmd/cloud/stream/delete.js +25 -4
  163. package/dist/cmd/cloud/stream/delete.js.map +1 -1
  164. package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
  165. package/dist/cmd/cloud/stream/get.js +91 -62
  166. package/dist/cmd/cloud/stream/get.js.map +1 -1
  167. package/dist/cmd/cloud/stream/list.d.ts.map +1 -1
  168. package/dist/cmd/cloud/stream/list.js +66 -38
  169. package/dist/cmd/cloud/stream/list.js.map +1 -1
  170. package/dist/cmd/cloud/stream/util.d.ts +20 -0
  171. package/dist/cmd/cloud/stream/util.d.ts.map +1 -1
  172. package/dist/cmd/cloud/stream/util.js +27 -3
  173. package/dist/cmd/cloud/stream/util.js.map +1 -1
  174. package/dist/cmd/cloud/vector/util.d.ts.map +1 -1
  175. package/dist/cmd/cloud/vector/util.js +3 -3
  176. package/dist/cmd/cloud/vector/util.js.map +1 -1
  177. package/dist/cmd/dev/index.js.map +1 -1
  178. package/dist/cmd/git/account/add.js.map +1 -1
  179. package/dist/cmd/git/list.js.map +1 -1
  180. package/dist/cmd/project/add/database.d.ts +2 -0
  181. package/dist/cmd/project/add/database.d.ts.map +1 -0
  182. package/dist/cmd/project/add/database.js +123 -0
  183. package/dist/cmd/project/add/database.js.map +1 -0
  184. package/dist/cmd/project/add/domain.d.ts +2 -0
  185. package/dist/cmd/project/add/domain.d.ts.map +1 -0
  186. package/dist/cmd/project/add/domain.js +152 -0
  187. package/dist/cmd/project/add/domain.js.map +1 -0
  188. package/dist/cmd/project/add/index.d.ts +2 -0
  189. package/dist/cmd/project/add/index.d.ts.map +1 -0
  190. package/dist/cmd/project/add/index.js +35 -0
  191. package/dist/cmd/project/add/index.js.map +1 -0
  192. package/dist/cmd/project/add/storage.d.ts +2 -0
  193. package/dist/cmd/project/add/storage.d.ts.map +1 -0
  194. package/dist/cmd/project/add/storage.js +123 -0
  195. package/dist/cmd/project/add/storage.js.map +1 -0
  196. package/dist/cmd/project/auth/init.js.map +1 -1
  197. package/dist/cmd/project/index.d.ts.map +1 -1
  198. package/dist/cmd/project/index.js +7 -0
  199. package/dist/cmd/project/index.js.map +1 -1
  200. package/dist/cmd/project/reconcile.d.ts.map +1 -1
  201. package/dist/cmd/project/reconcile.js +32 -0
  202. package/dist/cmd/project/reconcile.js.map +1 -1
  203. package/dist/cmd/support/report.js.map +1 -1
  204. package/dist/cmd/support/system.js +2 -2
  205. package/dist/cmd/support/system.js.map +1 -1
  206. package/dist/config.d.ts +6 -3
  207. package/dist/config.d.ts.map +1 -1
  208. package/dist/config.js +31 -7
  209. package/dist/config.js.map +1 -1
  210. package/dist/errors.d.ts +2 -1
  211. package/dist/errors.d.ts.map +1 -1
  212. package/dist/errors.js +5 -0
  213. package/dist/errors.js.map +1 -1
  214. package/dist/index.d.ts +4 -1
  215. package/dist/index.d.ts.map +1 -1
  216. package/dist/index.js +3 -0
  217. package/dist/index.js.map +1 -1
  218. package/dist/repl.js +2 -1
  219. package/dist/repl.js.map +1 -1
  220. package/dist/tui/box.d.ts +3 -1
  221. package/dist/tui/box.d.ts.map +1 -1
  222. package/dist/tui/box.js +22 -7
  223. package/dist/tui/box.js.map +1 -1
  224. package/dist/tui/colors.d.ts +0 -3
  225. package/dist/tui/colors.d.ts.map +1 -1
  226. package/dist/tui/colors.js +76 -23
  227. package/dist/tui/colors.js.map +1 -1
  228. package/dist/tui/prompt.d.ts +2 -0
  229. package/dist/tui/prompt.d.ts.map +1 -1
  230. package/dist/tui/prompt.js +44 -3
  231. package/dist/tui/prompt.js.map +1 -1
  232. package/dist/tui/symbols.d.ts +0 -4
  233. package/dist/tui/symbols.d.ts.map +1 -1
  234. package/dist/tui/symbols.js +5 -0
  235. package/dist/tui/symbols.js.map +1 -1
  236. package/dist/tui.d.ts +8 -0
  237. package/dist/tui.d.ts.map +1 -1
  238. package/dist/tui.js +54 -9
  239. package/dist/tui.js.map +1 -1
  240. package/dist/types.d.ts +37 -2
  241. package/dist/types.d.ts.map +1 -1
  242. package/dist/types.js +1 -0
  243. package/dist/types.js.map +1 -1
  244. package/dist/version-check.d.ts.map +1 -1
  245. package/dist/version-check.js +5 -0
  246. package/dist/version-check.js.map +1 -1
  247. package/package.json +6 -6
  248. package/src/agent-detection.ts +457 -160
  249. package/src/ai-help.ts +393 -0
  250. package/src/api.ts +1 -1
  251. package/src/auth.ts +226 -17
  252. package/src/banner.ts +5 -0
  253. package/src/cache/agent-intro.ts +62 -0
  254. package/src/cache/index.ts +2 -0
  255. package/src/cache/resource-region.ts +28 -7
  256. package/src/catalyst.ts +16 -0
  257. package/src/cli.ts +375 -93
  258. package/src/cmd/ai/detect.ts +54 -0
  259. package/src/cmd/ai/index.ts +18 -1
  260. package/src/cmd/ai/intro.ts +154 -0
  261. package/src/cmd/ai/opencode/run.ts +5 -0
  262. package/src/cmd/build/ast.ts +97 -0
  263. package/src/cmd/build/vite/bun-dev-server.ts +2 -0
  264. package/src/cmd/build/vite/docs-generator.ts +15 -1
  265. package/src/cmd/build/vite/env-types-generator.ts +145 -0
  266. package/src/cmd/build/vite/index.ts +15 -0
  267. package/src/cmd/build/vite/public-asset-path-plugin.ts +8 -2
  268. package/src/cmd/build/vite/vite-builder.ts +31 -11
  269. package/src/cmd/cloud/db/create.ts +16 -16
  270. package/src/cmd/cloud/db/delete.ts +19 -19
  271. package/src/cmd/cloud/db/get.ts +32 -17
  272. package/src/cmd/cloud/deploy-fork.ts +2 -0
  273. package/src/cmd/cloud/deploy.ts +17 -0
  274. package/src/cmd/cloud/env/import.ts +6 -6
  275. package/src/cmd/cloud/env/list.ts +11 -11
  276. package/src/cmd/cloud/env/push.ts +6 -6
  277. package/src/cmd/cloud/keyvalue/util.ts +3 -3
  278. package/src/cmd/cloud/machine/list.ts +3 -3
  279. package/src/cmd/cloud/region/index.ts +3 -3
  280. package/src/cmd/cloud/region-lookup.ts +82 -22
  281. package/src/cmd/cloud/sandbox/cp.ts +9 -4
  282. package/src/cmd/cloud/sandbox/create.ts +2 -2
  283. package/src/cmd/cloud/sandbox/delete.ts +10 -7
  284. package/src/cmd/cloud/sandbox/download.ts +8 -5
  285. package/src/cmd/cloud/sandbox/env.ts +8 -5
  286. package/src/cmd/cloud/sandbox/exec.ts +10 -5
  287. package/src/cmd/cloud/sandbox/get.ts +13 -7
  288. package/src/cmd/cloud/sandbox/list.ts +47 -73
  289. package/src/cmd/cloud/sandbox/ls.ts +9 -5
  290. package/src/cmd/cloud/sandbox/mkdir.ts +9 -5
  291. package/src/cmd/cloud/sandbox/rm.ts +9 -5
  292. package/src/cmd/cloud/sandbox/rmdir.ts +9 -5
  293. package/src/cmd/cloud/sandbox/run.ts +1 -1
  294. package/src/cmd/cloud/sandbox/snapshot/build.ts +31 -31
  295. package/src/cmd/cloud/sandbox/snapshot/get.ts +17 -17
  296. package/src/cmd/cloud/sandbox/upload.ts +8 -5
  297. package/src/cmd/cloud/sandbox/util.ts +15 -14
  298. package/src/cmd/cloud/ssh.ts +2 -4
  299. package/src/cmd/cloud/storage/create.ts +16 -16
  300. package/src/cmd/cloud/storage/delete.ts +19 -19
  301. package/src/cmd/cloud/storage/get.ts +5 -16
  302. package/src/cmd/cloud/storage/list.ts +12 -6
  303. package/src/cmd/cloud/stream/create.ts +8 -4
  304. package/src/cmd/cloud/stream/delete.ts +28 -4
  305. package/src/cmd/cloud/stream/get.ts +102 -64
  306. package/src/cmd/cloud/stream/list.ts +76 -44
  307. package/src/cmd/cloud/stream/util.ts +39 -3
  308. package/src/cmd/cloud/vector/util.ts +3 -3
  309. package/src/cmd/dev/index.ts +4 -4
  310. package/src/cmd/git/account/add.ts +5 -5
  311. package/src/cmd/git/list.ts +7 -7
  312. package/src/cmd/project/add/database.ts +145 -0
  313. package/src/cmd/project/add/domain.ts +181 -0
  314. package/src/cmd/project/add/index.ts +35 -0
  315. package/src/cmd/project/add/storage.ts +147 -0
  316. package/src/cmd/project/auth/init.ts +6 -6
  317. package/src/cmd/project/index.ts +7 -0
  318. package/src/cmd/project/reconcile.ts +40 -0
  319. package/src/cmd/support/report.ts +5 -5
  320. package/src/cmd/support/system.ts +2 -2
  321. package/src/config.ts +40 -12
  322. package/src/errors.ts +7 -0
  323. package/src/index.ts +11 -0
  324. package/src/repl.ts +4 -1
  325. package/src/tui/box.ts +24 -9
  326. package/src/tui/colors.ts +83 -26
  327. package/src/tui/prompt.ts +55 -3
  328. package/src/tui/symbols.ts +6 -0
  329. package/src/tui.ts +55 -9
  330. package/src/types.ts +46 -2
  331. package/src/version-check.ts +6 -0
package/AGENTS.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Package Overview
4
4
 
5
- Bun-native CLI framework for Agentuity applications. Provides command structure, auto-discovery, configuration management, and type-safe command options.
5
+ Bun-native CLI framework for Agentuity applications. Provides command structure, auto-discovery, configuration management, TUI helpers, and type-safe command options.
6
6
 
7
7
  ## Commands
8
8
 
@@ -22,45 +22,61 @@ Bun-native CLI framework for Agentuity applications. Provides command structure,
22
22
 
23
23
  - **Command structure**: Each command is a directory in `src/cmd/` with `index.ts`
24
24
  - **Type safety**: Always define interfaces for command options (never `any`)
25
- - **TUI output**: Use `tui.*` helpers for formatted output (see `src/tui.md`)
25
+ - **TUI output**: Use `tui.*` helpers for formatted output (header, info, success, warning, error, table, progress)
26
26
  - **Logging**: Use `ctx.logger`; `logger.fatal()` logs and exits with code 1
27
27
  - **Bun APIs**: Use `Bun.file(f).exists()` not `existsSync(f)`
28
+ - **JSON mode**: Always check `isJSONMode()` for machine-readable output
29
+ - **Auth**: Use `requireAuth(ctx)` or `optionalAuth(ctx)` for authenticated commands
28
30
 
29
- ## Creating Commands
31
+ ## Key Patterns
32
+
33
+ ### Creating Commands
30
34
 
31
35
  ```typescript
32
36
  // src/cmd/deploy/index.ts
33
- import type { CommandDefinition, CommandContext } from '../../types';
34
- import { Command } from 'commander';
35
-
36
- interface DeployOptions {
37
- force: boolean;
38
- dryRun: boolean;
39
- }
37
+ import { z } from 'zod';
38
+ import { createCommand, type CommandContext } from '@agentuity/cli';
40
39
 
41
- export const deployCommand: CommandDefinition = {
40
+ export default createCommand({
42
41
  name: 'deploy',
43
42
  description: 'Deploy to an environment',
44
- register(program: Command, ctx: CommandContext) {
45
- program
46
- .command('deploy <environment>')
47
- .option('-f, --force', 'Force deployment', false)
48
- .option('--dry-run', 'Dry run mode', false)
49
- .action(async (environment: string, options: DeployOptions) => {
50
- ctx.logger.info(`Deploying to: ${environment}`);
51
- });
43
+ schema: {
44
+ options: z.object({
45
+ force: z.boolean().optional().describe('Force deployment'),
46
+ dryRun: z.boolean().optional().describe('Dry run mode'),
47
+ }),
52
48
  },
53
- };
49
+ async handler(ctx: CommandContext) {
50
+ const { opts, logger } = ctx;
51
+ logger.info(`Deploying with force=${opts.force}, dryRun=${opts.dryRun}`);
52
+ },
53
+ });
54
+ ```
54
55
 
55
- export default deployCommand;
56
+ ### Output Modes
57
+
58
+ ```typescript
59
+ import { isJSONMode, outputJSON, outputSuccess, createSuccessResponse } from '@agentuity/cli';
60
+
61
+ if (isJSONMode()) {
62
+ outputJSON(createSuccessResponse({ data }));
63
+ } else {
64
+ outputSuccess('Operation completed');
65
+ }
56
66
  ```
57
67
 
58
- ## Build Architecture
68
+ ## Important Exports
69
+
70
+ - **CLI**: `createCLI`, `registerCommands`, `discoverCommands`
71
+ - **Output**: `isJSONMode`, `outputJSON`, `outputSuccess`, `outputInfo`, `outputWarning`, `tui.*`
72
+ - **Config**: `loadConfig`, `saveConfig`, `saveAuth`, `getAuth`, `clearAuth`
73
+ - **Auth**: `requireAuth`, `optionalAuth`, `APIClient`
74
+ - **Utils**: `runSteps`, `downloadGitHubTarball`, `createRepl`, `showBanner`
59
75
 
60
- See [docs/build-architecture.md](docs/build-architecture.md) for Vite + Bun build system details.
76
+ See `src/index.ts` for complete exports.
61
77
 
62
78
  ## Publishing
63
79
 
64
80
  1. Run `bun run build`
65
81
  2. Test CLI with `bun bin/cli.ts`
66
- 3. Depends on `@agentuity/core` and `commander`
82
+ 3. Depends on `@agentuity/core`, `@agentuity/server`, and `commander`
package/bin/cli.ts CHANGED
@@ -8,7 +8,7 @@ if (versionArgs.length === 1 && ['version', '-v', '--version', '-V'].includes(ve
8
8
  process.exit(0);
9
9
  }
10
10
 
11
- import { ConsoleLogger } from '@agentuity/server';
11
+ import { ConsoleLogger, getAppBaseURL } from '@agentuity/server';
12
12
  import { isStructuredError } from '@agentuity/core';
13
13
  import { createCLI, registerCommands } from '../src/cli';
14
14
  import { validateRuntime } from '../src/runtime';
@@ -20,6 +20,7 @@ import { getVersion, getPackageName } from '../src/version';
20
20
 
21
21
  import type { CommandContext, LogLevel } from '../src/types';
22
22
  import { generateCLISchema } from '../src/schema-generator';
23
+ import { generateAIHelp } from '../src/ai-help';
23
24
  import { setOutputOptions } from '../src/output';
24
25
  import type { GlobalOptions } from '../src/types';
25
26
  import { ensureBunOnPath } from '../src/bun-path';
@@ -28,12 +29,7 @@ import { closeDatabase } from '../src/cache';
28
29
  import { createInternalLogger } from '../src/internal-logger';
29
30
  import { createCompositeLogger } from '../src/composite-logger';
30
31
  import { getAuth } from '../src/config';
31
- import {
32
- startAgentDetection,
33
- isExecutingFromAgent,
34
- onAgentDetected,
35
- flushAgentDetection,
36
- } from '../src/agent-detection';
32
+ import { getExecutingAgent } from '../src/agent-detection';
37
33
 
38
34
  /**
39
35
  * Extract --dir flag from process.argv before command parsing
@@ -95,10 +91,6 @@ process.on('SIGTERM', () => {
95
91
  validateRuntime();
96
92
  await ensureBunOnPath();
97
93
 
98
- // Start agent detection early (non-blocking) so it runs in the background
99
- // while the rest of CLI initialization happens
100
- startAgentDetection();
101
-
102
94
  // Preprocess arguments to convert --help=json to --help json
103
95
  // Commander.js doesn't support --option=value syntax for optional values
104
96
  const preprocessedArgs = process.argv.slice(2).flatMap((arg) => {
@@ -132,6 +124,21 @@ if (
132
124
  exit(0);
133
125
  }
134
126
 
127
+ // Check for --ai-help early (dashdash format for AI agents)
128
+ // This runs before auth/validation per dashdash spec "eager" requirement
129
+ if (preprocessedArgs.includes('--ai-help')) {
130
+ const version = getVersion();
131
+ const program = await createCLI(version);
132
+ const commands = await discoverCommands();
133
+ const cliSchema = generateCLISchema(program, commands, version);
134
+ const aiHelp = generateAIHelp(cliSchema);
135
+ console.log(aiHelp);
136
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
137
+ const exit = (globalThis as any).AGENTUITY_PROCESS_EXIT || process.exit;
138
+ closeDatabase();
139
+ exit(0);
140
+ }
141
+
135
142
  const version = getVersion();
136
143
  const program = await createCLI(version);
137
144
 
@@ -228,12 +235,11 @@ if (shouldSkipInternalLogging) {
228
235
  // Set session ID in environment so forked child processes can share the same log file
229
236
  process.env.AGENTUITY_INTERNAL_SESSION_ID = internalLogger.getSessionId();
230
237
 
231
- // Register callback to update session with detected agent (non-blocking)
232
- onAgentDetected((agent) => {
233
- if (agent) {
234
- internalLogger.setDetectedAgent(agent);
235
- }
236
- });
238
+ // Set detected agent in session logs
239
+ const detectedAgent = getExecutingAgent();
240
+ if (detectedAgent) {
241
+ internalLogger.setDetectedAgent(detectedAgent);
242
+ }
237
243
  }
238
244
 
239
245
  // Create composite logger that writes to both console and internal log
@@ -244,7 +250,7 @@ if (earlyOpts.skipVersionCheck) {
244
250
  process.env.AGENTUITY_SKIP_VERSION_CHECK = '1';
245
251
  }
246
252
 
247
- const config = await loadConfig(earlyOpts.config);
253
+ const config = await loadConfig(earlyOpts.config, false, earlyOpts.profile);
248
254
 
249
255
  // Update internal logger with userId if available from auth (keychain or config)
250
256
  try {
@@ -260,7 +266,7 @@ const ctx = {
260
266
  config,
261
267
  logger,
262
268
  options: earlyOpts,
263
- isExecutingFromAgent,
269
+ getExecutingAgent,
264
270
  };
265
271
 
266
272
  // Set global output options for utilities to use
@@ -293,8 +299,6 @@ await registerCommands(program, commands, ctx as unknown as CommandContext);
293
299
 
294
300
  try {
295
301
  await program.parseAsync(process.argv);
296
- // Flush agent detection to ensure it's written to session logs before exit
297
- await flushAgentDetection();
298
302
  } catch (error) {
299
303
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
300
304
  const exit = (globalThis as any).AGENTUITY_PROCESS_EXIT || process.exit;
@@ -322,7 +326,28 @@ try {
322
326
  closeDatabase();
323
327
  exit(0);
324
328
  }
325
- const errorWithMessage = error as { message?: string };
329
+ const errorWithMessage = error as { message?: string; statusCode?: number; _tag?: string };
330
+
331
+ // Handle payment required (402) errors with a friendly TUI message
332
+ if (
333
+ isStructuredError(error) &&
334
+ ((errorWithMessage._tag === 'ServiceException' && errorWithMessage.statusCode === 402) ||
335
+ errorWithMessage._tag === 'PaymentRequiredError')
336
+ ) {
337
+ const { errorBox, link, newline } = await import('../src/tui');
338
+ const overrides = config?.overrides as { app_url?: string } | undefined;
339
+ const appBaseUrl = getAppBaseURL(undefined, overrides);
340
+ const billingUrl = `${appBaseUrl}/billing`;
341
+ newline();
342
+ errorBox(
343
+ 'Out of Credit',
344
+ `Your organization is out of credit.\n\nPlease add more here:\n${link(billingUrl)}`,
345
+ false // standalone box, not connected to a guide
346
+ );
347
+ closeDatabase();
348
+ exit(1);
349
+ }
350
+
326
351
  if (isStructuredError(error)) {
327
352
  logger.error(error);
328
353
  } else {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Map of process names to internal agent short names.
3
- * The key is the process name (or substring) that appears in the parent process command line.
3
+ * The key is the process name (or substring) that appears in the parent process path or command line.
4
4
  * The value is the internal short name used to identify the agent.
5
5
  *
6
6
  * Process names verified via `agentuity cloud sandbox run --runtime <agent>:latest`:
@@ -18,54 +18,39 @@
18
18
  export declare const KNOWN_AGENTS: [string, string][];
19
19
  export type KnownAgent = (typeof KNOWN_AGENTS)[number][1];
20
20
  /**
21
- * Start agent detection immediately (non-blocking).
22
- * Call this early in CLI startup to begin detection in the background.
21
+ * Display names for known agents (human-friendly names)
23
22
  */
24
- export declare function startAgentDetection(): void;
23
+ export declare const AGENT_DISPLAY_NAMES: Record<string, string>;
25
24
  /**
26
- * Register a callback to be invoked when agent detection completes.
27
- * If detection has already completed, the callback is invoked immediately.
28
- * This is non-blocking and does not return a promise.
29
- *
30
- * @example
31
- * ```typescript
32
- * onAgentDetected((agent) => {
33
- * if (agent) {
34
- * console.log(`Detected agent: ${agent}`);
35
- * }
36
- * });
37
- * ```
38
- */
39
- export declare function onAgentDetected(callback: (agent: string | undefined) => void): void;
40
- /**
41
- * Get the cached detection result synchronously.
42
- * Returns undefined if detection hasn't completed yet or no agent was detected.
43
- * Returns null if detection hasn't started or completed yet.
44
- *
45
- * Use this for synchronous access when you don't want to wait for detection.
46
- */
47
- export declare function getDetectedAgent(): string | undefined | null;
48
- /**
49
- * Wait for agent detection to complete and ensure all callbacks have been invoked.
50
- * Call this before CLI exit to ensure the detected agent is written to session logs.
51
- *
52
- * This is a no-op if detection hasn't started or has already completed.
25
+ * Get the display name for an agent ID
53
26
  */
54
- export declare function flushAgentDetection(): Promise<void>;
27
+ export declare function getAgentDisplayName(agentId: string): string;
55
28
  /**
56
- * Check if the CLI is being executed from a known coding agent.
57
- * Returns the agent name if detected, undefined otherwise.
29
+ * Get the executing agent if the CLI is being run from a known coding agent.
30
+ * Returns the agent ID if detected, undefined otherwise.
58
31
  *
59
- * This function returns immediately if detection has already completed,
60
- * otherwise it awaits the detection promise started by startAgentDetection().
32
+ * This function runs synchronously using FFI for fast process path resolution.
33
+ * Results are cached after the first call.
61
34
  *
62
35
  * @example
63
36
  * ```typescript
64
- * const agent = await isExecutingFromAgent();
37
+ * const agent = getExecutingAgent();
65
38
  * if (agent) {
66
39
  * logger.debug(`Running from agent: ${agent}`);
67
40
  * }
68
41
  * ```
69
42
  */
70
- export declare function isExecutingFromAgent(): Promise<string | undefined>;
43
+ export declare function getExecutingAgent(): string | undefined;
44
+ /**
45
+ * Get environment variables to pass to subprocesses for agent detection.
46
+ * This allows child processes to skip re-detection by using the cached result.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const proc = Bun.spawn(['bun', 'run', 'dev'], {
51
+ * env: { ...process.env, ...getAgentEnv() },
52
+ * });
53
+ * ```
54
+ */
55
+ export declare function getAgentEnv(): Record<string, string>;
71
56
  //# sourceMappingURL=agent-detection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-detection.d.ts","sourceRoot":"","sources":["../src/agent-detection.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAgB1C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAiI1D;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAkB1C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,IAAI,CAanF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI,CAE5D;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIzD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAaxE"}
1
+ {"version":3,"file":"agent-detection.d.ts","sourceRoot":"","sources":["../src/agent-detection.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAiB1C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAatD,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AA4cD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAStD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMpD"}