@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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/context-providers/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL Context Provider — @url
|
|
3
|
+
*
|
|
4
|
+
* Fetches a web page and converts it to clean markdown for context.
|
|
5
|
+
* Reuses the existing web_fetch tool logic under the hood.
|
|
6
|
+
*
|
|
7
|
+
* Usage: @url https://docs.example.com/api
|
|
8
|
+
*
|
|
9
|
+
* How it works:
|
|
10
|
+
* 1. User types @url followed by a URL
|
|
11
|
+
* 2. We fetch the page HTML
|
|
12
|
+
* 3. Strip tags, scripts, styles → extract readable text
|
|
13
|
+
* 4. Format as markdown and inject into the conversation
|
|
14
|
+
*
|
|
15
|
+
* Learning note: This provider REQUIRES an argument (the URL).
|
|
16
|
+
* The `requiresArg` flag tells the UI to keep the input open
|
|
17
|
+
* until the user provides the URL after the @ trigger.
|
|
18
|
+
*/
|
|
19
|
+
import type { ContextProvider, ContextResult, ContextResolveOptions } from "./types";
|
|
20
|
+
export declare class UrlContextProvider implements ContextProvider {
|
|
21
|
+
id: string;
|
|
22
|
+
trigger: string;
|
|
23
|
+
description: string;
|
|
24
|
+
requiresArg: boolean;
|
|
25
|
+
resolve(arg?: string, options?: ContextResolveOptions): Promise<ContextResult>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/context-providers/url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAKrF,qBAAa,kBAAmB,YAAW,eAAe;IACxD,EAAE,SAAS;IACX,OAAO,SAAU;IACjB,WAAW,SAAuC;IAClD,WAAW,UAAQ;IAEb,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;CA8DrF"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* URL Context Provider — @url
|
|
4
|
+
*
|
|
5
|
+
* Fetches a web page and converts it to clean markdown for context.
|
|
6
|
+
* Reuses the existing web_fetch tool logic under the hood.
|
|
7
|
+
*
|
|
8
|
+
* Usage: @url https://docs.example.com/api
|
|
9
|
+
*
|
|
10
|
+
* How it works:
|
|
11
|
+
* 1. User types @url followed by a URL
|
|
12
|
+
* 2. We fetch the page HTML
|
|
13
|
+
* 3. Strip tags, scripts, styles → extract readable text
|
|
14
|
+
* 4. Format as markdown and inject into the conversation
|
|
15
|
+
*
|
|
16
|
+
* Learning note: This provider REQUIRES an argument (the URL).
|
|
17
|
+
* The `requiresArg` flag tells the UI to keep the input open
|
|
18
|
+
* until the user provides the URL after the @ trigger.
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.UrlContextProvider = void 0;
|
|
22
|
+
/** Max chars for fetched content */
|
|
23
|
+
const DEFAULT_MAX_CHARS = 15000;
|
|
24
|
+
class UrlContextProvider {
|
|
25
|
+
id = "url";
|
|
26
|
+
trigger = "@url";
|
|
27
|
+
description = "Fetch and attach web page content";
|
|
28
|
+
requiresArg = true;
|
|
29
|
+
async resolve(arg, options) {
|
|
30
|
+
if (!arg || !arg.trim()) {
|
|
31
|
+
return {
|
|
32
|
+
label: "URL",
|
|
33
|
+
content: "[Please provide a URL after @url, e.g.: @url https://docs.example.com]",
|
|
34
|
+
metadata: { source: "web" },
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const url = arg.trim();
|
|
38
|
+
const maxChars = options?.maxContentLength ?? DEFAULT_MAX_CHARS;
|
|
39
|
+
try {
|
|
40
|
+
// Fetch the URL content
|
|
41
|
+
const response = await fetch(url, {
|
|
42
|
+
headers: {
|
|
43
|
+
"User-Agent": "Cdoing-Agent/1.0 (Context Fetcher)",
|
|
44
|
+
"Accept": "text/html,text/plain,application/json",
|
|
45
|
+
},
|
|
46
|
+
signal: AbortSignal.timeout(15000), // 15 second timeout
|
|
47
|
+
});
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
return {
|
|
50
|
+
label: `URL: ${url}`,
|
|
51
|
+
content: `[Failed to fetch ${url}: HTTP ${response.status} ${response.statusText}]`,
|
|
52
|
+
metadata: { source: "web" },
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const contentType = response.headers.get("content-type") || "";
|
|
56
|
+
let body = await response.text();
|
|
57
|
+
// Convert HTML to readable text
|
|
58
|
+
if (contentType.includes("html")) {
|
|
59
|
+
body = htmlToText(body);
|
|
60
|
+
}
|
|
61
|
+
// Truncate if needed
|
|
62
|
+
let truncated = false;
|
|
63
|
+
if (body.length > maxChars) {
|
|
64
|
+
body = body.substring(0, maxChars);
|
|
65
|
+
truncated = true;
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
label: `URL: ${url}`,
|
|
69
|
+
content: `## Web Content: ${url}\n\n${body}${truncated ? "\n\n... [content truncated]" : ""}`,
|
|
70
|
+
metadata: {
|
|
71
|
+
source: url,
|
|
72
|
+
truncated,
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
78
|
+
return {
|
|
79
|
+
label: `URL: ${url}`,
|
|
80
|
+
content: `[Error fetching ${url}: ${message}]`,
|
|
81
|
+
metadata: { source: "web" },
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.UrlContextProvider = UrlContextProvider;
|
|
87
|
+
/**
|
|
88
|
+
* Convert HTML to readable plain text.
|
|
89
|
+
* Strips tags, scripts, styles, and normalizes whitespace.
|
|
90
|
+
*
|
|
91
|
+
* Learning note: This is a simple regex-based approach that works
|
|
92
|
+
* well enough for most pages. For production, you'd use a proper
|
|
93
|
+
* HTML parser like cheerio or jsdom.
|
|
94
|
+
*/
|
|
95
|
+
function htmlToText(html) {
|
|
96
|
+
return html
|
|
97
|
+
// Remove script and style blocks entirely
|
|
98
|
+
.replace(/<script[\s\S]*?<\/script>/gi, "")
|
|
99
|
+
.replace(/<style[\s\S]*?<\/style>/gi, "")
|
|
100
|
+
.replace(/<noscript[\s\S]*?<\/noscript>/gi, "")
|
|
101
|
+
// Convert common elements to markdown equivalents
|
|
102
|
+
.replace(/<h1[^>]*>(.*?)<\/h1>/gi, "\n# $1\n")
|
|
103
|
+
.replace(/<h2[^>]*>(.*?)<\/h2>/gi, "\n## $1\n")
|
|
104
|
+
.replace(/<h3[^>]*>(.*?)<\/h3>/gi, "\n### $1\n")
|
|
105
|
+
.replace(/<h[4-6][^>]*>(.*?)<\/h[4-6]>/gi, "\n#### $1\n")
|
|
106
|
+
.replace(/<li[^>]*>(.*?)<\/li>/gi, "- $1\n")
|
|
107
|
+
.replace(/<br\s*\/?>/gi, "\n")
|
|
108
|
+
.replace(/<p[^>]*>/gi, "\n")
|
|
109
|
+
.replace(/<\/p>/gi, "\n")
|
|
110
|
+
.replace(/<code[^>]*>(.*?)<\/code>/gi, "`$1`")
|
|
111
|
+
.replace(/<pre[^>]*>(.*?)<\/pre>/gis, "\n```\n$1\n```\n")
|
|
112
|
+
.replace(/<a[^>]*href="([^"]*)"[^>]*>(.*?)<\/a>/gi, "[$2]($1)")
|
|
113
|
+
.replace(/<strong[^>]*>(.*?)<\/strong>/gi, "**$1**")
|
|
114
|
+
.replace(/<b[^>]*>(.*?)<\/b>/gi, "**$1**")
|
|
115
|
+
.replace(/<em[^>]*>(.*?)<\/em>/gi, "*$1*")
|
|
116
|
+
.replace(/<i[^>]*>(.*?)<\/i>/gi, "*$1*")
|
|
117
|
+
// Strip remaining HTML tags
|
|
118
|
+
.replace(/<[^>]+>/g, "")
|
|
119
|
+
// Decode common HTML entities
|
|
120
|
+
.replace(/&/g, "&")
|
|
121
|
+
.replace(/</g, "<")
|
|
122
|
+
.replace(/>/g, ">")
|
|
123
|
+
.replace(/"/g, '"')
|
|
124
|
+
.replace(/'/g, "'")
|
|
125
|
+
.replace(/ /g, " ")
|
|
126
|
+
// Normalize whitespace
|
|
127
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
128
|
+
.replace(/[ \t]+/g, " ")
|
|
129
|
+
.trim();
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/context-providers/url.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AAIH,oCAAoC;AACpC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,MAAa,kBAAkB;IAC7B,EAAE,GAAG,KAAK,CAAC;IACX,OAAO,GAAG,MAAM,CAAC;IACjB,WAAW,GAAG,mCAAmC,CAAC;IAClD,WAAW,GAAG,IAAI,CAAC;IAEnB,KAAK,CAAC,OAAO,CAAC,GAAY,EAAE,OAA+B;QACzD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,wEAAwE;gBACjF,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;aAC5B,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,OAAO,EAAE,gBAAgB,IAAI,iBAAiB,CAAC;QAEhE,IAAI,CAAC;YACH,wBAAwB;YACxB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,OAAO,EAAE;oBACP,YAAY,EAAE,oCAAoC;oBAClD,QAAQ,EAAE,uCAAuC;iBAClD;gBACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,oBAAoB;aACzD,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO;oBACL,KAAK,EAAE,QAAQ,GAAG,EAAE;oBACpB,OAAO,EAAE,oBAAoB,GAAG,UAAU,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,GAAG;oBACnF,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;iBAC5B,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC/D,IAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEjC,gCAAgC;YAChC,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAED,qBAAqB;YACrB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC3B,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACnC,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,QAAQ,GAAG,EAAE;gBACpB,OAAO,EAAE,mBAAmB,GAAG,OAAO,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC7F,QAAQ,EAAE;oBACR,MAAM,EAAE,GAAG;oBACX,SAAS;iBACV;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO;gBACL,KAAK,EAAE,QAAQ,GAAG,EAAE;gBACpB,OAAO,EAAE,mBAAmB,GAAG,KAAK,OAAO,GAAG;gBAC9C,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;aAC5B,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AApED,gDAoEC;AAED;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;QACT,0CAA0C;SACzC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;SAC1C,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;SACxC,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC;QAC/C,kDAAkD;SACjD,OAAO,CAAC,wBAAwB,EAAE,UAAU,CAAC;SAC7C,OAAO,CAAC,wBAAwB,EAAE,WAAW,CAAC;SAC9C,OAAO,CAAC,wBAAwB,EAAE,YAAY,CAAC;SAC/C,OAAO,CAAC,gCAAgC,EAAE,aAAa,CAAC;SACxD,OAAO,CAAC,wBAAwB,EAAE,QAAQ,CAAC;SAC3C,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;SAC7B,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;SAC3B,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;SACxB,OAAO,CAAC,4BAA4B,EAAE,MAAM,CAAC;SAC7C,OAAO,CAAC,2BAA2B,EAAE,kBAAkB,CAAC;SACxD,OAAO,CAAC,yCAAyC,EAAE,UAAU,CAAC;SAC9D,OAAO,CAAC,gCAAgC,EAAE,QAAQ,CAAC;SACnD,OAAO,CAAC,sBAAsB,EAAE,QAAQ,CAAC;SACzC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC;SACzC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC;QACxC,4BAA4B;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QACxB,8BAA8B;SAC7B,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;QACxB,uBAAuB;SACtB,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,IAAI,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effort Level Control — Adjusts how deeply the agent analyzes requests.
|
|
3
|
+
*
|
|
4
|
+
* Inspired by Claude Code's --effort flag and Cursor's MAX mode.
|
|
5
|
+
*
|
|
6
|
+
* Effort levels:
|
|
7
|
+
* - low: Quick responses, minimal analysis. Good for simple questions.
|
|
8
|
+
* - medium: Default. Balanced analysis and speed.
|
|
9
|
+
* - high: Deep analysis, reads more files, considers edge cases.
|
|
10
|
+
* - max: Extended thinking, comprehensive analysis, multiple passes.
|
|
11
|
+
*
|
|
12
|
+
* How it affects behavior:
|
|
13
|
+
* - System prompt instructions change based on level
|
|
14
|
+
* - Temperature may be adjusted
|
|
15
|
+
* - Token limits are scaled
|
|
16
|
+
* - The agent is instructed to use more/fewer tools
|
|
17
|
+
*
|
|
18
|
+
* Learning note: This is essentially a UX abstraction over multiple
|
|
19
|
+
* model parameters. Instead of asking users to tweak temperature,
|
|
20
|
+
* max tokens, and system prompt, they just say "try harder" or
|
|
21
|
+
* "be quick about it".
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Available effort levels, from quickest to most thorough.
|
|
25
|
+
*/
|
|
26
|
+
export type EffortLevel = "low" | "medium" | "high" | "max";
|
|
27
|
+
/**
|
|
28
|
+
* Configuration values for each effort level.
|
|
29
|
+
*/
|
|
30
|
+
export interface EffortConfig {
|
|
31
|
+
/** How this level affects the system prompt */
|
|
32
|
+
systemPromptAddition: string;
|
|
33
|
+
/** Temperature override (null = use default) */
|
|
34
|
+
temperature: number | null;
|
|
35
|
+
/** Max tokens multiplier (1.0 = default) */
|
|
36
|
+
maxTokensMultiplier: number;
|
|
37
|
+
/** Max agent turns multiplier */
|
|
38
|
+
maxTurnsMultiplier: number;
|
|
39
|
+
/** Human-readable description */
|
|
40
|
+
description: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Manages the current effort level and provides configuration.
|
|
44
|
+
*/
|
|
45
|
+
export declare class EffortManager {
|
|
46
|
+
private level;
|
|
47
|
+
/**
|
|
48
|
+
* Set the effort level.
|
|
49
|
+
*/
|
|
50
|
+
setLevel(level: EffortLevel): void;
|
|
51
|
+
/**
|
|
52
|
+
* Get the current effort level.
|
|
53
|
+
*/
|
|
54
|
+
getLevel(): EffortLevel;
|
|
55
|
+
/**
|
|
56
|
+
* Get the configuration for the current effort level.
|
|
57
|
+
*/
|
|
58
|
+
getConfig(): EffortConfig;
|
|
59
|
+
/**
|
|
60
|
+
* Get the system prompt addition for the current level.
|
|
61
|
+
* Returns empty string for medium (default) level.
|
|
62
|
+
*/
|
|
63
|
+
getSystemPromptAddition(): string;
|
|
64
|
+
/**
|
|
65
|
+
* Get all available levels with descriptions.
|
|
66
|
+
* Useful for displaying in help or settings UI.
|
|
67
|
+
*/
|
|
68
|
+
static getAllLevels(): Array<{
|
|
69
|
+
level: EffortLevel;
|
|
70
|
+
description: string;
|
|
71
|
+
}>;
|
|
72
|
+
/**
|
|
73
|
+
* Parse an effort level from a string (case-insensitive).
|
|
74
|
+
* Returns null if the string is not a valid level.
|
|
75
|
+
*/
|
|
76
|
+
static parse(input: string): EffortLevel | null;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effort/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,oBAAoB,EAAE,MAAM,CAAC;IAE7B,gDAAgD;IAChD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,4CAA4C;IAC5C,mBAAmB,EAAE,MAAM,CAAC;IAE5B,iCAAiC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAE3B,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAsED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAyB;IAEtC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAOlC;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;;OAGG;IACH,uBAAuB,IAAI,MAAM;IAIjC;;;OAGG;IACH,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAOzE;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;CAOhD"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Effort Level Control — Adjusts how deeply the agent analyzes requests.
|
|
4
|
+
*
|
|
5
|
+
* Inspired by Claude Code's --effort flag and Cursor's MAX mode.
|
|
6
|
+
*
|
|
7
|
+
* Effort levels:
|
|
8
|
+
* - low: Quick responses, minimal analysis. Good for simple questions.
|
|
9
|
+
* - medium: Default. Balanced analysis and speed.
|
|
10
|
+
* - high: Deep analysis, reads more files, considers edge cases.
|
|
11
|
+
* - max: Extended thinking, comprehensive analysis, multiple passes.
|
|
12
|
+
*
|
|
13
|
+
* How it affects behavior:
|
|
14
|
+
* - System prompt instructions change based on level
|
|
15
|
+
* - Temperature may be adjusted
|
|
16
|
+
* - Token limits are scaled
|
|
17
|
+
* - The agent is instructed to use more/fewer tools
|
|
18
|
+
*
|
|
19
|
+
* Learning note: This is essentially a UX abstraction over multiple
|
|
20
|
+
* model parameters. Instead of asking users to tweak temperature,
|
|
21
|
+
* max tokens, and system prompt, they just say "try harder" or
|
|
22
|
+
* "be quick about it".
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.EffortManager = void 0;
|
|
26
|
+
/**
|
|
27
|
+
* Predefined configurations for each effort level.
|
|
28
|
+
*
|
|
29
|
+
* Learning note: These are tuned to balance speed vs thoroughness.
|
|
30
|
+
* Lower effort = faster, cheaper, more concise.
|
|
31
|
+
* Higher effort = slower, more expensive, more comprehensive.
|
|
32
|
+
*/
|
|
33
|
+
const EFFORT_CONFIGS = {
|
|
34
|
+
low: {
|
|
35
|
+
systemPromptAddition: [
|
|
36
|
+
"# Effort: Low",
|
|
37
|
+
"Be very concise. Give the shortest correct answer.",
|
|
38
|
+
"- Skip detailed explanations unless asked",
|
|
39
|
+
"- Use the fewest tools possible",
|
|
40
|
+
"- Don't read files you don't need",
|
|
41
|
+
"- One-sentence summaries are fine",
|
|
42
|
+
"- Prefer quick fixes over comprehensive solutions",
|
|
43
|
+
].join("\n"),
|
|
44
|
+
temperature: null,
|
|
45
|
+
maxTokensMultiplier: 0.5,
|
|
46
|
+
maxTurnsMultiplier: 0.5,
|
|
47
|
+
description: "Quick, minimal analysis",
|
|
48
|
+
},
|
|
49
|
+
medium: {
|
|
50
|
+
systemPromptAddition: "", // Default behavior, no additions needed
|
|
51
|
+
temperature: null,
|
|
52
|
+
maxTokensMultiplier: 1.0,
|
|
53
|
+
maxTurnsMultiplier: 1.0,
|
|
54
|
+
description: "Balanced (default)",
|
|
55
|
+
},
|
|
56
|
+
high: {
|
|
57
|
+
systemPromptAddition: [
|
|
58
|
+
"# Effort: High",
|
|
59
|
+
"Take extra care with this task. Be thorough.",
|
|
60
|
+
"- Read all relevant files before making changes",
|
|
61
|
+
"- Consider edge cases and error scenarios",
|
|
62
|
+
"- Verify your changes compile/run correctly",
|
|
63
|
+
"- Explain your reasoning for non-obvious decisions",
|
|
64
|
+
"- Search for related code that might need updating",
|
|
65
|
+
].join("\n"),
|
|
66
|
+
temperature: null,
|
|
67
|
+
maxTokensMultiplier: 1.5,
|
|
68
|
+
maxTurnsMultiplier: 2.0,
|
|
69
|
+
description: "Deep analysis, thorough",
|
|
70
|
+
},
|
|
71
|
+
max: {
|
|
72
|
+
systemPromptAddition: [
|
|
73
|
+
"# Effort: Maximum",
|
|
74
|
+
"This is a critical task. Use maximum thoroughness.",
|
|
75
|
+
"- Exhaustively search the codebase for context",
|
|
76
|
+
"- Read ALL related files, tests, and documentation",
|
|
77
|
+
"- Consider architectural implications",
|
|
78
|
+
"- Check for breaking changes across the project",
|
|
79
|
+
"- Run tests and verify everything works",
|
|
80
|
+
"- Think step-by-step before making changes",
|
|
81
|
+
"- Consider multiple approaches and pick the best one",
|
|
82
|
+
"- Add proper error handling and edge case coverage",
|
|
83
|
+
].join("\n"),
|
|
84
|
+
temperature: null,
|
|
85
|
+
maxTokensMultiplier: 2.0,
|
|
86
|
+
maxTurnsMultiplier: 3.0,
|
|
87
|
+
description: "Maximum thoroughness, extended thinking",
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Manages the current effort level and provides configuration.
|
|
92
|
+
*/
|
|
93
|
+
class EffortManager {
|
|
94
|
+
level = "medium";
|
|
95
|
+
/**
|
|
96
|
+
* Set the effort level.
|
|
97
|
+
*/
|
|
98
|
+
setLevel(level) {
|
|
99
|
+
if (!EFFORT_CONFIGS[level]) {
|
|
100
|
+
throw new Error(`Invalid effort level: ${level}. Use: low, medium, high, max`);
|
|
101
|
+
}
|
|
102
|
+
this.level = level;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get the current effort level.
|
|
106
|
+
*/
|
|
107
|
+
getLevel() {
|
|
108
|
+
return this.level;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get the configuration for the current effort level.
|
|
112
|
+
*/
|
|
113
|
+
getConfig() {
|
|
114
|
+
return EFFORT_CONFIGS[this.level];
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get the system prompt addition for the current level.
|
|
118
|
+
* Returns empty string for medium (default) level.
|
|
119
|
+
*/
|
|
120
|
+
getSystemPromptAddition() {
|
|
121
|
+
return EFFORT_CONFIGS[this.level].systemPromptAddition;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get all available levels with descriptions.
|
|
125
|
+
* Useful for displaying in help or settings UI.
|
|
126
|
+
*/
|
|
127
|
+
static getAllLevels() {
|
|
128
|
+
return Object.entries(EFFORT_CONFIGS).map(([level, config]) => ({
|
|
129
|
+
level: level,
|
|
130
|
+
description: config.description,
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Parse an effort level from a string (case-insensitive).
|
|
135
|
+
* Returns null if the string is not a valid level.
|
|
136
|
+
*/
|
|
137
|
+
static parse(input) {
|
|
138
|
+
const normalized = input.toLowerCase().trim();
|
|
139
|
+
if (normalized in EFFORT_CONFIGS) {
|
|
140
|
+
return normalized;
|
|
141
|
+
}
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.EffortManager = EffortManager;
|
|
146
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/effort/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AA2BH;;;;;;GAMG;AACH,MAAM,cAAc,GAAsC;IACxD,GAAG,EAAE;QACH,oBAAoB,EAAE;YACpB,eAAe;YACf,oDAAoD;YACpD,2CAA2C;YAC3C,iCAAiC;YACjC,mCAAmC;YACnC,mCAAmC;YACnC,mDAAmD;SACpD,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE,IAAI;QACjB,mBAAmB,EAAE,GAAG;QACxB,kBAAkB,EAAE,GAAG;QACvB,WAAW,EAAE,yBAAyB;KACvC;IAED,MAAM,EAAE;QACN,oBAAoB,EAAE,EAAE,EAAG,wCAAwC;QACnE,WAAW,EAAE,IAAI;QACjB,mBAAmB,EAAE,GAAG;QACxB,kBAAkB,EAAE,GAAG;QACvB,WAAW,EAAE,oBAAoB;KAClC;IAED,IAAI,EAAE;QACJ,oBAAoB,EAAE;YACpB,gBAAgB;YAChB,8CAA8C;YAC9C,iDAAiD;YACjD,2CAA2C;YAC3C,6CAA6C;YAC7C,oDAAoD;YACpD,oDAAoD;SACrD,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE,IAAI;QACjB,mBAAmB,EAAE,GAAG;QACxB,kBAAkB,EAAE,GAAG;QACvB,WAAW,EAAE,yBAAyB;KACvC;IAED,GAAG,EAAE;QACH,oBAAoB,EAAE;YACpB,mBAAmB;YACnB,oDAAoD;YACpD,gDAAgD;YAChD,oDAAoD;YACpD,uCAAuC;YACvC,iDAAiD;YACjD,yCAAyC;YACzC,4CAA4C;YAC5C,sDAAsD;YACtD,oDAAoD;SACrD,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE,IAAI;QACjB,mBAAmB,EAAE,GAAG;QACxB,kBAAkB,EAAE,GAAG;QACvB,WAAW,EAAE,yCAAyC;KACvD;CACF,CAAC;AAEF;;GAEG;AACH,MAAa,aAAa;IAChB,KAAK,GAAgB,QAAQ,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,KAAkB;QACzB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,+BAA+B,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,uBAAuB;QACrB,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC;IACzD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,YAAY;QACjB,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,KAAK,EAAE,KAAoB;YAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,UAAU,IAAI,cAAc,EAAE,CAAC;YACjC,OAAO,UAAyB,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAzDD,sCAyDC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hooks System — run user-configured shell commands before/after tool execution.
|
|
3
|
+
*
|
|
4
|
+
* Configuration stored in ~/.cdoing/hooks.json or .cdoing/hooks.json (project-level).
|
|
5
|
+
*
|
|
6
|
+
* Example hooks.json:
|
|
7
|
+
* {
|
|
8
|
+
* "hooks": [
|
|
9
|
+
* { "event": "pre:file_write", "command": "echo 'Writing file: {{file_path}}'" },
|
|
10
|
+
* { "event": "post:shell_exec", "command": "echo 'Command finished'" },
|
|
11
|
+
* { "event": "pre:*", "command": "echo 'Tool called: {{tool_name}}'" }
|
|
12
|
+
* ]
|
|
13
|
+
* }
|
|
14
|
+
*/
|
|
15
|
+
export interface HookDefinition {
|
|
16
|
+
/** Event pattern: "pre:tool_name", "post:tool_name", "pre:*", "post:*" */
|
|
17
|
+
event: string;
|
|
18
|
+
/** Shell command to execute. Supports {{variable}} placeholders. */
|
|
19
|
+
command: string;
|
|
20
|
+
/** Timeout in ms (default: 10000) */
|
|
21
|
+
timeout?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface HookResult {
|
|
24
|
+
hook: HookDefinition;
|
|
25
|
+
success: boolean;
|
|
26
|
+
output: string;
|
|
27
|
+
error?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare class HookManager {
|
|
30
|
+
private hooks;
|
|
31
|
+
private workingDir;
|
|
32
|
+
constructor(workingDir: string);
|
|
33
|
+
setWorkingDir(dir: string): void;
|
|
34
|
+
private loadHooks;
|
|
35
|
+
private loadFromFile;
|
|
36
|
+
/** Find hooks matching a given event */
|
|
37
|
+
private findHooks;
|
|
38
|
+
/** Run all hooks for an event */
|
|
39
|
+
runHooks(event: string, variables: Record<string, string>): Promise<HookResult[]>;
|
|
40
|
+
/** Execute a single hook */
|
|
41
|
+
private executeHook;
|
|
42
|
+
/** Check if any hooks are configured */
|
|
43
|
+
hasHooks(): boolean;
|
|
44
|
+
/** Get all configured hooks */
|
|
45
|
+
getHooks(): ReadonlyArray<HookDefinition>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAK9B,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKhC,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,YAAY;IAapB,wCAAwC;IACxC,OAAO,CAAC,SAAS;IAQjB,iCAAiC;IAC3B,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,UAAU,EAAE,CAAC;IAYxB,4BAA4B;IAC5B,OAAO,CAAC,WAAW;IAqCnB,wCAAwC;IACxC,QAAQ,IAAI,OAAO;IAInB,+BAA+B;IAC/B,QAAQ,IAAI,aAAa,CAAC,cAAc,CAAC;CAG1C"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hooks System — run user-configured shell commands before/after tool execution.
|
|
4
|
+
*
|
|
5
|
+
* Configuration stored in ~/.cdoing/hooks.json or .cdoing/hooks.json (project-level).
|
|
6
|
+
*
|
|
7
|
+
* Example hooks.json:
|
|
8
|
+
* {
|
|
9
|
+
* "hooks": [
|
|
10
|
+
* { "event": "pre:file_write", "command": "echo 'Writing file: {{file_path}}'" },
|
|
11
|
+
* { "event": "post:shell_exec", "command": "echo 'Command finished'" },
|
|
12
|
+
* { "event": "pre:*", "command": "echo 'Tool called: {{tool_name}}'" }
|
|
13
|
+
* ]
|
|
14
|
+
* }
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
33
|
+
var ownKeys = function(o) {
|
|
34
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
35
|
+
var ar = [];
|
|
36
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
37
|
+
return ar;
|
|
38
|
+
};
|
|
39
|
+
return ownKeys(o);
|
|
40
|
+
};
|
|
41
|
+
return function (mod) {
|
|
42
|
+
if (mod && mod.__esModule) return mod;
|
|
43
|
+
var result = {};
|
|
44
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
45
|
+
__setModuleDefault(result, mod);
|
|
46
|
+
return result;
|
|
47
|
+
};
|
|
48
|
+
})();
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.HookManager = void 0;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const os = __importStar(require("os"));
|
|
54
|
+
const child_process_1 = require("child_process");
|
|
55
|
+
class HookManager {
|
|
56
|
+
hooks = [];
|
|
57
|
+
workingDir;
|
|
58
|
+
constructor(workingDir) {
|
|
59
|
+
this.workingDir = workingDir;
|
|
60
|
+
this.loadHooks();
|
|
61
|
+
}
|
|
62
|
+
setWorkingDir(dir) {
|
|
63
|
+
this.workingDir = dir;
|
|
64
|
+
this.loadHooks();
|
|
65
|
+
}
|
|
66
|
+
loadHooks() {
|
|
67
|
+
this.hooks = [];
|
|
68
|
+
// Load global hooks
|
|
69
|
+
const globalFile = path.join(os.homedir(), ".cdoing", "hooks.json");
|
|
70
|
+
this.loadFromFile(globalFile);
|
|
71
|
+
// Load project hooks (overrides/supplements global)
|
|
72
|
+
const projectFile = path.join(this.workingDir, ".cdoing", "hooks.json");
|
|
73
|
+
this.loadFromFile(projectFile);
|
|
74
|
+
}
|
|
75
|
+
loadFromFile(filePath) {
|
|
76
|
+
try {
|
|
77
|
+
if (fs.existsSync(filePath)) {
|
|
78
|
+
const data = JSON.parse(fs.readFileSync(filePath, "utf-8"));
|
|
79
|
+
if (Array.isArray(data.hooks)) {
|
|
80
|
+
this.hooks.push(...data.hooks);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// skip invalid files
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** Find hooks matching a given event */
|
|
89
|
+
findHooks(event) {
|
|
90
|
+
const [phase, toolName] = event.split(":");
|
|
91
|
+
return this.hooks.filter((h) => {
|
|
92
|
+
const [hPhase, hTool] = h.event.split(":");
|
|
93
|
+
return hPhase === phase && (hTool === "*" || hTool === toolName);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/** Run all hooks for an event */
|
|
97
|
+
async runHooks(event, variables) {
|
|
98
|
+
const matching = this.findHooks(event);
|
|
99
|
+
if (matching.length === 0)
|
|
100
|
+
return [];
|
|
101
|
+
const results = [];
|
|
102
|
+
for (const hook of matching) {
|
|
103
|
+
const result = await this.executeHook(hook, variables);
|
|
104
|
+
results.push(result);
|
|
105
|
+
}
|
|
106
|
+
return results;
|
|
107
|
+
}
|
|
108
|
+
/** Execute a single hook */
|
|
109
|
+
executeHook(hook, variables) {
|
|
110
|
+
// Replace {{variable}} placeholders
|
|
111
|
+
let command = hook.command;
|
|
112
|
+
for (const [key, value] of Object.entries(variables)) {
|
|
113
|
+
command = command.replace(new RegExp(`\\{\\{${key}\\}\\}`, "g"), value);
|
|
114
|
+
}
|
|
115
|
+
const timeout = hook.timeout || 10000;
|
|
116
|
+
return new Promise((resolve) => {
|
|
117
|
+
(0, child_process_1.exec)(command, {
|
|
118
|
+
cwd: this.workingDir,
|
|
119
|
+
timeout,
|
|
120
|
+
maxBuffer: 1024 * 1024,
|
|
121
|
+
env: { ...process.env },
|
|
122
|
+
}, (error, stdout, stderr) => {
|
|
123
|
+
if (error) {
|
|
124
|
+
resolve({
|
|
125
|
+
hook,
|
|
126
|
+
success: false,
|
|
127
|
+
output: stdout || "",
|
|
128
|
+
error: stderr || error.message,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
resolve({
|
|
133
|
+
hook,
|
|
134
|
+
success: true,
|
|
135
|
+
output: (stdout || "").trim(),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/** Check if any hooks are configured */
|
|
142
|
+
hasHooks() {
|
|
143
|
+
return this.hooks.length > 0;
|
|
144
|
+
}
|
|
145
|
+
/** Get all configured hooks */
|
|
146
|
+
getHooks() {
|
|
147
|
+
return this.hooks;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.HookManager = HookManager;
|
|
151
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
|