@kodycodes/cli 1.0.0 → 1.1.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 (46) hide show
  1. package/README.md +16 -3
  2. package/dist/add-mcp-install.d.ts +36 -0
  3. package/dist/add-mcp-install.js +48 -0
  4. package/dist/add-mcp-install.js.map +1 -0
  5. package/dist/auth.d.ts +1 -1
  6. package/dist/auth.js +91 -89
  7. package/dist/auth.js.map +1 -1
  8. package/dist/cli.d.ts +3 -1
  9. package/dist/cli.js +17 -2
  10. package/dist/cli.js.map +1 -1
  11. package/dist/defaults.d.ts +10 -0
  12. package/dist/defaults.js +16 -0
  13. package/dist/defaults.js.map +1 -1
  14. package/dist/detect-running-hosts.d.ts +4 -0
  15. package/dist/detect-running-hosts.js +13 -0
  16. package/dist/detect-running-hosts.js.map +1 -0
  17. package/dist/help.js +9 -1
  18. package/dist/help.js.map +1 -1
  19. package/dist/host-catalog.d.ts +27 -0
  20. package/dist/host-catalog.js +355 -0
  21. package/dist/host-catalog.js.map +1 -0
  22. package/dist/host-config.d.ts +23 -0
  23. package/dist/host-config.js +80 -0
  24. package/dist/host-config.js.map +1 -0
  25. package/dist/install-hosts.d.ts +31 -0
  26. package/dist/install-hosts.js +322 -0
  27. package/dist/install-hosts.js.map +1 -0
  28. package/dist/install.d.ts +32 -0
  29. package/dist/install.js +120 -0
  30. package/dist/install.js.map +1 -0
  31. package/dist/mcp.js +6 -7
  32. package/dist/mcp.js.map +1 -1
  33. package/dist/oauth-provider.d.ts +12 -0
  34. package/dist/oauth-provider.js +89 -0
  35. package/dist/oauth-provider.js.map +1 -0
  36. package/dist/onboarding-prompt.d.ts +2 -0
  37. package/dist/onboarding-prompt.js +15 -0
  38. package/dist/onboarding-prompt.js.map +1 -0
  39. package/dist/process-info.d.ts +8 -0
  40. package/dist/process-info.js +14 -0
  41. package/dist/process-info.js.map +1 -0
  42. package/dist/which.d.ts +1 -0
  43. package/dist/which.js +22 -0
  44. package/dist/which.js.map +1 -0
  45. package/package.json +6 -3
  46. package/skills/kody/SKILL.md +11 -1
