@enactprotocol/cli 2.0.0 → 2.0.1
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/dist/commands/auth/index.d.ts +12 -0
- package/dist/commands/auth/index.d.ts.map +1 -0
- package/dist/commands/auth/index.js +743 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/cache/index.d.ts +11 -0
- package/dist/commands/cache/index.d.ts.map +1 -0
- package/dist/commands/cache/index.js +304 -0
- package/dist/commands/cache/index.js.map +1 -0
- package/dist/commands/config/index.d.ts +11 -0
- package/dist/commands/config/index.d.ts.map +1 -0
- package/dist/commands/config/index.js +138 -0
- package/dist/commands/config/index.js.map +1 -0
- package/dist/commands/env/index.d.ts +11 -0
- package/dist/commands/env/index.d.ts.map +1 -0
- package/dist/commands/env/index.js +303 -0
- package/dist/commands/env/index.js.map +1 -0
- package/dist/commands/exec/index.d.ts +12 -0
- package/dist/commands/exec/index.d.ts.map +1 -0
- package/dist/commands/exec/index.js +154 -0
- package/dist/commands/exec/index.js.map +1 -0
- package/dist/commands/get/index.d.ts +11 -0
- package/dist/commands/get/index.d.ts.map +1 -0
- package/dist/commands/get/index.js +151 -0
- package/dist/commands/get/index.js.map +1 -0
- package/dist/commands/index.d.ts +24 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +27 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/inspect/index.d.ts +13 -0
- package/dist/commands/inspect/index.d.ts.map +1 -0
- package/dist/commands/inspect/index.js +199 -0
- package/dist/commands/inspect/index.js.map +1 -0
- package/dist/commands/install/index.d.ts +16 -0
- package/dist/commands/install/index.d.ts.map +1 -0
- package/dist/commands/install/index.js +520 -0
- package/dist/commands/install/index.js.map +1 -0
- package/dist/commands/list/index.d.ts +15 -0
- package/dist/commands/list/index.d.ts.map +1 -0
- package/dist/commands/list/index.js +103 -0
- package/dist/commands/list/index.js.map +1 -0
- package/dist/commands/publish/index.d.ts +11 -0
- package/dist/commands/publish/index.d.ts.map +1 -0
- package/dist/commands/publish/index.js +274 -0
- package/dist/commands/publish/index.js.map +1 -0
- package/dist/commands/report/index.d.ts +12 -0
- package/dist/commands/report/index.d.ts.map +1 -0
- package/dist/commands/report/index.js +279 -0
- package/dist/commands/report/index.js.map +1 -0
- package/dist/commands/run/index.d.ts +16 -0
- package/dist/commands/run/index.d.ts.map +1 -0
- package/dist/commands/run/index.js +525 -0
- package/dist/commands/run/index.js.map +1 -0
- package/dist/commands/search/index.d.ts +12 -0
- package/dist/commands/search/index.d.ts.map +1 -0
- package/dist/commands/search/index.js +275 -0
- package/dist/commands/search/index.js.map +1 -0
- package/dist/commands/setup/index.d.ts +11 -0
- package/dist/commands/setup/index.d.ts.map +1 -0
- package/dist/commands/setup/index.js +241 -0
- package/dist/commands/setup/index.js.map +1 -0
- package/dist/commands/sign/index.d.ts +17 -0
- package/dist/commands/sign/index.d.ts.map +1 -0
- package/dist/commands/sign/index.js +507 -0
- package/dist/commands/sign/index.js.map +1 -0
- package/dist/commands/trust/index.d.ts +13 -0
- package/dist/commands/trust/index.d.ts.map +1 -0
- package/dist/commands/trust/index.js +366 -0
- package/dist/commands/trust/index.js.map +1 -0
- package/dist/commands/unyank/index.d.ts +11 -0
- package/dist/commands/unyank/index.d.ts.map +1 -0
- package/dist/commands/unyank/index.js +87 -0
- package/dist/commands/unyank/index.js.map +1 -0
- package/dist/commands/yank/index.d.ts +13 -0
- package/dist/commands/yank/index.d.ts.map +1 -0
- package/dist/commands/yank/index.js +109 -0
- package/dist/commands/yank/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +69 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/errors.d.ts +159 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +321 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/exit-codes.d.ts +83 -0
- package/dist/utils/exit-codes.d.ts.map +1 -0
- package/dist/utils/exit-codes.js +126 -0
- package/dist/utils/exit-codes.js.map +1 -0
- package/dist/utils/ignore.d.ts +25 -0
- package/dist/utils/ignore.d.ts.map +1 -0
- package/dist/utils/ignore.js +123 -0
- package/dist/utils/ignore.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/output.d.ts +103 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +201 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/spinner.d.ts +83 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +162 -0
- package/dist/utils/spinner.js.map +1 -0
- package/package.json +5 -5
- package/src/index.ts +4 -0
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* enact env command
|
|
3
|
+
*
|
|
4
|
+
* Manage environment variables and secrets.
|
|
5
|
+
*/
|
|
6
|
+
import { deleteEnv, deleteSecret, getEnv, listEnv, listSecrets, secretExists, setEnv, setSecret, } from "@enactprotocol/secrets";
|
|
7
|
+
import { dim, error, formatError, header, info, json, keyValue, newline, password, success, table, } from "../../utils";
|
|
8
|
+
/**
|
|
9
|
+
* Set environment variable or secret
|
|
10
|
+
*/
|
|
11
|
+
async function envSetHandler(key, value, options, ctx) {
|
|
12
|
+
if (options.secret) {
|
|
13
|
+
// Setting a secret in the keyring
|
|
14
|
+
if (!options.namespace) {
|
|
15
|
+
error("--namespace is required when setting a secret");
|
|
16
|
+
dim("Example: enact env set API_KEY --secret --namespace alice/api");
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
// If no value provided, prompt for it
|
|
20
|
+
let secretValue = value;
|
|
21
|
+
if (!secretValue) {
|
|
22
|
+
if (!ctx.isInteractive) {
|
|
23
|
+
error("Value is required in non-interactive mode");
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
const prompted = await password(`Enter value for ${key}:`);
|
|
27
|
+
if (!prompted) {
|
|
28
|
+
error("No value provided");
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
secretValue = prompted;
|
|
32
|
+
}
|
|
33
|
+
await setSecret(options.namespace, key, secretValue);
|
|
34
|
+
if (options.json) {
|
|
35
|
+
json({ set: true, key, namespace: options.namespace, type: "secret" });
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
success(`Secret ${key} set for namespace ${options.namespace}`);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// Setting an environment variable in .env file
|
|
42
|
+
if (!value) {
|
|
43
|
+
error("Value is required for environment variables");
|
|
44
|
+
dim("Example: enact env set API_URL https://api.example.com");
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
const scope = options.local ? "local" : "global";
|
|
48
|
+
setEnv(key, value, scope, ctx.cwd);
|
|
49
|
+
if (options.json) {
|
|
50
|
+
json({ set: true, key, value, scope, type: "env" });
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
success(`Environment variable ${key} set (${scope})`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get environment variable or check secret existence
|
|
58
|
+
*/
|
|
59
|
+
async function envGetHandler(key, options, ctx) {
|
|
60
|
+
if (options.secret) {
|
|
61
|
+
// Check if secret exists (never show value)
|
|
62
|
+
if (!options.namespace) {
|
|
63
|
+
error("--namespace is required when getting a secret");
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
const exists = await secretExists(options.namespace, key);
|
|
67
|
+
if (options.json) {
|
|
68
|
+
json({ key, namespace: options.namespace, exists, type: "secret" });
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (exists) {
|
|
72
|
+
success(`Secret ${key} exists for namespace ${options.namespace}`);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
info(`Secret ${key} not found for namespace ${options.namespace}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Get environment variable
|
|
80
|
+
const result = getEnv(key, undefined, ctx.cwd);
|
|
81
|
+
if (options.json) {
|
|
82
|
+
json(result ? { ...result, type: "env" } : { key, found: false, type: "env" });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (result) {
|
|
86
|
+
keyValue("Key", key);
|
|
87
|
+
keyValue("Value", result.value);
|
|
88
|
+
keyValue("Source", result.source);
|
|
89
|
+
if (result.filePath) {
|
|
90
|
+
keyValue("File", result.filePath);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
info(`Environment variable ${key} not found`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* List environment variables or secrets
|
|
100
|
+
*/
|
|
101
|
+
async function envListHandler(options, ctx) {
|
|
102
|
+
if (options.secret) {
|
|
103
|
+
// List secrets for a namespace
|
|
104
|
+
if (!options.namespace) {
|
|
105
|
+
error("--namespace is required when listing secrets");
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
const secrets = await listSecrets(options.namespace);
|
|
109
|
+
if (options.json) {
|
|
110
|
+
json({ namespace: options.namespace, secrets, type: "secrets" });
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (secrets.length === 0) {
|
|
114
|
+
info(`No secrets found for namespace ${options.namespace}`);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
header(`Secrets for ${options.namespace}`);
|
|
118
|
+
newline();
|
|
119
|
+
for (const name of secrets) {
|
|
120
|
+
dim(` • ${name}`);
|
|
121
|
+
}
|
|
122
|
+
newline();
|
|
123
|
+
dim(`Total: ${secrets.length} secret(s)`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
// List environment variables
|
|
127
|
+
let scope = "all";
|
|
128
|
+
if (options.local && !options.global) {
|
|
129
|
+
scope = "local";
|
|
130
|
+
}
|
|
131
|
+
else if (options.global && !options.local) {
|
|
132
|
+
scope = "global";
|
|
133
|
+
}
|
|
134
|
+
const envVars = listEnv(scope, ctx.cwd);
|
|
135
|
+
if (options.json) {
|
|
136
|
+
json({ scope, variables: envVars, type: "env" });
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (envVars.length === 0) {
|
|
140
|
+
info("No environment variables found");
|
|
141
|
+
dim("Set variables with 'enact env set KEY VALUE'");
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
header("Environment Variables");
|
|
145
|
+
newline();
|
|
146
|
+
const columns = [
|
|
147
|
+
{ key: "key", header: "Key", width: 25 },
|
|
148
|
+
{ key: "value", header: "Value", width: 40 },
|
|
149
|
+
{ key: "source", header: "Source", width: 10 },
|
|
150
|
+
];
|
|
151
|
+
// Transform to table-compatible format
|
|
152
|
+
const tableData = envVars.map((v) => ({
|
|
153
|
+
key: v.key,
|
|
154
|
+
value: v.value.length > 40 ? `${v.value.slice(0, 37)}...` : v.value,
|
|
155
|
+
source: v.source,
|
|
156
|
+
}));
|
|
157
|
+
table(tableData, columns);
|
|
158
|
+
newline();
|
|
159
|
+
dim(`Total: ${envVars.length} variable(s)`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Delete environment variable or secret
|
|
164
|
+
*/
|
|
165
|
+
async function envDeleteHandler(key, options, ctx) {
|
|
166
|
+
if (options.secret) {
|
|
167
|
+
// Delete secret from keyring
|
|
168
|
+
if (!options.namespace) {
|
|
169
|
+
error("--namespace is required when deleting a secret");
|
|
170
|
+
process.exit(1);
|
|
171
|
+
}
|
|
172
|
+
const deleted = await deleteSecret(options.namespace, key);
|
|
173
|
+
if (options.json) {
|
|
174
|
+
json({ deleted, key, namespace: options.namespace, type: "secret" });
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (deleted) {
|
|
178
|
+
success(`Secret ${key} deleted from namespace ${options.namespace}`);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
info(`Secret ${key} not found for namespace ${options.namespace}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
// Delete environment variable
|
|
186
|
+
const scope = options.local ? "local" : "global";
|
|
187
|
+
const deleted = deleteEnv(key, scope, ctx.cwd);
|
|
188
|
+
if (options.json) {
|
|
189
|
+
json({ deleted, key, scope, type: "env" });
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (deleted) {
|
|
193
|
+
success(`Environment variable ${key} deleted (${scope})`);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
info(`Environment variable ${key} not found (${scope})`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Configure the env command
|
|
202
|
+
*/
|
|
203
|
+
export function configureEnvCommand(program) {
|
|
204
|
+
const env = program.command("env").description("Manage environment variables and secrets");
|
|
205
|
+
// env set
|
|
206
|
+
env
|
|
207
|
+
.command("set")
|
|
208
|
+
.description("Set an environment variable or secret")
|
|
209
|
+
.argument("<key>", "Variable name")
|
|
210
|
+
.argument("[value]", "Variable value (prompted if secret and not provided)")
|
|
211
|
+
.option("-s, --secret", "Store as secret in OS keyring")
|
|
212
|
+
.option("-n, --namespace <namespace>", "Namespace for secret (required with --secret)")
|
|
213
|
+
.option("-l, --local", "Set in project .enact/.env instead of global")
|
|
214
|
+
.option("--json", "Output as JSON")
|
|
215
|
+
.action(async (key, value, options) => {
|
|
216
|
+
const ctx = {
|
|
217
|
+
cwd: process.cwd(),
|
|
218
|
+
options,
|
|
219
|
+
isCI: Boolean(process.env.CI),
|
|
220
|
+
isInteractive: process.stdout.isTTY ?? false,
|
|
221
|
+
};
|
|
222
|
+
try {
|
|
223
|
+
await envSetHandler(key, value, options, ctx);
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
error(formatError(err));
|
|
227
|
+
process.exit(1);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
// env get
|
|
231
|
+
env
|
|
232
|
+
.command("get")
|
|
233
|
+
.description("Get an environment variable or check if a secret exists")
|
|
234
|
+
.argument("<key>", "Variable name")
|
|
235
|
+
.option("-s, --secret", "Check secret in OS keyring (never shows value)")
|
|
236
|
+
.option("-n, --namespace <namespace>", "Namespace for secret (required with --secret)")
|
|
237
|
+
.option("--json", "Output as JSON")
|
|
238
|
+
.action(async (key, options) => {
|
|
239
|
+
const ctx = {
|
|
240
|
+
cwd: process.cwd(),
|
|
241
|
+
options,
|
|
242
|
+
isCI: Boolean(process.env.CI),
|
|
243
|
+
isInteractive: process.stdout.isTTY ?? false,
|
|
244
|
+
};
|
|
245
|
+
try {
|
|
246
|
+
await envGetHandler(key, options, ctx);
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
error(formatError(err));
|
|
250
|
+
process.exit(1);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
// env list
|
|
254
|
+
env
|
|
255
|
+
.command("list")
|
|
256
|
+
.description("List environment variables or secrets")
|
|
257
|
+
.option("-s, --secret", "List secrets from OS keyring")
|
|
258
|
+
.option("-n, --namespace <namespace>", "Namespace for secrets (required with --secret)")
|
|
259
|
+
.option("-l, --local", "Show only project .enact/.env variables")
|
|
260
|
+
.option("-g, --global", "Show only global ~/.enact/.env variables")
|
|
261
|
+
.option("--json", "Output as JSON")
|
|
262
|
+
.action(async (options) => {
|
|
263
|
+
const ctx = {
|
|
264
|
+
cwd: process.cwd(),
|
|
265
|
+
options,
|
|
266
|
+
isCI: Boolean(process.env.CI),
|
|
267
|
+
isInteractive: process.stdout.isTTY ?? false,
|
|
268
|
+
};
|
|
269
|
+
try {
|
|
270
|
+
await envListHandler(options, ctx);
|
|
271
|
+
}
|
|
272
|
+
catch (err) {
|
|
273
|
+
error(formatError(err));
|
|
274
|
+
process.exit(1);
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
// env delete
|
|
278
|
+
env
|
|
279
|
+
.command("delete")
|
|
280
|
+
.alias("rm")
|
|
281
|
+
.description("Delete an environment variable or secret")
|
|
282
|
+
.argument("<key>", "Variable name")
|
|
283
|
+
.option("-s, --secret", "Delete secret from OS keyring")
|
|
284
|
+
.option("-n, --namespace <namespace>", "Namespace for secret (required with --secret)")
|
|
285
|
+
.option("-l, --local", "Delete from project .enact/.env instead of global")
|
|
286
|
+
.option("--json", "Output as JSON")
|
|
287
|
+
.action(async (key, options) => {
|
|
288
|
+
const ctx = {
|
|
289
|
+
cwd: process.cwd(),
|
|
290
|
+
options,
|
|
291
|
+
isCI: Boolean(process.env.CI),
|
|
292
|
+
isInteractive: process.stdout.isTTY ?? false,
|
|
293
|
+
};
|
|
294
|
+
try {
|
|
295
|
+
await envDeleteHandler(key, options, ctx);
|
|
296
|
+
}
|
|
297
|
+
catch (err) {
|
|
298
|
+
error(formatError(err));
|
|
299
|
+
process.exit(1);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/env/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* enact exec command
|
|
3
|
+
*
|
|
4
|
+
* Execute an arbitrary command in a tool's container environment.
|
|
5
|
+
* Unlike `run`, this allows running any command, not just the manifest-defined one.
|
|
6
|
+
*/
|
|
7
|
+
import type { Command } from "commander";
|
|
8
|
+
/**
|
|
9
|
+
* Configure the exec command
|
|
10
|
+
*/
|
|
11
|
+
export declare function configureExecCommand(program: Command): void;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/exec/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0JzC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2B3D"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* enact exec command
|
|
3
|
+
*
|
|
4
|
+
* Execute an arbitrary command in a tool's container environment.
|
|
5
|
+
* Unlike `run`, this allows running any command, not just the manifest-defined one.
|
|
6
|
+
*/
|
|
7
|
+
import { DaggerExecutionProvider } from "@enactprotocol/execution";
|
|
8
|
+
import { resolveSecrets, resolveToolEnv } from "@enactprotocol/secrets";
|
|
9
|
+
import { resolveToolAuto } from "@enactprotocol/shared";
|
|
10
|
+
import { dim, error, formatError, json, newline, suggest, symbols, withSpinner } from "../../utils";
|
|
11
|
+
/**
|
|
12
|
+
* Display execution result
|
|
13
|
+
*/
|
|
14
|
+
function displayResult(result, options) {
|
|
15
|
+
if (options.json) {
|
|
16
|
+
json(result);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (result.success) {
|
|
20
|
+
if (result.output?.stdout) {
|
|
21
|
+
process.stdout.write(result.output.stdout);
|
|
22
|
+
if (!result.output.stdout.endsWith("\n")) {
|
|
23
|
+
newline();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (options.verbose && result.output?.stderr) {
|
|
27
|
+
dim(`stderr: ${result.output.stderr}`);
|
|
28
|
+
}
|
|
29
|
+
if (options.verbose && result.metadata) {
|
|
30
|
+
newline();
|
|
31
|
+
dim(`Duration: ${result.metadata.durationMs}ms`);
|
|
32
|
+
dim(`Exit code: ${result.output?.exitCode ?? 0}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
error(`Execution failed: ${result.error?.message ?? "Unknown error"}`);
|
|
37
|
+
if (result.output?.stderr) {
|
|
38
|
+
newline();
|
|
39
|
+
dim("stderr:");
|
|
40
|
+
dim(result.output.stderr);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse timeout string (e.g., "30s", "5m", "1h")
|
|
46
|
+
*/
|
|
47
|
+
function parseTimeout(timeout) {
|
|
48
|
+
const match = timeout.match(/^(\d+)(s|m|h)?$/);
|
|
49
|
+
if (!match) {
|
|
50
|
+
throw new Error(`Invalid timeout format: ${timeout}. Use format like "30s", "5m", or "1h".`);
|
|
51
|
+
}
|
|
52
|
+
const value = Number.parseInt(match[1] ?? "0", 10);
|
|
53
|
+
const unit = match[2] || "s";
|
|
54
|
+
switch (unit) {
|
|
55
|
+
case "h":
|
|
56
|
+
return value * 60 * 60 * 1000;
|
|
57
|
+
case "m":
|
|
58
|
+
return value * 60 * 1000;
|
|
59
|
+
default:
|
|
60
|
+
return value * 1000;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Exec command handler
|
|
65
|
+
*/
|
|
66
|
+
async function execHandler(tool, command, options, ctx) {
|
|
67
|
+
// Resolve the tool
|
|
68
|
+
const resolution = await withSpinner(`Resolving tool: ${tool}`, async () => resolveToolAuto(tool, { startDir: ctx.cwd }), `${symbols.success} Resolved: ${tool}`);
|
|
69
|
+
if (!resolution) {
|
|
70
|
+
error(`Tool not found: ${tool}`);
|
|
71
|
+
suggest(`Try 'enact install ${tool}' first, or check the tool name.`);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
const manifest = resolution.manifest;
|
|
75
|
+
// Resolve environment variables (non-secrets)
|
|
76
|
+
const { resolved: envResolved } = resolveToolEnv(manifest.env ?? {}, ctx.cwd);
|
|
77
|
+
const envVars = {};
|
|
78
|
+
for (const [key, envRes] of envResolved) {
|
|
79
|
+
envVars[key] = envRes.value;
|
|
80
|
+
}
|
|
81
|
+
// Resolve secrets
|
|
82
|
+
const secretDeclarations = Object.entries(manifest.env ?? {})
|
|
83
|
+
.filter(([_, v]) => v.secret)
|
|
84
|
+
.map(([k]) => k);
|
|
85
|
+
if (secretDeclarations.length > 0) {
|
|
86
|
+
const namespace = manifest.name.split("/").slice(0, -1).join("/") || manifest.name;
|
|
87
|
+
const secretResults = await resolveSecrets(namespace, secretDeclarations);
|
|
88
|
+
for (const [key, result] of secretResults) {
|
|
89
|
+
if (result.found && result.value) {
|
|
90
|
+
envVars[key] = result.value;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Execute the custom command
|
|
95
|
+
const providerConfig = {};
|
|
96
|
+
if (options.timeout) {
|
|
97
|
+
providerConfig.defaultTimeout = parseTimeout(options.timeout);
|
|
98
|
+
}
|
|
99
|
+
if (options.verbose) {
|
|
100
|
+
providerConfig.verbose = true;
|
|
101
|
+
}
|
|
102
|
+
const provider = new DaggerExecutionProvider(providerConfig);
|
|
103
|
+
try {
|
|
104
|
+
await provider.initialize();
|
|
105
|
+
// Create a modified manifest with the custom command
|
|
106
|
+
const execManifest = {
|
|
107
|
+
...manifest,
|
|
108
|
+
command,
|
|
109
|
+
};
|
|
110
|
+
const result = await withSpinner(`Executing in ${manifest.name}...`, async () => provider.execute(execManifest, {
|
|
111
|
+
params: {},
|
|
112
|
+
envOverrides: envVars,
|
|
113
|
+
}), options.verbose ? `${symbols.success} Execution complete` : undefined);
|
|
114
|
+
displayResult(result, options);
|
|
115
|
+
if (!result.success) {
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
// Provider cleanup handled by Dagger
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Configure the exec command
|
|
125
|
+
*/
|
|
126
|
+
export function configureExecCommand(program) {
|
|
127
|
+
program
|
|
128
|
+
.command("exec")
|
|
129
|
+
.description("Execute an arbitrary command in a tool's container environment")
|
|
130
|
+
.argument("<tool>", "Tool to run in (name, path, or '.' for current directory)")
|
|
131
|
+
.argument("<command>", "Command to execute (quote complex commands)")
|
|
132
|
+
.option("-t, --timeout <duration>", "Execution timeout (e.g., 30s, 5m)")
|
|
133
|
+
.option("-v, --verbose", "Show detailed output")
|
|
134
|
+
.option("--json", "Output result as JSON")
|
|
135
|
+
.action(async (tool, command, options) => {
|
|
136
|
+
const ctx = {
|
|
137
|
+
cwd: process.cwd(),
|
|
138
|
+
options,
|
|
139
|
+
isCI: Boolean(process.env.CI),
|
|
140
|
+
isInteractive: process.stdout.isTTY ?? false,
|
|
141
|
+
};
|
|
142
|
+
try {
|
|
143
|
+
await execHandler(tool, command, options, ctx);
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
error(formatError(err));
|
|
147
|
+
if (options.verbose && err instanceof Error && err.stack) {
|
|
148
|
+
dim(err.stack);
|
|
149
|
+
}
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/exec/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* enact get command
|
|
3
|
+
*
|
|
4
|
+
* Show detailed information about a tool from the registry.
|
|
5
|
+
*/
|
|
6
|
+
import type { Command } from "commander";
|
|
7
|
+
/**
|
|
8
|
+
* Configure the get command
|
|
9
|
+
*/
|
|
10
|
+
export declare function configureGetCommand(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/get/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6JzC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuB1D"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* enact get command
|
|
3
|
+
*
|
|
4
|
+
* Show detailed information about a tool from the registry.
|
|
5
|
+
*/
|
|
6
|
+
import { createApiClient, getToolInfo, getToolVersion, } from "@enactprotocol/api";
|
|
7
|
+
import { loadConfig } from "@enactprotocol/shared";
|
|
8
|
+
import { dim, error, formatError, header, info, json, keyValue, newline, success, } from "../../utils";
|
|
9
|
+
/**
|
|
10
|
+
* Format a date for display
|
|
11
|
+
*/
|
|
12
|
+
function formatDate(date) {
|
|
13
|
+
return date.toLocaleDateString("en-US", {
|
|
14
|
+
year: "numeric",
|
|
15
|
+
month: "short",
|
|
16
|
+
day: "numeric",
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Display tool info
|
|
21
|
+
*/
|
|
22
|
+
function displayToolInfo(tool, options) {
|
|
23
|
+
header(tool.name);
|
|
24
|
+
newline();
|
|
25
|
+
info(tool.description);
|
|
26
|
+
newline();
|
|
27
|
+
keyValue("Latest Version", tool.latestVersion);
|
|
28
|
+
keyValue("License", tool.license);
|
|
29
|
+
keyValue("Created", formatDate(tool.createdAt));
|
|
30
|
+
keyValue("Updated", formatDate(tool.updatedAt));
|
|
31
|
+
if (tool.tags.length > 0) {
|
|
32
|
+
keyValue("Tags", tool.tags.join(", "));
|
|
33
|
+
}
|
|
34
|
+
if (tool.author) {
|
|
35
|
+
keyValue("Author", tool.author.username);
|
|
36
|
+
}
|
|
37
|
+
newline();
|
|
38
|
+
keyValue("Available Versions", tool.versions.join(", "));
|
|
39
|
+
if (options.verbose) {
|
|
40
|
+
newline();
|
|
41
|
+
dim("Use --version <ver> to see version-specific details");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Display version-specific info
|
|
46
|
+
*/
|
|
47
|
+
function displayVersionInfo(version) {
|
|
48
|
+
header(`${version.name}@${version.version}`);
|
|
49
|
+
newline();
|
|
50
|
+
info(version.description);
|
|
51
|
+
newline();
|
|
52
|
+
keyValue("Version", version.version);
|
|
53
|
+
keyValue("License", version.license);
|
|
54
|
+
if (version.bundle) {
|
|
55
|
+
keyValue("Bundle Hash", version.bundle.hash);
|
|
56
|
+
keyValue("Bundle Size", `${(version.bundle.size / 1024).toFixed(1)} KB`);
|
|
57
|
+
}
|
|
58
|
+
if (version.yanked) {
|
|
59
|
+
newline();
|
|
60
|
+
dim(`⚠ This version is yanked${version.yankReason ? `: ${version.yankReason}` : ""}`);
|
|
61
|
+
if (version.yankReplacement) {
|
|
62
|
+
dim(` Recommended: ${version.yankReplacement}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (version.manifest) {
|
|
66
|
+
newline();
|
|
67
|
+
dim("Manifest:");
|
|
68
|
+
console.log(JSON.stringify(version.manifest, null, 2));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get command handler
|
|
73
|
+
*/
|
|
74
|
+
async function getHandler(toolName, options, ctx) {
|
|
75
|
+
const config = loadConfig();
|
|
76
|
+
const registryUrl = process.env.ENACT_REGISTRY_URL ??
|
|
77
|
+
config.registry?.url ??
|
|
78
|
+
"https://siikwkfgsmouioodghho.supabase.co/functions/v1";
|
|
79
|
+
const authToken = config.registry?.authToken;
|
|
80
|
+
const client = createApiClient({
|
|
81
|
+
baseUrl: registryUrl,
|
|
82
|
+
authToken: authToken,
|
|
83
|
+
});
|
|
84
|
+
if (ctx.options.verbose) {
|
|
85
|
+
info(`Fetching info for: ${toolName}`);
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
if (options.version) {
|
|
89
|
+
// Get specific version info
|
|
90
|
+
const versionInfo = await getToolVersion(client, toolName, options.version);
|
|
91
|
+
if (options.json) {
|
|
92
|
+
json(versionInfo);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
displayVersionInfo(versionInfo);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// Get general tool info
|
|
99
|
+
const toolInfo = await getToolInfo(client, toolName);
|
|
100
|
+
if (options.json) {
|
|
101
|
+
json(toolInfo);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
displayToolInfo(toolInfo, options);
|
|
105
|
+
}
|
|
106
|
+
newline();
|
|
107
|
+
success(`Install with: enact install ${toolName}`);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
if (err instanceof Error) {
|
|
111
|
+
if (err.message.includes("not_found") || err.message.includes("404")) {
|
|
112
|
+
error(`Tool not found: ${toolName}`);
|
|
113
|
+
dim("Check the tool name or search with: enact search <query>");
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
if (err.message.includes("fetch")) {
|
|
117
|
+
error("Unable to connect to registry. Check your internet connection.");
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
throw err;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Configure the get command
|
|
126
|
+
*/
|
|
127
|
+
export function configureGetCommand(program) {
|
|
128
|
+
program
|
|
129
|
+
.command("get <tool>")
|
|
130
|
+
.alias("info")
|
|
131
|
+
.description("Show detailed information about a tool")
|
|
132
|
+
.option("-V, --version <version>", "Show info for a specific version")
|
|
133
|
+
.option("-v, --verbose", "Show detailed output")
|
|
134
|
+
.option("--json", "Output as JSON")
|
|
135
|
+
.action(async (toolName, options) => {
|
|
136
|
+
const ctx = {
|
|
137
|
+
cwd: process.cwd(),
|
|
138
|
+
options,
|
|
139
|
+
isCI: Boolean(process.env.CI),
|
|
140
|
+
isInteractive: process.stdout.isTTY ?? false,
|
|
141
|
+
};
|
|
142
|
+
try {
|
|
143
|
+
await getHandler(toolName, options, ctx);
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
error(formatError(err));
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=index.js.map
|