@polka-codes/cli 0.10.23 → 0.10.25
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/bin.cjs +143854 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9201 -9195
- package/dist/program.d.ts +3 -0
- package/dist/program.d.ts.map +1 -0
- package/package.json +6 -7
- package/cli.mjs +0 -2
- package/dist/ApiProviderConfig.js +0 -57
- package/dist/ApiProviderConfig.js.map +0 -1
- package/dist/ApiProviderConfig.test.js +0 -278
- package/dist/ApiProviderConfig.test.js.map +0 -1
- package/dist/agent/advanced-discovery.js +0 -604
- package/dist/agent/advanced-discovery.js.map +0 -1
- package/dist/agent/config.js +0 -139
- package/dist/agent/config.js.map +0 -1
- package/dist/agent/config.test.js +0 -140
- package/dist/agent/config.test.js.map +0 -1
- package/dist/agent/constants.js +0 -172
- package/dist/agent/constants.js.map +0 -1
- package/dist/agent/constants.test.js +0 -132
- package/dist/agent/constants.test.js.map +0 -1
- package/dist/agent/debug-logger.js +0 -281
- package/dist/agent/debug-logger.js.map +0 -1
- package/dist/agent/debug-logger.test.js +0 -294
- package/dist/agent/debug-logger.test.js.map +0 -1
- package/dist/agent/error-handling.js +0 -114
- package/dist/agent/error-handling.js.map +0 -1
- package/dist/agent/error-handling.test.js +0 -191
- package/dist/agent/error-handling.test.js.map +0 -1
- package/dist/agent/errors.js +0 -301
- package/dist/agent/errors.js.map +0 -1
- package/dist/agent/executor.js +0 -206
- package/dist/agent/executor.js.map +0 -1
- package/dist/agent/executor.test.js +0 -228
- package/dist/agent/executor.test.js.map +0 -1
- package/dist/agent/goal-decomposer.js +0 -281
- package/dist/agent/goal-decomposer.js.map +0 -1
- package/dist/agent/goal-decomposer.test.js +0 -225
- package/dist/agent/goal-decomposer.test.js.map +0 -1
- package/dist/agent/health-monitor.js +0 -89
- package/dist/agent/health-monitor.js.map +0 -1
- package/dist/agent/improvement-loop.js +0 -177
- package/dist/agent/improvement-loop.js.map +0 -1
- package/dist/agent/index.js +0 -38
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/metrics.js +0 -158
- package/dist/agent/metrics.js.map +0 -1
- package/dist/agent/metrics.test.js +0 -311
- package/dist/agent/metrics.test.js.map +0 -1
- package/dist/agent/orchestrator.js +0 -438
- package/dist/agent/orchestrator.js.map +0 -1
- package/dist/agent/planner.js +0 -199
- package/dist/agent/planner.js.map +0 -1
- package/dist/agent/planner.test.js +0 -135
- package/dist/agent/planner.test.js.map +0 -1
- package/dist/agent/progress.js +0 -298
- package/dist/agent/progress.js.map +0 -1
- package/dist/agent/progress.test.js +0 -255
- package/dist/agent/progress.test.js.map +0 -1
- package/dist/agent/resource-monitor.js +0 -114
- package/dist/agent/resource-monitor.js.map +0 -1
- package/dist/agent/safety/approval.js +0 -178
- package/dist/agent/safety/approval.js.map +0 -1
- package/dist/agent/safety/approval.test.js +0 -142
- package/dist/agent/safety/approval.test.js.map +0 -1
- package/dist/agent/safety/checks.js +0 -152
- package/dist/agent/safety/checks.js.map +0 -1
- package/dist/agent/safety/checks.test.js +0 -89
- package/dist/agent/safety/checks.test.js.map +0 -1
- package/dist/agent/safety/interrupt.js +0 -92
- package/dist/agent/safety/interrupt.js.map +0 -1
- package/dist/agent/safety/interrupt.test.js +0 -53
- package/dist/agent/safety/interrupt.test.js.map +0 -1
- package/dist/agent/session.js +0 -117
- package/dist/agent/session.js.map +0 -1
- package/dist/agent/session.test.js +0 -213
- package/dist/agent/session.test.js.map +0 -1
- package/dist/agent/state-manager.js +0 -287
- package/dist/agent/state-manager.js.map +0 -1
- package/dist/agent/task-discovery.js +0 -433
- package/dist/agent/task-discovery.js.map +0 -1
- package/dist/agent/task-discovery.test.js +0 -40
- package/dist/agent/task-discovery.test.js.map +0 -1
- package/dist/agent/task-history.js +0 -128
- package/dist/agent/task-history.js.map +0 -1
- package/dist/agent/task-prioritizer.js +0 -286
- package/dist/agent/task-prioritizer.js.map +0 -1
- package/dist/agent/test-fixtures.js +0 -112
- package/dist/agent/test-fixtures.js.map +0 -1
- package/dist/agent/types.js +0 -15
- package/dist/agent/types.js.map +0 -1
- package/dist/agent/workflow-adapter.js +0 -219
- package/dist/agent/workflow-adapter.js.map +0 -1
- package/dist/agent/workflow-adapter.test.js +0 -11
- package/dist/agent/workflow-adapter.test.js.map +0 -1
- package/dist/agent/working-dir-discovery.js +0 -54
- package/dist/agent/working-dir-discovery.js.map +0 -1
- package/dist/agent/working-space.js +0 -484
- package/dist/agent/working-space.js.map +0 -1
- package/dist/agent/working-space.test.js +0 -436
- package/dist/agent/working-space.test.js.map +0 -1
- package/dist/api.js +0 -279
- package/dist/api.js.map +0 -1
- package/dist/builtin-commands.js +0 -20
- package/dist/builtin-commands.js.map +0 -1
- package/dist/commandSummarizer.js +0 -96
- package/dist/commandSummarizer.js.map +0 -1
- package/dist/commands/__tests__/command-detection.integration.test.js +0 -238
- package/dist/commands/__tests__/command-detection.integration.test.js.map +0 -1
- package/dist/commands/__tests__/script-generator.integration.test.js +0 -271
- package/dist/commands/__tests__/script-generator.integration.test.js.map +0 -1
- package/dist/commands/agent.js +0 -218
- package/dist/commands/agent.js.map +0 -1
- package/dist/commands/code.js +0 -102
- package/dist/commands/code.js.map +0 -1
- package/dist/commands/command.constants.js +0 -13
- package/dist/commands/command.constants.js.map +0 -1
- package/dist/commands/commit.js +0 -17
- package/dist/commands/commit.js.map +0 -1
- package/dist/commands/fix.js +0 -17
- package/dist/commands/fix.js.map +0 -1
- package/dist/commands/init.js +0 -501
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/mcp-server.js +0 -122
- package/dist/commands/mcp-server.js.map +0 -1
- package/dist/commands/memory.js +0 -410
- package/dist/commands/memory.js.map +0 -1
- package/dist/commands/memory.test.js +0 -453
- package/dist/commands/memory.test.js.map +0 -1
- package/dist/commands/meta.js +0 -142
- package/dist/commands/meta.js.map +0 -1
- package/dist/commands/plan.js +0 -39
- package/dist/commands/plan.js.map +0 -1
- package/dist/commands/pr.js +0 -14
- package/dist/commands/pr.js.map +0 -1
- package/dist/commands/review-json.test.js +0 -33
- package/dist/commands/review-json.test.js.map +0 -1
- package/dist/commands/review.js +0 -137
- package/dist/commands/review.js.map +0 -1
- package/dist/commands/review.usage.test.js +0 -41
- package/dist/commands/review.usage.test.js.map +0 -1
- package/dist/commands/run.js +0 -107
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/skills.js +0 -175
- package/dist/commands/skills.js.map +0 -1
- package/dist/commands/task.js +0 -34
- package/dist/commands/task.js.map +0 -1
- package/dist/commands/workflow.js +0 -117
- package/dist/commands/workflow.js.map +0 -1
- package/dist/configPrompt.js +0 -39
- package/dist/configPrompt.js.map +0 -1
- package/dist/env.js +0 -22
- package/dist/env.js.map +0 -1
- package/dist/errors.js +0 -132
- package/dist/errors.js.map +0 -1
- package/dist/errors.test.js +0 -21
- package/dist/errors.test.js.map +0 -1
- package/dist/file-attachments.js +0 -77
- package/dist/file-attachments.js.map +0 -1
- package/dist/file-attachments.test.js +0 -214
- package/dist/file-attachments.test.js.map +0 -1
- package/dist/getModel.js +0 -229
- package/dist/getModel.js.map +0 -1
- package/dist/getModel.test.js +0 -67
- package/dist/getModel.test.js.map +0 -1
- package/dist/getProviderOptions.js +0 -58
- package/dist/getProviderOptions.js.map +0 -1
- package/dist/git-operations.js +0 -363
- package/dist/git-operations.js.map +0 -1
- package/dist/git-operations.test.js +0 -81
- package/dist/git-operations.test.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger.js +0 -41
- package/dist/logger.js.map +0 -1
- package/dist/mcp/client.js +0 -11
- package/dist/mcp/client.js.map +0 -1
- package/dist/mcp/error-scenarios.test.js +0 -206
- package/dist/mcp/error-scenarios.test.js.map +0 -1
- package/dist/mcp/errors.js +0 -63
- package/dist/mcp/errors.js.map +0 -1
- package/dist/mcp/index.js +0 -9
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/manager.js +0 -231
- package/dist/mcp/manager.js.map +0 -1
- package/dist/mcp/manager.test.js +0 -40
- package/dist/mcp/manager.test.js.map +0 -1
- package/dist/mcp/sdk-client.js +0 -166
- package/dist/mcp/sdk-client.js.map +0 -1
- package/dist/mcp/shared-types.js +0 -3
- package/dist/mcp/shared-types.js.map +0 -1
- package/dist/mcp/tools-integration.test.js +0 -198
- package/dist/mcp/tools-integration.test.js.map +0 -1
- package/dist/mcp/tools.js +0 -60
- package/dist/mcp/tools.js.map +0 -1
- package/dist/mcp/transport.js +0 -257
- package/dist/mcp/transport.js.map +0 -1
- package/dist/mcp/types.js +0 -3
- package/dist/mcp/types.js.map +0 -1
- package/dist/mcp-server/index.js +0 -5
- package/dist/mcp-server/index.js.map +0 -1
- package/dist/mcp-server/plan-formatting.test.js +0 -74
- package/dist/mcp-server/plan-formatting.test.js.map +0 -1
- package/dist/mcp-server/sdk-server.js +0 -102
- package/dist/mcp-server/sdk-server.js.map +0 -1
- package/dist/mcp-server/sdk-server.test.js +0 -363
- package/dist/mcp-server/sdk-server.test.js.map +0 -1
- package/dist/mcp-server/tools.js +0 -785
- package/dist/mcp-server/tools.js.map +0 -1
- package/dist/mcp-server/types.js +0 -3
- package/dist/mcp-server/types.js.map +0 -1
- package/dist/options.js +0 -85
- package/dist/options.js.map +0 -1
- package/dist/options.test.js +0 -177
- package/dist/options.test.js.map +0 -1
- package/dist/prices.js +0 -61
- package/dist/prices.js.map +0 -1
- package/dist/prices.test.js +0 -148
- package/dist/prices.test.js.map +0 -1
- package/dist/runWorkflow.js +0 -313
- package/dist/runWorkflow.js.map +0 -1
- package/dist/script/__tests__/execution.integration.test.js +0 -274
- package/dist/script/__tests__/execution.integration.test.js.map +0 -1
- package/dist/script/__tests__/runner.test.js +0 -176
- package/dist/script/__tests__/runner.test.js.map +0 -1
- package/dist/script/__tests__/validator.test.js +0 -180
- package/dist/script/__tests__/validator.test.js.map +0 -1
- package/dist/script/executor.js +0 -127
- package/dist/script/executor.js.map +0 -1
- package/dist/script/index.js +0 -4
- package/dist/script/index.js.map +0 -1
- package/dist/script/runner.js +0 -258
- package/dist/script/runner.js.map +0 -1
- package/dist/skillIntegration.js +0 -46
- package/dist/skillIntegration.js.map +0 -1
- package/dist/skillIntegration.test.js +0 -128
- package/dist/skillIntegration.test.js.map +0 -1
- package/dist/test/utils.js +0 -200
- package/dist/test/utils.js.map +0 -1
- package/dist/test/workflow-fixtures.js +0 -120
- package/dist/test/workflow-fixtures.js.map +0 -1
- package/dist/tool-implementations.js +0 -521
- package/dist/tool-implementations.js.map +0 -1
- package/dist/tool-implementations.skill-tools.test.js +0 -106
- package/dist/tool-implementations.skill-tools.test.js.map +0 -1
- package/dist/tools/getTodoItem.js +0 -33
- package/dist/tools/getTodoItem.js.map +0 -1
- package/dist/tools/gitDiff.js +0 -108
- package/dist/tools/gitDiff.js.map +0 -1
- package/dist/tools/index.js +0 -8
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/listMemoryTopics.js +0 -24
- package/dist/tools/listMemoryTopics.js.map +0 -1
- package/dist/tools/listTodoItems.js +0 -35
- package/dist/tools/listTodoItems.js.map +0 -1
- package/dist/tools/listTodoItems.test.js +0 -89
- package/dist/tools/listTodoItems.test.js.map +0 -1
- package/dist/tools/readMemory.js +0 -33
- package/dist/tools/readMemory.js.map +0 -1
- package/dist/tools/updateMemory.js +0 -62
- package/dist/tools/updateMemory.js.map +0 -1
- package/dist/tools/updateMemory.test.js +0 -109
- package/dist/tools/updateMemory.test.js.map +0 -1
- package/dist/tools/updateTodoItem.js +0 -31
- package/dist/tools/updateTodoItem.js.map +0 -1
- package/dist/tools/utils/diffLineNumbers.js +0 -178
- package/dist/tools/utils/diffLineNumbers.js.map +0 -1
- package/dist/utils/cacheControl.js +0 -59
- package/dist/utils/cacheControl.js.map +0 -1
- package/dist/utils/cacheControl.test.js +0 -128
- package/dist/utils/cacheControl.test.js.map +0 -1
- package/dist/utils/command.js +0 -50
- package/dist/utils/command.js.map +0 -1
- package/dist/utils/shell.js +0 -56
- package/dist/utils/shell.js.map +0 -1
- package/dist/utils/userInput.js +0 -47
- package/dist/utils/userInput.js.map +0 -1
- package/dist/workflow-tools.js +0 -21
- package/dist/workflow-tools.js.map +0 -1
- package/dist/workflows/agent-builder.js +0 -90
- package/dist/workflows/agent-builder.js.map +0 -1
- package/dist/workflows/agent-builder.test.js +0 -115
- package/dist/workflows/agent-builder.test.js.map +0 -1
- package/dist/workflows/code.workflow.js +0 -145
- package/dist/workflows/code.workflow.js.map +0 -1
- package/dist/workflows/commit.workflow.js +0 -111
- package/dist/workflows/commit.workflow.js.map +0 -1
- package/dist/workflows/commit.workflow.test.js +0 -141
- package/dist/workflows/commit.workflow.test.js.map +0 -1
- package/dist/workflows/fix.workflow.js +0 -172
- package/dist/workflows/fix.workflow.js.map +0 -1
- package/dist/workflows/fix.workflow.test.js +0 -137
- package/dist/workflows/fix.workflow.test.js.map +0 -1
- package/dist/workflows/git-file-tools.js +0 -408
- package/dist/workflows/git-file-tools.js.map +0 -1
- package/dist/workflows/index.js +0 -12
- package/dist/workflows/index.js.map +0 -1
- package/dist/workflows/init-interactive.workflow.js +0 -198
- package/dist/workflows/init-interactive.workflow.js.map +0 -1
- package/dist/workflows/init.workflow.js +0 -41
- package/dist/workflows/init.workflow.js.map +0 -1
- package/dist/workflows/meta.workflow.js +0 -107
- package/dist/workflows/meta.workflow.js.map +0 -1
- package/dist/workflows/plan.workflow.js +0 -275
- package/dist/workflows/plan.workflow.js.map +0 -1
- package/dist/workflows/plan.workflow.test.js +0 -419
- package/dist/workflows/plan.workflow.test.js.map +0 -1
- package/dist/workflows/pr.workflow.js +0 -54
- package/dist/workflows/pr.workflow.js.map +0 -1
- package/dist/workflows/pr.workflow.test.js +0 -98
- package/dist/workflows/pr.workflow.test.js.map +0 -1
- package/dist/workflows/prompts/coder.js +0 -85
- package/dist/workflows/prompts/coder.js.map +0 -1
- package/dist/workflows/prompts/commit.js +0 -16
- package/dist/workflows/prompts/commit.js.map +0 -1
- package/dist/workflows/prompts/fix.js +0 -44
- package/dist/workflows/prompts/fix.js.map +0 -1
- package/dist/workflows/prompts/index.js +0 -10
- package/dist/workflows/prompts/index.js.map +0 -1
- package/dist/workflows/prompts/init.js +0 -48
- package/dist/workflows/prompts/init.js.map +0 -1
- package/dist/workflows/prompts/meta.js +0 -17
- package/dist/workflows/prompts/meta.js.map +0 -1
- package/dist/workflows/prompts/plan.js +0 -212
- package/dist/workflows/prompts/plan.js.map +0 -1
- package/dist/workflows/prompts/pr.js +0 -15
- package/dist/workflows/prompts/pr.js.map +0 -1
- package/dist/workflows/prompts/review.js +0 -145
- package/dist/workflows/prompts/review.js.map +0 -1
- package/dist/workflows/prompts/shared.js +0 -93
- package/dist/workflows/prompts/shared.js.map +0 -1
- package/dist/workflows/review.workflow.js +0 -357
- package/dist/workflows/review.workflow.js.map +0 -1
- package/dist/workflows/task.workflow.js +0 -47
- package/dist/workflows/task.workflow.js.map +0 -1
- package/dist/workflows/testing/helper.js +0 -41
- package/dist/workflows/testing/helper.js.map +0 -1
- package/dist/workflows/workflow.utils.js +0 -351
- package/dist/workflows/workflow.utils.js.map +0 -1
- package/dist/workflows/workflow.utils.test.js +0 -45
- package/dist/workflows/workflow.utils.test.js.map +0 -1
|
@@ -1,604 +0,0 @@
|
|
|
1
|
-
import * as fs from 'node:fs/promises';
|
|
2
|
-
import * as path from 'node:path';
|
|
3
|
-
import { ulid } from 'ulid';
|
|
4
|
-
import { Priority } from './types';
|
|
5
|
-
/**
|
|
6
|
-
* Advanced discovery strategies for continuous improvement
|
|
7
|
-
*
|
|
8
|
-
* These strategies go beyond basic build/test/lint to discover:
|
|
9
|
-
* - Refactoring opportunities
|
|
10
|
-
* - Documentation gaps
|
|
11
|
-
* - Security vulnerabilities
|
|
12
|
-
* - Test coverage gaps
|
|
13
|
-
* - Performance issues
|
|
14
|
-
*
|
|
15
|
-
* biome-ignore lint/complexity/noStaticOnlyClass: This is a strategies registry pattern, not a utility class
|
|
16
|
-
*/
|
|
17
|
-
export class AdvancedDiscoveryStrategies {
|
|
18
|
-
/**
|
|
19
|
-
* Strategy: Discover refactoring opportunities
|
|
20
|
-
*
|
|
21
|
-
* Analyzes code for:
|
|
22
|
-
* - Duplicated code patterns
|
|
23
|
-
* - Long functions/methods
|
|
24
|
-
* - Complex functions
|
|
25
|
-
* - Code smells
|
|
26
|
-
*/
|
|
27
|
-
static refactoringStrategy = {
|
|
28
|
-
name: 'refactoring',
|
|
29
|
-
description: 'Find refactoring opportunities (duplicated code, long functions, code smells)',
|
|
30
|
-
enabled: false, // Disabled by default - can be noisy
|
|
31
|
-
checkChanges: true,
|
|
32
|
-
execute: async (context) => this.discoverRefactoringOpportunities(context),
|
|
33
|
-
priority: (_task) => ({ priority: Priority.LOW, reason: 'Code quality improvement' }),
|
|
34
|
-
};
|
|
35
|
-
/**
|
|
36
|
-
* Strategy: Discover documentation gaps
|
|
37
|
-
*
|
|
38
|
-
* Checks for:
|
|
39
|
-
* - Functions without JSDoc
|
|
40
|
-
* - Missing README for modules
|
|
41
|
-
* - Undocumented exports
|
|
42
|
-
*/
|
|
43
|
-
static documentationStrategy = {
|
|
44
|
-
name: 'documentation',
|
|
45
|
-
description: 'Find missing documentation (JSDoc, README, exports)',
|
|
46
|
-
enabled: false, // Disabled by default - can be noisy
|
|
47
|
-
checkChanges: true,
|
|
48
|
-
execute: async (context) => this.discoverDocumentationGaps(context),
|
|
49
|
-
priority: (_task) => ({ priority: Priority.TRIVIAL, reason: 'Documentation improvement' }),
|
|
50
|
-
};
|
|
51
|
-
/**
|
|
52
|
-
* Strategy: Security analysis
|
|
53
|
-
*
|
|
54
|
-
* Looks for:
|
|
55
|
-
* - Hardcoded secrets/credentials
|
|
56
|
-
* - Unsafe eval usage
|
|
57
|
-
* - SQL injection risks
|
|
58
|
-
* - XSS vulnerabilities
|
|
59
|
-
*/
|
|
60
|
-
static securityStrategy = {
|
|
61
|
-
name: 'security',
|
|
62
|
-
description: 'Find security vulnerabilities (secrets, unsafe patterns)',
|
|
63
|
-
enabled: true,
|
|
64
|
-
checkChanges: true,
|
|
65
|
-
execute: async (context) => this.discoverSecurityIssues(context),
|
|
66
|
-
priority: (_task) => ({ priority: Priority.CRITICAL, reason: 'Security vulnerability' }),
|
|
67
|
-
};
|
|
68
|
-
/**
|
|
69
|
-
* Strategy: Test coverage analysis
|
|
70
|
-
*
|
|
71
|
-
* Identifies:
|
|
72
|
-
* - Files without tests
|
|
73
|
-
* - Functions without test coverage
|
|
74
|
-
* - Low coverage areas
|
|
75
|
-
*/
|
|
76
|
-
static testCoverageStrategy = {
|
|
77
|
-
name: 'test-coverage',
|
|
78
|
-
description: 'Find untested code and low coverage areas',
|
|
79
|
-
enabled: true,
|
|
80
|
-
checkChanges: true,
|
|
81
|
-
execute: async (context) => this.discoverTestCoverageGaps(context),
|
|
82
|
-
priority: (_task) => ({ priority: Priority.MEDIUM, reason: 'Improve test coverage' }),
|
|
83
|
-
};
|
|
84
|
-
/**
|
|
85
|
-
* Strategy: Performance issues
|
|
86
|
-
*
|
|
87
|
-
* Detects:
|
|
88
|
-
* - N+1 query patterns
|
|
89
|
-
* - Inefficient loops
|
|
90
|
-
* - Missing caching opportunities
|
|
91
|
-
* - Large bundle sizes
|
|
92
|
-
*/
|
|
93
|
-
static performanceStrategy = {
|
|
94
|
-
name: 'performance',
|
|
95
|
-
description: 'Find performance issues (N+1 queries, inefficient code)',
|
|
96
|
-
enabled: false, // Disabled by default - requires analysis
|
|
97
|
-
checkChanges: true,
|
|
98
|
-
execute: async (context) => this.discoverPerformanceIssues(context),
|
|
99
|
-
priority: (_task) => ({ priority: Priority.MEDIUM, reason: 'Performance improvement' }),
|
|
100
|
-
};
|
|
101
|
-
/**
|
|
102
|
-
* Discover refactoring opportunities
|
|
103
|
-
*/
|
|
104
|
-
static async discoverRefactoringOpportunities(context) {
|
|
105
|
-
const tasks = [];
|
|
106
|
-
context.logger.debug('[AdvancedDiscovery] Analyzing code for refactoring opportunities...');
|
|
107
|
-
try {
|
|
108
|
-
// Find TypeScript/JavaScript files
|
|
109
|
-
const sourceFiles = await AdvancedDiscoveryStrategies.findSourceFiles(context.workingDir);
|
|
110
|
-
for (const file of sourceFiles) {
|
|
111
|
-
const content = await fs.readFile(file, 'utf-8');
|
|
112
|
-
// Check for long functions (>50 lines)
|
|
113
|
-
const functionMatches = content.matchAll(/(?:function\s+\w+|const\s+\w+\s*=\s*(?:async\s*)?(?:\([^)]*\)|\w+)\s*=>)\s*{/g);
|
|
114
|
-
for (const match of functionMatches) {
|
|
115
|
-
const funcStart = match.index || 0;
|
|
116
|
-
const funcEnd = AdvancedDiscoveryStrategies.findFunctionEnd(content, funcStart);
|
|
117
|
-
const funcLength = content.slice(funcStart, funcEnd).split('\n').length;
|
|
118
|
-
if (funcLength > 50) {
|
|
119
|
-
tasks.push({
|
|
120
|
-
id: AdvancedDiscoveryStrategies.generateId('refactor-long-func'),
|
|
121
|
-
type: 'refactoring',
|
|
122
|
-
title: `Refactor long function in ${path.relative(context.workingDir, file)}`,
|
|
123
|
-
description: `Function exceeds 50 lines (${funcLength} lines). Consider breaking it down into smaller functions.`,
|
|
124
|
-
priority: Priority.LOW,
|
|
125
|
-
complexity: 'medium',
|
|
126
|
-
dependencies: [],
|
|
127
|
-
estimatedTime: 30,
|
|
128
|
-
status: 'pending',
|
|
129
|
-
files: [file],
|
|
130
|
-
workflow: 'code',
|
|
131
|
-
workflowInput: {
|
|
132
|
-
prompt: `Refactor the long function in ${path.relative(context.workingDir, file)} to improve readability and maintainability. Break it down into smaller, well-named functions.`,
|
|
133
|
-
files: [file],
|
|
134
|
-
},
|
|
135
|
-
retryCount: 0,
|
|
136
|
-
createdAt: Date.now(),
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
// Check for deeply nested code (>4 levels)
|
|
141
|
-
const lines = content.split('\n');
|
|
142
|
-
for (let i = 0; i < lines.length; i++) {
|
|
143
|
-
const line = lines[i];
|
|
144
|
-
const indent = line.search(/\S/);
|
|
145
|
-
if (indent > 16) {
|
|
146
|
-
// More than 16 spaces = 4+ levels
|
|
147
|
-
tasks.push({
|
|
148
|
-
id: AdvancedDiscoveryStrategies.generateId('refactor-nesting'),
|
|
149
|
-
type: 'refactoring',
|
|
150
|
-
title: `Reduce nesting in ${path.relative(context.workingDir, file)}:${i + 1}`,
|
|
151
|
-
description: `Deep nesting detected at line ${i + 1}. Consider extracting logic into separate functions or using early returns.`,
|
|
152
|
-
priority: Priority.LOW,
|
|
153
|
-
complexity: 'low',
|
|
154
|
-
dependencies: [],
|
|
155
|
-
estimatedTime: 15,
|
|
156
|
-
status: 'pending',
|
|
157
|
-
files: [file],
|
|
158
|
-
workflow: 'code',
|
|
159
|
-
workflowInput: {
|
|
160
|
-
prompt: `Reduce nesting complexity in ${path.relative(context.workingDir, file)} at line ${i + 1}. Extract complex conditions into well-named functions or use guard clauses.`,
|
|
161
|
-
files: [file],
|
|
162
|
-
},
|
|
163
|
-
retryCount: 0,
|
|
164
|
-
createdAt: Date.now(),
|
|
165
|
-
});
|
|
166
|
-
break; // One task per file is enough
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
context.logger.info(`[AdvancedDiscovery] Found ${tasks.length} refactoring opportunities`);
|
|
171
|
-
}
|
|
172
|
-
catch (error) {
|
|
173
|
-
context.logger.error('[AdvancedDiscovery] Failed to analyze refactoring opportunities', error);
|
|
174
|
-
}
|
|
175
|
-
return tasks;
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Discover documentation gaps
|
|
179
|
-
*/
|
|
180
|
-
static async discoverDocumentationGaps(context) {
|
|
181
|
-
const tasks = [];
|
|
182
|
-
context.logger.debug('[AdvancedDiscovery] Checking for documentation gaps...');
|
|
183
|
-
try {
|
|
184
|
-
// Find TypeScript/JavaScript files
|
|
185
|
-
const sourceFiles = await AdvancedDiscoveryStrategies.findSourceFiles(context.workingDir);
|
|
186
|
-
for (const file of sourceFiles) {
|
|
187
|
-
const content = await fs.readFile(file, 'utf-8');
|
|
188
|
-
const relativePath = path.relative(context.workingDir, file);
|
|
189
|
-
// Check for missing README in directories
|
|
190
|
-
const dir = path.dirname(file);
|
|
191
|
-
const hasReadme = await AdvancedDiscoveryStrategies.hasReadme(dir);
|
|
192
|
-
if (!hasReadme && dir !== context.workingDir) {
|
|
193
|
-
// Check if this directory has multiple source files (worth documenting)
|
|
194
|
-
const dirFiles = (await AdvancedDiscoveryStrategies.findSourceFiles(dir)).length;
|
|
195
|
-
if (dirFiles > 2) {
|
|
196
|
-
tasks.push({
|
|
197
|
-
id: AdvancedDiscoveryStrategies.generateId('docs-readme'),
|
|
198
|
-
type: 'documentation',
|
|
199
|
-
title: `Add README for ${path.relative(context.workingDir, dir)}`,
|
|
200
|
-
description: `Directory contains ${dirFiles} source files but no README documentation.`,
|
|
201
|
-
priority: Priority.TRIVIAL,
|
|
202
|
-
complexity: 'low',
|
|
203
|
-
dependencies: [],
|
|
204
|
-
estimatedTime: 20,
|
|
205
|
-
status: 'pending',
|
|
206
|
-
files: [],
|
|
207
|
-
workflow: 'code',
|
|
208
|
-
workflowInput: {
|
|
209
|
-
prompt: `Create a README.md file for the ${path.relative(context.workingDir, dir)} directory. Include:
|
|
210
|
-
1. Purpose of this module
|
|
211
|
-
2. Key exports and their usage
|
|
212
|
-
3. Important patterns or conventions`,
|
|
213
|
-
files: [],
|
|
214
|
-
},
|
|
215
|
-
retryCount: 0,
|
|
216
|
-
createdAt: Date.now(),
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
// Check for exported functions without JSDoc
|
|
221
|
-
const exportMatches = content.matchAll(/export\s+(?:(?:async\s+)?function\s+(\w+)|(?:const|class)\s+(\w+))/g);
|
|
222
|
-
for (const match of exportMatches) {
|
|
223
|
-
const exportName = match[1] || match[2];
|
|
224
|
-
const exportStart = match.index || 0;
|
|
225
|
-
// Look backwards for JSDoc comment
|
|
226
|
-
const beforeExport = content.slice(Math.max(0, exportStart - 500), exportStart);
|
|
227
|
-
const hasJsDoc = beforeExport.trim().endsWith('*/') && beforeExport.includes('/**');
|
|
228
|
-
if (!hasJsDoc) {
|
|
229
|
-
tasks.push({
|
|
230
|
-
id: AdvancedDiscoveryStrategies.generateId('docs-jsdoc'),
|
|
231
|
-
type: 'documentation',
|
|
232
|
-
title: `Add JSDoc for ${exportName} in ${relativePath}`,
|
|
233
|
-
description: `Exported function/class "${exportName}" lacks JSDoc documentation.`,
|
|
234
|
-
priority: Priority.TRIVIAL,
|
|
235
|
-
complexity: 'low',
|
|
236
|
-
dependencies: [],
|
|
237
|
-
estimatedTime: 5,
|
|
238
|
-
status: 'pending',
|
|
239
|
-
files: [file],
|
|
240
|
-
workflow: 'code',
|
|
241
|
-
workflowInput: {
|
|
242
|
-
prompt: `Add comprehensive JSDoc documentation for "${exportName}" in ${relativePath}. Include:
|
|
243
|
-
1. Description of what it does
|
|
244
|
-
2. @param tags for parameters with types and descriptions
|
|
245
|
-
3. @returns tag with type and description
|
|
246
|
-
4. @example tag if appropriate`,
|
|
247
|
-
files: [file],
|
|
248
|
-
},
|
|
249
|
-
retryCount: 0,
|
|
250
|
-
createdAt: Date.now(),
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
context.logger.info(`[AdvancedDiscovery] Found ${tasks.length} documentation gaps`);
|
|
256
|
-
}
|
|
257
|
-
catch (error) {
|
|
258
|
-
context.logger.error('[AdvancedDiscovery] Failed to check documentation', error);
|
|
259
|
-
}
|
|
260
|
-
return tasks;
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Discover security issues
|
|
264
|
-
*/
|
|
265
|
-
static async discoverSecurityIssues(context) {
|
|
266
|
-
const tasks = [];
|
|
267
|
-
context.logger.debug('[AdvancedDiscovery] Analyzing for security issues...');
|
|
268
|
-
try {
|
|
269
|
-
// Find all source files
|
|
270
|
-
const files = await AdvancedDiscoveryStrategies.findSourceFiles(context.workingDir, [
|
|
271
|
-
'ts',
|
|
272
|
-
'js',
|
|
273
|
-
'tsx',
|
|
274
|
-
'jsx',
|
|
275
|
-
'json',
|
|
276
|
-
'.env.example',
|
|
277
|
-
]);
|
|
278
|
-
for (const file of files) {
|
|
279
|
-
const content = await fs.readFile(file, 'utf-8');
|
|
280
|
-
const relativePath = path.relative(context.workingDir, file);
|
|
281
|
-
// Check for suspicious patterns
|
|
282
|
-
const patterns = [
|
|
283
|
-
{
|
|
284
|
-
regex: /password\s*[:=]\s*['"]\w+['"]/i,
|
|
285
|
-
type: 'Hardcoded password',
|
|
286
|
-
severity: Priority.CRITICAL,
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
regex: /api[_-]?key\s*[:=]\s*['"]\w+['"]/i,
|
|
290
|
-
type: 'Hardcoded API key',
|
|
291
|
-
severity: Priority.CRITICAL,
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
regex: /secret\s*[:=]\s*['"]\w+['"]/i,
|
|
295
|
-
type: 'Hardcoded secret',
|
|
296
|
-
severity: Priority.CRITICAL,
|
|
297
|
-
},
|
|
298
|
-
{
|
|
299
|
-
regex: /token\s*[:=]\s*['"]\w{20,}['"]/i,
|
|
300
|
-
type: 'Hardcoded token',
|
|
301
|
-
severity: Priority.CRITICAL,
|
|
302
|
-
},
|
|
303
|
-
{
|
|
304
|
-
regex: /eval\s*\(/,
|
|
305
|
-
type: 'Unsafe eval() usage',
|
|
306
|
-
severity: Priority.HIGH,
|
|
307
|
-
},
|
|
308
|
-
{
|
|
309
|
-
regex: /innerHTML\s*=/,
|
|
310
|
-
type: 'Potential XSS vulnerability (innerHTML)',
|
|
311
|
-
severity: Priority.HIGH,
|
|
312
|
-
},
|
|
313
|
-
{
|
|
314
|
-
regex: /dangerouslySetInnerHTML/,
|
|
315
|
-
type: 'Potential XSS vulnerability (dangerouslySetInnerHTML)',
|
|
316
|
-
severity: Priority.HIGH,
|
|
317
|
-
},
|
|
318
|
-
];
|
|
319
|
-
for (const pattern of patterns) {
|
|
320
|
-
const matches = content.matchAll(pattern.regex);
|
|
321
|
-
for (const match of matches) {
|
|
322
|
-
const lineNumber = content.slice(0, match.index || 0).split('\n').length;
|
|
323
|
-
tasks.push({
|
|
324
|
-
id: AdvancedDiscoveryStrategies.generateId('security'),
|
|
325
|
-
type: 'security',
|
|
326
|
-
title: `Fix security issue: ${pattern.type} in ${relativePath}:${lineNumber}`,
|
|
327
|
-
description: `${pattern.type} detected at line ${lineNumber}. This could be a security vulnerability.`,
|
|
328
|
-
priority: pattern.severity,
|
|
329
|
-
complexity: 'medium',
|
|
330
|
-
dependencies: [],
|
|
331
|
-
estimatedTime: 30,
|
|
332
|
-
status: 'pending',
|
|
333
|
-
files: [file],
|
|
334
|
-
workflow: 'code',
|
|
335
|
-
workflowInput: {
|
|
336
|
-
prompt: `Fix the security issue "${pattern.type}" in ${relativePath} at line ${lineNumber}. Use secure alternatives and ensure secrets are stored in environment variables.`,
|
|
337
|
-
files: [file],
|
|
338
|
-
},
|
|
339
|
-
retryCount: 0,
|
|
340
|
-
createdAt: Date.now(),
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
// Check for .env files in git
|
|
346
|
-
try {
|
|
347
|
-
const envResult = await context.tools.executeCommand({
|
|
348
|
-
command: 'git',
|
|
349
|
-
args: ['ls-files', '*.env'],
|
|
350
|
-
});
|
|
351
|
-
if (envResult.stdout.trim()) {
|
|
352
|
-
const envFiles = envResult.stdout.trim().split('\n');
|
|
353
|
-
for (const envFile of envFiles) {
|
|
354
|
-
tasks.push({
|
|
355
|
-
id: AdvancedDiscoveryStrategies.generateId('security-env'),
|
|
356
|
-
type: 'security',
|
|
357
|
-
title: `Remove .env file from git: ${envFile}`,
|
|
358
|
-
description: `.env file is tracked in git. This may expose sensitive credentials. Add to .gitignore and use .env.example instead.`,
|
|
359
|
-
priority: Priority.CRITICAL,
|
|
360
|
-
complexity: 'low',
|
|
361
|
-
dependencies: [],
|
|
362
|
-
estimatedTime: 5,
|
|
363
|
-
status: 'pending',
|
|
364
|
-
files: [envFile],
|
|
365
|
-
workflow: 'code',
|
|
366
|
-
workflowInput: {
|
|
367
|
-
prompt: `Remove ${envFile} from git tracking:
|
|
368
|
-
1. Add ${envFile} to .gitignore
|
|
369
|
-
2. Create ${envFile}.example with placeholder values
|
|
370
|
-
3. Run 'git rm --cached ${envFile}'`,
|
|
371
|
-
files: ['.gitignore'],
|
|
372
|
-
},
|
|
373
|
-
retryCount: 0,
|
|
374
|
-
createdAt: Date.now(),
|
|
375
|
-
});
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
catch {
|
|
380
|
-
// git command failed, skip this check
|
|
381
|
-
}
|
|
382
|
-
context.logger.info(`[AdvancedDiscovery] Found ${tasks.length} security issues`);
|
|
383
|
-
}
|
|
384
|
-
catch (error) {
|
|
385
|
-
context.logger.error('[AdvancedDiscovery] Failed to analyze security', error);
|
|
386
|
-
}
|
|
387
|
-
return tasks;
|
|
388
|
-
}
|
|
389
|
-
/**
|
|
390
|
-
* Discover test coverage gaps
|
|
391
|
-
*/
|
|
392
|
-
static async discoverTestCoverageGaps(context) {
|
|
393
|
-
const tasks = [];
|
|
394
|
-
context.logger.debug('[AdvancedDiscovery] Analyzing test coverage...');
|
|
395
|
-
try {
|
|
396
|
-
// Find source files
|
|
397
|
-
const sourceFiles = await AdvancedDiscoveryStrategies.findSourceFiles(context.workingDir);
|
|
398
|
-
for (const file of sourceFiles) {
|
|
399
|
-
const relativePath = path.relative(context.workingDir, file);
|
|
400
|
-
// Skip test files themselves
|
|
401
|
-
if (relativePath.includes('.test.') || relativePath.includes('.spec.') || relativePath.includes('/__tests__/')) {
|
|
402
|
-
continue;
|
|
403
|
-
}
|
|
404
|
-
// Look for corresponding test file
|
|
405
|
-
const testFilePatterns = [
|
|
406
|
-
file.replace('.ts', '.test.ts'),
|
|
407
|
-
file.replace('.ts', '.spec.ts'),
|
|
408
|
-
file.replace('.ts', '.test.tsx'),
|
|
409
|
-
file.replace('/src/', '/__tests__/'),
|
|
410
|
-
];
|
|
411
|
-
let hasTest = false;
|
|
412
|
-
for (const testPattern of testFilePatterns) {
|
|
413
|
-
try {
|
|
414
|
-
await fs.access(testPattern);
|
|
415
|
-
hasTest = true;
|
|
416
|
-
break;
|
|
417
|
-
}
|
|
418
|
-
catch {
|
|
419
|
-
// Test file doesn't exist
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
if (!hasTest) {
|
|
423
|
-
// Check if this is a significant file (more than 50 lines)
|
|
424
|
-
const content = await fs.readFile(file, 'utf-8');
|
|
425
|
-
const lineCount = content.split('\n').length;
|
|
426
|
-
if (lineCount > 50) {
|
|
427
|
-
tasks.push({
|
|
428
|
-
id: AdvancedDiscoveryStrategies.generateId('test-coverage'),
|
|
429
|
-
type: 'testing',
|
|
430
|
-
title: `Add tests for ${relativePath}`,
|
|
431
|
-
description: `Source file (${lineCount} lines) lacks test coverage.`,
|
|
432
|
-
priority: Priority.MEDIUM,
|
|
433
|
-
complexity: 'medium',
|
|
434
|
-
dependencies: [],
|
|
435
|
-
estimatedTime: 45,
|
|
436
|
-
status: 'pending',
|
|
437
|
-
files: [file],
|
|
438
|
-
workflow: 'code',
|
|
439
|
-
workflowInput: {
|
|
440
|
-
prompt: `Create comprehensive tests for ${relativePath}. Include:
|
|
441
|
-
1. Unit tests for exported functions
|
|
442
|
-
2. Edge case testing
|
|
443
|
-
3. Error handling tests
|
|
444
|
-
4. Integration tests if appropriate`,
|
|
445
|
-
files: [file],
|
|
446
|
-
},
|
|
447
|
-
retryCount: 0,
|
|
448
|
-
createdAt: Date.now(),
|
|
449
|
-
});
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
context.logger.info(`[AdvancedDiscovery] Found ${tasks.length} files without test coverage`);
|
|
454
|
-
}
|
|
455
|
-
catch (error) {
|
|
456
|
-
context.logger.error('[AdvancedDiscovery] Failed to analyze test coverage', error);
|
|
457
|
-
}
|
|
458
|
-
return tasks;
|
|
459
|
-
}
|
|
460
|
-
/**
|
|
461
|
-
* Discover performance issues
|
|
462
|
-
*/
|
|
463
|
-
static async discoverPerformanceIssues(context) {
|
|
464
|
-
const tasks = [];
|
|
465
|
-
context.logger.debug('[AdvancedDiscovery] Analyzing for performance issues...');
|
|
466
|
-
try {
|
|
467
|
-
// This is a basic implementation - can be enhanced with static analysis tools
|
|
468
|
-
const sourceFiles = await AdvancedDiscoveryStrategies.findSourceFiles(context.workingDir);
|
|
469
|
-
for (const file of sourceFiles) {
|
|
470
|
-
const content = await fs.readFile(file, 'utf-8');
|
|
471
|
-
const relativePath = path.relative(context.workingDir, file);
|
|
472
|
-
// Check for loops with heavy operations
|
|
473
|
-
const loopMatches = content.matchAll(/(?:for|while)\s*\([^)]*\)\s*{/g);
|
|
474
|
-
for (const match of loopMatches) {
|
|
475
|
-
const loopStart = match.index || 0;
|
|
476
|
-
const loopEnd = AdvancedDiscoveryStrategies.findFunctionEnd(content, loopStart);
|
|
477
|
-
const loopBody = content.slice(loopStart, loopEnd);
|
|
478
|
-
// Check for database queries or HTTP requests in loops
|
|
479
|
-
if ((loopBody.match(/\.(fetch|query|find|execute)\(/g) || []).length > 1) {
|
|
480
|
-
const lineNumber = content.slice(0, loopStart).split('\n').length;
|
|
481
|
-
tasks.push({
|
|
482
|
-
id: AdvancedDiscoveryStrategies.generateId('perf-loop'),
|
|
483
|
-
type: 'optimization',
|
|
484
|
-
title: `Optimize loop in ${relativePath}:${lineNumber}`,
|
|
485
|
-
description: 'Loop contains multiple database queries or HTTP requests. This could cause N+1 performance issues.',
|
|
486
|
-
priority: Priority.MEDIUM,
|
|
487
|
-
complexity: 'medium',
|
|
488
|
-
dependencies: [],
|
|
489
|
-
estimatedTime: 30,
|
|
490
|
-
status: 'pending',
|
|
491
|
-
files: [file],
|
|
492
|
-
workflow: 'code',
|
|
493
|
-
workflowInput: {
|
|
494
|
-
prompt: `Optimize the loop in ${relativePath} at line ${lineNumber}. Use batch operations, eager loading, or parallel execution to avoid N+1 performance issues.`,
|
|
495
|
-
files: [file],
|
|
496
|
-
},
|
|
497
|
-
retryCount: 0,
|
|
498
|
-
createdAt: Date.now(),
|
|
499
|
-
});
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
context.logger.info(`[AdvancedDiscovery] Found ${tasks.length} performance issues`);
|
|
504
|
-
}
|
|
505
|
-
catch (error) {
|
|
506
|
-
context.logger.error('[AdvancedDiscovery] Failed to analyze performance', error);
|
|
507
|
-
}
|
|
508
|
-
return tasks;
|
|
509
|
-
}
|
|
510
|
-
/**
|
|
511
|
-
* Helper: Find all TypeScript/JavaScript source files
|
|
512
|
-
*/
|
|
513
|
-
static async findSourceFiles(dir, extensions = ['ts', 'tsx', 'js', 'jsx']) {
|
|
514
|
-
const files = [];
|
|
515
|
-
async function traverse(currentPath) {
|
|
516
|
-
try {
|
|
517
|
-
const entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
518
|
-
for (const entry of entries) {
|
|
519
|
-
const fullPath = path.join(currentPath, entry.name);
|
|
520
|
-
// Skip node_modules and common ignored directories
|
|
521
|
-
if (entry.name === 'node_modules' ||
|
|
522
|
-
entry.name === '.git' ||
|
|
523
|
-
entry.name === 'dist' ||
|
|
524
|
-
entry.name === 'build' ||
|
|
525
|
-
entry.name === '.next' ||
|
|
526
|
-
entry.name === 'coverage') {
|
|
527
|
-
continue;
|
|
528
|
-
}
|
|
529
|
-
if (entry.isDirectory()) {
|
|
530
|
-
await traverse(fullPath);
|
|
531
|
-
}
|
|
532
|
-
else if (entry.isFile()) {
|
|
533
|
-
const ext = entry.name.split('.').pop();
|
|
534
|
-
if (ext && extensions.includes(ext)) {
|
|
535
|
-
files.push(fullPath);
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
catch {
|
|
541
|
-
// Skip directories we can't read
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
await traverse(dir);
|
|
545
|
-
return files;
|
|
546
|
-
}
|
|
547
|
-
/**
|
|
548
|
-
* Helper: Check if directory has README
|
|
549
|
-
*/
|
|
550
|
-
static async hasReadme(dir) {
|
|
551
|
-
const readmeFiles = ['README.md', 'readme.md', 'README.MD'];
|
|
552
|
-
for (const readme of readmeFiles) {
|
|
553
|
-
try {
|
|
554
|
-
await fs.access(path.join(dir, readme));
|
|
555
|
-
return true;
|
|
556
|
-
}
|
|
557
|
-
catch {
|
|
558
|
-
// File doesn't exist
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
return false;
|
|
562
|
-
}
|
|
563
|
-
/**
|
|
564
|
-
* Helper: Find the end of a function (matching braces)
|
|
565
|
-
*/
|
|
566
|
-
static findFunctionEnd(content, start) {
|
|
567
|
-
let braceCount = 0;
|
|
568
|
-
let inString = false;
|
|
569
|
-
let stringChar = '';
|
|
570
|
-
for (let i = start; i < content.length; i++) {
|
|
571
|
-
const char = content[i];
|
|
572
|
-
// Track string literals
|
|
573
|
-
if ((char === '"' || char === "'" || char === '`') && content[i - 1] !== '\\') {
|
|
574
|
-
if (!inString) {
|
|
575
|
-
inString = true;
|
|
576
|
-
stringChar = char;
|
|
577
|
-
}
|
|
578
|
-
else if (char === stringChar) {
|
|
579
|
-
inString = false;
|
|
580
|
-
}
|
|
581
|
-
}
|
|
582
|
-
// Count braces outside of strings
|
|
583
|
-
if (!inString) {
|
|
584
|
-
if (char === '{') {
|
|
585
|
-
braceCount++;
|
|
586
|
-
}
|
|
587
|
-
else if (char === '}') {
|
|
588
|
-
braceCount--;
|
|
589
|
-
if (braceCount === 0) {
|
|
590
|
-
return i + 1;
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
return content.length;
|
|
596
|
-
}
|
|
597
|
-
/**
|
|
598
|
-
* Generate unique task ID using ULID
|
|
599
|
-
*/
|
|
600
|
-
static generateId(prefix) {
|
|
601
|
-
return `${prefix}-${ulid()}`;
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
//# sourceMappingURL=advanced-discovery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"advanced-discovery.js","sourceRoot":"","sources":["../../src/agent/advanced-discovery.ts"],"names":[],"mappings":"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"}
|