@kodycodes/cli 1.26.2 → 1.26.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/dist/auth-4FW6GCLG.js +26 -0
  2. package/dist/auth-4FW6GCLG.js.map +6 -0
  3. package/dist/bin.js +27 -3
  4. package/dist/bin.js.map +6 -1
  5. package/dist/chunk-46IJPEID.js +30 -0
  6. package/dist/chunk-46IJPEID.js.map +6 -0
  7. package/dist/chunk-4D6ORNXY.js +24404 -0
  8. package/dist/chunk-4D6ORNXY.js.map +6 -0
  9. package/dist/chunk-64IM6G4Z.js +341 -0
  10. package/dist/chunk-64IM6G4Z.js.map +6 -0
  11. package/dist/{package-local-runtime-source.js → chunk-64XN367G.js} +373 -52
  12. package/dist/chunk-64XN367G.js.map +6 -0
  13. package/dist/chunk-6XQP5SWX.js +26 -0
  14. package/dist/chunk-6XQP5SWX.js.map +6 -0
  15. package/dist/chunk-75RZUXQL.js +62 -0
  16. package/dist/chunk-75RZUXQL.js.map +6 -0
  17. package/dist/chunk-BISUL7CE.js +106 -0
  18. package/dist/chunk-BISUL7CE.js.map +6 -0
  19. package/dist/chunk-BPGY4IE7.js +57 -0
  20. package/dist/chunk-BPGY4IE7.js.map +6 -0
  21. package/dist/chunk-CASGRYOF.js +21 -0
  22. package/dist/chunk-CASGRYOF.js.map +6 -0
  23. package/dist/chunk-CWWHR4FH.js +19 -0
  24. package/dist/chunk-CWWHR4FH.js.map +6 -0
  25. package/dist/chunk-D55XPY3T.js +1382 -0
  26. package/dist/chunk-D55XPY3T.js.map +6 -0
  27. package/dist/chunk-EOCV74B2.js +948 -0
  28. package/dist/chunk-EOCV74B2.js.map +6 -0
  29. package/dist/chunk-FBVNFWR6.js +437 -0
  30. package/dist/chunk-FBVNFWR6.js.map +6 -0
  31. package/dist/chunk-G4YN6XP5.js +14 -0
  32. package/dist/chunk-G4YN6XP5.js.map +6 -0
  33. package/dist/chunk-G6LJWROP.js +18 -0
  34. package/dist/chunk-G6LJWROP.js.map +6 -0
  35. package/dist/chunk-IHP6PV6X.js +49 -0
  36. package/dist/chunk-IHP6PV6X.js.map +6 -0
  37. package/dist/chunk-JWEFKKAD.js +24 -0
  38. package/dist/chunk-JWEFKKAD.js.map +6 -0
  39. package/dist/chunk-LWNB26KO.js +147 -0
  40. package/dist/chunk-LWNB26KO.js.map +6 -0
  41. package/dist/chunk-OVGXPRSY.js +20 -0
  42. package/dist/chunk-OVGXPRSY.js.map +6 -0
  43. package/dist/chunk-PDWCKWQF.js +453 -0
  44. package/dist/chunk-PDWCKWQF.js.map +6 -0
  45. package/dist/chunk-QHBCP4OB.js +44 -0
  46. package/dist/chunk-QHBCP4OB.js.map +6 -0
  47. package/dist/chunk-R4IUV5P5.js +664 -0
  48. package/dist/chunk-R4IUV5P5.js.map +6 -0
  49. package/dist/chunk-RM34N3KI.js +525 -0
  50. package/dist/chunk-RM34N3KI.js.map +6 -0
  51. package/dist/chunk-RTWUNV76.js +309 -0
  52. package/dist/chunk-RTWUNV76.js.map +6 -0
  53. package/dist/chunk-SMURF26I.js +23 -0
  54. package/dist/chunk-SMURF26I.js.map +6 -0
  55. package/dist/chunk-SXHULGL4.js +426 -0
  56. package/dist/chunk-SXHULGL4.js.map +6 -0
  57. package/dist/chunk-TIL35OWA.js +1959 -0
  58. package/dist/chunk-TIL35OWA.js.map +6 -0
  59. package/dist/chunk-VQS5YSCI.js +54 -0
  60. package/dist/chunk-VQS5YSCI.js.map +6 -0
  61. package/dist/chunk-XDCOWU5R.js +696 -0
  62. package/dist/chunk-XDCOWU5R.js.map +6 -0
  63. package/dist/chunk-XOPPGRUP.js +605 -0
  64. package/dist/chunk-XOPPGRUP.js.map +6 -0
  65. package/dist/cli.js +74 -1500
  66. package/dist/cli.js.map +6 -1
  67. package/dist/dev-command-3LX234N6.js +4900 -0
  68. package/dist/dev-command-3LX234N6.js.map +6 -0
  69. package/dist/git-credential-FUE3JE3T.js +163 -0
  70. package/dist/git-credential-FUE3JE3T.js.map +6 -0
  71. package/dist/install-ZML2TCDG.js +10694 -0
  72. package/dist/install-ZML2TCDG.js.map +6 -0
  73. package/dist/local-execute-SZV6XN4T.js +368 -0
  74. package/dist/local-execute-SZV6XN4T.js.map +6 -0
  75. package/dist/local-package-run-2TMCAZZ2.js +23 -0
  76. package/dist/local-package-run-2TMCAZZ2.js.map +6 -0
  77. package/dist/mcp-G2AWTIXR.js +21 -0
  78. package/dist/mcp-G2AWTIXR.js.map +6 -0
  79. package/dist/mock-dep-resolve-TVABDNR7.js +52 -0
  80. package/dist/mock-dep-resolve-TVABDNR7.js.map +6 -0
  81. package/dist/mock-fetch-gateway-B5TFGGQS.js +34 -0
  82. package/dist/mock-fetch-gateway-B5TFGGQS.js.map +6 -0
  83. package/dist/mock-local-deps-5SZT3PWT.js +197 -0
  84. package/dist/mock-local-deps-5SZT3PWT.js.map +6 -0
  85. package/dist/mock-server-SV2IKC4I.js +21 -0
  86. package/dist/mock-server-SV2IKC4I.js.map +6 -0
  87. package/dist/open-api-client-DVVMLY7P.js +42 -0
  88. package/dist/open-api-client-DVVMLY7P.js.map +6 -0
  89. package/dist/org-X7B5BI4R.js +132 -0
  90. package/dist/org-X7B5BI4R.js.map +6 -0
  91. package/dist/package-manifest-QH2RU64C.js +14 -0
  92. package/dist/package-manifest-QH2RU64C.js.map +6 -0
  93. package/dist/remote-execute-QMQDVHOY.js +110 -0
  94. package/dist/remote-execute-QMQDVHOY.js.map +6 -0
  95. package/dist/setup-git-5KCUBYPB.js +88 -0
  96. package/dist/setup-git-5KCUBYPB.js.map +6 -0
  97. package/dist/skill-ENPATRIW.js +43 -0
  98. package/dist/skill-ENPATRIW.js.map +6 -0
  99. package/dist/store-WTMRH527.js +48 -0
  100. package/dist/store-WTMRH527.js.map +6 -0
  101. package/dist/structured-error-C65GQ53Z.js +13 -0
  102. package/dist/structured-error-C65GQ53Z.js.map +6 -0
  103. package/dist/target-3QHY7JT4.js +45 -0
  104. package/dist/target-3QHY7JT4.js.map +6 -0
  105. package/dist/webapi-NTVP4BO3.js +2482 -0
  106. package/dist/webapi-NTVP4BO3.js.map +6 -0
  107. package/package.json +8 -8
  108. package/dist/add-mcp-install.js +0 -59
  109. package/dist/add-mcp-install.js.map +0 -1
  110. package/dist/api-token-store.js +0 -120
  111. package/dist/api-token-store.js.map +0 -1
  112. package/dist/api-token.js +0 -238
  113. package/dist/api-token.js.map +0 -1
  114. package/dist/auth-bootstrap.js +0 -373
  115. package/dist/auth-bootstrap.js.map +0 -1
  116. package/dist/auth.js +0 -386
  117. package/dist/auth.js.map +0 -1
  118. package/dist/capability-proxy.js +0 -527
  119. package/dist/capability-proxy.js.map +0 -1
  120. package/dist/credential-call-map.js +0 -155
  121. package/dist/credential-call-map.js.map +0 -1
  122. package/dist/credential-client-runtime-source.js +0 -9
  123. package/dist/credential-client-runtime-source.js.map +0 -1
  124. package/dist/credentialed-fetch-scan.js +0 -98
  125. package/dist/credentialed-fetch-scan.js.map +0 -1
  126. package/dist/defaults.js +0 -34
  127. package/dist/defaults.js.map +0 -1
  128. package/dist/detect-running-hosts.js +0 -13
  129. package/dist/detect-running-hosts.js.map +0 -1
  130. package/dist/dev/dev-assets.js +0 -202
  131. package/dist/dev/dev-assets.js.map +0 -1
  132. package/dist/dev/dev-bundler.js +0 -65
  133. package/dist/dev/dev-bundler.js.map +0 -1
  134. package/dist/dev/dev-events.js +0 -94
  135. package/dist/dev/dev-events.js.map +0 -1
  136. package/dist/dev/dev-port.js +0 -80
  137. package/dist/dev/dev-port.js.map +0 -1
  138. package/dist/dev/dev-protocol.js +0 -14
  139. package/dist/dev/dev-protocol.js.map +0 -1
  140. package/dist/dev/dev-registry.js +0 -95
  141. package/dist/dev/dev-registry.js.map +0 -1
  142. package/dist/dev/dev-watcher.js +0 -162
  143. package/dist/dev/dev-watcher.js.map +0 -1
  144. package/dist/dev/error-page.js +0 -64
  145. package/dist/dev/error-page.js.map +0 -1
  146. package/dist/dev/live-reload.js +0 -151
  147. package/dist/dev/live-reload.js.map +0 -1
  148. package/dist/dev/prebuild.js +0 -102
  149. package/dist/dev/prebuild.js.map +0 -1
  150. package/dist/dev/process-reaper.js +0 -151
  151. package/dist/dev/process-reaper.js.map +0 -1
  152. package/dist/dev/stack-trace.js +0 -56
  153. package/dist/dev/stack-trace.js.map +0 -1
  154. package/dist/dev/workerd-process.js +0 -118
  155. package/dist/dev/workerd-process.js.map +0 -1
  156. package/dist/dev-command.js +0 -676
  157. package/dist/dev-command.js.map +0 -1
  158. package/dist/discover-login-identity.js +0 -77
  159. package/dist/discover-login-identity.js.map +0 -1
  160. package/dist/discover-org.js +0 -62
  161. package/dist/discover-org.js.map +0 -1
  162. package/dist/git-credential.js +0 -147
  163. package/dist/git-credential.js.map +0 -1
  164. package/dist/help.js +0 -333
  165. package/dist/help.js.map +0 -1
  166. package/dist/host-catalog.js +0 -427
  167. package/dist/host-catalog.js.map +0 -1
  168. package/dist/host-config.js +0 -80
  169. package/dist/host-config.js.map +0 -1
  170. package/dist/http-error-body.js +0 -35
  171. package/dist/http-error-body.js.map +0 -1
  172. package/dist/install-hosts.js +0 -328
  173. package/dist/install-hosts.js.map +0 -1
  174. package/dist/install.js +0 -120
  175. package/dist/install.js.map +0 -1
  176. package/dist/invoke-passthrough.js +0 -60
  177. package/dist/invoke-passthrough.js.map +0 -1
  178. package/dist/local-bundle.js +0 -200
  179. package/dist/local-bundle.js.map +0 -1
  180. package/dist/local-execute-auth.js +0 -53
  181. package/dist/local-execute-auth.js.map +0 -1
  182. package/dist/local-execute.js +0 -338
  183. package/dist/local-execute.js.map +0 -1
  184. package/dist/local-gateway-fetch-forward.js +0 -135
  185. package/dist/local-gateway-fetch-forward.js.map +0 -1
  186. package/dist/local-host-runtime-surface.js +0 -75
  187. package/dist/local-host-runtime-surface.js.map +0 -1
  188. package/dist/local-package-graph.js +0 -405
  189. package/dist/local-package-graph.js.map +0 -1
  190. package/dist/local-package-run.js +0 -307
  191. package/dist/local-package-run.js.map +0 -1
  192. package/dist/local-runtime-bridge.js +0 -132
  193. package/dist/local-runtime-bridge.js.map +0 -1
  194. package/dist/local-runtime-source.js +0 -541
  195. package/dist/local-runtime-source.js.map +0 -1
  196. package/dist/login-callback-assets.js +0 -10
  197. package/dist/login-callback-assets.js.map +0 -1
  198. package/dist/login-callback-page.js +0 -362
  199. package/dist/login-callback-page.js.map +0 -1
  200. package/dist/mcp.js +0 -134
  201. package/dist/mcp.js.map +0 -1
  202. package/dist/mock/ensure-msw.js +0 -215
  203. package/dist/mock/ensure-msw.js.map +0 -1
  204. package/dist/mock/install-mock-fetch-shim.js +0 -36
  205. package/dist/mock/install-mock-fetch-shim.js.map +0 -1
  206. package/dist/mock/load-package-mocks.js +0 -136
  207. package/dist/mock/load-package-mocks.js.map +0 -1
  208. package/dist/mock/mock-fetch-gateway.js +0 -343
  209. package/dist/mock/mock-fetch-gateway.js.map +0 -1
  210. package/dist/mock/mock-gateway-fetch-shim.js +0 -104
  211. package/dist/mock/mock-gateway-fetch-shim.js.map +0 -1
  212. package/dist/mock/mock-server.js +0 -499
  213. package/dist/mock/mock-server.js.map +0 -1
  214. package/dist/mock/mock-storage.js +0 -186
  215. package/dist/mock/mock-storage.js.map +0 -1
  216. package/dist/mock/mock-supported.js +0 -63
  217. package/dist/mock/mock-supported.js.map +0 -1
  218. package/dist/mock-dep-resolve.js +0 -47
  219. package/dist/mock-dep-resolve.js.map +0 -1
  220. package/dist/mock-local-deps.js +0 -207
  221. package/dist/mock-local-deps.js.map +0 -1
  222. package/dist/network-error.js +0 -11
  223. package/dist/network-error.js.map +0 -1
  224. package/dist/node-engine.js +0 -21
  225. package/dist/node-engine.js.map +0 -1
  226. package/dist/oauth-provider.js +0 -107
  227. package/dist/oauth-provider.js.map +0 -1
  228. package/dist/onboarding-prompt.js +0 -15
  229. package/dist/onboarding-prompt.js.map +0 -1
  230. package/dist/open-api-client.js +0 -432
  231. package/dist/open-api-client.js.map +0 -1
  232. package/dist/open-url.js +0 -21
  233. package/dist/open-url.js.map +0 -1
  234. package/dist/org-resolve.js +0 -16
  235. package/dist/org-resolve.js.map +0 -1
  236. package/dist/org-slug.js +0 -11
  237. package/dist/org-slug.js.map +0 -1
  238. package/dist/org.js +0 -100
  239. package/dist/org.js.map +0 -1
  240. package/dist/package-app-dev.js +0 -922
  241. package/dist/package-app-dev.js.map +0 -1
  242. package/dist/package-collaborators.js +0 -179
  243. package/dist/package-collaborators.js.map +0 -1
  244. package/dist/package-info.js +0 -19
  245. package/dist/package-info.js.map +0 -1
  246. package/dist/package-local-runtime-source.js.map +0 -1
  247. package/dist/package-manifest.js +0 -364
  248. package/dist/package-manifest.js.map +0 -1
  249. package/dist/process-info.js +0 -14
  250. package/dist/process-info.js.map +0 -1
  251. package/dist/redact.js +0 -16
  252. package/dist/redact.js.map +0 -1
  253. package/dist/remote-execute.js +0 -108
  254. package/dist/remote-execute.js.map +0 -1
  255. package/dist/setup-git.js +0 -676
  256. package/dist/setup-git.js.map +0 -1
  257. package/dist/skill.js +0 -35
  258. package/dist/skill.js.map +0 -1
  259. package/dist/store.js +0 -597
  260. package/dist/store.js.map +0 -1
  261. package/dist/structured-error.js +0 -57
  262. package/dist/structured-error.js.map +0 -1
  263. package/dist/target.js +0 -52
  264. package/dist/target.js.map +0 -1
  265. package/dist/tool-result.js +0 -19
  266. package/dist/tool-result.js.map +0 -1
  267. package/dist/which.js +0 -22
  268. package/dist/which.js.map +0 -1
  269. package/dist/workerd-binary.js +0 -98
  270. package/dist/workerd-binary.js.map +0 -1
