@zqagent/core 0.2.20 → 0.3.7
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/README.md +1 -1
- package/README.oss.en.md +3 -3
- package/README.oss.md +8 -3
- package/README.oss.zh-TW.md +3 -3
- package/dist/McpClient-CEQBUPuC.d.cts +145 -0
- package/dist/McpClient-CEQBUPuC.d.ts +145 -0
- package/dist/{ToolRegistry-C3pTFiaJ.d.cts → ToolRegistry-Cy0fQxrb.d.ts} +2 -111
- package/dist/{ToolRegistry-C3pTFiaJ.d.ts → ToolRegistry-DouDvn9E.d.cts} +2 -111
- package/dist/{explore-RtZtb-V6.d.ts → TurnEngine-BPKhWuSI.d.cts} +108 -73
- package/dist/{explore-BgRhj6SP.d.cts → TurnEngine-DtGEuVLT.d.ts} +108 -73
- package/dist/conflictGuard-BBOOIxxK.d.cts +42 -0
- package/dist/conflictGuard-BBOOIxxK.d.ts +42 -0
- package/dist/index.cjs +5930 -1114
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +577 -195
- package/dist/index.d.ts +577 -195
- package/dist/index.js +5761 -979
- package/dist/index.js.map +1 -1
- package/dist/internal/crypto/secrets.cjs +25 -0
- package/dist/internal/crypto/secrets.cjs.map +1 -0
- package/dist/internal/crypto/secrets.d.cts +2 -0
- package/dist/internal/crypto/secrets.d.ts +2 -0
- package/dist/internal/crypto/secrets.js +3 -0
- package/dist/internal/crypto/secrets.js.map +1 -0
- package/dist/internal/engine/FileLogHook.cjs +179 -0
- package/dist/internal/engine/FileLogHook.cjs.map +1 -0
- package/dist/internal/engine/FileLogHook.d.cts +67 -0
- package/dist/internal/engine/FileLogHook.d.ts +67 -0
- package/dist/internal/engine/FileLogHook.js +144 -0
- package/dist/internal/engine/FileLogHook.js.map +1 -0
- package/dist/internal/engine/approvalView.cjs +25 -0
- package/dist/internal/engine/approvalView.cjs.map +1 -0
- package/dist/internal/engine/approvalView.d.cts +1 -0
- package/dist/internal/engine/approvalView.d.ts +1 -0
- package/dist/internal/engine/approvalView.js +3 -0
- package/dist/internal/engine/approvalView.js.map +1 -0
- package/dist/internal/engine/limits.cjs +59 -0
- package/dist/internal/engine/limits.cjs.map +1 -0
- package/dist/internal/engine/limits.d.cts +32 -0
- package/dist/internal/engine/limits.d.ts +32 -0
- package/dist/internal/engine/limits.js +31 -0
- package/dist/internal/engine/limits.js.map +1 -0
- package/dist/internal/engine/sessionNaming.cjs +47 -0
- package/dist/internal/engine/sessionNaming.cjs.map +1 -0
- package/dist/internal/engine/sessionNaming.d.cts +25 -0
- package/dist/internal/engine/sessionNaming.d.ts +25 -0
- package/dist/internal/engine/sessionNaming.js +20 -0
- package/dist/internal/engine/sessionNaming.js.map +1 -0
- package/dist/internal/llmConfig.cjs +561 -0
- package/dist/internal/llmConfig.cjs.map +1 -0
- package/dist/internal/llmConfig.d.cts +75 -0
- package/dist/internal/llmConfig.d.ts +75 -0
- package/dist/internal/llmConfig.js +535 -0
- package/dist/internal/llmConfig.js.map +1 -0
- package/dist/internal/mcp/builtin/index.cjs +685 -0
- package/dist/internal/mcp/builtin/index.cjs.map +1 -0
- package/dist/internal/mcp/builtin/index.d.cts +21 -0
- package/dist/internal/mcp/builtin/index.d.ts +21 -0
- package/dist/internal/mcp/builtin/index.js +652 -0
- package/dist/internal/mcp/builtin/index.js.map +1 -0
- package/dist/internal/mcp/config.cjs +278 -0
- package/dist/internal/mcp/config.cjs.map +1 -0
- package/dist/internal/mcp/config.d.cts +61 -0
- package/dist/internal/mcp/config.d.ts +61 -0
- package/dist/internal/mcp/config.js +235 -0
- package/dist/internal/mcp/config.js.map +1 -0
- package/dist/internal/mcp/presets.cjs +184 -0
- package/dist/internal/mcp/presets.cjs.map +1 -0
- package/dist/internal/mcp/presets.d.cts +39 -0
- package/dist/internal/mcp/presets.d.ts +39 -0
- package/dist/internal/mcp/presets.js +158 -0
- package/dist/internal/mcp/presets.js.map +1 -0
- package/dist/internal/node-name.cjs +45 -0
- package/dist/internal/node-name.cjs.map +1 -0
- package/dist/internal/node-name.d.cts +3 -0
- package/dist/internal/node-name.d.ts +3 -0
- package/dist/internal/node-name.js +10 -0
- package/dist/internal/node-name.js.map +1 -0
- package/dist/internal/paths.cjs +63 -0
- package/dist/internal/paths.cjs.map +1 -0
- package/dist/internal/paths.d.cts +17 -0
- package/dist/internal/paths.d.ts +17 -0
- package/dist/internal/paths.js +25 -0
- package/dist/internal/paths.js.map +1 -0
- package/dist/internal/providers/diagnostics.cjs +288 -0
- package/dist/internal/providers/diagnostics.cjs.map +1 -0
- package/dist/internal/providers/diagnostics.d.cts +103 -0
- package/dist/internal/providers/diagnostics.d.ts +103 -0
- package/dist/internal/providers/diagnostics.js +250 -0
- package/dist/internal/providers/diagnostics.js.map +1 -0
- package/dist/internal/providers/models.cjs +699 -0
- package/dist/internal/providers/models.cjs.map +1 -0
- package/dist/internal/providers/models.d.cts +136 -0
- package/dist/internal/providers/models.d.ts +136 -0
- package/dist/internal/providers/models.js +654 -0
- package/dist/internal/providers/models.js.map +1 -0
- package/dist/internal/terminal.cjs +161 -0
- package/dist/internal/terminal.cjs.map +1 -0
- package/dist/internal/terminal.d.cts +58 -0
- package/dist/internal/terminal.d.ts +58 -0
- package/dist/internal/terminal.js +128 -0
- package/dist/internal/terminal.js.map +1 -0
- package/dist/internal/tools/execAsync.cjs +187 -0
- package/dist/internal/tools/execAsync.cjs.map +1 -0
- package/dist/internal/tools/execAsync.d.cts +30 -0
- package/dist/internal/tools/execAsync.d.ts +30 -0
- package/dist/internal/tools/execAsync.js +162 -0
- package/dist/internal/tools/execAsync.js.map +1 -0
- package/dist/internal/tools/git.cjs +935 -0
- package/dist/internal/tools/git.cjs.map +1 -0
- package/dist/internal/tools/git.d.cts +206 -0
- package/dist/internal/tools/git.d.ts +206 -0
- package/dist/internal/tools/git.js +883 -0
- package/dist/internal/tools/git.js.map +1 -0
- package/dist/internal/tools/pathSafety.cjs +99 -0
- package/dist/internal/tools/pathSafety.cjs.map +1 -0
- package/dist/internal/tools/pathSafety.d.cts +44 -0
- package/dist/internal/tools/pathSafety.d.ts +44 -0
- package/dist/internal/tools/pathSafety.js +61 -0
- package/dist/internal/tools/pathSafety.js.map +1 -0
- package/dist/internal/tools/plan.cjs +146 -0
- package/dist/internal/tools/plan.cjs.map +1 -0
- package/dist/internal/tools/plan.d.cts +48 -0
- package/dist/internal/tools/plan.d.ts +48 -0
- package/dist/internal/tools/plan.js +117 -0
- package/dist/internal/tools/plan.js.map +1 -0
- package/dist/internal/tools/ripgrep.cjs +118 -0
- package/dist/internal/tools/ripgrep.cjs.map +1 -0
- package/dist/internal/tools/ripgrep.d.cts +6 -0
- package/dist/internal/tools/ripgrep.d.ts +6 -0
- package/dist/internal/tools/ripgrep.js +89 -0
- package/dist/internal/tools/ripgrep.js.map +1 -0
- package/dist/internal/tools/sandbox.cjs +253 -0
- package/dist/internal/tools/sandbox.cjs.map +1 -0
- package/dist/internal/tools/sandbox.d.cts +67 -0
- package/dist/internal/tools/sandbox.d.ts +67 -0
- package/dist/internal/tools/sandbox.js +213 -0
- package/dist/internal/tools/sandbox.js.map +1 -0
- package/dist/internal/tools/shell.cjs +771 -0
- package/dist/internal/tools/shell.cjs.map +1 -0
- package/dist/internal/tools/shell.d.cts +47 -0
- package/dist/internal/tools/shell.d.ts +47 -0
- package/dist/internal/tools/shell.js +731 -0
- package/dist/internal/tools/shell.js.map +1 -0
- package/dist/internal/tools/shellRuntime.cjs +220 -0
- package/dist/internal/tools/shellRuntime.cjs.map +1 -0
- package/dist/internal/tools/shellRuntime.d.cts +67 -0
- package/dist/internal/tools/shellRuntime.d.ts +67 -0
- package/dist/internal/tools/shellRuntime.js +181 -0
- package/dist/internal/tools/shellRuntime.js.map +1 -0
- package/dist/internal/update/controller.cjs +1035 -0
- package/dist/internal/update/controller.cjs.map +1 -0
- package/dist/internal/update/controller.d.cts +150 -0
- package/dist/internal/update/controller.d.ts +150 -0
- package/dist/internal/update/controller.js +991 -0
- package/dist/internal/update/controller.js.map +1 -0
- package/dist/internal/update/platform.cjs +234 -0
- package/dist/internal/update/platform.cjs.map +1 -0
- package/dist/internal/update/platform.d.cts +77 -0
- package/dist/internal/update/platform.d.ts +77 -0
- package/dist/internal/update/platform.js +184 -0
- package/dist/internal/update/platform.js.map +1 -0
- package/dist/tools/ask.d.cts +3 -1
- package/dist/tools/ask.d.ts +3 -1
- package/dist/tools/diff.cjs +17 -6
- package/dist/tools/diff.cjs.map +1 -1
- package/dist/tools/diff.d.cts +5 -2
- package/dist/tools/diff.d.ts +5 -2
- package/dist/tools/diff.js +17 -6
- package/dist/tools/diff.js.map +1 -1
- package/dist/tools/directories.d.cts +3 -1
- package/dist/tools/directories.d.ts +3 -1
- package/dist/tools/explore.cjs +1778 -204
- package/dist/tools/explore.cjs.map +1 -1
- package/dist/tools/explore.d.cts +82 -2
- package/dist/tools/explore.d.ts +82 -2
- package/dist/tools/explore.js +1780 -204
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/files.cjs +56 -21
- package/dist/tools/files.cjs.map +1 -1
- package/dist/tools/files.d.cts +6 -3
- package/dist/tools/files.d.ts +6 -3
- package/dist/tools/files.js +56 -21
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/git.cjs +34 -25
- package/dist/tools/git.cjs.map +1 -1
- package/dist/tools/git.d.cts +4 -204
- package/dist/tools/git.d.ts +4 -204
- package/dist/tools/git.js +34 -25
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/media.cjs +280 -3
- package/dist/tools/media.cjs.map +1 -1
- package/dist/tools/media.d.cts +3 -1
- package/dist/tools/media.d.ts +3 -1
- package/dist/tools/media.js +278 -1
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/plan.cjs +62 -0
- package/dist/tools/plan.cjs.map +1 -1
- package/dist/tools/plan.d.cts +4 -17
- package/dist/tools/plan.d.ts +4 -17
- package/dist/tools/plan.js +59 -0
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/search.cjs +3 -0
- package/dist/tools/search.cjs.map +1 -1
- package/dist/tools/search.d.cts +3 -1
- package/dist/tools/search.d.ts +3 -1
- package/dist/tools/search.js +3 -0
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/shell.cjs +76 -11
- package/dist/tools/shell.cjs.map +1 -1
- package/dist/tools/shell.d.cts +5 -39
- package/dist/tools/shell.d.ts +5 -39
- package/dist/tools/shell.js +75 -11
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/todo.d.cts +3 -1
- package/dist/tools/todo.d.ts +3 -1
- package/dist/tools/web.cjs +279 -5
- package/dist/tools/web.cjs.map +1 -1
- package/dist/tools/web.d.cts +3 -1
- package/dist/tools/web.d.ts +3 -1
- package/dist/tools/web.js +275 -3
- package/dist/tools/web.js.map +1 -1
- package/dist/types-BYyXWWPW.d.cts +237 -0
- package/dist/types-BYyXWWPW.d.ts +237 -0
- package/package.json +26 -37
- package/bin/zqagent +0 -2
- package/dist/cli/index.cjs +0 -25218
- package/dist/cli/index.cjs.map +0 -1
- package/dist/cli/index.d.cts +0 -2
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js +0 -25201
- package/dist/cli/index.js.map +0 -1
- package/dist/server/index.cjs +0 -20510
- package/dist/server/index.cjs.map +0 -1
- package/dist/server/index.d.cts +0 -2
- package/dist/server/index.d.ts +0 -2
- package/dist/server/index.js +0 -20493
- package/dist/server/index.js.map +0 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
// src/mcp/presets.ts
|
|
2
|
+
var MCP_PRESETS = [
|
|
3
|
+
{
|
|
4
|
+
id: "filesystem",
|
|
5
|
+
title: "Filesystem\uFF08\u672C\u5730\u6587\u4EF6\uFF09",
|
|
6
|
+
description: "\u8BA9 MCP \u8BFB\u5199\u6307\u5B9A\u76EE\u5F55\uFF0Cnpx \u81EA\u52A8\u62C9\u53D6\u5B98\u65B9 server",
|
|
7
|
+
config: {
|
|
8
|
+
name: "filesystem",
|
|
9
|
+
type: "stdio",
|
|
10
|
+
command: [
|
|
11
|
+
"npx",
|
|
12
|
+
"-y",
|
|
13
|
+
"@modelcontextprotocol/server-filesystem",
|
|
14
|
+
"{{dir}}"
|
|
15
|
+
],
|
|
16
|
+
enabled: true
|
|
17
|
+
},
|
|
18
|
+
fields: [
|
|
19
|
+
{
|
|
20
|
+
key: "dir",
|
|
21
|
+
label: "\u5141\u8BB8\u8BBF\u95EE\u7684\u76EE\u5F55\uFF08\u7EDD\u5BF9\u8DEF\u5F84\uFF09",
|
|
22
|
+
required: true
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: "memory",
|
|
28
|
+
title: "Memory\uFF08\u77E5\u8BC6\u56FE\u8C31\u8BB0\u5FC6\uFF09",
|
|
29
|
+
description: "\u5B98\u65B9 memory server\uFF0C\u63D0\u4F9B\u5B9E\u4F53/\u5173\u7CFB\u8BB0\u5FC6",
|
|
30
|
+
config: {
|
|
31
|
+
name: "memory",
|
|
32
|
+
type: "stdio",
|
|
33
|
+
command: ["npx", "-y", "@modelcontextprotocol/server-memory"],
|
|
34
|
+
enabled: true
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: "sequential-thinking",
|
|
39
|
+
title: "Sequential Thinking\uFF08\u5206\u6B65\u63A8\u7406\uFF09",
|
|
40
|
+
description: "\u5B98\u65B9\u5206\u6B65\u601D\u8003 server",
|
|
41
|
+
config: {
|
|
42
|
+
name: "sequential-thinking",
|
|
43
|
+
type: "stdio",
|
|
44
|
+
command: [
|
|
45
|
+
"npx",
|
|
46
|
+
"-y",
|
|
47
|
+
"@modelcontextprotocol/server-sequential-thinking"
|
|
48
|
+
],
|
|
49
|
+
enabled: true
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: "github",
|
|
54
|
+
title: "GitHub",
|
|
55
|
+
description: "\u5B98\u65B9 GitHub server\uFF08\u9700\u8981 Personal Access Token\uFF09",
|
|
56
|
+
config: {
|
|
57
|
+
name: "github",
|
|
58
|
+
type: "stdio",
|
|
59
|
+
command: ["npx", "-y", "@modelcontextprotocol/server-github"],
|
|
60
|
+
env: { GITHUB_PERSONAL_ACCESS_TOKEN: "{{token}}" },
|
|
61
|
+
enabled: true
|
|
62
|
+
},
|
|
63
|
+
fields: [
|
|
64
|
+
{
|
|
65
|
+
key: "token",
|
|
66
|
+
label: "GitHub Personal Access Token",
|
|
67
|
+
required: true,
|
|
68
|
+
secret: true
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: "fetch",
|
|
74
|
+
title: "Fetch\uFF08\u7F51\u9875\u6293\u53D6\uFF09",
|
|
75
|
+
description: "\u5B98\u65B9 Python server\uFF0C\u9700\u8981 uvx\uFF08pip install uv\uFF09",
|
|
76
|
+
config: {
|
|
77
|
+
name: "fetch",
|
|
78
|
+
type: "stdio",
|
|
79
|
+
command: ["uvx", "mcp-server-fetch"],
|
|
80
|
+
enabled: true
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: "postgres",
|
|
85
|
+
title: "PostgreSQL\uFF08\u53EA\u8BFB\u67E5\u8BE2\uFF09",
|
|
86
|
+
description: "\u5B98\u65B9 postgres server\uFF08\u9700\u8981\u8FDE\u63A5\u4E32\uFF09",
|
|
87
|
+
config: {
|
|
88
|
+
name: "postgres",
|
|
89
|
+
type: "stdio",
|
|
90
|
+
command: [
|
|
91
|
+
"npx",
|
|
92
|
+
"-y",
|
|
93
|
+
"@modelcontextprotocol/server-postgres",
|
|
94
|
+
"{{dsn}}"
|
|
95
|
+
],
|
|
96
|
+
enabled: true
|
|
97
|
+
},
|
|
98
|
+
fields: [
|
|
99
|
+
{
|
|
100
|
+
key: "dsn",
|
|
101
|
+
label: "\u8FDE\u63A5\u4E32\uFF08postgresql://user:pass@host/db\uFF09",
|
|
102
|
+
required: true,
|
|
103
|
+
secret: true
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
id: "ocr",
|
|
109
|
+
title: "OCR\uFF08\u5185\u7F6E\uFF0C\u5F00\u7BB1\u5373\u7528\uFF09",
|
|
110
|
+
description: "\u8FDB\u7A0B\u5185 OCR\uFF1AmacOS Vision / tesseract / \u591A\u6A21\u6001\u6A21\u578B\u81EA\u52A8\u964D\u7EA7\uFF0C\u65E0\u9700\u5B89\u88C5",
|
|
111
|
+
config: {
|
|
112
|
+
name: "ocr",
|
|
113
|
+
type: "builtin",
|
|
114
|
+
builtin: "ocr",
|
|
115
|
+
enabled: true
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
];
|
|
119
|
+
function replacePlaceholders(value, values) {
|
|
120
|
+
return value.replace(/\{\{([A-Za-z0-9_]+)\}\}/g, (_m, key) => {
|
|
121
|
+
return values[key] ?? "";
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function applyMcpPreset(preset, values) {
|
|
125
|
+
const base = preset.config;
|
|
126
|
+
const config = {
|
|
127
|
+
...base,
|
|
128
|
+
name: base.name ?? preset.id
|
|
129
|
+
};
|
|
130
|
+
if (config.command)
|
|
131
|
+
config.command = config.command.map(
|
|
132
|
+
(c) => replacePlaceholders(c, values)
|
|
133
|
+
);
|
|
134
|
+
if (config.url) config.url = replacePlaceholders(config.url, values);
|
|
135
|
+
if (config.cwd) config.cwd = replacePlaceholders(config.cwd, values);
|
|
136
|
+
if (config.env) {
|
|
137
|
+
config.env = Object.fromEntries(
|
|
138
|
+
Object.entries(config.env).map(([k, v]) => [
|
|
139
|
+
k,
|
|
140
|
+
replacePlaceholders(v, values)
|
|
141
|
+
])
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
if (config.headers) {
|
|
145
|
+
config.headers = Object.fromEntries(
|
|
146
|
+
Object.entries(config.headers).map(([k, v]) => [
|
|
147
|
+
k,
|
|
148
|
+
replacePlaceholders(v, values)
|
|
149
|
+
])
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
return config;
|
|
153
|
+
}
|
|
154
|
+
export {
|
|
155
|
+
MCP_PRESETS,
|
|
156
|
+
applyMcpPreset
|
|
157
|
+
};
|
|
158
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/mcp/presets.ts"],"sourcesContent":["/**\n * MCP 安装模板\n *\n * 用于 `/mcp add` 交互式向导:把常见官方服务器的启动命令与参数固化,\n * 用户只需按提示填写少量占位符。`{{key}}` 会在安装时被替换。\n */\n\nimport type { McpServerConfig } from \"./McpClient.js\";\n\n/** 模板占位符 */\nexport interface McpPresetField {\n /** 替换 config 中的 {{key}} */\n key: string;\n /** 提示文案 */\n label: string;\n /** 必填(为空则取消安装) */\n required?: boolean;\n /** 隐藏输入(写入 env/headers 的密钥) */\n secret?: boolean;\n /** 默认值 */\n default?: string;\n}\n\n/** 安装模板 */\nexport interface McpPreset {\n id: string;\n title: string;\n description: string;\n /** name 缺省时使用 id */\n config: Omit<McpServerConfig, \"name\"> & { name?: string };\n fields?: McpPresetField[];\n}\n\n/** 内置模板(官方服务器为主,命令与包名可被用户覆盖) */\nexport const MCP_PRESETS: McpPreset[] = [\n {\n id: \"filesystem\",\n title: \"Filesystem(本地文件)\",\n description: \"让 MCP 读写指定目录,npx 自动拉取官方 server\",\n config: {\n name: \"filesystem\",\n type: \"stdio\",\n command: [\n \"npx\",\n \"-y\",\n \"@modelcontextprotocol/server-filesystem\",\n \"{{dir}}\",\n ],\n enabled: true,\n },\n fields: [\n {\n key: \"dir\",\n label: \"允许访问的目录(绝对路径)\",\n required: true,\n },\n ],\n },\n {\n id: \"memory\",\n title: \"Memory(知识图谱记忆)\",\n description: \"官方 memory server,提供实体/关系记忆\",\n config: {\n name: \"memory\",\n type: \"stdio\",\n command: [\"npx\", \"-y\", \"@modelcontextprotocol/server-memory\"],\n enabled: true,\n },\n },\n {\n id: \"sequential-thinking\",\n title: \"Sequential Thinking(分步推理)\",\n description: \"官方分步思考 server\",\n config: {\n name: \"sequential-thinking\",\n type: \"stdio\",\n command: [\n \"npx\",\n \"-y\",\n \"@modelcontextprotocol/server-sequential-thinking\",\n ],\n enabled: true,\n },\n },\n {\n id: \"github\",\n title: \"GitHub\",\n description: \"官方 GitHub server(需要 Personal Access Token)\",\n config: {\n name: \"github\",\n type: \"stdio\",\n command: [\"npx\", \"-y\", \"@modelcontextprotocol/server-github\"],\n env: { GITHUB_PERSONAL_ACCESS_TOKEN: \"{{token}}\" },\n enabled: true,\n },\n fields: [\n {\n key: \"token\",\n label: \"GitHub Personal Access Token\",\n required: true,\n secret: true,\n },\n ],\n },\n {\n id: \"fetch\",\n title: \"Fetch(网页抓取)\",\n description: \"官方 Python server,需要 uvx(pip install uv)\",\n config: {\n name: \"fetch\",\n type: \"stdio\",\n command: [\"uvx\", \"mcp-server-fetch\"],\n enabled: true,\n },\n },\n {\n id: \"postgres\",\n title: \"PostgreSQL(只读查询)\",\n description: \"官方 postgres server(需要连接串)\",\n config: {\n name: \"postgres\",\n type: \"stdio\",\n command: [\n \"npx\",\n \"-y\",\n \"@modelcontextprotocol/server-postgres\",\n \"{{dsn}}\",\n ],\n enabled: true,\n },\n fields: [\n {\n key: \"dsn\",\n label: \"连接串(postgresql://user:pass@host/db)\",\n required: true,\n secret: true,\n },\n ],\n },\n {\n id: \"ocr\",\n title: \"OCR(内置,开箱即用)\",\n description:\n \"进程内 OCR:macOS Vision / tesseract / 多模态模型自动降级,无需安装\",\n config: {\n name: \"ocr\",\n type: \"builtin\",\n builtin: \"ocr\",\n enabled: true,\n },\n },\n];\n\nfunction replacePlaceholders(\n value: string,\n values: Record<string, string>,\n): string {\n return value.replace(/\\{\\{([A-Za-z0-9_]+)\\}\\}/g, (_m, key: string) => {\n return values[key] ?? \"\";\n });\n}\n\n/** 用填写的占位符生成最终配置(不会修改模板对象) */\nexport function applyMcpPreset(\n preset: McpPreset,\n values: Record<string, string>,\n): McpServerConfig {\n const base = preset.config;\n const config: McpServerConfig = {\n ...base,\n name: base.name ?? preset.id,\n };\n if (config.command)\n config.command = config.command.map((c) =>\n replacePlaceholders(c, values),\n );\n if (config.url) config.url = replacePlaceholders(config.url, values);\n if (config.cwd) config.cwd = replacePlaceholders(config.cwd, values);\n if (config.env) {\n config.env = Object.fromEntries(\n Object.entries(config.env).map(([k, v]) => [\n k,\n replacePlaceholders(v, values),\n ]),\n );\n }\n if (config.headers) {\n config.headers = Object.fromEntries(\n Object.entries(config.headers).map(([k, v]) => [\n k,\n replacePlaceholders(v, values),\n ]),\n );\n }\n return config;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/node-name.ts
|
|
31
|
+
var node_name_exports = {};
|
|
32
|
+
__export(node_name_exports, {
|
|
33
|
+
defaultNodeLabel: () => defaultNodeLabel
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(node_name_exports);
|
|
36
|
+
var os = __toESM(require("os"), 1);
|
|
37
|
+
function defaultNodeLabel() {
|
|
38
|
+
const name = os.hostname().trim();
|
|
39
|
+
return name || "zqagent-node";
|
|
40
|
+
}
|
|
41
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
42
|
+
0 && (module.exports = {
|
|
43
|
+
defaultNodeLabel
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=node-name.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/node-name.ts"],"sourcesContent":["/**\n * 节点显示名的默认值。\n *\n * 接入 Hub 时若没显式给 `--label`,用主机名:Hub 界面显示的是可读的机器名,\n * 而不是一串 nodeId。用户之后可在 Hub 界面或本机 `zqagent rename` 修改。\n */\nimport * as os from \"os\";\n\nexport function defaultNodeLabel(): string {\n const name = os.hostname().trim();\n return name || \"zqagent-node\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAoB;AAEb,SAAS,mBAA2B;AACzC,QAAM,OAAU,YAAS,EAAE,KAAK;AAChC,SAAO,QAAQ;AACjB;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/node-name.ts"],"sourcesContent":["/**\n * 节点显示名的默认值。\n *\n * 接入 Hub 时若没显式给 `--label`,用主机名:Hub 界面显示的是可读的机器名,\n * 而不是一串 nodeId。用户之后可在 Hub 界面或本机 `zqagent rename` 修改。\n */\nimport * as os from \"os\";\n\nexport function defaultNodeLabel(): string {\n const name = os.hostname().trim();\n return name || \"zqagent-node\";\n}\n"],"mappings":";AAMA,YAAY,QAAQ;AAEb,SAAS,mBAA2B;AACzC,QAAM,OAAU,YAAS,EAAE,KAAK;AAChC,SAAO,QAAQ;AACjB;","names":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/paths.ts
|
|
31
|
+
var paths_exports = {};
|
|
32
|
+
__export(paths_exports, {
|
|
33
|
+
DEFAULT_DATA_DIR: () => DEFAULT_DATA_DIR,
|
|
34
|
+
DEFAULT_HUB_URL: () => DEFAULT_HUB_URL,
|
|
35
|
+
configDir: () => configDir,
|
|
36
|
+
stateDir: () => stateDir
|
|
37
|
+
});
|
|
38
|
+
module.exports = __toCommonJS(paths_exports);
|
|
39
|
+
var os = __toESM(require("os"), 1);
|
|
40
|
+
var path = __toESM(require("path"), 1);
|
|
41
|
+
var APP_DIR_NAME = "zqagent";
|
|
42
|
+
var DEFAULT_DATA_DIR = ".zqagent_data";
|
|
43
|
+
var DEFAULT_HUB_URL = "https://hub.cd-zq.com";
|
|
44
|
+
var IS_WINDOWS = process.platform === "win32";
|
|
45
|
+
function homeDir() {
|
|
46
|
+
return process.env.HOME || process.env.USERPROFILE || os.homedir() || os.tmpdir();
|
|
47
|
+
}
|
|
48
|
+
function configDir() {
|
|
49
|
+
const base = process.env.XDG_CONFIG_HOME || (IS_WINDOWS ? process.env.APPDATA : void 0) || path.join(homeDir(), ".config");
|
|
50
|
+
return path.join(base, APP_DIR_NAME);
|
|
51
|
+
}
|
|
52
|
+
function stateDir() {
|
|
53
|
+
const base = process.env.XDG_STATE_HOME || (IS_WINDOWS ? process.env.LOCALAPPDATA : void 0) || path.join(homeDir(), ".local", "state");
|
|
54
|
+
return path.join(base, APP_DIR_NAME);
|
|
55
|
+
}
|
|
56
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
57
|
+
0 && (module.exports = {
|
|
58
|
+
DEFAULT_DATA_DIR,
|
|
59
|
+
DEFAULT_HUB_URL,
|
|
60
|
+
configDir,
|
|
61
|
+
stateDir
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=paths.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/paths.ts"],"sourcesContent":["/**\n * 本机配置 / 状态目录的跨平台解析\n *\n * POSIX 沿用 XDG 约定;Windows 上 `HOME` 在 cmd / PowerShell 中通常不存在,\n * 若直接回退 `/tmp` 会把配置写到 `\\tmp\\...`(当前盘符根),且与\n * `%APPDATA%` 的常规位置不一致。统一顺序:显式 XDG 变量(用户显式指定,\n * 优先级最高)→ 平台原生目录 → XDG 默认位置(家目录)→ 临时目录。\n */\nimport * as os from \"os\";\nimport * as path from \"path\";\n\n/** 应用目录名(`~/.config/zqagent` 的最后一段) */\nconst APP_DIR_NAME = \"zqagent\";\n\n/**\n * 节点默认数据目录名(相对启动目录,即 `./.zqagent_data`)。\n * server / CLI 在既无 `--data-dir` 也无 `DATA_DIR` 时用它兜底,\n * 集中在此避免各处字面量走散。\n */\nexport const DEFAULT_DATA_DIR = \".zqagent_data\";\n\n/**\n * 官方 Hub 基址(不带结尾斜杠):CLI 在既无 `--hub` 也无 `HUB_URL` 时用它兜底\n * (首个交互式接入提示的默认值)。自建 Hub 请用 `--hub` / `HUB_URL` 覆盖。\n */\nexport const DEFAULT_HUB_URL = \"https://hub.cd-zq.com\";\n\n/** 是否为 Windows(仅此处需要区分平台;APPDATA 在别的系统上可能是无关变量) */\nconst IS_WINDOWS = process.platform === \"win32\";\n\n/** 用户主目录:`HOME` → Windows `USERPROFILE` → `os.homedir()` → 临时目录 */\nfunction homeDir(): string {\n return (\n process.env.HOME || process.env.USERPROFILE || os.homedir() || os.tmpdir()\n );\n}\n\n/** 配置目录:`$XDG_CONFIG_HOME/zqagent`、Windows `%APPDATA%\\zqagent`、其余 `~/.config/zqagent` */\nexport function configDir(): string {\n const base =\n process.env.XDG_CONFIG_HOME ||\n (IS_WINDOWS ? process.env.APPDATA : undefined) ||\n path.join(homeDir(), \".config\");\n return path.join(base, APP_DIR_NAME);\n}\n\n/** 状态目录:`$XDG_STATE_HOME/zqagent`、Windows `%LOCALAPPDATA%\\zqagent`、其余 `~/.local/state/zqagent` */\nexport function stateDir(): string {\n const base =\n process.env.XDG_STATE_HOME ||\n (IS_WINDOWS ? process.env.LOCALAPPDATA : undefined) ||\n path.join(homeDir(), \".local\", \"state\");\n return path.join(base, APP_DIR_NAME);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAoB;AACpB,WAAsB;AAGtB,IAAM,eAAe;AAOd,IAAM,mBAAmB;AAMzB,IAAM,kBAAkB;AAG/B,IAAM,aAAa,QAAQ,aAAa;AAGxC,SAAS,UAAkB;AACzB,SACE,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAkB,WAAQ,KAAQ,UAAO;AAE7E;AAGO,SAAS,YAAoB;AAClC,QAAM,OACJ,QAAQ,IAAI,oBACX,aAAa,QAAQ,IAAI,UAAU,WAC/B,UAAK,QAAQ,GAAG,SAAS;AAChC,SAAY,UAAK,MAAM,YAAY;AACrC;AAGO,SAAS,WAAmB;AACjC,QAAM,OACJ,QAAQ,IAAI,mBACX,aAAa,QAAQ,IAAI,eAAe,WACpC,UAAK,QAAQ,GAAG,UAAU,OAAO;AACxC,SAAY,UAAK,MAAM,YAAY;AACrC;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 节点默认数据目录名(相对启动目录,即 `./.zqagent_data`)。
|
|
3
|
+
* server / CLI 在既无 `--data-dir` 也无 `DATA_DIR` 时用它兜底,
|
|
4
|
+
* 集中在此避免各处字面量走散。
|
|
5
|
+
*/
|
|
6
|
+
declare const DEFAULT_DATA_DIR = ".zqagent_data";
|
|
7
|
+
/**
|
|
8
|
+
* 官方 Hub 基址(不带结尾斜杠):CLI 在既无 `--hub` 也无 `HUB_URL` 时用它兜底
|
|
9
|
+
* (首个交互式接入提示的默认值)。自建 Hub 请用 `--hub` / `HUB_URL` 覆盖。
|
|
10
|
+
*/
|
|
11
|
+
declare const DEFAULT_HUB_URL = "https://hub.cd-zq.com";
|
|
12
|
+
/** 配置目录:`$XDG_CONFIG_HOME/zqagent`、Windows `%APPDATA%\zqagent`、其余 `~/.config/zqagent` */
|
|
13
|
+
declare function configDir(): string;
|
|
14
|
+
/** 状态目录:`$XDG_STATE_HOME/zqagent`、Windows `%LOCALAPPDATA%\zqagent`、其余 `~/.local/state/zqagent` */
|
|
15
|
+
declare function stateDir(): string;
|
|
16
|
+
|
|
17
|
+
export { DEFAULT_DATA_DIR, DEFAULT_HUB_URL, configDir, stateDir };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 节点默认数据目录名(相对启动目录,即 `./.zqagent_data`)。
|
|
3
|
+
* server / CLI 在既无 `--data-dir` 也无 `DATA_DIR` 时用它兜底,
|
|
4
|
+
* 集中在此避免各处字面量走散。
|
|
5
|
+
*/
|
|
6
|
+
declare const DEFAULT_DATA_DIR = ".zqagent_data";
|
|
7
|
+
/**
|
|
8
|
+
* 官方 Hub 基址(不带结尾斜杠):CLI 在既无 `--hub` 也无 `HUB_URL` 时用它兜底
|
|
9
|
+
* (首个交互式接入提示的默认值)。自建 Hub 请用 `--hub` / `HUB_URL` 覆盖。
|
|
10
|
+
*/
|
|
11
|
+
declare const DEFAULT_HUB_URL = "https://hub.cd-zq.com";
|
|
12
|
+
/** 配置目录:`$XDG_CONFIG_HOME/zqagent`、Windows `%APPDATA%\zqagent`、其余 `~/.config/zqagent` */
|
|
13
|
+
declare function configDir(): string;
|
|
14
|
+
/** 状态目录:`$XDG_STATE_HOME/zqagent`、Windows `%LOCALAPPDATA%\zqagent`、其余 `~/.local/state/zqagent` */
|
|
15
|
+
declare function stateDir(): string;
|
|
16
|
+
|
|
17
|
+
export { DEFAULT_DATA_DIR, DEFAULT_HUB_URL, configDir, stateDir };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// src/paths.ts
|
|
2
|
+
import * as os from "os";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
var APP_DIR_NAME = "zqagent";
|
|
5
|
+
var DEFAULT_DATA_DIR = ".zqagent_data";
|
|
6
|
+
var DEFAULT_HUB_URL = "https://hub.cd-zq.com";
|
|
7
|
+
var IS_WINDOWS = process.platform === "win32";
|
|
8
|
+
function homeDir() {
|
|
9
|
+
return process.env.HOME || process.env.USERPROFILE || os.homedir() || os.tmpdir();
|
|
10
|
+
}
|
|
11
|
+
function configDir() {
|
|
12
|
+
const base = process.env.XDG_CONFIG_HOME || (IS_WINDOWS ? process.env.APPDATA : void 0) || path.join(homeDir(), ".config");
|
|
13
|
+
return path.join(base, APP_DIR_NAME);
|
|
14
|
+
}
|
|
15
|
+
function stateDir() {
|
|
16
|
+
const base = process.env.XDG_STATE_HOME || (IS_WINDOWS ? process.env.LOCALAPPDATA : void 0) || path.join(homeDir(), ".local", "state");
|
|
17
|
+
return path.join(base, APP_DIR_NAME);
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
DEFAULT_DATA_DIR,
|
|
21
|
+
DEFAULT_HUB_URL,
|
|
22
|
+
configDir,
|
|
23
|
+
stateDir
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/paths.ts"],"sourcesContent":["/**\n * 本机配置 / 状态目录的跨平台解析\n *\n * POSIX 沿用 XDG 约定;Windows 上 `HOME` 在 cmd / PowerShell 中通常不存在,\n * 若直接回退 `/tmp` 会把配置写到 `\\tmp\\...`(当前盘符根),且与\n * `%APPDATA%` 的常规位置不一致。统一顺序:显式 XDG 变量(用户显式指定,\n * 优先级最高)→ 平台原生目录 → XDG 默认位置(家目录)→ 临时目录。\n */\nimport * as os from \"os\";\nimport * as path from \"path\";\n\n/** 应用目录名(`~/.config/zqagent` 的最后一段) */\nconst APP_DIR_NAME = \"zqagent\";\n\n/**\n * 节点默认数据目录名(相对启动目录,即 `./.zqagent_data`)。\n * server / CLI 在既无 `--data-dir` 也无 `DATA_DIR` 时用它兜底,\n * 集中在此避免各处字面量走散。\n */\nexport const DEFAULT_DATA_DIR = \".zqagent_data\";\n\n/**\n * 官方 Hub 基址(不带结尾斜杠):CLI 在既无 `--hub` 也无 `HUB_URL` 时用它兜底\n * (首个交互式接入提示的默认值)。自建 Hub 请用 `--hub` / `HUB_URL` 覆盖。\n */\nexport const DEFAULT_HUB_URL = \"https://hub.cd-zq.com\";\n\n/** 是否为 Windows(仅此处需要区分平台;APPDATA 在别的系统上可能是无关变量) */\nconst IS_WINDOWS = process.platform === \"win32\";\n\n/** 用户主目录:`HOME` → Windows `USERPROFILE` → `os.homedir()` → 临时目录 */\nfunction homeDir(): string {\n return (\n process.env.HOME || process.env.USERPROFILE || os.homedir() || os.tmpdir()\n );\n}\n\n/** 配置目录:`$XDG_CONFIG_HOME/zqagent`、Windows `%APPDATA%\\zqagent`、其余 `~/.config/zqagent` */\nexport function configDir(): string {\n const base =\n process.env.XDG_CONFIG_HOME ||\n (IS_WINDOWS ? process.env.APPDATA : undefined) ||\n path.join(homeDir(), \".config\");\n return path.join(base, APP_DIR_NAME);\n}\n\n/** 状态目录:`$XDG_STATE_HOME/zqagent`、Windows `%LOCALAPPDATA%\\zqagent`、其余 `~/.local/state/zqagent` */\nexport function stateDir(): string {\n const base =\n process.env.XDG_STATE_HOME ||\n (IS_WINDOWS ? process.env.LOCALAPPDATA : undefined) ||\n path.join(homeDir(), \".local\", \"state\");\n return path.join(base, APP_DIR_NAME);\n}\n"],"mappings":";AAQA,YAAY,QAAQ;AACpB,YAAY,UAAU;AAGtB,IAAM,eAAe;AAOd,IAAM,mBAAmB;AAMzB,IAAM,kBAAkB;AAG/B,IAAM,aAAa,QAAQ,aAAa;AAGxC,SAAS,UAAkB;AACzB,SACE,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAkB,WAAQ,KAAQ,UAAO;AAE7E;AAGO,SAAS,YAAoB;AAClC,QAAM,OACJ,QAAQ,IAAI,oBACX,aAAa,QAAQ,IAAI,UAAU,WAC/B,UAAK,QAAQ,GAAG,SAAS;AAChC,SAAY,UAAK,MAAM,YAAY;AACrC;AAGO,SAAS,WAAmB;AACjC,QAAM,OACJ,QAAQ,IAAI,mBACX,aAAa,QAAQ,IAAI,eAAe,WACpC,UAAK,QAAQ,GAAG,UAAU,OAAO;AACxC,SAAY,UAAK,MAAM,YAAY;AACrC;","names":[]}
|