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.
- package/LICENSE +21 -0
- package/README.md +337 -0
- package/STABILITY.md +109 -0
- package/bin/hoolix.js +50 -0
- package/bin/mcp-portal.js +12 -0
- package/bin/postinstall.js +61 -0
- package/dist/app/contracts.d.ts +105 -0
- package/dist/app/contracts.d.ts.map +1 -0
- package/dist/app/contracts.js +2 -0
- package/dist/app/contracts.js.map +1 -0
- package/dist/app/events.d.ts +13 -0
- package/dist/app/events.d.ts.map +1 -0
- package/dist/app/events.js +13 -0
- package/dist/app/events.js.map +1 -0
- package/dist/app/services/analytics.d.ts +42 -0
- package/dist/app/services/analytics.d.ts.map +1 -0
- package/dist/app/services/analytics.js +106 -0
- package/dist/app/services/analytics.js.map +1 -0
- package/dist/app/services/catalog.d.ts +14 -0
- package/dist/app/services/catalog.d.ts.map +1 -0
- package/dist/app/services/catalog.js +26 -0
- package/dist/app/services/catalog.js.map +1 -0
- package/dist/app/services/credentials.d.ts +42 -0
- package/dist/app/services/credentials.d.ts.map +1 -0
- package/dist/app/services/credentials.js +143 -0
- package/dist/app/services/credentials.js.map +1 -0
- package/dist/app/services/servers.d.ts +15 -0
- package/dist/app/services/servers.d.ts.map +1 -0
- package/dist/app/services/servers.js +445 -0
- package/dist/app/services/servers.js.map +1 -0
- package/dist/catalog/community.d.ts +19 -0
- package/dist/catalog/community.d.ts.map +1 -0
- package/dist/catalog/community.js +53 -0
- package/dist/catalog/community.js.map +1 -0
- package/dist/catalog/templates.d.ts +436 -0
- package/dist/catalog/templates.d.ts.map +1 -0
- package/dist/catalog/templates.js +489 -0
- package/dist/catalog/templates.js.map +1 -0
- package/dist/commands/audit.d.ts +2 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +122 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/bundle.d.ts +11 -0
- package/dist/commands/bundle.d.ts.map +1 -0
- package/dist/commands/bundle.js +299 -0
- package/dist/commands/bundle.js.map +1 -0
- package/dist/commands/clients.d.ts +6 -0
- package/dist/commands/clients.d.ts.map +1 -0
- package/dist/commands/clients.js +242 -0
- package/dist/commands/clients.js.map +1 -0
- package/dist/commands/completion.d.ts +18 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +495 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/connect.d.ts +10 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +463 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/create.d.ts +2 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +607 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/delete.d.ts +2 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +44 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +259 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/export.d.ts +2 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +93 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/gui.d.ts +2 -0
- package/dist/commands/gui.d.ts.map +1 -0
- package/dist/commands/gui.js +19 -0
- package/dist/commands/gui.js.map +1 -0
- package/dist/commands/import.d.ts +2 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +102 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/info.d.ts +2 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +151 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +90 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/reindex.d.ts +2 -0
- package/dist/commands/reindex.d.ts.map +1 -0
- package/dist/commands/reindex.js +186 -0
- package/dist/commands/reindex.js.map +1 -0
- package/dist/commands/rotate.d.ts +2 -0
- package/dist/commands/rotate.d.ts.map +1 -0
- package/dist/commands/rotate.js +67 -0
- package/dist/commands/rotate.js.map +1 -0
- package/dist/commands/secrets.d.ts +10 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +293 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/start.d.ts +2 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +234 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/stats.d.ts +2 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +220 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/stop.d.ts +2 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +24 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/templates.d.ts +2 -0
- package/dist/commands/templates.d.ts.map +1 -0
- package/dist/commands/templates.js +168 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/commands/trial.d.ts +2 -0
- package/dist/commands/trial.d.ts.map +1 -0
- package/dist/commands/trial.js +61 -0
- package/dist/commands/trial.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +114 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +104 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +2 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +301 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/core/config.d.ts +25 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +54 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/errors.d.ts +25 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +53 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/logger.d.ts +3 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +12 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/paths.d.ts +15 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +51 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/registry.d.ts +474 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +186 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/updater.d.ts +16 -0
- package/dist/core/updater.d.ts.map +1 -0
- package/dist/core/updater.js +317 -0
- package/dist/core/updater.js.map +1 -0
- package/dist/core/version.d.ts +2 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +3 -0
- package/dist/core/version.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +270 -0
- package/dist/index.js.map +1 -0
- package/dist/ingestion/chunker.d.ts +13 -0
- package/dist/ingestion/chunker.d.ts.map +1 -0
- package/dist/ingestion/chunker.js +107 -0
- package/dist/ingestion/chunker.js.map +1 -0
- package/dist/ingestion/cleaners.d.ts +10 -0
- package/dist/ingestion/cleaners.d.ts.map +1 -0
- package/dist/ingestion/cleaners.js +61 -0
- package/dist/ingestion/cleaners.js.map +1 -0
- package/dist/ingestion/detectors.d.ts +5 -0
- package/dist/ingestion/detectors.d.ts.map +1 -0
- package/dist/ingestion/detectors.js +25 -0
- package/dist/ingestion/detectors.js.map +1 -0
- package/dist/ingestion/fetchers.d.ts +38 -0
- package/dist/ingestion/fetchers.d.ts.map +1 -0
- package/dist/ingestion/fetchers.js +296 -0
- package/dist/ingestion/fetchers.js.map +1 -0
- package/dist/ingestion/github.d.ts +60 -0
- package/dist/ingestion/github.d.ts.map +1 -0
- package/dist/ingestion/github.js +314 -0
- package/dist/ingestion/github.js.map +1 -0
- package/dist/ingestion/pipeline.d.ts +3 -0
- package/dist/ingestion/pipeline.d.ts.map +1 -0
- package/dist/ingestion/pipeline.js +160 -0
- package/dist/ingestion/pipeline.js.map +1 -0
- package/dist/ingestion/types.d.ts +51 -0
- package/dist/ingestion/types.d.ts.map +1 -0
- package/dist/ingestion/types.js +2 -0
- package/dist/ingestion/types.js.map +1 -0
- package/dist/lib/auth.d.ts +2 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +6 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/embedding.d.ts +10 -0
- package/dist/lib/embedding.d.ts.map +1 -0
- package/dist/lib/embedding.js +21 -0
- package/dist/lib/embedding.js.map +1 -0
- package/dist/mcp/host.d.ts +16 -0
- package/dist/mcp/host.d.ts.map +1 -0
- package/dist/mcp/host.js +307 -0
- package/dist/mcp/host.js.map +1 -0
- package/dist/mcp/proxy-host.d.ts +25 -0
- package/dist/mcp/proxy-host.d.ts.map +1 -0
- package/dist/mcp/proxy-host.js +393 -0
- package/dist/mcp/proxy-host.js.map +1 -0
- package/dist/mcp/stdio-host.d.ts +19 -0
- package/dist/mcp/stdio-host.d.ts.map +1 -0
- package/dist/mcp/stdio-host.js +175 -0
- package/dist/mcp/stdio-host.js.map +1 -0
- package/dist/process/manager.d.ts +74 -0
- package/dist/process/manager.d.ts.map +1 -0
- package/dist/process/manager.js +322 -0
- package/dist/process/manager.js.map +1 -0
- package/dist/rag/models.d.ts +30 -0
- package/dist/rag/models.d.ts.map +1 -0
- package/dist/rag/models.js +30 -0
- package/dist/rag/models.js.map +1 -0
- package/dist/rag/store.d.ts +63 -0
- package/dist/rag/store.d.ts.map +1 -0
- package/dist/rag/store.js +505 -0
- package/dist/rag/store.js.map +1 -0
- package/dist/rag/types.d.ts +56 -0
- package/dist/rag/types.d.ts.map +1 -0
- package/dist/rag/types.js +2 -0
- package/dist/rag/types.js.map +1 -0
- package/dist/sources/plugins.d.ts +25 -0
- package/dist/sources/plugins.d.ts.map +1 -0
- package/dist/sources/plugins.js +55 -0
- package/dist/sources/plugins.js.map +1 -0
- package/dist/sources/registry.d.ts +19 -0
- package/dist/sources/registry.d.ts.map +1 -0
- package/dist/sources/registry.js +183 -0
- package/dist/sources/registry.js.map +1 -0
- package/dist/sources/types.d.ts +361 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +59 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/tui/index.d.ts +22 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +711 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/ui/format.d.ts +27 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +80 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/help.d.ts +2 -0
- package/dist/ui/help.d.ts.map +1 -0
- package/dist/ui/help.js +106 -0
- package/dist/ui/help.js.map +1 -0
- package/dist/web/assets.d.ts +2 -0
- package/dist/web/assets.d.ts.map +1 -0
- package/dist/web/assets.js +659 -0
- package/dist/web/assets.js.map +1 -0
- package/dist/web/server.d.ts +9 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +349 -0
- package/dist/web/server.js.map +1 -0
- 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 @@
|
|
|
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
|