@meetkai/mka1 0.54.50 → 0.54.51

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 (198) hide show
  1. package/README.md +313 -304
  2. package/bin/mcp-server.js +777 -390
  3. package/bin/mcp-server.js.map +19 -11
  4. package/dist/commonjs/funcs/reposTagsDelete.d.ts +29 -0
  5. package/dist/commonjs/funcs/reposTagsDelete.d.ts.map +1 -0
  6. package/dist/commonjs/funcs/reposTagsDelete.js +155 -0
  7. package/dist/commonjs/funcs/reposTagsDelete.js.map +1 -0
  8. package/dist/commonjs/funcs/reposTagsList.d.ts +35 -0
  9. package/dist/commonjs/funcs/reposTagsList.d.ts.map +1 -0
  10. package/dist/commonjs/funcs/reposTagsList.js +156 -0
  11. package/dist/commonjs/funcs/reposTagsList.js.map +1 -0
  12. package/dist/commonjs/funcs/reposUpdate.d.ts +7 -4
  13. package/dist/commonjs/funcs/reposUpdate.d.ts.map +1 -1
  14. package/dist/commonjs/funcs/reposUpdate.js +7 -4
  15. package/dist/commonjs/funcs/reposUpdate.js.map +1 -1
  16. package/dist/commonjs/lib/config.d.ts +3 -3
  17. package/dist/commonjs/lib/config.js +3 -3
  18. package/dist/commonjs/mcp-server/mcp-server.js +1 -1
  19. package/dist/commonjs/mcp-server/server.d.ts.map +1 -1
  20. package/dist/commonjs/mcp-server/server.js +5 -1
  21. package/dist/commonjs/mcp-server/server.js.map +1 -1
  22. package/dist/commonjs/mcp-server/tools/reposTagsDelete.d.ts +8 -0
  23. package/dist/commonjs/mcp-server/tools/reposTagsDelete.d.ts.map +1 -0
  24. package/dist/commonjs/mcp-server/tools/reposTagsDelete.js +73 -0
  25. package/dist/commonjs/mcp-server/tools/reposTagsDelete.js.map +1 -0
  26. package/dist/commonjs/mcp-server/tools/reposTagsList.d.ts +8 -0
  27. package/dist/commonjs/mcp-server/tools/reposTagsList.d.ts.map +1 -0
  28. package/dist/commonjs/mcp-server/tools/reposTagsList.js +79 -0
  29. package/dist/commonjs/mcp-server/tools/reposTagsList.js.map +1 -0
  30. package/dist/commonjs/mcp-server/tools/reposUpdate.d.ts.map +1 -1
  31. package/dist/commonjs/mcp-server/tools/reposUpdate.js +7 -4
  32. package/dist/commonjs/mcp-server/tools/reposUpdate.js.map +1 -1
  33. package/dist/commonjs/models/components/index.d.ts +2 -0
  34. package/dist/commonjs/models/components/index.d.ts.map +1 -1
  35. package/dist/commonjs/models/components/index.js +2 -0
  36. package/dist/commonjs/models/components/index.js.map +1 -1
  37. package/dist/commonjs/models/components/repo.d.ts +11 -0
  38. package/dist/commonjs/models/components/repo.d.ts.map +1 -1
  39. package/dist/commonjs/models/components/repo.js +2 -0
  40. package/dist/commonjs/models/components/repo.js.map +1 -1
  41. package/dist/commonjs/models/components/repotag.d.ts +42 -0
  42. package/dist/commonjs/models/components/repotag.d.ts.map +1 -0
  43. package/dist/commonjs/models/components/repotag.js +77 -0
  44. package/dist/commonjs/models/components/repotag.js.map +1 -0
  45. package/dist/commonjs/models/components/repotaglist.d.ts +29 -0
  46. package/dist/commonjs/models/components/repotaglist.d.ts.map +1 -0
  47. package/dist/commonjs/models/components/repotaglist.js +61 -0
  48. package/dist/commonjs/models/components/repotaglist.js.map +1 -0
  49. package/dist/commonjs/models/operations/deleterepotag.d.ts +35 -0
  50. package/dist/commonjs/models/operations/deleterepotag.d.ts.map +1 -0
  51. package/dist/commonjs/models/operations/deleterepotag.js +73 -0
  52. package/dist/commonjs/models/operations/deleterepotag.js.map +1 -0
  53. package/dist/commonjs/models/operations/index.d.ts +2 -0
  54. package/dist/commonjs/models/operations/index.d.ts.map +1 -1
  55. package/dist/commonjs/models/operations/index.js +2 -0
  56. package/dist/commonjs/models/operations/index.js.map +1 -1
  57. package/dist/commonjs/models/operations/listrepotags.d.ts +30 -0
  58. package/dist/commonjs/models/operations/listrepotags.d.ts.map +1 -0
  59. package/dist/commonjs/models/operations/listrepotags.js +71 -0
  60. package/dist/commonjs/models/operations/listrepotags.js.map +1 -0
  61. package/dist/commonjs/react-query/index.d.ts +2 -0
  62. package/dist/commonjs/react-query/index.d.ts.map +1 -1
  63. package/dist/commonjs/react-query/index.js +2 -0
  64. package/dist/commonjs/react-query/index.js.map +1 -1
  65. package/dist/commonjs/react-query/reposTagsDelete.d.ts +38 -0
  66. package/dist/commonjs/react-query/reposTagsDelete.d.ts.map +1 -0
  67. package/dist/commonjs/react-query/reposTagsDelete.js +56 -0
  68. package/dist/commonjs/react-query/reposTagsDelete.js.map +1 -0
  69. package/dist/commonjs/react-query/reposTagsList.core.d.ts +15 -0
  70. package/dist/commonjs/react-query/reposTagsList.core.d.ts.map +1 -0
  71. package/dist/commonjs/react-query/reposTagsList.core.js +36 -0
  72. package/dist/commonjs/react-query/reposTagsList.core.js.map +1 -0
  73. package/dist/commonjs/react-query/reposTagsList.d.ts +69 -0
  74. package/dist/commonjs/react-query/reposTagsList.d.ts.map +1 -0
  75. package/dist/commonjs/react-query/reposTagsList.js +88 -0
  76. package/dist/commonjs/react-query/reposTagsList.js.map +1 -0
  77. package/dist/commonjs/react-query/reposUpdate.d.ts +7 -4
  78. package/dist/commonjs/react-query/reposUpdate.d.ts.map +1 -1
  79. package/dist/commonjs/react-query/reposUpdate.js +7 -4
  80. package/dist/commonjs/react-query/reposUpdate.js.map +1 -1
  81. package/dist/commonjs/sdk/repos.d.ts +10 -4
  82. package/dist/commonjs/sdk/repos.d.ts.map +1 -1
  83. package/dist/commonjs/sdk/repos.js +11 -4
  84. package/dist/commonjs/sdk/repos.js.map +1 -1
  85. package/dist/commonjs/sdk/tags.d.ts +43 -0
  86. package/dist/commonjs/sdk/tags.d.ts.map +1 -0
  87. package/dist/commonjs/sdk/tags.js +55 -0
  88. package/dist/commonjs/sdk/tags.js.map +1 -0
  89. package/dist/esm/funcs/reposTagsDelete.d.ts +29 -0
  90. package/dist/esm/funcs/reposTagsDelete.d.ts.map +1 -0
  91. package/dist/esm/funcs/reposTagsDelete.js +119 -0
  92. package/dist/esm/funcs/reposTagsDelete.js.map +1 -0
  93. package/dist/esm/funcs/reposTagsList.d.ts +35 -0
  94. package/dist/esm/funcs/reposTagsList.d.ts.map +1 -0
  95. package/dist/esm/funcs/reposTagsList.js +120 -0
  96. package/dist/esm/funcs/reposTagsList.js.map +1 -0
  97. package/dist/esm/funcs/reposUpdate.d.ts +7 -4
  98. package/dist/esm/funcs/reposUpdate.d.ts.map +1 -1
  99. package/dist/esm/funcs/reposUpdate.js +7 -4
  100. package/dist/esm/funcs/reposUpdate.js.map +1 -1
  101. package/dist/esm/lib/config.d.ts +3 -3
  102. package/dist/esm/lib/config.js +3 -3
  103. package/dist/esm/mcp-server/mcp-server.js +1 -1
  104. package/dist/esm/mcp-server/server.d.ts.map +1 -1
  105. package/dist/esm/mcp-server/server.js +5 -1
  106. package/dist/esm/mcp-server/server.js.map +1 -1
  107. package/dist/esm/mcp-server/tools/reposTagsDelete.d.ts +8 -0
  108. package/dist/esm/mcp-server/tools/reposTagsDelete.d.ts.map +1 -0
  109. package/dist/esm/mcp-server/tools/reposTagsDelete.js +37 -0
  110. package/dist/esm/mcp-server/tools/reposTagsDelete.js.map +1 -0
  111. package/dist/esm/mcp-server/tools/reposTagsList.d.ts +8 -0
  112. package/dist/esm/mcp-server/tools/reposTagsList.d.ts.map +1 -0
  113. package/dist/esm/mcp-server/tools/reposTagsList.js +43 -0
  114. package/dist/esm/mcp-server/tools/reposTagsList.js.map +1 -0
  115. package/dist/esm/mcp-server/tools/reposUpdate.d.ts.map +1 -1
  116. package/dist/esm/mcp-server/tools/reposUpdate.js +7 -4
  117. package/dist/esm/mcp-server/tools/reposUpdate.js.map +1 -1
  118. package/dist/esm/models/components/index.d.ts +2 -0
  119. package/dist/esm/models/components/index.d.ts.map +1 -1
  120. package/dist/esm/models/components/index.js +2 -0
  121. package/dist/esm/models/components/index.js.map +1 -1
  122. package/dist/esm/models/components/repo.d.ts +11 -0
  123. package/dist/esm/models/components/repo.d.ts.map +1 -1
  124. package/dist/esm/models/components/repo.js +2 -0
  125. package/dist/esm/models/components/repo.js.map +1 -1
  126. package/dist/esm/models/components/repotag.d.ts +42 -0
  127. package/dist/esm/models/components/repotag.d.ts.map +1 -0
  128. package/dist/esm/models/components/repotag.js +39 -0
  129. package/dist/esm/models/components/repotag.js.map +1 -0
  130. package/dist/esm/models/components/repotaglist.d.ts +29 -0
  131. package/dist/esm/models/components/repotaglist.d.ts.map +1 -0
  132. package/dist/esm/models/components/repotaglist.js +23 -0
  133. package/dist/esm/models/components/repotaglist.js.map +1 -0
  134. package/dist/esm/models/operations/deleterepotag.d.ts +35 -0
  135. package/dist/esm/models/operations/deleterepotag.d.ts.map +1 -0
  136. package/dist/esm/models/operations/deleterepotag.js +35 -0
  137. package/dist/esm/models/operations/deleterepotag.js.map +1 -0
  138. package/dist/esm/models/operations/index.d.ts +2 -0
  139. package/dist/esm/models/operations/index.d.ts.map +1 -1
  140. package/dist/esm/models/operations/index.js +2 -0
  141. package/dist/esm/models/operations/index.js.map +1 -1
  142. package/dist/esm/models/operations/listrepotags.d.ts +30 -0
  143. package/dist/esm/models/operations/listrepotags.d.ts.map +1 -0
  144. package/dist/esm/models/operations/listrepotags.js +33 -0
  145. package/dist/esm/models/operations/listrepotags.js.map +1 -0
  146. package/dist/esm/react-query/index.d.ts +2 -0
  147. package/dist/esm/react-query/index.d.ts.map +1 -1
  148. package/dist/esm/react-query/index.js +2 -0
  149. package/dist/esm/react-query/index.js.map +1 -1
  150. package/dist/esm/react-query/reposTagsDelete.d.ts +38 -0
  151. package/dist/esm/react-query/reposTagsDelete.d.ts.map +1 -0
  152. package/dist/esm/react-query/reposTagsDelete.js +51 -0
  153. package/dist/esm/react-query/reposTagsDelete.js.map +1 -0
  154. package/dist/esm/react-query/reposTagsList.core.d.ts +15 -0
  155. package/dist/esm/react-query/reposTagsList.core.d.ts.map +1 -0
  156. package/dist/esm/react-query/reposTagsList.core.js +31 -0
  157. package/dist/esm/react-query/reposTagsList.core.js.map +1 -0
  158. package/dist/esm/react-query/reposTagsList.d.ts +69 -0
  159. package/dist/esm/react-query/reposTagsList.d.ts.map +1 -0
  160. package/dist/esm/react-query/reposTagsList.js +78 -0
  161. package/dist/esm/react-query/reposTagsList.js.map +1 -0
  162. package/dist/esm/react-query/reposUpdate.d.ts +7 -4
  163. package/dist/esm/react-query/reposUpdate.d.ts.map +1 -1
  164. package/dist/esm/react-query/reposUpdate.js +7 -4
  165. package/dist/esm/react-query/reposUpdate.js.map +1 -1
  166. package/dist/esm/sdk/repos.d.ts +10 -4
  167. package/dist/esm/sdk/repos.d.ts.map +1 -1
  168. package/dist/esm/sdk/repos.js +11 -4
  169. package/dist/esm/sdk/repos.js.map +1 -1
  170. package/dist/esm/sdk/tags.d.ts +43 -0
  171. package/dist/esm/sdk/tags.d.ts.map +1 -0
  172. package/dist/esm/sdk/tags.js +51 -0
  173. package/dist/esm/sdk/tags.js.map +1 -0
  174. package/jsr.json +1 -1
  175. package/package.json +1 -1
  176. package/src/funcs/reposTagsDelete.ts +212 -0
  177. package/src/funcs/reposTagsList.ts +213 -0
  178. package/src/funcs/reposUpdate.ts +7 -4
  179. package/src/lib/config.ts +3 -3
  180. package/src/mcp-server/mcp-server.ts +1 -1
  181. package/src/mcp-server/server.ts +5 -1
  182. package/src/mcp-server/tools/reposTagsDelete.ts +45 -0
  183. package/src/mcp-server/tools/reposTagsList.ts +52 -0
  184. package/src/mcp-server/tools/reposUpdate.ts +7 -4
  185. package/src/models/components/index.ts +2 -0
  186. package/src/models/components/repo.ts +13 -0
  187. package/src/models/components/repotag.ts +90 -0
  188. package/src/models/components/repotaglist.ts +66 -0
  189. package/src/models/operations/deleterepotag.ts +84 -0
  190. package/src/models/operations/index.ts +2 -0
  191. package/src/models/operations/listrepotags.ts +77 -0
  192. package/src/react-query/index.ts +2 -0
  193. package/src/react-query/reposTagsDelete.ts +119 -0
  194. package/src/react-query/reposTagsList.core.ts +75 -0
  195. package/src/react-query/reposTagsList.ts +167 -0
  196. package/src/react-query/reposUpdate.ts +7 -4
  197. package/src/sdk/repos.ts +13 -4
  198. package/src/sdk/tags.ts +69 -0
