🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

智能体任务看板 Asif2BD/JARVIS-Mission-Control-DeepSeek

DeepSeek Harness
Asif2BD76 天前有提交已提供中文文档扫描:含敏感能力

把智能体会话与工具调用实时汇入看板并人工审核

28.8/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Asif2BD/JARVIS-Mission-Control-DeepSeek
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 76 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包jarvis-mission-control(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=18.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/24 04:23:28

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 189 处,展示前 106 条)
  • 发起网络请求
    scripts/jarvis.js:95
    const req = transport.request(options, (res) => {
  • 读取本地文件
    scripts/jarvis.js:116
    if (!fs.existsSync(p)) throw new Error(`Task file not found: ${p}`);
  • 读取本地文件
    scripts/jarvis.js:117
    return JSON.parse(fs.readFileSync(p, 'utf-8'));
  • 写入本地文件
    scripts/jarvis.js:122
    fs.mkdirSync(path.dirname(p), { recursive: true });
  • 写入本地文件
    scripts/jarvis.js:123
    fs.writeFileSync(p, JSON.stringify(task, null, 2));
  • 读取本地文件
    scripts/jarvis.js:330
    if (!fs.existsSync(dir)) { console.log(dim('No tasks found.')); return; }
  • 读取本地文件
    scripts/jarvis.js:331
    tasks = fs.readdirSync(dir)
  • 读取本地文件
    scripts/jarvis.js:333
    .map(f => { try { return JSON.parse(fs.readFileSync(path.join(dir, f), 'utf-8')); } catch { return null; } })
  • 写入本地文件
    scripts/jarvis.js:388
    fs.mkdirSync(dir, { recursive: true });
  • 写入本地文件
    scripts/jarvis.js:389
    fs.writeFileSync(path.join(dir, `${body.id}.json`), JSON.stringify(body, null, 2));
  • 读取本地文件
    scripts/jarvis.js:408
    if (fs.existsSync(dir)) {
  • 发起网络请求
    cli/mc.js:56
    const req = client.request(options, (res) => {
  • 读取本地文件
    cli/mc.js:288
    if (!fs.existsSync(deliverable.path)) {
  • 发起网络请求
    dashboard/js/api.js:32
    const res = await fetch(`${this.baseUrl}/api/csrf-token`, { credentials: 'same-origin' });
  • 发起网络请求
    dashboard/js/api.js:65
    const response = await fetch(url, {
  • 发起网络请求
    dashboard/js/api.js:78
    const retryResponse = await fetch(url, { ...options, credentials: 'same-origin', headers });
  • 发起网络请求
    dashboard/js/api.js:100
    return this.request('/tasks');
  • 发起网络请求
    dashboard/js/api.js:104
    return this.request(`/tasks/${id}`);
  • 发起网络请求
    dashboard/js/api.js:108
    return this.request('/tasks', {
  • 发起网络请求
    dashboard/js/app.js:894
    await api.request(`/tasks/${taskId}/request-review`, {
  • 发起网络请求
    dashboard/js/app.js:912
    await api.request(`/tasks/${taskId}/approve-review`, {
  • 发起网络请求
    dashboard/js/app.js:932
    await api.request(`/tasks/${taskId}/reject-review`, {
  • 写入剪贴板
    dashboard/js/app.js:1091
    navigator.clipboard.writeText(json).then(() => {
  • 写入剪贴板
    dashboard/js/app.js:2378
    navigator.clipboard.writeText(currentViewerFile.content)
  • 发起网络请求
    dashboard/js/cli-connections.js:11
    const res = await fetch('/api/connect');
  • 发起网络请求
    dashboard/js/cli-connections.js:72
    const res = await fetch('/api/connect');
  • 发起网络请求
    dashboard/js/cli.js:27
    const res = await fetch(`${CLI_API}/api/cli/commands`);
  • 发起网络请求
    dashboard/js/cli.js:65
    const res = await fetch(`${CLI_API}/api/cli/run`, {
  • 发起网络请求
    dashboard/js/dashboard-widgets.js:49
    const res = await fetch('/api/connect');
  • 发起网络请求
    dashboard/js/dashboard-widgets.js:73
    const res = await fetch('/api/tasks');
  • 发起网络请求
    dashboard/js/dashboard-widgets.js:99
    const res = await fetch('/api/webhooks');
  • 发起网络请求
    dashboard/js/events-feed.js:50
    fetch('/api/events/stats'),
  • 发起网络请求
    dashboard/js/events-feed.js:51
    fetch('/api/costs')
  • 发起网络请求
    dashboard/js/events-feed.js:104
    const res = await fetch(`/api/events?${params}`);
  • 发起网络请求
    dashboard/js/github-issues.js:22
    const res = await fetch(`${GITHUB_API}/api/github/config`);
  • 发起网络请求
    dashboard/js/github-issues.js:45
    const res = await fetch(`${GITHUB_API}/api/github/config`, {
  • 发起网络请求
    dashboard/js/github-issues.js:68
    const res = await fetch(`${GITHUB_API}/api/github/issues`);
  • 发起网络请求
    dashboard/js/github-issues.js:112
    const res = await fetch(`${GITHUB_API}/api/github/sync`, {
  • 发起网络请求
    dashboard/js/smart-panels.js:316
    const resp = await fetch('/api/schedules', {
  • 发起网络请求
    dashboard/js/soul-files.js:29
    const res = await fetch(`${SOUL_API}/api/agents/list`);
  • 发起网络请求
    dashboard/js/soul-files.js:87
    const res = await fetch(`${SOUL_API}/api/agents/soul/${encodeURIComponent(agentId)}`);
  • 发起网络请求
    dashboard/js/soul-files.js:125
    const res = await fetch(`${SOUL_API}/api/agents/soul/${encodeURIComponent(agentId)}`, {
  • 发起网络请求
    dashboard/js/webhooks.js:87
    const res = await fetch(`/api/webhooks/${encodeURIComponent(webhookId)}/deliveries`);
  • 发起网络请求
    dashboard/js/webhooks.js:145
    const res = await fetch(`/api/webhooks/${encodeURIComponent(webhookId)}/retry`, {
  • 发起网络请求
    dashboard/js/webhooks.js:162
    await fetch(`/api/webhooks/${encodeURIComponent(id)}/reset-circuit`, { method: 'POST' });
  • 写入本地文件
    scripts/create-task.js:63
    await fs.mkdir(TASKS_DIR, { recursive: true });
  • 写入本地文件
    scripts/create-task.js:67
    await fs.writeFile(filePath, JSON.stringify(task, null, 2));
  • 读取本地文件
    server/index.js:274
    const files = await fs.readdir(fullPath);
  • 读取本地文件
    server/index.js:282
    const content = await fs.readFile(path.join(fullPath, file), 'utf-8');
  • 读取本地文件
    server/index.js:313
    const content = await fs.readFile(fullPath, 'utf-8');
  • 写入本地文件
    server/index.js:327
    await fs.mkdir(path.dirname(fullPath), { recursive: true });
  • 写入本地文件
    server/index.js:329
    await fs.writeFile(fullPath, JSON.stringify(data, null, 2));
  • 删除本地文件
    server/index.js:350
    await fs.unlink(fullPath);
  • 写入本地文件
    server/index.js:372
    await fs.mkdir(path.dirname(logPath), { recursive: true });
  • 写入本地文件
    server/index.js:373
    await fs.appendFile(logPath, logEntry);
  • 发起网络请求
    server/index.js:449
    const response = await fetch(webhook.url, {
  • 读取本地文件
    server/index.js:526
    const content = await fs.readFile(filePath, 'utf-8');
  • 读取本地文件
    server/index.js:624
    const entries = await fs.readdir(fullPath);
  • 读取本地文件
    server/index.js:629
    const stat = await fs.stat(entryPath);
  • 写入本地文件
    server/index.js:1299
    await fs.writeFile(statePath, req.body.content);
  • 发起网络请求
    server/index.js:2266
    const response = await fetch(
  • 执行外部命令来自配置/变量
    server/index.js:2373
    execFile(entry.cmd, entry.args, { timeout: 15000, maxBuffer: 1024 * 512 }, (err, stdout, stderr) => {
  • 发起网络请求
    server/index.js:2490
    const response = await fetch(url, { headers });
  • 发起网络请求
    server/index.js:2518
    const response = await fetch(url, { headers });
  • 写入本地文件
    server/index.js:2528
    await fs.mkdir(tasksDir, { recursive: true });
  • 读取密钥环境变量
    server/index.js:2601
    let token = process.env.GITHUB_TOKEN || '';
  • 发起网络请求
    server/index.js:2845
    const response = await fetch(registryUrl, {
  • 读取密钥环境变量
    server/index.js:2910
    if (!missionDeckSyncDisabled && !process.env.MISSIONDECK_API_KEY && require('fs').existsSync(missionDeckEnvFile)) {
  • 读取密钥环境变量
    server/index.js:2921
    if (!missionDeckSyncDisabled && process.env.MISSIONDECK_API_KEY) {
  • 读取密钥环境变量
    server/index.js:2925
    apiKey: process.env.MISSIONDECK_API_KEY,
  • 读取密钥环境变量
    server/index.js:2932
    apiKey: process.env.MISSIONDECK_API_KEY,
  • 读取密钥环境变量
    server/index.js:2947
    const mdLine = process.env.MISSIONDECK_API_KEY
  • 读取密钥环境变量
    server/middleware/basic-auth.js:23
    if (req.path.startsWith('/api/') && process.env.MC_AGENT_TOKEN) {
  • 读取密钥环境变量
    server/middleware/basic-auth.js:25
    if (bearer === `Bearer ${process.env.MC_AGENT_TOKEN}`) return next();
  • 读取密钥环境变量
    server/missiondeck-sync.js:41
    const key = apiKey || process.env.MISSIONDECK_API_KEY;
  • 读取本地文件
    server/missiondeck-sync.js:57
    if (fs.existsSync(agentsDir)) {
  • 读取本地文件
    server/missiondeck-sync.js:68
    if (!fs.existsSync(dir)) return;
  • 读取本地文件
    server/missiondeck-sync.js:111
    if (!fs.existsSync(dir)) return [];
  • 读取本地文件
    server/missiondeck-sync.js:112
    return fs.readdirSync(dir)
  • 读取本地文件
    server/missiondeck-sync.js:115
    try { return JSON.parse(fs.readFileSync(path.join(dir, f), 'utf8')); }
  • 发起网络请求
    server/missiondeck-sync.js:137
    const req = lib.request(options, (res) => {
  • 读取本地文件
    server/missiondeck-sync.js:180
    if (!fs.existsSync(tasksDir)) fs.mkdirSync(tasksDir, { recursive: true });
  • 写入本地文件
    server/missiondeck-sync.js:221
    fs.writeFileSync(localFile, JSON.stringify(task, null, 2));
  • 发起网络请求
    server/missiondeck-sync.js:238
    const req = lib.request(options, (res) => {
  • 写入本地文件
    server/resource-manager.js:47
    await fs.mkdir(dir, { recursive: true }).catch(() => {});
  • 读取本地文件
    server/resource-manager.js:57
    const files = await fs.readdir(dir);
  • 读取本地文件
    server/resource-manager.js:62
    const content = await fs.readFile(path.join(dir, file), 'utf-8');
  • 读取本地文件
    server/resource-manager.js:81
    const content = await fs.readFile(filePath, 'utf-8');
  • 写入本地文件
    server/resource-manager.js:90
    await fs.mkdir(path.dirname(filePath), { recursive: true });
  • 写入本地文件
    server/resource-manager.js:91
    await fs.writeFile(filePath, JSON.stringify(data, null, 2));
  • 删除本地文件
    server/resource-manager.js:165
    await fs.unlink(filePath);
  • 删除本地文件
    server/resource-manager.js:260
    await fs.unlink(filePath);
  • 写入本地文件
    server/review-manager.js:34
    await fs.mkdir(this.reviewsDir, { recursive: true });
  • 写入本地文件
    server/review-manager.js:96
    await fs.writeFile(
  • 读取本地文件
    server/review-manager.js:109
    const content = await fs.readFile(filePath, 'utf-8');
  • 写入本地文件
    server/review-manager.js:117
    await fs.mkdir(this.reviewsDir, { recursive: true });
  • 读取本地文件
    server/review-manager.js:118
    const files = await fs.readdir(this.reviewsDir);
  • 读取本地文件
    server/review-manager.js:124
    const content = await fs.readFile(
  • 写入本地文件
    server/review-manager.js:166
    await fs.writeFile(
  • 写入本地文件
    server/review-manager.js:379
    await fs.mkdir(this.checklistsDir, { recursive: true });
  • 写入本地文件
    server/review-manager.js:398
    await fs.writeFile(
  • 读取本地文件
    server/review-manager.js:411
    const content = await fs.readFile(filePath, 'utf-8');
  • 读取本地文件
    server/review-manager.js:420
    const files = await fs.readdir(this.checklistsDir);
  • 读取本地文件
    server/review-manager.js:426
    const content = await fs.readFile(
  • 执行外部命令固定命令
    server/start-all.js:15
    const server = spawn('node', [path.join(__dirname, 'index.js')], {
  • 发起网络请求
    server/webhook-delivery.js:123
    const response = await fetch(row.url, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 会话与工具活动汇入看板
  • 任务控制面板
  • 人工审核工作流

DeepSeek Harness 会话、轮次与工具活动的任务控制面板和人工审核工作流。

README

由 DeepSeek 最新模型翻译生成
面向 DeepSeek-Harness 的 JARVIS 任务控制中心 Version License DeepSeek-Harness MissionDeck 开源 AI 智能体编排看板,已接入 DeepSeek-Harness。 JARVIS 任务控制中心是一个基于 Git 的命令中心,用于管理 AI 智能体和人类协作者:实时看板、任务管理器、活动日志、消息传递层和审核工作流——由纯 JSON 文件和 Node.js 服务器提供支持。此版本将其接入 DeepSeek-Harness(dsh),即来自 DeepSeek 的插件内核智能体框架:每个 dsh 会话都会在你的看板上显示为一个任务,每一轮对话和工具调用都会流式写入活动日志,完成的工作会进入 REVIEW 状态等待人工批准。 状态:实验性。 dsh 是 v0.1 开发者预览版,已宣布将有破坏性变更。该桥接已针对 @deepseek-ai/dsh@0.1.0-rc.7 类型定义进行验证,并由已提交的测试覆盖;事件名称可通过配置覆盖,因此上游重命名只需修改配置即可修复。 连接方式 dsh 将一切视为插件,并在仅追加的会话事件流上广播每一个模型可见的时刻。
展开完整文档(README 剩余 1 节)
面向 DeepSeek-Harness 的 JARVIS 任务控制中心

Version
License
DeepSeek-Harness
MissionDeck

开源 AI 智能体编排看板,已接入 DeepSeek-Harness。

JARVIS 任务控制中心是一个基于 Git 的命令中心,用于管理 AI 智能体和人类协作者:实时看板、任务管理器、活动日志、消息传递层和审核工作流——由纯 JSON 文件和 Node.js 服务器提供支持。此版本将其接入 DeepSeek-Harness(dsh),即来自 DeepSeek 的插件内核智能体框架:每个 dsh 会话都会在你的看板上显示为一个任务,每一轮对话和工具调用都会流式写入活动日志,完成的工作会进入 REVIEW 状态等待人工批准。

状态:实验性。 dsh 是 v0.1 开发者预览版,已宣布将有破坏性变更。该桥接已针对 @deepseek-ai/dsh@0.1.0-rc.7 类型定义进行验证,并由已提交的测试覆盖;事件名称可通过配置覆盖,因此上游重命名只需修改配置即可修复。

连接方式

dsh 将一切视为插件,并在仅追加的会话事件流上广播每一个模型可见的时刻。我们的桥接作为 Cordis 插件挂载在框架内部,并将该事件流转发到任务控制中心的 REST API——无需轮询、无需抓取日志、无需更改服务器:

┌────────────── dsh ──────────────┐ ┌──── Mission Control ────┐
│ agent loop → session event log │ │ server (localhost:3000) │
│ │ │ HTTP │ POST /api/tasks │
│ └─► mission-control ─────┼───────►│ PATCH /api/tasks/:id │
│ plugin (this repo) │ │ POST /api/logs/... │
└─────────────────────────────────┘ │ → dashboard + WS │
└─────────────────────────┘

| dsh 事件 | 看板效果 |
| session/created | 创建任务(IN_PROGRESS,分配给框架智能体) |
| user/message、assistant/message | 活动日志摘录 |
| tool/call、tool/result | 活动日志条目(含错误码) |
| turn/end → completed | 任务 → REVIEW——由人工批准至 DONE |
| turn/end → blocked / failed | 任务 → BLOCKED,记录结构化错误 |
| turn/end → aborted / interrupted | 任务 → ASSIGNED |

快速开始

1. Fork and clone this repo
git clone https://github.com/YOUR-USERNAME/JARVIS-Mission-Control-DeepSeek.git
cd JARVIS-Mission-Control-DeepSeek

2. Start the Mission Control server + dashboard
cd server && npm install && npm start # → http://localhost:3000
3. 将桥接插件安装到 web 配置文件中。dsh.bundle 清单会自动激活它;无需手写 Cordis 行。
npx @deepseek-ai/dsh@0.1.0-rc.7 plugin --profile web add dsh-plugin-mission-control

4. 运行 DeepSeek-Harness
npx @deepseek-ai/dsh web # → http://127.0.0.1:3080

在 http://localhost:3000 打开看板并启动一个 dsh 会话——会话一出现,任务就会随之出现。

完整设置、配置参考和故障排除: integrations/deepseek-harness/README.md 架构分析与设计原理: docs/deepseek-harness-integration.md

包含内容

| 组件 | 路径 | 功能 |
| 仪表盘 | dashboard/ | 看板、智能体配置、聊天、活动流、WebSocket 实时更新 |
| 服务器 | server/ | 基于 .mission-control/ JSON 文件的 Express + WebSocket API |
| dsh 桥接插件 | integrations/deepseek-harness/ | Cordis 插件(dsh-plugin-mission-control)及其测试套件 |
| 数据 | .mission-control/ | 任务、智能体、人类、消息——Git 版本化的 JSON,无需数据库 |
| 技能 | skills/ | 模块化智能体指令,包括 dsh 桥接技能 |
| 脚本 | scripts/ | 设置辅助工具(add-agent.sh、add-human.sh、init-mission-control.sh 等) |

该插件附带 认证支持(MC_AGENT_TOKEN / authToken → Authorization: Bearer)、串行化重试队列(因此看板宕机也绝不会阻塞智能体循环),以及一个等待式的有界 flush(),接入 dsh 的 session/flush 持久性检查点。
bash
运行桥接插件的测试套件(16 个测试:rc.7 事件夹具 + 模拟 HTTP)
cd integrations/deepseek-harness/dsh-plugin-mission-control && npm test

MissionDeck 平台

这个开源仓库是引擎。MissionDeck.ai 是围绕它的平台——托管仪表盘(missiondeck.ai/mission-control/your-slug)、可视化智能体构建和一键部署。从 missiondeck.ai/auth 获取免费 API 密钥即可连接你的实例: bash ./scripts/connect-missiondeck.sh --api-key YOUR_KEY

传承与路线图

本项目最初是 JARVIS Mission Control(v2.1.0)的移植版;看板、服务器和数据模型均沿用下来,而这里所有与运行时相关的内容都仅针对 DeepSeek-Harness。路线图请参阅仓库 issue:

1. 使用真实的 DEEPSEEK_API_KEY 进行实时端到端验证
2. dsh 原生成本跟踪(来自 assistant/message 事件的每步 usage → 仪表盘成本卡片)
3. 通过兼容性金丝雀测试和可配置的事件映射来跟踪新的 dsh 预览版本

许可证

MIT —— 可自由使用、fork 和在此基础上构建。
预览分享卡片长什么样 ↓Asif2BD/JARVIS-Mission-Control-DeepSeek
分享 · DeepSeek Harness Hub
Asif2BD/JARVIS-Mission-Control-DeepSeek

把智能体会话与工具调用实时汇入看板并人工审核

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部