ds-harness-remote 0.4.27 → 0.5.1
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/README.md +27 -8
- package/dist/acp/adapter.d.ts +19 -0
- package/dist/acp/adapter.d.ts.map +1 -0
- package/dist/acp/adapter.js +14 -0
- package/dist/acp/adapter.js.map +1 -0
- package/dist/acp/adapters/antigravity/executor.d.ts +20 -0
- package/dist/acp/adapters/antigravity/executor.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/executor.js +99 -0
- package/dist/acp/adapters/antigravity/executor.js.map +1 -0
- package/dist/acp/adapters/antigravity/image-store.d.ts +9 -0
- package/dist/acp/adapters/antigravity/image-store.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/image-store.js +116 -0
- package/dist/acp/adapters/antigravity/image-store.js.map +1 -0
- package/dist/acp/adapters/antigravity/index.d.ts +5 -0
- package/dist/acp/adapters/antigravity/index.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/index.js +5 -0
- package/dist/acp/adapters/antigravity/index.js.map +1 -0
- package/dist/acp/adapters/antigravity/models.d.ts +35 -0
- package/dist/acp/adapters/antigravity/models.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/models.js +59 -0
- package/dist/acp/adapters/antigravity/models.js.map +1 -0
- package/dist/acp/adapters/antigravity/service.d.ts +35 -0
- package/dist/acp/adapters/antigravity/service.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/service.js +67 -0
- package/dist/acp/adapters/antigravity/service.js.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-loader.d.ts +21 -0
- package/dist/acp/adapters/antigravity/transcript-loader.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-loader.js +356 -0
- package/dist/acp/adapters/antigravity/transcript-loader.js.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.d.ts +28 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.js +157 -0
- package/dist/acp/adapters/antigravity/transcript-watcher.js.map +1 -0
- package/dist/acp/adapters/antigravity/types.d.ts +56 -0
- package/dist/acp/adapters/antigravity/types.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity/types.js +2 -0
- package/dist/acp/adapters/antigravity/types.js.map +1 -0
- package/dist/acp/adapters/antigravity-process.d.ts +69 -0
- package/dist/acp/adapters/antigravity-process.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity-process.js +566 -0
- package/dist/acp/adapters/antigravity-process.js.map +1 -0
- package/dist/acp/adapters/antigravity.d.ts +8 -0
- package/dist/acp/adapters/antigravity.d.ts.map +1 -0
- package/dist/acp/adapters/antigravity.js +9 -0
- package/dist/acp/adapters/antigravity.js.map +1 -0
- package/dist/acp/adapters/cursor-process.d.ts +75 -0
- package/dist/acp/adapters/cursor-process.d.ts.map +1 -0
- package/dist/acp/adapters/cursor-process.js +273 -0
- package/dist/acp/adapters/cursor-process.js.map +1 -0
- package/dist/acp/adapters/cursor.d.ts +8 -0
- package/dist/acp/adapters/cursor.d.ts.map +1 -0
- package/dist/acp/adapters/cursor.js +8 -0
- package/dist/acp/adapters/cursor.js.map +1 -0
- package/dist/acp/gateway.d.ts +108 -0
- package/dist/acp/gateway.d.ts.map +1 -0
- package/dist/acp/gateway.js +1040 -0
- package/dist/acp/gateway.js.map +1 -0
- package/dist/acp/image-content.d.ts +19 -0
- package/dist/acp/image-content.d.ts.map +1 -0
- package/dist/acp/image-content.js +76 -0
- package/dist/acp/image-content.js.map +1 -0
- package/dist/acp/method-policy.d.ts +239 -0
- package/dist/acp/method-policy.d.ts.map +1 -0
- package/dist/acp/method-policy.js +102 -0
- package/dist/acp/method-policy.js.map +1 -0
- package/dist/acp/peer-bridge.d.ts +59 -0
- package/dist/acp/peer-bridge.d.ts.map +1 -0
- package/dist/acp/peer-bridge.js +367 -0
- package/dist/acp/peer-bridge.js.map +1 -0
- package/dist/acp/virtual-harness.d.ts +181 -0
- package/dist/acp/virtual-harness.d.ts.map +1 -0
- package/dist/acp/virtual-harness.js +1556 -0
- package/dist/acp/virtual-harness.js.map +1 -0
- package/dist/acp/workspace-tools.d.ts +13 -0
- package/dist/acp/workspace-tools.d.ts.map +1 -0
- package/dist/acp/workspace-tools.js +46 -0
- package/dist/acp/workspace-tools.js.map +1 -0
- package/dist/acp.d.ts.map +1 -1
- package/dist/acp.js +1 -0
- package/dist/acp.js.map +1 -1
- package/dist/api-proxy-switch.d.ts +2 -0
- package/dist/api-proxy-switch.d.ts.map +1 -1
- package/dist/api-proxy-switch.js +9 -0
- package/dist/api-proxy-switch.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -1
- package/dist/client-runtime.d.ts +14 -1
- package/dist/client-runtime.d.ts.map +1 -1
- package/dist/client-runtime.js +160 -8
- package/dist/client-runtime.js.map +1 -1
- package/dist/client.github.js +313 -143
- package/dist/client.js +313 -143
- package/dist/client.js.map +1 -1
- package/dist/codex/domain.d.ts +4 -1
- package/dist/codex/domain.d.ts.map +1 -1
- package/dist/codex/domain.js +32 -4
- package/dist/codex/domain.js.map +1 -1
- package/dist/codex/virtual-harness.d.ts.map +1 -1
- package/dist/codex/virtual-harness.js +3 -0
- package/dist/codex/virtual-harness.js.map +1 -1
- package/dist/codex-workspace-bridge.d.ts +7 -105
- package/dist/codex-workspace-bridge.d.ts.map +1 -1
- package/dist/codex-workspace-bridge.js +10 -498
- package/dist/codex-workspace-bridge.js.map +1 -1
- package/dist/config.d.ts +22 -10
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +45 -4
- package/dist/config.js.map +1 -1
- package/dist/connection-controller.d.ts.map +1 -1
- package/dist/connection-controller.js +7 -4
- package/dist/connection-controller.js.map +1 -1
- package/dist/control-runtime.d.ts +1 -0
- package/dist/control-runtime.d.ts.map +1 -1
- package/dist/control-runtime.js +49 -9
- package/dist/control-runtime.js.map +1 -1
- package/dist/harness-remote-bridge.d.ts +1 -1
- package/dist/harness-remote-bridge.d.ts.map +1 -1
- package/dist/harness-remote-bridge.js +4 -0
- package/dist/harness-remote-bridge.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13177 -8303
- package/dist/index.js.map +4 -4
- package/dist/remote-typert-gateway.d.ts.map +1 -1
- package/dist/remote-typert-gateway.js +7 -4
- package/dist/remote-typert-gateway.js.map +1 -1
- package/dist/rpc-router.d.ts +6 -5
- package/dist/rpc-router.d.ts.map +1 -1
- package/dist/rpc-router.js +49 -18
- package/dist/rpc-router.js.map +1 -1
- package/dist/server-connection.js +7 -0
- package/dist/server-connection.js.map +1 -1
- package/dist/service.d.ts +26 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +97 -9
- package/dist/service.js.map +1 -1
- package/dist/session-format-compat.d.ts +1 -0
- package/dist/session-format-compat.d.ts.map +1 -1
- package/dist/session-format-compat.js +14 -0
- package/dist/session-format-compat.js.map +1 -1
- package/dist/tui-command.js +2 -0
- package/dist/tui-command.js.map +1 -1
- package/dist/typert-gateway-switch.d.ts +2 -0
- package/dist/typert-gateway-switch.d.ts.map +1 -1
- package/dist/typert-gateway-switch.js +16 -0
- package/dist/typert-gateway-switch.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/workspace-bridge.d.ts +117 -0
- package/dist/workspace-bridge.d.ts.map +1 -0
- package/dist/workspace-bridge.js +512 -0
- package/dist/workspace-bridge.js.map +1 -0
- package/dsh-plugin.json +1 -1
- package/package.json +31 -32
package/README.md
CHANGED
|
@@ -1,25 +1,42 @@
|
|
|
1
1
|
# DeepSeek Harness Remote
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
当前版本为 `0.5.1`;Android 使用 `versionCode 40`。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
当前 Harness 适配基线:`0.2.1-alpha.1`,保留 `0.2.0-rc.2`,版本范围接纳后续 `0.2.2` RC;legacy ApiProxy 不再作为兼容维护目标。详细范围与验证边界见[兼容说明](../../docs/compatibility.zh.md)。
|
|
6
|
+
|
|
7
|
+
Continue DeepSeek Harness sessions and experimental Codex, Cursor, and Antigravity workspaces from another device over an end-to-end encrypted connection.
|
|
8
|
+
|
|
9
|
+
[GitHub](https://github.com/liguobao/ds-harness-remote) · [Full guide](https://github.com/liguobao/ds-harness-remote/blob/main/README.md) · [中文说明](https://github.com/liguobao/ds-harness-remote/blob/main/README.zh.md) · [Remote Web](https://dsh.r2049.cn/app) · [Android](https://github.com/liguobao/ds-harness-remote/releases/latest)
|
|
6
10
|
|
|
7
11
|
`ds-harness-remote` is the Remote Host and workspace plugin for DeepSeek Harness. Harness keeps running on your work computer with its existing workspaces, tools, and permission controls; Remote gives authorized devices another window into that environment.
|
|
8
12
|
|
|
9
|
-
> Install
|
|
13
|
+
> Install the npm package through Desktop Plugin management or `dsh plugin`. Both manage the selected Harness profile and its bundle configuration.
|
|
10
14
|
|
|
11
15
|
## Install
|
|
12
16
|
|
|
13
17
|
### DSH Desktop
|
|
14
18
|
|
|
15
|
-
|
|
19
|
+
In DeepSeek Harness Desktop, open **Extensions / Plugin management**, choose installation
|
|
20
|
+
from **npm**, and enter:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
ds-harness-remote@0.5.1
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Restart Desktop after installation. Its official `dsh` launcher can also install the package:
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
dsh plugin --profile desktop add -w ds-harness-remote@0.5.1
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Use Desktop's official launcher to manage its reserved `desktop` profile.
|
|
16
33
|
|
|
17
34
|
### Existing DSH installation
|
|
18
35
|
|
|
19
36
|
Add the current package version to the `web` profile, then restart Harness:
|
|
20
37
|
|
|
21
38
|
```sh
|
|
22
|
-
dsh plugin --profile web add -w ds-harness-remote@0.
|
|
39
|
+
dsh plugin --profile web add -w ds-harness-remote@0.5.1
|
|
23
40
|
```
|
|
24
41
|
|
|
25
42
|
### dsh-TUI Host
|
|
@@ -27,7 +44,7 @@ dsh plugin --profile web add -w ds-harness-remote@0.4.27
|
|
|
27
44
|
Remote can also run as a Host in a terminal-only [dsh-TUI](https://github.com/ccch1mneyyy/dsh-TUI) profile:
|
|
28
45
|
|
|
29
46
|
```sh
|
|
30
|
-
dsh plugin --profile dsh-tui add -w ds-harness-remote@0.
|
|
47
|
+
dsh plugin --profile dsh-tui add -w ds-harness-remote@0.5.1
|
|
31
48
|
```
|
|
32
49
|
|
|
33
50
|
After starting dsh-TUI, manage Remote with `/remote`, `/remote login`, `/remote status`, and `/remote logout`.
|
|
@@ -40,11 +57,12 @@ After starting dsh-TUI, manage Remote with `/remote`, `/remote login`, `/remote
|
|
|
40
57
|
- Use the official workspace file tree and bounded read-only previews on supported Harness versions.
|
|
41
58
|
- Use an optional Host-local terminal and authorized loopback development-service previews.
|
|
42
59
|
- Open Host Codex projects in the existing Remote UI through the optional experimental Codex domain.
|
|
60
|
+
- Access Cursor and Antigravity workspaces through the optional experimental ACP gateway, with client-side projections kept in memory.
|
|
43
61
|
- Reach the Host without opening a public listening port or configuring router port forwarding.
|
|
44
62
|
|
|
45
63
|
## Compatibility
|
|
46
64
|
|
|
47
|
-
Plugin `0.
|
|
65
|
+
Plugin `0.5.1` targets DeepSeek Harness `dsh-v0.2.0-rc.2` and retains `dsh-v0.1.7-rc.1` compatibility; it also supports `dsh-v0.1.6-alpha.2` and earlier settings hosts. It supports:
|
|
48
66
|
|
|
49
67
|
- `dsh-v0.1.1-rc.2` through the official legacy `ApiProxy`;
|
|
50
68
|
- `dsh-v0.1.2-alpha.1` through `dsh-v0.1.2-rc.1` through the official Typert Remote Gateway;
|
|
@@ -69,9 +87,10 @@ This repository includes a minimal, single-account self-hosted Relay Server in [
|
|
|
69
87
|
- [Complete guide](https://github.com/liguobao/ds-harness-remote#readme)
|
|
70
88
|
- [dsh-TUI Remote guide](https://github.com/liguobao/ds-harness-remote/blob/main/docs/dsh-tui.md)
|
|
71
89
|
- [Codex Remote technical notes](https://github.com/liguobao/ds-harness-remote/blob/main/docs/codex-remote.md)
|
|
90
|
+
- [Agent workspace integration guide](https://github.com/liguobao/ds-harness-remote/blob/main/docs/acp-integration.md)
|
|
72
91
|
- [End-to-end encryption](https://github.com/liguobao/ds-harness-remote/blob/main/docs/end-to-end-encryption.md)
|
|
73
92
|
- [Network and transport](https://github.com/liguobao/ds-harness-remote/blob/main/docs/network.md)
|
|
74
93
|
- [Protocol reference](https://github.com/liguobao/ds-harness-remote/blob/main/docs/protocol.md)
|
|
75
|
-
- [Changelog](https://github.com/liguobao/ds-harness-remote/blob/main/CHANGELOG.md)
|
|
94
|
+
- [Changelog](https://github.com/liguobao/ds-harness-remote/blob/main/docs/CHANGELOG.md)
|
|
76
95
|
|
|
77
96
|
This is an independent community project and is not an official DeepSeek product. Licensed under the [MIT License](./LICENSE).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CursorAcpInbound, CursorAcpLike } from './adapters/cursor-process.js';
|
|
2
|
+
/**
|
|
3
|
+
* Backend adapter contract for the Host Agent ACP gateway (#65).
|
|
4
|
+
* Public Remote methods stay backend-neutral; adapters own runtime mapping.
|
|
5
|
+
*/
|
|
6
|
+
export type AcpBackendId = 'cursor' | 'antigravity' | (string & {});
|
|
7
|
+
export interface AcpBackendAdapter {
|
|
8
|
+
readonly id: AcpBackendId;
|
|
9
|
+
start(): Promise<void>;
|
|
10
|
+
close(): Promise<void>;
|
|
11
|
+
isReady(): boolean;
|
|
12
|
+
call(method: string, params: unknown, timeoutMs?: number): Promise<unknown>;
|
|
13
|
+
respond(id: string | number, result: unknown): Promise<void>;
|
|
14
|
+
respondError(id: string | number, code: number, message: string): Promise<void>;
|
|
15
|
+
onInbound(handler: (message: CursorAcpInbound) => void): () => void;
|
|
16
|
+
onUnavailable(handler: (code: string) => void): () => void;
|
|
17
|
+
}
|
|
18
|
+
export declare function adaptCursorProcess(process: CursorAcpLike, id?: AcpBackendId): AcpBackendAdapter;
|
|
19
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/acp/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAEnF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAEnE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAA;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,OAAO,IAAI,OAAO,CAAA;IAClB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3E,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/E,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IACnE,aAAa,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC3D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,GAAE,YAAuB,GAAG,iBAAiB,CAYzG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function adaptCursorProcess(process, id = 'cursor') {
|
|
2
|
+
return {
|
|
3
|
+
id,
|
|
4
|
+
start: () => process.start(),
|
|
5
|
+
close: () => process.close(),
|
|
6
|
+
isReady: () => process.isReady(),
|
|
7
|
+
call: (method, params, timeoutMs) => process.call(method, params, timeoutMs),
|
|
8
|
+
respond: (id, result) => process.respond(id, result),
|
|
9
|
+
respondError: (id, code, message) => process.respondError(id, code, message),
|
|
10
|
+
onInbound: handler => process.onInbound(handler),
|
|
11
|
+
onUnavailable: handler => process.onUnavailable(handler),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/acp/adapter.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,kBAAkB,CAAC,OAAsB,EAAE,KAAmB,QAAQ;IACpF,OAAO;QACL,EAAE;QACF,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE;QAC5B,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE;QAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;QAChC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;QAC5E,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC;QACpD,YAAY,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC;QAC5E,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAChD,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;KACzD,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ChildProcessWithoutNullStreams } from 'node:child_process';
|
|
2
|
+
import type { ExecutionOptions } from './types.js';
|
|
3
|
+
export interface SingleExecutionResult {
|
|
4
|
+
conversationId?: string;
|
|
5
|
+
output: string;
|
|
6
|
+
raw: unknown;
|
|
7
|
+
}
|
|
8
|
+
export declare class AntigravityExecutor {
|
|
9
|
+
private activeProcess?;
|
|
10
|
+
/**
|
|
11
|
+
* 非交互式调用:`agy -p "<prompt>" --output-format json`
|
|
12
|
+
*/
|
|
13
|
+
executeOnce(prompt: string, options?: ExecutionOptions): Promise<SingleExecutionResult>;
|
|
14
|
+
/**
|
|
15
|
+
* 启动常驻交互式流式子进程 (stream-json 管道模式)
|
|
16
|
+
*/
|
|
17
|
+
spawnStreamSession(options?: ExecutionOptions): ChildProcessWithoutNullStreams;
|
|
18
|
+
kill(): void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,8BAA8B,EAAE,MAAM,oBAAoB,CAAA;AAElG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,OAAO,CAAA;CACb;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,aAAa,CAAC,CAAc;IAEpC;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,qBAAqB,CAAC;IAuEjC;;OAEG;IACH,kBAAkB,CAAC,OAAO,GAAE,gBAAqB,GAAG,8BAA8B;IAqBlF,IAAI,IAAI,IAAI;CAMb"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { resolveAntigravityBinary } from '../antigravity-process.js';
|
|
3
|
+
export class AntigravityExecutor {
|
|
4
|
+
activeProcess;
|
|
5
|
+
/**
|
|
6
|
+
* 非交互式调用:`agy -p "<prompt>" --output-format json`
|
|
7
|
+
*/
|
|
8
|
+
async executeOnce(prompt, options = {}) {
|
|
9
|
+
const args = ['-p', prompt, '--output-format', 'json'];
|
|
10
|
+
if (options.conversationId) {
|
|
11
|
+
args.push('--conversation', options.conversationId);
|
|
12
|
+
}
|
|
13
|
+
else if (options.continueLast) {
|
|
14
|
+
args.push('-c');
|
|
15
|
+
}
|
|
16
|
+
if (options.skipPermissions) {
|
|
17
|
+
args.push('--dangerously-skip-permissions');
|
|
18
|
+
}
|
|
19
|
+
const timeoutMs = options.timeoutMs ?? 120_000;
|
|
20
|
+
args.push('--print-timeout', String(Math.floor(timeoutMs / 1000)));
|
|
21
|
+
const binary = resolveAntigravityBinary(options.binaryPath);
|
|
22
|
+
const child = spawn(binary, args, {
|
|
23
|
+
cwd: options.cwd ?? process.cwd(),
|
|
24
|
+
env: { ...process.env, ...options.env },
|
|
25
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
26
|
+
});
|
|
27
|
+
this.activeProcess = child;
|
|
28
|
+
let stdout = '';
|
|
29
|
+
let stderr = '';
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
const timer = setTimeout(() => {
|
|
32
|
+
child.kill('SIGTERM');
|
|
33
|
+
reject(new Error(`Antigravity execution timed out after ${timeoutMs}ms`));
|
|
34
|
+
}, timeoutMs);
|
|
35
|
+
timer.unref?.();
|
|
36
|
+
child.stdout?.on('data', chunk => { stdout += chunk.toString('utf-8'); });
|
|
37
|
+
child.stderr?.on('data', chunk => { stderr += chunk.toString('utf-8'); });
|
|
38
|
+
child.on('error', err => {
|
|
39
|
+
clearTimeout(timer);
|
|
40
|
+
this.activeProcess = undefined;
|
|
41
|
+
reject(err);
|
|
42
|
+
});
|
|
43
|
+
child.on('close', code => {
|
|
44
|
+
clearTimeout(timer);
|
|
45
|
+
this.activeProcess = undefined;
|
|
46
|
+
if (code !== 0) {
|
|
47
|
+
return reject(new Error(`agy exited with code ${code}: ${stderr.trim()}`));
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const parsed = JSON.parse(stdout);
|
|
51
|
+
const convId = typeof parsed.conversation_id === 'string'
|
|
52
|
+
? parsed.conversation_id
|
|
53
|
+
: options.conversationId;
|
|
54
|
+
const text = typeof parsed.content === 'string' ? parsed.content : stdout;
|
|
55
|
+
resolve({
|
|
56
|
+
conversationId: convId,
|
|
57
|
+
output: text,
|
|
58
|
+
raw: parsed,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
resolve({
|
|
63
|
+
conversationId: options.conversationId,
|
|
64
|
+
output: stdout,
|
|
65
|
+
raw: stdout,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 启动常驻交互式流式子进程 (stream-json 管道模式)
|
|
73
|
+
*/
|
|
74
|
+
spawnStreamSession(options = {}) {
|
|
75
|
+
const args = ['--input-format', 'stream-json', '--output-format', 'stream-json'];
|
|
76
|
+
if (options.conversationId) {
|
|
77
|
+
args.push('--conversation', options.conversationId);
|
|
78
|
+
}
|
|
79
|
+
else if (options.continueLast) {
|
|
80
|
+
args.push('-c');
|
|
81
|
+
}
|
|
82
|
+
if (options.skipPermissions) {
|
|
83
|
+
args.push('--dangerously-skip-permissions');
|
|
84
|
+
}
|
|
85
|
+
const binary = resolveAntigravityBinary(options.binaryPath);
|
|
86
|
+
return spawn(binary, args, {
|
|
87
|
+
cwd: options.cwd ?? process.cwd(),
|
|
88
|
+
env: { ...process.env, ...options.env },
|
|
89
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
kill() {
|
|
93
|
+
if (this.activeProcess && !this.activeProcess.killed) {
|
|
94
|
+
this.activeProcess.kill('SIGTERM');
|
|
95
|
+
this.activeProcess = undefined;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type AcpImage } from '../../image-content.js';
|
|
2
|
+
export declare const AGY_IMAGE_ROOT: string;
|
|
3
|
+
export declare function prepareAgyImageDirectory(root?: string): Promise<string>;
|
|
4
|
+
export declare function stageAgyImages(sessionId: string, images: AcpImage[], root?: string): Promise<string[]>;
|
|
5
|
+
export declare function agyImagePrompt(text: string, paths: string[]): string;
|
|
6
|
+
export declare function stripAgyImageReferences(text: string): string;
|
|
7
|
+
export declare function agyImageReferences(text: string): string[];
|
|
8
|
+
export declare function readAgyImage(sessionId: string, path: string, root?: string): Promise<Record<string, unknown> | undefined>;
|
|
9
|
+
//# sourceMappingURL=image-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-store.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/image-store.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmD,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAKvG,eAAO,MAAM,cAAc,QAAwF,CAAA;AAWnH,wBAAsB,wBAAwB,CAAC,IAAI,SAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAGrF;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,SAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAI9G;AAsCD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEpE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAOzD;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,SAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAiBvI"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { promises as fs, realpathSync, constants } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join, basename } from 'node:path';
|
|
4
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
5
|
+
import { acpImageContent, parseAcpImage, imageByteLength } from '../../image-content.js';
|
|
6
|
+
const EXTENSIONS = { 'image/png': 'png', 'image/jpeg': 'jpg', 'image/webp': 'webp', 'image/gif': 'gif' };
|
|
7
|
+
const IMAGE_NAME = /^[0-9a-f-]{36}\.(png|jpg|webp|gif)$/;
|
|
8
|
+
const TTL = 24 * 60 * 60 * 1000;
|
|
9
|
+
export const AGY_IMAGE_ROOT = join(realpathSync(tmpdir()), `dsh-remote-agy-images-${process.getuid?.() ?? 'user'}`);
|
|
10
|
+
let stagingChain = Promise.resolve();
|
|
11
|
+
const sessionFolder = (sessionId) => createHash('sha256').update(sessionId).digest('hex');
|
|
12
|
+
async function privateDirectory(path) {
|
|
13
|
+
await fs.mkdir(path, { recursive: true, mode: 0o700 });
|
|
14
|
+
const info = await fs.lstat(path);
|
|
15
|
+
if (!info.isDirectory() || info.isSymbolicLink() || await fs.realpath(path) !== path
|
|
16
|
+
|| (process.getuid && (info.uid !== process.getuid() || (info.mode & 0o077) !== 0)))
|
|
17
|
+
throw new Error('Invalid AGY image cache directory.');
|
|
18
|
+
}
|
|
19
|
+
export async function prepareAgyImageDirectory(root = AGY_IMAGE_ROOT) {
|
|
20
|
+
await privateDirectory(root);
|
|
21
|
+
return root;
|
|
22
|
+
}
|
|
23
|
+
export function stageAgyImages(sessionId, images, root = AGY_IMAGE_ROOT) {
|
|
24
|
+
const result = stagingChain.then(() => stageImages(sessionId, images, root));
|
|
25
|
+
stagingChain = result.then(() => undefined, () => undefined);
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
async function stageImages(sessionId, images, root) {
|
|
29
|
+
await prepareAgyImageDirectory(root);
|
|
30
|
+
// Only generated session directories are visited; symlinks are never followed.
|
|
31
|
+
let total = 0;
|
|
32
|
+
for (const entry of await fs.readdir(root)) {
|
|
33
|
+
if (!/^[0-9a-f]{64}$/.test(entry))
|
|
34
|
+
continue;
|
|
35
|
+
const dir = join(root, entry);
|
|
36
|
+
const info = await fs.lstat(dir);
|
|
37
|
+
if (!info.isDirectory() || info.isSymbolicLink())
|
|
38
|
+
continue;
|
|
39
|
+
for (const name of await fs.readdir(dir)) {
|
|
40
|
+
if (!IMAGE_NAME.test(name))
|
|
41
|
+
continue;
|
|
42
|
+
const path = join(dir, name);
|
|
43
|
+
const file = await fs.lstat(path);
|
|
44
|
+
if (!file.isFile() || file.isSymbolicLink())
|
|
45
|
+
continue;
|
|
46
|
+
if (Date.now() - file.mtimeMs > TTL)
|
|
47
|
+
await fs.unlink(path);
|
|
48
|
+
else
|
|
49
|
+
total += file.size;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const parsed = images.map(parseAcpImage);
|
|
53
|
+
if (total + parsed.reduce((sum, image) => sum + imageByteLength(image.data), 0) > 512 * 1024 * 1024)
|
|
54
|
+
throw new Error('AGY temporary image cache is full.');
|
|
55
|
+
const directory = join(root, sessionFolder(sessionId));
|
|
56
|
+
await privateDirectory(directory);
|
|
57
|
+
const paths = [];
|
|
58
|
+
try {
|
|
59
|
+
for (const image of parsed) {
|
|
60
|
+
const path = join(directory, `${randomUUID()}.${EXTENSIONS[image.mimeType]}`);
|
|
61
|
+
await fs.writeFile(path, Buffer.from(image.data, 'base64'), { flag: 'wx', mode: 0o600 });
|
|
62
|
+
paths.push(path);
|
|
63
|
+
}
|
|
64
|
+
return paths;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
await Promise.all(paths.map(path => fs.unlink(path).catch(() => undefined)));
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export function agyImagePrompt(text, paths) {
|
|
72
|
+
return `${text}\n<AGY_REMOTE_IMAGES>\nUser attached images. Use view_file to inspect these images before answering.\n${JSON.stringify(paths)}\n</AGY_REMOTE_IMAGES>`;
|
|
73
|
+
}
|
|
74
|
+
export function stripAgyImageReferences(text) {
|
|
75
|
+
return text.replace(/\n?<AGY_REMOTE_IMAGES>[\s\S]*?<\/AGY_REMOTE_IMAGES>/g, '').trim();
|
|
76
|
+
}
|
|
77
|
+
export function agyImageReferences(text) {
|
|
78
|
+
const block = /<AGY_REMOTE_IMAGES>\n[^\n]*\n([^\n]+)\n<\/AGY_REMOTE_IMAGES>/.exec(text);
|
|
79
|
+
if (!block)
|
|
80
|
+
return [];
|
|
81
|
+
try {
|
|
82
|
+
const value = JSON.parse(block[1]);
|
|
83
|
+
return Array.isArray(value) && value.length <= 4 ? value.filter((path) => typeof path === 'string') : [];
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export async function readAgyImage(sessionId, path, root = AGY_IMAGE_ROOT) {
|
|
90
|
+
const name = basename(path);
|
|
91
|
+
if (!IMAGE_NAME.test(name) || path !== join(root, sessionFolder(sessionId), name))
|
|
92
|
+
return undefined;
|
|
93
|
+
try {
|
|
94
|
+
await privateDirectory(root);
|
|
95
|
+
await privateDirectory(join(root, sessionFolder(sessionId)));
|
|
96
|
+
const info = await fs.lstat(path);
|
|
97
|
+
if (!info.isFile() || info.isSymbolicLink() || info.size > 8 * 1024 * 1024 || Date.now() - info.mtimeMs > TTL)
|
|
98
|
+
return undefined;
|
|
99
|
+
const file = await fs.open(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
|
|
100
|
+
try {
|
|
101
|
+
const current = await file.stat();
|
|
102
|
+
if (current.ino !== info.ino || current.dev !== info.dev || current.size !== info.size)
|
|
103
|
+
return undefined;
|
|
104
|
+
const mediaType = Object.entries(EXTENSIONS).find(([, ext]) => name.endsWith(`.${ext}`))?.[0];
|
|
105
|
+
const image = parseAcpImage({ type: 'image', mimeType: mediaType, data: (await file.readFile()).toString('base64') });
|
|
106
|
+
return acpImageContent(image, `agy-image:${name}`);
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
await file.close();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=image-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-store.js","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/image-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface AgySelection {
|
|
2
|
+
provider: 'antigravity';
|
|
3
|
+
model: string;
|
|
4
|
+
reasoningEffort?: string;
|
|
5
|
+
}
|
|
6
|
+
interface Model {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
reasoning?: {
|
|
10
|
+
efforts: Array<{
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
}>;
|
|
14
|
+
defaultEffort?: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface AgyCatalog {
|
|
18
|
+
groups: Array<{
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
models: Model[];
|
|
22
|
+
}>;
|
|
23
|
+
variants: Map<string, string>;
|
|
24
|
+
}
|
|
25
|
+
/** The catalog belongs to the running Host backend, like the CodeX model directory. */
|
|
26
|
+
export declare function cachedAgyModels(load: () => Promise<AgyCatalog>): () => Promise<AgyCatalog>;
|
|
27
|
+
/** Model identifiers and effort variants come from the installed CLI, never a static catalog. */
|
|
28
|
+
export declare function parseAgyModels(output: string): AgyCatalog;
|
|
29
|
+
export declare function readAgyModels(binary: string): Promise<AgyCatalog>;
|
|
30
|
+
export declare function agySelectionArgs(catalog: AgyCatalog, modelId: string, effort?: string): {
|
|
31
|
+
selection: AgySelection;
|
|
32
|
+
args: string[];
|
|
33
|
+
};
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/models.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAAG,QAAQ,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE;AAClG,UAAU,KAAK;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;AAClI,MAAM,WAAW,UAAU;IAAG,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,EAAE,CAAA;KAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE;AAG3H,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAS1F;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAoBzD;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAKvE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAOnI"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
const exec = promisify(execFile);
|
|
4
|
+
/** The catalog belongs to the running Host backend, like the CodeX model directory. */
|
|
5
|
+
export function cachedAgyModels(load) {
|
|
6
|
+
let catalog;
|
|
7
|
+
let pending;
|
|
8
|
+
return () => {
|
|
9
|
+
if (catalog)
|
|
10
|
+
return Promise.resolve(catalog);
|
|
11
|
+
pending ??= load().then(value => { catalog = value; return value; })
|
|
12
|
+
.finally(() => { pending = undefined; });
|
|
13
|
+
return pending;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/** Model identifiers and effort variants come from the installed CLI, never a static catalog. */
|
|
17
|
+
export function parseAgyModels(output) {
|
|
18
|
+
const models = new Map();
|
|
19
|
+
const variants = new Map();
|
|
20
|
+
for (const line of output.split(/\r?\n/)) {
|
|
21
|
+
const match = line.match(/^([A-Za-z0-9_.-]{1,128})\t([^\t]{1,256})$/);
|
|
22
|
+
if (!match)
|
|
23
|
+
continue;
|
|
24
|
+
const wireId = match[1];
|
|
25
|
+
const suffix = wireId.match(/-(low|medium|high|xhigh|max|thinking)$/)?.[1];
|
|
26
|
+
const effort = suffix ?? (/\(Thinking\)$/i.test(match[2]) ? 'thinking' : undefined);
|
|
27
|
+
const id = suffix ? wireId.slice(0, -(suffix.length + 1)) : wireId;
|
|
28
|
+
const model = models.get(id) ?? { id, name: match[2].replace(/\s+\((Low|Medium|High|Xhigh|Max|Thinking)\)$/i, '') };
|
|
29
|
+
if (effort) {
|
|
30
|
+
model.reasoning ??= { efforts: [], defaultEffort: effort };
|
|
31
|
+
if (!model.reasoning.efforts.some(item => item.id === effort))
|
|
32
|
+
model.reasoning.efforts.push({ id: effort, name: effort[0].toUpperCase() + effort.slice(1) });
|
|
33
|
+
}
|
|
34
|
+
models.set(id, model);
|
|
35
|
+
variants.set(`${id}/${effort ?? ''}`, wireId);
|
|
36
|
+
}
|
|
37
|
+
if (!models.size)
|
|
38
|
+
throw new Error('The installed AGY CLI did not return a model catalog.');
|
|
39
|
+
return { groups: [{ id: 'antigravity', name: 'Antigravity', models: [...models.values()] }], variants };
|
|
40
|
+
}
|
|
41
|
+
export async function readAgyModels(binary) {
|
|
42
|
+
try {
|
|
43
|
+
const result = await exec(binary, ['models'], { timeout: 30_000, maxBuffer: 1024 * 1024, encoding: 'utf8' });
|
|
44
|
+
return parseAgyModels(result.stdout);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
throw new Error('The installed AGY model catalog is unavailable. Retry after checking the Host CLI.');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function agySelectionArgs(catalog, modelId, effort) {
|
|
51
|
+
const model = catalog.groups[0].models.find(item => item.id === modelId);
|
|
52
|
+
const chosenEffort = effort ?? model?.reasoning?.defaultEffort;
|
|
53
|
+
const wireId = catalog.variants.get(`${modelId}/${chosenEffort ?? ''}`);
|
|
54
|
+
if (!model || !wireId)
|
|
55
|
+
throw new Error('The selected AGY model or reasoning effort is unavailable.');
|
|
56
|
+
return { selection: { provider: 'antigravity', model: modelId, ...(chosenEffort ? { reasoningEffort: chosenEffort } : {}) },
|
|
57
|
+
args: ['--model', wireId, ...(chosenEffort && chosenEffort !== 'thinking' ? ['--effort', chosenEffort] : [])] };
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { AntigravityExecutor, type SingleExecutionResult } from './executor.js';
|
|
2
|
+
import { TranscriptWatcher } from './transcript-watcher.js';
|
|
3
|
+
import type { ExecutionOptions } from './types.js';
|
|
4
|
+
export declare class AntigravitySession {
|
|
5
|
+
readonly conversationId: string;
|
|
6
|
+
readonly watcher: TranscriptWatcher;
|
|
7
|
+
private readonly executor;
|
|
8
|
+
private readonly defaultOptions;
|
|
9
|
+
constructor(conversationId: string, watcher: TranscriptWatcher, executor: AntigravityExecutor, defaultOptions?: ExecutionOptions);
|
|
10
|
+
/**
|
|
11
|
+
* 发送 Prompt 并等待完成;期间 watcher 会持续抛出思考与工具调用事件
|
|
12
|
+
*/
|
|
13
|
+
prompt(text: string, options?: ExecutionOptions): Promise<SingleExecutionResult>;
|
|
14
|
+
close(): void;
|
|
15
|
+
}
|
|
16
|
+
export declare class AntigravityService {
|
|
17
|
+
private readonly executor;
|
|
18
|
+
constructor(executor?: AntigravityExecutor);
|
|
19
|
+
/**
|
|
20
|
+
* 创建新会话并执行首轮 Prompt
|
|
21
|
+
*/
|
|
22
|
+
createSession(initialPrompt: string, options?: ExecutionOptions): Promise<{
|
|
23
|
+
session: AntigravitySession;
|
|
24
|
+
result: SingleExecutionResult;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* 恢复已有会话
|
|
28
|
+
*/
|
|
29
|
+
resumeSession(conversationId: string, options?: ExecutionOptions): AntigravitySession;
|
|
30
|
+
/**
|
|
31
|
+
* 单次无状态执行
|
|
32
|
+
*/
|
|
33
|
+
executeOnce(prompt: string, options?: ExecutionOptions): Promise<SingleExecutionResult>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapters/antigravity/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,qBAAa,kBAAkB;IAE3B,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,OAAO,EAAE,iBAAiB;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAHtB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,iBAAiB,EAClB,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,GAAE,gBAAqB;IAGxD;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAW1F,KAAK,IAAI,IAAI;CAId;AAED,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,GAAE,mBAA+C;IAEtF;;OAEG;IACG,aAAa,CACjB,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC;QAAE,OAAO,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,qBAAqB,CAAA;KAAE,CAAC;IAY1E;;OAEG;IACH,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,kBAAkB;IASzF;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAGlG"}
|