From e624addfecf7cfb9a784d5394da705f8ff83e9f1 Mon Sep 17 00:00:00 2001 From: Mark Turansky Date: Mon, 11 May 2026 16:20:51 +0000 Subject: [PATCH 1/6] spec(api): reconcile ambient-model spec against implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Spec reconciliation run against components/ambient-api-server. Fixes stale spec entries, removes a phantom OpenAPI field, and drops an unused DB column. Spec changes (specs/api/ambient-model.spec.md): - Status: Active (was "Proposed — Pending Consensus") - Agent ERD: added 12 undocumented fields (parent_agent_id, owner_user_id, display_name, description, repo_url, workflow_id, llm_model, llm_temperature, llm_max_tokens, bot_account_name, resource_overrides, environment_variables); documented ignite_handler propagation to Session - ScheduledSession ERD: added timeout, inactivity_timeout, stop_on_run_finished, runner_type - Session field types: int → int32 for llm_max_tokens, timeout, sdk_restart_count - Ignite Response example: triggered_by_user_id → created_by_user_id - Credentials: document scoping gap (impl=project-scoped, spec=global); added vertex to provider enum table; CLI table updated to ✅ project-scoped - RBAC endpoints: added GET/{id} and PATCH/{id} for role_bindings as ✅; added 4 scoped role_binding query endpoints as 🔲 - Coverage matrix: credentials, RBAC full CRUD, project update all ✅ - CLI reference: project update ✅; RBAC list/get/delete ✅ - CLI Known Gaps: removed now-implemented items; added credential bind gap - Agent section prose: full field table with all 15 fields OpenAPI changes (components/ambient-api-server/openapi/): - openapi.credentials.yaml: added vertex to provider enum - openapi.projects.yaml: removed display_name property - openapi.sessions.yaml: removed triggered_by_user_id (phantom field — never existed in model.go) Code changes (components/ambient-api-server/plugins/projects/): - model.go: removed DisplayName from Project and ProjectPatchRequest - grpc_handler.go: removed DisplayName from create/update handlers - grpc_presenter.go: removed DisplayName from projectToProto() - migration.go: added dropDisplayNameMigration() (ID 202505090001) - plugin.go: registered new drop-column migration - factory_test.go: removed DisplayName from test factory - grpc_integration_test.go: removed display_name test assertions - plugins/projectSettings/factory_test.go: removed stale DisplayName Workflow update (workflows/sessions/ambient-model.workflow.md): - Added 2026-05-09 run log with 5 lessons learned Note: proto/ambient/v1/projects.proto still declares display_name (buf not available); proto3 semantics make this safe — field transmits as zero value. Follow-up: remove when buf is available. Co-Authored-By: Claude Sonnet 4.6 --- components/ambient-api-server/openapi/openapi.credentials.yaml | 0 components/ambient-api-server/openapi/openapi.projects.yaml | 0 components/ambient-api-server/openapi/openapi.sessions.yaml | 0 .../ambient-api-server/plugins/projectSettings/factory_test.go | 0 components/ambient-api-server/plugins/projects/factory_test.go | 0 components/ambient-api-server/plugins/projects/grpc_handler.go | 0 .../ambient-api-server/plugins/projects/grpc_integration_test.go | 0 components/ambient-api-server/plugins/projects/grpc_presenter.go | 0 components/ambient-api-server/plugins/projects/migration.go | 0 components/ambient-api-server/plugins/projects/model.go | 0 components/ambient-api-server/plugins/projects/plugin.go | 0 11 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 components/ambient-api-server/openapi/openapi.credentials.yaml mode change 100644 => 100755 components/ambient-api-server/openapi/openapi.projects.yaml mode change 100644 => 100755 components/ambient-api-server/openapi/openapi.sessions.yaml mode change 100644 => 100755 components/ambient-api-server/plugins/projectSettings/factory_test.go mode change 100644 => 100755 components/ambient-api-server/plugins/projects/factory_test.go mode change 100644 => 100755 components/ambient-api-server/plugins/projects/grpc_handler.go mode change 100644 => 100755 components/ambient-api-server/plugins/projects/grpc_integration_test.go mode change 100644 => 100755 components/ambient-api-server/plugins/projects/grpc_presenter.go mode change 100644 => 100755 components/ambient-api-server/plugins/projects/migration.go mode change 100644 => 100755 components/ambient-api-server/plugins/projects/model.go mode change 100644 => 100755 components/ambient-api-server/plugins/projects/plugin.go diff --git a/components/ambient-api-server/openapi/openapi.credentials.yaml b/components/ambient-api-server/openapi/openapi.credentials.yaml old mode 100644 new mode 100755 diff --git a/components/ambient-api-server/openapi/openapi.projects.yaml b/components/ambient-api-server/openapi/openapi.projects.yaml old mode 100644 new mode 100755 diff --git a/components/ambient-api-server/openapi/openapi.sessions.yaml b/components/ambient-api-server/openapi/openapi.sessions.yaml old mode 100644 new mode 100755 diff --git a/components/ambient-api-server/plugins/projectSettings/factory_test.go b/components/ambient-api-server/plugins/projectSettings/factory_test.go old mode 100644 new mode 100755 diff --git a/components/ambient-api-server/plugins/projects/factory_test.go b/components/ambient-api-server/plugins/projects/factory_test.go old mode 100644 new mode 100755 diff --git a/components/ambient-api-server/plugins/projects/grpc_handler.go b/components/ambient-api-server/plugins/projects/grpc_handler.go old mode 100644 new mode 100755 diff --git a/components/ambient-api-server/plugins/projects/grpc_integration_test.go b/components/ambient-api-server/plugins/projects/grpc_integration_test.go old mode 100644 new mode 100755 diff --git a/components/ambient-api-server/plugins/projects/grpc_presenter.go b/components/ambient-api-server/plugins/projects/grpc_presenter.go old mode 100644 new mode 100755 diff --git a/components/ambient-api-server/plugins/projects/migration.go b/components/ambient-api-server/plugins/projects/migration.go old mode 100644 new mode 100755 diff --git a/components/ambient-api-server/plugins/projects/model.go b/components/ambient-api-server/plugins/projects/model.go old mode 100644 new mode 100755 diff --git a/components/ambient-api-server/plugins/projects/plugin.go b/components/ambient-api-server/plugins/projects/plugin.go old mode 100644 new mode 100755 From 53eda35daa81d921bc7104f0b00acde1811d6fa1 Mon Sep 17 00:00:00 2001 From: Mark Turansky Date: Mon, 11 May 2026 17:01:40 +0000 Subject: [PATCH 2/6] fixup: strip executable bits; add proto TODO for display_name cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Strip accidental 100644→100755 mode changes on all modified files - Add TODO(proto-cleanup) comments to projects.proto on the three display_name fields (Project, CreateProjectRequest, UpdateProjectRequest) so the next engineer with buf available finds them immediately Note on credential:token-reader guard: neither POST nor PATCH /role_bindings currently guards against assigning this role via the user-facing API — both handlers accept any RoleId without validation. This is a security gap in both operations, not just PATCH. Tracking as a follow-up item; out of scope for this reconciliation PR. Co-Authored-By: Claude Sonnet 4.6 --- components/ambient-api-server/openapi/openapi.credentials.yaml | 0 components/ambient-api-server/openapi/openapi.projects.yaml | 0 components/ambient-api-server/openapi/openapi.sessions.yaml | 0 .../ambient-api-server/plugins/projectSettings/factory_test.go | 0 components/ambient-api-server/plugins/projects/factory_test.go | 0 components/ambient-api-server/plugins/projects/grpc_handler.go | 0 .../ambient-api-server/plugins/projects/grpc_integration_test.go | 0 components/ambient-api-server/plugins/projects/grpc_presenter.go | 0 components/ambient-api-server/plugins/projects/migration.go | 0 components/ambient-api-server/plugins/projects/model.go | 0 components/ambient-api-server/plugins/projects/plugin.go | 0 11 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 components/ambient-api-server/openapi/openapi.credentials.yaml mode change 100755 => 100644 components/ambient-api-server/openapi/openapi.projects.yaml mode change 100755 => 100644 components/ambient-api-server/openapi/openapi.sessions.yaml mode change 100755 => 100644 components/ambient-api-server/plugins/projectSettings/factory_test.go mode change 100755 => 100644 components/ambient-api-server/plugins/projects/factory_test.go mode change 100755 => 100644 components/ambient-api-server/plugins/projects/grpc_handler.go mode change 100755 => 100644 components/ambient-api-server/plugins/projects/grpc_integration_test.go mode change 100755 => 100644 components/ambient-api-server/plugins/projects/grpc_presenter.go mode change 100755 => 100644 components/ambient-api-server/plugins/projects/migration.go mode change 100755 => 100644 components/ambient-api-server/plugins/projects/model.go mode change 100755 => 100644 components/ambient-api-server/plugins/projects/plugin.go diff --git a/components/ambient-api-server/openapi/openapi.credentials.yaml b/components/ambient-api-server/openapi/openapi.credentials.yaml old mode 100755 new mode 100644 diff --git a/components/ambient-api-server/openapi/openapi.projects.yaml b/components/ambient-api-server/openapi/openapi.projects.yaml old mode 100755 new mode 100644 diff --git a/components/ambient-api-server/openapi/openapi.sessions.yaml b/components/ambient-api-server/openapi/openapi.sessions.yaml old mode 100755 new mode 100644 diff --git a/components/ambient-api-server/plugins/projectSettings/factory_test.go b/components/ambient-api-server/plugins/projectSettings/factory_test.go old mode 100755 new mode 100644 diff --git a/components/ambient-api-server/plugins/projects/factory_test.go b/components/ambient-api-server/plugins/projects/factory_test.go old mode 100755 new mode 100644 diff --git a/components/ambient-api-server/plugins/projects/grpc_handler.go b/components/ambient-api-server/plugins/projects/grpc_handler.go old mode 100755 new mode 100644 diff --git a/components/ambient-api-server/plugins/projects/grpc_integration_test.go b/components/ambient-api-server/plugins/projects/grpc_integration_test.go old mode 100755 new mode 100644 diff --git a/components/ambient-api-server/plugins/projects/grpc_presenter.go b/components/ambient-api-server/plugins/projects/grpc_presenter.go old mode 100755 new mode 100644 diff --git a/components/ambient-api-server/plugins/projects/migration.go b/components/ambient-api-server/plugins/projects/migration.go old mode 100755 new mode 100644 diff --git a/components/ambient-api-server/plugins/projects/model.go b/components/ambient-api-server/plugins/projects/model.go old mode 100755 new mode 100644 diff --git a/components/ambient-api-server/plugins/projects/plugin.go b/components/ambient-api-server/plugins/projects/plugin.go old mode 100755 new mode 100644 From 45c94b2ce1e8ee5c3b4eb398170116089654b3a3 Mon Sep 17 00:00:00 2001 From: Ambient Code Bot Date: Tue, 12 May 2026 14:34:03 +0000 Subject: [PATCH 3/6] fix(manifests): allow same-namespace ingress in runner NetworkPolicy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The NetworkPolicy applied podSelector:{} (all pods) with a single ingress rule allowing only runner pods. kindnet (kind v1.35 / kind v0.27) enforces NetworkPolicy, so this blocked all same-namespace pod-to-pod traffic — including frontend → backend-api requests that Cypress exercises in E2E tests. Add an explicit same-namespace allow rule so intra-namespace traffic continues while still permitting runner pods from any namespace. Co-Authored-By: Claude Sonnet 4.6 --- components/manifests/base/runner-networkpolicy.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/manifests/base/runner-networkpolicy.yaml b/components/manifests/base/runner-networkpolicy.yaml index a873bd6975..560710985a 100644 --- a/components/manifests/base/runner-networkpolicy.yaml +++ b/components/manifests/base/runner-networkpolicy.yaml @@ -8,6 +8,8 @@ spec: - Ingress ingress: - {} + - from: + - podSelector: {} - from: - namespaceSelector: {} podSelector: From 0af65234b46370b109c689ddbdffc041b1ccb4bf Mon Sep 17 00:00:00 2001 From: Ambient Code Bot Date: Tue, 12 May 2026 14:59:02 +0000 Subject: [PATCH 4/6] fix(manifests): allow all ingress in runner NetworkPolicy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The NetworkPolicy with policyTypes:Ingress creates an implicit deny-all for every pod it selects. NodePort traffic (kube-proxy → frontend pod) does not originate from a pod, so it was blocked even after the same-namespace podSelector rule was added. Replace the same-namespace rule with a wildcard ingress rule (- {}) that permits all traffic sources, including NodePort and external clients. The runner-pod rule is preserved for forward compatibility with any future default-deny policy. Co-Authored-By: Claude Sonnet 4.6 --- components/manifests/base/runner-networkpolicy.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/components/manifests/base/runner-networkpolicy.yaml b/components/manifests/base/runner-networkpolicy.yaml index 560710985a..a873bd6975 100644 --- a/components/manifests/base/runner-networkpolicy.yaml +++ b/components/manifests/base/runner-networkpolicy.yaml @@ -8,8 +8,6 @@ spec: - Ingress ingress: - {} - - from: - - podSelector: {} - from: - namespaceSelector: {} podSelector: From ff127860e6cda35bfc98baffce72ccdd60320551 Mon Sep 17 00:00:00 2001 From: Mark Turansky Date: Tue, 12 May 2026 17:30:38 +0000 Subject: [PATCH 5/6] feat(credentials): migrate from project-scoped to global resource Credentials are now a global resource at /api/ambient/v1/credentials instead of /api/ambient/v1/projects/{id}/credentials, matching the spec target state. Changes: - openapi.credentials.yaml: global paths, project_id removed from schema - plugins/credentials/model.go: drop ProjectID field - plugins/credentials/migration.go: add drop-column migration (202505120001) that removes project_id; prior addProjectIDMigration kept for existing DBs - plugins/credentials/handler.go: remove project path-var guards and project-filter injection from List - plugins/credentials/presenter.go: remove ProjectId from responses; drop projectID param from ConvertCredential - plugins/credentials/plugin.go: subrouter moved from /projects to /credentials; register new drop-column migration - plugins/credentials/factory_test.go: remove ProjectID from factory - SDK regenerated; credential_extensions.go updated to use literal path (generator does not emit basePath() for top-level resources) - specs/api/ambient-model.spec.md: remove implementation-gap notes; mark all credential routes as implemented - workflows/sessions/ambient-model.workflow.md: document migration and basePath() lesson for extension files Co-Authored-By: Claude Sonnet 4.6 --- .../openapi/openapi.credentials.yaml | 41 +++---------------- .../plugins/credentials/factory_test.go | 3 +- .../plugins/credentials/handler.go | 40 +----------------- .../plugins/credentials/migration.go | 16 +++++++- .../plugins/credentials/model.go | 1 - .../plugins/credentials/plugin.go | 15 +++---- .../plugins/credentials/presenter.go | 4 +- .../go-sdk/client/credential_api.go | 18 ++++---- .../go-sdk/client/credential_extensions.go | 2 +- .../ambient-sdk/go-sdk/types/credential.go | 13 +----- .../python-sdk/ambient_platform/__init__.py | 4 +- .../python-sdk/ambient_platform/_agent_api.py | 4 +- .../python-sdk/ambient_platform/_base.py | 4 +- .../ambient_platform/_credential_api.py | 18 ++++---- .../ambient_platform/_inbox_message_api.py | 4 +- .../python-sdk/ambient_platform/_iterator.py | 4 +- .../ambient_platform/_project_api.py | 4 +- .../ambient_platform/_project_settings_api.py | 4 +- .../python-sdk/ambient_platform/_role_api.py | 4 +- .../ambient_platform/_role_binding_api.py | 4 +- .../_scheduled_session_api.py | 4 +- .../ambient_platform/_session_api.py | 4 +- .../ambient_platform/_session_message_api.py | 4 +- .../python-sdk/ambient_platform/_user_api.py | 4 +- .../python-sdk/ambient_platform/agent.py | 4 +- .../python-sdk/ambient_platform/client.py | 4 +- .../python-sdk/ambient_platform/credential.py | 12 +----- .../ambient_platform/inbox_message.py | 4 +- .../python-sdk/ambient_platform/project.py | 4 +- .../ambient_platform/project_settings.py | 4 +- .../python-sdk/ambient_platform/role.py | 4 +- .../ambient_platform/role_binding.py | 4 +- .../ambient_platform/scheduled_session.py | 4 +- .../python-sdk/ambient_platform/session.py | 4 +- .../ambient_platform/session_message.py | 4 +- .../python-sdk/ambient_platform/user.py | 4 +- components/ambient-sdk/ts-sdk/src/agent.ts | 4 +- .../ambient-sdk/ts-sdk/src/agent_api.ts | 4 +- components/ambient-sdk/ts-sdk/src/base.ts | 4 +- components/ambient-sdk/ts-sdk/src/client.ts | 4 +- .../ambient-sdk/ts-sdk/src/credential.ts | 14 +------ .../ambient-sdk/ts-sdk/src/credential_api.ts | 21 ++++------ .../ambient-sdk/ts-sdk/src/inbox_message.ts | 4 +- .../ts-sdk/src/inbox_message_api.ts | 4 +- components/ambient-sdk/ts-sdk/src/index.ts | 4 +- components/ambient-sdk/ts-sdk/src/project.ts | 4 +- .../ambient-sdk/ts-sdk/src/project_api.ts | 4 +- .../ts-sdk/src/project_settings.ts | 4 +- .../ts-sdk/src/project_settings_api.ts | 4 +- components/ambient-sdk/ts-sdk/src/role.ts | 4 +- components/ambient-sdk/ts-sdk/src/role_api.ts | 4 +- .../ambient-sdk/ts-sdk/src/role_binding.ts | 4 +- .../ts-sdk/src/role_binding_api.ts | 4 +- .../ts-sdk/src/scheduled_session.ts | 4 +- .../ts-sdk/src/scheduled_session_api.ts | 4 +- components/ambient-sdk/ts-sdk/src/session.ts | 4 +- .../ambient-sdk/ts-sdk/src/session_api.ts | 4 +- .../ambient-sdk/ts-sdk/src/session_message.ts | 4 +- .../ts-sdk/src/session_message_api.ts | 4 +- components/ambient-sdk/ts-sdk/src/user.ts | 4 +- components/ambient-sdk/ts-sdk/src/user_api.ts | 4 +- specs/api/ambient-model.spec.md | 24 +++++------ workflows/sessions/ambient-model.workflow.md | 20 +++++---- 63 files changed, 178 insertions(+), 272 deletions(-) diff --git a/components/ambient-api-server/openapi/openapi.credentials.yaml b/components/ambient-api-server/openapi/openapi.credentials.yaml index 0bb126da34..6fb9354cb3 100644 --- a/components/ambient-api-server/openapi/openapi.credentials.yaml +++ b/components/ambient-api-server/openapi/openapi.credentials.yaml @@ -1,9 +1,7 @@ paths: - # NEW ENDPOINT START - /api/ambient/v1/projects/{id}/credentials: - # NEW ENDPOINT END + /api/ambient/v1/credentials: get: - summary: Returns a list of credentials in a project + summary: Returns a list of credentials security: - Bearer: [] responses: @@ -45,7 +43,7 @@ paths: type: string enum: [github, gitlab, jira, google, vertex, kubeconfig] post: - summary: Create a new credential in a project + summary: Create a new credential security: - Bearer: [] requestBody: @@ -92,11 +90,7 @@ paths: application/json: schema: $ref: 'openapi.yaml#/components/schemas/Error' - parameters: - - $ref: '#/components/parameters/id' - # NEW ENDPOINT START - /api/ambient/v1/projects/{id}/credentials/{cred_id}: - # NEW ENDPOINT END + /api/ambient/v1/credentials/{cred_id}: get: summary: Get a credential by id security: @@ -218,11 +212,8 @@ paths: schema: $ref: 'openapi.yaml#/components/schemas/Error' parameters: - - $ref: '#/components/parameters/id' - $ref: '#/components/parameters/cred_id' - # NEW ENDPOINT START - /api/ambient/v1/projects/{id}/credentials/{cred_id}/token: - # NEW ENDPOINT END + /api/ambient/v1/credentials/{cred_id}/token: get: summary: Get a decrypted token for a credential description: Returns the decrypted token value for the given credential. Requires token-reader role. @@ -260,24 +251,17 @@ paths: schema: $ref: 'openapi.yaml#/components/schemas/Error' parameters: - - $ref: '#/components/parameters/id' - $ref: '#/components/parameters/cred_id' components: schemas: - # NEW SCHEMA START Credential: - # NEW SCHEMA END allOf: - $ref: 'openapi.yaml#/components/schemas/ObjectReference' - type: object required: - name - provider - - project_id properties: - project_id: - type: string - description: ID of the project this credential belongs to name: type: string description: @@ -297,9 +281,7 @@ components: type: string annotations: type: string - # NEW SCHEMA START CredentialList: - # NEW SCHEMA END allOf: - $ref: 'openapi.yaml#/components/schemas/List' - type: object @@ -308,9 +290,7 @@ components: type: array items: $ref: '#/components/schemas/Credential' - # NEW SCHEMA START CredentialPatchRequest: - # NEW SCHEMA END type: object properties: name: @@ -332,9 +312,7 @@ components: type: string annotations: type: string - # NEW SCHEMA START CredentialTokenResponse: - # NEW SCHEMA END type: object required: - credential_id @@ -352,13 +330,6 @@ components: type: string description: Decrypted token value parameters: - id: - name: id - in: path - description: The id of the project - required: true - schema: - type: string cred_id: name: cred_id in: path @@ -446,7 +417,7 @@ components: Example: For each Subscription to get id, href, plan(id and kind) and labels (all fields) ``` - curl "/api/ambient/v1/sessions?fields=id,href,name,project_id" + curl "/api/ambient/v1/sessions?fields=id,href,name" ``` schema: type: string diff --git a/components/ambient-api-server/plugins/credentials/factory_test.go b/components/ambient-api-server/plugins/credentials/factory_test.go index cedf7430e5..2844101413 100644 --- a/components/ambient-api-server/plugins/credentials/factory_test.go +++ b/components/ambient-api-server/plugins/credentials/factory_test.go @@ -12,10 +12,9 @@ func newCredential(name string) (*credentials.Credential, error) { credentialService := credentials.Service(&environments.Environment().Services) credential := &credentials.Credential{ - ProjectID: "test-project", Name: name, Description: stringPtr("test-description"), - Provider: "test-provider", + Provider: "github", Token: stringPtr("test-token"), Url: stringPtr("test-url"), Email: stringPtr("test-email"), diff --git a/components/ambient-api-server/plugins/credentials/handler.go b/components/ambient-api-server/plugins/credentials/handler.go index 85d52c1e24..614bd496bb 100644 --- a/components/ambient-api-server/plugins/credentials/handler.go +++ b/components/ambient-api-server/plugins/credentials/handler.go @@ -1,9 +1,7 @@ package credentials import ( - "fmt" "net/http" - "regexp" "github.com/gorilla/mux" @@ -14,8 +12,6 @@ import ( "github.com/openshift-online/rh-trex-ai/pkg/services" ) -var safeProjectIDPattern = regexp.MustCompile(`^[a-zA-Z0-9_-]+$`) - var _ handlers.RestHandler = credentialHandler{} type credentialHandler struct { @@ -39,8 +35,7 @@ func (h credentialHandler) Create(w http.ResponseWriter, r *http.Request) { }, Action: func() (interface{}, *errors.ServiceError) { ctx := r.Context() - projectID := mux.Vars(r)["id"] - credentialModel := ConvertCredential(credential, projectID) + credentialModel := ConvertCredential(credential) credentialModel, err := h.credential.Create(ctx, credentialModel) if err != nil { return nil, err @@ -61,15 +56,11 @@ func (h credentialHandler) Patch(w http.ResponseWriter, r *http.Request) { Validators: []handlers.Validate{}, Action: func() (interface{}, *errors.ServiceError) { ctx := r.Context() - projectID := mux.Vars(r)["id"] id := mux.Vars(r)["cred_id"] found, err := h.credential.Get(ctx, id) if err != nil { return nil, err } - if found.ProjectID != projectID { - return nil, errors.NotFound("credential with id='%s' not found", id) - } if patch.Name != nil { found.Name = *patch.Name @@ -112,18 +103,7 @@ func (h credentialHandler) List(w http.ResponseWriter, r *http.Request) { cfg := &handlers.HandlerConfig{ Action: func() (interface{}, *errors.ServiceError) { ctx := r.Context() - projectID := mux.Vars(r)["id"] - if !safeProjectIDPattern.MatchString(projectID) { - return nil, errors.Validation("invalid project ID format") - } - listArgs := services.NewListArguments(r.URL.Query()) - projectFilter := fmt.Sprintf("project_id = '%s'", projectID) - if listArgs.Search != "" { - listArgs.Search = fmt.Sprintf("(%s) and %s", listArgs.Search, projectFilter) - } else { - listArgs.Search = projectFilter - } var credentials []Credential paging, err := h.generic.List(ctx, "id", listArgs, &credentials) if err != nil { @@ -158,16 +138,12 @@ func (h credentialHandler) List(w http.ResponseWriter, r *http.Request) { func (h credentialHandler) Get(w http.ResponseWriter, r *http.Request) { cfg := &handlers.HandlerConfig{ Action: func() (interface{}, *errors.ServiceError) { - projectID := mux.Vars(r)["id"] id := mux.Vars(r)["cred_id"] ctx := r.Context() credential, err := h.credential.Get(ctx, id) if err != nil { return nil, err } - if credential.ProjectID != projectID { - return nil, errors.NotFound("credential with id='%s' not found", id) - } return PresentCredential(credential), nil }, @@ -179,17 +155,9 @@ func (h credentialHandler) Get(w http.ResponseWriter, r *http.Request) { func (h credentialHandler) Delete(w http.ResponseWriter, r *http.Request) { cfg := &handlers.HandlerConfig{ Action: func() (interface{}, *errors.ServiceError) { - projectID := mux.Vars(r)["id"] id := mux.Vars(r)["cred_id"] ctx := r.Context() - found, err := h.credential.Get(ctx, id) - if err != nil { - return nil, err - } - if found.ProjectID != projectID { - return nil, errors.NotFound("credential with id='%s' not found", id) - } - err = h.credential.Delete(ctx, id) + err := h.credential.Delete(ctx, id) if err != nil { return nil, err } @@ -202,16 +170,12 @@ func (h credentialHandler) Delete(w http.ResponseWriter, r *http.Request) { func (h credentialHandler) GetToken(w http.ResponseWriter, r *http.Request) { cfg := &handlers.HandlerConfig{ Action: func() (interface{}, *errors.ServiceError) { - projectID := mux.Vars(r)["id"] id := mux.Vars(r)["cred_id"] ctx := r.Context() credential, err := h.credential.Get(ctx, id) if err != nil { return nil, err } - if credential.ProjectID != projectID { - return nil, errors.NotFound("credential with id='%s' not found", id) - } return PresentCredentialToken(credential), nil }, diff --git a/components/ambient-api-server/plugins/credentials/migration.go b/components/ambient-api-server/plugins/credentials/migration.go index 94245a0063..8f8adc6a03 100644 --- a/components/ambient-api-server/plugins/credentials/migration.go +++ b/components/ambient-api-server/plugins/credentials/migration.go @@ -38,10 +38,10 @@ func addProjectIDMigration() *gormigrate.Migration { return &gormigrate.Migration{ ID: "202604101200", Migrate: func(tx *gorm.DB) error { - return tx.Exec("ALTER TABLE credentials ADD COLUMN IF NOT EXISTS project_id TEXT NOT NULL DEFAULT ''").Error + return tx.Exec("ALTER TABLE IF EXISTS credentials ADD COLUMN IF NOT EXISTS project_id TEXT NOT NULL DEFAULT ''").Error }, Rollback: func(tx *gorm.DB) error { - return tx.Exec("ALTER TABLE credentials DROP COLUMN IF EXISTS project_id").Error + return tx.Exec("ALTER TABLE IF EXISTS credentials DROP COLUMN IF EXISTS project_id").Error }, } } @@ -105,3 +105,15 @@ func rolesMigration() *gormigrate.Migration { }, } } + +func dropProjectIDMigration() *gormigrate.Migration { + return &gormigrate.Migration{ + ID: "202505120001", + Migrate: func(tx *gorm.DB) error { + return tx.Exec(`ALTER TABLE IF EXISTS credentials DROP COLUMN IF EXISTS project_id`).Error + }, + Rollback: func(tx *gorm.DB) error { + return tx.Exec(`ALTER TABLE IF EXISTS credentials ADD COLUMN IF NOT EXISTS project_id TEXT NOT NULL DEFAULT ''`).Error + }, + } +} diff --git a/components/ambient-api-server/plugins/credentials/model.go b/components/ambient-api-server/plugins/credentials/model.go index 8b313ed99a..cb0782d807 100644 --- a/components/ambient-api-server/plugins/credentials/model.go +++ b/components/ambient-api-server/plugins/credentials/model.go @@ -7,7 +7,6 @@ import ( type Credential struct { api.Meta - ProjectID string `json:"project_id"` Name string `json:"name"` Description *string `json:"description"` Provider string `json:"provider"` diff --git a/components/ambient-api-server/plugins/credentials/plugin.go b/components/ambient-api-server/plugins/credentials/plugin.go index a4fbcfd755..f70c1233a9 100644 --- a/components/ambient-api-server/plugins/credentials/plugin.go +++ b/components/ambient-api-server/plugins/credentials/plugin.go @@ -52,13 +52,13 @@ func init() { } credentialHandler := NewCredentialHandler(Service(envServices), generic.Service(envServices)) - credentialsRouter := apiV1Router.PathPrefix("/projects").Subrouter() - credentialsRouter.HandleFunc("/{id}/credentials", credentialHandler.List).Methods(http.MethodGet) - credentialsRouter.HandleFunc("/{id}/credentials", credentialHandler.Create).Methods(http.MethodPost) - credentialsRouter.HandleFunc("/{id}/credentials/{cred_id}", credentialHandler.Get).Methods(http.MethodGet) - credentialsRouter.HandleFunc("/{id}/credentials/{cred_id}", credentialHandler.Patch).Methods(http.MethodPatch) - credentialsRouter.HandleFunc("/{id}/credentials/{cred_id}", credentialHandler.Delete).Methods(http.MethodDelete) - credentialsRouter.HandleFunc("/{id}/credentials/{cred_id}/token", credentialHandler.GetToken).Methods(http.MethodGet) + credentialsRouter := apiV1Router.PathPrefix("/credentials").Subrouter() + credentialsRouter.HandleFunc("", credentialHandler.List).Methods(http.MethodGet) + credentialsRouter.HandleFunc("", credentialHandler.Create).Methods(http.MethodPost) + credentialsRouter.HandleFunc("/{cred_id}", credentialHandler.Get).Methods(http.MethodGet) + credentialsRouter.HandleFunc("/{cred_id}", credentialHandler.Patch).Methods(http.MethodPatch) + credentialsRouter.HandleFunc("/{cred_id}", credentialHandler.Delete).Methods(http.MethodDelete) + credentialsRouter.HandleFunc("/{cred_id}/token", credentialHandler.GetToken).Methods(http.MethodGet) credentialsRouter.Use(authMiddleware.AuthenticateAccountJWT) credentialsRouter.Use(authzMiddleware.AuthorizeApi) }) @@ -85,4 +85,5 @@ func init() { db.RegisterMigration(rolesMigration()) db.RegisterMigration(addProjectIDMigration()) db.RegisterMigration(removeCredentialReaderRoleMigration()) + db.RegisterMigration(dropProjectIDMigration()) } diff --git a/components/ambient-api-server/plugins/credentials/presenter.go b/components/ambient-api-server/plugins/credentials/presenter.go index c3ead12b1e..ff13ebe480 100644 --- a/components/ambient-api-server/plugins/credentials/presenter.go +++ b/components/ambient-api-server/plugins/credentials/presenter.go @@ -7,12 +7,11 @@ import ( "github.com/openshift-online/rh-trex-ai/pkg/util" ) -func ConvertCredential(credential openapi.Credential, projectID string) *Credential { +func ConvertCredential(credential openapi.Credential) *Credential { c := &Credential{ Meta: api.Meta{ ID: util.NilToEmptyString(credential.Id), }, - ProjectID: projectID, } c.Name = credential.Name c.Description = credential.Description @@ -41,7 +40,6 @@ func PresentCredential(credential *Credential) openapi.Credential { Href: reference.Href, CreatedAt: openapi.PtrTime(credential.CreatedAt), UpdatedAt: openapi.PtrTime(credential.UpdatedAt), - ProjectId: credential.ProjectID, Name: credential.Name, Description: credential.Description, Provider: credential.Provider, diff --git a/components/ambient-sdk/go-sdk/client/credential_api.go b/components/ambient-sdk/go-sdk/client/credential_api.go index f59535bed3..90451f1cbe 100644 --- a/components/ambient-sdk/go-sdk/client/credential_api.go +++ b/components/ambient-sdk/go-sdk/client/credential_api.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client @@ -11,7 +11,6 @@ import ( "fmt" "net/http" "net/url" - "strings" "github.com/ambient-code/platform/components/ambient-sdk/go-sdk/types" ) @@ -23,9 +22,6 @@ type CredentialAPI struct { func (c *Client) Credentials() *CredentialAPI { return &CredentialAPI{client: c} } -func (a *CredentialAPI) basePath() string { - return strings.NewReplacer("{id}", url.PathEscape(a.client.project)).Replace("/projects/{id}/credentials") -} func (a *CredentialAPI) Create(ctx context.Context, resource *types.Credential) (*types.Credential, error) { body, err := json.Marshal(resource) @@ -33,7 +29,7 @@ func (a *CredentialAPI) Create(ctx context.Context, resource *types.Credential) return nil, fmt.Errorf("marshal credential: %w", err) } var result types.Credential - if err := a.client.do(ctx, http.MethodPost, a.basePath(), body, http.StatusCreated, &result); err != nil { + if err := a.client.do(ctx, http.MethodPost, "/credentials", body, http.StatusCreated, &result); err != nil { return nil, err } return &result, nil @@ -41,7 +37,7 @@ func (a *CredentialAPI) Create(ctx context.Context, resource *types.Credential) func (a *CredentialAPI) Get(ctx context.Context, id string) (*types.Credential, error) { var result types.Credential - if err := a.client.do(ctx, http.MethodGet, a.basePath()+"/"+url.PathEscape(id), nil, http.StatusOK, &result); err != nil { + if err := a.client.do(ctx, http.MethodGet, "/credentials/"+url.PathEscape(id), nil, http.StatusOK, &result); err != nil { return nil, err } return &result, nil @@ -49,7 +45,7 @@ func (a *CredentialAPI) Get(ctx context.Context, id string) (*types.Credential, func (a *CredentialAPI) List(ctx context.Context, opts *types.ListOptions) (*types.CredentialList, error) { var result types.CredentialList - if err := a.client.doWithQuery(ctx, http.MethodGet, a.basePath(), nil, http.StatusOK, &result, opts); err != nil { + if err := a.client.doWithQuery(ctx, http.MethodGet, "/credentials", nil, http.StatusOK, &result, opts); err != nil { return nil, err } return &result, nil @@ -60,14 +56,14 @@ func (a *CredentialAPI) Update(ctx context.Context, id string, patch map[string] return nil, fmt.Errorf("marshal patch: %w", err) } var result types.Credential - if err := a.client.do(ctx, http.MethodPatch, a.basePath()+"/"+url.PathEscape(id), body, http.StatusOK, &result); err != nil { + if err := a.client.do(ctx, http.MethodPatch, "/credentials/"+url.PathEscape(id), body, http.StatusOK, &result); err != nil { return nil, err } return &result, nil } func (a *CredentialAPI) Delete(ctx context.Context, id string) error { - return a.client.do(ctx, http.MethodDelete, a.basePath()+"/"+url.PathEscape(id), nil, http.StatusNoContent, nil) + return a.client.do(ctx, http.MethodDelete, "/credentials/"+url.PathEscape(id), nil, http.StatusNoContent, nil) } func (a *CredentialAPI) ListAll(ctx context.Context, opts *types.ListOptions) *Iterator[types.Credential] { diff --git a/components/ambient-sdk/go-sdk/client/credential_extensions.go b/components/ambient-sdk/go-sdk/client/credential_extensions.go index 7e41304f43..43044a6a3f 100644 --- a/components/ambient-sdk/go-sdk/client/credential_extensions.go +++ b/components/ambient-sdk/go-sdk/client/credential_extensions.go @@ -10,7 +10,7 @@ import ( func (a *CredentialAPI) GetToken(ctx context.Context, id string) (*types.CredentialTokenResponse, error) { var result types.CredentialTokenResponse - if err := a.client.do(ctx, http.MethodGet, a.basePath()+"/"+url.PathEscape(id)+"/token", nil, http.StatusOK, &result); err != nil { + if err := a.client.do(ctx, http.MethodGet, "/credentials/"+url.PathEscape(id)+"/token", nil, http.StatusOK, &result); err != nil { return nil, err } return &result, nil diff --git a/components/ambient-sdk/go-sdk/types/credential.go b/components/ambient-sdk/go-sdk/types/credential.go index 25497cf878..ffcd4f0844 100644 --- a/components/ambient-sdk/go-sdk/types/credential.go +++ b/components/ambient-sdk/go-sdk/types/credential.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types @@ -18,7 +18,6 @@ type Credential struct { Email string `json:"email,omitempty"` Labels string `json:"labels,omitempty"` Name string `json:"name"` - ProjectID string `json:"project_id"` Provider string `json:"provider"` Token string `json:"token,omitempty"` URL string `json:"url,omitempty"` @@ -68,11 +67,6 @@ func (b *CredentialBuilder) Name(v string) *CredentialBuilder { return b } -func (b *CredentialBuilder) ProjectID(v string) *CredentialBuilder { - b.resource.ProjectID = v - return b -} - func (b *CredentialBuilder) Provider(v string) *CredentialBuilder { b.resource.Provider = v return b @@ -92,9 +86,6 @@ func (b *CredentialBuilder) Build() (*Credential, error) { if b.resource.Name == "" { b.errors = append(b.errors, fmt.Errorf("name is required")) } - if b.resource.ProjectID == "" { - b.errors = append(b.errors, fmt.Errorf("project_id is required")) - } if b.resource.Provider == "" { b.errors = append(b.errors, fmt.Errorf("provider is required")) } diff --git a/components/ambient-sdk/python-sdk/ambient_platform/__init__.py b/components/ambient-sdk/python-sdk/ambient_platform/__init__.py index d6576b6d87..15e0afed7d 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/__init__.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/__init__.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z """Ambient Platform SDK for Python.""" diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_agent_api.py b/components/ambient-sdk/python-sdk/ambient_platform/_agent_api.py index 7686bf3215..d8f45fe80c 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_agent_api.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_agent_api.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_base.py b/components/ambient-sdk/python-sdk/ambient_platform/_base.py index 849e6ec258..11e850c9c8 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_base.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_base.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_credential_api.py b/components/ambient-sdk/python-sdk/ambient_platform/_credential_api.py index ae079326d5..5c4bcdff8f 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_credential_api.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_credential_api.py @@ -1,12 +1,11 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations from typing import Any, Iterator, Optional, TYPE_CHECKING -from urllib.parse import quote from ._base import ListOptions from .credential import Credential, CredentialList @@ -18,29 +17,26 @@ class CredentialAPI: def __init__(self, client: AmbientClient) -> None: self._client = client - def _base_path(self) -> str: - return "/projects/{id}/credentials".replace("{id}", quote(self._client._project, safe="")) - def create(self, data: dict) -> Credential: - resp = self._client._request("POST", self._base_path(), json=data) + resp = self._client._request("POST", "/credentials", json=data) return Credential.from_dict(resp) def get(self, resource_id: str) -> Credential: - resp = self._client._request("GET", f"{self._base_path()}/{resource_id}") + resp = self._client._request("GET", f"/credentials/{resource_id}") return Credential.from_dict(resp) def list(self, opts: Optional[ListOptions] = None) -> CredentialList: params = opts.to_params() if opts else None - resp = self._client._request("GET", self._base_path(), params=params) + resp = self._client._request("GET", "/credentials", params=params) return CredentialList.from_dict(resp) def update(self, resource_id: str, patch: Any) -> Credential: data = patch.to_dict() if hasattr(patch, "to_dict") else patch - resp = self._client._request("PATCH", f"{self._base_path()}/{resource_id}", json=data) + resp = self._client._request("PATCH", f"/credentials/{resource_id}", json=data) return Credential.from_dict(resp) def delete(self, resource_id: str) -> None: - self._client._request("DELETE", f"{self._base_path()}/{resource_id}", expect_json=False) + self._client._request("DELETE", f"/credentials/{resource_id}", expect_json=False) def list_all(self, size: int = 100, **kwargs: Any) -> Iterator[Credential]: page = 1 diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_inbox_message_api.py b/components/ambient-sdk/python-sdk/ambient_platform/_inbox_message_api.py index 980b417257..6b88edcf53 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_inbox_message_api.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_inbox_message_api.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_iterator.py b/components/ambient-sdk/python-sdk/ambient_platform/_iterator.py index d1badc402a..f53cab432a 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_iterator.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_iterator.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_project_api.py b/components/ambient-sdk/python-sdk/ambient_platform/_project_api.py index 4803fb33e0..a6b3d6f816 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_project_api.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_project_api.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_project_settings_api.py b/components/ambient-sdk/python-sdk/ambient_platform/_project_settings_api.py index 85c02e7f46..337fa8ca7d 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_project_settings_api.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_project_settings_api.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_role_api.py b/components/ambient-sdk/python-sdk/ambient_platform/_role_api.py index 269d1d83b0..ed9d04ea57 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_role_api.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_role_api.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_role_binding_api.py b/components/ambient-sdk/python-sdk/ambient_platform/_role_binding_api.py index e24e170140..505b7a4bd9 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_role_binding_api.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_role_binding_api.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_scheduled_session_api.py b/components/ambient-sdk/python-sdk/ambient_platform/_scheduled_session_api.py index 9949ad0ce4..d50a3d2229 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_scheduled_session_api.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_scheduled_session_api.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_session_api.py b/components/ambient-sdk/python-sdk/ambient_platform/_session_api.py index b346794e74..ed1fd8886a 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_session_api.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_session_api.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_session_message_api.py b/components/ambient-sdk/python-sdk/ambient_platform/_session_message_api.py index 449b8d1ee5..ac033ac21c 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_session_message_api.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_session_message_api.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_user_api.py b/components/ambient-sdk/python-sdk/ambient_platform/_user_api.py index 993c549df1..c41bb48b61 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/_user_api.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/_user_api.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/agent.py b/components/ambient-sdk/python-sdk/ambient_platform/agent.py index e169241e95..e32e8c8f69 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/agent.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/agent.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/client.py b/components/ambient-sdk/python-sdk/ambient_platform/client.py index a9469b1333..7628f8ba13 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/client.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/client.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/credential.py b/components/ambient-sdk/python-sdk/ambient_platform/credential.py index 0c4e5b77b3..997643539f 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/credential.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/credential.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations @@ -24,7 +24,6 @@ class Credential: email: str = "" labels: str = "" name: str = "" - project_id: str = "" provider: str = "" token: str = "" url: str = "" @@ -42,7 +41,6 @@ def from_dict(cls, data: dict) -> Credential: email=data.get("email", ""), labels=data.get("labels", ""), name=data.get("name", ""), - project_id=data.get("project_id", ""), provider=data.get("provider", ""), token=data.get("token", ""), url=data.get("url", ""), @@ -97,10 +95,6 @@ def name(self, value: str) -> CredentialBuilder: self._data["name"] = value return self - def project_id(self, value: str) -> CredentialBuilder: - self._data["project_id"] = value - return self - def provider(self, value: str) -> CredentialBuilder: self._data["provider"] = value return self @@ -116,8 +110,6 @@ def url(self, value: str) -> CredentialBuilder: def build(self) -> dict: if "name" not in self._data: raise ValueError("name is required") - if "project_id" not in self._data: - raise ValueError("project_id is required") if "provider" not in self._data: raise ValueError("provider is required") return dict(self._data) diff --git a/components/ambient-sdk/python-sdk/ambient_platform/inbox_message.py b/components/ambient-sdk/python-sdk/ambient_platform/inbox_message.py index eae1f643ff..1efc3c2e33 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/inbox_message.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/inbox_message.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/project.py b/components/ambient-sdk/python-sdk/ambient_platform/project.py index e5670a66ee..c469f802da 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/project.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/project.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/project_settings.py b/components/ambient-sdk/python-sdk/ambient_platform/project_settings.py index 873348bf8a..e6f6bf78bc 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/project_settings.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/project_settings.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/role.py b/components/ambient-sdk/python-sdk/ambient_platform/role.py index 3570c76ed1..9ad2c3b0e3 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/role.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/role.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/role_binding.py b/components/ambient-sdk/python-sdk/ambient_platform/role_binding.py index 28a1671733..2a0e3eb3d1 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/role_binding.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/role_binding.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/scheduled_session.py b/components/ambient-sdk/python-sdk/ambient_platform/scheduled_session.py index 16fcd1f52c..596d17b872 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/scheduled_session.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/scheduled_session.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/session.py b/components/ambient-sdk/python-sdk/ambient_platform/session.py index e689a66807..4096369eb5 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/session.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/session.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/session_message.py b/components/ambient-sdk/python-sdk/ambient_platform/session_message.py index 95f43f3110..5082b443a5 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/session_message.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/session_message.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/python-sdk/ambient_platform/user.py b/components/ambient-sdk/python-sdk/ambient_platform/user.py index 75c8e41602..7d404f0fd8 100644 --- a/components/ambient-sdk/python-sdk/ambient_platform/user.py +++ b/components/ambient-sdk/python-sdk/ambient_platform/user.py @@ -1,7 +1,7 @@ # Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. # Source: ../../ambient-api-server/openapi/openapi.yaml -# Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -# Generated: 2026-05-12T12:19:57Z +# Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +# Generated: 2026-05-12T17:28:28Z from __future__ import annotations diff --git a/components/ambient-sdk/ts-sdk/src/agent.ts b/components/ambient-sdk/ts-sdk/src/agent.ts index 24365fee01..fcb979908a 100644 --- a/components/ambient-sdk/ts-sdk/src/agent.ts +++ b/components/ambient-sdk/ts-sdk/src/agent.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { ObjectReference, ListMeta } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/agent_api.ts b/components/ambient-sdk/ts-sdk/src/agent_api.ts index e79ee3baf1..8cb60eabca 100644 --- a/components/ambient-sdk/ts-sdk/src/agent_api.ts +++ b/components/ambient-sdk/ts-sdk/src/agent_api.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/base.ts b/components/ambient-sdk/ts-sdk/src/base.ts index bf3e64dd21..14fba00a8b 100644 --- a/components/ambient-sdk/ts-sdk/src/base.ts +++ b/components/ambient-sdk/ts-sdk/src/base.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z export type ObjectReference = { id: string; diff --git a/components/ambient-sdk/ts-sdk/src/client.ts b/components/ambient-sdk/ts-sdk/src/client.ts index ff9ce211cc..7824ab8046 100644 --- a/components/ambient-sdk/ts-sdk/src/client.ts +++ b/components/ambient-sdk/ts-sdk/src/client.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig } from './base'; import { AgentAPI } from './agent_api'; diff --git a/components/ambient-sdk/ts-sdk/src/credential.ts b/components/ambient-sdk/ts-sdk/src/credential.ts index a05c2ad438..6f1495472b 100644 --- a/components/ambient-sdk/ts-sdk/src/credential.ts +++ b/components/ambient-sdk/ts-sdk/src/credential.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { ObjectReference, ListMeta } from './base'; @@ -11,7 +11,6 @@ export type Credential = ObjectReference & { email: string; labels: string; name: string; - project_id: string; provider: string; token: string; url: string; @@ -27,7 +26,6 @@ export type CredentialCreateRequest = { email?: string; labels?: string; name: string; - project_id: string; provider: string; token?: string; url?: string; @@ -73,11 +71,6 @@ export class CredentialBuilder { return this; } - projectId(value: string): this { - this.data['project_id'] = value; - return this; - } - provider(value: string): this { this.data['provider'] = value; return this; @@ -97,9 +90,6 @@ export class CredentialBuilder { if (!this.data['name']) { throw new Error('name is required'); } - if (!this.data['project_id']) { - throw new Error('project_id is required'); - } if (!this.data['provider']) { throw new Error('provider is required'); } diff --git a/components/ambient-sdk/ts-sdk/src/credential_api.ts b/components/ambient-sdk/ts-sdk/src/credential_api.ts index 75a9cc73af..232a9e4a88 100644 --- a/components/ambient-sdk/ts-sdk/src/credential_api.ts +++ b/components/ambient-sdk/ts-sdk/src/credential_api.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base'; @@ -9,32 +9,25 @@ import type { Credential, CredentialList, CredentialCreateRequest, CredentialPat export class CredentialAPI { constructor(private readonly config: AmbientClientConfig) {} - private basePath(): string { - if (!this.config.project) { - throw new Error('project is required for Credential operations'); - } - return '/projects/{id}/credentials'.replace('{id}', encodeURIComponent(this.config.project)); - } - async create(data: CredentialCreateRequest, opts?: RequestOptions): Promise { - return ambientFetch(this.config, 'POST', this.basePath(), data, opts); + return ambientFetch(this.config, 'POST', '/credentials', data, opts); } async get(id: string, opts?: RequestOptions): Promise { - return ambientFetch(this.config, 'GET', `${this.basePath()}/${id}`, undefined, opts); + return ambientFetch(this.config, 'GET', `/credentials/${id}`, undefined, opts); } async list(listOpts?: ListOptions, opts?: RequestOptions): Promise { const qs = buildQueryString(listOpts); - return ambientFetch(this.config, 'GET', `${this.basePath()}${qs}`, undefined, opts); + return ambientFetch(this.config, 'GET', `/credentials${qs}`, undefined, opts); } async update(id: string, patch: CredentialPatchRequest, opts?: RequestOptions): Promise { - return ambientFetch(this.config, 'PATCH', `${this.basePath()}/${id}`, patch, opts); + return ambientFetch(this.config, 'PATCH', `/credentials/${id}`, patch, opts); } async delete(id: string, opts?: RequestOptions): Promise { - return ambientFetch(this.config, 'DELETE', `${this.basePath()}/${id}`, undefined, opts); + return ambientFetch(this.config, 'DELETE', `/credentials/${id}`, undefined, opts); } async *listAll(size: number = 100, opts?: RequestOptions): AsyncGenerator { diff --git a/components/ambient-sdk/ts-sdk/src/inbox_message.ts b/components/ambient-sdk/ts-sdk/src/inbox_message.ts index 38fb7276af..5cdd1afcc5 100644 --- a/components/ambient-sdk/ts-sdk/src/inbox_message.ts +++ b/components/ambient-sdk/ts-sdk/src/inbox_message.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { ObjectReference, ListMeta } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/inbox_message_api.ts b/components/ambient-sdk/ts-sdk/src/inbox_message_api.ts index a3ff4566a4..f90344e5eb 100644 --- a/components/ambient-sdk/ts-sdk/src/inbox_message_api.ts +++ b/components/ambient-sdk/ts-sdk/src/inbox_message_api.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/index.ts b/components/ambient-sdk/ts-sdk/src/index.ts index 260debf509..0a72b7ca9a 100644 --- a/components/ambient-sdk/ts-sdk/src/index.ts +++ b/components/ambient-sdk/ts-sdk/src/index.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z export { AmbientClient } from './client'; export type { AmbientClientConfig, ListOptions, RequestOptions, ObjectReference, ListMeta, APIError } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/project.ts b/components/ambient-sdk/ts-sdk/src/project.ts index fe815c53f1..234dcc0de5 100644 --- a/components/ambient-sdk/ts-sdk/src/project.ts +++ b/components/ambient-sdk/ts-sdk/src/project.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { ObjectReference, ListMeta } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/project_api.ts b/components/ambient-sdk/ts-sdk/src/project_api.ts index 71acb895aa..aacfd5a890 100644 --- a/components/ambient-sdk/ts-sdk/src/project_api.ts +++ b/components/ambient-sdk/ts-sdk/src/project_api.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/project_settings.ts b/components/ambient-sdk/ts-sdk/src/project_settings.ts index f324474cbc..1f4553ed30 100644 --- a/components/ambient-sdk/ts-sdk/src/project_settings.ts +++ b/components/ambient-sdk/ts-sdk/src/project_settings.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { ObjectReference, ListMeta } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/project_settings_api.ts b/components/ambient-sdk/ts-sdk/src/project_settings_api.ts index 7494d52ec2..358f112015 100644 --- a/components/ambient-sdk/ts-sdk/src/project_settings_api.ts +++ b/components/ambient-sdk/ts-sdk/src/project_settings_api.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/role.ts b/components/ambient-sdk/ts-sdk/src/role.ts index fe0ec8b913..b7de287493 100644 --- a/components/ambient-sdk/ts-sdk/src/role.ts +++ b/components/ambient-sdk/ts-sdk/src/role.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { ObjectReference, ListMeta } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/role_api.ts b/components/ambient-sdk/ts-sdk/src/role_api.ts index d51b5c7314..b788f59bf0 100644 --- a/components/ambient-sdk/ts-sdk/src/role_api.ts +++ b/components/ambient-sdk/ts-sdk/src/role_api.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/role_binding.ts b/components/ambient-sdk/ts-sdk/src/role_binding.ts index 3743abeaa8..d0ade9cdd1 100644 --- a/components/ambient-sdk/ts-sdk/src/role_binding.ts +++ b/components/ambient-sdk/ts-sdk/src/role_binding.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { ObjectReference, ListMeta } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/role_binding_api.ts b/components/ambient-sdk/ts-sdk/src/role_binding_api.ts index b66dc018de..ffc50bdf43 100644 --- a/components/ambient-sdk/ts-sdk/src/role_binding_api.ts +++ b/components/ambient-sdk/ts-sdk/src/role_binding_api.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/scheduled_session.ts b/components/ambient-sdk/ts-sdk/src/scheduled_session.ts index 9093d0656c..5b6bdf1eb7 100644 --- a/components/ambient-sdk/ts-sdk/src/scheduled_session.ts +++ b/components/ambient-sdk/ts-sdk/src/scheduled_session.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { ObjectReference, ListMeta } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/scheduled_session_api.ts b/components/ambient-sdk/ts-sdk/src/scheduled_session_api.ts index 71fab3f2c8..6da0aae3c0 100644 --- a/components/ambient-sdk/ts-sdk/src/scheduled_session_api.ts +++ b/components/ambient-sdk/ts-sdk/src/scheduled_session_api.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/session.ts b/components/ambient-sdk/ts-sdk/src/session.ts index 149dc162bf..94bdabe265 100644 --- a/components/ambient-sdk/ts-sdk/src/session.ts +++ b/components/ambient-sdk/ts-sdk/src/session.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { ObjectReference, ListMeta } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/session_api.ts b/components/ambient-sdk/ts-sdk/src/session_api.ts index fbe70d5742..273e8be309 100644 --- a/components/ambient-sdk/ts-sdk/src/session_api.ts +++ b/components/ambient-sdk/ts-sdk/src/session_api.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/session_message.ts b/components/ambient-sdk/ts-sdk/src/session_message.ts index 5a27ac4c3d..7d04adf90c 100644 --- a/components/ambient-sdk/ts-sdk/src/session_message.ts +++ b/components/ambient-sdk/ts-sdk/src/session_message.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { ObjectReference, ListMeta } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/session_message_api.ts b/components/ambient-sdk/ts-sdk/src/session_message_api.ts index 05adbfe74c..2ee201636a 100644 --- a/components/ambient-sdk/ts-sdk/src/session_message_api.ts +++ b/components/ambient-sdk/ts-sdk/src/session_message_api.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/user.ts b/components/ambient-sdk/ts-sdk/src/user.ts index 7081a7c6ea..2da2e334d8 100644 --- a/components/ambient-sdk/ts-sdk/src/user.ts +++ b/components/ambient-sdk/ts-sdk/src/user.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { ObjectReference, ListMeta } from './base'; diff --git a/components/ambient-sdk/ts-sdk/src/user_api.ts b/components/ambient-sdk/ts-sdk/src/user_api.ts index 52763bc675..37b66d9d87 100644 --- a/components/ambient-sdk/ts-sdk/src/user_api.ts +++ b/components/ambient-sdk/ts-sdk/src/user_api.ts @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base'; diff --git a/specs/api/ambient-model.spec.md b/specs/api/ambient-model.spec.md index 7b8d61b32e..c709cd2961 100644 --- a/specs/api/ambient-model.spec.md +++ b/specs/api/ambient-model.spec.md @@ -2,7 +2,7 @@ **Date:** 2026-03-20 **Status:** Active -**Last Updated:** 2026-05-09 — spec reconciliation: fix stale coverage matrix (credentials, RBAC, project update all implemented); document Agent full field set (12 undocumented fields added); add ScheduledSession runtime fields; document credential scoping gap (spec=global, impl=project-scoped); fix RBAC scoped role_bindings gaps; remove display_name from Project; add vertex provider; fix int32 types; update status to Active +**Last Updated:** 2026-05-12 — migrate Credentials from project-scoped to global routes (`/credentials`); remove `project_id` from model, OpenAPI, and SDK; add drop-column migration; update coverage matrix **Workflow:** `../../workflows/sessions/ambient-model.workflow.md` — implementation waves, gap table, build commands, run log **Design:** `credentials-session.md` — full Credential Kind design spec and rationale @@ -446,18 +446,16 @@ The `acpctl` CLI mirrors the API 1-for-1. Every REST operation has a correspondi | `POST /sessions/{id}/tasks/{task_id}/stop` | `acpctl session tasks stop ` | 🔲 planned | | `GET /sessions/{id}/tasks/{task_id}/output` | `acpctl session tasks output ` | 🔲 planned | -#### Credentials (Global — CLI implemented project-scoped) +#### Credentials (Global) -> **Scoping note:** The CLI commands below are implemented and operational, but against the project-scoped API (`/api/ambient/v1/projects/{id}/credentials/...`) rather than the global paths shown here. Global paths are the spec target state and pending migration. - -| REST API (target — global) | `acpctl` Command | Status | +| REST API | `acpctl` Command | Status | |---|---|---| -| `GET /credentials` | `acpctl credential list [--provider

]` | ✅ implemented (project-scoped) | -| `POST /credentials` | `acpctl credential create --name --provider

