@kodycodes/cli 1.16.3 → 1.16.4
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 +8 -3
- package/dist/git-credential.d.ts +30 -3
- package/dist/git-credential.js +64 -8
- package/dist/git-credential.js.map +1 -1
- package/dist/help.js +8 -4
- package/dist/help.js.map +1 -1
- package/dist/setup-git.d.ts +23 -2
- package/dist/setup-git.js +60 -6
- package/dist/setup-git.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -170,15 +170,20 @@ authorizes every `@owner/name.git` you can access across all orgs — login
|
|
|
170
170
|
`--org` only scopes the MCP mint session, not git. When an API token is
|
|
171
171
|
already stored it probes `org_binding` on `GET /v1/tokens/current`; after a
|
|
172
172
|
fresh login with no API token yet, it mints via the login session and checks
|
|
173
|
-
`org_binding` on the minted token. Configures
|
|
173
|
+
`org_binding` on the minted token. Configures a **stable** credential helper
|
|
174
|
+
(global `kody` when available, otherwise `npx -y @kodycodes/cli@1 …` — never
|
|
175
|
+
an ephemeral `~/.npm/_npx/…` path). Re-running `setup-git` rewrites any old
|
|
176
|
+
npx-cache helper entry.
|
|
174
177
|
|
|
175
178
|
```bash
|
|
176
179
|
git config --global credential.https://kody.codes.helper '!… git-credential'
|
|
177
180
|
git config --global credential.https://kody.codes.useHttpPath true
|
|
178
181
|
```
|
|
179
182
|
|
|
180
|
-
|
|
181
|
-
|
|
183
|
+
The helper silently remints via your stored `kody login` when the API token is
|
|
184
|
+
expired or within an hour of expiry, so you should not need to re-run
|
|
185
|
+
`setup-git` for token lifetime. Push moves live HEAD only (packages do not
|
|
186
|
+
auto-publish). Existing `kody login` / `auth bootstrap` flows are unchanged.
|
|
182
187
|
|
|
183
188
|
## Local execute
|
|
184
189
|
|
package/dist/git-credential.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { loadStoredApiToken, type StoredApiToken } from './api-token-store.js';
|
|
2
|
+
import { loadCredentials, type SecretBackend, type StoreResolution } from './store.js';
|
|
2
3
|
export type GitCredentialAction = 'get' | 'store' | 'erase';
|
|
3
4
|
export type GitCredentialRequest = {
|
|
4
5
|
protocol?: string;
|
|
@@ -21,10 +22,32 @@ export declare function isKodyGitHttpsHost(input: {
|
|
|
21
22
|
host?: string;
|
|
22
23
|
expectedHost: string;
|
|
23
24
|
}): boolean;
|
|
25
|
+
export type EnsureGitApiTokenResult = {
|
|
26
|
+
stored: StoredApiToken;
|
|
27
|
+
refreshed: boolean;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Return a usable stored API token for git HTTPS. When the token is missing,
|
|
31
|
+
* expired, or within the refresh skew, silently remint via the `kody login`
|
|
32
|
+
* session (same scopes/lifetime as `auth setup-git`). Without a login session,
|
|
33
|
+
* returns the existing token if any (may still work) or null.
|
|
34
|
+
*/
|
|
35
|
+
export declare function ensureGitApiToken(input: {
|
|
36
|
+
apiUrl?: string;
|
|
37
|
+
mcpUrl?: string;
|
|
38
|
+
nowMs?: number;
|
|
39
|
+
backend?: SecretBackend;
|
|
40
|
+
resolution?: StoreResolution;
|
|
41
|
+
/** Test seam: mint cliCredentialBootstrap (defaults to MCP login session). */
|
|
42
|
+
mint?: (params: Record<string, unknown>) => Promise<unknown>;
|
|
43
|
+
loadLogin?: typeof loadCredentials;
|
|
44
|
+
loadApiToken?: typeof loadStoredApiToken;
|
|
45
|
+
}): Promise<EnsureGitApiTokenResult | null>;
|
|
24
46
|
/**
|
|
25
47
|
* Handle one git credential helper action.
|
|
26
|
-
* - `get`: return
|
|
27
|
-
*
|
|
48
|
+
* - `get`: return a `kody_at_…` for the configured Kody HTTPS host (reminting
|
|
49
|
+
* via `kody login` when the stored token is expired / near expiry)
|
|
50
|
+
* - `store` / `erase`: no-op (token life is managed by remint / logout)
|
|
28
51
|
*/
|
|
29
52
|
export declare function handleGitCredential(input: {
|
|
30
53
|
action: GitCredentialAction;
|
|
@@ -33,6 +56,10 @@ export declare function handleGitCredential(input: {
|
|
|
33
56
|
mcpUrl?: string;
|
|
34
57
|
backend?: SecretBackend;
|
|
35
58
|
resolution?: StoreResolution;
|
|
59
|
+
nowMs?: number;
|
|
60
|
+
mint?: (params: Record<string, unknown>) => Promise<unknown>;
|
|
61
|
+
loadLogin?: typeof loadCredentials;
|
|
62
|
+
loadApiToken?: typeof loadStoredApiToken;
|
|
36
63
|
}): Promise<string>;
|
|
37
64
|
export declare function parseGitCredentialAction(argv: ReadonlyArray<string>): GitCredentialAction;
|
|
38
65
|
/** Read stdin until EOF (git closes after the attribute block). */
|
package/dist/git-credential.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { createInterface } from 'node:readline';
|
|
2
|
+
import { authBootstrapWithScopes, cliCredentialBootstrapOperationId, resolveCliTokenLifetime, } from './auth-bootstrap.js';
|
|
3
|
+
import { loadStoredApiToken, } from './api-token-store.js';
|
|
2
4
|
import { defaultApiUrl, defaultMcpUrl } from './defaults.js';
|
|
3
|
-
import {
|
|
4
|
-
import { gitCredentialHostFromMcpUrl } from './setup-git.js';
|
|
5
|
+
import { callKodyApiOperation } from './mcp.js';
|
|
6
|
+
import { apiTokenNeedsRefresh, ensureSetupGitScopes, gitCredentialHostFromMcpUrl, setupGitDefaultScopes, } from './setup-git.js';
|
|
7
|
+
import { loadCredentials } from './store.js';
|
|
5
8
|
/**
|
|
6
9
|
* Parse git credential helper stdin (`key=value` lines, blank line ends).
|
|
7
10
|
* See `git help credential`.
|
|
@@ -40,10 +43,55 @@ export function isKodyGitHttpsHost(input) {
|
|
|
40
43
|
return false;
|
|
41
44
|
return input.host.toLowerCase() === input.expectedHost.toLowerCase();
|
|
42
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Return a usable stored API token for git HTTPS. When the token is missing,
|
|
48
|
+
* expired, or within the refresh skew, silently remint via the `kody login`
|
|
49
|
+
* session (same scopes/lifetime as `auth setup-git`). Without a login session,
|
|
50
|
+
* returns the existing token if any (may still work) or null.
|
|
51
|
+
*/
|
|
52
|
+
export async function ensureGitApiToken(input) {
|
|
53
|
+
const apiUrl = input.apiUrl || defaultApiUrl;
|
|
54
|
+
const mcpUrl = input.mcpUrl || defaultMcpUrl;
|
|
55
|
+
const loadApi = input.loadApiToken ?? loadStoredApiToken;
|
|
56
|
+
const loadLogin = input.loadLogin ?? loadCredentials;
|
|
57
|
+
const stored = loadApi(apiUrl, input.backend, input.resolution);
|
|
58
|
+
const nowMs = input.nowMs ?? Date.now();
|
|
59
|
+
if (stored && !apiTokenNeedsRefresh(stored, nowMs)) {
|
|
60
|
+
return { stored, refreshed: false };
|
|
61
|
+
}
|
|
62
|
+
if (!loadLogin(mcpUrl)) {
|
|
63
|
+
return stored ? { stored, refreshed: false } : null;
|
|
64
|
+
}
|
|
65
|
+
const mint = input.mint ??
|
|
66
|
+
(async (params) => callKodyApiOperation({
|
|
67
|
+
operationId: cliCredentialBootstrapOperationId,
|
|
68
|
+
params,
|
|
69
|
+
mcpUrl,
|
|
70
|
+
}));
|
|
71
|
+
try {
|
|
72
|
+
const scopes = ensureSetupGitScopes(stored?.scopes?.length ? stored.scopes : setupGitDefaultScopes);
|
|
73
|
+
const result = await authBootstrapWithScopes({
|
|
74
|
+
scopes,
|
|
75
|
+
lifetime: resolveCliTokenLifetime({ lifetime: 'long' }),
|
|
76
|
+
mint,
|
|
77
|
+
apiUrl,
|
|
78
|
+
backend: input.backend,
|
|
79
|
+
resolution: input.resolution,
|
|
80
|
+
});
|
|
81
|
+
return { stored: result.stored, refreshed: true };
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Stay silent on the git credential protocol (stdout). Fall back to
|
|
85
|
+
// whatever token we still have so a transient mint failure does not
|
|
86
|
+
// immediately break an otherwise-valid session.
|
|
87
|
+
return stored ? { stored, refreshed: false } : null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
43
90
|
/**
|
|
44
91
|
* Handle one git credential helper action.
|
|
45
|
-
* - `get`: return
|
|
46
|
-
*
|
|
92
|
+
* - `get`: return a `kody_at_…` for the configured Kody HTTPS host (reminting
|
|
93
|
+
* via `kody login` when the stored token is expired / near expiry)
|
|
94
|
+
* - `store` / `erase`: no-op (token life is managed by remint / logout)
|
|
47
95
|
*/
|
|
48
96
|
export async function handleGitCredential(input) {
|
|
49
97
|
if (input.action === 'store' || input.action === 'erase') {
|
|
@@ -60,14 +108,22 @@ export async function handleGitCredential(input) {
|
|
|
60
108
|
})) {
|
|
61
109
|
return '';
|
|
62
110
|
}
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
111
|
+
const ensured = await ensureGitApiToken({
|
|
112
|
+
apiUrl: input.apiUrl,
|
|
113
|
+
mcpUrl: input.mcpUrl,
|
|
114
|
+
backend: input.backend,
|
|
115
|
+
resolution: input.resolution,
|
|
116
|
+
nowMs: input.nowMs,
|
|
117
|
+
mint: input.mint,
|
|
118
|
+
loadLogin: input.loadLogin,
|
|
119
|
+
loadApiToken: input.loadApiToken,
|
|
120
|
+
});
|
|
121
|
+
if (!ensured?.stored.token) {
|
|
66
122
|
return '';
|
|
67
123
|
}
|
|
68
124
|
return formatGitCredentialOutput({
|
|
69
125
|
username: 'x',
|
|
70
|
-
password: stored.token,
|
|
126
|
+
password: ensured.stored.token,
|
|
71
127
|
});
|
|
72
128
|
}
|
|
73
129
|
export function parseGitCredentialAction(argv) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-credential.js","sourceRoot":"","sources":["../src/git-credential.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"git-credential.js","sourceRoot":"","sources":["../src/git-credential.ts"],"names":[],"mappings":"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"}
|
package/dist/help.js
CHANGED
|
@@ -70,14 +70,18 @@ Usage:
|
|
|
70
70
|
\`--lifetime long\`; reuses a suitable stored token). That token
|
|
71
71
|
authorizes every repo you can access across all orgs — login
|
|
72
72
|
\`--org\` only scopes the MCP mint session, not git. Requires a
|
|
73
|
-
server that advertises \`org_binding\`. Configures
|
|
74
|
-
\`credential.https://<host>.helper\`
|
|
75
|
-
|
|
73
|
+
server that advertises \`org_binding\`. Configures a stable
|
|
74
|
+
\`credential.https://<host>.helper\` (global \`kody\` or
|
|
75
|
+
\`npx -y @kodycodes/cli@<major>\`, never an ephemeral npx cache
|
|
76
|
+
path) + \`useHttpPath\`. Re-run to rewrite an old npx-cache
|
|
77
|
+
helper. Does not change \`kody login\` / existing auth flows.
|
|
76
78
|
|
|
77
79
|
git-credential
|
|
78
80
|
Git credential helper invoked by git after \`auth setup-git\`
|
|
79
81
|
(\`get\` returns username=x / password=kody_at_… for the Kody
|
|
80
|
-
host;
|
|
82
|
+
host; silently remints via \`kody login\` when the stored token
|
|
83
|
+
is expired or near expiry; \`store\`/\`erase\` are no-ops). Not
|
|
84
|
+
meant for interactive use.
|
|
81
85
|
|
|
82
86
|
api Call one Open API operation by operationId + flat --params
|
|
83
87
|
JSON (same shape as the MCP \`api\` tool). Uses scoped API
|
package/dist/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,MAAM,CAAC,MAAM,KAAK,GAAG,YAAY,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;QAsB7C,aAAa,CAAC,aAAa,CAAC;;;;;;;oCAOA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;eAyBvC,cAAc;;;;;;;;;+DASkC,cAAc
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,MAAM,CAAC,MAAM,KAAK,GAAG,YAAY,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;QAsB7C,aAAa,CAAC,aAAa,CAAC;;;;;;;oCAOA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;eAyBvC,cAAc;;;;;;;;;+DASkC,cAAc;;;;;;;;;;;;;;;;;;;;;wCAqBrC,cAAc;;;eAGvC,aAAa;;;;cAId,cAAc;;;;;eAKb,cAAc;;;;;;;;;;;;;;;eAed,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;sDAyByB,aAAa;IAC/D,cAAc;mDACiC,aAAa;;;CAG/D,CAAA"}
|
package/dist/setup-git.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { cliTokenLifetimeAliases, type ResolvedCliTokenLifetime } from './auth-bootstrap.js';
|
|
2
2
|
import { type StoredApiToken } from './api-token-store.js';
|
|
3
3
|
import type { SecretBackend, StoreResolution } from './store.js';
|
|
4
|
+
import { which as whichOnPath } from './which.js';
|
|
4
5
|
/** Scopes setup-git always requires for clone/fetch (+ push). */
|
|
5
6
|
export declare const setupGitRequiredScopes: readonly ["package:read", "package:write"];
|
|
6
7
|
/**
|
|
@@ -75,13 +76,33 @@ export declare function installGitCredentialConfig(input: {
|
|
|
75
76
|
helperCommand: string;
|
|
76
77
|
scope: '--global' | '--local';
|
|
77
78
|
};
|
|
79
|
+
/** Refresh git HTTPS tokens this long before `expiresAt` (or when past it). */
|
|
80
|
+
export declare const gitApiTokenRefreshSkewMs: number;
|
|
81
|
+
export declare function readCliPackageVersion(): string;
|
|
78
82
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
83
|
+
* True when the CLI entry lives under npm's ephemeral `npx` cache
|
|
84
|
+
* (`~/.npm/_npx/…`). Those paths break after `npm cache clean`.
|
|
85
|
+
*/
|
|
86
|
+
export declare function isEphemeralNpxEntryPath(entryPath: string): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Major version for `npx -y @kodycodes/cli@<major>`. Local
|
|
89
|
+
* `0.0.0-semantically-released` builds pin to `1` (current published line).
|
|
90
|
+
*/
|
|
91
|
+
export declare function cliMajorVersionForNpx(packageVersion: string): string;
|
|
92
|
+
/** Whether a stored API token should be reminted for git HTTPS. */
|
|
93
|
+
export declare function apiTokenNeedsRefresh(stored: Pick<StoredApiToken, 'expiresAt'> | null | undefined, nowMs?: number, skewMs?: number): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Helper argv for git config. Prefer a stable global `kody`, else a non-npx
|
|
96
|
+
* entry path, else `npx -y @kodycodes/cli@<major>` so cache cleans cannot
|
|
97
|
+
* orphan the helper. Re-running `auth setup-git` rewrites any prior ephemeral
|
|
98
|
+
* `~/.npm/_npx/…` helper entry.
|
|
81
99
|
*/
|
|
82
100
|
export declare function gitCredentialHelperCommand(input?: {
|
|
83
101
|
execPath?: string;
|
|
84
102
|
entryPath?: string;
|
|
103
|
+
env?: NodeJS.ProcessEnv;
|
|
104
|
+
which?: typeof whichOnPath;
|
|
105
|
+
packageVersion?: string;
|
|
85
106
|
}): string;
|
|
86
107
|
export type AuthSetupGitResult = {
|
|
87
108
|
host: string;
|
package/dist/setup-git.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { spawnSync } from 'node:child_process';
|
|
2
|
-
import {
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { apiTokenEnvVar, cliName, defaultApiUrl, defaultMcpUrl, } from './defaults.js';
|
|
3
4
|
import { authBootstrapWithScopes, cliTokenLifetimeAliases, resolveCliTokenLifetime, } from './auth-bootstrap.js';
|
|
4
5
|
import { loadStoredApiToken, } from './api-token-store.js';
|
|
5
6
|
import { OpenApiError, openApiGet } from './open-api-client.js';
|
|
7
|
+
import { which as whichOnPath } from './which.js';
|
|
6
8
|
/** Scopes setup-git always requires for clone/fetch (+ push). */
|
|
7
9
|
export const setupGitRequiredScopes = ['package:read', 'package:write'];
|
|
8
10
|
/**
|
|
@@ -140,17 +142,69 @@ export function installGitCredentialConfig(input) {
|
|
|
140
142
|
}
|
|
141
143
|
return { host: input.host, helperCommand: input.helperCommand, scope };
|
|
142
144
|
}
|
|
145
|
+
/** Refresh git HTTPS tokens this long before `expiresAt` (or when past it). */
|
|
146
|
+
export const gitApiTokenRefreshSkewMs = 60 * 60 * 1000;
|
|
147
|
+
const requireFromSetupGit = createRequire(import.meta.url);
|
|
148
|
+
export function readCliPackageVersion() {
|
|
149
|
+
try {
|
|
150
|
+
const pkg = requireFromSetupGit('../package.json');
|
|
151
|
+
return typeof pkg.version === 'string' ? pkg.version : '1';
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return '1';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* True when the CLI entry lives under npm's ephemeral `npx` cache
|
|
159
|
+
* (`~/.npm/_npx/…`). Those paths break after `npm cache clean`.
|
|
160
|
+
*/
|
|
161
|
+
export function isEphemeralNpxEntryPath(entryPath) {
|
|
162
|
+
const normalized = entryPath.replace(/\\/g, '/');
|
|
163
|
+
return (normalized.includes('/.npm/_npx/') ||
|
|
164
|
+
normalized.includes('/npm/_npx/') ||
|
|
165
|
+
/\/_npx\//.test(normalized));
|
|
166
|
+
}
|
|
143
167
|
/**
|
|
144
|
-
*
|
|
145
|
-
* builds
|
|
168
|
+
* Major version for `npx -y @kodycodes/cli@<major>`. Local
|
|
169
|
+
* `0.0.0-semantically-released` builds pin to `1` (current published line).
|
|
170
|
+
*/
|
|
171
|
+
export function cliMajorVersionForNpx(packageVersion) {
|
|
172
|
+
const major = Number.parseInt(packageVersion.split('.')[0] ?? '', 10);
|
|
173
|
+
if (Number.isFinite(major) && major >= 1)
|
|
174
|
+
return String(major);
|
|
175
|
+
return '1';
|
|
176
|
+
}
|
|
177
|
+
/** Whether a stored API token should be reminted for git HTTPS. */
|
|
178
|
+
export function apiTokenNeedsRefresh(stored, nowMs = Date.now(), skewMs = gitApiTokenRefreshSkewMs) {
|
|
179
|
+
if (!stored)
|
|
180
|
+
return true;
|
|
181
|
+
if (stored.expiresAt == null || stored.expiresAt === '')
|
|
182
|
+
return false;
|
|
183
|
+
const expiresMs = Date.parse(stored.expiresAt);
|
|
184
|
+
if (!Number.isFinite(expiresMs))
|
|
185
|
+
return true;
|
|
186
|
+
return expiresMs - nowMs <= skewMs;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Helper argv for git config. Prefer a stable global `kody`, else a non-npx
|
|
190
|
+
* entry path, else `npx -y @kodycodes/cli@<major>` so cache cleans cannot
|
|
191
|
+
* orphan the helper. Re-running `auth setup-git` rewrites any prior ephemeral
|
|
192
|
+
* `~/.npm/_npx/…` helper entry.
|
|
146
193
|
*/
|
|
147
194
|
export function gitCredentialHelperCommand(input) {
|
|
148
|
-
const
|
|
195
|
+
const env = input?.env ?? process.env;
|
|
196
|
+
const whichFn = input?.which ?? whichOnPath;
|
|
149
197
|
const entryPath = input?.entryPath ?? process.argv[1];
|
|
150
|
-
|
|
198
|
+
const globalKody = whichFn('kody', env);
|
|
199
|
+
if (globalKody && !isEphemeralNpxEntryPath(globalKody)) {
|
|
200
|
+
return `!${shellQuote(globalKody)} git-credential`;
|
|
201
|
+
}
|
|
202
|
+
if (entryPath && entryPath.length > 0 && !isEphemeralNpxEntryPath(entryPath)) {
|
|
203
|
+
const execPath = input?.execPath ?? process.execPath;
|
|
151
204
|
return `!${shellQuote(execPath)} ${shellQuote(entryPath)} git-credential`;
|
|
152
205
|
}
|
|
153
|
-
|
|
206
|
+
const major = cliMajorVersionForNpx(input?.packageVersion ?? readCliPackageVersion());
|
|
207
|
+
return `!npx -y ${cliName}@${major} git-credential`;
|
|
154
208
|
}
|
|
155
209
|
function shellQuote(value) {
|
|
156
210
|
if (/^[A-Za-z0-9_./:@+=,-]+$/.test(value))
|
package/dist/setup-git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-git.js","sourceRoot":"","sources":["../src/setup-git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"setup-git.js","sourceRoot":"","sources":["../src/setup-git.ts"],"names":[],"mappings":"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"}
|