@agentuity/cli 1.0.32 → 1.0.34

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 (270) hide show
  1. package/dist/catalyst.d.ts +3 -1
  2. package/dist/catalyst.d.ts.map +1 -1
  3. package/dist/catalyst.js +5 -1
  4. package/dist/catalyst.js.map +1 -1
  5. package/dist/cmd/cloud/db/create.d.ts.map +1 -1
  6. package/dist/cmd/cloud/db/create.js +8 -10
  7. package/dist/cmd/cloud/db/create.js.map +1 -1
  8. package/dist/cmd/cloud/db/delete.d.ts.map +1 -1
  9. package/dist/cmd/cloud/db/delete.js +12 -14
  10. package/dist/cmd/cloud/db/delete.js.map +1 -1
  11. package/dist/cmd/cloud/db/get.d.ts.map +1 -1
  12. package/dist/cmd/cloud/db/get.js +7 -7
  13. package/dist/cmd/cloud/db/get.js.map +1 -1
  14. package/dist/cmd/cloud/db/list.d.ts.map +1 -1
  15. package/dist/cmd/cloud/db/list.js +5 -5
  16. package/dist/cmd/cloud/db/list.js.map +1 -1
  17. package/dist/cmd/cloud/db/logs.d.ts.map +1 -1
  18. package/dist/cmd/cloud/db/logs.js +7 -7
  19. package/dist/cmd/cloud/db/logs.js.map +1 -1
  20. package/dist/cmd/cloud/db/sql.js +5 -5
  21. package/dist/cmd/cloud/db/sql.js.map +1 -1
  22. package/dist/cmd/cloud/db/stats.d.ts.map +1 -1
  23. package/dist/cmd/cloud/db/stats.js +5 -5
  24. package/dist/cmd/cloud/db/stats.js.map +1 -1
  25. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  26. package/dist/cmd/cloud/deploy.js +1 -1
  27. package/dist/cmd/cloud/deploy.js.map +1 -1
  28. package/dist/cmd/cloud/email/stats.d.ts.map +1 -1
  29. package/dist/cmd/cloud/email/stats.js +5 -5
  30. package/dist/cmd/cloud/email/stats.js.map +1 -1
  31. package/dist/cmd/cloud/email/util.d.ts +2 -2
  32. package/dist/cmd/cloud/email/util.d.ts.map +1 -1
  33. package/dist/cmd/cloud/email/util.js +2 -2
  34. package/dist/cmd/cloud/email/util.js.map +1 -1
  35. package/dist/cmd/cloud/keyvalue/util.d.ts.map +1 -1
  36. package/dist/cmd/cloud/keyvalue/util.js +1 -1
  37. package/dist/cmd/cloud/keyvalue/util.js.map +1 -1
  38. package/dist/cmd/cloud/machine/delete.d.ts.map +1 -1
  39. package/dist/cmd/cloud/machine/delete.js +6 -6
  40. package/dist/cmd/cloud/machine/delete.js.map +1 -1
  41. package/dist/cmd/cloud/machine/deployments.d.ts.map +1 -1
  42. package/dist/cmd/cloud/machine/deployments.js +5 -5
  43. package/dist/cmd/cloud/machine/deployments.js.map +1 -1
  44. package/dist/cmd/cloud/machine/get.d.ts.map +1 -1
  45. package/dist/cmd/cloud/machine/get.js +5 -5
  46. package/dist/cmd/cloud/machine/get.js.map +1 -1
  47. package/dist/cmd/cloud/machine/list.d.ts.map +1 -1
  48. package/dist/cmd/cloud/machine/list.js +5 -5
  49. package/dist/cmd/cloud/machine/list.js.map +1 -1
  50. package/dist/cmd/cloud/queue/consumers.d.ts +3 -0
  51. package/dist/cmd/cloud/queue/consumers.d.ts.map +1 -0
  52. package/dist/cmd/cloud/queue/consumers.js +90 -0
  53. package/dist/cmd/cloud/queue/consumers.js.map +1 -0
  54. package/dist/cmd/cloud/queue/destinations.d.ts.map +1 -1
  55. package/dist/cmd/cloud/queue/destinations.js +20 -3
  56. package/dist/cmd/cloud/queue/destinations.js.map +1 -1
  57. package/dist/cmd/cloud/queue/index.d.ts.map +1 -1
  58. package/dist/cmd/cloud/queue/index.js +2 -0
  59. package/dist/cmd/cloud/queue/index.js.map +1 -1
  60. package/dist/cmd/cloud/queue/util.d.ts +1 -1
  61. package/dist/cmd/cloud/queue/util.d.ts.map +1 -1
  62. package/dist/cmd/cloud/queue/util.js +1 -1
  63. package/dist/cmd/cloud/queue/util.js.map +1 -1
  64. package/dist/cmd/cloud/redis/get.js +5 -5
  65. package/dist/cmd/cloud/redis/get.js.map +1 -1
  66. package/dist/cmd/cloud/sandbox/execution/get.d.ts.map +1 -1
  67. package/dist/cmd/cloud/sandbox/execution/get.js +4 -4
  68. package/dist/cmd/cloud/sandbox/execution/get.js.map +1 -1
  69. package/dist/cmd/cloud/sandbox/execution/list.d.ts.map +1 -1
  70. package/dist/cmd/cloud/sandbox/execution/list.js +5 -5
  71. package/dist/cmd/cloud/sandbox/execution/list.js.map +1 -1
  72. package/dist/cmd/cloud/sandbox/runtime/list.d.ts.map +1 -1
  73. package/dist/cmd/cloud/sandbox/runtime/list.js +4 -4
  74. package/dist/cmd/cloud/sandbox/runtime/list.js.map +1 -1
  75. package/dist/cmd/cloud/sandbox/snapshot/build.js +1 -1
  76. package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
  77. package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -1
  78. package/dist/cmd/cloud/sandbox/snapshot/create.js +5 -5
  79. package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -1
  80. package/dist/cmd/cloud/sandbox/snapshot/delete.d.ts.map +1 -1
  81. package/dist/cmd/cloud/sandbox/snapshot/delete.js +4 -4
  82. package/dist/cmd/cloud/sandbox/snapshot/delete.js.map +1 -1
  83. package/dist/cmd/cloud/sandbox/snapshot/get.d.ts.map +1 -1
  84. package/dist/cmd/cloud/sandbox/snapshot/get.js +4 -4
  85. package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
  86. package/dist/cmd/cloud/sandbox/snapshot/list.d.ts.map +1 -1
  87. package/dist/cmd/cloud/sandbox/snapshot/list.js +4 -4
  88. package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -1
  89. package/dist/cmd/cloud/sandbox/snapshot/tag.d.ts.map +1 -1
  90. package/dist/cmd/cloud/sandbox/snapshot/tag.js +4 -4
  91. package/dist/cmd/cloud/sandbox/snapshot/tag.js.map +1 -1
  92. package/dist/cmd/cloud/sandbox/stats.d.ts.map +1 -1
  93. package/dist/cmd/cloud/sandbox/stats.js +5 -5
  94. package/dist/cmd/cloud/sandbox/stats.js.map +1 -1
  95. package/dist/cmd/cloud/sandbox/util.d.ts +3 -3
  96. package/dist/cmd/cloud/sandbox/util.d.ts.map +1 -1
  97. package/dist/cmd/cloud/sandbox/util.js +5 -5
  98. package/dist/cmd/cloud/sandbox/util.js.map +1 -1
  99. package/dist/cmd/cloud/schedule/stats.d.ts.map +1 -1
  100. package/dist/cmd/cloud/schedule/stats.js +5 -5
  101. package/dist/cmd/cloud/schedule/stats.js.map +1 -1
  102. package/dist/cmd/cloud/schedule/util.d.ts +1 -1
  103. package/dist/cmd/cloud/schedule/util.d.ts.map +1 -1
  104. package/dist/cmd/cloud/schedule/util.js +1 -1
  105. package/dist/cmd/cloud/schedule/util.js.map +1 -1
  106. package/dist/cmd/cloud/services/stats.d.ts.map +1 -1
  107. package/dist/cmd/cloud/services/stats.js +5 -5
  108. package/dist/cmd/cloud/services/stats.js.map +1 -1
  109. package/dist/cmd/cloud/session/get.d.ts.map +1 -1
  110. package/dist/cmd/cloud/session/get.js +5 -5
  111. package/dist/cmd/cloud/session/get.js.map +1 -1
  112. package/dist/cmd/cloud/session/list.d.ts.map +1 -1
  113. package/dist/cmd/cloud/session/list.js +5 -5
  114. package/dist/cmd/cloud/session/list.js.map +1 -1
  115. package/dist/cmd/cloud/storage/config.d.ts.map +1 -1
  116. package/dist/cmd/cloud/storage/config.js +7 -7
  117. package/dist/cmd/cloud/storage/config.js.map +1 -1
  118. package/dist/cmd/cloud/storage/create.d.ts.map +1 -1
  119. package/dist/cmd/cloud/storage/create.js +8 -10
  120. package/dist/cmd/cloud/storage/create.js.map +1 -1
  121. package/dist/cmd/cloud/storage/delete.d.ts.map +1 -1
  122. package/dist/cmd/cloud/storage/delete.js +12 -14
  123. package/dist/cmd/cloud/storage/delete.js.map +1 -1
  124. package/dist/cmd/cloud/storage/download.d.ts.map +1 -1
  125. package/dist/cmd/cloud/storage/download.js +6 -6
  126. package/dist/cmd/cloud/storage/download.js.map +1 -1
  127. package/dist/cmd/cloud/storage/get.d.ts.map +1 -1
  128. package/dist/cmd/cloud/storage/get.js +6 -6
  129. package/dist/cmd/cloud/storage/get.js.map +1 -1
  130. package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
  131. package/dist/cmd/cloud/storage/list.js +6 -6
  132. package/dist/cmd/cloud/storage/list.js.map +1 -1
  133. package/dist/cmd/cloud/storage/upload.d.ts.map +1 -1
  134. package/dist/cmd/cloud/storage/upload.js +7 -7
  135. package/dist/cmd/cloud/storage/upload.js.map +1 -1
  136. package/dist/cmd/cloud/stream/create.js +1 -1
  137. package/dist/cmd/cloud/stream/create.js.map +1 -1
  138. package/dist/cmd/cloud/stream/stats.d.ts.map +1 -1
  139. package/dist/cmd/cloud/stream/stats.js +5 -5
  140. package/dist/cmd/cloud/stream/stats.js.map +1 -1
  141. package/dist/cmd/cloud/task/stats.d.ts.map +1 -1
  142. package/dist/cmd/cloud/task/stats.js +5 -5
  143. package/dist/cmd/cloud/task/stats.js.map +1 -1
  144. package/dist/cmd/cloud/task/util.d.ts +1 -1
  145. package/dist/cmd/cloud/task/util.d.ts.map +1 -1
  146. package/dist/cmd/cloud/task/util.js +2 -2
  147. package/dist/cmd/cloud/task/util.js.map +1 -1
  148. package/dist/cmd/cloud/thread/delete.d.ts.map +1 -1
  149. package/dist/cmd/cloud/thread/delete.js +5 -5
  150. package/dist/cmd/cloud/thread/delete.js.map +1 -1
  151. package/dist/cmd/cloud/thread/get.d.ts.map +1 -1
  152. package/dist/cmd/cloud/thread/get.js +5 -5
  153. package/dist/cmd/cloud/thread/get.js.map +1 -1
  154. package/dist/cmd/cloud/thread/list.d.ts.map +1 -1
  155. package/dist/cmd/cloud/thread/list.js +5 -5
  156. package/dist/cmd/cloud/thread/list.js.map +1 -1
  157. package/dist/cmd/cloud/vector/util.d.ts.map +1 -1
  158. package/dist/cmd/cloud/vector/util.js +1 -1
  159. package/dist/cmd/cloud/vector/util.js.map +1 -1
  160. package/dist/cmd/cloud/webhook/util.d.ts +1 -1
  161. package/dist/cmd/cloud/webhook/util.d.ts.map +1 -1
  162. package/dist/cmd/cloud/webhook/util.js +1 -1
  163. package/dist/cmd/cloud/webhook/util.js.map +1 -1
  164. package/dist/cmd/git/api.d.ts +38 -0
  165. package/dist/cmd/git/api.d.ts.map +1 -1
  166. package/dist/cmd/git/api.js +55 -0
  167. package/dist/cmd/git/api.js.map +1 -1
  168. package/dist/cmd/project/add/database.js +8 -8
  169. package/dist/cmd/project/add/database.js.map +1 -1
  170. package/dist/cmd/project/add/storage.js +8 -8
  171. package/dist/cmd/project/add/storage.js.map +1 -1
  172. package/dist/cmd/project/auth/init.d.ts.map +1 -1
  173. package/dist/cmd/project/auth/init.js +7 -6
  174. package/dist/cmd/project/auth/init.js.map +1 -1
  175. package/dist/cmd/project/auth/shared.d.ts +2 -3
  176. package/dist/cmd/project/auth/shared.d.ts.map +1 -1
  177. package/dist/cmd/project/auth/shared.js +7 -7
  178. package/dist/cmd/project/auth/shared.js.map +1 -1
  179. package/dist/cmd/project/download.d.ts +12 -1
  180. package/dist/cmd/project/download.d.ts.map +1 -1
  181. package/dist/cmd/project/download.js +37 -14
  182. package/dist/cmd/project/download.js.map +1 -1
  183. package/dist/cmd/project/import.d.ts.map +1 -1
  184. package/dist/cmd/project/import.js +67 -9
  185. package/dist/cmd/project/import.js.map +1 -1
  186. package/dist/cmd/project/remote-import.d.ts +41 -0
  187. package/dist/cmd/project/remote-import.d.ts.map +1 -0
  188. package/dist/cmd/project/remote-import.js +1074 -0
  189. package/dist/cmd/project/remote-import.js.map +1 -0
  190. package/dist/cmd/project/template-flow.d.ts +1 -1
  191. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  192. package/dist/cmd/project/template-flow.js +27 -11
  193. package/dist/cmd/project/template-flow.js.map +1 -1
  194. package/dist/config.d.ts +29 -5
  195. package/dist/config.d.ts.map +1 -1
  196. package/dist/config.js +13 -14
  197. package/dist/config.js.map +1 -1
  198. package/dist/schema-parser.d.ts.map +1 -1
  199. package/dist/schema-parser.js +47 -5
  200. package/dist/schema-parser.js.map +1 -1
  201. package/dist/types.d.ts +27 -2
  202. package/dist/types.d.ts.map +1 -1
  203. package/dist/types.js +42 -0
  204. package/dist/types.js.map +1 -1
  205. package/package.json +6 -6
  206. package/src/catalyst.ts +9 -1
  207. package/src/cmd/cloud/db/create.ts +8 -9
  208. package/src/cmd/cloud/db/delete.ts +18 -13
  209. package/src/cmd/cloud/db/get.ts +13 -7
  210. package/src/cmd/cloud/db/list.ts +11 -5
  211. package/src/cmd/cloud/db/logs.ts +13 -7
  212. package/src/cmd/cloud/db/sql.ts +5 -5
  213. package/src/cmd/cloud/db/stats.ts +11 -5
  214. package/src/cmd/cloud/deploy.ts +7 -1
  215. package/src/cmd/cloud/email/stats.ts +11 -5
  216. package/src/cmd/cloud/email/util.ts +4 -4
  217. package/src/cmd/cloud/keyvalue/util.ts +2 -2
  218. package/src/cmd/cloud/machine/delete.ts +12 -6
  219. package/src/cmd/cloud/machine/deployments.ts +11 -5
  220. package/src/cmd/cloud/machine/get.ts +11 -5
  221. package/src/cmd/cloud/machine/list.ts +11 -5
  222. package/src/cmd/cloud/queue/consumers.ts +97 -0
  223. package/src/cmd/cloud/queue/destinations.ts +21 -3
  224. package/src/cmd/cloud/queue/index.ts +2 -0
  225. package/src/cmd/cloud/queue/util.ts +2 -2
  226. package/src/cmd/cloud/redis/get.ts +5 -5
  227. package/src/cmd/cloud/sandbox/execution/get.ts +10 -4
  228. package/src/cmd/cloud/sandbox/execution/list.ts +6 -5
  229. package/src/cmd/cloud/sandbox/runtime/list.ts +10 -4
  230. package/src/cmd/cloud/sandbox/snapshot/build.ts +1 -1
  231. package/src/cmd/cloud/sandbox/snapshot/create.ts +12 -5
  232. package/src/cmd/cloud/sandbox/snapshot/delete.ts +10 -4
  233. package/src/cmd/cloud/sandbox/snapshot/get.ts +12 -6
  234. package/src/cmd/cloud/sandbox/snapshot/list.ts +10 -4
  235. package/src/cmd/cloud/sandbox/snapshot/tag.ts +10 -4
  236. package/src/cmd/cloud/sandbox/stats.ts +11 -5
  237. package/src/cmd/cloud/sandbox/util.ts +14 -7
  238. package/src/cmd/cloud/schedule/stats.ts +11 -5
  239. package/src/cmd/cloud/schedule/util.ts +3 -3
  240. package/src/cmd/cloud/services/stats.ts +13 -7
  241. package/src/cmd/cloud/session/get.ts +14 -8
  242. package/src/cmd/cloud/session/list.ts +11 -5
  243. package/src/cmd/cloud/storage/config.ts +24 -12
  244. package/src/cmd/cloud/storage/create.ts +8 -9
  245. package/src/cmd/cloud/storage/delete.ts +18 -13
  246. package/src/cmd/cloud/storage/download.ts +12 -6
  247. package/src/cmd/cloud/storage/get.ts +12 -6
  248. package/src/cmd/cloud/storage/list.ts +12 -6
  249. package/src/cmd/cloud/storage/upload.ts +13 -7
  250. package/src/cmd/cloud/stream/create.ts +1 -1
  251. package/src/cmd/cloud/stream/stats.ts +11 -5
  252. package/src/cmd/cloud/task/stats.ts +11 -5
  253. package/src/cmd/cloud/task/util.ts +4 -4
  254. package/src/cmd/cloud/thread/delete.ts +11 -5
  255. package/src/cmd/cloud/thread/get.ts +11 -5
  256. package/src/cmd/cloud/thread/list.ts +11 -5
  257. package/src/cmd/cloud/vector/util.ts +2 -2
  258. package/src/cmd/cloud/webhook/util.ts +2 -2
  259. package/src/cmd/git/api.ts +127 -0
  260. package/src/cmd/project/add/database.ts +9 -9
  261. package/src/cmd/project/add/storage.ts +9 -9
  262. package/src/cmd/project/auth/init.ts +11 -10
  263. package/src/cmd/project/auth/shared.ts +15 -10
  264. package/src/cmd/project/download.ts +52 -16
  265. package/src/cmd/project/import.ts +71 -9
  266. package/src/cmd/project/remote-import.ts +1347 -0
  267. package/src/cmd/project/template-flow.ts +38 -22
  268. package/src/config.ts +23 -18
  269. package/src/schema-parser.ts +48 -5
  270. package/src/types.ts +45 -0
