@openagentpack/playground 0.2.0-beta.0 → 0.3.0-beta-e537ab3-20260722
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 +515 -243
- package/package.json +4 -4
- package/web/assets/index.js +47 -45
- package/web/assets/style.css +1 -1
package/dist/bin/playground.js
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
// src/server.ts
|
|
4
4
|
import "@hono/zod-openapi";
|
|
5
5
|
import { readFileSync } from "fs";
|
|
6
|
-
import { dirname as
|
|
6
|
+
import { dirname as dirname4, join as join3 } from "path";
|
|
7
7
|
import { fileURLToPath } from "url";
|
|
8
8
|
import { serve } from "@hono/node-server";
|
|
9
9
|
import { serveStatic } from "@hono/node-server/serve-static";
|
|
10
10
|
import { bootstrapRuntimeCredentials as bootstrapRuntimeCredentials2 } from "@openagentpack/sdk";
|
|
11
11
|
|
|
12
12
|
// ../../apps/server/src/app.ts
|
|
13
|
-
import { OpenAPIHono as
|
|
13
|
+
import { OpenAPIHono as OpenAPIHono14 } from "@hono/zod-openapi";
|
|
14
14
|
import { cors } from "hono/cors";
|
|
15
15
|
|
|
16
16
|
// ../../apps/server/src/lib/http-error.ts
|
|
@@ -98,12 +98,12 @@ var bailian_default = [
|
|
|
98
98
|
},
|
|
99
99
|
version: 3,
|
|
100
100
|
metadata: {
|
|
101
|
-
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u7BC7\u7A3F\u5B50\u6DA6\u8272\u4E00\u4E0B\uFF0C\u53BB\u6389AI\u5473\uFF0C\u8BFB\u8D77\u6765\u66F4\u81EA\u7136\u987A\u7545\u3002\n\n\u7A3F\u4EF6\uFF1A\n\u5728\u5F53\u4ECA\u6570\u5B57\u5316\u5FEB\u901F\u53D1\u5C55\u7684\u65F6\u4EE3\uFF0C\u6570\u636E\u9A71\u52A8\u51B3\u7B56\u5DF2\u7ECF\u6210\u4E3A\u4F01\u4E1A\u4E0D\u53EF\u5FFD\u89C6\u7684\u6838\u5FC3\u80FD\u529B\u3002\u503C\u5F97\u6CE8\u610F\u7684\u662F\uFF0C\u6570\u636E\u4E0D\u4EC5\u4EC5\u662F\u6570\u5B57\u7684\u7B80\u5355\u5806\u780C\uFF0C\u66F4\u662F\u6218\u7565\u89C4\u5212\u7684\u91CD\u8981\u57FA\u77F3\u3002\u9996\u5148\uFF0C\u6570\u636E\u5E2E\u52A9\u4F01\u4E1A\u6D1E\u5BDF\u5E02\u573A\u8D8B\u52BF\uFF1B\u5176\u6B21\uFF0C\u6570\u636E\u4F18\u5316\u8FD0\u8425\u6548\u7387\uFF1B\u6700\u540E\uFF0C\u6570\u636E\u63D0\u5347\u5BA2\u6237\u4F53\u9A8C\u3002\u7EFC\u4E0A\u6240\u8FF0\uFF0C\u6570\u636E\u9A71\u52A8\u7684\u610F\u4E49\u6DF1\u8FDC\u800C\u91CD\u5927\uFF0C\u5FC5\u5C06\u5F71\u54CD\u672A\u6765\u7684\u5546\u4E1A\u683C\u5C40\u3002",
|
|
102
101
|
template_id: "editor",
|
|
103
102
|
display_name_en: "Article Polish Editor",
|
|
104
|
-
sample_prompt_en: "Please polish this draft to remove AI traces and make it read more naturally.\n\nDraft:\nIn today's era of rapid digital development, data-driven decision-making has become a core capability that enterprises cannot ignore. It is worth noting that data is not just a simple stacking of numbers, but an important cornerstone of strategic planning. First, data helps enterprises gain insights into market trends; second, data optimizes operational efficiency; finally, data improves customer experience. In summary, the significance of data-driven is profound and major, and will surely influence the future business landscape.",
|
|
105
103
|
display_name_zh: "\u6587\u7AE0\u6DA6\u8272",
|
|
106
|
-
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01yCOy3D1yuidLMO8jU_!!6000000006639-2-tps-1728-2368.png"
|
|
104
|
+
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01yCOy3D1yuidLMO8jU_!!6000000006639-2-tps-1728-2368.png",
|
|
105
|
+
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u7BC7\u7A3F\u5B50\u6DA6\u8272\u4E00\u4E0B\uFF0C\u53BB\u6389AI\u5473\uFF0C\u8BFB\u8D77\u6765\u66F4\u81EA\u7136\u987A\u7545\u3002",
|
|
106
|
+
sample_prompt_en: "Please polish this draft to remove AI traces and make it read more naturally."
|
|
107
107
|
},
|
|
108
108
|
tools: [
|
|
109
109
|
{
|
|
@@ -160,12 +160,12 @@ var bailian_default = [
|
|
|
160
160
|
},
|
|
161
161
|
version: 3,
|
|
162
162
|
metadata: {
|
|
163
|
-
sample_prompt_zh: "\u5E2E\u6211\u4EEC\u505A\u4E00\u4E2A\u4EA7\u54C1\u843D\u5730\u9875\uFF0C\u9ED1\u767D\u7F16\u8F91\u98CE\uFF0C\u5E26\u67D4\u5F69\u53D9\u4E8B\u533A\u5757\u3002\n\n\u4EA7\u54C1\uFF1AOpenAgentPack \u2014\u2014 \u5F00\u6E90\u7684 AI Agent \u7BA1\u7406\u5DE5\u5177\uFF0C\u5E2E\u5F00\u53D1\u8005\u4E00\u952E\u53D1\u5E03\u3001\u7248\u672C\u7BA1\u7406\u548C\u8DE8\u4E91\u8FC1\u79FB Agent \u914D\u7F6E\u3002\n\u6838\u5FC3\u5356\u70B9\uFF1A\u914D\u7F6E\u5373\u4EE3\u7801\u53EF\u7248\u672C\u5316\uFF1B\u652F\u6301\u767E\u70BC/Claude/Qoder \u591A\u4E91\uFF1BCLI \u4E00\u952E\u53D1\u5E03\u96F6\u8FD0\u7EF4\u3002\n\u76EE\u6807\u7528\u6237\uFF1AAI \u5E94\u7528\u5F00\u53D1\u8005\u3002",
|
|
164
163
|
template_id: "designer",
|
|
165
164
|
display_name_en: "Brand Web Designer",
|
|
166
|
-
sample_prompt_en: "Build a product landing page with editorial black-and-white style and soft color story blocks.\n\nProduct: OpenAgentPack \u2014 an open-source AI agent management tool for developers.\nKey features: config-as-code with versioning; multi-cloud (Bailian/Claude/Qoder); one-command CLI deploy with zero ops overhead.\nTarget users: AI application developers.",
|
|
167
165
|
display_name_zh: "\u7F51\u9875\u8BBE\u8BA1",
|
|
168
|
-
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN018n83JF1E39za6CWbI_!!6000000000295-2-tps-1728-2368.png"
|
|
166
|
+
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN018n83JF1E39za6CWbI_!!6000000000295-2-tps-1728-2368.png",
|
|
167
|
+
sample_prompt_zh: "\u5E2E\u6211\u4EEC\u505A\u4E00\u4E2A\u4EA7\u54C1\u843D\u5730\u9875\uFF0C\u9ED1\u767D\u7F16\u8F91\u98CE\uFF0C\u5E26\u67D4\u5F69\u53D9\u4E8B\u533A\u5757\u3002",
|
|
168
|
+
sample_prompt_en: "Build a product landing page with editorial black-and-white style and soft color story blocks."
|
|
169
169
|
},
|
|
170
170
|
tools: [
|
|
171
171
|
{
|
|
@@ -222,12 +222,12 @@ var bailian_default = [
|
|
|
222
222
|
},
|
|
223
223
|
version: 3,
|
|
224
224
|
metadata: {
|
|
225
|
-
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u4E9B\u8BBF\u8C08\u8BB0\u5F55\u548C\u5E02\u573A\u8C03\u7814\u7B14\u8BB0\u6574\u7406\u6210\u4E00\u4EFD\u7ED3\u6784\u6E05\u6670\u7684\u884C\u4E1A\u7814\u7A76\u62A5\u544A\uFF0C\u8981\u6C42\u7ED3\u8BBA\u5148\u884C\u3001\u6570\u636E\u9A71\u52A8\u3002\n\n\u7D20\u6750\uFF1A\n- \u8BBF\u8C08A\uFF08\u67D0\u7535\u5546\u6280\u672F\u603B\u76D1\uFF09\uFF1A\u4ECA\u5E74 Q2 \u6211\u4EEC AI \u5BA2\u670D\u65E5\u5747\u4F1A\u8BDD\u91CF\u4ECE 8000 \u6DA8\u5230 3.2 \u4E07\uFF0C\u4F46\u4EBA\u5DE5\u5750\u5E2D\u53EA\u4ECE 15 \u4EBA\u51CF\u5230 11 \u4EBA\uFF0CROI \u4E0D\u5982\u9884\u671F\u3002\n- \u8C03\u7814\u7B14\u8BB0\uFF1A2024 \u5E74\u56FD\u5185\u667A\u80FD\u5BA2\u670D\u5E02\u573A\u89C4\u6A21\u7EA6 48 \u4EBF\uFF0C\u540C\u6BD4 +23%\uFF1B\u5934\u90E8\u4E09\u5BB6\u5382\u5546\u5E02\u5360\u7387 62%\uFF0C\u96C6\u4E2D\u5EA6\u4E0A\u5347\u3002\n- \u8BBF\u8C08B\uFF08SaaS \u521B\u59CB\u4EBA\uFF09\uFF1A\u5BA2\u6237\u6700\u5728\u610F\u7684\u4E0D\u662F\u591A\u8F6E\u5BF9\u8BDD\u80FD\u529B\uFF0C\u800C\u662F\u5DE5\u5355\u9996\u6B21\u89E3\u51B3\u7387\uFF0C\u6211\u4EEC\u505A\u5230 78% \u540E\u7EED\u7EA6\u7387\u660E\u663E\u4E0B\u964D\u3002\n- \u8BBF\u8C08C\uFF08\u96F6\u552E CIO\uFF09\uFF1A\u4E0A\u4E86\u5927\u6A21\u578B\u5BA2\u670D\u540E\uFF0C\u7B80\u5355\u54A8\u8BE2\u81EA\u52A8\u5316\u7387 65%\uFF0C\u4F46\u590D\u6742\u552E\u540E\u4ECD\u9700\u4EBA\u5DE5\uFF0C\u6574\u4F53\u6EE1\u610F\u5EA6\u4ECE 4.1 \u5347\u5230 4.3\u3002",
|
|
226
225
|
template_id: "researcher",
|
|
227
226
|
display_name_en: "Industry Research Advisor",
|
|
228
|
-
sample_prompt_en: "Help me organize these interview notes and market research materials into a well-structured industry research report with conclusion-first and data-driven insights.\n\nMaterials:\n- Interview A (e-commerce tech director): Our AI customer service daily conversations grew from 8,000 to 32,000 in Q2, but human agents only dropped from 15 to 11 \u2014 ROI below expectations.\n- Research note: China's smart customer service market reached ~4.8B RMB in 2024, +23% YoY; top 3 vendors hold 62% market share, concentration rising.\n- Interview B (SaaS founder): Customers care less about multi-turn dialogue than first-contact resolution rate; once we hit 78%, renewal rates dropped noticeably.\n- Interview C (retail CIO): After adopting LLM customer service, simple inquiry automation hit 65%, but complex after-sales still need humans; overall satisfaction rose from 4.1 to 4.3.",
|
|
229
227
|
display_name_zh: "\u7814\u7A76\u62A5\u544A",
|
|
230
|
-
avatar_url: "https://img.alicdn.com/imgextra/i2/O1CN01Gl4Bgl29fZIzVntMJ_!!6000000008095-2-tps-1728-2368.png"
|
|
228
|
+
avatar_url: "https://img.alicdn.com/imgextra/i2/O1CN01Gl4Bgl29fZIzVntMJ_!!6000000008095-2-tps-1728-2368.png",
|
|
229
|
+
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u4E9B\u8BBF\u8C08\u8BB0\u5F55\u548C\u5E02\u573A\u8C03\u7814\u7B14\u8BB0\u6574\u7406\u6210\u4E00\u4EFD\u7ED3\u6784\u6E05\u6670\u7684\u884C\u4E1A\u7814\u7A76\u62A5\u544A\uFF0C\u8981\u6C42\u7ED3\u8BBA\u5148\u884C\u3001\u6570\u636E\u9A71\u52A8\u3002",
|
|
230
|
+
sample_prompt_en: "Help me organize these interview notes and market research materials into a well-structured industry research report with conclusion-first and data-driven insights."
|
|
231
231
|
},
|
|
232
232
|
tools: [
|
|
233
233
|
{
|
|
@@ -284,12 +284,12 @@ var bailian_default = [
|
|
|
284
284
|
},
|
|
285
285
|
version: 3,
|
|
286
286
|
metadata: {
|
|
287
|
-
sample_prompt_zh: "\u751F\u6210\u4E00\u5F20\u8D5B\u535A\u670B\u514B\u732B\u54AA\u6D77\u62A5",
|
|
288
287
|
template_id: "art-designer",
|
|
289
288
|
display_name_en: "Art Creator",
|
|
290
|
-
sample_prompt_en: "Generate a cyberpunk cat poster",
|
|
291
289
|
display_name_zh: "\u827A\u672F\u521B\u4F5C",
|
|
292
|
-
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01TNaIjz1xz0jHEADar_!!6000000006513-2-tps-1728-2368.png"
|
|
290
|
+
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01TNaIjz1xz0jHEADar_!!6000000006513-2-tps-1728-2368.png",
|
|
291
|
+
sample_prompt_zh: "\u751F\u6210\u4E00\u5F20\u8D5B\u535A\u670B\u514B\u732B\u54AA\u6D77\u62A5",
|
|
292
|
+
sample_prompt_en: "Generate a cyberpunk cat poster"
|
|
293
293
|
},
|
|
294
294
|
tools: [
|
|
295
295
|
{
|
|
@@ -350,12 +350,12 @@ var claude_default = [
|
|
|
350
350
|
},
|
|
351
351
|
version: 3,
|
|
352
352
|
metadata: {
|
|
353
|
-
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u7BC7\u7A3F\u5B50\u6DA6\u8272\u4E00\u4E0B\uFF0C\u53BB\u6389AI\u5473\uFF0C\u8BFB\u8D77\u6765\u66F4\u81EA\u7136\u987A\u7545\u3002\n\n\u7A3F\u4EF6\uFF1A\n\u5728\u5F53\u4ECA\u6570\u5B57\u5316\u5FEB\u901F\u53D1\u5C55\u7684\u65F6\u4EE3\uFF0C\u6570\u636E\u9A71\u52A8\u51B3\u7B56\u5DF2\u7ECF\u6210\u4E3A\u4F01\u4E1A\u4E0D\u53EF\u5FFD\u89C6\u7684\u6838\u5FC3\u80FD\u529B\u3002\u503C\u5F97\u6CE8\u610F\u7684\u662F\uFF0C\u6570\u636E\u4E0D\u4EC5\u4EC5\u662F\u6570\u5B57\u7684\u7B80\u5355\u5806\u780C\uFF0C\u66F4\u662F\u6218\u7565\u89C4\u5212\u7684\u91CD\u8981\u57FA\u77F3\u3002\u9996\u5148\uFF0C\u6570\u636E\u5E2E\u52A9\u4F01\u4E1A\u6D1E\u5BDF\u5E02\u573A\u8D8B\u52BF\uFF1B\u5176\u6B21\uFF0C\u6570\u636E\u4F18\u5316\u8FD0\u8425\u6548\u7387\uFF1B\u6700\u540E\uFF0C\u6570\u636E\u63D0\u5347\u5BA2\u6237\u4F53\u9A8C\u3002\u7EFC\u4E0A\u6240\u8FF0\uFF0C\u6570\u636E\u9A71\u52A8\u7684\u610F\u4E49\u6DF1\u8FDC\u800C\u91CD\u5927\uFF0C\u5FC5\u5C06\u5F71\u54CD\u672A\u6765\u7684\u5546\u4E1A\u683C\u5C40\u3002",
|
|
354
353
|
template_id: "editor",
|
|
355
354
|
display_name_en: "Article Polish Editor",
|
|
356
|
-
sample_prompt_en: "Please polish this draft to remove AI traces and make it read more naturally.\n\nDraft:\nIn today's era of rapid digital development, data-driven decision-making has become a core capability that enterprises cannot ignore. It is worth noting that data is not just a simple stacking of numbers, but an important cornerstone of strategic planning. First, data helps enterprises gain insights into market trends; second, data optimizes operational efficiency; finally, data improves customer experience. In summary, the significance of data-driven is profound and major, and will surely influence the future business landscape.",
|
|
357
355
|
display_name_zh: "\u6587\u7AE0\u6DA6\u8272",
|
|
358
|
-
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01yCOy3D1yuidLMO8jU_!!6000000006639-2-tps-1728-2368.png"
|
|
356
|
+
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01yCOy3D1yuidLMO8jU_!!6000000006639-2-tps-1728-2368.png",
|
|
357
|
+
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u7BC7\u7A3F\u5B50\u6DA6\u8272\u4E00\u4E0B\uFF0C\u53BB\u6389AI\u5473\uFF0C\u8BFB\u8D77\u6765\u66F4\u81EA\u7136\u987A\u7545\u3002",
|
|
358
|
+
sample_prompt_en: "Please polish this draft to remove AI traces and make it read more naturally."
|
|
359
359
|
},
|
|
360
360
|
tools: [
|
|
361
361
|
{
|
|
@@ -402,12 +402,12 @@ var claude_default = [
|
|
|
402
402
|
},
|
|
403
403
|
version: 3,
|
|
404
404
|
metadata: {
|
|
405
|
-
sample_prompt_zh: "\u5E2E\u6211\u4EEC\u505A\u4E00\u4E2A\u4EA7\u54C1\u843D\u5730\u9875\uFF0C\u9ED1\u767D\u7F16\u8F91\u98CE\uFF0C\u5E26\u67D4\u5F69\u53D9\u4E8B\u533A\u5757\u3002\n\n\u4EA7\u54C1\uFF1AOpenAgentPack \u2014\u2014 \u5F00\u6E90\u7684 AI Agent \u7BA1\u7406\u5DE5\u5177\uFF0C\u5E2E\u5F00\u53D1\u8005\u4E00\u952E\u53D1\u5E03\u3001\u7248\u672C\u7BA1\u7406\u548C\u8DE8\u4E91\u8FC1\u79FB Agent \u914D\u7F6E\u3002\n\u6838\u5FC3\u5356\u70B9\uFF1A\u914D\u7F6E\u5373\u4EE3\u7801\u53EF\u7248\u672C\u5316\uFF1B\u652F\u6301\u767E\u70BC/Claude/Qoder \u591A\u4E91\uFF1BCLI \u4E00\u952E\u53D1\u5E03\u96F6\u8FD0\u7EF4\u3002\n\u76EE\u6807\u7528\u6237\uFF1AAI \u5E94\u7528\u5F00\u53D1\u8005\u3002",
|
|
406
405
|
template_id: "designer",
|
|
407
406
|
display_name_en: "Brand Web Designer",
|
|
408
|
-
sample_prompt_en: "Build a product landing page with editorial black-and-white style and soft color story blocks.\n\nProduct: OpenAgentPack \u2014 an open-source AI agent management tool for developers.\nKey features: config-as-code with versioning; multi-cloud (Bailian/Claude/Qoder); one-command CLI deploy with zero ops overhead.\nTarget users: AI application developers.",
|
|
409
407
|
display_name_zh: "\u7F51\u9875\u8BBE\u8BA1",
|
|
410
|
-
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN018n83JF1E39za6CWbI_!!6000000000295-2-tps-1728-2368.png"
|
|
408
|
+
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN018n83JF1E39za6CWbI_!!6000000000295-2-tps-1728-2368.png",
|
|
409
|
+
sample_prompt_zh: "\u5E2E\u6211\u4EEC\u505A\u4E00\u4E2A\u4EA7\u54C1\u843D\u5730\u9875\uFF0C\u9ED1\u767D\u7F16\u8F91\u98CE\uFF0C\u5E26\u67D4\u5F69\u53D9\u4E8B\u533A\u5757\u3002",
|
|
410
|
+
sample_prompt_en: "Build a product landing page with editorial black-and-white style and soft color story blocks."
|
|
411
411
|
},
|
|
412
412
|
tools: [
|
|
413
413
|
{
|
|
@@ -454,12 +454,12 @@ var claude_default = [
|
|
|
454
454
|
},
|
|
455
455
|
version: 3,
|
|
456
456
|
metadata: {
|
|
457
|
-
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u4E9B\u8BBF\u8C08\u8BB0\u5F55\u548C\u5E02\u573A\u8C03\u7814\u7B14\u8BB0\u6574\u7406\u6210\u4E00\u4EFD\u7ED3\u6784\u6E05\u6670\u7684\u884C\u4E1A\u7814\u7A76\u62A5\u544A\uFF0C\u8981\u6C42\u7ED3\u8BBA\u5148\u884C\u3001\u6570\u636E\u9A71\u52A8\u3002\n\n\u7D20\u6750\uFF1A\n- \u8BBF\u8C08A\uFF08\u67D0\u7535\u5546\u6280\u672F\u603B\u76D1\uFF09\uFF1A\u4ECA\u5E74 Q2 \u6211\u4EEC AI \u5BA2\u670D\u65E5\u5747\u4F1A\u8BDD\u91CF\u4ECE 8000 \u6DA8\u5230 3.2 \u4E07\uFF0C\u4F46\u4EBA\u5DE5\u5750\u5E2D\u53EA\u4ECE 15 \u4EBA\u51CF\u5230 11 \u4EBA\uFF0CROI \u4E0D\u5982\u9884\u671F\u3002\n- \u8C03\u7814\u7B14\u8BB0\uFF1A2024 \u5E74\u56FD\u5185\u667A\u80FD\u5BA2\u670D\u5E02\u573A\u89C4\u6A21\u7EA6 48 \u4EBF\uFF0C\u540C\u6BD4 +23%\uFF1B\u5934\u90E8\u4E09\u5BB6\u5382\u5546\u5E02\u5360\u7387 62%\uFF0C\u96C6\u4E2D\u5EA6\u4E0A\u5347\u3002\n- \u8BBF\u8C08B\uFF08SaaS \u521B\u59CB\u4EBA\uFF09\uFF1A\u5BA2\u6237\u6700\u5728\u610F\u7684\u4E0D\u662F\u591A\u8F6E\u5BF9\u8BDD\u80FD\u529B\uFF0C\u800C\u662F\u5DE5\u5355\u9996\u6B21\u89E3\u51B3\u7387\uFF0C\u6211\u4EEC\u505A\u5230 78% \u540E\u7EED\u7EA6\u7387\u660E\u663E\u4E0B\u964D\u3002\n- \u8BBF\u8C08C\uFF08\u96F6\u552E CIO\uFF09\uFF1A\u4E0A\u4E86\u5927\u6A21\u578B\u5BA2\u670D\u540E\uFF0C\u7B80\u5355\u54A8\u8BE2\u81EA\u52A8\u5316\u7387 65%\uFF0C\u4F46\u590D\u6742\u552E\u540E\u4ECD\u9700\u4EBA\u5DE5\uFF0C\u6574\u4F53\u6EE1\u610F\u5EA6\u4ECE 4.1 \u5347\u5230 4.3\u3002",
|
|
458
457
|
template_id: "researcher",
|
|
459
458
|
display_name_en: "Industry Research Advisor",
|
|
460
|
-
sample_prompt_en: "Help me organize these interview notes and market research materials into a well-structured industry research report with conclusion-first and data-driven insights.\n\nMaterials:\n- Interview A (e-commerce tech director): Our AI customer service daily conversations grew from 8,000 to 32,000 in Q2, but human agents only dropped from 15 to 11 \u2014 ROI below expectations.\n- Research note: China's smart customer service market reached ~4.8B RMB in 2024, +23% YoY; top 3 vendors hold 62% market share, concentration rising.\n- Interview B (SaaS founder): Customers care less about multi-turn dialogue than first-contact resolution rate; once we hit 78%, renewal rates dropped noticeably.\n- Interview C (retail CIO): After adopting LLM customer service, simple inquiry automation hit 65%, but complex after-sales still need humans; overall satisfaction rose from 4.1 to 4.3.",
|
|
461
459
|
display_name_zh: "\u7814\u7A76\u62A5\u544A",
|
|
462
|
-
avatar_url: "https://img.alicdn.com/imgextra/i2/O1CN01Gl4Bgl29fZIzVntMJ_!!6000000008095-2-tps-1728-2368.png"
|
|
460
|
+
avatar_url: "https://img.alicdn.com/imgextra/i2/O1CN01Gl4Bgl29fZIzVntMJ_!!6000000008095-2-tps-1728-2368.png",
|
|
461
|
+
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u4E9B\u8BBF\u8C08\u8BB0\u5F55\u548C\u5E02\u573A\u8C03\u7814\u7B14\u8BB0\u6574\u7406\u6210\u4E00\u4EFD\u7ED3\u6784\u6E05\u6670\u7684\u884C\u4E1A\u7814\u7A76\u62A5\u544A\uFF0C\u8981\u6C42\u7ED3\u8BBA\u5148\u884C\u3001\u6570\u636E\u9A71\u52A8\u3002",
|
|
462
|
+
sample_prompt_en: "Help me organize these interview notes and market research materials into a well-structured industry research report with conclusion-first and data-driven insights."
|
|
463
463
|
},
|
|
464
464
|
tools: [
|
|
465
465
|
{
|
|
@@ -510,12 +510,12 @@ var ark_default = [
|
|
|
510
510
|
},
|
|
511
511
|
version: 3,
|
|
512
512
|
metadata: {
|
|
513
|
-
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u7BC7\u7A3F\u5B50\u6DA6\u8272\u4E00\u4E0B\uFF0C\u53BB\u6389AI\u5473\uFF0C\u8BFB\u8D77\u6765\u66F4\u81EA\u7136\u987A\u7545\u3002\n\n\u7A3F\u4EF6\uFF1A\n\u5728\u5F53\u4ECA\u6570\u5B57\u5316\u5FEB\u901F\u53D1\u5C55\u7684\u65F6\u4EE3\uFF0C\u6570\u636E\u9A71\u52A8\u51B3\u7B56\u5DF2\u7ECF\u6210\u4E3A\u4F01\u4E1A\u4E0D\u53EF\u5FFD\u89C6\u7684\u6838\u5FC3\u80FD\u529B\u3002\u503C\u5F97\u6CE8\u610F\u7684\u662F\uFF0C\u6570\u636E\u4E0D\u4EC5\u4EC5\u662F\u6570\u5B57\u7684\u7B80\u5355\u5806\u780C\uFF0C\u66F4\u662F\u6218\u7565\u89C4\u5212\u7684\u91CD\u8981\u57FA\u77F3\u3002\u9996\u5148\uFF0C\u6570\u636E\u5E2E\u52A9\u4F01\u4E1A\u6D1E\u5BDF\u5E02\u573A\u8D8B\u52BF\uFF1B\u5176\u6B21\uFF0C\u6570\u636E\u4F18\u5316\u8FD0\u8425\u6548\u7387\uFF1B\u6700\u540E\uFF0C\u6570\u636E\u63D0\u5347\u5BA2\u6237\u4F53\u9A8C\u3002\u7EFC\u4E0A\u6240\u8FF0\uFF0C\u6570\u636E\u9A71\u52A8\u7684\u610F\u4E49\u6DF1\u8FDC\u800C\u91CD\u5927\uFF0C\u5FC5\u5C06\u5F71\u54CD\u672A\u6765\u7684\u5546\u4E1A\u683C\u5C40\u3002",
|
|
514
513
|
template_id: "editor",
|
|
515
514
|
display_name_en: "Article Polish Editor",
|
|
516
|
-
sample_prompt_en: "Please polish this draft to remove AI traces and make it read more naturally.\n\nDraft:\nIn today's era of rapid digital development, data-driven decision-making has become a core capability that enterprises cannot ignore. It is worth noting that data is not just a simple stacking of numbers, but an important cornerstone of strategic planning. First, data helps enterprises gain insights into market trends; second, data optimizes operational efficiency; finally, data improves customer experience. In summary, the significance of data-driven is profound and major, and will surely influence the future business landscape.",
|
|
517
515
|
display_name_zh: "\u6587\u7AE0\u6DA6\u8272",
|
|
518
|
-
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01yCOy3D1yuidLMO8jU_!!6000000006639-2-tps-1728-2368.png"
|
|
516
|
+
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01yCOy3D1yuidLMO8jU_!!6000000006639-2-tps-1728-2368.png",
|
|
517
|
+
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u7BC7\u7A3F\u5B50\u6DA6\u8272\u4E00\u4E0B\uFF0C\u53BB\u6389AI\u5473\uFF0C\u8BFB\u8D77\u6765\u66F4\u81EA\u7136\u987A\u7545\u3002",
|
|
518
|
+
sample_prompt_en: "Please polish this draft to remove AI traces and make it read more naturally."
|
|
519
519
|
},
|
|
520
520
|
tools: [
|
|
521
521
|
{
|
|
@@ -562,12 +562,12 @@ var ark_default = [
|
|
|
562
562
|
},
|
|
563
563
|
version: 3,
|
|
564
564
|
metadata: {
|
|
565
|
-
sample_prompt_zh: "\u5E2E\u6211\u4EEC\u505A\u4E00\u4E2A\u4EA7\u54C1\u843D\u5730\u9875\uFF0C\u9ED1\u767D\u7F16\u8F91\u98CE\uFF0C\u5E26\u67D4\u5F69\u53D9\u4E8B\u533A\u5757\u3002\n\n\u4EA7\u54C1\uFF1AOpenAgentPack \u2014\u2014 \u5F00\u6E90\u7684 AI Agent \u7BA1\u7406\u5DE5\u5177\uFF0C\u5E2E\u5F00\u53D1\u8005\u4E00\u952E\u53D1\u5E03\u3001\u7248\u672C\u7BA1\u7406\u548C\u8DE8\u4E91\u8FC1\u79FB Agent \u914D\u7F6E\u3002\n\u6838\u5FC3\u5356\u70B9\uFF1A\u914D\u7F6E\u5373\u4EE3\u7801\u53EF\u7248\u672C\u5316\uFF1B\u652F\u6301\u767E\u70BC/Claude/Qoder \u591A\u4E91\uFF1BCLI \u4E00\u952E\u53D1\u5E03\u96F6\u8FD0\u7EF4\u3002\n\u76EE\u6807\u7528\u6237\uFF1AAI \u5E94\u7528\u5F00\u53D1\u8005\u3002",
|
|
566
565
|
template_id: "designer",
|
|
567
566
|
display_name_en: "Brand Web Designer",
|
|
568
|
-
sample_prompt_en: "Build a product landing page with editorial black-and-white style and soft color story blocks.\n\nProduct: OpenAgentPack \u2014 an open-source AI agent management tool for developers.\nKey features: config-as-code with versioning; multi-cloud (Bailian/Claude/Qoder); one-command CLI deploy with zero ops overhead.\nTarget users: AI application developers.",
|
|
569
567
|
display_name_zh: "\u7F51\u9875\u8BBE\u8BA1",
|
|
570
|
-
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN018n83JF1E39za6CWbI_!!6000000000295-2-tps-1728-2368.png"
|
|
568
|
+
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN018n83JF1E39za6CWbI_!!6000000000295-2-tps-1728-2368.png",
|
|
569
|
+
sample_prompt_zh: "\u5E2E\u6211\u4EEC\u505A\u4E00\u4E2A\u4EA7\u54C1\u843D\u5730\u9875\uFF0C\u9ED1\u767D\u7F16\u8F91\u98CE\uFF0C\u5E26\u67D4\u5F69\u53D9\u4E8B\u533A\u5757\u3002",
|
|
570
|
+
sample_prompt_en: "Build a product landing page with editorial black-and-white style and soft color story blocks."
|
|
571
571
|
},
|
|
572
572
|
tools: [
|
|
573
573
|
{
|
|
@@ -614,12 +614,12 @@ var ark_default = [
|
|
|
614
614
|
},
|
|
615
615
|
version: 3,
|
|
616
616
|
metadata: {
|
|
617
|
-
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u4E9B\u8BBF\u8C08\u8BB0\u5F55\u548C\u5E02\u573A\u8C03\u7814\u7B14\u8BB0\u6574\u7406\u6210\u4E00\u4EFD\u7ED3\u6784\u6E05\u6670\u7684\u884C\u4E1A\u7814\u7A76\u62A5\u544A\uFF0C\u8981\u6C42\u7ED3\u8BBA\u5148\u884C\u3001\u6570\u636E\u9A71\u52A8\u3002\n\n\u7D20\u6750\uFF1A\n- \u8BBF\u8C08A\uFF08\u67D0\u7535\u5546\u6280\u672F\u603B\u76D1\uFF09\uFF1A\u4ECA\u5E74 Q2 \u6211\u4EEC AI \u5BA2\u670D\u65E5\u5747\u4F1A\u8BDD\u91CF\u4ECE 8000 \u6DA8\u5230 3.2 \u4E07\uFF0C\u4F46\u4EBA\u5DE5\u5750\u5E2D\u53EA\u4ECE 15 \u4EBA\u51CF\u5230 11 \u4EBA\uFF0CROI \u4E0D\u5982\u9884\u671F\u3002\n- \u8C03\u7814\u7B14\u8BB0\uFF1A2024 \u5E74\u56FD\u5185\u667A\u80FD\u5BA2\u670D\u5E02\u573A\u89C4\u6A21\u7EA6 48 \u4EBF\uFF0C\u540C\u6BD4 +23%\uFF1B\u5934\u90E8\u4E09\u5BB6\u5382\u5546\u5E02\u5360\u7387 62%\uFF0C\u96C6\u4E2D\u5EA6\u4E0A\u5347\u3002\n- \u8BBF\u8C08B\uFF08SaaS \u521B\u59CB\u4EBA\uFF09\uFF1A\u5BA2\u6237\u6700\u5728\u610F\u7684\u4E0D\u662F\u591A\u8F6E\u5BF9\u8BDD\u80FD\u529B\uFF0C\u800C\u662F\u5DE5\u5355\u9996\u6B21\u89E3\u51B3\u7387\uFF0C\u6211\u4EEC\u505A\u5230 78% \u540E\u7EED\u7EA6\u7387\u660E\u663E\u4E0B\u964D\u3002\n- \u8BBF\u8C08C\uFF08\u96F6\u552E CIO\uFF09\uFF1A\u4E0A\u4E86\u5927\u6A21\u578B\u5BA2\u670D\u540E\uFF0C\u7B80\u5355\u54A8\u8BE2\u81EA\u52A8\u5316\u7387 65%\uFF0C\u4F46\u590D\u6742\u552E\u540E\u4ECD\u9700\u4EBA\u5DE5\uFF0C\u6574\u4F53\u6EE1\u610F\u5EA6\u4ECE 4.1 \u5347\u5230 4.3\u3002",
|
|
618
617
|
template_id: "researcher",
|
|
619
618
|
display_name_en: "Industry Research Advisor",
|
|
620
|
-
sample_prompt_en: "Help me organize these interview notes and market research materials into a well-structured industry research report with conclusion-first and data-driven insights.\n\nMaterials:\n- Interview A (e-commerce tech director): Our AI customer service daily conversations grew from 8,000 to 32,000 in Q2, but human agents only dropped from 15 to 11 \u2014 ROI below expectations.\n- Research note: China's smart customer service market reached ~4.8B RMB in 2024, +23% YoY; top 3 vendors hold 62% market share, concentration rising.\n- Interview B (SaaS founder): Customers care less about multi-turn dialogue than first-contact resolution rate; once we hit 78%, renewal rates dropped noticeably.\n- Interview C (retail CIO): After adopting LLM customer service, simple inquiry automation hit 65%, but complex after-sales still need humans; overall satisfaction rose from 4.1 to 4.3.",
|
|
621
619
|
display_name_zh: "\u7814\u7A76\u62A5\u544A",
|
|
622
|
-
avatar_url: "https://img.alicdn.com/imgextra/i2/O1CN01Gl4Bgl29fZIzVntMJ_!!6000000008095-2-tps-1728-2368.png"
|
|
620
|
+
avatar_url: "https://img.alicdn.com/imgextra/i2/O1CN01Gl4Bgl29fZIzVntMJ_!!6000000008095-2-tps-1728-2368.png",
|
|
621
|
+
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u4E9B\u8BBF\u8C08\u8BB0\u5F55\u548C\u5E02\u573A\u8C03\u7814\u7B14\u8BB0\u6574\u7406\u6210\u4E00\u4EFD\u7ED3\u6784\u6E05\u6670\u7684\u884C\u4E1A\u7814\u7A76\u62A5\u544A\uFF0C\u8981\u6C42\u7ED3\u8BBA\u5148\u884C\u3001\u6570\u636E\u9A71\u52A8\u3002",
|
|
622
|
+
sample_prompt_en: "Help me organize these interview notes and market research materials into a well-structured industry research report with conclusion-first and data-driven insights."
|
|
623
623
|
},
|
|
624
624
|
tools: [
|
|
625
625
|
{
|
|
@@ -670,12 +670,12 @@ var qoder_default = [
|
|
|
670
670
|
},
|
|
671
671
|
version: 3,
|
|
672
672
|
metadata: {
|
|
673
|
-
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u7BC7\u7A3F\u5B50\u6DA6\u8272\u4E00\u4E0B\uFF0C\u53BB\u6389AI\u5473\uFF0C\u8BFB\u8D77\u6765\u66F4\u81EA\u7136\u987A\u7545\u3002\n\n\u7A3F\u4EF6\uFF1A\n\u5728\u5F53\u4ECA\u6570\u5B57\u5316\u5FEB\u901F\u53D1\u5C55\u7684\u65F6\u4EE3\uFF0C\u6570\u636E\u9A71\u52A8\u51B3\u7B56\u5DF2\u7ECF\u6210\u4E3A\u4F01\u4E1A\u4E0D\u53EF\u5FFD\u89C6\u7684\u6838\u5FC3\u80FD\u529B\u3002\u503C\u5F97\u6CE8\u610F\u7684\u662F\uFF0C\u6570\u636E\u4E0D\u4EC5\u4EC5\u662F\u6570\u5B57\u7684\u7B80\u5355\u5806\u780C\uFF0C\u66F4\u662F\u6218\u7565\u89C4\u5212\u7684\u91CD\u8981\u57FA\u77F3\u3002\u9996\u5148\uFF0C\u6570\u636E\u5E2E\u52A9\u4F01\u4E1A\u6D1E\u5BDF\u5E02\u573A\u8D8B\u52BF\uFF1B\u5176\u6B21\uFF0C\u6570\u636E\u4F18\u5316\u8FD0\u8425\u6548\u7387\uFF1B\u6700\u540E\uFF0C\u6570\u636E\u63D0\u5347\u5BA2\u6237\u4F53\u9A8C\u3002\u7EFC\u4E0A\u6240\u8FF0\uFF0C\u6570\u636E\u9A71\u52A8\u7684\u610F\u4E49\u6DF1\u8FDC\u800C\u91CD\u5927\uFF0C\u5FC5\u5C06\u5F71\u54CD\u672A\u6765\u7684\u5546\u4E1A\u683C\u5C40\u3002",
|
|
674
673
|
template_id: "editor",
|
|
675
674
|
display_name_en: "Article Polish Editor",
|
|
676
|
-
sample_prompt_en: "Please polish this draft to remove AI traces and make it read more naturally.\n\nDraft:\nIn today's era of rapid digital development, data-driven decision-making has become a core capability that enterprises cannot ignore. It is worth noting that data is not just a simple stacking of numbers, but an important cornerstone of strategic planning. First, data helps enterprises gain insights into market trends; second, data optimizes operational efficiency; finally, data improves customer experience. In summary, the significance of data-driven is profound and major, and will surely influence the future business landscape.",
|
|
677
675
|
display_name_zh: "\u6587\u7AE0\u6DA6\u8272",
|
|
678
|
-
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01yCOy3D1yuidLMO8jU_!!6000000006639-2-tps-1728-2368.png"
|
|
676
|
+
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01yCOy3D1yuidLMO8jU_!!6000000006639-2-tps-1728-2368.png",
|
|
677
|
+
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u7BC7\u7A3F\u5B50\u6DA6\u8272\u4E00\u4E0B\uFF0C\u53BB\u6389AI\u5473\uFF0C\u8BFB\u8D77\u6765\u66F4\u81EA\u7136\u987A\u7545\u3002",
|
|
678
|
+
sample_prompt_en: "Please polish this draft to remove AI traces and make it read more naturally."
|
|
679
679
|
},
|
|
680
680
|
tools: [
|
|
681
681
|
{
|
|
@@ -726,12 +726,12 @@ var qoder_default = [
|
|
|
726
726
|
},
|
|
727
727
|
version: 3,
|
|
728
728
|
metadata: {
|
|
729
|
-
sample_prompt_zh: "\u5E2E\u6211\u4EEC\u505A\u4E00\u4E2A\u4EA7\u54C1\u843D\u5730\u9875\uFF0C\u9ED1\u767D\u7F16\u8F91\u98CE\uFF0C\u5E26\u67D4\u5F69\u53D9\u4E8B\u533A\u5757\u3002\n\n\u4EA7\u54C1\uFF1AOpenAgentPack \u2014\u2014 \u5F00\u6E90\u7684 AI Agent \u7BA1\u7406\u5DE5\u5177\uFF0C\u5E2E\u5F00\u53D1\u8005\u4E00\u952E\u53D1\u5E03\u3001\u7248\u672C\u7BA1\u7406\u548C\u8DE8\u4E91\u8FC1\u79FB Agent \u914D\u7F6E\u3002\n\u6838\u5FC3\u5356\u70B9\uFF1A\u914D\u7F6E\u5373\u4EE3\u7801\u53EF\u7248\u672C\u5316\uFF1B\u652F\u6301\u767E\u70BC/Claude/Qoder \u591A\u4E91\uFF1BCLI \u4E00\u952E\u53D1\u5E03\u96F6\u8FD0\u7EF4\u3002\n\u76EE\u6807\u7528\u6237\uFF1AAI \u5E94\u7528\u5F00\u53D1\u8005\u3002",
|
|
730
729
|
template_id: "designer",
|
|
731
730
|
display_name_en: "Brand Web Designer",
|
|
732
|
-
sample_prompt_en: "Build a product landing page with editorial black-and-white style and soft color story blocks.\n\nProduct: OpenAgentPack \u2014 an open-source AI agent management tool for developers.\nKey features: config-as-code with versioning; multi-cloud (Bailian/Claude/Qoder); one-command CLI deploy with zero ops overhead.\nTarget users: AI application developers.",
|
|
733
731
|
display_name_zh: "\u7F51\u9875\u8BBE\u8BA1",
|
|
734
|
-
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN018n83JF1E39za6CWbI_!!6000000000295-2-tps-1728-2368.png"
|
|
732
|
+
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN018n83JF1E39za6CWbI_!!6000000000295-2-tps-1728-2368.png",
|
|
733
|
+
sample_prompt_zh: "\u5E2E\u6211\u4EEC\u505A\u4E00\u4E2A\u4EA7\u54C1\u843D\u5730\u9875\uFF0C\u9ED1\u767D\u7F16\u8F91\u98CE\uFF0C\u5E26\u67D4\u5F69\u53D9\u4E8B\u533A\u5757\u3002",
|
|
734
|
+
sample_prompt_en: "Build a product landing page with editorial black-and-white style and soft color story blocks."
|
|
735
735
|
},
|
|
736
736
|
tools: [
|
|
737
737
|
{
|
|
@@ -782,12 +782,12 @@ var qoder_default = [
|
|
|
782
782
|
},
|
|
783
783
|
version: 3,
|
|
784
784
|
metadata: {
|
|
785
|
-
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u4E9B\u8BBF\u8C08\u8BB0\u5F55\u548C\u5E02\u573A\u8C03\u7814\u7B14\u8BB0\u6574\u7406\u6210\u4E00\u4EFD\u7ED3\u6784\u6E05\u6670\u7684\u884C\u4E1A\u7814\u7A76\u62A5\u544A\uFF0C\u8981\u6C42\u7ED3\u8BBA\u5148\u884C\u3001\u6570\u636E\u9A71\u52A8\u3002\n\n\u7D20\u6750\uFF1A\n- \u8BBF\u8C08A\uFF08\u67D0\u7535\u5546\u6280\u672F\u603B\u76D1\uFF09\uFF1A\u4ECA\u5E74 Q2 \u6211\u4EEC AI \u5BA2\u670D\u65E5\u5747\u4F1A\u8BDD\u91CF\u4ECE 8000 \u6DA8\u5230 3.2 \u4E07\uFF0C\u4F46\u4EBA\u5DE5\u5750\u5E2D\u53EA\u4ECE 15 \u4EBA\u51CF\u5230 11 \u4EBA\uFF0CROI \u4E0D\u5982\u9884\u671F\u3002\n- \u8C03\u7814\u7B14\u8BB0\uFF1A2024 \u5E74\u56FD\u5185\u667A\u80FD\u5BA2\u670D\u5E02\u573A\u89C4\u6A21\u7EA6 48 \u4EBF\uFF0C\u540C\u6BD4 +23%\uFF1B\u5934\u90E8\u4E09\u5BB6\u5382\u5546\u5E02\u5360\u7387 62%\uFF0C\u96C6\u4E2D\u5EA6\u4E0A\u5347\u3002\n- \u8BBF\u8C08B\uFF08SaaS \u521B\u59CB\u4EBA\uFF09\uFF1A\u5BA2\u6237\u6700\u5728\u610F\u7684\u4E0D\u662F\u591A\u8F6E\u5BF9\u8BDD\u80FD\u529B\uFF0C\u800C\u662F\u5DE5\u5355\u9996\u6B21\u89E3\u51B3\u7387\uFF0C\u6211\u4EEC\u505A\u5230 78% \u540E\u7EED\u7EA6\u7387\u660E\u663E\u4E0B\u964D\u3002\n- \u8BBF\u8C08C\uFF08\u96F6\u552E CIO\uFF09\uFF1A\u4E0A\u4E86\u5927\u6A21\u578B\u5BA2\u670D\u540E\uFF0C\u7B80\u5355\u54A8\u8BE2\u81EA\u52A8\u5316\u7387 65%\uFF0C\u4F46\u590D\u6742\u552E\u540E\u4ECD\u9700\u4EBA\u5DE5\uFF0C\u6574\u4F53\u6EE1\u610F\u5EA6\u4ECE 4.1 \u5347\u5230 4.3\u3002",
|
|
786
785
|
template_id: "researcher",
|
|
787
786
|
display_name_en: "Industry Research Advisor",
|
|
788
|
-
sample_prompt_en: "Help me organize these interview notes and market research materials into a well-structured industry research report with conclusion-first and data-driven insights.\n\nMaterials:\n- Interview A (e-commerce tech director): Our AI customer service daily conversations grew from 8,000 to 32,000 in Q2, but human agents only dropped from 15 to 11 \u2014 ROI below expectations.\n- Research note: China's smart customer service market reached ~4.8B RMB in 2024, +23% YoY; top 3 vendors hold 62% market share, concentration rising.\n- Interview B (SaaS founder): Customers care less about multi-turn dialogue than first-contact resolution rate; once we hit 78%, renewal rates dropped noticeably.\n- Interview C (retail CIO): After adopting LLM customer service, simple inquiry automation hit 65%, but complex after-sales still need humans; overall satisfaction rose from 4.1 to 4.3.",
|
|
789
787
|
display_name_zh: "\u7814\u7A76\u62A5\u544A",
|
|
790
|
-
avatar_url: "https://img.alicdn.com/imgextra/i2/O1CN01Gl4Bgl29fZIzVntMJ_!!6000000008095-2-tps-1728-2368.png"
|
|
788
|
+
avatar_url: "https://img.alicdn.com/imgextra/i2/O1CN01Gl4Bgl29fZIzVntMJ_!!6000000008095-2-tps-1728-2368.png",
|
|
789
|
+
sample_prompt_zh: "\u5E2E\u6211\u628A\u8FD9\u4E9B\u8BBF\u8C08\u8BB0\u5F55\u548C\u5E02\u573A\u8C03\u7814\u7B14\u8BB0\u6574\u7406\u6210\u4E00\u4EFD\u7ED3\u6784\u6E05\u6670\u7684\u884C\u4E1A\u7814\u7A76\u62A5\u544A\uFF0C\u8981\u6C42\u7ED3\u8BBA\u5148\u884C\u3001\u6570\u636E\u9A71\u52A8\u3002",
|
|
790
|
+
sample_prompt_en: "Help me organize these interview notes and market research materials into a well-structured industry research report with conclusion-first and data-driven insights."
|
|
791
791
|
},
|
|
792
792
|
tools: [
|
|
793
793
|
{
|
|
@@ -838,12 +838,12 @@ var qoder_default = [
|
|
|
838
838
|
},
|
|
839
839
|
version: 3,
|
|
840
840
|
metadata: {
|
|
841
|
-
sample_prompt_zh: "\u751F\u6210\u4E00\u5F20\u8D5B\u535A\u670B\u514B\u732B\u54AA\u6D77\u62A5",
|
|
842
841
|
template_id: "art-designer",
|
|
843
842
|
display_name_en: "Art Creator",
|
|
844
|
-
sample_prompt_en: "Generate a cyberpunk cat poster",
|
|
845
843
|
display_name_zh: "\u827A\u672F\u521B\u4F5C",
|
|
846
|
-
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01TNaIjz1xz0jHEADar_!!6000000006513-2-tps-1728-2368.png"
|
|
844
|
+
avatar_url: "https://img.alicdn.com/imgextra/i1/O1CN01TNaIjz1xz0jHEADar_!!6000000006513-2-tps-1728-2368.png",
|
|
845
|
+
sample_prompt_zh: "\u751F\u6210\u4E00\u5F20\u8D5B\u535A\u670B\u514B\u732B\u54AA\u6D77\u62A5",
|
|
846
|
+
sample_prompt_en: "Generate a cyberpunk cat poster"
|
|
847
847
|
},
|
|
848
848
|
tools: [
|
|
849
849
|
{
|
|
@@ -1360,8 +1360,8 @@ var RUNTIME_PROJECT_NAME = "bailian-cli";
|
|
|
1360
1360
|
function resolveRuntimeProvider() {
|
|
1361
1361
|
return process.env.AGENTS_PROVIDER?.trim() || "bailian";
|
|
1362
1362
|
}
|
|
1363
|
-
async function buildRuntimeConfig() {
|
|
1364
|
-
const provider = resolveRuntimeProvider();
|
|
1363
|
+
async function buildRuntimeConfig(providerOverride) {
|
|
1364
|
+
const provider = providerOverride?.trim() || resolveRuntimeProvider();
|
|
1365
1365
|
const providerConfig = resolveProviderConfigFromEnv(provider);
|
|
1366
1366
|
const environment = getEnvironmentProfile(provider);
|
|
1367
1367
|
const vault = getVaultProfile(provider);
|
|
@@ -1458,8 +1458,8 @@ function createWebUiStateBackend(input = {}) {
|
|
|
1458
1458
|
}
|
|
1459
1459
|
|
|
1460
1460
|
// ../../apps/server/src/services/runtime-factory.ts
|
|
1461
|
-
async function loadServerRuntimeConfig() {
|
|
1462
|
-
const { configPath, projectName, config } = await buildRuntimeConfig();
|
|
1461
|
+
async function loadServerRuntimeConfig(providerOverride) {
|
|
1462
|
+
const { configPath, projectName, config } = await buildRuntimeConfig(providerOverride);
|
|
1463
1463
|
const stateScope = deriveWebUiStateScope();
|
|
1464
1464
|
const stateBackend = createWebUiStateBackend();
|
|
1465
1465
|
const statePath = stateBackend.getStatePath(stateScope);
|
|
@@ -1473,8 +1473,8 @@ async function loadServerRuntimeConfig() {
|
|
|
1473
1473
|
statePath
|
|
1474
1474
|
};
|
|
1475
1475
|
}
|
|
1476
|
-
async function loadAgentRuntimeInput(agentId, modelOverride) {
|
|
1477
|
-
const base = await loadServerRuntimeConfig();
|
|
1476
|
+
async function loadAgentRuntimeInput(agentId, modelOverride, providerOverride) {
|
|
1477
|
+
const base = await loadServerRuntimeConfig(providerOverride);
|
|
1478
1478
|
const compiled = compileAgentRuntime(agentId, base.config, modelOverride);
|
|
1479
1479
|
return {
|
|
1480
1480
|
...base,
|
|
@@ -1484,6 +1484,9 @@ async function loadAgentRuntimeInput(agentId, modelOverride) {
|
|
|
1484
1484
|
compiled
|
|
1485
1485
|
};
|
|
1486
1486
|
}
|
|
1487
|
+
async function loadCompiledRuntimeInput(agentId, provider) {
|
|
1488
|
+
return loadAgentRuntimeInput(agentId, void 0, provider);
|
|
1489
|
+
}
|
|
1487
1490
|
async function withAgentRuntime(agentId, fn) {
|
|
1488
1491
|
const input = await loadAgentRuntimeInput(agentId);
|
|
1489
1492
|
return readProjectRuntime(input, (ctx) => fn(ctx, input.compiled));
|
|
@@ -2319,40 +2322,308 @@ configRoute.openapi(saveConfigRoute, async (c) => {
|
|
|
2319
2322
|
return c.json(config, 200);
|
|
2320
2323
|
});
|
|
2321
2324
|
|
|
2325
|
+
// ../../apps/server/src/routes/deployments.ts
|
|
2326
|
+
import { createRoute as createRoute3, OpenAPIHono as OpenAPIHono3, z as z5 } from "@hono/zod-openapi";
|
|
2327
|
+
|
|
2328
|
+
// ../../apps/server/src/schemas/deployments.ts
|
|
2329
|
+
import { z as z4 } from "@hono/zod-openapi";
|
|
2330
|
+
var DeploymentStatusSchema = z4.object({
|
|
2331
|
+
id: z4.string(),
|
|
2332
|
+
name: z4.string(),
|
|
2333
|
+
playbookId: z4.string(),
|
|
2334
|
+
provider: z4.string(),
|
|
2335
|
+
prompt: z4.string(),
|
|
2336
|
+
schedule: z4.object({ expression: z4.string(), timezone: z4.string() }),
|
|
2337
|
+
status: z4.string(),
|
|
2338
|
+
remoteId: z4.string().nullable()
|
|
2339
|
+
});
|
|
2340
|
+
var DeploymentListSchema = z4.object({ deployments: z4.array(DeploymentStatusSchema) });
|
|
2341
|
+
var CreateDeploymentBodySchema = z4.object({
|
|
2342
|
+
name: z4.string().min(1),
|
|
2343
|
+
playbookId: z4.string().min(1),
|
|
2344
|
+
prompt: z4.string().min(1),
|
|
2345
|
+
expression: z4.string().min(1),
|
|
2346
|
+
timezone: z4.string().min(1).default("Asia/Shanghai")
|
|
2347
|
+
});
|
|
2348
|
+
var SetDeploymentPausedBodySchema = z4.object({ paused: z4.boolean() });
|
|
2349
|
+
var DeploymentRunSchema = z4.object({
|
|
2350
|
+
name: z4.string(),
|
|
2351
|
+
provider: z4.string(),
|
|
2352
|
+
result: z4.object({
|
|
2353
|
+
run_id: z4.string().optional(),
|
|
2354
|
+
session_id: z4.string().nullable(),
|
|
2355
|
+
error: z4.object({ type: z4.string(), message: z4.string() }).optional()
|
|
2356
|
+
})
|
|
2357
|
+
});
|
|
2358
|
+
var DeleteDeploymentSchema = z4.object({ deleted: z4.boolean() });
|
|
2359
|
+
|
|
2360
|
+
// ../../apps/server/src/services/deployments/manage.ts
|
|
2361
|
+
import { mkdir as mkdir2, readFile as readFile2, rename, writeFile as writeFile2 } from "fs/promises";
|
|
2362
|
+
import { homedir as homedir2 } from "os";
|
|
2363
|
+
import { dirname as dirname3, join as join2 } from "path";
|
|
2364
|
+
import {
|
|
2365
|
+
executePlannedProject,
|
|
2366
|
+
getDeploymentDetailsForContext,
|
|
2367
|
+
pauseDeploymentForContext,
|
|
2368
|
+
planProjectContext,
|
|
2369
|
+
runDeploymentForContext,
|
|
2370
|
+
syncAgentResourcesWithStateBackend as syncAgentResourcesWithStateBackend3,
|
|
2371
|
+
UserError as UserError3,
|
|
2372
|
+
writeProjectRuntime as writeProjectRuntime2
|
|
2373
|
+
} from "@openagentpack/sdk";
|
|
2374
|
+
var storePath = () => process.env.AGENTS_DEPLOYMENTS_PATH?.trim() || join2(homedir2(), ".agents", "playground.deployments.json");
|
|
2375
|
+
async function readStore() {
|
|
2376
|
+
try {
|
|
2377
|
+
const parsed = JSON.parse(await readFile2(storePath(), "utf8"));
|
|
2378
|
+
return Array.isArray(parsed.deployments) ? parsed.deployments.map((item) => ({
|
|
2379
|
+
...item,
|
|
2380
|
+
// Legacy records predate provider ownership. The active provider is the only
|
|
2381
|
+
// recoverable source for those records; every new record persists it explicitly.
|
|
2382
|
+
provider: item.provider ?? process.env.AGENTS_PROVIDER
|
|
2383
|
+
})) : [];
|
|
2384
|
+
} catch (error) {
|
|
2385
|
+
if (error.code === "ENOENT") return [];
|
|
2386
|
+
throw error;
|
|
2387
|
+
}
|
|
2388
|
+
}
|
|
2389
|
+
async function writeStore(deployments) {
|
|
2390
|
+
const path = storePath();
|
|
2391
|
+
await mkdir2(dirname3(path), { recursive: true });
|
|
2392
|
+
const temp = `${path}.${process.pid}.${crypto.randomUUID()}.tmp`;
|
|
2393
|
+
await writeFile2(temp, `${JSON.stringify({ deployments }, null, 2)}
|
|
2394
|
+
`, { mode: 384 });
|
|
2395
|
+
await rename(temp, path);
|
|
2396
|
+
}
|
|
2397
|
+
function attachDeployment(input, item) {
|
|
2398
|
+
const config = JSON.parse(JSON.stringify(input.config));
|
|
2399
|
+
config.deployments = {
|
|
2400
|
+
...config.deployments ?? {},
|
|
2401
|
+
[item.id]: {
|
|
2402
|
+
agent: input.compiled.agentId,
|
|
2403
|
+
environment: Object.keys(config.environments ?? {})[0],
|
|
2404
|
+
initial_events: [{ type: "user.message", content: item.prompt }],
|
|
2405
|
+
schedule: { expression: item.expression, timezone: item.timezone },
|
|
2406
|
+
description: item.name,
|
|
2407
|
+
provider: config.defaults?.provider,
|
|
2408
|
+
metadata: { "openagentpack.webui": "schedule", "openagentpack.title": item.name }
|
|
2409
|
+
}
|
|
2410
|
+
};
|
|
2411
|
+
return { ...input, config, providers: config.providers };
|
|
2412
|
+
}
|
|
2413
|
+
async function runtimeFor(item) {
|
|
2414
|
+
return attachDeployment(await loadCompiledRuntimeInput(item.playbookId, item.provider), item);
|
|
2415
|
+
}
|
|
2416
|
+
function assertNativeProvider(provider) {
|
|
2417
|
+
if (provider !== "qoder" && provider !== "claude") {
|
|
2418
|
+
throw new UserError3(
|
|
2419
|
+
`WebUI schedules require a native deployment provider (qoder or claude), got '${provider ?? "unknown"}'.`
|
|
2420
|
+
);
|
|
2421
|
+
}
|
|
2422
|
+
}
|
|
2423
|
+
async function executeOnlyDeployment(input, id, deleting = false) {
|
|
2424
|
+
return writeProjectRuntime2(input, async (ctx) => {
|
|
2425
|
+
const planned = await planProjectContext(ctx, { provider: input.config.defaults?.provider, quiet: true });
|
|
2426
|
+
const actions = planned.plan.actions.filter(
|
|
2427
|
+
(action) => action.address.type === "deployment" && action.address.name === id && (!deleting || action.action === "delete")
|
|
2428
|
+
);
|
|
2429
|
+
if (actions.length === 0)
|
|
2430
|
+
throw new UserError3(`Deployment '${id}' produced no ${deleting ? "delete" : "apply"} action.`);
|
|
2431
|
+
const execution = await executePlannedProject(
|
|
2432
|
+
{
|
|
2433
|
+
...planned,
|
|
2434
|
+
plan: { ...planned.plan, actions },
|
|
2435
|
+
destructiveActions: actions.filter((a) => a.action === "delete")
|
|
2436
|
+
},
|
|
2437
|
+
{ policy: deleting ? "force" : "block" }
|
|
2438
|
+
);
|
|
2439
|
+
const failed = execution.results.find((result) => result.status !== "success");
|
|
2440
|
+
if (failed) {
|
|
2441
|
+
throw new UserError3(failed.error ?? `Deployment '${id}' ${failed.status}.`);
|
|
2442
|
+
}
|
|
2443
|
+
return execution;
|
|
2444
|
+
});
|
|
2445
|
+
}
|
|
2446
|
+
var storeMutationQueue = Promise.resolve();
|
|
2447
|
+
function serializeStoreMutation(mutation) {
|
|
2448
|
+
const result = storeMutationQueue.then(mutation, mutation);
|
|
2449
|
+
storeMutationQueue = result.then(
|
|
2450
|
+
() => void 0,
|
|
2451
|
+
() => void 0
|
|
2452
|
+
);
|
|
2453
|
+
return result;
|
|
2454
|
+
}
|
|
2455
|
+
async function listManagedDeployments() {
|
|
2456
|
+
const records = await readStore();
|
|
2457
|
+
return Promise.all(
|
|
2458
|
+
records.map(async (item) => {
|
|
2459
|
+
try {
|
|
2460
|
+
const input = await runtimeFor(item);
|
|
2461
|
+
assertNativeProvider(input.config.defaults?.provider);
|
|
2462
|
+
return await writeProjectRuntime2(input, async (ctx) => {
|
|
2463
|
+
const detail = await getDeploymentDetailsForContext(ctx, item.id);
|
|
2464
|
+
return {
|
|
2465
|
+
...item,
|
|
2466
|
+
provider: detail.provider,
|
|
2467
|
+
schedule: { expression: item.expression, timezone: item.timezone },
|
|
2468
|
+
status: detail.info.status,
|
|
2469
|
+
remoteId: detail.info.id
|
|
2470
|
+
};
|
|
2471
|
+
});
|
|
2472
|
+
} catch {
|
|
2473
|
+
return {
|
|
2474
|
+
...item,
|
|
2475
|
+
schedule: { expression: item.expression, timezone: item.timezone },
|
|
2476
|
+
status: "unavailable",
|
|
2477
|
+
remoteId: null
|
|
2478
|
+
};
|
|
2479
|
+
}
|
|
2480
|
+
})
|
|
2481
|
+
);
|
|
2482
|
+
}
|
|
2483
|
+
async function createManagedDeployment(input) {
|
|
2484
|
+
return serializeStoreMutation(async () => {
|
|
2485
|
+
const records = await readStore();
|
|
2486
|
+
const id = `schedule-${crypto.randomUUID()}`;
|
|
2487
|
+
const base = await loadCompiledRuntimeInput(input.playbookId);
|
|
2488
|
+
assertNativeProvider(base.config.defaults?.provider);
|
|
2489
|
+
const item = { ...input, id, provider: base.config.defaults.provider };
|
|
2490
|
+
const runtime = attachDeployment(base, item);
|
|
2491
|
+
const agentRun = await syncAgentResourcesWithStateBackend3(runtime, runtime.compiled.agentId);
|
|
2492
|
+
if (agentRun.status !== "completed") throw new UserError3(agentRun.error ?? "Failed to provision schedule agent.");
|
|
2493
|
+
await executeOnlyDeployment(runtime, id);
|
|
2494
|
+
await writeStore([...records, item]);
|
|
2495
|
+
return (await listManagedDeployments()).find((deployment) => deployment.id === id);
|
|
2496
|
+
});
|
|
2497
|
+
}
|
|
2498
|
+
async function requireStored(id) {
|
|
2499
|
+
const records = await readStore();
|
|
2500
|
+
const item = records.find((record) => record.id === id);
|
|
2501
|
+
if (!item) throw new UserError3(`Deployment '${id}' not found.`);
|
|
2502
|
+
return { item, records };
|
|
2503
|
+
}
|
|
2504
|
+
async function setManagedDeploymentPaused(id, paused) {
|
|
2505
|
+
const { item } = await requireStored(id);
|
|
2506
|
+
const input = await runtimeFor(item);
|
|
2507
|
+
return writeProjectRuntime2(input, (ctx) => pauseDeploymentForContext(ctx, id, paused));
|
|
2508
|
+
}
|
|
2509
|
+
async function runManagedDeployment(id) {
|
|
2510
|
+
const { item } = await requireStored(id);
|
|
2511
|
+
const input = await runtimeFor(item);
|
|
2512
|
+
const run = await writeProjectRuntime2(input, (ctx) => runDeploymentForContext(ctx, id));
|
|
2513
|
+
if (run.result.error) {
|
|
2514
|
+
throw new UserError3(`Deployment run failed: ${run.result.error.type} - ${run.result.error.message}`);
|
|
2515
|
+
}
|
|
2516
|
+
return run;
|
|
2517
|
+
}
|
|
2518
|
+
async function deleteManagedDeployment(id) {
|
|
2519
|
+
return serializeStoreMutation(async () => {
|
|
2520
|
+
const { item, records } = await requireStored(id);
|
|
2521
|
+
const input = await runtimeFor(item);
|
|
2522
|
+
input.config.deployments = {};
|
|
2523
|
+
await executeOnlyDeployment(input, id, true);
|
|
2524
|
+
await writeStore(records.filter((record) => record.id !== id));
|
|
2525
|
+
return { deleted: true };
|
|
2526
|
+
});
|
|
2527
|
+
}
|
|
2528
|
+
|
|
2529
|
+
// ../../apps/server/src/routes/deployments.ts
|
|
2530
|
+
var deploymentsRoute = new OpenAPIHono3();
|
|
2531
|
+
var idParam = z5.object({ id: z5.string().min(1) });
|
|
2532
|
+
var listRoute = createRoute3({
|
|
2533
|
+
method: "get",
|
|
2534
|
+
path: "/deployments",
|
|
2535
|
+
responses: {
|
|
2536
|
+
200: { description: "List managed deployments", content: { "application/json": { schema: DeploymentListSchema } } },
|
|
2537
|
+
...errorResponses
|
|
2538
|
+
}
|
|
2539
|
+
});
|
|
2540
|
+
deploymentsRoute.openapi(listRoute, async (c) => c.json({ deployments: await listManagedDeployments() }, 200));
|
|
2541
|
+
var createRouteDef = createRoute3({
|
|
2542
|
+
method: "post",
|
|
2543
|
+
path: "/deployments",
|
|
2544
|
+
request: { body: { content: { "application/json": { schema: CreateDeploymentBodySchema } } } },
|
|
2545
|
+
responses: {
|
|
2546
|
+
201: {
|
|
2547
|
+
description: "Create a native deployment",
|
|
2548
|
+
content: { "application/json": { schema: DeploymentStatusSchema } }
|
|
2549
|
+
},
|
|
2550
|
+
...errorResponses
|
|
2551
|
+
}
|
|
2552
|
+
});
|
|
2553
|
+
deploymentsRoute.openapi(createRouteDef, async (c) => c.json(await createManagedDeployment(c.req.valid("json")), 201));
|
|
2554
|
+
var pauseRoute = createRoute3({
|
|
2555
|
+
method: "put",
|
|
2556
|
+
path: "/deployments/{id}/paused",
|
|
2557
|
+
request: { params: idParam, body: { content: { "application/json": { schema: SetDeploymentPausedBodySchema } } } },
|
|
2558
|
+
responses: {
|
|
2559
|
+
200: {
|
|
2560
|
+
description: "Pause or resume a deployment",
|
|
2561
|
+
content: {
|
|
2562
|
+
"application/json": { schema: z5.object({ id: z5.string().nullable(), status: z5.string() }).passthrough() }
|
|
2563
|
+
}
|
|
2564
|
+
},
|
|
2565
|
+
...errorResponses
|
|
2566
|
+
}
|
|
2567
|
+
});
|
|
2568
|
+
deploymentsRoute.openapi(
|
|
2569
|
+
pauseRoute,
|
|
2570
|
+
async (c) => c.json(await setManagedDeploymentPaused(c.req.valid("param").id, c.req.valid("json").paused), 200)
|
|
2571
|
+
);
|
|
2572
|
+
var runRoute = createRoute3({
|
|
2573
|
+
method: "post",
|
|
2574
|
+
path: "/deployments/{id}/runs",
|
|
2575
|
+
request: { params: idParam },
|
|
2576
|
+
responses: {
|
|
2577
|
+
201: { description: "Trigger a deployment run", content: { "application/json": { schema: DeploymentRunSchema } } },
|
|
2578
|
+
...errorResponses
|
|
2579
|
+
}
|
|
2580
|
+
});
|
|
2581
|
+
deploymentsRoute.openapi(runRoute, async (c) => c.json(await runManagedDeployment(c.req.valid("param").id), 201));
|
|
2582
|
+
var deleteRoute = createRoute3({
|
|
2583
|
+
method: "delete",
|
|
2584
|
+
path: "/deployments/{id}",
|
|
2585
|
+
request: { params: idParam },
|
|
2586
|
+
responses: {
|
|
2587
|
+
200: { description: "Delete a deployment", content: { "application/json": { schema: DeleteDeploymentSchema } } },
|
|
2588
|
+
...errorResponses
|
|
2589
|
+
}
|
|
2590
|
+
});
|
|
2591
|
+
deploymentsRoute.openapi(deleteRoute, async (c) => c.json(await deleteManagedDeployment(c.req.valid("param").id), 200));
|
|
2592
|
+
|
|
2322
2593
|
// ../../apps/server/src/routes/environments.ts
|
|
2323
|
-
import { createRoute as
|
|
2594
|
+
import { createRoute as createRoute4, OpenAPIHono as OpenAPIHono4 } from "@hono/zod-openapi";
|
|
2324
2595
|
import { createCloudEnvironment, deleteCloudEnvironment, listCloudEnvironments } from "@openagentpack/sdk";
|
|
2325
2596
|
|
|
2326
2597
|
// ../../apps/server/src/schemas/environments.ts
|
|
2327
|
-
import { z as
|
|
2598
|
+
import { z as z6 } from "@hono/zod-openapi";
|
|
2328
2599
|
import { CloudEnvironmentSchema } from "@openagentpack/sdk";
|
|
2329
2600
|
import { CloudEnvironmentSchema as CloudEnvironmentSchema2 } from "@openagentpack/sdk";
|
|
2330
|
-
var CloudEnvironmentsResponseSchema =
|
|
2331
|
-
environments:
|
|
2332
|
-
});
|
|
2333
|
-
var CreateEnvironmentBodySchema =
|
|
2334
|
-
name:
|
|
2335
|
-
description:
|
|
2336
|
-
metadata:
|
|
2337
|
-
});
|
|
2338
|
-
var CreateEnvironmentResponseSchema =
|
|
2339
|
-
environment:
|
|
2340
|
-
id:
|
|
2341
|
-
type:
|
|
2342
|
-
version:
|
|
2601
|
+
var CloudEnvironmentsResponseSchema = z6.object({
|
|
2602
|
+
environments: z6.array(CloudEnvironmentSchema)
|
|
2603
|
+
});
|
|
2604
|
+
var CreateEnvironmentBodySchema = z6.object({
|
|
2605
|
+
name: z6.string().min(1),
|
|
2606
|
+
description: z6.string().optional(),
|
|
2607
|
+
metadata: z6.record(z6.string(), z6.string()).optional()
|
|
2608
|
+
});
|
|
2609
|
+
var CreateEnvironmentResponseSchema = z6.object({
|
|
2610
|
+
environment: z6.object({
|
|
2611
|
+
id: z6.string().nullable(),
|
|
2612
|
+
type: z6.string(),
|
|
2613
|
+
version: z6.number().optional()
|
|
2343
2614
|
})
|
|
2344
2615
|
});
|
|
2345
|
-
var DeleteEnvironmentResponseSchema =
|
|
2346
|
-
id:
|
|
2347
|
-
type:
|
|
2616
|
+
var DeleteEnvironmentResponseSchema = z6.object({
|
|
2617
|
+
id: z6.string(),
|
|
2618
|
+
type: z6.string()
|
|
2348
2619
|
});
|
|
2349
|
-
var EnvironmentParamsSchema =
|
|
2350
|
-
environmentId:
|
|
2620
|
+
var EnvironmentParamsSchema = z6.object({
|
|
2621
|
+
environmentId: z6.string().min(1)
|
|
2351
2622
|
});
|
|
2352
2623
|
|
|
2353
2624
|
// ../../apps/server/src/routes/environments.ts
|
|
2354
|
-
var environmentsRoute = new
|
|
2355
|
-
var listEnvironmentsRoute =
|
|
2625
|
+
var environmentsRoute = new OpenAPIHono4();
|
|
2626
|
+
var listEnvironmentsRoute = createRoute4({
|
|
2356
2627
|
method: "get",
|
|
2357
2628
|
path: "/environments",
|
|
2358
2629
|
responses: {
|
|
@@ -2367,7 +2638,7 @@ environmentsRoute.openapi(listEnvironmentsRoute, async (c) => {
|
|
|
2367
2638
|
const environments = await withAgentRuntime(DEFAULT_AGENT_ID, (ctx) => listCloudEnvironments(ctx));
|
|
2368
2639
|
return c.json({ environments }, 200);
|
|
2369
2640
|
});
|
|
2370
|
-
var createEnvironmentRoute =
|
|
2641
|
+
var createEnvironmentRoute = createRoute4({
|
|
2371
2642
|
method: "post",
|
|
2372
2643
|
path: "/environments",
|
|
2373
2644
|
request: {
|
|
@@ -2396,7 +2667,7 @@ environmentsRoute.openapi(createEnvironmentRoute, async (c) => {
|
|
|
2396
2667
|
);
|
|
2397
2668
|
return c.json({ environment }, 200);
|
|
2398
2669
|
});
|
|
2399
|
-
var deleteEnvironmentRoute =
|
|
2670
|
+
var deleteEnvironmentRoute = createRoute4({
|
|
2400
2671
|
method: "delete",
|
|
2401
2672
|
path: "/environments/{environmentId}",
|
|
2402
2673
|
request: {
|
|
@@ -2417,44 +2688,44 @@ environmentsRoute.openapi(deleteEnvironmentRoute, async (c) => {
|
|
|
2417
2688
|
});
|
|
2418
2689
|
|
|
2419
2690
|
// ../../apps/server/src/routes/files.ts
|
|
2420
|
-
import { createRoute as
|
|
2691
|
+
import { createRoute as createRoute5, OpenAPIHono as OpenAPIHono5 } from "@hono/zod-openapi";
|
|
2421
2692
|
|
|
2422
2693
|
// ../../apps/server/src/schemas/files.ts
|
|
2423
|
-
import { z as
|
|
2424
|
-
var ProviderFileInfoSchema =
|
|
2425
|
-
id:
|
|
2426
|
-
filename:
|
|
2427
|
-
mime_type:
|
|
2428
|
-
size_bytes:
|
|
2429
|
-
created_at:
|
|
2430
|
-
downloadable:
|
|
2431
|
-
status:
|
|
2432
|
-
purpose:
|
|
2433
|
-
available:
|
|
2694
|
+
import { z as z7 } from "@hono/zod-openapi";
|
|
2695
|
+
var ProviderFileInfoSchema = z7.object({
|
|
2696
|
+
id: z7.string(),
|
|
2697
|
+
filename: z7.string(),
|
|
2698
|
+
mime_type: z7.string(),
|
|
2699
|
+
size_bytes: z7.number(),
|
|
2700
|
+
created_at: z7.string(),
|
|
2701
|
+
downloadable: z7.boolean().optional(),
|
|
2702
|
+
status: z7.string().optional(),
|
|
2703
|
+
purpose: z7.string().optional(),
|
|
2704
|
+
available: z7.boolean().optional()
|
|
2434
2705
|
}).openapi("ProviderFileInfo");
|
|
2435
|
-
var UploadFileFormSchema =
|
|
2436
|
-
file:
|
|
2706
|
+
var UploadFileFormSchema = z7.object({
|
|
2707
|
+
file: z7.instanceof(File).openapi({ type: "string", format: "binary" })
|
|
2437
2708
|
});
|
|
2438
|
-
var FilesResponseSchema =
|
|
2439
|
-
files:
|
|
2709
|
+
var FilesResponseSchema = z7.object({
|
|
2710
|
+
files: z7.array(ProviderFileInfoSchema)
|
|
2440
2711
|
});
|
|
2441
|
-
var FileStatusesBodySchema =
|
|
2442
|
-
fileIds:
|
|
2712
|
+
var FileStatusesBodySchema = z7.object({
|
|
2713
|
+
fileIds: z7.array(z7.string())
|
|
2443
2714
|
});
|
|
2444
|
-
var FileStatusInfoSchema =
|
|
2445
|
-
id:
|
|
2446
|
-
status:
|
|
2447
|
-
available:
|
|
2715
|
+
var FileStatusInfoSchema = z7.object({
|
|
2716
|
+
id: z7.string(),
|
|
2717
|
+
status: z7.string().optional(),
|
|
2718
|
+
available: z7.boolean().optional()
|
|
2448
2719
|
});
|
|
2449
|
-
var FileStatusesResponseSchema =
|
|
2450
|
-
files:
|
|
2720
|
+
var FileStatusesResponseSchema = z7.object({
|
|
2721
|
+
files: z7.array(FileStatusInfoSchema)
|
|
2451
2722
|
});
|
|
2452
|
-
var FileParamsSchema =
|
|
2453
|
-
id:
|
|
2723
|
+
var FileParamsSchema = z7.object({
|
|
2724
|
+
id: z7.string().min(1)
|
|
2454
2725
|
});
|
|
2455
|
-
var FileDownloadResponseSchema =
|
|
2456
|
-
url:
|
|
2457
|
-
expires_at:
|
|
2726
|
+
var FileDownloadResponseSchema = z7.object({
|
|
2727
|
+
url: z7.string(),
|
|
2728
|
+
expires_at: z7.string().optional()
|
|
2458
2729
|
});
|
|
2459
2730
|
|
|
2460
2731
|
// ../../apps/server/src/services/files/upload.ts
|
|
@@ -2507,9 +2778,9 @@ async function getUserFileStatuses(fileIds) {
|
|
|
2507
2778
|
}
|
|
2508
2779
|
|
|
2509
2780
|
// ../../apps/server/src/routes/files.ts
|
|
2510
|
-
var filesRoute = new
|
|
2781
|
+
var filesRoute = new OpenAPIHono5();
|
|
2511
2782
|
var MAX_UPLOAD_BYTES = 100 * 1024 * 1024;
|
|
2512
|
-
var uploadFileRoute =
|
|
2783
|
+
var uploadFileRoute = createRoute5({
|
|
2513
2784
|
method: "post",
|
|
2514
2785
|
path: "/files",
|
|
2515
2786
|
operationId: "uploadFile",
|
|
@@ -2553,7 +2824,7 @@ filesRoute.openapi(
|
|
|
2553
2824
|
if (!result.success) return c.json({ error: { message: "file is required" } }, 400);
|
|
2554
2825
|
}
|
|
2555
2826
|
);
|
|
2556
|
-
var listFilesRoute =
|
|
2827
|
+
var listFilesRoute = createRoute5({
|
|
2557
2828
|
method: "get",
|
|
2558
2829
|
path: "/files",
|
|
2559
2830
|
operationId: "listFiles",
|
|
@@ -2569,7 +2840,7 @@ filesRoute.openapi(listFilesRoute, async (c) => {
|
|
|
2569
2840
|
const files = await listUserFiles();
|
|
2570
2841
|
return c.json({ files }, 200);
|
|
2571
2842
|
});
|
|
2572
|
-
var getFileStatusesRoute =
|
|
2843
|
+
var getFileStatusesRoute = createRoute5({
|
|
2573
2844
|
method: "post",
|
|
2574
2845
|
path: "/files/status",
|
|
2575
2846
|
operationId: "getFileStatuses",
|
|
@@ -2598,7 +2869,7 @@ filesRoute.openapi(
|
|
|
2598
2869
|
if (!result.success) return c.json({ error: { message: "fileIds (string[]) is required" } }, 400);
|
|
2599
2870
|
}
|
|
2600
2871
|
);
|
|
2601
|
-
var downloadFileRoute =
|
|
2872
|
+
var downloadFileRoute = createRoute5({
|
|
2602
2873
|
method: "get",
|
|
2603
2874
|
path: "/files/{id}/download",
|
|
2604
2875
|
operationId: "downloadFile",
|
|
@@ -2616,7 +2887,7 @@ filesRoute.openapi(downloadFileRoute, async (c) => {
|
|
|
2616
2887
|
const result = await getUserFileDownloadUrl(id);
|
|
2617
2888
|
return c.json(result, 200);
|
|
2618
2889
|
});
|
|
2619
|
-
var deleteFileRoute =
|
|
2890
|
+
var deleteFileRoute = createRoute5({
|
|
2620
2891
|
method: "delete",
|
|
2621
2892
|
path: "/files/{id}",
|
|
2622
2893
|
operationId: "deleteFile",
|
|
@@ -2633,24 +2904,24 @@ filesRoute.openapi(deleteFileRoute, async (c) => {
|
|
|
2633
2904
|
});
|
|
2634
2905
|
|
|
2635
2906
|
// ../../apps/server/src/routes/models.ts
|
|
2636
|
-
import { createRoute as
|
|
2907
|
+
import { createRoute as createRoute6, OpenAPIHono as OpenAPIHono6 } from "@hono/zod-openapi";
|
|
2637
2908
|
import { listProviderModelsForContext } from "@openagentpack/sdk";
|
|
2638
2909
|
|
|
2639
2910
|
// ../../apps/server/src/schemas/models.ts
|
|
2640
|
-
import { z as
|
|
2641
|
-
var ModelOptionSchema =
|
|
2642
|
-
id:
|
|
2643
|
-
display_name:
|
|
2644
|
-
is_enabled:
|
|
2645
|
-
is_new:
|
|
2911
|
+
import { z as z8 } from "@hono/zod-openapi";
|
|
2912
|
+
var ModelOptionSchema = z8.object({
|
|
2913
|
+
id: z8.string(),
|
|
2914
|
+
display_name: z8.string(),
|
|
2915
|
+
is_enabled: z8.boolean().optional(),
|
|
2916
|
+
is_new: z8.boolean().optional()
|
|
2646
2917
|
});
|
|
2647
|
-
var ModelsResponseSchema =
|
|
2648
|
-
models:
|
|
2918
|
+
var ModelsResponseSchema = z8.object({
|
|
2919
|
+
models: z8.array(ModelOptionSchema)
|
|
2649
2920
|
});
|
|
2650
2921
|
|
|
2651
2922
|
// ../../apps/server/src/routes/models.ts
|
|
2652
|
-
var modelsRoute = new
|
|
2653
|
-
var listModelsRoute =
|
|
2923
|
+
var modelsRoute = new OpenAPIHono6();
|
|
2924
|
+
var listModelsRoute = createRoute6({
|
|
2654
2925
|
method: "get",
|
|
2655
2926
|
path: "/models",
|
|
2656
2927
|
responses: {
|
|
@@ -2678,72 +2949,72 @@ modelsRoute.openapi(listModelsRoute, async (c) => {
|
|
|
2678
2949
|
});
|
|
2679
2950
|
|
|
2680
2951
|
// ../../apps/server/src/routes/sessions/index.ts
|
|
2681
|
-
import { createRoute as
|
|
2952
|
+
import { createRoute as createRoute11, OpenAPIHono as OpenAPIHono11 } from "@hono/zod-openapi";
|
|
2682
2953
|
|
|
2683
2954
|
// ../../apps/server/src/schemas/sessions.ts
|
|
2684
|
-
import { z as
|
|
2955
|
+
import { z as z9 } from "@hono/zod-openapi";
|
|
2685
2956
|
import { SessionEventSchema, SessionSchema } from "@openagentpack/sdk";
|
|
2686
|
-
var SessionListResponseSchema =
|
|
2687
|
-
data:
|
|
2688
|
-
next_page_token:
|
|
2957
|
+
var SessionListResponseSchema = z9.object({
|
|
2958
|
+
data: z9.array(SessionSchema),
|
|
2959
|
+
next_page_token: z9.string().nullish()
|
|
2689
2960
|
}).openapi("SessionListResponse");
|
|
2690
|
-
var SessionDetailResponseSchema =
|
|
2961
|
+
var SessionDetailResponseSchema = z9.object({
|
|
2691
2962
|
session: SessionSchema,
|
|
2692
|
-
events:
|
|
2693
|
-
events_next_page_token:
|
|
2963
|
+
events: z9.array(SessionEventSchema),
|
|
2964
|
+
events_next_page_token: z9.string().nullish()
|
|
2694
2965
|
}).openapi("SessionDetailResponse");
|
|
2695
|
-
var SessionEventsPageResponseSchema =
|
|
2696
|
-
events:
|
|
2697
|
-
events_next_page_token:
|
|
2966
|
+
var SessionEventsPageResponseSchema = z9.object({
|
|
2967
|
+
events: z9.array(SessionEventSchema),
|
|
2968
|
+
events_next_page_token: z9.string().nullish()
|
|
2698
2969
|
}).openapi("SessionEventsPageResponse");
|
|
2699
|
-
var SessionDeleteResponseSchema =
|
|
2700
|
-
session_id:
|
|
2701
|
-
deleted:
|
|
2970
|
+
var SessionDeleteResponseSchema = z9.object({
|
|
2971
|
+
session_id: z9.string(),
|
|
2972
|
+
deleted: z9.boolean()
|
|
2702
2973
|
}).openapi("SessionDeleteResponse");
|
|
2703
|
-
var SessionsQuerySchema =
|
|
2974
|
+
var SessionsQuerySchema = z9.object({
|
|
2704
2975
|
// Non-numeric values resolve to `undefined` so the handler clamps to a
|
|
2705
2976
|
// default instead of the request being rejected with a 400.
|
|
2706
|
-
limit:
|
|
2977
|
+
limit: z9.preprocess((value) => {
|
|
2707
2978
|
const parsed = Number(value);
|
|
2708
2979
|
return Number.isFinite(parsed) ? parsed : void 0;
|
|
2709
|
-
},
|
|
2710
|
-
agentId:
|
|
2980
|
+
}, z9.number().int().optional()),
|
|
2981
|
+
agentId: z9.string().optional(),
|
|
2711
2982
|
// Opaque cursor for the next page (provider's next_page / next_page_token, passed through verbatim).
|
|
2712
|
-
pageToken:
|
|
2983
|
+
pageToken: z9.string().optional()
|
|
2713
2984
|
});
|
|
2714
|
-
var SessionDetailQuerySchema =
|
|
2715
|
-
agentId:
|
|
2985
|
+
var SessionDetailQuerySchema = z9.object({
|
|
2986
|
+
agentId: z9.string().optional()
|
|
2716
2987
|
});
|
|
2717
|
-
var SessionEventsQuerySchema =
|
|
2718
|
-
agentId:
|
|
2719
|
-
pageToken:
|
|
2720
|
-
limit:
|
|
2988
|
+
var SessionEventsQuerySchema = z9.object({
|
|
2989
|
+
agentId: z9.string().optional(),
|
|
2990
|
+
pageToken: z9.string().optional(),
|
|
2991
|
+
limit: z9.preprocess((value) => {
|
|
2721
2992
|
const parsed = Number(value);
|
|
2722
2993
|
return Number.isFinite(parsed) ? parsed : void 0;
|
|
2723
|
-
},
|
|
2994
|
+
}, z9.number().int().optional())
|
|
2724
2995
|
});
|
|
2725
|
-
var SessionParamsSchema =
|
|
2726
|
-
sessionId:
|
|
2996
|
+
var SessionParamsSchema = z9.object({
|
|
2997
|
+
sessionId: z9.string()
|
|
2727
2998
|
});
|
|
2728
|
-
var CreateSessionBodySchema =
|
|
2729
|
-
agentId:
|
|
2730
|
-
prompt:
|
|
2999
|
+
var CreateSessionBodySchema = z9.object({
|
|
3000
|
+
agentId: z9.string(),
|
|
3001
|
+
prompt: z9.string().min(1),
|
|
2731
3002
|
// Required: a session must be pinned to a cloud environment (sandbox).
|
|
2732
|
-
environmentId:
|
|
3003
|
+
environmentId: z9.string().min(1),
|
|
2733
3004
|
// Optional: cloud vault ids to bind a user-supplied credential so the sandbox receives it.
|
|
2734
3005
|
// Top-level binding shape matches the console createSession.
|
|
2735
|
-
vaultIds:
|
|
2736
|
-
title:
|
|
3006
|
+
vaultIds: z9.array(z9.string()).optional(),
|
|
3007
|
+
title: z9.string().optional(),
|
|
2737
3008
|
// Uploaded files to mount as session resources so the task can read the user's files.
|
|
2738
3009
|
// Each file needs a mount_path (provider rejects a file resource without one).
|
|
2739
|
-
files:
|
|
3010
|
+
files: z9.array(z9.object({ fileId: z9.string(), mountPath: z9.string() })).optional(),
|
|
2740
3011
|
// Model the agent should run for this session. If present, createSession applies it
|
|
2741
3012
|
// to the agent config immediately before starting the run.
|
|
2742
|
-
model:
|
|
3013
|
+
model: z9.string().optional()
|
|
2743
3014
|
});
|
|
2744
|
-
var SendMessageBodySchema =
|
|
2745
|
-
agentId:
|
|
2746
|
-
message:
|
|
3015
|
+
var SendMessageBodySchema = z9.object({
|
|
3016
|
+
agentId: z9.string().optional(),
|
|
3017
|
+
message: z9.string().min(1)
|
|
2747
3018
|
});
|
|
2748
3019
|
|
|
2749
3020
|
// ../../apps/server/src/services/sessions/event-sanitizer.ts
|
|
@@ -2754,9 +3025,9 @@ function shouldIncludeDebugRaw(request) {
|
|
|
2754
3025
|
}
|
|
2755
3026
|
|
|
2756
3027
|
// ../../apps/server/src/routes/sessions/detail.ts
|
|
2757
|
-
import { createRoute as
|
|
2758
|
-
var sessionsDetailRoute = new
|
|
2759
|
-
var getSessionRoute =
|
|
3028
|
+
import { createRoute as createRoute7, OpenAPIHono as OpenAPIHono7 } from "@hono/zod-openapi";
|
|
3029
|
+
var sessionsDetailRoute = new OpenAPIHono7();
|
|
3030
|
+
var getSessionRoute = createRoute7({
|
|
2760
3031
|
method: "get",
|
|
2761
3032
|
path: "/sessions/{sessionId}",
|
|
2762
3033
|
request: {
|
|
@@ -2785,7 +3056,7 @@ sessionsDetailRoute.openapi(getSessionRoute, async (c) => {
|
|
|
2785
3056
|
200
|
|
2786
3057
|
);
|
|
2787
3058
|
});
|
|
2788
|
-
var deleteSessionRoute =
|
|
3059
|
+
var deleteSessionRoute = createRoute7({
|
|
2789
3060
|
method: "delete",
|
|
2790
3061
|
path: "/sessions/{sessionId}",
|
|
2791
3062
|
request: {
|
|
@@ -2808,9 +3079,9 @@ sessionsDetailRoute.openapi(deleteSessionRoute, async (c) => {
|
|
|
2808
3079
|
});
|
|
2809
3080
|
|
|
2810
3081
|
// ../../apps/server/src/routes/sessions/events.ts
|
|
2811
|
-
import { createRoute as
|
|
2812
|
-
var sessionsEventsRoute = new
|
|
2813
|
-
var listSessionEventsRoute =
|
|
3082
|
+
import { createRoute as createRoute8, OpenAPIHono as OpenAPIHono8 } from "@hono/zod-openapi";
|
|
3083
|
+
var sessionsEventsRoute = new OpenAPIHono8();
|
|
3084
|
+
var listSessionEventsRoute = createRoute8({
|
|
2814
3085
|
method: "get",
|
|
2815
3086
|
path: "/sessions/{sessionId}/events",
|
|
2816
3087
|
request: {
|
|
@@ -2847,9 +3118,9 @@ sessionsEventsRoute.openapi(listSessionEventsRoute, async (c) => {
|
|
|
2847
3118
|
});
|
|
2848
3119
|
|
|
2849
3120
|
// ../../apps/server/src/routes/sessions/messages.ts
|
|
2850
|
-
import { createRoute as
|
|
2851
|
-
var sessionsMessagesRoute = new
|
|
2852
|
-
var sendMessageRoute =
|
|
3121
|
+
import { createRoute as createRoute9, OpenAPIHono as OpenAPIHono9 } from "@hono/zod-openapi";
|
|
3122
|
+
var sessionsMessagesRoute = new OpenAPIHono9();
|
|
3123
|
+
var sendMessageRoute = createRoute9({
|
|
2853
3124
|
method: "post",
|
|
2854
3125
|
path: "/sessions/{sessionId}/messages",
|
|
2855
3126
|
request: {
|
|
@@ -2878,15 +3149,15 @@ sessionsMessagesRoute.openapi(sendMessageRoute, async (c) => {
|
|
|
2878
3149
|
});
|
|
2879
3150
|
|
|
2880
3151
|
// ../../apps/server/src/routes/sessions/stream.ts
|
|
2881
|
-
import { createRoute as
|
|
2882
|
-
var sessionsStreamRoute = new
|
|
2883
|
-
var SessionStreamQuerySchema =
|
|
2884
|
-
after:
|
|
3152
|
+
import { createRoute as createRoute10, OpenAPIHono as OpenAPIHono10, z as z10 } from "@hono/zod-openapi";
|
|
3153
|
+
var sessionsStreamRoute = new OpenAPIHono10();
|
|
3154
|
+
var SessionStreamQuerySchema = z10.object({
|
|
3155
|
+
after: z10.preprocess((value) => {
|
|
2885
3156
|
const parsed = Number(value);
|
|
2886
3157
|
return Number.isFinite(parsed) ? parsed : void 0;
|
|
2887
|
-
},
|
|
3158
|
+
}, z10.number().int().optional())
|
|
2888
3159
|
});
|
|
2889
|
-
var streamSessionRoute =
|
|
3160
|
+
var streamSessionRoute = createRoute10({
|
|
2890
3161
|
method: "get",
|
|
2891
3162
|
path: "/sessions/{sessionId}/stream",
|
|
2892
3163
|
request: {
|
|
@@ -2898,7 +3169,7 @@ var streamSessionRoute = createRoute9({
|
|
|
2898
3169
|
description: "Stream session events as Server-Sent Events",
|
|
2899
3170
|
content: {
|
|
2900
3171
|
"text/event-stream": {
|
|
2901
|
-
schema:
|
|
3172
|
+
schema: z10.string().openapi({
|
|
2902
3173
|
description: 'SSE frames with event types "event", "done", and "ping".'
|
|
2903
3174
|
})
|
|
2904
3175
|
}
|
|
@@ -3008,8 +3279,8 @@ data: ${data}
|
|
|
3008
3279
|
}
|
|
3009
3280
|
|
|
3010
3281
|
// ../../apps/server/src/routes/sessions/index.ts
|
|
3011
|
-
var sessionsRoute = new
|
|
3012
|
-
var listSessionsRoute =
|
|
3282
|
+
var sessionsRoute = new OpenAPIHono11();
|
|
3283
|
+
var listSessionsRoute = createRoute11({
|
|
3013
3284
|
method: "get",
|
|
3014
3285
|
path: "/sessions",
|
|
3015
3286
|
request: {
|
|
@@ -3035,7 +3306,7 @@ sessionsRoute.openapi(listSessionsRoute, async (c) => {
|
|
|
3035
3306
|
});
|
|
3036
3307
|
return c.json({ data: sessions, next_page_token: nextPageToken ?? null }, 200);
|
|
3037
3308
|
});
|
|
3038
|
-
var createSessionRoute =
|
|
3309
|
+
var createSessionRoute = createRoute11({
|
|
3039
3310
|
method: "post",
|
|
3040
3311
|
path: "/sessions",
|
|
3041
3312
|
request: {
|
|
@@ -3077,51 +3348,51 @@ sessionsRoute.route("/", sessionsMessagesRoute);
|
|
|
3077
3348
|
sessionsRoute.route("/", sessionsStreamRoute);
|
|
3078
3349
|
|
|
3079
3350
|
// ../../apps/server/src/routes/skills.ts
|
|
3080
|
-
import { createRoute as
|
|
3351
|
+
import { createRoute as createRoute12, OpenAPIHono as OpenAPIHono12 } from "@hono/zod-openapi";
|
|
3081
3352
|
|
|
3082
3353
|
// ../../apps/server/src/schemas/skills.ts
|
|
3083
|
-
import { z as
|
|
3084
|
-
var ProviderSkillInfoSchema =
|
|
3085
|
-
id:
|
|
3086
|
-
name:
|
|
3087
|
-
description:
|
|
3088
|
-
source:
|
|
3089
|
-
status:
|
|
3090
|
-
latest_version:
|
|
3091
|
-
created_at:
|
|
3092
|
-
updated_at:
|
|
3354
|
+
import { z as z11 } from "@hono/zod-openapi";
|
|
3355
|
+
var ProviderSkillInfoSchema = z11.object({
|
|
3356
|
+
id: z11.string(),
|
|
3357
|
+
name: z11.string(),
|
|
3358
|
+
description: z11.string().optional(),
|
|
3359
|
+
source: z11.enum(["custom", "official"]),
|
|
3360
|
+
status: z11.enum(["checking", "active", "rejected", "deleted"]),
|
|
3361
|
+
latest_version: z11.string().optional(),
|
|
3362
|
+
created_at: z11.string().optional(),
|
|
3363
|
+
updated_at: z11.string().optional()
|
|
3093
3364
|
}).openapi("ProviderSkillInfo");
|
|
3094
|
-
var UploadSkillFileFormSchema =
|
|
3095
|
-
file:
|
|
3365
|
+
var UploadSkillFileFormSchema = z11.object({
|
|
3366
|
+
file: z11.instanceof(File).openapi({ type: "string", format: "binary" })
|
|
3096
3367
|
});
|
|
3097
|
-
var CreateSkillBodySchema =
|
|
3098
|
-
fileId:
|
|
3368
|
+
var CreateSkillBodySchema = z11.object({
|
|
3369
|
+
fileId: z11.string().min(1)
|
|
3099
3370
|
});
|
|
3100
|
-
var WarmSkillBodySchema =
|
|
3101
|
-
name:
|
|
3102
|
-
url:
|
|
3371
|
+
var WarmSkillBodySchema = z11.object({
|
|
3372
|
+
name: z11.string().min(1),
|
|
3373
|
+
url: z11.string().min(1)
|
|
3103
3374
|
});
|
|
3104
|
-
var WarmSkillResponseSchema =
|
|
3105
|
-
ok:
|
|
3375
|
+
var WarmSkillResponseSchema = z11.object({
|
|
3376
|
+
ok: z11.literal(true)
|
|
3106
3377
|
});
|
|
3107
|
-
var SkillsQuerySchema =
|
|
3108
|
-
source:
|
|
3378
|
+
var SkillsQuerySchema = z11.object({
|
|
3379
|
+
source: z11.enum(["custom", "official"]).optional()
|
|
3109
3380
|
});
|
|
3110
|
-
var SkillsResponseSchema =
|
|
3111
|
-
skills:
|
|
3381
|
+
var SkillsResponseSchema = z11.object({
|
|
3382
|
+
skills: z11.array(ProviderSkillInfoSchema)
|
|
3112
3383
|
});
|
|
3113
|
-
var SkillStatusesBodySchema =
|
|
3114
|
-
skillIds:
|
|
3384
|
+
var SkillStatusesBodySchema = z11.object({
|
|
3385
|
+
skillIds: z11.array(z11.string())
|
|
3115
3386
|
});
|
|
3116
|
-
var SkillStatusInfoSchema =
|
|
3117
|
-
id:
|
|
3118
|
-
status:
|
|
3387
|
+
var SkillStatusInfoSchema = z11.object({
|
|
3388
|
+
id: z11.string(),
|
|
3389
|
+
status: z11.enum(["checking", "active", "rejected", "deleted"]).optional()
|
|
3119
3390
|
});
|
|
3120
|
-
var SkillStatusesResponseSchema =
|
|
3121
|
-
skills:
|
|
3391
|
+
var SkillStatusesResponseSchema = z11.object({
|
|
3392
|
+
skills: z11.array(SkillStatusInfoSchema)
|
|
3122
3393
|
});
|
|
3123
|
-
var SkillParamsSchema =
|
|
3124
|
-
id:
|
|
3394
|
+
var SkillParamsSchema = z11.object({
|
|
3395
|
+
id: z11.string().min(1)
|
|
3125
3396
|
});
|
|
3126
3397
|
|
|
3127
3398
|
// ../../apps/server/src/services/skills/manage.ts
|
|
@@ -3222,9 +3493,9 @@ async function warmSkillByUrl(name, url) {
|
|
|
3222
3493
|
}
|
|
3223
3494
|
|
|
3224
3495
|
// ../../apps/server/src/routes/skills.ts
|
|
3225
|
-
var skillsRoute = new
|
|
3496
|
+
var skillsRoute = new OpenAPIHono12();
|
|
3226
3497
|
var MAX_UPLOAD_BYTES2 = 100 * 1024 * 1024;
|
|
3227
|
-
var uploadSkillFileRoute =
|
|
3498
|
+
var uploadSkillFileRoute = createRoute12({
|
|
3228
3499
|
method: "post",
|
|
3229
3500
|
path: "/skills/upload-file",
|
|
3230
3501
|
operationId: "uploadSkillFile",
|
|
@@ -3263,7 +3534,7 @@ skillsRoute.openapi(
|
|
|
3263
3534
|
if (!result.success) return c.json({ error: { message: "file is required" } }, 400);
|
|
3264
3535
|
}
|
|
3265
3536
|
);
|
|
3266
|
-
var createSkillRoute =
|
|
3537
|
+
var createSkillRoute = createRoute12({
|
|
3267
3538
|
method: "post",
|
|
3268
3539
|
path: "/skills",
|
|
3269
3540
|
operationId: "createSkill",
|
|
@@ -3292,7 +3563,7 @@ skillsRoute.openapi(
|
|
|
3292
3563
|
if (!result.success) return c.json({ error: { message: "fileId is required" } }, 400);
|
|
3293
3564
|
}
|
|
3294
3565
|
);
|
|
3295
|
-
var warmSkillRoute =
|
|
3566
|
+
var warmSkillRoute = createRoute12({
|
|
3296
3567
|
method: "post",
|
|
3297
3568
|
path: "/skills/warm",
|
|
3298
3569
|
operationId: "warmSkill",
|
|
@@ -3321,7 +3592,7 @@ skillsRoute.openapi(
|
|
|
3321
3592
|
if (!result.success) return c.json({ error: { message: "name and url are required" } }, 400);
|
|
3322
3593
|
}
|
|
3323
3594
|
);
|
|
3324
|
-
var listSkillsRoute =
|
|
3595
|
+
var listSkillsRoute = createRoute12({
|
|
3325
3596
|
method: "get",
|
|
3326
3597
|
path: "/skills",
|
|
3327
3598
|
operationId: "listSkills",
|
|
@@ -3347,7 +3618,7 @@ skillsRoute.openapi(
|
|
|
3347
3618
|
}
|
|
3348
3619
|
}
|
|
3349
3620
|
);
|
|
3350
|
-
var getSkillStatusesRoute =
|
|
3621
|
+
var getSkillStatusesRoute = createRoute12({
|
|
3351
3622
|
method: "post",
|
|
3352
3623
|
path: "/skills/status",
|
|
3353
3624
|
operationId: "getSkillStatuses",
|
|
@@ -3376,7 +3647,7 @@ skillsRoute.openapi(
|
|
|
3376
3647
|
if (!result.success) return c.json({ error: { message: "skillIds (string[]) is required" } }, 400);
|
|
3377
3648
|
}
|
|
3378
3649
|
);
|
|
3379
|
-
var deleteSkillRoute =
|
|
3650
|
+
var deleteSkillRoute = createRoute12({
|
|
3380
3651
|
method: "delete",
|
|
3381
3652
|
path: "/skills/{id}",
|
|
3382
3653
|
operationId: "deleteSkill",
|
|
@@ -3393,39 +3664,39 @@ skillsRoute.openapi(deleteSkillRoute, async (c) => {
|
|
|
3393
3664
|
});
|
|
3394
3665
|
|
|
3395
3666
|
// ../../apps/server/src/routes/vaults.ts
|
|
3396
|
-
import { createRoute as
|
|
3667
|
+
import { createRoute as createRoute13, OpenAPIHono as OpenAPIHono13 } from "@hono/zod-openapi";
|
|
3397
3668
|
import { createCloudVault, deleteCloudVault, listCloudVaults } from "@openagentpack/sdk";
|
|
3398
3669
|
|
|
3399
3670
|
// ../../apps/server/src/schemas/vaults.ts
|
|
3400
|
-
import { z as
|
|
3671
|
+
import { z as z12 } from "@hono/zod-openapi";
|
|
3401
3672
|
import { CloudVaultSchema } from "@openagentpack/sdk";
|
|
3402
3673
|
import { CloudVaultSchema as CloudVaultSchema2 } from "@openagentpack/sdk";
|
|
3403
|
-
var CloudVaultsResponseSchema =
|
|
3404
|
-
vaults:
|
|
3674
|
+
var CloudVaultsResponseSchema = z12.object({
|
|
3675
|
+
vaults: z12.array(CloudVaultSchema)
|
|
3405
3676
|
});
|
|
3406
|
-
var CreateVaultBodySchema =
|
|
3407
|
-
name:
|
|
3408
|
-
metadata:
|
|
3677
|
+
var CreateVaultBodySchema = z12.object({
|
|
3678
|
+
name: z12.string().min(1),
|
|
3679
|
+
metadata: z12.record(z12.string(), z12.string()).optional(),
|
|
3409
3680
|
// The DASHSCOPE_API_KEY stored as the vault's credential secret value. Optional:
|
|
3410
3681
|
// when omitted the server injects it from its own DASHSCOPE_API_KEY env.
|
|
3411
|
-
key:
|
|
3682
|
+
key: z12.string().min(1).optional()
|
|
3412
3683
|
});
|
|
3413
|
-
var CreateVaultResponseSchema =
|
|
3414
|
-
id:
|
|
3415
|
-
type:
|
|
3416
|
-
version:
|
|
3684
|
+
var CreateVaultResponseSchema = z12.object({
|
|
3685
|
+
id: z12.string().nullable(),
|
|
3686
|
+
type: z12.string(),
|
|
3687
|
+
version: z12.number().optional()
|
|
3417
3688
|
});
|
|
3418
|
-
var DeleteVaultResponseSchema =
|
|
3419
|
-
id:
|
|
3420
|
-
type:
|
|
3689
|
+
var DeleteVaultResponseSchema = z12.object({
|
|
3690
|
+
id: z12.string(),
|
|
3691
|
+
type: z12.string()
|
|
3421
3692
|
});
|
|
3422
|
-
var VaultParamsSchema =
|
|
3423
|
-
vaultId:
|
|
3693
|
+
var VaultParamsSchema = z12.object({
|
|
3694
|
+
vaultId: z12.string().min(1)
|
|
3424
3695
|
});
|
|
3425
3696
|
|
|
3426
3697
|
// ../../apps/server/src/routes/vaults.ts
|
|
3427
|
-
var vaultsRoute = new
|
|
3428
|
-
var listVaultsRoute =
|
|
3698
|
+
var vaultsRoute = new OpenAPIHono13();
|
|
3699
|
+
var listVaultsRoute = createRoute13({
|
|
3429
3700
|
method: "get",
|
|
3430
3701
|
path: "/vaults",
|
|
3431
3702
|
responses: {
|
|
@@ -3440,7 +3711,7 @@ vaultsRoute.openapi(listVaultsRoute, async (c) => {
|
|
|
3440
3711
|
const vaults = await withAgentRuntime(DEFAULT_AGENT_ID, (ctx) => listCloudVaults(ctx));
|
|
3441
3712
|
return c.json({ vaults }, 200);
|
|
3442
3713
|
});
|
|
3443
|
-
var createVaultRoute =
|
|
3714
|
+
var createVaultRoute = createRoute13({
|
|
3444
3715
|
method: "post",
|
|
3445
3716
|
path: "/vaults",
|
|
3446
3717
|
request: {
|
|
@@ -3483,7 +3754,7 @@ vaultsRoute.openapi(createVaultRoute, async (c) => {
|
|
|
3483
3754
|
);
|
|
3484
3755
|
return c.json(vault, 200);
|
|
3485
3756
|
});
|
|
3486
|
-
var deleteVaultRoute =
|
|
3757
|
+
var deleteVaultRoute = createRoute13({
|
|
3487
3758
|
method: "delete",
|
|
3488
3759
|
path: "/vaults/{vaultId}",
|
|
3489
3760
|
request: {
|
|
@@ -3511,7 +3782,7 @@ function requireEnv2(name) {
|
|
|
3511
3782
|
}
|
|
3512
3783
|
|
|
3513
3784
|
// ../../apps/server/src/app.ts
|
|
3514
|
-
var app = new
|
|
3785
|
+
var app = new OpenAPIHono14();
|
|
3515
3786
|
app.use(
|
|
3516
3787
|
"/*",
|
|
3517
3788
|
cors({
|
|
@@ -3522,6 +3793,7 @@ app.use(
|
|
|
3522
3793
|
})
|
|
3523
3794
|
);
|
|
3524
3795
|
app.route("/api", configRoute);
|
|
3796
|
+
app.route("/api", deploymentsRoute);
|
|
3525
3797
|
app.route("/api", agentsRoute);
|
|
3526
3798
|
app.route("/api", environmentsRoute);
|
|
3527
3799
|
app.route("/api", vaultsRoute);
|
|
@@ -3569,8 +3841,8 @@ async function resolveListenPort(preferred, maxAttempts = MAX_PORT_ATTEMPTS) {
|
|
|
3569
3841
|
|
|
3570
3842
|
// src/server.ts
|
|
3571
3843
|
var DEFAULT_PLAYGROUND_PORT = 4848;
|
|
3572
|
-
var webRoot =
|
|
3573
|
-
var indexHtml = injectPlaygroundRuntimeMarker(readFileSync(
|
|
3844
|
+
var webRoot = join3(dirname4(fileURLToPath(import.meta.url)), "../../web");
|
|
3845
|
+
var indexHtml = injectPlaygroundRuntimeMarker(readFileSync(join3(webRoot, "index.html"), "utf8"));
|
|
3574
3846
|
function injectPlaygroundRuntimeMarker(html) {
|
|
3575
3847
|
if (html.includes('name="agents-runtime"')) return html;
|
|
3576
3848
|
return html.replace("<head>", '<head>\n <meta name="agents-runtime" content="playground" />');
|