@jasonews/agent-squad-gateway 1.0.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.
Files changed (149) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +200 -0
  3. package/SECURITY.md +44 -0
  4. package/dist/bin/agent-squad-gateway.js +55 -0
  5. package/dist/bin/agent-squad-gateway.js.map +1 -0
  6. package/dist/config/config.js +124 -0
  7. package/dist/config/config.js.map +1 -0
  8. package/dist/config/paths.js +16 -0
  9. package/dist/config/paths.js.map +1 -0
  10. package/dist/control-plane/clients.js +77 -0
  11. package/dist/control-plane/clients.js.map +1 -0
  12. package/dist/control-plane/core-connection.js +54 -0
  13. package/dist/control-plane/core-connection.js.map +1 -0
  14. package/dist/control-plane/credentials.js +134 -0
  15. package/dist/control-plane/credentials.js.map +1 -0
  16. package/dist/control-plane/db.js +33 -0
  17. package/dist/control-plane/db.js.map +1 -0
  18. package/dist/control-plane/extensions.js +59 -0
  19. package/dist/control-plane/extensions.js.map +1 -0
  20. package/dist/control-plane/grants.js +107 -0
  21. package/dist/control-plane/grants.js.map +1 -0
  22. package/dist/control-plane/idempotency.js +132 -0
  23. package/dist/control-plane/idempotency.js.map +1 -0
  24. package/dist/control-plane/migrations.js +133 -0
  25. package/dist/control-plane/migrations.js.map +1 -0
  26. package/dist/control-plane/response-sessions.js +359 -0
  27. package/dist/control-plane/response-sessions.js.map +1 -0
  28. package/dist/control-plane/retention.js +138 -0
  29. package/dist/control-plane/retention.js.map +1 -0
  30. package/dist/control-plane/runs.js +156 -0
  31. package/dist/control-plane/runs.js.map +1 -0
  32. package/dist/control-plane/targets.js +449 -0
  33. package/dist/control-plane/targets.js.map +1 -0
  34. package/dist/control-plane/types.js +2 -0
  35. package/dist/control-plane/types.js.map +1 -0
  36. package/dist/core-client/client.js +275 -0
  37. package/dist/core-client/client.js.map +1 -0
  38. package/dist/core-client/event-proxy.js +105 -0
  39. package/dist/core-client/event-proxy.js.map +1 -0
  40. package/dist/core-client/types.js +2 -0
  41. package/dist/core-client/types.js.map +1 -0
  42. package/dist/extensions/contract.js +2 -0
  43. package/dist/extensions/contract.js.map +1 -0
  44. package/dist/extensions/openai/auth.js +16 -0
  45. package/dist/extensions/openai/auth.js.map +1 -0
  46. package/dist/extensions/openai/chat.js +403 -0
  47. package/dist/extensions/openai/chat.js.map +1 -0
  48. package/dist/extensions/openai/errors.js +79 -0
  49. package/dist/extensions/openai/errors.js.map +1 -0
  50. package/dist/extensions/openai/image-input.js +79 -0
  51. package/dist/extensions/openai/image-input.js.map +1 -0
  52. package/dist/extensions/openai/models.js +40 -0
  53. package/dist/extensions/openai/models.js.map +1 -0
  54. package/dist/extensions/openai/responses.js +731 -0
  55. package/dist/extensions/openai/responses.js.map +1 -0
  56. package/dist/extensions/openai/routes.js +81 -0
  57. package/dist/extensions/openai/routes.js.map +1 -0
  58. package/dist/extensions/openai/run-attempt.js +96 -0
  59. package/dist/extensions/openai/run-attempt.js.map +1 -0
  60. package/dist/extensions/openai/schemas.js +176 -0
  61. package/dist/extensions/openai/schemas.js.map +1 -0
  62. package/dist/extensions/openai/sse.js +421 -0
  63. package/dist/extensions/openai/sse.js.map +1 -0
  64. package/dist/extensions/openai/tools.js +727 -0
  65. package/dist/extensions/openai/tools.js.map +1 -0
  66. package/dist/extensions/registry.js +30 -0
  67. package/dist/extensions/registry.js.map +1 -0
  68. package/dist/lifecycle/daemon.js +437 -0
  69. package/dist/lifecycle/daemon.js.map +1 -0
  70. package/dist/lifecycle/pidfile.js +34 -0
  71. package/dist/lifecycle/pidfile.js.map +1 -0
  72. package/dist/provider-runtime/antigravity/adapter.js +398 -0
  73. package/dist/provider-runtime/antigravity/adapter.js.map +1 -0
  74. package/dist/provider-runtime/antigravity/conversation.js +31 -0
  75. package/dist/provider-runtime/antigravity/conversation.js.map +1 -0
  76. package/dist/provider-runtime/capability-service.js +191 -0
  77. package/dist/provider-runtime/capability-service.js.map +1 -0
  78. package/dist/provider-runtime/claude/adapter.js +397 -0
  79. package/dist/provider-runtime/claude/adapter.js.map +1 -0
  80. package/dist/provider-runtime/claude/protocol.js +143 -0
  81. package/dist/provider-runtime/claude/protocol.js.map +1 -0
  82. package/dist/provider-runtime/codex/adapter.js +440 -0
  83. package/dist/provider-runtime/codex/adapter.js.map +1 -0
  84. package/dist/provider-runtime/codex/json-rpc-client.js +182 -0
  85. package/dist/provider-runtime/codex/json-rpc-client.js.map +1 -0
  86. package/dist/provider-runtime/codex/protocol.js +128 -0
  87. package/dist/provider-runtime/codex/protocol.js.map +1 -0
  88. package/dist/provider-runtime/command-discovery.js +106 -0
  89. package/dist/provider-runtime/command-discovery.js.map +1 -0
  90. package/dist/provider-runtime/cursor/adapter.js +427 -0
  91. package/dist/provider-runtime/cursor/adapter.js.map +1 -0
  92. package/dist/provider-runtime/cursor/protocol.js +81 -0
  93. package/dist/provider-runtime/cursor/protocol.js.map +1 -0
  94. package/dist/provider-runtime/fake/adapter.js +138 -0
  95. package/dist/provider-runtime/fake/adapter.js.map +1 -0
  96. package/dist/provider-runtime/image-assets.js +409 -0
  97. package/dist/provider-runtime/image-assets.js.map +1 -0
  98. package/dist/provider-runtime/image-support.js +5 -0
  99. package/dist/provider-runtime/image-support.js.map +1 -0
  100. package/dist/provider-runtime/invocation-service.js +503 -0
  101. package/dist/provider-runtime/invocation-service.js.map +1 -0
  102. package/dist/provider-runtime/kimi/adapter.js +657 -0
  103. package/dist/provider-runtime/kimi/adapter.js.map +1 -0
  104. package/dist/provider-runtime/opencode/adapter.js +610 -0
  105. package/dist/provider-runtime/opencode/adapter.js.map +1 -0
  106. package/dist/provider-runtime/opencode/server.js +46 -0
  107. package/dist/provider-runtime/opencode/server.js.map +1 -0
  108. package/dist/provider-runtime/process/line-reader.js +49 -0
  109. package/dist/provider-runtime/process/line-reader.js.map +1 -0
  110. package/dist/provider-runtime/process/managed-process.js +151 -0
  111. package/dist/provider-runtime/process/managed-process.js.map +1 -0
  112. package/dist/provider-runtime/provider-input.js +77 -0
  113. package/dist/provider-runtime/provider-input.js.map +1 -0
  114. package/dist/provider-runtime/register-providers.js +26 -0
  115. package/dist/provider-runtime/register-providers.js.map +1 -0
  116. package/dist/provider-runtime/registry.js +35 -0
  117. package/dist/provider-runtime/registry.js.map +1 -0
  118. package/dist/provider-runtime/replay-buffer.js +168 -0
  119. package/dist/provider-runtime/replay-buffer.js.map +1 -0
  120. package/dist/provider-runtime/scheduler.js +155 -0
  121. package/dist/provider-runtime/scheduler.js.map +1 -0
  122. package/dist/provider-runtime/types.js +2 -0
  123. package/dist/provider-runtime/types.js.map +1 -0
  124. package/dist/provider-runtime/workspaces.js +814 -0
  125. package/dist/provider-runtime/workspaces.js.map +1 -0
  126. package/dist/security/admin-auth.js +109 -0
  127. package/dist/security/admin-auth.js.map +1 -0
  128. package/dist/security/crypto.js +52 -0
  129. package/dist/security/crypto.js.map +1 -0
  130. package/dist/security/secret-files.js +33 -0
  131. package/dist/security/secret-files.js.map +1 -0
  132. package/dist/server/admin-routes.js +610 -0
  133. package/dist/server/admin-routes.js.map +1 -0
  134. package/dist/server/app.js +178 -0
  135. package/dist/server/app.js.map +1 -0
  136. package/dist/server/auth-hooks.js +43 -0
  137. package/dist/server/auth-hooks.js.map +1 -0
  138. package/dist/server/core-routes.js +127 -0
  139. package/dist/server/core-routes.js.map +1 -0
  140. package/dist/server/errors.js +19 -0
  141. package/dist/server/errors.js.map +1 -0
  142. package/dist/server/ui-routes.js +77 -0
  143. package/dist/server/ui-routes.js.map +1 -0
  144. package/dist/web/assets/index-BhqNoPpE.js +206 -0
  145. package/dist/web/assets/index-BhqNoPpE.js.map +1 -0
  146. package/dist/web/assets/index-C5nnaBfZ.css +1 -0
  147. package/dist/web/index.html +14 -0
  148. package/package.json +74 -0
  149. package/translations/README.zh-CN.md +175 -0
