@kodycodes/cli 1.26.2 → 1.27.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 (296) hide show
  1. package/README.md +175 -167
  2. package/dist/add-mcp-install.d.ts +1 -1
  3. package/dist/api-token.d.ts +1 -1
  4. package/dist/auth-6ZE6QQXA.js +31 -0
  5. package/dist/auth-6ZE6QQXA.js.map +6 -0
  6. package/dist/auth-bootstrap.d.ts +1 -1
  7. package/dist/auth.d.ts +27 -3
  8. package/dist/bin.js +27 -3
  9. package/dist/bin.js.map +6 -1
  10. package/dist/capability-proxy.d.ts +1 -1
  11. package/dist/chunk-2IHISXHN.js +1413 -0
  12. package/dist/chunk-2IHISXHN.js.map +6 -0
  13. package/dist/chunk-2XPH7L2P.js +23 -0
  14. package/dist/chunk-2XPH7L2P.js.map +6 -0
  15. package/dist/chunk-3H72XY5R.js +535 -0
  16. package/dist/chunk-3H72XY5R.js.map +6 -0
  17. package/dist/chunk-46IJPEID.js +30 -0
  18. package/dist/chunk-46IJPEID.js.map +6 -0
  19. package/dist/chunk-4GIFJVGT.js +14 -0
  20. package/dist/chunk-4GIFJVGT.js.map +6 -0
  21. package/dist/chunk-5JIRHJQP.js +1016 -0
  22. package/dist/chunk-5JIRHJQP.js.map +6 -0
  23. package/dist/chunk-5ZBJAP6G.js +2005 -0
  24. package/dist/chunk-5ZBJAP6G.js.map +6 -0
  25. package/dist/chunk-6ZYUGXVW.js +26 -0
  26. package/dist/chunk-6ZYUGXVW.js.map +6 -0
  27. package/dist/chunk-7PRJ36I5.js +23 -0
  28. package/dist/chunk-7PRJ36I5.js.map +6 -0
  29. package/dist/chunk-BTL3PJ2H.js +38 -0
  30. package/dist/chunk-BTL3PJ2H.js.map +6 -0
  31. package/dist/chunk-CASGRYOF.js +21 -0
  32. package/dist/chunk-CASGRYOF.js.map +6 -0
  33. package/dist/chunk-CPS7HW4T.js +56 -0
  34. package/dist/chunk-CPS7HW4T.js.map +6 -0
  35. package/dist/chunk-CWWHR4FH.js +19 -0
  36. package/dist/chunk-CWWHR4FH.js.map +6 -0
  37. package/dist/chunk-D366STO5.js +2051 -0
  38. package/dist/chunk-D366STO5.js.map +6 -0
  39. package/dist/chunk-DW5UTJ6T.js +115 -0
  40. package/dist/chunk-DW5UTJ6T.js.map +6 -0
  41. package/dist/chunk-EJXEVGWF.js +47 -0
  42. package/dist/chunk-EJXEVGWF.js.map +6 -0
  43. package/dist/chunk-FBEZ6PZ7.js +746 -0
  44. package/dist/chunk-FBEZ6PZ7.js.map +6 -0
  45. package/dist/chunk-JOMBXQOS.js +435 -0
  46. package/dist/chunk-JOMBXQOS.js.map +6 -0
  47. package/dist/{package-local-runtime-source.js → chunk-LU7I7CQ4.js} +395 -52
  48. package/dist/chunk-LU7I7CQ4.js.map +6 -0
  49. package/dist/chunk-OZDWOZLV.js +964 -0
  50. package/dist/chunk-OZDWOZLV.js.map +6 -0
  51. package/dist/chunk-SLNAWWQK.js +64 -0
  52. package/dist/chunk-SLNAWWQK.js.map +6 -0
  53. package/dist/chunk-TUUFQYWP.js +348 -0
  54. package/dist/chunk-TUUFQYWP.js.map +6 -0
  55. package/dist/chunk-UW6AWLXX.js +43 -0
  56. package/dist/chunk-UW6AWLXX.js.map +6 -0
  57. package/dist/chunk-W2SAFAT4.js +1563 -0
  58. package/dist/chunk-W2SAFAT4.js.map +6 -0
  59. package/dist/chunk-XV6D6HSG.js +57 -0
  60. package/dist/chunk-XV6D6HSG.js.map +6 -0
  61. package/dist/chunk-Y4FOJETX.js +616 -0
  62. package/dist/chunk-Y4FOJETX.js.map +6 -0
  63. package/dist/chunk-YDWTXEKQ.js +469 -0
  64. package/dist/chunk-YDWTXEKQ.js.map +6 -0
  65. package/dist/chunk-ZILB2HWE.js +24 -0
  66. package/dist/chunk-ZILB2HWE.js.map +6 -0
  67. package/dist/cli.js +74 -1500
  68. package/dist/cli.js.map +6 -1
  69. package/dist/defaults.d.ts +1 -1
  70. package/dist/detect-running-hosts.d.ts +1 -1
  71. package/dist/dev/dev-assets.d.ts +1 -1
  72. package/dist/dev/dev-registry.d.ts +1 -1
  73. package/dist/dev/error-page.d.ts +1 -1
  74. package/dist/dev/live-reload.d.ts +2 -2
  75. package/dist/dev-command-5PDEIWOC.js +5025 -0
  76. package/dist/dev-command-5PDEIWOC.js.map +6 -0
  77. package/dist/dev-command.d.ts +1 -1
  78. package/dist/discover-login-identity.d.ts +6 -7
  79. package/dist/discover-org.d.ts +2 -3
  80. package/dist/generated/openapi-routes.d.ts +6 -0
  81. package/dist/git-credential-INB2UV4C.js +170 -0
  82. package/dist/git-credential-INB2UV4C.js.map +6 -0
  83. package/dist/install-ONEJRYZ3.js +10728 -0
  84. package/dist/install-ONEJRYZ3.js.map +6 -0
  85. package/dist/install.d.ts +1 -1
  86. package/dist/local-execute-I3BP5NEQ.js +395 -0
  87. package/dist/local-execute-I3BP5NEQ.js.map +6 -0
  88. package/dist/local-execute-auth.d.ts +2 -2
  89. package/dist/local-execute.d.ts +1 -1
  90. package/dist/local-gateway-fetch-forward.d.ts +2 -2
  91. package/dist/local-package-run-JFKNSNWM.js +23 -0
  92. package/dist/local-package-run-JFKNSNWM.js.map +6 -0
  93. package/dist/local-package-run.d.ts +2 -2
  94. package/dist/mock/mock-fetch-gateway.d.ts +2 -2
  95. package/dist/mock/mock-supported.d.ts +1 -1
  96. package/dist/mock-dep-resolve-B5ZH4U3H.js +60 -0
  97. package/dist/mock-dep-resolve-B5ZH4U3H.js.map +6 -0
  98. package/dist/mock-fetch-gateway-S2ULVFAI.js +35 -0
  99. package/dist/mock-fetch-gateway-S2ULVFAI.js.map +6 -0
  100. package/dist/mock-local-deps-2VVNJLFF.js +200 -0
  101. package/dist/mock-local-deps-2VVNJLFF.js.map +6 -0
  102. package/dist/mock-local-deps.d.ts +1 -1
  103. package/dist/mock-server-TFO7Q26H.js +22 -0
  104. package/dist/mock-server-TFO7Q26H.js.map +6 -0
  105. package/dist/oauth-browser.d.ts +42 -0
  106. package/dist/oauth-provider.d.ts +14 -19
  107. package/dist/open-api-client-SR4B7265.js +43 -0
  108. package/dist/open-api-client-SR4B7265.js.map +6 -0
  109. package/dist/open-api-client.d.ts +2 -1
  110. package/dist/org-535LB4PD.js +134 -0
  111. package/dist/org-535LB4PD.js.map +6 -0
  112. package/dist/org-resolve.d.ts +2 -0
  113. package/dist/package-app-dev.d.ts +2 -2
  114. package/dist/package-manifest-DFF6XCPV.js +15 -0
  115. package/dist/package-manifest-DFF6XCPV.js.map +6 -0
  116. package/dist/remote-execute-JN6DRFEU.js +129 -0
  117. package/dist/remote-execute-JN6DRFEU.js.map +6 -0
  118. package/dist/remote-execute.d.ts +3 -3
  119. package/dist/setup-git-MHK563LB.js +87 -0
  120. package/dist/setup-git-MHK563LB.js.map +6 -0
  121. package/dist/setup-git.d.ts +1 -1
  122. package/dist/skill-D74XVI6T.js +61 -0
  123. package/dist/skill-D74XVI6T.js.map +6 -0
  124. package/dist/store-27J4CQZ2.js +48 -0
  125. package/dist/store-27J4CQZ2.js.map +6 -0
  126. package/dist/structured-error-5MLWXYR3.js +14 -0
  127. package/dist/structured-error-5MLWXYR3.js.map +6 -0
  128. package/dist/structured-error.d.ts +1 -1
  129. package/dist/target-33ATHDUF.js +17 -0
  130. package/dist/target-33ATHDUF.js.map +6 -0
  131. package/package.json +12 -11
  132. package/skills/kody/SKILL.md +53 -50
  133. package/dist/add-mcp-install.js +0 -59
  134. package/dist/add-mcp-install.js.map +0 -1
  135. package/dist/api-token-store.js +0 -120
  136. package/dist/api-token-store.js.map +0 -1
  137. package/dist/api-token.js +0 -238
  138. package/dist/api-token.js.map +0 -1
  139. package/dist/auth-bootstrap.js +0 -373
  140. package/dist/auth-bootstrap.js.map +0 -1
  141. package/dist/auth.js +0 -386
  142. package/dist/auth.js.map +0 -1
  143. package/dist/capability-proxy.js +0 -527
  144. package/dist/capability-proxy.js.map +0 -1
  145. package/dist/credential-call-map.js +0 -155
  146. package/dist/credential-call-map.js.map +0 -1
  147. package/dist/credential-client-runtime-source.js +0 -9
  148. package/dist/credential-client-runtime-source.js.map +0 -1
  149. package/dist/credentialed-fetch-scan.js +0 -98
  150. package/dist/credentialed-fetch-scan.js.map +0 -1
  151. package/dist/defaults.js +0 -34
  152. package/dist/defaults.js.map +0 -1
  153. package/dist/detect-running-hosts.js +0 -13
  154. package/dist/detect-running-hosts.js.map +0 -1
  155. package/dist/dev/dev-assets.js +0 -202
  156. package/dist/dev/dev-assets.js.map +0 -1
  157. package/dist/dev/dev-bundler.js +0 -65
  158. package/dist/dev/dev-bundler.js.map +0 -1
  159. package/dist/dev/dev-events.js +0 -94
  160. package/dist/dev/dev-events.js.map +0 -1
  161. package/dist/dev/dev-port.js +0 -80
  162. package/dist/dev/dev-port.js.map +0 -1
  163. package/dist/dev/dev-protocol.js +0 -14
  164. package/dist/dev/dev-protocol.js.map +0 -1
  165. package/dist/dev/dev-registry.js +0 -95
  166. package/dist/dev/dev-registry.js.map +0 -1
  167. package/dist/dev/dev-watcher.js +0 -162
  168. package/dist/dev/dev-watcher.js.map +0 -1
  169. package/dist/dev/error-page.js +0 -64
  170. package/dist/dev/error-page.js.map +0 -1
  171. package/dist/dev/live-reload.js +0 -151
  172. package/dist/dev/live-reload.js.map +0 -1
  173. package/dist/dev/prebuild.js +0 -102
  174. package/dist/dev/prebuild.js.map +0 -1
  175. package/dist/dev/process-reaper.js +0 -151
  176. package/dist/dev/process-reaper.js.map +0 -1
  177. package/dist/dev/stack-trace.js +0 -56
  178. package/dist/dev/stack-trace.js.map +0 -1
  179. package/dist/dev/workerd-process.js +0 -118
  180. package/dist/dev/workerd-process.js.map +0 -1
  181. package/dist/dev-command.js +0 -676
  182. package/dist/dev-command.js.map +0 -1
  183. package/dist/discover-login-identity.js +0 -77
  184. package/dist/discover-login-identity.js.map +0 -1
  185. package/dist/discover-org.js +0 -62
  186. package/dist/discover-org.js.map +0 -1
  187. package/dist/git-credential.js +0 -147
  188. package/dist/git-credential.js.map +0 -1
  189. package/dist/help.js +0 -333
  190. package/dist/help.js.map +0 -1
  191. package/dist/host-catalog.js +0 -427
  192. package/dist/host-catalog.js.map +0 -1
  193. package/dist/host-config.js +0 -80
  194. package/dist/host-config.js.map +0 -1
  195. package/dist/http-error-body.js +0 -35
  196. package/dist/http-error-body.js.map +0 -1
  197. package/dist/install-hosts.js +0 -328
  198. package/dist/install-hosts.js.map +0 -1
  199. package/dist/install.js +0 -120
  200. package/dist/install.js.map +0 -1
  201. package/dist/invoke-passthrough.js +0 -60
  202. package/dist/invoke-passthrough.js.map +0 -1
  203. package/dist/local-bundle.js +0 -200
  204. package/dist/local-bundle.js.map +0 -1
  205. package/dist/local-execute-auth.js +0 -53
  206. package/dist/local-execute-auth.js.map +0 -1
  207. package/dist/local-execute.js +0 -338
  208. package/dist/local-execute.js.map +0 -1
  209. package/dist/local-gateway-fetch-forward.js +0 -135
  210. package/dist/local-gateway-fetch-forward.js.map +0 -1
  211. package/dist/local-host-runtime-surface.js +0 -75
  212. package/dist/local-host-runtime-surface.js.map +0 -1
  213. package/dist/local-package-graph.js +0 -405
  214. package/dist/local-package-graph.js.map +0 -1
  215. package/dist/local-package-run.js +0 -307
  216. package/dist/local-package-run.js.map +0 -1
  217. package/dist/local-runtime-bridge.js +0 -132
  218. package/dist/local-runtime-bridge.js.map +0 -1
  219. package/dist/local-runtime-source.js +0 -541
  220. package/dist/local-runtime-source.js.map +0 -1
  221. package/dist/login-callback-assets.js +0 -10
  222. package/dist/login-callback-assets.js.map +0 -1
  223. package/dist/login-callback-page.js +0 -362
  224. package/dist/login-callback-page.js.map +0 -1
  225. package/dist/mcp.d.ts +0 -34
  226. package/dist/mcp.js +0 -134
  227. package/dist/mcp.js.map +0 -1
  228. package/dist/mock/ensure-msw.js +0 -215
  229. package/dist/mock/ensure-msw.js.map +0 -1
  230. package/dist/mock/install-mock-fetch-shim.js +0 -36
  231. package/dist/mock/install-mock-fetch-shim.js.map +0 -1
  232. package/dist/mock/load-package-mocks.js +0 -136
  233. package/dist/mock/load-package-mocks.js.map +0 -1
  234. package/dist/mock/mock-fetch-gateway.js +0 -343
  235. package/dist/mock/mock-fetch-gateway.js.map +0 -1
  236. package/dist/mock/mock-gateway-fetch-shim.js +0 -104
  237. package/dist/mock/mock-gateway-fetch-shim.js.map +0 -1
  238. package/dist/mock/mock-server.js +0 -499
  239. package/dist/mock/mock-server.js.map +0 -1
  240. package/dist/mock/mock-storage.js +0 -186
  241. package/dist/mock/mock-storage.js.map +0 -1
  242. package/dist/mock/mock-supported.js +0 -63
  243. package/dist/mock/mock-supported.js.map +0 -1
  244. package/dist/mock-dep-resolve.js +0 -47
  245. package/dist/mock-dep-resolve.js.map +0 -1
  246. package/dist/mock-local-deps.js +0 -207
  247. package/dist/mock-local-deps.js.map +0 -1
  248. package/dist/network-error.js +0 -11
  249. package/dist/network-error.js.map +0 -1
  250. package/dist/node-engine.js +0 -21
  251. package/dist/node-engine.js.map +0 -1
  252. package/dist/oauth-provider.js +0 -107
  253. package/dist/oauth-provider.js.map +0 -1
  254. package/dist/onboarding-prompt.js +0 -15
  255. package/dist/onboarding-prompt.js.map +0 -1
  256. package/dist/open-api-client.js +0 -432
  257. package/dist/open-api-client.js.map +0 -1
  258. package/dist/open-url.js +0 -21
  259. package/dist/open-url.js.map +0 -1
  260. package/dist/org-resolve.js +0 -16
  261. package/dist/org-resolve.js.map +0 -1
  262. package/dist/org-slug.js +0 -11
  263. package/dist/org-slug.js.map +0 -1
  264. package/dist/org.js +0 -100
  265. package/dist/org.js.map +0 -1
  266. package/dist/package-app-dev.js +0 -922
  267. package/dist/package-app-dev.js.map +0 -1
  268. package/dist/package-collaborators.js +0 -179
  269. package/dist/package-collaborators.js.map +0 -1
  270. package/dist/package-info.js +0 -19
  271. package/dist/package-info.js.map +0 -1
  272. package/dist/package-local-runtime-source.js.map +0 -1
  273. package/dist/package-manifest.js +0 -364
  274. package/dist/package-manifest.js.map +0 -1
  275. package/dist/process-info.js +0 -14
  276. package/dist/process-info.js.map +0 -1
  277. package/dist/redact.js +0 -16
  278. package/dist/redact.js.map +0 -1
  279. package/dist/remote-execute.js +0 -108
  280. package/dist/remote-execute.js.map +0 -1
  281. package/dist/setup-git.js +0 -676
  282. package/dist/setup-git.js.map +0 -1
  283. package/dist/skill.js +0 -35
  284. package/dist/skill.js.map +0 -1
  285. package/dist/store.js +0 -597
  286. package/dist/store.js.map +0 -1
  287. package/dist/structured-error.js +0 -57
  288. package/dist/structured-error.js.map +0 -1
  289. package/dist/target.js +0 -52
  290. package/dist/target.js.map +0 -1
  291. package/dist/tool-result.js +0 -19
  292. package/dist/tool-result.js.map +0 -1
  293. package/dist/which.js +0 -22
  294. package/dist/which.js.map +0 -1
  295. package/dist/workerd-binary.js +0 -98
  296. package/dist/workerd-binary.js.map +0 -1
