@agentuity/cli 0.0.69 → 0.0.71

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 (159) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/cmd/ai/capabilities/show.d.ts.map +1 -1
  4. package/dist/cmd/ai/capabilities/show.js +0 -13
  5. package/dist/cmd/ai/capabilities/show.js.map +1 -1
  6. package/dist/cmd/ai/prompt/agent.js +1 -1
  7. package/dist/cmd/ai/prompt/api.js +1 -1
  8. package/dist/cmd/build/ast.d.ts +1 -2
  9. package/dist/cmd/build/ast.d.ts.map +1 -1
  10. package/dist/cmd/build/ast.js +261 -260
  11. package/dist/cmd/build/ast.js.map +1 -1
  12. package/dist/cmd/build/bundler.d.ts +4 -1
  13. package/dist/cmd/build/bundler.d.ts.map +1 -1
  14. package/dist/cmd/build/bundler.js +89 -6
  15. package/dist/cmd/build/bundler.js.map +1 -1
  16. package/dist/cmd/build/index.d.ts.map +1 -1
  17. package/dist/cmd/build/index.js +2 -1
  18. package/dist/cmd/build/index.js.map +1 -1
  19. package/dist/cmd/build/plugin.d.ts.map +1 -1
  20. package/dist/cmd/build/plugin.js +152 -414
  21. package/dist/cmd/build/plugin.js.map +1 -1
  22. package/dist/cmd/build/route-registry.d.ts +36 -0
  23. package/dist/cmd/build/route-registry.d.ts.map +1 -0
  24. package/dist/cmd/build/route-registry.js +151 -0
  25. package/dist/cmd/build/route-registry.js.map +1 -0
  26. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  27. package/dist/cmd/cloud/deploy.js +2 -0
  28. package/dist/cmd/cloud/deploy.js.map +1 -1
  29. package/dist/cmd/cloud/index.d.ts.map +1 -1
  30. package/dist/cmd/cloud/index.js +0 -2
  31. package/dist/cmd/cloud/index.js.map +1 -1
  32. package/dist/cmd/dev/index.d.ts.map +1 -1
  33. package/dist/cmd/dev/index.js +4 -3
  34. package/dist/cmd/dev/index.js.map +1 -1
  35. package/dist/cmd/dev/sync.d.ts.map +1 -1
  36. package/dist/cmd/dev/sync.js +0 -15
  37. package/dist/cmd/dev/sync.js.map +1 -1
  38. package/dist/cmd/dev/templates.d.ts.map +1 -1
  39. package/dist/cmd/dev/templates.js +11 -35
  40. package/dist/cmd/dev/templates.js.map +1 -1
  41. package/dist/cmd/profile/create.d.ts.map +1 -1
  42. package/dist/cmd/profile/create.js +0 -1
  43. package/dist/cmd/profile/create.js.map +1 -1
  44. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  45. package/dist/cmd/project/template-flow.js +64 -53
  46. package/dist/cmd/project/template-flow.js.map +1 -1
  47. package/dist/config.d.ts.map +1 -1
  48. package/dist/config.js +0 -3
  49. package/dist/config.js.map +1 -1
  50. package/dist/env-util.d.ts.map +1 -1
  51. package/dist/env-util.js +0 -3
  52. package/dist/env-util.js.map +1 -1
  53. package/dist/tui/box.d.ts +19 -0
  54. package/dist/tui/box.d.ts.map +1 -0
  55. package/dist/tui/box.js +160 -0
  56. package/dist/tui/box.js.map +1 -0
  57. package/dist/tui/colors.d.ts +20 -0
  58. package/dist/tui/colors.d.ts.map +1 -0
  59. package/dist/tui/colors.js +52 -0
  60. package/dist/tui/colors.js.map +1 -0
  61. package/dist/tui/group.d.ts +25 -0
  62. package/dist/tui/group.d.ts.map +1 -0
  63. package/dist/tui/group.js +32 -0
  64. package/dist/tui/group.js.map +1 -0
  65. package/dist/tui/prompt.d.ts +65 -0
  66. package/dist/tui/prompt.d.ts.map +1 -0
  67. package/dist/tui/prompt.js +377 -0
  68. package/dist/tui/prompt.js.map +1 -0
  69. package/dist/tui/symbols.d.ts +32 -0
  70. package/dist/tui/symbols.d.ts.map +1 -0
  71. package/dist/tui/symbols.js +52 -0
  72. package/dist/tui/symbols.js.map +1 -0
  73. package/dist/tui.d.ts +6 -0
  74. package/dist/tui.d.ts.map +1 -1
  75. package/dist/tui.js +6 -0
  76. package/dist/tui.js.map +1 -1
  77. package/dist/types.d.ts +0 -24
  78. package/dist/types.d.ts.map +1 -1
  79. package/dist/types.js +0 -1
  80. package/dist/types.js.map +1 -1
  81. package/package.json +3 -3
  82. package/src/cmd/ai/capabilities/show.ts +0 -13
  83. package/src/cmd/ai/prompt/agent.ts +1 -1
  84. package/src/cmd/ai/prompt/api.ts +1 -1
  85. package/src/cmd/build/ast.ts +364 -334
  86. package/src/cmd/build/bundler.ts +123 -9
  87. package/src/cmd/build/index.ts +2 -1
  88. package/src/cmd/build/plugin.ts +171 -493
  89. package/src/cmd/build/route-registry.ts +198 -0
  90. package/src/cmd/cloud/deploy.ts +2 -0
  91. package/src/cmd/cloud/index.ts +0 -2
  92. package/src/cmd/dev/index.ts +4 -3
  93. package/src/cmd/dev/sync.ts +0 -28
  94. package/src/cmd/dev/templates.ts +11 -35
  95. package/src/cmd/profile/create.ts +0 -1
  96. package/src/cmd/project/template-flow.ts +77 -57
  97. package/src/config.ts +0 -3
  98. package/src/env-util.ts +0 -3
  99. package/src/tui/box.ts +202 -0
  100. package/src/tui/colors.ts +55 -0
  101. package/src/tui/group.ts +56 -0
  102. package/src/tui/prompt.ts +506 -0
  103. package/src/tui/symbols.ts +64 -0
  104. package/src/tui.ts +14 -0
  105. package/src/types.ts +0 -1
  106. package/dist/cmd/cloud/objectstore/delete-bucket.d.ts +0 -3
  107. package/dist/cmd/cloud/objectstore/delete-bucket.d.ts.map +0 -1
  108. package/dist/cmd/cloud/objectstore/delete-bucket.js +0 -72
  109. package/dist/cmd/cloud/objectstore/delete-bucket.js.map +0 -1
  110. package/dist/cmd/cloud/objectstore/delete.d.ts +0 -3
  111. package/dist/cmd/cloud/objectstore/delete.d.ts.map +0 -1
  112. package/dist/cmd/cloud/objectstore/delete.js +0 -65
  113. package/dist/cmd/cloud/objectstore/delete.js.map +0 -1
  114. package/dist/cmd/cloud/objectstore/get.d.ts +0 -3
  115. package/dist/cmd/cloud/objectstore/get.d.ts.map +0 -1
  116. package/dist/cmd/cloud/objectstore/get.js +0 -75
  117. package/dist/cmd/cloud/objectstore/get.js.map +0 -1
  118. package/dist/cmd/cloud/objectstore/index.d.ts +0 -3
  119. package/dist/cmd/cloud/objectstore/index.d.ts.map +0 -1
  120. package/dist/cmd/cloud/objectstore/index.js +0 -36
  121. package/dist/cmd/cloud/objectstore/index.js.map +0 -1
  122. package/dist/cmd/cloud/objectstore/list-buckets.d.ts +0 -3
  123. package/dist/cmd/cloud/objectstore/list-buckets.d.ts.map +0 -1
  124. package/dist/cmd/cloud/objectstore/list-buckets.js +0 -46
  125. package/dist/cmd/cloud/objectstore/list-buckets.js.map +0 -1
  126. package/dist/cmd/cloud/objectstore/list-keys.d.ts +0 -3
  127. package/dist/cmd/cloud/objectstore/list-keys.d.ts.map +0 -1
  128. package/dist/cmd/cloud/objectstore/list-keys.js +0 -58
  129. package/dist/cmd/cloud/objectstore/list-keys.js.map +0 -1
  130. package/dist/cmd/cloud/objectstore/put.d.ts +0 -3
  131. package/dist/cmd/cloud/objectstore/put.d.ts.map +0 -1
  132. package/dist/cmd/cloud/objectstore/put.js +0 -66
  133. package/dist/cmd/cloud/objectstore/put.js.map +0 -1
  134. package/dist/cmd/cloud/objectstore/repl.d.ts +0 -3
  135. package/dist/cmd/cloud/objectstore/repl.d.ts.map +0 -1
  136. package/dist/cmd/cloud/objectstore/repl.js +0 -224
  137. package/dist/cmd/cloud/objectstore/repl.js.map +0 -1
  138. package/dist/cmd/cloud/objectstore/url.d.ts +0 -3
  139. package/dist/cmd/cloud/objectstore/url.d.ts.map +0 -1
  140. package/dist/cmd/cloud/objectstore/url.js +0 -64
  141. package/dist/cmd/cloud/objectstore/url.js.map +0 -1
  142. package/dist/cmd/cloud/objectstore/util.d.ts +0 -11
  143. package/dist/cmd/cloud/objectstore/util.d.ts.map +0 -1
  144. package/dist/cmd/cloud/objectstore/util.js +0 -18
  145. package/dist/cmd/cloud/objectstore/util.js.map +0 -1
  146. package/src/cmd/build/ast.test.ts +0 -418
  147. package/src/cmd/build/fix-duplicate-exports.test.ts +0 -387
  148. package/src/cmd/cloud/objectstore/delete-bucket.ts +0 -77
  149. package/src/cmd/cloud/objectstore/delete.ts +0 -67
  150. package/src/cmd/cloud/objectstore/get.ts +0 -77
  151. package/src/cmd/cloud/objectstore/index.ts +0 -36
  152. package/src/cmd/cloud/objectstore/list-buckets.ts +0 -51
  153. package/src/cmd/cloud/objectstore/list-keys.ts +0 -63
  154. package/src/cmd/cloud/objectstore/put.ts +0 -74
  155. package/src/cmd/cloud/objectstore/repl.ts +0 -239
  156. package/src/cmd/cloud/objectstore/url.ts +0 -67
  157. package/src/cmd/cloud/objectstore/util.ts +0 -29
  158. package/src/crypto/box.test.ts +0 -431
  159. package/src/env-util.test.ts +0 -194
