@openagentpack/playground 0.0.2 → 0.1.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/bin/playground.js +420 -227
- package/package.json +4 -4
- package/web/assets/index.js +25 -25
package/dist/bin/playground.js
CHANGED
|
@@ -2192,7 +2192,7 @@ async function writeProviderConfig(input) {
|
|
|
2192
2192
|
// ../../apps/server/src/schemas/config.ts
|
|
2193
2193
|
import { z as z3 } from "@hono/zod-openapi";
|
|
2194
2194
|
var AgentsConfigSchema = z3.object({
|
|
2195
|
-
AGENTS_PROVIDER: z3.enum(AGENTS_CONFIG_PROVIDERS2)
|
|
2195
|
+
AGENTS_PROVIDER: z3.enum(AGENTS_CONFIG_PROVIDERS2)
|
|
2196
2196
|
}).catchall(z3.string()).openapi("AgentsConfig");
|
|
2197
2197
|
var AgentsConfigSnapshotSchema = z3.object({
|
|
2198
2198
|
AGENTS_PROVIDER: z3.enum(AGENTS_CONFIG_PROVIDERS2).optional()
|
|
@@ -2357,7 +2357,45 @@ environmentsRoute.openapi(deleteEnvironmentRoute, async (c) => {
|
|
|
2357
2357
|
});
|
|
2358
2358
|
|
|
2359
2359
|
// ../../apps/server/src/routes/files.ts
|
|
2360
|
-
import { OpenAPIHono as OpenAPIHono4 } from "@hono/zod-openapi";
|
|
2360
|
+
import { createRoute as createRoute4, OpenAPIHono as OpenAPIHono4 } from "@hono/zod-openapi";
|
|
2361
|
+
|
|
2362
|
+
// ../../apps/server/src/schemas/files.ts
|
|
2363
|
+
import { z as z5 } from "@hono/zod-openapi";
|
|
2364
|
+
var ProviderFileInfoSchema = z5.object({
|
|
2365
|
+
id: z5.string(),
|
|
2366
|
+
filename: z5.string(),
|
|
2367
|
+
mime_type: z5.string(),
|
|
2368
|
+
size_bytes: z5.number(),
|
|
2369
|
+
created_at: z5.string(),
|
|
2370
|
+
downloadable: z5.boolean().optional(),
|
|
2371
|
+
status: z5.string().optional(),
|
|
2372
|
+
purpose: z5.string().optional(),
|
|
2373
|
+
available: z5.boolean().optional()
|
|
2374
|
+
}).openapi("ProviderFileInfo");
|
|
2375
|
+
var UploadFileFormSchema = z5.object({
|
|
2376
|
+
file: z5.instanceof(File).openapi({ type: "string", format: "binary" })
|
|
2377
|
+
});
|
|
2378
|
+
var FilesResponseSchema = z5.object({
|
|
2379
|
+
files: z5.array(ProviderFileInfoSchema)
|
|
2380
|
+
});
|
|
2381
|
+
var FileStatusesBodySchema = z5.object({
|
|
2382
|
+
fileIds: z5.array(z5.string())
|
|
2383
|
+
});
|
|
2384
|
+
var FileStatusInfoSchema = z5.object({
|
|
2385
|
+
id: z5.string(),
|
|
2386
|
+
status: z5.string().optional(),
|
|
2387
|
+
available: z5.boolean().optional()
|
|
2388
|
+
});
|
|
2389
|
+
var FileStatusesResponseSchema = z5.object({
|
|
2390
|
+
files: z5.array(FileStatusInfoSchema)
|
|
2391
|
+
});
|
|
2392
|
+
var FileParamsSchema = z5.object({
|
|
2393
|
+
id: z5.string().min(1)
|
|
2394
|
+
});
|
|
2395
|
+
var FileDownloadResponseSchema = z5.object({
|
|
2396
|
+
url: z5.string(),
|
|
2397
|
+
expires_at: z5.string().optional()
|
|
2398
|
+
});
|
|
2361
2399
|
|
|
2362
2400
|
// ../../apps/server/src/services/files/upload.ts
|
|
2363
2401
|
import {
|
|
@@ -2411,21 +2449,38 @@ async function getUserFileStatuses(fileIds) {
|
|
|
2411
2449
|
// ../../apps/server/src/routes/files.ts
|
|
2412
2450
|
var filesRoute = new OpenAPIHono4();
|
|
2413
2451
|
var MAX_UPLOAD_BYTES = 100 * 1024 * 1024;
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2452
|
+
var uploadFileRoute = createRoute4({
|
|
2453
|
+
method: "post",
|
|
2454
|
+
path: "/files",
|
|
2455
|
+
operationId: "uploadFile",
|
|
2456
|
+
request: {
|
|
2457
|
+
body: {
|
|
2458
|
+
required: true,
|
|
2459
|
+
content: { "multipart/form-data": { schema: UploadFileFormSchema } }
|
|
2460
|
+
}
|
|
2461
|
+
},
|
|
2462
|
+
responses: {
|
|
2463
|
+
201: {
|
|
2464
|
+
description: "Upload a workspace file",
|
|
2465
|
+
content: { "application/json": { schema: ProviderFileInfoSchema } }
|
|
2466
|
+
},
|
|
2467
|
+
413: {
|
|
2468
|
+
description: "File exceeds the upload size limit",
|
|
2469
|
+
content: { "application/json": { schema: ErrorResponseSchema } }
|
|
2470
|
+
},
|
|
2471
|
+
...errorResponses
|
|
2427
2472
|
}
|
|
2428
|
-
|
|
2473
|
+
});
|
|
2474
|
+
filesRoute.openapi(
|
|
2475
|
+
uploadFileRoute,
|
|
2476
|
+
async (c) => {
|
|
2477
|
+
const { file } = c.req.valid("form");
|
|
2478
|
+
if (file.size === 0) {
|
|
2479
|
+
return c.json({ error: { message: "file is required" } }, 400);
|
|
2480
|
+
}
|
|
2481
|
+
if (file.size > MAX_UPLOAD_BYTES) {
|
|
2482
|
+
return c.json({ error: { message: "file too large" } }, 413);
|
|
2483
|
+
}
|
|
2429
2484
|
const content = new Uint8Array(await file.arrayBuffer());
|
|
2430
2485
|
const info = await uploadUserFile({
|
|
2431
2486
|
content,
|
|
@@ -2433,80 +2488,109 @@ filesRoute.post("/files", async (c) => {
|
|
|
2433
2488
|
mimeType: file.type || void 0
|
|
2434
2489
|
});
|
|
2435
2490
|
return c.json(info, 201);
|
|
2436
|
-
}
|
|
2437
|
-
|
|
2491
|
+
},
|
|
2492
|
+
(result, c) => {
|
|
2493
|
+
if (!result.success) return c.json({ error: { message: "file is required" } }, 400);
|
|
2438
2494
|
}
|
|
2439
|
-
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
2444
|
-
|
|
2445
|
-
|
|
2495
|
+
);
|
|
2496
|
+
var listFilesRoute = createRoute4({
|
|
2497
|
+
method: "get",
|
|
2498
|
+
path: "/files",
|
|
2499
|
+
operationId: "listFiles",
|
|
2500
|
+
responses: {
|
|
2501
|
+
200: {
|
|
2502
|
+
description: "List workspace files",
|
|
2503
|
+
content: { "application/json": { schema: FilesResponseSchema } }
|
|
2504
|
+
},
|
|
2505
|
+
...errorResponses
|
|
2446
2506
|
}
|
|
2447
2507
|
});
|
|
2448
|
-
filesRoute.
|
|
2449
|
-
|
|
2450
|
-
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
2508
|
+
filesRoute.openapi(listFilesRoute, async (c) => {
|
|
2509
|
+
const files = await listUserFiles();
|
|
2510
|
+
return c.json({ files }, 200);
|
|
2511
|
+
});
|
|
2512
|
+
var getFileStatusesRoute = createRoute4({
|
|
2513
|
+
method: "post",
|
|
2514
|
+
path: "/files/status",
|
|
2515
|
+
operationId: "getFileStatuses",
|
|
2516
|
+
request: {
|
|
2517
|
+
body: {
|
|
2518
|
+
required: true,
|
|
2519
|
+
content: { "application/json": { schema: FileStatusesBodySchema } }
|
|
2520
|
+
}
|
|
2521
|
+
},
|
|
2522
|
+
responses: {
|
|
2523
|
+
200: {
|
|
2524
|
+
description: "Get file scan statuses",
|
|
2525
|
+
content: { "application/json": { schema: FileStatusesResponseSchema } }
|
|
2526
|
+
},
|
|
2527
|
+
...errorResponses
|
|
2464
2528
|
}
|
|
2465
2529
|
});
|
|
2466
|
-
filesRoute.
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2530
|
+
filesRoute.openapi(
|
|
2531
|
+
getFileStatusesRoute,
|
|
2532
|
+
async (c) => {
|
|
2533
|
+
const { fileIds } = c.req.valid("json");
|
|
2534
|
+
const files = await getUserFileStatuses(fileIds);
|
|
2535
|
+
return c.json({ files }, 200);
|
|
2536
|
+
},
|
|
2537
|
+
(result, c) => {
|
|
2538
|
+
if (!result.success) return c.json({ error: { message: "fileIds (string[]) is required" } }, 400);
|
|
2470
2539
|
}
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2540
|
+
);
|
|
2541
|
+
var downloadFileRoute = createRoute4({
|
|
2542
|
+
method: "get",
|
|
2543
|
+
path: "/files/{id}/download",
|
|
2544
|
+
operationId: "downloadFile",
|
|
2545
|
+
request: { params: FileParamsSchema },
|
|
2546
|
+
responses: {
|
|
2547
|
+
200: {
|
|
2548
|
+
description: "Resolve a short-lived file download URL",
|
|
2549
|
+
content: { "application/json": { schema: FileDownloadResponseSchema } }
|
|
2550
|
+
},
|
|
2551
|
+
...errorResponses
|
|
2476
2552
|
}
|
|
2477
2553
|
});
|
|
2478
|
-
filesRoute.
|
|
2479
|
-
const id = c.req.
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2554
|
+
filesRoute.openapi(downloadFileRoute, async (c) => {
|
|
2555
|
+
const { id } = c.req.valid("param");
|
|
2556
|
+
const result = await getUserFileDownloadUrl(id);
|
|
2557
|
+
return c.json(result, 200);
|
|
2558
|
+
});
|
|
2559
|
+
var deleteFileRoute = createRoute4({
|
|
2560
|
+
method: "delete",
|
|
2561
|
+
path: "/files/{id}",
|
|
2562
|
+
operationId: "deleteFile",
|
|
2563
|
+
request: { params: FileParamsSchema },
|
|
2564
|
+
responses: {
|
|
2565
|
+
204: { description: "File deleted" },
|
|
2566
|
+
...errorResponses
|
|
2488
2567
|
}
|
|
2489
2568
|
});
|
|
2569
|
+
filesRoute.openapi(deleteFileRoute, async (c) => {
|
|
2570
|
+
const { id } = c.req.valid("param");
|
|
2571
|
+
await deleteUserFile(id);
|
|
2572
|
+
return c.body(null, 204);
|
|
2573
|
+
});
|
|
2490
2574
|
|
|
2491
2575
|
// ../../apps/server/src/routes/models.ts
|
|
2492
|
-
import { createRoute as
|
|
2576
|
+
import { createRoute as createRoute5, OpenAPIHono as OpenAPIHono5 } from "@hono/zod-openapi";
|
|
2493
2577
|
import { listProviderModelsForContext } from "@openagentpack/sdk";
|
|
2494
2578
|
|
|
2495
2579
|
// ../../apps/server/src/schemas/models.ts
|
|
2496
|
-
import { z as
|
|
2497
|
-
var ModelOptionSchema =
|
|
2498
|
-
id:
|
|
2499
|
-
display_name:
|
|
2500
|
-
is_enabled:
|
|
2501
|
-
is_new:
|
|
2580
|
+
import { z as z6 } from "@hono/zod-openapi";
|
|
2581
|
+
var ModelOptionSchema = z6.object({
|
|
2582
|
+
id: z6.string(),
|
|
2583
|
+
display_name: z6.string(),
|
|
2584
|
+
is_enabled: z6.boolean().optional(),
|
|
2585
|
+
is_new: z6.boolean().optional()
|
|
2502
2586
|
});
|
|
2503
|
-
var ModelsResponseSchema =
|
|
2504
|
-
models:
|
|
2587
|
+
var ModelsResponseSchema = z6.object({
|
|
2588
|
+
models: z6.array(ModelOptionSchema)
|
|
2505
2589
|
});
|
|
2506
2590
|
|
|
2507
2591
|
// ../../apps/server/src/routes/models.ts
|
|
2508
2592
|
var modelsRoute = new OpenAPIHono5();
|
|
2509
|
-
var listModelsRoute =
|
|
2593
|
+
var listModelsRoute = createRoute5({
|
|
2510
2594
|
method: "get",
|
|
2511
2595
|
path: "/models",
|
|
2512
2596
|
responses: {
|
|
@@ -2534,73 +2618,73 @@ modelsRoute.openapi(listModelsRoute, async (c) => {
|
|
|
2534
2618
|
});
|
|
2535
2619
|
|
|
2536
2620
|
// ../../apps/server/src/routes/sessions/index.ts
|
|
2537
|
-
import { createRoute as
|
|
2621
|
+
import { createRoute as createRoute10, OpenAPIHono as OpenAPIHono10 } from "@hono/zod-openapi";
|
|
2538
2622
|
|
|
2539
2623
|
// ../../apps/server/src/schemas/sessions.ts
|
|
2540
|
-
import { z as
|
|
2624
|
+
import { z as z7 } from "@hono/zod-openapi";
|
|
2541
2625
|
import { SessionEventSchema, SessionSchema } from "@openagentpack/sdk";
|
|
2542
|
-
var SessionListResponseSchema =
|
|
2543
|
-
data:
|
|
2544
|
-
next_page_token:
|
|
2626
|
+
var SessionListResponseSchema = z7.object({
|
|
2627
|
+
data: z7.array(SessionSchema),
|
|
2628
|
+
next_page_token: z7.string().nullish()
|
|
2545
2629
|
}).openapi("SessionListResponse");
|
|
2546
|
-
var SessionDetailResponseSchema =
|
|
2630
|
+
var SessionDetailResponseSchema = z7.object({
|
|
2547
2631
|
session: SessionSchema,
|
|
2548
|
-
events:
|
|
2549
|
-
events_next_page_token:
|
|
2632
|
+
events: z7.array(SessionEventSchema),
|
|
2633
|
+
events_next_page_token: z7.string().nullish()
|
|
2550
2634
|
}).openapi("SessionDetailResponse");
|
|
2551
|
-
var SessionEventsPageResponseSchema =
|
|
2552
|
-
events:
|
|
2553
|
-
events_next_page_token:
|
|
2635
|
+
var SessionEventsPageResponseSchema = z7.object({
|
|
2636
|
+
events: z7.array(SessionEventSchema),
|
|
2637
|
+
events_next_page_token: z7.string().nullish()
|
|
2554
2638
|
}).openapi("SessionEventsPageResponse");
|
|
2555
|
-
var SessionDeleteResponseSchema =
|
|
2556
|
-
session_id:
|
|
2557
|
-
deleted:
|
|
2639
|
+
var SessionDeleteResponseSchema = z7.object({
|
|
2640
|
+
session_id: z7.string(),
|
|
2641
|
+
deleted: z7.boolean()
|
|
2558
2642
|
}).openapi("SessionDeleteResponse");
|
|
2559
|
-
var SessionsQuerySchema =
|
|
2643
|
+
var SessionsQuerySchema = z7.object({
|
|
2560
2644
|
// Non-numeric values resolve to `undefined` so the handler clamps to a
|
|
2561
2645
|
// default instead of the request being rejected with a 400.
|
|
2562
|
-
limit:
|
|
2646
|
+
limit: z7.preprocess((value) => {
|
|
2563
2647
|
const parsed = Number(value);
|
|
2564
2648
|
return Number.isFinite(parsed) ? parsed : void 0;
|
|
2565
|
-
},
|
|
2566
|
-
agentId:
|
|
2649
|
+
}, z7.number().int().optional()),
|
|
2650
|
+
agentId: z7.string().optional(),
|
|
2567
2651
|
// Opaque cursor for the next page (provider's next_page / next_page_token, passed through verbatim).
|
|
2568
|
-
pageToken:
|
|
2652
|
+
pageToken: z7.string().optional()
|
|
2569
2653
|
});
|
|
2570
|
-
var SessionDetailQuerySchema =
|
|
2571
|
-
agentId:
|
|
2654
|
+
var SessionDetailQuerySchema = z7.object({
|
|
2655
|
+
agentId: z7.string().optional()
|
|
2572
2656
|
});
|
|
2573
|
-
var SessionEventsQuerySchema =
|
|
2574
|
-
agentId:
|
|
2575
|
-
pageToken:
|
|
2576
|
-
limit:
|
|
2657
|
+
var SessionEventsQuerySchema = z7.object({
|
|
2658
|
+
agentId: z7.string().optional(),
|
|
2659
|
+
pageToken: z7.string().optional(),
|
|
2660
|
+
limit: z7.preprocess((value) => {
|
|
2577
2661
|
const parsed = Number(value);
|
|
2578
2662
|
return Number.isFinite(parsed) ? parsed : void 0;
|
|
2579
|
-
},
|
|
2663
|
+
}, z7.number().int().optional())
|
|
2580
2664
|
});
|
|
2581
|
-
var SessionParamsSchema =
|
|
2582
|
-
sessionId:
|
|
2665
|
+
var SessionParamsSchema = z7.object({
|
|
2666
|
+
sessionId: z7.string()
|
|
2583
2667
|
});
|
|
2584
|
-
var CreateSessionBodySchema =
|
|
2585
|
-
agentId:
|
|
2586
|
-
prompt:
|
|
2668
|
+
var CreateSessionBodySchema = z7.object({
|
|
2669
|
+
agentId: z7.string(),
|
|
2670
|
+
prompt: z7.string().min(1),
|
|
2587
2671
|
// Required: a session must be pinned to a cloud environment (sandbox). Both transports
|
|
2588
2672
|
// enforce this so Mode A (REST/OpenAPI) and Mode B (console) reject env-less creates.
|
|
2589
|
-
environmentId:
|
|
2673
|
+
environmentId: z7.string().min(1),
|
|
2590
2674
|
// Optional: cloud vault ids to bind a user-supplied credential so the sandbox receives it.
|
|
2591
2675
|
// Top-level binding shape matches the console createSession.
|
|
2592
|
-
vaultIds:
|
|
2593
|
-
title:
|
|
2676
|
+
vaultIds: z7.array(z7.string()).optional(),
|
|
2677
|
+
title: z7.string().optional(),
|
|
2594
2678
|
// Uploaded files to mount as session resources so the task can read the user's files.
|
|
2595
2679
|
// Each file needs a mount_path (provider rejects a file resource without one).
|
|
2596
|
-
files:
|
|
2680
|
+
files: z7.array(z7.object({ fileId: z7.string(), mountPath: z7.string() })).optional(),
|
|
2597
2681
|
// Model the agent should run for this session. If present, createSession applies it
|
|
2598
2682
|
// to the agent config immediately before starting the run.
|
|
2599
|
-
model:
|
|
2683
|
+
model: z7.string().optional()
|
|
2600
2684
|
});
|
|
2601
|
-
var SendMessageBodySchema =
|
|
2602
|
-
agentId:
|
|
2603
|
-
message:
|
|
2685
|
+
var SendMessageBodySchema = z7.object({
|
|
2686
|
+
agentId: z7.string().optional(),
|
|
2687
|
+
message: z7.string().min(1)
|
|
2604
2688
|
});
|
|
2605
2689
|
|
|
2606
2690
|
// ../../apps/server/src/services/sessions/event-sanitizer.ts
|
|
@@ -2611,9 +2695,9 @@ function shouldIncludeDebugRaw(request) {
|
|
|
2611
2695
|
}
|
|
2612
2696
|
|
|
2613
2697
|
// ../../apps/server/src/routes/sessions/detail.ts
|
|
2614
|
-
import { createRoute as
|
|
2698
|
+
import { createRoute as createRoute6, OpenAPIHono as OpenAPIHono6 } from "@hono/zod-openapi";
|
|
2615
2699
|
var sessionsDetailRoute = new OpenAPIHono6();
|
|
2616
|
-
var getSessionRoute =
|
|
2700
|
+
var getSessionRoute = createRoute6({
|
|
2617
2701
|
method: "get",
|
|
2618
2702
|
path: "/sessions/{sessionId}",
|
|
2619
2703
|
request: {
|
|
@@ -2642,7 +2726,7 @@ sessionsDetailRoute.openapi(getSessionRoute, async (c) => {
|
|
|
2642
2726
|
200
|
|
2643
2727
|
);
|
|
2644
2728
|
});
|
|
2645
|
-
var deleteSessionRoute =
|
|
2729
|
+
var deleteSessionRoute = createRoute6({
|
|
2646
2730
|
method: "delete",
|
|
2647
2731
|
path: "/sessions/{sessionId}",
|
|
2648
2732
|
request: {
|
|
@@ -2665,9 +2749,9 @@ sessionsDetailRoute.openapi(deleteSessionRoute, async (c) => {
|
|
|
2665
2749
|
});
|
|
2666
2750
|
|
|
2667
2751
|
// ../../apps/server/src/routes/sessions/events.ts
|
|
2668
|
-
import { createRoute as
|
|
2752
|
+
import { createRoute as createRoute7, OpenAPIHono as OpenAPIHono7 } from "@hono/zod-openapi";
|
|
2669
2753
|
var sessionsEventsRoute = new OpenAPIHono7();
|
|
2670
|
-
var listSessionEventsRoute =
|
|
2754
|
+
var listSessionEventsRoute = createRoute7({
|
|
2671
2755
|
method: "get",
|
|
2672
2756
|
path: "/sessions/{sessionId}/events",
|
|
2673
2757
|
request: {
|
|
@@ -2704,9 +2788,9 @@ sessionsEventsRoute.openapi(listSessionEventsRoute, async (c) => {
|
|
|
2704
2788
|
});
|
|
2705
2789
|
|
|
2706
2790
|
// ../../apps/server/src/routes/sessions/messages.ts
|
|
2707
|
-
import { createRoute as
|
|
2791
|
+
import { createRoute as createRoute8, OpenAPIHono as OpenAPIHono8 } from "@hono/zod-openapi";
|
|
2708
2792
|
var sessionsMessagesRoute = new OpenAPIHono8();
|
|
2709
|
-
var sendMessageRoute =
|
|
2793
|
+
var sendMessageRoute = createRoute8({
|
|
2710
2794
|
method: "post",
|
|
2711
2795
|
path: "/sessions/{sessionId}/messages",
|
|
2712
2796
|
request: {
|
|
@@ -2735,15 +2819,15 @@ sessionsMessagesRoute.openapi(sendMessageRoute, async (c) => {
|
|
|
2735
2819
|
});
|
|
2736
2820
|
|
|
2737
2821
|
// ../../apps/server/src/routes/sessions/stream.ts
|
|
2738
|
-
import { createRoute as
|
|
2822
|
+
import { createRoute as createRoute9, OpenAPIHono as OpenAPIHono9, z as z8 } from "@hono/zod-openapi";
|
|
2739
2823
|
var sessionsStreamRoute = new OpenAPIHono9();
|
|
2740
|
-
var SessionStreamQuerySchema =
|
|
2741
|
-
after:
|
|
2824
|
+
var SessionStreamQuerySchema = z8.object({
|
|
2825
|
+
after: z8.preprocess((value) => {
|
|
2742
2826
|
const parsed = Number(value);
|
|
2743
2827
|
return Number.isFinite(parsed) ? parsed : void 0;
|
|
2744
|
-
},
|
|
2828
|
+
}, z8.number().int().optional())
|
|
2745
2829
|
});
|
|
2746
|
-
var streamSessionRoute =
|
|
2830
|
+
var streamSessionRoute = createRoute9({
|
|
2747
2831
|
method: "get",
|
|
2748
2832
|
path: "/sessions/{sessionId}/stream",
|
|
2749
2833
|
request: {
|
|
@@ -2755,7 +2839,7 @@ var streamSessionRoute = createRoute8({
|
|
|
2755
2839
|
description: "Stream session events as Server-Sent Events",
|
|
2756
2840
|
content: {
|
|
2757
2841
|
"text/event-stream": {
|
|
2758
|
-
schema:
|
|
2842
|
+
schema: z8.string().openapi({
|
|
2759
2843
|
description: 'SSE frames with event types "event", "done", and "ping".'
|
|
2760
2844
|
})
|
|
2761
2845
|
}
|
|
@@ -2866,7 +2950,7 @@ data: ${data}
|
|
|
2866
2950
|
|
|
2867
2951
|
// ../../apps/server/src/routes/sessions/index.ts
|
|
2868
2952
|
var sessionsRoute = new OpenAPIHono10();
|
|
2869
|
-
var listSessionsRoute =
|
|
2953
|
+
var listSessionsRoute = createRoute10({
|
|
2870
2954
|
method: "get",
|
|
2871
2955
|
path: "/sessions",
|
|
2872
2956
|
request: {
|
|
@@ -2892,7 +2976,7 @@ sessionsRoute.openapi(listSessionsRoute, async (c) => {
|
|
|
2892
2976
|
});
|
|
2893
2977
|
return c.json({ data: sessions, next_page_token: nextPageToken ?? null }, 200);
|
|
2894
2978
|
});
|
|
2895
|
-
var createSessionRoute =
|
|
2979
|
+
var createSessionRoute = createRoute10({
|
|
2896
2980
|
method: "post",
|
|
2897
2981
|
path: "/sessions",
|
|
2898
2982
|
request: {
|
|
@@ -2934,7 +3018,52 @@ sessionsRoute.route("/", sessionsMessagesRoute);
|
|
|
2934
3018
|
sessionsRoute.route("/", sessionsStreamRoute);
|
|
2935
3019
|
|
|
2936
3020
|
// ../../apps/server/src/routes/skills.ts
|
|
2937
|
-
import { OpenAPIHono as OpenAPIHono11 } from "@hono/zod-openapi";
|
|
3021
|
+
import { createRoute as createRoute11, OpenAPIHono as OpenAPIHono11 } from "@hono/zod-openapi";
|
|
3022
|
+
|
|
3023
|
+
// ../../apps/server/src/schemas/skills.ts
|
|
3024
|
+
import { z as z9 } from "@hono/zod-openapi";
|
|
3025
|
+
var ProviderSkillInfoSchema = z9.object({
|
|
3026
|
+
id: z9.string(),
|
|
3027
|
+
name: z9.string(),
|
|
3028
|
+
description: z9.string().optional(),
|
|
3029
|
+
source: z9.enum(["custom", "official"]),
|
|
3030
|
+
status: z9.enum(["checking", "active", "rejected", "deleted"]),
|
|
3031
|
+
latest_version: z9.string().optional(),
|
|
3032
|
+
created_at: z9.string().optional(),
|
|
3033
|
+
updated_at: z9.string().optional()
|
|
3034
|
+
}).openapi("ProviderSkillInfo");
|
|
3035
|
+
var UploadSkillFileFormSchema = z9.object({
|
|
3036
|
+
file: z9.instanceof(File).openapi({ type: "string", format: "binary" })
|
|
3037
|
+
});
|
|
3038
|
+
var CreateSkillBodySchema = z9.object({
|
|
3039
|
+
fileId: z9.string().min(1)
|
|
3040
|
+
});
|
|
3041
|
+
var WarmSkillBodySchema = z9.object({
|
|
3042
|
+
name: z9.string().min(1),
|
|
3043
|
+
url: z9.string().min(1)
|
|
3044
|
+
});
|
|
3045
|
+
var WarmSkillResponseSchema = z9.object({
|
|
3046
|
+
ok: z9.literal(true)
|
|
3047
|
+
});
|
|
3048
|
+
var SkillsQuerySchema = z9.object({
|
|
3049
|
+
source: z9.enum(["custom", "official"]).optional()
|
|
3050
|
+
});
|
|
3051
|
+
var SkillsResponseSchema = z9.object({
|
|
3052
|
+
skills: z9.array(ProviderSkillInfoSchema)
|
|
3053
|
+
});
|
|
3054
|
+
var SkillStatusesBodySchema = z9.object({
|
|
3055
|
+
skillIds: z9.array(z9.string())
|
|
3056
|
+
});
|
|
3057
|
+
var SkillStatusInfoSchema = z9.object({
|
|
3058
|
+
id: z9.string(),
|
|
3059
|
+
status: z9.enum(["checking", "active", "rejected", "deleted"]).optional()
|
|
3060
|
+
});
|
|
3061
|
+
var SkillStatusesResponseSchema = z9.object({
|
|
3062
|
+
skills: z9.array(SkillStatusInfoSchema)
|
|
3063
|
+
});
|
|
3064
|
+
var SkillParamsSchema = z9.object({
|
|
3065
|
+
id: z9.string().min(1)
|
|
3066
|
+
});
|
|
2938
3067
|
|
|
2939
3068
|
// ../../apps/server/src/services/skills/manage.ts
|
|
2940
3069
|
import {
|
|
@@ -3036,145 +3165,209 @@ async function warmSkillByUrl(name, url) {
|
|
|
3036
3165
|
// ../../apps/server/src/routes/skills.ts
|
|
3037
3166
|
var skillsRoute = new OpenAPIHono11();
|
|
3038
3167
|
var MAX_UPLOAD_BYTES2 = 100 * 1024 * 1024;
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
|
|
3048
|
-
|
|
3049
|
-
|
|
3050
|
-
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3168
|
+
var uploadSkillFileRoute = createRoute11({
|
|
3169
|
+
method: "post",
|
|
3170
|
+
path: "/skills/upload-file",
|
|
3171
|
+
operationId: "uploadSkillFile",
|
|
3172
|
+
request: {
|
|
3173
|
+
body: {
|
|
3174
|
+
required: true,
|
|
3175
|
+
content: { "multipart/form-data": { schema: UploadSkillFileFormSchema } }
|
|
3176
|
+
}
|
|
3177
|
+
},
|
|
3178
|
+
responses: {
|
|
3179
|
+
201: {
|
|
3180
|
+
description: "Upload a skill archive as a file pending audit",
|
|
3181
|
+
content: { "application/json": { schema: ProviderFileInfoSchema } }
|
|
3182
|
+
},
|
|
3183
|
+
413: {
|
|
3184
|
+
description: "Skill archive exceeds the upload size limit",
|
|
3185
|
+
content: { "application/json": { schema: ErrorResponseSchema } }
|
|
3186
|
+
},
|
|
3187
|
+
...errorResponses
|
|
3055
3188
|
}
|
|
3056
|
-
|
|
3189
|
+
});
|
|
3190
|
+
skillsRoute.openapi(
|
|
3191
|
+
uploadSkillFileRoute,
|
|
3192
|
+
async (c) => {
|
|
3193
|
+
const { file } = c.req.valid("form");
|
|
3194
|
+
if (file.size === 0) return c.json({ error: { message: "file is required" } }, 400);
|
|
3195
|
+
if (!file.name.toLowerCase().endsWith(".zip")) {
|
|
3196
|
+
return c.json({ error: { message: "skill file must be a .zip" } }, 400);
|
|
3197
|
+
}
|
|
3198
|
+
if (file.size > MAX_UPLOAD_BYTES2) return c.json({ error: { message: "file too large" } }, 413);
|
|
3057
3199
|
const content = new Uint8Array(await file.arrayBuffer());
|
|
3058
3200
|
const info = await uploadUserSkillFile({ content, filename: file.name });
|
|
3059
3201
|
return c.json(info, 201);
|
|
3060
|
-
}
|
|
3061
|
-
|
|
3062
|
-
|
|
3063
|
-
});
|
|
3064
|
-
skillsRoute.post("/skills", async (c) => {
|
|
3065
|
-
let body;
|
|
3066
|
-
try {
|
|
3067
|
-
body = await c.req.json();
|
|
3068
|
-
} catch (error) {
|
|
3069
|
-
return jsonError(error, 400);
|
|
3202
|
+
},
|
|
3203
|
+
(result, c) => {
|
|
3204
|
+
if (!result.success) return c.json({ error: { message: "file is required" } }, 400);
|
|
3070
3205
|
}
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3206
|
+
);
|
|
3207
|
+
var createSkillRoute = createRoute11({
|
|
3208
|
+
method: "post",
|
|
3209
|
+
path: "/skills",
|
|
3210
|
+
operationId: "createSkill",
|
|
3211
|
+
request: {
|
|
3212
|
+
body: {
|
|
3213
|
+
required: true,
|
|
3214
|
+
content: { "application/json": { schema: CreateSkillBodySchema } }
|
|
3215
|
+
}
|
|
3216
|
+
},
|
|
3217
|
+
responses: {
|
|
3218
|
+
201: {
|
|
3219
|
+
description: "Create a skill from an audited file",
|
|
3220
|
+
content: { "application/json": { schema: ProviderSkillInfoSchema } }
|
|
3221
|
+
},
|
|
3222
|
+
...errorResponses
|
|
3074
3223
|
}
|
|
3075
|
-
|
|
3224
|
+
});
|
|
3225
|
+
skillsRoute.openapi(
|
|
3226
|
+
createSkillRoute,
|
|
3227
|
+
async (c) => {
|
|
3228
|
+
const { fileId } = c.req.valid("json");
|
|
3076
3229
|
const info = await createUserSkillFromFile(fileId);
|
|
3077
3230
|
return c.json(info, 201);
|
|
3078
|
-
}
|
|
3079
|
-
|
|
3080
|
-
|
|
3081
|
-
});
|
|
3082
|
-
skillsRoute.post("/skills/warm", async (c) => {
|
|
3083
|
-
let body;
|
|
3084
|
-
try {
|
|
3085
|
-
body = await c.req.json();
|
|
3086
|
-
} catch (error) {
|
|
3087
|
-
return jsonError(error, 400);
|
|
3231
|
+
},
|
|
3232
|
+
(result, c) => {
|
|
3233
|
+
if (!result.success) return c.json({ error: { message: "fileId is required" } }, 400);
|
|
3088
3234
|
}
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3235
|
+
);
|
|
3236
|
+
var warmSkillRoute = createRoute11({
|
|
3237
|
+
method: "post",
|
|
3238
|
+
path: "/skills/warm",
|
|
3239
|
+
operationId: "warmSkill",
|
|
3240
|
+
request: {
|
|
3241
|
+
body: {
|
|
3242
|
+
required: true,
|
|
3243
|
+
content: { "application/json": { schema: WarmSkillBodySchema } }
|
|
3244
|
+
}
|
|
3245
|
+
},
|
|
3246
|
+
responses: {
|
|
3247
|
+
200: {
|
|
3248
|
+
description: "Warm a custom skill until it is active",
|
|
3249
|
+
content: { "application/json": { schema: WarmSkillResponseSchema } }
|
|
3250
|
+
},
|
|
3251
|
+
...errorResponses
|
|
3092
3252
|
}
|
|
3093
|
-
|
|
3253
|
+
});
|
|
3254
|
+
skillsRoute.openapi(
|
|
3255
|
+
warmSkillRoute,
|
|
3256
|
+
async (c) => {
|
|
3257
|
+
const { name, url } = c.req.valid("json");
|
|
3094
3258
|
await warmSkillByUrl(name, url);
|
|
3095
3259
|
return c.json({ ok: true }, 200);
|
|
3096
|
-
}
|
|
3097
|
-
|
|
3098
|
-
|
|
3099
|
-
});
|
|
3100
|
-
skillsRoute.get("/skills", async (c) => {
|
|
3101
|
-
const source = c.req.query("source");
|
|
3102
|
-
if (source !== void 0 && source !== "custom" && source !== "official") {
|
|
3103
|
-
return c.json({ error: { message: "source must be 'custom' or 'official'" } }, 400);
|
|
3260
|
+
},
|
|
3261
|
+
(result, c) => {
|
|
3262
|
+
if (!result.success) return c.json({ error: { message: "name and url are required" } }, 400);
|
|
3104
3263
|
}
|
|
3105
|
-
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3264
|
+
);
|
|
3265
|
+
var listSkillsRoute = createRoute11({
|
|
3266
|
+
method: "get",
|
|
3267
|
+
path: "/skills",
|
|
3268
|
+
operationId: "listSkills",
|
|
3269
|
+
request: { query: SkillsQuerySchema },
|
|
3270
|
+
responses: {
|
|
3271
|
+
200: {
|
|
3272
|
+
description: "List custom or official skills",
|
|
3273
|
+
content: { "application/json": { schema: SkillsResponseSchema } }
|
|
3274
|
+
},
|
|
3275
|
+
...errorResponses
|
|
3110
3276
|
}
|
|
3111
3277
|
});
|
|
3112
|
-
skillsRoute.
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
return
|
|
3118
|
-
}
|
|
3119
|
-
|
|
3120
|
-
|
|
3121
|
-
|
|
3278
|
+
skillsRoute.openapi(
|
|
3279
|
+
listSkillsRoute,
|
|
3280
|
+
async (c) => {
|
|
3281
|
+
const { source } = c.req.valid("query");
|
|
3282
|
+
const skills = await listUserSkills(source);
|
|
3283
|
+
return c.json({ skills }, 200);
|
|
3284
|
+
},
|
|
3285
|
+
(result, c) => {
|
|
3286
|
+
if (!result.success) {
|
|
3287
|
+
return c.json({ error: { message: "source must be 'custom' or 'official'" } }, 400);
|
|
3288
|
+
}
|
|
3122
3289
|
}
|
|
3123
|
-
|
|
3124
|
-
|
|
3125
|
-
|
|
3126
|
-
|
|
3127
|
-
|
|
3290
|
+
);
|
|
3291
|
+
var getSkillStatusesRoute = createRoute11({
|
|
3292
|
+
method: "post",
|
|
3293
|
+
path: "/skills/status",
|
|
3294
|
+
operationId: "getSkillStatuses",
|
|
3295
|
+
request: {
|
|
3296
|
+
body: {
|
|
3297
|
+
required: true,
|
|
3298
|
+
content: { "application/json": { schema: SkillStatusesBodySchema } }
|
|
3299
|
+
}
|
|
3300
|
+
},
|
|
3301
|
+
responses: {
|
|
3302
|
+
200: {
|
|
3303
|
+
description: "Get skill scan statuses",
|
|
3304
|
+
content: { "application/json": { schema: SkillStatusesResponseSchema } }
|
|
3305
|
+
},
|
|
3306
|
+
...errorResponses
|
|
3128
3307
|
}
|
|
3129
3308
|
});
|
|
3130
|
-
skillsRoute.
|
|
3131
|
-
|
|
3132
|
-
|
|
3133
|
-
|
|
3309
|
+
skillsRoute.openapi(
|
|
3310
|
+
getSkillStatusesRoute,
|
|
3311
|
+
async (c) => {
|
|
3312
|
+
const { skillIds } = c.req.valid("json");
|
|
3313
|
+
const skills = await getUserSkillStatuses(skillIds);
|
|
3314
|
+
return c.json({ skills }, 200);
|
|
3315
|
+
},
|
|
3316
|
+
(result, c) => {
|
|
3317
|
+
if (!result.success) return c.json({ error: { message: "skillIds (string[]) is required" } }, 400);
|
|
3134
3318
|
}
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
3319
|
+
);
|
|
3320
|
+
var deleteSkillRoute = createRoute11({
|
|
3321
|
+
method: "delete",
|
|
3322
|
+
path: "/skills/{id}",
|
|
3323
|
+
operationId: "deleteSkill",
|
|
3324
|
+
request: { params: SkillParamsSchema },
|
|
3325
|
+
responses: {
|
|
3326
|
+
204: { description: "Skill deleted" },
|
|
3327
|
+
...errorResponses
|
|
3140
3328
|
}
|
|
3141
3329
|
});
|
|
3330
|
+
skillsRoute.openapi(deleteSkillRoute, async (c) => {
|
|
3331
|
+
const { id } = c.req.valid("param");
|
|
3332
|
+
await deleteUserSkill(id);
|
|
3333
|
+
return c.body(null, 204);
|
|
3334
|
+
});
|
|
3142
3335
|
|
|
3143
3336
|
// ../../apps/server/src/routes/vaults.ts
|
|
3144
|
-
import { createRoute as
|
|
3337
|
+
import { createRoute as createRoute12, OpenAPIHono as OpenAPIHono12 } from "@hono/zod-openapi";
|
|
3145
3338
|
import { createCloudVault, deleteCloudVault, listCloudVaults } from "@openagentpack/sdk";
|
|
3146
3339
|
|
|
3147
3340
|
// ../../apps/server/src/schemas/vaults.ts
|
|
3148
|
-
import { z as
|
|
3341
|
+
import { z as z10 } from "@hono/zod-openapi";
|
|
3149
3342
|
import { CloudVaultSchema } from "@openagentpack/sdk";
|
|
3150
3343
|
import { CloudVaultSchema as CloudVaultSchema2 } from "@openagentpack/sdk";
|
|
3151
|
-
var CloudVaultsResponseSchema =
|
|
3152
|
-
vaults:
|
|
3344
|
+
var CloudVaultsResponseSchema = z10.object({
|
|
3345
|
+
vaults: z10.array(CloudVaultSchema)
|
|
3153
3346
|
});
|
|
3154
|
-
var CreateVaultBodySchema =
|
|
3155
|
-
name:
|
|
3156
|
-
metadata:
|
|
3347
|
+
var CreateVaultBodySchema = z10.object({
|
|
3348
|
+
name: z10.string().min(1),
|
|
3349
|
+
metadata: z10.record(z10.string(), z10.string()).optional(),
|
|
3157
3350
|
// The DASHSCOPE_API_KEY stored as the vault's credential secret value. Optional: Mode B
|
|
3158
3351
|
// supplies the user's key; Mode A (local) omits it and the server injects it from its own
|
|
3159
3352
|
// DASHSCOPE_API_KEY env. (Mode B never reaches this REST route — it goes via console RPC.)
|
|
3160
|
-
key:
|
|
3353
|
+
key: z10.string().min(1).optional()
|
|
3161
3354
|
});
|
|
3162
|
-
var CreateVaultResponseSchema =
|
|
3163
|
-
id:
|
|
3164
|
-
type:
|
|
3165
|
-
version:
|
|
3355
|
+
var CreateVaultResponseSchema = z10.object({
|
|
3356
|
+
id: z10.string().nullable(),
|
|
3357
|
+
type: z10.string(),
|
|
3358
|
+
version: z10.number().optional()
|
|
3166
3359
|
});
|
|
3167
|
-
var DeleteVaultResponseSchema =
|
|
3168
|
-
id:
|
|
3169
|
-
type:
|
|
3360
|
+
var DeleteVaultResponseSchema = z10.object({
|
|
3361
|
+
id: z10.string(),
|
|
3362
|
+
type: z10.string()
|
|
3170
3363
|
});
|
|
3171
|
-
var VaultParamsSchema =
|
|
3172
|
-
vaultId:
|
|
3364
|
+
var VaultParamsSchema = z10.object({
|
|
3365
|
+
vaultId: z10.string().min(1)
|
|
3173
3366
|
});
|
|
3174
3367
|
|
|
3175
3368
|
// ../../apps/server/src/routes/vaults.ts
|
|
3176
3369
|
var vaultsRoute = new OpenAPIHono12();
|
|
3177
|
-
var listVaultsRoute =
|
|
3370
|
+
var listVaultsRoute = createRoute12({
|
|
3178
3371
|
method: "get",
|
|
3179
3372
|
path: "/vaults",
|
|
3180
3373
|
responses: {
|
|
@@ -3189,7 +3382,7 @@ vaultsRoute.openapi(listVaultsRoute, async (c) => {
|
|
|
3189
3382
|
const vaults = await withAgentRuntime(DEFAULT_AGENT_ID, (ctx) => listCloudVaults(ctx));
|
|
3190
3383
|
return c.json({ vaults }, 200);
|
|
3191
3384
|
});
|
|
3192
|
-
var createVaultRoute =
|
|
3385
|
+
var createVaultRoute = createRoute12({
|
|
3193
3386
|
method: "post",
|
|
3194
3387
|
path: "/vaults",
|
|
3195
3388
|
request: {
|
|
@@ -3232,7 +3425,7 @@ vaultsRoute.openapi(createVaultRoute, async (c) => {
|
|
|
3232
3425
|
);
|
|
3233
3426
|
return c.json(vault, 200);
|
|
3234
3427
|
});
|
|
3235
|
-
var deleteVaultRoute =
|
|
3428
|
+
var deleteVaultRoute = createRoute12({
|
|
3236
3429
|
method: "delete",
|
|
3237
3430
|
path: "/vaults/{vaultId}",
|
|
3238
3431
|
request: {
|