@alwaysai/device-agent 0.0.16 → 0.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/lib/application-control/config.d.ts.map +1 -1
  2. package/lib/application-control/config.js +4 -4
  3. package/lib/application-control/config.js.map +1 -1
  4. package/lib/application-control/install.d.ts.map +1 -1
  5. package/lib/application-control/install.js +1 -1
  6. package/lib/application-control/install.js.map +1 -1
  7. package/lib/application-control/models.js +1 -1
  8. package/lib/application-control/utils.d.ts.map +1 -1
  9. package/lib/application-control/utils.js +3 -3
  10. package/lib/application-control/utils.js.map +1 -1
  11. package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
  12. package/lib/cloud-connection/device-agent-cloud-connection.js +28 -15
  13. package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
  14. package/lib/cloud-connection/live-updates-handler.d.ts.map +1 -1
  15. package/lib/cloud-connection/live-updates-handler.js +9 -8
  16. package/lib/cloud-connection/live-updates-handler.js.map +1 -1
  17. package/lib/cloud-connection/shadow-handler.d.ts +9 -5
  18. package/lib/cloud-connection/shadow-handler.d.ts.map +1 -1
  19. package/lib/cloud-connection/shadow-handler.js +14 -6
  20. package/lib/cloud-connection/shadow-handler.js.map +1 -1
  21. package/lib/cloud-connection/shadow-handler.test.js +24 -14
  22. package/lib/cloud-connection/shadow-handler.test.js.map +1 -1
  23. package/lib/cloud-connection/shadow.js +1 -1
  24. package/lib/cloud-connection/shadow.js.map +1 -1
  25. package/lib/subcommands/app/env-vars.d.ts +8 -0
  26. package/lib/subcommands/app/env-vars.d.ts.map +1 -0
  27. package/lib/subcommands/app/env-vars.js +43 -0
  28. package/lib/subcommands/app/env-vars.js.map +1 -0
  29. package/lib/subcommands/app/index.d.ts.map +1 -1
  30. package/lib/subcommands/app/index.js +20 -19
  31. package/lib/subcommands/app/index.js.map +1 -1
  32. package/lib/subcommands/app/models.d.ts +20 -0
  33. package/lib/subcommands/app/models.d.ts.map +1 -0
  34. package/lib/subcommands/app/models.js +114 -0
  35. package/lib/subcommands/app/models.js.map +1 -0
  36. package/lib/subcommands/app/status.d.ts +17 -0
  37. package/lib/subcommands/app/status.d.ts.map +1 -0
  38. package/lib/subcommands/app/status.js +103 -0
  39. package/lib/subcommands/app/status.js.map +1 -0
  40. package/lib/subcommands/app/version.d.ts +12 -0
  41. package/lib/subcommands/app/version.d.ts.map +1 -0
  42. package/lib/subcommands/app/version.js +103 -0
  43. package/lib/subcommands/app/version.js.map +1 -0
  44. package/lib/util/get-device-id.js +1 -1
  45. package/lib/util/get-device-id.js.map +1 -1
  46. package/lib/util/http-client.js +1 -1
  47. package/lib/util/http-client.js.map +1 -1
  48. package/package.json +1 -1
  49. package/src/application-control/config.ts +8 -4
  50. package/src/application-control/install.ts +3 -1
  51. package/src/application-control/models.ts +1 -1
  52. package/src/application-control/utils.ts +3 -4
  53. package/src/cloud-connection/device-agent-cloud-connection.ts +33 -21
  54. package/src/cloud-connection/live-updates-handler.ts +14 -13
  55. package/src/cloud-connection/shadow-handler.test.ts +24 -14
  56. package/src/cloud-connection/shadow-handler.ts +21 -8
  57. package/src/cloud-connection/shadow.ts +1 -1
  58. package/src/subcommands/app/env-vars.ts +46 -0
  59. package/src/subcommands/app/index.ts +16 -17
  60. package/src/subcommands/app/models.ts +129 -0
  61. package/src/subcommands/app/status.ts +92 -0
  62. package/src/subcommands/app/version.ts +103 -0
  63. package/src/util/get-device-id.ts +1 -1
  64. package/src/util/http-client.ts +1 -1
  65. package/lib/subcommands/app/app.d.ts +0 -60
  66. package/lib/subcommands/app/app.d.ts.map +0 -1
  67. package/lib/subcommands/app/app.js +0 -370
  68. package/lib/subcommands/app/app.js.map +0 -1
  69. package/src/subcommands/app/app.ts +0 -390