@@ -0,0 +1,212 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import * as z from "zod/v3";
6
+ import { SDKCore } from "../core.js";
7
+ import { encodeSimple } from "../lib/encodings.js";
8
+ import { matchStatusCode } from "../lib/http.js";
9
+ import * as M from "../lib/matchers.js";
10
+ import { compactMap } from "../lib/primitives.js";
11
+ import { safeParse } from "../lib/schemas.js";
12
+ import { RequestOptions } from "../lib/sdks.js";
13
+ import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js";
14
+ import { pathToFunc } from "../lib/url.js";
15
+ import {
16
+ ConnectionError,
17
+ InvalidRequestError,
18
+ RequestAbortedError,
19
+ RequestTimeoutError,
20
+ UnexpectedClientError,
21
+ } from "../models/errors/httpclienterrors.js";
22
+ import * as errors from "../models/errors/index.js";
23
+ import { ResponseValidationError } from "../models/errors/responsevalidationerror.js";
24
+ import { SDKError } from "../models/errors/sdkerror.js";
25
+ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
26
+ import * as operations from "../models/operations/index.js";
27
+ import { APICall, APIPromise } from "../types/async.js";
28
+ import { Result } from "../types/fp.js";
29
+
30
+ /**
31
+ * Delete an image tag
32
+ *
33
+ * @remarks
34
+ * Removes one tag; org owner/admin only (`write:repos` for a key). The
35
+ * same untag as the registry's `DELETE /v2/{org}/{name}/manifests/{tag}`:
36
+ * the name goes and the image stays, reachable by digest and by any
37
+ * other tag that names it.
38
+ *
39
+ * What makes a repository convertible afterwards is the kind switch
40
+ * itself: `PATCH` to another `kind` first collects every image no tag
41
+ * reaches (a multi-arch index's per-platform images included) and is
42
+ * refused with `409 kind_has_content` only for images a tag still
43
+ * names. So delete the tags the listing shows, then switch.
44
+ *
45
+ * If set, this operation will use {@link Security.bearerAuth} from the global security.
46
+ */
47
+ export function reposTagsDelete(
48
+ client: SDKCore,
49
+ request: operations.DeleteRepoTagRequest,
50
+ options?: RequestOptions,
51
+ ): APIPromise<
52
+ Result<
53
+ void,
54
+ | errors.RepoError
55
+ | SDKError
56
+ | ResponseValidationError
57
+ | ConnectionError
58
+ | RequestAbortedError
59
+ | RequestTimeoutError
60
+ | InvalidRequestError
61
+ | UnexpectedClientError
62
+ | SDKValidationError
63
+ >
64
+ > {
65
+ return new APIPromise($do(
66
+ client,
67
+ request,
68
+ options,
69
+ ));
70
+ }
71
+
72
+ async function $do(
73
+ client: SDKCore,
74
+ request: operations.DeleteRepoTagRequest,
75
+ options?: RequestOptions,
76
+ ): Promise<
77
+ [
78
+ Result<
79
+ void,
80
+ | errors.RepoError
81
+ | SDKError
82
+ | ResponseValidationError
83
+ | ConnectionError
84
+ | RequestAbortedError
85
+ | RequestTimeoutError
86
+ | InvalidRequestError
87
+ | UnexpectedClientError
88
+ | SDKValidationError
89
+ >,
90
+ APICall,
91
+ ]
92
+ > {
93
+ const parsed = safeParse(
94
+ request,
95
+ (value) => operations.DeleteRepoTagRequest$outboundSchema.parse(value),
96
+ "Input validation failed",
97
+ );
98
+ if (!parsed.ok) {
99
+ return [parsed, { status: "invalid" }];
100
+ }
101
+ const payload = parsed.value;
102
+ const body = null;
103
+
104
+ const pathParams = {
105
+ name: encodeSimple("name", payload.name, {
106
+ explode: false,
107
+ charEncoding: "percent",
108
+ }),
109
+ org: encodeSimple("org", payload.org, {
110
+ explode: false,
111
+ charEncoding: "percent",
112
+ }),
113
+ tag: encodeSimple("tag", payload.tag, {
114
+ explode: false,
115
+ charEncoding: "percent",
116
+ }),
117
+ };
118
+ const path = pathToFunc("/api/v1/repos/{org}/{name}/tags/{tag}")(pathParams);
119
+
120
+ const headers = new Headers(compactMap({
121
+ Accept: "application/json",
122
+ "X-On-Behalf-Of": encodeSimple(
123
+ "X-On-Behalf-Of",
124
+ payload["X-On-Behalf-Of"],
125
+ { explode: false, charEncoding: "none" },
126
+ ),
127
+ }));
128
+
129
+ const secConfig = await extractSecurity(client._options.bearerAuth);
130
+ const securityInput = secConfig == null ? {} : { bearerAuth: secConfig };
131
+ const requestSecurity = resolveGlobalSecurity(securityInput, [0]);
132
+
133
+ const context = {
134
+ options: client._options,
135
+ baseURL: options?.serverURL ?? client._baseURL ?? "",
136
+ operationID: "deleteRepoTag",
137
+ oAuth2Scopes: null,
138
+
139
+ resolvedSecurity: requestSecurity,
140
+
141
+ securitySource: client._options.bearerAuth,
142
+ retryConfig: options?.retries
143
+ || client._options.retryConfig
144
+ || {
145
+ strategy: "backoff",
146
+ backoff: {
147
+ initialInterval: 500,
148
+ maxInterval: 5000,
149
+ exponent: 1.5,
150
+ maxElapsedTime: 15000,
151
+ },
152
+ retryConnectionErrors: true,
153
+ }
154
+ || { strategy: "none" },
155
+ retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"],
156
+ };
157
+
158
+ const requestRes = client._createRequest(context, {
159
+ security: requestSecurity,
160
+ method: "DELETE",
161
+ baseURL: options?.serverURL,
162
+ path: path,
163
+ headers: headers,
164
+ body: body,
165
+ userAgent: client._options.userAgent,
166
+ timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1,
167
+ }, options);
168
+ if (!requestRes.ok) {
169
+ return [requestRes, { status: "invalid" }];
170
+ }
171
+ const req = requestRes.value;
172
+
173
+ const doResult = await client._do(req, {
174
+ context,
175
+ isErrorStatusCode: (statusCode: number) =>
176
+ matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]),
177
+ retryConfig: context.retryConfig,
178
+ retryCodes: context.retryCodes,
179
+ });
180
+ if (!doResult.ok) {
181
+ return [doResult, { status: "request-error", request: req }];
182
+ }
183
+ const response = doResult.value;
184
+
185
+ const responseFields = {
186
+ HttpMeta: { Response: response, Request: req },
187
+ };
188
+
189
+ const [result] = await M.match<
190
+ void,
191
+ | errors.RepoError
192
+ | SDKError
193
+ | ResponseValidationError
194
+ | ConnectionError
195
+ | RequestAbortedError
196
+ | RequestTimeoutError
197
+ | InvalidRequestError
198
+ | UnexpectedClientError
199
+ | SDKValidationError
200
+ >(
201
+ M.nil(204, z.void()),
202
+ M.jsonErr([401, 403, 404], errors.RepoError$inboundSchema),
203
+ M.jsonErr(500, errors.RepoError$inboundSchema),
204
+ M.fail("4XX"),
205
+ M.fail("5XX"),
206
+ )(response, req, { extraFields: responseFields });
207
+ if (!result.ok) {
208
+ return [result, { status: "complete", request: req, response }];
209
+ }
210
+
211
+ return [result, { status: "complete", request: req, response }];
212
+ }
@@ -0,0 +1,213 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { SDKCore } from "../core.js";
6
+ import { encodeSimple } from "../lib/encodings.js";
7
+ import { matchStatusCode } from "../lib/http.js";
8
+ import * as M from "../lib/matchers.js";
9
+ import { compactMap } from "../lib/primitives.js";
10
+ import { safeParse } from "../lib/schemas.js";
11
+ import { RequestOptions } from "../lib/sdks.js";
12
+ import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js";
13
+ import { pathToFunc } from "../lib/url.js";
14
+ import * as components from "../models/components/index.js";
15
+ import {
16
+ ConnectionError,
17
+ InvalidRequestError,
18
+ RequestAbortedError,
19
+ RequestTimeoutError,
20
+ UnexpectedClientError,
21
+ } from "../models/errors/httpclienterrors.js";
22
+ import * as errors from "../models/errors/index.js";
23
+ import { ResponseValidationError } from "../models/errors/responsevalidationerror.js";
24
+ import { SDKError } from "../models/errors/sdkerror.js";
25
+ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
26
+ import * as operations from "../models/operations/index.js";
27
+ import { APICall, APIPromise } from "../types/async.js";
28
+ import { Result } from "../types/fp.js";
29
+
30
+ /**
31
+ * List an image repository's tags
32
+ *
33
+ * @remarks
34
+ * Lists the container-image tags a repository holds, newest-moved first,
35
+ * each with the manifest it points at, the manifest's media type, the
36
+ * image's declared size and when the tag last moved. The same access
37
+ * check as reading the repository (org owner/admin; `read:repos` for a
38
+ * key).
39
+ *
40
+ * It is a fact about what the repository HOLDS, not about its `kind`:
41
+ * a `model` lists `[]`, and a legacy `kind: null` repository that still
42
+ * holds images lists them — those are the tags a `409 kind_has_content`
43
+ * on PATCH is about, and deleting them through this API is what makes
44
+ * that PATCH go through.
45
+ *
46
+ * One page, of at most 1000 tags; `truncated` says whether the
47
+ * repository holds more. The registry's own `GET /v2/{org}/{name}/tags/list`
48
+ * is the paginated, names-only listing every OCI client speaks.
49
+ *
50
+ * If set, this operation will use {@link Security.bearerAuth} from the global security.
51
+ */
52
+ export function reposTagsList(
53
+ client: SDKCore,
54
+ request: operations.ListRepoTagsRequest,
55
+ options?: RequestOptions,
56
+ ): APIPromise<
57
+ Result<
58
+ components.RepoTagList,
59
+ | errors.RepoError
60
+ | SDKError
61
+ | ResponseValidationError
62
+ | ConnectionError
63
+ | RequestAbortedError
64
+ | RequestTimeoutError
65
+ | InvalidRequestError
66
+ | UnexpectedClientError
67
+ | SDKValidationError
68
+ >
69
+ > {
70
+ return new APIPromise($do(
71
+ client,
72
+ request,
73
+ options,
74
+ ));
75
+ }
76
+
77
+ async function $do(
78
+ client: SDKCore,
79
+ request: operations.ListRepoTagsRequest,
80
+ options?: RequestOptions,
81
+ ): Promise<
82
+ [
83
+ Result<
84
+ components.RepoTagList,
85
+ | errors.RepoError
86
+ | SDKError
87
+ | ResponseValidationError
88
+ | ConnectionError
89
+ | RequestAbortedError
90
+ | RequestTimeoutError
91
+ | InvalidRequestError
92
+ | UnexpectedClientError
93
+ | SDKValidationError
94
+ >,
95
+ APICall,
96
+ ]
97
+ > {
98
+ const parsed = safeParse(
99
+ request,
100
+ (value) => operations.ListRepoTagsRequest$outboundSchema.parse(value),
101
+ "Input validation failed",
102
+ );
103
+ if (!parsed.ok) {
104
+ return [parsed, { status: "invalid" }];
105
+ }
106
+ const payload = parsed.value;
107
+ const body = null;
108
+
109
+ const pathParams = {
110
+ name: encodeSimple("name", payload.name, {
111
+ explode: false,
112
+ charEncoding: "percent",
113
+ }),
114
+ org: encodeSimple("org", payload.org, {
115
+ explode: false,
116
+ charEncoding: "percent",
117
+ }),
118
+ };
119
+ const path = pathToFunc("/api/v1/repos/{org}/{name}/tags")(pathParams);
120
+
121
+ const headers = new Headers(compactMap({
122
+ Accept: "application/json",
123
+ "X-On-Behalf-Of": encodeSimple(
124
+ "X-On-Behalf-Of",
125
+ payload["X-On-Behalf-Of"],
126
+ { explode: false, charEncoding: "none" },
127
+ ),
128
+ }));
129
+
130
+ const secConfig = await extractSecurity(client._options.bearerAuth);
131
+ const securityInput = secConfig == null ? {} : { bearerAuth: secConfig };
132
+ const requestSecurity = resolveGlobalSecurity(securityInput, [0]);
133
+
134
+ const context = {
135
+ options: client._options,
136
+ baseURL: options?.serverURL ?? client._baseURL ?? "",
137
+ operationID: "listRepoTags",
138
+ oAuth2Scopes: null,
139
+
140
+ resolvedSecurity: requestSecurity,
141
+
142
+ securitySource: client._options.bearerAuth,
143
+ retryConfig: options?.retries
144
+ || client._options.retryConfig
145
+ || {
146
+ strategy: "backoff",
147
+ backoff: {
148
+ initialInterval: 500,
149
+ maxInterval: 5000,
150
+ exponent: 1.5,
151
+ maxElapsedTime: 15000,
152
+ },
153
+ retryConnectionErrors: true,
154
+ }
155
+ || { strategy: "none" },
156
+ retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"],
157
+ };
158
+
159
+ const requestRes = client._createRequest(context, {
160
+ security: requestSecurity,
161
+ method: "GET",
162
+ baseURL: options?.serverURL,
163
+ path: path,
164
+ headers: headers,
165
+ body: body,
166
+ userAgent: client._options.userAgent,
167
+ timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1,
168
+ }, options);
169
+ if (!requestRes.ok) {
170
+ return [requestRes, { status: "invalid" }];
171
+ }
172
+ const req = requestRes.value;
173
+
174
+ const doResult = await client._do(req, {
175
+ context,
176
+ isErrorStatusCode: (statusCode: number) =>
177
+ matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]),
178
+ retryConfig: context.retryConfig,
179
+ retryCodes: context.retryCodes,
180
+ });
181
+ if (!doResult.ok) {
182
+ return [doResult, { status: "request-error", request: req }];
183
+ }
184
+ const response = doResult.value;
185
+
186
+ const responseFields = {
187
+ HttpMeta: { Response: response, Request: req },
188
+ };
189
+
190
+ const [result] = await M.match<
191
+ components.RepoTagList,
192
+ | errors.RepoError
193
+ | SDKError
194
+ | ResponseValidationError
195
+ | ConnectionError
196
+ | RequestAbortedError
197
+ | RequestTimeoutError
198
+ | InvalidRequestError
199
+ | UnexpectedClientError
200
+ | SDKValidationError
201
+ >(
202
+ M.json(200, components.RepoTagList$inboundSchema),
203
+ M.jsonErr([401, 403, 404], errors.RepoError$inboundSchema),
204
+ M.jsonErr(500, errors.RepoError$inboundSchema),
205
+ M.fail("4XX"),
206
+ M.fail("5XX"),
207
+ )(response, req, { extraFields: responseFields });
208
+ if (!result.ok) {
209
+ return [result, { status: "complete", request: req, response }];
210
+ }
211
+
212
+ return [result, { status: "complete", request: req, response }];
213
+ }
@@ -39,10 +39,13 @@ import { Result } from "../types/fp.js";
39
39
  * protocol planes never change it): it types a legacy `kind: null`
