@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,151 +0,0 @@
1
- /**
2
- * Live reload for `kody dev`: an SSE stream at {@link liveReloadEventsPath}, a
3
- * tiny client injected into HTML responses that reloads after each swap, and
4
- * an error overlay for build and runtime errors. No HMR: a reload re-renders
5
- * the page from the new build.
6
- */
7
- export const devRoutePrefix = '/__kody/dev/';
8
- export const liveReloadEventsPath = '/__kody/dev/events';
9
- export const liveReloadClientPath = '/__kody/dev/client.js';
10
- export const liveReloadScriptTag = `<script type="module" src="${liveReloadClientPath}"></script>`;
11
- const keepAliveMs = 15_000;
12
- export function createLiveReloadHub(input) {
13
- const clients = new Set();
14
- const send = (res, event, data) => {
15
- res.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
16
- };
17
- const keepAlive = setInterval(() => {
18
- for (const res of clients)
19
- res.write(': keep-alive\n\n');
20
- }, keepAliveMs);
21
- keepAlive.unref();
22
- return {
23
- handleEvents: (req, res) => {
24
- res.writeHead(200, {
25
- 'content-type': 'text/event-stream; charset=utf-8',
26
- 'cache-control': 'no-store',
27
- connection: 'keep-alive',
28
- });
29
- res.write('retry: 500\n\n');
30
- send(res, 'hello', input.state());
31
- clients.add(res);
32
- req.on('close', () => clients.delete(res));
33
- },
34
- broadcast: (message) => {
35
- for (const res of clients)
36
- send(res, message.event, message.data);
37
- },
38
- clientCount: () => clients.size,
39
- close: () => {
40
- clearInterval(keepAlive);
41
- for (const res of clients)
42
- res.end();
43
- clients.clear();
44
- },
45
- };
46
- }
47
- /** Insert the client tag before `</head>`, else `</body>`, else at the end. */
48
- export function injectLiveReloadScript(html) {
49
- if (html.includes(liveReloadClientPath))
50
- return html;
51
- for (const pattern of [/<\/head\s*>/i, /<\/body\s*>/i]) {
52
- const match = pattern.exec(html);
53
- if (match) {
54
- return `${html.slice(0, match.index)}${liveReloadScriptTag}${html.slice(match.index)}`;
55
- }
56
- }
57
- return `${html}${liveReloadScriptTag}`;
58
- }
59
- /**
60
- * Only page loads that ask for HTML (browsers send `Accept: text/html`); agent
61
- * and `kody dev fetch` requests get the app's bytes untouched.
62
- */
63
- export function shouldInjectLiveReload(input) {
64
- if (input.method === 'HEAD')
65
- return false;
66
- if (!/\btext\/html\b/i.test(input.accept ?? ''))
67
- return false;
68
- if (input.status === 204 || input.status === 304 || input.status < 200)
69
- return false;
70
- const contentType = String(input.headers['content-type'] ?? '');
71
- if (!/^\s*text\/html\b/i.test(contentType))
72
- return false;
73
- const encoding = String(input.headers['content-encoding'] ?? 'identity').trim().toLowerCase();
74
- return encoding === '' || encoding === 'identity';
75
- }
76
- export const liveReloadClientSource = `
77
- const eventsUrl = ${JSON.stringify(liveReloadEventsPath)};
78
- let buildId = null;
79
- let overlay = null;
80
-
81
- function hideOverlay() {
82
- overlay?.remove();
83
- overlay = null;
84
- }
85
-
86
- function showOverlay(view) {
87
- if (globalThis.__kodyDevErrorPage) return;
88
- hideOverlay();
89
- const host = document.createElement('kody-dev-overlay');
90
- const root = host.attachShadow({ mode: 'open' });
91
- const label = view.kind === 'build' ? 'Build error' : 'Runtime error';
92
- // Keep CSS out of the text tree (page-text readers / textContent walkers).
93
- const sheet = new CSSStyleSheet();
94
- sheet.replaceSync(\`
95
- .backdrop { position: fixed; inset: 0; z-index: 2147483647; background: rgba(10, 4, 7, .82); display: flex; align-items: flex-start; justify-content: center; overflow: auto; font: 14px/1.5 ui-sans-serif, system-ui, sans-serif; }
96
- .panel { margin: 48px 16px; max-width: 960px; width: 100%; background: #1a1015; color: #f5e9ee; border: 1px solid #3a2530; border-radius: 10px; padding: 20px 24px; box-shadow: 0 20px 60px rgba(0,0,0,.5); }
97
- .top { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
98
- .label { font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: #ff8fab; }
99
- button { all: unset; cursor: pointer; color: #bfa9b3; font-size: 20px; line-height: 1; padding: 4px 8px; border-radius: 6px; }
100
- button:hover, button:focus-visible { background: #2a1a22; color: #fff; }
101
- h1 { font-size: 18px; margin: 8px 0 4px; word-break: break-word; }
102
- .request { color: #bfa9b3; font-size: 13px; margin: 0 0 12px; }
103
- pre { margin: 12px 0 0; padding: 14px; overflow: auto; background: #0e080b; border: 1px solid #3a2530; border-radius: 8px; font: 13px/1.55 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre; }
104
- .hint { color: #bfa9b3; font-size: 12px; margin-top: 12px; }
105
- \`);
106
- root.adoptedStyleSheets = [sheet];
107
- root.innerHTML = \`
108
- <div class="backdrop" role="alertdialog" aria-modal="true" aria-labelledby="kody-dev-title">
109
- <div class="panel">
110
- <div class="top"><span class="label"></span><button type="button" aria-label="Dismiss">×</button></div>
111
- <h1 id="kody-dev-title"></h1>
112
- <p class="request"></p>
113
- <pre></pre>
114
- <p class="hint">Fix it and save. The page reloads on the next good build. Esc dismisses.</p>
115
- </div>
116
- </div>\`;
117
- root.querySelector('.label').textContent = label;
118
- root.querySelector('h1').textContent = view.title;
119
- const request = root.querySelector('.request');
120
- if (view.request) request.textContent = view.request;
121
- else request.remove();
122
- root.querySelector('pre').textContent = view.detail;
123
- root.querySelector('button').addEventListener('click', hideOverlay);
124
- document.documentElement.appendChild(host);
125
- overlay = host;
126
- root.querySelector('button').focus();
127
- }
128
-
129
- addEventListener('keydown', (event) => {
130
- if (event.key === 'Escape') hideOverlay();
131
- });
132
-
133
- function connect() {
134
- const source = new EventSource(eventsUrl);
135
- source.addEventListener('hello', (event) => {
136
- const state = JSON.parse(event.data);
137
- if (buildId !== null && state.buildId !== null && state.buildId !== buildId) {
138
- location.reload();
139
- return;
140
- }
141
- buildId = state.buildId;
142
- if (state.error) showOverlay(state.error);
143
- });
144
- source.addEventListener('reload', () => location.reload());
145
- source.addEventListener('build_error', (event) => showOverlay(JSON.parse(event.data)));
146
- source.addEventListener('runtime_error', (event) => showOverlay(JSON.parse(event.data)));
147
- }
148
-
149
- connect();
150
- `.trimStart();
151
- //# sourceMappingURL=live-reload.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"live-reload.js","sourceRoot":"","sources":["../../src/dev/live-reload.ts"],"names":[],"mappings":"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"}
@@ -1,102 +0,0 @@
1
- /**
2
- * `kody.dev.prebuild`: a shell command `kody dev` runs from the package root
3
- * before every build, so generated assets (CSS, icons, data files) stay in
4
- * sync with the source without a second watcher process.
5
- */
6
- import { spawn } from 'node:child_process';
7
- import { apiTokenEnvVar } from '../defaults.js';
8
- const outputTailLines = 20;
9
- export class PrebuildError extends Error {
10
- constructor(message) {
11
- super(message);
12
- this.name = 'PrebuildError';
13
- }
14
- }
15
- export async function runPrebuild(input) {
16
- if (input.signal?.aborted) {
17
- throw new PrebuildError('kody.dev.prebuild aborted before start');
18
- }
19
- const env = { ...process.env, KODY_DEV: '1' };
20
- delete env[apiTokenEnvVar];
21
- // New process group so abort can SIGKILL the whole tree (sh + npm/node/…).
22
- const child = spawn('sh', ['-c', input.command], {
23
- cwd: input.cwd,
24
- env,
25
- stdio: ['ignore', 'pipe', 'pipe'],
26
- detached: true,
27
- });
28
- if (child.pid)
29
- input.onSpawn?.(child.pid);
30
- const tail = [];
31
- const collect = (stream) => (line) => {
32
- tail.push(line);
33
- if (tail.length > outputTailLines)
34
- tail.shift();
35
- input.onLine?.(line, stream);
36
- };
37
- forEachLine(child.stdout, collect('stdout'));
38
- forEachLine(child.stderr, collect('stderr'));
39
- const killChild = () => {
40
- if (child.exitCode !== null || child.signalCode !== null)
41
- return;
42
- const pid = child.pid;
43
- if (pid === undefined)
44
- return;
45
- try {
46
- process.kill(-pid, 'SIGKILL');
47
- }
48
- catch {
49
- try {
50
- child.kill('SIGKILL');
51
- }
52
- catch {
53
- // already gone
54
- }
55
- }
56
- };
57
- if (input.signal) {
58
- if (input.signal.aborted)
59
- killChild();
60
- else
61
- input.signal.addEventListener('abort', killChild, { once: true });
62
- }
63
- try {
64
- const result = await new Promise((resolve, reject) => {
65
- child.once('error', reject);
66
- child.once('close', (code, signal) => resolve({ code, signal }));
67
- });
68
- if (input.signal?.aborted) {
69
- throw new PrebuildError('kody.dev.prebuild aborted');
70
- }
71
- if (result.code === 0)
72
- return;
73
- const how = result.signal ? `signal ${result.signal}` : `exit ${result.code}`;
74
- throw new PrebuildError([`kody.dev.prebuild failed (${how}): ${input.command}`, ...tail.map((line) => ` ${line}`)].join('\n'));
75
- }
76
- finally {
77
- input.signal?.removeEventListener('abort', killChild);
78
- if (child.pid)
79
- input.onExit?.(child.pid);
80
- }
81
- }
82
- /** Split stream chunks into lines, including a final incomplete line on end. */
83
- function forEachLine(stream, onLine) {
84
- if (!stream)
85
- return;
86
- let buffered = '';
87
- stream.on('data', (chunk) => {
88
- buffered += typeof chunk === 'string' ? chunk : chunk.toString('utf8');
89
- const lines = buffered.split('\n');
90
- buffered = lines.pop() ?? '';
91
- for (const line of lines) {
92
- if (line.length > 0)
93
- onLine(line);
94
- }
95
- });
96
- stream.on('end', () => {
97
- if (buffered.length > 0)
98
- onLine(buffered);
99
- buffered = '';
100
- });
101
- }
102
- //# sourceMappingURL=prebuild.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prebuild.js","sourceRoot":"","sources":["../../src/dev/prebuild.ts"],"names":[],"mappings":"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"}
@@ -1,151 +0,0 @@
1
- /**
2
- * Keeps `kody dev` from leaking workerd processes and `/tmp/kody-dev-*` dirs.
3
- *
4
- * - A tiny detached `sh` reaper holds a pipe from this process. It learns
5
- * workerd pids over that pipe and, when the pipe closes for any reason
6
- * (including SIGKILL of the CLI), kills those pids and removes the work dir.
7
- * - On startup, {@link sweepStaleDevDirs} removes dirs and workerd processes
8
- * left behind by dead CLI processes (including CLIs that predate the reaper).
9
- */
10
- import { spawn } from 'node:child_process';
11
- import { readdir, readFile, rm, stat, writeFile } from 'node:fs/promises';
12
- import { tmpdir } from 'node:os';
13
- import { join } from 'node:path';
14
- import psList from 'ps-list';
15
- export const devWorkDirPrefix = 'kody-dev-';
16
- const ownerFileName = 'owner.json';
17
- /** Legacy dirs without an owner file are only removed once this old. */
18
- const legacyDirMinAgeMs = 10 * 60_000;
19
- const reaperScript = `
20
- pids=" "
21
- while IFS= read -r line; do
22
- case "$line" in
23
- +*) pids="$pids\${line#+} " ;;
24
- -*) pids="$(printf '%s' "$pids" | sed "s/ \${line#-} / /g")" ;;
25
- esac
26
- done
27
- for entry in $pids; do
28
- case "$entry" in
29
- g*) /bin/kill -s KILL -- -\${entry#g} 2>/dev/null ;;
30
- *) /bin/kill -s KILL -- \$entry 2>/dev/null ;;
31
- esac
32
- done
33
- rm -rf "$1"
34
- `;
35
- export async function startProcessReaper(input) {
36
- await writeFile(join(input.workDir, ownerFileName), JSON.stringify({ pid: process.pid, startedAt: new Date().toISOString() }));
37
- let reaper;
38
- try {
39
- reaper = spawn('/bin/sh', ['-c', reaperScript, 'kody-dev-reaper', input.workDir], {
40
- stdio: ['pipe', 'ignore', 'ignore'],
41
- detached: true,
42
- });
43
- reaper.on('error', () => {
44
- reaper = undefined;
45
- });
46
- reaper.stdin?.on('error', () => { });
47
- reaper.unref();
48
- reaper.stdin?.unref?.();
49
- }
50
- catch {
51
- reaper = undefined;
52
- }
53
- const send = (line) => {
54
- if (reaper?.stdin?.writable)
55
- reaper.stdin.write(`${line}\n`);
56
- };
57
- return {
58
- track: (pid) => send(`+${pid}`),
59
- untrack: (pid) => send(`-${pid}`),
60
- trackGroup: (pid) => send(`+g${pid}`),
61
- untrackGroup: (pid) => send(`-g${pid}`),
62
- close: () => {
63
- reaper?.stdin?.end();
64
- reaper = undefined;
65
- },
66
- };
67
- }
68
- /**
69
- * Remove `kody-dev-*` work dirs whose owner is gone and kill workerd processes
70
- * still serving from them. Best effort; never throws.
71
- */
72
- export async function sweepStaleDevDirs(input = {}) {
73
- const tmp = input.tmp ?? tmpdir();
74
- const now = input.now ?? Date.now();
75
- const isAlive = input.isAlive ?? isProcessAlive;
76
- const kill = input.kill ?? ((pid) => process.kill(pid, 'SIGKILL'));
77
- const removed = [];
78
- const killed = [];
79
- let entries;
80
- try {
81
- entries = (await readdir(tmp)).filter((name) => name.startsWith(devWorkDirPrefix));
82
- }
83
- catch {
84
- return { removed, killed };
85
- }
86
- if (entries.length === 0)
87
- return { removed, killed };
88
- let processes = [];
89
- try {
90
- processes = await (input.listProcesses ?? psList)();
91
- }
92
- catch {
93
- processes = [];
94
- }
95
- const byPid = new Map(processes.map((item) => [item.pid, item]));
96
- for (const name of entries) {
97
- const dir = join(tmp, name);
98
- try {
99
- const owner = await readOwnerPid(dir);
100
- if (owner !== null && isAlive(owner))
101
- continue;
102
- const workerds = processes.filter((item) => /workerd/.test(item.name) && (item.cmd ?? '').includes(`${dir}/`));
103
- if (owner === null) {
104
- const info = await stat(dir);
105
- if (now - info.mtimeMs < legacyDirMinAgeMs)
106
- continue;
107
- // Legacy CLI without an owner file: only reap workerds whose parent died.
108
- if (workerds.some((item) => !isOrphaned(item, byPid, isAlive)))
109
- continue;
110
- }
111
- for (const item of workerds) {
112
- try {
113
- kill(item.pid);
114
- killed.push(item.pid);
115
- }
116
- catch { }
117
- }
118
- await rm(dir, { recursive: true, force: true });
119
- removed.push(dir);
120
- }
121
- catch { }
122
- }
123
- return { removed, killed };
124
- }
125
- function isOrphaned(item, byPid, isAlive) {
126
- if (item.ppid === undefined)
127
- return false;
128
- if (item.ppid <= 1 || !isAlive(item.ppid))
129
- return true;
130
- const parent = byPid.get(item.ppid);
131
- return parent !== undefined && !/node|kody/i.test(`${parent.name} ${parent.cmd ?? ''}`);
132
- }
133
- async function readOwnerPid(dir) {
134
- try {
135
- const parsed = JSON.parse(await readFile(join(dir, ownerFileName), 'utf8'));
136
- return typeof parsed.pid === 'number' ? parsed.pid : null;
137
- }
138
- catch {
139
- return null;
140
- }
141
- }
142
- export function isProcessAlive(pid) {
143
- try {
144
- process.kill(pid, 0);
145
- return true;
146
- }
147
- catch (error) {
148
- return error.code === 'EPERM';
149
- }
150
- }
151
- //# sourceMappingURL=process-reaper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process-reaper.js","sourceRoot":"","sources":["../../src/dev/process-reaper.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- /**
2
- * Turn a workerd V8 stack (frames point into the bundled `main.js`) into one
3
- * that points at the author's `.ts` sources, without runtime wrapper frames.
4
- */
5
- import { originalPositionFor, TraceMap } from '@jridgewell/trace-mapping';
6
- const internalModules = new Set([
7
- '__kody_local_entry.js',
8
- 'kody:runtime',
9
- '.__kody_runtime__.js',
10
- 'runtime.js',
11
- 'entry.js',
12
- ]);
13
- const framePattern = /^(\s*at\s+)(?:(.*?)\s+\()?([^()\s]+?):(\d+):(\d+)\)?\s*$/;
14
- export function createStackMapper(input) {
15
- let map = null;
16
- if (input.sourceMap) {
17
- try {
18
- map = new TraceMap(input.sourceMap);
19
- }
20
- catch {
21
- map = null;
22
- }
23
- }
24
- return (stack) => {
25
- const out = [];
26
- for (const line of stack.split('\n')) {
27
- if (!/^\s*at\s/.test(line)) {
28
- out.push(line);
29
- continue;
30
- }
31
- const match = framePattern.exec(line);
32
- if (!match)
33
- continue;
34
- const [, lead, fn, file, lineText, colText] = match;
35
- const module = file.replace(/^file:\/\/\//, '').replace(/^\//, '');
36
- if (internalModules.has(module))
37
- continue;
38
- const fnPart = fn ? `${fn} (` : '';
39
- const close = fn ? ')' : '';
40
- if (map && module === input.userModule) {
41
- const original = originalPositionFor(map, {
42
- line: Number(lineText),
43
- column: Number(colText) - 1,
44
- });
45
- if (original.source && original.line !== null) {
46
- const name = fn ?? original.name;
47
- out.push(`${lead}${name ? `${name} (` : ''}${original.source}:${original.line}:${(original.column ?? 0) + 1}${name ? ')' : ''}`);
48
- continue;
49
- }
50
- }
51
- out.push(`${lead}${fnPart}${file}:${lineText}:${colText}${close}`);
52
- }
53
- return out.join('\n');
54
- };
55
- }
56
- //# sourceMappingURL=stack-trace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stack-trace.js","sourceRoot":"","sources":["../../src/dev/stack-trace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAEzE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC/B,uBAAuB;IACvB,cAAc;IACd,sBAAsB;IACtB,YAAY;IACZ,UAAU;CACV,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,0DAA0D,CAAA;AAI/E,MAAM,UAAU,iBAAiB,CAAC,KAKjC;IACA,IAAI,GAAG,GAAoB,IAAI,CAAA;IAC/B,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,IAAI,CAAC;YACJ,GAAG,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACpC,CAAC;QAAC,MAAM,CAAC;YACR,GAAG,GAAG,IAAI,CAAA;QACX,CAAC;IACF,CAAC;IACD,OAAO,CAAC,KAAK,EAAE,EAAE;QAChB,MAAM,GAAG,GAAkB,EAAE,CAAA;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACd,SAAQ;YACT,CAAC;YACD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC,KAAK;gBAAE,SAAQ;YACpB,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,KAAK,CAAA;YACnD,MAAM,MAAM,GAAG,IAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YACnE,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAQ;YACzC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;YAClC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;YAC3B,IAAI,GAAG,IAAI,MAAM,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,EAAE;oBACzC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACtB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;iBAC3B,CAAC,CAAA;gBACF,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBAC/C,MAAM,IAAI,GAAG,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAA;oBAChC,GAAG,CAAC,IAAI,CACP,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACtH,CAAA;oBACD,SAAQ;gBACT,CAAC;YACF,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,IAAI,QAAQ,IAAI,OAAO,GAAG,KAAK,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC,CAAA;AACF,CAAC"}
@@ -1,118 +0,0 @@
1
- /**
2
- * One workerd `serve` process for `kody dev`: spawn, wait for the control-fd
3
- * `listen` event, stream stdout/stderr line by line, and stop it.
4
- */
5
- import { spawn } from 'node:child_process';
6
- import { createInterface } from 'node:readline';
7
- import { redact } from '../redact.js';
8
- const workerdStartTimeoutMs = 30_000;
9
- export async function startWorkerd(input) {
10
- const child = spawn(input.workerdPath, ['serve', input.configPath, '--control-fd=3'], {
11
- cwd: input.cwd,
12
- env: input.env,
13
- stdio: ['ignore', 'pipe', 'pipe', 'pipe'],
14
- });
15
- if (child.pid !== undefined)
16
- input.onSpawn?.(child.pid);
17
- let startupStderr = '';
18
- let listening = false;
19
- forEachLine(child.stdout, input.onStdoutLine);
20
- forEachLine(child.stderr, (line) => {
21
- if (!listening)
22
- startupStderr += `${line}\n`;
23
- input.onStderrLine(line);
24
- });
25
- const exited = new Promise((resolve) => {
26
- child.once('exit', (code, signal) => resolve(`workerd exit ${signal ?? code}`));
27
- child.once('error', (error) => resolve(`workerd error: ${error.message}`));
28
- });
29
- const port = await waitForListen(child, exited, () => {
30
- const trimmed = redact(startupStderr.trim());
31
- return trimmed ? `\n${trimmed}` : '';
32
- });
33
- listening = true;
34
- return {
35
- pid: child.pid ?? -1,
36
- port,
37
- exited,
38
- kill: async () => {
39
- if (child.exitCode !== null || child.signalCode !== null)
40
- return;
41
- child.kill('SIGKILL');
42
- await Promise.race([exited, new Promise((resolve) => setTimeout(resolve, 1000))]);
43
- },
44
- };
45
- }
46
- function forEachLine(stream, onLine) {
47
- if (!stream)
48
- return;
49
- const lines = createInterface({ input: stream, crlfDelay: Infinity });
50
- lines.on('line', (line) => {
51
- if (line.length > 0)
52
- onLine(line);
53
- });
54
- }
55
- function waitForListen(child, exited, stderr) {
56
- return new Promise((resolve, reject) => {
57
- const control = child.stdio[3];
58
- let buffered = '';
59
- let settled = false;
60
- const settle = (fn) => {
61
- if (settled)
62
- return;
63
- settled = true;
64
- clearTimeout(timer);
65
- fn();
66
- };
67
- const timer = setTimeout(() => {
68
- settle(() => {
69
- child.kill('SIGKILL');
70
- reject(new Error(`workerd did not start within ${workerdStartTimeoutMs / 1000}s.${stderr()}`));
71
- });
72
- }, workerdStartTimeoutMs);
73
- control?.on('data', (chunk) => {
74
- buffered += chunk.toString('utf8');
75
- const lines = buffered.split('\n');
76
- buffered = lines.pop() ?? '';
77
- for (const line of lines) {
78
- const port = parseListenPort(line);
79
- if (port !== null)
80
- settle(() => resolve(port));
81
- }
82
- });
83
- void exited.then((detail) => {
84
- settle(() => reject(new Error(`workerd failed to start (${detail})${stderr()}`)));
85
- });
86
- });
87
- }
88
- export function parseListenPort(line) {
89
- if (!line.trim())
90
- return null;
91
- try {
92
- const event = JSON.parse(line);
93
- return event.event === 'listen' && event.socket === 'http' && typeof event.port === 'number'
94
- ? event.port
95
- : null;
96
- }
97
- catch {
98
- return null;
99
- }
100
- }
101
- /**
102
- * Make workerd stderr readable: drop native `stack: …workerd@0x…` address
103
- * lines and the C++ source prefix on uncaught-exception lines. Returns null
104
- * for lines that carry nothing for a JS developer.
105
- */
106
- export function cleanWorkerdStderrLine(line) {
107
- const trimmed = line.trim();
108
- if (!trimmed)
109
- return null;
110
- if (/^stack:(\s+\S+@[0-9a-fx]+)+\s*$/i.test(trimmed))
111
- return null;
112
- const prefixed = /^workerd\/\S+:\d+: (?:error|warning|info|debug): (.*)$/.exec(trimmed);
113
- const body = prefixed ? prefixed[1] : trimmed;
114
- return body
115
- .replace(/\S+\.(?:c\+\+|h):\d+: failed: /g, '')
116
- .replace(/(?:remote\.)?jsg\.(\w*Error)(?=:)/g, '$1');
117
- }
118
- //# sourceMappingURL=workerd-process.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workerd-process.js","sourceRoot":"","sources":["../../src/dev/workerd-process.ts"],"names":[],"mappings":"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"}