okit-cli 2.1.0 → 2.1.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 (78) hide show
  1. package/README.md +103 -139
  2. package/dist/commands/auth.d.ts +4 -0
  3. package/dist/commands/auth.d.ts.map +1 -0
  4. package/dist/commands/auth.js +134 -0
  5. package/dist/commands/auth.js.map +1 -0
  6. package/dist/commands/check.d.ts +2 -0
  7. package/dist/commands/check.d.ts.map +1 -1
  8. package/dist/commands/check.js +122 -29
  9. package/dist/commands/check.js.map +1 -1
  10. package/dist/commands/menu.d.ts.map +1 -1
  11. package/dist/commands/menu.js +5 -0
  12. package/dist/commands/menu.js.map +1 -1
  13. package/dist/commands/profile.d.ts +18 -0
  14. package/dist/commands/profile.d.ts.map +1 -0
  15. package/dist/commands/profile.js +409 -0
  16. package/dist/commands/profile.js.map +1 -0
  17. package/dist/commands/relay.d.ts +14 -0
  18. package/dist/commands/relay.d.ts.map +1 -0
  19. package/dist/commands/relay.js +263 -0
  20. package/dist/commands/relay.js.map +1 -0
  21. package/dist/commands/repo.js +0 -16
  22. package/dist/commands/repo.js.map +1 -1
  23. package/dist/commands/uninstall.d.ts.map +1 -1
  24. package/dist/commands/uninstall.js +21 -72
  25. package/dist/commands/uninstall.js.map +1 -1
  26. package/dist/commands/upgrade.d.ts +1 -3
  27. package/dist/commands/upgrade.d.ts.map +1 -1
  28. package/dist/commands/upgrade.js +45 -110
  29. package/dist/commands/upgrade.js.map +1 -1
  30. package/dist/commands/vault.d.ts +14 -0
  31. package/dist/commands/vault.d.ts.map +1 -0
  32. package/dist/commands/vault.js +255 -0
  33. package/dist/commands/vault.js.map +1 -0
  34. package/dist/config/i18n.d.ts +71 -0
  35. package/dist/config/i18n.d.ts.map +1 -1
  36. package/dist/config/i18n.js +150 -0
  37. package/dist/config/i18n.js.map +1 -1
  38. package/dist/config/registry.d.ts +14 -6
  39. package/dist/config/registry.d.ts.map +1 -1
  40. package/dist/config/registry.js +638 -68
  41. package/dist/config/registry.js.map +1 -1
  42. package/dist/config/user.d.ts +4 -0
  43. package/dist/config/user.d.ts.map +1 -1
  44. package/dist/config/user.js +1 -0
  45. package/dist/config/user.js.map +1 -1
  46. package/dist/executor/deps/BrewDependencyProvider.d.ts.map +1 -1
  47. package/dist/executor/deps/BrewDependencyProvider.js +4 -2
  48. package/dist/executor/deps/BrewDependencyProvider.js.map +1 -1
  49. package/dist/executor/deps/NpmDependencyProvider.d.ts.map +1 -1
  50. package/dist/executor/deps/NpmDependencyProvider.js +4 -2
  51. package/dist/executor/deps/NpmDependencyProvider.js.map +1 -1
  52. package/dist/executor/deps/PipxDependencyProvider.d.ts.map +1 -1
  53. package/dist/executor/deps/PipxDependencyProvider.js +4 -2
  54. package/dist/executor/deps/PipxDependencyProvider.js.map +1 -1
  55. package/dist/executor/deps/UvToolDependencyProvider.d.ts.map +1 -1
  56. package/dist/executor/deps/UvToolDependencyProvider.js +4 -2
  57. package/dist/executor/deps/UvToolDependencyProvider.js.map +1 -1
  58. package/dist/executor/plan/registryDeps.d.ts.map +1 -1
  59. package/dist/executor/plan/registryDeps.js +13 -5
  60. package/dist/executor/plan/registryDeps.js.map +1 -1
  61. package/dist/executor/runner.d.ts.map +1 -1
  62. package/dist/executor/runner.js +11 -9
  63. package/dist/executor/runner.js.map +1 -1
  64. package/dist/main.js +194 -4
  65. package/dist/main.js.map +1 -1
  66. package/dist/relay/client.d.ts +29 -0
  67. package/dist/relay/client.d.ts.map +1 -0
  68. package/dist/relay/client.js +209 -0
  69. package/dist/relay/client.js.map +1 -0
  70. package/dist/utils/semver.d.ts +12 -0
  71. package/dist/utils/semver.d.ts.map +1 -0
  72. package/dist/utils/semver.js +71 -0
  73. package/dist/utils/semver.js.map +1 -0
  74. package/dist/vault/store.d.ts +51 -0
  75. package/dist/vault/store.d.ts.map +1 -0
  76. package/dist/vault/store.js +260 -0
  77. package/dist/vault/store.js.map +1 -0
  78. package/package.json +11 -4
