stellavault 0.4.4 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -16
- package/SECURITY.md +50 -0
- package/dist/stellavault.js +8968 -0
- package/package.json +70 -33
- package/.env.example +0 -12
- package/CHANGELOG.md +0 -106
- package/CLAUDE.md +0 -42
- package/CONTRIBUTING.md +0 -65
- package/index.html +0 -509
- package/packages/cli/bin/ekh.js +0 -2
- package/packages/cli/bin/stellavault.js +0 -2
- package/packages/cli/dist/commands/adr-cmd.d.ts +0 -7
- package/packages/cli/dist/commands/adr-cmd.js +0 -45
- package/packages/cli/dist/commands/ask-cmd.d.ts +0 -5
- package/packages/cli/dist/commands/ask-cmd.js +0 -36
- package/packages/cli/dist/commands/autopilot-cmd.d.ts +0 -4
- package/packages/cli/dist/commands/autopilot-cmd.js +0 -76
- package/packages/cli/dist/commands/brief-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/brief-cmd.js +0 -82
- package/packages/cli/dist/commands/capture-cmd.d.ts +0 -7
- package/packages/cli/dist/commands/capture-cmd.js +0 -31
- package/packages/cli/dist/commands/card-cmd.d.ts +0 -4
- package/packages/cli/dist/commands/card-cmd.js +0 -26
- package/packages/cli/dist/commands/clip-cmd.d.ts +0 -4
- package/packages/cli/dist/commands/clip-cmd.js +0 -151
- package/packages/cli/dist/commands/cloud-cmd.d.ts +0 -4
- package/packages/cli/dist/commands/cloud-cmd.js +0 -64
- package/packages/cli/dist/commands/compile-cmd.d.ts +0 -6
- package/packages/cli/dist/commands/compile-cmd.js +0 -30
- package/packages/cli/dist/commands/contradictions-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/contradictions-cmd.js +0 -34
- package/packages/cli/dist/commands/decay-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/decay-cmd.js +0 -48
- package/packages/cli/dist/commands/digest-cmd.d.ts +0 -5
- package/packages/cli/dist/commands/digest-cmd.js +0 -136
- package/packages/cli/dist/commands/draft-cmd.d.ts +0 -6
- package/packages/cli/dist/commands/draft-cmd.js +0 -110
- package/packages/cli/dist/commands/duplicates-cmd.d.ts +0 -4
- package/packages/cli/dist/commands/duplicates-cmd.js +0 -30
- package/packages/cli/dist/commands/federate-cmd.d.ts +0 -5
- package/packages/cli/dist/commands/federate-cmd.js +0 -247
- package/packages/cli/dist/commands/fleeting-cmd.d.ts +0 -4
- package/packages/cli/dist/commands/fleeting-cmd.js +0 -45
- package/packages/cli/dist/commands/flush-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/flush-cmd.js +0 -58
- package/packages/cli/dist/commands/gaps-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/gaps-cmd.js +0 -33
- package/packages/cli/dist/commands/graph-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/graph-cmd.js +0 -89
- package/packages/cli/dist/commands/index-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/index-cmd.js +0 -57
- package/packages/cli/dist/commands/ingest-cmd.d.ts +0 -9
- package/packages/cli/dist/commands/ingest-cmd.js +0 -195
- package/packages/cli/dist/commands/init-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/init-cmd.js +0 -161
- package/packages/cli/dist/commands/learn-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/learn-cmd.js +0 -48
- package/packages/cli/dist/commands/lint-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/lint-cmd.js +0 -61
- package/packages/cli/dist/commands/pack-cmd.d.ts +0 -15
- package/packages/cli/dist/commands/pack-cmd.js +0 -93
- package/packages/cli/dist/commands/review-cmd.d.ts +0 -4
- package/packages/cli/dist/commands/review-cmd.js +0 -107
- package/packages/cli/dist/commands/search-cmd.d.ts +0 -4
- package/packages/cli/dist/commands/search-cmd.js +0 -38
- package/packages/cli/dist/commands/serve-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/serve-cmd.js +0 -14
- package/packages/cli/dist/commands/session-cmd.d.ts +0 -7
- package/packages/cli/dist/commands/session-cmd.js +0 -95
- package/packages/cli/dist/commands/status-cmd.d.ts +0 -2
- package/packages/cli/dist/commands/status-cmd.js +0 -33
- package/packages/cli/dist/commands/sync-cmd.d.ts +0 -5
- package/packages/cli/dist/commands/sync-cmd.js +0 -62
- package/packages/cli/dist/commands/vault-cmd.d.ts +0 -10
- package/packages/cli/dist/commands/vault-cmd.js +0 -54
- package/packages/cli/dist/index.d.ts +0 -2
- package/packages/cli/dist/index.js +0 -233
- package/packages/cli/package.json +0 -24
- package/packages/core/dist/api/dashboard.d.ts +0 -3
- package/packages/core/dist/api/dashboard.js +0 -135
- package/packages/core/dist/api/graph-data.d.ts +0 -11
- package/packages/core/dist/api/graph-data.js +0 -255
- package/packages/core/dist/api/pwa.d.ts +0 -3
- package/packages/core/dist/api/pwa.js +0 -77
- package/packages/core/dist/api/server.d.ts +0 -16
- package/packages/core/dist/api/server.js +0 -1122
- package/packages/core/dist/capture/voice.d.ts +0 -24
- package/packages/core/dist/capture/voice.js +0 -135
- package/packages/core/dist/cloud/index.d.ts +0 -3
- package/packages/core/dist/cloud/index.js +0 -2
- package/packages/core/dist/cloud/sync.d.ts +0 -29
- package/packages/core/dist/cloud/sync.js +0 -137
- package/packages/core/dist/config.d.ts +0 -35
- package/packages/core/dist/config.js +0 -63
- package/packages/core/dist/federation/credits.d.ts +0 -26
- package/packages/core/dist/federation/credits.js +0 -56
- package/packages/core/dist/federation/identity.d.ts +0 -14
- package/packages/core/dist/federation/identity.js +0 -74
- package/packages/core/dist/federation/index.d.ts +0 -7
- package/packages/core/dist/federation/index.js +0 -5
- package/packages/core/dist/federation/node.d.ts +0 -31
- package/packages/core/dist/federation/node.js +0 -216
- package/packages/core/dist/federation/privacy.d.ts +0 -8
- package/packages/core/dist/federation/privacy.js +0 -40
- package/packages/core/dist/federation/reputation.d.ts +0 -37
- package/packages/core/dist/federation/reputation.js +0 -139
- package/packages/core/dist/federation/search.d.ts +0 -19
- package/packages/core/dist/federation/search.js +0 -101
- package/packages/core/dist/federation/sharing.d.ts +0 -72
- package/packages/core/dist/federation/sharing.js +0 -246
- package/packages/core/dist/federation/trust.d.ts +0 -15
- package/packages/core/dist/federation/trust.js +0 -60
- package/packages/core/dist/federation/types.d.ts +0 -40
- package/packages/core/dist/federation/types.js +0 -3
- package/packages/core/dist/i18n/index.d.ts +0 -6
- package/packages/core/dist/i18n/index.js +0 -81
- package/packages/core/dist/i18n/note-strings.d.ts +0 -5
- package/packages/core/dist/i18n/note-strings.js +0 -94
- package/packages/core/dist/index.d.ts +0 -123
- package/packages/core/dist/index.js +0 -74
- package/packages/core/dist/indexer/chunker.d.ts +0 -14
- package/packages/core/dist/indexer/chunker.js +0 -148
- package/packages/core/dist/indexer/embedder.d.ts +0 -8
- package/packages/core/dist/indexer/embedder.js +0 -3
- package/packages/core/dist/indexer/index.d.ts +0 -28
- package/packages/core/dist/indexer/index.js +0 -74
- package/packages/core/dist/indexer/local-embedder.d.ts +0 -3
- package/packages/core/dist/indexer/local-embedder.js +0 -29
- package/packages/core/dist/indexer/scanner.d.ts +0 -11
- package/packages/core/dist/indexer/scanner.js +0 -148
- package/packages/core/dist/indexer/watcher.d.ts +0 -19
- package/packages/core/dist/indexer/watcher.js +0 -49
- package/packages/core/dist/intelligence/ask-engine.d.ts +0 -24
- package/packages/core/dist/intelligence/ask-engine.js +0 -142
- package/packages/core/dist/intelligence/auto-linker.d.ts +0 -19
- package/packages/core/dist/intelligence/auto-linker.js +0 -126
- package/packages/core/dist/intelligence/code-linker.d.ts +0 -20
- package/packages/core/dist/intelligence/code-linker.js +0 -88
- package/packages/core/dist/intelligence/contradiction-detector.d.ts +0 -20
- package/packages/core/dist/intelligence/contradiction-detector.js +0 -115
- package/packages/core/dist/intelligence/decay-engine.d.ts +0 -27
- package/packages/core/dist/intelligence/decay-engine.js +0 -190
- package/packages/core/dist/intelligence/draft-generator.d.ts +0 -25
- package/packages/core/dist/intelligence/draft-generator.js +0 -277
- package/packages/core/dist/intelligence/duplicate-detector.d.ts +0 -20
- package/packages/core/dist/intelligence/duplicate-detector.js +0 -55
- package/packages/core/dist/intelligence/file-extractors.d.ts +0 -13
- package/packages/core/dist/intelligence/file-extractors.js +0 -155
- package/packages/core/dist/intelligence/fsrs.d.ts +0 -43
- package/packages/core/dist/intelligence/fsrs.js +0 -70
- package/packages/core/dist/intelligence/gap-detector.d.ts +0 -25
- package/packages/core/dist/intelligence/gap-detector.js +0 -78
- package/packages/core/dist/intelligence/ingest-pipeline.d.ts +0 -32
- package/packages/core/dist/intelligence/ingest-pipeline.js +0 -245
- package/packages/core/dist/intelligence/knowledge-lint.d.ts +0 -27
- package/packages/core/dist/intelligence/knowledge-lint.js +0 -132
- package/packages/core/dist/intelligence/learning-path.d.ts +0 -31
- package/packages/core/dist/intelligence/learning-path.js +0 -53
- package/packages/core/dist/intelligence/notifications.d.ts +0 -31
- package/packages/core/dist/intelligence/notifications.js +0 -65
- package/packages/core/dist/intelligence/predictive-gaps.d.ts +0 -14
- package/packages/core/dist/intelligence/predictive-gaps.js +0 -74
- package/packages/core/dist/intelligence/semantic-versioning.d.ts +0 -37
- package/packages/core/dist/intelligence/semantic-versioning.js +0 -68
- package/packages/core/dist/intelligence/types.d.ts +0 -28
- package/packages/core/dist/intelligence/types.js +0 -3
- package/packages/core/dist/intelligence/wiki-compiler.d.ts +0 -30
- package/packages/core/dist/intelligence/wiki-compiler.js +0 -222
- package/packages/core/dist/intelligence/youtube-extractor.d.ts +0 -29
- package/packages/core/dist/intelligence/youtube-extractor.js +0 -321
- package/packages/core/dist/intelligence/zettelkasten.d.ts +0 -59
- package/packages/core/dist/intelligence/zettelkasten.js +0 -234
- package/packages/core/dist/mcp/custom-tools.d.ts +0 -29
- package/packages/core/dist/mcp/custom-tools.js +0 -70
- package/packages/core/dist/mcp/index.d.ts +0 -2
- package/packages/core/dist/mcp/index.js +0 -2
- package/packages/core/dist/mcp/server.d.ts +0 -51
- package/packages/core/dist/mcp/server.js +0 -174
- package/packages/core/dist/mcp/tools/agentic-graph.d.ts +0 -93
- package/packages/core/dist/mcp/tools/agentic-graph.js +0 -116
- package/packages/core/dist/mcp/tools/ask.d.ts +0 -29
- package/packages/core/dist/mcp/tools/ask.js +0 -43
- package/packages/core/dist/mcp/tools/brief.d.ts +0 -31
- package/packages/core/dist/mcp/tools/brief.js +0 -39
- package/packages/core/dist/mcp/tools/decay.d.ts +0 -33
- package/packages/core/dist/mcp/tools/decay.js +0 -32
- package/packages/core/dist/mcp/tools/decision-journal.d.ts +0 -78
- package/packages/core/dist/mcp/tools/decision-journal.js +0 -79
- package/packages/core/dist/mcp/tools/detect-gaps.d.ts +0 -24
- package/packages/core/dist/mcp/tools/detect-gaps.js +0 -47
- package/packages/core/dist/mcp/tools/export.d.ts +0 -29
- package/packages/core/dist/mcp/tools/export.js +0 -60
- package/packages/core/dist/mcp/tools/federated-search.d.ts +0 -29
- package/packages/core/dist/mcp/tools/federated-search.js +0 -36
- package/packages/core/dist/mcp/tools/generate-claude-md.d.ts +0 -35
- package/packages/core/dist/mcp/tools/generate-claude-md.js +0 -107
- package/packages/core/dist/mcp/tools/generate-draft.d.ts +0 -34
- package/packages/core/dist/mcp/tools/generate-draft.js +0 -120
- package/packages/core/dist/mcp/tools/get-document.d.ts +0 -35
- package/packages/core/dist/mcp/tools/get-document.js +0 -25
- package/packages/core/dist/mcp/tools/get-evolution.d.ts +0 -28
- package/packages/core/dist/mcp/tools/get-evolution.js +0 -70
- package/packages/core/dist/mcp/tools/get-related.d.ts +0 -32
- package/packages/core/dist/mcp/tools/get-related.js +0 -33
- package/packages/core/dist/mcp/tools/learning-path.d.ts +0 -23
- package/packages/core/dist/mcp/tools/learning-path.js +0 -45
- package/packages/core/dist/mcp/tools/link-code.d.ts +0 -34
- package/packages/core/dist/mcp/tools/link-code.js +0 -44
- package/packages/core/dist/mcp/tools/list-topics.d.ts +0 -15
- package/packages/core/dist/mcp/tools/list-topics.js +0 -18
- package/packages/core/dist/mcp/tools/search.d.ts +0 -39
- package/packages/core/dist/mcp/tools/search.js +0 -29
- package/packages/core/dist/mcp/tools/snapshot.d.ts +0 -47
- package/packages/core/dist/mcp/tools/snapshot.js +0 -84
- package/packages/core/dist/multi-vault/index.d.ts +0 -26
- package/packages/core/dist/multi-vault/index.js +0 -80
- package/packages/core/dist/pack/creator.d.ts +0 -21
- package/packages/core/dist/pack/creator.js +0 -105
- package/packages/core/dist/pack/exporter.d.ts +0 -4
- package/packages/core/dist/pack/exporter.js +0 -18
- package/packages/core/dist/pack/importer.d.ts +0 -10
- package/packages/core/dist/pack/importer.js +0 -55
- package/packages/core/dist/pack/index.d.ts +0 -6
- package/packages/core/dist/pack/index.js +0 -5
- package/packages/core/dist/pack/marketplace.d.ts +0 -14
- package/packages/core/dist/pack/marketplace.js +0 -90
- package/packages/core/dist/pack/pii-masker.d.ts +0 -7
- package/packages/core/dist/pack/pii-masker.js +0 -29
- package/packages/core/dist/pack/types.d.ts +0 -36
- package/packages/core/dist/pack/types.js +0 -3
- package/packages/core/dist/plugins/index.d.ts +0 -35
- package/packages/core/dist/plugins/index.js +0 -57
- package/packages/core/dist/plugins/webhooks.d.ts +0 -30
- package/packages/core/dist/plugins/webhooks.js +0 -79
- package/packages/core/dist/search/adaptive.d.ts +0 -16
- package/packages/core/dist/search/adaptive.js +0 -67
- package/packages/core/dist/search/bm25.d.ts +0 -4
- package/packages/core/dist/search/bm25.js +0 -10
- package/packages/core/dist/search/index.d.ts +0 -15
- package/packages/core/dist/search/index.js +0 -64
- package/packages/core/dist/search/rrf.d.ts +0 -7
- package/packages/core/dist/search/rrf.js +0 -21
- package/packages/core/dist/search/semantic.d.ts +0 -5
- package/packages/core/dist/search/semantic.js +0 -6
- package/packages/core/dist/store/index.d.ts +0 -3
- package/packages/core/dist/store/index.js +0 -2
- package/packages/core/dist/store/sqlite-vec.d.ts +0 -6
- package/packages/core/dist/store/sqlite-vec.js +0 -251
- package/packages/core/dist/store/types.d.ts +0 -20
- package/packages/core/dist/store/types.js +0 -3
- package/packages/core/dist/team/index.d.ts +0 -25
- package/packages/core/dist/team/index.js +0 -97
- package/packages/core/dist/types/chunk.d.ts +0 -23
- package/packages/core/dist/types/chunk.js +0 -3
- package/packages/core/dist/types/document.d.ts +0 -23
- package/packages/core/dist/types/document.js +0 -3
- package/packages/core/dist/types/graph.d.ts +0 -39
- package/packages/core/dist/types/graph.js +0 -3
- package/packages/core/dist/types/index.d.ts +0 -5
- package/packages/core/dist/types/index.js +0 -2
- package/packages/core/dist/types/search.d.ts +0 -39
- package/packages/core/dist/types/search.js +0 -3
- package/packages/core/dist/utils/retry.d.ts +0 -25
- package/packages/core/dist/utils/retry.js +0 -59
- package/packages/core/package.json +0 -67
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export interface SemanticVersion {
|
|
2
|
-
documentId: string;
|
|
3
|
-
timestamp: string;
|
|
4
|
-
embeddingHash: string;
|
|
5
|
-
drift: number;
|
|
6
|
-
}
|
|
7
|
-
export interface SemanticChangelog {
|
|
8
|
-
documentId: string;
|
|
9
|
-
title: string;
|
|
10
|
-
versions: SemanticVersion[];
|
|
11
|
-
totalDrift: number;
|
|
12
|
-
stability: number;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Compute semantic drift between two embedding vectors.
|
|
16
|
-
* Returns cosine distance (0 = identical, 1 = orthogonal, 2 = opposite)
|
|
17
|
-
*/
|
|
18
|
-
export declare function computeSemanticDrift(vecA: number[], vecB: number[]): number;
|
|
19
|
-
/**
|
|
20
|
-
* Hash an embedding vector for quick comparison
|
|
21
|
-
*/
|
|
22
|
-
export declare function hashEmbedding(vec: number[]): string;
|
|
23
|
-
/**
|
|
24
|
-
* Analyze semantic stability of a document given its embedding history.
|
|
25
|
-
* In practice, we compare current embedding vs initial embedding to measure total drift.
|
|
26
|
-
*/
|
|
27
|
-
export declare function analyzeSemanticStability(currentVec: number[], title: string, documentId: string): SemanticChangelog;
|
|
28
|
-
/**
|
|
29
|
-
* Compare two sets of embeddings to find documents with the most semantic drift.
|
|
30
|
-
* Useful for "what changed the most since last index?"
|
|
31
|
-
*/
|
|
32
|
-
export declare function findMostDrifted(previousEmbeddings: Map<string, number[]>, currentEmbeddings: Map<string, number[]>, titles: Map<string, string>, limit?: number): Array<{
|
|
33
|
-
documentId: string;
|
|
34
|
-
title: string;
|
|
35
|
-
drift: number;
|
|
36
|
-
}>;
|
|
37
|
-
//# sourceMappingURL=semantic-versioning.d.ts.map
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
// Knowledge Semantic Versioning (F-A13)
|
|
2
|
-
// Track how a note's MEANING changes over time via embedding drift
|
|
3
|
-
/**
|
|
4
|
-
* Compute semantic drift between two embedding vectors.
|
|
5
|
-
* Returns cosine distance (0 = identical, 1 = orthogonal, 2 = opposite)
|
|
6
|
-
*/
|
|
7
|
-
export function computeSemanticDrift(vecA, vecB) {
|
|
8
|
-
if (vecA.length !== vecB.length || vecA.length === 0)
|
|
9
|
-
return 0;
|
|
10
|
-
let dot = 0, na = 0, nb = 0;
|
|
11
|
-
for (let i = 0; i < vecA.length; i++) {
|
|
12
|
-
dot += vecA[i] * vecB[i];
|
|
13
|
-
na += vecA[i] * vecA[i];
|
|
14
|
-
nb += vecB[i] * vecB[i];
|
|
15
|
-
}
|
|
16
|
-
const denom = Math.sqrt(na) * Math.sqrt(nb);
|
|
17
|
-
const similarity = denom === 0 ? 0 : dot / denom;
|
|
18
|
-
return 1 - similarity; // cosine distance
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Hash an embedding vector for quick comparison
|
|
22
|
-
*/
|
|
23
|
-
export function hashEmbedding(vec) {
|
|
24
|
-
let hash = 0;
|
|
25
|
-
for (let i = 0; i < Math.min(vec.length, 50); i++) {
|
|
26
|
-
hash = ((hash << 5) - hash + Math.round(vec[i] * 10000)) | 0;
|
|
27
|
-
}
|
|
28
|
-
return Math.abs(hash).toString(36).slice(0, 8);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Analyze semantic stability of a document given its embedding history.
|
|
32
|
-
* In practice, we compare current embedding vs initial embedding to measure total drift.
|
|
33
|
-
*/
|
|
34
|
-
export function analyzeSemanticStability(currentVec, title, documentId) {
|
|
35
|
-
// Single-point analysis (no history yet — foundation for future multi-version tracking)
|
|
36
|
-
const now = new Date().toISOString();
|
|
37
|
-
const hash = hashEmbedding(currentVec);
|
|
38
|
-
return {
|
|
39
|
-
documentId,
|
|
40
|
-
title,
|
|
41
|
-
versions: [{
|
|
42
|
-
documentId,
|
|
43
|
-
timestamp: now,
|
|
44
|
-
embeddingHash: hash,
|
|
45
|
-
drift: 0,
|
|
46
|
-
}],
|
|
47
|
-
totalDrift: 0,
|
|
48
|
-
stability: 1.0,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Compare two sets of embeddings to find documents with the most semantic drift.
|
|
53
|
-
* Useful for "what changed the most since last index?"
|
|
54
|
-
*/
|
|
55
|
-
export function findMostDrifted(previousEmbeddings, currentEmbeddings, titles, limit = 10) {
|
|
56
|
-
const drifts = [];
|
|
57
|
-
for (const [docId, currentVec] of currentEmbeddings) {
|
|
58
|
-
const prevVec = previousEmbeddings.get(docId);
|
|
59
|
-
if (!prevVec)
|
|
60
|
-
continue;
|
|
61
|
-
const drift = computeSemanticDrift(prevVec, currentVec);
|
|
62
|
-
if (drift > 0.01) { // ignore trivial changes
|
|
63
|
-
drifts.push({ documentId: docId, title: titles.get(docId) ?? docId, drift: Math.round(drift * 1000) / 1000 });
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return drifts.sort((a, b) => b.drift - a.drift).slice(0, limit);
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=semantic-versioning.js.map
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
export interface DecayState {
|
|
2
|
-
documentId: string;
|
|
3
|
-
stability: number;
|
|
4
|
-
difficulty: number;
|
|
5
|
-
lastAccess: string;
|
|
6
|
-
retrievability: number;
|
|
7
|
-
}
|
|
8
|
-
export interface AccessEvent {
|
|
9
|
-
documentId: string;
|
|
10
|
-
type: 'view' | 'search' | 'mcp_query';
|
|
11
|
-
timestamp: string;
|
|
12
|
-
}
|
|
13
|
-
export interface DecayReport {
|
|
14
|
-
totalDocuments: number;
|
|
15
|
-
decayingCount: number;
|
|
16
|
-
criticalCount: number;
|
|
17
|
-
averageR: number;
|
|
18
|
-
topDecaying: Array<DecayState & {
|
|
19
|
-
title: string;
|
|
20
|
-
daysSinceAccess: number;
|
|
21
|
-
}>;
|
|
22
|
-
clusterHealth: Array<{
|
|
23
|
-
label: string;
|
|
24
|
-
avgR: number;
|
|
25
|
-
count: number;
|
|
26
|
-
}>;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export interface CompileResult {
|
|
2
|
-
rawDocCount: number;
|
|
3
|
-
wikiArticles: string[];
|
|
4
|
-
indexFile: string;
|
|
5
|
-
concepts: string[];
|
|
6
|
-
}
|
|
7
|
-
export interface RawDocument {
|
|
8
|
-
filePath: string;
|
|
9
|
-
title: string;
|
|
10
|
-
content: string;
|
|
11
|
-
tags: string[];
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* raw/ 폴더를 스캔하여 문서 목록 반환
|
|
15
|
-
*/
|
|
16
|
-
export declare function scanRawDirectory(rawPath: string): RawDocument[];
|
|
17
|
-
/**
|
|
18
|
-
* raw 문서들에서 핵심 개념(concepts) 추출
|
|
19
|
-
*/
|
|
20
|
-
export declare function extractConcepts(docs: RawDocument[]): Map<string, string[]>;
|
|
21
|
-
/**
|
|
22
|
-
* 컴파일: raw/ → wiki/
|
|
23
|
-
* - 개념별 문서 생성
|
|
24
|
-
* - 인덱스 파일 생성
|
|
25
|
-
* - 백링크 추가
|
|
26
|
-
*/
|
|
27
|
-
export declare function compileWiki(rawPath: string, wikiPath: string, options?: {
|
|
28
|
-
force?: boolean;
|
|
29
|
-
}): CompileResult;
|
|
30
|
-
//# sourceMappingURL=wiki-compiler.d.ts.map
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
// Feature: stellavault compile — raw → wiki 컴파일
|
|
2
|
-
// raw/ 폴더의 문서를 분석하여 구조화된 wiki .md 파일 생성
|
|
3
|
-
import { readdirSync, readFileSync, writeFileSync, mkdirSync, existsSync, statSync } from 'node:fs';
|
|
4
|
-
import { join, resolve, basename, extname } from 'node:path';
|
|
5
|
-
/**
|
|
6
|
-
* raw/ 폴더를 스캔하여 문서 목록 반환
|
|
7
|
-
*/
|
|
8
|
-
export function scanRawDirectory(rawPath) {
|
|
9
|
-
if (!existsSync(rawPath))
|
|
10
|
-
return [];
|
|
11
|
-
const docs = [];
|
|
12
|
-
const files = readdirSync(rawPath, { recursive: true });
|
|
13
|
-
for (const file of files) {
|
|
14
|
-
const fullPath = join(rawPath, file);
|
|
15
|
-
if (!statSync(fullPath).isFile())
|
|
16
|
-
continue;
|
|
17
|
-
const ext = extname(file).toLowerCase();
|
|
18
|
-
if (!['.md', '.txt', '.html'].includes(ext))
|
|
19
|
-
continue;
|
|
20
|
-
const content = readFileSync(fullPath, 'utf-8');
|
|
21
|
-
const title = extractTitle(content, file);
|
|
22
|
-
const tags = extractTags(content);
|
|
23
|
-
docs.push({ filePath: file, title, content, tags });
|
|
24
|
-
}
|
|
25
|
-
return docs;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* 문서에서 제목 추출
|
|
29
|
-
*/
|
|
30
|
-
function extractTitle(content, filename) {
|
|
31
|
-
// YAML frontmatter title
|
|
32
|
-
const fmMatch = content.match(/^---[\s\S]*?title:\s*["']?(.+?)["']?\s*$/m);
|
|
33
|
-
if (fmMatch)
|
|
34
|
-
return fmMatch[1];
|
|
35
|
-
// First heading
|
|
36
|
-
const headingMatch = content.match(/^#\s+(.+)$/m);
|
|
37
|
-
if (headingMatch)
|
|
38
|
-
return headingMatch[1];
|
|
39
|
-
// Filename
|
|
40
|
-
return basename(filename, extname(filename));
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* 문서에서 태그 추출
|
|
44
|
-
*/
|
|
45
|
-
function extractTags(content) {
|
|
46
|
-
const tags = new Set();
|
|
47
|
-
// YAML tags
|
|
48
|
-
const fmMatch = content.match(/^---[\s\S]*?tags:\s*\[([^\]]*)\]/m);
|
|
49
|
-
if (fmMatch) {
|
|
50
|
-
fmMatch[1].split(',').map(t => t.trim().replace(/["']/g, '')).filter(Boolean).forEach(t => tags.add(t));
|
|
51
|
-
}
|
|
52
|
-
// Inline #tags
|
|
53
|
-
const inlineTags = content.match(/#([a-zA-Z가-힣][a-zA-Z0-9가-힣_-]*)/g) ?? [];
|
|
54
|
-
inlineTags.forEach(t => tags.add(t.slice(1)));
|
|
55
|
-
return [...tags];
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* raw 문서들에서 핵심 개념(concepts) 추출
|
|
59
|
-
*/
|
|
60
|
-
export function extractConcepts(docs) {
|
|
61
|
-
const conceptMap = new Map(); // concept → [docPaths]
|
|
62
|
-
for (const doc of docs) {
|
|
63
|
-
// 태그를 개념으로
|
|
64
|
-
for (const tag of doc.tags) {
|
|
65
|
-
const existing = conceptMap.get(tag) ?? [];
|
|
66
|
-
existing.push(doc.filePath);
|
|
67
|
-
conceptMap.set(tag, existing);
|
|
68
|
-
}
|
|
69
|
-
// 제목 키워드를 개념으로
|
|
70
|
-
const titleWords = doc.title
|
|
71
|
-
.split(/[\s\-_,]+/)
|
|
72
|
-
.filter(w => w.length > 3)
|
|
73
|
-
.map(w => w.toLowerCase());
|
|
74
|
-
for (const word of titleWords) {
|
|
75
|
-
const existing = conceptMap.get(word) ?? [];
|
|
76
|
-
existing.push(doc.filePath);
|
|
77
|
-
conceptMap.set(word, existing);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// 2개 이상 문서에서 등장하는 개념만
|
|
81
|
-
const filtered = new Map();
|
|
82
|
-
for (const [concept, docPaths] of conceptMap) {
|
|
83
|
-
if (docPaths.length >= 2) {
|
|
84
|
-
filtered.set(concept, [...new Set(docPaths)]);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return filtered;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* 컴파일: raw/ → wiki/
|
|
91
|
-
* - 개념별 문서 생성
|
|
92
|
-
* - 인덱스 파일 생성
|
|
93
|
-
* - 백링크 추가
|
|
94
|
-
*/
|
|
95
|
-
export function compileWiki(rawPath, wikiPath, options = {}) {
|
|
96
|
-
const docs = scanRawDirectory(rawPath);
|
|
97
|
-
if (docs.length === 0) {
|
|
98
|
-
return { rawDocCount: 0, wikiArticles: [], indexFile: '', concepts: [] };
|
|
99
|
-
}
|
|
100
|
-
// wiki 디렉토리 생성
|
|
101
|
-
if (!existsSync(wikiPath)) {
|
|
102
|
-
mkdirSync(wikiPath, { recursive: true });
|
|
103
|
-
}
|
|
104
|
-
const concepts = extractConcepts(docs);
|
|
105
|
-
const wikiArticles = [];
|
|
106
|
-
// 1. 각 raw 문서의 요약 문서 생성
|
|
107
|
-
for (const doc of docs) {
|
|
108
|
-
const slug = doc.title.replace(/[^a-zA-Z0-9가-힣\s]/g, '').replace(/\s+/g, '-').toLowerCase();
|
|
109
|
-
const wikiFile = `${slug}.md`;
|
|
110
|
-
const wikiFullPath = resolve(wikiPath, wikiFile);
|
|
111
|
-
// path traversal 방지
|
|
112
|
-
if (!wikiFullPath.startsWith(resolve(wikiPath)))
|
|
113
|
-
continue;
|
|
114
|
-
const relatedDocs = findRelatedDocs(doc, docs);
|
|
115
|
-
const articleContent = generateArticle(doc, relatedDocs, concepts);
|
|
116
|
-
writeFileSync(wikiFullPath, articleContent, 'utf-8');
|
|
117
|
-
wikiArticles.push(wikiFile);
|
|
118
|
-
}
|
|
119
|
-
// 2. 개념별 허브 문서 생성
|
|
120
|
-
for (const [concept, docPaths] of concepts) {
|
|
121
|
-
const slug = concept.replace(/[^a-zA-Z0-9가-힣]/g, '-').toLowerCase();
|
|
122
|
-
const hubFile = `_concept-${slug}.md`;
|
|
123
|
-
const hubFullPath = resolve(wikiPath, hubFile);
|
|
124
|
-
if (!hubFullPath.startsWith(resolve(wikiPath)))
|
|
125
|
-
continue;
|
|
126
|
-
const relatedArticles = docPaths.map(p => {
|
|
127
|
-
const doc = docs.find(d => d.filePath === p);
|
|
128
|
-
return doc?.title ?? p;
|
|
129
|
-
});
|
|
130
|
-
const hubContent = [
|
|
131
|
-
'---',
|
|
132
|
-
`title: "Concept: ${concept}"`,
|
|
133
|
-
'type: concept',
|
|
134
|
-
`date: ${new Date().toISOString()}`,
|
|
135
|
-
'---',
|
|
136
|
-
'',
|
|
137
|
-
`# ${concept}`,
|
|
138
|
-
'',
|
|
139
|
-
`This concept appears in ${relatedArticles.length} documents.`,
|
|
140
|
-
'',
|
|
141
|
-
'## Related Documents',
|
|
142
|
-
...relatedArticles.map(a => `- [[${a}]]`),
|
|
143
|
-
'',
|
|
144
|
-
'---',
|
|
145
|
-
'*Auto-generated by `stellavault compile`*',
|
|
146
|
-
].join('\n');
|
|
147
|
-
writeFileSync(hubFullPath, hubContent, 'utf-8');
|
|
148
|
-
wikiArticles.push(hubFile);
|
|
149
|
-
}
|
|
150
|
-
// 3. 인덱스 파일 생성
|
|
151
|
-
const indexContent = generateIndex(docs, concepts, wikiArticles);
|
|
152
|
-
const indexPath = resolve(wikiPath, '_index.md');
|
|
153
|
-
writeFileSync(indexPath, indexContent, 'utf-8');
|
|
154
|
-
return {
|
|
155
|
-
rawDocCount: docs.length,
|
|
156
|
-
wikiArticles,
|
|
157
|
-
indexFile: '_index.md',
|
|
158
|
-
concepts: [...concepts.keys()],
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
function findRelatedDocs(doc, allDocs) {
|
|
162
|
-
return allDocs
|
|
163
|
-
.filter(d => d.filePath !== doc.filePath)
|
|
164
|
-
.filter(d => {
|
|
165
|
-
const sharedTags = doc.tags.filter(t => d.tags.includes(t));
|
|
166
|
-
return sharedTags.length > 0;
|
|
167
|
-
})
|
|
168
|
-
.slice(0, 5);
|
|
169
|
-
}
|
|
170
|
-
function generateArticle(doc, related, concepts) {
|
|
171
|
-
const docConcepts = [...concepts.keys()].filter(c => doc.content.toLowerCase().includes(c.toLowerCase()) || doc.tags.includes(c));
|
|
172
|
-
return [
|
|
173
|
-
'---',
|
|
174
|
-
`title: "${doc.title}"`,
|
|
175
|
-
`source: "${doc.filePath}"`,
|
|
176
|
-
`date: ${new Date().toISOString()}`,
|
|
177
|
-
`tags: [${doc.tags.map(t => `"${t}"`).join(', ')}]`,
|
|
178
|
-
'type: wiki-article',
|
|
179
|
-
'---',
|
|
180
|
-
'',
|
|
181
|
-
`# ${doc.title}`,
|
|
182
|
-
'',
|
|
183
|
-
'## Summary',
|
|
184
|
-
doc.content.substring(0, 500).replace(/^#.+$/gm, '').trim() + '...',
|
|
185
|
-
'',
|
|
186
|
-
docConcepts.length > 0 ? `## Related Concepts\n${docConcepts.map(c => `- [[_concept-${c}|${c}]]`).join('\n')}` : '',
|
|
187
|
-
'',
|
|
188
|
-
related.length > 0 ? `## 관련 문서\n${related.map(r => `- [[${r.title}]]`).join('\n')}` : '',
|
|
189
|
-
'',
|
|
190
|
-
`## Source`,
|
|
191
|
-
`- Source: \`${doc.filePath}\``,
|
|
192
|
-
'',
|
|
193
|
-
'---',
|
|
194
|
-
'*Compiled by `stellavault compile`*',
|
|
195
|
-
].filter(Boolean).join('\n');
|
|
196
|
-
}
|
|
197
|
-
function generateIndex(docs, concepts, articles) {
|
|
198
|
-
return [
|
|
199
|
-
'---',
|
|
200
|
-
'title: "Wiki Index"',
|
|
201
|
-
`date: ${new Date().toISOString()}`,
|
|
202
|
-
'type: wiki-index',
|
|
203
|
-
'---',
|
|
204
|
-
'',
|
|
205
|
-
'# Wiki Index',
|
|
206
|
-
'',
|
|
207
|
-
`Compiled ${articles.length} wiki articles from ${docs.length} source documents.`,
|
|
208
|
-
'',
|
|
209
|
-
'## Concepts',
|
|
210
|
-
...[...concepts.entries()]
|
|
211
|
-
.sort((a, b) => b[1].length - a[1].length)
|
|
212
|
-
.map(([c, paths]) => `- [[_concept-${c}|${c}]] (${paths.length})`),
|
|
213
|
-
'',
|
|
214
|
-
'## Articles',
|
|
215
|
-
...docs.map(d => `- [[${d.title}]] — ${d.tags.map(t => `#${t}`).join(' ')}`),
|
|
216
|
-
'',
|
|
217
|
-
'---',
|
|
218
|
-
`*Last compiled: ${new Date().toISOString()}*`,
|
|
219
|
-
'*Generated by `stellavault compile`*',
|
|
220
|
-
].join('\n');
|
|
221
|
-
}
|
|
222
|
-
//# sourceMappingURL=wiki-compiler.js.map
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export interface YouTubeContent {
|
|
2
|
-
title: string;
|
|
3
|
-
channelName: string;
|
|
4
|
-
description: string;
|
|
5
|
-
transcript: TimedSegment[];
|
|
6
|
-
rawTranscript: string;
|
|
7
|
-
duration: string;
|
|
8
|
-
publishDate: string;
|
|
9
|
-
tags: string[];
|
|
10
|
-
url: string;
|
|
11
|
-
videoId: string;
|
|
12
|
-
viewCount: string;
|
|
13
|
-
thumbnail: string;
|
|
14
|
-
summary: string;
|
|
15
|
-
}
|
|
16
|
-
export interface TimedSegment {
|
|
17
|
-
startTime: number;
|
|
18
|
-
text: string;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* YouTube URL에서 모든 콘텐츠 추출.
|
|
22
|
-
* 반환값은 데이터만 — 노트 포맷팅은 별도.
|
|
23
|
-
*/
|
|
24
|
-
export declare function extractYouTubeContent(url: string): Promise<YouTubeContent>;
|
|
25
|
-
/**
|
|
26
|
-
* 추출된 콘텐츠 → Stellavault .md 노트 (frontmatter 포함하지 않음 — pipeline이 처리).
|
|
27
|
-
*/
|
|
28
|
-
export declare function formatYouTubeNote(content: YouTubeContent): string;
|
|
29
|
-
//# sourceMappingURL=youtube-extractor.d.ts.map
|