@tekdi/coding-analytics 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +396 -0
- package/dist/claude-hooks-receiver.d.ts.map +1 -1
- package/dist/claude-hooks-receiver.js +36 -4
- package/dist/claude-hooks-receiver.js.map +1 -1
- package/dist/cli.js +8 -7
- package/dist/cli.js.map +1 -1
- package/dist/enricher.d.ts +3 -0
- package/dist/enricher.d.ts.map +1 -1
- package/dist/enricher.js +54 -4
- package/dist/enricher.js.map +1 -1
- package/dist/health-monitor.js +2 -2
- package/dist/health-monitor.js.map +1 -1
- package/dist/hooks-listener.d.ts +2 -3
- package/dist/hooks-listener.d.ts.map +1 -1
- package/dist/hooks-listener.js +103 -80
- package/dist/hooks-listener.js.map +1 -1
- package/dist/install-service.d.ts.map +1 -1
- package/dist/install-service.js +43 -30
- package/dist/install-service.js.map +1 -1
- package/dist/prompt-analyzer.d.ts +17 -0
- package/dist/prompt-analyzer.d.ts.map +1 -0
- package/dist/prompt-analyzer.js +86 -0
- package/dist/prompt-analyzer.js.map +1 -0
- package/dist/rules-detector.d.ts +9 -0
- package/dist/rules-detector.d.ts.map +1 -0
- package/dist/rules-detector.js +73 -0
- package/dist/rules-detector.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-service.js","sourceRoot":"","sources":["../install-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,iDAAyC;AACzC,qCAAkC;AAElC,MAAM,
|
|
1
|
+
{"version":3,"file":"install-service.js","sourceRoot":"","sources":["../install-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface PromptAnalysis {
|
|
2
|
+
word_count: number;
|
|
3
|
+
has_success_criteria: boolean;
|
|
4
|
+
has_format_spec: boolean;
|
|
5
|
+
has_test_criteria: boolean;
|
|
6
|
+
has_error_handling_detail: boolean;
|
|
7
|
+
has_context_references: boolean;
|
|
8
|
+
has_scope_definition: boolean;
|
|
9
|
+
specificity_score: number;
|
|
10
|
+
interaction_type: 'brainstorm' | 'plan' | 'execute' | 'correct' | 'accept' | 'question' | 'other';
|
|
11
|
+
missing_dimensions: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare class PromptAnalyzer {
|
|
14
|
+
analyze(prompt: string): PromptAnalysis;
|
|
15
|
+
private classifyInteraction;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=prompt-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-analyzer.d.ts","sourceRoot":"","sources":["../prompt-analyzer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,yBAAyB,EAAE,OAAO,CAAC;IACnC,sBAAsB,EAAE,OAAO,CAAC;IAChC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAClG,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IA8CvC,OAAO,CAAC,mBAAmB;CA6C5B"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PromptAnalyzer = void 0;
|
|
4
|
+
class PromptAnalyzer {
|
|
5
|
+
analyze(prompt) {
|
|
6
|
+
const lower = prompt.toLowerCase();
|
|
7
|
+
const wordCount = prompt.trim().split(/\s+/).filter(Boolean).length;
|
|
8
|
+
const hasSuccessCriteria = /\b(should result|expected output|verify that|acceptance criteria|definition of done|ensure that|outcome should|must produce|result should|output should|the goal is|so that|in order to)\b/i.test(prompt);
|
|
9
|
+
const hasFormatSpec = /\b(format|structure|schema|template|json|xml|yaml|like this|example:|following pattern|following format|response shape|response format|should look like|shaped like)\b/i.test(prompt);
|
|
10
|
+
const hasTestCriteria = /\b(test|unit test|e2e|end.to.end|verify|check that|should pass|spec|test case|assertion|how (to|do) (i |we )?verify|how (to|do) (i |we )?test)\b/i.test(prompt);
|
|
11
|
+
const hasErrorHandlingDetail = /\b(error code|http status|status code|4xx|5xx|error response|error schema|error format|catch block|exception type|error message format|log format|logging format|error body|error object)\b/i.test(prompt);
|
|
12
|
+
const hasContextReferences = /\b(existing|current pattern|follow the pattern|like the other|similar to|as per|consistent with|same as|based on|refer to|our convention|our standard|our approach|as we do|how we|the way we)\b/i.test(prompt);
|
|
13
|
+
const hasScopeDefinition = /\b(only|specifically|just the|limited to|scope|in scope|out of scope|exclude|include only|don'?t touch|leave .+ alone)\b/i.test(prompt)
|
|
14
|
+
|| /\b[A-Za-z0-9_-]+\.(ts|js|tsx|jsx|py|java|go|cs|rb|php|kt|swift)\b/.test(prompt);
|
|
15
|
+
const interactionType = this.classifyInteraction(prompt, lower, wordCount);
|
|
16
|
+
let score = 0;
|
|
17
|
+
if (wordCount > 20)
|
|
18
|
+
score += 10;
|
|
19
|
+
if (wordCount > 50)
|
|
20
|
+
score += 10;
|
|
21
|
+
if (hasFormatSpec)
|
|
22
|
+
score += 15;
|
|
23
|
+
if (hasSuccessCriteria)
|
|
24
|
+
score += 20;
|
|
25
|
+
if (hasContextReferences)
|
|
26
|
+
score += 15;
|
|
27
|
+
if (hasScopeDefinition)
|
|
28
|
+
score += 15;
|
|
29
|
+
if (hasErrorHandlingDetail)
|
|
30
|
+
score += 10;
|
|
31
|
+
if (hasTestCriteria)
|
|
32
|
+
score += 10;
|
|
33
|
+
const specificityScore = Math.min(score, 95);
|
|
34
|
+
const missingDimensions = [];
|
|
35
|
+
if (!hasSuccessCriteria)
|
|
36
|
+
missingDimensions.push('success_criteria');
|
|
37
|
+
if (!hasFormatSpec)
|
|
38
|
+
missingDimensions.push('format_specification');
|
|
39
|
+
if (!hasTestCriteria)
|
|
40
|
+
missingDimensions.push('test_criteria');
|
|
41
|
+
if (!hasContextReferences)
|
|
42
|
+
missingDimensions.push('context_references');
|
|
43
|
+
if (!hasScopeDefinition)
|
|
44
|
+
missingDimensions.push('scope_definition');
|
|
45
|
+
return {
|
|
46
|
+
word_count: wordCount,
|
|
47
|
+
has_success_criteria: hasSuccessCriteria,
|
|
48
|
+
has_format_spec: hasFormatSpec,
|
|
49
|
+
has_test_criteria: hasTestCriteria,
|
|
50
|
+
has_error_handling_detail: hasErrorHandlingDetail,
|
|
51
|
+
has_context_references: hasContextReferences,
|
|
52
|
+
has_scope_definition: hasScopeDefinition,
|
|
53
|
+
specificity_score: specificityScore,
|
|
54
|
+
interaction_type: interactionType,
|
|
55
|
+
missing_dimensions: missingDimensions,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
classifyInteraction(prompt, lower, wordCount) {
|
|
59
|
+
// Short acceptances — user approved or rubber-stamped
|
|
60
|
+
if (wordCount <= 6 &&
|
|
61
|
+
/\b(ok|okay|yes|yep|proceed|continue|go ahead|looks good|lgtm|done|great|perfect|thanks|sure|sounds good|approved)\b/i.test(lower)) {
|
|
62
|
+
return 'accept';
|
|
63
|
+
}
|
|
64
|
+
// Corrections — user pushing back on AI output
|
|
65
|
+
if (/\b(that('s| is) wrong|no,|that'?s incorrect|you missed|fix that|undo|revert that|that'?s not (right|what|correct)|you('?re| are) wrong|not what i (asked|wanted|meant)|you didn'?t|you forgot|mistake in your|wrong approach|not quite right)\b/i.test(lower)) {
|
|
66
|
+
return 'correct';
|
|
67
|
+
}
|
|
68
|
+
// Questions — seeking understanding, not action
|
|
69
|
+
if (wordCount < 25 &&
|
|
70
|
+
/\?/.test(prompt) &&
|
|
71
|
+
/\b(why|how (does|do|did|is)|what (is|are|does|did)|when|where|explain|describe|can you clarify|could you explain)\b/i.test(lower)) {
|
|
72
|
+
return 'question';
|
|
73
|
+
}
|
|
74
|
+
// Brainstorm — exploring ideas before committing
|
|
75
|
+
if (/\b(brainstorm|think (through|about)|let'?s explore|what are (the |some )?options|pros and cons|compare|alternatives|considerations|trade.?offs|design options|architecture options|which approach|what'?s the best way)\b/i.test(lower)) {
|
|
76
|
+
return 'brainstorm';
|
|
77
|
+
}
|
|
78
|
+
// Plan — structuring work before executing
|
|
79
|
+
if (/\b(create a plan|make a plan|let'?s plan|before (we|i|you) (start|begin|code|implement)|outline (the|a)|strategy for|roadmap|step by step|break(down| this| it) down|task list|todo list|first (let'?s|we|i)|plan (this|the|it))\b/i.test(lower)) {
|
|
80
|
+
return 'plan';
|
|
81
|
+
}
|
|
82
|
+
return 'execute';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.PromptAnalyzer = PromptAnalyzer;
|
|
86
|
+
//# sourceMappingURL=prompt-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-analyzer.js","sourceRoot":"","sources":["../prompt-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface WorkspaceRules {
|
|
2
|
+
has_cursor_rules: boolean;
|
|
3
|
+
has_cursor_rules_dir: boolean;
|
|
4
|
+
cursor_rules_count: number;
|
|
5
|
+
has_claude_md: boolean;
|
|
6
|
+
has_ai_rules: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function detectWorkspaceRules(workspacePath: string): WorkspaceRules;
|
|
9
|
+
//# sourceMappingURL=rules-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules-detector.d.ts","sourceRoot":"","sources":["../rules-detector.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,CAmC1E"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.detectWorkspaceRules = detectWorkspaceRules;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
function detectWorkspaceRules(workspacePath) {
|
|
40
|
+
try {
|
|
41
|
+
const cursorRulesFile = path.join(workspacePath, '.cursorrules');
|
|
42
|
+
const cursorRulesDir = path.join(workspacePath, '.cursor', 'rules');
|
|
43
|
+
const claudeMd = path.join(workspacePath, 'CLAUDE.md');
|
|
44
|
+
const hasCursorRulesFile = fs.existsSync(cursorRulesFile);
|
|
45
|
+
const hasCursorRulesDir = fs.existsSync(cursorRulesDir) && fs.statSync(cursorRulesDir).isDirectory();
|
|
46
|
+
let cursorRulesCount = 0;
|
|
47
|
+
if (hasCursorRulesDir) {
|
|
48
|
+
cursorRulesCount = fs.readdirSync(cursorRulesDir)
|
|
49
|
+
.filter(f => f.endsWith('.mdc') || f.endsWith('.md')).length;
|
|
50
|
+
}
|
|
51
|
+
else if (hasCursorRulesFile) {
|
|
52
|
+
cursorRulesCount = 1;
|
|
53
|
+
}
|
|
54
|
+
const hasClaudeMd = fs.existsSync(claudeMd);
|
|
55
|
+
return {
|
|
56
|
+
has_cursor_rules: hasCursorRulesFile || hasCursorRulesDir,
|
|
57
|
+
has_cursor_rules_dir: hasCursorRulesDir,
|
|
58
|
+
cursor_rules_count: cursorRulesCount,
|
|
59
|
+
has_claude_md: hasClaudeMd,
|
|
60
|
+
has_ai_rules: hasCursorRulesFile || hasCursorRulesDir || hasClaudeMd,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return {
|
|
65
|
+
has_cursor_rules: false,
|
|
66
|
+
has_cursor_rules_dir: false,
|
|
67
|
+
cursor_rules_count: 0,
|
|
68
|
+
has_claude_md: false,
|
|
69
|
+
has_ai_rules: false,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=rules-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules-detector.js","sourceRoot":"","sources":["../rules-detector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,oDAmCC;AA9CD,uCAAyB;AACzB,2CAA6B;AAU7B,SAAgB,oBAAoB,CAAC,aAAqB;IACxD,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAEvD,MAAM,kBAAkB,GAAG,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAC1D,MAAM,iBAAiB,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QAErG,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,iBAAiB,EAAE,CAAC;YACtB,gBAAgB,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC;iBAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACjE,CAAC;aAAM,IAAI,kBAAkB,EAAE,CAAC;YAC9B,gBAAgB,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE5C,OAAO;YACL,gBAAgB,EAAE,kBAAkB,IAAI,iBAAiB;YACzD,oBAAoB,EAAE,iBAAiB;YACvC,kBAAkB,EAAE,gBAAgB;YACpC,aAAa,EAAE,WAAW;YAC1B,YAAY,EAAE,kBAAkB,IAAI,iBAAiB,IAAI,WAAW;SACrE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,oBAAoB,EAAE,KAAK;YAC3B,kBAAkB,EAAE,CAAC;YACrB,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,KAAK;SACpB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tekdi/coding-analytics",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Monitor Cursor
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Monitor Cursor & Claude Code usage and send analytics to PostHog. Uses hooks to capture events.",
|
|
5
5
|
"main": "dist/cli.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"coding-analytics": "./dist/cli.js"
|