@kindgi/api 0.1.2 → 0.1.3

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.
Files changed (88) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +2 -1
  3. package/dist/app.js.map +1 -1
  4. package/dist/cost-binding.d.ts +81 -5
  5. package/dist/cost-binding.d.ts.map +1 -1
  6. package/dist/cost-binding.js +6 -0
  7. package/dist/cost-binding.js.map +1 -1
  8. package/dist/hitl-binding.d.ts +20 -5
  9. package/dist/hitl-binding.d.ts.map +1 -1
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/middleware/auth.d.ts +3 -2
  14. package/dist/middleware/auth.d.ts.map +1 -1
  15. package/dist/middleware/auth.js.map +1 -1
  16. package/dist/middleware/idempotency.d.ts +5 -1
  17. package/dist/middleware/idempotency.d.ts.map +1 -1
  18. package/dist/middleware/idempotency.js +8 -1
  19. package/dist/middleware/idempotency.js.map +1 -1
  20. package/dist/openapi/operations.d.ts.map +1 -1
  21. package/dist/openapi/operations.js +83 -18
  22. package/dist/openapi/operations.js.map +1 -1
  23. package/dist/openapi/schemas.d.ts +18 -0
  24. package/dist/openapi/schemas.d.ts.map +1 -1
  25. package/dist/openapi/schemas.js +202 -7
  26. package/dist/openapi/schemas.js.map +1 -1
  27. package/dist/provenance-binding.d.ts +27 -1
  28. package/dist/provenance-binding.d.ts.map +1 -1
  29. package/dist/provenance-binding.js.map +1 -1
  30. package/dist/reviewer-binding.d.ts +10 -2
  31. package/dist/reviewer-binding.d.ts.map +1 -1
  32. package/dist/reviewer-role.d.ts +13 -0
  33. package/dist/reviewer-role.d.ts.map +1 -0
  34. package/dist/reviewer-role.js +27 -0
  35. package/dist/reviewer-role.js.map +1 -0
  36. package/dist/routes/approvals.d.ts +5 -4
  37. package/dist/routes/approvals.d.ts.map +1 -1
  38. package/dist/routes/approvals.js +52 -16
  39. package/dist/routes/approvals.js.map +1 -1
  40. package/dist/routes/conversations.d.ts +7 -1
  41. package/dist/routes/conversations.d.ts.map +1 -1
  42. package/dist/routes/conversations.js +41 -1
  43. package/dist/routes/conversations.js.map +1 -1
  44. package/dist/routes/cost.d.ts.map +1 -1
  45. package/dist/routes/cost.js +95 -9
  46. package/dist/routes/cost.js.map +1 -1
  47. package/dist/routes/identity.d.ts +7 -0
  48. package/dist/routes/identity.d.ts.map +1 -1
  49. package/dist/routes/identity.js +3 -2
  50. package/dist/routes/identity.js.map +1 -1
  51. package/dist/routes/provenance.d.ts.map +1 -1
  52. package/dist/routes/provenance.js +32 -1
  53. package/dist/routes/provenance.js.map +1 -1
  54. package/dist/routes/runs.d.ts +0 -7
  55. package/dist/routes/runs.d.ts.map +1 -1
  56. package/dist/routes/runs.js +44 -20
  57. package/dist/routes/runs.js.map +1 -1
  58. package/dist/routes/scope-params.d.ts +16 -1
  59. package/dist/routes/scope-params.d.ts.map +1 -1
  60. package/dist/routes/scope-params.js +28 -0
  61. package/dist/routes/scope-params.js.map +1 -1
  62. package/dist/types.d.ts +4 -3
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/webhook-endpoint-binding.d.ts +11 -0
  65. package/dist/webhook-endpoint-binding.d.ts.map +1 -1
  66. package/dist/webhook-endpoint-binding.js.map +1 -1
  67. package/openapi.json +599 -24
  68. package/package.json +21 -21
  69. package/src/app.ts +5 -1
  70. package/src/cost-binding.ts +96 -5
  71. package/src/hitl-binding.ts +20 -4
  72. package/src/index.ts +3 -0
  73. package/src/middleware/auth.ts +3 -2
  74. package/src/middleware/idempotency.ts +7 -1
  75. package/src/openapi/operations.ts +93 -18
  76. package/src/openapi/schemas.ts +221 -7
  77. package/src/provenance-binding.ts +42 -1
  78. package/src/reviewer-binding.ts +10 -2
  79. package/src/reviewer-role.ts +35 -0
  80. package/src/routes/approvals.ts +70 -19
  81. package/src/routes/conversations.ts +57 -1
  82. package/src/routes/cost.ts +104 -20
  83. package/src/routes/identity.ts +10 -2
  84. package/src/routes/provenance.ts +48 -1
  85. package/src/routes/runs.ts +54 -22
  86. package/src/routes/scope-params.ts +35 -1
  87. package/src/types.ts +4 -3
  88. package/src/webhook-endpoint-binding.ts +11 -0
