@agentteams/cli 0.1.83 → 0.1.85
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/.eslintcache +1 -1
- package/dist/api/plan.d.ts +2 -0
- package/dist/api/plan.d.ts.map +1 -1
- package/dist/api/plan.js.map +1 -1
- package/dist/auth/activeCredential.d.ts +22 -0
- package/dist/auth/activeCredential.d.ts.map +1 -0
- package/dist/auth/activeCredential.js +25 -0
- package/dist/auth/activeCredential.js.map +1 -0
- package/dist/auth/credentialStore.d.ts +118 -0
- package/dist/auth/credentialStore.d.ts.map +1 -0
- package/dist/auth/credentialStore.js +340 -0
- package/dist/auth/credentialStore.js.map +1 -0
- package/dist/auth/personalTokenClient.d.ts +189 -0
- package/dist/auth/personalTokenClient.d.ts.map +1 -0
- package/dist/auth/personalTokenClient.js +379 -0
- package/dist/auth/personalTokenClient.js.map +1 -0
- package/dist/auth/personalTokenStore.d.ts +17 -0
- package/dist/auth/personalTokenStore.d.ts.map +1 -0
- package/dist/auth/personalTokenStore.js +27 -0
- package/dist/auth/personalTokenStore.js.map +1 -0
- package/dist/auth/refreshLock.d.ts +74 -0
- package/dist/auth/refreshLock.d.ts.map +1 -0
- package/dist/auth/refreshLock.js +225 -0
- package/dist/auth/refreshLock.js.map +1 -0
- package/dist/commands/agentConfig.d.ts.map +1 -1
- package/dist/commands/agentConfig.js +8 -6
- package/dist/commands/agentConfig.js.map +1 -1
- package/dist/commands/attachment.d.ts.map +1 -1
- package/dist/commands/attachment.js +10 -2
- package/dist/commands/attachment.js.map +1 -1
- package/dist/commands/auth.d.ts +97 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +245 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +16 -2
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/convention.d.ts +11 -0
- package/dist/commands/convention.d.ts.map +1 -1
- package/dist/commands/convention.js +35 -11
- package/dist/commands/convention.js.map +1 -1
- package/dist/commands/dependency.d.ts.map +1 -1
- package/dist/commands/dependency.js +8 -6
- package/dist/commands/dependency.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +19 -14
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +17 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +90 -9
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/plan.d.ts +15 -0
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +28 -0
- package/dist/commands/plan.js.map +1 -1
- package/dist/index.js +106 -16
- package/dist/index.js.map +1 -1
- package/dist/mcp/context.d.ts +15 -1
- package/dist/mcp/context.d.ts.map +1 -1
- package/dist/mcp/context.js +24 -5
- package/dist/mcp/context.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +5 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +25 -22
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp-registration/clients.d.ts.map +1 -1
- package/dist/mcp-registration/clients.js +1 -9
- package/dist/mcp-registration/clients.js.map +1 -1
- package/dist/mcp-registration/doctor.d.ts +38 -0
- package/dist/mcp-registration/doctor.d.ts.map +1 -0
- package/dist/mcp-registration/doctor.js +379 -0
- package/dist/mcp-registration/doctor.js.map +1 -0
- package/dist/mcp-registration/index.d.ts +7 -5
- package/dist/mcp-registration/index.d.ts.map +1 -1
- package/dist/mcp-registration/index.js +46 -21
- package/dist/mcp-registration/index.js.map +1 -1
- package/dist/mcp-registration/install.d.ts.map +1 -1
- package/dist/mcp-registration/install.js +12 -15
- package/dist/mcp-registration/install.js.map +1 -1
- package/dist/mcp-registration/render.d.ts +8 -6
- package/dist/mcp-registration/render.d.ts.map +1 -1
- package/dist/mcp-registration/render.js +15 -36
- package/dist/mcp-registration/render.js.map +1 -1
- package/dist/mcp-registration/serverSpec.d.ts +31 -18
- package/dist/mcp-registration/serverSpec.d.ts.map +1 -1
- package/dist/mcp-registration/serverSpec.js +36 -20
- package/dist/mcp-registration/serverSpec.js.map +1 -1
- package/dist/mcp-registration/types.d.ts +0 -3
- package/dist/mcp-registration/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/apiKeyInput.d.ts +16 -0
- package/dist/utils/apiKeyInput.d.ts.map +1 -0
- package/dist/utils/apiKeyInput.js +47 -0
- package/dist/utils/apiKeyInput.js.map +1 -0
- package/dist/utils/authFormat.d.ts +18 -0
- package/dist/utils/authFormat.d.ts.map +1 -0
- package/dist/utils/authFormat.js +130 -0
- package/dist/utils/authFormat.js.map +1 -0
- package/dist/utils/authServer.d.ts +32 -3
- package/dist/utils/authServer.d.ts.map +1 -1
- package/dist/utils/authServer.js +46 -6
- package/dist/utils/authServer.js.map +1 -1
- package/dist/utils/config.d.ts +127 -15
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +201 -8
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +16 -0
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/httpClient.d.ts.map +1 -1
- package/dist/utils/httpClient.js +25 -0
- package/dist/utils/httpClient.js.map +1 -1
- package/dist/utils/initOutput.d.ts.map +1 -1
- package/dist/utils/initOutput.js +30 -0
- package/dist/utils/initOutput.js.map +1 -1
- package/package.json +1 -1
package/dist/api/plan.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export declare function quickPlan(apiUrl: string, projectId: string, headers: an
|
|
|
22
22
|
complexity: string;
|
|
23
23
|
priority: string;
|
|
24
24
|
repositoryRemoteUrl?: string;
|
|
25
|
+
assignedTo?: string;
|
|
25
26
|
startCommit?: string;
|
|
26
27
|
startBranch?: string;
|
|
27
28
|
runnerType: string;
|
|
@@ -49,6 +50,7 @@ export declare function quickPlan(apiUrl: string, projectId: string, headers: an
|
|
|
49
50
|
export declare function updatePlan(apiUrl: string, projectId: string, headers: any, id: string, body: Record<string, unknown>): Promise<any>;
|
|
50
51
|
export declare function startPlanLifecycle(apiUrl: string, projectId: string, headers: any, id: string, body: {
|
|
51
52
|
task?: string;
|
|
53
|
+
assignedTo?: string;
|
|
52
54
|
startCommit?: string;
|
|
53
55
|
startBranch?: string;
|
|
54
56
|
runnerType?: string;
|
package/dist/api/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/api/plan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/api/plan.ts"],"names":[],"mappings":"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"}
|
package/dist/api/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/api/plan.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,SAAiB,EACjB,OAAY,EACZ,MAAwC;IAExC,MAAM,OAAO,GAAG,GAAG,MAAM,iBAAiB,SAAS,QAAQ,CAAC;IAC5D,MAAM,aAAa,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;IAEnG,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC9D,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,SAAiB,EAAE,OAAY,EAAE,EAAU;IACvF,MAAM,OAAO,GAAG,GAAG,MAAM,iBAAiB,SAAS,QAAQ,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACvE,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,wEAAwE;AACxE,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,SAAiB,EACjB,OAA+B,EAC/B,EAAU;IAEV,MAAM,OAAO,GAAG,GAAG,MAAM,iBAAiB,SAAS,QAAQ,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/E,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAc,EAAE,SAAiB,EAAE,OAAY,EAAE,EAAU;IACnG,MAAM,OAAO,GAAG,GAAG,MAAM,iBAAiB,SAAS,QAAQ,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACpF,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,SAAiB,EACjB,OAAY,EACZ,IAYC;IAED,MAAM,OAAO,GAAG,GAAG,MAAM,iBAAiB,SAAS,QAAQ,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACnE,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,SAAiB,EACjB,OAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/api/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The credential this process is currently authenticating with, in a form the
|
|
3
|
+
* HTTP layer can act on.
|
|
4
|
+
*
|
|
5
|
+
* `utils/httpClient.ts` must be able to answer "can this 401 be fixed by a
|
|
6
|
+
* refresh?" without importing the config loader (which imports the token client,
|
|
7
|
+
* which would import the HTTP layer back). A one-slot registry keeps that
|
|
8
|
+
* dependency edge from existing at all.
|
|
9
|
+
*
|
|
10
|
+
* Only the personal-token path registers anything here. A legacy `key_` run
|
|
11
|
+
* leaves the slot empty, which is what makes "never attempt a refresh on the old
|
|
12
|
+
* path" a structural property rather than a conditional the caller must remember.
|
|
13
|
+
*/
|
|
14
|
+
export interface RefreshableCredential {
|
|
15
|
+
/** Discard the cached access token and fetch a new one. Null means "could not". */
|
|
16
|
+
refresh(): Promise<string | null>;
|
|
17
|
+
}
|
|
18
|
+
export declare function setActiveCredential(credential: RefreshableCredential | null): void;
|
|
19
|
+
export declare function getActiveCredential(): RefreshableCredential | null;
|
|
20
|
+
/** Test-only: return the process to the "no refreshable credential" state. */
|
|
21
|
+
export declare function resetActiveCredentialForTests(): void;
|
|
22
|
+
//# sourceMappingURL=activeCredential.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activeCredential.d.ts","sourceRoot":"","sources":["../../src/auth/activeCredential.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,qBAAqB;IACpC,mFAAmF;IACnF,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACnC;AAID,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAElF;AAED,wBAAgB,mBAAmB,IAAI,qBAAqB,GAAG,IAAI,CAElE;AAED,8EAA8E;AAC9E,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The credential this process is currently authenticating with, in a form the
|
|
3
|
+
* HTTP layer can act on.
|
|
4
|
+
*
|
|
5
|
+
* `utils/httpClient.ts` must be able to answer "can this 401 be fixed by a
|
|
6
|
+
* refresh?" without importing the config loader (which imports the token client,
|
|
7
|
+
* which would import the HTTP layer back). A one-slot registry keeps that
|
|
8
|
+
* dependency edge from existing at all.
|
|
9
|
+
*
|
|
10
|
+
* Only the personal-token path registers anything here. A legacy `key_` run
|
|
11
|
+
* leaves the slot empty, which is what makes "never attempt a refresh on the old
|
|
12
|
+
* path" a structural property rather than a conditional the caller must remember.
|
|
13
|
+
*/
|
|
14
|
+
let active = null;
|
|
15
|
+
export function setActiveCredential(credential) {
|
|
16
|
+
active = credential;
|
|
17
|
+
}
|
|
18
|
+
export function getActiveCredential() {
|
|
19
|
+
return active;
|
|
20
|
+
}
|
|
21
|
+
/** Test-only: return the process to the "no refreshable credential" state. */
|
|
22
|
+
export function resetActiveCredentialForTests() {
|
|
23
|
+
active = null;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=activeCredential.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activeCredential.js","sourceRoot":"","sources":["../../src/auth/activeCredential.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,IAAI,MAAM,GAAiC,IAAI,CAAC;AAEhD,MAAM,UAAU,mBAAmB,CAAC,UAAwC;IAC1E,MAAM,GAAG,UAAU,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,6BAA6B;IAC3C,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OS-protected credential storage for the CLI.
|
|
3
|
+
*
|
|
4
|
+
* The CLI ships as a plain npm package, so a native addon (keytar and friends)
|
|
5
|
+
* would add a build toolchain requirement to every install. Instead each
|
|
6
|
+
* platform's own credential tool is driven as a subprocess:
|
|
7
|
+
*
|
|
8
|
+
* macOS `security` (login keychain)
|
|
9
|
+
* Windows `powershell` (Windows.Security.Credentials.PasswordVault)
|
|
10
|
+
* Linux `secret-tool` (libsecret / Secret Service)
|
|
11
|
+
*
|
|
12
|
+
* When none of them is usable the store **refuses to persist**: nothing is
|
|
13
|
+
* written to disk in plaintext, the secret is kept for this process only, and
|
|
14
|
+
* the caller is told so it can point CI users at the long-lived `key_` path
|
|
15
|
+
* instead. This mirrors `desktop/src/main/localAgent/credentialStore.ts`, which
|
|
16
|
+
* declines to write when `safeStorage` is unavailable — the two must not drift.
|
|
17
|
+
*/
|
|
18
|
+
/** One keychain "service" groups every CLI credential under a single name. */
|
|
19
|
+
export declare const CREDENTIAL_SERVICE = "agentteams-cli";
|
|
20
|
+
export type CredentialBackendId = 'macos-keychain' | 'windows-credential-manager' | 'libsecret' | 'none';
|
|
21
|
+
/**
|
|
22
|
+
* Why the store can (or cannot) persist.
|
|
23
|
+
*
|
|
24
|
+
* `WRITE_FAILED` is the one that is only knowable after trying: the probe below
|
|
25
|
+
* is deliberately cheap, so a locked macOS keychain ("User interaction is not
|
|
26
|
+
* allowed") or a Linux box with `secret-tool` installed but no Secret Service
|
|
27
|
+
* daemon running still reports `OK` until the first write is attempted.
|
|
28
|
+
*/
|
|
29
|
+
export type CredentialStoreReason = 'OK' | 'NO_BACKEND' | 'UNSUPPORTED_PLATFORM' | 'WRITE_FAILED';
|
|
30
|
+
export interface CredentialStoreStatus {
|
|
31
|
+
backend: CredentialBackendId;
|
|
32
|
+
/** false → nothing is ever written to disk; the secret lives in this process only. */
|
|
33
|
+
persisted: boolean;
|
|
34
|
+
reason: CredentialStoreReason;
|
|
35
|
+
/** Masked backend error, present only once a write has actually failed. */
|
|
36
|
+
detail?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface CredentialSaveOutcome {
|
|
39
|
+
persisted: boolean;
|
|
40
|
+
reason: CredentialStoreReason;
|
|
41
|
+
/** Masked backend error, present only when `reason` is `WRITE_FAILED`. */
|
|
42
|
+
detail?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface CommandResult {
|
|
45
|
+
/** null when the executable could not be spawned at all. */
|
|
46
|
+
status: number | null;
|
|
47
|
+
stdout: string;
|
|
48
|
+
stderr: string;
|
|
49
|
+
}
|
|
50
|
+
export interface CredentialCommand {
|
|
51
|
+
command: string;
|
|
52
|
+
args: string[];
|
|
53
|
+
/** Written to the child's stdin. Never placed on argv — argv is world-readable via `ps`. */
|
|
54
|
+
input?: string;
|
|
55
|
+
/** Extra environment for the child. Used on Windows so the secret stays off argv. */
|
|
56
|
+
env?: Record<string, string>;
|
|
57
|
+
/**
|
|
58
|
+
* Run the child in its own session, with no controlling terminal.
|
|
59
|
+
*
|
|
60
|
+
* Required for any tool that reads a secret from stdin: macOS `security`
|
|
61
|
+
* collects the password with `readpassphrase(3)`, which opens the controlling
|
|
62
|
+
* terminal in preference to stdin and only falls back to stdin when there is
|
|
63
|
+
* none to open. Piping the token in therefore works from a script or a test but is
|
|
64
|
+
* silently ignored in an interactive shell, where `security` prompts the user
|
|
65
|
+
* instead and stores whatever the terminal happened to supply. Detaching
|
|
66
|
+
* removes the terminal, so the piped value is the only thing it can read.
|
|
67
|
+
*/
|
|
68
|
+
detachTerminal?: boolean;
|
|
69
|
+
}
|
|
70
|
+
export type CommandRunner = (command: CredentialCommand) => CommandResult;
|
|
71
|
+
export interface CredentialReadOptions {
|
|
72
|
+
/**
|
|
73
|
+
* Skip the process-lifetime read cache and ask the backend again.
|
|
74
|
+
*
|
|
75
|
+
* Required before presenting a **rotating** credential: another process may
|
|
76
|
+
* have rotated it since this one first read it, and the cached copy would then
|
|
77
|
+
* be a superseded token the server treats as reuse.
|
|
78
|
+
*
|
|
79
|
+
* Fails closed — if the backend cannot be read, the call returns null rather
|
|
80
|
+
* than the cached guess, because the caller is about to present the value
|
|
81
|
+
* somewhere that punishes staleness. Ignored for an account whose only copy is
|
|
82
|
+
* in memory (a write that could not be persisted), since there the cache *is*
|
|
83
|
+
* the credential.
|
|
84
|
+
*/
|
|
85
|
+
fresh?: boolean;
|
|
86
|
+
}
|
|
87
|
+
export interface CredentialStore {
|
|
88
|
+
status(): CredentialStoreStatus;
|
|
89
|
+
read(account: string, options?: CredentialReadOptions): string | null;
|
|
90
|
+
save(account: string, secret: string): CredentialSaveOutcome;
|
|
91
|
+
remove(account: string): void;
|
|
92
|
+
}
|
|
93
|
+
export interface CreateCredentialStoreOptions {
|
|
94
|
+
runner?: CommandRunner;
|
|
95
|
+
platform?: NodeJS.Platform;
|
|
96
|
+
service?: string;
|
|
97
|
+
}
|
|
98
|
+
export declare function isMissingItemStatus(backend: CredentialBackendId, status: number | null): boolean;
|
|
99
|
+
export declare function resolveBackendId(platform: NodeJS.Platform): CredentialBackendId;
|
|
100
|
+
/** Cheap "is this backend usable at all" call. Exit code 0 means yes. */
|
|
101
|
+
export declare function buildProbeCommand(backend: CredentialBackendId): CredentialCommand | null;
|
|
102
|
+
export declare function buildReadCommand(backend: CredentialBackendId, service: string, account: string): CredentialCommand | null;
|
|
103
|
+
export declare function buildSaveCommand(backend: CredentialBackendId, service: string, account: string, secret: string): CredentialCommand | null;
|
|
104
|
+
export declare function buildRemoveCommand(backend: CredentialBackendId, service: string, account: string): CredentialCommand | null;
|
|
105
|
+
/**
|
|
106
|
+
* Strip a secret out of anything that is about to be surfaced.
|
|
107
|
+
*
|
|
108
|
+
* Backend tools do not normally echo the value back, but "normally" is not a
|
|
109
|
+
* guarantee worth betting a token on — and this store is the last boundary
|
|
110
|
+
* before text reaches a log or an error message.
|
|
111
|
+
*/
|
|
112
|
+
export declare function maskSecret(text: string, secret: string): string;
|
|
113
|
+
export declare function createCredentialStore(options?: CreateCredentialStoreOptions): CredentialStore;
|
|
114
|
+
/** Process-wide store. Tests build their own through {@link createCredentialStore}. */
|
|
115
|
+
export declare function getCredentialStore(): CredentialStore;
|
|
116
|
+
/** Test-only: drop the cached process-wide store. */
|
|
117
|
+
export declare function resetCredentialStoreForTests(): void;
|
|
118
|
+
//# sourceMappingURL=credentialStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentialStore.d.ts","sourceRoot":"","sources":["../../src/auth/credentialStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OS-protected credential storage for the CLI.
|
|
3
|
+
*
|
|
4
|
+
* The CLI ships as a plain npm package, so a native addon (keytar and friends)
|
|
5
|
+
* would add a build toolchain requirement to every install. Instead each
|
|
6
|
+
* platform's own credential tool is driven as a subprocess:
|
|
7
|
+
*
|
|
8
|
+
* macOS `security` (login keychain)
|
|
9
|
+
* Windows `powershell` (Windows.Security.Credentials.PasswordVault)
|
|
10
|
+
* Linux `secret-tool` (libsecret / Secret Service)
|
|
11
|
+
*
|
|
12
|
+
* When none of them is usable the store **refuses to persist**: nothing is
|
|
13
|
+
* written to disk in plaintext, the secret is kept for this process only, and
|
|
14
|
+
* the caller is told so it can point CI users at the long-lived `key_` path
|
|
15
|
+
* instead. This mirrors `desktop/src/main/localAgent/credentialStore.ts`, which
|
|
16
|
+
* declines to write when `safeStorage` is unavailable — the two must not drift.
|
|
17
|
+
*/
|
|
18
|
+
import { spawnSync } from 'node:child_process';
|
|
19
|
+
/** One keychain "service" groups every CLI credential under a single name. */
|
|
20
|
+
export const CREDENTIAL_SERVICE = 'agentteams-cli';
|
|
21
|
+
const WINDOWS_SERVICE_ENV = 'AGENTTEAMS_CREDENTIAL_SERVICE';
|
|
22
|
+
const WINDOWS_ACCOUNT_ENV = 'AGENTTEAMS_CREDENTIAL_ACCOUNT';
|
|
23
|
+
const WINDOWS_SECRET_ENV = 'AGENTTEAMS_CREDENTIAL_SECRET';
|
|
24
|
+
/**
|
|
25
|
+
* PasswordVault is WinRT, so it is projected into PowerShell rather than called
|
|
26
|
+
* directly. Every script starts from the same preamble; the caller appends the
|
|
27
|
+
* operation. Inputs arrive through the environment because a PowerShell command
|
|
28
|
+
* line is as visible as any other argv.
|
|
29
|
+
*/
|
|
30
|
+
const WINDOWS_PREAMBLE = [
|
|
31
|
+
'$ErrorActionPreference = "Stop"',
|
|
32
|
+
'[void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]',
|
|
33
|
+
'$vault = New-Object Windows.Security.Credentials.PasswordVault',
|
|
34
|
+
].join('; ');
|
|
35
|
+
function powershellCommand(script, env) {
|
|
36
|
+
const command = {
|
|
37
|
+
command: 'powershell',
|
|
38
|
+
args: ['-NoProfile', '-NonInteractive', '-Command', `${WINDOWS_PREAMBLE}; ${script}`],
|
|
39
|
+
};
|
|
40
|
+
if (env)
|
|
41
|
+
command.env = env;
|
|
42
|
+
return command;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Exit statuses that mean "no such item" rather than "the read failed".
|
|
46
|
+
*
|
|
47
|
+
* `security` answers a missing generic password with 44 (errSecItemNotFound);
|
|
48
|
+
* `secret-tool lookup` exits 1 with no output. Anything else — a locked keychain,
|
|
49
|
+
* a denied access prompt, a dead Secret Service — is an error, and must not be
|
|
50
|
+
* mistaken for the credential having been removed.
|
|
51
|
+
*/
|
|
52
|
+
const MISSING_ITEM_STATUS = {
|
|
53
|
+
'macos-keychain': [44],
|
|
54
|
+
libsecret: [1],
|
|
55
|
+
};
|
|
56
|
+
export function isMissingItemStatus(backend, status) {
|
|
57
|
+
if (status === null)
|
|
58
|
+
return false;
|
|
59
|
+
// PasswordVault throws for a missing item and PowerShell turns that into 1;
|
|
60
|
+
// there is no separate code to key on, so it is treated as absence.
|
|
61
|
+
if (backend === 'windows-credential-manager')
|
|
62
|
+
return status === 1;
|
|
63
|
+
return (MISSING_ITEM_STATUS[backend] ?? []).includes(status);
|
|
64
|
+
}
|
|
65
|
+
export function resolveBackendId(platform) {
|
|
66
|
+
switch (platform) {
|
|
67
|
+
case 'darwin':
|
|
68
|
+
return 'macos-keychain';
|
|
69
|
+
case 'win32':
|
|
70
|
+
return 'windows-credential-manager';
|
|
71
|
+
case 'linux':
|
|
72
|
+
return 'libsecret';
|
|
73
|
+
default:
|
|
74
|
+
return 'none';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Cheap "is this backend usable at all" call. Exit code 0 means yes. */
|
|
78
|
+
export function buildProbeCommand(backend) {
|
|
79
|
+
switch (backend) {
|
|
80
|
+
case 'macos-keychain':
|
|
81
|
+
return { command: 'security', args: ['list-keychains'] };
|
|
82
|
+
case 'libsecret':
|
|
83
|
+
return { command: 'secret-tool', args: ['--version'] };
|
|
84
|
+
case 'windows-credential-manager':
|
|
85
|
+
return powershellCommand('exit 0');
|
|
86
|
+
default:
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export function buildReadCommand(backend, service, account) {
|
|
91
|
+
switch (backend) {
|
|
92
|
+
case 'macos-keychain':
|
|
93
|
+
return { command: 'security', args: ['find-generic-password', '-a', account, '-s', service, '-w'] };
|
|
94
|
+
case 'libsecret':
|
|
95
|
+
return { command: 'secret-tool', args: ['lookup', 'service', service, 'account', account] };
|
|
96
|
+
case 'windows-credential-manager':
|
|
97
|
+
return powershellCommand(`$c = $vault.Retrieve($env:${WINDOWS_SERVICE_ENV}, $env:${WINDOWS_ACCOUNT_ENV}); ` +
|
|
98
|
+
'$c.RetrievePassword(); [Console]::Out.Write($c.Password)', { [WINDOWS_SERVICE_ENV]: service, [WINDOWS_ACCOUNT_ENV]: account });
|
|
99
|
+
default:
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export function buildSaveCommand(backend, service, account, secret) {
|
|
104
|
+
switch (backend) {
|
|
105
|
+
case 'macos-keychain':
|
|
106
|
+
// `-w` without a value makes `security` read the password rather than take
|
|
107
|
+
// it from argv, where `ps` would expose it. It asks twice ("retype
|
|
108
|
+
// password"), so the value is written twice. `detachTerminal` is what makes
|
|
109
|
+
// it read *this* stdin instead of prompting the user's terminal.
|
|
110
|
+
return {
|
|
111
|
+
command: 'security',
|
|
112
|
+
args: ['add-generic-password', '-a', account, '-s', service, '-U', '-w'],
|
|
113
|
+
input: `${secret}\n${secret}\n`,
|
|
114
|
+
detachTerminal: true,
|
|
115
|
+
};
|
|
116
|
+
case 'libsecret':
|
|
117
|
+
return {
|
|
118
|
+
command: 'secret-tool',
|
|
119
|
+
args: ['store', '--label', `${service} (${account})`, 'service', service, 'account', account],
|
|
120
|
+
input: secret,
|
|
121
|
+
};
|
|
122
|
+
case 'windows-credential-manager':
|
|
123
|
+
return powershellCommand('$vault.Add((New-Object Windows.Security.Credentials.PasswordCredential(' +
|
|
124
|
+
`$env:${WINDOWS_SERVICE_ENV}, $env:${WINDOWS_ACCOUNT_ENV}, $env:${WINDOWS_SECRET_ENV})))`, { [WINDOWS_SERVICE_ENV]: service, [WINDOWS_ACCOUNT_ENV]: account, [WINDOWS_SECRET_ENV]: secret });
|
|
125
|
+
default:
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export function buildRemoveCommand(backend, service, account) {
|
|
130
|
+
switch (backend) {
|
|
131
|
+
case 'macos-keychain':
|
|
132
|
+
return { command: 'security', args: ['delete-generic-password', '-a', account, '-s', service] };
|
|
133
|
+
case 'libsecret':
|
|
134
|
+
return { command: 'secret-tool', args: ['clear', 'service', service, 'account', account] };
|
|
135
|
+
case 'windows-credential-manager':
|
|
136
|
+
return powershellCommand(`$c = $vault.Retrieve($env:${WINDOWS_SERVICE_ENV}, $env:${WINDOWS_ACCOUNT_ENV}); $vault.Remove($c)`, { [WINDOWS_SERVICE_ENV]: service, [WINDOWS_ACCOUNT_ENV]: account });
|
|
137
|
+
default:
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const defaultRunner = (command) => {
|
|
142
|
+
const result = spawnSync(command.command, command.args, {
|
|
143
|
+
encoding: 'utf-8',
|
|
144
|
+
input: command.input,
|
|
145
|
+
windowsHide: true,
|
|
146
|
+
env: command.env ? { ...process.env, ...command.env } : process.env,
|
|
147
|
+
// `spawnSync` still waits for the child, so detaching only changes which
|
|
148
|
+
// session it belongs to — there is nothing left running afterwards.
|
|
149
|
+
...(command.detachTerminal ? { detached: true } : {}),
|
|
150
|
+
});
|
|
151
|
+
return {
|
|
152
|
+
status: result.error ? null : result.status,
|
|
153
|
+
stdout: result.stdout ?? '',
|
|
154
|
+
stderr: result.stderr ?? '',
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Strip a secret out of anything that is about to be surfaced.
|
|
159
|
+
*
|
|
160
|
+
* Backend tools do not normally echo the value back, but "normally" is not a
|
|
161
|
+
* guarantee worth betting a token on — and this store is the last boundary
|
|
162
|
+
* before text reaches a log or an error message.
|
|
163
|
+
*/
|
|
164
|
+
export function maskSecret(text, secret) {
|
|
165
|
+
if (!secret)
|
|
166
|
+
return text;
|
|
167
|
+
return text.split(secret).join('***');
|
|
168
|
+
}
|
|
169
|
+
export function createCredentialStore(options = {}) {
|
|
170
|
+
const runner = options.runner ?? defaultRunner;
|
|
171
|
+
const platform = options.platform ?? process.platform;
|
|
172
|
+
const service = options.service ?? CREDENTIAL_SERVICE;
|
|
173
|
+
const backend = resolveBackendId(platform);
|
|
174
|
+
/**
|
|
175
|
+
* Session-only fallback, and a read cache on top of a working backend.
|
|
176
|
+
* A one-shot command barely benefits, but `agentteams mcp` runs for hours and
|
|
177
|
+
* would otherwise re-shell out on every credential resolution.
|
|
178
|
+
*/
|
|
179
|
+
const memory = new Map();
|
|
180
|
+
/**
|
|
181
|
+
* Accounts whose only copy is in {@link memory}, because a write could not be
|
|
182
|
+
* persisted. Tracked per account rather than as one store-wide latch: one
|
|
183
|
+
* account's failed write says nothing about another's, and a store-wide flag
|
|
184
|
+
* would silently turn every later `{ fresh: true }` read back into a cache hit.
|
|
185
|
+
*/
|
|
186
|
+
const memoryOnlyAccounts = new Set();
|
|
187
|
+
let availability = null;
|
|
188
|
+
/**
|
|
189
|
+
* Set once a write is rejected by a backend that passed the probe. From then
|
|
190
|
+
* on `status()` tells the truth — "this store looks present but will not keep
|
|
191
|
+
* anything" — instead of promising a durability it has already failed to give.
|
|
192
|
+
*/
|
|
193
|
+
let writeFailureDetail = null;
|
|
194
|
+
const isAvailable = () => {
|
|
195
|
+
if (availability !== null)
|
|
196
|
+
return availability;
|
|
197
|
+
const probe = buildProbeCommand(backend);
|
|
198
|
+
if (!probe) {
|
|
199
|
+
availability = false;
|
|
200
|
+
return availability;
|
|
201
|
+
}
|
|
202
|
+
// A backend that cannot even be probed is treated as absent rather than as
|
|
203
|
+
// an error: the caller's job is to fall back, not to fail the command.
|
|
204
|
+
availability = runner(probe).status === 0;
|
|
205
|
+
return availability;
|
|
206
|
+
};
|
|
207
|
+
const status = () => {
|
|
208
|
+
if (backend === 'none') {
|
|
209
|
+
return { backend, persisted: false, reason: 'UNSUPPORTED_PLATFORM' };
|
|
210
|
+
}
|
|
211
|
+
if (writeFailureDetail !== null) {
|
|
212
|
+
return { backend, persisted: false, reason: 'WRITE_FAILED', detail: writeFailureDetail };
|
|
213
|
+
}
|
|
214
|
+
const available = isAvailable();
|
|
215
|
+
return { backend, persisted: available, reason: available ? 'OK' : 'NO_BACKEND' };
|
|
216
|
+
};
|
|
217
|
+
/**
|
|
218
|
+
* The backend's own answer, with no memory cache in front of it.
|
|
219
|
+
*
|
|
220
|
+
* `missing` and `error` must stay apart. Collapsing them makes a locked
|
|
221
|
+
* keychain or a denied access prompt look exactly like "another process logged
|
|
222
|
+
* out", which would drop a live credential from the cache and let `logout`
|
|
223
|
+
* claim there is nothing to revoke while a valid refresh token sits in the
|
|
224
|
+
* store.
|
|
225
|
+
*/
|
|
226
|
+
const readFromBackend = (account) => {
|
|
227
|
+
if (!isAvailable())
|
|
228
|
+
return { kind: 'error', detail: 'the credential store is not available' };
|
|
229
|
+
const command = buildReadCommand(backend, service, account);
|
|
230
|
+
if (!command)
|
|
231
|
+
return { kind: 'error', detail: 'no read command for this backend' };
|
|
232
|
+
const result = runner(command);
|
|
233
|
+
if (result.status !== 0) {
|
|
234
|
+
return isMissingItemStatus(backend, result.status)
|
|
235
|
+
? { kind: 'missing' }
|
|
236
|
+
: { kind: 'error', detail: `${result.stderr}`.trim() || `the credential store read failed (${result.status})` };
|
|
237
|
+
}
|
|
238
|
+
// `security -w` and `secret-tool lookup` both terminate the value with a
|
|
239
|
+
// newline; a token never legitimately ends in whitespace.
|
|
240
|
+
const secret = result.stdout.replace(/\r?\n$/, '');
|
|
241
|
+
return secret.length === 0 ? { kind: 'missing' } : { kind: 'found', secret };
|
|
242
|
+
};
|
|
243
|
+
return {
|
|
244
|
+
status,
|
|
245
|
+
read(account, options) {
|
|
246
|
+
const cached = memory.get(account);
|
|
247
|
+
// A re-read only makes sense when the backend, not memory, holds the
|
|
248
|
+
// authoritative copy for this account. Where a write could not be
|
|
249
|
+
// persisted, memory is the only copy there is and consulting the backend
|
|
250
|
+
// would throw the live credential away.
|
|
251
|
+
const reread = options?.fresh === true && isAvailable() && !memoryOnlyAccounts.has(account);
|
|
252
|
+
if (cached !== undefined && !reread)
|
|
253
|
+
return cached;
|
|
254
|
+
const outcome = readFromBackend(account);
|
|
255
|
+
if (outcome.kind === 'found') {
|
|
256
|
+
memory.set(account, outcome.secret);
|
|
257
|
+
return outcome.secret;
|
|
258
|
+
}
|
|
259
|
+
// Only a definite absence means another process removed the credential; a
|
|
260
|
+
// read that merely failed says nothing, so the cached copy stays.
|
|
261
|
+
if (outcome.kind === 'missing' && reread)
|
|
262
|
+
memory.delete(account);
|
|
263
|
+
// Either way this call cannot vouch for what the backend holds. A caller
|
|
264
|
+
// that asked for a fresh value is about to present it somewhere that
|
|
265
|
+
// punishes staleness, so it gets nothing rather than the cached guess.
|
|
266
|
+
if (reread)
|
|
267
|
+
return null;
|
|
268
|
+
return cached ?? null;
|
|
269
|
+
},
|
|
270
|
+
save(account, secret) {
|
|
271
|
+
memory.set(account, secret);
|
|
272
|
+
const markMemoryOnly = (reason, detail) => {
|
|
273
|
+
memoryOnlyAccounts.add(account);
|
|
274
|
+
return detail === undefined ? { persisted: false, reason } : { persisted: false, reason, detail };
|
|
275
|
+
};
|
|
276
|
+
if (!isAvailable()) {
|
|
277
|
+
return markMemoryOnly(backend === 'none' ? 'UNSUPPORTED_PLATFORM' : 'NO_BACKEND');
|
|
278
|
+
}
|
|
279
|
+
const command = buildSaveCommand(backend, service, account, secret);
|
|
280
|
+
if (!command) {
|
|
281
|
+
return markMemoryOnly('NO_BACKEND');
|
|
282
|
+
}
|
|
283
|
+
const result = runner(command);
|
|
284
|
+
if (result.status !== 0) {
|
|
285
|
+
// Never thrown: the caller's contract is "you may not get persistence",
|
|
286
|
+
// and a rejected write is just another way of not getting it. Throwing
|
|
287
|
+
// here would kill the documented session-only fallback at the exact
|
|
288
|
+
// moment it is needed.
|
|
289
|
+
writeFailureDetail = maskSecret(`${result.stderr}`.trim(), secret) || 'the credential store rejected the write';
|
|
290
|
+
return markMemoryOnly('WRITE_FAILED', writeFailureDetail);
|
|
291
|
+
}
|
|
292
|
+
// A zero exit is not proof the value landed. A backend tool that collects
|
|
293
|
+
// the secret interactively can store something else entirely and still
|
|
294
|
+
// succeed, and the caller would then commit to a credential that is only
|
|
295
|
+
// discovered to be wrong when the server rejects it — as an expired login,
|
|
296
|
+
// which sends the user back to a re-login that fails the same way. Reading
|
|
297
|
+
// it back turns that silent corruption into an honest WRITE_FAILED.
|
|
298
|
+
//
|
|
299
|
+
// A read that fails is not evidence either way, so it is not treated as a
|
|
300
|
+
// mismatch: doing so would revoke a token that did store, on nothing more
|
|
301
|
+
// than a locked keychain.
|
|
302
|
+
const stored = readFromBackend(account);
|
|
303
|
+
if (stored.kind === 'error') {
|
|
304
|
+
writeFailureDetail = `the write could not be verified: ${stored.detail}`;
|
|
305
|
+
return markMemoryOnly('WRITE_FAILED', writeFailureDetail);
|
|
306
|
+
}
|
|
307
|
+
if (stored.kind === 'missing' || stored.secret !== secret) {
|
|
308
|
+
writeFailureDetail = 'the credential store did not keep the value that was written';
|
|
309
|
+
return markMemoryOnly('WRITE_FAILED', writeFailureDetail);
|
|
310
|
+
}
|
|
311
|
+
writeFailureDetail = null;
|
|
312
|
+
memoryOnlyAccounts.delete(account);
|
|
313
|
+
return { persisted: true, reason: 'OK' };
|
|
314
|
+
},
|
|
315
|
+
remove(account) {
|
|
316
|
+
memory.delete(account);
|
|
317
|
+
if (!isAvailable())
|
|
318
|
+
return;
|
|
319
|
+
const command = buildRemoveCommand(backend, service, account);
|
|
320
|
+
if (!command)
|
|
321
|
+
return;
|
|
322
|
+
// Removing something that is already gone is success as far as the caller
|
|
323
|
+
// is concerned, so a non-zero status is not escalated.
|
|
324
|
+
runner(command);
|
|
325
|
+
},
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
let sharedStore = null;
|
|
329
|
+
/** Process-wide store. Tests build their own through {@link createCredentialStore}. */
|
|
330
|
+
export function getCredentialStore() {
|
|
331
|
+
if (!sharedStore) {
|
|
332
|
+
sharedStore = createCredentialStore();
|
|
333
|
+
}
|
|
334
|
+
return sharedStore;
|
|
335
|
+
}
|
|
336
|
+
/** Test-only: drop the cached process-wide store. */
|
|
337
|
+
export function resetCredentialStoreForTests() {
|
|
338
|
+
sharedStore = null;
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=credentialStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentialStore.js","sourceRoot":"","sources":["../../src/auth/credentialStore.ts"],"names":[],"mappings":"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"}
|