@dependabit/action 0.1.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/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/README.md +225 -0
- package/action.yml +85 -0
- package/dist/actions/check.d.ts +33 -0
- package/dist/actions/check.d.ts.map +1 -0
- package/dist/actions/check.js +162 -0
- package/dist/actions/check.js.map +1 -0
- package/dist/actions/generate.d.ts +9 -0
- package/dist/actions/generate.d.ts.map +1 -0
- package/dist/actions/generate.js +152 -0
- package/dist/actions/generate.js.map +1 -0
- package/dist/actions/update.d.ts +9 -0
- package/dist/actions/update.d.ts.map +1 -0
- package/dist/actions/update.js +246 -0
- package/dist/actions/update.js.map +1 -0
- package/dist/actions/validate.d.ts +33 -0
- package/dist/actions/validate.d.ts.map +1 -0
- package/dist/actions/validate.js +226 -0
- package/dist/actions/validate.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +114 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +154 -0
- package/dist/logger.js.map +1 -0
- package/dist/utils/agent-config.d.ts +31 -0
- package/dist/utils/agent-config.d.ts.map +1 -0
- package/dist/utils/agent-config.js +42 -0
- package/dist/utils/agent-config.js.map +1 -0
- package/dist/utils/agent-router.d.ts +33 -0
- package/dist/utils/agent-router.d.ts.map +1 -0
- package/dist/utils/agent-router.js +57 -0
- package/dist/utils/agent-router.js.map +1 -0
- package/dist/utils/errors.d.ts +51 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +219 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/inputs.d.ts +35 -0
- package/dist/utils/inputs.d.ts.map +1 -0
- package/dist/utils/inputs.js +47 -0
- package/dist/utils/inputs.js.map +1 -0
- package/dist/utils/metrics.d.ts +66 -0
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +116 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/outputs.d.ts +43 -0
- package/dist/utils/outputs.d.ts.map +1 -0
- package/dist/utils/outputs.js +146 -0
- package/dist/utils/outputs.js.map +1 -0
- package/dist/utils/performance.d.ts +100 -0
- package/dist/utils/performance.d.ts.map +1 -0
- package/dist/utils/performance.js +185 -0
- package/dist/utils/performance.js.map +1 -0
- package/dist/utils/reporter.d.ts +43 -0
- package/dist/utils/reporter.d.ts.map +1 -0
- package/dist/utils/reporter.js +122 -0
- package/dist/utils/reporter.js.map +1 -0
- package/dist/utils/secrets.d.ts +45 -0
- package/dist/utils/secrets.d.ts.map +1 -0
- package/dist/utils/secrets.js +94 -0
- package/dist/utils/secrets.js.map +1 -0
- package/package.json +45 -0
- package/src/actions/check.ts +223 -0
- package/src/actions/generate.ts +181 -0
- package/src/actions/update.ts +284 -0
- package/src/actions/validate.ts +292 -0
- package/src/index.ts +43 -0
- package/src/logger.test.ts +200 -0
- package/src/logger.ts +210 -0
- package/src/utils/agent-config.ts +61 -0
- package/src/utils/agent-router.ts +67 -0
- package/src/utils/errors.ts +251 -0
- package/src/utils/inputs.ts +75 -0
- package/src/utils/metrics.ts +169 -0
- package/src/utils/outputs.ts +202 -0
- package/src/utils/performance.ts +248 -0
- package/src/utils/reporter.ts +169 -0
- package/src/utils/secrets.ts +124 -0
- package/test/actions/check.test.ts +216 -0
- package/test/actions/generate.test.ts +82 -0
- package/test/actions/update.test.ts +70 -0
- package/test/actions/validate.test.ts +257 -0
- package/test/utils/agent-config.test.ts +112 -0
- package/test/utils/agent-router.test.ts +129 -0
- package/test/utils/metrics.test.ts +221 -0
- package/test/utils/reporter.test.ts +196 -0
- package/test/utils/secrets.test.ts +217 -0
- package/tsconfig.json +15 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Output Formatting
|
|
3
|
+
* Handles setting GitHub Action outputs and creating summaries
|
|
4
|
+
*/
|
|
5
|
+
import type { DependencyManifest } from '@dependabit/manifest';
|
|
6
|
+
/**
|
|
7
|
+
* Set outputs for the generate action
|
|
8
|
+
*/
|
|
9
|
+
export declare function setGenerateOutputs(manifest: DependencyManifest, manifestPath: string, statistics: {
|
|
10
|
+
filesScanned: number;
|
|
11
|
+
llmCalls: number;
|
|
12
|
+
totalTokens: number;
|
|
13
|
+
totalLatencyMs: number;
|
|
14
|
+
}): void;
|
|
15
|
+
/**
|
|
16
|
+
* Create a summary report for the generate action
|
|
17
|
+
*/
|
|
18
|
+
export declare function createGenerateSummary(manifest: DependencyManifest, statistics: {
|
|
19
|
+
filesScanned: number;
|
|
20
|
+
llmCalls: number;
|
|
21
|
+
totalTokens: number;
|
|
22
|
+
totalLatencyMs: number;
|
|
23
|
+
}): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Create a summary for detected dependencies
|
|
26
|
+
*/
|
|
27
|
+
export declare function createDependencyListSummary(dependencies: Array<{
|
|
28
|
+
name: string;
|
|
29
|
+
url: string;
|
|
30
|
+
type: string;
|
|
31
|
+
confidence: number;
|
|
32
|
+
}>): Promise<void>;
|
|
33
|
+
export declare function setUpdateOutputs(updatedManifest: DependencyManifest, existingManifest: DependencyManifest, filesChanged: number): void;
|
|
34
|
+
/**
|
|
35
|
+
* Create a summary report for the update action
|
|
36
|
+
*/
|
|
37
|
+
export declare function createUpdateSummary(existingManifest: DependencyManifest, updatedManifest: DependencyManifest, stats: {
|
|
38
|
+
commitsAnalyzed: number;
|
|
39
|
+
filesChanged: number;
|
|
40
|
+
urlsAdded: number;
|
|
41
|
+
urlsRemoved: number;
|
|
42
|
+
}): Promise<void>;
|
|
43
|
+
//# sourceMappingURL=outputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputs.d.ts","sourceRoot":"","sources":["../../src/utils/outputs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE;IACV,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB,GACA,IAAI,CAON;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,kBAAkB,EAC5B,UAAU,EAAE;IACV,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB,GACA,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GACnF,OAAO,CAAC,IAAI,CAAC,CAgCf;AA6BD,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,kBAAkB,EACnC,gBAAgB,EAAE,kBAAkB,EACpC,YAAY,EAAE,MAAM,GACnB,IAAI,CASN;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,gBAAgB,EAAE,kBAAkB,EACpC,eAAe,EAAE,kBAAkB,EACnC,KAAK,EAAE;IACL,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,IAAI,CAAC,CAuCf"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Output Formatting
|
|
3
|
+
* Handles setting GitHub Action outputs and creating summaries
|
|
4
|
+
*/
|
|
5
|
+
import * as core from '@actions/core';
|
|
6
|
+
/**
|
|
7
|
+
* Set outputs for the generate action
|
|
8
|
+
*/
|
|
9
|
+
export function setGenerateOutputs(manifest, manifestPath, statistics) {
|
|
10
|
+
core.setOutput('manifest_path', manifestPath);
|
|
11
|
+
core.setOutput('dependency_count', manifest.dependencies.length);
|
|
12
|
+
core.setOutput('files_scanned', statistics.filesScanned);
|
|
13
|
+
core.setOutput('llm_calls', statistics.llmCalls);
|
|
14
|
+
core.setOutput('total_tokens', statistics.totalTokens);
|
|
15
|
+
core.setOutput('average_confidence', manifest.statistics.averageConfidence);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a summary report for the generate action
|
|
19
|
+
*/
|
|
20
|
+
export async function createGenerateSummary(manifest, statistics) {
|
|
21
|
+
await core.summary
|
|
22
|
+
.addHeading('🔍 Dependency Detection Complete')
|
|
23
|
+
.addRaw('\n')
|
|
24
|
+
.addTable([
|
|
25
|
+
[
|
|
26
|
+
{ data: 'Metric', header: true },
|
|
27
|
+
{ data: 'Value', header: true }
|
|
28
|
+
],
|
|
29
|
+
['Dependencies Found', manifest.dependencies.length.toString()],
|
|
30
|
+
['Files Scanned', statistics.filesScanned.toString()],
|
|
31
|
+
['LLM Calls', statistics.llmCalls.toString()],
|
|
32
|
+
['Total Tokens Used', statistics.totalTokens.toString()],
|
|
33
|
+
['Average Confidence', `${(manifest.statistics.averageConfidence * 100).toFixed(1)}%`],
|
|
34
|
+
['Analysis Time', `${(statistics.totalLatencyMs / 1000).toFixed(2)}s`]
|
|
35
|
+
])
|
|
36
|
+
.addRaw('\n')
|
|
37
|
+
.addHeading('📊 Dependencies by Type', 3)
|
|
38
|
+
.addList(Object.entries(manifest.statistics.byType).map(([type, count]) => `${type}: ${count}`))
|
|
39
|
+
.addRaw('\n')
|
|
40
|
+
.addHeading('🔧 Dependencies by Access Method', 3)
|
|
41
|
+
.addList(Object.entries(manifest.statistics.byAccessMethod).map(([method, count]) => `${method}: ${count}`))
|
|
42
|
+
.write();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a summary for detected dependencies
|
|
46
|
+
*/
|
|
47
|
+
export async function createDependencyListSummary(dependencies) {
|
|
48
|
+
if (dependencies.length === 0) {
|
|
49
|
+
await core.summary
|
|
50
|
+
.addHeading('No Dependencies Found')
|
|
51
|
+
.addRaw('No external informational dependencies were detected in this repository.')
|
|
52
|
+
.write();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
await core.summary
|
|
56
|
+
.addHeading('🔗 Detected Dependencies', 3)
|
|
57
|
+
.addTable([
|
|
58
|
+
[
|
|
59
|
+
{ data: 'Name', header: true },
|
|
60
|
+
{ data: 'Type', header: true },
|
|
61
|
+
{ data: 'Confidence', header: true },
|
|
62
|
+
{ data: 'URL', header: true }
|
|
63
|
+
],
|
|
64
|
+
...dependencies
|
|
65
|
+
.slice(0, 20)
|
|
66
|
+
.map((dep) => [
|
|
67
|
+
dep.name,
|
|
68
|
+
dep.type,
|
|
69
|
+
`${(dep.confidence * 100).toFixed(0)}%`,
|
|
70
|
+
`[Link](${dep.url})`
|
|
71
|
+
])
|
|
72
|
+
])
|
|
73
|
+
.write();
|
|
74
|
+
if (dependencies.length > 20) {
|
|
75
|
+
await core.summary.addRaw(`\n_...and ${dependencies.length - 20} more dependencies_\n`).write();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Set outputs for the update action
|
|
80
|
+
*/
|
|
81
|
+
function countDependencyDiffs(existingManifest, updatedManifest) {
|
|
82
|
+
const existingSet = new Set(existingManifest.dependencies.map((dep) => JSON.stringify(dep)));
|
|
83
|
+
const updatedSet = new Set(updatedManifest.dependencies.map((dep) => JSON.stringify(dep)));
|
|
84
|
+
let added = 0;
|
|
85
|
+
for (const dep of updatedSet) {
|
|
86
|
+
if (!existingSet.has(dep)) {
|
|
87
|
+
added++;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
let removed = 0;
|
|
91
|
+
for (const dep of existingSet) {
|
|
92
|
+
if (!updatedSet.has(dep)) {
|
|
93
|
+
removed++;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { added, removed };
|
|
97
|
+
}
|
|
98
|
+
export function setUpdateOutputs(updatedManifest, existingManifest, filesChanged) {
|
|
99
|
+
const { added, removed } = countDependencyDiffs(existingManifest, updatedManifest);
|
|
100
|
+
const changesDetected = added > 0 || removed > 0;
|
|
101
|
+
core.setOutput('changes_detected', changesDetected);
|
|
102
|
+
core.setOutput('dependencies_added', added);
|
|
103
|
+
core.setOutput('dependencies_removed', removed);
|
|
104
|
+
core.setOutput('total_dependencies', updatedManifest.dependencies.length);
|
|
105
|
+
core.setOutput('files_analyzed', filesChanged);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create a summary report for the update action
|
|
109
|
+
*/
|
|
110
|
+
export async function createUpdateSummary(existingManifest, updatedManifest, stats) {
|
|
111
|
+
const dependenciesAdded = updatedManifest.dependencies.length - existingManifest.dependencies.length;
|
|
112
|
+
const changesDetected = dependenciesAdded !== 0;
|
|
113
|
+
await core.summary
|
|
114
|
+
.addHeading('🔄 Manifest Update Complete')
|
|
115
|
+
.addRaw('\n')
|
|
116
|
+
.addTable([
|
|
117
|
+
[
|
|
118
|
+
{ data: 'Metric', header: true },
|
|
119
|
+
{ data: 'Value', header: true }
|
|
120
|
+
],
|
|
121
|
+
['Commits Analyzed', stats.commitsAnalyzed.toString()],
|
|
122
|
+
['Files Changed', stats.filesChanged.toString()],
|
|
123
|
+
['URLs Added', stats.urlsAdded.toString()],
|
|
124
|
+
['URLs Removed', stats.urlsRemoved.toString()],
|
|
125
|
+
['Dependencies Before', existingManifest.dependencies.length.toString()],
|
|
126
|
+
['Dependencies After', updatedManifest.dependencies.length.toString()],
|
|
127
|
+
[
|
|
128
|
+
'Net Change',
|
|
129
|
+
dependenciesAdded >= 0 ? `+${dependenciesAdded}` : dependenciesAdded.toString()
|
|
130
|
+
],
|
|
131
|
+
['Changes Detected', changesDetected ? '✅ Yes' : '❌ No']
|
|
132
|
+
])
|
|
133
|
+
.write();
|
|
134
|
+
if (dependenciesAdded > 0) {
|
|
135
|
+
const newDeps = updatedManifest.dependencies
|
|
136
|
+
.filter((dep) => !existingManifest.dependencies.some((existing) => existing.url === dep.url))
|
|
137
|
+
.slice(0, 10);
|
|
138
|
+
if (newDeps.length > 0) {
|
|
139
|
+
await core.summary
|
|
140
|
+
.addHeading('🆕 New Dependencies', 3)
|
|
141
|
+
.addList(newDeps.map((dep) => `**${dep.name}**: ${dep.url} (${dep.type})`))
|
|
142
|
+
.write();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=outputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputs.js","sourceRoot":"","sources":["../../src/utils/outputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance metrics tracking for operations
|
|
3
|
+
* Tracks operation durations, API quotas, and resource usage
|
|
4
|
+
*/
|
|
5
|
+
export interface OperationMetrics {
|
|
6
|
+
operationId?: string | undefined;
|
|
7
|
+
name: string;
|
|
8
|
+
startTime: number;
|
|
9
|
+
endTime?: number | undefined;
|
|
10
|
+
duration?: number | undefined;
|
|
11
|
+
status: 'running' | 'completed' | 'failed';
|
|
12
|
+
metadata?: Record<string, unknown> | undefined;
|
|
13
|
+
}
|
|
14
|
+
export interface APIQuotaMetrics {
|
|
15
|
+
limit: number;
|
|
16
|
+
remaining: number;
|
|
17
|
+
used: number;
|
|
18
|
+
resetAt: Date;
|
|
19
|
+
percentUsed: number;
|
|
20
|
+
}
|
|
21
|
+
export interface PerformanceReport {
|
|
22
|
+
totalOperations: number;
|
|
23
|
+
completedOperations: number;
|
|
24
|
+
failedOperations: number;
|
|
25
|
+
averageDuration: number;
|
|
26
|
+
totalDuration: number;
|
|
27
|
+
apiQuota?: APIQuotaMetrics | undefined;
|
|
28
|
+
operations: OperationMetrics[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Performance metrics tracker
|
|
32
|
+
*/
|
|
33
|
+
export declare class PerformanceTracker {
|
|
34
|
+
private operations;
|
|
35
|
+
private completedOperations;
|
|
36
|
+
private apiQuota?;
|
|
37
|
+
constructor();
|
|
38
|
+
/**
|
|
39
|
+
* Start tracking an operation
|
|
40
|
+
*/
|
|
41
|
+
startOperation(name: string, metadata?: Record<string, unknown>): string;
|
|
42
|
+
/**
|
|
43
|
+
* End tracking an operation
|
|
44
|
+
*/
|
|
45
|
+
endOperation(operationId: string, status?: 'completed' | 'failed'): void;
|
|
46
|
+
/**
|
|
47
|
+
* Update API quota metrics
|
|
48
|
+
*/
|
|
49
|
+
updateAPIQuota(quota: {
|
|
50
|
+
limit: number;
|
|
51
|
+
remaining: number;
|
|
52
|
+
used: number;
|
|
53
|
+
reset: number;
|
|
54
|
+
}): void;
|
|
55
|
+
/**
|
|
56
|
+
* Get current API quota status
|
|
57
|
+
*/
|
|
58
|
+
getAPIQuota(): APIQuotaMetrics | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Get metrics for a specific operation
|
|
61
|
+
*/
|
|
62
|
+
getOperation(operationId: string): OperationMetrics | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Get all running operations
|
|
65
|
+
*/
|
|
66
|
+
getRunningOperations(): OperationMetrics[];
|
|
67
|
+
/**
|
|
68
|
+
* Get all completed operations
|
|
69
|
+
*/
|
|
70
|
+
getCompletedOperations(): OperationMetrics[];
|
|
71
|
+
/**
|
|
72
|
+
* Generate performance report
|
|
73
|
+
*/
|
|
74
|
+
generateReport(): PerformanceReport;
|
|
75
|
+
/**
|
|
76
|
+
* Get operations by name
|
|
77
|
+
*/
|
|
78
|
+
getOperationsByName(name: string): OperationMetrics[];
|
|
79
|
+
/**
|
|
80
|
+
* Calculate percentile duration for an operation
|
|
81
|
+
*/
|
|
82
|
+
getOperationPercentile(name: string, percentile: number): number;
|
|
83
|
+
/**
|
|
84
|
+
* Clear all metrics
|
|
85
|
+
*/
|
|
86
|
+
clear(): void;
|
|
87
|
+
/**
|
|
88
|
+
* Format metrics as human-readable string
|
|
89
|
+
*/
|
|
90
|
+
formatReport(report?: PerformanceReport): string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get or create global performance tracker
|
|
94
|
+
*/
|
|
95
|
+
export declare function getPerformanceTracker(): PerformanceTracker;
|
|
96
|
+
/**
|
|
97
|
+
* Track an async operation
|
|
98
|
+
*/
|
|
99
|
+
export declare function trackOperation<T>(name: string, fn: () => Promise<T>, metadata?: Record<string, unknown>): Promise<T>;
|
|
100
|
+
//# sourceMappingURL=performance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../src/utils/performance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACvC,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,CAA8B;IAE/C,cAIC;IAED;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAavE;IAED;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,WAAW,GAAG,QAAsB,GAAG,IAAI,CAYpF;IAED;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAQ7F;IAED;;OAEG;IACH,WAAW,IAAI,eAAe,GAAG,SAAS,CAEzC;IAED;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAK9D;IAED;;OAEG;IACH,oBAAoB,IAAI,gBAAgB,EAAE,CAEzC;IAED;;OAEG;IACH,sBAAsB,IAAI,gBAAgB,EAAE,CAE3C;IAED;;OAEG;IACH,cAAc,IAAI,iBAAiB,CAmBlC;IAED;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAEpD;IAED;;OAEG;IACH,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAc/D;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAIZ;IAED;;OAEG;IACH,YAAY,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAsB/C;CACF;AAOD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC,CAYZ"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance metrics tracking for operations
|
|
3
|
+
* Tracks operation durations, API quotas, and resource usage
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Performance metrics tracker
|
|
7
|
+
*/
|
|
8
|
+
export class PerformanceTracker {
|
|
9
|
+
operations;
|
|
10
|
+
completedOperations;
|
|
11
|
+
apiQuota;
|
|
12
|
+
constructor() {
|
|
13
|
+
this.operations = new Map();
|
|
14
|
+
this.completedOperations = [];
|
|
15
|
+
this.apiQuota = undefined;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Start tracking an operation
|
|
19
|
+
*/
|
|
20
|
+
startOperation(name, metadata) {
|
|
21
|
+
const operationId = `${name}-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
|
|
22
|
+
const metrics = {
|
|
23
|
+
operationId,
|
|
24
|
+
name,
|
|
25
|
+
startTime: Date.now(),
|
|
26
|
+
status: 'running',
|
|
27
|
+
metadata
|
|
28
|
+
};
|
|
29
|
+
this.operations.set(operationId, metrics);
|
|
30
|
+
return operationId;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* End tracking an operation
|
|
34
|
+
*/
|
|
35
|
+
endOperation(operationId, status = 'completed') {
|
|
36
|
+
const metrics = this.operations.get(operationId);
|
|
37
|
+
if (!metrics) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
metrics.endTime = Date.now();
|
|
41
|
+
metrics.duration = metrics.endTime - metrics.startTime;
|
|
42
|
+
metrics.status = status;
|
|
43
|
+
this.completedOperations.push(metrics);
|
|
44
|
+
this.operations.delete(operationId);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Update API quota metrics
|
|
48
|
+
*/
|
|
49
|
+
updateAPIQuota(quota) {
|
|
50
|
+
this.apiQuota = {
|
|
51
|
+
limit: quota.limit,
|
|
52
|
+
remaining: quota.remaining,
|
|
53
|
+
used: quota.used,
|
|
54
|
+
resetAt: new Date(quota.reset * 1000),
|
|
55
|
+
percentUsed: (quota.used / quota.limit) * 100
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get current API quota status
|
|
60
|
+
*/
|
|
61
|
+
getAPIQuota() {
|
|
62
|
+
return this.apiQuota;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get metrics for a specific operation
|
|
66
|
+
*/
|
|
67
|
+
getOperation(operationId) {
|
|
68
|
+
return (this.operations.get(operationId) ||
|
|
69
|
+
this.completedOperations.find((op) => op.operationId === operationId));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get all running operations
|
|
73
|
+
*/
|
|
74
|
+
getRunningOperations() {
|
|
75
|
+
return Array.from(this.operations.values());
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get all completed operations
|
|
79
|
+
*/
|
|
80
|
+
getCompletedOperations() {
|
|
81
|
+
return this.completedOperations;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Generate performance report
|
|
85
|
+
*/
|
|
86
|
+
generateReport() {
|
|
87
|
+
const allOperations = this.completedOperations;
|
|
88
|
+
const completed = allOperations.filter((op) => op.status === 'completed');
|
|
89
|
+
const failed = allOperations.filter((op) => op.status === 'failed');
|
|
90
|
+
const durations = completed.filter((op) => op.duration !== undefined).map((op) => op.duration);
|
|
91
|
+
const totalDuration = durations.reduce((sum, d) => sum + d, 0);
|
|
92
|
+
const averageDuration = durations.length > 0 ? totalDuration / durations.length : 0;
|
|
93
|
+
return {
|
|
94
|
+
totalOperations: allOperations.length,
|
|
95
|
+
completedOperations: completed.length,
|
|
96
|
+
failedOperations: failed.length,
|
|
97
|
+
averageDuration,
|
|
98
|
+
totalDuration,
|
|
99
|
+
apiQuota: this.apiQuota,
|
|
100
|
+
operations: allOperations
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get operations by name
|
|
105
|
+
*/
|
|
106
|
+
getOperationsByName(name) {
|
|
107
|
+
return this.completedOperations.filter((op) => op.name === name);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Calculate percentile duration for an operation
|
|
111
|
+
*/
|
|
112
|
+
getOperationPercentile(name, percentile) {
|
|
113
|
+
const operations = this.getOperationsByName(name);
|
|
114
|
+
const durations = operations
|
|
115
|
+
.filter((op) => op.duration !== undefined)
|
|
116
|
+
.map((op) => op.duration)
|
|
117
|
+
.sort((a, b) => a - b);
|
|
118
|
+
if (durations.length === 0) {
|
|
119
|
+
return 0;
|
|
120
|
+
}
|
|
121
|
+
const index = Math.ceil((percentile / 100) * durations.length) - 1;
|
|
122
|
+
const value = durations[Math.max(0, index)];
|
|
123
|
+
return value !== undefined ? value : 0;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Clear all metrics
|
|
127
|
+
*/
|
|
128
|
+
clear() {
|
|
129
|
+
this.operations.clear();
|
|
130
|
+
this.completedOperations = [];
|
|
131
|
+
this.apiQuota = undefined;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Format metrics as human-readable string
|
|
135
|
+
*/
|
|
136
|
+
formatReport(report) {
|
|
137
|
+
const r = report || this.generateReport();
|
|
138
|
+
const lines = [
|
|
139
|
+
'Performance Report',
|
|
140
|
+
'==================',
|
|
141
|
+
`Total Operations: ${r.totalOperations}`,
|
|
142
|
+
`Completed: ${r.completedOperations} | Failed: ${r.failedOperations}`,
|
|
143
|
+
`Average Duration: ${r.averageDuration.toFixed(2)}ms`,
|
|
144
|
+
`Total Duration: ${r.totalDuration.toFixed(2)}ms`
|
|
145
|
+
];
|
|
146
|
+
if (r.apiQuota) {
|
|
147
|
+
lines.push('');
|
|
148
|
+
lines.push('API Quota:');
|
|
149
|
+
lines.push(` Used: ${r.apiQuota.used}/${r.apiQuota.limit} (${r.apiQuota.percentUsed.toFixed(1)}%)`);
|
|
150
|
+
lines.push(` Remaining: ${r.apiQuota.remaining}`);
|
|
151
|
+
lines.push(` Resets at: ${r.apiQuota.resetAt.toISOString()}`);
|
|
152
|
+
}
|
|
153
|
+
return lines.join('\n');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Global performance tracker instance
|
|
158
|
+
*/
|
|
159
|
+
let globalTracker;
|
|
160
|
+
/**
|
|
161
|
+
* Get or create global performance tracker
|
|
162
|
+
*/
|
|
163
|
+
export function getPerformanceTracker() {
|
|
164
|
+
if (!globalTracker) {
|
|
165
|
+
globalTracker = new PerformanceTracker();
|
|
166
|
+
}
|
|
167
|
+
return globalTracker;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Track an async operation
|
|
171
|
+
*/
|
|
172
|
+
export async function trackOperation(name, fn, metadata) {
|
|
173
|
+
const tracker = getPerformanceTracker();
|
|
174
|
+
const operationId = tracker.startOperation(name, metadata);
|
|
175
|
+
try {
|
|
176
|
+
const result = await fn();
|
|
177
|
+
tracker.endOperation(operationId, 'completed');
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
tracker.endOperation(operationId, 'failed');
|
|
182
|
+
throw error;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=performance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../src/utils/performance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Summary Reporter
|
|
3
|
+
* Generates human-readable summaries for dependency change reports
|
|
4
|
+
*/
|
|
5
|
+
export interface DependencyChange {
|
|
6
|
+
dependency: {
|
|
7
|
+
id: string;
|
|
8
|
+
name?: string | undefined;
|
|
9
|
+
url: string;
|
|
10
|
+
type?: string | undefined;
|
|
11
|
+
};
|
|
12
|
+
severity: 'breaking' | 'major' | 'minor';
|
|
13
|
+
changes: string[];
|
|
14
|
+
oldVersion?: string | undefined;
|
|
15
|
+
newVersion?: string | undefined;
|
|
16
|
+
releaseNotes?: string;
|
|
17
|
+
diff?: string;
|
|
18
|
+
contentDiff?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class SummaryReporter {
|
|
21
|
+
/**
|
|
22
|
+
* Generates a summary report for all dependency changes
|
|
23
|
+
*/
|
|
24
|
+
generateSummary(changes: DependencyChange[]): string;
|
|
25
|
+
/**
|
|
26
|
+
* Generates detailed issue body for a single dependency change
|
|
27
|
+
*/
|
|
28
|
+
generateIssueBody(change: DependencyChange): string;
|
|
29
|
+
/**
|
|
30
|
+
* Formats change summary for display
|
|
31
|
+
*/
|
|
32
|
+
formatChangeSummary(change: {
|
|
33
|
+
changes: string[];
|
|
34
|
+
oldVersion?: string;
|
|
35
|
+
newVersion?: string;
|
|
36
|
+
contentDiff?: string;
|
|
37
|
+
}): string;
|
|
38
|
+
/**
|
|
39
|
+
* Formats a single change item for the summary
|
|
40
|
+
*/
|
|
41
|
+
private formatChangeItem;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/utils/reporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B,CAAC;IACF,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,eAAe;IAC1B;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAqCnD;IAED;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA+ClD;IAED;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE;QAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,MAAM,CAuBT;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAgBzB"}
|