@wwkit/freetoken 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +96 -0
  3. package/cli/helpers/args.js +48 -0
  4. package/cli/index.js +374 -0
  5. package/cli/pid-manager.js +87 -0
  6. package/client/index.html +25 -0
  7. package/client/public/favicon.svg +1 -0
  8. package/client/public/icons.svg +24 -0
  9. package/client/src/App.vue +136 -0
  10. package/client/src/assets/vite.svg +1 -0
  11. package/client/src/assets/vue.svg +1 -0
  12. package/client/src/components/ChatBox.vue +320 -0
  13. package/client/src/components/CheckList.vue +52 -0
  14. package/client/src/components/CodeBlock.vue +99 -0
  15. package/client/src/components/DetailBlock.vue +47 -0
  16. package/client/src/components/HelloWorld.vue +95 -0
  17. package/client/src/components/LangSwitch.vue +32 -0
  18. package/client/src/components/LinkList.vue +32 -0
  19. package/client/src/components/OsSwitch.vue +42 -0
  20. package/client/src/components/OsToggle.vue +15 -0
  21. package/client/src/components/PageHeader.vue +31 -0
  22. package/client/src/components/StepList.vue +92 -0
  23. package/client/src/composables/useClipboard.js +26 -0
  24. package/client/src/composables/useOs.js +22 -0
  25. package/client/src/data/docs/agent.js +1002 -0
  26. package/client/src/data/docs/auth.js +631 -0
  27. package/client/src/data/docs/builtin-tools.js +322 -0
  28. package/client/src/data/docs/chat.js +181 -0
  29. package/client/src/data/docs/index.js +9 -0
  30. package/client/src/data/docs/skills.js +396 -0
  31. package/client/src/data/docs/spec-conversion.js +1042 -0
  32. package/client/src/data/freeModels/bluesliu.js +97 -0
  33. package/client/src/data/freeModels/index.js +11 -0
  34. package/client/src/data/freeModels/nvidia.js +126 -0
  35. package/client/src/data/freeModels/openrouter.js +116 -0
  36. package/client/src/data/harness/claude.js +89 -0
  37. package/client/src/data/harness/codex.js +66 -0
  38. package/client/src/data/harness/dsh.js +86 -0
  39. package/client/src/data/harness/hermes.js +56 -0
  40. package/client/src/data/harness/index.js +22 -0
  41. package/client/src/data/harness/opencode.js +77 -0
  42. package/client/src/data/proxy/api-relay.js +53 -0
  43. package/client/src/data/proxy/builtin-proxy.js +54 -0
  44. package/client/src/data/proxy/cf-workers.js +67 -0
  45. package/client/src/data/proxy/ecs-forward.js +75 -0
  46. package/client/src/data/proxy/ecs-reverse.js +89 -0
  47. package/client/src/data/proxy/index.js +15 -0
  48. package/client/src/docs/claudecode.md +44 -0
  49. package/client/src/docs/codex.md +90 -0
  50. package/client/src/docs/hermesagent.md +42 -0
  51. package/client/src/docs/opencode.md +103 -0
  52. package/client/src/locales/en.js +436 -0
  53. package/client/src/locales/index.js +31 -0
  54. package/client/src/locales/zh-CN.js +461 -0
  55. package/client/src/main.js +16 -0
  56. package/client/src/router/index.js +76 -0
  57. package/client/src/style.css +15 -0
  58. package/client/src/views/AdminModelsView.vue +214 -0
  59. package/client/src/views/DocsView.vue +1604 -0
  60. package/client/src/views/FreeModelsView.vue +518 -0
  61. package/client/src/views/HarnessView.vue +314 -0
  62. package/client/src/views/HomeView.vue +147 -0
  63. package/client/src/views/ProxyView.vue +112 -0
  64. package/client/src/views/TokenMarketView.vue +26 -0
  65. package/client/vite.config.js +41 -0
  66. package/package.json +85 -0
  67. package/scripts/build-zip.sh +61 -0
  68. package/scripts/postinstall.js +7 -0
  69. package/server/src/config/targets.json +1 -0
  70. package/server/src/index.js +52 -0
  71. package/server/src/lib/coding-test.js +215 -0
  72. package/server/src/lib/database.js +353 -0
  73. package/server/src/lib/run-test.js +15 -0
  74. package/server/src/lib/scheduler.js +21 -0
  75. package/server/src/lib/tester.js +310 -0
  76. package/server/src/routes/admin.js +48 -0
  77. package/server/src/routes/proxy.js +64 -0
  78. package/server/src/routes/speed.js +87 -0
  79. package/src/config.js +45 -0
  80. package/src/config.json5 +27 -0
  81. package/src/index.js +10 -0