@@ -0,0 +1,92 @@
1
+ import { CliLeaf, CliStringInput } from '@alwaysai/alwayscli';
2
+ import {
3
+ getAppLogs,
4
+ getAppStatus,
5
+ restartApp,
6
+ startApp,
7
+ stopApp
8
+ } from '../../application-control';
9
+ import { logger } from '../../util/logger';
10
+
11
+ export const getAppStatusCliLeaf = CliLeaf({
12
+ name: 'status',
13
+ description: 'Get the status of an installed alwaysAI app',
14
+ namedInputs: {
15
+ project: CliStringInput({
16
+ description: 'Project ID',
17
+ required: true
18
+ })
19
+ },
20
+ async action(_, opts) {
21
+ const { project } = opts;
22
+ const appStatus = await getAppStatus({ projectId: project });
23
+ logger.info(JSON.stringify(appStatus, null, 2));
24
+ }
25
+ });
26
+
27
+ export const startAppCliLeaf = CliLeaf({
28
+ name: 'start',
29
+ description: 'Start an installed alwaysAI app',
30
+ namedInputs: {
31
+ project: CliStringInput({
32
+ description: 'Project ID',
33
+ required: true
34
+ }),
35
+ dockerLoginToken: CliStringInput({
36
+ description: 'Docker login token'
37
+ })
38
+ },
39
+ async action(_, opts) {
40
+ const { project, dockerLoginToken } = opts;
41
+ await startApp({ projectId: project, dockerLoginToken });
42
+ }
43
+ });
44
+
45
+ export const getAppLogsCliLeaf = CliLeaf({
46
+ name: 'logs',
47
+ description: 'Get logs for an application',
48
+ namedInputs: {
49
+ project: CliStringInput({
50
+ description: 'Project ID',
51
+ required: true
52
+ })
53
+ },
54
+ async action(_, opts) {
55
+ const { project } = opts;
56
+ const readable = await getAppLogs({ projectId: project });
57
+ readable.setEncoding('utf8');
58
+ for await (const chunk of readable) {
59
+ logger.info(chunk);
60
+ }
61
+ }
62
+ });
63
+
64
+ export const stopAppCliLeaf = CliLeaf({
65
+ name: 'stop',
66
+ description: 'Stop a running alwaysAI app',
67
+ namedInputs: {
68
+ project: CliStringInput({
69
+ description: 'Project ID',
70
+ required: true
71
+ })
72
+ },
73
+ async action(_, opts) {
74
+ const { project } = opts;
75
+ await stopApp({ projectId: project });
76
+ }
77
+ });
78
+
79
+ export const restartAppCliLeaf = CliLeaf({
80
+ name: 'restart',
81
+ description: 'Restart running alwaysAI app',
82
+ namedInputs: {
83
+ project: CliStringInput({
84
+ description: 'Project ID',
85
+ required: true
86
+ })
87
+ },
88
+ async action(_, opts) {
89
+ const { project } = opts;
90
+ await restartApp({ projectId: project });
91
+ }
92
+ });
@@ -0,0 +1,103 @@
1
+ import { CliLeaf, CliStringInput } from '@alwaysai/alwayscli';
2
+ import { ClientMessage, keyMirrors } from '@alwaysai/device-agent-schemas';
3
+ import { rollbackApp } from '../../application-control';
4
+ import { DeviceAgentCloudConnection } from '../../cloud-connection/device-agent-cloud-connection';
5
+ import { AgentConfigFile } from '../../infrastructure/agent-config';
6
+ import sleep from '../../util/sleep';
7
+
8
+ export const listAppsCliLeaf = CliLeaf({
9
+ name: 'list',
10
+ description: 'List all installed apps',
11
+ namedInputs: {},
12
+ async action(_, opts) {
13
+ const apps = await AgentConfigFile().getApps();
14
+ console.table(apps);
15
+ }
16
+ });
17
+
18
+ export const installAppCliLeaf = CliLeaf({
19
+ name: 'install',
20
+ description: 'Install an alwaysAI app from a project',
21
+ namedInputs: {
22
+ project: CliStringInput({
23
+ description: 'Project ID',
24
+ required: true
25
+ }),
26
+ releaseHash: CliStringInput({
27
+ description: 'Release Hash',
28
+ required: true
29
+ })
30
+ },
31
+ async action(_, opts) {
32
+ const { project, releaseHash } = opts;
33
+ const deviceAgent = new DeviceAgentCloudConnection();
34
+ await deviceAgent.setupHandlers();
35
+ const topic = deviceAgent.getToDeviceTopic();
36
+ const message: ClientMessage = {
37
+ timestamp: '',
38
+ topic,
39
+ payload: {
40
+ messageType: keyMirrors.clientMessageType.app_version_control,
41
+ appVersionControl: {
42
+ baseCommand: keyMirrors.appVersionControl.install,
43
+ projectId: project,
44
+ appReleaseHash: releaseHash
45
+ }
46
+ }
47
+ };
48
+ await deviceAgent.handleMessage(topic, message);
49
+ while (deviceAgent.isCmdInProgress(project)) {
50
+ await sleep(1000);
51
+ }
52
+ deviceAgent.stop();
53
+ }
54
+ });
55
+
56
+ export const uninstallAppCliLeaf = CliLeaf({
57
+ name: 'uninstall',
58
+ description: 'Remove an alwaysAI app',
59
+ namedInputs: {
60
+ project: CliStringInput({
61
+ description: 'Project ID',
62
+ required: true
63
+ })
64
+ },
65
+ async action(_, opts) {
66
+ const { project } = opts;
67
+ const deviceAgent = new DeviceAgentCloudConnection();
68
+ await deviceAgent.setupHandlers();
69
+ const topic = deviceAgent.getToDeviceTopic();
70
+ const message: ClientMessage = {
71
+ timestamp: '',
72
+ topic,
73
+ payload: {
74
+ messageType: keyMirrors.clientMessageType.app_version_control,
75
+ appVersionControl: {
76
+ baseCommand: keyMirrors.appVersionControl.uninstall,
77
+ projectId: project
78
+ }
79
+ }
80
+ };
81
+ await deviceAgent.handleMessage(topic, message);
82
+ while (deviceAgent.isCmdInProgress(project)) {
83
+ await sleep(1000);
84
+ }
85
+ deviceAgent.stop();
86
+ }
87
+ });
88
+
89
+ export const rollbackAppCliLeaf = CliLeaf({
90
+ name: 'rollback',
91
+ description: 'Rollback an alwaysAI app to the previous version',
92
+ namedInputs: {
93
+ project: CliStringInput({
94
+ description: 'Project ID',
95
+ required: true
96
+ })
97
+ },
98
+ hidden: true,
99
+ async action(_, opts) {
100
+ const { project } = opts;
101
+ await rollbackApp({ projectId: project });
102
+ }
103
+ });
@@ -8,7 +8,7 @@ export function getDeviceUuid() {
8
8
  try {
9
9
  const cfg = deviceCfgFile.read();
10
10
  return cfg.deviceUuid;
11
- } catch (err) {
11
+ } catch (e) {
12
12
  throw new Error(
13
13
  `Failed to read device configuration: ${JSON.stringify(
14
14
  deviceCfgFile.getErrors(),
@@ -23,7 +23,7 @@ export async function httpClient(
23
23
  return await response.text();
24
24
  }
25
25
  } catch (e) {
26
- logger.error(`HTTP Client error for ${url}: ${e}`);
26
+ logger.error(`HTTP Client error for ${url}: ${e.message}`);
27
27
  }
28
28
  }
29
29
 
@@ -1,60 +0,0 @@
1
- export declare const listAppsCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {}, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
2
- export declare const listAppReleasesCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
3
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
4
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
5
- export declare const listAppLatestReleaseCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
6
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
7
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
8
- export declare const installAppCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
9
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
10
- releaseHash: import("@alwaysai/alwayscli").CliInput<string, true>;
11
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
12
- export declare const getAppStatusCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
13
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
14
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
15
- export declare const startAppCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
16
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
17
- dockerLoginToken: import("@alwaysai/alwayscli").CliInput<string | undefined, false>;
18
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
19
- export declare const getAppLogsCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
20
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
21
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
22
- export declare const stopAppCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
23
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
24
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
25
- export declare const restartAppCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
26
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
27
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
28
- export declare const uninstallAppCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
29
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
30
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
31
- export declare const rollbackAppCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
32
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
33
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
34
- export declare const showAppModelsCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
35
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
36
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
37
- export declare const addModelCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
38
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
39
- model: import("@alwaysai/alwayscli").CliInput<string, true>;
40
- version: import("@alwaysai/alwayscli").CliInput<string, true>;
41
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
42
- export declare const removeModelCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
43
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
44
- model: import("@alwaysai/alwayscli").CliInput<string, true>;
45
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
46
- export declare const replaceModelsCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
47
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
48
- models: import("@alwaysai/alwayscli").CliInput<string[], true>;
49
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
50
- export declare const updateModelsCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
51
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
52
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
53
- export declare const getAllEnvsCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
54
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
55
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
56
- export declare const setEnvCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<string[], true>, {
57
- project: import("@alwaysai/alwayscli").CliInput<string, true>;
58
- service: import("@alwaysai/alwayscli").CliInput<string | undefined, false>;
59
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
60
- //# sourceMappingURL=app.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/subcommands/app/app.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,eAAe,yKAQ1B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;4DAajC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;4DAatC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;4DAoC5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;4DAc9B,CAAC;AAEH,eAAO,MAAM,eAAe;;;4DAgB1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;4DAiB5B,CAAC;AAEH,eAAO,MAAM,cAAc;;4DAazB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;4DAa5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;4DA+B9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;4DAc7B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;4DAc/B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;4DA4C1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;4DAiB7B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;4DAiB/B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;4DAa9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;4DAa5B,CAAC;AAEH,eAAO,MAAM,aAAa;;;4DAsBxB,CAAC"}
@@ -1,370 +0,0 @@
1
- "use strict";
2
- var __asyncValues = (this && this.__asyncValues) || function (o) {
3
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
4
- var m = o[Symbol.asyncIterator], i;
5
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
6
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
7
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
8
- };
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.setEnvCliLeaf = exports.getAllEnvsCliLeaf = exports.updateModelsCliLeaf = exports.replaceModelsCliLeaf = exports.removeModelCliLeaf = exports.addModelCliLeaf = exports.showAppModelsCliLeaf = exports.rollbackAppCliLeaf = exports.uninstallAppCliLeaf = exports.restartAppCliLeaf = exports.stopAppCliLeaf = exports.getAppLogsCliLeaf = exports.startAppCliLeaf = exports.getAppStatusCliLeaf = exports.installAppCliLeaf = exports.listAppLatestReleaseCliLeaf = exports.listAppReleasesCliLeaf = exports.listAppsCliLeaf = void 0;
11
- const alwayscli_1 = require("@alwaysai/alwayscli");
12
- const device_agent_schemas_1 = require("@alwaysai/device-agent-schemas");
13
- const application_control_1 = require("../../application-control");
14
- const device_agent_cloud_connection_1 = require("../../cloud-connection/device-agent-cloud-connection");
15
- const agent_config_1 = require("../../infrastructure/agent-config");
16
- const logger_1 = require("../../util/logger");
17
- const sleep_1 = require("../../util/sleep");
18
- exports.listAppsCliLeaf = (0, alwayscli_1.CliLeaf)({
19
- name: 'list',
20
- description: 'List all installed apps',
21
- namedInputs: {},
22
- async action(_, opts) {
23
- const apps = await (0, agent_config_1.AgentConfigFile)().getApps();
24
- console.table(apps);
25
- }
26
- });
27
- exports.listAppReleasesCliLeaf = (0, alwayscli_1.CliLeaf)({
28
- name: 'list-releases',
29
- description: 'List all releases for a given app',
30
- namedInputs: {
31
- project: (0, alwayscli_1.CliStringInput)({
32
- description: 'Project ID',
33
- required: true
34
- })
35
- },
36
- hidden: true,
37
- async action(_, opts) {
38
- throw new alwayscli_1.CliTerseError('This command is yet currently implemented!');
39
- }
40
- });
41
- exports.listAppLatestReleaseCliLeaf = (0, alwayscli_1.CliLeaf)({
42
- name: 'list-latest-release',
43
- description: 'List the latest release hash for a given app',
44
- namedInputs: {
45
- project: (0, alwayscli_1.CliStringInput)({
46
- description: 'Project ID',
47
- required: true
48
- })
49
- },
50
- hidden: true,
51
- async action(_, opts) {
52
- throw new alwayscli_1.CliTerseError('This command is yet currently implemented!');
53
- }
54
- });
55
- exports.installAppCliLeaf = (0, alwayscli_1.CliLeaf)({
56
- name: 'install',
57
- description: 'Install an alwaysAI app from a project',
58
- namedInputs: {
59
- project: (0, alwayscli_1.CliStringInput)({
60
- description: 'Project ID',
61
- required: true
62
- }),
63
- releaseHash: (0, alwayscli_1.CliStringInput)({
64
- description: 'Release Hash',
65
- required: true
66
- })
67
- },
68
- async action(_, opts) {
69
- const { project, releaseHash } = opts;
70
- const deviceAgent = new device_agent_cloud_connection_1.DeviceAgentCloudConnection();
71
- await deviceAgent.setupHandlers();
72
- const topic = deviceAgent.getToDeviceTopic();
73
- const message = {
74
- timestamp: '',
75
- topic,
76
- payload: {
77
- messageType: device_agent_schemas_1.keyMirrors.clientMessageType.app_version_control,
78
- appVersionControl: {
79
- baseCommand: device_agent_schemas_1.keyMirrors.appVersionControl.install,
80
- projectId: project,
81
- appReleaseHash: releaseHash
82
- }
83
- }
84
- };
85
- await deviceAgent.handleMessage(topic, message);
86
- while (deviceAgent.isCmdInProgress(project)) {
87
- await (0, sleep_1.default)(1000);
88
- }
89
- deviceAgent.stop();
90
- }
91
- });
92
- exports.getAppStatusCliLeaf = (0, alwayscli_1.CliLeaf)({
93
- name: 'status',
94
- description: 'Get the status of an installed alwaysAI app',
95
- namedInputs: {
96
- project: (0, alwayscli_1.CliStringInput)({
97
- description: 'Project ID',
98
- required: true
99
- })
100
- },
101
- async action(_, opts) {
102
- const { project } = opts;
103
- const appStatus = await (0, application_control_1.getAppStatus)({ projectId: project });
104
- logger_1.logger.info(JSON.stringify(appStatus, null, 2));
105
- }
106
- });
107
- exports.startAppCliLeaf = (0, alwayscli_1.CliLeaf)({
108
- name: 'start',
109
- description: 'Start an installed alwaysAI app',
110
- namedInputs: {
111
- project: (0, alwayscli_1.CliStringInput)({
112
- description: 'Project ID',
113
- required: true
114
- }),
115
- dockerLoginToken: (0, alwayscli_1.CliStringInput)({
116
- description: 'Docker login token'
117
- })
118
- },
119
- async action(_, opts) {
120
- const { project, dockerLoginToken } = opts;
121
- await (0, application_control_1.startApp)({ projectId: project, dockerLoginToken });
122
- }
123
- });
124
- exports.getAppLogsCliLeaf = (0, alwayscli_1.CliLeaf)({
125
- name: 'logs',
126
- description: 'Get logs for an application',
127
- namedInputs: {
128
- project: (0, alwayscli_1.CliStringInput)({
129
- description: 'Project ID',
130
- required: true
131
- })
132
- },
133
- async action(_, opts) {
134
- var e_1, _a;
135
- const { project } = opts;
136
- const readable = await (0, application_control_1.getAppLogs)({ projectId: project });
137
- readable.setEncoding('utf8');
138
- try {
139
- for (var readable_1 = __asyncValues(readable), readable_1_1; readable_1_1 = await readable_1.next(), !readable_1_1.done;) {
140
- const chunk = readable_1_1.value;
141
- logger_1.logger.info(chunk);
142
- }
143
- }
144
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
145
- finally {
146
- try {
147
- if (readable_1_1 && !readable_1_1.done && (_a = readable_1.return)) await _a.call(readable_1);
148
- }
149
- finally { if (e_1) throw e_1.error; }
150
- }
151
- }
152
- });
153
- exports.stopAppCliLeaf = (0, alwayscli_1.CliLeaf)({
154
- name: 'stop',
155
- description: 'Stop a running alwaysAI app',
156
- namedInputs: {
157
- project: (0, alwayscli_1.CliStringInput)({
158
- description: 'Project ID',
159
- required: true
160
- })
161
- },
162
- async action(_, opts) {
163
- const { project } = opts;
164
- await (0, application_control_1.stopApp)({ projectId: project });
165
- }
166
- });
167
- exports.restartAppCliLeaf = (0, alwayscli_1.CliLeaf)({
168
- name: 'restart',
169
- description: 'Restart running alwaysAI app',
170
- namedInputs: {
171
- project: (0, alwayscli_1.CliStringInput)({
172
- description: 'Project ID',
173
- required: true
174
- })
175
- },
176
- async action(_, opts) {
177
- const { project } = opts;
178
- await (0, application_control_1.restartApp)({ projectId: project });
179
- }
180
- });
181
- exports.uninstallAppCliLeaf = (0, alwayscli_1.CliLeaf)({
182
- name: 'uninstall',
183
- description: 'Remove an alwaysAI app',
184
- namedInputs: {
185
- project: (0, alwayscli_1.CliStringInput)({
186
- description: 'Project ID',
187
- required: true
188
- })
189
- },
190
- async action(_, opts) {
191
- const { project } = opts;
192
- const deviceAgent = new device_agent_cloud_connection_1.DeviceAgentCloudConnection();
193
- await deviceAgent.setupHandlers();
194
- const topic = deviceAgent.getToDeviceTopic();
195
- const message = {
196
- timestamp: '',
197
- topic,
198
- payload: {
199
- messageType: device_agent_schemas_1.keyMirrors.clientMessageType.app_version_control,
200
- appVersionControl: {
201
- baseCommand: device_agent_schemas_1.keyMirrors.appVersionControl.uninstall,
202
- projectId: project
203
- }
204
- }
205
- };
206
- await deviceAgent.handleMessage(topic, message);
207
- while (deviceAgent.isCmdInProgress(project)) {
208
- await (0, sleep_1.default)(1000);
209
- }
210
- deviceAgent.stop();
211
- }
212
- });
213
- exports.rollbackAppCliLeaf = (0, alwayscli_1.CliLeaf)({
214
- name: 'rollback',
215
- description: 'Rollback an alwaysAI app to the previous version',
216
- namedInputs: {
217
- project: (0, alwayscli_1.CliStringInput)({
218
- description: 'Project ID',
219
- required: true
220
- })
221
- },
222
- hidden: true,
223
- async action(_, opts) {
224
- const { project } = opts;
225
- await (0, application_control_1.rollbackApp)({ projectId: project });
226
- }
227
- });
228
- exports.showAppModelsCliLeaf = (0, alwayscli_1.CliLeaf)({
229
- name: 'show-models',
230
- description: 'Show the application models',
231
- namedInputs: {
232
- project: (0, alwayscli_1.CliStringInput)({
233
- description: 'Project ID',
234
- required: true
235
- })
236
- },
237
- async action(_, opts) {
238
- const { project } = opts;
239
- const appModels = await (0, application_control_1.getAppModels)({ projectId: project });
240
- console.table(appModels);
241
- }
242
- });
243
- exports.addModelCliLeaf = (0, alwayscli_1.CliLeaf)({
244
- name: 'add-model',
245
- description: 'Add a model to an alwaysAI app',
246
- namedInputs: {
247
- project: (0, alwayscli_1.CliStringInput)({
248
- description: 'Project ID',
249
- required: true
250
- }),
251
- model: (0, alwayscli_1.CliStringInput)({
252
- description: 'Model ID',
253
- required: true
254
- }),
255
- version: (0, alwayscli_1.CliStringInput)({
256
- description: 'Model version',
257
- required: true
258
- })
259
- },
260
- async action(_, opts) {
261
- const { project, model, version } = opts;
262
- const deviceAgent = new device_agent_cloud_connection_1.DeviceAgentCloudConnection();
263
- await deviceAgent.setupHandlers();
264
- const topic = deviceAgent.getShadowTopics().projects.updateDelta;
265
- const newAppCfg = await (0, application_control_1.readAppCfgFile)({ projectId: project });
266
- newAppCfg.models[model] = Number(version);
267
- const message = {
268
- version: 3,
269
- timestamp: 0,
270
- state: {
271
- [project]: {
272
- appConfig: JSON.stringify(newAppCfg)
273
- }
274
- },
275
- clientToken: 'not-self'
276
- };
277
- await deviceAgent.handleMessage(topic, message);
278
- while (deviceAgent.isCmdInProgress(project)) {
279
- await (0, sleep_1.default)(1000);
280
- }
281
- deviceAgent.stop();
282
- }
283
- });
284
- exports.removeModelCliLeaf = (0, alwayscli_1.CliLeaf)({
285
- name: 'remove-model',
286
- description: 'Remove a model from an alwaysAI app',
287
- namedInputs: {
288
- project: (0, alwayscli_1.CliStringInput)({
289
- description: 'Project ID',
290
- required: true
291
- }),
292
- model: (0, alwayscli_1.CliStringInput)({
293
- description: 'Model ID',
294
- required: true
295
- })
296
- },
297
- async action(_, opts) {
298
- const { project, model } = opts;
299
- await (0, application_control_1.removeModel)({ projectId: project, modelId: model });
300
- }
301
- });
302
- exports.replaceModelsCliLeaf = (0, alwayscli_1.CliLeaf)({
303
- name: 'replace-models',
304
- description: 'Replace all models of an alwaysAI app with new models',
305
- namedInputs: {
306
- project: (0, alwayscli_1.CliStringInput)({
307
- description: 'Project Id',
308
- required: true
309
- }),
310
- models: (0, alwayscli_1.CliStringArrayInput)({
311
- description: 'One or more model IDs',
312
- required: true
313
- })
314
- },
315
- async action(_, opts) {
316
- const { project, models } = opts;
317
- await (0, application_control_1.replaceModels)({ projectId: project, modelIds: models });
318
- }
319
- });
320
- exports.updateModelsCliLeaf = (0, alwayscli_1.CliLeaf)({
321
- name: 'update-models',
322
- description: 'Update all models for an alwaysAI app',
323
- namedInputs: {
324
- project: (0, alwayscli_1.CliStringInput)({
325
- description: 'Project Id',
326
- required: true
327
- })
328
- },
329
- async action(_, opts) {
330
- const { project } = opts;
331
- await (0, application_control_1.updateModels)({ projectId: project });
332
- }
333
- });
334
- exports.getAllEnvsCliLeaf = (0, alwayscli_1.CliLeaf)({
335
- name: 'get-all-envs',
336
- description: 'Get environment variables for an application',
337
- namedInputs: {
338
- project: (0, alwayscli_1.CliStringInput)({
339
- description: 'Project Id',
340
- required: true
341
- })
342
- },
343
- async action(_, opts) {
344
- const { project } = opts;
345
- logger_1.logger.info(await (0, application_control_1.getAllEnvs)({ projectId: project }));
346
- }
347
- });
348
- exports.setEnvCliLeaf = (0, alwayscli_1.CliLeaf)({
349
- name: 'set-env',
350
- description: 'Set environment variables for a service',
351
- positionalInput: (0, alwayscli_1.CliStringArrayInput)({
352
- placeholder: '<NAME=VALUE> [<NAME=VALUE> ...]',
353
- required: true
354
- }),
355
- namedInputs: {
356
- project: (0, alwayscli_1.CliStringInput)({
357
- description: 'Project Id',
358
- required: true
359
- }),
360
- service: (0, alwayscli_1.CliStringInput)({
361
- description: 'The name of the docker-compose service to apply environment variable to',
362
- required: false
363
- })
364
- },
365
- async action(args, opts) {
366
- const { project, service } = opts;
367
- await (0, application_control_1.setEnv)({ projectId: project, vars: args, service });
368
- }
369
- });
370
- //# sourceMappingURL=app.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/subcommands/app/app.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,mDAK6B;AAC7B,yEAA2E;AAC3E,mEAcmC;AACnC,wGAAkG;AAClG,oEAAoE;AACpE,8CAA2C;AAC3C,4CAAqC;AAExB,QAAA,eAAe,GAAG,IAAA,mBAAO,EAAC;IACrC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,yBAAyB;IACtC,WAAW,EAAE,EAAE;IACf,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,IAAI,GAAG,MAAM,IAAA,8BAAe,GAAE,CAAC,OAAO,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,sBAAsB,GAAG,IAAA,mBAAO,EAAC;IAC5C,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,mCAAmC;IAChD,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,MAAM,EAAE,IAAI;IACZ,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,IAAI,yBAAa,CAAC,4CAA4C,CAAC,CAAC;IACxE,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,2BAA2B,GAAG,IAAA,mBAAO,EAAC;IACjD,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,8CAA8C;IAC3D,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,MAAM,EAAE,IAAI;IACZ,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,IAAI,yBAAa,CAAC,4CAA4C,CAAC,CAAC;IACxE,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,IAAA,mBAAO,EAAC;IACvC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,wCAAwC;IACrD,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,WAAW,EAAE,IAAA,0BAAc,EAAC;YAC1B,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,0DAA0B,EAAE,CAAC;QACrD,MAAM,WAAW,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAkB;YAC7B,SAAS,EAAE,EAAE;YACb,KAAK;YACL,OAAO,EAAE;gBACP,WAAW,EAAE,iCAAU,CAAC,iBAAiB,CAAC,mBAAmB;gBAC7D,iBAAiB,EAAE;oBACjB,WAAW,EAAE,iCAAU,CAAC,iBAAiB,CAAC,OAAO;oBACjD,SAAS,EAAE,OAAO;oBAClB,cAAc,EAAE,WAAW;iBAC5B;aACF;SACF,CAAC;QACF,MAAM,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE;YAC3C,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAC;SACnB;QACD,WAAW,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,IAAA,mBAAO,EAAC;IACzC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,6CAA6C;IAC1D,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,IAAA,kCAAY,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7D,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,eAAe,GAAG,IAAA,mBAAO,EAAC;IACrC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,iCAAiC;IAC9C,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,gBAAgB,EAAE,IAAA,0BAAc,EAAC;YAC/B,WAAW,EAAE,oBAAoB;SAClC,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;QAC3C,MAAM,IAAA,8BAAQ,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,IAAA,mBAAO,EAAC;IACvC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAA,gCAAU,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;YAC7B,KAA0B,IAAA,aAAA,cAAA,QAAQ,CAAA,cAAA;gBAAvB,MAAM,KAAK,qBAAA,CAAA;gBACpB,eAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACpB;;;;;;;;;IACH,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,cAAc,GAAG,IAAA,mBAAO,EAAC;IACpC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,IAAA,6BAAO,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,IAAA,mBAAO,EAAC;IACvC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,8BAA8B;IAC3C,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,IAAA,gCAAU,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,IAAA,mBAAO,EAAC;IACzC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,wBAAwB;IACrC,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,WAAW,GAAG,IAAI,0DAA0B,EAAE,CAAC;QACrD,MAAM,WAAW,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAkB;YAC7B,SAAS,EAAE,EAAE;YACb,KAAK;YACL,OAAO,EAAE;gBACP,WAAW,EAAE,iCAAU,CAAC,iBAAiB,CAAC,mBAAmB;gBAC7D,iBAAiB,EAAE;oBACjB,WAAW,EAAE,iCAAU,CAAC,iBAAiB,CAAC,SAAS;oBACnD,SAAS,EAAE,OAAO;iBACnB;aACF;SACF,CAAC;QACF,MAAM,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE;YAC3C,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAC;SACnB;QACD,WAAW,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,kBAAkB,GAAG,IAAA,mBAAO,EAAC;IACxC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,kDAAkD;IAC/D,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,MAAM,EAAE,IAAI;IACZ,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,IAAA,iCAAW,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,oBAAoB,GAAG,IAAA,mBAAO,EAAC;IAC1C,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,IAAA,kCAAY,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,eAAe,GAAG,IAAA,mBAAO,EAAC;IACrC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,gCAAgC;IAC7C,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,KAAK,EAAE,IAAA,0BAAc,EAAC;YACpB,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,eAAe;YAC5B,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,0DAA0B,EAAE,CAAC;QACrD,MAAM,WAAW,CAAC,aAAa,EAAE,CAAC;QAElC,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAEjE,MAAM,SAAS,GAAG,MAAM,IAAA,oCAAc,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAE1C,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE;gBACL,CAAC,OAAO,CAAC,EAAE;oBACT,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;iBACrC;aACF;YACD,WAAW,EAAE,UAAU;SACxB,CAAC;QAEF,MAAM,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE;YAC3C,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAC;SACnB;QACD,WAAW,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,kBAAkB,GAAG,IAAA,mBAAO,EAAC;IACxC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,qCAAqC;IAClD,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,KAAK,EAAE,IAAA,0BAAc,EAAC;YACpB,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,IAAA,iCAAW,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,oBAAoB,GAAG,IAAA,mBAAO,EAAC;IAC1C,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,uDAAuD;IACpE,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,MAAM,EAAE,IAAA,+BAAmB,EAAC;YAC1B,WAAW,EAAE,uBAAuB;YACpC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACjC,MAAM,IAAA,mCAAa,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,IAAA,mBAAO,EAAC;IACzC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,uCAAuC;IACpD,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,IAAA,kCAAY,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,IAAA,mBAAO,EAAC;IACvC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,8CAA8C;IAC3D,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,eAAM,CAAC,IAAI,CAAC,MAAM,IAAA,gCAAU,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,aAAa,GAAG,IAAA,mBAAO,EAAC;IACnC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,yCAAyC;IACtD,eAAe,EAAE,IAAA,+BAAmB,EAAC;QACnC,WAAW,EAAE,iCAAiC;QAC9C,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EACT,yEAAyE;YAC3E,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI;QACrB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAClC,MAAM,IAAA,4BAAM,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF,CAAC,CAAC"}