@kindgi/api 0.1.3 → 0.1.4-rc.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/agent-binding.d.ts +18 -4
- package/dist/agent-binding.d.ts.map +1 -1
- package/dist/agent-pins.d.ts +48 -0
- package/dist/agent-pins.d.ts.map +1 -0
- package/dist/agent-pins.js +102 -0
- package/dist/agent-pins.js.map +1 -0
- package/dist/app.d.ts +22 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +20 -2
- package/dist/app.js.map +1 -1
- package/dist/block-binding.d.ts +132 -0
- package/dist/block-binding.d.ts.map +1 -0
- package/dist/block-binding.js +4 -0
- package/dist/block-binding.js.map +1 -0
- package/dist/block-pins.d.ts +22 -0
- package/dist/block-pins.d.ts.map +1 -0
- package/dist/block-pins.js +112 -0
- package/dist/block-pins.js.map +1 -0
- package/dist/cost-binding.d.ts +20 -1
- package/dist/cost-binding.d.ts.map +1 -1
- package/dist/cost-binding.js +4 -0
- package/dist/cost-binding.js.map +1 -1
- package/dist/deploy-versions.d.ts +58 -0
- package/dist/deploy-versions.d.ts.map +1 -0
- package/dist/deploy-versions.js +91 -0
- package/dist/deploy-versions.js.map +1 -0
- package/dist/deployment-binding.d.ts +24 -3
- package/dist/deployment-binding.d.ts.map +1 -1
- package/dist/derive-agent-version.d.ts +69 -0
- package/dist/derive-agent-version.d.ts.map +1 -0
- package/dist/derive-agent-version.js +139 -0
- package/dist/derive-agent-version.js.map +1 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +17 -0
- package/dist/errors.js.map +1 -1
- package/dist/eval-case-binding.d.ts +65 -0
- package/dist/eval-case-binding.d.ts.map +1 -0
- package/dist/eval-case-binding.js +4 -0
- package/dist/eval-case-binding.js.map +1 -0
- package/dist/eval-run-binding.d.ts +30 -0
- package/dist/eval-run-binding.d.ts.map +1 -1
- package/dist/eval-run-dispatcher.d.ts +38 -3
- package/dist/eval-run-dispatcher.d.ts.map +1 -1
- package/dist/eval-run-dispatcher.js +21 -15
- package/dist/eval-run-dispatcher.js.map +1 -1
- package/dist/eval-suite-binding.d.ts +1 -1
- package/dist/eval-suite-binding.d.ts.map +1 -1
- package/dist/eval-suite-binding.js +2 -0
- package/dist/eval-suite-binding.js.map +1 -1
- package/dist/flow-binding.d.ts +10 -4
- package/dist/flow-binding.d.ts.map +1 -1
- package/dist/flow-pins.d.ts +36 -0
- package/dist/flow-pins.d.ts.map +1 -0
- package/dist/flow-pins.js +81 -0
- package/dist/flow-pins.js.map +1 -0
- package/dist/index.d.ts +17 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/judged-dispatcher.d.ts +134 -0
- package/dist/judged-dispatcher.d.ts.map +1 -0
- package/dist/judged-dispatcher.js +297 -0
- package/dist/judged-dispatcher.js.map +1 -0
- package/dist/judged-items.d.ts +86 -0
- package/dist/judged-items.d.ts.map +1 -0
- package/dist/judged-items.js +184 -0
- package/dist/judged-items.js.map +1 -0
- package/dist/judgment-binding.d.ts +316 -0
- package/dist/judgment-binding.d.ts.map +1 -0
- package/dist/judgment-binding.js +19 -0
- package/dist/judgment-binding.js.map +1 -0
- package/dist/openapi/generate.d.ts.map +1 -1
- package/dist/openapi/generate.js +4 -1
- package/dist/openapi/generate.js.map +1 -1
- package/dist/openapi/operations.d.ts.map +1 -1
- package/dist/openapi/operations.js +461 -7
- package/dist/openapi/operations.js.map +1 -1
- package/dist/openapi/schemas.d.ts +40 -0
- package/dist/openapi/schemas.d.ts.map +1 -1
- package/dist/openapi/schemas.js +843 -7
- package/dist/openapi/schemas.js.map +1 -1
- package/dist/provider-binding.d.ts +12 -7
- package/dist/provider-binding.d.ts.map +1 -1
- package/dist/routes/agents.d.ts +9 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +175 -11
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/blocks.d.ts +19 -0
- package/dist/routes/blocks.d.ts.map +1 -0
- package/dist/routes/blocks.js +281 -0
- package/dist/routes/blocks.js.map +1 -0
- package/dist/routes/cost.d.ts.map +1 -1
- package/dist/routes/cost.js +47 -2
- package/dist/routes/cost.js.map +1 -1
- package/dist/routes/deployments.d.ts +3 -0
- package/dist/routes/deployments.d.ts.map +1 -1
- package/dist/routes/deployments.js +208 -55
- package/dist/routes/deployments.js.map +1 -1
- package/dist/routes/eval-comparison.d.ts +14 -0
- package/dist/routes/eval-comparison.d.ts.map +1 -0
- package/dist/routes/eval-comparison.js +87 -0
- package/dist/routes/eval-comparison.js.map +1 -0
- package/dist/routes/eval-runs.d.ts.map +1 -1
- package/dist/routes/eval-runs.js +8 -0
- package/dist/routes/eval-runs.js.map +1 -1
- package/dist/routes/flows.d.ts +13 -1
- package/dist/routes/flows.d.ts.map +1 -1
- package/dist/routes/flows.js +44 -3
- package/dist/routes/flows.js.map +1 -1
- package/dist/routes/hierarchy-errors.d.ts +35 -0
- package/dist/routes/hierarchy-errors.d.ts.map +1 -0
- package/dist/routes/hierarchy-errors.js +39 -0
- package/dist/routes/hierarchy-errors.js.map +1 -0
- package/dist/routes/judged-suites.d.ts +20 -0
- package/dist/routes/judged-suites.d.ts.map +1 -0
- package/dist/routes/judged-suites.js +272 -0
- package/dist/routes/judged-suites.js.map +1 -0
- package/dist/routes/judgment-context.d.ts +22 -0
- package/dist/routes/judgment-context.d.ts.map +1 -0
- package/dist/routes/judgment-context.js +88 -0
- package/dist/routes/judgment-context.js.map +1 -0
- package/dist/routes/judgment-flow-context.d.ts +32 -0
- package/dist/routes/judgment-flow-context.d.ts.map +1 -0
- package/dist/routes/judgment-flow-context.js +195 -0
- package/dist/routes/judgment-flow-context.js.map +1 -0
- package/dist/routes/judgments.d.ts +41 -0
- package/dist/routes/judgments.d.ts.map +1 -0
- package/dist/routes/judgments.js +566 -0
- package/dist/routes/judgments.js.map +1 -0
- package/dist/routes/orgs.d.ts +5 -2
- package/dist/routes/orgs.d.ts.map +1 -1
- package/dist/routes/orgs.js +38 -22
- package/dist/routes/orgs.js.map +1 -1
- package/dist/routes/policies.d.ts.map +1 -1
- package/dist/routes/policies.js +12 -1
- package/dist/routes/policies.js.map +1 -1
- package/dist/routes/projects.d.ts +10 -2
- package/dist/routes/projects.d.ts.map +1 -1
- package/dist/routes/projects.js +87 -79
- package/dist/routes/projects.js.map +1 -1
- package/dist/routes/providers.d.ts.map +1 -1
- package/dist/routes/providers.js +6 -1
- package/dist/routes/providers.js.map +1 -1
- package/dist/routes/runs.js +24 -3
- package/dist/routes/runs.js.map +1 -1
- package/dist/routes/teams.d.ts +6 -2
- package/dist/routes/teams.d.ts.map +1 -1
- package/dist/routes/teams.js +77 -73
- package/dist/routes/teams.js.map +1 -1
- package/openapi.json +13545 -10103
- package/package.json +21 -21
- package/src/agent-binding.ts +19 -4
- package/src/agent-pins.ts +147 -0
- package/src/app.ts +71 -2
- package/src/block-binding.ts +137 -0
- package/src/block-pins.ts +148 -0
- package/src/cost-binding.ts +21 -1
- package/src/deploy-versions.ts +157 -0
- package/src/deployment-binding.ts +27 -3
- package/src/derive-agent-version.ts +206 -0
- package/src/errors.ts +17 -0
- package/src/eval-case-binding.ts +71 -0
- package/src/eval-run-binding.ts +33 -0
- package/src/eval-run-dispatcher.ts +57 -16
- package/src/eval-suite-binding.ts +2 -0
- package/src/flow-binding.ts +11 -4
- package/src/flow-pins.ts +113 -0
- package/src/index.ts +85 -2
- package/src/judged-dispatcher.ts +507 -0
- package/src/judged-items.ts +263 -0
- package/src/judgment-binding.ts +349 -0
- package/src/openapi/generate.ts +7 -1
- package/src/openapi/operations.ts +523 -7
- package/src/openapi/schemas.ts +1009 -88
- package/src/provider-binding.ts +12 -7
- package/src/routes/agents.ts +243 -19
- package/src/routes/blocks.ts +362 -0
- package/src/routes/cost.ts +55 -1
- package/src/routes/deployments.ts +266 -56
- package/src/routes/eval-comparison.ts +101 -0
- package/src/routes/eval-runs.ts +11 -0
- package/src/routes/flows.ts +63 -5
- package/src/routes/hierarchy-errors.ts +51 -0
- package/src/routes/judged-suites.ts +363 -0
- package/src/routes/judgment-context.ts +128 -0
- package/src/routes/judgment-flow-context.ts +245 -0
- package/src/routes/judgments.ts +743 -0
- package/src/routes/orgs.ts +44 -27
- package/src/routes/policies.ts +19 -0
- package/src/routes/projects.ts +106 -95
- package/src/routes/providers.ts +5 -0
- package/src/routes/runs.ts +28 -3
- package/src/routes/teams.ts +96 -90
package/src/routes/teams.ts
CHANGED
|
@@ -19,6 +19,7 @@ import type { Cursor, OrgId, TeamId, TenantId, UserId } from '@kindgi/types';
|
|
|
19
19
|
import { statusFor, toWireError } from '../errors.js';
|
|
20
20
|
import type { Authorizer } from '../middleware/authorize.js';
|
|
21
21
|
import type { AppEnv } from '../types.js';
|
|
22
|
+
import { slugConflictError } from './hierarchy-errors.js';
|
|
22
23
|
import { clampLimit } from './pagination.js';
|
|
23
24
|
|
|
24
25
|
/**
|
|
@@ -29,9 +30,13 @@ import { clampLimit } from './pagination.js';
|
|
|
29
30
|
* `?limit=` / `?cursor=` / `?orgId=` /
|
|
30
31
|
* `?nameContains=`.
|
|
31
32
|
* - `POST /` — create; body `{ name, slug,
|
|
32
|
-
* description?, orgId? }`; 201 `{ id }
|
|
33
|
+
* description?, orgId? }`; 201 `{ id }`;
|
|
34
|
+
* 409 `slug-conflict` when the tenant
|
|
35
|
+
* has a team with that slug.
|
|
33
36
|
* - `GET /:teamId` — get; 200 or 404 `team-not-found`.
|
|
34
|
-
* - `PATCH /:teamId` — partial update; 204
|
|
37
|
+
* - `PATCH /:teamId` — partial update; 204, 404
|
|
38
|
+
* `team-not-found` or 409
|
|
39
|
+
* `slug-conflict`.
|
|
35
40
|
* - `DELETE /:teamId` — 204 idempotent.
|
|
36
41
|
* - `GET /:teamId/memberships` — list; cursor-paginated.
|
|
37
42
|
* - `POST /:teamId/memberships` — add member; body `{ userId, role }`;
|
|
@@ -193,17 +198,24 @@ export function teamsRouter(
|
|
|
193
198
|
: ('00000000-0000-0000-0000-000000000000' as UserId);
|
|
194
199
|
const result = await tenantHierarchy.createTeam({ tenantId, creatorUserId, spec });
|
|
195
200
|
if (result.kind === 'err') {
|
|
196
|
-
const
|
|
197
|
-
result.error.code === 'slug-conflict'
|
|
198
|
-
|
|
199
|
-
|
|
201
|
+
const error =
|
|
202
|
+
result.error.code === 'slug-conflict'
|
|
203
|
+
? slugConflictError('team', spec.slug)
|
|
204
|
+
: { code: 'internal-server-error', message: result.error.message };
|
|
205
|
+
c.status(statusFor(error.code) as never);
|
|
206
|
+
return c.json(toWireError(error, requestId));
|
|
200
207
|
}
|
|
201
208
|
c.status(201);
|
|
202
209
|
return c.json({ id: result.value.teamId as unknown as string });
|
|
203
210
|
}
|
|
204
|
-
const
|
|
211
|
+
const outcome = await binding.create(tenantId, spec);
|
|
212
|
+
if (outcome.kind === 'slug-conflict') {
|
|
213
|
+
const error = slugConflictError('team', outcome.slug);
|
|
214
|
+
c.status(statusFor(error.code) as never);
|
|
215
|
+
return c.json(toWireError(error, requestId));
|
|
216
|
+
}
|
|
205
217
|
c.status(201);
|
|
206
|
-
return c.json({ id:
|
|
218
|
+
return c.json({ id: outcome.teamId as unknown as string });
|
|
207
219
|
});
|
|
208
220
|
|
|
209
221
|
// ---------- GET /:teamId/memberships ----------
|
|
@@ -300,39 +312,38 @@ export function teamsRouter(
|
|
|
300
312
|
),
|
|
301
313
|
);
|
|
302
314
|
}
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
code: 'team-not-found',
|
|
328
|
-
message: `No team with id "${teamId as unknown as string}"`,
|
|
329
|
-
teamId: teamId as unknown as string,
|
|
330
|
-
},
|
|
331
|
-
requestId,
|
|
332
|
-
),
|
|
333
|
-
);
|
|
315
|
+
// Racy — the team can be deleted between the preliminary get and the add.
|
|
316
|
+
const teamGone = () => {
|
|
317
|
+
c.status(statusFor('team-not-found') as never);
|
|
318
|
+
return c.json(
|
|
319
|
+
toWireError(
|
|
320
|
+
{
|
|
321
|
+
code: 'team-not-found',
|
|
322
|
+
message: `No team with id "${teamId as unknown as string}"`,
|
|
323
|
+
teamId: teamId as unknown as string,
|
|
324
|
+
},
|
|
325
|
+
requestId,
|
|
326
|
+
),
|
|
327
|
+
);
|
|
328
|
+
};
|
|
329
|
+
if (authorizer !== undefined) {
|
|
330
|
+
const res = await tenantHierarchy.addTeamMember({
|
|
331
|
+
tenantId,
|
|
332
|
+
teamId,
|
|
333
|
+
userId: b.userId as unknown as UserId,
|
|
334
|
+
role: b.role as TeamRole,
|
|
335
|
+
});
|
|
336
|
+
if (res.kind === 'err') {
|
|
337
|
+
if (res.error.code === 'team-not-found') return teamGone();
|
|
338
|
+
throw new Error(res.error.message, { cause: res.error });
|
|
334
339
|
}
|
|
335
|
-
|
|
340
|
+
} else {
|
|
341
|
+
const outcome = await membershipBinding.add(tenantId, {
|
|
342
|
+
teamId,
|
|
343
|
+
userId: b.userId as unknown as UserId,
|
|
344
|
+
role: b.role,
|
|
345
|
+
});
|
|
346
|
+
if (outcome.kind === 'team-not-found') return teamGone();
|
|
336
347
|
}
|
|
337
348
|
c.status(201);
|
|
338
349
|
return c.json({
|
|
@@ -387,38 +398,33 @@ export function teamsRouter(
|
|
|
387
398
|
),
|
|
388
399
|
);
|
|
389
400
|
}
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
requestId,
|
|
418
|
-
),
|
|
419
|
-
);
|
|
420
|
-
}
|
|
421
|
-
throw cause;
|
|
401
|
+
const outcome = await membershipBinding.updateRole(tenantId, teamId, userId, b.role);
|
|
402
|
+
if (outcome.kind === 'team-membership-not-found') {
|
|
403
|
+
c.status(statusFor('team-membership-not-found') as never);
|
|
404
|
+
return c.json(
|
|
405
|
+
toWireError(
|
|
406
|
+
{
|
|
407
|
+
code: 'team-membership-not-found',
|
|
408
|
+
message: `No membership for team "${teamId as unknown as string}" + user "${userId as unknown as string}"`,
|
|
409
|
+
teamId: teamId as unknown as string,
|
|
410
|
+
userId: userId as unknown as string,
|
|
411
|
+
},
|
|
412
|
+
requestId,
|
|
413
|
+
),
|
|
414
|
+
);
|
|
415
|
+
}
|
|
416
|
+
if (outcome.kind === 'team-not-found') {
|
|
417
|
+
c.status(statusFor('team-not-found') as never);
|
|
418
|
+
return c.json(
|
|
419
|
+
toWireError(
|
|
420
|
+
{
|
|
421
|
+
code: 'team-not-found',
|
|
422
|
+
message: `No team with id "${teamId as unknown as string}"`,
|
|
423
|
+
teamId: teamId as unknown as string,
|
|
424
|
+
},
|
|
425
|
+
requestId,
|
|
426
|
+
),
|
|
427
|
+
);
|
|
422
428
|
}
|
|
423
429
|
c.status(204);
|
|
424
430
|
return c.body(null);
|
|
@@ -522,24 +528,24 @@ export function teamsRouter(
|
|
|
522
528
|
);
|
|
523
529
|
}
|
|
524
530
|
}
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
531
|
+
const outcome = await binding.update(tenantId, teamId, shaped);
|
|
532
|
+
if (outcome.kind === 'team-not-found') {
|
|
533
|
+
c.status(statusFor('team-not-found') as never);
|
|
534
|
+
return c.json(
|
|
535
|
+
toWireError(
|
|
536
|
+
{
|
|
537
|
+
code: 'team-not-found',
|
|
538
|
+
message: `No team with id "${teamId as unknown as string}"`,
|
|
539
|
+
teamId: teamId as unknown as string,
|
|
540
|
+
},
|
|
541
|
+
requestId,
|
|
542
|
+
),
|
|
543
|
+
);
|
|
544
|
+
}
|
|
545
|
+
if (outcome.kind === 'slug-conflict') {
|
|
546
|
+
const error = slugConflictError('team', outcome.slug);
|
|
547
|
+
c.status(statusFor(error.code) as never);
|
|
548
|
+
return c.json(toWireError(error, requestId));
|
|
543
549
|
}
|
|
544
550
|
c.status(204);
|
|
545
551
|
return c.body(null);
|