--token [--url ] [--email ] [--description ]` | ✅ implemented (project-scoped) | -| `GET /credentials/{cred_id}` | `acpctl credential get ` | ✅ implemented (project-scoped) | -| `PATCH /credentials/{cred_id}` | `acpctl credential update [--token ] [--description ]` | ✅ implemented (project-scoped) | -| `DELETE /credentials/{cred_id}` | `acpctl credential delete --confirm` | ✅ implemented (project-scoped) | -| `GET /credentials/{cred_id}/token` | `acpctl credential token ` | ✅ implemented (project-scoped) | +| `GET /credentials` | `acpctl credential list [--provider

]` | ✅ implemented | +| `POST /credentials` | `acpctl credential create --name --provider

--token [--url ] [--email ] [--description ]` | ✅ implemented | +| `GET /credentials/{cred_id}` | `acpctl credential get ` | ✅ implemented | +| `PATCH /credentials/{cred_id}` | `acpctl credential update [--token ] [--description ]` | ✅ implemented | +| `DELETE /credentials/{cred_id}` | `acpctl credential delete --confirm` | ✅ implemented | +| `GET /credentials/{cred_id}/token` | `acpctl credential token ` | ✅ implemented | | `POST /role_bindings` | `acpctl credential bind --scope project --scope-id ` | 🔲 planned | #### RBAC @@ -783,7 +781,7 @@ DELETE /api/ambient/v1/credentials/{cred_id} soft d GET /api/ambient/v1/credentials/{cred_id}/token fetch raw token — restricted to credential:token-reader ``` -> **Implementation gap:** The current implementation scopes credentials to a project rather than the platform. Actual routes are `/api/ambient/v1/projects/{id}/credentials[/{cred_id}[/token]]` with a required `project_id` field on the model. The global path design above is the target state. Until migrated, `credential bind` (via `POST /role_bindings`) is also not yet implemented — credentials are bound implicitly by project ownership. +> **Note:** `credential bind` (via `POST /role_bindings` with `scope=credential`) is planned but not yet implemented. `token` is accepted on `POST` and `PATCH` but **never returned** by standard read endpoints. `GET .../token` is gated by `credential:token-reader`. See @@ -1236,7 +1234,7 @@ _Last updated: 2026-04-28. Use this as the authoritative index — click into co | **RBAC — roles** | ✅ full CRUD | ✅ `RoleAPI` | ✅ `create role`, `get roles`, `get roles `, `delete role` | | | **RBAC — role bindings** | ✅ full CRUD | ✅ `RoleBindingAPI` | ✅ `create role-binding`, `get role-bindings`, `get role-bindings `, `delete role-binding` | | | **RBAC — scoped role_bindings queries** | ✅ agents only; 🔲 users/projects/sessions/credentials | n/a | n/a | `GET /projects/{id}/agents/{agent_id}/role_bindings` implemented; other 4 scoped endpoints not yet | -| **Credentials — CRUD** | ✅ `plugins/credentials/` (project-scoped at `/projects/{id}/credentials`) | ✅ `credential_api.go` + `credential_extensions.go` | ✅ `credential list/get/create/update/delete/token` | **Scoping gap:** impl is project-scoped; spec target is global. `credential bind` not implemented. | +| **Credentials — CRUD** | ✅ `plugins/credentials/` (global at `/credentials`) | ✅ `credential_api.go` + `credential_extensions.go` | ✅ `credential list/get/create/update/delete/token` | `credential bind` not yet implemented. | | **Credentials — token fetch** | ✅ `GET /projects/{id}/credentials/{cred_id}/token` | ✅ `GetToken()` in `credential_extensions.go` | ✅ `credential token ` | Gated by `credential:token-reader`; granted to runner SA by operator | | **ScheduledSessions — CRUD** | ✅ scheduledSessions plugin | ✅ `ScheduledSessionAPI.{List,Get,Create,Update,Delete,GetByName}` | ✅ `scheduled-session list/get/create/update/delete` | | | **ScheduledSessions — lifecycle** | ✅ suspend/resume/trigger/runs handlers | ✅ `ScheduledSessionAPI.{Suspend,Resume,Trigger,Runs}` | ✅ `scheduled-session suspend/resume/trigger/runs` | | diff --git a/workflows/sessions/ambient-model.workflow.md b/workflows/sessions/ambient-model.workflow.md index c802b836a5..dc181a1c3f 100644 --- a/workflows/sessions/ambient-model.workflow.md +++ b/workflows/sessions/ambient-model.workflow.md @@ -551,16 +551,22 @@ The Agent model has 8 fields (`repo_url`, `workflow_id`, `llm_model`, `llm_tempe **Rule:** When auditing field propagation from Agent → Session, read `ignite_handler.go` specifically. The two handlers have different responsibilities: `start_handler.go` handles the idempotency check and session status; `ignite_handler.go` handles the full field copy and session initialization. -### Credential Scoping Gap Must Be Explicitly Documented +### Credential Scoping — Migrated to Global (2026-05-12) -The spec defines credentials as global at `/api/ambient/v1/credentials`. The implementation uses project-scoped paths at `/api/ambient/v1/projects/{id}/credentials`. This is a design gap, not a bug — the intended target is global, but the current implementation is project-scoped. +Credentials were previously project-scoped at `/api/ambient/v1/projects/{id}/credentials` with a required `project_id` field on the model. The spec targets global resources at `/api/ambient/v1/credentials`. -This gap surfaces in three places: -1. **Spec API Reference:** Note added that global paths are the target; project-scoped are current. -2. **OpenAPI:** Not changed — the OpenAPI reflects the actual (project-scoped) routes. -3. **CLI table:** Changed from 🔲 to ✅ (project-scoped) with a scoping note. +Migration applied in one wave touching 7 files: +1. `openapi.credentials.yaml` — paths changed to `/credentials`; `project_id` removed from schema +2. `model.go` — removed `ProjectID string` field +3. `migration.go` — added `dropProjectIDMigration()` with `ALTER TABLE IF EXISTS ... DROP COLUMN IF EXISTS project_id`; kept prior `addProjectIDMigration()` so existing DBs apply and then immediately undo +4. `handler.go` — removed all `projectID := mux.Vars(r)["id"]` guards and project-filter injection in List +5. `presenter.go` — removed `ProjectId` from `PresentCredential`; updated `ConvertCredential` signature +6. `plugin.go` — changed subrouter from `/projects` prefix to `/credentials`; registered `dropProjectIDMigration()` +7. `factory_test.go` — removed `ProjectID: "test-project"` from factory struct -**Rule:** When the spec and implementation intentionally diverge (design intent vs current state), document both explicitly in the spec. Do not silently change the spec to match the code or the code to match the spec without the user's decision. Capture the gap with a clear "Implementation gap:" note and the intended direction. +**SDK impact:** Generator produced `/credentials` base path correctly. `credential_extensions.go` used `a.basePath()` which no longer exists for top-level resources (generator inlines paths). Fixed by replacing with literal `/credentials/{id}/token`. + +**Rule:** When the generator is used for top-level (non-nested) resources, it does NOT generate a `basePath()` method — it inlines paths. Any hand-written extension file that calls `a.basePath()` must be updated to use the literal path after changing a resource from nested to global. ### Factory Test Files Must Be Checked When Removing Model Fields From d73ae3c806fcfcfbf623634aa64d331d1384e936 Mon Sep 17 00:00:00 2001 From: Mark Turansky Date: Tue, 12 May 2026 17:40:59 +0000 Subject: [PATCH 6/6] chore(sdk): update generated file headers after credentials OpenAPI regeneration Spec SHA256 changed when vertex was added to the credentials provider enum; regeneration updated the spec hash and timestamp in all generated files. Co-Authored-By: Claude Sonnet 4.6 --- components/ambient-sdk/go-sdk/client/agent_api.go | 4 ++-- components/ambient-sdk/go-sdk/client/client.go | 4 ++-- components/ambient-sdk/go-sdk/client/inbox_message_api.go | 4 ++-- components/ambient-sdk/go-sdk/client/iterator.go | 4 ++-- components/ambient-sdk/go-sdk/client/project_api.go | 4 ++-- components/ambient-sdk/go-sdk/client/project_settings_api.go | 4 ++-- components/ambient-sdk/go-sdk/client/role_api.go | 4 ++-- components/ambient-sdk/go-sdk/client/role_binding_api.go | 4 ++-- components/ambient-sdk/go-sdk/client/scheduled_session_api.go | 4 ++-- components/ambient-sdk/go-sdk/client/session_api.go | 4 ++-- components/ambient-sdk/go-sdk/client/session_message_api.go | 4 ++-- components/ambient-sdk/go-sdk/client/user_api.go | 4 ++-- components/ambient-sdk/go-sdk/types/agent.go | 4 ++-- components/ambient-sdk/go-sdk/types/base.go | 4 ++-- components/ambient-sdk/go-sdk/types/inbox_message.go | 4 ++-- components/ambient-sdk/go-sdk/types/list_options.go | 4 ++-- components/ambient-sdk/go-sdk/types/project.go | 4 ++-- components/ambient-sdk/go-sdk/types/project_settings.go | 4 ++-- components/ambient-sdk/go-sdk/types/role.go | 4 ++-- components/ambient-sdk/go-sdk/types/role_binding.go | 4 ++-- components/ambient-sdk/go-sdk/types/scheduled_session.go | 4 ++-- components/ambient-sdk/go-sdk/types/session.go | 4 ++-- components/ambient-sdk/go-sdk/types/session_message.go | 4 ++-- components/ambient-sdk/go-sdk/types/user.go | 4 ++-- 24 files changed, 48 insertions(+), 48 deletions(-) diff --git a/components/ambient-sdk/go-sdk/client/agent_api.go b/components/ambient-sdk/go-sdk/client/agent_api.go index 70ff768ae8..a6c47d64f6 100644 --- a/components/ambient-sdk/go-sdk/client/agent_api.go +++ b/components/ambient-sdk/go-sdk/client/agent_api.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/client/client.go b/components/ambient-sdk/go-sdk/client/client.go index 8e980ddecc..8b6dc1713a 100644 --- a/components/ambient-sdk/go-sdk/client/client.go +++ b/components/ambient-sdk/go-sdk/client/client.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/client/inbox_message_api.go b/components/ambient-sdk/go-sdk/client/inbox_message_api.go index 78c8d3c851..a49b2c092b 100644 --- a/components/ambient-sdk/go-sdk/client/inbox_message_api.go +++ b/components/ambient-sdk/go-sdk/client/inbox_message_api.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/client/iterator.go b/components/ambient-sdk/go-sdk/client/iterator.go index 6aba49ec1e..f45eef8d1d 100644 --- a/components/ambient-sdk/go-sdk/client/iterator.go +++ b/components/ambient-sdk/go-sdk/client/iterator.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/client/project_api.go b/components/ambient-sdk/go-sdk/client/project_api.go index 33f225c389..7654485503 100644 --- a/components/ambient-sdk/go-sdk/client/project_api.go +++ b/components/ambient-sdk/go-sdk/client/project_api.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/client/project_settings_api.go b/components/ambient-sdk/go-sdk/client/project_settings_api.go index abe081dd30..70e8d92865 100644 --- a/components/ambient-sdk/go-sdk/client/project_settings_api.go +++ b/components/ambient-sdk/go-sdk/client/project_settings_api.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/client/role_api.go b/components/ambient-sdk/go-sdk/client/role_api.go index bb53257cb4..94298bca16 100644 --- a/components/ambient-sdk/go-sdk/client/role_api.go +++ b/components/ambient-sdk/go-sdk/client/role_api.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/client/role_binding_api.go b/components/ambient-sdk/go-sdk/client/role_binding_api.go index f191c429a9..f0f07512f4 100644 --- a/components/ambient-sdk/go-sdk/client/role_binding_api.go +++ b/components/ambient-sdk/go-sdk/client/role_binding_api.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/client/scheduled_session_api.go b/components/ambient-sdk/go-sdk/client/scheduled_session_api.go index 97d78a2400..5ad28c87c4 100644 --- a/components/ambient-sdk/go-sdk/client/scheduled_session_api.go +++ b/components/ambient-sdk/go-sdk/client/scheduled_session_api.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/client/session_api.go b/components/ambient-sdk/go-sdk/client/session_api.go index 15ffb878a9..df8f1657df 100644 --- a/components/ambient-sdk/go-sdk/client/session_api.go +++ b/components/ambient-sdk/go-sdk/client/session_api.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/client/session_message_api.go b/components/ambient-sdk/go-sdk/client/session_message_api.go index f421d17ab8..bc083f7621 100644 --- a/components/ambient-sdk/go-sdk/client/session_message_api.go +++ b/components/ambient-sdk/go-sdk/client/session_message_api.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/client/user_api.go b/components/ambient-sdk/go-sdk/client/user_api.go index 85e0b22bdf..7f566b2203 100644 --- a/components/ambient-sdk/go-sdk/client/user_api.go +++ b/components/ambient-sdk/go-sdk/client/user_api.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package client diff --git a/components/ambient-sdk/go-sdk/types/agent.go b/components/ambient-sdk/go-sdk/types/agent.go index 32a3b3572d..7c4a9470f6 100644 --- a/components/ambient-sdk/go-sdk/types/agent.go +++ b/components/ambient-sdk/go-sdk/types/agent.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types diff --git a/components/ambient-sdk/go-sdk/types/base.go b/components/ambient-sdk/go-sdk/types/base.go index a52597bb77..90dc9d2022 100644 --- a/components/ambient-sdk/go-sdk/types/base.go +++ b/components/ambient-sdk/go-sdk/types/base.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types diff --git a/components/ambient-sdk/go-sdk/types/inbox_message.go b/components/ambient-sdk/go-sdk/types/inbox_message.go index e42266a724..fffa8fe304 100644 --- a/components/ambient-sdk/go-sdk/types/inbox_message.go +++ b/components/ambient-sdk/go-sdk/types/inbox_message.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types diff --git a/components/ambient-sdk/go-sdk/types/list_options.go b/components/ambient-sdk/go-sdk/types/list_options.go index a76ab63ce1..417b4413ad 100644 --- a/components/ambient-sdk/go-sdk/types/list_options.go +++ b/components/ambient-sdk/go-sdk/types/list_options.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types diff --git a/components/ambient-sdk/go-sdk/types/project.go b/components/ambient-sdk/go-sdk/types/project.go index 110d7f76d2..276b483628 100644 --- a/components/ambient-sdk/go-sdk/types/project.go +++ b/components/ambient-sdk/go-sdk/types/project.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types diff --git a/components/ambient-sdk/go-sdk/types/project_settings.go b/components/ambient-sdk/go-sdk/types/project_settings.go index a757e883d0..d66fc898e1 100644 --- a/components/ambient-sdk/go-sdk/types/project_settings.go +++ b/components/ambient-sdk/go-sdk/types/project_settings.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types diff --git a/components/ambient-sdk/go-sdk/types/role.go b/components/ambient-sdk/go-sdk/types/role.go index 8c01b85c8c..f7101ac2a8 100644 --- a/components/ambient-sdk/go-sdk/types/role.go +++ b/components/ambient-sdk/go-sdk/types/role.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types diff --git a/components/ambient-sdk/go-sdk/types/role_binding.go b/components/ambient-sdk/go-sdk/types/role_binding.go index 96d2a6f92e..931a824d0b 100644 --- a/components/ambient-sdk/go-sdk/types/role_binding.go +++ b/components/ambient-sdk/go-sdk/types/role_binding.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types diff --git a/components/ambient-sdk/go-sdk/types/scheduled_session.go b/components/ambient-sdk/go-sdk/types/scheduled_session.go index 8f19ca28cb..742dc24b2b 100755 --- a/components/ambient-sdk/go-sdk/types/scheduled_session.go +++ b/components/ambient-sdk/go-sdk/types/scheduled_session.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types diff --git a/components/ambient-sdk/go-sdk/types/session.go b/components/ambient-sdk/go-sdk/types/session.go index 6ab57c3672..11331e937e 100644 --- a/components/ambient-sdk/go-sdk/types/session.go +++ b/components/ambient-sdk/go-sdk/types/session.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types diff --git a/components/ambient-sdk/go-sdk/types/session_message.go b/components/ambient-sdk/go-sdk/types/session_message.go index bacea4f721..0b9a84d887 100644 --- a/components/ambient-sdk/go-sdk/types/session_message.go +++ b/components/ambient-sdk/go-sdk/types/session_message.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types diff --git a/components/ambient-sdk/go-sdk/types/user.go b/components/ambient-sdk/go-sdk/types/user.go index 243bc73bf6..a716753dd1 100644 --- a/components/ambient-sdk/go-sdk/types/user.go +++ b/components/ambient-sdk/go-sdk/types/user.go @@ -1,7 +1,7 @@ // Code generated by ambient-sdk-generator from openapi.yaml — DO NOT EDIT. // Source: ../../ambient-api-server/openapi/openapi.yaml -// Spec SHA256: 99163f895057557b362154ec64acfcaf8cd98c477f79c0884555f347301f3c13 -// Generated: 2026-05-12T12:19:57Z +// Spec SHA256: bb93d024eca77b17e156dc948efbd910eb5e43ef492d0860905f4f2bddd4b636 +// Generated: 2026-05-12T17:28:28Z package types