@1claw/cli 0.34.0 → 0.34.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 (44) hide show
  1. package/README.md +122 -1
  2. package/dist/src/ai-clients.d.ts +19 -0
  3. package/dist/src/ai-clients.d.ts.map +1 -0
  4. package/dist/src/ai-clients.js +218 -0
  5. package/dist/src/ai-clients.js.map +1 -0
  6. package/dist/src/commands/daemon.d.ts +3 -0
  7. package/dist/src/commands/daemon.d.ts.map +1 -0
  8. package/dist/src/commands/daemon.js +347 -0
  9. package/dist/src/commands/daemon.js.map +1 -0
  10. package/dist/src/commands/env.d.ts.map +1 -1
  11. package/dist/src/commands/env.js +122 -19
  12. package/dist/src/commands/env.js.map +1 -1
  13. package/dist/src/commands/import.d.ts +3 -0
  14. package/dist/src/commands/import.d.ts.map +1 -0
  15. package/dist/src/commands/import.js +175 -0
  16. package/dist/src/commands/import.js.map +1 -0
  17. package/dist/src/commands/local.d.ts +3 -0
  18. package/dist/src/commands/local.d.ts.map +1 -0
  19. package/dist/src/commands/local.js +505 -0
  20. package/dist/src/commands/local.js.map +1 -0
  21. package/dist/src/commands/setup.d.ts +3 -0
  22. package/dist/src/commands/setup.d.ts.map +1 -0
  23. package/dist/src/commands/setup.js +304 -0
  24. package/dist/src/commands/setup.js.map +1 -0
  25. package/dist/src/index.d.ts.map +1 -1
  26. package/dist/src/index.js +9 -0
  27. package/dist/src/index.js.map +1 -1
  28. package/dist/src/local-cache.d.ts +19 -0
  29. package/dist/src/local-cache.d.ts.map +1 -0
  30. package/dist/src/local-cache.js +131 -0
  31. package/dist/src/local-cache.js.map +1 -0
  32. package/dist/src/local-policy.d.ts +39 -0
  33. package/dist/src/local-policy.d.ts.map +1 -0
  34. package/dist/src/local-policy.js +123 -0
  35. package/dist/src/local-policy.js.map +1 -0
  36. package/dist/src/local-vault.d.ts +39 -0
  37. package/dist/src/local-vault.d.ts.map +1 -0
  38. package/dist/src/local-vault.js +166 -0
  39. package/dist/src/local-vault.js.map +1 -0
  40. package/dist/src/secret-proxy.d.ts +27 -0
  41. package/dist/src/secret-proxy.d.ts.map +1 -0
  42. package/dist/src/secret-proxy.js +73 -0
  43. package/dist/src/secret-proxy.js.map +1 -0
  44. package/package.json +1 -1
