@miosa/cli 0.2.0

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 (294) hide show
  1. package/README.md +327 -0
  2. package/dist/bin/miosa.d.ts +3 -0
  3. package/dist/bin/miosa.d.ts.map +1 -0
  4. package/dist/bin/miosa.js +139 -0
  5. package/dist/bin/miosa.js.map +1 -0
  6. package/dist/client.d.ts +74 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +523 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commands/agent.d.ts +18 -0
  11. package/dist/commands/agent.d.ts.map +1 -0
  12. package/dist/commands/agent.js +468 -0
  13. package/dist/commands/agent.js.map +1 -0
  14. package/dist/commands/alerts.d.ts +3 -0
  15. package/dist/commands/alerts.d.ts.map +1 -0
  16. package/dist/commands/alerts.js +41 -0
  17. package/dist/commands/alerts.js.map +1 -0
  18. package/dist/commands/api-keys.d.ts +3 -0
  19. package/dist/commands/api-keys.d.ts.map +1 -0
  20. package/dist/commands/api-keys.js +119 -0
  21. package/dist/commands/api-keys.js.map +1 -0
  22. package/dist/commands/api-resource.d.ts +20 -0
  23. package/dist/commands/api-resource.d.ts.map +1 -0
  24. package/dist/commands/api-resource.js +120 -0
  25. package/dist/commands/api-resource.js.map +1 -0
  26. package/dist/commands/apps.d.ts +3 -0
  27. package/dist/commands/apps.d.ts.map +1 -0
  28. package/dist/commands/apps.js +218 -0
  29. package/dist/commands/apps.js.map +1 -0
  30. package/dist/commands/audit.d.ts +3 -0
  31. package/dist/commands/audit.d.ts.map +1 -0
  32. package/dist/commands/audit.js +25 -0
  33. package/dist/commands/audit.js.map +1 -0
  34. package/dist/commands/auth.d.ts +3 -0
  35. package/dist/commands/auth.d.ts.map +1 -0
  36. package/dist/commands/auth.js +363 -0
  37. package/dist/commands/auth.js.map +1 -0
  38. package/dist/commands/backups.d.ts +3 -0
  39. package/dist/commands/backups.d.ts.map +1 -0
  40. package/dist/commands/backups.js +23 -0
  41. package/dist/commands/backups.js.map +1 -0
  42. package/dist/commands/checkpoints.d.ts +3 -0
  43. package/dist/commands/checkpoints.d.ts.map +1 -0
  44. package/dist/commands/checkpoints.js +33 -0
  45. package/dist/commands/checkpoints.js.map +1 -0
  46. package/dist/commands/computers.d.ts +3 -0
  47. package/dist/commands/computers.d.ts.map +1 -0
  48. package/dist/commands/computers.js +118 -0
  49. package/dist/commands/computers.js.map +1 -0
  50. package/dist/commands/config.d.ts +3 -0
  51. package/dist/commands/config.d.ts.map +1 -0
  52. package/dist/commands/config.js +114 -0
  53. package/dist/commands/config.js.map +1 -0
  54. package/dist/commands/connect.d.ts +3 -0
  55. package/dist/commands/connect.d.ts.map +1 -0
  56. package/dist/commands/connect.js +96 -0
  57. package/dist/commands/connect.js.map +1 -0
  58. package/dist/commands/containers.d.ts +3 -0
  59. package/dist/commands/containers.d.ts.map +1 -0
  60. package/dist/commands/containers.js +20 -0
  61. package/dist/commands/containers.js.map +1 -0
  62. package/dist/commands/cp.d.ts +3 -0
  63. package/dist/commands/cp.d.ts.map +1 -0
  64. package/dist/commands/cp.js +102 -0
  65. package/dist/commands/cp.js.map +1 -0
  66. package/dist/commands/cron.d.ts +3 -0
  67. package/dist/commands/cron.d.ts.map +1 -0
  68. package/dist/commands/cron.js +65 -0
  69. package/dist/commands/cron.js.map +1 -0
  70. package/dist/commands/databases.d.ts +3 -0
  71. package/dist/commands/databases.d.ts.map +1 -0
  72. package/dist/commands/databases.js +222 -0
  73. package/dist/commands/databases.js.map +1 -0
  74. package/dist/commands/db.d.ts +3 -0
  75. package/dist/commands/db.d.ts.map +1 -0
  76. package/dist/commands/db.js +174 -0
  77. package/dist/commands/db.js.map +1 -0
  78. package/dist/commands/deploy.d.ts +3 -0
  79. package/dist/commands/deploy.d.ts.map +1 -0
  80. package/dist/commands/deploy.js +579 -0
  81. package/dist/commands/deploy.js.map +1 -0
  82. package/dist/commands/desktop.d.ts +3 -0
  83. package/dist/commands/desktop.d.ts.map +1 -0
  84. package/dist/commands/desktop.js +276 -0
  85. package/dist/commands/desktop.js.map +1 -0
  86. package/dist/commands/dev.d.ts +3 -0
  87. package/dist/commands/dev.d.ts.map +1 -0
  88. package/dist/commands/dev.js +246 -0
  89. package/dist/commands/dev.js.map +1 -0
  90. package/dist/commands/doctor.d.ts +3 -0
  91. package/dist/commands/doctor.d.ts.map +1 -0
  92. package/dist/commands/doctor.js +241 -0
  93. package/dist/commands/doctor.js.map +1 -0
  94. package/dist/commands/domains.d.ts +3 -0
  95. package/dist/commands/domains.d.ts.map +1 -0
  96. package/dist/commands/domains.js +31 -0
  97. package/dist/commands/domains.js.map +1 -0
  98. package/dist/commands/enterprise-util.d.ts +37 -0
  99. package/dist/commands/enterprise-util.d.ts.map +1 -0
  100. package/dist/commands/enterprise-util.js +185 -0
  101. package/dist/commands/enterprise-util.js.map +1 -0
  102. package/dist/commands/exec.d.ts +3 -0
  103. package/dist/commands/exec.d.ts.map +1 -0
  104. package/dist/commands/exec.js +68 -0
  105. package/dist/commands/exec.js.map +1 -0
  106. package/dist/commands/functions.d.ts +3 -0
  107. package/dist/commands/functions.d.ts.map +1 -0
  108. package/dist/commands/functions.js +47 -0
  109. package/dist/commands/functions.js.map +1 -0
  110. package/dist/commands/gha-runners.d.ts +3 -0
  111. package/dist/commands/gha-runners.d.ts.map +1 -0
  112. package/dist/commands/gha-runners.js +33 -0
  113. package/dist/commands/gha-runners.js.map +1 -0
  114. package/dist/commands/groups.d.ts +3 -0
  115. package/dist/commands/groups.d.ts.map +1 -0
  116. package/dist/commands/groups.js +38 -0
  117. package/dist/commands/groups.js.map +1 -0
  118. package/dist/commands/host.d.ts +3 -0
  119. package/dist/commands/host.d.ts.map +1 -0
  120. package/dist/commands/host.js +74 -0
  121. package/dist/commands/host.js.map +1 -0
  122. package/dist/commands/hosts.d.ts +3 -0
  123. package/dist/commands/hosts.d.ts.map +1 -0
  124. package/dist/commands/hosts.js +90 -0
  125. package/dist/commands/hosts.js.map +1 -0
  126. package/dist/commands/link.d.ts +8 -0
  127. package/dist/commands/link.d.ts.map +1 -0
  128. package/dist/commands/link.js +124 -0
  129. package/dist/commands/link.js.map +1 -0
  130. package/dist/commands/login.d.ts +3 -0
  131. package/dist/commands/login.d.ts.map +1 -0
  132. package/dist/commands/login.js +172 -0
  133. package/dist/commands/login.js.map +1 -0
  134. package/dist/commands/logout.d.ts +3 -0
  135. package/dist/commands/logout.d.ts.map +1 -0
  136. package/dist/commands/logout.js +17 -0
  137. package/dist/commands/logout.js.map +1 -0
  138. package/dist/commands/logs.d.ts +3 -0
  139. package/dist/commands/logs.d.ts.map +1 -0
  140. package/dist/commands/logs.js +94 -0
  141. package/dist/commands/logs.js.map +1 -0
  142. package/dist/commands/ls.d.ts +3 -0
  143. package/dist/commands/ls.d.ts.map +1 -0
  144. package/dist/commands/ls.js +67 -0
  145. package/dist/commands/ls.js.map +1 -0
  146. package/dist/commands/machines.d.ts +3 -0
  147. package/dist/commands/machines.d.ts.map +1 -0
  148. package/dist/commands/machines.js +29 -0
  149. package/dist/commands/machines.js.map +1 -0
  150. package/dist/commands/mcp.d.ts +21 -0
  151. package/dist/commands/mcp.d.ts.map +1 -0
  152. package/dist/commands/mcp.js +1021 -0
  153. package/dist/commands/mcp.js.map +1 -0
  154. package/dist/commands/meshes.d.ts +3 -0
  155. package/dist/commands/meshes.d.ts.map +1 -0
  156. package/dist/commands/meshes.js +27 -0
  157. package/dist/commands/meshes.js.map +1 -0
  158. package/dist/commands/network-policy.d.ts +3 -0
  159. package/dist/commands/network-policy.d.ts.map +1 -0
  160. package/dist/commands/network-policy.js +40 -0
  161. package/dist/commands/network-policy.js.map +1 -0
  162. package/dist/commands/project.d.ts +4 -0
  163. package/dist/commands/project.d.ts.map +1 -0
  164. package/dist/commands/project.js +25 -0
  165. package/dist/commands/project.js.map +1 -0
  166. package/dist/commands/pull.d.ts +3 -0
  167. package/dist/commands/pull.d.ts.map +1 -0
  168. package/dist/commands/pull.js +155 -0
  169. package/dist/commands/pull.js.map +1 -0
  170. package/dist/commands/regions.d.ts +3 -0
  171. package/dist/commands/regions.d.ts.map +1 -0
  172. package/dist/commands/regions.js +67 -0
  173. package/dist/commands/regions.js.map +1 -0
  174. package/dist/commands/releases.d.ts +3 -0
  175. package/dist/commands/releases.d.ts.map +1 -0
  176. package/dist/commands/releases.js +176 -0
  177. package/dist/commands/releases.js.map +1 -0
  178. package/dist/commands/rm.d.ts +3 -0
  179. package/dist/commands/rm.d.ts.map +1 -0
  180. package/dist/commands/rm.js +42 -0
  181. package/dist/commands/rm.js.map +1 -0
  182. package/dist/commands/run.d.ts +3 -0
  183. package/dist/commands/run.d.ts.map +1 -0
  184. package/dist/commands/run.js +131 -0
  185. package/dist/commands/run.js.map +1 -0
  186. package/dist/commands/sandbox.d.ts +3 -0
  187. package/dist/commands/sandbox.d.ts.map +1 -0
  188. package/dist/commands/sandbox.js +352 -0
  189. package/dist/commands/sandbox.js.map +1 -0
  190. package/dist/commands/schedules.d.ts +3 -0
  191. package/dist/commands/schedules.d.ts.map +1 -0
  192. package/dist/commands/schedules.js +37 -0
  193. package/dist/commands/schedules.js.map +1 -0
  194. package/dist/commands/secrets.d.ts +3 -0
  195. package/dist/commands/secrets.d.ts.map +1 -0
  196. package/dist/commands/secrets.js +194 -0
  197. package/dist/commands/secrets.js.map +1 -0
  198. package/dist/commands/services.d.ts +3 -0
  199. package/dist/commands/services.d.ts.map +1 -0
  200. package/dist/commands/services.js +70 -0
  201. package/dist/commands/services.js.map +1 -0
  202. package/dist/commands/shell.d.ts +16 -0
  203. package/dist/commands/shell.d.ts.map +1 -0
  204. package/dist/commands/shell.js +527 -0
  205. package/dist/commands/shell.js.map +1 -0
  206. package/dist/commands/snapshot.d.ts +10 -0
  207. package/dist/commands/snapshot.d.ts.map +1 -0
  208. package/dist/commands/snapshot.js +181 -0
  209. package/dist/commands/snapshot.js.map +1 -0
  210. package/dist/commands/ssh.d.ts +3 -0
  211. package/dist/commands/ssh.d.ts.map +1 -0
  212. package/dist/commands/ssh.js +37 -0
  213. package/dist/commands/ssh.js.map +1 -0
  214. package/dist/commands/status.d.ts +3 -0
  215. package/dist/commands/status.d.ts.map +1 -0
  216. package/dist/commands/status.js +300 -0
  217. package/dist/commands/status.js.map +1 -0
  218. package/dist/commands/storage.d.ts +3 -0
  219. package/dist/commands/storage.d.ts.map +1 -0
  220. package/dist/commands/storage.js +180 -0
  221. package/dist/commands/storage.js.map +1 -0
  222. package/dist/commands/tenant.d.ts +3 -0
  223. package/dist/commands/tenant.d.ts.map +1 -0
  224. package/dist/commands/tenant.js +87 -0
  225. package/dist/commands/tenant.js.map +1 -0
  226. package/dist/commands/tunnel.d.ts +3 -0
  227. package/dist/commands/tunnel.d.ts.map +1 -0
  228. package/dist/commands/tunnel.js +418 -0
  229. package/dist/commands/tunnel.js.map +1 -0
  230. package/dist/commands/up.d.ts +14 -0
  231. package/dist/commands/up.d.ts.map +1 -0
  232. package/dist/commands/up.js +703 -0
  233. package/dist/commands/up.js.map +1 -0
  234. package/dist/commands/util.d.ts +19 -0
  235. package/dist/commands/util.d.ts.map +1 -0
  236. package/dist/commands/util.js +116 -0
  237. package/dist/commands/util.js.map +1 -0
  238. package/dist/commands/volumes.d.ts +3 -0
  239. package/dist/commands/volumes.d.ts.map +1 -0
  240. package/dist/commands/volumes.js +196 -0
  241. package/dist/commands/volumes.js.map +1 -0
  242. package/dist/commands/watch.d.ts +3 -0
  243. package/dist/commands/watch.d.ts.map +1 -0
  244. package/dist/commands/watch.js +398 -0
  245. package/dist/commands/watch.js.map +1 -0
  246. package/dist/commands/webhooks.d.ts +3 -0
  247. package/dist/commands/webhooks.d.ts.map +1 -0
  248. package/dist/commands/webhooks.js +23 -0
  249. package/dist/commands/webhooks.js.map +1 -0
  250. package/dist/commands/whoami.d.ts +3 -0
  251. package/dist/commands/whoami.d.ts.map +1 -0
  252. package/dist/commands/whoami.js +84 -0
  253. package/dist/commands/whoami.js.map +1 -0
  254. package/dist/commands/workspaces.d.ts +3 -0
  255. package/dist/commands/workspaces.d.ts.map +1 -0
  256. package/dist/commands/workspaces.js +87 -0
  257. package/dist/commands/workspaces.js.map +1 -0
  258. package/dist/config.d.ts +28 -0
  259. package/dist/config.d.ts.map +1 -0
  260. package/dist/config.js +129 -0
  261. package/dist/config.js.map +1 -0
  262. package/dist/errors.d.ts +22 -0
  263. package/dist/errors.d.ts.map +1 -0
  264. package/dist/errors.js +62 -0
  265. package/dist/errors.js.map +1 -0
  266. package/dist/framework-detector.d.ts +22 -0
  267. package/dist/framework-detector.d.ts.map +1 -0
  268. package/dist/framework-detector.js +373 -0
  269. package/dist/framework-detector.js.map +1 -0
  270. package/dist/pty/raw-mode.d.ts +7 -0
  271. package/dist/pty/raw-mode.d.ts.map +1 -0
  272. package/dist/pty/raw-mode.js +22 -0
  273. package/dist/pty/raw-mode.js.map +1 -0
  274. package/dist/pty/ws-pty-client.d.ts +12 -0
  275. package/dist/pty/ws-pty-client.d.ts.map +1 -0
  276. package/dist/pty/ws-pty-client.js +69 -0
  277. package/dist/pty/ws-pty-client.js.map +1 -0
  278. package/dist/types.d.ts +326 -0
  279. package/dist/types.d.ts.map +1 -0
  280. package/dist/types.js +16 -0
  281. package/dist/types.js.map +1 -0
  282. package/dist/ui/progress.d.ts +10 -0
  283. package/dist/ui/progress.d.ts.map +1 -0
  284. package/dist/ui/progress.js +36 -0
  285. package/dist/ui/progress.js.map +1 -0
  286. package/dist/ui/spinner.d.ts +4 -0
  287. package/dist/ui/spinner.d.ts.map +1 -0
  288. package/dist/ui/spinner.js +7 -0
  289. package/dist/ui/spinner.js.map +1 -0
  290. package/dist/ui/table.d.ts +8 -0
  291. package/dist/ui/table.d.ts.map +1 -0
  292. package/dist/ui/table.js +46 -0
  293. package/dist/ui/table.js.map +1 -0
  294. package/package.json +53 -0