@@ -1,44 +1,45 @@
1
- import { basename, resolve } from 'node:path';
2
1
  import { existsSync, readdirSync, rmSync, statSync } from 'node:fs';
3
- import { cwd } from 'node:process';
4
2
  import { homedir } from 'node:os';
3
+ import { basename, resolve } from 'node:path';
4
+ import { cwd } from 'node:process';
5
+ import type { Logger } from '@agentuity/core';
5
6
  import {
6
- projectCreate,
7
- projectExists,
7
+ createResources,
8
+ getServiceUrls,
8
9
  listResources,
10
+ projectCreate,
9
11
  projectEnvUpdate,
10
- getServiceUrls,
12
+ projectExists,
11
13
  APIClient as ServerAPIClient,
12
- createResources,
13
- validateDatabaseName,
14
14
  validateBucketName,
15
+ validateDatabaseName,
15
16
  } from '@agentuity/server';
16
- import type { Logger } from '@agentuity/core';
17
- import * as tui from '../../tui';
18
- import { createPrompt, note } from '../../tui';
19
- import { playSound } from '../../sound';
20
- import { fetchTemplates, type TemplateInfo } from './templates';
21
- import { downloadTemplate, setupProject, initGitRepo } from './download';
22
- import { type AuthData, type Config } from '../../types';
23
- import { ErrorCode } from '../../errors';
24
17
  import type { APIClient } from '../../api';
