@thinkai/tai-api-contract 2.171.0 → 2.173.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3279,7 +3279,7 @@ export interface paths {
3279
3279
  };
3280
3280
  /**
3281
3281
  * Workspace chat readiness
3282
- * @description Any workspace member. 403 `code_intelligence_disabled` when Engineering Context Graph is off. `status` is `indexing`, `generating_agent_md`, `failed`, or `ready`. Chat stays closed until `ready`: create thread and post message return `409 chat_not_ready` with `progressMessage` when status is not ready. An open index wave reports `indexing` until every job in that wave is terminal.
3282
+ * @description Any workspace member. 403 `code_intelligence_disabled` when Engineering Context Graph is off. `status` is `indexing`, `generating_agent_md`, `failed`, or `ready`. Chat stays closed until `ready`: create thread and post message return `409 chat_not_ready` with `progressMessage` when status is not ready. An open index wave reports `indexing` until every job in that wave is terminal. When ready, includes `activeProvider` and `attachmentLimits` for Conversations file uploads.
3283
3283
  */
3284
3284
  get: operations["getCodeChatReadiness"];
3285
3285
  put?: never;
@@ -3290,6 +3290,26 @@ export interface paths {
3290
3290
  patch?: never;
3291
3291
  trace?: never;
3292
3292
  };
