@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,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.FileIncludeContextProvider = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const MAX_BYTES = 100_000; // ~100 KB cap
|
|
40
|
+
/**
|
|
41
|
+
* @file <path> — reads a file and injects its content into the prompt.
|
|
42
|
+
* Also handles bare relative/absolute paths that look like files.
|
|
43
|
+
*/
|
|
44
|
+
class FileIncludeContextProvider {
|
|
45
|
+
id = "file";
|
|
46
|
+
trigger = "@file";
|
|
47
|
+
description = "Include a file's contents in the message (@file src/foo.ts)";
|
|
48
|
+
requiresArg = true;
|
|
49
|
+
async resolve(arg, opts) {
|
|
50
|
+
const base = opts?.workingDir || process.cwd();
|
|
51
|
+
const filePath = arg ? path.resolve(base, arg.trim()) : "";
|
|
52
|
+
if (!filePath) {
|
|
53
|
+
return { label: "File", content: "(no file path provided — usage: @file path/to/file)" };
|
|
54
|
+
}
|
|
55
|
+
if (!fs.existsSync(filePath)) {
|
|
56
|
+
return { label: "File", content: `(file not found: ${filePath})` };
|
|
57
|
+
}
|
|
58
|
+
const stat = fs.statSync(filePath);
|
|
59
|
+
if (stat.isDirectory()) {
|
|
60
|
+
// List directory contents instead
|
|
61
|
+
const entries = fs.readdirSync(filePath).slice(0, 100).join("\n");
|
|
62
|
+
return {
|
|
63
|
+
label: "Directory",
|
|
64
|
+
content: `<directory path="${filePath}">\n${entries}\n</directory>`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const raw = fs.readFileSync(filePath);
|
|
68
|
+
const truncated = raw.length > MAX_BYTES;
|
|
69
|
+
const text = truncated
|
|
70
|
+
? raw.slice(0, MAX_BYTES).toString("utf8") + "\n... [truncated]"
|
|
71
|
+
: raw.toString("utf8");
|
|
72
|
+
const rel = path.relative(base, filePath);
|
|
73
|
+
const ext = path.extname(filePath).slice(1) || "text";
|
|
74
|
+
return {
|
|
75
|
+
label: "File",
|
|
76
|
+
content: `<file path="${rel}">\n\`\`\`${ext}\n${text}\n\`\`\`\n</file>`,
|
|
77
|
+
metadata: { source: rel, truncated },
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.FileIncludeContextProvider = FileIncludeContextProvider;
|
|
82
|
+
//# sourceMappingURL=file-include.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-include.js","sourceRoot":"","sources":["../../src/context-providers/file-include.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAG7B,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,cAAc;AAEzC;;;GAGG;AACH,MAAa,0BAA0B;IACrC,EAAE,GAAG,MAAM,CAAC;IACZ,OAAO,GAAG,OAAO,CAAC;IAClB,WAAW,GAAG,8DAA8D,CAAC;IAC7E,WAAW,GAAG,IAAI,CAAC;IAEnB,KAAK,CAAC,OAAO,CAAC,GAAY,EAAE,IAA4B;QACtD,MAAM,IAAI,GAAG,IAAI,EAAE,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,qDAAqD,EAAE,CAAC;QAC3F,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,QAAQ,GAAG,EAAE,CAAC;QACrE,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,kCAAkC;YAClC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClE,OAAO;gBACL,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,oBAAoB,QAAQ,OAAO,OAAO,gBAAgB;aACpE,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;QACzC,MAAM,IAAI,GAAG,SAAS;YACpB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,mBAAmB;YAChE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;QAEtD,OAAO;YACL,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,eAAe,GAAG,aAAa,GAAG,KAAK,IAAI,mBAAmB;YACvE,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE;SACrC,CAAC;IACJ,CAAC;CACF;AA3CD,gEA2CC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Folder Context Provider — @folder
|
|
3
|
+
*
|
|
4
|
+
* Includes all files from a directory as context.
|
|
5
|
+
* Usage:
|
|
6
|
+
* @folder src/utils — include all files from src/utils
|
|
7
|
+
* @folder src/api 5 — include files, max 5 files
|
|
8
|
+
*/
|
|
9
|
+
import type { ContextProvider, ContextResult, ContextResolveOptions } from "./types";
|
|
10
|
+
export declare class FolderContextProvider implements ContextProvider {
|
|
11
|
+
id: string;
|
|
12
|
+
trigger: string;
|
|
13
|
+
description: string;
|
|
14
|
+
requiresArg: boolean;
|
|
15
|
+
resolve(arg?: string, options?: ContextResolveOptions): Promise<ContextResult>;
|
|
16
|
+
private collectFiles;
|
|
17
|
+
private walk;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=folder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder.d.ts","sourceRoot":"","sources":["../../src/context-providers/folder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAQrF,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,EAAE,SAAY;IACd,OAAO,SAAa;IACpB,WAAW,SAAmD;IAC9D,WAAW,UAAQ;IAEb,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;IAkDpF,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,IAAI;CAwBb"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Folder Context Provider — @folder
|
|
4
|
+
*
|
|
5
|
+
* Includes all files from a directory as context.
|
|
6
|
+
* Usage:
|
|
7
|
+
* @folder src/utils — include all files from src/utils
|
|
8
|
+
* @folder src/api 5 — include files, max 5 files
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.FolderContextProvider = void 0;
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const MAX_FILES = 20;
|
|
48
|
+
const MAX_FILE_CHARS = 3000;
|
|
49
|
+
const MAX_TOTAL_CHARS = 50000;
|
|
50
|
+
const SKIP_DIRS = new Set(["node_modules", ".git", "dist", "build", "__pycache__", ".cache", "coverage"]);
|
|
51
|
+
class FolderContextProvider {
|
|
52
|
+
id = "folder";
|
|
53
|
+
trigger = "@folder";
|
|
54
|
+
description = "Include all files from a directory as context";
|
|
55
|
+
requiresArg = true;
|
|
56
|
+
async resolve(arg, options) {
|
|
57
|
+
if (!arg?.trim()) {
|
|
58
|
+
return { label: "Folder", content: "Usage: @folder <directory> [maxFiles]" };
|
|
59
|
+
}
|
|
60
|
+
const parts = arg.trim().split(/\s+/);
|
|
61
|
+
const dirPath = parts[0];
|
|
62
|
+
const maxFiles = parseInt(parts[1], 10) || MAX_FILES;
|
|
63
|
+
const workingDir = options?.workingDir || process.cwd();
|
|
64
|
+
const fullPath = path.isAbsolute(dirPath) ? dirPath : path.resolve(workingDir, dirPath);
|
|
65
|
+
if (!fs.existsSync(fullPath) || !fs.statSync(fullPath).isDirectory()) {
|
|
66
|
+
return { label: "Folder", content: `Directory not found: ${dirPath}` };
|
|
67
|
+
}
|
|
68
|
+
const files = this.collectFiles(fullPath, maxFiles);
|
|
69
|
+
if (files.length === 0) {
|
|
70
|
+
return { label: `Folder: ${dirPath}`, content: `No files found in ${dirPath}` };
|
|
71
|
+
}
|
|
72
|
+
let totalChars = 0;
|
|
73
|
+
const sections = [`## Folder: ${dirPath} (${files.length} files)`];
|
|
74
|
+
for (const file of files) {
|
|
75
|
+
if (totalChars >= MAX_TOTAL_CHARS) {
|
|
76
|
+
sections.push(`\n... [truncated, ${MAX_TOTAL_CHARS} char limit reached]`);
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
const rel = path.relative(fullPath, file);
|
|
80
|
+
try {
|
|
81
|
+
let content = fs.readFileSync(file, "utf-8");
|
|
82
|
+
if (content.length > MAX_FILE_CHARS) {
|
|
83
|
+
content = content.substring(0, MAX_FILE_CHARS) + "\n... [truncated]";
|
|
84
|
+
}
|
|
85
|
+
const ext = path.extname(file).substring(1) || "txt";
|
|
86
|
+
sections.push(`\n### ${rel}\n\`\`\`${ext}\n${content}\n\`\`\``);
|
|
87
|
+
totalChars += content.length;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
sections.push(`\n### ${rel}\n(unable to read)`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
label: `Folder: ${dirPath}`,
|
|
95
|
+
content: sections.join("\n"),
|
|
96
|
+
metadata: { itemCount: files.length },
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
collectFiles(dir, limit) {
|
|
100
|
+
const result = [];
|
|
101
|
+
this.walk(dir, result, limit);
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
walk(dir, result, limit) {
|
|
105
|
+
if (result.length >= limit)
|
|
106
|
+
return;
|
|
107
|
+
let entries;
|
|
108
|
+
try {
|
|
109
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// Files first, then directories
|
|
115
|
+
const files = entries.filter((e) => e.isFile());
|
|
116
|
+
const dirs = entries.filter((e) => e.isDirectory() && !SKIP_DIRS.has(e.name) && !e.name.startsWith("."));
|
|
117
|
+
for (const f of files) {
|
|
118
|
+
if (result.length >= limit)
|
|
119
|
+
return;
|
|
120
|
+
result.push(path.join(dir, f.name));
|
|
121
|
+
}
|
|
122
|
+
for (const d of dirs) {
|
|
123
|
+
if (result.length >= limit)
|
|
124
|
+
return;
|
|
125
|
+
this.walk(path.join(dir, d.name), result, limit);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.FolderContextProvider = FolderContextProvider;
|
|
130
|
+
//# sourceMappingURL=folder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder.js","sourceRoot":"","sources":["../../src/context-providers/folder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Context Provider — @git
|
|
3
|
+
*
|
|
4
|
+
* Provides git context: branch, status, recent commits, blame, log.
|
|
5
|
+
* Usage:
|
|
6
|
+
* @git — branch + status + recent commits
|
|
7
|
+
* @git log 20 — last 20 commits
|
|
8
|
+
* @git blame file — blame for a file
|
|
9
|
+
* @git branch — all branches
|
|
10
|
+
*/
|
|
11
|
+
import type { ContextProvider, ContextResult, ContextResolveOptions } from "./types";
|
|
12
|
+
export declare class GitContextProvider implements ContextProvider {
|
|
13
|
+
id: string;
|
|
14
|
+
trigger: string;
|
|
15
|
+
description: string;
|
|
16
|
+
requiresArg: boolean;
|
|
17
|
+
resolve(arg?: string, options?: ContextResolveOptions): Promise<ContextResult>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/context-providers/git.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErF,qBAAa,kBAAmB,YAAW,eAAe;IACxD,EAAE,SAAS;IACX,OAAO,SAAU;IACjB,WAAW,SAAiD;IAC5D,WAAW,UAAS;IAEd,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;CA0CrF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Git Context Provider — @git
|
|
4
|
+
*
|
|
5
|
+
* Provides git context: branch, status, recent commits, blame, log.
|
|
6
|
+
* Usage:
|
|
7
|
+
* @git — branch + status + recent commits
|
|
8
|
+
* @git log 20 — last 20 commits
|
|
9
|
+
* @git blame file — blame for a file
|
|
10
|
+
* @git branch — all branches
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.GitContextProvider = void 0;
|
|
14
|
+
const child_process_1 = require("child_process");
|
|
15
|
+
class GitContextProvider {
|
|
16
|
+
id = "git";
|
|
17
|
+
trigger = "@git";
|
|
18
|
+
description = "Git context: branch, status, commits, blame";
|
|
19
|
+
requiresArg = false;
|
|
20
|
+
async resolve(arg, options) {
|
|
21
|
+
const workingDir = options?.workingDir || process.cwd();
|
|
22
|
+
const parts = (arg || "").trim().split(/\s+/);
|
|
23
|
+
const subcommand = parts[0] || "";
|
|
24
|
+
try {
|
|
25
|
+
switch (subcommand) {
|
|
26
|
+
case "log": {
|
|
27
|
+
const count = parseInt(parts[1], 10) || 10;
|
|
28
|
+
const log = await run(`git log --oneline -${count}`, workingDir);
|
|
29
|
+
return { label: `Git log (${count})`, content: `## Git Log (last ${count} commits)\n\`\`\`\n${log}\n\`\`\`` };
|
|
30
|
+
}
|
|
31
|
+
case "blame": {
|
|
32
|
+
const file = parts[1];
|
|
33
|
+
if (!file)
|
|
34
|
+
return { label: "Git blame", content: "Usage: @git blame <file>" };
|
|
35
|
+
const blame = await run(`git blame --line-porcelain "${file}" | grep -E "^(author |summary |\t)" | head -100`, workingDir);
|
|
36
|
+
return { label: `Git blame: ${file}`, content: `## Git Blame: ${file}\n\`\`\`\n${blame}\n\`\`\`` };
|
|
37
|
+
}
|
|
38
|
+
case "branch": {
|
|
39
|
+
const branches = await run("git branch -a --no-color", workingDir);
|
|
40
|
+
return { label: "Git branches", content: `## Git Branches\n\`\`\`\n${branches}\n\`\`\`` };
|
|
41
|
+
}
|
|
42
|
+
default: {
|
|
43
|
+
// Default: branch + status + recent commits
|
|
44
|
+
const [branch, status, log] = await Promise.all([
|
|
45
|
+
run("git branch --show-current", workingDir),
|
|
46
|
+
run("git status --short", workingDir),
|
|
47
|
+
run("git log --oneline -10", workingDir),
|
|
48
|
+
]);
|
|
49
|
+
const sections = [
|
|
50
|
+
`## Git Context`,
|
|
51
|
+
`**Branch:** ${branch.trim()}`,
|
|
52
|
+
`\n### Status\n\`\`\`\n${status.trim() || "(clean)"}\n\`\`\``,
|
|
53
|
+
`\n### Recent Commits\n\`\`\`\n${log.trim()}\n\`\`\``,
|
|
54
|
+
];
|
|
55
|
+
return { label: `Git: ${branch.trim()}`, content: sections.join("\n") };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
return { label: "Git", content: `Git error: ${err.message}` };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.GitContextProvider = GitContextProvider;
|
|
65
|
+
function run(command, cwd) {
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
(0, child_process_1.exec)(command, { cwd, timeout: 10000, maxBuffer: 1024 * 1024 }, (err, stdout, stderr) => {
|
|
68
|
+
if (err && !stdout)
|
|
69
|
+
return reject(new Error(stderr?.trim() || err.message));
|
|
70
|
+
resolve(stdout);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/context-providers/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Providers — Pluggable system for injecting context into chat messages.
|
|
3
|
+
*
|
|
4
|
+
* Each provider implements a simple interface:
|
|
5
|
+
* - id: unique name (e.g., "terminal", "open", "url")
|
|
6
|
+
* - trigger: the @ keyword that activates it (e.g., "@terminal")
|
|
7
|
+
* - resolve(): fetches and returns the context content
|
|
8
|
+
*
|
|
9
|
+
* This module re-exports all built-in context providers and the
|
|
10
|
+
* registry that manages them.
|
|
11
|
+
*
|
|
12
|
+
* Learning note: This follows the Strategy Pattern — each provider
|
|
13
|
+
* encapsulates a different way to gather context, and the registry
|
|
14
|
+
* lets you swap/add providers without modifying consuming code.
|
|
15
|
+
*/
|
|
16
|
+
export { ContextProviderRegistry } from "./registry";
|
|
17
|
+
export type { ContextProvider, ContextResult } from "./types";
|
|
18
|
+
export { TerminalContextProvider } from "./terminal";
|
|
19
|
+
export { OpenFilesContextProvider } from "./open-files";
|
|
20
|
+
export { UrlContextProvider } from "./url";
|
|
21
|
+
export { TreeContextProvider } from "./tree";
|
|
22
|
+
export { ProblemsContextProvider } from "./problems";
|
|
23
|
+
export { CodebaseContextProvider } from "./codebase";
|
|
24
|
+
export { ClipboardContextProvider } from "./clipboard";
|
|
25
|
+
export { FileIncludeContextProvider } from "./file-include";
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context-providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Context Providers — Pluggable system for injecting context into chat messages.
|
|
4
|
+
*
|
|
5
|
+
* Each provider implements a simple interface:
|
|
6
|
+
* - id: unique name (e.g., "terminal", "open", "url")
|
|
7
|
+
* - trigger: the @ keyword that activates it (e.g., "@terminal")
|
|
8
|
+
* - resolve(): fetches and returns the context content
|
|
9
|
+
*
|
|
10
|
+
* This module re-exports all built-in context providers and the
|
|
11
|
+
* registry that manages them.
|
|
12
|
+
*
|
|
13
|
+
* Learning note: This follows the Strategy Pattern — each provider
|
|
14
|
+
* encapsulates a different way to gather context, and the registry
|
|
15
|
+
* lets you swap/add providers without modifying consuming code.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.FileIncludeContextProvider = exports.ClipboardContextProvider = exports.CodebaseContextProvider = exports.ProblemsContextProvider = exports.TreeContextProvider = exports.UrlContextProvider = exports.OpenFilesContextProvider = exports.TerminalContextProvider = exports.ContextProviderRegistry = void 0;
|
|
19
|
+
var registry_1 = require("./registry");
|
|
20
|
+
Object.defineProperty(exports, "ContextProviderRegistry", { enumerable: true, get: function () { return registry_1.ContextProviderRegistry; } });
|
|
21
|
+
var terminal_1 = require("./terminal");
|
|
22
|
+
Object.defineProperty(exports, "TerminalContextProvider", { enumerable: true, get: function () { return terminal_1.TerminalContextProvider; } });
|
|
23
|
+
var open_files_1 = require("./open-files");
|
|
24
|
+
Object.defineProperty(exports, "OpenFilesContextProvider", { enumerable: true, get: function () { return open_files_1.OpenFilesContextProvider; } });
|
|
25
|
+
var url_1 = require("./url");
|
|
26
|
+
Object.defineProperty(exports, "UrlContextProvider", { enumerable: true, get: function () { return url_1.UrlContextProvider; } });
|
|
27
|
+
var tree_1 = require("./tree");
|
|
28
|
+
Object.defineProperty(exports, "TreeContextProvider", { enumerable: true, get: function () { return tree_1.TreeContextProvider; } });
|
|
29
|
+
var problems_1 = require("./problems");
|
|
30
|
+
Object.defineProperty(exports, "ProblemsContextProvider", { enumerable: true, get: function () { return problems_1.ProblemsContextProvider; } });
|
|
31
|
+
var codebase_1 = require("./codebase");
|
|
32
|
+
Object.defineProperty(exports, "CodebaseContextProvider", { enumerable: true, get: function () { return codebase_1.CodebaseContextProvider; } });
|
|
33
|
+
var clipboard_1 = require("./clipboard");
|
|
34
|
+
Object.defineProperty(exports, "ClipboardContextProvider", { enumerable: true, get: function () { return clipboard_1.ClipboardContextProvider; } });
|
|
35
|
+
var file_include_1 = require("./file-include");
|
|
36
|
+
Object.defineProperty(exports, "FileIncludeContextProvider", { enumerable: true, get: function () { return file_include_1.FileIncludeContextProvider; } });
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context-providers/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,uCAAqD;AAA5C,mHAAA,uBAAuB,OAAA;AAEhC,uCAAqD;AAA5C,mHAAA,uBAAuB,OAAA;AAChC,2CAAwD;AAA/C,sHAAA,wBAAwB,OAAA;AACjC,6BAA2C;AAAlC,yGAAA,kBAAkB,OAAA;AAC3B,+BAA6C;AAApC,2GAAA,mBAAmB,OAAA;AAC5B,uCAAqD;AAA5C,mHAAA,uBAAuB,OAAA;AAChC,uCAAqD;AAA5C,mHAAA,uBAAuB,OAAA;AAChC,yCAAuD;AAA9C,qHAAA,wBAAwB,OAAA;AACjC,+CAA4D;AAAnD,0HAAA,0BAA0B,OAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Open Files Context Provider — @open
|
|
3
|
+
*
|
|
4
|
+
* Attaches the content of all currently open editor tabs.
|
|
5
|
+
* Useful for providing broad context about what the user is working on.
|
|
6
|
+
*
|
|
7
|
+
* How it works:
|
|
8
|
+
* 1. Receives list of open file paths from the IDE
|
|
9
|
+
* 2. Reads each file's content
|
|
10
|
+
* 3. Formats them with file headers for the LLM
|
|
11
|
+
* 4. Applies smart truncation for large files
|
|
12
|
+
*
|
|
13
|
+
* Learning note: We truncate large files rather than skipping them
|
|
14
|
+
* entirely — the file header + first N lines still provides useful
|
|
15
|
+
* context about the file's purpose and structure.
|
|
16
|
+
*/
|
|
17
|
+
import type { ContextProvider, ContextResult, ContextResolveOptions } from "./types";
|
|
18
|
+
export declare class OpenFilesContextProvider implements ContextProvider {
|
|
19
|
+
id: string;
|
|
20
|
+
trigger: string;
|
|
21
|
+
description: string;
|
|
22
|
+
requiresArg: boolean;
|
|
23
|
+
resolve(_arg?: string, options?: ContextResolveOptions): Promise<ContextResult>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=open-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-files.d.ts","sourceRoot":"","sources":["../../src/context-providers/open-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAQrF,qBAAa,wBAAyB,YAAW,eAAe;IAC9D,EAAE,SAAU;IACZ,OAAO,SAAW;IAClB,WAAW,SAAmC;IAC9C,WAAW,UAAS;IAEd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;CAiEtF"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Open Files Context Provider — @open
|
|
4
|
+
*
|
|
5
|
+
* Attaches the content of all currently open editor tabs.
|
|
6
|
+
* Useful for providing broad context about what the user is working on.
|
|
7
|
+
*
|
|
8
|
+
* How it works:
|
|
9
|
+
* 1. Receives list of open file paths from the IDE
|
|
10
|
+
* 2. Reads each file's content
|
|
11
|
+
* 3. Formats them with file headers for the LLM
|
|
12
|
+
* 4. Applies smart truncation for large files
|
|
13
|
+
*
|
|
14
|
+
* Learning note: We truncate large files rather than skipping them
|
|
15
|
+
* entirely — the file header + first N lines still provides useful
|
|
16
|
+
* context about the file's purpose and structure.
|
|
17
|
+
*/
|
|
18
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
21
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
22
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
23
|
+
}
|
|
24
|
+
Object.defineProperty(o, k2, desc);
|
|
25
|
+
}) : (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
o[k2] = m[k];
|
|
28
|
+
}));
|
|
29
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
30
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
31
|
+
}) : function(o, v) {
|
|
32
|
+
o["default"] = v;
|
|
33
|
+
});
|
|
34
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
35
|
+
var ownKeys = function(o) {
|
|
36
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
37
|
+
var ar = [];
|
|
38
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
39
|
+
return ar;
|
|
40
|
+
};
|
|
41
|
+
return ownKeys(o);
|
|
42
|
+
};
|
|
43
|
+
return function (mod) {
|
|
44
|
+
if (mod && mod.__esModule) return mod;
|
|
45
|
+
var result = {};
|
|
46
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
47
|
+
__setModuleDefault(result, mod);
|
|
48
|
+
return result;
|
|
49
|
+
};
|
|
50
|
+
})();
|
|
51
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
+
exports.OpenFilesContextProvider = void 0;
|
|
53
|
+
const fs = __importStar(require("fs"));
|
|
54
|
+
const path = __importStar(require("path"));
|
|
55
|
+
/** Max chars per file before truncation */
|
|
56
|
+
const PER_FILE_LIMIT = 5000;
|
|
57
|
+
/** Max total chars for all open files combined */
|
|
58
|
+
const TOTAL_LIMIT = 30000;
|
|
59
|
+
class OpenFilesContextProvider {
|
|
60
|
+
id = "open";
|
|
61
|
+
trigger = "@open";
|
|
62
|
+
description = "Include all open editor files";
|
|
63
|
+
requiresArg = false;
|
|
64
|
+
async resolve(_arg, options) {
|
|
65
|
+
const openFiles = options?.openFiles || [];
|
|
66
|
+
const workingDir = options?.workingDir || process.cwd();
|
|
67
|
+
if (openFiles.length === 0) {
|
|
68
|
+
return {
|
|
69
|
+
label: "Open Files",
|
|
70
|
+
content: "[No files are currently open in the editor.]",
|
|
71
|
+
metadata: { source: "editor", itemCount: 0 },
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const sections = [];
|
|
75
|
+
let totalChars = 0;
|
|
76
|
+
let truncatedCount = 0;
|
|
77
|
+
for (const filePath of openFiles) {
|
|
78
|
+
// Resolve relative paths against working directory
|
|
79
|
+
const absPath = path.isAbsolute(filePath)
|
|
80
|
+
? filePath
|
|
81
|
+
: path.join(workingDir, filePath);
|
|
82
|
+
// Read file content safely
|
|
83
|
+
let content;
|
|
84
|
+
try {
|
|
85
|
+
content = fs.readFileSync(absPath, "utf-8");
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
sections.push(`### ${filePath}\n\n[Unable to read file]`);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
// Truncate individual files that are too large
|
|
92
|
+
let wasTruncated = false;
|
|
93
|
+
if (content.length > PER_FILE_LIMIT) {
|
|
94
|
+
content = content.substring(0, PER_FILE_LIMIT);
|
|
95
|
+
wasTruncated = true;
|
|
96
|
+
truncatedCount++;
|
|
97
|
+
}
|
|
98
|
+
// Stop adding files if we've exceeded the total limit
|
|
99
|
+
if (totalChars + content.length > TOTAL_LIMIT) {
|
|
100
|
+
sections.push(`\n... [${openFiles.length - sections.length} more files omitted for context space]`);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
// Detect language from file extension for syntax highlighting
|
|
104
|
+
const ext = path.extname(filePath).slice(1);
|
|
105
|
+
const lang = EXT_TO_LANG[ext] || ext || "text";
|
|
106
|
+
sections.push(`### ${filePath}${wasTruncated ? " (truncated)" : ""}\n\n\`\`\`${lang}\n${content}\n\`\`\``);
|
|
107
|
+
totalChars += content.length;
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
label: `Open Files (${openFiles.length})`,
|
|
111
|
+
content: `## Open Editor Files\n\n${sections.join("\n\n")}`,
|
|
112
|
+
metadata: {
|
|
113
|
+
source: "editor",
|
|
114
|
+
truncated: truncatedCount > 0,
|
|
115
|
+
itemCount: openFiles.length,
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.OpenFilesContextProvider = OpenFilesContextProvider;
|
|
121
|
+
/** Map file extensions to markdown language identifiers */
|
|
122
|
+
const EXT_TO_LANG = {
|
|
123
|
+
ts: "typescript", tsx: "tsx", js: "javascript", jsx: "jsx",
|
|
124
|
+
py: "python", rs: "rust", go: "go", java: "java",
|
|
125
|
+
rb: "ruby", php: "php", cs: "csharp", cpp: "cpp",
|
|
126
|
+
c: "c", h: "c", hpp: "cpp", swift: "swift",
|
|
127
|
+
kt: "kotlin", scala: "scala", r: "r",
|
|
128
|
+
html: "html", css: "css", scss: "scss", less: "less",
|
|
129
|
+
json: "json", yaml: "yaml", yml: "yaml", toml: "toml",
|
|
130
|
+
xml: "xml", sql: "sql", sh: "bash", bash: "bash",
|
|
131
|
+
zsh: "bash", fish: "fish", ps1: "powershell",
|
|
132
|
+
md: "markdown", mdx: "markdown", txt: "text",
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=open-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-files.js","sourceRoot":"","sources":["../../src/context-providers/open-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Problems Context Provider — @problems
|
|
3
|
+
*
|
|
4
|
+
* Injects VS Code diagnostics (errors, warnings) into the conversation.
|
|
5
|
+
* Helps the AI understand what's broken without the user copying error messages.
|
|
6
|
+
*
|
|
7
|
+
* How it works:
|
|
8
|
+
* 1. VS Code extension collects diagnostics from all open files
|
|
9
|
+
* 2. Groups them by file and severity
|
|
10
|
+
* 3. Formats as a structured list for the LLM
|
|
11
|
+
*
|
|
12
|
+
* Learning note: Diagnostics come from VS Code's Language Server Protocol (LSP).
|
|
13
|
+
* Each diagnostic has a file path, line number, severity, and message.
|
|
14
|
+
* We pass them via the `options.diagnostics` array from the extension host.
|
|
15
|
+
*/
|
|
16
|
+
import type { ContextProvider, ContextResult, ContextResolveOptions } from "./types";
|
|
17
|
+
export declare class ProblemsContextProvider implements ContextProvider {
|
|
18
|
+
id: string;
|
|
19
|
+
trigger: string;
|
|
20
|
+
description: string;
|
|
21
|
+
requiresArg: boolean;
|
|
22
|
+
resolve(_arg?: string, options?: ContextResolveOptions): Promise<ContextResult>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=problems.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"problems.d.ts","sourceRoot":"","sources":["../../src/context-providers/problems.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAkBrF,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,EAAE,SAAc;IAChB,OAAO,SAAe;IACtB,WAAW,SAAyD;IACpE,WAAW,UAAS;IAEd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;CA2DtF"}
|