hermium 0.2.0 → 0.3.0
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/bin/hermium.mjs +102 -58
- package/dist/server/__23tanstack-start-plugin-adapters-Cwee5PKy.mjs +6 -0
- package/dist/server/_chunks/ssr-renderer.mjs +22 -0
- package/dist/server/_libs/bail.mjs +8 -0
- package/dist/server/_libs/base-ui__react.mjs +9858 -0
- package/dist/server/_libs/base-ui__utils.mjs +1106 -0
- package/dist/server/_libs/ccount.mjs +16 -0
- package/dist/server/_libs/character-entities.mjs +2130 -0
- package/dist/server/_libs/class-variance-authority.mjs +44 -0
- package/dist/server/_libs/clsx.mjs +16 -0
- package/dist/server/_libs/comma-separated-tokens.mjs +10 -0
- package/dist/server/_libs/cookie-es.mjs +1 -0
- package/dist/server/_libs/croner.mjs +1 -0
- package/dist/server/_libs/crossws.mjs +1 -0
- package/dist/server/_libs/decode-named-character-reference+[...].mjs +8 -0
- package/dist/server/_libs/devlop.mjs +8 -0
- package/dist/server/_libs/escape-string-regexp.mjs +9 -0
- package/dist/server/_libs/estree-util-is-identifier-name.mjs +11 -0
- package/dist/server/_libs/extend.mjs +97 -0
- package/dist/server/_libs/floating-ui__core.mjs +663 -0
- package/dist/server/_libs/floating-ui__dom.mjs +624 -0
- package/dist/server/_libs/floating-ui__react-dom.mjs +279 -0
- package/dist/server/_libs/floating-ui__utils.mjs +322 -0
- package/dist/server/_libs/h3.mjs +408 -0
- package/dist/server/_libs/hast-util-is-element.mjs +75 -0
- package/dist/server/_libs/hast-util-to-jsx-runtime.mjs +388 -0
- package/dist/server/_libs/hast-util-to-text.mjs +305 -0
- package/dist/server/_libs/hast-util-whitespace.mjs +10 -0
- package/dist/server/_libs/highlight.js.mjs +14756 -0
- package/dist/server/_libs/hookable.mjs +1 -0
- package/dist/server/_libs/html-url-attributes.mjs +26 -0
- package/dist/server/_libs/inline-style-parser.mjs +142 -0
- package/dist/server/_libs/is-plain-obj.mjs +10 -0
- package/dist/server/_libs/isbot.mjs +21 -0
- package/dist/server/_libs/longest-streak.mjs +25 -0
- package/dist/server/_libs/lowlight.mjs +262 -0
- package/dist/server/_libs/markdown-table.mjs +142 -0
- package/dist/server/_libs/mdast-util-find-and-replace.mjs +109 -0
- package/dist/server/_libs/mdast-util-from-markdown.mjs +717 -0
- package/dist/server/_libs/mdast-util-gfm-autolink-literal+[...].mjs +156 -0
- package/dist/server/_libs/mdast-util-gfm-footnote.mjs +117 -0
- package/dist/server/_libs/mdast-util-gfm-strikethrough.mjs +54 -0
- package/dist/server/_libs/mdast-util-gfm-table.mjs +157 -0
- package/dist/server/_libs/mdast-util-gfm-task-list-item.mjs +77 -0
- package/dist/server/_libs/mdast-util-gfm.mjs +29 -0
- package/dist/server/_libs/mdast-util-phrasing.mjs +30 -0
- package/dist/server/_libs/mdast-util-to-hast.mjs +710 -0
- package/dist/server/_libs/mdast-util-to-markdown.mjs +798 -0
- package/dist/server/_libs/mdast-util-to-string.mjs +38 -0
- package/dist/server/_libs/micromark-core-commonmark.mjs +2259 -0
- package/dist/server/_libs/micromark-extension-gfm-autolink-literal+[...].mjs +344 -0
- package/dist/server/_libs/micromark-extension-gfm-footnote+[...].mjs +279 -0
- package/dist/server/_libs/micromark-extension-gfm-strikethrough+[...].mjs +98 -0
- package/dist/server/_libs/micromark-extension-gfm-table.mjs +491 -0
- package/dist/server/_libs/micromark-extension-gfm-tagfilter+[...].mjs +1 -0
- package/dist/server/_libs/micromark-extension-gfm-task-list-item+[...].mjs +77 -0
- package/dist/server/_libs/micromark-extension-gfm.mjs +18 -0
- package/dist/server/_libs/micromark-factory-destination.mjs +94 -0
- package/dist/server/_libs/micromark-factory-label.mjs +63 -0
- package/dist/server/_libs/micromark-factory-space.mjs +24 -0
- package/dist/server/_libs/micromark-factory-title.mjs +65 -0
- package/dist/server/_libs/micromark-factory-whitespace.mjs +22 -0
- package/dist/server/_libs/micromark-util-character.mjs +44 -0
- package/dist/server/_libs/micromark-util-chunked.mjs +36 -0
- package/dist/server/_libs/micromark-util-classify-character+[...].mjs +12 -0
- package/dist/server/_libs/micromark-util-combine-extensions+[...].mjs +41 -0
- package/dist/server/_libs/micromark-util-decode-numeric-character-reference+[...].mjs +19 -0
- package/dist/server/_libs/micromark-util-decode-string.mjs +21 -0
- package/dist/server/_libs/micromark-util-encode.mjs +1 -0
- package/dist/server/_libs/micromark-util-html-tag-name.mjs +69 -0
- package/dist/server/_libs/micromark-util-normalize-identifier+[...].mjs +6 -0
- package/dist/server/_libs/micromark-util-resolve-all.mjs +15 -0
- package/dist/server/_libs/micromark-util-sanitize-uri.mjs +41 -0
- package/dist/server/_libs/micromark-util-subtokenize.mjs +346 -0
- package/dist/server/_libs/micromark.mjs +906 -0
- package/dist/server/_libs/ocache.mjs +1 -0
- package/dist/server/_libs/ohash.mjs +1 -0
- package/dist/server/_libs/property-information.mjs +1209 -0
- package/dist/server/_libs/react-dom.mjs +10779 -0
- package/dist/server/_libs/react-markdown.mjs +147 -0
- package/dist/server/_libs/react.mjs +513 -0
- package/dist/server/_libs/rehype-highlight.mjs +94 -0
- package/dist/server/_libs/remark-gfm.mjs +20 -0
- package/dist/server/_libs/remark-parse.mjs +19 -0
- package/dist/server/_libs/remark-rehype.mjs +21 -0
- package/dist/server/_libs/reselect.mjs +1 -0
- package/dist/server/_libs/rou3.mjs +8 -0
- package/dist/server/_libs/seroval-plugins.mjs +1 -0
- package/dist/server/_libs/seroval.mjs +1 -0
- package/dist/server/_libs/space-separated-tokens.mjs +6 -0
- package/dist/server/_libs/srvx.mjs +781 -0
- package/dist/server/_libs/style-to-js.mjs +72 -0
- package/dist/server/_libs/style-to-object.mjs +38 -0
- package/dist/server/_libs/tabler__icons-react.mjs +140 -0
- package/dist/server/_libs/tailwind-merge.mjs +3255 -0
- package/dist/server/_libs/tanstack__history.mjs +29 -0
- package/dist/server/_libs/tanstack__react-router.mjs +1120 -0
- package/dist/server/_libs/tanstack__react-store.mjs +2 -0
- package/dist/server/_libs/tanstack__router-core.mjs +3594 -0
- package/dist/server/_libs/tanstack__store.mjs +1 -0
- package/dist/server/_libs/trim-lines.mjs +41 -0
- package/dist/server/_libs/trough.mjs +85 -0
- package/dist/server/_libs/ufo.mjs +54 -0
- package/dist/server/_libs/unctx.mjs +1 -0
- package/dist/server/_libs/ungap__structured-clone.mjs +224 -0
- package/dist/server/_libs/unified.mjs +661 -0
- package/dist/server/_libs/unist-util-find-after.mjs +41 -0
- package/dist/server/_libs/unist-util-is.mjs +100 -0
- package/dist/server/_libs/unist-util-position.mjs +27 -0
- package/dist/server/_libs/unist-util-stringify-position.mjs +27 -0
- package/dist/server/_libs/unist-util-visit-parents.mjs +83 -0
- package/dist/server/_libs/unist-util-visit.mjs +24 -0
- package/dist/server/_libs/unstorage.mjs +1 -0
- package/dist/server/_libs/use-sync-external-store.mjs +139 -0
- package/dist/server/_libs/vfile-message.mjs +138 -0
- package/dist/server/_libs/vfile.mjs +467 -0
- package/dist/server/_libs/zustand.mjs +43 -0
- package/dist/server/_libs/zwitch.mjs +1 -0
- package/dist/server/_ssr/ChatInputBlock-Bu2-iop_.mjs +220 -0
- package/dist/server/_ssr/MarkdownMessage-CNS7OSKN.mjs +68 -0
- package/dist/server/_ssr/chat._sessionId-P02iSfut.mjs +477 -0
- package/dist/server/_ssr/chat.index-BYB_48NC.mjs +64 -0
- package/dist/server/_ssr/index-C1mT_2d8.mjs +4890 -0
- package/dist/server/_ssr/index-DFV9_oCk.mjs +43 -0
- package/dist/server/_ssr/memory-CW_fSOG9.mjs +257 -0
- package/dist/server/_ssr/router-CUAfx91O.mjs +2035 -0
- package/dist/server/_ssr/settings-DoXurzvn.mjs +10 -0
- package/dist/server/_ssr/skills-Cs7A5ZwO.mjs +422 -0
- package/dist/server/_ssr/theme-BK4-7E2h.mjs +42 -0
- package/dist/server/_ssr/usage-Bs2-LXGz.mjs +298 -0
- package/dist/server/_tanstack-start-manifest_v-C7Upe2TI.mjs +4 -0
- package/dist/server/index.mjs +506 -0
- package/package.json +4 -3
- package/dist/public/assets/css/index-Dfs9RUU9.css +0 -1
- package/dist/public/assets/css/styles-B8p6jk5Z.css +0 -1
- package/dist/public/assets/js/ChatInputBlock-Bw7AL70H.js +0 -1
- package/dist/public/assets/js/MarkdownMessage-8d7Y6VL-.js +0 -1
- package/dist/public/assets/js/base-ui-BvQbAt_1.js +0 -1
- package/dist/public/assets/js/chat._sessionId-BG6lVraH.js +0 -1
- package/dist/public/assets/js/chat.index-D2zdMPTT.js +0 -1
- package/dist/public/assets/js/index-C0AK45FU.js +0 -60
- package/dist/public/assets/js/index-Cx5En4FK.js +0 -1
- package/dist/public/assets/js/memory-CeSRdTkW.js +0 -3
- package/dist/public/assets/js/router-8uDKazL-.js +0 -1
- package/dist/public/assets/js/settings-Bc3Y5zXO.js +0 -1
- package/dist/public/assets/js/skills-DZv7sA_5.js +0 -1
- package/dist/public/assets/js/theme-CPkdkpaj.js +0 -1
- package/dist/public/assets/js/usage-DXQsT9_b.js +0 -1
- package/dist/public/assets/woff2/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dist/public/assets/woff2/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dist/public/assets/woff2/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/public/assets/woff2/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/public/assets/woff2/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dist/public/favicon.ico +0 -0
- package/dist/public/logo.png +0 -0
- package/dist/public/manifest.json +0 -25
- package/dist/public/robots.txt +0 -3
package/bin/hermium.mjs
CHANGED
|
@@ -13,7 +13,8 @@ const CURRENT_VERSION = pkg.version
|
|
|
13
13
|
const HERMIUM_HOME = resolve(homedir(), '.hermium')
|
|
14
14
|
const PID_FILE = join(HERMIUM_HOME, 'hermium.pid')
|
|
15
15
|
const LOG_FILE = join(HERMIUM_HOME, 'hermium.log')
|
|
16
|
-
const
|
|
16
|
+
const DEFAULT_API_PORT = 47474
|
|
17
|
+
const DEFAULT_WEB_PORT = 42424
|
|
17
18
|
|
|
18
19
|
// ─── Runtime detection ─────────────────────────────────────────────────────
|
|
19
20
|
|
|
@@ -69,14 +70,16 @@ async function checkLatestVersion() {
|
|
|
69
70
|
|
|
70
71
|
function readPid() {
|
|
71
72
|
try {
|
|
72
|
-
const
|
|
73
|
-
|
|
73
|
+
const raw = readFileSync(PID_FILE, 'utf-8').trim()
|
|
74
|
+
const [apiPid, webPid] = raw.split(',').map(s => parseInt(s.trim()))
|
|
75
|
+
return { apiPid: Number.isFinite(apiPid) ? apiPid : null, webPid: Number.isFinite(webPid) ? webPid : null }
|
|
74
76
|
} catch {
|
|
75
|
-
return null
|
|
77
|
+
return { apiPid: null, webPid: null }
|
|
76
78
|
}
|
|
77
79
|
}
|
|
78
80
|
|
|
79
81
|
function isRunning(pid) {
|
|
82
|
+
if (!pid) return false
|
|
80
83
|
try {
|
|
81
84
|
process.kill(pid, 0)
|
|
82
85
|
return true
|
|
@@ -85,29 +88,42 @@ function isRunning(pid) {
|
|
|
85
88
|
}
|
|
86
89
|
}
|
|
87
90
|
|
|
88
|
-
function
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
function getPids() {
|
|
92
|
+
const { apiPid, webPid } = readPid()
|
|
93
|
+
const apiRunning = apiPid && isRunning(apiPid)
|
|
94
|
+
const webRunning = webPid && isRunning(webPid)
|
|
95
|
+
if (!apiRunning && !webRunning) {
|
|
96
|
+
removePid()
|
|
97
|
+
return { apiPid: null, webPid: null }
|
|
98
|
+
}
|
|
99
|
+
return { apiPid: apiRunning ? apiPid : null, webPid: webRunning ? webPid : null }
|
|
93
100
|
}
|
|
94
101
|
|
|
95
|
-
function writePid(
|
|
102
|
+
function writePid(apiPid, webPid) {
|
|
96
103
|
mkdirSync(HERMIUM_HOME, { recursive: true })
|
|
97
|
-
writeFileSync(PID_FILE,
|
|
104
|
+
writeFileSync(PID_FILE, `${apiPid},${webPid}`)
|
|
98
105
|
}
|
|
99
106
|
|
|
100
107
|
function removePid() {
|
|
101
108
|
try { unlinkSync(PID_FILE) } catch {}
|
|
102
109
|
}
|
|
103
110
|
|
|
104
|
-
function
|
|
111
|
+
function getApiPort() {
|
|
105
112
|
const idx = process.argv.indexOf('--port')
|
|
106
113
|
if (idx !== -1 && process.argv[idx + 1]) {
|
|
107
114
|
const p = parseInt(process.argv[idx + 1])
|
|
108
115
|
if (!isNaN(p)) return p
|
|
109
116
|
}
|
|
110
|
-
return
|
|
117
|
+
return DEFAULT_API_PORT
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function getWebPort() {
|
|
121
|
+
const idx = process.argv.indexOf('--web-port')
|
|
122
|
+
if (idx !== -1 && process.argv[idx + 1]) {
|
|
123
|
+
const p = parseInt(process.argv[idx + 1])
|
|
124
|
+
if (!isNaN(p)) return p
|
|
125
|
+
}
|
|
126
|
+
return DEFAULT_WEB_PORT
|
|
111
127
|
}
|
|
112
128
|
|
|
113
129
|
function rotateLog() {
|
|
@@ -137,7 +153,7 @@ function stopPid(pid) {
|
|
|
137
153
|
}
|
|
138
154
|
}
|
|
139
155
|
|
|
140
|
-
function spawnServer({ name, entry, logFile,
|
|
156
|
+
function spawnServer({ name, entry, logFile, env, runtime }) {
|
|
141
157
|
if (!existsSync(entry)) {
|
|
142
158
|
console.log(pc.red(` ✗ ${name} not found: ${entry}`))
|
|
143
159
|
console.log(` Run "hermium build" first (or check your installation)`)
|
|
@@ -161,31 +177,26 @@ function spawnServer({ name, entry, logFile, pidFile, port, env, runtime }) {
|
|
|
161
177
|
})
|
|
162
178
|
|
|
163
179
|
child.unref()
|
|
164
|
-
writePid(child.pid)
|
|
165
180
|
return child.pid
|
|
166
181
|
}
|
|
167
182
|
|
|
168
183
|
// ─── Path resolution ───────────────────────────────────────────────────────
|
|
169
184
|
|
|
170
185
|
function findApiEntry() {
|
|
171
|
-
// Production: bundled in cli/dist/api.mjs
|
|
172
186
|
const bundled = resolve(pkgDir, 'dist', 'api.mjs')
|
|
173
187
|
if (existsSync(bundled)) return bundled
|
|
174
188
|
|
|
175
|
-
// Dev: from monorepo packages/api
|
|
176
189
|
const monorepo = resolve(pkgDir, '..', '..', 'packages', 'api', 'dist', 'index.js')
|
|
177
190
|
if (existsSync(monorepo)) return monorepo
|
|
178
191
|
|
|
179
192
|
return null
|
|
180
193
|
}
|
|
181
194
|
|
|
182
|
-
function
|
|
183
|
-
|
|
184
|
-
const bundled = resolve(pkgDir, 'dist', 'public')
|
|
195
|
+
function findWebServer() {
|
|
196
|
+
const bundled = resolve(pkgDir, 'dist', 'server', 'index.mjs')
|
|
185
197
|
if (existsSync(bundled)) return bundled
|
|
186
198
|
|
|
187
|
-
|
|
188
|
-
const monorepo = resolve(pkgDir, '..', '..', 'packages', 'web', 'dist')
|
|
199
|
+
const monorepo = resolve(pkgDir, '..', '..', 'packages', 'web', '.output', 'server', 'index.mjs')
|
|
189
200
|
if (existsSync(monorepo)) return monorepo
|
|
190
201
|
|
|
191
202
|
return null
|
|
@@ -194,91 +205,116 @@ function findWebDist() {
|
|
|
194
205
|
// ─── Commands ──────────────────────────────────────────────────────────────
|
|
195
206
|
|
|
196
207
|
function cmdStatus() {
|
|
197
|
-
const
|
|
198
|
-
if (
|
|
199
|
-
console.log(pc.green(` ✓ Hermium is running
|
|
200
|
-
console.log(`
|
|
201
|
-
console.log(`
|
|
208
|
+
const { apiPid, webPid } = getPids()
|
|
209
|
+
if (apiPid || webPid) {
|
|
210
|
+
console.log(pc.green(` ✓ Hermium is running`))
|
|
211
|
+
if (apiPid) console.log(` API : PID ${apiPid}, port ${getApiPort()}`)
|
|
212
|
+
if (webPid) console.log(` Web : PID ${webPid}, port ${getWebPort()}`)
|
|
213
|
+
console.log(` Logs : ${LOG_FILE.replace(homedir(), '~')}`)
|
|
202
214
|
} else {
|
|
203
215
|
console.log(pc.yellow(` ⊘ Hermium is not running`))
|
|
204
216
|
}
|
|
205
217
|
}
|
|
206
218
|
|
|
207
219
|
async function cmdStart() {
|
|
208
|
-
const
|
|
209
|
-
if (
|
|
210
|
-
console.log(pc.yellow(` ✗ Hermium is already running
|
|
220
|
+
const { apiPid: existingApi, webPid: existingWeb } = getPids()
|
|
221
|
+
if (existingApi || existingWeb) {
|
|
222
|
+
console.log(pc.yellow(` ✗ Hermium is already running`))
|
|
223
|
+
if (existingApi) console.log(` API PID: ${existingApi}`)
|
|
224
|
+
if (existingWeb) console.log(` Web PID: ${existingWeb}`)
|
|
211
225
|
console.log(` Use "hermium stop" first`)
|
|
212
226
|
process.exit(1)
|
|
213
227
|
}
|
|
214
228
|
|
|
215
|
-
const
|
|
229
|
+
const apiPort = getApiPort()
|
|
230
|
+
const webPort = getWebPort()
|
|
216
231
|
const runtime = getRuntimeCmd()
|
|
217
232
|
const apiEntry = findApiEntry()
|
|
218
|
-
const
|
|
233
|
+
const webServer = findWebServer()
|
|
219
234
|
|
|
220
235
|
if (!apiEntry) {
|
|
221
236
|
console.log(pc.red(` ✗ API server not found. Run "hermium build" first.`))
|
|
222
237
|
process.exit(1)
|
|
223
238
|
}
|
|
224
239
|
|
|
240
|
+
if (!webServer) {
|
|
241
|
+
console.log(pc.red(` ✗ Web server not found. Run "hermium build" first.`))
|
|
242
|
+
process.exit(1)
|
|
243
|
+
}
|
|
244
|
+
|
|
225
245
|
mkdirSync(HERMIUM_HOME, { recursive: true })
|
|
226
246
|
|
|
227
|
-
console.log(pc.cyan(` ⏳ Starting Hermium
|
|
247
|
+
console.log(pc.cyan(` ⏳ Starting Hermium...`))
|
|
228
248
|
|
|
229
|
-
const
|
|
230
|
-
name: '
|
|
249
|
+
const apiPid = spawnServer({
|
|
250
|
+
name: 'API server',
|
|
231
251
|
entry: apiEntry,
|
|
232
252
|
logFile: LOG_FILE,
|
|
233
|
-
pidFile: PID_FILE,
|
|
234
|
-
port,
|
|
235
253
|
runtime,
|
|
236
254
|
env: {
|
|
237
|
-
PORT: String(
|
|
255
|
+
PORT: String(apiPort),
|
|
238
256
|
APP_VERSION: CURRENT_VERSION,
|
|
239
|
-
WEB_STATIC_DIR: webDist || '',
|
|
240
257
|
AUTH_DISABLED: '1',
|
|
241
258
|
},
|
|
242
259
|
})
|
|
243
260
|
|
|
244
|
-
|
|
261
|
+
const webPid = spawnServer({
|
|
262
|
+
name: 'Web server',
|
|
263
|
+
entry: webServer,
|
|
264
|
+
logFile: LOG_FILE,
|
|
265
|
+
runtime,
|
|
266
|
+
env: {
|
|
267
|
+
PORT: String(webPort),
|
|
268
|
+
NITRO_PORT: String(webPort),
|
|
269
|
+
HERMIUM_API_URL: `http://127.0.0.1:${apiPort}`,
|
|
270
|
+
APP_VERSION: CURRENT_VERSION,
|
|
271
|
+
},
|
|
272
|
+
})
|
|
273
|
+
|
|
274
|
+
writePid(apiPid, webPid)
|
|
275
|
+
|
|
276
|
+
console.log(` API PID: ${apiPid} (port ${apiPort})`)
|
|
277
|
+
console.log(` Web PID: ${webPid} (port ${webPort})`)
|
|
245
278
|
|
|
246
279
|
// Poll health
|
|
247
280
|
const maxWait = 30000
|
|
248
281
|
const interval = 500
|
|
249
282
|
let waited = 0
|
|
250
|
-
const
|
|
283
|
+
const apiUrl = `http://127.0.0.1:${apiPort}`
|
|
284
|
+
const webUrl = `http://127.0.0.1:${webPort}`
|
|
251
285
|
|
|
252
286
|
function poll() {
|
|
253
287
|
waited += interval
|
|
254
288
|
|
|
255
|
-
if (!isRunning(
|
|
289
|
+
if (!isRunning(apiPid) || !isRunning(webPid)) {
|
|
256
290
|
console.log(pc.red(` ✗ Server crashed`))
|
|
257
291
|
console.log(` Check log: ${LOG_FILE}`)
|
|
258
292
|
removePid()
|
|
259
293
|
process.exit(1)
|
|
260
294
|
}
|
|
261
295
|
|
|
262
|
-
fetch(`${
|
|
296
|
+
fetch(`${apiUrl}/api/hermes/sessions`).catch(() => null).then((res) => {
|
|
263
297
|
if (!res || !res.ok) {
|
|
264
298
|
if (waited < maxWait) {
|
|
265
299
|
setTimeout(poll, interval)
|
|
266
300
|
} else {
|
|
267
301
|
console.log(pc.green(` ✓ Hermium started`))
|
|
268
|
-
console.log(` ${
|
|
302
|
+
console.log(` API : ${apiUrl}`)
|
|
303
|
+
console.log(` Web : ${webUrl}`)
|
|
269
304
|
console.log(` Logs: ${LOG_FILE.replace(homedir(), '~')}`)
|
|
270
305
|
checkLatestVersion()
|
|
271
306
|
}
|
|
272
307
|
} else {
|
|
273
308
|
console.log(pc.green(` ✓ Hermium started`))
|
|
274
|
-
console.log(` ${
|
|
309
|
+
console.log(` API : ${apiUrl}`)
|
|
310
|
+
console.log(` Web : ${webUrl}`)
|
|
275
311
|
console.log(` Logs: ${LOG_FILE.replace(homedir(), '~')}`)
|
|
276
312
|
checkLatestVersion()
|
|
277
313
|
// Open browser
|
|
278
314
|
const openCmd =
|
|
279
|
-
process.platform === 'win32' ? `start ${
|
|
280
|
-
process.platform === 'darwin' ? `open ${
|
|
281
|
-
`xdg-open ${
|
|
315
|
+
process.platform === 'win32' ? `start ${webUrl}` :
|
|
316
|
+
process.platform === 'darwin' ? `open ${webUrl}` :
|
|
317
|
+
`xdg-open ${webUrl}`
|
|
282
318
|
try { execSync(openCmd, { stdio: 'ignore' }) } catch {}
|
|
283
319
|
}
|
|
284
320
|
})
|
|
@@ -288,15 +324,21 @@ async function cmdStart() {
|
|
|
288
324
|
}
|
|
289
325
|
|
|
290
326
|
function cmdStop() {
|
|
291
|
-
const
|
|
292
|
-
if (!
|
|
327
|
+
const { apiPid, webPid } = getPids()
|
|
328
|
+
if (!apiPid && !webPid) {
|
|
293
329
|
console.log(pc.yellow(` ⊘ Hermium is not running`))
|
|
294
330
|
return
|
|
295
331
|
}
|
|
296
332
|
|
|
297
|
-
|
|
333
|
+
if (webPid) {
|
|
334
|
+
stopPid(webPid)
|
|
335
|
+
console.log(pc.green(` ✓ Web server stopped (PID: ${webPid})`))
|
|
336
|
+
}
|
|
337
|
+
if (apiPid) {
|
|
338
|
+
stopPid(apiPid)
|
|
339
|
+
console.log(pc.green(` ✓ API server stopped (PID: ${apiPid})`))
|
|
340
|
+
}
|
|
298
341
|
removePid()
|
|
299
|
-
console.log(pc.green(` ✓ Hermium stopped (PID: ${pid})`))
|
|
300
342
|
}
|
|
301
343
|
|
|
302
344
|
function cmdRestart() {
|
|
@@ -309,7 +351,6 @@ function cmdBuild() {
|
|
|
309
351
|
console.log(pc.cyan(` 🔨 Building Hermium...`))
|
|
310
352
|
const runtime = getRuntimeCmd()
|
|
311
353
|
|
|
312
|
-
// Detect if we're in a monorepo
|
|
313
354
|
const rootDir = resolve(pkgDir, '..', '..')
|
|
314
355
|
const isMonorepo = existsSync(resolve(rootDir, 'packages', 'api')) && existsSync(resolve(rootDir, 'packages', 'web'))
|
|
315
356
|
|
|
@@ -325,6 +366,8 @@ function cmdBuild() {
|
|
|
325
366
|
execSync(`${runtime} run build:api`, { cwd: rootDir, stdio: 'inherit' })
|
|
326
367
|
console.log(` → Building Web...`)
|
|
327
368
|
execSync(`${runtime} run build:web`, { cwd: rootDir, stdio: 'inherit' })
|
|
369
|
+
console.log(` → Building CLI...`)
|
|
370
|
+
execSync(`${runtime} run build:cli`, { cwd: rootDir, stdio: 'inherit' })
|
|
328
371
|
console.log(pc.green(` ✓ Build complete`))
|
|
329
372
|
} catch (err) {
|
|
330
373
|
console.log(pc.red(` ✗ Build failed`))
|
|
@@ -359,9 +402,9 @@ ${pc.bold('Usage:')}
|
|
|
359
402
|
hermium <command> [options]
|
|
360
403
|
|
|
361
404
|
${pc.bold('Commands:')}
|
|
362
|
-
start Start Hermium
|
|
363
|
-
stop Stop Hermium
|
|
364
|
-
restart Restart Hermium
|
|
405
|
+
start Start Hermium servers (daemon)
|
|
406
|
+
stop Stop Hermium servers
|
|
407
|
+
restart Restart Hermium servers
|
|
365
408
|
status Show running status
|
|
366
409
|
build Build from source (requires repo)
|
|
367
410
|
dev Run in dev mode (requires repo)
|
|
@@ -369,11 +412,12 @@ ${pc.bold('Commands:')}
|
|
|
369
412
|
version Show version
|
|
370
413
|
|
|
371
414
|
${pc.bold('Options:')}
|
|
372
|
-
--port <n>
|
|
415
|
+
--port <n> API server port (default: 47474)
|
|
416
|
+
--web-port <n> Web server port (default: 42424)
|
|
373
417
|
|
|
374
418
|
${pc.bold('Examples:')}
|
|
375
419
|
hermium start
|
|
376
|
-
hermium start --port 47474
|
|
420
|
+
hermium start --port 47474 --web-port 42424
|
|
377
421
|
hermium stop
|
|
378
422
|
hermium status
|
|
379
423
|
`)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { a as HTTPError, c as toRequest } from "../_libs/h3.mjs";
|
|
2
|
+
import "../_libs/rou3.mjs";
|
|
3
|
+
import "../_libs/srvx.mjs";
|
|
4
|
+
import "node:http";
|
|
5
|
+
import "node:stream";
|
|
6
|
+
import "node:stream/promises";
|
|
7
|
+
import "node:https";
|
|
8
|
+
import "node:http2";
|
|
9
|
+
function fetchViteEnv(viteEnvName, input, init) {
|
|
10
|
+
const envs = globalThis.__nitro_vite_envs__ || {};
|
|
11
|
+
const viteEnv = envs[viteEnvName];
|
|
12
|
+
if (!viteEnv) {
|
|
13
|
+
throw HTTPError.status(404);
|
|
14
|
+
}
|
|
15
|
+
return Promise.resolve(viteEnv.fetch(toRequest(input, init)));
|
|
16
|
+
}
|
|
17
|
+
function ssrRenderer({ req }) {
|
|
18
|
+
return fetchViteEnv("ssr", req);
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
ssrRenderer as default
|
|
22
|
+
};
|