@@ -0,0 +1,347 @@
1
+ import { Command } from "commander";
2
+ import { createServer, } from "node:http";
3
+ import { existsSync, readFileSync, writeFileSync, unlinkSync } from "node:fs";
4
+ import { homedir } from "node:os";
5
+ import { join } from "node:path";
6
+ import chalk from "chalk";
7
+ import inquirer from "inquirer";
8
+ import { printSuccess, printError, printWarning, printInfo, printKeyValue, printTable, } from "../output.js";
9
+ import { vaultExists, loadVault, getSecret, listSecrets, } from "../local-vault.js";
10
+ import { loadPolicy, savePolicy, isHostAllowed, setSecretPolicy, removeSecretPolicy, getPolicyPath, policyExists, } from "../local-policy.js";
11
+ import { proxyRequest } from "../secret-proxy.js";
12
+ const CONFIG_DIR = process.env.ONECLAW_CONFIG_DIR || join(homedir(), ".config", "1claw");
13
+ const SOCKET_PATH = process.env.ONECLAW_DAEMON_SOCKET || join(CONFIG_DIR, "daemon.sock");
14
+ const PID_FILE = join(CONFIG_DIR, "daemon.pid");
15
+ function readBody(req) {
16
+ return new Promise((resolve, reject) => {
17
+ const chunks = [];
18
+ req.on("data", (c) => chunks.push(c));
19
+ req.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")));
20
+ req.on("error", reject);
21
+ });
22
+ }
23
+ function jsonResponse(res, status, body) {
24
+ res.writeHead(status, { "Content-Type": "application/json" });
25
+ res.end(JSON.stringify(body));
26
+ }
27
+ export const daemonCommand = new Command("daemon").description("Local daemon — serves secrets over a Unix socket without exposing values");
28
+ // ── daemon start ─────────────────────────────────────────
29
+ daemonCommand
30
+ .command("start")
31
+ .description("Start the local secret daemon on a Unix socket")
32
+ .option("--foreground", "Run in the foreground (don't daemonize)")
33
+ .option("--socket <path>", "Custom socket path")
34
+ .action(async (opts) => {
35
+ try {
36
+ if (!vaultExists()) {
37
+ printError("No local vault. Run `1claw local init` first.");
38
+ process.exit(1);
39
+ }
40
+ const socketPath = opts.socket ?? SOCKET_PATH;
41
+ if (existsSync(socketPath)) {
42
+ try {
43
+ unlinkSync(socketPath);
44
+ }
45
+ catch {
46
+ printError(`Socket ${socketPath} exists and cannot be removed. Is another daemon running?`);
47
+ process.exit(1);
48
+ }
49
+ }
50
+ console.log();
51
+ printInfo("Unlocking local vault to start daemon...");
52
+ const { passphrase } = await inquirer.prompt([
53
+ {
54
+ type: "password",
55
+ name: "passphrase",
56
+ message: "Vault passphrase:",
57
+ mask: "*",
58
+ },
59
+ ]);
60
+ let vault;
61
+ try {
62
+ vault = loadVault(passphrase);
63
+ }
64
+ catch {
65
+ printError("Wrong passphrase or corrupted vault file.");
66
+ process.exit(1);
67
+ }
68
+ const policy = loadPolicy();
69
+ const secretCount = Object.keys(vault.secrets).length;
70
+ const policyCount = Object.keys(policy.secrets).length;
71
+ const server = createDaemonServer(vault, policy);
72
+ server.listen(socketPath, () => {
73
+ try {
74
+ const { chmodSync } = require("node:fs");
75
+ chmodSync(socketPath, 0o600);
76
+ }
77
+ catch {
78
+ // best-effort
79
+ }
80
+ writeFileSync(PID_FILE, String(process.pid));
81
+ console.log();
82
+ printSuccess(`1Claw daemon running on ${chalk.bold(socketPath)}`);
83
+ printInfo(`Serving ${secretCount} secret(s), ${policyCount} policy rule(s).`);
84
+ printInfo("Press Ctrl+C to stop.");
85
+ console.log();
86
+ printInfo("Configure MCP for local mode:");
87
+ console.log(chalk.dim(` 1claw setup --local\n` +
88
+ ` # or set ONECLAW_DAEMON_SOCKET=${socketPath}`));
89
+ console.log();
90
+ });
91
+ const shutdown = () => {
92
+ console.log();
93
+ printInfo("Shutting down daemon...");
94
+ server.close(() => {
95
+ try {
96
+ unlinkSync(socketPath);
97
+ }
98
+ catch { /* ok */ }
99
+ try {
100
+ unlinkSync(PID_FILE);
101
+ }
102
+ catch { /* ok */ }
103
+ process.exit(0);
104
+ });
105
+ setTimeout(() => process.exit(0), 3000);
106
+ };
107
+ process.on("SIGINT", shutdown);
108
+ process.on("SIGTERM", shutdown);
109
+ }
110
+ catch (err) {
111
+ if (err instanceof Error)
112
+ printError(err.message);
113
+ else
114
+ printError(String(err));
115
+ process.exit(1);
116
+ }
117
+ });
118
+ // ── daemon stop ──────────────────────────────────────────
119
+ daemonCommand
120
+ .command("stop")
121
+ .description("Stop the running daemon")
122
+ .action(() => {
123
+ if (!existsSync(PID_FILE)) {
124
+ printInfo("No daemon PID file found. The daemon may not be running.");
125
+ return;
126
+ }
127
+ try {
128
+ const pid = parseInt(readFileSync(PID_FILE, "utf-8").trim(), 10);
129
+ process.kill(pid, "SIGTERM");
130
+ printSuccess(`Sent SIGTERM to daemon (PID ${pid}).`);
131
+ }
132
+ catch (err) {
133
+ if (err.code === "ESRCH") {
134
+ printWarning("Daemon process not found. Cleaning up PID file.");
135
+ }
136
+ else {
137
+ printError(`Failed to stop daemon: ${err.message}`);
138
+ }
139
+ }
140
+ try {
141
+ unlinkSync(PID_FILE);
142
+ }
143
+ catch { /* ok */ }
144
+ });
145
+ // ── daemon status ────────────────────────────────────────
146
+ daemonCommand
147
+ .command("status")
148
+ .description("Show daemon status")
149
+ .action(() => {
150
+ const socketExists = existsSync(process.env.ONECLAW_DAEMON_SOCKET || SOCKET_PATH);
151
+ let pidRunning = false;
152
+ let pid = "";
153
+ if (existsSync(PID_FILE)) {
154
+ pid = readFileSync(PID_FILE, "utf-8").trim();
155
+ try {
156
+ process.kill(parseInt(pid, 10), 0);
157
+ pidRunning = true;
158
+ }
159
+ catch {
160
+ pidRunning = false;
161
+ }
162
+ }
163
+ printKeyValue([
164
+ [
165
+ "Daemon",
166
+ pidRunning
167
+ ? chalk.green("running") + ` (PID ${pid})`
168
+ : chalk.dim("stopped"),
169
+ ],
170
+ [
171
+ "Socket",
172
+ socketExists
173
+ ? chalk.green(SOCKET_PATH)
174
+ : chalk.dim("not found"),
175
+ ],
176
+ [
177
+ "Policy",
178
+ policyExists()
179
+ ? chalk.green(getPolicyPath())
180
+ : chalk.dim("none (using defaults)"),
181
+ ],
182
+ ]);
183
+ });
184
+ // ── daemon policy ────────────────────────────────────────
185
+ const policyCmd = daemonCommand
186
+ .command("policy")
187
+ .description("Manage per-secret host allowlist policies");
188
+ policyCmd
189
+ .command("add <secret>")
190
+ .description("Add or update a policy for a secret")
191
+ .requiredOption("--hosts <hosts>", "Comma-separated allowed hosts (e.g. api.stripe.com,*.openai.com)")
192
+ .option("--inject-as <method>", "Injection method: bearer, header, basic, query", "bearer")
193
+ .option("--header-name <name>", "Header name (for inject-as=header)")
194
+ .option("--query-param <param>", "Query parameter name (for inject-as=query)")
195
+ .action((secret, opts) => {
196
+ const policy = loadPolicy();
197
+ const sp = {
198
+ allowed_hosts: opts.hosts.split(",").map((h) => h.trim()),
199
+ inject_as: opts.injectAs,
200
+ };
201
+ if (opts.headerName)
202
+ sp.header_name = opts.headerName;
203
+ if (opts.queryParam)
204
+ sp.query_param = opts.queryParam;
205
+ setSecretPolicy(policy, secret, sp);
206
+ savePolicy(policy);
207
+ printSuccess(`Policy set for ${chalk.bold(secret)}: allowed hosts = [${sp.allowed_hosts.join(", ")}]`);
208
+ });
209
+ policyCmd
210
+ .command("remove <secret>")
211
+ .description("Remove a policy for a secret")
212
+ .action((secret) => {
213
+ const policy = loadPolicy();
214
+ if (removeSecretPolicy(policy, secret)) {
215
+ savePolicy(policy);
216
+ printSuccess(`Policy removed for ${chalk.bold(secret)}.`);
217
+ }
218
+ else {
219
+ printWarning(`No policy found for "${secret}".`);
220
+ }
221
+ });
222
+ policyCmd
223
+ .command("list")
224
+ .alias("ls")
225
+ .description("List all secret policies")
226
+ .action(() => {
227
+ const policy = loadPolicy();
228
+ const entries = Object.entries(policy.secrets);
229
+ if (entries.length === 0) {
230
+ printInfo("No policies configured. Add one with: 1claw daemon policy add <secret> --hosts <hosts>");
231
+ return;
232
+ }
233
+ printTable(entries.map(([name, sp]) => ({
234
+ secret: name,
235
+ hosts: sp.allowed_hosts.join(", "),
236
+ inject: sp.inject_as,
237
+ })), [
238
+ { key: "secret", header: "Secret" },
239
+ { key: "hosts", header: "Allowed Hosts" },
240
+ { key: "inject", header: "Inject As" },
241
+ ]);
242
+ });
243
+ // ── Daemon HTTP server on Unix socket ────────────────────
244
+ function createDaemonServer(vault, policy) {
245
+ return createServer(async (req, res) => {
246
+ const path = req.url ?? "/";
247
+ const method = req.method ?? "GET";
248
+ // Health check
249
+ if (path === "/health") {
250
+ jsonResponse(res, 200, {
251
+ status: "ok",
252
+ daemon: "1claw",
253
+ secrets: Object.keys(vault.secrets).length,
254
+ policies: Object.keys(policy.secrets).length,
255
+ });
256
+ return;
257
+ }
258
+ // List secret names (never values)
259
+ if (path === "/secrets" && method === "GET") {
260
+ const secrets = listSecrets(vault).map((s) => ({
261
+ name: s.name,
262
+ type: s.type,
263
+ synced: s.synced,
264
+ }));
265
+ jsonResponse(res, 200, { secrets });
266
+ return;
267
+ }
268
+ // Check if a secret exists + get metadata
269
+ if (path.startsWith("/secrets/") && method === "GET") {
270
+ const name = decodeURIComponent(path.slice("/secrets/".length));
271
+ const secret = getSecret(vault, name);
272
+ if (!secret) {
273
+ jsonResponse(res, 404, { error: `Secret "${name}" not found` });
274
+ return;
275
+ }
276
+ jsonResponse(res, 200, {
277
+ name,
278
+ type: secret.type,
279
+ synced: secret.synced_to_cloud,
280
+ created_at: secret.created_at,
281
+ updated_at: secret.updated_at,
282
+ has_policy: !!policy.secrets[name],
283
+ });
284
+ return;
285
+ }
286
+ // Proxy request — inject secret without exposing value
287
+ if (path === "/proxy" && method === "POST") {
288
+ let body;
289
+ try {
290
+ body = await readBody(req);
291
+ }
292
+ catch {
293
+ jsonResponse(res, 400, { error: "Failed to read request body" });
294
+ return;
295
+ }
296
+ let proxyReq;
297
+ try {
298
+ proxyReq = JSON.parse(body);
299
+ }
300
+ catch {
301
+ jsonResponse(res, 400, { error: "Invalid JSON body" });
302
+ return;
303
+ }
304
+ if (!proxyReq.secretName || !proxyReq.url) {
305
+ jsonResponse(res, 400, {
306
+ error: "Missing required fields: secretName, url",
307
+ });
308
+ return;
309
+ }
310
+ const result = await proxyRequest(proxyReq, vault, policy);
311
+ if (!result.success) {
312
+ jsonResponse(res, 403, { error: result.error });
313
+ return;
314
+ }
315
+ jsonResponse(res, 200, {
316
+ status: result.response.status,
317
+ headers: result.response.headers,
318
+ body: result.response.body,
319
+ });
320
+ return;
321
+ }
322
+ // Check policy for a secret + host
323
+ if (path === "/check-policy" && method === "POST") {
324
+ let body;
325
+ try {
326
+ body = await readBody(req);
327
+ }
328
+ catch {
329
+ jsonResponse(res, 400, { error: "Failed to read request body" });
330
+ return;
331
+ }
332
+ let parsed;
333
+ try {
334
+ parsed = JSON.parse(body);
335
+ }
336
+ catch {
337
+ jsonResponse(res, 400, { error: "Invalid JSON body" });
338
+ return;
339
+ }
340
+ const check = isHostAllowed(policy, parsed.secretName, parsed.url);
341
+ jsonResponse(res, check.allowed ? 200 : 403, check);
342
+ return;
343
+ }
344
+ jsonResponse(res, 404, { error: "Not found" });
345
+ });
346
+ }
347
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACH,YAAY,GAIf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EACH,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,WAAW,EACX,SAAS,EACT,SAAS,EACT,WAAW,GAEd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACH,UAAU,EACV,UAAU,EACV,aAAa,EAGb,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,YAAY,GAGf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAqB,MAAM,oBAAoB,CAAC;AAErE,MAAM,UAAU,GACZ,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAC1E,MAAM,WAAW,GACb,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAEhD,SAAS,QAAQ,CAAC,GAAoB;IAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,YAAY,CACjB,GAAmB,EACnB,MAAc,EACd,IAAa;IAEb,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAC1D,0EAA0E,CAC7E,CAAC;AAEF,4DAA4D;AAE5D,aAAa;KACR,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,cAAc,EAAE,yCAAyC,CAAC;KACjE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;KAC/C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACnB,IAAI,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACjB,UAAU,CAAC,+CAA+C,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC;QAE9C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC;gBACD,UAAU,CAAC,UAAU,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACL,UAAU,CACN,UAAU,UAAU,2DAA2D,CAClF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,SAAS,CAAC,0CAA0C,CAAC,CAAC;QAEtD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACzC;gBACI,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,mBAAmB;gBAC5B,IAAI,EAAE,GAAG;aACZ;SACJ,CAAC,CAAC;QAEH,IAAI,KAAqB,CAAC;QAC1B,IAAI,CAAC;YACD,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACL,UAAU,CAAC,2CAA2C,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACtD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAEvD,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE;YAC3B,IAAI,CAAC;gBACD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;gBACzC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACL,cAAc;YAClB,CAAC;YAED,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAE7C,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,YAAY,CACR,2BAA2B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CACtD,CAAC;YACF,SAAS,CAAC,WAAW,WAAW,eAAe,WAAW,kBAAkB,CAAC,CAAC;YAC9E,SAAS,CAAC,uBAAuB,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,SAAS,CAAC,+BAA+B,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,GAAG,CACL,yBAAyB;gBACzB,oCAAoC,UAAU,EAAE,CACnD,CACJ,CAAC;YACF,OAAO,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,GAAG,EAAE;YAClB,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,SAAS,CAAC,yBAAyB,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC;oBACD,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC3B,CAAC;gBAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACpB,IAAI,CAAC;oBACD,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YACH,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,GAAG,YAAY,KAAK;YAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;;YAC7C,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,4DAA4D;AAE5D,aAAa;KACR,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,GAAG,EAAE;IACT,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,0DAA0D,CAAC,CAAC;QACtE,OAAO;IACX,CAAC;IAED,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7B,YAAY,CAAC,+BAA+B,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAK,GAA6B,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAClD,YAAY,CAAC,iDAAiD,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACJ,UAAU,CAAC,0BAA2B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACD,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEP,4DAA4D;AAE5D,aAAa;KACR,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,GAAG,EAAE;IACT,MAAM,YAAY,GAAG,UAAU,CAC3B,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,WAAW,CACnD,CAAC;IACF,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,GAAG,GAAG,EAAE,CAAC;IAEb,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,UAAU,GAAG,IAAI,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACL,UAAU,GAAG,KAAK,CAAC;QACvB,CAAC;IACL,CAAC;IAED,aAAa,CAAC;QACV;YACI,QAAQ;YACR,UAAU;gBACN,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,GAAG;gBAC1C,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;SAC7B;QACD;YACI,QAAQ;YACR,YAAY;gBACR,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC1B,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;SAC/B;QACD;YACI,QAAQ;YACR,YAAY,EAAE;gBACV,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBAC9B,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC;SAC3C;KACJ,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEP,4DAA4D;AAE5D,MAAM,SAAS,GAAG,aAAa;KAC1B,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2CAA2C,CAAC,CAAC;AAE9D,SAAS;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,qCAAqC,CAAC;KAClD,cAAc,CACX,iBAAiB,EACjB,kEAAkE,CACrE;KACA,MAAM,CACH,sBAAsB,EACtB,gDAAgD,EAChD,QAAQ,CACX;KACA,MAAM,CAAC,sBAAsB,EAAE,oCAAoC,CAAC;KACpE,MAAM,CAAC,uBAAuB,EAAE,4CAA4C,CAAC;KAC7E,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAiB;QACrB,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,SAAS,EAAE,IAAI,CAAC,QAAqC;KACxD,CAAC;IACF,IAAI,IAAI,CAAC,UAAU;QAAE,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;IACtD,IAAI,IAAI,CAAC,UAAU;QAAE,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;IAEtD,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACpC,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,YAAY,CACR,kBAAkB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC3F,CAAC;AACN,CAAC,CAAC,CAAC;AAEP,SAAS;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;IACf,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACrC,UAAU,CAAC,MAAM,CAAC,CAAC;QACnB,YAAY,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACJ,YAAY,CAAC,wBAAwB,MAAM,IAAI,CAAC,CAAC;IACrD,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,SAAS;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,GAAG,EAAE;IACT,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,SAAS,CAAC,wFAAwF,CAAC,CAAC;QACpG,OAAO;IACX,CAAC;IAED,UAAU,CACN,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,MAAM,EAAE,EAAE,CAAC,SAAS;KACvB,CAAC,CAAC,EACH;QACI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;QACnC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE;QACzC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE;KACzC,CACJ,CAAC;AACN,CAAC,CAAC,CAAC;AAEP,4DAA4D;AAE5D,SAAS,kBAAkB,CACvB,KAAqB,EACrB,MAAkB;IAElB,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;QAEnC,eAAe;QACf,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE;gBACnB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;gBAC1C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;aAC/C,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QAED,mCAAmC;QACnC,IAAI,IAAI,KAAK,UAAU,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3C,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;aACnB,CAAC,CAAC,CAAC;YACJ,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACpC,OAAO;QACX,CAAC;QAED,0CAA0C;QAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,IAAI,aAAa,EAAE,CAAC,CAAC;gBAChE,OAAO;YACX,CAAC;YACD,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE;gBACnB,IAAI;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,MAAM,CAAC,eAAe;gBAC9B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;aACrC,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QAED,uDAAuD;QACvD,IAAI,IAAI,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACzC,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACD,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACL,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;gBACjE,OAAO;YACX,CAAC;YAED,IAAI,QAAsB,CAAC;YAC3B,IAAI,CAAC;gBACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACL,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBACvD,OAAO;YACX,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACxC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE;oBACnB,KAAK,EAAE,0CAA0C;iBACpD,CAAC,CAAC;gBACH,OAAO;YACX,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBAChD,OAAO;YACX,CAAC;YAED,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE;gBACnB,MAAM,EAAE,MAAM,CAAC,QAAS,CAAC,MAAM;gBAC/B,OAAO,EAAE,MAAM,CAAC,QAAS,CAAC,OAAO;gBACjC,IAAI,EAAE,MAAM,CAAC,QAAS,CAAC,IAAI;aAC9B,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QAED,mCAAmC;QACnC,IAAI,IAAI,KAAK,eAAe,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAChD,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACD,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACL,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;gBACjE,OAAO;YACX,CAAC;YAED,IAAI,MAA2C,CAAC;YAChD,IAAI,CAAC;gBACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACL,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBACvD,OAAO;YACX,CAAC;YAED,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YACnE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO;QACX,CAAC;QAED,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,UAAU,SAEtB,CAAC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,eAAO,MAAM,UAAU,SAEtB,CAAC"}
@@ -5,7 +5,8 @@ import chalk from "chalk";
5
5
  import ora from "ora";
