@agentuity/cli 0.0.104 → 0.0.106

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 (214) hide show
  1. package/bin/cli.ts +6 -3
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +93 -21
  4. package/dist/cli.js.map +1 -1
  5. package/dist/cmd/ai/prompt/version.d.ts +1 -0
  6. package/dist/cmd/ai/prompt/version.d.ts.map +1 -1
  7. package/dist/cmd/ai/prompt/version.js +3 -2
  8. package/dist/cmd/ai/prompt/version.js.map +1 -1
  9. package/dist/cmd/build/ast.d.ts.map +1 -1
  10. package/dist/cmd/build/ast.js +179 -37
  11. package/dist/cmd/build/ast.js.map +1 -1
  12. package/dist/cmd/build/entry-generator.d.ts.map +1 -1
  13. package/dist/cmd/build/entry-generator.js +24 -14
  14. package/dist/cmd/build/entry-generator.js.map +1 -1
  15. package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
  16. package/dist/cmd/build/vite/registry-generator.js +8 -9
  17. package/dist/cmd/build/vite/registry-generator.js.map +1 -1
  18. package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -1
  19. package/dist/cmd/build/vite/vite-asset-server.js.map +1 -1
  20. package/dist/cmd/cloud/db/create.d.ts.map +1 -1
  21. package/dist/cmd/cloud/db/create.js +11 -2
  22. package/dist/cmd/cloud/db/create.js.map +1 -1
  23. package/dist/cmd/cloud/db/delete.d.ts.map +1 -1
  24. package/dist/cmd/cloud/db/delete.js +13 -2
  25. package/dist/cmd/cloud/db/delete.js.map +1 -1
  26. package/dist/cmd/cloud/deploy.js +3 -3
  27. package/dist/cmd/cloud/deploy.js.map +1 -1
  28. package/dist/cmd/cloud/env/delete.js +1 -1
  29. package/dist/cmd/cloud/env/delete.js.map +1 -1
  30. package/dist/cmd/cloud/env/import.js +4 -4
  31. package/dist/cmd/cloud/env/import.js.map +1 -1
  32. package/dist/cmd/cloud/env/pull.d.ts.map +1 -1
  33. package/dist/cmd/cloud/env/pull.js +7 -9
  34. package/dist/cmd/cloud/env/pull.js.map +1 -1
  35. package/dist/cmd/cloud/env/push.js +2 -2
  36. package/dist/cmd/cloud/env/push.js.map +1 -1
  37. package/dist/cmd/cloud/env/set.js +3 -3
  38. package/dist/cmd/cloud/env/set.js.map +1 -1
  39. package/dist/cmd/cloud/index.d.ts.map +1 -1
  40. package/dist/cmd/cloud/index.js +2 -0
  41. package/dist/cmd/cloud/index.js.map +1 -1
  42. package/dist/cmd/cloud/sandbox/cp.d.ts +3 -0
  43. package/dist/cmd/cloud/sandbox/cp.d.ts.map +1 -0
  44. package/dist/cmd/cloud/sandbox/cp.js +334 -0
  45. package/dist/cmd/cloud/sandbox/cp.js.map +1 -0
  46. package/dist/cmd/cloud/sandbox/create.d.ts +3 -0
  47. package/dist/cmd/cloud/sandbox/create.d.ts.map +1 -0
  48. package/dist/cmd/cloud/sandbox/create.js +105 -0
  49. package/dist/cmd/cloud/sandbox/create.js.map +1 -0
  50. package/dist/cmd/cloud/sandbox/delete.d.ts +3 -0
  51. package/dist/cmd/cloud/sandbox/delete.d.ts.map +1 -0
  52. package/dist/cmd/cloud/sandbox/delete.js +72 -0
  53. package/dist/cmd/cloud/sandbox/delete.js.map +1 -0
  54. package/dist/cmd/cloud/sandbox/exec.d.ts +3 -0
  55. package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -0
  56. package/dist/cmd/cloud/sandbox/exec.js +211 -0
  57. package/dist/cmd/cloud/sandbox/exec.js.map +1 -0
  58. package/dist/cmd/cloud/sandbox/execution/get.d.ts +3 -0
  59. package/dist/cmd/cloud/sandbox/execution/get.d.ts.map +1 -0
  60. package/dist/cmd/cloud/sandbox/execution/get.js +96 -0
  61. package/dist/cmd/cloud/sandbox/execution/get.js.map +1 -0
  62. package/dist/cmd/cloud/sandbox/execution/index.d.ts +3 -0
  63. package/dist/cmd/cloud/sandbox/execution/index.d.ts.map +1 -0
  64. package/dist/cmd/cloud/sandbox/execution/index.js +24 -0
  65. package/dist/cmd/cloud/sandbox/execution/index.js.map +1 -0
  66. package/dist/cmd/cloud/sandbox/execution/list.d.ts +3 -0
  67. package/dist/cmd/cloud/sandbox/execution/list.d.ts.map +1 -0
  68. package/dist/cmd/cloud/sandbox/execution/list.js +100 -0
  69. package/dist/cmd/cloud/sandbox/execution/list.js.map +1 -0
  70. package/dist/cmd/cloud/sandbox/get.d.ts +3 -0
  71. package/dist/cmd/cloud/sandbox/get.d.ts.map +1 -0
  72. package/dist/cmd/cloud/sandbox/get.js +95 -0
  73. package/dist/cmd/cloud/sandbox/get.js.map +1 -0
  74. package/dist/cmd/cloud/sandbox/index.d.ts +3 -0
  75. package/dist/cmd/cloud/sandbox/index.d.ts.map +1 -0
  76. package/dist/cmd/cloud/sandbox/index.js +45 -0
  77. package/dist/cmd/cloud/sandbox/index.js.map +1 -0
  78. package/dist/cmd/cloud/sandbox/list.d.ts +3 -0
  79. package/dist/cmd/cloud/sandbox/list.d.ts.map +1 -0
  80. package/dist/cmd/cloud/sandbox/list.js +120 -0
  81. package/dist/cmd/cloud/sandbox/list.js.map +1 -0
  82. package/dist/cmd/cloud/sandbox/run.d.ts +3 -0
  83. package/dist/cmd/cloud/sandbox/run.d.ts.map +1 -0
  84. package/dist/cmd/cloud/sandbox/run.js +152 -0
  85. package/dist/cmd/cloud/sandbox/run.js.map +1 -0
  86. package/dist/cmd/cloud/sandbox/snapshot/create.d.ts +3 -0
  87. package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -0
  88. package/dist/cmd/cloud/sandbox/snapshot/create.js +65 -0
  89. package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -0
  90. package/dist/cmd/cloud/sandbox/snapshot/delete.d.ts +3 -0
  91. package/dist/cmd/cloud/sandbox/snapshot/delete.d.ts.map +1 -0
  92. package/dist/cmd/cloud/sandbox/snapshot/delete.js +66 -0
  93. package/dist/cmd/cloud/sandbox/snapshot/delete.js.map +1 -0
  94. package/dist/cmd/cloud/sandbox/snapshot/get.d.ts +3 -0
  95. package/dist/cmd/cloud/sandbox/snapshot/get.d.ts.map +1 -0
  96. package/dist/cmd/cloud/sandbox/snapshot/get.js +154 -0
  97. package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -0
  98. package/dist/cmd/cloud/sandbox/snapshot/index.d.ts +3 -0
  99. package/dist/cmd/cloud/sandbox/snapshot/index.d.ts.map +1 -0
  100. package/dist/cmd/cloud/sandbox/snapshot/index.js +27 -0
  101. package/dist/cmd/cloud/sandbox/snapshot/index.js.map +1 -0
  102. package/dist/cmd/cloud/sandbox/snapshot/list.d.ts +3 -0
  103. package/dist/cmd/cloud/sandbox/snapshot/list.d.ts.map +1 -0
  104. package/dist/cmd/cloud/sandbox/snapshot/list.js +83 -0
  105. package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -0
  106. package/dist/cmd/cloud/sandbox/snapshot/tag.d.ts +3 -0
  107. package/dist/cmd/cloud/sandbox/snapshot/tag.d.ts.map +1 -0
  108. package/dist/cmd/cloud/sandbox/snapshot/tag.js +63 -0
  109. package/dist/cmd/cloud/sandbox/snapshot/tag.js.map +1 -0
  110. package/dist/cmd/cloud/sandbox/util.d.ts +15 -0
  111. package/dist/cmd/cloud/sandbox/util.d.ts.map +1 -0
  112. package/dist/cmd/cloud/sandbox/util.js +50 -0
  113. package/dist/cmd/cloud/sandbox/util.js.map +1 -0
  114. package/dist/cmd/cloud/secret/delete.d.ts.map +1 -1
  115. package/dist/cmd/cloud/secret/delete.js +3 -3
  116. package/dist/cmd/cloud/secret/delete.js.map +1 -1
  117. package/dist/cmd/cloud/secret/import.js +6 -6
  118. package/dist/cmd/cloud/secret/import.js.map +1 -1
  119. package/dist/cmd/cloud/secret/index.d.ts.map +1 -1
  120. package/dist/cmd/cloud/secret/index.js +1 -0
  121. package/dist/cmd/cloud/secret/index.js.map +1 -1
  122. package/dist/cmd/cloud/secret/pull.d.ts.map +1 -1
  123. package/dist/cmd/cloud/secret/pull.js +7 -9
  124. package/dist/cmd/cloud/secret/pull.js.map +1 -1
  125. package/dist/cmd/cloud/secret/push.js +3 -3
  126. package/dist/cmd/cloud/secret/push.js.map +1 -1
  127. package/dist/cmd/cloud/secret/set.d.ts.map +1 -1
  128. package/dist/cmd/cloud/secret/set.js +3 -3
  129. package/dist/cmd/cloud/secret/set.js.map +1 -1
  130. package/dist/cmd/cloud/storage/create.d.ts.map +1 -1
  131. package/dist/cmd/cloud/storage/create.js +13 -2
  132. package/dist/cmd/cloud/storage/create.js.map +1 -1
  133. package/dist/cmd/cloud/storage/delete.d.ts.map +1 -1
  134. package/dist/cmd/cloud/storage/delete.js +13 -2
  135. package/dist/cmd/cloud/storage/delete.js.map +1 -1
  136. package/dist/cmd/cloud/stream/list.d.ts.map +1 -1
  137. package/dist/cmd/cloud/stream/list.js +2 -13
  138. package/dist/cmd/cloud/stream/list.js.map +1 -1
  139. package/dist/cmd/dev/index.d.ts.map +1 -1
  140. package/dist/cmd/dev/index.js +14 -1
  141. package/dist/cmd/dev/index.js.map +1 -1
  142. package/dist/cmd/profile/create.d.ts.map +1 -1
  143. package/dist/cmd/profile/create.js +1 -0
  144. package/dist/cmd/profile/create.js.map +1 -1
  145. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  146. package/dist/cmd/project/template-flow.js +27 -10
  147. package/dist/cmd/project/template-flow.js.map +1 -1
  148. package/dist/config.d.ts +0 -2
  149. package/dist/config.d.ts.map +1 -1
  150. package/dist/config.js +3 -0
  151. package/dist/config.js.map +1 -1
  152. package/dist/env-util.d.ts +16 -8
  153. package/dist/env-util.d.ts.map +1 -1
  154. package/dist/env-util.js +46 -18
  155. package/dist/env-util.js.map +1 -1
  156. package/dist/tui.d.ts +20 -3
  157. package/dist/tui.d.ts.map +1 -1
  158. package/dist/tui.js +82 -23
  159. package/dist/tui.js.map +1 -1
  160. package/dist/types.d.ts +18 -4
  161. package/dist/types.d.ts.map +1 -1
  162. package/dist/types.js +1 -0
  163. package/dist/types.js.map +1 -1
  164. package/package.json +4 -4
  165. package/src/cli.ts +99 -21
  166. package/src/cmd/ai/prompt/api.md +26 -21
  167. package/src/cmd/ai/prompt/version.ts +3 -2
  168. package/src/cmd/build/ast.ts +214 -37
  169. package/src/cmd/build/entry-generator.ts +24 -14
  170. package/src/cmd/build/vite/registry-generator.ts +8 -11
  171. package/src/cmd/build/vite/vite-asset-server.ts +3 -1
  172. package/src/cmd/cloud/db/create.ts +13 -2
  173. package/src/cmd/cloud/db/delete.ts +15 -2
  174. package/src/cmd/cloud/deploy.ts +3 -3
  175. package/src/cmd/cloud/env/delete.ts +1 -1
  176. package/src/cmd/cloud/env/import.ts +4 -4
  177. package/src/cmd/cloud/env/pull.ts +7 -16
  178. package/src/cmd/cloud/env/push.ts +2 -2
  179. package/src/cmd/cloud/env/set.ts +3 -3
  180. package/src/cmd/cloud/index.ts +2 -0
  181. package/src/cmd/cloud/sandbox/cp.ts +531 -0
  182. package/src/cmd/cloud/sandbox/create.ts +114 -0
  183. package/src/cmd/cloud/sandbox/delete.ts +80 -0
  184. package/src/cmd/cloud/sandbox/exec.ts +254 -0
  185. package/src/cmd/cloud/sandbox/execution/get.ts +106 -0
  186. package/src/cmd/cloud/sandbox/execution/index.ts +25 -0
  187. package/src/cmd/cloud/sandbox/execution/list.ts +111 -0
  188. package/src/cmd/cloud/sandbox/get.ts +104 -0
  189. package/src/cmd/cloud/sandbox/index.ts +46 -0
  190. package/src/cmd/cloud/sandbox/list.ts +129 -0
  191. package/src/cmd/cloud/sandbox/run.ts +170 -0
  192. package/src/cmd/cloud/sandbox/snapshot/create.ts +71 -0
  193. package/src/cmd/cloud/sandbox/snapshot/delete.ts +74 -0
  194. package/src/cmd/cloud/sandbox/snapshot/get.ts +188 -0
  195. package/src/cmd/cloud/sandbox/snapshot/index.ts +28 -0
  196. package/src/cmd/cloud/sandbox/snapshot/list.ts +90 -0
  197. package/src/cmd/cloud/sandbox/snapshot/tag.ts +70 -0
  198. package/src/cmd/cloud/sandbox/util.ts +59 -0
  199. package/src/cmd/cloud/secret/delete.ts +8 -3
  200. package/src/cmd/cloud/secret/import.ts +6 -6
  201. package/src/cmd/cloud/secret/index.ts +1 -0
  202. package/src/cmd/cloud/secret/pull.ts +7 -16
  203. package/src/cmd/cloud/secret/push.ts +3 -3
  204. package/src/cmd/cloud/secret/set.ts +8 -3
  205. package/src/cmd/cloud/storage/create.ts +15 -2
  206. package/src/cmd/cloud/storage/delete.ts +15 -2
  207. package/src/cmd/cloud/stream/list.ts +2 -9
  208. package/src/cmd/dev/index.ts +18 -1
  209. package/src/cmd/profile/create.ts +1 -0
  210. package/src/cmd/project/template-flow.ts +29 -13
  211. package/src/config.ts +3 -0
  212. package/src/env-util.ts +52 -21
  213. package/src/tui.ts +131 -39
  214. package/src/types.ts +18 -16
