ai-zero-token 1.0.0 → 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.
- package/README.md +20 -0
- package/dist/cli/commands/serve.js +1 -0
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/server/app.js +6 -1
- package/dist/server/app.js.map +1 -1
- package/dist/server/index.js +13 -2
- package/dist/server/index.js.map +1 -1
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -120,6 +120,20 @@ azt ask --model gpt-5.3-codex "请只回复 OK"
|
|
|
120
120
|
azt serve
|
|
121
121
|
```
|
|
122
122
|
|
|
123
|
+
如果你要让本地网页直接从浏览器请求这个网关,现在已经默认开启 CORS。
|
|
124
|
+
|
|
125
|
+
如需限制来源,可以在启动前指定:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
AZT_CORS_ORIGIN=http://127.0.0.1:8124 azt serve
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
多个来源可用英文逗号分隔:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
AZT_CORS_ORIGIN=http://127.0.0.1:8124,http://localhost:3000 azt serve
|
|
135
|
+
```
|
|
136
|
+
|
|
123
137
|
清空本地状态:
|
|
124
138
|
|
|
125
139
|
```bash
|
|
@@ -164,6 +178,12 @@ CLI 一旦执行 `serve`,就会进入本地网关模式。
|
|
|
164
178
|
http://127.0.0.1:8787
|
|
165
179
|
```
|
|
166
180
|
|
|
181
|
+
默认 CORS 来源:
|
|
182
|
+
|
|
183
|
+
```text
|
|
184
|
+
*
|
|
185
|
+
```
|
|
186
|
+
|
|
167
187
|
### 3. 先确认网关状态
|
|
168
188
|
|
|
169
189
|
健康检查:
|
|
@@ -9,6 +9,7 @@ async function runServeCommand(args) {
|
|
|
9
9
|
const server = await startServer({ host, port });
|
|
10
10
|
console.log("\u672C\u5730\u7F51\u5173\u5DF2\u542F\u52A8\u3002");
|
|
11
11
|
console.log(`url: http://${server.host}:${server.port}`);
|
|
12
|
+
console.log(`corsOrigin: ${server.corsOrigin}`);
|
|
12
13
|
console.log(`activeProvider: ${status.activeProvider ?? "none"}`);
|
|
13
14
|
console.log(`defaultModel: ${status.defaultModel}`);
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/commands/serve.ts"],"sourcesContent":["import { createGatewayContext } from \"../../core/context.js\";\nimport { startServer } from \"../../server/index.js\";\nimport { parseServeArgs } from \"../shared.js\";\n\nexport async function runServeCommand(args: string[]): Promise<void> {\n const { host, port } = parseServeArgs(args);\n const ctx = createGatewayContext();\n const status = await ctx.authService.getStatus();\n const server = await startServer({ host, port });\n console.log(\"本地网关已启动。\");\n console.log(`url: http://${server.host}:${server.port}`);\n console.log(`activeProvider: ${status.activeProvider ?? \"none\"}`);\n console.log(`defaultModel: ${status.defaultModel}`);\n}\n"],"mappings":";AAAA,SAAS,4BAA4B;AACrC,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAE/B,eAAsB,gBAAgB,MAA+B;AACnE,QAAM,EAAE,MAAM,KAAK,IAAI,eAAe,IAAI;AAC1C,QAAM,MAAM,qBAAqB;AACjC,QAAM,SAAS,MAAM,IAAI,YAAY,UAAU;AAC/C,QAAM,SAAS,MAAM,YAAY,EAAE,MAAM,KAAK,CAAC;AAC/C,UAAQ,IAAI,kDAAU;AACtB,UAAQ,IAAI,eAAe,OAAO,IAAI,IAAI,OAAO,IAAI,EAAE;AACvD,UAAQ,IAAI,mBAAmB,OAAO,kBAAkB,MAAM,EAAE;AAChE,UAAQ,IAAI,iBAAiB,OAAO,YAAY,EAAE;AACpD;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/commands/serve.ts"],"sourcesContent":["import { createGatewayContext } from \"../../core/context.js\";\nimport { startServer } from \"../../server/index.js\";\nimport { parseServeArgs } from \"../shared.js\";\n\nexport async function runServeCommand(args: string[]): Promise<void> {\n const { host, port } = parseServeArgs(args);\n const ctx = createGatewayContext();\n const status = await ctx.authService.getStatus();\n const server = await startServer({ host, port });\n console.log(\"本地网关已启动。\");\n console.log(`url: http://${server.host}:${server.port}`);\n console.log(`corsOrigin: ${server.corsOrigin}`);\n console.log(`activeProvider: ${status.activeProvider ?? \"none\"}`);\n console.log(`defaultModel: ${status.defaultModel}`);\n}\n"],"mappings":";AAAA,SAAS,4BAA4B;AACrC,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAE/B,eAAsB,gBAAgB,MAA+B;AACnE,QAAM,EAAE,MAAM,KAAK,IAAI,eAAe,IAAI;AAC1C,QAAM,MAAM,qBAAqB;AACjC,QAAM,SAAS,MAAM,IAAI,YAAY,UAAU;AAC/C,QAAM,SAAS,MAAM,YAAY,EAAE,MAAM,KAAK,CAAC;AAC/C,UAAQ,IAAI,kDAAU;AACtB,UAAQ,IAAI,eAAe,OAAO,IAAI,IAAI,OAAO,IAAI,EAAE;AACvD,UAAQ,IAAI,eAAe,OAAO,UAAU,EAAE;AAC9C,UAAQ,IAAI,mBAAmB,OAAO,kBAAkB,MAAM,EAAE;AAChE,UAAQ,IAAI,iBAAiB,OAAO,YAAY,EAAE;AACpD;","names":[]}
|
package/dist/server/app.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import Fastify from "fastify";
|
|
3
|
+
import cors from "@fastify/cors";
|
|
3
4
|
import { z } from "zod";
|
|
4
5
|
import { createGatewayContext } from "../core/context.js";
|
|
5
6
|
const responsesBodySchema = z.object({
|
|
@@ -35,11 +36,15 @@ function extractTextInput(input) {
|
|
|
35
36
|
}
|
|
36
37
|
return chunks.join("\n").trim();
|
|
37
38
|
}
|
|
38
|
-
function createApp() {
|
|
39
|
+
function createApp(params) {
|
|
39
40
|
const app = Fastify({
|
|
40
41
|
logger: false
|
|
41
42
|
});
|
|
42
43
|
const ctx = createGatewayContext();
|
|
44
|
+
void app.register(cors, {
|
|
45
|
+
origin: params?.corsOrigin ?? true,
|
|
46
|
+
methods: ["GET", "POST", "OPTIONS"]
|
|
47
|
+
});
|
|
43
48
|
app.get("/_gateway/health", async () => ({ ok: true }));
|
|
44
49
|
app.get("/_gateway/status", async () => ctx.authService.getStatus());
|
|
45
50
|
app.get("/_gateway/models", async () => ({
|
package/dist/server/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/app.ts"],"sourcesContent":["import Fastify from \"fastify\";\nimport { z } from \"zod\";\nimport { createGatewayContext } from \"../core/context.js\";\n\nconst responsesBodySchema = z.object({\n model: z.string().optional(),\n input: z.union([\n z.string(),\n z.array(\n z.object({\n role: z.string().optional(),\n content: z\n .array(\n z.object({\n type: z.string().optional(),\n text: z.string().optional(),\n }),\n )\n .optional(),\n }),\n ),\n ]),\n instructions: z.string().optional(),\n stream: z.boolean().optional(),\n});\n\nfunction extractTextInput(input: z.infer<typeof responsesBodySchema>[\"input\"]): string {\n if (typeof input === \"string\") {\n return input;\n }\n\n const chunks: string[] = [];\n for (const item of input) {\n for (const part of item.content ?? []) {\n if (typeof part.text === \"string\" && part.text.trim()) {\n chunks.push(part.text.trim());\n }\n }\n }\n\n return chunks.join(\"\\n\").trim();\n}\n\nexport function createApp() {\n const app = Fastify({\n logger: false,\n });\n const ctx = createGatewayContext();\n\n app.get(\"/_gateway/health\", async () => ({ ok: true }));\n\n app.get(\"/_gateway/status\", async () => ctx.authService.getStatus());\n\n app.get(\"/_gateway/models\", async () => ({\n data: await ctx.modelService.listModels(),\n }));\n\n app.get(\"/v1/models\", async () => ({\n object: \"list\",\n data: (await ctx.modelService.listModels()).map((model) => ({\n id: model.id,\n object: \"model\",\n owned_by: model.provider,\n })),\n }));\n\n app.post(\"/v1/responses\", async (request, reply) => {\n const parsed = responsesBodySchema.safeParse(request.body);\n if (!parsed.success) {\n reply.code(400);\n return {\n error: {\n type: \"validation_error\",\n message: parsed.error.issues[0]?.message ?? \"请求体格式错误\",\n },\n };\n }\n\n if (parsed.data.stream) {\n reply.code(501);\n return {\n error: {\n type: \"not_supported\",\n message: \"第一阶段暂不支持 stream=true\",\n },\n };\n }\n\n const input = extractTextInput(parsed.data.input);\n if (!input) {\n reply.code(400);\n return {\n error: {\n type: \"validation_error\",\n message: \"没有解析出有效的 input 文本\",\n },\n };\n }\n\n const result = await ctx.chatService.chat({\n model: parsed.data.model,\n input,\n system: parsed.data.instructions,\n });\n\n return {\n object: \"response\",\n provider: result.provider,\n model: result.model,\n output_text: result.text,\n output: [\n {\n type: \"message\",\n role: \"assistant\",\n content: [\n {\n type: \"output_text\",\n text: result.text,\n },\n ],\n },\n ],\n };\n });\n\n return app;\n}\n"],"mappings":";AAAA,OAAO,aAAa;AACpB,SAAS,SAAS;AAClB,SAAS,4BAA4B;AAErC,MAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,OAAO,EAAE,MAAM;AAAA,IACb,EAAE,OAAO;AAAA,IACT,EAAE;AAAA,MACA,EAAE,OAAO;AAAA,QACP,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,QAC1B,SAAS,EACN;AAAA,UACC,EAAE,OAAO;AAAA,YACP,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,YAC1B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,UAC5B,CAAC;AAAA,QACH,EACC,SAAS;AAAA,MACd,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACD,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAC/B,CAAC;AAED,SAAS,iBAAiB,OAA6D;AACrF,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,SAAmB,CAAC;AAC1B,aAAW,QAAQ,OAAO;AACxB,eAAW,QAAQ,KAAK,WAAW,CAAC,GAAG;AACrC,UAAI,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,KAAK,GAAG;AACrD,eAAO,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAEA,SAAO,OAAO,KAAK,IAAI,EAAE,KAAK;AAChC;AAEO,SAAS,
|
|
1
|
+
{"version":3,"sources":["../../src/server/app.ts"],"sourcesContent":["import Fastify from \"fastify\";\nimport cors from \"@fastify/cors\";\nimport { z } from \"zod\";\nimport { createGatewayContext } from \"../core/context.js\";\n\nconst responsesBodySchema = z.object({\n model: z.string().optional(),\n input: z.union([\n z.string(),\n z.array(\n z.object({\n role: z.string().optional(),\n content: z\n .array(\n z.object({\n type: z.string().optional(),\n text: z.string().optional(),\n }),\n )\n .optional(),\n }),\n ),\n ]),\n instructions: z.string().optional(),\n stream: z.boolean().optional(),\n});\n\nfunction extractTextInput(input: z.infer<typeof responsesBodySchema>[\"input\"]): string {\n if (typeof input === \"string\") {\n return input;\n }\n\n const chunks: string[] = [];\n for (const item of input) {\n for (const part of item.content ?? []) {\n if (typeof part.text === \"string\" && part.text.trim()) {\n chunks.push(part.text.trim());\n }\n }\n }\n\n return chunks.join(\"\\n\").trim();\n}\n\nexport function createApp(params?: {\n corsOrigin?: true | string | RegExp | Array<string | RegExp>;\n}) {\n const app = Fastify({\n logger: false,\n });\n const ctx = createGatewayContext();\n\n void app.register(cors, {\n origin: params?.corsOrigin ?? true,\n methods: [\"GET\", \"POST\", \"OPTIONS\"],\n });\n\n app.get(\"/_gateway/health\", async () => ({ ok: true }));\n\n app.get(\"/_gateway/status\", async () => ctx.authService.getStatus());\n\n app.get(\"/_gateway/models\", async () => ({\n data: await ctx.modelService.listModels(),\n }));\n\n app.get(\"/v1/models\", async () => ({\n object: \"list\",\n data: (await ctx.modelService.listModels()).map((model) => ({\n id: model.id,\n object: \"model\",\n owned_by: model.provider,\n })),\n }));\n\n app.post(\"/v1/responses\", async (request, reply) => {\n const parsed = responsesBodySchema.safeParse(request.body);\n if (!parsed.success) {\n reply.code(400);\n return {\n error: {\n type: \"validation_error\",\n message: parsed.error.issues[0]?.message ?? \"请求体格式错误\",\n },\n };\n }\n\n if (parsed.data.stream) {\n reply.code(501);\n return {\n error: {\n type: \"not_supported\",\n message: \"第一阶段暂不支持 stream=true\",\n },\n };\n }\n\n const input = extractTextInput(parsed.data.input);\n if (!input) {\n reply.code(400);\n return {\n error: {\n type: \"validation_error\",\n message: \"没有解析出有效的 input 文本\",\n },\n };\n }\n\n const result = await ctx.chatService.chat({\n model: parsed.data.model,\n input,\n system: parsed.data.instructions,\n });\n\n return {\n object: \"response\",\n provider: result.provider,\n model: result.model,\n output_text: result.text,\n output: [\n {\n type: \"message\",\n role: \"assistant\",\n content: [\n {\n type: \"output_text\",\n text: result.text,\n },\n ],\n },\n ],\n };\n });\n\n return app;\n}\n"],"mappings":"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","names":[]}
|
package/dist/server/index.js
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { ConfigService } from "../core/services/config-service.js";
|
|
3
3
|
import { createApp } from "./app.js";
|
|
4
|
+
function resolveCorsOrigin() {
|
|
5
|
+
const raw = process.env.AZT_CORS_ORIGIN?.trim();
|
|
6
|
+
if (!raw || raw === "*") {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
const values = raw.split(",").map((item) => item.trim()).filter(Boolean);
|
|
10
|
+
return values.length <= 1 ? values[0] ?? true : values;
|
|
11
|
+
}
|
|
4
12
|
async function startServer(params) {
|
|
5
|
-
const app = createApp(
|
|
13
|
+
const app = createApp({
|
|
14
|
+
corsOrigin: resolveCorsOrigin()
|
|
15
|
+
});
|
|
6
16
|
const configService = new ConfigService();
|
|
7
17
|
const defaults = await configService.getServerConfig();
|
|
8
18
|
const host = params?.host ?? defaults.host;
|
|
@@ -14,7 +24,8 @@ async function startServer(params) {
|
|
|
14
24
|
return {
|
|
15
25
|
app,
|
|
16
26
|
host,
|
|
17
|
-
port
|
|
27
|
+
port,
|
|
28
|
+
corsOrigin: process.env.AZT_CORS_ORIGIN?.trim() || "*"
|
|
18
29
|
};
|
|
19
30
|
}
|
|
20
31
|
export {
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/index.ts"],"sourcesContent":["import { ConfigService } from \"../core/services/config-service.js\";\nimport { createApp } from \"./app.js\";\n\nexport async function startServer(params?: { host?: string; port?: number }) {\n const app = createApp();\n const configService = new ConfigService();\n const defaults = await configService.getServerConfig();\n const host = params?.host ?? defaults.host;\n const port = params?.port ?? defaults.port;\n\n await app.listen({\n host,\n port,\n });\n\n return {\n app,\n host,\n port,\n };\n}\n"],"mappings":";AAAA,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAE1B,eAAsB,YAAY,QAA2C;AAC3E,QAAM,MAAM,UAAU;
|
|
1
|
+
{"version":3,"sources":["../../src/server/index.ts"],"sourcesContent":["import { ConfigService } from \"../core/services/config-service.js\";\nimport { createApp } from \"./app.js\";\n\nfunction resolveCorsOrigin(): true | string | RegExp | Array<string | RegExp> {\n const raw = process.env.AZT_CORS_ORIGIN?.trim();\n if (!raw || raw === \"*\") {\n return true;\n }\n\n const values = raw\n .split(\",\")\n .map((item) => item.trim())\n .filter(Boolean);\n\n return values.length <= 1 ? values[0] ?? true : values;\n}\n\nexport async function startServer(params?: { host?: string; port?: number }) {\n const app = createApp({\n corsOrigin: resolveCorsOrigin(),\n });\n const configService = new ConfigService();\n const defaults = await configService.getServerConfig();\n const host = params?.host ?? defaults.host;\n const port = params?.port ?? defaults.port;\n\n await app.listen({\n host,\n port,\n });\n\n return {\n app,\n host,\n port,\n corsOrigin: process.env.AZT_CORS_ORIGIN?.trim() || \"*\",\n };\n}\n"],"mappings":";AAAA,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAE1B,SAAS,oBAAqE;AAC5E,QAAM,MAAM,QAAQ,IAAI,iBAAiB,KAAK;AAC9C,MAAI,CAAC,OAAO,QAAQ,KAAK;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,IACZ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,OAAO;AAEjB,SAAO,OAAO,UAAU,IAAI,OAAO,CAAC,KAAK,OAAO;AAClD;AAEA,eAAsB,YAAY,QAA2C;AAC3E,QAAM,MAAM,UAAU;AAAA,IACpB,YAAY,kBAAkB;AAAA,EAChC,CAAC;AACD,QAAM,gBAAgB,IAAI,cAAc;AACxC,QAAM,WAAW,MAAM,cAAc,gBAAgB;AACrD,QAAM,OAAO,QAAQ,QAAQ,SAAS;AACtC,QAAM,OAAO,QAAQ,QAAQ,SAAS;AAEtC,QAAM,IAAI,OAAO;AAAA,IACf;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,QAAQ,IAAI,iBAAiB,KAAK,KAAK;AAAA,EACrD;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-zero-token",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "A local-first single-user AI CLI and gateway with OpenAI Codex OAuth support.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -34,11 +34,10 @@
|
|
|
34
34
|
"serve": "bun src/cli.ts serve",
|
|
35
35
|
"build": "tsup",
|
|
36
36
|
"typecheck": "bunx tsc -p tsconfig.json --noEmit",
|
|
37
|
-
"pack:dry": "npm pack --dry-run"
|
|
38
|
-
"whoami:npm": "sh -c 'test -f .env.publish || { echo \"Missing .env.publish\"; exit 1; }; set -a; . ./.env.publish; set +a; npm whoami'",
|
|
39
|
-
"publish:npm": "sh -c 'test -f .env.publish || { echo \"Missing .env.publish\"; exit 1; }; set -a; . ./.env.publish; set +a; npm publish'"
|
|
37
|
+
"pack:dry": "npm pack --dry-run"
|
|
40
38
|
},
|
|
41
39
|
"dependencies": {
|
|
40
|
+
"@fastify/cors": "^11.1.0",
|
|
42
41
|
"fastify": "^5.8.2",
|
|
43
42
|
"zod": "^4.3.6"
|
|
44
43
|
},
|