@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
@@ -1,94 +0,0 @@
1
- /**
2
- * Events a running `kody dev` server reports: rebuilds, build and runtime
3
- * errors, and app logs. Humans get {@link formatDevEvent}; agents get the
4
- * same objects as NDJSON.
5
- */
6
- import { formatBundleDiagnostic } from '../local-bundle.js';
7
- import { appLogMarker } from './dev-protocol.js';
8
- const logLevels = new Set(['log', 'info', 'warn', 'error', 'debug']);
9
- /** Parse one workerd stdout line; plain lines become untagged `log` events. */
10
- export function parseWorkerdStdoutLine(line) {
11
- if (line.startsWith(appLogMarker)) {
12
- try {
13
- const parsed = JSON.parse(line.slice(appLogMarker.length));
14
- const level = typeof parsed.level === 'string' && logLevels.has(parsed.level)
15
- ? parsed.level
16
- : 'log';
17
- return {
18
- type: 'log',
19
- source: 'app',
20
- level,
21
- message: typeof parsed.message === 'string' ? parsed.message : String(parsed.message),
22
- request: readRequestTag(parsed.request),
23
- };
24
- }
25
- catch { }
26
- }
27
- return { type: 'log', source: 'app', level: 'log', message: line, request: null };
28
- }
29
- function readRequestTag(value) {
30
- if (!value || typeof value !== 'object')
31
- return null;
32
- const record = value;
33
- if (typeof record.id !== 'string')
34
- return null;
35
- return {
36
- id: record.id,
37
- method: typeof record.method === 'string' ? record.method : 'GET',
38
- path: typeof record.path === 'string' ? record.path : '/',
39
- };
40
- }
41
- /**
42
- * A fix line for runtime errors with a known cause, or undefined. esbuild's ESM
43
- * output turns a CommonJS `require()` of an external (a Node builtin) into a
44
- * shim that throws in Workers — hosted apps fail the same way.
45
- */
46
- export function runtimeErrorFix(message) {
47
- const dynamicRequire = /Dynamic require of "([^"]+)" is not supported/.exec(message);
48
- if (dynamicRequire) {
49
- return (`A CommonJS dependency calls require("${dynamicRequire[1]}"), which an ESM Worker cannot run (hosted apps fail the same way). ` +
50
- 'It likely resolved to its Node build: import the package’s Workers/edge entry (an exports subpath or condition like `edge`, `worker`, or `workerd`) or an ESM build instead.');
51
- }
52
- return undefined;
53
- }
54
- export function formatRequestTag(request) {
55
- return request ? `[${request.method} ${request.path} #${request.id}]` : '[app]';
56
- }
57
- /** One human-readable block for terminals. */
58
- export function formatDevEvent(event) {
59
- switch (event.type) {
60
- case 'rebuild_start':
61
- return {
62
- stream: 'stderr',
63
- text: event.files.length > 0 ? `Rebuilding (${event.files.join(', ')})…` : 'Building…',
64
- };
65
- case 'rebuild_ok':
66
- return {
67
- stream: 'stderr',
68
- text: event.restarted
69
- ? `Ready in ${event.ms}ms (build ${event.buildId})`
70
- : `No bundle changes (${event.ms}ms)`,
71
- };
72
- case 'build_error':
73
- return {
74
- stream: 'stderr',
75
- text: `Build failed${event.diagnostics.length > 0 ? `:\n${event.diagnostics.map(formatBundleDiagnostic).join('\n')}` : `: ${event.message}`}\nThe last good build is paused until this is fixed; requests get the error page.`,
76
- };
77
- case 'runtime_error':
78
- return {
79
- stream: 'stderr',
80
- text: `${formatRequestTag(event.request)} Uncaught ${event.stack || event.message}${event.fix ? `\nfix: ${event.fix}` : ''}`,
81
- };
82
- case 'log': {
83
- const tag = event.source === 'app' ? formatRequestTag(event.request) : `[${event.source}]`;
84
- const level = event.level === 'log' || event.level === 'info' ? '' : `${event.level}: `;
85
- const stream = event.level === 'error' || event.level === 'warn' ? 'stderr' : 'stdout';
86
- return { stream, text: `${tag} ${level}${event.message}` };
87
- }
88
- default: {
89
- const exhaustive = event;
90
- throw new Error(`Unhandled dev event: ${JSON.stringify(exhaustive)}`);
91
- }
92
- }
93
- }
94
- //# sourceMappingURL=dev-events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-events.js","sourceRoot":"","sources":["../../src/dev/dev-events.ts"],"names":[],"mappings":"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"}
@@ -1,80 +0,0 @@
1
- /**
2
- * `kody dev` ports: each package gets a stable default (so bookmarks, OAuth
3
- * redirect URIs, and agent notes keep working across restarts) and walks up to
4
- * the next free port when that one is taken. An explicit `--port` is honored
5
- * exactly and fails with an actionable message instead.
6
- */
7
- import { createHash } from 'node:crypto';
8
- import { StructuredCliError } from '../structured-error.js';
9
- export const devPortRange = { min: 4100, max: 4999 };
10
- const fallbackAttempts = 20;
11
- export function defaultDevPort(kodyId) {
12
- const span = devPortRange.max - devPortRange.min + 1;
13
- const hash = createHash('sha256').update(kodyId).digest();
14
- return devPortRange.min + (hash.readUInt32BE(0) % span);
15
- }
16
- export function parseDevPort(raw) {
17
- const port = /^\d+$/.test(raw.trim()) ? Number(raw) : Number.NaN;
18
- if (!Number.isInteger(port) || port > 65_535) {
19
- throw new StructuredCliError({
20
- code: 'invalid_port',
21
- message: `--port must be an integer from 0 to 65535 (got "${raw}").`,
22
- fix: 'Pass --port 0 for any free port, or omit --port to use this package’s stable default.',
23
- });
24
- }
25
- return port;
26
- }
27
- /**
28
- * Listen on `port` exactly when `explicit`, otherwise on `port` or the next
29
- * free port above it. Returns the bound port.
30
- */
31
- export async function listenDevServer(server, input) {
32
- const attempts = input.explicit || input.port === 0 ? 1 : fallbackAttempts;
33
- for (let attempt = 0; attempt < attempts; attempt += 1) {
34
- const port = input.port === 0 ? 0 : wrapPort(input.port + attempt);
35
- try {
36
- await listenOnce(server, input.host, port);
37
- return server.address().port;
38
- }
39
- catch (error) {
40
- if (!isAddressInUse(error))
41
- throw error;
42
- if (input.explicit)
43
- throw portInUseError(input.host, port);
44
- }
45
- }
46
- throw new StructuredCliError({
47
- code: 'dev_port_in_use',
48
- message: `Ports ${input.port}–${wrapPort(input.port + attempts - 1)} on ${input.host} are all in use.`,
49
- fix: 'Stop old `kody dev` processes, or pass --port 0 for any free port.',
50
- });
51
- }
52
- function portInUseError(host, port) {
53
- return new StructuredCliError({
54
- code: 'dev_port_in_use',
55
- message: `Port ${port} on ${host} is already in use.`,
56
- fix: `Find the owner with \`lsof -nP -iTCP:${port} -sTCP:LISTEN\` and stop it, pass another --port, or omit --port to use this package’s default (it moves to the next free port automatically).`,
57
- });
58
- }
59
- function wrapPort(port) {
60
- return port > 65_535 ? devPortRange.min + (port - 65_536) : port;
61
- }
62
- function listenOnce(server, host, port) {
63
- return new Promise((resolve, reject) => {
64
- const onError = (error) => {
65
- server.off('listening', onListening);
66
- reject(error);
67
- };
68
- const onListening = () => {
69
- server.off('error', onError);
70
- resolve();
71
- };
72
- server.once('error', onError);
73
- server.once('listening', onListening);
74
- server.listen(port, host);
75
- });
76
- }
77
- function isAddressInUse(error) {
78
- return error?.code === 'EADDRINUSE';
79
- }
80
- //# sourceMappingURL=dev-port.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-port.js","sourceRoot":"","sources":["../../src/dev/dev-port.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAE3D,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAW,CAAA;AAC7D,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAE3B,MAAM,UAAU,cAAc,CAAC,MAAc;IAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,CAAA;IACpD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAA;IACzD,OAAO,YAAY,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;IAChE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;QAC9C,MAAM,IAAI,kBAAkB,CAAC;YAC5B,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,mDAAmD,GAAG,KAAK;YACpE,GAAG,EAAE,uFAAuF;SAC5F,CAAC,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,MAAc,EACd,KAAwD;IAExD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAA;IAC1E,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAA;QAClE,IAAI,CAAC;YACJ,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC1C,OAAQ,MAAM,CAAC,OAAO,EAAkB,CAAC,IAAI,CAAA;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAA;YACvC,IAAI,KAAK,CAAC,QAAQ;gBAAE,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC3D,CAAC;IACF,CAAC;IACD,MAAM,IAAI,kBAAkB,CAAC;QAC5B,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,SAAS,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,kBAAkB;QACtG,GAAG,EAAE,oEAAoE;KACzE,CAAC,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,IAAY;IACjD,OAAO,IAAI,kBAAkB,CAAC;QAC7B,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,QAAQ,IAAI,OAAO,IAAI,qBAAqB;QACrD,GAAG,EAAE,wCAAwC,IAAI,gJAAgJ;KACjM,CAAC,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC7B,OAAO,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACjE,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,IAAY,EAAE,IAAY;IAC7D,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;YAChC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;YACpC,MAAM,CAAC,KAAK,CAAC,CAAA;QACd,CAAC,CAAA;QACD,MAAM,WAAW,GAAG,GAAG,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC5B,OAAO,EAAE,CAAA;QACV,CAAC,CAAA;QACD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACrC,OAAQ,KAA2C,EAAE,IAAI,KAAK,YAAY,CAAA;AAC3E,CAAC"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Wire constants shared by the `kody dev` proxy (Node) and the dev entry that
3
- * runs inside workerd.
4
- */
5
- /**
6
- * Prefix the dev entry puts on every captured `console.*` line it writes to
7
- * workerd stdout. Control characters keep it from colliding with app output.
8
- */
9
- export const appLogMarker = '\u001fkody-dev-log\u001f';
10
- /** Proxy → workerd: short request id used to tag logs and errors. */
11
- export const devRequestIdHeader = 'x-kody-dev-request';
12
- /** workerd → proxy: the response carries a serialized uncaught handler error. */
13
- export const devErrorHeader = 'x-kody-dev-error';
14
- //# sourceMappingURL=dev-protocol.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-protocol.js","sourceRoot":"","sources":["../../src/dev/dev-protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAA;AAEtD,qEAAqE;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAA;AAEtD,iFAAiF;AACjF,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAA"}
@@ -1,95 +0,0 @@
1
- /**
2
- * Where a running `kody dev` server advertises itself so `kody dev fetch` can
3
- * reuse it instead of booting a second workerd. One JSON file per package root
4
- * + target under the user cache dir; stale entries (dead pid, wrong package)
5
- * are ignored.
6
- */
7
- import { createHash } from 'node:crypto';
8
- import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
9
- import { join } from 'node:path';
10
- import { userCacheDir } from '../workerd-binary.js';
11
- import { isProcessAlive } from './process-reaper.js';
12
- export const devStatusPath = '/__kody/dev/status';
13
- export function devRegistryPath(root, target, cacheDir = userCacheDir()) {
14
- const key = createHash('sha256').update(`${root}\0${target}`).digest('hex').slice(0, 16);
15
- return join(cacheDir, 'dev-servers', `${key}.json`);
16
- }
17
- export async function writeDevRegistration(registration, cacheDir) {
18
- const path = devRegistryPath(registration.root, registration.target, cacheDir);
19
- await mkdir(join(path, '..'), { recursive: true });
20
- await writeFile(path, `${JSON.stringify(registration, null, 2)}\n`);
21
- return path;
22
- }
23
- /**
24
- * Remove the entry only if it still belongs to `pid`. Missing or unreadable
25
- * files are left alone — a successor may have truncated or rewritten the path
26
- * before our shutdown finishes (same rule as `--ready-file` cleanup).
27
- */
28
- export async function removeDevRegistration(root, pid, target, cacheDir) {
29
- const path = devRegistryPath(root, target, cacheDir);
30
- try {
31
- const current = await readRegistration(path);
32
- if (!current || current.pid !== pid)
33
- return;
34
- await rm(path, { force: true });
35
- }
36
- catch {
37
- // Missing or unreadable — nothing to clean up.
38
- }
39
- }
40
- /**
41
- * The live `kody dev` server for `root` on `target`, confirmed via its status
42
- * endpoint, or null.
43
- */
44
- export async function findRunningDevServer(input) {
45
- const path = devRegistryPath(input.root, input.target, input.cacheDir);
46
- const registration = await readRegistration(path);
47
- if (!registration || registration.root !== input.root)
48
- return null;
49
- if (!isProcessAlive(registration.pid)) {
50
- // Re-read before deleting: a successor may have rewritten the same path
51
- // after we snapped `registration` but before we noticed the pid was dead.
52
- const current = await readRegistration(path);
53
- if (current && current.pid === registration.pid) {
54
- await rm(path, { force: true });
55
- }
56
- return null;
57
- }
58
- if (registration.target !== input.target)
59
- return null;
60
- try {
61
- const response = await (input.fetchFn ?? fetch)(new URL(devStatusPath, registration.origin), { signal: AbortSignal.timeout(input.timeoutMs ?? 1500) });
62
- if (!response.ok)
63
- return null;
64
- const status = (await response.json());
65
- if (status.package?.root !== input.root || status.target !== input.target)
66
- return null;
67
- return { registration, status };
68
- }
69
- catch {
70
- return null;
71
- }
72
- }
73
- async function readRegistration(path) {
74
- try {
75
- const parsed = JSON.parse(await readFile(path, 'utf8'));
76
- if (typeof parsed.pid !== 'number' ||
77
- typeof parsed.origin !== 'string' ||
78
- typeof parsed.root !== 'string' ||
79
- (parsed.target !== 'mock' && parsed.target !== 'prod')) {
80
- return null;
81
- }
82
- return {
83
- pid: parsed.pid,
84
- origin: parsed.origin,
85
- port: typeof parsed.port === 'number' ? parsed.port : Number(new URL(parsed.origin).port),
86
- basePath: typeof parsed.basePath === 'string' ? parsed.basePath : '',
87
- target: parsed.target,
88
- root: parsed.root,
89
- };
90
- }
91
- catch {
92
- return null;
93
- }
94
- }
95
- //# sourceMappingURL=dev-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-registry.js","sourceRoot":"","sources":["../../src/dev/dev-registry.ts"],"names":[],"mappings":"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"}
@@ -1,162 +0,0 @@
1
- /**
2
- * File watching for `kody dev`. chokidar watches the package tree (it re-arms
3
- * per-directory watchers when editors or `sed -i` / `cp` replace a file with a
4
- * new inode). A low-frequency stat poll over the files in the current bundle
5
- * graph backs it up, so a missed event can never leave a stale bundle serving.
6
- */
7
- import { watch } from 'chokidar';
8
- import { stat } from 'node:fs/promises';
9
- import { relative, sep } from 'node:path';
10
- const defaultPollIntervalMs = 1000;
11
- export function createDevWatcher(input) {
12
- const ignorePrefixes = (input.ignore ?? []).map(normalizePrefix).filter(Boolean);
13
- const ignored = (path) => shouldIgnoreWatchPath(relative(input.root, path), ignorePrefixes);
14
- const watcher = watch(input.root, {
15
- ignoreInitial: true,
16
- ignored,
17
- atomic: true,
18
- });
19
- watcher.on('all', (_event, path) => {
20
- if (!ignored(path))
21
- input.onChange(path);
22
- });
23
- // Init errors reject `ready` (awaited by start). Later errors are swallowed
24
- // so a transient watch glitch cannot crash the process.
25
- let readySettled = false;
26
- const ready = new Promise((resolve, reject) => {
27
- watcher.once('ready', () => {
28
- readySettled = true;
29
- resolve();
30
- });
31
- watcher.on('error', (error) => {
32
- if (readySettled)
33
- return;
34
- readySettled = true;
35
- reject(error instanceof Error ? error : new Error(String(error)));
36
- });
37
- });
38
- let tracked = new Map();
39
- let trackGeneration = 0;
40
- let polling = false;
41
- const poll = async () => {
42
- if (polling)
43
- return;
44
- polling = true;
45
- // Hold map + generation. track()/rebaseline() replace `tracked` with a
46
- // fresh Map at the start so an in-flight poll fails `tracked !== map`
47
- // immediately — otherwise it can fingerprint post-build bytes against
48
- // the pre-build baseline and echo a no-op rebuild.
49
- const map = tracked;
50
- const generation = trackGeneration;
51
- try {
52
- for (const [path, previous] of [...map]) {
53
- if (tracked !== map || generation !== trackGeneration)
54
- return;
55
- const next = await fingerprint(path);
56
- if (tracked !== map || generation !== trackGeneration)
57
- return;
58
- if (!map.has(path))
59
- continue;
60
- if (previous !== null && next !== previous) {
61
- if (tracked !== map || generation !== trackGeneration)
62
- return;
63
- // Defer (false): do not advance the fingerprint — the next
64
- // poll must still see this change (e.g. failed-prebuild absorb).
65
- if (input.onChange(path) === false)
66
- continue;
67
- if (tracked !== map || generation !== trackGeneration)
68
- return;
69
- map.set(path, next);
70
- }
71
- else if (previous === null) {
72
- map.set(path, next);
73
- }
74
- }
75
- }
76
- finally {
77
- polling = false;
78
- }
79
- };
80
- const timer = setInterval(() => void poll(), input.pollIntervalMs ?? defaultPollIntervalMs);
81
- timer.unref();
82
- return {
83
- ready,
84
- rebaseline: async () => {
85
- const generation = ++trackGeneration;
86
- const previousTracked = tracked;
87
- tracked = new Map();
88
- const next = new Map();
89
- for (const path of previousTracked.keys()) {
90
- next.set(path, await fingerprint(path));
91
- if (generation !== trackGeneration)
92
- return;
93
- }
94
- if (generation !== trackGeneration)
95
- return;
96
- tracked = next;
97
- trackGeneration++;
98
- },
99
- track: async (paths, options) => {
100
- const ignoreChanges = new Set(options?.ignoreChanges ?? []);
101
- const generation = ++trackGeneration;
102
- const previousTracked = tracked;
103
- // Detach before fingerprinting so concurrent polls cannot treat the
104
- // just-written files as fresh edits against the pre-build baseline.
105
- tracked = new Map();
106
- const changedDuringBuild = [];
107
- const next = new Map();
108
- for (const path of paths) {
109
- if (ignored(path))
110
- continue;
111
- const current = await fingerprint(path);
112
- if (generation !== trackGeneration)
113
- return [];
114
- const previous = previousTracked.get(path);
115
- if (previous !== undefined &&
116
- previous !== null &&
117
- current !== previous &&
118
- !ignoreChanges.has(path)) {
119
- changedDuringBuild.push(path);
120
- }
121
- next.set(path, current);
122
- }
123
- if (generation !== trackGeneration)
124
- return [];
125
- tracked = next;
126
- trackGeneration++;
127
- return changedDuringBuild;
128
- },
129
- close: async () => {
130
- clearInterval(timer);
131
- trackGeneration++;
132
- tracked = new Map();
133
- await watcher.close();
134
- },
135
- };
136
- }
137
- async function fingerprint(path) {
138
- try {
139
- const info = await stat(path);
140
- return `${info.ino}:${info.size}:${info.mtimeMs}`;
141
- }
142
- catch {
143
- return 'missing';
144
- }
145
- }
146
- function normalizePrefix(prefix) {
147
- return prefix.replace(/^\.\//, '').replace(/\/+$/, '').split('/').join(sep);
148
- }
149
- export function shouldIgnoreWatchPath(relativePath, ignorePrefixes = []) {
150
- if (!relativePath || relativePath === '.')
151
- return false;
152
- if (relativePath.startsWith('..'))
153
- return true;
154
- const segments = relativePath.split(sep);
155
- if (segments.some((segment) => segment === 'node_modules' || segment.startsWith('.'))) {
156
- return true;
157
- }
158
- if (relativePath.endsWith('.map'))
159
- return true;
160
- return ignorePrefixes.some((prefix) => relativePath === prefix || relativePath.startsWith(`${prefix}${sep}`));
161
- }
162
- //# sourceMappingURL=dev-watcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-watcher.js","sourceRoot":"","sources":["../../src/dev/dev-watcher.ts"],"names":[],"mappings":"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"}
@@ -1,64 +0,0 @@
1
- /**
2
- * Dev-only error responses served by the `kody dev` proxy for build failures
3
- * and uncaught handler errors. HTML for browsers, plain text for everyone else
4
- * (curl, agents, `kody dev fetch`).
5
- */
6
- export function wantsHtml(req) {
7
- const accept = req.headers.accept ?? '';
8
- return /\btext\/html\b/.test(accept);
9
- }
10
- export function sendDevError(req, res, status, view, options = {}) {
11
- if (res.headersSent) {
12
- res.end();
13
- return;
14
- }
15
- const headers = {
16
- 'cache-control': 'no-store',
17
- 'x-kody-dev-error': view.kind,
18
- };
19
- if (wantsHtml(req)) {
20
- res.writeHead(status, { ...headers, 'content-type': 'text/html; charset=utf-8' });
21
- res.end(renderDevErrorPage(view) + (options.htmlTail ?? ''));
22
- return;
23
- }
24
- res.writeHead(status, { ...headers, 'content-type': 'text/plain; charset=utf-8' });
25
- res.end(`kody dev ${view.kind} error${view.request ? ` (${view.request})` : ''}\n\n${view.detail}\n`);
26
- }
27
- export function renderDevErrorPage(view) {
28
- const label = view.kind === 'build' ? 'Build error' : 'Runtime error';
29
- return `<!doctype html>
30
- <html lang="en">
31
- <head>
32
- <meta charset="utf-8">
33
- <meta name="viewport" content="width=device-width, initial-scale=1">
34
- <title>${escapeHtml(label)} · kody dev</title>
35
- <style>
36
- :root { color-scheme: dark; }
37
- body { margin: 0; font: 14px/1.5 ui-sans-serif, system-ui, sans-serif; background: #1a1015; color: #f5e9ee; }
38
- main { max-width: 960px; margin: 0 auto; padding: 32px 24px; }
39
- .label { display: inline-block; font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: #ff8fab; }
40
- h1 { font-size: 20px; margin: 8px 0 20px; word-break: break-word; }
41
- pre { margin: 0; padding: 16px; overflow: auto; background: #0e080b; border: 1px solid #3a2530; border-radius: 8px; font: 13px/1.55 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre; }
42
- p { color: #bfa9b3; font-size: 13px; }
43
- </style>
44
- </head>
45
- <body>
46
- <main>
47
- <span class="label">${escapeHtml(label)}</span>
48
- <h1>${escapeHtml(view.title)}</h1>${view.request ? `\n<p>${escapeHtml(view.request)}</p>` : ''}
49
- <pre>${escapeHtml(view.detail)}</pre>
50
- <p>Served by <code>kody dev</code> only; published apps never see this page.</p>
51
- </main>
52
- </body>
53
- </html>
54
- `;
55
- }
56
- export function escapeHtml(value) {
57
- return value
58
- .replace(/&/g, '&amp;')
59
- .replace(/</g, '&lt;')
60
- .replace(/>/g, '&gt;')
61
- .replace(/"/g, '&quot;')
62
- .replace(/'/g, '&#39;');
63
- }
64
- //# sourceMappingURL=error-page.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-page.js","sourceRoot":"","sources":["../../src/dev/error-page.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,MAAM,UAAU,SAAS,CAAC,GAAoB;IAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAA;IACvC,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,YAAY,CAC3B,GAAoB,EACpB,GAAmB,EACnB,MAAc,EACd,IAAkB,EAClB,UAAiC,EAAE;IAEnC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACrB,GAAG,CAAC,GAAG,EAAE,CAAA;QACT,OAAM;IACP,CAAC;IACD,MAAM,OAAO,GAAG;QACf,eAAe,EAAE,UAAU;QAC3B,kBAAkB,EAAE,IAAI,CAAC,IAAI;KAC7B,CAAA;IACD,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAA;QACjF,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAA;QAC5D,OAAM;IACP,CAAC;IACD,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,2BAA2B,EAAE,CAAC,CAAA;IAClF,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;AACtG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAkB;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAA;IACrE,OAAO;;;;;SAKC,UAAU,CAAC,KAAK,CAAC;;;;;;;;;;;;;sBAaJ,UAAU,CAAC,KAAK,CAAC;MACjC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;OACvF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;;;;;CAK7B,CAAA;AACD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACvC,OAAO,KAAK;SACV,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC"}