@cdoing/core 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/dist/agents/coordinator.d.ts +114 -0
- package/dist/agents/coordinator.d.ts.map +1 -0
- package/dist/agents/coordinator.js +158 -0
- package/dist/agents/coordinator.js.map +1 -0
- package/dist/context-providers/clipboard.d.ts +13 -0
- package/dist/context-providers/clipboard.d.ts.map +1 -0
- package/dist/context-providers/clipboard.js +53 -0
- package/dist/context-providers/clipboard.js.map +1 -0
- package/dist/context-providers/codebase.d.ts +46 -0
- package/dist/context-providers/codebase.d.ts.map +1 -0
- package/dist/context-providers/codebase.js +273 -0
- package/dist/context-providers/codebase.js.map +1 -0
- package/dist/context-providers/diff.d.ts +18 -0
- package/dist/context-providers/diff.d.ts.map +1 -0
- package/dist/context-providers/diff.js +63 -0
- package/dist/context-providers/diff.js.map +1 -0
- package/dist/context-providers/docs.d.ts +21 -0
- package/dist/context-providers/docs.d.ts.map +1 -0
- package/dist/context-providers/docs.js +180 -0
- package/dist/context-providers/docs.js.map +1 -0
- package/dist/context-providers/file-include.d.ts +13 -0
- package/dist/context-providers/file-include.d.ts.map +1 -0
- package/dist/context-providers/file-include.js +82 -0
- package/dist/context-providers/file-include.js.map +1 -0
- package/dist/context-providers/folder.d.ts +19 -0
- package/dist/context-providers/folder.d.ts.map +1 -0
- package/dist/context-providers/folder.js +130 -0
- package/dist/context-providers/folder.js.map +1 -0
- package/dist/context-providers/git.d.ts +19 -0
- package/dist/context-providers/git.d.ts.map +1 -0
- package/dist/context-providers/git.js +74 -0
- package/dist/context-providers/git.js.map +1 -0
- package/dist/context-providers/index.d.ts +26 -0
- package/dist/context-providers/index.d.ts.map +1 -0
- package/dist/context-providers/index.js +37 -0
- package/dist/context-providers/index.js.map +1 -0
- package/dist/context-providers/open-files.d.ts +25 -0
- package/dist/context-providers/open-files.d.ts.map +1 -0
- package/dist/context-providers/open-files.js +134 -0
- package/dist/context-providers/open-files.js.map +1 -0
- package/dist/context-providers/problems.d.ts +24 -0
- package/dist/context-providers/problems.d.ts.map +1 -0
- package/dist/context-providers/problems.js +97 -0
- package/dist/context-providers/problems.js.map +1 -0
- package/dist/context-providers/registry.d.ts +61 -0
- package/dist/context-providers/registry.d.ts.map +1 -0
- package/dist/context-providers/registry.js +92 -0
- package/dist/context-providers/registry.js.map +1 -0
- package/dist/context-providers/terminal.d.ts +25 -0
- package/dist/context-providers/terminal.d.ts.map +1 -0
- package/dist/context-providers/terminal.js +55 -0
- package/dist/context-providers/terminal.js.map +1 -0
- package/dist/context-providers/tree.d.ts +29 -0
- package/dist/context-providers/tree.d.ts.map +1 -0
- package/dist/context-providers/tree.js +172 -0
- package/dist/context-providers/tree.js.map +1 -0
- package/dist/context-providers/types.d.ts +72 -0
- package/dist/context-providers/types.d.ts.map +1 -0
- package/dist/context-providers/types.js +10 -0
- package/dist/context-providers/types.js.map +1 -0
- package/dist/context-providers/url.d.ts +27 -0
- package/dist/context-providers/url.d.ts.map +1 -0
- package/dist/context-providers/url.js +131 -0
- package/dist/context-providers/url.js.map +1 -0
- package/dist/effort/index.d.ts +78 -0
- package/dist/effort/index.d.ts.map +1 -0
- package/dist/effort/index.js +146 -0
- package/dist/effort/index.js.map +1 -0
- package/dist/hooks/index.d.ts +47 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +151 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +152 -0
- package/dist/index.js.map +1 -0
- package/dist/indexing/chunker.d.ts +25 -0
- package/dist/indexing/chunker.d.ts.map +1 -0
- package/dist/indexing/chunker.js +217 -0
- package/dist/indexing/chunker.js.map +1 -0
- package/dist/indexing/database.d.ts +49 -0
- package/dist/indexing/database.d.ts.map +1 -0
- package/dist/indexing/database.js +287 -0
- package/dist/indexing/database.js.map +1 -0
- package/dist/indexing/index.d.ts +9 -0
- package/dist/indexing/index.d.ts.map +1 -0
- package/dist/indexing/index.js +13 -0
- package/dist/indexing/index.js.map +1 -0
- package/dist/indexing/indexer.d.ts +63 -0
- package/dist/indexing/indexer.d.ts.map +1 -0
- package/dist/indexing/indexer.js +352 -0
- package/dist/indexing/indexer.js.map +1 -0
- package/dist/indexing/recent-edits-cache.d.ts +77 -0
- package/dist/indexing/recent-edits-cache.d.ts.map +1 -0
- package/dist/indexing/recent-edits-cache.js +123 -0
- package/dist/indexing/recent-edits-cache.js.map +1 -0
- package/dist/indexing/types.d.ts +39 -0
- package/dist/indexing/types.d.ts.map +1 -0
- package/dist/indexing/types.js +6 -0
- package/dist/indexing/types.js.map +1 -0
- package/dist/mcp/index.d.ts +33 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +37 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +123 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +331 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/oauth.d.ts +33 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +312 -0
- package/dist/oauth.js.map +1 -0
- package/dist/permissions/index.d.ts +216 -0
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/index.js +938 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/plan/index.d.ts +20 -0
- package/dist/plan/index.d.ts.map +1 -0
- package/dist/plan/index.js +24 -0
- package/dist/plan/index.js.map +1 -0
- package/dist/plan/manager.d.ts +101 -0
- package/dist/plan/manager.d.ts.map +1 -0
- package/dist/plan/manager.js +170 -0
- package/dist/plan/manager.js.map +1 -0
- package/dist/rules/index.d.ts +28 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +31 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/manager.d.ts +77 -0
- package/dist/rules/manager.d.ts.map +1 -0
- package/dist/rules/manager.js +279 -0
- package/dist/rules/manager.js.map +1 -0
- package/dist/rules/types.d.ts +34 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +9 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/sandbox/filesystem.d.ts +20 -0
- package/dist/sandbox/filesystem.d.ts.map +1 -0
- package/dist/sandbox/filesystem.js +141 -0
- package/dist/sandbox/filesystem.js.map +1 -0
- package/dist/sandbox/index.d.ts +4 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +8 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/manager.d.ts +47 -0
- package/dist/sandbox/manager.d.ts.map +1 -0
- package/dist/sandbox/manager.js +220 -0
- package/dist/sandbox/manager.js.map +1 -0
- package/dist/sandbox/network.d.ts +14 -0
- package/dist/sandbox/network.d.ts.map +1 -0
- package/dist/sandbox/network.js +87 -0
- package/dist/sandbox/network.js.map +1 -0
- package/dist/sandbox/types.d.ts +42 -0
- package/dist/sandbox/types.d.ts.map +1 -0
- package/dist/sandbox/types.js +25 -0
- package/dist/sandbox/types.js.map +1 -0
- package/dist/tools/ast-edit.d.ts +57 -0
- package/dist/tools/ast-edit.d.ts.map +1 -0
- package/dist/tools/ast-edit.js +443 -0
- package/dist/tools/ast-edit.js.map +1 -0
- package/dist/tools/code-verify.d.ts +8 -0
- package/dist/tools/code-verify.d.ts.map +1 -0
- package/dist/tools/code-verify.js +159 -0
- package/dist/tools/code-verify.js.map +1 -0
- package/dist/tools/codebase-search.d.ts +17 -0
- package/dist/tools/codebase-search.d.ts.map +1 -0
- package/dist/tools/codebase-search.js +104 -0
- package/dist/tools/codebase-search.js.map +1 -0
- package/dist/tools/file-delete.d.ts +26 -0
- package/dist/tools/file-delete.d.ts.map +1 -0
- package/dist/tools/file-delete.js +179 -0
- package/dist/tools/file-delete.js.map +1 -0
- package/dist/tools/file-edit.d.ts +10 -0
- package/dist/tools/file-edit.d.ts.map +1 -0
- package/dist/tools/file-edit.js +138 -0
- package/dist/tools/file-edit.js.map +1 -0
- package/dist/tools/file-read.d.ts +12 -0
- package/dist/tools/file-read.d.ts.map +1 -0
- package/dist/tools/file-read.js +211 -0
- package/dist/tools/file-read.js.map +1 -0
- package/dist/tools/file-run.d.ts +10 -0
- package/dist/tools/file-run.d.ts.map +1 -0
- package/dist/tools/file-run.js +179 -0
- package/dist/tools/file-run.js.map +1 -0
- package/dist/tools/file-write.d.ts +10 -0
- package/dist/tools/file-write.d.ts.map +1 -0
- package/dist/tools/file-write.js +134 -0
- package/dist/tools/file-write.js.map +1 -0
- package/dist/tools/glob-search.d.ts +8 -0
- package/dist/tools/glob-search.d.ts.map +1 -0
- package/dist/tools/glob-search.js +108 -0
- package/dist/tools/glob-search.js.map +1 -0
- package/dist/tools/grep-search.d.ts +8 -0
- package/dist/tools/grep-search.d.ts.map +1 -0
- package/dist/tools/grep-search.js +139 -0
- package/dist/tools/grep-search.js.map +1 -0
- package/dist/tools/list-dir.d.ts +16 -0
- package/dist/tools/list-dir.d.ts.map +1 -0
- package/dist/tools/list-dir.js +183 -0
- package/dist/tools/list-dir.js.map +1 -0
- package/dist/tools/multi-edit.d.ts +16 -0
- package/dist/tools/multi-edit.d.ts.map +1 -0
- package/dist/tools/multi-edit.js +163 -0
- package/dist/tools/multi-edit.js.map +1 -0
- package/dist/tools/notebook-edit.d.ts +31 -0
- package/dist/tools/notebook-edit.d.ts.map +1 -0
- package/dist/tools/notebook-edit.js +321 -0
- package/dist/tools/notebook-edit.js.map +1 -0
- package/dist/tools/registry.d.ts +16 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +41 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/shell-exec.d.ts +12 -0
- package/dist/tools/shell-exec.d.ts.map +1 -0
- package/dist/tools/shell-exec.js +261 -0
- package/dist/tools/shell-exec.js.map +1 -0
- package/dist/tools/sub-agent-manager.d.ts +57 -0
- package/dist/tools/sub-agent-manager.d.ts.map +1 -0
- package/dist/tools/sub-agent-manager.js +153 -0
- package/dist/tools/sub-agent-manager.js.map +1 -0
- package/dist/tools/sub-agent-status.d.ts +12 -0
- package/dist/tools/sub-agent-status.d.ts.map +1 -0
- package/dist/tools/sub-agent-status.js +59 -0
- package/dist/tools/sub-agent-status.js.map +1 -0
- package/dist/tools/sub-agent-terminate.d.ts +12 -0
- package/dist/tools/sub-agent-terminate.d.ts.map +1 -0
- package/dist/tools/sub-agent-terminate.js +55 -0
- package/dist/tools/sub-agent-terminate.js.map +1 -0
- package/dist/tools/sub-agent.d.ts +34 -0
- package/dist/tools/sub-agent.d.ts.map +1 -0
- package/dist/tools/sub-agent.js +140 -0
- package/dist/tools/sub-agent.js.map +1 -0
- package/dist/tools/system-info.d.ts +24 -0
- package/dist/tools/system-info.d.ts.map +1 -0
- package/dist/tools/system-info.js +220 -0
- package/dist/tools/system-info.js.map +1 -0
- package/dist/tools/todo.d.ts +16 -0
- package/dist/tools/todo.d.ts.map +1 -0
- package/dist/tools/todo.js +144 -0
- package/dist/tools/todo.js.map +1 -0
- package/dist/tools/types.d.ts +20 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +3 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/view-diff.d.ts +11 -0
- package/dist/tools/view-diff.d.ts.map +1 -0
- package/dist/tools/view-diff.js +88 -0
- package/dist/tools/view-diff.js.map +1 -0
- package/dist/tools/view-repo-map.d.ts +18 -0
- package/dist/tools/view-repo-map.d.ts.map +1 -0
- package/dist/tools/view-repo-map.js +245 -0
- package/dist/tools/view-repo-map.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +13 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +106 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +10 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +106 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/utils/gitignore.d.ts +10 -0
- package/dist/utils/gitignore.d.ts.map +1 -0
- package/dist/utils/gitignore.js +104 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/lazy-apply.d.ts +45 -0
- package/dist/utils/lazy-apply.d.ts.map +1 -0
- package/dist/utils/lazy-apply.js +164 -0
- package/dist/utils/lazy-apply.js.map +1 -0
- package/dist/utils/memory.d.ts +36 -0
- package/dist/utils/memory.d.ts.map +1 -0
- package/dist/utils/memory.js +136 -0
- package/dist/utils/memory.js.map +1 -0
- package/dist/utils/path-matching.d.ts +24 -0
- package/dist/utils/path-matching.d.ts.map +1 -0
- package/dist/utils/path-matching.js +116 -0
- package/dist/utils/path-matching.js.map +1 -0
- package/dist/utils/path-safety.d.ts +13 -0
- package/dist/utils/path-safety.d.ts.map +1 -0
- package/dist/utils/path-safety.js +54 -0
- package/dist/utils/path-safety.js.map +1 -0
- package/dist/utils/project-config.d.ts +18 -0
- package/dist/utils/project-config.d.ts.map +1 -0
- package/dist/utils/project-config.js +76 -0
- package/dist/utils/project-config.js.map +1 -0
- package/dist/utils/search-match.d.ts +63 -0
- package/dist/utils/search-match.d.ts.map +1 -0
- package/dist/utils/search-match.js +426 -0
- package/dist/utils/search-match.js.map +1 -0
- package/dist/utils/shell-paths.d.ts +17 -0
- package/dist/utils/shell-paths.d.ts.map +1 -0
- package/dist/utils/shell-paths.js +107 -0
- package/dist/utils/shell-paths.js.map +1 -0
- package/dist/utils/streaming-diff.d.ts +45 -0
- package/dist/utils/streaming-diff.d.ts.map +1 -0
- package/dist/utils/streaming-diff.js +230 -0
- package/dist/utils/streaming-diff.js.map +1 -0
- package/dist/utils/todo.d.ts +47 -0
- package/dist/utils/todo.d.ts.map +1 -0
- package/dist/utils/todo.js +102 -0
- package/dist/utils/todo.js.map +1 -0
- package/package.json +23 -0
- package/src/agents/coordinator.ts +240 -0
- package/src/context-providers/clipboard.ts +48 -0
- package/src/context-providers/codebase.ts +274 -0
- package/src/context-providers/diff.ts +66 -0
- package/src/context-providers/docs.ts +160 -0
- package/src/context-providers/file-include.ts +54 -0
- package/src/context-providers/folder.ts +106 -0
- package/src/context-providers/git.ts +72 -0
- package/src/context-providers/index.ts +26 -0
- package/src/context-providers/open-files.ts +113 -0
- package/src/context-providers/problems.ts +100 -0
- package/src/context-providers/registry.ts +99 -0
- package/src/context-providers/terminal.ts +58 -0
- package/src/context-providers/tree.ts +161 -0
- package/src/context-providers/types.ts +84 -0
- package/src/context-providers/url.ts +138 -0
- package/src/effort/index.ts +177 -0
- package/src/hooks/index.ts +148 -0
- package/src/index.ts +114 -0
- package/src/indexing/README.md +267 -0
- package/src/indexing/chunker.ts +206 -0
- package/src/indexing/database.ts +299 -0
- package/src/indexing/index.ts +15 -0
- package/src/indexing/indexer.ts +383 -0
- package/src/indexing/recent-edits-cache.ts +150 -0
- package/src/indexing/types.ts +44 -0
- package/src/mcp/index.ts +33 -0
- package/src/mcp/manager.ts +385 -0
- package/src/oauth.ts +330 -0
- package/src/permissions/index.ts +1011 -0
- package/src/plan/index.ts +20 -0
- package/src/plan/manager.ts +233 -0
- package/src/rules/index.ts +28 -0
- package/src/rules/manager.ts +276 -0
- package/src/rules/types.ts +40 -0
- package/src/sandbox/filesystem.ts +135 -0
- package/src/sandbox/index.ts +9 -0
- package/src/sandbox/manager.ts +213 -0
- package/src/sandbox/network.ts +101 -0
- package/src/sandbox/types.ts +63 -0
- package/src/tools/ast-edit.ts +493 -0
- package/src/tools/code-verify.ts +143 -0
- package/src/tools/codebase-search.ts +117 -0
- package/src/tools/file-delete.ts +155 -0
- package/src/tools/file-edit.ts +115 -0
- package/src/tools/file-read.ts +195 -0
- package/src/tools/file-run.ts +158 -0
- package/src/tools/file-write.ts +104 -0
- package/src/tools/glob-search.ts +80 -0
- package/src/tools/grep-search.ts +120 -0
- package/src/tools/list-dir.ts +172 -0
- package/src/tools/multi-edit.ts +138 -0
- package/src/tools/notebook-edit.ts +342 -0
- package/src/tools/registry.ts +43 -0
- package/src/tools/shell-exec.ts +251 -0
- package/src/tools/sub-agent-manager.ts +183 -0
- package/src/tools/sub-agent-status.ts +67 -0
- package/src/tools/sub-agent-terminate.ts +62 -0
- package/src/tools/sub-agent.ts +162 -0
- package/src/tools/system-info.ts +248 -0
- package/src/tools/todo.ts +149 -0
- package/src/tools/types.ts +21 -0
- package/src/tools/view-diff.ts +99 -0
- package/src/tools/view-repo-map.ts +249 -0
- package/src/tools/web-fetch.ts +118 -0
- package/src/tools/web-search.ts +129 -0
- package/src/utils/gitignore.ts +73 -0
- package/src/utils/lazy-apply.ts +189 -0
- package/src/utils/memory.ts +124 -0
- package/src/utils/path-matching.ts +84 -0
- package/src/utils/path-safety.ts +19 -0
- package/src/utils/project-config.ts +41 -0
- package/src/utils/search-match.ts +495 -0
- package/src/utils/shell-paths.ts +79 -0
- package/src/utils/streaming-diff.ts +260 -0
- package/src/utils/todo.ts +115 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Codebase Context Provider — @codebase
|
|
4
|
+
*
|
|
5
|
+
* Semantic search across the entire repository.
|
|
6
|
+
* Finds the most relevant files/code for a given query.
|
|
7
|
+
*
|
|
8
|
+
* How it works:
|
|
9
|
+
* 1. User types @codebase followed by a search query
|
|
10
|
+
* 2. We search file names and content using glob + grep
|
|
11
|
+
* 3. Rank results by relevance (filename match > content match)
|
|
12
|
+
* 4. Return the top N most relevant code snippets
|
|
13
|
+
*
|
|
14
|
+
* Learning note: This is a text-based search approach (not embedding-based).
|
|
15
|
+
* For true semantic search, you'd want vector embeddings + a vector DB.
|
|
16
|
+
* But text search with smart ranking gets you 80% of the way there
|
|
17
|
+
* and works offline without any setup.
|
|
18
|
+
*
|
|
19
|
+
* Future enhancement: Add optional embedding-based indexing for
|
|
20
|
+
* projects that configure it.
|
|
21
|
+
*/
|
|
22
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
25
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
26
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
27
|
+
}
|
|
28
|
+
Object.defineProperty(o, k2, desc);
|
|
29
|
+
}) : (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
o[k2] = m[k];
|
|
32
|
+
}));
|
|
33
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
34
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
35
|
+
}) : function(o, v) {
|
|
36
|
+
o["default"] = v;
|
|
37
|
+
});
|
|
38
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
39
|
+
var ownKeys = function(o) {
|
|
40
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
41
|
+
var ar = [];
|
|
42
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
43
|
+
return ar;
|
|
44
|
+
};
|
|
45
|
+
return ownKeys(o);
|
|
46
|
+
};
|
|
47
|
+
return function (mod) {
|
|
48
|
+
if (mod && mod.__esModule) return mod;
|
|
49
|
+
var result = {};
|
|
50
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
51
|
+
__setModuleDefault(result, mod);
|
|
52
|
+
return result;
|
|
53
|
+
};
|
|
54
|
+
})();
|
|
55
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
|
+
exports.CodebaseContextProvider = void 0;
|
|
57
|
+
const fs = __importStar(require("fs"));
|
|
58
|
+
const path = __importStar(require("path"));
|
|
59
|
+
const child_process_1 = require("child_process");
|
|
60
|
+
/** Max files to include in results */
|
|
61
|
+
const MAX_RESULTS = 10;
|
|
62
|
+
/** Max chars per file snippet */
|
|
63
|
+
const SNIPPET_LIMIT = 2000;
|
|
64
|
+
/** Total max chars for all results */
|
|
65
|
+
const TOTAL_LIMIT = 20000;
|
|
66
|
+
/** File extensions to search (common code files) */
|
|
67
|
+
const CODE_EXTENSIONS = new Set([
|
|
68
|
+
".ts", ".tsx", ".js", ".jsx", ".py", ".rs", ".go", ".java",
|
|
69
|
+
".rb", ".php", ".cs", ".cpp", ".c", ".h", ".hpp", ".swift",
|
|
70
|
+
".kt", ".scala", ".r", ".html", ".css", ".scss", ".less",
|
|
71
|
+
".json", ".yaml", ".yml", ".toml", ".xml", ".sql", ".sh",
|
|
72
|
+
".bash", ".zsh", ".md", ".mdx", ".txt", ".vue", ".svelte",
|
|
73
|
+
]);
|
|
74
|
+
/** Directories to skip during search */
|
|
75
|
+
const SKIP_DIRS = new Set([
|
|
76
|
+
"node_modules", ".git", "dist", "build", ".next", ".nuxt",
|
|
77
|
+
"__pycache__", ".cache", ".turbo", "coverage", "venv",
|
|
78
|
+
".venv", ".tox", "target", "vendor",
|
|
79
|
+
]);
|
|
80
|
+
class CodebaseContextProvider {
|
|
81
|
+
id = "codebase";
|
|
82
|
+
trigger = "@codebase";
|
|
83
|
+
description = "Search the entire codebase for relevant code";
|
|
84
|
+
requiresArg = true;
|
|
85
|
+
async resolve(arg, options) {
|
|
86
|
+
const query = arg?.trim();
|
|
87
|
+
if (!query) {
|
|
88
|
+
return {
|
|
89
|
+
label: "Codebase Search",
|
|
90
|
+
content: "[Please provide a search query after @codebase, e.g.: @codebase authentication flow]",
|
|
91
|
+
metadata: { source: "codebase" },
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const workingDir = options?.workingDir || process.cwd();
|
|
95
|
+
// Search using ripgrep if available, fall back to simple search
|
|
96
|
+
const results = await this.search(query, workingDir);
|
|
97
|
+
if (results.length === 0) {
|
|
98
|
+
return {
|
|
99
|
+
label: `Codebase: "${query}"`,
|
|
100
|
+
content: `[No results found for "${query}" in the codebase.]`,
|
|
101
|
+
metadata: { source: "codebase", itemCount: 0 },
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Format results with code snippets
|
|
105
|
+
const sections = [];
|
|
106
|
+
let totalChars = 0;
|
|
107
|
+
for (const result of results.slice(0, MAX_RESULTS)) {
|
|
108
|
+
if (totalChars >= TOTAL_LIMIT) {
|
|
109
|
+
sections.push(`\n... [more results omitted]`);
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
const relPath = path.relative(workingDir, result.file);
|
|
113
|
+
const ext = path.extname(result.file).slice(1);
|
|
114
|
+
const lang = ext || "text";
|
|
115
|
+
let snippet = result.snippet;
|
|
116
|
+
if (snippet.length > SNIPPET_LIMIT) {
|
|
117
|
+
snippet = snippet.substring(0, SNIPPET_LIMIT) + "\n... [truncated]";
|
|
118
|
+
}
|
|
119
|
+
sections.push(`### ${relPath}${result.line ? `:${result.line}` : ""}\n\n\`\`\`${lang}\n${snippet}\n\`\`\``);
|
|
120
|
+
totalChars += snippet.length;
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
label: `Codebase: "${query}" (${results.length} results)`,
|
|
124
|
+
content: `## Codebase Search: "${query}"\n\n${sections.join("\n\n")}`,
|
|
125
|
+
metadata: {
|
|
126
|
+
source: "codebase",
|
|
127
|
+
itemCount: results.length,
|
|
128
|
+
truncated: results.length > MAX_RESULTS,
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Search the codebase for a query string.
|
|
134
|
+
* Uses ripgrep (rg) if available for fast searching,
|
|
135
|
+
* otherwise falls back to a simple Node.js file walker.
|
|
136
|
+
*/
|
|
137
|
+
async search(query, workingDir) {
|
|
138
|
+
// Try ripgrep first (much faster for large codebases)
|
|
139
|
+
try {
|
|
140
|
+
return this.searchWithRipgrep(query, workingDir);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// Fall back to simple search
|
|
144
|
+
return this.searchSimple(query, workingDir);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Fast search using ripgrep (rg).
|
|
149
|
+
* Learning note: ripgrep respects .gitignore by default,
|
|
150
|
+
* which is exactly what we want.
|
|
151
|
+
*/
|
|
152
|
+
searchWithRipgrep(query, workingDir) {
|
|
153
|
+
// Use ripgrep with context lines around matches
|
|
154
|
+
const escapedQuery = query.replace(/['"\\]/g, "\\$&");
|
|
155
|
+
const output = (0, child_process_1.execSync)(`rg --ignore-case --max-count=3 --context=3 --with-filename --line-number "${escapedQuery}" .`, {
|
|
156
|
+
cwd: workingDir,
|
|
157
|
+
encoding: "utf-8",
|
|
158
|
+
timeout: 10000,
|
|
159
|
+
maxBuffer: 5 * 1024 * 1024,
|
|
160
|
+
});
|
|
161
|
+
// Parse ripgrep output into structured results
|
|
162
|
+
const results = new Map();
|
|
163
|
+
const lines = output.split("\n");
|
|
164
|
+
let currentFile = "";
|
|
165
|
+
let currentSnippet = "";
|
|
166
|
+
let currentLine;
|
|
167
|
+
for (const line of lines) {
|
|
168
|
+
// ripgrep format: "file:line:content" or "file-line-content" (context)
|
|
169
|
+
const match = line.match(/^(.+?)[:-](\d+)[:-](.*)$/);
|
|
170
|
+
if (match) {
|
|
171
|
+
const [, file, lineNum, content] = match;
|
|
172
|
+
const absFile = path.resolve(workingDir, file);
|
|
173
|
+
if (file !== currentFile) {
|
|
174
|
+
// Save previous file's results
|
|
175
|
+
if (currentFile && currentSnippet) {
|
|
176
|
+
const existing = results.get(currentFile);
|
|
177
|
+
if (!existing || currentSnippet.length > existing.snippet.length) {
|
|
178
|
+
results.set(currentFile, {
|
|
179
|
+
file: path.resolve(workingDir, currentFile),
|
|
180
|
+
line: currentLine,
|
|
181
|
+
snippet: currentSnippet.trim(),
|
|
182
|
+
score: 1,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
currentFile = file;
|
|
187
|
+
currentSnippet = "";
|
|
188
|
+
currentLine = parseInt(lineNum, 10);
|
|
189
|
+
}
|
|
190
|
+
currentSnippet += content + "\n";
|
|
191
|
+
}
|
|
192
|
+
else if (line === "--") {
|
|
193
|
+
// Separator between matches in the same file
|
|
194
|
+
currentSnippet += "...\n";
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Don't forget the last file
|
|
198
|
+
if (currentFile && currentSnippet) {
|
|
199
|
+
results.set(currentFile, {
|
|
200
|
+
file: path.resolve(workingDir, currentFile),
|
|
201
|
+
line: currentLine,
|
|
202
|
+
snippet: currentSnippet.trim(),
|
|
203
|
+
score: 1,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return Array.from(results.values());
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Simple fallback search using Node.js file system.
|
|
210
|
+
* Slower but works everywhere without external dependencies.
|
|
211
|
+
*/
|
|
212
|
+
searchSimple(query, workingDir) {
|
|
213
|
+
const results = [];
|
|
214
|
+
const queryLower = query.toLowerCase();
|
|
215
|
+
// Walk directory tree
|
|
216
|
+
const walk = (dir, depth) => {
|
|
217
|
+
if (depth > 5 || results.length >= MAX_RESULTS * 2)
|
|
218
|
+
return;
|
|
219
|
+
let entries;
|
|
220
|
+
try {
|
|
221
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
for (const entry of entries) {
|
|
227
|
+
if (entry.name.startsWith(".") && entry.name !== ".cdoing")
|
|
228
|
+
continue;
|
|
229
|
+
if (SKIP_DIRS.has(entry.name))
|
|
230
|
+
continue;
|
|
231
|
+
const fullPath = path.join(dir, entry.name);
|
|
232
|
+
if (entry.isDirectory()) {
|
|
233
|
+
walk(fullPath, depth + 1);
|
|
234
|
+
}
|
|
235
|
+
else if (entry.isFile()) {
|
|
236
|
+
const ext = path.extname(entry.name);
|
|
237
|
+
if (!CODE_EXTENSIONS.has(ext))
|
|
238
|
+
continue;
|
|
239
|
+
try {
|
|
240
|
+
const content = fs.readFileSync(fullPath, "utf-8");
|
|
241
|
+
const contentLower = content.toLowerCase();
|
|
242
|
+
// Check if query appears in content
|
|
243
|
+
const index = contentLower.indexOf(queryLower);
|
|
244
|
+
if (index >= 0) {
|
|
245
|
+
// Extract a snippet around the match
|
|
246
|
+
const linesBefore = content.substring(0, index).split("\n");
|
|
247
|
+
const lineNum = linesBefore.length;
|
|
248
|
+
const allLines = content.split("\n");
|
|
249
|
+
const start = Math.max(0, lineNum - 4);
|
|
250
|
+
const end = Math.min(allLines.length, lineNum + 4);
|
|
251
|
+
const snippet = allLines.slice(start, end).join("\n");
|
|
252
|
+
// Score based on match quality
|
|
253
|
+
let score = 1;
|
|
254
|
+
if (entry.name.toLowerCase().includes(queryLower))
|
|
255
|
+
score += 5; // Filename match
|
|
256
|
+
if (content.toLowerCase().split(queryLower).length > 2)
|
|
257
|
+
score += 2; // Multiple matches
|
|
258
|
+
results.push({ file: fullPath, line: lineNum, snippet, score });
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
// Skip unreadable files
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
walk(workingDir, 0);
|
|
268
|
+
// Sort by score (highest first) and return top results
|
|
269
|
+
return results.sort((a, b) => b.score - a.score).slice(0, MAX_RESULTS);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
exports.CodebaseContextProvider = CodebaseContextProvider;
|
|
273
|
+
//# sourceMappingURL=codebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codebase.js","sourceRoot":"","sources":["../../src/context-providers/codebase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff Context Provider — @diff
|
|
3
|
+
*
|
|
4
|
+
* Provides current working changes as context.
|
|
5
|
+
* Usage:
|
|
6
|
+
* @diff — unstaged working changes
|
|
7
|
+
* @diff staged — staged changes
|
|
8
|
+
* @diff main — diff against main branch
|
|
9
|
+
*/
|
|
10
|
+
import type { ContextProvider, ContextResult, ContextResolveOptions } from "./types";
|
|
11
|
+
export declare class DiffContextProvider implements ContextProvider {
|
|
12
|
+
id: string;
|
|
13
|
+
trigger: string;
|
|
14
|
+
description: string;
|
|
15
|
+
requiresArg: boolean;
|
|
16
|
+
resolve(arg?: string, options?: ContextResolveOptions): Promise<ContextResult>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/context-providers/diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAIrF,qBAAa,mBAAoB,YAAW,eAAe;IACzD,EAAE,SAAU;IACZ,OAAO,SAAW;IAClB,WAAW,SAA8D;IACzE,WAAW,UAAS;IAEd,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;CA4CrF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Diff Context Provider — @diff
|
|
4
|
+
*
|
|
5
|
+
* Provides current working changes as context.
|
|
6
|
+
* Usage:
|
|
7
|
+
* @diff — unstaged working changes
|
|
8
|
+
* @diff staged — staged changes
|
|
9
|
+
* @diff main — diff against main branch
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DiffContextProvider = void 0;
|
|
13
|
+
const child_process_1 = require("child_process");
|
|
14
|
+
const MAX_DIFF_CHARS = 30000;
|
|
15
|
+
class DiffContextProvider {
|
|
16
|
+
id = "diff";
|
|
17
|
+
trigger = "@diff";
|
|
18
|
+
description = "Current git diff (working changes, staged, or vs branch)";
|
|
19
|
+
requiresArg = false;
|
|
20
|
+
async resolve(arg, options) {
|
|
21
|
+
const workingDir = options?.workingDir || process.cwd();
|
|
22
|
+
const target = (arg || "").trim();
|
|
23
|
+
let command = "git diff";
|
|
24
|
+
let label = "Working changes";
|
|
25
|
+
if (target === "staged") {
|
|
26
|
+
command = "git diff --cached";
|
|
27
|
+
label = "Staged changes";
|
|
28
|
+
}
|
|
29
|
+
else if (target) {
|
|
30
|
+
// Sanitize
|
|
31
|
+
if (!/^[a-zA-Z0-9_.\/~^@{}\-]+$/.test(target)) {
|
|
32
|
+
return { label: "Diff", content: `Invalid git ref: "${target}"` };
|
|
33
|
+
}
|
|
34
|
+
command = `git diff ${target}`;
|
|
35
|
+
label = `Diff vs ${target}`;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const diff = await new Promise((resolve, reject) => {
|
|
39
|
+
(0, child_process_1.exec)(command, { cwd: workingDir, timeout: 15000, maxBuffer: 5 * 1024 * 1024 }, (err, stdout, stderr) => {
|
|
40
|
+
if (err && !stdout)
|
|
41
|
+
return reject(new Error(stderr?.trim() || err.message));
|
|
42
|
+
resolve(stdout);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
const trimmedDiff = diff.trim();
|
|
46
|
+
if (!trimmedDiff) {
|
|
47
|
+
return { label, content: `## ${label}\nNo changes.` };
|
|
48
|
+
}
|
|
49
|
+
const truncated = trimmedDiff.length > MAX_DIFF_CHARS
|
|
50
|
+
? trimmedDiff.substring(0, MAX_DIFF_CHARS) + "\n... [truncated]"
|
|
51
|
+
: trimmedDiff;
|
|
52
|
+
return {
|
|
53
|
+
label,
|
|
54
|
+
content: `## ${label}\n\`\`\`diff\n${truncated}\n\`\`\``,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
return { label: "Diff", content: `Diff error: ${err.message}` };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.DiffContextProvider = DiffContextProvider;
|
|
63
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/context-providers/diff.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,iDAAqC;AAGrC,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,MAAa,mBAAmB;IAC9B,EAAE,GAAG,MAAM,CAAC;IACZ,OAAO,GAAG,OAAO,CAAC;IAClB,WAAW,GAAG,0DAA0D,CAAC;IACzE,WAAW,GAAG,KAAK,CAAC;IAEpB,KAAK,CAAC,OAAO,CAAC,GAAY,EAAE,OAA+B;QACzD,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,OAAO,GAAG,UAAU,CAAC;QACzB,IAAI,KAAK,GAAG,iBAAiB,CAAC;QAE9B,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,OAAO,GAAG,mBAAmB,CAAC;YAC9B,KAAK,GAAG,gBAAgB,CAAC;QAC3B,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,WAAW;YACX,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,MAAM,GAAG,EAAE,CAAC;YACpE,CAAC;YACD,OAAO,GAAG,YAAY,MAAM,EAAE,CAAC;YAC/B,KAAK,GAAG,WAAW,MAAM,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACzD,IAAA,oBAAI,EAAC,OAAO,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;oBACrG,IAAI,GAAG,IAAI,CAAC,MAAM;wBAAE,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC5E,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,eAAe,EAAE,CAAC;YACxD,CAAC;YAED,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,cAAc;gBACnD,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,mBAAmB;gBAChE,CAAC,CAAC,WAAW,CAAC;YAEhB,OAAO;gBACL,KAAK;gBACL,OAAO,EAAE,MAAM,KAAK,iBAAiB,SAAS,UAAU;aACzD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,eAAgB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7E,CAAC;IACH,CAAC;CACF;AAlDD,kDAkDC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docs Context Provider — @docs
|
|
3
|
+
*
|
|
4
|
+
* Fetches documentation for packages/libraries and injects into context.
|
|
5
|
+
* Usage:
|
|
6
|
+
* @docs react — fetch React docs summary
|
|
7
|
+
* @docs express/Router — fetch specific section
|
|
8
|
+
* @docs https://... — fetch docs from URL directly
|
|
9
|
+
*/
|
|
10
|
+
import type { ContextProvider, ContextResult, ContextResolveOptions } from "./types";
|
|
11
|
+
export declare class DocsContextProvider implements ContextProvider {
|
|
12
|
+
id: string;
|
|
13
|
+
trigger: string;
|
|
14
|
+
description: string;
|
|
15
|
+
requiresArg: boolean;
|
|
16
|
+
resolve(arg?: string, options?: ContextResolveOptions): Promise<ContextResult>;
|
|
17
|
+
private fetchUrl;
|
|
18
|
+
private findLocalDocs;
|
|
19
|
+
private fetchNpmReadme;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=docs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/context-providers/docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAmBrF,qBAAa,mBAAoB,YAAW,eAAe;IACzD,EAAE,SAAU;IACZ,OAAO,SAAW;IAClB,WAAW,SAA+E;IAC1F,WAAW,UAAQ;IAEb,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;YA8BtE,QAAQ;IAgCtB,OAAO,CAAC,aAAa;YA2BP,cAAc;CAiC7B"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Docs Context Provider — @docs
|
|
4
|
+
*
|
|
5
|
+
* Fetches documentation for packages/libraries and injects into context.
|
|
6
|
+
* Usage:
|
|
7
|
+
* @docs react — fetch React docs summary
|
|
8
|
+
* @docs express/Router — fetch specific section
|
|
9
|
+
* @docs https://... — fetch docs from URL directly
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.DocsContextProvider = void 0;
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const MAX_CHARS = 30000;
|
|
49
|
+
/**
|
|
50
|
+
* Docs registry is loaded from ~/.cdoing/docs-registry.json if it exists.
|
|
51
|
+
* Users can add their own package → URL mappings there.
|
|
52
|
+
* Format: { "react": "https://...", "express": "https://..." }
|
|
53
|
+
*/
|
|
54
|
+
function loadDocsRegistry() {
|
|
55
|
+
try {
|
|
56
|
+
const registryPath = require("path").join(require("os").homedir(), ".cdoing", "docs-registry.json");
|
|
57
|
+
if (require("fs").existsSync(registryPath)) {
|
|
58
|
+
return JSON.parse(require("fs").readFileSync(registryPath, "utf-8"));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch { /* ignore */ }
|
|
62
|
+
return {};
|
|
63
|
+
}
|
|
64
|
+
class DocsContextProvider {
|
|
65
|
+
id = "docs";
|
|
66
|
+
trigger = "@docs";
|
|
67
|
+
description = "Fetch documentation for a package or URL (@docs react, @docs https://...)";
|
|
68
|
+
requiresArg = true;
|
|
69
|
+
async resolve(arg, options) {
|
|
70
|
+
if (!arg?.trim()) {
|
|
71
|
+
return {
|
|
72
|
+
label: "Docs",
|
|
73
|
+
content: `Usage: @docs <package-name> or @docs <url>\n\nSupported packages: ${Object.keys(loadDocsRegistry()).join(", ")}`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const query = arg.trim().toLowerCase();
|
|
77
|
+
// Direct URL
|
|
78
|
+
if (query.startsWith("http://") || query.startsWith("https://")) {
|
|
79
|
+
return this.fetchUrl(query);
|
|
80
|
+
}
|
|
81
|
+
// Check registry
|
|
82
|
+
const registryUrl = loadDocsRegistry()[query];
|
|
83
|
+
if (registryUrl) {
|
|
84
|
+
return this.fetchUrl(registryUrl, query);
|
|
85
|
+
}
|
|
86
|
+
// Try to find local docs (README.md in node_modules)
|
|
87
|
+
const workingDir = options?.workingDir || process.cwd();
|
|
88
|
+
const localResult = this.findLocalDocs(workingDir, query);
|
|
89
|
+
if (localResult)
|
|
90
|
+
return localResult;
|
|
91
|
+
// Try npm registry as fallback
|
|
92
|
+
return this.fetchNpmReadme(query);
|
|
93
|
+
}
|
|
94
|
+
async fetchUrl(url, packageName) {
|
|
95
|
+
try {
|
|
96
|
+
const response = await fetch(url, {
|
|
97
|
+
headers: { "User-Agent": "cdoing-agent/1.0" },
|
|
98
|
+
signal: AbortSignal.timeout(10000),
|
|
99
|
+
});
|
|
100
|
+
if (!response.ok) {
|
|
101
|
+
return {
|
|
102
|
+
label: `Docs: ${packageName || url}`,
|
|
103
|
+
content: `Failed to fetch docs: HTTP ${response.status}`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
let text = await response.text();
|
|
107
|
+
if (text.length > MAX_CHARS) {
|
|
108
|
+
text = text.substring(0, MAX_CHARS) + "\n\n... [truncated]";
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
label: `Docs: ${packageName || url}`,
|
|
112
|
+
content: `<docs source="${packageName || url}">\n${text}\n</docs>`,
|
|
113
|
+
metadata: { source: url, truncated: text.length >= MAX_CHARS },
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
return {
|
|
118
|
+
label: `Docs: ${packageName || url}`,
|
|
119
|
+
content: `Failed to fetch docs: ${err.message}`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
findLocalDocs(workingDir, packageName) {
|
|
124
|
+
const candidates = [
|
|
125
|
+
path.join(workingDir, "node_modules", packageName, "README.md"),
|
|
126
|
+
path.join(workingDir, "node_modules", packageName, "readme.md"),
|
|
127
|
+
path.join(workingDir, "node_modules", packageName, "Readme.md"),
|
|
128
|
+
path.join(workingDir, "node_modules", `@${packageName.split("/")[0]}`, packageName.split("/")[1] || "", "README.md"),
|
|
129
|
+
];
|
|
130
|
+
for (const candidate of candidates) {
|
|
131
|
+
if (fs.existsSync(candidate)) {
|
|
132
|
+
try {
|
|
133
|
+
let content = fs.readFileSync(candidate, "utf-8");
|
|
134
|
+
if (content.length > MAX_CHARS) {
|
|
135
|
+
content = content.substring(0, MAX_CHARS) + "\n\n... [truncated]";
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
label: `Docs: ${packageName} (local)`,
|
|
139
|
+
content: `<docs source="${packageName}" local="true">\n${content}\n</docs>`,
|
|
140
|
+
metadata: { source: candidate },
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
catch { /* skip */ }
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
async fetchNpmReadme(packageName) {
|
|
149
|
+
try {
|
|
150
|
+
const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}`, {
|
|
151
|
+
headers: { "Accept": "application/json", "User-Agent": "cdoing-agent/1.0" },
|
|
152
|
+
signal: AbortSignal.timeout(10000),
|
|
153
|
+
});
|
|
154
|
+
if (!response.ok) {
|
|
155
|
+
return {
|
|
156
|
+
label: `Docs: ${packageName}`,
|
|
157
|
+
content: `Package "${packageName}" not found. Available packages: ${Object.keys(loadDocsRegistry()).join(", ")}`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const data = await response.json();
|
|
161
|
+
let readme = data.readme || data.description || "(no documentation found)";
|
|
162
|
+
if (readme.length > MAX_CHARS) {
|
|
163
|
+
readme = readme.substring(0, MAX_CHARS) + "\n\n... [truncated]";
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
label: `Docs: ${packageName} (npm)`,
|
|
167
|
+
content: `<docs source="${packageName}" npm="true">\n${readme}\n</docs>`,
|
|
168
|
+
metadata: { source: `npm:${packageName}`, truncated: readme.length >= MAX_CHARS },
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
return {
|
|
173
|
+
label: `Docs: ${packageName}`,
|
|
174
|
+
content: `Failed to fetch docs for "${packageName}": ${err.message}`,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
exports.DocsContextProvider = DocsContextProvider;
|
|
180
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/context-providers/docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ContextProvider, ContextResult, ContextResolveOptions } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* @file <path> — reads a file and injects its content into the prompt.
|
|
4
|
+
* Also handles bare relative/absolute paths that look like files.
|
|
5
|
+
*/
|
|
6
|
+
export declare class FileIncludeContextProvider implements ContextProvider {
|
|
7
|
+
id: string;
|
|
8
|
+
trigger: string;
|
|
9
|
+
description: string;
|
|
10
|
+
requiresArg: boolean;
|
|
11
|
+
resolve(arg?: string, opts?: ContextResolveOptions): Promise<ContextResult>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=file-include.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-include.d.ts","sourceRoot":"","sources":["../../src/context-providers/file-include.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAIrF;;;GAGG;AACH,qBAAa,0BAA2B,YAAW,eAAe;IAChE,EAAE,SAAU;IACZ,OAAO,SAAW;IAClB,WAAW,SAAkE;IAC7E,WAAW,UAAQ;IAEb,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;CAqClF"}
|