@agentuity/cli 0.0.43 → 0.0.45

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 (209) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/api.d.ts +3 -3
  4. package/dist/api.d.ts.map +1 -1
  5. package/dist/auth.d.ts +10 -2
  6. package/dist/auth.d.ts.map +1 -1
  7. package/dist/banner.d.ts.map +1 -1
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cmd/auth/api.d.ts +4 -4
  10. package/dist/cmd/auth/api.d.ts.map +1 -1
  11. package/dist/cmd/auth/index.d.ts.map +1 -1
  12. package/dist/cmd/auth/login.d.ts.map +1 -1
  13. package/dist/cmd/auth/signup.d.ts.map +1 -1
  14. package/dist/cmd/auth/ssh/add.d.ts +2 -0
  15. package/dist/cmd/auth/ssh/add.d.ts.map +1 -0
  16. package/dist/cmd/auth/ssh/api.d.ts +16 -0
  17. package/dist/cmd/auth/ssh/api.d.ts.map +1 -0
  18. package/dist/cmd/auth/ssh/delete.d.ts +2 -0
  19. package/dist/cmd/auth/ssh/delete.d.ts.map +1 -0
  20. package/dist/cmd/auth/ssh/index.d.ts +3 -0
  21. package/dist/cmd/auth/ssh/index.d.ts.map +1 -0
  22. package/dist/cmd/auth/ssh/list.d.ts +2 -0
  23. package/dist/cmd/auth/ssh/list.d.ts.map +1 -0
  24. package/dist/cmd/auth/whoami.d.ts.map +1 -1
  25. package/dist/cmd/bundle/ast.d.ts +14 -3
  26. package/dist/cmd/bundle/ast.d.ts.map +1 -1
  27. package/dist/cmd/bundle/ast.test.d.ts +2 -0
  28. package/dist/cmd/bundle/ast.test.d.ts.map +1 -0
  29. package/dist/cmd/bundle/bundler.d.ts +6 -1
  30. package/dist/cmd/bundle/bundler.d.ts.map +1 -1
  31. package/dist/cmd/bundle/file.d.ts.map +1 -1
  32. package/dist/cmd/bundle/fix-duplicate-exports.d.ts +2 -0
  33. package/dist/cmd/bundle/fix-duplicate-exports.d.ts.map +1 -0
  34. package/dist/cmd/bundle/fix-duplicate-exports.test.d.ts +2 -0
  35. package/dist/cmd/bundle/fix-duplicate-exports.test.d.ts.map +1 -0
  36. package/dist/cmd/bundle/plugin.d.ts +2 -0
  37. package/dist/cmd/bundle/plugin.d.ts.map +1 -1
  38. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  39. package/dist/cmd/cloud/domain.d.ts +17 -0
  40. package/dist/cmd/cloud/domain.d.ts.map +1 -0
  41. package/dist/cmd/cloud/index.d.ts.map +1 -1
  42. package/dist/cmd/cloud/resource/add.d.ts +2 -0
  43. package/dist/cmd/cloud/resource/add.d.ts.map +1 -0
  44. package/dist/cmd/cloud/resource/delete.d.ts +2 -0
  45. package/dist/cmd/cloud/resource/delete.d.ts.map +1 -0
  46. package/dist/cmd/cloud/resource/index.d.ts +3 -0
  47. package/dist/cmd/cloud/resource/index.d.ts.map +1 -0
  48. package/dist/cmd/cloud/resource/list.d.ts +2 -0
  49. package/dist/cmd/cloud/resource/list.d.ts.map +1 -0
  50. package/dist/cmd/cloud/scp/download.d.ts +2 -0
  51. package/dist/cmd/cloud/scp/download.d.ts.map +1 -0
  52. package/dist/cmd/cloud/scp/index.d.ts +3 -0
  53. package/dist/cmd/cloud/scp/index.d.ts.map +1 -0
  54. package/dist/cmd/cloud/scp/upload.d.ts +2 -0
  55. package/dist/cmd/cloud/scp/upload.d.ts.map +1 -0
  56. package/dist/cmd/cloud/ssh.d.ts +2 -0
  57. package/dist/cmd/cloud/ssh.d.ts.map +1 -0
  58. package/dist/cmd/dev/api.d.ts +18 -0
  59. package/dist/cmd/dev/api.d.ts.map +1 -0
  60. package/dist/cmd/dev/download.d.ts +11 -0
  61. package/dist/cmd/dev/download.d.ts.map +1 -0
  62. package/dist/cmd/dev/index.d.ts.map +1 -1
  63. package/dist/cmd/dev/templates.d.ts +3 -0
  64. package/dist/cmd/dev/templates.d.ts.map +1 -0
  65. package/dist/cmd/env/delete.d.ts.map +1 -1
  66. package/dist/cmd/env/get.d.ts.map +1 -1
  67. package/dist/cmd/env/import.d.ts.map +1 -1
  68. package/dist/cmd/env/list.d.ts.map +1 -1
  69. package/dist/cmd/env/pull.d.ts.map +1 -1
  70. package/dist/cmd/env/push.d.ts.map +1 -1
  71. package/dist/cmd/env/set.d.ts.map +1 -1
  72. package/dist/cmd/profile/show.d.ts.map +1 -1
  73. package/dist/cmd/project/create.d.ts.map +1 -1
  74. package/dist/cmd/project/delete.d.ts.map +1 -1
  75. package/dist/cmd/project/list.d.ts.map +1 -1
  76. package/dist/cmd/project/show.d.ts.map +1 -1
  77. package/dist/cmd/project/template-flow.d.ts +4 -0
  78. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  79. package/dist/cmd/secret/delete.d.ts.map +1 -1
  80. package/dist/cmd/secret/get.d.ts.map +1 -1
  81. package/dist/cmd/secret/import.d.ts.map +1 -1
  82. package/dist/cmd/secret/list.d.ts.map +1 -1
  83. package/dist/cmd/secret/pull.d.ts.map +1 -1
  84. package/dist/cmd/secret/push.d.ts.map +1 -1
  85. package/dist/cmd/secret/set.d.ts.map +1 -1
  86. package/dist/config.d.ts +9 -3
  87. package/dist/config.d.ts.map +1 -1
  88. package/dist/crypto/box.d.ts +65 -0
  89. package/dist/crypto/box.d.ts.map +1 -0
  90. package/dist/crypto/box.test.d.ts +2 -0
  91. package/dist/crypto/box.test.d.ts.map +1 -0
  92. package/dist/download.d.ts.map +1 -1
  93. package/dist/steps.d.ts +4 -1
  94. package/dist/steps.d.ts.map +1 -1
  95. package/dist/terminal.d.ts.map +1 -1
  96. package/dist/tui.d.ts +31 -1
  97. package/dist/tui.d.ts.map +1 -1
  98. package/dist/types.d.ts +249 -126
  99. package/dist/types.d.ts.map +1 -1
  100. package/dist/utils/detectSubagent.d.ts +15 -0
  101. package/dist/utils/detectSubagent.d.ts.map +1 -0
  102. package/dist/utils/zip.d.ts +7 -0
  103. package/dist/utils/zip.d.ts.map +1 -0
  104. package/package.json +11 -3
  105. package/src/api-errors.md +2 -2
  106. package/src/api.ts +12 -7
  107. package/src/auth.ts +116 -7
  108. package/src/banner.ts +13 -6
  109. package/src/cli.ts +695 -63
  110. package/src/cmd/auth/api.ts +10 -16
  111. package/src/cmd/auth/index.ts +2 -1
  112. package/src/cmd/auth/login.ts +24 -8
  113. package/src/cmd/auth/signup.ts +15 -11
  114. package/src/cmd/auth/ssh/add.ts +263 -0
  115. package/src/cmd/auth/ssh/api.ts +94 -0
  116. package/src/cmd/auth/ssh/delete.ts +102 -0
  117. package/src/cmd/auth/ssh/index.ts +10 -0
  118. package/src/cmd/auth/ssh/list.ts +74 -0
  119. package/src/cmd/auth/whoami.ts +13 -13
  120. package/src/cmd/bundle/ast.test.ts +565 -0
  121. package/src/cmd/bundle/ast.ts +457 -44
  122. package/src/cmd/bundle/bundler.ts +255 -57
  123. package/src/cmd/bundle/file.ts +6 -12
  124. package/src/cmd/bundle/fix-duplicate-exports.test.ts +387 -0
  125. package/src/cmd/bundle/fix-duplicate-exports.ts +204 -0
  126. package/src/cmd/bundle/index.ts +9 -9
  127. package/src/cmd/bundle/patch/aisdk.ts +1 -1
  128. package/src/cmd/bundle/plugin.ts +373 -53
  129. package/src/cmd/cloud/deploy.ts +300 -93
  130. package/src/cmd/cloud/domain.ts +92 -0
  131. package/src/cmd/cloud/index.ts +4 -1
  132. package/src/cmd/cloud/resource/add.ts +56 -0
  133. package/src/cmd/cloud/resource/delete.ts +120 -0
  134. package/src/cmd/cloud/resource/index.ts +11 -0
  135. package/src/cmd/cloud/resource/list.ts +69 -0
  136. package/src/cmd/cloud/scp/download.ts +59 -0
  137. package/src/cmd/cloud/scp/index.ts +9 -0
  138. package/src/cmd/cloud/scp/upload.ts +62 -0
  139. package/src/cmd/cloud/ssh.ts +68 -0
  140. package/src/cmd/dev/api.ts +46 -0
  141. package/src/cmd/dev/download.ts +111 -0
  142. package/src/cmd/dev/index.ts +360 -34
  143. package/src/cmd/dev/templates.ts +84 -0
  144. package/src/cmd/env/delete.ts +5 -20
  145. package/src/cmd/env/get.ts +5 -18
  146. package/src/cmd/env/import.ts +5 -20
  147. package/src/cmd/env/list.ts +5 -18
  148. package/src/cmd/env/pull.ts +10 -23
  149. package/src/cmd/env/push.ts +5 -23
  150. package/src/cmd/env/set.ts +5 -20
  151. package/src/cmd/index.ts +2 -2
  152. package/src/cmd/profile/show.ts +15 -6
  153. package/src/cmd/project/create.ts +7 -2
  154. package/src/cmd/project/delete.ts +75 -18
  155. package/src/cmd/project/download.ts +2 -2
  156. package/src/cmd/project/list.ts +8 -8
  157. package/src/cmd/project/show.ts +3 -7
  158. package/src/cmd/project/template-flow.ts +170 -72
  159. package/src/cmd/secret/delete.ts +5 -20
  160. package/src/cmd/secret/get.ts +5 -18
  161. package/src/cmd/secret/import.ts +5 -20
  162. package/src/cmd/secret/list.ts +5 -18
  163. package/src/cmd/secret/pull.ts +10 -23
  164. package/src/cmd/secret/push.ts +5 -23
  165. package/src/cmd/secret/set.ts +5 -20
  166. package/src/config.ts +224 -24
  167. package/src/crypto/box.test.ts +431 -0
  168. package/src/crypto/box.ts +477 -0
  169. package/src/download.ts +1 -0
  170. package/src/env-util.test.ts +1 -1
  171. package/src/steps.ts +65 -6
  172. package/src/terminal.ts +24 -23
  173. package/src/tui.ts +192 -61
  174. package/src/types.ts +291 -201
  175. package/src/utils/detectSubagent.ts +31 -0
  176. package/src/utils/zip.ts +38 -0
  177. package/dist/cmd/example/create-user.d.ts +0 -2
  178. package/dist/cmd/example/create-user.d.ts.map +0 -1
  179. package/dist/cmd/example/create.d.ts +0 -2
  180. package/dist/cmd/example/create.d.ts.map +0 -1
  181. package/dist/cmd/example/deploy.d.ts +0 -2
  182. package/dist/cmd/example/deploy.d.ts.map +0 -1
  183. package/dist/cmd/example/index.d.ts +0 -2
  184. package/dist/cmd/example/index.d.ts.map +0 -1
  185. package/dist/cmd/example/list.d.ts +0 -2
  186. package/dist/cmd/example/list.d.ts.map +0 -1
  187. package/dist/cmd/example/optional-auth.d.ts +0 -3
  188. package/dist/cmd/example/optional-auth.d.ts.map +0 -1
  189. package/dist/cmd/example/run-command.d.ts +0 -2
  190. package/dist/cmd/example/run-command.d.ts.map +0 -1
  191. package/dist/cmd/example/sound.d.ts +0 -3
  192. package/dist/cmd/example/sound.d.ts.map +0 -1
  193. package/dist/cmd/example/spinner.d.ts +0 -2
  194. package/dist/cmd/example/spinner.d.ts.map +0 -1
  195. package/dist/cmd/example/steps.d.ts +0 -2
  196. package/dist/cmd/example/steps.d.ts.map +0 -1
  197. package/dist/cmd/example/version.d.ts +0 -2
  198. package/dist/cmd/example/version.d.ts.map +0 -1
  199. package/src/cmd/example/create-user.ts +0 -38
  200. package/src/cmd/example/create.ts +0 -31
  201. package/src/cmd/example/deploy.ts +0 -36
  202. package/src/cmd/example/index.ts +0 -29
  203. package/src/cmd/example/list.ts +0 -32
  204. package/src/cmd/example/optional-auth.ts +0 -38
  205. package/src/cmd/example/run-command.ts +0 -45
  206. package/src/cmd/example/sound.ts +0 -14
  207. package/src/cmd/example/spinner.ts +0 -44
  208. package/src/cmd/example/steps.ts +0 -66
  209. package/src/cmd/example/version.ts +0 -13
