收敛 AGC 官方 LLM Router 账号链路

新增 llm_router_account 表、procedures 与客户端绑定
api-server 改为 New API 管理员流程签发独立 Router 账号
Router 成功后执行幂等后置泥点扣费
生产外锁定非生产 Router 控制面为 loopback
AGC 正式模式清除手工 Provider 凭据并锁定官方代理
AGC 状态面只返回账号凭据与官方路由安全元数据
后台数据库表查询适配账号凭据状态展示
补充 AGC 与后端测试、环境示例和架构文档
修正 dev-stack 状态路径按仓库脚本位置解析
This commit is contained in:
2026-09-01 12:03:07 +08:00
parent 26e4eab6b6
commit c2354f855f
68 changed files with 4653 additions and 1246 deletions
+8 -3
View File
@@ -16,7 +16,7 @@ import {
watch,
writeFileSync,
} from 'node:fs';
import { basename, join, relative, resolve } from 'node:path';
import { basename, dirname, join, relative, resolve } from 'node:path';
import { createInterface } from 'node:readline';
import { fileURLToPath } from 'node:url';
@@ -37,8 +37,13 @@ import {
resolveClientHost,
} from './dev-utils.mjs';
const repoRoot = process.cwd();
const devStackStatePath = join(repoRoot, '.app/dev-stack.json');
// Resolve the workspace from this script's location, not the caller's cwd.
// AGC starts this scheduler through `npm --prefix` from its own package; using
// cwd there could make it read/write a different `.app/dev-stack.json` than
// Vite and the Tauri launcher. All dev-stack consumers must share this target.
const scriptDir = dirname(fileURLToPath(import.meta.url));
const repoRoot = resolve(scriptDir, '..');
const devStackStatePath = resolveDevStackStatePath(repoRoot);
const serverRsDir = resolve(repoRoot, 'server-rs');
const manifestPath = resolve(serverRsDir, 'Cargo.toml');
const modulePath = resolve(serverRsDir, 'crates/spacetime-module');