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 a873bd697..560710985 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 560710985..a873bd697 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 0bb126da3..6fb9354cb 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 cedf7430e..284410141 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 85d52c1e2..614bd496b 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 94245a006..8f8adc6a0 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 8b313ed99..cb0782d80 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 a4fbcfd75..f70c1233a 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 c3ead12b1..ff13ebe48 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 f59535bed..90451f1cb 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 7e41304f4..43044a6a3 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 25497cf87..ffcd4f084 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 d6576b6d8..15e0afed7 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 7686bf321..d8f45fe80 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 849e6ec25..11e850c9c 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 ae079326d..5c4bcdff8 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 980b41725..6b88edcf5 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 d1badc402..f53cab432 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 4803fb33e..a6b3d6f81 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 85c02e7f4..337fa8ca7 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 269d1d83b..ed9d04ea5 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 e24e17014..505b7a4bd 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 9949ad0ce..d50a3d222 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 b346794e7..ed1fd8886 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 449b8d1ee..ac033ac21 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 993c549df..c41bb48b6 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 e169241e9..e32e8c8f6 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 a9469b133..7628f8ba1 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 0c4e5b77b..997643539 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 eae1f643f..1efc3c2e3 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 e5670a66e..c469f802d 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 873348bf8..e6f6bf78b 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 3570c76ed..9ad2c3b0e 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 28a167173..2a0e3eb3d 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 16fcd1f52..596d17b87 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 e689a6680..4096369eb 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 95f43f311..5082b443a 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 75c8e4160..7d404f0fd 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 24365fee0..fcb979908 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 e79ee3baf..8cb60eabc 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 bf3e64dd2..14fba00a8 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 ff9ce211c..7824ab804 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 a05c2ad43..6f1495472 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 75a9cc73a..232a9e4a8 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 38fb7276a..5cdd1afcc 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 a3ff4566a..f90344e5e 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 260debf50..0a72b7ca9 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 fe815c53f..234dcc0de 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 71acb895a..aacfd5a89 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 f324474cb..1f4553ed3 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 7494d52ec..358f11201 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 fe0ec8b91..b7de28749 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 d51b5c731..b788f59bf 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 3743abeaa..d0ade9cdd 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 b66dc018d..ffc50bdf4 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 9093d0656..5b6bdf1eb 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 71fab3f2c..6da0aae3c 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 149dc162b..94bdabe26 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 fbe70d574..273e8be30 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 5a27ac4c3..7d04adf90 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 05adbfe74..2ee201636 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 7081a7c6e..2da2e334d 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 52763bc67..37b66d9d8 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 7b8d61b32..c709cd296 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 c802b836a..dc181a1c3 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 70ff768ae..a6c47d64f 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 8e980ddec..8b6dc1713 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 78c8d3c85..a49b2c092 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 6aba49ec1..f45eef8d1 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 33f225c38..765448550 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 abe081dd3..70e8d9286 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 bb53257cb..94298bca1 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 f191c429a..f0f07512f 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 97d78a240..5ad28c87c 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 15ffb878a..df8f1657d 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 f421d17ab..bc083f762 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 85e0b22bd..7f566b220 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 32a3b3572..7c4a9470f 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 a52597bb7..90dc9d202 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 e42266a72..fffa8fe30 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 a76ab63ce..417b4413a 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 110d7f76d..276b48362 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 a757e883d..d66fc898e 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 8c01b85c8..f7101ac2a 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 96d2a6f92..931a824d0 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 8f19ca28c..742dc24b2 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 6ab57c367..11331e937 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 bacea4f72..0b9a84d88 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 243bc73bf..a716753dd 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