@bytespell/shella 0.2.0 → 0.2.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/bundled-plugins/agent/README.md +3 -0
- package/bundled-plugins/agent/components.json +24 -0
- package/bundled-plugins/agent/dist/assets/index-BGeDYr6P.css +1 -0
- package/bundled-plugins/agent/dist/assets/index-J14lI3Er.js +49 -0
- package/bundled-plugins/agent/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/bundled-plugins/agent/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/bundled-plugins/agent/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/bundled-plugins/agent/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/bundled-plugins/agent/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/bundled-plugins/agent/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/bundled-plugins/agent/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/bundled-plugins/agent/dist/index.html +14 -0
- package/bundled-plugins/agent/dist/vite.svg +1 -0
- package/bundled-plugins/agent/eslint.config.js +23 -0
- package/bundled-plugins/agent/index.html +13 -0
- package/bundled-plugins/agent/package-lock.json +11034 -0
- package/bundled-plugins/agent/package.json +52 -0
- package/bundled-plugins/agent/public/vite.svg +1 -0
- package/bundled-plugins/agent/server.js +240 -0
- package/bundled-plugins/agent/src/App.tsx +586 -0
- package/bundled-plugins/agent/src/assets/react.svg +1 -0
- package/bundled-plugins/agent/src/components/ui/alert-dialog.tsx +182 -0
- package/bundled-plugins/agent/src/components/ui/badge.tsx +45 -0
- package/bundled-plugins/agent/src/components/ui/button.tsx +60 -0
- package/bundled-plugins/agent/src/components/ui/card.tsx +94 -0
- package/bundled-plugins/agent/src/components/ui/combobox.tsx +294 -0
- package/bundled-plugins/agent/src/components/ui/dropdown-menu.tsx +253 -0
- package/bundled-plugins/agent/src/components/ui/field.tsx +225 -0
- package/bundled-plugins/agent/src/components/ui/input-group.tsx +147 -0
- package/bundled-plugins/agent/src/components/ui/input.tsx +19 -0
- package/bundled-plugins/agent/src/components/ui/label.tsx +24 -0
- package/bundled-plugins/agent/src/components/ui/select.tsx +185 -0
- package/bundled-plugins/agent/src/components/ui/separator.tsx +26 -0
- package/bundled-plugins/agent/src/components/ui/switch.tsx +31 -0
- package/bundled-plugins/agent/src/components/ui/textarea.tsx +18 -0
- package/bundled-plugins/agent/src/index.css +131 -0
- package/bundled-plugins/agent/src/lib/utils.ts +6 -0
- package/bundled-plugins/agent/src/main.tsx +11 -0
- package/bundled-plugins/agent/tsconfig.app.json +32 -0
- package/bundled-plugins/agent/tsconfig.json +13 -0
- package/bundled-plugins/agent/tsconfig.node.json +26 -0
- package/bundled-plugins/agent/vite.config.ts +14 -0
- package/bundled-plugins/terminal/index.html +24 -0
- package/bundled-plugins/terminal/package-lock.json +3316 -0
- package/bundled-plugins/terminal/package.json +37 -0
- package/bundled-plugins/terminal/server.ts +169 -0
- package/bundled-plugins/terminal/src/App.tsx +168 -0
- package/bundled-plugins/terminal/src/main.tsx +9 -0
- package/bundled-plugins/terminal/tsconfig.json +22 -0
- package/bundled-plugins/terminal/vite.config.ts +10 -0
- package/dist/bin/shella-init.js +2 -2
- package/dist/bin/shella-init.js.map +1 -1
- package/dist/src/api.d.ts.map +1 -1
- package/dist/src/api.js +51 -10
- package/dist/src/api.js.map +1 -1
- package/dist/src/bonjour.d.ts +3 -0
- package/dist/src/bonjour.d.ts.map +1 -0
- package/dist/src/bonjour.js +42 -0
- package/dist/src/bonjour.js.map +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/logger.d.ts +19 -2
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +96 -16
- package/dist/src/logger.js.map +1 -1
- package/dist/src/paths.d.ts +1 -0
- package/dist/src/paths.d.ts.map +1 -1
- package/dist/src/paths.js +24 -0
- package/dist/src/paths.js.map +1 -1
- package/dist/src/plugin-manager.d.ts +14 -0
- package/dist/src/plugin-manager.d.ts.map +1 -1
- package/dist/src/plugin-manager.js +115 -7
- package/dist/src/plugin-manager.js.map +1 -1
- package/dist/src/sse.d.ts +45 -0
- package/dist/src/sse.d.ts.map +1 -0
- package/dist/src/sse.js +108 -0
- package/dist/src/sse.js.map +1 -0
- package/dist/src/types.d.ts +1 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@shella/terminal",
|
|
3
|
+
"private": true,
|
|
4
|
+
"version": "0.2.2",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "server.ts",
|
|
7
|
+
"shella": {
|
|
8
|
+
"displayName": "Terminal",
|
|
9
|
+
"devCommand": "tsx server.ts"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"dev": "tsx server.ts",
|
|
13
|
+
"build": "vite build",
|
|
14
|
+
"preview": "vite preview"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@xterm/addon-fit": "^0.10.0",
|
|
18
|
+
"@xterm/addon-web-links": "^0.11.0",
|
|
19
|
+
"@xterm/xterm": "^5.5.0",
|
|
20
|
+
"express": "^5.0.0",
|
|
21
|
+
"node-pty": "^1.2.0-beta.7",
|
|
22
|
+
"react": "^19.2.0",
|
|
23
|
+
"react-dom": "^19.2.0",
|
|
24
|
+
"ws": "^8.18.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/express": "^5.0.0",
|
|
28
|
+
"@types/node": "^22.0.0",
|
|
29
|
+
"@types/react": "^19.2.0",
|
|
30
|
+
"@types/react-dom": "^19.2.0",
|
|
31
|
+
"@types/ws": "^8.5.0",
|
|
32
|
+
"@vitejs/plugin-react": "^4.3.0",
|
|
33
|
+
"tsx": "^4.19.0",
|
|
34
|
+
"typescript": "^5.6.0",
|
|
35
|
+
"vite": "^6.0.0"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import express from 'express'
|
|
2
|
+
import { createServer } from 'http'
|
|
3
|
+
import { WebSocketServer, WebSocket } from 'ws'
|
|
4
|
+
import * as pty from 'node-pty'
|
|
5
|
+
import path from 'path'
|
|
6
|
+
import fs from 'fs'
|
|
7
|
+
import { fileURLToPath } from 'url'
|
|
8
|
+
|
|
9
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
10
|
+
const app = express()
|
|
11
|
+
const PORT = process.env.PORT
|
|
12
|
+
|
|
13
|
+
// Check if we're in dev mode (no dist folder)
|
|
14
|
+
const isDev = !fs.existsSync(path.join(__dirname, 'dist', 'index.html'))
|
|
15
|
+
|
|
16
|
+
// Allow embedding in iframes (for shella-web)
|
|
17
|
+
app.use((_req, res, next) => {
|
|
18
|
+
res.removeHeader('X-Frame-Options')
|
|
19
|
+
res.setHeader('Content-Security-Policy', 'frame-ancestors *')
|
|
20
|
+
next()
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
app.use(express.json())
|
|
24
|
+
|
|
25
|
+
// Health check
|
|
26
|
+
app.get('/api/health', (_req, res) => {
|
|
27
|
+
res.json({ status: 'ok', shell: process.env.SHELL || '/bin/bash' })
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
async function startServer() {
|
|
31
|
+
if (isDev) {
|
|
32
|
+
// Dev mode: use Vite middleware for HMR
|
|
33
|
+
const { createServer: createViteServer } = await import('vite')
|
|
34
|
+
const vite = await createViteServer({
|
|
35
|
+
server: { middlewareMode: true, hmr: { port: Number(PORT) + 1000 } },
|
|
36
|
+
appType: 'spa',
|
|
37
|
+
})
|
|
38
|
+
app.use(vite.middlewares)
|
|
39
|
+
} else {
|
|
40
|
+
// Production: serve built files
|
|
41
|
+
app.use(express.static(path.join(__dirname, 'dist')))
|
|
42
|
+
app.get('*', (_req, res) => {
|
|
43
|
+
res.sendFile(path.join(__dirname, 'dist', 'index.html'))
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const server = createServer(app)
|
|
48
|
+
|
|
49
|
+
// PTY is spawned lazily on first client connection with correct size
|
|
50
|
+
const shell = process.env.SHELL || '/bin/bash'
|
|
51
|
+
const home = process.env.HOME || '/tmp'
|
|
52
|
+
|
|
53
|
+
let ptyProcess: pty.IPty | null = null
|
|
54
|
+
|
|
55
|
+
// Track connected clients
|
|
56
|
+
const clients = new Set<WebSocket>()
|
|
57
|
+
|
|
58
|
+
// Buffer recent output for new clients (scrollback)
|
|
59
|
+
const outputBuffer: string[] = []
|
|
60
|
+
const MAX_BUFFER_LINES = 1000
|
|
61
|
+
|
|
62
|
+
function spawnPty(cols: number, rows: number) {
|
|
63
|
+
if (ptyProcess) return // Already spawned
|
|
64
|
+
|
|
65
|
+
ptyProcess = pty.spawn(shell, [], {
|
|
66
|
+
name: 'xterm-256color',
|
|
67
|
+
cols,
|
|
68
|
+
rows,
|
|
69
|
+
cwd: home,
|
|
70
|
+
env: {
|
|
71
|
+
...process.env as Record<string, string>,
|
|
72
|
+
// Suppress zsh's partial line marker (%) on fresh terminal
|
|
73
|
+
PROMPT_EOL_MARK: '',
|
|
74
|
+
},
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
console.log(`[terminal] PTY spawned: pid=${ptyProcess.pid}, shell=${shell}, size=${cols}x${rows}`)
|
|
78
|
+
|
|
79
|
+
// PTY -> all connected clients
|
|
80
|
+
ptyProcess.onData((data: string) => {
|
|
81
|
+
// Buffer output for new clients
|
|
82
|
+
outputBuffer.push(data)
|
|
83
|
+
if (outputBuffer.length > MAX_BUFFER_LINES) {
|
|
84
|
+
outputBuffer.shift()
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Broadcast to all connected clients
|
|
88
|
+
const message = JSON.stringify({ type: 'output', data })
|
|
89
|
+
for (const client of clients) {
|
|
90
|
+
if (client.readyState === WebSocket.OPEN) {
|
|
91
|
+
client.send(message)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
ptyProcess.onExit(({ exitCode, signal }) => {
|
|
97
|
+
console.log(`[terminal] PTY exited: code=${exitCode}, signal=${signal}`)
|
|
98
|
+
const message = JSON.stringify({ type: 'exit', exitCode, signal })
|
|
99
|
+
for (const client of clients) {
|
|
100
|
+
if (client.readyState === WebSocket.OPEN) {
|
|
101
|
+
client.send(message)
|
|
102
|
+
client.close()
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// PTY died, shut down the instance
|
|
106
|
+
process.exit(exitCode ?? 0)
|
|
107
|
+
})
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// WebSocket server for client connections
|
|
111
|
+
const wss = new WebSocketServer({ server, path: '/ws' })
|
|
112
|
+
|
|
113
|
+
wss.on('connection', (ws: WebSocket) => {
|
|
114
|
+
clients.add(ws)
|
|
115
|
+
|
|
116
|
+
// Send buffered output to new client so they see history (if PTY already running)
|
|
117
|
+
if (ptyProcess && outputBuffer.length > 0) {
|
|
118
|
+
ws.send(JSON.stringify({ type: 'output', data: outputBuffer.join('') }))
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Client -> PTY
|
|
122
|
+
ws.on('message', (message: Buffer) => {
|
|
123
|
+
try {
|
|
124
|
+
const msg = JSON.parse(message.toString())
|
|
125
|
+
|
|
126
|
+
switch (msg.type) {
|
|
127
|
+
case 'input':
|
|
128
|
+
ptyProcess?.write(msg.data)
|
|
129
|
+
break
|
|
130
|
+
case 'resize':
|
|
131
|
+
if (msg.cols && msg.rows) {
|
|
132
|
+
if (!ptyProcess) {
|
|
133
|
+
// First resize spawns the PTY with correct size
|
|
134
|
+
spawnPty(msg.cols, msg.rows)
|
|
135
|
+
} else {
|
|
136
|
+
ptyProcess.resize(msg.cols, msg.rows)
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
break
|
|
140
|
+
}
|
|
141
|
+
} catch (err) {
|
|
142
|
+
console.error('[terminal] Invalid message:', err)
|
|
143
|
+
}
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
ws.on('close', () => {
|
|
147
|
+
clients.delete(ws)
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
ws.on('error', (err) => {
|
|
151
|
+
console.error('[terminal] WebSocket error:', err)
|
|
152
|
+
clients.delete(ws)
|
|
153
|
+
})
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
server.listen(PORT, () => {
|
|
157
|
+
console.log(`[terminal] Running on port ${PORT}${isDev ? ' (dev mode with HMR)' : ''}`)
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
// Graceful shutdown - kill PTY when instance stops
|
|
161
|
+
process.on('SIGTERM', () => {
|
|
162
|
+
console.log('[terminal] SIGTERM received, shutting down')
|
|
163
|
+
ptyProcess?.kill()
|
|
164
|
+
wss.clients.forEach((client) => client.close())
|
|
165
|
+
server.close(() => process.exit(0))
|
|
166
|
+
})
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
startServer()
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from 'react'
|
|
2
|
+
import { Terminal } from '@xterm/xterm'
|
|
3
|
+
import { FitAddon } from '@xterm/addon-fit'
|
|
4
|
+
import { WebLinksAddon } from '@xterm/addon-web-links'
|
|
5
|
+
import '@xterm/xterm/css/xterm.css'
|
|
6
|
+
|
|
7
|
+
type ConnectionStatus = 'connecting' | 'connected' | 'disconnected' | 'error'
|
|
8
|
+
|
|
9
|
+
export default function App() {
|
|
10
|
+
const terminalRef = useRef<HTMLDivElement>(null)
|
|
11
|
+
const termRef = useRef<Terminal | null>(null)
|
|
12
|
+
const wsRef = useRef<WebSocket | null>(null)
|
|
13
|
+
const fitAddonRef = useRef<FitAddon | null>(null)
|
|
14
|
+
const [status, setStatus] = useState<ConnectionStatus>('connecting')
|
|
15
|
+
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (!terminalRef.current) return
|
|
18
|
+
|
|
19
|
+
// Create terminal
|
|
20
|
+
const term = new Terminal({
|
|
21
|
+
cursorBlink: true,
|
|
22
|
+
fontSize: 14,
|
|
23
|
+
fontFamily: 'Menlo, Monaco, "Courier New", monospace',
|
|
24
|
+
theme: {
|
|
25
|
+
background: '#1a1a1a',
|
|
26
|
+
foreground: '#e0e0e0',
|
|
27
|
+
cursor: '#e0e0e0',
|
|
28
|
+
cursorAccent: '#1a1a1a',
|
|
29
|
+
selectionBackground: '#4a4a4a',
|
|
30
|
+
black: '#1a1a1a',
|
|
31
|
+
red: '#ff5555',
|
|
32
|
+
green: '#50fa7b',
|
|
33
|
+
yellow: '#f1fa8c',
|
|
34
|
+
blue: '#6272a4',
|
|
35
|
+
magenta: '#ff79c6',
|
|
36
|
+
cyan: '#8be9fd',
|
|
37
|
+
white: '#e0e0e0',
|
|
38
|
+
brightBlack: '#4a4a4a',
|
|
39
|
+
brightRed: '#ff6e6e',
|
|
40
|
+
brightGreen: '#69ff94',
|
|
41
|
+
brightYellow: '#ffffa5',
|
|
42
|
+
brightBlue: '#d6acff',
|
|
43
|
+
brightMagenta: '#ff92df',
|
|
44
|
+
brightCyan: '#a4ffff',
|
|
45
|
+
brightWhite: '#ffffff',
|
|
46
|
+
},
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
// Add addons
|
|
50
|
+
const fitAddon = new FitAddon()
|
|
51
|
+
const webLinksAddon = new WebLinksAddon()
|
|
52
|
+
term.loadAddon(fitAddon)
|
|
53
|
+
term.loadAddon(webLinksAddon)
|
|
54
|
+
|
|
55
|
+
// Open terminal in container
|
|
56
|
+
term.open(terminalRef.current)
|
|
57
|
+
fitAddon.fit()
|
|
58
|
+
|
|
59
|
+
termRef.current = term
|
|
60
|
+
fitAddonRef.current = fitAddon
|
|
61
|
+
|
|
62
|
+
// Connect WebSocket
|
|
63
|
+
const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'
|
|
64
|
+
const ws = new WebSocket(`${wsProtocol}//${window.location.host}/ws`)
|
|
65
|
+
wsRef.current = ws
|
|
66
|
+
|
|
67
|
+
ws.onopen = () => {
|
|
68
|
+
setStatus('connected')
|
|
69
|
+
// Send initial size
|
|
70
|
+
const dims = fitAddon.proposeDimensions()
|
|
71
|
+
if (dims) {
|
|
72
|
+
ws.send(JSON.stringify({ type: 'resize', cols: dims.cols, rows: dims.rows }))
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
ws.onmessage = (event) => {
|
|
77
|
+
try {
|
|
78
|
+
const msg = JSON.parse(event.data)
|
|
79
|
+
switch (msg.type) {
|
|
80
|
+
case 'output':
|
|
81
|
+
term.write(msg.data)
|
|
82
|
+
break
|
|
83
|
+
case 'exit':
|
|
84
|
+
term.write(`\r\n\x1b[31m[Process exited with code ${msg.exitCode}]\x1b[0m\r\n`)
|
|
85
|
+
setStatus('disconnected')
|
|
86
|
+
break
|
|
87
|
+
}
|
|
88
|
+
} catch {
|
|
89
|
+
// Raw data fallback
|
|
90
|
+
term.write(event.data)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
ws.onerror = () => {
|
|
95
|
+
setStatus('error')
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
ws.onclose = () => {
|
|
99
|
+
if (status !== 'error') {
|
|
100
|
+
setStatus('disconnected')
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Terminal input -> WebSocket
|
|
105
|
+
term.onData((data) => {
|
|
106
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
107
|
+
ws.send(JSON.stringify({ type: 'input', data }))
|
|
108
|
+
}
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
// Handle resize
|
|
112
|
+
const handleResize = () => {
|
|
113
|
+
fitAddon.fit()
|
|
114
|
+
const dims = fitAddon.proposeDimensions()
|
|
115
|
+
if (dims && ws.readyState === WebSocket.OPEN) {
|
|
116
|
+
ws.send(JSON.stringify({ type: 'resize', cols: dims.cols, rows: dims.rows }))
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
window.addEventListener('resize', handleResize)
|
|
121
|
+
|
|
122
|
+
// Also observe container size changes (for panel resizes)
|
|
123
|
+
const resizeObserver = new ResizeObserver(handleResize)
|
|
124
|
+
resizeObserver.observe(terminalRef.current)
|
|
125
|
+
|
|
126
|
+
// Cleanup
|
|
127
|
+
return () => {
|
|
128
|
+
window.removeEventListener('resize', handleResize)
|
|
129
|
+
resizeObserver.disconnect()
|
|
130
|
+
ws.close()
|
|
131
|
+
term.dispose()
|
|
132
|
+
}
|
|
133
|
+
}, [])
|
|
134
|
+
|
|
135
|
+
return (
|
|
136
|
+
<div
|
|
137
|
+
style={{
|
|
138
|
+
width: '100%',
|
|
139
|
+
height: '100%',
|
|
140
|
+
backgroundColor: '#1a1a1a',
|
|
141
|
+
display: 'flex',
|
|
142
|
+
flexDirection: 'column',
|
|
143
|
+
}}
|
|
144
|
+
>
|
|
145
|
+
{status !== 'connected' && (
|
|
146
|
+
<div
|
|
147
|
+
style={{
|
|
148
|
+
padding: '8px 12px',
|
|
149
|
+
backgroundColor: status === 'error' ? '#ff5555' : '#4a4a4a',
|
|
150
|
+
color: '#fff',
|
|
151
|
+
fontSize: '12px',
|
|
152
|
+
}}
|
|
153
|
+
>
|
|
154
|
+
{status === 'connecting' && 'Connecting...'}
|
|
155
|
+
{status === 'disconnected' && 'Disconnected'}
|
|
156
|
+
{status === 'error' && 'Connection error'}
|
|
157
|
+
</div>
|
|
158
|
+
)}
|
|
159
|
+
<div
|
|
160
|
+
ref={terminalRef}
|
|
161
|
+
style={{
|
|
162
|
+
flex: 1,
|
|
163
|
+
padding: '4px',
|
|
164
|
+
}}
|
|
165
|
+
/>
|
|
166
|
+
</div>
|
|
167
|
+
)
|
|
168
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"useDefineForClassFields": true,
|
|
5
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
6
|
+
"module": "ESNext",
|
|
7
|
+
"skipLibCheck": true,
|
|
8
|
+
"moduleResolution": "bundler",
|
|
9
|
+
"allowImportingTsExtensions": true,
|
|
10
|
+
"isolatedModules": true,
|
|
11
|
+
"moduleDetection": "force",
|
|
12
|
+
"noEmit": true,
|
|
13
|
+
"jsx": "react-jsx",
|
|
14
|
+
"strict": true,
|
|
15
|
+
"noUnusedLocals": true,
|
|
16
|
+
"noUnusedParameters": true,
|
|
17
|
+
"noFallthroughCasesInSwitch": true,
|
|
18
|
+
"noUncheckedIndexedAccess": true,
|
|
19
|
+
"esModuleInterop": true
|
|
20
|
+
},
|
|
21
|
+
"include": ["src", "server.ts"]
|
|
22
|
+
}
|
package/dist/bin/shella-init.js
CHANGED
|
@@ -5,8 +5,8 @@ import { fileURLToPath } from 'node:url';
|
|
|
5
5
|
import * as clack from '@clack/prompts';
|
|
6
6
|
import { PLUGINS_DIR } from '../src/paths.js';
|
|
7
7
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
-
// Templates are at
|
|
9
|
-
const TEMPLATES_DIR = path.join(__dirname, '..', '
|
|
8
|
+
// Templates are at apps/daemon/templates (one level up from bin/)
|
|
9
|
+
const TEMPLATES_DIR = path.join(__dirname, '..', 'templates');
|
|
10
10
|
const TEMPLATES = [
|
|
11
11
|
{ name: 'express', description: 'Express server with static file serving', needsInstall: false },
|
|
12
12
|
{ name: 'vanilla', description: 'Basic Node.js http server (no dependencies)', needsInstall: false },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shella-init.js","sourceRoot":"","sources":["../../bin/shella-init.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,
|
|
1
|
+
{"version":3,"file":"shella-init.js","sourceRoot":"","sources":["../../bin/shella-init.ts"],"names":[],"mappings":"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"}
|
package/dist/src/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAyPA,wBAAgB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAcxC;AAED,wBAAgB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAWvC"}
|
package/dist/src/api.js
CHANGED
|
@@ -2,8 +2,22 @@ import express from 'express';
|
|
|
2
2
|
import { logger } from './logger.js';
|
|
3
3
|
import { pluginManager } from './plugin-manager.js';
|
|
4
4
|
import { registry } from './registry.js';
|
|
5
|
+
import { sseManager } from './sse.js';
|
|
5
6
|
import { DAEMON_PORT } from './types.js';
|
|
6
7
|
const app = express();
|
|
8
|
+
// Helper to rewrite plugin URLs from localhost to the request host
|
|
9
|
+
// This allows remote clients (like iOS devices) to connect to plugins
|
|
10
|
+
function rewritePluginUrls(plugin, requestHost) {
|
|
11
|
+
// Extract hostname without port
|
|
12
|
+
const hostname = requestHost.split(':')[0] ?? 'localhost';
|
|
13
|
+
return {
|
|
14
|
+
...plugin,
|
|
15
|
+
instances: plugin.instances.map((instance) => ({
|
|
16
|
+
...instance,
|
|
17
|
+
url: instance.url?.replace('localhost', hostname) ?? null,
|
|
18
|
+
})),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
7
21
|
app.use(express.json());
|
|
8
22
|
// CORS middleware - allow all origins
|
|
9
23
|
app.use((_req, res, next) => {
|
|
@@ -13,7 +27,7 @@ app.use((_req, res, next) => {
|
|
|
13
27
|
next();
|
|
14
28
|
});
|
|
15
29
|
// Handle preflight requests
|
|
16
|
-
app.options('*', (_req, res) => {
|
|
30
|
+
app.options('/{*splat}', (_req, res) => {
|
|
17
31
|
res.sendStatus(204);
|
|
18
32
|
});
|
|
19
33
|
// Request logging middleware
|
|
@@ -29,32 +43,55 @@ app.get('/health', (_req, res) => {
|
|
|
29
43
|
uptime: process.uptime(),
|
|
30
44
|
});
|
|
31
45
|
});
|
|
46
|
+
// SSE endpoint for real-time updates
|
|
47
|
+
app.get('/events', (req, res) => {
|
|
48
|
+
const clientId = sseManager.addClient(res);
|
|
49
|
+
const host = req.get('host') ?? 'localhost';
|
|
50
|
+
// Send initial state
|
|
51
|
+
const layout = registry.getLayout();
|
|
52
|
+
const plugins = pluginManager.getAllPlugins();
|
|
53
|
+
sseManager.sendInitialState(clientId, layout, plugins, host);
|
|
54
|
+
// Handle client disconnect
|
|
55
|
+
req.on('close', () => {
|
|
56
|
+
sseManager.removeClient(clientId);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
32
59
|
// List all plugins
|
|
33
|
-
app.get('/plugins', (
|
|
60
|
+
app.get('/plugins', (req, res) => {
|
|
34
61
|
const plugins = pluginManager.getAllPlugins();
|
|
35
|
-
|
|
62
|
+
const host = req.get('host') ?? 'localhost';
|
|
63
|
+
const rewrittenPlugins = plugins.map((p) => rewritePluginUrls(p, host));
|
|
64
|
+
res.json({ plugins: rewrittenPlugins });
|
|
36
65
|
});
|
|
37
66
|
// Get single plugin
|
|
38
67
|
app.get('/plugins/:name', (req, res) => {
|
|
39
|
-
const
|
|
68
|
+
const name = req.params.name;
|
|
40
69
|
const plugin = pluginManager.getPlugin(name ?? '');
|
|
41
70
|
if (plugin === undefined) {
|
|
42
71
|
res.status(404).json({ error: 'Plugin not found' });
|
|
43
72
|
return;
|
|
44
73
|
}
|
|
45
|
-
|
|
74
|
+
const host = req.get('host') ?? 'localhost';
|
|
75
|
+
res.json(rewritePluginUrls(plugin, host));
|
|
46
76
|
});
|
|
47
77
|
// Start a new plugin instance
|
|
48
78
|
// Dev mode is default when devCommand is configured. Use ?dev=false to force production mode.
|
|
49
79
|
app.post('/plugins/:name/start', (req, res) => {
|
|
50
|
-
const
|
|
80
|
+
const name = req.params.name;
|
|
51
81
|
// Dev mode defaults to true, can be disabled with ?dev=false
|
|
52
82
|
const devMode = req.query.dev !== 'false';
|
|
53
83
|
pluginManager
|
|
54
84
|
.startPlugin(name ?? '', devMode)
|
|
55
85
|
.then((instance) => {
|
|
56
86
|
if (instance !== null) {
|
|
57
|
-
|
|
87
|
+
// Rewrite URL for remote clients
|
|
88
|
+
const host = req.get('host') ?? 'localhost';
|
|
89
|
+
const hostname = host.split(':')[0] ?? 'localhost';
|
|
90
|
+
const rewrittenInstance = {
|
|
91
|
+
...instance,
|
|
92
|
+
url: instance.url?.replace('localhost', hostname) ?? null,
|
|
93
|
+
};
|
|
94
|
+
res.json({ success: true, instance: rewrittenInstance });
|
|
58
95
|
}
|
|
59
96
|
else {
|
|
60
97
|
const error = devMode
|
|
@@ -70,7 +107,8 @@ app.post('/plugins/:name/start', (req, res) => {
|
|
|
70
107
|
});
|
|
71
108
|
// Stop a specific plugin instance
|
|
72
109
|
app.post('/plugins/:name/instances/:instanceId/stop', (req, res) => {
|
|
73
|
-
const
|
|
110
|
+
const name = req.params.name;
|
|
111
|
+
const instanceId = req.params.instanceId;
|
|
74
112
|
pluginManager
|
|
75
113
|
.stopInstance(name ?? '', instanceId ?? '')
|
|
76
114
|
.then((success) => {
|
|
@@ -138,7 +176,8 @@ function isValidLayout(value) {
|
|
|
138
176
|
if (layout.version !== 1) {
|
|
139
177
|
return false;
|
|
140
178
|
}
|
|
141
|
-
|
|
179
|
+
// Accept null, undefined, or missing root as empty layout
|
|
180
|
+
if (layout.root === null || layout.root === undefined) {
|
|
142
181
|
return true;
|
|
143
182
|
}
|
|
144
183
|
return isValidPanelNode(layout.root);
|
|
@@ -158,6 +197,8 @@ app.put('/layout', (req, res) => {
|
|
|
158
197
|
registry
|
|
159
198
|
.save()
|
|
160
199
|
.then(() => {
|
|
200
|
+
// Broadcast layout update to all SSE clients
|
|
201
|
+
sseManager.broadcastLayout(body.layout);
|
|
161
202
|
res.json({ success: true });
|
|
162
203
|
})
|
|
163
204
|
.catch((err) => {
|
|
@@ -173,7 +214,7 @@ app.use((err, _req, res, _next) => {
|
|
|
173
214
|
let server = null;
|
|
174
215
|
export function startApi() {
|
|
175
216
|
return new Promise((resolve, reject) => {
|
|
176
|
-
server = app.listen(DAEMON_PORT, '
|
|
217
|
+
server = app.listen(DAEMON_PORT, '0.0.0.0', () => {
|
|
177
218
|
logger.info({ port: DAEMON_PORT }, 'API server started');
|
|
178
219
|
resolve();
|
|
179
220
|
});
|
package/dist/src/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,OAA2D,MAAM,SAAS,CAAC;AAElF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bonjour.d.ts","sourceRoot":"","sources":["../../src/bonjour.ts"],"names":[],"mappings":"AAUA,wBAAgB,uBAAuB,IAAI,IAAI,CAyB9C;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAU7C"}
|