# ikanban

> iKanban 是 DeepSeek Harness 的键盘优先 Web 工作台，把多代理会话、Git 差异、项目级 MCP 加载统一在一个浏览器界面里。

## Metadata

- Author: [@isomoes](https://github.com/isomoes)
- Repo: <https://github.com/isomoes/ikanban.git>
- GitHub: [isomoes/ikanban](https://github.com/isomoes/ikanban)
- Stars: 12
- Language: TypeScript
- License: [MIT](https://spdx.org/licenses/MIT.html)
- Homepage: <https://www.npmjs.com/package/@isomoes/dsh-ikanban>
- Topics: `ai-agents`, `dsh`, `dsh-plugin`, `ikanban`, `multi-agent`
- Forks: 2
- Open Issues: 1
- Last push: 2026-08-21T08:54:47.000Z
- Added: 2026-08-17T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:isomoes/ikanban
```

## Wiki

## 一句话定位
iKanban 是 DeepSeek Harness 的 Web 组合包插件，把多代理会话、Git 差异审查、项目级 MCP 服务器加载等能力整合在一个键盘优先的浏览器界面里，让你在浏览器中即可驱动、审阅和协调跨项目的并行代理工作。

## 核心能力
- 在浏览器中管理多代理会话：创建、搜索、重命名、fork、归档会话，并在流式中查看用户消息、智能体回复与工具调用节点
- 内置 iKanban 代理预设：在 Built-in 分组中预置一个覆盖 persona、文件/grep、skill、todo、计划模式、压缩、子代理与 workflow 的完整代理组合
- 项目级 MCP 加载：读取会话工作目录下的 `.mcp.json`，按需启用 stdio 或 Streamable HTTP 类型的 MCP 服务器
- 集成 Git 工作区视图：浏览工作区文件、搜索、按路径 fuzzy 跳转，并查看当前仓库相对 HEAD 的 diff（含未跟踪文件补丁）
- 键盘优先的命令面板与快捷键：`Mod+P` 打开命令面板，`Ctrl+N` 新建会话，`Mod+L` 折叠侧栏，`Mod+,` 打开设置，并可在设置中自定义按键绑定
- 内置 iKanban 品牌、主题与中英文界面，提示输入支持 `/` 命令与 `@` 文件/会话引用

## 技术实现
- **语言**: TypeScript（TS/TSX/CSS），发布包通过 tsdown + Vite 构建
- **关键依赖**: `@deepseek-ai/cordis`、`@deepseek-ai/cordis-plugin-loader`、`@deepseek-ai/dsh-host-webserver`、`@deepseek-ai/dsh-host-frontend-static`、`commander`
- **架构模式**: DSH Cordis 组合包层；通过 `package.json#dsh.bundle.patch` 指向 `cordis.patch.yml`，整行替换上游 web-app 的 web-startup/web-runtime/目录选择器/全部浏览器客户端条目，再叠加自有 `ikanban-preset` 把 iKanban 写入 Built-in 预设根目录
- **入口文件**: `packages/ikanban/src/index.ts`（Web 运行时入口）、`packages/ikanban/src/startup.ts`（命令行入口）、`packages/ikanban/cordis.patch.yml`（Cordis 组合 patch）

## 适用场景
当你在多个代码项目之间需要同时驱动多个代理完成任务、审阅 Git 改动、在会话之间切换 workspace 并希望保留键盘流时，iKanban 提供了一个统一的浏览器工作台。它适合重度依赖键盘、不希望在不同 CLI/编辑器/Git 客户端之间来回切换的开发者，也适合需要为每个项目自动加载特定 MCP 服务器（如项目专属知识库或工具）的团队。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DeepSeek Harness CLI | `0.1.0-rc.8+` | 所有 `@deepseek-ai/dsh-*` 依赖固定为 `^0.1.0-rc.8`，需先 `npm install -g @deepseek-ai/dsh` |
| Node.js | `^22.19.0 || >=24.0.0` | 根 `package.json` 与 `packages/ikanban/package.json` 均声明此 engines 范围 |
| pnpm | `11.7.0` | 仓库 `package.json` 锁定 `packageManager: pnpm@11.7.0`，构建/类型检查需该版本 |
| 平台 | macOS / Windows / Linux | 目录选择器强制走浏览器实现，无需原生 addon；Linux 上 --host 0.0.0.0 仍被拒绝 |
| 原生模块 | 无 | `koffi` 等原生 addon 不会进入默认组合 |

## 安装方式
```bash
dsh plugin --profile web add github:isomoes/ikanban
```

## 配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| `printUrl` | 布尔 | 启动后是否在控制台打印本地访问 URL（包含 LAN 候选地址） | `true` |
| `surfaceContext` | 布尔 | 是否向代理注入 Web 界面上下文提示和 `DSH_WEB_URL` shell 变量 | `true` |
| `trustedHosts` | 字符串数组 | 浏览器信任网关额外接受的主机（host 或 host:port），需要和 `--trusted-host` 配合 | `[]` |
| `--host` | 命令行 | 绑定的主机；`0.0.0.0` 会被 `startup.ts` 主动拒绝 | `127.0.0.1` |
| `--port` | 命令行 | 监听端口；传 `0` 让系统分配空闲端口 | `3080` |
| `--trusted-host` | 命令行（可重复） | 追加到可信主机列表，每个值可以是 host 或 host:port | — |
| `failOnStartupError`（project-mcp 行） | 布尔 | MCP 服务器启动失败时是否中断代理初始化 | `false` |

## 常见问题
**Q: iKanban 和官方 dsh-web-app 是什么关系？**

A: iKanban 复用已发布的 DSH `0.1.0-rc.8` 后端能力，但通过 `cordis.patch.yml` 整行替换 web-startup、web-runtime、目录选择器和 30 多个浏览器客户端条目，并在私有 workspace `packages/web-ui` 中维护可编辑 fork。安装包只有 `@isomoes/dsh-ikanban`，不必单独安装 dsh-web-app。

**Q: 是否必须通过 DSH profile 启动？**

A: 是的。iKanban 不是可独立打开的静态站点；启动时必须由 DSH 注入浏览器 boot 配置（`window.__DSH_BOOT__`）。`apps/web` 的 Vite 入口并不构成独立应用，自己启一个 dev server 也无法访问到正确的 GUI。

**Q: 默认监听哪些端口？能在局域网共享吗？**

A: 默认监听 `127.0.0.1:3080`。`startup.ts` 会主动拒绝 `--host 0.0.0.0`（注释为 "intentionally not supported yet for safety"）。如需局域网访问，必须显式传 `--host` 并用重复的 `--trusted-host` 把对应主机加入可信列表。

**Q: 是否需要安装原生的 koffi 之类的目录选择 addon？**

A: 不需要。`directory-picker-auto.ts` 把后端强制解析为 `browse`，即浏览器版目录选择器；原生版本会被构建但不会进入默认运行组合，因此消费者 profile 不必批准任何原生安装脚本。

**Q: iKanban 默认代理包含哪些能力？**

A: `packages/ikanban/preset/ikanban/agent.cordis.yml` 内置 iKanban 预设，包含 persona、文件读写、grep、skill、todo、用户提问、Web、计划模式、压缩、子代理（含 spawn/fork/codex/claude-code 后端）、workflow、ralph 循环，并额外挂载 `project-mcp` 行读取会话工作目录下的 `.mcp.json`。

**Q: 怎么卸载？**

A: 从普通 profile 卸载直接用 `dsh plugin --profile ikanban remove @isomoes/dsh-ikanban`；开发模式下的 `ikanban-dev` profile 用仓库根的 `pnpm dev:remove`，其内部等价命令是 `dsh plugin --profile ikanban-dev remove @isomoes/dsh-ikanban`。

**Q: 升级最新版本报 "Already up to date" 怎么办？**

A: README 给出的显式升级命令会带 `--config.minimumReleaseAge=0`，绕过 pnpm 默认的 24 小时新版本等待期；未带这个开关时，刚发布的版本可能被错误地报告为已最新。

## 上手难度
进阶 — 用户应已了解 DSH profile 概念与命令行参数传递；插件本身无需业务配置，但要理解 web-startup/web-runtime/cordis patch 的角色后才能定制 host/policy。

## 已知问题与限制
- 共享 HMR 暂未启用：`cordis.patch.yml` 第 32 行将 `hmr` 行标为 `disabled: true`，注释为 "TODO: Re-enable shared HMR for Web after its reload lifecycle is tested"，开发模式下仅客户端插件重载链生效
- 不支持 `--host 0.0.0.0`：`startup.ts` 显式拒绝该值，需要 LAN 访问时必须用 `--host` + 多个 `--trusted-host` 显式声明可信主机
- Web shell 不能独立打开：`apps/web` 的 Vite 入口仅作为 shell 构建产物存在，必须依赖 `dsh web` 注入 `window.__DSH_BOOT__`
- 浏览器版 Tooltip 是占位实现：`packages/web-ui/src/client/ui-primitives/Tooltip.tsx` 头部注释标注 "interaction is a placeholder"，缺少箭头等细节，后续会有专门改造
- 浏览器目录选择器缺分隔符协议：`packages/web-ui/src/client/ui-directory-picker-browse/client/DirectoryBrowser.tsx` 第 116 行标注 "TODO: replace with a host-stamped `separator` field on the wire"
- `--port` 解析存在简化：`startup.ts` 仅用正则 `/^\d+$/` 校验字符串为数字，未做端口范围或权限校验

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [ikanban](https://deepseek-plugin.org/plugins/isomoes/ikanban)
Wiki generated by AI (model: `MiniMax-M3`)
