@abdasis/agentdeck 2.44.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.
Files changed (196) hide show
  1. package/README.md +122 -0
  2. package/agent/dist/config.d.ts +31 -0
  3. package/agent/dist/config.d.ts.map +1 -0
  4. package/agent/dist/config.js +81 -0
  5. package/agent/dist/config.js.map +1 -0
  6. package/agent/dist/db/commands.d.ts +25 -0
  7. package/agent/dist/db/commands.d.ts.map +1 -0
  8. package/agent/dist/db/commands.js +93 -0
  9. package/agent/dist/db/commands.js.map +1 -0
  10. package/agent/dist/db/index.d.ts +30 -0
  11. package/agent/dist/db/index.d.ts.map +1 -0
  12. package/agent/dist/db/index.js +368 -0
  13. package/agent/dist/db/index.js.map +1 -0
  14. package/agent/dist/db/schema.d.ts +74 -0
  15. package/agent/dist/db/schema.d.ts.map +1 -0
  16. package/agent/dist/db/schema.js +100 -0
  17. package/agent/dist/db/schema.js.map +1 -0
  18. package/agent/dist/db/sessions.d.ts +46 -0
  19. package/agent/dist/db/sessions.d.ts.map +1 -0
  20. package/agent/dist/db/sessions.js +198 -0
  21. package/agent/dist/db/sessions.js.map +1 -0
  22. package/agent/dist/index.d.ts +2 -0
  23. package/agent/dist/index.d.ts.map +1 -0
  24. package/agent/dist/index.js +19 -0
  25. package/agent/dist/index.js.map +1 -0
  26. package/agent/dist/lib/command-session.d.ts +20 -0
  27. package/agent/dist/lib/command-session.d.ts.map +1 -0
  28. package/agent/dist/lib/command-session.js +64 -0
  29. package/agent/dist/lib/command-session.js.map +1 -0
  30. package/agent/dist/lib/git.d.ts +8 -0
  31. package/agent/dist/lib/git.d.ts.map +1 -0
  32. package/agent/dist/lib/git.js +194 -0
  33. package/agent/dist/lib/git.js.map +1 -0
  34. package/agent/dist/lib/init-script.d.ts +33 -0
  35. package/agent/dist/lib/init-script.d.ts.map +1 -0
  36. package/agent/dist/lib/init-script.js +523 -0
  37. package/agent/dist/lib/init-script.js.map +1 -0
  38. package/agent/dist/lib/transcript.d.ts +16 -0
  39. package/agent/dist/lib/transcript.d.ts.map +1 -0
  40. package/agent/dist/lib/transcript.js +64 -0
  41. package/agent/dist/lib/transcript.js.map +1 -0
  42. package/agent/dist/logger.d.ts +12 -0
  43. package/agent/dist/logger.d.ts.map +1 -0
  44. package/agent/dist/logger.js +39 -0
  45. package/agent/dist/logger.js.map +1 -0
  46. package/agent/dist/middleware/auth.d.ts +15 -0
  47. package/agent/dist/middleware/auth.d.ts.map +1 -0
  48. package/agent/dist/middleware/auth.js +55 -0
  49. package/agent/dist/middleware/auth.js.map +1 -0
  50. package/agent/dist/routes/commands.d.ts +8 -0
  51. package/agent/dist/routes/commands.d.ts.map +1 -0
  52. package/agent/dist/routes/commands.js +229 -0
  53. package/agent/dist/routes/commands.js.map +1 -0
  54. package/agent/dist/routes/files.d.ts +7 -0
  55. package/agent/dist/routes/files.d.ts.map +1 -0
  56. package/agent/dist/routes/files.js +206 -0
  57. package/agent/dist/routes/files.js.map +1 -0
  58. package/agent/dist/routes/hooks.d.ts +7 -0
  59. package/agent/dist/routes/hooks.d.ts.map +1 -0
  60. package/agent/dist/routes/hooks.js +147 -0
  61. package/agent/dist/routes/hooks.js.map +1 -0
  62. package/agent/dist/routes/index.d.ts +10 -0
  63. package/agent/dist/routes/index.d.ts.map +1 -0
  64. package/agent/dist/routes/index.js +10 -0
  65. package/agent/dist/routes/index.js.map +1 -0
  66. package/agent/dist/routes/pair.d.ts +26 -0
  67. package/agent/dist/routes/pair.d.ts.map +1 -0
  68. package/agent/dist/routes/pair.js +384 -0
  69. package/agent/dist/routes/pair.js.map +1 -0
  70. package/agent/dist/routes/projects.d.ts +6 -0
  71. package/agent/dist/routes/projects.d.ts.map +1 -0
  72. package/agent/dist/routes/projects.js +121 -0
  73. package/agent/dist/routes/projects.js.map +1 -0
  74. package/agent/dist/routes/sessions-git.d.ts +7 -0
  75. package/agent/dist/routes/sessions-git.d.ts.map +1 -0
  76. package/agent/dist/routes/sessions-git.js +31 -0
  77. package/agent/dist/routes/sessions-git.js.map +1 -0
  78. package/agent/dist/routes/sessions-tmux.d.ts +7 -0
  79. package/agent/dist/routes/sessions-tmux.d.ts.map +1 -0
  80. package/agent/dist/routes/sessions-tmux.js +94 -0
  81. package/agent/dist/routes/sessions-tmux.js.map +1 -0
  82. package/agent/dist/routes/sessions.d.ts +7 -0
  83. package/agent/dist/routes/sessions.d.ts.map +1 -0
  84. package/agent/dist/routes/sessions.js +172 -0
  85. package/agent/dist/routes/sessions.js.map +1 -0
  86. package/agent/dist/server.d.ts +6 -0
  87. package/agent/dist/server.d.ts.map +1 -0
  88. package/agent/dist/server.js +95 -0
  89. package/agent/dist/server.js.map +1 -0
  90. package/agent/dist/terminal.d.ts +19 -0
  91. package/agent/dist/terminal.d.ts.map +1 -0
  92. package/agent/dist/terminal.js +175 -0
  93. package/agent/dist/terminal.js.map +1 -0
  94. package/agent/dist/updater.d.ts +18 -0
  95. package/agent/dist/updater.d.ts.map +1 -0
  96. package/agent/dist/updater.js +122 -0
  97. package/agent/dist/updater.js.map +1 -0
  98. package/agent/dist/version.d.ts +20 -0
  99. package/agent/dist/version.d.ts.map +1 -0
  100. package/agent/dist/version.js +66 -0
  101. package/agent/dist/version.js.map +1 -0
  102. package/agent/dist/websocket-handlers.d.ts +38 -0
  103. package/agent/dist/websocket-handlers.d.ts.map +1 -0
  104. package/agent/dist/websocket-handlers.js +389 -0
  105. package/agent/dist/websocket-handlers.js.map +1 -0
  106. package/agent/node_modules/@agentdeck/shared/dist/index.d.ts +2 -0
  107. package/agent/node_modules/@agentdeck/shared/dist/index.d.ts.map +1 -0
  108. package/agent/node_modules/@agentdeck/shared/dist/index.js +2 -0
  109. package/agent/node_modules/@agentdeck/shared/dist/index.js.map +1 -0
  110. package/agent/node_modules/@agentdeck/shared/dist/types/index.d.ts +235 -0
  111. package/agent/node_modules/@agentdeck/shared/dist/types/index.d.ts.map +1 -0
  112. package/agent/node_modules/@agentdeck/shared/dist/types/index.js +5 -0
  113. package/agent/node_modules/@agentdeck/shared/dist/types/index.js.map +1 -0
  114. package/agent/node_modules/@agentdeck/shared/package.json +29 -0
  115. package/dist/commands/doctor.d.ts +3 -0
  116. package/dist/commands/doctor.d.ts.map +1 -0
  117. package/dist/commands/doctor.js +304 -0
  118. package/dist/commands/doctor.js.map +1 -0
  119. package/dist/commands/hooks.d.ts +3 -0
  120. package/dist/commands/hooks.d.ts.map +1 -0
  121. package/dist/commands/hooks.js +187 -0
  122. package/dist/commands/hooks.js.map +1 -0
  123. package/dist/commands/init.d.ts +3 -0
  124. package/dist/commands/init.d.ts.map +1 -0
  125. package/dist/commands/init.js +109 -0
  126. package/dist/commands/init.js.map +1 -0
  127. package/dist/commands/logs.d.ts +3 -0
  128. package/dist/commands/logs.d.ts.map +1 -0
  129. package/dist/commands/logs.js +38 -0
  130. package/dist/commands/logs.js.map +1 -0
  131. package/dist/commands/profile.d.ts +3 -0
  132. package/dist/commands/profile.d.ts.map +1 -0
  133. package/dist/commands/profile.js +156 -0
  134. package/dist/commands/profile.js.map +1 -0
  135. package/dist/commands/service.d.ts +3 -0
  136. package/dist/commands/service.d.ts.map +1 -0
  137. package/dist/commands/service.js +235 -0
  138. package/dist/commands/service.js.map +1 -0
  139. package/dist/commands/start.d.ts +3 -0
  140. package/dist/commands/start.d.ts.map +1 -0
  141. package/dist/commands/start.js +122 -0
  142. package/dist/commands/start.js.map +1 -0
  143. package/dist/commands/status.d.ts +3 -0
  144. package/dist/commands/status.d.ts.map +1 -0
  145. package/dist/commands/status.js +48 -0
  146. package/dist/commands/status.js.map +1 -0
  147. package/dist/commands/stop.d.ts +3 -0
  148. package/dist/commands/stop.d.ts.map +1 -0
  149. package/dist/commands/stop.js +23 -0
  150. package/dist/commands/stop.js.map +1 -0
  151. package/dist/commands/update.d.ts +3 -0
  152. package/dist/commands/update.d.ts.map +1 -0
  153. package/dist/commands/update.js +129 -0
  154. package/dist/commands/update.js.map +1 -0
  155. package/dist/commands/version.d.ts +3 -0
  156. package/dist/commands/version.d.ts.map +1 -0
  157. package/dist/commands/version.js +39 -0
  158. package/dist/commands/version.js.map +1 -0
  159. package/dist/index.d.ts +5 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +45 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/lib/config.d.ts +68 -0
  164. package/dist/lib/config.d.ts.map +1 -0
  165. package/dist/lib/config.js +156 -0
  166. package/dist/lib/config.js.map +1 -0
  167. package/dist/lib/hooks.d.ts +67 -0
  168. package/dist/lib/hooks.d.ts.map +1 -0
  169. package/dist/lib/hooks.js +353 -0
  170. package/dist/lib/hooks.js.map +1 -0
  171. package/dist/lib/paths.d.ts +36 -0
  172. package/dist/lib/paths.d.ts.map +1 -0
  173. package/dist/lib/paths.js +77 -0
  174. package/dist/lib/paths.js.map +1 -0
  175. package/dist/lib/prerequisites.d.ts +60 -0
  176. package/dist/lib/prerequisites.d.ts.map +1 -0
  177. package/dist/lib/prerequisites.js +266 -0
  178. package/dist/lib/prerequisites.js.map +1 -0
  179. package/dist/lib/process.d.ts +40 -0
  180. package/dist/lib/process.d.ts.map +1 -0
  181. package/dist/lib/process.js +192 -0
  182. package/dist/lib/process.js.map +1 -0
  183. package/dist/service/index.d.ts +44 -0
  184. package/dist/service/index.d.ts.map +1 -0
  185. package/dist/service/index.js +18 -0
  186. package/dist/service/index.js.map +1 -0
  187. package/dist/service/launchd.d.ts +18 -0
  188. package/dist/service/launchd.d.ts.map +1 -0
  189. package/dist/service/launchd.js +208 -0
  190. package/dist/service/launchd.js.map +1 -0
  191. package/dist/service/systemd.d.ts +18 -0
  192. package/dist/service/systemd.d.ts.map +1 -0
  193. package/dist/service/systemd.js +196 -0
  194. package/dist/service/systemd.js.map +1 -0
  195. package/hooks/notify-agentdeck.sh +53 -0
  196. package/package.json +83 -0
