@agentuity/cli 0.1.13 → 0.1.15
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/dist/auth.d.ts +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +12 -7
- package/dist/auth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +94 -97
- 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/opencode/index.d.ts +3 -0
- package/dist/cmd/ai/opencode/index.d.ts.map +1 -0
- package/dist/cmd/ai/opencode/index.js +27 -0
- package/dist/cmd/ai/opencode/index.js.map +1 -0
- package/dist/cmd/ai/opencode/install.d.ts +3 -0
- package/dist/cmd/ai/opencode/install.d.ts.map +1 -0
- package/dist/cmd/ai/opencode/install.js +102 -0
- package/dist/cmd/ai/opencode/install.js.map +1 -0
- package/dist/cmd/ai/opencode/run.d.ts +3 -0
- package/dist/cmd/ai/opencode/run.d.ts.map +1 -0
- package/dist/cmd/ai/opencode/run.js +88 -0
- package/dist/cmd/ai/opencode/run.js.map +1 -0
- package/dist/cmd/ai/opencode/uninstall.d.ts +3 -0
- package/dist/cmd/ai/opencode/uninstall.d.ts.map +1 -0
- package/dist/cmd/ai/opencode/uninstall.js +82 -0
- package/dist/cmd/ai/opencode/uninstall.js.map +1 -0
- package/dist/cmd/auth/index.d.ts.map +1 -1
- package/dist/cmd/auth/index.js +3 -0
- package/dist/cmd/auth/index.js.map +1 -1
- package/dist/cmd/auth/org/index.d.ts +2 -0
- package/dist/cmd/auth/org/index.d.ts.map +1 -0
- package/dist/cmd/auth/org/index.js +121 -0
- package/dist/cmd/auth/org/index.js.map +1 -0
- package/dist/cmd/build/vite/beacon-plugin.d.ts +19 -0
- package/dist/cmd/build/vite/beacon-plugin.d.ts.map +1 -0
- package/dist/cmd/build/vite/beacon-plugin.js +137 -0
- package/dist/cmd/build/vite/beacon-plugin.js.map +1 -0
- package/dist/cmd/build/vite/vite-builder.d.ts +2 -0
- package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-builder.js +12 -2
- package/dist/cmd/build/vite/vite-builder.js.map +1 -1
- package/dist/cmd/build/webanalytics-generator.js +25 -9
- package/dist/cmd/build/webanalytics-generator.js.map +1 -1
- package/dist/cmd/cloud/db/get.d.ts.map +1 -1
- package/dist/cmd/cloud/db/get.js +7 -0
- package/dist/cmd/cloud/db/get.js.map +1 -1
- package/dist/cmd/cloud/db/list.d.ts.map +1 -1
- package/dist/cmd/cloud/db/list.js +19 -6
- package/dist/cmd/cloud/db/list.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +24 -1
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/cloud/deployment/show.d.ts.map +1 -1
- package/dist/cmd/cloud/deployment/show.js +5 -0
- package/dist/cmd/cloud/deployment/show.js.map +1 -1
- package/dist/cmd/cloud/index.d.ts.map +1 -1
- package/dist/cmd/cloud/index.js +3 -0
- package/dist/cmd/cloud/index.js.map +1 -1
- package/dist/cmd/cloud/region/index.d.ts +2 -0
- package/dist/cmd/cloud/region/index.d.ts.map +1 -0
- package/dist/cmd/cloud/region/index.js +136 -0
- package/dist/cmd/cloud/region/index.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/build.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/build.js +35 -5
- package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
- package/dist/cmd/cloud/scp/download.d.ts.map +1 -1
- package/dist/cmd/cloud/scp/download.js +4 -2
- package/dist/cmd/cloud/scp/download.js.map +1 -1
- package/dist/cmd/cloud/scp/upload.d.ts.map +1 -1
- package/dist/cmd/cloud/scp/upload.js +4 -2
- package/dist/cmd/cloud/scp/upload.js.map +1 -1
- package/dist/cmd/cloud/ssh.d.ts.map +1 -1
- package/dist/cmd/cloud/ssh.js +3 -1
- package/dist/cmd/cloud/ssh.js.map +1 -1
- package/dist/cmd/cloud/storage/get.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/get.js +12 -5
- package/dist/cmd/cloud/storage/get.js.map +1 -1
- package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/list.js +10 -0
- package/dist/cmd/cloud/storage/list.js.map +1 -1
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +62 -5
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/help/index.d.ts.map +1 -1
- package/dist/cmd/help/index.js +8 -18
- package/dist/cmd/help/index.js.map +1 -1
- package/dist/cmd/project/create.d.ts.map +1 -1
- package/dist/cmd/project/create.js +18 -9
- package/dist/cmd/project/create.js.map +1 -1
- package/dist/cmd/project/download.d.ts +3 -1
- package/dist/cmd/project/download.d.ts.map +1 -1
- package/dist/cmd/project/download.js +5 -0
- package/dist/cmd/project/download.js.map +1 -1
- package/dist/cmd/project/import.d.ts +2 -0
- package/dist/cmd/project/import.d.ts.map +1 -0
- package/dist/cmd/project/import.js +88 -0
- package/dist/cmd/project/import.js.map +1 -0
- package/dist/cmd/project/index.d.ts.map +1 -1
- package/dist/cmd/project/index.js +3 -0
- package/dist/cmd/project/index.js.map +1 -1
- package/dist/cmd/project/reconcile.d.ts +67 -0
- package/dist/cmd/project/reconcile.d.ts.map +1 -0
- package/dist/cmd/project/reconcile.js +458 -0
- package/dist/cmd/project/reconcile.js.map +1 -0
- package/dist/cmd/project/template-flow.d.ts +13 -1
- package/dist/cmd/project/template-flow.d.ts.map +1 -1
- package/dist/cmd/project/template-flow.js +56 -18
- package/dist/cmd/project/template-flow.js.map +1 -1
- package/dist/config.d.ts +8 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +50 -21
- package/dist/config.js.map +1 -1
- package/dist/legacy-check.d.ts.map +1 -1
- package/dist/legacy-check.js +8 -0
- package/dist/legacy-check.js.map +1 -1
- package/dist/program-ref.d.ts +4 -0
- package/dist/program-ref.d.ts.map +1 -0
- package/dist/program-ref.js +8 -0
- package/dist/program-ref.js.map +1 -0
- package/dist/regions.d.ts +8 -0
- package/dist/regions.d.ts.map +1 -0
- package/dist/regions.js +77 -0
- package/dist/regions.js.map +1 -0
- package/dist/tui/prompt.d.ts.map +1 -1
- package/dist/tui/prompt.js +7 -1
- package/dist/tui/prompt.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +79 -25
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +7 -7
- package/src/auth.ts +14 -13
- package/src/cli.ts +118 -114
- package/src/cmd/ai/index.ts +6 -1
- package/src/cmd/ai/opencode/index.ts +28 -0
- package/src/cmd/ai/opencode/install.ts +120 -0
- package/src/cmd/ai/opencode/run.ts +103 -0
- package/src/cmd/ai/opencode/uninstall.ts +90 -0
- package/src/cmd/auth/index.ts +3 -0
- package/src/cmd/auth/org/index.ts +142 -0
- package/src/cmd/build/vite/beacon-plugin.ts +164 -0
- package/src/cmd/build/vite/vite-builder.ts +19 -2
- package/src/cmd/build/webanalytics-generator.ts +25 -9
- package/src/cmd/cloud/db/get.ts +7 -0
- package/src/cmd/cloud/db/list.ts +20 -6
- package/src/cmd/cloud/deploy.ts +32 -1
- package/src/cmd/cloud/deployment/show.ts +5 -0
- package/src/cmd/cloud/index.ts +3 -0
- package/src/cmd/cloud/region/index.ts +157 -0
- package/src/cmd/cloud/sandbox/snapshot/build.ts +42 -5
- package/src/cmd/cloud/scp/download.ts +6 -2
- package/src/cmd/cloud/scp/upload.ts +6 -2
- package/src/cmd/cloud/ssh.ts +5 -1
- package/src/cmd/cloud/storage/get.ts +12 -5
- package/src/cmd/cloud/storage/list.ts +11 -0
- package/src/cmd/dev/index.ts +62 -5
- package/src/cmd/help/index.ts +8 -22
- package/src/cmd/project/create.ts +19 -9
- package/src/cmd/project/download.ts +7 -1
- package/src/cmd/project/import.ts +98 -0
- package/src/cmd/project/index.ts +3 -0
- package/src/cmd/project/reconcile.ts +606 -0
- package/src/cmd/project/template-flow.ts +69 -18
- package/src/config.ts +58 -22
- package/src/legacy-check.ts +10 -0
- package/src/program-ref.ts +11 -0
- package/src/regions.ts +95 -0
- package/src/tui/prompt.ts +10 -3
- package/src/tui.ts +82 -26
- package/src/types.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../../src/cmd/project/reconcile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACN,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EAGjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAUnC,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,GAAG,CAAC,kBAAkB,CAAC;CAClD;AAcD;;;GAGG;AACH,wBAAsB,oBAAoB,CACzC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,IAAI,GAAE,IAAI,CAAC,aAAa,EAAE,mBAAmB,CAAe,GAC1D,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAMzB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAcxE;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqC3E;AAgTD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAsEvF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqEvF"}
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
import { join, basename } from 'node:path';
|
|
2
|
+
import { existsSync, statSync } from 'node:fs';
|
|
3
|
+
import { projectGet, projectCreate, projectEnvUpdate, listOrganizations, } from '@agentuity/server';
|
|
4
|
+
import { loadProjectConfig, createProjectConfig } from '../../config';
|
|
5
|
+
import * as tui from '../../tui';
|
|
6
|
+
import { createPrompt } from '../../tui';
|
|
7
|
+
import { isTTY } from '../../auth';
|
|
8
|
+
import { findExistingEnvFile, readEnvFile, writeEnvFile, filterAgentuitySdkKeys, splitEnvAndSecrets, } from '../../env-util';
|
|
9
|
+
import { fetchRegionsWithCache } from '../../regions';
|
|
10
|
+
const defaultDeps = {
|
|
11
|
+
projectGet,
|
|
12
|
+
projectCreate,
|
|
13
|
+
projectEnvUpdate,
|
|
14
|
+
listOrganizations,
|
|
15
|
+
loadProjectConfig,
|
|
16
|
+
createProjectConfig,
|
|
17
|
+
isTTY,
|
|
18
|
+
confirm: tui.confirm,
|
|
19
|
+
selectOrganization: tui.selectOrganization,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Try to load project config, returning null if not found or invalid
|
|
23
|
+
* @internal Exported for testing
|
|
24
|
+
*/
|
|
25
|
+
export async function tryLoadProjectConfig(dir, config, deps = defaultDeps) {
|
|
26
|
+
try {
|
|
27
|
+
return await deps.loadProjectConfig(dir, config);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get the default project name from package.json or directory name
|
|
35
|
+
* @internal Exported for testing
|
|
36
|
+
*/
|
|
37
|
+
export async function getDefaultProjectName(dir) {
|
|
38
|
+
const pkgPath = join(dir, 'package.json');
|
|
39
|
+
if (await Bun.file(pkgPath).exists()) {
|
|
40
|
+
try {
|
|
41
|
+
const pkg = await Bun.file(pkgPath).json();
|
|
42
|
+
if (pkg.name && typeof pkg.name === 'string' && pkg.name.trim()) {
|
|
43
|
+
// Strip org scope if present (e.g., @myorg/project-name -> project-name)
|
|
44
|
+
return pkg.name.replace(/^@[^/]+\//, '').trim();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Fall through to directory name
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return basename(dir);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if a directory contains a valid Agentuity project structure
|
|
55
|
+
* @internal Exported for testing
|
|
56
|
+
*/
|
|
57
|
+
export async function isValidProjectStructure(dir) {
|
|
58
|
+
// Check 1: package.json with @agentuity/runtime and agentuity.config.ts
|
|
59
|
+
const pkgPath = join(dir, 'package.json');
|
|
60
|
+
const configPath = join(dir, 'agentuity.config.ts');
|
|
61
|
+
if (await Bun.file(pkgPath).exists()) {
|
|
62
|
+
try {
|
|
63
|
+
const pkg = await Bun.file(pkgPath).json();
|
|
64
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
65
|
+
if (deps['@agentuity/runtime'] && (await Bun.file(configPath).exists())) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Fall through to check child project
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Check 2: ./agentuity/ subdirectory exists with valid structure (parent project with child)
|
|
74
|
+
const agentuityDir = join(dir, 'agentuity');
|
|
75
|
+
if (existsSync(agentuityDir) && statSync(agentuityDir).isDirectory()) {
|
|
76
|
+
const childPkgPath = join(agentuityDir, 'package.json');
|
|
77
|
+
const childConfigPath = join(agentuityDir, 'agentuity.config.ts');
|
|
78
|
+
if (await Bun.file(childPkgPath).exists()) {
|
|
79
|
+
try {
|
|
80
|
+
const childPkg = await Bun.file(childPkgPath).json();
|
|
81
|
+
const childDeps = { ...childPkg.dependencies, ...childPkg.devDependencies };
|
|
82
|
+
if (childDeps['@agentuity/runtime'] && (await Bun.file(childConfigPath).exists())) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Invalid package.json in child - fall through
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Update or create .env file with new SDK key
|
|
95
|
+
*/
|
|
96
|
+
async function updateSdkKeyInEnv(dir, sdkKey) {
|
|
97
|
+
const envPath = join(dir, '.env');
|
|
98
|
+
const envFile = Bun.file(envPath);
|
|
99
|
+
if (await envFile.exists()) {
|
|
100
|
+
// Update existing .env - read, modify, write
|
|
101
|
+
const existing = await readEnvFile(envPath);
|
|
102
|
+
existing.AGENTUITY_SDK_KEY = sdkKey;
|
|
103
|
+
await writeEnvFile(envPath, existing);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Create new .env
|
|
107
|
+
const comment = '# AGENTUITY_SDK_KEY is a sensitive value and should not be committed to version control.';
|
|
108
|
+
const content = `${comment}\nAGENTUITY_SDK_KEY=${sdkKey}\n`;
|
|
109
|
+
await Bun.write(envPath, content);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Sync existing environment variables to the new project
|
|
114
|
+
*/
|
|
115
|
+
async function syncEnvToProject(dir, projectId, apiClient, logger) {
|
|
116
|
+
try {
|
|
117
|
+
const envFilePath = await findExistingEnvFile(dir);
|
|
118
|
+
const localEnv = await readEnvFile(envFilePath);
|
|
119
|
+
const filteredEnv = filterAgentuitySdkKeys(localEnv);
|
|
120
|
+
if (Object.keys(filteredEnv).length > 0) {
|
|
121
|
+
const { env, secrets } = splitEnvAndSecrets(filteredEnv);
|
|
122
|
+
await projectEnvUpdate(apiClient, {
|
|
123
|
+
id: projectId,
|
|
124
|
+
env,
|
|
125
|
+
secrets,
|
|
126
|
+
});
|
|
127
|
+
logger.debug(`Synced ${Object.keys(filteredEnv).length} environment variables to cloud`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
// Non-fatal: just log the error
|
|
132
|
+
logger.debug('Failed to sync environment variables:', error);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Prompt user to select an organization
|
|
137
|
+
*/
|
|
138
|
+
async function selectOrg(orgs, config, defaultOrgId) {
|
|
139
|
+
return tui.selectOrganization(orgs, defaultOrgId ?? config.preferences?.orgId);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Prompt user to select a region from the available regions
|
|
143
|
+
*/
|
|
144
|
+
async function selectRegion(regions, defaultRegion) {
|
|
145
|
+
if (regions.length === 0) {
|
|
146
|
+
throw new Error('No cloud regions available');
|
|
147
|
+
}
|
|
148
|
+
if (regions.length === 1) {
|
|
149
|
+
return regions[0].region;
|
|
150
|
+
}
|
|
151
|
+
// Build options from API regions
|
|
152
|
+
const options = regions.map((r) => ({
|
|
153
|
+
value: r.region,
|
|
154
|
+
label: `${r.description} (${r.region})`,
|
|
155
|
+
}));
|
|
156
|
+
// Move default to top if found
|
|
157
|
+
const defaultValue = defaultRegion ?? regions[0].region;
|
|
158
|
+
const defaultIndex = options.findIndex((r) => r.value === defaultValue);
|
|
159
|
+
if (defaultIndex > 0) {
|
|
160
|
+
const [defaultItem] = options.splice(defaultIndex, 1);
|
|
161
|
+
options.unshift(defaultItem);
|
|
162
|
+
}
|
|
163
|
+
const prompt = createPrompt();
|
|
164
|
+
return prompt.select({
|
|
165
|
+
message: 'Select a region:',
|
|
166
|
+
options,
|
|
167
|
+
initial: options[0].value,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Prompt user for text input with validation
|
|
172
|
+
*/
|
|
173
|
+
async function textPrompt(options) {
|
|
174
|
+
const prompt = createPrompt();
|
|
175
|
+
return prompt.text({
|
|
176
|
+
message: options.message,
|
|
177
|
+
initial: options.initial,
|
|
178
|
+
hint: options.initial ? `(default: ${options.initial})` : undefined,
|
|
179
|
+
validate: options.validate,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Import an existing project (with invalid/inaccessible agentuity.json) to user's org
|
|
184
|
+
*/
|
|
185
|
+
async function importExistingProject(opts, existingConfig, orgs) {
|
|
186
|
+
const { dir, apiClient, config, logger } = opts;
|
|
187
|
+
tui.warning("You don't have access to this project. It may have been deleted or transferred to another organization.");
|
|
188
|
+
tui.newline();
|
|
189
|
+
const shouldImport = await tui.confirm('Would you like to import this project to your organization?', true);
|
|
190
|
+
if (!shouldImport) {
|
|
191
|
+
return { status: 'skipped', message: 'Project import cancelled.' };
|
|
192
|
+
}
|
|
193
|
+
tui.newline();
|
|
194
|
+
// Select org
|
|
195
|
+
const orgId = await selectOrg(orgs, config, existingConfig.orgId);
|
|
196
|
+
// Fetch regions and select
|
|
197
|
+
const regions = await tui.spinner({
|
|
198
|
+
message: 'Fetching regions',
|
|
199
|
+
clearOnSuccess: true,
|
|
200
|
+
callback: () => fetchRegionsWithCache(config.name, apiClient, logger),
|
|
201
|
+
});
|
|
202
|
+
const region = await selectRegion(regions, existingConfig.region);
|
|
203
|
+
// Get project name
|
|
204
|
+
const defaultName = await getDefaultProjectName(dir);
|
|
205
|
+
const projectName = await textPrompt({
|
|
206
|
+
message: 'Project name:',
|
|
207
|
+
initial: defaultName,
|
|
208
|
+
validate: (value) => {
|
|
209
|
+
if (!value || value.trim().length === 0) {
|
|
210
|
+
return 'Project name is required';
|
|
211
|
+
}
|
|
212
|
+
return true;
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
// Create the project
|
|
216
|
+
const newProject = await tui.spinner({
|
|
217
|
+
message: 'Registering project',
|
|
218
|
+
clearOnSuccess: true,
|
|
219
|
+
callback: async () => {
|
|
220
|
+
return projectCreate(apiClient, {
|
|
221
|
+
name: projectName,
|
|
222
|
+
orgId,
|
|
223
|
+
cloudRegion: region,
|
|
224
|
+
});
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
// Update .env with new SDK key
|
|
228
|
+
await updateSdkKeyInEnv(dir, newProject.sdkKey);
|
|
229
|
+
tui.success('Updated AGENTUITY_SDK_KEY in .env');
|
|
230
|
+
// Create new agentuity.json
|
|
231
|
+
await createProjectConfig(dir, {
|
|
232
|
+
projectId: newProject.id,
|
|
233
|
+
orgId,
|
|
234
|
+
sdkKey: newProject.sdkKey,
|
|
235
|
+
region,
|
|
236
|
+
});
|
|
237
|
+
tui.success('Updated agentuity.json');
|
|
238
|
+
// Sync env vars
|
|
239
|
+
await tui.spinner({
|
|
240
|
+
message: 'Syncing environment variables',
|
|
241
|
+
clearOnSuccess: true,
|
|
242
|
+
callback: () => syncEnvToProject(dir, newProject.id, apiClient, logger),
|
|
243
|
+
});
|
|
244
|
+
const project = {
|
|
245
|
+
projectId: newProject.id,
|
|
246
|
+
orgId,
|
|
247
|
+
region,
|
|
248
|
+
};
|
|
249
|
+
tui.success('Project imported successfully!');
|
|
250
|
+
return { status: 'imported', project };
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Create a new project from an unregistered local project
|
|
254
|
+
*/
|
|
255
|
+
async function createNewProject(opts) {
|
|
256
|
+
const { dir, apiClient, config, logger } = opts;
|
|
257
|
+
tui.warning('This project is not registered with Agentuity Cloud.');
|
|
258
|
+
tui.newline();
|
|
259
|
+
const shouldCreate = await tui.confirm('Would you like to register it now?', true);
|
|
260
|
+
if (!shouldCreate) {
|
|
261
|
+
return { status: 'skipped', message: 'Project registration cancelled.' };
|
|
262
|
+
}
|
|
263
|
+
tui.newline();
|
|
264
|
+
// Fetch user's orgs
|
|
265
|
+
const orgs = await tui.spinner({
|
|
266
|
+
message: 'Fetching organizations',
|
|
267
|
+
clearOnSuccess: true,
|
|
268
|
+
callback: () => listOrganizations(apiClient),
|
|
269
|
+
});
|
|
270
|
+
if (orgs.length === 0) {
|
|
271
|
+
return { status: 'error', message: 'No organizations found for your account.' };
|
|
272
|
+
}
|
|
273
|
+
// Select org
|
|
274
|
+
const orgId = await selectOrg(orgs, config);
|
|
275
|
+
// Fetch regions and select
|
|
276
|
+
const regions = await tui.spinner({
|
|
277
|
+
message: 'Fetching regions',
|
|
278
|
+
clearOnSuccess: true,
|
|
279
|
+
callback: () => fetchRegionsWithCache(config.name, apiClient, logger),
|
|
280
|
+
});
|
|
281
|
+
const region = await selectRegion(regions);
|
|
282
|
+
// Get project name from package.json or prompt
|
|
283
|
+
const defaultName = await getDefaultProjectName(dir);
|
|
284
|
+
const projectName = await textPrompt({
|
|
285
|
+
message: 'Project name:',
|
|
286
|
+
initial: defaultName,
|
|
287
|
+
validate: (value) => {
|
|
288
|
+
if (!value || value.trim().length === 0) {
|
|
289
|
+
return 'Project name is required';
|
|
290
|
+
}
|
|
291
|
+
return true;
|
|
292
|
+
},
|
|
293
|
+
});
|
|
294
|
+
// Create the project
|
|
295
|
+
const newProject = await tui.spinner({
|
|
296
|
+
message: 'Registering project',
|
|
297
|
+
clearOnSuccess: true,
|
|
298
|
+
callback: async () => {
|
|
299
|
+
return projectCreate(apiClient, {
|
|
300
|
+
name: projectName,
|
|
301
|
+
orgId,
|
|
302
|
+
cloudRegion: region,
|
|
303
|
+
});
|
|
304
|
+
},
|
|
305
|
+
});
|
|
306
|
+
// Update/create .env with SDK key
|
|
307
|
+
await updateSdkKeyInEnv(dir, newProject.sdkKey);
|
|
308
|
+
tui.success('Updated AGENTUITY_SDK_KEY in .env');
|
|
309
|
+
// Create agentuity.json
|
|
310
|
+
await createProjectConfig(dir, {
|
|
311
|
+
projectId: newProject.id,
|
|
312
|
+
orgId,
|
|
313
|
+
sdkKey: newProject.sdkKey,
|
|
314
|
+
region,
|
|
315
|
+
});
|
|
316
|
+
tui.success('Created agentuity.json');
|
|
317
|
+
// Sync env vars
|
|
318
|
+
await tui.spinner({
|
|
319
|
+
message: 'Syncing environment variables',
|
|
320
|
+
clearOnSuccess: true,
|
|
321
|
+
callback: () => syncEnvToProject(dir, newProject.id, apiClient, logger),
|
|
322
|
+
});
|
|
323
|
+
const project = {
|
|
324
|
+
projectId: newProject.id,
|
|
325
|
+
orgId,
|
|
326
|
+
region,
|
|
327
|
+
};
|
|
328
|
+
tui.success('Project registered successfully!');
|
|
329
|
+
return { status: 'imported', project };
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Reconcile a project - validate access or import if needed
|
|
333
|
+
*
|
|
334
|
+
* This function checks if the current directory has a valid agentuity.json
|
|
335
|
+
* and if the user has access to the project. If not, it offers to import
|
|
336
|
+
* the project to the user's organization.
|
|
337
|
+
*
|
|
338
|
+
* For directories without agentuity.json, it validates the project structure
|
|
339
|
+
* and offers to register the project with Agentuity Cloud.
|
|
340
|
+
*/
|
|
341
|
+
export async function reconcileProject(opts) {
|
|
342
|
+
const { dir, apiClient, config, logger, interactive = isTTY(), validateOnly } = opts;
|
|
343
|
+
// 1. Check if agentuity.json exists
|
|
344
|
+
const projectConfig = await tryLoadProjectConfig(dir, config);
|
|
345
|
+
if (projectConfig) {
|
|
346
|
+
// 2. Validate access to existing project
|
|
347
|
+
try {
|
|
348
|
+
const project = await projectGet(apiClient, { id: projectConfig.projectId, keys: false });
|
|
349
|
+
// 3. Check if orgId matches user's orgs
|
|
350
|
+
const userOrgs = await listOrganizations(apiClient);
|
|
351
|
+
const hasAccess = userOrgs.some((org) => org.id === project.orgId);
|
|
352
|
+
if (hasAccess) {
|
|
353
|
+
return { status: 'valid', project: projectConfig };
|
|
354
|
+
}
|
|
355
|
+
// User doesn't have access - offer to import
|
|
356
|
+
if (!interactive || validateOnly) {
|
|
357
|
+
return {
|
|
358
|
+
status: 'error',
|
|
359
|
+
message: "You don't have access to this project. Run interactively to import it to your organization.",
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
return await importExistingProject(opts, projectConfig, userOrgs);
|
|
363
|
+
}
|
|
364
|
+
catch (err) {
|
|
365
|
+
// Project not found or access denied
|
|
366
|
+
logger.debug('Failed to get project:', err);
|
|
367
|
+
if (!interactive || validateOnly) {
|
|
368
|
+
return {
|
|
369
|
+
status: 'error',
|
|
370
|
+
message: 'Project not found or access denied. Run interactively to import it to your organization.',
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
const userOrgs = await listOrganizations(apiClient);
|
|
374
|
+
return await importExistingProject(opts, projectConfig, userOrgs);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
// 4. No agentuity.json - validate project structure
|
|
378
|
+
const isValid = await isValidProjectStructure(dir);
|
|
379
|
+
if (!isValid) {
|
|
380
|
+
return {
|
|
381
|
+
status: 'error',
|
|
382
|
+
message: 'This directory does not appear to be a valid Agentuity project. ' +
|
|
383
|
+
'Expected agentuity.config.ts and @agentuity/runtime dependency, ' +
|
|
384
|
+
'or an agentuity/ subdirectory.',
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
if (!interactive || validateOnly) {
|
|
388
|
+
return {
|
|
389
|
+
status: 'error',
|
|
390
|
+
message: 'Project must be registered with Agentuity Cloud. ' +
|
|
391
|
+
'Run interactively or use "agentuity project import".',
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
// 5. Prompt to create new project
|
|
395
|
+
return await createNewProject(opts);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Run project import directly (for the import command)
|
|
399
|
+
*/
|
|
400
|
+
export async function runProjectImport(opts) {
|
|
401
|
+
const { dir, apiClient, config, interactive = true, validateOnly = false } = opts;
|
|
402
|
+
// Check if agentuity.json already exists and is valid
|
|
403
|
+
const projectConfig = await tryLoadProjectConfig(dir, config);
|
|
404
|
+
if (projectConfig) {
|
|
405
|
+
try {
|
|
406
|
+
const project = await projectGet(apiClient, { id: projectConfig.projectId, keys: false });
|
|
407
|
+
const userOrgs = await listOrganizations(apiClient);
|
|
408
|
+
const hasAccess = userOrgs.some((org) => org.id === project.orgId);
|
|
409
|
+
if (hasAccess) {
|
|
410
|
+
tui.info('This project is already registered and you have access to it.');
|
|
411
|
+
return { status: 'valid', project: projectConfig };
|
|
412
|
+
}
|
|
413
|
+
// Has agentuity.json but no access - offer to import
|
|
414
|
+
if (!interactive) {
|
|
415
|
+
return {
|
|
416
|
+
status: 'error',
|
|
417
|
+
message: "You don't have access to this project. Run interactively to import it to your organization.",
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
return await importExistingProject(opts, projectConfig, userOrgs);
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
// Project doesn't exist - offer to import
|
|
424
|
+
if (!interactive) {
|
|
425
|
+
return {
|
|
426
|
+
status: 'error',
|
|
427
|
+
message: 'Project not found. Run interactively to import it to your organization.',
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
const userOrgs = await listOrganizations(apiClient);
|
|
431
|
+
return await importExistingProject(opts, projectConfig, userOrgs);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
// No agentuity.json - validate structure and create new project
|
|
435
|
+
const isValid = await isValidProjectStructure(dir);
|
|
436
|
+
if (!isValid) {
|
|
437
|
+
return {
|
|
438
|
+
status: 'error',
|
|
439
|
+
message: 'This directory does not appear to be a valid Agentuity project. ' +
|
|
440
|
+
'Expected agentuity.config.ts and @agentuity/runtime dependency, ' +
|
|
441
|
+
'or an agentuity/ subdirectory.',
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
if (validateOnly) {
|
|
445
|
+
return {
|
|
446
|
+
status: 'valid',
|
|
447
|
+
message: 'Project structure is valid and ready to import.',
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
if (!interactive) {
|
|
451
|
+
return {
|
|
452
|
+
status: 'error',
|
|
453
|
+
message: 'Project import requires interactive mode.',
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
return await createNewProject(opts);
|
|
457
|
+
}
|
|
458
|
+
//# sourceMappingURL=reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../../src/cmd/project/reconcile.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,18 @@ interface CreateFlowOptions {
|
|
|
18
18
|
region?: string;
|
|
19
19
|
apiClient?: APIClient;
|
|
20
20
|
}
|
|
21
|
-
export
|
|
21
|
+
export interface CreateFlowResult {
|
|
22
|
+
projectId?: string;
|
|
23
|
+
orgId?: string;
|
|
24
|
+
name: string;
|
|
25
|
+
path: string;
|
|
26
|
+
template: string;
|
|
27
|
+
installed: boolean;
|
|
28
|
+
built: boolean;
|
|
29
|
+
domains?: string[];
|
|
30
|
+
success: boolean;
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function runCreateFlow(options: CreateFlowOptions): Promise<CreateFlowResult>;
|
|
22
34
|
export {};
|
|
23
35
|
//# sourceMappingURL=template-flow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-flow.d.ts","sourceRoot":"","sources":["../../../src/cmd/project/template-flow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template-flow.d.ts","sourceRoot":"","sources":["../../../src/cmd/project/template-flow.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAM9C,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAmB3C,UAAU,iBAAiB;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqlBzF"}
|
|
@@ -2,7 +2,7 @@ import { basename, resolve } from 'node:path';
|
|
|
2
2
|
import { existsSync, readdirSync, rmSync, statSync } from 'node:fs';
|
|
3
3
|
import { cwd } from 'node:process';
|
|
4
4
|
import { homedir } from 'node:os';
|
|
5
|
-
import { projectCreate, projectExists, listResources, projectEnvUpdate, getServiceUrls, APIClient as ServerAPIClient, createResources, } from '@agentuity/server';
|
|
5
|
+
import { projectCreate, projectExists, listResources, projectEnvUpdate, getServiceUrls, APIClient as ServerAPIClient, createResources, validateDatabaseName, } from '@agentuity/server';
|
|
6
6
|
import * as tui from '../../tui';
|
|
7
7
|
import { createPrompt, note } from '../../tui';
|
|
8
8
|
import { playSound } from '../../sound';
|
|
@@ -97,7 +97,7 @@ export async function runCreateFlow(options) {
|
|
|
97
97
|
const home = homedir();
|
|
98
98
|
if (dest === '/' || dest === home) {
|
|
99
99
|
logger.fatal(`Refusing to delete protected path: ${dest}`, ErrorCode.VALIDATION_FAILED);
|
|
100
|
-
return;
|
|
100
|
+
return undefined;
|
|
101
101
|
}
|
|
102
102
|
rmSync(dest, { recursive: true, force: true });
|
|
103
103
|
tui.success(`Deleted ${dest}`);
|
|
@@ -116,7 +116,7 @@ export async function runCreateFlow(options) {
|
|
|
116
116
|
.map((t) => ` - ${t.id.padEnd(20)} ${t.description}`)
|
|
117
117
|
.join('\n');
|
|
118
118
|
logger.fatal(`Template "${initialTemplate}" not found\n\nAvailable templates:\n${availableTemplates}`, ErrorCode.RESOURCE_NOT_FOUND);
|
|
119
|
-
return;
|
|
119
|
+
return undefined;
|
|
120
120
|
}
|
|
121
121
|
selectedTemplate = found;
|
|
122
122
|
}
|
|
@@ -146,7 +146,7 @@ export async function runCreateFlow(options) {
|
|
|
146
146
|
const found = templates.find((t) => t.id === templateId);
|
|
147
147
|
if (!found) {
|
|
148
148
|
logger.fatal('Template selection failed', ErrorCode.USER_CANCELLED);
|
|
149
|
-
return;
|
|
149
|
+
return undefined;
|
|
150
150
|
}
|
|
151
151
|
selectedTemplate = found;
|
|
152
152
|
}
|
|
@@ -159,7 +159,7 @@ export async function runCreateFlow(options) {
|
|
|
159
159
|
logger,
|
|
160
160
|
});
|
|
161
161
|
// Setup project (replace placeholders, install deps, build)
|
|
162
|
-
await setupProject({
|
|
162
|
+
const setupResult = await setupProject({
|
|
163
163
|
dest,
|
|
164
164
|
projectName: projectName === '.' ? basename(dest) : projectName,
|
|
165
165
|
dirName: dirName === '.' ? basename(dest) : dirName,
|
|
@@ -167,15 +167,23 @@ export async function runCreateFlow(options) {
|
|
|
167
167
|
noBuild: options.noBuild,
|
|
168
168
|
logger,
|
|
169
169
|
});
|
|
170
|
-
//
|
|
171
|
-
if (!
|
|
170
|
+
// If setup failed, skip resource prompts and registration - just show error and return
|
|
171
|
+
if (!setupResult.success) {
|
|
172
|
+
tui.warning('Project setup failed. Skipping resource configuration.');
|
|
173
|
+
return {
|
|
174
|
+
name: projectName,
|
|
175
|
+
path: dest,
|
|
176
|
+
template: selectedTemplate.id,
|
|
177
|
+
installed: !options.noInstall,
|
|
178
|
+
built: false,
|
|
179
|
+
success: false,
|
|
180
|
+
error: 'Project setup completed with errors',
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
// Add separator bar if we're going to show resource prompts
|
|
184
|
+
if (!skipPrompts && auth && apiClient && catalystClient && orgId && region) {
|
|
172
185
|
const { symbols, tuiColors } = tui;
|
|
173
|
-
console.log(
|
|
174
|
-
console.log(`${tuiColors.secondary(symbols.bar)} ${tuiColors.muted(selectedTemplate.name)}`);
|
|
175
|
-
// Only add bar if we're going to show resource prompts
|
|
176
|
-
if (auth && apiClient && catalystClient && orgId && region) {
|
|
177
|
-
console.log(tuiColors.secondary(symbols.bar));
|
|
178
|
-
}
|
|
186
|
+
console.log(tuiColors.secondary(symbols.bar));
|
|
179
187
|
}
|
|
180
188
|
let _domains = domains;
|
|
181
189
|
const resourceEnvVars = {};
|
|
@@ -253,10 +261,18 @@ export async function runCreateFlow(options) {
|
|
|
253
261
|
}
|
|
254
262
|
switch (choices.db_action) {
|
|
255
263
|
case 'Create New': {
|
|
256
|
-
const
|
|
264
|
+
const dbNameInput = await prompt.text({
|
|
257
265
|
message: 'Database name',
|
|
258
|
-
hint: 'Optional -
|
|
266
|
+
hint: 'Optional - lowercase letters, digits, underscores only',
|
|
267
|
+
validate: (value) => {
|
|
268
|
+
const trimmed = value.trim();
|
|
269
|
+
if (trimmed === '')
|
|
270
|
+
return true;
|
|
271
|
+
const result = validateDatabaseName(trimmed);
|
|
272
|
+
return result.valid ? true : result.error;
|
|
273
|
+
},
|
|
259
274
|
});
|
|
275
|
+
const dbName = dbNameInput.trim() || undefined;
|
|
260
276
|
const dbDescription = await prompt.text({
|
|
261
277
|
message: 'Database description',
|
|
262
278
|
hint: 'Optional - press Enter to skip',
|
|
@@ -268,7 +284,7 @@ export async function runCreateFlow(options) {
|
|
|
268
284
|
return createResources(catalystClient, orgId, region, [
|
|
269
285
|
{
|
|
270
286
|
type: 'db',
|
|
271
|
-
name: dbName
|
|
287
|
+
name: dbName,
|
|
272
288
|
description: dbDescription || undefined,
|
|
273
289
|
},
|
|
274
290
|
]);
|
|
@@ -464,7 +480,12 @@ export async function runCreateFlow(options) {
|
|
|
464
480
|
await initGitRepo(dest);
|
|
465
481
|
// Show completion message
|
|
466
482
|
if (!skipPrompts) {
|
|
467
|
-
|
|
483
|
+
if (setupResult.success) {
|
|
484
|
+
tui.success('✨ Project created successfully!\n');
|
|
485
|
+
}
|
|
486
|
+
else {
|
|
487
|
+
tui.warning('Project created with errors (see above)\n');
|
|
488
|
+
}
|
|
468
489
|
// Show next steps in a box with primary color for commands
|
|
469
490
|
if (dirName !== '.') {
|
|
470
491
|
// Use relative path if dest is under cwd, otherwise show full path
|
|
@@ -478,7 +499,12 @@ export async function runCreateFlow(options) {
|
|
|
478
499
|
prompt.outro(`${tui.tuiColors.muted('🛟 Need help?')} ${tui.link('https://discord.gg/agentuity')}`, `${tui.tuiColors.muted('⭐️ Follow us:')} ${tui.link('https://github.com/agentuity/sdk')}`);
|
|
479
500
|
}
|
|
480
501
|
else {
|
|
481
|
-
|
|
502
|
+
if (setupResult.success) {
|
|
503
|
+
tui.success('✨ Project created successfully!');
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
tui.warning('Project created with errors');
|
|
507
|
+
}
|
|
482
508
|
}
|
|
483
509
|
playSound();
|
|
484
510
|
if (process.stdin.isTTY && !skipPrompts && _domains?.length && projectId) {
|
|
@@ -493,6 +519,18 @@ export async function runCreateFlow(options) {
|
|
|
493
519
|
if (authEnabled && !templateHasAuth) {
|
|
494
520
|
printIntegrationExamples();
|
|
495
521
|
}
|
|
522
|
+
return {
|
|
523
|
+
projectId,
|
|
524
|
+
orgId,
|
|
525
|
+
name: projectName,
|
|
526
|
+
path: dest,
|
|
527
|
+
template: selectedTemplate.id,
|
|
528
|
+
installed: !options.noInstall,
|
|
529
|
+
built: !options.noBuild && setupResult.success,
|
|
530
|
+
domains: _domains,
|
|
531
|
+
success: setupResult.success,
|
|
532
|
+
error: setupResult.success ? undefined : 'Project setup completed with errors',
|
|
533
|
+
};
|
|
496
534
|
}
|
|
497
535
|
/**
|
|
498
536
|
* Sanitize a project name to create a safe directory/package name
|