@@ -0,0 +1,610 @@
1
+ import { z, ZodError } from 'zod';
2
+ import { formatGatewayAddress, gatewayBindPolicy, } from '../config/config.js';
3
+ import { requireAdmin, sessionCookie } from './auth-hooks.js';
4
+ import { GatewayError } from './errors.js';
5
+ const noStore = { 'cache-control': 'no-store' };
6
+ const clearedSessionCookie = 'asq_gateway_admin=; HttpOnly; SameSite=Strict; Path=/admin; Max-Age=0';
7
+ const idParams = z.object({ id: z.string().min(1) }).strict();
8
+ const runStatuses = ['queued', 'running', 'completed', 'failed', 'cancelled', 'interrupted'];
9
+ const optionalQueryString = z.preprocess((value) => value === '' ? undefined : value, z.string().min(1).optional());
10
+ const optionalRunStatus = z.preprocess((value) => value === '' ? undefined : value, z.enum(runStatuses).optional());
11
+ const runsQuery = z.object({
12
+ limit: z.coerce.number().int().min(1).max(100).default(100),
13
+ status: optionalRunStatus,
14
+ target_id: optionalQueryString,
15
+ client_id: optionalQueryString,
16
+ }).strict();
17
+ const emptyBody = z.object({}).strict();
18
+ const verifyTargetBody = z.object({ confirm_model_usage: z.literal(true) }).strict();
19
+ const extensionToggleBody = z.object({ enabled: z.boolean() }).strict();
20
+ const createClientBody = z.object({ name: z.string().trim().min(1) }).strict();
21
+ const optionalExpiry = z.string().datetime({ offset: true }).nullable().optional();
22
+ const createCredentialBody = z.object({
23
+ name: z.string().trim().min(1),
24
+ expires_at: optionalExpiry,
25
+ }).strict();
26
+ const updateClientBody = z.object({ status: z.enum(['active', 'disabled']) }).strict();
27
+ const bootstrapExchangeBody = z.object({ code: z.string().min(1) }).strict();
28
+ const createGrantBody = z.object({
29
+ client_id: z.string().min(1),
30
+ extension_id: z.string().min(1),
31
+ target_id: z.string().min(1),
32
+ }).strict();
33
+ const updateCoreBody = z.object({ base_url: z.string().min(1) }).strict();
34
+ function normalizedExpiry(value) {
35
+ return value ? new Date(value).toISOString() : null;
36
+ }
37
+ const targetFields = {
38
+ aliases: z.array(z.string().min(1)),
39
+ cli: z.string().trim().min(1),
40
+ native_model: z.string().trim().min(1),
41
+ reasoning_effort: z.string().trim().min(1).nullable(),
42
+ enabled: z.boolean(),
43
+ isolation_level: z.enum(['strict', 'best_effort']),
44
+ streaming_mode: z.enum(['native', 'none']),
45
+ tool_bridge: z.enum(['structured_output', 'none']),
46
+ max_concurrency: z.number().int().positive(),
47
+ max_queue: z.number().int().nonnegative(),
48
+ queue_timeout_ms: z.number().int().positive(),
49
+ run_timeout_ms: z.number().int().positive().nullable(),
50
+ fixed_workspace: z.string().min(1).nullable(),
51
+ acknowledge_fixed_workspace_downgrade: z.boolean(),
52
+ enabled_best_effort: z.boolean(),
53
+ };
54
+ const createTargetBody = z.object({
55
+ id: z.string().min(1),
56
+ aliases: targetFields.aliases.optional(),
57
+ cli: targetFields.cli,
58
+ native_model: targetFields.native_model,
59
+ reasoning_effort: targetFields.reasoning_effort.optional(),
60
+ isolation_level: targetFields.isolation_level.optional(),
61
+ streaming_mode: targetFields.streaming_mode.optional(),
62
+ tool_bridge: targetFields.tool_bridge.optional(),
63
+ max_concurrency: targetFields.max_concurrency.optional(),
64
+ max_queue: targetFields.max_queue.optional(),
65
+ queue_timeout_ms: targetFields.queue_timeout_ms.optional(),
66
+ run_timeout_ms: targetFields.run_timeout_ms.optional(),
67
+ fixed_workspace: targetFields.fixed_workspace.optional(),
68
+ acknowledge_fixed_workspace_downgrade: targetFields.acknowledge_fixed_workspace_downgrade.optional(),
69
+ verify_on_create: z.boolean().optional(),
70
+ confirm_model_usage: z.literal(true).optional(),
71
+ }).strict();
72
+ const updateTargetBody = z.object({
73
+ aliases: targetFields.aliases.optional(),
74
+ cli: targetFields.cli.optional(),
75
+ native_model: targetFields.native_model.optional(),
76
+ reasoning_effort: targetFields.reasoning_effort.optional(),
77
+ enabled: targetFields.enabled.optional(),
78
+ isolation_level: targetFields.isolation_level.optional(),
79
+ streaming_mode: targetFields.streaming_mode.optional(),
80
+ tool_bridge: targetFields.tool_bridge.optional(),
81
+ max_concurrency: targetFields.max_concurrency.optional(),
82
+ max_queue: targetFields.max_queue.optional(),
83
+ queue_timeout_ms: targetFields.queue_timeout_ms.optional(),
84
+ run_timeout_ms: targetFields.run_timeout_ms.optional(),
85
+ fixed_workspace: targetFields.fixed_workspace.optional(),
86
+ acknowledge_fixed_workspace_downgrade: targetFields.acknowledge_fixed_workspace_downgrade.optional(),
87
+ enabled_best_effort: targetFields.enabled_best_effort.optional(),
88
+ }).strict();
89
+ function parse(schema, value, label) {
90
+ try {
91
+ return schema.parse(value);
92
+ }
93
+ catch (error) {
94
+ if (error instanceof ZodError)
95
+ throw new GatewayError(400, 'validation_error', `invalid ${label}`);
96
+ throw error;
97
+ }
98
+ }
99
+ function body(request, schema) {
100
+ return parse(schema, request.body ?? {}, 'request body');
101
+ }
102
+ function params(request) {
103
+ return parse(idParams, request.params, 'request path');
104
+ }
105
+ function query(request, schema) {
106
+ return parse(schema, request.query, 'request query');
107
+ }
108
+ function knownError(error) {
109
+ const code = error instanceof Error ? error.message : '';
110
+ const clientErrors = new Set([
111
+ 'client_name_exists', 'invalid_target_id', 'invalid_target_alias', 'invalid_target_cli',
112
+ 'invalid_native_model', 'invalid_reasoning_effort', 'invalid_isolation_level',
113
+ 'invalid_streaming_mode', 'invalid_tool_bridge', 'invalid_max_concurrency', 'invalid_max_queue',
114
+ 'invalid_queue_timeout', 'invalid_run_timeout', 'fixed_workspace_acknowledgement_required',
115
+ 'fixed_workspace_required_for_best_effort', 'fixed_workspace_must_be_absolute', 'fixed_workspace_not_found',
116
+ 'invalid_core_url',
117
+ ]);
118
+ const notFoundErrors = new Set([
119
+ 'client_not_found', 'credential_not_found', 'target_not_found', 'extension_not_found',
120
+ ]);
121
+ const conflictErrors = new Set([
122
+ 'target_id_exists', 'capability_verification_required', 'capability_mismatch',
123
+ 'best_effort_acknowledgement_required', 'target_enabled', 'target_in_use', 'client_in_use',
124
+ ]);
125
+ if (clientErrors.has(code))
126
+ throw new GatewayError(400, code, 'invalid control-plane request');
127
+ if (notFoundErrors.has(code))
128
+ throw new GatewayError(404, code, 'control-plane resource not found');
129
+ if (conflictErrors.has(code))
130
+ throw new GatewayError(409, code, 'control-plane state conflict');
131
+ throw error;
132
+ }
133
+ function asTargetInput(input) {
134
+ return {
135
+ id: input.id,
136
+ aliases: input.aliases,
137
+ cli: input.cli,
138
+ nativeModel: input.native_model,
139
+ reasoningEffort: input.reasoning_effort,
140
+ isolationLevel: input.isolation_level,
141
+ streamingMode: input.streaming_mode,
142
+ toolBridge: input.tool_bridge,
143
+ maxConcurrency: input.max_concurrency,
144
+ maxQueue: input.max_queue,
145
+ queueTimeoutMs: input.queue_timeout_ms,
146
+ runTimeoutMs: input.run_timeout_ms,
147
+ fixedWorkspace: input.fixed_workspace,
148
+ acknowledgeFixedWorkspaceDowngrade: input.acknowledge_fixed_workspace_downgrade,
149
+ };
150
+ }
151
+ function asTargetPatch(input) {
152
+ return {
153
+ aliases: input.aliases,
154
+ cli: input.cli,
155
+ nativeModel: input.native_model,
156
+ reasoningEffort: input.reasoning_effort,
157
+ enabled: input.enabled,
158
+ isolationLevel: input.isolation_level,
159
+ streamingMode: input.streaming_mode,
160
+ toolBridge: input.tool_bridge,
161
+ maxConcurrency: input.max_concurrency,
162
+ maxQueue: input.max_queue,
163
+ queueTimeoutMs: input.queue_timeout_ms,
164
+ runTimeoutMs: input.run_timeout_ms,
165
+ fixedWorkspace: input.fixed_workspace,
166
+ acknowledgeFixedWorkspaceDowngrade: input.acknowledge_fixed_workspace_downgrade,
167
+ enabledBestEffort: input.enabled_best_effort,
168
+ };
169
+ }
170
+ export function registerAdminRoutes(app, deps) {
171
+ const requireAuthenticatedAdmin = requireAdmin(deps.adminAuth, deps.trustedOrigins, deps.config.webUiAuth === 'token');
172
+ const capabilityService = () => {
173
+ if (!deps.capabilityService) {
174
+ throw new GatewayError(503, 'capability_service_unavailable', 'capability service unavailable');
175
+ }
176
+ return deps.capabilityService;
177
+ };
178
+ app.get('/admin/auth/mode', async (_request, reply) => {
179
+ return reply.headers(noStore).send({ mode: deps.config.webUiAuth });
180
+ });
181
+ app.get('/admin/settings', { preHandler: requireAuthenticatedAdmin }, async (_request, reply) => {
182
+ const connection = deps.coreConnection.get();
183
+ return reply.headers(noStore).send({
184
+ core: {
185
+ base_url: connection.baseUrl,
186
+ status: connection.status,
187
+ version: connection.version,
188
+ last_checked_at: connection.lastCheckedAt,
189
+ },
190
+ bind_address: formatGatewayAddress(deps.config.host, deps.config.port),
191
+ state_paths: {
192
+ config: deps.config.paths.configPath,
193
+ database: deps.config.paths.dbPath,
194
+ master_key: deps.config.paths.masterKeyPath,
195
+ admin_secret: deps.config.paths.adminSecretPath,
196
+ },
197
+ retention: { metadata_days: 30, replay_ttl_minutes: 10 },
198
+ security: {
199
+ bind: gatewayBindPolicy(deps.config.host),
200
+ cors: 'disabled',
201
+ web_ui_auth: deps.config.webUiAuth,
202
+ },
203
+ });
204
+ });
205
+ app.patch('/admin/settings/core', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
206
+ const input = body(request, updateCoreBody);
207
+ try {
208
+ const connection = deps.coreConnection.update(input.base_url);
209
+ deps.coreClient.setBaseUrl(connection.baseUrl);
210
+ deps.config.coreUrl = connection.baseUrl;
211
+ return reply.headers(noStore).send({ base_url: connection.baseUrl });
212
+ }
213
+ catch (error) {
214
+ return knownError(error);
215
+ }
216
+ });
217
+ app.get('/admin/setup/status', { preHandler: requireAuthenticatedAdmin }, async (_request, reply) => {
218
+ const connection = deps.coreConnection.get();
219
+ return reply.headers(noStore).send({
220
+ core_configured: connection.lastCheckedAt !== null,
221
+ cli_scan_complete: capabilityService().listAvailability().length > 0,
222
+ target_count: deps.targets.list().length,
223
+ client_count: deps.clients.list().length,
224
+ credential_count: deps.credentials.list().length,
225
+ });
226
+ });
227
+ app.post('/admin/setup/client-credential', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
228
+ const input = body(request, createClientBody);
229
+ try {
230
+ const createClientAndCredential = deps.db.transaction(() => {
231
+ const client = deps.clients.create(input.name);
232
+ const credential = deps.credentials.create(client.id, input.name);
233
+ return { client, credential };
234
+ });
235
+ const { credential } = createClientAndCredential();
236
+ return reply.code(201).headers(noStore).send({
237
+ id: credential.id,
238
+ clientId: credential.clientId,
239
+ prefix: credential.prefix,
240
+ api_key: credential.apiKey,
241
+ });
242
+ }
243
+ catch (error) {
244
+ return knownError(error);
245
+ }
246
+ });
247
+ app.post('/admin/bootstrap/mint', async (request, reply) => {
248
+ body(request, emptyBody);
249
+ const authorization = request.headers.authorization;
250
+ if (typeof authorization !== 'string' || !authorization.startsWith('Bearer ')) {
251
+ throw new GatewayError(401, 'admin_secret_required', 'admin secret required');
252
+ }
253
+ try {
254
+ const code = deps.adminAuth.mintBootstrapCode(authorization.slice('Bearer '.length));
255
+ return reply.headers(noStore).send({ code });
256
+ }
257
+ catch (error) {
258
+ if (error instanceof Error && error.message === 'admin_secret_invalid') {
259
+ throw new GatewayError(401, 'admin_secret_invalid', 'admin secret invalid');
260
+ }
261
+ throw error;
262
+ }
263
+ });
264
+ app.post('/admin/bootstrap/exchange', async (request, reply) => {
265
+ const input = body(request, bootstrapExchangeBody);
266
+ try {
267
+ const login = deps.adminAuth.exchange(input.code);
268
+ return reply.headers(noStore).header('set-cookie', login.cookie).send({
269
+ csrf_token: login.csrfToken,
270
+ expires_at: login.expiresAt,
271
+ });
272
+ }
273
+ catch (error) {
274
+ if (error instanceof Error && error.message === 'bootstrap_code_invalid') {
275
+ throw new GatewayError(401, 'bootstrap_code_invalid', 'bootstrap code invalid');
276
+ }
277
+ throw error;
278
+ }
279
+ });
280
+ app.post('/admin/session/csrf', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
281
+ body(request, emptyBody);
282
+ const token = sessionCookie(request.headers.cookie);
283
+ const csrfToken = request.headers['x-csrf-token'];
284
+ if (!token || typeof csrfToken !== 'string')
285
+ throw new Error('authenticated admin context missing');
286
+ let csrf;
287
+ try {
288
+ csrf = deps.adminAuth.rotateCsrf(token, csrfToken);
289
+ }
290
+ catch (error) {
291
+ if (error instanceof Error && error.message === 'admin_session_invalid') {
292
+ throw new GatewayError(403, 'csrf_invalid', 'CSRF validation failed');
293
+ }
294
+ throw error;
295
+ }
296
+ return reply.headers(noStore).send({
297
+ csrf_token: csrf.csrfToken,
298
+ expires_at: csrf.expiresAt,
299
+ });
300
+ });
301
+ app.post('/admin/session/logout', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
302
+ body(request, emptyBody);
303
+ const token = sessionCookie(request.headers.cookie);
304
+ if (token)
305
+ deps.adminAuth.revokeSession(token);
306
+ return reply
307
+ .code(204)
308
+ .headers(noStore)
309
+ .header('set-cookie', clearedSessionCookie)
310
+ .send();
311
+ });
312
+ app.post('/admin/clients', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
313
+ const input = body(request, createClientBody);
314
+ try {
315
+ return reply.code(201).send(deps.clients.create(input.name));
316
+ }
317
+ catch (error) {
318
+ return knownError(error);
319
+ }
320
+ });
321
+ app.get('/admin/clients', { preHandler: requireAuthenticatedAdmin }, async (_request, reply) => {
322
+ const credentials = deps.credentials.list();
323
+ return reply.send({
324
+ clients: deps.clients.list().map((client) => {
325
+ const clientCredentials = credentials.filter((credential) => credential.clientId === client.id);
326
+ const lastUsedAt = clientCredentials.reduce((latest, credential) => credential.lastUsedAt !== null && (latest === null || credential.lastUsedAt > latest)
327
+ ? credential.lastUsedAt
328
+ : latest, null);
329
+ return {
330
+ ...client,
331
+ credentialCount: clientCredentials.length,
332
+ grantCount: deps.grants.listForClient(client.id).length,
333
+ lastUsedAt,
334
+ };
335
+ }),
336
+ });
337
+ });
338
+ app.get('/admin/clients/:id', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
339
+ const { id } = params(request);
340
+ const client = deps.clients.list().find((candidate) => candidate.id === id);
341
+ if (!client)
342
+ return knownError(new Error('client_not_found'));
343
+ return reply.send({
344
+ client,
345
+ credentials: deps.credentials.list(id),
346
+ grants: deps.grants.listForClient(id),
347
+ });
348
+ });
349
+ app.patch('/admin/clients/:id', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
350
+ const { id } = params(request);
351
+ const input = body(request, updateClientBody);
352
+ try {
353
+ deps.clients.setStatus(id, input.status);
354
+ const client = deps.clients.list().find((candidate) => candidate.id === id);
355
+ return reply.send(client);
356
+ }
357
+ catch (error) {
358
+ return knownError(error);
359
+ }
360
+ });
361
+ app.delete('/admin/clients/:id', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
362
+ const { id } = params(request);
363
+ body(request, emptyBody);
364
+ try {
365
+ deps.clients.delete(id);
366
+ return reply.code(204).send();
367
+ }
368
+ catch (error) {
369
+ return knownError(error);
370
+ }
371
+ });
372
+ app.post('/admin/clients/:id/credentials', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
373
+ const { id } = params(request);
374
+ const input = body(request, createCredentialBody);
375
+ try {
376
+ const credential = deps.credentials.create(id, input.name, normalizedExpiry(input.expires_at));
377
+ return reply.code(201).headers(noStore).send({
378
+ id: credential.id,
379
+ clientId: credential.clientId,
380
+ prefix: credential.prefix,
381
+ api_key: credential.apiKey,
382
+ });
383
+ }
384
+ catch (error) {
385
+ return knownError(error);
386
+ }
387
+ });
388
+ app.get('/admin/credentials/:id/reveal', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
389
+ const { id } = params(request);
390
+ try {
391
+ return reply.headers(noStore).send({ api_key: deps.credentials.reveal(id) });
392
+ }
393
+ catch (error) {
394
+ return knownError(error);
395
+ }
396
+ });
397
+ app.post('/admin/credentials/:id/rotate', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
398
+ const { id } = params(request);
399
+ const input = body(request, createCredentialBody);
400
+ try {
401
+ const credential = deps.credentials.rotate(id, input.name, normalizedExpiry(input.expires_at));
402
+ return reply.code(201).headers(noStore).send({
403
+ id: credential.id,
404
+ clientId: credential.clientId,
405
+ prefix: credential.prefix,
406
+ api_key: credential.apiKey,
407
+ });
408
+ }
409
+ catch (error) {
410
+ return knownError(error);
411
+ }
412
+ });
413
+ app.post('/admin/credentials/:id/revoke', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
414
+ const { id } = params(request);
415
+ body(request, emptyBody);
416
+ try {
417
+ deps.credentials.revoke(id);
418
+ return reply.code(204).send();
419
+ }
420
+ catch (error) {
421
+ return knownError(error);
422
+ }
423
+ });
424
+ app.post('/admin/targets', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
425
+ const input = body(request, createTargetBody);
426
+ if (input.verify_on_create === true && input.confirm_model_usage !== true) {
427
+ throw new GatewayError(400, 'model_usage_confirmation_required', 'model usage confirmation required');
428
+ }
429
+ try {
430
+ const created = deps.targets.create(asTargetInput(input));
431
+ if (input.verify_on_create !== true)
432
+ return reply.code(201).send(created);
433
+ try {
434
+ const capabilities = await capabilityService().verifyTarget(created.id, true);
435
+ return reply.headers(noStore).code(201).send({
436
+ target: deps.targets.get(created.id),
437
+ capabilities,
438
+ model_usage_consumed: true,
439
+ });
440
+ }
441
+ catch (error) {
442
+ deps.targets.delete(created.id);
443
+ throw error;
444
+ }
445
+ }
446
+ catch (error) {
447
+ return knownError(error);
448
+ }
449
+ });
450
+ app.get('/admin/targets', { preHandler: requireAuthenticatedAdmin }, async (_request, reply) => {
451
+ return reply.send({ targets: deps.targets.list() });
452
+ });
453
+ app.patch('/admin/targets/:id', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
454
+ const { id } = params(request);
455
+ const input = body(request, updateTargetBody);
456
+ try {
457
+ if (input.enabled === true) {
458
+ const target = deps.targets.get(id);
459
+ const current = target === null ? undefined : capabilityService().listAvailability()
460
+ .find((entry) => entry.cli === target.cli);
461
+ if (current && target?.capabilityVersion !== null && (!current.capabilities.available
462
+ || current.capabilities.version !== target?.capabilityVersion)) {
463
+ throw new Error('capability_mismatch');
464
+ }
465
+ }
466
+ return reply.send(deps.targets.update(id, asTargetPatch(input)));
467
+ }
468
+ catch (error) {
469
+ return knownError(error);
470
+ }
471
+ });
472
+ app.delete('/admin/targets/:id', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
473
+ const { id } = params(request);
474
+ try {
475
+ deps.targets.delete(id);
476
+ return reply.code(204).send();
477
+ }
478
+ catch (error) {
479
+ return knownError(error);
480
+ }
481
+ });
482
+ const availabilityResponse = () => ({
483
+ cli_availability: capabilityService().listAvailability().map((entry) => ({
484
+ ...entry,
485
+ verificationCount: deps.targets.list().filter((target) => target.cli === entry.cli && target.capabilityVerifiedAt !== null).length,
486
+ })),
487
+ });
488
+ app.get('/admin/cli-availability', { preHandler: requireAuthenticatedAdmin }, async (_request, reply) => {
489
+ return reply.headers(noStore).send(availabilityResponse());
490
+ });
491
+ app.post('/admin/cli-availability/refresh', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
492
+ body(request, emptyBody);
493
+ await capabilityService().scanInstalled();
494
+ return reply.headers(noStore).send(availabilityResponse());
495
+ });
496
+ app.get('/admin/extensions', { preHandler: requireAuthenticatedAdmin }, async (_request, reply) => {
497
+ const records = new Map(deps.extensions.list().map((record) => [record.id, record]));
498
+ const health = deps.extensionHealth ? await deps.extensionHealth() : {};
499
+ const manifests = deps.extensionManifests ?? deps.extensions.list().map((record) => ({
500
+ id: record.id,
501
+ version: record.version,
502
+ requiredGatewayVersion: 'unknown',
503
+ endpoint: '-',
504
+ }));
505
+ return reply.headers(noStore).send({
506
+ extensions: manifests.map((manifest) => ({
507
+ ...manifest,
508
+ enabled: records.get(manifest.id)?.enabled ?? false,
509
+ health: health[manifest.id] ?? { ok: false, detail: 'not_started' },
510
+ })),
511
+ });
512
+ });
513
+ app.patch('/admin/extensions/:id', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
514
+ const { id } = params(request);
515
+ const input = body(request, extensionToggleBody);
516
+ const manifest = deps.extensionManifests?.find((item) => item.id === id);
517
+ if (!manifest)
518
+ throw new GatewayError(404, 'extension_not_found', 'control-plane resource not found');
519
+ const existing = deps.extensions.list().find((record) => record.id === id);
520
+ if (existing)
521
+ deps.extensions.setEnabled(id, input.enabled);
522
+ else
523
+ deps.extensions.upsert(id, manifest.version, input.enabled);
524
+ return reply.send({ enabled: input.enabled });
525
+ });
526
+ app.post('/admin/targets/:id/verify', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
527
+ const { id } = params(request);
528
+ const input = body(request, verifyTargetBody);
529
+ const capabilities = await capabilityService().verifyTarget(id, input.confirm_model_usage);
530
+ return reply.headers(noStore).send({
531
+ capabilities,
532
+ model_usage_consumed: true,
533
+ });
534
+ });
535
+ app.post('/admin/grants', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
536
+ const input = body(request, createGrantBody);
537
+ try {
538
+ deps.grants.grant(input.client_id, input.extension_id, input.target_id);
539
+ return reply.code(201).send({
540
+ clientId: input.client_id,
541
+ extensionId: input.extension_id,
542
+ targetId: input.target_id,
543
+ });
544
+ }
545
+ catch (error) {
546
+ return knownError(error);
547
+ }
548
+ });
549
+ app.delete('/admin/grants', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
550
+ const input = body(request, createGrantBody);
551
+ try {
552
+ deps.grants.revoke(input.client_id, input.extension_id, input.target_id);
553
+ return reply.code(204).send();
554
+ }
555
+ catch (error) {
556
+ return knownError(error);
557
+ }
558
+ });
559
+ app.get('/admin/runs', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
560
+ const filters = query(request, runsQuery);
561
+ const runs = deps.runs.list()
562
+ .filter((run) => filters.status === undefined || run.status === filters.status)
563
+ .filter((run) => filters.target_id === undefined || run.targetId === filters.target_id)
564
+ .filter((run) => filters.client_id === undefined || run.clientId === filters.client_id)
565
+ .slice(0, filters.limit);
566
+ const verifiedTargetCount = deps.targets.list()
567
+ .filter((target) => target.capabilityVerifiedAt !== null).length;
568
+ return reply.send({ runs, verifiedTargetCount });
569
+ });
570
+ app.get('/admin/runs/overview', { preHandler: requireAuthenticatedAdmin }, async (_request, reply) => {
571
+ const allRuns = deps.runs.list();
572
+ const pressure = new Map();
573
+ for (const run of allRuns) {
574
+ if (run.status !== 'queued' && run.status !== 'running')
575
+ continue;
576
+ const target = pressure.get(run.targetId) ?? { targetId: run.targetId, queued: 0, running: 0 };
577
+ target[run.status] += 1;
578
+ pressure.set(run.targetId, target);
579
+ }
580
+ const queuePressure = [...pressure.values()]
581
+ .sort((left, right) => right.queued - left.queued || left.targetId.localeCompare(right.targetId));
582
+ const verifiedTargetCount = deps.targets.list()
583
+ .filter((target) => target.capabilityVerifiedAt !== null).length;
584
+ return reply.send({
585
+ runs: allRuns.slice(0, 20),
586
+ verifiedTargetCount,
587
+ activeRunCount: queuePressure.reduce((total, target) => total + target.queued + target.running, 0),
588
+ queuePressure,
589
+ });
590
+ });
591
+ app.post('/admin/runs/:id/cancel', { preHandler: requireAuthenticatedAdmin }, async (request, reply) => {
592
+ const { id } = params(request);
593
+ body(request, emptyBody);
594
+ const run = deps.runs.get(id);
595
+ if (!run)
596
+ throw new GatewayError(404, 'run_not_found', 'Gateway run not found');
597
+ if (run.status !== 'queued' && run.status !== 'running') {
598
+ throw new GatewayError(409, 'run_not_cancellable', 'Gateway run is no longer cancellable');
599
+ }
600
+ if (!deps.runCanceller) {
601
+ throw new GatewayError(503, 'run_cancellation_unavailable', 'run cancellation unavailable');
602
+ }
603
+ const cancelled = await deps.runCanceller.cancel(id);
604
+ if (!cancelled) {
605
+ throw new GatewayError(409, 'run_not_cancellable', 'Gateway run is no longer cancellable');
606
+ }
607
+ return reply.send({ cancelled: true, id });
608
+ });
609
+ }
610
+ //# sourceMappingURL=admin-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-routes.js","sourceRoot":"","sources":["../../src/server/admin-routes.ts"],"names":[],"mappings":"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"}