@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
package/dist/oauth.js
ADDED
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OAuth 2.0 (PKCE) for Claude — Shared Core Module
|
|
4
|
+
*
|
|
5
|
+
* All credential storage, token management, and OAuth flow logic lives here.
|
|
6
|
+
* Both CLI and VS Code extension import from this module.
|
|
7
|
+
*
|
|
8
|
+
* Credential storage:
|
|
9
|
+
* - macOS: encrypted Keychain via `security` CLI
|
|
10
|
+
* - Linux: libsecret via `secret-tool` if available, else file fallback
|
|
11
|
+
* - Windows: Windows Credential Manager via `cmdkey`, else file fallback
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.saveOAuthTokens = saveOAuthTokens;
|
|
48
|
+
exports.loadOAuthTokens = loadOAuthTokens;
|
|
49
|
+
exports.clearOAuthTokens = clearOAuthTokens;
|
|
50
|
+
exports.isOAuthExpired = isOAuthExpired;
|
|
51
|
+
exports.refreshAccessToken = refreshAccessToken;
|
|
52
|
+
exports.resolveOAuthToken = resolveOAuthToken;
|
|
53
|
+
exports.generateOAuthUrl = generateOAuthUrl;
|
|
54
|
+
exports.exchangeOAuthCode = exchangeOAuthCode;
|
|
55
|
+
exports.getOAuthStatus = getOAuthStatus;
|
|
56
|
+
const crypto = __importStar(require("crypto"));
|
|
57
|
+
const fs = __importStar(require("fs"));
|
|
58
|
+
const path = __importStar(require("path"));
|
|
59
|
+
const os = __importStar(require("os"));
|
|
60
|
+
const child_process_1 = require("child_process");
|
|
61
|
+
const CONFIG_DIR = path.join(os.homedir(), ".cdoing");
|
|
62
|
+
const KEYCHAIN_SERVICE = "cdoing-agent";
|
|
63
|
+
const KEYCHAIN_ACCOUNT = "oauth-tokens";
|
|
64
|
+
// Claude OAuth endpoints (matching Claude Code CLI)
|
|
65
|
+
const CLAUDE_AUTH_URL = "https://claude.ai/oauth/authorize";
|
|
66
|
+
const CLAUDE_TOKEN_URL = "https://console.anthropic.com/v1/oauth/token";
|
|
67
|
+
const CLAUDE_REDIRECT_URI = "https://console.anthropic.com/oauth/code/callback";
|
|
68
|
+
const CLAUDE_CLIENT_ID = "9d1c250a-e61b-44d9-88ed-5944d1962f5e";
|
|
69
|
+
const SCOPES = "org:create_api_key user:profile user:inference";
|
|
70
|
+
// ── PKCE helpers ─────────────────────────────────────────
|
|
71
|
+
function generateCodeVerifier() {
|
|
72
|
+
return crypto.randomBytes(32).toString("base64url");
|
|
73
|
+
}
|
|
74
|
+
function generateCodeChallenge(verifier) {
|
|
75
|
+
return crypto.createHash("sha256").update(verifier).digest("base64url");
|
|
76
|
+
}
|
|
77
|
+
// ── Secure credential storage ────────────────────────────
|
|
78
|
+
function storeSecret(value) {
|
|
79
|
+
const platform = process.platform;
|
|
80
|
+
try {
|
|
81
|
+
if (platform === "darwin") {
|
|
82
|
+
try {
|
|
83
|
+
(0, child_process_1.execSync)(`security delete-generic-password -s "${KEYCHAIN_SERVICE}" -a "${KEYCHAIN_ACCOUNT}" 2>/dev/null`, { stdio: "ignore" });
|
|
84
|
+
}
|
|
85
|
+
catch { }
|
|
86
|
+
(0, child_process_1.execSync)(`security add-generic-password -s "${KEYCHAIN_SERVICE}" -a "${KEYCHAIN_ACCOUNT}" -w "${value.replace(/"/g, '\\"')}" -U`, { stdio: "ignore" });
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (platform === "linux") {
|
|
90
|
+
try {
|
|
91
|
+
(0, child_process_1.execSync)(`echo -n "${value.replace(/"/g, '\\"')}" | secret-tool store --label="Cdoing Agent OAuth" service "${KEYCHAIN_SERVICE}" account "${KEYCHAIN_ACCOUNT}"`, { stdio: "ignore" });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
catch { }
|
|
95
|
+
}
|
|
96
|
+
if (platform === "win32") {
|
|
97
|
+
try {
|
|
98
|
+
(0, child_process_1.execSync)(`cmdkey /generic:"${KEYCHAIN_SERVICE}" /user:"${KEYCHAIN_ACCOUNT}" /pass:"${value.replace(/"/g, '""')}"`, { stdio: "ignore" });
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
catch { }
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch { }
|
|
105
|
+
storeSecretToFile(value);
|
|
106
|
+
}
|
|
107
|
+
function loadSecret() {
|
|
108
|
+
const platform = process.platform;
|
|
109
|
+
try {
|
|
110
|
+
if (platform === "darwin") {
|
|
111
|
+
const result = (0, child_process_1.execSync)(`security find-generic-password -s "${KEYCHAIN_SERVICE}" -a "${KEYCHAIN_ACCOUNT}" -w 2>/dev/null`, { encoding: "utf-8" });
|
|
112
|
+
return result.trim();
|
|
113
|
+
}
|
|
114
|
+
if (platform === "linux") {
|
|
115
|
+
try {
|
|
116
|
+
const result = (0, child_process_1.execSync)(`secret-tool lookup service "${KEYCHAIN_SERVICE}" account "${KEYCHAIN_ACCOUNT}" 2>/dev/null`, { encoding: "utf-8" });
|
|
117
|
+
return result.trim() || null;
|
|
118
|
+
}
|
|
119
|
+
catch { }
|
|
120
|
+
}
|
|
121
|
+
if (platform === "win32") {
|
|
122
|
+
try {
|
|
123
|
+
const result = (0, child_process_1.execSync)(`cmdkey /list:"${KEYCHAIN_SERVICE}"`, { encoding: "utf-8" });
|
|
124
|
+
if (result.includes(KEYCHAIN_SERVICE)) {
|
|
125
|
+
return loadSecretFromFile();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch { }
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch { }
|
|
132
|
+
return loadSecretFromFile();
|
|
133
|
+
}
|
|
134
|
+
function deleteSecret() {
|
|
135
|
+
const platform = process.platform;
|
|
136
|
+
try {
|
|
137
|
+
if (platform === "darwin") {
|
|
138
|
+
(0, child_process_1.execSync)(`security delete-generic-password -s "${KEYCHAIN_SERVICE}" -a "${KEYCHAIN_ACCOUNT}" 2>/dev/null`, { stdio: "ignore" });
|
|
139
|
+
}
|
|
140
|
+
else if (platform === "linux") {
|
|
141
|
+
(0, child_process_1.execSync)(`secret-tool clear service "${KEYCHAIN_SERVICE}" account "${KEYCHAIN_ACCOUNT}" 2>/dev/null`, { stdio: "ignore" });
|
|
142
|
+
}
|
|
143
|
+
else if (platform === "win32") {
|
|
144
|
+
(0, child_process_1.execSync)(`cmdkey /delete:"${KEYCHAIN_SERVICE}" 2>nul`, { stdio: "ignore" });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch { }
|
|
148
|
+
deleteSecretFile();
|
|
149
|
+
}
|
|
150
|
+
// ── File-based fallback (AES-256-CBC) ────────────────────
|
|
151
|
+
function deriveFileKey() {
|
|
152
|
+
const machineId = os.hostname() + os.userInfo().username;
|
|
153
|
+
return crypto.createHash("sha256").update(machineId).digest();
|
|
154
|
+
}
|
|
155
|
+
function getSecretFilePath() {
|
|
156
|
+
return path.join(CONFIG_DIR, ".oauth-tokens.enc");
|
|
157
|
+
}
|
|
158
|
+
function storeSecretToFile(value) {
|
|
159
|
+
if (!fs.existsSync(CONFIG_DIR))
|
|
160
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
161
|
+
const key = deriveFileKey();
|
|
162
|
+
const iv = crypto.randomBytes(16);
|
|
163
|
+
const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
|
|
164
|
+
let encrypted = cipher.update(value, "utf-8", "hex");
|
|
165
|
+
encrypted += cipher.final("hex");
|
|
166
|
+
fs.writeFileSync(getSecretFilePath(), iv.toString("hex") + ":" + encrypted, { mode: 0o600 });
|
|
167
|
+
}
|
|
168
|
+
function loadSecretFromFile() {
|
|
169
|
+
try {
|
|
170
|
+
const filePath = getSecretFilePath();
|
|
171
|
+
if (!fs.existsSync(filePath))
|
|
172
|
+
return null;
|
|
173
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
174
|
+
const [ivHex, encrypted] = raw.split(":");
|
|
175
|
+
if (!ivHex || !encrypted)
|
|
176
|
+
return null;
|
|
177
|
+
const key = deriveFileKey();
|
|
178
|
+
const decipher = crypto.createDecipheriv("aes-256-cbc", key, Buffer.from(ivHex, "hex"));
|
|
179
|
+
let decrypted = decipher.update(encrypted, "hex", "utf-8");
|
|
180
|
+
decrypted += decipher.final("utf-8");
|
|
181
|
+
return decrypted;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function deleteSecretFile() {
|
|
188
|
+
try {
|
|
189
|
+
const filePath = getSecretFilePath();
|
|
190
|
+
if (fs.existsSync(filePath))
|
|
191
|
+
fs.unlinkSync(filePath);
|
|
192
|
+
}
|
|
193
|
+
catch { }
|
|
194
|
+
}
|
|
195
|
+
// ── Token storage ────────────────────────────────────────
|
|
196
|
+
function saveOAuthTokens(tokens) {
|
|
197
|
+
storeSecret(JSON.stringify({ ...tokens, saved_at: Date.now() }));
|
|
198
|
+
}
|
|
199
|
+
function loadOAuthTokens() {
|
|
200
|
+
const raw = loadSecret();
|
|
201
|
+
if (!raw)
|
|
202
|
+
return null;
|
|
203
|
+
try {
|
|
204
|
+
const parsed = JSON.parse(raw);
|
|
205
|
+
return parsed.access_token ? parsed : null;
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function clearOAuthTokens() {
|
|
212
|
+
deleteSecret();
|
|
213
|
+
}
|
|
214
|
+
function isOAuthExpired(tokens) {
|
|
215
|
+
if (!tokens.expires_at)
|
|
216
|
+
return false;
|
|
217
|
+
return Date.now() >= tokens.expires_at;
|
|
218
|
+
}
|
|
219
|
+
// ── Token refresh ────────────────────────────────────────
|
|
220
|
+
async function refreshAccessToken(refreshToken) {
|
|
221
|
+
try {
|
|
222
|
+
const response = await fetch(CLAUDE_TOKEN_URL, {
|
|
223
|
+
method: "POST",
|
|
224
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
225
|
+
body: new URLSearchParams({
|
|
226
|
+
grant_type: "refresh_token",
|
|
227
|
+
refresh_token: refreshToken,
|
|
228
|
+
client_id: CLAUDE_CLIENT_ID,
|
|
229
|
+
}).toString(),
|
|
230
|
+
});
|
|
231
|
+
if (!response.ok)
|
|
232
|
+
return null;
|
|
233
|
+
const data = (await response.json());
|
|
234
|
+
const tokens = {
|
|
235
|
+
access_token: data.access_token,
|
|
236
|
+
refresh_token: data.refresh_token || refreshToken,
|
|
237
|
+
expires_at: data.expires_in ? Date.now() + data.expires_in * 1000 : undefined,
|
|
238
|
+
token_type: data.token_type || "Bearer",
|
|
239
|
+
};
|
|
240
|
+
saveOAuthTokens(tokens);
|
|
241
|
+
return tokens;
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// ── Resolve token (with auto-refresh) ────────────────────
|
|
248
|
+
async function resolveOAuthToken() {
|
|
249
|
+
const tokens = loadOAuthTokens();
|
|
250
|
+
if (!tokens)
|
|
251
|
+
return null;
|
|
252
|
+
if (isOAuthExpired(tokens) && tokens.refresh_token) {
|
|
253
|
+
const refreshed = await refreshAccessToken(tokens.refresh_token);
|
|
254
|
+
return refreshed ? refreshed.access_token : null;
|
|
255
|
+
}
|
|
256
|
+
return tokens.access_token;
|
|
257
|
+
}
|
|
258
|
+
// ── OAuth URL generation ─────────────────────────────────
|
|
259
|
+
function generateOAuthUrl() {
|
|
260
|
+
const codeVerifier = generateCodeVerifier();
|
|
261
|
+
const codeChallenge = generateCodeChallenge(codeVerifier);
|
|
262
|
+
const params = new URLSearchParams({
|
|
263
|
+
code: "true",
|
|
264
|
+
client_id: CLAUDE_CLIENT_ID,
|
|
265
|
+
response_type: "code",
|
|
266
|
+
redirect_uri: CLAUDE_REDIRECT_URI,
|
|
267
|
+
scope: SCOPES,
|
|
268
|
+
code_challenge: codeChallenge,
|
|
269
|
+
code_challenge_method: "S256",
|
|
270
|
+
state: codeVerifier,
|
|
271
|
+
});
|
|
272
|
+
return { url: `${CLAUDE_AUTH_URL}?${params.toString()}`, codeVerifier };
|
|
273
|
+
}
|
|
274
|
+
// ── Code exchange ────────────────────────────────────────
|
|
275
|
+
async function exchangeOAuthCode(code, codeVerifier) {
|
|
276
|
+
const splits = code.split("#");
|
|
277
|
+
const response = await fetch(CLAUDE_TOKEN_URL, {
|
|
278
|
+
method: "POST",
|
|
279
|
+
headers: { "Content-Type": "application/json" },
|
|
280
|
+
body: JSON.stringify({
|
|
281
|
+
code: splits[0],
|
|
282
|
+
state: splits[1] || codeVerifier,
|
|
283
|
+
grant_type: "authorization_code",
|
|
284
|
+
client_id: CLAUDE_CLIENT_ID,
|
|
285
|
+
redirect_uri: CLAUDE_REDIRECT_URI,
|
|
286
|
+
code_verifier: codeVerifier,
|
|
287
|
+
}),
|
|
288
|
+
});
|
|
289
|
+
if (!response.ok) {
|
|
290
|
+
const errText = await response.text();
|
|
291
|
+
throw new Error(`Token exchange failed (${response.status}): ${errText.substring(0, 200)}`);
|
|
292
|
+
}
|
|
293
|
+
const data = (await response.json());
|
|
294
|
+
const tokens = {
|
|
295
|
+
access_token: data.access_token,
|
|
296
|
+
refresh_token: data.refresh_token,
|
|
297
|
+
expires_at: data.expires_in ? Date.now() + data.expires_in * 1000 : undefined,
|
|
298
|
+
token_type: data.token_type || "Bearer",
|
|
299
|
+
};
|
|
300
|
+
saveOAuthTokens(tokens);
|
|
301
|
+
return tokens;
|
|
302
|
+
}
|
|
303
|
+
// ── Status helper ────────────────────────────────────────
|
|
304
|
+
function getOAuthStatus() {
|
|
305
|
+
const tokens = loadOAuthTokens();
|
|
306
|
+
if (!tokens)
|
|
307
|
+
return { status: "none" };
|
|
308
|
+
if (isOAuthExpired(tokens))
|
|
309
|
+
return { status: "expired", expiresAt: tokens.expires_at };
|
|
310
|
+
return { status: "active", expiresAt: tokens.expires_at };
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6LH,0CAEC;AAED,0CASC;AAED,4CAEC;AAED,wCAGC;AAID,gDA2BC;AAID,8CAUC;AAID,4CAgBC;AAID,8CA8BC;AAID,wCAKC;AA7TD,+CAAiC;AACjC,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,iDAAyC;AAEzC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACtD,MAAM,gBAAgB,GAAG,cAAc,CAAC;AACxC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAExC,oDAAoD;AACpD,MAAM,eAAe,GAAG,mCAAmC,CAAC;AAC5D,MAAM,gBAAgB,GAAG,8CAA8C,CAAC;AACxE,MAAM,mBAAmB,GAAG,mDAAmD,CAAC;AAChF,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;AAChE,MAAM,MAAM,GAAG,gDAAgD,CAAC;AAWhE,4DAA4D;AAE5D,SAAS,oBAAoB;IAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC1E,CAAC;AAED,4DAA4D;AAE5D,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,CAAC;QACH,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,IAAA,wBAAQ,EACN,wCAAwC,gBAAgB,SAAS,gBAAgB,eAAe,EAChG,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,IAAA,wBAAQ,EACN,qCAAqC,gBAAgB,SAAS,gBAAgB,SAAS,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EACvH,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,IAAA,wBAAQ,EACN,YAAY,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,+DAA+D,gBAAgB,cAAc,gBAAgB,GAAG,EACtJ,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;gBACF,OAAO;YACT,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,IAAA,wBAAQ,EACN,oBAAoB,gBAAgB,YAAY,gBAAgB,YAAY,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EACxG,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;gBACF,OAAO;YACT,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,CAAC;QACH,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAA,wBAAQ,EACrB,sCAAsC,gBAAgB,SAAS,gBAAgB,kBAAkB,EACjG,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC;YACF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EACrB,+BAA+B,gBAAgB,cAAc,gBAAgB,eAAe,EAC5F,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC;gBACF,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EACrB,iBAAiB,gBAAgB,GAAG,EACpC,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC;gBACF,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACtC,OAAO,kBAAkB,EAAE,CAAC;gBAC9B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,kBAAkB,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,CAAC;QACH,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAA,wBAAQ,EACN,wCAAwC,gBAAgB,SAAS,gBAAgB,eAAe,EAChG,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,IAAA,wBAAQ,EACN,8BAA8B,gBAAgB,cAAc,gBAAgB,eAAe,EAC3F,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,IAAA,wBAAQ,EAAC,mBAAmB,gBAAgB,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,gBAAgB,EAAE,CAAC;AACrB,CAAC;AAED,4DAA4D;AAE5D,SAAS,aAAa;IACpB,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;IACzD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7D,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACrD,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACxF,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3D,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QACrC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED,4DAA4D;AAE5D,SAAgB,eAAe,CAAC,MAAmB;IACjD,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAgB,eAAe;IAC7B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;QAC9C,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB;IAC9B,YAAY,EAAE,CAAC;AACjB,CAAC;AAED,SAAgB,cAAc,CAAC,MAAmB;IAChD,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC;AACzC,CAAC;AAED,4DAA4D;AAErD,KAAK,UAAU,kBAAkB,CAAC,YAAoB;IAC3D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE;YAC7C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,eAAe,CAAC;gBACxB,UAAU,EAAE,eAAe;gBAC3B,aAAa,EAAE,YAAY;gBAC3B,SAAS,EAAE,gBAAgB;aAC5B,CAAC,CAAC,QAAQ,EAAE;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAE9B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;QAChE,MAAM,MAAM,GAAgB;YAC1B,YAAY,EAAE,IAAI,CAAC,YAAsB;YACzC,aAAa,EAAG,IAAI,CAAC,aAAwB,IAAI,YAAY;YAC7D,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAI,IAAI,CAAC,UAAqB,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS;YACzF,UAAU,EAAG,IAAI,CAAC,UAAqB,IAAI,QAAQ;SACpD,CAAC;QAEF,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,4DAA4D;AAErD,KAAK,UAAU,iBAAiB;IACrC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACjE,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,CAAC;IAED,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC;AAED,4DAA4D;AAE5D,SAAgB,gBAAgB;IAC9B,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,gBAAgB;QAC3B,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,mBAAmB;QACjC,KAAK,EAAE,MAAM;QACb,cAAc,EAAE,aAAa;QAC7B,qBAAqB,EAAE,MAAM;QAC7B,KAAK,EAAE,YAAY;KACpB,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,GAAG,eAAe,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC;AAC1E,CAAC;AAED,4DAA4D;AAErD,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,YAAoB;IACxE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE;QAC7C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACf,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY;YAChC,UAAU,EAAE,oBAAoB;YAChC,SAAS,EAAE,gBAAgB;YAC3B,YAAY,EAAE,mBAAmB;YACjC,aAAa,EAAE,YAAY;SAC5B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;IAChE,MAAM,MAAM,GAAgB;QAC1B,YAAY,EAAE,IAAI,CAAC,YAAsB;QACzC,aAAa,EAAE,IAAI,CAAC,aAAmC;QACvD,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAI,IAAI,CAAC,UAAqB,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS;QACzF,UAAU,EAAG,IAAI,CAAC,UAAqB,IAAI,QAAQ;KACpD,CAAC;IAEF,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,4DAA4D;AAE5D,SAAgB,cAAc;IAC5B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACvC,IAAI,cAAc,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IACvF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Manager
|
|
3
|
+
*
|
|
4
|
+
* Implements the Claude Code permission system:
|
|
5
|
+
* - Settings-based allow/ask/deny rules loaded from .claude/settings.json files
|
|
6
|
+
* - Permission modes: default, acceptEdits, plan, dontAsk, bypassPermissions
|
|
7
|
+
* - Rule evaluation order: deny → ask → allow (deny always wins)
|
|
8
|
+
* - Rule syntax: Tool, Tool(*), Bash(cmd *), Read(path), WebFetch(domain:x), Agent(name)
|
|
9
|
+
* - Settings precedence: local project → shared project → user (~/.claude/settings.json)
|
|
10
|
+
*
|
|
11
|
+
* Also supports legacy runtime stored rules (allow once / always / project).
|
|
12
|
+
*
|
|
13
|
+
* Backward compatible: legacy ASK / AUTO_EDIT / AUTO modes still accepted.
|
|
14
|
+
*/
|
|
15
|
+
import type { ToolDefinition } from "../tools/types";
|
|
16
|
+
import type { SandboxManager } from "../sandbox";
|
|
17
|
+
/** A stored runtime permission rule (session / legacy format) */
|
|
18
|
+
export interface PermissionRule {
|
|
19
|
+
tool: string;
|
|
20
|
+
/** Optional: match only when this input value matches */
|
|
21
|
+
inputMatch?: string;
|
|
22
|
+
createdAt: string;
|
|
23
|
+
}
|
|
24
|
+
export type PermissionScope = "global" | "project";
|
|
25
|
+
/**
|
|
26
|
+
* Permission modes as defined in Claude Code docs.
|
|
27
|
+
* Legacy aliases (ask / auto-edit / auto) are kept for backward compatibility.
|
|
28
|
+
*/
|
|
29
|
+
export declare enum PermissionMode {
|
|
30
|
+
DEFAULT = "default",// prompt on first use of each tool
|
|
31
|
+
ACCEPT_EDITS = "acceptEdits",// auto-approve file edits, ask for shell
|
|
32
|
+
PLAN = "plan",// read-only: block write + exec tools
|
|
33
|
+
DONT_ASK = "dontAsk",// deny all unless explicitly allowed
|
|
34
|
+
BYPASS = "bypassPermissions",// skip all permission checks
|
|
35
|
+
ASK = "ask",// → DEFAULT
|
|
36
|
+
AUTO_EDIT = "auto-edit",// → ACCEPT_EDITS
|
|
37
|
+
AUTO = "auto"
|
|
38
|
+
}
|
|
39
|
+
export type PermissionPromptFn = (toolName: string, message: string, hasProject: boolean) => Promise<"allow" | "always" | "project" | "deny" | "deny_always" | "deny_project">;
|
|
40
|
+
/** Managed-only settings that cannot be overridden */
|
|
41
|
+
interface ManagedOnlySettings {
|
|
42
|
+
disableBypassPermissionsMode?: "disable" | string;
|
|
43
|
+
allowManagedPermissionRulesOnly?: boolean;
|
|
44
|
+
allowManagedHooksOnly?: boolean;
|
|
45
|
+
allowManagedMcpServersOnly?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export declare class PermissionManager {
|
|
48
|
+
private mode;
|
|
49
|
+
private projectDir;
|
|
50
|
+
private cwd;
|
|
51
|
+
private customPromptFn;
|
|
52
|
+
private sandboxManager;
|
|
53
|
+
private globalRules;
|
|
54
|
+
private projectRules;
|
|
55
|
+
/**
|
|
56
|
+
* Session-only approvals for file-modification tools (file_write, file_edit).
|
|
57
|
+
* Per the tiered permission table: "Until session end" — not written to disk.
|
|
58
|
+
* Key = toolName (no specifier needed; file edit approvals cover all paths).
|
|
59
|
+
*/
|
|
60
|
+
private sessionApprovals;
|
|
61
|
+
private settingsAllow;
|
|
62
|
+
private settingsAsk;
|
|
63
|
+
private settingsDeny;
|
|
64
|
+
private managedSettings;
|
|
65
|
+
private managedAllow;
|
|
66
|
+
private managedAsk;
|
|
67
|
+
private managedDeny;
|
|
68
|
+
constructor(mode?: PermissionMode, projectDir?: string);
|
|
69
|
+
/**
|
|
70
|
+
* Load managed settings from system-level config.
|
|
71
|
+
* Managed settings have the highest priority and cannot be overridden.
|
|
72
|
+
*
|
|
73
|
+
* Paths:
|
|
74
|
+
* macOS: /Library/Application Support/cdoing/managed-settings.json
|
|
75
|
+
* Linux: /etc/cdoing/managed-settings.json
|
|
76
|
+
*/
|
|
77
|
+
private loadManagedSettings;
|
|
78
|
+
/** Collapse legacy aliases into canonical mode values. */
|
|
79
|
+
private normalizeMode;
|
|
80
|
+
/**
|
|
81
|
+
* Read `defaultMode` from settings files (local → shared → user).
|
|
82
|
+
* Higher-precedence files win. Returns null if no file sets it.
|
|
83
|
+
*/
|
|
84
|
+
private readDefaultModeFromSettings;
|
|
85
|
+
setPromptFn(fn: PermissionPromptFn): void;
|
|
86
|
+
setSandboxManager(sm: SandboxManager): void;
|
|
87
|
+
setMode(mode: PermissionMode): void;
|
|
88
|
+
getMode(): PermissionMode;
|
|
89
|
+
/**
|
|
90
|
+
* Check whether a specific file path is denied by settings rules for a given category.
|
|
91
|
+
* Used by shell_exec to check extracted paths against Read/Edit/Delete rules.
|
|
92
|
+
*
|
|
93
|
+
* Returns "deny" if a deny rule matches the path for the given category.
|
|
94
|
+
* Returns null otherwise (no deny found — the command can proceed through normal permission flow).
|
|
95
|
+
*/
|
|
96
|
+
checkPathPermission(filePath: string, category: "Read" | "Edit" | "Delete"): "deny" | null;
|
|
97
|
+
/** Check whether a file path matches any ask rule for the given category. */
|
|
98
|
+
private pathMatchesAsk;
|
|
99
|
+
setProjectDir(dir: string): void;
|
|
100
|
+
/**
|
|
101
|
+
* Load and merge permission rules from settings files.
|
|
102
|
+
*
|
|
103
|
+
* Precedence (highest to lowest, docs order):
|
|
104
|
+
* 1. Local project — <project>/.claude/settings.local.json (highest)
|
|
105
|
+
* 2. Shared project — <project>/.claude/settings.json
|
|
106
|
+
* 3. User — ~/.claude/settings.json (lowest)
|
|
107
|
+
*
|
|
108
|
+
* Rule evaluation uses "first match wins", so higher-precedence rules are
|
|
109
|
+
* stored at the front of the allow/ask arrays.
|
|
110
|
+
*
|
|
111
|
+
* Deny rules from ALL sources are merged — a deny at any level cannot be
|
|
112
|
+
* overridden by an allow at any other level.
|
|
113
|
+
*/
|
|
114
|
+
loadSettingsRules(): void;
|
|
115
|
+
/** Return the currently loaded settings rules (for display / debugging). */
|
|
116
|
+
getSettingsRules(): {
|
|
117
|
+
allow: string[];
|
|
118
|
+
ask: string[];
|
|
119
|
+
deny: string[];
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Test whether a settings rule string covers a specific tool invocation.
|
|
123
|
+
*/
|
|
124
|
+
private matchesRule;
|
|
125
|
+
/**
|
|
126
|
+
* Evaluate all settings rules for a tool call.
|
|
127
|
+
*
|
|
128
|
+
* Evaluation order per docs: deny → ask → allow.
|
|
129
|
+
* - deny wins over everything.
|
|
130
|
+
* - ask overrides allow (lets you "ask for rm *" even when "allow Bash").
|
|
131
|
+
* - allow auto-approves when no deny/ask rule matched.
|
|
132
|
+
* Returns null when no rule matches (fall back to mode behaviour).
|
|
133
|
+
*/
|
|
134
|
+
private evaluateRules;
|
|
135
|
+
/**
|
|
136
|
+
* Determine whether a tool call is allowed.
|
|
137
|
+
*
|
|
138
|
+
* Decision flow:
|
|
139
|
+
* 1. bypassPermissions mode → allow all.
|
|
140
|
+
* 2. Tools that never require permission → allow.
|
|
141
|
+
* 3. Settings deny rule matches → deny.
|
|
142
|
+
* 4. Settings ask rule matches → prompt user (overrides stored/allow).
|
|
143
|
+
* 5. Settings allow rule matches → allow.
|
|
144
|
+
* 6. Session-only approval exists (file-edit tools) → allow.
|
|
145
|
+
* 7. Runtime stored rule matches (Bash tools, persisted) → allow.
|
|
146
|
+
* 8. Fall back to mode:
|
|
147
|
+
* - plan → deny write/exec tools.
|
|
148
|
+
* - dontAsk → deny anything not explicitly allowed.
|
|
149
|
+
* - acceptEdits → allow file edits; prompt for others.
|
|
150
|
+
* - default → prompt user.
|
|
151
|
+
*/
|
|
152
|
+
requestPermission(toolDef: ToolDefinition, input: Record<string, unknown>): Promise<boolean>;
|
|
153
|
+
private getProjectPermissionsFile;
|
|
154
|
+
private loadRuntimeRules;
|
|
155
|
+
private loadGlobalRules;
|
|
156
|
+
private loadProjectRules;
|
|
157
|
+
private saveGlobalRules;
|
|
158
|
+
private saveProjectRules;
|
|
159
|
+
private hasStoredPermission;
|
|
160
|
+
private addRule;
|
|
161
|
+
/**
|
|
162
|
+
* Save a deny rule to settings.json so it persists across sessions.
|
|
163
|
+
* Creates the .cdoing/ folder and settings.json file if they don't exist.
|
|
164
|
+
*/
|
|
165
|
+
private addDenyRule;
|
|
166
|
+
/**
|
|
167
|
+
* Persist a permission rule to settings.json.
|
|
168
|
+
*
|
|
169
|
+
* Writes to:
|
|
170
|
+
* - Project scope → <project>/.cdoing/settings.json
|
|
171
|
+
* - Global scope → ~/.cdoing/settings.json
|
|
172
|
+
*/
|
|
173
|
+
private addToSettingsAllow;
|
|
174
|
+
/**
|
|
175
|
+
* Persist a deny rule to settings.json.
|
|
176
|
+
*
|
|
177
|
+
* Writes to:
|
|
178
|
+
* - Project scope → <project>/.cdoing/settings.json
|
|
179
|
+
* - Global scope → ~/.cdoing/settings.json
|
|
180
|
+
*/
|
|
181
|
+
private addToSettingsDeny;
|
|
182
|
+
/**
|
|
183
|
+
* Persist a permission rule to a specific field (allow/deny/ask) in settings.json.
|
|
184
|
+
* Creates the directory and file if they don't exist.
|
|
185
|
+
*/
|
|
186
|
+
private addToSettingsField;
|
|
187
|
+
/** Check whether bypass mode is disabled by managed settings. */
|
|
188
|
+
isBypassDisabled(): boolean;
|
|
189
|
+
/** Return managed-only settings for external inspection. */
|
|
190
|
+
getManagedSettings(): Readonly<ManagedOnlySettings>;
|
|
191
|
+
/**
|
|
192
|
+
* Remove a permission rule from settings.json.
|
|
193
|
+
* Removes from the specified field (allow/deny/ask) in the given scope.
|
|
194
|
+
*/
|
|
195
|
+
removeSettingsRule(rule: string, field: "allow" | "deny" | "ask", scope: PermissionScope): void;
|
|
196
|
+
removeRule(toolName?: string, scope?: PermissionScope): void;
|
|
197
|
+
getStoredRules(): {
|
|
198
|
+
global: ReadonlyArray<PermissionRule>;
|
|
199
|
+
project: ReadonlyArray<PermissionRule>;
|
|
200
|
+
};
|
|
201
|
+
private describeAction;
|
|
202
|
+
/**
|
|
203
|
+
* Ask the user whether to allow a tool call.
|
|
204
|
+
*
|
|
205
|
+
* Options:
|
|
206
|
+
* y / Enter → Allow once
|
|
207
|
+
* a → Always allow globally (~/.cdoing/permissions.json)
|
|
208
|
+
* p → Allow for this project (.cdoing/permissions.json)
|
|
209
|
+
* n → Deny
|
|
210
|
+
*
|
|
211
|
+
* Uses customPromptFn if set (e.g. VS Code UI), otherwise falls back to CLI readline.
|
|
212
|
+
*/
|
|
213
|
+
private askUser;
|
|
214
|
+
}
|
|
215
|
+
export {};
|
|
216
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"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"}
|