mdcontext 0.0.1 → 0.1.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/.changeset/README.md +28 -0
- package/.changeset/config.json +11 -0
- package/.github/workflows/ci.yml +83 -0
- package/.github/workflows/release.yml +113 -0
- package/.tldrignore +112 -0
- package/AGENTS.md +46 -0
- package/BACKLOG.md +338 -0
- package/README.md +231 -11
- package/biome.json +36 -0
- package/cspell.config.yaml +14 -0
- package/dist/chunk-KRYIFLQR.js +92 -0
- package/dist/chunk-S7E6TFX6.js +742 -0
- package/dist/chunk-VVTGZNBT.js +1519 -0
- package/dist/cli/main.d.ts +1 -0
- package/dist/cli/main.js +2015 -0
- package/dist/index.d.ts +266 -0
- package/dist/index.js +86 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +376 -0
- package/docs/019-USAGE.md +586 -0
- package/docs/020-current-implementation.md +364 -0
- package/docs/021-DOGFOODING-FINDINGS.md +175 -0
- package/docs/BACKLOG.md +80 -0
- package/docs/DESIGN.md +439 -0
- package/docs/PROJECT.md +88 -0
- package/docs/ROADMAP.md +407 -0
- package/docs/test-links.md +9 -0
- package/package.json +69 -10
- package/pnpm-workspace.yaml +5 -0
- package/research/config-analysis/01-current-implementation.md +470 -0
- package/research/config-analysis/02-strategy-recommendation.md +428 -0
- package/research/config-analysis/03-task-candidates.md +715 -0
- package/research/config-analysis/033-research-configuration-management.md +828 -0
- package/research/config-analysis/034-research-effect-cli-config.md +1504 -0
- package/research/config-analysis/04-consolidated-task-candidates.md +277 -0
- package/research/dogfood/consolidated-tool-evaluation.md +373 -0
- package/research/dogfood/strategy-a/a-synthesis.md +184 -0
- package/research/dogfood/strategy-a/a1-docs.md +226 -0
- package/research/dogfood/strategy-a/a2-amorphic.md +156 -0
- package/research/dogfood/strategy-a/a3-llm.md +164 -0
- package/research/dogfood/strategy-b/b-synthesis.md +228 -0
- package/research/dogfood/strategy-b/b1-architecture.md +207 -0
- package/research/dogfood/strategy-b/b2-gaps.md +258 -0
- package/research/dogfood/strategy-b/b3-workflows.md +250 -0
- package/research/dogfood/strategy-c/c-synthesis.md +451 -0
- package/research/dogfood/strategy-c/c1-explorer.md +192 -0
- package/research/dogfood/strategy-c/c2-diver-memory.md +145 -0
- package/research/dogfood/strategy-c/c3-diver-control.md +148 -0
- package/research/dogfood/strategy-c/c4-diver-failure.md +151 -0
- package/research/dogfood/strategy-c/c5-diver-execution.md +221 -0
- package/research/dogfood/strategy-c/c6-diver-org.md +221 -0
- package/research/effect-cli-error-handling.md +845 -0
- package/research/effect-errors-as-values.md +943 -0
- package/research/errors-task-analysis/00-consolidated-tasks.md +207 -0
- package/research/errors-task-analysis/cli-commands-analysis.md +909 -0
- package/research/errors-task-analysis/embeddings-analysis.md +709 -0
- package/research/errors-task-analysis/index-search-analysis.md +812 -0
- package/research/mdcontext-error-analysis.md +521 -0
- package/research/npm_publish/011-npm-workflow-research-agent2.md +792 -0
- package/research/npm_publish/012-npm-workflow-research-agent1.md +530 -0
- package/research/npm_publish/013-npm-workflow-research-agent3.md +722 -0
- package/research/npm_publish/014-npm-workflow-synthesis.md +556 -0
- package/research/npm_publish/031-npm-workflow-task-analysis.md +134 -0
- package/research/semantic-search/002-research-embedding-models.md +490 -0
- package/research/semantic-search/003-research-rag-alternatives.md +523 -0
- package/research/semantic-search/004-research-vector-search.md +841 -0
- package/research/semantic-search/032-research-semantic-search.md +427 -0
- package/research/task-management-2026/00-synthesis-recommendations.md +295 -0
- package/research/task-management-2026/01-ai-workflow-tools.md +416 -0
- package/research/task-management-2026/02-agent-framework-patterns.md +476 -0
- package/research/task-management-2026/03-lightweight-file-based.md +567 -0
- package/research/task-management-2026/04-established-tools-ai-features.md +541 -0
- package/research/task-management-2026/linear/01-core-features-workflow.md +771 -0
- package/research/task-management-2026/linear/02-api-integrations.md +930 -0
- package/research/task-management-2026/linear/03-ai-features.md +368 -0
- package/research/task-management-2026/linear/04-pricing-setup.md +205 -0
- package/research/task-management-2026/linear/05-usage-patterns-best-practices.md +605 -0
- package/scripts/rebuild-hnswlib.js +63 -0
- package/src/cli/argv-preprocessor.test.ts +210 -0
- package/src/cli/argv-preprocessor.ts +202 -0
- package/src/cli/cli.test.ts +430 -0
- package/src/cli/commands/backlinks.ts +54 -0
- package/src/cli/commands/context.ts +197 -0
- package/src/cli/commands/index-cmd.ts +300 -0
- package/src/cli/commands/index.ts +13 -0
- package/src/cli/commands/links.ts +52 -0
- package/src/cli/commands/search.ts +451 -0
- package/src/cli/commands/stats.ts +146 -0
- package/src/cli/commands/tree.ts +107 -0
- package/src/cli/flag-schemas.ts +275 -0
- package/src/cli/help.ts +386 -0
- package/src/cli/index.ts +9 -0
- package/src/cli/main.ts +145 -0
- package/src/cli/options.ts +31 -0
- package/src/cli/typo-suggester.test.ts +105 -0
- package/src/cli/typo-suggester.ts +130 -0
- package/src/cli/utils.ts +126 -0
- package/src/core/index.ts +1 -0
- package/src/core/types.ts +140 -0
- package/src/embeddings/index.ts +8 -0
- package/src/embeddings/openai-provider.ts +165 -0
- package/src/embeddings/semantic-search.ts +583 -0
- package/src/embeddings/types.ts +82 -0
- package/src/embeddings/vector-store.ts +299 -0
- package/src/index/index.ts +4 -0
- package/src/index/indexer.ts +446 -0
- package/src/index/storage.ts +196 -0
- package/src/index/types.ts +109 -0
- package/src/index/watcher.ts +131 -0
- package/src/index.ts +8 -0
- package/src/mcp/server.ts +483 -0
- package/src/parser/index.ts +1 -0
- package/src/parser/parser.test.ts +291 -0
- package/src/parser/parser.ts +395 -0
- package/src/parser/section-filter.ts +270 -0
- package/src/search/query-parser.test.ts +260 -0
- package/src/search/query-parser.ts +319 -0
- package/src/search/searcher.test.ts +182 -0
- package/src/search/searcher.ts +602 -0
- package/src/summarize/budget-bugs.test.ts +620 -0
- package/src/summarize/formatters.ts +419 -0
- package/src/summarize/index.ts +20 -0
- package/src/summarize/summarizer.test.ts +275 -0
- package/src/summarize/summarizer.ts +528 -0
- package/src/summarize/verify-bugs.test.ts +238 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/tokens.test.ts +142 -0
- package/src/utils/tokens.ts +186 -0
- package/tests/fixtures/cli/.mdcontext/config.json +8 -0
- package/tests/fixtures/cli/.mdcontext/indexes/documents.json +33 -0
- package/tests/fixtures/cli/.mdcontext/indexes/links.json +12 -0
- package/tests/fixtures/cli/.mdcontext/indexes/sections.json +233 -0
- package/tests/fixtures/cli/.mdcontext/vectors.bin +0 -0
- package/tests/fixtures/cli/.mdcontext/vectors.meta.json +1264 -0
- package/tests/fixtures/cli/README.md +9 -0
- package/tests/fixtures/cli/api-reference.md +11 -0
- package/tests/fixtures/cli/getting-started.md +11 -0
- package/tsconfig.json +26 -0
- package/vitest.config.ts +21 -0
- package/vitest.setup.ts +12 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildIndex,
|
|
3
|
+
createStorage,
|
|
4
|
+
indexExists
|
|
5
|
+
} from "./chunk-S7E6TFX6.js";
|
|
6
|
+
|
|
7
|
+
// src/index/watcher.ts
|
|
8
|
+
import * as path from "path";
|
|
9
|
+
import { watch } from "chokidar";
|
|
10
|
+
import { Effect } from "effect";
|
|
11
|
+
var isMarkdownFile = (filePath) => filePath.endsWith(".md") || filePath.endsWith(".mdx");
|
|
12
|
+
var watchDirectory = (rootPath, options = {}) => Effect.gen(function* () {
|
|
13
|
+
const resolvedRoot = path.resolve(rootPath);
|
|
14
|
+
const storage = createStorage(resolvedRoot);
|
|
15
|
+
const debounceMs = options.debounceMs ?? 300;
|
|
16
|
+
const exists = yield* indexExists(storage);
|
|
17
|
+
if (!exists) {
|
|
18
|
+
const result = yield* buildIndex(resolvedRoot, options);
|
|
19
|
+
options.onIndex?.({
|
|
20
|
+
documentsIndexed: result.documentsIndexed,
|
|
21
|
+
duration: result.duration
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const pendingPaths = /* @__PURE__ */ new Set();
|
|
25
|
+
let debounceTimer = null;
|
|
26
|
+
const scheduleReindex = () => {
|
|
27
|
+
if (debounceTimer) {
|
|
28
|
+
clearTimeout(debounceTimer);
|
|
29
|
+
}
|
|
30
|
+
debounceTimer = setTimeout(async () => {
|
|
31
|
+
if (pendingPaths.size === 0) return;
|
|
32
|
+
pendingPaths.clear();
|
|
33
|
+
try {
|
|
34
|
+
const result = await Effect.runPromise(
|
|
35
|
+
buildIndex(resolvedRoot, options)
|
|
36
|
+
);
|
|
37
|
+
options.onIndex?.({
|
|
38
|
+
documentsIndexed: result.documentsIndexed,
|
|
39
|
+
duration: result.duration
|
|
40
|
+
});
|
|
41
|
+
} catch (error) {
|
|
42
|
+
options.onError?.(
|
|
43
|
+
error instanceof Error ? error : new Error(String(error))
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
}, debounceMs);
|
|
47
|
+
};
|
|
48
|
+
const watcher = watch(resolvedRoot, {
|
|
49
|
+
ignored: [
|
|
50
|
+
/(^|[/\\])\../,
|
|
51
|
+
// Ignore dotfiles
|
|
52
|
+
"**/node_modules/**"
|
|
53
|
+
],
|
|
54
|
+
persistent: true,
|
|
55
|
+
ignoreInitial: true
|
|
56
|
+
});
|
|
57
|
+
watcher.on("add", (filePath) => {
|
|
58
|
+
if (isMarkdownFile(filePath)) {
|
|
59
|
+
pendingPaths.add(filePath);
|
|
60
|
+
scheduleReindex();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
watcher.on("change", (filePath) => {
|
|
64
|
+
if (isMarkdownFile(filePath)) {
|
|
65
|
+
pendingPaths.add(filePath);
|
|
66
|
+
scheduleReindex();
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
watcher.on("unlink", (filePath) => {
|
|
70
|
+
if (isMarkdownFile(filePath)) {
|
|
71
|
+
pendingPaths.add(filePath);
|
|
72
|
+
scheduleReindex();
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
watcher.on("error", (error) => {
|
|
76
|
+
options.onError?.(
|
|
77
|
+
error instanceof Error ? error : new Error(String(error))
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
stop: () => {
|
|
82
|
+
if (debounceTimer) {
|
|
83
|
+
clearTimeout(debounceTimer);
|
|
84
|
+
}
|
|
85
|
+
watcher.close();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
export {
|
|
91
|
+
watchDirectory
|
|
92
|
+
};
|