dsh/ —— 堪舆 GIS × DeepSeek Harness 组件
本目录是堪舆(Kanyu)GIS 能力在 DeepSeek Harness(DSH / Cordis)侧的组件源, 即「GIS 模式」的仓库内单一事实来源。组件运行手册见
docs/GIS_MODE.md。
组成
| 路径 | 职责 |
|---|---|
plugin/host.js | 组件 Host 半(宿主进程侧):以 kanyu CLI 为执行后端,暴露 Package 私有 JSON RPC(harness.handle),并向 DSH 模型注册 8 个 kanyu_* 动态工具(harness.registerTool)——堪舆原壳层 LocalDriver/OpenAiDriver 意图面在 Harness function-calling 代理循环中的整合形态 |
plugin/client.js | 组件 Client 半(浏览器侧,动态包形态):DSH Web GUI「堪舆 GIS 工作台」,会话头部按钮 + 全局浮层七页签(目录/数据/地图/坐标/处理/编辑/3D/关于)+ cordis 卡片,全部经 host.call 走 Host 半 |
pkg/ | 常驻静态插件(双面包):index.js Host 适配器(包装 host.js 单一事实源 + webServer 前缀路由 /kanyu-gis/call RPC 桥)+ client.js 静态客户端 bundle(dsh.client 约定,手写工厂格式;工作台面板随 kanyu-gis preset 联动显示——读会话快照 agentPreset 字段门控)+ package.json(exports 含 ./client 与 ./package.json、dsh.client 声明) |
presets/kanyu-gis/ | GIS 模式 agent preset:preset.yml(发现元数据)+ agent.cordis.yml(代理平面组合:persona/工具面/plan-mode/compaction/delegation 组 + skill-filesystem 技能注入,形态与 local-hybrid 同方言)+ skills/kanyu-gis/SKILL.md(七域能力地图技能) |
examples/ | 组件演示数据(GeoJSON 小样例) |
tools/verify_preset.mjs | preset 可加载性旁路校验(与 DSH 发现库同判定链 + 插件包存在性对照宿主检出 + 自带技能 SKILL.md frontmatter 校验);用法:node dsh/tools/verify_preset.mjs --preset-dir dsh/presets |
sync-preset.sh | 把仓库内 preset 源同步到本机 DSH 安装区(~/.dsh/.agent-presets/kanyu-gis/)并触发校验 |
sync-local.sh | 一键本地同步(每次更新后必跑):preset 回灌 + 校验 + web profile 静态插件重装(pnpm file: 副本刷新);运行中的 dsh web 实例须重启方生效(组合树/boot 图启动时一次成型,不热加载) |
双半差异白名单(第四十二轮盘点)
动态半(plugin/client.js)与静态半(pkg/client.js)能力面实测一致:RPC
方法集 19 = 19 零独有(测试器对称锁)、页签 8/8 相同。仅存四处设计意图
差异,改动任一半时不需对齐:
| 差异 | 动态半 | 静态半 | 原因 |
|---|---|---|---|
| cordis 卡片 | 有(tool.view.cordis) | 无 | key:'self' 改写只发生在动态 guard |
| preset 门控 | 无(装载机制天然门控) | 有(agentPreset 快照判定) | 静态包常驻 web profile,须自行判定会话 preset |
| 样式注入 | styles.insert(沙箱服务) | styleEl.textContent 内联 | 静态 bundle 无 styles 服务注入 |
| slot 注册 | 3 处(header/overlay/cordis) | 2 处(header/overlay) | 同上 cordis 行 |
除白名单外的差异即漂移,测试器「两半 RPC 面对称一致」断言会拦截。
七大能力域 → kanyu 内核落点
| 能力 | 组件工具 | kanyu 侧对应物 |
|---|---|---|
| 地图面板 | kanyu_render | kanyu render map(晨山/夜观星,PNG/SVG)+ 符号化控件(graduated/categorical 直通 --style)+ 联动重渲染(store.rev 内容版本号,编辑/撤销后已渲染视图自动跟随)+ 布局排版(layout 分支走 kanyu render layout:A4 页面 + 标题/图例/比例尺/指北针) |
| GIS 数据目录读取 | kanyu_catalog / kanyu_data | 六分类工程目录(ArcGIS Pro 范式:文件夹连接=扫描根 / 数据库=.kdb/.kyu/.gdb(.gdb 目录整登记不深入,读取走 GDAL 守卫明确报错) / 矢量数据=vecGroups 按格式分组可折叠(Shapefile/GeoJSON/GeoPackage…) / 服务链接=WFS+WMS / 地图框=渲染产物(条目点击 → catalog.readImage 读盘 PNG 内嵌预览,越界防护仅限 dsh/output) / 布局框=.kyu layouts(条目带 kyu 工程路径,点击 → render.layout 排版 SVG 内嵌预览))+ kanyu data info(含 extent 范围摘要)/query/validate + 字段计算器(data calc/kanyu_data action=calc:attrcalc 内核表达式求值写入目标字段,落盘确认回执)+ data.preview 属性表(纯 fs)+ 查询联动(过滤落盘 dsh/output + 命中 N/M 计数 + 设为当前图层 + 结果集自动载入属性表;模型侧 query+output 同语义回执)+ 服务链接分支(discover 附拉取指引 / fetch 附接力提示 / wms 附 bbox 宽高直通+urlOnly,xml/data 离线直通)+ 格式注册表 |
| 坐标框架 | kanyu_crs | kanyu crs search/info(EPSG 全库 7507 条检索/检视)+ kanyu data reproject(投影变换落盘 dsh/output + 设为当前图层联动;模型侧 reproject+output 计数回执) |
| 工程目录 | Client 目录页签 | catalog.list RPC(扩展名矩阵对齐 format.rs)+ freshness 自动重扫(清单外新当前图层触发) |
| 地理处理 | kanyu_geoprocess | kanyu analysis <13 工具>(QGIS 语义,精选白名单)+ kanyu tool list/run(tooldef 37 工具注册表全库,与壳层工具箱/MCP 同一事实来源);双端处理页签 ToolboxPanel 全库表单(五分类分组 + ParamKind 动态表单 + 产图层工具缺省落盘 dsh/output 并设为当前图层联动);模型侧双分支产出回执(stderr 写出清单) |
| 地理编辑 | kanyu_edit | 组件内 GeoJSON 编辑内核(6 算子 + 命令逆操作双栈 undo/redo,对齐 kanyu-edit 范式;回执附撤销/重做栈深度)+ 属性单元格编辑(点选行写入)+ 字段计算器 ƒx 区(data.calc RPC → kanyu data calc,前 5 行预览 + 应用落盘联动)+ 顶点编辑画布(拖拽写 vertex-move)+ 联动刷新(应用/撤销/重做后属性表作废 + 画布重载 + 产出路径广播);深度拓扑编辑由 kanyu-edit crate 承接 |
| 3D 地理 | kanyu_scene3d | 挤出体场景数据制备(高度字段拉伸 + colorField 分类着色 ≤12 类 + heightRange 高度范围摘要;回执附工作台 3D 页签接力指引)+ Client canvas 软件 3D 管线(对齐 scene3d.rs:yaw/pitch 拖拽旋转/背面剔除/质心纵深排序/两档明暗/类别色+图例)+ 联动重载(store.rev 跟随,编辑/图层切换后已加载场景自动重载) |
另注册 kanyu_introspect(系统自省,对齐 kanyu introspect --json)。
安装与同步
两条安装路线(互补,可并存):
| 路线 | 机制 | 生命周期 |
|---|---|---|
| 动态包(Web 工作台 + 8 工具) | 会话内 cordis_define(host.js + client.js)→ cordis_run | 进程内存态,重启不恢复(宿主设计如此) |
| 常驻静态插件(9 工具 + GIS 工作台面板) | dsh/pkg/ 双面包适配器包装 host.js 单一事实源,经 dsh plugin --profile web add file:<仓库>/dsh/pkg + profile cordis.patch.yml insert 行安装 | 常驻,随 DSH 启动自动激活(启动日志「9 个 kanyu_* 工具注册进工具注册表」+ boot 图含 kanyu-gis-dsh-plugin 客户端条目,切到 kanyu-gis preset 会话即见「🧭 堪舆GIS」头部按钮) |
# 每次 dsh/ 更新完成后,一键本地同步(preset 回灌 + 插件重装):
bash dsh/sync-local.sh
# 运行中的 dsh web 实例须重启,组合树/客户端 boot 图刷新生效
# 或分步:仓库 → 本机 DSH 安装区(preset 同步 + 校验)
bash dsh/sync-preset.sh
# 常驻静态插件安装(一次性;更新 host.js/pkg 后需重装以刷新 profile 副本):
dsh plugin --profile web remove kanyu-gis-dsh-plugin
dsh plugin --profile web add "file:<仓库绝对路径>/dsh/pkg"
# cordis.patch.yml 需含 insert 行(含 config.hostSource 指向 host.js 绝对路径),
# 见 dsh/pkg/index.js 头部注释与 docs/GIS_MODE.md §3
组件工具全部经 PATH 上的 kanyu CLI 执行,不依赖宿主 node_modules;
找不到 kanyu.exe 时以 kanyu-mcp(MCP stdio 入口)兜底。
本地测试
# 组件测试器:node:vm 等价沙箱加载 plugin/host.js,真实 kanyu CLI 后端,
# 逐项实证七大能力 + 8 动态工具 + Client 半结构 + pkg 双面包契约(35 项断言)
node dsh/tools/test_plugin.mjs # 退出码 0 = 全绿
# preset 可加载性旁路校验(与 DSH 发现库同判定链)
node dsh/tools/verify_preset.mjs --preset-dir dsh/presets
# DSH 无头会话冒烟(真实模型链路 × kanyu CLI;需本机 DSH 检出)
dsh --profile headless "执行 kanyu agents validate --code-repo 并引用其输出"
边界(2026-08-18 实测记录):headless profile 不含 agent-presets roster 与 cordis
动态包 runner(--dump-config 实证),故 preset 挂载与组件动态包(cordis_define/
cordis_run)只能在 web profile(GUI 会话)进行;headless 可用于「DSH 会话 ×
kanyu CLI」链路冒烟。Windows 上经 cmd.exe 传含中文的绝对路径会被代码页截断——
组件宿主 shell 为 pwsh(无此问题),本地测试器统一走 Git Bash。
自我迭代边界
组件的迭代发生在 Git 协作层(提交/PR + CI),运行时绝不自改内核——
对齐 AI_SYNC.md §1.3。改本目录任何文件后:
开工登记 → 验证(verify_preset.mjs + kanyu agents validate --code-repo)→ 收工回记。
