@kodycodes/cli 1.26.2 → 1.26.3

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 (270) hide show
  1. package/dist/auth-4FW6GCLG.js +26 -0
  2. package/dist/auth-4FW6GCLG.js.map +6 -0
  3. package/dist/bin.js +27 -3
  4. package/dist/bin.js.map +6 -1
  5. package/dist/chunk-46IJPEID.js +30 -0
  6. package/dist/chunk-46IJPEID.js.map +6 -0
  7. package/dist/chunk-4D6ORNXY.js +24404 -0
  8. package/dist/chunk-4D6ORNXY.js.map +6 -0
  9. package/dist/chunk-64IM6G4Z.js +341 -0
  10. package/dist/chunk-64IM6G4Z.js.map +6 -0
  11. package/dist/{package-local-runtime-source.js → chunk-64XN367G.js} +373 -52
  12. package/dist/chunk-64XN367G.js.map +6 -0
  13. package/dist/chunk-6XQP5SWX.js +26 -0
  14. package/dist/chunk-6XQP5SWX.js.map +6 -0
  15. package/dist/chunk-75RZUXQL.js +62 -0
  16. package/dist/chunk-75RZUXQL.js.map +6 -0
  17. package/dist/chunk-BISUL7CE.js +106 -0
  18. package/dist/chunk-BISUL7CE.js.map +6 -0
  19. package/dist/chunk-BPGY4IE7.js +57 -0
  20. package/dist/chunk-BPGY4IE7.js.map +6 -0
  21. package/dist/chunk-CASGRYOF.js +21 -0
  22. package/dist/chunk-CASGRYOF.js.map +6 -0
  23. package/dist/chunk-CWWHR4FH.js +19 -0
  24. package/dist/chunk-CWWHR4FH.js.map +6 -0
  25. package/dist/chunk-D55XPY3T.js +1382 -0
  26. package/dist/chunk-D55XPY3T.js.map +6 -0
  27. package/dist/chunk-EOCV74B2.js +948 -0
  28. package/dist/chunk-EOCV74B2.js.map +6 -0
  29. package/dist/chunk-FBVNFWR6.js +437 -0
  30. package/dist/chunk-FBVNFWR6.js.map +6 -0
  31. package/dist/chunk-G4YN6XP5.js +14 -0
  32. package/dist/chunk-G4YN6XP5.js.map +6 -0
  33. package/dist/chunk-G6LJWROP.js +18 -0
  34. package/dist/chunk-G6LJWROP.js.map +6 -0
  35. package/dist/chunk-IHP6PV6X.js +49 -0
  36. package/dist/chunk-IHP6PV6X.js.map +6 -0
  37. package/dist/chunk-JWEFKKAD.js +24 -0
  38. package/dist/chunk-JWEFKKAD.js.map +6 -0
  39. package/dist/chunk-LWNB26KO.js +147 -0
  40. package/dist/chunk-LWNB26KO.js.map +6 -0
  41. package/dist/chunk-OVGXPRSY.js +20 -0
  42. package/dist/chunk-OVGXPRSY.js.map +6 -0
  43. package/dist/chunk-PDWCKWQF.js +453 -0
  44. package/dist/chunk-PDWCKWQF.js.map +6 -0
  45. package/dist/chunk-QHBCP4OB.js +44 -0
  46. package/dist/chunk-QHBCP4OB.js.map +6 -0
  47. package/dist/chunk-R4IUV5P5.js +664 -0
  48. package/dist/chunk-R4IUV5P5.js.map +6 -0
  49. package/dist/chunk-RM34N3KI.js +525 -0
  50. package/dist/chunk-RM34N3KI.js.map +6 -0
  51. package/dist/chunk-RTWUNV76.js +309 -0
  52. package/dist/chunk-RTWUNV76.js.map +6 -0
  53. package/dist/chunk-SMURF26I.js +23 -0
  54. package/dist/chunk-SMURF26I.js.map +6 -0
  55. package/dist/chunk-SXHULGL4.js +426 -0
  56. package/dist/chunk-SXHULGL4.js.map +6 -0
  57. package/dist/chunk-TIL35OWA.js +1959 -0
  58. package/dist/chunk-TIL35OWA.js.map +6 -0
  59. package/dist/chunk-VQS5YSCI.js +54 -0
  60. package/dist/chunk-VQS5YSCI.js.map +6 -0
  61. package/dist/chunk-XDCOWU5R.js +696 -0
  62. package/dist/chunk-XDCOWU5R.js.map +6 -0
  63. package/dist/chunk-XOPPGRUP.js +605 -0
  64. package/dist/chunk-XOPPGRUP.js.map +6 -0
  65. package/dist/cli.js +74 -1500
  66. package/dist/cli.js.map +6 -1
  67. package/dist/dev-command-3LX234N6.js +4900 -0
  68. package/dist/dev-command-3LX234N6.js.map +6 -0
  69. package/dist/git-credential-FUE3JE3T.js +163 -0
  70. package/dist/git-credential-FUE3JE3T.js.map +6 -0
  71. package/dist/install-ZML2TCDG.js +10694 -0
  72. package/dist/install-ZML2TCDG.js.map +6 -0
  73. package/dist/local-execute-SZV6XN4T.js +368 -0
  74. package/dist/local-execute-SZV6XN4T.js.map +6 -0
  75. package/dist/local-package-run-2TMCAZZ2.js +23 -0
  76. package/dist/local-package-run-2TMCAZZ2.js.map +6 -0
  77. package/dist/mcp-G2AWTIXR.js +21 -0
  78. package/dist/mcp-G2AWTIXR.js.map +6 -0
  79. package/dist/mock-dep-resolve-TVABDNR7.js +52 -0
  80. package/dist/mock-dep-resolve-TVABDNR7.js.map +6 -0
  81. package/dist/mock-fetch-gateway-B5TFGGQS.js +34 -0
  82. package/dist/mock-fetch-gateway-B5TFGGQS.js.map +6 -0
  83. package/dist/mock-local-deps-5SZT3PWT.js +197 -0
  84. package/dist/mock-local-deps-5SZT3PWT.js.map +6 -0
  85. package/dist/mock-server-SV2IKC4I.js +21 -0
  86. package/dist/mock-server-SV2IKC4I.js.map +6 -0
  87. package/dist/open-api-client-DVVMLY7P.js +42 -0
  88. package/dist/open-api-client-DVVMLY7P.js.map +6 -0
  89. package/dist/org-X7B5BI4R.js +132 -0
  90. package/dist/org-X7B5BI4R.js.map +6 -0
  91. package/dist/package-manifest-QH2RU64C.js +14 -0
  92. package/dist/package-manifest-QH2RU64C.js.map +6 -0
  93. package/dist/remote-execute-QMQDVHOY.js +110 -0
  94. package/dist/remote-execute-QMQDVHOY.js.map +6 -0
  95. package/dist/setup-git-5KCUBYPB.js +88 -0
  96. package/dist/setup-git-5KCUBYPB.js.map +6 -0
  97. package/dist/skill-ENPATRIW.js +43 -0
  98. package/dist/skill-ENPATRIW.js.map +6 -0
  99. package/dist/store-WTMRH527.js +48 -0
  100. package/dist/store-WTMRH527.js.map +6 -0
  101. package/dist/structured-error-C65GQ53Z.js +13 -0
  102. package/dist/structured-error-C65GQ53Z.js.map +6 -0
  103. package/dist/target-3QHY7JT4.js +45 -0
  104. package/dist/target-3QHY7JT4.js.map +6 -0
  105. package/dist/webapi-NTVP4BO3.js +2482 -0
  106. package/dist/webapi-NTVP4BO3.js.map +6 -0
  107. package/package.json +8 -8
  108. package/dist/add-mcp-install.js +0 -59
  109. package/dist/add-mcp-install.js.map +0 -1
  110. package/dist/api-token-store.js +0 -120
  111. package/dist/api-token-store.js.map +0 -1
  112. package/dist/api-token.js +0 -238
  113. package/dist/api-token.js.map +0 -1
  114. package/dist/auth-bootstrap.js +0 -373
  115. package/dist/auth-bootstrap.js.map +0 -1
  116. package/dist/auth.js +0 -386
  117. package/dist/auth.js.map +0 -1
  118. package/dist/capability-proxy.js +0 -527
  119. package/dist/capability-proxy.js.map +0 -1
  120. package/dist/credential-call-map.js +0 -155
  121. package/dist/credential-call-map.js.map +0 -1
  122. package/dist/credential-client-runtime-source.js +0 -9
  123. package/dist/credential-client-runtime-source.js.map +0 -1
  124. package/dist/credentialed-fetch-scan.js +0 -98
  125. package/dist/credentialed-fetch-scan.js.map +0 -1
  126. package/dist/defaults.js +0 -34
  127. package/dist/defaults.js.map +0 -1
  128. package/dist/detect-running-hosts.js +0 -13
  129. package/dist/detect-running-hosts.js.map +0 -1
  130. package/dist/dev/dev-assets.js +0 -202
  131. package/dist/dev/dev-assets.js.map +0 -1
  132. package/dist/dev/dev-bundler.js +0 -65
  133. package/dist/dev/dev-bundler.js.map +0 -1
  134. package/dist/dev/dev-events.js +0 -94
  135. package/dist/dev/dev-events.js.map +0 -1
  136. package/dist/dev/dev-port.js +0 -80
  137. package/dist/dev/dev-port.js.map +0 -1
  138. package/dist/dev/dev-protocol.js +0 -14
  139. package/dist/dev/dev-protocol.js.map +0 -1
  140. package/dist/dev/dev-registry.js +0 -95
  141. package/dist/dev/dev-registry.js.map +0 -1
  142. package/dist/dev/dev-watcher.js +0 -162
  143. package/dist/dev/dev-watcher.js.map +0 -1
  144. package/dist/dev/error-page.js +0 -64
  145. package/dist/dev/error-page.js.map +0 -1
  146. package/dist/dev/live-reload.js +0 -151
  147. package/dist/dev/live-reload.js.map +0 -1
  148. package/dist/dev/prebuild.js +0 -102
  149. package/dist/dev/prebuild.js.map +0 -1
  150. package/dist/dev/process-reaper.js +0 -151
  151. package/dist/dev/process-reaper.js.map +0 -1
  152. package/dist/dev/stack-trace.js +0 -56
  153. package/dist/dev/stack-trace.js.map +0 -1
  154. package/dist/dev/workerd-process.js +0 -118
  155. package/dist/dev/workerd-process.js.map +0 -1
  156. package/dist/dev-command.js +0 -676
  157. package/dist/dev-command.js.map +0 -1
  158. package/dist/discover-login-identity.js +0 -77
  159. package/dist/discover-login-identity.js.map +0 -1
  160. package/dist/discover-org.js +0 -62
  161. package/dist/discover-org.js.map +0 -1
  162. package/dist/git-credential.js +0 -147
  163. package/dist/git-credential.js.map +0 -1
  164. package/dist/help.js +0 -333
  165. package/dist/help.js.map +0 -1
  166. package/dist/host-catalog.js +0 -427
  167. package/dist/host-catalog.js.map +0 -1
  168. package/dist/host-config.js +0 -80
  169. package/dist/host-config.js.map +0 -1
  170. package/dist/http-error-body.js +0 -35
  171. package/dist/http-error-body.js.map +0 -1
  172. package/dist/install-hosts.js +0 -328
  173. package/dist/install-hosts.js.map +0 -1
  174. package/dist/install.js +0 -120
  175. package/dist/install.js.map +0 -1
  176. package/dist/invoke-passthrough.js +0 -60
  177. package/dist/invoke-passthrough.js.map +0 -1
  178. package/dist/local-bundle.js +0 -200
  179. package/dist/local-bundle.js.map +0 -1
  180. package/dist/local-execute-auth.js +0 -53
  181. package/dist/local-execute-auth.js.map +0 -1
  182. package/dist/local-execute.js +0 -338
  183. package/dist/local-execute.js.map +0 -1
  184. package/dist/local-gateway-fetch-forward.js +0 -135
  185. package/dist/local-gateway-fetch-forward.js.map +0 -1
  186. package/dist/local-host-runtime-surface.js +0 -75
  187. package/dist/local-host-runtime-surface.js.map +0 -1
  188. package/dist/local-package-graph.js +0 -405
  189. package/dist/local-package-graph.js.map +0 -1
  190. package/dist/local-package-run.js +0 -307
  191. package/dist/local-package-run.js.map +0 -1
  192. package/dist/local-runtime-bridge.js +0 -132
  193. package/dist/local-runtime-bridge.js.map +0 -1
  194. package/dist/local-runtime-source.js +0 -541
  195. package/dist/local-runtime-source.js.map +0 -1
  196. package/dist/login-callback-assets.js +0 -10
  197. package/dist/login-callback-assets.js.map +0 -1
  198. package/dist/login-callback-page.js +0 -362
  199. package/dist/login-callback-page.js.map +0 -1
  200. package/dist/mcp.js +0 -134
  201. package/dist/mcp.js.map +0 -1
  202. package/dist/mock/ensure-msw.js +0 -215
  203. package/dist/mock/ensure-msw.js.map +0 -1
  204. package/dist/mock/install-mock-fetch-shim.js +0 -36
  205. package/dist/mock/install-mock-fetch-shim.js.map +0 -1
  206. package/dist/mock/load-package-mocks.js +0 -136
  207. package/dist/mock/load-package-mocks.js.map +0 -1
  208. package/dist/mock/mock-fetch-gateway.js +0 -343
  209. package/dist/mock/mock-fetch-gateway.js.map +0 -1
  210. package/dist/mock/mock-gateway-fetch-shim.js +0 -104
  211. package/dist/mock/mock-gateway-fetch-shim.js.map +0 -1
  212. package/dist/mock/mock-server.js +0 -499
  213. package/dist/mock/mock-server.js.map +0 -1
  214. package/dist/mock/mock-storage.js +0 -186
  215. package/dist/mock/mock-storage.js.map +0 -1
  216. package/dist/mock/mock-supported.js +0 -63
  217. package/dist/mock/mock-supported.js.map +0 -1
  218. package/dist/mock-dep-resolve.js +0 -47
  219. package/dist/mock-dep-resolve.js.map +0 -1
  220. package/dist/mock-local-deps.js +0 -207
  221. package/dist/mock-local-deps.js.map +0 -1
  222. package/dist/network-error.js +0 -11
  223. package/dist/network-error.js.map +0 -1
  224. package/dist/node-engine.js +0 -21
  225. package/dist/node-engine.js.map +0 -1
  226. package/dist/oauth-provider.js +0 -107
  227. package/dist/oauth-provider.js.map +0 -1
  228. package/dist/onboarding-prompt.js +0 -15
  229. package/dist/onboarding-prompt.js.map +0 -1
  230. package/dist/open-api-client.js +0 -432
  231. package/dist/open-api-client.js.map +0 -1
  232. package/dist/open-url.js +0 -21
  233. package/dist/open-url.js.map +0 -1
  234. package/dist/org-resolve.js +0 -16
  235. package/dist/org-resolve.js.map +0 -1
  236. package/dist/org-slug.js +0 -11
  237. package/dist/org-slug.js.map +0 -1
  238. package/dist/org.js +0 -100
  239. package/dist/org.js.map +0 -1
  240. package/dist/package-app-dev.js +0 -922
  241. package/dist/package-app-dev.js.map +0 -1
  242. package/dist/package-collaborators.js +0 -179
  243. package/dist/package-collaborators.js.map +0 -1
  244. package/dist/package-info.js +0 -19
  245. package/dist/package-info.js.map +0 -1
  246. package/dist/package-local-runtime-source.js.map +0 -1
  247. package/dist/package-manifest.js +0 -364
  248. package/dist/package-manifest.js.map +0 -1
  249. package/dist/process-info.js +0 -14
  250. package/dist/process-info.js.map +0 -1
  251. package/dist/redact.js +0 -16
  252. package/dist/redact.js.map +0 -1
  253. package/dist/remote-execute.js +0 -108
  254. package/dist/remote-execute.js.map +0 -1
  255. package/dist/setup-git.js +0 -676
  256. package/dist/setup-git.js.map +0 -1
  257. package/dist/skill.js +0 -35
  258. package/dist/skill.js.map +0 -1
  259. package/dist/store.js +0 -597
  260. package/dist/store.js.map +0 -1
  261. package/dist/structured-error.js +0 -57
  262. package/dist/structured-error.js.map +0 -1
  263. package/dist/target.js +0 -52
  264. package/dist/target.js.map +0 -1
  265. package/dist/tool-result.js +0 -19
  266. package/dist/tool-result.js.map +0 -1
  267. package/dist/which.js +0 -22
  268. package/dist/which.js.map +0 -1
  269. package/dist/workerd-binary.js +0 -98
  270. package/dist/workerd-binary.js.map +0 -1
