compact-agent 1.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/README.md +394 -0
- package/bin/anycode.js +2 -0
- package/bin/crowcoder.js +19 -0
- package/bin/ecc-hooks.cjs +138 -0
- package/dist/agents.d.ts +17 -0
- package/dist/agents.js +1603 -0
- package/dist/agents.js.map +1 -0
- package/dist/api.d.ts +16 -0
- package/dist/api.js +115 -0
- package/dist/api.js.map +1 -0
- package/dist/autonomous-loops.d.ts +108 -0
- package/dist/autonomous-loops.js +526 -0
- package/dist/autonomous-loops.js.map +1 -0
- package/dist/codemaps.d.ts +53 -0
- package/dist/codemaps.js +325 -0
- package/dist/codemaps.js.map +1 -0
- package/dist/compaction.d.ts +30 -0
- package/dist/compaction.js +125 -0
- package/dist/compaction.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +79 -0
- package/dist/config.js.map +1 -0
- package/dist/content-engine.d.ts +97 -0
- package/dist/content-engine.js +721 -0
- package/dist/content-engine.js.map +1 -0
- package/dist/cost-tracker.d.ts +49 -0
- package/dist/cost-tracker.js +150 -0
- package/dist/cost-tracker.js.map +1 -0
- package/dist/counter-button.d.ts +35 -0
- package/dist/counter-button.js +48 -0
- package/dist/counter-button.js.map +1 -0
- package/dist/counter.d.ts +21 -0
- package/dist/counter.js +31 -0
- package/dist/counter.js.map +1 -0
- package/dist/coverage.d.ts +23 -0
- package/dist/coverage.js +215 -0
- package/dist/coverage.js.map +1 -0
- package/dist/docs-sync.d.ts +23 -0
- package/dist/docs-sync.js +266 -0
- package/dist/docs-sync.js.map +1 -0
- package/dist/ecc.d.ts +41 -0
- package/dist/ecc.js +644 -0
- package/dist/ecc.js.map +1 -0
- package/dist/evaluation.d.ts +24 -0
- package/dist/evaluation.js +412 -0
- package/dist/evaluation.js.map +1 -0
- package/dist/export.d.ts +22 -0
- package/dist/export.js +109 -0
- package/dist/export.js.map +1 -0
- package/dist/git-workflow.d.ts +22 -0
- package/dist/git-workflow.js +197 -0
- package/dist/git-workflow.js.map +1 -0
- package/dist/hook-controls.d.ts +34 -0
- package/dist/hook-controls.js +90 -0
- package/dist/hook-controls.js.map +1 -0
- package/dist/hooks.d.ts +30 -0
- package/dist/hooks.js +130 -0
- package/dist/hooks.js.map +1 -0
- package/dist/html-parser.d.ts +18 -0
- package/dist/html-parser.js +101 -0
- package/dist/html-parser.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +1230 -0
- package/dist/index.js.map +1 -0
- package/dist/learning.d.ts +35 -0
- package/dist/learning.js +238 -0
- package/dist/learning.js.map +1 -0
- package/dist/login.d.ts +37 -0
- package/dist/login.js +191 -0
- package/dist/login.js.map +1 -0
- package/dist/memory.d.ts +39 -0
- package/dist/memory.js +183 -0
- package/dist/memory.js.map +1 -0
- package/dist/model-router.d.ts +23 -0
- package/dist/model-router.js +145 -0
- package/dist/model-router.js.map +1 -0
- package/dist/modes.d.ts +17 -0
- package/dist/modes.js +217 -0
- package/dist/modes.js.map +1 -0
- package/dist/orchestration.d.ts +37 -0
- package/dist/orchestration.js +139 -0
- package/dist/orchestration.js.map +1 -0
- package/dist/package-detect.d.ts +36 -0
- package/dist/package-detect.js +529 -0
- package/dist/package-detect.js.map +1 -0
- package/dist/permissions.d.ts +25 -0
- package/dist/permissions.js +50 -0
- package/dist/permissions.js.map +1 -0
- package/dist/pm2-manager.d.ts +40 -0
- package/dist/pm2-manager.js +127 -0
- package/dist/pm2-manager.js.map +1 -0
- package/dist/query.d.ts +15 -0
- package/dist/query.js +278 -0
- package/dist/query.js.map +1 -0
- package/dist/refactor.d.ts +22 -0
- package/dist/refactor.js +226 -0
- package/dist/refactor.js.map +1 -0
- package/dist/retry.d.ts +20 -0
- package/dist/retry.js +88 -0
- package/dist/retry.js.map +1 -0
- package/dist/rules.d.ts +34 -0
- package/dist/rules.js +942 -0
- package/dist/rules.js.map +1 -0
- package/dist/schema.d.ts +23 -0
- package/dist/schema.js +12 -0
- package/dist/schema.js.map +1 -0
- package/dist/search-first.d.ts +17 -0
- package/dist/search-first.js +301 -0
- package/dist/search-first.js.map +1 -0
- package/dist/security.d.ts +10 -0
- package/dist/security.js +145 -0
- package/dist/security.js.map +1 -0
- package/dist/sessions.d.ts +21 -0
- package/dist/sessions.js +112 -0
- package/dist/sessions.js.map +1 -0
- package/dist/skill-create.d.ts +38 -0
- package/dist/skill-create.js +389 -0
- package/dist/skill-create.js.map +1 -0
- package/dist/skills.d.ts +34 -0
- package/dist/skills.js +161 -0
- package/dist/skills.js.map +1 -0
- package/dist/strategic-compaction.d.ts +24 -0
- package/dist/strategic-compaction.js +144 -0
- package/dist/strategic-compaction.js.map +1 -0
- package/dist/system-prompt.d.ts +3 -0
- package/dist/system-prompt.js +101 -0
- package/dist/system-prompt.js.map +1 -0
- package/dist/theme.d.ts +60 -0
- package/dist/theme.js +220 -0
- package/dist/theme.js.map +1 -0
- package/dist/tools/bash.d.ts +2 -0
- package/dist/tools/bash.js +49 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit.d.ts +2 -0
- package/dist/tools/edit.js +76 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/glob.d.ts +2 -0
- package/dist/tools/glob.js +54 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +2 -0
- package/dist/tools/grep.js +64 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.js +27 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-dir.d.ts +2 -0
- package/dist/tools/list-dir.js +51 -0
- package/dist/tools/list-dir.js.map +1 -0
- package/dist/tools/read.d.ts +2 -0
- package/dist/tools/read.js +56 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/types.d.ts +45 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +2 -0
- package/dist/tools/web-fetch.js +41 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +27 -0
- package/dist/tools/web-search.js +139 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/write.d.ts +2 -0
- package/dist/tools/write.js +36 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.js +57 -0
- package/dist/types.js.map +1 -0
- package/dist/users.d.ts +51 -0
- package/dist/users.js +193 -0
- package/dist/users.js.map +1 -0
- package/dist/verification.d.ts +73 -0
- package/dist/verification.js +269 -0
- package/dist/verification.js.map +1 -0
- package/dist/walkthrough.d.ts +10 -0
- package/dist/walkthrough.js +121 -0
- package/dist/walkthrough.js.map +1 -0
- package/package.json +58 -0
- package/resources/ecc/agents/architect.json +16 -0
- package/resources/ecc/agents/architect.md +212 -0
- package/resources/ecc/agents/build-error-resolver.json +17 -0
- package/resources/ecc/agents/build-error-resolver.md +116 -0
- package/resources/ecc/agents/chief-of-staff.json +17 -0
- package/resources/ecc/agents/chief-of-staff.md +153 -0
- package/resources/ecc/agents/code-reviewer.json +16 -0
- package/resources/ecc/agents/code-reviewer.md +238 -0
- package/resources/ecc/agents/database-reviewer.json +16 -0
- package/resources/ecc/agents/database-reviewer.md +92 -0
- package/resources/ecc/agents/doc-updater.json +16 -0
- package/resources/ecc/agents/doc-updater.md +108 -0
- package/resources/ecc/agents/e2e-runner.json +17 -0
- package/resources/ecc/agents/e2e-runner.md +109 -0
- package/resources/ecc/agents/go-build-resolver.json +17 -0
- package/resources/ecc/agents/go-build-resolver.md +96 -0
- package/resources/ecc/agents/go-reviewer.json +16 -0
- package/resources/ecc/agents/go-reviewer.md +77 -0
- package/resources/ecc/agents/harness-optimizer.json +15 -0
- package/resources/ecc/agents/harness-optimizer.md +34 -0
- package/resources/ecc/agents/loop-operator.json +16 -0
- package/resources/ecc/agents/loop-operator.md +36 -0
- package/resources/ecc/agents/planner.json +15 -0
- package/resources/ecc/agents/planner.md +212 -0
- package/resources/ecc/agents/python-reviewer.json +16 -0
- package/resources/ecc/agents/python-reviewer.md +99 -0
- package/resources/ecc/agents/refactor-cleaner.json +17 -0
- package/resources/ecc/agents/refactor-cleaner.md +87 -0
- package/resources/ecc/agents/security-reviewer.json +16 -0
- package/resources/ecc/agents/security-reviewer.md +109 -0
- package/resources/ecc/agents/tdd-guide.json +17 -0
- package/resources/ecc/agents/tdd-guide.md +93 -0
- package/resources/ecc/commands/add-language-rules.md +39 -0
- package/resources/ecc/commands/database-migration.md +36 -0
- package/resources/ecc/commands/feature-development.md +38 -0
- package/resources/ecc/prompts/build-fix.prompt.md +47 -0
- package/resources/ecc/prompts/code-review.prompt.md +56 -0
- package/resources/ecc/prompts/plan.prompt.md +52 -0
- package/resources/ecc/prompts/refactor.prompt.md +50 -0
- package/resources/ecc/prompts/security-review.prompt.md +70 -0
- package/resources/ecc/prompts/tdd.prompt.md +47 -0
- package/resources/ecc/rules/common-agents.md +53 -0
- package/resources/ecc/rules/common-coding-style.md +52 -0
- package/resources/ecc/rules/common-development-workflow.md +33 -0
- package/resources/ecc/rules/common-git-workflow.md +28 -0
- package/resources/ecc/rules/common-hooks.md +34 -0
- package/resources/ecc/rules/common-patterns.md +35 -0
- package/resources/ecc/rules/common-performance.md +59 -0
- package/resources/ecc/rules/common-security.md +33 -0
- package/resources/ecc/rules/common-testing.md +33 -0
- package/resources/ecc/rules/golang-coding-style.md +31 -0
- package/resources/ecc/rules/golang-hooks.md +16 -0
- package/resources/ecc/rules/golang-patterns.md +44 -0
- package/resources/ecc/rules/golang-security.md +33 -0
- package/resources/ecc/rules/golang-testing.md +30 -0
- package/resources/ecc/rules/kotlin-coding-style.md +39 -0
- package/resources/ecc/rules/kotlin-hooks.md +16 -0
- package/resources/ecc/rules/kotlin-patterns.md +50 -0
- package/resources/ecc/rules/kotlin-security.md +58 -0
- package/resources/ecc/rules/kotlin-testing.md +38 -0
- package/resources/ecc/rules/php-coding-style.md +25 -0
- package/resources/ecc/rules/php-hooks.md +21 -0
- package/resources/ecc/rules/php-patterns.md +23 -0
- package/resources/ecc/rules/php-security.md +24 -0
- package/resources/ecc/rules/php-testing.md +26 -0
- package/resources/ecc/rules/python-coding-style.md +42 -0
- package/resources/ecc/rules/python-hooks.md +19 -0
- package/resources/ecc/rules/python-patterns.md +39 -0
- package/resources/ecc/rules/python-security.md +30 -0
- package/resources/ecc/rules/python-testing.md +38 -0
- package/resources/ecc/rules/swift-coding-style.md +47 -0
- package/resources/ecc/rules/swift-hooks.md +20 -0
- package/resources/ecc/rules/swift-patterns.md +66 -0
- package/resources/ecc/rules/swift-security.md +33 -0
- package/resources/ecc/rules/swift-testing.md +45 -0
- package/resources/ecc/rules/typescript-coding-style.md +63 -0
- package/resources/ecc/rules/typescript-hooks.md +20 -0
- package/resources/ecc/rules/typescript-patterns.md +50 -0
- package/resources/ecc/rules/typescript-security.md +26 -0
- package/resources/ecc/rules/typescript-testing.md +16 -0
- package/resources/ecc/skills/agent-introspection-debugging/SKILL.md +152 -0
- package/resources/ecc/skills/agent-introspection-debugging/agents/openai.yaml +7 -0
- package/resources/ecc/skills/agent-sort/SKILL.md +214 -0
- package/resources/ecc/skills/agent-sort/agents/openai.yaml +7 -0
- package/resources/ecc/skills/api-design/SKILL.md +522 -0
- package/resources/ecc/skills/api-design/agents/openai.yaml +7 -0
- package/resources/ecc/skills/article-writing/SKILL.md +78 -0
- package/resources/ecc/skills/article-writing/agents/openai.yaml +7 -0
- package/resources/ecc/skills/backend-patterns/SKILL.md +597 -0
- package/resources/ecc/skills/backend-patterns/agents/openai.yaml +7 -0
- package/resources/ecc/skills/brand-voice/SKILL.md +96 -0
- package/resources/ecc/skills/brand-voice/agents/openai.yaml +7 -0
- package/resources/ecc/skills/brand-voice/references/voice-profile-schema.md +55 -0
- package/resources/ecc/skills/bun-runtime/SKILL.md +83 -0
- package/resources/ecc/skills/bun-runtime/agents/openai.yaml +7 -0
- package/resources/ecc/skills/coding-standards/SKILL.md +548 -0
- package/resources/ecc/skills/coding-standards/agents/openai.yaml +7 -0
- package/resources/ecc/skills/content-engine/SKILL.md +130 -0
- package/resources/ecc/skills/content-engine/agents/openai.yaml +7 -0
- package/resources/ecc/skills/crosspost/SKILL.md +110 -0
- package/resources/ecc/skills/crosspost/agents/openai.yaml +7 -0
- package/resources/ecc/skills/deep-research/SKILL.md +154 -0
- package/resources/ecc/skills/deep-research/agents/openai.yaml +7 -0
- package/resources/ecc/skills/dmux-workflows/SKILL.md +143 -0
- package/resources/ecc/skills/dmux-workflows/agents/openai.yaml +7 -0
- package/resources/ecc/skills/documentation-lookup/SKILL.md +89 -0
- package/resources/ecc/skills/documentation-lookup/agents/openai.yaml +7 -0
- package/resources/ecc/skills/e2e-testing/SKILL.md +325 -0
- package/resources/ecc/skills/e2e-testing/agents/openai.yaml +7 -0
- package/resources/ecc/skills/eval-harness/SKILL.md +235 -0
- package/resources/ecc/skills/eval-harness/agents/openai.yaml +7 -0
- package/resources/ecc/skills/everything-claude-code/SKILL.md +442 -0
- package/resources/ecc/skills/everything-claude-code/agents/openai.yaml +7 -0
- package/resources/ecc/skills/exa-search/SKILL.md +169 -0
- package/resources/ecc/skills/exa-search/agents/openai.yaml +7 -0
- package/resources/ecc/skills/fal-ai-media/SKILL.md +276 -0
- package/resources/ecc/skills/fal-ai-media/agents/openai.yaml +7 -0
- package/resources/ecc/skills/frontend-patterns/SKILL.md +647 -0
- package/resources/ecc/skills/frontend-patterns/agents/openai.yaml +7 -0
- package/resources/ecc/skills/frontend-slides/SKILL.md +183 -0
- package/resources/ecc/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/resources/ecc/skills/frontend-slides/agents/openai.yaml +7 -0
- package/resources/ecc/skills/investor-materials/SKILL.md +95 -0
- package/resources/ecc/skills/investor-materials/agents/openai.yaml +7 -0
- package/resources/ecc/skills/investor-outreach/SKILL.md +90 -0
- package/resources/ecc/skills/investor-outreach/agents/openai.yaml +7 -0
- package/resources/ecc/skills/market-research/SKILL.md +74 -0
- package/resources/ecc/skills/market-research/agents/openai.yaml +7 -0
- package/resources/ecc/skills/mcp-server-patterns/SKILL.md +66 -0
- package/resources/ecc/skills/mcp-server-patterns/agents/openai.yaml +7 -0
- package/resources/ecc/skills/mle-workflow/SKILL.md +346 -0
- package/resources/ecc/skills/mle-workflow/agents/openai.yaml +7 -0
- package/resources/ecc/skills/nextjs-turbopack/SKILL.md +43 -0
- package/resources/ecc/skills/nextjs-turbopack/agents/openai.yaml +7 -0
- package/resources/ecc/skills/product-capability/SKILL.md +140 -0
- package/resources/ecc/skills/product-capability/agents/openai.yaml +7 -0
- package/resources/ecc/skills/security-review/SKILL.md +494 -0
- package/resources/ecc/skills/security-review/agents/openai.yaml +7 -0
- package/resources/ecc/skills/strategic-compact/SKILL.md +102 -0
- package/resources/ecc/skills/strategic-compact/agents/openai.yaml +7 -0
- package/resources/ecc/skills/tdd-workflow/SKILL.md +409 -0
- package/resources/ecc/skills/tdd-workflow/agents/openai.yaml +7 -0
- package/resources/ecc/skills/verification-loop/SKILL.md +125 -0
- package/resources/ecc/skills/verification-loop/agents/openai.yaml +7 -0
- package/resources/ecc/skills/video-editing/SKILL.md +307 -0
- package/resources/ecc/skills/video-editing/agents/openai.yaml +7 -0
- package/resources/ecc/skills/x-api/SKILL.md +229 -0
- package/resources/ecc/skills/x-api/agents/openai.yaml +7 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PM2 Service Lifecycle Management
|
|
3
|
+
* Utilities for managing background services with PM2.
|
|
4
|
+
*/
|
|
5
|
+
import { execSync } from 'node:child_process';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
/**
|
|
8
|
+
* Build a prompt for Claude to help with PM2 lifecycle management.
|
|
9
|
+
* @param action - The PM2 action (start, stop, restart, delete, logs, status, scale)
|
|
10
|
+
* @returns A prompt describing what PM2 actions are available
|
|
11
|
+
*/
|
|
12
|
+
export function buildPM2Prompt(action) {
|
|
13
|
+
const actions = ['start', 'stop', 'restart', 'delete', 'logs', 'status', 'scale'];
|
|
14
|
+
const normalizedAction = action.toLowerCase();
|
|
15
|
+
if (!actions.includes(normalizedAction)) {
|
|
16
|
+
return `PM2 supports the following actions: ${actions.join(', ')}. Please specify a valid action.`;
|
|
17
|
+
}
|
|
18
|
+
const prompts = {
|
|
19
|
+
start: 'Use `pm2 start <script.js>` to start a service, or `pm2 start ecosystem.config.js` to start services from an ecosystem file.',
|
|
20
|
+
stop: 'Use `pm2 stop <app-name>` to stop a running service, or `pm2 stop all` to stop all services.',
|
|
21
|
+
restart: 'Use `pm2 restart <app-name>` to restart a service, or `pm2 restart all` to restart all services.',
|
|
22
|
+
delete: 'Use `pm2 delete <app-name>` to remove a service from PM2, or `pm2 delete all` to remove all services.',
|
|
23
|
+
logs: 'Use `pm2 logs <app-name>` to view real-time logs, or `pm2 logs` to view all logs. Use `pm2 logs --lines 100` to view last 100 lines.',
|
|
24
|
+
status: 'Use `pm2 list` or `pm2 status` to view all running services, their status, CPU/memory usage, and uptime.',
|
|
25
|
+
scale: 'Use `pm2 scale <app-name> <num>` to scale a service to N instances for load balancing.',
|
|
26
|
+
};
|
|
27
|
+
return prompts[normalizedAction] || 'Unknown PM2 action.';
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Check if PM2 is installed and available.
|
|
31
|
+
* @returns true if pm2 command is available, false otherwise
|
|
32
|
+
*/
|
|
33
|
+
export function isPM2Available() {
|
|
34
|
+
try {
|
|
35
|
+
execSync('pm2 -v', { stdio: 'pipe' });
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* List all PM2 services and return the formatted output.
|
|
44
|
+
* @param cwd - Working directory to run the command in
|
|
45
|
+
* @returns PM2 list output as a string
|
|
46
|
+
*/
|
|
47
|
+
export function listPM2Services(cwd) {
|
|
48
|
+
try {
|
|
49
|
+
const output = execSync('pm2 list', {
|
|
50
|
+
cwd,
|
|
51
|
+
encoding: 'utf-8',
|
|
52
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
53
|
+
});
|
|
54
|
+
return output;
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
return `Error listing PM2 services: ${err instanceof Error ? err.message : String(err)}`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build a prompt for creating a PM2 ecosystem configuration file.
|
|
62
|
+
* @param cwd - Working directory where the ecosystem file will be created
|
|
63
|
+
* @returns A prompt with guidance on creating ecosystem.config.js
|
|
64
|
+
*/
|
|
65
|
+
export function buildEcosystemPrompt(cwd) {
|
|
66
|
+
return `To manage multiple services with PM2, create an ecosystem.config.js file in ${cwd}.
|
|
67
|
+
|
|
68
|
+
Example structure:
|
|
69
|
+
module.exports = {
|
|
70
|
+
apps: [
|
|
71
|
+
{
|
|
72
|
+
name: 'api-server',
|
|
73
|
+
script: './dist/server.js',
|
|
74
|
+
instances: 2,
|
|
75
|
+
exec_mode: 'cluster',
|
|
76
|
+
max_memory_restart: '500M',
|
|
77
|
+
env: {
|
|
78
|
+
NODE_ENV: 'production'
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'worker',
|
|
83
|
+
script: './dist/worker.js',
|
|
84
|
+
instances: 1,
|
|
85
|
+
max_memory_restart: '300M'
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
Then start all services with: pm2 start ecosystem.config.js
|
|
91
|
+
Monitor logs with: pm2 logs
|
|
92
|
+
View status with: pm2 status`;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Pretty-print PM2 status output with colored formatting.
|
|
96
|
+
* @param output - Raw PM2 list output
|
|
97
|
+
*/
|
|
98
|
+
export function printPM2Status(output) {
|
|
99
|
+
const lines = output.split('\n');
|
|
100
|
+
console.log(chalk.bold.cyan('\n=== PM2 Service Status ===\n'));
|
|
101
|
+
for (const line of lines) {
|
|
102
|
+
// Color-code status indicators
|
|
103
|
+
if (line.includes('online')) {
|
|
104
|
+
console.log(chalk.green(line));
|
|
105
|
+
}
|
|
106
|
+
else if (line.includes('stopped')) {
|
|
107
|
+
console.log(chalk.red(line));
|
|
108
|
+
}
|
|
109
|
+
else if (line.includes('errored')) {
|
|
110
|
+
console.log(chalk.red.bold(line));
|
|
111
|
+
}
|
|
112
|
+
else if (line.includes('one-launch-status')) {
|
|
113
|
+
console.log(chalk.yellow(line));
|
|
114
|
+
}
|
|
115
|
+
else if (line.match(/CPU|MEM|RESTART/)) {
|
|
116
|
+
console.log(chalk.dim(line));
|
|
117
|
+
}
|
|
118
|
+
else if (line.match(/id|name|namespace/i)) {
|
|
119
|
+
console.log(chalk.bold(line));
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
console.log(line);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
console.log(chalk.dim('\nUse `pm2 logs` to view service logs'));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=pm2-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pm2-manager.js","sourceRoot":"","sources":["../src/pm2-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/query.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as readline from 'node:readline/promises';
|
|
2
|
+
import type { Message, CrowcoderConfig } from './types.js';
|
|
3
|
+
import type { Mode } from './modes.js';
|
|
4
|
+
export interface QueryContext {
|
|
5
|
+
config: CrowcoderConfig;
|
|
6
|
+
messages: Message[];
|
|
7
|
+
cwd: string;
|
|
8
|
+
rl: readline.Interface;
|
|
9
|
+
sessionId: string;
|
|
10
|
+
mode: Mode;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Main query loop: sends messages to the API, handles tool calls, loops until done.
|
|
14
|
+
*/
|
|
15
|
+
export declare function runQuery(ctx: QueryContext): Promise<void>;
|
package/dist/query.js
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { ALL_TOOLS, getToolByName } from './tools/index.js';
|
|
2
|
+
import { streamChat } from './api.js';
|
|
3
|
+
import { checkPermission } from './permissions.js';
|
|
4
|
+
import { buildSystemPrompt } from './system-prompt.js';
|
|
5
|
+
import { runHooks } from './hooks.js';
|
|
6
|
+
import { scanToolCall, printSecurityWarning } from './security.js';
|
|
7
|
+
import { trackUsage } from './cost-tracker.js';
|
|
8
|
+
import { shouldCompact, compactMessages, quickCompact, DEFAULT_COMPACTION } from './compaction.js';
|
|
9
|
+
import { theme, sym, printToolRun, printToolResult, printThinkingOpen, printThinkingText, printThinkingClose, printCost } from './theme.js';
|
|
10
|
+
/**
|
|
11
|
+
* Validate tool arguments against the tool's JSON schema
|
|
12
|
+
*/
|
|
13
|
+
function validateToolArguments(tool, input) {
|
|
14
|
+
const schema = tool.parameters;
|
|
15
|
+
const required = schema.required || [];
|
|
16
|
+
const properties = schema.properties || {};
|
|
17
|
+
// Check required parameters exist
|
|
18
|
+
for (const param of required) {
|
|
19
|
+
if (!(param in input)) {
|
|
20
|
+
return { valid: false, error: `Missing required parameter: ${param}` };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Basic type checking for parameters that are specified
|
|
24
|
+
for (const [key, value] of Object.entries(input)) {
|
|
25
|
+
if (key in properties) {
|
|
26
|
+
const propSchema = properties[key] || {};
|
|
27
|
+
const expectedType = propSchema.type;
|
|
28
|
+
if (expectedType === 'string' && typeof value !== 'string') {
|
|
29
|
+
return { valid: false, error: `Parameter ${key} must be a string` };
|
|
30
|
+
}
|
|
31
|
+
if (expectedType === 'number' && typeof value !== 'number') {
|
|
32
|
+
return { valid: false, error: `Parameter ${key} must be a number` };
|
|
33
|
+
}
|
|
34
|
+
if (expectedType === 'boolean' && typeof value !== 'boolean') {
|
|
35
|
+
return { valid: false, error: `Parameter ${key} must be a boolean` };
|
|
36
|
+
}
|
|
37
|
+
if (expectedType === 'object' && typeof value !== 'object') {
|
|
38
|
+
return { valid: false, error: `Parameter ${key} must be an object` };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { valid: true };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Main query loop: sends messages to the API, handles tool calls, loops until done.
|
|
46
|
+
*/
|
|
47
|
+
export async function runQuery(ctx) {
|
|
48
|
+
const maxTurns = 50;
|
|
49
|
+
let turns = 0;
|
|
50
|
+
// Auto-compact if context is getting large
|
|
51
|
+
if (shouldCompact(ctx.messages, DEFAULT_COMPACTION)) {
|
|
52
|
+
console.log(theme.dim(` ${sym.running} auto-compacting conversation context...`));
|
|
53
|
+
ctx.messages = await compactMessages(ctx.messages, ctx.config);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Quick compact: truncate oversized tool results
|
|
57
|
+
ctx.messages = quickCompact(ctx.messages);
|
|
58
|
+
}
|
|
59
|
+
while (turns < maxTurns) {
|
|
60
|
+
turns++;
|
|
61
|
+
// Get the last user message for context-aware system prompt
|
|
62
|
+
const lastUserMsg = ctx.messages.filter((m) => m.role === 'user').pop();
|
|
63
|
+
const userQuery = typeof lastUserMsg?.content === 'string' ? lastUserMsg.content : undefined;
|
|
64
|
+
// Build full messages array with system prompt
|
|
65
|
+
const systemPrompt = buildSystemPrompt(ctx.config, ctx.cwd, ctx.mode, userQuery);
|
|
66
|
+
const apiMessages = [
|
|
67
|
+
{ role: 'system', content: systemPrompt },
|
|
68
|
+
...ctx.messages,
|
|
69
|
+
];
|
|
70
|
+
let fullText = '';
|
|
71
|
+
let toolCalls;
|
|
72
|
+
let hasOutput = false;
|
|
73
|
+
let thinkingActive = false;
|
|
74
|
+
try {
|
|
75
|
+
for await (const event of streamChat(ctx.config, apiMessages, ALL_TOOLS)) {
|
|
76
|
+
if (event.type === 'thinking' && event.content) {
|
|
77
|
+
// Show thinking tokens if the toggle is enabled
|
|
78
|
+
if (ctx.config.showThinking) {
|
|
79
|
+
if (!thinkingActive) {
|
|
80
|
+
printThinkingOpen();
|
|
81
|
+
thinkingActive = true;
|
|
82
|
+
}
|
|
83
|
+
printThinkingText(event.content);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (event.type === 'text' && event.content) {
|
|
87
|
+
if (thinkingActive) {
|
|
88
|
+
printThinkingClose();
|
|
89
|
+
thinkingActive = false;
|
|
90
|
+
}
|
|
91
|
+
if (!hasOutput) {
|
|
92
|
+
process.stdout.write('\n');
|
|
93
|
+
hasOutput = true;
|
|
94
|
+
}
|
|
95
|
+
process.stdout.write(theme.primary(event.content));
|
|
96
|
+
fullText += event.content;
|
|
97
|
+
}
|
|
98
|
+
else if (event.type === 'tool_call') {
|
|
99
|
+
toolCalls = event.toolCalls;
|
|
100
|
+
}
|
|
101
|
+
else if (event.type === 'done') {
|
|
102
|
+
// Track usage and cost
|
|
103
|
+
if (event.usage) {
|
|
104
|
+
const u = event.usage;
|
|
105
|
+
const { cost, warning } = trackUsage(ctx.sessionId, ctx.config.model, u.prompt, u.completion);
|
|
106
|
+
printCost(u.prompt, u.completion, cost, warning);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
113
|
+
console.log(theme.error(`\n ${sym.error} API Error: ${msg}`));
|
|
114
|
+
ctx.messages.push({ role: 'assistant', content: `[API error: ${msg}]` });
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
if (hasOutput) {
|
|
118
|
+
process.stdout.write('\n');
|
|
119
|
+
}
|
|
120
|
+
// Save assistant message
|
|
121
|
+
const assistantMsg = { role: 'assistant', content: fullText || null };
|
|
122
|
+
if (toolCalls && toolCalls.length > 0) {
|
|
123
|
+
assistantMsg.tool_calls = toolCalls;
|
|
124
|
+
}
|
|
125
|
+
ctx.messages.push(assistantMsg);
|
|
126
|
+
// If no tool calls, we're done
|
|
127
|
+
if (!toolCalls || toolCalls.length === 0)
|
|
128
|
+
break;
|
|
129
|
+
// Execute tool calls
|
|
130
|
+
const toolResults = await executeToolCalls(toolCalls, ctx);
|
|
131
|
+
ctx.messages.push(...toolResults);
|
|
132
|
+
}
|
|
133
|
+
if (turns >= maxTurns) {
|
|
134
|
+
console.log(theme.warning(`\n ${sym.warn} reached max turns limit`));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async function executeToolCalls(toolCalls, ctx) {
|
|
138
|
+
const results = [];
|
|
139
|
+
for (const tc of toolCalls) {
|
|
140
|
+
const toolName = tc.function.name;
|
|
141
|
+
const tool = getToolByName(toolName);
|
|
142
|
+
if (!tool) {
|
|
143
|
+
// Free models routinely hallucinate tool names (web_search_exa,
|
|
144
|
+
// google_search, etc.). Telling the model exactly what IS available lets
|
|
145
|
+
// it self-correct on the next iteration instead of giving up.
|
|
146
|
+
const valid = ALL_TOOLS.map((t) => t.name).join(', ');
|
|
147
|
+
console.log(theme.error(` ${sym.error} Unknown tool: ${toolName} (valid: ${valid})`));
|
|
148
|
+
results.push({
|
|
149
|
+
role: 'tool',
|
|
150
|
+
tool_call_id: tc.id,
|
|
151
|
+
content: `Error: tool "${toolName}" does not exist. Available tools: ${valid}. ` +
|
|
152
|
+
`Retry with one of these exact names. Do not invent tool names — if you ` +
|
|
153
|
+
`need a capability not in this list, work around it using the tools that exist ` +
|
|
154
|
+
`(e.g. use web_search for discovery, web_fetch for a known URL, bash for shell-only operations).`,
|
|
155
|
+
});
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
let input;
|
|
159
|
+
try {
|
|
160
|
+
input = JSON.parse(tc.function.arguments);
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
console.log(theme.error(` ${sym.error} Invalid tool arguments for ${toolName}`));
|
|
164
|
+
results.push({
|
|
165
|
+
role: 'tool',
|
|
166
|
+
tool_call_id: tc.id,
|
|
167
|
+
content: 'Error: could not parse tool arguments as JSON',
|
|
168
|
+
});
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
// Validate arguments against tool's JSON schema
|
|
172
|
+
const validation = validateToolArguments(tool, input);
|
|
173
|
+
if (!validation.valid) {
|
|
174
|
+
console.log(theme.error(` ${sym.error} Invalid tool arguments for ${toolName}: ${validation.error}`));
|
|
175
|
+
results.push({
|
|
176
|
+
role: 'tool',
|
|
177
|
+
tool_call_id: tc.id,
|
|
178
|
+
content: `Error: ${validation.error}`,
|
|
179
|
+
});
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
// ── Security scan ─────────────────────────────────────
|
|
183
|
+
const secResult = scanToolCall(toolName, input);
|
|
184
|
+
if (secResult.threats.length > 0) {
|
|
185
|
+
printSecurityWarning(secResult);
|
|
186
|
+
}
|
|
187
|
+
if (secResult.blocked) {
|
|
188
|
+
results.push({
|
|
189
|
+
role: 'tool',
|
|
190
|
+
tool_call_id: tc.id,
|
|
191
|
+
content: `BLOCKED by security scanner: ${secResult.threats.join('; ')}`,
|
|
192
|
+
});
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
// ── Pre-tool hook ─────────────────────────────────────
|
|
196
|
+
const preHook = await runHooks({
|
|
197
|
+
event: 'PreToolUse',
|
|
198
|
+
toolName,
|
|
199
|
+
toolInput: input,
|
|
200
|
+
sessionId: ctx.sessionId,
|
|
201
|
+
cwd: ctx.cwd,
|
|
202
|
+
});
|
|
203
|
+
if (!preHook.allowed) {
|
|
204
|
+
results.push({
|
|
205
|
+
role: 'tool',
|
|
206
|
+
tool_call_id: tc.id,
|
|
207
|
+
content: `Blocked by hook: ${preHook.message || 'denied'}`,
|
|
208
|
+
});
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
// ── Permission check ──────────────────────────────────
|
|
212
|
+
const allowed = await checkPermission(tool, input, ctx.config, ctx.rl);
|
|
213
|
+
if (!allowed) {
|
|
214
|
+
console.log(theme.warning(` ${sym.warn} Denied: ${toolName}`));
|
|
215
|
+
results.push({
|
|
216
|
+
role: 'tool',
|
|
217
|
+
tool_call_id: tc.id,
|
|
218
|
+
content: 'Permission denied by user.',
|
|
219
|
+
});
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
// ── Execute ───────────────────────────────────────────
|
|
223
|
+
printToolRun(toolName, formatArgs(tool, input));
|
|
224
|
+
let result;
|
|
225
|
+
if (ctx.config.dryRun) {
|
|
226
|
+
console.log(theme.warning(` ${sym.pending} [DRY RUN] Would execute: ${toolName}`));
|
|
227
|
+
console.log(theme.warning(` Arguments: ${JSON.stringify(input).slice(0, 100)}`));
|
|
228
|
+
result = {
|
|
229
|
+
isError: false,
|
|
230
|
+
output: `[DRY RUN] Tool execution skipped`,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
const startTime = Date.now();
|
|
235
|
+
result = await tool.call(input, ctx.cwd);
|
|
236
|
+
const elapsed = Date.now() - startTime;
|
|
237
|
+
printToolResult(!result.isError, elapsed, result.output);
|
|
238
|
+
}
|
|
239
|
+
// ── Post-tool hook ────────────────────────────────────
|
|
240
|
+
await runHooks({
|
|
241
|
+
event: 'PostToolUse',
|
|
242
|
+
toolName,
|
|
243
|
+
toolInput: input,
|
|
244
|
+
toolOutput: result.output.slice(0, 1000),
|
|
245
|
+
sessionId: ctx.sessionId,
|
|
246
|
+
cwd: ctx.cwd,
|
|
247
|
+
});
|
|
248
|
+
results.push({
|
|
249
|
+
role: 'tool',
|
|
250
|
+
tool_call_id: tc.id,
|
|
251
|
+
content: result.output,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
return results;
|
|
255
|
+
}
|
|
256
|
+
function formatArgs(tool, input) {
|
|
257
|
+
switch (tool.name) {
|
|
258
|
+
case 'bash':
|
|
259
|
+
return `$ ${input.command}`;
|
|
260
|
+
case 'read_file':
|
|
261
|
+
return String(input.file_path);
|
|
262
|
+
case 'write_file':
|
|
263
|
+
return String(input.file_path);
|
|
264
|
+
case 'edit_file':
|
|
265
|
+
return String(input.file_path);
|
|
266
|
+
case 'grep':
|
|
267
|
+
return `/${input.pattern}/${input.path ? ` in ${input.path}` : ''}`;
|
|
268
|
+
case 'glob':
|
|
269
|
+
return String(input.pattern);
|
|
270
|
+
case 'list_dir':
|
|
271
|
+
return String(input.path || '.');
|
|
272
|
+
case 'web_fetch':
|
|
273
|
+
return String(input.url);
|
|
274
|
+
default:
|
|
275
|
+
return JSON.stringify(input).slice(0, 80);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEnG,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAW5I;;GAEG;AACH,SAAS,qBAAqB,CAAC,IAAU,EAAE,KAA8B;IACvE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAgD,CAAC;IACrE,MAAM,QAAQ,GAAI,MAAM,CAAC,QAAqB,IAAI,EAAE,CAAC;IACrD,MAAM,UAAU,GAAI,MAAM,CAAC,UAAsC,IAAI,EAAE,CAAC;IAExE,kCAAkC;IAClC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,KAAK,EAAE,EAAE,CAAC;QACzE,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;YACtB,MAAM,UAAU,GAAI,UAAU,CAAC,GAAG,CAA6B,IAAI,EAAE,CAAC;YACtE,MAAM,YAAY,GAAG,UAAU,CAAC,IAAc,CAAC;YAE/C,IAAI,YAAY,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,GAAG,mBAAmB,EAAE,CAAC;YACtE,CAAC;YACD,IAAI,YAAY,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,GAAG,mBAAmB,EAAE,CAAC;YACtE,CAAC;YACD,IAAI,YAAY,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC7D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,GAAG,oBAAoB,EAAE,CAAC;YACvE,CAAC;YACD,IAAI,YAAY,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,GAAG,oBAAoB,EAAE,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAiB;IAC9C,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,2CAA2C;IAC3C,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,0CAA0C,CAAC,CAAC,CAAC;QACnF,GAAG,CAAC,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,iDAAiD;QACjD,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,KAAK,GAAG,QAAQ,EAAE,CAAC;QACxB,KAAK,EAAE,CAAC;QAER,4DAA4D;QAC5D,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QACxE,MAAM,SAAS,GAAG,OAAO,WAAW,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAE7F,+CAA+C;QAC/C,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjF,MAAM,WAAW,GAAc;YAC7B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;YACzC,GAAG,GAAG,CAAC,QAAQ;SAChB,CAAC;QAEF,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,SAAwG,CAAC;QAC7G,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;gBACzE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC/C,gDAAgD;oBAChD,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;wBAC5B,IAAI,CAAC,cAAc,EAAE,CAAC;4BACpB,iBAAiB,EAAE,CAAC;4BACpB,cAAc,GAAG,IAAI,CAAC;wBACxB,CAAC;wBACD,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAClD,IAAI,cAAc,EAAE,CAAC;wBACnB,kBAAkB,EAAE,CAAC;wBACrB,cAAc,GAAG,KAAK,CAAC;oBACzB,CAAC;oBACD,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC3B,SAAS,GAAG,IAAI,CAAC;oBACnB,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnD,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC;gBAC5B,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACtC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBAC9B,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACjC,uBAAuB;oBACvB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;wBAChB,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;wBACtB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,CAClC,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,MAAM,CAAC,KAAK,EAChB,CAAC,CAAC,MAAM,EACR,CAAC,CAAC,UAAU,CACb,CAAC;wBACF,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/D,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,GAAG,GAAG,EAAE,CAAC,CAAC;YACzE,MAAM;QACR,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,yBAAyB;QACzB,MAAM,YAAY,GAAY,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC/E,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,YAAY,CAAC,UAAU,GAAG,SAAS,CAAC;QACtC,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhC,+BAA+B;QAC/B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QAEhD,qBAAqB;QACrB,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC3D,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,SAA4F,EAC5F,GAAiB;IAEjB,MAAM,OAAO,GAAc,EAAE,CAAC;IAE9B,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClC,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAErC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,gEAAgE;YAChE,yEAAyE;YACzE,8DAA8D;YAC9D,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,kBAAkB,QAAQ,YAAY,KAAK,GAAG,CAAC,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,EAAE,CAAC,EAAE;gBACnB,OAAO,EACL,gBAAgB,QAAQ,sCAAsC,KAAK,IAAI;oBACvE,yEAAyE;oBACzE,gFAAgF;oBAChF,iGAAiG;aACpG,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,KAA8B,CAAC;QACnC,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,+BAA+B,QAAQ,EAAE,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,EAAE,CAAC,EAAE;gBACnB,OAAO,EAAE,+CAA+C;aACzD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,gDAAgD;QAChD,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,+BAA+B,QAAQ,KAAK,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACvG,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,EAAE,CAAC,EAAE;gBACnB,OAAO,EAAE,UAAU,UAAU,CAAC,KAAK,EAAE;aACtC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,yDAAyD;QACzD,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,EAAE,CAAC,EAAE;gBACnB,OAAO,EAAE,gCAAgC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACxE,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,yDAAyD;QACzD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC;YAC7B,KAAK,EAAE,YAAY;YACnB,QAAQ;YACR,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,GAAG,EAAE,GAAG,CAAC,GAAG;SACb,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,EAAE,CAAC,EAAE;gBACnB,OAAO,EAAE,oBAAoB,OAAO,CAAC,OAAO,IAAI,QAAQ,EAAE;aAC3D,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,yDAAyD;QACzD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,YAAY,QAAQ,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,EAAE,CAAC,EAAE;gBACnB,OAAO,EAAE,4BAA4B;aACtC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,yDAAyD;QACzD,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAEhD,IAAI,MAAM,CAAC;QACX,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,OAAO,6BAA6B,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3F,MAAM,GAAG;gBACP,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,kCAAkC;aAC3C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACvC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QAED,yDAAyD;QACzD,MAAM,QAAQ,CAAC;YACb,KAAK,EAAE,aAAa;YACpB,QAAQ;YACR,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YACxC,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,GAAG,EAAE,GAAG,CAAC,GAAG;SACb,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,MAAM;YACZ,YAAY,EAAE,EAAE,CAAC,EAAE;YACnB,OAAO,EAAE,MAAM,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,IAAU,EAAE,KAA8B;IAC5D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9B,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,KAAK,YAAY;YACf,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,KAAK,MAAM;YACT,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACtE,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QACnC,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B;YACE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface DeadCodeAnalysis {
|
|
2
|
+
unusedExports: string[];
|
|
3
|
+
unreachableCode: string[];
|
|
4
|
+
unusedVariables: string[];
|
|
5
|
+
duplicatedLogic: string[];
|
|
6
|
+
highComplexityFunctions: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Build a comprehensive prompt for AI to detect dead code and duplicates.
|
|
10
|
+
* Optionally targets a specific file or pattern.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildRefactorPrompt(cwd: string, target?: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Build a more focused prompt for dead code cleanup only.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildCleanupPrompt(cwd: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Print a summary of dead code analysis.
|
|
19
|
+
*/
|
|
20
|
+
export declare function printDeadCodeAnalysis(analysis: DeadCodeAnalysis): void;
|
|
21
|
+
export declare function getSourceFiles(cwd: string): string[];
|
|
22
|
+
export declare function projectHasTests(cwd: string): boolean;
|