用途:DSP 为 LLM 智能体提供代码库的图结构长期记忆。它在项目 .dsp/ 目录中构建实体依赖图,每个实体(模块、函数、外部依赖)拥有 UID、描述、导入列表和导出索引,用于回答代码中存在什么、为何存在、谁依赖谁、谁使用了什么。它不是给人看的文档,也不是 AST 转储,而是记录含义(目的)、边界(导入/导出)和连接原因(why)。
主要能力:以 UID 而非文件路径标识实体,重命名或移动不改变 UID;导入同时记录来源与具体内容;要求完整导入覆盖,代码、图片、样式、配置等所有被导入文件都需登记为 Object;why 存放在被导入实体的 exports/ 反向索引中;外部依赖仅记录,不深入 node_modules 等。UID 格式为 obj-<8位十六进制> 与 func-<8位十六进制>,源码中可用 @dsp <uid> 注释标记。
使用方式:脚本位于技能目录下 scripts/dsp-cli.py,通过 python <skill-path>/scripts/dsp-cli.py [--root <project-root>] <command> [args] 调用,--root 默认为当前工作目录,参数路径为仓库相对路径。常用命令包括 dsp-cli init、create-object、create-function、create-shared、add-import、remove-import、remove-shared、remove-entity、move-entity、update-description、get-entity、get-children、get-parents、search、find-by-source、read-toc、get-stats,以及诊断命令 detect-cycles、get-orphans。
适用场景:在 DSP 跟踪的项目中修改代码前,先通过 search、find-by-source 或 read-toc 定位受影响实体并阅读其描述与导入;新建文件或模块时创建对象、函数并登记导出;新增导入时附带简短 why;删除或移动代码时调用对应命令,级联清理自动完成;若 .dsp/ 为空,可从根入口点按导入做 DFS 引导。仅内部实现变化且不影响目的或依赖时无需更新 DSP。
限制:资料未提供收费、价格、平台支持范围等信息;外部依赖不深入分析;需人工维护实体描述与 why 的准确性。