6
6
  import { api } from "../client.js";
7
7
  import { requireToken, resolveVaultId, handleError } from "../middleware.js";
8
- import { printSuccess } from "../output.js";
8
+ import { printSuccess, printInfo, printKeyValue } from "../output.js";
9
+ import { writeCache, readCache, clearCache, getCacheInfo, getCachePath, } from "../local-cache.js";
9
10
  export const envCommand = new Command("env").description("Environment variable management for CI/CD");
10
11
  envCommand
11
12
  .command("pull")
@@ -108,19 +109,90 @@ envCommand
108
109
  .description("Run a command with vault secrets injected as environment variables")
109
110
  .option("-v, --vault <id>", "Vault ID")
110
111
  .option("--prefix <prefix>", "Only inject secrets under this path prefix")
112
+ .option("--no-cache", "Skip local cache, always fetch from API")
111
113
  .action(async (commandParts, opts) => {
112
114
  try {
113
- requireToken();
115
+ const token = requireToken();
114
116
  const vaultId = resolveVaultId(opts);
115
- const spinner = ora("Loading secrets…").start();
117
+ let envVars = null;
118
+ let source = "api";
119
+ // Try local cache first (unless --no-cache)
120
+ if (opts.cache !== false) {
121
+ const cached = readCache(token, vaultId);
122
+ if (cached) {
123
+ envVars = cached;
124
+ source = "cache";
125
+ }
126
+ }
127
+ if (!envVars) {
128
+ const spinner = ora("Loading secrets…").start();
129
+ const query = {};
130
+ if (opts.prefix)
131
+ query.prefix = opts.prefix;
132
+ const secrets = await api(`/vaults/${vaultId}/secrets`, { query });
133
+ envVars = {};
134
+ for (const s of secrets) {
135
+ if (!["env_bundle", "api_key", "password"].includes(s.secret_type))
136
+ continue;
137
+ const detail = await api(`/vaults/${vaultId}/secrets/${encodeURIComponent(s.path)}`);
138
+ if (s.secret_type === "env_bundle") {
139
+ for (const line of detail.value.split("\n")) {
140
+ const trimmed = line.trim();
141
+ if (!trimmed || trimmed.startsWith("#"))
142
+ continue;
143
+ const eqIdx = trimmed.indexOf("=");
144
+ if (eqIdx > 0) {
145
+ envVars[trimmed.slice(0, eqIdx).trim()] = trimmed
146
+ .slice(eqIdx + 1)
147
+ .trim()
148
+ .replace(/^["']|["']$/g, "");
149
+ }
150
+ }
151
+ }
152
+ else {
153
+ envVars[s.path.replace(/[/-]/g, "_").toUpperCase()] =
154
+ detail.value;
155
+ }
156
+ }
157
+ spinner.stop();
158
+ }
159
+ const count = Object.keys(envVars).length;
160
+ const sourceLabel = source === "cache" ? chalk.dim("(cached)") : chalk.dim("(api)");
161
+ printSuccess(`Loaded ${count} secrets ${sourceLabel}. Running command…`);
162
+ const [cmd, ...args] = commandParts;
163
+ const child = spawn(cmd, args, {
164
+ stdio: "inherit",
165
+ env: { ...process.env, ...envVars },
166
+ });
167
+ child.on("exit", (code) => {
168
+ process.exit(code ?? 1);
169
+ });
170
+ }
171
+ catch (err) {
172
+ handleError(err);
173
+ }
174
+ });
175
+ // --- Cache subcommands ---
176
+ envCommand
177
+ .command("cache")
178
+ .description("Download vault secrets into an encrypted local cache for offline use")
179
+ .option("-v, --vault <id>", "Vault ID")
180
+ .option("--prefix <prefix>", "Only cache secrets under this path prefix")
181
+ .option("--ttl <seconds>", "Cache time-to-live in seconds", "3600")
182
+ .action(async (opts) => {
183
+ try {
184
+ const token = requireToken();
185
+ const vaultId = resolveVaultId(opts);
186
+ const spinner = ora("Fetching secrets for local cache…").start();
116
187
  const query = {};
117
188
  if (opts.prefix)
118
189
  query.prefix = opts.prefix;
119
190
  const secrets = await api(`/vaults/${vaultId}/secrets`, { query });
120
- const envVars = {};
121
- for (const s of secrets) {
122
- if (!["env_bundle", "api_key", "password"].includes(s.secret_type))
123
- continue;
191
+ const envSecrets = secrets.filter((s) => s.secret_type === "env_bundle" ||
192
+ s.secret_type === "api_key" ||
193
+ s.secret_type === "password");
194
+ const values = {};
195
+ for (const s of envSecrets) {
124
196
  const detail = await api(`/vaults/${vaultId}/secrets/${encodeURIComponent(s.path)}`);
125
197
  if (s.secret_type === "env_bundle") {
126
198
  for (const line of detail.value.split("\n")) {
@@ -129,7 +201,7 @@ envCommand
129
201
  continue;
130
202
  const eqIdx = trimmed.indexOf("=");
131
203
  if (eqIdx > 0) {
132
- envVars[trimmed.slice(0, eqIdx).trim()] = trimmed
204
+ values[trimmed.slice(0, eqIdx).trim()] = trimmed
133
205
  .slice(eqIdx + 1)
134
206
  .trim()
135
207
  .replace(/^["']|["']$/g, "");
@@ -137,24 +209,55 @@ envCommand
137
209
  }
138
210
  }
139
211
  else {
140
- envVars[s.path.replace(/[/-]/g, "_").toUpperCase()] =
141
- detail.value;
212
+ const envKey = s.path.replace(/[/-]/g, "_").toUpperCase();
213
+ values[envKey] = detail.value;
142
214
  }
143
215
  }
144
- spinner.succeed(`Loaded ${Object.keys(envVars).length} secrets. Running command…`);
145
- const [cmd, ...args] = commandParts;
146
- const child = spawn(cmd, args, {
147
- stdio: "inherit",
148
- env: { ...process.env, ...envVars },
149
- });
150
- child.on("exit", (code) => {
151
- process.exit(code ?? 1);
152
- });
216
+ const ttl = parseInt(opts.ttl, 10) || 3600;
217
+ writeCache(token, vaultId, values, ttl);
218
+ spinner.succeed(`Cached ${Object.keys(values).length} secrets locally (TTL: ${ttl}s)`);
219
+ printInfo(`Cache file: ${chalk.dim(getCachePath())}`);
153
220
  }
154
221
  catch (err) {
155
222
  handleError(err);
156
223
  }
157
224
  });
225
+ envCommand
226
+ .command("cache-clear")
227
+ .description("Clear the local secret cache")
228
+ .action(() => {
229
+ const cleared = clearCache();
230
+ if (cleared) {
231
+ printSuccess("Local secret cache cleared.");
232
+ }
233
+ else {
234
+ printInfo("No cache to clear.");
235
+ }
236
+ });
237
+ envCommand
238
+ .command("cache-status")
239
+ .description("Show local cache status")
240
+ .action(() => {
241
+ const info = getCacheInfo();
242
+ if (!info.exists) {
243
+ printInfo("No local cache found. Run `1claw env cache` to create one.");
244
+ return;
245
+ }
246
+ printKeyValue([
247
+ ["Cache file", getCachePath()],
248
+ ["Vault ID", info.meta?.vaultId ?? "unknown"],
249
+ ["Cached at", info.meta?.cachedAt ?? "unknown"],
250
+ ["TTL", `${info.meta?.ttlSeconds ?? 0}s`],
251
+ ["Secrets", String(info.meta?.secretCount ?? 0)],
252
+ ["Size", info.sizeBytes ? `${info.sizeBytes} bytes` : "unknown"],
253
+ [
254
+ "Status",
255
+ info.expired
256
+ ? chalk.yellow("expired")
257
+ : chalk.green("valid"),
258
+ ],
259
+ ]);
260
+ });
158
261
  function shellEscape(s) {
159
262
  if (/^[a-zA-Z0-9._\-/:=@]+$/.test(s))
160
263
  return s;
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAA2B,MAAM,cAAc,CAAC;AAQrE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CACpD,2CAA2C,CAC9C,CAAC;AAEF,UAAU;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,0CAA0C,CAAC;KACvE,MAAM,CACH,uBAAuB,EACvB,oCAAoC,EACpC,QAAQ,CACX;KACA,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACnB,IAAI,CAAC;QACD,YAAY,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE5C,MAAM,OAAO,GAAG,MAAM,GAAG,CACrB,WAAW,OAAO,UAAU,EAC5B,EAAE,KAAK,EAAE,CACZ,CAAC;QAEF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,EAAE,CACF,CAAC,CAAC,WAAW,KAAK,YAAY;YAC9B,CAAC,CAAC,WAAW,KAAK,SAAS;YAC3B,CAAC,CAAC,WAAW,KAAK,UAAU,CACnC,CAAC;QAEF,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,GAAG,CACpB,WAAW,OAAO,YAAY,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAC7D,CAAC;YAEF,IAAI,CAAC,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;gBACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;wBAAE,SAAS;oBAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACnC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;wBACZ,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;6BAC3C,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;6BAChB,IAAI,EAAE;6BACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBACrC,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC1D,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YAClC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,MAAc,CAAC;QACnB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,MAAM;gBACP,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;gBAChD,MAAM;YACV,KAAK,OAAO;gBACR,MAAM;oBACF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;yBACjB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;yBAChD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;gBAC3B,MAAM;YACV,KAAK,QAAQ,CAAC;YACd;gBACI,MAAM;oBACF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;yBACjB,GAAG,CACA,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CACP,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAC/C;yBACA,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;gBAC3B,MAAM;QACd,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACrC,YAAY,CACR,SAAS,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,iBAAiB,IAAI,CAAC,MAAM,EAAE,CACpE,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,WAAW,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,UAAU;KACL,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,YAAY,CAAC;KACjE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IACzB,IAAI,CAAC;QACD,YAAY,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,OAAO;aACpB,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAEjE,MAAM,GAAG,CACL,WAAW,OAAO,YAAY,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC7D;YACI,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE;SACtD,CACJ,CAAC;QAEF,YAAY,CACR,UAAU,SAAS,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvF,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,WAAW,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,UAAU;KACL,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CACR,oEAAoE,CACvE;KACA,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,CAAC;KACzE,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;IACjC,IAAI,CAAC;QACD,YAAY,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;QAChD,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE5C,MAAM,OAAO,GAAG,MAAM,GAAG,CACrB,WAAW,OAAO,UAAU,EAC5B,EAAE,KAAK,EAAE,CACZ,CAAC;QAEF,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtB,IACI,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAC3C,CAAC,CAAC,WAAW,CAChB;gBAED,SAAS;YAEb,MAAM,MAAM,GAAG,MAAM,GAAG,CACpB,WAAW,OAAO,YAAY,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAC7D,CAAC;YAEF,IAAI,CAAC,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;gBACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;wBAAE,SAAS;oBAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACnC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;wBACZ,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;6BAC5C,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;6BAChB,IAAI,EAAE;6BACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBACrC,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC/C,MAAM,CAAC,KAAK,CAAC;YACrB,CAAC;QACL,CAAC;QAED,OAAO,CAAC,OAAO,CACX,UAAU,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,4BAA4B,CACpE,CAAC;QAEF,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,YAAY,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YAC3B,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE;SACtC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACtB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,WAAW,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,SAAS,WAAW,CAAC,CAAS;IAC1B,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,SAAS,EAAgB,aAAa,EAAc,MAAM,cAAc,CAAC;AAChG,OAAO,EACH,UAAU,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,YAAY,GAEf,MAAM,mBAAmB,CAAC;AAS3B,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CACpD,2CAA2C,CAC9C,CAAC;AAEF,UAAU;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,0CAA0C,CAAC;KACvE,MAAM,CACH,uBAAuB,EACvB,oCAAoC,EACpC,QAAQ,CACX;KACA,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACnB,IAAI,CAAC;QACD,YAAY,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE5C,MAAM,OAAO,GAAG,MAAM,GAAG,CACrB,WAAW,OAAO,UAAU,EAC5B,EAAE,KAAK,EAAE,CACZ,CAAC;QAEF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,EAAE,CACF,CAAC,CAAC,WAAW,KAAK,YAAY;YAC9B,CAAC,CAAC,WAAW,KAAK,SAAS;YAC3B,CAAC,CAAC,WAAW,KAAK,UAAU,CACnC,CAAC;QAEF,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,GAAG,CACpB,WAAW,OAAO,YAAY,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAC7D,CAAC;YAEF,IAAI,CAAC,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;gBACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;wBAAE,SAAS;oBAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACnC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;wBACZ,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;6BAC3C,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;6BAChB,IAAI,EAAE;6BACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBACrC,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC1D,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YAClC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,MAAc,CAAC;QACnB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,MAAM;gBACP,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;gBAChD,MAAM;YACV,KAAK,OAAO;gBACR,MAAM;oBACF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;yBACjB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;yBAChD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;gBAC3B,MAAM;YACV,KAAK,QAAQ,CAAC;YACd;gBACI,MAAM;oBACF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;yBACjB,GAAG,CACA,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CACP,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAC/C;yBACA,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;gBAC3B,MAAM;QACd,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACrC,YAAY,CACR,SAAS,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,iBAAiB,IAAI,CAAC,MAAM,EAAE,CACpE,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,WAAW,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,UAAU;KACL,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,YAAY,CAAC;KACjE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IACzB,IAAI,CAAC;QACD,YAAY,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,OAAO;aACpB,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAEjE,MAAM,GAAG,CACL,WAAW,OAAO,YAAY,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC7D;YACI,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE;SACtD,CACJ,CAAC;QAEF,YAAY,CACR,UAAU,SAAS,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvF,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,WAAW,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,UAAU;KACL,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CACR,oEAAoE,CACvE;KACA,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,CAAC;KACzE,MAAM,CAAC,YAAY,EAAE,yCAAyC,CAAC;KAC/D,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;IACjC,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,OAAO,GAAkC,IAAI,CAAC;QAClD,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,4CAA4C;QAC5C,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACzC,IAAI,MAAM,EAAE,CAAC;gBACT,OAAO,GAAG,MAAM,CAAC;gBACjB,MAAM,GAAG,OAAO,CAAC;YACrB,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;YAChD,MAAM,KAAK,GAA2B,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAE5C,MAAM,OAAO,GAAG,MAAM,GAAG,CACrB,WAAW,OAAO,UAAU,EAC5B,EAAE,KAAK,EAAE,CACZ,CAAC;YAEF,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACtB,IACI,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAC3C,CAAC,CAAC,WAAW,CAChB;oBAED,SAAS;gBAEb,MAAM,MAAM,GAAG,MAAM,GAAG,CACpB,WAAW,OAAO,YAAY,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAC7D,CAAC;gBAEF,IAAI,CAAC,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;oBACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;wBAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;4BAAE,SAAS;wBAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBACnC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;4BACZ,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;iCAC5C,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;iCAChB,IAAI,EAAE;iCACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;wBACrC,CAAC;oBACL,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;wBAC/C,MAAM,CAAC,KAAK,CAAC;gBACrB,CAAC;YACL,CAAC;YAED,OAAO,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpF,YAAY,CACR,UAAU,KAAK,YAAY,WAAW,oBAAoB,CAC7D,CAAC;QAEF,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,YAAY,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YAC3B,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE;SACtC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACtB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,WAAW,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,4BAA4B;AAE5B,UAAU;KACL,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CACR,sEAAsE,CACzE;KACA,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,CAAC;KACxE,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,EAAE,MAAM,CAAC;KAClE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACnB,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,GAAG,CAAC,mCAAmC,CAAC,CAAC,KAAK,EAAE,CAAC;QACjE,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE5C,MAAM,OAAO,GAAG,MAAM,GAAG,CACrB,WAAW,OAAO,UAAU,EAC5B,EAAE,KAAK,EAAE,CACZ,CAAC;QAEF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,EAAE,CACF,CAAC,CAAC,WAAW,KAAK,YAAY;YAC9B,CAAC,CAAC,WAAW,KAAK,SAAS;YAC3B,CAAC,CAAC,WAAW,KAAK,UAAU,CACnC,CAAC;QAEF,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,GAAG,CACpB,WAAW,OAAO,YAAY,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAC7D,CAAC;YAEF,IAAI,CAAC,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;gBACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;wBAAE,SAAS;oBAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACnC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;wBACZ,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;6BAC3C,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;6BAChB,IAAI,EAAE;6BACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBACrC,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC1D,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YAClC,CAAC;QACL,CAAC;QAED,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;QAC3C,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAExC,OAAO,CAAC,OAAO,CACX,UAAU,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,0BAA0B,GAAG,IAAI,CACxE,CAAC;QACF,SAAS,CAAC,eAAe,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,WAAW,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,UAAU;KACL,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,GAAG,EAAE;IACT,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,OAAO,EAAE,CAAC;QACV,YAAY,CAAC,6BAA6B,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACJ,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,UAAU;KACL,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,GAAG,EAAE;IACT,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACf,SAAS,CAAC,4DAA4D,CAAC,CAAC;QACxE,OAAO;IACX,CAAC;IACD,aAAa,CAAC;QACV,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC;QAC9B,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,SAAS,CAAC;QAC7C,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,SAAS,CAAC;QAC/C,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,IAAI,CAAC,GAAG,CAAC;QACzC,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE;YACI,QAAQ;YACR,IAAI,CAAC,OAAO;gBACR,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;gBACzB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;SAC7B;KACJ,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEP,SAAS,WAAW,CAAC,CAAS;IAC1B,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const importCommand: Command;
3
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/commands/import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwEpC,eAAO,MAAM,aAAa,SAqBpB,CAAC"}