@@ -0,0 +1,51 @@
1
+ export interface SecretEntry {
2
+ key: string;
3
+ alias: string;
4
+ value: string;
5
+ createdAt: string;
6
+ updatedAt: string;
7
+ }
8
+ export interface ProjectBinding {
9
+ projectPath: string;
10
+ file: string;
11
+ key: string;
12
+ alias: string;
13
+ envName?: string;
14
+ }
15
+ export interface VaultData {
16
+ secrets: SecretEntry[];
17
+ bindings: ProjectBinding[];
18
+ }
19
+ export declare class VaultStore {
20
+ private key;
21
+ private data;
22
+ constructor();
23
+ private load;
24
+ reload(): Promise<void>;
25
+ private save;
26
+ static parseKeyAlias(input: string): {
27
+ key: string;
28
+ alias: string;
29
+ };
30
+ set(keyAlias: string, value: string): Promise<void>;
31
+ get(keyAlias: string): Promise<string | null>;
32
+ delete(keyAlias: string): Promise<boolean>;
33
+ list(): Promise<Array<{
34
+ key: string;
35
+ alias: string;
36
+ masked: string;
37
+ updatedAt: string;
38
+ }>>;
39
+ getAliases(key: string): Promise<string[]>;
40
+ resolve(key: string, alias?: string): Promise<string | null>;
41
+ addBinding(binding: ProjectBinding): Promise<void>;
42
+ getBindings(keyAlias?: string): Promise<ProjectBinding[]>;
43
+ removeBindingsForProject(projectPath: string): Promise<void>;
44
+ sync(): Promise<Array<{
45
+ file: string;
46
+ key: string;
47
+ success: boolean;
48
+ error?: string;
49
+ }>>;
50
+ }
51
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/vault/store.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AA8CD,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,IAAI,CAA0B;;YAOxB,IAAI;IAsBZ,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YAKf,IAAI;IAalB,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAQ7D,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBnD,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAO7C,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1C,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAWzF,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAM1C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgB5D,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBlD,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IASzD,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5D,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CA+D9F"}
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VaultStore = void 0;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const crypto_1 = __importDefault(require("crypto"));
10
+ const os_1 = __importDefault(require("os"));
11
+ const registry_1 = require("../config/registry");
12
+ const VAULT_DIR = path_1.default.join(registry_1.OKIT_DIR, "vault");
13
+ const SECRETS_FILE = path_1.default.join(VAULT_DIR, "secrets.enc");
14
+ const MASTER_KEY_FILE = path_1.default.join(VAULT_DIR, "master.key");
15
+ const REGISTRY_FILE = path_1.default.join(VAULT_DIR, "registry.json");
16
+ const ALGORITHM = "aes-256-gcm";
17
+ const KEY_LENGTH = 32;
18
+ const IV_LENGTH = 16;
19
+ const TAG_LENGTH = 16;
20
+ // Derive encryption key from machine fingerprint
21
+ function deriveMasterKey() {
22
+ const fp = path_1.default.join(VAULT_DIR, "master.key");
23
+ if (fs_extra_1.default.existsSync(fp)) {
24
+ return Buffer.from(fs_extra_1.default.readFileSync(fp, "utf-8"), "hex");
25
+ }
26
+ // Generate from machine identity
27
+ const identity = `${os_1.default.hostname()}:${os_1.default.userInfo().username}:okit-vault`;
28
+ const key = crypto_1.default.pbkdf2Sync(identity, "okit-vault-salt", 100000, KEY_LENGTH, "sha256");
29
+ fs_extra_1.default.ensureDirSync(VAULT_DIR);
30
+ fs_extra_1.default.writeFileSync(fp, key.toString("hex"), { mode: 0o600 });
31
+ return key;
32
+ }
33
+ function encrypt(plaintext, key) {
34
+ const iv = crypto_1.default.randomBytes(IV_LENGTH);
35
+ const cipher = crypto_1.default.createCipheriv(ALGORITHM, key, iv);
36
+ let encrypted = cipher.update(plaintext, "utf8");
37
+ encrypted = Buffer.concat([encrypted, cipher.final()]);
38
+ const tag = cipher.getAuthTag();
39
+ // Format: iv:tag:ciphertext (all hex)
40
+ return `${iv.toString("hex")}:${tag.toString("hex")}:${encrypted.toString("hex")}`;
41
+ }
42
+ function decrypt(data, key) {
43
+ const parts = data.split(":");
44
+ if (parts.length !== 3)
45
+ throw new Error("Invalid encrypted data format");
46
+ const iv = Buffer.from(parts[0], "hex");
47
+ const tag = Buffer.from(parts[1], "hex");
48
+ const encrypted = Buffer.from(parts[2], "hex");
49
+ const decipher = crypto_1.default.createDecipheriv(ALGORITHM, key, iv);
50
+ decipher.setAuthTag(tag);
51
+ let decrypted = decipher.update(encrypted);
52
+ decrypted = Buffer.concat([decrypted, decipher.final()]);
53
+ return decrypted.toString("utf8");
54
+ }
55
+ function maskValue(value) {
56
+ if (value.length <= 6)
57
+ return "***";
58
+ return value.slice(0, 3) + "***" + value.slice(-3);
59
+ }
60
+ class VaultStore {
61
+ constructor() {
62
+ this.data = null;
63
+ fs_extra_1.default.ensureDirSync(VAULT_DIR);
64
+ this.key = deriveMasterKey();
65
+ }
66
+ async load() {
67
+ if (this.data)
68
+ return this.data;
69
+ let secrets = [];
70
+ let bindings = [];
71
+ if (await fs_extra_1.default.pathExists(SECRETS_FILE)) {
72
+ const raw = await fs_extra_1.default.readFile(SECRETS_FILE, "utf-8");
73
+ const decrypted = decrypt(raw, this.key);
74
+ secrets = JSON.parse(decrypted);
75
+ }
76
+ if (await fs_extra_1.default.pathExists(REGISTRY_FILE)) {
77
+ const reg = await fs_extra_1.default.readFile(REGISTRY_FILE, "utf-8");
78
+ bindings = JSON.parse(reg);
79
+ }
80
+ this.data = { secrets, bindings };
81
+ return this.data;
82
+ }
83
+ async reload() {
84
+ this.data = null;
85
+ await this.load();
86
+ }
87
+ async save() {
88
+ if (!this.data)
89
+ return;
90
+ // Encrypt secrets
91
+ const secretsJson = JSON.stringify(this.data.secrets);
92
+ const encrypted = encrypt(secretsJson, this.key);
93
+ await fs_extra_1.default.writeFile(SECRETS_FILE, encrypted, { mode: 0o600 });
94
+ // Save bindings separately (unencrypted, just paths)
95
+ await fs_extra_1.default.writeFile(REGISTRY_FILE, JSON.stringify(this.data.bindings, null, 2));
96
+ }
97
+ // Parse "KEY/alias" format, default alias is "default"
98
+ static parseKeyAlias(input) {
99
+ const slashIdx = input.indexOf("/");
100
+ if (slashIdx === -1) {
101
+ return { key: input, alias: "default" };
102
+ }
103
+ return { key: input.slice(0, slashIdx), alias: input.slice(slashIdx + 1) };
104
+ }
105
+ async set(keyAlias, value) {
106
+ const { key, alias } = VaultStore.parseKeyAlias(keyAlias);
107
+ const data = await this.load();
108
+ const now = new Date().toISOString();
109
+ const existing = data.secrets.find((s) => s.key === key && s.alias === alias);
110
+ if (existing) {
111
+ existing.value = value;
112
+ existing.updatedAt = now;
113
+ }
114
+ else {
115
+ data.secrets.push({ key, alias, value, createdAt: now, updatedAt: now });
116
+ }
117
+ await this.save();
118
+ }
119
+ async get(keyAlias) {
120
+ const { key, alias } = VaultStore.parseKeyAlias(keyAlias);
121
+ const data = await this.load();
122
+ const entry = data.secrets.find((s) => s.key === key && s.alias === alias);
123
+ return entry?.value ?? null;
124
+ }
125
+ async delete(keyAlias) {
126
+ const { key, alias } = VaultStore.parseKeyAlias(keyAlias);
127
+ const data = await this.load();
128
+ const idx = data.secrets.findIndex((s) => s.key === key && s.alias === alias);
129
+ if (idx === -1)
130
+ return false;
131
+ data.secrets.splice(idx, 1);
132
+ // Remove related bindings
133
+ data.bindings = data.bindings.filter((b) => !(b.key === key && b.alias === alias));
134
+ await this.save();
135
+ return true;
136
+ }
137
+ async list() {
138
+ const data = await this.load();
139
+ return data.secrets.map((s) => ({
140
+ key: s.key,
141
+ alias: s.alias,
142
+ masked: maskValue(s.value),
143
+ updatedAt: s.updatedAt,
144
+ }));
145
+ }
146
+ // Get all aliases for a key
147
+ async getAliases(key) {
148
+ const data = await this.load();
149
+ return data.secrets.filter((s) => s.key === key).map((s) => s.alias);
150
+ }
151
+ // Resolve a key for a project: look up .okitenv mapping, fall back to "default"
152
+ async resolve(key, alias) {
153
+ const data = await this.load();
154
+ const targetAlias = alias || "default";
155
+ const entry = data.secrets.find((s) => s.key === key && s.alias === targetAlias);
156
+ if (entry)
157
+ return entry.value;
158
+ // Fall back to default if specific alias not found
159
+ if (targetAlias !== "default") {
160
+ const def = data.secrets.find((s) => s.key === key && s.alias === "default");
161
+ return def?.value ?? null;
162
+ }
163
+ // Fall back to first available alias
164
+ const any = data.secrets.find((s) => s.key === key);
165
+ return any?.value ?? null;
166
+ }
167
+ // Project binding management
168
+ async addBinding(binding) {
169
+ const data = await this.load();
170
+ // Deduplicate by project + file + envName
171
+ const targetEnvName = binding.envName || binding.key;
172
+ const exists = data.bindings.find((b) => b.projectPath === binding.projectPath &&
173
+ b.file === binding.file &&
174
+ (b.envName || b.key) === targetEnvName);
175
+ if (exists) {
176
+ exists.key = binding.key;
177
+ exists.alias = binding.alias;
178
+ exists.envName = binding.envName;
179
+ }
180
+ else {
181
+ data.bindings.push(binding);
182
+ }
183
+ await this.save();
184
+ }
185
+ async getBindings(keyAlias) {
186
+ const data = await this.load();
187
+ if (!keyAlias)
188
+ return data.bindings;
189
+ const { key, alias } = VaultStore.parseKeyAlias(keyAlias);
190
+ return data.bindings.filter((b) => b.key === key && (alias === "default" || b.alias === alias));
191
+ }
192
+ async removeBindingsForProject(projectPath) {
193
+ const data = await this.load();
194
+ data.bindings = data.bindings.filter((b) => b.projectPath !== projectPath);
195
+ await this.save();
196
+ }
197
+ // Sync: update all bound files with current secret values
198
+ async sync() {
199
+ const data = await this.load();
200
+ const results = [];
201
+ // Group bindings by target file
202
+ const fileMap = new Map();
203
+ for (const b of data.bindings) {
204
+ const fullPath = path_1.default.join(b.projectPath, b.file);
205
+ const existing = fileMap.get(fullPath) || [];
206
+ existing.push(b);
207
+ fileMap.set(fullPath, existing);
208
+ }
209
+ for (const [filePath, bindings] of fileMap) {
210
+ try {
211
+ // Read existing file or start empty
212
+ let content = "";
213
+ if (await fs_extra_1.default.pathExists(filePath)) {
214
+ content = await fs_extra_1.default.readFile(filePath, "utf-8");
215
+ }
216
+ for (const binding of bindings) {
217
+ const value = await this.resolve(binding.key, binding.alias);
218
+ if (value === null) {
219
+ results.push({
220
+ file: filePath,
221
+ key: binding.envName || binding.key,
222
+ success: false,
223
+ error: "Secret not found in vault",
224
+ });
225
+ continue;
226
+ }
227
+ // Use envName if set, otherwise vault key
228
+ const envKey = binding.envName || binding.key;
229
+ const regex = new RegExp(`^${escapeRegex(envKey)}=.*$`, "m");
230
+ const newLine = `${envKey}=${value}`;
231
+ if (regex.test(content)) {
232
+ content = content.replace(regex, newLine);
233
+ }
234
+ else {
235
+ content = content.trimEnd() + (content.length > 0 ? "\n" : "") + newLine + "\n";
236
+ }
237
+ results.push({ file: filePath, key: binding.key, success: true });
238
+ }
239
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(filePath));
240
+ await fs_extra_1.default.writeFile(filePath, content);
241
+ }
242
+ catch (err) {
243
+ for (const binding of bindings) {
244
+ results.push({
245
+ file: filePath,
246
+ key: binding.key,
247
+ success: false,
248
+ error: err.message,
249
+ });
250
+ }
251
+ }
252
+ }
253
+ return results;
254
+ }
255
+ }
256
+ exports.VaultStore = VaultStore;
257
+ function escapeRegex(str) {
258
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
259
+ }
260
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/vault/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "okit-cli",
3
- "version": "2.1.0",
4
- "description": "OKIT v1 - 精简版工具执行器",
3
+ "version": "2.1.2",
4
+ "description": "OKIT - Agent infrastructure toolkit for managing dev tools, auth, and upgrades",
5
5
  "main": "dist/main.js",
6
6
  "bin": {
7
7
  "okit": "dist/main.js"
@@ -14,7 +14,12 @@
14
14
  "pkg": "pkg . --out-path=bin"
15
15
  },
16
16
  "files": [
17
- "dist",
17
+ "dist/**/*.js",
18
+ "dist/**/*.d.ts",
19
+ "dist/**/*.map",
20
+ "dist/**/*.html",
21
+ "dist/**/*.css",
22
+ "!dist/release",
18
23
  "package.json",
19
24
  "README.md",
20
25
  "LICENSE"
@@ -40,12 +45,14 @@
40
45
  "fs-extra": "^11.1.1",
41
46
  "kleur": "^4.1.5",
42
47
  "ora": "^5.4.1",
43
- "prompts": "^2.4.2"
48
+ "prompts": "^2.4.2",
49
+ "ws": "^8.20.0"
44
50
  },
45
51
  "devDependencies": {
46
52
  "@types/fs-extra": "^11.0.1",
47
53
  "@types/node": "^20.5.0",
48
54
  "@types/prompts": "^2.4.4",
55
+ "@types/ws": "^8.18.1",
49
56
  "pkg": "^5.8.1",
50
57
  "ts-node": "^10.9.1",
51
58
  "typescript": "^5.1.6"