@liquidmetal-ai/raindrop 0.9.1 → 0.9.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 (159) hide show
  1. package/README.md +111 -85
  2. package/bundle/{chunk-ZHYJWVIA.js → chunk-33VVNTZ7.js} +2 -2
  3. package/bundle/{chunk-SP4Q3T7T.js → chunk-3EXF5SKZ.js} +1 -1
  4. package/bundle/{chunk-JXNZYHAI.js → chunk-3TJC2HRW.js} +89 -105
  5. package/bundle/{chunk-HBDFBL3W.js → chunk-44MKXST7.js} +1 -1
  6. package/bundle/{chunk-GDYEPR67.js → chunk-4RZFURCF.js} +1 -1
  7. package/bundle/{chunk-67CBWZ7Y.js → chunk-4UNXUMLE.js} +3 -3
  8. package/bundle/chunk-4VJ2X7ZI.js +48 -0
  9. package/bundle/{chunk-IMQTVYRB.js → chunk-4WGY3ATR.js} +1 -1
  10. package/bundle/{chunk-ORPX7FPP.js → chunk-5TPOE7P2.js} +1 -5
  11. package/bundle/chunk-7JFKALLH.js +133 -0
  12. package/bundle/chunk-7O6U3ZAR.js +75 -0
  13. package/bundle/chunk-AWUA3C2V.js +114 -0
  14. package/bundle/{chunk-QKHN66ZN.js → chunk-BEN3KZQU.js} +1 -1
  15. package/bundle/{chunk-JDMAG4KE.js → chunk-BPZWIRQS.js} +2 -2
  16. package/bundle/chunk-C7G6I3MQ.js +292 -0
  17. package/bundle/chunk-D23L4WLL.js +502 -0
  18. package/bundle/chunk-E2TCXKAT.js +48 -0
  19. package/bundle/{chunk-FTG32FZ4.js → chunk-E7K6Y6GO.js} +1 -1
  20. package/bundle/chunk-EBK2SJTZ.js +805 -0
  21. package/bundle/chunk-FTH4A227.js +46 -0
  22. package/bundle/chunk-HBWEGYBW.js +4486 -0
  23. package/bundle/chunk-HFEVZZHW.js +46 -0
  24. package/bundle/chunk-I5M6WZPS.js +384 -0
  25. package/bundle/chunk-J44ZDCXF.js +44 -0
  26. package/bundle/{chunk-D5TOYPUE.js → chunk-J6XV5EH5.js} +1 -1
  27. package/bundle/chunk-KE7CMLHP.js +292 -0
  28. package/bundle/{chunk-ZLRYUJ5P.js → chunk-KHYRZQSK.js} +4 -4
  29. package/bundle/chunk-KOYRAC7N.js +74 -0
  30. package/bundle/chunk-KQ3F5KG7.js +231 -0
  31. package/bundle/chunk-KSXGB4ZG.js +4539 -0
  32. package/bundle/{chunk-7ERI6IFL.js → chunk-LP3LXBGR.js} +1 -1
  33. package/bundle/chunk-MH3BACIP.js +238722 -0
  34. package/bundle/chunk-MM7BYDBJ.js +238725 -0
  35. package/bundle/chunk-MQUFNQI5.js +231 -0
  36. package/bundle/{chunk-4RVUC2XX.js → chunk-N3LTFUBJ.js} +1 -1
  37. package/bundle/chunk-NWYJJVCF.js +22452 -0
  38. package/bundle/chunk-OAMLVMOY.js +133 -0
  39. package/bundle/chunk-PBVMMANP.js +4480 -0
  40. package/bundle/chunk-PT6CYFBD.js +74 -0
  41. package/bundle/chunk-QAG6TIB7.js +12148 -0
  42. package/bundle/chunk-RSLQIAJB.js +12148 -0
  43. package/bundle/chunk-SAU2NEDC.js +147 -0
  44. package/bundle/chunk-SZ6TMVT4.js +22452 -0
  45. package/bundle/chunk-T3MAVQWW.js +292 -0
  46. package/bundle/chunk-TCGZNSBY.js +4539 -0
  47. package/bundle/chunk-TRIIBQDR.js +4480 -0
  48. package/bundle/chunk-UUTXTOE3.js +231 -0
  49. package/bundle/chunk-VMKGSIXK.js +75 -0
  50. package/bundle/chunk-XDCRA7Y2.js +805 -0
  51. package/bundle/chunk-XEMONOX2.js +384 -0
  52. package/bundle/chunk-YAPQ2CKV.js +115 -0
  53. package/bundle/chunk-YDDBYUDC.js +502 -0
  54. package/bundle/chunk-ZGLCW5YO.js +380 -0
  55. package/bundle/chunk-ZQ6BFQSX.js +44 -0
  56. package/bundle/chunk-ZZTNAQSE.js +147 -0
  57. package/bundle/commands/annotation/get.js +3 -3
  58. package/bundle/commands/annotation/list.js +3 -3
  59. package/bundle/commands/annotation/put.js +3 -3
  60. package/bundle/commands/auth/list.js +2 -2
  61. package/bundle/commands/auth/login.js +3 -3
  62. package/bundle/commands/auth/logout.js +2 -2
  63. package/bundle/commands/auth/select.js +3 -3
  64. package/bundle/commands/bucket/create-credential.js +2 -2
  65. package/bundle/commands/bucket/delete-credential.js +2 -2
  66. package/bundle/commands/bucket/get-credential.js +2 -2
  67. package/bundle/commands/bucket/list-credentials.js +2 -2
  68. package/bundle/commands/build/branch.js +9 -9
  69. package/bundle/commands/build/checkout.js +6 -5
  70. package/bundle/commands/build/clone.js +5 -5
  71. package/bundle/commands/build/delete.js +6 -5
  72. package/bundle/commands/build/deploy.js +9 -9
  73. package/bundle/commands/build/env/get.js +2 -2
  74. package/bundle/commands/build/env/set.js +2 -2
  75. package/bundle/commands/build/find.js +7 -3
  76. package/bundle/commands/build/generate.js +3 -3
  77. package/bundle/commands/build/init-workspace.js +102 -0
  78. package/bundle/commands/build/init.js +3 -3
  79. package/bundle/commands/build/list.js +5 -4
  80. package/bundle/commands/build/sandbox.js +7 -7
  81. package/bundle/commands/build/start.js +2 -2
  82. package/bundle/commands/build/status.js +8 -4
  83. package/bundle/commands/build/stop.js +2 -2
  84. package/bundle/commands/build/tools/check.js +2 -2
  85. package/bundle/commands/build/tools/fmt.js +2 -2
  86. package/bundle/commands/build/unsandbox.js +7 -7
  87. package/bundle/commands/build/upload.js +5 -5
  88. package/bundle/commands/build/validate.js +4 -4
  89. package/bundle/commands/build/workos/delete.js +4 -4
  90. package/bundle/commands/build/workos/env/attach.js +3 -3
  91. package/bundle/commands/build/workos/env/create.js +3 -3
  92. package/bundle/commands/build/workos/env/delete.js +3 -3
  93. package/bundle/commands/build/workos/env/detach.js +3 -3
  94. package/bundle/commands/build/workos/env/get.js +3 -3
  95. package/bundle/commands/build/workos/env/list.js +3 -3
  96. package/bundle/commands/build/workos/env/set.js +3 -3
  97. package/bundle/commands/build/workos/invite.js +3 -3
  98. package/bundle/commands/build/workos/setup.js +3 -3
  99. package/bundle/commands/build/workos/status.js +3 -3
  100. package/bundle/commands/dns/create.js +2 -2
  101. package/bundle/commands/dns/delete.js +4 -4
  102. package/bundle/commands/dns/get.js +4 -4
  103. package/bundle/commands/dns/list.js +3 -3
  104. package/bundle/commands/dns/records/create.js +2 -2
  105. package/bundle/commands/dns/records/delete.js +3 -3
  106. package/bundle/commands/dns/records/get.js +2 -2
  107. package/bundle/commands/dns/records/list.js +2 -2
  108. package/bundle/commands/dns/records/update.js +2 -2
  109. package/bundle/commands/logs/query.js +3 -3
  110. package/bundle/commands/logs/tail.js +3 -3
  111. package/bundle/commands/mcp/install-claude.js +2 -2
  112. package/bundle/commands/mcp/install-gemini.js +2 -2
  113. package/bundle/commands/mcp/install-goose.js +2 -2
  114. package/bundle/commands/mcp/status.js +2 -2
  115. package/bundle/commands/object/delete.js +2 -2
  116. package/bundle/commands/object/get.js +2 -2
  117. package/bundle/commands/object/list.js +2 -2
  118. package/bundle/commands/object/put.js +2 -2
  119. package/bundle/commands/query/chunk-search.js +3 -3
  120. package/bundle/commands/query/document.js +3 -3
  121. package/bundle/commands/query/events.js +2 -2
  122. package/bundle/commands/query/reindex.js +2 -2
  123. package/bundle/commands/query/search.js +3 -3
  124. package/bundle/commands/tail.js +2 -2
  125. package/bundle/index.js +1 -1
  126. package/dist/commands/build/find.d.ts.map +1 -1
  127. package/dist/commands/build/find.js +3 -0
  128. package/dist/commands/build/init-workspace.d.ts +16 -0
  129. package/dist/commands/build/init-workspace.d.ts.map +1 -0
  130. package/dist/commands/build/init-workspace.js +95 -0
  131. package/dist/commands/build/list.d.ts.map +1 -1
  132. package/dist/commands/build/list.js +3 -0
  133. package/dist/commands/build/status.d.ts.map +1 -1
  134. package/dist/commands/build/status.js +3 -0
  135. package/dist/killswitch-utils.d.ts +30 -0
  136. package/dist/killswitch-utils.d.ts.map +1 -0
  137. package/dist/killswitch-utils.js +83 -0
  138. package/oclif.manifest.json +2114 -2007
  139. package/package.json +3 -3
  140. package/templates/claude-code/debug-raindrop-app.md +12 -39
  141. package/templates/claude-code/update-raindrop-app.md +5 -6
  142. package/templates/db/node_modules/.bin/prisma +2 -2
  143. package/templates/db/node_modules/.bin/prisma-kysely +2 -2
  144. package/templates/db/node_modules/.bin/tsc +2 -2
  145. package/templates/db/node_modules/.bin/tsserver +2 -2
  146. package/templates/db/node_modules/.bin/zx +2 -2
  147. package/templates/gemini-code/debug-raindrop-app.toml +12 -39
  148. package/templates/gemini-code/update-raindrop-app.toml +5 -6
  149. package/templates/goose/debug-raindrop-app.yaml +12 -39
  150. package/templates/goose/update-raindrop-app.yaml +5 -6
  151. package/templates/workspace/.gitignore.hbs +40 -0
  152. package/templates/workspace/package.json.hbs +22 -0
  153. package/dist/commands/killswitch.d.ts +0 -20
  154. package/dist/commands/killswitch.d.ts.map +0 -1
  155. package/dist/commands/killswitch.js +0 -58
  156. package/dist/tsconfig.tsbuildinfo +0 -1
  157. package/dist/utils/mixpanel.d.ts +0 -10
  158. package/dist/utils/mixpanel.d.ts.map +0 -1
  159. package/dist/utils/mixpanel.js +0 -43
