Files

87 lines
4.6 KiB
JavaScript
Raw Permalink Normal View History

// 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,
};