@@ -1,14 +1,13 @@
1
1
  import { $ } from 'bun';
2
2
  import { join, relative, resolve, dirname, basename } from 'node:path';
3
- import { cpSync, existsSync, mkdirSync, rmSync } from 'node:fs';
3
+ import { cpSync, existsSync, mkdirSync, rmSync, readdirSync } from 'node:fs';
4
4
  import gitParseUrl from 'git-url-parse';
5
5
  import AgentuityBundler, { getBuildMetadata } from './plugin';
6
6
  import { getFilesRecursively } from './file';
7
7
  import { getVersion } from '../../version';
8
8
  import type { Project } from '../../types';
9
9
  import { fixDuplicateExportsInDirectory } from './fix-duplicate-exports';
10
- import { createLogger } from '@agentuity/server';
11
- import type { LogLevel } from '../../types';
10
+ import type { Logger } from '../../types';
12
11
  import { generateWorkbenchMainTsx, generateWorkbenchIndexHtml } from './workbench-templates';
13
12
  import { analyzeWorkbench } from './ast';
14
13
  import { StructuredError } from '@agentuity/core';
@@ -27,6 +26,8 @@ export interface BundleOptions extends DeployOptions {
27
26
  project?: Project;
28
27
  port?: number;
29
28
  outDir?: string;
29
+ region: string;
30
+ logger: Logger;
30
31
  }
