@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,59 +0,0 @@
1
- import { upsertServer, } from 'add-mcp';
2
- /**
3
- * Hosts whose on-disk MCP config `add-mcp` already knows how to merge.
4
- * Claude Desktop is intentionally omitted: remote MCP lives in Connectors, not
5
- * `claude_desktop_config.json`.
6
- */
7
- export const addMcpAgentByHostId = {
8
- antigravity: 'antigravity',
9
- cline: 'cline',
10
- 'cline-cli': 'cline-cli',
11
- 'claude-code': 'claude-code',
12
- codex: 'codex',
13
- cursor: 'cursor',
14
- fx: 'fx',
15
- 'gemini-cli': 'gemini-cli',
16
- goose: 'goose',
17
- 'copilot-cli': 'github-copilot-cli',
18
- 'grok-build': 'grok-build',
19
- 'kilo-code': 'kilo-code',
20
- 'kimi-code': 'kimi-code',
21
- 'kiro-cli': 'kiro-cli',
22
- mastracode: 'mastracode',
23
- mcporter: 'mcporter',
24
- opencode: 'opencode',
25
- pi: 'pi',
26
- vscode: 'vscode',
27
- windsurf: 'windsurf',
28
- zed: 'zed',
29
- };
30
- const addMcpProjectHosts = new Set([
31
- 'claude-code',
32
- 'codex',
33
- 'cursor',
34
- 'gemini-cli',
35
- 'copilot-cli',
36
- 'grok-build',
37
- 'kilo-code',
38
- 'kimi-code',
39
- 'kiro-cli',
40
- 'mastracode',
41
- 'mcporter',
42
- 'opencode',
43
- 'pi',
44
- 'vscode',
45
- 'zed',
46
- ]);
47
- export function isAddMcpHostId(id) {
48
- return Object.hasOwn(addMcpAgentByHostId, id);
49
- }
50
- export function addMcpUsesProjectScope(id, project) {
51
- return project && addMcpProjectHosts.has(id);
52
- }
53
- export function kodyRemoteConfig(mcpUrl) {
54
- return { type: 'http', url: mcpUrl };
55
- }
56
- export function defaultUpsertServer(agentType, serverName, serverConfig, options) {
57
- return upsertServer(agentType, serverName, serverConfig, options);
58
- }
59
- //# sourceMappingURL=add-mcp-install.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-mcp-install.js","sourceRoot":"","sources":["../src/add-mcp-install.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,GAIZ,MAAM,SAAS,CAAA;AAGhB;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAClC,WAAW,EAAE,aAAa;IAC1B,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,WAAW;IACxB,aAAa,EAAE,aAAa;IAC5B,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,EAAE,EAAE,IAAI;IACR,YAAY,EAAE,YAAY;IAC1B,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,oBAAoB;IACnC,YAAY,EAAE,YAAY;IAC1B,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,WAAW;IACxB,UAAU,EAAE,UAAU;IACtB,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,KAAK;CAC4C,CAAA;AAIvD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAe;IAChD,aAAa;IACb,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,WAAW;IACX,WAAW;IACX,UAAU;IACV,YAAY;IACZ,UAAU;IACV,UAAU;IACV,IAAI;IACJ,QAAQ;IACR,KAAK;CACL,CAAC,CAAA;AASF,MAAM,UAAU,cAAc,CAAC,EAAU;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EAAgB,EAAE,OAAgB;IACxE,OAAO,OAAO,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,SAAoB,EACpB,UAAkB,EAClB,YAA6B,EAC7B,OAA2C;IAE3C,OAAO,YAAY,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;AAClE,CAAC"}
@@ -1,120 +0,0 @@
1
- import { Entry } from '@napi-rs/keyring';
2
- import { homedir } from 'node:os';
3
- import { join } from 'node:path';
4
- import { defaultApiUrl, keyringService } from './defaults.js';
5
- import { createFileBackend, secretServiceKeyringOptions, } from './store.js';
6
- export function accountForApiUrl(apiUrl) {
7
- return `cli-api-token:${new URL(apiUrl).origin}`;
8
- }
9
- export function apiTokenFileStorePath(apiUrl, home = homedir()) {
10
- const origin = new URL(apiUrl).host.replace(/[^a-zA-Z0-9.-]/g, '_');
11
- const base = process.platform === 'win32'
12
- ? join(process.env.APPDATA || join(home, 'AppData', 'Roaming'), 'kody')
13
- : process.platform === 'darwin'
14
- ? join(home, 'Library', 'Application Support', 'kody')
15
- : join(process.env.XDG_CONFIG_HOME || join(home, '.config'), 'kody');
16
- return join(base, `api-token-${origin}.json`);
17
- }
18
- export function createApiTokenKeyringBackend(apiUrl) {
19
- const entry = new Entry(keyringService, accountForApiUrl(apiUrl), secretServiceKeyringOptions);
20
- return {
21
- kind: 'keyring',
22
- get() {
23
- try {
24
- return entry.getPassword();
25
- }
26
- catch {
27
- return null;
28
- }
29
- },
30
- set(value) {
31
- entry.setPassword(value);
32
- },
33
- delete() {
34
- try {
35
- return entry.deleteCredential();
36
- }
37
- catch {
38
- return false;
39
- }
40
- },
41
- };
42
- }
43
- function fileBackendFor(apiUrl, resolution) {
44
- const path = resolution?.fileStorePath?.(apiUrl) ?? apiTokenFileStorePath(apiUrl);
45
- return createFileBackend(path);
46
- }
47
- function resolveApiTokenBackend(apiUrl, preferred, resolution) {
48
- if (preferred)
49
- return preferred;
50
- try {
51
- return (resolution?.createKeyring ?? createApiTokenKeyringBackend)(apiUrl);
52
- }
53
- catch {
54
- return fileBackendFor(apiUrl, resolution);
55
- }
56
- }
57
- export function parseStoredApiToken(raw) {
58
- const parsed = JSON.parse(raw);
59
- if (parsed.version !== 1 ||
60
- typeof parsed.token !== 'string' ||
61
- !parsed.token.startsWith('kody_at_') ||
62
- typeof parsed.apiUrl !== 'string' ||
63
- typeof parsed.tokenId !== 'string') {
64
- throw new Error('Stored Kody API token is invalid. Run `kody auth bootstrap --code …` again.');
65
- }
66
- return parsed;
67
- }
68
- function readParsed(store) {
69
- const raw = store.get();
70
- if (!raw)
71
- return null;
72
- return parseStoredApiToken(raw);
73
- }
74
- export function loadStoredApiToken(apiUrl = defaultApiUrl, backend, resolution) {
75
- const store = resolveApiTokenBackend(apiUrl, backend, resolution);
76
- try {
77
- const loaded = readParsed(store);
78
- if (loaded)
79
- return loaded;
80
- }
81
- catch (error) {
82
- if (!(store.kind === 'keyring' && !backend))
83
- throw error;
84
- }
85
- if (store.kind === 'keyring' && !backend) {
86
- return readParsed(fileBackendFor(apiUrl, resolution));
87
- }
88
- return null;
89
- }
90
- export function saveStoredApiToken(credentials, backend, resolution) {
91
- const store = resolveApiTokenBackend(credentials.apiUrl, backend, resolution);
92
- try {
93
- store.set(JSON.stringify(credentials));
94
- return { backend: store };
95
- }
96
- catch (error) {
97
- if (store.kind === 'keyring' && !backend) {
98
- const fallback = fileBackendFor(credentials.apiUrl, resolution);
99
- fallback.set(JSON.stringify(credentials));
100
- return { backend: fallback };
101
- }
102
- throw error;
103
- }
104
- }
105
- export function deleteStoredApiToken(apiUrl = defaultApiUrl, backend, resolution) {
106
- const store = resolveApiTokenBackend(apiUrl, backend, resolution);
107
- let deleted = false;
108
- try {
109
- deleted = store.delete();
110
- }
111
- catch {
112
- deleted = false;
113
- }
114
- if (store.kind === 'keyring' && !backend) {
115
- const file = fileBackendFor(apiUrl, resolution);
116
- deleted = file.delete() || deleted;
117
- }
118
- return { deleted, backend: store };
119
- }
120
- //# sourceMappingURL=api-token-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-token-store.js","sourceRoot":"","sources":["../src/api-token-store.ts"],"names":[],"mappings":"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"}
package/dist/api-token.js DELETED
@@ -1,238 +0,0 @@
1
- import { loadStoredApiToken, } from './api-token-store.js';
2
- import { apiTokenEnvVar, defaultApiUrl, defaultMcpUrl, } from './defaults.js';
3
- /** ADR 0056 `short` absolute max (24h), used only to infer hint lifetime. */
4
- const shortAbsoluteLifetimeMs = 24 * 60 * 60 * 1000;
5
- /** Platform tracking for login OAuth as CapabilityProxy / package-graph Bearer. */
6
- export const localExecuteOauthPlatformIssueUrl = 'https://github.com/kentcdodds/kody/issues/2812';
7
- const loopbackHosts = new Set(['localhost', '127.0.0.1', '[::1]', '::1']);
8
- function tryParseUrl(value) {
9
- try {
10
- return new URL(value);
11
- }
12
- catch {
13
- return null;
14
- }
15
- }
16
- function isWorkersDevHostname(hostname) {
17
- return hostname.endsWith('.workers.dev');
18
- }
19
- /** Whether a login OAuth bearer may be sent to this API origin. */
20
- export function isPairedApiUrl(apiUrl = defaultApiUrl, mcpUrl = defaultMcpUrl) {
21
- const api = tryParseUrl(apiUrl);
22
- const mcp = tryParseUrl(mcpUrl);
23
- if (!api || !mcp)
24
- return false;
25
- const apiIsLoopback = loopbackHosts.has(api.hostname.toLowerCase());
26
- const mcpIsLoopback = loopbackHosts.has(mcp.hostname.toLowerCase());
27
- if (apiIsLoopback && mcpIsLoopback) {
28
- return ['http:', 'https:'].includes(api.protocol) &&
29
- ['http:', 'https:'].includes(mcp.protocol);
30
- }
31
- if (api.protocol !== 'https:' || mcp.protocol !== 'https:')
32
- return false;
33
- const apiIsWorkersDev = isWorkersDevHostname(api.hostname);
34
- const mcpIsWorkersDev = isWorkersDevHostname(mcp.hostname);
35
- if (apiIsWorkersDev || mcpIsWorkersDev) {
36
- if (!apiIsWorkersDev || !mcpIsWorkersDev)
37
- return false;
38
- const apiLabels = api.hostname.toLowerCase().split('.');
39
- const mcpLabels = mcp.hostname.toLowerCase().split('.');
40
- return (apiLabels.length === mcpLabels.length &&
41
- apiLabels.slice(1).join('.') === mcpLabels.slice(1).join('.') &&
42
- apiLabels[0] === `${mcpLabels[0]}-api`);
43
- }
44
- return api.hostname.toLowerCase() === `api.${mcp.hostname.toLowerCase()}`;
45
- }
46
- export function expectedPairedApiOrigin(mcpUrl) {
47
- const mcp = tryParseUrl(mcpUrl);
48
- if (!mcp)
49
- return 'a paired API origin';
50
- if (loopbackHosts.has(mcp.hostname.toLowerCase())) {
51
- return 'a loopback API origin';
52
- }
53
- const hostname = mcp.hostname.toLowerCase();
54
- if (isWorkersDevHostname(hostname)) {
55
- const labels = hostname.split('.');
56
- labels[0] = `${labels[0]}-api`;
57
- return `https://${labels.join('.')}`;
58
- }
59
- return `https://api.${hostname}`;
60
- }
61
- /**
62
- * Scoped Open API / CapabilityProxy token (`kody_at_…`). Same source for
63
- * `execute --local`, token-only cloud execute, and Open API search/whoami.
64
- */
65
- export function readApiToken(values = {}, env = process.env) {
66
- const token = (values.token ?? env[apiTokenEnvVar] ?? '').trim();
67
- return token.length > 0 ? token : null;
68
- }
69
- /**
70
- * Resolve a scoped API token without falling back to `kody login` OAuth.
71
- * Priority: `--token` / `KODY_API_TOKEN` → stored bootstrap/API token.
72
- */
73
- export function resolveScopedApiToken(input = {}) {
74
- const token = readApiToken(input.tokenValues, input.env);
75
- if (token)
76
- return token;
77
- const apiUrl = input.apiUrl || defaultApiUrl;
78
- const loadApi = input.loadApiToken ?? loadStoredApiToken;
79
- return loadApi(apiUrl, input.apiTokenBackend, input.apiTokenResolution)?.token ?? null;
80
- }
81
- /** True when the bearer looks like a minted Open API token (not MCP OAuth). */
82
- export function isScopedApiToken(token) {
83
- return token.startsWith('kody_at_');
84
- }
85
- /**
86
- * How to mint a scoped token for CI/headless. Interactive agents on MCP should
87
- * prefer `cliCredentialBootstrap` → `auth bootstrap` instead.
88
- */
89
- export function apiTokenMintInstructions() {
90
- return `For CI/headless only: mint with the Kody MCP \`api\` tool \`tokenCreate\` (include \`org:execute\` plus the capability scopes this command needs, e.g. \`package:execute\` / \`integration:read\`) and pass --token or set ${apiTokenEnvVar}.`;
91
- }
92
- /**
93
- * CapabilityProxy refused the token outright (not a missing scope): one line
94
- * saying so, then one line with the command that fixes it.
95
- */
96
- export function capabilityProxyForbiddenMessage(input) {
97
- const reason = input.serverMessage ? `: ${input.serverMessage}` : '';
98
- return (`The API token is not allowed to use CapabilityProxy (${input.code ?? 'forbidden'})${reason}.\n` +
99
- `Fix: run \`npx @kodycodes/cli login\` (agents on Kody MCP: ${cliBootstrapInstructions()}; CI: tokenCreate with \`org:execute\`, passed via --token or ${apiTokenEnvVar}).`);
100
- }
101
- /** Preferred interactive path for agents already on Kody MCP (ADR 0056). */
102
- export function cliBootstrapInstructions(lifetime = 'short') {
103
- return `From MCP, call \`cliCredentialBootstrap\` (MCP \`api\` / \`kody.cliCredentialBootstrap\`), then run \`npx @kodycodes/cli auth bootstrap --code <kody_bc_…> --lifetime ${lifetime}\``;
104
- }
105
- /**
106
- * Infer short|long from a stored token's absolute expiry. Tokens that can live
107
- * longer than the `short` absolute max are treated as `long` so
108
- * `insufficient_scope` hints remint with the same lifetime class.
109
- */
110
- export function inferCliTokenLifetimeAlias(stored, nowMs = Date.now()) {
111
- if (!stored)
112
- return 'short';
113
- const absoluteMs = Date.parse(stored.maxExpiresAt ?? '') || Date.parse(stored.expiresAt ?? '');
114
- if (!Number.isFinite(absoluteMs))
115
- return 'short';
116
- return absoluteMs - nowMs > shortAbsoluteLifetimeMs ? 'long' : 'short';
117
- }
118
- /** `--lifetime short|long` fragment for auth bootstrap hint commands. */
119
- export function cliBootstrapLifetimeFlags(lifetime = 'short') {
120
- return `--lifetime ${lifetime}`;
121
- }
122
- /** `{ lifetime: "short"|"long" }` for cliCredentialBootstrap hint calls. */
123
- export function cliBootstrapLifetimeMintFields(lifetime = 'short') {
124
- return { lifetime };
125
- }
126
- /** Lifetime hint from the stored API token for `apiUrl`, defaulting to short. */
127
- export function currentStoredTokenLifetimeAlias(apiUrl = defaultApiUrl, nowMs = Date.now(), loadApiToken = loadStoredApiToken) {
128
- return inferCliTokenLifetimeAlias(loadApiToken(apiUrl), nowMs);
129
- }
130
- /** Token-only Open API paths (search / whoami / cloud token execute) with no token. */
131
- export function missingApiTokenMessage(purpose) {
132
- return `${purpose} needs a scoped Kody API token. ${cliBootstrapInstructions()}, or ${apiTokenMintInstructions()}`;
133
- }
134
- /**
135
- * `execute --local` with neither env/`--token`, stored bootstrap token, nor
136
- * `kody login`. Prefer bootstrap (MCP) → login → tokenCreate (CI).
137
- */
138
- export function missingLocalExecuteAuthMessage(purpose = 'execute --local') {
139
- return `${purpose} needs auth. ${cliBootstrapInstructions()}; or run \`kody login\`; or for CI/headless, ${apiTokenMintInstructions()}`;
140
- }
141
- /** Cloud search / whoami / execute when the process has neither a session nor a token. */
142
- export function missingCliAuthMessage() {
143
- return `Not logged in, and no API token is set. ${cliBootstrapInstructions()}; or run \`kody login\` for browser OAuth (search, whoami, cloud execute, and login-backed \`execute --local\`); or for CI/headless, ${apiTokenMintInstructions()}`;
144
- }
145
- /** 401 when CapabilityProxy rejected a non-`kody_at_` bearer (typically CLI OAuth). */
146
- export function rejectedOauthBearerMessage() {
147
- return `Kody rejected the bearer from \`kody login\`: the Open API still accepts only scoped \`kody_at_…\` API tokens on CapabilityProxy / package-graph (not MCP OAuth). See ${localExecuteOauthPlatformIssueUrl}. Until that lands, ${apiTokenMintInstructions()}`;
148
- }
149
- export function readInsufficientScopeDetails(body) {
150
- const details = isRecord(body) && isRecord(body.error) && isRecord(body.error.details)
151
- ? body.error.details
152
- : null;
153
- if (!details)
154
- return { requiredScope: null, mintScopes: null, denial: null };
155
- const requiredScope = readNonEmptyString(details.required_scope) ??
156
- readNonEmptyString(details.required_permission) ??
157
- readStringList(details.required_scopes)?.join(', ') ??
158
- null;
159
- return {
160
- requiredScope,
161
- mintScopes: readStringList(details.mint_scopes),
162
- denial: readNonEmptyString(details.denial),
163
- };
164
- }
165
- /** `npx @kodycodes/cli auth bootstrap --lifetime short --scopes a,b` */
166
- export function cliBootstrapScopesCommand(scopes, lifetimeFlags = 'short') {
167
- const flags = lifetimeFlags === 'short' || lifetimeFlags === 'long'
168
- ? cliBootstrapLifetimeFlags(lifetimeFlags)
169
- : lifetimeFlags;
170
- return `npx @kodycodes/cli auth bootstrap ${flags} --scopes ${scopes.join(',')}`;
171
- }
172
- /** `cliCredentialBootstrap({ lifetime: "short", scopes: ["a", "b"] })` */
173
- export function cliBootstrapMintCall(scopes, lifetime = 'short') {
174
- const fieldsRecord = lifetime === 'short' || lifetime === 'long'
175
- ? cliBootstrapLifetimeMintFields(lifetime)
176
- : lifetime;
177
- const fields = [
178
- ...Object.entries(fieldsRecord).map(([key, value]) => `${key}: ${JSON.stringify(value)}`),
179
- `scopes: [${scopes.map((scope) => JSON.stringify(scope)).join(', ')}]`,
180
- ];
181
- return `cliCredentialBootstrap({ ${fields.join(', ')} })`;
182
- }
183
- export function insufficientScopeMessage(input) {
184
- const required = input.requiredScope ?? null;
185
- const lifetime = input.currentLifetime === 'long' || input.currentLifetime === 'short'
186
- ? input.currentLifetime
187
- : 'short';
188
- const lifetimeFlags = cliBootstrapLifetimeFlags(lifetime);
189
- const lifetimeMint = cliBootstrapLifetimeMintFields(lifetime);
190
- if (input.denial === 'missing_permission') {
191
- return `Kody returned insufficient_scope: your org role does not grant ${required ? `"${required}"` : 'the required permission'}. A new token cannot add it; an org Owner can grant it.`;
192
- }
193
- if (!required) {
194
- return `Kody returned insufficient_scope. Mint a token that includes the missing scope: run \`${cliBootstrapScopesCommand(['<scope>', '…'], lifetimeFlags)}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(['<scope>', '…'], lifetimeMint)}\` and run its cli_command. Scopes replace the defaults, so list every scope you need. For CI/headless, mint with tokenCreate and pass --token or set ${apiTokenEnvVar}.`;
195
- }
196
- const mintScopes = input.mintScopes && input.mintScopes.length > 0
197
- ? input.mintScopes
198
- : input.currentScopes && input.currentScopes.length > 0
199
- ? [...new Set([...input.currentScopes, ...required.split(/,\s*/)])].sort()
200
- : null;
201
- if (!mintScopes) {
202
- return `Kody returned insufficient_scope: this token is missing "${required}". Mint a token whose scopes include "${required}" plus the ones you already use (scopes replace the defaults): run \`${cliBootstrapScopesCommand(['<current scopes>', required], lifetimeFlags)}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(['<current scopes>', required], lifetimeMint)}\` and run its cli_command. For CI/headless, mint with tokenCreate including "${required}" and pass --token or set ${apiTokenEnvVar}.`;
203
- }
204
- return `Kody returned insufficient_scope: this token is missing "${required}". Mint one that includes it: run \`${cliBootstrapScopesCommand(mintScopes, lifetimeFlags)}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(mintScopes, lifetimeMint)}\` and run its cli_command. For CI/headless, mint with tokenCreate using those scopes and pass --token or set ${apiTokenEnvVar}.`;
205
- }
206
- function isRecord(value) {
207
- return value !== null && typeof value === 'object' && !Array.isArray(value);
208
- }
209
- function readNonEmptyString(value) {
210
- return typeof value === 'string' && value.trim() ? value.trim() : null;
211
- }
212
- function readStringList(value) {
213
- if (!Array.isArray(value))
214
- return null;
215
- const list = value
216
- .filter((item) => typeof item === 'string')
217
- .map((item) => item.trim())
218
- .filter(Boolean);
219
- return list.length > 0 ? list : null;
220
- }
221
- export function featureDisabledMessage() {
222
- return 'Kody returned feature_disabled: CapabilityProxy is not enabled for this Kody account (feature flag `local-execute`). `execute --local` and token-auth cloud execute both stop here; minting another token does not bypass the flag. Browser `kody login` can still run cloud execute over MCP.';
223
- }
224
- export function requireApiToken(values = {}, env = process.env, purpose = 'this command', options = {}) {
225
- const token = resolveScopedApiToken({
226
- tokenValues: values,
227
- env,
228
- ...options,
229
- });
230
- if (!token)
231
- throw new Error(missingApiTokenMessage(purpose));
232
- return token;
233
- }
234
- /** True when the user passed `--token` (not only the env var). */
235
- export function hasExplicitTokenFlag(values) {
236
- return typeof values.token === 'string' && values.token.trim().length > 0;
237
- }
238
- //# sourceMappingURL=api-token.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-token.js","sourceRoot":"","sources":["../src/api-token.ts"],"names":[],"mappings":"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"}