@edgible-team/cli 1.2.2 → 1.2.6
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/LICENSE +2 -0
- package/dist/client/api-client.d.ts +51 -0
- package/dist/client/api-client.d.ts.map +1 -1
- package/dist/client/api-client.js +65 -0
- package/dist/commands/agent/agent-handlers.d.ts +45 -0
- package/dist/commands/agent/agent-handlers.d.ts.map +1 -0
- package/dist/commands/agent/agent-handlers.js +1159 -0
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +13 -1137
- package/dist/commands/ai.d.ts.map +1 -1
- package/dist/commands/ai.js +66 -61
- package/dist/commands/application.d.ts.map +1 -1
- package/dist/commands/application.js +713 -94
- package/dist/config/app-config.d.ts +1 -1
- package/dist/config/app-config.js +2 -2
- package/dist/generated/compose-constants.d.ts +14 -0
- package/dist/generated/compose-constants.d.ts.map +1 -0
- package/dist/generated/compose-constants.js +22 -0
- package/dist/services/LocalAgentManager.d.ts.map +1 -1
- package/dist/services/LocalAgentManager.js +4 -2
- package/dist/services/application/ApplicationService.d.ts +41 -0
- package/dist/services/application/ApplicationService.d.ts.map +1 -1
- package/dist/services/application/ApplicationService.js +107 -0
- package/dist/services/auth/AuthService.js +8 -7
- package/dist/services/daemon/DaemonManagerFactory.d.ts +2 -0
- package/dist/services/daemon/DaemonManagerFactory.d.ts.map +1 -1
- package/dist/services/daemon/DaemonManagerFactory.js +14 -6
- package/dist/services/edgible.js +7 -7
- package/dist/types/AgentConfig.d.ts +13 -0
- package/dist/types/AgentConfig.d.ts.map +1 -1
- package/dist/types/ApiRequests.d.ts +8 -0
- package/dist/types/ApiRequests.d.ts.map +1 -1
- package/dist/types/Application.d.ts +6 -0
- package/dist/types/Application.d.ts.map +1 -1
- package/dist/types/CaddyJson.d.ts +43 -1
- package/dist/types/CaddyJson.d.ts.map +1 -1
- package/dist/types/models/ApplicationApiKey.d.ts +63 -0
- package/dist/types/models/ApplicationApiKey.d.ts.map +1 -0
- package/dist/types/models/ApplicationApiKey.js +5 -0
- package/dist/types/models/ApplicationAuthExchangeToken.d.ts +69 -0
- package/dist/types/models/ApplicationAuthExchangeToken.d.ts.map +1 -0
- package/dist/types/models/ApplicationAuthExchangeToken.js +5 -0
- package/dist/types/models/ApplicationAuthSession.d.ts +68 -0
- package/dist/types/models/ApplicationAuthSession.d.ts.map +1 -0
- package/dist/types/models/ApplicationAuthSession.js +5 -0
- package/dist/types/models/ApplicationData.d.ts +33 -0
- package/dist/types/models/ApplicationData.d.ts.map +1 -1
- package/dist/types/models/ApplicationShortCode.d.ts +79 -0
- package/dist/types/models/ApplicationShortCode.d.ts.map +1 -0
- package/dist/types/models/ApplicationShortCode.js +5 -0
- package/dist/types/route.d.ts +4 -0
- package/dist/types/route.d.ts.map +1 -1
- package/dist/types/validation/schemas.d.ts +21 -0
- package/dist/types/validation/schemas.d.ts.map +1 -1
- package/dist/types/validation/schemas.js +14 -1
- package/dist/utils/PlatformDetector.d.ts +2 -0
- package/dist/utils/PlatformDetector.d.ts.map +1 -1
- package/dist/utils/PlatformDetector.js +5 -34
- package/package.json +2 -2
- package/recipes/compose/open-webui/docker-compose.yml +26 -1
- package/dist/detection/tools.d.ts +0 -16
- package/dist/detection/tools.d.ts.map +0 -1
- package/dist/detection/tools.js +0 -305
- package/recipes/compose/open-webui/.env +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoCpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAioBtD"}
|
package/dist/commands/ai.js
CHANGED
|
@@ -50,6 +50,8 @@ const types_1 = require("../di/types");
|
|
|
50
50
|
const SystemCapabilityDetector_1 = require("../detection/SystemCapabilityDetector");
|
|
51
51
|
const DaemonManagerFactory_1 = require("../services/daemon/DaemonManagerFactory");
|
|
52
52
|
const config_validator_1 = require("./utils/config-validator");
|
|
53
|
+
const compose_constants_1 = require("../generated/compose-constants");
|
|
54
|
+
const sudo_checker_1 = require("../utils/sudo-checker");
|
|
53
55
|
function setupAiCommands(program) {
|
|
54
56
|
const aiCommand = program
|
|
55
57
|
.command('ai')
|
|
@@ -69,6 +71,10 @@ function setupAiCommands(program) {
|
|
|
69
71
|
.option('--webui-deployment <type>', 'WebUI deployment: local or remote')
|
|
70
72
|
.option('--no-interactive', 'Run in non-interactive mode')
|
|
71
73
|
.action((0, command_wrapper_1.wrapCommand)(async (options) => {
|
|
74
|
+
if (!(0, sudo_checker_1.checkSudoPermissions)()) {
|
|
75
|
+
console.log(chalk_1.default.redBright("Please run this command with administrator priviledges (i.e. sudo)"));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
72
78
|
const container = (0, container_1.getContainer)();
|
|
73
79
|
const logger = container.get(types_1.TYPES.Logger);
|
|
74
80
|
logger.info('Setting up Ollama AI service', { model: options.model, autoInstall: options.autoInstall });
|
|
@@ -293,7 +299,6 @@ function setupAiCommands(program) {
|
|
|
293
299
|
.description('Stop AI services and optionally remove platform applications')
|
|
294
300
|
.option('--stop-ollama', 'Also stop the Ollama service')
|
|
295
301
|
.option('--remove-volumes', 'Remove data volumes (deletes all data)')
|
|
296
|
-
.option('--remove-apps', 'Remove platform applications (Ollama API, Open WebUI)')
|
|
297
302
|
.action((0, command_wrapper_1.wrapCommand)(async (options) => {
|
|
298
303
|
const container = (0, container_1.getContainer)();
|
|
299
304
|
const logger = container.get(types_1.TYPES.Logger);
|
|
@@ -324,42 +329,40 @@ function setupAiCommands(program) {
|
|
|
324
329
|
}
|
|
325
330
|
}
|
|
326
331
|
// Optionally remove platform applications
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
console.log(chalk_1.default.green(' ✓ Removed ollama-api'));
|
|
343
|
-
}
|
|
344
|
-
if (webUIApp) {
|
|
345
|
-
console.log(chalk_1.default.yellow(` Removing open-webui (${webUIApp.id})...`));
|
|
346
|
-
await applicationService.deleteApplication(webUIApp.id);
|
|
347
|
-
console.log(chalk_1.default.green(' ✓ Removed open-webui'));
|
|
348
|
-
}
|
|
349
|
-
if (!ollamaApp && !webUIApp) {
|
|
350
|
-
console.log(chalk_1.default.gray(' No AI applications found\n'));
|
|
351
|
-
}
|
|
352
|
-
else {
|
|
353
|
-
console.log(chalk_1.default.green('\n✓ Platform applications removed\n'));
|
|
354
|
-
}
|
|
332
|
+
console.log(chalk_1.default.yellow('\nRemoving platform applications...\n'));
|
|
333
|
+
try {
|
|
334
|
+
(0, config_validator_1.validateConfig)(configRepository, {
|
|
335
|
+
requireAuth: true,
|
|
336
|
+
requireOrganization: true,
|
|
337
|
+
});
|
|
338
|
+
const applicationService = container.get(types_1.TYPES.ApplicationService);
|
|
339
|
+
const applications = await applicationService.getApplications();
|
|
340
|
+
// Find AI-related applications
|
|
341
|
+
const ollamaApp = applications.find(app => app.name === 'ollama-api');
|
|
342
|
+
const webUIApp = applications.find(app => app.name === 'open-webui');
|
|
343
|
+
if (ollamaApp) {
|
|
344
|
+
console.log(chalk_1.default.yellow(` Removing ollama-api (${ollamaApp.id})...`));
|
|
345
|
+
await applicationService.deleteApplication(ollamaApp.id);
|
|
346
|
+
console.log(chalk_1.default.green(' ✓ Removed ollama-api'));
|
|
355
347
|
}
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
348
|
+
if (webUIApp) {
|
|
349
|
+
console.log(chalk_1.default.yellow(` Removing open-webui (${webUIApp.id})...`));
|
|
350
|
+
await applicationService.deleteApplication(webUIApp.id);
|
|
351
|
+
console.log(chalk_1.default.green(' ✓ Removed open-webui'));
|
|
352
|
+
}
|
|
353
|
+
if (!ollamaApp && !webUIApp) {
|
|
354
|
+
console.log(chalk_1.default.gray(' No AI applications found\n'));
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
console.log(chalk_1.default.green('\n✓ Platform applications removed\n'));
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
if (error instanceof Error && error.message.includes('auth')) {
|
|
362
|
+
console.log(chalk_1.default.yellow(' ⚠ Not logged in - skipping platform application removal\n'));
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
console.log(chalk_1.default.red(` ✗ Error removing applications: ${error instanceof Error ? error.message : 'Unknown error'}\n`));
|
|
363
366
|
}
|
|
364
367
|
}
|
|
365
368
|
console.log(chalk_1.default.green('✅ Teardown complete!\n'));
|
|
@@ -389,15 +392,15 @@ function setupAiCommands(program) {
|
|
|
389
392
|
console.log(chalk_1.default.green(' ✓ Running'));
|
|
390
393
|
// Check what address it's listening on
|
|
391
394
|
try {
|
|
392
|
-
const output = (0, child_process_1.execSync)('ss -tlnp 2>/dev/null | grep
|
|
395
|
+
const output = (0, child_process_1.execSync)('ss -tlnp 2>/dev/null | grep 11435 || netstat -tlnp 2>/dev/null | grep 11435', {
|
|
393
396
|
encoding: 'utf8',
|
|
394
397
|
timeout: 2000
|
|
395
398
|
});
|
|
396
|
-
if (output.includes('0.0.0.0:
|
|
397
|
-
console.log(chalk_1.default.gray(' Listening on: 0.0.0.0:
|
|
399
|
+
if (output.includes('0.0.0.0:11435') || output.includes('*:11435')) {
|
|
400
|
+
console.log(chalk_1.default.gray(' Listening on: 0.0.0.0:11435 (accessible from network)'));
|
|
398
401
|
}
|
|
399
|
-
else if (output.includes('127.0.0.1:
|
|
400
|
-
console.log(chalk_1.default.yellow(' Listening on: 127.0.0.1:
|
|
402
|
+
else if (output.includes('127.0.0.1:11435')) {
|
|
403
|
+
console.log(chalk_1.default.yellow(' Listening on: 127.0.0.1:11435 (localhost only)'));
|
|
401
404
|
}
|
|
402
405
|
}
|
|
403
406
|
catch {
|
|
@@ -887,7 +890,7 @@ async function setupPlatformIntegration(options) {
|
|
|
887
890
|
// Step 7: Create Ollama API Application
|
|
888
891
|
console.log(chalk_1.default.blue('Step 7: Creating Ollama API application...\n'));
|
|
889
892
|
console.log(chalk_1.default.gray(` Device: ${deviceName} (${deviceId.substring(0, 8)}...)\n`));
|
|
890
|
-
console.log(chalk_1.default.gray(` Gateway:
|
|
893
|
+
console.log(chalk_1.default.gray(` Gateway: None (local/internal access only)\n`));
|
|
891
894
|
console.log(chalk_1.default.gray(` Protocol: HTTPS\n`));
|
|
892
895
|
const ollamaResult = await createOllamaApplication({
|
|
893
896
|
modelName: ollamaModelName,
|
|
@@ -1001,19 +1004,18 @@ function displaySetupSummary(options) {
|
|
|
1001
1004
|
console.log(chalk_1.default.blue('\n🎉 AI Setup Complete!\n'));
|
|
1002
1005
|
console.log(chalk_1.default.white('📋 Summary:\n'));
|
|
1003
1006
|
console.log(chalk_1.default.gray(` Model: ${ollamaModelName}`));
|
|
1004
|
-
console.log(chalk_1.default.gray(` Ollama API: ${ollamaUrl}`));
|
|
1007
|
+
console.log(chalk_1.default.gray(` Ollama API: ${ollamaUrl} (local/internal only)`));
|
|
1005
1008
|
if (webUIUrl) {
|
|
1006
|
-
console.log(chalk_1.default.gray(` Open WebUI: ${webUIUrl}`));
|
|
1009
|
+
console.log(chalk_1.default.gray(` Open WebUI: ${webUIUrl} (public via managed gateway)`));
|
|
1007
1010
|
}
|
|
1008
1011
|
console.log(chalk_1.default.gray(` Device: ${deviceName} (${deviceId.substring(0, 8)}...)`));
|
|
1009
|
-
console.log(chalk_1.default.gray(` Gateway: Managed Gateway`));
|
|
1010
1012
|
if (createdOllamaApp || createdWebUIApp) {
|
|
1011
1013
|
console.log(chalk_1.default.white('\n📱 Created Applications:\n'));
|
|
1012
1014
|
if (createdOllamaApp) {
|
|
1013
|
-
console.log(chalk_1.default.gray(` • ollama-api (${createdOllamaApp.id})`));
|
|
1015
|
+
console.log(chalk_1.default.gray(` • ollama-api (${createdOllamaApp.id}) - No gateway (local only)`));
|
|
1014
1016
|
}
|
|
1015
1017
|
if (createdWebUIApp) {
|
|
1016
|
-
console.log(chalk_1.default.gray(` • open-webui (${createdWebUIApp.id})`));
|
|
1018
|
+
console.log(chalk_1.default.gray(` • open-webui (${createdWebUIApp.id}) - Managed gateway (public)`));
|
|
1017
1019
|
}
|
|
1018
1020
|
}
|
|
1019
1021
|
console.log(chalk_1.default.white('\n🔧 Next Steps:\n'));
|
|
@@ -1866,8 +1868,8 @@ function parseGatewayIds(ids) {
|
|
|
1866
1868
|
async function createOllamaApplication(config) {
|
|
1867
1869
|
// Device ID is already provided from config (same device as agent)
|
|
1868
1870
|
const ollamaDeviceId = config.deviceId;
|
|
1869
|
-
//
|
|
1870
|
-
const useManagedGateway =
|
|
1871
|
+
// No gateway - local/internal access only
|
|
1872
|
+
const useManagedGateway = false;
|
|
1871
1873
|
// Build configuration for managed-process
|
|
1872
1874
|
// Ollama should be installed and available in PATH on the device
|
|
1873
1875
|
const configuration = {
|
|
@@ -1876,17 +1878,18 @@ async function createOllamaApplication(config) {
|
|
|
1876
1878
|
OLLAMA_HOST: '0.0.0.0:11435',
|
|
1877
1879
|
},
|
|
1878
1880
|
};
|
|
1879
|
-
// Create application as managed-process
|
|
1881
|
+
// Create application as managed-process without authentication
|
|
1880
1882
|
const result = await config.applicationService.createApplicationProgrammatically({
|
|
1881
1883
|
name: 'ollama-api',
|
|
1882
1884
|
description: `Ollama AI API (${config.modelName}) - Managed Process`,
|
|
1883
1885
|
port: 11435,
|
|
1884
1886
|
protocol: 'https',
|
|
1885
1887
|
deviceIds: [ollamaDeviceId],
|
|
1886
|
-
gatewayIds:
|
|
1887
|
-
useManagedGateway:
|
|
1888
|
+
gatewayIds: [], // No gateway - local/internal access only
|
|
1889
|
+
useManagedGateway: false,
|
|
1888
1890
|
subtype: 'managed-process',
|
|
1889
1891
|
configuration,
|
|
1892
|
+
authModes: [], // No authentication required
|
|
1890
1893
|
});
|
|
1891
1894
|
return {
|
|
1892
1895
|
app: result,
|
|
@@ -1899,29 +1902,31 @@ async function createOllamaApplication(config) {
|
|
|
1899
1902
|
async function createOpenWebUIApplication(config) {
|
|
1900
1903
|
// Always use the same device as Ollama (same device as agent)
|
|
1901
1904
|
const webuiDeviceId = config.deviceId;
|
|
1902
|
-
//
|
|
1905
|
+
// Use managed gateway for public access
|
|
1903
1906
|
const useManagedGateway = true;
|
|
1904
1907
|
// Create application
|
|
1905
1908
|
// Note: Backend should configure OLLAMA_BASE_URL environment variable to ${config.ollamaUrl}
|
|
1906
1909
|
// This URL should be the platform Ollama application URL (not localhost) for remote deployments
|
|
1907
|
-
|
|
1908
|
-
const
|
|
1910
|
+
// Use generated base64 constant (no runtime file reading needed)
|
|
1911
|
+
const dockerComposePathValue = (0, compose_constants_1.getOpenWebUIComposeValue)();
|
|
1912
|
+
const envVars = {
|
|
1913
|
+
'OLLAMA_BASE_URL': config.ollamaUrl
|
|
1914
|
+
};
|
|
1909
1915
|
const result = await config.applicationService.createApplicationProgrammatically({
|
|
1910
1916
|
name: 'open-webui',
|
|
1911
1917
|
description: `Open WebUI - AI Chat Interface (OLLAMA_BASE_URL: ${config.ollamaUrl})`,
|
|
1912
1918
|
port: 3200,
|
|
1913
1919
|
protocol: 'https',
|
|
1914
1920
|
deviceIds: [webuiDeviceId],
|
|
1915
|
-
gatewayIds: undefined, // Managed gateway
|
|
1921
|
+
gatewayIds: undefined, // Managed gateway for public access
|
|
1916
1922
|
useManagedGateway: true,
|
|
1917
1923
|
subtype: 'docker-compose',
|
|
1918
1924
|
configuration: {
|
|
1919
|
-
'dockerComposePath':
|
|
1920
|
-
'env':
|
|
1921
|
-
'OLLAMA_BASE_URL': config.ollamaUrl
|
|
1922
|
-
},
|
|
1925
|
+
'dockerComposePath': dockerComposePathValue, // base64:... constant
|
|
1926
|
+
'env': envVars,
|
|
1923
1927
|
'isWorking': true
|
|
1924
|
-
}
|
|
1928
|
+
},
|
|
1929
|
+
requireOrgAuth: true // Enable authentication - X-Auth-Email header already passed by auth system
|
|
1925
1930
|
});
|
|
1926
1931
|
return {
|
|
1927
1932
|
app: result,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/commands/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/commands/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmkE/D"}
|