@@ -1,328 +0,0 @@
1
- import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
- import { spawn } from 'node:child_process';
3
- import { addMcpAgentByHostId, addMcpUsesProjectScope, defaultUpsertServer, isAddMcpHostId, kodyRemoteConfig, } from './add-mcp-install.js';
4
- import { buildCursorInstallUrl, buildGooseInstallUrl, buildVsCodeInstallUrl, hostById, hostConfigPath, } from './host-catalog.js';
5
- import { writeMergedConfig } from './host-config.js';
6
- import { openUrl } from './open-url.js';
7
- import { which as whichOnPath } from './which.js';
8
- const oauthNote = 'Approve Kody in the browser when the client starts OAuth.';
9
- async function defaultReadFile(path) {
10
- try {
11
- return await readFile(path, 'utf8');
12
- }
13
- catch {
14
- return null;
15
- }
16
- }
17
- async function defaultRunCommand(command, args) {
18
- return await new Promise((resolve) => {
19
- const child = spawn(command, args, { stdio: 'ignore' });
20
- child.on('error', () => resolve(false));
21
- child.on('exit', (code) => resolve(code === 0));
22
- });
23
- }
24
- async function defaultOpenApp(name) {
25
- if (process.platform === 'darwin')
26
- return defaultRunCommand('open', ['-a', name]);
27
- if (process.platform === 'win32')
28
- return defaultRunCommand('cmd', ['/c', 'start', '', name]);
29
- return defaultRunCommand(name, []);
30
- }
31
- function runtimeMethods(runtime) {
32
- return {
33
- which: runtime.which ?? whichOnPath,
34
- openUrl: runtime.openUrl ?? openUrl,
35
- openApp: runtime.openApp ?? defaultOpenApp,
36
- runCommand: runtime.runCommand ?? defaultRunCommand,
37
- readFile: runtime.readFile ?? defaultReadFile,
38
- writeFile: runtime.writeFile ?? ((path, body) => writeFile(path, body, 'utf8')),
39
- mkdir: runtime.mkdir ?? ((path) => mkdir(path, { recursive: true }).then(() => undefined)),
40
- upsertServer: runtime.upsertServer ?? defaultUpsertServer,
41
- };
42
- }
43
- async function writeLeftoverFile(id, mcpUrl, runtime) {
44
- const path = hostConfigPath({
45
- id,
46
- home: runtime.home,
47
- cwd: runtime.cwd,
48
- project: runtime.project,
49
- platform: runtime.platform,
50
- });
51
- if (!path)
52
- return null;
53
- const io = runtimeMethods(runtime);
54
- return await writeMergedConfig({
55
- path,
56
- id,
57
- mcpUrl,
58
- readFile: io.readFile,
59
- writeFile: io.writeFile,
60
- mkdir: io.mkdir,
61
- });
62
- }
63
- function writeAddMcpHost(id, mcpUrl, runtime) {
64
- const result = runtimeMethods(runtime).upsertServer(addMcpAgentByHostId[id], 'kody', kodyRemoteConfig(mcpUrl), {
65
- local: addMcpUsesProjectScope(id, runtime.project),
66
- cwd: runtime.cwd,
67
- });
68
- if (!result.success) {
69
- return { changed: false, error: result.error ?? `add-mcp could not configure ${id}.` };
70
- }
71
- return { path: result.path, changed: true };
72
- }
73
- async function tryCommand(runtime, command, args) {
74
- const resolved = runtimeMethods(runtime).which(command);
75
- const line = `${command} ${args.join(' ')}`;
76
- if (!resolved)
77
- return { ran: false, command: line };
78
- const ok = await runtimeMethods(runtime).runCommand(resolved, args);
79
- return { ran: ok, command: line };
80
- }
81
- export async function applyHost(input) {
82
- const host = hostById(input.id);
83
- const io = runtimeMethods(input.runtime);
84
- switch (input.id) {
85
- case 'claude-desktop': {
86
- const opened = await io.openApp('Claude');
87
- return {
88
- id: input.id,
89
- label: host.label,
90
- status: 'manual',
91
- opened: opened ? 'Claude' : undefined,
92
- instructions: [
93
- 'Open Settings → Connectors and add a custom connector with this MCP URL.',
94
- 'Do not put the remote URL in claude_desktop_config.json.',
95
- 'After connecting, start a new chat and ask Claude to list Kody tools.',
96
- oauthNote,
97
- ],
98
- };
99
- }
100
- case 'jetbrains':
101
- return {
102
- id: input.id,
103
- label: host.label,
104
- status: 'manual',
105
- instructions: [
106
- 'Open Settings → Tools → AI Assistant → MCP and add a remote HTTP server named kody.',
107
- oauthNote,
108
- ],
109
- };
110
- case 'claude-code': {
111
- const added = await tryCommand(input.runtime, 'claude', [
112
- 'mcp',
113
- 'add',
114
- '--transport',
115
- 'http',
116
- '-s',
117
- input.runtime.project ? 'project' : 'user',
118
- 'kody',
119
- input.mcpUrl,
120
- ]);
121
- if (added.ran) {
122
- return {
123
- id: input.id,
124
- label: host.label,
125
- status: 'command',
126
- command: added.command,
127
- instructions: [oauthNote],
128
- };
129
- }
130
- return addMcpResult(input, [
131
- `Or run: claude mcp add --transport http -s user kody ${input.mcpUrl}`,
132
- oauthNote,
133
- ]);
134
- }
135
- case 'copilot-cli': {
136
- const added = await tryCommand(input.runtime, 'copilot', [
137
- 'mcp',
138
- 'add',
139
- '--transport',
140
- 'http',
141
- 'kody',
142
- input.mcpUrl,
143
- ]);
144
- if (added.ran) {
145
- return {
146
- id: input.id,
147
- label: host.label,
148
- status: 'command',
149
- command: added.command,
150
- instructions: [oauthNote],
151
- };
152
- }
153
- return addMcpResult(input, [
154
- `Or run: copilot mcp add --transport http kody ${input.mcpUrl}`,
155
- oauthNote,
156
- ]);
157
- }
158
- case 'gemini-cli': {
159
- const added = await tryCommand(input.runtime, 'gemini', [
160
- 'mcp',
161
- 'add',
162
- '--transport',
163
- 'http',
164
- '--scope',
165
- input.runtime.project ? 'project' : 'user',
166
- 'kody',
167
- input.mcpUrl,
168
- ]);
169
- if (added.ran) {
170
- return {
171
- id: input.id,
172
- label: host.label,
173
- status: 'command',
174
- command: added.command,
175
- instructions: [oauthNote],
176
- };
177
- }
178
- return addMcpResult(input, [
179
- `Or run: gemini mcp add --transport http --scope user kody ${input.mcpUrl}`,
180
- oauthNote,
181
- ]);
182
- }
183
- case 'cursor': {
184
- const written = writeMappedHost(input);
185
- const url = buildCursorInstallUrl(input.mcpUrl);
186
- const opened = written.status === 'wrote' ? await io.openUrl(url) : false;
187
- return {
188
- ...written,
189
- opened: opened ? url : undefined,
190
- instructions: [
191
- 'Reload MCP servers in Cursor if the new server does not appear.',
192
- oauthNote,
193
- ],
194
- };
195
- }
196
- case 'vscode': {
197
- const written = writeMappedHost(input);
198
- const url = buildVsCodeInstallUrl(input.mcpUrl);
199
- const opened = written.status === 'wrote' ? await io.openUrl(url) : false;
200
- return {
201
- ...written,
202
- opened: opened ? url : undefined,
203
- instructions: [
204
- 'Use Agent mode in Copilot Chat after the server is added.',
205
- oauthNote,
206
- ],
207
- };
208
- }
209
- case 'vscode-insiders': {
210
- const written = await writeLeftoverFile(input.id, input.mcpUrl, input.runtime);
211
- const url = buildVsCodeInstallUrl(input.mcpUrl, 'vscode-insiders');
212
- const opened = written?.changed ? await io.openUrl(url) : false;
213
- return leftoverResult(host.label, input.id, written, [
214
- 'Use Agent mode in Copilot Chat after the server is added.',
215
- oauthNote,
216
- ], opened ? url : undefined);
217
- }
218
- case 'goose': {
219
- const written = writeMappedHost(input);
220
- const url = buildGooseInstallUrl(input.mcpUrl);
221
- const opened = written.status === 'wrote' ? await io.openUrl(url) : false;
222
- return {
223
- ...written,
224
- opened: opened ? url : undefined,
225
- instructions: ['Restart Goose if the extension does not appear.', oauthNote],
226
- };
227
- }
228
- case 'codex': {
229
- const written = writeMappedHost(input);
230
- if (written.status === 'wrote') {
231
- await tryCommand(input.runtime, 'codex', ['mcp', 'login', 'kody']);
232
- }
233
- return {
234
- ...written,
235
- instructions: ['If OAuth does not start, run: codex mcp login kody', oauthNote],
236
- };
237
- }
238
- case 'opencode': {
239
- const written = writeMappedHost(input);
240
- if (written.status === 'wrote') {
241
- await tryCommand(input.runtime, 'opencode', ['mcp', 'auth', 'kody']);
242
- }
243
- return {
244
- ...written,
245
- instructions: ['If OAuth does not start, run: opencode mcp auth kody', oauthNote],
246
- };
247
- }
248
- case 'windsurf':
249
- case 'zed':
250
- case 'antigravity':
251
- case 'cline':
252
- case 'cline-cli':
253
- case 'fx':
254
- case 'grok-build':
255
- case 'kilo-code':
256
- case 'kimi-code':
257
- case 'kiro-cli':
258
- case 'mastracode':
259
- case 'mcporter':
260
- case 'pi':
261
- return addMcpResult(input, [
262
- `Restart ${host.label} if the new server does not appear.`,
263
- oauthNote,
264
- ]);
265
- case 'qwen-code':
266
- case 'amazon-q':
267
- case 'visual-studio': {
268
- const written = await writeLeftoverFile(input.id, input.mcpUrl, input.runtime);
269
- return leftoverResult(host.label, input.id, written, [
270
- `Restart ${host.label} if the new server does not appear.`,
271
- oauthNote,
272
- ]);
273
- }
274
- default: {
275
- const exhaustive = input.id;
276
- throw new Error(`Unhandled host: ${String(exhaustive)}`);
277
- }
278
- }
279
- }
280
- function writeMappedHost(input) {
281
- const host = hostById(input.id);
282
- if (!isAddMcpHostId(input.id)) {
283
- return {
284
- id: input.id,
285
- label: host.label,
286
- status: 'manual',
287
- instructions: [`${host.label} has no add-mcp writer.`],
288
- };
289
- }
290
- const written = writeAddMcpHost(input.id, input.mcpUrl, input.runtime);
291
- if (written.error) {
292
- return {
293
- id: input.id,
294
- label: host.label,
295
- status: 'manual',
296
- instructions: [written.error, oauthNote],
297
- };
298
- }
299
- return {
300
- id: input.id,
301
- label: host.label,
302
- status: written.changed ? 'wrote' : 'unchanged',
303
- path: written.path,
304
- instructions: [],
305
- };
306
- }
307
- function addMcpResult(input, instructions) {
308
- return { ...writeMappedHost(input), instructions };
309
- }
310
- function leftoverResult(label, id, written, instructions, opened) {
311
- if (!written) {
312
- return {
313
- id,
314
- label,
315
- status: 'manual',
316
- instructions: [`${label} has no automatic config path for this scope.`, ...instructions],
317
- };
318
- }
319
- return {
320
- id,
321
- label,
322
- status: written.changed ? 'wrote' : 'unchanged',
323
- path: written.path,
324
- opened,
325
- instructions,
326
- };
327
- }
328
- //# sourceMappingURL=install-hosts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install-hosts.js","sourceRoot":"","sources":["../src/install-hosts.ts"],"names":[],"mappings":"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"}
package/dist/install.js DELETED
@@ -1,120 +0,0 @@
1
- import { homedir } from 'node:os';
2
- import checkbox from '@inquirer/checkbox';
3
- import { detectRunningHosts, listRunningProcesses } from './detect-running-hosts.js';
4
- import { hostById, parseHostIds } from './host-catalog.js';
5
- import { applyHost } from './install-hosts.js';
6
- import { buildOnboardingContinuationPrompt, webClientsOnboardingNote, } from './onboarding-prompt.js';
7
- async function defaultChooseHosts(hosts) {
8
- return await checkbox({
9
- message: 'Configure Kody in these running agents',
10
- choices: hosts.map((host) => ({
11
- name: host.label,
12
- value: host.id,
13
- checked: true,
14
- })),
15
- required: false,
16
- });
17
- }
18
- export async function runInstall(options, io = {}) {
19
- const write = io.stdout ?? ((text) => process.stdout.write(text));
20
- const mcpUrl = options.mcpUrl;
21
- const home = io.home ?? homedir();
22
- const cwd = io.cwd ?? process.cwd();
23
- const isTTY = io.isTTY ?? Boolean(process.stdin.isTTY);
24
- const listProcesses = io.listProcesses ?? listRunningProcesses;
25
- const detected = detectRunningHosts(await listProcesses());
26
- const requested = options.clients ? parseHostIds(options.clients) : null;
27
- let selected;
28
- if (requested) {
29
- selected = requested;
30
- }
31
- else if (detected.length === 0) {
32
- write(noRunningAgentsMessage(mcpUrl));
33
- return { code: 1, results: [] };
34
- }
35
- else if (options.yes || (!isTTY && detected.length === 1)) {
36
- selected = detected.map((host) => host.id);
37
- }
38
- else if (!isTTY && detected.length > 1) {
39
- write([
40
- 'Multiple local agents are running. Re-run with --yes or --clients <ids>.',
41
- `Detected: ${detected.map((host) => host.id).join(', ')}`,
42
- '',
43
- ].join('\n'));
44
- return { code: 1, results: [] };
45
- }
46
- else {
47
- const choose = io.chooseHosts ?? defaultChooseHosts;
48
- selected = await choose(detected.map((host) => ({ id: host.id, label: host.label })));
49
- if (selected.length === 0) {
50
- write(`No clients selected.\n${webClientsOnboardingNote(mcpUrl)}\n`);
51
- return { code: 1, results: [] };
52
- }
53
- }
54
- const runtime = {
55
- home,
56
- cwd,
57
- project: options.project === true,
58
- ...io.runtime,
59
- };
60
- const results = [];
61
- for (const id of selected) {
62
- results.push(await applyHost({ id, mcpUrl, runtime }));
63
- }
64
- if (options.json) {
65
- write(`${JSON.stringify({ mcpUrl, results }, null, 2)}\n`);
66
- }
67
- else {
68
- write(formatInstallReport({ mcpUrl, results }));
69
- }
70
- return { code: 0, results };
71
- }
72
- export function noRunningAgentsMessage(mcpUrl) {
73
- return [
74
- 'No local MCP agents are running.',
75
- 'Start Cursor, Claude Desktop, VS Code, Goose, or another local client, then run kody install again.',
76
- 'Or pass --clients cursor,vscode to configure a client that is not running.',
77
- webClientsOnboardingNote(mcpUrl),
78
- '',
79
- ].join('\n');
80
- }
81
- export function formatInstallReport(input) {
82
- const lines = [];
83
- for (const result of input.results) {
84
- const host = hostById(result.id);
85
- const headline = statusHeadline(result);
86
- lines.push(`${host.label}: ${headline}`);
87
- if (result.path)
88
- lines.push(` ${result.path}`);
89
- if (result.command)
90
- lines.push(` ${result.command}`);
91
- for (const instruction of result.instructions) {
92
- lines.push(` ${instruction}`);
93
- }
94
- lines.push('');
95
- }
96
- lines.push('Paste this into your agent to continue onboarding:');
97
- lines.push('');
98
- lines.push(buildOnboardingContinuationPrompt());
99
- lines.push('');
100
- lines.push(webClientsOnboardingNote(input.mcpUrl));
101
- lines.push('');
102
- return lines.join('\n');
103
- }
104
- function statusHeadline(result) {
105
- switch (result.status) {
106
- case 'wrote':
107
- return 'configured';
108
- case 'unchanged':
109
- return 'already configured';
110
- case 'command':
111
- return 'added via CLI';
112
- case 'manual':
113
- return 'needs a manual step';
114
- default: {
115
- const exhaustive = result.status;
116
- return exhaustive;
117
- }
118
- }
119
- }
120
- //# sourceMappingURL=install.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
@@ -1,60 +0,0 @@
1
- /**
2
- * Client-side mint of the same thin passthrough the MCP `execute.invoke`
3
- * shortcut writes, so token-authenticated cloud execute (CapabilityProxy →
4
- * `kody.execute`) can run `--invoke` without the MCP tool.
5
- */
6
- const invokeLocalName = 'action';
7
- export function parseExecuteInvokeSpecifier(raw) {
8
- const trimmed = raw.trim();
9
- if (!trimmed) {
10
- throw new Error('Unsupported execute invoke specifier. Use a kody:@scope/package/export (or @scope/package#export) package import, not a URL.');
11
- }
12
- if (/:\/\//.test(trimmed) && !trimmed.startsWith('kody:@')) {
13
- throw new Error('Unsupported execute invoke specifier. Use a kody:@scope/package/export (or @scope/package#export) package import, not a URL.');
14
- }
15
- let value = trimmed;
16
- const hashIndex = value.indexOf('#');
17
- if (hashIndex >= 0) {
18
- const before = value.slice(0, hashIndex).trim();
19
- const after = value
20
- .slice(hashIndex + 1)
21
- .trim()
22
- .replace(/^\.\//, '');
23
- if (!before || value.includes('#', hashIndex + 1)) {
24
- throw new Error('Unsupported execute invoke specifier. Use a kody:@scope/package/export (or @scope/package#export) package import, not a URL.');
25
- }
26
- value = after ? `${before}/${after}` : before;
27
- }
28
- if (value.startsWith('@')) {
29
- value = `kody:${value}`;
30
- }
31
- if (!value.startsWith('kody:@')) {
32
- throw new Error('Unsupported execute invoke specifier. Use a kody:@scope/package/export (or @scope/package#export) package import, not a URL.');
33
- }
34
- return value;
35
- }
36
- export function buildExecuteInvokePassthroughSource(specifier) {
37
- return `import ${invokeLocalName} from ${JSON.stringify(specifier)}
38
-
39
- export default async function main(params) {
40
- return await ${invokeLocalName}(params)
41
- }`;
42
- }
43
- export function resolveExecuteInvokeCode(invoke) {
44
- return buildExecuteInvokePassthroughSource(parseExecuteInvokeSpecifier(invoke));
45
- }
46
- /**
47
- * True for published-package invoke forms (`kody:@scope/pkg/export`,
48
- * `@scope/pkg#export`). Local package.json#exports keys (`./greet`) are false
49
- * so `--invoke` from a package directory can route correctly.
50
- */
51
- export function isPublishedPackageInvokeSpecifier(raw) {
52
- try {
53
- parseExecuteInvokeSpecifier(raw);
54
- return true;
55
- }
56
- catch {
57
- return false;
58
- }
59
- }
60
- //# sourceMappingURL=invoke-passthrough.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invoke-passthrough.js","sourceRoot":"","sources":["../src/invoke-passthrough.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,eAAe,GAAG,QAAQ,CAAA;AAEhC,MAAM,UAAU,2BAA2B,CAAC,GAAW;IACtD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACd,8HAA8H,CAC9H,CAAA;IACF,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CACd,8HAA8H,CAC9H,CAAA;IACF,CAAC;IAED,IAAI,KAAK,GAAG,OAAO,CAAA;IACnB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAA;QAC/C,MAAM,KAAK,GAAG,KAAK;aACjB,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;aACpB,IAAI,EAAE;aACN,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QACtB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACd,8HAA8H,CAC9H,CAAA;QACF,CAAC;QACD,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IAC9C,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,GAAG,QAAQ,KAAK,EAAE,CAAA;IACxB,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACd,8HAA8H,CAC9H,CAAA;IACF,CAAC;IAED,OAAO,KAAK,CAAA;AACb,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,SAAiB;IACpE,OAAO,UAAU,eAAe,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;gBAGnD,eAAe;EAC7B,CAAA;AACF,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACtD,OAAO,mCAAmC,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAA;AAChF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iCAAiC,CAAC,GAAW;IAC5D,IAAI,CAAC;QACJ,2BAA2B,CAAC,GAAG,CAAC,CAAA;QAChC,OAAO,IAAI,CAAA;IACZ,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAA;IACb,CAAC;AACF,CAAC"}