@@ -0,0 +1,2 @@
1
+ export declare function buildOnboardingContinuationPrompt(): string;
2
+ export declare function webClientsOnboardingNote(mcpUrl: string): string;
@@ -0,0 +1,15 @@
1
+ import { onboardingUrl } from './defaults.js';
2
+ export function buildOnboardingContinuationPrompt() {
3
+ return [
4
+ 'Kody is connected as an MCP server in this agent.',
5
+ 'Help me get started with Kody.',
6
+ 'First, briefly explain what Kody can do for me in plain language.',
7
+ 'Then help me connect one integration I care about: check coding_guide_get for a matching provider guide (for example provider_github or provider_google) and follow it; otherwise use search and the official guides to find the right setup steps, walk me through the connect or secrets flow, and verify the connection with a small ad hoc execute smoke test.',
8
+ 'Do not create any packages until the integration works — start with ad hoc execute calls.',
9
+ 'Once the integration works, check community_search for a trusted community package that is close to what I want, fork or adapt it (community_fork, or point me at one-click install on /onboarding or the listing detail), and only create a new package if nothing suitable exists.',
10
+ ].join(' ');
11
+ }
12
+ export function webClientsOnboardingNote(mcpUrl) {
13
+ return `For web-based clients (ChatGPT, Claude.ai, Grok), see ${onboardingUrl(mcpUrl)}`;
14
+ }
15
+ //# sourceMappingURL=onboarding-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-prompt.js","sourceRoot":"","sources":["../src/onboarding-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,UAAU,iCAAiC;IAChD,OAAO;QACN,mDAAmD;QACnD,gCAAgC;QAChC,mEAAmE;QACnE,oWAAoW;QACpW,2FAA2F;QAC3F,sRAAsR;KACtR,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACtD,OAAO,yDAAyD,aAAa,CAAC,MAAM,CAAC,EAAE,CAAA;AACxF,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type ProcessInfo = {
2
+ name: string;
3
+ cmd?: string;
4
+ };
5
+ export declare function processHaystack(process: ProcessInfo): string;
6
+ export declare function processBaseName(process: ProcessInfo): string;
7
+ export declare function nameEquals(process: ProcessInfo, ...names: Array<string>): boolean;
8
+ export declare function haystackMatches(process: ProcessInfo, pattern: RegExp): boolean;
@@ -0,0 +1,14 @@
1
+ export function processHaystack(process) {
2
+ return `${process.name} ${process.cmd ?? ''}`;
3
+ }
4
+ export function processBaseName(process) {
5
+ return process.name.replace(/\.exe$/iu, '').trim().toLowerCase();
6
+ }
7
+ export function nameEquals(process, ...names) {
8
+ const base = processBaseName(process);
9
+ return names.some((name) => base === name.toLowerCase());
10
+ }
11
+ export function haystackMatches(process, pattern) {
12
+ return pattern.test(processHaystack(process));
13
+ }
14
+ //# sourceMappingURL=process-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-info.js","sourceRoot":"","sources":["../src/process-info.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,eAAe,CAAC,OAAoB;IACnD,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAoB;IACnD,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAoB,EAAE,GAAG,KAAoB;IACvE,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAoB,EAAE,OAAe;IACpE,OAAO,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;AAC9C,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function which(command: string, env?: NodeJS.ProcessEnv): string | undefined;
package/dist/which.js ADDED
@@ -0,0 +1,22 @@
1
+ import { accessSync, constants } from 'node:fs';
2
+ import { delimiter, join } from 'node:path';
3
+ export function which(command, env = process.env) {
4
+ const pathValue = env.PATH ?? env.Path;
5
+ if (!pathValue)
6
+ return undefined;
7
+ const extensions = process.platform === 'win32' ? (env.PATHEXT ?? '.EXE;.CMD;.BAT;.COM').split(';') : [''];
8
+ for (const directory of pathValue.split(delimiter)) {
9
+ for (const extension of extensions) {
10
+ const candidate = join(directory, `${command}${extension}`);
11
+ try {
12
+ accessSync(candidate, constants.X_OK);
13
+ return candidate;
14
+ }
15
+ catch {
16
+ // keep looking
17
+ }
18
+ }
19
+ }
20
+ return undefined;
21
+ }
22
+ //# sourceMappingURL=which.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"which.js","sourceRoot":"","sources":["../src/which.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,MAAyB,OAAO,CAAC,GAAG;IAC1E,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAA;IACtC,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAA;IAChC,MAAM,UAAU,GACf,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACxF,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACpD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,GAAG,SAAS,EAAE,CAAC,CAAA;YAC3D,IAAI,CAAC;gBACJ,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;gBACrC,OAAO,SAAS,CAAA;YACjB,CAAC;YAAC,MAAM,CAAC;gBACR,eAAe;YAChB,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAA;AACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kodycodes/cli",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Official Kody MCP client CLI: login, secure token storage, search, and execute.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -47,8 +47,11 @@
47
47
  "access": "public"
48
48
  },
49
49
  "dependencies": {
50
- "@modelcontextprotocol/sdk": "^1.30.0",
51
- "@napi-rs/keyring": "^1.3.0"
50
+ "@inquirer/checkbox": "^5.2.2",
51
+ "@modelcontextprotocol/client": "2.0.0",
52
+ "@napi-rs/keyring": "^1.3.0",
53
+ "add-mcp": "^2.0.0",
54
+ "ps-list": "^9.0.0"
52
55
  },
53
56
  "devDependencies": {
54
57
  "@types/node": "^24.5.2",
@@ -25,13 +25,23 @@ Then install this skill into the current host if it is not already present:
25
25
  npx @kodycodes/cli skill install
26
26
  ```
27
27
 
28
+ To add Kody as a remote MCP server in running local agents:
29
+
30
+ ```bash
31
+ npx @kodycodes/cli install
32
+ ```
33
+
34
+ That command only lists local clients that are currently running. For web-based
35
+ clients (ChatGPT, Claude.ai, Grok), point the user at
36
+ https://kody.codes/onboarding.
37
+
28
38
  ## Login
29
39
 
30
40
  ```bash
31
41
  kody login
32
42
  ```
33
43
 
34
- The CLI opens a browser for Kody OAuth (PKCE + dynamic client registration).
44
+ The CLI opens a browser for Kody OAuth (PKCE + Client ID Metadata Documents).
35
45
  If a browser cannot open, it prints the URL. Tokens (access + refresh) are
36
46
  stored in the OS keychain on macOS, Windows, and Linux. Linux without Secret
37
47
  Service falls back to a `0600` file under `$XDG_CONFIG_HOME/kody`.