@agentuity/cli 0.0.100 → 0.0.102

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 (264) hide show
  1. package/AGENTS.md +19 -188
  2. package/bin/cli.ts +13 -6
  3. package/dist/api.d.ts +1 -0
  4. package/dist/api.d.ts.map +1 -1
  5. package/dist/api.js +1 -1
  6. package/dist/api.js.map +1 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +41 -12
  9. package/dist/cli.js.map +1 -1
  10. package/dist/cmd/ai/index.d.ts.map +1 -1
  11. package/dist/cmd/ai/index.js +6 -1
  12. package/dist/cmd/ai/index.js.map +1 -1
  13. package/dist/cmd/ai/prompt/agent.d.ts +7 -0
  14. package/dist/cmd/ai/prompt/agent.d.ts.map +1 -1
  15. package/dist/cmd/ai/prompt/agent.js +12 -323
  16. package/dist/cmd/ai/prompt/agent.js.map +1 -1
  17. package/dist/cmd/ai/prompt/api.d.ts +7 -0
  18. package/dist/cmd/ai/prompt/api.d.ts.map +1 -1
  19. package/dist/cmd/ai/prompt/api.js +12 -260
  20. package/dist/cmd/ai/prompt/api.js.map +1 -1
  21. package/dist/cmd/ai/prompt/version.d.ts +35 -0
  22. package/dist/cmd/ai/prompt/version.d.ts.map +1 -0
  23. package/dist/cmd/ai/prompt/version.js +55 -0
  24. package/dist/cmd/ai/prompt/version.js.map +1 -0
  25. package/dist/cmd/ai/prompt/web.d.ts +7 -0
  26. package/dist/cmd/ai/prompt/web.d.ts.map +1 -1
  27. package/dist/cmd/ai/prompt/web.js +12 -283
  28. package/dist/cmd/ai/prompt/web.js.map +1 -1
  29. package/dist/cmd/ai/skills/generate.d.ts +3 -0
  30. package/dist/cmd/ai/skills/generate.d.ts.map +1 -0
  31. package/dist/cmd/ai/skills/generate.js +65 -0
  32. package/dist/cmd/ai/skills/generate.js.map +1 -0
  33. package/dist/cmd/ai/skills/generator.d.ts +4 -0
  34. package/dist/cmd/ai/skills/generator.d.ts.map +1 -0
  35. package/dist/cmd/ai/skills/generator.js +402 -0
  36. package/dist/cmd/ai/skills/generator.js.map +1 -0
  37. package/dist/cmd/ai/skills/index.d.ts +4 -0
  38. package/dist/cmd/ai/skills/index.d.ts.map +1 -0
  39. package/dist/cmd/ai/skills/index.js +21 -0
  40. package/dist/cmd/ai/skills/index.js.map +1 -0
  41. package/dist/cmd/auth/signup.d.ts.map +1 -1
  42. package/dist/cmd/auth/signup.js +1 -0
  43. package/dist/cmd/auth/signup.js.map +1 -1
  44. package/dist/cmd/build/ast.d.ts +2 -1
  45. package/dist/cmd/build/ast.d.ts.map +1 -1
  46. package/dist/cmd/build/ast.js +135 -47
  47. package/dist/cmd/build/ast.js.map +1 -1
  48. package/dist/cmd/build/entry-generator.d.ts.map +1 -1
  49. package/dist/cmd/build/entry-generator.js +255 -188
  50. package/dist/cmd/build/entry-generator.js.map +1 -1
  51. package/dist/cmd/build/vite/agent-discovery.d.ts.map +1 -1
  52. package/dist/cmd/build/vite/agent-discovery.js +103 -45
  53. package/dist/cmd/build/vite/agent-discovery.js.map +1 -1
  54. package/dist/cmd/build/vite/bun-dev-server.d.ts +7 -1
  55. package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
  56. package/dist/cmd/build/vite/bun-dev-server.js +52 -26
  57. package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
  58. package/dist/cmd/build/vite/docs-generator.d.ts +13 -0
  59. package/dist/cmd/build/vite/docs-generator.d.ts.map +1 -0
  60. package/dist/cmd/build/vite/docs-generator.js +81 -0
  61. package/dist/cmd/build/vite/docs-generator.js.map +1 -0
  62. package/dist/cmd/build/vite/index.d.ts +3 -3
  63. package/dist/cmd/build/vite/index.d.ts.map +1 -1
  64. package/dist/cmd/build/vite/index.js +9 -7
  65. package/dist/cmd/build/vite/index.js.map +1 -1
  66. package/dist/cmd/build/vite/lifecycle-generator.d.ts +1 -1
  67. package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +1 -1
  68. package/dist/cmd/build/vite/lifecycle-generator.js +19 -5
  69. package/dist/cmd/build/vite/lifecycle-generator.js.map +1 -1
  70. package/dist/cmd/build/vite/metadata-generator.d.ts.map +1 -1
  71. package/dist/cmd/build/vite/metadata-generator.js +203 -7
  72. package/dist/cmd/build/vite/metadata-generator.js.map +1 -1
  73. package/dist/cmd/build/vite/prompt-generator.d.ts +23 -0
  74. package/dist/cmd/build/vite/prompt-generator.d.ts.map +1 -0
  75. package/dist/cmd/build/vite/prompt-generator.js +123 -0
  76. package/dist/cmd/build/vite/prompt-generator.js.map +1 -0
  77. package/dist/cmd/build/vite/registry-generator.d.ts +3 -3
  78. package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
  79. package/dist/cmd/build/vite/registry-generator.js +644 -103
  80. package/dist/cmd/build/vite/registry-generator.js.map +1 -1
  81. package/dist/cmd/build/vite/route-discovery.d.ts +4 -0
  82. package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
  83. package/dist/cmd/build/vite/route-discovery.js.map +1 -1
  84. package/dist/cmd/build/vite/server-bundler.d.ts +4 -0
  85. package/dist/cmd/build/vite/server-bundler.d.ts.map +1 -1
  86. package/dist/cmd/build/vite/server-bundler.js +63 -17
  87. package/dist/cmd/build/vite/server-bundler.js.map +1 -1
  88. package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
  89. package/dist/cmd/build/vite/vite-asset-server-config.js +4 -0
  90. package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
  91. package/dist/cmd/build/vite/vite-builder.d.ts +1 -1
  92. package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
  93. package/dist/cmd/build/vite/vite-builder.js +118 -96
  94. package/dist/cmd/build/vite/vite-builder.js.map +1 -1
  95. package/dist/cmd/build/vite-bundler.js +6 -6
  96. package/dist/cmd/build/vite-bundler.js.map +1 -1
  97. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  98. package/dist/cmd/cloud/deploy.js +89 -32
  99. package/dist/cmd/cloud/deploy.js.map +1 -1
  100. package/dist/cmd/cloud/keyvalue/create-namespace.d.ts.map +1 -1
  101. package/dist/cmd/cloud/keyvalue/create-namespace.js +3 -1
  102. package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -1
  103. package/dist/cmd/cloud/keyvalue/delete-namespace.d.ts.map +1 -1
  104. package/dist/cmd/cloud/keyvalue/delete-namespace.js +3 -1
  105. package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -1
  106. package/dist/cmd/cloud/keyvalue/delete.d.ts.map +1 -1
  107. package/dist/cmd/cloud/keyvalue/delete.js +3 -1
  108. package/dist/cmd/cloud/keyvalue/delete.js.map +1 -1
  109. package/dist/cmd/cloud/keyvalue/set.d.ts.map +1 -1
  110. package/dist/cmd/cloud/keyvalue/set.js +4 -2
  111. package/dist/cmd/cloud/keyvalue/set.js.map +1 -1
  112. package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
  113. package/dist/cmd/cloud/stream/get.js +2 -13
  114. package/dist/cmd/cloud/stream/get.js.map +1 -1
  115. package/dist/cmd/cloud/vector/delete-namespace.d.ts +3 -0
  116. package/dist/cmd/cloud/vector/delete-namespace.d.ts.map +1 -0
  117. package/dist/cmd/cloud/vector/delete-namespace.js +77 -0
  118. package/dist/cmd/cloud/vector/delete-namespace.js.map +1 -0
  119. package/dist/cmd/cloud/vector/index.d.ts.map +1 -1
  120. package/dist/cmd/cloud/vector/index.js +21 -4
  121. package/dist/cmd/cloud/vector/index.js.map +1 -1
  122. package/dist/cmd/cloud/vector/list-namespaces.d.ts +3 -0
  123. package/dist/cmd/cloud/vector/list-namespaces.d.ts.map +1 -0
  124. package/dist/cmd/cloud/vector/list-namespaces.js +42 -0
  125. package/dist/cmd/cloud/vector/list-namespaces.js.map +1 -0
  126. package/dist/cmd/cloud/vector/stats.d.ts +3 -0
  127. package/dist/cmd/cloud/vector/stats.d.ts.map +1 -0
  128. package/dist/cmd/cloud/vector/stats.js +142 -0
  129. package/dist/cmd/cloud/vector/stats.js.map +1 -0
  130. package/dist/cmd/cloud/vector/upsert.d.ts +3 -0
  131. package/dist/cmd/cloud/vector/upsert.d.ts.map +1 -0
  132. package/dist/cmd/cloud/vector/upsert.js +192 -0
  133. package/dist/cmd/cloud/vector/upsert.js.map +1 -0
  134. package/dist/cmd/dev/file-watcher.d.ts.map +1 -1
  135. package/dist/cmd/dev/file-watcher.js +94 -33
  136. package/dist/cmd/dev/file-watcher.js.map +1 -1
  137. package/dist/cmd/dev/index.d.ts.map +1 -1
  138. package/dist/cmd/dev/index.js +298 -61
  139. package/dist/cmd/dev/index.js.map +1 -1
  140. package/dist/cmd/dev/skills.d.ts +10 -0
  141. package/dist/cmd/dev/skills.d.ts.map +1 -0
  142. package/dist/cmd/dev/skills.js +57 -0
  143. package/dist/cmd/dev/skills.js.map +1 -0
  144. package/dist/cmd/dev/sync.d.ts.map +1 -1
  145. package/dist/cmd/dev/sync.js +19 -3
  146. package/dist/cmd/dev/sync.js.map +1 -1
  147. package/dist/cmd/index.d.ts.map +1 -1
  148. package/dist/cmd/index.js +1 -0
  149. package/dist/cmd/index.js.map +1 -1
  150. package/dist/cmd/project/create.d.ts.map +1 -1
  151. package/dist/cmd/project/create.js +3 -0
  152. package/dist/cmd/project/create.js.map +1 -1
  153. package/dist/cmd/project/template-flow.d.ts +1 -0
  154. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  155. package/dist/cmd/project/template-flow.js +30 -5
  156. package/dist/cmd/project/template-flow.js.map +1 -1
  157. package/dist/cmd/setup/index.d.ts.map +1 -1
  158. package/dist/cmd/setup/index.js +1 -0
  159. package/dist/cmd/setup/index.js.map +1 -1
  160. package/dist/cmd/upgrade/index.d.ts +15 -0
  161. package/dist/cmd/upgrade/index.d.ts.map +1 -1
  162. package/dist/cmd/upgrade/index.js +59 -4
  163. package/dist/cmd/upgrade/index.js.map +1 -1
  164. package/dist/config.d.ts.map +1 -1
  165. package/dist/config.js +8 -0
  166. package/dist/config.js.map +1 -1
  167. package/dist/domain.d.ts +45 -0
  168. package/dist/domain.d.ts.map +1 -0
  169. package/dist/domain.js +200 -0
  170. package/dist/domain.js.map +1 -0
  171. package/dist/index.d.ts +0 -1
  172. package/dist/index.d.ts.map +1 -1
  173. package/dist/index.js +0 -1
  174. package/dist/index.js.map +1 -1
  175. package/dist/schema-generator.d.ts +2 -0
  176. package/dist/schema-generator.d.ts.map +1 -1
  177. package/dist/schema-generator.js +18 -0
  178. package/dist/schema-generator.js.map +1 -1
  179. package/dist/steps.d.ts +1 -1
  180. package/dist/steps.d.ts.map +1 -1
  181. package/dist/steps.js +16 -5
  182. package/dist/steps.js.map +1 -1
  183. package/dist/tui/prompt.d.ts +1 -2
  184. package/dist/tui/prompt.d.ts.map +1 -1
  185. package/dist/tui/prompt.js +8 -4
  186. package/dist/tui/prompt.js.map +1 -1
  187. package/dist/tui.d.ts +16 -0
  188. package/dist/tui.d.ts.map +1 -1
  189. package/dist/tui.js +23 -2
  190. package/dist/tui.js.map +1 -1
  191. package/dist/types.d.ts +9 -2
  192. package/dist/types.d.ts.map +1 -1
  193. package/dist/types.js +3 -3
  194. package/dist/types.js.map +1 -1
  195. package/package.json +5 -8
  196. package/src/api.ts +1 -1
  197. package/src/cli.ts +47 -12
  198. package/src/cmd/ai/index.ts +6 -1
  199. package/src/cmd/ai/prompt/agent.md +306 -0
  200. package/src/cmd/ai/prompt/agent.ts +12 -322
  201. package/src/cmd/ai/prompt/api.md +360 -0
  202. package/src/cmd/ai/prompt/api.ts +13 -260
  203. package/src/cmd/ai/prompt/version.ts +61 -0
  204. package/src/cmd/ai/prompt/web.md +509 -0
  205. package/src/cmd/ai/prompt/web.ts +12 -282
  206. package/src/cmd/ai/skills/generate.ts +75 -0
  207. package/src/cmd/ai/skills/generator.ts +519 -0
  208. package/src/cmd/ai/skills/index.ts +23 -0
  209. package/src/cmd/auth/signup.ts +1 -0
  210. package/src/cmd/build/ast.ts +161 -48
  211. package/src/cmd/build/entry-generator.ts +258 -187
  212. package/src/cmd/build/vite/agent-discovery.ts +151 -58
  213. package/src/cmd/build/vite/bun-dev-server.ts +57 -27
  214. package/src/cmd/build/vite/docs-generator.ts +87 -0
  215. package/src/cmd/build/vite/index.ts +9 -7
  216. package/src/cmd/build/vite/lifecycle-generator.ts +19 -5
  217. package/src/cmd/build/vite/metadata-generator.ts +251 -7
  218. package/src/cmd/build/vite/prompt-generator.ts +169 -0
  219. package/src/cmd/build/vite/registry-generator.ts +750 -108
  220. package/src/cmd/build/vite/route-discovery.ts +4 -0
  221. package/src/cmd/build/vite/server-bundler.ts +73 -23
  222. package/src/cmd/build/vite/vite-asset-server-config.ts +5 -0
  223. package/src/cmd/build/vite/vite-builder.ts +134 -100
  224. package/src/cmd/build/vite-bundler.ts +6 -6
  225. package/src/cmd/cloud/deploy.ts +114 -36
  226. package/src/cmd/cloud/keyvalue/create-namespace.ts +3 -1
  227. package/src/cmd/cloud/keyvalue/delete-namespace.ts +3 -1
  228. package/src/cmd/cloud/keyvalue/delete.ts +3 -1
  229. package/src/cmd/cloud/keyvalue/set.ts +4 -2
  230. package/src/cmd/cloud/stream/get.ts +2 -9
  231. package/src/cmd/cloud/vector/delete-namespace.ts +89 -0
  232. package/src/cmd/cloud/vector/index.ts +21 -4
  233. package/src/cmd/cloud/vector/list-namespaces.ts +46 -0
  234. package/src/cmd/cloud/vector/stats.ts +160 -0
  235. package/src/cmd/cloud/vector/upsert.ts +216 -0
  236. package/src/cmd/dev/file-watcher.ts +109 -34
  237. package/src/cmd/dev/index.ts +364 -60
  238. package/src/cmd/dev/skills.ts +82 -0
  239. package/src/cmd/dev/sync.ts +41 -6
  240. package/src/cmd/index.ts +1 -0
  241. package/src/cmd/project/create.ts +3 -0
  242. package/src/cmd/project/template-flow.ts +37 -5
  243. package/src/cmd/setup/index.ts +1 -0
  244. package/src/cmd/upgrade/index.ts +68 -4
  245. package/src/config.ts +9 -0
  246. package/src/domain.ts +273 -0
  247. package/src/index.ts +0 -5
  248. package/src/runtime-bootstrap.md +1 -1
  249. package/src/schema-generator.ts +23 -0
  250. package/src/steps.ts +16 -5
  251. package/src/tui/prompt.ts +11 -5
  252. package/src/tui.ts +21 -2
  253. package/src/types/md.d.ts +8 -0
  254. package/src/types.ts +12 -3
  255. package/dist/cmd/cloud/domain.d.ts +0 -17
  256. package/dist/cmd/cloud/domain.d.ts.map +0 -1
  257. package/dist/cmd/cloud/domain.js +0 -79
  258. package/dist/cmd/cloud/domain.js.map +0 -1
  259. package/dist/runtime-bootstrap.d.ts +0 -56
  260. package/dist/runtime-bootstrap.d.ts.map +0 -1
  261. package/dist/runtime-bootstrap.js +0 -95
  262. package/dist/runtime-bootstrap.js.map +0 -1
  263. package/src/cmd/cloud/domain.ts +0 -100
  264. package/src/runtime-bootstrap.ts +0 -131
