opencode-forge 0.1.5
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/LICENSE +21 -0
- package/README.md +534 -0
- package/config.jsonc +47 -0
- package/dist/agents/architect.d.ts +3 -0
- package/dist/agents/architect.d.ts.map +1 -0
- package/dist/agents/architect.js +152 -0
- package/dist/agents/architect.js.map +1 -0
- package/dist/agents/auditor.d.ts +3 -0
- package/dist/agents/auditor.d.ts.map +1 -0
- package/dist/agents/auditor.js +168 -0
- package/dist/agents/auditor.js.map +1 -0
- package/dist/agents/code.d.ts +3 -0
- package/dist/agents/code.d.ts.map +1 -0
- package/dist/agents/code.js +67 -0
- package/dist/agents/code.js.map +1 -0
- package/dist/agents/index.d.ts +4 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +9 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/prompts.d.ts +1 -0
- package/dist/agents/prompts.d.ts.map +1 -0
- package/dist/agents/prompts.js +4 -0
- package/dist/agents/prompts.js.map +1 -0
- package/dist/agents/types.d.ts +34 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cache/index.d.ts +4 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +5 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-cache.d.ts +14 -0
- package/dist/cache/memory-cache.d.ts.map +1 -0
- package/dist/cache/memory-cache.js +51 -0
- package/dist/cache/memory-cache.js.map +1 -0
- package/dist/cache/types.d.ts +8 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +2 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/cli/commands/cancel.d.ts +15 -0
- package/dist/cli/commands/cancel.d.ts.map +1 -0
- package/dist/cli/commands/cancel.js +194 -0
- package/dist/cli/commands/cancel.js.map +1 -0
- package/dist/cli/commands/graph.d.ts +16 -0
- package/dist/cli/commands/graph.d.ts.map +1 -0
- package/dist/cli/commands/graph.js +208 -0
- package/dist/cli/commands/graph.js.map +1 -0
- package/dist/cli/commands/restart.d.ts +15 -0
- package/dist/cli/commands/restart.d.ts.map +1 -0
- package/dist/cli/commands/restart.js +268 -0
- package/dist/cli/commands/restart.js.map +1 -0
- package/dist/cli/commands/status.d.ts +17 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +356 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +3 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -0
- package/dist/cli/commands/upgrade.js +40 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +224 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils.d.ts +36 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +163 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/command/template/review.txt +101 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +186 -0
- package/dist/config.js.map +1 -0
- package/dist/constants/loop.d.ts +10 -0
- package/dist/constants/loop.d.ts.map +1 -0
- package/dist/constants/loop.js +6 -0
- package/dist/constants/loop.js.map +1 -0
- package/dist/graph/cache.d.ts +17 -0
- package/dist/graph/cache.d.ts.map +1 -0
- package/dist/graph/cache.js +50 -0
- package/dist/graph/cache.js.map +1 -0
- package/dist/graph/client.d.ts +51 -0
- package/dist/graph/client.d.ts.map +1 -0
- package/dist/graph/client.js +152 -0
- package/dist/graph/client.js.map +1 -0
- package/dist/graph/clone-detection.d.ts +9 -0
- package/dist/graph/clone-detection.d.ts.map +1 -0
- package/dist/graph/clone-detection.js +148 -0
- package/dist/graph/clone-detection.js.map +1 -0
- package/dist/graph/constants.d.ts +18 -0
- package/dist/graph/constants.d.ts.map +1 -0
- package/dist/graph/constants.js +532 -0
- package/dist/graph/constants.js.map +1 -0
- package/dist/graph/database.d.ts +11 -0
- package/dist/graph/database.d.ts.map +1 -0
- package/dist/graph/database.js +250 -0
- package/dist/graph/database.js.map +1 -0
- package/dist/graph/index.d.ts +14 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +13 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/repo-map.d.ts +59 -0
- package/dist/graph/repo-map.d.ts.map +1 -0
- package/dist/graph/repo-map.js +948 -0
- package/dist/graph/repo-map.js.map +1 -0
- package/dist/graph/rpc.d.ts +34 -0
- package/dist/graph/rpc.d.ts.map +1 -0
- package/dist/graph/rpc.js +139 -0
- package/dist/graph/rpc.js.map +1 -0
- package/dist/graph/service.d.ts +46 -0
- package/dist/graph/service.d.ts.map +1 -0
- package/dist/graph/service.js +329 -0
- package/dist/graph/service.js.map +1 -0
- package/dist/graph/tree-sitter.d.ts +40 -0
- package/dist/graph/tree-sitter.d.ts.map +1 -0
- package/dist/graph/tree-sitter.js +799 -0
- package/dist/graph/tree-sitter.js.map +1 -0
- package/dist/graph/types.d.ts +175 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +105 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/graph/utils.d.ts +64 -0
- package/dist/graph/utils.d.ts.map +1 -0
- package/dist/graph/utils.js +406 -0
- package/dist/graph/utils.js.map +1 -0
- package/dist/graph/worker.d.ts +2 -0
- package/dist/graph/worker.d.ts.map +1 -0
- package/dist/graph/worker.js +6043 -0
- package/dist/graph/worker.js.map +1 -0
- package/dist/hooks/compaction-utils.d.ts +21 -0
- package/dist/hooks/compaction-utils.d.ts.map +1 -0
- package/dist/hooks/compaction-utils.js +82 -0
- package/dist/hooks/compaction-utils.js.map +1 -0
- package/dist/hooks/graph-command.d.ts +27 -0
- package/dist/hooks/graph-command.d.ts.map +1 -0
- package/dist/hooks/graph-command.js +57 -0
- package/dist/hooks/graph-command.js.map +1 -0
- package/dist/hooks/graph-tools.d.ts +11 -0
- package/dist/hooks/graph-tools.d.ts.map +1 -0
- package/dist/hooks/graph-tools.js +125 -0
- package/dist/hooks/graph-tools.js.map +1 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/loop.d.ts +23 -0
- package/dist/hooks/loop.d.ts.map +1 -0
- package/dist/hooks/loop.js +667 -0
- package/dist/hooks/loop.js.map +1 -0
- package/dist/hooks/sandbox-tools.d.ts +13 -0
- package/dist/hooks/sandbox-tools.d.ts.map +1 -0
- package/dist/hooks/sandbox-tools.js +105 -0
- package/dist/hooks/sandbox-tools.js.map +1 -0
- package/dist/hooks/session.d.ts +19 -0
- package/dist/hooks/session.d.ts.map +1 -0
- package/dist/hooks/session.js +56 -0
- package/dist/hooks/session.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +298 -0
- package/dist/index.js.map +1 -0
- package/dist/sandbox/context.d.ts +27 -0
- package/dist/sandbox/context.d.ts.map +1 -0
- package/dist/sandbox/context.js +18 -0
- package/dist/sandbox/context.js.map +1 -0
- package/dist/sandbox/docker.d.ts +29 -0
- package/dist/sandbox/docker.d.ts.map +1 -0
- package/dist/sandbox/docker.js +213 -0
- package/dist/sandbox/docker.js.map +1 -0
- package/dist/sandbox/manager.d.ts +23 -0
- package/dist/sandbox/manager.d.ts.map +1 -0
- package/dist/sandbox/manager.js +131 -0
- package/dist/sandbox/manager.js.map +1 -0
- package/dist/sandbox/path.d.ts +4 -0
- package/dist/sandbox/path.d.ts.map +1 -0
- package/dist/sandbox/path.js +27 -0
- package/dist/sandbox/path.js.map +1 -0
- package/dist/services/kv.d.ts +17 -0
- package/dist/services/kv.d.ts.map +1 -0
- package/dist/services/kv.js +62 -0
- package/dist/services/kv.js.map +1 -0
- package/dist/services/loop.d.ts +96 -0
- package/dist/services/loop.d.ts.map +1 -0
- package/dist/services/loop.js +315 -0
- package/dist/services/loop.js.map +1 -0
- package/dist/setup.d.ts +4 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +118 -0
- package/dist/setup.js.map +1 -0
- package/dist/storage/database.d.ts +6 -0
- package/dist/storage/database.d.ts.map +1 -0
- package/dist/storage/database.js +90 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/storage/graph-projects.d.ts +80 -0
- package/dist/storage/graph-projects.d.ts.map +1 -0
- package/dist/storage/graph-projects.js +154 -0
- package/dist/storage/graph-projects.js.map +1 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +3 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/kv-queries.d.ts +18 -0
- package/dist/storage/kv-queries.d.ts.map +1 -0
- package/dist/storage/kv-queries.js +70 -0
- package/dist/storage/kv-queries.js.map +1 -0
- package/dist/tools/graph.d.ts +9 -0
- package/dist/tools/graph.d.ts.map +1 -0
- package/dist/tools/graph.js +272 -0
- package/dist/tools/graph.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/loop.d.ts +21 -0
- package/dist/tools/loop.d.ts.map +1 -0
- package/dist/tools/loop.js +570 -0
- package/dist/tools/loop.js.map +1 -0
- package/dist/tools/plan-approval.d.ts +15 -0
- package/dist/tools/plan-approval.d.ts.map +1 -0
- package/dist/tools/plan-approval.js +203 -0
- package/dist/tools/plan-approval.js.map +1 -0
- package/dist/tools/plan-execute.d.ts +4 -0
- package/dist/tools/plan-execute.d.ts.map +1 -0
- package/dist/tools/plan-execute.js +85 -0
- package/dist/tools/plan-execute.js.map +1 -0
- package/dist/tools/plan-kv.d.ts +4 -0
- package/dist/tools/plan-kv.d.ts.map +1 -0
- package/dist/tools/plan-kv.js +107 -0
- package/dist/tools/plan-kv.js.map +1 -0
- package/dist/tools/review.d.ts +4 -0
- package/dist/tools/review.d.ts.map +1 -0
- package/dist/tools/review.js +90 -0
- package/dist/tools/review.js.map +1 -0
- package/dist/tools/sandbox-fs.d.ts +22 -0
- package/dist/tools/sandbox-fs.d.ts.map +1 -0
- package/dist/tools/sandbox-fs.js +83 -0
- package/dist/tools/sandbox-fs.js.map +1 -0
- package/dist/tools/types.d.ts +26 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tui.d.ts +3 -0
- package/dist/tui.js +2061 -0
- package/dist/types.d.ts +124 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/git-branch.d.ts +11 -0
- package/dist/utils/git-branch.d.ts.map +1 -0
- package/dist/utils/git-branch.js +35 -0
- package/dist/utils/git-branch.js.map +1 -0
- package/dist/utils/graph-status-store.d.ts +72 -0
- package/dist/utils/graph-status-store.d.ts.map +1 -0
- package/dist/utils/graph-status-store.js +62 -0
- package/dist/utils/graph-status-store.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +89 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/loop-format.d.ts +5 -0
- package/dist/utils/loop-format.d.ts.map +1 -0
- package/dist/utils/loop-format.js +29 -0
- package/dist/utils/loop-format.js.map +1 -0
- package/dist/utils/loop-helpers.d.ts +9 -0
- package/dist/utils/loop-helpers.d.ts.map +1 -0
- package/dist/utils/loop-helpers.js +20 -0
- package/dist/utils/loop-helpers.js.map +1 -0
- package/dist/utils/loop-launch.d.ts +32 -0
- package/dist/utils/loop-launch.d.ts.map +1 -0
- package/dist/utils/loop-launch.js +162 -0
- package/dist/utils/loop-launch.js.map +1 -0
- package/dist/utils/model-fallback.d.ts +27 -0
- package/dist/utils/model-fallback.d.ts.map +1 -0
- package/dist/utils/model-fallback.js +33 -0
- package/dist/utils/model-fallback.js.map +1 -0
- package/dist/utils/partial-match.d.ts +7 -0
- package/dist/utils/partial-match.d.ts.map +1 -0
- package/dist/utils/partial-match.js +56 -0
- package/dist/utils/partial-match.js.map +1 -0
- package/dist/utils/plan-execution.d.ts +65 -0
- package/dist/utils/plan-execution.d.ts.map +1 -0
- package/dist/utils/plan-execution.js +107 -0
- package/dist/utils/plan-execution.js.map +1 -0
- package/dist/utils/session-stats.d.ts +36 -0
- package/dist/utils/session-stats.d.ts.map +1 -0
- package/dist/utils/session-stats.js +145 -0
- package/dist/utils/session-stats.js.map +1 -0
- package/dist/utils/tui-graph-status.d.ts +38 -0
- package/dist/utils/tui-graph-status.d.ts.map +1 -0
- package/dist/utils/tui-graph-status.js +95 -0
- package/dist/utils/tui-graph-status.js.map +1 -0
- package/dist/utils/tui-plan-store.d.ts +54 -0
- package/dist/utils/tui-plan-store.d.ts.map +1 -0
- package/dist/utils/tui-plan-store.js +168 -0
- package/dist/utils/tui-plan-store.js.map +1 -0
- package/dist/utils/tui-refresh-helpers.d.ts +44 -0
- package/dist/utils/tui-refresh-helpers.d.ts.map +1 -0
- package/dist/utils/tui-refresh-helpers.js +120 -0
- package/dist/utils/tui-refresh-helpers.js.map +1 -0
- package/dist/utils/upgrade.d.ts +23 -0
- package/dist/utils/upgrade.d.ts.map +1 -0
- package/dist/utils/upgrade.js +111 -0
- package/dist/utils/upgrade.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +92 -0
- package/scripts/build.ts +67 -0
- package/src/command/template/review.txt +101 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAe,MAAM,UAAU,CAAA;AAiHvE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,EAC1C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,IAE3C,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,mBA6D9C"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
const PROMPT_REVIEW = readFileSync(join(__dirname, 'command/template/review.txt'), 'utf-8');
|
|
6
|
+
const REPLACED_BUILTIN_AGENTS = ['build', 'plan'];
|
|
7
|
+
const ENHANCED_BUILTIN_AGENTS = {
|
|
8
|
+
explore: {
|
|
9
|
+
permission: {
|
|
10
|
+
'graph-query': 'allow',
|
|
11
|
+
'graph-symbols': 'allow',
|
|
12
|
+
'graph-analyze': 'allow',
|
|
13
|
+
},
|
|
14
|
+
prompt: `# Graph-first discovery hierarchy
|
|
15
|
+
You have access to four graph tools: graph-status, graph-query, graph-symbols, and graph-analyze. Use whichever graph tool best fits the question — these prompts prioritize graph usage without constraining which graph tool you use.
|
|
16
|
+
|
|
17
|
+
1. **File-level topology**: Use graph-query for structural questions: top_files (most important files), file_symbols (what symbols live in a file), file_deps (what a file depends on), file_dependents (what depends on a file), cochanges (files that change together), blast_radius (impact analysis), packages (external package usage).
|
|
18
|
+
2. **Symbol lookup**: Use graph-symbols for symbol-level queries: find (locate a symbol), search (search by pattern), signature (get symbol signature), callers (who calls this), callees (what this calls).
|
|
19
|
+
3. **Code quality analysis**: Use graph-analyze for structural quality insights: unused_exports (exported but never imported), duplication (duplicate code structures), near_duplicates (near-duplicate code patterns).
|
|
20
|
+
4. **Direct inspection**: Use Read to inspect the narrowed files directly.
|
|
21
|
+
5. **Fallback**: Use Glob/Grep only for literal filename/content searches or when the graph cannot answer the question.
|
|
22
|
+
|
|
23
|
+
## General guidelines
|
|
24
|
+
- When exploring the codebase, prefer the Task tool to reduce context usage.
|
|
25
|
+
- Call multiple tools in a single response when they are independent. Batch tool calls for performance.
|
|
26
|
+
- Use specialized tools (Read, Glob, Grep) instead of bash equivalents (cat, find, grep).
|
|
27
|
+
`,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
const PLUGIN_COMMANDS = {
|
|
31
|
+
review: {
|
|
32
|
+
description: 'Run a code review.',
|
|
33
|
+
agent: 'auditor',
|
|
34
|
+
subtask: true,
|
|
35
|
+
template: PROMPT_REVIEW,
|
|
36
|
+
},
|
|
37
|
+
loop: {
|
|
38
|
+
description: 'Start an iterative development loop in a worktree',
|
|
39
|
+
agent: 'code',
|
|
40
|
+
subtask: false,
|
|
41
|
+
template: `## Step 1: Prepare the Plan
|
|
42
|
+
|
|
43
|
+
Ensure you have a clear implementation plan ready.
|
|
44
|
+
|
|
45
|
+
## Step 2: Choose Execution Mode
|
|
46
|
+
|
|
47
|
+
Decide whether to run in:
|
|
48
|
+
- Worktree mode (isolated git worktree) for safe experimentation
|
|
49
|
+
- In-place mode (current directory) for quick iterations
|
|
50
|
+
|
|
51
|
+
## Step 3: Execute the Loop
|
|
52
|
+
|
|
53
|
+
Run \`loop\` with:
|
|
54
|
+
- plan: The full implementation plan
|
|
55
|
+
- title: A short descriptive title
|
|
56
|
+
- worktree: true for worktree mode, false for in-place
|
|
57
|
+
|
|
58
|
+
The loop will automatically continue through iterations until complete.
|
|
59
|
+
Use \`loop-status\` to check progress or \`loop-cancel\` to stop.
|
|
60
|
+
|
|
61
|
+
$ARGUMENTS`,
|
|
62
|
+
},
|
|
63
|
+
'loop-status': {
|
|
64
|
+
description: 'Check status of all active loops',
|
|
65
|
+
agent: 'code',
|
|
66
|
+
subtask: false,
|
|
67
|
+
template: `Check the status of all memory loops.
|
|
68
|
+
|
|
69
|
+
## Step 1: List Active Loops
|
|
70
|
+
|
|
71
|
+
Run \`loop-status\` with no arguments to list all active loops for the current project.
|
|
72
|
+
|
|
73
|
+
## Step 2: Get Detailed Status
|
|
74
|
+
|
|
75
|
+
For each active loop found, run \`loop-status\` with the loop name to get detailed status. Token counts, iterations, last output.
|
|
76
|
+
|
|
77
|
+
## Step 3: Report
|
|
78
|
+
|
|
79
|
+
Present a summary showing:
|
|
80
|
+
- Total number of active loops
|
|
81
|
+
- For each loop: name, status, and any additional details
|
|
82
|
+
|
|
83
|
+
If no loops are active, report that there are no active loops.
|
|
84
|
+
|
|
85
|
+
$ARGUMENTS`,
|
|
86
|
+
},
|
|
87
|
+
'loop-cancel': {
|
|
88
|
+
description: 'Cancel the active loop',
|
|
89
|
+
agent: 'code',
|
|
90
|
+
subtask: false,
|
|
91
|
+
template: `## Step 1: Identify the Loop
|
|
92
|
+
|
|
93
|
+
Run \`loop-status\` to see all active loops if you don't know the name.
|
|
94
|
+
|
|
95
|
+
## Step 2: Cancel the Loop
|
|
96
|
+
|
|
97
|
+
Run \`loop-cancel\` with:
|
|
98
|
+
- name: The worktree name of the loop to cancel (optional if only one active)
|
|
99
|
+
|
|
100
|
+
## Step 3: Verify Cancellation
|
|
101
|
+
|
|
102
|
+
Confirm the loop was cancelled and check if worktree cleanup is needed.
|
|
103
|
+
|
|
104
|
+
$ARGUMENTS`,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
export function createConfigHandler(agents, agentOverrides) {
|
|
108
|
+
return async (config) => {
|
|
109
|
+
const effectiveAgents = { ...agents };
|
|
110
|
+
if (agentOverrides) {
|
|
111
|
+
for (const [name, overrides] of Object.entries(agentOverrides)) {
|
|
112
|
+
const role = Object.keys(effectiveAgents).find((r) => effectiveAgents[r].displayName === name);
|
|
113
|
+
if (role) {
|
|
114
|
+
effectiveAgents[role] = { ...effectiveAgents[role], ...overrides };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const agentConfigs = createAgentConfigs(effectiveAgents);
|
|
119
|
+
const userAgentConfigs = config.agent;
|
|
120
|
+
const mergedAgents = { ...agentConfigs };
|
|
121
|
+
if (userAgentConfigs) {
|
|
122
|
+
for (const [name, userConfig] of Object.entries(userAgentConfigs)) {
|
|
123
|
+
if (mergedAgents[name]) {
|
|
124
|
+
mergedAgents[name] = { ...mergedAgents[name], ...userConfig };
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
mergedAgents[name] = userConfig;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
for (const name of REPLACED_BUILTIN_AGENTS) {
|
|
132
|
+
mergedAgents[name] = { ...mergedAgents[name], hidden: true };
|
|
133
|
+
}
|
|
134
|
+
for (const [name, enhancement] of Object.entries(ENHANCED_BUILTIN_AGENTS)) {
|
|
135
|
+
const existing = mergedAgents[name];
|
|
136
|
+
const existingPermission = (existing?.permission ?? {});
|
|
137
|
+
const existingPrompt = existing?.prompt ?? '';
|
|
138
|
+
const newPrompt = enhancement.prompt
|
|
139
|
+
? existingPrompt
|
|
140
|
+
? `${existingPrompt}\n\n${enhancement.prompt}`
|
|
141
|
+
: enhancement.prompt
|
|
142
|
+
: existingPrompt;
|
|
143
|
+
mergedAgents[name] = {
|
|
144
|
+
...existing,
|
|
145
|
+
permission: { ...existingPermission, ...enhancement.permission },
|
|
146
|
+
prompt: newPrompt,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
config.agent = mergedAgents;
|
|
150
|
+
config.default_agent = 'code';
|
|
151
|
+
const userCommands = config.command;
|
|
152
|
+
const mergedCommands = { ...PLUGIN_COMMANDS };
|
|
153
|
+
if (userCommands) {
|
|
154
|
+
for (const [name, userCommand] of Object.entries(userCommands)) {
|
|
155
|
+
mergedCommands[name] = userCommand;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
config.command = mergedCommands;
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function createAgentConfigs(agents) {
|
|
162
|
+
const result = {};
|
|
163
|
+
for (const agent of Object.values(agents)) {
|
|
164
|
+
const tools = {};
|
|
165
|
+
if (agent.tools?.exclude) {
|
|
166
|
+
for (const tool of agent.tools.exclude) {
|
|
167
|
+
tools[tool] = false;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
result[agent.displayName] = {
|
|
171
|
+
description: agent.description,
|
|
172
|
+
model: agent.defaultModel ?? '',
|
|
173
|
+
prompt: agent.systemPrompt ?? '',
|
|
174
|
+
mode: agent.mode ?? 'subagent',
|
|
175
|
+
...(Object.keys(tools).length > 0 ? { tools } : {}),
|
|
176
|
+
...(agent.variant ? { variant: agent.variant } : {}),
|
|
177
|
+
...(agent.temperature !== undefined ? { temperature: agent.temperature } : {}),
|
|
178
|
+
...(agent.steps !== undefined ? { steps: agent.steps } : {}),
|
|
179
|
+
...(agent.hidden ? { hidden: agent.hidden } : {}),
|
|
180
|
+
...(agent.color ? { color: agent.color } : {}),
|
|
181
|
+
...(agent.permission ? { permission: agent.permission } : {}),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
return result;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/constants/loop.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB;;;;;;;;IAInC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/constants/loop.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAgB,EAAE;IAC3D,EAAE,UAAU,EAAE,oBAAoB,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAe,EAAE;IAC3E,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAe,EAAE;CACvE,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File content cache keyed by absolute path, invalidated by mtime.
|
|
3
|
+
* Avoids re-reading files that haven't changed.
|
|
4
|
+
*/
|
|
5
|
+
export declare class FileCache {
|
|
6
|
+
private entries;
|
|
7
|
+
private maxSize;
|
|
8
|
+
constructor(maxSize?: number);
|
|
9
|
+
get(filePath: string): Promise<string | null>;
|
|
10
|
+
/** Manually set a cache entry */
|
|
11
|
+
set(filePath: string, content: string, mtime?: number): void;
|
|
12
|
+
/** Invalidate a specific file */
|
|
13
|
+
invalidate(filePath: string): void;
|
|
14
|
+
/** Clear entire cache */
|
|
15
|
+
clear(): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/graph/cache.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,SAAM;IAInB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAoBnD,iCAAiC;IACjC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAU5D,iCAAiC;IACjC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIlC,yBAAyB;IACzB,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
/**
|
|
3
|
+
* File content cache keyed by absolute path, invalidated by mtime.
|
|
4
|
+
* Avoids re-reading files that haven't changed.
|
|
5
|
+
*/
|
|
6
|
+
export class FileCache {
|
|
7
|
+
entries = new Map();
|
|
8
|
+
maxSize;
|
|
9
|
+
constructor(maxSize = 200) {
|
|
10
|
+
this.maxSize = maxSize;
|
|
11
|
+
}
|
|
12
|
+
async get(filePath) {
|
|
13
|
+
try {
|
|
14
|
+
const s = await stat(filePath);
|
|
15
|
+
const mtime = s.mtimeMs;
|
|
16
|
+
const cached = this.entries.get(filePath);
|
|
17
|
+
if (cached && cached.mtime === mtime) {
|
|
18
|
+
this.entries.delete(filePath);
|
|
19
|
+
this.entries.set(filePath, cached);
|
|
20
|
+
return cached.content;
|
|
21
|
+
}
|
|
22
|
+
const content = await readFile(filePath, "utf-8");
|
|
23
|
+
this.set(filePath, content, mtime);
|
|
24
|
+
return content;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Manually set a cache entry */
|
|
31
|
+
set(filePath, content, mtime) {
|
|
32
|
+
if (this.entries.size >= this.maxSize) {
|
|
33
|
+
// Evict oldest entry
|
|
34
|
+
const firstKey = this.entries.keys().next().value;
|
|
35
|
+
if (firstKey)
|
|
36
|
+
this.entries.delete(firstKey);
|
|
37
|
+
}
|
|
38
|
+
const mt = mtime ?? Date.now();
|
|
39
|
+
this.entries.set(filePath, { content, mtime: mt });
|
|
40
|
+
}
|
|
41
|
+
/** Invalidate a specific file */
|
|
42
|
+
invalidate(filePath) {
|
|
43
|
+
this.entries.delete(filePath);
|
|
44
|
+
}
|
|
45
|
+
/** Clear entire cache */
|
|
46
|
+
clear() {
|
|
47
|
+
this.entries.clear();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/graph/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAOlD;;;GAGG;AACH,MAAM,OAAO,SAAS;IACZ,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IACxC,OAAO,CAAS;IAExB,YAAY,OAAO,GAAG,GAAG;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,QAAgB;QACxB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE1C,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACnC,OAAO,MAAM,CAAC,OAAO,CAAC;YACxB,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACnC,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,GAAG,CAAC,QAAgB,EAAE,OAAe,EAAE,KAAc;QACnD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACtC,qBAAqB;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAClD,IAAI,QAAQ;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,EAAE,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,iCAAiC;IACjC,UAAU,CAAC,QAAgB;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,yBAAyB;IACzB,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import type { GraphStats, TopFileResult, FileDepResult, FileCoChangeResult, FileSymbolResult, SymbolSearchResult, SymbolSignatureResult, CallerResult, CalleeResult, UnusedExportResult, DuplicateStructureResult, NearDuplicateResult, ExternalPackageResult } from './types';
|
|
3
|
+
import type { Logger } from '../types';
|
|
4
|
+
interface GraphWorkerConfig {
|
|
5
|
+
cwd: string;
|
|
6
|
+
dbPath: string;
|
|
7
|
+
logger?: Logger;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* GraphClient communicates with the graph worker via RPC
|
|
11
|
+
* All tree-sitter parsing and SQLite queries run in worker thread
|
|
12
|
+
*/
|
|
13
|
+
export declare class GraphClient extends EventEmitter {
|
|
14
|
+
private client;
|
|
15
|
+
private worker;
|
|
16
|
+
private ready;
|
|
17
|
+
private workerError;
|
|
18
|
+
initialize(_config: GraphWorkerConfig): Promise<void>;
|
|
19
|
+
setWorker(worker: Worker, logger?: Logger): void;
|
|
20
|
+
markWorkerDead(error?: Error): void;
|
|
21
|
+
getWorkerError(): Error | null;
|
|
22
|
+
scan(): Promise<void>;
|
|
23
|
+
getStats(): Promise<GraphStats>;
|
|
24
|
+
getTopFiles(limit?: number): Promise<TopFileResult[]>;
|
|
25
|
+
getFileDependents(relPath: string): Promise<FileDepResult[]>;
|
|
26
|
+
getFileDependencies(relPath: string): Promise<FileDepResult[]>;
|
|
27
|
+
getFileCoChanges(relPath: string): Promise<FileCoChangeResult[]>;
|
|
28
|
+
getFileBlastRadius(relPath: string): Promise<number>;
|
|
29
|
+
getFileSymbols(relPath: string): Promise<FileSymbolResult[]>;
|
|
30
|
+
findSymbols(name: string, limit?: number): Promise<SymbolSearchResult[]>;
|
|
31
|
+
searchSymbolsFts(query: string, limit?: number): Promise<SymbolSearchResult[]>;
|
|
32
|
+
getSymbolSignature(path: string, line: number): Promise<SymbolSignatureResult | null>;
|
|
33
|
+
getCallers(path: string, line: number): Promise<CallerResult[]>;
|
|
34
|
+
getCallees(path: string, line: number): Promise<CalleeResult[]>;
|
|
35
|
+
getUnusedExports(limit?: number): Promise<UnusedExportResult[]>;
|
|
36
|
+
getDuplicateStructures(limit?: number): Promise<DuplicateStructureResult[]>;
|
|
37
|
+
getNearDuplicates(threshold?: number, limit?: number): Promise<NearDuplicateResult[]>;
|
|
38
|
+
getExternalPackages(limit?: number): Promise<ExternalPackageResult[]>;
|
|
39
|
+
render(opts?: {
|
|
40
|
+
maxFiles?: number;
|
|
41
|
+
maxSymbols?: number;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
content: string;
|
|
44
|
+
paths: string[];
|
|
45
|
+
}>;
|
|
46
|
+
onFileChanged(absPath: string): Promise<void>;
|
|
47
|
+
close(): Promise<void>;
|
|
48
|
+
isReady(): boolean;
|
|
49
|
+
}
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/graph/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { RpcClient } from './rpc';
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
/**
|
|
4
|
+
* GraphClient communicates with the graph worker via RPC
|
|
5
|
+
* All tree-sitter parsing and SQLite queries run in worker thread
|
|
6
|
+
*/
|
|
7
|
+
export class GraphClient extends EventEmitter {
|
|
8
|
+
client = null;
|
|
9
|
+
worker = null;
|
|
10
|
+
ready = false;
|
|
11
|
+
workerError = null;
|
|
12
|
+
async initialize(_config) {
|
|
13
|
+
// Worker will be created by service
|
|
14
|
+
this.ready = true;
|
|
15
|
+
}
|
|
16
|
+
setWorker(worker, logger) {
|
|
17
|
+
this.worker = worker;
|
|
18
|
+
this.client = new RpcClient(worker, logger);
|
|
19
|
+
this.client.on('error', (_error) => {
|
|
20
|
+
this.ready = false;
|
|
21
|
+
this.workerError = _error;
|
|
22
|
+
});
|
|
23
|
+
this.client.on('exit', () => {
|
|
24
|
+
this.ready = false;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
markWorkerDead(error) {
|
|
28
|
+
this.ready = false;
|
|
29
|
+
if (error) {
|
|
30
|
+
this.workerError = error;
|
|
31
|
+
}
|
|
32
|
+
if (this.client) {
|
|
33
|
+
this.client.markTerminated();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
getWorkerError() {
|
|
37
|
+
return this.workerError;
|
|
38
|
+
}
|
|
39
|
+
async scan() {
|
|
40
|
+
if (!this.client)
|
|
41
|
+
throw new Error('Graph client not initialized');
|
|
42
|
+
await this.client.call('scan', []);
|
|
43
|
+
}
|
|
44
|
+
async getStats() {
|
|
45
|
+
if (!this.client)
|
|
46
|
+
throw new Error('Graph client not initialized');
|
|
47
|
+
return this.client.call('getStats', []);
|
|
48
|
+
}
|
|
49
|
+
async getTopFiles(limit = 20) {
|
|
50
|
+
if (!this.client)
|
|
51
|
+
throw new Error('Graph client not initialized');
|
|
52
|
+
return this.client.call('getTopFiles', [limit]);
|
|
53
|
+
}
|
|
54
|
+
async getFileDependents(relPath) {
|
|
55
|
+
if (!this.client)
|
|
56
|
+
throw new Error('Graph client not initialized');
|
|
57
|
+
return this.client.call('getFileDependents', [relPath]);
|
|
58
|
+
}
|
|
59
|
+
async getFileDependencies(relPath) {
|
|
60
|
+
if (!this.client)
|
|
61
|
+
throw new Error('Graph client not initialized');
|
|
62
|
+
return this.client.call('getFileDependencies', [relPath]);
|
|
63
|
+
}
|
|
64
|
+
async getFileCoChanges(relPath) {
|
|
65
|
+
if (!this.client)
|
|
66
|
+
throw new Error('Graph client not initialized');
|
|
67
|
+
return this.client.call('getFileCoChanges', [relPath]);
|
|
68
|
+
}
|
|
69
|
+
async getFileBlastRadius(relPath) {
|
|
70
|
+
if (!this.client)
|
|
71
|
+
throw new Error('Graph client not initialized');
|
|
72
|
+
return this.client.call('getFileBlastRadius', [relPath]);
|
|
73
|
+
}
|
|
74
|
+
async getFileSymbols(relPath) {
|
|
75
|
+
if (!this.client)
|
|
76
|
+
throw new Error('Graph client not initialized');
|
|
77
|
+
return this.client.call('getFileSymbols', [relPath]);
|
|
78
|
+
}
|
|
79
|
+
async findSymbols(name, limit = 50) {
|
|
80
|
+
if (!this.client)
|
|
81
|
+
throw new Error('Graph client not initialized');
|
|
82
|
+
return this.client.call('findSymbols', [name, limit]);
|
|
83
|
+
}
|
|
84
|
+
async searchSymbolsFts(query, limit = 20) {
|
|
85
|
+
if (!this.client)
|
|
86
|
+
throw new Error('Graph client not initialized');
|
|
87
|
+
return this.client.call('searchSymbolsFts', [query, limit]);
|
|
88
|
+
}
|
|
89
|
+
async getSymbolSignature(path, line) {
|
|
90
|
+
if (!this.client)
|
|
91
|
+
throw new Error('Graph client not initialized');
|
|
92
|
+
return this.client.call('getSymbolSignature', [path, line]);
|
|
93
|
+
}
|
|
94
|
+
async getCallers(path, line) {
|
|
95
|
+
if (!this.client)
|
|
96
|
+
throw new Error('Graph client not initialized');
|
|
97
|
+
return this.client.call('getCallers', [path, line]);
|
|
98
|
+
}
|
|
99
|
+
async getCallees(path, line) {
|
|
100
|
+
if (!this.client)
|
|
101
|
+
throw new Error('Graph client not initialized');
|
|
102
|
+
return this.client.call('getCallees', [path, line]);
|
|
103
|
+
}
|
|
104
|
+
async getUnusedExports(limit = 20) {
|
|
105
|
+
if (!this.client)
|
|
106
|
+
throw new Error('Graph client not initialized');
|
|
107
|
+
return this.client.call('getUnusedExports', [limit]);
|
|
108
|
+
}
|
|
109
|
+
async getDuplicateStructures(limit = 20) {
|
|
110
|
+
if (!this.client)
|
|
111
|
+
throw new Error('Graph client not initialized');
|
|
112
|
+
return this.client.call('getDuplicateStructures', [limit]);
|
|
113
|
+
}
|
|
114
|
+
async getNearDuplicates(threshold = 0.8, limit = 50) {
|
|
115
|
+
if (!this.client)
|
|
116
|
+
throw new Error('Graph client not initialized');
|
|
117
|
+
return this.client.call('getNearDuplicates', [threshold, limit]);
|
|
118
|
+
}
|
|
119
|
+
async getExternalPackages(limit = 20) {
|
|
120
|
+
if (!this.client)
|
|
121
|
+
throw new Error('Graph client not initialized');
|
|
122
|
+
return this.client.call('getExternalPackages', [limit]);
|
|
123
|
+
}
|
|
124
|
+
async render(opts) {
|
|
125
|
+
if (!this.client)
|
|
126
|
+
throw new Error('Graph client not initialized');
|
|
127
|
+
return this.client.call('render', [opts]);
|
|
128
|
+
}
|
|
129
|
+
async onFileChanged(absPath) {
|
|
130
|
+
if (!this.client)
|
|
131
|
+
return;
|
|
132
|
+
if (!this.ready) {
|
|
133
|
+
throw new Error('Graph client not ready - worker may be unavailable');
|
|
134
|
+
}
|
|
135
|
+
await this.client.call('onFileChanged', [absPath]);
|
|
136
|
+
}
|
|
137
|
+
async close() {
|
|
138
|
+
if (this.client) {
|
|
139
|
+
this.client.terminate();
|
|
140
|
+
this.client = null;
|
|
141
|
+
}
|
|
142
|
+
if (this.worker) {
|
|
143
|
+
this.worker.terminate();
|
|
144
|
+
this.worker = null;
|
|
145
|
+
}
|
|
146
|
+
this.ready = false;
|
|
147
|
+
}
|
|
148
|
+
isReady() {
|
|
149
|
+
return this.ready;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/graph/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAwBrC;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IACnC,MAAM,GAAqB,IAAI,CAAA;IAC/B,MAAM,GAAkB,IAAI,CAAA;IAC5B,KAAK,GAAG,KAAK,CAAA;IACb,WAAW,GAAiB,IAAI,CAAA;IAExC,KAAK,CAAC,UAAU,CAAC,OAA0B;QACzC,oCAAoC;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,MAAe;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAE3C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,MAAa,EAAE,EAAE;YACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,cAAc,CAAC,KAAa;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAA;QAC9B,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAO,MAAM,EAAE,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAa,UAAU,EAAE,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAkB,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe;QACrC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAkB,mBAAmB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1E,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAe;QACvC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAkB,qBAAqB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAuB,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9E,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAS,oBAAoB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAqB,gBAAgB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,KAAK,GAAG,EAAE;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAuB,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IAC7E,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAuB,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IACnF,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAY,EAAE,IAAY;QACjD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAA+B,oBAAoB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC3F,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,IAAY;QACzC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAiB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,IAAY;QACzC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAiB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAK,GAAG,EAAE;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAuB,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAK,GAAG,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAA6B,wBAAwB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IACxF,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,SAAS,GAAG,GAAG,EAAE,KAAK,GAAG,EAAE;QACjD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAwB,mBAAmB,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAA;IACzF,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAK,GAAG,EAAE;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAA0B,qBAAqB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAClF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAiD;QAC5D,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAuC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IACjF,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAM;QACxB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;QACvE,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAO,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QACpB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QACpB,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function tokenize(source: string): string[];
|
|
2
|
+
export declare function computeMinHash(tokens: string[]): Uint32Array | null;
|
|
3
|
+
export declare function jaccardSimilarity(a: Uint32Array, b: Uint32Array): number;
|
|
4
|
+
export interface FragmentHash {
|
|
5
|
+
hash: string;
|
|
6
|
+
tokenOffset: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function computeFragmentHashes(tokens: string[]): FragmentHash[];
|
|
9
|
+
//# sourceMappingURL=clone-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-detection.d.ts","sourceRoot":"","sources":["../../src/graph/clone-detection.ts"],"names":[],"mappings":"AAqGA,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAMjD;AAKD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,IAAI,CAiBnE;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,CAMxE;AAKD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAYtE"}
|