@lizard-build/cli 0.1.0 → 0.3.30

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 (184) hide show
  1. package/.github/workflows/release.yml +90 -0
  2. package/AGENTS.md +113 -0
  3. package/README.md +41 -0
  4. package/dist/commands/add.js +318 -45
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/config.d.ts +2 -0
  7. package/dist/commands/config.js +68 -0
  8. package/dist/commands/config.js.map +1 -0
  9. package/dist/commands/docs.d.ts +2 -0
  10. package/dist/commands/docs.js +13 -0
  11. package/dist/commands/docs.js.map +1 -0
  12. package/dist/commands/domain.d.ts +9 -0
  13. package/dist/commands/domain.js +195 -0
  14. package/dist/commands/domain.js.map +1 -0
  15. package/dist/commands/git.js +175 -36
  16. package/dist/commands/git.js.map +1 -1
  17. package/dist/commands/init.d.ts +24 -0
  18. package/dist/commands/init.js +128 -86
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/link.d.ts +7 -0
  21. package/dist/commands/link.js +104 -33
  22. package/dist/commands/link.js.map +1 -1
  23. package/dist/commands/login.js +4 -3
  24. package/dist/commands/login.js.map +1 -1
  25. package/dist/commands/logs.js +223 -30
  26. package/dist/commands/logs.js.map +1 -1
  27. package/dist/commands/open.js +3 -2
  28. package/dist/commands/open.js.map +1 -1
  29. package/dist/commands/port.d.ts +7 -0
  30. package/dist/commands/port.js +49 -0
  31. package/dist/commands/port.js.map +1 -0
  32. package/dist/commands/projects.js +36 -6
  33. package/dist/commands/projects.js.map +1 -1
  34. package/dist/commands/ps.js +32 -39
  35. package/dist/commands/ps.js.map +1 -1
  36. package/dist/commands/redeploy.js +48 -8
  37. package/dist/commands/redeploy.js.map +1 -1
  38. package/dist/commands/regions.js +2 -5
  39. package/dist/commands/regions.js.map +1 -1
  40. package/dist/commands/restart.js +84 -10
  41. package/dist/commands/restart.js.map +1 -1
  42. package/dist/commands/run.d.ts +9 -0
  43. package/dist/commands/run.js +61 -22
  44. package/dist/commands/run.js.map +1 -1
  45. package/dist/commands/scale.d.ts +10 -0
  46. package/dist/commands/scale.js +166 -0
  47. package/dist/commands/scale.js.map +1 -0
  48. package/dist/commands/secrets.js +200 -89
  49. package/dist/commands/secrets.js.map +1 -1
  50. package/dist/commands/service-set.d.ts +49 -0
  51. package/dist/commands/service-set.js +552 -0
  52. package/dist/commands/service-set.js.map +1 -0
  53. package/dist/commands/service-show.d.ts +11 -0
  54. package/dist/commands/service-show.js +44 -0
  55. package/dist/commands/service-show.js.map +1 -0
  56. package/dist/commands/service.d.ts +8 -0
  57. package/dist/commands/service.js +262 -0
  58. package/dist/commands/service.js.map +1 -0
  59. package/dist/commands/skill.d.ts +2 -0
  60. package/dist/commands/skill.js +146 -0
  61. package/dist/commands/skill.js.map +1 -0
  62. package/dist/commands/ssh.d.ts +2 -0
  63. package/dist/commands/ssh.js +161 -0
  64. package/dist/commands/ssh.js.map +1 -0
  65. package/dist/commands/status.d.ts +7 -0
  66. package/dist/commands/status.js +49 -38
  67. package/dist/commands/status.js.map +1 -1
  68. package/dist/commands/unlink.d.ts +5 -0
  69. package/dist/commands/unlink.js +18 -0
  70. package/dist/commands/unlink.js.map +1 -0
  71. package/dist/commands/up.d.ts +9 -0
  72. package/dist/commands/up.js +417 -0
  73. package/dist/commands/up.js.map +1 -0
  74. package/dist/commands/upgrade.d.ts +2 -0
  75. package/dist/commands/upgrade.js +79 -0
  76. package/dist/commands/upgrade.js.map +1 -0
  77. package/dist/commands/whoami.js +26 -6
  78. package/dist/commands/whoami.js.map +1 -1
  79. package/dist/commands/workspace.d.ts +8 -0
  80. package/dist/commands/workspace.js +36 -0
  81. package/dist/commands/workspace.js.map +1 -0
  82. package/dist/index.js +209 -82
  83. package/dist/index.js.map +1 -1
  84. package/dist/lib/api.d.ts +17 -2
  85. package/dist/lib/api.js +85 -51
  86. package/dist/lib/api.js.map +1 -1
  87. package/dist/lib/auth.d.ts +3 -11
  88. package/dist/lib/auth.js +16 -36
  89. package/dist/lib/auth.js.map +1 -1
  90. package/dist/lib/config.d.ts +36 -15
  91. package/dist/lib/config.js +71 -58
  92. package/dist/lib/config.js.map +1 -1
  93. package/dist/lib/format.d.ts +1 -0
  94. package/dist/lib/format.js +17 -4
  95. package/dist/lib/format.js.map +1 -1
  96. package/dist/lib/name.d.ts +11 -0
  97. package/dist/lib/name.js +26 -0
  98. package/dist/lib/name.js.map +1 -0
  99. package/dist/lib/picker.d.ts +32 -0
  100. package/dist/lib/picker.js +91 -0
  101. package/dist/lib/picker.js.map +1 -0
  102. package/dist/lib/resolve.d.ts +85 -0
  103. package/dist/lib/resolve.js +203 -0
  104. package/dist/lib/resolve.js.map +1 -0
  105. package/dist/lib/updater.d.ts +16 -0
  106. package/dist/lib/updater.js +102 -0
  107. package/dist/lib/updater.js.map +1 -0
  108. package/lizard-wrapper.sh +2 -0
  109. package/package.json +11 -3
  110. package/skill-data/core/SKILL.md +239 -0
  111. package/src/commands/add.ts +388 -56
  112. package/src/commands/config.ts +80 -0
  113. package/src/commands/docs.ts +15 -0
  114. package/src/commands/domain.ts +248 -0
  115. package/src/commands/git.ts +201 -40
  116. package/src/commands/init.ts +149 -100
  117. package/src/commands/link.ts +127 -35
  118. package/src/commands/login.ts +4 -3
  119. package/src/commands/logs.ts +283 -27
  120. package/src/commands/open.ts +3 -2
  121. package/src/commands/port.ts +57 -0
  122. package/src/commands/projects.ts +43 -6
  123. package/src/commands/ps.ts +39 -60
  124. package/src/commands/redeploy.ts +51 -10
  125. package/src/commands/regions.ts +2 -6
  126. package/src/commands/restart.ts +84 -10
  127. package/src/commands/run.ts +68 -24
  128. package/src/commands/scale.ts +216 -0
  129. package/src/commands/secrets.ts +277 -100
  130. package/src/commands/service-set.ts +669 -0
  131. package/src/commands/service-show.ts +52 -0
  132. package/src/commands/service.ts +298 -0
  133. package/src/commands/skill.ts +157 -0
  134. package/src/commands/ssh.ts +176 -0
  135. package/src/commands/status.ts +51 -46
  136. package/src/commands/unlink.ts +17 -0
  137. package/src/commands/up.ts +461 -0
  138. package/src/commands/upgrade.ts +87 -0
  139. package/src/commands/whoami.ts +34 -6
  140. package/src/commands/workspace.ts +44 -0
  141. package/src/index.ts +219 -85
  142. package/src/lib/api.ts +114 -51
  143. package/src/lib/auth.ts +22 -46
  144. package/src/lib/config.ts +100 -65
  145. package/src/lib/format.ts +18 -4
  146. package/src/lib/name.ts +27 -0
  147. package/src/lib/picker.ts +133 -0
  148. package/src/lib/resolve.ts +285 -0
  149. package/src/lib/updater.ts +106 -0
  150. package/test/cli.test.ts +491 -0
  151. package/test/fixtures/hello-app/Dockerfile +5 -0
  152. package/test/fixtures/hello-app/index.js +5 -0
  153. package/test/unit/api.test.ts +66 -0
  154. package/test/unit/config.test.ts +94 -0
  155. package/test/unit/init.test.ts +211 -0
  156. package/test/unit/json.test.ts +208 -0
  157. package/test/unit/picker.test.ts +161 -0
  158. package/test/unit/resolve.test.ts +124 -0
  159. package/test/unit/service-set.test.ts +355 -0
  160. package/vitest.config.ts +10 -0
  161. package/dist/commands/connect.d.ts +0 -2
  162. package/dist/commands/connect.js +0 -117
  163. package/dist/commands/connect.js.map +0 -1
  164. package/dist/commands/context.d.ts +0 -2
  165. package/dist/commands/context.js +0 -71
  166. package/dist/commands/context.js.map +0 -1
  167. package/dist/commands/deploy.d.ts +0 -2
  168. package/dist/commands/deploy.js +0 -120
  169. package/dist/commands/deploy.js.map +0 -1
  170. package/dist/commands/destroy.d.ts +0 -2
  171. package/dist/commands/destroy.js +0 -51
  172. package/dist/commands/destroy.js.map +0 -1
  173. package/dist/commands/update.d.ts +0 -2
  174. package/dist/commands/update.js +0 -41
  175. package/dist/commands/update.js.map +0 -1
  176. package/dist/commands/version.d.ts +0 -2
  177. package/dist/commands/version.js +0 -37
  178. package/dist/commands/version.js.map +0 -1
  179. package/src/commands/connect.ts +0 -145
  180. package/src/commands/context.ts +0 -93
  181. package/src/commands/deploy.ts +0 -153
  182. package/src/commands/destroy.ts +0 -51
  183. package/src/commands/update.ts +0 -44
  184. package/src/commands/version.ts +0 -37
