@kodycodes/cli 1.12.1 → 1.13.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 CHANGED
@@ -64,6 +64,7 @@ Or run via `npx @kodycodes/cli` without a global install.
64
64
  | `kody logout` | Deletes stored CLI OAuth credentials and any stored bootstrap/API token. |
65
65
  | `kody status` | Shows CLI login / stored API token state without printing secrets. |
66
66
  | `kody auth bootstrap --code` | Redeems a one-shot `kody_bc_…` from MCP `cliCredentialBootstrap` and stores the resulting `kody_at_…` for `execute --local` (never prints the token). |
67
+ | `kody auth bootstrap --scopes` | Opt-in extra scopes: mints the code itself by passing `scopes` to `cliCredentialBootstrap` (with `--token`, else the `kody login` session, else a stored token), then redeems and stores it. See [Opt-in scopes](#opt-in-scopes). |
67
68
  | `kody whoami` | Confirms the CLI MCP connection and lists tools. With a scoped API token (and no login), shows token identity via the Open API. |
68
69
  | `kody search [query]` | Calls Kody `search` from the CLI (prefer the host MCP tool). Token-only auth uses Open API `GET /v1/search`. |
69
70
  | `kody api <operationId>` | Thin Open API wrapper matching the MCP `api` tool: `operationId` + flat `--params` JSON. Auth: `--token` / `KODY_API_TOKEN` / stored `auth bootstrap` token. |
@@ -114,13 +115,40 @@ npx @kodycodes/cli api usageGet --params '{}'
114
115
  until then use bootstrap or a scoped `kody_at_…` token.
115
116
  - Wrong/expired token → 401 with a mint-fresh-token message (or the OAuth
116
117
  platform-gap message when the bearer is login OAuth).
117
- - Wrong scopes → the error includes `insufficient_scope` and the required
118
- scope when Kody sends one.
118
+ - Wrong scopes → the error names the missing scope and the exact command to
119
+ mint a token that adds it (see [Opt-in scopes](#opt-in-scopes)). When your
120
+ org role lacks the permission, it says so instead: a new token cannot add
121
+ it, and an org Owner has to grant it.
119
122
  - Account flag off → the error includes `feature_disabled` and the
120
123
  `local-execute` feature flag. Another token does not bypass that flag.
121
124
  - Prefer the env var so the token stays out of shell history and `ps`.
122
125
  - Never scavenge host MCP OAuth tokens from disk (ADR 0053).
123
126
 
127
+ ## Opt-in scopes
128
+
129
+ Bootstrap tokens default to least-privilege local-execute scopes (no
130
+ `package:write`, for example). Opt in to more when a task needs them:
131
+
132
+ ```bash
133
+ # After `kody login` (mints any scope your org role grants):
134
+ npx @kodycodes/cli auth bootstrap --lifetime short \
135
+ --scopes org:execute,org:read,package:execute,package:read,package:write
136
+
137
+ # Agents on MCP without `kody login`: pass scopes when minting the code
138
+ # cliCredentialBootstrap({ lifetime: "short", scopes: ["org:execute", "org:read", "package:execute", "package:read", "package:write"] })
139
+ npx @kodycodes/cli auth bootstrap --code 'kody_bc_…' --lifetime short
140
+ ```
141
+
142
+ - `--scopes` replaces the default list, so include every scope you need.
143
+ - The CLI passes the list straight to `cliCredentialBootstrap`. It mints with
144
+ `--token` when given, else the `kody login` session, else `KODY_API_TOKEN` /
145
+ the stored token. A token can only mint scopes it already holds.
146
+ - A bootstrap code's scopes are fixed when it is minted, so `--code` with
147
+ `--scopes` is an error that prints the matching `cliCredentialBootstrap`
148
+ call.
149
+ - `insufficient_scope` errors print both commands with the full scope list
150
+ (your current scopes plus the missing one), so you can copy one and retry.
151
+
124
152
  ## Local execute
125
153
 
126
154
  `kody execute --local` runs the same execute module (default export called
@@ -177,9 +205,19 @@ npx @kodycodes/cli execute --local --file ./task.js --params '{"to":"me@example.
177
205
  imports `kody:@…`, it also calls `POST /v1/local-execute/package-graph` to
178
206
  download stamped package modules for local embedding
179
207
  ([platform issue](https://github.com/kentcdodds/kody/issues/2808)).
208
+ CapabilityProxy requests use a dedicated HTTP agent that waits up to 7
209
+ minutes for headers and between body chunks. Origin's 5-minute deadline for
210
+ a `fetch` with `{{secret:…}}` placeholders ends that call first, with its own
211
+ error. Node's default 300-second limit no longer cuts it short. With
212
+ `NODE_USE_ENV_PROXY=1` or `--use-env-proxy`, these requests still honor
213
+ `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY`, like Node's own fetch.
214
+ A PR preview's API host is `https://kody-pr-<n>-api.<subdomain>.workers.dev`;
215
+ the app origin (`kody-pr-<n>`) answers `/v1/*` with an HTML 404.
180
216
  - **Errors:** an expired/revoked token or an account without the
181
217
  `local-execute` flag fails fast with a clear message before any code runs.
182
218
  The token is only sent over https (plain http is allowed for localhost).
219
+ A non-JSON error body, such as an HTML page from the wrong `--api-url`, is
220
+ shortened to its title or a 200-character excerpt plus its size.
183
221
  Missing package-graph API, unresolved imports, or missing artifacts fail
184
222
  clearly — there is **no silent fallback** to cloud `kody.execute`.
185
223
  - **Lifetime:** no execution time limit locally; Ctrl-C (or SIGTERM) stops
@@ -48,10 +48,22 @@ export declare function missingLocalExecuteAuthMessage(purpose?: string): string
48
48
  export declare function missingCliAuthMessage(): string;
49
49
  /** 401 when CapabilityProxy rejected a non-`kody_at_` bearer (typically CLI OAuth). */
50
50
  export declare function rejectedOauthBearerMessage(): string;
51
- export declare function insufficientScopeMessage(input: {
52
- requiredScope?: string | null;
53
- /** CapabilityProxy / package-graph: prefer bootstrap over tokenCreate. */
54
- includeLocalExecute?: boolean;
51
+ /** What an `insufficient_scope` error body says about the missing scope. */
52
+ export type InsufficientScopeDetails = {
53
+ requiredScope: string | null;
54
+ /** Full scope list for a replacement token (the caller's scopes plus the missing one). */
55
+ mintScopes: Array<string> | null;
56
+ /** Platform denial code, e.g. `credential_scope` or `missing_permission`. */
57
+ denial: string | null;
58
+ };
59
+ export declare function readInsufficientScopeDetails(body: unknown): InsufficientScopeDetails;
60
+ /** `npx @kodycodes/cli auth bootstrap --lifetime short --scopes a,b` */
61
+ export declare function cliBootstrapScopesCommand(scopes: ReadonlyArray<string>, lifetimeFlags?: string): string;
62
+ /** `cliCredentialBootstrap({ lifetime: "short", scopes: ["a", "b"] })` */
63
+ export declare function cliBootstrapMintCall(scopes: ReadonlyArray<string>, lifetime?: Record<string, string | number>): string;
64
+ export declare function insufficientScopeMessage(input: Partial<InsufficientScopeDetails> & {
65
+ /** Scopes the CLI already knows the current token holds. */
66
+ currentScopes?: ReadonlyArray<string> | null;
55
67
  }): string;
56
68
  export declare function featureDisabledMessage(): string;
57
69
  export declare function requireApiToken(values?: {
package/dist/api-token.js CHANGED
@@ -110,14 +110,66 @@ export function missingCliAuthMessage() {
110
110
  export function rejectedOauthBearerMessage() {
111
111
  return `Kody rejected the bearer from \`kody login\`: the Open API still accepts only scoped \`kody_at_…\` API tokens on CapabilityProxy / package-graph (not MCP OAuth). See ${localExecuteOauthPlatformIssueUrl}. Until that lands, ${apiTokenMintInstructions()}`;
112
112
  }
113
+ export function readInsufficientScopeDetails(body) {
114
+ const details = isRecord(body) && isRecord(body.error) && isRecord(body.error.details)
115
+ ? body.error.details
116
+ : null;
117
+ if (!details)
118
+ return { requiredScope: null, mintScopes: null, denial: null };
119
+ const requiredScope = readNonEmptyString(details.required_scope) ??
120
+ readNonEmptyString(details.required_permission) ??
121
+ readStringList(details.required_scopes)?.join(', ') ??
122
+ null;
123
+ return {
124
+ requiredScope,
125
+ mintScopes: readStringList(details.mint_scopes),
126
+ denial: readNonEmptyString(details.denial),
127
+ };
128
+ }
129
+ /** `npx @kodycodes/cli auth bootstrap --lifetime short --scopes a,b` */
130
+ export function cliBootstrapScopesCommand(scopes, lifetimeFlags = '--lifetime short') {
131
+ return `npx @kodycodes/cli auth bootstrap ${lifetimeFlags} --scopes ${scopes.join(',')}`;
132
+ }
133
+ /** `cliCredentialBootstrap({ lifetime: "short", scopes: ["a", "b"] })` */
134
+ export function cliBootstrapMintCall(scopes, lifetime = { lifetime: 'short' }) {
135
+ const fields = [
136
+ ...Object.entries(lifetime).map(([key, value]) => `${key}: ${JSON.stringify(value)}`),
137
+ `scopes: [${scopes.map((scope) => JSON.stringify(scope)).join(', ')}]`,
138
+ ];
139
+ return `cliCredentialBootstrap({ ${fields.join(', ')} })`;
140
+ }
113
141
  export function insufficientScopeMessage(input) {
114
- const required = input.requiredScope ? ` The server requires "${input.requiredScope}".` : '';
115
- const mint = input.includeLocalExecute
116
- ? `${cliBootstrapInstructions()} (lifetime short|long). ${apiTokenMintInstructions()}`
117
- : `${cliBootstrapInstructions()} (lifetime short|long). Or for CI/headless, mint with tokenCreate${input.requiredScope
118
- ? ` that includes "${input.requiredScope}"`
119
- : ' that includes the required scope'}, then pass --token or set ${apiTokenEnvVar}.`;
120
- return `Kody returned insufficient_scope.${required} ${mint}`;
142
+ const required = input.requiredScope ?? null;
143
+ if (input.denial === 'missing_permission') {
144
+ return `Kody returned insufficient_scope: your org role does not grant ${required ? `"${required}"` : 'the required permission'}. A new token cannot add it; an org Owner can grant it.`;
145
+ }
146
+ if (!required) {
147
+ return `Kody returned insufficient_scope. Mint a token that includes the missing scope: run \`${cliBootstrapScopesCommand(['<scope>', '…'])}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(['<scope>', '…'])}\` and run its cli_command. Scopes replace the defaults, so list every scope you need. For CI/headless, mint with tokenCreate and pass --token or set ${apiTokenEnvVar}.`;
148
+ }
149
+ const mintScopes = input.mintScopes && input.mintScopes.length > 0
150
+ ? input.mintScopes
151
+ : input.currentScopes && input.currentScopes.length > 0
152
+ ? [...new Set([...input.currentScopes, ...required.split(/,\s*/)])].sort()
153
+ : null;
154
+ if (!mintScopes) {
155
+ return `Kody returned insufficient_scope: this token is missing "${required}". Mint a token whose scopes include "${required}" plus the ones you already use (scopes replace the defaults): run \`${cliBootstrapScopesCommand(['<current scopes>', required])}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(['<current scopes>', required])}\` and run its cli_command. For CI/headless, mint with tokenCreate including "${required}" and pass --token or set ${apiTokenEnvVar}.`;
156
+ }
157
+ return `Kody returned insufficient_scope: this token is missing "${required}". Mint one that includes it: run \`${cliBootstrapScopesCommand(mintScopes)}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(mintScopes)}\` and run its cli_command. For CI/headless, mint with tokenCreate using those scopes and pass --token or set ${apiTokenEnvVar}.`;
158
+ }
159
+ function isRecord(value) {
160
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
161
+ }
162
+ function readNonEmptyString(value) {
163
+ return typeof value === 'string' && value.trim() ? value.trim() : null;
164
+ }
165
+ function readStringList(value) {
166
+ if (!Array.isArray(value))
167
+ return null;
168
+ const list = value
169
+ .filter((item) => typeof item === 'string')
170
+ .map((item) => item.trim())
171
+ .filter(Boolean);
172
+ return list.length > 0 ? list : null;
121
173
  }
122
174
  export function featureDisabledMessage() {
123
175
  return 'Kody returned feature_disabled: CapabilityProxy is not enabled for this Kody account (feature flag `local-execute`). `execute --local` and token-auth cloud execute both stop here; minting another token does not bypass the flag. Browser `kody login` can still run cloud execute over MCP.';
@@ -1 +1 @@
1
- {"version":3,"file":"api-token.js","sourceRoot":"","sources":["../src/api-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EACN,cAAc,EACd,aAAa,EACb,aAAa,GACb,MAAM,eAAe,CAAA;AAGtB,mFAAmF;AACnF,MAAM,CAAC,MAAM,iCAAiC,GAC7C,gDAAgD,CAAA;AAYjD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;AAEzE,SAAS,WAAW,CAAC,KAAa;IACjC,IAAI,CAAC;QACJ,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB;IAC7C,OAAO,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;AACzC,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,cAAc,CAC7B,SAAiB,aAAa,EAC9B,SAAiB,aAAa;IAE9B,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IAC/B,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IAC/B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IAE9B,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;IACnE,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;IACnE,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;QACpC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YAChD,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC5C,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACxE,MAAM,eAAe,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC1D,MAAM,eAAe,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC1D,IAAI,eAAe,IAAI,eAAe,EAAE,CAAC;QACxC,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe;YAAE,OAAO,KAAK,CAAA;QACtD,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvD,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvD,OAAO,CACN,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YACrC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC7D,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CACtC,CAAA;IACF,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,OAAO,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACrD,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IAC/B,IAAI,CAAC,GAAG;QAAE,OAAO,qBAAqB,CAAA;IACtC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,uBAAuB,CAAA;IAC/B,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAA;IAC3C,IAAI,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA;QAC9B,OAAO,WAAW,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;IACrC,CAAC;IACD,OAAO,eAAe,QAAQ,EAAE,CAAA;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC3B,SAA6B,EAAE,EAC/B,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAChE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACpC,QAAoC,EAAE;IAEtC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IACxD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAA;IACvB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,aAAa,CAAA;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,IAAI,kBAAkB,CAAA;IACxD,OAAO,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,IAAI,IAAI,CAAA;AACvF,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC7C,OAAO,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACvC,OAAO,8NAA8N,cAAc,GAAG,CAAA;AACvP,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,wBAAwB;IACvC,OAAO,+KAA+K,CAAA;AACvL,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACrD,OAAO,GAAG,OAAO,mCAAmC,wBAAwB,EAAE,QAAQ,wBAAwB,EAAE,EAAE,CAAA;AACnH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAC7C,UAAkB,iBAAiB;IAEnC,OAAO,GAAG,OAAO,gBAAgB,wBAAwB,EAAE,gDAAgD,wBAAwB,EAAE,EAAE,CAAA;AACxI,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,qBAAqB;IACpC,OAAO,2CAA2C,wBAAwB,EAAE,wIAAwI,wBAAwB,EAAE,EAAE,CAAA;AACjP,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,0BAA0B;IACzC,OAAO,yKAAyK,iCAAiC,uBAAuB,wBAAwB,EAAE,EAAE,CAAA;AACrQ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAIxC;IACA,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,yBAAyB,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5F,MAAM,IAAI,GAAG,KAAK,CAAC,mBAAmB;QACrC,CAAC,CAAC,GAAG,wBAAwB,EAAE,2BAA2B,wBAAwB,EAAE,EAAE;QACtF,CAAC,CAAC,GAAG,wBAAwB,EAAE,oEAC7B,KAAK,CAAC,aAAa;YAClB,CAAC,CAAC,mBAAmB,KAAK,CAAC,aAAa,GAAG;YAC3C,CAAC,CAAC,mCACJ,8BAA8B,cAAc,GAAG,CAAA;IACjD,OAAO,oCAAoC,QAAQ,IAAI,IAAI,EAAE,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB;IACrC,OAAO,gSAAgS,CAAA;AACxS,CAAC;AAED,MAAM,UAAU,eAAe,CAC9B,SAA6B,EAAE,EAC/B,MAAyB,OAAO,CAAC,GAAG,EACpC,UAAkB,cAAc,EAChC,UAAmE,EAAE;IAErE,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACnC,WAAW,EAAE,MAAM;QACnB,GAAG;QACH,GAAG,OAAO;KACV,CAAC,CAAA;IACF,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5D,OAAO,KAAK,CAAA;AACb,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,oBAAoB,CAAC,MAA0B;IAC9D,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;AAC1E,CAAC"}
1
+ {"version":3,"file":"api-token.js","sourceRoot":"","sources":["../src/api-token.ts"],"names":[],"mappings":"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"}
@@ -81,16 +81,35 @@ export declare function resolveCliTokenLifetime(input: {
81
81
  export declare function bootstrapRedeemRequestBody(code: string, lifetime: ResolvedCliTokenLifetime): BootstrapRedeemRequestBody;
82
82
  /** Parse a CLI `--idle-ttl-seconds` / `--max-lifetime-seconds` string flag. */
83
83
  export declare function parseCliLifetimeSecondsFlag(raw: string | undefined, flag: '--idle-ttl-seconds' | '--max-lifetime-seconds'): number | undefined;
84
+ /**
85
+ * Lifetime for redeem after a successful mint. Trusts the server's clamped
86
+ * idle/max seconds (may be below CLI flag mins, or max below the requested
87
+ * idle). Only coerces idle down when max < idle so the pair stays consistent.
88
+ */
89
+ export declare function resolveMintedRedeemLifetime(minted: {
90
+ idle_ttl_seconds: number;
91
+ max_lifetime_seconds: number;
92
+ }): Extract<ResolvedCliTokenLifetime, {
93
+ kind: 'explicit';
94
+ }>;
84
95
  /**
85
96
  * POST /v1/tokens/bootstrap/redeem with JSON `{ code, lifetime }` or
86
97
  * `{ code, idle_ttl_seconds, max_lifetime_seconds }` and **no** Authorization
87
98
  * header (ADR 0056). Returns the minted `kody_at_…` once.
99
+ *
100
+ * Pass `trustedMintLifetime` after cliCredentialBootstrap so server-clamped
101
+ * seconds are redeemed without re-applying CLI flag mins (max may be below
102
+ * the requested idle or below `--idle-ttl-seconds` minimum).
88
103
  */
89
104
  export declare function redeemBootstrapCode(input: {
90
105
  code: string;
91
106
  lifetime?: string | null;
92
107
  idleTtlSeconds?: number;
93
108
  maxLifetimeSeconds?: number;
109
+ trustedMintLifetime?: {
110
+ idle_ttl_seconds: number;
111
+ max_lifetime_seconds: number;
112
+ };
94
113
  apiUrl?: string;
95
114
  fetchFn?: typeof fetch;
96
115
  }): Promise<BootstrapRedeemResponse>;
@@ -117,3 +136,35 @@ export declare function authBootstrap(input: {
117
136
  backendKind: SecretBackend['kind'];
118
137
  backendPath?: string;
119
138
  }>;
139
+ export declare const cliCredentialBootstrapOperationId = "cliCredentialBootstrap";
140
+ export type BootstrapMintResponse = {
141
+ bootstrap_code: string;
142
+ scopes: Array<string>;
143
+ idle_ttl_seconds: number;
144
+ max_lifetime_seconds: number;
145
+ };
146
+ /**
147
+ * Parse `--scopes`. Comma- or space-separated, deduped, order kept. The list
148
+ * replaces cliCredentialBootstrap's default scopes; the server validates names.
149
+ */
150
+ export declare function parseCliScopesFlag(raw: string | undefined): Array<string> | undefined;
151
+ /** cliCredentialBootstrap params for an explicit scope list and lifetime. */
152
+ export declare function bootstrapMintParams(scopes: ReadonlyArray<string>, lifetime: ResolvedCliTokenLifetime): Record<string, unknown>;
153
+ export declare function bootstrapMintLifetimeFields(lifetime: ResolvedCliTokenLifetime): Record<string, string | number>;
154
+ export declare function parseBootstrapMintResponse(body: unknown): BootstrapMintResponse;
155
+ /**
156
+ * Mint a bootstrap code with explicit `scopes` through the caller's current
157
+ * Kody credential, then redeem and store it like `authBootstrap`. Redeems with
158
+ * the minted idle/max seconds because the server may clamp the max lifetime to
159
+ * a parent API token's remaining lifetime — those values must not be
160
+ * re-validated as CLI lifetime flags (which would burn the one-shot code).
161
+ */
162
+ export declare function authBootstrapWithScopes(input: {
163
+ scopes: ReadonlyArray<string>;
164
+ lifetime: ResolvedCliTokenLifetime;
165
+ mint: (params: Record<string, unknown>) => Promise<unknown>;
166
+ apiUrl?: string;
167
+ fetchFn?: typeof fetch;
168
+ backend?: SecretBackend;
169
+ resolution?: StoreResolution;
170
+ }): Promise<Awaited<ReturnType<typeof authBootstrap>>>;
@@ -1,5 +1,6 @@
1
1
  import { assertTokenSafeApiUrl, capabilityProxyUrl } from './capability-proxy.js';
2
2
  import { cliName, defaultApiUrl } from './defaults.js';
3
+ import { summarizeNonJsonErrorBody } from './http-error-body.js';
3
4
  import { describeNetworkError } from './network-error.js';
4
5
  import { readPackageVersion } from './package-info.js';
5
6
  import { saveStoredApiToken, } from './api-token-store.js';
@@ -124,18 +125,38 @@ export function parseCliLifetimeSecondsFlag(raw, flag) {
124
125
  }
125
126
  return Number(trimmed);
126
127
  }
128
+ /**
129
+ * Lifetime for redeem after a successful mint. Trusts the server's clamped
130
+ * idle/max seconds (may be below CLI flag mins, or max below the requested
131
+ * idle). Only coerces idle down when max < idle so the pair stays consistent.
132
+ */
133
+ export function resolveMintedRedeemLifetime(minted) {
134
+ const maxLifetimeSeconds = minted.max_lifetime_seconds;
135
+ const idleTtlSeconds = Math.min(minted.idle_ttl_seconds, maxLifetimeSeconds);
136
+ return {
137
+ kind: 'explicit',
138
+ idleTtlSeconds,
139
+ maxLifetimeSeconds,
140
+ };
141
+ }
127
142
  /**
128
143
  * POST /v1/tokens/bootstrap/redeem with JSON `{ code, lifetime }` or
129
144
  * `{ code, idle_ttl_seconds, max_lifetime_seconds }` and **no** Authorization
130
145
  * header (ADR 0056). Returns the minted `kody_at_…` once.
146
+ *
147
+ * Pass `trustedMintLifetime` after cliCredentialBootstrap so server-clamped
148
+ * seconds are redeemed without re-applying CLI flag mins (max may be below
149
+ * the requested idle or below `--idle-ttl-seconds` minimum).
131
150
  */
132
151
  export async function redeemBootstrapCode(input) {
133
152
  const code = assertCliBootstrapCode(input.code);
134
- const lifetime = resolveCliTokenLifetime({
135
- lifetime: input.lifetime,
136
- idleTtlSeconds: input.idleTtlSeconds,
137
- maxLifetimeSeconds: input.maxLifetimeSeconds,
138
- });
153
+ const lifetime = input.trustedMintLifetime
154
+ ? resolveMintedRedeemLifetime(input.trustedMintLifetime)
155
+ : resolveCliTokenLifetime({
156
+ lifetime: input.lifetime,
157
+ idleTtlSeconds: input.idleTtlSeconds,
158
+ maxLifetimeSeconds: input.maxLifetimeSeconds,
159
+ });
139
160
  const apiUrl = input.apiUrl || defaultApiUrl;
140
161
  assertTokenSafeApiUrl(apiUrl);
141
162
  const url = capabilityProxyUrl(apiUrl, bootstrapRedeemPath);
@@ -202,6 +223,83 @@ export async function authBootstrap(input) {
202
223
  ...(saved.backend.path ? { backendPath: saved.backend.path } : {}),
203
224
  };
204
225
  }
226
+ export const cliCredentialBootstrapOperationId = 'cliCredentialBootstrap';
227
+ /**
228
+ * Parse `--scopes`. Comma- or space-separated, deduped, order kept. The list
229
+ * replaces cliCredentialBootstrap's default scopes; the server validates names.
230
+ */
231
+ export function parseCliScopesFlag(raw) {
232
+ if (raw === undefined)
233
+ return undefined;
234
+ const scopes = [
235
+ ...new Set(raw
236
+ .split(/[\s,]+/)
237
+ .map((scope) => scope.trim())
238
+ .filter(Boolean)),
239
+ ];
240
+ if (scopes.length === 0) {
241
+ throw new Error('--scopes needs at least one scope (e.g. --scopes org:execute,package:write).');
242
+ }
243
+ return scopes;
244
+ }
245
+ /** cliCredentialBootstrap params for an explicit scope list and lifetime. */
246
+ export function bootstrapMintParams(scopes, lifetime) {
247
+ return {
248
+ scopes: [...scopes],
249
+ ...bootstrapMintLifetimeFields(lifetime),
250
+ };
251
+ }
252
+ export function bootstrapMintLifetimeFields(lifetime) {
253
+ return lifetime.kind === 'alias'
254
+ ? { lifetime: lifetime.lifetime }
255
+ : {
256
+ idle_ttl_seconds: lifetime.idleTtlSeconds,
257
+ max_lifetime_seconds: lifetime.maxLifetimeSeconds,
258
+ };
259
+ }
260
+ export function parseBootstrapMintResponse(body) {
261
+ if (!isRecord(body) ||
262
+ typeof body.bootstrap_code !== 'string' ||
263
+ typeof body.idle_ttl_seconds !== 'number' ||
264
+ typeof body.max_lifetime_seconds !== 'number') {
265
+ throw new Error('cliCredentialBootstrap returned an unexpected response.');
266
+ }
267
+ return {
268
+ bootstrap_code: body.bootstrap_code,
269
+ scopes: Array.isArray(body.scopes)
270
+ ? body.scopes.filter((scope) => typeof scope === 'string')
271
+ : [],
272
+ idle_ttl_seconds: body.idle_ttl_seconds,
273
+ max_lifetime_seconds: body.max_lifetime_seconds,
274
+ };
275
+ }
276
+ /**
277
+ * Mint a bootstrap code with explicit `scopes` through the caller's current
278
+ * Kody credential, then redeem and store it like `authBootstrap`. Redeems with
279
+ * the minted idle/max seconds because the server may clamp the max lifetime to
280
+ * a parent API token's remaining lifetime — those values must not be
281
+ * re-validated as CLI lifetime flags (which would burn the one-shot code).
282
+ */
283
+ export async function authBootstrapWithScopes(input) {
284
+ const minted = parseBootstrapMintResponse(await input.mint(bootstrapMintParams(input.scopes, input.lifetime)));
285
+ const apiUrl = input.apiUrl || defaultApiUrl;
286
+ const redeemed = await redeemBootstrapCode({
287
+ code: minted.bootstrap_code,
288
+ trustedMintLifetime: {
289
+ idle_ttl_seconds: minted.idle_ttl_seconds,
290
+ max_lifetime_seconds: minted.max_lifetime_seconds,
291
+ },
292
+ apiUrl,
293
+ fetchFn: input.fetchFn,
294
+ });
295
+ const stored = storedApiTokenFromRedeem({ apiUrl, redeemed });
296
+ const saved = saveStoredApiToken(stored, input.backend, input.resolution);
297
+ return {
298
+ stored,
299
+ backendKind: saved.backend.kind,
300
+ ...(saved.backend.path ? { backendPath: saved.backend.path } : {}),
301
+ };
302
+ }
205
303
  function readRequiredInteger(input) {
206
304
  if (!Number.isInteger(input.value) ||
207
305
  input.value < input.min ||
@@ -251,8 +349,9 @@ async function readJson(response) {
251
349
  }
252
350
  function readErrorBody(body) {
253
351
  if (!isRecord(body) || body.error == null) {
254
- if (typeof body === 'string' && body.trim())
255
- return { code: null, message: body };
352
+ if (typeof body === 'string' && body.trim()) {
353
+ return { code: null, message: summarizeNonJsonErrorBody(body) };
354
+ }
256
355
  if (isRecord(body) && typeof body.message === 'string') {
257
356
  return { code: null, message: body.message };
258
357
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth-bootstrap.js","sourceRoot":"","sources":["../src/auth-bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-bootstrap.js","sourceRoot":"","sources":["../src/auth-bootstrap.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type Dispatcher } from 'undici';
1
2
  /**
2
3
  * HTTP contract for Kody's CapabilityProxy (Open API `/v1`). Local execute
3
4
  * runs user code in workerd and forwards every `kody:runtime` call here with
@@ -17,6 +18,26 @@
17
18
  */
18
19
  export declare const capabilityProxySessionPath = "v1/capability-proxy/session";
19
20
  export declare const capabilityProxyCallPath = "v1/capability-proxy/call";
21
+ /**
22
+ * Origin runs a placeholder `fetch` under a 5-minute deadline that starts only
23
+ * after quota checks and placeholder fill, buffers the whole upstream body,
24
+ * and sends headers once that body has ended. Node's global fetch gives up
25
+ * after 300s without headers (undici `headersTimeout`), which would cut the
26
+ * call before the gateway's own deadline fires, so CapabilityProxy requests
27
+ * use a dedicated undici Agent that waits longer than the deadline plus
28
+ * origin overhead.
29
+ */
30
+ export declare const capabilityProxyGatewayDeadlineMs: number;
31
+ export declare const capabilityProxyHttpTimeoutMs: number;
32
+ /**
33
+ * Node routes global fetch through `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY`
34
+ * only when `NODE_USE_ENV_PROXY=1` or `--use-env-proxy` is set. A dispatcher
35
+ * passed to fetch replaces that global proxy agent, so mirror the same opt-in.
36
+ */
37
+ export declare function nodeUsesEnvProxy(env?: NodeJS.ProcessEnv, execArgv?: ReadonlyArray<string>): boolean;
38
+ export declare function createCapabilityProxyAgent(timeoutMs?: number, options?: {
39
+ useEnvProxy?: boolean;
40
+ }): Dispatcher;
20
41
  export type CapabilityProxySession = {
21
42
  scopes: Array<string>;
22
43
  expiresAt: string | null;
@@ -31,6 +52,8 @@ export type CapabilityProxyClientInput = {
31
52
  token: string;
32
53
  fetchFn?: typeof fetch;
33
54
  signal?: AbortSignal;
55
+ /** Defaults to the shared Agent from `createCapabilityProxyAgent()`. */
56
+ dispatcher?: Dispatcher;
34
57
  };
35
58
  export declare class CapabilityProxyError extends Error {
36
59
  readonly status: number | null;
@@ -1,4 +1,5 @@
1
- import { apiTokenMintInstructions, cliBootstrapInstructions, featureDisabledMessage, insufficientScopeMessage, isScopedApiToken, rejectedOauthBearerMessage, } from './api-token.js';
1
+ import { Agent, EnvHttpProxyAgent } from 'undici';
2
+ import { apiTokenMintInstructions, cliBootstrapInstructions, featureDisabledMessage, insufficientScopeMessage, readInsufficientScopeDetails, isScopedApiToken, rejectedOauthBearerMessage, } from './api-token.js';
2
3
  import { apiTokenEnvVar, cliName } from './defaults.js';
3
4
  import { describeNetworkError } from './network-error.js';
4
5
  import { readPackageVersion } from './package-info.js';
@@ -21,6 +22,39 @@ import { readPackageVersion } from './package-info.js';
21
22
  */
22
23
  export const capabilityProxySessionPath = 'v1/capability-proxy/session';
23
24
  export const capabilityProxyCallPath = 'v1/capability-proxy/call';
25
+ /**
26
+ * Origin runs a placeholder `fetch` under a 5-minute deadline that starts only
27
+ * after quota checks and placeholder fill, buffers the whole upstream body,
28
+ * and sends headers once that body has ended. Node's global fetch gives up
29
+ * after 300s without headers (undici `headersTimeout`), which would cut the
30
+ * call before the gateway's own deadline fires, so CapabilityProxy requests
31
+ * use a dedicated undici Agent that waits longer than the deadline plus
32
+ * origin overhead.
33
+ */
34
+ export const capabilityProxyGatewayDeadlineMs = 5 * 60_000;
35
+ export const capabilityProxyHttpTimeoutMs = 7 * 60_000;
36
+ /**
37
+ * Node routes global fetch through `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY`
38
+ * only when `NODE_USE_ENV_PROXY=1` or `--use-env-proxy` is set. A dispatcher
39
+ * passed to fetch replaces that global proxy agent, so mirror the same opt-in.
40
+ */
41
+ export function nodeUsesEnvProxy(env = process.env, execArgv = process.execArgv) {
42
+ if (env.NODE_USE_ENV_PROXY === '1')
43
+ return true;
44
+ const flags = [...execArgv, ...(env.NODE_OPTIONS ?? '').split(/\s+/)];
45
+ return flags.includes('--use-env-proxy');
46
+ }
47
+ export function createCapabilityProxyAgent(timeoutMs = capabilityProxyHttpTimeoutMs, options = {}) {
48
+ const timeouts = { headersTimeout: timeoutMs, bodyTimeout: timeoutMs };
49
+ return (options.useEnvProxy ?? nodeUsesEnvProxy())
50
+ ? new EnvHttpProxyAgent(timeouts)
51
+ : new Agent(timeouts);
52
+ }
53
+ let defaultCapabilityProxyAgent = null;
54
+ function capabilityProxyAgent() {
55
+ defaultCapabilityProxyAgent ??= createCapabilityProxyAgent();
56
+ return defaultCapabilityProxyAgent;
57
+ }
24
58
  export class CapabilityProxyError extends Error {
25
59
  status;
26
60
  code;
@@ -88,9 +122,12 @@ export async function callCapabilityProxy(input) {
88
122
  }
89
123
  async function send(input, url, init) {
90
124
  const fetchFn = input.fetchFn ?? fetch;
125
+ // Global fetch on Node 22+ (bundled undici 6–8) accepts undici 7 dispatchers.
126
+ const dispatcherInit = { dispatcher: input.dispatcher ?? capabilityProxyAgent() };
91
127
  try {
92
128
  return await fetchFn(url, {
93
129
  ...init,
130
+ ...dispatcherInit,
94
131
  signal: input.signal,
95
132
  headers: {
96
133
  ...init.headers,
@@ -143,10 +180,7 @@ function describeFailure(status, body, url, stage, token) {
143
180
  return new CapabilityProxyError(`${featureDisabledMessage()}${detail}`, { status, code });
144
181
  }
145
182
  if (code === 'insufficient_scope') {
146
- return new CapabilityProxyError(`${insufficientScopeMessage({
147
- requiredScope: requiredScopeFrom(body),
148
- includeLocalExecute: true,
149
- })}${detail}`, { status, code });
183
+ return new CapabilityProxyError(`${insufficientScopeMessage(readInsufficientScopeDetails(body))}${detail}`, { status, code });
150
184
  }
151
185
  if (status === 403 && stage === 'session') {
152
186
  return new CapabilityProxyError(`The API token is not allowed to use CapabilityProxy${code ? ` (${code})` : ''}. ${cliBootstrapInstructions()} (lifetime short|long). ${apiTokenMintInstructions()}${detail}`, { status, code });
@@ -156,18 +190,6 @@ function describeFailure(status, body, url, stage, token) {
156
190
  }
157
191
  return new CapabilityProxyError(failure?.message ?? `Kody API request failed with HTTP ${status} (${url.pathname}).`, { status, code });
158
192
  }
159
- function requiredScopeFrom(body) {
160
- if (!isRecord(body) || !isRecord(body.error) || !isRecord(body.error.details))
161
- return null;
162
- const required = body.error.details.required_scope;
163
- if (typeof required === 'string' && required.trim())
164
- return required.trim();
165
- const requiredList = body.error.details.required_scopes;
166
- if (!Array.isArray(requiredList))
167
- return null;
168
- const scopes = requiredList.filter((scope) => typeof scope === 'string' && scope.trim().length > 0);
169
- return scopes.length > 0 ? scopes.join(', ') : null;
170
- }
171
193
  function isRecord(value) {
172
194
  return value !== null && typeof value === 'object' && !Array.isArray(value);
173
195
  }