hoolix 0.0.1-beta.19

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 (263) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +337 -0
  3. package/STABILITY.md +109 -0
  4. package/bin/hoolix.js +50 -0
  5. package/bin/mcp-portal.js +12 -0
  6. package/bin/postinstall.js +61 -0
  7. package/dist/app/contracts.d.ts +105 -0
  8. package/dist/app/contracts.d.ts.map +1 -0
  9. package/dist/app/contracts.js +2 -0
  10. package/dist/app/contracts.js.map +1 -0
  11. package/dist/app/events.d.ts +13 -0
  12. package/dist/app/events.d.ts.map +1 -0
  13. package/dist/app/events.js +13 -0
  14. package/dist/app/events.js.map +1 -0
  15. package/dist/app/services/analytics.d.ts +42 -0
  16. package/dist/app/services/analytics.d.ts.map +1 -0
  17. package/dist/app/services/analytics.js +106 -0
  18. package/dist/app/services/analytics.js.map +1 -0
  19. package/dist/app/services/catalog.d.ts +14 -0
  20. package/dist/app/services/catalog.d.ts.map +1 -0
  21. package/dist/app/services/catalog.js +26 -0
  22. package/dist/app/services/catalog.js.map +1 -0
  23. package/dist/app/services/credentials.d.ts +42 -0
  24. package/dist/app/services/credentials.d.ts.map +1 -0
  25. package/dist/app/services/credentials.js +143 -0
  26. package/dist/app/services/credentials.js.map +1 -0
  27. package/dist/app/services/servers.d.ts +15 -0
  28. package/dist/app/services/servers.d.ts.map +1 -0
  29. package/dist/app/services/servers.js +445 -0
  30. package/dist/app/services/servers.js.map +1 -0
  31. package/dist/catalog/community.d.ts +19 -0
  32. package/dist/catalog/community.d.ts.map +1 -0
  33. package/dist/catalog/community.js +53 -0
  34. package/dist/catalog/community.js.map +1 -0
  35. package/dist/catalog/templates.d.ts +436 -0
  36. package/dist/catalog/templates.d.ts.map +1 -0
  37. package/dist/catalog/templates.js +489 -0
  38. package/dist/catalog/templates.js.map +1 -0
  39. package/dist/commands/audit.d.ts +2 -0
  40. package/dist/commands/audit.d.ts.map +1 -0
  41. package/dist/commands/audit.js +122 -0
  42. package/dist/commands/audit.js.map +1 -0
  43. package/dist/commands/bundle.d.ts +11 -0
  44. package/dist/commands/bundle.d.ts.map +1 -0
  45. package/dist/commands/bundle.js +299 -0
  46. package/dist/commands/bundle.js.map +1 -0
  47. package/dist/commands/clients.d.ts +6 -0
  48. package/dist/commands/clients.d.ts.map +1 -0
  49. package/dist/commands/clients.js +242 -0
  50. package/dist/commands/clients.js.map +1 -0
  51. package/dist/commands/completion.d.ts +18 -0
  52. package/dist/commands/completion.d.ts.map +1 -0
  53. package/dist/commands/completion.js +495 -0
  54. package/dist/commands/completion.js.map +1 -0
  55. package/dist/commands/connect.d.ts +10 -0
  56. package/dist/commands/connect.d.ts.map +1 -0
  57. package/dist/commands/connect.js +463 -0
  58. package/dist/commands/connect.js.map +1 -0
  59. package/dist/commands/create.d.ts +2 -0
  60. package/dist/commands/create.d.ts.map +1 -0
  61. package/dist/commands/create.js +607 -0
  62. package/dist/commands/create.js.map +1 -0
  63. package/dist/commands/delete.d.ts +2 -0
  64. package/dist/commands/delete.d.ts.map +1 -0
  65. package/dist/commands/delete.js +44 -0
  66. package/dist/commands/delete.js.map +1 -0
  67. package/dist/commands/doctor.d.ts +2 -0
  68. package/dist/commands/doctor.d.ts.map +1 -0
  69. package/dist/commands/doctor.js +259 -0
  70. package/dist/commands/doctor.js.map +1 -0
  71. package/dist/commands/export.d.ts +2 -0
  72. package/dist/commands/export.d.ts.map +1 -0
  73. package/dist/commands/export.js +93 -0
  74. package/dist/commands/export.js.map +1 -0
  75. package/dist/commands/gui.d.ts +2 -0
  76. package/dist/commands/gui.d.ts.map +1 -0
  77. package/dist/commands/gui.js +19 -0
  78. package/dist/commands/gui.js.map +1 -0
  79. package/dist/commands/import.d.ts +2 -0
  80. package/dist/commands/import.d.ts.map +1 -0
  81. package/dist/commands/import.js +102 -0
  82. package/dist/commands/import.js.map +1 -0
  83. package/dist/commands/info.d.ts +2 -0
  84. package/dist/commands/info.d.ts.map +1 -0
  85. package/dist/commands/info.js +151 -0
  86. package/dist/commands/info.js.map +1 -0
  87. package/dist/commands/list.d.ts +2 -0
  88. package/dist/commands/list.d.ts.map +1 -0
  89. package/dist/commands/list.js +90 -0
  90. package/dist/commands/list.js.map +1 -0
  91. package/dist/commands/reindex.d.ts +2 -0
  92. package/dist/commands/reindex.d.ts.map +1 -0
  93. package/dist/commands/reindex.js +186 -0
  94. package/dist/commands/reindex.js.map +1 -0
  95. package/dist/commands/rotate.d.ts +2 -0
  96. package/dist/commands/rotate.d.ts.map +1 -0
  97. package/dist/commands/rotate.js +67 -0
  98. package/dist/commands/rotate.js.map +1 -0
  99. package/dist/commands/secrets.d.ts +10 -0
  100. package/dist/commands/secrets.d.ts.map +1 -0
  101. package/dist/commands/secrets.js +293 -0
  102. package/dist/commands/secrets.js.map +1 -0
  103. package/dist/commands/start.d.ts +2 -0
  104. package/dist/commands/start.d.ts.map +1 -0
  105. package/dist/commands/start.js +234 -0
  106. package/dist/commands/start.js.map +1 -0
  107. package/dist/commands/stats.d.ts +2 -0
  108. package/dist/commands/stats.d.ts.map +1 -0
  109. package/dist/commands/stats.js +220 -0
  110. package/dist/commands/stats.js.map +1 -0
  111. package/dist/commands/stop.d.ts +2 -0
  112. package/dist/commands/stop.d.ts.map +1 -0
  113. package/dist/commands/stop.js +24 -0
  114. package/dist/commands/stop.js.map +1 -0
  115. package/dist/commands/templates.d.ts +2 -0
  116. package/dist/commands/templates.d.ts.map +1 -0
  117. package/dist/commands/templates.js +168 -0
  118. package/dist/commands/templates.js.map +1 -0
  119. package/dist/commands/trial.d.ts +2 -0
  120. package/dist/commands/trial.d.ts.map +1 -0
  121. package/dist/commands/trial.js +61 -0
  122. package/dist/commands/trial.js.map +1 -0
  123. package/dist/commands/uninstall.d.ts +2 -0
  124. package/dist/commands/uninstall.d.ts.map +1 -0
  125. package/dist/commands/uninstall.js +114 -0
  126. package/dist/commands/uninstall.js.map +1 -0
  127. package/dist/commands/update.d.ts +2 -0
  128. package/dist/commands/update.d.ts.map +1 -0
  129. package/dist/commands/update.js +104 -0
  130. package/dist/commands/update.js.map +1 -0
  131. package/dist/commands/verify.d.ts +2 -0
  132. package/dist/commands/verify.d.ts.map +1 -0
  133. package/dist/commands/verify.js +301 -0
  134. package/dist/commands/verify.js.map +1 -0
  135. package/dist/core/config.d.ts +25 -0
  136. package/dist/core/config.d.ts.map +1 -0
  137. package/dist/core/config.js +54 -0
  138. package/dist/core/config.js.map +1 -0
  139. package/dist/core/errors.d.ts +25 -0
  140. package/dist/core/errors.d.ts.map +1 -0
  141. package/dist/core/errors.js +53 -0
  142. package/dist/core/errors.js.map +1 -0
  143. package/dist/core/logger.d.ts +3 -0
  144. package/dist/core/logger.d.ts.map +1 -0
  145. package/dist/core/logger.js +12 -0
  146. package/dist/core/logger.js.map +1 -0
  147. package/dist/core/paths.d.ts +15 -0
  148. package/dist/core/paths.d.ts.map +1 -0
  149. package/dist/core/paths.js +51 -0
  150. package/dist/core/paths.js.map +1 -0
  151. package/dist/core/registry.d.ts +474 -0
  152. package/dist/core/registry.d.ts.map +1 -0
  153. package/dist/core/registry.js +186 -0
  154. package/dist/core/registry.js.map +1 -0
  155. package/dist/core/updater.d.ts +16 -0
  156. package/dist/core/updater.d.ts.map +1 -0
  157. package/dist/core/updater.js +317 -0
  158. package/dist/core/updater.js.map +1 -0
  159. package/dist/core/version.d.ts +2 -0
  160. package/dist/core/version.d.ts.map +1 -0
  161. package/dist/core/version.js +3 -0
  162. package/dist/core/version.js.map +1 -0
  163. package/dist/index.d.ts +13 -0
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +270 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/ingestion/chunker.d.ts +13 -0
  168. package/dist/ingestion/chunker.d.ts.map +1 -0
  169. package/dist/ingestion/chunker.js +107 -0
  170. package/dist/ingestion/chunker.js.map +1 -0
  171. package/dist/ingestion/cleaners.d.ts +10 -0
  172. package/dist/ingestion/cleaners.d.ts.map +1 -0
  173. package/dist/ingestion/cleaners.js +61 -0
  174. package/dist/ingestion/cleaners.js.map +1 -0
  175. package/dist/ingestion/detectors.d.ts +5 -0
  176. package/dist/ingestion/detectors.d.ts.map +1 -0
  177. package/dist/ingestion/detectors.js +25 -0
  178. package/dist/ingestion/detectors.js.map +1 -0
  179. package/dist/ingestion/fetchers.d.ts +38 -0
  180. package/dist/ingestion/fetchers.d.ts.map +1 -0
  181. package/dist/ingestion/fetchers.js +296 -0
  182. package/dist/ingestion/fetchers.js.map +1 -0
  183. package/dist/ingestion/github.d.ts +60 -0
  184. package/dist/ingestion/github.d.ts.map +1 -0
  185. package/dist/ingestion/github.js +314 -0
  186. package/dist/ingestion/github.js.map +1 -0
  187. package/dist/ingestion/pipeline.d.ts +3 -0
  188. package/dist/ingestion/pipeline.d.ts.map +1 -0
  189. package/dist/ingestion/pipeline.js +160 -0
  190. package/dist/ingestion/pipeline.js.map +1 -0
  191. package/dist/ingestion/types.d.ts +51 -0
  192. package/dist/ingestion/types.d.ts.map +1 -0
  193. package/dist/ingestion/types.js +2 -0
  194. package/dist/ingestion/types.js.map +1 -0
  195. package/dist/lib/auth.d.ts +2 -0
  196. package/dist/lib/auth.d.ts.map +1 -0
  197. package/dist/lib/auth.js +6 -0
  198. package/dist/lib/auth.js.map +1 -0
  199. package/dist/lib/embedding.d.ts +10 -0
  200. package/dist/lib/embedding.d.ts.map +1 -0
  201. package/dist/lib/embedding.js +21 -0
  202. package/dist/lib/embedding.js.map +1 -0
  203. package/dist/mcp/host.d.ts +16 -0
  204. package/dist/mcp/host.d.ts.map +1 -0
  205. package/dist/mcp/host.js +307 -0
  206. package/dist/mcp/host.js.map +1 -0
  207. package/dist/mcp/proxy-host.d.ts +25 -0
  208. package/dist/mcp/proxy-host.d.ts.map +1 -0
  209. package/dist/mcp/proxy-host.js +393 -0
  210. package/dist/mcp/proxy-host.js.map +1 -0
  211. package/dist/mcp/stdio-host.d.ts +19 -0
  212. package/dist/mcp/stdio-host.d.ts.map +1 -0
  213. package/dist/mcp/stdio-host.js +175 -0
  214. package/dist/mcp/stdio-host.js.map +1 -0
  215. package/dist/process/manager.d.ts +74 -0
  216. package/dist/process/manager.d.ts.map +1 -0
  217. package/dist/process/manager.js +322 -0
  218. package/dist/process/manager.js.map +1 -0
  219. package/dist/rag/models.d.ts +30 -0
  220. package/dist/rag/models.d.ts.map +1 -0
  221. package/dist/rag/models.js +30 -0
  222. package/dist/rag/models.js.map +1 -0
  223. package/dist/rag/store.d.ts +63 -0
  224. package/dist/rag/store.d.ts.map +1 -0
  225. package/dist/rag/store.js +505 -0
  226. package/dist/rag/store.js.map +1 -0
  227. package/dist/rag/types.d.ts +56 -0
  228. package/dist/rag/types.d.ts.map +1 -0
  229. package/dist/rag/types.js +2 -0
  230. package/dist/rag/types.js.map +1 -0
  231. package/dist/sources/plugins.d.ts +25 -0
  232. package/dist/sources/plugins.d.ts.map +1 -0
  233. package/dist/sources/plugins.js +55 -0
  234. package/dist/sources/plugins.js.map +1 -0
  235. package/dist/sources/registry.d.ts +19 -0
  236. package/dist/sources/registry.d.ts.map +1 -0
  237. package/dist/sources/registry.js +183 -0
  238. package/dist/sources/registry.js.map +1 -0
  239. package/dist/sources/types.d.ts +361 -0
  240. package/dist/sources/types.d.ts.map +1 -0
  241. package/dist/sources/types.js +59 -0
  242. package/dist/sources/types.js.map +1 -0
  243. package/dist/tui/index.d.ts +22 -0
  244. package/dist/tui/index.d.ts.map +1 -0
  245. package/dist/tui/index.js +711 -0
  246. package/dist/tui/index.js.map +1 -0
  247. package/dist/ui/format.d.ts +27 -0
  248. package/dist/ui/format.d.ts.map +1 -0
  249. package/dist/ui/format.js +80 -0
  250. package/dist/ui/format.js.map +1 -0
  251. package/dist/ui/help.d.ts +2 -0
  252. package/dist/ui/help.d.ts.map +1 -0
  253. package/dist/ui/help.js +106 -0
  254. package/dist/ui/help.js.map +1 -0
  255. package/dist/web/assets.d.ts +2 -0
  256. package/dist/web/assets.d.ts.map +1 -0
  257. package/dist/web/assets.js +659 -0
  258. package/dist/web/assets.js.map +1 -0
  259. package/dist/web/server.d.ts +9 -0
  260. package/dist/web/server.d.ts.map +1 -0
  261. package/dist/web/server.js +349 -0
  262. package/dist/web/server.js.map +1 -0
  263. package/package.json +105 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/web/assets.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,kFAAkF;IAClF,2HAA2H;IAC3H,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6oBD,CAAC;AACT,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function resolveGuiPort(host: string, requestedPort: number, strict: boolean): Promise<number>;