25
18
  import { createProjectConfig } from '../../config';
19
+ import { promptForDNS } from '../../domain';
26
20
  import {
21
+ addResourceEnvVars,
22
+ type EnvVars,
23
+ filterAgentuitySdkKeys,
27
24
  findExistingEnvFile,
28
25
  readEnvFile,
29
- filterAgentuitySdkKeys,
30
26
  splitEnvAndSecrets,
31
- addResourceEnvVars,
32
- type EnvVars,
33
27
  } from '../../env-util';
34
- import { promptForDNS } from '../../domain';
28
+ import { ErrorCode } from '../../errors';
29
+ import { playSound } from '../../sound';
30
+ import * as tui from '../../tui';
31
+ import { createPrompt, note } from '../../tui';
32
+ import type { AuthData, Config } from '../../types';
33
+ import { getGithubBotIdentity } from '../git/api';
35
34
  import {
36
35
  ensureAuthDependencies,
37
- runAuthMigrations,
38
36
  generateAuthFileContent,
39
- printIntegrationExamples,
40
37
  generateAuthSchemaSql,
38
+ printIntegrationExamples,
39
+ runAuthMigrations,
41
40
  } from './auth/shared';
41
+ import { downloadTemplate, initGitRepo, setupProject } from './download';
42
+ import { fetchTemplates, type TemplateInfo } from './templates';
42
43
 
