deck-plugin-sdk 1.9.0 → 1.10.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/package.json +60 -60
- package/permissions.json +231 -230
- package/shim/bridge.js +1 -0
- package/shim/p2p.js +16 -16
- package/shim/terminals.js +6 -0
- package/template/plugin.json +10 -10
- package/types/components/ConfirmDialog.d.ts +2 -0
- package/types/components/ui.d.ts +4 -1
- package/types/core/bridge.d.ts +54 -1
- package/types/core/browser.d.ts +13 -0
- package/types/core/fileview.d.ts +6 -2
- package/types/core/notifications.d.ts +2 -0
- package/types/core/shellpath.d.ts +43 -3
- package/types/core/terminals.d.ts +55 -2
package/package.json
CHANGED
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "deck-plugin-sdk",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Build a plugin for Deck, outside the Deck repository.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"bin": {
|
|
8
|
-
"deck-plugin": "bin/deck-plugin.mjs"
|
|
9
|
-
},
|
|
10
|
-
"exports": {
|
|
11
|
-
"./build": "./build-plugin.mjs",
|
|
12
|
-
"./*": {
|
|
13
|
-
"types": "./shim/*.d.ts",
|
|
14
|
-
"default": "./shim/*.js"
|
|
15
|
-
},
|
|
16
|
-
"./package.json": "./package.json"
|
|
17
|
-
},
|
|
18
|
-
"files": [
|
|
19
|
-
"bin",
|
|
20
|
-
"shim",
|
|
21
|
-
"types",
|
|
22
|
-
"template",
|
|
23
|
-
"build-plugin.mjs",
|
|
24
|
-
"packages.mjs",
|
|
25
|
-
"README.md",
|
|
26
|
-
"permissions.json",
|
|
27
|
-
"publish.mjs",
|
|
28
|
-
"validate.mjs"
|
|
29
|
-
],
|
|
30
|
-
"dependencies": {
|
|
31
|
-
"esbuild": "^0.28.0"
|
|
32
|
-
},
|
|
33
|
-
"peerDependencies": {
|
|
34
|
-
"@types/react": "^19.0.0",
|
|
35
|
-
"framer-motion": "^13.0.0",
|
|
36
|
-
"lucide-react": "^1.0.0",
|
|
37
|
-
"monaco-editor": "^0.56.0",
|
|
38
|
-
"react": "^19.0.0",
|
|
39
|
-
"typescript": "^5.0.0"
|
|
40
|
-
},
|
|
41
|
-
"peerDependenciesMeta": {
|
|
42
|
-
"framer-motion": {
|
|
43
|
-
"optional": true
|
|
44
|
-
},
|
|
45
|
-
"monaco-editor": {
|
|
46
|
-
"optional": true
|
|
47
|
-
},
|
|
48
|
-
"typescript": {
|
|
49
|
-
"optional": true
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
"engines": {
|
|
53
|
-
"node": ">=20"
|
|
54
|
-
},
|
|
55
|
-
"keywords": [
|
|
56
|
-
"deck",
|
|
57
|
-
"plugin",
|
|
58
|
-
"sdk"
|
|
59
|
-
]
|
|
60
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "deck-plugin-sdk",
|
|
3
|
+
"version": "1.10.1",
|
|
4
|
+
"description": "Build a plugin for Deck, outside the Deck repository.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"bin": {
|
|
8
|
+
"deck-plugin": "bin/deck-plugin.mjs"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
"./build": "./build-plugin.mjs",
|
|
12
|
+
"./*": {
|
|
13
|
+
"types": "./shim/*.d.ts",
|
|
14
|
+
"default": "./shim/*.js"
|
|
15
|
+
},
|
|
16
|
+
"./package.json": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"bin",
|
|
20
|
+
"shim",
|
|
21
|
+
"types",
|
|
22
|
+
"template",
|
|
23
|
+
"build-plugin.mjs",
|
|
24
|
+
"packages.mjs",
|
|
25
|
+
"README.md",
|
|
26
|
+
"permissions.json",
|
|
27
|
+
"publish.mjs",
|
|
28
|
+
"validate.mjs"
|
|
29
|
+
],
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"esbuild": "^0.28.0"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@types/react": "^19.0.0",
|
|
35
|
+
"framer-motion": "^13.0.0",
|
|
36
|
+
"lucide-react": "^1.0.0",
|
|
37
|
+
"monaco-editor": "^0.56.0",
|
|
38
|
+
"react": "^19.0.0",
|
|
39
|
+
"typescript": "^5.0.0"
|
|
40
|
+
},
|
|
41
|
+
"peerDependenciesMeta": {
|
|
42
|
+
"framer-motion": {
|
|
43
|
+
"optional": true
|
|
44
|
+
},
|
|
45
|
+
"monaco-editor": {
|
|
46
|
+
"optional": true
|
|
47
|
+
},
|
|
48
|
+
"typescript": {
|
|
49
|
+
"optional": true
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=20"
|
|
54
|
+
},
|
|
55
|
+
"keywords": [
|
|
56
|
+
"deck",
|
|
57
|
+
"plugin",
|
|
58
|
+
"sdk"
|
|
59
|
+
]
|
|
60
|
+
}
|
package/permissions.json
CHANGED
|
@@ -1,230 +1,231 @@
|
|
|
1
|
-
{
|
|
2
|
-
"generated": "by sdk/gen-permissions.mjs from src/core/permissions.ts; do not edit",
|
|
3
|
-
"permissions": {
|
|
4
|
-
"files": "Read and change files anywhere on this PC",
|
|
5
|
-
"processes": "Run programs and commands",
|
|
6
|
-
"git": "Read and change git repositories, and push",
|
|
7
|
-
"network": "Connect to servers: web requests, SSH, databases and other Decks",
|
|
8
|
-
"terminals": "Use your terminals and the AI agents running in them",
|
|
9
|
-
"browser": "Control Deck's browser and the pages open in it",
|
|
10
|
-
"secrets": "Use your saved passwords, your Google account and sudo passwords",
|
|
11
|
-
"system": "Change this PC's apps, startup programs, wallpaper and running processes",
|
|
12
|
-
"deck": "Change Deck itself: its settings, backups, plugins and languages"
|
|
13
|
-
},
|
|
14
|
-
"bridge": {
|
|
15
|
-
"adblockConfig": "browser",
|
|
16
|
-
"adblockInfo": "browser",
|
|
17
|
-
"adblockRebuild": "browser",
|
|
18
|
-
"adblockUpdate": "browser",
|
|
19
|
-
"agentClis": "terminals",
|
|
20
|
-
"agentMcpStatus": "terminals",
|
|
21
|
-
"agentStop": "terminals",
|
|
22
|
-
"askSudoPassword": "secrets",
|
|
23
|
-
"backupExport": "deck",
|
|
24
|
-
"backupInspect": "deck",
|
|
25
|
-
"backupRestore": "deck",
|
|
26
|
-
"bookmarksBarMode": "browser",
|
|
27
|
-
"browserAgentAnswer": "browser",
|
|
28
|
-
"browserAgentConfig": "browser",
|
|
29
|
-
"browserAgentFillAnswer": "browser",
|
|
30
|
-
"browserBounds": "browser",
|
|
31
|
-
"browserCapture": "browser",
|
|
32
|
-
"browserCdp": "browser",
|
|
33
|
-
"browserClear": "browser",
|
|
34
|
-
"browserClose": "browser",
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
"
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
"
|
|
128
|
-
"
|
|
129
|
-
"
|
|
130
|
-
"
|
|
131
|
-
"
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
"
|
|
140
|
-
"
|
|
141
|
-
"
|
|
142
|
-
"
|
|
143
|
-
"
|
|
144
|
-
"
|
|
145
|
-
"
|
|
146
|
-
"
|
|
147
|
-
"
|
|
148
|
-
"
|
|
149
|
-
"
|
|
150
|
-
"
|
|
151
|
-
"
|
|
152
|
-
"
|
|
153
|
-
"
|
|
154
|
-
"
|
|
155
|
-
"
|
|
156
|
-
"
|
|
157
|
-
"
|
|
158
|
-
"
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
"
|
|
162
|
-
"
|
|
163
|
-
"
|
|
164
|
-
"
|
|
165
|
-
"
|
|
166
|
-
"
|
|
167
|
-
"
|
|
168
|
-
"
|
|
169
|
-
"
|
|
170
|
-
"
|
|
171
|
-
"
|
|
172
|
-
"
|
|
173
|
-
"
|
|
174
|
-
"
|
|
175
|
-
"
|
|
176
|
-
"
|
|
177
|
-
"
|
|
178
|
-
"
|
|
179
|
-
"
|
|
180
|
-
"
|
|
181
|
-
"
|
|
182
|
-
"
|
|
183
|
-
"
|
|
184
|
-
"
|
|
185
|
-
"
|
|
186
|
-
"
|
|
187
|
-
"
|
|
188
|
-
"
|
|
189
|
-
"
|
|
190
|
-
"
|
|
191
|
-
"
|
|
192
|
-
"
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
"
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
"
|
|
201
|
-
"
|
|
202
|
-
"
|
|
203
|
-
"
|
|
204
|
-
"
|
|
205
|
-
"
|
|
206
|
-
"
|
|
207
|
-
"
|
|
208
|
-
"
|
|
209
|
-
"
|
|
210
|
-
"
|
|
211
|
-
"
|
|
212
|
-
"
|
|
213
|
-
"
|
|
214
|
-
"
|
|
215
|
-
"
|
|
216
|
-
"
|
|
217
|
-
"
|
|
218
|
-
"
|
|
219
|
-
"
|
|
220
|
-
"
|
|
221
|
-
"
|
|
222
|
-
"
|
|
223
|
-
"
|
|
224
|
-
"
|
|
225
|
-
"
|
|
226
|
-
"
|
|
227
|
-
"
|
|
228
|
-
"
|
|
229
|
-
|
|
230
|
-
|
|
1
|
+
{
|
|
2
|
+
"generated": "by sdk/gen-permissions.mjs from src/core/permissions.ts; do not edit",
|
|
3
|
+
"permissions": {
|
|
4
|
+
"files": "Read and change files anywhere on this PC",
|
|
5
|
+
"processes": "Run programs and commands",
|
|
6
|
+
"git": "Read and change git repositories, and push",
|
|
7
|
+
"network": "Connect to servers: web requests, SSH, databases and other Decks",
|
|
8
|
+
"terminals": "Use your terminals and the AI agents running in them",
|
|
9
|
+
"browser": "Control Deck's browser and the pages open in it",
|
|
10
|
+
"secrets": "Use your saved passwords, your Google account and sudo passwords",
|
|
11
|
+
"system": "Change this PC's apps, startup programs, wallpaper and running processes",
|
|
12
|
+
"deck": "Change Deck itself: its settings, backups, plugins and languages"
|
|
13
|
+
},
|
|
14
|
+
"bridge": {
|
|
15
|
+
"adblockConfig": "browser",
|
|
16
|
+
"adblockInfo": "browser",
|
|
17
|
+
"adblockRebuild": "browser",
|
|
18
|
+
"adblockUpdate": "browser",
|
|
19
|
+
"agentClis": "terminals",
|
|
20
|
+
"agentMcpStatus": "terminals",
|
|
21
|
+
"agentStop": "terminals",
|
|
22
|
+
"askSudoPassword": "secrets",
|
|
23
|
+
"backupExport": "deck",
|
|
24
|
+
"backupInspect": "deck",
|
|
25
|
+
"backupRestore": "deck",
|
|
26
|
+
"bookmarksBarMode": "browser",
|
|
27
|
+
"browserAgentAnswer": "browser",
|
|
28
|
+
"browserAgentConfig": "browser",
|
|
29
|
+
"browserAgentFillAnswer": "browser",
|
|
30
|
+
"browserBounds": "browser",
|
|
31
|
+
"browserCapture": "browser",
|
|
32
|
+
"browserCdp": "browser",
|
|
33
|
+
"browserClear": "browser",
|
|
34
|
+
"browserClose": "browser",
|
|
35
|
+
"browserCut": "browser",
|
|
36
|
+
"browserDefaultRegister": "browser",
|
|
37
|
+
"browserDefaultStatus": "browser",
|
|
38
|
+
"browserDevtools": "browser",
|
|
39
|
+
"browserDownload": "browser",
|
|
40
|
+
"browserFind": "browser",
|
|
41
|
+
"browserHistoryCount": "browser",
|
|
42
|
+
"browserHistoryForgetRange": "browser",
|
|
43
|
+
"browserHistoryForgetUrl": "browser",
|
|
44
|
+
"browserHistoryList": "browser",
|
|
45
|
+
"browserHistoryRecent": "browser",
|
|
46
|
+
"browserHistorySuggest": "browser",
|
|
47
|
+
"browserHistoryVisit": "browser",
|
|
48
|
+
"browserMute": "browser",
|
|
49
|
+
"browserNav": "browser",
|
|
50
|
+
"browserNotificationClicked": "browser",
|
|
51
|
+
"browserOpen": "browser",
|
|
52
|
+
"browserOpenAppLink": "browser",
|
|
53
|
+
"browserPermissionAnswer": "browser",
|
|
54
|
+
"browserPermissions": "browser",
|
|
55
|
+
"browserPermissionSet": "browser",
|
|
56
|
+
"browserPrint": "browser",
|
|
57
|
+
"browserPrivacy": "browser",
|
|
58
|
+
"browserReloadHung": "browser",
|
|
59
|
+
"browserSetKeys": "browser",
|
|
60
|
+
"browserSite": "browser",
|
|
61
|
+
"browserSiteAnswer": "browser",
|
|
62
|
+
"browserSiteClear": "browser",
|
|
63
|
+
"browserSleep": "browser",
|
|
64
|
+
"browserWindowFullscreen": "browser",
|
|
65
|
+
"browserZoom": "browser",
|
|
66
|
+
"claudePlanLimits": "terminals",
|
|
67
|
+
"claudeUsage": "terminals",
|
|
68
|
+
"clearWallpaper": "system",
|
|
69
|
+
"convertFileSrc": "files",
|
|
70
|
+
"dbConnect": "network",
|
|
71
|
+
"dbDisconnect": "network",
|
|
72
|
+
"dbQuery": "network",
|
|
73
|
+
"dbSchema": "network",
|
|
74
|
+
"deleteIconPack": "deck",
|
|
75
|
+
"exec": "processes",
|
|
76
|
+
"extensionInstallFolder": "browser",
|
|
77
|
+
"extensionInstallStore": "browser",
|
|
78
|
+
"extensionPopup": "browser",
|
|
79
|
+
"extensionPopupClose": "browser",
|
|
80
|
+
"extensionReload": "browser",
|
|
81
|
+
"extensionRemove": "browser",
|
|
82
|
+
"extensionSetEnabled": "browser",
|
|
83
|
+
"extensionsList": "browser",
|
|
84
|
+
"fsCopy": "files",
|
|
85
|
+
"fsCreateDir": "files",
|
|
86
|
+
"fsCreateFile": "files",
|
|
87
|
+
"fsDelete": "files",
|
|
88
|
+
"fsDrives": "files",
|
|
89
|
+
"fsFiles": "files",
|
|
90
|
+
"fsFind": "files",
|
|
91
|
+
"fsHash": "files",
|
|
92
|
+
"fsList": "files",
|
|
93
|
+
"fsMove": "files",
|
|
94
|
+
"fsOpen": "files",
|
|
95
|
+
"fsRead": "files",
|
|
96
|
+
"fsReadBytes": "files",
|
|
97
|
+
"fsRename": "files",
|
|
98
|
+
"fsReplace": "files",
|
|
99
|
+
"fsReveal": "files",
|
|
100
|
+
"fsSaveUnique": "files",
|
|
101
|
+
"fsSearch": "files",
|
|
102
|
+
"fsSize": "files",
|
|
103
|
+
"fsThumbnail": "files",
|
|
104
|
+
"fsTrash": "files",
|
|
105
|
+
"fsWrite": "files",
|
|
106
|
+
"fsWriteBytes": "files",
|
|
107
|
+
"ghPrLineComment": "network",
|
|
108
|
+
"ghPrThreads": "network",
|
|
109
|
+
"ghRun": "processes",
|
|
110
|
+
"ghThreadReply": "network",
|
|
111
|
+
"ghThreadResolve": "network",
|
|
112
|
+
"gitAiCommitMsg": "git",
|
|
113
|
+
"gitBlameLine": "git",
|
|
114
|
+
"gitCheckout": "git",
|
|
115
|
+
"gitCheckoutDetach": "git",
|
|
116
|
+
"gitCheckoutNew": "git",
|
|
117
|
+
"gitCheckoutTrack": "git",
|
|
118
|
+
"gitCommitFiles": "git",
|
|
119
|
+
"gitDiscard": "git",
|
|
120
|
+
"gitFileBytes": "git",
|
|
121
|
+
"gitFileDiff": "git",
|
|
122
|
+
"gitInfo": "git",
|
|
123
|
+
"gitLogGraph": "git",
|
|
124
|
+
"gitPoll": "git",
|
|
125
|
+
"gitRangeFiles": "git",
|
|
126
|
+
"gitRefs": "git",
|
|
127
|
+
"gitRepos": "git",
|
|
128
|
+
"gitRun": "git",
|
|
129
|
+
"gitStatus": "git",
|
|
130
|
+
"glabApi": "network",
|
|
131
|
+
"glabRun": "processes",
|
|
132
|
+
"googleAccount": "secrets",
|
|
133
|
+
"googleSignIn": "secrets",
|
|
134
|
+
"googleSignOut": "secrets",
|
|
135
|
+
"googleToken": "secrets",
|
|
136
|
+
"httpCancel": "network",
|
|
137
|
+
"httpSend": "network",
|
|
138
|
+
"httpSendAs": "network",
|
|
139
|
+
"httpSendReply": "network",
|
|
140
|
+
"importIconPack": "deck",
|
|
141
|
+
"installAgentHooks": "terminals",
|
|
142
|
+
"installAgentMcp": "terminals",
|
|
143
|
+
"installAgentSkills": "terminals",
|
|
144
|
+
"installFromRegistry": "deck",
|
|
145
|
+
"launchFiles": "files",
|
|
146
|
+
"listApps": "system",
|
|
147
|
+
"listInstalled": "system",
|
|
148
|
+
"logLatest": "deck",
|
|
149
|
+
"mediaMeta": "files",
|
|
150
|
+
"memKill": "system",
|
|
151
|
+
"openFile": "files",
|
|
152
|
+
"openTestDeck": "deck",
|
|
153
|
+
"procKill": "processes",
|
|
154
|
+
"procStream": "processes",
|
|
155
|
+
"procWrite": "processes",
|
|
156
|
+
"readIconPackTheme": "deck",
|
|
157
|
+
"readTermLayout": "terminals",
|
|
158
|
+
"readTrackMeta": "files",
|
|
159
|
+
"remoteHome": "network",
|
|
160
|
+
"remoteStat": "network",
|
|
161
|
+
"remoteSudoPassword": "secrets",
|
|
162
|
+
"removeLanguage": "deck",
|
|
163
|
+
"restartApp": "deck",
|
|
164
|
+
"runScriptNow": "processes",
|
|
165
|
+
"sessionList": "terminals",
|
|
166
|
+
"setAutostart": "system",
|
|
167
|
+
"setDebugTargets": "processes",
|
|
168
|
+
"setWallpaper": "system",
|
|
169
|
+
"sshHosts": "network",
|
|
170
|
+
"sshTunnelClose": "network",
|
|
171
|
+
"sshTunnelOpen": "network",
|
|
172
|
+
"vaultChangePassword": "secrets",
|
|
173
|
+
"vaultConfig": "secrets",
|
|
174
|
+
"vaultCreate": "secrets",
|
|
175
|
+
"vaultDelete": "secrets",
|
|
176
|
+
"vaultExport": "secrets",
|
|
177
|
+
"vaultFill": "secrets",
|
|
178
|
+
"vaultFillNew": "secrets",
|
|
179
|
+
"vaultGenerate": "secrets",
|
|
180
|
+
"vaultImport": "secrets",
|
|
181
|
+
"vaultList": "secrets",
|
|
182
|
+
"vaultLock": "secrets",
|
|
183
|
+
"vaultMatches": "secrets",
|
|
184
|
+
"vaultNeverList": "secrets",
|
|
185
|
+
"vaultNeverRemove": "secrets",
|
|
186
|
+
"vaultOfferAnswer": "secrets",
|
|
187
|
+
"vaultSave": "secrets",
|
|
188
|
+
"vaultSecret": "secrets",
|
|
189
|
+
"vaultStatus": "secrets",
|
|
190
|
+
"vaultTotp": "secrets",
|
|
191
|
+
"vaultUnlock": "secrets",
|
|
192
|
+
"vpsRunsPull": "network",
|
|
193
|
+
"watchFiles": "files"
|
|
194
|
+
},
|
|
195
|
+
"modules": {
|
|
196
|
+
"terminals": "terminals",
|
|
197
|
+
"p2p": "network"
|
|
198
|
+
},
|
|
199
|
+
"free": [
|
|
200
|
+
"DEFAULT_SETTINGS",
|
|
201
|
+
"FOOTER_ITEMS",
|
|
202
|
+
"configDelete",
|
|
203
|
+
"configRead",
|
|
204
|
+
"configWrite",
|
|
205
|
+
"dataDir",
|
|
206
|
+
"deckReady",
|
|
207
|
+
"dirsDownload",
|
|
208
|
+
"footerOrder",
|
|
209
|
+
"fsHomeDir",
|
|
210
|
+
"getAutostart",
|
|
211
|
+
"isFullscreen",
|
|
212
|
+
"languagesDir",
|
|
213
|
+
"launchUrls",
|
|
214
|
+
"mediaSetNowPlaying",
|
|
215
|
+
"mediaSetPlayback",
|
|
216
|
+
"memUsage",
|
|
217
|
+
"notifyOs",
|
|
218
|
+
"openExternal",
|
|
219
|
+
"pickAnyFile",
|
|
220
|
+
"pickExe",
|
|
221
|
+
"pickFile",
|
|
222
|
+
"pickFolder",
|
|
223
|
+
"pickImage",
|
|
224
|
+
"pickSavePath",
|
|
225
|
+
"pickScript",
|
|
226
|
+
"pluginsDir",
|
|
227
|
+
"revealInFolder",
|
|
228
|
+
"startupMarks",
|
|
229
|
+
"toggleFullscreen"
|
|
230
|
+
]
|
|
231
|
+
}
|
package/shim/bridge.js
CHANGED
|
@@ -32,6 +32,7 @@ export const browserCapture = (...a) => b().browserCapture(...a);
|
|
|
32
32
|
export const browserCdp = (...a) => b().browserCdp(...a);
|
|
33
33
|
export const browserClear = (...a) => b().browserClear(...a);
|
|
34
34
|
export const browserClose = (...a) => b().browserClose(...a);
|
|
35
|
+
export const browserCut = (...a) => b().browserCut(...a);
|
|
35
36
|
export const browserDefaultRegister = (...a) => b().browserDefaultRegister(...a);
|
|
36
37
|
export const browserDefaultStatus = (...a) => b().browserDefaultStatus(...a);
|
|
37
38
|
export const browserDevtools = (...a) => b().browserDevtools(...a);
|
package/shim/p2p.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
// GENERATED by sdk/gen-shim.mjs — do not edit.
|
|
2
|
-
//
|
|
3
|
-
// Deck's live connections to other Decks. Resolved at USE time like the bridge: a plugin module is evaluated
|
|
4
|
-
// during loadPlugins, and a reference copied out at import time would capture a half-built
|
|
5
|
-
// object. One transport for every plugin, so a fix to it reaches all of them.
|
|
6
|
-
import { pluginId } from "./scope.js";
|
|
7
|
-
const t = () => {
|
|
8
|
-
const x = window.__deck?.forPlugin?.(pluginId)?.p2p ?? window.__deck?.p2p;
|
|
9
|
-
if (!x) throw new Error("window.__deck.p2p is missing — this plugin only runs inside Deck");
|
|
10
|
-
return x;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export const cleanCode = (...a) => t().cleanCode(...a);
|
|
14
|
-
export const newCode = (...a) => t().newCode(...a);
|
|
15
|
-
export const selfId = (...a) => t().selfId(...a);
|
|
16
|
-
export const share = (...a) => t().share(...a);
|
|
1
|
+
// GENERATED by sdk/gen-shim.mjs — do not edit.
|
|
2
|
+
//
|
|
3
|
+
// Deck's live connections to other Decks. Resolved at USE time like the bridge: a plugin module is evaluated
|
|
4
|
+
// during loadPlugins, and a reference copied out at import time would capture a half-built
|
|
5
|
+
// object. One transport for every plugin, so a fix to it reaches all of them.
|
|
6
|
+
import { pluginId } from "./scope.js";
|
|
7
|
+
const t = () => {
|
|
8
|
+
const x = window.__deck?.forPlugin?.(pluginId)?.p2p ?? window.__deck?.p2p;
|
|
9
|
+
if (!x) throw new Error("window.__deck.p2p is missing — this plugin only runs inside Deck");
|
|
10
|
+
return x;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const cleanCode = (...a) => t().cleanCode(...a);
|
|
14
|
+
export const newCode = (...a) => t().newCode(...a);
|
|
15
|
+
export const selfId = (...a) => t().selfId(...a);
|
|
16
|
+
export const share = (...a) => t().share(...a);
|
package/shim/terminals.js
CHANGED
|
@@ -16,14 +16,17 @@ export const ZONE_BOARD = (...a) => t().ZONE_BOARD(...a);
|
|
|
16
16
|
export const activeWorkspaceCwd = (...a) => t().activeWorkspaceCwd(...a);
|
|
17
17
|
export const addTabToZone = (...a) => t().addTabToZone(...a);
|
|
18
18
|
export const addToGroup = (...a) => t().addToGroup(...a);
|
|
19
|
+
export const agentSessions = (...a) => t().agentSessions(...a);
|
|
19
20
|
export const applyDtCommand = (...a) => t().applyDtCommand(...a);
|
|
20
21
|
export const applyTerminalLook = (...a) => t().applyTerminalLook(...a);
|
|
21
22
|
export const attach = (...a) => t().attach(...a);
|
|
22
23
|
export const bracketPaste = (...a) => t().bracketPaste(...a);
|
|
23
24
|
export const clearPane = (...a) => t().clearPane(...a);
|
|
24
25
|
export const closeLeaf = (...a) => t().closeLeaf(...a);
|
|
26
|
+
export const closePaneTab = (...a) => t().closePaneTab(...a);
|
|
25
27
|
export const copyFrom = (...a) => t().copyFrom(...a);
|
|
26
28
|
export const destroy = (...a) => t().destroy(...a);
|
|
29
|
+
export const dockWindow = (...a) => t().dockWindow(...a);
|
|
27
30
|
export const findLeaf = (...a) => t().findLeaf(...a);
|
|
28
31
|
export const focusPane = (...a) => t().focusPane(...a);
|
|
29
32
|
export const getInstance = (...a) => t().getInstance(...a);
|
|
@@ -62,10 +65,13 @@ export const publishLayout = (...a) => t().publishLayout(...a);
|
|
|
62
65
|
export const queueInput = (...a) => t().queueInput(...a);
|
|
63
66
|
export const rebindTerminals = (...a) => t().rebindTerminals(...a);
|
|
64
67
|
export const refit = (...a) => t().refit(...a);
|
|
68
|
+
export const reopenTab = (...a) => t().reopenTab(...a);
|
|
65
69
|
export const reorderTab = (...a) => t().reorderTab(...a);
|
|
66
70
|
export const resetPaneModes = (...a) => t().resetPaneModes(...a);
|
|
67
71
|
export const restartPane = (...a) => t().restartPane(...a);
|
|
72
|
+
export const resumeCommand = (...a) => t().resumeCommand(...a);
|
|
68
73
|
export const revealPane = (...a) => t().revealPane(...a);
|
|
74
|
+
export const runningIn = (...a) => t().runningIn(...a);
|
|
69
75
|
export const runsLines = (...a) => t().runsLines(...a);
|
|
70
76
|
export const sendInput = (...a) => t().sendInput(...a);
|
|
71
77
|
export const setGroup = (...a) => t().setGroup(...a);
|
package/template/plugin.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "__ID__",
|
|
3
|
-
"name": "__NAME__",
|
|
4
|
-
"description": "One line on what this is for, shown under its name in Settings.",
|
|
5
|
-
"icon": "Sparkles",
|
|
6
|
-
"color": "#a78bfa",
|
|
7
|
-
"version": "0.1.0",
|
|
8
|
-
"minDeck": "1.
|
|
9
|
-
"permissions": []
|
|
10
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "__ID__",
|
|
3
|
+
"name": "__NAME__",
|
|
4
|
+
"description": "One line on what this is for, shown under its name in Settings.",
|
|
5
|
+
"icon": "Sparkles",
|
|
6
|
+
"color": "#a78bfa",
|
|
7
|
+
"version": "0.1.0",
|
|
8
|
+
"minDeck": "1.10.1",
|
|
9
|
+
"permissions": []
|
|
10
|
+
}
|
|
@@ -14,6 +14,8 @@ export interface ConfirmState {
|
|
|
14
14
|
* which in a webview is an OS modal — it steals focus, hides the cursor, and cannot be
|
|
15
15
|
* styled or dismissed with Escape. */
|
|
16
16
|
acknowledge?: boolean;
|
|
17
|
+
/** A "Don't ask again" box beside the buttons: called, after onConfirm, when it was ticked. */
|
|
18
|
+
onDontAsk?: () => void;
|
|
17
19
|
onConfirm: () => void;
|
|
18
20
|
}
|
|
19
21
|
export declare function ConfirmDialog({ state, onClose }: {
|
package/types/components/ui.d.ts
CHANGED
|
@@ -33,8 +33,10 @@ export declare function GhostButton({ children, ...p }: React.ButtonHTMLAttribut
|
|
|
33
33
|
* segmented controls sharing one animate the pill between them — pass a distinct id wherever a
|
|
34
34
|
* screen draws more than one (a per-row control, say). The default keeps the single-control case
|
|
35
35
|
* a one-liner.
|
|
36
|
+
*
|
|
37
|
+
* `fill`: as wide as its parent, the options sharing the room, so a column of them lines up.
|
|
36
38
|
*/
|
|
37
|
-
export declare function Segmented<T extends string>({ value, onChange, options, layoutId, }: {
|
|
39
|
+
export declare function Segmented<T extends string>({ value, onChange, options, layoutId, fill, }: {
|
|
38
40
|
value: T;
|
|
39
41
|
onChange: (v: T) => void;
|
|
40
42
|
options: {
|
|
@@ -42,6 +44,7 @@ export declare function Segmented<T extends string>({ value, onChange, options,
|
|
|
42
44
|
label: string;
|
|
43
45
|
}[];
|
|
44
46
|
layoutId?: string;
|
|
47
|
+
fill?: boolean;
|
|
45
48
|
}): import("react").JSX.Element;
|
|
46
49
|
/** Underlined tabs. `layoutId` behaves as in Segmented above. */
|
|
47
50
|
export declare function Tabs<T extends string>({ value, onChange, options, layoutId, }: {
|
package/types/core/bridge.d.ts
CHANGED
|
@@ -172,7 +172,7 @@ export declare const extensionRemove: (id: string) => Promise<void>;
|
|
|
172
172
|
export declare const extensionPopup: (pane: string, id: string, page: string, right: number, top: number) => Promise<void>;
|
|
173
173
|
export declare const extensionPopupClose: (pane: string) => Promise<void>;
|
|
174
174
|
/** The sites agents may use in the browser without asking. */
|
|
175
|
-
export declare const browserAgentConfig: (sites: string[]) => Promise<void>;
|
|
175
|
+
export declare const browserAgentConfig: (sites: string[], any?: boolean) => Promise<void>;
|
|
176
176
|
/** The user's answer to an agent's question about a site. */
|
|
177
177
|
export declare const browserAgentAnswer: (id: number, site: string, allow: boolean, forGood: boolean) => Promise<void>;
|
|
178
178
|
/** A DevTools protocol call on a browser pane's page, and its answer. */
|
|
@@ -208,6 +208,8 @@ export declare const browserDownload: (id: number, action: "pause" | "resume" |
|
|
|
208
208
|
/** Find in the pane's page: start a search, step through its matches, or stop (clearing them). */
|
|
209
209
|
export declare const browserFind: (pane: string, action: "start" | "next" | "prev" | "stop", term?: string, matchCase?: boolean) => Promise<void>;
|
|
210
210
|
export declare const browserCapture: (pane: string) => Promise<ArrayBuffer>;
|
|
211
|
+
/** Cut these boxes, each [x, y, w, h, corner radius] in physical px from the page's corner, out of a pane's page window, `w`×`h` its size; none gives it back whole. */
|
|
212
|
+
export declare const browserCut: (pane: string, w: number, h: number, cuts: number[][]) => Promise<void>;
|
|
211
213
|
export interface AppProc {
|
|
212
214
|
name: string;
|
|
213
215
|
title: string;
|
|
@@ -265,10 +267,54 @@ export interface Settings {
|
|
|
265
267
|
tabSqueeze?: boolean;
|
|
266
268
|
/** A title-bar tab's full width in px (120 to 320, 160 when unset): its width, or with tabSqueeze the most it narrows from. */
|
|
267
269
|
tabWidth?: number;
|
|
270
|
+
/**
|
|
271
|
+
* Where things that arrive from outside open (Settings → Where things open). A floating window
|
|
272
|
+
* leaves the main window's tab as it was; a tab takes its place, as before floating windows.
|
|
273
|
+
* - openLinksIn: a link another program opens with Deck as the default browser ("float" unset).
|
|
274
|
+
* - openAgentPagesIn: a page an agent opens ("float-background" unset).
|
|
275
|
+
* - openFilesIn: a file opened with Deck from Explorer that opens in a plugin or the browser
|
|
276
|
+
* ("float" unset); one for the Editor goes to the Editor either way.
|
|
277
|
+
*/
|
|
278
|
+
openLinksIn?: "float" | "float-background" | "tab";
|
|
279
|
+
openAgentPagesIn?: "float-background" | "tab";
|
|
280
|
+
openFilesIn?: "float" | "tab";
|
|
281
|
+
/**
|
|
282
|
+
* A file for the Editor opened with Deck from Explorer ("tab" unset: the project's Editor, in the
|
|
283
|
+
* main window brought forward). "float": an Editor of its own in a floating window, as a file
|
|
284
|
+
* Ctrl+clicked in a terminal can open.
|
|
285
|
+
*/
|
|
286
|
+
openCodeFilesIn?: "tab" | "float";
|
|
287
|
+
/**
|
|
288
|
+
* More of the same, for what you open yourself but only look at (Settings → Where things open):
|
|
289
|
+
* - openTerminalLinksIn: an address Ctrl+clicked in a terminal, with browserTerminalLinks "deck"
|
|
290
|
+
* ("float" unset: the "links" window).
|
|
291
|
+
* - openDocsIn: a Docs page opened from Settings ("float" unset; Settings stays open).
|
|
292
|
+
* - openCommitsIn: a commit opened from the Editor's blame ("float" unset).
|
|
293
|
+
* - agentTerminals: a terminal tab or project an agent makes ("background" unset: added without
|
|
294
|
+
* switching to it, its shell started anyway so the agent can use it; "switch" goes to it).
|
|
295
|
+
*/
|
|
296
|
+
openTerminalLinksIn?: "float" | "tab";
|
|
297
|
+
/**
|
|
298
|
+
* A file path Ctrl+clicked in a terminal ("tab" unset: the Editor's tab, or the tab its type
|
|
299
|
+
* opens in). "float": an Editor of its own in a floating window, the project's left where it is;
|
|
300
|
+
* a type that opens elsewhere (a .pdf) in the "links" window.
|
|
301
|
+
*/
|
|
302
|
+
openTerminalFilesIn?: "tab" | "float";
|
|
303
|
+
/** The same, per extension (".md"), over `openTerminalFilesIn`. */
|
|
304
|
+
openTerminalFilesByExt?: Record<string, "tab" | "float">;
|
|
305
|
+
openDocsIn?: "float" | "tab";
|
|
306
|
+
openCommitsIn?: "float" | "tab";
|
|
307
|
+
agentTerminals?: "background" | "switch";
|
|
268
308
|
/** Each project's own colour on the sidebar's collapsed rail. Off, they are all one grey. */
|
|
269
309
|
projectColours?: boolean;
|
|
270
310
|
/** Agents listed under their workspace in the sidebar: under every one (default), only the open one, or none. */
|
|
271
311
|
sidebarAgents?: "all" | "open" | "off";
|
|
312
|
+
/**
|
|
313
|
+
* Closing a tab, a group's tabs or a terminal pane (or restarting or replacing one) asks first:
|
|
314
|
+
* only when something is running in it besides the shell ("running", unset), every time, or
|
|
315
|
+
* never ("Don't ask again" in the question sets this).
|
|
316
|
+
*/
|
|
317
|
+
askBeforeClose?: "running" | "always" | "never";
|
|
272
318
|
/** The workspace sidebar is a button in the title bar that opens it over the panes, rather than a column. */
|
|
273
319
|
sidebarMenu?: boolean;
|
|
274
320
|
/** Pane controls float over the pane's top-right corner on hover, instead of a header row. */
|
|
@@ -383,6 +429,11 @@ export interface Settings {
|
|
|
383
429
|
/** Sleeping tabs: a browser tab out of sight this many minutes stops running until it is shown. */
|
|
384
430
|
browserSleep: boolean;
|
|
385
431
|
browserSleepAfter: number;
|
|
432
|
+
/**
|
|
433
|
+
* A page stays live under Deck's menus and cards, which are cut out of its window (unset: on).
|
|
434
|
+
* Off, a covered page is a blurred picture of itself, for a machine where the cut does not show.
|
|
435
|
+
*/
|
|
436
|
+
browserLiveCovers?: boolean;
|
|
386
437
|
/** Whether pages are asked for light or dark to match Deck's theme ("deck") or Windows'. */
|
|
387
438
|
browserPageTheme?: "deck" | "windows";
|
|
388
439
|
/** App links opened without asking, as "<site origin> <scheme>" ("https://zoom.us zoommtg"). */
|
|
@@ -391,6 +442,8 @@ export interface Settings {
|
|
|
391
442
|
browserDefaultAsk?: boolean;
|
|
392
443
|
/** Sites (by host) an agent may use in the browser without asking; localhost and files always. */
|
|
393
444
|
browserAgentSites: string[];
|
|
445
|
+
/** Agents may use any site without being asked (signing in still asks). Off by default. */
|
|
446
|
+
browserAgentAnySite: boolean;
|
|
394
447
|
/**
|
|
395
448
|
* Where a file type opens, by extension (".pdf"): "editor", "browser" or "plugin:<id>". A type
|
|
396
449
|
* not listed is Automatic (see `openerFor` in fileview.ts).
|
package/types/core/browser.d.ts
CHANGED
|
@@ -136,10 +136,22 @@ export declare const takeWaitingUrl: () => {
|
|
|
136
136
|
} | undefined;
|
|
137
137
|
/** A new browser tab, on `url` or on the start page. */
|
|
138
138
|
export declare const newBrowserTab: (url?: string, isPrivate?: boolean) => boolean | void;
|
|
139
|
+
/**
|
|
140
|
+
* A browser tab on `url` in a floating window, so the main window's view stays (Terminals'
|
|
141
|
+
* deck-open-float, core/floatwin.ts openInFloat): `name` the window that collects them ("links"
|
|
142
|
+
* from other programs, "agent" for an agent's pages), `beside` the window a pane is in.
|
|
143
|
+
*/
|
|
144
|
+
export declare function browserInFloat(url: string, where: {
|
|
145
|
+
name?: string;
|
|
146
|
+
beside?: string;
|
|
147
|
+
focus?: boolean;
|
|
148
|
+
}, isPrivate?: boolean): void;
|
|
139
149
|
/** Read once, before the first browser pane asks. */
|
|
140
150
|
export declare const loadPanes: () => Promise<void>;
|
|
141
151
|
/** The page a pane was on when Deck last closed. */
|
|
142
152
|
export declare const savedPage: (pane: string) => string | undefined;
|
|
153
|
+
/** The page a pane should open on, as a restarted Deck reopens one: a closed tab reopened. */
|
|
154
|
+
export declare function seedPage(pane: string, url: string): void;
|
|
143
155
|
/** How Ctrl+Shift+B shows or hides the bookmarks bar: set by the browser pane, which holds the settings. */
|
|
144
156
|
export declare const setBarToggle: (f: () => void) => void;
|
|
145
157
|
/** Bookmark the pane's page, as its star does: Ctrl+D, and the browser menu. */
|
|
@@ -221,4 +233,5 @@ export declare const pageBox: (pane: string) => DOMRect | null;
|
|
|
221
233
|
export declare const paneWindow: (pane: string) => Window;
|
|
222
234
|
/** Close the pane's webview to give back its memory, keeping the tab and its address. */
|
|
223
235
|
export declare function discardBrowserPane(pane: string): Promise<void>;
|
|
236
|
+
export declare function picturePages(on: boolean): void;
|
|
224
237
|
export declare function trackBrowser(pane: string, el: HTMLElement, url: string): () => void;
|
package/types/core/fileview.d.ts
CHANGED
|
@@ -52,7 +52,7 @@ export declare const fileUrl: (path: string) => string;
|
|
|
52
52
|
* Open `path` where its type opens (`openerFor`), as a tab of its own. False when that is the
|
|
53
53
|
* Editor, which the caller opens it in. Every way Deck opens a file asks this first.
|
|
54
54
|
*/
|
|
55
|
-
export declare function openByType(path: string, hint?: Opener): boolean;
|
|
55
|
+
export declare function openByType(path: string, hint?: Opener, float?: string): boolean;
|
|
56
56
|
/**
|
|
57
57
|
* Everywhere `path` can open in Deck, for an Open with menu: the Editor, the browser (its types,
|
|
58
58
|
* on this PC), and each plugin that opens its type, named for the menu.
|
|
@@ -65,4 +65,8 @@ export declare function openersFor(path: string): {
|
|
|
65
65
|
* Open `path` in `to` whatever the Files tab says, for an Open with menu. False for the Editor,
|
|
66
66
|
* which the caller opens it in (terminals' openInEditor).
|
|
67
67
|
*/
|
|
68
|
-
|
|
68
|
+
/**
|
|
69
|
+
* `float`: in the floating window of that name (Terminals' deck-open-float) rather than as a tab
|
|
70
|
+
* of the main window, for a file another program handed Deck.
|
|
71
|
+
*/
|
|
72
|
+
export declare function openIn(path: string, to: Opener, float?: string): boolean;
|
|
@@ -26,6 +26,8 @@ export interface Notif {
|
|
|
26
26
|
key?: string;
|
|
27
27
|
/** The workspace an agent notification is about: a click goes there. */
|
|
28
28
|
wsId?: string;
|
|
29
|
+
/** The agent's pane: a click goes to it (its tab, and its window if that is a float), else wsId. */
|
|
30
|
+
pane?: string;
|
|
29
31
|
/** Where a click on the card itself goes, when it is not about a workspace. */
|
|
30
32
|
nav?: string;
|
|
31
33
|
/** Who posted it, shown beside the time: a plugin's name. */
|
|
@@ -20,9 +20,11 @@ export interface TermPath {
|
|
|
20
20
|
* The shortest extent comes first, so a caller that only wants the unambiguous reading can take
|
|
21
21
|
* the first candidate per `start` and never consult the filesystem.
|
|
22
22
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* One line of text: a path wrapped over several rows is found once `joinRows` has put them back
|
|
24
|
+
* together.
|
|
25
|
+
*
|
|
26
|
+
* ponytail: a relative path resolves against the cwd the pane SPAWNED with, so it is wrong after a
|
|
27
|
+
* `cd`. Absolute paths — what Claude Code and most tools print — are unaffected.
|
|
26
28
|
*
|
|
27
29
|
* ponytail: only the END of a path can be recovered this way. A RELATIVE path whose first segment
|
|
28
30
|
* contains a space ("My Docs\a.txt") is anchored at "Docs\a.txt", because the match can only
|
|
@@ -43,3 +45,41 @@ export declare function findPaths(row: string, cwd: string): TermPath[];
|
|
|
43
45
|
* land on either.
|
|
44
46
|
*/
|
|
45
47
|
export declare function chooseLinks(candidates: readonly TermPath[], exists: readonly boolean[]): TermPath[];
|
|
48
|
+
/**
|
|
49
|
+
* A Windows path not found as printed, with a backslash put back that Markdown took out. Claude
|
|
50
|
+
* Code renders its output as Markdown, where `\.` and `\_` mean a plain dot and underscore, so
|
|
51
|
+
* "review-repo\.gitattributes" is shown as "review-repo.gitattributes". One reading per dot or
|
|
52
|
+
* underscore that follows a name character, each to be tried on disk.
|
|
53
|
+
*/
|
|
54
|
+
export declare function unescapedReadings(path: string): string[];
|
|
55
|
+
/** A row of the screen: its text (trailing blanks kept), and whether xterm wrapped it onto the row before. */
|
|
56
|
+
export interface Row {
|
|
57
|
+
text: string;
|
|
58
|
+
wrapped: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The line row `at` is part of, read back as one: rows xterm wrapped itself (a shell's long line),
|
|
62
|
+
* and rows a program broke where a path ran out of room. Claude Code wraps its own output, a hard
|
|
63
|
+
* line break with the rest indented under it, so xterm knows nothing of that wrap: a row and the
|
|
64
|
+
* next are taken as a path broken in two when the words either side of the break look like one
|
|
65
|
+
* (see `broken`), and they join without the break or the indent. `cells[i]` is where character `i`
|
|
66
|
+
* of the text is on screen: its row (an index into `rows`) and column. At most `reach` rows each way.
|
|
67
|
+
*
|
|
68
|
+
* A list of paths, one a row, joins too: only the filesystem can tell it from one path broken in
|
|
69
|
+
* two, which is why the terminal also offers the row on its own.
|
|
70
|
+
*/
|
|
71
|
+
export declare function joinRows(rows: readonly Row[], at: number, reach?: number): {
|
|
72
|
+
text: string;
|
|
73
|
+
cells: [number, number][];
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Every path candidate on row `at`, also one wrapped over the rows around it. A join xterm made is
|
|
77
|
+
* certain, but one at a break (`broken`) is a guess: a path can end a row with the next row's words
|
|
78
|
+
* glued on, so the joined line (`joinRows`) is read cut at each such break as well, every span of
|
|
79
|
+
* it that holds row `at`. Starts are indices into `text`, ascending, ready for `chooseLinks`;
|
|
80
|
+
* `cells` says where each is on screen.
|
|
81
|
+
*/
|
|
82
|
+
export declare function rowPaths(rows: readonly Row[], at: number, cwd: string): {
|
|
83
|
+
cands: TermPath[];
|
|
84
|
+
cells: [number, number][];
|
|
85
|
+
};
|
|
@@ -51,6 +51,12 @@ export interface LayoutTab {
|
|
|
51
51
|
* where it was).
|
|
52
52
|
*/
|
|
53
53
|
window?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Opened straight into a floating window by Deck (openInFloat: a link, a page an agent opened, a
|
|
56
|
+
* file Ctrl+clicked in a terminal), so closing that window closes it rather than docking it into
|
|
57
|
+
* the main window. Dropped the moment the tab is moved by hand: then it is one of yours.
|
|
58
|
+
*/
|
|
59
|
+
transient?: true;
|
|
54
60
|
}
|
|
55
61
|
export interface LayoutWorkspace {
|
|
56
62
|
id: string;
|
|
@@ -71,6 +77,8 @@ export interface FloatBounds {
|
|
|
71
77
|
w: number;
|
|
72
78
|
h: number;
|
|
73
79
|
max?: boolean;
|
|
80
|
+
/** A window things are sent to by name (core/floatwin.ts openInFloat): "links", "agent". */
|
|
81
|
+
name?: string;
|
|
74
82
|
}
|
|
75
83
|
export interface Layout {
|
|
76
84
|
workspaces: LayoutWorkspace[];
|
|
@@ -203,6 +211,15 @@ export declare function moveTabToZone(tabs: readonly LayoutTab[], tabId: string,
|
|
|
203
211
|
* result is right even for a zone that is not the active one.
|
|
204
212
|
*/
|
|
205
213
|
export declare function addTabToZone(tabs: readonly LayoutTab[], besideId: string, tab: LayoutTab): LayoutTab[];
|
|
214
|
+
/**
|
|
215
|
+
* A closed tab put back in workspace `w` (core/closedtabs.ts): in front in the zone you are in,
|
|
216
|
+
* with new ids for the tab and its panes, since the old panes' shells and state are gone. Out of
|
|
217
|
+
* any group and any window it was in. Returns the workspace and each old pane's new id.
|
|
218
|
+
*/
|
|
219
|
+
export declare function reopenTab(w: LayoutWorkspace, tab: LayoutTab, fresh?: () => string): {
|
|
220
|
+
w: LayoutWorkspace;
|
|
221
|
+
ids: Record<string, string>;
|
|
222
|
+
};
|
|
206
223
|
/**
|
|
207
224
|
* Make a workspace's active tab the one its zone shows.
|
|
208
225
|
*
|
|
@@ -232,6 +249,13 @@ export declare function setTabWindow(w: LayoutWorkspace, tabId: string, win: str
|
|
|
232
249
|
* since a window holds one project's tabs.
|
|
233
250
|
*/
|
|
234
251
|
export declare function mergeWindow(l: Layout, from: string, into: string | null): Layout;
|
|
252
|
+
/**
|
|
253
|
+
* Close floating window `id` into the main window: its tabs go back to their zones, each behind the
|
|
254
|
+
* tab its zone shows, so closing a window does not take you away from the tab you are on. With
|
|
255
|
+
* `discard` (its X, Alt+F4), the tabs Deck opened into it (`transient`) close instead; the caller
|
|
256
|
+
* destroys their panes.
|
|
257
|
+
*/
|
|
258
|
+
export declare function dockWindow(l: Layout, id: string, discard?: boolean): Layout;
|
|
235
259
|
/** The first free spot on the top row, for a zone created without a position of its own. */
|
|
236
260
|
export declare function nextZoneSpot(tabs: readonly LayoutTab[], cols?: number, rows?: number): {
|
|
237
261
|
x: number;
|
|
@@ -316,7 +340,15 @@ export declare function moveLeaf(root: LayoutNode, srcId: string, targetId: stri
|
|
|
316
340
|
export declare function openTabInWorkspace(wsId: string, title: string, opts?: {
|
|
317
341
|
besideActive?: boolean;
|
|
318
342
|
}): string | null;
|
|
319
|
-
|
|
343
|
+
/**
|
|
344
|
+
* `agent`: asked for over the control API (an agent), not from Deck's own palette. Then a new
|
|
345
|
+
* terminal tab or project is added without switching to it (Settings → Where things open,
|
|
346
|
+
* agentTerminals), its shell started at once (spawnUnseen): a pane starts its shell when it is
|
|
347
|
+
* first drawn, and the agent's next command goes to that shell.
|
|
348
|
+
*/
|
|
349
|
+
export declare function applyDtCommand(op: string, args: Record<string, unknown>, agent?: boolean): string | void;
|
|
350
|
+
/** Close the pane `pane`: its whole tab when it is the tab's only pane, as an agent's page is. */
|
|
351
|
+
export declare function closePaneTab(pane: string): void;
|
|
320
352
|
interface Instance {
|
|
321
353
|
term: Terminal;
|
|
322
354
|
fit: FitAddon;
|
|
@@ -361,7 +393,7 @@ export declare function moveWorkspace(id: string, toIndex: number): void;
|
|
|
361
393
|
* Registered per attach because resolving a relative path needs the pane's cwd, which is what
|
|
362
394
|
* attach is given. The instance outlives its DOM, so the previous provider is disposed first
|
|
363
395
|
* rather than stacking a second one on every re-attach. The matching itself lives in shellpath
|
|
364
|
-
* (no xterm import), where it is exercised by shellpath.check.
|
|
396
|
+
* (no xterm import), where it is exercised by shellpath.check.mjs.
|
|
365
397
|
*
|
|
366
398
|
* Only a path that actually exists is offered as a link. Matching the shape of a path is not the
|
|
367
399
|
* same as having one: output wraps mid-path at the edge of a narrow pane, a relative path resolves
|
|
@@ -449,6 +481,27 @@ export declare function queueInput(paneId: string, text: string): void;
|
|
|
449
481
|
* the user picked (the agent launcher) has to handle both.
|
|
450
482
|
*/
|
|
451
483
|
export declare function sendInput(paneId: string, text: string): void;
|
|
484
|
+
/** The command that resumes an agent's session, or undefined for a kind Deck cannot resume. */
|
|
485
|
+
export declare const resumeCommand: (kind: string, session: string) => string;
|
|
486
|
+
/**
|
|
487
|
+
* The agent session each of these panes holds, read fresh from the sweep's file (the map cached at
|
|
488
|
+
* startup misses an agent started since): for a closed tab to resume it when reopened. Read before
|
|
489
|
+
* the next sweep, which drops a pane gone from the layout.
|
|
490
|
+
*/
|
|
491
|
+
export declare function agentSessions(ids: string[]): Promise<Record<string, {
|
|
492
|
+
kind: string;
|
|
493
|
+
session: string;
|
|
494
|
+
}>>;
|
|
495
|
+
/**
|
|
496
|
+
* What is running in these panes besides their shells, for a close to ask about: the programs the
|
|
497
|
+
* sweep saw in each (state/term-procs), or "an agent" for one it has not listed yet. Only panes
|
|
498
|
+
* with a shell count; a view pane loses nothing by closing.
|
|
499
|
+
*
|
|
500
|
+
* ponytail: term-procs is up to 10s old (the sweep's interval), so a program started just before
|
|
501
|
+
* the close is missed. A term_busy command taking its own snapshot (pane_pids + sweep_procs) would
|
|
502
|
+
* not be.
|
|
503
|
+
*/
|
|
504
|
+
export declare function runningIn(ids: string[]): Promise<string[]>;
|
|
452
505
|
/**
|
|
453
506
|
* Size a pane's PTY, and every view of it, to the SMALLER of those views.
|
|
454
507
|
*
|