2
+ export declare function launchWebGui(opts?: {
3
+ port?: number;
4
+ host?: string;
5
+ open?: boolean;
6
+ token?: string;
7
+ strictPort?: boolean;
8
+ }): Promise<void>;
9
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AA8FA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB1G;AA4OD,wBAAsB,YAAY,CAAC,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,iBA6CnI"}
@@ -0,0 +1,349 @@
1
+ import { Hono } from 'hono';
2
+ import { serve } from '@hono/node-server';
3
+ import { logger } from '../core/logger.js';
4
+ import { getServerMetadata, updateServerMetadata, slugify, } from '../core/registry.js';
5
+ import { serverManager } from '../process/manager.js';
6
+ import { createRAGForServer } from '../rag/store.js';
7
+ import { SUPPORTED_EMBEDDING_MODELS } from '../rag/models.js';
8
+ import { getPaths, ensureDirectories } from '../core/paths.js';
9
+ import fs from 'fs-extra';
10
+ import path from 'node:path';
11
+ import net from 'node:net';
12
+ import { randomBytes } from 'node:crypto';
13
+ import { execSync } from 'node:child_process';
14
+ import { buildDashboardHtml } from './assets.js';
15
+ import { generateAuthKey } from '../lib/auth.js';
16
+ import { getTemplate, listTemplates } from '../app/services/catalog.js';
17
+ import { createServer, deleteRegisteredServer, getServerInfo, getServerLogTail, getServerSourceLabel, listRegisteredServers, reindexServer, verifyServer, } from '../app/services/servers.js';
18
+ import { SourceDefinitionSchema } from '../sources/types.js';
19
+ import { instantiateTemplate } from '../app/services/catalog.js';
20
+ import { getStatsReport } from '../app/services/analytics.js';
21
+ const GUI_TOKEN_FILE = '.gui-token';
22
+ function generateGuiToken() {
23
+ return 'gui_' + randomBytes(24).toString('hex');
24
+ }
25
+ async function getOrCreateGuiToken() {
26
+ await ensureDirectories();
27
+ const p = path.join(getPaths().data, GUI_TOKEN_FILE);
28
+ if (await fs.pathExists(p)) {
29
+ const t = (await fs.readFile(p, 'utf8')).trim();
30
+ if (t)
31
+ return t;
32
+ }
33
+ const token = generateGuiToken();
34
+ await fs.writeFile(p, token, { mode: 0o600 });
35
+ return token;
36
+ }
37
+ function maskSecret(value, visible = 6) {
38
+ if (!value)
39
+ return '';
40
+ if (value.length <= visible * 2)
41
+ return `${value.slice(0, 2)}...`;
42
+ return `${value.slice(0, visible)}...${value.slice(-visible)}`;
43
+ }
44
+ function maskServerMetadata(meta) {
45
+ return {
46
+ ...meta,
47
+ authKey: meta.authKey ? maskSecret(meta.authKey) : meta.authKey,
48
+ };
49
+ }
50
+ function openBrowser(url) {
51
+ const platform = process.platform;
52
+ let cmd;
53
+ if (platform === 'win32') {
54
+ cmd = `start "" "${url.replace(/"/g, '\\"')}"`;
55
+ }
56
+ else if (platform === 'darwin') {
57
+ cmd = `open "${url.replace(/"/g, '\\"')}"`;
58
+ }
59
+ else {
60
+ cmd = `xdg-open "${url.replace(/"/g, '\\"')}"`;
61
+ }
62
+ try {
63
+ execSync(cmd, { stdio: 'ignore' });
64
+ }
65
+ catch {
66
+ // ignore
67
+ }
68
+ }
69
+ async function canBind(host, port) {
70
+ return new Promise((resolve) => {
71
+ const server = net.createServer();
72
+ server.once('error', () => resolve(false));
73
+ server.once('listening', () => {
74
+ server.close(() => resolve(true));
75
+ });
76
+ server.listen(port, host);
77
+ });
78
+ }
79
+ export async function resolveGuiPort(host, requestedPort, strict) {
80
+ if (await canBind(host, requestedPort))
81
+ return requestedPort;
82
+ if (strict) {
83
+ throw new Error(`Port ${requestedPort} is already in use on ${host}. Next: stop the other process or run hoolix gui --port ${requestedPort + 1}.`);
84
+ }
85
+ for (let port = requestedPort + 1; port < requestedPort + 50; port++) {
86
+ if (await canBind(host, port))
87
+ return port;
88
+ }
89
+ throw new Error(`Could not find a free Web GUI port near ${requestedPort}. Next: pass hoolix gui --port <free-port>.`);
90
+ }
91
+ function createApp(token) {
92
+ const app = new Hono();
93
+ // Auth middleware for protected API
94
+ app.use('/api/*', async (c, next) => {
95
+ const provided = c.req.query('token') ||
96
+ c.req.header('authorization')?.replace(/^Bearer\s+/i, '') ||
97
+ '';
98
+ if (provided !== token) {
99
+ return c.json({ error: 'Unauthorized. Provide ?token= or Authorization: Bearer <gui-token>' }, 401);
100
+ }
101
+ return await next();
102
+ });
103
+ app.get('/health', (c) => c.json({ status: 'ok', service: 'hoolix-gui' }));
104
+ app.get('/api/templates', async (c) => {
105
+ return c.json(await listTemplates());
106
+ });
107
+ app.get('/api/templates/:id', async (c) => {
108
+ try {
109
+ return c.json(await getTemplate(c.req.param('id')));
110
+ }
111
+ catch (e) {
112
+ return c.json({ error: e.message || String(e) }, 404);
113
+ }
114
+ });
115
+ // List servers + live status
116
+ app.get('/api/servers', async (c) => {
117
+ const servers = await listRegisteredServers({ includeStatus: true });
118
+ const enriched = [];
119
+ for (const s of servers) {
120
+ const st = s.status || { running: false };
121
+ enriched.push({
122
+ ...maskServerMetadata(s),
123
+ sourceCount: s.definition?.sources.length ?? 1,
124
+ sourceLabel: (s.definition?.sources.length ?? 1) > 1 ? getServerSourceLabel(s) : s.sourceUrl,
125
+ templateLabel: s.definition?.template?.name,
126
+ running: st.running,
127
+ port: st.port,
128
+ pid: st.pid,
129
+ });
130
+ }
131
+ return c.json(enriched);
132
+ });
133
+ // Create server (non-interactive)
134
+ app.post('/api/servers', async (c) => {
135
+ const body = await c.req.json().catch(() => ({}));
136
+ const name = (body.name || '').trim();
137
+ const url = (body.url || '').trim();
138
+ let parsedSources = [];
139
+ let templateDefinition;
140
+ try {
141
+ parsedSources = Array.isArray(body.sources)
142
+ ? body.sources.map((source) => SourceDefinitionSchema.parse(source))
143
+ : [];
144
+ if (body.templateId) {
145
+ const inputs = {};
146
+ if (url)
147
+ inputs.url = url;
148
+ if (typeof body.repo === 'string' && body.repo.trim())
149
+ inputs.repo = body.repo.trim();
150
+ if (body.templateInputs && typeof body.templateInputs === 'object') {
151
+ for (const [key, value] of Object.entries(body.templateInputs)) {
152
+ if (typeof value === 'string')
153
+ inputs[key] = value;
154
+ }
155
+ }
156
+ templateDefinition = (await instantiateTemplate(String(body.templateId), inputs)).definition;
157
+ }
158
+ }
159
+ catch (e) {
160
+ return c.json({ error: 'invalid sources: ' + (e.message || e) }, 400);
161
+ }
162
+ if (!name || (!url && parsedSources.length === 0 && !templateDefinition)) {
163
+ return c.json({ error: 'name and url are required' }, 400);
164
+ }
165
+ const slug = slugify(name);
166
+ try {
167
+ await getServerMetadata(slug);
168
+ return c.json({ error: 'server already exists' }, 409);
169
+ }
170
+ catch { }
171
+ let embeddingModel = 'fuse';
172
+ if (body.hybrid || body.embeddingModel) {
173
+ const cand = body.embeddingModel || 'hybrid-bge-small';
174
+ embeddingModel = SUPPORTED_EMBEDDING_MODELS.includes(cand) ? cand : 'hybrid-bge-small';
175
+ }
176
+ try {
177
+ const created = await createServer({
178
+ name,
179
+ url: parsedSources.length > 0 || templateDefinition ? undefined : url,
180
+ sources: parsedSources.length > 0 ? parsedSources : undefined,
181
+ definition: templateDefinition,
182
+ embeddingModel,
183
+ maxChunks: 6000,
184
+ maxPages: 80,
185
+ });
186
+ if (created.indexWarning) {
187
+ logger.warn(`GUI create: RAG indexing warning for ${slug}: ${created.indexWarning}`);
188
+ }
189
+ return c.json({ ok: true, slug, meta: maskServerMetadata(created.meta) });
190
+ }
191
+ catch (e) {
192
+ return c.json({ error: 'ingestion failed: ' + (e.message || e) }, 400);
193
+ }
194
+ });
195
+ app.post('/api/trial', async (c) => {
196
+ const existing = await getServerMetadata('hoolix-trial').catch(() => null);
197
+ if (existing)
198
+ return c.json({ ok: true, slug: existing.slug, existed: true });
199
+ const instantiated = await instantiateTemplate('docs-rag', {
200
+ url: 'https://raw.githubusercontent.com/modelcontextprotocol/servers/main/README.md',
201
+ });
202
+ const created = await createServer({
203
+ name: 'Hoolix Trial',
204
+ definition: instantiated.definition,
205
+ embeddingModel: 'fuse',
206
+ maxChunks: 1200,
207
+ maxPages: 10,
208
+ });
209
+ return c.json({ ok: true, slug: created.meta.slug, existed: false });
210
+ });
211
+ // Start
212
+ app.post('/api/servers/:slug/start', async (c) => {
213
+ const slug = c.req.param('slug');
214
+ try {
215
+ const res = await serverManager.start(slug);
216
+ return c.json({ ok: true, ...res, authKey: maskSecret(res.authKey) });
217
+ }
218
+ catch (e) {
219
+ return c.json({ error: e.message || String(e) }, 400);
220
+ }
221
+ });
222
+ // Stop
223
+ app.post('/api/servers/:slug/stop', async (c) => {
224
+ const slug = c.req.param('slug');
225
+ const ok = await serverManager.stop(slug);
226
+ return c.json({ ok });
227
+ });
228
+ // Reindex
229
+ app.post('/api/servers/:slug/reindex', async (c) => {
230
+ const slug = c.req.param('slug');
231
+ const body = await c.req.json().catch(() => ({}));
232
+ const info = await getServerInfo(slug);
233
+ let em = info.meta.embeddingModel;
234
+ if (body.hybrid)
235
+ em = 'hybrid-bge-small';
236
+ if (body.embeddingModel && SUPPORTED_EMBEDDING_MODELS.includes(body.embeddingModel)) {
237
+ em = body.embeddingModel;
238
+ }
239
+ const result = await reindexServer({ slug, embeddingModel: em, maxChunks: 6000, maxPages: 80 });
240
+ return c.json({ ok: true, chunks: result.ingestion.stats.totalChunks });
241
+ });
242
+ // Verify (basic)
243
+ app.get('/api/servers/:slug/verify', async (c) => {
244
+ const slug = c.req.param('slug');
245
+ const report = await verifyServer(slug, ['overview', 'install', 'api']);
246
+ return c.json({
247
+ ok: true,
248
+ samples: report.samples.map((sample) => ({ query: sample.query, hits: sample.results })),
249
+ embeddingModel: report.embeddingModel,
250
+ });
251
+ });
252
+ app.get('/api/servers/:slug/stats', async (c) => {
253
+ const slug = c.req.param('slug');
254
+ const days = parseInt(c.req.query('days') || '30', 10) || 30;
255
+ const report = await getStatsReport(slug, days);
256
+ return c.json(report || { slug, days, total: 0, message: 'No audit log yet.' });
257
+ });
258
+ // Playground search (uses RAG directly for demo)
259
+ app.post('/api/servers/:slug/search', async (c) => {
260
+ const slug = c.req.param('slug');
261
+ const body = await c.req.json().catch(() => ({}));
262
+ const meta = await getServerMetadata(slug).catch(() => null);
263
+ const em = (meta?.embeddingModel || 'fuse');
264
+ const rag = await createRAGForServer(slug, em);
265
+ const results = await rag.search(body.query || 'test', {
266
+ limit: Math.min(body.limit || 5, 10),
267
+ mode: body.mode || 'hybrid',
268
+ alpha: body.alpha,
269
+ reranker: body.reranker,
270
+ });
271
+ return c.json({ results });
272
+ });
273
+ // Delete
274
+ app.delete('/api/servers/:slug', async (c) => {
275
+ const slug = c.req.param('slug');
276
+ await deleteRegisteredServer(slug);
277
+ return c.json({ ok: true });
278
+ });
279
+ // Rotate
280
+ app.post('/api/servers/:slug/rotate', async (c) => {
281
+ const slug = c.req.param('slug');
282
+ const newKey = generateAuthKey();
283
+ await updateServerMetadata(slug, { authKey: newKey });
284
+ return c.json({ ok: true, newKey, note: 'Stop and restart the server to pick up the new key.' });
285
+ });
286
+ // Single server info + status
287
+ app.get('/api/servers/:slug', async (c) => {
288
+ const slug = c.req.param('slug');
289
+ const { meta, status } = await getServerInfo(slug);
290
+ return c.json({
291
+ ...maskServerMetadata(meta),
292
+ sourceCount: meta.definition?.sources.length ?? 1,
293
+ sourceLabel: (meta.definition?.sources.length ?? 1) > 1 ? getServerSourceLabel(meta) : meta.sourceUrl,
294
+ ...status,
295
+ });
296
+ });
297
+ // Simple logs tail
298
+ app.get('/api/servers/:slug/logs', async (c) => {
299
+ const slug = c.req.param('slug');
300
+ return c.text(await getServerLogTail(slug, 8000));
301
+ });
302
+ // Root UI
303
+ app.get('/', (c) => {
304
+ const t = c.req.query('token') || '';
305
+ return c.html(buildDashboardHtml(t));
306
+ });
307
+ return app;
308
+ }
309
+ export async function launchWebGui(opts = {}) {
310
+ const requestedPort = opts.port || 8080;
311
+ const host = opts.host || '127.0.0.1';
312
+ const shouldOpen = opts.open !== false;
313
+ let token = opts.token;
314
+ if (!token) {
315
+ token = await getOrCreateGuiToken();
316
+ }
317
+ const port = await resolveGuiPort(host, requestedPort, opts.strictPort === true);
318
+ const urlBase = `http://${host}:${port}`;
319
+ const fullUrl = `${urlBase}/?token=${token}`;
320
+ const displayUrl = `${urlBase}/?token=${maskSecret(token)}`;
321
+ logger.info(`Starting Hoolix Web GUI`);
322
+ console.log(`\n◆ Hoolix Web GUI (beta)`);
323
+ if (port !== requestedPort) {
324
+ console.log(` Port ${requestedPort} is in use; using ${port} instead.`);
325
+ }
326
+ console.log(` Open: ${displayUrl}`);
327
+ if (host !== '127.0.0.1') {
328
+ console.log(` WARNING: Listening on ${host}. Protect this port!`);
329
+ }
330
+ console.log(` Token: ${maskSecret(token)} (full token is stored in your local hoolix data directory)`);
331
+ if (shouldOpen) {
332
+ openBrowser(fullUrl);
333
+ }
334
+ const app = createApp(token);
335
+ try {
336
+ serve({
337
+ fetch: app.fetch,
338
+ port,
339
+ hostname: host,
340
+ });
341
+ }
342
+ catch (e) {
343
+ throw new Error(e?.message || `Failed to start Web GUI on ${host}:${port}. Next: try hoolix gui --port ${port + 1}.`);
344
+ }
345
+ console.log(`\nWeb GUI is running. Use Ctrl+C to stop.`);
346
+ // Keep alive
347
+ await new Promise(() => { });
348
+ }
349
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,105 @@
1
+ {
2
+ "name": "hoolix",
3
+ "version": "0.0.1-beta.19",
4
+ "description": "Forge documentation into powerful, secure Hoolix MCP servers. Production-grade CLI for turning docs URLs into hostable MCP servers for Grok, Claude, Cursor, and other agents.",
5
+ "keywords": [
6
+ "mcp",
7
+ "model-context-protocol",
8
+ "cli",
9
+ "tui",
10
+ "documentation",
11
+ "rag",
12
+ "llms.txt",
13
+ "ai-agents",
14
+ "claude",
15
+ "cursor",
16
+ "grok",
17
+ "filesystem",
18
+ "github",
19
+ "postgres"
20
+ ],
21
+ "homepage": "https://github.com/JayLLM/hoolix",
22
+ "bugs": "https://github.com/JayLLM/hoolix/issues",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/JayLLM/hoolix.git"
26
+ },
27
+ "license": "MIT",
28
+ "author": "Hoolix contributors",
29
+ "type": "module",
30
+ "main": "dist/index.js",
31
+ "exports": {
32
+ ".": "./dist/index.js"
33
+ },
34
+ "bin": {
35
+ "hoolix": "./bin/hoolix.js"
36
+ },
37
+ "files": [
38
+ "bin",
39
+ "dist",
40
+ "README.md",
41
+ "LICENSE",
42
+ "STABILITY.md"
43
+ ],
44
+ "scripts": {
45
+ "build": "tsc -p tsconfig.json",
46
+ "typecheck": "tsc --noEmit -p tsconfig.json",
47
+ "build:watch": "tsc -p tsconfig.json --watch",
48
+ "dev": "tsx src/index.ts",
49
+ "dev:bun": "bun run src/index.ts",
50
+ "start": "node dist/index.js",
51
+ "lint": "biome lint . || echo 'biome not configured yet'",
52
+ "test": "vitest run",
53
+ "test:watch": "vitest --watch",
54
+ "clean": "node -e \"const fs=require('fs'); fs.rmSync('dist',{recursive:true,force:true}); fs.rmSync('dist-bin',{recursive:true,force:true}); console.log('Cleaned dist/ dist-bin/')\"",
55
+ "build:binary": "bun build --compile src/index.ts --outfile dist-bin/hoolix --minify",
56
+ "build:binary:win": "bun build --compile src/index.ts --outfile dist-bin/hoolix.exe --minify",
57
+ "build:binary:linux": "bun build --compile src/index.ts --outfile dist-bin/hoolix --minify",
58
+ "build:binary:mac": "bun build --compile src/index.ts --outfile dist-bin/hoolix --minify",
59
+ "postinstall": "node bin/postinstall.js",
60
+ "prepublishOnly": "npm run build",
61
+ "release": "release-it",
62
+ "release:beta": "release-it --preRelease=beta --github.preRelease=true",
63
+ "release:dry": "release-it --dry-run",
64
+ "release:ci": "release-it --ci",
65
+ "test:e2e": "vitest run --config vitest.e2e.config.ts"
66
+ },
67
+ "dependencies": {
68
+ "@cfworker/json-schema": "^4.1.1",
69
+ "@clack/prompts": "^1.5.0",
70
+ "@hono/node-server": "^1.14.0",
71
+ "@modelcontextprotocol/server": "^1.0.0 || ^2.0.0-alpha",
72
+ "@mozilla/readability": "^0.6.0",
73
+ "chalk": "^5.6.2",
74
+ "consola": "^3.4.2",
75
+ "env-paths": "^3.0.0",
76
+ "fs-extra": "^11.3.5",
77
+ "fuse.js": "^7.1.0",
78
+ "hono": "^4.12.23",
79
+ "jsdom": "^29.1.1",
80
+ "ps-list": "^8.1.1",
81
+ "@huggingface/transformers": "^3.0.2",
82
+ "tree-kill": "^1.2.2",
83
+ "turndown": "^7.2.4",
84
+ "turndown-plugin-gfm": "^1.0.2",
85
+ "zod": "^3.25.76"
86
+ },
87
+ "devDependencies": {
88
+ "@biomejs/biome": "^1.9.0",
89
+ "@release-it/keep-a-changelog": "^7.1.0",
90
+ "@types/fs-extra": "^11.0.4",
91
+ "@types/jsdom": "^28.0.3",
92
+ "@types/node": "^22.19.19",
93
+ "@types/react": "^18.3.0",
94
+ "@types/turndown": "^5.0.5",
95
+ "react-devtools-core": "^7.0.1",
96
+ "release-it": "^20.2.0",
97
+ "tsx": "^4.22.4",
98
+ "typescript": "^5.9.3",
99
+ "vitest": "^4.1.8"
100
+ },
101
+ "engines": {
102
+ "node": ">=20.0.0"
103
+ },
104
+ "packageManager": "bun@1.2.0"
105
+ }