@@ -0,0 +1,461 @@
1
+ export default {
2
+ nav: {
3
+ home: '首页',
4
+ harness: 'Harness',
5
+ freeModels: 'Free Models',
6
+ proxy: 'Proxy',
7
+ tokenMarket: 'Token Market',
8
+ docs: 'Docs',
9
+ },
10
+ footer: {
11
+ tagline: 'AI Harness 学习站 — 助你快速上手 AI 编程工具',
12
+ note: '本站内容仅供学习参考,请遵守各工具和模型的使用条款',
13
+ },
14
+ home: {
15
+ heroTitle: 'FreeToken',
16
+ heroSubtitle: '一站式学习 AI 编程工具 — 从工具安装到模型接入,从免费资源到代理方案',
17
+ startLearning: '开始学习',
18
+ freeModelsBtn: '免费模型',
19
+ sectionsTitle: '学习栏目',
20
+ cardEnter: '进入学习',
21
+ whatIsHarness: '什么是 AI Harness?',
22
+ introP1: 'AI Harness(AI 编程工具链)是指帮助开发者利用大语言模型(LLM)进行软件开发的工具集合。它们通常以命令行工具(CLI)或 IDE 插件的形式存在,能够理解代码上下文、生成代码、修复 Bug、执行测试,甚至完成完整的开发任务。',
23
+ introP2: '常见的 AI Harness 工具包括 DeepSeek Harness(DeepSeek 官方)、OpenCode(开源 CLI)、Codex CLI(OpenAI 官方)、Claude Code(Anthropic 官方)等。它们可以接入 DeepSeek、GPT、Claude 等多种模型,帮助开发者提升编程效率。',
24
+ introP3: '本站聚焦三个核心主题:Harness 工具介绍、免费模型获取、国内代理方案。无论你是初学者还是有经验的开发者,都能在这里找到实用的信息。',
25
+ sections: {
26
+ harness: {
27
+ title: 'Harness',
28
+ desc: '了解 DeepSeek Harness、OpenCode、Codex CLI、Claude Code 四款 AI 编程 Harness 工具的基本信息、安装方式和基础配置。',
29
+ },
30
+ freeModels: {
31
+ title: 'Free Models',
32
+ desc: '获取 OpenRouter 和 Nvidia NIM 提供的免费大模型 API,学习注册和使用方式,零成本开始 AI 编程。',
33
+ },
34
+ proxy: {
35
+ title: 'Proxy',
36
+ desc: '在国内稳定使用 GPT 和 Claude 模型,介绍 API 中转、内置代理、Cloudflare Workers 自建中转等方案。',
37
+ },
38
+ },
39
+ },
40
+ harness: {
41
+ pageTitle: 'Harness 工具',
42
+ pageDesc: 'DeepSeek Harness、OpenCode、Codex CLI、Claude Code 四款 AI 编程 Harness 工具的基本信息、安装方式与基础配置。',
43
+ install: '安装',
44
+ config: '配置',
45
+ develop: '开发',
46
+ requirements: '环境依赖',
47
+ startup: '启动',
48
+ nodeRequirement: 'Node.js 版本要求',
49
+ envRequirement: '环境变量配置',
50
+ envVarDesc: 'bluesliusharing',
51
+ startupCommand: '启动命令',
52
+ modelConfig: '模型配置',
53
+ configTips: '配置说明',
54
+ modelSwitch: '切换模型',
55
+ sessionOperations: '会话操作',
56
+ sessionManagement: '会话管理',
57
+ sessionExport: '导出会话',
58
+ sessionImport: '导入会话',
59
+ copyCommand: '复制命令',
60
+ curlInstall: 'curl 安装',
61
+ npmInstall: 'npm 安装',
62
+ gitInstall: 'Git Clone',
63
+ npmMirrorPlaceholder: 'npm 镜像',
64
+ relatedLinks: '相关链接',
65
+ mirrors: {
66
+ official: '官方源',
67
+ taobao: '淘宝镜像',
68
+ huawei: '华为镜像',
69
+ },
70
+ tools: {
71
+ dsh: {
72
+ name: 'DeepSeek Harness',
73
+ tagline: 'DeepSeek 官方 AI 编程助手',
74
+ description: 'DeepSeek(深度求索)官方推出的命令行 AI 编程助手,开源,原生支持 DeepSeek 系列模型。核心特点:Everything is a plugin,所有能力模块均可替换。',
75
+ links: ['DeepSeek 官网', 'GitHub', '官方文档'],
76
+ badge: 'Open Source',
77
+ },
78
+ opencode: {
79
+ name: 'OpenCode',
80
+ tagline: '开源 AI 终端编程助手',
81
+ description: '由社区驱动的开源交互式 CLI 编程助手,支持 Agent / Skill / Command 三层扩展架构与 MCP 工具集成。',
82
+ links: ['官方文档', 'GitHub'],
83
+ badge: 'Open Source',
84
+ },
85
+ codex: {
86
+ name: 'Codex CLI',
87
+ tagline: 'OpenAI 官方终端编程助手',
88
+ description: 'OpenAI 推出的命令行 AI 编程工具,开源,基于 GPT 模型提供代码生成与修改能力,与 OpenAI 生态深度集成。',
89
+ links: ['官方文档', 'GitHub'],
90
+ badge: 'Official',
91
+ },
92
+ claude: {
93
+ name: 'Claude Code',
94
+ tagline: 'Anthropic 官方终端 AI 助手',
95
+ description: 'Anthropic 推出的命令行 AI 编程助手,基于 Claude 系列模型,拥有 200K 超长上下文窗口,擅长复杂代码推理与工程任务。',
96
+ links: ['官方文档', 'GitHub'],
97
+ badge: 'Official',
98
+ },
99
+ hermes: {
100
+ name: 'Hermes Agent',
101
+ tagline: '开源多模态 AI Agent',
102
+ description: 'Hermes Agent 是一款开源的多模态 AI Agent,支持多种模型后端,通过统一的配置接口连接不同的 LLM 服务。',
103
+ links: ['GitHub'],
104
+ badge: 'Open Source',
105
+ },
106
+ },
107
+ },
108
+ freeModels: {
109
+ pageTitle: '免费模型',
110
+ pageDesc: 'OpenRouter 和 Nvidia NIM 两个平台的免费大模型 API 信息,包括可用模型列表、注册方式与使用示例。',
111
+ modelList: '模型列表',
112
+ apiSpec: 'API规格',
113
+ openaiStyle: 'OpenAI 风格',
114
+ anthropicStyle: 'Anthropic 风格',
115
+ baseUrl: 'Base URL',
116
+ apiKey: 'API Key',
117
+ tryModel: '模型试用',
118
+ apiTest: 'API测试',
119
+ tryModelPlaceholder: '选择模型后输入消息开始对话...',
120
+ selectModel: '选择模型',
121
+ inputApiKey: '输入 API Key',
122
+ startChat: '开始对话',
123
+ speedTest: '测速',
124
+ measured: '实测',
125
+ speedTestResult: '测速结果',
126
+ speed: '速度',
127
+ responseTime: '响应时间',
128
+ tokens: 'Token数',
129
+ testTime: '测速时间',
130
+ chatTitle: '模型对话',
131
+ newSession: '新会话',
132
+ apiHint: 'API Key 将用于调用模型接口,请妥善保管。默认使用共享测试 Key。',
133
+ registration: '注册步骤',
134
+ usage: '使用示例',
135
+ usageCurl: 'curl 调用',
136
+ usageConfig: 'OpenCode 配置',
137
+ tips: '使用提示',
138
+ relatedLinks: '相关链接',
139
+ tableColumns: {
140
+ name: '模型名称',
141
+ provider: '提供商',
142
+ context: '上下文窗口',
143
+ available: '可用',
144
+ ttft: '首字延迟',
145
+ throughput: '吞吐速度',
146
+ coding: '编码能力',
147
+ testedAt: '测试时间',
148
+ responseTime: '响应时间',
149
+ status: '状态',
150
+ note: '备注',
151
+ },
152
+ status: {
153
+ available: '可用',
154
+ unavailable: '不可用',
155
+ },
156
+ providers: {
157
+ openrouter: {
158
+ name: 'OpenRouter',
159
+ tagline: '统一的 LLM API 聚合平台',
160
+ description: 'OpenRouter 是一个统一的 LLM API 路由平台,聚合了 OpenAI、Anthropic、Google、Meta 等多家厂商的模型。部分模型提供免费额度,适合开发者测试和学习使用。',
161
+ badge: 'Free Tier',
162
+ modelNotes: [
163
+ '免费,有速率限制',
164
+ '免费,有速率限制',
165
+ '免费,有速率限制',
166
+ '免费,有速率限制',
167
+ '免费,有速率限制',
168
+ ],
169
+ registration: [
170
+ '访问 OpenRouter 官网 https://openrouter.ai',
171
+ '点击 Sign Up,使用 GitHub 或 Google 账号登录',
172
+ '进入 Keys 页面,点击 Create Key 生成 API Key',
173
+ '保存好 API Key(格式:sk-or-v1-xxxxx)',
174
+ '免费模型会标注 "Free" 标签,可直接使用',
175
+ ],
176
+ tips: [
177
+ '免费模型有速率限制(通常 10-20 次/分钟)',
178
+ '部分免费模型可能不保证可用性,建议多备选几个',
179
+ '付费模型按 token 计费,价格通常比官方便宜',
180
+ 'OpenRouter 支持 OpenAI 兼容格式,可直接替换 baseURL',
181
+ ],
182
+ links: ['官网', '免费模型列表', 'API 文档'],
183
+ },
184
+ nvidia: {
185
+ name: 'Nvidia NIM',
186
+ tagline: 'Nvidia 提供的免费模型推理服务',
187
+ description: 'Nvidia 通过 NIM(NVIDIA Inference Microservices)平台提供多种开源大模型的免费推理 API 接口,包括 Llama、Mistral、Qwen 等,开发者注册后可获得免费 API Key。',
188
+ badge: 'Free',
189
+ modelNotes: [
190
+ '免费',
191
+ '免费',
192
+ '免费',
193
+ '免费',
194
+ '免费',
195
+ '嵌入模型,免费',
196
+ ],
197
+ registration: [
198
+ '访问 Nvidia 开发者平台 https://build.nvidia.com',
199
+ '点击 Sign In,使用 NVIDIA 账号登录(可免费注册)',
200
+ '选择需要的模型,点击 "Get API Key"',
201
+ '生成的 API Key 格式为:nvapi-xxxxx',
202
+ '在代码中使用 OpenAI 兼容接口调用',
203
+ ],
204
+ tips: [
205
+ 'Nvidia NIM 免费额度较大,适合学习和开发测试',
206
+ '所有模型均使用 OpenAI 兼容 API 格式,切换成本低',
207
+ '部分大模型(如 405B)推理速度可能较慢',
208
+ 'NIM 平台会不定期新增模型,建议关注更新',
209
+ ],
210
+ links: ['Nvidia NIM 官网', 'API 文档', '模型列表'],
211
+ },
212
+ bluesliu: {
213
+ name: 'BluesLiu',
214
+ tagline: '站内提供的免费测试模型服务',
215
+ description: 'BluesLiu 是本站提供的内部测试模型服务,基于 @ai-sdk/openai-compatible 构建,聚合了 MiniMax、智谱 GLM 等多种模型。无需注册,直接使用共享 API Key 即可调用,适合学习和快速测试。',
216
+ badge: '站内测试',
217
+ modelNotes: [
218
+ 'MiniMax 提供的通用大语言模型',
219
+ '阿里云 CodeAgent 模型,擅长代码任务',
220
+ '智谱 GLM 5.1 模型,通用能力强',
221
+ ],
222
+ registration: [
223
+ '本服务为站内提供,无需注册',
224
+ 'API Key 为共享密钥:bluesliusharing',
225
+ 'BaseURL:http://blues.huawei.com:32527/v1',
226
+ '可用模型包括 MiniMax-M2.7、maas-glm-5-aliyun-codeagent、maas-glm-5.1-zhipu',
227
+ '使用 OpenAI 兼容接口调用即可',
228
+ ],
229
+ tips: [
230
+ '本服务为内部测试用途,不保证长期可用',
231
+ '共享 API Key,请勿用于生产环境',
232
+ 'API 地址仅内网可访问,需在华为内网环境下使用',
233
+ '所有模型均使用 OpenAI 兼容 API 格式,切换成本低',
234
+ ],
235
+ links: ['API 地址'],
236
+ },
237
+ },
238
+ },
239
+ proxy: {
240
+ pageTitle: '代理方案',
241
+ pageDesc: '代理配置机制通用于所有模型,不区分 GPT 或 Claude。按代理方式分类,涵盖 API 中转、内置代理、Cloudflare Workers、ECS 正向代理与 ECS 反向代理五种方案。',
242
+ steps: '操作步骤',
243
+ configExample: '配置示例',
244
+ notes: '注意事项',
245
+ solutions: {
246
+ apiRelay: {
247
+ name: 'API 中转服务',
248
+ tagline: '使用第三方中转平台转发请求',
249
+ description: '使用第三方 API 中转服务(如 API2D、OpenAI-SB 等),将请求转发到 OpenAI 或 Anthropic。中转平台提供国内可访问的 baseURL,使用方式与官方 API 完全一致,GPT 和 Claude 均可使用。',
250
+ badge: '中转',
251
+ steps: [
252
+ '注册中转服务平台账号',
253
+ '获取中转平台分配的 API Key(格式通常为 sk-xxx 或 sk-ant-xxx)',
254
+ '确认该平台支持的目标模型(GPT / Claude / 其他)',
255
+ '在 Harness 中将 baseURL 替换为中转平台地址,apiKey 替换为中转 Key',
256
+ '模型名称保持与官方一致(如 gpt-4o、claude-sonnet-4-20250514)',
257
+ ],
258
+ tips: [
259
+ '中转服务可能存在数据安全风险,请选择可信平台',
260
+ 'GPT 的 baseURL 末尾需带 /v1,Claude 的 baseURL 末尾不带 /v1',
261
+ '部分中转平台只支持 GPT 或只支持 Claude,注册前需确认',
262
+ '建议同时准备多个方案作为备选',
263
+ ],
264
+ },
265
+ builtinProxy: {
266
+ name: 'Harness 内置代理',
267
+ tagline: '通过环境变量或 baseURL 配置实现访问',
268
+ description: '在已有稳定代理通道(VPN / Clash / Shadowsocks 等)的前提下,通过设置 HTTP 代理环境变量,或直接在 Harness 配置中指定 baseURL,让 GPT 和 Claude 请求走代理通道。无需修改代码,配置即可生效。',
269
+ badge: '内置',
270
+ steps: [
271
+ '确保本地已有可用的代理通道(VPN / Clash / SS 等)',
272
+ '方式一:设置 HTTPS_PROXY 环境变量,所有 HTTP 请求走代理(需代理可达目标 API)',
273
+ '方式二:在 Harness 配置中直接指定官方 baseURL(代理通道负责网络可达)',
274
+ 'GPT 和 Claude 使用相同的环境变量,无需区分配置',
275
+ '验证代理延迟和稳定性,确保不影响开发体验',
276
+ ],
277
+ tips: [
278
+ '此方案需要已有代理通道,代理本身的稳定性决定体验',
279
+ '环境变量方式最通用,所有 Harness 工具均可生效',
280
+ '注意区分 HTTP 代理端口(通常 7890/1087)和 SOCKS5 端口(通常 1080)',
281
+ '设置 ALL_PROXY=socks5://127.0.0.1:1080 可让终端工具全部走 SOCKS5 代理',
282
+ ],
283
+ },
284
+ cfWorkers: {
285
+ name: 'Cloudflare Workers 自建中转',
286
+ tagline: '通过 CF Workers 搭建 API 转发服务',
287
+ description: '通过 Cloudflare Workers 搭建自己的 API 中转服务,稳定性高且不依赖第三方中转平台。需要一个域名和 Cloudflare 账号。GPT 和 Claude 需分别部署不同的 Worker(目标 host 不同),但机制完全相同。',
288
+ badge: 'CF',
289
+ steps: [
290
+ '注册 Cloudflare 账号,添加一个域名',
291
+ '创建两个 Worker:一个转发到 api.openai.com,一个转发到 api.anthropic.com',
292
+ '部署 Worker 脚本',
293
+ '配置自定义域名路由(如 openai.your-domain.com 和 claude.your-domain.com)',
294
+ '在 Harness 中将 baseURL 指向对应的 Worker 域名',
295
+ ],
296
+ tips: [
297
+ '此方案最安全可靠,自己掌控全部流量转发',
298
+ '需要一定的技术能力来部署和配置 Cloudflare',
299
+ 'GPT 和 Claude 的 Worker 脚本几乎一样,仅 target host 不同',
300
+ 'Cloudflare 免费额度每天 10 万次请求,个人使用足够',
301
+ ],
302
+ },
303
+ ecsForward: {
304
+ name: 'ECS 正向代理',
305
+ tagline: 'Shadowsocks 浏览器通用代理',
306
+ description: '在阿里云海外 ECS 上部署 Shadowsocks 服务端,本地通过 SS 客户端连接后,所有流量(浏览器、终端、APP)均经过 ECS 转发。此方案为「正向代理」,客户端主动将流量发往代理服务器,GPT 和 Claude 均可通过此方式访问。',
307
+ badge: '正向',
308
+ steps: [
309
+ '登录阿里云控制台,购买 ECS 实例(推荐香港/新加坡/美国地域,1 核 1G 即可)',
310
+ '选择 Ubuntu 22.04 或 Debian 12 系统镜像,记录公网 IP',
311
+ '在安全组规则中开放 TCP 端口 8388(Shadowsocks 默认端口)',
312
+ 'SSH 登录 ECS,安装 Shadowsocks-libev',
313
+ '编辑配置文件 /etc/shadowsocks/config.json',
314
+ '启动 ss-server 服务并设置开机自启',
315
+ '在本地安装 Shadowsocks 客户端,填入 ECS 公网 IP、端口、密码和加密方式',
316
+ '开启系统代理或 PAC 模式,浏览器即可通过 ECS 访问外网',
317
+ ],
318
+ tips: [
319
+ '正向代理适合全局翻墙,浏览器和终端都可使用',
320
+ '所有流量都经过 ECS 转发,带宽消耗较大',
321
+ 'ECS 地域必须能访问目标 API(香港/新加坡/美西均可)',
322
+ '可在一台 ECS 上同时部署 Shadowsocks 和 Nginx 反向代理',
323
+ ],
324
+ },
325
+ ecsReverse: {
326
+ name: 'ECS 反向代理',
327
+ tagline: 'Nginx 模型 API 专用代理',
328
+ description: '在阿里云海外 ECS 上部署 Nginx 反向代理,将 API 请求转发到 OpenAI / Anthropic。此方案为「反向代理」,客户端访问 ECS 地址,由 Nginx 转发到目标 API。仅代理模型 API 请求,更轻量低延迟,但不能作为浏览器代理。GPT 和 Claude 可在同一个 Nginx 中配置不同 location 路径。',
329
+ badge: '反向',
330
+ steps: [
331
+ '购买阿里云 ECS 实例(同样需要海外地域,以能访问 OpenAI/Anthropic 为准)',
332
+ '安装 Nginx',
333
+ '配置反向代理,分别转发 /openai/ → api.openai.com 和 /anthropic/ → api.anthropic.com',
334
+ '在阿里云安全组开放 80 和 443 端口',
335
+ '(可选)配置域名 + Let\'s Encrypt SSL 证书',
336
+ '在 Harness 工具中将 baseURL 指向 ECS 的代理地址',
337
+ ],
338
+ tips: [
339
+ '反向代理仅代理 API 请求,更轻量低延迟,但不能作为浏览器代理',
340
+ 'GPT 和 Claude 可共用一个 Nginx,通过不同 location 路径区分',
341
+ '建议配置 HTTPS 证书,避免 API Key 在传输中被截获',
342
+ 'ECS 带宽选择 5Mbps 以上,模型 API 响应通常较大',
343
+ '注意阿里云按量付费的流量费用,海外 ECS 流量费略高',
344
+ ],
345
+ },
346
+ },
347
+ },
348
+ common: {
349
+ copy: '复制',
350
+ copied: '已复制',
351
+ copiedToClipboard: '已复制到剪贴板',
352
+ copyFailed: '复制失败,请手动复制',
353
+ underConstruction: '建设中',
354
+ },
355
+ docs: {
356
+ pageTitle: 'Docs 文档',
357
+ pageDesc: '大语言模型核心接口知识——Chat Completions 与 Agent Tool Calling 全流程详解',
358
+ chat: {
359
+ tabLabel: 'Chat',
360
+ request: '请求',
361
+ response: '响应',
362
+ notes: '要点',
363
+ paramName: '参数名',
364
+ paramType: '类型',
365
+ paramRequired: '必填',
366
+ paramDesc: '说明',
367
+ yes: '是',
368
+ no: '否',
369
+ },
370
+ agent: {
371
+ tabLabel: 'Agent',
372
+ toolDefs: '工具定义',
373
+ scenario: '场景',
374
+ execution: '执行',
375
+ output: '输出结果',
376
+ summary: '循环总结',
377
+ builtin: '内置工具',
378
+ builtinTitle: 'opencode 内置工具完整描述',
379
+ builtinDesc: '以下为 opencode agent 内置工具的真实 description 全文和 parameters JSON Schema。注意每个工具的描述远不止一句话——它包含使用场景、禁忌规则、参数约束和行为规范,是面向模型的 prompt engineering。',
380
+ description: 'Description(描述全文)',
381
+ parameters: 'Parameters(参数 Schema)',
382
+ },
383
+ spec: {
384
+ tabLabel: '规格转换',
385
+ overview: '规格概览',
386
+ comparison: '差异对比',
387
+ aspect: '对比维度',
388
+ mappings: '转换映射',
389
+ note: '说明',
390
+ phase: '阶段',
391
+ configExample: '配置示例',
392
+ location: '位置',
393
+ suggestedFix: '建议修复',
394
+ toolBridge: '协议桥接',
395
+ bridgeFlow: '桥接流程',
396
+ formatName: '格式名称',
397
+ pattern: '模式',
398
+ gateway: 'OpenCode 网关',
399
+ dsProxy: 'DeepSeek 逆向代理',
400
+ llmproxy: 'llmproxy 认证代理',
401
+ codeartsConv: 'CodeArts 接口转换',
402
+ method: '方法',
403
+ path: '路径',
404
+ formatLabel: '格式',
405
+ toolCalling: '工具调用',
406
+ clientName: '客户端',
407
+ yes: '支持',
408
+ partial: '部分',
409
+ notPrimary: '非主要',
410
+ endpointName: '端点名称',
411
+ used: '使用方',
412
+ modelId: '模型 ID',
413
+ modelDisplay: '显示名',
414
+ context: '上下文',
415
+ requestHeaders: '请求头',
416
+ requestBody: '请求体参数',
417
+ from: '源格式',
418
+ to: '目标格式',
419
+ function: '转换函数',
420
+ },
421
+ auth: {
422
+ tabLabel: '登录认证',
423
+ layer: '层级',
424
+ file: '文件',
425
+ role: '职责',
426
+ standardApi: '标准 API',
427
+ deepseekWeb: 'DeepSeek 网页端',
428
+ },
429
+ skills: {
430
+ tabLabel: 'Skills',
431
+ thought: '想法',
432
+ reality: '现实',
433
+ priority: '优先级',
434
+ tdd: 'TDD 概念',
435
+ skillCreation: '技能创建',
436
+ platform: '平台',
437
+ install: '安装',
438
+ hookFormat: 'Hook 格式',
439
+ dimension: '维度',
440
+ promptTemplate: 'Prompt 模板',
441
+ outputContract: '输出契约',
442
+ fileMechanism: '文件机制',
443
+ lifecycle: '生命周期',
444
+ },
445
+ },
446
+ os: {
447
+ currentSystem: '当前系统',
448
+ unix: 'macOS / Linux',
449
+ windows: 'Windows',
450
+ },
451
+ router: {
452
+ home: '首页',
453
+ harness: 'Harness 工具',
454
+ freeModels: '免费模型',
455
+ proxy: '代理方案',
456
+ tokenMarket: 'Token 市场',
457
+ docs: 'Docs 文档',
458
+ siteName: 'AI Harness 学习站',
459
+ metaDesc: 'AI Harness 学习站 - 学习 AI 编程工具(OpenCode、Codex、Claude Code),获取免费大模型,国内代理方案',
460
+ },
461
+ }
@@ -0,0 +1,16 @@
1
+ import { createApp } from 'vue'
2
+ import { createPinia } from 'pinia'
3
+ import ElementPlus from 'element-plus'
4
+ import 'element-plus/dist/index.css'
5
+ import 'element-plus/theme-chalk/dark/css-vars.css'
6
+ import router from './router'
7
+ import i18n from './locales'
8
+ import './style.css'
9
+ import App from './App.vue'
10
+
11
+ const app = createApp(App)
12
+ app.use(createPinia())
13
+ app.use(router)
14
+ app.use(i18n)
15
+ app.use(ElementPlus)
16
+ app.mount('#app')
@@ -0,0 +1,76 @@
1
+ import { createRouter, createWebHistory } from 'vue-router'
2
+ import HomeView from '../views/HomeView.vue'
3
+ import HarnessView from '../views/HarnessView.vue'
4
+ import FreeModelsView from '../views/FreeModelsView.vue'
5
+ import ProxyView from '../views/ProxyView.vue'
6
+ import TokenMarketView from '../views/TokenMarketView.vue'
7
+ import DocsView from '../views/DocsView.vue'
8
+ import AdminModelsView from '../views/AdminModelsView.vue'
9
+ import i18n from '../locales/index.js'
10
+
11
+ const routes = [
12
+ {
13
+ path: '/',
14
+ name: 'home',
15
+ component: HomeView,
16
+ meta: { titleKey: 'router.home' },
17
+ },
18
+ {
19
+ path: '/harness',
20
+ name: 'harness',
21
+ component: HarnessView,
22
+ meta: { titleKey: 'router.harness' },
23
+ },
24
+ {
25
+ path: '/free-models',
26
+ name: 'free-models',
27
+ component: FreeModelsView,
28
+ meta: { titleKey: 'router.freeModels' },
29
+ },
30
+ {
31
+ path: '/proxy',
32
+ name: 'proxy',
33
+ component: ProxyView,
34
+ meta: { titleKey: 'router.proxy' },
35
+ },
36
+ {
37
+ path: '/token-market',
38
+ name: 'token-market',
39
+ component: TokenMarketView,
40
+ meta: { titleKey: 'router.tokenMarket' },
41
+ },
42
+ {
43
+ path: '/docs',
44
+ name: 'docs',
45
+ component: DocsView,
46
+ meta: { titleKey: 'router.docs' },
47
+ },
48
+ {
49
+ path: '/admin/models',
50
+ name: 'admin-models',
51
+ component: AdminModelsView,
52
+ meta: { titleKey: '模型管理' },
53
+ },
54
+ ]
55
+
56
+ const router = createRouter({
57
+ history: createWebHistory(),
58
+ routes,
59
+ scrollBehavior() {
60
+ return { top: 0 }
61
+ },
62
+ })
63
+
64
+ router.afterEach((to) => {
65
+ const { t } = i18n.global
66
+ const title = to.meta.titleKey ? t(to.meta.titleKey) : ''
67
+ const siteName = t('router.siteName')
68
+ document.title = title ? `${title} | ${siteName}` : siteName
69
+
70
+ const metaDesc = document.querySelector('meta[name="description"]')
71
+ if (metaDesc) {
72
+ metaDesc.setAttribute('content', t('router.metaDesc'))
73
+ }
74
+ })
75
+
76
+ export default router
@@ -0,0 +1,15 @@
1
+ html, body {
2
+ margin: 0;
3
+ padding: 0;
4
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
5
+ -webkit-font-smoothing: antialiased;
6
+ -moz-osx-font-smoothing: grayscale;
7
+ }
8
+
9
+ #app {
10
+ min-height: 100vh;
11
+ }
12
+
13
+ html.dark {
14
+ color-scheme: dark;
15
+ }