diff --git a/components/ambient-cli/go.mod b/components/ambient-cli/go.mod index 81da7db60..758155fc4 100644 --- a/components/ambient-cli/go.mod +++ b/components/ambient-cli/go.mod @@ -1,18 +1,26 @@ module github.com/ambient-code/platform/components/ambient-cli -go 1.24 +go 1.24.0 + +toolchain go1.24.4 require ( github.com/ambient-code/platform/components/ambient-sdk/go-sdk v0.0.0 github.com/golang-jwt/jwt/v4 v4.5.2 github.com/spf13/cobra v1.9.1 - golang.org/x/term v0.28.0 + golang.org/x/term v0.38.0 ) require ( + github.com/ambient-code/platform/components/ambient-api-server v0.0.0-20260304211549-047314a7664b // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/spf13/pflag v1.0.6 // indirect - golang.org/x/sys v0.29.0 // indirect + golang.org/x/net v0.48.0 // indirect + golang.org/x/sys v0.40.0 // indirect + golang.org/x/text v0.32.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/grpc v1.79.1 // indirect + google.golang.org/protobuf v1.36.11 // indirect ) replace github.com/ambient-code/platform/components/ambient-sdk/go-sdk => ../ambient-sdk/go-sdk diff --git a/components/ambient-cli/go.sum b/components/ambient-cli/go.sum index 723d1d451..b315736a3 100644 --- a/components/ambient-cli/go.sum +++ b/components/ambient-cli/go.sum @@ -1,6 +1,20 @@ +github.com/ambient-code/platform/components/ambient-api-server v0.0.0-20260304211549-047314a7664b h1:nmYJWbkCDU+NiZUQT/kdpW6WUTlDrNstWXr0JOFBR4c= +github.com/ambient-code/platform/components/ambient-api-server v0.0.0-20260304211549-047314a7664b/go.mod h1:r4ZByb4gVckDNzRU/EdyFY+UwSKn6M+lv04Z4YvOPNQ= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -8,9 +22,33 @@ github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= -golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= +go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= +go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= +go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= +go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= +go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= +go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= +go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= +golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= +google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/components/ambient-sdk/bin/ambient-sdk-generator b/components/ambient-sdk/bin/ambient-sdk-generator new file mode 100755 index 000000000..0ada529fc Binary files /dev/null and b/components/ambient-sdk/bin/ambient-sdk-generator differ diff --git a/components/ambient-sdk/generator/ambient-sdk-generator b/components/ambient-sdk/generator/ambient-sdk-generator index 7a773e64b..70b5a7bf5 100755 Binary files a/components/ambient-sdk/generator/ambient-sdk-generator and b/components/ambient-sdk/generator/ambient-sdk-generator differ diff --git a/components/ambient-sdk/generator/model.go b/components/ambient-sdk/generator/model.go index eb65b4676..fbdb68bd0 100644 --- a/components/ambient-sdk/generator/model.go +++ b/components/ambient-sdk/generator/model.go @@ -36,6 +36,7 @@ type Field struct { } type Spec struct { + BasePath string Resources []Resource } diff --git a/components/ambient-sdk/generator/parser.go b/components/ambient-sdk/generator/parser.go index 2e5857481..53701da6c 100644 --- a/components/ambient-sdk/generator/parser.go +++ b/components/ambient-sdk/generator/parser.go @@ -17,6 +17,29 @@ type openAPIDoc struct { } `yaml:"components"` } +func extractBasePath(paths map[string]interface{}) string { + for path := range paths { + parts := strings.SplitN(path, "/", -1) + // Expect paths like /api/ambient/v1/resource or /api/ambient-api-server/v1/resource + // Find the common prefix by looking for the version segment (v\d+) + for i, part := range parts { + if len(part) > 1 && part[0] == 'v' && len(part) > 1 { + allDigits := true + for _, c := range part[1:] { + if c < '0' || c > '9' { + allDigits = false + break + } + } + if allDigits { + return strings.Join(parts[:i+1], "/") + } + } + } + } + return "/api/ambient/v1" +} + type subSpecDoc struct { Paths map[string]interface{} `yaml:"paths"` Components struct { @@ -76,7 +99,9 @@ func parseSpec(specPath string) (*Spec, error) { return resources[i].Name < resources[j].Name }) - return &Spec{Resources: resources}, nil + basePath := extractBasePath(mainDoc.Paths) + + return &Spec{BasePath: basePath, Resources: resources}, nil } func extractResource(name, pathSegment string, doc *subSpecDoc) (*Resource, error) { @@ -313,7 +338,8 @@ func extractPatchFields(schemaMap map[string]interface{}) ([]Field, []string, er } func checkHasPatch(paths map[string]interface{}, pathSegment string) bool { - idPath := fmt.Sprintf("/api/ambient-api-server/v1/%s/{id}", pathSegment) + basePath := extractBasePath(paths) + idPath := fmt.Sprintf("%s/%s/{id}", basePath, pathSegment) pathVal, ok := paths[idPath] if !ok { return false @@ -329,7 +355,8 @@ func checkHasPatch(paths map[string]interface{}, pathSegment string) bool { } func checkHasDelete(paths map[string]interface{}, pathSegment string) bool { - idPath := fmt.Sprintf("/api/ambient-api-server/v1/%s/{id}", pathSegment) + basePath := extractBasePath(paths) + idPath := fmt.Sprintf("%s/%s/{id}", basePath, pathSegment) pathVal, ok := paths[idPath] if !ok { return false @@ -345,10 +372,11 @@ func checkHasDelete(paths map[string]interface{}, pathSegment string) bool { } func detectActions(paths map[string]interface{}, pathSegment string) []string { + basePath := extractBasePath(paths) knownActions := []string{"start", "stop"} var found []string for _, action := range knownActions { - actionPath := fmt.Sprintf("/api/ambient-api-server/v1/%s/{id}/%s", pathSegment, action) + actionPath := fmt.Sprintf("%s/%s/{id}/%s", basePath, pathSegment, action) pathVal, ok := paths[actionPath] if !ok { continue diff --git a/components/ambient-sdk/generator/templates/go/http_client.go.tmpl b/components/ambient-sdk/generator/templates/go/http_client.go.tmpl index dccd401ed..c6ac0db7e 100644 --- a/components/ambient-sdk/generator/templates/go/http_client.go.tmpl +++ b/components/ambient-sdk/generator/templates/go/http_client.go.tmpl @@ -116,7 +116,7 @@ func NewClientFromEnv(opts ...ClientOption) (*Client, error) { } func (c *Client) do(ctx context.Context, method, path string, body []byte, expectedStatus int, result interface{}) error { - url := c.baseURL + "/api/ambient-api-server/v1" + path + url := c.baseURL + "{{.Spec.BasePath}}" + path req, err := http.NewRequestWithContext(ctx, method, url, nil) if err != nil { diff --git a/components/ambient-sdk/generator/templates/python/http_client.py.tmpl b/components/ambient-sdk/generator/templates/python/http_client.py.tmpl index 031e24951..4c948e8d0 100644 --- a/components/ambient-sdk/generator/templates/python/http_client.py.tmpl +++ b/components/ambient-sdk/generator/templates/python/http_client.py.tmpl @@ -24,7 +24,7 @@ if TYPE_CHECKING: class AmbientClient: """HTTP client for the Ambient Platform API.""" - _base_path = "/api/ambient-api-server/v1" + _base_path = "{{.Spec.BasePath}}" def __init__( self, @@ -110,7 +110,7 @@ class AmbientClient: expect_json: bool = True, ) -> Any: """Make HTTP request to the API.""" - url = self._base_url + "/api/ambient-api-server/v1" + path + url = self._base_url + "{{.Spec.BasePath}}" + path headers = { "Authorization": f"Bearer {self._token}", diff --git a/components/ambient-sdk/generator/templates/ts/base.ts.tmpl b/components/ambient-sdk/generator/templates/ts/base.ts.tmpl index 0e25b23f0..ba0ae525d 100644 --- a/components/ambient-sdk/generator/templates/ts/base.ts.tmpl +++ b/components/ambient-sdk/generator/templates/ts/base.ts.tmpl @@ -81,7 +81,7 @@ export async function ambientFetch( body?: unknown, requestOpts?: RequestOptions, ): Promise { - const url = `${config.baseUrl}/api/ambient-api-server/v1${path}`; + const url = `${config.baseUrl}{{.Spec.BasePath}}${path}`; const headers: Record = { 'Authorization': `Bearer ${config.token}`, 'X-Ambient-Project': config.project, diff --git a/components/ambient-sdk/go-sdk/client/client.go b/components/ambient-sdk/go-sdk/client/client.go index e4783b318..854a0172d 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z package client @@ -64,6 +64,9 @@ func NewClient(baseURL, token, project string, opts ...ClientOption) (*Client, e return nil, fmt.Errorf("placeholder token is not allowed") } + if project == "" { + return nil, fmt.Errorf("project is required") + } if len(project) > 63 { return nil, fmt.Errorf("project name cannot exceed 63 characters") @@ -105,16 +108,15 @@ func NewClientFromEnv(opts ...ClientOption) (*Client, error) { } project := os.Getenv("AMBIENT_PROJECT") + if project == "" { + return nil, fmt.Errorf("AMBIENT_PROJECT environment variable is required") + } return NewClient(baseURL, token, project, opts...) } func (c *Client) do(ctx context.Context, method, path string, body []byte, expectedStatus int, result interface{}) error { - return c.doForProject(ctx, method, path, body, expectedStatus, result, c.project) -} - -func (c *Client) doForProject(ctx context.Context, method, path string, body []byte, expectedStatus int, result interface{}, project string) error { - url := c.baseURL + "/api/ambient-api-server/v1" + path + url := c.baseURL + "/api/ambient/v1" + path req, err := http.NewRequestWithContext(ctx, method, url, nil) if err != nil { @@ -128,9 +130,7 @@ func (c *Client) doForProject(ctx context.Context, method, path string, body []b } req.Header.Set("Authorization", "Bearer "+c.token) - if project != "" { - req.Header.Set("X-Ambient-Project", project) - } + req.Header.Set("X-Ambient-Project", c.project) req.Header.Set("User-Agent", c.userAgent) req.Header.Set("Accept", "application/json") @@ -179,10 +179,6 @@ func (c *Client) doForProject(ctx context.Context, method, path string, body []b } func (c *Client) doWithQuery(ctx context.Context, method, path string, body []byte, expectedStatus int, result interface{}, opts *types.ListOptions) error { - return c.doWithQueryForProject(ctx, method, path, body, expectedStatus, result, opts, c.project) -} - -func (c *Client) doWithQueryForProject(ctx context.Context, method, path string, body []byte, expectedStatus int, result interface{}, opts *types.ListOptions, project string) error { queryPath := path if opts != nil { params := url.Values{} @@ -206,7 +202,7 @@ func (c *Client) doWithQueryForProject(ctx context.Context, method, path string, } } - return c.doForProject(ctx, method, queryPath, body, expectedStatus, result, project) + return c.do(ctx, method, queryPath, body, expectedStatus, result) } func validateURL(rawURL string) error { diff --git a/components/ambient-sdk/go-sdk/client/iterator.go b/components/ambient-sdk/go-sdk/client/iterator.go index 2a8b05049..b68626ba8 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z 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 c88f2224b..7c056024a 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z 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 0c2399f78..9e44d7689 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z package client @@ -24,16 +24,12 @@ func (c *Client) ProjectSettings() *ProjectSettingsAPI { } func (a *ProjectSettingsAPI) Create(ctx context.Context, resource *types.ProjectSettings) (*types.ProjectSettings, error) { - return a.CreateForProject(ctx, resource, "") -} - -func (a *ProjectSettingsAPI) CreateForProject(ctx context.Context, resource *types.ProjectSettings, project string) (*types.ProjectSettings, error) { body, err := json.Marshal(resource) if err != nil { return nil, fmt.Errorf("marshal project_settings: %w", err) } var result types.ProjectSettings - if err := a.client.doForProject(ctx, http.MethodPost, "/project_settings", body, http.StatusCreated, &result, project); err != nil { + if err := a.client.do(ctx, http.MethodPost, "/project_settings", body, http.StatusCreated, &result); err != nil { return nil, err } return &result, nil @@ -48,12 +44,8 @@ func (a *ProjectSettingsAPI) Get(ctx context.Context, id string) (*types.Project } func (a *ProjectSettingsAPI) List(ctx context.Context, opts *types.ListOptions) (*types.ProjectSettingsList, error) { - return a.ListForProject(ctx, opts, "") -} - -func (a *ProjectSettingsAPI) ListForProject(ctx context.Context, opts *types.ListOptions, project string) (*types.ProjectSettingsList, error) { var result types.ProjectSettingsList - if err := a.client.doWithQueryForProject(ctx, http.MethodGet, "/project_settings", nil, http.StatusOK, &result, opts, project); err != nil { + if err := a.client.doWithQuery(ctx, http.MethodGet, "/project_settings", nil, http.StatusOK, &result, opts); err != nil { return nil, err } return &result, nil diff --git a/components/ambient-sdk/go-sdk/client/session_api.go b/components/ambient-sdk/go-sdk/client/session_api.go index 06150bd27..d9813651c 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z package client @@ -24,16 +24,12 @@ func (c *Client) Sessions() *SessionAPI { } func (a *SessionAPI) Create(ctx context.Context, resource *types.Session) (*types.Session, error) { - return a.CreateForProject(ctx, resource, "") -} - -func (a *SessionAPI) CreateForProject(ctx context.Context, resource *types.Session, project string) (*types.Session, error) { body, err := json.Marshal(resource) if err != nil { return nil, fmt.Errorf("marshal session: %w", err) } var result types.Session - if err := a.client.doForProject(ctx, http.MethodPost, "/sessions", body, http.StatusCreated, &result, project); err != nil { + if err := a.client.do(ctx, http.MethodPost, "/sessions", body, http.StatusCreated, &result); err != nil { return nil, err } return &result, nil @@ -48,12 +44,8 @@ func (a *SessionAPI) Get(ctx context.Context, id string) (*types.Session, error) } func (a *SessionAPI) List(ctx context.Context, opts *types.ListOptions) (*types.SessionList, error) { - return a.ListForProject(ctx, opts, "") -} - -func (a *SessionAPI) ListForProject(ctx context.Context, opts *types.ListOptions, project string) (*types.SessionList, error) { var result types.SessionList - if err := a.client.doWithQueryForProject(ctx, http.MethodGet, "/sessions", nil, http.StatusOK, &result, opts, project); err != nil { + if err := a.client.doWithQuery(ctx, http.MethodGet, "/sessions", nil, http.StatusOK, &result, opts); err != nil { return nil, err } return &result, nil @@ -98,6 +90,10 @@ func (a *SessionAPI) Stop(ctx context.Context, id string) (*types.Session, error return &result, nil } +func (a *SessionAPI) Delete(ctx context.Context, id string) error { + return a.client.do(ctx, http.MethodDelete, "/sessions/"+url.PathEscape(id), nil, http.StatusNoContent, nil) +} + func (a *SessionAPI) ListAll(ctx context.Context, opts *types.ListOptions) *Iterator[types.Session] { return NewIterator(func(page int) (*types.SessionList, error) { o := *opts diff --git a/components/ambient-sdk/go-sdk/client/session_watch.go b/components/ambient-sdk/go-sdk/client/session_watch.go new file mode 100644 index 000000000..cb00c7a1c --- /dev/null +++ b/components/ambient-sdk/go-sdk/client/session_watch.go @@ -0,0 +1,310 @@ +// Watch functionality for Session API +// Implements real-time streaming of session changes via gRPC + +package client + +import ( + "context" + "crypto/tls" + "fmt" + "io" + "net" + "net/url" + "strings" + "time" + + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/metadata" + + ambient_v1 "github.com/ambient-code/platform/components/ambient-api-server/pkg/api/grpc/ambient/v1" + "github.com/ambient-code/platform/components/ambient-sdk/go-sdk/types" +) + +const grpcDefaultPort = "4434" + +// SessionWatcher provides real-time session events +type SessionWatcher struct { + stream ambient_v1.SessionService_WatchSessionsClient + conn *grpc.ClientConn + events chan *types.SessionWatchEvent + errors chan error + ctx context.Context + cancel context.CancelFunc + timeoutCancel context.CancelFunc + done chan struct{} +} + +// WatchOptions configures session watching +type WatchOptions struct { + // ResourceVersion to start watching from (empty = latest) + ResourceVersion string + // Timeout for the watch connection + Timeout time.Duration +} + +// Watch creates a new session watcher with real-time events +func (a *SessionAPI) Watch(ctx context.Context, opts *WatchOptions) (*SessionWatcher, error) { + if opts == nil { + opts = &WatchOptions{Timeout: 30 * time.Minute} + } + + // Create gRPC connection to API server + conn, err := a.createGRPCConnection() + if err != nil { + return nil, fmt.Errorf("failed to create gRPC connection: %w", err) + } + + // Create session service client + grpcClient := ambient_v1.NewSessionServiceClient(conn) + + // Add authentication metadata + md := metadata.New(map[string]string{ + "authorization": "Bearer " + a.client.token, + "x-ambient-project": a.client.project, + }) + + // Create watcher with its own cancellable context + watchCtx, watchCancel := context.WithCancel(ctx) + watcher := &SessionWatcher{ + conn: conn, + events: make(chan *types.SessionWatchEvent, 10), + errors: make(chan error, 5), + ctx: watchCtx, + cancel: watchCancel, + done: make(chan struct{}), + } + + // Apply timeout to stream context but store cancel on watcher so Stop() controls lifetime + streamCtx := metadata.NewOutgoingContext(watchCtx, md) + if opts.Timeout > 0 { + var timeoutCancel context.CancelFunc + streamCtx, timeoutCancel = context.WithTimeout(streamCtx, opts.Timeout) + watcher.timeoutCancel = timeoutCancel + } + + // Start watch stream + stream, err := grpcClient.WatchSessions(streamCtx, &ambient_v1.WatchSessionsRequest{}) + if err != nil { + watchCancel() + conn.Close() + return nil, fmt.Errorf("failed to start watch stream: %w", err) + } + watcher.stream = stream + + // Start goroutine to receive events + go watcher.receiveEvents() + + return watcher, nil +} + +// Events returns a channel of session watch events +func (w *SessionWatcher) Events() <-chan *types.SessionWatchEvent { + return w.events +} + +// Errors returns a channel of watch errors +func (w *SessionWatcher) Errors() <-chan error { + return w.errors +} + +// Done returns a channel that's closed when the watcher stops +func (w *SessionWatcher) Done() <-chan struct{} { + return w.done +} + +// Stop closes the watcher and cleans up resources +func (w *SessionWatcher) Stop() { + if w.timeoutCancel != nil { + w.timeoutCancel() + } + w.cancel() + if w.conn != nil { + w.conn.Close() + } +} + +// receiveEvents runs in a goroutine to receive and convert events +func (w *SessionWatcher) receiveEvents() { + defer close(w.done) + defer close(w.events) + defer close(w.errors) + + for { + select { + case <-w.ctx.Done(): + return + default: + event, err := w.stream.Recv() + if err != nil { + if err == io.EOF { + return // Stream ended normally + } + select { + case w.errors <- fmt.Errorf("watch stream error: %w", err): + case <-w.ctx.Done(): + } + return + } + + // Convert protobuf event to SDK event + sdkEvent := w.convertEvent(event) + if sdkEvent != nil { + select { + case w.events <- sdkEvent: + case <-w.ctx.Done(): + return + } + } + } + } +} + +// convertEvent converts protobuf SessionWatchEvent to SDK types +func (w *SessionWatcher) convertEvent(event *ambient_v1.SessionWatchEvent) *types.SessionWatchEvent { + if event == nil { + return nil + } + + eventType := "" + switch event.GetType() { + case ambient_v1.EventType_EVENT_TYPE_CREATED: + eventType = "CREATED" + case ambient_v1.EventType_EVENT_TYPE_UPDATED: + eventType = "UPDATED" + case ambient_v1.EventType_EVENT_TYPE_DELETED: + eventType = "DELETED" + default: + eventType = "UNKNOWN" + } + + result := &types.SessionWatchEvent{ + Type: eventType, + ResourceID: event.GetResourceId(), + } + + // Convert session if present + if event.GetSession() != nil { + result.Session = w.convertSession(event.GetSession()) + } + + return result +} + +// convertSession converts protobuf Session to SDK Session +func (w *SessionWatcher) convertSession(session *ambient_v1.Session) *types.Session { + if session == nil { + return nil + } + + result := &types.Session{ + Name: session.GetName(), + } + + // Set metadata + if meta := session.GetMetadata(); meta != nil { + result.ID = meta.GetId() + result.Kind = meta.GetKind() + result.Href = meta.GetHref() + if meta.GetCreatedAt() != nil { + createdAt := meta.GetCreatedAt().AsTime() + result.CreatedAt = &createdAt + } + if meta.GetUpdatedAt() != nil { + updatedAt := meta.GetUpdatedAt().AsTime() + result.UpdatedAt = &updatedAt + } + } + + // Set optional fields + if session.RepoUrl != nil { + result.RepoURL = *session.RepoUrl + } + if session.Prompt != nil { + result.Prompt = *session.Prompt + } + if session.CreatedByUserId != nil { + result.CreatedByUserID = *session.CreatedByUserId + } + if session.AssignedUserId != nil { + result.AssignedUserID = *session.AssignedUserId + } + if session.WorkflowId != nil { + result.WorkflowID = *session.WorkflowId + } + if session.Repos != nil { + result.Repos = *session.Repos + } + if session.Timeout != nil { + result.Timeout = int(*session.Timeout) + } + if session.LlmModel != nil { + result.LlmModel = *session.LlmModel + } + if session.LlmTemperature != nil { + result.LlmTemperature = *session.LlmTemperature + } + if session.LlmMaxTokens != nil { + result.LlmMaxTokens = int(*session.LlmMaxTokens) + } + if session.Phase != nil { + result.Phase = *session.Phase + } + if session.GetStartTime() != nil { + startTime := session.GetStartTime().AsTime() + result.StartTime = &startTime + } + if session.GetCompletionTime() != nil { + completionTime := session.GetCompletionTime().AsTime() + result.CompletionTime = &completionTime + } + + return result +} + +// createGRPCConnection creates a gRPC connection to the ambient-api-server +func (a *SessionAPI) createGRPCConnection() (*grpc.ClientConn, error) { + grpcAddr := a.deriveGRPCAddress() + + var creds credentials.TransportCredentials + if strings.HasPrefix(a.client.baseURL, "https://") { + creds = credentials.NewTLS(&tls.Config{}) + } else { + creds = insecure.NewCredentials() + } + + conn, err := grpc.NewClient(grpcAddr, grpc.WithTransportCredentials(creds)) + if err != nil { + return nil, fmt.Errorf("failed to create gRPC client at %s: %w", grpcAddr, err) + } + + return conn, nil +} + +// deriveGRPCAddress converts HTTP base URL to gRPC address +func (a *SessionAPI) deriveGRPCAddress() string { + u, err := url.Parse(a.client.baseURL) + if err != nil || u.Host == "" { + return a.client.baseURL + ":" + grpcDefaultPort + } + + // Handle OpenShift Route pattern: convert HTTP route to gRPC route + if strings.Contains(u.Host, "ambient-api-server") && strings.Contains(u.Host, "apps.rosa") { + // Convert: ambient-api-server-ambient-code.apps.rosa.xxx + // To: ambient-api-server-grpc-ambient-code.apps.rosa.xxx + grpcHost := strings.Replace(u.Host, "ambient-api-server", "ambient-api-server-grpc", 1) + if u.Scheme == "https" { + return grpcHost + ":443" + } else { + return grpcHost + ":80" + } + } + + // Fallback to default behavior for local development + port := u.Port() + if port == "" { + port = grpcDefaultPort + } + return net.JoinHostPort(u.Hostname(), port) +} diff --git a/components/ambient-sdk/go-sdk/client/user_api.go b/components/ambient-sdk/go-sdk/client/user_api.go index e313ad087..350614fe2 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z package client diff --git a/components/ambient-sdk/go-sdk/examples/examples b/components/ambient-sdk/go-sdk/examples/examples new file mode 100755 index 000000000..5a44a167a Binary files /dev/null and b/components/ambient-sdk/go-sdk/examples/examples differ diff --git a/components/ambient-sdk/go-sdk/examples/watch/main.go b/components/ambient-sdk/go-sdk/examples/watch/main.go new file mode 100644 index 000000000..95f591130 --- /dev/null +++ b/components/ambient-sdk/go-sdk/examples/watch/main.go @@ -0,0 +1,96 @@ +package main + +import ( + "context" + "fmt" + "log" + "os" + "os/signal" + "time" + + "github.com/ambient-code/platform/components/ambient-sdk/go-sdk/client" + "github.com/ambient-code/platform/components/ambient-sdk/go-sdk/types" +) + +func main() { + fmt.Println("Ambient Platform SDK — Real-Time Session Watch Example") + fmt.Println("=====================================================") + fmt.Println() + + // Create client + projectName := "sdk-demo" + c, err := client.NewClientFromEnv(projectName, client.WithTimeout(120*time.Second)) + if err != nil { + log.Fatalf("Failed to create client: %v", err) + } + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // Handle Ctrl+C + sigChan := make(chan os.Signal, 1) + signal.Notify(sigChan, os.Interrupt) + go func() { + <-sigChan + fmt.Println("\n\nReceived interrupt, stopping watch...") + cancel() + }() + + // Start watching sessions + fmt.Printf("Starting real-time watch for sessions...\n") + fmt.Printf("Press Ctrl+C to stop.\n\n") + + watcher, err := c.Sessions().Watch(ctx, &client.WatchOptions{ + Timeout: 30 * time.Minute, + }) + if err != nil { + log.Fatalf("Failed to start watch: %v", err) + } + defer watcher.Stop() + + // Process events + for { + select { + case <-ctx.Done(): + fmt.Println("Watch context cancelled") + return + case <-watcher.Done(): + fmt.Println("Watch stream ended") + return + case err := <-watcher.Errors(): + log.Printf("Watch error: %v", err) + return + case event := <-watcher.Events(): + handleWatchEvent(event) + } + } +} + +func handleWatchEvent(event *types.SessionWatchEvent) { + timestamp := time.Now().Format("15:04:05") + + switch { + case event.IsCreated(): + fmt.Printf("[%s] 🆕 CREATED session: %s (id=%s)\n", + timestamp, event.Session.Name, event.ResourceID) + if event.Session.Phase != "" { + fmt.Printf(" Phase: %s\n", event.Session.Phase) + } + case event.IsUpdated(): + fmt.Printf("[%s] 📝 UPDATED session: %s (id=%s)\n", + timestamp, event.Session.Name, event.ResourceID) + if event.Session.Phase != "" { + fmt.Printf(" Phase: %s\n", event.Session.Phase) + } + if event.Session.StartTime != nil { + fmt.Printf(" Started: %s\n", event.Session.StartTime.Format("15:04:05")) + } + case event.IsDeleted(): + fmt.Printf("[%s] 🗑️ DELETED session: id=%s\n", + timestamp, event.ResourceID) + default: + fmt.Printf("[%s] ❓ UNKNOWN event type: %s (id=%s)\n", + timestamp, event.Type, event.ResourceID) + } + fmt.Println() +} diff --git a/components/ambient-sdk/go-sdk/go.mod b/components/ambient-sdk/go-sdk/go.mod index 62b4459bd..5c6de24c5 100644 --- a/components/ambient-sdk/go-sdk/go.mod +++ b/components/ambient-sdk/go-sdk/go.mod @@ -1,3 +1,18 @@ module github.com/ambient-code/platform/components/ambient-sdk/go-sdk -go 1.21 +go 1.24.0 + +toolchain go1.24.4 + +require ( + github.com/ambient-code/platform/components/ambient-api-server v0.0.0-20260304211549-047314a7664b + google.golang.org/grpc v1.79.1 +) + +require ( + golang.org/x/net v0.48.0 // indirect + golang.org/x/sys v0.40.0 // indirect + golang.org/x/text v0.32.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/protobuf v1.36.11 // indirect +) diff --git a/components/ambient-sdk/go-sdk/go.sum b/components/ambient-sdk/go-sdk/go.sum index e69de29bb..0ca448334 100644 --- a/components/ambient-sdk/go-sdk/go.sum +++ b/components/ambient-sdk/go-sdk/go.sum @@ -0,0 +1,40 @@ +github.com/ambient-code/platform/components/ambient-api-server v0.0.0-20260304211549-047314a7664b h1:nmYJWbkCDU+NiZUQT/kdpW6WUTlDrNstWXr0JOFBR4c= +github.com/ambient-code/platform/components/ambient-api-server v0.0.0-20260304211549-047314a7664b/go.mod h1:r4ZByb4gVckDNzRU/EdyFY+UwSKn6M+lv04Z4YvOPNQ= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= +go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= +go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= +go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= +go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= +go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= +go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= +go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= +google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= diff --git a/components/ambient-sdk/go-sdk/types/base.go b/components/ambient-sdk/go-sdk/types/base.go index 3039c2305..d01695811 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z 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 487f43323..eaecd50f8 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z package types diff --git a/components/ambient-sdk/go-sdk/types/project.go b/components/ambient-sdk/go-sdk/types/project.go index 8a150e8fb..6ff664ad0 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z 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 9cc139f8a..f6703f679 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z package types diff --git a/components/ambient-sdk/go-sdk/types/session.go b/components/ambient-sdk/go-sdk/types/session.go index 331d05c00..2dbb69f43 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z package types diff --git a/components/ambient-sdk/go-sdk/types/session_watch.go b/components/ambient-sdk/go-sdk/types/session_watch.go new file mode 100644 index 000000000..948e2f48d --- /dev/null +++ b/components/ambient-sdk/go-sdk/types/session_watch.go @@ -0,0 +1,30 @@ +// SessionWatchEvent represents a real-time session change event + +package types + +// SessionWatchEvent represents a watch event for session changes +type SessionWatchEvent struct { + // Type of the watch event (CREATED, UPDATED, DELETED) + Type string `json:"type"` + + // Session object that changed (nil for DELETED events may only have metadata) + Session *Session `json:"session,omitempty"` + + // ResourceID is the ID of the resource that changed + ResourceID string `json:"resource_id"` +} + +// IsCreated returns true if this is a creation event +func (e *SessionWatchEvent) IsCreated() bool { + return e.Type == "CREATED" +} + +// IsUpdated returns true if this is an update event +func (e *SessionWatchEvent) IsUpdated() bool { + return e.Type == "UPDATED" +} + +// IsDeleted returns true if this is a deletion event +func (e *SessionWatchEvent) IsDeleted() bool { + return e.Type == "DELETED" +} diff --git a/components/ambient-sdk/go-sdk/types/user.go b/components/ambient-sdk/go-sdk/types/user.go index 352df4eee..5a2b4893b 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z package types diff --git a/components/ambient-sdk/python-sdk/ambient_platform/__init__.py b/components/ambient-sdk/python-sdk/ambient_platform/__init__.py index 3c77a928f..18bb4e16d 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z """Ambient Platform SDK for Python.""" diff --git a/components/ambient-sdk/python-sdk/ambient_platform/_base.py b/components/ambient-sdk/python-sdk/ambient_platform/_base.py index 1a3ebc4a8..f6f6f155f 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z 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 1e18b742a..e71c28cb8 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z 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 a1f763123..ccc2d00b7 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z 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 05bfc15bc..4bc320300 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z 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 6e3f033db..645283b0a 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z 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 f55a4b1e3..32318a66d 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z 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 aa7f97134..cd8f7fa01 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z from __future__ import annotations @@ -25,7 +25,7 @@ class AmbientClient: """HTTP client for the Ambient Platform API.""" - _base_path = "/api/ambient-api-server/v1" + _base_path = "/api/ambient/v1" def __init__( self, @@ -112,7 +112,7 @@ def _request( expect_json: bool = True, ) -> Any: """Make HTTP request to the API.""" - url = self._base_url + "/api/ambient-api-server/v1" + path + url = self._base_url + "/api/ambient/v1" + path headers = { "Authorization": f"Bearer {self._token}", diff --git a/components/ambient-sdk/python-sdk/ambient_platform/project.py b/components/ambient-sdk/python-sdk/ambient_platform/project.py index 025675f81..eb408bd10 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z from __future__ import annotations @@ -132,3 +132,4 @@ def status(self, value: str) -> ProjectPatch: def to_dict(self) -> dict: return dict(self._data) + 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 589de42f3..4fcaa6368 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z from __future__ import annotations @@ -102,3 +102,4 @@ def repositories(self, value: str) -> ProjectSettingsPatch: def to_dict(self) -> dict: return dict(self._data) + diff --git a/components/ambient-sdk/python-sdk/ambient_platform/session.py b/components/ambient-sdk/python-sdk/ambient_platform/session.py index b3d7055bd..4889cbd81 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z from __future__ import annotations @@ -311,3 +311,4 @@ def start_time(self, value: Optional[datetime]) -> SessionStatusPatch: def to_dict(self) -> dict: return dict(self._data) + diff --git a/components/ambient-sdk/python-sdk/ambient_platform/user.py b/components/ambient-sdk/python-sdk/ambient_platform/user.py index 83da87726..ff080d997 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -# Generated: 2026-02-26T15:57:52Z +# Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +# Generated: 2026-03-05T04:28:57Z from __future__ import annotations @@ -104,3 +104,4 @@ def username(self, value: str) -> UserPatch: def to_dict(self) -> dict: return dict(self._data) + diff --git a/components/ambient-sdk/ts-sdk/src/base.ts b/components/ambient-sdk/ts-sdk/src/base.ts index acbc73a62..85f8f7908 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z export type ObjectReference = { id: string; @@ -81,7 +81,7 @@ export async function ambientFetch( body?: unknown, requestOpts?: RequestOptions, ): Promise { - const url = `${config.baseUrl}/api/ambient-api-server/v1${path}`; + const url = `${config.baseUrl}/api/ambient/v1${path}`; const headers: Record = { 'Authorization': `Bearer ${config.token}`, 'X-Ambient-Project': config.project, diff --git a/components/ambient-sdk/ts-sdk/src/client.ts b/components/ambient-sdk/ts-sdk/src/client.ts index 1c1e3dfb3..12f539b47 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z import type { AmbientClientConfig } from './base'; import { ProjectAPI } from './project_api'; diff --git a/components/ambient-sdk/ts-sdk/src/index.ts b/components/ambient-sdk/ts-sdk/src/index.ts index 48984037a..545b23cd0 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z export { AmbientClient } from './client'; export type { AmbientClientConfig, ListOptions, RequestOptions, ObjectReference, ListMeta, APIError } from './base'; @@ -22,3 +22,4 @@ export { SessionAPI } from './session_api'; export type { User, UserList, UserCreateRequest, UserPatchRequest } from './user'; export { UserBuilder, UserPatchBuilder } from './user'; export { UserAPI } from './user_api'; + diff --git a/components/ambient-sdk/ts-sdk/src/project.ts b/components/ambient-sdk/ts-sdk/src/project.ts index c5da2b00a..ab8f4b4fb 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z import type { ObjectReference, ListMeta } from './base'; @@ -116,3 +116,4 @@ export class ProjectPatchBuilder { return this.data as ProjectPatchRequest; } } + diff --git a/components/ambient-sdk/ts-sdk/src/project_api.ts b/components/ambient-sdk/ts-sdk/src/project_api.ts index ef60885be..1bc083540 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z 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 8f42a9f73..e81f23c64 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z import type { ObjectReference, ListMeta } from './base'; @@ -77,3 +77,4 @@ export class ProjectSettingsPatchBuilder { return this.data as ProjectSettingsPatchRequest; } } + 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 d7dd8e599..8e02c069c 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z 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 3f7db655f..19e806459 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z import type { ObjectReference, ListMeta } from './base'; @@ -337,3 +337,4 @@ export class SessionStatusPatchBuilder { return this.data as SessionStatusPatchRequest; } } + diff --git a/components/ambient-sdk/ts-sdk/src/session_api.ts b/components/ambient-sdk/ts-sdk/src/session_api.ts index 1c4bf6479..99a2fb5ac 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z 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 3910e6251..ef665bb6c 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z import type { ObjectReference, ListMeta } from './base'; @@ -80,3 +80,4 @@ export class UserPatchBuilder { return this.data as UserPatchRequest; } } + diff --git a/components/ambient-sdk/ts-sdk/src/user_api.ts b/components/ambient-sdk/ts-sdk/src/user_api.ts index c76bcadfa..dacbd7afb 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: 47119590c5b99c8ae2cf4280c6cd43829ffd283a58c334f22ff8aedc01851068 -// Generated: 2026-02-26T15:57:52Z +// Spec SHA256: f729ebc11ad1c453eeb0a679fa5c14eb1bc0096450cd18ca79e7c9b7b5c81acf +// Generated: 2026-03-05T04:28:57Z import type { AmbientClientConfig, ListOptions, RequestOptions } from './base'; import { ambientFetch, buildQueryString } from './base';