@@ -0,0 +1,122 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { spawn } from 'child_process';
5
+ import { join } from 'path';
6
+ import { existsSync } from 'fs';
7
+ import { loadConfig, configExists, getProfilePath } from '../lib/config.js';
8
+ import { getAgentPaths } from '../lib/paths.js';
9
+ import { startAgentDaemon, isAgentRunning } from '../lib/process.js';
10
+ import { isAbiVersionChanged, ensureNativeModules } from '../lib/prerequisites.js';
11
+ export const startCommand = new Command('start')
12
+ .description('Start the AgentDeck agent')
13
+ .option('-f, --foreground', 'Run in foreground (not as daemon)')
14
+ .option('-P, --profile <name>', 'Use a specific profile')
15
+ .action(async (options, cmd) => {
16
+ // Get profile from command option or parent (global) option
17
+ const profileName = options.profile || cmd.parent?.opts().profile;
18
+ const profileLabel = profileName ? ` (profile: ${profileName})` : '';
19
+ // Check configuration
20
+ if (!configExists(profileName)) {
21
+ if (profileName) {
22
+ console.log(chalk.red(`Profile '${profileName}' not found. Run: agentdeck profile create ${profileName}\n`));
23
+ }
24
+ else {
25
+ console.log(chalk.red('Configuration not found. Run: agentdeck init\n'));
26
+ }
27
+ process.exit(1);
28
+ }
29
+ const config = loadConfig(profileName);
30
+ if (!config) {
31
+ console.log(chalk.red('Failed to load configuration.\n'));
32
+ process.exit(1);
33
+ }
34
+ // Check native module compatibility (auto-rebuild if Node version changed)
35
+ if (isAbiVersionChanged()) {
36
+ const rebuildSpinner = ora('Node version changed, rebuilding native modules...').start();
37
+ const nativeCheck = await ensureNativeModules();
38
+ if (nativeCheck.status === 'ok') {
39
+ rebuildSpinner.succeed('Native modules rebuilt successfully');
40
+ }
41
+ else {
42
+ rebuildSpinner.fail(nativeCheck.message);
43
+ process.exit(1);
44
+ }
45
+ }
46
+ else {
47
+ const nativeCheck = await ensureNativeModules();
48
+ if (nativeCheck.status === 'error') {
49
+ console.log(chalk.red(`${nativeCheck.message}\n`));
50
+ process.exit(1);
51
+ }
52
+ }
53
+ // Check if already running
54
+ const status = isAgentRunning();
55
+ if (status.running) {
56
+ console.log(chalk.yellow(`Agent is already running (PID: ${status.pid})\n`));
57
+ console.log('Use "agentdeck restart" to restart or "agentdeck stop" to stop.\n');
58
+ return;
59
+ }
60
+ if (options.foreground) {
61
+ // Run in foreground
62
+ console.log(chalk.blue(`Starting agent${profileLabel} in foreground on port ${config.agent.port}...\n`));
63
+ const paths = getAgentPaths();
64
+ const configPath = getProfilePath(profileName);
65
+ const entryPoint = paths.isDev
66
+ ? join(paths.agentRoot, 'src', 'index.ts')
67
+ : join(paths.agentRoot, 'dist', 'index.js');
68
+ if (!existsSync(entryPoint) && !existsSync(entryPoint.replace('.ts', '.js'))) {
69
+ console.log(chalk.red(`Agent entry point not found: ${entryPoint}\n`));
70
+ process.exit(1);
71
+ }
72
+ let command;
73
+ let args;
74
+ if (paths.isDev) {
75
+ command = 'npx';
76
+ args = ['tsx', entryPoint];
77
+ }
78
+ else {
79
+ command = paths.nodePath;
80
+ args = [entryPoint];
81
+ }
82
+ const child = spawn(command, args, {
83
+ cwd: paths.agentRoot,
84
+ stdio: 'inherit',
85
+ env: {
86
+ ...process.env,
87
+ AGENTDECK_CONFIG: configPath,
88
+ AGENTDECK_DATA: paths.dataDir,
89
+ AGENTDECK_PROFILE: profileName || '',
90
+ },
91
+ });
92
+ child.on('error', (err) => {
93
+ console.error(chalk.red(`Failed to start: ${err.message}`));
94
+ process.exit(1);
95
+ });
96
+ child.on('exit', (code) => {
97
+ process.exit(code ?? 0);
98
+ });
99
+ // Handle Ctrl+C gracefully
100
+ process.on('SIGINT', () => {
101
+ child.kill('SIGTERM');
102
+ });
103
+ }
104
+ else {
105
+ // Run as daemon
106
+ const spinner = ora(`Starting agent${profileLabel}...`).start();
107
+ const result = await startAgentDaemon(profileName);
108
+ if (result.success) {
109
+ spinner.succeed(`Agent started${profileLabel} (PID: ${result.pid})`);
110
+ const paths = getAgentPaths();
111
+ console.log(chalk.dim(` Logs: ${join(paths.logDir, 'agent.log')}`));
112
+ console.log();
113
+ console.log(`Agent running on ${chalk.cyan(`http://localhost:${config.agent.port}`)}`);
114
+ console.log();
115
+ }
116
+ else {
117
+ spinner.fail(`Failed to start: ${result.error}`);
118
+ process.exit(1);
119
+ }
120
+ }
121
+ });
122
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const statusCommand: Command;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SAiDtB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { loadConfig, configExists } from '../lib/config.js';
4
+ import { getAgentPaths } from '../lib/paths.js';
5
+ import { isAgentRunning, getAgentHealth } from '../lib/process.js';
6
+ export const statusCommand = new Command('status')
7
+ .description('Show agent status')
8
+ .action(async () => {
9
+ console.log(chalk.bold('\nAgentDeck Agent Status\n'));
10
+ // Configuration
11
+ if (!configExists()) {
12
+ console.log(chalk.red('Not configured. Run: agentdeck init\n'));
13
+ return;
14
+ }
15
+ const config = loadConfig();
16
+ if (!config) {
17
+ console.log(chalk.red('Failed to load configuration.\n'));
18
+ return;
19
+ }
20
+ const paths = getAgentPaths();
21
+ // Process status
22
+ const processStatus = isAgentRunning();
23
+ const statusIcon = processStatus.running ? chalk.green('●') : chalk.red('●');
24
+ const statusText = processStatus.running ? chalk.green('Running') : chalk.red('Stopped');
25
+ console.log(`${statusIcon} Process: ${statusText}`);
26
+ if (processStatus.pid) {
27
+ console.log(` PID: ${processStatus.pid}`);
28
+ }
29
+ // Health check if running
30
+ if (processStatus.running) {
31
+ const health = await getAgentHealth(config.agent.port);
32
+ if (health.healthy) {
33
+ console.log(` Sessions: ${health.sessions}`);
34
+ }
35
+ else {
36
+ console.log(chalk.yellow(` Warning: Agent not responding (${health.error})`));
37
+ }
38
+ }
39
+ console.log();
40
+ // Configuration info
41
+ console.log(chalk.dim('Configuration:'));
42
+ console.log(` Machine: ${config.machine.name}`);
43
+ console.log(` Port: ${config.agent.port}`);
44
+ console.log(` Projects: ${config.projects.basePath}`);
45
+ console.log(` Config: ${paths.configPath}`);
46
+ console.log();
47
+ });
48
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAEtD,gBAAgB;IAChB,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAE9B,iBAAiB;IACjB,MAAM,aAAa,GAAG,cAAc,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEzF,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,aAAa,UAAU,EAAE,CAAC,CAAC;IACpD,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,UAAU,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,0BAA0B;IAC1B,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oCAAoC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,qBAAqB;IACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAE7C,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const stopCommand: Command;
3
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SAoBpB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { stopAgent, isAgentRunning } from '../lib/process.js';
5
+ export const stopCommand = new Command('stop')
6
+ .description('Stop the AgentDeck agent')
7
+ .action(async () => {
8
+ const status = isAgentRunning();
9
+ if (!status.running) {
10
+ console.log(chalk.yellow('Agent is not running.\n'));
11
+ return;
12
+ }
13
+ const spinner = ora(`Stopping agent (PID: ${status.pid})...`).start();
14
+ const result = stopAgent();
15
+ if (result.success) {
16
+ spinner.succeed('Agent stopped');
17
+ }
18
+ else {
19
+ spinner.fail(`Failed to stop: ${result.error}`);
20
+ process.exit(1);
21
+ }
22
+ });
23
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAEhC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,wBAAwB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const updateCommand: Command;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,aAAa,SAyItB,CAAC"}
@@ -0,0 +1,129 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { exec } from 'child_process';
5
+ import { promisify } from 'util';
6
+ import { createServiceManager } from '../service/index.js';
7
+ import { isAgentRunning, stopAgent } from '../lib/process.js';
8
+ const execAsync = promisify(exec);
9
+ const PACKAGE_NAME = '@agentdeck/cli';
10
+ export const updateCommand = new Command('update')
11
+ .description('Update AgentDeck to the latest version')
12
+ .option('--check', 'Only check for updates without installing')
13
+ .action(async (options) => {
14
+ console.log(chalk.bold('\nAgentDeck Update\n'));
15
+ const checkSpinner = ora('Checking for updates...').start();
16
+ try {
17
+ // Get current version
18
+ const pkg = await import('../../package.json', {
19
+ with: { type: 'json' },
20
+ });
21
+ const currentVersion = pkg.default.version;
22
+ // Check npm for latest version
23
+ let latestVersion;
24
+ try {
25
+ const { stdout } = await execAsync(`npm view ${PACKAGE_NAME} version 2>/dev/null`);
26
+ latestVersion = stdout.trim();
27
+ }
28
+ catch {
29
+ checkSpinner.fail('Failed to check for updates. Are you connected to the internet?');
30
+ process.exit(1);
31
+ }
32
+ if (currentVersion === latestVersion) {
33
+ checkSpinner.succeed(`Already on the latest version (${currentVersion})`);
34
+ return;
35
+ }
36
+ checkSpinner.succeed(`Update available: ${currentVersion} → ${latestVersion}`);
37
+ if (options.check) {
38
+ console.log(chalk.dim('\nRun "agentdeck update" to install the update.\n'));
39
+ return;
40
+ }
41
+ console.log();
42
+ // Check if service is running
43
+ const serviceManager = createServiceManager();
44
+ let serviceWasRunning = false;
45
+ try {
46
+ const serviceStatus = await serviceManager.status();
47
+ serviceWasRunning = serviceStatus.running;
48
+ }
49
+ catch {
50
+ // Service not installed, check daemon
51
+ const daemonStatus = isAgentRunning();
52
+ serviceWasRunning = daemonStatus.running;
53
+ }
54
+ // Stop agent if running
55
+ if (serviceWasRunning) {
56
+ const stopSpinner = ora('Stopping agent...').start();
57
+ try {
58
+ const serviceStatus = await serviceManager.status();
59
+ if (serviceStatus.installed && serviceStatus.running) {
60
+ await serviceManager.stop();
61
+ }
62
+ else {
63
+ await stopAgent();
64
+ }
65
+ stopSpinner.succeed('Agent stopped');
66
+ }
67
+ catch (err) {
68
+ stopSpinner.warn(`Could not stop agent: ${err.message}`);
69
+ }
70
+ }
71
+ // Update via npm
72
+ const updateSpinner = ora(`Updating to ${latestVersion} via npm...`).start();
73
+ try {
74
+ const { stdout, stderr } = await execAsync(`npm install -g ${PACKAGE_NAME}@${latestVersion} 2>&1`, { timeout: 120_000 });
75
+ // Verify the installed version matches what we requested
76
+ const { stdout: installedStr } = await execAsync(`npm ls -g ${PACKAGE_NAME} --depth=0 --json 2>/dev/null`);
77
+ const installed = JSON.parse(installedStr);
78
+ const installedVersion = installed?.dependencies?.[PACKAGE_NAME]?.version;
79
+ if (installedVersion !== latestVersion) {
80
+ updateSpinner.fail(`npm installed ${installedVersion || 'unknown'} instead of ${latestVersion}`);
81
+ if (stderr || stdout) {
82
+ console.log(chalk.dim('\nnpm output:'));
83
+ console.log(chalk.dim(stderr || stdout));
84
+ }
85
+ console.log(chalk.dim(`\nTry: npm install -g ${PACKAGE_NAME}@${latestVersion} --force\n`));
86
+ process.exit(1);
87
+ }
88
+ updateSpinner.succeed(`Updated to ${latestVersion}`);
89
+ }
90
+ catch (err) {
91
+ const execErr = err;
92
+ updateSpinner.fail(`Failed to update: ${execErr.message}`);
93
+ if (execErr.stderr) {
94
+ console.log(chalk.dim('\nnpm error output:'));
95
+ console.log(chalk.dim(execErr.stderr));
96
+ }
97
+ console.log(chalk.dim(`\nTry running manually: npm install -g ${PACKAGE_NAME}@${latestVersion}\n`));
98
+ process.exit(1);
99
+ }
100
+ // Restart agent if it was running
101
+ if (serviceWasRunning) {
102
+ const startSpinner = ora('Restarting agent...').start();
103
+ try {
104
+ const serviceStatus = await serviceManager.status();
105
+ if (serviceStatus.installed) {
106
+ await serviceManager.start();
107
+ }
108
+ else {
109
+ // Will use the daemon mode - but after update the binary changed
110
+ // so we should tell user to restart manually
111
+ startSpinner.info('Please restart the agent manually: agentdeck start');
112
+ }
113
+ startSpinner.succeed('Agent restarted');
114
+ }
115
+ catch (err) {
116
+ startSpinner.warn(`Could not restart agent: ${err.message}`);
117
+ console.log(chalk.dim('Run "agentdeck start" to start the agent manually.'));
118
+ }
119
+ }
120
+ console.log();
121
+ console.log(chalk.green('✓ Update complete!'));
122
+ console.log();
123
+ }
124
+ catch (err) {
125
+ checkSpinner.fail(`Error: ${err.message}`);
126
+ process.exit(1);
127
+ }
128
+ });
129
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const versionCommand: Command;
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,cAAc,SA8BvB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { exec } from 'child_process';
4
+ import { promisify } from 'util';
5
+ const execAsync = promisify(exec);
6
+ const PACKAGE_NAME = '@agentdeck/cli';
7
+ export const versionCommand = new Command('version')
8
+ .description('Show version and check for updates')
9
+ .action(async () => {
10
+ // Get current version from package.json
11
+ const pkg = await import('../../package.json', {
12
+ with: { type: 'json' },
13
+ });
14
+ const currentVersion = pkg.default.version;
15
+ // Check npm for latest version
16
+ let latestVersion = null;
17
+ try {
18
+ const { stdout } = await execAsync(`npm view ${PACKAGE_NAME} version 2>/dev/null`);
19
+ latestVersion = stdout.trim();
20
+ }
21
+ catch {
22
+ // Network error or package not found - silently ignore
23
+ }
24
+ // Display version
25
+ if (latestVersion && currentVersion !== latestVersion) {
26
+ console.log(`AgentDeck v${currentVersion}`);
27
+ console.log();
28
+ console.log(chalk.yellow(`Update available: ${currentVersion} → ${latestVersion}`));
29
+ console.log(chalk.dim('Run "agentdeck update" to install.'));
30
+ }
31
+ else if (latestVersion) {
32
+ console.log(`AgentDeck v${currentVersion} ${chalk.green('(latest)')}`);
33
+ }
34
+ else {
35
+ console.log(`AgentDeck v${currentVersion}`);
36
+ console.log(chalk.dim('Could not check for updates.'));
37
+ }
38
+ });
39
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAEtC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,wCAAwC;IACxC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,oBAAoB,EAAE;QAC7C,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;KACvB,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;IAE3C,+BAA+B;IAC/B,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,YAAY,YAAY,sBAAsB,CAAC,CAAC;QACnF,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;IAED,kBAAkB;IAClB,IAAI,aAAa,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,cAAc,cAAc,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,cAAc,MAAM,aAAa,EAAE,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC/D,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,cAAc,cAAc,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,cAAc,cAAc,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACzD,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ declare const program: Command;
4
+ export { program };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAsB9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { initCommand } from './commands/init.js';
4
+ import { startCommand } from './commands/start.js';
5
+ import { stopCommand } from './commands/stop.js';
6
+ import { statusCommand } from './commands/status.js';
7
+ import { logsCommand } from './commands/logs.js';
8
+ import { serviceCommand } from './commands/service.js';
9
+ import { updateCommand } from './commands/update.js';
10
+ import { doctorCommand } from './commands/doctor.js';
11
+ import { profileCommand } from './commands/profile.js';
12
+ import { versionCommand } from './commands/version.js';
13
+ import { hooksCommand } from './commands/hooks.js';
14
+ const program = new Command();
15
+ program
16
+ .name('agentdeck')
17
+ .description('AgentDeck - Your command center for every coding agent')
18
+ .version('2.44.2')
19
+ .option('-P, --profile <name>', 'Use a specific profile (dev, prod, etc.)');
20
+ // Add commands
21
+ program.addCommand(initCommand);
22
+ program.addCommand(startCommand);
23
+ program.addCommand(stopCommand);
24
+ program.addCommand(statusCommand);
25
+ program.addCommand(logsCommand);
26
+ program.addCommand(serviceCommand);
27
+ program.addCommand(updateCommand);
28
+ program.addCommand(doctorCommand);
29
+ program.addCommand(profileCommand);
30
+ program.addCommand(versionCommand);
31
+ program.addCommand(hooksCommand);
32
+ // Export program for use in subcommands (to access global options)
33
+ export { program };
34
+ // Default action (no command)
35
+ program.action(() => {
36
+ console.log(`
37
+ ╭──────────────────────────────────╮
38
+ │ AgentDeck │
39
+ │ Your command center for agents │
40
+ ╰──────────────────────────────────╯
41
+ `);
42
+ program.help();
43
+ });
44
+ program.parse();
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,wDAAwD,CAAC;KACrE,OAAO,CAAC,QAAQ,CAAC;KACjB,MAAM,CAAC,sBAAsB,EAAE,0CAA0C,CAAC,CAAC;AAE9E,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAEjC,mEAAmE;AACnE,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,8BAA8B;AAC9B,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CAAC;;;;;CAKb,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,68 @@
1
+ export interface AgentConfig {
2
+ machine: {
3
+ id: string;
4
+ name: string;
5
+ };
6
+ agent: {
7
+ port: number;
8
+ accessToken?: string;
9
+ };
10
+ projects: {
11
+ basePath: string;
12
+ whitelist: string[];
13
+ };
14
+ editor?: {
15
+ enabled: boolean;
16
+ portRange: {
17
+ start: number;
18
+ end: number;
19
+ };
20
+ idleTimeout: number;
21
+ };
22
+ }
23
+ /**
24
+ * Get the profiles directory path
25
+ */
26
+ export declare function getProfilesDir(): string;
27
+ /**
28
+ * Get the config file path for a specific profile
29
+ * @param profileName - Profile name, or undefined/null/'default' for default config
30
+ */
31
+ export declare function getProfilePath(profileName?: string | null): string;
32
+ /**
33
+ * List all available profiles
34
+ */
35
+ export declare function listProfiles(): string[];
36
+ /**
37
+ * Check if a profile exists
38
+ */
39
+ export declare function profileExists(profileName?: string | null): boolean;
40
+ /**
41
+ * Delete a profile
42
+ */
43
+ export declare function deleteProfile(profileName: string): boolean;
44
+ /**
45
+ * Load configuration from ~/.agentdeck/config.json or a profile
46
+ * @param profileName - Profile name to load, or undefined for default
47
+ */
48
+ export declare function loadConfig(profileName?: string | null): AgentConfig | null;
49
+ /**
50
+ * Save configuration to ~/.agentdeck/config.json or a profile
51
+ * @param config - Configuration to save
52
+ * @param profileName - Profile name to save to, or undefined for default
53
+ */
54
+ export declare function saveConfig(config: AgentConfig, profileName?: string | null): void;
55
+ /**
56
+ * Create a new configuration with defaults
57
+ */
58
+ export declare function createConfig(options: {
59
+ machineName: string;
60
+ port?: number;
61
+ projectsPath?: string;
62
+ }): AgentConfig;
63
+ /**
64
+ * Check if configuration exists
65
+ * @param profileName - Profile name to check, or undefined for default
66
+ */
67
+ export declare function configExists(profileName?: string | null): boolean;
68
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAqBD;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAQlE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAsBvC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAGlE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAY1D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAwB1E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAcjF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,WAAW,CAgBd;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAGjE"}