@@ -57,6 +57,7 @@ export async function generateEntryFile(options: GenerateEntryOptions): Promise<
57
57
  ` getAppState,`,
58
58
  ` getAppConfig,`,
59
59
  ` register,`,
60
+ ` getSpanProcessors,`,
60
61
  ` createServices,`,
61
62
  ` runAgentSetups,`,
62
63
  ` getThreadProvider,`,
@@ -84,7 +85,7 @@ export async function generateEntryFile(options: GenerateEntryOptions): Promise<
84
85
  ].filter(Boolean);
85
86
 
86
87
  imports.push(`import { type LogLevel } from '@agentuity/core';`);
87
- imports.push(`import { bootstrapRuntimeEnv } from '@agentuity/runtime';`);
88
+ imports.push(`import { bootstrapRuntimeEnv, patchBunS3ForStorageDev } from '@agentuity/runtime';`);
88
89
 
89
90
  // Generate route mounting code for all discovered routes
90
91
  const routeImportsAndMounts: string[] = [];
@@ -329,13 +330,18 @@ if (isDevelopment()) {
329
330
  if (typeof Bun !== 'undefined') {
330
331
  // Enable process exit protection now that we're starting the server
331
332
  enableProcessExitProtection();
332
-
333
+
333
334
  const port = parseInt(process.env.PORT || '3500', 10);
334
335
  const server = Bun.serve({
335
- fetch: app.fetch,
336
+ fetch: (req, server) => {
337
+ // Get timeout from config on each request (0 = no timeout)
338
+ server.timeout(req, getAppConfig()?.requestTimeout ?? 0);
339
+ return app.fetch(req, server);
340
+ },
336
341
  websocket,
337
342
  port,
338
343
  hostname: '127.0.0.1',
344
+ development: isDevelopment(),
339
345
  });
340
346
 
341
347
  // Make server available globally for health checks
@@ -423,19 +429,14 @@ if (isDevelopment()) {
423
429
  await bootstrapRuntimeEnv({ projectDir: import.meta.dir + '/../..' });
424
430
  }
425
431
 
432
+ // Step 0.5: Patch Bun's S3 client for Agentuity storage endpoints
433
+ // Agentuity storage uses virtual-hosted-style URLs (*.storage.dev)
434
+ // This patches s3.file() to automatically set virtualHostedStyle: true
435
+ patchBunS3ForStorageDev();
436
+
426
437
  // Step 1: Initialize telemetry and services
427
438
  const serverUrl = \`http://127.0.0.1:\${process.env.PORT || '3500'}\`;
428
- const otel = register({ processors: [], logLevel: (process.env.AGENTUITY_LOG_LEVEL || 'info') as LogLevel });
429
-
430
- // Get app state and config for use below
431
- const appState = getAppState();
432
- const appConfig = getAppConfig();
433
-
434
- createServices(otel.logger, appConfig, serverUrl);
435
-
436
- // Make logger and tracer globally available for user's app.ts
437
- setGlobalLogger(otel.logger);
438
- setGlobalTracer(otel.tracer);
439
+ const otel = register({ processors: getSpanProcessors(), logLevel: (process.env.AGENTUITY_LOG_LEVEL || 'info') as LogLevel });
439
440
 
440
441
  // Step 2: Create router and set as global
441
442
  const app = createRouter();
@@ -465,6 +466,15 @@ app.use('/api/*', createAgentMiddleware(''));
465
466
  await import('../../app.js');
466
467
 
467
468
  // Step 5: Initialize providers
469
+ const appState = getAppState();
470
+ const appConfig = getAppConfig();
471
+
472
+ createServices(otel.logger, appConfig, serverUrl);
473
+
474
+ // Make logger and tracer globally available for user's app.ts
475
+ setGlobalLogger(otel.logger);
476
+ setGlobalTracer(otel.tracer);
477
+
468
478
  const threadProvider = getThreadProvider();
469
479
  const sessionProvider = getSessionProvider();
470
480
 
@@ -289,12 +289,11 @@ function generateRPCRegistryType(
289
289
  .replace(/_+/g, '_');
290
290
  const pascalName = toPascalCase(safeName);
291
291
 
292
- // Only reference type names if route has schemas, otherwise use 'never'
292
+ // Only reference type names if route has actual schemas extracted, otherwise use 'never'
293
+ // Note: hasValidator may be true (e.g., zValidator('query', ...)) but no schemas extracted
294
+ // because only 'json' validators extract input schemas
293
295
  const hasSchemas =
294
- route.hasValidator ||
295
- route.inputSchemaVariable ||
296
- route.outputSchemaVariable ||
297
- route.agentVariable;
296
+ route.inputSchemaVariable || route.outputSchemaVariable || route.agentVariable;
298
297
 
299
298
  current[terminalMethod] = {
300
299
  input: hasSchemas ? `${pascalName}Input` : 'never',
@@ -725,12 +724,10 @@ export function generateRouteRegistry(
725
724
  .replace(/_+/g, '_');
726
725
  const pascalName = toPascalCase(safeName);
727
726
 
728
- if (
729
- !route.hasValidator &&
730
- !route.inputSchemaVariable &&
731
- !route.outputSchemaVariable &&
732
- !route.agentVariable
733
- ) {
727
+ // Use 'never' types if no schemas were actually extracted
728
+ // Note: hasValidator may be true (e.g., zValidator('query', ...)) but no schemas extracted
729
+ // because only 'json' validators extract input schemas
730
+ if (!route.inputSchemaVariable && !route.outputSchemaVariable && !route.agentVariable) {
734
731
  const streamValue = route.stream === true ? 'true' : 'false';
735
732
  return `\t'${routeKey}': {
736
733
  \t\tinputSchema: never;
@@ -59,7 +59,9 @@ export async function startViteAssetServer(
59
59
  new Promise<never>((_, reject) => {
60
60
  const timeoutId = setTimeout(() => {
61
61
  reject(
62
- new Error(`Vite asset server failed to start within ${STARTUP_TIMEOUT_MS / 1000}s`)
62
+ new Error(
63
+ `Vite asset server failed to start within ${STARTUP_TIMEOUT_MS / 1000}s`
64
+ )
63
65
  );
64
66
  }, STARTUP_TIMEOUT_MS);
65
67
  // Clean up timeout when listen succeeds (via finally in the outer try)
@@ -6,6 +6,7 @@ import { getCatalystAPIClient } from '../../../config';
6
6
  import { getCommand } from '../../../command-prefix';
7
7
  import { isDryRunMode, outputDryRun } from '../../../explain';
8
8
  import { ErrorCode } from '../../../errors';
9
+ import { addResourceEnvVars } from '../../../env-util';
9
10
 
10
11
  export const createSubcommand = defineSubcommand({
11
12
  name: 'create',
@@ -62,12 +63,22 @@ export const createSubcommand = defineSubcommand({
62
63
  },
63
64
  });
64
65
  if (created.length > 0) {
66
+ const resource = created[0];
67
+
68
+ // Write environment variables to .env if running inside a project
69
+ if (ctx.projectDir && resource.env && Object.keys(resource.env).length > 0) {
70
+ await addResourceEnvVars(ctx.projectDir, resource.env);
71
+ if (!options.json) {
72
+ tui.info('Environment variables written to .env');
73
+ }
74
+ }
75
+
65
76
  if (!options.json) {
66
- tui.success(`Created database: ${tui.bold(created[0].name)}`);
77
+ tui.success(`Created database: ${tui.bold(resource.name)}`);
67
78
  }
68
79
  return {
69
80
  success: true,
70
- name: created[0].name,
81
+ name: resource.name,
71
82
  };
72
83
  } else {
73
84
  tui.fatal('Failed to create database');
@@ -7,6 +7,7 @@ import { getCatalystAPIClient } from '../../../config';
7
7
  import { getCommand } from '../../../command-prefix';
8
8
  import { isDryRunMode, outputDryRun } from '../../../explain';
9
9
  import { ErrorCode } from '../../../errors';
10
+ import { removeResourceEnvVars } from '../../../env-util';
10
11
 
11
12
  export const deleteSubcommand = createSubcommand({
12
13
  name: 'delete',
@@ -109,10 +110,22 @@ export const deleteSubcommand = createSubcommand({
109
110
  });
110
111
 
111
112
  if (deleted.length > 0) {
112
- tui.success(`Deleted database: ${tui.bold(deleted[0])}`);
113
+ const resource = deleted[0];
114
+
115
+ // Remove env vars from .env if running inside a project
116
+ if (ctx.projectDir && resource.env_keys.length > 0) {
117
+ await removeResourceEnvVars(ctx.projectDir, resource.env_keys);
118
+ if (!options.json) {
119
+ tui.info(`Removed ${resource.env_keys.join(', ')} from .env`);
120
+ }
121
+ }
122
+
123
+ if (!options.json) {
124
+ tui.success(`Deleted database: ${tui.bold(resource.name)}`);
125
+ }
113
126
  return {
114
127
  success: true,
115
- name: deleted[0],
128
+ name: resource.name,
116
129
  };
117
130
  } else {
118
131
  tui.error('Failed to delete database');
@@ -34,7 +34,7 @@ import {
34
34
  getAppBaseURL,
35
35
  } from '@agentuity/server';
36
36
  import {
37
- findEnvFile,
37
+ findExistingEnvFile,
38
38
  readEnvFile,
39
39
  filterAgentuitySdkKeys,
40
40
  splitEnvAndSecrets,
@@ -176,8 +176,8 @@ export const deploySubcommand = createSubcommand({
176
176
  label: 'Sync Env & Secrets',
177
177
  run: async () => {
178
178
  try {
179
- // Read local env file (.env.production or .env)
180
- const envFilePath = await findEnvFile(projectDir);
179
+ // Read env file
180
+ const envFilePath = await findExistingEnvFile(projectDir);
181
181
  const localEnv = await readEnvFile(envFilePath);
182
182
 
183
183
  // Filter out AGENTUITY_ keys
@@ -45,7 +45,7 @@ export const deleteSubcommand = createSubcommand({
45
45
  });
46
46
  });
47
47
 
48
- // Update local .env file (prefer .env.production, fallback to .env)
48
+ // Update local .env file (prefer .env)
49
49
  const envFilePath = await findExistingEnvFile(projectDir);
50
50
  const currentEnv = await readEnvFile(envFilePath);
51
51
  delete currentEnv[args.key];
@@ -3,7 +3,7 @@ import { createSubcommand } from '../../../types';
3
3
  import * as tui from '../../../tui';
4
4
  import { projectEnvUpdate } from '@agentuity/server';
5
5
  import {
6
- findEnvFile,
6
+ findExistingEnvFile,
7
7
  readEnvFile,
8
8
  writeEnvFile,
9
9
  filterAgentuitySdkKeys,
@@ -23,7 +23,7 @@ const EnvImportResponseSchema = z.object({
23
23
 
24
24
  export const importSubcommand = createSubcommand({
25
25
  name: 'import',
26
- description: 'Import environment variables from a file to cloud and local .env.production',
26
+ description: 'Import environment variables from a file to cloud and local .env',
27
27
  tags: [
28
28
  'mutating',
29
29
  'creates-resource',
@@ -131,8 +131,8 @@ export const importSubcommand = createSubcommand({
131
131
  });
132
132
  });
133
133
 
134
- // Merge with local .env.production file
135
- const localEnvPath = await findEnvFile(projectDir);
134
+ // Merge environment
135
+ const localEnvPath = await findExistingEnvFile(projectDir);
136
136
  const localEnv = await readEnvFile(localEnvPath);
137
137
  const mergedEnv = mergeEnvVars(localEnv, filteredEnv);
138
138
 
@@ -3,13 +3,7 @@ import { join } from 'node:path';
3
3
  import { createSubcommand } from '../../../types';
4
4
  import * as tui from '../../../tui';
5
5
  import { projectGet } from '@agentuity/server';
6
- import {
7
- findEnvFile,
8
- findExistingEnvFile,
9
- readEnvFile,
10
- writeEnvFile,
11
- mergeEnvVars,
12
- } from '../../../env-util';
6
+ import { findExistingEnvFile, readEnvFile, writeEnvFile, mergeEnvVars } from '../../../env-util';
13
7
  import { getCommand } from '../../../command-prefix';
14
8
 
15
9
  const EnvPullResponseSchema = z.object({
@@ -21,7 +15,7 @@ const EnvPullResponseSchema = z.object({
21
15
 
22
16
  export const pullSubcommand = createSubcommand({
23
17
  name: 'pull',
24
- description: 'Pull environment variables from cloud to local .env.production file',
18
+ description: 'Pull environment variables from cloud to local .env file',
25
19
  tags: ['slow', 'requires-auth', 'requires-project'],
26
20
  idempotent: true,
27
21
  examples: [
@@ -45,14 +39,11 @@ export const pullSubcommand = createSubcommand({
45
39
  return projectGet(apiClient, { id: project.projectId, mask: false });
46
40
  });
47
41
 
48
- const cloudEnv = projectData.env || {};
42
+ const cloudEnv = { ...projectData.env, ...projectData.secrets }; // env pull with actually do both secrets and env since thats likely what the user would want
49
43
 
50
- // Read current local env from existing file (.env.production or .env)
51
- const existingEnvPath = await findExistingEnvFile(projectDir);
52
- const localEnv = await readEnvFile(existingEnvPath);
53
-
54
- // Target file is always .env.production
55
- const targetEnvPath = await findEnvFile(projectDir);
44
+ // Target file is always .env
45
+ const targetEnvPath = await findExistingEnvFile(projectDir);
46
+ const localEnv = await readEnvFile(targetEnvPath);
56
47
 
57
48
  // Merge: cloud values override local if force=true, otherwise keep local
58
49
  let mergedEnv: Record<string, string>;
@@ -64,7 +55,7 @@ export const pullSubcommand = createSubcommand({
64
55
  mergedEnv = mergeEnvVars(cloudEnv, localEnv);
65
56
  }
66
57
 
67
- // Write to .env.production (skip AGENTUITY_ keys)
58
+ // Write to .env (skip AGENTUITY_ keys)
68
59
  await writeEnvFile(targetEnvPath, mergedEnv, {
69
60
  skipKeys: Object.keys(mergedEnv).filter((k) => k.startsWith('AGENTUITY_')),
70
61
  });
@@ -13,7 +13,7 @@ const EnvPushResponseSchema = z.object({
13
13
 
14
14
  export const pushSubcommand = createSubcommand({
15
15
  name: 'push',
16
- description: 'Push environment variables from local .env.production file to cloud',
16
+ description: 'Push environment variables from local .env file to cloud',
17
17
  tags: [
18
18
  'mutating',
19
19
  'updates-resource',
@@ -33,7 +33,7 @@ export const pushSubcommand = createSubcommand({
33
33
  async handler(ctx) {
34
34
  const { apiClient, project, projectDir } = ctx;
35
35
 
36
- // Read local env file (prefer .env.production, fallback to .env)
36
+ // Read local env file (prefer .env)
37
37
  const envFilePath = await findExistingEnvFile(projectDir);
38
38
  const localEnv = await readEnvFile(envFilePath);
39
39
 
@@ -3,7 +3,7 @@ import { createSubcommand } from '../../../types';
3
3
  import * as tui from '../../../tui';
4
4
  import { projectEnvUpdate } from '@agentuity/server';
5
5
  import {
6
- findEnvFile,
6
+ findExistingEnvFile,
7
7
  readEnvFile,
8
8
  writeEnvFile,
9
9
  filterAgentuitySdkKeys,
@@ -75,8 +75,8 @@ export const setSubcommand = createSubcommand({
75
75
  });
76
76
  });
77
77
 
78
- // Update local .env.production file
79
- const envFilePath = await findEnvFile(projectDir);
78
+ // Update local .env file
79
+ const envFilePath = await findExistingEnvFile(projectDir);
80
80
  const currentEnv = await readEnvFile(envFilePath);
81
81
  currentEnv[args.key] = args.value;
82
82
 
@@ -15,6 +15,7 @@ import secretCommand from './secret';
15
15
  import apikeyCommand from './apikey';
16
16
  import streamCommand from './stream';
17
17
  import vectorCommand from './vector';
18
+ import sandboxCommand from './sandbox';
18
19
  import { getCommand } from '../../command-prefix';
19
20
 
20
21
  export const command = createCommand({
@@ -31,6 +32,7 @@ export const command = createCommand({
31
32
  agentCommand,
32
33
  streamCommand,
33
34
  vectorCommand,
35
+ sandboxCommand,
34
36
  envCommand,
35
37
  secretCommand,
36
38
  deploySubcommand,