baseline: dsh 工作区基线快照(2026-09-10,全新历史起点)
本提交为 dsh_mcn_workshop 仓库的首个提交(旧仓 dsh_MCNProject 已停用), 完整固化 C:/Users/Administrator/.dsh 当前磁盘状态。 1) 临时数据清理:移出 sessions/(81M)、logs/、skill-backup-20260906/(14M)、 scripts/__pycache__、storages/workspace.json.bak —— 合计 94M(.dsh 162M → 68M) 2) 凭据脱敏:.credentials.yaml(含明文 DEEPSEEK_API_KEY)移出 git 跟踪并加入 .gitignore;mcn-data-insight/scripts/setup_redfox_key.py 中真实 key 示例改为占位符 3) .gitignore 增补 logs/、skill-backup-*/ 规则 4) 技能结构以当前磁盘状态为准:skills/ = mcn-short-video / impeccable / taste-skill / dsh-multi-user-migration;旧技能目录(mcn-dou-analysis、storyboard-prompt、 short-video-script、browser-harness、mcn-data-insight)与 profiles/web/node_modules/dsh-vision-router 本地已不存在,本提交记为删除
This commit is contained in:
commit
856e632807
880 files changed
+225426
No files matched your search
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env node
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath, pathToFileURL } from 'node:url';
|
||||
import { resolveProjectRoot } from './context.mjs';
|
||||
import {
|
||||
listSurfaceBriefs,
|
||||
resolveSurfaceBrief,
|
||||
surfaceBriefPathForTarget,
|
||||
writeSurfaceBrief,
|
||||
} from './lib/surface-briefs.mjs';
|
||||
|
||||
function summary(brief, projectRoot) {
|
||||
return {
|
||||
slug: brief.slug,
|
||||
path: path.relative(projectRoot, brief.path).split(path.sep).join('/'),
|
||||
primaryTarget: brief.primaryTarget,
|
||||
relatedTargets: brief.relatedTargets,
|
||||
};
|
||||
}
|
||||
|
||||
function main(argv) {
|
||||
const [command, target, bodyFile, ...relatedTargets] = argv;
|
||||
const projectRoot = resolveProjectRoot(process.cwd(), target ? { targetPath: target } : {});
|
||||
if (command === 'path') {
|
||||
const filePath = surfaceBriefPathForTarget(target, { projectRoot });
|
||||
if (!filePath) throw new Error('surface brief path requires a concrete target');
|
||||
process.stdout.write(`${path.relative(process.cwd(), filePath) || filePath}\n`);
|
||||
return;
|
||||
}
|
||||
if (command === 'list') {
|
||||
process.stdout.write(`${JSON.stringify(listSurfaceBriefs(projectRoot).map((brief) => summary(brief, projectRoot)), null, 2)}\n`);
|
||||
return;
|
||||
}
|
||||
if (command === 'read') {
|
||||
const result = resolveSurfaceBrief(projectRoot, target || null);
|
||||
if (result.brief) {
|
||||
process.stdout.write(result.brief.text);
|
||||
return;
|
||||
}
|
||||
if (result.candidates.length) process.stderr.write(`${JSON.stringify(result.candidates.map((brief) => summary(brief, projectRoot)), null, 2)}\n`);
|
||||
process.exit(2);
|
||||
}
|
||||
if (command === 'write') {
|
||||
if (!target || !bodyFile) throw new Error('usage: surface-brief.mjs write <primary-target> <body-file>');
|
||||
const filePath = writeSurfaceBrief({
|
||||
projectRoot,
|
||||
primaryTarget: target,
|
||||
relatedTargets,
|
||||
body: fs.readFileSync(bodyFile, 'utf-8'),
|
||||
});
|
||||
process.stdout.write(`${path.relative(process.cwd(), filePath) || filePath}\n`);
|
||||
return;
|
||||
}
|
||||
throw new Error('usage: surface-brief.mjs <path|list|read|write> [target] [body-file] [related-target ...]');
|
||||
}
|
||||
|
||||
function isMainModule() {
|
||||
if (!process.argv[1]) return false;
|
||||
try {
|
||||
return fs.realpathSync(fileURLToPath(import.meta.url)) === fs.realpathSync(process.argv[1]);
|
||||
} catch {
|
||||
return import.meta.url === pathToFileURL(process.argv[1]).href;
|
||||
}
|
||||
}
|
||||
|
||||
if (isMainModule()) {
|
||||
try {
|
||||
main(process.argv.slice(2));
|
||||
} catch (error) {
|
||||
process.stderr.write(`${error?.message || error}\n`);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user