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