31
32
 
32
33
  type BuildResult = Awaited<ReturnType<typeof Bun.build>>;
@@ -73,6 +74,8 @@ export async function bundle({
73
74
  pullRequestURL,
74
75
  message,
75
76
  env,
77
+ region,
78
+ logger,
76
79
  }: BundleOptions) {
77
80
  const appFile = join(rootDir, 'app.ts');
78
81
  if (!existsSync(appFile)) {
@@ -148,6 +151,101 @@ export async function bundle({
148
151
  }
149
152
  }
150
153
 
154
+ // Common externals for native modules (same as legacy CLI)
155
+ const commonExternals = ['bun', 'fsevents', 'chromium-bidi', 'sharp'];
156
+
157
+ // OpenTelemetry packages need to be externalized due to CommonJS/ESM hybrid issues
158
+ const otelExternals = ['@opentelemetry/*', '@traceloop/*'];
159
+
160
+ // Allow projects to specify custom externals via package.json "externals" field
161
+ const customExternals: string[] = [];
162
+ if (pkgContents.externals && Array.isArray(pkgContents.externals)) {
163
+ customExternals.push(...pkgContents.externals.filter((e: unknown) => typeof e === 'string'));
164
+ }
165
+
166
+ const externalPatterns = [...commonExternals, ...otelExternals, ...customExternals];
167
+
168
+ // For production builds: install externals FIRST, then discover full dependency tree
169
+ // This prevents bundling dependencies that will be in node_modules anyway
170
+ let external = externalPatterns;
171
+ if (!dev) {
172
+ logger.debug('Installing externalized packages to discover full dependency tree...');
173
+
174
+ // Step 1: Collect packages matching external patterns
175
+ const externalInstalls: string[] = [];
176
+ for (const pattern of externalPatterns) {
177
+ if (pattern.endsWith('/*')) {
178
+ const prefix = pattern.slice(0, -2);
179
+ const nmDir = join(rootDir, 'node_modules', prefix);
180
+ if (existsSync(nmDir)) {
181
+ const entries = readdirSync(nmDir);
182
+ for (const entry of entries) {
183
+ const pkgName = `${prefix}/${entry}`;
184
+ if (existsSync(join(rootDir, 'node_modules', pkgName))) {
185
+ externalInstalls.push(pkgName);
186
+ }
187
+ }
188
+ }
189
+ } else {
190
+ if (existsSync(join(rootDir, 'node_modules', pattern))) {
191
+ externalInstalls.push(pattern);
192
+ }
193
+ }
194
+ }
195
+
196
+ // Step 2: Write minimal package.json and install externals
197
+ if (externalInstalls.length > 0) {
198
+ await Bun.write(
199
+ `${outDir}/package.json`,
200
+ JSON.stringify({ name: pkgContents.name, version: pkgContents.version }, null, 2)
201
+ );
202
+
203
+ logger.debug(
204
+ 'Installing %d packages: %s',
205
+ externalInstalls.length,
206
+ externalInstalls.join(', ')
207
+ );
208
+ await $`bun install --no-save --ignore-scripts --target=bun-linux-x64 ${externalInstalls}`
209
+ .cwd(outDir)
210
+ .quiet();
211
+
212
+ // Step 3: Scan what actually got installed (includes transitive dependencies)
213
+ const installedNmDir = join(outDir, 'node_modules');
214
+ if (existsSync(installedNmDir)) {
215
+ const allInstalled: string[] = [];
216
+
217
+ // Recursively find all installed packages
218
+ const scanDir = (dir: string, prefix = '') => {
219
+ const entries = readdirSync(dir, { withFileTypes: true });
220
+ for (const entry of entries) {
221
+ if (entry.isDirectory()) {
222
+ const pkgName = prefix ? `${prefix}/${entry.name}` : entry.name;
223
+
224
+ // Check if this is a package (has package.json)
225
+ if (existsSync(join(dir, entry.name, 'package.json'))) {
226
+ allInstalled.push(pkgName);
227
+ }
228
+
229
+ // Recurse into scoped packages (@org/package)
230
+ if (entry.name.startsWith('@')) {
231
+ scanDir(join(dir, entry.name), entry.name);
232
+ }
233
+ }
234
+ }
235
+ };
236
+
237
+ scanDir(installedNmDir);
238
+ logger.debug(
239
+ 'Discovered %d total packages (including dependencies)',
240
+ allInstalled.length
241
+ );
242
+
243
+ // Step 4: Use ALL installed packages as externals for bundling
244
+ external = allInstalled;
245
+ }
246
+ }
247
+ }
248
+
151
249
  await (async () => {
152
250
  const config: Bun.BuildConfig = {
153
251
  entrypoints: appEntrypoints,
@@ -166,6 +264,7 @@ export async function bundle({
166
264
  drop: isProd ? ['debugger'] : undefined,
167
265
  splitting: true,
168
266
  conditions: [isProd ? 'production' : 'development', 'bun'],
267
+ external,
169
268
  naming: {
170
269
  entry: '[dir]/[name].[ext]',
171
270
  chunk: 'chunk/[name]-[hash].[ext]',
@@ -259,6 +358,7 @@ export async function bundle({
259
358
  mkdirSync(webOutDir, { recursive: true });
260
359
  mkdirSync(join(webOutDir, 'chunk'), { recursive: true });
261
360
  mkdirSync(join(webOutDir, 'asset'), { recursive: true });
361
+ const isLocalRegion = region === 'local' || region === 'l';
262
362
 
263
363
  const config: Bun.BuildConfig = {
264
364
  entrypoints: webEntrypoints,
@@ -276,8 +376,10 @@ export async function bundle({
276
376
  splitting: true,
277
377
  packages: 'bundle',
278
378
  external: workspaceRoot !== rootDir ? [] : undefined,
379
+ // Ensure React is resolved from the consuming app's node_modules
380
+ conditions: ['browser', 'import', 'default'],
279
381
  publicPath:
280
- isProd && deploymentId
382
+ isProd && deploymentId && !isLocalRegion
281
383
  ? `https://static.agentuity.com/${deploymentId}/`
282
384
  : undefined,
283
385
  naming: {
@@ -323,7 +425,6 @@ export async function bundle({
323
425
  // Create workbench config with proper defaults
324
426
  const defaultConfig = { route: '/workbench', headers: {}, port: port || 3500 };
325
427
  const config = { ...defaultConfig, ...analysis.config };
326
- const logger = createLogger((process.env.AGENTUITY_LOG_LEVEL as LogLevel) || 'info');
327
428
  try {
328
429
  // Generate workbench files on the fly instead of using files from package
329
430
  const tempWorkbenchDir = join(outDir, 'temp-workbench');
@@ -564,13 +665,26 @@ export async function bundle({
564
665
  }
565
666
  }
566
667
 
567
- await Bun.write(
568
- `${outDir}/package.json`,
569
- JSON.stringify({ name: pkgContents.name, version: pkgContents.version }, null, 2)
570
- );
668
+ // Write minimal package.json for dev mode (production already wrote it above)
669
+ if (dev) {
670
+ await Bun.write(
671
+ `${outDir}/package.json`,
672
+ JSON.stringify({ name: pkgContents.name, version: pkgContents.version }, null, 2)
673
+ );
674
+ }
571
675
 
572
676
  await Bun.write(
573
677
  `${outDir}/agentuity.metadata.json`,
574
678
  dev ? JSON.stringify(buildmetadata, null, 2) : JSON.stringify(buildmetadata)
575
679
  );
680
+
681
+ // Generate route mapping file for runtime route tracking
682
+ const routeMapping: Record<string, string> = {};
683
+ for (const route of buildmetadata.routes ?? []) {
684
+ routeMapping[`${route.method} ${route.path}`] = route.id;
685
+ }
686
+ await Bun.write(
687
+ `${outDir}/.routemapping.json`,
688
+ dev ? JSON.stringify(routeMapping, null, 2) : JSON.stringify(routeMapping)
689
+ );
576
690
  }
@@ -56,7 +56,6 @@ export const command = createCommand({
56
56
  env.set('AGENTUITY_TRANSPORT_URL', serviceUrls.catalyst);
57
57
  env.set('AGENTUITY_CATALYST_URL', serviceUrls.catalyst);
58
58
  env.set('AGENTUITY_VECTOR_URL', serviceUrls.vector);
59
- env.set('AGENTUITY_OBJECTSTORE_URL', serviceUrls.objectstore);
60
59
  env.set('AGENTUITY_KEYVALUE_URL', serviceUrls.keyvalue);
61
60
  env.set('AGENTUITY_STREAM_URL', serviceUrls.stream);
62
61
  env.set('AGENTUITY_CLOUD_ORG_ID', project.orgId);
@@ -74,6 +73,8 @@ export const command = createCommand({
74
73
  orgId: project?.orgId,
75
74
  projectId: project?.projectId,
76
75
  env,
76
+ region: project?.region ?? 'local',
77
+ logger: ctx.logger,
77
78
  });
78
79
 
79
80
  // Run TypeScript type checking after registry generation (skip in dev mode)