@vibecodr/cli 0.2.11 → 1.0.0-rc.0

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 (256) hide show
  1. package/CHANGELOG.md +53 -23
  2. package/MIGRATION.md +73 -0
  3. package/README.md +89 -72
  4. package/dist/auth/official-client.d.ts +6 -0
  5. package/dist/auth/official-client.d.ts.map +1 -0
  6. package/dist/auth/official-client.js +1 -0
  7. package/dist/auth/official-client.js.map +1 -0
  8. package/dist/auth/token-manager.d.ts +40 -0
  9. package/dist/auth/token-manager.d.ts.map +1 -0
  10. package/dist/auth/token-manager.js +1 -2
  11. package/dist/auth/token-manager.js.map +1 -0
  12. package/dist/bin/vc-tools.d.ts +3 -0
  13. package/dist/bin/vc-tools.d.ts.map +1 -0
  14. package/dist/bin/vc-tools.js +7 -0
  15. package/dist/bin/vc-tools.js.map +1 -0
  16. package/dist/bin/vibecodr-mcp.d.ts +3 -0
  17. package/dist/bin/vibecodr-mcp.d.ts.map +1 -0
  18. package/dist/bin/vibecodr-mcp.js +37 -0
  19. package/dist/bin/vibecodr-mcp.js.map +1 -0
  20. package/dist/cli/errors.d.ts +28 -0
  21. package/dist/cli/errors.d.ts.map +1 -0
  22. package/dist/cli/errors.js +1 -0
  23. package/dist/cli/errors.js.map +1 -0
  24. package/dist/cli/output.d.ts +16 -0
  25. package/dist/cli/output.d.ts.map +1 -0
  26. package/dist/cli/output.js +1 -0
  27. package/dist/cli/output.js.map +1 -0
  28. package/dist/cli/parse.d.ts +18 -0
  29. package/dist/cli/parse.d.ts.map +1 -0
  30. package/dist/cli/parse.js +1 -0
  31. package/dist/cli/parse.js.map +1 -0
  32. package/dist/clients/base.d.ts +20 -0
  33. package/dist/clients/base.d.ts.map +1 -0
  34. package/dist/clients/base.js +1 -0
  35. package/dist/clients/base.js.map +1 -0
  36. package/dist/clients/claude-code.d.ts +5 -0
  37. package/dist/clients/claude-code.d.ts.map +1 -0
  38. package/dist/clients/claude-code.js +88 -0
  39. package/dist/clients/claude-code.js.map +1 -0
  40. package/dist/clients/claude-desktop.d.ts +5 -0
  41. package/dist/clients/claude-desktop.d.ts.map +1 -0
  42. package/dist/clients/claude-desktop.js +97 -0
  43. package/dist/clients/claude-desktop.js.map +1 -0
  44. package/dist/clients/codex.d.ts +5 -0
  45. package/dist/clients/codex.d.ts.map +1 -0
  46. package/dist/clients/codex.js +1 -0
  47. package/dist/clients/codex.js.map +1 -0
  48. package/dist/clients/cursor.d.ts +5 -0
  49. package/dist/clients/cursor.d.ts.map +1 -0
  50. package/dist/clients/cursor.js +1 -1
  51. package/dist/clients/cursor.js.map +1 -0
  52. package/dist/clients/vscode.d.ts +5 -0
  53. package/dist/clients/vscode.d.ts.map +1 -0
  54. package/dist/clients/vscode.js +5 -1
  55. package/dist/clients/vscode.js.map +1 -0
  56. package/dist/clients/windsurf.d.ts +5 -0
  57. package/dist/clients/windsurf.d.ts.map +1 -0
  58. package/dist/clients/windsurf.js +1 -0
  59. package/dist/clients/windsurf.js.map +1 -0
  60. package/dist/commands/call.d.ts +9 -0
  61. package/dist/commands/call.d.ts.map +1 -0
  62. package/dist/commands/call.js +1 -0
  63. package/dist/commands/call.js.map +1 -0
  64. package/dist/commands/config.d.ts +3 -0
  65. package/dist/commands/config.d.ts.map +1 -0
  66. package/dist/commands/config.js +1 -0
  67. package/dist/commands/config.js.map +1 -0
  68. package/dist/commands/context.d.ts +15 -0
  69. package/dist/commands/context.d.ts.map +1 -0
  70. package/dist/commands/context.js +2 -5
  71. package/dist/commands/context.js.map +1 -0
  72. package/dist/commands/doctor.d.ts +3 -0
  73. package/dist/commands/doctor.d.ts.map +1 -0
  74. package/dist/commands/doctor.js +2 -1
  75. package/dist/commands/doctor.js.map +1 -0
  76. package/dist/commands/help.d.ts +3 -0
  77. package/dist/commands/help.d.ts.map +1 -0
  78. package/dist/commands/help.js +1 -0
  79. package/dist/commands/help.js.map +1 -0
  80. package/dist/commands/install.d.ts +3 -0
  81. package/dist/commands/install.d.ts.map +1 -0
  82. package/dist/commands/install.js +23 -5
  83. package/dist/commands/install.js.map +1 -0
  84. package/dist/commands/login.d.ts +3 -0
  85. package/dist/commands/login.d.ts.map +1 -0
  86. package/dist/commands/login.js +1 -0
  87. package/dist/commands/login.js.map +1 -0
  88. package/dist/commands/logout.d.ts +3 -0
  89. package/dist/commands/logout.d.ts.map +1 -0
  90. package/dist/commands/logout.js +1 -0
  91. package/dist/commands/logout.js.map +1 -0
  92. package/dist/commands/pulse-publish.d.ts +3 -0
  93. package/dist/commands/pulse-publish.d.ts.map +1 -0
  94. package/dist/commands/pulse-publish.js +1 -0
  95. package/dist/commands/pulse-publish.js.map +1 -0
  96. package/dist/commands/pulse-setup.d.ts +3 -0
  97. package/dist/commands/pulse-setup.d.ts.map +1 -0
  98. package/dist/commands/pulse-setup.js +5 -3
  99. package/dist/commands/pulse-setup.js.map +1 -0
  100. package/dist/commands/pulse.d.ts +3 -0
  101. package/dist/commands/pulse.d.ts.map +1 -0
  102. package/dist/commands/pulse.js +1 -0
  103. package/dist/commands/pulse.js.map +1 -0
  104. package/dist/commands/status.d.ts +3 -0
  105. package/dist/commands/status.d.ts.map +1 -0
  106. package/dist/commands/status.js +1 -0
  107. package/dist/commands/status.js.map +1 -0
  108. package/dist/commands/tools.d.ts +3 -0
  109. package/dist/commands/tools.d.ts.map +1 -0
  110. package/dist/commands/tools.js +1 -0
  111. package/dist/commands/tools.js.map +1 -0
  112. package/dist/commands/uninstall.d.ts +3 -0
  113. package/dist/commands/uninstall.d.ts.map +1 -0
  114. package/dist/commands/uninstall.js +12 -4
  115. package/dist/commands/uninstall.js.map +1 -0
  116. package/dist/commands/upload.d.ts +3 -0
  117. package/dist/commands/upload.d.ts.map +1 -0
  118. package/dist/commands/upload.js +1 -0
  119. package/dist/commands/upload.js.map +1 -0
  120. package/dist/commands/whoami.d.ts +3 -0
  121. package/dist/commands/whoami.d.ts.map +1 -0
  122. package/dist/commands/whoami.js +82 -0
  123. package/dist/commands/whoami.js.map +1 -0
  124. package/dist/core/interactive-input.d.ts +7 -0
  125. package/dist/core/interactive-input.d.ts.map +1 -0
  126. package/dist/core/interactive-input.js +1 -0
  127. package/dist/core/interactive-input.js.map +1 -0
  128. package/dist/core/mcp-client.d.ts +17 -0
  129. package/dist/core/mcp-client.d.ts.map +1 -0
  130. package/dist/core/mcp-client.js +1 -0
  131. package/dist/core/mcp-client.js.map +1 -0
  132. package/dist/core/redaction.d.ts +2 -0
  133. package/dist/core/redaction.d.ts.map +1 -0
  134. package/dist/core/redaction.js +36 -2
  135. package/dist/core/redaction.js.map +1 -0
  136. package/dist/core/renderers.d.ts +8 -0
  137. package/dist/core/renderers.d.ts.map +1 -0
  138. package/dist/core/renderers.js +1 -0
  139. package/dist/core/renderers.js.map +1 -0
  140. package/dist/doctor/run.d.ts +10 -0
  141. package/dist/doctor/run.d.ts.map +1 -0
  142. package/dist/doctor/run.js +12 -3
  143. package/dist/doctor/run.js.map +1 -0
  144. package/dist/legacy/cli/errors.d.ts +9 -0
  145. package/dist/legacy/cli/errors.d.ts.map +1 -0
  146. package/dist/legacy/cli/errors.js +23 -0
  147. package/dist/legacy/cli/errors.js.map +1 -0
  148. package/dist/legacy/cli/install.d.ts +24 -0
  149. package/dist/legacy/cli/install.d.ts.map +1 -0
  150. package/dist/legacy/cli/install.js +307 -0
  151. package/dist/legacy/cli/install.js.map +1 -0
  152. package/dist/legacy/cli/output.d.ts +17 -0
  153. package/dist/legacy/cli/output.d.ts.map +1 -0
  154. package/dist/legacy/cli/output.js +36 -0
  155. package/dist/legacy/cli/output.js.map +1 -0
  156. package/dist/legacy/cli/parser.d.ts +33 -0
  157. package/dist/legacy/cli/parser.d.ts.map +1 -0
  158. package/dist/legacy/cli/parser.js +177 -0
  159. package/dist/legacy/cli/parser.js.map +1 -0
  160. package/dist/legacy/cli/run.d.ts +11 -0
  161. package/dist/legacy/cli/run.d.ts.map +1 -0
  162. package/dist/legacy/cli/run.js +2947 -0
  163. package/dist/legacy/cli/run.js.map +1 -0
  164. package/dist/legacy/config/credential-store.d.ts +8 -0
  165. package/dist/legacy/config/credential-store.d.ts.map +1 -0
  166. package/dist/legacy/config/credential-store.js +52 -0
  167. package/dist/legacy/config/credential-store.js.map +1 -0
  168. package/dist/legacy/config/store.d.ts +63 -0
  169. package/dist/legacy/config/store.d.ts.map +1 -0
  170. package/dist/legacy/config/store.js +311 -0
  171. package/dist/legacy/config/store.js.map +1 -0
  172. package/dist/legacy/core/api-client.d.ts +45 -0
  173. package/dist/legacy/core/api-client.d.ts.map +1 -0
  174. package/dist/legacy/core/api-client.js +204 -0
  175. package/dist/legacy/core/api-client.js.map +1 -0
  176. package/dist/legacy/core/contracts.d.ts +488 -0
  177. package/dist/legacy/core/contracts.d.ts.map +1 -0
  178. package/dist/legacy/core/contracts.js +386 -0
  179. package/dist/legacy/core/contracts.js.map +1 -0
  180. package/dist/legacy/core/goal-coverage.d.ts +15 -0
  181. package/dist/legacy/core/goal-coverage.d.ts.map +1 -0
  182. package/dist/legacy/core/goal-coverage.js +169 -0
  183. package/dist/legacy/core/goal-coverage.js.map +1 -0
  184. package/dist/legacy/core/redaction.d.ts +4 -0
  185. package/dist/legacy/core/redaction.d.ts.map +1 -0
  186. package/dist/legacy/core/redaction.js +121 -0
  187. package/dist/legacy/core/redaction.js.map +1 -0
  188. package/dist/legacy/core/validators.d.ts +8 -0
  189. package/dist/legacy/core/validators.d.ts.map +1 -0
  190. package/dist/legacy/core/validators.js +102 -0
  191. package/dist/legacy/core/validators.js.map +1 -0
  192. package/dist/legacy/core/version.d.ts +3 -0
  193. package/dist/legacy/core/version.d.ts.map +1 -0
  194. package/dist/legacy/core/version.js +3 -0
  195. package/dist/legacy/core/version.js.map +1 -0
  196. package/dist/legacy/index.d.ts +8 -0
  197. package/dist/legacy/index.d.ts.map +1 -0
  198. package/dist/legacy/index.js +8 -0
  199. package/dist/legacy/index.js.map +1 -0
  200. package/dist/platform/browser.d.ts +7 -0
  201. package/dist/platform/browser.d.ts.map +1 -0
  202. package/dist/platform/browser.js +1 -0
  203. package/dist/platform/browser.js.map +1 -0
  204. package/dist/platform/exec.d.ts +3 -0
  205. package/dist/platform/exec.d.ts.map +1 -0
  206. package/dist/platform/exec.js +10 -1
  207. package/dist/platform/exec.js.map +1 -0
  208. package/dist/platform/paths.d.ts +9 -0
  209. package/dist/platform/paths.d.ts.map +1 -0
  210. package/dist/platform/paths.js +13 -0
  211. package/dist/platform/paths.js.map +1 -0
  212. package/dist/platform/prompt.d.ts +5 -0
  213. package/dist/platform/prompt.d.ts.map +1 -0
  214. package/dist/platform/prompt.js +1 -0
  215. package/dist/platform/prompt.js.map +1 -0
  216. package/dist/storage/config-store.d.ts +15 -0
  217. package/dist/storage/config-store.d.ts.map +1 -0
  218. package/dist/storage/config-store.js +1 -0
  219. package/dist/storage/config-store.js.map +1 -0
  220. package/dist/storage/file-lock.d.ts +7 -0
  221. package/dist/storage/file-lock.d.ts.map +1 -0
  222. package/dist/storage/file-lock.js +1 -0
  223. package/dist/storage/file-lock.js.map +1 -0
  224. package/dist/storage/install-manifest.d.ts +12 -0
  225. package/dist/storage/install-manifest.d.ts.map +1 -0
  226. package/dist/storage/install-manifest.js +1 -0
  227. package/dist/storage/install-manifest.js.map +1 -0
  228. package/dist/storage/secret-store.d.ts +36 -0
  229. package/dist/storage/secret-store.d.ts.map +1 -0
  230. package/dist/storage/secret-store.js +1 -0
  231. package/dist/storage/secret-store.js.map +1 -0
  232. package/dist/types/auth.d.ts +55 -0
  233. package/dist/types/auth.d.ts.map +1 -0
  234. package/dist/types/auth.js +1 -0
  235. package/dist/types/auth.js.map +1 -0
  236. package/dist/types/config.d.ts +29 -0
  237. package/dist/types/config.d.ts.map +1 -0
  238. package/dist/types/config.js +1 -0
  239. package/dist/types/config.js.map +1 -0
  240. package/dist/types/install.d.ts +26 -0
  241. package/dist/types/install.d.ts.map +1 -0
  242. package/dist/types/install.js +1 -0
  243. package/dist/types/install.js.map +1 -0
  244. package/docs/API-CONTRACT.md +606 -0
  245. package/docs/CLOUDFLARE-PRIMITIVE-FIT.md +212 -0
  246. package/docs/RELEASE-CHECKLIST.md +297 -0
  247. package/docs/SECURITY.md +227 -0
  248. package/docs/VALIDATION-MATRIX.md +58 -0
  249. package/docs/commands.md +49 -29
  250. package/docs/legacy/AGENT-TOOLKIT-RFC.md +1395 -0
  251. package/docs/legacy/CLI-GUIDELINES-AUDIT.md +95 -0
  252. package/docs/legacy/COMPLETION-AUDIT.md +542 -0
  253. package/docs/legacy/vc-tools-finetune.md +982 -0
  254. package/docs/legacy/vc-tools-goal-browser-run-containers.md +465 -0
  255. package/docs/legacy/vc-tools-goal-original.md +249 -0
  256. package/package.json +37 -8
