maskweaver 0.9.4 β 0.9.6
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.ko.md +638 -592
- package/README.md +671 -667
- package/dist/cli/doctor.js +5 -21
- package/dist/cli/install.d.ts +0 -8
- package/dist/cli/install.js +0 -39
- package/dist/context/config.d.ts +0 -22
- package/dist/context/config.js +0 -28
- package/dist/context/feature.d.ts +0 -39
- package/dist/context/feature.js +0 -77
- package/dist/context/files.d.ts +0 -13
- package/dist/context/files.js +1 -24
- package/dist/context/index.d.ts +0 -7
- package/dist/context/index.js +0 -12
- package/dist/context/project.d.ts +0 -21
- package/dist/context/project.js +0 -30
- package/dist/context/types.d.ts +0 -48
- package/dist/context/types.js +0 -12
- package/dist/context/utils.d.ts +0 -18
- package/dist/context/utils.js +0 -27
- package/dist/core/engine/promptBuilder.d.ts +0 -17
- package/dist/core/engine/promptBuilder.js +0 -28
- package/dist/core/index.d.ts +0 -6
- package/dist/core/index.js +0 -9
- package/dist/core/loader/MaskLoader.d.ts +0 -23
- package/dist/core/loader/MaskLoader.js +0 -29
- package/dist/core/schema/types.d.ts +0 -47
- package/dist/core/schema/types.js +0 -6
- package/dist/core/schema/validator.d.ts +0 -14
- package/dist/core/schema/validator.js +0 -18
- package/dist/i18n/index.d.ts +0 -18
- package/dist/i18n/index.js +4 -23
- package/dist/index.d.ts +0 -8
- package/dist/index.js +0 -8
- package/dist/lib.d.ts +0 -5
- package/dist/lib.js +0 -12
- package/dist/memory/chunking.d.ts +0 -22
- package/dist/memory/chunking.js +2 -37
- package/dist/memory/core.d.ts +0 -29
- package/dist/memory/core.js +1 -52
- package/dist/memory/index.d.ts +0 -5
- package/dist/memory/index.js +0 -10
- package/dist/memory/indexer.d.ts +0 -21
- package/dist/memory/indexer.js +0 -44
- package/dist/memory/providers/examples.d.ts +0 -5
- package/dist/memory/providers/examples.js +4 -64
- package/dist/memory/providers/factory.d.ts +0 -44
- package/dist/memory/providers/factory.js +0 -46
- package/dist/memory/providers/index.d.ts +0 -26
- package/dist/memory/providers/index.js +0 -28
- package/dist/memory/providers/ollama.d.ts +0 -6
- package/dist/memory/providers/ollama.js +1 -8
- package/dist/memory/providers/openai.d.ts +0 -6
- package/dist/memory/providers/openai.js +1 -8
- package/dist/memory/providers/openrouter.d.ts +0 -6
- package/dist/memory/providers/openrouter.js +0 -8
- package/dist/memory/providers/text-only.d.ts +0 -13
- package/dist/memory/providers/text-only.js +0 -17
- package/dist/memory/providers/types.d.ts +0 -39
- package/dist/memory/providers/types.js +0 -7
- package/dist/memory/providers/voyage.d.ts +0 -22
- package/dist/memory/providers/voyage.js +1 -24
- package/dist/memory/search/hybrid.d.ts +0 -12
- package/dist/memory/search/hybrid.js +1 -22
- package/dist/memory/store/sqlite.d.ts +0 -72
- package/dist/memory/store/sqlite.js +4 -127
- package/dist/plugin/config/index.d.ts +0 -112
- package/dist/plugin/config/index.js +0 -115
- package/dist/plugin/index.d.ts +0 -13
- package/dist/plugin/index.js +1 -123
- package/dist/plugin/tools/command-registry.d.ts +0 -6
- package/dist/plugin/tools/command-registry.js +0 -14
- package/dist/plugin/tools/context.d.ts +0 -12
- package/dist/plugin/tools/context.js +0 -58
- package/dist/plugin/tools/maskSave.d.ts +0 -3
- package/dist/plugin/tools/maskSave.js +0 -3
- package/dist/plugin/tools/memoryGet.d.ts +0 -3
- package/dist/plugin/tools/memoryGet.js +0 -3
- package/dist/plugin/tools/memoryIndexer.d.ts +0 -3
- package/dist/plugin/tools/memoryIndexer.js +0 -10
- package/dist/plugin/tools/memorySearch.d.ts +0 -31
- package/dist/plugin/tools/memorySearch.js +0 -79
- package/dist/plugin/tools/memoryWrite.d.ts +0 -8
- package/dist/plugin/tools/memoryWrite.js +0 -32
- package/dist/plugin/tools/retrospect.d.ts +0 -3
- package/dist/plugin/tools/retrospect.js +0 -3
- package/dist/plugin/tools/slashcommand.d.ts +0 -11
- package/dist/plugin/tools/slashcommand.js +0 -38
- package/dist/plugin/tools/squad.d.ts +0 -12
- package/dist/plugin/tools/squad.js +11 -83
- package/dist/plugin/tools/weave.d.ts +0 -6
- package/dist/plugin/tools/weave.js +0 -78
- package/dist/plugin/types.d.ts +0 -20
- package/dist/plugin/types.js +0 -7
- package/dist/retrospect/index.d.ts +0 -7
- package/dist/retrospect/index.js +0 -9
- package/dist/retrospect/mask-save.d.ts +0 -12
- package/dist/retrospect/mask-save.js +1 -80
- package/dist/retrospect/retrospect.d.ts +0 -18
- package/dist/retrospect/retrospect.js +0 -63
- package/dist/retrospect/strategies/base.d.ts +0 -15
- package/dist/retrospect/strategies/base.js +0 -7
- package/dist/retrospect/strategies/deep.d.ts +0 -12
- package/dist/retrospect/strategies/deep.js +0 -24
- package/dist/retrospect/strategies/index.d.ts +0 -12
- package/dist/retrospect/strategies/index.js +0 -12
- package/dist/retrospect/strategies/quick.d.ts +0 -12
- package/dist/retrospect/strategies/quick.js +0 -19
- package/dist/retrospect/strategies/standard.d.ts +0 -12
- package/dist/retrospect/strategies/standard.js +0 -15
- package/dist/retrospect/types.d.ts +0 -7
- package/dist/retrospect/types.js +0 -7
- package/dist/shared/config.d.ts +0 -105
- package/dist/shared/config.js +0 -33
- package/dist/shared/errors.d.ts +0 -18
- package/dist/shared/errors.js +0 -19
- package/dist/shared/generate-agents.d.ts +0 -69
- package/dist/shared/generate-agents.js +2 -86
- package/dist/shared/image.d.ts +0 -67
- package/dist/shared/image.js +6 -104
- package/dist/shared/index.d.ts +0 -5
- package/dist/shared/index.js +0 -7
- package/dist/shared/model-registry.d.ts +0 -72
- package/dist/shared/model-registry.js +5 -95
- package/dist/shared/types.d.ts +0 -15
- package/dist/shared/types.js +0 -3
- package/dist/shared-context/dag.d.ts +0 -105
- package/dist/shared-context/dag.js +3 -114
- package/dist/shared-context/index.d.ts +0 -5
- package/dist/shared-context/index.js +0 -15
- package/dist/shared-context/logger.d.ts +0 -37
- package/dist/shared-context/logger.js +0 -41
- package/dist/shared-context/parallel-executor.d.ts +0 -54
- package/dist/shared-context/parallel-executor.js +4 -56
- package/dist/shared-context/session.d.ts +0 -56
- package/dist/shared-context/session.js +0 -47
- package/dist/shared-context/squad.d.ts +0 -68
- package/dist/shared-context/squad.js +0 -63
- package/dist/shared-context/storage.d.ts +0 -132
- package/dist/shared-context/storage.js +0 -116
- package/dist/shared-context/task.d.ts +0 -120
- package/dist/shared-context/task.js +0 -152
- package/dist/shared-context/test/dag.test.js +9 -14
- package/dist/shared-context/test/logger.test.d.ts +0 -8
- package/dist/shared-context/test/logger.test.js +0 -52
- package/dist/shared-context/test/session.test.d.ts +0 -7
- package/dist/shared-context/test/session.test.js +0 -63
- package/dist/shared-context/test/squad.test.d.ts +0 -10
- package/dist/shared-context/test/squad.test.js +2 -68
- package/dist/shared-context/test/storage.test.d.ts +0 -8
- package/dist/shared-context/test/storage.test.js +0 -68
- package/dist/shared-context/test/task.test.d.ts +0 -7
- package/dist/shared-context/test/task.test.js +0 -54
- package/dist/shared-context/test/watchdog.test.d.ts +0 -7
- package/dist/shared-context/test/watchdog.test.js +3 -58
- package/dist/shared-context/types.d.ts +0 -215
- package/dist/shared-context/types.js +0 -125
- package/dist/shared-context/watchdog.d.ts +0 -127
- package/dist/shared-context/watchdog.js +0 -148
- package/dist/shared-context/worktree.d.ts +0 -68
- package/dist/shared-context/worktree.js +2 -34
- package/dist/verify/budget.d.ts +0 -29
- package/dist/verify/budget.js +0 -34
- package/dist/verify/critical-files.d.ts +0 -17
- package/dist/verify/critical-files.js +0 -37
- package/dist/verify/escalation.d.ts +0 -20
- package/dist/verify/escalation.js +0 -22
- package/dist/verify/index.d.ts +0 -5
- package/dist/verify/index.js +0 -11
- package/dist/verify/prompts.d.ts +0 -20
- package/dist/verify/prompts.js +0 -20
- package/dist/verify/types.d.ts +0 -26
- package/dist/verify/types.js +1 -12
- package/dist/verify/verifier.d.ts +0 -29
- package/dist/verify/verifier.js +0 -54
- package/dist/version.d.ts +1 -16
- package/dist/version.js +1 -16
- package/dist/weave/bridge.d.ts +0 -35
- package/dist/weave/bridge.js +0 -51
- package/dist/weave/environment/detector.d.ts +0 -6
- package/dist/weave/environment/detector.js +4 -45
- package/dist/weave/environment/index.d.ts +0 -19
- package/dist/weave/environment/index.js +1 -39
- package/dist/weave/environment/issues.d.ts +0 -35
- package/dist/weave/environment/issues.js +0 -59
- package/dist/weave/git.d.ts +0 -8
- package/dist/weave/git.js +0 -8
- package/dist/weave/index.d.ts +0 -13
- package/dist/weave/index.js +2 -28
- package/dist/weave/knowledge/global.d.ts +0 -39
- package/dist/weave/knowledge/global.js +2 -78
- package/dist/weave/loop.js +0 -3
- package/dist/weave/orchestrator.d.ts +0 -69
- package/dist/weave/orchestrator.js +1 -101
- package/dist/weave/phase-manager.d.ts +0 -64
- package/dist/weave/phase-manager.js +0 -89
- package/dist/weave/security/secret-scan.d.ts +0 -14
- package/dist/weave/security/secret-scan.js +0 -19
- package/dist/weave/stages/build.js +0 -15
- package/dist/weave/stages/execute.d.ts +0 -42
- package/dist/weave/stages/execute.js +4 -86
- package/dist/weave/stages/handoff.d.ts +0 -7
- package/dist/weave/stages/handoff.js +0 -43
- package/dist/weave/stages/index.d.ts +0 -3
- package/dist/weave/stages/index.js +0 -3
- package/dist/weave/stages/intake.d.ts +0 -8
- package/dist/weave/stages/intake.js +5 -65
- package/dist/weave/stages/map.d.ts +0 -1
- package/dist/weave/stages/openspec.d.ts +0 -1
- package/dist/weave/stages/plan.d.ts +0 -11
- package/dist/weave/stages/plan.js +1 -53
- package/dist/weave/stages/refine.d.ts +0 -7
- package/dist/weave/stages/refine.js +0 -7
- package/dist/weave/stages/research.d.ts +0 -6
- package/dist/weave/stages/research.js +0 -6
- package/dist/weave/stages/spec.d.ts +0 -12
- package/dist/weave/stages/spec.js +0 -17
- package/dist/weave/types.d.ts +0 -20
- package/dist/weave/types.js +0 -5
- package/dist/weave/verification/commands.d.ts +0 -12
- package/dist/weave/verification/commands.js +0 -19
- package/dist/weave/verification/index.d.ts +0 -6
- package/dist/weave/verification/index.js +1 -19
- package/dist/weave/verification/playwright.d.ts +0 -47
- package/dist/weave/verification/playwright.js +1 -90
- package/dist/weave/worktree.d.ts +0 -16
- package/dist/weave/worktree.js +0 -23
- package/dist/weave/yaml-repair.d.ts +0 -39
- package/dist/weave/yaml-repair.js +13 -116
- package/package.json +1 -1
package/dist/weave/bridge.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Weave-Squad Bridge
|
|
3
|
-
*
|
|
4
|
-
* Converts between Weave types (WeaveTask, WeavePhase) and Squad types (TaskState)
|
|
5
|
-
* to enable parallel execution of Weave phase tasks through the Squad system.
|
|
6
|
-
*
|
|
7
|
-
* This is the missing link between the two systems:
|
|
8
|
-
* - Weave: Project-level milestone tracking (YAML plans)
|
|
9
|
-
* - Squad: Multi-agent parallel execution (JSON sessions)
|
|
10
|
-
*/
|
|
11
1
|
import { buildDAG } from '../shared-context/dag.js';
|
|
12
|
-
// ============================================================================
|
|
13
|
-
// WeaveTask -> TaskState Conversion
|
|
14
|
-
// ============================================================================
|
|
15
|
-
/**
|
|
16
|
-
* Convert a WeaveTask to a TaskState for use in the Squad system.
|
|
17
|
-
* Maps Weave concepts to Squad concepts:
|
|
18
|
-
* - WeaveTask.id -> TaskState.taskId
|
|
19
|
-
* - WeaveTask.status -> TaskState.status (with mapping)
|
|
20
|
-
* - Complexity -> TaskState.priority
|
|
21
|
-
*/
|
|
22
2
|
export function weaveTaskToSquadTask(task, options) {
|
|
23
3
|
return {
|
|
24
4
|
taskId: task.id,
|
|
@@ -30,9 +10,6 @@ export function weaveTaskToSquadTask(task, options) {
|
|
|
30
10
|
createdAt: new Date().toISOString(),
|
|
31
11
|
};
|
|
32
12
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Map Weave task status to Squad task status.
|
|
35
|
-
*/
|
|
36
13
|
function mapWeaveStatusToSquad(weaveStatus) {
|
|
37
14
|
switch (weaveStatus) {
|
|
38
15
|
case 'pending': return 'pending';
|
|
@@ -41,9 +18,6 @@ function mapWeaveStatusToSquad(weaveStatus) {
|
|
|
41
18
|
case 'failed': return 'failed';
|
|
42
19
|
}
|
|
43
20
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Map TaskComplexity to Squad Priority.
|
|
46
|
-
*/
|
|
47
21
|
export function complexityToPriority(complexity) {
|
|
48
22
|
switch (complexity) {
|
|
49
23
|
case 'simple': return 'low';
|
|
@@ -51,13 +25,6 @@ export function complexityToPriority(complexity) {
|
|
|
51
25
|
case 'complex': return 'high';
|
|
52
26
|
}
|
|
53
27
|
}
|
|
54
|
-
// ============================================================================
|
|
55
|
-
// Phase -> Squad Task List Conversion
|
|
56
|
-
// ============================================================================
|
|
57
|
-
/**
|
|
58
|
-
* Convert a PhaseExecutionPlan into a list of TaskStates for the Squad system.
|
|
59
|
-
* Each TaskExecutionPlan determines the assignee (agent tier) and priority.
|
|
60
|
-
*/
|
|
61
28
|
export function executionPlanToSquadTasks(plan) {
|
|
62
29
|
return plan.taskPlans.map(tp => weaveTaskToSquadTask(tp.task, {
|
|
63
30
|
assignee: tp.agentTier,
|
|
@@ -65,24 +32,11 @@ export function executionPlanToSquadTasks(plan) {
|
|
|
65
32
|
dependencies: tp.task.dependsOn || [],
|
|
66
33
|
}));
|
|
67
34
|
}
|
|
68
|
-
// ============================================================================
|
|
69
|
-
// Parallel Execution Analysis
|
|
70
|
-
// ============================================================================
|
|
71
|
-
/**
|
|
72
|
-
* Analyze a PhaseExecutionPlan for parallel execution opportunities.
|
|
73
|
-
*
|
|
74
|
-
* Uses task-level dependencies when available (`task.dependsOn`).
|
|
75
|
-
* If there are no explicit dependencies, tasks are treated as fully parallel.
|
|
76
|
-
*
|
|
77
|
-
* Returns DAG analysis with wave grouping for parallel execution.
|
|
78
|
-
*/
|
|
79
35
|
export function analyzeParallelOpportunities(plan) {
|
|
80
36
|
const squadTasks = executionPlanToSquadTasks(plan);
|
|
81
|
-
// If no dependencies, all tasks are in wave 0 (fully parallel)
|
|
82
37
|
const allIndependent = squadTasks.every(t => !t.dependencies || t.dependencies.length === 0);
|
|
83
38
|
let dagAnalysis;
|
|
84
39
|
if (allIndependent && squadTasks.length > 1) {
|
|
85
|
-
// All tasks are independent β one big parallel wave
|
|
86
40
|
dagAnalysis = {
|
|
87
41
|
nodes: new Map(),
|
|
88
42
|
waves: [{ waveIndex: 0, taskIds: squadTasks.map(t => t.taskId) }],
|
|
@@ -92,10 +46,8 @@ export function analyzeParallelOpportunities(plan) {
|
|
|
92
46
|
};
|
|
93
47
|
}
|
|
94
48
|
else {
|
|
95
|
-
// Use DAG analysis for dependency-aware wave grouping
|
|
96
49
|
dagAnalysis = buildDAG(squadTasks);
|
|
97
50
|
}
|
|
98
|
-
// Map waves back to execution plans
|
|
99
51
|
const waveDetails = dagAnalysis.waves.map(wave => ({
|
|
100
52
|
waveIndex: wave.waveIndex,
|
|
101
53
|
tasks: wave.taskIds.map(taskId => {
|
|
@@ -112,9 +64,6 @@ export function analyzeParallelOpportunities(plan) {
|
|
|
112
64
|
criticalPath: dagAnalysis.criticalPath,
|
|
113
65
|
};
|
|
114
66
|
}
|
|
115
|
-
/**
|
|
116
|
-
* Format parallel analysis as markdown for the Mask Weaver.
|
|
117
|
-
*/
|
|
118
67
|
export function formatParallelAnalysis(analysis) {
|
|
119
68
|
const lines = [];
|
|
120
69
|
lines.push('### Parallel Execution Analysis');
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Environment Detector
|
|
3
|
-
*
|
|
4
|
-
* Proactive environment analysis for Weave workflow.
|
|
5
|
-
* Detects OS, shell, runtime versions, and project tech stack.
|
|
6
|
-
*/
|
|
7
1
|
import type { EnvironmentContext } from '../types.js';
|
|
8
2
|
export declare function detectOS(): EnvironmentContext['os'];
|
|
9
3
|
export declare function detectShell(): EnvironmentContext['shell'];
|
|
@@ -1,16 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Environment Detector
|
|
3
|
-
*
|
|
4
|
-
* Proactive environment analysis for Weave workflow.
|
|
5
|
-
* Detects OS, shell, runtime versions, and project tech stack.
|
|
6
|
-
*/
|
|
7
1
|
import * as os from 'node:os';
|
|
8
2
|
import * as fs from 'node:fs';
|
|
9
3
|
import * as path from 'node:path';
|
|
10
4
|
import { execSync } from 'node:child_process';
|
|
11
|
-
// ============================================================================
|
|
12
|
-
// OS Detection
|
|
13
|
-
// ============================================================================
|
|
14
5
|
export function detectOS() {
|
|
15
6
|
const platform = os.platform();
|
|
16
7
|
switch (platform) {
|
|
@@ -21,34 +12,26 @@ export function detectOS() {
|
|
|
21
12
|
case 'linux':
|
|
22
13
|
return 'linux';
|
|
23
14
|
default:
|
|
24
|
-
return 'linux';
|
|
15
|
+
return 'linux';
|
|
25
16
|
}
|
|
26
17
|
}
|
|
27
|
-
// ============================================================================
|
|
28
|
-
// Shell Detection
|
|
29
|
-
// ============================================================================
|
|
30
18
|
export function detectShell() {
|
|
31
19
|
const currentOS = detectOS();
|
|
32
20
|
if (currentOS === 'windows') {
|
|
33
|
-
// Check environment variables for shell hints
|
|
34
21
|
const comspec = process.env.COMSPEC || '';
|
|
35
22
|
const psModulePath = process.env.PSModulePath;
|
|
36
23
|
const shellEnv = process.env.SHELL || '';
|
|
37
|
-
// PowerShell detection
|
|
38
24
|
if (psModulePath || process.env.PSExecutionPolicyPreference) {
|
|
39
25
|
return 'powershell';
|
|
40
26
|
}
|
|
41
|
-
// Git Bash or WSL bash
|
|
42
27
|
if (shellEnv.includes('bash')) {
|
|
43
28
|
return 'bash';
|
|
44
29
|
}
|
|
45
|
-
// CMD fallback
|
|
46
30
|
if (comspec.toLowerCase().includes('cmd.exe')) {
|
|
47
31
|
return 'cmd';
|
|
48
32
|
}
|
|
49
|
-
return 'powershell';
|
|
33
|
+
return 'powershell';
|
|
50
34
|
}
|
|
51
|
-
// Unix-like systems
|
|
52
35
|
const shell = process.env.SHELL || '';
|
|
53
36
|
if (shell.includes('zsh')) {
|
|
54
37
|
return 'zsh';
|
|
@@ -56,14 +39,11 @@ export function detectShell() {
|
|
|
56
39
|
if (shell.includes('bash')) {
|
|
57
40
|
return 'bash';
|
|
58
41
|
}
|
|
59
|
-
return 'bash';
|
|
42
|
+
return 'bash';
|
|
60
43
|
}
|
|
61
|
-
// ============================================================================
|
|
62
|
-
// Runtime Version Detection
|
|
63
|
-
// ============================================================================
|
|
64
44
|
export function detectNodeVersion() {
|
|
65
45
|
try {
|
|
66
|
-
return process.version;
|
|
46
|
+
return process.version;
|
|
67
47
|
}
|
|
68
48
|
catch {
|
|
69
49
|
return 'unknown';
|
|
@@ -71,11 +51,9 @@ export function detectNodeVersion() {
|
|
|
71
51
|
}
|
|
72
52
|
export function detectBunVersion() {
|
|
73
53
|
try {
|
|
74
|
-
// Check if running in Bun
|
|
75
54
|
if (globalThis.Bun) {
|
|
76
55
|
return globalThis.Bun.version;
|
|
77
56
|
}
|
|
78
|
-
// Try to detect installed bun
|
|
79
57
|
const output = execSync('bun --version', {
|
|
80
58
|
encoding: 'utf-8',
|
|
81
59
|
timeout: 5000,
|
|
@@ -87,11 +65,7 @@ export function detectBunVersion() {
|
|
|
87
65
|
return undefined;
|
|
88
66
|
}
|
|
89
67
|
}
|
|
90
|
-
// ============================================================================
|
|
91
|
-
// Package Manager Detection
|
|
92
|
-
// ============================================================================
|
|
93
68
|
export function detectPackageManager(projectPath) {
|
|
94
|
-
// Check lockfiles (order matters - most specific first)
|
|
95
69
|
const lockfiles = [
|
|
96
70
|
{ file: 'bun.lockb', manager: 'bun' },
|
|
97
71
|
{ file: 'pnpm-lock.yaml', manager: 'pnpm' },
|
|
@@ -103,7 +77,6 @@ export function detectPackageManager(projectPath) {
|
|
|
103
77
|
return manager;
|
|
104
78
|
}
|
|
105
79
|
}
|
|
106
|
-
// Check packageManager field in package.json
|
|
107
80
|
try {
|
|
108
81
|
const pkgPath = path.join(projectPath, 'package.json');
|
|
109
82
|
if (fs.existsSync(pkgPath)) {
|
|
@@ -117,12 +90,10 @@ export function detectPackageManager(projectPath) {
|
|
|
117
90
|
}
|
|
118
91
|
}
|
|
119
92
|
catch {
|
|
120
|
-
// Ignore parse errors
|
|
121
93
|
}
|
|
122
94
|
return 'unknown';
|
|
123
95
|
}
|
|
124
96
|
const STACK_DETECTIONS = [
|
|
125
|
-
// Frameworks
|
|
126
97
|
{ name: 'Next.js', patterns: { dependencies: ['next'] } },
|
|
127
98
|
{ name: 'React', patterns: { dependencies: ['react'] } },
|
|
128
99
|
{ name: 'Vue', patterns: { dependencies: ['vue'] } },
|
|
@@ -131,38 +102,31 @@ const STACK_DETECTIONS = [
|
|
|
131
102
|
{ name: 'Astro', patterns: { dependencies: ['astro'] } },
|
|
132
103
|
{ name: 'Remix', patterns: { dependencies: ['@remix-run/react'] } },
|
|
133
104
|
{ name: 'Nuxt', patterns: { dependencies: ['nuxt'] } },
|
|
134
|
-
// Runtime & Build
|
|
135
105
|
{ name: 'TypeScript', patterns: { devDependencies: ['typescript'] } },
|
|
136
106
|
{ name: 'Bun', patterns: { devDependencies: ['bun-types'], files: ['bun.lockb'] } },
|
|
137
107
|
{ name: 'Vite', patterns: { devDependencies: ['vite'] } },
|
|
138
108
|
{ name: 'Webpack', patterns: { devDependencies: ['webpack'] } },
|
|
139
109
|
{ name: 'ESBuild', patterns: { devDependencies: ['esbuild'] } },
|
|
140
|
-
// Styling
|
|
141
110
|
{ name: 'Tailwind CSS', patterns: { devDependencies: ['tailwindcss'] } },
|
|
142
111
|
{ name: 'Sass', patterns: { devDependencies: ['sass'] } },
|
|
143
112
|
{ name: 'PostCSS', patterns: { devDependencies: ['postcss'] } },
|
|
144
113
|
{ name: 'Styled Components', patterns: { dependencies: ['styled-components'] } },
|
|
145
|
-
// Database & ORM
|
|
146
114
|
{ name: 'Prisma', patterns: { devDependencies: ['prisma'], files: ['prisma/schema.prisma'] } },
|
|
147
115
|
{ name: 'Drizzle', patterns: { devDependencies: ['drizzle-kit'] } },
|
|
148
116
|
{ name: 'TypeORM', patterns: { dependencies: ['typeorm'] } },
|
|
149
117
|
{ name: 'Mongoose', patterns: { dependencies: ['mongoose'] } },
|
|
150
118
|
{ name: 'SQLite', patterns: { dependencies: ['better-sqlite3', 'sql.js'] } },
|
|
151
|
-
// Backend
|
|
152
119
|
{ name: 'Express', patterns: { dependencies: ['express'] } },
|
|
153
120
|
{ name: 'Fastify', patterns: { dependencies: ['fastify'] } },
|
|
154
121
|
{ name: 'NestJS', patterns: { dependencies: ['@nestjs/core'] } },
|
|
155
122
|
{ name: 'Hono', patterns: { dependencies: ['hono'] } },
|
|
156
|
-
// Testing
|
|
157
123
|
{ name: 'Jest', patterns: { devDependencies: ['jest'] } },
|
|
158
124
|
{ name: 'Vitest', patterns: { devDependencies: ['vitest'] } },
|
|
159
125
|
{ name: 'Playwright', patterns: { devDependencies: ['@playwright/test', 'playwright'] } },
|
|
160
126
|
{ name: 'Cypress', patterns: { devDependencies: ['cypress'] } },
|
|
161
|
-
// Linting & Formatting
|
|
162
127
|
{ name: 'ESLint', patterns: { devDependencies: ['eslint'], files: ['.eslintrc.js', '.eslintrc.json', 'eslint.config.js'] } },
|
|
163
128
|
{ name: 'Prettier', patterns: { devDependencies: ['prettier'] } },
|
|
164
129
|
{ name: 'Biome', patterns: { devDependencies: ['@biomejs/biome'] } },
|
|
165
|
-
// Auth & Services
|
|
166
130
|
{ name: 'Supabase', patterns: { dependencies: ['@supabase/supabase-js'] } },
|
|
167
131
|
{ name: 'Firebase', patterns: { dependencies: ['firebase'] } },
|
|
168
132
|
{ name: 'Clerk', patterns: { dependencies: ['@clerk/nextjs', '@clerk/clerk-react'] } },
|
|
@@ -170,7 +134,6 @@ const STACK_DETECTIONS = [
|
|
|
170
134
|
];
|
|
171
135
|
export function detectTechStack(projectPath) {
|
|
172
136
|
const detected = [];
|
|
173
|
-
// Read package.json
|
|
174
137
|
let pkg = {};
|
|
175
138
|
try {
|
|
176
139
|
const pkgPath = path.join(projectPath, 'package.json');
|
|
@@ -179,7 +142,6 @@ export function detectTechStack(projectPath) {
|
|
|
179
142
|
}
|
|
180
143
|
}
|
|
181
144
|
catch {
|
|
182
|
-
// Return empty if no package.json
|
|
183
145
|
return detected;
|
|
184
146
|
}
|
|
185
147
|
const deps = pkg.dependencies || {};
|
|
@@ -187,7 +149,6 @@ export function detectTechStack(projectPath) {
|
|
|
187
149
|
const allDeps = { ...deps, ...devDeps };
|
|
188
150
|
for (const stack of STACK_DETECTIONS) {
|
|
189
151
|
let found = false;
|
|
190
|
-
// Check dependencies
|
|
191
152
|
if (stack.patterns.dependencies) {
|
|
192
153
|
for (const dep of stack.patterns.dependencies) {
|
|
193
154
|
if (dep in deps || dep in allDeps) {
|
|
@@ -196,7 +157,6 @@ export function detectTechStack(projectPath) {
|
|
|
196
157
|
}
|
|
197
158
|
}
|
|
198
159
|
}
|
|
199
|
-
// Check devDependencies
|
|
200
160
|
if (!found && stack.patterns.devDependencies) {
|
|
201
161
|
for (const dep of stack.patterns.devDependencies) {
|
|
202
162
|
if (dep in devDeps || dep in allDeps) {
|
|
@@ -205,7 +165,6 @@ export function detectTechStack(projectPath) {
|
|
|
205
165
|
}
|
|
206
166
|
}
|
|
207
167
|
}
|
|
208
|
-
// Check files
|
|
209
168
|
if (!found && stack.patterns.files) {
|
|
210
169
|
for (const file of stack.patterns.files) {
|
|
211
170
|
if (fs.existsSync(path.join(projectPath, file))) {
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Weave Environment Analysis Module
|
|
3
|
-
*
|
|
4
|
-
* Proactive knowledge system for detecting potential issues
|
|
5
|
-
* BEFORE they occur, based on environment + stack combinations.
|
|
6
|
-
*/
|
|
7
1
|
import type { EnvironmentContext, EnvironmentAnalysis } from '../types.js';
|
|
8
2
|
import { type DetectorOptions } from './detector.js';
|
|
9
3
|
import { type CollectIssuesOptions } from './issues.js';
|
|
@@ -12,21 +6,8 @@ export { collectPotentialIssues, filterIssuesBySeverity, filterIssuesByCategory,
|
|
|
12
6
|
export type { DetectorOptions } from './detector.js';
|
|
13
7
|
export type { CollectIssuesOptions, PhaseContext, FeatureContext, ContextSearchResult, } from './issues.js';
|
|
14
8
|
export interface AnalyzeOptions extends DetectorOptions, CollectIssuesOptions {
|
|
15
|
-
/** If true, only include warnings and critical issues in the summary */
|
|
16
9
|
warningsOnly?: boolean;
|
|
17
10
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Perform complete environment analysis.
|
|
20
|
-
* Detects environment context and collects matching potential issues.
|
|
21
|
-
*/
|
|
22
11
|
export declare function analyzeEnvironment(options?: AnalyzeOptions): Promise<EnvironmentAnalysis>;
|
|
23
|
-
/**
|
|
24
|
-
* Quick check if there are any critical issues for the current environment.
|
|
25
|
-
* Useful for CLI warnings or pre-flight checks.
|
|
26
|
-
*/
|
|
27
12
|
export declare function hasCriticalIssues(options?: AnalyzeOptions): Promise<boolean>;
|
|
28
|
-
/**
|
|
29
|
-
* Get a one-liner summary of the environment.
|
|
30
|
-
* Useful for logging or status displays.
|
|
31
|
-
*/
|
|
32
13
|
export declare function getEnvironmentOneLiner(context: EnvironmentContext): string;
|
|
@@ -1,31 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Weave Environment Analysis Module
|
|
3
|
-
*
|
|
4
|
-
* Proactive knowledge system for detecting potential issues
|
|
5
|
-
* BEFORE they occur, based on environment + stack combinations.
|
|
6
|
-
*/
|
|
7
1
|
import { detectEnvironment } from './detector.js';
|
|
8
2
|
import { collectPotentialIssues, filterIssuesBySeverity } from './issues.js';
|
|
9
|
-
// Re-export types and utilities
|
|
10
3
|
export { detectEnvironment } from './detector.js';
|
|
11
|
-
export { collectPotentialIssues, filterIssuesBySeverity, filterIssuesByCategory,
|
|
12
|
-
// Phase/Feature context search
|
|
13
|
-
searchPhaseIssues, searchFeatureIssues, formatContextResults, } from './issues.js';
|
|
14
|
-
/**
|
|
15
|
-
* Perform complete environment analysis.
|
|
16
|
-
* Detects environment context and collects matching potential issues.
|
|
17
|
-
*/
|
|
4
|
+
export { collectPotentialIssues, filterIssuesBySeverity, filterIssuesByCategory, searchPhaseIssues, searchFeatureIssues, formatContextResults, } from './issues.js';
|
|
18
5
|
export async function analyzeEnvironment(options = {}) {
|
|
19
6
|
const { warningsOnly = false, ...otherOptions } = options;
|
|
20
|
-
// Detect environment
|
|
21
7
|
const context = detectEnvironment(otherOptions);
|
|
22
|
-
// Collect potential issues
|
|
23
8
|
let issues = await collectPotentialIssues(context, otherOptions);
|
|
24
|
-
// Filter if warningsOnly
|
|
25
9
|
if (warningsOnly) {
|
|
26
10
|
issues = filterIssuesBySeverity(issues, 'warning');
|
|
27
11
|
}
|
|
28
|
-
// Generate summary
|
|
29
12
|
const summary = generateSummary(context, issues);
|
|
30
13
|
return {
|
|
31
14
|
context,
|
|
@@ -34,14 +17,9 @@ export async function analyzeEnvironment(options = {}) {
|
|
|
34
17
|
analyzedAt: new Date().toISOString(),
|
|
35
18
|
};
|
|
36
19
|
}
|
|
37
|
-
// ============================================================================
|
|
38
|
-
// Summary Generation
|
|
39
|
-
// ============================================================================
|
|
40
20
|
function generateSummary(context, issues) {
|
|
41
21
|
const lines = [];
|
|
42
|
-
// Header
|
|
43
22
|
lines.push('## π νκ²½ λΆμ κ²°κ³Ό\n');
|
|
44
|
-
// Environment Context
|
|
45
23
|
lines.push('### π μ€ν νκ²½');
|
|
46
24
|
lines.push(`- **OS**: ${formatOS(context.os)}`);
|
|
47
25
|
lines.push(`- **Shell**: ${context.shell}`);
|
|
@@ -54,7 +32,6 @@ function generateSummary(context, issues) {
|
|
|
54
32
|
lines.push(`- **κΈ°μ μ€ν**: ${context.stack.join(', ')}`);
|
|
55
33
|
}
|
|
56
34
|
lines.push('');
|
|
57
|
-
// Issues Summary
|
|
58
35
|
const criticalCount = issues.filter(i => i.severity === 'critical').length;
|
|
59
36
|
const warningCount = issues.filter(i => i.severity === 'warning').length;
|
|
60
37
|
const infoCount = issues.filter(i => i.severity === 'info').length;
|
|
@@ -72,7 +49,6 @@ function generateSummary(context, issues) {
|
|
|
72
49
|
if (infoCount > 0)
|
|
73
50
|
lines.push(`- π΅ **Info**: ${infoCount}κ°`);
|
|
74
51
|
lines.push('');
|
|
75
|
-
// Critical issues first
|
|
76
52
|
const criticalIssues = issues.filter(i => i.severity === 'critical');
|
|
77
53
|
if (criticalIssues.length > 0) {
|
|
78
54
|
lines.push('#### π΄ Critical Issues');
|
|
@@ -85,7 +61,6 @@ function generateSummary(context, issues) {
|
|
|
85
61
|
lines.push('');
|
|
86
62
|
}
|
|
87
63
|
}
|
|
88
|
-
// Warning issues
|
|
89
64
|
const warningIssues = issues.filter(i => i.severity === 'warning');
|
|
90
65
|
if (warningIssues.length > 0) {
|
|
91
66
|
lines.push('#### π‘ Warnings');
|
|
@@ -98,7 +73,6 @@ function generateSummary(context, issues) {
|
|
|
98
73
|
lines.push('');
|
|
99
74
|
}
|
|
100
75
|
}
|
|
101
|
-
// Info issues (brief)
|
|
102
76
|
const infoIssues = issues.filter(i => i.severity === 'info');
|
|
103
77
|
if (infoIssues.length > 0) {
|
|
104
78
|
lines.push('#### π΅ μ°Έκ³ μ¬ν');
|
|
@@ -108,7 +82,6 @@ function generateSummary(context, issues) {
|
|
|
108
82
|
lines.push('');
|
|
109
83
|
}
|
|
110
84
|
}
|
|
111
|
-
// Footer
|
|
112
85
|
const builtinCount = issues.filter(i => i.source === 'builtin').length;
|
|
113
86
|
const historyCount = issues.filter(i => i.source === 'project_history').length;
|
|
114
87
|
lines.push('---');
|
|
@@ -130,21 +103,10 @@ function formatOS(os) {
|
|
|
130
103
|
return os;
|
|
131
104
|
}
|
|
132
105
|
}
|
|
133
|
-
// ============================================================================
|
|
134
|
-
// Quick Check Functions
|
|
135
|
-
// ============================================================================
|
|
136
|
-
/**
|
|
137
|
-
* Quick check if there are any critical issues for the current environment.
|
|
138
|
-
* Useful for CLI warnings or pre-flight checks.
|
|
139
|
-
*/
|
|
140
106
|
export async function hasCriticalIssues(options = {}) {
|
|
141
107
|
const analysis = await analyzeEnvironment(options);
|
|
142
108
|
return analysis.issues.some(i => i.severity === 'critical');
|
|
143
109
|
}
|
|
144
|
-
/**
|
|
145
|
-
* Get a one-liner summary of the environment.
|
|
146
|
-
* Useful for logging or status displays.
|
|
147
|
-
*/
|
|
148
110
|
export function getEnvironmentOneLiner(context) {
|
|
149
111
|
const parts = [
|
|
150
112
|
formatOS(context.os),
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Potential Issues Collector
|
|
3
|
-
*
|
|
4
|
-
* Combines hardcoded known issues with project history from Global Knowledge.
|
|
5
|
-
* Provides proactive warnings based on environment + stack combinations.
|
|
6
|
-
*/
|
|
7
1
|
import type { EnvironmentContext, PotentialIssue } from '../types.js';
|
|
8
2
|
export interface CollectIssuesOptions {
|
|
9
3
|
includeProjectHistory?: boolean;
|
|
@@ -12,54 +6,25 @@ export interface CollectIssuesOptions {
|
|
|
12
6
|
export declare function collectPotentialIssues(context: EnvironmentContext, options?: CollectIssuesOptions): Promise<PotentialIssue[]>;
|
|
13
7
|
export declare function filterIssuesByCategory(issues: PotentialIssue[], category: PotentialIssue['category']): PotentialIssue[];
|
|
14
8
|
export declare function filterIssuesBySeverity(issues: PotentialIssue[], minSeverity: PotentialIssue['severity']): PotentialIssue[];
|
|
15
|
-
/**
|
|
16
|
-
* Context for phase-specific issue search
|
|
17
|
-
*/
|
|
18
9
|
export interface PhaseContext {
|
|
19
|
-
/** Phase name (e.g., "λ‘κ·ΈμΈ κ΅¬ν", "κ°μ μ ν UI") */
|
|
20
10
|
phaseName: string;
|
|
21
|
-
/** Phase ID (e.g., "P1", "P2") */
|
|
22
11
|
phaseId?: string;
|
|
23
|
-
/** Tasks within this phase */
|
|
24
12
|
tasks?: string[];
|
|
25
|
-
/** Done criteria */
|
|
26
13
|
doneWhen?: string;
|
|
27
14
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Context for feature-specific issue search
|
|
30
|
-
*/
|
|
31
15
|
export interface FeatureContext {
|
|
32
|
-
/** Feature name or description */
|
|
33
16
|
featureName: string;
|
|
34
|
-
/** Related keywords for search */
|
|
35
17
|
keywords?: string[];
|
|
36
|
-
/** Related tech stack for filtering */
|
|
37
18
|
relatedStack?: string[];
|
|
38
19
|
}
|
|
39
|
-
/**
|
|
40
|
-
* Result from context-based search
|
|
41
|
-
*/
|
|
42
20
|
export interface ContextSearchResult extends PotentialIssue {
|
|
43
|
-
/** Relevance score (0-1) */
|
|
44
21
|
relevance: number;
|
|
45
|
-
/** Which context matched */
|
|
46
22
|
matchedContext: string;
|
|
47
23
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Search for issues relevant to a specific phase.
|
|
50
|
-
* Combines phase metadata with environment context for targeted search.
|
|
51
|
-
*/
|
|
52
24
|
export declare function searchPhaseIssues(phaseContext: PhaseContext, environmentContext: EnvironmentContext, options?: {
|
|
53
25
|
limit?: number;
|
|
54
26
|
}): Promise<ContextSearchResult[]>;
|
|
55
|
-
/**
|
|
56
|
-
* Search for issues relevant to a specific feature request.
|
|
57
|
-
* Useful when implementing new features to find similar past problems.
|
|
58
|
-
*/
|
|
59
27
|
export declare function searchFeatureIssues(featureContext: FeatureContext, environmentContext: EnvironmentContext, options?: {
|
|
60
28
|
limit?: number;
|
|
61
29
|
}): Promise<ContextSearchResult[]>;
|
|
62
|
-
/**
|
|
63
|
-
* Quick helper to format context search results as markdown.
|
|
64
|
-
*/
|
|
65
30
|
export declare function formatContextResults(results: ContextSearchResult[], title?: string): string;
|