@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,275 @@
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 { existsSync, readdirSync } from "node:fs";
8
+ import { join } from "node:path";
9
+ import { createApiClient, searchTools } from "@enactprotocol/api";
10
+ import { getProjectEnactDir, listInstalledTools, loadConfig, tryLoadManifestFromDir, } from "@enactprotocol/shared";
11
+ import { dim, error, formatError, header, info, json, newline, table, } from "../../utils";
12
+ /**
13
+ * Format download count for display
14
+ */
15
+ function formatDownloads(count) {
16
+ if (count >= 1000000) {
17
+ return `${(count / 1000000).toFixed(1)}M`;
18
+ }
19
+ if (count >= 1000) {
20
+ return `${(count / 1000).toFixed(1)}K`;
21
+ }
22
+ return String(count);
23
+ }
24
+ /**
25
+ * Truncate description to fit table
26
+ */
27
+ function truncateDescription(desc, maxLen) {
28
+ if (desc.length <= maxLen)
29
+ return desc;
30
+ return `${desc.substring(0, maxLen - 3)}...`;
31
+ }
32
+ /**
33
+ * Search installed tools locally
34
+ */
35
+ function searchLocalTools(query, scope, cwd) {
36
+ const tools = [];
37
+ const queryLower = query.toLowerCase();
38
+ if (scope === "global") {
39
+ // Search global tools via tools.json
40
+ const installedTools = listInstalledTools("global");
41
+ for (const tool of installedTools) {
42
+ // Load manifest from cache to get description
43
+ const loaded = tryLoadManifestFromDir(tool.cachePath);
44
+ const name = tool.name.toLowerCase();
45
+ const desc = (loaded?.manifest.description ?? "").toLowerCase();
46
+ // Simple fuzzy matching: check if query terms appear in name or description
47
+ const queryTerms = queryLower.split(/\s+/);
48
+ const matches = queryTerms.every((term) => name.includes(term) || desc.includes(term));
49
+ if (matches) {
50
+ tools.push({
51
+ name: tool.name,
52
+ version: tool.version,
53
+ description: loaded?.manifest.description ?? "-",
54
+ location: tool.cachePath,
55
+ scope: "global",
56
+ });
57
+ }
58
+ }
59
+ return tools;
60
+ }
61
+ // Search project tools by walking directory
62
+ const projectDir = getProjectEnactDir(cwd);
63
+ const baseDir = projectDir ? join(projectDir, "tools") : null;
64
+ if (!baseDir || !existsSync(baseDir)) {
65
+ return tools;
66
+ }
67
+ // Walk the tools directory structure
68
+ function walkDir(dir) {
69
+ try {
70
+ const entries = readdirSync(dir, { withFileTypes: true });
71
+ for (const entry of entries) {
72
+ if (!entry.isDirectory())
73
+ continue;
74
+ const entryPath = join(dir, entry.name);
75
+ // Try to load manifest from this directory
76
+ const loaded = tryLoadManifestFromDir(entryPath);
77
+ if (loaded) {
78
+ const manifest = loaded.manifest;
79
+ const name = manifest.name.toLowerCase();
80
+ const desc = (manifest.description ?? "").toLowerCase();
81
+ // Simple fuzzy matching: check if query terms appear in name or description
82
+ const queryTerms = queryLower.split(/\s+/);
83
+ const matches = queryTerms.every((term) => name.includes(term) || desc.includes(term));
84
+ if (matches) {
85
+ tools.push({
86
+ name: manifest.name,
87
+ version: manifest.version ?? "-",
88
+ description: manifest.description ?? "-",
89
+ location: entryPath,
90
+ scope: "project",
91
+ });
92
+ }
93
+ }
94
+ else {
95
+ // Recurse into subdirectories (for nested namespaces)
96
+ walkDir(entryPath);
97
+ }
98
+ }
99
+ }
100
+ catch {
101
+ // Ignore errors reading directories
102
+ }
103
+ }
104
+ walkDir(baseDir);
105
+ return tools;
106
+ }
107
+ /**
108
+ * Search command handler
109
+ */
110
+ async function searchHandler(query, options, ctx) {
111
+ // Handle local search (--local or -g)
112
+ if (options.local || options.global) {
113
+ const scope = options.global ? "global" : "project";
114
+ const results = searchLocalTools(query, scope, ctx.cwd);
115
+ // JSON output
116
+ if (options.json) {
117
+ json({ query, scope, results, total: results.length });
118
+ return;
119
+ }
120
+ // No results
121
+ if (results.length === 0) {
122
+ info(`No ${scope} tools found matching "${query}"`);
123
+ dim(scope === "project"
124
+ ? "Try 'enact search -g' to search global tools, or search the registry without flags"
125
+ : "Try searching the registry without the -g flag");
126
+ return;
127
+ }
128
+ header(`${scope === "global" ? "Global" : "Project"} Tools matching "${query}"`);
129
+ newline();
130
+ const columns = [
131
+ { key: "name", header: "Name", width: 28 },
132
+ { key: "description", header: "Description", width: 50 },
133
+ ];
134
+ if (ctx.options.verbose) {
135
+ columns.push({ key: "version", header: "Version", width: 10 });
136
+ columns.push({ key: "location", header: "Location", width: 40 });
137
+ }
138
+ const rows = results.map((r) => ({
139
+ name: r.name,
140
+ description: truncateDescription(r.description, 48),
141
+ version: r.version,
142
+ location: r.location,
143
+ }));
144
+ table(rows, columns);
145
+ newline();
146
+ dim(`Found ${results.length} matching tool(s)`);
147
+ return;
148
+ }
149
+ // Default: Registry search
150
+ const config = loadConfig();
151
+ const registryUrl = process.env.ENACT_REGISTRY_URL ??
152
+ config.registry?.url ??
153
+ "https://siikwkfgsmouioodghho.supabase.co/functions/v1";
154
+ const authToken = config.registry?.authToken;
155
+ const client = createApiClient({
156
+ baseUrl: registryUrl,
157
+ authToken: authToken,
158
+ });
159
+ const limit = options.limit ? Number.parseInt(options.limit, 10) : 20;
160
+ const offset = options.offset ? Number.parseInt(options.offset, 10) : 0;
161
+ if (ctx.options.verbose) {
162
+ info(`Searching for: "${query}"`);
163
+ if (options.tags) {
164
+ info(`Tags: ${options.tags}`);
165
+ }
166
+ }
167
+ try {
168
+ const response = await searchTools(client, {
169
+ query,
170
+ tags: options.tags,
171
+ limit,
172
+ offset,
173
+ });
174
+ // JSON output
175
+ if (options.json) {
176
+ json({
177
+ query,
178
+ results: response.results,
179
+ total: response.total,
180
+ limit: response.limit,
181
+ offset: response.offset,
182
+ hasMore: response.hasMore,
183
+ });
184
+ return;
185
+ }
186
+ // No results
187
+ if (response.results.length === 0) {
188
+ info(`No tools found matching "${query}"`);
189
+ dim("Try a different search term or remove tag filters");
190
+ return;
191
+ }
192
+ // Format results for table
193
+ const rows = response.results.map((result) => ({
194
+ name: result.name,
195
+ version: result.version,
196
+ description: truncateDescription(result.description, 40),
197
+ rating: result.trustStatus ? `${result.trustStatus.auditorCount} ✓` : "-",
198
+ downloads: formatDownloads(result.downloads),
199
+ }));
200
+ header(`Search Results for "${query}"`);
201
+ newline();
202
+ const columns = [
203
+ { key: "name", header: "Name", width: 30 },
204
+ { key: "version", header: "Version", width: 10 },
205
+ { key: "description", header: "Description", width: 42 },
206
+ { key: "rating", header: "Rating", width: 8 },
207
+ { key: "downloads", header: "↓", width: 8 },
208
+ ];
209
+ table(rows, columns);
210
+ newline();
211
+ // Pagination info
212
+ const showing = offset + response.results.length;
213
+ dim(`Showing ${offset + 1}-${showing} of ${response.total} results`);
214
+ if (response.hasMore) {
215
+ dim(`Use --offset ${showing} to see more results`);
216
+ }
217
+ }
218
+ catch (err) {
219
+ // Handle specific error types
220
+ if (err instanceof Error) {
221
+ const message = err.message.toLowerCase();
222
+ // Connection errors
223
+ if (message.includes("fetch") ||
224
+ message.includes("econnrefused") ||
225
+ message.includes("network") ||
226
+ message.includes("timeout") ||
227
+ err.name === "AbortError") {
228
+ error("Unable to connect to registry");
229
+ dim("Check your internet connection or try again later");
230
+ dim(`Registry URL: ${registryUrl}`);
231
+ process.exit(1);
232
+ }
233
+ // JSON parsing errors (server returned non-JSON)
234
+ if (message.includes("json") || message.includes("unexpected token")) {
235
+ error("Registry returned an invalid response");
236
+ dim("The server may be down or experiencing issues");
237
+ dim(`Registry URL: ${registryUrl}`);
238
+ process.exit(1);
239
+ }
240
+ }
241
+ // Re-throw other errors
242
+ throw err;
243
+ }
244
+ }
245
+ /**
246
+ * Configure the search command
247
+ */
248
+ export function configureSearchCommand(program) {
249
+ program
250
+ .command("search <query>")
251
+ .description("Search the Enact registry for tools")
252
+ .option("--local", "Search project tools (.enact/tools/) instead of registry")
253
+ .option("-g, --global", "Search global tools (~/.enact/tools/) instead of registry")
254
+ .option("-t, --tags <tags>", "Filter by tags (comma-separated, registry only)")
255
+ .option("-l, --limit <number>", "Maximum results to return (default: 20, registry only)")
256
+ .option("-o, --offset <number>", "Pagination offset (default: 0, registry only)")
257
+ .option("-v, --verbose", "Show detailed output")
258
+ .option("--json", "Output as JSON")
259
+ .action(async (query, options) => {
260
+ const ctx = {
261
+ cwd: process.cwd(),
262
+ options,
263
+ isCI: Boolean(process.env.CI),
264
+ isInteractive: process.stdout.isTTY ?? false,
265
+ };
266
+ try {
267
+ await searchHandler(query, options, ctx);
268
+ }
269
+ catch (err) {
270
+ error(formatError(err));
271
+ process.exit(1);
272
+ }
273
+ });
274
+ }
275
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/search/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * enact setup command
3
+ *
4
+ * Set up Enact configuration interactively
5
+ */
6
+ import type { Command } from "commander";
7
+ /**
8
+ * Configure the setup command
9
+ */
10
+ export declare function configureSetupCommand(program: Command): void;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/setup/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2OzC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyB5D"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * enact setup command
3
+ *
4
+ * Set up Enact configuration interactively
5
+ */
6
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
7
+ import { dirname } from "node:path";
8
+ import * as clack from "@clack/prompts";
9
+ import { getConfigPath, loadConfig } from "@enactprotocol/shared";
10
+ import { dim, error, formatError, info } from "../../utils";
11
+ /**
12
+ * Default configuration values
13
+ */
14
+ const DEFAULT_CONFIG = {
15
+ version: "1.0.0",
16
+ trust: {
17
+ minimum_attestations: 1,
18
+ },
19
+ cache: {
20
+ maxSizeMb: 1024,
21
+ ttlSeconds: 604800, // 7 days
22
+ },
23
+ execution: {
24
+ defaultTimeout: "30s",
25
+ verbose: false,
26
+ },
27
+ registry: {
28
+ url: "https://siikwkfgsmouioodghho.supabase.co/functions/v1",
29
+ },
30
+ };
31
+ /**
32
+ * Setup command handler
33
+ */
34
+ async function setupHandler(options, _ctx) {
35
+ const actualScope = options.global ? "global" : "project";
36
+ const configPath = getConfigPath();
37
+ // Check if config already exists
38
+ if (existsSync(configPath) && !options.force) {
39
+ clack.log.warn(`Configuration already exists at: ${configPath}`);
40
+ const overwrite = await clack.confirm({
41
+ message: "Overwrite existing configuration?",
42
+ });
43
+ if (clack.isCancel(overwrite) || !overwrite) {
44
+ clack.cancel("Setup cancelled");
45
+ process.exit(0);
46
+ }
47
+ }
48
+ clack.intro(`Setting up Enact ${actualScope} configuration`);
49
+ // Load existing config if available
50
+ let existingConfig = {};
51
+ try {
52
+ if (existsSync(configPath)) {
53
+ existingConfig = loadConfig();
54
+ }
55
+ }
56
+ catch {
57
+ // Ignore errors loading existing config
58
+ }
59
+ // Prompt for configuration
60
+ const registryUrl = await clack.text({
61
+ message: "Registry URL (recommended: https://siikwkfgsmouioodghho.supabase.co/functions/v1)",
62
+ placeholder: "https://siikwkfgsmouioodghho.supabase.co/functions/v1",
63
+ defaultValue: "https://siikwkfgsmouioodghho.supabase.co/functions/v1",
64
+ validate: (value) => {
65
+ // Allow empty to use default
66
+ if (!value || value.trim() === "")
67
+ return undefined;
68
+ try {
69
+ new URL(value);
70
+ return undefined;
71
+ }
72
+ catch {
73
+ return "Invalid URL format";
74
+ }
75
+ },
76
+ });
77
+ if (clack.isCancel(registryUrl)) {
78
+ clack.cancel("Setup cancelled");
79
+ process.exit(0);
80
+ }
81
+ // Use default if empty
82
+ const finalRegistryUrl = registryUrl.trim() || "https://siikwkfgsmouioodghho.supabase.co/functions/v1";
83
+ const isLocalDev = finalRegistryUrl.includes("localhost") || finalRegistryUrl.includes("127.0.0.1");
84
+ const isOfficialRegistry = finalRegistryUrl.includes("siikwkfgsmouioodghho.supabase.co");
85
+ let authToken;
86
+ if (isLocalDev) {
87
+ const useAnonKey = await clack.confirm({
88
+ message: "Use local development anon key?",
89
+ initialValue: true,
90
+ });
91
+ if (clack.isCancel(useAnonKey)) {
92
+ clack.cancel("Setup cancelled");
93
+ process.exit(0);
94
+ }
95
+ if (useAnonKey) {
96
+ authToken =
97
+ "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0";
98
+ }
99
+ }
100
+ else if (isOfficialRegistry) {
101
+ // Use official registry anon key
102
+ authToken =
103
+ "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InNpaWt3a2Znc21vdWlvb2RnaGhvIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjQ2MTkzMzksImV4cCI6MjA4MDE5NTMzOX0.kxnx6-IPFhmGx6rzNx36vbyhFMFZKP_jFqaDbKnJ_E0";
104
+ }
105
+ const minimumAttestations = await clack.text({
106
+ message: "Minimum attestations required for trust",
107
+ placeholder: "1",
108
+ defaultValue: String(existingConfig.trust?.minimum_attestations || DEFAULT_CONFIG.trust?.minimum_attestations),
109
+ validate: (value) => {
110
+ if (!value || value.trim() === "")
111
+ return undefined; // Allow empty for default
112
+ const num = Number(value);
113
+ if (Number.isNaN(num) || num < 0)
114
+ return "Must be a positive number";
115
+ return undefined;
116
+ },
117
+ });
118
+ if (clack.isCancel(minimumAttestations)) {
119
+ clack.cancel("Setup cancelled");
120
+ process.exit(0);
121
+ }
122
+ const finalMinAttestations = minimumAttestations.trim()
123
+ ? Number(minimumAttestations)
124
+ : existingConfig.trust?.minimum_attestations || DEFAULT_CONFIG.trust?.minimum_attestations || 1;
125
+ const cacheMaxSize = await clack.text({
126
+ message: "Maximum cache size (MB)",
127
+ placeholder: "1024",
128
+ defaultValue: String(existingConfig.cache?.maxSizeMb || DEFAULT_CONFIG.cache?.maxSizeMb),
129
+ validate: (value) => {
130
+ if (!value || value.trim() === "")
131
+ return undefined; // Allow empty for default
132
+ const num = Number(value);
133
+ if (Number.isNaN(num) || num <= 0)
134
+ return "Must be a positive number";
135
+ return undefined;
136
+ },
137
+ });
138
+ if (clack.isCancel(cacheMaxSize)) {
139
+ clack.cancel("Setup cancelled");
140
+ process.exit(0);
141
+ }
142
+ const finalCacheMaxSize = cacheMaxSize.trim()
143
+ ? Number(cacheMaxSize)
144
+ : existingConfig.cache?.maxSizeMb || DEFAULT_CONFIG.cache?.maxSizeMb || 1024;
145
+ const defaultTimeout = await clack.text({
146
+ message: "Default execution timeout",
147
+ placeholder: "30s",
148
+ defaultValue: existingConfig.execution?.defaultTimeout || DEFAULT_CONFIG.execution?.defaultTimeout || "30s",
149
+ validate: (value) => {
150
+ if (!value || value.trim() === "")
151
+ return undefined; // Allow empty for default
152
+ if (!/^\d+[smh]$/.test(value)) {
153
+ return "Must be in format: 30s, 5m, or 1h";
154
+ }
155
+ return undefined;
156
+ },
157
+ });
158
+ if (clack.isCancel(defaultTimeout)) {
159
+ clack.cancel("Setup cancelled");
160
+ process.exit(0);
161
+ }
162
+ const finalDefaultTimeout = defaultTimeout.trim() ||
163
+ existingConfig.execution?.defaultTimeout ||
164
+ DEFAULT_CONFIG.execution?.defaultTimeout ||
165
+ "30s";
166
+ // Build configuration
167
+ const config = {
168
+ version: "1.0.0",
169
+ trust: {
170
+ minimum_attestations: finalMinAttestations,
171
+ },
172
+ cache: {
173
+ maxSizeMb: finalCacheMaxSize,
174
+ ttlSeconds: existingConfig.cache?.ttlSeconds || DEFAULT_CONFIG.cache?.ttlSeconds || 604800,
175
+ },
176
+ execution: {
177
+ defaultTimeout: finalDefaultTimeout,
178
+ verbose: existingConfig.execution?.verbose || DEFAULT_CONFIG.execution?.verbose || false,
179
+ },
180
+ registry: {
181
+ url: finalRegistryUrl,
182
+ ...(authToken && { authToken }),
183
+ },
184
+ };
185
+ // Save configuration
186
+ const configDir = dirname(configPath);
187
+ if (!existsSync(configDir)) {
188
+ mkdirSync(configDir, { recursive: true });
189
+ }
190
+ // Convert to YAML format
191
+ const yaml = [
192
+ `version: ${config.version}`,
193
+ "trust:",
194
+ ` minimum_attestations: ${config.trust?.minimum_attestations}`,
195
+ "cache:",
196
+ ` maxSizeMb: ${config.cache?.maxSizeMb}`,
197
+ ` ttlSeconds: ${config.cache?.ttlSeconds}`,
198
+ "execution:",
199
+ ` defaultTimeout: ${config.execution?.defaultTimeout}`,
200
+ ` verbose: ${config.execution?.verbose}`,
201
+ "registry:",
202
+ ` url: ${config.registry?.url}`,
203
+ ...(config.registry?.authToken ? [` authToken: ${config.registry.authToken}`] : []),
204
+ ].join("\n");
205
+ writeFileSync(configPath, `${yaml}\n`, "utf-8");
206
+ clack.outro(`Configuration saved to ${configPath}`);
207
+ if (options.verbose) {
208
+ info("\nConfiguration:");
209
+ dim(yaml);
210
+ }
211
+ }
212
+ /**
213
+ * Configure the setup command
214
+ */
215
+ export function configureSetupCommand(program) {
216
+ program
217
+ .command("setup")
218
+ .description("Set up Enact configuration")
219
+ .option("-g, --global", "Initialize global configuration (~/.enact/config.yaml)")
220
+ .option("-f, --force", "Overwrite existing configuration without prompting")
221
+ .option("-v, --verbose", "Show detailed output")
222
+ .action(async (options) => {
223
+ const ctx = {
224
+ cwd: process.cwd(),
225
+ options,
226
+ isCI: Boolean(process.env.CI),
227
+ isInteractive: process.stdout.isTTY ?? false,
228
+ };
229
+ try {
230
+ await setupHandler(options, ctx);
231
+ }
232
+ catch (err) {
233
+ error(formatError(err));
234
+ if (options.verbose && err instanceof Error && err.stack) {
235
+ dim(err.stack);
236
+ }
237
+ process.exit(1);
238
+ }
239
+ });
240
+ }
241
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/setup/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * enact sign command
3
+ *
4
+ * Cryptographically sign a tool using Sigstore keyless signing.
5
+ * Creates an in-toto attestation, logs to Rekor transparency log,
6
+ * and submits the attestation to the Enact registry.
7
+ *
8
+ * Supports both local paths and remote tool references:
9
+ * - Local: enact sign ./my-tool
10
+ * - Remote: enact sign author/tool@1.0.0
11
+ */
12
+ import type { Command } from "commander";
13
+ /**
14
+ * Configure the sign command
15
+ */
16
+ export declare function configureSignCommand(program: Command): void;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sign/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAyBH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqkBzC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgC3D"}