@@ -0,0 +1,46 @@
1
+ import {
2
+ init_cjs_shims
3
+ } from "./chunk-VEVVJAL6.js";
4
+
5
+ // src/utils/module-resolution.ts
6
+ init_cjs_shims();
7
+ async function resolveBucketsWithApplication(options) {
8
+ const { catalogService, userId, organizationId, applicationName, applicationVersionId, bucketNames } = options;
9
+ const queryParams = {
10
+ userId,
11
+ applicationName,
12
+ organizationId,
13
+ moduleType: "smartbucket",
14
+ ...applicationVersionId && { applicationVersionId }
15
+ };
16
+ const modulesResp = await catalogService.queryModules(queryParams);
17
+ if (!modulesResp.modules || modulesResp.modules.length === 0) {
18
+ throw new Error(`No bucket modules found for application '${applicationName}'`);
19
+ }
20
+ const bucketLocations = [];
21
+ for (const bucketName of bucketNames) {
22
+ const bucketModules = modulesResp.modules.filter((module) => module.name === bucketName);
23
+ if (bucketModules.length === 0) {
24
+ throw new Error(`Bucket '${bucketName}' not found in application '${applicationName}'`);
25
+ }
26
+ const bucketModule = applicationVersionId ? bucketModules.find((m) => m.applicationVersionId === applicationVersionId) || // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ bucketModules.sort((a, b) => b.applicationVersionId.localeCompare(a.applicationVersionId))[0] : bucketModules.sort((a, b) => b.applicationVersionId.localeCompare(a.applicationVersionId))[0];
28
+ if (!bucketModule) {
29
+ throw new Error(`Bucket '${bucketName}' not found in application '${applicationName}'`);
30
+ }
31
+ bucketLocations.push({
32
+ bucketLocation: {
33
+ case: "bucket",
34
+ value: {
35
+ name: bucketName,
36
+ version: bucketModule.applicationVersionId
37
+ }
38
+ }
39
+ });
40
+ }
41
+ return bucketLocations;
42
+ }
43
+
44
+ export {
45
+ resolveBucketsWithApplication
46
+ };
@@ -0,0 +1,384 @@
1
+ import {
2
+ checkAndDisplayKillswitchStatus
3
+ } from "./chunk-PT6CYFBD.js";
4
+ import {
5
+ source_default
6
+ } from "./chunk-YDDBYUDC.js";
7
+ import {
8
+ BaseCommand
9
+ } from "./chunk-TCGZNSBY.js";
10
+ import {
11
+ ApplicationsResponseSchema,
12
+ EPOCH_TS,
13
+ UnitState,
14
+ __toESM,
15
+ init_cjs_shims,
16
+ require_lib,
17
+ timestampDate,
18
+ toJsonString
19
+ } from "./chunk-3TJC2HRW.js";
20
+
21
+ // src/commands/build/list.ts
22
+ init_cjs_shims();
23
+ var import_core = __toESM(require_lib(), 1);
24
+ var statusString = {
25
+ [UnitState.UNSPECIFIED]: "<unknown>",
26
+ [UnitState.PENDING]: "pending...",
27
+ [UnitState.STARTING]: "starting...",
28
+ [UnitState.RUNNING]: "running",
29
+ [UnitState.STOPPING]: "stopping...",
30
+ [UnitState.STOPPED]: "stopped",
31
+ [UnitState.DELETING]: "deleting...",
32
+ [UnitState.DELETED]: "deleted"
33
+ };
34
+ var List = class extends BaseCommand {
35
+ static args = {};
36
+ static description = "list Raindrop catalog resources";
37
+ static examples = [
38
+ `<%= config.bin %> <%= command.id %>
39
+ List applications in compact view (default).
40
+
41
+ <%= config.bin %> <%= command.id %> -o tree
42
+ Show applications in tree view with version hierarchy.
43
+
44
+ <%= config.bin %> <%= command.id %> -o log
45
+ Show git-log style view with branch visualization.
46
+
47
+ <%= config.bin %> <%= command.id %> --app demo-fts --limit 5
48
+ Show only demo-fts application, limited to 5 versions.
49
+
50
+ <%= config.bin %> <%= command.id %> --active
51
+ Show only running/active versions.
52
+ `
53
+ ];
54
+ static flags = {
55
+ ...BaseCommand.HIDDEN_FLAGS,
56
+ all: import_core.Flags.boolean({ char: "a", description: "show deleted resources", default: false }),
57
+ output: import_core.Flags.string({
58
+ char: "o",
59
+ description: "output format",
60
+ default: "compact",
61
+ options: ["text", "table", "json", "log", "compact", "tree"]
62
+ }),
63
+ app: import_core.Flags.string({
64
+ description: "filter by application name",
65
+ required: false
66
+ }),
67
+ limit: import_core.Flags.integer({
68
+ char: "n",
69
+ description: "limit number of versions shown per application",
70
+ required: false
71
+ }),
72
+ active: import_core.Flags.boolean({
73
+ description: "show only running/active versions",
74
+ default: false
75
+ }),
76
+ impersonate: import_core.Flags.string({
77
+ char: "i",
78
+ description: "impersonate organization",
79
+ required: false,
80
+ hidden: true
81
+ }),
82
+ manifest: import_core.Flags.string({
83
+ char: "m",
84
+ description: "project manifest",
85
+ required: false,
86
+ default: "raindrop.manifest",
87
+ hidden: true
88
+ })
89
+ };
90
+ // Build a version tree from applications
91
+ buildVersionTree(applications) {
92
+ const nodesMap = /* @__PURE__ */ new Map();
93
+ const rootNodes = [];
94
+ applications.forEach((app) => {
95
+ const node = {
96
+ versionId: app.versionId,
97
+ previousVersionId: app.previousVersionId || null,
98
+ application: app,
99
+ children: [],
100
+ branch: app.branch
101
+ };
102
+ nodesMap.set(app.versionId, node);
103
+ });
104
+ for (const node of nodesMap.values()) {
105
+ if (node.previousVersionId && nodesMap.has(node.previousVersionId)) {
106
+ nodesMap.get(node.previousVersionId).children.push(node);
107
+ } else {
108
+ rootNodes.push(node);
109
+ }
110
+ }
111
+ return { rootNodes, nodesMap };
112
+ }
113
+ // Render the version tree in git-log style with branch lines
114
+ renderGitLogStyle(applications) {
115
+ const groups = this.groupApplicationsByName(applications);
116
+ const result = [];
117
+ for (const [_appName, appVersions] of groups) {
118
+ result.push("");
119
+ const firstApp = appVersions[0];
120
+ if (!firstApp) continue;
121
+ const formattedAppName = this.formatAppName(firstApp);
122
+ result.push(source_default.bold.underline(`=== ${formattedAppName} ===`));
123
+ result.push("");
124
+ const { rootNodes } = this.buildVersionTree(appVersions);
125
+ const columnMap = /* @__PURE__ */ new Map();
126
+ let maxColumn = 0;
127
+ const assignColumns = (node, parentColumn) => {
128
+ if (columnMap.has(node.versionId)) return;
129
+ if (parentColumn !== void 0) {
130
+ columnMap.set(node.versionId, parentColumn);
131
+ } else {
132
+ columnMap.set(node.versionId, maxColumn++);
133
+ }
134
+ node.children.forEach((child) => {
135
+ assignColumns(child, columnMap.get(node.versionId));
136
+ });
137
+ };
138
+ rootNodes.forEach((root) => assignColumns(root));
139
+ const flattenedNodes = [];
140
+ const flatten = (node) => {
141
+ flattenedNodes.push(node);
142
+ node.children.forEach((child) => flatten(child));
143
+ };
144
+ rootNodes.forEach((root) => flatten(root));
145
+ flattenedNodes.sort((a, b) => {
146
+ const aTime = timestampDate(a.application.createdAt || EPOCH_TS).getTime() || 0;
147
+ const bTime = timestampDate(b.application.createdAt || EPOCH_TS).getTime() || 0;
148
+ return bTime - aTime;
149
+ });
150
+ const processed = /* @__PURE__ */ new Set();
151
+ const linesInUse = /* @__PURE__ */ new Set();
152
+ for (const node of flattenedNodes) {
153
+ if (processed.has(node.versionId)) continue;
154
+ processed.add(node.versionId);
155
+ const app = node.application;
156
+ const column = columnMap.get(node.versionId) || 0;
157
+ linesInUse.add(column);
158
+ const date = timestampDate(app.createdAt || EPOCH_TS);
159
+ const timestamp = date.toLocaleString("en-US", {
160
+ weekday: "short",
161
+ month: "short",
162
+ day: "numeric",
163
+ year: "numeric",
164
+ hour: "numeric",
165
+ minute: "numeric",
166
+ second: "numeric",
167
+ hour12: false,
168
+ timeZoneName: "short"
169
+ });
170
+ let graphLine = "";
171
+ for (let i = 0; i <= maxColumn; i++) {
172
+ if (i === column) {
173
+ graphLine += "*";
174
+ } else if (linesInUse.has(i)) {
175
+ graphLine += "|";
176
+ } else {
177
+ graphLine += " ";
178
+ }
179
+ }
180
+ let branchInfo = "";
181
+ if (app.branch) {
182
+ branchInfo = ` (${app.branch})`;
183
+ }
184
+ let parentInfo = "";
185
+ if (app.previousVersionId) {
186
+ parentInfo = ` [parent: ${app.previousVersionId}]`;
187
+ }
188
+ const versionLine = `${graphLine} ${source_default.yellow("version")} ${source_default.yellow(app.versionId)}${source_default.cyan(branchInfo)}${source_default.dim(parentInfo)}`;
189
+ result.push(versionLine);
190
+ graphLine = graphLine.replace("*", "|");
191
+ let statusColor;
192
+ if (app.state === UnitState.RUNNING) {
193
+ statusColor = source_default.green;
194
+ } else if (app.state === UnitState.DELETING) {
195
+ statusColor = source_default.yellow;
196
+ } else if (app.state === UnitState.DELETED) {
197
+ statusColor = source_default.red;
198
+ } else {
199
+ statusColor = source_default.gray;
200
+ }
201
+ result.push(`${graphLine} ${source_default.bold("Status:")} ${statusColor(statusString[app.state])}`);
202
+ result.push(`${graphLine} ${source_default.bold("Date:")} ${source_default.dim(timestamp)}`);
203
+ result.push(`${graphLine} `);
204
+ result.push(`${graphLine} ${source_default.bold(this.formatAppName(app))}`);
205
+ result.push(`${graphLine}`);
206
+ }
207
+ }
208
+ return result.join("\n");
209
+ }
210
+ // Helper function to format app name with privileged indicator
211
+ formatAppName(app) {
212
+ const privilegedIcon = app.privileged ? source_default.magenta("\u{1F512} ") : "";
213
+ return `${privilegedIcon}${app.name}`;
214
+ }
215
+ // Group applications by name
216
+ groupApplicationsByName(applications) {
217
+ const groups = /* @__PURE__ */ new Map();
218
+ for (const app of applications) {
219
+ const name = app.name;
220
+ if (!groups.has(name)) {
221
+ groups.set(name, []);
222
+ }
223
+ groups.get(name).push(app);
224
+ }
225
+ for (const apps of groups.values()) {
226
+ apps.sort((a, b) => {
227
+ const aTime = timestampDate(a.createdAt || EPOCH_TS).getTime();
228
+ const bTime = timestampDate(b.createdAt || EPOCH_TS).getTime();
229
+ return bTime - aTime;
230
+ });
231
+ }
232
+ return groups;
233
+ }
234
+ // Render compact view
235
+ renderCompactView(applications) {
236
+ const groups = this.groupApplicationsByName(applications);
237
+ const result = [];
238
+ const sortedGroups = Array.from(groups.entries()).sort((a, b) => {
239
+ const aLatest = a[1][0];
240
+ const bLatest = b[1][0];
241
+ if (!aLatest || !bLatest) return 0;
242
+ const aTime = timestampDate(aLatest.createdAt || EPOCH_TS).getTime();
243
+ const bTime = timestampDate(bLatest.createdAt || EPOCH_TS).getTime();
244
+ return bTime - aTime;
245
+ });
246
+ for (const [_appName, versions] of sortedGroups) {
247
+ const activeVersions2 = versions.filter((v) => v.state === UnitState.RUNNING);
248
+ const deletedVersions = versions.filter((v) => v.state === UnitState.DELETED || v.state === UnitState.DELETING);
249
+ const firstVersion = versions[0];
250
+ if (!firstVersion) continue;
251
+ const formattedAppName = this.formatAppName(firstVersion);
252
+ result.push(`
253
+ ${source_default.bold(formattedAppName)} ${source_default.dim(`(${versions.length} version${versions.length !== 1 ? "s" : ""})`)}`);
254
+ let shown = 0;
255
+ for (const version of activeVersions2) {
256
+ if (this.flags.limit && shown >= this.flags.limit) break;
257
+ const date = timestampDate(version.createdAt || EPOCH_TS).toLocaleDateString();
258
+ const branch = version.branch ? source_default.cyan(` (${version.branch})`) : "";
259
+ const status = source_default.green(statusString[version.state]);
260
+ result.push(` \u2514\u2500 ${source_default.yellow(version.versionId)}...${branch} - ${status} - ${source_default.dim(date)}`);
261
+ shown++;
262
+ }
263
+ if (!this.flags.active && deletedVersions.length > 0) {
264
+ const remaining = this.flags.limit ? Math.max(0, this.flags.limit - shown) : deletedVersions.length;
265
+ const toShow = Math.min(remaining, deletedVersions.length);
266
+ for (let i = 0; i < toShow && i < 3; i++) {
267
+ const version = deletedVersions[i];
268
+ if (!version) continue;
269
+ const date = timestampDate(version.createdAt || EPOCH_TS).toLocaleDateString();
270
+ const status = version.state === UnitState.DELETING ? source_default.yellow(statusString[version.state]) : source_default.red(statusString[version.state]);
271
+ result.push(` \u2514\u2500 ${source_default.gray(version.versionId)}... - ${status} - ${source_default.dim(date)}`);
272
+ }
273
+ if (deletedVersions.length > toShow) {
274
+ result.push(source_default.dim(` ... ${deletedVersions.length - toShow} more deleted versions`));
275
+ }
276
+ }
277
+ }
278
+ const totalApps = sortedGroups.length;
279
+ const totalVersions = applications.length;
280
+ const activeVersions = applications.filter((app) => app.state === UnitState.RUNNING).length;
281
+ result.push("");
282
+ result.push(source_default.dim("\u2500".repeat(50)));
283
+ result.push(source_default.dim(`Total: ${totalApps} applications, ${totalVersions} versions (${activeVersions} active)`));
284
+ return result.join("\n");
285
+ }
286
+ // Render tree view for a specific application
287
+ renderTreeView(applications) {
288
+ const groups = this.groupApplicationsByName(applications);
289
+ const result = [];
290
+ for (const [_appName, versions] of groups) {
291
+ const firstVersion = versions[0];
292
+ if (!firstVersion) continue;
293
+ const formattedAppName = this.formatAppName(firstVersion);
294
+ result.push(`
295
+ ${source_default.bold.underline(`=== ${formattedAppName} ===`)}`);
296
+ const { rootNodes } = this.buildVersionTree(versions);
297
+ const renderNode = (node, prefix = "", isLast = true) => {
298
+ const app = node.application;
299
+ const date = timestampDate(app.createdAt || EPOCH_TS).toLocaleDateString();
300
+ const branch = app.branch ? source_default.cyan(` (${app.branch})`) : "";
301
+ let status;
302
+ if (app.state === UnitState.RUNNING) {
303
+ status = source_default.green(statusString[app.state]);
304
+ } else if (app.state === UnitState.DELETING) {
305
+ status = source_default.yellow(statusString[app.state]);
306
+ } else if (app.state === UnitState.DELETED) {
307
+ status = source_default.red(statusString[app.state]);
308
+ } else {
309
+ status = source_default.gray(statusString[app.state]);
310
+ }
311
+ const current = app.state === UnitState.RUNNING && app.branch === "main" ? source_default.bold.green(" \u2190 current") : "";
312
+ const connector = isLast ? "\u2514\u2500" : "\u251C\u2500";
313
+ const shortId = source_default.yellow(app.versionId);
314
+ result.push(`${prefix}${connector} ${shortId}...${branch} - ${status} - ${source_default.dim(date)}${current}`);
315
+ const childPrefix = prefix + (isLast ? " " : "\u2502 ");
316
+ node.children.forEach((child, index) => {
317
+ renderNode(child, childPrefix, index === node.children.length - 1);
318
+ });
319
+ };
320
+ rootNodes.forEach((root, index) => {
321
+ renderNode(root, "", index === rootNodes.length - 1);
322
+ });
323
+ }
324
+ return result.join("\n");
325
+ }
326
+ async listApplications() {
327
+ const { client: catalogService, organizationId: defaultOrganizationId, userId } = await this.catalogService();
328
+ const organizationId = this.flags.impersonate ?? defaultOrganizationId;
329
+ if (this.flags.output === "log" || this.flags.output === "table") {
330
+ this.log(source_default.dim(`Listing applications for organization ${organizationId}`));
331
+ }
332
+ const resp = await catalogService.applications({
333
+ userId,
334
+ organizationId,
335
+ showDeleted: this.flags.all
336
+ });
337
+ let applications = resp.applications;
338
+ if (this.flags.app) {
339
+ applications = applications.filter((app) => app.name === this.flags.app);
340
+ }
341
+ if (this.flags.active) {
342
+ applications = applications.filter((app) => app.state === UnitState.RUNNING);
343
+ }
344
+ if (this.flags.output === "log") {
345
+ this.log(this.renderGitLogStyle(applications));
346
+ } else if (this.flags.output === "compact") {
347
+ this.log(this.renderCompactView(applications));
348
+ } else if (this.flags.output === "tree") {
349
+ this.log(this.renderTreeView(applications));
350
+ } else if (this.flags.output === "table") {
351
+ console.table(
352
+ applications.reduce(
353
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
354
+ (acc, a) => {
355
+ const dateStr = a.createdAt ? timestampDate(a.createdAt).toISOString() : "";
356
+ acc[dateStr] = {
357
+ ...a,
358
+ status: statusString[a.state],
359
+ locked: a.lock ? "locked" : "",
360
+ privileged: a.privileged ? "system" : "user"
361
+ };
362
+ return acc;
363
+ },
364
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
365
+ {}
366
+ ),
367
+ ["organizationId", "name", "versionId", "branch", "status", "locked", "privileged", ...this.flags.all ? ["deletedAt"] : []]
368
+ );
369
+ } else if (this.flags.output === "json") {
370
+ console.log(toJsonString(ApplicationsResponseSchema, resp, { prettySpaces: 2 }));
371
+ } else {
372
+ this.log(this.renderCompactView(applications));
373
+ }
374
+ }
375
+ async run() {
376
+ await checkAndDisplayKillswitchStatus(this);
377
+ await this.listApplications();
378
+ }
379
+ };
380
+
381
+ export {
382
+ statusString,
383
+ List
384
+ };
@@ -0,0 +1,44 @@
1
+ import {
2
+ init_cjs_shims
3
+ } from "./chunk-3TJC2HRW.js";
4
+
5
+ // ../drizzle/dist/mrn.js
6
+ init_cjs_shims();
7
+ function parseMRN(mrn) {
8
+ const parts = mrn.split(":");
9
+ if (parts.length !== 6) {
10
+ throw new Error(`Invalid MRN format: ${mrn}`);
11
+ }
12
+ const [type, applicationName, versionId, module, itemOrKey, revision] = parts;
13
+ if (!type || !applicationName || !versionId) {
14
+ throw new Error(`MRN must contain type, applicationName, and versionId: ${mrn}`);
15
+ }
16
+ if (!["annotation", "label"].includes(type)) {
17
+ throw new Error(`Invalid MRN type: ${type}`);
18
+ }
19
+ const mrnObject = {
20
+ type,
21
+ applicationName,
22
+ versionId
23
+ };
24
+ if (module) {
25
+ mrnObject.module = module;
26
+ }
27
+ if (itemOrKey) {
28
+ if (itemOrKey.includes("^")) {
29
+ const [item, keyValue] = itemOrKey.split("^");
30
+ mrnObject.item = item;
31
+ mrnObject.key = keyValue || "";
32
+ } else {
33
+ mrnObject.key = itemOrKey;
34
+ }
35
+ }
36
+ if (revision) {
37
+ mrnObject.revision = revision;
38
+ }
39
+ return mrnObject;
40
+ }
41
+
42
+ export {
43
+ parseMRN
44
+ };
@@ -7,7 +7,7 @@ import {
7
7
  require_ansi_styles,
8
8
  require_string_width,
9
9
  require_strip_ansi
10
- } from "./chunk-JXNZYHAI.js";
10
+ } from "./chunk-3TJC2HRW.js";
11
11
 
12
12
  // ../../node_modules/.pnpm/yoctocolors-cjs@2.1.2/node_modules/yoctocolors-cjs/index.js
13
13
  var require_yoctocolors_cjs = __commonJS({