@@ -1,24 +1,78 @@
1
1
  import chalk from "chalk";
2
- import { streamSSE, api } from "../lib/api.js";
3
- import { resolveProjectId } from "../lib/config.js";
4
- import { info, error } from "../lib/format.js";
2
+ import * as p from "@clack/prompts";
3
+ import { streamSSE, api, withScope, withQuery } from "../lib/api.js";
4
+ import { resolveProjectScope, resolveService, getActiveService } from "../lib/resolve.js";
5
+ import { info, error, isTTY, isJSONMode, printJSON, table, statusColor, timeAgo } from "../lib/format.js";
5
6
  export function registerLogs(program) {
6
7
  program
7
8
  .command("logs")
8
9
  .description("Stream runtime logs")
9
10
  .option("--build", "Show build logs instead of runtime")
10
- .option("--service <id>", "Only show logs for a specific service")
11
+ .option("-s, --service <id>", "Only show logs for a specific service")
12
+ .option("-p, --project <id>", "Project name, slug, or ID")
13
+ .option("--tail <n>", "Print last N log lines and exit (no follow)")
14
+ .option("--restarts [n]", "List last N restart events (default 20) and exit")
15
+ .option("--restart <id>", "Print log tail of a specific restart event (or 'latest')")
11
16
  .action(async (opts) => {
12
- const projectId = resolveProjectId(program.opts().project);
17
+ if (opts.restarts !== undefined && opts.restart !== undefined) {
18
+ error("Use --restarts (list) or --restart <id> (detail), not both");
19
+ process.exit(1);
20
+ }
21
+ const { projectId, scope } = await resolveProjectScope(opts.project);
22
+ if (opts.restarts !== undefined) {
23
+ await showRestartList(opts.service, projectId, parseRestartsN(opts.restarts));
24
+ return;
25
+ }
26
+ if (opts.restart !== undefined) {
27
+ await showRestartLogTail(opts.service, projectId, String(opts.restart));
28
+ return;
29
+ }
30
+ const tailN = opts.tail !== undefined ? parseTail(opts.tail) : undefined;
13
31
  if (opts.build) {
14
- // Show build logs for the latest build
15
- await showBuildLogs(opts.service, projectId);
32
+ await showBuildLogs(opts.service, projectId, scope, tailN);
16
33
  return;
17
34
  }
35
+ // Resolve -s flag (may be name, slug, or ID) once up front so every
36
+ // branch below talks to the API with a real service ID.
37
+ let serviceId;
18
38
  if (opts.service) {
39
+ const svc = await resolveService(projectId, opts.service);
40
+ serviceId = svc.id;
41
+ }
42
+ // --tail: fetch historical logs and exit
43
+ if (tailN !== undefined) {
44
+ const entries = await api.get(withScope(withQuery(`/api/projects/${projectId}/logs`, {
45
+ limit: tailN,
46
+ service: serviceId,
47
+ }), scope));
48
+ for (const e of entries)
49
+ printLogEntry(e);
50
+ return;
51
+ }
52
+ if (!serviceId && isTTY() && !isJSONMode()) {
53
+ // Offer to pick a specific service or stream all
54
+ const data = await api.get(withScope(`/api/projects/${projectId}/services`, scope));
55
+ const apps = data.apps || [];
56
+ if (apps.length > 1) {
57
+ const choices = [
58
+ { value: "all", label: "All services", hint: "stream combined logs" },
59
+ ...apps.map((a) => ({
60
+ value: a.id,
61
+ label: a.name || a.id,
62
+ hint: a.status,
63
+ })),
64
+ ];
65
+ const selected = await p.select({ message: "Show logs for", options: choices });
66
+ if (p.isCancel(selected))
67
+ process.exit(5);
68
+ if (selected !== "all")
69
+ serviceId = selected;
70
+ }
71
+ }
72
+ if (serviceId) {
19
73
  // Stream logs for a specific app
20
74
  info(chalk.dim("Streaming logs... (Ctrl+C to stop)\n"));
21
- await streamSSE(`/api/apps/${opts.service}/logs`, (event, data) => {
75
+ await streamSSE(`/api/apps/${serviceId}/logs`, (event, data) => {
22
76
  if (event === "error") {
23
77
  error(data);
24
78
  return false;
@@ -30,7 +84,7 @@ export function registerLogs(program) {
30
84
  }
31
85
  // Stream all project logs
32
86
  info(chalk.dim("Streaming project logs... (Ctrl+C to stop)\n"));
33
- await streamSSE(`/api/projects/${projectId}/logs/stream`, (event, data) => {
87
+ await streamSSE(withScope(`/api/projects/${projectId}/logs/stream`, scope), (event, data) => {
34
88
  if (event === "error") {
35
89
  error(data);
36
90
  return false;
@@ -40,47 +94,186 @@ export function registerLogs(program) {
40
94
  });
41
95
  });
42
96
  }
97
+ function parseTail(raw) {
98
+ const n = parseInt(raw, 10);
99
+ if (isNaN(n) || n < 1) {
100
+ error("--tail must be a positive integer");
101
+ process.exit(1);
102
+ }
103
+ if (n > 1000) {
104
+ info(chalk.yellow("--tail capped at 1000 (server limit)"));
105
+ return 1000;
106
+ }
107
+ return n;
108
+ }
109
+ function parseRestartsN(raw) {
110
+ if (raw === true || raw === "" || raw === undefined)
111
+ return 20;
112
+ const n = parseInt(String(raw), 10);
113
+ if (isNaN(n) || n < 1) {
114
+ error("--restarts must be a positive integer");
115
+ process.exit(1);
116
+ }
117
+ return n;
118
+ }
119
+ async function fetchFlatRestarts(appId) {
120
+ const builds = await api.get(`/api/apps/${appId}/deploy-events`);
121
+ const flat = [];
122
+ for (const b of builds) {
123
+ for (const e of b.events) {
124
+ flat.push({ ...e, buildId: b.buildId, commitSha: b.commitSha });
125
+ }
126
+ }
127
+ flat.sort((a, b) => b.crashedAt - a.crashedAt);
128
+ return flat;
129
+ }
130
+ function replicaPrefix(e) {
131
+ if (!e.replica)
132
+ return "";
133
+ return chalk.magenta(`[${e.replica}]`) + " ";
134
+ }
135
+ function printLogEntry(e) {
136
+ if (isJSONMode()) {
137
+ process.stdout.write(JSON.stringify(e) + "\n");
138
+ return;
139
+ }
140
+ const rep = replicaPrefix(e);
141
+ if (e.service && e.message) {
142
+ const prefix = chalk.cyan(`[${e.service}]`);
143
+ process.stdout.write(`${prefix} ${rep}${e.message}\n`);
144
+ }
145
+ else if (e.message) {
146
+ process.stdout.write(`${rep}${e.message}\n`);
147
+ }
148
+ }
43
149
  function printLogLine(data) {
150
+ let parsed;
44
151
  try {
45
- const parsed = JSON.parse(data);
46
- if (parsed.service && parsed.line) {
47
- const prefix = chalk.cyan(`[${parsed.service}]`);
48
- process.stdout.write(`${prefix} ${parsed.line}\n`);
49
- }
50
- else if (parsed.line) {
51
- process.stdout.write(parsed.line + "\n");
52
- }
53
- else if (parsed.message) {
54
- process.stdout.write(parsed.message + "\n");
152
+ parsed = JSON.parse(data);
153
+ }
154
+ catch {
155
+ parsed = { message: data };
156
+ }
157
+ if (typeof parsed === "string")
158
+ parsed = { message: parsed };
159
+ if (isJSONMode()) {
160
+ process.stdout.write(JSON.stringify(parsed) + "\n");
161
+ return;
162
+ }
163
+ const rep = replicaPrefix(parsed);
164
+ if (parsed.service && parsed.message) {
165
+ const prefix = chalk.cyan(`[${parsed.service}]`);
166
+ process.stdout.write(`${prefix} ${rep}${parsed.message}\n`);
167
+ }
168
+ else if (parsed.message) {
169
+ process.stdout.write(`${rep}${parsed.message}\n`);
170
+ }
171
+ else {
172
+ process.stdout.write(data + "\n");
173
+ }
174
+ }
175
+ async function showRestartList(serviceRef, projectId, n) {
176
+ const svc = await getActiveService(serviceRef, projectId);
177
+ const events = await fetchFlatRestarts(svc.id);
178
+ const slice = events.slice(0, n);
179
+ if (isJSONMode()) {
180
+ for (const e of slice) {
181
+ process.stdout.write(JSON.stringify(e) + "\n");
55
182
  }
56
- else if (typeof parsed === "string") {
57
- process.stdout.write(parsed + "\n");
183
+ return;
184
+ }
185
+ if (slice.length === 0) {
186
+ info(chalk.dim(`No restart events for ${svc.name}.`));
187
+ return;
188
+ }
189
+ table(["When", "Source", "Status", "Exit", "By", "ID"], slice.map((e) => [
190
+ timeAgo(e.crashedAt),
191
+ e.source,
192
+ statusColor(e.status),
193
+ (e.exitInfo ?? "").slice(0, 60),
194
+ e.triggeredBy ?? chalk.dim("—"),
195
+ chalk.dim(e.id),
196
+ ]));
197
+ if (events.length > slice.length) {
198
+ info(chalk.dim(`\n(${events.length - slice.length} more — re-run with --restarts ${events.length})`));
199
+ }
200
+ info(chalk.dim("\nInspect: lizard logs --restart <id> (or 'latest')"));
201
+ }
202
+ async function showRestartLogTail(serviceRef, projectId, ref) {
203
+ const svc = await getActiveService(serviceRef, projectId);
204
+ const events = await fetchFlatRestarts(svc.id);
205
+ let evt;
206
+ if (ref === "latest") {
207
+ evt = events[0];
208
+ if (!evt) {
209
+ error(`No restart events for ${svc.name}.`);
210
+ process.exit(1);
58
211
  }
59
- else {
60
- process.stdout.write(data + "\n");
212
+ }
213
+ else {
214
+ evt = events.find((e) => e.id === ref);
215
+ if (!evt) {
216
+ error(`Restart event "${ref}" not found for ${svc.name}.`);
217
+ process.exit(1);
61
218
  }
62
219
  }
63
- catch {
64
- process.stdout.write(data + "\n");
220
+ if (isJSONMode()) {
221
+ printJSON(evt);
222
+ return;
223
+ }
224
+ console.log(chalk.dim("Event: ") + evt.id);
225
+ console.log(chalk.dim("When: ") + timeAgo(evt.crashedAt));
226
+ console.log(chalk.dim("Source: ") + evt.source);
227
+ console.log(chalk.dim("Status: ") + statusColor(evt.status));
228
+ if (evt.exitInfo)
229
+ console.log(chalk.dim("Exit: ") + evt.exitInfo);
230
+ if (evt.triggeredBy)
231
+ console.log(chalk.dim("By: ") + evt.triggeredBy);
232
+ if (evt.buildId)
233
+ console.log(chalk.dim("Build: ") + evt.buildId);
234
+ console.log();
235
+ if (evt.logsTail) {
236
+ process.stdout.write(evt.logsTail);
237
+ if (!evt.logsTail.endsWith("\n"))
238
+ process.stdout.write("\n");
239
+ }
240
+ else {
241
+ info(chalk.dim(`<no log tail captured — source=${evt.source} (manual restarts don't capture logs)>`));
65
242
  }
66
243
  }
67
- async function showBuildLogs(serviceId, projectId) {
68
- let appId = serviceId;
244
+ async function showBuildLogs(serviceRef, projectId, scope, tailN) {
245
+ let appId;
246
+ if (serviceRef) {
247
+ const svc = await resolveService(projectId, serviceRef);
248
+ appId = svc.id;
249
+ }
69
250
  if (!appId) {
70
251
  // Get first app in project
71
- const data = await api.get(`/api/projects/${projectId}/services`);
252
+ const data = await api.get(withScope(`/api/projects/${projectId}/services`, scope));
72
253
  if (!data.apps?.length) {
73
- throw new Error("No apps in project");
254
+ throw new Error("No apps in project. Create one with `lizard up` or `lizard add`.");
74
255
  }
75
256
  appId = data.apps[0].id;
76
257
  }
77
258
  // Get latest build
78
259
  const app = await api.get(`/api/apps/${appId}`);
79
260
  if (!app.builds?.length) {
80
- throw new Error("No builds found");
261
+ throw new Error("No builds for this app yet. Trigger one with `lizard up` or `lizard redeploy`.");
81
262
  }
82
263
  const buildId = app.builds[0].id;
83
264
  info(chalk.dim(`Build ${buildId}\n`));
265
+ if (tailN !== undefined) {
266
+ const lines = [];
267
+ await streamSSE(`/api/builds/${buildId}/logs`, (event, data) => {
268
+ if (event === "done" || event === "error")
269
+ return false;
270
+ lines.push(data);
271
+ return true;
272
+ });
273
+ for (const line of lines.slice(-tailN))
274
+ printLogLine(line);
275
+ return;
276
+ }
84
277
  await streamSSE(`/api/builds/${buildId}/logs`, (event, data) => {
85
278
  if (event === "done" || event === "error") {
86
279
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,9 @@ export function registerOpen(program) {
6
6
  program
7
7
  .command("open")
8
8
  .description("Open project in browser")
9
- .action(async () => {
10
- const projectId = resolveProjectId(program.opts().project);
9
+ .option("-p, --project <id>", "Project name, slug, or ID")
10
+ .action(async (opts) => {
11
+ const projectId = await resolveProjectId(opts.project);
11
12
  const url = `${getBaseURL()}/projects/${projectId}`;
12
13
  await open(url);
13
14
  success("Opened in browser");
@@ -1 +1 @@
1
- {"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,GAAG,UAAU,EAAE,aAAa,SAAS,EAAE,CAAC;QACpD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,GAAG,UAAU,EAAE,aAAa,SAAS,EAAE,CAAC;QACpD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * `lizard port [number]`
4
+ * bare → show current container port
5
+ * <number> → update container port (takes effect on next deploy)
6
+ */
7
+ export declare function registerPort(program: Command): void;
@@ -0,0 +1,49 @@
1
+ import chalk from "chalk";
2
+ import { api, withScope } from "../lib/api.js";
3
+ import { getActiveServiceWithKind, resolveProjectScope } from "../lib/resolve.js";
4
+ import { success, info, isJSONMode, printJSON } from "../lib/format.js";
5
+ /**
6
+ * `lizard port [number]`
7
+ * bare → show current container port
8
+ * <number> → update container port (takes effect on next deploy)
9
+ */
10
+ export function registerPort(program) {
11
+ program
12
+ .command("port")
13
+ .argument("[port]", "Port number to set")
14
+ .description("Show or change the container port for a service")
15
+ .option("-s, --service <name>", "Service name or ID")
16
+ .option("-p, --project <id>", "Project name, slug, or ID")
17
+ .action(async (portArg, opts) => {
18
+ const { projectId, scope } = await resolveProjectScope(opts.project);
19
+ const service = await getActiveServiceWithKind(opts.service, projectId);
20
+ if (service.kind === "addon") {
21
+ throw new Error("Addons don't have a container port.");
22
+ }
23
+ if (portArg === undefined) {
24
+ const app = await api.get(`/api/apps/${service.id}`);
25
+ const port = app.containerPort ?? 3000;
26
+ if (isJSONMode()) {
27
+ printJSON({ port });
28
+ }
29
+ else {
30
+ info(`${chalk.bold(service.name)} container port: ${chalk.cyan(port)}`);
31
+ }
32
+ return;
33
+ }
34
+ const newPort = parseInt(portArg, 10);
35
+ if (isNaN(newPort) || newPort < 1 || newPort > 65535) {
36
+ throw new Error(`Invalid port: ${portArg}. Must be 1–65535.`);
37
+ }
38
+ // PATCH /api/apps/:id is 410-Gone server-side; writes go through
39
+ // POST /api/projects/:id/config:apply.
40
+ await api.post(withScope(`/api/projects/${projectId}/config:apply`, scope), { services: [{ id: service.id, name: service.name, containerPort: newPort }] });
41
+ if (isJSONMode()) {
42
+ printJSON({ ok: true, port: newPort });
43
+ }
44
+ else {
45
+ success(`${chalk.bold(service.name)} container port set to ${chalk.cyan(newPort)} — takes effect on next deploy`);
46
+ }
47
+ });
48
+ }
49
+ //# sourceMappingURL=port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/commands/port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAExE;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;SACxC,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;SACpD,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,IAAI,EAAE,EAAE;QAClD,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACxE,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAA6B,aAAa,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YACjF,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC;YACvC,IAAI,UAAU,EAAE,EAAE,CAAC;gBACjB,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,oBAAoB,CAAC,CAAC;QAChE,CAAC;QAED,iEAAiE;QACjE,uCAAuC;QACvC,MAAM,GAAG,CAAC,IAAI,CACZ,SAAS,CAAC,iBAAiB,SAAS,eAAe,EAAE,KAAK,CAAC,EAC3D,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE,CAC/E,CAAC;QAEF,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,OAAO,CACL,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gCAAgC,CACzG,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,5 +1,7 @@
1
- import { api } from "../lib/api.js";
2
- import { isJSONMode, printJSON, table } from "../lib/format.js";
1
+ import chalk from "chalk";
2
+ import { api, withQuery } from "../lib/api.js";
3
+ import { success, isJSONMode, printJSON, table } from "../lib/format.js";
4
+ import { pickWorkspace, resolveWorkspace } from "../lib/picker.js";
3
5
  export function registerProjects(program) {
4
6
  const proj = program
5
7
  .command("project")
@@ -7,8 +9,13 @@ export function registerProjects(program) {
7
9
  proj
8
10
  .command("list")
9
11
  .description("List all projects")
10
- .action(async () => {
11
- const projects = await api.get("/api/projects");
12
+ .option("-w, --workspace <ws>", "Filter by workspace id, slug, or name")
13
+ .action(async (opts) => {
14
+ let workspaceId;
15
+ if (opts.workspace) {
16
+ workspaceId = (await resolveWorkspace(opts.workspace)).id;
17
+ }
18
+ const projects = await api.get(withQuery("/api/projects", { workspaceId }));
12
19
  if (isJSONMode()) {
13
20
  printJSON(projects);
14
21
  return;
@@ -17,12 +24,35 @@ export function registerProjects(program) {
17
24
  console.log("No projects. Run `lizard init` to create one.");
18
25
  return;
19
26
  }
20
- table(["Name", "ID", "Role", "Members"], projects.map((p) => [
27
+ table(["Name", "Workspace", "Slug", "Role", "Members"], projects.map((p) => [
21
28
  p.name,
22
- p.id,
29
+ p.workspaceName || chalk.dim("—"),
30
+ p.slug,
23
31
  p.role || "owner",
24
32
  String(p.memberCount || 1),
25
33
  ]));
26
34
  });
35
+ proj
36
+ .command("create")
37
+ .argument("<name>", "Project name")
38
+ .description("Create a new project without linking it to this directory")
39
+ .option("-w, --workspace <ws>", "Workspace to create the project in")
40
+ .action(async (name, opts) => {
41
+ const workspace = await pickWorkspace({ flag: opts.workspace });
42
+ const project = await api.post("/api/projects", {
43
+ name,
44
+ workspaceId: workspace.id,
45
+ });
46
+ if (isJSONMode()) {
47
+ printJSON({
48
+ ...project,
49
+ workspaceId: project.workspaceId ?? workspace.id,
50
+ workspaceName: project.workspaceName ?? workspace.name,
51
+ });
52
+ }
53
+ else {
54
+ success(`Project ${chalk.bold(project.name)} created in ${chalk.bold(workspace.name)}`);
55
+ }
56
+ });
27
57
  }
28
58
  //# sourceMappingURL=projects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAWhE,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAErC,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAY,eAAe,CAAC,CAAC;QAE3D,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,KAAK,CACH,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EACjC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAClB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,IAAI,OAAO;YACjB,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;SAC3B,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAanE,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAErC,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,sBAAsB,EAAE,uCAAuC,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,WAA+B,CAAC;QACpC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,WAAW,GAAG,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B,SAAS,CAAC,eAAe,EAAE,EAAE,WAAW,EAAE,CAAC,CAC5C,CAAC;QAEF,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,KAAK,CACH,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAChD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAClB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YACjC,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI,IAAI,OAAO;YACjB,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;SAC3B,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;SAClC,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,sBAAsB,EAAE,oCAAoC,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAI,EAAE,EAAE;QACnC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAU,eAAe,EAAE;YACvD,IAAI;YACJ,WAAW,EAAE,SAAS,CAAC,EAAE;SAC1B,CAAC,CAAC;QAEH,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,SAAS,CAAC;gBACR,GAAG,OAAO;gBACV,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC,EAAE;gBAChD,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,SAAS,CAAC,IAAI;aACvD,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CACL,WAAW,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,52 +1,45 @@
1
1
  import chalk from "chalk";
2
- import { api } from "../lib/api.js";
3
- import { resolveProjectId } from "../lib/config.js";
4
- import { isJSONMode, printJSON, table, statusColor, } from "../lib/format.js";
2
+ import { api, withScope } from "../lib/api.js";
3
+ import { getProjectLink } from "../lib/config.js";
4
+ import { resolveProjectScope } from "../lib/resolve.js";
5
+ import { isJSONMode, printJSON, table, statusColor } from "../lib/format.js";
5
6
  export function registerPs(program) {
6
7
  program
7
8
  .command("ps")
8
9
  .description("List all services in the project")
9
- .action(async () => {
10
- const projectId = resolveProjectId(program.opts().project);
11
- const data = await api.get(`/api/projects/${projectId}/services`);
12
- const services = [];
13
- for (const app of data.apps || []) {
14
- services.push({
15
- id: app.id,
16
- name: app.name,
17
- type: "app",
18
- status: app.status,
19
- domain: app.domain,
20
- createdAt: app.createdAt,
21
- });
22
- }
23
- for (const addon of data.addons || []) {
24
- services.push({
25
- id: addon.id,
26
- name: addon.name || addon.addonType,
27
- type: "addon",
28
- addonType: addon.addonType,
29
- status: addon.status,
30
- hostname: addon.hostname,
31
- createdAt: addon.createdAt,
32
- });
33
- }
10
+ .option("-p, --project <id>", "Project name, slug, or ID")
11
+ .action(async (opts) => {
12
+ const { projectId, scope } = await resolveProjectScope(opts.project);
13
+ const data = await api.get(withScope(`/api/projects/${projectId}/services`, scope));
34
14
  if (isJSONMode()) {
35
- printJSON(services);
15
+ printJSON(data);
36
16
  return;
37
17
  }
38
- if (services.length === 0) {
39
- console.log("No services. Use `lizard add` or `lizard deploy`.");
18
+ const apps = data.apps || [];
19
+ const addons = data.addons || [];
20
+ if (apps.length === 0 && addons.length === 0) {
21
+ console.log("No services. Use `lizard add` or `lizard up`.");
40
22
  return;
41
23
  }
42
- table(["Name", "Type", "Status", "URL/Host"], services.map((s) => [
43
- s.name,
44
- s.addonType || s.type,
45
- statusColor(s.status),
46
- s.domain
47
- ? `https://${s.domain}`
48
- : s.hostname || chalk.dim(""),
49
- ]));
24
+ const linkedId = getProjectLink()?.serviceId;
25
+ if (apps.length > 0) {
26
+ table(["App", "Status", "URL", "Linked"], apps.map((a) => [
27
+ a.name || a.id,
28
+ statusColor(a.status),
29
+ a.domain ? chalk.cyan(`https://${a.domain}`) : chalk.dim("—"),
30
+ a.id === linkedId ? chalk.green("") : "",
31
+ ]));
32
+ }
33
+ if (addons.length > 0) {
34
+ if (apps.length > 0)
35
+ console.log();
36
+ table(["Addon", "Type", "Status", "Host"], addons.map((a) => [
37
+ a.name || a.type,
38
+ a.type,
39
+ statusColor(a.status),
40
+ a.hostname ? chalk.dim(a.hostname) : chalk.dim("—"),
41
+ ]));
42
+ }
50
43
  });
51
44
  }
52
45
  //# sourceMappingURL=ps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ps.js","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,UAAU,EACV,SAAS,EACT,KAAK,EACL,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAa1B,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CACxB,iBAAiB,SAAS,WAAW,CACtC,CAAC;QAEF,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,SAAS,EAAE,GAAG,CAAC,SAAS;aACzB,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS;gBACnC,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,KAAK,CACH,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,EACtC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAClB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI;YACrB,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;YACrB,CAAC,CAAC,MAAM;gBACN,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;gBACvB,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;SACjC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"ps.js","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CACxB,SAAS,CAAC,iBAAiB,SAAS,WAAW,EAAE,KAAK,CAAC,CACxD,CAAC;QAEF,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,cAAc,EAAE,EAAE,SAAS,CAAC;QAE7C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CACH,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,EAClC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC;gBACnB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE;gBACd,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC7D,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;aAC1C,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,EAAE,CAAC;YACnC,KAAK,CACH,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EACnC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC;gBACrB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI;gBAChB,CAAC,CAAC,IAAI;gBACN,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;aACpD,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}