@@ -0,0 +1,309 @@
1
+ import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
+ import {
3
+ createFileBackend,
4
+ secretServiceKeyringOptions
5
+ } from "./chunk-RM34N3KI.js";
6
+ import {
7
+ apiTokenEnvVar,
8
+ defaultApiUrl,
9
+ defaultMcpUrl,
10
+ keyringService
11
+ } from "./chunk-IHP6PV6X.js";
12
+
13
+ // src/api-token-store.ts
14
+ import { Entry } from "@napi-rs/keyring";
15
+ import { homedir } from "node:os";
16
+ import { join } from "node:path";
17
+ function accountForApiUrl(apiUrl) {
18
+ return `cli-api-token:${new URL(apiUrl).origin}`;
19
+ }
20
+ function apiTokenFileStorePath(apiUrl, home = homedir()) {
21
+ const origin = new URL(apiUrl).host.replace(/[^a-zA-Z0-9.-]/g, "_");
22
+ const base = process.platform === "win32" ? join(process.env.APPDATA || join(home, "AppData", "Roaming"), "kody") : process.platform === "darwin" ? join(home, "Library", "Application Support", "kody") : join(process.env.XDG_CONFIG_HOME || join(home, ".config"), "kody");
23
+ return join(base, `api-token-${origin}.json`);
24
+ }
25
+ function createApiTokenKeyringBackend(apiUrl) {
26
+ const entry = new Entry(
27
+ keyringService,
28
+ accountForApiUrl(apiUrl),
29
+ secretServiceKeyringOptions
30
+ );
31
+ return {
32
+ kind: "keyring",
33
+ get() {
34
+ try {
35
+ return entry.getPassword();
36
+ } catch {
37
+ return null;
38
+ }
39
+ },
40
+ set(value) {
41
+ entry.setPassword(value);
42
+ },
43
+ delete() {
44
+ try {
45
+ return entry.deleteCredential();
46
+ } catch {
47
+ return false;
48
+ }
49
+ }
50
+ };
51
+ }
52
+ function fileBackendFor(apiUrl, resolution) {
53
+ const path = resolution?.fileStorePath?.(apiUrl) ?? apiTokenFileStorePath(apiUrl);
54
+ return createFileBackend(path);
55
+ }
56
+ function resolveApiTokenBackend(apiUrl, preferred, resolution) {
57
+ if (preferred) return preferred;
58
+ try {
59
+ return (resolution?.createKeyring ?? createApiTokenKeyringBackend)(apiUrl);
60
+ } catch {
61
+ return fileBackendFor(apiUrl, resolution);
62
+ }
63
+ }
64
+ function parseStoredApiToken(raw) {
65
+ const parsed = JSON.parse(raw);
66
+ if (parsed.version !== 1 || typeof parsed.token !== "string" || !parsed.token.startsWith("kody_at_") || typeof parsed.apiUrl !== "string" || typeof parsed.tokenId !== "string") {
67
+ throw new Error(
68
+ "Stored Kody API token is invalid. Run `kody auth bootstrap --code \u2026` again."
69
+ );
70
+ }
71
+ return parsed;
72
+ }
73
+ function readParsed(store) {
74
+ const raw = store.get();
75
+ if (!raw) return null;
76
+ return parseStoredApiToken(raw);
77
+ }
78
+ function loadStoredApiToken(apiUrl = defaultApiUrl, backend, resolution) {
79
+ const store = resolveApiTokenBackend(apiUrl, backend, resolution);
80
+ try {
81
+ const loaded = readParsed(store);
82
+ if (loaded) return loaded;
83
+ } catch (error) {
84
+ if (!(store.kind === "keyring" && !backend)) throw error;
85
+ }
86
+ if (store.kind === "keyring" && !backend) {
87
+ return readParsed(fileBackendFor(apiUrl, resolution));
88
+ }
89
+ return null;
90
+ }
91
+ function saveStoredApiToken(credentials, backend, resolution) {
92
+ const store = resolveApiTokenBackend(credentials.apiUrl, backend, resolution);
93
+ try {
94
+ store.set(JSON.stringify(credentials));
95
+ return { backend: store };
96
+ } catch (error) {
97
+ if (store.kind === "keyring" && !backend) {
98
+ const fallback = fileBackendFor(credentials.apiUrl, resolution);
99
+ fallback.set(JSON.stringify(credentials));
100
+ return { backend: fallback };
101
+ }
102
+ throw error;
103
+ }
104
+ }
105
+ function deleteStoredApiToken(apiUrl = defaultApiUrl, backend, resolution) {
106
+ const store = resolveApiTokenBackend(apiUrl, backend, resolution);
107
+ let deleted = false;
108
+ try {
109
+ deleted = store.delete();
110
+ } catch {
111
+ deleted = false;
112
+ }
113
+ if (store.kind === "keyring" && !backend) {
114
+ const file = fileBackendFor(apiUrl, resolution);
115
+ deleted = file.delete() || deleted;
116
+ }
117
+ return { deleted, backend: store };
118
+ }
119
+
120
+ // src/api-token.ts
121
+ var shortAbsoluteLifetimeMs = 24 * 60 * 60 * 1e3;
122
+ var localExecuteOauthPlatformIssueUrl = "https://github.com/kentcdodds/kody/issues/2812";
123
+ var loopbackHosts = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "[::1]", "::1"]);
124
+ function tryParseUrl(value) {
125
+ try {
126
+ return new URL(value);
127
+ } catch {
128
+ return null;
129
+ }
130
+ }
131
+ function isWorkersDevHostname(hostname) {
132
+ return hostname.endsWith(".workers.dev");
133
+ }
134
+ function isPairedApiUrl(apiUrl = defaultApiUrl, mcpUrl = defaultMcpUrl) {
135
+ const api = tryParseUrl(apiUrl);
136
+ const mcp = tryParseUrl(mcpUrl);
137
+ if (!api || !mcp) return false;
138
+ const apiIsLoopback = loopbackHosts.has(api.hostname.toLowerCase());
139
+ const mcpIsLoopback = loopbackHosts.has(mcp.hostname.toLowerCase());
140
+ if (apiIsLoopback && mcpIsLoopback) {
141
+ return ["http:", "https:"].includes(api.protocol) && ["http:", "https:"].includes(mcp.protocol);
142
+ }
143
+ if (api.protocol !== "https:" || mcp.protocol !== "https:") return false;
144
+ const apiIsWorkersDev = isWorkersDevHostname(api.hostname);
145
+ const mcpIsWorkersDev = isWorkersDevHostname(mcp.hostname);
146
+ if (apiIsWorkersDev || mcpIsWorkersDev) {
147
+ if (!apiIsWorkersDev || !mcpIsWorkersDev) return false;
148
+ const apiLabels = api.hostname.toLowerCase().split(".");
149
+ const mcpLabels = mcp.hostname.toLowerCase().split(".");
150
+ return apiLabels.length === mcpLabels.length && apiLabels.slice(1).join(".") === mcpLabels.slice(1).join(".") && apiLabels[0] === `${mcpLabels[0]}-api`;
151
+ }
152
+ return api.hostname.toLowerCase() === `api.${mcp.hostname.toLowerCase()}`;
153
+ }
154
+ function expectedPairedApiOrigin(mcpUrl) {
155
+ const mcp = tryParseUrl(mcpUrl);
156
+ if (!mcp) return "a paired API origin";
157
+ if (loopbackHosts.has(mcp.hostname.toLowerCase())) {
158
+ return "a loopback API origin";
159
+ }
160
+ const hostname = mcp.hostname.toLowerCase();
161
+ if (isWorkersDevHostname(hostname)) {
162
+ const labels = hostname.split(".");
163
+ labels[0] = `${labels[0]}-api`;
164
+ return `https://${labels.join(".")}`;
165
+ }
166
+ return `https://api.${hostname}`;
167
+ }
168
+ function readApiToken(values = {}, env = process.env) {
169
+ const token = (values.token ?? env[apiTokenEnvVar] ?? "").trim();
170
+ return token.length > 0 ? token : null;
171
+ }
172
+ function resolveScopedApiToken(input = {}) {
173
+ const token = readApiToken(input.tokenValues, input.env);
174
+ if (token) return token;
175
+ const apiUrl = input.apiUrl || defaultApiUrl;
176
+ const loadApi = input.loadApiToken ?? loadStoredApiToken;
177
+ return loadApi(apiUrl, input.apiTokenBackend, input.apiTokenResolution)?.token ?? null;
178
+ }
179
+ function isScopedApiToken(token) {
180
+ return token.startsWith("kody_at_");
181
+ }
182
+ function apiTokenMintInstructions() {
183
+ return `For CI/headless only: mint with the Kody MCP \`api\` tool \`tokenCreate\` (include \`org:execute\` plus the capability scopes this command needs, e.g. \`package:execute\` / \`integration:read\`) and pass --token or set ${apiTokenEnvVar}.`;
184
+ }
185
+ function capabilityProxyForbiddenMessage(input) {
186
+ const reason = input.serverMessage ? `: ${input.serverMessage}` : "";
187
+ return `The API token is not allowed to use CapabilityProxy (${input.code ?? "forbidden"})${reason}.
188
+ Fix: run \`npx @kodycodes/cli login\` (agents on Kody MCP: ${cliBootstrapInstructions()}; CI: tokenCreate with \`org:execute\`, passed via --token or ${apiTokenEnvVar}).`;
189
+ }
190
+ function cliBootstrapInstructions(lifetime = "short") {
191
+ return `From MCP, call \`cliCredentialBootstrap\` (MCP \`api\` / \`kody.cliCredentialBootstrap\`), then run \`npx @kodycodes/cli auth bootstrap --code <kody_bc_\u2026> --lifetime ${lifetime}\``;
192
+ }
193
+ function inferCliTokenLifetimeAlias(stored, nowMs = Date.now()) {
194
+ if (!stored) return "short";
195
+ const absoluteMs = Date.parse(stored.maxExpiresAt ?? "") || Date.parse(stored.expiresAt ?? "");
196
+ if (!Number.isFinite(absoluteMs)) return "short";
197
+ return absoluteMs - nowMs > shortAbsoluteLifetimeMs ? "long" : "short";
198
+ }
199
+ function cliBootstrapLifetimeFlags(lifetime = "short") {
200
+ return `--lifetime ${lifetime}`;
201
+ }
202
+ function cliBootstrapLifetimeMintFields(lifetime = "short") {
203
+ return { lifetime };
204
+ }
205
+ function currentStoredTokenLifetimeAlias(apiUrl = defaultApiUrl, nowMs = Date.now(), loadApiToken = loadStoredApiToken) {
206
+ return inferCliTokenLifetimeAlias(loadApiToken(apiUrl), nowMs);
207
+ }
208
+ function missingApiTokenMessage(purpose) {
209
+ return `${purpose} needs a scoped Kody API token. ${cliBootstrapInstructions()}, or ${apiTokenMintInstructions()}`;
210
+ }
211
+ function missingLocalExecuteAuthMessage(purpose = "execute --local") {
212
+ return `${purpose} needs auth. ${cliBootstrapInstructions()}; or run \`kody login\`; or for CI/headless, ${apiTokenMintInstructions()}`;
213
+ }
214
+ function missingCliAuthMessage() {
215
+ return `Not logged in, and no API token is set. ${cliBootstrapInstructions()}; or run \`kody login\` for browser OAuth (search, whoami, cloud execute, and login-backed \`execute --local\`); or for CI/headless, ${apiTokenMintInstructions()}`;
216
+ }
217
+ function rejectedOauthBearerMessage() {
218
+ return `Kody rejected the bearer from \`kody login\`: the Open API still accepts only scoped \`kody_at_\u2026\` API tokens on CapabilityProxy / package-graph (not MCP OAuth). See ${localExecuteOauthPlatformIssueUrl}. Until that lands, ${apiTokenMintInstructions()}`;
219
+ }
220
+ function readInsufficientScopeDetails(body) {
221
+ const details = isRecord(body) && isRecord(body.error) && isRecord(body.error.details) ? body.error.details : null;
222
+ if (!details) return { requiredScope: null, mintScopes: null, denial: null };
223
+ const requiredScope = readNonEmptyString(details.required_scope) ?? readNonEmptyString(details.required_permission) ?? readStringList(details.required_scopes)?.join(", ") ?? null;
224
+ return {
225
+ requiredScope,
226
+ mintScopes: readStringList(details.mint_scopes),
227
+ denial: readNonEmptyString(details.denial)
228
+ };
229
+ }
230
+ function cliBootstrapScopesCommand(scopes, lifetimeFlags = "short") {
231
+ const flags = lifetimeFlags === "short" || lifetimeFlags === "long" ? cliBootstrapLifetimeFlags(lifetimeFlags) : lifetimeFlags;
232
+ return `npx @kodycodes/cli auth bootstrap ${flags} --scopes ${scopes.join(",")}`;
233
+ }
234
+ function cliBootstrapMintCall(scopes, lifetime = "short") {
235
+ const fieldsRecord = lifetime === "short" || lifetime === "long" ? cliBootstrapLifetimeMintFields(lifetime) : lifetime;
236
+ const fields = [
237
+ ...Object.entries(fieldsRecord).map(
238
+ ([key, value]) => `${key}: ${JSON.stringify(value)}`
239
+ ),
240
+ `scopes: [${scopes.map((scope) => JSON.stringify(scope)).join(", ")}]`
241
+ ];
242
+ return `cliCredentialBootstrap({ ${fields.join(", ")} })`;
243
+ }
244
+ function insufficientScopeMessage(input) {
245
+ const required = input.requiredScope ?? null;
246
+ const lifetime = input.currentLifetime === "long" || input.currentLifetime === "short" ? input.currentLifetime : "short";
247
+ const lifetimeFlags = cliBootstrapLifetimeFlags(lifetime);
248
+ const lifetimeMint = cliBootstrapLifetimeMintFields(lifetime);
249
+ if (input.denial === "missing_permission") {
250
+ return `Kody returned insufficient_scope: your org role does not grant ${required ? `"${required}"` : "the required permission"}. A new token cannot add it; an org Owner can grant it.`;
251
+ }
252
+ if (!required) {
253
+ return `Kody returned insufficient_scope. Mint a token that includes the missing scope: run \`${cliBootstrapScopesCommand(["<scope>", "\u2026"], lifetimeFlags)}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(["<scope>", "\u2026"], lifetimeMint)}\` and run its cli_command. Scopes replace the defaults, so list every scope you need. For CI/headless, mint with tokenCreate and pass --token or set ${apiTokenEnvVar}.`;
254
+ }
255
+ const mintScopes = input.mintScopes && input.mintScopes.length > 0 ? input.mintScopes : input.currentScopes && input.currentScopes.length > 0 ? [.../* @__PURE__ */ new Set([...input.currentScopes, ...required.split(/,\s*/)])].sort() : null;
256
+ if (!mintScopes) {
257
+ return `Kody returned insufficient_scope: this token is missing "${required}". Mint a token whose scopes include "${required}" plus the ones you already use (scopes replace the defaults): run \`${cliBootstrapScopesCommand(["<current scopes>", required], lifetimeFlags)}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(["<current scopes>", required], lifetimeMint)}\` and run its cli_command. For CI/headless, mint with tokenCreate including "${required}" and pass --token or set ${apiTokenEnvVar}.`;
258
+ }
259
+ return `Kody returned insufficient_scope: this token is missing "${required}". Mint one that includes it: run \`${cliBootstrapScopesCommand(mintScopes, lifetimeFlags)}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(mintScopes, lifetimeMint)}\` and run its cli_command. For CI/headless, mint with tokenCreate using those scopes and pass --token or set ${apiTokenEnvVar}.`;
260
+ }
261
+ function isRecord(value) {
262
+ return value !== null && typeof value === "object" && !Array.isArray(value);
263
+ }
264
+ function readNonEmptyString(value) {
265
+ return typeof value === "string" && value.trim() ? value.trim() : null;
266
+ }
267
+ function readStringList(value) {
268
+ if (!Array.isArray(value)) return null;
269
+ const list = value.filter((item) => typeof item === "string").map((item) => item.trim()).filter(Boolean);
270
+ return list.length > 0 ? list : null;
271
+ }
272
+ function featureDisabledMessage() {
273
+ return "Kody returned feature_disabled: CapabilityProxy is not enabled for this Kody account (feature flag `local-execute`). `execute --local` and token-auth cloud execute both stop here; minting another token does not bypass the flag. Browser `kody login` can still run cloud execute over MCP.";
274
+ }
275
+ function requireApiToken(values = {}, env = process.env, purpose = "this command", options = {}) {
276
+ const token = resolveScopedApiToken({
277
+ tokenValues: values,
278
+ env,
279
+ ...options
280
+ });
281
+ if (!token) throw new Error(missingApiTokenMessage(purpose));
282
+ return token;
283
+ }
284
+ function hasExplicitTokenFlag(values) {
285
+ return typeof values.token === "string" && values.token.trim().length > 0;
286
+ }
287
+
288
+ export {
289
+ loadStoredApiToken,
290
+ saveStoredApiToken,
291
+ deleteStoredApiToken,
292
+ isPairedApiUrl,
293
+ expectedPairedApiOrigin,
294
+ readApiToken,
295
+ resolveScopedApiToken,
296
+ isScopedApiToken,
297
+ capabilityProxyForbiddenMessage,
298
+ currentStoredTokenLifetimeAlias,
299
+ missingLocalExecuteAuthMessage,
300
+ missingCliAuthMessage,
301
+ rejectedOauthBearerMessage,
302
+ readInsufficientScopeDetails,
303
+ cliBootstrapMintCall,
304
+ insufficientScopeMessage,
305
+ featureDisabledMessage,
306
+ requireApiToken,
307
+ hasExplicitTokenFlag
308
+ };
309
+ //# sourceMappingURL=chunk-RTWUNV76.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/api-token-store.ts", "../src/api-token.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,23 @@
1
+ import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
+
3
+ // src/node-engine.ts
4
+ var minimumLocalExecuteNodeMajor = 22;
5
+ function assertLocalExecuteNodeEngine(version = process.versions.node) {
6
+ const major = nodeMajor(version);
7
+ if (major !== null && major >= minimumLocalExecuteNodeMajor) return;
8
+ const reported = version.trim() || "unknown";
9
+ throw new Error(
10
+ `execute --local needs Node.js ${minimumLocalExecuteNodeMajor} or newer (this process is v${reported}). Local execute runs your module in workerd. Upgrade Node.js and retry.`
11
+ );
12
+ }
13
+ function nodeMajor(version) {
14
+ const match = /^v?(\d+)/.exec(version.trim());
15
+ if (!match) return null;
16
+ const major = Number(match[1]);
17
+ return Number.isInteger(major) ? major : null;
18
+ }
19
+
20
+ export {
21
+ assertLocalExecuteNodeEngine
22
+ };
23
+ //# sourceMappingURL=chunk-SMURF26I.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/node-engine.ts"],
4
+ "mappings": ";;;AACO,IAAM,+BAA+B;AAMrC,SAAS,6BAA6B,UAAkB,QAAQ,SAAS,MAAY;AAC3F,QAAM,QAAQ,UAAU,OAAO;AAC/B,MAAI,UAAU,QAAQ,SAAS,6BAA8B;AAC7D,QAAM,WAAW,QAAQ,KAAK,KAAK;AACnC,QAAM,IAAI;AAAA,IACT,iCAAiC,4BAA4B,+BAA+B,QAAQ;AAAA,EACrG;AACD;AAEA,SAAS,UAAU,SAAgC;AAClD,QAAM,QAAQ,WAAW,KAAK,QAAQ,KAAK,CAAC;AAC5C,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,OAAO,MAAM,CAAC,CAAC;AAC7B,SAAO,OAAO,UAAU,KAAK,IAAI,QAAQ;AAC1C;",
5
+ "names": []
6
+ }