43
44
  interface CreateFlowOptions {
44
45
  projectName?: string;
@@ -655,6 +656,7 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise<CreateF
655
656
  region,
656
657
  databaseName: authDatabaseName,
657
658
  sql,
659
+ config,
658
660
  });
659
661
  }
660
662
  }
@@ -755,8 +757,22 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise<CreateF
755
757
  }
756
758
  }
757
759
 
760
+ // Fetch GitHub App bot identity for commit authorship (if authenticated)
761
+ let botAuthor: { name: string; email: string } | undefined;
762
+ if (apiClient) {
763
+ try {
764
+ botAuthor = await getGithubBotIdentity(apiClient);
765
+ } catch {
766
+ // Non-fatal: fall back to generic Agentuity author
767
+ }
768
+ }
769
+
758
770
  // Initialize git repository after all files are generated
759
- await initGitRepo(dest);
771
+ await initGitRepo(dest, {
772
+ projectName,
773
+ source: `template: ${selectedTemplate.name}`,
774
+ author: botAuthor,
775
+ });
760
776
 
761
777
  // Show completion message
762
778
  if (isInteractive) {
package/src/config.ts CHANGED
@@ -1,25 +1,29 @@
1
- import { z } from 'zod';
2
1
  import { existsSync, mkdirSync } from 'node:fs';
3
- import { StructuredError, type Logger } from '@agentuity/core';
4
- import { BuildMetadataSchema, type BuildMetadata, getServiceUrls } from '@agentuity/server';
5
- import { APIClient as ServerAPIClient } from '@agentuity/server';
6
- import { YAML } from 'bun';
7
- import { join, extname, basename, resolve, normalize } from 'node:path';
2
+ import { chmod, mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
8
3
  import { homedir } from 'node:os';
9
- import { mkdir, readdir, readFile, writeFile, chmod } from 'node:fs/promises';
4
+ import { basename, extname, join, normalize, resolve } from 'node:path';
5
+ import { type Logger, StructuredError } from '@agentuity/core';
6
+ import {
7
+ type BuildMetadata,
8
+ BuildMetadataSchema,
9
+ getServiceUrls,
10
+ APIClient as ServerAPIClient,
11
+ } from '@agentuity/server';
12
+ import { YAML } from 'bun';
10
13
  import JSON5 from 'json5';
11
- import type { Config, Profile, AuthData } from './types';
12
- import { ConfigSchema, ProjectSchema } from './types';
13
- import * as tui from './tui';
14
+ import { z } from 'zod';
15
+ import { clearProfileCache } from './cache';
14
16
  import { getCatalystUrl } from './catalyst';
17
+ import { readEnvFile, writeEnvFile } from './env-util';
15
18
  import {
19
+ deleteAuthFromKeychain,
20
+ getAuthFromKeychain,
16
21
  isMacOS,
17
22
  saveAuthToKeychain,
18
- getAuthFromKeychain,
19
- deleteAuthFromKeychain,
20
23
  } from './keychain';
21
- import { clearProfileCache } from './cache';
22
- import { readEnvFile, writeEnvFile } from './env-util';
24
+ import * as tui from './tui';
25
+ import type { AuthData, Config, Profile } from './types';
26
+ import { ConfigSchema, ProjectSchema } from './types';
23
27
 
24
28
  export const defaultProfileName = 'production';
25
29
 
@@ -768,16 +772,17 @@ export async function loadProjectSDKKey(
768
772
  logger.trace(`[SDK_KEY] File does not exist: ${fn}`);
769
773
  }
770
774
  }
771
- logger.trace(`[SDK_KEY] AGENTUITY_SDK_KEY not found in any file`);
775
+ logger.trace('[SDK_KEY] AGENTUITY_SDK_KEY not found in any file');
772
776
  }
