dsh-agy-link 0.1.2

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/docs/AUTH.md ADDED
@@ -0,0 +1,19 @@
1
+ # Authentication notes
2
+
3
+ The plugin never stores credentials. Login is the official agy CLI flow:
4
+
5
+ 1. `/agy auth` spawns an agy probe that prints the Google consent URL.
6
+ 2. You open the URL, approve, and get an authorization code.
7
+ 3. `/agy auth-code <code>` (or the GUI paste box) feeds the code to the
8
+ still-running probe on stdin; agy completes the exchange itself.
9
+
10
+ The token lands wherever agy itself puts it
11
+ (`~/.gemini/antigravity-cli/antigravity-oauth-token`). The plugin:
12
+
13
+ - never reads, copies, moves, or deletes that file;
14
+ - never logs authorization codes (the `/agy doctor` report redacts auth
15
+ URLs, `4/...` codes, and bearer tokens before writing);
16
+ - kills the login probe (process group) on cancel/dispose.
17
+
18
+ Expiry: when the token expires mid-session, calls fail fast with an
19
+ `AUTH` error pointing at `/agy auth`; no retries burn your quota.
@@ -0,0 +1,41 @@
1
+ # Known gaps
2
+
3
+ Deliberate v1 boundaries and upstream-behavior notes.
4
+
5
+ ## Not forwarded to agy
6
+
7
+ - **Images / attachments** — agy print mode (`-p`) accepts text only.
8
+ Image blocks in DSH messages are skipped silently.
9
+ - **DSH tools** — agy runs its own closed tool loop; DSH tool schemas are
10
+ not exported to it. The reverse direction (agy calling DSH tools over MCP)
11
+ is tracked as future work.
12
+ - **Structured outputs** — `--json-schema` exists on agy but is not wired
13
+ through DSH tool-call generation in v1.
14
+
15
+ ## Mapping choices
16
+
17
+ - agy tool activity becomes **reasoning-block annotations**
18
+ (`[agy tool: name] ... -> output`), not DSH tool-call blocks — there is no
19
+ DSH-side tool round-trip to honor.
20
+ - Gemini effort suffixes fold into one base model with selectable efforts
21
+ (`gemini-3-6-flash` + `--effort`); Claude / GPT-OSS slugs stay verbatim
22
+ (agy rejects `--effort` for them).
23
+ - Compaction / session-title auxiliary calls run as one-shot agy turns in
24
+ forced `plan` mode, capped at 800K chars of history.
25
+
26
+ ## Upstream behaviors observed
27
+
28
+ - Permission prompts hang print mode (upstream issue #318) — hence the
29
+ permission-mode design.
30
+ - `--sandbox` must not combine with `--dangerously-skip-permissions`
31
+ (upstream issue #36).
32
+ - First unauthenticated call takes ~60-70s to fail (agy waits for a pasted
33
+ code); later failures are faster.
34
+
35
+ ## Fallbacks
36
+
37
+ - If `agy models` fails (signed out, old CLI), a bundled fallback catalog is
38
+ served so the model picker is never empty; unknown ids are still accepted.
39
+ - Conversation-id discovery prefers stream-embedded ids and falls back to a
40
+ conversations-directory snapshot diff (newest file wins; ambiguity is
41
+ tolerated).
@@ -0,0 +1,29 @@
1
+ # Security notes
2
+
3
+ Threat model and boundaries for dsh-agy-link.
4
+
5
+ ## What the plugin executes
6
+
7
+ - Only the agy binary resolved from config (`agyBin`) or `PATH` /
8
+ `~/.local/bin`. No shell interpolation: argv is passed as an array.
9
+ - Prompt text is passed as a single `-p` argument, never through a shell.
10
+ - Every spawn is its own detached process group; watchdog + abort signal
11
+ kill the whole tree (no orphaned agy processes).
12
+
13
+ ## What it can do to your machine
14
+
15
+ Whatever agy itself may do under the configured permission mode. **skip**
16
+ (`--dangerously-skip-permissions`) grants unattended file writes and shell
17
+ execution inside agy's workspace — treat it like giving any other agent
18
+ skip-permissions. The GUI marks this mode red for a reason.
19
+
20
+ ## What it never touches
21
+
22
+ - The OAuth token file (see [AUTH.md](AUTH.md)).
23
+ - DSH-side secrets, API keys, or other providers' configuration.
24
+
25
+ ## Report hygiene
26
+
27
+ `/agy doctor` writes its report with redaction: Google auth URLs,
28
+ `4/...` authorization codes, `ya29.*` tokens, and `Bearer` headers are
29
+ stripped before the file hits disk. Still read it before attaching.
@@ -0,0 +1,41 @@
1
+ # Market PR draft (awesome-dsh-plugin)
2
+
3
+ Target: awesome-dsh-plugin repository, `data/plugins/<owner>__dsh-agy-link.yml`.
4
+ Replace `<owner>` with the GitHub owner chosen at publish time. File the PR
5
+ after: npm published, GitHub repo created, >= 10 commits, >= 1 day old,
6
+ topic `dsh-plugin` set.
7
+
8
+ ---
9
+
10
+ ```yaml
11
+ name: dsh-agy-link
12
+ description: Google Antigravity (agy CLI) models for DSH — streaming chat, thinking, tool activity, usage, in-GUI Google OAuth login.
13
+ npm: dsh-agy-link
14
+ repository: https://github.com/<owner>/dsh-agy-link
15
+ category: model
16
+ tags:
17
+ - antigravity
18
+ - gemini
19
+ - agy
20
+ - model-provider
21
+ ```
22
+
23
+ PR body draft:
24
+
25
+ ```markdown
26
+ ## Add dsh-agy-link (model)
27
+
28
+ - **npm**: https://www.npmjs.com/package/dsh-agy-link
29
+ - **repo**: https://github.com/<owner>/dsh-agy-link
30
+ - **category**: model
31
+
32
+ Brings Google Antigravity models (Gemini / Claude / GPT-OSS slugs exposed by
33
+ the agy CLI) into DSH as a first-class provider route: full streaming with
34
+ thinking and tool-activity annotation, token usage, session-conversation
35
+ binding, model discovery with effort folding, in-GUI Google OAuth login with
36
+ QR, an agy_ask delegation tool, and a /agy command family with a redacted
37
+ doctor export. Dormant-safe when agy is missing or signed out.
38
+
39
+ Checklist: dsh bundle manifest present; >= 10 commits; repo age >= 1 day;
40
+ `dsh-plugin` topic set on the repository.
41
+ ```
package/package.json ADDED
@@ -0,0 +1,100 @@
1
+ {
2
+ "name": "dsh-agy-link",
3
+ "version": "0.1.2",
4
+ "description": "Google Antigravity (agy CLI) models for DeepSeek Harness — stream Gemini/Claude/GPT-OSS subscriptions into DSH with thinking, tool activity, token usage and in-GUI Google OAuth login.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "keywords": [
8
+ "dsh-plugin",
9
+ "dsh",
10
+ "deepseek-harness",
11
+ "antigravity",
12
+ "agy",
13
+ "gemini"
14
+ ],
15
+ "main": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "./client": "./dist/client.js",
23
+ "./cordis.patch.yml": "./cordis.patch.yml",
24
+ "./package.json": "./package.json"
25
+ },
26
+ "dependencies": {
27
+ "qrcode": "^1.5.4"
28
+ },
29
+ "peerDependencies": {
30
+ "@deepseek-ai/cordis": "*",
31
+ "@deepseek-ai/dsh-commands": "*",
32
+ "@deepseek-ai/dsh-llm": "*",
33
+ "@deepseek-ai/dsh-tools": "*",
34
+ "react": "^18.0.0"
35
+ },
36
+ "peerDependenciesMeta": {
37
+ "react": {
38
+ "optional": true
39
+ },
40
+ "@deepseek-ai/cordis": {
41
+ "optional": true
42
+ },
43
+ "@deepseek-ai/dsh-commands": {
44
+ "optional": true
45
+ },
46
+ "@deepseek-ai/dsh-llm": {
47
+ "optional": true
48
+ },
49
+ "@deepseek-ai/dsh-tools": {
50
+ "optional": true
51
+ }
52
+ },
53
+ "devDependencies": {
54
+ "@deepseek-ai/cordis": "^4.0.1",
55
+ "@deepseek-ai/dsh-commands": "^0.1.0-rc.6",
56
+ "@deepseek-ai/dsh-llm": "^0.1.0-rc.6",
57
+ "@deepseek-ai/dsh-tools": "^0.1.0-rc.6",
58
+ "@types/node": "^24.3.0",
59
+ "@types/qrcode": "^1.5.5",
60
+ "tsdown": "^0.22.14",
61
+ "typescript": "^5.9.2"
62
+ },
63
+ "dsh": {
64
+ "bundle": {
65
+ "patch": "./cordis.patch.yml"
66
+ },
67
+ "client": {
68
+ "inject": [
69
+ "slots"
70
+ ],
71
+ "platform": "web"
72
+ }
73
+ },
74
+ "files": [
75
+ "dist",
76
+ "cordis.patch.yml",
77
+ "README.md",
78
+ "README.zh.md",
79
+ "LICENSE",
80
+ "CHANGELOG.md",
81
+ "docs"
82
+ ],
83
+ "scripts": {
84
+ "build": "tsdown",
85
+ "check": "tsc --noEmit",
86
+ "test": "node --experimental-transform-types --test \"test/**/*.test.ts\"",
87
+ "prepack": "npm run build"
88
+ },
89
+ "engines": {
90
+ "node": ">=24.0.0"
91
+ },
92
+ "repository": {
93
+ "type": "git",
94
+ "url": "git+ssh://git@github.com/amlyczz/dsh-agy-link.git"
95
+ },
96
+ "bugs": {
97
+ "url": "https://github.com/amlyczz/dsh-agy-link/issues"
98
+ },
99
+ "homepage": "https://github.com/amlyczz/dsh-agy-link#readme"
100
+ }