@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.
- package/README.md +111 -85
- package/bundle/{chunk-ZHYJWVIA.js → chunk-33VVNTZ7.js} +2 -2
- package/bundle/{chunk-SP4Q3T7T.js → chunk-3EXF5SKZ.js} +1 -1
- package/bundle/{chunk-JXNZYHAI.js → chunk-3TJC2HRW.js} +89 -105
- package/bundle/{chunk-HBDFBL3W.js → chunk-44MKXST7.js} +1 -1
- package/bundle/{chunk-GDYEPR67.js → chunk-4RZFURCF.js} +1 -1
- package/bundle/{chunk-67CBWZ7Y.js → chunk-4UNXUMLE.js} +3 -3
- package/bundle/chunk-4VJ2X7ZI.js +48 -0
- package/bundle/{chunk-IMQTVYRB.js → chunk-4WGY3ATR.js} +1 -1
- package/bundle/{chunk-ORPX7FPP.js → chunk-5TPOE7P2.js} +1 -5
- package/bundle/chunk-7JFKALLH.js +133 -0
- package/bundle/chunk-7O6U3ZAR.js +75 -0
- package/bundle/chunk-AWUA3C2V.js +114 -0
- package/bundle/{chunk-QKHN66ZN.js → chunk-BEN3KZQU.js} +1 -1
- package/bundle/{chunk-JDMAG4KE.js → chunk-BPZWIRQS.js} +2 -2
- package/bundle/chunk-C7G6I3MQ.js +292 -0
- package/bundle/chunk-D23L4WLL.js +502 -0
- package/bundle/chunk-E2TCXKAT.js +48 -0
- package/bundle/{chunk-FTG32FZ4.js → chunk-E7K6Y6GO.js} +1 -1
- package/bundle/chunk-EBK2SJTZ.js +805 -0
- package/bundle/chunk-FTH4A227.js +46 -0
- package/bundle/chunk-HBWEGYBW.js +4486 -0
- package/bundle/chunk-HFEVZZHW.js +46 -0
- package/bundle/chunk-I5M6WZPS.js +384 -0
- package/bundle/chunk-J44ZDCXF.js +44 -0
- package/bundle/{chunk-D5TOYPUE.js → chunk-J6XV5EH5.js} +1 -1
- package/bundle/chunk-KE7CMLHP.js +292 -0
- package/bundle/{chunk-ZLRYUJ5P.js → chunk-KHYRZQSK.js} +4 -4
- package/bundle/chunk-KOYRAC7N.js +74 -0
- package/bundle/chunk-KQ3F5KG7.js +231 -0
- package/bundle/chunk-KSXGB4ZG.js +4539 -0
- package/bundle/{chunk-7ERI6IFL.js → chunk-LP3LXBGR.js} +1 -1
- package/bundle/chunk-MH3BACIP.js +238722 -0
- package/bundle/chunk-MM7BYDBJ.js +238725 -0
- package/bundle/chunk-MQUFNQI5.js +231 -0
- package/bundle/{chunk-4RVUC2XX.js → chunk-N3LTFUBJ.js} +1 -1
- package/bundle/chunk-NWYJJVCF.js +22452 -0
- package/bundle/chunk-OAMLVMOY.js +133 -0
- package/bundle/chunk-PBVMMANP.js +4480 -0
- package/bundle/chunk-PT6CYFBD.js +74 -0
- package/bundle/chunk-QAG6TIB7.js +12148 -0
- package/bundle/chunk-RSLQIAJB.js +12148 -0
- package/bundle/chunk-SAU2NEDC.js +147 -0
- package/bundle/chunk-SZ6TMVT4.js +22452 -0
- package/bundle/chunk-T3MAVQWW.js +292 -0
- package/bundle/chunk-TCGZNSBY.js +4539 -0
- package/bundle/chunk-TRIIBQDR.js +4480 -0
- package/bundle/chunk-UUTXTOE3.js +231 -0
- package/bundle/chunk-VMKGSIXK.js +75 -0
- package/bundle/chunk-XDCRA7Y2.js +805 -0
- package/bundle/chunk-XEMONOX2.js +384 -0
- package/bundle/chunk-YAPQ2CKV.js +115 -0
- package/bundle/chunk-YDDBYUDC.js +502 -0
- package/bundle/chunk-ZGLCW5YO.js +380 -0
- package/bundle/chunk-ZQ6BFQSX.js +44 -0
- package/bundle/chunk-ZZTNAQSE.js +147 -0
- package/bundle/commands/annotation/get.js +3 -3
- package/bundle/commands/annotation/list.js +3 -3
- package/bundle/commands/annotation/put.js +3 -3
- package/bundle/commands/auth/list.js +2 -2
- package/bundle/commands/auth/login.js +3 -3
- package/bundle/commands/auth/logout.js +2 -2
- package/bundle/commands/auth/select.js +3 -3
- package/bundle/commands/bucket/create-credential.js +2 -2
- package/bundle/commands/bucket/delete-credential.js +2 -2
- package/bundle/commands/bucket/get-credential.js +2 -2
- package/bundle/commands/bucket/list-credentials.js +2 -2
- package/bundle/commands/build/branch.js +9 -9
- package/bundle/commands/build/checkout.js +6 -5
- package/bundle/commands/build/clone.js +5 -5
- package/bundle/commands/build/delete.js +6 -5
- package/bundle/commands/build/deploy.js +9 -9
- package/bundle/commands/build/env/get.js +2 -2
- package/bundle/commands/build/env/set.js +2 -2
- package/bundle/commands/build/find.js +7 -3
- package/bundle/commands/build/generate.js +3 -3
- package/bundle/commands/build/init-workspace.js +102 -0
- package/bundle/commands/build/init.js +3 -3
- package/bundle/commands/build/list.js +5 -4
- package/bundle/commands/build/sandbox.js +7 -7
- package/bundle/commands/build/start.js +2 -2
- package/bundle/commands/build/status.js +8 -4
- package/bundle/commands/build/stop.js +2 -2
- package/bundle/commands/build/tools/check.js +2 -2
- package/bundle/commands/build/tools/fmt.js +2 -2
- package/bundle/commands/build/unsandbox.js +7 -7
- package/bundle/commands/build/upload.js +5 -5
- package/bundle/commands/build/validate.js +4 -4
- package/bundle/commands/build/workos/delete.js +4 -4
- package/bundle/commands/build/workos/env/attach.js +3 -3
- package/bundle/commands/build/workos/env/create.js +3 -3
- package/bundle/commands/build/workos/env/delete.js +3 -3
- package/bundle/commands/build/workos/env/detach.js +3 -3
- package/bundle/commands/build/workos/env/get.js +3 -3
- package/bundle/commands/build/workos/env/list.js +3 -3
- package/bundle/commands/build/workos/env/set.js +3 -3
- package/bundle/commands/build/workos/invite.js +3 -3
- package/bundle/commands/build/workos/setup.js +3 -3
- package/bundle/commands/build/workos/status.js +3 -3
- package/bundle/commands/dns/create.js +2 -2
- package/bundle/commands/dns/delete.js +4 -4
- package/bundle/commands/dns/get.js +4 -4
- package/bundle/commands/dns/list.js +3 -3
- package/bundle/commands/dns/records/create.js +2 -2
- package/bundle/commands/dns/records/delete.js +3 -3
- package/bundle/commands/dns/records/get.js +2 -2
- package/bundle/commands/dns/records/list.js +2 -2
- package/bundle/commands/dns/records/update.js +2 -2
- package/bundle/commands/logs/query.js +3 -3
- package/bundle/commands/logs/tail.js +3 -3
- package/bundle/commands/mcp/install-claude.js +2 -2
- package/bundle/commands/mcp/install-gemini.js +2 -2
- package/bundle/commands/mcp/install-goose.js +2 -2
- package/bundle/commands/mcp/status.js +2 -2
- package/bundle/commands/object/delete.js +2 -2
- package/bundle/commands/object/get.js +2 -2
- package/bundle/commands/object/list.js +2 -2
- package/bundle/commands/object/put.js +2 -2
- package/bundle/commands/query/chunk-search.js +3 -3
- package/bundle/commands/query/document.js +3 -3
- package/bundle/commands/query/events.js +2 -2
- package/bundle/commands/query/reindex.js +2 -2
- package/bundle/commands/query/search.js +3 -3
- package/bundle/commands/tail.js +2 -2
- package/bundle/index.js +1 -1
- package/dist/commands/build/find.d.ts.map +1 -1
- package/dist/commands/build/find.js +3 -0
- package/dist/commands/build/init-workspace.d.ts +16 -0
- package/dist/commands/build/init-workspace.d.ts.map +1 -0
- package/dist/commands/build/init-workspace.js +95 -0
- package/dist/commands/build/list.d.ts.map +1 -1
- package/dist/commands/build/list.js +3 -0
- package/dist/commands/build/status.d.ts.map +1 -1
- package/dist/commands/build/status.js +3 -0
- package/dist/killswitch-utils.d.ts +30 -0
- package/dist/killswitch-utils.d.ts.map +1 -0
- package/dist/killswitch-utils.js +83 -0
- package/oclif.manifest.json +2114 -2007
- package/package.json +3 -3
- package/templates/claude-code/debug-raindrop-app.md +12 -39
- package/templates/claude-code/update-raindrop-app.md +5 -6
- package/templates/db/node_modules/.bin/prisma +2 -2
- package/templates/db/node_modules/.bin/prisma-kysely +2 -2
- package/templates/db/node_modules/.bin/tsc +2 -2
- package/templates/db/node_modules/.bin/tsserver +2 -2
- package/templates/db/node_modules/.bin/zx +2 -2
- package/templates/gemini-code/debug-raindrop-app.toml +12 -39
- package/templates/gemini-code/update-raindrop-app.toml +5 -6
- package/templates/goose/debug-raindrop-app.yaml +12 -39
- package/templates/goose/update-raindrop-app.yaml +5 -6
- package/templates/workspace/.gitignore.hbs +40 -0
- package/templates/workspace/package.json.hbs +22 -0
- package/dist/commands/killswitch.d.ts +0 -20
- package/dist/commands/killswitch.d.ts.map +0 -1
- package/dist/commands/killswitch.js +0 -58
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/utils/mixpanel.d.ts +0 -10
- package/dist/utils/mixpanel.d.ts.map +0 -1
- 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-
|
|
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({
|