@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,362 +0,0 @@
1
- /**
2
- * Self-contained OAuth callback HTML for `kody login`.
3
- * Tokens and CSS match kody.codes (`kentcdodds/kody` packages/worker/public/styles.css).
4
- * Inline CSS + inline SVG only — no external network requests from localhost.
5
- */
6
- import { kodyMarkPngDataUri, kodyPatternWebpDataUri, } from './login-callback-assets.js';
7
- const errorCopy = {
8
- denied: {
9
- title: 'Sign-in cancelled',
10
- body: 'You denied access in the browser. Nothing was saved.',
11
- },
12
- state_mismatch: {
13
- title: 'Sign-in session mismatch',
14
- body: 'This login link did not match the request from your terminal (or it was reused).',
15
- },
16
- expired: {
17
- title: 'Sign-in expired',
18
- body: 'This login session timed out before it finished.',
19
- },
20
- failed: {
21
- title: 'Sign-in failed',
22
- body: 'Kody could not finish signing the CLI in.',
23
- },
24
- };
25
- function escapeHtml(value) {
26
- return value
27
- .replaceAll('&', '&')
28
- .replaceAll('<', '&lt;')
29
- .replaceAll('>', '&gt;')
30
- .replaceAll('"', '&quot;')
31
- .replaceAll("'", '&#39;');
32
- }
33
- function accountLabel(account) {
34
- const display = account.displayName?.trim();
35
- const email = account.email?.trim();
36
- const username = account.username?.trim();
37
- if (display && email && display !== email)
38
- return `${display} (${email})`;
39
- if (display)
40
- return display;
41
- if (email)
42
- return email;
43
- if (username)
44
- return username;
45
- return undefined;
46
- }
47
- function brandMarkSvg() {
48
- // Official koala mark (PNG) embedded inside SVG so the page stays
49
- // CSS + SVG with no external image requests.
50
- return `<svg class="mark" xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" role="img" aria-label="Kody">
51
- <image href="${kodyMarkPngDataUri}" width="40" height="40" preserveAspectRatio="xMidYMid meet"/>
52
- </svg>`;
53
- }
54
- function statusIconSvg(kind) {
55
- if (kind === 'success') {
56
- return `<svg class="status-icon" xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28" aria-hidden="true">
57
- <circle cx="14" cy="14" r="14" fill="var(--color-primary)"/>
58
- <path d="M8.2 14.2l3.4 3.4 8.2-8.2" fill="none" stroke="var(--color-on-primary)" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/>
59
- </svg>`;
60
- }
61
- return `<svg class="status-icon" xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28" aria-hidden="true">
62
- <circle cx="14" cy="14" r="14" fill="var(--color-danger)"/>
63
- <path d="M9.5 9.5l9 9M18.5 9.5l-9 9" fill="none" stroke="var(--color-on-danger)" stroke-width="2.4" stroke-linecap="round"/>
64
- </svg>`;
65
- }
66
- function pageCss() {
67
- // Color / type / pattern tokens copied from kody.codes public/styles.css
68
- // (kentcdodds/kody). Pattern is the official shirt tile, inlined as a mask.
69
- return `:root {
70
- color-scheme: light dark;
71
- --color-primary: oklch(0.54 0.18 145);
72
- --color-primary-hover: oklch(0.48 0.17 145);
73
- --color-on-primary: oklch(1 0 0);
74
- --color-primary-text: oklch(0.455 0.17 145);
75
- --color-background: oklch(0.93 0.004 250);
76
- --color-surface: oklch(0.975 0.002 250);
77
- --color-text: oklch(0.22 0.012 260);
78
- --color-text-muted: oklch(0.44 0.014 260);
79
- --color-border: oklch(0.84 0.008 250);
80
- --color-danger: oklch(0.535 0.19 25);
81
- --color-on-danger: oklch(0.985 0.005 25);
82
- --color-primary-dark: oklch(0.72 0.205 145);
83
- --color-primary-hover-dark: oklch(0.78 0.21 145);
84
- --color-on-primary-dark: oklch(0.2 0.05 148);
85
- --color-primary-text-dark: oklch(0.75 0.2 145);
86
- --color-background-dark: oklch(0.19 0.008 255);
87
- --color-surface-dark: oklch(0.235 0.01 255);
88
- --color-text-dark: oklch(0.945 0.005 250);
89
- --color-text-muted-dark: oklch(0.72 0.01 255);
90
- --color-border-dark: oklch(0.33 0.01 255);
91
- --color-danger-dark: oklch(0.75 0.16 25);
92
- --color-on-danger-dark: oklch(0.2 0.05 25);
93
- --font-display: 'Bricolage Grotesque', system-ui, sans-serif;
94
- --font-body: 'Wix Madefor Text', system-ui, sans-serif;
95
- --radius-card: 14px;
96
- --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
97
- --kody-pattern: url('${kodyPatternWebpDataUri}');
98
- }
99
- @media (prefers-color-scheme: dark) {
100
- :root {
101
- color-scheme: dark;
102
- --color-primary: var(--color-primary-dark);
103
- --color-primary-hover: var(--color-primary-hover-dark);
104
- --color-on-primary: var(--color-on-primary-dark);
105
- --color-primary-text: var(--color-primary-text-dark);
106
- --color-background: var(--color-background-dark);
107
- --color-surface: var(--color-surface-dark);
108
- --color-text: var(--color-text-dark);
109
- --color-text-muted: var(--color-text-muted-dark);
110
- --color-border: var(--color-border-dark);
111
- --color-danger: var(--color-danger-dark);
112
- --color-on-danger: var(--color-on-danger-dark);
113
- }
114
- }
115
- *, *::before, *::after { box-sizing: border-box; }
116
- html, body { height: 100%; }
117
- body {
118
- margin: 0;
119
- min-height: 100%;
120
- font-family: var(--font-body);
121
- font-size: 1.0625rem;
122
- line-height: 1.62;
123
- color: var(--color-text);
124
- background: var(--color-background);
125
- -webkit-font-smoothing: antialiased;
126
- text-rendering: optimizeLegibility;
127
- }
128
- .page {
129
- position: relative;
130
- isolation: isolate;
131
- min-height: 100%;
132
- display: grid;
133
- place-items: center;
134
- padding: clamp(1.5rem, 4vw, 3rem);
135
- }
136
- .page::before {
137
- content: '';
138
- position: absolute;
139
- z-index: -1;
140
- inset: 0;
141
- background: radial-gradient(
142
- ellipse 55% 50% at 50% 42%,
143
- oklch(from var(--color-text) l c h / 0.055),
144
- transparent 72%
145
- );
146
- mask-image: var(--kody-pattern);
147
- mask-position: center;
148
- mask-size: 220px;
149
- mask-repeat: repeat;
150
- -webkit-mask-image: var(--kody-pattern);
151
- -webkit-mask-position: center;
152
- -webkit-mask-size: 220px;
153
- -webkit-mask-repeat: repeat;
154
- pointer-events: none;
155
- }
156
- .panel {
157
- width: min(100%, 28rem);
158
- background: var(--color-surface);
159
- border: 1px solid var(--color-border);
160
- border-radius: var(--radius-card);
161
- padding: 1.75rem 1.6rem 1.55rem;
162
- box-shadow: 0 10px 28px oklch(from var(--color-text) l c h / 0.06);
163
- }
164
- .brand {
165
- display: inline-flex;
166
- align-items: center;
167
- gap: 0.6rem;
168
- font: 700 1.2rem/1 var(--font-display);
169
- letter-spacing: -0.01em;
170
- color: var(--color-text);
171
- text-decoration: none;
172
- }
173
- .mark { display: block; border-radius: 10px; background: #111; }
174
- .status {
175
- display: flex;
176
- align-items: flex-start;
177
- gap: 0.85rem;
178
- margin-top: 1.45rem;
179
- }
180
- .status-icon { flex: 0 0 auto; margin-top: 0.15rem; }
181
- h1 {
182
- margin: 0;
183
- font: 800 1.55rem/1.15 var(--font-display);
184
- letter-spacing: -0.02em;
185
- text-wrap: balance;
186
- }
187
- .lead {
188
- margin: 0.55rem 0 0;
189
- color: var(--color-text-muted);
190
- text-wrap: pretty;
191
- }
192
- .facts {
193
- list-style: none;
194
- margin: 1.15rem 0 0;
195
- padding: 0;
196
- display: grid;
197
- gap: 0.55rem;
198
- }
199
- .facts li {
200
- display: flex;
201
- flex-direction: column;
202
- gap: 0.2rem;
203
- padding: 0.55rem 0.75rem;
204
- border-radius: 10px;
205
- background: color-mix(in oklch, var(--color-primary) 7%, transparent);
206
- }
207
- .facts .label {
208
- font-size: 0.72rem;
209
- font-weight: 600;
210
- letter-spacing: 0.04em;
211
- text-transform: uppercase;
212
- color: var(--color-text-muted);
213
- }
214
- .facts .value {
215
- font-family: var(--font-display);
216
- font-weight: 650;
217
- color: var(--color-text);
218
- overflow-wrap: anywhere;
219
- }
220
- .next {
221
- margin: 1.2rem 0 0;
222
- padding-top: 1rem;
223
- border-top: 1px solid var(--color-border);
224
- color: var(--color-text-muted);
225
- font-size: 0.95rem;
226
- }
227
- .next code {
228
- font-family: ui-monospace, 'SF Mono', Menlo, monospace;
229
- font-size: 0.9em;
230
- color: var(--color-primary-text);
231
- background: color-mix(in oklch, var(--color-primary) 10%, transparent);
232
- padding: 0.12rem 0.35rem;
233
- border-radius: 0.35rem;
234
- }
235
- @media (prefers-reduced-motion: no-preference) {
236
- .panel {
237
- animation: rise 420ms var(--ease-out) both;
238
- }
239
- .status-icon {
240
- animation: pop 480ms var(--ease-out) 80ms both;
241
- }
242
- }
243
- @keyframes rise {
244
- from { opacity: 0; translate: 0 12px; }
245
- to { opacity: 1; translate: 0 0; }
246
- }
247
- @keyframes pop {
248
- from { opacity: 0; scale: 0.84; }
249
- to { opacity: 1; scale: 1; }
250
- }`;
251
- }
252
- function closeScript() {
253
- // Browsers only allow window.close() for script-opened windows; try anyway.
254
- return `<script>
255
- (function () {
256
- function attempt() {
257
- try { window.close(); } catch (_) {}
258
- }
259
- attempt();
260
- setTimeout(attempt, 120);
261
- })();
262
- </script>`;
263
- }
264
- function renderSuccess(page) {
265
- const org = page.org?.trim();
266
- const account = page.account ? accountLabel(page.account) : undefined;
267
- const facts = [];
268
- if (org) {
269
- facts.push(`<li><span class="label">Org</span><span class="value">${escapeHtml(org)}</span></li>`);
270
- }
271
- if (account) {
272
- facts.push(`<li><span class="label">Account</span><span class="value">${escapeHtml(account)}</span></li>`);
273
- }
274
- const factsHtml = facts.length > 0 ? `<ul class="facts">${facts.join('')}</ul>` : '';
275
- const lead = org
276
- ? `Kody CLI is signed in to <strong>${escapeHtml(org)}</strong>.`
277
- : 'Kody CLI is signed in.';
278
- return `<!doctype html>
279
- <html lang="en">
280
- <head>
281
- <meta charset="utf-8"/>
282
- <meta name="viewport" content="width=device-width, initial-scale=1"/>
283
- <meta name="color-scheme" content="light dark"/>
284
- <title>Signed in · Kody CLI</title>
285
- <style>${pageCss()}</style>
286
- </head>
287
- <body>
288
- <main class="page">
289
- <section class="panel" data-state="success">
290
- <div class="brand">${brandMarkSvg()}<span>Kody</span></div>
291
- <div class="status">
292
- ${statusIconSvg('success')}
293
- <div>
294
- <h1>You're signed in</h1>
295
- <p class="lead">${lead}</p>
296
- </div>
297
- </div>
298
- ${factsHtml}
299
- <p class="next">You can close this tab and return to your terminal.</p>
300
- </section>
301
- </main>
302
- ${closeScript()}
303
- </body>
304
- </html>`;
305
- }
306
- function renderError(page) {
307
- const copy = errorCopy[page.error];
308
- return `<!doctype html>
309
- <html lang="en">
310
- <head>
311
- <meta charset="utf-8"/>
312
- <meta name="viewport" content="width=device-width, initial-scale=1"/>
313
- <meta name="color-scheme" content="light dark"/>
314
- <title>${escapeHtml(copy.title)} · Kody CLI</title>
315
- <style>${pageCss()}</style>
316
- </head>
317
- <body>
318
- <main class="page">
319
- <section class="panel" data-state="error" data-error="${escapeHtml(page.error)}">
320
- <div class="brand">${brandMarkSvg()}<span>Kody</span></div>
321
- <div class="status">
322
- ${statusIconSvg('error')}
323
- <div>
324
- <h1>${escapeHtml(copy.title)}</h1>
325
- <p class="lead">${escapeHtml(copy.body)}</p>
326
- </div>
327
- </div>
328
- <p class="next">Return to your terminal and run <code>kody login</code> to try again.</p>
329
- </section>
330
- </main>
331
- ${closeScript()}
332
- </body>
333
- </html>`;
334
- }
335
- /** Build the localhost callback HTML. Never includes codes or tokens. */
336
- export function renderLoginCallbackPage(page) {
337
- if (page.kind === 'success')
338
- return renderSuccess(page);
339
- return renderError(page);
340
- }
341
- /** Map OAuth `error` query values to a designed error state. */
342
- export function loginCallbackErrorFromOAuthError(error) {
343
- const normalized = error.trim().toLowerCase();
344
- if (normalized === 'access_denied' ||
345
- normalized === 'denied' ||
346
- normalized === 'consent_required') {
347
- return 'denied';
348
- }
349
- if (normalized === 'expired' ||
350
- normalized === 'expired_token' ||
351
- normalized === 'invalid_grant' ||
352
- normalized.includes('expired')) {
353
- return 'expired';
354
- }
355
- if (normalized === 'state_mismatch' ||
356
- normalized === 'invalid_request' ||
357
- normalized === 'invalid_state') {
358
- return 'state_mismatch';
359
- }
360
- return 'failed';
361
- }
362
- //# sourceMappingURL=login-callback-page.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login-callback-page.js","sourceRoot":"","sources":["../src/login-callback-page.ts"],"names":[],"mappings":"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"}
package/dist/mcp.d.ts DELETED
@@ -1,34 +0,0 @@
1
- import type { SecretBackend } from './store.js';
2
- import type { ToolCallResult } from './tool-result.js';
3
- export type CallToolInput = {
4
- name: 'search' | 'execute' | 'api';
5
- args: Record<string, unknown>;
6
- mcpUrl?: string;
7
- /** Use this org's stored login (flag / KODY_ORG / active). */
8
- org?: string;
9
- backend?: SecretBackend;
10
- fetchFn?: typeof fetch;
11
- };
12
- export declare function callKodyTool(input: CallToolInput): Promise<ToolCallResult>;
13
- /**
14
- * Call one operation through the Kody MCP `api` tool as the `kody login`
15
- * session and return its `structuredContent.result`. Throws the platform error
16
- * message when the tool reports `isError`.
17
- */
18
- export declare function callKodyApiOperation(input: {
19
- operationId: string;
20
- params: Record<string, unknown>;
21
- mcpUrl?: string;
22
- org?: string;
23
- backend?: SecretBackend;
24
- fetchFn?: typeof fetch;
25
- }): Promise<unknown>;
26
- export declare function listKodyTools(input: {
27
- mcpUrl?: string;
28
- org?: string;
29
- backend?: SecretBackend;
30
- fetchFn?: typeof fetch;
31
- }): Promise<Array<{
32
- name: string;
33
- description?: string;
34
- }>>;
package/dist/mcp.js DELETED
@@ -1,134 +0,0 @@
1
- import { Client, StreamableHTTPClientTransport, UnauthorizedError, } from '@modelcontextprotocol/client';
2
- import { cliName, missingOpenidReloginHint, modernMcpProtocolVersion, scopeIncludesOpenid, } from './defaults.js';
3
- import { ensureFreshCredentials, refreshStoredCredentials } from './auth.js';
4
- import { readPackageVersion } from './package-info.js';
5
- import { redactError } from './redact.js';
6
- async function connect(mcpUrl, accessToken, fetchFn) {
7
- const transport = new StreamableHTTPClientTransport(new URL(mcpUrl), {
8
- requestInit: {
9
- headers: {
10
- Authorization: `Bearer ${accessToken}`,
11
- },
12
- },
13
- ...(fetchFn ? { fetch: fetchFn } : {}),
14
- });
15
- const client = new Client({
16
- name: cliName,
17
- version: readPackageVersion(),
18
- }, { versionNegotiation: { mode: { pin: modernMcpProtocolVersion } } });
19
- await client.connect(transport);
20
- return { client, transport };
21
- }
22
- export async function callKodyTool(input) {
23
- const credentials = await ensureFreshCredentials({
24
- mcpUrl: input.mcpUrl,
25
- org: input.org,
26
- backend: input.backend,
27
- fetchFn: input.fetchFn,
28
- });
29
- try {
30
- return await invoke(credentials.mcpUrl, credentials.accessToken, input);
31
- }
32
- catch (error) {
33
- if (!(error instanceof UnauthorizedError) && !isUnauthorized(error)) {
34
- throw withOpenidScopeHint(error, credentials.scope);
35
- }
36
- const refreshed = await refreshStoredCredentials({
37
- credentials,
38
- backend: input.backend,
39
- fetchFn: input.fetchFn,
40
- });
41
- try {
42
- return await invoke(refreshed.mcpUrl, refreshed.accessToken, input);
43
- }
44
- catch (retryError) {
45
- throw withOpenidScopeHint(retryError, refreshed.scope);
46
- }
47
- }
48
- }
49
- async function invoke(mcpUrl, accessToken, input) {
50
- const { client, transport } = await connect(mcpUrl, accessToken, input.fetchFn);
51
- try {
52
- const result = await client.callTool({
53
- name: input.name,
54
- arguments: input.args,
55
- });
56
- return result;
57
- }
58
- finally {
59
- await transport.close().catch(() => undefined);
60
- }
61
- }
62
- /**
63
- * Call one operation through the Kody MCP `api` tool as the `kody login`
64
- * session and return its `structuredContent.result`. Throws the platform error
65
- * message when the tool reports `isError`.
66
- */
67
- export async function callKodyApiOperation(input) {
68
- const result = await callKodyTool({
69
- name: 'api',
70
- args: { operationId: input.operationId, params: input.params },
71
- mcpUrl: input.mcpUrl,
72
- org: input.org,
73
- backend: input.backend,
74
- fetchFn: input.fetchFn,
75
- });
76
- const structured = isRecord(result.structuredContent) ? result.structuredContent : null;
77
- if (result.isError) {
78
- const error = structured && isRecord(structured.error) ? structured.error : null;
79
- const message = error && typeof error.message === 'string'
80
- ? error.message
81
- : result.content
82
- .map((part) => (typeof part.text === 'string' ? part.text : ''))
83
- .join('\n')
84
- .trim();
85
- throw new Error(message || `Kody api ${input.operationId} failed.`);
86
- }
87
- if (!structured || !('result' in structured)) {
88
- throw new Error(`Kody api ${input.operationId} returned no result.`);
89
- }
90
- return structured.result;
91
- }
92
- export async function listKodyTools(input) {
93
- const credentials = await ensureFreshCredentials({
94
- mcpUrl: input.mcpUrl,
95
- org: input.org,
96
- backend: input.backend,
97
- fetchFn: input.fetchFn,
98
- });
99
- try {
100
- const { client, transport } = await connect(credentials.mcpUrl, credentials.accessToken, input.fetchFn);
101
- try {
102
- const listed = await client.listTools();
103
- return listed.tools.map((tool) => ({
104
- name: tool.name,
105
- description: tool.description,
106
- }));
107
- }
108
- finally {
109
- await transport.close().catch(() => undefined);
110
- }
111
- }
112
- catch (error) {
113
- throw withOpenidScopeHint(error, credentials.scope);
114
- }
115
- }
116
- function isUnauthorized(error) {
117
- if (!error || typeof error !== 'object')
118
- return false;
119
- const status = 'code' in error ? error.code : undefined;
120
- return (status === 401 ||
121
- (error instanceof Error && /401|unauthorized/i.test(error.message)));
122
- }
123
- function withOpenidScopeHint(error, scope) {
124
- const redacted = redactError(error);
125
- if (/insufficient_scope/i.test(redacted.message) &&
126
- !scopeIncludesOpenid(scope)) {
127
- return new Error(`${redacted.message}\n${missingOpenidReloginHint}`);
128
- }
129
- return redacted;
130
- }
131
- function isRecord(value) {
132
- return value !== null && typeof value === 'object' && !Array.isArray(value);
133
- }
134
- //# sourceMappingURL=mcp.js.map
package/dist/mcp.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}