@kodycodes/cli 1.2.0 → 1.2.1
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.
- package/README.md +1 -1
- package/dist/store.d.ts +14 -4
- package/dist/store.js +35 -22
- package/dist/store.js.map +1 -1
- package/package.json +2 -2
- package/skills/kody/SKILL.md +4 -2
package/README.md
CHANGED
|
@@ -74,7 +74,7 @@ CLI credentials are stored in the OS secret store:
|
|
|
74
74
|
|
|
75
75
|
- macOS: Keychain
|
|
76
76
|
- Windows: Credential Manager
|
|
77
|
-
- Linux: Secret Service / libsecret
|
|
77
|
+
- Linux: Secret Service / libsecret (not the in-memory kernel keyring)
|
|
78
78
|
|
|
79
79
|
If the keychain is unavailable (common on headless Linux), the CLI writes a
|
|
80
80
|
`0600` file under `$XDG_CONFIG_HOME/kody` (or `%APPDATA%\kody` on Windows,
|
package/dist/store.d.ts
CHANGED
|
@@ -18,17 +18,27 @@ export type SecretBackend = {
|
|
|
18
18
|
set(value: string): void;
|
|
19
19
|
delete(): boolean;
|
|
20
20
|
};
|
|
21
|
+
/** Linux-only: require Secret Service. Ignored on macOS and Windows. */
|
|
22
|
+
export declare const secretServiceKeyringOptions: {
|
|
23
|
+
readonly linux: {
|
|
24
|
+
readonly store: "secret-service";
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export type StoreResolution = {
|
|
28
|
+
createKeyring?: (mcpUrl: string) => SecretBackend;
|
|
29
|
+
fileStorePath?: (mcpUrl: string) => string;
|
|
30
|
+
};
|
|
21
31
|
export declare function accountForMcpUrl(mcpUrl: string): string;
|
|
22
32
|
export declare function fileStorePath(mcpUrl: string, home?: string): string;
|
|
23
33
|
export declare function createFileBackend(path: string): SecretBackend;
|
|
24
34
|
export declare function createKeyringBackend(mcpUrl: string): SecretBackend;
|
|
25
|
-
export declare function resolveBackend(mcpUrl: string, preferred?: SecretBackend): SecretBackend;
|
|
35
|
+
export declare function resolveBackend(mcpUrl: string, preferred?: SecretBackend, resolution?: StoreResolution): SecretBackend;
|
|
26
36
|
export declare function parseCredentials(raw: string): StoredCredentials;
|
|
27
|
-
export declare function loadCredentials(mcpUrl?: string, backend?: SecretBackend): StoredCredentials | null;
|
|
28
|
-
export declare function saveCredentials(credentials: StoredCredentials, backend?: SecretBackend): {
|
|
37
|
+
export declare function loadCredentials(mcpUrl?: string, backend?: SecretBackend, resolution?: StoreResolution): StoredCredentials | null;
|
|
38
|
+
export declare function saveCredentials(credentials: StoredCredentials, backend?: SecretBackend, resolution?: StoreResolution): {
|
|
29
39
|
backend: SecretBackend;
|
|
30
40
|
};
|
|
31
|
-
export declare function deleteCredentials(mcpUrl?: string, backend?: SecretBackend): {
|
|
41
|
+
export declare function deleteCredentials(mcpUrl?: string, backend?: SecretBackend, resolution?: StoreResolution): {
|
|
32
42
|
deleted: boolean;
|
|
33
43
|
backend: SecretBackend;
|
|
34
44
|
};
|
package/dist/store.js
CHANGED
|
@@ -3,6 +3,10 @@ import { dirname, join } from 'node:path';
|
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { Entry } from '@napi-rs/keyring';
|
|
5
5
|
import { defaultMcpUrl, keyringService } from './defaults.js';
|
|
6
|
+
/** Linux-only: require Secret Service. Ignored on macOS and Windows. */
|
|
7
|
+
export const secretServiceKeyringOptions = {
|
|
8
|
+
linux: { store: 'secret-service' },
|
|
9
|
+
};
|
|
6
10
|
export function accountForMcpUrl(mcpUrl) {
|
|
7
11
|
return `cli:${new URL(mcpUrl).origin}`;
|
|
8
12
|
}
|
|
@@ -49,7 +53,7 @@ export function createFileBackend(path) {
|
|
|
49
53
|
};
|
|
50
54
|
}
|
|
51
55
|
export function createKeyringBackend(mcpUrl) {
|
|
52
|
-
const entry = new Entry(keyringService, accountForMcpUrl(mcpUrl));
|
|
56
|
+
const entry = new Entry(keyringService, accountForMcpUrl(mcpUrl), secretServiceKeyringOptions);
|
|
53
57
|
return {
|
|
54
58
|
kind: 'keyring',
|
|
55
59
|
get() {
|
|
@@ -73,14 +77,18 @@ export function createKeyringBackend(mcpUrl) {
|
|
|
73
77
|
},
|
|
74
78
|
};
|
|
75
79
|
}
|
|
76
|
-
|
|
80
|
+
function fileBackendFor(mcpUrl, resolution) {
|
|
81
|
+
const path = resolution?.fileStorePath?.(mcpUrl) ?? fileStorePath(mcpUrl);
|
|
82
|
+
return createFileBackend(path);
|
|
83
|
+
}
|
|
84
|
+
export function resolveBackend(mcpUrl, preferred, resolution) {
|
|
77
85
|
if (preferred)
|
|
78
86
|
return preferred;
|
|
79
87
|
try {
|
|
80
|
-
return createKeyringBackend(mcpUrl);
|
|
88
|
+
return (resolution?.createKeyring ?? createKeyringBackend)(mcpUrl);
|
|
81
89
|
}
|
|
82
90
|
catch {
|
|
83
|
-
return
|
|
91
|
+
return fileBackendFor(mcpUrl, resolution);
|
|
84
92
|
}
|
|
85
93
|
}
|
|
86
94
|
export function parseCredentials(raw) {
|
|
@@ -90,40 +98,45 @@ export function parseCredentials(raw) {
|
|
|
90
98
|
}
|
|
91
99
|
return parsed;
|
|
92
100
|
}
|
|
93
|
-
|
|
94
|
-
const
|
|
101
|
+
function readParsed(store) {
|
|
102
|
+
const raw = store.get();
|
|
103
|
+
if (!raw)
|
|
104
|
+
return null;
|
|
105
|
+
return parseCredentials(raw);
|
|
106
|
+
}
|
|
107
|
+
export function loadCredentials(mcpUrl = defaultMcpUrl, backend, resolution) {
|
|
108
|
+
const store = resolveBackend(mcpUrl, backend, resolution);
|
|
95
109
|
try {
|
|
96
|
-
const
|
|
97
|
-
if (
|
|
98
|
-
return
|
|
99
|
-
return parseCredentials(raw);
|
|
110
|
+
const loaded = readParsed(store);
|
|
111
|
+
if (loaded)
|
|
112
|
+
return loaded;
|
|
100
113
|
}
|
|
101
114
|
catch (error) {
|
|
102
|
-
if (store.kind === 'keyring' && !backend)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
throw error;
|
|
115
|
+
if (!(store.kind === 'keyring' && !backend))
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
if (store.kind === 'keyring' && !backend) {
|
|
119
|
+
return readParsed(fileBackendFor(mcpUrl, resolution));
|
|
108
120
|
}
|
|
121
|
+
return null;
|
|
109
122
|
}
|
|
110
|
-
export function saveCredentials(credentials, backend) {
|
|
111
|
-
const store = resolveBackend(credentials.mcpUrl, backend);
|
|
123
|
+
export function saveCredentials(credentials, backend, resolution) {
|
|
124
|
+
const store = resolveBackend(credentials.mcpUrl, backend, resolution);
|
|
112
125
|
try {
|
|
113
126
|
store.set(JSON.stringify(credentials));
|
|
114
127
|
return { backend: store };
|
|
115
128
|
}
|
|
116
129
|
catch (error) {
|
|
117
130
|
if (store.kind === 'keyring' && !backend) {
|
|
118
|
-
const fallback =
|
|
131
|
+
const fallback = fileBackendFor(credentials.mcpUrl, resolution);
|
|
119
132
|
fallback.set(JSON.stringify(credentials));
|
|
120
133
|
return { backend: fallback };
|
|
121
134
|
}
|
|
122
135
|
throw error;
|
|
123
136
|
}
|
|
124
137
|
}
|
|
125
|
-
export function deleteCredentials(mcpUrl = defaultMcpUrl, backend) {
|
|
126
|
-
const store = resolveBackend(mcpUrl, backend);
|
|
138
|
+
export function deleteCredentials(mcpUrl = defaultMcpUrl, backend, resolution) {
|
|
139
|
+
const store = resolveBackend(mcpUrl, backend, resolution);
|
|
127
140
|
let deleted = false;
|
|
128
141
|
try {
|
|
129
142
|
deleted = store.delete();
|
|
@@ -132,7 +145,7 @@ export function deleteCredentials(mcpUrl = defaultMcpUrl, backend) {
|
|
|
132
145
|
deleted = false;
|
|
133
146
|
}
|
|
134
147
|
if (store.kind === 'keyring' && !backend) {
|
|
135
|
-
const file =
|
|
148
|
+
const file = fileBackendFor(mcpUrl, resolution);
|
|
136
149
|
deleted = file.delete() || deleted;
|
|
137
150
|
}
|
|
138
151
|
return { deleted, backend: store };
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,SAAS,EACT,SAAS,EACT,YAAY,EACZ,UAAU,EACV,aAAa,GACb,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAwB7D,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC9C,OAAO,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,aAAa,CAC5B,MAAc,EACd,OAAe,OAAO,EAAE;IAExB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;IACnE,MAAM,IAAI,GACT,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC3B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QACvE,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC9B,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,CAAC;YACtD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAA;IACvE,OAAO,IAAI,CAAC,IAAI,EAAE,eAAe,MAAM,OAAO,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC7C,OAAO;QACN,IAAI,EAAE,MAAM;QACZ,IAAI;QACJ,GAAG;YACF,IAAI,CAAC;gBACJ,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAClC,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO,IAAI,CAAA;YACZ,CAAC;QACF,CAAC;QACD,GAAG,CAAC,KAAa;YAChB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YAC1D,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YAC3C,IAAI,CAAC;gBACJ,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACvB,CAAC;YAAC,MAAM,CAAC;gBACR,oCAAoC;YACrC,CAAC;QACF,CAAC;QACD,MAAM;YACL,IAAI,CAAC;gBACJ,UAAU,CAAC,IAAI,CAAC,CAAA;gBAChB,OAAO,IAAI,CAAA;YACZ,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO,KAAK,CAAA;YACb,CAAC;QACF,CAAC;KACD,CAAA;AACF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAClD,MAAM,KAAK,GAAG,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kodycodes/cli",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "Official Kody MCP client CLI: login, secure token storage, search, and execute.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@inquirer/checkbox": "^5.2.2",
|
|
51
51
|
"@modelcontextprotocol/client": "2.0.0",
|
|
52
|
-
"@napi-rs/keyring": "^1.
|
|
52
|
+
"@napi-rs/keyring": "^2.1.0",
|
|
53
53
|
"add-mcp": "^2.4.0",
|
|
54
54
|
"ps-list": "^9.0.0"
|
|
55
55
|
},
|
package/skills/kody/SKILL.md
CHANGED
|
@@ -60,8 +60,10 @@ kody logout
|
|
|
60
60
|
|
|
61
61
|
The CLI opens a browser for Kody OAuth (PKCE + Client ID Metadata Documents).
|
|
62
62
|
If a browser cannot open, it prints the URL. Tokens (access + refresh) are
|
|
63
|
-
stored in the OS keychain on macOS, Windows, and Linux
|
|
64
|
-
Service
|
|
63
|
+
stored in the OS keychain on macOS, Windows, and Linux (Secret Service).
|
|
64
|
+
Linux without Secret Service — including headless machines that only have an
|
|
65
|
+
in-memory kernel keyring — falls back to a `0600` file under
|
|
66
|
+
`$XDG_CONFIG_HOME/kody`.
|
|
65
67
|
|
|
66
68
|
Never ask the user to paste tokens into chat.
|
|
67
69
|
|