@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.
- package/AGENTS.md +19 -188
- package/bin/cli.ts +13 -6
- package/dist/api.d.ts +1 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +1 -1
- package/dist/api.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +41 -12
- package/dist/cli.js.map +1 -1
- package/dist/cmd/ai/index.d.ts.map +1 -1
- package/dist/cmd/ai/index.js +6 -1
- package/dist/cmd/ai/index.js.map +1 -1
- package/dist/cmd/ai/prompt/agent.d.ts +7 -0
- package/dist/cmd/ai/prompt/agent.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/agent.js +12 -323
- package/dist/cmd/ai/prompt/agent.js.map +1 -1
- package/dist/cmd/ai/prompt/api.d.ts +7 -0
- package/dist/cmd/ai/prompt/api.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/api.js +12 -260
- package/dist/cmd/ai/prompt/api.js.map +1 -1
- package/dist/cmd/ai/prompt/version.d.ts +35 -0
- package/dist/cmd/ai/prompt/version.d.ts.map +1 -0
- package/dist/cmd/ai/prompt/version.js +55 -0
- package/dist/cmd/ai/prompt/version.js.map +1 -0
- package/dist/cmd/ai/prompt/web.d.ts +7 -0
- package/dist/cmd/ai/prompt/web.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/web.js +12 -283
- package/dist/cmd/ai/prompt/web.js.map +1 -1
- package/dist/cmd/ai/skills/generate.d.ts +3 -0
- package/dist/cmd/ai/skills/generate.d.ts.map +1 -0
- package/dist/cmd/ai/skills/generate.js +65 -0
- package/dist/cmd/ai/skills/generate.js.map +1 -0
- package/dist/cmd/ai/skills/generator.d.ts +4 -0
- package/dist/cmd/ai/skills/generator.d.ts.map +1 -0
- package/dist/cmd/ai/skills/generator.js +402 -0
- package/dist/cmd/ai/skills/generator.js.map +1 -0
- package/dist/cmd/ai/skills/index.d.ts +4 -0
- package/dist/cmd/ai/skills/index.d.ts.map +1 -0
- package/dist/cmd/ai/skills/index.js +21 -0
- package/dist/cmd/ai/skills/index.js.map +1 -0
- package/dist/cmd/auth/signup.d.ts.map +1 -1
- package/dist/cmd/auth/signup.js +1 -0
- package/dist/cmd/auth/signup.js.map +1 -1
- package/dist/cmd/build/ast.d.ts +2 -1
- package/dist/cmd/build/ast.d.ts.map +1 -1
- package/dist/cmd/build/ast.js +135 -47
- package/dist/cmd/build/ast.js.map +1 -1
- package/dist/cmd/build/entry-generator.d.ts.map +1 -1
- package/dist/cmd/build/entry-generator.js +255 -188
- package/dist/cmd/build/entry-generator.js.map +1 -1
- package/dist/cmd/build/vite/agent-discovery.d.ts.map +1 -1
- package/dist/cmd/build/vite/agent-discovery.js +103 -45
- package/dist/cmd/build/vite/agent-discovery.js.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts +7 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.js +52 -26
- package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
- package/dist/cmd/build/vite/docs-generator.d.ts +13 -0
- package/dist/cmd/build/vite/docs-generator.d.ts.map +1 -0
- package/dist/cmd/build/vite/docs-generator.js +81 -0
- package/dist/cmd/build/vite/docs-generator.js.map +1 -0
- package/dist/cmd/build/vite/index.d.ts +3 -3
- package/dist/cmd/build/vite/index.d.ts.map +1 -1
- package/dist/cmd/build/vite/index.js +9 -7
- package/dist/cmd/build/vite/index.js.map +1 -1
- package/dist/cmd/build/vite/lifecycle-generator.d.ts +1 -1
- package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/lifecycle-generator.js +19 -5
- package/dist/cmd/build/vite/lifecycle-generator.js.map +1 -1
- package/dist/cmd/build/vite/metadata-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/metadata-generator.js +203 -7
- package/dist/cmd/build/vite/metadata-generator.js.map +1 -1
- package/dist/cmd/build/vite/prompt-generator.d.ts +23 -0
- package/dist/cmd/build/vite/prompt-generator.d.ts.map +1 -0
- package/dist/cmd/build/vite/prompt-generator.js +123 -0
- package/dist/cmd/build/vite/prompt-generator.js.map +1 -0
- package/dist/cmd/build/vite/registry-generator.d.ts +3 -3
- package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/registry-generator.js +644 -103
- package/dist/cmd/build/vite/registry-generator.js.map +1 -1
- package/dist/cmd/build/vite/route-discovery.d.ts +4 -0
- package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
- package/dist/cmd/build/vite/route-discovery.js.map +1 -1
- package/dist/cmd/build/vite/server-bundler.d.ts +4 -0
- package/dist/cmd/build/vite/server-bundler.d.ts.map +1 -1
- package/dist/cmd/build/vite/server-bundler.js +63 -17
- package/dist/cmd/build/vite/server-bundler.js.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.js +4 -0
- package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
- package/dist/cmd/build/vite/vite-builder.d.ts +1 -1
- package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-builder.js +118 -96
- package/dist/cmd/build/vite/vite-builder.js.map +1 -1
- package/dist/cmd/build/vite-bundler.js +6 -6
- package/dist/cmd/build/vite-bundler.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +89 -32
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/create-namespace.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/create-namespace.js +3 -1
- package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete-namespace.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete-namespace.js +3 -1
- package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete.js +3 -1
- package/dist/cmd/cloud/keyvalue/delete.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/set.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/set.js +4 -2
- package/dist/cmd/cloud/keyvalue/set.js.map +1 -1
- package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/get.js +2 -13
- package/dist/cmd/cloud/stream/get.js.map +1 -1
- package/dist/cmd/cloud/vector/delete-namespace.d.ts +3 -0
- package/dist/cmd/cloud/vector/delete-namespace.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/delete-namespace.js +77 -0
- package/dist/cmd/cloud/vector/delete-namespace.js.map +1 -0
- package/dist/cmd/cloud/vector/index.d.ts.map +1 -1
- package/dist/cmd/cloud/vector/index.js +21 -4
- package/dist/cmd/cloud/vector/index.js.map +1 -1
- package/dist/cmd/cloud/vector/list-namespaces.d.ts +3 -0
- package/dist/cmd/cloud/vector/list-namespaces.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/list-namespaces.js +42 -0
- package/dist/cmd/cloud/vector/list-namespaces.js.map +1 -0
- package/dist/cmd/cloud/vector/stats.d.ts +3 -0
- package/dist/cmd/cloud/vector/stats.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/stats.js +142 -0
- package/dist/cmd/cloud/vector/stats.js.map +1 -0
- package/dist/cmd/cloud/vector/upsert.d.ts +3 -0
- package/dist/cmd/cloud/vector/upsert.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/upsert.js +192 -0
- package/dist/cmd/cloud/vector/upsert.js.map +1 -0
- package/dist/cmd/dev/file-watcher.d.ts.map +1 -1
- package/dist/cmd/dev/file-watcher.js +94 -33
- package/dist/cmd/dev/file-watcher.js.map +1 -1
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +298 -61
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/dev/skills.d.ts +10 -0
- package/dist/cmd/dev/skills.d.ts.map +1 -0
- package/dist/cmd/dev/skills.js +57 -0
- package/dist/cmd/dev/skills.js.map +1 -0
- package/dist/cmd/dev/sync.d.ts.map +1 -1
- package/dist/cmd/dev/sync.js +19 -3
- package/dist/cmd/dev/sync.js.map +1 -1
- package/dist/cmd/index.d.ts.map +1 -1
- package/dist/cmd/index.js +1 -0
- package/dist/cmd/index.js.map +1 -1
- package/dist/cmd/project/create.d.ts.map +1 -1
- package/dist/cmd/project/create.js +3 -0
- package/dist/cmd/project/create.js.map +1 -1
- package/dist/cmd/project/template-flow.d.ts +1 -0
- package/dist/cmd/project/template-flow.d.ts.map +1 -1
- package/dist/cmd/project/template-flow.js +30 -5
- package/dist/cmd/project/template-flow.js.map +1 -1
- package/dist/cmd/setup/index.d.ts.map +1 -1
- package/dist/cmd/setup/index.js +1 -0
- package/dist/cmd/setup/index.js.map +1 -1
- package/dist/cmd/upgrade/index.d.ts +15 -0
- package/dist/cmd/upgrade/index.d.ts.map +1 -1
- package/dist/cmd/upgrade/index.js +59 -4
- package/dist/cmd/upgrade/index.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/domain.d.ts +45 -0
- package/dist/domain.d.ts.map +1 -0
- package/dist/domain.js +200 -0
- package/dist/domain.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/schema-generator.d.ts +2 -0
- package/dist/schema-generator.d.ts.map +1 -1
- package/dist/schema-generator.js +18 -0
- package/dist/schema-generator.js.map +1 -1
- package/dist/steps.d.ts +1 -1
- package/dist/steps.d.ts.map +1 -1
- package/dist/steps.js +16 -5
- package/dist/steps.js.map +1 -1
- package/dist/tui/prompt.d.ts +1 -2
- package/dist/tui/prompt.d.ts.map +1 -1
- package/dist/tui/prompt.js +8 -4
- package/dist/tui/prompt.js.map +1 -1
- package/dist/tui.d.ts +16 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +23 -2
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +9 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -3
- package/dist/types.js.map +1 -1
- package/package.json +5 -8
- package/src/api.ts +1 -1
- package/src/cli.ts +47 -12
- package/src/cmd/ai/index.ts +6 -1
- package/src/cmd/ai/prompt/agent.md +306 -0
- package/src/cmd/ai/prompt/agent.ts +12 -322
- package/src/cmd/ai/prompt/api.md +360 -0
- package/src/cmd/ai/prompt/api.ts +13 -260
- package/src/cmd/ai/prompt/version.ts +61 -0
- package/src/cmd/ai/prompt/web.md +509 -0
- package/src/cmd/ai/prompt/web.ts +12 -282
- package/src/cmd/ai/skills/generate.ts +75 -0
- package/src/cmd/ai/skills/generator.ts +519 -0
- package/src/cmd/ai/skills/index.ts +23 -0
- package/src/cmd/auth/signup.ts +1 -0
- package/src/cmd/build/ast.ts +161 -48
- package/src/cmd/build/entry-generator.ts +258 -187
- package/src/cmd/build/vite/agent-discovery.ts +151 -58
- package/src/cmd/build/vite/bun-dev-server.ts +57 -27
- package/src/cmd/build/vite/docs-generator.ts +87 -0
- package/src/cmd/build/vite/index.ts +9 -7
- package/src/cmd/build/vite/lifecycle-generator.ts +19 -5
- package/src/cmd/build/vite/metadata-generator.ts +251 -7
- package/src/cmd/build/vite/prompt-generator.ts +169 -0
- package/src/cmd/build/vite/registry-generator.ts +750 -108
- package/src/cmd/build/vite/route-discovery.ts +4 -0
- package/src/cmd/build/vite/server-bundler.ts +73 -23
- package/src/cmd/build/vite/vite-asset-server-config.ts +5 -0
- package/src/cmd/build/vite/vite-builder.ts +134 -100
- package/src/cmd/build/vite-bundler.ts +6 -6
- package/src/cmd/cloud/deploy.ts +114 -36
- package/src/cmd/cloud/keyvalue/create-namespace.ts +3 -1
- package/src/cmd/cloud/keyvalue/delete-namespace.ts +3 -1
- package/src/cmd/cloud/keyvalue/delete.ts +3 -1
- package/src/cmd/cloud/keyvalue/set.ts +4 -2
- package/src/cmd/cloud/stream/get.ts +2 -9
- package/src/cmd/cloud/vector/delete-namespace.ts +89 -0
- package/src/cmd/cloud/vector/index.ts +21 -4
- package/src/cmd/cloud/vector/list-namespaces.ts +46 -0
- package/src/cmd/cloud/vector/stats.ts +160 -0
- package/src/cmd/cloud/vector/upsert.ts +216 -0
- package/src/cmd/dev/file-watcher.ts +109 -34
- package/src/cmd/dev/index.ts +364 -60
- package/src/cmd/dev/skills.ts +82 -0
- package/src/cmd/dev/sync.ts +41 -6
- package/src/cmd/index.ts +1 -0
- package/src/cmd/project/create.ts +3 -0
- package/src/cmd/project/template-flow.ts +37 -5
- package/src/cmd/setup/index.ts +1 -0
- package/src/cmd/upgrade/index.ts +68 -4
- package/src/config.ts +9 -0
- package/src/domain.ts +273 -0
- package/src/index.ts +0 -5
- package/src/runtime-bootstrap.md +1 -1
- package/src/schema-generator.ts +23 -0
- package/src/steps.ts +16 -5
- package/src/tui/prompt.ts +11 -5
- package/src/tui.ts +21 -2
- package/src/types/md.d.ts +8 -0
- package/src/types.ts +12 -3
- package/dist/cmd/cloud/domain.d.ts +0 -17
- package/dist/cmd/cloud/domain.d.ts.map +0 -1
- package/dist/cmd/cloud/domain.js +0 -79
- package/dist/cmd/cloud/domain.js.map +0 -1
- package/dist/runtime-bootstrap.d.ts +0 -56
- package/dist/runtime-bootstrap.d.ts.map +0 -1
- package/dist/runtime-bootstrap.js +0 -95
- package/dist/runtime-bootstrap.js.map +0 -1
- package/src/cmd/cloud/domain.ts +0 -100
- 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
|
-
|
|
236
|
-
|
|
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
|
-
|
|
248
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 ?
|
|
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
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { Logger } from '@agentuity/core';
|
|
2
|
-
import {
|
|
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 {
|
|
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:
|
|
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"}
|
package/dist/cmd/cloud/domain.js
DELETED
|
@@ -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":"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"}
|
|
@@ -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"}
|
package/src/cmd/cloud/domain.ts
DELETED
|
@@ -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
|
-
}
|