pi-lens 3.6.2 → 3.6.4
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/CHANGELOG.md +10 -2
- package/package.json +4 -4
- package/tsconfig.json +1 -1
- package/clients/__tests__/file-time.test.js +0 -216
- package/clients/__tests__/file-time.test.ts +0 -276
- package/clients/__tests__/format-service.test.js +0 -245
- package/clients/__tests__/format-service.test.ts +0 -339
- package/clients/__tests__/formatters.test.js +0 -271
- package/clients/__tests__/formatters.test.ts +0 -401
- package/clients/agent-behavior-client.js +0 -110
- package/clients/agent-behavior-client.test.js +0 -94
- package/clients/agent-behavior-client.test.ts +0 -116
- package/clients/amain-types.js +0 -164
- package/clients/architect-client.js +0 -291
- package/clients/ast-grep-client.js +0 -253
- package/clients/ast-grep-parser.js +0 -84
- package/clients/ast-grep-rule-manager.js +0 -89
- package/clients/ast-grep-types.js +0 -9
- package/clients/auto-loop.js +0 -131
- package/clients/biome-client.js +0 -420
- package/clients/biome-client.test.js +0 -144
- package/clients/biome-client.test.ts +0 -163
- package/clients/cache/rule-cache.js +0 -72
- package/clients/cache-manager.js +0 -245
- package/clients/cache-manager.test.js +0 -197
- package/clients/cache-manager.test.ts +0 -299
- package/clients/complexity-client.js +0 -675
- package/clients/complexity-client.test.js +0 -234
- package/clients/complexity-client.test.ts +0 -255
- package/clients/config-validator.js +0 -465
- package/clients/dependency-checker.js +0 -325
- package/clients/dependency-checker.test.js +0 -60
- package/clients/dependency-checker.test.ts +0 -71
- package/clients/dispatch/__tests__/autofix-integration.test.js +0 -245
- package/clients/dispatch/__tests__/autofix-integration.test.ts +0 -300
- package/clients/dispatch/__tests__/runner-registration.test.js +0 -234
- package/clients/dispatch/__tests__/runner-registration.test.ts +0 -286
- package/clients/dispatch/debug.log +0 -1
- package/clients/dispatch/dispatcher.edge.test.js +0 -82
- package/clients/dispatch/dispatcher.edge.test.ts +0 -100
- package/clients/dispatch/dispatcher.format.test.js +0 -46
- package/clients/dispatch/dispatcher.format.test.ts +0 -58
- package/clients/dispatch/dispatcher.inline.test.js +0 -74
- package/clients/dispatch/dispatcher.inline.test.ts +0 -93
- package/clients/dispatch/dispatcher.js +0 -381
- package/clients/dispatch/dispatcher.test.js +0 -116
- package/clients/dispatch/dispatcher.test.ts +0 -149
- package/clients/dispatch/integration.js +0 -108
- package/clients/dispatch/plan.js +0 -183
- package/clients/dispatch/runners/architect.js +0 -83
- package/clients/dispatch/runners/architect.test.js +0 -138
- package/clients/dispatch/runners/architect.test.ts +0 -162
- package/clients/dispatch/runners/ast-grep-napi.js +0 -405
- package/clients/dispatch/runners/ast-grep-napi.test.js +0 -107
- package/clients/dispatch/runners/ast-grep-napi.test.ts +0 -129
- package/clients/dispatch/runners/ast-grep.js +0 -157
- package/clients/dispatch/runners/biome.js +0 -55
- package/clients/dispatch/runners/config-validation.js +0 -67
- package/clients/dispatch/runners/go-vet.js +0 -48
- package/clients/dispatch/runners/index.js +0 -47
- package/clients/dispatch/runners/lsp.js +0 -102
- package/clients/dispatch/runners/oxlint.js +0 -67
- package/clients/dispatch/runners/oxlint.test.js +0 -230
- package/clients/dispatch/runners/oxlint.test.ts +0 -303
- package/clients/dispatch/runners/pyright.js +0 -100
- package/clients/dispatch/runners/pyright.test.js +0 -98
- package/clients/dispatch/runners/pyright.test.ts +0 -121
- package/clients/dispatch/runners/python-slop.js +0 -97
- package/clients/dispatch/runners/python-slop.test.js +0 -203
- package/clients/dispatch/runners/python-slop.test.ts +0 -298
- package/clients/dispatch/runners/ruff.js +0 -48
- package/clients/dispatch/runners/rust-clippy.js +0 -102
- package/clients/dispatch/runners/scan_codebase.test.js +0 -89
- package/clients/dispatch/runners/scan_codebase.test.ts +0 -105
- package/clients/dispatch/runners/shellcheck.js +0 -147
- package/clients/dispatch/runners/shellcheck.test.js +0 -98
- package/clients/dispatch/runners/shellcheck.test.ts +0 -129
- package/clients/dispatch/runners/similarity.js +0 -230
- package/clients/dispatch/runners/spellcheck.js +0 -106
- package/clients/dispatch/runners/spellcheck.test.js +0 -158
- package/clients/dispatch/runners/spellcheck.test.ts +0 -214
- package/clients/dispatch/runners/tree-sitter.js +0 -246
- package/clients/dispatch/runners/ts-lsp.js +0 -125
- package/clients/dispatch/runners/ts-slop.js +0 -113
- package/clients/dispatch/runners/type-safety.js +0 -142
- package/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -134
- package/clients/dispatch/runners/utils/runner-helpers.js +0 -115
- package/clients/dispatch/runners/utils.js +0 -51
- package/clients/dispatch/runners/yaml-rule-parser.js +0 -360
- package/clients/dispatch/types.js +0 -16
- package/clients/dispatch/utils/format-utils.js +0 -44
- package/clients/dogfood.test.js +0 -201
- package/clients/dogfood.test.ts +0 -269
- package/clients/file-kinds.js +0 -177
- package/clients/file-kinds.test.js +0 -169
- package/clients/file-kinds.test.ts +0 -210
- package/clients/file-time.js +0 -152
- package/clients/file-utils.js +0 -40
- package/clients/fix-scanners.js +0 -204
- package/clients/format-service.js +0 -184
- package/clients/formatters.js +0 -488
- package/clients/go-client.js +0 -203
- package/clients/go-client.test.js +0 -127
- package/clients/go-client.test.ts +0 -143
- package/clients/installer/index.js +0 -403
- package/clients/interviewer-templates.js +0 -75
- package/clients/interviewer.js +0 -173
- package/clients/jscpd-client.js +0 -196
- package/clients/jscpd-client.test.js +0 -127
- package/clients/jscpd-client.test.ts +0 -145
- package/clients/knip-client.js +0 -239
- package/clients/knip-client.test.js +0 -112
- package/clients/knip-client.test.ts +0 -128
- package/clients/latency-logger.js +0 -40
- package/clients/lsp/__tests__/client.test.js +0 -310
- package/clients/lsp/__tests__/client.test.ts +0 -412
- package/clients/lsp/__tests__/config.test.js +0 -167
- package/clients/lsp/__tests__/config.test.ts +0 -217
- package/clients/lsp/__tests__/error-recovery.test.js +0 -213
- package/clients/lsp/__tests__/error-recovery.test.ts +0 -279
- package/clients/lsp/__tests__/integration.test.js +0 -127
- package/clients/lsp/__tests__/integration.test.ts +0 -160
- package/clients/lsp/__tests__/launch.test.js +0 -313
- package/clients/lsp/__tests__/launch.test.ts +0 -394
- package/clients/lsp/__tests__/server.test.js +0 -259
- package/clients/lsp/__tests__/server.test.ts +0 -332
- package/clients/lsp/__tests__/service.test.js +0 -438
- package/clients/lsp/__tests__/service.test.ts +0 -530
- package/clients/lsp/client.js +0 -350
- package/clients/lsp/config.js +0 -112
- package/clients/lsp/index.js +0 -318
- package/clients/lsp/installer/index.js +0 -391
- package/clients/lsp/interactive-install.js +0 -221
- package/clients/lsp/language.js +0 -170
- package/clients/lsp/launch.js +0 -329
- package/clients/lsp/lsp/launch.js +0 -116
- package/clients/lsp/lsp/server.js +0 -532
- package/clients/lsp/lsp-index.js +0 -10
- package/clients/lsp/path-utils.js +0 -5
- package/clients/lsp/server.js +0 -725
- package/clients/lsp/test-py-spawn/requirements.txt +0 -1
- package/clients/lsp/test-py-spawn/test.py +0 -3
- package/clients/lsp/test-py-svc/requirements.txt +0 -1
- package/clients/lsp/test-py-svc/test.py +0 -3
- package/clients/lsp/test-python-project/requirements.txt +0 -1
- package/clients/lsp/test-python-project/test.py +0 -5
- package/clients/metrics-client.js +0 -107
- package/clients/metrics-client.test.js +0 -128
- package/clients/metrics-client.test.ts +0 -163
- package/clients/metrics-history.js +0 -367
- package/clients/path-utils.js +0 -142
- package/clients/pipeline.js +0 -272
- package/clients/production-readiness.js +0 -522
- package/clients/project-index.js +0 -255
- package/clients/project-metadata.js +0 -531
- package/clients/ruff-client.js +0 -325
- package/clients/ruff-client.test.js +0 -132
- package/clients/ruff-client.test.ts +0 -153
- package/clients/rules-scanner.js +0 -97
- package/clients/runner-tracker.js +0 -152
- package/clients/rust-client.js +0 -205
- package/clients/rust-client.test.js +0 -108
- package/clients/rust-client.test.ts +0 -130
- package/clients/safe-spawn-async.js +0 -163
- package/clients/safe-spawn.js +0 -241
- package/clients/sanitize.js +0 -291
- package/clients/sanitize.test.js +0 -177
- package/clients/sanitize.test.ts +0 -223
- package/clients/scan-architectural-debt.js +0 -167
- package/clients/scan-utils.js +0 -83
- package/clients/secrets-scanner.js +0 -119
- package/clients/secrets-scanner.test.js +0 -100
- package/clients/secrets-scanner.test.ts +0 -113
- package/clients/sg-runner.js +0 -292
- package/clients/state-matrix.js +0 -160
- package/clients/subprocess-client.js +0 -65
- package/clients/symbol-types.js +0 -5
- package/clients/test-runner-client.js +0 -523
- package/clients/test-runner-client.test.js +0 -192
- package/clients/test-runner-client.test.ts +0 -253
- package/clients/test-utils.js +0 -27
- package/clients/test-utils.ts +0 -36
- package/clients/todo-scanner.js +0 -200
- package/clients/todo-scanner.test.js +0 -301
- package/clients/todo-scanner.test.ts +0 -352
- package/clients/tool-availability.js +0 -207
- package/clients/tree-sitter-client.js +0 -601
- package/clients/tree-sitter-query-loader.js +0 -355
- package/clients/tree-sitter-symbol-extractor.js +0 -289
- package/clients/ts-service.js +0 -129
- package/clients/type-coverage-client.js +0 -127
- package/clients/type-coverage-client.test.js +0 -105
- package/clients/type-coverage-client.test.ts +0 -125
- package/clients/type-safety-client.js +0 -138
- package/clients/types.js +0 -11
- package/clients/typescript-client.codefix.test.js +0 -157
- package/clients/typescript-client.codefix.test.ts +0 -186
- package/clients/typescript-client.js +0 -509
- package/clients/typescript-client.test.js +0 -105
- package/clients/typescript-client.test.ts +0 -126
- package/commands/booboo.js +0 -1007
- package/commands/fix-from-booboo.js +0 -398
- package/commands/fix-simplified.js +0 -618
- package/commands/rate.js +0 -281
- package/commands/rate.test.js +0 -119
- package/commands/rate.test.ts +0 -131
- package/commands/refactor.js +0 -130
package/clients/state-matrix.js
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* State Matrix Builder
|
|
3
|
-
*
|
|
4
|
-
* Implements Amain's 57×72 state transfer matrix construction.
|
|
5
|
-
* Counts parent→child transitions in the TypeScript AST.
|
|
6
|
-
*/
|
|
7
|
-
import * as ts from "typescript";
|
|
8
|
-
import { getStateIndex, NUM_STATES, NUM_SYNTAX } from "./amain-types.js";
|
|
9
|
-
// ============================================================================
|
|
10
|
-
// Matrix Construction
|
|
11
|
-
// ============================================================================
|
|
12
|
-
/**
|
|
13
|
-
* Build a 57×72 state transfer matrix from TypeScript source code.
|
|
14
|
-
*
|
|
15
|
-
* matrix[i][j] = count of transitions from syntax state i to state j
|
|
16
|
-
*
|
|
17
|
-
* @param sourceCode TypeScript source code
|
|
18
|
-
* @returns 57×72 matrix of transition counts
|
|
19
|
-
*/
|
|
20
|
-
export function buildStateMatrix(sourceCode) {
|
|
21
|
-
const sourceFile = ts.createSourceFile("temp.ts", sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
22
|
-
// Initialize 57×72 matrix with zeros
|
|
23
|
-
const matrix = Array(NUM_SYNTAX)
|
|
24
|
-
.fill(0)
|
|
25
|
-
.map(() => Array(NUM_STATES).fill(0));
|
|
26
|
-
// Walk AST and count transitions
|
|
27
|
-
function visitNode(node, parentKind) {
|
|
28
|
-
const nodeState = getStateIndex(node);
|
|
29
|
-
if (parentKind !== undefined) {
|
|
30
|
-
const parentState = getStateIndex({ kind: parentKind });
|
|
31
|
-
// Only count transitions from syntax states (first 57)
|
|
32
|
-
if (parentState < NUM_SYNTAX) {
|
|
33
|
-
matrix[parentState][nodeState]++;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
// Continue to children
|
|
37
|
-
ts.forEachChild(node, (child) => visitNode(child, node.kind));
|
|
38
|
-
}
|
|
39
|
-
visitNode(sourceFile);
|
|
40
|
-
return matrix;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Build matrix from a source file node (for incremental updates)
|
|
44
|
-
*/
|
|
45
|
-
export function buildStateMatrixFromFile(sourceFile) {
|
|
46
|
-
// Initialize 57×72 matrix with zeros
|
|
47
|
-
const matrix = Array(NUM_SYNTAX)
|
|
48
|
-
.fill(0)
|
|
49
|
-
.map(() => Array(NUM_STATES).fill(0));
|
|
50
|
-
// Walk AST and count transitions
|
|
51
|
-
function visitNode(node, parentKind) {
|
|
52
|
-
const nodeState = getStateIndex(node);
|
|
53
|
-
if (parentKind !== undefined) {
|
|
54
|
-
const parentState = getStateIndex({ kind: parentKind });
|
|
55
|
-
// Only count transitions from syntax states (first 57)
|
|
56
|
-
if (parentState < NUM_SYNTAX) {
|
|
57
|
-
matrix[parentState][nodeState]++;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
// Continue to children
|
|
61
|
-
ts.forEachChild(node, (child) => visitNode(child, node.kind));
|
|
62
|
-
}
|
|
63
|
-
visitNode(sourceFile);
|
|
64
|
-
return matrix;
|
|
65
|
-
}
|
|
66
|
-
// ============================================================================
|
|
67
|
-
// Probability Normalization
|
|
68
|
-
// ============================================================================
|
|
69
|
-
/**
|
|
70
|
-
* Convert count matrix to probability matrix.
|
|
71
|
-
* Each row sums to 1 (Markov chain property).
|
|
72
|
-
*
|
|
73
|
-
* @param matrix 57×72 count matrix
|
|
74
|
-
* @returns 57×72 probability matrix
|
|
75
|
-
*/
|
|
76
|
-
export function toProbabilityMatrix(matrix) {
|
|
77
|
-
return matrix.map((row) => {
|
|
78
|
-
const sum = row.reduce((a, b) => a + b, 0);
|
|
79
|
-
if (sum === 0)
|
|
80
|
-
return row.map(() => 0);
|
|
81
|
-
return row.map((val) => val / sum);
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
// ============================================================================
|
|
85
|
-
// Similarity Calculation
|
|
86
|
-
// ============================================================================
|
|
87
|
-
/**
|
|
88
|
-
* Calculate cosine similarity between two state matrices.
|
|
89
|
-
* Returns 0-1 similarity score (1 = identical).
|
|
90
|
-
*
|
|
91
|
-
* @param matrix1 57×72 count matrix
|
|
92
|
-
* @param matrix2 57×72 count matrix
|
|
93
|
-
* @returns similarity score 0-1
|
|
94
|
-
*/
|
|
95
|
-
export function calculateSimilarity(matrix1, matrix2) {
|
|
96
|
-
const prob1 = toProbabilityMatrix(matrix1);
|
|
97
|
-
const prob2 = toProbabilityMatrix(matrix2);
|
|
98
|
-
const similarities = [];
|
|
99
|
-
for (let i = 0; i < NUM_SYNTAX; i++) {
|
|
100
|
-
const row1 = prob1[i];
|
|
101
|
-
const row2 = prob2[i];
|
|
102
|
-
// Skip if both rows are empty
|
|
103
|
-
const hasData1 = row1.some((v) => v > 0);
|
|
104
|
-
const hasData2 = row2.some((v) => v > 0);
|
|
105
|
-
if (hasData1 || hasData2) {
|
|
106
|
-
// Calculate cosine similarity for this state
|
|
107
|
-
let dotProduct = 0;
|
|
108
|
-
let norm1 = 0;
|
|
109
|
-
let norm2 = 0;
|
|
110
|
-
for (let j = 0; j < NUM_STATES; j++) {
|
|
111
|
-
dotProduct += row1[j] * row2[j];
|
|
112
|
-
norm1 += row1[j] * row1[j];
|
|
113
|
-
norm2 += row2[j] * row2[j];
|
|
114
|
-
}
|
|
115
|
-
if (norm1 > 0 && norm2 > 0) {
|
|
116
|
-
similarities.push(dotProduct / (Math.sqrt(norm1) * Math.sqrt(norm2)));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
// Return average similarity across all states
|
|
121
|
-
if (similarities.length === 0)
|
|
122
|
-
return 0;
|
|
123
|
-
return similarities.reduce((a, b) => a + b, 0) / similarities.length;
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Calculate similarity from source code directly (convenience method)
|
|
127
|
-
*/
|
|
128
|
-
export function calculateSimilarityFromCode(code1, code2) {
|
|
129
|
-
const matrix1 = buildStateMatrix(code1);
|
|
130
|
-
const matrix2 = buildStateMatrix(code2);
|
|
131
|
-
return calculateSimilarity(matrix1, matrix2);
|
|
132
|
-
}
|
|
133
|
-
// ============================================================================
|
|
134
|
-
// Matrix Statistics (for guardrails)
|
|
135
|
-
// ============================================================================
|
|
136
|
-
/**
|
|
137
|
-
* Count total non-zero transitions in matrix (proxy for function complexity)
|
|
138
|
-
*/
|
|
139
|
-
export function countTransitions(matrix) {
|
|
140
|
-
return matrix.flat().filter((v) => v > 0).length;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Check if function meets complexity threshold (>20 transitions)
|
|
144
|
-
*/
|
|
145
|
-
export function isComplexEnough(matrix) {
|
|
146
|
-
return countTransitions(matrix) >= 20;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Serialize matrix for storage (sparse format to save space)
|
|
150
|
-
*/
|
|
151
|
-
export function serializeMatrix(matrix) {
|
|
152
|
-
// Return full matrix for now - can optimize to sparse later if needed
|
|
153
|
-
return matrix;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Deserialize matrix from storage
|
|
157
|
-
*/
|
|
158
|
-
export function deserializeMatrix(data) {
|
|
159
|
-
return data;
|
|
160
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import * as path from "node:path";
|
|
2
|
-
import { safeSpawn } from "./safe-spawn.js";
|
|
3
|
-
export class SubprocessClient {
|
|
4
|
-
constructor(verbose = false) {
|
|
5
|
-
this.available = null;
|
|
6
|
-
this.toolName = this.getToolName();
|
|
7
|
-
this.log = verbose
|
|
8
|
-
? (msg) => console.error(`[${this.toolName}] ${msg}`)
|
|
9
|
-
: () => { };
|
|
10
|
-
}
|
|
11
|
-
isAvailable() {
|
|
12
|
-
if (this.available !== null)
|
|
13
|
-
return this.available;
|
|
14
|
-
const cmd = this.getCheckCommand();
|
|
15
|
-
try {
|
|
16
|
-
const result = safeSpawn(cmd[0], cmd.slice(1), {
|
|
17
|
-
timeout: 10000,
|
|
18
|
-
});
|
|
19
|
-
this.available = !result.error && result.status === 0;
|
|
20
|
-
if (this.available) {
|
|
21
|
-
this.log(`${this.toolName} found`);
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
this.log(`${this.toolName} not available`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
catch (err) {
|
|
28
|
-
void err;
|
|
29
|
-
this.available = false;
|
|
30
|
-
}
|
|
31
|
-
return this.available;
|
|
32
|
-
}
|
|
33
|
-
isSupportedFile(filePath) {
|
|
34
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
35
|
-
return this.getSupportedExtensions().includes(ext);
|
|
36
|
-
}
|
|
37
|
-
runCommand(cmd, options = {}) {
|
|
38
|
-
const { cwd, timeout = 15000, input } = options;
|
|
39
|
-
try {
|
|
40
|
-
const result = safeSpawn(cmd[0], cmd.slice(1), {
|
|
41
|
-
timeout,
|
|
42
|
-
cwd,
|
|
43
|
-
});
|
|
44
|
-
if (result.error) {
|
|
45
|
-
this.log(`Command error: ${result.error.message}`);
|
|
46
|
-
}
|
|
47
|
-
// Return in a shape compatible with spawnSync return type
|
|
48
|
-
return {
|
|
49
|
-
status: result.status,
|
|
50
|
-
stdout: result.stdout,
|
|
51
|
-
stderr: result.stderr,
|
|
52
|
-
error: result.error,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
this.log(`Command failed: ${err.message}`);
|
|
57
|
-
return {
|
|
58
|
-
error: err,
|
|
59
|
-
status: 1,
|
|
60
|
-
stdout: "",
|
|
61
|
-
stderr: err.message,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|