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.
Files changed (157) hide show
  1. package/bin/hermium.mjs +102 -58
  2. package/dist/server/__23tanstack-start-plugin-adapters-Cwee5PKy.mjs +6 -0
  3. package/dist/server/_chunks/ssr-renderer.mjs +22 -0
  4. package/dist/server/_libs/bail.mjs +8 -0
  5. package/dist/server/_libs/base-ui__react.mjs +9858 -0
  6. package/dist/server/_libs/base-ui__utils.mjs +1106 -0
  7. package/dist/server/_libs/ccount.mjs +16 -0
  8. package/dist/server/_libs/character-entities.mjs +2130 -0
  9. package/dist/server/_libs/class-variance-authority.mjs +44 -0
  10. package/dist/server/_libs/clsx.mjs +16 -0
  11. package/dist/server/_libs/comma-separated-tokens.mjs +10 -0
  12. package/dist/server/_libs/cookie-es.mjs +1 -0
  13. package/dist/server/_libs/croner.mjs +1 -0
  14. package/dist/server/_libs/crossws.mjs +1 -0
  15. package/dist/server/_libs/decode-named-character-reference+[...].mjs +8 -0
  16. package/dist/server/_libs/devlop.mjs +8 -0
  17. package/dist/server/_libs/escape-string-regexp.mjs +9 -0
  18. package/dist/server/_libs/estree-util-is-identifier-name.mjs +11 -0
  19. package/dist/server/_libs/extend.mjs +97 -0
  20. package/dist/server/_libs/floating-ui__core.mjs +663 -0
  21. package/dist/server/_libs/floating-ui__dom.mjs +624 -0
  22. package/dist/server/_libs/floating-ui__react-dom.mjs +279 -0
  23. package/dist/server/_libs/floating-ui__utils.mjs +322 -0
  24. package/dist/server/_libs/h3.mjs +408 -0
  25. package/dist/server/_libs/hast-util-is-element.mjs +75 -0
  26. package/dist/server/_libs/hast-util-to-jsx-runtime.mjs +388 -0
  27. package/dist/server/_libs/hast-util-to-text.mjs +305 -0
  28. package/dist/server/_libs/hast-util-whitespace.mjs +10 -0
  29. package/dist/server/_libs/highlight.js.mjs +14756 -0
  30. package/dist/server/_libs/hookable.mjs +1 -0
  31. package/dist/server/_libs/html-url-attributes.mjs +26 -0
  32. package/dist/server/_libs/inline-style-parser.mjs +142 -0
  33. package/dist/server/_libs/is-plain-obj.mjs +10 -0
  34. package/dist/server/_libs/isbot.mjs +21 -0
  35. package/dist/server/_libs/longest-streak.mjs +25 -0
  36. package/dist/server/_libs/lowlight.mjs +262 -0
  37. package/dist/server/_libs/markdown-table.mjs +142 -0
  38. package/dist/server/_libs/mdast-util-find-and-replace.mjs +109 -0
  39. package/dist/server/_libs/mdast-util-from-markdown.mjs +717 -0
  40. package/dist/server/_libs/mdast-util-gfm-autolink-literal+[...].mjs +156 -0
  41. package/dist/server/_libs/mdast-util-gfm-footnote.mjs +117 -0
  42. package/dist/server/_libs/mdast-util-gfm-strikethrough.mjs +54 -0
  43. package/dist/server/_libs/mdast-util-gfm-table.mjs +157 -0
  44. package/dist/server/_libs/mdast-util-gfm-task-list-item.mjs +77 -0
  45. package/dist/server/_libs/mdast-util-gfm.mjs +29 -0
  46. package/dist/server/_libs/mdast-util-phrasing.mjs +30 -0
  47. package/dist/server/_libs/mdast-util-to-hast.mjs +710 -0
  48. package/dist/server/_libs/mdast-util-to-markdown.mjs +798 -0
  49. package/dist/server/_libs/mdast-util-to-string.mjs +38 -0
  50. package/dist/server/_libs/micromark-core-commonmark.mjs +2259 -0
  51. package/dist/server/_libs/micromark-extension-gfm-autolink-literal+[...].mjs +344 -0
  52. package/dist/server/_libs/micromark-extension-gfm-footnote+[...].mjs +279 -0
  53. package/dist/server/_libs/micromark-extension-gfm-strikethrough+[...].mjs +98 -0
  54. package/dist/server/_libs/micromark-extension-gfm-table.mjs +491 -0
  55. package/dist/server/_libs/micromark-extension-gfm-tagfilter+[...].mjs +1 -0
  56. package/dist/server/_libs/micromark-extension-gfm-task-list-item+[...].mjs +77 -0
  57. package/dist/server/_libs/micromark-extension-gfm.mjs +18 -0
  58. package/dist/server/_libs/micromark-factory-destination.mjs +94 -0
  59. package/dist/server/_libs/micromark-factory-label.mjs +63 -0
  60. package/dist/server/_libs/micromark-factory-space.mjs +24 -0
  61. package/dist/server/_libs/micromark-factory-title.mjs +65 -0
  62. package/dist/server/_libs/micromark-factory-whitespace.mjs +22 -0
  63. package/dist/server/_libs/micromark-util-character.mjs +44 -0
  64. package/dist/server/_libs/micromark-util-chunked.mjs +36 -0
  65. package/dist/server/_libs/micromark-util-classify-character+[...].mjs +12 -0
  66. package/dist/server/_libs/micromark-util-combine-extensions+[...].mjs +41 -0
  67. package/dist/server/_libs/micromark-util-decode-numeric-character-reference+[...].mjs +19 -0
  68. package/dist/server/_libs/micromark-util-decode-string.mjs +21 -0
  69. package/dist/server/_libs/micromark-util-encode.mjs +1 -0
  70. package/dist/server/_libs/micromark-util-html-tag-name.mjs +69 -0
  71. package/dist/server/_libs/micromark-util-normalize-identifier+[...].mjs +6 -0
  72. package/dist/server/_libs/micromark-util-resolve-all.mjs +15 -0
  73. package/dist/server/_libs/micromark-util-sanitize-uri.mjs +41 -0
  74. package/dist/server/_libs/micromark-util-subtokenize.mjs +346 -0
  75. package/dist/server/_libs/micromark.mjs +906 -0
  76. package/dist/server/_libs/ocache.mjs +1 -0
  77. package/dist/server/_libs/ohash.mjs +1 -0
  78. package/dist/server/_libs/property-information.mjs +1209 -0
  79. package/dist/server/_libs/react-dom.mjs +10779 -0
  80. package/dist/server/_libs/react-markdown.mjs +147 -0
  81. package/dist/server/_libs/react.mjs +513 -0
  82. package/dist/server/_libs/rehype-highlight.mjs +94 -0
  83. package/dist/server/_libs/remark-gfm.mjs +20 -0
  84. package/dist/server/_libs/remark-parse.mjs +19 -0
  85. package/dist/server/_libs/remark-rehype.mjs +21 -0
  86. package/dist/server/_libs/reselect.mjs +1 -0
  87. package/dist/server/_libs/rou3.mjs +8 -0
  88. package/dist/server/_libs/seroval-plugins.mjs +1 -0
  89. package/dist/server/_libs/seroval.mjs +1 -0
  90. package/dist/server/_libs/space-separated-tokens.mjs +6 -0
  91. package/dist/server/_libs/srvx.mjs +781 -0
  92. package/dist/server/_libs/style-to-js.mjs +72 -0
  93. package/dist/server/_libs/style-to-object.mjs +38 -0
  94. package/dist/server/_libs/tabler__icons-react.mjs +140 -0
  95. package/dist/server/_libs/tailwind-merge.mjs +3255 -0
  96. package/dist/server/_libs/tanstack__history.mjs +29 -0
  97. package/dist/server/_libs/tanstack__react-router.mjs +1120 -0
  98. package/dist/server/_libs/tanstack__react-store.mjs +2 -0
  99. package/dist/server/_libs/tanstack__router-core.mjs +3594 -0
  100. package/dist/server/_libs/tanstack__store.mjs +1 -0
  101. package/dist/server/_libs/trim-lines.mjs +41 -0
  102. package/dist/server/_libs/trough.mjs +85 -0
  103. package/dist/server/_libs/ufo.mjs +54 -0
  104. package/dist/server/_libs/unctx.mjs +1 -0
  105. package/dist/server/_libs/ungap__structured-clone.mjs +224 -0
  106. package/dist/server/_libs/unified.mjs +661 -0
  107. package/dist/server/_libs/unist-util-find-after.mjs +41 -0
  108. package/dist/server/_libs/unist-util-is.mjs +100 -0
  109. package/dist/server/_libs/unist-util-position.mjs +27 -0
  110. package/dist/server/_libs/unist-util-stringify-position.mjs +27 -0
  111. package/dist/server/_libs/unist-util-visit-parents.mjs +83 -0
  112. package/dist/server/_libs/unist-util-visit.mjs +24 -0
  113. package/dist/server/_libs/unstorage.mjs +1 -0
  114. package/dist/server/_libs/use-sync-external-store.mjs +139 -0
  115. package/dist/server/_libs/vfile-message.mjs +138 -0
  116. package/dist/server/_libs/vfile.mjs +467 -0
  117. package/dist/server/_libs/zustand.mjs +43 -0
  118. package/dist/server/_libs/zwitch.mjs +1 -0
  119. package/dist/server/_ssr/ChatInputBlock-Bu2-iop_.mjs +220 -0
  120. package/dist/server/_ssr/MarkdownMessage-CNS7OSKN.mjs +68 -0
  121. package/dist/server/_ssr/chat._sessionId-P02iSfut.mjs +477 -0
  122. package/dist/server/_ssr/chat.index-BYB_48NC.mjs +64 -0
  123. package/dist/server/_ssr/index-C1mT_2d8.mjs +4890 -0
  124. package/dist/server/_ssr/index-DFV9_oCk.mjs +43 -0
  125. package/dist/server/_ssr/memory-CW_fSOG9.mjs +257 -0
  126. package/dist/server/_ssr/router-CUAfx91O.mjs +2035 -0
  127. package/dist/server/_ssr/settings-DoXurzvn.mjs +10 -0
  128. package/dist/server/_ssr/skills-Cs7A5ZwO.mjs +422 -0
  129. package/dist/server/_ssr/theme-BK4-7E2h.mjs +42 -0
  130. package/dist/server/_ssr/usage-Bs2-LXGz.mjs +298 -0
  131. package/dist/server/_tanstack-start-manifest_v-C7Upe2TI.mjs +4 -0
  132. package/dist/server/index.mjs +506 -0
  133. package/package.json +4 -3
  134. package/dist/public/assets/css/index-Dfs9RUU9.css +0 -1
  135. package/dist/public/assets/css/styles-B8p6jk5Z.css +0 -1
  136. package/dist/public/assets/js/ChatInputBlock-Bw7AL70H.js +0 -1
  137. package/dist/public/assets/js/MarkdownMessage-8d7Y6VL-.js +0 -1
  138. package/dist/public/assets/js/base-ui-BvQbAt_1.js +0 -1
  139. package/dist/public/assets/js/chat._sessionId-BG6lVraH.js +0 -1
  140. package/dist/public/assets/js/chat.index-D2zdMPTT.js +0 -1
  141. package/dist/public/assets/js/index-C0AK45FU.js +0 -60
  142. package/dist/public/assets/js/index-Cx5En4FK.js +0 -1
  143. package/dist/public/assets/js/memory-CeSRdTkW.js +0 -3
  144. package/dist/public/assets/js/router-8uDKazL-.js +0 -1
  145. package/dist/public/assets/js/settings-Bc3Y5zXO.js +0 -1
  146. package/dist/public/assets/js/skills-DZv7sA_5.js +0 -1
  147. package/dist/public/assets/js/theme-CPkdkpaj.js +0 -1
  148. package/dist/public/assets/js/usage-DXQsT9_b.js +0 -1
  149. package/dist/public/assets/woff2/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  150. package/dist/public/assets/woff2/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  151. package/dist/public/assets/woff2/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  152. package/dist/public/assets/woff2/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  153. package/dist/public/assets/woff2/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  154. package/dist/public/favicon.ico +0 -0
  155. package/dist/public/logo.png +0 -0
  156. package/dist/public/manifest.json +0 -25
  157. 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 DEFAULT_PORT = 47474
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 pid = parseInt(readFileSync(PID_FILE, 'utf-8').trim())
73
- return Number.isFinite(pid) ? pid : null
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 getPid() {
89
- const pid = readPid()
90
- if (pid && isRunning(pid)) return pid
91
- removePid()
92
- return null
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(pid) {
102
+ function writePid(apiPid, webPid) {
96
103
  mkdirSync(HERMIUM_HOME, { recursive: true })
97
- writeFileSync(PID_FILE, String(pid))
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 getPort() {
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 DEFAULT_PORT
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, pidFile, port, env, runtime }) {
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 findWebDist() {
183
- // Production: bundled in cli/dist/public/
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
- // Dev: from monorepo packages/web/dist
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 pid = getPid()
198
- if (pid) {
199
- console.log(pc.green(` ✓ Hermium is running (PID: ${pid})`))
200
- console.log(` URL : http://localhost:${getPort()}`)
201
- console.log(` Log : ${LOG_FILE.replace(homedir(), '~')}`)
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 existing = getPid()
209
- if (existing) {
210
- console.log(pc.yellow(` ✗ Hermium is already running (PID: ${existing})`))
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 port = getPort()
229
+ const apiPort = getApiPort()
230
+ const webPort = getWebPort()
216
231
  const runtime = getRuntimeCmd()
217
232
  const apiEntry = findApiEntry()
218
- const webDist = findWebDist()
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 on port ${port}...`))
247
+ console.log(pc.cyan(` ⏳ Starting Hermium...`))
228
248
 
229
- const pid = spawnServer({
230
- name: 'Hermium server',
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(port),
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
- console.log(` PID: ${pid}`)
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 url = `http://localhost:${port}`
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(pid)) {
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(`${url}/api/health`).catch(() => null).then((res) => {
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(` ${url}`)
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(` ${url}`)
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 ${url}` :
280
- process.platform === 'darwin' ? `open ${url}` :
281
- `xdg-open ${url}`
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 pid = getPid()
292
- if (!pid) {
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
- stopPid(pid)
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 server (daemon)
363
- stop Stop Hermium server
364
- restart Restart Hermium server
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> Server port (default: 47474)
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,6 @@
1
+ const pluginSerializationAdapters = [];
2
+ const hasPluginAdapters = false;
3
+ export {
4
+ hasPluginAdapters,
5
+ pluginSerializationAdapters
6
+ };
@@ -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
+ };
@@ -0,0 +1,8 @@
1
+ function bail(error) {
2
+ if (error) {
3
+ throw error;
4
+ }
5
+ }
6
+ export {
7
+ bail as b
8
+ };