@@ -140,6 +140,15 @@ const TopLevelQueryParam: ParameterSpec = {
140
140
  schema: { type: 'boolean' },
141
141
  };
142
142
 
143
+ const RunAgentIdQueryParam: ParameterSpec = {
144
+ name: 'agentId',
145
+ in: 'query',
146
+ required: false,
147
+ description:
148
+ "Only this agent's turns, at any version. Turns that ran before Kindgi 0.1.3 don't name their agent and aren't matched.",
149
+ schema: { type: 'string', minLength: 1 },
150
+ };
151
+
143
152
  const RunIncludeQueryParam: ParameterSpec = {
144
153
  name: 'include',
145
154
  in: 'query',
@@ -532,7 +541,7 @@ const CostToQueryParam: ParameterSpec = {
532
541
  in: 'query',
533
542
  required: false,
534
543
  description:
535
- 'ISO 8601 timestamp; records with `occurredAt <= to`. Required on `/v1/cost/aggregate` (or both endpoints omitted for default last-30-days window).',
544
+ 'ISO 8601 timestamp; records with `occurredAt < to` (exclusive). Required on `/v1/cost/aggregate` (or both endpoints omitted for default last-30-days window).',
536
545
  schema: { type: 'string', format: 'date-time' },
537
546
  };
538
547
 
@@ -541,10 +550,53 @@ const CostGroupByQueryParam: ParameterSpec = {
541
550
  in: 'query',
542
551
  required: true,
543
552
  description:
544
- 'Comma-separated list of dimensions to aggregate over. Each value must be one of `agentId | runId | category | providerId | day | month | tenant | conversationId`. Duplicates collapse.',
553
+ "Comma-separated list of dimensions to aggregate over. Each value must be one of `agentId | runId | category | providerId | day | month | tenant | conversationId | model | servedModel | projectId | orgId | rootRunId | flowId`. `model` is the model actually called; `servedModel` the exact version the vendor reported; `orgId` the org of the record's project. Duplicates collapse.",
554
+ schema: { type: 'string' },
555
+ };
556
+
557
+ const CostModelQueryParam: ParameterSpec = {
558
+ name: 'model',
559
+ in: 'query',
560
+ required: false,
561
+ description: 'Filter model calls to this model, the one actually called (exact match).',
545
562
  schema: { type: 'string' },
546
563
  };
547
564
 
565
+ const CostServedModelQueryParam: ParameterSpec = {
566
+ name: 'servedModel',
567
+ in: 'query',
568
+ required: false,
569
+ description: 'Filter model calls to the exact model version the vendor reported (exact match).',
570
+ schema: { type: 'string' },
571
+ };
572
+
573
+ const CostRootRunIdQueryParam: ParameterSpec = {
574
+ name: 'rootRunId',
575
+ in: 'query',
576
+ required: false,
577
+ description:
578
+ 'Every record of the run tree whose root is this run: a flow run and the agent turns and sub-flows it started.',
579
+ schema: { type: 'string', format: 'uuid' },
580
+ };
581
+
582
+ const CostIncludeDescendantsQueryParam: ParameterSpec = {
583
+ name: 'includeDescendants',
584
+ in: 'query',
585
+ required: false,
586
+ description:
587
+ "With `runId`: the run's records and those of every run it started, at any depth. `true` or `false` (default).",
588
+ schema: { type: 'boolean', default: false },
589
+ };
590
+
591
+ const CostIncludeQueryParam: ParameterSpec = {
592
+ name: 'include',
593
+ in: 'query',
594
+ required: false,
595
+ description:
596
+ "Extra fields, comma-separated. `rawUsage`: each model call's usage object exactly as the vendor reported it.",
597
+ schema: { type: 'string', enum: ['rawUsage'] },
598
+ };
599
+
548
600
  const ProviderIdPathParam: ParameterSpec = {
549
601
  name: 'providerId',
550
602
  in: 'path',
@@ -951,14 +1003,17 @@ export const OPERATIONS: readonly OperationSpec[] = [
951
1003
  parameters: [
952
1004
  LimitQueryParam,
953
1005
  CursorQueryParam,
1006
+ ScopeKindQueryParam,
1007
+ ScopeIdQueryParam,
954
1008
  ParentRunIdQueryParam,
955
1009
  TopLevelQueryParam,
1010
+ RunAgentIdQueryParam,
956
1011
  RunIncludeQueryParam,
957
1012
  ],
958
1013
  responses: {
959
1014
  '200': { description: 'Page of runs.', schema: ref('RunCollectionPage') },
960
1015
  ...CommonAuthErrors,
961
- '400': ErrorResponse('Malformed cursor or filter.'),
1016
+ '400': ErrorResponse('Malformed cursor, filter or scope.'),
962
1017
  },
963
1018
  },
964
1019
  {
@@ -971,6 +1026,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
971
1026
  security: 'bearer',
972
1027
  parameters: [RunIdPathParam],
973
1028
  responses: {
1029
+ '400': ErrorResponse('`runId` is not a run id (a UUID).'),
974
1030
  '200': { description: 'Run row.', schema: ref('Run') },
975
1031
  ...CommonAuthErrors,
976
1032
  '404': ErrorResponse('No run with that id under this tenant.'),
@@ -1022,6 +1078,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
1022
1078
  security: 'bearer',
1023
1079
  parameters: [RunIdPathParam, JournalSinceQueryParam],
1024
1080
  responses: {
1081
+ '400': ErrorResponse('`runId` is not a run id (a UUID).'),
1025
1082
  '200': { description: 'Journal page.', schema: ref('RunJournalPage') },
1026
1083
  ...CommonAuthErrors,
1027
1084
  '404': ErrorResponse('No run with that id under this tenant.'),
@@ -1039,6 +1096,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
1039
1096
  security: 'bearer',
1040
1097
  parameters: [RunIdPathParam, LastEventIdParam],
1041
1098
  responses: {
1099
+ '400': ErrorResponse('`runId` is not a run id (a UUID).'),
1042
1100
  '200': {
1043
1101
  description: 'text/event-stream. Each frame is one RunEvent.',
1044
1102
  contentType: 'text/event-stream',
@@ -1060,6 +1118,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
1060
1118
  security: 'bearer-or-public-run',
1061
1119
  parameters: [RunIdPathParam],
1062
1120
  responses: {
1121
+ '400': ErrorResponse('`runId` is not a run id (a UUID).'),
1063
1122
  '200': { description: "The run's progress.", schema: ref('RunProgress') },
1064
1123
  ...CommonAuthErrors,
1065
1124
  '404': ErrorResponse('No run with that id that the token may read.'),
@@ -1077,6 +1136,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
1077
1136
  security: 'bearer-or-public-run',
1078
1137
  parameters: [RunIdPathParam, LastEventIdParam],
1079
1138
  responses: {
1139
+ '400': ErrorResponse('`runId` is not a run id (a UUID).'),
1080
1140
  '200': {
1081
1141
  description: 'text/event-stream. Each frame is one RunProgressEvent.',
1082
1142
  contentType: 'text/event-stream',
@@ -1278,12 +1338,14 @@ export const OPERATIONS: readonly OperationSpec[] = [
1278
1338
  operationId: 'approvals.list',
1279
1339
  summary: 'List approvals visible to the caller',
1280
1340
  description:
1281
- 'Requires the token to carry a `reviewerRole`. Role-scoped: reviewers only see approvals whose `requiredRole` rank ≤ their rank (standard < senior < admin).',
1341
+ "Requires a reviewer: a token that carries a `reviewerRole`, or whose user is a registered reviewer (the roster gives the role). Role-scoped: reviewers only see approvals whose `requiredRole` rank ≤ their rank (standard < senior < admin). `scopeKind`/`scopeId` narrow to one project's approvals, or every project's in an org; approvals from before Kindgi 0.1.3 have no project and are listed only without a scope.",
1282
1342
  tags: ['approvals'],
1283
1343
  security: 'bearer',
1284
1344
  parameters: [
1285
1345
  LimitQueryParam,
1286
1346
  CursorQueryParam,
1347
+ ScopeKindQueryParam,
1348
+ ScopeIdQueryParam,
1287
1349
  ApprovalStatusQueryParam,
1288
1350
  ApprovalRequiredRoleQueryParam,
1289
1351
  CreatedAfterQueryParam,
@@ -1291,8 +1353,8 @@ export const OPERATIONS: readonly OperationSpec[] = [
1291
1353
  responses: {
1292
1354
  '200': { description: 'Page of approvals.', schema: ref('ApprovalCollectionPage') },
1293
1355
  ...CommonAuthErrors,
1294
- '400': ErrorResponse('Malformed query parameter.'),
1295
- '403': ErrorResponse('Token lacks a reviewer role or asked for a tier above the caller.'),
1356
+ '400': ErrorResponse('Malformed query parameter or scope.'),
1357
+ '403': ErrorResponse("The caller isn't a reviewer, or asked for a tier above its own."),
1296
1358
  },
1297
1359
  },
1298
1360
  {
@@ -1302,14 +1364,14 @@ export const OPERATIONS: readonly OperationSpec[] = [
1302
1364
  operationId: 'approvals.get',
1303
1365
  summary: 'Fetch a single approval',
1304
1366
  description:
1305
- 'Returns 404 for ids that exist but require a higher role than the caller (avoids cross-tier existence leaks — see API-ROUTE-CONVENTIONS.md §2.4).',
1367
+ 'Returns 404 for ids that exist but require a higher role than the caller (avoids cross-tier existence leaks — see API-ROUTE-CONVENTIONS.md §2.4). A decided approval carries its `decision`: what the reviewer decided, why, and who (`decidedBy`, `user:<userId>`).',
1306
1368
  tags: ['approvals'],
1307
1369
  security: 'bearer',
1308
1370
  parameters: [ApprovalIdPathParam],
1309
1371
  responses: {
1310
1372
  '200': { description: 'Approval.', schema: ref('Approval') },
1311
1373
  ...CommonAuthErrors,
1312
- '403': ErrorResponse('Token lacks a reviewer role.'),
1374
+ '403': ErrorResponse("The caller isn't a reviewer."),
1313
1375
  '404': ErrorResponse('No approval with that id — or the caller cannot see it.'),
1314
1376
  },
1315
1377
  },
@@ -1320,7 +1382,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
1320
1382
  operationId: 'approvals.complete',
1321
1383
  summary: 'Submit a decision on an approval',
1322
1384
  description:
1323
- 'Records the decision (`HitlBinding.submitReview`). When the approval carries a `waitTokenId` and the decision is `approve` or `reject`, also completes the waitpoint so the suspended run resumes.',
1385
+ "Records the decision (`HitlBinding.submitReview`). When the approval carries a `waitTokenId` and the decision is `approve` or `reject`, also completes the waitpoint so the suspended run resumes, with `{ decided, rationale?, decidedBy, approvalId }`: the run's journal records who decided which approval (`decidedBy` is `user:<userId>`).",
1324
1386
  tags: ['approvals'],
1325
1387
  security: 'bearer',
1326
1388
  parameters: [ApprovalIdPathParam, IdempotencyKeyParam],
@@ -1418,7 +1480,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
1418
1480
  responses: {
1419
1481
  '200': { description: 'Signed audit bundle.', schema: ref('ExportAuditBundleResult') },
1420
1482
  ...CommonMutationErrors,
1421
- '403': ErrorResponse('Token lacks a reviewer role.'),
1483
+ '403': ErrorResponse("The caller isn't a reviewer."),
1422
1484
  '404': ErrorResponse(
1423
1485
  'Approval not found, signing key id unknown, or signing not configured on this deployment.',
1424
1486
  ),
@@ -1881,12 +1943,14 @@ export const OPERATIONS: readonly OperationSpec[] = [
1881
1943
  operationId: 'conversations.list',
1882
1944
  summary: 'List conversations',
1883
1945
  description:
1884
- 'Cursor-paginated. Fixed sort: `openedAt desc, id desc`. Filters: `?agentId=`, `?status=open|closed`.',
1946
+ "Cursor-paginated. Fixed sort: `openedAt desc, id desc`. Filters: `?agentId=`, `?status=open|closed`, and `scopeKind`/`scopeId` for one project's conversations, or every project's in an org. Conversations from before Kindgi 0.1.3 have no project and are listed only without a scope.",
1885
1947
  tags: ['conversations'],
1886
1948
  security: 'bearer',
1887
1949
  parameters: [
1888
1950
  LimitQueryParam,
1889
1951
  CursorQueryParam,
1952
+ ScopeKindQueryParam,
1953
+ ScopeIdQueryParam,
1890
1954
  AgentIdQueryParam,
1891
1955
  ConversationStatusQueryParam,
1892
1956
  ],
@@ -1896,7 +1960,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
1896
1960
  schema: ref('ConversationCollectionPage'),
1897
1961
  },
1898
1962
  ...CommonAuthErrors,
1899
- '400': ErrorResponse('Malformed query parameter.'),
1963
+ '400': ErrorResponse('Malformed query parameter or scope.'),
1900
1964
  },
1901
1965
  },
1902
1966
  {
@@ -1921,7 +1985,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
1921
1985
  operationId: 'conversations.open',
1922
1986
  summary: 'Open a conversation',
1923
1987
  description:
1924
- 'Pins `(agentId, agentVersion)` at open time. `title` defaults to `"Untitled conversation"` when omitted; `scope` accepts arbitrary JSON.',
1988
+ 'Pins `(agentId, agentVersion)` at open time. `title` defaults to `"Untitled conversation"` when omitted; `projectId` puts it in a project (lists filter by it; omitted, the Default project); `scope` accepts arbitrary JSON.',
1925
1989
  tags: ['conversations'],
1926
1990
  security: 'bearer',
1927
1991
  parameters: [IdempotencyKeyParam],
@@ -2243,12 +2307,14 @@ export const OPERATIONS: readonly OperationSpec[] = [
2243
2307
  operationId: 'provenance.list',
2244
2308
  summary: 'List provenance records',
2245
2309
  description:
2246
- 'Cursor-paginated. Metadata rows only — clients fetch the DAG payload via `GET /v1/provenance/{runId}`. Fixed sort: `createdAt desc, id desc`. Filters: `?runId=`, `?agentId=`, `?createdAfter=`.',
2310
+ "Cursor-paginated. Metadata rows only — clients fetch the DAG payload via `GET /v1/provenance/{runId}`. Fixed sort: `createdAt desc, id desc`. Filters: `?runId=`, `?agentId=`, `?createdAfter=`, and `scopeKind`/`scopeId` for one project's records, or every project's in an org (records from before Kindgi 0.1.3 have no project and are listed only without a scope).",
2247
2311
  tags: ['provenance'],
2248
2312
  security: 'bearer',
2249
2313
  parameters: [
2250
2314
  LimitQueryParam,
2251
2315
  CursorQueryParam,
2316
+ ScopeKindQueryParam,
2317
+ ScopeIdQueryParam,
2252
2318
  ProvenanceRunIdQueryParam,
2253
2319
  ProvenanceAgentIdQueryParam,
2254
2320
  ProvenanceCreatedAfterQueryParam,
@@ -2256,7 +2322,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
2256
2322
  responses: {
2257
2323
  '200': { description: 'Page of records.', schema: ref('ProvenanceCollectionPage') },
2258
2324
  ...CommonAuthErrors,
2259
- '400': ErrorResponse('Malformed cursor or `createdAfter` timestamp.'),
2325
+ '400': ErrorResponse('Malformed cursor, `createdAfter` timestamp or scope.'),
2260
2326
  },
2261
2327
  },
2262
2328
  {
@@ -2764,7 +2830,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
2764
2830
  operationId: 'cost.records.list',
2765
2831
  summary: 'List cost records',
2766
2832
  description:
2767
- 'Cursor-paginated. Filters (all AND): `runId`, `agentId`, `conversationId`, `category`, `providerId`, `from`, `to`. Sort order is fixed: `occurredAt desc, id desc`. Records represent one accounted resource event each — LLM inference, tool invocation, storage write, sandbox execution, etc.',
2833
+ "Cursor-paginated. Filters (all AND): `runId` (with `includeDescendants`, its whole subtree), `rootRunId`, `agentId`, `conversationId`, `category`, `providerId`, `model`, `servedModel`, `from`, `to`. Sort order is fixed: `occurredAt desc, id desc`. Records represent one accounted resource event each — a model call (`category` `llm.inference`: one record per call, with its model, usage and what the vendor said about it), tool invocation, storage write, sandbox execution, etc. `include=rawUsage` adds each model call's usage as the vendor reported it.",
2768
2834
  tags: ['cost'],
2769
2835
  security: 'bearer',
2770
2836
  parameters: [
@@ -2775,11 +2841,16 @@ export const OPERATIONS: readonly OperationSpec[] = [
2775
2841
  CostConversationIdQueryParam,
2776
2842
  CostCategoryQueryParam,
2777
2843
  CostProviderIdQueryParam,
2844
+ CostModelQueryParam,
2845
+ CostServedModelQueryParam,
2846
+ CostRootRunIdQueryParam,
2847
+ CostIncludeDescendantsQueryParam,
2778
2848
  CostFromQueryParam,
2779
2849
  CostToQueryParam,
2780
2850
  ScopeKindQueryParam,
2781
2851
  ScopeIdQueryParam,
2782
2852
  InheritQueryParam,
2853
+ CostIncludeQueryParam,
2783
2854
  ],
2784
2855
  responses: {
2785
2856
  '200': { description: 'Page of cost records.', schema: ref('CostRecordCollectionPage') },
@@ -2795,7 +2866,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
2795
2866
  summary: 'Fetch a cost record',
2796
2867
  tags: ['cost'],
2797
2868
  security: 'bearer',
2798
- parameters: [CostRecordIdPathParam],
2869
+ parameters: [CostRecordIdPathParam, CostIncludeQueryParam],
2799
2870
  responses: {
2800
2871
  '200': { description: 'Cost record.', schema: ref('CostRecord') },
2801
2872
  ...CommonAuthErrors,
@@ -2809,7 +2880,7 @@ export const OPERATIONS: readonly OperationSpec[] = [
2809
2880
  operationId: 'cost.aggregate',
2810
2881
  summary: 'Aggregate cost across a time window',
2811
2882
  description:
2812
- 'Primary consumer path for dashboards. `groupBy` is required (comma-separated dimensions from the closed set); time range is required (both `from` and `to`, or both omitted for the default last-30-days window echoed back in `timeRange`). Filters compose on top of the time window. `?scopeKind + ?scopeId + ?inherit` narrow the aggregate to a specific scope — reconciles byte-for-byte with the same scoped `/records` list.',
2883
+ "Primary consumer path for dashboards. `groupBy` is required (comma-separated dimensions from the closed set); time range is required (both `from` and `to`, or both omitted for the default last-30-days window echoed back in `timeRange`). Filters compose on top of the time window. `?scopeKind + ?scopeId` narrow the aggregate to a scope: `org` covers every project in the org, so one call sums an org's spend. Each group, and the total, carries its cost and its token sums (`tokens`). `inherit` has no effect on cost records, which always belong to a project.",
2813
2884
  tags: ['cost'],
2814
2885
  security: 'bearer',
2815
2886
  parameters: [
@@ -2821,6 +2892,10 @@ export const OPERATIONS: readonly OperationSpec[] = [
2821
2892
  CostAgentIdQueryParam,
2822
2893
  CostRunIdQueryParam,
2823
2894
  CostConversationIdQueryParam,
2895
+ CostModelQueryParam,
2896
+ CostServedModelQueryParam,
2897
+ CostRootRunIdQueryParam,
2898
+ CostIncludeDescendantsQueryParam,
2824
2899
  ScopeKindQueryParam,
2825
2900
  ScopeIdQueryParam,
2826
2901
  InheritQueryParam,