87 lines
4.6 KiB
JavaScript
87 lines
4.6 KiB
JavaScript
// dsh-plugin-mcn 配置常量(拆分自 index.js,纯常量无业务逻辑)
|
||||
|
|
import { homedir } from "node:os";
|
|||
|
|
import { join, isAbsolute, resolve } from "node:path";
|
|||
|
|
import { readFileSync, existsSync } from "node:fs";
|
|||
|
|
|
|||
|
|
const DB_PATH = join(homedir(), ".dsh", "mcn-plugin.db");
|
|||
|
|
// 数据预览统计缓存(60s TTL,避免每次从数据库刷新)
|
|||
|
|
const STATS_TTL = 60 * 1000;
|
|||
|
|
// 创作专用会话:固定命名,已存在则复用
|
|||
|
|
const CREATIVE_SESSION_ID = "dsh_short-video-script";
|
|||
|
|
// 创作 agent 的模型配置(与 web profile 默认一致,避免 {{model}} 变量无值)
|
|||
|
|
const CREATIVE_PROVIDER = "deepseek-official";
|
|||
|
|
const CREATIVE_MODEL = "deepseek-v4-flash";
|
|||
|
|
const MCP_PACKAGE = "myai-mcp";
|
|||
|
|
const MCP_ENV = {
|
|||
|
|
MYAI_ENV: "prod",
|
|||
|
|
MYAI_API_BASE_URL: "https://maiya-trans.youmanvideo.com/api",
|
|||
|
|
MYAI_FEISHU_APP_ID: "cli_a84d0a47f93e1013",
|
|||
|
|
MYAI_VOD_URL_PREFIX: "https://maiya-ai-fileup.youmanvideo.com",
|
|||
|
|
MYAI_VOD_SPACE_NAME: "maiya-ai",
|
|||
|
|
};
|
|||
|
|
const NPX_CMD = process.platform === "win32"
|
|||
|
|
? '"D:\\Program Files\\nodejs\\npx.cmd"'
|
|||
|
|
: "npx";
|
|||
|
|
|
|||
|
|
function resolveCreativeCwd() {
|
|||
|
|
try {
|
|||
|
|
const raw = readFileSync(join(homedir(), ".dsh", "storages", "workspace.json"), "utf8");
|
|||
|
|
const data = JSON.parse(raw);
|
|||
|
|
const workspaces = data?.tables?.workspaces;
|
|||
|
|
if (workspaces) {
|
|||
|
|
const candidates = Object.values(workspaces)
|
|||
|
|
.filter((ws) => typeof ws?.path === "string" && existsSync(ws.path))
|
|||
|
|
.sort((a, b) => String(a.path).split(/[\\/]/).length - String(b.path).split(/[\\/]/).length);
|
|||
|
|
if (candidates.length > 0) return candidates[0].path;
|
|||
|
|
}
|
|||
|
|
} catch (e) { /* fall through */ }
|
|||
|
|
return "D:\\dshworkspace";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/** 并发浏览器任务隔离:调试 Chrome 端口池(需预启动对应实例),按会话 id 稳定分配。
|
|||
|
|
* 导入/刷新等浏览器类任务各自使用独立端口,避免多个 AI 会话抢同一 Chrome。 */
|
|||
|
|
const CHROME_PORTS = [9223, 9224, 9225];
|
|||
|
|
|
|||
|
|
const IMPORT_PREFIX = "dsh_import-";
|
|||
|
|
const REFRESH_PREFIX = "dsh_refresh-";
|
|||
|
|
const VIDEO_ANALYZE_PREFIX = "dsh_video-analyze-";
|
|||
|
|
const REWRITE_PREFIX = "dsh_rewrite-";
|
|||
|
|
const PERSONA_PREFIX = "dsh_persona-";
|
|||
|
|
const STORYBOARD_PREFIX = "dsh_storyboard-";
|
|||
|
|
const REVIEW_PREFIX = "dsh_review-";
|
|||
|
|
// 账号数据分析会话前缀(V1.0 同步:账号详情「数据分析」tab 任务,每账号独立会话,归「解析任务」分组)
|
|||
|
|
const ACCT_ANALYSIS_PREFIX = "dsh_acctana-";
|
|||
|
|
const VIDEO_ANALYZE_MAX_CONCURRENT = 8;
|
|||
|
|
const REWRITE_MAX_CONCURRENT = 8;
|
|||
|
|
const STORYBOARD_MAX_CONCURRENT = 8;
|
|||
|
|
const REVIEW_MAX_CONCURRENT = 4;
|
|||
|
|
const MAX_UNGROUPED = 10;
|
|||
|
|
const SESSION_ACTIVE_WINDOW_MS = 15 * 60 * 1000;
|
|||
|
|
// MCN 任务会话自动删除:最后活动时间距今超过该时长(24h)且不在运行中的 dsh_* 会话,物理删除会话记录
|
|||
|
|
const SESSION_RETENTION_MS = 24 * 60 * 60 * 1000;
|
|||
|
|
|
|||
|
|
// ---- 榜单更新任务(同步 V1.0 工作台 09-03 机制:30min 防重复更新窗口,可 force 跳过;红狐 API 按次计费)----
|
|||
|
|
const RANK_UPDATE_COOLDOWN_MS = 30 * 60 * 1000;
|
|||
|
|
// 榜单更新专用会话(固定命名,与创作会话同模式:已存在复用、followup 触发)
|
|||
|
|
const RANK_SESSION_ID = "dsh_rank-update";
|
|||
|
|
// 榜单更新元数据(跨重启持久化:lastAt/running/lastOk/lastError)
|
|||
|
|
const RANK_META_FILE = join(homedir(), ".dsh", "mcn-rank-update.json");
|
|||
|
|
// 榜单更新任务超时兜底:提交超过该时长仍标记 running → 视为中断(自愈置回空闲)
|
|||
|
|
const RANK_TASK_MAX_MS = 60 * 60 * 1000;
|
|||
|
|
|
|||
|
|
/** 赛道标准枚举(28 个标准,其中「化妆美容」统一为「美妆」+ 剧情 1 个用户指定保留,共 29 个;权威定义见 dsh-plugin-dev/references/赛道标准枚举.md 与技能 SKILL.md) */
|
|||
|
|
const STANDARD_TRACKS = [
|
|||
|
|
"个人才艺", "生活vlog", "财富理财", "二次元", "居家装修", "学习教育", "小剧场", "数码科技",
|
|||
|
|
"旅行", "美食", "美妆", "动物", "亲子", "汽车", "情感", "三农", "健康医学", "潮流风尚",
|
|||
|
|
"舞蹈才艺", "颜值造型", "人文", "音乐", "影视", "身体锻炼", "体育", "明星娱乐", "游戏", "其他",
|
|||
|
|
"剧情",
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
export {
|
|||
|
|
DB_PATH, STATS_TTL, CREATIVE_SESSION_ID, CREATIVE_PROVIDER, CREATIVE_MODEL,
|
|||
|
|
MCP_PACKAGE, MCP_ENV, NPX_CMD, CHROME_PORTS,
|
|||
|
|
IMPORT_PREFIX, REFRESH_PREFIX, VIDEO_ANALYZE_PREFIX, REWRITE_PREFIX, PERSONA_PREFIX, STORYBOARD_PREFIX, REVIEW_PREFIX, ACCT_ANALYSIS_PREFIX,
|
|||
|
|
VIDEO_ANALYZE_MAX_CONCURRENT, REWRITE_MAX_CONCURRENT, STORYBOARD_MAX_CONCURRENT, REVIEW_MAX_CONCURRENT, MAX_UNGROUPED,
|
|||
|
|
SESSION_ACTIVE_WINDOW_MS, SESSION_RETENTION_MS, STANDARD_TRACKS, resolveCreativeCwd,
|
|||
|
|
RANK_UPDATE_COOLDOWN_MS, RANK_SESSION_ID, RANK_META_FILE, RANK_TASK_MAX_MS,
|
|||
|
|
};
|