40
40
  * repository and corrects a wrong kind. `repo`, `model` and `dataset`
41
41
  * convert freely and any repository may become `image`; a repository
42
- * that still holds container-image content can be given no other kind
43
- * — leaving `image`, or typing a legacy `null` row as anything else, is
44
- * refused with `409 kind_has_content` (delete the tags through the
45
- * registry first). A kind is never un-set.
42
+ * whose container images are still named by a tag can be given no
43
+ * other kind — leaving `image`, or typing a legacy `null` row as
44
+ * anything else, is refused with `409 kind_has_content` (list and
45
+ * delete the tags through this API first). A switch away from `image`
46
+ * collects every image no tag reaches before it is judged, so an image
47
+ * only ever pushed by digest, or untagged through the registry, never
48
+ * blocks it. A kind is never un-set.
46
49
  *
47
50
  * If set, this operation will use {@link Security.bearerAuth} from the global security.
48
51
  */
package/src/lib/config.ts CHANGED
@@ -65,7 +65,7 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
65
65
  export const SDK_METADATA = {
66
66
  language: "typescript",
67
67
  openapiDocVersion: "1.1.0",
68
- sdkVersion: "0.54.50",
69
- genVersion: "2.938.0",
70
- userAgent: "speakeasy-sdk/typescript 0.54.50 2.938.0 1.1.0 @meetkai/mka1",
68
+ sdkVersion: "0.54.51",
69
+ genVersion: "2.941.0",
70
+ userAgent: "speakeasy-sdk/typescript 0.54.51 2.941.0 1.1.0 @meetkai/mka1",
71
71
  } as const;