@@ -0,0 +1,468 @@
1
+ /**
2
+ * miosa agent — first-class CUA (Computer Use Agent) session management.
3
+ *
4
+ * Routes map to: /api/v1/computers/:computer_id/cua/sessions[/:session_id/...]
5
+ *
6
+ * Subcommands:
7
+ * start POST /computers/:id/cua/sessions
8
+ * ls GET /computers/:id/cua/sessions (all computers when no --computer)
9
+ * get GET /computers/:id/cua/sessions/:session_id
10
+ * task POST /computers/:id/cua/sessions/:session_id/task
11
+ * pause POST /computers/:id/cua/sessions/:session_id/pause
12
+ * resume POST /computers/:id/cua/sessions/:session_id/resume
13
+ * stop DELETE /computers/:id/cua/sessions/:session_id
14
+ * history GET /computers/:id/cua/sessions/:session_id/events
15
+ */
16
+ import chalk from "chalk";
17
+ import { MiosaClient } from "../client.js";
18
+ import { loadConfig } from "../config.js";
19
+ import { UserError } from "../errors.js";
20
+ import { renderTable } from "../ui/table.js";
21
+ import { spin } from "../ui/spinner.js";
22
+ import { handleError } from "./util.js";
23
+ // ---------------------------------------------------------------------------
24
+ // Helpers
25
+ // ---------------------------------------------------------------------------
26
+ function apiV1(path) {
27
+ return `/api/v1${path}`;
28
+ }
29
+ function enc(value) {
30
+ return encodeURIComponent(value);
31
+ }
32
+ /** Extract a list from the standard {data: [...]} envelope or bare array. */
33
+ function listOf(payload, extraKeys = []) {
34
+ if (Array.isArray(payload))
35
+ return payload;
36
+ if (isRecord(payload)) {
37
+ if (Array.isArray(payload["data"]))
38
+ return payload["data"];
39
+ for (const key of extraKeys) {
40
+ if (Array.isArray(payload[key]))
41
+ return payload[key];
42
+ }
43
+ }
44
+ return [];
45
+ }
46
+ /** Extract a single object from {data: {...}} envelope or the payload itself. */
47
+ function dataOf(payload) {
48
+ if (isRecord(payload) && isRecord(payload["data"])) {
49
+ return payload["data"];
50
+ }
51
+ return payload;
52
+ }
53
+ function isRecord(value) {
54
+ return value !== null && typeof value === "object" && !Array.isArray(value);
55
+ }
56
+ /**
57
+ * Resolve a computer by name or ID.
58
+ * Calls GET /api/v1/computers and filters the list.
59
+ */
60
+ async function resolveComputer(c, nameOrId) {
61
+ const payload = await c.apiGet(apiV1("/computers"));
62
+ const items = listOf(payload, ["computers"]);
63
+ const match = items.find((item) => item.id === nameOrId || item.name === nameOrId);
64
+ if (!match) {
65
+ throw new UserError(`Computer not found: ${nameOrId}`, "Run `miosa computers list` to see available computers.");
66
+ }
67
+ return match;
68
+ }
69
+ /** Relative time string, e.g. "3 minutes ago" */
70
+ function timeAgo(iso) {
71
+ if (!iso)
72
+ return chalk.dim("—");
73
+ const ms = Date.now() - new Date(iso).getTime();
74
+ if (ms < 0)
75
+ return "just now";
76
+ if (ms < 60_000)
77
+ return `${Math.floor(ms / 1_000)}s ago`;
78
+ if (ms < 3_600_000)
79
+ return `${Math.floor(ms / 60_000)} minutes ago`;
80
+ if (ms < 86_400_000)
81
+ return `${Math.floor(ms / 3_600_000)} hours ago`;
82
+ return `${Math.floor(ms / 86_400_000)} days ago`;
83
+ }
84
+ /** "3m 42s" from two ISO timestamps */
85
+ function duration(start, end) {
86
+ if (!start)
87
+ return chalk.dim("—");
88
+ const endMs = end ? new Date(end).getTime() : Date.now();
89
+ const ms = endMs - new Date(start).getTime();
90
+ if (ms < 0)
91
+ return chalk.dim("—");
92
+ const totalSec = Math.floor(ms / 1_000);
93
+ const mins = Math.floor(totalSec / 60);
94
+ const secs = totalSec % 60;
95
+ return mins > 0 ? `${mins}m ${secs}s` : `${secs}s`;
96
+ }
97
+ /** Truncate a string to max characters, appending "…" if cut. */
98
+ function truncate(s, max) {
99
+ return s.length <= max ? s : s.slice(0, max - 1) + "…";
100
+ }
101
+ function colorStatus(status) {
102
+ switch (status.toLowerCase()) {
103
+ case "running":
104
+ return chalk.green(status);
105
+ case "paused":
106
+ return chalk.yellow(status);
107
+ case "completed":
108
+ case "done":
109
+ return chalk.dim(status);
110
+ case "failed":
111
+ case "cancelled":
112
+ return chalk.red(status);
113
+ default:
114
+ return chalk.dim(status);
115
+ }
116
+ }
117
+ function colorEventType(type) {
118
+ switch (type.toLowerCase()) {
119
+ case "thought":
120
+ return chalk.magenta(type.padEnd(8));
121
+ case "exec":
122
+ return chalk.blue(type.padEnd(8));
123
+ case "click":
124
+ return chalk.cyan(type.padEnd(8));
125
+ case "type":
126
+ return chalk.cyan(type.padEnd(8));
127
+ case "done":
128
+ return chalk.green(type.padEnd(8));
129
+ case "error":
130
+ return chalk.red(type.padEnd(8));
131
+ default:
132
+ return chalk.dim(type.padEnd(8));
133
+ }
134
+ }
135
+ function formatEventTimestamp(event, baseTime) {
136
+ const raw = event.timestamp ?? event.inserted_at;
137
+ if (!raw)
138
+ return chalk.dim("--:--:--");
139
+ const d = new Date(raw);
140
+ // Offset from session start for context
141
+ const diffMs = d.getTime() - baseTime.getTime();
142
+ const absTime = d.toLocaleTimeString("en-US", { hour12: false });
143
+ if (diffMs < 0)
144
+ return chalk.dim(absTime);
145
+ return chalk.dim(absTime);
146
+ }
147
+ // ---------------------------------------------------------------------------
148
+ // Subcommand builders
149
+ // ---------------------------------------------------------------------------
150
+ function buildStart(agent) {
151
+ agent
152
+ .command("start")
153
+ .description("Start an agent session on a computer")
154
+ .requiredOption("--computer <name-or-id>", "Computer name or ID")
155
+ .requiredOption("--goal <goal>", "Goal for the agent to accomplish")
156
+ .option("--model <model-id>", "Model ID override")
157
+ .option("--max-turns <n>", "Maximum agent turns (default: server default)")
158
+ .option("--json", "Output as JSON")
159
+ .action(async (opts) => {
160
+ try {
161
+ const config = loadConfig();
162
+ const c = new MiosaClient(config);
163
+ const spinner = spin(`Resolving computer ${opts.computer}…`);
164
+ const computer = await resolveComputer(c, opts.computer);
165
+ spinner.succeed(`Starting agent on ${computer.name}`);
166
+ const body = { goal: opts.goal };
167
+ if (opts.model)
168
+ body["model_id"] = opts.model;
169
+ if (opts.maxTurns != null)
170
+ body["max_turns"] = parseInt(opts.maxTurns, 10);
171
+ const payload = await c.apiPost(apiV1(`/computers/${enc(computer.id)}/cua/sessions`), body);
172
+ const session = dataOf(payload);
173
+ if (opts.json) {
174
+ console.log(JSON.stringify(session, null, 2));
175
+ return;
176
+ }
177
+ console.log(chalk.green(`Agent session started: ${session.id}`));
178
+ console.log(chalk.dim(`Watch: miosa agent get ${session.id} --computer ${computer.name}`));
179
+ }
180
+ catch (err) {
181
+ handleError(err);
182
+ }
183
+ });
184
+ }
185
+ function buildLs(agent) {
186
+ agent
187
+ .command("ls")
188
+ .description("List active agent sessions (all computers or one with --computer)")
189
+ .option("--computer <name-or-id>", "Filter to a specific computer")
190
+ .option("--json", "Output as JSON")
191
+ .action(async (opts) => {
192
+ try {
193
+ const config = loadConfig();
194
+ const c = new MiosaClient(config);
195
+ let sessions;
196
+ if (opts.computer) {
197
+ const spinner = spin(`Fetching sessions for ${opts.computer}…`);
198
+ const computer = await resolveComputer(c, opts.computer);
199
+ spinner.text = `Loading sessions on ${computer.name}…`;
200
+ const payload = await c.apiGet(apiV1(`/computers/${enc(computer.id)}/cua/sessions`));
201
+ sessions = listOf(payload, ["sessions"]).map((s) => ({
202
+ ...s,
203
+ computer_name: computer.name,
204
+ }));
205
+ spinner.stop();
206
+ }
207
+ else {
208
+ const spinner = spin("Fetching all computers…");
209
+ const computersPayload = await c.apiGet(apiV1("/computers"));
210
+ const computers = listOf(computersPayload, [
211
+ "computers",
212
+ ]);
213
+ spinner.text = `Fetching sessions across ${computers.length} computer(s)…`;
214
+ const settled = await Promise.allSettled(computers.map(async (computer) => {
215
+ const payload = await c.apiGet(apiV1(`/computers/${enc(computer.id)}/cua/sessions`));
216
+ return listOf(payload, ["sessions"]).map((s) => ({
217
+ ...s,
218
+ computer_name: computer.name,
219
+ }));
220
+ }));
221
+ sessions = settled.flatMap((result) => result.status === "fulfilled" ? result.value : []);
222
+ spinner.stop();
223
+ }
224
+ if (opts.json) {
225
+ console.log(JSON.stringify(sessions, null, 2));
226
+ return;
227
+ }
228
+ if (sessions.length === 0) {
229
+ console.log(chalk.dim("No agent sessions found."));
230
+ return;
231
+ }
232
+ renderTable(sessions, [
233
+ {
234
+ header: "ID",
235
+ key: (s) => s.id,
236
+ width: 22,
237
+ },
238
+ {
239
+ header: "COMPUTER",
240
+ key: (s) => s.computer_name ?? s.computer_id,
241
+ width: 16,
242
+ },
243
+ {
244
+ header: "STATUS",
245
+ key: (s) => s.status,
246
+ width: 10,
247
+ color: (val) => colorStatus(val.trim()),
248
+ },
249
+ {
250
+ header: "STARTED",
251
+ key: (s) => timeAgo(s.started_at ?? s.inserted_at),
252
+ width: 18,
253
+ },
254
+ {
255
+ header: "GOAL",
256
+ key: (s) => truncate(s.goal, 42),
257
+ },
258
+ ]);
259
+ }
260
+ catch (err) {
261
+ handleError(err);
262
+ }
263
+ });
264
+ }
265
+ function buildGet(agent) {
266
+ agent
267
+ .command("get <session-id>")
268
+ .description("Get details of an agent session")
269
+ .requiredOption("--computer <name-or-id>", "Computer name or ID")
270
+ .option("--json", "Output as JSON")
271
+ .action(async (sessionId, opts) => {
272
+ try {
273
+ const config = loadConfig();
274
+ const c = new MiosaClient(config);
275
+ const computer = await resolveComputer(c, opts.computer);
276
+ const payload = await c.apiGet(apiV1(`/computers/${enc(computer.id)}/cua/sessions/${enc(sessionId)}`));
277
+ const session = dataOf(payload);
278
+ if (opts.json) {
279
+ console.log(JSON.stringify(session, null, 2));
280
+ return;
281
+ }
282
+ const rows = [
283
+ ["Session", session.id],
284
+ ["Computer", session.computer_name ?? computer.name],
285
+ ["Status", colorStatus(session.status)],
286
+ ["Started", session.started_at ?? chalk.dim("—")],
287
+ ["Goal", session.goal],
288
+ ];
289
+ if (session.actions_total != null) {
290
+ const parts = [`${session.actions_total} total`];
291
+ if (session.actions_exec != null)
292
+ parts.push(`${session.actions_exec} exec`);
293
+ if (session.actions_click != null)
294
+ parts.push(`${session.actions_click} click`);
295
+ if (session.actions_type != null)
296
+ parts.push(`${session.actions_type} type`);
297
+ rows.push(["Actions", parts.join(", ")]);
298
+ }
299
+ if (session.screenshots != null) {
300
+ rows.push(["Screenshots", String(session.screenshots)]);
301
+ }
302
+ rows.push([
303
+ "Duration",
304
+ duration(session.started_at, session.finished_at),
305
+ ]);
306
+ if (session.model_id) {
307
+ rows.push(["Model", session.model_id]);
308
+ }
309
+ for (const [label, value] of rows) {
310
+ console.log(`${chalk.bold(label.padEnd(14))} ${value}`);
311
+ }
312
+ }
313
+ catch (err) {
314
+ handleError(err);
315
+ }
316
+ });
317
+ }
318
+ function buildTask(agent) {
319
+ agent
320
+ .command("task <session-id> <instruction>")
321
+ .description("Send a new task to a running agent session")
322
+ .requiredOption("--computer <name-or-id>", "Computer name or ID")
323
+ .option("--json", "Output as JSON")
324
+ .action(async (sessionId, instruction, opts) => {
325
+ try {
326
+ const config = loadConfig();
327
+ const c = new MiosaClient(config);
328
+ const computer = await resolveComputer(c, opts.computer);
329
+ const payload = await c.apiPost(apiV1(`/computers/${enc(computer.id)}/cua/sessions/${enc(sessionId)}/task`), { instruction });
330
+ if (opts.json) {
331
+ console.log(JSON.stringify(payload, null, 2));
332
+ return;
333
+ }
334
+ console.log(chalk.green(`Task submitted to ${sessionId}`));
335
+ }
336
+ catch (err) {
337
+ handleError(err);
338
+ }
339
+ });
340
+ }
341
+ function buildPause(agent) {
342
+ agent
343
+ .command("pause <session-id>")
344
+ .description("Pause a running agent session")
345
+ .requiredOption("--computer <name-or-id>", "Computer name or ID")
346
+ .option("--json", "Output as JSON")
347
+ .action(async (sessionId, opts) => {
348
+ try {
349
+ const config = loadConfig();
350
+ const c = new MiosaClient(config);
351
+ const computer = await resolveComputer(c, opts.computer);
352
+ const payload = await c.apiPost(apiV1(`/computers/${enc(computer.id)}/cua/sessions/${enc(sessionId)}/pause`), {});
353
+ if (opts.json) {
354
+ console.log(JSON.stringify(payload, null, 2));
355
+ return;
356
+ }
357
+ console.log(chalk.yellow(`Session ${sessionId} paused.`));
358
+ }
359
+ catch (err) {
360
+ handleError(err);
361
+ }
362
+ });
363
+ }
364
+ function buildResume(agent) {
365
+ agent
366
+ .command("resume <session-id>")
367
+ .description("Resume a paused agent session")
368
+ .requiredOption("--computer <name-or-id>", "Computer name or ID")
369
+ .option("--json", "Output as JSON")
370
+ .action(async (sessionId, opts) => {
371
+ try {
372
+ const config = loadConfig();
373
+ const c = new MiosaClient(config);
374
+ const computer = await resolveComputer(c, opts.computer);
375
+ const payload = await c.apiPost(apiV1(`/computers/${enc(computer.id)}/cua/sessions/${enc(sessionId)}/resume`), {});
376
+ if (opts.json) {
377
+ console.log(JSON.stringify(payload, null, 2));
378
+ return;
379
+ }
380
+ console.log(chalk.green(`Session ${sessionId} resumed.`));
381
+ }
382
+ catch (err) {
383
+ handleError(err);
384
+ }
385
+ });
386
+ }
387
+ function buildStop(agent) {
388
+ agent
389
+ .command("stop <session-id>")
390
+ .description("Stop (cancel) an agent session")
391
+ .requiredOption("--computer <name-or-id>", "Computer name or ID")
392
+ .option("--json", "Output as JSON")
393
+ .action(async (sessionId, opts) => {
394
+ try {
395
+ const config = loadConfig();
396
+ const c = new MiosaClient(config);
397
+ const computer = await resolveComputer(c, opts.computer);
398
+ const payload = await c.apiDelete(apiV1(`/computers/${enc(computer.id)}/cua/sessions/${enc(sessionId)}`));
399
+ if (opts.json) {
400
+ console.log(JSON.stringify(payload ?? { stopped: true }, null, 2));
401
+ return;
402
+ }
403
+ console.log(chalk.green("Agent session stopped."));
404
+ }
405
+ catch (err) {
406
+ handleError(err);
407
+ }
408
+ });
409
+ }
410
+ function buildHistory(agent) {
411
+ agent
412
+ .command("history <session-id>")
413
+ .description("View the event history of an agent session")
414
+ .requiredOption("--computer <name-or-id>", "Computer name or ID")
415
+ .option("--limit <n>", "Maximum number of events to show")
416
+ .option("--json", "Output as JSON")
417
+ .action(async (sessionId, opts) => {
418
+ try {
419
+ const config = loadConfig();
420
+ const c = new MiosaClient(config);
421
+ const computer = await resolveComputer(c, opts.computer);
422
+ const qs = opts.limit ? `?limit=${enc(opts.limit)}` : "";
423
+ const payload = await c.apiGet(apiV1(`/computers/${enc(computer.id)}/cua/sessions/${enc(sessionId)}/events${qs}`));
424
+ const events = listOf(payload, ["events"]);
425
+ if (opts.json) {
426
+ console.log(JSON.stringify(events, null, 2));
427
+ return;
428
+ }
429
+ if (events.length === 0) {
430
+ console.log(chalk.dim("No events recorded yet."));
431
+ return;
432
+ }
433
+ // Determine base time for relative display from first event
434
+ const firstTimestamp = events[0]?.timestamp ?? events[0]?.inserted_at;
435
+ const baseTime = firstTimestamp
436
+ ? new Date(firstTimestamp)
437
+ : new Date();
438
+ for (const event of events) {
439
+ const ts = formatEventTimestamp(event, baseTime);
440
+ const typePart = colorEventType(event.type);
441
+ const contentPart = event.content
442
+ ? truncate(event.content, 100)
443
+ : chalk.dim("—");
444
+ console.log(`${ts} [${typePart}] ${contentPart}`);
445
+ }
446
+ }
447
+ catch (err) {
448
+ handleError(err);
449
+ }
450
+ });
451
+ }
452
+ // ---------------------------------------------------------------------------
453
+ // Registration
454
+ // ---------------------------------------------------------------------------
455
+ export function register(program) {
456
+ const agent = program
457
+ .command("agent")
458
+ .description("Manage AI agent (CUA) sessions on Computers — start, monitor, and control agent runs");
459
+ buildStart(agent);
460
+ buildLs(agent);
461
+ buildGet(agent);
462
+ buildTask(agent);
463
+ buildPause(agent);
464
+ buildResume(agent);
465
+ buildStop(agent);
466
+ buildHistory(agent);
467
+ }
468
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=alerts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alerts.d.ts","sourceRoot":"","sources":["../../src/commands/alerts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6C/C"}
@@ -0,0 +1,41 @@
1
+ import { addDataOption, deleteAndPrint, enc, getAndPrint, postAndPrint, requireAction, runAction, } from "./enterprise-util.js";
2
+ const alertKinds = ["rules", "channels", "fires"];
3
+ export function register(program) {
4
+ const alerts = program.command("alerts").description("Manage alert rules, channels, and fires");
5
+ alerts
6
+ .command("list <kind>")
7
+ .description("List alert rules, channels, or fires")
8
+ .option("--json", "Output as JSON")
9
+ .action((kind, opts) => runAction(async () => {
10
+ requireAction(kind, alertKinds);
11
+ await getAndPrint(`/opencomputers/alerts/${enc(kind)}`, opts);
12
+ }));
13
+ addDataOption(alerts.command("create <kind>").description("Create an alert rule or channel"))
14
+ .option("--json", "Output as JSON")
15
+ .action((kind, opts) => runAction(async () => {
16
+ requireAction(kind, ["rules", "channels"]);
17
+ await postAndPrint(`/opencomputers/alerts/${enc(kind)}`, opts, {});
18
+ }));
19
+ alerts
20
+ .command("delete <kind> <id>")
21
+ .description("Delete an alert rule or channel")
22
+ .option("--json", "Output as JSON")
23
+ .action((kind, id, opts) => runAction(async () => {
24
+ requireAction(kind, ["rules", "channels"]);
25
+ await deleteAndPrint(`/opencomputers/alerts/${enc(kind)}/${enc(id)}`, opts);
26
+ }));
27
+ addDataOption(alerts.command("action <kind> <id> <action>").description("Run alert action: fire-test, verify, ack"))
28
+ .option("--json", "Output as JSON")
29
+ .action((kind, id, action, opts) => runAction(async () => {
30
+ if (kind === "rules")
31
+ requireAction(action, ["fire-test"]);
32
+ else if (kind === "channels")
33
+ requireAction(action, ["verify"]);
34
+ else if (kind === "fires")
35
+ requireAction(action, ["ack"]);
36
+ else
37
+ requireAction(kind, alertKinds);
38
+ await postAndPrint(`/opencomputers/alerts/${enc(kind)}/${enc(id)}/${enc(action)}`, opts);
39
+ }));
40
+ }
41
+ //# sourceMappingURL=alerts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alerts.js","sourceRoot":"","sources":["../../src/commands/alerts.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,cAAc,EACd,GAAG,EACH,WAAW,EACX,YAAY,EACZ,aAAa,EACb,SAAS,GAGV,MAAM,sBAAsB,CAAC;AAE9B,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAU,CAAC;AAE3D,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,yCAAyC,CAAC,CAAC;IAEhG,MAAM;SACH,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,CAAC,IAAY,EAAE,IAAiB,EAAE,EAAE,CAC1C,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,WAAW,CAAC,yBAAyB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC,CACH,CAAC;IAEJ,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;SAC1F,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,CAAC,IAAY,EAAE,IAAiB,EAAE,EAAE,CAC1C,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,aAAa,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QAC3C,MAAM,YAAY,CAAC,yBAAyB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CACH,CAAC;IAEJ,MAAM;SACH,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAU,EAAE,IAAiB,EAAE,EAAE,CACtD,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,aAAa,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QAC3C,MAAM,cAAc,CAAC,yBAAyB,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC,CAAC,CACH,CAAC;IAEJ,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,WAAW,CAAC,0CAA0C,CAAC,CAAC;SACjH,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAU,EAAE,MAAc,EAAE,IAAiB,EAAE,EAAE,CACtE,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,IAAI,IAAI,KAAK,OAAO;YAAE,aAAa,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;aACtD,IAAI,IAAI,KAAK,UAAU;YAAE,aAAa,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC3D,IAAI,IAAI,KAAK,OAAO;YAAE,aAAa,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;;YACrD,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrC,MAAM,YAAY,CAAC,yBAAyB,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3F,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=api-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../src/commands/api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyCzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuH/C"}