dsh-agent-crew-desktop 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.i18n.yaml +37 -0
- package/README.md +81 -2
- package/README.zh.md +82 -0
- package/cordis.patch.yml +6 -0
- package/lib/index.js +102 -0
- package/lib/typert.host.d.ts +3 -0
- package/lib/typert.host.js +69 -0
- package/lib/typert.remote-client.d.ts +25 -0
- package/lib/typert.remote-client.js +34 -0
- package/lib/types/index.d.ts +24 -0
- package/lib/types/index.js +78 -0
- package/lib/types/types.d.ts +11 -0
- package/lib/types/types.js +3 -0
- package/locale/de.json +6 -0
- package/locale/en.json +6 -0
- package/locale/es.json +6 -0
- package/locale/fr.json +6 -0
- package/locale/ja.json +6 -0
- package/locale/pt.json +6 -0
- package/locale/ru.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +86 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Tushar
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.i18n.yaml
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Bilingual-pair consistency record for README.md (docs/i18n/README.md): per heading
|
|
2
|
+
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
|
|
3
|
+
# After editing either side, bring the other along and re-record with:
|
|
4
|
+
# pnpm run verify-translation-pairing --write packages/experimental/crew-desktop/README.md
|
|
5
|
+
/:
|
|
6
|
+
en: 63945627b5929bf8
|
|
7
|
+
zh: f37fd9014a19e06c
|
|
8
|
+
/deepseek-ai-dsh-crew-desktop:
|
|
9
|
+
en: 06930fef24c10fce
|
|
10
|
+
zh: 24aa6f0f24ade123
|
|
11
|
+
/deepseek-ai-dsh-crew-desktop/summary:
|
|
12
|
+
en: 1d9c3eba3d3885db
|
|
13
|
+
zh: 368685dedc87037f
|
|
14
|
+
/deepseek-ai-dsh-crew-desktop/table-of-contents:
|
|
15
|
+
en: d152484eb41ac6b4
|
|
16
|
+
zh: b00dddf4c88f0a45
|
|
17
|
+
/deepseek-ai-dsh-crew-desktop/use-this-package:
|
|
18
|
+
en: ccde34d1833eafb6
|
|
19
|
+
zh: 69eea5a13e75fbf6
|
|
20
|
+
/deepseek-ai-dsh-crew-desktop/understand-the-implementation:
|
|
21
|
+
en: 923d2b38489f21bd
|
|
22
|
+
zh: 7fd774e14f113261
|
|
23
|
+
/deepseek-ai-dsh-crew-desktop/further-exploration:
|
|
24
|
+
en: 75a4c3ac5281ecde
|
|
25
|
+
zh: 0a3e80b968cbb6da
|
|
26
|
+
/deepseek-ai-dsh-crew-desktop/model-experience:
|
|
27
|
+
en: 301112a446a6cbda
|
|
28
|
+
zh: 3219b1aaf01a5355
|
|
29
|
+
/deepseek-ai-dsh-crew-desktop/model-experience/kv-cache-effect:
|
|
30
|
+
en: ca75c51c89c2c9b0
|
|
31
|
+
zh: 477b768cc9dcda1a
|
|
32
|
+
/deepseek-ai-dsh-crew-desktop/known-limitations-and-deferred-work:
|
|
33
|
+
en: 0363d284a3aed375
|
|
34
|
+
zh: 21a4e5c4517549a7
|
|
35
|
+
/deepseek-ai-dsh-crew-desktop/known-limitations-and-deferred-work/dev-note:
|
|
36
|
+
en: 03b7000d1cbb4cbe
|
|
37
|
+
zh: 4976d2e74fd97c96
|
package/README.md
CHANGED
|
@@ -1,3 +1,82 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
description: "Crew desktop bundle: a Remote reporting which computer-use provider runs and on which machine, mounted with the right-panel Desktop tab."
|
|
3
|
+
kind: "package-bundle"
|
|
4
|
+
---
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
# dsh-agent-crew-desktop
|
|
7
|
+
|
|
8
|
+
English | [中文](README.zh.md)
|
|
9
|
+
|
|
10
|
+
## Summary
|
|
11
|
+
|
|
12
|
+
Agents that use the computer act on a screen you cannot otherwise see. This bundle mounts the right-panel **Desktop** tab from [crew-desktop-ui](../crew-desktop-ui/README.md), which shows the latest screenshot an agent took, and a Host Remote that tells the tab which computer-use provider is registered and on which machine, so you can pause the agent or take over.
|
|
13
|
+
|
|
14
|
+
## Table of Contents
|
|
15
|
+
|
|
16
|
+
- [Use this package](#use-this-package)
|
|
17
|
+
- [Understand the implementation](#understand-the-implementation)
|
|
18
|
+
- [Further Exploration](#further-exploration)
|
|
19
|
+
- [Model Experience](#model-experience)
|
|
20
|
+
- [Known Limitations and Deferred Work](#known-limitations-and-deferred-work)
|
|
21
|
+
- [Dev Note](#dev-note)
|
|
22
|
+
|
|
23
|
+
-----
|
|
24
|
+
|
|
25
|
+
<a id="use-this-package"></a>
|
|
26
|
+
## Use this package
|
|
27
|
+
|
|
28
|
+
Install the bundle from the Plugins page or with `dsh plugin`. It inserts two rows, `crew-desktop` and `crew-desktop-ui`, and needs no configuration. Agents only reach the computer when a computer-use provider is mounted, such as the optional Computer Use bundle; without one, the tab says so.
|
|
29
|
+
|
|
30
|
+
The `crewDesktop` Remote offers `where()`, returning `{ provider?, host, platform }`: the registered `ctx.computerUse` provider name while one is mounted, and the Host machine name and operating system.
|
|
31
|
+
|
|
32
|
+
-----
|
|
33
|
+
|
|
34
|
+
<a id="understand-the-implementation"></a>
|
|
35
|
+
## Understand the implementation
|
|
36
|
+
|
|
37
|
+
<details>
|
|
38
|
+
<summary>Implementation internals — click to expand</summary>
|
|
39
|
+
|
|
40
|
+
The service follows `ctx.computerUse` with `ctx.inject`, so it mounts without computer use and starts reporting a provider when one is registered. `where()` reads `providerName` at call time.
|
|
41
|
+
|
|
42
|
+
| Source | Contents |
|
|
43
|
+
|---|---|
|
|
44
|
+
| [`src/index.ts`](src/index.ts) | Service and Remote |
|
|
45
|
+
| [`src/types.ts`](src/types.ts) | `DesktopLocation` |
|
|
46
|
+
| [`cordis.patch.yml`](cordis.patch.yml) | Bundle rows |
|
|
47
|
+
| [`tests/`](tests/) | Provider and host reporting |
|
|
48
|
+
|
|
49
|
+
</details>
|
|
50
|
+
|
|
51
|
+
-----
|
|
52
|
+
|
|
53
|
+
<a id="further-exploration"></a>
|
|
54
|
+
## Further Exploration
|
|
55
|
+
|
|
56
|
+
- [computer-use](../../computer-use/computer-use/README.md) — the provider registry.
|
|
57
|
+
- [crew-desktop-ui](../crew-desktop-ui/README.md) — the Desktop tab.
|
|
58
|
+
|
|
59
|
+
<a id="model-experience"></a>
|
|
60
|
+
## Model Experience
|
|
61
|
+
|
|
62
|
+
None, as the package only reports the provider and host to the browser and registers nothing model-facing.
|
|
63
|
+
|
|
64
|
+
#### KV Cache effect
|
|
65
|
+
|
|
66
|
+
None; this package neither assembles nor sends a provider request.
|
|
67
|
+
|
|
68
|
+
## Known Limitations and Deferred Work
|
|
69
|
+
|
|
70
|
+
<a id="known-limitations-and-deferred-work"></a>
|
|
71
|
+
|
|
72
|
+
- The Remote reports a provider name, not whether that provider has the operating-system permissions it needs.
|
|
73
|
+
|
|
74
|
+
<a id="dev-note"></a>
|
|
75
|
+
### Dev Note
|
|
76
|
+
|
|
77
|
+
<details>
|
|
78
|
+
<summary>Working context for maintainers — click to expand</summary>
|
|
79
|
+
|
|
80
|
+
The host test provides a fake `computerUse` service and checks that the name appears and disappears with it.
|
|
81
|
+
|
|
82
|
+
</details>
|
package/README.zh.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Crew 桌面 bundle:报告运行中的电脑使用提供方及所在机器的 Remote,与右侧面板的桌面标签页一同挂载。"
|
|
3
|
+
kind: "package-bundle"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# dsh-agent-crew-desktop
|
|
7
|
+
|
|
8
|
+
[English](README.md) | 中文
|
|
9
|
+
|
|
10
|
+
## 概述
|
|
11
|
+
|
|
12
|
+
使用电脑的智能体会操作你平时看不到的屏幕。本 bundle 挂载 [crew-desktop-ui](../crew-desktop-ui/README.zh.md) 提供的右侧面板 **桌面** 标签页,显示智能体最近截取的屏幕,并提供一个 Host Remote,告诉标签页注册了哪个电脑使用提供方、运行在哪台机器上,方便你暂停智能体或接管。
|
|
13
|
+
|
|
14
|
+
## 目录
|
|
15
|
+
|
|
16
|
+
- [使用本包](#use-this-package)
|
|
17
|
+
- [实现原理](#understand-the-implementation)
|
|
18
|
+
- [延伸阅读](#further-exploration)
|
|
19
|
+
- [模型体验](#model-experience)
|
|
20
|
+
- [已知限制与后续工作](#known-limitations-and-deferred-work)
|
|
21
|
+
- [开发备注](#dev-note)
|
|
22
|
+
|
|
23
|
+
-----
|
|
24
|
+
|
|
25
|
+
<a id="use-this-package"></a>
|
|
26
|
+
## 使用本包
|
|
27
|
+
|
|
28
|
+
从插件页面或用 `dsh plugin` 安装本 bundle。它插入 `crew-desktop` 和 `crew-desktop-ui` 两行,无需配置。只有挂载了电脑使用提供方(例如可选的电脑使用 bundle)时,智能体才能操作电脑;没有时标签页会说明。
|
|
29
|
+
|
|
30
|
+
`crewDesktop` Remote 提供 `where()`,返回 `{ provider?, host, platform }`:挂载期间注册的 `ctx.computerUse` 提供方名称,以及 Host 机器名和操作系统。
|
|
31
|
+
|
|
32
|
+
-----
|
|
33
|
+
|
|
34
|
+
<a id="understand-the-implementation"></a>
|
|
35
|
+
## 实现原理
|
|
36
|
+
|
|
37
|
+
<details>
|
|
38
|
+
<summary>实现细节——点击展开</summary>
|
|
39
|
+
|
|
40
|
+
该服务用 `ctx.inject` 跟随 `ctx.computerUse`,因此没有电脑使用时也能挂载,并在提供方注册后开始报告。`where()` 在调用时读取 `providerName`。
|
|
41
|
+
|
|
42
|
+
| 源文件 | 内容 |
|
|
43
|
+
|---|---|
|
|
44
|
+
| [`src/index.ts`](src/index.ts) | 服务与 Remote |
|
|
45
|
+
| [`src/types.ts`](src/types.ts) | `DesktopLocation` |
|
|
46
|
+
| [`cordis.patch.yml`](cordis.patch.yml) | Bundle 行 |
|
|
47
|
+
| [`tests/`](tests/) | 提供方与主机报告 |
|
|
48
|
+
|
|
49
|
+
</details>
|
|
50
|
+
|
|
51
|
+
-----
|
|
52
|
+
|
|
53
|
+
<a id="further-exploration"></a>
|
|
54
|
+
## 延伸阅读
|
|
55
|
+
|
|
56
|
+
- [computer-use](../../computer-use/computer-use/README.zh.md) — 提供方注册表。
|
|
57
|
+
- [crew-desktop-ui](../crew-desktop-ui/README.zh.md) — 桌面标签页。
|
|
58
|
+
|
|
59
|
+
<a id="model-experience"></a>
|
|
60
|
+
## 模型体验
|
|
61
|
+
|
|
62
|
+
无,本包只向浏览器报告提供方和主机,不注册任何面向模型的内容。
|
|
63
|
+
|
|
64
|
+
#### KV Cache 影响
|
|
65
|
+
|
|
66
|
+
无;本包既不组装也不发送模型提供方请求。
|
|
67
|
+
|
|
68
|
+
## 已知限制与后续工作
|
|
69
|
+
|
|
70
|
+
<a id="known-limitations-and-deferred-work"></a>
|
|
71
|
+
|
|
72
|
+
- Remote 报告提供方名称,但不报告该提供方是否拥有所需的操作系统权限。
|
|
73
|
+
|
|
74
|
+
<a id="dev-note"></a>
|
|
75
|
+
### 开发备注
|
|
76
|
+
|
|
77
|
+
<details>
|
|
78
|
+
<summary>维护者工作背景——点击展开</summary>
|
|
79
|
+
|
|
80
|
+
Host 测试提供一个假的 `computerUse` 服务,检查名称随其出现和消失。
|
|
81
|
+
|
|
82
|
+
</details>
|
package/cordis.patch.yml
ADDED
package/lib/index.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { hostname, platform } from "node:os";
|
|
2
|
+
import { Service } from "@deepseek-ai/cordis";
|
|
3
|
+
import { Remote, TypertRemoteService } from "@deepseek-ai/dsh-typert-protocol";
|
|
4
|
+
//#region lib/types/index.js
|
|
5
|
+
/**
|
|
6
|
+
* Crew desktop, Host half: reports which computer-use provider is mounted and on which machine, for the Desktop tab.
|
|
7
|
+
* @module dsh-agent-crew-desktop
|
|
8
|
+
*/
|
|
9
|
+
var __runInitializers = function(thisArg, initializers, value) {
|
|
10
|
+
var useValue = arguments.length > 2;
|
|
11
|
+
for (var i = 0; i < initializers.length; i++) value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
12
|
+
return useValue ? value : void 0;
|
|
13
|
+
};
|
|
14
|
+
var __esDecorate = function(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
15
|
+
function accept(f) {
|
|
16
|
+
if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected");
|
|
17
|
+
return f;
|
|
18
|
+
}
|
|
19
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
20
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
21
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
22
|
+
var _, done = false;
|
|
23
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
24
|
+
var context = {};
|
|
25
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
26
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
27
|
+
context.addInitializer = function(f) {
|
|
28
|
+
if (done) throw new TypeError("Cannot add initializers after decoration has completed");
|
|
29
|
+
extraInitializers.push(accept(f || null));
|
|
30
|
+
};
|
|
31
|
+
var result = (0, decorators[i])(kind === "accessor" ? {
|
|
32
|
+
get: descriptor.get,
|
|
33
|
+
set: descriptor.set
|
|
34
|
+
} : descriptor[key], context);
|
|
35
|
+
if (kind === "accessor") {
|
|
36
|
+
if (result === void 0) continue;
|
|
37
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
38
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
39
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
40
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
41
|
+
} else if (_ = accept(result)) if (kind === "field") initializers.unshift(_);
|
|
42
|
+
else descriptor[key] = _;
|
|
43
|
+
}
|
|
44
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
45
|
+
done = true;
|
|
46
|
+
};
|
|
47
|
+
/** Reports the computer-use provider and host to the Desktop tab. */
|
|
48
|
+
let CrewDesktop = (() => {
|
|
49
|
+
let _classSuper = TypertRemoteService;
|
|
50
|
+
let _instanceExtraInitializers = [];
|
|
51
|
+
let _where_decorators;
|
|
52
|
+
return class CrewDesktop extends _classSuper {
|
|
53
|
+
static {
|
|
54
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
55
|
+
_where_decorators = [Remote("where")];
|
|
56
|
+
__esDecorate(this, null, _where_decorators, {
|
|
57
|
+
kind: "method",
|
|
58
|
+
name: "where",
|
|
59
|
+
static: false,
|
|
60
|
+
private: false,
|
|
61
|
+
access: {
|
|
62
|
+
has: (obj) => "where" in obj,
|
|
63
|
+
get: (obj) => obj.where
|
|
64
|
+
},
|
|
65
|
+
metadata: _metadata
|
|
66
|
+
}, null, _instanceExtraInitializers);
|
|
67
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
68
|
+
enumerable: true,
|
|
69
|
+
configurable: true,
|
|
70
|
+
writable: true,
|
|
71
|
+
value: _metadata
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
computerUse = __runInitializers(this, _instanceExtraInitializers);
|
|
75
|
+
/** @param ctx - owning plugin context. */
|
|
76
|
+
constructor(ctx) {
|
|
77
|
+
super(ctx, "crewDesktop");
|
|
78
|
+
}
|
|
79
|
+
[Service.init]() {
|
|
80
|
+
this.ctx.inject(["computerUse"], (inner) => {
|
|
81
|
+
this.computerUse = inner.computerUse;
|
|
82
|
+
inner.effect(() => () => {
|
|
83
|
+
this.computerUse = void 0;
|
|
84
|
+
}, "crew-desktop.computer-use");
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Where computer use runs.
|
|
89
|
+
* @returns the provider name, when one is registered, and the host machine.
|
|
90
|
+
*/
|
|
91
|
+
where() {
|
|
92
|
+
const provider = this.computerUse?.providerName;
|
|
93
|
+
return Promise.resolve({
|
|
94
|
+
...provider === void 0 ? {} : { provider },
|
|
95
|
+
host: hostname(),
|
|
96
|
+
platform: platform()
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
})();
|
|
101
|
+
//#endregion
|
|
102
|
+
export { CrewDesktop, CrewDesktop as default };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/* Generated by @deepseek-ai/dsh-typert-generator from FaceModel — do not edit. */
|
|
2
|
+
import { z } from 'zod'
|
|
3
|
+
|
|
4
|
+
import { createTypertRemoteInfo } from '@deepseek-ai/dsh-typert-protocol/remote-info'
|
|
5
|
+
|
|
6
|
+
let _deepseek_ai_dsh_crew_desktop_crewDesktop_where_result$schema$value
|
|
7
|
+
const _deepseek_ai_dsh_crew_desktop_crewDesktop_where_result$schema = () => (_deepseek_ai_dsh_crew_desktop_crewDesktop_where_result$schema$value ??= z.object({
|
|
8
|
+
'provider': z.string().readonly().optional().describe('Registered computer-use provider, absent while none is mounted.'),
|
|
9
|
+
'host': z.string().readonly().describe('Host machine name.'),
|
|
10
|
+
'platform': z.string().readonly().describe('Host operating system, as Node reports it.'),
|
|
11
|
+
}))
|
|
12
|
+
|
|
13
|
+
const $remote = createTypertRemoteInfo({
|
|
14
|
+
package: 'dsh-agent-crew-desktop',
|
|
15
|
+
methods: {
|
|
16
|
+
'crewDesktop/where': {
|
|
17
|
+
service: 'crewDesktop',
|
|
18
|
+
description: 'Where computer use runs.',
|
|
19
|
+
invocation: { kind: 'direct' },
|
|
20
|
+
parameters: [
|
|
21
|
+
],
|
|
22
|
+
result: {
|
|
23
|
+
mode: 'strict',
|
|
24
|
+
typeSymbol: 'dsh-agent-crew-desktop/types#DesktopLocation',
|
|
25
|
+
create: _deepseek_ai_dsh_crew_desktop_crewDesktop_where_result$schema,
|
|
26
|
+
description: 'the provider name, when one is registered, and the host machine.',
|
|
27
|
+
jsonSchema: {"type":"object","properties":{"provider":{"type":"string","description":"Registered computer-use provider, absent while none is mounted."},"host":{"type":"string","description":"Host machine name."},"platform":{"type":"string","description":"Host operating system, as Node reports it."}},"required":["host","platform"],"additionalProperties":true},
|
|
28
|
+
},
|
|
29
|
+
sourceLocation: {"file":"packages/experimental/crew-desktop/src/index.ts","line":42,"column":3},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
}, z)
|
|
33
|
+
|
|
34
|
+
export const TYPERT = {
|
|
35
|
+
package: 'dsh-agent-crew-desktop',
|
|
36
|
+
face: 'host',
|
|
37
|
+
schemas: [
|
|
38
|
+
],
|
|
39
|
+
get invocations() { return $remote.descriptors },
|
|
40
|
+
model: {
|
|
41
|
+
"services": [
|
|
42
|
+
{
|
|
43
|
+
"description": "Reports the computer-use provider and host to the Desktop tab.",
|
|
44
|
+
"summary": "Reports the computer-use provider and host to the Desktop tab.",
|
|
45
|
+
"tags": [],
|
|
46
|
+
"jsDoc": "/** Reports the computer-use provider and host to the Desktop tab. */",
|
|
47
|
+
"key": "crewDesktop",
|
|
48
|
+
"exportName": "CrewDesktop",
|
|
49
|
+
"members": [
|
|
50
|
+
{
|
|
51
|
+
"kind": "method",
|
|
52
|
+
"name": "where",
|
|
53
|
+
"signature": "@Remote('where') where(): Promise<DesktopLocation>",
|
|
54
|
+
"summary": "Where computer use runs.",
|
|
55
|
+
"jsDoc": "/**\n * Where computer use runs.\n * @returns the provider name, when one is registered, and the host machine.\n */"
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"types": [
|
|
59
|
+
{
|
|
60
|
+
"name": "DesktopLocation",
|
|
61
|
+
"declaration": "export interface DesktopLocation {\n readonly provider?: string;\n readonly host: string;\n readonly platform: string;\n}"
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"events": [],
|
|
67
|
+
"objects": []
|
|
68
|
+
},
|
|
69
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* Generated by @deepseek-ai/dsh-typert-generator from the Host FaceModel — do not edit. */
|
|
2
|
+
import type {
|
|
3
|
+
RemoteResult,
|
|
4
|
+
TypertRemoteInfo,
|
|
5
|
+
TypertRemoteMethod,
|
|
6
|
+
} from '@deepseek-ai/dsh-typert-protocol'
|
|
7
|
+
import type { DesktopLocation } from 'dsh-agent-crew-desktop/types'
|
|
8
|
+
|
|
9
|
+
declare module '@deepseek-ai/dsh-typert-protocol' {
|
|
10
|
+
interface TypertRemoteNamespace$637265774465736b746f70 {
|
|
11
|
+
where: () => Promise<RemoteResult<DesktopLocation>>
|
|
12
|
+
}
|
|
13
|
+
interface TypertRemoteMap {
|
|
14
|
+
'crewDesktop/where': () => Promise<RemoteResult<DesktopLocation>>
|
|
15
|
+
}
|
|
16
|
+
interface TypertRemoteNamespaceMap {
|
|
17
|
+
'crewDesktop': TypertRemoteNamespace$637265774465736b746f70
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export declare const TYPERT_REMOTE: TypertRemoteInfo<{
|
|
22
|
+
readonly 'crewDesktop/where': TypertRemoteMethod<{ }, DesktopLocation>
|
|
23
|
+
}>
|
|
24
|
+
export default TYPERT_REMOTE
|
|
25
|
+
//# sourceMappingURL=typert.remote-client.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/* Generated by @deepseek-ai/dsh-typert-generator from the Host FaceModel — do not edit. */
|
|
2
|
+
import { z } from 'zod'
|
|
3
|
+
|
|
4
|
+
import { createTypertRemoteInfo } from '@deepseek-ai/dsh-typert-protocol/remote-info'
|
|
5
|
+
|
|
6
|
+
let _deepseek_ai_dsh_crew_desktop_crewDesktop_where_result$schema$value
|
|
7
|
+
const _deepseek_ai_dsh_crew_desktop_crewDesktop_where_result$schema = () => (_deepseek_ai_dsh_crew_desktop_crewDesktop_where_result$schema$value ??= z.object({
|
|
8
|
+
'provider': z.string().readonly().optional().describe('Registered computer-use provider, absent while none is mounted.'),
|
|
9
|
+
'host': z.string().readonly().describe('Host machine name.'),
|
|
10
|
+
'platform': z.string().readonly().describe('Host operating system, as Node reports it.'),
|
|
11
|
+
}))
|
|
12
|
+
|
|
13
|
+
export const TYPERT_REMOTE = createTypertRemoteInfo({
|
|
14
|
+
package: 'dsh-agent-crew-desktop',
|
|
15
|
+
methods: {
|
|
16
|
+
'crewDesktop/where': {
|
|
17
|
+
service: 'crewDesktop',
|
|
18
|
+
description: 'Where computer use runs.',
|
|
19
|
+
invocation: { kind: 'direct' },
|
|
20
|
+
parameters: [
|
|
21
|
+
],
|
|
22
|
+
result: {
|
|
23
|
+
mode: 'strict',
|
|
24
|
+
typeSymbol: 'dsh-agent-crew-desktop/types#DesktopLocation',
|
|
25
|
+
create: _deepseek_ai_dsh_crew_desktop_crewDesktop_where_result$schema,
|
|
26
|
+
description: 'the provider name, when one is registered, and the host machine.',
|
|
27
|
+
jsonSchema: {"type":"object","properties":{"provider":{"type":"string","description":"Registered computer-use provider, absent while none is mounted."},"host":{"type":"string","description":"Host machine name."},"platform":{"type":"string","description":"Host operating system, as Node reports it."}},"required":["host","platform"],"additionalProperties":true},
|
|
28
|
+
},
|
|
29
|
+
sourceLocation: {"file":"packages/experimental/crew-desktop/src/index.ts","line":42,"column":3},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
}, z)
|
|
33
|
+
|
|
34
|
+
export default TYPERT_REMOTE
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Service, type Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
3
|
+
import type { DesktopLocation } from './types.ts';
|
|
4
|
+
export type { DesktopLocation } from './types.ts';
|
|
5
|
+
declare module '@deepseek-ai/cordis' {
|
|
6
|
+
interface Context {
|
|
7
|
+
/** Where crew computer use runs. */
|
|
8
|
+
crewDesktop: CrewDesktop;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/** Reports the computer-use provider and host to the Desktop tab. */
|
|
12
|
+
export declare class CrewDesktop extends TypertRemoteService {
|
|
13
|
+
private computerUse;
|
|
14
|
+
/** @param ctx - owning plugin context. */
|
|
15
|
+
constructor(ctx: Context);
|
|
16
|
+
protected [Service.init](): void;
|
|
17
|
+
/**
|
|
18
|
+
* Where computer use runs.
|
|
19
|
+
* @returns the provider name, when one is registered, and the host machine.
|
|
20
|
+
*/
|
|
21
|
+
where(): Promise<DesktopLocation>;
|
|
22
|
+
}
|
|
23
|
+
export default CrewDesktop;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
2
|
+
var useValue = arguments.length > 2;
|
|
3
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
4
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
5
|
+
}
|
|
6
|
+
return useValue ? value : void 0;
|
|
7
|
+
};
|
|
8
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
9
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
10
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
11
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
12
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
13
|
+
var _, done = false;
|
|
14
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
15
|
+
var context = {};
|
|
16
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
17
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
18
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
19
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
20
|
+
if (kind === "accessor") {
|
|
21
|
+
if (result === void 0) continue;
|
|
22
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
23
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
24
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
25
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
26
|
+
}
|
|
27
|
+
else if (_ = accept(result)) {
|
|
28
|
+
if (kind === "field") initializers.unshift(_);
|
|
29
|
+
else descriptor[key] = _;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
33
|
+
done = true;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Crew desktop, Host half: reports which computer-use provider is mounted and on which machine, for the Desktop tab.
|
|
37
|
+
* @module dsh-agent-crew-desktop
|
|
38
|
+
*/
|
|
39
|
+
import { hostname, platform } from 'node:os';
|
|
40
|
+
import { Service } from '@deepseek-ai/cordis';
|
|
41
|
+
import { Remote, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
42
|
+
/** Reports the computer-use provider and host to the Desktop tab. */
|
|
43
|
+
let CrewDesktop = (() => {
|
|
44
|
+
let _classSuper = TypertRemoteService;
|
|
45
|
+
let _instanceExtraInitializers = [];
|
|
46
|
+
let _where_decorators;
|
|
47
|
+
return class CrewDesktop extends _classSuper {
|
|
48
|
+
static {
|
|
49
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
50
|
+
_where_decorators = [Remote('where')];
|
|
51
|
+
__esDecorate(this, null, _where_decorators, { kind: "method", name: "where", static: false, private: false, access: { has: obj => "where" in obj, get: obj => obj.where }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
52
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
53
|
+
}
|
|
54
|
+
computerUse = __runInitializers(this, _instanceExtraInitializers);
|
|
55
|
+
/** @param ctx - owning plugin context. */
|
|
56
|
+
constructor(ctx) {
|
|
57
|
+
super(ctx, 'crewDesktop');
|
|
58
|
+
}
|
|
59
|
+
[Service.init]() {
|
|
60
|
+
// Computer use is optional: hold the service only while it is mounted.
|
|
61
|
+
this.ctx.inject(['computerUse'], (inner) => {
|
|
62
|
+
this.computerUse = inner.computerUse;
|
|
63
|
+
inner.effect(() => () => { this.computerUse = undefined; }, 'crew-desktop.computer-use');
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Where computer use runs.
|
|
68
|
+
* @returns the provider name, when one is registered, and the host machine.
|
|
69
|
+
*/
|
|
70
|
+
where() {
|
|
71
|
+
const provider = this.computerUse?.providerName;
|
|
72
|
+
return Promise.resolve({ ...provider === undefined ? {} : { provider }, host: hostname(), platform: platform() });
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
})();
|
|
76
|
+
export { CrewDesktop };
|
|
77
|
+
export default CrewDesktop;
|
|
78
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Types shared with the browser. */
|
|
2
|
+
/** Where an agent's computer use runs. */
|
|
3
|
+
export interface DesktopLocation {
|
|
4
|
+
/** Registered computer-use provider, absent while none is mounted. */
|
|
5
|
+
readonly provider?: string;
|
|
6
|
+
/** Host machine name. */
|
|
7
|
+
readonly host: string;
|
|
8
|
+
/** Host operating system, as Node reports it. */
|
|
9
|
+
readonly platform: string;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=types.d.ts.map
|
package/locale/de.json
ADDED
package/locale/en.json
ADDED
package/locale/es.json
ADDED
package/locale/fr.json
ADDED
package/locale/ja.json
ADDED
package/locale/pt.json
ADDED
package/locale/ru.json
ADDED
package/locale/zh.json
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,88 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-agent-crew-desktop",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"description": "Crew desktop: where computer use runs, for the right-panel Desktop tab that shows the latest screenshot with Pause and Take over",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/tusharcora/dsh-agent-crew.git",
|
|
8
|
+
"directory": "packages/crew-desktop"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"main": "lib/index.js",
|
|
12
|
+
"types": "lib/types/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./lib/types/index.d.ts",
|
|
16
|
+
"default": "./lib/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./src/*": "./src/*",
|
|
19
|
+
"./package.json": "./package.json",
|
|
20
|
+
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
21
|
+
"./locale/*.json": "./locale/*.json",
|
|
22
|
+
"./types": {
|
|
23
|
+
"types": "./lib/types/types.d.ts",
|
|
24
|
+
"default": "./lib/types/types.js"
|
|
25
|
+
},
|
|
26
|
+
"./typert": {
|
|
27
|
+
"types": "./lib/typert.host.d.ts",
|
|
28
|
+
"default": "./lib/typert.host.js"
|
|
29
|
+
},
|
|
30
|
+
"./remote": {
|
|
31
|
+
"types": "./lib/typert.remote-client.d.ts",
|
|
32
|
+
"default": "./lib/typert.remote-client.js"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"dsh": {
|
|
36
|
+
"bundle": {
|
|
37
|
+
"patch": "./cordis.patch.yml"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"locale/*.json",
|
|
42
|
+
"lib/index.js",
|
|
43
|
+
"cordis.patch.yml",
|
|
44
|
+
"lib/types/**/*.js",
|
|
45
|
+
"lib/types/**/*.d.ts",
|
|
46
|
+
"lib/typert.host.js",
|
|
47
|
+
"lib/typert.host.d.ts",
|
|
48
|
+
"lib/typert.remote-client.js",
|
|
49
|
+
"lib/typert.remote-client.d.ts",
|
|
50
|
+
"LICENSE"
|
|
51
|
+
],
|
|
52
|
+
"license": "MIT",
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"dsh-agent-crew-desktop-ui": "0.1.0"
|
|
55
|
+
},
|
|
56
|
+
"peerDependencies": {
|
|
57
|
+
"@deepseek-ai/cordis": "~4.1.0",
|
|
58
|
+
"@deepseek-ai/dsh-computer-use": ">=0.2.2-rc.1 <0.3.0",
|
|
59
|
+
"@deepseek-ai/dsh-typert-protocol": ">=0.2.2-rc.1 <0.3.0"
|
|
60
|
+
},
|
|
61
|
+
"peerDependenciesMeta": {
|
|
62
|
+
"@deepseek-ai/cordis": {
|
|
63
|
+
"optional": true
|
|
64
|
+
},
|
|
65
|
+
"@deepseek-ai/dsh-computer-use": {
|
|
66
|
+
"optional": true
|
|
67
|
+
},
|
|
68
|
+
"@deepseek-ai/dsh-typert-protocol": {
|
|
69
|
+
"optional": true
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"keywords": [
|
|
73
|
+
"dsh",
|
|
74
|
+
"dsh-plugin",
|
|
75
|
+
"deepseek-harness",
|
|
76
|
+
"deepseek-harness-plugin",
|
|
77
|
+
"deepseek",
|
|
78
|
+
"dsh-agent-crew"
|
|
79
|
+
],
|
|
80
|
+
"author": "Tushar (https://github.com/tusharcora)",
|
|
81
|
+
"homepage": "https://github.com/tusharcora/dsh-agent-crew#readme",
|
|
82
|
+
"bugs": {
|
|
83
|
+
"url": "https://github.com/tusharcora/dsh-agent-crew/issues"
|
|
84
|
+
},
|
|
85
|
+
"engines": {
|
|
86
|
+
"dsh": ">=0.2.2-rc.1 <0.3.0"
|
|
87
|
+
}
|
|
88
|
+
}
|