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,489 @@
1
+ import { z } from 'zod';
2
+ import { SourceDefinitionSchema } from '../sources/types.js';
3
+ // ── Kind ──────────────────────────────────────────────────────────────────────
4
+ export const TemplateKindSchema = z.enum(['docs-rag', 'mcp-server']);
5
+ // ── Inputs (non-sensitive; stored in definition.template.inputs) ──────────────
6
+ export const TemplateInputSchema = z.object({
7
+ name: z.string().min(1),
8
+ label: z.string().min(1),
9
+ description: z.string().min(1),
10
+ required: z.boolean().default(false),
11
+ placeholder: z.string().optional(),
12
+ });
13
+ // ── Credentials (sensitive; stored in credentials.json, 0600) ─────────────────
14
+ export const CredentialInputSchema = z.object({
15
+ name: z.string().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/, 'Must be a valid identifier'),
16
+ label: z.string().min(1),
17
+ description: z.string().min(1),
18
+ envVar: z.string().optional(), // auto-detect from process.env at create time
19
+ required: z.boolean().default(true),
20
+ sensitive: z.boolean().default(true),
21
+ placeholder: z.string().optional(),
22
+ validationHint: z.string().optional(),
23
+ docsUrl: z.string().url().optional(),
24
+ });
25
+ // ── Server run config (mcp-server kind only; credentials interpolated at connect) ──
26
+ export const ServerRunConfigSchema = z.object({
27
+ transport: z.enum(['stdio', 'http']).default('stdio'),
28
+ command: z.string().min(1),
29
+ args: z.array(z.string()).default([]),
30
+ env: z.record(z.string(), z.string()).default({}),
31
+ npmPackage: z.string().optional(),
32
+ minNodeVersion: z.string().optional(),
33
+ proxyable: z.boolean().default(true),
34
+ });
35
+ // ── Template ──────────────────────────────────────────────────────────────────
36
+ export const CatalogTemplateSchema = z.object({
37
+ id: z.string().regex(/^[a-z0-9-]{1,64}$/),
38
+ name: z.string().min(1),
39
+ version: z.string().min(1),
40
+ kind: TemplateKindSchema.default('docs-rag'),
41
+ category: z.enum([
42
+ 'docs', 'github', 'tools', 'data', 'productivity', 'ai',
43
+ 'official', 'example', 'community',
44
+ ]),
45
+ description: z.string().min(1),
46
+ tags: z.array(z.string().min(1)).default([]),
47
+ homepage: z.string().url().optional(),
48
+ // docs-rag kind: non-sensitive inputs (url, repo, etc.) and pre-baked sources
49
+ inputs: z.array(TemplateInputSchema).default([]),
50
+ sources: z.array(SourceDefinitionSchema).default([]),
51
+ // mcp-server kind: sensitive credentials + run config
52
+ credentials: z.array(CredentialInputSchema).default([]),
53
+ server: ServerRunConfigSchema.optional(),
54
+ });
55
+ // ── Official template definitions (14 total: 4 docs-rag + 10 mcp-server) ────────
56
+ const OFFICIAL_TEMPLATES = [
57
+ // ── docs-rag kind ───────────────────────────────────────────────────────────
58
+ {
59
+ id: 'docs-rag',
60
+ name: 'Documentation RAG MCP',
61
+ version: '1.0.0',
62
+ kind: 'docs-rag',
63
+ category: 'docs',
64
+ description: 'Turn any documentation URL, llms.txt, or docs page into a grounded Hoolix MCP server.',
65
+ tags: ['docs', 'llms.txt', 'rag'],
66
+ inputs: [
67
+ {
68
+ name: 'url',
69
+ label: 'Documentation URL',
70
+ description: 'A docs page, llms.txt, llms-full.txt, or site URL.',
71
+ required: true,
72
+ placeholder: 'https://example.com/llms.txt',
73
+ },
74
+ ],
75
+ credentials: [],
76
+ sources: [],
77
+ },
78
+ {
79
+ id: 'github-docs',
80
+ name: 'GitHub Repository Docs MCP',
81
+ version: '1.0.0',
82
+ kind: 'docs-rag',
83
+ category: 'github',
84
+ description: 'Index README, docs folders, and llms files from a GitHub repository.',
85
+ tags: ['github', 'repository', 'docs'],
86
+ inputs: [
87
+ {
88
+ name: 'repo',
89
+ label: 'GitHub repository',
90
+ description: 'Repository in owner/name form, or a GitHub URL.',
91
+ required: true,
92
+ placeholder: 'modelcontextprotocol/servers',
93
+ },
94
+ ],
95
+ credentials: [],
96
+ sources: [],
97
+ },
98
+ {
99
+ id: 'terraform-aws-docs',
100
+ name: 'Terraform AWS Docs MCP',
101
+ version: '1.0.0',
102
+ kind: 'docs-rag',
103
+ category: 'official',
104
+ description: 'A starter MCP server for Terraform AWS provider documentation.',
105
+ tags: ['terraform', 'aws', 'infrastructure'],
106
+ inputs: [],
107
+ credentials: [],
108
+ sources: [
109
+ {
110
+ type: 'docs',
111
+ url: 'https://registry.terraform.io/providers/hashicorp/aws/latest/docs',
112
+ label: 'Terraform AWS provider docs',
113
+ },
114
+ ],
115
+ },
116
+ {
117
+ id: 'hoolix-docs',
118
+ name: 'Hoolix Docs MCP',
119
+ version: '1.0.0',
120
+ kind: 'docs-rag',
121
+ category: 'example',
122
+ description: 'Example template for indexing the Hoolix README from GitHub.',
123
+ tags: ['hoolix', 'example', 'github'],
124
+ inputs: [],
125
+ credentials: [],
126
+ sources: [
127
+ {
128
+ type: 'github',
129
+ repo: 'JayLLM/hoolix',
130
+ label: 'JayLLM/hoolix',
131
+ },
132
+ ],
133
+ },
134
+ // ── mcp-server kind (tools) ─────────────────────────────────────────────────
135
+ {
136
+ id: 'filesystem',
137
+ name: 'Filesystem MCP',
138
+ version: '1.0.0',
139
+ kind: 'mcp-server',
140
+ category: 'tools',
141
+ description: 'Give AI agents read/write access to local directories via the official MCP filesystem server.',
142
+ tags: ['filesystem', 'files', 'local', 'official'],
143
+ homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem',
144
+ inputs: [
145
+ {
146
+ name: 'allowedPath',
147
+ label: 'Allowed directory path',
148
+ description: 'Absolute path the AI agent can read and write (e.g. /Users/jay/projects)',
149
+ required: true,
150
+ placeholder: '/Users/jay/projects',
151
+ },
152
+ ],
153
+ credentials: [],
154
+ sources: [],
155
+ server: {
156
+ transport: 'stdio',
157
+ command: 'npx',
158
+ args: ['-y', '@modelcontextprotocol/server-filesystem@latest', '{allowedPath}'],
159
+ env: {},
160
+ npmPackage: '@modelcontextprotocol/server-filesystem',
161
+ proxyable: true,
162
+ },
163
+ },
164
+ {
165
+ id: 'github-api',
166
+ name: 'GitHub API MCP',
167
+ version: '1.0.0',
168
+ kind: 'mcp-server',
169
+ category: 'tools',
170
+ description: 'Search issues, pull requests, files, and code across GitHub via the official GitHub MCP server.',
171
+ tags: ['github', 'code', 'issues', 'prs', 'official'],
172
+ homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/github',
173
+ inputs: [],
174
+ credentials: [
175
+ {
176
+ name: 'githubToken',
177
+ label: 'GitHub Personal Access Token',
178
+ description: 'Token with repo and read:org scopes for accessing repositories',
179
+ envVar: 'GITHUB_TOKEN',
180
+ required: true,
181
+ sensitive: true,
182
+ placeholder: 'ghp_...',
183
+ validationHint: 'Scopes: repo, read:org',
184
+ docsUrl: 'https://github.com/settings/tokens',
185
+ },
186
+ ],
187
+ sources: [],
188
+ server: {
189
+ transport: 'stdio',
190
+ command: 'npx',
191
+ args: ['-y', '@modelcontextprotocol/server-github@latest'],
192
+ env: { GITHUB_TOKEN: '{githubToken}' },
193
+ npmPackage: '@modelcontextprotocol/server-github',
194
+ proxyable: true,
195
+ },
196
+ },
197
+ {
198
+ id: 'postgres',
199
+ name: 'PostgreSQL MCP',
200
+ version: '1.0.0',
201
+ kind: 'mcp-server',
202
+ category: 'data',
203
+ description: 'Execute read-only SQL queries and inspect schema on PostgreSQL databases via the official MCP server.',
204
+ tags: ['postgres', 'database', 'sql', 'official'],
205
+ homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/postgres',
206
+ inputs: [],
207
+ credentials: [
208
+ {
209
+ name: 'databaseUrl',
210
+ label: 'PostgreSQL connection URL',
211
+ description: 'Full connection string including user, password, host, and database name',
212
+ envVar: 'DATABASE_URL',
213
+ required: true,
214
+ sensitive: true,
215
+ placeholder: 'postgresql://user:pass@localhost:5432/mydb',
216
+ validationHint: 'Format: postgresql://user:password@host:port/database',
217
+ },
218
+ ],
219
+ sources: [],
220
+ server: {
221
+ transport: 'stdio',
222
+ command: 'npx',
223
+ args: ['-y', '@modelcontextprotocol/server-postgres@latest', '{databaseUrl}'],
224
+ env: {},
225
+ npmPackage: '@modelcontextprotocol/server-postgres',
226
+ proxyable: true,
227
+ },
228
+ },
229
+ {
230
+ id: 'sqlite',
231
+ name: 'SQLite MCP',
232
+ version: '1.0.0',
233
+ kind: 'mcp-server',
234
+ category: 'data',
235
+ description: 'Query and modify local SQLite databases. Requires Python 3.x and uv (https://docs.astral.sh/uv/).',
236
+ tags: ['sqlite', 'database', 'sql', 'local', 'official'],
237
+ homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/sqlite',
238
+ inputs: [
239
+ {
240
+ name: 'dbPath',
241
+ label: 'Database file path',
242
+ description: 'Absolute path to the .db or .sqlite file',
243
+ required: true,
244
+ placeholder: '/Users/jay/data/mydb.db',
245
+ },
246
+ ],
247
+ credentials: [],
248
+ sources: [],
249
+ server: {
250
+ transport: 'stdio',
251
+ command: 'uvx',
252
+ args: ['mcp-server-sqlite', '--db-path', '{dbPath}'],
253
+ env: {},
254
+ proxyable: true,
255
+ },
256
+ },
257
+ // ── mcp-server kind (ai) ────────────────────────────────────────────────────
258
+ {
259
+ id: 'memory',
260
+ name: 'Memory MCP',
261
+ version: '1.0.0',
262
+ kind: 'mcp-server',
263
+ category: 'ai',
264
+ description: 'Persistent in-session memory graph for AI agents using a local knowledge graph.',
265
+ tags: ['memory', 'knowledge-graph', 'ai', 'official'],
266
+ homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/memory',
267
+ inputs: [],
268
+ credentials: [],
269
+ sources: [],
270
+ server: {
271
+ transport: 'stdio',
272
+ command: 'npx',
273
+ args: ['-y', '@modelcontextprotocol/server-memory@latest'],
274
+ env: {},
275
+ npmPackage: '@modelcontextprotocol/server-memory',
276
+ proxyable: true,
277
+ },
278
+ },
279
+ {
280
+ id: 'sequential-thinking',
281
+ name: 'Sequential Thinking MCP',
282
+ version: '1.0.0',
283
+ kind: 'mcp-server',
284
+ category: 'ai',
285
+ description: 'Structured multi-step reasoning tool that breaks complex problems into sequential thoughts with revision support.',
286
+ tags: ['reasoning', 'thinking', 'ai', 'official'],
287
+ homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking',
288
+ inputs: [],
289
+ credentials: [],
290
+ sources: [],
291
+ server: {
292
+ transport: 'stdio',
293
+ command: 'npx',
294
+ args: ['-y', '@modelcontextprotocol/server-sequential-thinking@latest'],
295
+ env: {},
296
+ npmPackage: '@modelcontextprotocol/server-sequential-thinking',
297
+ proxyable: true,
298
+ },
299
+ },
300
+ {
301
+ id: 'brave-search',
302
+ name: 'Brave Search MCP',
303
+ version: '1.0.0',
304
+ kind: 'mcp-server',
305
+ category: 'tools',
306
+ description: 'Web and local search via the Brave Search API. Requires a free Brave Search API key.',
307
+ tags: ['search', 'web', 'brave', 'official'],
308
+ homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/brave-search',
309
+ inputs: [],
310
+ credentials: [
311
+ {
312
+ name: 'braveApiKey',
313
+ label: 'Brave Search API Key',
314
+ description: 'API key for Brave Search (free tier available)',
315
+ envVar: 'BRAVE_API_KEY',
316
+ required: true,
317
+ sensitive: true,
318
+ placeholder: 'BSA...',
319
+ validationHint: 'Get a free key at https://brave.com/search/api/',
320
+ docsUrl: 'https://brave.com/search/api/',
321
+ },
322
+ ],
323
+ sources: [],
324
+ server: {
325
+ transport: 'stdio',
326
+ command: 'npx',
327
+ args: ['-y', '@modelcontextprotocol/server-brave-search@latest'],
328
+ env: { BRAVE_API_KEY: '{braveApiKey}' },
329
+ npmPackage: '@modelcontextprotocol/server-brave-search',
330
+ proxyable: true,
331
+ },
332
+ },
333
+ {
334
+ id: 'slack',
335
+ name: 'Slack MCP',
336
+ version: '1.0.0',
337
+ kind: 'mcp-server',
338
+ category: 'productivity',
339
+ description: 'Read channels, threads, and users from Slack workspaces via the official Slack MCP server.',
340
+ tags: ['slack', 'messaging', 'productivity', 'official'],
341
+ homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/slack',
342
+ inputs: [],
343
+ credentials: [
344
+ {
345
+ name: 'slackBotToken',
346
+ label: 'Slack Bot Token',
347
+ description: 'Bot token (xoxb-...) with channels:read, users:read scopes',
348
+ envVar: 'SLACK_BOT_TOKEN',
349
+ required: true,
350
+ sensitive: true,
351
+ placeholder: 'xoxb-...',
352
+ validationHint: 'Scopes: channels:read, channels:history, users:read',
353
+ docsUrl: 'https://api.slack.com/authentication/token-types#bot',
354
+ },
355
+ {
356
+ name: 'slackTeamId',
357
+ label: 'Slack Team ID',
358
+ description: 'Workspace Team ID (e.g. T01234ABCD), found in your Slack admin settings',
359
+ envVar: 'SLACK_TEAM_ID',
360
+ required: true,
361
+ sensitive: false,
362
+ placeholder: 'T01234ABCD',
363
+ },
364
+ ],
365
+ sources: [],
366
+ server: {
367
+ transport: 'stdio',
368
+ command: 'npx',
369
+ args: ['-y', '@modelcontextprotocol/server-slack@latest'],
370
+ env: {
371
+ SLACK_BOT_TOKEN: '{slackBotToken}',
372
+ SLACK_TEAM_ID: '{slackTeamId}',
373
+ },
374
+ npmPackage: '@modelcontextprotocol/server-slack',
375
+ proxyable: true,
376
+ },
377
+ },
378
+ {
379
+ id: 'puppeteer',
380
+ name: 'Puppeteer MCP',
381
+ version: '1.0.0',
382
+ kind: 'mcp-server',
383
+ category: 'tools',
384
+ description: 'Browser automation and web scraping via Puppeteer. Allows AI agents to navigate, screenshot, and interact with web pages.',
385
+ tags: ['browser', 'puppeteer', 'automation', 'scraping', 'official'],
386
+ homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/puppeteer',
387
+ inputs: [],
388
+ credentials: [],
389
+ sources: [],
390
+ server: {
391
+ transport: 'stdio',
392
+ command: 'npx',
393
+ args: ['-y', '@modelcontextprotocol/server-puppeteer@latest'],
394
+ env: {},
395
+ npmPackage: '@modelcontextprotocol/server-puppeteer',
396
+ proxyable: true,
397
+ },
398
+ },
399
+ {
400
+ id: 'google-maps',
401
+ name: 'Google Maps MCP',
402
+ version: '1.0.0',
403
+ kind: 'mcp-server',
404
+ category: 'tools',
405
+ description: 'Geocoding, directions, places search, and map data via the Google Maps Platform API.',
406
+ tags: ['maps', 'geocoding', 'places', 'google', 'official'],
407
+ homepage: 'https://github.com/modelcontextprotocol/servers/tree/main/src/google-maps',
408
+ inputs: [],
409
+ credentials: [
410
+ {
411
+ name: 'googleMapsApiKey',
412
+ label: 'Google Maps API Key',
413
+ description: 'API key with Geocoding, Directions, and Places APIs enabled',
414
+ envVar: 'GOOGLE_MAPS_API_KEY',
415
+ required: true,
416
+ sensitive: true,
417
+ placeholder: 'AIza...',
418
+ validationHint: 'Enable: Geocoding API, Directions API, Places API',
419
+ docsUrl: 'https://console.cloud.google.com/apis/credentials',
420
+ },
421
+ ],
422
+ sources: [],
423
+ server: {
424
+ transport: 'stdio',
425
+ command: 'npx',
426
+ args: ['-y', '@modelcontextprotocol/server-google-maps@latest'],
427
+ env: { GOOGLE_MAPS_API_KEY: '{googleMapsApiKey}' },
428
+ npmPackage: '@modelcontextprotocol/server-google-maps',
429
+ proxyable: true,
430
+ },
431
+ },
432
+ ];
433
+ // ── Public API ────────────────────────────────────────────────────────────────
434
+ export function getOfficialTemplates() {
435
+ return OFFICIAL_TEMPLATES.map((t) => CatalogTemplateSchema.parse(t));
436
+ }
437
+ /**
438
+ * Returns the kind of a template by ID. Defaults to 'docs-rag' for unknown IDs
439
+ * so existing servers without a template ID continue to work unchanged.
440
+ */
441
+ export function getTemplateKind(templateId) {
442
+ const found = OFFICIAL_TEMPLATES.find((t) => t.id === templateId);
443
+ return found?.kind ?? 'docs-rag';
444
+ }
445
+ export function buildDefinitionFromTemplate(template, inputs = {}) {
446
+ if (template.kind === 'mcp-server') {
447
+ // mcp-server kind: sources are empty; inputs stored in template reference for interpolation
448
+ return {
449
+ version: 1,
450
+ sources: [],
451
+ template: {
452
+ id: template.id,
453
+ name: template.name,
454
+ version: template.version,
455
+ inputs: Object.keys(inputs).length > 0 ? inputs : undefined,
456
+ },
457
+ };
458
+ }
459
+ // docs-rag kind (existing behaviour)
460
+ const sources = template.sources.length > 0
461
+ ? template.sources
462
+ : sourcesFromDocsRagInputs(template, inputs);
463
+ return {
464
+ version: 1,
465
+ sources,
466
+ template: {
467
+ id: template.id,
468
+ name: template.name,
469
+ version: template.version,
470
+ inputs: Object.keys(inputs).length > 0 ? inputs : undefined,
471
+ },
472
+ };
473
+ }
474
+ function sourcesFromDocsRagInputs(template, inputs) {
475
+ if (template.id === 'docs-rag') {
476
+ const url = inputs.url;
477
+ if (!url)
478
+ throw new Error('Template "docs-rag" requires --url <documentation-url>.');
479
+ return [{ type: 'docs', url, label: 'docs' }];
480
+ }
481
+ if (template.id === 'github-docs') {
482
+ const repo = inputs.repo;
483
+ if (!repo)
484
+ throw new Error('Template "github-docs" requires --repo <owner/name>.');
485
+ return [{ type: 'github', repo, label: repo }];
486
+ }
487
+ throw new Error(`Template "${template.id}" needs sources or an input mapping.`);
488
+ }
489
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/catalog/templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function cmdAudit(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAiDA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6F5D"}
@@ -0,0 +1,122 @@
1
+ import path from 'node:path';
2
+ import fs from 'fs-extra';
3
+ import { logger } from '../core/logger.js';
4
+ import { getServerDataDir } from '../core/paths.js';
5
+ import { printTitle, printSection, printCommand, printDetails, printTable, printJson, } from '../ui/format.js';
6
+ function summarizeAudit(entries) {
7
+ const chronological = [...entries].sort((a, b) => String(a.ts || '').localeCompare(String(b.ts || '')));
8
+ const byTool = {};
9
+ let hitsTotal = 0;
10
+ let searchCount = 0;
11
+ let rateLimited = 0;
12
+ for (const entry of entries) {
13
+ const tool = String(entry.tool || 'unknown');
14
+ byTool[tool] = (byTool[tool] || 0) + 1;
15
+ if (tool === 'rate_limited')
16
+ rateLimited++;
17
+ if (tool === 'search_documentation' && typeof entry.hits === 'number') {
18
+ hitsTotal += entry.hits;
19
+ searchCount++;
20
+ }
21
+ }
22
+ const topTool = Object.entries(byTool).sort((a, b) => b[1] - a[1])[0]?.[0];
23
+ return {
24
+ firstTs: chronological[0]?.ts || null,
25
+ lastTs: chronological[chronological.length - 1]?.ts || null,
26
+ byTool,
27
+ topTool,
28
+ rateLimited,
29
+ avgHitsPerSearch: searchCount > 0 ? Math.round((hitsTotal / searchCount) * 10) / 10 : 0,
30
+ };
31
+ }
32
+ export async function cmdAudit(args) {
33
+ const slug = args[1];
34
+ if (!slug) {
35
+ logger.error('Usage: hoolix audit <slug> [--json] [--limit N] [--tool <name>] [--since <iso-prefix>]');
36
+ process.exit(1);
37
+ }
38
+ const json = args.includes('--json');
39
+ const limitIdx = args.indexOf('--limit');
40
+ const limit = limitIdx !== -1 && args[limitIdx + 1] ? parseInt(args[limitIdx + 1], 10) || 50 : 50;
41
+ const toolIdx = args.indexOf('--tool');
42
+ const toolFilter = toolIdx !== -1 && args[toolIdx + 1] ? args[toolIdx + 1] : undefined;
43
+ const sinceIdx = args.indexOf('--since');
44
+ const sinceFilter = sinceIdx !== -1 && args[sinceIdx + 1] ? args[sinceIdx + 1] : undefined;
45
+ const auditPath = path.join(getServerDataDir(slug), 'audit.log');
46
+ let raw = '';
47
+ try {
48
+ raw = await fs.readFile(auditPath, 'utf8');
49
+ }
50
+ catch {
51
+ if (json) {
52
+ printJson({ slug, entries: [], message: 'No audit log yet (server must be started and tools invoked).' });
53
+ }
54
+ else {
55
+ printTitle('Audit Log', slug);
56
+ console.log(` No audit.log found for this server.`);
57
+ console.log(` Start the server and perform searches/reads to generate entries.`);
58
+ printCommand(`hoolix start ${slug}`);
59
+ }
60
+ return;
61
+ }
62
+ const entries = [];
63
+ for (const line of raw.split('\n')) {
64
+ const t = line.trim();
65
+ if (!t)
66
+ continue;
67
+ try {
68
+ const e = JSON.parse(t);
69
+ if (toolFilter && e.tool !== toolFilter)
70
+ continue;
71
+ if (sinceFilter && typeof e.ts === 'string' && !e.ts.startsWith(sinceFilter))
72
+ continue;
73
+ entries.push(e);
74
+ }
75
+ catch {
76
+ // skip malformed lines
77
+ }
78
+ }
79
+ entries.sort((a, b) => String(b.ts || '').localeCompare(String(a.ts || '')));
80
+ const shown = entries.slice(0, limit);
81
+ const summary = summarizeAudit(entries);
82
+ if (json) {
83
+ printJson({ slug, count: entries.length, showing: shown.length, summary, entries: shown });
84
+ return;
85
+ }
86
+ printTitle('Audit Log', slug);
87
+ printDetails([
88
+ ['Total entries', entries.length],
89
+ ['Showing (newest)', shown.length],
90
+ ['Time range', summary.firstTs && summary.lastTs ? `${summary.firstTs} → ${summary.lastTs}` : 'n/a'],
91
+ ['Top tool', summary.topTool || 'n/a'],
92
+ ['Rate limited', summary.rateLimited],
93
+ ['Avg hits/search', summary.avgHitsPerSearch],
94
+ ['Log path', auditPath],
95
+ ]);
96
+ if (Object.keys(summary.byTool).length > 0) {
97
+ console.log('');
98
+ printSection('Summary by tool');
99
+ printTable(Object.entries(summary.byTool).map(([tool, count]) => ({ tool, count })));
100
+ }
101
+ console.log('');
102
+ if (shown.length === 0) {
103
+ console.log(` No matching entries.`);
104
+ return;
105
+ }
106
+ const rows = shown.map((e) => {
107
+ const q = e.query?.slice(0, 48) || e.urlOrPath?.slice(0, 48) || '';
108
+ const extra = e.hits != null ? `hits=${e.hits}` : e.found != null ? `found=${e.found}` : e.entries != null ? `entries=${e.entries}` : '';
109
+ return {
110
+ ts: String(e.ts || '').replace('T', ' ').replace(/\.\d+Z$/, 'Z'),
111
+ tool: String(e.tool || ''),
112
+ details: [q, extra].filter(Boolean).join(' '),
113
+ };
114
+ });
115
+ printTable(rows);
116
+ console.log('');
117
+ if (entries.length > limit) {
118
+ console.log(` ... ${entries.length - limit} more (use --limit or --json for full)`);
119
+ }
120
+ console.log(` Filters: --tool search_documentation --since 2026- --limit 100`);
121
+ }
122
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * hoolix bundle export [slugs...] --output <file>
3
+ * hoolix bundle import <file>
4
+ *
5
+ * Multi-server bundle: export multiple servers into a single .hoolix.json
6
+ * file. Credentials are NEVER included — the bundle contains metadata and
7
+ * chunks only. After import, `hoolix secrets set` commands are printed for
8
+ * any mcp-server kind servers that require credentials.
9
+ */
10
+ export declare function cmdBundle(args: string[], json: boolean): Promise<void>;
11
+ //# sourceMappingURL=bundle.d.ts.map