package/src/types.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  import type { Logger } from '@agentuity/core';
2
+ import { Deployment } from '@agentuity/server';
2
3
  import type * as z from 'zod';
3
4
  import { z as zod } from 'zod';
5
+ import type { APIClient } from './api';
6
+
7
+ export type { Logger };
4
8
 
5
9
  export const ConfigSchema = zod.object({
6
10
  name: zod.string().describe('Profile name'),
@@ -20,22 +24,41 @@ export const ConfigSchema = zod.object({
20
24
  .describe('Development mode configuration'),
21
25
  overrides: zod
22
26
  .object({
23
- api_url: zod
27
+ api_url: zod.url().default('https://api.agentuity.com').describe('Override API base URL'),
28
+ app_url: zod.url().default('https://app.agentuity.com').describe('Override app base URL'),
29
+ transport_url: zod
24
30
  .url()
25
- .optional()
26
- .describe('Override API base URL (default: https://api.agentuity.com)'),
27
- app_url: zod
31
+ .default('https://catalyst.agentuity.cloud')
32
+ .describe('Override transport URL'),
33
+ stream_url: zod
28
34
  .url()
29
- .optional()
30
- .describe('Override app base URL (default: https://app.agentuity.com)'),
31
- transport_url: zod
35
+ .default('https://stream.agentuity.cloud')
36
+ .describe('Override stream URL'),
37
+ kv_url: zod
32
38
  .url()
33
- .optional()
34
- .describe('Override transport URL (default: https://agentuity.ai)'),
35
- websocket_url: zod
39
+ .default('https://catalyst.agentuity.cloud')
40
+ .describe('Override keyvalue URL'),
41
+ object_url: zod
42
+ .url()
43
+ .default('https://catalyst.agentuity.cloud')
44
+ .describe('Override object store URL'),
45
+ vector_url: zod
46
+ .url()
47
+ .default('https://catalyst.agentuity.cloud')
48
+ .describe('Override vector store URL'),
49
+ catalyst_url: zod
50
+ .url()
51
+ .default('https://catalyst.agentuity.cloud')
52
+ .describe('Override catalyst URL'),
53
+ ion_url: zod
36
54
  .url()
37
55
  .optional()
38
- .describe('Override WebSocket URL (default: wss://api.agentuity.com)'),
56
+ .default('https://ion.agentuity.cloud')
57
+ .describe('Override ion URL'),
58
+ gravity_url: zod
59
+ .url()
60
+ .default('grpc://devmode.agentuity.com')
61
+ .describe('Override gravity URL'),
39
62
  skip_version_check: zod.boolean().optional().describe('Skip CLI version check on startup'),
40
63
  })
41
64
  .optional()
@@ -50,6 +73,13 @@ export const ConfigSchema = zod.object({
50
73
  })
51
74
  .optional()
52
75
  .describe('User preferences'),
76
+ gravity: zod
77
+ .object({
78
+ version: zod.string().optional().describe('The current gravity version'),
79
+ checked: zod.number().optional().describe('Last gravity check timestamp'),
80
+ })
81
+ .optional()
82
+ .describe('the gravity client information'),
53
83
  });
54
84
 
55
85
  export type Config = zod.infer<typeof ConfigSchema>;
@@ -73,6 +103,7 @@ export interface GlobalOptions {
73
103
  logLevel: LogLevel;
74
104
  logTimestamp?: boolean;
75
105
  logPrefix?: boolean;
106
+ orgId?: string;
76
107
  }
77
108
 
78
109
  export interface CommandSchemas {
@@ -80,245 +111,278 @@ export interface CommandSchemas {
80
111
  options?: z.ZodType;
81
112
  }
82
113
 
114
+ export type ProjectConfig = zod.infer<typeof ProjectSchema>;
115
+
116
+ export type Requires = {
117
+ auth?: true;
118
+ project?: true;
119
+ apiClient?: true;
120
+ org?: true;
121
+ regions?: true;
122
+ region?: true;
123
+ };
124
+
125
+ export type Optional = {
126
+ auth?: true | string;
127
+ project?: true;
128
+ org?: true;
129
+ region?: true;
130
+ };
131
+
132
+ type AddArgs<A extends z.ZodType | undefined> = A extends z.ZodType
133
+ ? { args: z.infer<A> }
134
+ : Record<string, never>;
135
+ type AddOpts<O extends z.ZodType | undefined> = O extends z.ZodType
136
+ ? { opts: z.infer<O> }
137
+ : Record<string, never>;
138
+
139
+ type AuthMode<R extends Requires | undefined, O extends Optional | undefined> = R extends {
140
+ auth: true;
141
+ }
142
+ ? 'required'
143
+ : O extends { auth: true | string }
144
+ ? 'optional'
145
+ : 'none';
146
+
147
+ type ProjectMode<R extends Requires | undefined, O extends Optional | undefined> = R extends {
148
+ project: true;
149
+ }
150
+ ? 'required'
151
+ : O extends { project: true }
152
+ ? 'optional'
153
+ : 'none';
154
+
155
+ type APIClientRequired<R extends Requires | undefined> = R extends { apiClient: true }
156
+ ? true
157
+ : false;
158
+
159
+ type AddAuth<M extends 'required' | 'optional' | 'none'> = M extends 'required'
160
+ ? { auth: AuthData }
161
+ : M extends 'optional'
162
+ ? { auth: AuthData | undefined }
163
+ : Record<string, never>;
164
+
165
+ type AddProject<M extends 'required' | 'optional' | 'none'> = M extends 'required'
166
+ ? { project: ProjectConfig; projectDir: string }
167
+ : M extends 'optional'
168
+ ? { project?: ProjectConfig; projectDir: string }
169
+ : Record<string, never>;
170
+
171
+ type OrgMode<R extends Requires | undefined, O extends Optional | undefined> = R extends {
172
+ org: true;
173
+ }
174
+ ? 'required'
175
+ : O extends { org: true }
176
+ ? 'optional'
177
+ : 'none';
178
+
179
+ type AddOrg<M extends 'required' | 'optional' | 'none'> = M extends 'required'
180
+ ? { orgId: string }
181
+ : M extends 'optional'
182
+ ? { orgId?: string }
183
+ : Record<string, never>;
184
+
185
+ type RegionsRequired<R extends Requires | undefined> = R extends { regions: true } ? true : false;
186
+
187
+ type AddRegions<R extends boolean> = R extends true
188
+ ? { regions: Array<{ region: string; description: string }> }
189
+ : Record<string, never>;
190
+
191
+ type RegionMode<R extends Requires | undefined, O extends Optional | undefined> = R extends {
192
+ region: true;
193
+ }
194
+ ? 'required'
195
+ : O extends { region: true }
196
+ ? 'optional'
197
+ : 'none';
198
+
199
+ type AddRegionOptional<M extends 'required' | 'optional' | 'none'> = M extends 'required'
200
+ ? { region: string }
201
+ : M extends 'optional'
202
+ ? { region?: string }
203
+ : Record<string, never>;
204
+
205
+ export type CommandContextFromSpecs<
206
+ R extends Requires | undefined,
207
+ O extends Optional | undefined,
208
+ A extends z.ZodType | undefined = undefined,
209
+ Op extends z.ZodType | undefined = undefined,
210
+ > = {
211
+ config: Config | null;
212
+ logger: Logger;
213
+ options: GlobalOptions;
214
+ } & AddArgs<A> &
215
+ AddOpts<Op> &
216
+ AddAuth<AuthMode<R, O>> &
217
+ AddProject<ProjectMode<R, O>> &
218
+ AddOrg<OrgMode<R, O>> &
219
+ AddRegions<RegionsRequired<R>> &
220
+ AddRegionOptional<RegionMode<R, O>> &
221
+ (APIClientRequired<R> extends true ? { apiClient: APIClient } : Record<string, never>);
222
+
83
223
  export type CommandContext<
84
- RequiresAuth extends boolean | 'optional' = false,
85
- ArgsSchema extends z.ZodType | undefined = undefined,
86
- OptionsSchema extends z.ZodType | undefined = undefined,
87
- > = RequiresAuth extends true
88
- ? ArgsSchema extends z.ZodType
89
- ? OptionsSchema extends z.ZodType
90
- ? {
91
- config: Config | null;
92
- logger: Logger;
93
- options: GlobalOptions;
94
- auth: AuthData;
95
- args: z.infer<ArgsSchema>;
96
- opts: z.infer<OptionsSchema>;
97
- }
98
- : {
99
- config: Config | null;
100
- logger: Logger;
101
- options: GlobalOptions;
102
- auth: AuthData;
103
- args: z.infer<ArgsSchema>;
104
- }
105
- : OptionsSchema extends z.ZodType
106
- ? {
107
- config: Config | null;
108
- logger: Logger;
109
- options: GlobalOptions;
110
- auth: AuthData;
111
- opts: z.infer<OptionsSchema>;
112
- }
113
- : {
114
- config: Config | null;
115
- logger: Logger;
116
- options: GlobalOptions;
117
- auth: AuthData;
118
- }
119
- : RequiresAuth extends 'optional'
120
- ? ArgsSchema extends z.ZodType
121
- ? OptionsSchema extends z.ZodType
122
- ? {
123
- config: Config | null;
124
- logger: Logger;
125
- options: GlobalOptions;
126
- auth: AuthData | undefined;
127
- args: z.infer<ArgsSchema>;
128
- opts: z.infer<OptionsSchema>;
129
- }
130
- : {
131
- config: Config | null;
132
- logger: Logger;
133
- options: GlobalOptions;
134
- auth: AuthData | undefined;
135
- args: z.infer<ArgsSchema>;
136
- }
137
- : OptionsSchema extends z.ZodType
138
- ? {
139
- config: Config | null;
140
- logger: Logger;
141
- options: GlobalOptions;
142
- auth: AuthData | undefined;
143
- opts: z.infer<OptionsSchema>;
144
- }
145
- : {
146
- config: Config | null;
147
- logger: Logger;
148
- options: GlobalOptions;
149
- auth: AuthData | undefined;
150
- }
151
- : ArgsSchema extends z.ZodType
152
- ? OptionsSchema extends z.ZodType
153
- ? {
154
- config: Config | null;
155
- logger: Logger;
156
- options: GlobalOptions;
157
- args: z.infer<ArgsSchema>;
158
- opts: z.infer<OptionsSchema>;
159
- }
160
- : {
161
- config: Config | null;
162
- logger: Logger;
163
- options: GlobalOptions;
164
- args: z.infer<ArgsSchema>;
165
- }
166
- : OptionsSchema extends z.ZodType
167
- ? {
168
- config: Config | null;
169
- logger: Logger;
170
- options: GlobalOptions;
171
- opts: z.infer<OptionsSchema>;
172
- }
173
- : {
174
- config: Config | null;
175
- logger: Logger;
176
- options: GlobalOptions;
177
- };
178
-
179
- // Helper to create subcommands with proper type inference
224
+ R extends Requires | undefined = undefined,
225
+ O extends Optional | undefined = undefined,
226
+ A extends z.ZodType | undefined = undefined,
227
+ Op extends z.ZodType | undefined = undefined,
228
+ > = CommandContextFromSpecs<R, O, A, Op>;
229
+
180
230
  export function createSubcommand<
181
- TRequiresAuth extends boolean,
182
- TOptionalAuth extends boolean | string,
183
- TArgsSchema extends z.ZodType | undefined,
184
- TOptionsSchema extends z.ZodType | undefined,
231
+ R extends Requires | undefined = undefined,
232
+ O extends Optional | undefined = undefined,
233
+ A extends z.ZodType | undefined = undefined,
234
+ Op extends z.ZodType | undefined = undefined,
185
235
  >(definition: {
186
236
  name: string;
187
237
  description: string;
238
+ banner?: true;
188
239
  aliases?: string[];
189
240
  toplevel?: boolean;
190
- requiresAuth?: TRequiresAuth;
191
- optionalAuth?: TOptionalAuth;
192
- schema?: TArgsSchema extends z.ZodType
193
- ? TOptionsSchema extends z.ZodType
194
- ? { args: TArgsSchema; options: TOptionsSchema }
195
- : { args: TArgsSchema }
196
- : TOptionsSchema extends z.ZodType
197
- ? { options: TOptionsSchema }
241
+ requires?: R;
242
+ optional?: O;
243
+ schema?: A extends z.ZodType
244
+ ? Op extends z.ZodType
245
+ ? { args: A; options: Op }
246
+ : { args: A }
247
+ : Op extends z.ZodType
248
+ ? { options: Op }
198
249
  : never;
199
- handler(
200
- ctx: CommandContext<
201
- TRequiresAuth extends true
202
- ? true
203
- : TOptionalAuth extends true | string
204
- ? 'optional'
205
- : false,
206
- TArgsSchema,
207
- TOptionsSchema
208
- >
209
- ): void | Promise<void>;
250
+ handler(ctx: CommandContext<R, O, A, Op>): void | Promise<void>;
210
251
  }): SubcommandDefinition {
211
252
  return definition as unknown as SubcommandDefinition;
212
253
  }
213
254
 
214
- // Helper to create commands with proper type inference
215
255
  export function createCommand<
216
- TRequiresAuth extends boolean,
217
- TOptionalAuth extends boolean | string,
218
- TArgsSchema extends z.ZodType | undefined,
219
- TOptionsSchema extends z.ZodType | undefined,
256
+ R extends Requires | undefined = undefined,
257
+ O extends Optional | undefined = undefined,
258
+ A extends z.ZodType | undefined = undefined,
259
+ Op extends z.ZodType | undefined = undefined,
220
260
  >(definition: {
221
261
  name: string;
222
262
  description: string;
263
+ banner?: true;
223
264
  aliases?: string[];
224
265
  hidden?: boolean;
225
- requiresAuth?: TRequiresAuth;
226
- optionalAuth?: TOptionalAuth;
227
- schema?: TArgsSchema extends z.ZodType
228
- ? TOptionsSchema extends z.ZodType
229
- ? { args: TArgsSchema; options: TOptionsSchema }
230
- : { args: TArgsSchema }
231
- : TOptionsSchema extends z.ZodType
232
- ? { options: TOptionsSchema }
266
+ requires?: R;
267
+ optional?: O;
268
+ schema?: A extends z.ZodType
269
+ ? Op extends z.ZodType
270
+ ? { args: A; options: Op }
271
+ : { args: A }
272
+ : Op extends z.ZodType
273
+ ? { options: Op }
233
274
  : never;
234
- handler?(
235
- ctx: CommandContext<
236
- TRequiresAuth extends true
237
- ? true
238
- : TOptionalAuth extends true | string
239
- ? 'optional'
240
- : false,
241
- TArgsSchema,
242
- TOptionsSchema
243
- >
244
- ): void | Promise<void>;
275
+ handler?(ctx: CommandContext<R, O, A, Op>): void | Promise<void>;
245
276
  subcommands?: SubcommandDefinition[];
246
277
  }): CommandDefinition {
247
278
  return definition as unknown as CommandDefinition;
248
279
  }
249
280
 
250
- // Discriminated union for SubcommandDefinition
251
- export type SubcommandDefinition =
252
- | {
253
- name: string;
254
- description: string;
255
- aliases?: string[];
256
- toplevel?: boolean;
257
- requiresAuth: true;
258
- optionalAuth?: false | string;
259
- schema?: CommandSchemas;
260
- handler(ctx: CommandContext): void | Promise<void>;
261
- }
281
+ type CommandDefBase =
262
282
  | {
263
283
  name: string;
264
284
  description: string;
265
285
  aliases?: string[];
266
- toplevel?: boolean;
267
- requiresAuth?: false;
268
- optionalAuth: true | string;
286
+ banner?: boolean;
269
287
  schema?: CommandSchemas;
270
288
  handler(ctx: CommandContext): void | Promise<void>;
289
+ subcommands?: SubcommandDefinition[];
271
290
  }
272
291
  | {
273
292
  name: string;
274
293
  description: string;
275
294
  aliases?: string[];
276
- toplevel?: boolean;
277
- requiresAuth?: false;
278
- optionalAuth?: false;
295
+ banner?: boolean;
279
296
  schema?: CommandSchemas;
280
- handler(ctx: CommandContext): void | Promise<void>;
297
+ handler?: undefined;
298
+ subcommands: SubcommandDefinition[];
281
299
  };
282
300
 
283
- // Discriminated union for CommandDefinition
284
- export type CommandDefinition =
301
+ type SubcommandDefBase =
285
302
  | {
286
303
  name: string;
287
304
  description: string;
288
305
  aliases?: string[];
289
- hidden?: boolean;
290
- requiresAuth: true;
291
- optionalAuth?: false | string;
292
- schema?: CommandSchemas;
293
- handler?(ctx: CommandContext): void | Promise<void>;
294
- subcommands?: SubcommandDefinition[];
295
- }
296
- | {
297
- name: string;
298
- description: string;
299
- aliases?: string[];
300
- hidden?: boolean;
301
- requiresAuth?: false;
302
- optionalAuth: true | string;
306
+ toplevel?: boolean;
307
+ banner?: boolean;
303
308
  schema?: CommandSchemas;
304
- handler?(ctx: CommandContext): void | Promise<void>;
309
+ handler(ctx: CommandContext): void | Promise<void>;
305
310
  subcommands?: SubcommandDefinition[];
306
311
  }
307
312
  | {
308
313
  name: string;
309
314
  description: string;
310
315
  aliases?: string[];
311
- hidden?: boolean;
312
- requiresAuth?: false;
313
- optionalAuth?: false;
316
+ toplevel?: boolean;
317
+ banner?: boolean;
314
318
  schema?: CommandSchemas;
315
- handler?(ctx: CommandContext): void | Promise<void>;
316
- subcommands?: SubcommandDefinition[];
319
+ handler?: undefined;
320
+ subcommands: SubcommandDefinition[];
317
321
  };
318
322
 
323
+ export type CommandDefinition =
324
+ | (CommandDefBase & {
325
+ hidden?: boolean;
326
+ requires: Requires & { auth: true };
327
+ optional?: Optional & { auth?: never };
328
+ })
329
+ | (CommandDefBase & {
330
+ hidden?: boolean;
331
+ requires?: Requires & { auth?: never };
332
+ optional: Optional & { auth: true | string };
333
+ })
334
+ | (CommandDefBase & {
335
+ hidden?: boolean;
336
+ requires?: Requires & { auth?: never };
337
+ optional?: Optional & { auth?: never };
338
+ });
339
+
340
+ export type SubcommandDefinition =
341
+ | (SubcommandDefBase & {
342
+ requires: Requires & { auth: true };
343
+ optional?: Optional & { auth?: never };
344
+ })
345
+ | (SubcommandDefBase & {
346
+ requires?: Requires & { auth?: never };
347
+ optional: Optional & { auth: true | string };
348
+ })
349
+ | (SubcommandDefBase & {
350
+ requires?: Requires & { auth?: never };
351
+ optional?: Optional & { auth?: never };
352
+ });
353
+
319
354
  export const ProjectSchema = zod.object({
320
355
  projectId: zod.string().describe('the project id'),
321
356
  orgId: zod.string().describe('the organization id'),
357
+ deployment: Deployment.optional().describe('the deployment configuration'),
358
+ });
359
+
360
+ const FileFields = {
361
+ filename: zod.string().describe('the relative path for the file'),
362
+ version: zod.string().describe('the SHA256 content of the file'),
363
+ identifier: zod.string().describe('the folder for the file'),
364
+ };
365
+
366
+ const BaseAgentFields = {
367
+ ...FileFields,
368
+ id: zod.string().describe('the unique calculated id for the agent'),
369
+ name: zod.string().describe('the name of the agent'),
370
+ description: zod.string().optional().describe('the agent description'),
371
+ evals: zod
372
+ .array(
373
+ zod.object({
374
+ ...FileFields,
375
+ name: zod.string().describe('the name of the eval'),
376
+ description: zod.string().optional().describe('the eval description'),
377
+ })
378
+ )
379
+ .optional()
380
+ .describe('the evals for the agent'),
381
+ };
382
+
383
+ const AgentSchema = zod.object({
384
+ ...BaseAgentFields,
385
+ subagents: zod.array(zod.object(BaseAgentFields)).optional().describe('subagents of this agent'),
322
386
  });
323
387
 
324
388
  export const BuildMetadataSchema = zod.object({
@@ -336,16 +400,42 @@ export const BuildMetadataSchema = zod.object({
336
400
  .describe('type specific configuration'),
337
401
  })
338
402
  ),
339
- agents: zod.array(
403
+ agents: zod.array(AgentSchema),
404
+ assets: zod.array(
340
405
  zod.object({
341
- id: zod.string().describe('the unique calculated id for the route'),
342
406
  filename: zod.string().describe('the relative path for the file'),
343
- name: zod.string().describe('the name of the agent'),
344
- version: zod.string().describe('the SHA256 content of the file'),
345
- identifier: zod.string().describe('the folder for the agent'),
346
- description: zod.string().optional().describe('the agent description'),
407
+ kind: zod.string().describe('the type of asset'),
408
+ contentType: zod.string().describe('the content-type for the file'),
409
+ size: zod.number().describe('the size in bytes for the file'),
347
410
  })
348
411
  ),
412
+ project: zod.object({
413
+ id: zod.string().describe('the project id'),
414
+ name: zod.string().describe('the name of the project (from package.json)'),
415
+ version: zod.string().optional().describe('the version of the project (from package.json)'),
416
+ }),
417
+ deployment: zod.object({
418
+ id: zod.string().describe('the deployment id'),
419
+ date: zod.string().describe('the date the deployment was created in UTC format'),
420
+ git: zod
421
+ .object({
422
+ repo: zod.string().optional().describe('the repository name'),
423
+ commit: zod.string().optional().describe('the git commit sha'),
424
+ message: zod.string().optional().describe('the git commit message'),
425
+ branch: zod.string().optional().describe('the git branch'),
426
+ tags: zod.array(zod.string()).optional().describe('the tags for the current branch'),
427
+ pr: zod.string().optional().describe('the pull request number'),
428
+ })
429
+ .optional()
430
+ .describe('git commit information'),
431
+ build: zod.object({
432
+ bun: zod.string().describe('the version of bun that was used to build the deployment'),
433
+ agentuity: zod.string().describe('the version of the agentuity runtime'),
434
+ arch: zod.string().describe('the machine architecture'),
435
+ platform: zod.string().describe('the machine os platform'),
436
+ }),
437
+ }),
349
438
  });
350
439
 
351
440
  export type BuildMetadata = zod.infer<typeof BuildMetadataSchema>;
441
+ export type Project = zod.infer<typeof ProjectSchema>;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Detects if a file path represents a subagent based on path structure.
3
+ *
4
+ * Subagents follow the pattern: agents/parent/child/agent.ts or agents/parent/child/route.ts
5
+ * The path structure is currently hardcoded to 4 segments but could be made configurable later.
6
+ *
7
+ * @param filePath - The file path to analyze (can include leading './')
8
+ * @param srcDir - Optional source directory to strip from the path
9
+ * @returns Object with isSubagent flag and parentName if detected
10
+ */
11
+ export function detectSubagent(
12
+ filePath: string,
13
+ srcDir?: string
14
+ ): { isSubagent: boolean; parentName: string | null } {
15
+ let normalizedPath = filePath;
16
+
17
+ // Strip srcDir if provided
18
+ if (srcDir && normalizedPath.startsWith(srcDir)) {
19
+ normalizedPath = normalizedPath.replace(srcDir, '');
20
+ }
21
+
22
+ // Strip leading './' and split into parts, filtering out empty segments
23
+ const pathParts = normalizedPath.replace(/^\.\//, '').split('/').filter(Boolean);
24
+
25
+ // Path structure assumption: ['agents', 'parent', 'child', 'agent.ts' | 'route.ts' | 'route']
26
+ // Currently hardcoded to 4 segments - consider making configurable in the future
27
+ const isSubagent = pathParts.length === 4 && pathParts[0] === 'agents';
28
+ const parentName = isSubagent ? pathParts[1] : null;
29
+
30
+ return { isSubagent, parentName };
31
+ }
@@ -0,0 +1,38 @@
1
+ import { relative } from 'node:path';
2
+ import { Glob } from 'bun';
3
+ import AdmZip from 'adm-zip';
4
+
5
+ interface Options {
6
+ progress?: (val: number) => void;
7
+ filter?: (filename: string, relative: string) => boolean;
8
+ }
9
+
10
+ export async function zipDir(dir: string, outdir: string, options?: Options) {
11
+ const zip = new AdmZip();
12
+ const files = await Array.fromAsync(new Glob('**').scan({ cwd: dir, absolute: true }));
13
+ const total = files.length;
14
+ let count = 0;
15
+ for (const file of files) {
16
+ const rel = relative(dir, file);
17
+ let skip = false;
18
+ if (options?.filter) {
19
+ if (!options.filter(file, rel)) {
20
+ skip = true;
21
+ }
22
+ }
23
+ if (!skip) {
24
+ zip.addLocalFile(file, undefined, rel);
25
+ }
26
+ count++;
27
+ if (options?.progress) {
28
+ const progress = Math.floor((count / total) * 100);
29
+ options.progress(progress);
30
+ await Bun.sleep(10); // give some time for the progress bar to render
31
+ }
32
+ }
33
+ await zip.writeZip(outdir);
34
+ if (options?.progress) {
35
+ options.progress(100);
36
+ await Bun.sleep(100); // give some time for the progress bar to render
37
+ }
38
+ }
@@ -1,2 +0,0 @@
1
- export declare const createUserSubcommand: import("../..").SubcommandDefinition;
2
- //# sourceMappingURL=create-user.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-user.d.ts","sourceRoot":"","sources":["../../../src/cmd/example/create-user.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,sCAkC/B,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const createCommand: import("../..").SubcommandDefinition;
2
- //# sourceMappingURL=create.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/cmd/example/create.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,sCA2BxB,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const deploySubcommand: import("../..").SubcommandDefinition;
2
- //# sourceMappingURL=deploy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/cmd/example/deploy.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,sCAgC3B,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const command: import("../..").CommandDefinition;
2
- //# sourceMappingURL=index.d.ts.map