@@ -19,7 +19,7 @@ const routes = buildRouteMap({
19
19
  export const app = buildApplication(routes, {
20
20
  name: "mcp",
21
21
  versionInfo: {
22
- currentVersion: "0.54.50",
22
+ currentVersion: "0.54.51",
23
23
  },
24
24
  });
25
25
 
@@ -394,6 +394,8 @@ import { tool$reposCreate } from "./tools/reposCreate.js";
394
394
  import { tool$reposDelete } from "./tools/reposDelete.js";
395
395
  import { tool$reposGet } from "./tools/reposGet.js";
396
396
  import { tool$reposList } from "./tools/reposList.js";
397
+ import { tool$reposTagsDelete } from "./tools/reposTagsDelete.js";
398
+ import { tool$reposTagsList } from "./tools/reposTagsList.js";
397
399
  import { tool$reposUpdate } from "./tools/reposUpdate.js";
398
400
  import { tool$sandboxCreate } from "./tools/sandboxCreate.js";
399
401
  import { tool$sandboxDownloadArchive } from "./tools/sandboxDownloadArchive.js";
@@ -468,7 +470,7 @@ export function createMCPServer(deps: {
468
470
  }) {
469
471
  const server = new McpServer({
470
472
  name: "SDK",
471
- version: "0.54.50",
473
+ version: "0.54.51",
472
474
  });
473
475
 
474
476
  const client = new SDKCore({
@@ -919,6 +921,8 @@ export function createMCPServer(deps: {
919
921
  tool(tool$authClusterInviteInfo);
920
922
  tool(tool$authClusterAcceptInvite);
921
923
  tool(tool$authApiKeyGetJwtFromKey);
924
+ tool(tool$reposTagsList);
925
+ tool(tool$reposTagsDelete);
922
926
  tool(tool$trackingExperimentsCreate);
923
927
  tool(tool$trackingExperimentsSearch);
924
928
  tool(tool$trackingExperimentsGet);
@@ -0,0 +1,45 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { reposTagsDelete } from "../../funcs/reposTagsDelete.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.DeleteRepoTagRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$reposTagsDelete: ToolDefinition<typeof args> = {
14
+ name: "repos-tags-delete",
15
+ description: `Delete an image tag
16
+
17
+ Removes one tag; org owner/admin only (\`write:repos\` for a key). The
18
+ same untag as the registry's \`DELETE /v2/{org}/{name}/manifests/{tag}\`:
19
+ the name goes and the image stays, reachable by digest and by any
20
+ other tag that names it.
21
+
22
+ What makes a repository convertible afterwards is the kind switch
23
+ itself: \`PATCH\` to another \`kind\` first collects every image no tag
24
+ reaches (a multi-arch index's per-platform images included) and is
25
+ refused with \`409 kind_has_content\` only for images a tag still
26
+ names. So delete the tags the listing shows, then switch.
27
+ `,
28
+ args,
29
+ tool: async (client, args, ctx) => {
30
+ const [result, apiCall] = await reposTagsDelete(
31
+ client,
32
+ args.request,
33
+ { fetchOptions: { signal: ctx.signal } },
34
+ ).$inspect();
35
+
36
+ if (!result.ok) {
37
+ return {
38
+ content: [{ type: "text", text: result.error.message }],
39
+ isError: true,
40
+ };
41
+ }
42
+
43
+ return formatResult(void 0, apiCall);
44
+ },
45
+ };
@@ -0,0 +1,52 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { reposTagsList } from "../../funcs/reposTagsList.js";
6
+ import * as operations from "../../models/operations/index.js";
7
+ import { formatResult, ToolDefinition } from "../tools.js";
8
+
9
+ const args = {
10
+ request: operations.ListRepoTagsRequest$inboundSchema,
11
+ };
12
+
13
+ export const tool$reposTagsList: ToolDefinition<typeof args> = {
14
+ name: "repos-tags-list",
15
+ description: `List an image repository's tags
16
+
17
+ Lists the container-image tags a repository holds, newest-moved first,
18
+ each with the manifest it points at, the manifest's media type, the
19
+ image's declared size and when the tag last moved. The same access
20
+ check as reading the repository (org owner/admin; \`read:repos\` for a
21
+ key).
22
+
23
+ It is a fact about what the repository HOLDS, not about its \`kind\`:
24
+ a \`model\` lists \`[]\`, and a legacy \`kind: null\` repository that still
25
+ holds images lists them — those are the tags a \`409 kind_has_content\`
26
+ on PATCH is about, and deleting them through this API is what makes
27
+ that PATCH go through.
28
+
29
+ One page, of at most 1000 tags; \`truncated\` says whether the
30
+ repository holds more. The registry's own \`GET /v2/{org}/{name}/tags/list\`
31
+ is the paginated, names-only listing every OCI client speaks.
32
+ `,
33
+ args,
34
+ tool: async (client, args, ctx) => {
35
+ const [result, apiCall] = await reposTagsList(
36
+ client,
37
+ args.request,
38
+ { fetchOptions: { signal: ctx.signal } },
39
+ ).$inspect();
40
+
41
+ if (!result.ok) {
42
+ return {
43
+ content: [{ type: "text", text: result.error.message }],
44
+ isError: true,
45
+ };
46
+ }
47
+
48
+ const value = result.value;
49
+
50
+ return formatResult(value, apiCall);
51
+ },
52
+ };
@@ -22,10 +22,13 @@ only. The repository id is stable, so a rename is a one-row DB update
22
22
  protocol planes never change it): it types a legacy \`kind: null\`
23
23
  repository and corrects a wrong kind. \`repo\`, \`model\` and \`dataset\`
24
24
  convert freely and any repository may become \`image\`; a repository
25
- that still holds container-image content can be given no other kind
26
- — leaving \`image\`, or typing a legacy \`null\` row as anything else, is
27
- refused with \`409 kind_has_content\` (delete the tags through the
28
- registry first). A kind is never un-set.
25
+ whose container images are still named by a tag can be given no
26
+ other kind — leaving \`image\`, or typing a legacy \`null\` row as
27
+ anything else, is refused with \`409 kind_has_content\` (list and
28
+ delete the tags through this API first). A switch away from \`image\`
29
+ collects every image no tag reaches before it is judged, so an image
30
+ only ever pushed by digest, or untagged through the registry, never
31
+ blocks it. A kind is never un-set.
29
32
  `,
30
33
  args,
31
34
  tool: async (client, args, ctx) => {
@@ -523,6 +523,8 @@ export * from "./reinforcementhyperparameters.js";
523
523
  export * from "./repo.js";
524
524
  export * from "./repokind.js";
525
525
  export * from "./repositorylist.js";
526
+ export * from "./repotag.js";
527
+ export * from "./repotaglist.js";
526
528
  export * from "./requestcounts.js";
527
529
  export * from "./resolvedreference.js";
528
530
  export * from "./resolvereferencerequest.js";
@@ -15,6 +15,16 @@ import {
15
15
 
16
16
  export type Repo = {
17
17
  createdAt: Date;
18
+ /**
19
+ * The user id of whoever created the repository, through any plane
20
+ *
21
+ * @remarks
22
+ * (the API, `git push`, the HF client, the OCI registry). It is the
23
+ * same id the platform session and mk-authentication's members
24
+ * directory use, so a name is one directory lookup away. `null`
25
+ * for a row that records no user id; never an empty string.
26
+ */
27
+ creator: string | null;
18
28
  description: string;
19
29
  /**
20
30
  * Opaque, stable repository id (the canonical key; not a user label).
@@ -44,6 +54,7 @@ export const Repo$inboundSchema: z.ZodType<Repo, z.ZodTypeDef, unknown> = z
44
54
  created_at: z.string().datetime({ offset: true }).transform(v =>
45
55
  new Date(v)
46
56
  ),
57
+ creator: z.nullable(z.string()),
47
58
  description: z.string(),
48
59
  id: z.string(),
49
60
  kind: z.nullable(RepoKind$inboundSchema),
@@ -57,6 +68,7 @@ export const Repo$inboundSchema: z.ZodType<Repo, z.ZodTypeDef, unknown> = z
57
68
  /** @internal */
58
69
  export type Repo$Outbound = {
59
70
  created_at: string;
71
+ creator: string | null;
60
72
  description: string;
61
73
  id: string;
62
74
  kind: string | null;
@@ -68,6 +80,7 @@ export type Repo$Outbound = {
68
80
  export const Repo$outboundSchema: z.ZodType<Repo$Outbound, z.ZodTypeDef, Repo> =
69
81
  z.object({
70
82
  createdAt: z.date().transform(v => v.toISOString()),
83
+ creator: z.nullable(z.string()),
71
84
  description: z.string(),
72
85
  id: z.string(),
73
86
  kind: z.nullable(RepoKind$outboundSchema),