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,105 @@
|
|
|
1
|
+
import type { ServerMetadata } from '../core/registry.js';
|
|
2
|
+
import type { ServerStatus } from '../process/manager.js';
|
|
3
|
+
import type { EmbeddingModel } from '../rag/models.js';
|
|
4
|
+
import type { RAGDiagnostics, SearchResult, TableOfContentsItem } from '../rag/types.js';
|
|
5
|
+
import type { SourceType, IngestionResult } from '../ingestion/types.js';
|
|
6
|
+
import type { AppProgressHandler } from './events.js';
|
|
7
|
+
import type { ServerDefinition, SourceDefinition } from '../sources/types.js';
|
|
8
|
+
export interface CreateServerInput {
|
|
9
|
+
name: string;
|
|
10
|
+
url?: string;
|
|
11
|
+
sources?: SourceDefinition[];
|
|
12
|
+
definition?: ServerDefinition;
|
|
13
|
+
templateId?: string;
|
|
14
|
+
templateInputs?: Record<string, string>;
|
|
15
|
+
credentials?: Record<string, string>;
|
|
16
|
+
embeddingModel: EmbeddingModel;
|
|
17
|
+
maxChunks?: number;
|
|
18
|
+
maxPages?: number;
|
|
19
|
+
onProgress?: AppProgressHandler;
|
|
20
|
+
}
|
|
21
|
+
export interface CreateServerResult {
|
|
22
|
+
meta: ServerMetadata;
|
|
23
|
+
ingestion: IngestionResult;
|
|
24
|
+
indexLabel: string;
|
|
25
|
+
indexWarning?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ReindexServerInput {
|
|
28
|
+
slug: string;
|
|
29
|
+
embeddingModel: EmbeddingModel;
|
|
30
|
+
maxChunks?: number;
|
|
31
|
+
maxPages?: number;
|
|
32
|
+
incremental?: boolean;
|
|
33
|
+
force?: boolean;
|
|
34
|
+
onProgress?: AppProgressHandler;
|
|
35
|
+
}
|
|
36
|
+
export interface ReindexServerResult {
|
|
37
|
+
meta: ServerMetadata;
|
|
38
|
+
ingestion: IngestionResult;
|
|
39
|
+
indexLabel: string;
|
|
40
|
+
indexWarning?: string;
|
|
41
|
+
skipped?: boolean;
|
|
42
|
+
reason?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface DeleteServerResult {
|
|
45
|
+
slug: string;
|
|
46
|
+
deleted: true;
|
|
47
|
+
}
|
|
48
|
+
export interface ServerListItem extends ServerMetadata {
|
|
49
|
+
status?: ServerStatus;
|
|
50
|
+
}
|
|
51
|
+
export interface ServerInfoResult {
|
|
52
|
+
meta: ServerMetadata;
|
|
53
|
+
status: ServerStatus;
|
|
54
|
+
}
|
|
55
|
+
export interface VerifySample {
|
|
56
|
+
query: string;
|
|
57
|
+
hits: number;
|
|
58
|
+
top: {
|
|
59
|
+
title?: string;
|
|
60
|
+
sectionPath?: string;
|
|
61
|
+
url: string;
|
|
62
|
+
score?: number;
|
|
63
|
+
} | null;
|
|
64
|
+
grounded: boolean;
|
|
65
|
+
weak: boolean;
|
|
66
|
+
results: SearchResult[];
|
|
67
|
+
}
|
|
68
|
+
export interface VerifyReport {
|
|
69
|
+
slug: string;
|
|
70
|
+
name: string;
|
|
71
|
+
sourceUrl: string;
|
|
72
|
+
sourceType: SourceType;
|
|
73
|
+
chunkCount: number;
|
|
74
|
+
validation: {
|
|
75
|
+
valid: boolean;
|
|
76
|
+
issues: string[];
|
|
77
|
+
};
|
|
78
|
+
searchable: boolean;
|
|
79
|
+
groundingPercent: number;
|
|
80
|
+
sourceCoveragePercent: number | null;
|
|
81
|
+
uniqueSourceUrls: number | null;
|
|
82
|
+
totalChars: number | null;
|
|
83
|
+
averageChunkChars: number | null;
|
|
84
|
+
duplicateChunkIds: number | null;
|
|
85
|
+
weakQueries: string[];
|
|
86
|
+
ingestion: {
|
|
87
|
+
pagesProcessed?: number;
|
|
88
|
+
pagesDiscovered?: number;
|
|
89
|
+
maxPages?: number;
|
|
90
|
+
maxChunks?: number;
|
|
91
|
+
truncated: boolean;
|
|
92
|
+
note?: string;
|
|
93
|
+
};
|
|
94
|
+
samples: VerifySample[];
|
|
95
|
+
tocEntries: number;
|
|
96
|
+
tocPreview: TableOfContentsItem[];
|
|
97
|
+
toc: TableOfContentsItem[];
|
|
98
|
+
diagnostics: RAGDiagnostics | null;
|
|
99
|
+
embeddingModel: EmbeddingModel;
|
|
100
|
+
freshnessUpdatedAt: string;
|
|
101
|
+
definition: ServerDefinition;
|
|
102
|
+
sourceCount: number;
|
|
103
|
+
sourceLabels: string[];
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/app/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/app/contracts.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IngestionProgress } from '../ingestion/types.js';
|
|
2
|
+
export type AppProgressStage = IngestionProgress['stage'] | 'index' | 'register' | 'credential' | 'delete' | 'verify' | 'done';
|
|
3
|
+
export interface AppProgressEvent {
|
|
4
|
+
stage: AppProgressStage;
|
|
5
|
+
message: string;
|
|
6
|
+
current?: number;
|
|
7
|
+
total?: number;
|
|
8
|
+
percent?: number;
|
|
9
|
+
}
|
|
10
|
+
export type AppProgressHandler = (event: AppProgressEvent) => void;
|
|
11
|
+
export declare function emitProgress(handler: AppProgressHandler | undefined, event: AppProgressEvent): void;
|
|
12
|
+
export declare function fromIngestionProgress(progress: IngestionProgress): AppProgressEvent;
|
|
13
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/app/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,CAAC,OAAO,CAAC,GAC1B,OAAO,GACP,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEnE,wBAAgB,YAAY,CAC1B,OAAO,EAAE,kBAAkB,GAAG,SAAS,EACvC,KAAK,EAAE,gBAAgB,GACtB,IAAI,CAEN;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,gBAAgB,CAQnF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function emitProgress(handler, event) {
|
|
2
|
+
handler?.(event);
|
|
3
|
+
}
|
|
4
|
+
export function fromIngestionProgress(progress) {
|
|
5
|
+
return {
|
|
6
|
+
stage: progress.stage,
|
|
7
|
+
message: progress.message,
|
|
8
|
+
current: progress.current,
|
|
9
|
+
total: progress.total,
|
|
10
|
+
percent: progress.percent,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/app/events.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,YAAY,CAC1B,OAAuC,EACvC,KAAuB;IAEvB,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAA2B;IAC/D,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface AuditEntry extends Record<string, unknown> {
|
|
2
|
+
ts?: string;
|
|
3
|
+
tool?: string;
|
|
4
|
+
query?: string;
|
|
5
|
+
urlOrPath?: string;
|
|
6
|
+
hits?: number;
|
|
7
|
+
found?: boolean;
|
|
8
|
+
transport?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface StatsReport {
|
|
11
|
+
slug: string;
|
|
12
|
+
name: string;
|
|
13
|
+
days: number;
|
|
14
|
+
since: string;
|
|
15
|
+
total: number;
|
|
16
|
+
byTool: Record<string, number>;
|
|
17
|
+
byTransport: Record<string, number>;
|
|
18
|
+
topQueries: Array<{
|
|
19
|
+
query: string;
|
|
20
|
+
count: number;
|
|
21
|
+
zeroHits: number;
|
|
22
|
+
}>;
|
|
23
|
+
topPages: Array<{
|
|
24
|
+
page: string;
|
|
25
|
+
count: number;
|
|
26
|
+
}>;
|
|
27
|
+
health: {
|
|
28
|
+
avgHitsPerSearch: number;
|
|
29
|
+
zeroHitSearches: number;
|
|
30
|
+
rateLimitEvents: number;
|
|
31
|
+
toolErrors: number;
|
|
32
|
+
readSuccessRate: number;
|
|
33
|
+
};
|
|
34
|
+
dailyActivity: Array<{
|
|
35
|
+
date: string;
|
|
36
|
+
count: number;
|
|
37
|
+
}>;
|
|
38
|
+
firstActivity: string | null;
|
|
39
|
+
lastActivity: string | null;
|
|
40
|
+
}
|
|
41
|
+
export declare function getStatsReport(slug: string, days?: number): Promise<StatsReport | null>;
|
|
42
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../src/app/services/analytics.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAW,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,MAAM,EAAE;QACN,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA+FzF"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import { getServerDataDir } from '../../core/paths.js';
|
|
4
|
+
import { getServerMetadata } from '../../core/registry.js';
|
|
5
|
+
export async function getStatsReport(slug, days = 30) {
|
|
6
|
+
const meta = await getServerMetadata(slug);
|
|
7
|
+
const since = new Date(Date.now() - days * 86400_000).toISOString();
|
|
8
|
+
const auditPath = path.join(getServerDataDir(slug), 'audit.log');
|
|
9
|
+
let raw = '';
|
|
10
|
+
try {
|
|
11
|
+
raw = await fs.readFile(auditPath, 'utf8');
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const allEntries = [];
|
|
17
|
+
for (const line of raw.split('\n')) {
|
|
18
|
+
const t = line.trim();
|
|
19
|
+
if (!t)
|
|
20
|
+
continue;
|
|
21
|
+
try {
|
|
22
|
+
allEntries.push(JSON.parse(t));
|
|
23
|
+
}
|
|
24
|
+
catch { }
|
|
25
|
+
}
|
|
26
|
+
const entries = allEntries.filter((e) => !e.ts || e.ts >= since);
|
|
27
|
+
const byTool = {};
|
|
28
|
+
const byTransport = {};
|
|
29
|
+
const queryCounts = {};
|
|
30
|
+
const pageCounts = {};
|
|
31
|
+
const byDay = {};
|
|
32
|
+
let rateLimited = 0;
|
|
33
|
+
let toolErrors = 0;
|
|
34
|
+
let hitsTotal = 0;
|
|
35
|
+
let searchCount = 0;
|
|
36
|
+
let zeroHits = 0;
|
|
37
|
+
let readCount = 0;
|
|
38
|
+
let readFound = 0;
|
|
39
|
+
for (const e of entries) {
|
|
40
|
+
const tool = String(e.tool || 'unknown');
|
|
41
|
+
byTool[tool] = (byTool[tool] || 0) + 1;
|
|
42
|
+
const transport = String(e.transport || 'http');
|
|
43
|
+
byTransport[transport] = (byTransport[transport] || 0) + 1;
|
|
44
|
+
if (e.ts)
|
|
45
|
+
byDay[e.ts.slice(0, 10)] = (byDay[e.ts.slice(0, 10)] || 0) + 1;
|
|
46
|
+
if (tool === 'search_documentation') {
|
|
47
|
+
searchCount++;
|
|
48
|
+
const hits = typeof e.hits === 'number' ? e.hits : 0;
|
|
49
|
+
hitsTotal += hits;
|
|
50
|
+
if (hits === 0)
|
|
51
|
+
zeroHits++;
|
|
52
|
+
if (typeof e.query === 'string' && e.query.trim()) {
|
|
53
|
+
const key = e.query.trim().toLowerCase().slice(0, 80);
|
|
54
|
+
queryCounts[key] ||= { count: 0, zeroHits: 0 };
|
|
55
|
+
queryCounts[key].count++;
|
|
56
|
+
if (hits === 0)
|
|
57
|
+
queryCounts[key].zeroHits++;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (tool === 'read_documentation_page') {
|
|
61
|
+
readCount++;
|
|
62
|
+
if (e.found)
|
|
63
|
+
readFound++;
|
|
64
|
+
if (typeof e.urlOrPath === 'string' && e.urlOrPath.trim()) {
|
|
65
|
+
pageCounts[e.urlOrPath.trim()] = (pageCounts[e.urlOrPath.trim()] || 0) + 1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (tool === 'rate_limited')
|
|
69
|
+
rateLimited++;
|
|
70
|
+
if (tool === 'tool_error')
|
|
71
|
+
toolErrors++;
|
|
72
|
+
}
|
|
73
|
+
const dailyActivity = [];
|
|
74
|
+
for (let i = 6; i >= 0; i--) {
|
|
75
|
+
const d = new Date(Date.now() - i * 86400_000).toISOString().slice(0, 10);
|
|
76
|
+
dailyActivity.push({ date: d, count: byDay[d] || 0 });
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
slug,
|
|
80
|
+
name: meta.name,
|
|
81
|
+
days,
|
|
82
|
+
since,
|
|
83
|
+
total: entries.length,
|
|
84
|
+
byTool,
|
|
85
|
+
byTransport,
|
|
86
|
+
topQueries: Object.entries(queryCounts)
|
|
87
|
+
.sort((a, b) => b[1].count - a[1].count)
|
|
88
|
+
.slice(0, 10)
|
|
89
|
+
.map(([query, value]) => ({ query, count: value.count, zeroHits: value.zeroHits })),
|
|
90
|
+
topPages: Object.entries(pageCounts)
|
|
91
|
+
.sort((a, b) => b[1] - a[1])
|
|
92
|
+
.slice(0, 10)
|
|
93
|
+
.map(([page, count]) => ({ page, count })),
|
|
94
|
+
health: {
|
|
95
|
+
avgHitsPerSearch: searchCount > 0 ? Math.round((hitsTotal / searchCount) * 10) / 10 : 0,
|
|
96
|
+
zeroHitSearches: zeroHits,
|
|
97
|
+
rateLimitEvents: rateLimited,
|
|
98
|
+
toolErrors,
|
|
99
|
+
readSuccessRate: readCount > 0 ? Math.round((readFound / readCount) * 100) : 100,
|
|
100
|
+
},
|
|
101
|
+
dailyActivity,
|
|
102
|
+
firstActivity: allEntries[0]?.ts || null,
|
|
103
|
+
lastActivity: allEntries[allEntries.length - 1]?.ts || null,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../src/app/services/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type CatalogTemplate } from '../../catalog/templates.js';
|
|
2
|
+
import type { ServerDefinition } from '../../sources/types.js';
|
|
3
|
+
export interface TemplateInstantiation {
|
|
4
|
+
template: CatalogTemplate;
|
|
5
|
+
definition: ServerDefinition;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Returns all templates: official (hardcoded) + community (from ~/.hoolix/templates/*.json).
|
|
9
|
+
* Sorted alphabetically by name.
|
|
10
|
+
*/
|
|
11
|
+
export declare function listTemplates(): Promise<CatalogTemplate[]>;
|
|
12
|
+
export declare function getTemplate(id: string): Promise<CatalogTemplate>;
|
|
13
|
+
export declare function instantiateTemplate(id: string, inputs?: Record<string, string>): Promise<TemplateInstantiation>;
|
|
14
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/app/services/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,gBAAgB,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAIhE;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAMtE;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,MAAM,EACV,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAClC,OAAO,CAAC,qBAAqB,CAAC,CAMhC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { buildDefinitionFromTemplate, getOfficialTemplates, } from '../../catalog/templates.js';
|
|
2
|
+
import { listCommunityTemplates } from '../../catalog/community.js';
|
|
3
|
+
/**
|
|
4
|
+
* Returns all templates: official (hardcoded) + community (from ~/.hoolix/templates/*.json).
|
|
5
|
+
* Sorted alphabetically by name.
|
|
6
|
+
*/
|
|
7
|
+
export async function listTemplates() {
|
|
8
|
+
const official = getOfficialTemplates();
|
|
9
|
+
const community = await listCommunityTemplates();
|
|
10
|
+
return [...official, ...community].sort((a, b) => a.name.localeCompare(b.name));
|
|
11
|
+
}
|
|
12
|
+
export async function getTemplate(id) {
|
|
13
|
+
const template = (await listTemplates()).find((candidate) => candidate.id === id);
|
|
14
|
+
if (!template) {
|
|
15
|
+
throw new Error(`Template "${id}" not found. Next: run "hoolix templates list" to see available templates.`);
|
|
16
|
+
}
|
|
17
|
+
return template;
|
|
18
|
+
}
|
|
19
|
+
export async function instantiateTemplate(id, inputs = {}) {
|
|
20
|
+
const template = await getTemplate(id);
|
|
21
|
+
return {
|
|
22
|
+
template,
|
|
23
|
+
definition: buildDefinitionFromTemplate(template, inputs),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/app/services/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,GAErB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAQpE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,QAAQ,GAAI,oBAAoB,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,sBAAsB,EAAE,CAAC;IACjD,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAU;IAC1C,MAAM,QAAQ,GAAG,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAClF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,aAAa,EAAE,4EAA4E,CAAC,CAAC;IAC/G,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAU,EACV,SAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;IACvC,OAAO;QACL,QAAQ;QACR,UAAU,EAAE,2BAA2B,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC1D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential management for mcp-server kind templates.
|
|
3
|
+
*
|
|
4
|
+
* Sensitive values (API tokens, connection strings) are stored in a separate
|
|
5
|
+
* credentials.json per server with 0600 permissions — never in metadata.json.
|
|
6
|
+
* The metadata.json only records which credential keys exist (credentialKeys[]).
|
|
7
|
+
*/
|
|
8
|
+
import type { CatalogTemplate } from '../../catalog/templates.js';
|
|
9
|
+
export declare function saveCredentials(slug: string, credentials: Record<string, string>): Promise<void>;
|
|
10
|
+
export declare function loadCredentials(slug: string): Promise<Record<string, string>>;
|
|
11
|
+
export declare function deleteCredentials(slug: string): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Set a single credential key. Creates or overwrites the key; leaves others intact.
|
|
14
|
+
* Updates credentialKeys in server metadata to reflect the new set.
|
|
15
|
+
*/
|
|
16
|
+
export declare function updateCredential(slug: string, key: string, value: string): Promise<string[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Remove a single credential key. Deletes credentials.json entirely if it becomes empty.
|
|
19
|
+
* Updates credentialKeys in server metadata.
|
|
20
|
+
*/
|
|
21
|
+
export declare function removeCredential(slug: string, key: string): Promise<string[]>;
|
|
22
|
+
export declare function maskCredentials(credentials: Record<string, string>, template?: CatalogTemplate): Record<string, string>;
|
|
23
|
+
export declare function promptCredentials(template: CatalogTemplate, options?: {
|
|
24
|
+
provided?: Record<string, string>;
|
|
25
|
+
env?: NodeJS.ProcessEnv;
|
|
26
|
+
nonInteractive?: boolean;
|
|
27
|
+
}): Promise<Record<string, string>>;
|
|
28
|
+
export declare function interpolateString(template: string, substitutions: Record<string, string>): string;
|
|
29
|
+
/**
|
|
30
|
+
* Interpolate {credential} and {input} placeholders in a server run config.
|
|
31
|
+
* Call at connect/start time with merged inputs + loaded credentials.
|
|
32
|
+
*/
|
|
33
|
+
export declare function interpolateRunConfig(server: {
|
|
34
|
+
command: string;
|
|
35
|
+
args: string[];
|
|
36
|
+
env: Record<string, string>;
|
|
37
|
+
}, substitutions: Record<string, string>): {
|
|
38
|
+
command: string;
|
|
39
|
+
args: string[];
|
|
40
|
+
env: Record<string, string>;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/app/services/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAiBlE,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAanF;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,CAAC,CAanB;AAID,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,QAAQ,CAAC,EAAE,eAAe,GACzB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB;AAID,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,eAAe,EACzB,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CACrB,GACL,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAoCjC;AAID,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EACxE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAQlE"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential management for mcp-server kind templates.
|
|
3
|
+
*
|
|
4
|
+
* Sensitive values (API tokens, connection strings) are stored in a separate
|
|
5
|
+
* credentials.json per server with 0600 permissions — never in metadata.json.
|
|
6
|
+
* The metadata.json only records which credential keys exist (credentialKeys[]).
|
|
7
|
+
*/
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
import fs from 'fs-extra';
|
|
10
|
+
import { text, isCancel } from '@clack/prompts';
|
|
11
|
+
import { getServerDir } from '../../core/paths.js';
|
|
12
|
+
import { logger } from '../../core/logger.js';
|
|
13
|
+
import { CredentialMissingError } from '../../core/errors.js';
|
|
14
|
+
const CREDENTIALS_FILE = 'credentials.json';
|
|
15
|
+
const CREDENTIALS_MODE = 0o600;
|
|
16
|
+
function getCredentialsPath(slug) {
|
|
17
|
+
return path.join(getServerDir(slug), CREDENTIALS_FILE);
|
|
18
|
+
}
|
|
19
|
+
function maskValue(value, visible = 6) {
|
|
20
|
+
if (!value)
|
|
21
|
+
return '';
|
|
22
|
+
if (value.length <= visible * 2)
|
|
23
|
+
return `${value.slice(0, 2)}...`;
|
|
24
|
+
return `${value.slice(0, visible)}...${value.slice(-visible)}`;
|
|
25
|
+
}
|
|
26
|
+
// ── Persistence ───────────────────────────────────────────────────────────────
|
|
27
|
+
export async function saveCredentials(slug, credentials) {
|
|
28
|
+
await fs.ensureDir(getServerDir(slug));
|
|
29
|
+
const credPath = getCredentialsPath(slug);
|
|
30
|
+
await fs.writeJson(credPath, credentials, { spaces: 2 });
|
|
31
|
+
// 0600: owner read/write only. No-op on Windows (acceptable; document in PACKAGING).
|
|
32
|
+
await fs.chmod(credPath, CREDENTIALS_MODE).catch(() => { });
|
|
33
|
+
}
|
|
34
|
+
export async function loadCredentials(slug) {
|
|
35
|
+
const credPath = getCredentialsPath(slug);
|
|
36
|
+
if (!(await fs.pathExists(credPath)))
|
|
37
|
+
return {};
|
|
38
|
+
try {
|
|
39
|
+
const raw = await fs.readJson(credPath);
|
|
40
|
+
if (raw && typeof raw === 'object' && !Array.isArray(raw)) {
|
|
41
|
+
return raw;
|
|
42
|
+
}
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
logger.debug(`Failed to load credentials.json for ${slug}`);
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export async function deleteCredentials(slug) {
|
|
51
|
+
await fs.remove(getCredentialsPath(slug)).catch(() => { });
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Set a single credential key. Creates or overwrites the key; leaves others intact.
|
|
55
|
+
* Updates credentialKeys in server metadata to reflect the new set.
|
|
56
|
+
*/
|
|
57
|
+
export async function updateCredential(slug, key, value) {
|
|
58
|
+
const existing = await loadCredentials(slug);
|
|
59
|
+
const updated = { ...existing, [key]: value };
|
|
60
|
+
await saveCredentials(slug, updated);
|
|
61
|
+
const keys = Object.keys(updated);
|
|
62
|
+
// Lazily import registry to avoid circular dependency at module load time
|
|
63
|
+
const { updateServerMetadata } = await import('../../core/registry.js');
|
|
64
|
+
await updateServerMetadata(slug, { credentialKeys: keys });
|
|
65
|
+
return keys;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Remove a single credential key. Deletes credentials.json entirely if it becomes empty.
|
|
69
|
+
* Updates credentialKeys in server metadata.
|
|
70
|
+
*/
|
|
71
|
+
export async function removeCredential(slug, key) {
|
|
72
|
+
const existing = await loadCredentials(slug);
|
|
73
|
+
if (!(key in existing))
|
|
74
|
+
return Object.keys(existing);
|
|
75
|
+
delete existing[key];
|
|
76
|
+
if (Object.keys(existing).length === 0) {
|
|
77
|
+
await deleteCredentials(slug);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
await saveCredentials(slug, existing);
|
|
81
|
+
}
|
|
82
|
+
const keys = Object.keys(existing);
|
|
83
|
+
const { updateServerMetadata } = await import('../../core/registry.js');
|
|
84
|
+
await updateServerMetadata(slug, { credentialKeys: keys });
|
|
85
|
+
return keys;
|
|
86
|
+
}
|
|
87
|
+
// ── Masking ───────────────────────────────────────────────────────────────────
|
|
88
|
+
export function maskCredentials(credentials, template) {
|
|
89
|
+
return Object.fromEntries(Object.entries(credentials).map(([key, value]) => {
|
|
90
|
+
const def = template?.credentials.find((c) => c.name === key);
|
|
91
|
+
return [key, def?.sensitive !== false ? maskValue(value) : value];
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
// ── Prompting ─────────────────────────────────────────────────────────────────
|
|
95
|
+
export async function promptCredentials(template, options = {}) {
|
|
96
|
+
const result = { ...(options.provided ?? {}) };
|
|
97
|
+
const env = options.env ?? process.env;
|
|
98
|
+
for (const cred of template.credentials) {
|
|
99
|
+
if (result[cred.name])
|
|
100
|
+
continue;
|
|
101
|
+
// Auto-detect from environment (uses envVar hint, e.g. GITHUB_TOKEN)
|
|
102
|
+
const fromEnv = cred.envVar ? env[cred.envVar] : undefined;
|
|
103
|
+
if (fromEnv) {
|
|
104
|
+
logger.info(`Using ${cred.envVar} from environment for "${cred.label}"`);
|
|
105
|
+
result[cred.name] = fromEnv;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (!cred.required)
|
|
109
|
+
continue;
|
|
110
|
+
if (options.nonInteractive) {
|
|
111
|
+
throw new CredentialMissingError(cred.name, cred.envVar);
|
|
112
|
+
}
|
|
113
|
+
const hint = cred.validationHint ? ` (${cred.validationHint})` : '';
|
|
114
|
+
const docsNote = cred.docsUrl ? `\n Docs: ${cred.docsUrl}` : '';
|
|
115
|
+
const raw = await text({
|
|
116
|
+
message: `${cred.label}${hint}${docsNote}`,
|
|
117
|
+
placeholder: cred.placeholder ?? (cred.sensitive ? '••••••••' : ''),
|
|
118
|
+
validate: (v) => (v && v.trim().length > 0 ? undefined : `${cred.label} is required`),
|
|
119
|
+
});
|
|
120
|
+
if (isCancel(raw)) {
|
|
121
|
+
// caller handles cancel by catching or checking process exit
|
|
122
|
+
throw new CredentialMissingError(cred.name, cred.envVar);
|
|
123
|
+
}
|
|
124
|
+
result[cred.name] = String(raw).trim();
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
// ── Interpolation ─────────────────────────────────────────────────────────────
|
|
129
|
+
export function interpolateString(template, substitutions) {
|
|
130
|
+
return template.replace(/\{(\w+)\}/g, (match, key) => substitutions[key] ?? match);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Interpolate {credential} and {input} placeholders in a server run config.
|
|
134
|
+
* Call at connect/start time with merged inputs + loaded credentials.
|
|
135
|
+
*/
|
|
136
|
+
export function interpolateRunConfig(server, substitutions) {
|
|
137
|
+
return {
|
|
138
|
+
command: server.command,
|
|
139
|
+
args: server.args.map((arg) => interpolateString(arg, substitutions)),
|
|
140
|
+
env: Object.fromEntries(Object.entries(server.env).map(([k, v]) => [k, interpolateString(v, substitutions)])),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/app/services/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ServerMetadata } from '../../core/registry.js';
|
|
2
|
+
import type { CreateServerInput, CreateServerResult, DeleteServerResult, ReindexServerInput, ReindexServerResult, ServerInfoResult, ServerListItem, VerifyReport } from '../contracts.js';
|
|
3
|
+
export declare function createServer(input: CreateServerInput): Promise<CreateServerResult>;
|
|
4
|
+
export declare function reindexServer(input: ReindexServerInput): Promise<ReindexServerResult>;
|
|
5
|
+
export declare function updateReindexSchedule(slug: string, intervalHours: number | null): Promise<ServerMetadata>;
|
|
6
|
+
export declare function listDueReindexServers(now?: Date): Promise<ServerMetadata[]>;
|
|
7
|
+
export declare function deleteRegisteredServer(slug: string): Promise<DeleteServerResult>;
|
|
8
|
+
export declare function listRegisteredServers(options?: {
|
|
9
|
+
includeStatus?: boolean;
|
|
10
|
+
}): Promise<ServerListItem[]>;
|
|
11
|
+
export declare function getServerInfo(slug: string): Promise<ServerInfoResult>;
|
|
12
|
+
export declare function getServerLogTail(slug: string, maxChars?: number): Promise<string>;
|
|
13
|
+
export declare function verifyServer(slug: string, queries?: string[]): Promise<VerifyReport>;
|
|
14
|
+
export declare function getServerSourceLabel(meta: ServerMetadata): string;
|
|
15
|
+
//# sourceMappingURL=servers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../../src/app/services/servers.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAahC,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,YAAY,EAEb,MAAM,iBAAiB,CAAC;AAyMzB,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoDxF;AAyCD,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA2D3F;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAQ/G;AAED,wBAAsB,qBAAqB,CAAC,GAAG,OAAa,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAOvF;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAGtF;AAED,wBAAsB,qBAAqB,CAAC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAYhH;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAI3E;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAQrF;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,WAAqE,GAAG,OAAO,CAAC,YAAY,CAAC,CAyEpJ;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAEjE"}
|