@vibexp/api-client 0.102.0 → 0.104.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.
package/dist/schema.d.ts CHANGED
@@ -444,6 +444,58 @@ export interface paths {
444
444
  patch?: never;
445
445
  trace?: never;
446
446
  };
447
+ "/api/v1/{team_id}/artifacts/{project_id}/{slug}/lock": {
448
+ parameters: {
449
+ query?: never;
450
+ header?: never;
451
+ path?: never;
452
+ cookie?: never;
453
+ };
454
+ get?: never;
455
+ put?: never;
456
+ /**
457
+ * Lock a artifact
458
+ * @description Locks the artifact to mark it as in use (epic #1285). Any team member may
459
+ * lock a resource and must say why in `comment`. Locking is not an edit: it
460
+ * does not change `updated_at` or create a version. Locking a artifact that
461
+ * is already locked returns 409 and leaves the existing lock untouched.
462
+ */
463
+ post: operations["lockArtifact"];
464
+ /**
465
+ * Unlock a artifact
466
+ * @description Releases the lock on the artifact (epic #1285). The member who placed the
467
+ * lock may release it; so may a member whose role holds the
468
+ * `resource.unlock.any` permission (owners and admins). Unlocking a artifact
469
+ * that is not locked returns 409.
470
+ */
471
+ delete: operations["unlockArtifact"];
472
+ options?: never;
473
+ head?: never;
474
+ patch?: never;
475
+ trace?: never;
476
+ };
477
+ "/api/v1/{team_id}/artifacts/{project_id}/{slug}/lock/history": {
478
+ parameters: {
479
+ query?: never;
480
+ header?: never;
481
+ path?: never;
482
+ cookie?: never;
483
+ };
484
+ /**
485
+ * Get the lock history of a artifact
486
+ * @description Returns the artifact's lock and unlock events, newest first (epic #1285).
487
+ * Any team member may read it. The history is not paginated: at most the
488
+ * 100 most recent events are returned.
489
+ */
490
+ get: operations["getArtifactLockHistory"];
491
+ put?: never;
492
+ post?: never;
493
+ delete?: never;
494
+ options?: never;
495
+ head?: never;
496
+ patch?: never;
497
+ trace?: never;
498
+ };
447
499
  "/api/v1/{team_id}/attachments": {
448
500
  parameters: {
449
501
  query?: never;
@@ -908,6 +960,58 @@ export interface paths {
908
960
  patch?: never;
909
961
  trace?: never;
910
962
  };
963
+ "/api/v1/{team_id}/blueprints/{project_id}/{slug}/lock": {
964
+ parameters: {
965
+ query?: never;
966
+ header?: never;
967
+ path?: never;
968
+ cookie?: never;
969
+ };
970
+ get?: never;
971
+ put?: never;
972
+ /**
973
+ * Lock a blueprint
974
+ * @description Locks the blueprint to mark it as in use (epic #1285). Any team member may
975
+ * lock a resource and must say why in `comment`. Locking is not an edit: it
976
+ * does not change `updated_at` or create a version. Locking a blueprint that
977
+ * is already locked returns 409 and leaves the existing lock untouched.
978
+ */
979
+ post: operations["lockBlueprint"];
980
+ /**
981
+ * Unlock a blueprint
982
+ * @description Releases the lock on the blueprint (epic #1285). The member who placed the
983
+ * lock may release it; so may a member whose role holds the
984
+ * `resource.unlock.any` permission (owners and admins). Unlocking a blueprint
985
+ * that is not locked returns 409.
986
+ */
987
+ delete: operations["unlockBlueprint"];
988
+ options?: never;
989
+ head?: never;
990
+ patch?: never;
991
+ trace?: never;
992
+ };
993
+ "/api/v1/{team_id}/blueprints/{project_id}/{slug}/lock/history": {
994
+ parameters: {
995
+ query?: never;
996
+ header?: never;
997
+ path?: never;
998
+ cookie?: never;
999
+ };
1000
+ /**
1001
+ * Get the lock history of a blueprint
1002
+ * @description Returns the blueprint's lock and unlock events, newest first (epic #1285).
1003
+ * Any team member may read it. The history is not paginated: at most the
1004
+ * 100 most recent events are returned.
1005
+ */
1006
+ get: operations["getBlueprintLockHistory"];
1007
+ put?: never;
1008
+ post?: never;
1009
+ delete?: never;
1010
+ options?: never;
1011
+ head?: never;
1012
+ patch?: never;
1013
+ trace?: never;
1014
+ };
911
1015
  "/api/v1/{team_id}/blueprints/{project_id}/{slug}/versions": {
912
1016
  parameters: {
913
1017
  query?: never;
@@ -1041,6 +1145,58 @@ export interface paths {
1041
1145
  patch?: never;
1042
1146
  trace?: never;
1043
1147
  };
1148
+ "/api/v1/{team_id}/prompts/{slug}/lock": {
1149
+ parameters: {
1150
+ query?: never;
1151
+ header?: never;
1152
+ path?: never;
1153
+ cookie?: never;
1154
+ };
1155
+ get?: never;
1156
+ put?: never;
1157
+ /**
1158
+ * Lock a prompt
1159
+ * @description Locks the prompt to mark it as in use (epic #1285). Any team member may
1160
+ * lock a resource and must say why in `comment`. Locking is not an edit: it
1161
+ * does not change `updated_at` or create a version. Locking a prompt that
1162
+ * is already locked returns 409 and leaves the existing lock untouched.
1163
+ */
1164
+ post: operations["lockPrompt"];
1165
+ /**
1166
+ * Unlock a prompt
1167
+ * @description Releases the lock on the prompt (epic #1285). The member who placed the
1168
+ * lock may release it; so may a member whose role holds the
1169
+ * `resource.unlock.any` permission (owners and admins). Unlocking a prompt
1170
+ * that is not locked returns 409.
1171
+ */
1172
+ delete: operations["unlockPrompt"];
1173
+ options?: never;
1174
+ head?: never;
1175
+ patch?: never;
1176
+ trace?: never;
1177
+ };
1178
+ "/api/v1/{team_id}/prompts/{slug}/lock/history": {
1179
+ parameters: {
1180
+ query?: never;
1181
+ header?: never;
1182
+ path?: never;
1183
+ cookie?: never;
1184
+ };
1185
+ /**
1186
+ * Get the lock history of a prompt
1187
+ * @description Returns the prompt's lock and unlock events, newest first (epic #1285).
1188
+ * Any team member may read it. The history is not paginated: at most the
1189
+ * 100 most recent events are returned.
1190
+ */
1191
+ get: operations["getPromptLockHistory"];
1192
+ put?: never;
1193
+ post?: never;
1194
+ delete?: never;
1195
+ options?: never;
1196
+ head?: never;
1197
+ patch?: never;
1198
+ trace?: never;
1199
+ };
1044
1200
  "/api/v1/{team_id}/prompts/{slug}/placeholders": {
1045
1201
  parameters: {
1046
1202
  query?: never;
@@ -6396,6 +6552,8 @@ export interface components {
6396
6552
  /** @description Identity of the project this resource belongs to, so a client can render a project label without a second request (issue #929). Guaranteed on the single-resource detail GET; null in list responses, and null wherever the server has not resolved it — a project that no longer exists, or one belonging to another team. `project_id` remains the authoritative field: a client must not read a null here as "this resource has no project". */
6397
6553
  project: components["schemas"]["ProjectSummary"] | null;
6398
6554
  freshness?: components["schemas"]["ResourceFreshnessState"];
6555
+ /** @description The lock held on this resource (epic #1285), or null when it is not locked. Present on every read, list and write response. Always null on a prompt read through a share link: lock state is internal to the team. */
6556
+ lock: components["schemas"]["ResourceLock"] | null;
6399
6557
  };
6400
6558
  CreatePromptRequest: {
6401
6559
  /** @example Code Review Template */
@@ -7939,6 +8097,8 @@ export interface components {
7939
8097
  /** @description Identity of the project this resource belongs to, so a client can render a project label without a second request (issue #929). Guaranteed on the single-resource detail GET; null in list responses, and null wherever the server has not resolved it — a project that no longer exists, or one belonging to another team. `project_id` remains the authoritative field: a client must not read a null here as "this resource has no project". */
7940
8098
  project: components["schemas"]["ProjectSummary"] | null;
7941
8099
  freshness?: components["schemas"]["ResourceFreshnessState"];
8100
+ /** @description The lock held on this resource (epic #1285), or null when it is not locked. Present on every read, list and write response. */
8101
+ lock: components["schemas"]["ResourceLock"] | null;
7942
8102
  };
7943
8103
  CreateArtifactRequest: {
7944
8104
  /**
@@ -8549,6 +8709,74 @@ export interface components {
8549
8709
  */
8550
8710
  slug: string;
8551
8711
  };
8712
+ /** @description A user named on a resource lock or a lock history event. */
8713
+ ResourceLockActor: {
8714
+ /**
8715
+ * @description ID of the user.
8716
+ * @example 01234567-89ab-cdef-0123-456789abcdef
8717
+ */
8718
+ user_id: string;
8719
+ /**
8720
+ * @description The user's display name.
8721
+ * @example Ada Lovelace
8722
+ */
8723
+ display_name: string;
8724
+ };
8725
+ /** @description The lock held on a prompt, blueprint or artifact. A resource carries one while it is locked and `null` when it is not. */
8726
+ ResourceLock: {
8727
+ /** @description The team member holding the lock. */
8728
+ locked_by: components["schemas"]["ResourceLockActor"];
8729
+ /**
8730
+ * @description Why the resource was locked, as given by the locker.
8731
+ * @example Used by the nightly release agent
8732
+ */
8733
+ comment: string;
8734
+ /**
8735
+ * Format: date-time
8736
+ * @description When the lock was taken.
8737
+ * @example 2026-10-11T10:15:30Z
8738
+ */
8739
+ locked_at: string;
8740
+ };
8741
+ LockResourceRequest: {
8742
+ /**
8743
+ * @description Why the resource is being locked. Required: surrounding whitespace is trimmed, and a comment that is then empty or longer than 500 characters is rejected with 400.
8744
+ * @example Used by the nightly release agent
8745
+ */
8746
+ comment: string;
8747
+ };
8748
+ /** @description One entry of a resource's append-only lock history. */
8749
+ ResourceLockEvent: {
8750
+ /**
8751
+ * Format: uuid
8752
+ * @description ID of the history event.
8753
+ * @example 123e4567-e89b-12d3-a456-426614174000
8754
+ */
8755
+ id: string;
8756
+ /**
8757
+ * @description Whether the resource was locked or unlocked.
8758
+ * @example lock
8759
+ * @enum {string}
8760
+ */
8761
+ action: "lock" | "unlock";
8762
+ /** @description Who locked or unlocked the resource. Null once that user's account has been deleted. */
8763
+ actor: components["schemas"]["ResourceLockActor"] | null;
8764
+ /**
8765
+ * @description The lock comment for a `lock` event; null for an `unlock`.
8766
+ * @example Used by the nightly release agent
8767
+ */
8768
+ comment: string | null;
8769
+ /**
8770
+ * Format: date-time
8771
+ * @description When the event happened.
8772
+ * @example 2026-10-11T10:15:30Z
8773
+ */
8774
+ created_at: string;
8775
+ };
8776
+ ResourceLockHistoryResponse: {
8777
+ /** @description Lock and unlock events, newest first. Not paginated: at most the 100 most recent events are returned. */
8778
+ events: components["schemas"]["ResourceLockEvent"][];
8779
+ };
8552
8780
  CreateProjectRequest: {
8553
8781
  /**
8554
8782
  * @description Human-readable name of the project
@@ -9191,6 +9419,8 @@ export interface components {
9191
9419
  /** @description Identity of the project this resource belongs to, so a client can render a project label without a second request (issue #929). Guaranteed on the single-resource detail GET; null in list responses, and null wherever the server has not resolved it — a project that no longer exists, or one belonging to another team. `project_id` remains the authoritative field: a client must not read a null here as "this resource has no project". */
9192
9420
  project: components["schemas"]["ProjectSummary"] | null;
9193
9421
  freshness?: components["schemas"]["ResourceFreshnessState"];
9422
+ /** @description The lock held on this resource (epic #1285), or null when it is not locked. Present on every read, list and write response. */
9423
+ lock: components["schemas"]["ResourceLock"] | null;
9194
9424
  };
9195
9425
  /** @description Read-only import provenance; present only for imported blueprints. */
9196
9426
  BlueprintSource: {
@@ -10046,14 +10276,14 @@ export interface components {
10046
10276
  /**
10047
10277
  * @description Exactly what `role` permits the requesting user to do in this team, expanded server-side from the role matrix (epic #220). Clients MUST gate their UI on these strings rather than re-deriving them from `role` — the matrix lives on the server and may change without a client release.
10048
10278
  * Computed at read time for the requesting user, alongside `role`, and always present (an empty array means the role grants nothing). The values are stable API surface: renaming one is a breaking change, and they are kept byte-identical to the `internal/authz` constants by a drift test. Meanings:
10049
- * * `team.update` — change team name, slug or description. * `team.delete` — delete the team (owner only). * `team.transfer` — transfer ownership to another member (owner only). * `team.settings.update` — change team-level configuration, such as search ranking. * `member.invite` — invite new members. * `member.remove` — remove members from the team. * `member.role.update` — change a member's role. * `project.create` — create a project in the team. * `project.update` — update any project in the team. * `project.delete` — delete any project in the team. * `resource.create` — create a prompt, memory, artifact, blueprint or agent. * `resource.update.any` — update any resource, including other members'. * `resource.delete.own` — delete a resource the caller created. * `resource.delete.any` — delete a resource created by someone else. * `feed.delete.any` — delete another member's feed post or reply (moderation).
10279
+ * * `team.update` — change team name, slug or description. * `team.delete` — delete the team (owner only). * `team.transfer` — transfer ownership to another member (owner only). * `team.settings.update` — change team-level configuration, such as search ranking. * `member.invite` — invite new members. * `member.remove` — remove members from the team. * `member.role.update` — change a member's role. * `project.create` — create a project in the team. * `project.update` — update any project in the team. * `project.delete` — delete any project in the team. * `resource.create` — create a prompt, memory, artifact, blueprint or agent. * `resource.update.any` — update any resource, including other members'. * `resource.delete.own` — delete a resource the caller created. * `resource.delete.any` — delete a resource created by someone else. * `resource.unlock.any` — unlock a resource locked by someone else. * `feed.delete.any` — delete another member's feed post or reply (moderation).
10050
10280
  * @example [
10051
10281
  * "resource.create",
10052
10282
  * "resource.update.any",
10053
10283
  * "resource.delete.own"
10054
10284
  * ]
10055
10285
  */
10056
- permissions: ("team.update" | "team.delete" | "team.transfer" | "team.settings.update" | "member.invite" | "member.remove" | "member.role.update" | "project.create" | "project.update" | "project.delete" | "resource.create" | "resource.update.any" | "resource.delete.own" | "resource.delete.any" | "feed.delete.any")[];
10286
+ permissions: ("team.update" | "team.delete" | "team.transfer" | "team.settings.update" | "member.invite" | "member.remove" | "member.role.update" | "project.create" | "project.update" | "project.delete" | "resource.create" | "resource.update.any" | "resource.delete.own" | "resource.delete.any" | "resource.unlock.any" | "feed.delete.any")[];
10057
10287
  /**
10058
10288
  * @description Number of members in this team. Populated only on list responses; 0 on create and single-team reads.
10059
10289
  * @example 5
@@ -15385,6 +15615,8 @@ export interface operations {
15385
15615
  listArtifacts: {
15386
15616
  parameters: {
15387
15617
  query?: {
15618
+ /** @description Filter by lock state (epic #1285): `true` returns only locked resources, `false` only unlocked ones. Omit for no lock filtering. Returns 400 for a value that is not a boolean. */
15619
+ locked?: boolean;
15388
15620
  /** @description Filter to resources currently flagged stale by the team's freshness rules (epic #726). Omit for no freshness filtering. Returns 400 for any other value — a silently ignored filter would return the full list, which looks like a legitimate answer. */
15389
15621
  freshness?: "stale";
15390
15622
  /** @description Filter by project ID */
@@ -15568,6 +15800,8 @@ export interface operations {
15568
15800
  listArtifactsByProject: {
15569
15801
  parameters: {
15570
15802
  query?: {
15803
+ /** @description Filter by lock state (epic #1285): `true` returns only locked resources, `false` only unlocked ones. Omit for no lock filtering. Returns 400 for a value that is not a boolean. */
15804
+ locked?: boolean;
15571
15805
  /** @description Filter to resources currently flagged stale by the team's freshness rules (epic #726). Omit for no freshness filtering. Returns 400 for any other value — a silently ignored filter would return the full list, which looks like a legitimate answer. */
15572
15806
  freshness?: "stale";
15573
15807
  /** @description Filter by status: one of the system statuses or one of the team's custom statuses for this resource type. Returns 400 for unknown values. */
@@ -15826,33 +16060,36 @@ export interface operations {
15826
16060
  };
15827
16061
  };
15828
16062
  };
15829
- listAttachments: {
16063
+ lockArtifact: {
15830
16064
  parameters: {
15831
- query: {
15832
- /** @description Type of the owning resource (e.g. "artifact") */
15833
- owner_type: string;
15834
- /** @description UUID of the owning resource */
15835
- owner_id: string;
15836
- };
16065
+ query?: never;
15837
16066
  header?: never;
15838
16067
  path: {
15839
16068
  /** @description Team identifier */
15840
16069
  team_id: string;
16070
+ /** @description UUID of the project */
16071
+ project_id: string;
16072
+ /** @description Artifact slug */
16073
+ slug: string;
15841
16074
  };
15842
16075
  cookie?: never;
15843
16076
  };
15844
- requestBody?: never;
16077
+ requestBody: {
16078
+ content: {
16079
+ "application/json": components["schemas"]["LockResourceRequest"];
16080
+ };
16081
+ };
15845
16082
  responses: {
15846
- /** @description Attachments retrieved successfully */
16083
+ /** @description Artifact locked; the updated artifact is returned */
15847
16084
  200: {
15848
16085
  headers: {
15849
16086
  [name: string]: unknown;
15850
16087
  };
15851
16088
  content: {
15852
- "application/json": components["schemas"]["AttachmentListResponse"];
16089
+ "application/json": components["schemas"]["Artifact"];
15853
16090
  };
15854
16091
  };
15855
- /** @description Missing or invalid owner_type / owner_id */
16092
+ /** @description Bad request: a malformed path parameter or request body, or a missing, blank or too long comment */
15856
16093
  400: {
15857
16094
  headers: {
15858
16095
  [name: string]: unknown;
@@ -15870,7 +16107,16 @@ export interface operations {
15870
16107
  "application/problem+json": components["schemas"]["ErrorResponse"];
15871
16108
  };
15872
16109
  };
15873
- /** @description Unsupported owner_type, or the owning resource was not found / is not accessible */
16110
+ /** @description Forbidden: not a member of the team */
16111
+ 403: {
16112
+ headers: {
16113
+ [name: string]: unknown;
16114
+ };
16115
+ content: {
16116
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16117
+ };
16118
+ };
16119
+ /** @description Artifact not found */
15874
16120
  404: {
15875
16121
  headers: {
15876
16122
  [name: string]: unknown;
@@ -15879,55 +16125,52 @@ export interface operations {
15879
16125
  "application/problem+json": components["schemas"]["ErrorResponse"];
15880
16126
  };
15881
16127
  };
16128
+ /** @description The artifact is already locked (code `RESOURCE_LOCKED`) */
16129
+ 409: {
16130
+ headers: {
16131
+ [name: string]: unknown;
16132
+ };
16133
+ content: {
16134
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16135
+ };
16136
+ };
16137
+ /** @description Internal server error */
16138
+ 500: {
16139
+ headers: {
16140
+ [name: string]: unknown;
16141
+ };
16142
+ content: {
16143
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16144
+ };
16145
+ };
15882
16146
  };
15883
16147
  };
15884
- uploadAttachment: {
16148
+ unlockArtifact: {
15885
16149
  parameters: {
15886
16150
  query?: never;
15887
16151
  header?: never;
15888
16152
  path: {
15889
16153
  /** @description Team identifier */
15890
16154
  team_id: string;
16155
+ /** @description UUID of the project */
16156
+ project_id: string;
16157
+ /** @description Artifact slug */
16158
+ slug: string;
15891
16159
  };
15892
16160
  cookie?: never;
15893
16161
  };
15894
- requestBody: {
15895
- content: {
15896
- "multipart/form-data": {
15897
- /**
15898
- * @description Type of the owning resource (e.g. "artifact")
15899
- * @example artifact
15900
- */
15901
- owner_type: string;
15902
- /**
15903
- * Format: uuid
15904
- * @description UUID of the owning resource
15905
- */
15906
- owner_id: string;
15907
- /**
15908
- * Format: binary
15909
- * @description The file to attach
15910
- */
15911
- file: string;
15912
- /**
15913
- * @description Optional path relative to the owner's directory (e.g. "scripts/helper.py"). Must be relative — no leading "/", no "..", no backslashes. Unique per owner. file_name stays the basename.
15914
- * @example scripts/helper.py
15915
- */
15916
- relative_path?: string;
15917
- };
15918
- };
15919
- };
16162
+ requestBody?: never;
15920
16163
  responses: {
15921
- /** @description Attachment uploaded successfully */
15922
- 201: {
16164
+ /** @description Artifact unlocked; the updated artifact is returned */
16165
+ 200: {
15923
16166
  headers: {
15924
16167
  [name: string]: unknown;
15925
16168
  };
15926
16169
  content: {
15927
- "application/json": components["schemas"]["Attachment"];
16170
+ "application/json": components["schemas"]["Artifact"];
15928
16171
  };
15929
16172
  };
15930
- /** @description Missing fields/file, invalid owner_id, file too large, cumulative limit exceeded, or disallowed type */
16173
+ /** @description Bad request: a malformed path parameter */
15931
16174
  400: {
15932
16175
  headers: {
15933
16176
  [name: string]: unknown;
@@ -15945,7 +16188,16 @@ export interface operations {
15945
16188
  "application/problem+json": components["schemas"]["ErrorResponse"];
15946
16189
  };
15947
16190
  };
15948
- /** @description Unsupported owner_type, or the owning resource was not found / is not accessible */
16191
+ /** @description Forbidden: not a member of the team, or the lock was placed by someone else and the caller's role does not hold `resource.unlock.any` */
16192
+ 403: {
16193
+ headers: {
16194
+ [name: string]: unknown;
16195
+ };
16196
+ content: {
16197
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16198
+ };
16199
+ };
16200
+ /** @description Artifact not found */
15949
16201
  404: {
15950
16202
  headers: {
15951
16203
  [name: string]: unknown;
@@ -15954,8 +16206,17 @@ export interface operations {
15954
16206
  "application/problem+json": components["schemas"]["ErrorResponse"];
15955
16207
  };
15956
16208
  };
15957
- /** @description Attachment storage is not available */
15958
- 503: {
16209
+ /** @description The artifact is not locked (code `RESOURCE_NOT_LOCKED`) */
16210
+ 409: {
16211
+ headers: {
16212
+ [name: string]: unknown;
16213
+ };
16214
+ content: {
16215
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16216
+ };
16217
+ };
16218
+ /** @description Internal server error */
16219
+ 500: {
15959
16220
  headers: {
15960
16221
  [name: string]: unknown;
15961
16222
  };
@@ -15965,30 +16226,32 @@ export interface operations {
15965
16226
  };
15966
16227
  };
15967
16228
  };
15968
- downloadAttachment: {
16229
+ getArtifactLockHistory: {
15969
16230
  parameters: {
15970
16231
  query?: never;
15971
16232
  header?: never;
15972
16233
  path: {
15973
16234
  /** @description Team identifier */
15974
16235
  team_id: string;
15975
- /** @description Attachment identifier */
15976
- id: string;
16236
+ /** @description UUID of the project */
16237
+ project_id: string;
16238
+ /** @description Artifact slug */
16239
+ slug: string;
15977
16240
  };
15978
16241
  cookie?: never;
15979
16242
  };
15980
16243
  requestBody?: never;
15981
16244
  responses: {
15982
- /** @description Attachment file stream */
16245
+ /** @description Lock history retrieved successfully */
15983
16246
  200: {
15984
16247
  headers: {
15985
16248
  [name: string]: unknown;
15986
16249
  };
15987
16250
  content: {
15988
- "application/octet-stream": string;
16251
+ "application/json": components["schemas"]["ResourceLockHistoryResponse"];
15989
16252
  };
15990
16253
  };
15991
- /** @description Invalid attachment id */
16254
+ /** @description Bad request: a malformed path parameter */
15992
16255
  400: {
15993
16256
  headers: {
15994
16257
  [name: string]: unknown;
@@ -16006,8 +16269,8 @@ export interface operations {
16006
16269
  "application/problem+json": components["schemas"]["ErrorResponse"];
16007
16270
  };
16008
16271
  };
16009
- /** @description Attachment not found, or its owner is not accessible */
16010
- 404: {
16272
+ /** @description Forbidden: not a member of the team */
16273
+ 403: {
16011
16274
  headers: {
16012
16275
  [name: string]: unknown;
16013
16276
  };
@@ -16015,7 +16278,216 @@ export interface operations {
16015
16278
  "application/problem+json": components["schemas"]["ErrorResponse"];
16016
16279
  };
16017
16280
  };
16018
- /** @description Attachment storage is not available */
16281
+ /** @description Artifact not found */
16282
+ 404: {
16283
+ headers: {
16284
+ [name: string]: unknown;
16285
+ };
16286
+ content: {
16287
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16288
+ };
16289
+ };
16290
+ /** @description Internal server error */
16291
+ 500: {
16292
+ headers: {
16293
+ [name: string]: unknown;
16294
+ };
16295
+ content: {
16296
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16297
+ };
16298
+ };
16299
+ };
16300
+ };
16301
+ listAttachments: {
16302
+ parameters: {
16303
+ query: {
16304
+ /** @description Type of the owning resource (e.g. "artifact") */
16305
+ owner_type: string;
16306
+ /** @description UUID of the owning resource */
16307
+ owner_id: string;
16308
+ };
16309
+ header?: never;
16310
+ path: {
16311
+ /** @description Team identifier */
16312
+ team_id: string;
16313
+ };
16314
+ cookie?: never;
16315
+ };
16316
+ requestBody?: never;
16317
+ responses: {
16318
+ /** @description Attachments retrieved successfully */
16319
+ 200: {
16320
+ headers: {
16321
+ [name: string]: unknown;
16322
+ };
16323
+ content: {
16324
+ "application/json": components["schemas"]["AttachmentListResponse"];
16325
+ };
16326
+ };
16327
+ /** @description Missing or invalid owner_type / owner_id */
16328
+ 400: {
16329
+ headers: {
16330
+ [name: string]: unknown;
16331
+ };
16332
+ content: {
16333
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16334
+ };
16335
+ };
16336
+ /** @description Unauthorized */
16337
+ 401: {
16338
+ headers: {
16339
+ [name: string]: unknown;
16340
+ };
16341
+ content: {
16342
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16343
+ };
16344
+ };
16345
+ /** @description Unsupported owner_type, or the owning resource was not found / is not accessible */
16346
+ 404: {
16347
+ headers: {
16348
+ [name: string]: unknown;
16349
+ };
16350
+ content: {
16351
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16352
+ };
16353
+ };
16354
+ };
16355
+ };
16356
+ uploadAttachment: {
16357
+ parameters: {
16358
+ query?: never;
16359
+ header?: never;
16360
+ path: {
16361
+ /** @description Team identifier */
16362
+ team_id: string;
16363
+ };
16364
+ cookie?: never;
16365
+ };
16366
+ requestBody: {
16367
+ content: {
16368
+ "multipart/form-data": {
16369
+ /**
16370
+ * @description Type of the owning resource (e.g. "artifact")
16371
+ * @example artifact
16372
+ */
16373
+ owner_type: string;
16374
+ /**
16375
+ * Format: uuid
16376
+ * @description UUID of the owning resource
16377
+ */
16378
+ owner_id: string;
16379
+ /**
16380
+ * Format: binary
16381
+ * @description The file to attach
16382
+ */
16383
+ file: string;
16384
+ /**
16385
+ * @description Optional path relative to the owner's directory (e.g. "scripts/helper.py"). Must be relative — no leading "/", no "..", no backslashes. Unique per owner. file_name stays the basename.
16386
+ * @example scripts/helper.py
16387
+ */
16388
+ relative_path?: string;
16389
+ };
16390
+ };
16391
+ };
16392
+ responses: {
16393
+ /** @description Attachment uploaded successfully */
16394
+ 201: {
16395
+ headers: {
16396
+ [name: string]: unknown;
16397
+ };
16398
+ content: {
16399
+ "application/json": components["schemas"]["Attachment"];
16400
+ };
16401
+ };
16402
+ /** @description Missing fields/file, invalid owner_id, file too large, cumulative limit exceeded, or disallowed type */
16403
+ 400: {
16404
+ headers: {
16405
+ [name: string]: unknown;
16406
+ };
16407
+ content: {
16408
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16409
+ };
16410
+ };
16411
+ /** @description Unauthorized */
16412
+ 401: {
16413
+ headers: {
16414
+ [name: string]: unknown;
16415
+ };
16416
+ content: {
16417
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16418
+ };
16419
+ };
16420
+ /** @description Unsupported owner_type, or the owning resource was not found / is not accessible */
16421
+ 404: {
16422
+ headers: {
16423
+ [name: string]: unknown;
16424
+ };
16425
+ content: {
16426
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16427
+ };
16428
+ };
16429
+ /** @description Attachment storage is not available */
16430
+ 503: {
16431
+ headers: {
16432
+ [name: string]: unknown;
16433
+ };
16434
+ content: {
16435
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16436
+ };
16437
+ };
16438
+ };
16439
+ };
16440
+ downloadAttachment: {
16441
+ parameters: {
16442
+ query?: never;
16443
+ header?: never;
16444
+ path: {
16445
+ /** @description Team identifier */
16446
+ team_id: string;
16447
+ /** @description Attachment identifier */
16448
+ id: string;
16449
+ };
16450
+ cookie?: never;
16451
+ };
16452
+ requestBody?: never;
16453
+ responses: {
16454
+ /** @description Attachment file stream */
16455
+ 200: {
16456
+ headers: {
16457
+ [name: string]: unknown;
16458
+ };
16459
+ content: {
16460
+ "application/octet-stream": string;
16461
+ };
16462
+ };
16463
+ /** @description Invalid attachment id */
16464
+ 400: {
16465
+ headers: {
16466
+ [name: string]: unknown;
16467
+ };
16468
+ content: {
16469
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16470
+ };
16471
+ };
16472
+ /** @description Unauthorized */
16473
+ 401: {
16474
+ headers: {
16475
+ [name: string]: unknown;
16476
+ };
16477
+ content: {
16478
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16479
+ };
16480
+ };
16481
+ /** @description Attachment not found, or its owner is not accessible */
16482
+ 404: {
16483
+ headers: {
16484
+ [name: string]: unknown;
16485
+ };
16486
+ content: {
16487
+ "application/problem+json": components["schemas"]["ErrorResponse"];
16488
+ };
16489
+ };
16490
+ /** @description Attachment storage is not available */
16019
16491
  503: {
16020
16492
  headers: {
16021
16493
  [name: string]: unknown;
@@ -17280,6 +17752,8 @@ export interface operations {
17280
17752
  listSpecLibraries: {
17281
17753
  parameters: {
17282
17754
  query?: {
17755
+ /** @description Filter by lock state (epic #1285): `true` returns only locked resources, `false` only unlocked ones. Omit for no lock filtering. Returns 400 for a value that is not a boolean. */
17756
+ locked?: boolean;
17283
17757
  /** @description Filter to resources currently flagged stale by the team's freshness rules (epic #726). Omit for no freshness filtering. Returns 400 for any other value — a silently ignored filter would return the full list, which looks like a legitimate answer. */
17284
17758
  freshness?: "stale";
17285
17759
  /** @description Filter by project name */
@@ -17481,6 +17955,8 @@ export interface operations {
17481
17955
  listSpecLibrariesByProject: {
17482
17956
  parameters: {
17483
17957
  query?: {
17958
+ /** @description Filter by lock state (epic #1285): `true` returns only locked resources, `false` only unlocked ones. Omit for no lock filtering. Returns 400 for a value that is not a boolean. */
17959
+ locked?: boolean;
17484
17960
  /** @description Filter to resources currently flagged stale by the team's freshness rules (epic #726). Omit for no freshness filtering. Returns 400 for any other value — a silently ignored filter would return the full list, which looks like a legitimate answer. */
17485
17961
  freshness?: "stale";
17486
17962
  /** @description Filter by status: one of the system statuses or one of the team's custom statuses for this resource type. Returns 400 for unknown values. */
@@ -17768,29 +18244,42 @@ export interface operations {
17768
18244
  };
17769
18245
  };
17770
18246
  };
17771
- listBlueprintVersions: {
18247
+ lockBlueprint: {
17772
18248
  parameters: {
17773
18249
  query?: never;
17774
18250
  header?: never;
17775
18251
  path: {
17776
18252
  /** @description Team identifier */
17777
18253
  team_id: string;
17778
- /** @description UUID of the project */
18254
+ /** @description Project identifier (URL-encoded) */
17779
18255
  project_id: string;
17780
- /** @description Blueprint slug */
18256
+ /** @description Blueprint slug (URL-encoded) */
17781
18257
  slug: string;
17782
18258
  };
17783
18259
  cookie?: never;
17784
18260
  };
17785
- requestBody?: never;
18261
+ requestBody: {
18262
+ content: {
18263
+ "application/json": components["schemas"]["LockResourceRequest"];
18264
+ };
18265
+ };
17786
18266
  responses: {
17787
- /** @description Blueprint versions retrieved successfully */
18267
+ /** @description Blueprint locked; the updated blueprint is returned */
17788
18268
  200: {
17789
18269
  headers: {
17790
18270
  [name: string]: unknown;
17791
18271
  };
17792
18272
  content: {
17793
- "application/json": components["schemas"]["BlueprintVersionListResponse"];
18273
+ "application/json": components["schemas"]["BlueprintDetail"];
18274
+ };
18275
+ };
18276
+ /** @description Bad request: a malformed path parameter or request body, or a missing, blank or too long comment */
18277
+ 400: {
18278
+ headers: {
18279
+ [name: string]: unknown;
18280
+ };
18281
+ content: {
18282
+ "application/problem+json": components["schemas"]["ErrorResponse"];
17794
18283
  };
17795
18284
  };
17796
18285
  /** @description Unauthorized */
@@ -17802,7 +18291,7 @@ export interface operations {
17802
18291
  "application/problem+json": components["schemas"]["ErrorResponse"];
17803
18292
  };
17804
18293
  };
17805
- /** @description Forbidden (not a team member) */
18294
+ /** @description Forbidden: not a member of the team */
17806
18295
  403: {
17807
18296
  headers: {
17808
18297
  [name: string]: unknown;
@@ -17820,33 +18309,258 @@ export interface operations {
17820
18309
  "application/problem+json": components["schemas"]["ErrorResponse"];
17821
18310
  };
17822
18311
  };
18312
+ /** @description The blueprint is already locked (code `RESOURCE_LOCKED`) */
18313
+ 409: {
18314
+ headers: {
18315
+ [name: string]: unknown;
18316
+ };
18317
+ content: {
18318
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18319
+ };
18320
+ };
18321
+ /** @description Internal server error */
18322
+ 500: {
18323
+ headers: {
18324
+ [name: string]: unknown;
18325
+ };
18326
+ content: {
18327
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18328
+ };
18329
+ };
17823
18330
  };
17824
18331
  };
17825
- getBlueprintVersion: {
18332
+ unlockBlueprint: {
17826
18333
  parameters: {
17827
18334
  query?: never;
17828
18335
  header?: never;
17829
18336
  path: {
17830
18337
  /** @description Team identifier */
17831
18338
  team_id: string;
17832
- /** @description UUID of the project */
18339
+ /** @description Project identifier (URL-encoded) */
17833
18340
  project_id: string;
17834
- /** @description Blueprint slug */
18341
+ /** @description Blueprint slug (URL-encoded) */
17835
18342
  slug: string;
17836
- /** @description Version number */
17837
- version_number: number;
17838
18343
  };
17839
18344
  cookie?: never;
17840
18345
  };
17841
18346
  requestBody?: never;
17842
18347
  responses: {
17843
- /** @description Blueprint version retrieved successfully */
18348
+ /** @description Blueprint unlocked; the updated blueprint is returned */
17844
18349
  200: {
17845
18350
  headers: {
17846
18351
  [name: string]: unknown;
17847
18352
  };
17848
18353
  content: {
17849
- "application/json": components["schemas"]["ContentVersion"];
18354
+ "application/json": components["schemas"]["BlueprintDetail"];
18355
+ };
18356
+ };
18357
+ /** @description Bad request: a malformed path parameter */
18358
+ 400: {
18359
+ headers: {
18360
+ [name: string]: unknown;
18361
+ };
18362
+ content: {
18363
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18364
+ };
18365
+ };
18366
+ /** @description Unauthorized */
18367
+ 401: {
18368
+ headers: {
18369
+ [name: string]: unknown;
18370
+ };
18371
+ content: {
18372
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18373
+ };
18374
+ };
18375
+ /** @description Forbidden: not a member of the team, or the lock was placed by someone else and the caller's role does not hold `resource.unlock.any` */
18376
+ 403: {
18377
+ headers: {
18378
+ [name: string]: unknown;
18379
+ };
18380
+ content: {
18381
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18382
+ };
18383
+ };
18384
+ /** @description Blueprint not found */
18385
+ 404: {
18386
+ headers: {
18387
+ [name: string]: unknown;
18388
+ };
18389
+ content: {
18390
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18391
+ };
18392
+ };
18393
+ /** @description The blueprint is not locked (code `RESOURCE_NOT_LOCKED`) */
18394
+ 409: {
18395
+ headers: {
18396
+ [name: string]: unknown;
18397
+ };
18398
+ content: {
18399
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18400
+ };
18401
+ };
18402
+ /** @description Internal server error */
18403
+ 500: {
18404
+ headers: {
18405
+ [name: string]: unknown;
18406
+ };
18407
+ content: {
18408
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18409
+ };
18410
+ };
18411
+ };
18412
+ };
18413
+ getBlueprintLockHistory: {
18414
+ parameters: {
18415
+ query?: never;
18416
+ header?: never;
18417
+ path: {
18418
+ /** @description Team identifier */
18419
+ team_id: string;
18420
+ /** @description Project identifier (URL-encoded) */
18421
+ project_id: string;
18422
+ /** @description Blueprint slug (URL-encoded) */
18423
+ slug: string;
18424
+ };
18425
+ cookie?: never;
18426
+ };
18427
+ requestBody?: never;
18428
+ responses: {
18429
+ /** @description Lock history retrieved successfully */
18430
+ 200: {
18431
+ headers: {
18432
+ [name: string]: unknown;
18433
+ };
18434
+ content: {
18435
+ "application/json": components["schemas"]["ResourceLockHistoryResponse"];
18436
+ };
18437
+ };
18438
+ /** @description Bad request: a malformed path parameter */
18439
+ 400: {
18440
+ headers: {
18441
+ [name: string]: unknown;
18442
+ };
18443
+ content: {
18444
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18445
+ };
18446
+ };
18447
+ /** @description Unauthorized */
18448
+ 401: {
18449
+ headers: {
18450
+ [name: string]: unknown;
18451
+ };
18452
+ content: {
18453
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18454
+ };
18455
+ };
18456
+ /** @description Forbidden: not a member of the team */
18457
+ 403: {
18458
+ headers: {
18459
+ [name: string]: unknown;
18460
+ };
18461
+ content: {
18462
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18463
+ };
18464
+ };
18465
+ /** @description Blueprint not found */
18466
+ 404: {
18467
+ headers: {
18468
+ [name: string]: unknown;
18469
+ };
18470
+ content: {
18471
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18472
+ };
18473
+ };
18474
+ /** @description Internal server error */
18475
+ 500: {
18476
+ headers: {
18477
+ [name: string]: unknown;
18478
+ };
18479
+ content: {
18480
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18481
+ };
18482
+ };
18483
+ };
18484
+ };
18485
+ listBlueprintVersions: {
18486
+ parameters: {
18487
+ query?: never;
18488
+ header?: never;
18489
+ path: {
18490
+ /** @description Team identifier */
18491
+ team_id: string;
18492
+ /** @description UUID of the project */
18493
+ project_id: string;
18494
+ /** @description Blueprint slug */
18495
+ slug: string;
18496
+ };
18497
+ cookie?: never;
18498
+ };
18499
+ requestBody?: never;
18500
+ responses: {
18501
+ /** @description Blueprint versions retrieved successfully */
18502
+ 200: {
18503
+ headers: {
18504
+ [name: string]: unknown;
18505
+ };
18506
+ content: {
18507
+ "application/json": components["schemas"]["BlueprintVersionListResponse"];
18508
+ };
18509
+ };
18510
+ /** @description Unauthorized */
18511
+ 401: {
18512
+ headers: {
18513
+ [name: string]: unknown;
18514
+ };
18515
+ content: {
18516
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18517
+ };
18518
+ };
18519
+ /** @description Forbidden (not a team member) */
18520
+ 403: {
18521
+ headers: {
18522
+ [name: string]: unknown;
18523
+ };
18524
+ content: {
18525
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18526
+ };
18527
+ };
18528
+ /** @description Blueprint not found */
18529
+ 404: {
18530
+ headers: {
18531
+ [name: string]: unknown;
18532
+ };
18533
+ content: {
18534
+ "application/problem+json": components["schemas"]["ErrorResponse"];
18535
+ };
18536
+ };
18537
+ };
18538
+ };
18539
+ getBlueprintVersion: {
18540
+ parameters: {
18541
+ query?: never;
18542
+ header?: never;
18543
+ path: {
18544
+ /** @description Team identifier */
18545
+ team_id: string;
18546
+ /** @description UUID of the project */
18547
+ project_id: string;
18548
+ /** @description Blueprint slug */
18549
+ slug: string;
18550
+ /** @description Version number */
18551
+ version_number: number;
18552
+ };
18553
+ cookie?: never;
18554
+ };
18555
+ requestBody?: never;
18556
+ responses: {
18557
+ /** @description Blueprint version retrieved successfully */
18558
+ 200: {
18559
+ headers: {
18560
+ [name: string]: unknown;
18561
+ };
18562
+ content: {
18563
+ "application/json": components["schemas"]["ContentVersion"];
17850
18564
  };
17851
18565
  };
17852
18566
  /** @description Invalid version_number */
@@ -17955,6 +18669,8 @@ export interface operations {
17955
18669
  listPrompts: {
17956
18670
  parameters: {
17957
18671
  query?: {
18672
+ /** @description Filter by lock state (epic #1285): `true` returns only locked resources, `false` only unlocked ones. Omit for no lock filtering. Returns 400 for a value that is not a boolean. */
18673
+ locked?: boolean;
17958
18674
  /** @description Filter to resources currently flagged stale by the team's freshness rules (epic #726). Omit for no freshness filtering. Returns 400 for any other value — a silently ignored filter would return the full list, which looks like a legitimate answer. */
17959
18675
  freshness?: "stale";
17960
18676
  /** @description Page number for pagination */
@@ -18308,6 +19024,238 @@ export interface operations {
18308
19024
  };
18309
19025
  };
18310
19026
  };
19027
+ lockPrompt: {
19028
+ parameters: {
19029
+ query?: never;
19030
+ header?: never;
19031
+ path: {
19032
+ /** @description Team identifier */
19033
+ team_id: string;
19034
+ /** @description Prompt slug identifier */
19035
+ slug: string;
19036
+ };
19037
+ cookie?: never;
19038
+ };
19039
+ requestBody: {
19040
+ content: {
19041
+ "application/json": components["schemas"]["LockResourceRequest"];
19042
+ };
19043
+ };
19044
+ responses: {
19045
+ /** @description Prompt locked; the updated prompt is returned */
19046
+ 200: {
19047
+ headers: {
19048
+ [name: string]: unknown;
19049
+ };
19050
+ content: {
19051
+ "application/json": components["schemas"]["Prompt"];
19052
+ };
19053
+ };
19054
+ /** @description Bad request: a malformed path parameter or request body, or a missing, blank or too long comment */
19055
+ 400: {
19056
+ headers: {
19057
+ [name: string]: unknown;
19058
+ };
19059
+ content: {
19060
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19061
+ };
19062
+ };
19063
+ /** @description Unauthorized */
19064
+ 401: {
19065
+ headers: {
19066
+ [name: string]: unknown;
19067
+ };
19068
+ content: {
19069
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19070
+ };
19071
+ };
19072
+ /** @description Forbidden: not a member of the team */
19073
+ 403: {
19074
+ headers: {
19075
+ [name: string]: unknown;
19076
+ };
19077
+ content: {
19078
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19079
+ };
19080
+ };
19081
+ /** @description Prompt not found */
19082
+ 404: {
19083
+ headers: {
19084
+ [name: string]: unknown;
19085
+ };
19086
+ content: {
19087
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19088
+ };
19089
+ };
19090
+ /** @description The prompt is already locked (code `RESOURCE_LOCKED`) */
19091
+ 409: {
19092
+ headers: {
19093
+ [name: string]: unknown;
19094
+ };
19095
+ content: {
19096
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19097
+ };
19098
+ };
19099
+ /** @description Internal server error */
19100
+ 500: {
19101
+ headers: {
19102
+ [name: string]: unknown;
19103
+ };
19104
+ content: {
19105
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19106
+ };
19107
+ };
19108
+ };
19109
+ };
19110
+ unlockPrompt: {
19111
+ parameters: {
19112
+ query?: never;
19113
+ header?: never;
19114
+ path: {
19115
+ /** @description Team identifier */
19116
+ team_id: string;
19117
+ /** @description Prompt slug identifier */
19118
+ slug: string;
19119
+ };
19120
+ cookie?: never;
19121
+ };
19122
+ requestBody?: never;
19123
+ responses: {
19124
+ /** @description Prompt unlocked; the updated prompt is returned */
19125
+ 200: {
19126
+ headers: {
19127
+ [name: string]: unknown;
19128
+ };
19129
+ content: {
19130
+ "application/json": components["schemas"]["Prompt"];
19131
+ };
19132
+ };
19133
+ /** @description Bad request: a malformed path parameter */
19134
+ 400: {
19135
+ headers: {
19136
+ [name: string]: unknown;
19137
+ };
19138
+ content: {
19139
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19140
+ };
19141
+ };
19142
+ /** @description Unauthorized */
19143
+ 401: {
19144
+ headers: {
19145
+ [name: string]: unknown;
19146
+ };
19147
+ content: {
19148
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19149
+ };
19150
+ };
19151
+ /** @description Forbidden: not a member of the team, or the lock was placed by someone else and the caller's role does not hold `resource.unlock.any` */
19152
+ 403: {
19153
+ headers: {
19154
+ [name: string]: unknown;
19155
+ };
19156
+ content: {
19157
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19158
+ };
19159
+ };
19160
+ /** @description Prompt not found */
19161
+ 404: {
19162
+ headers: {
19163
+ [name: string]: unknown;
19164
+ };
19165
+ content: {
19166
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19167
+ };
19168
+ };
19169
+ /** @description The prompt is not locked (code `RESOURCE_NOT_LOCKED`) */
19170
+ 409: {
19171
+ headers: {
19172
+ [name: string]: unknown;
19173
+ };
19174
+ content: {
19175
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19176
+ };
19177
+ };
19178
+ /** @description Internal server error */
19179
+ 500: {
19180
+ headers: {
19181
+ [name: string]: unknown;
19182
+ };
19183
+ content: {
19184
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19185
+ };
19186
+ };
19187
+ };
19188
+ };
19189
+ getPromptLockHistory: {
19190
+ parameters: {
19191
+ query?: never;
19192
+ header?: never;
19193
+ path: {
19194
+ /** @description Team identifier */
19195
+ team_id: string;
19196
+ /** @description Prompt slug identifier */
19197
+ slug: string;
19198
+ };
19199
+ cookie?: never;
19200
+ };
19201
+ requestBody?: never;
19202
+ responses: {
19203
+ /** @description Lock history retrieved successfully */
19204
+ 200: {
19205
+ headers: {
19206
+ [name: string]: unknown;
19207
+ };
19208
+ content: {
19209
+ "application/json": components["schemas"]["ResourceLockHistoryResponse"];
19210
+ };
19211
+ };
19212
+ /** @description Bad request: a malformed path parameter */
19213
+ 400: {
19214
+ headers: {
19215
+ [name: string]: unknown;
19216
+ };
19217
+ content: {
19218
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19219
+ };
19220
+ };
19221
+ /** @description Unauthorized */
19222
+ 401: {
19223
+ headers: {
19224
+ [name: string]: unknown;
19225
+ };
19226
+ content: {
19227
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19228
+ };
19229
+ };
19230
+ /** @description Forbidden: not a member of the team */
19231
+ 403: {
19232
+ headers: {
19233
+ [name: string]: unknown;
19234
+ };
19235
+ content: {
19236
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19237
+ };
19238
+ };
19239
+ /** @description Prompt not found */
19240
+ 404: {
19241
+ headers: {
19242
+ [name: string]: unknown;
19243
+ };
19244
+ content: {
19245
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19246
+ };
19247
+ };
19248
+ /** @description Internal server error */
19249
+ 500: {
19250
+ headers: {
19251
+ [name: string]: unknown;
19252
+ };
19253
+ content: {
19254
+ "application/problem+json": components["schemas"]["ErrorResponse"];
19255
+ };
19256
+ };
19257
+ };
19258
+ };
18311
19259
  getPromptPlaceholders: {
18312
19260
  parameters: {
18313
19261
  query?: never;