@enactprotocol/cli 2.0.0 → 2.0.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 (119) hide show
  1. package/dist/commands/auth/index.d.ts +12 -0
  2. package/dist/commands/auth/index.d.ts.map +1 -0
  3. package/dist/commands/auth/index.js +743 -0
  4. package/dist/commands/auth/index.js.map +1 -0
  5. package/dist/commands/cache/index.d.ts +11 -0
  6. package/dist/commands/cache/index.d.ts.map +1 -0
  7. package/dist/commands/cache/index.js +304 -0
  8. package/dist/commands/cache/index.js.map +1 -0
  9. package/dist/commands/config/index.d.ts +11 -0
  10. package/dist/commands/config/index.d.ts.map +1 -0
  11. package/dist/commands/config/index.js +138 -0
  12. package/dist/commands/config/index.js.map +1 -0
  13. package/dist/commands/env/index.d.ts +11 -0
  14. package/dist/commands/env/index.d.ts.map +1 -0
  15. package/dist/commands/env/index.js +303 -0
  16. package/dist/commands/env/index.js.map +1 -0
  17. package/dist/commands/exec/index.d.ts +12 -0
  18. package/dist/commands/exec/index.d.ts.map +1 -0
  19. package/dist/commands/exec/index.js +154 -0
  20. package/dist/commands/exec/index.js.map +1 -0
  21. package/dist/commands/get/index.d.ts +11 -0
  22. package/dist/commands/get/index.d.ts.map +1 -0
  23. package/dist/commands/get/index.js +151 -0
  24. package/dist/commands/get/index.js.map +1 -0
  25. package/dist/commands/index.d.ts +25 -0
  26. package/dist/commands/index.d.ts.map +1 -0
  27. package/dist/commands/index.js +28 -0
  28. package/dist/commands/index.js.map +1 -0
  29. package/dist/commands/init/index.d.ts +11 -0
  30. package/dist/commands/init/index.d.ts.map +1 -0
  31. package/dist/commands/init/index.js +192 -0
  32. package/dist/commands/init/index.js.map +1 -0
  33. package/dist/commands/inspect/index.d.ts +13 -0
  34. package/dist/commands/inspect/index.d.ts.map +1 -0
  35. package/dist/commands/inspect/index.js +199 -0
  36. package/dist/commands/inspect/index.js.map +1 -0
  37. package/dist/commands/install/index.d.ts +16 -0
  38. package/dist/commands/install/index.d.ts.map +1 -0
  39. package/dist/commands/install/index.js +520 -0
  40. package/dist/commands/install/index.js.map +1 -0
  41. package/dist/commands/list/index.d.ts +15 -0
  42. package/dist/commands/list/index.d.ts.map +1 -0
  43. package/dist/commands/list/index.js +103 -0
  44. package/dist/commands/list/index.js.map +1 -0
  45. package/dist/commands/publish/index.d.ts +11 -0
  46. package/dist/commands/publish/index.d.ts.map +1 -0
  47. package/dist/commands/publish/index.js +274 -0
  48. package/dist/commands/publish/index.js.map +1 -0
  49. package/dist/commands/report/index.d.ts +12 -0
  50. package/dist/commands/report/index.d.ts.map +1 -0
  51. package/dist/commands/report/index.js +279 -0
  52. package/dist/commands/report/index.js.map +1 -0
  53. package/dist/commands/run/index.d.ts +16 -0
  54. package/dist/commands/run/index.d.ts.map +1 -0
  55. package/dist/commands/run/index.js +525 -0
  56. package/dist/commands/run/index.js.map +1 -0
  57. package/dist/commands/search/index.d.ts +12 -0
  58. package/dist/commands/search/index.d.ts.map +1 -0
  59. package/dist/commands/search/index.js +275 -0
  60. package/dist/commands/search/index.js.map +1 -0
  61. package/dist/commands/setup/index.d.ts +11 -0
  62. package/dist/commands/setup/index.d.ts.map +1 -0
  63. package/dist/commands/setup/index.js +241 -0
  64. package/dist/commands/setup/index.js.map +1 -0
  65. package/dist/commands/sign/index.d.ts +17 -0
  66. package/dist/commands/sign/index.d.ts.map +1 -0
  67. package/dist/commands/sign/index.js +507 -0
  68. package/dist/commands/sign/index.js.map +1 -0
  69. package/dist/commands/trust/index.d.ts +13 -0
  70. package/dist/commands/trust/index.d.ts.map +1 -0
  71. package/dist/commands/trust/index.js +366 -0
  72. package/dist/commands/trust/index.js.map +1 -0
  73. package/dist/commands/unyank/index.d.ts +11 -0
  74. package/dist/commands/unyank/index.d.ts.map +1 -0
  75. package/dist/commands/unyank/index.js +87 -0
  76. package/dist/commands/unyank/index.js.map +1 -0
  77. package/dist/commands/yank/index.d.ts +13 -0
  78. package/dist/commands/yank/index.d.ts.map +1 -0
  79. package/dist/commands/yank/index.js +109 -0
  80. package/dist/commands/yank/index.js.map +1 -0
  81. package/dist/index.d.ts +10 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +68 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/types.d.ts +69 -0
  86. package/dist/types.d.ts.map +1 -0
  87. package/dist/types.js +15 -0
  88. package/dist/types.js.map +1 -0
  89. package/dist/utils/errors.d.ts +159 -0
  90. package/dist/utils/errors.d.ts.map +1 -0
  91. package/dist/utils/errors.js +321 -0
  92. package/dist/utils/errors.js.map +1 -0
  93. package/dist/utils/exit-codes.d.ts +83 -0
  94. package/dist/utils/exit-codes.d.ts.map +1 -0
  95. package/dist/utils/exit-codes.js +126 -0
  96. package/dist/utils/exit-codes.js.map +1 -0
  97. package/dist/utils/ignore.d.ts +25 -0
  98. package/dist/utils/ignore.d.ts.map +1 -0
  99. package/dist/utils/ignore.js +123 -0
  100. package/dist/utils/ignore.js.map +1 -0
  101. package/dist/utils/index.d.ts +8 -0
  102. package/dist/utils/index.d.ts.map +1 -0
  103. package/dist/utils/index.js +12 -0
  104. package/dist/utils/index.js.map +1 -0
  105. package/dist/utils/output.d.ts +103 -0
  106. package/dist/utils/output.d.ts.map +1 -0
  107. package/dist/utils/output.js +201 -0
  108. package/dist/utils/output.js.map +1 -0
  109. package/dist/utils/spinner.d.ts +83 -0
  110. package/dist/utils/spinner.d.ts.map +1 -0
  111. package/dist/utils/spinner.js +162 -0
  112. package/dist/utils/spinner.js.map +1 -0
  113. package/package.json +5 -5
  114. package/src/commands/index.ts +1 -0
  115. package/src/commands/init/index.ts +231 -0
  116. package/src/index.ts +7 -1
  117. package/tests/index.test.ts +1 -1
  118. package/tsconfig.json +1 -0
  119. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,525 @@