773
777
 
774
778
  export function getCatalystAPIClient(
775
779
  logger: Logger,
776
780
  auth: AuthData,
777
781
  region: string,
778
- orgId?: string
782
+ orgId?: string,
783
+ config?: Config | null
779
784
  ) {
780
- const catalystUrl = getCatalystUrl(region);
785
+ const catalystUrl = getCatalystUrl(region, config?.overrides);
781
786
  const headers: Record<string, string> = {};
782
787
  if (orgId) {
783
788
  headers['x-agentuity-orgid'] = orgId;
@@ -857,7 +862,7 @@ export async function getGlobalCatalystAPIClient(
857
862
  config?: Config | null
858
863
  ) {
859
864
  const region = await getDefaultRegion(profileName, config);
860
- return getCatalystAPIClient(logger, auth, region, orgId);
865
+ return getCatalystAPIClient(logger, auth, region, orgId, config);
861
866
  }
862
867
 
863
868
  export function getIONHost(config: Config | null, region: string) {
@@ -113,6 +113,34 @@ function getShape(schema: ZodType): Record<string, unknown> {
113
113
  return { ...leftShape, ...rightShape };
114
114
  }
115
115
 
116
+ if (typeId === 'ZodTuple' || typeId === 'tuple') {
117
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
+ const items = (unwrapped as any)._def?.items as unknown[];
119
+ if (Array.isArray(items)) {
120
+ const result: Record<string, unknown> = {};
121
+ for (let i = 0; i < items.length; i++) {
122
+ const item = items[i] as ZodTypeInternal;
123
+ // Try to extract a name from the description — check the item directly (Zod 4),
124
+ // the _def (Zod 3), and the unwrapped inner schema
125
+ const desc =
126
+ (item as unknown as { description?: string })?.description ||
127
+ item?._def?.description ||
128
+ (unwrapSchema(item) as ZodTypeInternal)?._def?.description ||
129
+ (unwrapSchema(item) as unknown as { description?: string })?.description;
130
+ let name = `arg${i}`;
131
+ if (desc) {
132
+ // Slugify: lowercase, replace non-alphanumeric with dashes, trim
133
+ name = desc
134
+ .toLowerCase()
135
+ .replace(/[^a-z0-9]+/g, '-')
136
+ .replace(/^-|-$/g, '');
137
+ }
138
+ result[name] = item;
139
+ }
140
+ return result;
141
+ }
142
+ }
143
+
116
144
  return {};
117
145
  }
118
146
 
@@ -371,11 +399,26 @@ export function buildValidationInput(
371
399
  const result = { args: {} as Record<string, unknown>, options: {} as Record<string, unknown> };
372
400
 
373
401
  if (schemas.args) {
374
- const parsed = parseArgsSchema(schemas.args);
375
- for (let i = 0; i < parsed.names.length; i++) {
376
- const name = parsed.names[i];
377
- if (name !== undefined) {
378
- result.args[name] = rawArgs[i];
402
+ // Check if the schema is a tuple — tuples need array input, not object
403
+ const unwrapped = unwrapSchema(schemas.args) as ZodTypeInternal;
404
+ const typeId = unwrapped?._def?.typeName || unwrapped?._def?.type;
405
+ if (typeId === 'ZodTuple' || typeId === 'tuple') {
406
+ // Tuple schemas — map each item to a named key from the schema
407
+ // (rawArgs may include trailing Commander.js options object)
408
+ const parsed = parseArgsSchema(schemas.args);
409
+ for (let i = 0; i < parsed.names.length; i++) {
410
+ const name = parsed.names[i];
411
+ if (name !== undefined) {
412
+ result.args[name] = rawArgs[i];
413
+ }
414
+ }
415
+ } else {
416
+ const parsed = parseArgsSchema(schemas.args);
417
+ for (let i = 0; i < parsed.names.length; i++) {
418
+ const name = parsed.names[i];
419
+ if (name !== undefined) {
420
+ result.args[name] = rawArgs[i];
421
+ }
379
422
  }
380
423
  }
381
424
  }
package/src/types.ts CHANGED
@@ -716,6 +716,50 @@ export type SubcommandDefinition =
716
716
  optional?: Optional & { auth?: never };
717
717
  });
718
718
 
719
+ const TemplateResourceSchema = zod.object({
720
+ type: zod.enum(['database', 'queue']).describe('the type of resource required'),
721
+ envVar: zod
722
+ .string()
723
+ .describe('the environment variable that holds the resource connection info'),
724
+ description: zod.string().optional().describe('human-readable description of the resource'),
725
+ defaultName: zod
726
+ .string()
727
+ .optional()
728
+ .describe('suggested default name when provisioning this resource'),
729
+ queueType: zod
730
+ .enum(['worker', 'pubsub'])
731
+ .optional()
732
+ .describe('queue type — required when type is "queue"'),
733
+ });
734
+
735
+ const TemplateEnvSchema = zod.object({
736
+ key: zod.string().describe('the environment variable name'),
737
+ required: zod.boolean().describe('whether this env var is required'),
738
+ description: zod.string().optional().describe('human-readable description'),
739
+ secret: zod.boolean().optional().describe('whether this env var is a secret'),
740
+ defaultValue: zod.string().optional().describe('default or example value'),
741
+ });
742
+
743
+ const TemplateSchema = zod.object({
744
+ source: zod
745
+ .string()
746
+ .optional()
747
+ .describe('where the template came from (e.g. github.com/owner/repo)'),
748
+ requirements: zod
749
+ .object({
750
+ resources: zod
751
+ .array(TemplateResourceSchema)
752
+ .optional()
753
+ .describe('platform resources the project needs'),
754
+ env: zod
755
+ .array(TemplateEnvSchema)
756
+ .optional()
757
+ .describe('environment variables the project needs'),
758
+ })
759
+ .optional()
760
+ .describe('what the template requires to run'),
761
+ });
762
+
719
763
  export const ProjectSchema = zod.object({
720
764
  projectId: zod.string().describe('the project id'),
721
765
  orgId: zod.string().describe('the organization id'),
@@ -726,6 +770,7 @@ export const ProjectSchema = zod.object({
726
770
  .boolean()
727
771
  .optional()
728
772
  .describe('whether to skip the git integration setup prompt during deploy'),
773
+ template: TemplateSchema.optional().describe('template metadata and requirements'),
729
774
  });
730
775
 
731
776
  export const BuildMetadataSchema = ServerBuildMetadataSchema;