@@ -0,0 +1,311 @@
1
+ import { promises as fs } from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { CliError } from "../cli/errors.js";
5
+ import { createCredentialStore } from "./credential-store.js";
6
+ export const DEFAULT_API_URL = "https://tools.vibecodr.space";
7
+ const DEFAULT_CONFIG = {
8
+ version: 1,
9
+ selectedProfile: "default",
10
+ profiles: {
11
+ default: {
12
+ apiUrl: DEFAULT_API_URL
13
+ }
14
+ }
15
+ };
16
+ export class ConfigStore {
17
+ dir;
18
+ credentialKind;
19
+ credentials;
20
+ constructor(dir, env) {
21
+ this.dir = dir;
22
+ this.credentials = createCredentialStore(env, new FileCredentialStore(this));
23
+ this.credentialKind = this.credentials.kind;
24
+ }
25
+ static resolve(env, override) {
26
+ return new ConfigStore(resolveConfigDir(env, override), env);
27
+ }
28
+ async loadConfig() {
29
+ const file = this.configPath();
30
+ try {
31
+ const raw = await fs.readFile(file, "utf8");
32
+ const parsed = JSON.parse(raw);
33
+ return normalizeConfig(parsed);
34
+ }
35
+ catch (error) {
36
+ if (isNotFound(error)) {
37
+ return structuredClone(DEFAULT_CONFIG);
38
+ }
39
+ throw new CliError("config.invalid", `Could not read vc-tools config at ${file}.`, 5);
40
+ }
41
+ }
42
+ async saveProfile(profileName, profile, select = true) {
43
+ const config = await this.loadConfig();
44
+ config.profiles[profileName] = profile;
45
+ if (select) {
46
+ config.selectedProfile = profileName;
47
+ }
48
+ await this.writeJsonPrivate(this.configPath(), config);
49
+ }
50
+ async getProfile(profileName) {
51
+ const config = await this.loadConfig();
52
+ const name = profileName ?? config.selectedProfile;
53
+ const profile = config.profiles[name];
54
+ if (!profile) {
55
+ throw new CliError("config.profile_missing", `Profile "${name}" does not exist. Run vc-tools login first.`, 5);
56
+ }
57
+ return { name, profile };
58
+ }
59
+ async readAuthState() {
60
+ const raw = await this.credentials.readAuthState();
61
+ return normalizeAuthState(raw);
62
+ }
63
+ async saveAuthState(state) {
64
+ await this.credentials.saveAuthState(JSON.stringify(normalizeAuthState(state)));
65
+ }
66
+ async saveDurableCredential(credential, grant) {
67
+ const current = await this.readAuthStateForOverwrite();
68
+ await this.saveAuthState({
69
+ ...current,
70
+ version: 2,
71
+ credential,
72
+ ...(grant ? { grant } : {})
73
+ });
74
+ }
75
+ async saveGrant(grant) {
76
+ const current = await this.readAuthStateForOverwrite();
77
+ await this.saveAuthState({
78
+ ...current,
79
+ version: 2,
80
+ grant
81
+ });
82
+ }
83
+ async readToken(_profileName) {
84
+ return (await this.readAuthState()).grant?.token;
85
+ }
86
+ async saveToken(_profileName, token) {
87
+ await this.saveGrant({ token, savedAt: new Date().toISOString(), source: "token" });
88
+ }
89
+ async clearToken(_profileName) {
90
+ return await this.credentials.clearAuthState();
91
+ }
92
+ async inspect() {
93
+ const [configExists, credentialsExist] = await Promise.all([
94
+ exists(this.configPath()),
95
+ exists(this.credentialsPath())
96
+ ]);
97
+ return { dir: this.dir, configExists, credentialsExist, credentialStore: this.credentialKind };
98
+ }
99
+ configPath() {
100
+ return path.join(this.dir, "config.json");
101
+ }
102
+ credentialsPath() {
103
+ return path.join(this.dir, "credentials.json");
104
+ }
105
+ async writeJsonPrivate(file, value) {
106
+ await fs.mkdir(path.dirname(file), { recursive: true, mode: 0o700 });
107
+ const temp = `${file}.${process.pid}.tmp`;
108
+ await fs.writeFile(temp, `${JSON.stringify(value, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
109
+ await fs.rename(temp, file);
110
+ try {
111
+ await fs.chmod(file, 0o600);
112
+ }
113
+ catch {
114
+ // WHY: Windows may not honor POSIX modes, but the write still uses the narrowest practical Node mode.
115
+ }
116
+ }
117
+ async writeJsonPrivateForCredentialStoreOnly(file, value) {
118
+ await this.writeJsonPrivate(file, value);
119
+ }
120
+ async readAuthStateForOverwrite() {
121
+ try {
122
+ return await this.readAuthState();
123
+ }
124
+ catch (error) {
125
+ if (error instanceof CliError && error.code === "config.credentials_invalid_shape") {
126
+ return { version: 2 };
127
+ }
128
+ throw error;
129
+ }
130
+ }
131
+ }
132
+ class FileCredentialStore {
133
+ store;
134
+ kind = "file";
135
+ constructor(store) {
136
+ this.store = store;
137
+ }
138
+ async readAuthState() {
139
+ if (!(await exists(this.store.credentialsPath()))) {
140
+ return undefined;
141
+ }
142
+ const state = await this.loadCredentials();
143
+ return JSON.stringify(state);
144
+ }
145
+ async saveAuthState(value) {
146
+ await this.writeCredentials(normalizeAuthState(value));
147
+ }
148
+ async clearAuthState() {
149
+ const existed = await exists(this.store.credentialsPath());
150
+ await fs.rm(this.store.credentialsPath(), { force: true });
151
+ return existed;
152
+ }
153
+ async loadCredentials() {
154
+ const file = this.store.credentialsPath();
155
+ try {
156
+ const raw = await fs.readFile(file, "utf8");
157
+ return normalizeAuthState(raw);
158
+ }
159
+ catch (error) {
160
+ if (isNotFound(error)) {
161
+ return { version: 2 };
162
+ }
163
+ if (error instanceof CliError) {
164
+ throw error;
165
+ }
166
+ throw new CliError("config.credentials_invalid", `Could not read vc-tools credentials at ${file}.`, 5);
167
+ }
168
+ }
169
+ async writeCredentials(credentials) {
170
+ await this.store.writeJsonPrivateForCredentialStoreOnly(this.store.credentialsPath(), credentials);
171
+ }
172
+ }
173
+ export function resolveConfigDir(env, override) {
174
+ if (override) {
175
+ return path.resolve(override);
176
+ }
177
+ if (env.VC_TOOLS_CONFIG_DIR) {
178
+ return path.resolve(env.VC_TOOLS_CONFIG_DIR);
179
+ }
180
+ if (process.platform === "win32") {
181
+ return path.join(env.APPDATA ?? path.join(os.homedir(), "AppData", "Roaming"), "vc-tools");
182
+ }
183
+ return path.join(env.XDG_CONFIG_HOME ?? path.join(os.homedir(), ".config"), "vc-tools");
184
+ }
185
+ function normalizeConfig(value) {
186
+ if (!isRecord(value) || value.version !== 1 || typeof value.selectedProfile !== "string" || !isRecord(value.profiles)) {
187
+ throw new CliError("config.invalid_shape", "vc-tools config has an unsupported shape.", 5);
188
+ }
189
+ const profiles = {};
190
+ for (const [name, profile] of Object.entries(value.profiles)) {
191
+ if (!isRecord(profile) || typeof profile.apiUrl !== "string") {
192
+ throw new CliError("config.invalid_profile", `Profile "${name}" is invalid.`, 5);
193
+ }
194
+ const storedProfile = { apiUrl: profile.apiUrl };
195
+ if (typeof profile.workspaceId === "string") {
196
+ storedProfile.workspaceId = profile.workspaceId;
197
+ }
198
+ if (typeof profile.mcpUrl === "string") {
199
+ storedProfile.mcpUrl = profile.mcpUrl;
200
+ }
201
+ profiles[name] = storedProfile;
202
+ }
203
+ return {
204
+ version: 1,
205
+ selectedProfile: value.selectedProfile,
206
+ profiles
207
+ };
208
+ }
209
+ function normalizeAuthState(value) {
210
+ if (value === undefined) {
211
+ return { version: 2 };
212
+ }
213
+ const parsed = typeof value === "string" ? parseAuthStateJson(value) : value;
214
+ if (!isRecord(parsed)) {
215
+ throw new CliError("config.credentials_invalid_shape", "vc-tools credentials have an unsupported shape.", 5);
216
+ }
217
+ if (parsed.version === 1 && isRecord(parsed.profiles)) {
218
+ const legacy = parsed.profiles.default;
219
+ if (isRecord(legacy) && typeof legacy.token === "string") {
220
+ return {
221
+ version: 2,
222
+ grant: {
223
+ token: legacy.token,
224
+ savedAt: typeof legacy.savedAt === "string" ? legacy.savedAt : new Date().toISOString(),
225
+ source: "token"
226
+ }
227
+ };
228
+ }
229
+ return { version: 2 };
230
+ }
231
+ if (parsed.version !== 2) {
232
+ throw new CliError("config.credentials_invalid_shape", "vc-tools credentials have an unsupported shape.", 5);
233
+ }
234
+ const state = { version: 2 };
235
+ const credential = normalizeStoredCredential(parsed.credential);
236
+ const grant = normalizeStoredGrant(parsed.grant);
237
+ if (credential) {
238
+ state.credential = credential;
239
+ }
240
+ if (grant) {
241
+ state.grant = grant;
242
+ }
243
+ return state;
244
+ }
245
+ function parseAuthStateJson(value) {
246
+ if (!value.trim()) {
247
+ return { version: 2 };
248
+ }
249
+ try {
250
+ return JSON.parse(value);
251
+ }
252
+ catch {
253
+ throw new CliError("config.credentials_invalid_shape", "vc-tools credentials have an unsupported shape.", 5);
254
+ }
255
+ }
256
+ function normalizeStoredCredential(value) {
257
+ if (!isRecord(value)) {
258
+ return undefined;
259
+ }
260
+ const mode = value.mode;
261
+ if (mode !== "api_key" && mode !== "oauth" && mode !== "token") {
262
+ return undefined;
263
+ }
264
+ if (typeof value.value !== "string" || typeof value.savedAt !== "string") {
265
+ return undefined;
266
+ }
267
+ const source = value.source;
268
+ return {
269
+ mode,
270
+ value: value.value,
271
+ savedAt: value.savedAt,
272
+ source: source === "browser_device" ||
273
+ source === "login" ||
274
+ source === "flag" ||
275
+ source === "file" ||
276
+ source === "stdin" ||
277
+ source === "env" ||
278
+ source === "token"
279
+ ? source
280
+ : "login",
281
+ expiresAt: typeof value.expiresAt === "number" ? value.expiresAt : undefined
282
+ };
283
+ }
284
+ function normalizeStoredGrant(value) {
285
+ if (!isRecord(value) || typeof value.token !== "string" || typeof value.savedAt !== "string") {
286
+ return undefined;
287
+ }
288
+ const source = value.source;
289
+ return {
290
+ token: value.token,
291
+ savedAt: value.savedAt,
292
+ source: source === "exchange" || source === "browser_device" || source === "token" ? source : "exchange",
293
+ expiresAt: typeof value.expiresAt === "number" ? value.expiresAt : undefined
294
+ };
295
+ }
296
+ async function exists(file) {
297
+ try {
298
+ await fs.access(file);
299
+ return true;
300
+ }
301
+ catch {
302
+ return false;
303
+ }
304
+ }
305
+ function isNotFound(error) {
306
+ return isRecord(error) && error.code === "ENOENT";
307
+ }
308
+ function isRecord(value) {
309
+ return typeof value === "object" && value !== null && !Array.isArray(value);
310
+ }
311
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/legacy/config/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface ApiClientOptions {
2
+ baseUrl: string;
3
+ token?: string | undefined;
4
+ timeoutMs: number;
5
+ allowInsecureLocalApi?: boolean | undefined;
6
+ fetchImpl?: typeof fetch | undefined;
7
+ }
8
+ export interface BaseClientOptions {
9
+ baseUrl: string;
10
+ timeoutMs: number;
11
+ allowInsecureLocalApi?: boolean | undefined;
12
+ fetchImpl?: typeof fetch | undefined;
13
+ serviceName?: string | undefined;
14
+ redactResponses?: boolean | undefined;
15
+ }
16
+ export interface BaseRequestOptions {
17
+ query?: Record<string, string | number | boolean | undefined>;
18
+ body?: unknown;
19
+ headers?: Record<string, string>;
20
+ }
21
+ export interface ApiRequestOptions extends BaseRequestOptions {
22
+ auth?: boolean;
23
+ }
24
+ export interface DownloadResponse {
25
+ bytes: Uint8Array;
26
+ contentType: string;
27
+ filename?: string | undefined;
28
+ }
29
+ export interface ApiClient {
30
+ readonly baseUrl: string;
31
+ request<T = unknown>(method: string, path: string, options?: ApiRequestOptions): Promise<T>;
32
+ download(path: string, options?: ApiRequestOptions): Promise<DownloadResponse>;
33
+ upload<T = unknown>(path: string, form: FormData, options?: ApiRequestOptions): Promise<T>;
34
+ }
35
+ export interface BaseClient {
36
+ readonly baseUrl: string;
37
+ request<T = unknown>(method: string, path: string, options?: BaseRequestOptions): Promise<T>;
38
+ download(path: string, options?: BaseRequestOptions): Promise<DownloadResponse>;
39
+ upload<T = unknown>(path: string, form: FormData, options?: BaseRequestOptions): Promise<T>;
40
+ }
41
+ export declare function createBaseClient(options: BaseClientOptions): BaseClient;
42
+ export declare function createApiClient(options: ApiClientOptions): ApiClient;
43
+ export declare function encodePathSegment(value: string): string;
44
+ export declare function normalizeBaseUrl(input: string, allowInsecureLocalApi: boolean): URL;
45
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/legacy/core/api-client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,EAAE,OAAO,KAAK,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,EAAE,OAAO,KAAK,GAAG,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5F,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/E,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5F;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChF,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7F;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CA+EvE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAkCpE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAiDD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,OAAO,GAAG,GAAG,CA4BnF"}
@@ -0,0 +1,204 @@
1
+ import { CliError } from "../cli/errors.js";
2
+ import { redactObject, redactSecrets } from "./redaction.js";
3
+ export function createBaseClient(options) {
4
+ const base = normalizeBaseUrl(options.baseUrl, options.allowInsecureLocalApi === true);
5
+ const fetchImpl = options.fetchImpl ?? fetch;
6
+ const serviceName = options.serviceName ?? "Remote API";
7
+ const redactResponses = options.redactResponses !== false;
8
+ async function send(method, requestPath, requestOptions = {}, body) {
9
+ const url = buildUrl(base, requestPath, requestOptions.query);
10
+ const controller = new AbortController();
11
+ const timeout = setTimeout(() => controller.abort(), options.timeoutMs);
12
+ const headers = {
13
+ ...requestOptions.headers
14
+ };
15
+ try {
16
+ const init = {
17
+ method,
18
+ headers,
19
+ signal: controller.signal
20
+ };
21
+ if (body !== undefined) {
22
+ init.body = body;
23
+ }
24
+ return await fetchImpl(url, init);
25
+ }
26
+ catch (error) {
27
+ if (error instanceof Error && error.name === "AbortError") {
28
+ throw new CliError("upstream.timeout", `Timed out calling ${url.origin}.`, 6);
29
+ }
30
+ throw new CliError("upstream.unavailable", `Could not reach ${url.origin}.`, 6);
31
+ }
32
+ finally {
33
+ clearTimeout(timeout);
34
+ }
35
+ }
36
+ return {
37
+ baseUrl: base.toString().replace(/\/$/, ""),
38
+ async request(method, path, requestOptions = {}) {
39
+ const headers = {
40
+ Accept: "application/json",
41
+ ...requestOptions.headers
42
+ };
43
+ let body;
44
+ if (requestOptions.body !== undefined) {
45
+ headers["Content-Type"] = "application/json";
46
+ body = JSON.stringify(requestOptions.body);
47
+ }
48
+ const response = await send(method, path, { ...requestOptions, headers }, body);
49
+ return parseJsonResponse(response, serviceName, redactResponses);
50
+ },
51
+ async download(path, requestOptions = {}) {
52
+ const response = await send("GET", path, {
53
+ ...requestOptions,
54
+ headers: {
55
+ Accept: "application/octet-stream",
56
+ ...requestOptions?.headers
57
+ }
58
+ });
59
+ if (!response.ok) {
60
+ await throwApiError(response, serviceName);
61
+ }
62
+ const contentType = response.headers.get("content-type") ?? "application/octet-stream";
63
+ const contentDisposition = response.headers.get("content-disposition") ?? undefined;
64
+ return {
65
+ bytes: new Uint8Array(await response.arrayBuffer()),
66
+ contentType,
67
+ filename: filenameFromContentDisposition(contentDisposition)
68
+ };
69
+ },
70
+ async upload(path, form, requestOptions = {}) {
71
+ const response = await send("POST", path, {
72
+ ...requestOptions,
73
+ headers: {
74
+ Accept: "application/json",
75
+ ...requestOptions.headers
76
+ }
77
+ }, form);
78
+ return parseJsonResponse(response, serviceName, redactResponses);
79
+ }
80
+ };
81
+ }
82
+ export function createApiClient(options) {
83
+ const base = createBaseClient({ ...options, serviceName: "Hosted Tools API" });
84
+ function authorizedOptions(requestOptions = {}) {
85
+ const { auth: _auth, ...baseOptions } = requestOptions;
86
+ if (requestOptions.auth === false) {
87
+ return baseOptions;
88
+ }
89
+ if (!options.token) {
90
+ throw new CliError("auth.missing", "Run vc-tools login or provide a credential file/stdin source before calling the hosted Tools API.", 3);
91
+ }
92
+ return {
93
+ ...baseOptions,
94
+ headers: {
95
+ ...baseOptions.headers,
96
+ Authorization: `Bearer ${options.token}`
97
+ }
98
+ };
99
+ }
100
+ return {
101
+ baseUrl: base.baseUrl,
102
+ request(method, path, requestOptions) {
103
+ return base.request(method, path, authorizedOptions(requestOptions));
104
+ },
105
+ download(path, requestOptions) {
106
+ return base.download(path, authorizedOptions(requestOptions));
107
+ },
108
+ upload(path, form, requestOptions) {
109
+ return base.upload(path, form, authorizedOptions(requestOptions));
110
+ }
111
+ };
112
+ }
113
+ export function encodePathSegment(value) {
114
+ return encodeURIComponent(value);
115
+ }
116
+ async function parseJsonResponse(response, serviceName, redactResponse) {
117
+ if (!response.ok) {
118
+ await throwApiError(response, serviceName);
119
+ }
120
+ if (response.status === 204) {
121
+ return {};
122
+ }
123
+ const contentType = response.headers.get("content-type") ?? "";
124
+ if (!contentType.includes("application/json")) {
125
+ throw new CliError("upstream.invalid_response", `${serviceName} returned a non-JSON response.`, 6);
126
+ }
127
+ const json = await response.json();
128
+ return (redactResponse ? redactObject(json) : json);
129
+ }
130
+ async function throwApiError(response, serviceName) {
131
+ let payload;
132
+ try {
133
+ payload = await response.json();
134
+ }
135
+ catch {
136
+ payload = await response.text().catch(() => "");
137
+ }
138
+ const record = isRecord(payload) ? payload : {};
139
+ const code = typeof record.code === "string" ? record.code : typeof record.errorKey === "string" ? record.errorKey : "upstream.error";
140
+ const rawMessage = typeof record.message === "string" ? record.message : `${serviceName} returned HTTP ${response.status}.`;
141
+ const message = friendlyAuthMessage(response.status, code) ?? rawMessage;
142
+ const exit = response.status >= 500 ? 6 : response.status === 401 || response.status === 403 ? 3 : 1;
143
+ throw new CliError(code, redactSecrets(message), exit, redactObject({ status: response.status, payload }));
144
+ }
145
+ function friendlyAuthMessage(status, code) {
146
+ if (status !== 401 && status !== 403) {
147
+ return undefined;
148
+ }
149
+ if (code === "auth.missing") {
150
+ return "This Agent Computer is not connected yet. Run vc-tools start to connect it, or provide VC_TOOLS_CREDENTIAL_FILE for automation.";
151
+ }
152
+ if (code === "auth.denied" || code.startsWith("auth.")) {
153
+ return "This Agent Computer credential was rejected or expired. Run vc-tools start to reconnect, or refresh the credential file/env source this command uses.";
154
+ }
155
+ return undefined;
156
+ }
157
+ export function normalizeBaseUrl(input, allowInsecureLocalApi) {
158
+ let url;
159
+ try {
160
+ url = new URL(input);
161
+ }
162
+ catch {
163
+ throw new CliError("config.invalid_api_url", "API URL must be an absolute URL.", 5);
164
+ }
165
+ if (url.username || url.password) {
166
+ throw new CliError("config.invalid_api_url", "API URL must not include credentials.", 5);
167
+ }
168
+ if (url.protocol !== "https:") {
169
+ if (isLocalDevUrl(url)) {
170
+ if (!allowInsecureLocalApi) {
171
+ throw new CliError("config.insecure_local_api_denied", "Local HTTP API URLs require --allow-insecure-local-api or VC_TOOLS_ALLOW_INSECURE_LOCAL_API=true.", 5);
172
+ }
173
+ }
174
+ else {
175
+ throw new CliError("config.invalid_api_url", "API URL must use https.", 5);
176
+ }
177
+ }
178
+ url.pathname = url.pathname.replace(/\/+$/, "/");
179
+ return url;
180
+ }
181
+ function buildUrl(base, requestPath, query) {
182
+ const url = new URL(requestPath.replace(/^\/+/, ""), base);
183
+ for (const [key, value] of Object.entries(query ?? {})) {
184
+ if (value !== undefined) {
185
+ url.searchParams.set(key, String(value));
186
+ }
187
+ }
188
+ return url;
189
+ }
190
+ function filenameFromContentDisposition(value) {
191
+ if (!value) {
192
+ return undefined;
193
+ }
194
+ const match = /filename\*?=(?:UTF-8'')?"?([^";]+)"?/i.exec(value);
195
+ return match?.[1] ? decodeURIComponent(match[1]) : undefined;
196
+ }
197
+ function isLocalDevUrl(url) {
198
+ const hostname = url.hostname.toLowerCase().replace(/^\[|\]$/g, "");
199
+ return url.protocol === "http:" && ["localhost", "127.0.0.1", "::1"].includes(hostname);
200
+ }
201
+ function isRecord(value) {
202
+ return typeof value === "object" && value !== null && !Array.isArray(value);
203
+ }
204
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/legacy/core/api-client.ts"],"names":[],"mappings":"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"}