3293
+ "/workspaces/{workspaceId}/code-chat/attachments": {
3294
+ parameters: {
3295
+ query?: never;
3296
+ header?: never;
3297
+ path?: never;
3298
+ cookie?: never;
3299
+ };
3300
+ get?: never;
3301
+ put?: never;
3302
+ /**
3303
+ * Upload a Conversations attachment
3304
+ * @description Any workspace member when chat is ready. Validates size/type against the active provider profile (`attachmentLimits` from readiness). Returns metadata; pass `id` as `attachmentIds` on the next POST message. Max 5 MB per file.
3305
+ */
3306
+ post: operations["postCodeChatAttachment"];
3307
+ delete?: never;
3308
+ options?: never;
3309
+ head?: never;
3310
+ patch?: never;
3311
+ trace?: never;
3312
+ };
3293
3313
  "/workspaces/{workspaceId}/code-chat/indexes/{indexId}": {
3294
3314
  parameters: {
3295
3315
  query?: never;
@@ -4786,6 +4806,118 @@ export interface paths {
4786
4806
  patch?: never;
4787
4807
  trace?: never;
4788
4808
  };
4809
+ "/workspaces/{workspaceId}/evals/suites": {
4810
+ parameters: {
4811
+ query?: never;
4812
+ header?: never;
4813
+ path?: never;
4814
+ cookie?: never;
4815
+ };
4816
+ /**
4817
+ * List eval suites for a workspace
4818
+ * @description Returns the latest version of each eval suite in the workspace (max 50 suites). Requires workspace membership (`requireWorkspaceMember`). Empty workspace → `{ "suites": [] }`.
4819
+ */
4820
+ get: operations["listEvalSuites"];
4821
+ put?: never;
4822
+ /**
4823
+ * Create an eval suite
4824
+ * @description Creates a suite at `version: 1`. Requires workspace editor or admin (`requireWorkspaceEditor`). Rejects when both `target.promptBody` is empty and model fields are missing; when `cases` is empty (`400` `eval_suite_cases_required`); or when the workspace already has 50 suites. Each case must include at least one expected signal.
4825
+ */
4826
+ post: operations["createEvalSuite"];
4827
+ delete?: never;
4828
+ options?: never;
4829
+ head?: never;
4830
+ patch?: never;
4831
+ trace?: never;
4832
+ };
4833
+ "/workspaces/{workspaceId}/evals/suites/{suiteId}": {
4834
+ parameters: {
4835
+ query?: never;
4836
+ header?: never;
4837
+ path?: never;
4838
+ cookie?: never;
4839
+ };
4840
+ /**
4841
+ * Get an eval suite (latest version)
4842
+ * @description Returns the latest version of the suite. Historical versions are retained for runs via `suiteVersion` + snapshot on each run; this endpoint does not expose prior versions. Requires workspace membership.
4843
+ */
4844
+ get: operations["getEvalSuite"];
4845
+ /**
4846
+ * Update an eval suite
4847
+ * @description Replaces mutable suite fields. Requires workspace editor or admin. Changing `target`, `cases`, or `promptBody` increments `version` by 1 and keeps prior versions immutable for historical runs. Cosmetic name/description-only updates do not bump `version`. Same validation rules as create (cases required, target required, bounds).
4848
+ */
4849
+ put: operations["updateEvalSuite"];
4850
+ post?: never;
4851
+ delete?: never;
4852
+ options?: never;
4853
+ head?: never;
4854
+ patch?: never;
4855
+ trace?: never;
4856
+ };
4857
+ "/workspaces/{workspaceId}/evals/suites/{suiteId}/runs": {
4858
+ parameters: {
4859
+ query?: never;
4860
+ header?: never;
4861
+ path?: never;
4862
+ cookie?: never;
4863
+ };
4864
+ /**
4865
+ * List recent eval runs for a suite
4866
+ * @description Returns the last 50 runs for the suite (newest first). Empty → `{ "runs": [] }`. Requires workspace membership. Does not trigger scoring.
4867
+ */
4868
+ get: operations["listEvalRuns"];
4869
+ put?: never;
4870
+ /**
4871
+ * Enqueue an eval suite run
4872
+ * @description Enqueues an async eval run. Returns `202` with `{ runId, status: "queued" }`. Never scores on the request path — a worker claims the run, uses `fixtureCompletion` when present (or live completion when provider credentials exist), applies deterministic expected-signal scoring, and persists results. Requires workspace editor or admin. At most one active (`queued`|`running`) run per suite; a second POST returns `409` `eval_run_in_progress`.
4873
+ */
4874
+ post: operations["enqueueEvalRun"];
4875
+ delete?: never;
4876
+ options?: never;
4877
+ head?: never;
4878
+ patch?: never;
4879
+ trace?: never;
4880
+ };
4881
+ "/workspaces/{workspaceId}/evals/suites/{suiteId}/runs/{runId}": {
4882
+ parameters: {
4883
+ query?: never;
4884
+ header?: never;
4885
+ path?: never;
4886
+ cookie?: never;
4887
+ };
4888
+ /**
4889
+ * Get an eval run with case results
4890
+ * @description Returns persisted run status and case results. While `queued` or `running`, `caseResults` may be empty and `score` null. Requires workspace membership. Does not trigger scoring.
4891
+ */
4892
+ get: operations["getEvalRun"];
4893
+ put?: never;
4894
+ post?: never;
4895
+ delete?: never;
4896
+ options?: never;
4897
+ head?: never;
4898
+ patch?: never;
4899
+ trace?: never;
4900
+ };
4901
+ "/workspaces/{workspaceId}/evals/insights": {
4902
+ parameters: {
4903
+ query?: never;
4904
+ header?: never;
4905
+ path?: never;
4906
+ cookie?: never;
4907
+ };
4908
+ /**
4909
+ * Eval insights (regressions, tips, efficiency, model comparison)
4910
+ * @description Workspace-level Insights for prompt/model evals. Computes regressions when prior score − current score ≥ 0.10 on the same suiteId+suiteVersion case set (or suite score drop ≥ 0.10); prompt tips from failed signal notes / case names; token efficiency averages over successful cases in the last succeeded run per suite; and model comparison rollups. No succeeded runs → empty arrays and null `tokenEfficiency`. Requires workspace membership. Distinct from `/insights-recommendations` and AI Usage & Spend.
4911
+ */
4912
+ get: operations["getEvalInsights"];
4913
+ put?: never;
4914
+ post?: never;
4915
+ delete?: never;
4916
+ options?: never;
4917
+ head?: never;
4918
+ patch?: never;
4919
+ trace?: never;
4920
+ };
4789
4921
  }
4790
4922
  export type webhooks = Record<string, never>;
4791
4923
  export interface components {
@@ -5393,6 +5525,26 @@ export interface components {
5393
5525
  /** Format: date-time */
5394
5526
  updatedAt: string | null;
5395
5527
  };
5528
+ CodeChatAttachmentLimitsDto: {
5529
+ maxFiles: number;
5530
+ maxBytesPerFile: number;
5531
+ maxTotalBytes: number;
5532
+ maxTextChars: number;
5533
+ maxPdfPages: number;
5534
+ allowedMimeTypes: string[];
5535
+ allowedExtensions: string[];
5536
+ supportsImages: boolean;
5537
+ supportsPdf: boolean;
5538
+ };
5539
+ CodeChatAttachmentMetaDto: {
5540
+ /** Format: uuid */
5541
+ id: string;
5542
+ filename: string;
5543
+ mimeType: string;
5544
+ sizeBytes: number;
5545
+ /** Format: date-time */
5546
+ createdAt: string;
5547
+ };
5396
5548
  CodeChatReadinessDto: {
5397
5549
  /** @enum {string} */
5398
5550
  status: "indexing" | "generating_agent_md" | "failed" | "ready";
@@ -5406,6 +5558,12 @@ export interface components {
5406
5558
  indexingCadence: "daily" | "weekly" | "manual";
5407
5559
  /** @enum {string|null} */
5408
5560
  agentMdSource: "generated" | "admin" | null;
5561
+ /**
5562
+ * @description Active Ask synthesizer for attachment limit profiles
5563
+ * @enum {string|null}
5564
+ */
5565
+ activeProvider?: "claude" | "cursor" | null;
5566
+ attachmentLimits?: components["schemas"]["CodeChatAttachmentLimitsDto"];
5409
5567
  };
5410
5568
  CodeWikiGuidanceDto: {
5411
5569
  /**
@@ -9936,6 +10094,8 @@ export interface components {
9936
10094
  citations: components["schemas"]["CodeChatCitationDto"][];
9937
10095
  /** Format: date-time */
9938
10096
  createdAt: string;
10097
+ /** @description Present on user turns that included uploaded files */
10098
+ attachments?: components["schemas"]["CodeChatAttachmentMetaDto"][];
9939
10099
  };
9940
10100
  CodeChatThreadDetailDto: components["schemas"]["CodeChatThreadDto"] & {
9941
10101
  messages: components["schemas"]["CodeChatMessageDto"][];
@@ -9952,6 +10112,17 @@ export interface components {
9952
10112
  * @enum {string}
9953
10113
  */
9954
10114
  intent?: "inventory_apis" | "inventory_modules";
10115
+ /** @description Previously uploaded attachment ids to bind to this user turn */
10116
+ attachmentIds?: string[];
10117
+ };
10118
+ CodeChatUploadAttachmentBodyDto: {
10119
+ filename: string;
10120
+ mimeType: string;
10121
+ /** @description Base64-encoded file bytes (no data-URL prefix required) */
10122
+ contentBase64: string;
10123
+ /** Format: uuid */
10124
+ threadId?: string | null;
10125
+ pdfPageCount?: number | null;
9955
10126
  };
9956
10127
  CodeChatMessageReplyDto: components["schemas"]["CodeChatMessageDto"] & {
9957
10128
  /**
@@ -11020,6 +11191,203 @@ export interface components {
11020
11191
  limit: number;
11021
11192
  offset: number;
11022
11193
  };
11194
+ /**
11195
+ * @description Deterministic scorer kinds for golden-case expected signals. Case pass = all signals pass. No LLM-as-judge in v1.
11196
+ * @enum {string}
11197
+ */
11198
+ EvalExpectedSignalKindDto: "contains" | "not_contains" | "regex" | "json_path_equals";
11199
+ /**
11200
+ * @description Model provider vocabulary aligned with AI Usage `modelName` surfaces (`cursor` | `claude`).
11201
+ * @enum {string}
11202
+ */
11203
+ EvalAiProviderDto: "cursor" | "claude";
11204
+ /** @description One expected signal on a golden case. Use `value` for `contains` / `not_contains` (substring) and for `json_path_equals` (expected value as string). Use `pattern` for `regex`. Use `path` (JSONPath) for `json_path_equals`. */
11205
+ EvalExpectedSignalDto: {
11206
+ id: string;
11207
+ kind: components["schemas"]["EvalExpectedSignalKindDto"];
11208
+ /** @description Substring for `contains` / `not_contains`, or expected value for `json_path_equals`. */
11209
+ value?: string;
11210
+ /** @description Regular expression source for `regex`. */
11211
+ pattern?: string;
11212
+ /** @description JSONPath expression for `json_path_equals`. */
11213
+ path?: string;
11214
+ };
11215
+ /** @description One golden case in a suite. 1–20 cases per suite; each case requires ≥1 expected signal. When `fixtureCompletion` is set, the worker scores that text without calling a live model (CI/demo path). */
11216
+ EvalCaseDto: {
11217
+ id: string;
11218
+ name: string;
11219
+ /** @description Case input payload (opaque string; often JSON text). */
11220
+ input: string;
11221
+ /** @description Optional fixture completion. When present, the worker uses it instead of a live provider call. */
11222
+ fixtureCompletion?: string;
11223
+ expectedSignals: components["schemas"]["EvalExpectedSignalDto"][];
11224
+ };
11225
+ /** @description Suite target — at least one of prompt or model. Prompt path requires non-empty `promptBody` (text snapshot) and may include optional `promptKey` slug. Model path requires `provider` + `modelName` (vendor string, same vocabulary as AI Usage `modelName`). Create/update reject when both prompt body is empty and model fields are missing. No separate prompt-template registry in v1; versioning is the suite `version`. */
11226
+ EvalSuiteTargetDto: {
11227
+ /** @description Prompt text snapshot. Empty string allowed only when model fields are set. */
11228
+ promptBody?: string;
11229
+ /** @description Optional slug for the prompt (not a registry foreign key in v1). */
11230
+ promptKey?: string | null;
11231
+ /**
11232
+ * @description Model provider; null when suite is prompt-only.
11233
+ * @enum {string|null}
11234
+ */
11235
+ provider?: "cursor" | "claude" | null;
11236
+ /** @description Vendor model id string (aligned with AI Usage `modelName`). */
11237
+ modelName?: string | null;
11238
+ };
11239
+ /** @description Latest version of a workspace eval suite. Max 50 suites per workspace. Name 1–120 chars; description ≤ 2000; version starts at 1. */
11240
+ EvalSuiteDto: {
11241
+ /** Format: uuid */
11242
+ id: string;
11243
+ name: string;
11244
+ description: string;
11245
+ /** @description Monotonic suite version; bumps when target/cases/promptBody change. */
11246
+ version: number;
11247
+ /** Format: date-time */
11248
+ createdAt: string;
11249
+ /** Format: date-time */
11250
+ updatedAt: string;
11251
+ /** Format: uuid */
11252
+ createdByUserId: string;
11253
+ target: components["schemas"]["EvalSuiteTargetDto"];
11254
+ cases: components["schemas"]["EvalCaseDto"][];
11255
+ };
11256
+ EvalSuiteListDto: {
11257
+ suites: components["schemas"]["EvalSuiteDto"][];
11258
+ };
11259
+ CreateEvalSuiteBodyDto: {
11260
+ name: string;
11261
+ /** @default */
11262
+ description: string;
11263
+ target: components["schemas"]["EvalSuiteTargetDto"];
11264
+ cases: components["schemas"]["EvalCaseDto"][];
11265
+ };
11266
+ /** @description Full replace of mutable suite fields. Version bumps only when `target`, `cases`, or `promptBody` change versus the stored latest version. */
11267
+ UpdateEvalSuiteBodyDto: {
11268
+ name: string;
11269
+ /** @default */
11270
+ description: string;
11271
+ target: components["schemas"]["EvalSuiteTargetDto"];
11272
+ cases: components["schemas"]["EvalCaseDto"][];
11273
+ };
11274
+ /** @enum {string} */
11275
+ EvalRunStatusDto: "queued" | "running" | "succeeded" | "failed" | "cancelled";
11276
+ /**
11277
+ * @description Per-case outcome. `error` is used when completion is unavailable (`code: completion_unavailable`) or another non-score failure occurs.
11278
+ * @enum {string}
11279
+ */
11280
+ EvalCaseResultStatusDto: "passed" | "failed" | "error";
11281
+ /** @description Persisted result for one case. `pass` is true only when `status` is `passed` (all expected signals matched). On signal failure, `pass` is false and `failedSignalIds` lists the failing signal ids. On `completion_unavailable`, `status` is `error` and `code` is set. */
11282
+ EvalCaseResultDto: {
11283
+ caseId: string;
11284
+ name: string;
11285
+ status: components["schemas"]["EvalCaseResultStatusDto"];
11286
+ pass: boolean;
11287
+ failedSignalIds: string[];
11288
+ /** @description Completion text used for scoring (fixture or live). */
11289
+ completion?: string | null;
11290
+ inputTokens?: number | null;
11291
+ outputTokens?: number | null;
11292
+ /** @description Provider-reported cost in cents when available. */
11293
+ costCents?: number | null;
11294
+ /** @description Machine-readable error when `status` is `error` (e.g. `completion_unavailable`). */
11295
+ code?: string | null;
11296
+ /** @description Human-readable error detail when `status` is `error`. */
11297
+ error?: string | null;
11298
+ };
11299
+ /** @description Immutable suite snapshot pinned on a run (`suiteVersion` + JSON). Used so historical runs stay interpretable after later suite edits. */
11300
+ EvalSuiteSnapshotDto: {
11301
+ name: string;
11302
+ description: string;
11303
+ version: number;
11304
+ target: components["schemas"]["EvalSuiteTargetDto"];
11305
+ cases: components["schemas"]["EvalCaseDto"][];
11306
+ };
11307
+ /** @description Persisted eval run. Suite score = `passedCases / scoredCases` in [0,1] when at least one case was scored; `null` when the run ends with all cases in `error` (status `failed`). List endpoints return at most the last 50 runs per suite. */
11308
+ EvalRunDto: {
11309
+ /** Format: uuid */
11310
+ id: string;
11311
+ /** Format: uuid */
11312
+ suiteId: string;
11313
+ suiteVersion: number;
11314
+ status: components["schemas"]["EvalRunStatusDto"];
11315
+ /**
11316
+ * Format: date-time
11317
+ * @description Set when the worker claims the run (`running`).
11318
+ */
11319
+ startedAt: string | null;
11320
+ /** Format: date-time */
11321
+ finishedAt: string | null;
11322
+ passCount: number;
11323
+ failCount: number;
11324
+ errorCount: number;
11325
+ /** @description `passedCases / scoredCases` in [0,1], or null when no case was scored (all-error run). */
11326
+ score: number | null;
11327
+ caseResults: components["schemas"]["EvalCaseResultDto"][];
11328
+ /** @description Pinned suite snapshot for this run (present on persisted runs). */
11329
+ suiteSnapshot?: components["schemas"]["EvalSuiteSnapshotDto"] | null;
11330
+ };
11331
+ EvalRunListDto: {
11332
+ runs: components["schemas"]["EvalRunDto"][];
11333
+ };
11334
+ EvalRunEnqueueResponseDto: {
11335
+ /** Format: uuid */
11336
+ runId: string;
11337
+ /**
11338
+ * @description Always `queued` on enqueue; poll GET run for progress.
11339
+ * @enum {string}
11340
+ */
11341
+ status: "queued";
11342
+ };
11343
+ /** @description Regression when prior score − current score ≥ 0.10 on the same suiteId+suiteVersion case set, or suite score drop ≥ 0.10. */
11344
+ EvalRegressionDto: {
11345
+ /** Format: uuid */
11346
+ suiteId: string;
11347
+ suiteName?: string;
11348
+ suiteVersion: number;
11349
+ /** @description Set for case-level regressions; null for suite-level score drops. */
11350
+ caseId?: string | null;
11351
+ caseName?: string | null;
11352
+ /** Format: uuid */
11353
+ priorRunId?: string;
11354
+ /** Format: uuid */
11355
+ currentRunId?: string;
11356
+ priorScore: number;
11357
+ currentScore: number;
11358
+ /** @description priorScore − currentScore (always ≥ 0.10 for listed items). */
11359
+ scoreDrop: number;
11360
+ };
11361
+ /** @description Tip derived from failed signal notes / case names on recent runs. */
11362
+ EvalPromptTipDto: {
11363
+ /** Format: uuid */
11364
+ suiteId: string;
11365
+ suiteName?: string;
11366
+ caseId?: string | null;
11367
+ caseName?: string | null;
11368
+ signalId?: string | null;
11369
+ message: string;
11370
+ };
11371
+ /** @description Averages over successful cases in the last succeeded run per suite (workspace rollup). Nullables when token/cost fields were not returned. */
11372
+ EvalTokenEfficiencyDto: {
11373
+ avgInputTokens: number | null;
11374
+ avgOutputTokens: number | null;
11375
+ avgCostCents: number | null;
11376
+ };
11377
+ EvalModelComparisonDto: {
11378
+ provider: components["schemas"]["EvalAiProviderDto"];
11379
+ modelName: string;
11380
+ suiteCount: number;
11381
+ /** @description Average suite score across succeeded runs for this model; null when none. */
11382
+ avgScore: number | null;
11383
+ };
11384
+ /** @description Insights hub payload for Prompt & model evals. Empty succeeded-run history → empty arrays and null `tokenEfficiency`. */
11385
+ EvalInsightsDto: {
11386
+ regressions: components["schemas"]["EvalRegressionDto"][];
11387
+ promptTips: components["schemas"]["EvalPromptTipDto"][];
11388
+ tokenEfficiency: components["schemas"]["EvalTokenEfficiencyDto"] | null;
11389
+ modelComparison: components["schemas"]["EvalModelComparisonDto"][];
11390
+ };
11023
11391
  };
11024
11392
  responses: {
11025
11393
  /** @description Missing or invalid bearer token */
@@ -11057,6 +11425,10 @@ export interface components {
11057
11425
  };
11058
11426
  parameters: {
11059
11427
  WorkspaceId: string;
11428
+ /** @description Eval suite id (`tai_workspace_eval_suites.id`). */
11429
+ EvalSuiteId: string;
11430
+ /** @description Eval run id (`tai_workspace_eval_runs.id`). */
11431
+ EvalRunId: string;
11060
11432
  RepoId: string;
11061
11433
  /** @description Provider repository slug in `owner/repo` form (GitHub). Used for shareable public URLs; resolves to the same row as `repoId` UUID internally. */
11062
11434
  ProviderSlug: string;
@@ -11202,6 +11574,8 @@ export type PutCodeIntelligenceSettingsDto = components['schemas']['PutCodeIntel
11202
11574
  export type CodeWikiGuidanceTopicDto = components['schemas']['CodeWikiGuidanceTopicDto'];
11203
11575
  export type PutCodeIntelligenceAgentMdDto = components['schemas']['PutCodeIntelligenceAgentMdDto'];
11204
11576
  export type CodeIntelligenceAgentMdDto = components['schemas']['CodeIntelligenceAgentMdDto'];
11577
+ export type CodeChatAttachmentLimitsDto = components['schemas']['CodeChatAttachmentLimitsDto'];
11578
+ export type CodeChatAttachmentMetaDto = components['schemas']['CodeChatAttachmentMetaDto'];
11205
11579
  export type CodeChatReadinessDto = components['schemas']['CodeChatReadinessDto'];
11206
11580
  export type CodeWikiGuidanceDto = components['schemas']['CodeWikiGuidanceDto'];
11207
11581
  export type WorkspaceConfigDto = components['schemas']['WorkspaceConfigDto'];
@@ -11618,6 +11992,7 @@ export type CodeChatCitationDto = components['schemas']['CodeChatCitationDto'];
11618
11992
  export type CodeChatMessageDto = components['schemas']['CodeChatMessageDto'];
11619
11993
  export type CodeChatThreadDetailDto = components['schemas']['CodeChatThreadDetailDto'];
11620
11994
  export type CodeChatPostMessageBodyDto = components['schemas']['CodeChatPostMessageBodyDto'];
11995
+ export type CodeChatUploadAttachmentBodyDto = components['schemas']['CodeChatUploadAttachmentBodyDto'];
11621
11996
  export type CodeChatMessageReplyDto = components['schemas']['CodeChatMessageReplyDto'];
11622
11997
  export type CodeChatApiRouteRowDto = components['schemas']['CodeChatApiRouteRowDto'];
11623
11998
  export type CodeChatModuleInventoryRowDto = components['schemas']['CodeChatModuleInventoryRowDto'];
@@ -11706,10 +12081,33 @@ export type InsightsTestPyramidCiQualityDto = components['schemas']['InsightsTes
11706
12081
  export type InsightsTestPyramidSummaryDto = components['schemas']['InsightsTestPyramidSummaryDto'];
11707
12082
  export type InsightsTestPyramidRepoItemDto = components['schemas']['InsightsTestPyramidRepoItemDto'];
11708
12083
  export type InsightsTestPyramidRepoListDto = components['schemas']['InsightsTestPyramidRepoListDto'];
12084
+ export type EvalExpectedSignalKindDto = components['schemas']['EvalExpectedSignalKindDto'];
12085
+ export type EvalAiProviderDto = components['schemas']['EvalAiProviderDto'];
12086
+ export type EvalExpectedSignalDto = components['schemas']['EvalExpectedSignalDto'];
12087
+ export type EvalCaseDto = components['schemas']['EvalCaseDto'];
12088
+ export type EvalSuiteTargetDto = components['schemas']['EvalSuiteTargetDto'];
12089
+ export type EvalSuiteDto = components['schemas']['EvalSuiteDto'];
12090
+ export type EvalSuiteListDto = components['schemas']['EvalSuiteListDto'];
12091
+ export type CreateEvalSuiteBodyDto = components['schemas']['CreateEvalSuiteBodyDto'];
12092
+ export type UpdateEvalSuiteBodyDto = components['schemas']['UpdateEvalSuiteBodyDto'];
12093
+ export type EvalRunStatusDto = components['schemas']['EvalRunStatusDto'];
12094
+ export type EvalCaseResultStatusDto = components['schemas']['EvalCaseResultStatusDto'];
12095
+ export type EvalCaseResultDto = components['schemas']['EvalCaseResultDto'];
12096
+ export type EvalSuiteSnapshotDto = components['schemas']['EvalSuiteSnapshotDto'];
12097
+ export type EvalRunDto = components['schemas']['EvalRunDto'];
12098
+ export type EvalRunListDto = components['schemas']['EvalRunListDto'];
12099
+ export type EvalRunEnqueueResponseDto = components['schemas']['EvalRunEnqueueResponseDto'];
12100
+ export type EvalRegressionDto = components['schemas']['EvalRegressionDto'];
12101
+ export type EvalPromptTipDto = components['schemas']['EvalPromptTipDto'];
12102
+ export type EvalTokenEfficiencyDto = components['schemas']['EvalTokenEfficiencyDto'];
12103
+ export type EvalModelComparisonDto = components['schemas']['EvalModelComparisonDto'];
12104
+ export type EvalInsightsDto = components['schemas']['EvalInsightsDto'];
11709
12105
  export type ResponseUnauthorized = components['responses']['Unauthorized'];
11710
12106
  export type ResponseForbidden = components['responses']['Forbidden'];
11711
12107
  export type ResponseZenHrSyncInProgress = components['responses']['ZenHrSyncInProgress'];
11712
12108
  export type ParameterWorkspaceId = components['parameters']['WorkspaceId'];
12109
+ export type ParameterEvalSuiteId = components['parameters']['EvalSuiteId'];
12110
+ export type ParameterEvalRunId = components['parameters']['EvalRunId'];
11713
12111
  export type ParameterRepoId = components['parameters']['RepoId'];
11714
12112
  export type ParameterProviderSlug = components['parameters']['ProviderSlug'];
11715
12113
  export type ParameterProjectId = components['parameters']['ProjectId'];
@@ -20605,6 +21003,69 @@ export interface operations {
20605
21003
  };
20606
21004
  };
20607
21005
  };
21006
+ postCodeChatAttachment: {
21007
+ parameters: {
21008
+ query?: never;
21009
+ header?: never;
21010
+ path: {
21011
+ workspaceId: components["parameters"]["WorkspaceId"];
21012
+ };
21013
+ cookie?: never;
21014
+ };
21015
+ requestBody: {
21016
+ content: {
21017
+ "application/json": components["schemas"]["CodeChatUploadAttachmentBodyDto"];
21018
+ };
21019
+ };
21020
+ responses: {
21021
+ /** @description Attachment stored */
21022
+ 201: {
21023
+ headers: {
21024
+ [name: string]: unknown;
21025
+ };
21026
+ content: {
21027
+ "application/json": components["schemas"]["CodeChatAttachmentMetaDto"];
21028
+ };
21029
+ };
21030
+ /** @description Validation failed (size, type, totals) */
21031
+ 400: {
21032
+ headers: {
21033
+ [name: string]: unknown;
21034
+ };
21035
+ content: {
21036
+ "application/json": components["schemas"]["ErrorMessageDto"];
21037
+ };
21038
+ };
21039
+ 401: components["responses"]["Unauthorized"];
21040
+ /** @description Engineering Context Graph is off */
21041
+ 403: {
21042
+ headers: {
21043
+ [name: string]: unknown;
21044
+ };
21045
+ content: {
21046
+ "application/json": components["schemas"]["ErrorMessageDto"];
21047
+ };
21048
+ };
21049
+ /** @description Chat not ready */
21050
+ 409: {
21051
+ headers: {
21052
+ [name: string]: unknown;
21053
+ };
21054
+ content: {
21055
+ "application/json": components["schemas"]["ErrorMessageDto"];
21056
+ };
21057
+ };
21058
+ /** @description Could not process the file */
21059
+ 422: {
21060
+ headers: {
21061
+ [name: string]: unknown;
21062
+ };
21063
+ content: {
21064
+ "application/json": components["schemas"]["ErrorMessageDto"];
21065
+ };
21066
+ };
21067
+ };
21068
+ };
20608
21069
  getCodeChatIndex: {
20609
21070
  parameters: {
20610
21071
  query?: never;
@@ -24217,4 +24678,426 @@ export interface operations {
24217
24678
  };
24218
24679
  };
24219
24680
  };
24681
+ listEvalSuites: {
24682
+ parameters: {
24683
+ query?: never;
24684
+ header?: never;
24685
+ path: {
24686
+ workspaceId: components["parameters"]["WorkspaceId"];
24687
+ };
24688
+ cookie?: never;
24689
+ };
24690
+ requestBody?: never;
24691
+ responses: {
24692
+ /** @description Suite list (latest version per suite) */
24693
+ 200: {
24694
+ headers: {
24695
+ [name: string]: unknown;
24696
+ };
24697
+ content: {
24698
+ /**
24699
+ * @example {
24700
+ * "suites": []
24701
+ * }
24702
+ */
24703
+ "application/json": components["schemas"]["EvalSuiteListDto"];
24704
+ };
24705
+ };
24706
+ 401: components["responses"]["Unauthorized"];
24707
+ 403: components["responses"]["Forbidden"];
24708
+ /** @description Workspace not found */
24709
+ 404: {
24710
+ headers: {
24711
+ [name: string]: unknown;
24712
+ };
24713
+ content: {
24714
+ "application/json": components["schemas"]["ErrorMessageDto"];
24715
+ };
24716
+ };
24717
+ };
24718
+ };
24719
+ createEvalSuite: {
24720
+ parameters: {
24721
+ query?: never;
24722
+ header?: never;
24723
+ path: {
24724
+ workspaceId: components["parameters"]["WorkspaceId"];
24725
+ };
24726
+ cookie?: never;
24727
+ };
24728
+ requestBody: {
24729
+ content: {
24730
+ /**
24731
+ * @example {
24732
+ * "name": "Greeting quality",
24733
+ * "description": "Fixture-backed smoke suite for the support greeting prompt",
24734
+ * "target": {
24735
+ * "promptBody": "You are a support agent. Greet the user by name.",
24736
+ * "promptKey": "support-greeting",
24737
+ * "provider": "cursor",
24738
+ * "modelName": "gpt-4.1-mini"
24739
+ * },
24740
+ * "cases": [
24741
+ * {
24742
+ * "id": "case-hello",
24743
+ * "name": "Hello Alice",
24744
+ * "input": "{\"name\":\"Alice\"}",
24745
+ * "fixtureCompletion": "Hello Alice, how can I help you today?",
24746
+ * "expectedSignals": [
24747
+ * {
24748
+ * "id": "sig-contains-hello",
24749
+ * "kind": "contains",
24750
+ * "value": "Hello Alice"
24751
+ * },
24752
+ * {
24753
+ * "id": "sig-not-sorry",
24754
+ * "kind": "not_contains",
24755
+ * "value": "I cannot"
24756
+ * }
24757
+ * ]
24758
+ * }
24759
+ * ]
24760
+ * }
24761
+ */
24762
+ "application/json": components["schemas"]["CreateEvalSuiteBodyDto"];
24763
+ };
24764
+ };
24765
+ responses: {
24766
+ /** @description Suite created */
24767
+ 201: {
24768
+ headers: {
24769
+ [name: string]: unknown;
24770
+ };
24771
+ content: {
24772
+ "application/json": components["schemas"]["EvalSuiteDto"];
24773
+ };
24774
+ };
24775
+ /** @description Validation failed — empty cases (`eval_suite_cases_required`), missing target (prompt and model), invalid name/description lengths, case/signal bounds, or malformed body. */
24776
+ 400: {
24777
+ headers: {
24778
+ [name: string]: unknown;
24779
+ };
24780
+ content: {
24781
+ "application/json": components["schemas"]["ErrorMessageDto"];
24782
+ };
24783
+ };
24784
+ 401: components["responses"]["Unauthorized"];
24785
+ /** @description Authenticated but not a workspace editor/admin */
24786
+ 403: {
24787
+ headers: {
24788
+ [name: string]: unknown;
24789
+ };
24790
+ content: {
24791
+ /**
24792
+ * @example {
24793
+ * "error": "Workspace editor role required",
24794
+ * "code": "workspace_editor_required"
24795
+ * }
24796
+ */
24797
+ "application/json": components["schemas"]["ErrorMessageDto"];
24798
+ };
24799
+ };
24800
+ /** @description Workspace not found */
24801
+ 404: {
24802
+ headers: {
24803
+ [name: string]: unknown;
24804
+ };
24805
+ content: {
24806
+ "application/json": components["schemas"]["ErrorMessageDto"];
24807
+ };
24808
+ };
24809
+ /** @description Workspace already has the maximum of 50 suites */
24810
+ 409: {
24811
+ headers: {
24812
+ [name: string]: unknown;
24813
+ };
24814
+ content: {
24815
+ /**
24816
+ * @example {
24817
+ * "error": "Maximum of 50 eval suites per workspace",
24818
+ * "code": "eval_suite_limit_reached"
24819
+ * }
24820
+ */
24821
+ "application/json": components["schemas"]["ErrorMessageDto"];
24822
+ };
24823
+ };
24824
+ };
24825
+ };
24826
+ getEvalSuite: {
24827
+ parameters: {
24828
+ query?: never;
24829
+ header?: never;
24830
+ path: {
24831
+ workspaceId: components["parameters"]["WorkspaceId"];
24832
+ /** @description Eval suite id (`tai_workspace_eval_suites.id`). */
24833
+ suiteId: components["parameters"]["EvalSuiteId"];
24834
+ };
24835
+ cookie?: never;
24836
+ };
24837
+ requestBody?: never;
24838
+ responses: {
24839
+ /** @description Suite (latest version) */
24840
+ 200: {
24841
+ headers: {
24842
+ [name: string]: unknown;
24843
+ };
24844
+ content: {
24845
+ "application/json": components["schemas"]["EvalSuiteDto"];
24846
+ };
24847
+ };
24848
+ 401: components["responses"]["Unauthorized"];
24849
+ 403: components["responses"]["Forbidden"];
24850
+ /** @description Workspace or suite not found */
24851
+ 404: {
24852
+ headers: {
24853
+ [name: string]: unknown;
24854
+ };
24855
+ content: {
24856
+ "application/json": components["schemas"]["ErrorMessageDto"];
24857
+ };
24858
+ };
24859
+ };
24860
+ };
24861
+ updateEvalSuite: {
24862
+ parameters: {
24863
+ query?: never;
24864
+ header?: never;
24865
+ path: {
24866
+ workspaceId: components["parameters"]["WorkspaceId"];
24867
+ /** @description Eval suite id (`tai_workspace_eval_suites.id`). */
24868
+ suiteId: components["parameters"]["EvalSuiteId"];
24869
+ };
24870
+ cookie?: never;
24871
+ };
24872
+ requestBody: {
24873
+ content: {
24874
+ "application/json": components["schemas"]["UpdateEvalSuiteBodyDto"];
24875
+ };
24876
+ };
24877
+ responses: {
24878
+ /** @description Suite updated (possibly with bumped version) */
24879
+ 200: {
24880
+ headers: {
24881
+ [name: string]: unknown;
24882
+ };
24883
+ content: {
24884
+ "application/json": components["schemas"]["EvalSuiteDto"];
24885
+ };
24886
+ };
24887
+ /** @description Validation failed (same codes as create) */
24888
+ 400: {
24889
+ headers: {
24890
+ [name: string]: unknown;
24891
+ };
24892
+ content: {
24893
+ "application/json": components["schemas"]["ErrorMessageDto"];
24894
+ };
24895
+ };
24896
+ 401: components["responses"]["Unauthorized"];
24897
+ /** @description Authenticated but not a workspace editor/admin */
24898
+ 403: {
24899
+ headers: {
24900
+ [name: string]: unknown;
24901
+ };
24902
+ content: {
24903
+ /**
24904
+ * @example {
24905
+ * "error": "Workspace editor role required",
24906
+ * "code": "workspace_editor_required"
24907
+ * }
24908
+ */
24909
+ "application/json": components["schemas"]["ErrorMessageDto"];
24910
+ };
24911
+ };
24912
+ /** @description Workspace or suite not found */
24913
+ 404: {
24914
+ headers: {
24915
+ [name: string]: unknown;
24916
+ };
24917
+ content: {
24918
+ "application/json": components["schemas"]["ErrorMessageDto"];
24919
+ };
24920
+ };
24921
+ };
24922
+ };
24923
+ listEvalRuns: {
24924
+ parameters: {
24925
+ query?: never;
24926
+ header?: never;
24927
+ path: {
24928
+ workspaceId: components["parameters"]["WorkspaceId"];
24929
+ /** @description Eval suite id (`tai_workspace_eval_suites.id`). */
24930
+ suiteId: components["parameters"]["EvalSuiteId"];
24931
+ };
24932
+ cookie?: never;
24933
+ };
24934
+ requestBody?: never;
24935
+ responses: {
24936
+ /** @description Run history (max 50) */
24937
+ 200: {
24938
+ headers: {
24939
+ [name: string]: unknown;
24940
+ };
24941
+ content: {
24942
+ /**
24943
+ * @example {
24944
+ * "runs": []
24945
+ * }
24946
+ */
24947
+ "application/json": components["schemas"]["EvalRunListDto"];
24948
+ };
24949
+ };
24950
+ 401: components["responses"]["Unauthorized"];
24951
+ 403: components["responses"]["Forbidden"];
24952
+ /** @description Workspace or suite not found */
24953
+ 404: {
24954
+ headers: {
24955
+ [name: string]: unknown;
24956
+ };
24957
+ content: {
24958
+ "application/json": components["schemas"]["ErrorMessageDto"];
24959
+ };
24960
+ };
24961
+ };
24962
+ };
24963
+ enqueueEvalRun: {
24964
+ parameters: {
24965
+ query?: never;
24966
+ header?: never;
24967
+ path: {
24968
+ workspaceId: components["parameters"]["WorkspaceId"];
24969
+ /** @description Eval suite id (`tai_workspace_eval_suites.id`). */
24970
+ suiteId: components["parameters"]["EvalSuiteId"];
24971
+ };
24972
+ cookie?: never;
24973
+ };
24974
+ requestBody?: never;
24975
+ responses: {
24976
+ /** @description Run queued */
24977
+ 202: {
24978
+ headers: {
24979
+ [name: string]: unknown;
24980
+ };
24981
+ content: {
24982
+ /**
24983
+ * @example {
24984
+ * "runId": "22222222-2222-4222-8222-222222222222",
24985
+ * "status": "queued"
24986
+ * }
24987
+ */
24988
+ "application/json": components["schemas"]["EvalRunEnqueueResponseDto"];
24989
+ };
24990
+ };
24991
+ 401: components["responses"]["Unauthorized"];
24992
+ /** @description Authenticated but not a workspace editor/admin */
24993
+ 403: {
24994
+ headers: {
24995
+ [name: string]: unknown;
24996
+ };
24997
+ content: {
24998
+ /**
24999
+ * @example {
25000
+ * "error": "Workspace editor role required",
25001
+ * "code": "workspace_editor_required"
25002
+ * }
25003
+ */
25004
+ "application/json": components["schemas"]["ErrorMessageDto"];
25005
+ };
25006
+ };
25007
+ /** @description Workspace or suite not found */
25008
+ 404: {
25009
+ headers: {
25010
+ [name: string]: unknown;
25011
+ };
25012
+ content: {
25013
+ "application/json": components["schemas"]["ErrorMessageDto"];
25014
+ };
25015
+ };
25016
+ /** @description An active queued or running eval already exists for this suite */
25017
+ 409: {
25018
+ headers: {
25019
+ [name: string]: unknown;
25020
+ };
25021
+ content: {
25022
+ /**
25023
+ * @example {
25024
+ * "error": "An eval run is already in progress for this suite",
25025
+ * "code": "eval_run_in_progress"
25026
+ * }
25027
+ */
25028
+ "application/json": components["schemas"]["ErrorMessageDto"];
25029
+ };
25030
+ };
25031
+ };
25032
+ };
25033
+ getEvalRun: {
25034
+ parameters: {
25035
+ query?: never;
25036
+ header?: never;
25037
+ path: {
25038
+ workspaceId: components["parameters"]["WorkspaceId"];
25039
+ /** @description Eval suite id (`tai_workspace_eval_suites.id`). */
25040
+ suiteId: components["parameters"]["EvalSuiteId"];
25041
+ /** @description Eval run id (`tai_workspace_eval_runs.id`). */
25042
+ runId: components["parameters"]["EvalRunId"];
25043
+ };
25044
+ cookie?: never;
25045
+ };
25046
+ requestBody?: never;
25047
+ responses: {
25048
+ /** @description Run detail */
25049
+ 200: {
25050
+ headers: {
25051
+ [name: string]: unknown;
25052
+ };
25053
+ content: {
25054
+ "application/json": components["schemas"]["EvalRunDto"];
25055
+ };
25056
+ };
25057
+ 401: components["responses"]["Unauthorized"];
25058
+ 403: components["responses"]["Forbidden"];
25059
+ /** @description Workspace, suite, or run not found */
25060
+ 404: {
25061
+ headers: {
25062
+ [name: string]: unknown;
25063
+ };
25064
+ content: {
25065
+ "application/json": components["schemas"]["ErrorMessageDto"];
25066
+ };
25067
+ };
25068
+ };
25069
+ };
25070
+ getEvalInsights: {
25071
+ parameters: {
25072
+ query?: never;
25073
+ header?: never;
25074
+ path: {
25075
+ workspaceId: components["parameters"]["WorkspaceId"];
25076
+ };
25077
+ cookie?: never;
25078
+ };
25079
+ requestBody?: never;
25080
+ responses: {
25081
+ /** @description Insights payload */
25082
+ 200: {
25083
+ headers: {
25084
+ [name: string]: unknown;
25085
+ };
25086
+ content: {
25087
+ "application/json": components["schemas"]["EvalInsightsDto"];
25088
+ };
25089
+ };
25090
+ 401: components["responses"]["Unauthorized"];
25091
+ 403: components["responses"]["Forbidden"];
25092
+ /** @description Workspace not found */
25093
+ 404: {
25094
+ headers: {
25095
+ [name: string]: unknown;
25096
+ };
25097
+ content: {
25098
+ "application/json": components["schemas"]["ErrorMessageDto"];
25099
+ };
25100
+ };
25101
+ };
25102
+ };
24220
25103
  }