diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 727e2bea..f87262aa 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.14.0" + ".": "0.15.0" } diff --git a/.stats.yml b/.stats.yml index 82c3873e..c248682d 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 193 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gitpod%2Fgitpod-dabc0ff98cd7b9d91850b3c0dbada4e487e698333cd0b7257959e4819d9a29d6.yml -openapi_spec_hash: b974bdc6025a26cfa62857bf74ec379b -config_hash: 13514c5eb422e4eb01767e718798de1e +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gitpod/gitpod-5c5e706fd0877a91f01455f03ef01c45106b1fad3b4aef5967807bce81bcdd53.yml +openapi_spec_hash: 9d64ab76ba1843ae85b5c719c2a90a3c +config_hash: 9052d3b03d620cf6871184b15487e020 diff --git a/CHANGELOG.md b/CHANGELOG.md index c4a175c6..9e5278d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,53 @@ # Changelog +## 0.15.0 (2026-05-12) + +Full Changelog: [v0.14.0...v0.15.0](https://github.com/gitpod-io/gitpod-sdk-typescript/compare/v0.14.0...v0.15.0) + +### Features + +* **api:** add accessToken field to runners response types ([90fa2a8](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/90fa2a8c112f3717cd08c0cc25a64cfe0d880534)) +* **api:** add agent_execution_cnf capability to runners ([e96ca1a](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/e96ca1a49605a2ddfccd4288862f5721d1d91ceb)) +* **api:** add allowUnverifiedEmailScimFallbackMatch to scim_configurations ([0c94086](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/0c940860f8be53265078463c9ef17a3a2d70b234)) +* **api:** add credential_proxy to secrets, remove format from environments ([1e6190f](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/1e6190f898a3bfd82c6431734bea4adad3c1ae37)) +* **api:** add goal field to agent execution status ([af7aefc](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/af7aefc796d2bebbcac50136ea1cafd9c21a85c5)) +* **api:** add incident trigger to WorkflowTrigger and WorkflowExecution ([eb856ef](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/eb856efd3fbac51d1c8556faef976e9a6f8dd09b)) +* **api:** add integration_id, update webhook_id in WorkflowTrigger ([e1591e6](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/e1591e617c7e29729f6ada19f03fa53a4161a1c3)) +* **api:** add maxPortAdmissionLevel to organization policies ([9fc32dc](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/9fc32dcfbf9aab465f71b2d84227318826e589ee)) +* **api:** add oldPath field to EnvironmentStatus file changes ([e179ba6](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/e179ba6bb9bc0ca5a37262a15235e5f9185a98f6)) +* **api:** add OPENAI_AUTO model option to agents ([ae690a1](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/ae690a1a744c174030a9679206f02372fd06af90)) +* **api:** add opus 4.7 model support to agent execution ([27772ea](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/27772ea9c32c3336e654df4675500ec83ab01f6a)) +* **api:** add pagination and search to runners listScmOrganizations method ([6a6e0a8](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/6a6e0a84e2a9daf23db95877e0b0c015fb51a9c4)) +* **api:** add port_authentication capability to RunnerCapability ([c8eb1d6](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/c8eb1d63e97c6570e5156f90c58e29141ed1e68c)) +* **api:** add prebuild trigger value to automations ([452d5e0](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/452d5e08209708511f3505402a1b9bd883f59721)) +* **api:** add project_creation_defaults field to organization policies ([7d70a05](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/7d70a050bf8bd1a320c67df55d4c0816a71fbe8d)) +* **api:** add PULL_REQUEST_EVENT_REVIEW_REQUESTED event type to WorkflowTrigger ([a7fe947](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/a7fe947b77f988afdc6e93d77e7629991b6709f3)) +* **api:** add readinessTimeout to automations and services ([3e90e74](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/3e90e745e1a3929292bef99678be2b6e18363b4b)) +* **api:** add RESOURCE_ROLE_ORG_ENVIRONMENTS_READER to ResourceRole ([9f9f219](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/9f9f21920fe179fcce2d9166f777449d011f1b74)) +* **api:** add UserInputMetadata type to agents ([6c834b9](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/6c834b99652dd3da17781e08d5449480cd835fcd)) +* **api:** remove terminal field from RunsOn ([85d6ef2](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/85d6ef2d704eb140512d7edf3c1e6495f1da12d5)) +* support setting headers via env ([bed4904](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/bed49045e5f23a7f683a8b8603cf1b50a2f7a433)) +* **types:** add Report and related schema types to automations ([f9c394a](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/f9c394ab4ed90dcea009c21471bbeeec3871bdd6)) + + +### Chores + +* **format:** run eslint and prettier separately ([0782de2](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/0782de2e4cc157507a34c43a5db1a8f1700db98c)) +* **formatter:** run prettier and eslint separately ([e354bf8](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/e354bf849b97e421b9694b55a1d7b0f41e7ba4fe)) +* **internal:** codegen related update ([f0055f7](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/f0055f7c6bb9420bc0ae3c6267651393832213f3)) +* **internal:** codegen related update ([afd15ee](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/afd15eebed86ae40238ac2e8a34c448e48097aed)) +* **internal:** codegen related update ([cfd1e9a](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/cfd1e9a15f844e398d089cfc9189b604628b9c33)) +* **internal:** more robust bootstrap script ([306e1fa](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/306e1fa51525f0ba764898ed4ee57a4ccb002d8c)) +* **internal:** regenerate SDK with no functional changes ([c67a192](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/c67a192f31447d27e1a5b077ea123cf9f18b402f)) +* redact api-key headers in debug logs ([2598350](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/2598350538c8203fdb338f4fa41b1e81addd485b)) +* **types:** remove deprecated accessToken from runners response types ([c521a3e](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/c521a3efa0f39ccea79c239fa8ffe208c901309a)) + + +### Documentation + +* **types:** clarify trigger restrictions in AutomationTrigger ([fadafca](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/fadafca48ec3301694befe6e3d71f14321642500)) +* **types:** deprecate isAdmin in runners organization response ([7aa6263](https://github.com/gitpod-io/gitpod-sdk-typescript/commit/7aa6263936e7a45c43801dc818e384d43e1249c5)) + ## 0.14.0 (2026-04-02) Full Changelog: [v0.13.0...v0.14.0](https://github.com/gitpod-io/gitpod-sdk-typescript/compare/v0.13.0...v0.14.0) diff --git a/api.md b/api.md index 96536d55..31ecf242 100644 --- a/api.md +++ b/api.md @@ -68,6 +68,7 @@ Types: - Role - Type - UserInputBlock +- UserInputMetadata - WakeEvent - AgentCreateExecutionConversationTokenResponse - AgentCreatePromptResponse @@ -479,6 +480,7 @@ Types: - CustomSecurityAgent - KernelControlsAction - OrganizationPolicies +- ProjectCreationDefaults - SecurityAgentPolicy - VetoExecPolicy - PolicyRetrieveResponse @@ -670,7 +672,7 @@ Methods: - client.runners.checkRepositoryAccess({ ...params }) -> RunnerCheckRepositoryAccessResponse - client.runners.createLogsToken({ ...params }) -> RunnerCreateLogsTokenResponse - client.runners.createRunnerToken({ ...params }) -> RunnerCreateRunnerTokenResponse -- client.runners.listScmOrganizations({ ...params }) -> RunnerListScmOrganizationsResponse +- client.runners.listScmOrganizations({ ...params }) -> RunnerListScmOrganizationsResponsesOrganizationsPage - client.runners.parseContextURL({ ...params }) -> RunnerParseContextURLResponse - client.runners.searchRepositories({ ...params }) -> RunnerSearchRepositoriesResponse diff --git a/eslint.config.mjs b/eslint.config.mjs index a73ce380..0fd72164 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,7 +1,6 @@ // @ts-check import tseslint from 'typescript-eslint'; import unusedImports from 'eslint-plugin-unused-imports'; -import prettier from 'eslint-plugin-prettier'; export default tseslint.config( { @@ -14,11 +13,9 @@ export default tseslint.config( plugins: { '@typescript-eslint': tseslint.plugin, 'unused-imports': unusedImports, - prettier, }, rules: { 'no-unused-vars': 'off', - 'prettier/prettier': 'error', 'unused-imports/no-unused-imports': 'error', 'no-restricted-imports': [ 'error', diff --git a/package.json b/package.json index 7364c376..34b4be8c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@gitpod/sdk", - "version": "0.14.0", + "version": "0.15.0", "description": "The official TypeScript library for the Gitpod API", "author": "Gitpod ", "types": "dist/index.d.ts", @@ -38,7 +38,6 @@ "@typescript-eslint/eslint-plugin": "8.31.1", "@typescript-eslint/parser": "8.31.1", "eslint": "^9.39.1", - "eslint-plugin-prettier": "^5.4.1", "eslint-plugin-unused-imports": "^4.1.4", "iconv-lite": "^0.6.3", "jest": "^29.4.0", diff --git a/scripts/bootstrap b/scripts/bootstrap index 3417182b..7db27b1b 100755 --- a/scripts/bootstrap +++ b/scripts/bootstrap @@ -4,7 +4,7 @@ set -e cd "$(dirname "$0")/.." -if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ] && [ -t 0 ]; then +if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "${SKIP_BREW:-}" != "1" ] && [ -t 0 ]; then brew bundle check >/dev/null 2>&1 || { echo -n "==> Install Homebrew dependencies? (y/N): " read -r response diff --git a/scripts/fast-format b/scripts/fast-format index 53721ac0..f1873aef 100755 --- a/scripts/fast-format +++ b/scripts/fast-format @@ -31,10 +31,7 @@ if ! [ -z "$ESLINT_FILES" ]; then fi echo "==> Running prettier --write" -# format things eslint didn't -PRETTIER_FILES="$(grep '\.\(js\|json\)$' "$FILE_LIST" || true)" -if ! [ -z "$PRETTIER_FILES" ]; then - echo "$PRETTIER_FILES" | xargs ./node_modules/.bin/prettier \ - --write --cache --cache-strategy metadata --no-error-on-unmatched-pattern \ - '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs' +if ! [ -z "$FILE_LIST" ]; then + cat "$FILE_LIST" | xargs ./node_modules/.bin/prettier \ + --write --cache --cache-strategy metadata --no-error-on-unmatched-pattern --ignore-unknown fi diff --git a/scripts/format b/scripts/format index 7a756401..b1b2c17a 100755 --- a/scripts/format +++ b/scripts/format @@ -8,5 +8,4 @@ echo "==> Running eslint --fix" ./node_modules/.bin/eslint --fix . echo "==> Running prettier --write" -# format things eslint didn't -./node_modules/.bin/prettier --write --cache --cache-strategy metadata . '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs' +./node_modules/.bin/prettier --write --cache --cache-strategy metadata . diff --git a/scripts/lint b/scripts/lint index 3ffb78a6..1f532548 100755 --- a/scripts/lint +++ b/scripts/lint @@ -4,6 +4,9 @@ set -e cd "$(dirname "$0")/.." +echo "==> Running prettier --check" +./node_modules/.bin/prettier --check . + echo "==> Running eslint" ./node_modules/.bin/eslint . diff --git a/scripts/utils/postprocess-files.cjs b/scripts/utils/postprocess-files.cjs index deae575e..a8cdeb7c 100644 --- a/scripts/utils/postprocess-files.cjs +++ b/scripts/utils/postprocess-files.cjs @@ -23,12 +23,19 @@ async function postprocess() { // strip out lib="dom", types="node", and types="react" references; these // are needed at build time, but would pollute the user's TS environment - const transformed = code.replace( + let transformed = code.replace( /^ *\/\/\/ * ' '.repeat(match.length - 1) + '\n', ); + // TypeScript's declaration emitter collapses /** @ts-ignore */ onto the same + // line as the type declaration, which doesn't work. So we convert to // @ts-ignore + // on its own line to properly suppresses errors. + if (file.endsWith('.d.ts') || file.endsWith('.d.mts') || file.endsWith('.d.cts')) { + transformed = transformed.replace(/\/\*\* @ts-ignore\b[^*]*\*\/ /gm, '// @ts-ignore\n'); + } + if (transformed !== code) { console.error(`wrote ${path.relative(process.cwd(), file)}`); await fs.promises.writeFile(file, transformed, 'utf8'); diff --git a/src/client.ts b/src/client.ts index ad0dd92c..18e1e195 100644 --- a/src/client.ts +++ b/src/client.ts @@ -7,10 +7,10 @@ import { validatePositiveInteger, isAbsoluteURL, safeJSON } from './internal/uti import { sleep } from './internal/utils/sleep'; import { type Logger, - type LogLevel as LogLevelClient, - parseLogLevel, - loggerFor, - formatRequestDetails, +type LogLevel as LogLevelClient, +parseLogLevel, +loggerFor, +formatRequestDetails, } from './internal/utils/log'; export type { Logger, LogLevel as LogLevelClient } from './internal/utils/log'; import { castToError, isAbortError } from './internal/errors'; @@ -52,6 +52,8 @@ import { LoginsPageResponse, type MembersPageParams, MembersPageResponse, + type OrganizationsPageParams, + OrganizationsPageResponse, type OutputsPageParams, OutputsPageResponse, type PersonalAccessTokensPageParams, @@ -154,6 +156,7 @@ import { Role, Type, UserInputBlock, + UserInputMetadata, WakeEvent, } from './resources/agents'; import { @@ -417,6 +420,7 @@ import { RunnerListParams, RunnerListScmOrganizationsParams, RunnerListScmOrganizationsResponse, + RunnerListScmOrganizationsResponsesOrganizationsPage, RunnerParseContextURLParams, RunnerParseContextURLResponse, RunnerPhase, @@ -591,6 +595,18 @@ export class Gitpod { this.fetch = options.fetch ?? Shims.getDefaultFetch(); this.#encoder = Opts.FallbackEncoder; + const customHeadersEnv = readEnv('GITPOD_CUSTOM_HEADERS'); + if (customHeadersEnv) { + const parsed: Record = {}; + for (const line of customHeadersEnv.split('\n')) { + const colon = line.indexOf(':'); + if (colon >= 0) { + parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim(); + } + } + options.defaultHeaders = { ...parsed, ...options.defaultHeaders }; + } + this._options = options; this.bearerToken = bearerToken; @@ -1282,6 +1298,12 @@ export declare namespace Gitpod { export import MembersPage = Pagination.MembersPage; export { type MembersPageParams as MembersPageParams, type MembersPageResponse as MembersPageResponse }; + export import OrganizationsPage = Pagination.OrganizationsPage; + export { + type OrganizationsPageParams as OrganizationsPageParams, + type OrganizationsPageResponse as OrganizationsPageResponse, + }; + export import OutputsPage = Pagination.OutputsPage; export { type OutputsPageParams as OutputsPageParams, type OutputsPageResponse as OutputsPageResponse }; @@ -1411,6 +1433,7 @@ export declare namespace Gitpod { type Role as Role, type Type as Type, type UserInputBlock as UserInputBlock, + type UserInputMetadata as UserInputMetadata, type WakeEvent as WakeEvent, type AgentCreateExecutionConversationTokenResponse as AgentCreateExecutionConversationTokenResponse, type AgentCreatePromptResponse as AgentCreatePromptResponse, @@ -1695,6 +1718,7 @@ export declare namespace Gitpod { type RunnerParseContextURLResponse as RunnerParseContextURLResponse, type RunnerSearchRepositoriesResponse as RunnerSearchRepositoriesResponse, type RunnersRunnersPage as RunnersRunnersPage, + type RunnerListScmOrganizationsResponsesOrganizationsPage as RunnerListScmOrganizationsResponsesOrganizationsPage, type RunnerCreateParams as RunnerCreateParams, type RunnerRetrieveParams as RunnerRetrieveParams, type RunnerUpdateParams as RunnerUpdateParams, diff --git a/src/core/pagination.ts b/src/core/pagination.ts index d3e0bc6f..c01757cf 100644 --- a/src/core/pagination.ts +++ b/src/core/pagination.ts @@ -889,6 +889,61 @@ export class MembersPage extends AbstractPage implements MembersPage } } +export interface OrganizationsPageResponse { + organizations: Array; + + pagination: OrganizationsPageResponse.Pagination; +} + +export namespace OrganizationsPageResponse { + export interface Pagination { + nextToken?: string; + } +} + +export interface OrganizationsPageParams { + pageSize?: number; + + token?: string; +} + +export class OrganizationsPage extends AbstractPage implements OrganizationsPageResponse { + organizations: Array; + + pagination: OrganizationsPageResponse.Pagination; + + constructor( + client: Gitpod, + response: Response, + body: OrganizationsPageResponse, + options: FinalRequestOptions, + ) { + super(client, response, body, options); + + this.organizations = body.organizations || []; + this.pagination = body.pagination || {}; + } + + getPaginatedItems(): Item[] { + return this.organizations ?? []; + } + + nextPageRequestOptions(): PageRequestOptions | null { + const cursor = this.pagination?.nextToken; + if (!cursor) { + return null; + } + + return { + ...this.options, + query: { + ...maybeObj(this.options.query), + token: cursor, + }, + }; + } +} + export interface OutputsPageResponse { outputs: Array; diff --git a/src/internal/types.ts b/src/internal/types.ts index b668dfc0..a050513a 100644 --- a/src/internal/types.ts +++ b/src/internal/types.ts @@ -40,7 +40,6 @@ type OverloadedParameters = : T extends (...args: infer A) => unknown ? A : never; -/* eslint-disable */ /** * These imports attempt to get types from a parent package's dependencies. * Unresolved bare specifiers can trigger [automatic type acquisition][1] in some projects, which @@ -63,19 +62,18 @@ type OverloadedParameters = * * [1]: https://www.typescriptlang.org/tsconfig/#typeAcquisition */ -/** @ts-ignore For users with \@types/node */ +/** @ts-ignore For users with \@types/node */ /* prettier-ignore */ type UndiciTypesRequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users with undici */ +/** @ts-ignore For users with undici */ /* prettier-ignore */ type UndiciRequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users with \@types/bun */ +/** @ts-ignore For users with \@types/bun */ /* prettier-ignore */ type BunRequestInit = globalThis.FetchRequestInit; -/** @ts-ignore For users with node-fetch@2 */ +/** @ts-ignore For users with node-fetch@2 */ /* prettier-ignore */ type NodeFetch2RequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users with node-fetch@3, doesn't need file extension because types are at ./@types/index.d.ts */ +/** @ts-ignore For users with node-fetch@3, doesn't need file extension because types are at ./@types/index.d.ts */ /* prettier-ignore */ type NodeFetch3RequestInit = NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny | NotAny; -/** @ts-ignore For users who use Deno */ +/** @ts-ignore For users who use Deno */ /* prettier-ignore */ type FetchRequestInit = NonNullable[1]>; -/* eslint-enable */ type RequestInits = | NotAny diff --git a/src/internal/utils/env.ts b/src/internal/utils/env.ts index 2d848007..cc5fa0fa 100644 --- a/src/internal/utils/env.ts +++ b/src/internal/utils/env.ts @@ -9,10 +9,10 @@ */ export const readEnv = (env: string): string | undefined => { if (typeof (globalThis as any).process !== 'undefined') { - return (globalThis as any).process.env?.[env]?.trim() ?? undefined; + return (globalThis as any).process.env?.[env]?.trim() || undefined; } if (typeof (globalThis as any).Deno !== 'undefined') { - return (globalThis as any).Deno.env?.get?.(env)?.trim(); + return (globalThis as any).Deno.env?.get?.(env)?.trim() || undefined; } return undefined; }; diff --git a/src/internal/utils/log.ts b/src/internal/utils/log.ts index ce9d0523..21ff220a 100644 --- a/src/internal/utils/log.ts +++ b/src/internal/utils/log.ts @@ -107,6 +107,8 @@ export const formatRequestDetails = (details: { name, ( name.toLowerCase() === 'authorization' || + name.toLowerCase() === 'api-key' || + name.toLowerCase() === 'x-api-key' || name.toLowerCase() === 'cookie' || name.toLowerCase() === 'set-cookie' ) ? diff --git a/src/resources/agents.ts b/src/resources/agents.ts index 27755f1c..899fa4ae 100644 --- a/src/resources/agents.ts +++ b/src/resources/agents.ts @@ -802,6 +802,11 @@ export namespace AgentExecution { | 'AGENT_EXECUTION_FAILURE_REASON_INTERNAL' | 'AGENT_EXECUTION_FAILURE_REASON_AGENT_EXECUTION'; + /** + * goal projects the current native Codex thread goal, if any. + */ + goal?: Status.Goal; + inputTokensUsed?: string; iterations?: string; @@ -868,11 +873,13 @@ export namespace AgentExecution { | 'SUPPORTED_MODEL_OPUS_4_5_EXTENDED' | 'SUPPORTED_MODEL_OPUS_4_6' | 'SUPPORTED_MODEL_OPUS_4_6_EXTENDED' + | 'SUPPORTED_MODEL_OPUS_4_7' | 'SUPPORTED_MODEL_HAIKU_4_5' | 'SUPPORTED_MODEL_OPENAI_4O' | 'SUPPORTED_MODEL_OPENAI_4O_MINI' | 'SUPPORTED_MODEL_OPENAI_O1' - | 'SUPPORTED_MODEL_OPENAI_O1_MINI'; + | 'SUPPORTED_MODEL_OPENAI_O1_MINI' + | 'SUPPORTED_MODEL_OPENAI_AUTO'; /** * transcript_url is the URL to the LLM transcript (all messages exchanged between @@ -921,6 +928,32 @@ export namespace AgentExecution { } } + /** + * goal projects the current native Codex thread goal, if any. + */ + export interface Goal { + /** + * objective is the current goal text tracked by the native Codex thread-goal + * subsystem. + */ + objective?: string; + + /** + * status is the lifecycle state of the current goal. + */ + status?: + | 'GOAL_STATUS_UNSPECIFIED' + | 'GOAL_STATUS_ACTIVE' + | 'GOAL_STATUS_PAUSED' + | 'GOAL_STATUS_COMPLETED' + | 'GOAL_STATUS_BUDGET_EXHAUSTED'; + + /** + * updated_at is the most recent native goal update timestamp, when available. + */ + updatedAt?: string; + } + /** * MCPIntegrationStatus represents the status of a single MCP integration within an * agent execution context @@ -1320,6 +1353,22 @@ export namespace UserInputBlock { } } +/** + * UserInputMetadata carries integration-specific context for a user input. + * Internal only — not exposed in public SDKs. External API consumers should not + * set these fields; they are populated by integration handlers. + */ +export interface UserInputMetadata { + /** + * Origin of this input — set by integration handlers to their host (e.g. + * "github.com", "slack.com"). Empty for non-integration callers. This field drives + * emission gating: when set, agent responses are only emitted to the matching + * integration. Treated as trusted input from integration handlers; not validated + * against registered hosts. + */ + source?: string; +} + /** * WakeEvent is sent by the backend to wake an agent when a registered interest * fires. Delivered via SendToAgentExecution as a new oneof variant. @@ -1696,6 +1745,7 @@ export declare namespace Agents { type Role as Role, type Type as Type, type UserInputBlock as UserInputBlock, + type UserInputMetadata as UserInputMetadata, type WakeEvent as WakeEvent, type AgentCreateExecutionConversationTokenResponse as AgentCreateExecutionConversationTokenResponse, type AgentCreatePromptResponse as AgentCreatePromptResponse, diff --git a/src/resources/automations.ts b/src/resources/automations.ts index 9646efdb..7e3abe39 100644 --- a/src/resources/automations.ts +++ b/src/resources/automations.ts @@ -2144,8 +2144,6 @@ export interface WorkflowStep { */ pullRequest?: WorkflowStep.PullRequest; - report?: WorkflowStep.Report; - /** * WorkflowTaskStep represents a task step that executes a command. */ @@ -2201,21 +2199,6 @@ export namespace WorkflowStep { title?: string; } - export interface Report { - /** - * Report must have at least one output: - * - * ``` - * size(this) >= 1 - * ``` - */ - outputs?: Array; - } - - export namespace Report { - export interface Output {} - } - /** * WorkflowTaskStep represents a task step that executes a command. */ @@ -2264,6 +2247,8 @@ export interface WorkflowTrigger { * - Manual: Can use any context type * - Time: Typically uses Projects or Repositories context * - PullRequest: Can use any context, FromTrigger uses PR repository context + * - Incident: Typically uses Projects or Repositories context (no inherent repo + * context) */ context: WorkflowTriggerContext; @@ -2300,8 +2285,16 @@ export namespace WorkflowTrigger { | 'PULL_REQUEST_EVENT_MERGED' | 'PULL_REQUEST_EVENT_CLOSED' | 'PULL_REQUEST_EVENT_READY_FOR_REVIEW' + | 'PULL_REQUEST_EVENT_REVIEW_REQUESTED' >; + /** + * integration_id is the optional ID of an integration that acts as the source of + * webhook events. When set, the trigger will be activated when the webhook + * receives events. + */ + integrationId?: string | null; + /** * webhook_id is the optional ID of a webhook that this trigger is bound to. When * set, the trigger will be activated when the webhook receives events. This allows @@ -2341,6 +2334,8 @@ export namespace WorkflowTrigger { * - Manual: Can use any context type * - Time: Typically uses Projects or Repositories context * - PullRequest: Can use any context, FromTrigger uses PR repository context + * - Incident: Typically uses Projects or Repositories context (no inherent repo + * context) */ export interface WorkflowTriggerContext { /** diff --git a/src/resources/environments/automations/automations.ts b/src/resources/environments/automations/automations.ts index 88608942..92a13c4a 100644 --- a/src/resources/environments/automations/automations.ts +++ b/src/resources/environments/automations/automations.ts @@ -141,11 +141,72 @@ export namespace AutomationsFile { name?: string; + /** + * A Duration represents a signed, fixed-length span of time represented as a count + * of seconds and fractions of seconds at nanosecond resolution. It is independent + * of any calendar and concepts like "day" or "month". It is related to Timestamp + * in that the difference between two Timestamp values is a Duration and it can be + * added or subtracted from a Timestamp. Range is approximately +-10,000 years. + * + * # Examples + * + * Example 1: Compute Duration from two Timestamps in pseudo code. + * + * Timestamp start = ...; + * Timestamp end = ...; + * Duration duration = ...; + * + * duration.seconds = end.seconds - start.seconds; + * duration.nanos = end.nanos - start.nanos; + * + * if (duration.seconds < 0 && duration.nanos > 0) { + * duration.seconds += 1; + * duration.nanos -= 1000000000; + * } else if (duration.seconds > 0 && duration.nanos < 0) { + * duration.seconds -= 1; + * duration.nanos += 1000000000; + * } + * + * Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. + * + * Timestamp start = ...; + * Duration duration = ...; + * Timestamp end = ...; + * + * end.seconds = start.seconds + duration.seconds; + * end.nanos = start.nanos + duration.nanos; + * + * if (end.nanos < 0) { + * end.seconds -= 1; + * end.nanos += 1000000000; + * } else if (end.nanos >= 1000000000) { + * end.seconds += 1; + * end.nanos -= 1000000000; + * } + * + * Example 3: Compute Duration from datetime.timedelta in Python. + * + * td = datetime.timedelta(days=3, minutes=10) + * duration = Duration() + * duration.FromTimedelta(td) + * + * # JSON Mapping + * + * In JSON format, the Duration type is encoded as a string rather than an object, + * where the string ends in the suffix "s" (indicating seconds) and is preceded by + * the number of seconds, with nanoseconds expressed as fractional seconds. For + * example, 3 seconds with 0 nanoseconds should be encoded in JSON format as "3s", + * while 3 seconds and 1 nanosecond should be expressed in JSON format as + * "3.000000001s", and 3 seconds and 1 microsecond should be expressed in JSON + * format as "3.000001s". + */ + readinessTimeout?: string; + role?: '' | 'default' | 'editor' | 'ai-agent'; runsOn?: Shared.RunsOn; - triggeredBy?: Array<'manual' | 'postEnvironmentStart' | 'postDevcontainerStart'>; + triggeredBy?: Array<'manual' | 'postEnvironmentStart' | 'postDevcontainerStart' | 'prebuild'>; } export namespace Services { diff --git a/src/resources/environments/automations/services.ts b/src/resources/environments/automations/services.ts index b10dd0ce..375334cf 100644 --- a/src/resources/environments/automations/services.ts +++ b/src/resources/environments/automations/services.ts @@ -421,6 +421,12 @@ export interface ServiceSpec { */ env?: Array; + /** + * readiness_timeout is the maximum duration a service may remain in the Starting + * phase while readiness checks run. 0s disables the timeout. + */ + readinessTimeout?: string; + /** * runs_on specifies the environment the service should run on. */ @@ -590,6 +596,67 @@ export namespace ServiceUpdateParams { env?: Array; + /** + * A Duration represents a signed, fixed-length span of time represented as a count + * of seconds and fractions of seconds at nanosecond resolution. It is independent + * of any calendar and concepts like "day" or "month". It is related to Timestamp + * in that the difference between two Timestamp values is a Duration and it can be + * added or subtracted from a Timestamp. Range is approximately +-10,000 years. + * + * # Examples + * + * Example 1: Compute Duration from two Timestamps in pseudo code. + * + * Timestamp start = ...; + * Timestamp end = ...; + * Duration duration = ...; + * + * duration.seconds = end.seconds - start.seconds; + * duration.nanos = end.nanos - start.nanos; + * + * if (duration.seconds < 0 && duration.nanos > 0) { + * duration.seconds += 1; + * duration.nanos -= 1000000000; + * } else if (duration.seconds > 0 && duration.nanos < 0) { + * duration.seconds -= 1; + * duration.nanos += 1000000000; + * } + * + * Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. + * + * Timestamp start = ...; + * Duration duration = ...; + * Timestamp end = ...; + * + * end.seconds = start.seconds + duration.seconds; + * end.nanos = start.nanos + duration.nanos; + * + * if (end.nanos < 0) { + * end.seconds -= 1; + * end.nanos += 1000000000; + * } else if (end.nanos >= 1000000000) { + * end.seconds += 1; + * end.nanos -= 1000000000; + * } + * + * Example 3: Compute Duration from datetime.timedelta in Python. + * + * td = datetime.timedelta(days=3, minutes=10) + * duration = Duration() + * duration.FromTimedelta(td) + * + * # JSON Mapping + * + * In JSON format, the Duration type is encoded as a string rather than an object, + * where the string ends in the suffix "s" (indicating seconds) and is preceded by + * the number of seconds, with nanoseconds expressed as fractional seconds. For + * example, 3 seconds with 0 nanoseconds should be encoded in JSON format as "3s", + * while 3 seconds and 1 nanosecond should be expressed in JSON format as + * "3.000000001s", and 3 seconds and 1 microsecond should be expressed in JSON + * format as "3.000001s". + */ + readinessTimeout?: string; + runsOn?: Shared.RunsOn | null; } diff --git a/src/resources/environments/environments.ts b/src/resources/environments/environments.ts index eb9d7214..4ade7edf 100644 --- a/src/resources/environments/environments.ts +++ b/src/resources/environments/environments.ts @@ -1008,12 +1008,6 @@ export namespace EnvironmentSpec { * credential) and proxied at the same time. */ export interface CredentialProxy { - /** - * format describes how the secret value is encoded. The proxy uses this to decode - * the value before injecting it into the header. - */ - format?: 'FORMAT_UNSPECIFIED' | 'FORMAT_PLAIN' | 'FORMAT_BASE64'; - /** * header is the HTTP header name to inject (e.g. "Authorization"). */ @@ -1291,6 +1285,12 @@ export namespace EnvironmentStatus { | 'CHANGE_TYPE_UPDATED_BUT_UNMERGED' | 'CHANGE_TYPE_UNTRACKED'; + /** + * old_path is the previous path of the file before a rename or copy. Only set when + * change_type is RENAMED or COPIED. + */ + oldPath?: string; + /** * path is the path of the file */ diff --git a/src/resources/index.ts b/src/resources/index.ts index 17be5025..8658b6f1 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -33,6 +33,7 @@ export { type Role, type Type, type UserInputBlock, + type UserInputMetadata, type WakeEvent, type AgentCreateExecutionConversationTokenResponse, type AgentCreatePromptResponse, @@ -317,6 +318,7 @@ export { type RunnerParseContextURLParams, type RunnerSearchRepositoriesParams, type RunnersRunnersPage, + type RunnerListScmOrganizationsResponsesOrganizationsPage, } from './runners/runners'; export { Secrets, diff --git a/src/resources/organizations/index.ts b/src/resources/organizations/index.ts index 29e04f78..bd455f8f 100644 --- a/src/resources/organizations/index.ts +++ b/src/resources/organizations/index.ts @@ -77,6 +77,7 @@ export { type CustomSecurityAgent, type KernelControlsAction, type OrganizationPolicies, + type ProjectCreationDefaults, type SecurityAgentPolicy, type VetoExecPolicy, type PolicyRetrieveResponse, diff --git a/src/resources/organizations/organizations.ts b/src/resources/organizations/organizations.ts index 3cdc46f4..ac7560a6 100644 --- a/src/resources/organizations/organizations.ts +++ b/src/resources/organizations/organizations.ts @@ -66,6 +66,7 @@ import { PolicyRetrieveResponse, PolicyUpdateParams, PolicyUpdateResponse, + ProjectCreationDefaults, SecurityAgentPolicy, VetoExecPolicy, } from './policies'; @@ -1063,6 +1064,7 @@ export declare namespace Organizations { type CustomSecurityAgent as CustomSecurityAgent, type KernelControlsAction as KernelControlsAction, type OrganizationPolicies as OrganizationPolicies, + type ProjectCreationDefaults as ProjectCreationDefaults, type SecurityAgentPolicy as SecurityAgentPolicy, type VetoExecPolicy as VetoExecPolicy, type PolicyRetrieveResponse as PolicyRetrieveResponse, diff --git a/src/resources/organizations/policies.ts b/src/resources/organizations/policies.ts index 604b29e0..69f93c64 100644 --- a/src/resources/organizations/policies.ts +++ b/src/resources/organizations/policies.ts @@ -2,6 +2,7 @@ import { APIResource } from '../../core/resource'; import * as PoliciesAPI from './policies'; +import * as EnvironmentsAPI from '../environments/environments'; import { APIPromise } from '../../core/api-promise'; import { RequestOptions } from '../../internal/request-options'; @@ -348,6 +349,12 @@ export interface OrganizationPolicies { */ maximumEnvironmentTimeout?: string; + /** + * project_creation_defaults contains default settings applied to newly created + * projects. + */ + projectCreationDefaults?: ProjectCreationDefaults; + /** * security_agent_policy contains security agent configuration for the * organization. When configured, security agents are automatically deployed to all @@ -376,6 +383,18 @@ export namespace OrganizationPolicies { } } +/** + * ProjectCreationDefaults contains default settings applied to newly created + * projects. + */ +export interface ProjectCreationDefaults { + /** + * insights_enabled controls whether Insights (co-author attribution) is + * automatically enabled on newly created projects. + */ + insightsEnabled?: boolean; +} + /** * SecurityAgentPolicy contains security agent configuration for an organization. * When enabled, security agents are automatically deployed to all environments. @@ -500,6 +519,14 @@ export interface PolicyUpdateParams { */ maximumRunningEnvironmentsPerUser?: string | null; + /** + * max_port_admission_level caps the maximum admission level a user-opened port may + * use. UNSPECIFIED means no cap (any AdmissionLevel value is allowed). System + * ports (VS Code Browser, agents) are exempt. The legacy port_sharing_disabled + * field, when true, takes precedence and blocks all user-initiated port sharing. + */ + maxPortAdmissionLevel?: EnvironmentsAPI.AdmissionLevel | null; + /** * members_create_projects controls whether members can create projects */ @@ -518,6 +545,12 @@ export interface PolicyUpdateParams { */ portSharingDisabled?: boolean | null; + /** + * project_creation_defaults contains updates to default settings applied to newly + * created projects. + */ + projectCreationDefaults?: PolicyUpdateParams.ProjectCreationDefaults | null; + /** * require_custom_domain_access controls whether users must access via custom * domain when one is configured. When true, access via app.gitpod.io is blocked. @@ -597,6 +630,18 @@ export namespace PolicyUpdateParams { allowedVersions?: Array; } + /** + * project_creation_defaults contains updates to default settings applied to newly + * created projects. + */ + export interface ProjectCreationDefaults { + /** + * insights_enabled controls whether Insights (co-author attribution) is + * automatically enabled on newly created projects. + */ + insightsEnabled?: boolean | null; + } + /** * security_agent_policy contains security agent configuration updates */ @@ -650,6 +695,7 @@ export declare namespace Policies { type CustomSecurityAgent as CustomSecurityAgent, type KernelControlsAction as KernelControlsAction, type OrganizationPolicies as OrganizationPolicies, + type ProjectCreationDefaults as ProjectCreationDefaults, type SecurityAgentPolicy as SecurityAgentPolicy, type VetoExecPolicy as VetoExecPolicy, type PolicyRetrieveResponse as PolicyRetrieveResponse, diff --git a/src/resources/organizations/scim-configurations.ts b/src/resources/organizations/scim-configurations.ts index 33dc2f84..4c2e2778 100644 --- a/src/resources/organizations/scim-configurations.ts +++ b/src/resources/organizations/scim-configurations.ts @@ -291,6 +291,13 @@ export interface ScimConfiguration { */ updatedAt: string; + /** + * allow_unverified_email_account_linking allows SCIM to link provisioned users to + * existing accounts when the identity provider does not mark the email address as + * verified + */ + allowUnverifiedEmailAccountLinking?: boolean; + /** * enabled indicates if SCIM provisioning is active */ @@ -367,6 +374,13 @@ export interface ScimConfigurationCreateParams { */ ssoConfigurationId: string; + /** + * allow_unverified_email_account_linking allows SCIM to link provisioned users to + * existing accounts when the identity provider does not mark the email address as + * verified + */ + allowUnverifiedEmailAccountLinking?: boolean | null; + /** * name is a human-readable name for the SCIM configuration */ @@ -392,6 +406,13 @@ export interface ScimConfigurationUpdateParams { */ scimConfigurationId: string; + /** + * allow_unverified_email_account_linking allows SCIM to link provisioned users to + * existing accounts when the identity provider does not mark the email address as + * verified + */ + allowUnverifiedEmailAccountLinking?: boolean | null; + /** * enabled controls whether SCIM provisioning is active */ diff --git a/src/resources/runners/index.ts b/src/resources/runners/index.ts index fb790837..b11c33ee 100644 --- a/src/resources/runners/index.ts +++ b/src/resources/runners/index.ts @@ -62,4 +62,5 @@ export { type RunnerParseContextURLParams, type RunnerSearchRepositoriesParams, type RunnersRunnersPage, + type RunnerListScmOrganizationsResponsesOrganizationsPage, } from './runners'; diff --git a/src/resources/runners/runners.ts b/src/resources/runners/runners.ts index b3623212..6f1aeea2 100644 --- a/src/resources/runners/runners.ts +++ b/src/resources/runners/runners.ts @@ -27,7 +27,13 @@ import { ScmIntegrationValidationResult, } from './configurations/configurations'; import { APIPromise } from '../../core/api-promise'; -import { PagePromise, RunnersPage, type RunnersPageParams } from '../../core/pagination'; +import { + OrganizationsPage, + type OrganizationsPageParams, + PagePromise, + RunnersPage, + type RunnersPageParams, +} from '../../core/pagination'; import { RequestOptions } from '../../internal/request-options'; export class Runners extends APIResource { @@ -412,24 +418,41 @@ export class Runners extends APIResource { * scmHost: "github.com" * ``` * + * - Search GitLab groups: + * + * Returns the first page of GitLab groups matching the substring. + * + * ```yaml + * runnerId: "d2c94c27-3b76-4a42-b88c-95a85e392c68" + * scmHost: "gitlab.com" + * query: "platform" + * pagination: + * pageSize: 25 + * ``` + * * @example * ```ts - * const response = await client.runners.listScmOrganizations({ - * runnerId: 'd2c94c27-3b76-4a42-b88c-95a85e392c68', - * scmHost: 'github.com', - * }); + * // Automatically fetches more pages as needed. + * for await (const runnerListScmOrganizationsResponse of client.runners.listScmOrganizations( + * { + * runnerId: 'd2c94c27-3b76-4a42-b88c-95a85e392c68', + * scmHost: 'github.com', + * }, + * )) { + * // ... + * } * ``` */ listScmOrganizations( params: RunnerListScmOrganizationsParams, options?: RequestOptions, - ): APIPromise { + ): PagePromise { const { token, pageSize, ...body } = params; - return this._client.post('/gitpod.v1.RunnerService/ListSCMOrganizations', { - query: { token, pageSize }, - body, - ...options, - }); + return this._client.getAPIList( + '/gitpod.v1.RunnerService/ListSCMOrganizations', + OrganizationsPage, + { query: { token, pageSize }, body, method: 'post', ...options }, + ); } /** @@ -521,6 +544,9 @@ export class Runners extends APIResource { export type RunnersRunnersPage = RunnersPage; +export type RunnerListScmOrganizationsResponsesOrganizationsPage = + OrganizationsPage; + export interface GatewayInfo { /** * Gateway represents a system gateway that provides access to services @@ -631,7 +657,10 @@ export type RunnerCapability = | 'RUNNER_CAPABILITY_CHECK_REPOSITORY_ACCESS' | 'RUNNER_CAPABILITY_RUNNER_SIDE_AGENT' | 'RUNNER_CAPABILITY_WARM_POOL' - | 'RUNNER_CAPABILITY_ASG_WARM_POOL'; + | 'RUNNER_CAPABILITY_ASG_WARM_POOL' + | 'RUNNER_CAPABILITY_PORT_AUTHENTICATION' + | 'RUNNER_CAPABILITY_HORIZONTAL_SCALING' + | 'RUNNER_CAPABILITY_AGENT_EXECUTION_CNF'; export interface RunnerConfiguration { /** @@ -963,29 +992,25 @@ export interface RunnerCreateRunnerTokenResponse { export interface RunnerListScmOrganizationsResponse { /** - * List of organizations the user belongs to + * @deprecated Deprecated: this field is unused by all known consumers and is + * scheduled for removal in a future release. Do not read it. + * + * Originally intended to gate organization-level webhook creation in the + * dashboard, but that gating was never implemented. Populating this field on the + * GitLab path requires a second fully-paginated ListGroups call, which is the main + * reason we are deprecating it. */ - organizations?: Array; -} - -export namespace RunnerListScmOrganizationsResponse { - export interface Organization { - /** - * Whether the user has admin permissions in this organization. Admin permissions - * typically allow creating organization-level webhooks. - */ - isAdmin?: boolean; + isAdmin?: boolean; - /** - * Organization name/slug (e.g., "gitpod-io") - */ - name?: string; + /** + * Organization name/slug (e.g., "gitpod-io") + */ + name?: string; - /** - * Organization URL (e.g., "https://github.com/gitpod-io") - */ - url?: string; - } + /** + * Organization URL (e.g., "https://github.com/gitpod-io") + */ + url?: string; } export interface RunnerParseContextURLResponse { @@ -1405,16 +1430,23 @@ export interface RunnerCreateRunnerTokenParams { runnerId?: string; } -export interface RunnerListScmOrganizationsParams { +export interface RunnerListScmOrganizationsParams extends OrganizationsPageParams { /** - * Query param + * Body param: Pagination parameters. When unset, defaults to the standard + * PaginationRequest defaults (page_size 25, max 100). Tokens are opaque and + * provider-specific. */ - token?: string; + pagination?: RunnerListScmOrganizationsParams.Pagination; /** - * Query param + * Body param: Optional substring filter applied to the organization name. + * + * - GitLab: forwarded to the upstream `search` parameter (server-side, + * case-insensitive substring on name/path). + * - GitHub and Bitbucket: not implemented as they don't support searching Empty + * value means no filter. */ - pageSize?: number; + query?: string; /** * Body param @@ -1428,6 +1460,26 @@ export interface RunnerListScmOrganizationsParams { scmHost?: string; } +export namespace RunnerListScmOrganizationsParams { + /** + * Pagination parameters. When unset, defaults to the standard PaginationRequest + * defaults (page_size 25, max 100). Tokens are opaque and provider-specific. + */ + export interface Pagination { + /** + * Token for the next set of results that was returned as next_token of a + * PaginationResponse + */ + token?: string; + + /** + * Page size is the maximum number of results to retrieve per page. Defaults to 25. + * Maximum 100. + */ + pageSize?: number; + } +} + export interface RunnerParseContextURLParams { contextUrl?: string; @@ -1515,6 +1567,7 @@ export declare namespace Runners { type RunnerParseContextURLResponse as RunnerParseContextURLResponse, type RunnerSearchRepositoriesResponse as RunnerSearchRepositoriesResponse, type RunnersRunnersPage as RunnersRunnersPage, + type RunnerListScmOrganizationsResponsesOrganizationsPage as RunnerListScmOrganizationsResponsesOrganizationsPage, type RunnerCreateParams as RunnerCreateParams, type RunnerRetrieveParams as RunnerRetrieveParams, type RunnerUpdateParams as RunnerUpdateParams, diff --git a/src/resources/secrets.ts b/src/resources/secrets.ts index 86012223..7cbad510 100644 --- a/src/resources/secrets.ts +++ b/src/resources/secrets.ts @@ -329,6 +329,16 @@ export interface Secret { */ creator?: Shared.Subject; + /** + * credential_proxy configures transparent credential injection via the credential + * proxy. When set, the credential proxy intercepts HTTPS traffic to the target + * hosts and replaces the dummy mounted value with the real value in the specified + * HTTP header. The real secret value is never exposed in the environment. This + * field is orthogonal to mount — a secret can be both mounted and proxied at the + * same time. + */ + credentialProxy?: Secret.CredentialProxy; + /** * secret will be created as an Environment Variable with the same name as the * secret @@ -445,6 +455,29 @@ export interface Secret { updatedAt?: string; } +export namespace Secret { + /** + * credential_proxy configures transparent credential injection via the credential + * proxy. When set, the credential proxy intercepts HTTPS traffic to the target + * hosts and replaces the dummy mounted value with the real value in the specified + * HTTP header. The real secret value is never exposed in the environment. This + * field is orthogonal to mount — a secret can be both mounted and proxied at the + * same time. + */ + export interface CredentialProxy { + /** + * header is the HTTP header name to inject (e.g. "Authorization"). + */ + header?: string; + + /** + * target_hosts lists the hostnames to intercept (for example "github.com" or + * "\*.github.com"). Wildcards are subdomain-only and do not match the apex domain. + */ + targetHosts?: Array; + } +} + export interface SecretScope { /** * organization_id is the Organization ID this Secret belongs to @@ -493,6 +526,16 @@ export interface SecretCreateParams { */ containerRegistryBasicAuthHost?: string; + /** + * credential_proxy configures transparent credential injection when environments + * materialize this secret. When set, the credential proxy intercepts HTTPS traffic + * to the target hosts and replaces the dummy mounted value with the real value in + * the specified HTTP header. The real secret value is never exposed in the + * environment. This field is orthogonal to mount — a secret can be both mounted + * and proxied at the same time. + */ + credentialProxy?: SecretCreateParams.CredentialProxy; + /** * secret will be created as an Environment Variable with the same name as the * secret @@ -528,6 +571,29 @@ export interface SecretCreateParams { value?: string; } +export namespace SecretCreateParams { + /** + * credential_proxy configures transparent credential injection when environments + * materialize this secret. When set, the credential proxy intercepts HTTPS traffic + * to the target hosts and replaces the dummy mounted value with the real value in + * the specified HTTP header. The real secret value is never exposed in the + * environment. This field is orthogonal to mount — a secret can be both mounted + * and proxied at the same time. + */ + export interface CredentialProxy { + /** + * header is the HTTP header name to inject (e.g. "Authorization"). + */ + header?: string; + + /** + * target_hosts lists the hostnames to intercept (for example "github.com" or + * "\*.github.com"). Wildcards are subdomain-only and do not match the apex domain. + */ + targetHosts?: Array; + } +} + export interface SecretListParams extends SecretsPageParams { /** * Body param diff --git a/src/resources/shared.ts b/src/resources/shared.ts index efb056cb..b097a933 100644 --- a/src/resources/shared.ts +++ b/src/resources/shared.ts @@ -22,8 +22,8 @@ import { * automation during a prebuild of an environment. This phase does not have user * secrets available. The `before_snapshot` field triggers the automation after all * prebuild tasks complete but before the snapshot is taken. This is used for tasks - * that need to run last during prebuilds, such as IDE warmup. Note: The prebuild - * and before_snapshot triggers can only be used with tasks, not services. + * that need to run last during prebuilds, such as IDE warmup. Note: The + * before_snapshot trigger can only be used with tasks, not services. */ export interface AutomationTrigger { beforeSnapshot?: boolean; @@ -209,6 +209,7 @@ export type ResourceRole = | 'RESOURCE_ROLE_ORG_PROJECTS_ADMIN' | 'RESOURCE_ROLE_ORG_AUTOMATIONS_ADMIN' | 'RESOURCE_ROLE_ORG_GROUPS_ADMIN' + | 'RESOURCE_ROLE_ORG_ENVIRONMENTS_READER' | 'RESOURCE_ROLE_ORG_AUDIT_LOG_READER' | 'RESOURCE_ROLE_GROUP_ADMIN' | 'RESOURCE_ROLE_GROUP_VIEWER' @@ -324,12 +325,6 @@ export interface RunsOn { * Machine runs the service/task directly on the VM/machine level. */ machine?: unknown; - - /** - * Terminal runs the service inside a managed PTY terminal in the devcontainer. - * Users can attach to the terminal interactively via the terminal API. - */ - terminal?: unknown; } export namespace RunsOn { diff --git a/src/version.ts b/src/version.ts index e2b0672c..b67001ee 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '0.14.0'; // x-release-please-version +export const VERSION = '0.15.0'; // x-release-please-version diff --git a/tests/api-resources/automations.test.ts b/tests/api-resources/automations.test.ts index 0da8a86f..c91fbf5d 100644 --- a/tests/api-resources/automations.test.ts +++ b/tests/api-resources/automations.test.ts @@ -38,21 +38,6 @@ describe('resource automations', () => { draft: true, title: 'title', }, - report: { - outputs: [ - { - acceptanceCriteria: 'acceptanceCriteria', - boolean: {}, - command: 'command', - float: { max: 0, min: 0 }, - integer: { max: 0, min: 0 }, - key: 'key', - prompt: 'prompt', - string: { pattern: 'pattern' }, - title: 'title', - }, - ], - }, task: { command: 'command' }, }, ], @@ -75,21 +60,6 @@ describe('resource automations', () => { draft: true, title: 'title', }, - report: { - outputs: [ - { - acceptanceCriteria: 'acceptanceCriteria', - boolean: {}, - command: 'command', - float: { max: 0, min: 0 }, - integer: { max: 0, min: 0 }, - key: 'key', - prompt: 'prompt', - string: { pattern: 'pattern' }, - title: 'title', - }, - ], - }, task: { command: 'command' }, }, ], @@ -109,6 +79,7 @@ describe('resource automations', () => { manual: {}, pullRequest: { events: ['PULL_REQUEST_EVENT_UNSPECIFIED'], + integrationId: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', webhookId: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', }, time: { cronExpression: 'cronExpression' }, diff --git a/tests/api-resources/organizations/policies.test.ts b/tests/api-resources/organizations/policies.test.ts index 7fd9de1a..c9afd3c5 100644 --- a/tests/api-resources/organizations/policies.test.ts +++ b/tests/api-resources/organizations/policies.test.ts @@ -65,9 +65,11 @@ describe('resource policies', () => { maximumEnvironmentsPerUser: '20', maximumEnvironmentTimeout: '3600s', maximumRunningEnvironmentsPerUser: '5', + maxPortAdmissionLevel: 'ADMISSION_LEVEL_UNSPECIFIED', membersCreateProjects: true, membersRequireProjects: true, portSharingDisabled: true, + projectCreationDefaults: { insightsEnabled: true }, requireCustomDomainAccess: true, restrictAccountCreationToScim: true, securityAgentPolicy: { diff --git a/tests/api-resources/organizations/scim-configurations.test.ts b/tests/api-resources/organizations/scim-configurations.test.ts index bf121156..0da9bb8e 100644 --- a/tests/api-resources/organizations/scim-configurations.test.ts +++ b/tests/api-resources/organizations/scim-configurations.test.ts @@ -28,6 +28,7 @@ describe('resource scimConfigurations', () => { const response = await client.organizations.scimConfigurations.create({ organizationId: 'b0e12f6c-4c67-429d-a4a6-d9838b5da047', ssoConfigurationId: 'd2c94c27-3b76-4a42-b88c-95a85e392c68', + allowUnverifiedEmailAccountLinking: true, name: 'name', tokenExpiresIn: '+9125115.360s', }); @@ -72,6 +73,7 @@ describe('resource scimConfigurations', () => { test.skip('update: required and optional params', async () => { const response = await client.organizations.scimConfigurations.update({ scimConfigurationId: 'd2c94c27-3b76-4a42-b88c-95a85e392c68', + allowUnverifiedEmailAccountLinking: true, enabled: false, name: 'name', ssoConfigurationId: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', diff --git a/yarn.lock b/yarn.lock index 9d562436..a55ecda1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -709,11 +709,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@pkgr/core@^0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.4.tgz#d897170a2b0ba51f78a099edccd968f7b103387c" - integrity sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw== - "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -1268,9 +1263,9 @@ bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: tweetnacl "^0.14.3" brace-expansion@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.3.tgz#0493338bdd58e319b1039c67cf7ee439892c01d9" - integrity sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.0.tgz#4f41a41190216ee36067ec381526fe9539c4f0ae" + integrity sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w== dependencies: balanced-match "^1.0.0" @@ -1591,14 +1586,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-plugin-prettier@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz#99b55d7dd70047886b2222fdd853665f180b36af" - integrity sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.11.7" - eslint-plugin-unused-imports@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz#62ddc7446ccbf9aa7b6f1f0b00a980423cda2738" @@ -1750,11 +1737,6 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" @@ -2934,13 +2916,6 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - prettier@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.1.tgz#6ba9f23165d690b6cbdaa88cb0807278f7019848" @@ -3263,13 +3238,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -synckit@^0.11.7: - version "0.11.8" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.8.tgz#b2aaae998a4ef47ded60773ad06e7cb821f55457" - integrity sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A== - dependencies: - "@pkgr/core" "^0.2.4" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"