选定位置生成周边商业报告并支持追问
29.4/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add hancao97/pumai-dsh该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 58 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/4) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 76 处,展示前 61 条)
- 读取本地文件packages/agent-tools/src/index.ts:258
const stat = lstatSync(requested) - 读取本地文件packages/agent-tools/src/index.ts:264
const snapshotStat = lstatSync(snapshots) - 读取本地文件packages/agent-tools/src/index.ts:275
const stat = lstatSync(target) - 读取本地文件packages/agent-tools/src/index.ts:281
return readFileSync(realFile) - 读取本地文件packages/domain/src/analysis.ts:124
if (existsSync(target)) throw new Error(`周边结果缓存已存在:${resultId}`) - 读取本地文件packages/domain/src/analysis.ts:131
if (!existsSync(target)) return null - 读取本地文件packages/domain/src/analysis.ts:172
if (existsSync(targetPaths.analysisDir)) { - 写入本地文件packages/domain/src/analysis.ts:232
renameSync(stageDir, targetPaths.analysisDir) - 写入本地文件packages/domain/src/analysis.ts:233
chmodSync(targetPaths.analysisDir, 0o700) - 读取本地文件packages/domain/src/analysis.ts:236
if (existsSync(stageDir)) rmSync(stageDir, { recursive: true, force: true }) - 删除本地文件递归packages/domain/src/analysis.ts:236
if (existsSync(stageDir)) rmSync(stageDir, { recursive: true, force: true }) - 读取本地文件packages/domain/src/analysis.ts:639
if (existsSync(path)) { - 读取本地文件packages/domain/src/analysis.ts:640
const stat = lstatSync(path) - 写入本地文件packages/domain/src/analysis.ts:642
chmodSync(path, 0o700) - 写入本地文件packages/domain/src/analysis.ts:645
mkdirSync(path, { recursive: false, mode: 0o700 }) - 写入本地文件packages/domain/src/analysis.ts:646
chmodSync(path, 0o700) - 写入本地文件packages/domain/src/analysis.ts:652
writeFileSync(descriptor, content) - 删除本地文件packages/domain/src/analysis.ts:667
if (existsSync(temporary)) rmSync(temporary, { force: true }) - 写入本地文件packages/domain/src/database.ts:249
chmodSync(path, 0o600) - 读取本地文件packages/domain/src/database.ts:717
if (!existsSync(path)) { - 写入本地文件packages/domain/src/database.ts:722
chmodSync(path, 0o600) - 写入本地文件packages/domain/src/database.ts:728
chmodSync(file, 0o600) - 读取本地文件packages/domain/src/database.ts:752
const stat = lstatSync(path) - 写入本地文件packages/domain/src/paths.ts:109
mkdirSync(directory, { recursive: false, mode: 0o700 }) - 写入本地文件packages/domain/src/paths.ts:221
mkdirSync(paths.root, { recursive: false, mode: 0o700 }) - 读取本地文件packages/domain/src/paths.ts:232
const entries = readdirSync(paths.root) - 读取本地文件packages/domain/src/paths.ts:253
const content = readFileSync(sentinel, 'utf8') - 写入本地文件packages/domain/src/paths.ts:267
writeFileSync(descriptor, SENTINEL_CONTENT, 'utf8') - 读取本地文件packages/domain/src/paths.ts:275
for (const name of readdirSync(paths.root)) { - 读取本地文件packages/domain/src/paths.ts:298
for (const name of readdirSync(paths.databaseDir)) { - 读取本地文件packages/domain/src/paths.ts:309
for (const name of readdirSync(paths.cacheDir)) { - 读取本地文件packages/domain/src/paths.ts:348
const stat = lstatSync(path) - 写入本地文件packages/domain/src/paths.ts:362
chmodSync(path, 0o700) - 写入本地文件packages/domain/src/paths.ts:368
chmodSync(path, 0o600) - 写入本地文件packages/domain/src/paths.ts:373
chmodSync(path, 0o700) - 读取本地文件packages/domain/src/reports.ts:99
if (existsSync(destination)) { - 删除本地文件递归packages/domain/src/reports.ts:106
rmSync(stage, { recursive: true, force: true }) - 写入本地文件packages/domain/src/reports.ts:108
renameSync(stage, destination) - 写入本地文件packages/domain/src/reports.ts:109
chmodSync(destination, 0o700) - 读取本地文件packages/domain/src/reports.ts:112
if (existsSync(stage)) rmSync(stage, { recursive: true, force: true }) - 删除本地文件递归packages/domain/src/reports.ts:112
if (existsSync(stage)) rmSync(stage, { recursive: true, force: true }) - 读取本地文件packages/domain/src/reports.ts:167
if (!existsSync(workspace.reportsDir)) return [] - 读取本地文件packages/domain/src/reports.ts:170
for (const entry of readdirSync(workspace.reportsDir)) { - 写入本地文件packages/domain/src/reports.ts:231
mkdirSync(path, { recursive: false, mode: 0o700 }) - 写入本地文件packages/domain/src/reports.ts:232
chmodSync(path, 0o700) - 写入本地文件packages/domain/src/reports.ts:238
writeFileSync(descriptor, content) - 写入本地文件packages/domain/src/reports.ts:242
chmodSync(path, 0o600) - 读取本地文件packages/domain/src/reports.ts:246
const stat = lstatSync(path) - 读取本地文件packages/domain/src/reports.ts:248
return readFileSync(path, 'utf8') - 读取本地文件packages/host/src/nearby-cache.ts:54
for (const entry of readdirSync(this.paths.nearbyCacheDir)) { - 读取本地文件packages/host/src/nearby-cache.ts:76
for (const entry of readdirSync(this.paths.nearbyCacheDir)) { - 读取本地文件packages/host/src/nearby-cache.ts:105
const stat = lstatSync(target) - 删除本地文件packages/host/src/nearby-cache.ts:107
unlinkSync(target) - 读取本地文件packages/host/src/service.ts:1345
if (existsSync(workspace.workspaceReportPath)) { - 读取本地文件packages/host/src/service.ts:1346
const stat = lstatSync(workspace.workspaceReportPath) - 写入本地文件packages/host/src/service.ts:1355
writeFileSync(descriptor, publishableContent) - 写入本地文件packages/host/src/service.ts:1360
chmodSync(temporary, 0o600) - 写入本地文件packages/host/src/service.ts:1361
renameSync(temporary, workspace.workspaceReportPath) - 写入本地文件packages/host/src/service.ts:1362
chmodSync(workspace.workspaceReportPath, 0o600) - 读取本地文件packages/host/src/service.ts:1364
if (existsSync(temporary)) rmSync(temporary, { force: true }) - 删除本地文件packages/host/src/service.ts:1364
if (existsSync(temporary)) rmSync(temporary, { force: true })
扫描于 2026/11/2(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-credentials@deepseek-ai/dsh-host-apiproxy@deepseek-ai/dsh-session@deepseek-ai/dsh-tools@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 生成周边商业报告
- 支持追问
README
由 DeepSeek 最新模型翻译生成铺脉 · Pumai
基于高德地图的商业区位分析工作台
=24">
使用体验 ·快速开始 ·数据与报告 ·参与开发
看懂一公里,再决定开什么。铺脉品牌插画
从地图上的一个位置开始,铺脉整理周边的商业与生活配套,生成中文商业分析报告,并让你围绕同一份资料继续追问。适合开店前了解周边、初步比较商圈,以及整理现场考察的方向。
项目、数据快照和报告保存在本地;地图服务来自高德,AI 分析由你在 DeepSeek Harness(DSH)中配置的模型完成。
使用体验
| 步骤 | 你可以做什么 |
| 01 · 选一个位置 | 搜索地址、小区、商场或地铁站,也可以直接在地图上选点;确认 500 米、1 公里或 2 公里的分析范围。 |
| 02 · 看周边结构 | 查看九类地点的分布、数量、距离和详情,了解周边供给,并查看接口返回不完整的提示。 |
| 03 · 读商业报告 | 创建分析项目,生成包含区位特征、供给结构、机会、风险与考察建议的报告。 |
| 04 · 接着聊下去 | 沿用项目资料继续追问,例如“餐饮竞争集中在哪里?”“实地走访应优先看什么?
展开完整文档(README 剩余 1 节)
铺脉 · Pumai 基于高德地图的商业区位分析工作台 =24"> 使用体验 ·快速开始 ·数据与报告 ·参与开发 看懂一公里,再决定开什么。铺脉品牌插画 从地图上的一个位置开始,铺脉整理周边的商业与生活配套,生成中文商业分析报告,并让你围绕同一份资料继续追问。适合开店前了解周边、初步比较商圈,以及整理现场考察的方向。 项目、数据快照和报告保存在本地;地图服务来自高德,AI 分析由你在 DeepSeek Harness(DSH)中配置的模型完成。 使用体验 | 步骤 | 你可以做什么 | | 01 · 选一个位置 | 搜索地址、小区、商场或地铁站,也可以直接在地图上选点;确认 500 米、1 公里或 2 公里的分析范围。 | | 02 · 看周边结构 | 查看九类地点的分布、数量、距离和详情,了解周边供给,并查看接口返回不完整的提示。 | | 03 · 读商业报告 | 创建分析项目,生成包含区位特征、供给结构、机会、风险与考察建议的报告。 | | 04 · 接着聊下去 | 沿用项目资料继续追问,例如“餐饮竞争集中在哪里?”“实地走访应优先看什么?” | 地图与周边数据 餐饮 · 购物 · 生活服务 · 商务住宅 · 交通设施 · 学校 · 公园 · 医疗健康 · 体育休闲 铺脉地图与九类周边数据界面示意 报告与持续对话 每个项目都有「位置档案」「结构化周边数据」「商业分析报告」「继续对话」四个视图。 报告支持目录导航、字号调节、专注模式、阅读进度和 Markdown 导出;对话保留上下文,方便继续讨论。 铺脉商业分析报告界面示意 以上为演示示意图,使用合成数据说明产品布局;实际界面与地点数量以运行版本和查询结果为准。 快速开始 需要 Node.js ^22.19.0 或 >=24.0.0、pnpm 11.7.0,以及 DSH 0.1.1-rc.2。当前安装器会检查 DSH 版本,请使用这里列出的版本。 1. 安装并启动 如果尚未安装 pnpm 和 DSH: npm install -g pnpm@11.7.0 @deepseek-ai/dsh@0.1.1-rc.2 获取源码、构建并安装铺脉专用 Profile: git clone https://github.com/hancao97/pumai-dsh.git cd pumai-dsh pnpm install --frozen-lockfile pnpm run build pnpm run profile:install -- --package . pnpm run profile:verify dsh --profile pumai --host 127.0.0.1 --port 3080 打开 本地工作台。铺脉安装在独立的 pumai Profile 中,官方通用界面仍可通过 dsh web 启动。 2. 配置高德地图 在高德开放平台准备以下三项,按首次启动时的配置向导填写: | 配置 | 用途 | | Web 服务 Key | 服务端查询地点、周边与地址信息 | | Web 端(JS API)Key | 页面加载高德地图 | | securityJsCode | 与 JS API Key 配套的安全密钥 | 三项配置齐全后即可使用地图与周边查询,保存后无需重启进程。 3. 配置模型,生成第一份报告 在 DSH 的模型设置中配置一个可用模型。回到地图选点、确认范围并查询周边,再点击 「生成 AI 商业分析」。完成后进入项目阅读报告,或切换到「继续对话」。 地图与周边查询可以独立使用;生成报告和继续对话需要可用的模型服务。 通过环境变量配置高德 也可以在启动前设置以下环境变量。它们优先于页面保存的配置,向导不会修改环境变量。 export PUMAI_AMAP_WEB_SERVICE_KEY='your-web-service-key' export PUMAI_AMAP_JS_KEY='your-js-api-key' export PUMAI_AMAP_SECURITY_JS_CODE='your-security-js-code' dsh --profile pumai --host 127.0.0.1 --port 3080 数据与报告 flowchart LR A[地图选点] --> B[高德周边查询] B --> C[整理统计并保存快照] C --> D[AI 读取项目资料] D --> E[生成并保存报告] E --> F[沿用资料继续对话] - 数量来自程序统计。 对本次返回的地点按 POI ID 去重,再按分类编码和距离整理。查询分类可能重叠,分类数量之和不一定等于去重后的总数。 - 报告使用固定资料。 创建项目时保存当前查询结果、位置档案和范围几何;智能体通过只读工具分页读取这些资料,后续讨论沿用同一份快照。 - 查询有明确边界。 本项目每类最多读取 8 页、每页 25 条。达到窗口上限、超时或字段缺失会被记录,已收录的地点数量也不等于现实中的全部门店。 - 减少重复调用。 完整的周边查询结果可缓存 30 分钟;相同的在途请求会合并,高德服务端请求按凭据限速。月度请求上限可在页面配置,这些是本地保护设置。 - 报告原文留存。 完成后保存报告原文、使用的模型和内容哈希,普通追问不会覆盖已封存报告。文件一致性检查不代表 AI 的商业判断已经得到现实验证。 当前资料能说明周边有什么、分布如何。 实际客流、进店人数、租金和经营收益需要另行调查;地图上的直线距离也不能直接当作步行距离。报告中的机会与风险属于分析判断,需结合具体铺位和现场情况理解。 本地存储与网络 | 内容 | 存放或传输位置 | | 项目快照、报告、业务索引与请求用量 | 默认保存在本机 ~/.pumai-dsh | | 对话消息与工具活动 | 由本机 DSH Session 持久化 | | 地点搜索、坐标与地图请求 | 发送给高德地图服务 | | 分析所需的项目资料与用户问题 | 发送给你配置的模型服务 | 数据目录与凭据管理 业务数据根按以下优先级解析:Host dataRoot 配置 → PUMAI_DSH_HOME 环境变量 → ~/.pumai-dsh。 ~/.pumai-dsh/ ├── .credentials.yaml # 由 DSH 管理的凭据 ├── db/pumai.sqlite # 业务索引、状态与请求用量 ├── cache/nearby/ # 有时限的查询结果缓存 ├── analyses/<project-id>/ │ ├── manifest.json # 文件清单与哈希 │ ├── snapshots/ # 位置、周边地点与范围几何 │ ├── workspace/ # 项目会话工作区 │ └── reports/0001/ # 报告原文与元数据 ├── exports/ └── tmp/ cache/nearby 只短期保存规范化查询结果,正式分析资料保存在项目快照中。 SQLite 通过 opaque dshSessionId 关联项目与 DSH 会话;消息和工具活动由 DSH 保存,不会复制进业务数据库。 高德和模型凭据由 DSH Credentials provider 管理,默认写入 ~/.pumai-dsh/.credentials.yaml,文件权限为 0600;不会写入 SQLite、项目快照或报告。高德 Web 服务 Key 只在服务端使用, JS API Key 与安全密钥在初始化地图时进入页面内存。 使用 PUMAI_DSH_HOME 可以同时移动业务数据和受管凭据文件。Host dataRoot 配置只改变业务数据位置;如需单独调整凭据路径,可在 Profile patch 中设置 credentials.path。 其它 DSH Profile 继续使用各自的凭据位置。 开发 项目使用 TypeScript + React + DSH。铺脉提供地图、数据与报告工作台,DSH 提供模型、智能体和会话运行时。 | 命令 | 用途 | | pnpm run dev | 监听源码并构建 | | pnpm run build | 构建 Host、Web Client、智能体工具与安装脚本 | | pnpm run typecheck | TypeScript 类型检查 | | pnpm test | 运行测试 | | pnpm run pack:check | 检查实际 npm 打包内容与发布约束 | | pnpm run check | 执行类型检查、构建、测试和打包检查 | | pnpm run profile:verify | 检查已安装的铺脉 Profile | 代码结构 packages/ ├── client-workbench/ # 地图、分析项目与报告阅读器 ├── client-chat/ # 基于 DSH Session 的对话界面 ├── host/ # 高德请求、缓存、项目与报告服务 ├── agent-tools/ # 项目资料只读工具 ├── domain/ # 数据模型、统计与存储 └── contracts/ # 前后端共享协议 assets/agent-presets/ # 铺脉分析 Agent 配置 scripts/ # 构建、安装与发布校验 tests/ # 包与运行时契约测试 docs/ # 设计、研究与架构资料 产品设计 · 架构说明 · 对话组件 设计与研究文档包含规划内容,当前功能以本 README 和代码为准。 MIT License ·第三方说明 · Built with DeepSeek Harness
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
hancao97/pumai-dsh
选定位置生成周边商业报告并支持追问
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,173已汉化DeepSeek 客户端
74.4
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,308已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,897已汉化DSH
71.2
这是你的仓库?认领条目