@@ -0,0 +1,1413 @@
1
+ import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
+ import {
3
+ assertTokenSafeApiUrl,
4
+ capabilityProxyForbiddenMessage,
5
+ capabilityProxyUrl,
6
+ currentStoredTokenLifetimeAlias,
7
+ featureDisabledMessage,
8
+ insufficientScopeMessage,
9
+ isScopedApiToken,
10
+ readInsufficientScopeDetails,
11
+ readPackageVersion,
12
+ rejectedOauthBearerMessage
13
+ } from "./chunk-5JIRHJQP.js";
14
+ import {
15
+ describeNetworkError
16
+ } from "./chunk-4GIFJVGT.js";
17
+ import {
18
+ apiTokenEnvVar,
19
+ cliName
20
+ } from "./chunk-BTL3PJ2H.js";
21
+
22
+ // src/local-bundle.ts
23
+ import * as esbuild from "esbuild";
24
+ import { relative, resolve } from "node:path";
25
+ var BundleError = class extends Error {
26
+ diagnostics;
27
+ constructor(message, diagnostics) {
28
+ super(message);
29
+ this.name = "BundleError";
30
+ this.diagnostics = diagnostics;
31
+ }
32
+ };
33
+ var nodeBuiltinModuleNames = [
34
+ "_http_agent",
35
+ "_http_client",
36
+ "_http_common",
37
+ "_http_incoming",
38
+ "_http_outgoing",
39
+ "_http_server",
40
+ "_stream_duplex",
41
+ "_stream_passthrough",
42
+ "_stream_readable",
43
+ "_stream_transform",
44
+ "_stream_wrap",
45
+ "_stream_writable",
46
+ "_tls_common",
47
+ "_tls_wrap",
48
+ "assert",
49
+ "async_hooks",
50
+ "buffer",
51
+ "child_process",
52
+ "cluster",
53
+ "console",
54
+ "constants",
55
+ "crypto",
56
+ "dgram",
57
+ "diagnostics_channel",
58
+ "dns",
59
+ "domain",
60
+ "events",
61
+ "fs",
62
+ "http",
63
+ "http2",
64
+ "https",
65
+ "inspector",
66
+ "module",
67
+ "net",
68
+ "os",
69
+ "path",
70
+ "perf_hooks",
71
+ "process",
72
+ "punycode",
73
+ "querystring",
74
+ "readline",
75
+ "repl",
76
+ "stream",
77
+ "string_decoder",
78
+ "sys",
79
+ "timers",
80
+ "tls",
81
+ "trace_events",
82
+ "tty",
83
+ "url",
84
+ "util",
85
+ "v8",
86
+ "vm",
87
+ "wasi",
88
+ "worker_threads",
89
+ "zlib"
90
+ ];
91
+ function localBundleOptions(entry) {
92
+ return {
93
+ absWorkingDir: process.cwd(),
94
+ entryPoints: [entry],
95
+ bundle: true,
96
+ write: false,
97
+ format: "esm",
98
+ platform: "neutral",
99
+ target: "esnext",
100
+ logLevel: "silent",
101
+ packages: "bundle",
102
+ external: [
103
+ "kody:*",
104
+ "node:*",
105
+ ...nodeBuiltinModuleNames.flatMap((name) => [name, `${name}/*`])
106
+ ]
107
+ };
108
+ }
109
+ async function bundleLocalUserModule(modulePath) {
110
+ const entry = resolve(modulePath);
111
+ let result;
112
+ try {
113
+ result = await esbuild.build(localBundleOptions(entry));
114
+ } catch (error) {
115
+ throw createBundleError(modulePath, error);
116
+ }
117
+ const output = result.outputFiles?.[0];
118
+ if (output === void 0) {
119
+ throw new BundleError(
120
+ `Could not bundle ${modulePath}: esbuild produced no output.`,
121
+ []
122
+ );
123
+ }
124
+ if (result.errors.length > 0) {
125
+ throw createBundleError(modulePath, { errors: result.errors });
126
+ }
127
+ return output.text;
128
+ }
129
+ function createBundleError(modulePath, error, paths = {
130
+ workingDir: process.cwd(),
131
+ displayRoot: process.cwd()
132
+ }) {
133
+ const diagnostics = bundleDiagnostics(error, paths);
134
+ const details = diagnostics.map(formatBundleDiagnostic).join("\n");
135
+ const header = `Could not bundle ${modulePath}.`;
136
+ const body = details.length > 0 ? `${header}
137
+ ${details}` : header;
138
+ const messages = diagnostics.map((item) => item.message).join("\n");
139
+ if (/Could not resolve ["']kody:@/i.test(messages)) {
140
+ return new BundleError(
141
+ `${body}
142
+ fix: Map the dependency in .kody/deps.json (or package.json#kody.localDeps), keep it in this package's exports, or log in so published package-graph can supply it.`,
143
+ diagnostics
144
+ );
145
+ }
146
+ if (/Could not resolve|Cannot find module|ENOENT/i.test(body)) {
147
+ return new BundleError(
148
+ `${body}
149
+ fix: Run \`npm install\` in the package directory (and any local deps), then retry.`,
150
+ diagnostics
151
+ );
152
+ }
153
+ return new BundleError(body, diagnostics);
154
+ }
155
+ function formatBundleDiagnostic(item) {
156
+ const where = item.file !== null ? `${item.file}${item.line !== null ? `:${item.line}` : ""}${item.col !== null ? `:${item.col}` : ""}: ` : "";
157
+ return `${where}${item.message}${item.frame ? `
158
+ ${item.frame}` : ""}`;
159
+ }
160
+ function bundleDiagnostics(error, paths) {
161
+ if (isEsbuildFailure(error)) {
162
+ return error.errors.filter((item) => item.text.trim().length > 0).map((item) => toDiagnostic(item, paths));
163
+ }
164
+ return [
165
+ {
166
+ file: null,
167
+ line: null,
168
+ col: null,
169
+ message: error instanceof Error ? error.message : String(error),
170
+ frame: null
171
+ }
172
+ ];
173
+ }
174
+ function toDiagnostic(item, paths) {
175
+ const location = item.location;
176
+ if (!location) {
177
+ return {
178
+ file: null,
179
+ line: null,
180
+ col: null,
181
+ message: item.text.trim(),
182
+ frame: null
183
+ };
184
+ }
185
+ const absolute = resolve(paths.workingDir, location.file);
186
+ const fromRoot = relative(paths.displayRoot, absolute);
187
+ const file = fromRoot && !fromRoot.startsWith("..") ? fromRoot : absolute;
188
+ return {
189
+ file,
190
+ line: location.line,
191
+ col: location.column + 1,
192
+ message: item.text.trim(),
193
+ frame: codeFrame(location)
194
+ };
195
+ }
196
+ function codeFrame(location) {
197
+ if (!location.lineText) return null;
198
+ const gutter = String(location.line);
199
+ const pad = " ".repeat(gutter.length);
200
+ const caretWidth = Math.max(
201
+ 1,
202
+ Math.min(location.length || 1, location.lineText.length)
203
+ );
204
+ return ` ${gutter} | ${location.lineText}
205
+ ${pad} | ${" ".repeat(location.column)}${"^".repeat(caretWidth)}`;
206
+ }
207
+ function isEsbuildFailure(error) {
208
+ return typeof error === "object" && error !== null && "errors" in error && Array.isArray(error.errors);
209
+ }
210
+
211
+ // src/credential-client-runtime-source.ts
212
+ var credentialClientRuntimeSource = `function __kodyCreateCredentialRuntime(__kodyCredentialCall) {
213
+ const handleHeader = "x-kody-credential-client";
214
+ const codePattern = /^\\[([a-z_]+)\\] /;
215
+ const redirectStatuses = new Set([301, 302, 303, 307, 308]);
216
+ const maxRedirects = 20;
217
+ const toError = (body) => {
218
+ const error = new Error(String(body?.message ?? 'The credential could not be used.'));
219
+ error.name = 'CredentialError';
220
+ error.code = typeof body?.code === 'string' ? body.code : 'credential_error';
221
+ error.retryWith = Array.isArray(body?.retryWith) ? body.retryWith : [];
222
+ if (Array.isArray(body?.options)) error.options = body.options;
223
+ if (Array.isArray(body?.possibleMatches)) error.possibleMatches = body.possibleMatches;
224
+ return error;
225
+ };
226
+ const fromThrown = (error) => {
227
+ const message = String(error?.message ?? error ?? '');
228
+ const match = codePattern.exec(message);
229
+ if (!match) return error;
230
+ return toError({ code: match[1], message: message.slice(match[0].length) });
231
+ };
232
+ const invoke = async (name, args) => {
233
+ let result;
234
+ try {
235
+ result = await __kodyCredentialCall(name, args);
236
+ } catch (error) {
237
+ throw fromThrown(error);
238
+ }
239
+ if (result && result.ok === false) throw toError(result.error);
240
+ return result?.value;
241
+ };
242
+ const hostAllowed = (hosts, host) => {
243
+ const target = String(host ?? '').toLowerCase();
244
+ return hosts.some((entry) => {
245
+ const normalized = String(entry).trim().toLowerCase();
246
+ if (!normalized.startsWith('*.')) return normalized === target;
247
+ const suffix = normalized.slice(1);
248
+ if (!target.endsWith(suffix)) return false;
249
+ const label = target.slice(0, -suffix.length);
250
+ return label.length > 0 && !label.includes('.');
251
+ });
252
+ };
253
+ const firstExactHost = (hosts) =>
254
+ hosts.find((host) => !String(host).startsWith('*.')) ?? null;
255
+ const resolveUrl = (input, hosts) => {
256
+ const raw = input instanceof Request ? input.url : String(input);
257
+ if (/^[a-z][a-z0-9+.-]*:/i.test(raw)) return raw;
258
+ const host = firstExactHost(hosts);
259
+ if (!host) {
260
+ throw toError({
261
+ code: 'invalid_request',
262
+ message: 'This credential has no exact host to resolve a relative URL against; pass an absolute https:// URL on one of its hosts.',
263
+ });
264
+ }
265
+ return new URL(raw, 'https://' + host).toString();
266
+ };
267
+ const send = async (request, handle) => {
268
+ const headers = new Headers(request.headers);
269
+ if (handle) headers.set(handleHeader, handle);
270
+ else headers.delete(handleHeader);
271
+ try {
272
+ return await globalThis.fetch(new Request(request, { headers, redirect: 'manual' }));
273
+ } catch (error) {
274
+ throw fromThrown(error);
275
+ }
276
+ };
277
+ const createFetch = (opened) => async (input, init) => {
278
+ const redirectMode =
279
+ init?.redirect ?? (input instanceof Request ? input.redirect : 'follow');
280
+ const url = resolveUrl(input, opened.hosts);
281
+ let request =
282
+ input instanceof Request
283
+ ? new Request(url, new Request(input, init))
284
+ : new Request(url, init);
285
+ let carriesCredential = true;
286
+ for (let hop = 0; ; hop += 1) {
287
+ const replay = request.body ? request.clone() : request;
288
+ let response = await send(request, carriesCredential ? opened.handle : null);
289
+ if (opened.kind === 'oauth' && carriesCredential && response.status === 401) {
290
+ const refreshed = await invoke("credentialClientRefresh", { handle: opened.handle });
291
+ if (refreshed?.refreshed) {
292
+ await response.body?.cancel();
293
+ const retry = replay.body ? replay.clone() : replay;
294
+ response = await send(retry, opened.handle);
295
+ }
296
+ }
297
+ if (!redirectStatuses.has(response.status) || redirectMode === 'manual') {
298
+ return response;
299
+ }
300
+ if (redirectMode === 'error') {
301
+ await response.body?.cancel();
302
+ throw new TypeError('The response redirected and redirect is "error".');
303
+ }
304
+ // A url credential owns its whole URL, so its redirects come back as
305
+ // they are: following one would need the secret URL as the base.
306
+ if (opened.kind === 'url') return response;
307
+ const location = response.headers.get('location');
308
+ if (!location) return response;
309
+ if (hop >= maxRedirects) {
310
+ await response.body?.cancel();
311
+ throw new TypeError('Too many redirects.');
312
+ }
313
+ await response.body?.cancel();
314
+ const next = new URL(location, response.url || request.url);
315
+ const rewritesToGet =
316
+ response.status === 303 ||
317
+ ((response.status === 301 || response.status === 302) && request.method === 'POST');
318
+ // The credential follows only to its own hosts over https.
319
+ carriesCredential =
320
+ next.protocol === 'https:' &&
321
+ hostAllowed(opened.hosts, next.hostname);
322
+ const headers = new Headers(replay.headers);
323
+ if (!carriesCredential) headers.delete('authorization');
324
+ if (rewritesToGet) {
325
+ headers.delete('content-type');
326
+ headers.delete('content-length');
327
+ }
328
+ request = new Request(next, {
329
+ method: rewritesToGet ? 'GET' : replay.method,
330
+ headers,
331
+ body: rewritesToGet ? null : replay.body,
332
+ ...(rewritesToGet || !replay.body ? {} : { duplex: 'half' }),
333
+ });
334
+ }
335
+ };
336
+ const toClient = (opened) => {
337
+ const client = { name: opened.name, scope: opened.scope, kind: opened.kind, hosts: [...opened.hosts] };
338
+ if (opened.hint) client.hint = opened.hint;
339
+ if (opened.kind === 'mcp') {
340
+ client.callTool = async (tool, args) =>
341
+ await invoke("credentialClientCallTool", { handle: opened.handle, tool, args: args ?? {} });
342
+ } else if (opened.kind === 'signing') {
343
+ client.sign = async (operation) => {
344
+ const { host, ...rest } = operation ?? {};
345
+ const result = await invoke("credentialClientSign", {
346
+ handle: opened.handle,
347
+ host: host ?? firstExactHost(opened.hosts),
348
+ operation: rest,
349
+ });
350
+ return result?.signature;
351
+ };
352
+ } else {
353
+ client.fetch = createFetch(opened);
354
+ }
355
+ return Object.freeze(client);
356
+ };
357
+ const open = async (args) => toClient(await invoke("credentialClientOpen", args));
358
+ const credential = async (key) => await open({ key });
359
+ credential.named = async (name, options) =>
360
+ await open({ name, scope: options?.scope ?? null });
361
+ const credentials = async (key) => {
362
+ const opened = await invoke("credentialClientOpenAll", { key });
363
+ return (Array.isArray(opened) ? opened : []).map(toClient);
364
+ };
365
+ return { credential: Object.freeze(credential), credentials };
366
+ }`;
367
+
368
+ // src/local-runtime-source.ts
369
+ var localExecuteCompatibilityDate = "2026-04-16";
370
+ var localExecuteCompatibilityFlags = ["nodejs_compat"];
371
+ var localWorkerModuleNames = {
372
+ entry: "__kody_local_entry.js",
373
+ user: "main.js",
374
+ runtime: "kody:runtime",
375
+ /**
376
+ * Flat alias for `kody:runtime`. Path-like package module names
377
+ * (`kody:@scope/pkg/export`) path-join bare `kody:runtime` into
378
+ * `kody:@scope/pkg/kody:runtime`; local deps rewrite to this slash-free
379
+ * name instead. workerd rejects leading-`/` absolute module names.
380
+ */
381
+ runtimeFlatAlias: ".__kody_runtime__.js"
382
+ };
383
+ var runSecretHeader = "x-kody-run-secret";
384
+ var runSecretEnvVar = "KODY_RUN_SECRET";
385
+ var kodyRuntimeStorageSymbolDescription = "kody.runtimeStorage";
386
+ function createRuntimeFlatAliasSource() {
387
+ const runtime = JSON.stringify(localWorkerModuleNames.runtime);
388
+ return `export * from ${runtime};
389
+ export { default } from ${runtime};
390
+ `;
391
+ }
392
+ function localGatewayFetchStreamRuntimeSource(options) {
393
+ return `
394
+ let __kodyBridge = null;
395
+
396
+ export function __kodyInstallLocalBridge(bridge) {
397
+ // Object form: { call, gatewayFetch }. Legacy function form still works for /call.
398
+ __kodyBridge =
399
+ typeof bridge === 'function' ? { call: bridge, gatewayFetch: null } : bridge;
400
+ }
401
+
402
+ function __kodyCall(path, args) {
403
+ if (__kodyBridge === null || typeof __kodyBridge.call !== 'function') {
404
+ throw new Error(${JSON.stringify(options.callUnavailableMessage)});
405
+ }
406
+ return __kodyBridge.call(path, args);
407
+ }
408
+
409
+ const __kodyGatewayNullBodyStatuses = new Set([101, 103, 204, 205, 304]);
410
+ const __kodySecretResolutionHeader = 'x-kody-secret-resolution';
411
+
412
+ /**
413
+ * Streaming CapabilityProxy hop (POST /v1/capability-proxy/gateway-fetch via the
414
+ * loopback bridge). Returns a real Response \u2014 not the JSON gatewayFetch envelope.
415
+ * See kentcdodds/kody docs/contributing/contracts/cli-streaming-gateway-fetch.md.
416
+ */
417
+ async function gatewayFetchStream(input) {
418
+ if (__kodyBridge === null || typeof __kodyBridge.gatewayFetch !== 'function') {
419
+ throw new Error(
420
+ 'Local execute needs kody.gatewayFetchStream on the host runtime to stream a secret-aware fetch body (multipart, large, or ReadableStream). Upgrade @kodycodes/cli, or buffer the body under 4 MiB for the JSON gatewayFetch hop.',
421
+ );
422
+ }
423
+ const record = input != null && typeof input === 'object' && !Array.isArray(input) ? input : null;
424
+ if (!record) {
425
+ throw new Error('gatewayFetchStream requires a single object argument: { request, packageId? }.');
426
+ }
427
+ const requestValue = record.request;
428
+ if (requestValue == null || typeof requestValue !== 'object' || Array.isArray(requestValue)) {
429
+ throw new Error('gatewayFetchStream requires request: { url, method?, headers?, body? }.');
430
+ }
431
+ const url = typeof requestValue.url === 'string' ? requestValue.url.trim() : '';
432
+ if (!url) {
433
+ throw new Error('gatewayFetchStream request.url must be a non-empty absolute URL.');
434
+ }
435
+ const method =
436
+ typeof requestValue.method === 'string' && requestValue.method.trim()
437
+ ? requestValue.method.trim()
438
+ : 'GET';
439
+ const packageId =
440
+ typeof record.packageId === 'string' && record.packageId.trim()
441
+ ? record.packageId.trim()
442
+ : undefined;
443
+ const rawHeaders =
444
+ requestValue.headers != null &&
445
+ typeof requestValue.headers === 'object' &&
446
+ !Array.isArray(requestValue.headers)
447
+ ? { ...requestValue.headers }
448
+ : {};
449
+ const outboundHeaders = {};
450
+ let contentType = null;
451
+ let secretResolution = null;
452
+ for (const [key, value] of Object.entries(rawHeaders)) {
453
+ if (typeof value !== 'string') continue;
454
+ const lower = key.toLowerCase();
455
+ if (lower === 'content-type') {
456
+ contentType = value;
457
+ continue;
458
+ }
459
+ if (lower === __kodySecretResolutionHeader) {
460
+ secretResolution = value;
461
+ continue;
462
+ }
463
+ outboundHeaders[key] = value;
464
+ }
465
+ const headers = {
466
+ 'X-Kody-Gateway-Url': url,
467
+ 'X-Kody-Gateway-Method': method,
468
+ };
469
+ if (packageId) headers['X-Kody-Gateway-Package-Id'] = packageId;
470
+ if (Object.keys(outboundHeaders).length > 0) {
471
+ headers['X-Kody-Gateway-Headers'] = JSON.stringify(outboundHeaders);
472
+ }
473
+ if (contentType) headers['Content-Type'] = contentType;
474
+ if (secretResolution) headers[__kodySecretResolutionHeader] = secretResolution;
475
+ const body = Object.hasOwn(requestValue, 'body') ? requestValue.body : null;
476
+ const init = {
477
+ method: 'POST',
478
+ headers,
479
+ };
480
+ const upper = method.toUpperCase();
481
+ if (body != null && upper !== 'GET' && upper !== 'HEAD') {
482
+ init.body = body;
483
+ init.duplex = 'half';
484
+ }
485
+ if (requestValue.signal != null) init.signal = requestValue.signal;
486
+ if (requestValue.redirect != null) init.redirect = requestValue.redirect;
487
+ const response = await __kodyBridge.gatewayFetch(init);
488
+ const cacheControl = response.headers.get('cache-control') ?? '';
489
+ const contentTypeHeader = response.headers.get('content-type') ?? '';
490
+ if (response.status === 413 && !contentTypeHeader.includes('application/json')) {
491
+ throw new Error(
492
+ 'Request body exceeds the Worker upload limit of 104857600 bytes (100 MiB).',
493
+ );
494
+ }
495
+ if (cacheControl.includes('no-store') && contentTypeHeader.includes('application/json')) {
496
+ const text = await response.clone().text();
497
+ try {
498
+ const parsed = JSON.parse(text);
499
+ if (parsed != null && typeof parsed === 'object' && parsed.error != null) {
500
+ const err = parsed.error;
501
+ const message =
502
+ typeof err === 'string'
503
+ ? err
504
+ : typeof err?.message === 'string'
505
+ ? err.message
506
+ : 'gatewayFetchStream failed.';
507
+ throw new Error(message);
508
+ }
509
+ } catch (error) {
510
+ if (!(error instanceof SyntaxError)) throw error;
511
+ }
512
+ }
513
+ if (__kodyGatewayNullBodyStatuses.has(response.status)) {
514
+ return new Response(null, {
515
+ status: response.status,
516
+ statusText: response.statusText,
517
+ headers: response.headers,
518
+ });
519
+ }
520
+ return response;
521
+ }
522
+
523
+ function __kodyNamespace(path) {
524
+ const label = '[KodyRuntime:' + path.join('.') + ']';
525
+ return new Proxy(function () {}, {
526
+ get(_target, property) {
527
+ if (typeof property === 'symbol' || property === 'then' || property === 'toJSON') {
528
+ return undefined;
529
+ }
530
+ if (property === 'toString' || property === 'inspect') return () => label;
531
+ if (
532
+ path.length === 1 &&
533
+ path[0] === 'kody' &&
534
+ property === 'gatewayFetchStream'
535
+ ) {
536
+ return gatewayFetchStream;
537
+ }
538
+ return __kodyNamespace([...path, property]);
539
+ },
540
+ apply(_target, _thisArg, args) {
541
+ return __kodyCall(path, args);
542
+ },
543
+ });
544
+ }
545
+ `.trimStart();
546
+ }
547
+ function createLocalRuntimeModuleSource() {
548
+ return `
549
+ import { AsyncLocalStorage } from 'node:async_hooks';
550
+
551
+ ${localGatewayFetchStreamRuntimeSource({
552
+ callUnavailableMessage: "kody:runtime is only available while an execute --local run is in progress."
553
+ })}
554
+
555
+ export const kody = __kodyNamespace(['kody']);
556
+
557
+ export const workflows = {
558
+ create: async (input) => await __kodyCall(['workflows', 'create'], [input ?? {}]),
559
+ };
560
+
561
+ // Always null: there is no author-facing packages.invoke. Use a static
562
+ // kody:@scope/package/export import when the name is known, or import(specifier)
563
+ // when the name is data. Under --local, static kody:@ imports are resolved into
564
+ // the workerd module list via POST /v1/local-execute/package-graph (see
565
+ // local-package-graph.ts / kentcdodds/kody#2808) \u2014 never a whole-module
566
+ // CapabilityProxy \u2192 kody.execute hop.
567
+ export const packages = null;
568
+
569
+ export function packageStorage() {
570
+ throw new Error(
571
+ 'packageStorage() requires package provenance: this module was not bundled from a saved package and the run has no package context. ' +
572
+ 'Ad hoc execute has no scratch SQLite helper. Persist durable state from a saved package with packageStorage().',
573
+ );
574
+ }
575
+
576
+ function __kodyPackageSecretsUnavailable() {
577
+ throw new Error(
578
+ 'packageSecrets is not available in this execution context. It is bound for stamped saved-package modules and saved-package runtime contexts.',
579
+ );
580
+ }
581
+
582
+ export const packageSecrets = {
583
+ get: async () => __kodyPackageSecretsUnavailable(),
584
+ has: async () => __kodyPackageSecretsUnavailable(),
585
+ };
586
+ export const packageContext = Object.freeze({});
587
+ export const email = null;
588
+ export const events = null;
589
+
590
+ const __kodyNullBodyStatuses = new Set([204, 205, 304]);
591
+
592
+ function __kodyBytesToBase64(bytes) {
593
+ let binary = '';
594
+ for (let i = 0; i < bytes.length; i += 1) {
595
+ binary += String.fromCharCode(bytes[i]);
596
+ }
597
+ return btoa(binary);
598
+ }
599
+
600
+ function __kodyBase64ToBytes(value) {
601
+ const binary = atob(value);
602
+ const bytes = new Uint8Array(binary.length);
603
+ for (let i = 0; i < binary.length; i += 1) {
604
+ bytes[i] = binary.charCodeAt(i);
605
+ }
606
+ return bytes;
607
+ }
608
+
609
+ async function __kodyBodyToBytes(body) {
610
+ if (typeof body === 'string') {
611
+ return new TextEncoder().encode(body);
612
+ }
613
+ if (body instanceof Uint8Array) return body;
614
+ if (body instanceof ArrayBuffer) return new Uint8Array(body);
615
+ if (ArrayBuffer.isView(body)) {
616
+ return new Uint8Array(body.buffer, body.byteOffset, body.byteLength);
617
+ }
618
+ if (typeof Blob !== 'undefined' && body instanceof Blob) {
619
+ return new Uint8Array(await body.arrayBuffer());
620
+ }
621
+ if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) {
622
+ return new TextEncoder().encode(body.toString());
623
+ }
624
+ if (body && typeof body.getReader === 'function') {
625
+ return new Uint8Array(await new Response(body).arrayBuffer());
626
+ }
627
+ if (typeof FormData !== 'undefined' && body instanceof FormData) {
628
+ throw new Error(
629
+ 'Local execute createAuthenticatedFetch does not support FormData bodies yet; use Uint8Array, Blob, or string.',
630
+ );
631
+ }
632
+ throw new Error(
633
+ 'Local execute createAuthenticatedFetch could not serialize the request body.',
634
+ );
635
+ }
636
+
637
+ export async function createAuthenticatedFetch(providerName) {
638
+ const name = String(providerName ?? '').trim();
639
+ if (!name) {
640
+ throw new Error('Integration name is required.');
641
+ }
642
+ return async (input, init) => {
643
+ let url;
644
+ let method = 'GET';
645
+ let headers = {};
646
+ let bodyBytes = null;
647
+ if (typeof input === 'string' || input instanceof URL) {
648
+ url = String(input);
649
+ method = String(init?.method ?? 'GET');
650
+ headers = Object.fromEntries(new Headers(init?.headers).entries());
651
+ if (init?.body != null) {
652
+ bodyBytes = await __kodyBodyToBytes(init.body);
653
+ }
654
+ } else {
655
+ const merged = new Request(input, init);
656
+ url = merged.url;
657
+ method = merged.method;
658
+ headers = Object.fromEntries(merged.headers.entries());
659
+ if (method !== 'GET' && method !== 'HEAD') {
660
+ bodyBytes = new Uint8Array(await merged.arrayBuffer());
661
+ }
662
+ }
663
+ const result = await __kodyCall(['kody', 'authenticatedFetch'], [{
664
+ providerName: name,
665
+ request: {
666
+ url,
667
+ method,
668
+ headers,
669
+ ...(bodyBytes != null
670
+ ? { bodyBase64: __kodyBytesToBase64(bodyBytes) }
671
+ : {}),
672
+ },
673
+ }]);
674
+ const bytes = __kodyBase64ToBytes(result.bodyBase64 ?? '');
675
+ return new Response(
676
+ __kodyNullBodyStatuses.has(result.status) ? null : bytes,
677
+ {
678
+ status: result.status,
679
+ statusText: result.statusText,
680
+ headers: result.headers,
681
+ },
682
+ );
683
+ };
684
+ }
685
+
686
+ export const secretHeaders = {
687
+ basic(input) {
688
+ const usernameSecret = String(input?.usernameSecret ?? '').trim();
689
+ const passwordSecret = String(input?.passwordSecret ?? '').trim();
690
+ if (!usernameSecret || !passwordSecret) {
691
+ throw new Error(
692
+ 'secretHeaders.basic requires usernameSecret and passwordSecret.',
693
+ );
694
+ }
695
+ const scope =
696
+ typeof input?.scope === 'string' && input.scope.trim()
697
+ ? input.scope.trim()
698
+ : null;
699
+ return scope
700
+ ? \`{{secret-basic:username=\${usernameSecret},password=\${passwordSecret}|scope=\${scope}}}\`
701
+ : \`{{secret-basic:username=\${usernameSecret},password=\${passwordSecret}}}\`;
702
+ },
703
+ };
704
+
705
+ export async function oauthClientCredentials(input) {
706
+ return await __kodyCall(['kody', 'oauthClientCredentials'], [input ?? {}]);
707
+ }
708
+
709
+ // Scoped credential clients (ADR 0068): open/sign/callTool/refresh through
710
+ // CapabilityProxy \`kody.credentialClient*\`. Fetches carry only an opaque
711
+ // handle; origin's gateway places the credential. Secret values never enter
712
+ // local workerd \u2014 same security as hosted and the package-graph shim.
713
+ ${credentialClientRuntimeSource}
714
+ const __kodyCredentialRuntime = __kodyCreateCredentialRuntime((name, args) =>
715
+ __kodyCall(['kody', name], [args ?? {}]),
716
+ );
717
+ export const credential = __kodyCredentialRuntime.credential;
718
+ export const credentials = __kodyCredentialRuntime.credentials;
719
+
720
+ const __kodyRuntimeStorageSymbol = Symbol.for(${JSON.stringify(kodyRuntimeStorageSymbolDescription)});
721
+ const __globalAny = globalThis;
722
+ const __kodyRuntimeStorage =
723
+ __globalAny[__kodyRuntimeStorageSymbol] ??
724
+ (__globalAny[__kodyRuntimeStorageSymbol] = new AsyncLocalStorage());
725
+
726
+ const __kodyRuntimeDefault = Object.freeze({
727
+ kody,
728
+ packageStorage,
729
+ createAuthenticatedFetch,
730
+ secretHeaders,
731
+ oauthClientCredentials,
732
+ credential,
733
+ credentials,
734
+ packageContext,
735
+ packageSecrets,
736
+ email,
737
+ workflows,
738
+ packages,
739
+ events,
740
+ });
741
+ export default __kodyRuntimeDefault;
742
+ export const KodyRuntime = Object.freeze({ defaultValue: __kodyRuntimeDefault });
743
+
744
+ /** Enter the shared runtime ALS before evaluating user / package modules. */
745
+ export function __kodyRunInLocalRuntime(callback) {
746
+ return __kodyRuntimeStorage.run(__kodyRuntimeDefault, callback);
747
+ }
748
+ `.trimStart();
749
+ }
750
+ function createLocalEntrySource(input = {}) {
751
+ const sideEffectImports = [...new Set(input.sideEffectModules ?? [])].filter((name) => typeof name === "string" && name.trim().length > 0).map((name) => `import ${JSON.stringify(name)};`).join("\n");
752
+ const sideEffectBlock = sideEffectImports ? `${sideEffectImports}
753
+ ` : "";
754
+ return `
755
+ ${sideEffectBlock}import {
756
+ __kodyInstallLocalBridge,
757
+ __kodyRunInLocalRuntime,
758
+ } from ${JSON.stringify(localWorkerModuleNames.runtime)};
759
+
760
+ const __kodyRunSecretHeader = ${JSON.stringify(runSecretHeader)};
761
+ let __kodyClaimed = false;
762
+
763
+ function __kodyFormatLogArgs(args) {
764
+ return args.map(String).join(' ');
765
+ }
766
+
767
+ export default {
768
+ async fetch(request, env) {
769
+ const secret = env.${runSecretEnvVar};
770
+ if (__kodyClaimed || !secret || request.headers.get(__kodyRunSecretHeader) !== secret) {
771
+ return new Response('Forbidden: missing run secret, or this one-shot run was already claimed. Only the kody process that started this workerd may call it.', { status: 403 });
772
+ }
773
+ __kodyClaimed = true;
774
+ const { params } = await request.json();
775
+ __kodyInstallLocalBridge({
776
+ call: async (path, args) => {
777
+ const response = await env.KODY_BRIDGE.fetch('http://kody-bridge/call', {
778
+ method: 'POST',
779
+ headers: { 'content-type': 'application/json', [__kodyRunSecretHeader]: secret },
780
+ body: JSON.stringify({ path, args }),
781
+ });
782
+ const data = await response.json();
783
+ if (data.error) throw new Error(data.error);
784
+ return data.result;
785
+ },
786
+ gatewayFetch: async (init) => {
787
+ const headers = new Headers(init?.headers);
788
+ headers.set(__kodyRunSecretHeader, secret);
789
+ return await env.KODY_BRIDGE.fetch('http://kody-bridge/gateway-fetch', {
790
+ ...init,
791
+ method: 'POST',
792
+ headers,
793
+ });
794
+ },
795
+ });
796
+ const logs = [];
797
+ const nativeConsole = globalThis.console;
798
+ globalThis.console = {
799
+ ...nativeConsole,
800
+ log: (...a) => { logs.push(__kodyFormatLogArgs(a)); },
801
+ info: (...a) => { logs.push('[info] ' + __kodyFormatLogArgs(a)); },
802
+ debug: (...a) => { logs.push('[debug] ' + __kodyFormatLogArgs(a)); },
803
+ warn: (...a) => { logs.push('[warn] ' + __kodyFormatLogArgs(a)); },
804
+ error: (...a) => { logs.push('[error] ' + __kodyFormatLogArgs(a)); },
805
+ };
806
+ try {
807
+ // Evaluate user + stamped package modules inside the runtime ALS so
808
+ // inlined optional exports capture callable helpers (cloud parity).
809
+ const result = await __kodyRunInLocalRuntime(async () => {
810
+ const module = await import(${JSON.stringify(`./${localWorkerModuleNames.user}`)});
811
+ if (typeof module?.default !== 'function') {
812
+ throw new Error('Kody execute modules must default export a function.');
813
+ }
814
+ return await module.default(params);
815
+ });
816
+ return new Response(JSON.stringify({ result, logs }), {
817
+ headers: { 'content-type': 'application/json' },
818
+ });
819
+ } catch (error) {
820
+ const message = error instanceof Error ? error.message : String(error);
821
+ return Response.json({ error: message, logs });
822
+ } finally {
823
+ globalThis.console = nativeConsole;
824
+ }
825
+ },
826
+ };
827
+ `.trimStart();
828
+ }
829
+ function createWorkerdConfig(input) {
830
+ const flags = localExecuteCompatibilityFlags.map((flag) => JSON.stringify(flag)).join(", ");
831
+ const networkAllow = input.allowPrivateNetwork ? '["public", "private", "local"]' : '["public"]';
832
+ const packageEntries = (input.packageModules ?? []).map(
833
+ (module) => ` (name = ${JSON.stringify(module.name)}, esModule = embed ${JSON.stringify(module.file)}),`
834
+ ).join("\n");
835
+ const packageBlock = packageEntries ? `
836
+ ${packageEntries}` : "";
837
+ const runtimeFlatAliasFile = localWorkerModuleNames.runtimeFlatAlias;
838
+ const runtimeFlatAlias = ` (name = ${JSON.stringify(localWorkerModuleNames.runtimeFlatAlias)}, esModule = embed ${JSON.stringify(runtimeFlatAliasFile)}),`;
839
+ return `using Workerd = import "/workerd/workerd.capnp";
840
+
841
+ const config :Workerd.Config = (
842
+ services = [
843
+ (name = "main", worker = .kodyWorker),
844
+ (name = "kody-bridge", external = (address = "127.0.0.1:${input.bridgePort}", http = ())),
845
+ (name = "internet", network = (allow = ${networkAllow}, tlsOptions = (trustBrowserCas = true))),
846
+ ],
847
+ sockets = [ (name = "http", address = "127.0.0.1:0", http = (), service = "main") ],
848
+ );
849
+
850
+ const kodyWorker :Workerd.Worker = (
851
+ modules = [
852
+ (name = ${JSON.stringify(localWorkerModuleNames.entry)}, esModule = embed ${JSON.stringify(input.files.entry)}),
853
+ (name = ${JSON.stringify(localWorkerModuleNames.user)}, esModule = embed ${JSON.stringify(input.files.user)}),
854
+ (name = ${JSON.stringify(localWorkerModuleNames.runtime)}, esModule = embed ${JSON.stringify(input.files.runtime)}),
855
+ ${runtimeFlatAlias}${packageBlock}
856
+ ],
857
+ compatibilityDate = ${JSON.stringify(localExecuteCompatibilityDate)},
858
+ compatibilityFlags = [${flags}],
859
+ globalOutbound = "internet",
860
+ bindings = [
861
+ (name = "KODY_BRIDGE", service = "kody-bridge"),
862
+ (name = ${JSON.stringify(runSecretEnvVar)}, fromEnvironment = ${JSON.stringify(runSecretEnvVar)}),
863
+ ],
864
+ );
865
+ `;
866
+ }
867
+
868
+ // node_modules/es-module-lexer/dist/lexer.js
869
+ var A = false;
870
+ var Q = 1 === new Uint8Array(new Uint16Array([1]).buffer)[0];
871
+ var B = "undefined" != typeof Buffer;
872
+ var E = /\r\n?/g;
873
+ function C(A2, Q2, B2) {
874
+ if (B2 < 1 || Q2 + B2 > A2.length) throw new SyntaxError();
875
+ let E2 = 0;
876
+ const C2 = Q2 + B2;
877
+ for (let B3 = Q2; B3 < C2; B3++) {
878
+ const Q3 = A2.charCodeAt(B3), C3 = 32 | Q3, g2 = Q3 >= 48 && Q3 <= 57 ? Q3 - 48 : C3 >= 97 && C3 <= 102 ? C3 - 87 : -1;
879
+ if (-1 === g2) throw new SyntaxError();
880
+ E2 = 16 * E2 + g2;
881
+ }
882
+ return E2;
883
+ }
884
+ function parse(R2, H2 = "@") {
885
+ w || k();
886
+ const o = R2.length + 1, L = (w.__heap_base.value || w.__heap_base) + 4 * o + 16 - w.memory.buffer.byteLength;
887
+ L > 0 && w.memory.grow(Math.ceil(L / 65536));
888
+ const G = w.sa(o - 1);
889
+ if (R2.length >= 64 && B) Buffer.from(w.memory.buffer, G, 2 * (o - 1)).write(R2, "utf16le");
890
+ else {
891
+ const A2 = w.memory.buffer;
892
+ (null == D ? void 0 : D.buffer) !== A2 && (D = new Uint16Array(A2, G)), (Q ? I : g)(R2, D);
893
+ }
894
+ if (!w.parse()) throw Object.assign(new Error(`Parse error ${H2}:${R2.slice(0, w.e()).split("\n").length}:${w.e() - R2.lastIndexOf("\n", w.e() - 1)}`), { idx: w.e() });
895
+ const N = [], M = [];
896
+ for (; w.ri(); ) {
897
+ const A2 = w.is(), Q2 = w.ie(), B2 = w.it(), E2 = 15 & B2, C2 = w.ai(), g2 = w.id(), I2 = w.ss(), D2 = w.se(), H3 = w.ip();
898
+ let k2, o2 = false;
899
+ if (1 & H3 ? k2 = i(-1 === g2 ? A2 : A2 + 1, -1 === g2 ? Q2 : Q2 - 1, A2, !!(2 & H3)) : -1 !== g2 && "`" === R2[A2] && (k2 = U(A2, Q2), o2 = void 0 !== k2), 3 === E2) N.push({ type: "import-meta", specifier: null, typeOnly: false, start: A2, end: Q2, importStart: I2, importEnd: D2 });
900
+ else if (-1 !== g2) {
901
+ const w2 = 5 === E2 ? "source" : 7 === E2 ? "defer" : null;
902
+ N.push({ type: "dynamic", specifier: k2, glob: o2, phase: w2, start: A2, end: Q2, importStart: I2, importEnd: D2, dynamicStart: g2, attributes: null, attributesStart: C2, probablyTypeOnly: !!(16 & B2) });
903
+ } else {
904
+ let g3 = null;
905
+ if (-1 !== C2) {
906
+ for (g3 = [], w.rsa(); w.ra(); ) {
907
+ const A3 = w.aks(), Q3 = w.ake(), B3 = w.avs(), E3 = w.ave();
908
+ g3.push([Y(A3, Q3), Y(B3, E3)]);
909
+ }
910
+ 0 === g3.length && (g3 = null);
911
+ }
912
+ const R3 = 4 === E2 ? "source" : 6 === E2 ? "defer" : null;
913
+ N.push({ type: 8 === E2 ? "reexport-star" : "static", specifier: k2, phase: R3, start: A2, end: Q2, importStart: I2, importEnd: D2, attributes: g3, attributesStart: C2, typeOnly: !!(16 & B2) });
914
+ }
915
+ }
916
+ let s = w.re();
917
+ const J = 0 === s ? void 0 : new DataView(w.memory.buffer);
918
+ for (; 0 !== s; ) {
919
+ A;
920
+ const Q2 = J.getUint32(s, true) - G >>> 1, B2 = J.getUint32(s + 4, true) - G >>> 1, E2 = J.getUint32(s + 8, true), C2 = 0 === E2 ? -1 : E2 - G >>> 1, g2 = J.getUint32(s + 12, true), I2 = 0 === g2 ? -1 : g2 - G >>> 1, D2 = J.getUint32(s + 16, true) - G >>> 1, R3 = J.getUint32(s + 20, true), H3 = J.getUint8(s + 24), k2 = J.getUint8(s + 25), o2 = !!(4 & k2);
921
+ if (3 === H3) M.push({ type: "reexport-all", from: N[R3].specifier, importIndex: R3, start: Q2, end: B2, exportStart: D2, typeOnly: o2 });
922
+ else {
923
+ const A2 = Y(Q2, B2);
924
+ if (1 === H3) {
925
+ const E3 = C2 < 0 ? void 0 : Y(C2, I2);
926
+ M.push({ type: "direct", name: A2, localName: E3, start: Q2, end: B2, localStart: C2, localEnd: I2, exportStart: D2, typeOnly: o2 });
927
+ } else {
928
+ const E3 = 3 & k2, g3 = 0 === E3 ? Y(C2, I2) : 1 === E3 ? "default" : null;
929
+ M.push({ type: "reexport", name: A2, importName: g3, importNameStart: 0 === E3 ? C2 : -1, importNameEnd: 0 === E3 ? I2 : -1, from: N[R3].specifier, importIndex: R3, start: Q2, end: B2, exportStart: D2, typeOnly: o2 });
930
+ }
931
+ }
932
+ s = w.re();
933
+ }
934
+ function i(A2, Q2, B2, g2 = false) {
935
+ try {
936
+ return (function(A3, Q3) {
937
+ let B3 = A3.indexOf("\\");
938
+ if (-1 === B3) return Q3 ? A3.replace(E, "\n") : A3;
939
+ let g3 = A3.slice(0, B3), I2 = Q3 ? g3.replace(E, "\n") : g3;
940
+ for (; ; ) {
941
+ let D2 = B3 + 1;
942
+ if (D2 >= A3.length) throw new SyntaxError();
943
+ const w2 = A3.charCodeAt(D2++);
944
+ switch (w2) {
945
+ case 13:
946
+ 10 === A3.charCodeAt(D2) && D2++;
947
+ break;
948
+ case 10:
949
+ case 8232:
950
+ case 8233:
951
+ break;
952
+ case 114:
953
+ I2 += "\r";
954
+ break;
955
+ case 110:
956
+ I2 += "\n";
957
+ break;
958
+ case 116:
959
+ I2 += " ";
960
+ break;
961
+ case 98:
962
+ I2 += "\b";
963
+ break;
964
+ case 102:
965
+ I2 += "\f";
966
+ break;
967
+ case 118:
968
+ I2 += "\v";
969
+ break;
970
+ case 120:
971
+ I2 += String.fromCharCode(C(A3, D2, 2)), D2 += 2;
972
+ break;
973
+ case 117: {
974
+ let Q4;
975
+ if (123 === A3.charCodeAt(D2)) {
976
+ const B4 = A3.indexOf("}", ++D2);
977
+ if (-1 === B4) throw new SyntaxError();
978
+ Q4 = C(A3, D2, B4 - D2), D2 = B4 + 1;
979
+ } else Q4 = C(A3, D2, 4), D2 += 4;
980
+ if (Q4 > 1114111) throw new SyntaxError();
981
+ Q4 <= 65535 ? I2 += String.fromCharCode(Q4) : (Q4 -= 65536, I2 += String.fromCharCode(55296 + (Q4 >> 10), 56320 + (1023 & Q4)));
982
+ break;
983
+ }
984
+ case 48: {
985
+ const Q4 = A3.charCodeAt(D2);
986
+ if (Q4 >= 48 && Q4 <= 57) throw new SyntaxError();
987
+ I2 += "\0";
988
+ break;
989
+ }
990
+ default:
991
+ if (w2 >= 49 && w2 <= 57) throw new SyntaxError();
992
+ I2 += String.fromCharCode(w2);
993
+ }
994
+ const R3 = A3.indexOf("\\", D2);
995
+ if (-1 === R3) return g3 = A3.slice(D2), I2 + (Q3 ? g3.replace(E, "\n") : g3);
996
+ g3 = A3.slice(D2, R3), I2 += Q3 ? g3.replace(E, "\n") : g3, B3 = R3;
997
+ }
998
+ })(R2.slice(A2, Q2), g2);
999
+ } catch (A3) {
1000
+ throw Object.assign(new Error(`Parse error ${H2}:${R2.slice(0, B2).split("\n").length}:${B2 - R2.lastIndexOf("\n", B2 - 1)}`), { idx: B2 });
1001
+ }
1002
+ }
1003
+ function Y(A2, Q2) {
1004
+ const B2 = R2.charCodeAt(A2);
1005
+ return 34 === B2 || 39 === B2 ? i(A2 + 1, Q2 - 1, A2) : R2.slice(A2, Q2);
1006
+ }
1007
+ function U(A2, Q2) {
1008
+ if (w.rts(), !w.rt()) return;
1009
+ let B2 = "", E2 = A2 + 1, C2 = A2 + 1, g2 = w.te();
1010
+ for (; C2 < Q2; ) {
1011
+ const A3 = R2.charCodeAt(C2);
1012
+ if (96 === A3) break;
1013
+ 92 !== A3 ? 42 !== A3 ? 36 === A3 && 123 === R2.charCodeAt(C2 + 1) && C2 + 2 <= g2 ? (B2 += R2.slice(E2, C2) + "*", C2 = E2 = g2, g2 = w.rt() ? w.te() : -1) : C2++ : (B2 += R2.slice(E2, C2) + "\\*", E2 = ++C2) : C2 += 2;
1014
+ }
1015
+ return B2 + R2.slice(E2, C2);
1016
+ }
1017
+ return [N, M, !!w.f(), !!w.ms()];
1018
+ }
1019
+ function g(A2, Q2) {
1020
+ const B2 = A2.length;
1021
+ let E2 = 0;
1022
+ for (; E2 < B2; ) {
1023
+ const B3 = A2.charCodeAt(E2);
1024
+ Q2[E2++] = (255 & B3) << 8 | B3 >>> 8;
1025
+ }
1026
+ }
1027
+ function I(A2, Q2) {
1028
+ const B2 = A2.length;
1029
+ let E2 = 0;
1030
+ for (; E2 < B2; ) Q2[E2] = A2.charCodeAt(E2++);
1031
+ }
1032
+ var D;
1033
+ var w;
1034
+ var R = () => {
1035
+ return A2 = "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RQRAQcgMKAIAIANBA3RqQQhrKAIAQQVHDQFBzAwoAgAgAUECdGpBBGsoAgAiASgCBA0BIAEgBEECajYCBCAEIAEoAixHBEAgAUEANgIkC0HYDCACQQJqNgIAQQEQKhogAUHYDCgCACIBNgIQQdgMIAFBAms2AgAMAQsgAw0AAkACQEG0DCgCAEEBag4DAAIBAgsgBkEMahArRQ0BCxAsC0GsDEHYDCgCADYCAAtBACEFQYEMLQAADQELQdgMKAIAIQEMAQsLIAZBEGokACAFC+ABAQJ/AkACQAJAIABBIkYgAEEnRnJFBEAgAEEvRg0BIABB4ABHDQNB3AwoAgAhAkHYDCgCACEAA0ACQCAAIgFBAmoiACACSw0AAkACQCAALwEAIgNB3ABrDgUAAwMDAgELIAFBBGohAAwCCyADQSRHDQEgAS8BBEH7AEcNAUHYDCABQQRqNgIAEEoaQdgMQdgMKAIAQQJrIgA2AgAMAQsLQdgMIAA2AgAMAgsgABAuDAELQdgMKAIALwECIgBBKkcEQCAAQS9HDQIQIgwBCyABQQFzECNBAQ8LQQEhAgsgAgvAAQECf0HYDCgCACEBQQEhAiAAQQBBARAqIgBBLEYbRQRAAn8CQAJAAkACQAJAIABBOmsOBgEEBAIEAQALIABBJkYgAEH8AEZyDQAgAEHlAEYNAiAAQS5HDQMLQdgMKAIAQQJqIQFBAQwDC0HYDCgCACIALwECQT5HDQEgAEEEaiEBQQEMAgtB2AwoAgAiAEECakH6CkEMEB4NACAALwEOECZFDQAgAEEOaiEBQQEMAQtBAAshAkHYDCABNgIACyACCykBAX8gAEGgAUYgAEEJayICQRdNQQBBASACdCABcRtyRQRAQQAPC0EBCwvdAwEAQYAIC9UDeABwAG8AcgB0AHAAbwByAHQAbABhAHMAcwByAG8AbQBlAHQAYQB2AG8AeQBpAGUAZABlAGwAZQBpAG4AcwB0AGEAbgB0AHkAcgBlAHQAdQByAGQAZQBiAHUAZwBnAGUAYQB3AGEAaQB0AGgAcgB3AGgAaQBsAGUAZgBvAHIAaQBmAGMAYQB0AGMAZgBpAG4AYQBsAGwAZQBsAHMAYgByAGUAYQBjAG8AbgB0AGkAbgBzAHkAbgBjAHUAbgBjAHQAaQBvAG4AbwB1AHIAYwBlAGUAZgBlAHIAOwB5AHAAZQBuAHQAZQByAGYAYQBjAGUAbgBlAHcAawBlAHkAbwBmAGkAbgBmAGUAcgB0AHkAcABlAG8AZgB1AG4AaQBxAHUAZQBpAG0AcABvAHIAdAByAGUAYQBkAG8AbgBsAHkAYQBiAHMAdAByAGEAYwB0AHQAaABlAG4AYwBhAHQAYwBoAGYAaQBuAGEAbABsAHkAZQBjAGwAYQByAGUAeAB0AGUAbgBkAHMAbgB1AG0AYQBtAGUAcwBwAGEAYwBlAG8AbgBzAHQAbwBkAHUAbABlAGUAcQB1AGkAcgBlAGwAbwBiAGEAbABzAGEAdABpAHMAZgBpAGUAcw==", "undefined" != typeof Buffer ? Buffer.from(A2, "base64") : Uint8Array.from(atob(A2), (A3) => A3.charCodeAt(0));
1036
+ var A2;
1037
+ };
1038
+ var H;
1039
+ var init = () => H || (H = w ? Promise.resolve() : WebAssembly.compile(R()).then(WebAssembly.instantiate).then(({ exports: A2 }) => {
1040
+ w || (w = A2);
1041
+ }));
1042
+ var k = () => {
1043
+ if (w) return;
1044
+ const A2 = new WebAssembly.Module(R());
1045
+ w = new WebAssembly.Instance(A2).exports;
1046
+ };
1047
+
1048
+ // src/local-package-graph.ts
1049
+ var esModuleLexerReady = init();
1050
+ var localPackageGraphPath = "v1/local-execute/package-graph";
1051
+ var localPackageGraphPlatformIssueUrl = "https://github.com/kentcdodds/kody/issues/2808";
1052
+ var packageGraphInlineCodePreferImportsChars = 4e5;
1053
+ function synthesizePackageGraphEntry(imports) {
1054
+ const unique = [...new Set(imports)].sort(
1055
+ (left, right) => left.localeCompare(right)
1056
+ );
1057
+ if (unique.length === 0) {
1058
+ return "export default async function main() {}\n";
1059
+ }
1060
+ const lines = unique.map((specifier) => `import ${JSON.stringify(specifier)}`);
1061
+ return `${lines.join("\n")}
1062
+ export default async function main() {}
1063
+ `;
1064
+ }
1065
+ function isTypeOnlyImport(im) {
1066
+ if (im.type === "dynamic") return im.probablyTypeOnly === true;
1067
+ return im.typeOnly === true;
1068
+ }
1069
+ function parseModuleImports(code) {
1070
+ try {
1071
+ return parse(code)[0];
1072
+ } catch {
1073
+ return [];
1074
+ }
1075
+ }
1076
+ async function listSavedPackageImports(code) {
1077
+ await esModuleLexerReady;
1078
+ const imports = parseModuleImports(code);
1079
+ const found = /* @__PURE__ */ new Set();
1080
+ for (const im of imports) {
1081
+ if (isTypeOnlyImport(im)) continue;
1082
+ const specifier = im.specifier;
1083
+ if (typeof specifier === "string" && specifier.startsWith("kody:@")) {
1084
+ found.add(specifier);
1085
+ }
1086
+ }
1087
+ return [...found];
1088
+ }
1089
+ async function hasSavedPackageImports(code) {
1090
+ return (await listSavedPackageImports(code)).length > 0;
1091
+ }
1092
+ async function hasLiteralDynamicSavedPackageImports(code) {
1093
+ await esModuleLexerReady;
1094
+ return parseModuleImports(code).some((im) => {
1095
+ if (im.type !== "dynamic" || im.probablyTypeOnly) return false;
1096
+ return typeof im.specifier === "string" && im.specifier.startsWith("kody:@");
1097
+ });
1098
+ }
1099
+ function flatAliasForBareKodyBuiltin(specifier) {
1100
+ if (!specifier.startsWith("kody:") || specifier.startsWith("kody:@"))
1101
+ return null;
1102
+ if (specifier === localWorkerModuleNames.runtime) {
1103
+ return localWorkerModuleNames.runtimeFlatAlias;
1104
+ }
1105
+ const name = specifier.slice("kody:".length);
1106
+ if (!name || /[/\\]/.test(name)) return null;
1107
+ return `.__kody_builtin__${name}.js`;
1108
+ }
1109
+ async function rewriteBareKodyBuiltinImports(esModule) {
1110
+ await esModuleLexerReady;
1111
+ const edits = parseModuleImports(esModule).filter((im) => typeof im.specifier === "string").map((im) => {
1112
+ const specifier = im.specifier;
1113
+ const alias = flatAliasForBareKodyBuiltin(specifier);
1114
+ if (!alias) return null;
1115
+ return { start: im.start, end: im.end, alias };
1116
+ }).filter(
1117
+ (edit) => edit !== null
1118
+ ).sort((a, b) => b.start - a.start);
1119
+ let out = esModule;
1120
+ for (const edit of edits) {
1121
+ const raw = esModule.slice(edit.start, edit.end);
1122
+ const quote = raw.startsWith("'") || raw.startsWith('"') ? raw[0] : null;
1123
+ const replacement = quote ? `${quote}${edit.alias}${quote}` : edit.alias;
1124
+ out = `${out.slice(0, edit.start)}${replacement}${out.slice(edit.end)}`;
1125
+ }
1126
+ return out;
1127
+ }
1128
+ var LocalPackageGraphError = class extends Error {
1129
+ status;
1130
+ code;
1131
+ constructor(message, options = {}) {
1132
+ super(message);
1133
+ this.name = "LocalPackageGraphError";
1134
+ this.status = options.status ?? null;
1135
+ this.code = options.code ?? null;
1136
+ }
1137
+ };
1138
+ var localExecuteGatewayFetchShimModuleName = ".__kody_virtual__/runtime.js";
1139
+ async function writePackageModuleFiles(workDir, graph, writeFile, joinPath) {
1140
+ const written = [];
1141
+ for (const [index, module] of graph.modules.entries()) {
1142
+ const file = `pkg-${index}.js`;
1143
+ await writeFile(joinPath(workDir, file), module.esModule);
1144
+ written.push({ name: module.name, file });
1145
+ }
1146
+ return written;
1147
+ }
1148
+ async function resolveLocalPackageGraph(input) {
1149
+ const imports = await listSavedPackageImports(input.code);
1150
+ if (input.depResolve && imports.length === 0 && !await hasLiteralDynamicSavedPackageImports(input.code)) {
1151
+ return { modules: [], imports: [] };
1152
+ }
1153
+ let localModules = [];
1154
+ let unresolved = imports;
1155
+ const {
1156
+ mergePackageGraphs,
1157
+ resolveLocalPackageModules,
1158
+ tryLoadSelfManifest
1159
+ } = await import("./mock-local-deps-2VVNJLFF.js");
1160
+ if (imports.length > 0 && input.packageRoot) {
1161
+ const selfManifest = await tryLoadSelfManifest(input.packageRoot);
1162
+ const local = await resolveLocalPackageModules({
1163
+ code: input.code,
1164
+ packageRoot: input.packageRoot,
1165
+ selfManifest,
1166
+ onStatus: input.onStatus
1167
+ });
1168
+ localModules = local.modules;
1169
+ unresolved = local.unresolved;
1170
+ if (unresolved.length === 0 && (input.depResolve !== void 0 || isLikelyMockBearer(input.token))) {
1171
+ return { modules: localModules, imports };
1172
+ }
1173
+ }
1174
+ if (unresolved.length > 0 && !input.depResolve && isLikelyMockBearer(input.token)) {
1175
+ throw new LocalPackageGraphError(
1176
+ `kody:@ dependencies need published package-graph while --target mock keeps storage/credentials local. Map them in .kody/deps.json (or package.json#kody.localDeps), keep them in this package's exports, or log in (\`kody login\` / \`kody auth bootstrap\`) / set KODY_API_TOKEN so the CLI can fetch dependency source from prod. Unresolved: ${unresolved.join(", ")}`,
1177
+ { code: "mock_package_deps_need_auth" }
1178
+ );
1179
+ }
1180
+ const client = input.depResolve ? {
1181
+ apiUrl: input.depResolve.apiUrl,
1182
+ token: input.depResolve.token,
1183
+ fetchFn: input.depResolve.fetchFn ?? input.fetchFn,
1184
+ ...input.depResolve.org ? { org: input.depResolve.org } : {}
1185
+ } : {
1186
+ apiUrl: input.apiUrl,
1187
+ token: input.token,
1188
+ fetchFn: input.fetchFn,
1189
+ ...input.org ? { org: input.org } : {}
1190
+ };
1191
+ if (input.depResolve && unresolved.length > 0) {
1192
+ input.onStatus?.(
1193
+ `Resolving ${unresolved.length} kody:@ dependenc${unresolved.length === 1 ? "y" : "ies"} from published package-graph (mock keeps storage/credentials local)\u2026`
1194
+ );
1195
+ }
1196
+ const published = await fetchLocalPackageGraph({
1197
+ ...client,
1198
+ code: input.code,
1199
+ conversationId: input.conversationId,
1200
+ ...localModules.length > 0 ? { requiredImports: unresolved } : {}
1201
+ });
1202
+ if (localModules.length === 0) return published;
1203
+ return mergePackageGraphs(localModules, published);
1204
+ }
1205
+ function isLikelyMockBearer(token) {
1206
+ return token === "mock" || token.startsWith("kody_mock_");
1207
+ }
1208
+ async function fetchLocalPackageGraph(input) {
1209
+ assertTokenSafeApiUrl(input.apiUrl);
1210
+ const imports = await listSavedPackageImports(input.code);
1211
+ const required = input.requiredImports ?? imports;
1212
+ if (await hasLiteralDynamicSavedPackageImports(input.code)) {
1213
+ throw new LocalPackageGraphError(
1214
+ `Local execute cannot bind literal dynamic import("kody:@\u2026") yet \u2014 use a static import, or wait for runtime package resolution (${localPackageGraphPlatformIssueUrl}).`,
1215
+ { code: "unsupported_dynamic_package_import" }
1216
+ );
1217
+ }
1218
+ const url = capabilityProxyUrl(input.apiUrl, localPackageGraphPath);
1219
+ if (input.org) url.searchParams.set("org", input.org);
1220
+ const fetchFn = input.fetchFn ?? fetch;
1221
+ const requestCode = input.code.length > packageGraphInlineCodePreferImportsChars ? synthesizePackageGraphEntry(required) : input.code;
1222
+ let response;
1223
+ try {
1224
+ response = await fetchFn(url, {
1225
+ method: "POST",
1226
+ signal: input.signal,
1227
+ headers: {
1228
+ accept: "application/json",
1229
+ "content-type": "application/json",
1230
+ authorization: `Bearer ${input.token}`,
1231
+ "user-agent": `${cliName}/${readPackageVersion()}`
1232
+ },
1233
+ body: JSON.stringify({
1234
+ code: requestCode,
1235
+ imports: required,
1236
+ ...input.conversationId !== void 0 ? { conversationId: input.conversationId } : {}
1237
+ })
1238
+ });
1239
+ } catch (error) {
1240
+ const reason = describeNetworkError(error);
1241
+ throw new LocalPackageGraphError(
1242
+ `Could not reach the Kody API at ${url.origin} (${reason}). Check --api-url / KODY_API_URL and your network.`
1243
+ );
1244
+ }
1245
+ const body = await readJson(response);
1246
+ if (!response.ok) {
1247
+ throw describePackageGraphFailure(
1248
+ response.status,
1249
+ body,
1250
+ url,
1251
+ required,
1252
+ input.token
1253
+ );
1254
+ }
1255
+ const graph = parsePackageGraphBody(body, required);
1256
+ const missing = required.filter(
1257
+ (specifier) => !graph.modules.some((module) => module.name === specifier)
1258
+ );
1259
+ if (missing.length > 0) {
1260
+ throw new LocalPackageGraphError(
1261
+ `Local package graph response omitted modules for: ${missing.join(", ")}. ${localPackageGraphPlatformIssueUrl}`,
1262
+ { code: "incomplete_package_graph" }
1263
+ );
1264
+ }
1265
+ return graph;
1266
+ }
1267
+ function parsePackageGraphBody(body, imports) {
1268
+ if (!isRecord(body) || !Array.isArray(body.modules)) {
1269
+ throw new LocalPackageGraphError(
1270
+ `Kody package-graph response was missing a modules array. ${localPackageGraphPlatformIssueUrl}`,
1271
+ { code: "invalid_package_graph" }
1272
+ );
1273
+ }
1274
+ const modules = [];
1275
+ for (const entry of body.modules) {
1276
+ if (!isRecord(entry) || typeof entry.name !== "string" || !entry.name.trim()) {
1277
+ throw new LocalPackageGraphError(
1278
+ `Kody package-graph response included a module without a name. ${localPackageGraphPlatformIssueUrl}`,
1279
+ { code: "invalid_package_graph" }
1280
+ );
1281
+ }
1282
+ const esModule = typeof entry.esModule === "string" ? entry.esModule : typeof entry.source === "string" ? entry.source : typeof entry.js === "string" ? entry.js : null;
1283
+ if (esModule === null) {
1284
+ throw new LocalPackageGraphError(
1285
+ `Kody package-graph module ${JSON.stringify(entry.name)} was missing esModule source. ${localPackageGraphPlatformIssueUrl}`,
1286
+ { code: "invalid_package_graph" }
1287
+ );
1288
+ }
1289
+ modules.push({ name: entry.name, esModule });
1290
+ }
1291
+ const reportedImports = Array.isArray(body.imports) ? body.imports.filter((value) => typeof value === "string") : imports;
1292
+ return { modules, imports: reportedImports };
1293
+ }
1294
+ function describePackageGraphFailure(status, body, url, imports, token) {
1295
+ const failure = readErrorBody(body);
1296
+ const code = failure?.code ?? null;
1297
+ const detail = failure?.message ? ` Server said: ${failure.message}` : "";
1298
+ const importList = imports.join(", ");
1299
+ if (status === 404) {
1300
+ return new LocalPackageGraphError(
1301
+ `Local execute cannot resolve saved package imports (${importList}): Kody has no package-graph endpoint at ${url.pathname} yet. The CLI will not silently fall back to cloud kody.execute for --local. Platform work: ${localPackageGraphPlatformIssueUrl}.${detail}`,
1302
+ { status, code: code ?? "not_found" }
1303
+ );
1304
+ }
1305
+ if (status === 401) {
1306
+ const message = isScopedApiToken(token) ? `Kody rejected the API token (expired, revoked, or malformed). Mint a fresh scoped token and pass it with --token or ${apiTokenEnvVar}.${detail}` : `${rejectedOauthBearerMessage()}${detail}`;
1307
+ return new LocalPackageGraphError(message, { status, code });
1308
+ }
1309
+ if (code === "feature_disabled") {
1310
+ return new LocalPackageGraphError(`${featureDisabledMessage()}${detail}`, {
1311
+ status,
1312
+ code
1313
+ });
1314
+ }
1315
+ if (code === "insufficient_scope") {
1316
+ return new LocalPackageGraphError(
1317
+ `${insufficientScopeMessage({
1318
+ ...readInsufficientScopeDetails(body),
1319
+ currentLifetime: currentStoredTokenLifetimeAlias(url.origin)
1320
+ })}${detail}`,
1321
+ { status, code }
1322
+ );
1323
+ }
1324
+ if (status === 403) {
1325
+ return new LocalPackageGraphError(
1326
+ capabilityProxyForbiddenMessage({
1327
+ code,
1328
+ serverMessage: failure?.message
1329
+ }),
1330
+ { status, code }
1331
+ );
1332
+ }
1333
+ if (code === "package_import_unresolved" || code === "not_found" || status === 400 || status === 422) {
1334
+ return new LocalPackageGraphError(
1335
+ failure?.message ?? `Could not resolve saved package import(s) for local bundling (${importList}).${detail}`,
1336
+ { status, code }
1337
+ );
1338
+ }
1339
+ return new LocalPackageGraphError(
1340
+ failure?.message ?? `Kody package-graph request failed with HTTP ${status} (${url.pathname}).${detail}`,
1341
+ { status, code }
1342
+ );
1343
+ }
1344
+ async function readJson(response) {
1345
+ const text = await response.text();
1346
+ if (!text) return null;
1347
+ try {
1348
+ return JSON.parse(text);
1349
+ } catch {
1350
+ return text;
1351
+ }
1352
+ }
1353
+ function readErrorBody(body) {
1354
+ if (!isRecord(body) || body.error == null) return null;
1355
+ const { error } = body;
1356
+ if (typeof error === "string") return { code: null, message: error };
1357
+ if (isRecord(error)) {
1358
+ const code = typeof error.code === "string" ? error.code : null;
1359
+ const message = typeof error.message === "string" ? error.message : code ?? JSON.stringify(error);
1360
+ return {
1361
+ code,
1362
+ message: preferActionableInvalidParametersMessage(error, message)
1363
+ };
1364
+ }
1365
+ return { code: null, message: String(error) };
1366
+ }
1367
+ function preferActionableInvalidParametersMessage(error, message) {
1368
+ if (message !== "Invalid parameters.") return message;
1369
+ const details = error.details;
1370
+ const issues = isRecord(details) && Array.isArray(details.issues) ? details.issues : null;
1371
+ if (issues === null || issues.length === 0) return message;
1372
+ const issueMessages = issues.filter(isRecord).map(
1373
+ (issue) => typeof issue.message === "string" ? issue.message.trim() : ""
1374
+ ).filter((text) => text.length > 0);
1375
+ if (issueMessages.length === 0) return message;
1376
+ const sizeIssue = issueMessages.find(
1377
+ (text) => /UTF-8 bytes|the maximum is|too large|maxLength|maximum/i.test(text)
1378
+ );
1379
+ return sizeIssue ?? issueMessages.join("; ");
1380
+ }
1381
+ function isRecord(value) {
1382
+ return value !== null && typeof value === "object" && !Array.isArray(value);
1383
+ }
1384
+
1385
+ export {
1386
+ BundleError,
1387
+ localBundleOptions,
1388
+ bundleLocalUserModule,
1389
+ createBundleError,
1390
+ formatBundleDiagnostic,
1391
+ credentialClientRuntimeSource,
1392
+ localWorkerModuleNames,
1393
+ runSecretHeader,
1394
+ runSecretEnvVar,
1395
+ kodyRuntimeStorageSymbolDescription,
1396
+ createRuntimeFlatAliasSource,
1397
+ localGatewayFetchStreamRuntimeSource,
1398
+ createLocalRuntimeModuleSource,
1399
+ createLocalEntrySource,
1400
+ createWorkerdConfig,
1401
+ parse,
1402
+ init,
1403
+ localPackageGraphPlatformIssueUrl,
1404
+ listSavedPackageImports,
1405
+ hasSavedPackageImports,
1406
+ hasLiteralDynamicSavedPackageImports,
1407
+ rewriteBareKodyBuiltinImports,
1408
+ LocalPackageGraphError,
1409
+ localExecuteGatewayFetchShimModuleName,
1410
+ writePackageModuleFiles,
1411
+ resolveLocalPackageGraph
1412
+ };
1413
+ //# sourceMappingURL=chunk-2IHISXHN.js.map