@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,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Problems Context Provider — @problems
|
|
4
|
+
*
|
|
5
|
+
* Injects VS Code diagnostics (errors, warnings) into the conversation.
|
|
6
|
+
* Helps the AI understand what's broken without the user copying error messages.
|
|
7
|
+
*
|
|
8
|
+
* How it works:
|
|
9
|
+
* 1. VS Code extension collects diagnostics from all open files
|
|
10
|
+
* 2. Groups them by file and severity
|
|
11
|
+
* 3. Formats as a structured list for the LLM
|
|
12
|
+
*
|
|
13
|
+
* Learning note: Diagnostics come from VS Code's Language Server Protocol (LSP).
|
|
14
|
+
* Each diagnostic has a file path, line number, severity, and message.
|
|
15
|
+
* We pass them via the `options.diagnostics` array from the extension host.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ProblemsContextProvider = void 0;
|
|
19
|
+
/** Emoji icons for each severity level */
|
|
20
|
+
const SEVERITY_ICONS = {
|
|
21
|
+
error: "❌",
|
|
22
|
+
warning: "⚠️",
|
|
23
|
+
info: "ℹ️",
|
|
24
|
+
hint: "💡",
|
|
25
|
+
};
|
|
26
|
+
/** Priority order for sorting (errors first) */
|
|
27
|
+
const SEVERITY_ORDER = {
|
|
28
|
+
error: 0,
|
|
29
|
+
warning: 1,
|
|
30
|
+
info: 2,
|
|
31
|
+
hint: 3,
|
|
32
|
+
};
|
|
33
|
+
class ProblemsContextProvider {
|
|
34
|
+
id = "problems";
|
|
35
|
+
trigger = "@problems";
|
|
36
|
+
description = "Include current file diagnostics (errors, warnings)";
|
|
37
|
+
requiresArg = false;
|
|
38
|
+
async resolve(_arg, options) {
|
|
39
|
+
const diagnostics = options?.diagnostics || [];
|
|
40
|
+
if (diagnostics.length === 0) {
|
|
41
|
+
return {
|
|
42
|
+
label: "Problems",
|
|
43
|
+
content: "[No diagnostics found. All files are clean!]",
|
|
44
|
+
metadata: { source: "diagnostics", itemCount: 0 },
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Sort by severity (errors first), then by file path
|
|
48
|
+
const sorted = [...diagnostics].sort((a, b) => {
|
|
49
|
+
const severityDiff = (SEVERITY_ORDER[a.severity] ?? 4) - (SEVERITY_ORDER[b.severity] ?? 4);
|
|
50
|
+
if (severityDiff !== 0)
|
|
51
|
+
return severityDiff;
|
|
52
|
+
return a.file.localeCompare(b.file);
|
|
53
|
+
});
|
|
54
|
+
// Group diagnostics by file for cleaner formatting
|
|
55
|
+
const byFile = new Map();
|
|
56
|
+
for (const diag of sorted) {
|
|
57
|
+
const existing = byFile.get(diag.file) || [];
|
|
58
|
+
existing.push(diag);
|
|
59
|
+
byFile.set(diag.file, existing);
|
|
60
|
+
}
|
|
61
|
+
// Count by severity
|
|
62
|
+
const counts = { error: 0, warning: 0, info: 0, hint: 0 };
|
|
63
|
+
for (const diag of sorted) {
|
|
64
|
+
counts[diag.severity] = (counts[diag.severity] || 0) + 1;
|
|
65
|
+
}
|
|
66
|
+
// Format output
|
|
67
|
+
const sections = [];
|
|
68
|
+
for (const [file, diags] of byFile) {
|
|
69
|
+
const lines = diags.map((d) => {
|
|
70
|
+
const icon = SEVERITY_ICONS[d.severity] || "•";
|
|
71
|
+
return ` ${icon} Line ${d.line}: ${d.message}`;
|
|
72
|
+
});
|
|
73
|
+
sections.push(`### ${file}\n${lines.join("\n")}`);
|
|
74
|
+
}
|
|
75
|
+
// Build summary line
|
|
76
|
+
const summaryParts = [];
|
|
77
|
+
if (counts.error > 0)
|
|
78
|
+
summaryParts.push(`${counts.error} error${counts.error > 1 ? "s" : ""}`);
|
|
79
|
+
if (counts.warning > 0)
|
|
80
|
+
summaryParts.push(`${counts.warning} warning${counts.warning > 1 ? "s" : ""}`);
|
|
81
|
+
if (counts.info > 0)
|
|
82
|
+
summaryParts.push(`${counts.info} info`);
|
|
83
|
+
if (counts.hint > 0)
|
|
84
|
+
summaryParts.push(`${counts.hint} hint${counts.hint > 1 ? "s" : ""}`);
|
|
85
|
+
const summary = summaryParts.join(", ");
|
|
86
|
+
return {
|
|
87
|
+
label: `Problems (${summary})`,
|
|
88
|
+
content: `## Diagnostics: ${summary}\n\n${sections.join("\n\n")}`,
|
|
89
|
+
metadata: {
|
|
90
|
+
source: "diagnostics",
|
|
91
|
+
itemCount: diagnostics.length,
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.ProblemsContextProvider = ProblemsContextProvider;
|
|
97
|
+
//# sourceMappingURL=problems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"problems.js","sourceRoot":"","sources":["../../src/context-providers/problems.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Provider Registry — Manages all available @ context providers.
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* 1. Register/unregister providers
|
|
6
|
+
* 2. Match user input (e.g., "@terminal") to the right provider
|
|
7
|
+
* 3. Resolve context by delegating to the matched provider
|
|
8
|
+
*
|
|
9
|
+
* Learning note: This is a Service Locator pattern — it decouples
|
|
10
|
+
* the chat input from specific provider implementations. You can
|
|
11
|
+
* add new @ providers without touching the input handling code.
|
|
12
|
+
*/
|
|
13
|
+
import type { ContextProvider, ContextResult, ContextResolveOptions } from "./types";
|
|
14
|
+
export declare class ContextProviderRegistry {
|
|
15
|
+
/** Map of provider ID → provider instance */
|
|
16
|
+
private providers;
|
|
17
|
+
/**
|
|
18
|
+
* Register a new context provider.
|
|
19
|
+
* Replaces any existing provider with the same ID.
|
|
20
|
+
*/
|
|
21
|
+
register(provider: ContextProvider): void;
|
|
22
|
+
/**
|
|
23
|
+
* Remove a provider by ID.
|
|
24
|
+
*/
|
|
25
|
+
unregister(id: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Get a provider by its ID.
|
|
28
|
+
*/
|
|
29
|
+
get(id: string): ContextProvider | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Get all registered providers (for autocomplete suggestions).
|
|
32
|
+
*/
|
|
33
|
+
getAll(): ContextProvider[];
|
|
34
|
+
/**
|
|
35
|
+
* Match a trigger string (e.g., "@terminal", "@url https://...") to a provider.
|
|
36
|
+
*
|
|
37
|
+
* Returns the matched provider and any argument after the trigger,
|
|
38
|
+
* or null if no provider matches.
|
|
39
|
+
*
|
|
40
|
+
* Learning note: This parsing is intentionally simple — we split on
|
|
41
|
+
* the first space to separate trigger from argument.
|
|
42
|
+
*/
|
|
43
|
+
match(input: string): {
|
|
44
|
+
provider: ContextProvider;
|
|
45
|
+
arg?: string;
|
|
46
|
+
} | null;
|
|
47
|
+
/**
|
|
48
|
+
* Resolve context from a trigger string.
|
|
49
|
+
* Convenience method that combines match() + resolve().
|
|
50
|
+
*/
|
|
51
|
+
resolve(input: string, options?: ContextResolveOptions): Promise<ContextResult | null>;
|
|
52
|
+
/**
|
|
53
|
+
* Get autocomplete suggestions for a partial @ input.
|
|
54
|
+
* E.g., "@ter" → ["@terminal"]
|
|
55
|
+
*/
|
|
56
|
+
getSuggestions(partial: string): Array<{
|
|
57
|
+
trigger: string;
|
|
58
|
+
description: string;
|
|
59
|
+
}>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/context-providers/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErF,qBAAa,uBAAuB;IAClC,6CAA6C;IAC7C,OAAO,CAAC,SAAS,CAAsC;IAEvD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAIzC;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI5C;;OAEG;IACH,MAAM,IAAI,eAAe,EAAE;IAI3B;;;;;;;;OAQG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,eAAe,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAoBxE;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAO5F;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAMjF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Context Provider Registry — Manages all available @ context providers.
|
|
4
|
+
*
|
|
5
|
+
* Responsibilities:
|
|
6
|
+
* 1. Register/unregister providers
|
|
7
|
+
* 2. Match user input (e.g., "@terminal") to the right provider
|
|
8
|
+
* 3. Resolve context by delegating to the matched provider
|
|
9
|
+
*
|
|
10
|
+
* Learning note: This is a Service Locator pattern — it decouples
|
|
11
|
+
* the chat input from specific provider implementations. You can
|
|
12
|
+
* add new @ providers without touching the input handling code.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ContextProviderRegistry = void 0;
|
|
16
|
+
class ContextProviderRegistry {
|
|
17
|
+
/** Map of provider ID → provider instance */
|
|
18
|
+
providers = new Map();
|
|
19
|
+
/**
|
|
20
|
+
* Register a new context provider.
|
|
21
|
+
* Replaces any existing provider with the same ID.
|
|
22
|
+
*/
|
|
23
|
+
register(provider) {
|
|
24
|
+
this.providers.set(provider.id, provider);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Remove a provider by ID.
|
|
28
|
+
*/
|
|
29
|
+
unregister(id) {
|
|
30
|
+
this.providers.delete(id);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get a provider by its ID.
|
|
34
|
+
*/
|
|
35
|
+
get(id) {
|
|
36
|
+
return this.providers.get(id);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get all registered providers (for autocomplete suggestions).
|
|
40
|
+
*/
|
|
41
|
+
getAll() {
|
|
42
|
+
return Array.from(this.providers.values());
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Match a trigger string (e.g., "@terminal", "@url https://...") to a provider.
|
|
46
|
+
*
|
|
47
|
+
* Returns the matched provider and any argument after the trigger,
|
|
48
|
+
* or null if no provider matches.
|
|
49
|
+
*
|
|
50
|
+
* Learning note: This parsing is intentionally simple — we split on
|
|
51
|
+
* the first space to separate trigger from argument.
|
|
52
|
+
*/
|
|
53
|
+
match(input) {
|
|
54
|
+
// Input should start with @
|
|
55
|
+
const trimmed = input.trim();
|
|
56
|
+
if (!trimmed.startsWith("@"))
|
|
57
|
+
return null;
|
|
58
|
+
// Split into trigger and argument: "@url https://example.com" → ["@url", "https://example.com"]
|
|
59
|
+
const spaceIndex = trimmed.indexOf(" ");
|
|
60
|
+
const trigger = spaceIndex >= 0 ? trimmed.substring(0, spaceIndex) : trimmed;
|
|
61
|
+
const arg = spaceIndex >= 0 ? trimmed.substring(spaceIndex + 1).trim() : undefined;
|
|
62
|
+
// Find a provider whose trigger matches
|
|
63
|
+
for (const provider of this.providers.values()) {
|
|
64
|
+
if (provider.trigger === trigger) {
|
|
65
|
+
return { provider, arg };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Resolve context from a trigger string.
|
|
72
|
+
* Convenience method that combines match() + resolve().
|
|
73
|
+
*/
|
|
74
|
+
async resolve(input, options) {
|
|
75
|
+
const match = this.match(input);
|
|
76
|
+
if (!match)
|
|
77
|
+
return null;
|
|
78
|
+
return match.provider.resolve(match.arg, options);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get autocomplete suggestions for a partial @ input.
|
|
82
|
+
* E.g., "@ter" → ["@terminal"]
|
|
83
|
+
*/
|
|
84
|
+
getSuggestions(partial) {
|
|
85
|
+
const query = partial.toLowerCase();
|
|
86
|
+
return this.getAll()
|
|
87
|
+
.filter((p) => p.trigger.toLowerCase().startsWith(query))
|
|
88
|
+
.map((p) => ({ trigger: p.trigger, description: p.description }));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.ContextProviderRegistry = ContextProviderRegistry;
|
|
92
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/context-providers/registry.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAIH,MAAa,uBAAuB;IAClC,6CAA6C;IACrC,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEvD;;;OAGG;IACH,QAAQ,CAAC,QAAyB;QAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,EAAU;QACnB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,KAAa;QACjB,4BAA4B;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAE1C,gGAAgG;QAChG,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7E,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAEnF,wCAAwC;QACxC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBACjC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,OAA+B;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,OAAe;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,MAAM,EAAE;aACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aACxD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;CACF;AAnFD,0DAmFC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Context Provider — @terminal
|
|
3
|
+
*
|
|
4
|
+
* Injects recent terminal output into the conversation.
|
|
5
|
+
* Useful when the user wants the AI to analyze command output,
|
|
6
|
+
* debug errors, or understand build/test results.
|
|
7
|
+
*
|
|
8
|
+
* How it works:
|
|
9
|
+
* 1. In VS Code: captures output from the integrated terminal
|
|
10
|
+
* 2. In CLI: captures the last shell command output
|
|
11
|
+
* 3. Formats it with a clear header for the LLM
|
|
12
|
+
*
|
|
13
|
+
* Learning note: Terminal output is inherently ephemeral — we only
|
|
14
|
+
* capture what's available at resolve time. In VS Code, this comes
|
|
15
|
+
* from the Terminal API; in CLI, from the last !command output.
|
|
16
|
+
*/
|
|
17
|
+
import type { ContextProvider, ContextResult, ContextResolveOptions } from "./types";
|
|
18
|
+
export declare class TerminalContextProvider 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=terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/context-providers/terminal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAKrF,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,EAAE,SAAc;IAChB,OAAO,SAAe;IACtB,WAAW,SAAoC;IAC/C,WAAW,UAAS;IAEd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;CA6BtF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Terminal Context Provider — @terminal
|
|
4
|
+
*
|
|
5
|
+
* Injects recent terminal output into the conversation.
|
|
6
|
+
* Useful when the user wants the AI to analyze command output,
|
|
7
|
+
* debug errors, or understand build/test results.
|
|
8
|
+
*
|
|
9
|
+
* How it works:
|
|
10
|
+
* 1. In VS Code: captures output from the integrated terminal
|
|
11
|
+
* 2. In CLI: captures the last shell command output
|
|
12
|
+
* 3. Formats it with a clear header for the LLM
|
|
13
|
+
*
|
|
14
|
+
* Learning note: Terminal output is inherently ephemeral — we only
|
|
15
|
+
* capture what's available at resolve time. In VS Code, this comes
|
|
16
|
+
* from the Terminal API; in CLI, from the last !command output.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.TerminalContextProvider = void 0;
|
|
20
|
+
/** Default max characters for terminal output (prevents context window overflow) */
|
|
21
|
+
const DEFAULT_MAX_CHARS = 10000;
|
|
22
|
+
class TerminalContextProvider {
|
|
23
|
+
id = "terminal";
|
|
24
|
+
trigger = "@terminal";
|
|
25
|
+
description = "Include recent terminal output";
|
|
26
|
+
requiresArg = false;
|
|
27
|
+
async resolve(_arg, options) {
|
|
28
|
+
const maxChars = options?.maxContentLength ?? DEFAULT_MAX_CHARS;
|
|
29
|
+
let output = options?.terminalOutput || "";
|
|
30
|
+
// If no terminal output is available, return a helpful message
|
|
31
|
+
if (!output.trim()) {
|
|
32
|
+
return {
|
|
33
|
+
label: "Terminal Output",
|
|
34
|
+
content: "[No recent terminal output available. Run a command first, then use @terminal.]",
|
|
35
|
+
metadata: { source: "terminal", itemCount: 0 },
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Truncate if too long — keep the tail (most recent output is most relevant)
|
|
39
|
+
let truncated = false;
|
|
40
|
+
if (output.length > maxChars) {
|
|
41
|
+
output = output.slice(-maxChars);
|
|
42
|
+
truncated = true;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
label: "Terminal Output",
|
|
46
|
+
content: `## Recent Terminal Output\n\n\`\`\`\n${output}\n\`\`\``,
|
|
47
|
+
metadata: {
|
|
48
|
+
source: "terminal",
|
|
49
|
+
truncated,
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.TerminalContextProvider = TerminalContextProvider;
|
|
55
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/context-providers/terminal.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAIH,oFAAoF;AACpF,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,MAAa,uBAAuB;IAClC,EAAE,GAAG,UAAU,CAAC;IAChB,OAAO,GAAG,WAAW,CAAC;IACtB,WAAW,GAAG,gCAAgC,CAAC;IAC/C,WAAW,GAAG,KAAK,CAAC;IAEpB,KAAK,CAAC,OAAO,CAAC,IAAa,EAAE,OAA+B;QAC1D,MAAM,QAAQ,GAAG,OAAO,EAAE,gBAAgB,IAAI,iBAAiB,CAAC;QAChE,IAAI,MAAM,GAAG,OAAO,EAAE,cAAc,IAAI,EAAE,CAAC;QAE3C,+DAA+D;QAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO;gBACL,KAAK,EAAE,iBAAiB;gBACxB,OAAO,EAAE,iFAAiF;gBAC1F,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE;aAC/C,CAAC;QACJ,CAAC;QAED,6EAA6E;QAC7E,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;YACjC,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,OAAO;YACL,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,wCAAwC,MAAM,UAAU;YACjE,QAAQ,EAAE;gBACR,MAAM,EAAE,UAAU;gBAClB,SAAS;aACV;SACF,CAAC;IACJ,CAAC;CACF;AAnCD,0DAmCC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree Context Provider — @tree
|
|
3
|
+
*
|
|
4
|
+
* Generates a file tree visualization of the workspace.
|
|
5
|
+
* Helps the AI understand the project structure at a glance.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* @tree → full tree (default depth 3)
|
|
9
|
+
* @tree src → tree of a subdirectory
|
|
10
|
+
* @tree 5 → custom depth
|
|
11
|
+
*
|
|
12
|
+
* How it works:
|
|
13
|
+
* 1. Walks the directory recursively up to the configured depth
|
|
14
|
+
* 2. Respects .gitignore patterns
|
|
15
|
+
* 3. Formats as an ASCII tree (like the `tree` command)
|
|
16
|
+
*
|
|
17
|
+
* Learning note: We use recursion with a depth limit to prevent
|
|
18
|
+
* scanning massive directories. The .gitignore filtering ensures
|
|
19
|
+
* we don't include node_modules, dist, etc.
|
|
20
|
+
*/
|
|
21
|
+
import type { ContextProvider, ContextResult, ContextResolveOptions } from "./types";
|
|
22
|
+
export declare class TreeContextProvider implements ContextProvider {
|
|
23
|
+
id: string;
|
|
24
|
+
trigger: string;
|
|
25
|
+
description: string;
|
|
26
|
+
requiresArg: boolean;
|
|
27
|
+
resolve(arg?: string, options?: ContextResolveOptions): Promise<ContextResult>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/context-providers/tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAgBrF,qBAAa,mBAAoB,YAAW,eAAe;IACzD,EAAE,SAAU;IACZ,OAAO,SAAW;IAClB,WAAW,SAAwC;IACnD,WAAW,UAAS;IAEd,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;CA6CrF"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tree Context Provider — @tree
|
|
4
|
+
*
|
|
5
|
+
* Generates a file tree visualization of the workspace.
|
|
6
|
+
* Helps the AI understand the project structure at a glance.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* @tree → full tree (default depth 3)
|
|
10
|
+
* @tree src → tree of a subdirectory
|
|
11
|
+
* @tree 5 → custom depth
|
|
12
|
+
*
|
|
13
|
+
* How it works:
|
|
14
|
+
* 1. Walks the directory recursively up to the configured depth
|
|
15
|
+
* 2. Respects .gitignore patterns
|
|
16
|
+
* 3. Formats as an ASCII tree (like the `tree` command)
|
|
17
|
+
*
|
|
18
|
+
* Learning note: We use recursion with a depth limit to prevent
|
|
19
|
+
* scanning massive directories. The .gitignore filtering ensures
|
|
20
|
+
* we don't include node_modules, dist, etc.
|
|
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.TreeContextProvider = void 0;
|
|
57
|
+
const fs = __importStar(require("fs"));
|
|
58
|
+
const path = __importStar(require("path"));
|
|
59
|
+
/** Default max depth for tree traversal */
|
|
60
|
+
const DEFAULT_DEPTH = 3;
|
|
61
|
+
/** Max items to include in the tree output */
|
|
62
|
+
const MAX_ITEMS = 500;
|
|
63
|
+
/** Directories to always skip (even without .gitignore) */
|
|
64
|
+
const ALWAYS_SKIP = new Set([
|
|
65
|
+
"node_modules", ".git", ".next", ".nuxt", "__pycache__",
|
|
66
|
+
".cache", ".turbo", "dist", "build", ".DS_Store",
|
|
67
|
+
"coverage", ".nyc_output", ".pytest_cache", "venv",
|
|
68
|
+
".venv", "env", ".env", ".tox",
|
|
69
|
+
]);
|
|
70
|
+
class TreeContextProvider {
|
|
71
|
+
id = "tree";
|
|
72
|
+
trigger = "@tree";
|
|
73
|
+
description = "Show workspace file tree structure";
|
|
74
|
+
requiresArg = false;
|
|
75
|
+
async resolve(arg, options) {
|
|
76
|
+
const workingDir = options?.workingDir || process.cwd();
|
|
77
|
+
// Parse argument: could be a path, a depth number, or "path depth"
|
|
78
|
+
let targetDir = workingDir;
|
|
79
|
+
let maxDepth = DEFAULT_DEPTH;
|
|
80
|
+
if (arg) {
|
|
81
|
+
const parts = arg.trim().split(/\s+/);
|
|
82
|
+
for (const part of parts) {
|
|
83
|
+
const num = parseInt(part, 10);
|
|
84
|
+
if (!isNaN(num) && num > 0 && num <= 10) {
|
|
85
|
+
maxDepth = num;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Treat as a subdirectory path
|
|
89
|
+
const resolved = path.resolve(workingDir, part);
|
|
90
|
+
if (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) {
|
|
91
|
+
targetDir = resolved;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Build the tree
|
|
97
|
+
let itemCount = 0;
|
|
98
|
+
const lines = [];
|
|
99
|
+
const rootName = path.basename(targetDir);
|
|
100
|
+
lines.push(rootName + "/");
|
|
101
|
+
buildTree(targetDir, "", maxDepth, 0, lines, { count: 0, max: MAX_ITEMS });
|
|
102
|
+
itemCount = lines.length - 1; // Subtract the root line
|
|
103
|
+
const treeOutput = lines.join("\n");
|
|
104
|
+
const relativePath = path.relative(workingDir, targetDir) || ".";
|
|
105
|
+
return {
|
|
106
|
+
label: `File Tree: ${relativePath}`,
|
|
107
|
+
content: `## File Tree: ${relativePath} (depth: ${maxDepth})\n\n\`\`\`\n${treeOutput}\n\`\`\``,
|
|
108
|
+
metadata: {
|
|
109
|
+
source: targetDir,
|
|
110
|
+
truncated: itemCount >= MAX_ITEMS,
|
|
111
|
+
itemCount,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.TreeContextProvider = TreeContextProvider;
|
|
117
|
+
/**
|
|
118
|
+
* Recursively build an ASCII tree representation.
|
|
119
|
+
*
|
|
120
|
+
* Uses box-drawing characters for a clean visual:
|
|
121
|
+
* ├── file.ts
|
|
122
|
+
* ├── src/
|
|
123
|
+
* │ ├── index.ts
|
|
124
|
+
* │ └── utils/
|
|
125
|
+
* └── package.json
|
|
126
|
+
*
|
|
127
|
+
* Learning note: The `prefix` parameter builds up as we recurse deeper,
|
|
128
|
+
* adding "│ " or " " to maintain the visual tree structure.
|
|
129
|
+
*/
|
|
130
|
+
function buildTree(dir, prefix, maxDepth, currentDepth, lines, counter) {
|
|
131
|
+
if (currentDepth >= maxDepth || counter.count >= counter.max)
|
|
132
|
+
return;
|
|
133
|
+
let entries;
|
|
134
|
+
try {
|
|
135
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return; // Permission denied or other read errors
|
|
139
|
+
}
|
|
140
|
+
// Filter out hidden/ignored directories and sort (dirs first, then files)
|
|
141
|
+
const filtered = entries
|
|
142
|
+
.filter((e) => !e.name.startsWith(".") || e.name === ".cdoing")
|
|
143
|
+
.filter((e) => !ALWAYS_SKIP.has(e.name))
|
|
144
|
+
.sort((a, b) => {
|
|
145
|
+
// Directories first, then alphabetical
|
|
146
|
+
if (a.isDirectory() && !b.isDirectory())
|
|
147
|
+
return -1;
|
|
148
|
+
if (!a.isDirectory() && b.isDirectory())
|
|
149
|
+
return 1;
|
|
150
|
+
return a.name.localeCompare(b.name);
|
|
151
|
+
});
|
|
152
|
+
for (let i = 0; i < filtered.length; i++) {
|
|
153
|
+
if (counter.count >= counter.max) {
|
|
154
|
+
lines.push(`${prefix}... [truncated at ${counter.max} items]`);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const entry = filtered[i];
|
|
158
|
+
const isLast = i === filtered.length - 1;
|
|
159
|
+
const connector = isLast ? "└── " : "├── ";
|
|
160
|
+
const childPrefix = isLast ? " " : "│ ";
|
|
161
|
+
if (entry.isDirectory()) {
|
|
162
|
+
lines.push(`${prefix}${connector}${entry.name}/`);
|
|
163
|
+
counter.count++;
|
|
164
|
+
buildTree(path.join(dir, entry.name), prefix + childPrefix, maxDepth, currentDepth + 1, lines, counter);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
lines.push(`${prefix}${connector}${entry.name}`);
|
|
168
|
+
counter.count++;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/context-providers/tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Provider Types — Defines the contract for all context providers.
|
|
3
|
+
*
|
|
4
|
+
* Learning note: Using interfaces (not classes) keeps this flexible.
|
|
5
|
+
* Any object that satisfies these shapes can be a context provider,
|
|
6
|
+
* whether it's a simple object literal or a full class instance.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* The result returned by a context provider after resolving.
|
|
10
|
+
* Contains the formatted content ready to inject into the prompt.
|
|
11
|
+
*/
|
|
12
|
+
export interface ContextResult {
|
|
13
|
+
/** Human-readable label shown in the UI (e.g., "Terminal Output") */
|
|
14
|
+
label: string;
|
|
15
|
+
/** The actual content to inject into the conversation */
|
|
16
|
+
content: string;
|
|
17
|
+
/** Optional metadata for display purposes */
|
|
18
|
+
metadata?: {
|
|
19
|
+
source?: string;
|
|
20
|
+
truncated?: boolean;
|
|
21
|
+
itemCount?: number;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A context provider resolves an @ mention into content.
|
|
26
|
+
*
|
|
27
|
+
* Example: "@terminal" → last terminal output
|
|
28
|
+
* "@url https://example.com" → fetched page content
|
|
29
|
+
*/
|
|
30
|
+
export interface ContextProvider {
|
|
31
|
+
/** Unique identifier (e.g., "terminal", "open", "url") */
|
|
32
|
+
id: string;
|
|
33
|
+
/** The @ trigger keyword (e.g., "@terminal") */
|
|
34
|
+
trigger: string;
|
|
35
|
+
/** Short description shown in autocomplete */
|
|
36
|
+
description: string;
|
|
37
|
+
/**
|
|
38
|
+
* Whether this provider needs an argument after the trigger.
|
|
39
|
+
* E.g., "@url" needs a URL, but "@terminal" doesn't.
|
|
40
|
+
*/
|
|
41
|
+
requiresArg: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the context — fetch the actual content.
|
|
44
|
+
*
|
|
45
|
+
* @param arg - Optional argument (e.g., URL for @url provider)
|
|
46
|
+
* @param options - Runtime context (working dir, VS Code API, etc.)
|
|
47
|
+
* @returns The resolved context content
|
|
48
|
+
*/
|
|
49
|
+
resolve(arg?: string, options?: ContextResolveOptions): Promise<ContextResult>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Options passed to context providers at resolve time.
|
|
53
|
+
* Provides access to runtime environment without tight coupling.
|
|
54
|
+
*/
|
|
55
|
+
export interface ContextResolveOptions {
|
|
56
|
+
/** Current working directory */
|
|
57
|
+
workingDir?: string;
|
|
58
|
+
/** Open file paths (for @open provider) */
|
|
59
|
+
openFiles?: string[];
|
|
60
|
+
/** Recent terminal output (for @terminal provider) */
|
|
61
|
+
terminalOutput?: string;
|
|
62
|
+
/** Diagnostics/problems (for @problems provider) */
|
|
63
|
+
diagnostics?: Array<{
|
|
64
|
+
file: string;
|
|
65
|
+
line: number;
|
|
66
|
+
severity: "error" | "warning" | "info" | "hint";
|
|
67
|
+
message: string;
|
|
68
|
+
}>;
|
|
69
|
+
/** Max content length (chars) before truncation */
|
|
70
|
+
maxContentLength?: number;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context-providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IAEd,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAEhB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,EAAE,EAAE,MAAM,CAAC;IAEX,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAEhB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAChF;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,oDAAoD;IACpD,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;QAChD,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IAEH,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Context Provider Types — Defines the contract for all context providers.
|
|
4
|
+
*
|
|
5
|
+
* Learning note: Using interfaces (not classes) keeps this flexible.
|
|
6
|
+
* Any object that satisfies these shapes can be a context provider,
|
|
7
|
+
* whether it's a simple object literal or a full class instance.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
//# sourceMappingURL=types.js.map
|