@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
@@ -1,155 +0,0 @@
1
- /**
2
- * CLI `--credential` picks for ADR 0068 call maps.
3
- *
4
- * Flag shapes (repeatable):
5
- * - `--credential github=work`
6
- * - `--credential x=org:work` / `--credential x=personal:work`
7
- * - `--credential github=` → none on purpose (`[]`)
8
- *
9
- * Empty + named pick for the same key is a local error. Repeated named picks
10
- * become an array. The map is sent as the CapabilityProxy call's top-level
11
- * `credentials` field (never inside `args`), or as MCP `execute` `credentials`.
12
- */
13
- export const credentialCallMapFeature = 'credential-call-map';
14
- export const credentialCallMapLimits = {
15
- maxKeys: 32,
16
- maxPicksPerKey: 16,
17
- maxTextLength: 100,
18
- };
19
- const keyPattern = new RegExp(`^[A-Za-z0-9][A-Za-z0-9._-]{0,${credentialCallMapLimits.maxTextLength - 1}}$`);
20
- export function parseCredentialFlag(raw) {
21
- const eq = raw.indexOf('=');
22
- if (eq <= 0) {
23
- throw new Error(`Invalid --credential ${JSON.stringify(raw)}. Use --credential key=name, --credential key=org:name, or --credential key= for none.`);
24
- }
25
- const key = raw.slice(0, eq);
26
- const value = raw.slice(eq + 1);
27
- assertCredentialMapKey(key);
28
- if (value === '')
29
- return { key, picks: [], empty: true };
30
- return { key, picks: [parseCredentialPick(value)], empty: false };
31
- }
32
- export function parseCredentialFlags(flags) {
33
- if (!flags || flags.length === 0)
34
- return undefined;
35
- const collected = new Map();
36
- const emptyKeys = new Set();
37
- for (const flag of flags) {
38
- const { key, picks, empty } = parseCredentialFlag(flag);
39
- if (empty) {
40
- if ((collected.get(key)?.length ?? 0) > 0) {
41
- throw new Error(`Invalid --credential for ${key}: cannot combine an empty pick (none) with a named pick.`);
42
- }
43
- emptyKeys.add(key);
44
- collected.set(key, []);
45
- continue;
46
- }
47
- if (emptyKeys.has(key)) {
48
- throw new Error(`Invalid --credential for ${key}: cannot combine an empty pick (none) with a named pick.`);
49
- }
50
- const existing = collected.get(key) ?? [];
51
- existing.push(...picks);
52
- if (existing.length > credentialCallMapLimits.maxPicksPerKey) {
53
- throw new Error(`A credentials map takes at most ${credentialCallMapLimits.maxPicksPerKey} picks per key (${key}).`);
54
- }
55
- collected.set(key, existing);
56
- }
57
- if (collected.size > credentialCallMapLimits.maxKeys) {
58
- throw new Error(`A credentials map takes at most ${credentialCallMapLimits.maxKeys} keys.`);
59
- }
60
- const map = {};
61
- for (const [key, picks] of collected) {
62
- if (emptyKeys.has(key)) {
63
- map[key] = [];
64
- continue;
65
- }
66
- map[key] = picks.length === 1 ? picks[0] : picks;
67
- }
68
- return map;
69
- }
70
- function parseCredentialPick(value) {
71
- // Trim before scope detection so ` org:work` is org-scoped `work`, not a
72
- // plain name `org:work` (Bugbot / ADR 0068 name-after-trim).
73
- const trimmed = value.trim();
74
- const colon = trimmed.indexOf(':');
75
- if (colon > 0) {
76
- const prefix = trimmed.slice(0, colon);
77
- if (prefix === 'org' || prefix === 'personal') {
78
- const name = trimmed.slice(colon + 1).trim();
79
- assertCredentialText(name, 'credential name');
80
- return { name, scope: prefix };
81
- }
82
- }
83
- assertCredentialText(trimmed, 'credential name');
84
- return trimmed;
85
- }
86
- function assertCredentialMapKey(key) {
87
- if (!keyPattern.test(key)) {
88
- throw new Error(`Invalid --credential key ${JSON.stringify(key)}. A key starts with a letter or digit and uses letters, digits, dots, underscores, or hyphens (max ${credentialCallMapLimits.maxTextLength}).`);
89
- }
90
- }
91
- function assertCredentialText(value, label) {
92
- if (!value || value.length > credentialCallMapLimits.maxTextLength) {
93
- throw new Error(`Invalid --credential ${label} ${JSON.stringify(value)}. Use 1–${credentialCallMapLimits.maxTextLength} characters.`);
94
- }
95
- }
96
- export function sessionSupportsCredentialCallMap(features) {
97
- return Array.isArray(features) && features.includes(credentialCallMapFeature);
98
- }
99
- export function missingCredentialCallMapFeatureMessage() {
100
- return 'This Kody host does not support --credential yet.';
101
- }
102
- /** Format one pick as a CLI `--credential` suggestion. */
103
- export function formatCredentialFlagSuggestion(key, pick) {
104
- if (typeof pick === 'string') {
105
- return `--credential ${key}=${pick}`;
106
- }
107
- if (Array.isArray(pick)) {
108
- if (pick.length === 0)
109
- return `--credential ${key}=`;
110
- return pick
111
- .map((entry) => formatCredentialFlagSuggestion(key, entry))
112
- .filter((line) => line !== null)
113
- .join('\n');
114
- }
115
- if (pick && typeof pick === 'object') {
116
- const record = pick;
117
- if (typeof record.name !== 'string' || !record.name)
118
- return null;
119
- if (record.scope === 'org' || record.scope === 'personal') {
120
- return `--credential ${key}=${record.scope}:${record.name}`;
121
- }
122
- return `--credential ${key}=${record.name}`;
123
- }
124
- return null;
125
- }
126
- /**
127
- * Print code + message, and render `retryWith[].credentials` as `--credential`
128
- * suggestions (ADR 0068).
129
- */
130
- export function formatCredentialClientError(error) {
131
- const code = typeof error.code === 'string' && error.code ? error.code : 'credential_error';
132
- const message = typeof error.message === 'string' && error.message
133
- ? error.message
134
- : 'The credential could not be used.';
135
- const lines = [`${code}: ${message}`];
136
- const retries = Array.isArray(error.retryWith) ? error.retryWith : [];
137
- for (const entry of retries) {
138
- if (!entry || typeof entry !== 'object' || Array.isArray(entry))
139
- continue;
140
- const credentials = entry.credentials;
141
- if (!credentials || typeof credentials !== 'object' || Array.isArray(credentials)) {
142
- continue;
143
- }
144
- for (const [key, pick] of Object.entries(credentials)) {
145
- const suggestion = formatCredentialFlagSuggestion(key, pick);
146
- if (suggestion) {
147
- for (const line of suggestion.split('\n')) {
148
- lines.push(` retry: ${line}`);
149
- }
150
- }
151
- }
152
- }
153
- return lines.join('\n');
154
- }
155
- //# sourceMappingURL=credential-call-map.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"credential-call-map.js","sourceRoot":"","sources":["../src/credential-call-map.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Sandbox source for credential()/credentials() on the local kody:runtime host.
3
- * Kept in sync with kentcdodds/kody `createCredentialClientRuntimeSource`
4
- * (packages/worker/src/mcp/execute-modules/credential-client-source.ts).
5
- * Client fetches carry only `x-kody-credential-client`; origin's fetch gateway
6
- * places the credential. Secret values never enter local workerd.
7
- */
8
- export const credentialClientRuntimeSource = "function __kodyCreateCredentialRuntime(__kodyCredentialCall) {\n const handleHeader = \"x-kody-credential-client\";\n const codePattern = /^\\[([a-z_]+)\\] /;\n const redirectStatuses = new Set([301, 302, 303, 307, 308]);\n const maxRedirects = 20;\n const toError = (body) => {\n const error = new Error(String(body?.message ?? 'The credential could not be used.'));\n error.name = 'CredentialError';\n error.code = typeof body?.code === 'string' ? body.code : 'credential_error';\n error.retryWith = Array.isArray(body?.retryWith) ? body.retryWith : [];\n if (Array.isArray(body?.options)) error.options = body.options;\n if (Array.isArray(body?.possibleMatches)) error.possibleMatches = body.possibleMatches;\n return error;\n };\n const fromThrown = (error) => {\n const message = String(error?.message ?? error ?? '');\n const match = codePattern.exec(message);\n if (!match) return error;\n return toError({ code: match[1], message: message.slice(match[0].length) });\n };\n const invoke = async (name, args) => {\n let result;\n try {\n result = await __kodyCredentialCall(name, args);\n } catch (error) {\n throw fromThrown(error);\n }\n if (result && result.ok === false) throw toError(result.error);\n return result?.value;\n };\n const hostAllowed = (hosts, host) => {\n const target = String(host ?? '').toLowerCase();\n return hosts.some((entry) => {\n const normalized = String(entry).trim().toLowerCase();\n if (!normalized.startsWith('*.')) return normalized === target;\n const suffix = normalized.slice(1);\n if (!target.endsWith(suffix)) return false;\n const label = target.slice(0, -suffix.length);\n return label.length > 0 && !label.includes('.');\n });\n };\n const firstExactHost = (hosts) =>\n hosts.find((host) => !String(host).startsWith('*.')) ?? null;\n const resolveUrl = (input, hosts) => {\n const raw = input instanceof Request ? input.url : String(input);\n if (/^[a-z][a-z0-9+.-]*:/i.test(raw)) return raw;\n const host = firstExactHost(hosts);\n if (!host) {\n throw toError({\n code: 'invalid_request',\n message: 'This credential has no exact host to resolve a relative URL against; pass an absolute https:// URL on one of its hosts.',\n });\n }\n return new URL(raw, 'https://' + host).toString();\n };\n const send = async (request, handle) => {\n const headers = new Headers(request.headers);\n if (handle) headers.set(handleHeader, handle);\n else headers.delete(handleHeader);\n try {\n return await globalThis.fetch(new Request(request, { headers, redirect: 'manual' }));\n } catch (error) {\n throw fromThrown(error);\n }\n };\n const createFetch = (opened) => async (input, init) => {\n const redirectMode =\n init?.redirect ?? (input instanceof Request ? input.redirect : 'follow');\n const url = resolveUrl(input, opened.hosts);\n let request =\n input instanceof Request\n ? new Request(url, new Request(input, init))\n : new Request(url, init);\n let carriesCredential = true;\n for (let hop = 0; ; hop += 1) {\n const replay = request.body ? request.clone() : request;\n let response = await send(request, carriesCredential ? opened.handle : null);\n if (opened.kind === 'oauth' && carriesCredential && response.status === 401) {\n const refreshed = await invoke(\"credentialClientRefresh\", { handle: opened.handle });\n if (refreshed?.refreshed) {\n await response.body?.cancel();\n const retry = replay.body ? replay.clone() : replay;\n response = await send(retry, opened.handle);\n }\n }\n if (!redirectStatuses.has(response.status) || redirectMode === 'manual') {\n return response;\n }\n if (redirectMode === 'error') {\n await response.body?.cancel();\n throw new TypeError('The response redirected and redirect is \"error\".');\n }\n // A url credential owns its whole URL, so its redirects come back as\n // they are: following one would need the secret URL as the base.\n if (opened.kind === 'url') return response;\n const location = response.headers.get('location');\n if (!location) return response;\n if (hop >= maxRedirects) {\n await response.body?.cancel();\n throw new TypeError('Too many redirects.');\n }\n await response.body?.cancel();\n const next = new URL(location, response.url || request.url);\n const rewritesToGet =\n response.status === 303 ||\n ((response.status === 301 || response.status === 302) && request.method === 'POST');\n // The credential follows only to its own hosts over https.\n carriesCredential =\n next.protocol === 'https:' &&\n hostAllowed(opened.hosts, next.hostname);\n const headers = new Headers(replay.headers);\n if (!carriesCredential) headers.delete('authorization');\n if (rewritesToGet) {\n headers.delete('content-type');\n headers.delete('content-length');\n }\n request = new Request(next, {\n method: rewritesToGet ? 'GET' : replay.method,\n headers,\n body: rewritesToGet ? null : replay.body,\n ...(rewritesToGet || !replay.body ? {} : { duplex: 'half' }),\n });\n }\n };\n const toClient = (opened) => {\n const client = { name: opened.name, scope: opened.scope, kind: opened.kind, hosts: [...opened.hosts] };\n if (opened.hint) client.hint = opened.hint;\n if (opened.kind === 'mcp') {\n client.callTool = async (tool, args) =>\n await invoke(\"credentialClientCallTool\", { handle: opened.handle, tool, args: args ?? {} });\n } else if (opened.kind === 'signing') {\n client.sign = async (operation) => {\n const { host, ...rest } = operation ?? {};\n const result = await invoke(\"credentialClientSign\", {\n handle: opened.handle,\n host: host ?? firstExactHost(opened.hosts),\n operation: rest,\n });\n return result?.signature;\n };\n } else {\n client.fetch = createFetch(opened);\n }\n return Object.freeze(client);\n };\n const open = async (args) => toClient(await invoke(\"credentialClientOpen\", args));\n const credential = async (key) => await open({ key });\n credential.named = async (name, options) =>\n await open({ name, scope: options?.scope ?? null });\n const credentials = async (key) => {\n const opened = await invoke(\"credentialClientOpenAll\", { key });\n return (Array.isArray(opened) ? opened : []).map(toClient);\n };\n return { credential: Object.freeze(credential), credentials };\n}";
9
- //# sourceMappingURL=credential-client-runtime-source.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"credential-client-runtime-source.js","sourceRoot":"","sources":["../src/credential-client-runtime-source.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,wnNAAwnN,CAAA"}
@@ -1,98 +0,0 @@
1
- /**
2
- * Detect credentialed outbound fetch in package source so `kody dev check`
3
- * can suggest `.kody/mocks.ts` before `--target mock` fails closed.
4
- */
5
- import { init as initEsModuleLexer, parse as parseEsModule } from 'es-module-lexer';
6
- const esModuleLexerReady = initEsModuleLexer();
7
- /**
8
- * True when source uses credentialed / authenticated outbound fetch that
9
- * fails closed under `--target mock` without an MSW match.
10
- */
11
- export async function detectCredentialedFetchInSource(code, where = 'source') {
12
- await esModuleLexerReady;
13
- const signals = [];
14
- const seen = new Set();
15
- const push = (kind) => {
16
- if (seen.has(kind))
17
- return;
18
- seen.add(kind);
19
- signals.push({ kind, where });
20
- };
21
- // Strip comments before identifier scans so JSDoc examples do not tip.
22
- const codeWithoutComments = stripCommentsForScan(code);
23
- if (/\bcreateAuthenticatedFetch\b/.test(codeWithoutComments)) {
24
- push('createAuthenticatedFetch');
25
- }
26
- if (/\bauthenticatedFetch\b/.test(codeWithoutComments)) {
27
- push('authenticatedFetch');
28
- }
29
- try {
30
- const [imports] = parseEsModule(code);
31
- for (const im of imports) {
32
- if (im.type === 'dynamic') {
33
- // Dynamic `import('kody:runtime')` does not name bindings.
34
- continue;
35
- }
36
- if (im.typeOnly === true)
37
- continue;
38
- if (im.specifier !== 'kody:runtime')
39
- continue;
40
- const record = im;
41
- const statementStart = record.importStart ?? record.ss;
42
- const statementEnd = record.importEnd ?? record.se;
43
- if (typeof statementStart !== 'number' || typeof statementEnd !== 'number') {
44
- continue;
45
- }
46
- const statement = code.slice(statementStart, statementEnd);
47
- // Named imports of credential / credentials (not default-only).
48
- if (/\bcredentials?\b/.test(statement)) {
49
- push('credential_runtime');
50
- }
51
- }
52
- }
53
- catch {
54
- // Invalid source — check still reports bundle failures separately.
55
- }
56
- return signals;
57
- }
58
- /** Best-effort comment strip for identifier scans (not a full JS parser). */
59
- function stripCommentsForScan(code) {
60
- return code
61
- .replace(/\/\*[\s\S]*?\*\//g, (block) => block.replace(/[^\n]/g, ' '))
62
- .replace(/(^|[^:])\/\/.*$/gm, '$1');
63
- }
64
- export function formatCredentialedFetchKinds(signals) {
65
- const kinds = [...new Set(signals.map((s) => s.kind))];
66
- return kinds
67
- .map((kind) => {
68
- switch (kind) {
69
- case 'createAuthenticatedFetch':
70
- return 'createAuthenticatedFetch';
71
- case 'authenticatedFetch':
72
- return 'authenticatedFetch';
73
- case 'credential_runtime':
74
- return 'credential()/credentials()';
75
- default: {
76
- const _exhaustive = kind;
77
- return _exhaustive;
78
- }
79
- }
80
- })
81
- .join(', ');
82
- }
83
- /**
84
- * Soft tip for `kody dev check` when credentialed fetch is present but
85
- * `.kody/mocks.ts` is missing (does not fail the check).
86
- */
87
- export function mocksSuggestionDetail(input) {
88
- if (input.signals.length === 0)
89
- return null;
90
- const kinds = formatCredentialedFetchKinds(input.signals);
91
- if (input.hasMocksFile) {
92
- return `present (credentialed fetch detected: ${kinds})`;
93
- }
94
- return (`suggested — package uses credentialed fetch (${kinds}); ` +
95
- `add .kody/mocks.ts so --target mock can MSW-match outbound requests ` +
96
- `(unmocked credentialed hops fail closed)`);
97
- }
98
- //# sourceMappingURL=credentialed-fetch-scan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"credentialed-fetch-scan.js","sourceRoot":"","sources":["../src/credentialed-fetch-scan.ts"],"names":[],"mappings":"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"}
package/dist/defaults.js DELETED
@@ -1,34 +0,0 @@
1
- export const defaultMcpUrl = 'https://kody.codes/mcp';
2
- /** Kody Open API origin; hosts CapabilityProxy for `execute --local`. */
3
- export const defaultApiUrl = 'https://api.kody.codes';
4
- export const apiTokenEnvVar = 'KODY_API_TOKEN';
5
- /** Pin to Kody's stateless `/mcp` lane. */
6
- export const modernMcpProtocolVersion = '2026-07-28';
7
- export const defaultScopes = ['openid', 'profile', 'email'];
8
- /** True when a stored OAuth scope string already includes `openid`. */
9
- export function scopeIncludesOpenid(scope) {
10
- if (!scope)
11
- return false;
12
- return scope.split(/\s+/).includes('openid');
13
- }
14
- /** Hint when MCP whoami/search fail because the login session lacks openid. */
15
- export const missingOpenidReloginHint = 'Your login session is missing the openid scope. Run `kody logout && kody login` to refresh.';
16
- export const keyringService = 'kody.codes';
17
- export const loginTimeoutMs = 5 * 60 * 1000;
18
- export const accessTokenSkewMs = 60_000;
19
- export const cliName = '@kodycodes/cli';
20
- export const cliClientUri = 'https://github.com/kody-bot/cli';
21
- /** Fixed loopback port so CIMD can list an exact redirect URI. */
22
- export const oauthCallbackPort = 43742;
23
- export const cliClientIdMetadataPath = '/oauth/cli-client-metadata.json';
24
- export function cliClientMetadataUrl(mcpUrl) {
25
- return new URL(cliClientIdMetadataPath, mcpUrl).href;
26
- }
27
- export function cliRedirectUrl(port = oauthCallbackPort) {
28
- return new URL(`http://127.0.0.1:${port}/callback`);
29
- }
30
- export const onboardingPath = '/onboarding';
31
- export function onboardingUrl(mcpUrl) {
32
- return new URL(onboardingPath, mcpUrl).href;
33
- }
34
- //# sourceMappingURL=defaults.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,wBAAwB,CAAA;AACrD,yEAAyE;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,wBAAwB,CAAA;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAA;AAC9C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAA;AACpD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAU,CAAA;AAEpE,uEAAuE;AACvE,MAAM,UAAU,mBAAmB,CAAC,KAAyB;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACxB,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC7C,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,wBAAwB,GACpC,6FAA6F,CAAA;AAE9F,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAA;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAA;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAA;AACvC,MAAM,CAAC,MAAM,YAAY,GAAG,iCAAiC,CAAA;AAC7D,kEAAkE;AAClE,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAA;AACtC,MAAM,CAAC,MAAM,uBAAuB,GAAG,iCAAiC,CAAA;AAExE,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAClD,OAAO,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe,iBAAiB;IAC9D,OAAO,IAAI,GAAG,CAAC,oBAAoB,IAAI,WAAW,CAAC,CAAA;AACpD,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAA;AAE3C,MAAM,UAAU,aAAa,CAAC,MAAc;IAC3C,OAAO,IAAI,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,IAAI,CAAA;AAC5C,CAAC"}
@@ -1,13 +0,0 @@
1
- import psList from 'ps-list';
2
- import { hostCatalog } from './host-catalog.js';
3
- export async function listRunningProcesses() {
4
- const processes = await psList();
5
- return processes.map((process) => ({
6
- name: process.name,
7
- cmd: process.cmd,
8
- }));
9
- }
10
- export function detectRunningHosts(processes, catalog = hostCatalog) {
11
- return catalog.filter((host) => processes.some((process) => host.matches(process)));
12
- }
13
- //# sourceMappingURL=detect-running-hosts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detect-running-hosts.js","sourceRoot":"","sources":["../src/detect-running-hosts.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAuB,MAAM,mBAAmB,CAAA;AAGpE,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACzC,MAAM,SAAS,GAAG,MAAM,MAAM,EAAE,CAAA;IAChC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;KAChB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,SAA6B,EAC7B,UAAyC,WAAW;IAEpD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACpF,CAAC"}
@@ -1,202 +0,0 @@
1
- /**
2
- * Local copy of the platform's `<appBasePath>/_assets/` surface for `kody dev`:
3
- * the browser bundle of `kody.app.client` (fingerprinted `client.<hash>.js`),
4
- * `__version.json`, and files from the `kody.app.assets` directory. Answered
5
- * by the Node proxy before the app's fetch handler, like the platform does.
6
- * Everything is `no-store` so a rebuild is always picked up.
7
- */
8
- import * as esbuild from 'esbuild';
9
- import { createHash } from 'node:crypto';
10
- import { readFile, stat } from 'node:fs/promises';
11
- import { join, resolve, sep } from 'node:path';
12
- import { createBundleError } from '../local-bundle.js';
13
- import { bundleInputs } from './dev-bundler.js';
14
- export const devAssetsPathPrefix = '/_assets/';
15
- export const devVersionAssetName = '__version.json';
16
- const clientModuleHashLength = 16;
17
- export function createDevClientBundler(input) {
18
- const externals = input.externals ?? [];
19
- const workingDir = process.cwd();
20
- let disposed = false;
21
- let context = null;
22
- const createContext = () => esbuild.context({
23
- absWorkingDir: workingDir,
24
- entryPoints: [resolve(input.entryPath)],
25
- bundle: true,
26
- write: false,
27
- metafile: true,
28
- format: 'esm',
29
- platform: 'browser',
30
- target: 'es2022',
31
- sourcemap: 'inline',
32
- logLevel: 'silent',
33
- outfile: join(input.root, '_assets', 'client.js'),
34
- plugins: externals.length > 0 ? [clientExternalsPlugin(externals)] : [],
35
- });
36
- return {
37
- build: async () => {
38
- try {
39
- // A context created after dispose would never be released and keeps Node alive.
40
- if (disposed)
41
- throw new Error('kody dev bundler was already disposed.');
42
- context ??= createContext();
43
- const result = await (await context).rebuild();
44
- const code = result.outputFiles.find((file) => file.path.endsWith('.js'))?.text ?? '';
45
- const hash = createHash('sha256')
46
- .update(code)
47
- .digest('base64url')
48
- .slice(0, clientModuleHashLength);
49
- return {
50
- name: `client.${hash}.js`,
51
- code,
52
- inputs: bundleInputs(result.metafile, workingDir),
53
- };
54
- }
55
- catch (error) {
56
- throw createBundleError(input.entryPath, error, {
57
- workingDir,
58
- displayRoot: input.root,
59
- });
60
- }
61
- },
62
- dispose: async () => {
63
- disposed = true;
64
- const current = context;
65
- context = null;
66
- await (await current?.catch(() => null))?.dispose();
67
- },
68
- };
69
- }
70
- /**
71
- * Exact specifier or a subpath of it, so `preact` does not also externalize
72
- * `preact-render-to-string` (esbuild's own `external` matches by prefix).
73
- */
74
- function clientExternalsPlugin(externals) {
75
- return {
76
- name: 'kody-dev-client-externals',
77
- setup(build) {
78
- build.onResolve({ filter: /^[^./]/ }, (args) => externals.some((external) => args.path === external || args.path.startsWith(`${external}/`))
79
- ? { path: args.path, external: true }
80
- : undefined);
81
- },
82
- };
83
- }
84
- /** `/_assets/<rest>` → `<rest>` (percent-decoded), or null when not an asset path. */
85
- export function parseDevAssetPath(pathname) {
86
- if (!pathname.startsWith(devAssetsPathPrefix))
87
- return null;
88
- const encoded = pathname.slice(devAssetsPathPrefix.length);
89
- if (!encoded)
90
- return null;
91
- try {
92
- return decodeURIComponent(encoded);
93
- }
94
- catch {
95
- return null;
96
- }
97
- }
98
- /** Absolute file under `assetsDir`, or null for traversal / absolute paths. */
99
- export function resolveDevAssetFile(assetsDir, relativePath) {
100
- if (relativePath.includes('\0') || relativePath.startsWith('/'))
101
- return null;
102
- const root = resolve(assetsDir);
103
- const file = resolve(root, relativePath);
104
- return file.startsWith(`${root}${sep}`) ? file : null;
105
- }
106
- export async function serveDevAsset(input) {
107
- const { req, res } = input;
108
- if (req.method !== 'GET' && req.method !== 'HEAD') {
109
- res.writeHead(405, { allow: 'GET, HEAD', 'cache-control': 'no-store' });
110
- res.end('Method not allowed\n');
111
- return;
112
- }
113
- if (input.relativePath === devVersionAssetName) {
114
- send(req, res, 'application/json; charset=utf-8', JSON.stringify({
115
- clientModuleUrl: input.clientModuleUrl,
116
- assetBasePath: `${input.appBasePath}/_assets`,
117
- publishedCommit: null,
118
- }));
119
- return;
120
- }
121
- if (input.client && input.relativePath === input.client.name) {
122
- send(req, res, 'text/javascript; charset=utf-8', input.client.code);
123
- return;
124
- }
125
- const file = input.assetsDir ? resolveDevAssetFile(input.assetsDir, input.relativePath) : null;
126
- const body = file ? await readAssetFile(file) : null;
127
- if (!file || !body) {
128
- res.writeHead(404, {
129
- 'content-type': 'text/plain; charset=utf-8',
130
- 'cache-control': 'no-store',
131
- });
132
- res.end('Not found\n');
133
- return;
134
- }
135
- const contentType = inferDevAssetContentType(file);
136
- send(req, res, contentType, body, contentType.startsWith('text/javascript')
137
- ? { 'service-worker-allowed': `${input.appBasePath}/` }
138
- : {});
139
- }
140
- async function readAssetFile(file) {
141
- try {
142
- if (!(await stat(file)).isFile())
143
- return null;
144
- return await readFile(file);
145
- }
146
- catch {
147
- return null;
148
- }
149
- }
150
- function send(req, res, contentType, body, extraHeaders = {}) {
151
- const bytes = typeof body === 'string' ? Buffer.from(body, 'utf8') : body;
152
- res.writeHead(200, {
153
- 'content-type': contentType,
154
- 'content-length': String(bytes.length),
155
- 'cache-control': 'no-store',
156
- 'x-content-type-options': 'nosniff',
157
- ...extraHeaders,
158
- });
159
- res.end(req.method === 'HEAD' ? undefined : bytes);
160
- }
161
- const contentTypesByExtension = {
162
- avif: 'image/avif',
163
- css: 'text/css; charset=utf-8',
164
- csv: 'text/csv; charset=utf-8',
165
- gif: 'image/gif',
166
- htm: 'text/html; charset=utf-8',
167
- html: 'text/html; charset=utf-8',
168
- ico: 'image/x-icon',
169
- jpeg: 'image/jpeg',
170
- jpg: 'image/jpeg',
171
- js: 'text/javascript; charset=utf-8',
172
- json: 'application/json; charset=utf-8',
173
- map: 'application/json; charset=utf-8',
174
- md: 'text/markdown; charset=utf-8',
175
- mjs: 'text/javascript; charset=utf-8',
176
- mp3: 'audio/mpeg',
177
- mp4: 'video/mp4',
178
- oga: 'audio/ogg',
179
- ogg: 'audio/ogg',
180
- ogv: 'video/ogg',
181
- otf: 'font/otf',
182
- pdf: 'application/pdf',
183
- png: 'image/png',
184
- svg: 'image/svg+xml; charset=utf-8',
185
- ttf: 'font/ttf',
186
- txt: 'text/plain; charset=utf-8',
187
- wasm: 'application/wasm',
188
- wav: 'audio/wav',
189
- webm: 'video/webm',
190
- webmanifest: 'application/manifest+json; charset=utf-8',
191
- webp: 'image/webp',
192
- woff: 'font/woff',
193
- woff2: 'font/woff2',
194
- xml: 'application/xml; charset=utf-8',
195
- };
196
- export function inferDevAssetContentType(path) {
197
- const name = path.split(/[\\/]/).pop() ?? '';
198
- const separator = name.lastIndexOf('.');
199
- const extension = separator <= 0 ? '' : name.slice(separator + 1).toLowerCase();
200
- return contentTypesByExtension[extension] ?? 'application/octet-stream';
201
- }
202
- //# sourceMappingURL=dev-assets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-assets.js","sourceRoot":"","sources":["../../src/dev/dev-assets.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- /**
2
- * `kody dev` bundles of `kody.app.entry`: same esbuild options as one-shot
3
- * local bundles, plus an in-memory source map (for mapping workerd stacks back
4
- * to `.ts`) and the list of input files (for the watcher's stat poll). Uses an
5
- * incremental esbuild context so rebuilds only reparse changed files.
6
- */
7
- import * as esbuild from 'esbuild';
8
- import { join, resolve } from 'node:path';
9
- import { BundleError, createBundleError, localBundleOptions } from '../local-bundle.js';
10
- export function createDevBundler(input) {
11
- const entry = resolve(input.entryPath);
12
- const base = localBundleOptions(entry);
13
- const options = {
14
- ...base,
15
- sourcemap: 'external',
16
- sourcesContent: false,
17
- metafile: true,
18
- // Never written (write: false); only anchors source map paths at the root.
19
- outfile: join(input.root, '__kody_dev_bundle.js'),
20
- };
21
- const paths = { workingDir: base.absWorkingDir, displayRoot: input.root };
22
- let disposed = false;
23
- let context = null;
24
- return {
25
- build: async () => {
26
- let result;
27
- try {
28
- // A context created after dispose would never be released and keeps Node alive.
29
- if (disposed)
30
- throw new Error('kody dev bundler was already disposed.');
31
- context ??= esbuild.context(options);
32
- result = await (await context).rebuild();
33
- }
34
- catch (error) {
35
- throw createBundleError(input.entryPath, error, paths);
36
- }
37
- return readBundle(result, base.absWorkingDir, input.entryPath);
38
- },
39
- dispose: async () => {
40
- disposed = true;
41
- const current = context;
42
- context = null;
43
- await (await current?.catch(() => null))?.dispose();
44
- },
45
- };
46
- }
47
- export function bundleInputs(metafile, workingDir) {
48
- return Object.keys(metafile?.inputs ?? {})
49
- .filter((path) => !path.includes('node_modules') && !path.includes(':'))
50
- .map((path) => resolve(workingDir, path));
51
- }
52
- export function readBundle(result, workingDir, entryPath) {
53
- const outputs = result.outputFiles ?? [];
54
- const js = outputs.find((file) => file.path.endsWith('.js'));
55
- const map = outputs.find((file) => file.path.endsWith('.js.map'));
56
- if (!js) {
57
- throw new BundleError(`Could not bundle ${entryPath}: esbuild produced no output.`, []);
58
- }
59
- return {
60
- code: js.text.replace(/\n\/\/# sourceMappingURL=\S+\s*$/, '\n'),
61
- sourceMap: map?.text ?? null,
62
- inputs: bundleInputs(result.metafile, workingDir),
63
- };
64
- }
65
- //# sourceMappingURL=dev-bundler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-bundler.js","sourceRoot":"","sources":["../../src/dev/dev-bundler.ts"],"names":[],"mappings":"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"}