Skip to content

Commit fe7e73e

Browse files
release: 0.9.0 (#72)
* codegen metadata * feat: Define SCIMConfiguration database schema * feat(api): improve SearchRepositories pagination with next_page and total_count * codegen metadata * feat: move agent mode from Spec to Status, add AgentModeChange signals * feat(api): add draft and state fields to PullRequest proto * feat: [api] sorting for `ListMembers` * feat: [backend] Introduce role and member status filtering for `ListMembers` * feat(dashboard): show tier badge in org selector * feat(secrets): add ServiceAccountSecret entity with full support * codegen metadata * codegen metadata * feat: [backend] Introduce org:runners_admin organization role * codegen metadata * feat(api): add ListSCMOrganizations endpoint * chore(internal): update `actions/checkout` version * feat: API for SCIM configuration management * fix(docs): add missing pointer prefix to api.md return types * codegen metadata * feat(automations): add before_snapshot trigger type * feat: [backend] Adding direct_share field to groups * feat: [api] Introduce RPCs to share resources with individual users * feat(api): add CheckRepositoryAccess API for repository access validation * codegen metadata * feat(api): add inputs array to UserInputBlock proto * feat(agent): add spec mode for planning before interactive implementation * codegen metadata * release: 0.9.0 --------- Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
1 parent ec95fea commit fe7e73e

29 files changed

+1992
-314
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
2121

2222
steps:
23-
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
23+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
2424

2525
- name: Setup go
2626
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5
@@ -35,7 +35,7 @@ jobs:
3535
runs-on: ${{ github.repository == 'stainless-sdks/gitpod-go' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
3636
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
3737
steps:
38-
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
38+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
3939

4040
- name: Setup go
4141
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.8.0"
2+
".": "0.9.0"
33
}

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 160
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gitpod%2Fgitpod-3935e467f9c15925790aada293124db82bb5d6840eeac52d81fbac6a9b0fd154.yml
3-
openapi_spec_hash: b417d7f10ea430216e9b70e4468a3212
4-
config_hash: d3267594264bfb76d2ee7e881d5f8a5a
1+
configured_endpoints: 170
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gitpod%2Fgitpod-2423c089f280cdf34a987d40531692097a69f4aa971c6adf9aeec4fd7984cec2.yml
3+
openapi_spec_hash: 24037c3ab9ceca689150d07ecec7aa80
4+
config_hash: d726afb2a92132197e4eae04303e8041

CHANGELOG.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,39 @@
11
# Changelog
22

3+
## 0.9.0 (2026-01-21)
4+
5+
Full Changelog: [v0.8.0...v0.9.0](https://github.com/gitpod-io/gitpod-sdk-go/compare/v0.8.0...v0.9.0)
6+
7+
### Features
8+
9+
* [api] Introduce RPCs to share resources with individual users ([d7ffceb](https://github.com/gitpod-io/gitpod-sdk-go/commit/d7ffceb2eaa72981a62c72f283d60744ca62892a))
10+
* [api] sorting for `ListMembers` ([cabae1a](https://github.com/gitpod-io/gitpod-sdk-go/commit/cabae1a3485c18f2bc4906b3f93ae3f407ef0109))
11+
* [backend] Adding direct_share field to groups ([143f723](https://github.com/gitpod-io/gitpod-sdk-go/commit/143f7236d939a962c38a40cf3504d09a8a02d791))
12+
* [backend] Introduce org:runners_admin organization role ([7993dc4](https://github.com/gitpod-io/gitpod-sdk-go/commit/7993dc4480f7f676181f7837e41caa7f337febaa))
13+
* [backend] Introduce role and member status filtering for `ListMembers` ([fda937f](https://github.com/gitpod-io/gitpod-sdk-go/commit/fda937f8cbdec42a802895bf6c23e0cb74317c10))
14+
* **agent:** add spec mode for planning before interactive implementation ([47daf98](https://github.com/gitpod-io/gitpod-sdk-go/commit/47daf9841f0ba302ea5c442bd578cd6912b18ee9))
15+
* API for SCIM configuration management ([a0f4eed](https://github.com/gitpod-io/gitpod-sdk-go/commit/a0f4eed6d124adafdd7f4fb5aa5685ebe409ff5e))
16+
* **api:** add CheckRepositoryAccess API for repository access validation ([1879407](https://github.com/gitpod-io/gitpod-sdk-go/commit/1879407adceddbbce473b79bbfd8ed91bfe9f1c1))
17+
* **api:** add draft and state fields to PullRequest proto ([b9a0d47](https://github.com/gitpod-io/gitpod-sdk-go/commit/b9a0d47bdd27ff86502afbba720b3d718cdd5f99))
18+
* **api:** add inputs array to UserInputBlock proto ([a1e5a8a](https://github.com/gitpod-io/gitpod-sdk-go/commit/a1e5a8ab944d912f2bbc10f16ad676dba3376bf7))
19+
* **api:** add ListSCMOrganizations endpoint ([6ee682f](https://github.com/gitpod-io/gitpod-sdk-go/commit/6ee682f9bd97ec6d9af9b7e9368cdd25e16c8adf))
20+
* **api:** improve SearchRepositories pagination with next_page and total_count ([5616440](https://github.com/gitpod-io/gitpod-sdk-go/commit/56164403356b880c01ec2494cedb2f4862fabaf7))
21+
* **automations:** add before_snapshot trigger type ([7e9a241](https://github.com/gitpod-io/gitpod-sdk-go/commit/7e9a24185ce20eeaf8221d0333a7c16ee37ca972))
22+
* **dashboard:** show tier badge in org selector ([3c6cbfa](https://github.com/gitpod-io/gitpod-sdk-go/commit/3c6cbfae5c174df931ae0e365f6279f61a28ca21))
23+
* Define SCIMConfiguration database schema ([92e9eaf](https://github.com/gitpod-io/gitpod-sdk-go/commit/92e9eafacdd3573ba3805625c21ea476d459aeb8))
24+
* move agent mode from Spec to Status, add AgentModeChange signals ([32e7ca6](https://github.com/gitpod-io/gitpod-sdk-go/commit/32e7ca6a4a091dfe2d8e5e624ccfd78546e69465))
25+
* **secrets:** add ServiceAccountSecret entity with full support ([ec680a1](https://github.com/gitpod-io/gitpod-sdk-go/commit/ec680a173f2724fd28eb9c58e16e936cadbd1eba))
26+
27+
28+
### Bug Fixes
29+
30+
* **docs:** add missing pointer prefix to api.md return types ([82efe0a](https://github.com/gitpod-io/gitpod-sdk-go/commit/82efe0afe041ce2ffc4ee6452bc1f202c6ca169a))
31+
32+
33+
### Chores
34+
35+
* **internal:** update `actions/checkout` version ([ad9a294](https://github.com/gitpod-io/gitpod-sdk-go/commit/ad9a2944946a952fa632be07ef188a32ae46d8ab))
36+
337
## 0.8.0 (2026-01-09)
438

539
Full Changelog: [v0.7.0...v0.8.0](https://github.com/gitpod-io/gitpod-sdk-go/compare/v0.7.0...v0.8.0)

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Or to pin the version:
2424
<!-- x-release-please-start-version -->
2525

2626
```sh
27-
go get -u 'github.com/gitpod-io/gitpod-sdk-go@v0.8.0'
27+
go get -u 'github.com/gitpod-io/gitpod-sdk-go@v0.9.0'
2828
```
2929

3030
<!-- x-release-please-end -->

account.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -508,10 +508,12 @@ type AccountMembership struct {
508508
UserID string `json:"userId,required" format:"uuid"`
509509
// user_role is the role the user has in the organization
510510
UserRole shared.OrganizationRole `json:"userRole,required"`
511-
// organization_name is the member count of the organization the user is a member
512-
// of
513-
OrganizationMemberCount int64 `json:"organizationMemberCount"`
514-
JSON accountMembershipJSON `json:"-"`
511+
// organization_member_count is the member count of the organization the user is a
512+
// member of
513+
OrganizationMemberCount int64 `json:"organizationMemberCount"`
514+
// organization_tier is the tier of the organization (Free, Core, Enterprise)
515+
OrganizationTier shared.OrganizationTier `json:"organizationTier"`
516+
JSON accountMembershipJSON `json:"-"`
515517
}
516518

517519
// accountMembershipJSON contains the JSON metadata for the struct
@@ -522,6 +524,7 @@ type accountMembershipJSON struct {
522524
UserID apijson.Field
523525
UserRole apijson.Field
524526
OrganizationMemberCount apijson.Field
527+
OrganizationTier apijson.Field
525528
raw string
526529
ExtraFields map[string]apijson.Field
527530
}

agent.go

Lines changed: 95 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -388,10 +388,14 @@ type AgentCodeContextPullRequest struct {
388388
ID string `json:"id"`
389389
// Author name as provided by the SCM system
390390
Author string `json:"author"`
391+
// Whether this is a draft pull request
392+
Draft bool `json:"draft"`
391393
// Source branch name (the branch being merged from)
392394
FromBranch string `json:"fromBranch"`
393395
// Repository information
394396
Repository AgentCodeContextPullRequestRepository `json:"repository"`
397+
// Current state of the pull request
398+
State shared.State `json:"state"`
395399
// Pull request title
396400
Title string `json:"title"`
397401
// Target branch name (the branch being merged into)
@@ -406,8 +410,10 @@ type AgentCodeContextPullRequest struct {
406410
type agentCodeContextPullRequestJSON struct {
407411
ID apijson.Field
408412
Author apijson.Field
413+
Draft apijson.Field
409414
FromBranch apijson.Field
410415
Repository apijson.Field
416+
State apijson.Field
411417
Title apijson.Field
412418
ToBranch apijson.Field
413419
URL apijson.Field
@@ -482,10 +488,14 @@ type AgentCodeContextPullRequestParam struct {
482488
ID param.Field[string] `json:"id"`
483489
// Author name as provided by the SCM system
484490
Author param.Field[string] `json:"author"`
491+
// Whether this is a draft pull request
492+
Draft param.Field[bool] `json:"draft"`
485493
// Source branch name (the branch being merged from)
486494
FromBranch param.Field[string] `json:"fromBranch"`
487495
// Repository information
488496
Repository param.Field[AgentCodeContextPullRequestRepositoryParam] `json:"repository"`
497+
// Current state of the pull request
498+
State param.Field[shared.State] `json:"state"`
489499
// Pull request title
490500
Title param.Field[string] `json:"title"`
491501
// Target branch name (the branch being merged into)
@@ -783,9 +793,7 @@ type AgentExecutionSpec struct {
783793
// desired_phase is the desired phase of the agent run
784794
DesiredPhase AgentExecutionSpecDesiredPhase `json:"desiredPhase"`
785795
Limits AgentExecutionSpecLimits `json:"limits"`
786-
// mode is the operational mode for this agent execution
787-
Mode AgentMode `json:"mode"`
788-
Session string `json:"session"`
796+
Session string `json:"session"`
789797
// version of the spec. The value of this field has no semantic meaning (e.g. don't
790798
// interpret it as as a timestamp), but it can be used to impose a partial order.
791799
// If a.spec_version < b.spec_version then a was the spec before b.
@@ -800,7 +808,6 @@ type agentExecutionSpecJSON struct {
800808
CodeContext apijson.Field
801809
DesiredPhase apijson.Field
802810
Limits apijson.Field
803-
Mode apijson.Field
804811
Session apijson.Field
805812
SpecVersion apijson.Field
806813
raw string
@@ -879,6 +886,9 @@ type AgentExecutionStatus struct {
879886
Iterations string `json:"iterations"`
880887
// judgement is the judgement of the agent run produced by the judgement prompt.
881888
Judgement string `json:"judgement"`
889+
// mode is the current operational mode of the agent execution. This is set by the
890+
// agent when entering different modes (e.g., Ralph mode via /ona:ralph command).
891+
Mode AgentMode `json:"mode"`
882892
// outputs is a map of key-value pairs that can be set by the agent during
883893
// execution. Similar to task execution outputs, but with typed values for
884894
// structured data.
@@ -917,6 +927,7 @@ type agentExecutionStatusJSON struct {
917927
InputTokensUsed apijson.Field
918928
Iterations apijson.Field
919929
Judgement apijson.Field
930+
Mode apijson.Field
920931
Outputs apijson.Field
921932
OutputTokensUsed apijson.Field
922933
Phase apijson.Field
@@ -1136,11 +1147,13 @@ const (
11361147
AgentModeUnspecified AgentMode = "AGENT_MODE_UNSPECIFIED"
11371148
AgentModeExecution AgentMode = "AGENT_MODE_EXECUTION"
11381149
AgentModePlanning AgentMode = "AGENT_MODE_PLANNING"
1150+
AgentModeRalph AgentMode = "AGENT_MODE_RALPH"
1151+
AgentModeSpec AgentMode = "AGENT_MODE_SPEC"
11391152
)
11401153

11411154
func (r AgentMode) IsKnown() bool {
11421155
switch r {
1143-
case AgentModeUnspecified, AgentModeExecution, AgentModePlanning:
1156+
case AgentModeUnspecified, AgentModeExecution, AgentModePlanning, AgentModeRalph, AgentModeSpec:
11441157
return true
11451158
}
11461159
return false
@@ -1417,27 +1430,96 @@ type UserInputBlockParam struct {
14171430
ID param.Field[string] `json:"id"`
14181431
// Timestamp when this block was created. Used for debugging and support bundles.
14191432
CreatedAt param.Field[time.Time] `json:"createdAt" format:"date-time"`
1420-
// ImageInput allows sending images to the agent. Media type is inferred from magic
1421-
// bytes by the backend.
1422-
Image param.Field[UserInputBlockImageParam] `json:"image"`
1423-
Text param.Field[UserInputBlockTextParam] `json:"text"`
1433+
// ImageInput allows sending images to the agent. Client must provide the MIME
1434+
// type; backend validates against magic bytes.
1435+
//
1436+
// Deprecated: deprecated
1437+
Image param.Field[UserInputBlockImageParam] `json:"image"`
1438+
Inputs param.Field[[]UserInputBlockInputParam] `json:"inputs"`
1439+
// Deprecated: deprecated
1440+
Text param.Field[UserInputBlockTextParam] `json:"text"`
14241441
}
14251442

14261443
func (r UserInputBlockParam) MarshalJSON() (data []byte, err error) {
14271444
return apijson.MarshalRoot(r)
14281445
}
14291446

1430-
// ImageInput allows sending images to the agent. Media type is inferred from magic
1431-
// bytes by the backend.
1447+
// ImageInput allows sending images to the agent. Client must provide the MIME
1448+
// type; backend validates against magic bytes.
1449+
//
1450+
// Deprecated: deprecated
14321451
type UserInputBlockImageParam struct {
1433-
// Raw image data (max 4MB). Supported formats: PNG, JPEG, WebP.
1434-
Data param.Field[string] `json:"data" format:"byte"`
1452+
// Raw image data (max 4MB). Supported formats: PNG, JPEG.
1453+
Data param.Field[string] `json:"data" format:"byte"`
1454+
MimeType param.Field[UserInputBlockImageMimeType] `json:"mimeType"`
14351455
}
14361456

14371457
func (r UserInputBlockImageParam) MarshalJSON() (data []byte, err error) {
14381458
return apijson.MarshalRoot(r)
14391459
}
14401460

1461+
type UserInputBlockImageMimeType string
1462+
1463+
const (
1464+
UserInputBlockImageMimeTypeImagePng UserInputBlockImageMimeType = "image/png"
1465+
UserInputBlockImageMimeTypeImageJpeg UserInputBlockImageMimeType = "image/jpeg"
1466+
)
1467+
1468+
func (r UserInputBlockImageMimeType) IsKnown() bool {
1469+
switch r {
1470+
case UserInputBlockImageMimeTypeImagePng, UserInputBlockImageMimeTypeImageJpeg:
1471+
return true
1472+
}
1473+
return false
1474+
}
1475+
1476+
type UserInputBlockInputParam struct {
1477+
// ImageInput allows sending images to the agent. Client must provide the MIME
1478+
// type; backend validates against magic bytes.
1479+
Image param.Field[UserInputBlockInputsImageParam] `json:"image"`
1480+
Text param.Field[UserInputBlockInputsTextParam] `json:"text"`
1481+
}
1482+
1483+
func (r UserInputBlockInputParam) MarshalJSON() (data []byte, err error) {
1484+
return apijson.MarshalRoot(r)
1485+
}
1486+
1487+
// ImageInput allows sending images to the agent. Client must provide the MIME
1488+
// type; backend validates against magic bytes.
1489+
type UserInputBlockInputsImageParam struct {
1490+
// Raw image data (max 4MB). Supported formats: PNG, JPEG.
1491+
Data param.Field[string] `json:"data" format:"byte"`
1492+
MimeType param.Field[UserInputBlockInputsImageMimeType] `json:"mimeType"`
1493+
}
1494+
1495+
func (r UserInputBlockInputsImageParam) MarshalJSON() (data []byte, err error) {
1496+
return apijson.MarshalRoot(r)
1497+
}
1498+
1499+
type UserInputBlockInputsImageMimeType string
1500+
1501+
const (
1502+
UserInputBlockInputsImageMimeTypeImagePng UserInputBlockInputsImageMimeType = "image/png"
1503+
UserInputBlockInputsImageMimeTypeImageJpeg UserInputBlockInputsImageMimeType = "image/jpeg"
1504+
)
1505+
1506+
func (r UserInputBlockInputsImageMimeType) IsKnown() bool {
1507+
switch r {
1508+
case UserInputBlockInputsImageMimeTypeImagePng, UserInputBlockInputsImageMimeTypeImageJpeg:
1509+
return true
1510+
}
1511+
return false
1512+
}
1513+
1514+
type UserInputBlockInputsTextParam struct {
1515+
Content param.Field[string] `json:"content"`
1516+
}
1517+
1518+
func (r UserInputBlockInputsTextParam) MarshalJSON() (data []byte, err error) {
1519+
return apijson.MarshalRoot(r)
1520+
}
1521+
1522+
// Deprecated: deprecated
14411523
type UserInputBlockTextParam struct {
14421524
Content param.Field[string] `json:"content"`
14431525
}

agent_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/gitpod-io/gitpod-sdk-go"
1313
"github.com/gitpod-io/gitpod-sdk-go/internal/testutil"
1414
"github.com/gitpod-io/gitpod-sdk-go/option"
15+
"github.com/gitpod-io/gitpod-sdk-go/shared"
1516
)
1617

1718
func TestAgentNewExecutionConversationTokenWithOptionalParams(t *testing.T) {
@@ -264,8 +265,18 @@ func TestAgentSendToExecutionWithOptionalParams(t *testing.T) {
264265
ID: gitpod.F("id"),
265266
CreatedAt: gitpod.F(time.Now()),
266267
Image: gitpod.F(gitpod.UserInputBlockImageParam{
267-
Data: gitpod.F("U3RhaW5sZXNzIHJvY2tz"),
268+
Data: gitpod.F("U3RhaW5sZXNzIHJvY2tz"),
269+
MimeType: gitpod.F(gitpod.UserInputBlockImageMimeTypeImagePng),
268270
}),
271+
Inputs: gitpod.F([]gitpod.UserInputBlockInputParam{{
272+
Image: gitpod.F(gitpod.UserInputBlockInputsImageParam{
273+
Data: gitpod.F("U3RhaW5sZXNzIHJvY2tz"),
274+
MimeType: gitpod.F(gitpod.UserInputBlockInputsImageMimeTypeImagePng),
275+
}),
276+
Text: gitpod.F(gitpod.UserInputBlockInputsTextParam{
277+
Content: gitpod.F("x"),
278+
}),
279+
}}),
269280
Text: gitpod.F(gitpod.UserInputBlockTextParam{
270281
Content: gitpod.F("Generate a report based on the latest logs."),
271282
}),
@@ -305,13 +316,15 @@ func TestAgentStartExecutionWithOptionalParams(t *testing.T) {
305316
PullRequest: gitpod.F(gitpod.AgentCodeContextPullRequestParam{
306317
ID: gitpod.F("id"),
307318
Author: gitpod.F("author"),
319+
Draft: gitpod.F(true),
308320
FromBranch: gitpod.F("fromBranch"),
309321
Repository: gitpod.F(gitpod.AgentCodeContextPullRequestRepositoryParam{
310322
CloneURL: gitpod.F("cloneUrl"),
311323
Host: gitpod.F("host"),
312324
Name: gitpod.F("name"),
313325
Owner: gitpod.F("owner"),
314326
}),
327+
State: gitpod.F(shared.StateUnspecified),
315328
Title: gitpod.F("title"),
316329
ToBranch: gitpod.F("toBranch"),
317330
URL: gitpod.F("url"),

0 commit comments

Comments
 (0)