1
+ /**
2
+ * enact run command
3
+ *
4
+ * Execute a tool in its container environment with the manifest-defined command.
5
+ *
6
+ * Resolution order:
7
+ * 1. Check local sources (project → user → cache)
8
+ * 2. If not found and --local not set, fetch from registry to cache
9
+ * 3. Run from resolved location (never copies to installed tools)
10
+ */
11
+ import { mkdirSync, unlinkSync, writeFileSync } from "node:fs";
12
+ import { dirname, join } from "node:path";
13
+ import * as clack from "@clack/prompts";
14
+ import { createApiClient, downloadBundle, getAttestationList, getToolInfo, getToolVersion, verifyAllAttestations, } from "@enactprotocol/api";
15
+ import { DaggerExecutionProvider } from "@enactprotocol/execution";
16
+ import { resolveSecrets, resolveToolEnv } from "@enactprotocol/secrets";
17
+ import { applyDefaults, getCacheDir, getMinimumAttestations, getTrustPolicy, getTrustedAuditors, loadConfig, prepareCommand, toolNameToPath, tryResolveTool, validateInputs, } from "@enactprotocol/shared";
18
+ import { EXIT_EXECUTION_ERROR, ToolNotFoundError, TrustError, ValidationError, colors, confirm, dim, error, formatError, handleError, info, json, keyValue, newline, success, symbols, withSpinner, } from "../../utils";
19
+ /**
20
+ * Parse input arguments from various formats
21
+ */
22
+ function parseInputArgs(argsJson, inputFlags) {
23
+ const inputs = {};
24
+ // Parse --args JSON
25
+ if (argsJson) {
26
+ try {
27
+ const parsed = JSON.parse(argsJson);
28
+ if (typeof parsed === "object" && parsed !== null) {
29
+ Object.assign(inputs, parsed);
30
+ }
31
+ }
32
+ catch (err) {
33
+ throw new Error(`Invalid JSON in --args: ${formatError(err)}`);
34
+ }
35
+ }
36
+ // Parse --input key=value pairs
37
+ if (inputFlags) {
38
+ for (const input of inputFlags) {
39
+ const eqIndex = input.indexOf("=");
40
+ if (eqIndex === -1) {
41
+ throw new Error(`Invalid input format: "${input}". Expected key=value`);
42
+ }
43
+ const key = input.slice(0, eqIndex);
44
+ const value = input.slice(eqIndex + 1);
45
+ // Try to parse as JSON for complex values
46
+ try {
47
+ inputs[key] = JSON.parse(value);
48
+ }
49
+ catch {
50
+ inputs[key] = value;
51
+ }
52
+ }
53
+ }
54
+ return inputs;
55
+ }
56
+ /**
57
+ * Extract a bundle to the cache directory
58
+ */
59
+ async function extractToCache(bundleData, toolName, version) {
60
+ const cacheDir = getCacheDir();
61
+ const toolPath = toolNameToPath(toolName);
62
+ const versionDir = join(cacheDir, toolPath, `v${version.replace(/^v/, "")}`);
63
+ // Create a temporary file for the bundle
64
+ const tempFile = join(cacheDir, `bundle-${Date.now()}.tar.gz`);
65
+ mkdirSync(dirname(tempFile), { recursive: true });
66
+ writeFileSync(tempFile, Buffer.from(bundleData));
67
+ // Create destination directory
68
+ mkdirSync(versionDir, { recursive: true });
69
+ // Extract using tar command
70
+ const proc = Bun.spawn(["tar", "-xzf", tempFile, "-C", versionDir], {
71
+ stdout: "pipe",
72
+ stderr: "pipe",
73
+ });
74
+ const exitCode = await proc.exited;
75
+ // Clean up temp file
76
+ try {
77
+ unlinkSync(tempFile);
78
+ }
79
+ catch {
80
+ // Ignore cleanup errors
81
+ }
82
+ if (exitCode !== 0) {
83
+ const stderr = await new Response(proc.stderr).text();
84
+ throw new Error(`Failed to extract bundle: ${stderr}`);
85
+ }
86
+ return versionDir;
87
+ }
88
+ /**
89
+ * Parse tool@version syntax
90
+ */
91
+ function parseToolSpec(spec) {
92
+ // Handle namespace/tool@version format
93
+ const match = spec.match(/^([^@]+)(?:@(.+))?$/);
94
+ if (match?.[1]) {
95
+ return {
96
+ name: match[1],
97
+ version: match[2]?.replace(/^v/, ""), // Remove leading 'v' if present
98
+ };
99
+ }
100
+ return { name: spec, version: undefined };
101
+ }
102
+ /**
103
+ * Fetch a tool from the registry and cache it
104
+ * Verifies attestations according to trust policy before caching
105
+ * Returns ToolResolution if successful
106
+ */
107
+ async function fetchAndCacheTool(toolSpec, options, ctx) {
108
+ const { name: toolName, version: requestedVersion } = parseToolSpec(toolSpec);
109
+ const config = loadConfig();
110
+ const registryUrl = process.env.ENACT_REGISTRY_URL ??
111
+ config.registry?.url ??
112
+ "https://siikwkfgsmouioodghho.supabase.co/functions/v1";
113
+ const client = createApiClient({ baseUrl: registryUrl });
114
+ // Get tool info to find latest version or use requested version
115
+ const toolInfo = await getToolInfo(client, toolName);
116
+ const targetVersion = requestedVersion ?? toolInfo.latestVersion;
117
+ if (!targetVersion) {
118
+ throw new Error(`No published versions for ${toolName}`);
119
+ }
120
+ // Try loading from cache first
121
+ const cached = tryResolveTool(toolName, {
122
+ skipProject: true,
123
+ skipUser: true,
124
+ version: targetVersion,
125
+ });
126
+ if (cached) {
127
+ return cached;
128
+ }
129
+ // Get version details
130
+ const versionInfo = await getToolVersion(client, toolName, targetVersion);
131
+ // Check if version is yanked
132
+ if (versionInfo.yanked && !options.verbose) {
133
+ const yankMessage = versionInfo.yankReason
134
+ ? `Version ${targetVersion} has been yanked: ${versionInfo.yankReason}`
135
+ : `Version ${targetVersion} has been yanked`;
136
+ info(`${symbols.warning} ${yankMessage}`);
137
+ if (versionInfo.yankReplacement) {
138
+ dim(` Recommended: ${versionInfo.yankReplacement}`);
139
+ }
140
+ }
141
+ // ========================================
142
+ // TRUST VERIFICATION - same as install
143
+ // ========================================
144
+ const trustPolicy = getTrustPolicy();
145
+ const minimumAttestations = getMinimumAttestations();
146
+ const trustedAuditors = getTrustedAuditors();
147
+ // Fetch attestations from registry
148
+ const attestationsResponse = await getAttestationList(client, toolName, targetVersion);
149
+ const attestations = attestationsResponse.attestations;
150
+ if (attestations.length === 0) {
151
+ // No attestations found
152
+ info(`${symbols.warning} Tool ${toolName}@${targetVersion} has no attestations.`);
153
+ if (trustPolicy === "require_attestation") {
154
+ throw new TrustError("Trust policy requires attestations. Execution blocked.");
155
+ }
156
+ if (ctx.isInteractive && trustPolicy === "prompt") {
157
+ const proceed = await confirm("Run unverified tool?");
158
+ if (!proceed) {
159
+ info("Execution cancelled.");
160
+ process.exit(0);
161
+ }
162
+ }
163
+ else if (!ctx.isInteractive && trustPolicy === "prompt") {
164
+ throw new TrustError("Cannot run unverified tools in non-interactive mode.");
165
+ }
166
+ // trustPolicy === "allow" - continue without prompting
167
+ }
168
+ else {
169
+ // Verify attestations locally (never trust registry's verification status)
170
+ const verifiedAuditors = await verifyAllAttestations(client, toolName, targetVersion, versionInfo.bundle.hash ?? "");
171
+ // Check verified auditors against trust config using provider:identity format
172
+ const trustedVerifiedAuditors = verifiedAuditors
173
+ .filter((auditor) => trustedAuditors.includes(auditor.providerIdentity))
174
+ .map((auditor) => auditor.providerIdentity);
175
+ if (trustedVerifiedAuditors.length > 0) {
176
+ // Check if we meet minimum attestations threshold
177
+ if (trustedVerifiedAuditors.length < minimumAttestations) {
178
+ info(`${symbols.warning} Tool ${toolName}@${targetVersion} has ${trustedVerifiedAuditors.length} trusted attestation(s), but ${minimumAttestations} required.`);
179
+ dim(`Trusted attestations: ${trustedVerifiedAuditors.join(", ")}`);
180
+ if (trustPolicy === "require_attestation") {
181
+ throw new TrustError(`Trust policy requires at least ${minimumAttestations} attestation(s) from trusted identities.`);
182
+ }
183
+ if (ctx.isInteractive && trustPolicy === "prompt") {
184
+ const proceed = await confirm("Run with fewer attestations than required?");
185
+ if (!proceed) {
186
+ info("Execution cancelled.");
187
+ process.exit(0);
188
+ }
189
+ }
190
+ else if (!ctx.isInteractive && trustPolicy === "prompt") {
191
+ throw new TrustError("Cannot run tool without meeting minimum attestation requirement in non-interactive mode.");
192
+ }
193
+ // trustPolicy === "allow" - continue without prompting
194
+ }
195
+ else {
196
+ // Tool meets or exceeds minimum attestations
197
+ if (options.verbose) {
198
+ success(`Tool verified by ${trustedVerifiedAuditors.length} trusted identity(ies): ${trustedVerifiedAuditors.join(", ")}`);
199
+ }
200
+ }
201
+ }
202
+ else {
203
+ // Has attestations but none from trusted auditors
204
+ info(`${symbols.warning} Tool ${toolName}@${targetVersion} has ${verifiedAuditors.length} attestation(s), but none from trusted auditors.`);
205
+ if (trustPolicy === "require_attestation") {
206
+ dim(`Your trusted auditors: ${trustedAuditors.join(", ")}`);
207
+ dim(`Tool attested by: ${verifiedAuditors.map((a) => a.providerIdentity).join(", ")}`);
208
+ throw new TrustError("Trust policy requires attestations from trusted identities. Execution blocked.");
209
+ }
210
+ if (ctx.isInteractive && trustPolicy === "prompt") {
211
+ dim(`Attested by: ${verifiedAuditors.map((a) => a.providerIdentity).join(", ")}`);
212
+ dim(`Your trusted auditors: ${trustedAuditors.join(", ")}`);
213
+ const proceed = await confirm("Run anyway?");
214
+ if (!proceed) {
215
+ info("Execution cancelled.");
216
+ process.exit(0);
217
+ }
218
+ }
219
+ else if (!ctx.isInteractive && trustPolicy === "prompt") {
220
+ throw new TrustError("Cannot run tool without trusted attestations in non-interactive mode.");
221
+ }
222
+ // trustPolicy === "allow" - continue without prompting
223
+ }
224
+ }
225
+ // ========================================
226
+ // Download and cache the bundle
227
+ // ========================================
228
+ const bundleResult = await downloadBundle(client, {
229
+ name: toolName,
230
+ version: targetVersion,
231
+ verify: true,
232
+ acknowledgeYanked: versionInfo.yanked,
233
+ });
234
+ // Verify hash
235
+ if (versionInfo.bundle.hash) {
236
+ const downloadedHash = bundleResult.hash.replace("sha256:", "");
237
+ const expectedHash = versionInfo.bundle.hash.replace("sha256:", "");
238
+ if (downloadedHash !== expectedHash) {
239
+ throw new TrustError("Bundle hash mismatch - download may be corrupted or tampered with");
240
+ }
241
+ }
242
+ // Extract to cache
243
+ const extractedDir = await extractToCache(bundleResult.data, toolName, targetVersion);
244
+ // Resolve the cached tool
245
+ const resolution = tryResolveTool(toolName, {
246
+ skipProject: true,
247
+ skipUser: true,
248
+ version: targetVersion,
249
+ });
250
+ if (!resolution) {
251
+ throw new Error(`Failed to resolve cached tool at ${extractedDir}`);
252
+ }
253
+ return resolution;
254
+ }
255
+ /**
256
+ * Display dry run information
257
+ */
258
+ function displayDryRun(manifest, inputs, command, env) {
259
+ newline();
260
+ info(colors.bold("Dry Run Preview"));
261
+ newline();
262
+ keyValue("Tool", manifest.name);
263
+ keyValue("Version", manifest.version ?? "unversioned");
264
+ keyValue("Container", manifest.from ?? "alpine:latest");
265
+ newline();
266
+ if (Object.keys(inputs).length > 0) {
267
+ info("Inputs:");
268
+ for (const [key, value] of Object.entries(inputs)) {
269
+ dim(` ${key}: ${JSON.stringify(value)}`);
270
+ }
271
+ newline();
272
+ }
273
+ if (Object.keys(env).length > 0) {
274
+ info("Environment:");
275
+ for (const [key] of Object.entries(env)) {
276
+ dim(` ${key}: ***`);
277
+ }
278
+ newline();
279
+ }
280
+ info("Command:");
281
+ dim(` ${command.join(" ")}`);
282
+ newline();
283
+ }
284
+ /**
285
+ * Display execution result
286
+ */
287
+ function displayResult(result, options) {
288
+ if (options.json) {
289
+ json(result);
290
+ return;
291
+ }
292
+ if (result.success) {
293
+ if (result.output?.stdout) {
294
+ // Print stdout directly (most common use case)
295
+ process.stdout.write(result.output.stdout);
296
+ // Ensure newline at end
297
+ if (!result.output.stdout.endsWith("\n")) {
298
+ newline();
299
+ }
300
+ }
301
+ if (options.verbose && result.output?.stderr) {
302
+ dim(`stderr: ${result.output.stderr}`);
303
+ }
304
+ if (options.verbose && result.metadata) {
305
+ newline();
306
+ dim(`Duration: ${result.metadata.durationMs}ms`);
307
+ dim(`Exit code: ${result.output?.exitCode ?? 0}`);
308
+ }
309
+ }
310
+ else {
311
+ error(`Execution failed: ${result.error?.message ?? "Unknown error"}`);
312
+ if (result.error?.details) {
313
+ newline();
314
+ dim(JSON.stringify(result.error.details, null, 2));
315
+ }
316
+ if (result.output?.stderr) {
317
+ newline();
318
+ dim("stderr:");
319
+ dim(result.output.stderr);
320
+ }
321
+ }
322
+ }
323
+ /**
324
+ * Run command handler
325
+ */
326
+ async function runHandler(tool, options, ctx) {
327
+ let resolution = null;
328
+ // First, try to resolve locally (project → user → cache)
329
+ if (options.quiet) {
330
+ resolution = tryResolveTool(tool, { startDir: ctx.cwd });
331
+ }
332
+ else {
333
+ const spinner = clack.spinner();
334
+ spinner.start(`Resolving tool: ${tool}`);
335
+ resolution = tryResolveTool(tool, { startDir: ctx.cwd });
336
+ if (resolution) {
337
+ spinner.stop(`${symbols.success} Resolved: ${tool}`);
338
+ }
339
+ else {
340
+ spinner.stop(`${symbols.info} Checking registry...`);
341
+ }
342
+ }
343
+ // If not found locally and --local flag not set, try fetching from registry
344
+ if (!resolution && !options.local) {
345
+ // Check if this looks like a tool name (namespace/name format)
346
+ if (tool.includes("/") && !tool.startsWith("/") && !tool.startsWith(".")) {
347
+ resolution = options.quiet
348
+ ? await fetchAndCacheTool(tool, options, ctx)
349
+ : await withSpinner(`Fetching ${tool} from registry...`, async () => fetchAndCacheTool(tool, options, ctx), `${symbols.success} Cached: ${tool}`);
350
+ }
351
+ }
352
+ if (!resolution) {
353
+ if (options.local) {
354
+ throw new ToolNotFoundError(`${tool} (--local flag set, skipped registry)`);
355
+ }
356
+ throw new ToolNotFoundError(tool);
357
+ }
358
+ const manifest = resolution.manifest;
359
+ // Parse inputs
360
+ const inputs = parseInputArgs(options.args, options.input);
361
+ // Apply defaults from schema
362
+ const inputsWithDefaults = manifest.inputSchema
363
+ ? applyDefaults(inputs, manifest.inputSchema)
364
+ : inputs;
365
+ // Validate inputs against schema
366
+ const validation = validateInputs(inputsWithDefaults, manifest.inputSchema);
367
+ if (!validation.valid) {
368
+ const errors = validation.errors.map((err) => `${err.path}: ${err.message}`).join(", ");
369
+ throw new ValidationError(`Input validation failed: ${errors}`);
370
+ }
371
+ // Use coerced values from validation (or inputs with defaults)
372
+ const finalInputs = validation.coercedValues ?? inputsWithDefaults;
373
+ // Check if this is an instruction-based tool (no command)
374
+ if (!manifest.command) {
375
+ // For instruction tools, just display the markdown body
376
+ let instructions;
377
+ // Try to get body from markdown file
378
+ if (resolution.manifestPath.endsWith(".md")) {
379
+ const { readFileSync } = await import("node:fs");
380
+ const content = readFileSync(resolution.manifestPath, "utf-8");
381
+ // Extract body after frontmatter
382
+ const match = content.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?([\s\S]*)$/);
383
+ if (match?.[1]) {
384
+ instructions = match[1].trim();
385
+ }
386
+ }
387
+ // Fall back to doc field or description
388
+ instructions = instructions || manifest.doc || manifest.description;
389
+ if (options.json) {
390
+ json({
391
+ type: "instruction-tool",
392
+ name: manifest.name,
393
+ version: manifest.version,
394
+ description: manifest.description,
395
+ inputs: finalInputs,
396
+ instructions,
397
+ });
398
+ }
399
+ else {
400
+ // Display the markdown instructions
401
+ if (instructions) {
402
+ process.stdout.write(instructions);
403
+ if (!instructions.endsWith("\n")) {
404
+ newline();
405
+ }
406
+ }
407
+ else {
408
+ info(`Tool "${manifest.name}" has no instructions defined.`);
409
+ }
410
+ }
411
+ return;
412
+ }
413
+ // Prepare command
414
+ const command = prepareCommand(manifest.command, finalInputs);
415
+ // Resolve environment variables (non-secrets)
416
+ const { resolved: envResolved } = resolveToolEnv(manifest.env ?? {}, ctx.cwd);
417
+ const envVars = {};
418
+ for (const [key, resolution] of envResolved) {
419
+ envVars[key] = resolution.value;
420
+ }
421
+ // Resolve secrets
422
+ const secretDeclarations = Object.entries(manifest.env ?? {})
423
+ .filter(([_, v]) => v.secret)
424
+ .map(([k]) => k);
425
+ if (secretDeclarations.length > 0) {
426
+ const namespace = manifest.name.split("/").slice(0, -1).join("/") || manifest.name;
427
+ const secretResults = await resolveSecrets(namespace, secretDeclarations);
428
+ for (const [key, result] of secretResults) {
429
+ if (result.found && result.value) {
430
+ envVars[key] = result.value;
431
+ }
432
+ }
433
+ }
434
+ // Dry run mode
435
+ if (options.dryRun) {
436
+ displayDryRun(manifest, finalInputs, command, envVars);
437
+ return;
438
+ }
439
+ // Execute the tool
440
+ const providerConfig = {};
441
+ if (options.timeout) {
442
+ providerConfig.defaultTimeout = parseTimeout(options.timeout);
443
+ }
444
+ if (options.verbose) {
445
+ providerConfig.verbose = true;
446
+ }
447
+ const provider = new DaggerExecutionProvider(providerConfig);
448
+ try {
449
+ await provider.initialize();
450
+ const executeTask = () => provider.execute(manifest, {
451
+ params: finalInputs,
452
+ envOverrides: envVars,
453
+ }, {
454
+ // Mount the tool directory to /work in the container
455
+ mountDirs: {
456
+ [resolution.sourceDir]: "/work",
457
+ },
458
+ });
459
+ // Build a descriptive message - container may need to be pulled
460
+ const containerImage = manifest.from ?? "node:18-alpine";
461
+ const spinnerMessage = `Running ${manifest.name} (${containerImage})...`;
462
+ const result = options.quiet
463
+ ? await executeTask()
464
+ : await withSpinner(spinnerMessage, executeTask, `${symbols.success} Execution complete`);
465
+ displayResult(result, options);
466
+ if (!result.success) {
467
+ process.exit(EXIT_EXECUTION_ERROR);
468
+ }
469
+ }
470
+ finally {
471
+ // Provider doesn't have cleanup - Dagger handles this
472
+ }
473
+ }
474
+ /**
475
+ * Parse timeout string (e.g., "30s", "5m", "1h")
476
+ */
477
+ function parseTimeout(timeout) {
478
+ const match = timeout.match(/^(\d+)(s|m|h)?$/);
479
+ if (!match) {
480
+ throw new Error(`Invalid timeout format: ${timeout}. Use format like "30s", "5m", or "1h".`);
481
+ }
482
+ const value = Number.parseInt(match[1] ?? "0", 10);
483
+ const unit = match[2] || "s";
484
+ switch (unit) {
485
+ case "h":
486
+ return value * 60 * 60 * 1000;
487
+ case "m":
488
+ return value * 60 * 1000;
489
+ default:
490
+ return value * 1000;
491
+ }
492
+ }
493
+ /**
494
+ * Configure the run command
495
+ */
496
+ export function configureRunCommand(program) {
497
+ program
498
+ .command("run")
499
+ .description("Execute a tool with its manifest-defined command")
500
+ .argument("<tool>", "Tool to run (name, path, or '.' for current directory)")
501
+ .option("-a, --args <json>", "Input arguments as JSON")
502
+ .option("-i, --input <key=value...>", "Input arguments as key=value pairs")
503
+ .option("-t, --timeout <duration>", "Execution timeout (e.g., 30s, 5m)")
504
+ .option("--no-cache", "Disable container caching")
505
+ .option("--local", "Only resolve from local sources")
506
+ .option("--dry-run", "Show what would be executed without running")
507
+ .option("-q, --quiet", "Suppress spinner output, show only tool output")
508
+ .option("-v, --verbose", "Show detailed output")
509
+ .option("--json", "Output result as JSON")
510
+ .action(async (tool, options) => {
511
+ const ctx = {
512
+ cwd: process.cwd(),
513
+ options,
514
+ isCI: Boolean(process.env.CI),
515
+ isInteractive: process.stdout.isTTY ?? false,
516
+ };
517
+ try {
518
+ await runHandler(tool, options, ctx);
519
+ }
520
+ catch (err) {
521
+ handleError(err, options.verbose ? { verbose: true } : undefined);
522
+ }
523
+ });
524
+ }
525
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/run/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * enact search command
3
+ *
4
+ * Search the Enact registry for tools.
5
+ * With --local or -g, search installed tools instead.
6
+ */
7
+ import type { Command } from "commander";
8
+ /**
9
+ * Configure the search command
10
+ */
11
+ export declare function configureSearchCommand(program: Command): void;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/search/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkUzC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B7D"}