@kodycodes/cli 1.26.1 → 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 (271) 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/dev-watcher.d.ts +5 -1
  68. package/dist/dev-command-3LX234N6.js +4900 -0
  69. package/dist/dev-command-3LX234N6.js.map +6 -0
  70. package/dist/git-credential-FUE3JE3T.js +163 -0
  71. package/dist/git-credential-FUE3JE3T.js.map +6 -0
  72. package/dist/install-ZML2TCDG.js +10694 -0
  73. package/dist/install-ZML2TCDG.js.map +6 -0
  74. package/dist/local-execute-SZV6XN4T.js +368 -0
  75. package/dist/local-execute-SZV6XN4T.js.map +6 -0
  76. package/dist/local-package-run-2TMCAZZ2.js +23 -0
  77. package/dist/local-package-run-2TMCAZZ2.js.map +6 -0
  78. package/dist/mcp-G2AWTIXR.js +21 -0
  79. package/dist/mcp-G2AWTIXR.js.map +6 -0
  80. package/dist/mock-dep-resolve-TVABDNR7.js +52 -0
  81. package/dist/mock-dep-resolve-TVABDNR7.js.map +6 -0
  82. package/dist/mock-fetch-gateway-B5TFGGQS.js +34 -0
  83. package/dist/mock-fetch-gateway-B5TFGGQS.js.map +6 -0
  84. package/dist/mock-local-deps-5SZT3PWT.js +197 -0
  85. package/dist/mock-local-deps-5SZT3PWT.js.map +6 -0
  86. package/dist/mock-server-SV2IKC4I.js +21 -0
  87. package/dist/mock-server-SV2IKC4I.js.map +6 -0
  88. package/dist/open-api-client-DVVMLY7P.js +42 -0
  89. package/dist/open-api-client-DVVMLY7P.js.map +6 -0
  90. package/dist/org-X7B5BI4R.js +132 -0
  91. package/dist/org-X7B5BI4R.js.map +6 -0
  92. package/dist/package-manifest-QH2RU64C.js +14 -0
  93. package/dist/package-manifest-QH2RU64C.js.map +6 -0
  94. package/dist/remote-execute-QMQDVHOY.js +110 -0
  95. package/dist/remote-execute-QMQDVHOY.js.map +6 -0
  96. package/dist/setup-git-5KCUBYPB.js +88 -0
  97. package/dist/setup-git-5KCUBYPB.js.map +6 -0
  98. package/dist/skill-ENPATRIW.js +43 -0
  99. package/dist/skill-ENPATRIW.js.map +6 -0
  100. package/dist/store-WTMRH527.js +48 -0
  101. package/dist/store-WTMRH527.js.map +6 -0
  102. package/dist/structured-error-C65GQ53Z.js +13 -0
  103. package/dist/structured-error-C65GQ53Z.js.map +6 -0
  104. package/dist/target-3QHY7JT4.js +45 -0
  105. package/dist/target-3QHY7JT4.js.map +6 -0
  106. package/dist/webapi-NTVP4BO3.js +2482 -0
  107. package/dist/webapi-NTVP4BO3.js.map +6 -0
  108. package/package.json +8 -8
  109. package/dist/add-mcp-install.js +0 -59
  110. package/dist/add-mcp-install.js.map +0 -1
  111. package/dist/api-token-store.js +0 -120
  112. package/dist/api-token-store.js.map +0 -1
  113. package/dist/api-token.js +0 -238
  114. package/dist/api-token.js.map +0 -1
  115. package/dist/auth-bootstrap.js +0 -373
  116. package/dist/auth-bootstrap.js.map +0 -1
  117. package/dist/auth.js +0 -386
  118. package/dist/auth.js.map +0 -1
  119. package/dist/capability-proxy.js +0 -527
  120. package/dist/capability-proxy.js.map +0 -1
  121. package/dist/credential-call-map.js +0 -155
  122. package/dist/credential-call-map.js.map +0 -1
  123. package/dist/credential-client-runtime-source.js +0 -9
  124. package/dist/credential-client-runtime-source.js.map +0 -1
  125. package/dist/credentialed-fetch-scan.js +0 -98
  126. package/dist/credentialed-fetch-scan.js.map +0 -1
  127. package/dist/defaults.js +0 -34
  128. package/dist/defaults.js.map +0 -1
  129. package/dist/detect-running-hosts.js +0 -13
  130. package/dist/detect-running-hosts.js.map +0 -1
  131. package/dist/dev/dev-assets.js +0 -202
  132. package/dist/dev/dev-assets.js.map +0 -1
  133. package/dist/dev/dev-bundler.js +0 -65
  134. package/dist/dev/dev-bundler.js.map +0 -1
  135. package/dist/dev/dev-events.js +0 -94
  136. package/dist/dev/dev-events.js.map +0 -1
  137. package/dist/dev/dev-port.js +0 -80
  138. package/dist/dev/dev-port.js.map +0 -1
  139. package/dist/dev/dev-protocol.js +0 -14
  140. package/dist/dev/dev-protocol.js.map +0 -1
  141. package/dist/dev/dev-registry.js +0 -95
  142. package/dist/dev/dev-registry.js.map +0 -1
  143. package/dist/dev/dev-watcher.js +0 -156
  144. package/dist/dev/dev-watcher.js.map +0 -1
  145. package/dist/dev/error-page.js +0 -64
  146. package/dist/dev/error-page.js.map +0 -1
  147. package/dist/dev/live-reload.js +0 -148
  148. package/dist/dev/live-reload.js.map +0 -1
  149. package/dist/dev/prebuild.js +0 -102
  150. package/dist/dev/prebuild.js.map +0 -1
  151. package/dist/dev/process-reaper.js +0 -151
  152. package/dist/dev/process-reaper.js.map +0 -1
  153. package/dist/dev/stack-trace.js +0 -56
  154. package/dist/dev/stack-trace.js.map +0 -1
  155. package/dist/dev/workerd-process.js +0 -118
  156. package/dist/dev/workerd-process.js.map +0 -1
  157. package/dist/dev-command.js +0 -672
  158. package/dist/dev-command.js.map +0 -1
  159. package/dist/discover-login-identity.js +0 -77
  160. package/dist/discover-login-identity.js.map +0 -1
  161. package/dist/discover-org.js +0 -62
  162. package/dist/discover-org.js.map +0 -1
  163. package/dist/git-credential.js +0 -147
  164. package/dist/git-credential.js.map +0 -1
  165. package/dist/help.js +0 -333
  166. package/dist/help.js.map +0 -1
  167. package/dist/host-catalog.js +0 -427
  168. package/dist/host-catalog.js.map +0 -1
  169. package/dist/host-config.js +0 -80
  170. package/dist/host-config.js.map +0 -1
  171. package/dist/http-error-body.js +0 -35
  172. package/dist/http-error-body.js.map +0 -1
  173. package/dist/install-hosts.js +0 -328
  174. package/dist/install-hosts.js.map +0 -1
  175. package/dist/install.js +0 -120
  176. package/dist/install.js.map +0 -1
  177. package/dist/invoke-passthrough.js +0 -60
  178. package/dist/invoke-passthrough.js.map +0 -1
  179. package/dist/local-bundle.js +0 -200
  180. package/dist/local-bundle.js.map +0 -1
  181. package/dist/local-execute-auth.js +0 -53
  182. package/dist/local-execute-auth.js.map +0 -1
  183. package/dist/local-execute.js +0 -338
  184. package/dist/local-execute.js.map +0 -1
  185. package/dist/local-gateway-fetch-forward.js +0 -135
  186. package/dist/local-gateway-fetch-forward.js.map +0 -1
  187. package/dist/local-host-runtime-surface.js +0 -75
  188. package/dist/local-host-runtime-surface.js.map +0 -1
  189. package/dist/local-package-graph.js +0 -405
  190. package/dist/local-package-graph.js.map +0 -1
  191. package/dist/local-package-run.js +0 -307
  192. package/dist/local-package-run.js.map +0 -1
  193. package/dist/local-runtime-bridge.js +0 -132
  194. package/dist/local-runtime-bridge.js.map +0 -1
  195. package/dist/local-runtime-source.js +0 -541
  196. package/dist/local-runtime-source.js.map +0 -1
  197. package/dist/login-callback-assets.js +0 -10
  198. package/dist/login-callback-assets.js.map +0 -1
  199. package/dist/login-callback-page.js +0 -362
  200. package/dist/login-callback-page.js.map +0 -1
  201. package/dist/mcp.js +0 -134
  202. package/dist/mcp.js.map +0 -1
  203. package/dist/mock/ensure-msw.js +0 -215
  204. package/dist/mock/ensure-msw.js.map +0 -1
  205. package/dist/mock/install-mock-fetch-shim.js +0 -36
  206. package/dist/mock/install-mock-fetch-shim.js.map +0 -1
  207. package/dist/mock/load-package-mocks.js +0 -136
  208. package/dist/mock/load-package-mocks.js.map +0 -1
  209. package/dist/mock/mock-fetch-gateway.js +0 -343
  210. package/dist/mock/mock-fetch-gateway.js.map +0 -1
  211. package/dist/mock/mock-gateway-fetch-shim.js +0 -104
  212. package/dist/mock/mock-gateway-fetch-shim.js.map +0 -1
  213. package/dist/mock/mock-server.js +0 -499
  214. package/dist/mock/mock-server.js.map +0 -1
  215. package/dist/mock/mock-storage.js +0 -186
  216. package/dist/mock/mock-storage.js.map +0 -1
  217. package/dist/mock/mock-supported.js +0 -63
  218. package/dist/mock/mock-supported.js.map +0 -1
  219. package/dist/mock-dep-resolve.js +0 -47
  220. package/dist/mock-dep-resolve.js.map +0 -1
  221. package/dist/mock-local-deps.js +0 -207
  222. package/dist/mock-local-deps.js.map +0 -1
  223. package/dist/network-error.js +0 -11
  224. package/dist/network-error.js.map +0 -1
  225. package/dist/node-engine.js +0 -21
  226. package/dist/node-engine.js.map +0 -1
  227. package/dist/oauth-provider.js +0 -107
  228. package/dist/oauth-provider.js.map +0 -1
  229. package/dist/onboarding-prompt.js +0 -15
  230. package/dist/onboarding-prompt.js.map +0 -1
  231. package/dist/open-api-client.js +0 -432
  232. package/dist/open-api-client.js.map +0 -1
  233. package/dist/open-url.js +0 -21
  234. package/dist/open-url.js.map +0 -1
  235. package/dist/org-resolve.js +0 -16
  236. package/dist/org-resolve.js.map +0 -1
  237. package/dist/org-slug.js +0 -11
  238. package/dist/org-slug.js.map +0 -1
  239. package/dist/org.js +0 -100
  240. package/dist/org.js.map +0 -1
  241. package/dist/package-app-dev.js +0 -905
  242. package/dist/package-app-dev.js.map +0 -1
  243. package/dist/package-collaborators.js +0 -179
  244. package/dist/package-collaborators.js.map +0 -1
  245. package/dist/package-info.js +0 -19
  246. package/dist/package-info.js.map +0 -1
  247. package/dist/package-local-runtime-source.js.map +0 -1
  248. package/dist/package-manifest.js +0 -364
  249. package/dist/package-manifest.js.map +0 -1
  250. package/dist/process-info.js +0 -14
  251. package/dist/process-info.js.map +0 -1
  252. package/dist/redact.js +0 -16
  253. package/dist/redact.js.map +0 -1
  254. package/dist/remote-execute.js +0 -108
  255. package/dist/remote-execute.js.map +0 -1
  256. package/dist/setup-git.js +0 -676
  257. package/dist/setup-git.js.map +0 -1
  258. package/dist/skill.js +0 -35
  259. package/dist/skill.js.map +0 -1
  260. package/dist/store.js +0 -597
  261. package/dist/store.js.map +0 -1
  262. package/dist/structured-error.js +0 -57
  263. package/dist/structured-error.js.map +0 -1
  264. package/dist/target.js +0 -52
  265. package/dist/target.js.map +0 -1
  266. package/dist/tool-result.js +0 -19
  267. package/dist/tool-result.js.map +0 -1
  268. package/dist/which.js +0 -22
  269. package/dist/which.js.map +0 -1
  270. package/dist/workerd-binary.js +0 -98
  271. 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"}