@autonoma-io/a6s 5.1.2
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/README.md +200 -0
- package/bin/binaries/a6s-darwin-amd64 +0 -0
- package/bin/binaries/a6s-darwin-arm64 +0 -0
- package/bin/binaries/a6s-linux-amd64 +0 -0
- package/bin/binaries/a6s-linux-arm64 +0 -0
- package/bin/binaries/a6s-win32-x64.exe +0 -0
- package/dist/commands/ai-learning-demo.d.ts +3 -0
- package/dist/commands/ai-learning-demo.d.ts.map +1 -0
- package/dist/commands/ai-learning-demo.js +176 -0
- package/dist/commands/ai-learning-demo.js.map +1 -0
- package/dist/commands/auth.d.ts +33 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +603 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/consent/consent.d.ts +74 -0
- package/dist/consent/consent.d.ts.map +1 -0
- package/dist/consent/consent.js +184 -0
- package/dist/consent/consent.js.map +1 -0
- package/dist/consent/disclosure.d.ts +26 -0
- package/dist/consent/disclosure.d.ts.map +1 -0
- package/dist/consent/disclosure.js +170 -0
- package/dist/consent/disclosure.js.map +1 -0
- package/dist/consent/ignore.d.ts +50 -0
- package/dist/consent/ignore.d.ts.map +1 -0
- package/dist/consent/ignore.js +277 -0
- package/dist/consent/ignore.js.map +1 -0
- package/dist/consent/index.d.ts +4 -0
- package/dist/consent/index.d.ts.map +1 -0
- package/dist/consent/index.js +23 -0
- package/dist/consent/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +390 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive.d.ts +19 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +367 -0
- package/dist/interactive.js.map +1 -0
- package/dist/modules/ab-testing.d.ts +16 -0
- package/dist/modules/ab-testing.d.ts.map +1 -0
- package/dist/modules/ab-testing.js +375 -0
- package/dist/modules/ab-testing.js.map +1 -0
- package/dist/modules/ai-orchestration.d.ts +70 -0
- package/dist/modules/ai-orchestration.d.ts.map +1 -0
- package/dist/modules/ai-orchestration.js +546 -0
- package/dist/modules/ai-orchestration.js.map +1 -0
- package/dist/modules/auth-access-control.d.ts +118 -0
- package/dist/modules/auth-access-control.d.ts.map +1 -0
- package/dist/modules/auth-access-control.js +832 -0
- package/dist/modules/auth-access-control.js.map +1 -0
- package/dist/modules/campaign.d.ts +20 -0
- package/dist/modules/campaign.d.ts.map +1 -0
- package/dist/modules/campaign.js +301 -0
- package/dist/modules/campaign.js.map +1 -0
- package/dist/modules/database.d.ts +14 -0
- package/dist/modules/database.d.ts.map +1 -0
- package/dist/modules/database.js +253 -0
- package/dist/modules/database.js.map +1 -0
- package/dist/modules/deployment.d.ts +17 -0
- package/dist/modules/deployment.d.ts.map +1 -0
- package/dist/modules/deployment.js +201 -0
- package/dist/modules/deployment.js.map +1 -0
- package/dist/modules/edge-computing.d.ts +130 -0
- package/dist/modules/edge-computing.d.ts.map +1 -0
- package/dist/modules/edge-computing.js +672 -0
- package/dist/modules/edge-computing.js.map +1 -0
- package/dist/modules/load-testing.d.ts +21 -0
- package/dist/modules/load-testing.d.ts.map +1 -0
- package/dist/modules/load-testing.js +372 -0
- package/dist/modules/load-testing.js.map +1 -0
- package/dist/modules/monitoring.d.ts +18 -0
- package/dist/modules/monitoring.d.ts.map +1 -0
- package/dist/modules/monitoring.js +375 -0
- package/dist/modules/monitoring.js.map +1 -0
- package/dist/modules/onboarding.d.ts +20 -0
- package/dist/modules/onboarding.d.ts.map +1 -0
- package/dist/modules/onboarding.js +455 -0
- package/dist/modules/onboarding.js.map +1 -0
- package/dist/nlp/memory.d.ts +43 -0
- package/dist/nlp/memory.d.ts.map +1 -0
- package/dist/nlp/memory.js +205 -0
- package/dist/nlp/memory.js.map +1 -0
- package/dist/nlp/processor.d.ts +29 -0
- package/dist/nlp/processor.d.ts.map +1 -0
- package/dist/nlp/processor.js +321 -0
- package/dist/nlp/processor.js.map +1 -0
- package/dist/utils/db-client.d.ts +35 -0
- package/dist/utils/db-client.d.ts.map +1 -0
- package/dist/utils/db-client.js +132 -0
- package/dist/utils/db-client.js.map +1 -0
- package/package.json +97 -0
- package/scripts/chmod-binaries.js +33 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DatabaseModule = void 0;
|
|
7
|
+
const pg_1 = require("pg");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const util_1 = require("util");
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
14
|
+
const db_client_1 = require("../utils/db-client");
|
|
15
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
16
|
+
class DatabaseModule {
|
|
17
|
+
dbClient;
|
|
18
|
+
connectionString;
|
|
19
|
+
constructor() {
|
|
20
|
+
this.connectionString = db_client_1.DEFAULT_CONNECTION_STRING;
|
|
21
|
+
// Use secure SSL configuration with AWS RDS CA bundle
|
|
22
|
+
this.dbClient = (0, db_client_1.createDbClient)(this.connectionString);
|
|
23
|
+
}
|
|
24
|
+
async runMigrations() {
|
|
25
|
+
const spinner = (0, ora_1.default)('Running database migrations...').start();
|
|
26
|
+
try {
|
|
27
|
+
await this.dbClient.connect();
|
|
28
|
+
// Check for migrations table
|
|
29
|
+
const tableExists = await this.dbClient.query(`
|
|
30
|
+
SELECT EXISTS (
|
|
31
|
+
SELECT FROM information_schema.tables
|
|
32
|
+
WHERE table_name = 'migrations'
|
|
33
|
+
);
|
|
34
|
+
`);
|
|
35
|
+
if (!tableExists.rows[0].exists) {
|
|
36
|
+
spinner.text = 'Creating migrations table...';
|
|
37
|
+
await this.dbClient.query(`
|
|
38
|
+
CREATE TABLE migrations (
|
|
39
|
+
id SERIAL PRIMARY KEY,
|
|
40
|
+
name VARCHAR(255) UNIQUE NOT NULL,
|
|
41
|
+
executed_at TIMESTAMP DEFAULT NOW()
|
|
42
|
+
);
|
|
43
|
+
`);
|
|
44
|
+
}
|
|
45
|
+
// Get list of migration files
|
|
46
|
+
const migrationsPath = path_1.default.join(process.env.HOME || '', 'Desktop/Dev/autonoma/migrations');
|
|
47
|
+
let migrationFiles = [];
|
|
48
|
+
try {
|
|
49
|
+
const files = await promises_1.default.readdir(migrationsPath);
|
|
50
|
+
migrationFiles = files.filter(f => f.endsWith('.sql')).sort();
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
spinner.warn('No migrations directory found');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Check which migrations have been run
|
|
57
|
+
const executedMigrations = await this.dbClient.query('SELECT name FROM migrations');
|
|
58
|
+
const executed = new Set(executedMigrations.rows.map(r => r.name));
|
|
59
|
+
// Run pending migrations
|
|
60
|
+
let migrationsRun = 0;
|
|
61
|
+
for (const file of migrationFiles) {
|
|
62
|
+
if (!executed.has(file)) {
|
|
63
|
+
spinner.text = `Running migration: ${file}`;
|
|
64
|
+
const sql = await promises_1.default.readFile(path_1.default.join(migrationsPath, file), 'utf-8');
|
|
65
|
+
try {
|
|
66
|
+
await this.dbClient.query('BEGIN');
|
|
67
|
+
await this.dbClient.query(sql);
|
|
68
|
+
await this.dbClient.query('INSERT INTO migrations (name) VALUES ($1)', [file]);
|
|
69
|
+
await this.dbClient.query('COMMIT');
|
|
70
|
+
migrationsRun++;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
await this.dbClient.query('ROLLBACK');
|
|
74
|
+
throw new Error(`Migration ${file} failed: ${error.message}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (migrationsRun > 0) {
|
|
79
|
+
spinner.succeed(`Successfully ran ${migrationsRun} migration(s)`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
spinner.succeed('All migrations are up to date');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
spinner.fail('Migration failed');
|
|
87
|
+
console.error(chalk_1.default.red('Error:'), error.message);
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
await this.dbClient.end();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async executeQuery(sql, options = {}) {
|
|
95
|
+
const spinner = (0, ora_1.default)('Executing query...').start();
|
|
96
|
+
try {
|
|
97
|
+
// Safety check for destructive queries
|
|
98
|
+
if (options.safe) {
|
|
99
|
+
const lowerSql = sql.toLowerCase();
|
|
100
|
+
if (lowerSql.includes('drop') || lowerSql.includes('delete') ||
|
|
101
|
+
lowerSql.includes('truncate') || lowerSql.includes('update')) {
|
|
102
|
+
spinner.fail('Unsafe query detected. Remove --safe flag to execute destructive queries.');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
await this.dbClient.connect();
|
|
107
|
+
const result = await this.dbClient.query(sql);
|
|
108
|
+
spinner.stop();
|
|
109
|
+
// Display results
|
|
110
|
+
if (result.rows && result.rows.length > 0) {
|
|
111
|
+
console.log(chalk_1.default.cyan(`\n📊 Query Results (${result.rows.length} rows):\n`));
|
|
112
|
+
// Simple table rendering
|
|
113
|
+
console.table(result.rows.slice(0, 20));
|
|
114
|
+
if (result.rows.length > 20) {
|
|
115
|
+
console.log(chalk_1.default.gray(`\n... and ${result.rows.length - 20} more rows`));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else if (result.command) {
|
|
119
|
+
console.log(chalk_1.default.green(`\n✅ Query executed successfully`));
|
|
120
|
+
console.log(chalk_1.default.gray(`Command: ${result.command}`));
|
|
121
|
+
if (result.rowCount !== null) {
|
|
122
|
+
console.log(chalk_1.default.gray(`Rows affected: ${result.rowCount}`));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
console.log(chalk_1.default.yellow('\nQuery executed but returned no results'));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
spinner.fail('Query execution failed');
|
|
131
|
+
console.error(chalk_1.default.red('Error:'), error.message);
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
await this.dbClient.end();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async createBackup() {
|
|
139
|
+
const spinner = (0, ora_1.default)('Creating database backup...').start();
|
|
140
|
+
try {
|
|
141
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
142
|
+
const backupPath = path_1.default.join(process.env.HOME || '', 'Desktop/Dev/autonoma/backups');
|
|
143
|
+
const backupFile = path_1.default.join(backupPath, `autonoma-backup-${timestamp}.sql`);
|
|
144
|
+
// Ensure backup directory exists
|
|
145
|
+
await promises_1.default.mkdir(backupPath, { recursive: true });
|
|
146
|
+
spinner.text = 'Dumping database...';
|
|
147
|
+
// Parse connection string
|
|
148
|
+
const url = new URL(this.connectionString.replace('postgresql://', 'http://'));
|
|
149
|
+
const host = url.hostname;
|
|
150
|
+
const port = url.port || '5432';
|
|
151
|
+
const database = url.pathname.slice(1).split('?')[0];
|
|
152
|
+
const username = url.username;
|
|
153
|
+
const password = url.password;
|
|
154
|
+
// Execute pg_dump
|
|
155
|
+
const env = { ...process.env, PGPASSWORD: password };
|
|
156
|
+
const command = `pg_dump -h ${host} -p ${port} -U ${username} -d ${database} -f ${backupFile} --no-owner --no-acl`;
|
|
157
|
+
await execAsync(command, { env });
|
|
158
|
+
// Get file size
|
|
159
|
+
const stats = await promises_1.default.stat(backupFile);
|
|
160
|
+
const sizeMB = (stats.size / 1024 / 1024).toFixed(2);
|
|
161
|
+
spinner.succeed(`Backup created successfully`);
|
|
162
|
+
console.log(chalk_1.default.green('\n✅ Database backup completed!'));
|
|
163
|
+
console.log(chalk_1.default.gray(`File: ${backupFile}`));
|
|
164
|
+
console.log(chalk_1.default.gray(`Size: ${sizeMB} MB`));
|
|
165
|
+
// Also create a compressed version
|
|
166
|
+
spinner.start('Compressing backup...');
|
|
167
|
+
await execAsync(`gzip -k ${backupFile}`);
|
|
168
|
+
spinner.succeed('Backup compressed');
|
|
169
|
+
const compressedStats = await promises_1.default.stat(`${backupFile}.gz`);
|
|
170
|
+
const compressedSizeMB = (compressedStats.size / 1024 / 1024).toFixed(2);
|
|
171
|
+
console.log(chalk_1.default.gray(`Compressed size: ${compressedSizeMB} MB`));
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
spinner.fail('Backup failed');
|
|
175
|
+
console.error(chalk_1.default.red('Error:'), error.message);
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async fixSSLConfiguration() {
|
|
180
|
+
const spinner = (0, ora_1.default)('Fixing SSL configuration...').start();
|
|
181
|
+
try {
|
|
182
|
+
spinner.text = 'Testing current connection...';
|
|
183
|
+
// Test without SSL fix
|
|
184
|
+
const testClient = new pg_1.Client({
|
|
185
|
+
connectionString: this.connectionString
|
|
186
|
+
});
|
|
187
|
+
let needsFix = false;
|
|
188
|
+
try {
|
|
189
|
+
await testClient.connect();
|
|
190
|
+
await testClient.query('SELECT 1');
|
|
191
|
+
await testClient.end();
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
if (error.message.includes('self-signed certificate')) {
|
|
195
|
+
needsFix = true;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (!needsFix) {
|
|
199
|
+
spinner.succeed('SSL configuration is already working');
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
spinner.text = 'Applying SSL fix with CA bundle...';
|
|
203
|
+
// Create a test with proper SSL configuration using CA bundle
|
|
204
|
+
const fixedClient = (0, db_client_1.createDbClient)(this.connectionString);
|
|
205
|
+
await fixedClient.connect();
|
|
206
|
+
await fixedClient.query('SELECT 1');
|
|
207
|
+
await fixedClient.end();
|
|
208
|
+
spinner.succeed('SSL configuration fixed');
|
|
209
|
+
console.log(chalk_1.default.green('\n✅ SSL configuration has been fixed!'));
|
|
210
|
+
console.log(chalk_1.default.yellow('\n⚠️ Important: Using AWS RDS CA bundle for SSL validation'));
|
|
211
|
+
console.log(chalk_1.default.gray('The CA bundle is loaded from certs/rds-global-bundle.pem'));
|
|
212
|
+
console.log(chalk_1.default.gray('This is more secure than disabling SSL verification'));
|
|
213
|
+
// Check all endpoints for SSL configuration
|
|
214
|
+
spinner.start('Checking endpoints for SSL configuration...');
|
|
215
|
+
const endpointsToCheck = [
|
|
216
|
+
'/api/admin/health',
|
|
217
|
+
'/api/admin/send-campaign-v3',
|
|
218
|
+
'/api/admin/add-columns',
|
|
219
|
+
'/api/admin/import-contacts'
|
|
220
|
+
];
|
|
221
|
+
console.log(chalk_1.default.cyan('\n📋 Endpoint SSL Status:\n'));
|
|
222
|
+
for (const endpoint of endpointsToCheck) {
|
|
223
|
+
try {
|
|
224
|
+
const response = await fetch(`https://www.theautonoma.io${endpoint}`, {
|
|
225
|
+
method: 'POST',
|
|
226
|
+
headers: {
|
|
227
|
+
'Authorization': `Bearer ${process.env.AUTONOMA_API_KEY || ''}`,
|
|
228
|
+
'Content-Type': 'application/json'
|
|
229
|
+
},
|
|
230
|
+
body: JSON.stringify({ test: true })
|
|
231
|
+
});
|
|
232
|
+
if (response.ok) {
|
|
233
|
+
console.log(chalk_1.default.green(` ✅ ${endpoint} - SSL working`));
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
console.log(chalk_1.default.red(` ❌ ${endpoint} - Failed (${response.status})`));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
console.log(chalk_1.default.red(` ❌ ${endpoint} - Error: ${error.message}`));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
spinner.stop();
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
spinner.fail('SSL fix failed');
|
|
247
|
+
console.error(chalk_1.default.red('Error:'), error.message);
|
|
248
|
+
throw error;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
exports.DatabaseModule = DatabaseModule;
|
|
253
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/modules/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface DeploymentOptions {
|
|
2
|
+
env?: string;
|
|
3
|
+
skipTests?: boolean;
|
|
4
|
+
force?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare class DeploymentModule {
|
|
7
|
+
private ecsClient;
|
|
8
|
+
private readonly scriptPath;
|
|
9
|
+
private readonly websitePath;
|
|
10
|
+
constructor();
|
|
11
|
+
deployLatest(options?: DeploymentOptions): Promise<void>;
|
|
12
|
+
rollback(targetRevision?: string): Promise<void>;
|
|
13
|
+
showStatus(): Promise<void>;
|
|
14
|
+
private monitorDeployment;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=deployment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../src/modules/deployment.ts"],"names":[],"mappings":"AASA,UAAU,iBAAiB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsG;IACjI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqE;;IAM3F,YAAY,CAAC,OAAO,GAAE,iBAAsB;IAsE5C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM;IA0ChC,UAAU;YAuEF,iBAAiB;CAkChC"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DeploymentModule = void 0;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const util_1 = require("util");
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const ora_1 = __importDefault(require("ora"));
|
|
11
|
+
const client_ecs_1 = require("@aws-sdk/client-ecs");
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
14
|
+
class DeploymentModule {
|
|
15
|
+
ecsClient;
|
|
16
|
+
scriptPath = path_1.default.join(process.env.HOME || '', 'Desktop/Dev/autonoma/scripts/deploy-10-step-ultra-verified.sh');
|
|
17
|
+
websitePath = path_1.default.join(process.env.HOME || '', 'Desktop/Dev/autonoma/website');
|
|
18
|
+
constructor() {
|
|
19
|
+
this.ecsClient = new client_ecs_1.ECSClient({ region: 'us-east-1' });
|
|
20
|
+
}
|
|
21
|
+
async deployLatest(options = {}) {
|
|
22
|
+
const spinner = (0, ora_1.default)('Starting deployment process...').start();
|
|
23
|
+
try {
|
|
24
|
+
// Step 1: Check for uncommitted changes
|
|
25
|
+
spinner.text = 'Checking for uncommitted changes...';
|
|
26
|
+
const gitStatus = await execAsync('git status --porcelain', { cwd: this.websitePath });
|
|
27
|
+
if (gitStatus.stdout && !options.force) {
|
|
28
|
+
spinner.fail('Uncommitted changes detected');
|
|
29
|
+
console.log(chalk_1.default.yellow('\nUncommitted files:'));
|
|
30
|
+
console.log(gitStatus.stdout);
|
|
31
|
+
console.log(chalk_1.default.gray('Use --force to deploy anyway or commit your changes first'));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// Step 2: Run tests unless skipped
|
|
35
|
+
if (!options.skipTests) {
|
|
36
|
+
spinner.text = 'Running tests...';
|
|
37
|
+
await execAsync('npm run lint && npm run typecheck', { cwd: this.websitePath });
|
|
38
|
+
spinner.succeed('Tests passed');
|
|
39
|
+
}
|
|
40
|
+
// Step 3: Build Next.js app
|
|
41
|
+
spinner.text = 'Building Next.js application...';
|
|
42
|
+
await execAsync('npm run build', { cwd: this.websitePath });
|
|
43
|
+
spinner.succeed('Build completed');
|
|
44
|
+
// Step 4: Execute proven deployment script
|
|
45
|
+
spinner.text = 'Deploying to AWS ECS (this may take 5-10 minutes)...';
|
|
46
|
+
// Set environment variables for deployment. SENDGRID_* must come from
|
|
47
|
+
// the operator's environment; do NOT inject hardcoded fallbacks here —
|
|
48
|
+
// they propagate into npm tarballs and trigger SendGrid auto-deletion
|
|
49
|
+
// (incident: 2025-08-31 key found in @autonoma-io/a6s 5.1.0 + 5.1.1
|
|
50
|
+
// by SendGrid scanner 2026-04-28).
|
|
51
|
+
const env = {
|
|
52
|
+
...process.env,
|
|
53
|
+
SKIP_GIT_CHECK: options.force ? 'true' : 'false',
|
|
54
|
+
TARGET_ENV: options.env || 'production'
|
|
55
|
+
};
|
|
56
|
+
const { stdout } = await execAsync(this.scriptPath, {
|
|
57
|
+
cwd: this.websitePath,
|
|
58
|
+
env,
|
|
59
|
+
maxBuffer: 1024 * 1024 * 10 // 10MB buffer for large outputs
|
|
60
|
+
});
|
|
61
|
+
// Extract revision number from output
|
|
62
|
+
const revisionMatch = stdout.match(/revision:\s*(\d+)/i);
|
|
63
|
+
const revision = revisionMatch ? revisionMatch[1] : 'unknown';
|
|
64
|
+
spinner.succeed(`Deployment initiated (revision ${revision})`);
|
|
65
|
+
// Step 5: Monitor deployment status
|
|
66
|
+
await this.monitorDeployment(revision);
|
|
67
|
+
console.log(chalk_1.default.green('\n✅ Deployment completed successfully!'));
|
|
68
|
+
console.log(chalk_1.default.gray(`URL: https://www.theautonoma.io`));
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
spinner.fail('Deployment failed');
|
|
72
|
+
console.error(chalk_1.default.red('Error:'), error.message);
|
|
73
|
+
if (error.stderr) {
|
|
74
|
+
console.error(chalk_1.default.red('Details:'), error.stderr);
|
|
75
|
+
}
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async rollback(targetRevision) {
|
|
80
|
+
const spinner = (0, ora_1.default)('Fetching deployment history...').start();
|
|
81
|
+
try {
|
|
82
|
+
// Get current and previous task definitions
|
|
83
|
+
const result = await this.ecsClient.send(new client_ecs_1.DescribeServicesCommand({
|
|
84
|
+
cluster: 'autonoma-alpha',
|
|
85
|
+
services: ['autonoma-web']
|
|
86
|
+
}));
|
|
87
|
+
const service = result.services?.[0];
|
|
88
|
+
if (!service) {
|
|
89
|
+
throw new Error('Service not found');
|
|
90
|
+
}
|
|
91
|
+
const currentTaskDef = service.taskDefinition?.split(':').pop();
|
|
92
|
+
const previousRevision = targetRevision || String(Number(currentTaskDef) - 1);
|
|
93
|
+
spinner.text = `Rolling back to revision ${previousRevision}...`;
|
|
94
|
+
// Update service with previous task definition
|
|
95
|
+
await this.ecsClient.send(new client_ecs_1.UpdateServiceCommand({
|
|
96
|
+
cluster: 'autonoma-alpha',
|
|
97
|
+
service: 'autonoma-web',
|
|
98
|
+
taskDefinition: `autonoma-alpha-web:${previousRevision}`,
|
|
99
|
+
forceNewDeployment: true
|
|
100
|
+
}));
|
|
101
|
+
spinner.succeed(`Rollback to revision ${previousRevision} initiated`);
|
|
102
|
+
// Monitor rollback
|
|
103
|
+
await this.monitorDeployment(previousRevision);
|
|
104
|
+
console.log(chalk_1.default.green('\n✅ Rollback completed successfully!'));
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
spinner.fail('Rollback failed');
|
|
108
|
+
console.error(chalk_1.default.red('Error:'), error.message);
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async showStatus() {
|
|
113
|
+
const spinner = (0, ora_1.default)('Fetching deployment status...').start();
|
|
114
|
+
try {
|
|
115
|
+
// Get service status
|
|
116
|
+
const serviceResult = await this.ecsClient.send(new client_ecs_1.DescribeServicesCommand({
|
|
117
|
+
cluster: 'autonoma-alpha',
|
|
118
|
+
services: ['autonoma-web']
|
|
119
|
+
}));
|
|
120
|
+
const service = serviceResult.services?.[0];
|
|
121
|
+
if (!service) {
|
|
122
|
+
throw new Error('Service not found');
|
|
123
|
+
}
|
|
124
|
+
spinner.stop();
|
|
125
|
+
// Display service information
|
|
126
|
+
console.log(chalk_1.default.cyan('\n📊 Deployment Status\n'));
|
|
127
|
+
console.log(chalk_1.default.white('Service:'), 'autonoma-web');
|
|
128
|
+
console.log(chalk_1.default.white('Status:'), service.status);
|
|
129
|
+
console.log(chalk_1.default.white('Running Tasks:'), `${service.runningCount}/${service.desiredCount}`);
|
|
130
|
+
console.log(chalk_1.default.white('Task Definition:'), service.taskDefinition?.split('/').pop());
|
|
131
|
+
// Get recent deployments
|
|
132
|
+
if (service.deployments && service.deployments.length > 0) {
|
|
133
|
+
console.log(chalk_1.default.cyan('\n📋 Recent Deployments:\n'));
|
|
134
|
+
service.deployments.slice(0, 3).forEach((deployment, index) => {
|
|
135
|
+
const taskDef = deployment.taskDefinition?.split(':').pop();
|
|
136
|
+
const status = deployment.status === 'PRIMARY' ? chalk_1.default.green('PRIMARY') : chalk_1.default.gray(deployment.status);
|
|
137
|
+
console.log(` ${index + 1}. Revision ${taskDef} - ${status}`);
|
|
138
|
+
console.log(` Running: ${deployment.runningCount}/${deployment.desiredCount}`);
|
|
139
|
+
console.log(` Created: ${deployment.createdAt?.toLocaleString()}`);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// Get running tasks
|
|
143
|
+
const tasksResult = await this.ecsClient.send(new client_ecs_1.ListTasksCommand({
|
|
144
|
+
cluster: 'autonoma-alpha',
|
|
145
|
+
serviceName: 'autonoma-web',
|
|
146
|
+
desiredStatus: 'RUNNING'
|
|
147
|
+
}));
|
|
148
|
+
if (tasksResult.taskArns && tasksResult.taskArns.length > 0) {
|
|
149
|
+
const taskDetails = await this.ecsClient.send(new client_ecs_1.DescribeTasksCommand({
|
|
150
|
+
cluster: 'autonoma-alpha',
|
|
151
|
+
tasks: tasksResult.taskArns
|
|
152
|
+
}));
|
|
153
|
+
console.log(chalk_1.default.cyan('\n🏃 Running Tasks:\n'));
|
|
154
|
+
taskDetails.tasks?.forEach((task, index) => {
|
|
155
|
+
const taskId = task.taskArn?.split('/').pop()?.substring(0, 8);
|
|
156
|
+
const image = task.containers?.[0]?.image?.split(':').pop();
|
|
157
|
+
console.log(` ${index + 1}. Task ${taskId} - Image: ${image}`);
|
|
158
|
+
console.log(` Status: ${task.lastStatus}`);
|
|
159
|
+
console.log(` Started: ${task.startedAt?.toLocaleString()}`);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
console.log(chalk_1.default.cyan('\n🔗 Links:\n'));
|
|
163
|
+
console.log(` Website: ${chalk_1.default.blue('https://www.theautonoma.io')}`);
|
|
164
|
+
console.log(` AWS Console: ${chalk_1.default.blue('https://console.aws.amazon.com/ecs/home?region=us-east-1')}`);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
spinner.fail('Failed to fetch status');
|
|
168
|
+
console.error(chalk_1.default.red('Error:'), error.message);
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async monitorDeployment(targetRevision) {
|
|
173
|
+
const spinner = (0, ora_1.default)(`Monitoring deployment of revision ${targetRevision}...`).start();
|
|
174
|
+
let attempts = 0;
|
|
175
|
+
const maxAttempts = 40;
|
|
176
|
+
while (attempts < maxAttempts) {
|
|
177
|
+
const result = await this.ecsClient.send(new client_ecs_1.DescribeServicesCommand({
|
|
178
|
+
cluster: 'autonoma-alpha',
|
|
179
|
+
services: ['autonoma-web']
|
|
180
|
+
}));
|
|
181
|
+
const service = result.services?.[0];
|
|
182
|
+
const primaryDeployment = service?.deployments?.find(d => d.status === 'PRIMARY');
|
|
183
|
+
const currentRevision = primaryDeployment?.taskDefinition?.split(':').pop();
|
|
184
|
+
const runningCount = primaryDeployment?.runningCount || 0;
|
|
185
|
+
const desiredCount = primaryDeployment?.desiredCount || 0;
|
|
186
|
+
spinner.text = `Monitoring revision ${targetRevision} (${runningCount}/${desiredCount} running)`;
|
|
187
|
+
if (currentRevision === targetRevision && runningCount === desiredCount && runningCount > 0) {
|
|
188
|
+
spinner.succeed(`Deployment complete! All tasks running revision ${targetRevision}`);
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
if (attempts >= maxAttempts) {
|
|
192
|
+
spinner.warn('Deployment is taking longer than expected. Check AWS console for details.');
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
await new Promise(resolve => setTimeout(resolve, 15000)); // Wait 15 seconds
|
|
196
|
+
attempts++;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.DeploymentModule = DeploymentModule;
|
|
201
|
+
//# sourceMappingURL=deployment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/modules/deployment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
export declare class EdgeComputingModule extends EventEmitter {
|
|
3
|
+
private edgeModels;
|
|
4
|
+
private deployments;
|
|
5
|
+
private localCache;
|
|
6
|
+
private performanceMetrics;
|
|
7
|
+
constructor();
|
|
8
|
+
private initializeEdgeModels;
|
|
9
|
+
private createDeploymentConfigurations;
|
|
10
|
+
/**
|
|
11
|
+
* Execute inference at the edge
|
|
12
|
+
*/
|
|
13
|
+
executeEdgeInference(task: string, options?: any): Promise<any>;
|
|
14
|
+
/**
|
|
15
|
+
* Select best edge model based on task and constraints
|
|
16
|
+
*/
|
|
17
|
+
private selectBestEdgeModel;
|
|
18
|
+
/**
|
|
19
|
+
* Prepare model for edge deployment
|
|
20
|
+
*/
|
|
21
|
+
private prepareModelForEdge;
|
|
22
|
+
/**
|
|
23
|
+
* Quantize internal model for edge
|
|
24
|
+
*/
|
|
25
|
+
private quantizeInternalModel;
|
|
26
|
+
/**
|
|
27
|
+
* Build cache index for third-party models
|
|
28
|
+
*/
|
|
29
|
+
private buildCacheIndex;
|
|
30
|
+
/**
|
|
31
|
+
* Load distilled knowledge from large models
|
|
32
|
+
*/
|
|
33
|
+
private loadDistilledKnowledge;
|
|
34
|
+
/**
|
|
35
|
+
* Load quantized model
|
|
36
|
+
*/
|
|
37
|
+
private loadQuantizedModel;
|
|
38
|
+
/**
|
|
39
|
+
* Run local inference on edge
|
|
40
|
+
*/
|
|
41
|
+
private runLocalInference;
|
|
42
|
+
/**
|
|
43
|
+
* Run TensorFlow inference
|
|
44
|
+
*/
|
|
45
|
+
private runTensorFlowInference;
|
|
46
|
+
/**
|
|
47
|
+
* Run ONNX inference
|
|
48
|
+
*/
|
|
49
|
+
private runONNXInference;
|
|
50
|
+
/**
|
|
51
|
+
* Run CoreML inference (for Apple Silicon)
|
|
52
|
+
*/
|
|
53
|
+
private runCoreMLInference;
|
|
54
|
+
/**
|
|
55
|
+
* Run WebGPU inference (browser/edge)
|
|
56
|
+
*/
|
|
57
|
+
private runWebGPUInference;
|
|
58
|
+
/**
|
|
59
|
+
* Run cached inference for third-party models
|
|
60
|
+
*/
|
|
61
|
+
private runCachedInference;
|
|
62
|
+
/**
|
|
63
|
+
* Helper methods
|
|
64
|
+
*/
|
|
65
|
+
private determineTaskType;
|
|
66
|
+
private getDeploymentConfig;
|
|
67
|
+
private isHardwareAvailable;
|
|
68
|
+
private calculateModelScore;
|
|
69
|
+
private simulateQuantization;
|
|
70
|
+
private tokenize;
|
|
71
|
+
private findSimilarCached;
|
|
72
|
+
private fallbackToCloud;
|
|
73
|
+
private trackPerformance;
|
|
74
|
+
/**
|
|
75
|
+
* Public API Methods
|
|
76
|
+
*/
|
|
77
|
+
getEdgeCapabilities(): Promise<{
|
|
78
|
+
availableModels: {
|
|
79
|
+
id: string;
|
|
80
|
+
type: "internal" | "third-party-cached" | "distilled" | "quantized";
|
|
81
|
+
source: string;
|
|
82
|
+
size: string;
|
|
83
|
+
latency: string;
|
|
84
|
+
location: "edge" | "fog" | "cloud";
|
|
85
|
+
quantization: "8bit" | "4bit" | "2bit" | undefined;
|
|
86
|
+
hardware: "cpu" | "gpu" | "npu" | "tpu" | undefined;
|
|
87
|
+
}[];
|
|
88
|
+
deployments: {
|
|
89
|
+
name: string;
|
|
90
|
+
modelCount: number;
|
|
91
|
+
cacheSize: string;
|
|
92
|
+
maxLatency: string;
|
|
93
|
+
offlineCapable: boolean;
|
|
94
|
+
}[];
|
|
95
|
+
supportedFormats: string[];
|
|
96
|
+
quantizationLevels: string[];
|
|
97
|
+
hardwareAcceleration: string[];
|
|
98
|
+
}>;
|
|
99
|
+
compareEdgeVsCloud(task: string): Promise<{
|
|
100
|
+
edge: {
|
|
101
|
+
latency: string;
|
|
102
|
+
location: any;
|
|
103
|
+
model: any;
|
|
104
|
+
cost: string;
|
|
105
|
+
privacy: string;
|
|
106
|
+
offline: boolean;
|
|
107
|
+
};
|
|
108
|
+
cloud: {
|
|
109
|
+
latency: string;
|
|
110
|
+
location: string;
|
|
111
|
+
model: string;
|
|
112
|
+
cost: string;
|
|
113
|
+
privacy: string;
|
|
114
|
+
offline: boolean;
|
|
115
|
+
};
|
|
116
|
+
improvement: {
|
|
117
|
+
latencyReduction: string;
|
|
118
|
+
costSaving: string;
|
|
119
|
+
privacyGain: string;
|
|
120
|
+
};
|
|
121
|
+
}>;
|
|
122
|
+
getPerformanceMetrics(): Promise<{
|
|
123
|
+
model: string;
|
|
124
|
+
inferences: any;
|
|
125
|
+
avgLatency: string;
|
|
126
|
+
cacheHitRate: string;
|
|
127
|
+
reliability: string;
|
|
128
|
+
}[]>;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=edge-computing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-computing.d.ts","sourceRoot":"","sources":["../../src/modules/edge-computing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AA6BtC,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,kBAAkB,CAAmB;;IAW7C,OAAO,CAAC,oBAAoB;IAgI5B,OAAO,CAAC,8BAA8B;IAiDtC;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ;IAyC1D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiC3B;;OAEG;YACW,mBAAmB;IA8BjC;;OAEG;YACW,qBAAqB;IA2BnC;;OAEG;YACW,eAAe;IAmB7B;;OAEG;YACW,sBAAsB;IAepC;;OAEG;YACW,kBAAkB;IAchC;;OAEG;YACW,iBAAiB;IAsC/B;;OAEG;YACW,sBAAsB;IAuBpC;;OAEG;YACW,gBAAgB;IAkB9B;;OAEG;YACW,kBAAkB;IAUhC;;OAEG;YACW,kBAAkB;IAUhC;;OAEG;YACW,kBAAkB;IAwBhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,iBAAiB;YAQX,eAAe;IAS7B,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACG,mBAAmB;;;;;;;;;;;;;;;;;;;;;;IAyBnB,kBAAkB,CAAC,IAAI,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;IAkC/B,qBAAqB;;;;;;;CAgB5B"}
|