@hydraharness/harness-desktop 0.1.1-rc.6

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 ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@hydraharness/harness-desktop",
3
+ "version": "0.1.1-rc.6",
4
+ "description": "Windows-first Electron shell for the existing Hydra Web renderer and controlled browser",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/MaiHongPhong1902/Hydra-Harness.git",
11
+ "directory": "apps/desktop"
12
+ },
13
+ "main": "main.cjs",
14
+ "files": [
15
+ "main.cjs",
16
+ "preload.cjs",
17
+ "assets"
18
+ ],
19
+ "license": "MIT",
20
+ "dependencies": {
21
+ "node-pty": "1.2.0-beta.15",
22
+ "prettier": "^3.9.5",
23
+ "@hydraharness/harness": "^0.1.1-rc.6",
24
+ "@hydraharness/harness-atomic-write": "^0.1.1-rc.6",
25
+ "@hydraharness/harness-subprocess": "^0.1.1-rc.6",
26
+ "@hydraharness/harness-browser-electron": "^0.1.1-rc.6"
27
+ },
28
+ "optionalDependencies": {
29
+ "electron": "^44.0.0"
30
+ },
31
+ "scripts": {
32
+ "start": "electron .",
33
+ "smoke": "electron . --smoke",
34
+ "smoke:zoom": "electron . --smoke-zoom"
35
+ }
36
+ }
package/preload.cjs ADDED
@@ -0,0 +1,90 @@
1
+ 'use strict'
2
+
3
+ const { contextBridge, ipcRenderer } = require('electron')
4
+
5
+ contextBridge.exposeInMainWorld('hydraDesktop', {
6
+ openSessionWindow: sessionId => ipcRenderer.invoke('hydra-desktop:open-session-window', { sessionId }),
7
+ openExternal: url => ipcRenderer.invoke('hydra-desktop:open-external', { url }),
8
+ chrome: {
9
+ dispatch: action => ipcRenderer.invoke('hydra-desktop:chrome-action', action),
10
+ setTheme: theme => { ipcRenderer.send('hydra-desktop:chrome-theme', theme) },
11
+ },
12
+ browser: {
13
+ setBounds: bounds => { ipcRenderer.send('hydra-desktop:browser-bounds', bounds) },
14
+ setTheme: theme => { ipcRenderer.send('hydra-desktop:browser-theme', theme) },
15
+ configure: settings => ipcRenderer.invoke('hydra-desktop:browser-configure', settings),
16
+ confirmFullCdpAccess: () => ipcRenderer.invoke('hydra-desktop:browser-confirm-full-cdp'),
17
+ clearData: scope => ipcRenderer.invoke('hydra-desktop:browser-clear-data', { scope }),
18
+ openUrl: url => ipcRenderer.invoke('hydra-desktop:browser-open-url', { url }),
19
+ history: () => ipcRenderer.invoke('hydra-desktop:browser-history'),
20
+ removeHistory: id => ipcRenderer.invoke('hydra-desktop:browser-remove-history', { id }),
21
+ downloads: () => ipcRenderer.invoke('hydra-desktop:browser-downloads'),
22
+ removeDownload: id => ipcRenderer.invoke('hydra-desktop:browser-remove-download', { id }),
23
+ openDownload: id => ipcRenderer.invoke('hydra-desktop:browser-open-download', { id }),
24
+ sites: () => ipcRenderer.invoke('hydra-desktop:browser-sites'),
25
+ setSite: value => ipcRenderer.invoke('hydra-desktop:browser-set-site', value),
26
+ removeSite: origin => ipcRenderer.invoke('hydra-desktop:browser-remove-site', { origin }),
27
+ autofillStatus: () => ipcRenderer.invoke('hydra-desktop:browser-autofill-status'),
28
+ autofillListLogins: () => ipcRenderer.invoke('hydra-desktop:browser-autofill-list-logins'),
29
+ autofillSaveLogin: value => ipcRenderer.invoke('hydra-desktop:browser-autofill-save-login', value),
30
+ autofillRemoveLogin: id => ipcRenderer.invoke('hydra-desktop:browser-autofill-remove-login', { id }),
31
+ autofillListContacts: () => ipcRenderer.invoke('hydra-desktop:browser-autofill-list-contacts'),
32
+ autofillGetContact: id => ipcRenderer.invoke('hydra-desktop:browser-autofill-get-contact', { id }),
33
+ autofillSaveContact: value => ipcRenderer.invoke('hydra-desktop:browser-autofill-save-contact', value),
34
+ autofillRemoveContact: id => ipcRenderer.invoke('hydra-desktop:browser-autofill-remove-contact', { id }),
35
+ emitAnnotation(annotation) {
36
+ ipcRenderer.send('hydra-desktop:emit-annotation', annotation)
37
+ },
38
+ onAnnotation(listener) {
39
+ const handler = (_event, annotation) => { listener(annotation) }
40
+ ipcRenderer.on('hydra-desktop:browser-annotation', handler)
41
+ return () => { ipcRenderer.removeListener('hydra-desktop:browser-annotation', handler) }
42
+ },
43
+ },
44
+ terminal: {
45
+ start: (terminalId, size, workspaceId) => ipcRenderer.invoke('hydra-desktop:terminal-start', { terminalId, size, workspaceId }),
46
+ stop: terminalId => ipcRenderer.invoke('hydra-desktop:terminal-stop', { terminalId }),
47
+ write: (terminalId, data) => { ipcRenderer.send('hydra-desktop:terminal-write', { terminalId, data }) },
48
+ resize: (terminalId, size) => { ipcRenderer.send('hydra-desktop:terminal-resize', { terminalId, size }) },
49
+ list: () => ipcRenderer.invoke('hydra-desktop:terminal-list'),
50
+ onEvent(terminalId, listener) {
51
+ const handler = (_event, value) => {
52
+ if (value?.terminalId === terminalId) listener(value.event)
53
+ }
54
+ ipcRenderer.on('hydra-desktop:terminal-event', handler)
55
+ return () => { ipcRenderer.removeListener('hydra-desktop:terminal-event', handler) }
56
+ },
57
+ },
58
+ files: {
59
+ root: workspaceId => ipcRenderer.invoke('hydra-desktop:files-root', { workspaceId }),
60
+ list: (path, workspaceId) => ipcRenderer.invoke('hydra-desktop:files-list', { path, workspaceId }),
61
+ search: (query, workspaceId) => ipcRenderer.invoke('hydra-desktop:files-search', { query, workspaceId }),
62
+ read: (path, workspaceId) => ipcRenderer.invoke('hydra-desktop:files-read', { path, workspaceId }),
63
+ create: (parentPath, name, kind, workspaceId) =>
64
+ ipcRenderer.invoke('hydra-desktop:files-create', { parentPath, name, kind, workspaceId }),
65
+ rename: (path, newName, workspaceId) =>
66
+ ipcRenderer.invoke('hydra-desktop:files-rename', { path, newName, workspaceId }),
67
+ move: (path, destinationDirectory, workspaceId) =>
68
+ ipcRenderer.invoke('hydra-desktop:files-move', { path, destinationDirectory, workspaceId }),
69
+ delete: (path, workspaceId) =>
70
+ ipcRenderer.invoke('hydra-desktop:files-delete', { path, workspaceId }),
71
+ reveal: (path, workspaceId) =>
72
+ ipcRenderer.invoke('hydra-desktop:files-reveal', { path, workspaceId }),
73
+ save: (path, content, expectedVersion, workspaceId) =>
74
+ ipcRenderer.invoke('hydra-desktop:files-save', { path, content, expectedVersion, workspaceId }),
75
+ format: (path, content, workspaceId) =>
76
+ ipcRenderer.invoke('hydra-desktop:files-format', { path, content, workspaceId }),
77
+ },
78
+ panels: {
79
+ onShortcut: listener => {
80
+ const handler = (_event, shortcut) => { listener(shortcut) }
81
+ ipcRenderer.on('hydra-desktop:panel-shortcut', handler)
82
+ return () => { ipcRenderer.removeListener('hydra-desktop:panel-shortcut', handler) }
83
+ },
84
+ onClose: listener => {
85
+ const handler = (_event, kind) => { listener(kind) }
86
+ ipcRenderer.on('hydra-desktop:panel-close', handler)
87
+ return () => { ipcRenderer.removeListener('hydra-desktop:panel-close', handler) }
88
+ },
89
+ },
90
+ })