package/src/steps.ts CHANGED
@@ -8,6 +8,7 @@
8
8
  import type { ColorScheme } from './terminal';
9
9
  import type { LogLevel } from './types';
10
10
  import { ValidationInputError, ValidationOutputError, type IssuesType } from '@agentuity/server';
11
+ import { clearLastLines } from './tui';
11
12
 
12
13
  // Spinner frames
13
14
  const FRAMES = ['◐', '◓', '◑', '◒'];
@@ -210,7 +211,7 @@ function enablePauseResume(
210
211
  * Pause step rendering for interactive input
211
212
  * Returns resume function
212
213
  */
213
- export function pauseStepUI(): () => void {
214
+ export function pauseStepUI(clear = false): () => void {
214
215
  if (!process.stdout.isTTY || !getTotalLinesFn) {
215
216
  return () => {}; // No-op if not TTY or not in step context
216
217
  }
@@ -232,8 +233,16 @@ export function pauseStepUI(): () => void {
232
233
  }) as typeof process.stderr.write;
233
234
 
234
235
  // Show cursor and add newline for separation
235
- process.stdout.write('\x1B[?25h');
236
- process.stdout.write('\n');
236
+ if (clear) {
237
+ const lines = getTotalLinesFn();
238
+ if (lines) {
239
+ clearLastLines(lines + 1, originalStdoutWrite);
240
+ }
241
+ }
242
+ originalStdoutWrite('\x1B[?25h');
243
+ if (!clear) {
244
+ originalStdoutWrite('\n');
245
+ }
237
246
 
238
247
  // Return resume function
239
248
  return () => {
@@ -244,8 +253,10 @@ export function pauseStepUI(): () => void {
244
253
  process.stderr.write = originalStderrWrite;
245
254
 
246
255
  // Restore cursor to saved position (where steps began)
247
- process.stdout.write('\x1B[u'); // Restore cursor position
248
- process.stdout.write('\x1B[0J'); // Clear from saved position to end of screen
256
+ if (!clear) {
257
+ process.stdout.write('\x1B[u'); // Restore cursor position
258
+ process.stdout.write('\x1B[0J'); // Clear from saved position to end of screen
259
+ }
249
260
  process.stdout.write('\x1B[?25l'); // Hide cursor
250
261
 
251
262
  // Force immediate re-render (cursor already at step start)
package/src/tui/prompt.ts CHANGED
@@ -13,7 +13,7 @@ interface KeypressEvent {
13
13
  export interface TextOptions {
14
14
  message: string;
15
15
  initial?: string;
16
- placeholder?: string;
16
+ hint?: string;
17
17
  validate?: (value: string) => boolean | string | Promise<boolean | string>;
18
18
  }
19
19
 
@@ -54,7 +54,6 @@ interface PromptState {
54
54
  */
55
55
  export class PromptFlow {
56
56
  private states: PromptState[] = [];
57
- private hasIntro = false;
58
57
 
59
58
  /**
60
59
  * Display intro banner
@@ -62,7 +61,6 @@ export class PromptFlow {
62
61
  intro(title: string): void {
63
62
  console.log(`${colors.secondary(symbols.squareTL)} ${colors.inverseCyan(` ⨺ ${title} `)}`);
64
63
  console.log(colors.secondary(symbols.bar));
65
- this.hasIntro = true;
66
64
  }
67
65
 
68
66
  /**
@@ -96,10 +94,16 @@ export class PromptFlow {
96
94
  });
97
95
 
98
96
  let hasError = false;
97
+ let hadValidationError = false;
99
98
 
100
99
  const showPrompt = () => {
101
100
  // Show prompt with active symbol
102
101
  process.stdout.write(`${colors.active(symbols.active)} ${message}\n`);
102
+ if (options.hint) {
103
+ process.stdout.write(
104
+ `${colors.secondary(symbols.bar)} ${colors.muted(options.hint)}\n`
105
+ );
106
+ }
103
107
  // Use readline's prompt for the input line
104
108
  rl.prompt();
105
109
  };
@@ -108,7 +112,8 @@ export class PromptFlow {
108
112
 
109
113
  rl.on('line', async (input) => {
110
114
  const trimmed = input.trim();
111
- const value = trimmed.length > 0 ? trimmed : initial;
115
+ // After a validation error, require explicit input - don't fall back to initial
116
+ const value = trimmed.length > 0 ? trimmed : hadValidationError ? '' : initial;
112
117
 
113
118
  // Validate
114
119
  if (validate) {
@@ -129,6 +134,7 @@ export class PromptFlow {
129
134
  // Use readline's prompt for the input line
130
135
  rl.prompt();
131
136
  hasError = true;
137
+ hadValidationError = true;
132
138
  return;
133
139
  }
134
140
  } catch (error) {
@@ -156,7 +162,7 @@ export class PromptFlow {
156
162
  }
157
163
 
158
164
  // Clear all lines and show completed state
159
- const linesToClear = hasError ? 3 : 2;
165
+ const linesToClear = hasError ? 4 : 3;
160
166
  readline.moveCursor(process.stdout, 0, -linesToClear);
161
167
  readline.clearScreenDown(process.stdout);
162
168
 
package/src/tui.ts CHANGED
@@ -52,7 +52,7 @@ export type {
52
52
  } from './tui/prompt';
53
53
 
54
54
  // Icons
55
- const ICONS = {
55
+ export const ICONS = {
56
56
  success: '✓',
57
57
  error: '✗',
58
58
  warning: '⚠',
@@ -831,7 +831,7 @@ function endsWithReset(str: string): boolean {
831
831
  * Handles explicit newlines and word wrapping
832
832
  * Preserves ANSI color codes across wrapped lines
833
833
  */
834
- function wrapText(text: string, maxWidth: number): string[] {
834
+ export function wrapText(text: string, maxWidth: number): string[] {
835
835
  const allLines: string[] = [];
836
836
 
837
837
  // First split by explicit newlines
@@ -1812,3 +1812,22 @@ export function table<T extends Record<string, unknown>>(
1812
1812
  console.log(output);
1813
1813
  }
1814
1814
  }
1815
+
1816
+ export function formatBytes(bytes: number): string {
1817
+ if (bytes === 0) return '0 B';
1818
+ if (bytes < 1024) return `${bytes} B`;
1819
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;
1820
+ if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
1821
+ return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;
1822
+ }
1823
+
1824
+ export function clearLastLines(n: number, s?: (v: string) => void) {
1825
+ const x = s ?? ((v: string) => process.stdout.write(v));
1826
+ for (let i = 0; i < n; i++) {
1827
+ x('\x1b[2K'); // clear line
1828
+ x('\x1b[0G'); // cursor to col 0
1829
+ if (i < n - 1) {
1830
+ x('\x1b[1A'); // move up
1831
+ }
1832
+ }
1833
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * TypeScript module declaration for importing .md files as strings.
3
+ * Bun automatically handles text file imports via its bundler.
4
+ */
5
+ declare module '*.md' {
6
+ const content: string;
7
+ export default content;
8
+ }
package/src/types.ts CHANGED
@@ -1,10 +1,13 @@
1
1
  import type { Logger } from '@agentuity/core';
2
- import { Deployment, BuildMetadataSchema as ServerBuildMetadataSchema } from '@agentuity/server';
2
+ import {
3
+ DeploymentConfig,
4
+ BuildMetadataSchema as ServerBuildMetadataSchema,
5
+ } from '@agentuity/server';
3
6
  import type * as z from 'zod';
4
7
  import { z as zod } from 'zod';
5
8
  import type { APIClient } from './api';
6
9
 
7
- export { Deployment };
10
+ export { DeploymentConfig };
8
11
 
9
12
  export type { Logger };
10
13
 
@@ -369,6 +372,7 @@ export function createSubcommand<
369
372
  prerequisites?: string[];
370
373
  pagination?: PaginationInfo;
371
374
  tags?: string[];
375
+ skipSkill?: boolean;
372
376
  webUrl?: WebUrl<R, O, A, Op>;
373
377
  schema?: A extends z.ZodType
374
378
  ? Op extends z.ZodType
@@ -413,6 +417,7 @@ export function createCommand<
413
417
  prerequisites?: string[];
414
418
  pagination?: PaginationInfo;
415
419
  tags?: string[];
420
+ skipSkill?: boolean;
416
421
  webUrl?: WebUrl<R, O, A, Op>;
417
422
  schema?: A extends z.ZodType
418
423
  ? Op extends z.ZodType
@@ -445,6 +450,7 @@ type CommandDefBase =
445
450
  banner?: boolean;
446
451
  executable?: boolean;
447
452
  skipUpgradeCheck?: boolean;
453
+ skipSkill?: boolean;
448
454
  examples?: CommandExample[];
449
455
  idempotent?: boolean;
450
456
  prerequisites?: string[];
@@ -462,6 +468,7 @@ type CommandDefBase =
462
468
  banner?: boolean;
463
469
  executable?: boolean;
464
470
  skipUpgradeCheck?: boolean;
471
+ skipSkill?: boolean;
465
472
  examples?: CommandExample[];
466
473
  idempotent?: boolean;
467
474
  prerequisites?: string[];
@@ -480,6 +487,7 @@ type SubcommandDefBase =
480
487
  aliases?: string[];
481
488
  toplevel?: boolean;
482
489
  banner?: boolean;
490
+ skipSkill?: boolean;
483
491
  examples?: CommandExample[];
484
492
  idempotent?: boolean;
485
493
  prerequisites?: string[];
@@ -496,6 +504,7 @@ type SubcommandDefBase =
496
504
  aliases?: string[];
497
505
  toplevel?: boolean;
498
506
  banner?: boolean;
507
+ skipSkill?: boolean;
499
508
  examples?: CommandExample[];
500
509
  idempotent?: boolean;
501
510
  prerequisites?: string[];
@@ -542,7 +551,7 @@ export const ProjectSchema = zod.object({
542
551
  projectId: zod.string().describe('the project id'),
543
552
  orgId: zod.string().describe('the organization id'),
544
553
  region: zod.string().describe('the region identifier that the project is deployed into'),
545
- deployment: Deployment.optional().describe('the deployment configuration'),
554
+ deployment: DeploymentConfig.optional().describe('the deployment configuration'),
546
555
  });
547
556
 
548
557
  export const BuildMetadataSchema = ServerBuildMetadataSchema;
@@ -1,17 +0,0 @@
1
- import type { Config } from '../../types';
2
- export interface DNSResult {
3
- domain: string;
4
- success: boolean;
5
- message?: string;
6
- }
7
- /**
8
- * This function will check for each of the custom domains and make sure they are correctly
9
- * configured in DNS
10
- *
11
- * @param projectId the project id
12
- * @param config Config
13
- * @param domains array of domains to check
14
- * @returns
15
- */
16
- export declare function checkCustomDomainForDNS(projectId: string, domains: string[], config?: Config | null): Promise<DNSResult[]>;
17
- //# sourceMappingURL=domain.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/cmd/cloud/domain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,MAAM,WAAW,SAAS;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AASD;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC5C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CAqEtB"}
@@ -1,79 +0,0 @@
1
- import * as dns from 'node:dns';
2
- import { StructuredError } from '@agentuity/core';
3
- const timeoutMs = 5000;
4
- const DNSTimeoutError = StructuredError('DNSTimeoutError', `DNS lookup timed out after ${timeoutMs}ms`);
5
- /**
6
- * This function will check for each of the custom domains and make sure they are correctly
7
- * configured in DNS
8
- *
9
- * @param projectId the project id
10
- * @param config Config
11
- * @param domains array of domains to check
12
- * @returns
13
- */
14
- export async function checkCustomDomainForDNS(projectId, domains, config) {
15
- const suffix = config?.overrides?.api_url?.includes('agentuity.io')
16
- ? 'agentuity.io'
17
- : 'agentuity.cloud';
18
- // FIXME: update to add the region into this
19
- const id = Bun.hash.xxHash64(projectId).toString(16);
20
- const proxy = `p${id}.${suffix}`;
21
- return Promise.all(domains.map(async (domain) => {
22
- try {
23
- let timeoutId;
24
- const timeoutPromise = new Promise((_, reject) => {
25
- timeoutId = setTimeout(() => {
26
- reject(new DNSTimeoutError());
27
- }, timeoutMs);
28
- });
29
- const result = await Promise.race([
30
- dns.promises.resolveCname(domain),
31
- timeoutPromise,
32
- ]).finally(() => {
33
- if (timeoutId)
34
- clearTimeout(timeoutId);
35
- });
36
- if (result.length) {
37
- if (result[0] === proxy) {
38
- return {
39
- domain,
40
- success: true,
41
- };
42
- }
43
- return {
44
- domain,
45
- success: false,
46
- message: `DNS record for ${domain} must have a CNAME record with the value: ${proxy}`,
47
- };
48
- }
49
- }
50
- catch (ex) {
51
- const _ex = ex;
52
- if (_ex.message?.includes('timed out')) {
53
- return {
54
- domain,
55
- success: false,
56
- message: `DNS lookup for ${domain} timed out after 5 seconds. Please check your DNS configuration.`,
57
- };
58
- }
59
- if (_ex.code !== 'ENOTFOUND') {
60
- const errMsg = ex instanceof Error
61
- ? ex.message
62
- : typeof ex === 'string'
63
- ? ex
64
- : JSON.stringify(ex);
65
- return {
66
- domain,
67
- success: false,
68
- message: `DNS returned an error resolving ${domain}: ${errMsg}`,
69
- };
70
- }
71
- }
72
- return {
73
- domain,
74
- success: false,
75
- message: `To enable the custom domain ${domain}, create a CNAME DNS record with the value: ${proxy} and a TTL of 600`,
76
- };
77
- }));
78
- }
79
- //# sourceMappingURL=domain.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"domain.js","sourceRoot":"","sources":["../../../src/cmd/cloud/domain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAQlD,MAAM,SAAS,GAAG,IAAI,CAAC;AAEvB,MAAM,eAAe,GAAG,eAAe,CACtC,iBAAiB,EACjB,8BAA8B,SAAS,IAAI,CAC3C,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,SAAiB,EACjB,OAAiB,EACjB,MAAsB;IAEtB,MAAM,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC;QAClE,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,iBAAiB,CAAC;IACrB,4CAA4C;IAC5C,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;IAEjC,OAAO,OAAO,CAAC,GAAG,CACjB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC5B,IAAI,CAAC;YACJ,IAAI,SAA4B,CAAC;YAEjC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBACvD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC3B,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;gBAC/B,CAAC,EAAE,SAAS,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;gBACjC,cAAc;aACd,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBACf,IAAI,SAAS;oBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;oBACzB,OAAO;wBACN,MAAM;wBACN,OAAO,EAAE,IAAI;qBACb,CAAC;gBACH,CAAC;gBACD,OAAO;oBACN,MAAM;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,kBAAkB,MAAM,6CAA6C,KAAK,EAAE;iBACrF,CAAC;YACH,CAAC;QACF,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,EAAwC,CAAC;YACrD,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxC,OAAO;oBACN,MAAM;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,kBAAkB,MAAM,kEAAkE;iBACnG,CAAC;YACH,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC9B,MAAM,MAAM,GACX,EAAE,YAAY,KAAK;oBAClB,CAAC,CAAC,EAAE,CAAC,OAAO;oBACZ,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ;wBACvB,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACxB,OAAO;oBACN,MAAM;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,mCAAmC,MAAM,KAAK,MAAM,EAAE;iBAC/D,CAAC;YACH,CAAC;QACF,CAAC;QACD,OAAO;YACN,MAAM;YACN,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,+BAA+B,MAAM,+CAA+C,KAAK,mBAAmB;SACrH,CAAC;IACH,CAAC,CAAC,CACF,CAAC;AACH,CAAC"}
@@ -1,56 +0,0 @@
1
- /**
2
- * Runtime environment bootstrapping utility
3
- *
4
- * Loads configuration and environment variables based on the active profile
5
- * before createApp() is called. This ensures .env.{profile} files and
6
- * agentuity.{profile}.json configs are respected.
7
- */
8
- import type { Config, ProjectConfig } from './types';
9
- export interface RuntimeBootstrapOptions {
10
- /**
11
- * Project directory containing agentuity.json and .env files
12
- * @default process.cwd()
13
- */
14
- projectDir?: string;
15
- /**
16
- * Override the active profile (otherwise uses loadConfig())
17
- */
18
- profile?: string;
19
- }
20
- export interface RuntimeBootstrapResult {
21
- /**
22
- * Resolved CLI config (from ~/.config/agentuity/)
23
- */
24
- config: Config | null;
25
- /**
26
- * Resolved project config (agentuity.json or agentuity.{profile}.json)
27
- */
28
- projectConfig: ProjectConfig | null;
29
- }
30
- /**
31
- * Bootstrap runtime environment by loading profile-aware config and env files.
32
- *
33
- * This function:
34
- * 1. Resolves the active profile (from AGENTUITY_PROFILE env or profile config)
35
- * 2. Loads .env.{profile}, .env.development, or .env based on profile
36
- * 3. Sets AGENTUITY_REGION=local for local profile (overrides project config for infrastructure)
37
- * 4. Loads agentuity.{profile}.json if it exists
38
- * 5. Sets AGENTUITY_REGION from project config if not already set (non-local profiles only)
39
- * 6. Does NOT override environment variables already set
40
- *
41
- * Call this BEFORE createApp() in your app.ts:
42
- *
43
- * @example
44
- * ```ts
45
- * import { bootstrapRuntimeEnv } from '@agentuity/cli/runtime-bootstrap';
46
- * import { createApp } from '@agentuity/runtime';
47
- *
48
- * // Load config and env based on active profile
49
- * await bootstrapRuntimeEnv();
50
- *
51
- * // Now createApp() will use the correct env vars
52
- * const app = await createApp();
53
- * ```
54
- */
55
- export declare function bootstrapRuntimeEnv(options?: RuntimeBootstrapOptions): Promise<RuntimeBootstrapResult>;
56
- //# sourceMappingURL=runtime-bootstrap.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-bootstrap.d.ts","sourceRoot":"","sources":["../src/runtime-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACvC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACtC;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB;;OAEG;IACH,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,mBAAmB,CACxC,OAAO,GAAE,uBAA4B,GACnC,OAAO,CAAC,sBAAsB,CAAC,CAkEjC"}
@@ -1,95 +0,0 @@
1
- /**
2
- * Runtime environment bootstrapping utility
3
- *
4
- * Loads configuration and environment variables based on the active profile
5
- * before createApp() is called. This ensures .env.{profile} files and
6
- * agentuity.{profile}.json configs are respected.
7
- */
8
- import { loadConfig, loadProjectConfig } from './config';
9
- import { getEnvFilePaths, readEnvFile } from './env-util';
10
- /**
11
- * Bootstrap runtime environment by loading profile-aware config and env files.
12
- *
13
- * This function:
14
- * 1. Resolves the active profile (from AGENTUITY_PROFILE env or profile config)
15
- * 2. Loads .env.{profile}, .env.development, or .env based on profile
16
- * 3. Sets AGENTUITY_REGION=local for local profile (overrides project config for infrastructure)
17
- * 4. Loads agentuity.{profile}.json if it exists
18
- * 5. Sets AGENTUITY_REGION from project config if not already set (non-local profiles only)
19
- * 6. Does NOT override environment variables already set
20
- *
21
- * Call this BEFORE createApp() in your app.ts:
22
- *
23
- * @example
24
- * ```ts
25
- * import { bootstrapRuntimeEnv } from '@agentuity/cli/runtime-bootstrap';
26
- * import { createApp } from '@agentuity/runtime';
27
- *
28
- * // Load config and env based on active profile
29
- * await bootstrapRuntimeEnv();
30
- *
31
- * // Now createApp() will use the correct env vars
32
- * const app = await createApp();
33
- * ```
34
- */
35
- export async function bootstrapRuntimeEnv(options = {}) {
36
- const projectDir = options.projectDir || process.cwd();
37
- // Load CLI config to determine active profile
38
- let cfg = null;
39
- try {
40
- cfg = await loadConfig();
41
- // Override profile if specified
42
- if (options.profile) {
43
- cfg = { ...cfg, name: options.profile };
44
- }
45
- }
46
- catch {
47
- // No config found - OK for tests without CLI setup
48
- }
49
- // Determine which .env files to load based on profile
50
- const isProduction = process.env.NODE_ENV === 'production';
51
- const envPaths = getEnvFilePaths(projectDir, {
52
- configName: cfg?.name,
53
- isProduction,
54
- });
55
- // Load and merge env files (later files override earlier ones)
56
- let fileEnv = {};
57
- for (const path of envPaths) {
58
- const vars = await readEnvFile(path);
59
- // Later files override earlier ones
60
- fileEnv = { ...fileEnv, ...vars };
61
- }
62
- // Apply to process.env ONLY if not already set
63
- // This ensures existing env vars (from shell/CI) always win
64
- for (const [key, value] of Object.entries(fileEnv)) {
65
- if (process.env[key] === undefined) {
66
- process.env[key] = value;
67
- }
68
- }
69
- // For local profile, default AGENTUITY_REGION to 'local'
70
- // This makes getServiceUrls() use *.agentuity.io instead of *.agentuity.cloud
71
- if (cfg?.name === 'local' && !process.env.AGENTUITY_REGION) {
72
- process.env.AGENTUITY_REGION = 'local';
73
- }
74
- // Propagate profile name into env for consistency
75
- if (cfg?.name && !process.env.AGENTUITY_PROFILE) {
76
- process.env.AGENTUITY_PROFILE = cfg.name;
77
- }
78
- // Load project config (agentuity.json or agentuity.{profile}.json)
79
- let projectConfig = null;
80
- try {
81
- projectConfig = await loadProjectConfig(projectDir, cfg ?? undefined);
82
- // Set AGENTUITY_REGION from project config if not already set
83
- if (projectConfig?.region && !process.env.AGENTUITY_REGION) {
84
- process.env.AGENTUITY_REGION = projectConfig.region;
85
- }
86
- }
87
- catch {
88
- // OK for tests that don't need project config
89
- }
90
- return {
91
- config: cfg,
92
- projectConfig,
93
- };
94
- }
95
- //# sourceMappingURL=runtime-bootstrap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-bootstrap.js","sourceRoot":"","sources":["../src/runtime-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AA4BxE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,UAAmC,EAAE;IAErC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvD,8CAA8C;IAC9C,IAAI,GAAG,GAAkB,IAAI,CAAC;IAC9B,IAAI,CAAC;QACJ,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;QACzB,gCAAgC;QAChC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QACzC,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,mDAAmD;IACpD,CAAC;IAED,sDAAsD;IACtD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAC3D,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE;QAC5C,UAAU,EAAE,GAAG,EAAE,IAAI;QACrB,YAAY;KACZ,CAAC,CAAC;IAEH,+DAA+D;IAC/D,IAAI,OAAO,GAAY,EAAE,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,oCAAoC;QACpC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,+CAA+C;IAC/C,4DAA4D;IAC5D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC1B,CAAC;IACF,CAAC;IAED,yDAAyD;IACzD,8EAA8E;IAC9E,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,OAAO,CAAC;IACxC,CAAC;IAED,kDAAkD;IAClD,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC,IAAI,CAAC;IAC1C,CAAC;IAED,mEAAmE;IACnE,IAAI,aAAa,GAAyB,IAAI,CAAC;IAC/C,IAAI,CAAC;QACJ,aAAa,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;QAEtE,8DAA8D;QAC9D,IAAI,aAAa,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC;QACrD,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,8CAA8C;IAC/C,CAAC;IAED,OAAO;QACN,MAAM,EAAE,GAAG;QACX,aAAa;KACb,CAAC;AACH,CAAC"}
@@ -1,100 +0,0 @@
1
- import * as dns from 'node:dns';
2
- import type { Config } from '../../types';
3
- import { StructuredError } from '@agentuity/core';
4
-
5
- export interface DNSResult {
6
- domain: string;
7
- success: boolean;
8
- message?: string;
9
- }
10
-
11
- const timeoutMs = 5000;
12
-
13
- const DNSTimeoutError = StructuredError(
14
- 'DNSTimeoutError',
15
- `DNS lookup timed out after ${timeoutMs}ms`
16
- );
17
-
18
- /**
19
- * This function will check for each of the custom domains and make sure they are correctly
20
- * configured in DNS
21
- *
22
- * @param projectId the project id
23
- * @param config Config
24
- * @param domains array of domains to check
25
- * @returns
26
- */
27
- export async function checkCustomDomainForDNS(
28
- projectId: string,
29
- domains: string[],
30
- config?: Config | null
31
- ): Promise<DNSResult[]> {
32
- const suffix = config?.overrides?.api_url?.includes('agentuity.io')
33
- ? 'agentuity.io'
34
- : 'agentuity.cloud';
35
- // FIXME: update to add the region into this
36
- const id = Bun.hash.xxHash64(projectId).toString(16);
37
- const proxy = `p${id}.${suffix}`;
38
-
39
- return Promise.all(
40
- domains.map(async (domain) => {
41
- try {
42
- let timeoutId: Timer | undefined;
43
-
44
- const timeoutPromise = new Promise<never>((_, reject) => {
45
- timeoutId = setTimeout(() => {
46
- reject(new DNSTimeoutError());
47
- }, timeoutMs);
48
- });
49
-
50
- const result = await Promise.race([
51
- dns.promises.resolveCname(domain),
52
- timeoutPromise,
53
- ]).finally(() => {
54
- if (timeoutId) clearTimeout(timeoutId);
55
- });
56
-
57
- if (result.length) {
58
- if (result[0] === proxy) {
59
- return {
60
- domain,
61
- success: true,
62
- };
63
- }
64
- return {
65
- domain,
66
- success: false,
67
- message: `DNS record for ${domain} must have a CNAME record with the value: ${proxy}`,
68
- };
69
- }
70
- } catch (ex) {
71
- const _ex = ex as { code: string; message?: string };
72
- if (_ex.message?.includes('timed out')) {
73
- return {
74
- domain,
75
- success: false,
76
- message: `DNS lookup for ${domain} timed out after 5 seconds. Please check your DNS configuration.`,
77
- };
78
- }
79
- if (_ex.code !== 'ENOTFOUND') {
80
- const errMsg =
81
- ex instanceof Error
82
- ? ex.message
83
- : typeof ex === 'string'
84
- ? ex
85
- : JSON.stringify(ex);
86
- return {
87
- domain,
88
- success: false,
89
- message: `DNS returned an error resolving ${domain}: ${errMsg}`,
90
- };
91
- }
92
- }
93
- return {
94
- domain,
95
- success: false,
96
- message: `To enable the custom domain ${domain}, create a CNAME DNS record with the value: ${proxy} and a TTL of 600`,
97
- };
98
- })
99
- );
100
- }